pax_global_header00006660000000000000000000000064145714440500014516gustar00rootroot0000000000000052 comment=e50f28fba3c09aadbe503c4144796a07ff119dc6 bladeRF-2024.05/000077500000000000000000000000001457144405000131715ustar00rootroot00000000000000bladeRF-2024.05/.clang-format000066400000000000000000000052321457144405000155460ustar00rootroot00000000000000# clang-format configuration for bladeRF project # Based on style_and_conventions.md --- Language: Cpp # Indentation and Whitespace UseTab: Never IndentWidth: 4 TabWidth: 4 # Formatting ColumnLimit: 80 AlignAfterOpenBracket: Align AlignConsecutiveAssignments: true AlignConsecutiveDeclarations: false AllowShortBlocksOnASingleLine: false AllowShortCaseLabelsOnASingleLine: false AllowShortIfStatementsOnASingleLine: false AllowShortLoopsOnASingleLine: false AlwaysBreakAfterDefinitionReturnType: None AlwaysBreakAfterReturnType: None BinPackArguments: true BinPackParameters: false BreakBeforeBraces: Custom BraceWrapping: AfterClass: false AfterControlStatement: false AfterEnum: false AfterFunction: true AfterNamespace: true AfterStruct: false AfterUnion: false BeforeCatch: false BeforeElse: false IndentBraces: false DerivePointerAlignment: false IndentCaseLabels: true PointerAlignment: Right ReflowComments: true SpaceBeforeAssignmentOperators: true SpaceBeforeParens: ControlStatements SpaceInEmptyParentheses: false SpacesInParentheses: false SpacesInSquareBrackets: false # Unspecified judgement calls! AlignEscapedNewlinesLeft: true AlignOperands: true AlignTrailingComments: true AllowAllParametersOfDeclarationOnNextLine: true AllowShortFunctionsOnASingleLine: Empty AlwaysBreakBeforeMultilineStrings: false AlwaysBreakTemplateDeclarations: false BreakBeforeBinaryOperators: None BreakBeforeTernaryOperators: true BreakStringLiterals: true ConstructorInitializerAllOnOneLineOrOnePerLine: false ConstructorInitializerIndentWidth: 4 ContinuationIndentWidth: 4 Cpp11BracedListStyle: false ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ] IndentWrappedFunctionNames: true KeepEmptyLinesAtTheStartOfBlocks: false MaxEmptyLinesToKeep: 2 NamespaceIndentation: All SortIncludes: true SpaceAfterCStyleCast: false SpaceAfterTemplateKeyword: true SpacesBeforeTrailingComments: 2 SpacesInAngles: false SpacesInCStyleCastParentheses: false SpacesInContainerLiterals: false # Misc AccessModifierOffset: -2 CommentPragmas: '^ IWYU pragma:' DisableFormat: false ExperimentalAutoDetectBinPacking: false IncludeIsMainRegex: '$' MacroBlockBegin: '' MacroBlockEnd: '' PenaltyBreakBeforeFirstCallParameter: 19 PenaltyBreakComment: 300 PenaltyBreakFirstLessLess: 120 PenaltyBreakString: 1000 PenaltyExcessCharacter: 1000000 PenaltyReturnTypeOnItsOwnLine: 400 Standard: Cpp11 #FIXME IncludeCategories: - Regex: '^"(llvm|llvm-c|clang|clang-c)/' Priority: 2 - Regex: '^(<|"(gtest|isl|json)/)' Priority: 3 - Regex: '.*' Priority: 1 ... bladeRF-2024.05/.gitignore000066400000000000000000000013471457144405000151660ustar00rootroot00000000000000*.o *.elf *.img *.sw[a-p] *~ *.cmd *.order *.rpt *.map *.ko *.mod.c *.rbf *.symvers *.bsf *.cmp *.objdump *.orig .tmp_versions .dir-locals.el GPATH GTAGS GRTAGS tags TAGS cscope.files cscope.out hdl/quartus/work/* hdl/quartus/hostedx* hdl/quartus/atsc_txx* hdl/quartus/fsk_bridgex* hdl/quartus/qpsk_txx* fx3_firmware/make/toolchain.mk fx3_firmware/build/* build/* host/build/* host/examples/gnuradio/frs/bladeRF_frs.py host/libraries/libbladeRF/doc/doxygen/html host/libraries/libbladeRF/doc/doxygen/Doxyfile host/libraries/libbladeRF/lib host/libraries/libbladeRF/bin host/misc/windows/scripts/bladeRF-env.bat host/misc/windows/scripts/work **/.qsys_edit **/modelsim/transcript **/modelsim/*.wlf **/modelsim/work/ **/modelsim/nuand/ bladeRF-2024.05/.gitmodules000066400000000000000000000002141457144405000153430ustar00rootroot00000000000000[submodule "thirdparty/analogdevicesinc/no-OS"] path = thirdparty/analogdevicesinc/no-OS url = https://github.com/analogdevicesinc/no-OS/ bladeRF-2024.05/CHANGELOG000066400000000000000000002031521457144405000144060ustar00rootroot00000000000000================================================================================ bladeRF Project Change Log Summary For more detailed information, please see the git change log and issue tracker hosted on GitHub: https://github.com/Nuand/bladeRF ================================================================================ -------------------------------------------------------------------------------- 2023.02 (2023-02-13) -------------------------------------------------------------------------------- This release candidate consists of the following versions: * FPGA bitstream v0.15.0 * FX3 firmware v2.4.0 * libbladeRF v2.5.0 * bladeRF-cli v1.9.0 * MATLAB & Simulink bindings v1.0.5 * Python bindings v1.3.0 API docs: https://www.nuand.com/bladeRF-doc/libbladeRF/ FX3 firmware: https://www.nuand.com/fx3_images/ FPGA bitstreams: https://www.nuand.com/fpga_images/ Ubuntu PPA: https://launchpad.net/~nuandllc/+archive/ubuntu/bladerf Windows installer: https://www.nuand.com/win_installers/ Summary of changes in 2023.02 * libbladeRF - Add 8bit format mode support - Add AD936x overclocking feature - Fix bugs, including a locking bug * FPGA: - Add 8bit mode support to FIFO reader and writer -------------------------------------------------------------------------------- 2021.10 (2021-10-04) -------------------------------------------------------------------------------- This release candidate consists of the following versions: * FPGA bitstream v0.14.0 * FX3 firmware v2.4.0 * libbladeRF v2.4.1 * bladeRF-cli v1.8.0 * MATLAB & Simulink bindings v1.0.5 * Python bindings v1.2.1 API docs: https://www.nuand.com/bladeRF-doc/libbladeRF/ FX3 firmware: https://www.nuand.com/fx3_images/ FPGA bitstreams: https://www.nuand.com/fpga_images/ Ubuntu PPA: https://launchpad.net/~nuandllc/+archive/ubuntu/bladerf Windows installer: https://www.nuand.com/win_installers/ Summary of changes in 2021.10 * libbladeRF - Fix up packet mode bugs - Add Wishbone master core as NiOS peripheral * FPGA: - Fix several bugs in packet mode buffering mechanism - Add Wishbone master core as NiOS peripheral - Add support for bladeRF 2.0 micro xA5 -------------------------------------------------------------------------------- 2020.12 (2020-12-23) -------------------------------------------------------------------------------- This release candidate consists of the following versions: * FPGA bitstream v0.12.0 * FX3 firmware v2.4.0 * libbladeRF v2.4.0 * bladeRF-cli v1.8.0 * MATLAB & Simulink bindings v1.0.3 * Python bindings v1.2.0 API docs: https://www.nuand.com/bladeRF-doc/libbladeRF/ FX3 firmware: https://www.nuand.com/fx3_images/ FPGA bitstreams: https://www.nuand.com/fpga_images/ Ubuntu PPA: https://launchpad.net/~nuand/+archive/ubuntu/bladerf Windows installer: https://www.nuand.com/win_installers/ Summary of changes in 2020.12 * libbladeRF - Added packet mode format BLADERF_FORMAT_PACKET_META. libbladeRF is able to exchange variable length packets with the HDL if packet mode is enabled - Added RFIC parameters for burst waveforms - Ability to query backend for handle and lock * FX3 - Variable length packet support for PACKET_META mode * bladeRF-cli: - Indicate presence of packet cores in FPGA * FPGA: - Add packet mode. The HDL fabric is able to exchange variable length packets with the host - Added packet_generator as an example for how to send packets to the host - Added bladeRF 2.0 micro headless example variant "foxhunt" - Fix metadata related arithmetic and logic * Python - Update for libbladeRF v2.4.0 -------------------------------------------------------------------------------- 2019.07 (2019-07-31) -------------------------------------------------------------------------------- This release candidate consists of the following versions: * FPGA bitstream v0.11.0 * FX3 firmware v2.3.2 * libbladeRF v2.2.1 * bladeRF-cli v1.8.0 * MATLAB & Simulink bindings v1.0.3 * Python bindings v1.2.0 API docs: https://www.nuand.com/bladeRF-doc/libbladeRF/ FX3 firmware: https://www.nuand.com/fx3_images/ FPGA bitstreams: https://www.nuand.com/fpga_images/ Ubuntu PPA: https://launchpad.net/~nuand/+archive/ubuntu/bladerf Windows installer: https://www.nuand.com/win_installers/ Summary of changes in 2019.07 * libbladeRF - Gain mode setting default is now manual - Tuning mode setting default is now host - Add OTP command support - Fix metadata related arithmetic * bladeRF-cli: - Add RFIC fitler selection - Add tuning_mode - Display more useful warning and error messages * FPGA: - Increase FIFO buffer sizes for bladeRF 2.0 - Fix underflow and overflow issues in metadata code - Refactor RFIC code for bladeRF 2.0 - Allow quicktune to control XB gpio register for XB-200 * Python - Update for libbladeRF v2.2.1 -------------------------------------------------------------------------------- 2018.12-rc2 (2018-12-21) -------------------------------------------------------------------------------- This release candidate consists of the following versions: * FPGA bitstream v0.10.2 * FX3 firmware v2.3.1 * libbladeRF v2.2.0 * bladeRF-cli v1.7.1 * MATLAB & Simulink bindings v1.0.3 * Python bindings v1.1.1 The major new features in this release candidate are: * FPGA-based RFIC control for the bladeRF 2.0 micro family * Quick-tuning support for the bladeRF 2.0 micro family Summary of changes since 2018.10-rc1: * FPGA - Add quick tuning for bladerf2 devices - Add FPGA-based RFIC control for bladerf2 devices * libbladeRF - Fix FPGA image flashing on bladerf2 xA9 devices (#571) - Fix bladerf_set_gain() being off by a few dB on bladerf1 devices - Add `biastee_rx` and `biastee_tx` config file options - Add support for quick tuning and FPGA-based RFIC control * bladeRF-cli - Fix memory leak in CSV-to-SC16Q11 conversion (#694) - Update for libbladeRF v2.2.0 * MATLAB & Simulink bindings - Update for libbladeRF v2.2.0 * Python - Fix warning on `bladerf-tool info` - Update for libbladeRF v2.2.0 -------------------------------------------------------------------------------- 2018.10-rc1 (2018-10-30) -------------------------------------------------------------------------------- This release introduces new functionality and bug fixes, generally expanding support for the bladeRF 2.0 Micro. It consists of the following versions: * FPGA bitstream v0.9.0 * FX3 firmware v2.3.1 * libbladeRF v2.1.0 * bladeRF-cli v1.7.0 * MATLAB & Simulink bindings v1.0.2 * Python bindings v1.1.0 Note to bladerf1 (x40/x115) users: AGC will not work with FPGA versions older than v0.8.0, due to a change in the control register mapping. A warning will be printed during device initialization if you are using an affected FPGA version. Summary of changes since 2018.08: * FPGA - Support for the ADS-B core on bladeRF micro - Add metadata flags for miniexp{1,2} IO pin status - Fix race condition during FX3/Nios UART initialization - Fix bugs in bladeRF AGC control - Timing closure improvements - Build system fixes * FX3 - Fix USB device reset interrupting SPI flash autoloading of FPGA images - Add BLADE_USB_CMD_QUERY_FLASH_ID command - Add BLADE_USB_CMD_QUERY_FPGA_SOURCE command * libbladeRF - API additions: - Add format macros for bladerf_frequency and bladerf_timestamp - Add 'manufacturer' and 'product' device description strings to bladerf_devinfo struct - Add bladerf_get_serial_struct() API function - Add bladerf_get_flash_size() API function - Add bladerf_trigger_signal values for J51-1 (bladerf2) and Miniexp-1 (generic) - Add bladerf_get_fpga_source() API function - Add meta RX hardware flags for underflow, miniexp{1,2} - Fixes: - bladerf2: support TX frequencies down to 47 MHz - bladerf2: support sample rates down to 0.521 Msps - bladerf1: fix BLADERF_GPIO_AGC_ENABLE - bladerf2: fix bladerf_trigger_arm implementation - streaming: extend USB transfer timeout to match the configured stream timeout - Misc: - Install the doxygen docs, if generated - Adjust RX gain mode lists for clarity - bladerf1: implement bladerf_{get,set}_rf_port[s] - bladerf1: skip initialization if BLADERF_FORCE_NO_FPGA_PRESENT is set * bladeRF-cli - Add libedit support - Ensure device is initialized after deferred open - info: display manufacturer, product, flash size - print: show RF routing on bladerf1 - print: display supported ranges for sample rate, bandwidth, frequency - probe: handle already-open devices - version: display FPGA configuration source * MATLAB & Simulink bindings - Add missing BB_TXVGA1_RXLPF loopback option - Fix tx_gain property handling in simulink * Python - Fix rx_channel_count, tx_channel_count - Update with latest API functions * Windows installer - install-drivers: install a driver for the bootloader VID/PID (04b4:00f3), allowing easier FX3 bootloader recovery operations - Upgrade to libusb 1.0.22 -------------------------------------------------------------------------------- 2018.08 (2018-08-30) -------------------------------------------------------------------------------- This release introduces new functionality and bug fixes, particularly support for the bladeRF 2.0 Micro product. It consists of the following versions: * FPGA bitstream v0.7.3 * FX3 firmware v2.2.0 * libbladeRF v2.0.2 * bladeRF-cli v1.6.1 * MATLAB & Simulink bindings v1.0.1 * Python bindings v1.0.1 ***************************************************************************** *** libbladeRF v2.0 introduces a number of breaking changes !! *** ***************************************************************************** *** Please see relnotes_2_0 in the Doxygen documentation for a full *** *** discussion of the changes in libbladeRF v2.0. *** ***************************************************************************** Summary of changes since 2016.06: * FPGA - Added support for Automatic Gain Control - Redesign build system to support multiple product models - Initial release with bladeRF Micro support - Refactoring, bug fixes, and other misc. improvements * FX3 - Add support for the bladeRF 2.0 (2cf0:5250). - Fix loading FPGA bitstreams from flash when there is nothing connected to the USB connector. - Move USB descriptor consts to .usbdscr section so the linker glomps them. * libbladeRF - Added support for Automatic Gain Control - Added bladeRF.conf config option file - Refactor to support for multiple product lines - Add support for the bladeRF Micro product - API: replace bladerf_module with bladerf_channel, a reverse-compatible change to handle products with multiple independent RF paths in the same direction - API: BREAKING CHANGE - on bladerf_set_frequency, et al, the frequency parameter is now uint64_t instead of unsigned int - Add typedefs for common param types, e.g. bladerf_frequency -> uint64_t * bladeRF-cli - Added support for Automatic Gain Control - No longer initializes the bladeRF before loading a new FPGA image, to avoid potential catch-22 problems - bladeRF 2.0 Micro support - Support for MIMO RX and TX using "channel=" parameter on rx/tx config - Various code quality fixups * MATLAB & Simulink bindings - Add support for bladeRF 2.0 (Micro) products - Change "not supported" (-8) library errors to Matlab warnings temporarily, to permit some grace while others' scripts are updated. - Update bladeRF_XCVR to use new unified gain control - Add bladeRF_Misc for misc measurements and controls - Update bladeRF_rx_gui to support unified gain - Update Simulink block to match libbladeRF v2.0.0 * Python - New in 2018.08 -------------------------------------------------------------------------------- 2018.08-rc3 (2018-08-24) -------------------------------------------------------------------------------- Bugfix release candidate. * FPGA bitstream v0.7.3 * FX3 firmware v2.2.0 * libbladeRF v2.0.1 * bladeRF-cli v1.6.1 * MATLAB & Simulink bindings v1.0.1 * Python bindings v1.0.1 libbladeRF v2.0.1: * Detect and handle a bladeRF Micro that is running old firmware to allow re-flashing without recovery mode (#578) * bladeRF1: bladerf_set_gain_mode returning BLADERF_ERR_UNSUPPORTED is no longer fatal (#542) * bladeRF1: only check AGC DC LUT setting when enabling AGC * bladeRF1: typo fix in set_tx_gain (#580) * xb200: check for null xb_data before dereferencing it (#575) * bladeRF2: cache factory trimdac value at initialization; preserve trimdac disable state on bladerf2_trim_dac_write (#582) * bladeRF2: bladerf_clock_select: replace CLOCK_SELECT_VCTCXO with CLOCK_SELECT_ONBOARD for clarity (#585) * Improvements to the release notes (#583) * bladeRF-cli: Add 200 ms delay before probing PLL lock status (#587) * Windows: add a nanosleep() shim (#589) bladeRF-cli v1.6.1: * "set loopback" help dialog aware of board type (#566) * host: libbladeRF: Rename clock select option * host: bladeRF-cli: Add 200 ms delay before probing PLL lock status (#587) * host: add nanosleep shim for Windows (#589) MATLAB v1.0.1: * host: libbladeRF: Rename clock select option Python v1.0.1: * host: libbladeRF: Rename clock select option -------------------------------------------------------------------------------- 2018.08-rc2 (2018-08-16) -------------------------------------------------------------------------------- Minor bugfix release. Fixes packaging on Debian/Ubuntu. * FPGA bitstream v0.7.3 * FX3 firmware v2.2.0 * libbladeRF v2.0.0 * bladeRF-cli v1.6.0 * MATLAB & Simulink bindings v1.0.0 * Python bindings v1.0.0 Fixes: * libbladeRF: FreeBSD build fixes (#561) * libbladeRF: 32-bit architecture fixes (#573) -------------------------------------------------------------------------------- 2018.08-rc1 (2018-08-15) -------------------------------------------------------------------------------- Initial public release of libbladeRF v2.0, etc. Adds support for the bladeRF 2.0 Micro. * FPGA bitstream v0.7.3 * FX3 firmware v2.2.0 * libbladeRF v2.0.0 * bladeRF-cli v1.6.0 * MATLAB & Simulink bindings v1.0.0 * Python bindings v1.0.0 -------------------------------------------------------------------------------- 2018.03-alpha1 (2018-03-26) -------------------------------------------------------------------------------- FIXME: NEEDS A CHANGELOG SUMMARY This version is part of development series of changes, not an official release. * FPGA bitstream v0.7.2 * FX3 firmware v2.1.0 * libbladeRF v1.9.1 * bladeRF-cli v1.5.2 * MATLAB & Simulink bindings v0.1.3 * Python bindings v0.9.1 -------------------------------------------------------------------------------- 2017.12-rc1 (2017-12-08) -------------------------------------------------------------------------------- FIXME: NEEDS A CHANGELOG SUMMARY * FPGA bitstream v0.7.1 * FX3 firmware v2.0.0 * libbladeRF v1.9.0 * bladeRF-cli v1.5.1 * MATLAB & Simulink bindings v0.1.2 -------------------------------------------------------------------------------- 2016.06 (2016-06-29) -------------------------------------------------------------------------------- This release introduces new functionality and bug fixes. It consists of the following versions: * FPGA bitstream v0.6.0 * FX3 firmware v2.0.0 * libbladeRF v1.7.2 * bladeRF-cli v1.4.0 * MATLAB & Simulink bindings v0.1.2 New Features: * libbladeRF, bladeRF-cli - Added SMB clock control functionality - Added synchronization trigger functionality - Added XB-300 support - Added detection for v2.0.0 firmware series (new VID/PID) * FPGA - Added synchronization trigger functionality using J71 header (pin 4) - Added ADSB top-level architecture for out-of-tree ADSB core + https://github.com/nuand/bladeRF-adsb * FX3 - 2.x.y series of firmware introduces new VID/PID * libbladeRF API documentation - Re-organized into more cohesive sections - Added additional clarifications and corrections * Miscellaneous: - Windows builds updated to search for libusb 1.0.20 by default - Added GNU Radio Companion loopback example The following issue tracker items have been closed since 2015.01-rc1: * Bugs: - #474: [libbladeRF] Clarify required SMB clock port config prior to trigger API usage - #470: [libbladeRF] VS2012 Build failure (cannot find stdbool.h) - #468: BLADERF_FORMAT_SC16_Q11_META docs confusing - #466: [bladeRF-cli] First open fails when device has incompatible FPGA/FW - #465: [libbladeRF] TX Timeout Regression - #462: [invalid] cmake build failure on CentOS 7.2 - #460: [libbladeRF] Explain when (not) to use bladerf_get_timestamp() - #459: [invalid] [libbladeRF] Build failure reported on MS VS2013 - #458: [libbladerf] assertion failed in sync_worker.c, tx_callback after bug 438 fix - #457: [libbladeRF] bladerf_sync_tx() clears burst regardless of return - #454: [debian] bladerf-fpga-hostedx40 leaves bad rbf file around if the download fails - #453: [bladeRF-cli] Automatic DC Calibration does not appear to apply nominal value - #450: host/common items missing extern "C" { ... } - #448: Build broken on big-endian targets - #446: Wrong loopback mode name for Simulink IF - #354: [hdl] failure to include STP file due to talkback req ought to be fatal * Enhancement: - #463: Adding SignalTap in scripted build - #403: LibbladeRF support for setting MIMO mode - #221: Synchronized Tx/Rx of multiple bladeRFs for MIMO using Mini Expansion Header - #174: Migrate FX3 build to CMake-generated Makefile * Other: - #432: Error building on Pi Outstanding issue tracker items: * Bugs: - #475: [libbladeRF] Windows 10 builds fail if CyFX3 SDK is present - #473: [Windows][libbladeRF][duplicate] Triggered TX Stalls on Cypress Backend - #472: [libbladeRF, FX3] bladerf_device_reset() does not allow libbladeRF to close device cleanly - #471: [nios] VCTCXO Trim DAC Readback is implemented incorrectly - #464: [bladeRF-cli] `probe` can't access already opened devices (libusb, Windows) - #447: Build broken on MSVC2015 (ptheads timespec conflict) - #443: [libbladeRF] Cypress backend timeouts & receiving NULL buffers upon transfer completion - #442: [FX3 Firmware] Jump to bootloader after NULL interface is restored - #427: [libbladeRF] Cannot set some samplerates returned by bladerf_set_rational_rate() - #408: [libbladeRF] Device hangs after repeated open/stream/close - #401: libusb detection fails when x-compiling for Android - #390: Warning after running rx start when loopback=firmware - #360: [hdl] Older FPGA revisions no longer build - #352: [libbladeRF] Intermittent out-of-order transfer callbacks with Windows & libusb 1.0.19 - #301: Direct sampling with XB-200 needs additional improvements * Enhancements: - #452: [Simulink] Integrate Signal Specification to RX - #439: [libbladeRF] Move submit_stream_buffer implementations up a layer. (Has pending PR #467) - #431: Halfband filtering - #430: Fs/4 Mix - #428: Low-rate stream formats - #416: Add CMake project config files - #395: [hdl] Timing Closure on LMS6 SPI interface - #382: 'bladerf_get_serial()' fixed buffer size should be ideally handled in the API - #321: How about a switch for bladeRF-cli to emit calibration in a format bladeRF-cli can later read? - #319: [bladeRF-cli] Add libedit and libreadline support * Other: - #388: [FX3 Firmware] Investigate USB3 drive controls - #344: [fx3] Investigate/fix field checksums - #328: [libbladeRF] Review and evaluate use of stream lock WRT libusb -------------------------------------------------------------------------------- 2016.01-rc1 (2016-01-07) -------------------------------------------------------------------------------- This release introduces new functionality and bug fixes. It consists of the following versions: * FPGA bitstream v0.5.0 * FX3 firmware v1.9.0 * libbladeRF v1.5.1 * bladeRF-cli v1.3.1 * MATLAB & Simulink bindings v0.1.1 New Features: * MATLAB & Simulink - An object-oriented MATLAB interface has been introduced. This is implemented as bindings atop of libbladeRF, and will be maintained alongside libbladeRF in the libbladeRF_bindings/matlab directory. - Simulink support is provided via the above MATLAB interface and the Simulink System Object block. * libbladeRF, bladeRF-cli: - XB-100 support added * FPGA, libbladeRF, bladeRF-cli: - A 1.8V 1 PPS or 10 MHz input may be supplied to the device to tame the on-board VCTCXO * FX3 Firmware, libbladeRF, bladeRF-cli: - A simple logging mechanism has been introduced. This allows the host to retrieve error codes and the source lines at which they occurred. * FX3 Firmware: - Updated for Cypress FX3 SDK v1.3.3 * Miscellaneous: - Revised and MIT-licensed DC calibration routines are now available in host/common/. The following issue tracker items have been closed since the 2015.07 release: * Pull Requests: - #437: debian: firmware to v1.8.1, fpga to v0.4.1 - #433: Add a libbladeRF helper function for setting the `rx_mux` setting in the FPGA - #424: Add support for setting SMB clock output to arbitrary frequency - #421: bladeRF-cli improvement and xb-200 filter fixes - #419: Minimal changeset for bladeRF to build on freebsd - #381: Rpm packaing [CAA Needed] - #379: Indent [wontfix] - #267: Adjust nios simulation component so it matches the synthesis version * Bugs: - #438: [libbladeRF] bladerf_sync_tx() is limited by # xfers, not # buffers - #436: [bladeRF-cli][libbladeRF] `cal dc tx` crashes when using Cypress backend - #426: XB-200 Reference Clock and MIMO Master clock are mutually exclusive - #425: [bladeRF-cli] Perform DC Cal with RX/TX frequencies separated by >= 1 MHz - #423: [bladeRF-cli] Add 'xb_spi', 'xb_gpio', and 'xb_gpio_dir' to print/set help text - #422: [bladeRF-cli] Make 'help print' and 'help set' formatting match - #420: libbladeRF_test: Build broken for big endian hosts - #417: libbladeRF: Tuning warnings and failures - #416: [libbladeRF] Format specifier typos in nios_access.c - #415: [libbladeRF] add/data mismatch in nio_access.c verbose log messages - #412: [bladeRF-cli] Calibration often fails - #373: "trap divide error" while generating calibration table in CLI: cal table dc rx - #362: Calibration table generation hangs, performance issues * Enhancements: - #414: 10 MHz reference clock support - #410: [libbladeRF] Provide a separate "Access denied" error code - #409: [bladeRF-cli] Report file access issues prior to DC cal table procedure - #387: FPGA GPIO Bindings to BladeRF / Osmocom Library - #353: [bladeRF-cli, libbladeRF] Improve jump_to_boot docs and implementation - #236: [libbladeRF] API calls for XB-100 required - #205: [FX3 Firmware] Code cleanup and potential improvements * Other: - #399: Update libbladeRF and FX3 FIrmware for Cypress FX3 SDK 1.3.3 support - #342: [Installer] Windows installer doesn't ship 32-bit MATLAB support [wontfix] - #240: [libbladeRF] Prefer static assertion over assert() when possible Outstanding issue tracker items: * Bugs: - #443: [libbladeRF] Cypress backend receiving NULL buffers upon transfer completion - #442: [FX3 Firmware] Jump to bootloader after NULL interface is restored - #427: [libbladeRF] Cannot set some samplerates returned by bladerf_set_rational_rate() - #408: [libbladeRF] Device hangs after repeated open/stream/close - #401: libusb detection fails when x-compiling for Android - #390: Warning after running rx start when loopback=firmware - #360: [hdl] Older FPGA revisions no longer build - #354: [hdl] failure to include STP file due to talkback req ought to be fatal - #352: [libbladeRF] Intermittent out-of-order transfer callbacks with Windows & libusb 1.0.19 - #301: Direct sampling with XB-200 needs additional improvements * Enhancements: - #439: [libbladeRF] Move submit_stream_buffer implementations up a layer - #431: Halfband filtering - #430: Fs/4 Mix - #428: Low-rate stream formats - #418: Add CMake project config files - #403: LibbladeRF support for setting MIMO mode - #395: [hdl] Timing Closure on LMS6 SPI interface - #388: [FX3 Firmware] Investigate USB3 drive controls - #382: 'bladerf_get_serial()' fixed buffer size should be ideally handled in the API - #344: [fx3] Investigate/fix field checksums - #328: [libbladeRF] Review and evaluate use of stream lock WRT libusb - #321: How about a switch for bladeRF-cli to emit calibration in a format bladeRF-cli can later read? - #319: [bladeRF-cli] Add libedit and libreadline support - #221: Synchronized Tx/Rx of multiple bladeRFs for MIMO using Mini Expansion Header - #174: Migrate FX3 build to CMake-generated Makefile -------------------------------------------------------------------------------- 2015.07 (2015-07-25) -------------------------------------------------------------------------------- This release introduces minor feature additions and bug fixes. It consists of the following versions: * FPGA bitstream v0.3.4 * FX3 firmware v1.8.0 * libbladeRF v1.4.3 * bladeRF-cli v1.2.1 New Features: * libbladeRF: - bladerf_open() and bladerf_open_with_devinfo() support matching a device via a subset of its serial number. For example, the bladeRF-cli uses bladerf_open() to open a specifed device, so the following can now be used to open a device with the serial number, f12ce1037830a1b27f3ceeba1f521413: bladeRF-cli -i -d "*:serial=f12" * Miscellaneous - Added Octave/MATLAB routines to import/export data from files containing complex samples from GNU Radio. The following tracker items have been closed since the 2015.06-rc1 release: * Pull Requests: - #402: fixup debian/changelog * Bugs: - #413: [libbladeRF] Bursts must end with 3 zero samples, not 2. - #411: [libbladeRF] File search uses hardcoded /usr/share and /etc, should use install prefix - #405: lms.c: Fail to correctly exit loopback mode for f >= 1.5 GHz - #404: [libbladeRF] XB-200 filter bank selection regression in 41476cb - #400: [hdl] ATSC FPGA build broken * Enhancements: - #396: [libbladeRF] Match a subset of serial number * Other: - #407: Setting Loopback resets/changes Rx module frequency [duplicate] - #406: Persistent timeouts after using API [invalid] - #397: [libbladeRF] API call to reset timestamps [wontfix] Outstanding issue tracker items: * Pull Requests: - #381: RPM packaging - #379: Indent - #267: Adjust nios simulation component so it matches the synthesis version * Bugs: - #412: [bladeRF-cli] Calibration often fails - #408: [libbladeRF] Device hangs after repeated open/stream/close - #401: libusb detection fails when x-compiling for Android - #400: [hdl] ATSC FPGA build broken - #399: Update libbladeRF and FX3 Firmware for Cypress FX3 SDK 1.3.3 support - #395: [hdl] Timing Closure on LMS6 SPI interface - #390: Warning after running rx start when loopback=firmware - #373: "trap divide error" while generating calibration table in CLI: cal table dc rx - #362: Calibration table generation hangs, performance issues - #360: [hdl] Older FPGA revisions no longer build - #354: [hdl] failure to include STP file due to talkback req ought to be fatal - #352: [libbladeRF] Intermittent out-of-order transfer callbacks with Windows & libusb 1.0.19 - #342: [Installer] Windows installer doesn't ship 32-bit MATLAB support - #321: How about a switch for bladeRF-cli to emit calibration in a format bladeRF-cli can later read? - #301: Direct sampling with XB-200 needs additional improvements * Enhancements: - #410: [libbladeRF] Provide a separate "Access denied" error code - #409: [bladeRF-cli] Report file access issues prior to DC cal table procedure - #403: LibbladeRF support for setting MIMO mode - #387: FPGA GPIO Bindings to BladeRF / Osmocom Library - #382: 'bladerf_get_serial()' fixed buffer size should be ideally handled in the API - #386: android usb bindings - #353: [bladeRF-cli, libbladeRF] Improve jump_to_boot docs and implementation - #344: [fx3] Investigate/fix field checksums - #328: [libbladeRF] Review and evaluate use of stream lock WRT libusb - #319: [bladeRF-cli] Add libedit and libreadline support - #240: [libbladeRF] Prefer static assertion over assert() when possible - #236: [libbladeRF] API calls for XB-100 required - #221: Synchronized Tx/Rx of multiple bladeRFs for MIMO using Mini Expansion Header - #205: [FX3 Firmware] Code cleanup and potential improvements - #174: Migrate FX3 build to CMake-generated Makefile * Other: - #388: [FX3 Firmware] Investigate USB3 drive controls -------------------------------------------------------------------------------- 2015.06-rc1 (2015-06-30) -------------------------------------------------------------------------------- This release introduces new features and bug fixes. It consists of the following versions: * FPGA bitstream v0.3.3 * FX3 firmware v1.8.0 * libbladeRF v1.4.0 * bladeRF-cli v1.2.0 New Features: * FPGA & libbladeRF: - Configurable tuning modes: host and fpga - Scheduled retune: retune module at specified sample timestamp - Quick retune: retune using previously identified tuning parameters - Readback of current VCTCXO trim DAC setting * bladeRF-cli: - Semicolon command separators - Added 'print trimdac' implementation The following tracker items have been closed since the 2015.02 release: * Pull Requests: - #383: rm dead code from xb.c - #358: bladeRF-cli: Can now specify multiple commands separated by semicolon - #313: merge dev-quartus14 branch * Bugs: - #394: Cannot switch from XB-200 "auto" back to a specific band - #385: libbladeRF: TX PLL Instability @ 1.8602 GHz - #384: Documentation bug - #380: bladerf_set_tx_gain() is a deprecated symbol * Enhancements: - #398: [libbladeRF] VCTCXO readback support - #393; [libbladeRF] Migrate to new NIOS packet handler formats - #392: [nios] Implement pkt_x handlers. - #391: [FPGA] Custom LMS6002D SPI controller - #380: bladerf_set_tx_gain() is a deprecated symbol - #378: [libbladeRF] Support zero-padding within a timestamped burst - #345: [bladeRF-cli] Accept semi-colon command delimeters - #282: [libbladeRF] Move get/set_lms_correction() and get/set_fpga_correction() logic - #213: CLI should show sample file information for TX [wontfix] - #200: Reserved addresses for firmware customization * Other: - #389: libbladeRF: Investigate LMS6002D OFFUP/OFFDOWN values - #377: Timeout trying to update from firmware 1.5.3 Outstanding issue tracker items: * Pull Requests: - #381: RPM packaging - #379: Indent - #267: Adjust nios simulation component so it matches the synthesis version * Bugs: - #401: libusb detection fails when x-compiling for Android - #400: [hdl] ATSC FPGA build broken - #399: Update libbladeRF and FX3 FIrmware for Cypress FX3 SDK 1.3.3 support - #395: [hdl] Timing Closure on LMS6 SPI interface - #390: Warning after running rx start when loopback=firmware - #373: "trap divide error" while generating calibration table in CLI: cal table dc rx - #362: Calibration table generation hangs, performance issues - #360: [hdl] Older FPGA revisions no longer build - #354: [hdl] failure to include STP file due to talkback req ought to be fatal - #352: [libbladeRF] Intermittent out-of-order transfer callbacks with Windows & libusb 1.0.19 - #342: [Installer] Windows installer doesn't ship 32-bit MATLAB support - #321: How about a switch for bladeRF-cli to emit calibration in a format bladeRF-cli can later read? - #301: Direct sampling with XB-200 needs additional improvements * Enhancements: - #397: [libbladeRF] API call to reset timestamps - #396: [libbladeRF] Match a subset of serial number - #387: FPGA GPIO Bindings to BladeRF / Osmocom Library - #382: 'bladerf_get_serial()' fixed buffer size should be ideally handled in the API - #386: android usb bindings - #353: [bladeRF-cli, libbladeRF] Improve jump_to_boot docs and implementation - #344: [fx3] Investigate/fix field checksums - #328: [libbladeRF] Review and evaluate use of stream lock WRT libusb - #319: [bladeRF-cli] Add libedit and libreadline support - #240: [libbladeRF] Prefer static assertion over assert() when possible - #236: [libbladeRF] API calls for XB-100 required - #221: Synchronized Tx/Rx of multiple bladeRFs for MIMO using Mini Expansion Header - #205: [FX3 Firmware] Code cleanup and potential improvements - #174: Migrate FX3 build to CMake-generated Makefile * Other: - #388: [FX3 Firmware] Investigate USB3 drive controls -------------------------------------------------------------------------------- 2015.02 (2015-02-28) -------------------------------------------------------------------------------- This release introduces build fixes. It consists the following versions: * FPGA bitstream v0.1.2 * FX3 firmware v1.8.0 * libbladeRF v1.2.1 * bladeRF-cli v1.1.2 The following tracker items have been closed since the 2015.01-rc2 release: * Pull Requests: - #376: Code-generator for bladeRF-CLI made more robust * Bugs: - #375: Build error - missing defines - #374: Several issues when cross compiling host tools and libs for windows on a linux system via MinGW - #369: Interactive documentation fails to compile * Other: - #377: Timeout trying to update from firmware 1.5.3 (invalid) Outstanding issue tracker items: * Pull Requests: - #358: bladeRF-cli: Can now specify multiple commands separated by semicolon - #313: merge dev-quartus14 branch - #267: Adjust nios simulation component so it matches the synthesis version * Bugs: - #373: "trap divide error" while generating calibration table in CLI: cal table dc rx - #372: Calibration table generation hangs, performance issues - #360: [hdl] Older FPGA revisions no longer build - #354: [hdl] failure to include STP file due to talkback req ought to be fatal - #352: [libbladeRF] Intermittent out-of-order transfer callbacks with Windows & libusb 1.0.19 - #342: [Installer] Windows installer doesn't ship 32-bit MATLAB support - #301: Direct sampling with XB-200 needs additional improvements * Enhancements: - #378: [libbladeRF] Support zero-padding within a timestamped burst - #353: [bladeRF-cli, libbladeRF] Improve jump_to_boot docs and implementation - #345: [bladeRF-cli] Accept semi-colon command delimeters - #344: [fx3] Investigate/fix field checksums - #328: [libbladeRF] Review and evaluate use of stream lock WRT libusb - #321: How about a switch for bladeRF-cli to emit calibration in a format bladeRF-cli can later read? - #319: [bladeRF-cli] Add libedit and libreadline support - #282: [libbladeRF] Move get/set_lms_correction() and get/set_fpga_correction() logic - #240: [libbladeRF] Prefer static assertion over assert() when possible - #236: [libbladeRF] API calls for XB-100 required - #221: Synchronized Tx/Rx of multiple bladeRFs for MIMO using MiniExpansion Header - #213: CLI should show sample file information for TX - #205: [FX3 Firmware] Code cleanup and potential improvements - #200: Reserved addresses for firmware customization - #174: Task: Migrate FX3 build to CMake-generated Makefile -------------------------------------------------------------------------------- 2015.01-rc2 (2015-01-31) -------------------------------------------------------------------------------- This release candidate introduces a number of libbladeRF fixes and improvements, as well as some minor bladeRF-cli fixes. See the CHANGELOG files associated with these items for more details. This release consists of the following versions: * FPGA bitstream v0.1.2 * FX3 firmware v1.8.0 * libbladeRF v1.2.0 * bladeRF-cli v1.1.1 Major changes include: * libbladeRF fix for issue #95, in which device required power-on reset after an application crashed without properly closing the device handle. * libbladeRF changes to initial LMS state address signal quality issues * BLADERF_LOG_LEVEL environment variable and optional syslog support have been added to libbladeRF. * Documentation build fix for bladeRF-cli. The following tracker items have been closed since the 2014.12-rc1 release: * Pull Requests: - #371: NixOS distro build fixes - #340: On non-Windows systems, send logs to syslog & stderr. * Bugs: - #372: [libbladeRF] Signal attenuation with XB-200 - #370: [libbladeRF] LMS DC calibration settings stored in calibration tables only gets loaded once - #366: [libbladeRF] Power down DC calibration comparators to improve signal quality - #365: host: Don't redefine inline unless __cplusplus is defined - #364: libbladeRF: Can't probe for already opened device when using CyUSB backend - #95: linux kernel/FX3: Not enough bandwidth for altsetting * Enhancements: - #343: [libbladeRF] Name worker threads (wontfix) * Other: - #368: Make BLADERF_ERR_* a enum type (wontfix) - #367: Make FPGA Autoloading fault tolerant (invalid) - #363: FPGA bitstream autoload fails occasionally (invalid) Outstanding pull requests, tasks, enhancement requests, and known issues are listed below. Please see the issue tracker for up-to-date information on these and their associated schedules. * Pull Requests: - #358: bladeRF-cli: Can now specify multiple commands separated by semicolon - #313: merge dev-quartus14 branch - #267: Adjust nios simulation component so it matches the synthesis version * Bugs: - #360: [hdl] Older FPGA revisions no longer build - #354: [hdl] failure to include STP file due to talkback req ought to be fatal - #352: [libbladeRF] Intermittent out-of-order transfer callbacks with Windows & libusb 1.0.19 - #342: [Installer] Windows installer doesn't ship 32-bit MATLAB support - #301: Direct sampling with XB-200 needs additional improvements * Enhancements: - #353: [bladeRF-cli, libbladeRF] Improve jump_to_boot docs and implementation - #345: [bladeRF-cli] Accept semi-colon command delimeters - #344: [fx3] Investigate/fix field checksums - #328: [libbladeRF] Review and evaluate use of stream lock WRT libusb - #321: How about a switch for bladeRF-cli to emit calibration in a format bladeRF-cli can later read? - #319: [bladeRF-cli] Add libedit and libreadline support - #282: [libbladeRF] Move get/set_lms_correction() and get/set_fpga_correction() logic - #240: [libbladeRF] Prefer static assertion over assert() when possible - #236: [libbladeRF] API calls for XB-100 required - #221: Synchronized Tx/Rx of multiple bladeRFs for MIMO using MiniExpansion Header - #213: CLI should show sample file information for TX - #205: [FX3 Firmware] Code cleanup and potential improvements - #200: Reserved addresses for firmware customization - #174: Task: Migrate FX3 build to CMake-generated Makefile -------------------------------------------------------------------------------- 2014.12-rc1 (2014-12-23) -------------------------------------------------------------------------------- This release candidate introduces some minor additions to libbladeRF and the bladeRF-cli program. See the CHANGELOG items associated with these items for more details. This release consists of the following versions: * FPGA bitstream v0.1.2 * FX3 firmware v1.8.0 * libbladeRF v1.1.0 * bladeRF-cli v1.1.0 Major changes include: * Introduction of libbladeRF support for bootloader detection and recovery. With this change, the Cypress backend should now be fully-functional. * Added libbladeRF file search path options (e.g., for host-based FPGA autoloading). * Moved message about detecting devices in bootloader mode to bladeRF-cli. This was original printed by some lower-level libbladeRF code, and deemed more appropriately located in the bladeRF-cli program. The following tracker items have been closed since the 2014.11 release: * Enhancement requests: - #361: Make bladeRF-cli --probe vary its exit status based on whether a device was found or not - #359: [libbladeRF] Migrate bootloader recovery support to libbladeRF - #349: [libbladeRF] Add current directory and env vars to file search path Outstanding pull requests, tasks, enhancement requests, and known issues are listed below. Please see the issue tracker for up-to-date information on these and their associated schedules. * Pull Requests: - #358: bladeRF-cli: Can now specify multiple commands separated by semicolon - #340: On non-Windows systems, send logs to syslog & stderr. - #313: merge dev-quartus14 branch - #267: Adjust nios simulation component so it matches the synthesis version * Bugs: - #360: [hdl] Older FPGA revisions no longer build - #354: [hdl] failure to include STP file due to talkback req ought to be fatal - #352: [libbladeRF] Intermittent out-of-order transfer callbacks with Windows & libusb 1.0.19 - #342: [Installer] Windows installer doesn't ship 32-bit MATLAB support - #301: Direct sampling with XB-200 needs additional improvements - #95: linux kernel/FX3: Not enough bandwidth for altsetting * Enhancements: - #353: [bladeRF-cli, libbladeRF] Improve jump_to_boot docs and implementation - #345: [bladeRF-cli] Accept semi-colon command delimeters - #344: [fx3] Investigate/fix field checksums - #343: [libbladeRF] Name worker threads - #328: [libbladeRF] Review and evaluate use of stream lock WRT libusb - #321: How about a switch for bladeRF-cli to emit calibration in a format bladeRF-cli can later read? - #319: [bladeRF-cli] Add libedit and libreadline support - #282: [libbladeRF] Move get/set_lms_correction() and get/set_fpga_correction() logic - #240: [libbladeRF] Prefer static assertion over assert() when possible - #236: [libbladeRF] API calls for XB-100 required - #221: Synchronized Tx/Rx of multiple bladeRFs for MIMO using MiniExpansion Header - #213: CLI should show sample file information for TX - #205: [FX3 Firmware] Code cleanup and potential improvements - #200: Reserved addresses for firmware customization - #174: Task: Migrate FX3 build to CMake-generated Makefile -------------------------------------------------------------------------------- 2014.11 (2014-11-30) -------------------------------------------------------------------------------- This release introduces a stable libbladeRF API and various fixes. No further reverse-incompatible API changes are currently scheduled. Should such changes be required in the future, they will be denoted through a major version number increment. This release consists of the following versions: * FPGA bitstream v0.1.2 * FX3 firmware v1.8.0 * libbladeRF v1.0.0 * bladeRF-cli v1.0.0 Major fixes include: * libbladeRF now waits for SPI flash autoloading to complete when opening a device. This requires FX3 Firmware v1.8.0. * FPGA v0.1.2 includes fixes in timestamp functionality. * An issue causing SPI flash corruption when using libusb with the WinUSB driver has been addressed. The following issue tracker items have been closed since the 2014.11-rc3 release: * Pull requests: - #357: debian: split udev rule into its own package - #356: debian package updates for libbladerf1 - #350: debian: fw 1.8.0, fpga 0.1.2, HTTPS - #338: debian: allow libtecla-dev to satisfy build deps * Bugs: - #355: [libbladeRF] Windows firmware flashing fails with WinUSB - #351: [libbladeRF] Device locks up when simultaneously tuning freq and RX'ing - #348: [Windows] Cypress backend causes build failures in VS2010 - #347: [libbladeRF] Header issue in Windows - #341: LMS Failures persist after FPGA v0.1.1 - #339: [libbladeRF] file_ops.c should use $HOME before getpwuid() - #337: host: Windows builds should copy license files into output directory - #336: [libbladeRF] Loading calibration tables does not set LMS DC cal registers - #335: [hdl] Initial bursts with TX_NOW corrupted - #334: [hdl] Bursts corrupted when switching between TX_NOW and scheduled bursts - #333: [Cygwin] libusb and libc version checks fail to compile - #332: Build fails in Cygwin - #325: Calibration issue: "cal: Invalid module provided (lms)" [Invalid] - #320: BladeRF USB crashes on Beaglebone Black, Ubuntu 14.04 [Invalid] - #318: Board occasionally fails to boot on computer power up [Invalid] - #317: FPGA autoload fails when USB device is open before FPGA is fully configured - #307: [hdl] RX and TX timestamp offset variation - #304: [bladeRF-cli] TX DC autocalibration/correction fails - #291: Missing RX Samples - #265: [hdl] Incorect metadata position in the RX Stream * Enhancements: - #105: Develop testing guidelines on new releases Outstanding pull requests, tasks, enhancement requests, and known issues are listed below. Please see the issue tracker for up-to-date information on these and their associated schedules. * Pull Requests: - #358: bladeRF-cli: Can now specify multiple commands separated by semicolon - #340: On non-Windows systems, send logs to syslog & stderr. - #313: merge dev-quartus14 branch - #257: Adjust nios simulation component so it matches the synthesis version * Bugs: - #354: [hdl] failure to include STP file due to talkback req ought to be fatal - #352: [libbladeRF] Intermittent out-of-order transfer callbacks with Windows & libusb 1.0.19 - #342: [Installer] Windows installer doesn't ship 32-bit MATLAB support - #301: Direct sampling with XB-200 needs additional improvements - #95: linux kernel/FX3: Not enough bandwidth for altsetting * Enhancements: - #353: [bladeRF-cli, libbladeRF] Improve jump_to_boot docs and implementation - #349: [libbladeRF] Add current directory and env vars to file search path - #345: [bladeRF-cli] Accept semi-colon command delimeters - #343: [libbladeRF] Name worker thread - #328: [libbladeRF] Review and evaluate use of stream lock WRT libusb - #321: How about a switch for bladeRF-cli to emit calibration in a format bladeRF-cli can later read? - #319: [bladeRF-cli] Add libedit and libreadline support - #282: [libbladeRF] Move get/set_lms_correction() and get/set_fpga_correction() logic - #240: [libbladeRF] Prefer static assertion over assert() when possible - #236: [libbladeRF] API calls for XB-100 required - #221: Synchronized Tx/Rx of multiple bladeRFs for MIMO using Mini Expansion Header - #213: CLI should show sample file information for TX - #205: [FX3 Firmware] Code cleanup and potential improvements - #200: Reserved addresses for firmware customization - #174: Task: Migrate FX3 build to CMake-generated Makefile -------------------------------------------------------------------------------- 2014.11-rc3 (2014-10-30) -------------------------------------------------------------------------------- This 2014.11-rc3 release candidate introduces the remaining functionality originally intended for a 2014.09 release, as well as a number of improvements and bug fixes. As denoted by the name, the release has been rescheduled for November 2014. This release candidate consists of the following versions: * FPGA bitstream v0.1.1 * FX3 firmware v1.7.1 * libbladeRF v0.17.0 * bladeRF-cli v0.12.0 Major changes and additions include: * Timestamp metadata support for the libbladeRF synchronous interface - Example code is included in the API documentation and available in the libbladeRF/doc/examples directory. - This is tightly-coupled with functionality and fixes introduced by FPGA v0.1.1. * A majority of libbladeRF functions have been made thread-safe. * libbladeRF support for a Cypress CyUSB3/CyAPI-based backend - This backend has been found to be a useful alternative on some systems with USB3 controllers that exhibit issues with the libusb backend implementation. * Fixes for LMS DC calibration issues - FPGA fixes in v0.1.1 have addressed a timing issue that corrupted LMS register readbacks. This fixes issue #269, in which LMS DC calibration registers would become corrupted and read back as 31's. - A bladeRF-cli change in v0.12.0 fixed issue #304, where TX DC calibration would fail, reporting that invalid values were encountered. The remaining window of time up to the first official release is intended for documentation improvements and bug fixes. New features or major changes will be held off until the following cycle; they may be staged in a master-next branch if needed. The following issue tracker items have been closed since 2014.09-rc2. Issues are listed first, with associated pull request items second, if relevant. * Pull requests: - #326: only use the relative path for logging .c filenames; enable it by default - #308: Allow #-style comments in bladeRF-cli - #303: libbladeRF: update README cmake options - #293: debian: update changelog w/ 2014.09-rc{1,2} * Bugs: - #336: [libbladeRF] Loading calibration tables does not set LMS DC cal registers - #333: [Cygwin] libusb and libc version checks fail to compil - #332: Build fails in Cygwin - #331: [libbladeRF] Enforce exclusive device access in Cypress backend - #330: [libbladeRF] Cannot open multiple devices via 'open any' request - #329: [cmake] 34151f6 breaks configuration for some CMake versions - #327: [libbladeRF] It is possible to get "stuck" with an FPGA < v0.0.1 - #325: Calibration issue: "cal: Invalid module provided (lms)"[Invalid] - #324: [libbladeRF] Deadlock in bladerf_sync_tx on Windows - #323: [libbladeRF] bladerf_sync_config() does not set dev->transfer_timeout[module] - #322: [libbladeRF] libusb.c doesn't check for timeout_ms = 0 in buffer submission - #320: BladeRF USB crashes on Beaglebone Black, Ubuntu 14.04 [Invalid] - #318: Board occasionally fails to boot on computer power up [Invalid] - #309: [libbladeRF] XB-100 attach shouldn't succeed - #305/#306,#315: mingwbuild of libbladeRF fails on file_ops.c(ShlObj.h) - #304: [bladeRF-cli] TX DC autocalibration/correction fails - #295/#296: Update references to bladeRF-flash in top-level README.md and man page(s) - #292/#296: cmake ignores user input - #291: Missing RX Samples - #290/#294: [bladeRF-cli] TX help typo - #285/#298: [libbladeRF] Update CMake options in README.md - #283: "bladeRF-cli --version" hangs and segfaults on Debian 7 in Virtualbox - #279: [libbladeRF] MACOSX_RPATH is not specified - #278: cmd_help.h generator breaks osx build - #277: bladeRF-cli: Make 'print ' output more consistent - #269: [libbladeRF] RXVGA2 DC autocalibration intermittently returns 31 for all values - #260: [hdl] RX I Samples value 0 - #255: Avoid obsolete samples in the RX Stream * Enhancements: - #314: "make uninstall" cannot find install manifest - #312: [libbladeRF] Regression in USB 2.0 operation - #311/316: [bladeRF-cli] Move FPGA and device handle checks to common code in cmd.c - #310: [libbladeRF] Add suport for disabling an XB [Won't Fix] - #299: Task: Provide .md5 and .sha256sum files with pre-built binaries - #289: libusb/windows. (Version compatibity) - #288/#302: [bladeRF-cli] XB-200 Filterbank Control - #252: [bladeRF-cli] Migrate rx/tx command implementations to libbladeRF's sync i/f - #250: [libbladeRF] Implement Cypress API-based backend Outstanding pull requests, tasks, enhancement requests, and known issues as of RC3 listed below. Please see the issue tracker for up-to-date information on these and their associated schedules. * Pull requests: - #313: merge dev-quartus14 branch - #267: Adjust nios simulation component so it matches the synthesis version * Bugs: - #335: [hdl] Initial bursts with TX_NOW corrupted - #334: [hdl] Bursts corrupted when switching between TX_NOW and scheduled bursts - #317: FPGA autoload fails when USB device is open before FPGA is fully configured - #307: [hdl] RX and TX timestamp offset variation - #301: Direct sampling with XB-200 needs additional improvements - #265: [hdl] Incorect metadata position in the RX Stream - #95: Linux kernel/FX3: Not enough bandwidth for altsetting * Enhancements: - #328: [libbladeRF] Review and evaluate use of stream lock WRT libusb - #321: How about a switch for bladeRF-cli to emit calibration in a format bladeRF-cli can later read? - #319: [bladeRF-cli] Add libedit and libreadline support - #282: [libbladeRF] Move get/set_lms_correction() and get/set_fpga_correction() logic - #240: [libbladeRF] Prefer static assertion over assert() when possible - #236: [libbladeRF] API calls for XB-100 required - #221: Synchronized Tx/Rx of multiple bladeRFs for MIMO using Mini Expansion Header - #213: CLI should show sample file information for TX - #205: [FX3 Firmware] Code cleanup and potential improvements - #200: Reserved addresses for firmware customization - #174: Task: Migrate FX3 build to CMake-generated Makefile - #105: Develop testing guidelines on new releases -------------------------------------------------------------------------------- 2014.09-rc2 (2014-07-24) -------------------------------------------------------------------------------- Since 2014.09-rc1, there have been a number of bug fixes. We wanted to ensure these fixes were provided at a relatively stable "snapshot" in the codebase, prior to introducing a slightly large of set of internal changes required to provide the timestamp support and thread-safety. As such, these changes are have been marked `2014.09-rc2`, and the late-August milestone has been been renamed to `2014.09-rc3`. The objectives for the late-August and September and milestones remain. This release candidate consists of the following versions: * FPGA bitstream v0.0.6 * FX3 firmware v1.7.1 * libbladeRF v0.16.2 * bladeRF-cli v0.11.1 In addition to continued fixes and minor improvements, the remaining major functionality, now scheduled for RC3 is: * Metadata/timestamp support for the libbladeRF synchronous interface * Experimental Cypress driver-based libbladeRF backend for Windows The above items will add additional items to the libbladeRF API, but will not introduce any reverse-incompatible changes. The items scheduled for deprecation are largely the same since 2014.09-rc1 * bladeRF-flash has been removed as of 2014.09-rc2 * libbladeRF's BLADERF_FORMAT_SC16Q11 will be removed prior to 2014.09-rc3 Outstanding tasks and known issues, as of RC2, are listed below. Note that not all of these are scheduled for resolution by 2014.09. Please see the milestone and tracker information GitHub for more information. * Pull requests: - #277: [bladeRF-cli] Make 'print ' output more consistent - #267: Adjust nios simulation component so it matches the synthesis version * Bugs: - #290: [bladeRF-cli] TX help typo - #285: [libbladeRF] Update CMake options in README.md - #260: [hdl] RX I Samples value 0 - #224: Report error code for incompatible version sets - #95: Linux kernel/FX3: Not enough bandwidth for altsetting * Enhancements: - #282: [libbladeRF] Move get/set_lms_correctiion() and get/set_fpga_correction() logic - #252: [bladeRF-cli] Migrate rx/tx command implementations to libbladeRF's sync i/f - #250: [libbladeRF] Implement Cypress API-based backend - #240: [libbladeRF] Prefer static assertion over assert() when possible - #238: [libbladeRF] Integrate timestamp/metadata support - #236: [libbladeRF] API calls for XB-100 required - #221: Synchronized Tx/Rx of multiple bladeRFs for MIMO using Mini Expansion Header - #219: libbladeRF: bladerf_init_stream parameter order is inconsistent - #213: CLI should show sample file information for TX - #205: [FX3 Firmware] Code cleanup and potential improvements - #200: Reserved addresses for firmware customization - #199: Remove magic numbers for GPIO addresses from lms_spi_controller.c - #190: [libbladeRF] Refactor bladerf_priv.c - #174: Task: Migrate FX3 build to CMake-generated Makefile - #166: debian: Auto-download appropriate firmware/FPGA images from nuand.com during install - #105: Develop testing guidelines on new releases -------------------------------------------------------------------------------- 2014.09-rc1 (2014-07-05) -------------------------------------------------------------------------------- This is the first of two release candidates for a 2014-09 release. RC1 consists of the following component versions: FPGA bitstream v0.0.5 FX3 Firmware v1.7.0 libbladeRF v0.16.0 bladeRF-cli v0.11.0 This release candidate provides a majority of the functionality scheduled for the 2014.09 release. The remaining functionality, scheduled for RC2 is: * Metadata/timestamp support for the libbladeRF synchronous interface * Detection and reporting of incompatible firmware/FPGA versions * Experimental Cypress driver-based libbladeRF backend for Windows The above items will add additional items to the libbladeRF API, but will not introduce any reverse-incompatible changes. The following items are schedule for deprecation and removal prior to the 2014.09-rc2 release: * bladeRF-flash utility - A majority of the functionality provided in this program now overlaps with bladeRF-cli. This program was used to ease the burden associated with some very early firmware upgrades. However, for firmware upgrade issues, the well-documented bootloader approach is now preferred. This, combined with efforts to have libbladeRF be more explicit about version mismatches, should eliminate any remaining need for this program. * libbladeRF's BLADERF_FORMAT SC16_Q12 reverse compatibility macro - The format is now more appropriately named BLADERF_FORMAT_SC16_Q11. Ensure you've replaced references to the old enumeration value. Outstanding tasks and known issues, as of RC1, are listed below. Note that not all of these are scheduled for resolution by 2014.09. Please see the milestone and tracker information GitHub for more information. * Pull requests: - #270: Markdown-ify the bladeRF-cli interactive help - #267: Adjust nios simulation component so it matches the synthesis version * Bugs: - #265: [hdl] Incorect metadata position in the RX Stream - #260: [hdl] RX I Samples value 0 - #255: Avoid obsolete samples in the RX stream - #224: Report error code for incompatible version sets - #95: Linux kernel/FX3: Not enough bandwidth for altsetting * Enhancements: - #252: [bladeRF-cli] Migrate rx/tx command implementations to libbladeRF's sync i/f - #250: [libbladeRF] Implement Cypress API-based backend - #240: [libbladeRF] Prefer static assertion over assert() when possible - #238: [libbladeRF] Integrate timestamp/metadata support - #236: [libbladeRF] API calls for XB-100 required - #221: Synchronized Tx/Rx of multiple bladeRFs for MIMO using Mini Expansion Header - #219: libbladeRF: bladerf_init_stream parameter order is inconsistent - #213: CLI should show sample file information for TX - #205: [FX3 Firmware] Code cleanup and potential improvements - #200: Reserved addresses for firmware customization - #199: Remove magic numbers for GPIO addresses from lms_spi_controller.c - #190: [libbladeRF] Refactor bladerf_priv.c - #174: Task: Migrate FX3 build to CMake-generated Makefile - #166: debian: Auto-download appropriate firmware/FPGA images from nuand.com during install - #105: Develop testing guidelines on new releases bladeRF-2024.05/CMakeLists.txt000066400000000000000000000033421457144405000157330ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.5) project(bladeRF CXX C) # Indicate that this is a top-level build set(BLADERF_TOP_LEVEL_BUILD ON) ##################################################################### # Choose which major components to build ##################################################################### option(ENABLE_HOST_BUILD "Build the bladeRF host components" ON ) option(ENABLE_FX3_BUILD "Build the Cypress FX3 firmware component. Be sure to define FX3_SDK_PATH" OFF ) ##################################################################### # Flag for development version vs tagged release ##################################################################### option(TAGGED_RELEASE "Indicates that this is a tagged release. Drops '-git' flag." OFF ) if(TAGGED_RELEASE) set(VERSION_INFO_EXTRA "") else() set(VERSION_INFO_EXTRA "git") endif() ##################################################################### # Build components ##################################################################### if(ENABLE_HOST_BUILD) add_subdirectory(host) else() message(STATUS "Skipping host component build") endif() if(ENABLE_FX3_BUILD) include(ExternalProject) ExternalProject_Add(fx3_firmware DOWNLOAD_COMMAND "" SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/fx3_firmware" CMAKE_ARGS "-DFX3_INSTALL_PATH=${FX3_INSTALL_PATH};-DCMAKE_TOOLCHAIN_FILE=${CMAKE_CURRENT_SOURCE_DIR}/fx3_firmware/cmake/fx3-toolchain.cmake" BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/fx3_firmware" PREFIX "${CMAKE_CURRENT_BINARY_DIR}/fx3_firmware" INSTALL_COMMAND "" BUILD_ALWAYS true ) else() message(STATUS "Skipping FX3 firmware build") endif() bladeRF-2024.05/CONTRIBUTORS000066400000000000000000000044601457144405000150550ustar00rootroot00000000000000#------------------------------------------------------------------------------- # # This file is intended to give credit to all the people who have contributed to # the bladeRF project, and doubles as "MAINTAINERS" file. It also serves to help # keep track of who is familiar with various portions of the codebase. # # For bugs and questions, github, the forum, and IRC should be used. (Please # avoid spamming contributors!) # # This file is "opt-in" only. Feel free to provide as much or as little # information about your contributions as you wish. If you should be listed in # this file and you're not, please submit a patch or pull request for this file, # email us, or catch us on IRC. # # Contributors are sorted by last name or handle. The fields are: # (N) Name or handle # (E) Email address # (F) Handle on nuand forums # (I) IRC handle in Freenode/#bladerf # (G) GitHub handle # (D) Description of contributions or project responsibilities # (W) Website # # Feel free to add multiple fields (e.g., multiple (W) fields - one per site), # and omit fields. # #------------------------------------------------------------------------------- N: Damiano Bolla I: engidea G: Engidea D: si5338 sample rate functionality, misc. bugfixes N: Ian Frasch F: ifrasch G: ifrasch D: bladeRF-FSK modem project N: Robert Ghilduta E: robert.ghilduta@nuand.com F: robertghilduta I: mIKEjONES G: robertghilduta D: Project maintainer N: Brian Glod E: brian.glod@nuand.com F: bglod I: bglod G: bglod D: Project maintainer N: Adam Greig E: adam@adamgreig.com F: adamgreig I: adamgreig G: adamgreig D: libbladeRF LPF mode routines N: Cameron Karlsson D: NIOS II redesign, refactoring, and clean-up G: ckgt N: Mike Kershaw E: dragorn@kismetwireless.net I: dragorn G: dragorn D: CLI bug fixes N: Brian Padalino E: brian.padalino@nuand.com F: bpadalino I: bpadalino G: bpadalino D: Project maintainer N: Keith Rothman E: litghost@softhome.net F: litghost I: litghost G: litghost D: Host and FX3 FW fixes, FW flashing and recovery support N: Marco Schwan E: bladerf@maggo.info F: maggo1404 I: maggo1404 G: maggo1404 D: OSX build fixes N: Jon Szymaniak F: jynik I: jynik G: jynik D: Former developer and project maintainer N: Rey Tucker E: rey.tucker@nuand.com F: rtucker I: HoopyCat G: rtucker D: Project maintainer, developer, PPA maintainer bladeRF-2024.05/COPYING000066400000000000000000000016561457144405000142340ustar00rootroot00000000000000The various portions of the bladeRF project are licensed as outlined below. FPGA HDL: MIT FX3 Firmware: MIT libbladeRF: LGPLv2.1 bladeRF-cli: GPLv2 Linux kernel driver: GPLv2 Please see the legal/licenses directory in the source tree for the text of each license. You can find this online at: https://github.com/Nuand/bladeRF/tree/master/legal/licenses Note that the misc. source files in the host/common and host/utilities/common source directories vary in their licenses (but are compatible with above items they are linked with). Please see the individual files and/or their associated files in the legal/licenses directory for additional information. Licenses may vary for FPGA IP located in the hdl/fpga/ip directory tree. Please see the individual files for additional information. All metadata and build scripts are MIT license unless otherwise stated. Please contact bladeRF@Nuand.com if you have any question or concerns. bladeRF-2024.05/README.md000066400000000000000000000063661457144405000144630ustar00rootroot00000000000000# bladeRF Source # This repository contains all the source code required to program and interact with a bladeRF platform, including firmware for the Cypress FX3 USB controller, HDL for the Altera Cyclone IV FPGA, and C code for the host side libraries, drivers, and utilities. The source is organized as follows: | Directory | Description | | ----------------- |:--------------------------------------------------------------------------------------------------| | [firmware_common] | Source and header files common between firmware and host software | | [fx3_firmware] | Firmware for the Cypress FX3 USB controller | | [hdl] | All HDL code associated with the Cyclone IV FPGA | | [host] | Host-side libraries, drivers, utilities and samples | ## Quick Start ## 1. Clone this repository via: ```git clone https://github.com/Nuand/bladeRF.git``` 2. Fetch the latest pre-built bladeRF [FPGA image]. See the README.md in the [hdl] directory for more information. 3. Fetch the latest pre-built bladeRF [firmware image]. See the README.md in the [fx3_firmware] directory for more information. 4. Follow the instructions in the [host] directory to build and install libbladeRF and the bladeRF-cli utility. 5. Attach the bladeRF board to your fastest USB port. 6. You should now be able to see your device in the list output via ```bladeRF-cli -p``` 7. You can view additional information about the device via ```bladeRF-cli -e info -e version```. 8. If any warnings indicate that a firmware update is needed, run:```bladeRF-cli -f ```. - If you ever find the device booting into the FX3 bootloader (e.g., if you unplug the device in the middle of a firmware upgrade), see the ```recovery``` command in bladeRF-cli for additional details. 9. See the overview of the [bladeRF-cli] for more information about loading the FPGA and using the command line interface tool For more information, see the [bladeRF wiki]. ## Build Variables ## Below are global options to choose which parts of the bladeRF project should be built from the top level. Please see the [fx3_firmware] and [host] subdirectories for more specific options. | Option | Description | --------------------------------- |:--------------------------------------------------------------------------| | -DENABLE_FX3_BUILD=\ | Enables building the FX3 firmware. Default: OFF | | | -DENABLE_HOST_BUILD=\ | Enables building the host library and utilities overall. Default: ON | [firmware_common]: ./firmware_common (Host-Firmware common files) [fx3_firmware]: ./fx3_firmware (FX3 Firmware) [hdl]: ./hdl (HDL) [host]: ./host (Host) [FPGA image]: https://www.nuand.com/fpga.php (Pre-built FPGA images) [firmware image]: https://www.nuand.com/fx3.php (Pre-built firmware binaries) [bladeRF-cli]: ./host/utilities/bladeRF-cli (bladeRF Command Line Interface) [bladeRF wiki]: https://github.com/nuand/bladeRF/wiki (bladeRF wiki) bladeRF-2024.05/debian/000077500000000000000000000000001457144405000144135ustar00rootroot00000000000000bladeRF-2024.05/debian/bladerf-firmware-fx3.dirs000066400000000000000000000000301457144405000211760ustar00rootroot00000000000000/usr/share/Nuand/bladeRFbladeRF-2024.05/debian/bladerf-firmware-fx3.postinst000066400000000000000000000022521457144405000221300ustar00rootroot00000000000000#!/bin/sh -e UPSTREAM='https://www.nuand.com/fx3/bladeRF_fw_v2.4.0.img' CHECKSUM='337f570f2e3fdb26abde0f0765196d92' DATAFILE='/usr/share/Nuand/bladeRF/bladeRF_fw.img' DESCRIPT='firmware' MYNAMEIS='bladerf-firmware-fx3' checkfile () { [ -z "$1" ] && exit 3 md5sum --check <<- EOMD5SUM ${CHECKSUM} $1 EOMD5SUM } # Fetch firmware if needed if [ ! -s ${DATAFILE} ] || ! checkfile ${DATAFILE}; then echo "Either your ${DESCRIPT} is missing, or it is out-of-date." echo "Downloading ${DESCRIPT} from ${UPSTREAM}..." # Try downloading it NEWFILE=$(mktemp) [ -z "${NEWFILE}" ] && (echo "Unable to create temporary file!"; exit 2) if wget -O ${NEWFILE} ${UPSTREAM} && checkfile ${NEWFILE}; then # We're good! Copy it to its new home. echo "Download successful, copying to ${DATAFILE}" mv ${NEWFILE} ${DATAFILE} chmod 0444 ${DATAFILE} else # It failed! Print an error and nuke the temporary file. rm -f ${NEWFILE} cat <<- EOMSG 1>&2 Warning: Failed to download ${DESCRIPT}. Please run "dpkg-reconfigure ${MYNAMEIS}" again when networking is up, or download the file manually: URL: ${UPSTREAM} File: ${DATAFILE} EOMSG exit 1 fi fi #DEBHELPER# bladeRF-2024.05/debian/bladerf-firmware-fx3.prerm000066400000000000000000000002741457144405000213740ustar00rootroot00000000000000#!/bin/sh -e IMGFILE=/usr/share/Nuand/bladeRF/bladeRF_fw.img if [ "$1" = "remove" -o "$1" = "purge" ]; then echo "Deleting downloaded firmware: $IMGFILE" rm -f $IMGFILE fi #DEBHELPER#bladeRF-2024.05/debian/bladerf-fpga-hostedx115.dirs000066400000000000000000000000301457144405000215040ustar00rootroot00000000000000/usr/share/Nuand/bladeRFbladeRF-2024.05/debian/bladerf-fpga-hostedx115.postinst000066400000000000000000000024531457144405000224410ustar00rootroot00000000000000#!/bin/sh -e UPSTREAM='https://www.nuand.com/fpga/v0.14.0/hostedx115.rbf' CHECKSUM='94ee5c7f68abe5c3392202246789fedd' DATAFILE='/usr/share/Nuand/bladeRF/hostedx115.rbf' DESCRIPT='FPGA bitstream' MYNAMEIS='bladerf-fpga-hostedx115' checkfile () { [ -z "$1" ] && exit 3 md5sum --check <<- EOMD5SUM ${CHECKSUM} $1 EOMD5SUM } # Fetch firmware if needed if [ ! -s ${DATAFILE} ] || ! checkfile ${DATAFILE}; then echo "Either your ${DESCRIPT} is missing, or it is out-of-date." echo "Downloading ${DESCRIPT} from ${UPSTREAM}..." # Try downloading it NEWFILE=$(mktemp) [ -z "${NEWFILE}" ] && (echo "Unable to create temporary file!"; exit 2) if wget -O ${NEWFILE} ${UPSTREAM} && checkfile ${NEWFILE}; then # We're good! Copy it to its new home. echo "Download successful, copying to ${DATAFILE}" mv ${NEWFILE} ${DATAFILE} chmod 0444 ${DATAFILE} else # It failed! Print an error and nuke the temporary file. rm -f ${NEWFILE} cat <<- EOMSG 1>&2 Warning: Failed to download ${DESCRIPT}. Please run "dpkg-reconfigure ${MYNAMEIS}" again when networking is up, or download the file manually: URL: ${UPSTREAM} File: ${DATAFILE} EOMSG # exit successfully, as otherwise the package is left # half-configured and the surrounding install/upgrade fails exit 0 fi fi #DEBHELPER# bladeRF-2024.05/debian/bladerf-fpga-hostedx115.prerm000066400000000000000000000003021457144405000216720ustar00rootroot00000000000000#!/bin/sh -e RBFFILE=/usr/share/Nuand/bladeRF/hostedx115.rbf if [ "$1" = "remove" -o "$1" = "purge" ]; then echo "Deleting downloaded FPGA bitstream: $RBFFILE" rm -f $RBFFILE fi #DEBHELPER#bladeRF-2024.05/debian/bladerf-fpga-hostedx40.dirs000066400000000000000000000000301457144405000214210ustar00rootroot00000000000000/usr/share/Nuand/bladeRFbladeRF-2024.05/debian/bladerf-fpga-hostedx40.postinst000066400000000000000000000024501457144405000223530ustar00rootroot00000000000000#!/bin/sh -e UPSTREAM='https://www.nuand.com/fpga/v0.14.0/hostedx40.rbf' CHECKSUM='25f402b3734c9aa0d37db9531f93335c' DATAFILE='/usr/share/Nuand/bladeRF/hostedx40.rbf' DESCRIPT='FPGA bitstream' MYNAMEIS='bladerf-fpga-hostedx40' checkfile () { [ -z "$1" ] && exit 3 md5sum --check <<- EOMD5SUM ${CHECKSUM} $1 EOMD5SUM } # Fetch firmware if needed if [ ! -s ${DATAFILE} ] || ! checkfile ${DATAFILE}; then echo "Either your ${DESCRIPT} is missing, or it is out-of-date." echo "Downloading ${DESCRIPT} from ${UPSTREAM}..." # Try downloading it NEWFILE=$(mktemp) [ -z "${NEWFILE}" ] && (echo "Unable to create temporary file!"; exit 2) if wget -O ${NEWFILE} ${UPSTREAM} && checkfile ${NEWFILE}; then # We're good! Copy it to its new home. echo "Download successful, copying to ${DATAFILE}" mv ${NEWFILE} ${DATAFILE} chmod 0444 ${DATAFILE} else # It failed! Print an error and nuke the temporary file. rm -f ${NEWFILE} cat <<- EOMSG 1>&2 Warning: Failed to download ${DESCRIPT}. Please run "dpkg-reconfigure ${MYNAMEIS}" again when networking is up, or download the file manually: URL: ${UPSTREAM} File: ${DATAFILE} EOMSG # exit successfully, as otherwise the package is left # half-configured and the surrounding install/upgrade fails exit 0 fi fi #DEBHELPER# bladeRF-2024.05/debian/bladerf-fpga-hostedx40.prerm000066400000000000000000000003011457144405000216060ustar00rootroot00000000000000#!/bin/sh -e RBFFILE=/usr/share/Nuand/bladeRF/hostedx40.rbf if [ "$1" = "remove" -o "$1" = "purge" ]; then echo "Deleting downloaded FPGA bitstream: $RBFFILE" rm -f $RBFFILE fi #DEBHELPER#bladeRF-2024.05/debian/bladerf-fpga-hostedxa4.dirs000066400000000000000000000000301457144405000215020ustar00rootroot00000000000000/usr/share/Nuand/bladeRFbladeRF-2024.05/debian/bladerf-fpga-hostedxa4.postinst000066400000000000000000000024501457144405000224340ustar00rootroot00000000000000#!/bin/sh -e UPSTREAM='https://www.nuand.com/fpga/v0.14.0/hostedxA4.rbf' CHECKSUM='c24af70cf56b13123295125a22d5e921' DATAFILE='/usr/share/Nuand/bladeRF/hostedxA4.rbf' DESCRIPT='FPGA bitstream' MYNAMEIS='bladerf-fpga-hostedxa4' checkfile () { [ -z "$1" ] && exit 3 md5sum --check <<- EOMD5SUM ${CHECKSUM} $1 EOMD5SUM } # Fetch firmware if needed if [ ! -s ${DATAFILE} ] || ! checkfile ${DATAFILE}; then echo "Either your ${DESCRIPT} is missing, or it is out-of-date." echo "Downloading ${DESCRIPT} from ${UPSTREAM}..." # Try downloading it NEWFILE=$(mktemp) [ -z "${NEWFILE}" ] && (echo "Unable to create temporary file!"; exit 2) if wget -O ${NEWFILE} ${UPSTREAM} && checkfile ${NEWFILE}; then # We're good! Copy it to its new home. echo "Download successful, copying to ${DATAFILE}" mv ${NEWFILE} ${DATAFILE} chmod 0444 ${DATAFILE} else # It failed! Print an error and nuke the temporary file. rm -f ${NEWFILE} cat <<- EOMSG 1>&2 Warning: Failed to download ${DESCRIPT}. Please run "dpkg-reconfigure ${MYNAMEIS}" again when networking is up, or download the file manually: URL: ${UPSTREAM} File: ${DATAFILE} EOMSG # exit successfully, as otherwise the package is left # half-configured and the surrounding install/upgrade fails exit 0 fi fi #DEBHELPER# bladeRF-2024.05/debian/bladerf-fpga-hostedxa4.prerm000066400000000000000000000003021457144405000216700ustar00rootroot00000000000000#!/bin/sh -e RBFFILE=/usr/share/Nuand/bladeRF/hostedxA4.rbf if [ "$1" = "remove" -o "$1" = "purge" ]; then echo "Deleting downloaded FPGA bitstream: $RBFFILE" rm -f $RBFFILE fi #DEBHELPER# bladeRF-2024.05/debian/bladerf-fpga-hostedxa5.dirs000066400000000000000000000000301457144405000215030ustar00rootroot00000000000000/usr/share/Nuand/bladeRFbladeRF-2024.05/debian/bladerf-fpga-hostedxa5.postinst000066400000000000000000000024501457144405000224350ustar00rootroot00000000000000#!/bin/sh -e UPSTREAM='https://www.nuand.com/fpga/v0.14.0/hostedxA5.rbf' CHECKSUM='ae6391cc3fd467bbb07868450612ce17' DATAFILE='/usr/share/Nuand/bladeRF/hostedxA5.rbf' DESCRIPT='FPGA bitstream' MYNAMEIS='bladerf-fpga-hostedxa5' checkfile () { [ -z "$1" ] && exit 3 md5sum --check <<- EOMD5SUM ${CHECKSUM} $1 EOMD5SUM } # Fetch firmware if needed if [ ! -s ${DATAFILE} ] || ! checkfile ${DATAFILE}; then echo "Either your ${DESCRIPT} is missing, or it is out-of-date." echo "Downloading ${DESCRIPT} from ${UPSTREAM}..." # Try downloading it NEWFILE=$(mktemp) [ -z "${NEWFILE}" ] && (echo "Unable to create temporary file!"; exit 2) if wget -O ${NEWFILE} ${UPSTREAM} && checkfile ${NEWFILE}; then # We're good! Copy it to its new home. echo "Download successful, copying to ${DATAFILE}" mv ${NEWFILE} ${DATAFILE} chmod 0444 ${DATAFILE} else # It failed! Print an error and nuke the temporary file. rm -f ${NEWFILE} cat <<- EOMSG 1>&2 Warning: Failed to download ${DESCRIPT}. Please run "dpkg-reconfigure ${MYNAMEIS}" again when networking is up, or download the file manually: URL: ${UPSTREAM} File: ${DATAFILE} EOMSG # exit successfully, as otherwise the package is left # half-configured and the surrounding install/upgrade fails exit 0 fi fi #DEBHELPER# bladeRF-2024.05/debian/bladerf-fpga-hostedxa5.prerm000066400000000000000000000003021457144405000216710ustar00rootroot00000000000000#!/bin/sh -e RBFFILE=/usr/share/Nuand/bladeRF/hostedxA5.rbf if [ "$1" = "remove" -o "$1" = "purge" ]; then echo "Deleting downloaded FPGA bitstream: $RBFFILE" rm -f $RBFFILE fi #DEBHELPER# bladeRF-2024.05/debian/bladerf-fpga-hostedxa9.dirs000066400000000000000000000000301457144405000215070ustar00rootroot00000000000000/usr/share/Nuand/bladeRFbladeRF-2024.05/debian/bladerf-fpga-hostedxa9.postinst000066400000000000000000000024501457144405000224410ustar00rootroot00000000000000#!/bin/sh -e UPSTREAM='https://www.nuand.com/fpga/v0.14.0/hostedxA9.rbf' CHECKSUM='7dfe8c32f260d43a14b9583375a1a6eb' DATAFILE='/usr/share/Nuand/bladeRF/hostedxA9.rbf' DESCRIPT='FPGA bitstream' MYNAMEIS='bladerf-fpga-hostedxa9' checkfile () { [ -z "$1" ] && exit 3 md5sum --check <<- EOMD5SUM ${CHECKSUM} $1 EOMD5SUM } # Fetch firmware if needed if [ ! -s ${DATAFILE} ] || ! checkfile ${DATAFILE}; then echo "Either your ${DESCRIPT} is missing, or it is out-of-date." echo "Downloading ${DESCRIPT} from ${UPSTREAM}..." # Try downloading it NEWFILE=$(mktemp) [ -z "${NEWFILE}" ] && (echo "Unable to create temporary file!"; exit 2) if wget -O ${NEWFILE} ${UPSTREAM} && checkfile ${NEWFILE}; then # We're good! Copy it to its new home. echo "Download successful, copying to ${DATAFILE}" mv ${NEWFILE} ${DATAFILE} chmod 0444 ${DATAFILE} else # It failed! Print an error and nuke the temporary file. rm -f ${NEWFILE} cat <<- EOMSG 1>&2 Warning: Failed to download ${DESCRIPT}. Please run "dpkg-reconfigure ${MYNAMEIS}" again when networking is up, or download the file manually: URL: ${UPSTREAM} File: ${DATAFILE} EOMSG # exit successfully, as otherwise the package is left # half-configured and the surrounding install/upgrade fails exit 0 fi fi #DEBHELPER# bladeRF-2024.05/debian/bladerf-fpga-hostedxa9.prerm000066400000000000000000000003021457144405000216750ustar00rootroot00000000000000#!/bin/sh -e RBFFILE=/usr/share/Nuand/bladeRF/hostedxA9.rbf if [ "$1" = "remove" -o "$1" = "purge" ]; then echo "Deleting downloaded FPGA bitstream: $RBFFILE" rm -f $RBFFILE fi #DEBHELPER# bladeRF-2024.05/debian/bladerf.dirs000066400000000000000000000000101457144405000166640ustar00rootroot00000000000000usr/bin bladeRF-2024.05/debian/bladerf.docs000066400000000000000000000000471457144405000166650ustar00rootroot00000000000000COPYING CONTRIBUTORS README.md legal/* bladeRF-2024.05/debian/bladerf.install000066400000000000000000000000221457144405000173740ustar00rootroot00000000000000usr/bin/bladeRF-* bladeRF-2024.05/debian/bladerf.manpages000066400000000000000000000000421457144405000175230ustar00rootroot00000000000000debian/tmp/usr/share/man/man1/*.1 bladeRF-2024.05/debian/changelog000066400000000000000000000277051457144405000163000ustar00rootroot00000000000000bladerf (2021.10) unstable; urgency=low * Release for 2021.10 tag * Fix up packet mode bugs * Add Wishbone master core as NiOS peripheral * Fix several bugs in packet mode buffering mechanism * Add Wishbone master core as NiOS peripheral * Add support for bladeRF 2.0 micro xA5. -- Robert Ghilduta (Nuand LLC) Tue, 16 Feb 2021 00:50:56 -0500 bladerf (2021.03) unstable; urgency=low * Release for 2021.03 tag * Added packet mode format BLADERF_FORMAT_PACKET_META. libbladeRF is able to * exchange variable length packets with the HDL if packet mode is enabled * Added RFIC parameters for burst waveforms * Ability to query backend for handle and lock * Variable length packet support for PACKET_META mode * Indicate presence of packet cores in FPGA * Add packet mode. The HDL fabric is able to exchange variable length * packets with the host * Added packet_generator as an example for how to send packets to the host * Added bladeRF 2.0 micro headless example variant "foxhunt" * Fix metadata related arithmetic and logic -- Robert Ghilduta (Nuand LLC) Tue, 16 Feb 2021 00:50:56 -0500 bladerf (2019.07) unstable; urgency=low * Release for 2019.07 tag * Various libbladeRF and HDL fixes * FPGA bitstream v0.11.2, FX3 FW v2.3.2, libbladeRF v2.2.1, bladeRF-cli v1.8.0 -- Robert Ghilduta (Nuand LLC) Thu, 01 Aug 2019 22:54:28 -0400 bladerf (2018.12-rc2) unstable; urgency=low * Release candidate 2 for 2018.12. Please see the top-level CHANGELOG file, as well as the sub-project CHANGELOG files, for more details. * AD936x RFIC vendor library code moved to thirdparty/ * FPGA bitstream v0.10.2, FX3 FW v2.3.1, libbladeRF v2.2.0, bladeRF-cli v1.7.1 -- Rey Sabrina Tucker (Nuand LLC) Fri, 21 Dec 2018 16:52:49 -0500 bladerf (2018.10-rc1) unstable; urgency=low * Release candidate 1 for 2018.10. Please see the top-level CHANGELOG file, as well as the sub-project CHANGELOG files, for more details. * control: fix bladeRF 2.0 Micro xA4/xA9 nomenclature * libbladerf-doc: new package, containing doxygen-generated libbladeRF API documentation * FPGA bitstream v0.9.0, FX3 FW v2.3.1, libbladeRF v2.1.0, bladeRF-cli v1.7.0 -- Rey Sabrina Tucker (Nuand LLC) Tue, 30 Oct 2018 17:06:11 -0400 bladerf (2018.08) unstable; urgency=low * debian: update packaging files (#596) * Improve bladerf_gain_mode documentation (#595) * Don't warn about libusb version on FreeBSD (#594) * FPGA bitstream v0.7.3, FX3 FW v2.2.0, libbladeRF v2.0.2, bladeRF-cli v1.6.1 -- Rey Sabrina Tucker (Nuand LLC) Thu, 30 Aug 2018 18:01:12 -0400 bladerf (2018.08-rc3) unstable; urgency=low * Release candidate 3 for the 2018.08 release * Detect and handle a bladeRF Micro that is running old firmware to allow re-flashing without recovery mode (#578) * bladeRF1: bladerf_set_gain_mode returning BLADERF_ERR_UNSUPPORTED is no longer fatal (#542) * bladeRF1: only check AGC DC LUT setting when enabling AGC * bladeRF1: typo fix in set_tx_gain (#580) * xb200: check for null xb_data before dereferencing it (#575) * bladeRF2: cache factory trimdac value at initialization; preserve trimdac disable state on bladerf2_trim_dac_write (#582) * bladeRF2: bladerf_clock_select: replace CLOCK_SELECT_VCTCXO with CLOCK_SELECT_ONBOARD for clarity (#585) * Improvements to the release notes (#583) * bladeRF-cli: Add 200 ms delay before probing PLL lock status (#587) * "set loopback" help dialog aware of board type (#566) * FPGA bitstream v0.7.3, FX3 FW v2.2.0, libbladeRF v2.0.1, bladeRF-cli v1.6.1 -- Rey Tucker Fri, 24 Aug 2018 16:19:32 -0400 bladerf (2018.08-rc2) unstable; urgency=low * Release candidate 2 for the 2018.08 release * Fix builds on 32-bit architectures * Fix builds on FreeBSD * Fix Debian/Ubuntu packaging -- Rey Tucker Thu, 16 Aug 2018 19:55:00 -0400 bladerf (2018.08-rc1) unstable; urgency=low * Release candidate 1 for the 2018.08 release * Adds support for the bladeRF 2.0 Micro * Major version number change: libbladerf1 is now libbladerf2 * FPGA bitstream v0.7.3, FX3 FW v2.2.0, libbladeRF v2.0.0, bladeRF-cli v1.6.0 -- Rey Tucker Wed, 15 Aug 2018 21:07:42 -0400 bladerf (2017.12-rc1) unstable; urgency=low * Release candidate 1 for the 2017.12 release * FPGA bitstream v0.7.1, FX3 FW v2.0.0, libbladeRF v1.9.0, bladeRF-cli v1.5.1 -- Rey Tucker Fri, 08 Dec 2017 11:35:12 -0500 bladerf (2017.07) unstable; urgency=low [ Robert Ghilduta ] * Add Automatic Gain Control [ Rey Tucker ] * debian: fix permissions on FPGA and firmware binaries after downloading -- Robert Ghilduta Sun, 02 Jul 2017 21:14:15 -0400 bladerf (2016.06) unstable; urgency=low * Added synchronization trigger functionality * Added SMB clock port control to libbladeRF API * Added XB-300 support * Added detection of v2.0.0 firmware series (with new VID/PID) * FPGA bitstream v0.6.0, FX3 FW v2.0.0, libbladeRF v1.7.2, bladeRF-cli v1.4.0 -- Jon Szymaniak Wed, 29 Jun 2016 16:10:35 -0400 bladerf (2016.01-rc1) unstable; urgency=low * Added support for VCTCXO taming using 1.8V 1 PPS or 10 MHz input signal * Revised DC offset correction algorithm; fixes lockups * Added firmware logging mechanism * Updated firmware to FX3 SDK 1.3.3 * Added libbladeRF support for setting SMB clock to arbitrary frequency * Added XB-100 host support * Fixed TX undderrun issues (now correctly uses all available buffers) * FPGA bitstream v0.5.0, FX3 FW v1.9.0, libbladeRF v1.5.1, bladeRF-cli v1.3.1 -- Jon Szymaniak Thu, 07 Jan 2016 16:35:09 -0500 bladerf (2015.07) unstable; urgency=low * FPGA: Fixed bug where TX_NOW bursts could cause metadata/sample FIFO slips * libbladeRF: Devices can now be opened using only a subset of a serial number * libbladeRF: Fixed regressions in XB-200 filterbank selection and loopback support * libbladeRF: Corrected zero-padding at end of TX burst * FPGA bitstream v0.3.4, FX3 Firmware v1.8.0, libbladeRF v1.4.3, bladeRF-cli v1.2.1 -- Jon Szymaniak Sat, 25 Jul 2015 16:35:38 -0400 bladerf (2015.06-rc1) unstable; urgency=low [ Jon Szymaniak ] * FPGA, libbladeRF: Configurable tuning modes: host and fpga * FPGA, libbladeRF: Scheduled retune: retune module at specified sample timestamp * FPGA, libbladeRF: Quick retune: retune using previously identified tuning parameters * FPGA, libbladeRF: Readback of current vctcxo trim DAC settting * bladeRF-cli: Added semicolon command separator support * bladeRF-cli: Added 'print trimdac' implementation [ Ryan Tucker ] * Fixup debian/changelog for rc1 -- Ryan Tucker Wed, 01 Jul 2015 20:07:04 -0400 bladerf (2015.02) unstable; urgency=low * Build fixes -- Jon Szymaniak Sat, 28 Feb 2015 15:58:39 -0500 bladerf (2015.01-rc2) unstable; urgency=low * Fixed issue #95, which prevented device from being opened after an application crash * Fixes for undesired XB-200 signal attenuation and LMS signal integrity issues * Added BLADERF_LOG_LEVEL support and optional libbladeRF syslog support * FPGA bitstream v0.1.2, FX3 Firmware v1.8.0, libbladeRF v1.2.0, bladeRF-cli v1.1.1 -- Jon Szymaniak Sat, 31 Jan 2015 17:02:35 -0500 bladerf (2014.12-rc1) unstable; urgency=low * Added libbladeRF API functions for finding and recovering devices in bootloader mode * Added BLADERF_SEARCH_DIR, current working directory, and binary dir to libbladeRF file search path * The bladeRF-cli -p/--probe option now returns a non-zero return code if no devices were found. * FPGA bitstream v0.1.2, FX3 Firmware v1.8.0, libbladeRF v1.1.0, bladeRF-cli v1.1.0 -- Jon Szymaniak Tue, 22 Dec 2014 14:06:49 -0500 bladerf (2014.11) unstable; urgency=low * First stable libbladeRF API release * FPGA bitstream v0.1.2, FX3 Firmware v1.8.0, libbladeRF v1.0.0, bladeRF-cli v1.0.0 -- Jon Szymaniak Sun, 30 Nov 2014 16:18:33 -0500 bladerf (2014.11-rc3) unstable; urgency=low * Second of three release candidates for rescheduled 2014.11 release * FPGA bitstream v0.1.1, FX3 Firmware v1.7.1, libbladeRF v0.17.0, bladeRF-cli v0.12.0 * Introduced timestamp metadata support in libbladeRF's synchronous interface * A majority of libbladeRF functions have been made thread-safe. * Fixes for DC calibration issues, deadlocks, crashes, and various defects. -- Jon Szymaniak Thu, 30 Oct 2014 21:59:38 -0400 bladerf (2014.09-rc2) unstable; urgency=low * Tagged release 2014.09-rc2 at dddc72f * Second of three release candidates for 2014.09 release * FPGA bitstream v0.0.6, FX3 Firmware v1.7.1, libbladeRF v0.16.2, bladeRF-cli v0.11.1 * Closes #284: [hdl (nios)] Defects present in gain/phase correction bug * Closes #271: Frequency readback is incorrect when using xb200 bug * Closes #270: Markdown-ify the bladeRF-cli interactive help * Closes #254: bladeRF-cli: Clean up print/set lnagain bug * Closes #249: [libbladeRF] LMS VTUNE not locking occasionally bug * Closes #248: [bladeRF-Cli] Fix 'correct' command parameter ranges, cleanup usage and help text bug * Closes #243: [libbladeRF] Remove bladerf_* calls from lms.c enhancement * Closes #234: [libbladeRF] Cleanup: Move bladerf_get/set_sampling to lms.c enhancement * Closes #220: libbladeRF: LMS SELOUT[1:0] may be left in an invalid state upon exiting loopback mode bug * Closes #210: [CLI] After a calibrate command is issued, the bladeRF transmits a carrier. bug -- Ryan Tucker Thu, 24 Jul 2014 22:59:24 -0400 bladerf (2014.09-rc1) unstable; urgency=low * Tagged release 2014.09-rc1 at 9c651b5 * First of two release candidates for 2014.09 release * FPGA bitstream v0.0.5, FX3 Firmware v1.7.0, libbladeRF v0.16.0, bladeRF-cli v0.11.0 * Closes #268: [libbladeRF] Version check routines have flipped logic bug * Closes #257: [libbladeRF] Remove incorrect error_conv() call(s). * Closes #256: [libbladeRF] Intermittent FPGA load failures bug * Closes #246: [libbladerRF] Added an error code for "File not found" errors enhancement * Closes #245: [libbladeRF] bladerf_set_bandwidth() does not appropriately handle actual=NULL bug * Closes #244: [libbladeRF] Lock-up occurs if sync TX is configured but not used * Closes #241: TX Stream can lose initial buffers * Closes #237: [libbladeRF] XB-200 support and API calls required bug * Closes #235: [libbladeRF] Change API return values for flash calls - return 0, not >= 0. bug * Closes #228: [libbladeRF] Additional libusb function checks required bug * Closes #223: FPGA DC remover block enhancement * Closes #217: Probe returns Backend Id's, bladerf_open wants a string for the backend. bug * Closes #211: [bladeRF-cli] Text wraps around in man pages bug * Closes #189: [libbladeRF] Refactor backend interface and libusb backend implementation enhancement * Closes #176: [libbladeRF] Mixup between SPI flash "sector" and "erase block" enhancement * Closes #55: CLI: A number of commands are still unimplemented stubs bug * Closes #46: CLI: Add -e support enhancement -- Ryan Tucker Sat, 05 Jul 2014 14:56:29 -0400 bladerf (0~20131229-1) unstable; urgency=low * Rename libbladerf0-dev -> libbladerf-dev -- Ryan Tucker Sun, 29 Dec 2013 16:04:17 -0500 bladerf (0~20131006-1) unstable; urgency=low * Another experimental release * Make it work * Rebase to b80d31f5 (Merge pull request #140) * Generate man pages from markdown'd doxygen -- Ryan Tucker Sun, 06 Oct 2013 19:38:31 -0400 bladerf (0~20130929-1) unstable; urgency=low * Initial Debian packaging (Closes: #121) -- Ryan Tucker Sun, 29 Sep 2013 17:41:30 +0000 bladeRF-2024.05/debian/compat000066400000000000000000000000021457144405000156110ustar00rootroot000000000000009 bladeRF-2024.05/debian/control000066400000000000000000000170221457144405000160200ustar00rootroot00000000000000Source: bladerf Priority: optional Maintainer: Nuand LLC Build-Depends: debhelper (>=9), cmake (>= 2.8.5), pkg-config, doxygen, libusb-1.0-0-dev (>= 1.0.12), libtecla-dev | libtecla1-dev, libncurses5-dev, git, help2man, pandoc Standards-Version: 4.1.4 Section: comm Homepage: https://www.nuand.com/bladeRF Vcs-Git: git://github.com/Nuand/bladeRF.git Vcs-Browser: https://github.com/Nuand/bladeRF Package: libbladerf2 Section: libs Architecture: any Multi-Arch: same Pre-Depends: ${misc:Pre-Depends} Depends: ${shlibs:Depends}, ${misc:Depends}, libusb-1.0-0 (>= 1.0.12) Recommends: bladerf-fpga, libbladerf-udev Suggests: bladerf-firmware Description: Nuand bladeRF software-defined radio device The Nuand bladeRF is an open-source software-defined radio (SDR) system, comprised of an RF transceiver, a field-programmable gate array (FPGA), a microcontroller driving a USB 3.0 interface, and a suite of host libraries and drivers to facilitate interaction with the device. . This package provides the host library. Package: libbladerf-dev Section: libdevel Architecture: any Multi-Arch: same Depends: libbladerf2 (= ${binary:Version}), libc6-dev | libc-dev, ${misc:Depends} Description: Nuand bladeRF software-defined radio device (header files) The Nuand bladeRF is an open-source software-defined radio (SDR) system, comprised of an RF transceiver, a field-programmable gate array (FPGA), a microcontroller driving a USB 3.0 interface, and a suite of host libraries and drivers to facilitate interaction with the device. . This package contains the header files required for compiling bladeRF applications. Package: libbladerf-doc Section: doc Architecture: any Depends: ${misc:Depends} Description: Nuand bladeRF software-defined radio device (API documentation) The Nuand bladeRF is an open-source software-defined radio (SDR) system, comprised of an RF transceiver, a field-programmable gate array (FPGA), a microcontroller driving a USB 3.0 interface, and a suite of host libraries and drivers to facilitate interaction with the device. . This package contains libbladeRF API documentation. Package: libbladerf-udev Section: libs Architecture: any Multi-Arch: same Depends: ${shlibs:Depends}, ${misc:Depends}, udev Conflicts: libbladerf0 Description: Nuand bladeRF software-defined radio device (header files) The Nuand bladeRF is an open-source software-defined radio (SDR) system, comprised of an RF transceiver, a field-programmable gate array (FPGA), a microcontroller driving a USB 3.0 interface, and a suite of host libraries and drivers to facilitate interaction with the device. . This package contains udev rules to ensure that the USB device is configured correctly when connected. Package: bladerf Section: comm Architecture: any Multi-Arch: foreign Depends: libbladerf2 (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends}, libbladerf-udev Provides: bladerf-host Conflicts: bladerf-host Replaces: bladerf-host Description: Nuand bladeRF software-defined radio device (tools) The Nuand bladeRF is an open-source software-defined radio (SDR) system, comprised of an RF transceiver, a field-programmable gate array (FPGA), a microcontroller driving a USB 3.0 interface, and a suite of host libraries and drivers to facilitate interaction with the device. . This package provides command-line tools for controlling the bladeRF. Package: bladerf-fpga-hostedx40 Section: comm Architecture: any Depends: wget, ${shlibs:Depends}, ${misc:Depends} Recommends: bladerf Suggests: bladerf-firmware Provides: bladerf-fpga Description: Nuand bladeRF FPGA bitstream downloader (hostedx40) This package will, at the time of installation, download an appropriate FPGA bitstream for using the Nuand bladeRF in a hosted (USB-controlled) configuration. The FPGA bitstream will be downloaded from https://nuand.com/fpga/ and saved to /usr/share/Nuand/bladeRF. . This bitstream is for the bladeRF x40 with the Altera Cyclone IV EP4CE40 FPGA. . Note that this will not upgrade the bladeRF itself. That can be done with the bladeRF-cli utility. Package: bladerf-fpga-hostedx115 Section: comm Architecture: any Depends: wget, ${shlibs:Depends}, ${misc:Depends} Recommends: bladerf Suggests: bladerf-firmware Provides: bladerf-fpga Description: Nuand bladeRF FPGA bitstream downloader (hostedx115) This package will, at the time of installation, download an appropriate FPGA bitstream for using the Nuand bladeRF in a hosted (USB-controlled) configuration. The FPGA bitstream will be downloaded from https://nuand.com/fpga/ and saved to /usr/share/Nuand/bladeRF. . This bitstream is for the bladeRF x115 with the Altera Cyclone IV EP4CE115 FPGA. . Note that this will not upgrade the bladeRF itself. That can be done with the bladeRF-cli utility. Package: bladerf-fpga-hostedxa4 Section: comm Architecture: any Depends: wget, ${shlibs:Depends}, ${misc:Depends} Recommends: bladerf Suggests: bladerf-firmware Provides: bladerf-fpga Description: Nuand bladeRF FPGA bitstream downloader (hostedxA4) This package will, at the time of installation, download an appropriate FPGA bitstream for using the Nuand bladeRF in a hosted (USB-controlled) configuration. The FPGA bitstream will be downloaded from https://nuand.com/fpga/ and saved to /usr/share/Nuand/bladeRF. . This bitstream is for the bladeRF 2.0 Micro xA4 with the Altera Cyclone V 5CEBA4 FPGA. . Note that this will not upgrade the bladeRF itself. That can be done with the bladeRF-cli utility. Package: bladerf-fpga-hostedxa5 Section: comm Architecture: any Depends: wget, ${shlibs:Depends}, ${misc:Depends} Recommends: bladerf Suggests: bladerf-firmware Provides: bladerf-fpga Description: Nuand bladeRF FPGA bitstream downloader (hostedxA5) This package will, at the time of installation, download an appropriate FPGA bitstream for using the Nuand bladeRF in a hosted (USB-controlled) configuration. The FPGA bitstream will be downloaded from https://nuand.com/fpga/ and saved to /usr/share/Nuand/bladeRF. . This bitstream is for the bladeRF 2.0 Micro xA5 with the Altera Cyclone V 5CEBA5 FPGA. . Note that this will not upgrade the bladeRF itself. That can be done with the bladeRF-cli utility. Package: bladerf-fpga-hostedxa9 Section: comm Architecture: any Depends: wget, ${shlibs:Depends}, ${misc:Depends} Recommends: bladerf Suggests: bladerf-firmware Provides: bladerf-fpga Description: Nuand bladeRF FPGA bitstream downloader (hostedxA9) This package will, at the time of installation, download an appropriate FPGA bitstream for using the Nuand bladeRF in a hosted (USB-controlled) configuration. The FPGA bitstream will be downloaded from https://nuand.com/fpga/ and saved to /usr/share/Nuand/bladeRF. . This bitstream is for the bladeRF 2.0 Micro xA9 with the Altera Cyclone V 5CEBA9 FPGA. . Note that this will not upgrade the bladeRF itself. That can be done with the bladeRF-cli utility. Package: bladerf-firmware-fx3 Section: comm Architecture: any Depends: wget, ${shlibs:Depends}, ${misc:Depends} Recommends: bladerf Suggests: bladerf-fpga Provides: bladerf-firmware Description: Nuand bladeRF firmware downloader (FX3) This package will, at the time of installation, download an appropriate firmware image for using the Nuand bladeRF with a Cypress FX3 USB controller. The image will be downloaded from https://nuand.com/fx3/ and saved to /usr/share/Nuand/bladeRF. . This bitstream will work for either the Nuand bladeRF x40 or the x115, as well as the bladeRF 2.0 Micro xA4 or xA5 or xA9. . Note that this will not upgrade the bladeRF itself. That can be done with the bladeRF-cli utility. bladeRF-2024.05/debian/copyright000066400000000000000000000325121457144405000163510ustar00rootroot00000000000000# vim:sw=1 Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: bladerf Upstream-Contact: Nuand LLC Source: Comment: Harmony copyright assignment agreements are in effect. Only the host/ and fpga_common/ directories of the source are used to build the binary Debian packages. Files: * Copyright: 2012-2018 Nuand LLC License: MIT Comment: All metadata (Makefiles, CMake scripts, etc.) are MIT license unless otherwise stated. Files: hdl/* firmware_common/* fx3_firmware/* Copyright: 2013-2018 Nuand LLC Comment: Not used in building Debian packages License: MIT Files: hdl/fpga/ip/altera/* Copyright: 1991-2016 Altera Corporation Comment: Not used in building Debian packages Boilerplate Altera copyright for Nuand LLC design licensed MIT License: Altera-AMPP Files: hdl/fpga/ip/analogdevicesinc/* Copyright: 2011 Analog Devices, Inc. Comment: Not used in building Debian packages Boilerplate Analog Devices copyright License: AnalogDevices Files: hdl/fpga/ip/nuand/arbiter/* Copyright: 2017 Nuand LLC Comment: Not used in building Debian packages License: AGPL-3+ Files: hdl/fpga/ip/opencores/i2c/* Copyright: 2000-2004 Richard Herveille richard@asics.ws Comment: Not used in building Debian packages License: OpenCores-I2C 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 SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Files: host/cmake/modules/FindLibPThreadsWin32.cmake Copyright: 2008-2009 Hendrik Sattler 2013-2018 Nuand LLC License: GPL-2+ Comment: This is file is based off of the FindLibUSB.cmake file written by Hendrik Sattler, from the OpenOBEX project (licensed GPLv2/LGPL). (If this is not correct, please contact us so we can attribute the author appropriately.) https://github.com/zuckschwerdt/openobex/blob/master/CMakeModules/FindLibUSB.cmake http://dev.zuckschwerdt.org/openobex/ Files: host/cmake/modules/FindLibUSB.cmake Copyright: 2008-2009 Hendrik Sattler 2013-2018 Nuand LLC License: GPL-2+ Comment: This is a *slightly* modified version of the file written by Hendrik Sattler, from the OpenOBEX project (licensed GPLv2/LGPL). (If this is not correct, please contact us so we can attribute the author appropriately.) https://github.com/zuckschwerdt/openobex/blob/master/CMakeModules/FindLibUSB.cmake http://dev.zuckschwerdt.org/openobex/ Files: host/common/include/windows/getopt.h host/common/src/windows/getopt_long.c Copyright: 2007-11, Andrea Vedaldi and Brian Fulkerson 2012-13, The VLFeat Team Comment: Not used in building Debian packages License: BSD-2-clause Files: host/common/include/windows/inttypes_msvc.h Copyright: 2006-2013 Alexander Chemeris Comment: Not used in building Debian packages License: BSD-3-clause Files: host/drivers/linux/* Copyright: 2013-2018 Nuand LLC 2013 Robert Ghilduta License: GPL-2+ Files: host/libraries/* Copyright: 2013-2018 Nuand LLC 2013 Daniel Gröber License: LGPL-2.1+ Files: host/utilities/* Copyright: 2013-2018 Nuand LLC 2013 Daniel Gröber License: GPL-2+ Files: host/utilities/common/include/ezusb.h host/utilities/common/src/ezusb.c Copyright: 2001 Stephen Williams (steve@icarus.com) 2001-2002 David Brownell (dbrownell@users.sourceforge.net) 2008 Roger Williams (rawqux@users.sourceforge.net) 2012 Pete Batard (pete@akeo.ie) 2013 Federico Manzan (f.manzan@gmail.com) License: GPL-2+ Files: host/libraries/libbladeRF/src/thirdparty/sha256.c Copyright: 2005 Colin Percival 2011 Guillem Jover 2013 Daniel Gröber License: BSD-2-clause and BSD-3-clause Files: host/libraries/libbladeRF/src/thirdparty/sha256.h Copyright: 2005 Colin Percival 2013 Daniel Gröber License: BSD-2-clause Files: thirdparty/analogdevicesinc/no-OS/* Copyright: 2013-2015 Analog Devices, Inc. License: AnalogDevices License: AGPL-3+ This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. . This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. . You should have received a copy of the GNU Affero General Public License along with this program. If not, see . License: GPL-2+ This package 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 of the License, or (at your option) any later version. . This package 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 . On Debian systems, the complete text of the GNU General Public License version 2 can be found in "/usr/share/common-licenses/GPL-2". License: LGPL-2.1+ 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 2.1 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 . On Debian systems, the complete text of the GNU Lesser General Public License version 2.1 can be found in "/usr/share/common-licenses/LGPL-2.1". License: MIT Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: . The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. . THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. License: BSD-2-clause Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. . THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. License: BSD-3-clause Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. . THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. License: Altera-AMPP Copyright (C) 1991-2016 Altera Corporation. All rights reserved. Your use of Altera Corporation's design tools, logic functions and other software and tools, and its AMPP partner logic functions, and any output files from any of the foregoing (including device programming or simulation files), and any associated documentation or information are expressly subject to the terms and conditions of the Altera Program License Subscription Agreement, the Altera Quartus Prime License Agreement, the Altera MegaCore Function License Agreement, or other applicable license agreement, including, without limitation, that your use is for the sole purpose of programming logic devices manufactured by Altera and sold by Altera or its authorized distributors. Please refer to the applicable agreement for further details. License: AnalogDevices All rights reserved. . Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Analog Devices, Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - The use of this software may or may not infringe the patent rights of one or more patent holders. This license does not release you from the requirement that you obtain separate licenses from these patent holders to use this software. - Use of the software either in source or binary form, must be run on or directly connected to an Analog Devices Inc. component. . THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. . IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. bladeRF-2024.05/debian/libbladerf-dev.dirs000066400000000000000000000000241457144405000201340ustar00rootroot00000000000000usr/lib usr/include bladeRF-2024.05/debian/libbladerf-dev.docs000066400000000000000000000000471457144405000201300ustar00rootroot00000000000000COPYING CONTRIBUTORS README.md legal/* bladeRF-2024.05/debian/libbladerf-dev.install000066400000000000000000000000661457144405000206470ustar00rootroot00000000000000usr/lib/*/lib*.so usr/include/* usr/lib/*/pkgconfig/* bladeRF-2024.05/debian/libbladerf-doc.docs000066400000000000000000000000471457144405000201170ustar00rootroot00000000000000COPYING CONTRIBUTORS README.md legal/* bladeRF-2024.05/debian/libbladerf-doc.install000066400000000000000000000000371457144405000206340ustar00rootroot00000000000000usr/share/doc/libbladerf-doc/* bladeRF-2024.05/debian/libbladerf-udev.dirs000066400000000000000000000000211457144405000203160ustar00rootroot00000000000000lib/udev/rules.d bladeRF-2024.05/debian/libbladerf-udev.docs000066400000000000000000000000471457144405000203150ustar00rootroot00000000000000COPYING CONTRIBUTORS README.md legal/* bladeRF-2024.05/debian/libbladerf-udev.install000066400000000000000000000000311457144405000210240ustar00rootroot00000000000000lib/udev/rules.d/*.rules bladeRF-2024.05/debian/libbladerf2.dirs000066400000000000000000000000101457144405000174350ustar00rootroot00000000000000usr/lib bladeRF-2024.05/debian/libbladerf2.docs000066400000000000000000000000471457144405000174360ustar00rootroot00000000000000COPYING CONTRIBUTORS README.md legal/* bladeRF-2024.05/debian/libbladerf2.install000066400000000000000000000000241457144405000201470ustar00rootroot00000000000000usr/lib/*/lib*.so.* bladeRF-2024.05/debian/patches/000077500000000000000000000000001457144405000160425ustar00rootroot00000000000000bladeRF-2024.05/debian/patches/series000066400000000000000000000000001457144405000172450ustar00rootroot00000000000000bladeRF-2024.05/debian/rules000077500000000000000000000035021457144405000154730ustar00rootroot00000000000000#!/usr/bin/make -f # -*- makefile -*- # vim:noet # Uncomment this to turn on verbose mode. export DH_VERBOSE=1 # Test to see if we're a snapshot build by looking for the word # "SNAPSHOT" in our version. If so, infer our current version and inject # it into the build process. DEB_VERSION_STRING ?= $(shell dpkg-parsechangelog | grep ^Version: | cut -d' ' -f2-) DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH) ifneq (,$(findstring SNAPSHOT,$(DEB_VERSION_STRING))) # Format is like: 0.9.0+1SNAPSHOT20131027041813-gitedc468d~saucy DVS_SPLIT := $(subst ~, ,$(subst -git, ,$(DEB_VERSION_STRING))) # Format is like: 0.9.0+1SNAPSHOT20131027041813 edc468d saucy DEB_VERSION_GITHASH := $(word 2,$(DVS_SPLIT)) DEB_VERSION_SERIES := $(word 3,$(DVS_SPLIT)) # Produce a version suffix like: git-edc468d-ppasaucy VERSION_INFO_OVERRIDE := git-$(DEB_VERSION_GITHASH)-ppa$(DEB_VERSION_SERIES) endif # For tagged PPA release builds, we have a slightly different format... ifneq (,$(findstring 1ppa,$(DEB_VERSION_STRING))) # Format is like: 2014.09-rc1-1ppa1~saucy DVS_SPLIT := $(subst ~, ,$(subst -1ppa, ,$(DEB_VERSION_STRING))) # Format is like: 2014.09-rc1 1 saucy DEB_VERSION_TAG := $(word 1,$(DVS_SPLIT)) DEB_VERSION_BUILD := $(word 2,$(DVS_SPLIT)) DEB_VERSION_SERIES := $(word 3,$(DVS_SPLIT)) # Produce a version suffix like: 2014.09-rc1-1-ppasaucy VERSION_INFO_OVERRIDE := $(DEB_VERSION_TAG)-$(DEB_VERSION_BUILD)-ppa$(DEB_VERSION_SERIES) endif override_dh_auto_configure: dh_auto_configure -- -DVERSION_INFO_OVERRIDE:STRING=$(VERSION_INFO_OVERRIDE) \ -DCMAKE_INSTALL_LIBDIR="lib/${DEB_HOST_MULTIARCH}" \ -DCMAKE_INSTALL_DOCDIR="share/doc/libbladerf-doc" \ -DENABLE_HOST_BUILD=ON \ -DENABLE_FX3_BUILD=OFF \ -DBUILD_DOCUMENTATION=ON \ -DUDEV_RULES_PATH=/lib/udev/rules.d %: dh $@ bladeRF-2024.05/debian/source/000077500000000000000000000000001457144405000157135ustar00rootroot00000000000000bladeRF-2024.05/debian/source/format000066400000000000000000000000141457144405000171210ustar00rootroot000000000000003.0 (quilt) bladeRF-2024.05/debian/watch000066400000000000000000000002121457144405000154370ustar00rootroot00000000000000version=3 opts=filenamemangle=s/.+\/v?(\d\S*)\.tar\.gz/bladeRF-$1.tar.gz/ \ https://github.com/Nuand/bladeRF/tags .*/v?(\d\S*)\.tar\.gz bladeRF-2024.05/doc/000077500000000000000000000000001457144405000137365ustar00rootroot00000000000000bladeRF-2024.05/doc/development/000077500000000000000000000000001457144405000162605ustar00rootroot00000000000000bladeRF-2024.05/doc/development/style_and_conventions.md000066400000000000000000000452321457144405000232170ustar00rootroot00000000000000bladeRF Style and Coding Conventions ================================================================================ This document describes the preferred conventions and coding style for the various components of the bladeRF project. Although style is generally a matter of preference and many of the items outlined here are purely aesthetic, the goal of these guidelines is to encourage consistency within the codebase as new changes are introduced. Other guidelines presented here are intended to ensure portability, avoid bugs, and increase debug-ability. Please follow these guidelines when submitting new changes or code. The current code does not necessarily follow these desired conventions. However, over time, it should migrate towards being compliant with these guidelines. Patches are always welcome, but please separate style/convention changes from functional changes, when possible. _When in doubt, err towards readability and verbosity._ -------------------------------------------------------------------------------- C Code ================================================================================ Below are the preferred style and conventions for C source code. This generally applies to host-side code. However, keep these items in mind for the embedded code. As the embedded code is tightly coupled with APIs that deviate from the preferred style, favor consistency where obvious discrepancies exist. Indentation and Whitespace -------------------------------------------------------------------------------- * Spaces only, no tabs. * Indents shall be 4 spaces. * Use Unix ("\n") line endings (as opposed to DOS "\r\n" line endings) * No trailing whitespace at the end of lines. * Do not indent on lines used for vertical whitespace. ## Naming (Variables, Functions, etc.) ## ### Variables ### Use lowercase characters and underscores. Short and simple names are fine for scopes with only a few variables, or when the variable name is clearly unambiguous. Use more descriptive names as scope and complexity increases. For example, `struct mystate s;` is fine if there is clearly only one state variable in the scope. However, if a function is converting samples to bytes and contains number of variables tracking various different counts, a `samples_per_buffer` variable might be more appropriate than `num` or `num_samples`. ### Functions ### Use lowercase characters and underscores. When applicable, try to name functions in the following format. `[module]_[submodule]_[verb]_[adjective]_[noun]` The and portions are generally unnecessary for static helper functions. Examples: ` int lms_get_dc_cals(struct bladerf *dev, struct bladerf_lms_dc_cals *dc_cals); ` ` int flash_write_fpga_bitstream(struct bladerf *dev, uint8_t **bitstream, size_t len); ` ### Macros ### Use uppercase characters and underscores. See the above functions rules for function-like macros. ### Explicit Conditionals ### Explicitness is preferred in conditionals. For example, ```if (ptr != NULL)``` is preferred over ```if (ptr)``` ```if ((value & (1 << 0)) != 0)``` is preferred over ```if (value & (1 << 0))```. ### Formatting ### #### Long lines #### When possible, restrict lines to 80 characters or less. This is intended to: * Ensure that developers can use vertical splits in editors without line wrapping on them * Indicate that code is becoming too nested * Indicate that conditionals might be simplified If function prototypes are long, break the line along arguments. You may wish to group related arguments on the same line. The following are both acceptable:
int bladerf_set_sample_rate(struct bladerf *dev, bladerf_module module,
                            unsigned int rate, unsigned int *actual);
int bladerf_set_sample_rate(struct bladerf *dev,
                            bladerf_module module,
                            unsigned int rate,
                            unsigned int *actual);
When conditionals become long, first consider if there is a simpler or better way to organize the logic. Next, consider assigning some ```const bool``` variables for any complicated conditions. If attempting to break long lines simply creates a mess, err toward readability and leave it long. However, ensure you have considered the above comments. #### Braces, Parens, Spacing #### With respect to placement of braces and parenthesis, the below example is intended to exemplify the desired style. **Always** use braces with if and while statements, even they only contain a single statement. This is intended to avoid mistakes when other developers modify the code, add debug statements, etc. ------------------------------------------------------------------------------- ```c int mymodule_perform_device_operation(struct bladerf *dev, const uint8_t *input_array, uint8_t **output_array, size_t num_entries) { unsigned int i; uint8_t new_value; uint32_t flags; uint8_t *results; int status = 0; bool done = false; results = calloc(num_entries, sizeof(input_array[0])); if (results == NULL) { *output_array = NULL; return BLADERF_ERR_MEM; } for (i = 0; i < num_entries; i++) { new_value = (input_array[i] >> 4) | ((input_array[i] & 0x9) << 4); switch (input_array[i]) { case 0x00: case 0x01: flags = NORMAL_OPTIONS | SPECIAL_OPTIONS; break; case 0x80: flags = NORMAL_OPTIONS; break; case 0xff: flags = DEBUG_OPTIONS; break; default: status = BLADERF_ERR_INVAL; log_debug("Invalid value: 0x%02X at idx=%u\n", input_array[i], i); goto out; } while (!done) { status = process_entry(dev, flags, new_value, &results[i]); done = (status != 0) || (results[i] == COMPLETION_VALUE); } /* Use log_debug() to help developers understand why error values are * being returned */ if (status != 0) { log_debug("Failed to finish operation: %s\n", bladerf_strerror(status)); goto out; } /* Braces are always preferred for single-statement conditionals */ if (results[i] == 0x00 || results[i] == 0xff) { results[i] = 0x01; /* Clamp value because ... such and such ... */ } /* ... Other operations .. */ } out: if (status != 0) { free(results); *output_array = NULL; } else { *output_array = results; } return status; } ``` -------------------------------------------------------------------------------- ### Use of `goto` ### As shown in the above example, the use of `goto` is generally restricted to jumping to a single exit or clean-up point in a function. Using `goto` in this manner is greatly preferred over complicated nesting and extraneous status checks. Other uses of `goto` are not preferred, and will usually indicate that some changes to the flow of conditionals, state machines, etc., will be requested before the associated changes will be accepted. ### Types ### Use types that make your intent explicit to the reader. For example: * Use `size_t` for the size of some binary data. * Use `unsigned` types for values that should never be negative. * Use `bool` for values that should only be true or false. When operating on variables associated with fixed-size values, such as device registers, use the appropriate type from `stdint.h`. Even if you know with certainty that "unsigned int is 32 bits on platform X," use `uint32_t` for the sake of being explicit (and portable). #### Typedefs #### Avoid unnecessary typedefs. Stick to POSIX types and native types unless you have a very good reason. You may typedef enumerations. Ensure the enumeration values are reasonably named to avoid conflicts. **Do not** typedef structures. The `struct` keyword reminds developers what they are declaring may be a relatively large structure that should be heap-allocated or passed to functions via a pointer. Should you use `typedef`... **Do not** use a ```_t``` suffix. This suffix is [reserved for POSIX types][POSIX]. **Do not** typedef pointers. This is intended to ensure that it is clear what is and is not a pointer when a reader is looking at declarations and usages. For example, this is **not** acceptable: `typedef mystruct* mystruct_p;` [POSIX]: http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_02_02 "POSIX Name Space" ### Inline functions ### Prefer the use of static inline functions over macros in order to benefit from type safety. Inline functions should be small (a few lines) if they're to be used frequently. Larger inline functions are fine if they're used once just to break a larger routine into logical components. ### C89 compliance (Host-code only) ### In order to appease the MSVC compilers, we have unfortunately have to stick to some degree of C89 compliance. Specifically, to ensure code compiles with compilers shipped with Visual Studio: * Variable definitions must occur at the beginning of a scope. * Do not use named initializers. See the `FIELD_INIT` macro in `host_config.h(.in)` to work around this. **Note** that this implies that structure members must be initialized in order (for MSVC compatiblity). As such, `FIELD_INIT` serves more of a documentation purpose. See the below usage example.

        struct mystruct test = {
            FIELD_INIT(.field1, 0x01),
            FIELD_INIT(.field2, my_func_ptr),
            FIELD_INIT(.field3, "Some const str"),
        };
### `const` ### Use `const` liberally to help annotate your intent to not change the specified item(s). This is intended to help self-document code and establish clear interfaces contracts. ### `assert()` ### Return error values in cases where an invalid condition or input may be coming from user input. For example, code should not land in `assert()` because a user provided an out of range value. An error value, potentially with a descriptive log message, is more appropriate. In cases where the above does not apply, use `assert()` to ensure any preconditions or expected conditions are met. Also use `assert()` to help detect erroneous states indicative of bugs. Others may change your code code directly or code that uses your code under the hood. Use of `assert()` can help bring bugs to light before they are merged upstream. Use the "rel_assert.h" header file rather than . The former includes assertions in release code. It is preferred that code grinds to a halt under specific conditions, causing users to report issues, rather than yield strange and potentially intermittent behavior. ### Conversions ### See `host/common/include/conversions.h` for various conversion routines, such as string to value conversions. Add useful conversions here so that they may be used throughout the codebase. ### Min/Max Routines ### See `host/common/include/minmax.h for min/max routines.` Do not add additional `MIN()` or `MAX()` macros throughout source files. If you need something that is not present in the above header, add it there. Favor the routines in the above header over manual conditionals or use of the ternary operator. ### Debug output ### Use the macros in `host/common/include/log.h` for writing debug output. This is required in libbladeRF so that users can control the log verbosity. When adding debug output, strive to ensure that the output is something that will be meaningful when included in logs associated with with a bug report. The desired usage of the log functions are as follows. The functions at the top of the list should use sparingly. Functions at the bottom of the list may be used frequently in order to help provide information useful in diagnosing issues. #### `log_error()` #### Used to provide information a situations or conditions that will very likely lead to a crash or fatal error. #### `log_warning()` #### This should be regarded as a less severe form of `log_error()`. Use this to report conditions which may yield unexpected or undesired behavior. #### `log_info()` #### This is the default log level. Use this to provide the user with important information and reminders that don't warrant the severity of a scary "WARNING" or "ERROR" message. If in doubt, you'll generally want to use `log_debug()` instead of this level. #### `log_debug()` #### Use this to report high level status about program flow and to describe the situations under which `BLADERF_ERR_*` return values are being returned. #### `log_verbose()` #### Use this level to provide detailed information about low-level program operation, such as device register writes. ### Host/OS-specific Items ### When possible, avoid cluttering the code with `#ifdefs` for host and OS-specific conditions. Instead, look to utilize the facilities provided by CMake and this header template: `host/common/include/host_config.h(.in)` If you find that the above is insufficient, consider adding to it if your changes could be used elsewhere in the codebase. ### `ARRAY_SIZE()` ### `host/common/include/host_config.h(.in)` provides an `ARRAY_SIZE()` macro intended for determining the number of elements in a constant, contiguous array. Please use this rather than manually redefining another `(sizeof(x) / sizeof(x[0]))` macro. ### Threads ### The libbladeRF and bladeRF-cli code is currently tightly coupled to pthreads. However, in the future we would like to have the option of migrating to use native thread support when possible (e.g. in Windows), to reduce dependencies. To help ease future migration, please use the following macros from `host/common/include/thread.h`, rather than pthreads items directly: * `MUTEX` * `MUTEX_INIT(m)` * `MUTEX_LOCK(m)` * `MUTEX_UNLOCK(m)` When running the CMake configuration with `-DENABLE_LOCK_CHECKS=Yes`, the above macros will include status checks and `assert()` failures, which is intended to help track down deadlock scenarios. -------------------------------------------------------------------------------- VHDL ================================================================================ Below are the general guidelines for the VHDL portions of the bladeRF project. ### Whitespace ### * Spaces only. No tabs. * Indents shall be 4 spaces. * Vertical whitespace shall **not** indent with spaces to the current level of indentation. * Use Unix ("\n") line endings (as opposed to DOS "\r\n" line endings) * No trailing whitespace at the end of lines ### IEEE Libraries ### No libraries other than those specified in the IEEE standard shall be used. Some of the acceptable IEEE-specified libraries include: * `std_logic_1164` * `numeric_std` * `math_real` * `math_complex` More specifically, the `signed` and `unsigned` types will derive from `numeric_std` and not from `std_logic_arith` or any of the other Synopsys libraries. ### VHDL-2008 ### All VHDL shall be compatible with the VHDL-2008 standard and be synthesizable using the Altera Quartus II synthesis tool as well as the ModelSim simulator. ### Entities ### All entities that have generics shall write their generics in all capital letters. Ports on entities shall have a direction associated with them, preferably `in` or `out`. The use of `buffer` can be used in certain circumstances but sparingly. ### Architectures ### Multiple architectures for the same entity is allowed and encouraged for similar functions which may require different resources such as a fully pipelined CORDIC versus an iterative CORDIC. If multiple architectures are used with the same entity, it is recommended the architectures are all within the same VHDL file, but they can be split up. In these cases, the architecture name shall be representative of the inner workings of the implementation. In cases where a single behavioral model is being described, a generic `arch` or `behavioral` or `rtl` architecture name can be used. ### Records ### The use of records is encouraged throughout the codebase in places where it is logical to group signals together. An example of this may be for a finite state machine holding state in registers versus combinatorially creating new state. ### Instantiations ### Creation of components is not recommended. It may be required in some circumstances, but it should be avoided if at all possible. All instantiations are required to have a label preferably prefixed with `U_` with an appropriate name. Using the actual architecture name in the instantiation is recommended as well. All associations shall be named associations and nothing is positional. The associations shall be aligned on a 4-tab character boundary Instantiation via entity is preferred: ```vhdl U_sample_fifo : entity work.fifo(rtl) generic map ( WIDTH => 32, DEPTH => 1024 ) port map ( clock => clock, reset => reset, empty => sample_fifo_empty, full => sample_fifo_full, din => sample_fifo_din, we => sample_fifo_we, dout => sample_fifo_dout, re => sample_fifo_re ) ; ``` ### Testbenching ### Testbenches are highly recommended for every major entity. It is recommended that the testbenches be self checking and able to run in an automated fashion. The typical way for a testbench to finish is with:

    report "--- End of Simulation ---" severity failure ;
### IP ### Major pieces of IP should have a QIP file associated with them for easy inclusion into a Quartus II project. Moreover, the library it is compiled into shall be the name of the piece of IP that is being pulled in or the organization name that is creating the piece of unique IP. IP should go in the `hdl/fpga/ip` directory under the organization name that created or owns the piece of IP. Any Altera based pieces of IP shall go into the `altera` directory while all Nuand-based IP shall go in the `nuand` directory. ### Revisions ### The bladeRF FPGA is managed by using a single generic top-level and a Quartus II project file with multiple revisions. Revisions are a feature of the software which allow different source files as well as SDC files to be brought into the project and compiled. When making new functionality for a custom FPGA, it is recommended that a new revision is created in the `hdl/quartus/bladerf.tcl` file using the `make_revision` TCL command. A new QIP file should be added to the `hdl/fpga/platforms/bladerf` directory with the name of `bladerf-[revision].qip`. bladeRF-2024.05/doc/development/submitting_patches.md000066400000000000000000000211741457144405000225030ustar00rootroot00000000000000bladeRF Patch Submission Guidelines ================================================================================ In order to ensure your patches are accepted and merged in a timely fashion, please follow the guidlines presented in this document. Do not be surprised or discouraged if you are asked to iteratively change or improve portions of your patches before they are accepted. This is simply intended to help improve quality and consistency. In general, the easier you make it for the bladeRF devs to test and merge your changes, the quicker the process will be. For significant changes/fixes, please feel free to include an update to the CONTRIBUTORS file, or provide the information you would like included in an email to bladeRF@nuand.com. If you have not already, please review the [bladeRF Style and Coding Conventions](style_and_conventions.md). -------------------------------------------------------------------------------- ## Contributor Assignment Agreements ## For significant contributions, it is required that you sign and submit a Contributor Assignment Agreement (CAA) to bladeRF@nuand.com to assign copyright to Nuand, LLC. This is intended to allow Nuand to: * Ensure it has the necessary ownership or grants of rights over all contributions to allow them to be distributed under the chosen licence(s). * Address any (re)licensing issues, should they arise, without needing to coordinate and confirm with every single contributor. Please use the [Individual CAA](../../legal/bladerf_icaa.txt) if you are representing yourself as an individual, or otherwise, the [Entity CAA](../../legal/bladerf_ecaa.txt). If have you have quesions or concerns, or if it is not possible for you to submit a CAA, *do not let this dissuade you from contributing*. Contact us at bladeRF@nuand.com to discuss your situation. If you do not plan to submit patches using your real name, please ensure to make note of the email address and/or pseudonym you will be using when submitting the ICAA or ECAA. ## Guidelines ## ### Format ### Generate patches using `git format-patch`. Please ensure your `.gitconfig` contains appropriate values for the `name` and `email` fields. ### Commit messages ### All lines in the commit message should be under 80 characters. Generally, the first line should be 50-72 characters when emailing patches. The 80-character limit helps ensure the git log is easy to view in terminals, various git tools, and on GitHub. #### Summary line #### The first line in your commit message is what will generally be shown in log summaries, so it is important that it concisely and accurately summarizes your change. If possible, note the associated issue #. It should be formatted as follows: `[module]: Brief summary of change goes here` For example, if your change pertains to the bladeRF-cli: `bladeRF-cli: Added an 'example' command to do such and such` Or if you made a change to the FPGA: `hdl: Registered output of to address issue #972` #### Detailed Description #### In the remainder of the commit message, describe *why* the change is necessary, and *what* is addressing. Describe the underlying problem you are addressing, referencing the appropriate issue tracker item or describing associated symptoms/observables. If you are making improvements, optimizations, etc., try to include quantifications of these to justify your change. Provide a sufficiently detailed technical summary of your change(s). Although this is a rather subjective request, try to strive for a level of detail that will be helpful when reviewing the change log months down the road, as this information will be used when tracking down newly discovered defects. In general, your commit message should provide a sense of: * What portions of the code have been changed * How your changes affect device operation ### One objective per commit ### Each commit should contain cohesive changes that focus on only **one** objective. For example, if you have fixed a defect and have added new functionality, these changes should be submitted as two separate commits: one for resolving the defect, and another for introducing the new feature. The rationale is that it is easier to bisect the codebase to track down changes (and any new defects associated with them) when commits are cohesive and of a smaller scope. Following the above example, if a new defect were introduced by one of the two commits, it would be easier to determine which of the two were responsible via `git bisect`. When separating your commits, ensure that the codebase builds and runs with each changeset. If this is not possible, you may group the changes. This is most easily achieved by creating a branch for each task you work on, and generating patches from that branch. ### Rebase against upstream master ### Please rebase your patches against the upstream master. (See `git rebase`, and the interactive ```-i``` option). It is understood that master updates frequently and you may be a few commits behind. However, having your changes apply cleanly to master will help ensure your changes will get merged in a timely fashion. ### Squash commits ### For the reasons outlined in the previous two sections, use `git rebase -i`, to squash your commits to the smallest number of cohesive changesets. If you are new to this feature, it is **highly** recommended that you perform this operation in a staging branch, allowing you to easily get back to your original set of changes, should you make a mistake. While micro-committing is certainly helpful when developing, there is generally no reason to introduce a history of partial implementations or fixes in upstream repository. Just submit the final, complete, and fully-functional changesets. For example, consider the following set of changes.

bladeRF-cli: Renamed command 'do_x' to 'do_y'                           (8)
libbladeRF: Updated X to Y in API header example snippet                (7)
libbladeRF: Renamed functionality X to Y                                (6)
libbladeRF: Fixed off-by-one bugs in functionality X                    (5)
libbladeRF: Added sample usage of X to the API header file              (4)
libbladeRF: Fixed typos in functionality X                              (3)
bladeRF-cli: Added command 'do_x' to support libbladeRF functionality X (2)
libbladeRF: Added functionality X                                       (1)
It is undesirable to introduce the typo fixes and renaming commits into the upstream codebase when a more final and complete set of changes can instead be merged, yielding a more straight-forward change history. In this case, squash and reorder the commits prior to submitting them: * Squash `(1)`, `(3)`, `(5)` and `(6)` into one commit `(a)`. These libbladeRF changes will be the first patch/commit. * Squash `(4)` and `(7)` into `(b)`. This will be the second commit. * Squash `(2)` and `(8)` into `(c). This is the final commit. The desired result would look like this:

bladeRF-cli: Added command 'do_y' to support libbladeRF functionality Y (c)
libbladeRF: Added sample usage of Y to the API header                   (b)
libbladeRF: Added functionality Y                                       (a)
### Patch ordering ### Generally components of the bladeRF project should be updated in the following order, from top to bottom. When your changes span multiple components, please ensure they apply in the following order, or make it clear why they must be applied in a different order. * FPGA code * FX3 code * libbladeRF * bladeRF-cli This is intended to ensure that the system continues to operate with each commit, which is important when bisecting the codebase to locate where defects were introduced. For example, if an FPGA change introduces a new feature for use by libbladeRF, we would want that feature committed first, and then the associated libbladeRF functionality added afterwards. ## Submitting Patches ## Patches can be emailed to bladeRF@nuand.com. Please include `[PATCH]` in the subject line. Patches may also be submitted via GitHub pull requests. Please use a separate pull request per patch set, and stage each patch set in a separate branch. **Do not** continue committing changes to the branch you created a pull request from. If you find that additional changes are required after submitting your pull request: * Close the pull request, noting the reason for closing it. * Make the necessary changes in your fork. * Rebase and squash your commits as requested in this document. * Open a new pull request with your updated changes. Furthermore, **do not** commit unrelated changes to the branch used for your pull request. Work on unrelated changes in a different branch. bladeRF-2024.05/doc/development/test_checklist.md000066400000000000000000000466101457144405000216210ustar00rootroot00000000000000bladeRF Test Checklist ================================================================================ This file serves as a quick summary of tests that should be run regularly by developers to detect defects and regressions. Over time these procedures should become automated, and more fine-grained tests should be introduced. At that time, this document shall be updated to reflect usage of the automated tests. When running through the items contained in this file, developers should maintain an annotated copy of this file, containing: * The date when tests were run * The device versions used when performing tests * "Checks" in the "boxes" ([ ]) and any associated observations or notes -------------------------------------------------------------------------------- Build Tests ================================================================================ ## FPGA Bitstream ## * Perform FPGA images build with Quartus Prime (free edition) 17.1 (or latest version) for the following: * Board: bladeRF * Revision: hosted * [ ] Size: x40 * [ ] Size: x115 * Revision: atsc_tx * [ ] Size: x40 * [ ] Size: x115 * Board: bladeRF-micro * Revision: hosted * [ ] Size: A2 * [ ] Size: A4 * [ ] Size: A9 ## FX Firmware ## * Perform firmware builds for both variants: * [ ] Release * [ ] Debug * Ensure the build operates on the FX3 SDKs supported operating systems: * [ ] Windows * [ ] Linux * Flash the images to appropriate boards and verify: * [ ] Correct version number reported by `bladeRF-cli -e 'version'` (tagged builds should have no commit hash; other builds should) * [ ] Correct VID/PID and product descriptors are present on `lsusb -v` or `dmesg` * bladeRF: "Nuand bladeRF" `2cf0:5246` * bladeRF Micro: "Nuand bladeRF 2.0" `2cf0:5250` ## Host software ## Verify that build and installation completes from the top-level, from a clean build directory, for each of below configurations. Keep the "treat warnings as errors" option enabled; warnings should be regarded as defects. With a device attached, use the following commands to verify the build has installed and that the desired backend is being used: ```bladeRF-cli -e 'version' -e 'info'``` Additionally, ensure ```libbladeRF_test_c``` and ```libbladeRF_test_cpp``` build and run. * [ ] Debug build: ```-DCMAKE_BUILD_TYPE=Debug``` * [ ] Release build: ```-DCMAKE_BUILD_TYPE=Release -DTAGGED_RELEASE=Yes``` Perform the above builds with the following: * Linux (various distributions; see host/misc/docker) * This can be performed automatically, using Docker: ```bash host/misc/docker/parallel.bash | tee /tmp/output.txt``` * [ ] GCC * [ ] Clang * macOS (latest) * [ ] Apple LLVM * Windows (currently Windows 10 w/ Visual Studio Community 2017) * [ ] Build with support for both libusb and the Cypress backend. This should be the default behavior when both present on the build system. * [ ] Build with support for each of the two available backends. * [ ] Perform builds targeting Win32 and x64 * Misc * [ ] Build with documentation (from a clean CMake directory): ```-DBUILD_DOCUMENTATION=ON``` * Any Doxygen warnings should be regarded as defects. * [ ] Clang `ccc-analyzer` & `scan-build` (with `-maxloop 100` or greater): * CMake incantation: ```cmake -DBUILD_DOCUMENTATION=ON -DCMAKE_C_COMPILER=/usr/share/clang/scan-build-6.0/libexec/ccc-analyzer ..``` * Build and generate report: ```/usr/share/clang/scan-build-6.0/bin/scan-build -analyze-headers -maxloop 100 -o ./report make``` * Any items in the static analysis report should be regarded as defects. * Exception: `thirdparty/` Functional Tests ================================================================================ Most of the functional tests listed here are system-wide integration tests. Unit tests, Built-in self-tests (BISTs), and top-level test-benches are very much desirable additions for improving QA and testing efforts. (Patches are always welcome!) When appropriate, repeat each test for both USB 2.0 and USB 3.0 connections, and for both the bladeRF and bladeRF Micro. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ## FX3 Firmware Compliance Testing ## The USB IF Compliance test tools shall be used to identify missing/incorrect functionality. Run these and record any failures or warnings. * [USB30CV tool](http://www.usb.org/developers/tools/#usb30tools) * [USB20CV tool](http://www.usb.org/developers/tools/usb20_tools/#usb20cv) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ## SPI Flash Access ## The following items are intended to exercise SPI flash accesses. ### OTP region readback ### There should be no warnings, info, or debug messages reported while performing this operation. * [ ] ```bladeRF-cli -e 'info' -v debug``` should report the serial number. ### Calibration region readback ### There should be no warnings, info, or debug messages reported while performing this operation. * [ ] ```bladeRF-cli -e 'info' -v debug``` should report the VCTCXO DAC calibration and FPGA size. ### Writing calibration data ### During the following steps, there should be no error, warning, info, or debug messages other than the information about flash page read operations. * [ ] Back up calibration data via: ```bladeRF-cli -e 'flash_backup cal.bin cal' -v debug``` * [ ] Write new calibration data (using the appropriate FPGA size) via: ```bladeRF-cli -e 'flash_init_cal 40 0x8000' -v debug``` * [ ] Power cycle the device and verify the new values (see the previous subsection). * [ ] Restore the original calibration data via: ```bladeRF-cli -e 'flash_restore cal.bin' -v debug``` * [ ] Power cycle the device and verify the new values. ### Firmware Programming ### Consider any errors or warnings to be defects during these operations. Info messages are expected, and are intended to provide the user with feedback about the status of flash operations. * [ ] Force the device back to the FX3 bootloader via: ```bladeRF-cli -e 'jump_to_boot' -v debug``` * [ ] Power cycle the device. It should continue to boot into the bootloader, instead of the firmware. * [ ] "Recover" the device and Flash firmware via the bladeRF-cli: ``` bladeRF> recover bladeRF_fw_vX.Y.Z.img bladeRF> open bladeRF> load fx3 bladeRF_fw_vX.Y.Z.img ``` * [ ] Power cycle the device and verify that it boots the desired firmware, and that the calibration data is intact: ```bladeRF-cli -e 'version' -e 'info' -v debug``` * [ ] Flash a different version of firmware via: ```bladeRF-cli -f bladeRF_fw_vA.B.C.img -v debug``` * [ ] Power cycle the device and verify that the new firmware has been loaded, and that the calibration data is correct. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ## FPGA Loading ## ### FPGA Flash-based Autoloading ### Consider any errors or warnings to be defects during these operations. Info messages are expected, and are intended to provide the user with feedback about the status of flash operations. Ensure that you do not have any FPGA bitstreams on the host set up for host-based autoloading. * [ ] Erase any previously stored FPGA images: ```bladeRF-cli -L X -v debug``` * [ ] Power cycle the device, and verify that this has not corrupted the calibration data or firmware: ```bladeRF-cli -e 'version' -e 'info' -v debug``` * [ ] Write an FPGA bitstream to flash: ```bladeRF-cli -L -v debug``` * [ ] Power cycle the device and verify that the firmware boots, the FPGA is loaded, and that the calibration data has not been corrupted. ```bladeRF-cli -e 'version' -e 'info' -v debug``` * Ensure this works when powered from a USB host, from a USB charger, and from a power supply connected to the DC barrel plug. * [ ] Erase the FPGA and perform the associated verifications. ### Host-based Autoloading ### * [ ] Place a FPGA image to an autoload directory. * [ ] Power cycle the device. * [ ] Verify that the intended FPGA is loaded: ```bladeRF-cli -e 'version' -e 'info' -v debug``` ### Manual FPGA Loading ### * [ ] Verify that FPGA loading via ```bladeRF-cli -l -v debug``` succeeds. * [ ] Verify that the expected version was loaded: ```bladeRF-cli -e 'version' -e 'info' -v debug```. Load a different version with the FPGA already loaded, and preform the verification step again. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ## Basic Device Control: bladeRF ## These device control operations may be performed with the `bladeRF-cli`, or for simplicity, third party tools, as they should utilize the same underlying `libbladeRF` API calls. A signal generator and spectrum analyzer are required for many of these items. ### Frequency Tuning ## When performing these tests, make notes of the frequencies that you are using. If issue occur, it is important to know if it is when crossing "bands" or internal device ranges. #### RX #### * [ ] Verify reception of reference signals at various frequencies in 300 MHz - 3.8 GHz, ***without*** a XB-200 attached. * [ ] Verify reception of reference signals at various frequencies up to 3.8 GHz, ***with*** a XB-200 attached, using each filter configuration: * [ ] Auto 3 dB filterbank * [ ] Auto 1 dB filterbank * [ ] 6m filterbank * [ ] 2m filterbank * [ ] 1.25m filterbank * [ ] Custom path #### TX #### Suggested reference signal: W-CDMA QPSK test pattern * [ ] Verify that a VSA can receive and demodulate reference signals at frequencies in 300 MHz - 3.8 GHz, ***without*** a XB-200 attached. * [ ] Verify that a VSA can receive and demodulate reference signals at frequencies up to 3.8 GHz, ***with*** a XB-200 attached, using each filter configuration: * [ ] Auto 3 dB filterbank * [ ] Auto 1 dB filterbank * [ ] 6m filterbank * [ ] 2m filterbank * [ ] 1.25m filterbank * [ ] Custom path ### Gain ### #### RX #### Supply the device with a reference signal and verify the effect of changing the gain values for: * [ ] Overall system gain (`set gain rx `) * [ ] RX LNA * [ ] RX VGA1 * [ ] RX VGA2 #### TX #### Transmit a reference signal to a VSA and verify the effect of changing the gain values for: * [ ] Overall system gain (`set gain tx `) * [ ] TX VGA1 * [ ] TX VGA2 ### Bandwidth ### #### RX #### * [ ] Supply a reference signal of a wide bandwith and verify the effect of changing the RX bandwidth. #### TX #### * [ ] Transmit a reference signal of a wide bandwith to a VSA and verify the effect of changing the TX bandwidth. ### DC Offset ### Repeat the following steps for a variety of frequency/gain combinations and make note of the results. * [ ] Use the bladeRF-cli to perform an initial ```cal lms``` at a desired frequency and gain. * [ ] In the CLI, perform a ```cal dc rx``` operation, and note the effect on received IQ values and on an FFT plot. * [ ] Create and load an RX calibration table. Verify that corrections are applied over the range of the table. * [ ] In the CLI, perform a ```cal dc tx``` operation, and transmit a tone into a VSA. Make note of the difference in the DC offset. * [ ] Create and load a TX calibration table. Verify that corrections are applied over the range of the table. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ## Basic Device Control: bladeRF Micro ## These device control operations may be performed with the `bladeRF-cli`, or for simplicity, third party tools, as they should utilize the same underlying `libbladeRF` API calls. A signal generator and spectrum analyzer are required for many of these items. ### Frequency Tuning ## When performing these tests, make notes of the frequencies that you are using. If issue occur, it is important to know if it is when crossing "bands" or internal device ranges. #### RX #### * [ ] Verify reception of reference signals at various frequencies in 70 MHz - 6 GHz * [ ] RX1 * [ ] RX2 * [ ] Verify that `print rssi` prints reasonable values that vary based on signal level. * [ ] RX1 * [ ] RX2 #### TX #### Suggested reference signal: W-CDMA QPSK test pattern * [ ] Verify that a VSA can receive and demodulate reference signals at frequencies in 70 MHz - 6.0 GHz * [ ] TX1 * [ ] TX2 ### Gain ### #### RX #### Supply the device with a reference signal and verify the effect of changing the gain values for: * [ ] Overall system gain (`set gain rx{1,2} `) * [ ] RX1 * [ ] RX2 * [ ] `full` stage (`set gain rx{1,2} full `) * [ ] RX1 * [ ] RX2 #### TX #### Transmit a reference signal to a VSA and verify the effect of changing the gain values for: * [ ] Overall system gain (`set gain tx{1,2} `) * [ ] TX1 * [ ] TX2 * [ ] `dsa` stage (`set gain tx{1,2} dsa `) * [ ] TX1 * [ ] TX2 ### Bandwidth ### #### RX #### * [ ] Supply a reference signal of a wide bandwith and verify the effect of changing the RX bandwidth. * [ ] RX1 * [ ] RX2 #### TX #### * [ ] Transmit a reference signal of a wide bandwith to a VSA and verify the effect of changing the TX bandwidth. * [ ] TX1 * [ ] TX2 ### ADF4002 ### Connect a 10 MHz reference source (e.g. GPSDO, or 10 MHz ref output from VSA) to `REFIN` (J95). The signal should be [TODO: voltage here ... sine/square?] Note: Ensure the VSA is synchronized to the same clock. Caution: UFL connectors are fragile and have limited mating cycles. Transmit a reference signal (e.g. QPSK constellation into EVM analysis, or a tone into spectrum analysis) into a VSA. * [ ] With the ADF4002 disabled (`set adf_enable 0`), note the frequency offset of the reference signal. * [ ] `print adf_enable` should report `ADF Chip Enable: disabled` * [ ] Enable the ADF4002 (`set adf_enable 1`). * [ ] `print adf_enable` should report `ADF Chip Enable: enabled` and `ADF Chip Locked: locked` * [ ] The frequency offset of the reference signal should be very small, within a few Hz. * [ ] `print trimdac` should report `0xc000` for current VCTCXO trim * [ ] Change the ADF4002's reference frequency: `set adf_refclk 9M` * [ ] `print adf_enable` should report `ADF Chip Enable: enabled` and `ADF Chip Locked: unlocked` * [ ] Change the ADF4002's reference frequency back to 10 MHz: `set adf_refclk 10M` * [ ] `print adf_enable` should report `ADF Chip Enable: enabled` and `ADF Chip Locked: locked` * [ ] Disable the reference clock while the ADF is enabled (note: don't do this on the UFL connector) * [ ] `print adf_enable` should report `ADF Chip Enable: enabled` and `ADF Chip Locked: unlocked` * [ ] Disable the ADF4002 (`set adf_enable 0`) * [ ] `print adf_enable` should report `ADF Chip Enable: disabled` * [ ] `print trimdac` should NOT report `0xc000` for current VCTCXO trim, but should instead return to its previous value. ### Bias tees ### Note: disconnect RX1/RX2/TX1/TX2 when testing the bias tees to avoid possible damage to test equipment. * [ ] Disable the bias tees: `set biastee rx 0 ; set biastee tx 0` * [ ] Verify 0 VDC between RX1/RX2/TX1/TX2 center pin and ground * [ ] Enable the RX bias tees: `set biastee rx 1` * [ ] Verify ~5 VDC between the center pins of RX1 & RX2 and ground, and 0 VDC between the center pins of TX1 & TX2 and ground * [ ] Enable the TX bias tees: `set biastee tx 1` * [ ] Verify ~5 VDC between the center pins of RX1/RX2/TX1/TX2 and ground * [ ] Disable the RX bias tees: `set biastee rx 0` * [ ] Verify ~5 VDC between the center pins of TX1 & TX2 and ground, and 0 VDC between the center pins of RX1 & RX2 and ground * [ ] Disable the TX bias tees: `set biastee tx 0` * [ ] Verify 0 VDC between RX1/RX2/TX1/TX2 center pin and ground - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ### libbladeRF test programs ### The libbladeRF test programs are intended to exercise specific functionalities provided by the API. However, these programs inherently exercise device control functionality not included above. A selection of the ```libbladeRF_test_*``` programs is provided here to attempt to maximize coverage with a small number of programs. #### ```libbladeRF_test_ctrl``` #### This test ensures that various device control calls complete without error. Run all of its tests on bladeRF1 **without** an XB-200 attached. * [ ] ```sampling``` * [ ] ```lpf_mode``` * [ ] ```enable_module``` * [ ] ```loopback``` * [ ] ```rx_mux``` * [ ] ```correction``` * [ ] ```samplerate``` * [ ] ```bandwidth``` * [ ] ```gain``` * [ ] ```frequency``` * [ ] ```threads``` Run all of its tests on bladeRF1 **with** an XB-200 attached. * [ ] ```sampling``` * [ ] ```lpf_mode``` * [ ] ```enable_module``` * [ ] ```loopback``` * [ ] ```rx_mux``` * [ ] ```xb200``` * [ ] ```correction``` * [ ] ```samplerate``` * [ ] ```bandwidth``` * [ ] ```gain``` * [ ] ```frequency``` * [ ] ```threads``` Run all of its tests on bladeRF2 with FPGA-based tuning (default). * [ ] ```sampling``` * [ ] ```lpf_mode``` * [ ] ```enable_module``` * [ ] ```loopback``` * [ ] ```rx_mux``` * [ ] ```correction``` * [ ] ```samplerate``` * [ ] ```bandwidth``` * [ ] ```gain``` * [ ] ```frequency``` * [ ] ```threads``` Run all of its tests on bladeRF2 with host-based tuning (`BLADERF_DEFAULT_TUNING_MODE='host'`). * [ ] ```sampling``` * [ ] ```lpf_mode``` * [ ] ```enable_module``` * [ ] ```loopback``` * [ ] ```rx_mux``` * [ ] ```correction``` * [ ] ```samplerate``` * [ ] ```bandwidth``` * [ ] ```gain``` * [ ] ```frequency``` * [ ] ```threads``` #### ```libbladeRF_test_rx_discont``` #### * [ ] Run this program over a variety of valid sample rates (for the particular USB connection). No discontinuities should occur. * [ ] Run this program over for sample rates that your USB controller does not support. Discontinuities should be reported. #### ```libbladeRF_test_repeater``` #### This program uses the async interface to immediately retransmit received samples. Supply a reference signal from a signal generator, and verify that it can be demodulated without failures on a VSA. Record the sample rates, bandwidths, frequencies, and stream parameters used. * [ ] Verify that transmitted samples are representative of the received signals. #### ```libbladeRF_test_timestamps``` #### This program verifies timestamp functionality. Run all available test at a variety of sample rates. Not that some tests (e.g., loopback_onoff) are not designed to support high sample rates. * [ ] ```rx_gaps``` * [ ] ```rx_scheduled``` * [ ] ```tx_onoff``` * [ ] ```tx_onoff_nowsched``` * [ ] ```tx_gmsk_bursts``` * [ ] ```loopback_onoff``` * [ ] ```format_mismatch``` * [ ] ```readback``` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ### libbladeRF sample programs ### As these are intended to exemplify API usage, these programs must be correct. Verify that the following run as intended: * [ ] ```libbladeRF_example_open_via_serial``` * [ ] ```libbladeRF_example_sync_rxtx``` * [ ] ```libbladeRF_example_sync_rx_meta``` * [ ] ```libbladeRF_example_sync_tx_meta``` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ## Third-party Tools ## Testing against third-party tools with bladeRF support to ensure changes have not introduced compatibility issues is highly recommended. Make note of the tool and its version, for future comparison, should any issues arise. bladeRF-2024.05/doc/development/version_change_checklist.md000066400000000000000000000100511457144405000236220ustar00rootroot00000000000000bladeRF Version Change Checklist ================================================================================ This document describes tasks that must be performed when updating the version numbers of various components contained in this repository. Build and functional tasks are a given are documented [elsewhere][tests] and are not covered here. [tests]: test_checklist.md When multiple components in the repo have changed, this checklist should be performed in the following order: * FPGA * FX3 Firmware * libbladeRF * bladeRF-cli * Project-wide items -------------------------------------------------------------------------------- FPGA ================================================================================ * [ ] Update the ```hdl/CHANGELOG``` file * [ ] Update the version number in the NIOS II ```fpga_version.h``` files (one per platform) * [ ] Update the version compatibilty table in the libbladeRF ```compatibility.c``` files (one per platform) * [ ] Apply the tag: ```fpga_vX.Y.Z``` * [ ] Generate the official bitstreams ***at*** the tag and have them uploaded to https://www.nuand.com/fpga * [ ] Update the ```bladerf-fpga-hostedx*.postinst``` files under ```host/debian/```. FX3 Firmware ================================================================================ * [ ] Update the ```fx3_firmware/CHANGELOG``` file * [ ] Update the version number in the FX3 firmware CMakeLists.txt file * [ ] Update the version compatibility table in the libbladeRF ```version_compat.c``` file. * [ ] Apply the tag: ```firmware_vX.Y.Z``` * [ ] Generate the official image ***at*** the tag with the following CMake config: * ```-DTAGGED_RELEASE=Yes``` (If building from top-level) * ```-DVERSION_INFO_EXTRA=""``` (If building in fx3_firmware) * [ ] Have the image uploaded to https://www.nuand.com/fx3 * [ ] Update the ```bladerf-firmware-fx3.postinst``` file under ```host/debian```. libbladeRF ================================================================================ * [ ] Update the ```libbladeRF/CHANGELOG``` file * [ ] Update the version number in ```libbladeRF/CMakeLists.txt``` * [ ] Update the version number in ```libbladeRF/include/libbladeRF.h``` * [ ] Apply the tag: ```libbladeRF_vX.Y.Z``` * [ ] Generate Doxygen pages ***at*** the tag with: * ```-DBUILD_DOCUMENTATION=ON``` * ```-DTAGGED_RELEASE=Yes``` (If building from top-level) * ```-DVERSION_INFO_EXTRA=""``` (If building in ```host/```) * [ ] Gather the Doxygen pages from ```host/build/libraries/libbladeRF/doc/doxygen/html/``` and have them uploaded to https://www.nuand.com/bladeRF-doc/libbladeRF/vX.Y.Z/ bladeRF-cli ================================================================================ * [ ] Regenerate the fallback ```cmd_help.*``` items using the ```generate.bash``` script. (This is in ```src/cmd/doc/```.) * [ ] Update the version number in the CMakeLists.txt file * [ ] Update the ```bladeRF-cli/CHANGELOG``` file * [ ] Apply the tag ```bladeRF-cli_vX.Y.X``` MATLAB Bindings ================================================================================ * [ ] Regenerate ```libbladeRF_proto.m``` if required (TODO: how?) * [ ] Update the ```CHANGELOG``` file * [ ] Apply the tag: ```matlab_vX.Y.X``` Python Bindings ================================================================================ * [ ] Regenerate ```_cdef.py``` if required: * ```cd host/libraries/libbladeRF_bindings/python``` * ```python3 scripts/import_header.py ../../libbladeRF/include/libbladeRF.h > bladerf/_cdef.py``` * [ ] Update the version number in the ```setup.py``` file * [ ] Update the ```CHANGELOG``` file * [ ] Apply the tag: ```python_vX.Y.X``` Project-wide items ================================================================================ * [ ] Ensure ***all*** of the above items are at a tagged version * [ ] Update the top-level CHANGELOG file. * [ ] Update the ```debian/changelog``` file using ```dch -i``` * [ ] Apply the tag: ```YYYY.MM[-rcN]``` * [ ] Prepare the API docs and binary packages bladeRF-2024.05/doc/development/versioning.md000066400000000000000000000070401457144405000207660ustar00rootroot00000000000000bladeRF Versioning and Tags ================================================================================ This document describes the versioning and tagging scheme that shall be used when updating the version numbers of various components in the bladeRF project. -------------------------------------------------------------------------------- Version Numbering Scheme ================================================================================ ## Individual Components ## The version numbering scheme of the following components shall follow the [Semantic Versioning 2.0.0][semver] scheme in order to convey meaningful information about changes. In short, versions shall take the form `major.minor.patch[-extra]` and are used to describe changes to a component's primary interface(s). * The major version shall be incremented to denote reverse-incompatible changes in the component's interface(s). * This should be a very infrequent occurrence, and one that is met with serious thought and consideration for upgradability. * The minor version shall be incremented to denote reverse-compatible additions. * The patch version shall be incremented for reverse-compatible bug fixes and internal changes that do not affect the primary interface(s). The `-extra` portion will generally be used to include the git revision associated with the component when it was built. Below are the versioned components and a brief description of their primary interface(s). * bladeRF-cli * Command set and command line parameters * libbladeRF * The libbladeRF API * FX3 Firmware * Format and usage of control and bulk transfers, as well as the usage of endpoints, interfaces, and alt. settings. * FPGA * FPGA <-> FX3 control and data streaming interfaces [semver]: http://semver.org/spec/v2.0.0.html ## Project-wide Version ## The project-wide version number is based upon the release date. The rationale for this is that the individual components are already versioned; A number with major, minor, and patch values would not add additional value. The project-wide version number takes the format `YYYY.MM[-rcN]` where: * `YYYY` is a four digit year * `MM` is a two-digit month * `-rcN` is a release-candidate suffix Items marked with the `-rcN` should be regarded as betas. While more stable than nightly builds, these may contain new functionality still undergoing review and testing. As of Dec 2014, the `YYYY.MM` portions correspond to the date of the release (candidate). Prior to this, these values were set to the scheduled release, which caused confusion and issues with systems trying to sort tags. For example, an release candidate in Dec 2014 will now be marked `2014.12-rc1`, whereas it might have been labeled `2014.02-rc1` in the past. Tagging Scheme ================================================================================ The tagging is intended to closely follow the above version number scheme. ## Individual Components ## Components are individually tagged in order to aid developers in determining which commits are before/after a particular version number. **Users and package maintainers will generally only want to pay attention to the project-wide tags.** Tags shall be applied in the form, `_vX.Y.Z`. Below is the list of `` values to use: * bladeRF-cli * libbladeRF * firmware * This is for FX3 firmware * fpga * This is for all FPGA and HDL-related changes, including the NIOS II code. ## Project-wide Tags ## The project-wide tags are the same as the project-wide version number: `YYYY.MM[-rcN]` bladeRF-2024.05/doc/packaging.md000066400000000000000000000177351457144405000162210ustar00rootroot00000000000000bladeRF Package Maintainer's Guide ================================================================================ This document is intended to provide guidance and recommendations to bladeRF package maintainers, or anyone redistributing bladeRF binaries. Feedback on this document is greatly appreciated, as it will help establish common practices and procedures. ## Objectives ## Below are the objectives for packaging, from the bladeRF development team's perspective. Package maintainers should not have to jump through hoops to package bladeRF support in manner required by their OS's package repositories. Specifically, package maintainers **should not** have to apply patches to build and deploy bladeRF support. More importantly, the end users should not need to perform any excessive configuration. The bladeRF project's CMake flags should provide the ability to sufficiently change paths, build options, and configure the use of optional dependencies. If this is found **not** to be the case, it should be considered a defect in the bladeRF project and [reported as a bug] on the [issue tracker]. [reported as a bug]: reporting_bugs.md [issue tracker]: https://github.com/Nuand/bladeRF/issues [COPYING]: ../COPYING ## Components ## The bladeRF repository consists of the following components: #### libbladeRF #### The libbladeRF host library provides the ability to configure and operate the device. This is the primary item to distribute in binary packages. Required dependencies: * pthreads * libusb-1.0. * For best results with USB 3.0, a very recent version is recommended. Optional build dependencies: * [Doxygen](http://www.doxygen.org) * This allows libbladeRF API documentation to be built. #### bladeRF-cli #### This program provides a command-line interface atop of libbladeRF. It is **highly** recommended that this be provided to users, as it is provides the ability to upgrade the device, as well as a number of commands to quickly test and verify device operation. Required dependencies: * libbladeRF * pthreads * libusb-1.0 * libm (math) Optional dependencies: * [libtecla](http://www.astro.caltech.edu/~mcs/tecla/) * This is recommended, as it provides history, tab-completion, and vi or emacs key-bindings to the bladeRF-cli program, yielding a much improved user experience. Optional build dependencies: * [pandoc](http://johnmacfarlane.net/pandoc/) * This is used to build the bladeRF-cli help text. This is recommended if your package is tracking "bleeding edge" changes. However, it should not be necessary when tracking release tags, as the pre-built help text should have been updated as part of the release procedures. * [help2man](https://www.gnu.org/software/help2man/) * This is used to generate the bladeRF-cli manual page. #### FX3 Firmware #### This firmware runs on the Cypress FX3 USB controller and performs the following: * Loading the FPGA * Handling SPI flash access * Dispatching device configuration requests to the FPGA * Performing DMA operations associated with sample streaming. Once written into SPI flash (via a libbladeRF API call or the bladeRF-cli), the device will boot this firmware automatically. This firmware requires the [Cypress FX3 SDK](http://www.cypress.com/?rID=57990) to build. As such, it is recommended that this firmware be obtained via the Nuand-hosted pre-built binaries, linked later in this document. The firmware does not need to be stored in any particular location. It simply needs to be user-accessible for upgrades. #### FPGA bitstream #### The FPGA controls and interfaces with the LMS6002D transceiver and the SI5338 clock generator. There are two bladeRF variants, each with a different sized FPGA. These differences are denoted by the FPGA variant name, ```x40``` or ```x115```, with the latter being the larger FPGA. The ```x40``` and ```x115``` require different FPGA images. These FPGA bitstreams must be loaded onto the device every time it is powered on. To alleviate the need to manually do this there are two [autoloading] mechanisms: * [Host-based autoloading] * By storing the FPGA bitstreams (named ```hostedx40.rbf``` or ```hostedx115.rbf```) in particular locations, libbladeRF can find and load the appropriate FPGA image when opening a device handle. See the above link for more information about the searched locations. **This is the recommended autoloading option.** * Flash-based autoloading * This is recommended only for advanced users with a need for the FPGA to be autoloaded without a host machine. The FPGA image can be written to SPI flash via the bladeRF-cli program. It is recommended that the ```x40``` and ```x115``` be shipped in the directories associated with host-based autoloading. The [Altera Quartus II] tools are required to build these FPGA bitstreams. It is recommended that you use Nuand's pre-built images, linked later in this document. [autoloading]: https://github.com/Nuand/bladeRF/wiki/FPGA-Autoloading [Host-based autoloading]: https://github.com/Nuand/bladeRF/wiki/FPGA-Autoloading#host-software-based [Altera Quartus II]: http://dl.altera.com/13.1/?edition=web ## Configuration and Build ## This section briefly notes some important CMake configuration flags. Please see the README files in the source tree for more complete information about available CMake options. #### Release Build #### Use ```-DCMAKE_BUILD_TYPE=Release``` to configure a release build without debug symbols. Use ```-DCMAKE_BUILD_TYPE=RelWithDebInfo``` to configure a release build **with** debug symbols. #### Extra Version Information #### Normally, a git revision will be appended to version numbers. To remove this, run CMake with ```-DTAGGED_RELEASE=Yes``` when building from the top-level, or ```-DVERSION_INFO_EXTRA=""``` otherwise. If you would like to append package information to version numbers, you may use the aforementioned ```VERSION_INFO_OVERRIDE``` option. For example: ```-DVERSION_INFO_OVERRIDE="buildbot-2014.11.30"``` If you forget to clear the "extra" version info field, you will wind up with a Git changeset appended to components' version strings, or ```-git-unknown``` if a git repository was not found. #### Documentation #### Use ```-DBUILD_DOCUMENTATION=ON``` to enable the generation of documentation. When necessary tools (Doxygen, pandoc, help2man) are found, the above configuration option will default the libbladeRF API docs and the bladeRF-cli help text and manpage to be ON. See the libbladeRF and bladeRF-cli README files for more information about enabling/disabling documentation generation. ## Versions and Tags ## As noted in [versioning] document, package maintainers should only be concerned with the project-wide releases and tags, which are in the following format: YYYY.MM[-rcN] For example: ```2014.11``` or ```2014.11-rc3``` (for release candidate 3). To view these tags in the repository: ``` $ git tag | grep '^20[0-9]\{2\}\.[0-9]\{2\}\(-rc[0-9]\+\)\?' ``` The top-level [CHANGELOG] file lists the various component versions that are associated with a tagged release with note similar to the following: ``` This release candidate consists of the following versions: * FPGA bitstream v0.1.2 * FX3 firmware v1.8.0 * libbladeRF v1.0.0 * bladeRF-cli v1.0.0 ``` [versioning]: development/versioning.md [CHANGELOG]: ../CHANGELOG ## Pre-built Binaries ## Official pre-built [FX3 firmware images] and [FPGA bitstreams] are hosted on the Nuand website, along with MD5 and SHA256 checksums. Whether or not these binaries may be included in packages will likely vary with OS/Distro policies. Be aware that while that Nuand's HDL files and FX3 source code are MIT licensed, the required Altera tools and Cypress libraries required to build these items are not open source; this is unfortunately unavoidable. [FX3 firmware images]: https://www.nuand.com/fx3.php [FPGA bitstreams]: https://www.nuand.com/fpga.php ## Licenses ## The top-level [COPYING] file notes the licenses associated with each component in the project. bladeRF-2024.05/doc/reporting_bugs.md000066400000000000000000000126771457144405000173260ustar00rootroot00000000000000bladeRF Bug Reporting Guide ================================================================================ A common question received by bladeRF developers is, "How can I help?" This is a great question to hear, and one with a myriad of answers. One of the top answers is simply to report bugs! More specifically -- report bugs with plenty of information and analysis to cut down on the time required for investigation and debugging. (Even better, include some potential solutions or patches!) This document outlines the preferred bug reporting process and provides some tips to make bug reports helpful and efficient to handle. -------------------------------------------------------------------------------- ## Verify your version information ## When reporting issues, it is very important to gather information pertaining to the versions of the various components you are using: * bladeRF-cli * libbladeRF * [FX3 Firmware](https://www.nuand.com/fx3) * [FPGA bitstream](https://www.nuand.com/fpga) This information can be obtained through libbladeRF API calls, or via the ```version``` command in the bladeRF-cli program. Updating to the latest available versions of the above components is generally the first course of action when encountering issues, as the issue may have already been resolved. If you indicate that you are using older versions in a bug report, you will generally be asked to update first. Do not be offended by this request -- it simply helps ensure that everyone is on the same page when debugging, as developers are often working with the "bleeding edge" codebase. If you are building the above components from git, be sure to include the git changeset you are building from. Usually, this will be included in the version string. Lastly, be sure to note where the binaries you are using are coming from: * Build from source * Package manager (Distro repository, Ubuntu PPA, MacPorts or Homebrew, etc.) * The Windows installer ## Gather detailed technical information ## The better the quality of information you are able to gather and provide, the better the chances are that the issue will get resolved quickly. Make note of the device settings you are using. Try to provide the exact series of actions required to reproduce the issue. Make note of any observables or symptoms that lead up to the problem you are experiencing. If the sequence of actions to needed to reproduce the failure is fairly complex, try to provide a script or small program. If the bug is occurring within the context of a larger program, try to isolate it to a particular code snippet or try to reproduce the bug in a small program that you can share -- the more concise the program, the better. For crashes, especially intermittent ones, it is **very** helpful to come forth with logs from a debugger. For example, if you find your program to be segfaulting, a backtrace is very helpful in determining where the program crashed. The state of variables in various stack frames leading up to the crash are also important to note. See [this wiki page][debugging] for tips on gathering this type of intormation. [debugging]: https://github.com/Nuand/bladeRF/wiki/Debugging For memory-related defects, [Valgrind](http://valgrind.org/) output is extremely helpful to gather and provide. ## The bladeRF issue tracker ## Bugs and feature requests are tracked via the GitHub [issue tracker](https://github.com/Nuand/bladeRF/issues). This issue tracker should **not** be used for general support requests. Such requests will be immediately closed, and you will be asked to move your questions to the [Nuand forums](https://www.nuand.com/forums). Again, try to ensure you are running the latest available code before submitting new issue. Check for any similar open or closed issues. If there is a relevant open issue, you should use the existing issue to supply more information. If you find that there is a closed issue pertaining to your issue, and you are **positive** that you are running code that includes the changes associated with the resolution, make note of the closed issue and be sure to include a reference to it in your bug report. Also include any references to issues that you suspect to be related or similar. When referencing issues, use the syntax ```#```. GitHub will automatically create a link for you! For example, ```#312``` will generate a link to https://github.com/Nuand/bladeRF/issues/312. When submitting a [new issue](https://github.com/Nuand/bladeRF/issues/new), please try to use the following convention for the issue title: ```[component] Brief issue description``` Where ```component``` refers to libbladeRF, bladeRF-cli, hdl (for FPGA issues), or fx3 (for FX3 firmware issues). If you are not certain which component is at fault, you can leave this out. A developer will add it when this has been determined. GitHub will show the first 90 or so characters if the issue title, so try to make your title concise. Include all of that excellent information you have gathered in the description. Try to keep this description self-contained by attaching images or including logs inline. See the [GitHub Markdown syntax][markdown] for more information on how to format your post nicely. Specifically, see the *Syntax highlighting* section for including logs. [markdown]: https://guides.github.com/features/mastering-markdown/ Remember, you are presenting this information to someone who is not sitting there with you during your investigation. Make sure you provide ample context! bladeRF-2024.05/firmware_common/000077500000000000000000000000001457144405000163555ustar00rootroot00000000000000bladeRF-2024.05/firmware_common/README.md000066400000000000000000000001111457144405000176250ustar00rootroot00000000000000This directory contains files shared between firmware and host software. bladeRF-2024.05/firmware_common/bladeRF.h000066400000000000000000000112401457144405000200230ustar00rootroot00000000000000/* * Copyright (c) 2013 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef _BLADERF_FIRMWARE_COMMON_H_ #define _BLADERF_FIRMWARE_COMMON_H_ #define BLADE_USB_CMD_QUERY_VERSION 0 #define BLADE_USB_CMD_QUERY_FPGA_STATUS 1 #define BLADE_USB_CMD_BEGIN_PROG 2 #define BLADE_USB_CMD_END_PROG 3 #define BLADE_USB_CMD_RF_RX 4 #define BLADE_USB_CMD_RF_TX 5 #define BLADE_USB_CMD_QUERY_DEVICE_READY 6 #define BLADE_USB_CMD_QUERY_FLASH_ID 7 #define BLADE_USB_CMD_QUERY_FPGA_SOURCE 8 #define BLADE_USB_CMD_FLASH_READ 100 #define BLADE_USB_CMD_FLASH_WRITE 101 #define BLADE_USB_CMD_FLASH_ERASE 102 #define BLADE_USB_CMD_READ_OTP 103 #define BLADE_USB_CMD_WRITE_OTP 104 #define BLADE_USB_CMD_RESET 105 #define BLADE_USB_CMD_JUMP_TO_BOOTLOADER 106 #define BLADE_USB_CMD_READ_PAGE_BUFFER 107 #define BLADE_USB_CMD_WRITE_PAGE_BUFFER 108 #define BLADE_USB_CMD_LOCK_OTP 109 #define BLADE_USB_CMD_READ_CAL_CACHE 110 #define BLADE_USB_CMD_INVALIDATE_CAL_CACHE 111 #define BLADE_USB_CMD_REFRESH_CAL_CACHE 112 #define BLADE_USB_CMD_SET_LOOPBACK 113 #define BLADE_USB_CMD_GET_LOOPBACK 114 #define BLADE_USB_CMD_READ_LOG_ENTRY 115 /* String descriptor indices */ #define BLADE_USB_STR_INDEX_MFR 1 /* Manufacturer */ #define BLADE_USB_STR_INDEX_PRODUCT 2 /* Product */ #define BLADE_USB_STR_INDEX_SERIAL 3 /* Serial number */ #define BLADE_USB_STR_INDEX_FW_VER 4 /* Firmware version */ #define CAL_BUFFER_SIZE 256 #define CAL_PAGE 768 #define AUTOLOAD_BUFFER_SIZE 256 #define AUTOLOAD_PAGE 1024 #ifdef _MSC_VER # define PACK(decl_to_pack_) \ __pragma(pack(push,1)) \ decl_to_pack_ \ __pragma(pack(pop)) #elif defined(__GNUC__) # define PACK(decl_to_pack_) \ decl_to_pack_ __attribute__((__packed__)) #else #error "Unexpected compiler/environment" #endif PACK( struct bladerf_fx3_version { unsigned short major; unsigned short minor; }); struct bladeRF_firmware { unsigned int len; unsigned char *ptr; }; struct bladeRF_sector { unsigned int idx; unsigned int len; unsigned char *ptr; }; /** * FPGA configuration source * * Note: the numbering of this enum must match bladerf_fpga_source in * libbladeRF.h */ typedef enum { NUAND_FPGA_CONFIG_SOURCE_INVALID = 0, /**< Uninitialized/invalid */ NUAND_FPGA_CONFIG_SOURCE_FLASH = 1, /**< Last FPGA load was from flash */ NUAND_FPGA_CONFIG_SOURCE_HOST = 2 /**< Last FPGA load was from host */ } NuandFpgaConfigSource; #define USB_CYPRESS_VENDOR_ID 0x04b4 #define USB_FX3_PRODUCT_ID 0x00f3 #define BLADE_USB_TYPE_OUT 0x40 #define BLADE_USB_TYPE_IN 0xC0 #define BLADE_USB_TIMEOUT_MS 1000 #define USB_NUAND_VENDOR_ID 0x2cf0 #define USB_NUAND_BLADERF_PRODUCT_ID 0x5246 #define USB_NUAND_BLADERF_BOOT_PRODUCT_ID 0x5247 #define USB_NUAND_BLADERF2_PRODUCT_ID 0x5250 #define USB_NUAND_LEGACY_VENDOR_ID 0x1d50 #define USB_NUAND_BLADERF_LEGACY_PRODUCT_ID 0x6066 #define USB_NUAND_BLADERF_LEGACY_BOOT_PRODUCT_ID 0x6080 #define USB_NUAND_BLADERF_MINOR_BASE 193 #define NUM_CONCURRENT 8 #define NUM_DATA_URB (1024) #define DATA_BUF_SZ (1024*4) /* Interface numbers */ #define USB_IF_LEGACY_CONFIG 0 #define USB_IF_NULL 0 #define USB_IF_RF_LINK 1 #define USB_IF_SPI_FLASH 2 #define USB_IF_CONFIG 3 #endif /* _BLADERF_FIRMWARE_COMMON_H_ */ bladeRF-2024.05/firmware_common/logger_entry.h000066400000000000000000000054631457144405000212360ustar00rootroot00000000000000/* * Copyright (c) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef LOGGER_ENTRY #define LOGGER_ENTRY #include /* A log entry word is laid out as follows. All values are little endian. * * +--------+--------+-------------------------------------------------------+ * | Bit | Length | Description | * +========+========+=======================================================+ * | 0 | 16 | Data to include with the logged event | * +--------+--------+-------------------------------------------------------+ * | 16 | 11 | Source line number where the event was logged | * +--------+--------+-------------------------------------------------------+ * | 27 | 5 | Source file ID where the event was logged | * +--------+--------+-------------------------------------------------------+ * */ typedef uint32_t logger_entry; #define LOG_DATA_SHIFT 0 #define LOG_DATA_MASK 0xffff #define LOG_LINE_SHIFT 16 #define LOG_LINE_MASK 0x7ff #define LOG_FILE_SHIFT 27 #define LOG_FILE_MASK 0x1f #define LOG_EOF 0x00000000 #define LOG_ERR 0xffffffff static inline logger_entry logger_entry_pack(uint8_t file, uint16_t line, uint16_t data) { logger_entry e; e = (data & LOG_DATA_MASK) << LOG_DATA_SHIFT; e |= (line & LOG_LINE_MASK) << LOG_LINE_SHIFT; e |= (file & LOG_FILE_MASK) << LOG_FILE_SHIFT; return e; } static inline void logger_entry_unpack(logger_entry e, uint8_t *file, uint16_t *line, uint16_t *data) { *data = (e >> LOG_DATA_SHIFT) & LOG_DATA_MASK; *line = (e >> LOG_LINE_SHIFT) & LOG_LINE_MASK; *file = (e >> LOG_FILE_SHIFT) & LOG_FILE_MASK; } #endif bladeRF-2024.05/firmware_common/logger_id.h000066400000000000000000000042251457144405000204640ustar00rootroot00000000000000/* * Copyright (c) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef LOGGER_ID_H_ #define LOGGER_ID_H_ #define LOGGER_ID_NONE 0 #define LOGGER_ID_BLADERF_C 1 #define LOGGER_ID_FLASH_C 2 #define LOGGER_ID_FPGA_C 3 #define LOGGER_ID_GPIF_C 4 #define LOGGER_ID_LOGGER_C 5 #define LOGGER_ID_RF_C 6 #define LOGGER_ID_SPI_FLASH_LIB_C 7 #ifdef LOGGER_ID_STRING static inline const char * logger_id_string(uint8_t file_id) { switch (file_id) { case LOGGER_ID_NONE: return ""; case LOGGER_ID_BLADERF_C: return "bladeRF.c"; case LOGGER_ID_FLASH_C: return "flash.c"; case LOGGER_ID_FPGA_C: return "fpga.c"; case LOGGER_ID_GPIF_C: return "gpif.c"; case LOGGER_ID_LOGGER_C: return "logger.c"; case LOGGER_ID_RF_C: return "rf.c"; case LOGGER_ID_SPI_FLASH_LIB_C: return "spi_flash_lib.c"; default: return ""; } } #endif #endif bladeRF-2024.05/firmware_common/misc.h000066400000000000000000000027331457144405000174660ustar00rootroot00000000000000/* * Copyright (c) 2018 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef MISC_LIB #define MISC_LIB #include uint16_t zcrc(uint8_t *data, size_t len){ uint16_t ret = 0; int b, msb; unsigned i; for (i = 0; i < len; i++) { ret ^= data[i] << 8; for (b = 0; b < 8; b++) { msb = ret & 0x8000; ret <<= 1; if (msb) { ret ^= 0x1021; } } } return ret; } #endif bladeRF-2024.05/fpga_common/000077500000000000000000000000001457144405000154565ustar00rootroot00000000000000bladeRF-2024.05/fpga_common/README.md000066400000000000000000000001271457144405000167350ustar00rootroot00000000000000This directory contains files shared between the FPGA NIOS II processor and host code. bladeRF-2024.05/fpga_common/include/000077500000000000000000000000001457144405000171015ustar00rootroot00000000000000bladeRF-2024.05/fpga_common/include/ad936x.h000066400000000000000000000714601457144405000203000ustar00rootroot00000000000000/** * @file ad936x.h * * @brief Interface to the library for the AD936X RFIC family * * Copyright (c) 2018 Nuand LLC. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef AD936X_H_ #define AD936X_H_ #include #include /** * The purpose of this header file is to allow the use of libad9361 without * including all of the unnecessary defines, etc, used during compilation. * * This file is largely copied from the files named in each section. Only * necessary declarations are present. * * In general, defines are prefixed with AD936X_ to avoid conflicts. * * Comments have been removed for brevity. Please see the original header * files from the third-party ADI library for further details. */ /****************************************************************************** * From common.h ******************************************************************************/ struct clk_onecell_data { struct clk **clks; uint32_t clk_num; }; /****************************************************************************** * From ad9361.h ******************************************************************************/ #define AD936X_REG_TX1_OUT_1_PHASE_CORR 0x08E #define AD936X_REG_TX1_OUT_1_GAIN_CORR 0x08F #define AD936X_REG_TX2_OUT_1_PHASE_CORR 0x090 #define AD936X_REG_TX2_OUT_1_GAIN_CORR 0x091 #define AD936X_REG_TX1_OUT_1_OFFSET_I 0x092 #define AD936X_REG_TX1_OUT_1_OFFSET_Q 0x093 #define AD936X_REG_TX2_OUT_1_OFFSET_I 0x094 #define AD936X_REG_TX2_OUT_1_OFFSET_Q 0x095 #define AD936X_REG_TX1_OUT_2_PHASE_CORR 0x096 #define AD936X_REG_TX1_OUT_2_GAIN_CORR 0x097 #define AD936X_REG_TX2_OUT_2_PHASE_CORR 0x098 #define AD936X_REG_TX2_OUT_2_GAIN_CORR 0x099 #define AD936X_REG_TX1_OUT_2_OFFSET_I 0x09A #define AD936X_REG_TX1_OUT_2_OFFSET_Q 0x09B #define AD936X_REG_TX2_OUT_2_OFFSET_I 0x09C #define AD936X_REG_TX2_OUT_2_OFFSET_Q 0x09D #define AD936X_REG_TX_FORCE_BITS 0x09F #define AD936X_REG_RX1_INPUT_A_PHASE_CORR 0x170 #define AD936X_REG_RX1_INPUT_A_GAIN_CORR 0x171 #define AD936X_REG_RX2_INPUT_A_PHASE_CORR 0x172 #define AD936X_REG_RX2_INPUT_A_GAIN_CORR 0x173 #define AD936X_REG_RX1_INPUT_A_Q_OFFSET 0x174 #define AD936X_REG_RX1_INPUT_A_OFFSETS 0x175 #define AD936X_REG_INPUT_A_OFFSETS_1 0x176 #define AD936X_REG_RX2_INPUT_A_OFFSETS 0x177 #define AD936X_REG_RX2_INPUT_A_I_OFFSET 0x178 #define AD936X_REG_RX1_INPUT_BC_PHASE_CORR 0x179 #define AD936X_REG_RX1_INPUT_BC_GAIN_CORR 0x17A #define AD936X_REG_RX2_INPUT_BC_PHASE_CORR 0x17B #define AD936X_REG_RX2_INPUT_BC_GAIN_CORR 0x17C #define AD936X_REG_RX1_INPUT_BC_Q_OFFSET 0x17D #define AD936X_REG_RX1_INPUT_BC_OFFSETS 0x17E #define AD936X_REG_INPUT_BC_OFFSETS_1 0x17F #define AD936X_REG_RX2_INPUT_BC_OFFSETS 0x180 #define AD936X_REG_RX2_INPUT_BC_I_OFFSET 0x181 #define AD936X_REG_FORCE_BITS 0x182 #define AD936X_READ (0 << 15) #define AD936X_WRITE (1 << 15) #define AD936X_CNT(x) ((((x)-1) & 0x7) << 12) #define AD936X_ADDR(x) ((x)&0x3FF) enum dev_id { ID_AD9361, ID_AD9364, ID_AD9363A }; enum ad9361_clocks { BB_REFCLK, RX_REFCLK, TX_REFCLK, BBPLL_CLK, ADC_CLK, R2_CLK, R1_CLK, CLKRF_CLK, RX_SAMPL_CLK, DAC_CLK, T2_CLK, T1_CLK, CLKTF_CLK, TX_SAMPL_CLK, RX_RFPLL_INT, TX_RFPLL_INT, RX_RFPLL_DUMMY, TX_RFPLL_DUMMY, RX_RFPLL, TX_RFPLL, NUM_AD9361_CLKS, EXT_REF_CLK, }; enum rx_gain_table_name { TBL_200_1300_MHZ, TBL_1300_4000_MHZ, TBL_4000_6000_MHZ, RXGAIN_TBLS_END, }; enum rx_gain_table_type { RXGAIN_FULL_TBL, RXGAIN_SPLIT_TBL, }; struct rx_gain_info { enum rx_gain_table_type tbl_type; int32_t starting_gain_db; int32_t max_gain_db; int32_t gain_step_db; int32_t max_idx; int32_t idx_step_offset; }; enum ad9361_pdata_rx_freq { BBPLL_FREQ, ADC_FREQ, R2_FREQ, R1_FREQ, CLKRF_FREQ, RX_SAMPL_FREQ, NUM_RX_CLOCKS, }; enum ad9361_pdata_tx_freq { IGNORE_FREQ, DAC_FREQ, T2_FREQ, T1_FREQ, CLKTF_FREQ, TX_SAMPL_FREQ, NUM_TX_CLOCKS, }; struct ad9361_fastlock_entry { //#define FASTLOOK_INIT 1 uint8_t flags; uint8_t alc_orig; uint8_t alc_written; }; struct ad9361_fastlock { uint8_t save_profile; uint8_t current_profile[2]; struct ad9361_fastlock_entry entry[2][8]; }; enum ad9361_bist_mode { BIST_DISABLE, BIST_INJ_TX, BIST_INJ_RX, }; enum ad9361_clkout { CLKOUT_DISABLE, BUFFERED_XTALN_DCXO, ADC_CLK_DIV_2, ADC_CLK_DIV_3, ADC_CLK_DIV_4, ADC_CLK_DIV_8, ADC_CLK_DIV_16, }; enum rf_gain_ctrl_mode { RF_GAIN_MGC, RF_GAIN_FASTATTACK_AGC, RF_GAIN_SLOWATTACK_AGC, RF_GAIN_HYBRID_AGC }; enum f_agc_target_gain_index_type { MAX_GAIN, SET_GAIN, OPTIMIZED_GAIN, NO_GAIN_CHANGE, }; enum rssi_restart_mode { AGC_IN_FAST_ATTACK_MODE_LOCKS_THE_GAIN, EN_AGC_PIN_IS_PULLED_HIGH, ENTERS_RX_MODE, GAIN_CHANGE_OCCURS, SPI_WRITE_TO_REGISTER, GAIN_CHANGE_OCCURS_OR_EN_AGC_PIN_PULLED_HIGH, }; struct rssi_control { enum rssi_restart_mode restart_mode; bool rssi_unit_is_rx_samples; uint32_t rssi_delay; uint32_t rssi_wait; uint32_t rssi_duration; }; struct port_control { uint8_t pp_conf[3]; uint8_t rx_clk_data_delay; uint8_t tx_clk_data_delay; uint8_t digital_io_ctrl; uint8_t lvds_bias_ctrl; uint8_t lvds_invert[2]; uint8_t clk_out_drive; uint8_t dataclk_drive; uint8_t data_port_drive; uint8_t clk_out_slew; uint8_t dataclk_slew; uint8_t data_port_slew; }; struct ctrl_outs_control { uint8_t index; uint8_t en_mask; }; struct elna_control { uint16_t gain_mdB; uint16_t bypass_loss_mdB; uint32_t settling_delay_ns; bool elna_1_control_en; bool elna_2_control_en; bool elna_in_gaintable_all_index_en; }; struct auxadc_control { int8_t offset; uint32_t temp_time_inteval_ms; uint32_t temp_sensor_decimation; bool periodic_temp_measuremnt; uint32_t auxadc_clock_rate; uint32_t auxadc_decimation; }; struct auxdac_control { uint16_t dac1_default_value; uint16_t dac2_default_value; bool auxdac_manual_mode_en; bool dac1_in_rx_en; bool dac1_in_tx_en; bool dac1_in_alert_en; bool dac2_in_rx_en; bool dac2_in_tx_en; bool dac2_in_alert_en; uint8_t dac1_rx_delay_us; uint8_t dac1_tx_delay_us; uint8_t dac2_rx_delay_us; uint8_t dac2_tx_delay_us; }; struct gpo_control { bool gpo0_inactive_state_high_en; bool gpo1_inactive_state_high_en; bool gpo2_inactive_state_high_en; bool gpo3_inactive_state_high_en; bool gpo0_slave_rx_en; bool gpo0_slave_tx_en; bool gpo1_slave_rx_en; bool gpo1_slave_tx_en; bool gpo2_slave_rx_en; bool gpo2_slave_tx_en; bool gpo3_slave_rx_en; bool gpo3_slave_tx_en; uint8_t gpo0_rx_delay_us; uint8_t gpo0_tx_delay_us; uint8_t gpo1_rx_delay_us; uint8_t gpo1_tx_delay_us; uint8_t gpo2_rx_delay_us; uint8_t gpo2_tx_delay_us; uint8_t gpo3_rx_delay_us; uint8_t gpo3_tx_delay_us; }; struct tx_monitor_control { bool tx_mon_track_en; bool one_shot_mode_en; uint32_t low_high_gain_threshold_mdB; uint8_t low_gain_dB; uint8_t high_gain_dB; uint16_t tx_mon_delay; uint16_t tx_mon_duration; uint8_t tx1_mon_front_end_gain; uint8_t tx2_mon_front_end_gain; uint8_t tx1_mon_lo_cm; uint8_t tx2_mon_lo_cm; }; struct gain_control { enum rf_gain_ctrl_mode rx1_mode; enum rf_gain_ctrl_mode rx2_mode; uint8_t adc_ovr_sample_size; uint8_t adc_small_overload_thresh; uint8_t adc_large_overload_thresh; uint16_t lmt_overload_high_thresh; uint16_t lmt_overload_low_thresh; uint16_t dec_pow_measuremnt_duration; uint8_t low_power_thresh; bool dig_gain_en; uint8_t max_dig_gain; bool mgc_rx1_ctrl_inp_en; bool mgc_rx2_ctrl_inp_en; uint8_t mgc_inc_gain_step; uint8_t mgc_dec_gain_step; uint8_t mgc_split_table_ctrl_inp_gain_mode; uint8_t agc_attack_delay_extra_margin_us; uint8_t agc_outer_thresh_high; uint8_t agc_outer_thresh_high_dec_steps; uint8_t agc_inner_thresh_high; uint8_t agc_inner_thresh_high_dec_steps; uint8_t agc_inner_thresh_low; uint8_t agc_inner_thresh_low_inc_steps; uint8_t agc_outer_thresh_low; uint8_t agc_outer_thresh_low_inc_steps; uint8_t adc_small_overload_exceed_counter; uint8_t adc_large_overload_exceed_counter; uint8_t adc_large_overload_inc_steps; bool adc_lmt_small_overload_prevent_gain_inc; uint8_t lmt_overload_large_exceed_counter; uint8_t lmt_overload_small_exceed_counter; uint8_t lmt_overload_large_inc_steps; uint8_t dig_saturation_exceed_counter; uint8_t dig_gain_step_size; bool sync_for_gain_counter_en; uint32_t gain_update_interval_us; bool immed_gain_change_if_large_adc_overload; bool immed_gain_change_if_large_lmt_overload; uint32_t f_agc_dec_pow_measuremnt_duration; uint32_t f_agc_state_wait_time_ns; bool f_agc_allow_agc_gain_increase; uint8_t f_agc_lp_thresh_increment_time; uint8_t f_agc_lp_thresh_increment_steps; uint8_t f_agc_lock_level; bool f_agc_lock_level_lmt_gain_increase_en; uint8_t f_agc_lock_level_gain_increase_upper_limit; uint8_t f_agc_lpf_final_settling_steps; uint8_t f_agc_lmt_final_settling_steps; uint8_t f_agc_final_overrange_count; bool f_agc_gain_increase_after_gain_lock_en; enum f_agc_target_gain_index_type f_agc_gain_index_type_after_exit_rx_mode; bool f_agc_use_last_lock_level_for_set_gain_en; uint8_t f_agc_optimized_gain_offset; bool f_agc_rst_gla_stronger_sig_thresh_exceeded_en; uint8_t f_agc_rst_gla_stronger_sig_thresh_above_ll; bool f_agc_rst_gla_engergy_lost_sig_thresh_exceeded_en; bool f_agc_rst_gla_engergy_lost_goto_optim_gain_en; uint8_t f_agc_rst_gla_engergy_lost_sig_thresh_below_ll; uint8_t f_agc_energy_lost_stronger_sig_gain_lock_exit_cnt; bool f_agc_rst_gla_large_adc_overload_en; bool f_agc_rst_gla_large_lmt_overload_en; bool f_agc_rst_gla_en_agc_pulled_high_en; enum f_agc_target_gain_index_type f_agc_rst_gla_if_en_agc_pulled_high_mode; uint8_t f_agc_power_measurement_duration_in_state5; }; struct ad9361_phy_platform_data { bool rx2tx2; bool fdd; bool fdd_independent_mode; bool split_gt; bool use_extclk; bool ensm_pin_pulse_mode; bool ensm_pin_ctrl; bool debug_mode; bool tdd_use_dual_synth; bool tdd_skip_vco_cal; bool use_ext_rx_lo; bool use_ext_tx_lo; bool rx1rx2_phase_inversion_en; bool qec_tracking_slow_mode_en; uint8_t dc_offset_update_events; uint8_t dc_offset_attenuation_high; uint8_t dc_offset_attenuation_low; uint8_t rf_dc_offset_count_high; uint8_t rf_dc_offset_count_low; uint8_t dig_interface_tune_skipmode; uint8_t dig_interface_tune_fir_disable; uint32_t dcxo_coarse; uint32_t dcxo_fine; uint32_t rf_rx_input_sel; uint32_t rf_tx_output_sel; uint32_t rx1tx1_mode_use_rx_num; uint32_t rx1tx1_mode_use_tx_num; uint32_t rx_path_clks[NUM_RX_CLOCKS]; uint32_t tx_path_clks[NUM_TX_CLOCKS]; uint32_t trx_synth_max_fref; uint64_t rx_synth_freq; uint64_t tx_synth_freq; uint32_t rf_rx_bandwidth_Hz; uint32_t rf_tx_bandwidth_Hz; int32_t tx_atten; bool update_tx_gain_via_alert; uint32_t rx_fastlock_delay_ns; uint32_t tx_fastlock_delay_ns; bool trx_fastlock_pinctrl_en[2]; enum ad9361_clkout ad9361_clkout_mode; struct gain_control gain_ctrl; struct rssi_control rssi_ctrl; struct port_control port_ctrl; struct ctrl_outs_control ctrl_outs_ctrl; struct elna_control elna_ctrl; struct auxadc_control auxadc_ctrl; struct auxdac_control auxdac_ctrl; struct gpo_control gpo_ctrl; struct tx_monitor_control txmon_ctrl; int32_t gpio_resetb; int32_t gpio_sync; int32_t gpio_cal_sw1; int32_t gpio_cal_sw2; }; struct ad9361_rf_phy { enum dev_id dev_sel; uint8_t id_no; struct spi_device *spi; struct gpio_device *gpio; struct clk *clk_refin; struct clk *clks[NUM_AD9361_CLKS]; struct refclk_scale *ref_clk_scale[NUM_AD9361_CLKS]; struct clk_onecell_data clk_data; uint32_t (*ad9361_rfpll_ext_recalc_rate)(struct refclk_scale *clk_priv); int32_t (*ad9361_rfpll_ext_round_rate)(struct refclk_scale *clk_priv, uint32_t rate); int32_t (*ad9361_rfpll_ext_set_rate)(struct refclk_scale *clk_priv, uint32_t rate); struct ad9361_phy_platform_data *pdata; uint8_t prev_ensm_state; uint8_t curr_ensm_state; uint8_t cached_rx_rfpll_div; uint8_t cached_tx_rfpll_div; struct rx_gain_info rx_gain[RXGAIN_TBLS_END]; enum rx_gain_table_name current_table; bool ensm_pin_ctl_en; bool auto_cal_en; uint64_t last_tx_quad_cal_freq; uint32_t last_tx_quad_cal_phase; uint64_t current_tx_lo_freq; uint64_t current_rx_lo_freq; bool current_tx_use_tdd_table; bool current_rx_use_tdd_table; uint32_t flags; uint32_t cal_threshold_freq; uint32_t current_rx_bw_Hz; uint32_t current_tx_bw_Hz; uint32_t rxbbf_div; uint32_t rate_governor; bool bypass_rx_fir; bool bypass_tx_fir; bool rx_eq_2tx; bool filt_valid; uint32_t filt_rx_path_clks[NUM_RX_CLOCKS]; uint32_t filt_tx_path_clks[NUM_TX_CLOCKS]; uint32_t filt_rx_bw_Hz; uint32_t filt_tx_bw_Hz; uint8_t tx_fir_int; uint8_t tx_fir_ntaps; uint8_t rx_fir_dec; uint8_t rx_fir_ntaps; uint8_t agc_mode[2]; bool rfdc_track_en; bool bbdc_track_en; bool quad_track_en; bool txmon_tdd_en; uint16_t auxdac1_value; uint16_t auxdac2_value; uint32_t tx1_atten_cached; uint32_t tx2_atten_cached; struct ad9361_fastlock fastlock; struct axiadc_converter *adc_conv; struct axiadc_state *adc_state; int32_t bist_loopback_mode; enum ad9361_bist_mode bist_prbs_mode; enum ad9361_bist_mode bist_tone_mode; uint32_t bist_tone_freq_Hz; uint32_t bist_tone_level_dB; uint32_t bist_tone_mask; bool bbpll_initialized; }; struct rf_rx_gain { uint32_t ant; int32_t gain_db; uint32_t fgt_lmt_index; uint32_t lmt_gain; uint32_t lpf_gain; uint32_t digital_gain; uint32_t lna_index; uint32_t tia_index; uint32_t mixer_index; }; struct rf_rssi { uint32_t ant; uint32_t symbol; uint32_t preamble; int32_t multiplier; uint8_t duration; }; int32_t ad9361_get_rx_gain(struct ad9361_rf_phy *phy, uint32_t rx_id, struct rf_rx_gain *rx_gain); int32_t ad9361_spi_read(struct spi_device *spi, uint32_t reg); int32_t ad9361_spi_write(struct spi_device *spi, uint32_t reg, uint32_t val); void ad9361_get_bist_loopback(struct ad9361_rf_phy *phy, int32_t *mode); int32_t ad9361_bist_loopback(struct ad9361_rf_phy *phy, int32_t mode); /****************************************************************************** * From ad9361_api.h ******************************************************************************/ typedef struct { enum dev_id dev_sel; uint8_t id_no; uint32_t reference_clk_rate; uint8_t two_rx_two_tx_mode_enable; uint8_t one_rx_one_tx_mode_use_rx_num; uint8_t one_rx_one_tx_mode_use_tx_num; uint8_t frequency_division_duplex_mode_enable; uint8_t frequency_division_duplex_independent_mode_enable; uint8_t tdd_use_dual_synth_mode_enable; uint8_t tdd_skip_vco_cal_enable; uint32_t tx_fastlock_delay_ns; uint32_t rx_fastlock_delay_ns; uint8_t rx_fastlock_pincontrol_enable; uint8_t tx_fastlock_pincontrol_enable; uint8_t external_rx_lo_enable; uint8_t external_tx_lo_enable; uint8_t dc_offset_tracking_update_event_mask; uint8_t dc_offset_attenuation_high_range; uint8_t dc_offset_attenuation_low_range; uint8_t dc_offset_count_high_range; uint8_t dc_offset_count_low_range; uint8_t split_gain_table_mode_enable; uint32_t trx_synthesizer_target_fref_overwrite_hz; uint8_t qec_tracking_slow_mode_enable; uint8_t ensm_enable_pin_pulse_mode_enable; uint8_t ensm_enable_txnrx_control_enable; uint64_t rx_synthesizer_frequency_hz; uint64_t tx_synthesizer_frequency_hz; uint32_t rx_path_clock_frequencies[6]; uint32_t tx_path_clock_frequencies[6]; uint32_t rf_rx_bandwidth_hz; uint32_t rf_tx_bandwidth_hz; uint32_t rx_rf_port_input_select; uint32_t tx_rf_port_input_select; int32_t tx_attenuation_mdB; uint8_t update_tx_gain_in_alert_enable; uint8_t xo_disable_use_ext_refclk_enable; uint32_t dcxo_coarse_and_fine_tune[2]; uint32_t clk_output_mode_select; uint8_t gc_rx1_mode; uint8_t gc_rx2_mode; uint8_t gc_adc_large_overload_thresh; uint8_t gc_adc_ovr_sample_size; uint8_t gc_adc_small_overload_thresh; uint16_t gc_dec_pow_measurement_duration; uint8_t gc_dig_gain_enable; uint16_t gc_lmt_overload_high_thresh; uint16_t gc_lmt_overload_low_thresh; uint8_t gc_low_power_thresh; uint8_t gc_max_dig_gain; uint8_t mgc_dec_gain_step; uint8_t mgc_inc_gain_step; uint8_t mgc_rx1_ctrl_inp_enable; uint8_t mgc_rx2_ctrl_inp_enable; uint8_t mgc_split_table_ctrl_inp_gain_mode; uint8_t agc_adc_large_overload_exceed_counter; uint8_t agc_adc_large_overload_inc_steps; uint8_t agc_adc_lmt_small_overload_prevent_gain_inc_enable; uint8_t agc_adc_small_overload_exceed_counter; uint8_t agc_dig_gain_step_size; uint8_t agc_dig_saturation_exceed_counter; uint32_t agc_gain_update_interval_us; uint8_t agc_immed_gain_change_if_large_adc_overload_enable; uint8_t agc_immed_gain_change_if_large_lmt_overload_enable; uint8_t agc_inner_thresh_high; uint8_t agc_inner_thresh_high_dec_steps; uint8_t agc_inner_thresh_low; uint8_t agc_inner_thresh_low_inc_steps; uint8_t agc_lmt_overload_large_exceed_counter; uint8_t agc_lmt_overload_large_inc_steps; uint8_t agc_lmt_overload_small_exceed_counter; uint8_t agc_outer_thresh_high; uint8_t agc_outer_thresh_high_dec_steps; uint8_t agc_outer_thresh_low; uint8_t agc_outer_thresh_low_inc_steps; uint32_t agc_attack_delay_extra_margin_us; uint8_t agc_sync_for_gain_counter_enable; uint32_t fagc_dec_pow_measuremnt_duration; uint32_t fagc_state_wait_time_ns; uint8_t fagc_allow_agc_gain_increase; uint32_t fagc_lp_thresh_increment_time; uint32_t fagc_lp_thresh_increment_steps; uint8_t fagc_lock_level_lmt_gain_increase_en; uint32_t fagc_lock_level_gain_increase_upper_limit; uint32_t fagc_lpf_final_settling_steps; uint32_t fagc_lmt_final_settling_steps; uint32_t fagc_final_overrange_count; uint8_t fagc_gain_increase_after_gain_lock_en; uint32_t fagc_gain_index_type_after_exit_rx_mode; uint8_t fagc_use_last_lock_level_for_set_gain_en; uint8_t fagc_rst_gla_stronger_sig_thresh_exceeded_en; uint32_t fagc_optimized_gain_offset; uint32_t fagc_rst_gla_stronger_sig_thresh_above_ll; uint8_t fagc_rst_gla_engergy_lost_sig_thresh_exceeded_en; uint8_t fagc_rst_gla_engergy_lost_goto_optim_gain_en; uint32_t fagc_rst_gla_engergy_lost_sig_thresh_below_ll; uint32_t fagc_energy_lost_stronger_sig_gain_lock_exit_cnt; uint8_t fagc_rst_gla_large_adc_overload_en; uint8_t fagc_rst_gla_large_lmt_overload_en; uint8_t fagc_rst_gla_en_agc_pulled_high_en; uint32_t fagc_rst_gla_if_en_agc_pulled_high_mode; uint32_t fagc_power_measurement_duration_in_state5; uint32_t rssi_delay; uint32_t rssi_duration; uint8_t rssi_restart_mode; uint8_t rssi_unit_is_rx_samples_enable; uint32_t rssi_wait; uint32_t aux_adc_decimation; uint32_t aux_adc_rate; uint8_t aux_dac_manual_mode_enable; uint32_t aux_dac1_default_value_mV; uint8_t aux_dac1_active_in_rx_enable; uint8_t aux_dac1_active_in_tx_enable; uint8_t aux_dac1_active_in_alert_enable; uint32_t aux_dac1_rx_delay_us; uint32_t aux_dac1_tx_delay_us; uint32_t aux_dac2_default_value_mV; uint8_t aux_dac2_active_in_rx_enable; uint8_t aux_dac2_active_in_tx_enable; uint8_t aux_dac2_active_in_alert_enable; uint32_t aux_dac2_rx_delay_us; uint32_t aux_dac2_tx_delay_us; uint32_t temp_sense_decimation; uint16_t temp_sense_measurement_interval_ms; int8_t temp_sense_offset_signed; uint8_t temp_sense_periodic_measurement_enable; uint8_t ctrl_outs_enable_mask; uint8_t ctrl_outs_index; uint32_t elna_settling_delay_ns; uint32_t elna_gain_mdB; uint32_t elna_bypass_loss_mdB; uint8_t elna_rx1_gpo0_control_enable; uint8_t elna_rx2_gpo1_control_enable; uint8_t elna_gaintable_all_index_enable; uint8_t digital_interface_tune_skip_mode; uint8_t digital_interface_tune_fir_disable; uint8_t pp_tx_swap_enable; uint8_t pp_rx_swap_enable; uint8_t tx_channel_swap_enable; uint8_t rx_channel_swap_enable; uint8_t rx_frame_pulse_mode_enable; uint8_t two_t_two_r_timing_enable; uint8_t invert_data_bus_enable; uint8_t invert_data_clk_enable; uint8_t fdd_alt_word_order_enable; uint8_t invert_rx_frame_enable; uint8_t fdd_rx_rate_2tx_enable; uint8_t swap_ports_enable; uint8_t single_data_rate_enable; uint8_t lvds_mode_enable; uint8_t half_duplex_mode_enable; uint8_t single_port_mode_enable; uint8_t full_port_enable; uint8_t full_duplex_swap_bits_enable; uint32_t delay_rx_data; uint32_t rx_data_clock_delay; uint32_t rx_data_delay; uint32_t tx_fb_clock_delay; uint32_t tx_data_delay; uint32_t lvds_bias_mV; uint8_t lvds_rx_onchip_termination_enable; uint8_t rx1rx2_phase_inversion_en; uint8_t lvds_invert1_control; uint8_t lvds_invert2_control; uint8_t clk_out_drive; uint8_t dataclk_drive; uint8_t data_port_drive; uint8_t clk_out_slew; uint8_t dataclk_slew; uint8_t data_port_slew; uint8_t gpo0_inactive_state_high_enable; uint8_t gpo1_inactive_state_high_enable; uint8_t gpo2_inactive_state_high_enable; uint8_t gpo3_inactive_state_high_enable; uint8_t gpo0_slave_rx_enable; uint8_t gpo0_slave_tx_enable; uint8_t gpo1_slave_rx_enable; uint8_t gpo1_slave_tx_enable; uint8_t gpo2_slave_rx_enable; uint8_t gpo2_slave_tx_enable; uint8_t gpo3_slave_rx_enable; uint8_t gpo3_slave_tx_enable; uint8_t gpo0_rx_delay_us; uint8_t gpo0_tx_delay_us; uint8_t gpo1_rx_delay_us; uint8_t gpo1_tx_delay_us; uint8_t gpo2_rx_delay_us; uint8_t gpo2_tx_delay_us; uint8_t gpo3_rx_delay_us; uint8_t gpo3_tx_delay_us; uint32_t low_high_gain_threshold_mdB; uint32_t low_gain_dB; uint32_t high_gain_dB; uint8_t tx_mon_track_en; uint8_t one_shot_mode_en; uint32_t tx_mon_delay; uint32_t tx_mon_duration; uint32_t tx1_mon_front_end_gain; uint32_t tx2_mon_front_end_gain; uint32_t tx1_mon_lo_cm; uint32_t tx2_mon_lo_cm; int32_t gpio_resetb; int32_t gpio_sync; int32_t gpio_cal_sw1; int32_t gpio_cal_sw2; uint32_t (*ad9361_rfpll_ext_recalc_rate)(struct refclk_scale *clk_priv); int32_t (*ad9361_rfpll_ext_round_rate)(struct refclk_scale *clk_priv, uint32_t rate); int32_t (*ad9361_rfpll_ext_set_rate)(struct refclk_scale *clk_priv, uint32_t rate); } AD9361_InitParam; typedef struct { uint32_t rx; /* 1, 2, 3(both) */ int32_t rx_gain; /* -12, -6, 0, 6 */ uint32_t rx_dec; /* 1, 2, 4 */ int16_t rx_coef[128]; uint8_t rx_coef_size; uint32_t rx_path_clks[6]; uint32_t rx_bandwidth; } AD9361_RXFIRConfig; typedef struct { uint32_t tx; /* 1, 2, 3(both) */ int32_t tx_gain; /* -6, 0 */ uint32_t tx_int; /* 1, 2, 4 */ int16_t tx_coef[128]; uint8_t tx_coef_size; uint32_t tx_path_clks[6]; uint32_t tx_bandwidth; } AD9361_TXFIRConfig; #define AD936X_A_BALANCED 0 #define AD936X_B_BALANCED 1 #define AD936X_C_BALANCED 2 #define AD936X_A_N 3 #define AD936X_A_P 4 #define AD936X_B_N 5 #define AD936X_B_P 6 #define AD936X_C_N 7 #define AD936X_C_P 8 #define AD936X_TX_MON1 9 #define AD936X_TX_MON2 10 #define AD936X_TX_MON1_2 11 #define AD936X_TXA 0 #define AD936X_TXB 1 int32_t ad9361_init(struct ad9361_rf_phy **ad9361_phy, AD9361_InitParam *init_param, void *userdata); int32_t ad9361_deinit(struct ad9361_rf_phy *phy); int32_t ad9361_set_rx_rf_gain(struct ad9361_rf_phy *phy, uint8_t ch, int32_t gain_db); int32_t ad9361_set_rx_rf_bandwidth(struct ad9361_rf_phy *phy, uint32_t bandwidth_hz); int32_t ad9361_get_rx_rf_bandwidth(struct ad9361_rf_phy *phy, uint32_t *bandwidth_hz); int32_t ad9361_set_rx_sampling_freq(struct ad9361_rf_phy *phy, uint32_t sampling_freq_hz); int32_t ad9361_get_rx_sampling_freq(struct ad9361_rf_phy *phy, uint32_t *sampling_freq_hz); int32_t ad9361_set_rx_lo_freq(struct ad9361_rf_phy *phy, uint64_t lo_freq_hz); int32_t ad9361_get_rx_lo_freq(struct ad9361_rf_phy *phy, uint64_t *lo_freq_hz); int32_t ad9361_get_rx_rssi(struct ad9361_rf_phy *phy, uint8_t ch, struct rf_rssi *rssi); int32_t ad9361_set_rx_gain_control_mode(struct ad9361_rf_phy *phy, uint8_t ch, uint8_t gc_mode); int32_t ad9361_get_rx_gain_control_mode(struct ad9361_rf_phy *phy, uint8_t ch, uint8_t *gc_mode); int32_t ad9361_set_rx_fir_config(struct ad9361_rf_phy *phy, AD9361_RXFIRConfig fir_cfg); int32_t ad9361_set_rx_fir_en_dis(struct ad9361_rf_phy *phy, uint8_t en_dis); int32_t ad9361_set_rx_rf_port_input(struct ad9361_rf_phy *phy, uint32_t mode); int32_t ad9361_get_rx_rf_port_input(struct ad9361_rf_phy *phy, uint32_t *mode); int32_t ad9361_set_tx_attenuation(struct ad9361_rf_phy *phy, uint8_t ch, uint32_t attenuation_mdb); int32_t ad9361_get_tx_attenuation(struct ad9361_rf_phy *phy, uint8_t ch, uint32_t *attenuation_mdb); int32_t ad9361_set_tx_rf_bandwidth(struct ad9361_rf_phy *phy, uint32_t bandwidth_hz); int32_t ad9361_get_tx_rf_bandwidth(struct ad9361_rf_phy *phy, uint32_t *bandwidth_hz); int32_t ad9361_set_tx_sampling_freq(struct ad9361_rf_phy *phy, uint32_t sampling_freq_hz); int32_t ad9361_get_tx_sampling_freq(struct ad9361_rf_phy *phy, uint32_t *sampling_freq_hz); int32_t ad9361_set_tx_lo_freq(struct ad9361_rf_phy *phy, uint64_t lo_freq_hz); int32_t ad9361_get_tx_lo_freq(struct ad9361_rf_phy *phy, uint64_t *lo_freq_hz); int32_t ad9361_set_tx_fir_config(struct ad9361_rf_phy *phy, AD9361_TXFIRConfig fir_cfg); int32_t ad9361_set_tx_fir_en_dis(struct ad9361_rf_phy *phy, uint8_t en_dis); int32_t ad9361_get_tx_rssi(struct ad9361_rf_phy *phy, uint8_t ch, uint32_t *rssi_db_x_1000); int32_t ad9361_set_tx_rf_port_output(struct ad9361_rf_phy *phy, uint32_t mode); int32_t ad9361_get_tx_rf_port_output(struct ad9361_rf_phy *phy, uint32_t *mode); int32_t ad9361_get_temp(struct ad9361_rf_phy *phy); int32_t ad9361_rx_fastlock_store(struct ad9361_rf_phy *phy, uint32_t profile); int32_t ad9361_rx_fastlock_save(struct ad9361_rf_phy *phy, uint32_t profile, uint8_t *values); int32_t ad9361_tx_fastlock_store(struct ad9361_rf_phy *phy, uint32_t profile); int32_t ad9361_tx_fastlock_save(struct ad9361_rf_phy *phy, uint32_t profile, uint8_t *values); int32_t ad9361_set_no_ch_mode(struct ad9361_rf_phy *phy, uint8_t no_ch_mode); #endif // AD936X_H_ bladeRF-2024.05/fpga_common/include/ad936x_helpers.h000066400000000000000000000100411457144405000220060ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2018 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef FPGA_COMMON_AD936X_HELPERS_H_ #define FPGA_COMMON_AD936X_HELPERS_H_ #ifdef BLADERF_NIOS_BUILD #include "devices.h" #endif // BLADERF_NIOS_BUILD #if !defined(BLADERF_NIOS_BUILD) || defined(BLADERF_NIOS_LIBAD936X) #if !defined(BLADERF_NIOS_BUILD) && !defined(BLADERF_NIOS_PC_SIMULATION) #include #else #include "libbladeRF_nios_compat.h" #endif #include "ad936x.h" /** * @brief Retrieve current value in TX attenuation cache. * * @param phy RFIC handle * @param[in] ch Channel * * @return Cached attenuation value */ uint32_t txmute_get_cached(struct ad9361_rf_phy *phy, bladerf_channel ch); /** * @brief Save a new value to the TX attenuation cache. * * @param phy RFIC handle * @param[in] ch Channel * @param[in] atten Attenuation * * @return 0 on success, value from \ref RETCODES list on failure */ int txmute_set_cached(struct ad9361_rf_phy *phy, bladerf_channel ch, uint32_t atten); /** * @brief Get the transmit mute state * * @param phy RFIC handle * @param[in] ch Channel * @param[out] state Mute state: true for muted, false for unmuted * * @return 0 on success, value from \ref RETCODES list on failure */ int txmute_get(struct ad9361_rf_phy *phy, bladerf_channel ch, bool *state); /** * @brief Sets the transmit mute. * * If muted, the TX attenuation will be set to maximum to reduce leakage * as much as possible. * * When unmuted, TX attenuation will be restored to its previous value. * * @param phy RFIC handle * @param[in] ch Channel * @param[in] state Mute state: true for muted, false for unmuted * * @return 0 on success, value from \ref RETCODES list on failure */ int txmute_set(struct ad9361_rf_phy *phy, bladerf_channel ch, bool state); /** * @brief Set AD9361 RFIC RF port * * @param phy RFIC handle * @param[in] ch Channel * @param[in] enabled True if the channel is enabled, false otherwise * @param[in] freq Frequency * * @return 0 on success, value from \ref RETCODES list on failure */ int set_ad9361_port_by_freq(struct ad9361_rf_phy *phy, bladerf_channel ch, bool enabled, bladerf_frequency freq); /** * @brief Translate bladerf_gain_mode to rf_gain_ctrl_mode * * @param[in] gainmode The libbladeRF gainmode * @param[out] ok True if return value is valid, false otherwise * * @return rf_gain_ctrl_mode */ enum rf_gain_ctrl_mode gainmode_bladerf_to_ad9361(bladerf_gain_mode gainmode, bool *ok); /** * @brief Translate rf_gain_ctrl_mode to bladerf_gain_mode * * @param[in] gainmode The RFIC gainmode * @param[out] ok True if return value is valid, false otherwise * * @return bladerf_gain_mode */ bladerf_gain_mode gainmode_ad9361_to_bladerf(enum rf_gain_ctrl_mode gainmode, bool *ok); #endif // !defined(BLADERF_NIOS_BUILD) || defined(BLADERF_NIOS_LIBAD936X) #endif // FPGA_COMMON_AD936X_HELPERS_H_ bladeRF-2024.05/fpga_common/include/band_select.h000066400000000000000000000034701457144405000215210ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef BAND_SELECT_H_ #define BAND_SELECT_H_ #include #if !defined(BLADERF_NIOS_BUILD) && !defined(BLADERF_NIOS_PC_SIMULATION) # include # include "board/board.h" # include "log.h" #else # include "libbladeRF_nios_compat.h" # include "devices.h" #endif /** * Select the bladeRF's low or high band * * @param dev Device handle * @param module Module to configure * @param low_band Configure for low band (true) or high band (false) * * @return 0 on succes, BLADERF_ERR_* value on failure */ int band_select(struct bladerf *dev, bladerf_module module, bool low_band); #endif bladeRF-2024.05/fpga_common/include/bladerf2_common.h000066400000000000000000000574121457144405000223140ustar00rootroot00000000000000/* This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2018 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef FPGA_COMMON_BLADERF2_COMMON_H_ #define FPGA_COMMON_BLADERF2_COMMON_H_ #include #if !defined(BLADERF_NIOS_BUILD) && !defined(BLADERF_NIOS_PC_SIMULATION) #include #else #include "libbladeRF_nios_compat.h" #endif // !defined(BLADERF_NIOS_BUILD) && !defined(BLADERF_NIOS_PC_SIMULATION) #include "ad936x.h" #include "host_config.h" #include "nios_pkt_retune2.h" #include "range.h" /** * Number of modules (directions) present. 1 RX, 1 TX = 2. */ #define NUM_MODULES 2 /** * Frequency of the system VCTCXO, in Hz. */ static bladerf_frequency const BLADERF_VCTCXO_FREQUENCY = 38400000; /** * Default reference input frequency, in Hz. */ static bladerf_frequency const BLADERF_REFIN_DEFAULT = 10000000; /** * RFIC reset frequency (arbitrary) */ static bladerf_frequency const RESET_FREQUENCY = 70000000; // clang-format off // Config GPIO #define CFG_GPIO_POWERSOURCE 0 #define CFG_GPIO_PLL_EN 11 #define CFG_GPIO_CLOCK_OUTPUT 17 #define CFG_GPIO_CLOCK_SELECT 18 // RFFE control #define RFFE_CONTROL_RESET_N 0 #define RFFE_CONTROL_ENABLE 1 #define RFFE_CONTROL_TXNRX 2 #define RFFE_CONTROL_EN_AGC 3 #define RFFE_CONTROL_SYNC_IN 4 #define RFFE_CONTROL_RX_BIAS_EN 5 #define RFFE_CONTROL_RX_SPDT_1 6 // 6 and 7 #define RFFE_CONTROL_RX_SPDT_2 8 // 8 and 9 #define RFFE_CONTROL_TX_BIAS_EN 10 #define RFFE_CONTROL_TX_SPDT_1 11 // 11 and 12 #define RFFE_CONTROL_TX_SPDT_2 13 // 13 and 14 #define RFFE_CONTROL_MIMO_RX_EN_0 15 #define RFFE_CONTROL_MIMO_TX_EN_0 16 #define RFFE_CONTROL_MIMO_RX_EN_1 17 #define RFFE_CONTROL_MIMO_TX_EN_1 18 #define RFFE_CONTROL_ADF_MUXOUT 19 // input only #define RFFE_CONTROL_CTRL_OUT 24 // input only, 24 through 31 #define RFFE_CONTROL_SPDT_MASK 0x3 #define RFFE_CONTROL_SPDT_SHUTDOWN 0x0 // no connection #define RFFE_CONTROL_SPDT_LOWBAND 0x2 // RF1 <-> RF3 #define RFFE_CONTROL_SPDT_HIGHBAND 0x1 // RF1 <-> RF2 // Trim DAC control #define TRIMDAC_MASK 0x3FFC // 2 through 13 #define TRIMDAC_EN 14 // 14 and 15 #define TRIMDAC_EN_MASK 0x3 #define TRIMDAC_EN_ACTIVE 0x0 #define TRIMDAC_EN_HIGHZ 0x3 /* Number of fast lock profiles that can be stored in the Nios * Make sure this number matches that of the Nios' devices.h */ #define NUM_BBP_FASTLOCK_PROFILES 256 /* Number of fast lock profiles that can be stored in the RFFE * Make sure this number matches that of the Nios' devices.h */ #define NUM_RFFE_FASTLOCK_PROFILES 8 // clang-format on /** * RF front end bands */ enum bladerf2_band { BAND_SHUTDOWN, /**< Inactive */ BAND_LOW, /**< Low-band */ BAND_HIGH, /**< High-band */ }; /** * Mapping between libbladeRF gain modes and RFIC gain modes. */ struct bladerf_rfic_gain_mode_map { bladerf_gain_mode brf_mode; /**< libbladeRF gain mode */ enum rf_gain_ctrl_mode rfic_mode; /**< RFIC gain mode */ }; /** * Mapping between frequency ranges and gain ranges. */ struct bladerf_gain_range { char const *name; /**< Gain stage name */ struct bladerf_range frequency; /**< Frequency range */ struct bladerf_range gain; /**< Applicable stage gain range */ float offset; /**< Offset in dB, for mapping dB gain to absolute dBm. */ }; /** * Mapping between string names and RFIC port identifiers. */ struct bladerf_rfic_port_name_map { char const *name; /**< Port name */ uint32_t id; /**< Port ID */ }; /** * Mapping between RF front end bands, freqencies, and physical hardware * configurations */ struct band_port_map { struct bladerf_range const frequency; /**< Frequency range */ enum bladerf2_band band; /**< RF front end band */ uint32_t spdt; /**< RF switch configuration */ uint32_t rfic_port; /**< RFIC port configuration */ }; /** * @brief Round a value into an int * * @param x Value to round * * @return int */ #define __round_int(x) (x >= 0 ? (int)(x + 0.5) : (int)(x - 0.5)) /** * @brief Round a value into an int64 * * @param x Value to round * * @return int64 */ #define __round_int64(x) (x >= 0 ? (int64_t)(x + 0.5) : (int64_t)(x - 0.5)) /** * Subcommands for the BLADERF_RFIC_COMMAND_INIT RFIC command. */ typedef enum { BLADERF_RFIC_INIT_STATE_OFF = 0, /** Non-initialized state */ BLADERF_RFIC_INIT_STATE_ON, /** Initialized ("open") */ BLADERF_RFIC_INIT_STATE_STANDBY, /** Standby ("closed") */ } bladerf_rfic_init_state; /** * Commands available with the FPGA-based RFIC interface. * * There is an 8-bit address space (0x00 to 0xFF) available. Nuand will not * assign values between 0x80 and 0xFF, so they may be used for custom * applications. */ typedef enum { /** Query the status register. (Read) * * Pass ::BLADERF_CHANNEL_INVALID as the `ch` parameter. * * Return structure: * +================+========================+ * | Bit(s) | Value | * +================+========================+ * | 63:16 | Reserved. Set to 0. | * +----------------+------------------------+ * | 15:8 | count of items in | * | | write queue | * +----------------+------------------------+ * | 0 | 1 if initialized, 0 | * | | otherwise | * +----------------+------------------------+ */ BLADERF_RFIC_COMMAND_STATUS = 0x00, /** Initialize the RFIC. (Read/Write) * * Pass ::BLADERF_CHANNEL_INVALID as the `ch` parameter. * * Pass/expect a ::bladerf_rfic_init_state value as the `data` parameter. */ BLADERF_RFIC_COMMAND_INIT = 0x01, /** Enable/disable a channel. (Read/Write) * * Set `data` to `true` to enable the channel, or `false` to disable it. */ BLADERF_RFIC_COMMAND_ENABLE = 0x02, /** Sample rate for a channel. (Read/Write) * * Value in samples per second. */ BLADERF_RFIC_COMMAND_SAMPLERATE = 0x03, /** Center frequency for a channel. (Read/Write) * * Value in Hz. Read or write. */ BLADERF_RFIC_COMMAND_FREQUENCY = 0x04, /** Bandwidth for a channel. (Read/Write) * * Value in Hz. */ BLADERF_RFIC_COMMAND_BANDWIDTH = 0x05, /** Gain mode for a channel. (Read/Write) * * Pass a ::bladerf_gain_mode value as the `data` parameter. */ BLADERF_RFIC_COMMAND_GAINMODE = 0x06, /** Overall gain for a channel. (Read/Write) * * Value in dB. */ BLADERF_RFIC_COMMAND_GAIN = 0x07, /** RSSI (received signal strength indication) for a channel. (Read) * * Value in dB. */ BLADERF_RFIC_COMMAND_RSSI = 0x08, /** FIR filter setting for a channel. (Read/Write) * * RX channels should pass a ::bladerf_rfic_rxfir value, TX channels should * pass a ::bladerf_rfic_txfir value. */ BLADERF_RFIC_COMMAND_FILTER = 0x09, /** TX Mute setting for a channel. (Read/Write) * * 1 indicates TX mute is enabled, 0 indicates it is not. */ BLADERF_RFIC_COMMAND_TXMUTE = 0x0A, /** Store Fastlock profile. (Write) * * Stores the current tuning into a fastlock profile, for later recall */ BLADERF_RFIC_COMMAND_FASTLOCK = 0x0B, /** User-defined functionality (placeholder 1) */ BLADERF_RFIC_COMMAND_USER_001 = 0x80, /** User-defined functionality (placeholder 128) */ BLADERF_RFIC_COMMAND_USER_128 = 0xFF, /* Do not add additional commands beyond 0xFF */ } bladerf_rfic_command; /** NIOS_PKT_16x64_RFIC_STATUS return structure * * +===============+===================================================+ * | Bit(s) | Value | * +===============+===================================================+ * | 63:16 | Reserved. Set to 0. | * +---------------+---------------------------------------------------+ * | 15:8 | count of items in write queue | * +---------------+---------------------------------------------------+ * | 1 | 1 if the last job executed in the write queue was | * | | successful, 0 otherwise | * +---------------+---------------------------------------------------+ * | 0 | 1 if initialized, 0 otherwise | * +---------------+---------------------------------------------------+ */ // clang-format off #define BLADERF_RFIC_STATUS_INIT_SHIFT 0 #define BLADERF_RFIC_STATUS_INIT_MASK 0x1 #define BLADERF_RFIC_STATUS_WQSUCCESS_SHIFT 1 #define BLADERF_RFIC_STATUS_WQSUCCESS_MASK 0x1 #define BLADERF_RFIC_STATUS_WQLEN_SHIFT 8 #define BLADERF_RFIC_STATUS_WQLEN_MASK 0xff #define BLADERF_RFIC_RSSI_MULT_SHIFT 32 #define BLADERF_RFIC_RSSI_MULT_MASK 0xFFFF #define BLADERF_RFIC_RSSI_PRE_SHIFT 16 #define BLADERF_RFIC_RSSI_PRE_MASK 0xFFFF #define BLADERF_RFIC_RSSI_SYM_SHIFT 0 #define BLADERF_RFIC_RSSI_SYM_MASK 0xFFFF // clang-format on /******************************************************************************/ /* Constants */ /******************************************************************************/ // clang-format off /* Gain mode mappings */ static struct bladerf_rfic_gain_mode_map const bladerf2_rx_gain_mode_map[] = { { FIELD_INIT(.brf_mode, BLADERF_GAIN_MGC), FIELD_INIT(.rfic_mode, RF_GAIN_MGC) }, { FIELD_INIT(.brf_mode, BLADERF_GAIN_FASTATTACK_AGC), FIELD_INIT(.rfic_mode, RF_GAIN_FASTATTACK_AGC) }, { FIELD_INIT(.brf_mode, BLADERF_GAIN_SLOWATTACK_AGC), FIELD_INIT(.rfic_mode, RF_GAIN_SLOWATTACK_AGC) }, { FIELD_INIT(.brf_mode, BLADERF_GAIN_HYBRID_AGC), FIELD_INIT(.rfic_mode, RF_GAIN_HYBRID_AGC) }, }; /* RX gain ranges */ /* Reference: ad9361.c, ad9361_gt_tableindex and ad9361_init_gain_tables */ static struct bladerf_gain_range const bladerf2_rx_gain_ranges[] = { { FIELD_INIT(.name, NULL), FIELD_INIT(.frequency, { FIELD_INIT(.min, 0), FIELD_INIT(.max, 1300000000), FIELD_INIT(.step, 1), FIELD_INIT(.scale, 1), }), FIELD_INIT(.gain, { FIELD_INIT(.min, 1 - 17), FIELD_INIT(.max, 77 - 17), FIELD_INIT(.step, 1), FIELD_INIT(.scale, 1), }), FIELD_INIT(.offset, -17.0f), }, { FIELD_INIT(.name, NULL), FIELD_INIT(.frequency, { FIELD_INIT(.min, 1300000000UL), FIELD_INIT(.max, 4000000000UL), FIELD_INIT(.step, 1), FIELD_INIT(.scale, 1), }), FIELD_INIT(.gain, { FIELD_INIT(.min, -4 - 11), FIELD_INIT(.max, 71 - 11), FIELD_INIT(.step, 1), FIELD_INIT(.scale, 1), }), FIELD_INIT(.offset, -11.0f), }, { FIELD_INIT(.name, NULL), FIELD_INIT(.frequency, { FIELD_INIT(.min, 4000000000UL), FIELD_INIT(.max, 6000000000UL), FIELD_INIT(.step, 1), FIELD_INIT(.scale, 1), }), FIELD_INIT(.gain, { FIELD_INIT(.min, -10 - 2), FIELD_INIT(.max, 62 - 2), FIELD_INIT(.step, 1), FIELD_INIT(.scale, 1), }), FIELD_INIT(.offset, -2.0f), }, { FIELD_INIT(.name, "full"), FIELD_INIT(.frequency, { FIELD_INIT(.min, 0), FIELD_INIT(.max, 1300000000), FIELD_INIT(.step, 1), FIELD_INIT(.scale, 1), }), FIELD_INIT(.gain, { FIELD_INIT(.min, 1), FIELD_INIT(.max, 77), FIELD_INIT(.step, 1), FIELD_INIT(.scale, 1), }), FIELD_INIT(.offset, 0), }, { FIELD_INIT(.name, "full"), FIELD_INIT(.frequency, { FIELD_INIT(.min, 1300000000UL), FIELD_INIT(.max, 4000000000UL), FIELD_INIT(.step, 1), FIELD_INIT(.scale, 1), }), FIELD_INIT(.gain, { FIELD_INIT(.min, -4), FIELD_INIT(.max, 71), FIELD_INIT(.step, 1), FIELD_INIT(.scale, 1), }), FIELD_INIT(.offset, 0), }, { FIELD_INIT(.name, "full"), FIELD_INIT(.frequency, { FIELD_INIT(.min, 4000000000UL), FIELD_INIT(.max, 6000000000UL), FIELD_INIT(.step, 1), FIELD_INIT(.scale, 1), }), FIELD_INIT(.gain, { FIELD_INIT(.min, -10), FIELD_INIT(.max, 62), FIELD_INIT(.step, 1), FIELD_INIT(.scale, 1), }), FIELD_INIT(.offset, 0), }, }; /* Overall TX gain range */ static struct bladerf_gain_range const bladerf2_tx_gain_ranges[] = { { /* TX gain offset: 60 dB system gain ~= 0 dBm output */ FIELD_INIT(.name, NULL), FIELD_INIT(.frequency, { FIELD_INIT(.min, 47000000UL), FIELD_INIT(.max, 6000000000UL), FIELD_INIT(.step, 1), FIELD_INIT(.scale, 1), }), FIELD_INIT(.gain, { FIELD_INIT(.min, __round_int64(1000*(-89.750 + 66.0))), FIELD_INIT(.max, __round_int64(1000*(0 + 66.0))), FIELD_INIT(.step, 250), FIELD_INIT(.scale, 0.001F), }), FIELD_INIT(.offset, 66.0f), }, { FIELD_INIT(.name, "dsa"), FIELD_INIT(.frequency, { FIELD_INIT(.min, 47000000UL), FIELD_INIT(.max, 6000000000UL), FIELD_INIT(.step, 1), FIELD_INIT(.scale, 1), }), FIELD_INIT(.gain, { FIELD_INIT(.min, -89750), FIELD_INIT(.max, 0), FIELD_INIT(.step, 250), FIELD_INIT(.scale, 0.001F), }), FIELD_INIT(.offset, 0), }, }; /* RX gain modes */ static struct bladerf_gain_modes const bladerf2_rx_gain_modes[] = { { FIELD_INIT(.name, "automatic"), FIELD_INIT(.mode, BLADERF_GAIN_DEFAULT) }, { FIELD_INIT(.name, "manual"), FIELD_INIT(.mode, BLADERF_GAIN_MGC) }, { FIELD_INIT(.name, "fast"), FIELD_INIT(.mode, BLADERF_GAIN_FASTATTACK_AGC) }, { FIELD_INIT(.name, "slow"), FIELD_INIT(.mode, BLADERF_GAIN_SLOWATTACK_AGC) }, { FIELD_INIT(.name, "hybrid"), FIELD_INIT(.mode, BLADERF_GAIN_HYBRID_AGC) } }; /* Default RX gain control modes */ static enum rf_gain_ctrl_mode const bladerf2_rx_gain_mode_default[2] = { RF_GAIN_SLOWATTACK_AGC, RF_GAIN_SLOWATTACK_AGC }; /* Sample Rate Range */ static struct bladerf_range const bladerf2_sample_rate_range = { FIELD_INIT(.min, 520834), FIELD_INIT(.max, 122880000), FIELD_INIT(.step, 1), FIELD_INIT(.scale, 1), }; /* Sample Rate Base Range */ static struct bladerf_range const bladerf2_sample_rate_range_base = { FIELD_INIT(.min, 520834), FIELD_INIT(.max, 61440000), FIELD_INIT(.step, 2), FIELD_INIT(.scale, 1), }; /* Sample Rate Oversample Range */ static struct bladerf_range const bladerf2_sample_rate_range_oversample = { FIELD_INIT(.min, 6250000), FIELD_INIT(.max, 122880000), FIELD_INIT(.step, 2), FIELD_INIT(.scale, 1), }; /* Sample rates requiring a 4x interpolation/decimation */ static struct bladerf_range const bladerf2_sample_rate_range_4x = { FIELD_INIT(.min, 520834), FIELD_INIT(.max, 2083334), FIELD_INIT(.step, 1), FIELD_INIT(.scale, 1), }; /* Bandwidth Range */ static struct bladerf_range const bladerf2_bandwidth_range = { FIELD_INIT(.min, 200000), FIELD_INIT(.max, 56000000), FIELD_INIT(.step, 1), FIELD_INIT(.scale, 1), }; /* Frequency Ranges */ static struct bladerf_range const bladerf2_rx_frequency_range = { FIELD_INIT(.min, 70000000), FIELD_INIT(.max, 6000000000), FIELD_INIT(.step, 2), FIELD_INIT(.scale, 1), }; static struct bladerf_range const bladerf2_tx_frequency_range = { FIELD_INIT(.min, 47000000), FIELD_INIT(.max, 6000000000), FIELD_INIT(.step, 2), FIELD_INIT(.scale, 1), }; /* RF Ports */ static struct bladerf_rfic_port_name_map const bladerf2_rx_port_map[] = { { FIELD_INIT(.name, "A_BALANCED"), FIELD_INIT(.id, AD936X_A_BALANCED), }, { FIELD_INIT(.name, "B_BALANCED"), FIELD_INIT(.id, AD936X_B_BALANCED), }, { FIELD_INIT(.name, "C_BALANCED"), FIELD_INIT(.id, AD936X_C_BALANCED), }, { FIELD_INIT(.name, "A_N"), FIELD_INIT(.id, AD936X_A_N), }, { FIELD_INIT(.name, "A_P"), FIELD_INIT(.id, AD936X_A_P), }, { FIELD_INIT(.name, "B_N"), FIELD_INIT(.id, AD936X_B_N), }, { FIELD_INIT(.name, "B_P"), FIELD_INIT(.id, AD936X_B_P), }, { FIELD_INIT(.name, "C_N"), FIELD_INIT(.id, AD936X_C_N), }, { FIELD_INIT(.name, "C_P"), FIELD_INIT(.id, AD936X_C_P), }, { FIELD_INIT(.name, "TX_MON1"), FIELD_INIT(.id, AD936X_TX_MON1), }, { FIELD_INIT(.name, "TX_MON2"), FIELD_INIT(.id, AD936X_TX_MON2), }, { FIELD_INIT(.name, "TX_MON1_2"), FIELD_INIT(.id, AD936X_TX_MON1_2), }, }; static struct bladerf_rfic_port_name_map const bladerf2_tx_port_map[] = { { FIELD_INIT(.name, "TXA"), FIELD_INIT(.id, AD936X_TXA), }, { FIELD_INIT(.name, "TXB"), FIELD_INIT(.id, AD936X_TXB), }, }; static struct band_port_map const bladerf2_rx_band_port_map[] = { { FIELD_INIT(.frequency, { FIELD_INIT(.min, 0), FIELD_INIT(.max, 0), FIELD_INIT(.step, 1), FIELD_INIT(.scale, 1), }), FIELD_INIT(.band, BAND_SHUTDOWN), FIELD_INIT(.spdt, RFFE_CONTROL_SPDT_SHUTDOWN), FIELD_INIT(.rfic_port, 0), }, { FIELD_INIT(.frequency, { FIELD_INIT(.min, 70000000UL), FIELD_INIT(.max, 3000000000UL), FIELD_INIT(.step, 2), FIELD_INIT(.scale, 1), }), FIELD_INIT(.band, BAND_LOW), FIELD_INIT(.spdt, RFFE_CONTROL_SPDT_LOWBAND), FIELD_INIT(.rfic_port, AD936X_B_BALANCED), }, { FIELD_INIT(.frequency, { FIELD_INIT(.min, 3000000000UL), FIELD_INIT(.max, 6000000000UL), FIELD_INIT(.step, 2), FIELD_INIT(.scale, 1), }), FIELD_INIT(.band, BAND_HIGH), FIELD_INIT(.spdt, RFFE_CONTROL_SPDT_HIGHBAND), FIELD_INIT(.rfic_port, AD936X_A_BALANCED), }, }; static struct band_port_map const bladerf2_tx_band_port_map[] = { { FIELD_INIT(.frequency, { FIELD_INIT(.min, 0), FIELD_INIT(.max, 0), FIELD_INIT(.step, 1), FIELD_INIT(.scale, 1), }), FIELD_INIT(.band, BAND_SHUTDOWN), FIELD_INIT(.spdt, RFFE_CONTROL_SPDT_SHUTDOWN), FIELD_INIT(.rfic_port, 0), }, { FIELD_INIT(.frequency, { FIELD_INIT(.min, 46875000UL), FIELD_INIT(.max, 3000000000UL), FIELD_INIT(.step, 2), FIELD_INIT(.scale, 1), }), FIELD_INIT(.band, BAND_LOW), FIELD_INIT(.spdt, RFFE_CONTROL_SPDT_LOWBAND), FIELD_INIT(.rfic_port, AD936X_TXB), }, { FIELD_INIT(.frequency, { FIELD_INIT(.min, 3000000000UL), FIELD_INIT(.max, 6000000000UL), FIELD_INIT(.step, 2), FIELD_INIT(.scale, 1), }), FIELD_INIT(.band, BAND_HIGH), FIELD_INIT(.spdt, RFFE_CONTROL_SPDT_HIGHBAND), FIELD_INIT(.rfic_port, AD936X_TXA), }, }; // clang-format on /******************************************************************************/ /* Helpers */ /******************************************************************************/ /** * @brief Translate libad936x error codes to libbladeRF error codes * * @param[in] err The error * * @return value from \ref RETCODES list, or 0 if err is >= 0 */ int errno_ad9361_to_bladerf(int err); /** * @brief Gets the band port map by frequency. * * @param[in] ch Channel * @param[in] freq Frequency. Use 0 for the "disabled" state. * * @return pointer to band_port_map */ struct band_port_map const *_get_band_port_map_by_freq(bladerf_channel ch, bladerf_frequency freq); /** * @brief Modifies reg to configure the RF switch SPDT bits * * @param reg RFFE control register ptr * @param[in] ch Channel * @param[in] enabled True if the channel is enabled, False otherwise * @param[in] freq Frequency * * @return 0 on success, value from \ref RETCODES list on failure */ int _modify_spdt_bits_by_freq(uint32_t *reg, bladerf_channel ch, bool enabled, bladerf_frequency freq); /** * @brief Look up the RFFE control register bit for a bladerf_direction * * @param[in] dir Direction * * @return Bit index */ int _get_rffe_control_bit_for_dir(bladerf_direction dir); /** * @brief Look up the RFFE control register bit for a bladerf_channel * * @param[in] ch Channel * * @return Bit index */ int _get_rffe_control_bit_for_ch(bladerf_channel ch); /** * @brief Determine if a channel is active * * @param[in] reg RFFE control register * @param[in] ch Channel * * @return true if active, false otherwise */ bool _rffe_ch_enabled(uint32_t reg, bladerf_channel ch); /** * @brief Determine if any channel in a direction is active * * @param[in] reg RFFE control register * @param[in] dir Direction * * @return true if any channel is active, false otherwise */ bool _rffe_dir_enabled(uint32_t reg, bladerf_direction dir); /** * @brief Determine if any *other* channel in a direction is active * * @param[in] reg RFFE control register * @param[in] ch Channel * * @return true if any channel in the same direction as ch is active, false * otherwise */ bool _rffe_dir_otherwise_enabled(uint32_t reg, bladerf_channel ch); #endif // FPGA_COMMON_BLADERF2_COMMON_H_ bladeRF-2024.05/fpga_common/include/lms.h000066400000000000000000000601501457144405000200470ustar00rootroot00000000000000/** * @file lms.h * * @brief LMS6002D support * * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2013-2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef LMS_H_ #define LMS_H_ #include #include #if !defined(BLADERF_NIOS_BUILD) && !defined(BLADERF_NIOS_PC_SIMULATION) # include # include "board/board.h" # define LMS_WRITE(dev, addr, value) dev->backend->lms_write(dev, addr, value) # define LMS_READ(dev, addr, value) dev->backend->lms_read(dev, addr, value) #else # include "libbladeRF_nios_compat.h" # include "devices.h" #endif /* * lms_freq.flags values */ /** * If this bit is set, configure PLL output buffers for operation in the * bladeRF's "low band." Otherwise, configure the device for operation in the * "high band." */ #define LMS_FREQ_FLAGS_LOW_BAND (1 << 0) /** * Use VCOCAP value as-is, rather as using it as a starting point hint * to the tuning algorithm. This offers a faster retune, with a potential * trade-off in phase noise. */ #define LMS_FREQ_FLAGS_FORCE_VCOCAP (1 << 1) /** * This bit indicates whether the quicktune needs to set XB-200 parameters */ #define LMS_FREQ_XB_200_ENABLE (1 << 7) /* * This bit indicates the quicktune is for the RX module, not setting this bit * indicates the quicktune is for the TX module. */ #define LMS_FREQ_XB_200_MODULE_RX (1 << 6) /** * This is the bit mask for the filter switch configuration for the XB-200. */ #define LMS_FREQ_XB_200_FILTER_SW (3 << 4) /** * Macro that indicates the number of bitshifts necessary to get to the filter * switch field */ #define LMS_FREQ_XB_200_FILTER_SW_SHIFT (4) /** * This is the bit mask for the path configuration for the XB-200. */ #define LMS_FREQ_XB_200_PATH (3 << 2) /** * Macro that indicates the number of bitshifts necessary to get to the path * field */ #define LMS_FREQ_XB_200_PATH_SHIFT (2) /** * Information about the frequency calculation for the LMS6002D PLL * Calculation taken from the LMS6002D Programming and Calibration Guide * version 1.1r1. */ struct lms_freq { uint8_t freqsel; /**< Choice of VCO and dision ratio */ uint8_t vcocap; /**< VCOCAP hint */ uint16_t nint; /**< Integer portion of f_LO given f_REF */ uint32_t nfrac; /**< Fractional portion of f_LO given nint and f_REF */ uint8_t flags; /**< Additional parameters defining the tuning configuration. See LMFS_FREQ_FLAGS_* values */ uint8_t xb_gpio; /**< Store XB-200 switch settings */ #ifndef BLADERF_NIOS_BUILD uint8_t x; /**< VCO division ratio */ #endif uint8_t vcocap_result; /**< Filled in by retune operation to denote which VCOCAP value was used */ }; /* For >= 1.5 GHz uses the high band should be used. Otherwise, the low * band should be selected */ #define BLADERF1_BAND_HIGH 1500000000 /** * Internal low-pass filter bandwidth selection */ typedef enum { BW_28MHz, /**< 28MHz bandwidth, 14MHz LPF */ BW_20MHz, /**< 20MHz bandwidth, 10MHz LPF */ BW_14MHz, /**< 14MHz bandwidth, 7MHz LPF */ BW_12MHz, /**< 12MHz bandwidth, 6MHz LPF */ BW_10MHz, /**< 10MHz bandwidth, 5MHz LPF */ BW_8p75MHz, /**< 8.75MHz bandwidth, 4.375MHz LPF */ BW_7MHz, /**< 7MHz bandwidth, 3.5MHz LPF */ BW_6MHz, /**< 6MHz bandwidth, 3MHz LPF */ BW_5p5MHz, /**< 5.5MHz bandwidth, 2.75MHz LPF */ BW_5MHz, /**< 5MHz bandwidth, 2.5MHz LPF */ BW_3p84MHz, /**< 3.84MHz bandwidth, 1.92MHz LPF */ BW_3MHz, /**< 3MHz bandwidth, 1.5MHz LPF */ BW_2p75MHz, /**< 2.75MHz bandwidth, 1.375MHz LPF */ BW_2p5MHz, /**< 2.5MHz bandwidth, 1.25MHz LPF */ BW_1p75MHz, /**< 1.75MHz bandwidth, 0.875MHz LPF */ BW_1p5MHz, /**< 1.5MHz bandwidth, 0.75MHz LPF */ } lms_bw; /** * LNA options */ typedef enum { LNA_NONE, /**< Disable all LNAs */ LNA_1, /**< Enable LNA1 (300MHz - 2.8GHz) */ LNA_2, /**< Enable LNA2 (1.5GHz - 3.8GHz) */ LNA_3 /**< Enable LNA3 (Unused on the bladeRF) */ } lms_lna; /** * Loopback paths */ typedef enum { LBP_BB, /**< Baseband loopback path */ LBP_RF /**< RF Loopback path */ } lms_lbp; /** * PA Selection */ typedef enum { PA_AUX, /**< AUX PA Enable (for RF Loopback) */ PA_1, /**< PA1 Enable (300MHz - 2.8GHz) */ PA_2, /**< PA2 Enable (1.5GHz - 3.8GHz) */ PA_NONE, /**< All PAs disabled */ } lms_pa; /** * LMS6002D Transceiver configuration */ struct lms_xcvr_config { uint32_t tx_freq_hz; /**< Transmit frequency in Hz */ uint32_t rx_freq_hz; /**< Receive frequency in Hz */ bladerf_loopback loopback_mode; /**< Loopback Mode */ lms_lna lna; /**< LNA Selection */ lms_pa pa; /**< PA Selection */ lms_bw tx_bw; /**< Transmit Bandwidth */ lms_bw rx_bw; /**< Receive Bandwidth */ }; /** * Convert an integer to a bandwidth selection. * If the actual bandwidth is not available, the closest * bandwidth greater than the requested bandwidth is selected. * If the provided value is greater than the maximum available bandwidth, the * maximum available bandiwidth is returned. * * @param[in] req Requested bandwidth * * @return closest bandwidth */ lms_bw lms_uint2bw(unsigned int req); /** * Convert a bandwidth seletion to an unsigned int. * * @param[in] bw Bandwidth enumeration * * @return bandwidth as an unsigned integer */ unsigned int lms_bw2uint(lms_bw bw); /** * Wrapper for setting bits in an LMS6002 register via a RMW operation * * @param dev Device to operate on * @param addr Register address * @param mask Bits to set should be '1' * * @return BLADERF_ERR_* value */ static inline int lms_set(struct bladerf *dev, uint8_t addr, uint8_t mask) { int status; uint8_t regval; status = LMS_READ(dev, addr, ®val); if (status != 0) { return status; } regval |= mask; return LMS_WRITE(dev, addr, regval); } /* * Wrapper for clearing bits in an LMS6002 register via a RMW operation * * @param dev Device to operate on * @param addr Register address * @param mask Bits to clear should be '1' * * @return BLADERF_ERR_* value */ static inline int lms_clear(struct bladerf *dev, uint8_t addr, uint8_t mask) { int status; uint8_t regval; status = LMS_READ(dev, addr, ®val); if (status != 0) { return status; } regval &= ~mask; return LMS_WRITE(dev, addr, regval); } /** * Configure charge pump offset currents * * @param[in] dev Device handle * @param[in] mod Module to change */ int lms_config_charge_pumps(struct bladerf *dev, bladerf_module module); /** * Enable or disable the low-pass filter on the specified module * * @param[in] dev Device handle * @param[in] mod Module to change * * @return 0 on success, BLADERF_ERR_* value on failure */ int lms_lpf_enable(struct bladerf *dev, bladerf_module mod, bool enable); /** * Set the LPF mode * * @param[in] dev Device handle * @param[in] mod Module to change * @param[in] mode Mode to set to * * @return 0 on success, BLADERF_ERR_* value on failure */ int lms_lpf_set_mode(struct bladerf *dev, bladerf_module mod, bladerf_lpf_mode mode); /** * Get the LPF mode * * @param[in] dev Device handle * @param[in] mod Module to change * @param[out] mode Current LPF mode * * @return 0 on success, BLADERF_ERR_* value on failure */ int lms_lpf_get_mode(struct bladerf *dev, bladerf_module mod, bladerf_lpf_mode *mode); /** * Set the bandwidth for the specified module * * @param[in] dev Device handle * @param[in] mod Module to set bandwidth for * @param[in] bw Desired bandwidth * * @return 0 on success, BLADERF_ERR_* value on failure */ int lms_set_bandwidth(struct bladerf *dev, bladerf_module mod, lms_bw bw); /** * Get the bandwidth for the specified module * * @param[in] dev Device handle * @param[in] mod Module to read * @param[out] bw Current bandwidth * * @return 0 on success, BLADERF_ERR_* value on failure */ int lms_get_bandwidth(struct bladerf *dev, bladerf_module mod, lms_bw *bw); /** * Enable dithering on PLL in the module to help reduce any fractional spurs * which might be occurring. * * @param[in] dev Device handle * @param[in] mod Module to change * @param[in] nbits Number of bits to dither (1 to 8). Ignored when * disabling dithering. * @param[in] enable Set to `true` to enable, `false` to disable * * @return 0 on success, BLADERF_ERR_* value on failure */ int lms_dither_enable(struct bladerf *dev, bladerf_module mod, uint8_t nbits, bool enable); /** * Perform a soft reset of the LMS6002D device * * @param[in] dev Device handle * * @return 0 on success, BLADERF_ERR_* value on failure */ int lms_soft_reset(struct bladerf *dev); /** * Set the gain of the LNA * * The LNA gain can be one of three values: bypassed (0dB gain), * mid (MAX-6dB) and max. * * @param[in] dev Device handle * @param[in] gain Bypass, mid or max gain * * @return 0 on success, BLADERF_ERR_* value on failure */ int lms_lna_set_gain(struct bladerf *dev, bladerf_lna_gain gain); /** * Get the gain of the LNA * * @param[in] dev Device handle * @param[out] gain Bypass, mid or max gain * * @return 0 on success, BLADERF_ERR_* value on failure */ int lms_lna_get_gain(struct bladerf *dev, bladerf_lna_gain *gain); /** * Select which LNA to enable * * LNA1 frequency range is from 300MHz to 2.8GHz * LNA2 frequency range is from 1.5GHz to 3.8GHz * LNA3 frequency range is from 300MHz to 3.0GHz * * @param[in] dev Device handle * @param[in] lna LNA to enable * * @return 0 on success, BLADERF_ERR_* value on failure */ int lms_select_lna(struct bladerf *dev, lms_lna lna); /** * Get the currently selected LNA * * @param[in] dev Device handle * @param[out] lna Currently selected LNA, according to device registers * * @return 0 on success, BLADERF_ERR_* value on failure */ int lms_get_lna(struct bladerf *dev, lms_lna *lna); /** * Enable or disable RXVGA1 * * @param[in] dev Device handle * @param[in] enable Set to `true` to enable, `false` to disable * * @return 0 on success, BLADERF_ERR_* value on failure */ int lms_rxvga1_enable(struct bladerf *dev, bool enable); /** * Set the gain value of RXVGA1 (in dB) * * @param[in] dev Device handle * @param[in] gain Gain in dB (range: 5 to 30) * * @return 0 on success, BLADERF_ERR_* value on failure */ int lms_rxvga1_set_gain(struct bladerf *dev, int gain); /** * Get the RXVGA1 gain value (in dB) * * @param[in] dev Device handle * @param[out] gain Gain in dB (range: 5 to 30) * * @return 0 on success, BLADERF_ERR_* value on failure */ int lms_rxvga1_get_gain(struct bladerf *dev, int *gain); /** * Enable or disable RXVGA2 * * @param[in] dev Device handle * @param[in] enable Set to `true` to enable, `false` to disable * * @return 0 on success, BLADERF_ERR_* value on failure */ int lms_rxvga2_enable(struct bladerf *dev, bool enable); /** * Set the gain value of RXVGA2 (in dB) * * The range of gain values is from 0dB to 60dB. * Anything above 30dB is not recommended as a gain setting and will be clamped. * * @param[in] dev Device handle * @param[in] gain Gain in dB (range: 0 to 30) * * @return 0 on success, BLADERF_ERR_* value on failure */ int lms_rxvga2_set_gain(struct bladerf *dev, int gain); /** * Get the RXVGA2 gain value (in dB) * * @param[in] dev Device handle * @param[out] gain Gain in dB (range: 0 to 30) * * @return 0 on success, BLADERF_ERR_* value on failure */ int lms_rxvga2_get_gain(struct bladerf *dev, int *gain); /** * Set the gain in dB of TXVGA2. * * The range of gain values is from 0dB to 25dB. * Anything above 25 will be clamped at 25. * * @param[in] dev Device handle * @param[in] gain Gain in dB (range: 0 to 25). Out of range values will * be clamped. * * @return 0 on success, BLADERF_ERR_* value on failure */ int lms_txvga2_set_gain(struct bladerf *dev, int gain); /** * Get the gain in dB of TXVGA2. * * @param[in] dev Device handle * @param[out] gain Gain in dB (range: 0 to 25) * * @return 0 on success, BLADERF_ERR_* value on failure */ int lms_txvga2_get_gain(struct bladerf *dev, int *gain); /** * Set the gain in dB of TXVGA1. * * The range of gain values is from -35dB to -4dB. * * @param[in] dev Device handle * @param[in] gain Gain in dB (range: -4 to -35). Out of range values * will be clamped. * * @return 0 on success, BLADERF_ERR_* value on failure */ int lms_txvga1_set_gain(struct bladerf *dev, int gain); /** * Get the gain in dB of TXVGA1. * * The range of gain values is from -35dB to -4dB. * * @param[in] dev Device handle * @param[out] gain Gain in dB (range: -4 to -35) * * @return 0 on success, BLADERF_ERR_* value on failure */ int lms_txvga1_get_gain(struct bladerf *dev, int *gain); /** * Enable or disable a PA * * @note PA_ALL is NOT valid for enabling, only for disabling. * * @param[in] dev Device handle * @param[in] pa PA to enable * @param[in] enable Set to `true` to enable, `false` to disable * * @return 0 on success, BLADERF_ERR_* value on failure */ int lms_pa_enable(struct bladerf *dev, lms_pa pa, bool enable); /** * Enable or disable the peak detectors. * * This is used as a baseband feedback to the system during transmit for * calibration purposes. * * @note You cannot actively receive RF when the peak detectors are enabled. * * @param[in] dev Device handle * @param[in] enable Set to `true` to enable, `false` to disable * * @return 0 on success, BLADERF_ERR_* value on failure */ int lms_peakdetect_enable(struct bladerf *dev, bool enable); /** * Enable or disable the RF front end. * * @param[in] dev Device handle * @param[in] module Module to enable or disable * @param[in] enable Set to `true` to enable, `false` to disable * * @return 0 on success, BLADERF_ERR_* value on failure */ int lms_enable_rffe(struct bladerf *dev, bladerf_module module, bool enable); /** * Configure TX -> RX loopback mode * * @param[in] dev Device handle * @param[in] mode Loopback mode. USE BLADERF_LB_NONE to disable * loopback functionality. * * @return 0 on success, BLADERF_ERR_* value on failure */ int lms_set_loopback_mode(struct bladerf *dev, bladerf_loopback mode); /** * Figure out what loopback mode we're in. * * @param[in] dev Device handle * @param[out] mode Current loopback mode, or BLADERF_LB_NONE if * loopback is not enabled. * * @return 0 on success, BLADERF_ERR_* value on failure */ int lms_get_loopback_mode(struct bladerf *dev, bladerf_loopback *mode); /** * Top level power down of the LMS6002D * * @param[in] dev Device handle * * @return 0 on success, BLADERF_ERR_* value on failure */ int lms_power_down(struct bladerf *dev); /** * Enable or disable the PLL of a module. * * @param[in] dev Device handle * @param[in] mod Module PLL to enable * @param[in] enable Set to `true` to enable, `false` to disable * * @return 0 on success, BLADERF_ERR_* value on failure */ int lms_pll_enable(struct bladerf *dev, bladerf_module mod, bool enable); /** * Enable or disable the RX subsystem * * @param[in] dev Device handle * @param[in] enable Set to `true` to enable, `false` to disable * * @return 0 on success, BLADERF_ERR_* value on failure */ int lms_rx_enable(struct bladerf *dev, bool enable); /** * Enable or disable the TX subsystem * * @param[in] dev Device handle * @param[in] enable Set to `true` to enable, `false` to disable * * @return 0 on success, BLADERF_ERR_* value on failure */ int lms_tx_enable(struct bladerf *dev, bool enable); /** * Converts a frequency structure into the final frequency in Hz * * @param[in] f Frequency structure to convert * @returns The closest frequency in Hz that `f` can be converted to */ uint32_t lms_frequency_to_hz(struct lms_freq *f); /** * Pretty print a frequency structure * * @note This is intended only for debug purposes. The log level must * be set to DEBUG for this output to be made visible. * * @param[in] freq Frequency structure to print out */ void lms_print_frequency(struct lms_freq *freq); /** * Get the frequency structure of the module * * @param[in] dev Device handle * @param[in] mod Module to change * @param[out] freq LMS frequency structure detailing VCO settings * * @return 0 on success, BLADERF_ERR_* value on failure */ int lms_get_frequency(struct bladerf *dev, bladerf_module mod, struct lms_freq *freq); /** * Fetch "Quick tune" parameters * * @param[in] dev Device handle * @param[in] module Module to query * @param[out] quick_tune Quick retune parameters * * @return 0 on success, BLADERF_ERR_* value on failure */ int lms_get_quick_tune(struct bladerf *dev, bladerf_module module, struct bladerf_quick_tune *quick_tune); /** * Calculate the parameters to tune to a specified frequency * * @param[in] freq Desired frequency * @param[out] f Computed tuning parameters * * @return 0 on success, BLADERF_ERR_* value on failure */ int lms_calculate_tuning_params(unsigned int freq, struct lms_freq *f); /** * Set the frequency of a module, given the lms_freq structure * * @param[in] dev Device handle * @param[in] mod Module to tune * @param[in] f lms_freq structure contaning desired tuning parameters * * @return 0 on success, BLADERF_ERR_* value on failure */ int lms_set_precalculated_frequency(struct bladerf *dev, bladerf_module mod, struct lms_freq *f); /** * Set the frequency of a module in Hz * * @param[in] dev Device handle * @param[in] mod Module to change * @param[in] freq Frequency in Hz to tune * * @return 0 on success, BLADERF_ERR_* value on failure */ static inline int lms_set_frequency(struct bladerf *dev, bladerf_module mod, uint32_t freq) { struct lms_freq f; int status; status = lms_calculate_tuning_params(freq, &f); if (status < 0) { return status; } return lms_set_precalculated_frequency(dev, mod, &f); } /** * Read back every register from the LMS6002D device. * * @note This is intended only for debug purposes. * * @param[in] dev Device handle * * @return 0 on success, BLADERF_ERR_* value on failure */ int lms_dump_registers(struct bladerf *dev); /** * Calibrate the DC offset value for RX and TX modules for the * direct conversion receiver. * * @param[in] dev Device handle * @param[in] module Module to calibrate * * @return 0 on success, -1 on failure. */ int lms_calibrate_dc(struct bladerf *dev, bladerf_cal_module module); /** * Load DC calibration values directly via device registers instead of * running autocalibration routines. * * @param[in] dev Device handle * @param[in] dc_cals Calibration values to load */ int lms_set_dc_cals(struct bladerf *dev, const struct bladerf_lms_dc_cals *dc_cals); /** * Retrieve the DC calibration values currently in use * * @param[in] dev Device handle * @param[out] dc_cals Calibration values to load */ int lms_get_dc_cals(struct bladerf *dev, struct bladerf_lms_dc_cals *dc_cals); /** * Initialize and configure the LMS6002D given the transceiver * configuration passed in. * * @param[in] dev Device handle * @param[in] config Transceiver configuration * * @return 0 on success, -1 on failure. */ int lms_config_init(struct bladerf *dev, struct lms_xcvr_config *config); /** * Select the appropriate band fore the specified frequency * * @note This is band selection is specific to how the bladeRF is connected * to the LNA and PA blocks. * * @param[in] dev Device handle * @param[in] module Module to configure * @parma[in] low_band Select the low band * * @return 0 on succes, BLADERF_ERR_* value on failure */ int lms_select_band(struct bladerf *dev, bladerf_module module, bool low_band); /** * Select internal or external sampling * * @param[in] dev Device handle * @param[in] sampling Desired sampling mode * * @return 0 on succes, BLADERF_ERR_* value on failure */ int lms_select_sampling(struct bladerf *dev, bladerf_sampling sampling); /** * Get the current sampling type * * @param[in] dev Device handle * @param[out] sampling Desired sampling mode * * @return 0 on succes, BLADERF_ERR_* value on failure */ int lms_get_sampling(struct bladerf *dev, bladerf_sampling *sampling); /** * Set the DC offset value on the I channel * * For consistency with other bladeRF correction values, * this value is scaled to [-2048, 2048]. * * @param[in] dev Device handle * @param[in] module Module to adjust * @param[in] value DC offset adjustment value to write * * @return 0 on succes, BLADERF_ERR_* value on failure */ int lms_set_dc_offset_i(struct bladerf *dev, bladerf_module module, uint16_t value); /** * Get the DC offset value on the I channel * * For consistency with other bladeRF correction values, * this value is scaled to [-2048, 2048]. * * @param[in] dev Device handle * @param[in] module Module to adjust * @param[out] value On success, the DC offset value on the I channel * * @return 0 on succes, BLADERF_ERR_* value on failure */ int lms_get_dc_offset_i(struct bladerf *dev, bladerf_module module, int16_t *value); /** * Set the DC offset value on the Q channel. * * For consistency with other bladeRF correction values, * this value is scaled to [-2048, 2048]. * * @param[in] dev Device handle * @param[in] module Module to adjust * @param[in] value DC offset adjustment value to write * * @return 0 on succes, BLADERF_ERR_* value on failure */ int lms_set_dc_offset_q(struct bladerf *dev, bladerf_module module, int16_t value); /** * Get the DC offset value on the Q channel * * For consistency with other bladeRF correction values, * this value is scaled to [-2048, 2048]. * * @param[in] dev Device handle * @param[in] module Module to adjust * @param[out] value On success, the DC offset value on the I channel * * @return 0 on succes, BLADERF_ERR_* value on failure */ int lms_get_dc_offset_q(struct bladerf *dev, bladerf_module module, int16_t *value); #endif /* LMS_H_ */ bladeRF-2024.05/fpga_common/include/nios_pkt_16x64.h000066400000000000000000000214121457144405000217500ustar00rootroot00000000000000/* * Copyright (c) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef BLADERF_NIOS_PKT_16x64_H_ #define BLADERF_NIOS_PKT_16x64_H_ #include #include #include /* * This file defines the Host <-> FPGA (NIOS II) packet formats for accesses * to devices/blocks with 16-bit addresses and 64-bit data * * * Request * ---------------------- * * +================+=========================================================+ * | Byte offset | Description | * +================+=========================================================+ * | 0 | Magic Value | * +----------------+---------------------------------------------------------+ * | 1 | Target ID (Note 1) | * +----------------+---------------------------------------------------------+ * | 2 | Flags (Note 2) | * +----------------+---------------------------------------------------------+ * | 3 | Reserved. Set to 0x00. | * +----------------+---------------------------------------------------------+ * | 5:4 | 16-bit address, little-endian | * +----------------+---------------------------------------------------------+ * | 13:6 | 64-bit data, little-endian | * +----------------+---------------------------------------------------------+ * | 15:14 | Reserved. Set to 0. | * +----------------+---------------------------------------------------------+ * * * Response * ---------------------- * * The response packet contains the same information as the request. * A status flag will be set if the operation completed successfully. * * In the case of a read request, the data field will contain the read data, if * the read succeeded. * * (Note 1) * The "Target ID" refers to the peripheral, device, or block to access. * See the NIOS_PKT_16x64_TARGET_* values. * * (Note 2) * The flags are defined as follows: * * +================+========================+ * | Bit(s) | Value | * +================+========================+ * | 7:2 | Reserved. Set to 0. | * +----------------+------------------------+ * | | Status. Only used in | * | | response packet. | * | | Ignored in request. | * | 1 | | * | | 1 = Success | * | | 0 = Failure | * +----------------+------------------------+ * | 0 | 0 = Read operation | * | | 1 = Write operation | * +----------------+------------------------+ * */ #define NIOS_PKT_16x64_MAGIC ((uint8_t) 'E') /* Request packet indices */ #define NIOS_PKT_16x64_IDX_MAGIC 0 #define NIOS_PKT_16x64_IDX_TARGET_ID 1 #define NIOS_PKT_16x64_IDX_FLAGS 2 #define NIOS_PKT_16x64_IDX_RESV1 3 #define NIOS_PKT_16x64_IDX_ADDR 4 #define NIOS_PKT_16x64_IDX_DATA 6 #define NIOS_PKT_16x64_IDX_RESV2 14 /* Target IDs */ #define NIOS_PKT_16x64_TARGET_AD9361 0x00 #define NIOS_PKT_16x64_TARGET_RFIC 0x01 /* RFIC control */ /* IDs 0x80 through 0xff will not be assigned by Nuand. These are reserved * for user customizations */ #define NIOS_PKT_16x64_TARGET_USR1 0x80 #define NIOS_PKT_16x64_TARGET_USR128 0xff /* Flag bits */ #define NIOS_PKT_16x64_FLAG_WRITE (1 << 0) #define NIOS_PKT_16x64_FLAG_SUCCESS (1 << 1) /** * Sub-addresses for rfic target. * * +================+============================================+ * | Bit(s) | Value | * +================+============================================+ * | 15:12 | Reserved. Set to 0. | * +----------------+--------------------------------------------+ * | 11:8 | bladerf_channel & 0xf | * | | 1111 = system-wide | * +----------------+--------------------------------------------+ * | 7:0 | Subaddress. See bladerf_rfic_command enum. | * +----------------+--------------------------------------------+ */ /* Pack the request buffer */ static inline void nios_pkt_16x64_pack(uint8_t *buf, uint8_t target, bool write, uint16_t addr, uint64_t data) { buf[NIOS_PKT_16x64_IDX_MAGIC] = NIOS_PKT_16x64_MAGIC; buf[NIOS_PKT_16x64_IDX_TARGET_ID] = target; if (write) { buf[NIOS_PKT_16x64_IDX_FLAGS] = NIOS_PKT_16x64_FLAG_WRITE; } else { buf[NIOS_PKT_16x64_IDX_FLAGS] = 0x00; } buf[NIOS_PKT_16x64_IDX_RESV1] = 0x00; buf[NIOS_PKT_16x64_IDX_ADDR + 0] = (addr >> 0); buf[NIOS_PKT_16x64_IDX_ADDR + 1] = (addr >> 8); buf[NIOS_PKT_16x64_IDX_DATA + 0] = (data >> 0) & 0xff; buf[NIOS_PKT_16x64_IDX_DATA + 1] = (data >> 8) & 0xff; buf[NIOS_PKT_16x64_IDX_DATA + 2] = (data >> 16) & 0xff; buf[NIOS_PKT_16x64_IDX_DATA + 3] = (data >> 24) & 0xff; buf[NIOS_PKT_16x64_IDX_DATA + 4] = (data >> 32) & 0xff; buf[NIOS_PKT_16x64_IDX_DATA + 5] = (data >> 40) & 0xff; buf[NIOS_PKT_16x64_IDX_DATA + 6] = (data >> 48) & 0xff; buf[NIOS_PKT_16x64_IDX_DATA + 7] = (data >> 56) & 0xff; buf[NIOS_PKT_16x64_IDX_RESV2 + 0] = 0x00; buf[NIOS_PKT_16x64_IDX_RESV2 + 1] = 0x00; } /* Unpack the request buffer */ static inline void nios_pkt_16x64_unpack(const uint8_t *buf, uint8_t *target, bool *write, uint16_t *addr, uint64_t *data) { if (target != NULL) { *target = buf[NIOS_PKT_16x64_IDX_TARGET_ID]; } if (write != NULL) { *write = (buf[NIOS_PKT_16x64_IDX_FLAGS] & NIOS_PKT_16x64_FLAG_WRITE) != 0; } if (addr != NULL) { *addr = (buf[NIOS_PKT_16x64_IDX_ADDR + 0] << 0) | (buf[NIOS_PKT_16x64_IDX_ADDR + 1] << 8); } if (data != NULL) { *data = ((uint64_t) buf[NIOS_PKT_16x64_IDX_DATA + 0] << 0) | ((uint64_t) buf[NIOS_PKT_16x64_IDX_DATA + 1] << 8) | ((uint64_t) buf[NIOS_PKT_16x64_IDX_DATA + 2] << 16) | ((uint64_t) buf[NIOS_PKT_16x64_IDX_DATA + 3] << 24) | ((uint64_t) buf[NIOS_PKT_16x64_IDX_DATA + 4] << 32) | ((uint64_t) buf[NIOS_PKT_16x64_IDX_DATA + 5] << 40) | ((uint64_t) buf[NIOS_PKT_16x64_IDX_DATA + 6] << 48) | ((uint64_t) buf[NIOS_PKT_16x64_IDX_DATA + 7] << 56); } } /* Pack the response buffer */ static inline void nios_pkt_16x64_resp_pack(uint8_t *buf, uint8_t target, bool write, uint16_t addr, uint64_t data, bool success) { nios_pkt_16x64_pack(buf, target, write, addr, data); if (success) { buf[NIOS_PKT_16x64_IDX_FLAGS] |= NIOS_PKT_16x64_FLAG_SUCCESS; } } /* Unpack the response buffer */ static inline void nios_pkt_16x64_resp_unpack(const uint8_t *buf, uint8_t *target, bool *write, uint16_t *addr, uint64_t *data, bool *success) { nios_pkt_16x64_unpack(buf, target, write, addr, data); if ((buf[NIOS_PKT_16x64_IDX_FLAGS] & NIOS_PKT_16x64_FLAG_SUCCESS) != 0) { *success = true; } else { *success = false; } } #endif bladeRF-2024.05/fpga_common/include/nios_pkt_32x32.h000066400000000000000000000200151457144405000217370ustar00rootroot00000000000000/* * Copyright (c) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef BLADERF_NIOS_PKT_32x32_H_ #define BLADERF_NIOS_PKT_32x32_H_ #include #include #include /* * This file defines the Host <-> FPGA (NIOS II) packet formats for accesses * to devices/blocks with 32-bit addresses and 32-bit data * * * Request * ---------------------- * * +================+=========================================================+ * | Byte offset | Description | * +================+=========================================================+ * | 0 | Magic Value | * +----------------+---------------------------------------------------------+ * | 1 | Target ID (Note 1) | * +----------------+---------------------------------------------------------+ * | 2 | Flags (Note 2) | * +----------------+---------------------------------------------------------+ * | 3 | Reserved. Set to 0x00. | * +----------------+---------------------------------------------------------+ * | 7:4 | 32-bit address | * +----------------+---------------------------------------------------------+ * | 11:8 | 32-bit data, little-endian | * +----------------+---------------------------------------------------------+ * | 15:12 | Reserved. Set to 0. | * +----------------+---------------------------------------------------------+ * * * Response * ---------------------- * * The response packet contains the same information as the request. * A status flag will be set if the operation completed successfully. * * In the case of a read request, the data field will contain the read data, if * the read succeeded. * * (Note 1) * The "Target ID" refers to the peripheral, device, or block to access. * See the NIOS_PKT_32x32_TARGET_* values. * * (Note 2) * The flags are defined as follows: * * +================+========================+ * | Bit(s) | Value | * +================+========================+ * | 7:2 | Reserved. Set to 0. | * +----------------+------------------------+ * | | Status. Only used in | * | | response packet. | * | | Ignored in request. | * | 1 | | * | | 1 = Success | * | | 0 = Failure | * +----------------+------------------------+ * | 0 | 0 = Read operation | * | | 1 = Write operation | * +----------------+------------------------+ * */ #define NIOS_PKT_32x32_MAGIC ((uint8_t) 'K') /* Request packet indices */ #define NIOS_PKT_32x32_IDX_MAGIC 0 #define NIOS_PKT_32x32_IDX_TARGET_ID 1 #define NIOS_PKT_32x32_IDX_FLAGS 2 #define NIOS_PKT_32x32_IDX_RESV1 3 #define NIOS_PKT_32x32_IDX_ADDR 4 #define NIOS_PKT_32x32_IDX_DATA 8 #define NIOS_PKT_32x32_IDX_RESV2 12 /* Target IDs */ /* For the EXP and EXP_DIR targets, the address is a bitmask of values * to read/write */ #define NIOS_PKT_32x32_TARGET_EXP 0x00 /* Expansion I/O */ #define NIOS_PKT_32x32_TARGET_EXP_DIR 0x01 /* Expansion I/O Direction reg */ #define NIOS_PKT_32x32_TARGET_ADI_AXI 0x02 /* ADI AXI Interface */ #define NIOS_PKT_32x32_TARGET_WB_MSTR 0x03 /* Wishbone Master */ /* IDs 0x80 through 0xff will not be assigned by Nuand. These are reserved * for user customizations */ #define NIOS_PKT_32x32_TARGET_USR1 0x80 #define NIOS_PKT_32x32_TARGET_USR128 0xff /* Flag bits */ #define NIOS_PKT_32x32_FLAG_WRITE (1 << 0) #define NIOS_PKT_32x32_FLAG_SUCCESS (1 << 1) /* Pack the request buffer */ static inline void nios_pkt_32x32_pack(uint8_t *buf, uint8_t target, bool write, uint32_t addr, uint32_t data) { buf[NIOS_PKT_32x32_IDX_MAGIC] = NIOS_PKT_32x32_MAGIC; buf[NIOS_PKT_32x32_IDX_TARGET_ID] = target; if (write) { buf[NIOS_PKT_32x32_IDX_FLAGS] = NIOS_PKT_32x32_FLAG_WRITE; } else { buf[NIOS_PKT_32x32_IDX_FLAGS] = 0x00; } buf[NIOS_PKT_32x32_IDX_RESV1] = 0x00; buf[NIOS_PKT_32x32_IDX_ADDR + 0] = (addr >> 0); buf[NIOS_PKT_32x32_IDX_ADDR + 1] = (addr >> 8); buf[NIOS_PKT_32x32_IDX_ADDR + 2] = (addr >> 16); buf[NIOS_PKT_32x32_IDX_ADDR + 3] = (addr >> 24); buf[NIOS_PKT_32x32_IDX_DATA + 0] = (data >> 0); buf[NIOS_PKT_32x32_IDX_DATA + 1] = (data >> 8); buf[NIOS_PKT_32x32_IDX_DATA + 2] = (data >> 16); buf[NIOS_PKT_32x32_IDX_DATA + 3] = (data >> 24); buf[NIOS_PKT_32x32_IDX_RESV2 + 0] = 0x00; buf[NIOS_PKT_32x32_IDX_RESV2 + 1] = 0x00; buf[NIOS_PKT_32x32_IDX_RESV2 + 2] = 0x00; buf[NIOS_PKT_32x32_IDX_RESV2 + 3] = 0x00; } /* Unpack the request buffer */ static inline void nios_pkt_32x32_unpack(const uint8_t *buf, uint8_t *target, bool *write, uint32_t *addr, uint32_t *data) { if (target != NULL) { *target = buf[NIOS_PKT_32x32_IDX_TARGET_ID]; } if (write != NULL) { *write = (buf[NIOS_PKT_32x32_IDX_FLAGS] & NIOS_PKT_32x32_FLAG_WRITE) != 0; } if (addr != NULL) { *addr = (buf[NIOS_PKT_32x32_IDX_ADDR + 0] << 0) | (buf[NIOS_PKT_32x32_IDX_ADDR + 1] << 8) | (buf[NIOS_PKT_32x32_IDX_ADDR + 2] << 16) | (buf[NIOS_PKT_32x32_IDX_ADDR + 3] << 24); } if (data != NULL) { *data = (buf[NIOS_PKT_32x32_IDX_DATA + 0] << 0) | (buf[NIOS_PKT_32x32_IDX_DATA + 1] << 8) | (buf[NIOS_PKT_32x32_IDX_DATA + 2] << 16) | (buf[NIOS_PKT_32x32_IDX_DATA + 3] << 24); } } /* Pack the response buffer */ static inline void nios_pkt_32x32_resp_pack(uint8_t *buf, uint8_t target, bool write, uint32_t addr, uint32_t data, bool success) { nios_pkt_32x32_pack(buf, target, write, addr, data); if (success) { buf[NIOS_PKT_32x32_IDX_FLAGS] |= NIOS_PKT_32x32_FLAG_SUCCESS; } } /* Unpack the response buffer */ static inline void nios_pkt_32x32_resp_unpack(const uint8_t *buf, uint8_t *target, bool *write, uint32_t *addr, uint32_t *data, bool *success) { nios_pkt_32x32_unpack(buf, target, write, addr, data); if ((buf[NIOS_PKT_32x32_IDX_FLAGS] & NIOS_PKT_32x32_FLAG_SUCCESS) != 0) { *success = true; } else { *success = false; } } #endif bladeRF-2024.05/fpga_common/include/nios_pkt_8x16.h000066400000000000000000000200501457144405000216630ustar00rootroot00000000000000/* * Copyright (c) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef BLADERF_NIOS_PKT_8x16_H_ #define BLADERF_NIOS_PKT_8x16_H_ #include #include #include /* * This file defines the Host <-> FPGA (NIOS II) packet formats for accesses * to devices/blocks with 8-bit addresses and 16-bit data * * * Request * ---------------------- * * +================+=========================================================+ * | Byte offset | Description | * +================+=========================================================+ * | 0 | Magic Value | * +----------------+---------------------------------------------------------+ * | 1 | Target ID (Note 1) | * +----------------+---------------------------------------------------------+ * | 2 | Flags (Note 2) | * +----------------+---------------------------------------------------------+ * | 3 | Reserved. Set to 0x00. | * +----------------+---------------------------------------------------------+ * | 4 | 8-bit address | * +----------------+---------------------------------------------------------+ * | 5:6 | 16-bit data, little-endian | * +----------------+---------------------------------------------------------+ * | 7-15 | Reserved. Set to 0. | * +----------------+---------------------------------------------------------+ * * * Response * ---------------------- * * The response packet contains the same information as the request. * A status flag will be set if the operation completed successfully. * * In the case of a read request, the data field will contain the read data, if * the read succeeded. * * (Note 1) * The "Target ID" refers to the peripheral, device, or block to access. * See the NIOS_PKT_8x16_TARGET_* values. * * (Note 2) * The flags are defined as follows: * * +================+========================+ * | Bit(s) | Value | * +================+========================+ * | 7:2 | Reserved. Set to 0. | * +----------------+------------------------+ * | | Status. Only used in | * | | response packet. | * | | Ignored in request. | * | 1 | | * | | 1 = Success | * | | 0 = Failure | * +----------------+------------------------+ * | 0 | 0 = Read operation | * | | 1 = Write operation | * +----------------+------------------------+ * */ #define NIOS_PKT_8x16_MAGIC ((uint8_t) 'B') /* Request packet indices */ #define NIOS_PKT_8x16_IDX_MAGIC 0 #define NIOS_PKT_8x16_IDX_TARGET_ID 1 #define NIOS_PKT_8x16_IDX_FLAGS 2 #define NIOS_PKT_8x16_IDX_RESV1 3 #define NIOS_PKT_8x16_IDX_ADDR 4 #define NIOS_PKT_8x16_IDX_DATA 5 #define NIOS_PKT_8x16_IDX_RESV2 7 /* Target IDs */ #define NIOS_PKT_8x16_TARGET_VCTCXO_DAC 0x00 #define NIOS_PKT_8x16_TARGET_IQ_CORR 0x01 #define NIOS_PKT_8x16_TARGET_AGC_CORR 0x02 #define NIOS_PKT_8x16_TARGET_AD56X1_DAC 0x03 #define NIOS_PKT_8x16_TARGET_INA219 0x04 /* IDs 0x80 through 0xff will not be assigned by Nuand. These are reserved * for user customizations */ #define NIOS_PKT_8x16_TARGET_USR1 0x80 #define NIOS_PKT_8x16_TARGET_USR128 0xff /* Flag bits */ #define NIOS_PKT_8x16_FLAG_WRITE (1 << 0) #define NIOS_PKT_8x16_FLAG_SUCCESS (1 << 1) /* Sub-addresses for the IQ Correction target block */ #define NIOS_PKT_8x16_ADDR_IQ_CORR_RX_GAIN 0x00 #define NIOS_PKT_8x16_ADDR_IQ_CORR_RX_PHASE 0x01 #define NIOS_PKT_8x16_ADDR_IQ_CORR_TX_GAIN 0x02 #define NIOS_PKT_8x16_ADDR_IQ_CORR_TX_PHASE 0x03 /* Sub-addresses for the AGC DC Correction target block */ #define NIOS_PKT_8x16_ADDR_AGC_DC_Q_MAX 0x00 #define NIOS_PKT_8x16_ADDR_AGC_DC_I_MAX 0x01 #define NIOS_PKT_8x16_ADDR_AGC_DC_Q_MID 0x02 #define NIOS_PKT_8x16_ADDR_AGC_DC_I_MID 0x03 #define NIOS_PKT_8x16_ADDR_AGC_DC_Q_MIN 0x04 #define NIOS_PKT_8x16_ADDR_AGC_DC_I_MIN 0x05 /* Pack the request buffer */ static inline void nios_pkt_8x16_pack(uint8_t *buf, uint8_t target, bool write, uint8_t addr, uint16_t data) { buf[NIOS_PKT_8x16_IDX_MAGIC] = NIOS_PKT_8x16_MAGIC; buf[NIOS_PKT_8x16_IDX_TARGET_ID] = target; if (write) { buf[NIOS_PKT_8x16_IDX_FLAGS] = NIOS_PKT_8x16_FLAG_WRITE; } else { buf[NIOS_PKT_8x16_IDX_FLAGS] = 0x00; } buf[NIOS_PKT_8x16_IDX_RESV1] = 0x00; buf[NIOS_PKT_8x16_IDX_ADDR] = addr; buf[NIOS_PKT_8x16_IDX_DATA] = data & 0xff; buf[NIOS_PKT_8x16_IDX_DATA + 1] = (data >> 8); buf[NIOS_PKT_8x16_IDX_RESV2 + 0] = 0x00; buf[NIOS_PKT_8x16_IDX_RESV2 + 1] = 0x00; buf[NIOS_PKT_8x16_IDX_RESV2 + 2] = 0x00; buf[NIOS_PKT_8x16_IDX_RESV2 + 3] = 0x00; buf[NIOS_PKT_8x16_IDX_RESV2 + 4] = 0x00; buf[NIOS_PKT_8x16_IDX_RESV2 + 5] = 0x00; buf[NIOS_PKT_8x16_IDX_RESV2 + 6] = 0x00; buf[NIOS_PKT_8x16_IDX_RESV2 + 7] = 0x00; buf[NIOS_PKT_8x16_IDX_RESV2 + 8] = 0x00; } /* Unpack the request buffer */ static inline void nios_pkt_8x16_unpack(const uint8_t *buf, uint8_t *target, bool *write, uint8_t *addr, uint16_t *data) { if (target != NULL) { *target = buf[NIOS_PKT_8x16_IDX_TARGET_ID]; } if (write != NULL) { *write = (buf[NIOS_PKT_8x16_IDX_FLAGS] & NIOS_PKT_8x16_FLAG_WRITE) != 0; } if (addr != NULL) { *addr = buf[NIOS_PKT_8x16_IDX_ADDR]; } if (data != NULL) { *data = (buf[NIOS_PKT_8x16_IDX_DATA + 0] << 0) | (buf[NIOS_PKT_8x16_IDX_DATA + 1] << 8); } } /* Pack the response buffer */ static inline void nios_pkt_8x16_resp_pack(uint8_t *buf, uint8_t target, bool write, uint8_t addr, uint16_t data, bool success) { nios_pkt_8x16_pack(buf, target, write, addr, data); if (success) { buf[NIOS_PKT_8x16_IDX_FLAGS] |= NIOS_PKT_8x16_FLAG_SUCCESS; } } /* Unpack the response buffer */ static inline void nios_pkt_8x16_resp_unpack(const uint8_t *buf, uint8_t *target, bool *write, uint8_t *addr, uint16_t *data, bool *success) { nios_pkt_8x16_unpack(buf, target, write, addr, data); if ((buf[NIOS_PKT_8x16_IDX_FLAGS] & NIOS_PKT_8x16_FLAG_SUCCESS) != 0) { *success = true; } else { *success = false; } } #endif bladeRF-2024.05/fpga_common/include/nios_pkt_8x32.h000066400000000000000000000177201457144405000216730ustar00rootroot00000000000000/* * Copyright (c) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef BLADERF_NIOS_PKT_8x32_H_ #define BLADERF_NIOS_PKT_8x32_H_ #include #include #include /* * This file defines the Host <-> FPGA (NIOS II) packet formats for accesses * to devices/blocks with 8-bit addresses and 32-bit data * * * Request * ---------------------- * * +================+=========================================================+ * | Byte offset | Description | * +================+=========================================================+ * | 0 | Magic Value | * +----------------+---------------------------------------------------------+ * | 1 | Target ID (Note 1) | * +----------------+---------------------------------------------------------+ * | 2 | Flags (Note 2) | * +----------------+---------------------------------------------------------+ * | 3 | Reserved. Set to 0x00. | * +----------------+---------------------------------------------------------+ * | 4 | 8-bit address | * +----------------+---------------------------------------------------------+ * | 8:5 | 32-bit data, little-endian | * +----------------+---------------------------------------------------------+ * | 15:9 | Reserved. Set to 0. | * +----------------+---------------------------------------------------------+ * * * Response * ---------------------- * * The response packet contains the same information as the request. * A status flag will be set if the operation completed successfully. * * In the case of a read request, the data field will contain the read data, if * the read succeeded. * * (Note 1) * The "Target ID" refers to the peripheral, device, or block to access. * See the NIOS_PKT_8x32_TARGET_* values. * * (Note 2) * The flags are defined as follows: * * +================+========================+ * | Bit(s) | Value | * +================+========================+ * | 7:2 | Reserved. Set to 0. | * +----------------+------------------------+ * | | Status. Only used in | * | | response packet. | * | | Ignored in request. | * | 1 | | * | | 1 = Success | * | | 0 = Failure | * +----------------+------------------------+ * | 0 | 0 = Read operation | * | | 1 = Write operation | * +----------------+------------------------+ * */ #define NIOS_PKT_8x32_MAGIC ((uint8_t) 'C') /* Request packet indices */ #define NIOS_PKT_8x32_IDX_MAGIC 0 #define NIOS_PKT_8x32_IDX_TARGET_ID 1 #define NIOS_PKT_8x32_IDX_FLAGS 2 #define NIOS_PKT_8x32_IDX_RESV1 3 #define NIOS_PKT_8x32_IDX_ADDR 4 #define NIOS_PKT_8x32_IDX_DATA 5 #define NIOS_PKT_8x32_IDX_RESV2 9 /* Target IDs */ #define NIOS_PKT_8x32_TARGET_VERSION 0x00 /* FPGA version (read only) */ #define NIOS_PKT_8x32_TARGET_CONTROL 0x01 /* FPGA control/config register */ #define NIOS_PKT_8x32_TARGET_ADF4351 0x02 /* XB-200 ADF4351 register access * (write-only) */ #define NIOS_PKT_8x32_TARGET_RFFE_CSR 0x03 /* RFFE control & status GPIO */ #define NIOS_PKT_8x32_TARGET_ADF400X 0x04 /* ADF400x config */ #define NIOS_PKT_8x32_TARGET_FASTLOCK 0x05 /* Save AD9361 fast lock profile * to Nios */ /* IDs 0x80 through 0xff will not be assigned by Nuand. These are reserved * for user customizations */ #define NIOS_PKT_8x32_TARGET_USR1 0x80 #define NIOS_PKT_8x32_TARGET_USR128 0xff /* Flag bits */ #define NIOS_PKT_8x32_FLAG_WRITE (1 << 0) #define NIOS_PKT_8x32_FLAG_SUCCESS (1 << 1) /* Pack the request buffer */ static inline void nios_pkt_8x32_pack(uint8_t *buf, uint8_t target, bool write, uint8_t addr, uint32_t data) { buf[NIOS_PKT_8x32_IDX_MAGIC] = NIOS_PKT_8x32_MAGIC; buf[NIOS_PKT_8x32_IDX_TARGET_ID] = target; if (write) { buf[NIOS_PKT_8x32_IDX_FLAGS] = NIOS_PKT_8x32_FLAG_WRITE; } else { buf[NIOS_PKT_8x32_IDX_FLAGS] = 0x00; } buf[NIOS_PKT_8x32_IDX_RESV1] = 0x00; buf[NIOS_PKT_8x32_IDX_ADDR] = addr; buf[NIOS_PKT_8x32_IDX_DATA + 0] = data & 0xff; buf[NIOS_PKT_8x32_IDX_DATA + 1] = (data >> 8); buf[NIOS_PKT_8x32_IDX_DATA + 2] = (data >> 16); buf[NIOS_PKT_8x32_IDX_DATA + 3] = (data >> 24); buf[NIOS_PKT_8x32_IDX_RESV2 + 0] = 0x00; buf[NIOS_PKT_8x32_IDX_RESV2 + 1] = 0x00; buf[NIOS_PKT_8x32_IDX_RESV2 + 2] = 0x00; buf[NIOS_PKT_8x32_IDX_RESV2 + 3] = 0x00; buf[NIOS_PKT_8x32_IDX_RESV2 + 4] = 0x00; buf[NIOS_PKT_8x32_IDX_RESV2 + 5] = 0x00; buf[NIOS_PKT_8x32_IDX_RESV2 + 6] = 0x00; } /* Unpack the request buffer */ static inline void nios_pkt_8x32_unpack(const uint8_t *buf, uint8_t *target, bool *write, uint8_t *addr, uint32_t *data) { if (target != NULL) { *target = buf[NIOS_PKT_8x32_IDX_TARGET_ID]; } if (write != NULL) { *write = (buf[NIOS_PKT_8x32_IDX_FLAGS] & NIOS_PKT_8x32_FLAG_WRITE) != 0; } if (addr != NULL) { *addr = buf[NIOS_PKT_8x32_IDX_ADDR]; } if (data != NULL) { *data = (buf[NIOS_PKT_8x32_IDX_DATA + 0] << 0) | (buf[NIOS_PKT_8x32_IDX_DATA + 1] << 8) | (buf[NIOS_PKT_8x32_IDX_DATA + 2] << 16) | (buf[NIOS_PKT_8x32_IDX_DATA + 3] << 24); } } /* Pack the response buffer */ static inline void nios_pkt_8x32_resp_pack(uint8_t *buf, uint8_t target, bool write, uint8_t addr, uint32_t data, bool success) { nios_pkt_8x32_pack(buf, target, write, addr, data); if (success) { buf[NIOS_PKT_8x32_IDX_FLAGS] |= NIOS_PKT_8x32_FLAG_SUCCESS; } } /* Unpack the response buffer */ static inline void nios_pkt_8x32_resp_unpack(const uint8_t *buf, uint8_t *target, bool *write, uint8_t *addr, uint32_t *data, bool *success) { nios_pkt_8x32_unpack(buf, target, write, addr, data); if ((buf[NIOS_PKT_8x32_IDX_FLAGS] & NIOS_PKT_8x32_FLAG_SUCCESS) != 0) { *success = true; } else { *success = false; } } #endif bladeRF-2024.05/fpga_common/include/nios_pkt_8x64.h000066400000000000000000000177541457144405000217070ustar00rootroot00000000000000/* * Copyright (c) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef BLADERF_NIOS_PKT_8x64_H_ #define BLADERF_NIOS_PKT_8x64_H_ #include #include #include /* * This file defines the Host <-> FPGA (NIOS II) packet formats for accesses * to devices/blocks with 8-bit addresses and 64-bit data * * * Request * ---------------------- * * +================+=========================================================+ * | Byte offset | Description | * +================+=========================================================+ * | 0 | Magic Value | * +----------------+---------------------------------------------------------+ * | 1 | Target ID (Note 1) | * +----------------+---------------------------------------------------------+ * | 2 | Flags (Note 2) | * +----------------+---------------------------------------------------------+ * | 3 | Reserved. Set to 0x00. | * +----------------+---------------------------------------------------------+ * | 4 | 8-bit address | * +----------------+---------------------------------------------------------+ * | 12:5 | 64-bit data, little-endian | * +----------------+---------------------------------------------------------+ * | 15:13 | Reserved. Set to 0. | * +----------------+---------------------------------------------------------+ * * * Response * ---------------------- * * The response packet contains the same information as the request. * A status flag will be set if the operation completed successfully. * * In the case of a read request, the data field will contain the read data, if * the read succeeded. * * (Note 1) * The "Target ID" refers to the peripheral, device, or block to access. * See the NIOS_PKT_8x64_TARGET_* values. * * (Note 2) * The flags are defined as follows: * * +================+========================+ * | Bit(s) | Value | * +================+========================+ * | 7:2 | Reserved. Set to 0. | * +----------------+------------------------+ * | | Status. Only used in | * | | response packet. | * | | Ignored in request. | * | 1 | | * | | 1 = Success | * | | 0 = Failure | * +----------------+------------------------+ * | 0 | 0 = Read operation | * | | 1 = Write operation | * +----------------+------------------------+ * */ #define NIOS_PKT_8x64_MAGIC ((uint8_t) 'D') /* Request packet indices */ #define NIOS_PKT_8x64_IDX_MAGIC 0 #define NIOS_PKT_8x64_IDX_TARGET_ID 1 #define NIOS_PKT_8x64_IDX_FLAGS 2 #define NIOS_PKT_8x64_IDX_RESV1 3 #define NIOS_PKT_8x64_IDX_ADDR 4 #define NIOS_PKT_8x64_IDX_DATA 5 #define NIOS_PKT_8x64_IDX_RESV2 13 /* Target IDs */ #define NIOS_PKT_8x64_TARGET_TIMESTAMP 0x00 /* Timestamp readback (read only) */ /* IDs 0x80 through 0xff will not be assigned by Nuand. These are reserved * for user customizations */ #define NIOS_PKT_8x64_TARGET_USR1 0x80 #define NIOS_PKT_8x64_TARGET_USR128 0xff /* Flag bits */ #define NIOS_PKT_8x64_FLAG_WRITE (1 << 0) #define NIOS_PKT_8x64_FLAG_SUCCESS (1 << 1) /* Sub-addresses for timestamp target */ #define NIOS_PKT_8x64_TIMESTAMP_RX 0x00 #define NIOS_PKT_8x64_TIMESTAMP_TX 0x01 /* Pack the request buffer */ static inline void nios_pkt_8x64_pack(uint8_t *buf, uint8_t target, bool write, uint8_t addr, uint64_t data) { buf[NIOS_PKT_8x64_IDX_MAGIC] = NIOS_PKT_8x64_MAGIC; buf[NIOS_PKT_8x64_IDX_TARGET_ID] = target; if (write) { buf[NIOS_PKT_8x64_IDX_FLAGS] = NIOS_PKT_8x64_FLAG_WRITE; } else { buf[NIOS_PKT_8x64_IDX_FLAGS] = 0x00; } buf[NIOS_PKT_8x64_IDX_RESV1] = 0x00; buf[NIOS_PKT_8x64_IDX_ADDR] = addr; buf[NIOS_PKT_8x64_IDX_DATA + 0] = (data >> 0) & 0xff; buf[NIOS_PKT_8x64_IDX_DATA + 1] = (data >> 8) & 0xff; buf[NIOS_PKT_8x64_IDX_DATA + 2] = (data >> 16) & 0xff; buf[NIOS_PKT_8x64_IDX_DATA + 3] = (data >> 24) & 0xff; buf[NIOS_PKT_8x64_IDX_DATA + 4] = (data >> 32) & 0xff; buf[NIOS_PKT_8x64_IDX_DATA + 5] = (data >> 40) & 0xff; buf[NIOS_PKT_8x64_IDX_DATA + 6] = (data >> 48) & 0xff; buf[NIOS_PKT_8x64_IDX_DATA + 7] = (data >> 56) & 0xff; buf[NIOS_PKT_8x64_IDX_RESV2 + 0] = 0x00; buf[NIOS_PKT_8x64_IDX_RESV2 + 1] = 0x00; buf[NIOS_PKT_8x64_IDX_RESV2 + 2] = 0x00; } /* Unpack the request buffer */ static inline void nios_pkt_8x64_unpack(const uint8_t *buf, uint8_t *target, bool *write, uint8_t *addr, uint64_t *data) { if (target != NULL) { *target = buf[NIOS_PKT_8x64_IDX_TARGET_ID]; } if (write != NULL) { *write = (buf[NIOS_PKT_8x64_IDX_FLAGS] & NIOS_PKT_8x64_FLAG_WRITE) != 0; } if (addr != NULL) { *addr = buf[NIOS_PKT_8x64_IDX_ADDR]; } if (data != NULL) { *data = ((uint64_t) buf[NIOS_PKT_8x64_IDX_DATA + 0] << 0) | ((uint64_t) buf[NIOS_PKT_8x64_IDX_DATA + 1] << 8) | ((uint64_t) buf[NIOS_PKT_8x64_IDX_DATA + 2] << 16) | ((uint64_t) buf[NIOS_PKT_8x64_IDX_DATA + 3] << 24) | ((uint64_t) buf[NIOS_PKT_8x64_IDX_DATA + 4] << 32) | ((uint64_t) buf[NIOS_PKT_8x64_IDX_DATA + 5] << 40) | ((uint64_t) buf[NIOS_PKT_8x64_IDX_DATA + 6] << 48) | ((uint64_t) buf[NIOS_PKT_8x64_IDX_DATA + 7] << 56); } } /* Pack the response buffer */ static inline void nios_pkt_8x64_resp_pack(uint8_t *buf, uint8_t target, bool write, uint8_t addr, uint64_t data, bool success) { nios_pkt_8x64_pack(buf, target, write, addr, data); if (success) { buf[NIOS_PKT_8x64_IDX_FLAGS] |= NIOS_PKT_8x64_FLAG_SUCCESS; } } /* Unpack the response buffer */ static inline void nios_pkt_8x64_resp_unpack(const uint8_t *buf, uint8_t *target, bool *write, uint8_t *addr, uint64_t *data, bool *success) { nios_pkt_8x64_unpack(buf, target, write, addr, data); if ((buf[NIOS_PKT_8x64_IDX_FLAGS] & NIOS_PKT_8x64_FLAG_SUCCESS) != 0) { *success = true; } else { *success = false; } } #endif bladeRF-2024.05/fpga_common/include/nios_pkt_8x8.h000066400000000000000000000166651457144405000216250ustar00rootroot00000000000000/* * Copyright (c) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef BLADERF_NIOS_PKT_8x8_H_ #define BLADERF_NIOS_PKT_8x8_H_ #include #include #include /* * This file defines the Host <-> FPGA (NIOS II) packet formats for accesses * to devices/blocks with 8-bit addresses and 8-bit data * * * Request * ---------------------- * * +================+=========================================================+ * | Byte offset | Description | * +================+=========================================================+ * | 0 | Magic Value | * +----------------+---------------------------------------------------------+ * | 1 | Target ID (Note 1) | * +----------------+---------------------------------------------------------+ * | 2 | Flags (Note 2) | * +----------------+---------------------------------------------------------+ * | 3 | Reserved. Set to 0x00. | * +----------------+---------------------------------------------------------+ * | 4 | 8-bit address | * +----------------+---------------------------------------------------------+ * | 5 | 8-bit data | * +----------------+---------------------------------------------------------+ * | 15:6 | Reserved. Set to 0. | * +----------------+---------------------------------------------------------+ * * * Response * ---------------------- * * The response packet contains the same information as the request. * A status flag will be set if the operation completed successfully. * * In the case of a read request, the data field will contain the read data, if * the read succeeded. * * (Note 1) * The "Target ID" refers to the peripheral, device, or block to access. * See the NIOS_PKT_8x8_TARGET_* values. * * (Note 2) * The flags are defined as follows: * * +================+========================+ * | Bit(s) | Value | * +================+========================+ * | 7:2 | Reserved. Set to 0. | * +----------------+------------------------+ * | | Status. Only used in | * | | response packet. | * | | Ignored in request. | * | 1 | | * | | 1 = Success | * | | 0 = Failure | * +----------------+------------------------+ * | 0 | 0 = Read operation | * | | 1 = Write operation | * +----------------+------------------------+ * */ #define NIOS_PKT_8x8_MAGIC ((uint8_t) 'A') /* Request packet indices */ #define NIOS_PKT_8x8_IDX_MAGIC 0 #define NIOS_PKT_8x8_IDX_TARGET_ID 1 #define NIOS_PKT_8x8_IDX_FLAGS 2 #define NIOS_PKT_8x8_IDX_RESV1 3 #define NIOS_PKT_8x8_IDX_ADDR 4 #define NIOS_PKT_8x8_IDX_DATA 5 #define NIOS_PKT_8x8_IDX_RESV2 6 /* Target IDs */ #define NIOS_PKT_8x8_TARGET_LMS6 0x00 /* LMS6002D register access */ #define NIOS_PKT_8x8_TARGET_SI5338 0x01 /* Si5338 register access */ #define NIOS_PKT_8x8_TARGET_VCTCXO_TAMER 0x02 /* VCTCXO Tamer control */ #define NIOS_PKT_8x8_TX_TRIGGER_CTL 0x03 /* TX trigger control */ #define NIOS_PKT_8x8_RX_TRIGGER_CTL 0x04 /* RX trigger control */ /* IDs 0x80 through 0xff will not be assigned by Nuand. These are reserved * for user customizations */ #define NIOS_PKT_8x8_TARGET_USR1 0x80 #define NIOS_PKT_8x8_TARGET_USR128 0xff /* Flag bits */ #define NIOS_PKT_8x8_FLAG_WRITE (1 << 0) #define NIOS_PKT_8x8_FLAG_SUCCESS (1 << 1) /* Pack the request buffer */ static inline void nios_pkt_8x8_pack(uint8_t *buf, uint8_t target, bool write, uint8_t addr, uint8_t data) { buf[NIOS_PKT_8x8_IDX_MAGIC] = NIOS_PKT_8x8_MAGIC; buf[NIOS_PKT_8x8_IDX_TARGET_ID] = target; if (write) { buf[NIOS_PKT_8x8_IDX_FLAGS] = NIOS_PKT_8x8_FLAG_WRITE; } else { buf[NIOS_PKT_8x8_IDX_FLAGS] = 0x00; } buf[NIOS_PKT_8x8_IDX_RESV1] = 0x00; buf[NIOS_PKT_8x8_IDX_ADDR] = addr; buf[NIOS_PKT_8x8_IDX_DATA] = data; buf[NIOS_PKT_8x8_IDX_RESV2 + 0] = 0x00; buf[NIOS_PKT_8x8_IDX_RESV2 + 1] = 0x00; buf[NIOS_PKT_8x8_IDX_RESV2 + 2] = 0x00; buf[NIOS_PKT_8x8_IDX_RESV2 + 3] = 0x00; buf[NIOS_PKT_8x8_IDX_RESV2 + 4] = 0x00; buf[NIOS_PKT_8x8_IDX_RESV2 + 5] = 0x00; buf[NIOS_PKT_8x8_IDX_RESV2 + 6] = 0x00; buf[NIOS_PKT_8x8_IDX_RESV2 + 7] = 0x00; buf[NIOS_PKT_8x8_IDX_RESV2 + 8] = 0x00; buf[NIOS_PKT_8x8_IDX_RESV2 + 9] = 0x00; } /* Unpack the request buffer */ static inline void nios_pkt_8x8_unpack(const uint8_t *buf, uint8_t *target, bool *write, uint8_t *addr, uint8_t *data) { if (target != NULL) { *target = buf[NIOS_PKT_8x8_IDX_TARGET_ID]; } if (write != NULL) { *write = (buf[NIOS_PKT_8x8_IDX_FLAGS] & NIOS_PKT_8x8_FLAG_WRITE) != 0; } if (addr != NULL) { *addr = buf[NIOS_PKT_8x8_IDX_ADDR]; } if (data != NULL) { *data = buf[NIOS_PKT_8x8_IDX_DATA]; } } /* Pack the response buffer */ static inline void nios_pkt_8x8_resp_pack(uint8_t *buf, uint8_t target, bool write, uint8_t addr, uint8_t data, bool success) { nios_pkt_8x8_pack(buf, target, write, addr, data); if (success) { buf[NIOS_PKT_8x8_IDX_FLAGS] |= NIOS_PKT_8x8_FLAG_SUCCESS; } } /* Unpack the response buffer */ static inline void nios_pkt_8x8_resp_unpack(const uint8_t *buf, uint8_t *target, bool *write, uint8_t *addr, uint8_t *data, bool *success) { nios_pkt_8x8_unpack(buf, target, write, addr, data); if ((buf[NIOS_PKT_8x8_IDX_FLAGS] & NIOS_PKT_8x8_FLAG_SUCCESS) != 0) { *success = true; } else { *success = false; } } #endif bladeRF-2024.05/fpga_common/include/nios_pkt_formats.h000066400000000000000000000026771457144405000226470ustar00rootroot00000000000000/* * Copyright (c) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef BLADERF_NIOS_PKT_FORMATS_H_ #define BLADERF_NIOS_PKT_FORMATS_H_ #include "nios_pkt_legacy.h" #include "nios_pkt_retune.h" #include "nios_pkt_retune2.h" #include "nios_pkt_8x8.h" #include "nios_pkt_8x16.h" #include "nios_pkt_8x32.h" #include "nios_pkt_8x64.h" #include "nios_pkt_32x32.h" #include "nios_pkt_16x64.h" #define NIOS_PKT_LEN 16 #endif bladeRF-2024.05/fpga_common/include/nios_pkt_legacy.h000066400000000000000000000204701457144405000224270ustar00rootroot00000000000000/* * Copyright (c) 2013-2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef BLADERF_NIOS_PKT_LEGACY_H_ #define BLADERF_NIOS_PKT_LEGACY_H_ /* This is the original packet format used to issue requests from the * host to the FPGA via the FX3 UART. * * This format remains supported for backwards compatibility, but should no * longer be added to. * * If you're looking to customize the FPGA, consider using * one of the "pkt_AxB" packet formats and handlers, or implementing a new * format and handler. * * Request * ---------------------- * * +================+=========================================================+ * | Byte offset | Description | * +================+=========================================================+ * | 0 | Magic Value | * +----------------+---------------------------------------------------------+ * | 1 | Configuration byte (Note 1) | * +----------------+---------------------------------------------------------+ * | 2 - 15 | Pairs of 8-bit addr, 8-bit data | * +----------------+---------------------------------------------------------+ * * * * Note 1: Configuration byte: * * +================+============================+ * | Bit(s) | Value | * +================+============================+ * | 7 | 1 = Read operation | * +----------------+----------------------------+ * | 6 | 1 = Write operation | * +----------------+----------------------------+ * | 5:4 | Device: | * | | 00 - Config PIO (Note 2) | * | | 01 - LMS register | * | | 10 - VCTCXO Trim DAC | * | | 11 - SI5338 register | * +----------------+----------------------------+ * | 3 | Unused | * +----------------+----------------------------+ * | 2:0 | Addr/Data pair count | * | | (Note 2) | * +----------------+----------------------------+ * * Note 2: Config PIO addresses * * The NIOS II core and modules in the FPGA's programmable fabric are connected * via parallel IO (PIO). See the NIOS_PKT_LEGACY_PIO_ADDR_* definitions * in this file contain a virtual "register map" for these modules. * * Note 3: "Count" field * * The original intent of this field was to allow multiple register * accesses to be requested at once. * * However, this feature was not leveraged by the host code for the LMS and * SI5338 accesses, so revised legacy packet handler only processes the * first addr/data pair. * * Readback of the time tamer values is the only case where this field * is set to a count greater than 1. * * Although config PIO values are larger than one byte, the host code * accessed these byte by byte through multiple requests. For example, * 4 accesses would be required to fully read/write the configuration PIO. * * The above inefficiency is the motivation behind adding packet handlers * that can read/write 32 or 64 bits in a single request (e.g., pkt_8x32, * pkt_8x64). * * * * Response * ---------------------- * * The response for the legacy packet is essentially just the device * echoing the request. * * On a read request, the number of requested items will be populated * in bytes 2:15. * * The remaining bytes, or all of bytes 2:15 on a write request, should * be regarded as "undefined" values and not used. * * +================+=========================================================+ * | Byte offset | Description | * +================+=========================================================+ * | 0 | Magic Value | * +----------------+---------------------------------------------------------+ * | 1 | Configuration byte | * +----------------+---------------------------------------------------------+ * | 2 - 15 | Pairs of 8-bit addr, 8-bit data | * +----------------+---------------------------------------------------------+ * */ #define NIOS_PKT_LEGACY_MAGIC 'N' #define NIOS_PKT_LEGACY_DEV_GPIO_ADDR 0 #define NIOS_PKT_LEGACY_DEV_RX_GAIN_ADDR 4 #define NIOS_PKT_LEGACY_DEV_RX_PHASE_ADDR 6 #define NIOS_PKT_LEGACY_DEV_TX_GAIN_ADDR 8 #define NIOS_PKT_LEGACY_DEV_TX_PHASE_ADDR 10 #define NIOS_PKT_LEGACY_DEV_FPGA_VERSION_ID 12 #define NIOS_PKT_LEGACY_MODE_CNT_MASK 0x7 #define NIOS_PKT_LEGACY_MODE_CNT_SHIFT 0 #define NIOS_PKT_LEGACY_MODE_DEV_MASK 0x30 #define NIOS_PKT_LEGACY_MODE_DEV_SHIFT 4 #define NIOS_PKT_LEGACY_DEV_CONFIG (0 << NIOS_PKT_LEGACY_MODE_DEV_SHIFT) #define NIOS_PKT_LEGACY_DEV_LMS (1 << NIOS_PKT_LEGACY_MODE_DEV_SHIFT) #define NIOS_PKT_LEGACY_DEV_VCTCXO (2 << NIOS_PKT_LEGACY_MODE_DEV_SHIFT) #define NIOS_PKT_LEGACY_DEV_SI5338 (3 << NIOS_PKT_LEGACY_MODE_DEV_SHIFT) #define NIOS_PKT_LEGACY_MODE_DIR_MASK 0xC0 #define NIOS_PKT_LEGACY_MODE_DIR_SHIFT 6 #define NIOS_PKT_LEGACY_MODE_DIR_READ (2 << NIOS_PKT_LEGACY_MODE_DIR_SHIFT) #define NIOS_PKT_LEGACY_MODE_DIR_WRITE (1 << NIOS_PKT_LEGACY_MODE_DIR_SHIFT) /* PIO address space */ /* * 32-bit Device control register. * * This is register accessed via the libbladeRF functions, * bladerf_config_gpio_write() and bladerf_config_gpio_read(). */ #define NIOS_PKT_LEGACY_PIO_ADDR_CONTROL 0 #define NIOS_PKT_LEGACY_PIO_LEN_CONTROL 4 /* * IQ Correction: 16-bit RX Gain value */ #define NIOS_PKT_LEGACY_PIO_ADDR_IQ_RX_GAIN 4 #define NIOS_PKT_LEGACY_PIO_LEN_IQ_RX_GAIN 2 /* * IQ Correction: 16-bit RX Phase value */ #define NIOS_PKT_LEGACY_PIO_ADDR_IQ_RX_PHASE 6 #define NIOS_PKT_LEGACY_PIO_LEN_IQ_RX_PHASE 2 /* * IQ Correction: 16-bit TX Gain value */ #define NIOS_PKT_LEGACY_PIO_ADDR_IQ_TX_GAIN 8 #define NIOS_PKT_LEGACY_PIO_LEN_IQ_TX_GAIN 2 /* * IQ Correction: 16-bit TX Phase value */ #define NIOS_PKT_LEGACY_PIO_ADDR_IQ_TX_PHASE 10 #define NIOS_PKT_LEGACY_PIO_LEN_IQ_TX_PHASE 2 /* * 32-bit FPGA Version (read-only) */ #define NIOS_PKT_LEGACY_PIO_ADDR_FPGA_VERSION 12 #define NIOS_PKT_LEGACY_PIO_LEN_FPGA_VERSION 4 /* * 64-bit RX timestamp */ #define NIOS_PKT_LEGACY_PIO_ADDR_RX_TIMESTAMP 16 #define NIOS_PKT_LEGACY_PIO_LEN_RX_TIMESTAMP 8 /* * 64-bit TX timestamp */ #define NIOS_PKT_LEGACY_PIO_ADDR_TX_TIMESTAMP 24 #define NIOS_PKT_LEGACY_PIO_LEN_TX_TIMESTAMP 8 /* * VCTCXO Trim DAC value */ #define NIOS_PKT_LEGACY_PIO_ADDR_VCTCXO 34 #define NIOS_PKT_LEGACY_PIO_LEN_VCTCXO 2 /* * XB-200 ADF4351 Synthesizer */ #define NIOS_PKT_LEGACY_PIO_ADDR_XB200_SYNTH 36 #define NIOS_PKT_LEGACY_PIO_LEN_XB200_SYNTH 4 /* * Expansion IO */ #define NIOS_PKT_LEGACY_PIO_ADDR_EXP 40 #define NIOS_PKT_LEGACY_PIO_LEN_EXP 4 /* * Expansion IO Direction */ #define NIOS_PKT_LEGACY_PIO_ADDR_EXP_DIR 44 #define NIOS_PKT_LEGACY_PIO_LEN_EXP_DIR 4 struct uart_cmd { unsigned char addr; unsigned char data; }; #endif bladeRF-2024.05/fpga_common/include/nios_pkt_retune.h000066400000000000000000000340361457144405000224700ustar00rootroot00000000000000/* * Copyright (c) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef BLADERF_NIOS_PKT_RETUNE_H_ #define BLADERF_NIOS_PKT_RETUNE_H_ #ifndef BLADERF_NIOS_BUILD # include #else # include "libbladeRF_nios_compat.h" #endif #include /* Specify this value instead of a timestamp to clear the retune queue */ #define NIOS_PKT_RETUNE_CLEAR_QUEUE ((uint64_t) -1) /* This file defines the Host <-> FPGA (NIOS II) packet formats for * retune messages. This packet is formatted, as follows. All values are * little-endian. * * Request * ---------------------- * * +================+=========================================================+ * | Byte offset | Description | * +================+=========================================================+ * | 0 | Magic Value | * +----------------+---------------------------------------------------------+ * | 1 | 64-bit timestamp denoting when to retune. (Note 1) | * +----------------+---------------------------------------------------------+ * | 9 | 32-bit LMS6002D n_int & n_frac register values (Note 2) | * +----------------+---------------------------------------------------------+ * | 13 | RX/TX bit, FREQSEL LMS6002D reg value (Note 3) | * +----------------+---------------------------------------------------------+ * | 14 | Bit 7: Band-selection (Note 4) | * | | Bit 6: 1=Quick tune, 0=Normal tune | * | | Bits [5:0] VCOCAP[5:0] Hint | * +----------------+---------------------------------------------------------+ * | 15 | 8-bit reserved word. Should be set to 0x00. | * +----------------+---------------------------------------------------------+ * * (Note 1) Special Timestamp Values: * * Tune "Now": 0x0000000000000000 * Clear Retune Queue: 0xffffffffffffffff * * When the "Clear Retune Queue" value is used, all of the other tuning * parameters are ignored. * * (Note 2) Packed as follows: * * +================+=======================+ * | Byte offset | (MSB) Value (LSB)| * +================+=======================+ * | 0 | NINT[8:1] | * +----------------+-----------------------+ * | 1 | NINT[0], NFRAC[22:16] | * +----------------+-----------------------+ * | 2 | NFRAC[15:8] | * +----------------+-----------------------+ * | 3 | NFRAC[7:0] | * +----------------+-----------------------+ * * (Note 3) Packed as follows: * * +================+=======================+ * | Bit(s) | Value | * +================+=======================+ * | 7 | TX | * +----------------+-----------------------+ * | 6 | RX | * +----------------+-----------------------+ * | [5:0] | FREQSEL | * +----------------+-----------------------+ * * (Notes 4) Band-selection bit = 1 implies "Low band". 0 = "High band" */ #define NIOS_PKT_RETUNE_IDX_MAGIC 0 #define NIOS_PKT_RETUNE_IDX_TIME 1 #define NIOS_PKT_RETUNE_IDX_INTFRAC 9 #define NIOS_PKT_RETUNE_IDX_FREQSEL 13 #define NIOS_PKT_RETUNE_IDX_BANDSEL 14 #define NIOS_PKT_RETUNE_IDX_RESV 15 #define NIOS_PKT_RETUNE_MAGIC 'T' #define FLAG_QUICK_TUNE (1 << 6) #define FLAG_RX (1 << 6) #define FLAG_TX (1 << 7) #define FLAG_LOW_BAND (1 << 7) /* Denotes no tune word is supplied. */ #define NIOS_PKT_RETUNE_NO_HINT 0xff /* Denotes that the retune should not be scheduled - it should occur "now" */ #define NIOS_PKT_RETUNE_NOW ((uint64_t) 0x00) #define PACK_TXRX_FREQSEL(module_, freqsel_) \ (freqsel_ & 0x3f) /* Pack the retune request buffer with the provided parameters */ static inline void nios_pkt_retune_pack(uint8_t *buf, bladerf_module module, uint64_t timestamp, uint16_t nint, uint32_t nfrac, uint8_t freqsel, uint8_t vcocap, bool low_band, uint8_t xb_gpio, bool quick_tune) { buf[NIOS_PKT_RETUNE_IDX_MAGIC] = NIOS_PKT_RETUNE_MAGIC; buf[NIOS_PKT_RETUNE_IDX_TIME + 0] = timestamp & 0xff; buf[NIOS_PKT_RETUNE_IDX_TIME + 1] = (timestamp >> 8) & 0xff; buf[NIOS_PKT_RETUNE_IDX_TIME + 2] = (timestamp >> 16) & 0xff; buf[NIOS_PKT_RETUNE_IDX_TIME + 3] = (timestamp >> 24) & 0xff; buf[NIOS_PKT_RETUNE_IDX_TIME + 4] = (timestamp >> 32) & 0xff; buf[NIOS_PKT_RETUNE_IDX_TIME + 5] = (timestamp >> 40) & 0xff; buf[NIOS_PKT_RETUNE_IDX_TIME + 6] = (timestamp >> 48) & 0xff; buf[NIOS_PKT_RETUNE_IDX_TIME + 7] = (timestamp >> 56) & 0xff; buf[NIOS_PKT_RETUNE_IDX_INTFRAC + 0] = (nint >> 1) & 0xff; buf[NIOS_PKT_RETUNE_IDX_INTFRAC + 1] = (nint & 0x1) << 7; buf[NIOS_PKT_RETUNE_IDX_INTFRAC + 1] |= ((nfrac >> 16) & 0x7f); buf[NIOS_PKT_RETUNE_IDX_INTFRAC + 2] = (nfrac >> 8) & 0xff; buf[NIOS_PKT_RETUNE_IDX_INTFRAC + 3] = nfrac & 0xff; buf[NIOS_PKT_RETUNE_IDX_FREQSEL] = freqsel & 0xff; switch (module) { case BLADERF_MODULE_TX: buf[NIOS_PKT_RETUNE_IDX_FREQSEL] |= FLAG_TX; break; case BLADERF_MODULE_RX: buf[NIOS_PKT_RETUNE_IDX_FREQSEL] |= FLAG_RX; break; default: /* Erroneous case - should not occur */ break; } if (low_band) { buf[NIOS_PKT_RETUNE_IDX_BANDSEL] = FLAG_LOW_BAND; } else { buf[NIOS_PKT_RETUNE_IDX_BANDSEL] = 0x00; } if (quick_tune) { buf[NIOS_PKT_RETUNE_IDX_BANDSEL] |= FLAG_QUICK_TUNE; } buf[NIOS_PKT_RETUNE_IDX_BANDSEL] |= vcocap; buf[NIOS_PKT_RETUNE_IDX_RESV] = xb_gpio; } /* Unpack a retune request */ static inline void nios_pkt_retune_unpack(const uint8_t *buf, bladerf_module *module, uint64_t *timestamp, uint16_t *nint, uint32_t *nfrac, uint8_t *freqsel, uint8_t *vcocap, bool *low_band, uint8_t *xb_gpio, bool *quick_tune) { *timestamp = ( ((uint64_t) buf[NIOS_PKT_RETUNE_IDX_TIME + 0]) << 0); *timestamp |= ( ((uint64_t) buf[NIOS_PKT_RETUNE_IDX_TIME + 1]) << 8); *timestamp |= ( ((uint64_t) buf[NIOS_PKT_RETUNE_IDX_TIME + 2]) << 16); *timestamp |= ( ((uint64_t) buf[NIOS_PKT_RETUNE_IDX_TIME + 3]) << 24); *timestamp |= ( ((uint64_t) buf[NIOS_PKT_RETUNE_IDX_TIME + 4]) << 32); *timestamp |= ( ((uint64_t) buf[NIOS_PKT_RETUNE_IDX_TIME + 5]) << 40); *timestamp |= ( ((uint64_t) buf[NIOS_PKT_RETUNE_IDX_TIME + 6]) << 48); *timestamp |= ( ((uint64_t) buf[NIOS_PKT_RETUNE_IDX_TIME + 7]) << 56); *nint = buf[NIOS_PKT_RETUNE_IDX_INTFRAC + 0] << 1; *nint |= buf[NIOS_PKT_RETUNE_IDX_INTFRAC + 1] >> 7; *nfrac = (buf[NIOS_PKT_RETUNE_IDX_INTFRAC + 1] & 0x7f) << 16; *nfrac |= buf[NIOS_PKT_RETUNE_IDX_INTFRAC + 2] << 8; *nfrac |= buf[NIOS_PKT_RETUNE_IDX_INTFRAC + 3]; *freqsel = buf[NIOS_PKT_RETUNE_IDX_FREQSEL] & 0x3f; *module = -1; if (buf[NIOS_PKT_RETUNE_IDX_FREQSEL] & FLAG_TX) { *module = BLADERF_MODULE_TX; } else if (buf[NIOS_PKT_RETUNE_IDX_FREQSEL] & FLAG_RX) { *module = BLADERF_MODULE_RX; } *low_band = (buf[NIOS_PKT_RETUNE_IDX_BANDSEL] & FLAG_LOW_BAND) != 0; *quick_tune = (buf[NIOS_PKT_RETUNE_IDX_BANDSEL] & FLAG_QUICK_TUNE) != 0; *vcocap = buf[NIOS_PKT_RETUNE_IDX_BANDSEL] & 0x3f; *xb_gpio = buf[NIOS_PKT_RETUNE_IDX_RESV]; } /* * Response * ---------------------- * * +================+=========================================================+ * | Byte offset | Description | * +================+=========================================================+ * | 0 | Magic Value | * +----------------+---------------------------------------------------------+ * | 1 | 64-bit duration denoting how long the operation took to | * | | complete, in units of timestamp ticks. (Note 1) | * +----------------+---------------------------------------------------------+ * | 9 | Bits [7:6] Reserved, set to 0. | * | | Bits [5:0] VCOCAP value used. (Note 2) | * +----------------+---------------------------------------------------------+ * | 10 | Status Flags (Note 3) | * +----------------+---------------------------------------------------------+ * | 11-15 | Reserved. All bits set to 0. | * +----------------+---------------------------------------------------------+ * * (Note 1) This value will be zero if timestamps are not running for the * associated module. * * (Note 2) This field's value should be ignored when reading a response for * a request to clear the retune queue. * * (Note 3) Description of Status Flags: * * flags[0]: 1 = Timestamp and VCOCAP are valid. This is only the case for * "Tune NOW" requests. It is not possible to return this * information for scheduled retunes, as the event generally * does not occur before the response is set. * * 0 = This was a scheduled retune. Timestamp and VCOCAP Fields * should be ignored. * * * flags[1]: 1 = Operation completed successfully. * 0 = Operation failed. * * For "Tune NOW" requests, a failure may occur as the result * of the tuning algorithm failing to occur, and such other * unexpected failurs. * * The scheduled tune request will failure if the retune queue * is full. * * flags[7:2] Reserved. Set to 0. */ #define NIOS_PKT_RETUNERESP_IDX_MAGIC 0 #define NIOS_PKT_RETUNERESP_IDX_TIME 1 #define NIOS_PKT_RETUNERESP_IDX_VCOCAP 9 #define NIOS_PKT_RETUNERESP_IDX_FLAGS 10 #define NIOS_PKT_RETUNERESP_IDX_RESV 11 #define NIOS_PKT_RETUNERESP_FLAG_TSVTUNE_VALID (1 << 0) #define NIOS_PKT_RETUNERESP_FLAG_SUCCESS (1 << 1) static inline void nios_pkt_retune_resp_pack(uint8_t *buf, uint64_t duration, uint8_t vcocap, uint8_t flags) { buf[NIOS_PKT_RETUNERESP_IDX_MAGIC] = NIOS_PKT_RETUNE_MAGIC; buf[NIOS_PKT_RETUNERESP_IDX_TIME + 0] = duration & 0xff; buf[NIOS_PKT_RETUNERESP_IDX_TIME + 1] = (duration >> 8) & 0xff; buf[NIOS_PKT_RETUNERESP_IDX_TIME + 2] = (duration >> 16) & 0xff; buf[NIOS_PKT_RETUNERESP_IDX_TIME + 3] = (duration >> 24) & 0xff; buf[NIOS_PKT_RETUNERESP_IDX_TIME + 4] = (duration >> 32) & 0xff; buf[NIOS_PKT_RETUNERESP_IDX_TIME + 5] = (duration >> 40) & 0xff; buf[NIOS_PKT_RETUNERESP_IDX_TIME + 6] = (duration >> 48) & 0xff; buf[NIOS_PKT_RETUNERESP_IDX_TIME + 7] = (duration >> 56) & 0xff; buf[NIOS_PKT_RETUNERESP_IDX_VCOCAP] = vcocap; buf[NIOS_PKT_RETUNERESP_IDX_FLAGS] = flags; buf[NIOS_PKT_RETUNERESP_IDX_RESV + 0] = 0x00; buf[NIOS_PKT_RETUNERESP_IDX_RESV + 1] = 0x00; buf[NIOS_PKT_RETUNERESP_IDX_RESV + 2] = 0x00; buf[NIOS_PKT_RETUNERESP_IDX_RESV + 3] = 0x00; buf[NIOS_PKT_RETUNERESP_IDX_RESV + 4] = 0x00; } static inline void nios_pkt_retune_resp_unpack(const uint8_t *buf, uint64_t *duration, uint8_t *vcocap, uint8_t *flags) { *duration = buf[NIOS_PKT_RETUNERESP_IDX_TIME + 0]; *duration |= ((uint64_t) buf[NIOS_PKT_RETUNERESP_IDX_TIME + 1]) << 8; *duration |= ((uint64_t) buf[NIOS_PKT_RETUNERESP_IDX_TIME + 2]) << 16; *duration |= ((uint64_t) buf[NIOS_PKT_RETUNERESP_IDX_TIME + 3]) << 24; *duration |= ((uint64_t) buf[NIOS_PKT_RETUNERESP_IDX_TIME + 4]) << 32; *duration |= ((uint64_t) buf[NIOS_PKT_RETUNERESP_IDX_TIME + 5]) << 40; *duration |= ((uint64_t) buf[NIOS_PKT_RETUNERESP_IDX_TIME + 6]) << 48; *duration |= ((uint64_t) buf[NIOS_PKT_RETUNERESP_IDX_TIME + 7]) << 56; *vcocap = buf[NIOS_PKT_RETUNERESP_IDX_VCOCAP]; *flags = buf[NIOS_PKT_RETUNERESP_IDX_FLAGS]; } #endif bladeRF-2024.05/fpga_common/include/nios_pkt_retune2.h000066400000000000000000000304221457144405000225450ustar00rootroot00000000000000/* * Copyright (c) 2018 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef BLADERF_NIOS_PKT_RETUNE2_H_ #define BLADERF_NIOS_PKT_RETUNE2_H_ #ifndef BLADERF_NIOS_BUILD # include #else # include "libbladeRF_nios_compat.h" #endif #include /* This file defines the Host <-> FPGA (NIOS II) packet formats for * retune2 messages. This packet is formatted, as follows. All values are * little-endian. * * Request * ---------------------- * * +================+=========================================================+ * | Byte offset | Description | * +================+=========================================================+ * | 0 | Magic Value | * +----------------+---------------------------------------------------------+ * | 1 | 64-bit timestamp denoting when to retune. (Note 1) | * +----------------+---------------------------------------------------------+ * | 9 | 16-bit Nios fast lock profile number to load (Note 2) | * +----------------+---------------------------------------------------------+ * | 11 | 8-bit RFFE fast lock profile slot to use | * +----------------+---------------------------------------------------------+ * | 12 | Bit 7: RX bit (set if this is an RX profile | * | | Bits 6: TX output port selection | * | | Bits [5:0]: RX input port selection | * +----------------+---------------------------------------------------------+ * | 13 | Bits [7:6]: External TX2 SPDT switch setting | * | | Bits [5:4]: External TX1 SPDT switch setting | * | | Bits [3:2]: External RX2 SPDT switch setting | * | | Bits [1:0]: External RX1 SPDT switch setting | * +----------------+---------------------------------------------------------+ * | 14-15 | 8-bit reserved words. Should be set to 0x00. | * +----------------+---------------------------------------------------------+ * * (Note 1) Special Timestamp Values: * * Tune "Now": 0x0000000000000000 * Clear Retune Queue: 0xffffffffffffffff * * When the "Clear Retune Queue" value is used, all of the other tuning * parameters are ignored. * * (Note 2) Packed as follows: * * +================+=======================+ * | Byte offset | (MSB) Value (LSB)| * +================+=======================+ * | 0 | NIOS_PROFILE[7:0] | * +----------------+-----------------------+ * | 1 | NIOS_PROFILE[15:8] | * +----------------+-----------------------+ * */ #define NIOS_PKT_RETUNE2_IDX_MAGIC 0 #define NIOS_PKT_RETUNE2_IDX_TIME 1 #define NIOS_PKT_RETUNE2_IDX_NIOS_PROFILE 9 #define NIOS_PKT_RETUNE2_IDX_RFFE_PROFILE 11 #define NIOS_PKT_RETUNE2_IDX_RFFE_PORT 12 #define NIOS_PKT_RETUNE2_IDX_SPDT 13 #define NIOS_PKT_RETUNE2_IDX_RESV 14 #define NIOS_PKT_RETUNE2_MAGIC 'U' /* Specify this value instead of a timestamp to clear the retune2 queue */ #define NIOS_PKT_RETUNE2_CLEAR_QUEUE ((uint64_t) -1) /* Denotes that the retune2 should not be scheduled - it should occur "now" */ #define NIOS_PKT_RETUNE2_NOW ((uint64_t) 0x00) /* The IS_RX bit embedded in the 'port' parameter of the retune2 packet */ #define NIOS_PKT_RETUNE2_PORT_IS_RX_MASK (0x1 << 7) /* Pack the retune2 request buffer with the provided parameters */ static inline void nios_pkt_retune2_pack(uint8_t *buf, bladerf_module module, uint64_t timestamp, uint16_t nios_profile, uint8_t rffe_profile, uint8_t port, uint8_t spdt) { uint8_t pkt_port; /* Clear the IS_RX bit of the port parameter */ pkt_port = (port & (~NIOS_PKT_RETUNE2_PORT_IS_RX_MASK)); /* Set the IS_RX bit (if needed) */ pkt_port = (pkt_port | (BLADERF_CHANNEL_IS_TX(module) ? 0x0 : NIOS_PKT_RETUNE2_PORT_IS_RX_MASK)) & 0xff; buf[NIOS_PKT_RETUNE2_IDX_MAGIC] = NIOS_PKT_RETUNE2_MAGIC; buf[NIOS_PKT_RETUNE2_IDX_TIME + 0] = (timestamp >> 0) & 0xff; buf[NIOS_PKT_RETUNE2_IDX_TIME + 1] = (timestamp >> 8) & 0xff; buf[NIOS_PKT_RETUNE2_IDX_TIME + 2] = (timestamp >> 16) & 0xff; buf[NIOS_PKT_RETUNE2_IDX_TIME + 3] = (timestamp >> 24) & 0xff; buf[NIOS_PKT_RETUNE2_IDX_TIME + 4] = (timestamp >> 32) & 0xff; buf[NIOS_PKT_RETUNE2_IDX_TIME + 5] = (timestamp >> 40) & 0xff; buf[NIOS_PKT_RETUNE2_IDX_TIME + 6] = (timestamp >> 48) & 0xff; buf[NIOS_PKT_RETUNE2_IDX_TIME + 7] = (timestamp >> 56) & 0xff; buf[NIOS_PKT_RETUNE2_IDX_NIOS_PROFILE + 0] = (nios_profile >> 0) & 0xff; buf[NIOS_PKT_RETUNE2_IDX_NIOS_PROFILE + 1] = (nios_profile >> 8) & 0xff; buf[NIOS_PKT_RETUNE2_IDX_RFFE_PROFILE] = rffe_profile & 0xff; buf[NIOS_PKT_RETUNE2_IDX_RFFE_PORT] = pkt_port; buf[NIOS_PKT_RETUNE2_IDX_SPDT] = spdt & 0xff; buf[NIOS_PKT_RETUNE2_IDX_RESV + 0] = 0x00; buf[NIOS_PKT_RETUNE2_IDX_RESV + 1] = 0x00; } /* Unpack a retune request */ static inline void nios_pkt_retune2_unpack(const uint8_t *buf, bladerf_module *module, uint64_t *timestamp, uint16_t *nios_profile, uint8_t *rffe_profile, uint8_t *port, uint8_t *spdt) { *timestamp = ( ((uint64_t)buf[NIOS_PKT_RETUNE2_IDX_TIME + 0]) << 0 ); *timestamp |= ( ((uint64_t)buf[NIOS_PKT_RETUNE2_IDX_TIME + 1]) << 8 ); *timestamp |= ( ((uint64_t)buf[NIOS_PKT_RETUNE2_IDX_TIME + 2]) << 16 ); *timestamp |= ( ((uint64_t)buf[NIOS_PKT_RETUNE2_IDX_TIME + 3]) << 24 ); *timestamp |= ( ((uint64_t)buf[NIOS_PKT_RETUNE2_IDX_TIME + 4]) << 32 ); *timestamp |= ( ((uint64_t)buf[NIOS_PKT_RETUNE2_IDX_TIME + 5]) << 40 ); *timestamp |= ( ((uint64_t)buf[NIOS_PKT_RETUNE2_IDX_TIME + 6]) << 48 ); *timestamp |= ( ((uint64_t)buf[NIOS_PKT_RETUNE2_IDX_TIME + 7]) << 56 ); *nios_profile = ( ((uint16_t)buf[NIOS_PKT_RETUNE2_IDX_NIOS_PROFILE + 0]) << 0 ); *nios_profile |= ( ((uint16_t)buf[NIOS_PKT_RETUNE2_IDX_NIOS_PROFILE + 1]) << 8 ); *rffe_profile = buf[NIOS_PKT_RETUNE2_IDX_RFFE_PROFILE]; *port = buf[NIOS_PKT_RETUNE2_IDX_RFFE_PORT]; *spdt = buf[NIOS_PKT_RETUNE2_IDX_SPDT]; *module = ( (buf[NIOS_PKT_RETUNE2_IDX_RFFE_PORT] & NIOS_PKT_RETUNE2_PORT_IS_RX_MASK) ? BLADERF_MODULE_RX : BLADERF_MODULE_TX ); } /* * Response * ---------------------- * * +================+=========================================================+ * | Byte offset | Description | * +================+=========================================================+ * | 0 | Magic Value | * +----------------+---------------------------------------------------------+ * | 1 | 64-bit duration denoting how long the operation took to | * | | complete, in units of timestamp ticks. (Note 1) | * +----------------+---------------------------------------------------------+ * | 9 | Status Flags (Note 2) | * +----------------+---------------------------------------------------------+ * | 10-15 | Reserved. All bits set to 0. | * +----------------+---------------------------------------------------------+ * * (Note 1) This value will be zero if timestamps are not running for the * associated module. * * (Note 2) Description of Status Flags: * * flags[0]: 1 = Timestamp is valid. This is only the case for "Tune NOW" * requests. It is not possible to return this information * for scheduled retunes, as the event generally does not * occur before the response is set. * * 0 = This was a scheduled retune. Timestamp fields should be * ignored. * * flags[1]: 1 = Operation completed successfully. * 0 = Operation failed. * * For "Tune NOW" requests, a failure may occur as the result * of the tuning algorithm failing to occur, and such other * unexpected failurs. * * The scheduled tune request will failure if the retune queue * is full. * * flags[7:2] Reserved. Set to 0. */ #define NIOS_PKT_RETUNE2_RESP_IDX_MAGIC 0 #define NIOS_PKT_RETUNE2_RESP_IDX_TIME 1 #define NIOS_PKT_RETUNE2_RESP_IDX_FLAGS 9 #define NIOS_PKT_RETUNE2_RESP_IDX_RESV 10 #define NIOS_PKT_RETUNE2_RESP_FLAG_TSVTUNE_VALID (1 << 0) #define NIOS_PKT_RETUNE2_RESP_FLAG_SUCCESS (1 << 1) static inline void nios_pkt_retune2_resp_pack(uint8_t *buf, uint64_t duration, uint8_t flags) { buf[NIOS_PKT_RETUNE2_RESP_IDX_MAGIC] = NIOS_PKT_RETUNE2_MAGIC; buf[NIOS_PKT_RETUNE2_RESP_IDX_TIME + 0] = duration & 0xff; buf[NIOS_PKT_RETUNE2_RESP_IDX_TIME + 1] = (duration >> 8) & 0xff; buf[NIOS_PKT_RETUNE2_RESP_IDX_TIME + 2] = (duration >> 16) & 0xff; buf[NIOS_PKT_RETUNE2_RESP_IDX_TIME + 3] = (duration >> 24) & 0xff; buf[NIOS_PKT_RETUNE2_RESP_IDX_TIME + 4] = (duration >> 32) & 0xff; buf[NIOS_PKT_RETUNE2_RESP_IDX_TIME + 5] = (duration >> 40) & 0xff; buf[NIOS_PKT_RETUNE2_RESP_IDX_TIME + 6] = (duration >> 48) & 0xff; buf[NIOS_PKT_RETUNE2_RESP_IDX_TIME + 7] = (duration >> 56) & 0xff; buf[NIOS_PKT_RETUNE2_RESP_IDX_FLAGS] = flags; buf[NIOS_PKT_RETUNE2_RESP_IDX_RESV + 0] = 0x00; buf[NIOS_PKT_RETUNE2_RESP_IDX_RESV + 1] = 0x00; buf[NIOS_PKT_RETUNE2_RESP_IDX_RESV + 2] = 0x00; buf[NIOS_PKT_RETUNE2_RESP_IDX_RESV + 3] = 0x00; buf[NIOS_PKT_RETUNE2_RESP_IDX_RESV + 4] = 0x00; buf[NIOS_PKT_RETUNE2_RESP_IDX_RESV + 5] = 0x00; } static inline void nios_pkt_retune2_resp_unpack(const uint8_t *buf, uint64_t *duration, uint8_t *flags) { *duration = buf[NIOS_PKT_RETUNE2_RESP_IDX_TIME + 0]; *duration |= ((uint64_t) buf[NIOS_PKT_RETUNE2_RESP_IDX_TIME + 1]) << 8; *duration |= ((uint64_t) buf[NIOS_PKT_RETUNE2_RESP_IDX_TIME + 2]) << 16; *duration |= ((uint64_t) buf[NIOS_PKT_RETUNE2_RESP_IDX_TIME + 3]) << 24; *duration |= ((uint64_t) buf[NIOS_PKT_RETUNE2_RESP_IDX_TIME + 4]) << 32; *duration |= ((uint64_t) buf[NIOS_PKT_RETUNE2_RESP_IDX_TIME + 5]) << 40; *duration |= ((uint64_t) buf[NIOS_PKT_RETUNE2_RESP_IDX_TIME + 6]) << 48; *duration |= ((uint64_t) buf[NIOS_PKT_RETUNE2_RESP_IDX_TIME + 7]) << 56; *flags = buf[NIOS_PKT_RETUNE2_RESP_IDX_FLAGS]; } #endif bladeRF-2024.05/fpga_common/src/000077500000000000000000000000001457144405000162455ustar00rootroot00000000000000bladeRF-2024.05/fpga_common/src/ad936x_helpers.c000066400000000000000000000122361457144405000211550ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2018 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef BLADERF_NIOS_BUILD #include "devices.h" #endif // BLADERF_NIOS_BUILD /* Avoid building this in low-memory situations */ #if !defined(BLADERF_NIOS_BUILD) || defined(BLADERF_NIOS_LIBAD936X) #if !defined(BLADERF_NIOS_BUILD) && !defined(BLADERF_NIOS_PC_SIMULATION) #include "log.h" #endif #include "ad936x_helpers.h" #include "bladerf2_common.h" static bool tx_mute_state[2] = { false }; uint32_t txmute_get_cached(struct ad9361_rf_phy *phy, bladerf_channel ch) { switch (ch) { case BLADERF_CHANNEL_TX(0): return phy->tx1_atten_cached; case BLADERF_CHANNEL_TX(1): return phy->tx2_atten_cached; default: return 0; } } int txmute_set_cached(struct ad9361_rf_phy *phy, bladerf_channel ch, uint32_t atten) { switch (ch) { case BLADERF_CHANNEL_TX(0): phy->tx1_atten_cached = atten; return 0; case BLADERF_CHANNEL_TX(1): phy->tx2_atten_cached = atten; return 0; default: return BLADERF_ERR_INVAL; } } int txmute_get(struct ad9361_rf_phy *phy, bladerf_channel ch, bool *state) { int rfic_ch = (ch >> 1); *state = tx_mute_state[rfic_ch]; return 0; } int txmute_set(struct ad9361_rf_phy *phy, bladerf_channel ch, bool state) { int rfic_ch = (ch >> 1); uint32_t const MUTED_ATTEN = 89750; uint32_t atten, cached; int status; if (tx_mute_state[rfic_ch] == state) { // short circuit if there's no change return 0; } if (state) { // mute: save the existing value before muting uint32_t readval; status = ad9361_get_tx_attenuation(phy, rfic_ch, &readval); if (status < 0) { return errno_ad9361_to_bladerf(status); } cached = readval; atten = MUTED_ATTEN; } else { // unmute: restore the saved value cached = txmute_get_cached(phy, ch); atten = cached; } status = ad9361_set_tx_attenuation(phy, rfic_ch, atten); if (status < 0) { return errno_ad9361_to_bladerf(status); } status = txmute_set_cached(phy, ch, cached); if (status < 0) { return status; } tx_mute_state[rfic_ch] = state; return 0; } int set_ad9361_port_by_freq(struct ad9361_rf_phy *phy, bladerf_channel ch, bool enabled, bladerf_frequency freq) { struct band_port_map const *port_map = NULL; int status; /* Look up the port configuration for this frequency */ port_map = _get_band_port_map_by_freq(ch, enabled ? freq : 0); if (NULL == port_map) { return BLADERF_ERR_INVAL; } /* Set the AD9361 port accordingly */ if (BLADERF_CHANNEL_IS_TX(ch)) { status = ad9361_set_tx_rf_port_output(phy, port_map->rfic_port); } else { status = ad9361_set_rx_rf_port_input(phy, port_map->rfic_port); } return errno_ad9361_to_bladerf(status); } enum rf_gain_ctrl_mode gainmode_bladerf_to_ad9361(bladerf_gain_mode gainmode, bool *ok) { struct bladerf_rfic_gain_mode_map const *mode_map; size_t mode_map_len; size_t i; mode_map = bladerf2_rx_gain_mode_map; mode_map_len = ARRAY_SIZE(bladerf2_rx_gain_mode_map); if (NULL != ok) { *ok = false; } for (i = 0; i < mode_map_len; ++i) { if (mode_map[i].brf_mode == gainmode) { if (NULL != ok) { *ok = true; } return mode_map[i].rfic_mode; } } return 0; }; bladerf_gain_mode gainmode_ad9361_to_bladerf(enum rf_gain_ctrl_mode gainmode, bool *ok) { struct bladerf_rfic_gain_mode_map const *mode_map; size_t mode_map_len; size_t i; mode_map = bladerf2_rx_gain_mode_map; mode_map_len = ARRAY_SIZE(bladerf2_rx_gain_mode_map); if (NULL != ok) { *ok = false; } for (i = 0; i < mode_map_len; ++i) { if (mode_map[i].rfic_mode == gainmode) { if (NULL != ok) { *ok = true; } return mode_map[i].brf_mode; } } return 0; } #endif // !defined(BLADERF_NIOS_BUILD) || defined(BLADERF_NIOS_LIBAD936X) bladeRF-2024.05/fpga_common/src/ad936x_params.c000066400000000000000000002441451457144405000210040ustar00rootroot00000000000000#ifdef BLADERF_NIOS_BUILD #include "devices.h" #endif // BLADERF_NIOS_BUILD /* Avoid building this in low-memory situations */ #if !defined(BLADERF_NIOS_BUILD) || defined(BLADERF_NIOS_LIBAD936X) #include "ad9361_api.h" #include "platform.h" /** * Reference: * https://wiki.analog.com/resources/tools-software/linux-drivers/iio-transceiver/ad9361-customization * * N/A = not applicable due to other setting; changes may unmask these * DEFAULT = changed during device initialization */ // clang-format off AD9361_InitParam bladerf2_rfic_init_params = { /* Device selection */ ID_AD9361, // AD9361 RF Agile Transceiver // dev_sel /* Identification number */ 0, // Chip ID 0 // id_no /* Reference Clock */ 38400000UL, // RefClk = 38.4 MHz // reference_clk_rate /* Base Configuration */ 1, // use 2Rx2Tx mode // two_rx_two_tx_mode_enable *** adi,2rx-2tx-mode-enable 1, // N/A when two_rx_two_tx_mode_enable = 1 // one_rx_one_tx_mode_use_rx_num *** adi,1rx-1tx-mode-use-rx-num 1, // N/A when two_rx_two_tx_mode_enable = 1 // one_rx_one_tx_mode_use_tx_num *** adi,1rx-1tx-mode-use-tx-num 1, // use FDD mode // frequency_division_duplex_mode_enable *** adi,frequency-division-duplex-mode-enable 1, // use independent FDD mode // frequency_division_duplex_independent_mode_enable *** adi,frequency-division-duplex-independent-mode-enable 0, // N/A when frequency_division_duplex_mode_enable = 1 // tdd_use_dual_synth_mode_enable *** adi,tdd-use-dual-synth-mode-enable 0, // N/A when frequency_division_duplex_mode_enable = 1 // tdd_skip_vco_cal_enable *** adi,tdd-skip-vco-cal-enable 0, // TX fastlock delay = 0 ns // tx_fastlock_delay_ns *** adi,tx-fastlock-delay-ns 0, // RX fastlock delay = 0 ns // rx_fastlock_delay_ns *** adi,rx-fastlock-delay-ns 0, // RX fastlock pin control disabled // rx_fastlock_pincontrol_enable *** adi,rx-fastlock-pincontrol-enable 0, // TX fastlock pin control disabled // tx_fastlock_pincontrol_enable *** adi,tx-fastlock-pincontrol-enable 0, // use internal RX LO // external_rx_lo_enable *** adi,external-rx-lo-enable 0, // use internal TX LO // external_tx_lo_enable *** adi,external-tx-lo-enable 5, // apply new tracking word: on gain change, after exiting RX state // dc_offset_tracking_update_event_mask *** adi,dc-offset-tracking-update-event-mask 6, // atten value for DC tracking, RX LO > 4 GHz // dc_offset_attenuation_high_range *** adi,dc-offset-attenuation-high-range 5, // atten value for DC tracking, RX LO < 4 GHz // dc_offset_attenuation_low_range *** adi,dc-offset-attenuation-low-range 0x28, // loop gain for DC tracking, RX LO > 4 GHz // dc_offset_count_high_range *** adi,dc-offset-count-high-range 0x32, // loop gain for DC tracking, RX LO < 4 GHz // dc_offset_count_low_range *** adi,dc-offset-count-low-range 0, // use full gain table // split_gain_table_mode_enable *** adi,split-gain-table-mode-enable MAX_SYNTH_FREF, // f_ref window 80 MHz // trx_synthesizer_target_fref_overwrite_hz *** adi,trx-synthesizer-target-fref-overwrite-hz 0, // don't use improved RX QEC tracking // qec_tracking_slow_mode_enable *** adi,qec-tracking-slow-mode-enable /* ENSM Control */ 0, // use level mode on ENABLE and TXNRX pins // ensm_enable_pin_pulse_mode_enable *** adi,ensm-enable-pin-pulse-mode-enable 0, // use SPI writes for ENSM state, not ENABLE/TXNRX pins // ensm_enable_txnrx_control_enable *** adi,ensm-enable-txnrx-control-enable /* LO Control */ 2400000000UL, // DEFAULT // rx_synthesizer_frequency_hz *** adi,rx-synthesizer-frequency-hz 2400000000UL, // DEFAULT // tx_synthesizer_frequency_hz *** adi,tx-synthesizer-frequency-hz /* Rate & BW Control */ { 983040000, 245760000, 122880000, 61440000, 30720000, 30720000 }, // DEFAULT // uint32_t rx_path_clock_frequencies[6] *** adi,rx-path-clock-frequencies { 983040000, 122880000, 122880000, 61440000, 30720000, 30720000 }, // DEFAULT // uint32_t tx_path_clock_frequencies[6] *** adi,tx-path-clock-frequencies 18000000, // DEFAULT // rf_rx_bandwidth_hz *** adi,rf-rx-bandwidth-hz 18000000, // DEFAULT // rf_tx_bandwidth_hz *** adi,rf-tx-bandwidth-hz /* RF Port Control */ 0, // DEFAULT // rx_rf_port_input_select *** adi,rx-rf-port-input-select 0, // DEFAULT // tx_rf_port_input_select *** adi,tx-rf-port-input-select /* TX Attenuation Control */ 10000, // DEFAULT // tx_attenuation_mdB *** adi,tx-attenuation-mdB 0, // N/A when frequency_division_duplex_mode_enable = 1 // update_tx_gain_in_alert_enable *** adi,update-tx-gain-in-alert-enable /* Reference Clock Control */ 1, // Expect external clock into XTALN // xo_disable_use_ext_refclk_enable *** adi,xo-disable-use-ext-refclk-enable {3, 5920}, // ~0 ppm DCXO trim (N/A if ext clk) // dcxo_coarse_and_fine_tune[2] *** adi,dcxo-coarse-and-fine-tune CLKOUT_DISABLE, // disable clkout pin (see enum ad9361_clkout) // clk_output_mode_select *** adi,clk-output-mode-select /* Gain Control */ RF_GAIN_SLOWATTACK_AGC, // RX1 BLADERF_GAIN_DEFAULT = slow attack AGC // gc_rx1_mode *** adi,gc-rx1-mode RF_GAIN_SLOWATTACK_AGC, // RX2 BLADERF_GAIN_DEFAULT = slow attack AGC // gc_rx2_mode *** adi,gc-rx2-mode 58, // magic AGC setting, see AD9361 docs // gc_adc_large_overload_thresh *** adi,gc-adc-large-overload-thresh 4, // magic AGC setting, see AD9361 docs // gc_adc_ovr_sample_size *** adi,gc-adc-ovr-sample-size 47, // magic AGC setting, see AD9361 docs // gc_adc_small_overload_thresh *** adi,gc-adc-small-overload-thresh 8192, // magic AGC setting, see AD9361 docs // gc_dec_pow_measurement_duration *** adi,gc-dec-pow-measurement-duration 0, // magic AGC setting, see AD9361 docs // gc_dig_gain_enable *** adi,gc-dig-gain-enable 800, // magic AGC setting, see AD9361 docs // gc_lmt_overload_high_thresh *** adi,gc-lmt-overload-high-thresh 704, // magic AGC setting, see AD9361 docs // gc_lmt_overload_low_thresh *** adi,gc-lmt-overload-low-thresh 24, // magic AGC setting, see AD9361 docs // gc_low_power_thresh *** adi,gc-low-power-thresh 15, // magic AGC setting, see AD9361 docs // gc_max_dig_gain *** adi,gc-max-dig-gain /* Gain MGC Control */ 2, // N/A when mgc_rx(1,2)_ctrl_inp_enable = 0 // mgc_dec_gain_step *** adi,mgc-dec-gain-step 2, // N/A when mgc_rx(1,2)_ctrl_inp_enable = 0 // mgc_inc_gain_step *** adi,mgc-inc-gain-step 0, // don't use CTRL_IN for RX1 MGC stepping // mgc_rx1_ctrl_inp_enable *** adi,mgc-rx1-ctrl-inp-enable 0, // don't use CTRL_IN for RX2 MGC stepping // mgc_rx2_ctrl_inp_enable *** adi,mgc-rx2-ctrl-inp-enable 0, // N/A when mgc_rx(1,2)_ctrl_inp_enable = 0 // mgc_split_table_ctrl_inp_gain_mode *** adi,mgc-split-table-ctrl-inp-gain-mode /* Gain AGC Control */ 10, // magic AGC setting, see AD9361 docs // agc_adc_large_overload_exceed_counter *** adi,agc-adc-large-overload-exceed-counter 2, // magic AGC setting, see AD9361 docs // agc_adc_large_overload_inc_steps *** adi,agc-adc-large-overload-inc-steps 0, // magic AGC setting, see AD9361 docs // agc_adc_lmt_small_overload_prevent_gain_inc_enable *** adi,agc-adc-lmt-small-overload-prevent-gain-inc-enable 10, // magic AGC setting, see AD9361 docs // agc_adc_small_overload_exceed_counter *** adi,agc-adc-small-overload-exceed-counter 4, // magic AGC setting, see AD9361 docs // agc_dig_gain_step_size *** adi,agc-dig-gain-step-size 3, // magic AGC setting, see AD9361 docs // agc_dig_saturation_exceed_counter *** adi,agc-dig-saturation-exceed-counter 1000, // magic AGC setting, see AD9361 docs // agc_gain_update_interval_us *** adi,agc-gain-update-interval-us 0, // magic AGC setting, see AD9361 docs // agc_immed_gain_change_if_large_adc_overload_enable *** adi,agc-immed-gain-change-if-large-adc-overload-enable 0, // magic AGC setting, see AD9361 docs // agc_immed_gain_change_if_large_lmt_overload_enable *** adi,agc-immed-gain-change-if-large-lmt-overload-enable 10, // magic AGC setting, see AD9361 docs // agc_inner_thresh_high *** adi,agc-inner-thresh-high 1, // magic AGC setting, see AD9361 docs // agc_inner_thresh_high_dec_steps *** adi,agc-inner-thresh-high-dec-steps 12, // magic AGC setting, see AD9361 docs // agc_inner_thresh_low *** adi,agc-inner-thresh-low 1, // magic AGC setting, see AD9361 docs // agc_inner_thresh_low_inc_steps *** adi,agc-inner-thresh-low-inc-steps 10, // magic AGC setting, see AD9361 docs // agc_lmt_overload_large_exceed_counter *** adi,agc-lmt-overload-large-exceed-counter 2, // magic AGC setting, see AD9361 docs // agc_lmt_overload_large_inc_steps *** adi,agc-lmt-overload-large-inc-steps 10, // magic AGC setting, see AD9361 docs // agc_lmt_overload_small_exceed_counter *** adi,agc-lmt-overload-small-exceed-counter 5, // magic AGC setting, see AD9361 docs // agc_outer_thresh_high *** adi,agc-outer-thresh-high 2, // magic AGC setting, see AD9361 docs // agc_outer_thresh_high_dec_steps *** adi,agc-outer-thresh-high-dec-steps 18, // magic AGC setting, see AD9361 docs // agc_outer_thresh_low *** adi,agc-outer-thresh-low 2, // magic AGC setting, see AD9361 docs // agc_outer_thresh_low_inc_steps *** adi,agc-outer-thresh-low-inc-steps 1, // magic AGC setting, see AD9361 docs // agc_attack_delay_extra_margin_us; *** adi,agc-attack-delay-extra-margin-us 0, // magic AGC setting, see AD9361 docs // agc_sync_for_gain_counter_enable *** adi,agc-sync-for-gain-counter-enable /* Fast AGC */ 64, // magic AGC setting, see AD9361 docs // fagc_dec_pow_measuremnt_duration *** adi,fagc-dec-pow-measurement-duration 260, // magic AGC setting, see AD9361 docs // fagc_state_wait_time_ns *** adi,fagc-state-wait-time-ns /* Fast AGC - Low Power */ 0, // magic AGC setting, see AD9361 docs // fagc_allow_agc_gain_increase *** adi,fagc-allow-agc-gain-increase-enable 5, // magic AGC setting, see AD9361 docs // fagc_lp_thresh_increment_time *** adi,fagc-lp-thresh-increment-time 1, // magic AGC setting, see AD9361 docs // fagc_lp_thresh_increment_steps *** adi,fagc-lp-thresh-increment-steps /* Fast AGC - Lock Level */ 10, // magic AGC setting, see AD9361 docs // fagc_lock_level *** adi,fagc-lock-level 1, // magic AGC setting, see AD9361 docs // fagc_lock_level_lmt_gain_increase_en *** adi,fagc-lock-level-lmt-gain-increase-enable 5, // magic AGC setting, see AD9361 docs // fagc_lock_level_gain_increase_upper_limit *** adi,fagc-lock-level-gain-increase-upper-limit /* Fast AGC - Peak Detectors and Final Settling */ 1, // magic AGC setting, see AD9361 docs // fagc_lpf_final_settling_steps *** adi,fagc-lpf-final-settling-steps 1, // magic AGC setting, see AD9361 docs // fagc_lmt_final_settling_steps *** adi,fagc-lmt-final-settling-steps 3, // magic AGC setting, see AD9361 docs // fagc_final_overrange_count *** adi,fagc-final-overrange-count /* Fast AGC - Final Power Test */ 0, // magic AGC setting, see AD9361 docs // fagc_gain_increase_after_gain_lock_en *** adi,fagc-gain-increase-after-gain-lock-enable /* Fast AGC - Unlocking the Gain */ 0, // magic AGC setting, see AD9361 docs // fagc_gain_index_type_after_exit_rx_mode *** adi,fagc-gain-index-type-after-exit-rx-mode 1, // magic AGC setting, see AD9361 docs // fagc_use_last_lock_level_for_set_gain_en *** adi,fagc-use-last-lock-level-for-set-gain-enable 1, // magic AGC setting, see AD9361 docs // fagc_rst_gla_stronger_sig_thresh_exceeded_en *** adi,fagc-rst-gla-stronger-sig-thresh-exceeded-enable 5, // magic AGC setting, see AD9361 docs // fagc_optimized_gain_offset *** adi,fagc-optimized-gain-offset 10, // magic AGC setting, see AD9361 docs // fagc_rst_gla_stronger_sig_thresh_above_ll *** adi,fagc-rst-gla-stronger-sig-thresh-above-ll 1, // magic AGC setting, see AD9361 docs // fagc_rst_gla_engergy_lost_sig_thresh_exceeded_en *** adi,fagc-rst-gla-engergy-lost-sig-thresh-exceeded-enable 1, // magic AGC setting, see AD9361 docs // fagc_rst_gla_engergy_lost_goto_optim_gain_en *** adi,fagc-rst-gla-engergy-lost-goto-optim-gain-enable 10, // magic AGC setting, see AD9361 docs // fagc_rst_gla_engergy_lost_sig_thresh_below_ll *** adi,fagc-rst-gla-engergy-lost-sig-thresh-below-ll 8, // magic AGC setting, see AD9361 docs // fagc_energy_lost_stronger_sig_gain_lock_exit_cnt *** adi,fagc-energy-lost-stronger-sig-gain-lock-exit-cnt 1, // magic AGC setting, see AD9361 docs // fagc_rst_gla_large_adc_overload_en *** adi,fagc-rst-gla-large-adc-overload-enable 1, // magic AGC setting, see AD9361 docs // fagc_rst_gla_large_lmt_overload_en *** adi,fagc-rst-gla-large-lmt-overload-enable 0, // magic AGC setting, see AD9361 docs // fagc_rst_gla_en_agc_pulled_high_en *** adi,fagc-rst-gla-en-agc-pulled-high-enable 0, // magic AGC setting, see AD9361 docs // fagc_rst_gla_if_en_agc_pulled_high_mode *** adi,fagc-rst-gla-if-en-agc-pulled-high-mode 64, // magic AGC setting, see AD9361 docs // fagc_power_measurement_duration_in_state5 *** adi,fagc-power-measurement-duration-in-state5 /* RSSI Control */ 1, // settling delay on RSSI algo restart = 1 μs // rssi_delay *** adi,rssi-delay 1000, // total RSSI measurement duration = 1000 μs // rssi_duration *** adi,rssi-duration GAIN_CHANGE_OCCURS, // reset RSSI accumulator on gain change event // rssi_restart_mode *** adi,rssi-restart-mode 0, // RSSI control values are in microseconds // rssi_unit_is_rx_samples_enable *** adi,rssi-unit-is-rx-samples-enable 1, // wait 1 μs between RSSI measurements // rssi_wait *** adi,rssi-wait /* Aux ADC Control */ /* bladeRF Micro: N/A, pin tied to GND */ 256, // AuxADC decimate by 256 // aux_adc_decimation *** adi,aux-adc-decimation 40000000UL, // AuxADC sample rate 40 MHz // aux_adc_rate *** adi,aux-adc-rate /* AuxDAC Control */ /* bladeRF Micro: AuxDAC1 is TP7 and AUXDAC_TRIM, AuxDAC2 is TP8 */ 1, // AuxDAC does not slave the ENSM // aux_dac_manual_mode_enable *** adi,aux-dac-manual-mode-enable 0, // AuxDAC1 default value = 0 mV // aux_dac1_default_value_mV *** adi,aux-dac1-default-value-mV 0, // N/A when aux_dac_manual_mode_enable = 1 // aux_dac1_active_in_rx_enable *** adi,aux-dac1-active-in-rx-enable 0, // N/A when aux_dac_manual_mode_enable = 1 // aux_dac1_active_in_tx_enable *** adi,aux-dac1-active-in-tx-enable 0, // N/A when aux_dac_manual_mode_enable = 1 // aux_dac1_active_in_alert_enable *** adi,aux-dac1-active-in-alert-enable 0, // N/A when aux_dac_manual_mode_enable = 1 // aux_dac1_rx_delay_us *** adi,aux-dac1-rx-delay-us 0, // N/A when aux_dac_manual_mode_enable = 1 // aux_dac1_tx_delay_us *** adi,aux-dac1-tx-delay-us 0, // AuxDAC2 default value = 0 mV // aux_dac2_default_value_mV *** adi,aux-dac2-default-value-mV 0, // N/A when aux_dac_manual_mode_enable = 1 // aux_dac2_active_in_rx_enable *** adi,aux-dac2-active-in-rx-enable 0, // N/A when aux_dac_manual_mode_enable = 1 // aux_dac2_active_in_tx_enable *** adi,aux-dac2-active-in-tx-enable 0, // N/A when aux_dac_manual_mode_enable = 1 // aux_dac2_active_in_alert_enable *** adi,aux-dac2-active-in-alert-enable 0, // N/A when aux_dac_manual_mode_enable = 1 // aux_dac2_rx_delay_us *** adi,aux-dac2-rx-delay-us 0, // N/A when aux_dac_manual_mode_enable = 1 // aux_dac2_tx_delay_us *** adi,aux-dac2-tx-delay-us /* Temperature Sensor Control */ 256, // Temperature sensor decimate by 256 // temp_sense_decimation *** adi,temp-sense-decimation 1000, // Measure temperature every 1000 ms // temp_sense_measurement_interval_ms *** adi,temp-sense-measurement-interval-ms 206, // Offset = +206 degrees C // temp_sense_offset_signed *** adi,temp-sense-offset-signed 1, // Periodic temperature measurements enabled // temp_sense_periodic_measurement_enable *** adi,temp-sense-periodic-measurement-enable /* Control Out Setup */ /* See https://wiki.analog.com/resources/tools-software/linux-drivers/iio-transceiver/ad9361-customization#control_output_setup */ 0xFF, // Enable all CTRL_OUT bits // ctrl_outs_enable_mask *** adi,ctrl-outs-enable-mask 0, // CTRL_OUT index is 0 // ctrl_outs_index *** adi,ctrl-outs-index /* External LNA Control */ /* bladeRF Micro: GPO_0 is TP3, GPO_1 is TP4 */ 0, // N/A when elna_rx(1,2)_gpo(0,1)_control_enable = 0 // elna_settling_delay_ns *** adi,elna-settling-delay-ns 0, // MUST be 0 when elna_rx(1,2)_gpo(0,1)_control_enable = 0 // elna_gain_mdB *** adi,elna-gain-mdB 0, // MUST be 0 when elna_rx(1,2)_gpo(0,1)_control_enable = 0 // elna_bypass_loss_mdB *** adi,elna-bypass-loss-mdB 0, // Ext LNA Ctrl bit in Rx1 gain table does NOT set GPO0 state // elna_rx1_gpo0_control_enable *** adi,elna-rx1-gpo0-control-enable 0, // Ext LNA Ctrl bit in Rx2 gain table does NOT set GPO1 state // elna_rx2_gpo1_control_enable *** adi,elna-rx2-gpo1-control-enable 0, // N/A when elna_rx(1,2)_gpo(0,1)_control_enable = 0 // elna_gaintable_all_index_enable *** adi,elna-gaintable-all-index-enable /* Digital Interface Control */ #ifdef ENABLE_AD9361_DIGITAL_INTERFACE_TIMING_VERIFICATION /* Calibrate the digital interface delay (hardware validation) */ 0, // Don't skip digital interface tuning // digital_interface_tune_skip_mode *** adi,digital-interface-tune-skip-mode #else /* Use hardcoded digital interface delay values (production) */ 2, // Skip RX and TX tuning; use hardcoded values below // digital_interface_tune_skip_mode *** adi,digital-interface-tune-skip-mode #endif // ENABLE_AD9361_DIGITAL_INTERFACE_TIMING_VERIFICATION 0, // ?? UNDOCUMENTED ?? // digital_interface_tune_fir_disable *** adi,digital-interface-tune-fir-disable 1, // Swap I and Q (spectral inversion) // pp_tx_swap_enable *** adi,pp-tx-swap-enable 1, // Swap I and Q (spectral inversion) // pp_rx_swap_enable *** adi,pp-rx-swap-enable 0, // Don't swap TX1 and TX2 // tx_channel_swap_enable *** adi,tx-channel-swap-enable 0, // Don't swap RX1 and RX2 // rx_channel_swap_enable *** adi,rx-channel-swap-enable 1, // Toggle RX_FRAME with 50% duty cycle // rx_frame_pulse_mode_enable *** adi,rx-frame-pulse-mode-enable 0, // Data port timing reflects # of enabled signal paths // two_t_two_r_timing_enable *** adi,2t2r-timing-enable 0, // Don't invert data bus // invert_data_bus_enable *** adi,invert-data-bus-enable 0, // Don't invert data clock // invert_data_clk_enable *** adi,invert-data-clk-enable 0, // MUST be 0 when lvds_mode_enable = 1 // fdd_alt_word_order_enable *** adi,fdd-alt-word-order-enable 0, // Don't invert RX_FRAME // invert_rx_frame_enable *** adi,invert-rx-frame-enable 0, // Don't make RX sample rate 2x the TX sample rate // fdd_rx_rate_2tx_enable *** adi,fdd-rx-rate-2tx-enable 0, // MUST be 0 when lvds_mode_enable = 1 // swap_ports_enable *** adi,swap-ports-enable 0, // MUST be 0 when lvds_mode_enable = 1 // single_data_rate_enable *** adi,single-data-rate-enable 1, // Use LVDS mode on data port // lvds_mode_enable *** adi,lvds-mode-enable 0, // MUST be 0 when lvds_mode_enable = 1 // half_duplex_mode_enable *** adi,half-duplex-mode-enable 0, // MUST be 0 when lvds_mode_enable = 1 // single_port_mode_enable *** adi,single-port-mode-enable 0, // MUST be 0 when lvds_mode_enable = 1 // full_port_enable *** adi,full-port-enable 0, // MUST be 0 when lvds_mode_enable = 1 // full_duplex_swap_bits_enable *** adi,full-duplex-swap-bits-enable 0, // RX_DATA delay rel to RX_FRAME = 0 DATA_CLK/2 cycles // delay_rx_data *** adi,delay-rx-data // Approx 0.3 ns/LSB on next 4 values 5, // DATA_CLK delay = 1.5 ns // rx_data_clock_delay *** adi,rx-data-clock-delay 0, // RX_DATA/RX_FRAME delay = 0 ns // rx_data_delay *** adi,rx-data-delay 0, // FB_CLK delay = 0 ns // tx_fb_clock_delay *** adi,tx-fb-clock-delay 5, // TX_DATA/TX_FRAME delay = 1.5 ns // tx_data_delay *** adi,tx-data-delay 300, // LVDS driver bias 300 mV // lvds_bias_mV *** adi,lvds-bias-mV 1, // Enable LVDS on-chip termination // lvds_rx_onchip_termination_enable *** adi,lvds-rx-onchip-termination-enable 1, // RX1 and RX2 are not phase-aligned // rx1rx2_phase_inversion_en *** adi,rx1-rx2-phase-inversion-enable 0xFF, // Default signal inversion mappings // lvds_invert1_control *** adi,lvds-invert1-control 0x0F, // Default signal inversion mappings // lvds_invert2_control *** adi,lvds-invert2-control 1, // CLK_OUT drive increased by ~20% // clk_out_drive 1, // DATA_CLK drive increased by ~20% // dataclk_drive 1, // Data port drive increased by ~20% // data_port_drive 0, // CLK_OUT minimum slew (fastest rise/fall) // clk_out_slew 0, // DATA_CLK minimum slew (fastest rise/fall) // dataclk_slew 0, // Data port minimum slew (fastest rise/fall) // data_port_slew /* GPO Control */ 0, // GPO0 is LOW in Sleep/Wait/Alert states // gpo0_inactive_state_high_enable *** adi,gpo0-inactive-state-high-enable 0, // GPO1 is LOW in Sleep/Wait/Alert states // gpo1_inactive_state_high_enable *** adi,gpo1-inactive-state-high-enable 0, // GPO2 is LOW in Sleep/Wait/Alert states // gpo2_inactive_state_high_enable *** adi,gpo2-inactive-state-high-enable 0, // GPO3 is LOW in Sleep/Wait/Alert states // gpo3_inactive_state_high_enable *** adi,gpo3-inactive-state-high-enable 0, // GPO0 does not change state when entering RX state // gpo0_slave_rx_enable *** adi,gpo0-slave-rx-enable 0, // GPO0 does not change state when entering TX state // gpo0_slave_tx_enable *** adi,gpo0-slave-tx-enable 0, // GPO1 does not change state when entering RX state // gpo1_slave_rx_enable *** adi,gpo1-slave-rx-enable 0, // GPO1 does not change state when entering TX state // gpo1_slave_tx_enable *** adi,gpo1-slave-tx-enable 0, // GPO2 does not change state when entering RX state // gpo2_slave_rx_enable *** adi,gpo2-slave-rx-enable 0, // GPO2 does not change state when entering TX state // gpo2_slave_tx_enable *** adi,gpo2-slave-tx-enable 0, // GPO3 does not change state when entering RX state // gpo3_slave_rx_enable *** adi,gpo3-slave-rx-enable 0, // GPO3 does not change state when entering TX state // gpo3_slave_tx_enable *** adi,gpo3-slave-tx-enable 0, // N/A when gpo0_slave_rx_enable = 0 // gpo0_rx_delay_us *** adi,gpo0-rx-delay-us 0, // N/A when gpo0_slave_tx_enable = 0 // gpo0_tx_delay_us *** adi,gpo0-tx-delay-us 0, // N/A when gpo1_slave_rx_enable = 0 // gpo1_rx_delay_us *** adi,gpo1-rx-delay-us 0, // N/A when gpo1_slave_tx_enable = 0 // gpo1_tx_delay_us *** adi,gpo1-tx-delay-us 0, // N/A when gpo2_slave_rx_enable = 0 // gpo2_rx_delay_us *** adi,gpo2-rx-delay-us 0, // N/A when gpo2_slave_tx_enable = 0 // gpo2_tx_delay_us *** adi,gpo2-tx-delay-us 0, // N/A when gpo3_slave_rx_enable = 0 // gpo3_rx_delay_us *** adi,gpo3-rx-delay-us 0, // N/A when gpo3_slave_tx_enable = 0 // gpo3_tx_delay_us *** adi,gpo3-tx-delay-us /* Tx Monitor Control */ /* bladeRF Micro: N/A, TX_MON1 and TX_MON2 tied to GND */ 37000, // N/A // low_high_gain_threshold_mdB *** adi,txmon-low-high-thresh 0, // N/A // low_gain_dB *** adi,txmon-low-gain 24, // N/A // high_gain_dB *** adi,txmon-high-gain 0, // N/A // tx_mon_track_en *** adi,txmon-dc-tracking-enable 0, // N/A // one_shot_mode_en *** adi,txmon-one-shot-mode-enable 511, // N/A // tx_mon_delay *** adi,txmon-delay 8192, // N/A // tx_mon_duration *** adi,txmon-duration 2, // N/A // tx1_mon_front_end_gain *** adi,txmon-1-front-end-gain 2, // N/A // tx2_mon_front_end_gain *** adi,txmon-2-front-end-gain 48, // N/A // tx1_mon_lo_cm *** adi,txmon-1-lo-cm 48, // N/A // tx2_mon_lo_cm *** adi,txmon-2-lo-cm /* GPIO definitions */ RFFE_CONTROL_RESET_N, // Reset using RFFE bit 0 // gpio_resetb *** reset-gpios /* MCS Sync */ -1, // Future use (MCS Sync) // gpio_sync *** sync-gpios -1, // Future use (MCS Sync) // gpio_cal_sw1 *** cal-sw1-gpios -1, // Future use (MCS Sync) // gpio_cal_sw2 *** cal-sw2-gpios /* External LO clocks */ NULL, // Future use (RX_EXT_LO, TX_EXT_LO control) // (*ad9361_rfpll_ext_recalc_rate)() NULL, // Future use (RX_EXT_LO, TX_EXT_LO control) // (*ad9361_rfpll_ext_round_rate)() NULL // Future use (RX_EXT_LO, TX_EXT_LO control) // (*ad9361_rfpll_ext_set_rate)() }; // clang-format on // clang-format off AD9361_InitParam bladerf2_rfic_init_params_fastagc_burst = { /* Device selection */ ID_AD9361, // AD9361 RF Agile Transceiver // dev_sel /* Identification number */ 0, // Chip ID 0 // id_no /* Reference Clock */ 38400000UL, // RefClk = 38.4 MHz // reference_clk_rate /* Base Configuration */ 1, // use 2Rx2Tx mode // two_rx_two_tx_mode_enable *** adi,2rx-2tx-mode-enable 1, // N/A when two_rx_two_tx_mode_enable = 1 // one_rx_one_tx_mode_use_rx_num *** adi,1rx-1tx-mode-use-rx-num 1, // N/A when two_rx_two_tx_mode_enable = 1 // one_rx_one_tx_mode_use_tx_num *** adi,1rx-1tx-mode-use-tx-num 1, // use FDD mode // frequency_division_duplex_mode_enable *** adi,frequency-division-duplex-mode-enable 1, // use independent FDD mode // frequency_division_duplex_independent_mode_enable *** adi,frequency-division-duplex-independent-mode-enable 0, // N/A when frequency_division_duplex_mode_enable = 1 // tdd_use_dual_synth_mode_enable *** adi,tdd-use-dual-synth-mode-enable 0, // N/A when frequency_division_duplex_mode_enable = 1 // tdd_skip_vco_cal_enable *** adi,tdd-skip-vco-cal-enable 0, // TX fastlock delay = 0 ns // tx_fastlock_delay_ns *** adi,tx-fastlock-delay-ns 0, // RX fastlock delay = 0 ns // rx_fastlock_delay_ns *** adi,rx-fastlock-delay-ns 0, // RX fastlock pin control disabled // rx_fastlock_pincontrol_enable *** adi,rx-fastlock-pincontrol-enable 0, // TX fastlock pin control disabled // tx_fastlock_pincontrol_enable *** adi,tx-fastlock-pincontrol-enable 0, // use internal RX LO // external_rx_lo_enable *** adi,external-rx-lo-enable 0, // use internal TX LO // external_tx_lo_enable *** adi,external-tx-lo-enable 5, // apply new tracking word: on gain change, after exiting RX state // dc_offset_tracking_update_event_mask *** adi,dc-offset-tracking-update-event-mask 6, // atten value for DC tracking, RX LO > 4 GHz // dc_offset_attenuation_high_range *** adi,dc-offset-attenuation-high-range 5, // atten value for DC tracking, RX LO < 4 GHz // dc_offset_attenuation_low_range *** adi,dc-offset-attenuation-low-range 0x28, // loop gain for DC tracking, RX LO > 4 GHz // dc_offset_count_high_range *** adi,dc-offset-count-high-range 0x32, // loop gain for DC tracking, RX LO < 4 GHz // dc_offset_count_low_range *** adi,dc-offset-count-low-range 0, // use full gain table // split_gain_table_mode_enable *** adi,split-gain-table-mode-enable MAX_SYNTH_FREF, // f_ref window 80 MHz // trx_synthesizer_target_fref_overwrite_hz *** adi,trx-synthesizer-target-fref-overwrite-hz 0, // don't use improved RX QEC tracking // qec_tracking_slow_mode_enable *** adi,qec-tracking-slow-mode-enable /* ENSM Control */ 0, // use level mode on ENABLE and TXNRX pins // ensm_enable_pin_pulse_mode_enable *** adi,ensm-enable-pin-pulse-mode-enable 0, // use SPI writes for ENSM state, not ENABLE/TXNRX pins // ensm_enable_txnrx_control_enable *** adi,ensm-enable-txnrx-control-enable /* LO Control */ 2400000000UL, // DEFAULT // rx_synthesizer_frequency_hz *** adi,rx-synthesizer-frequency-hz 2400000000UL, // DEFAULT // tx_synthesizer_frequency_hz *** adi,tx-synthesizer-frequency-hz /* Rate & BW Control */ { 983040000, 245760000, 122880000, 61440000, 30720000, 30720000 }, // DEFAULT // uint32_t rx_path_clock_frequencies[6] *** adi,rx-path-clock-frequencies { 983040000, 122880000, 122880000, 61440000, 30720000, 30720000 }, // DEFAULT // uint32_t tx_path_clock_frequencies[6] *** adi,tx-path-clock-frequencies 18000000, // DEFAULT // rf_rx_bandwidth_hz *** adi,rf-rx-bandwidth-hz 18000000, // DEFAULT // rf_tx_bandwidth_hz *** adi,rf-tx-bandwidth-hz /* RF Port Control */ 0, // DEFAULT // rx_rf_port_input_select *** adi,rx-rf-port-input-select 0, // DEFAULT // tx_rf_port_input_select *** adi,tx-rf-port-input-select /* TX Attenuation Control */ 10000, // DEFAULT // tx_attenuation_mdB *** adi,tx-attenuation-mdB 0, // N/A when frequency_division_duplex_mode_enable = 1 // update_tx_gain_in_alert_enable *** adi,update-tx-gain-in-alert-enable /* Reference Clock Control */ 1, // Expect external clock into XTALN // xo_disable_use_ext_refclk_enable *** adi,xo-disable-use-ext-refclk-enable {3, 5920}, // ~0 ppm DCXO trim (N/A if ext clk) // dcxo_coarse_and_fine_tune[2] *** adi,dcxo-coarse-and-fine-tune CLKOUT_DISABLE, // disable clkout pin (see enum ad9361_clkout) // clk_output_mode_select *** adi,clk-output-mode-select /* Gain Control */ RF_GAIN_FASTATTACK_AGC, // RX1 BLADERF_GAIN_DEFAULT = slow attack AGC // gc_rx1_mode *** adi,gc-rx1-mode RF_GAIN_FASTATTACK_AGC, // RX2 BLADERF_GAIN_DEFAULT = slow attack AGC // gc_rx2_mode *** adi,gc-rx2-mode 58, // magic AGC setting, see AD9361 docs // gc_adc_large_overload_thresh *** adi,gc-adc-large-overload-thresh 4, // magic AGC setting, see AD9361 docs // gc_adc_ovr_sample_size *** adi,gc-adc-ovr-sample-size 47, // magic AGC setting, see AD9361 docs // gc_adc_small_overload_thresh *** adi,gc-adc-small-overload-thresh 2, // magic AGC setting, see AD9361 docs // gc_dec_pow_measurement_duration *** adi,gc-dec-pow-measurement-duration 0, // magic AGC setting, see AD9361 docs // gc_dig_gain_enable *** adi,gc-dig-gain-enable 480, // magic AGC setting, see AD9361 docs // gc_lmt_overload_high_thresh *** adi,gc-lmt-overload-high-thresh 400, // magic AGC setting, see AD9361 docs // gc_lmt_overload_low_thresh *** adi,gc-lmt-overload-low-thresh 40, // magic AGC setting, see AD9361 docs // gc_low_power_thresh *** adi,gc-low-power-thresh 15, // magic AGC setting, see AD9361 docs // gc_max_dig_gain *** adi,gc-max-dig-gain /* Gain MGC Control */ 2, // N/A when mgc_rx(1,2)_ctrl_inp_enable = 0 // mgc_dec_gain_step *** adi,mgc-dec-gain-step 2, // N/A when mgc_rx(1,2)_ctrl_inp_enable = 0 // mgc_inc_gain_step *** adi,mgc-inc-gain-step 0, // don't use CTRL_IN for RX1 MGC stepping // mgc_rx1_ctrl_inp_enable *** adi,mgc-rx1-ctrl-inp-enable 0, // don't use CTRL_IN for RX2 MGC stepping // mgc_rx2_ctrl_inp_enable *** adi,mgc-rx2-ctrl-inp-enable 0, // N/A when mgc_rx(1,2)_ctrl_inp_enable = 0 // mgc_split_table_ctrl_inp_gain_mode *** adi,mgc-split-table-ctrl-inp-gain-mode /* Gain AGC Control */ 10, // magic AGC setting, see AD9361 docs // agc_adc_large_overload_exceed_counter *** adi,agc-adc-large-overload-exceed-counter 2, // magic AGC setting, see AD9361 docs // agc_adc_large_overload_inc_steps *** adi,agc-adc-large-overload-inc-steps 0, // magic AGC setting, see AD9361 docs // agc_adc_lmt_small_overload_prevent_gain_inc_enable *** adi,agc-adc-lmt-small-overload-prevent-gain-inc-enable 10, // magic AGC setting, see AD9361 docs // agc_adc_small_overload_exceed_counter *** adi,agc-adc-small-overload-exceed-counter 4, // magic AGC setting, see AD9361 docs // agc_dig_gain_step_size *** adi,agc-dig-gain-step-size 3, // magic AGC setting, see AD9361 docs // agc_dig_saturation_exceed_counter *** adi,agc-dig-saturation-exceed-counter 1, // magic AGC setting, see AD9361 docs // agc_gain_update_interval_us *** adi,agc-gain-update-interval-us 0, // magic AGC setting, see AD9361 docs // agc_immed_gain_change_if_large_adc_overload_enable *** adi,agc-immed-gain-change-if-large-adc-overload-enable 0, // magic AGC setting, see AD9361 docs // agc_immed_gain_change_if_large_lmt_overload_enable *** adi,agc-immed-gain-change-if-large-lmt-overload-enable 10, // magic AGC setting, see AD9361 docs // agc_inner_thresh_high *** adi,agc-inner-thresh-high 1, // magic AGC setting, see AD9361 docs // agc_inner_thresh_high_dec_steps *** adi,agc-inner-thresh-high-dec-steps 12, // magic AGC setting, see AD9361 docs // agc_inner_thresh_low *** adi,agc-inner-thresh-low 1, // magic AGC setting, see AD9361 docs // agc_inner_thresh_low_inc_steps *** adi,agc-inner-thresh-low-inc-steps 10, // magic AGC setting, see AD9361 docs // agc_lmt_overload_large_exceed_counter *** adi,agc-lmt-overload-large-exceed-counter 2, // magic AGC setting, see AD9361 docs // agc_lmt_overload_large_inc_steps *** adi,agc-lmt-overload-large-inc-steps 10, // magic AGC setting, see AD9361 docs // agc_lmt_overload_small_exceed_counter *** adi,agc-lmt-overload-small-exceed-counter 5, // magic AGC setting, see AD9361 docs // agc_outer_thresh_high *** adi,agc-outer-thresh-high 2, // magic AGC setting, see AD9361 docs // agc_outer_thresh_high_dec_steps *** adi,agc-outer-thresh-high-dec-steps 18, // magic AGC setting, see AD9361 docs // agc_outer_thresh_low *** adi,agc-outer-thresh-low 2, // magic AGC setting, see AD9361 docs // agc_outer_thresh_low_inc_steps *** adi,agc-outer-thresh-low-inc-steps 1, // magic AGC setting, see AD9361 docs // agc_attack_delay_extra_margin_us; *** adi,agc-attack-delay-extra-margin-us 0, // magic AGC setting, see AD9361 docs // agc_sync_for_gain_counter_enable *** adi,agc-sync-for-gain-counter-enable /* Fast AGC */ 16, // magic AGC setting, see AD9361 docs // fagc_dec_pow_measuremnt_duration *** adi,fagc-dec-pow-measurement-duration 260, // magic AGC setting, see AD9361 docs // fagc_state_wait_time_ns *** adi,fagc-state-wait-time-ns /* Fast AGC - Low Power */ 0, // magic AGC setting, see AD9361 docs // fagc_allow_agc_gain_increase *** adi,fagc-allow-agc-gain-increase-enable 5, // magic AGC setting, see AD9361 docs // fagc_lp_thresh_increment_time *** adi,fagc-lp-thresh-increment-time 7, // magic AGC setting, see AD9361 docs // fagc.lp_thresh_increment_steps *** adi,fagc-lp-thresh-increment-steps /* Fast AGC - Lock Level */ 10, // magic AGC setting, see AD9361 docs // fagc_lock_level *** adi,fagc-lock-level 1, // magic AGC setting, see AD9361 docs // fagc_lock_level_lmt_gain_increase_en *** adi,fagc-lock-level-lmt-gain-increase-enable 63, // magic AGC setting, see AD9361 docs // fagc_lock_level_gain_increase_upper_limit *** adi,fagc-lock-level-gain-increase-upper-limit /* Fast AGC - Peak Detectors and Final Settling */ 1, // magic AGC setting, see AD9361 docs // fagc_lpf_final_settling_steps *** adi,fagc-lpf-final-settling-steps 1, // magic AGC setting, see AD9361 docs // fagc_lmt_final_settling_steps *** adi,fagc-lmt-final-settling-steps 3, // magic AGC setting, see AD9361 docs // fagc_final_overrange_count *** adi,fagc-final-overrange-count /* Fast AGC - Final Power Test */ 0, // magic AGC setting, see AD9361 docs // fagc_gain_increase_after_gain_lock_en *** adi,fagc-gain-increase-after-gain-lock-enable /* Fast AGC - Unlocking the Gain */ 0, // magic AGC setting, see AD9361 docs // fagc_gain_index_type_after_exit_rx_mode *** adi,fagc-gain-index-type-after-exit-rx-mode 1, // magic AGC setting, see AD9361 docs // fagc_use_last_lock_level_for_set_gain_en *** adi,fagc-use-last-lock-level-for-set-gain-enable 1, // magic AGC setting, see AD9361 docs // fagc_rst_gla_stronger_sig_thresh_exceeded_en *** adi,fagc-rst-gla-stronger-sig-thresh-exceeded-enable 5, // magic AGC setting, see AD9361 docs // fagc_optimized_gain_offset *** adi,fagc-optimized-gain-offset 10, // magic AGC setting, see AD9361 docs // fagc_rst_gla_stronger_sig_thresh_above_ll *** adi,fagc-rst-gla-stronger-sig-thresh-above-ll 1, // magic AGC setting, see AD9361 docs // fagc_rst_gla_engergy_lost_sig_thresh_exceeded_en *** adi,fagc-rst-gla-engergy-lost-sig-thresh-exceeded-enable 0, // magic AGC setting, see AD9361 docs // fagc_rst_gla_engergy_lost_goto_optim_gain_en *** adi,fagc-rst-gla-engergy-lost-goto-optim-gain-enable 10, // magic AGC setting, see AD9361 docs // fagc_rst_gla_engergy_lost_sig_thresh_below_ll *** adi,fagc-rst-gla-engergy-lost-sig-thresh-below-ll 3, // magic AGC setting, see AD9361 docs // fagc_energy_lost_stronger_sig_gain_lock_exit_cnt *** adi,fagc-energy-lost-stronger-sig-gain-lock-exit-cnt 1, // magic AGC setting, see AD9361 docs // fagc_rst_gla_large_adc_overload_en *** adi,fagc-rst-gla-large-adc-overload-enable 1, // magic AGC setting, see AD9361 docs // fagc_rst_gla_large_lmt_overload_en *** adi,fagc-rst-gla-large-lmt-overload-enable 0, // magic AGC setting, see AD9361 docs // fagc_rst_gla_en_agc_pulled_high_en *** adi,fagc-rst-gla-en-agc-pulled-high-enable 0, // magic AGC setting, see AD9361 docs // fagc_rst_gla_if_en_agc_pulled_high_mode *** adi,fagc-rst-gla-if-en-agc-pulled-high-mode 64, // magic AGC setting, see AD9361 docs // fagc_power_measurement_duration_in_state5 *** adi,fagc-power-measurement-duration-in-state5 /* RSSI Control */ 1, // settling delay on RSSI algo restart = 1 μs // rssi_delay *** adi,rssi-delay 1000, // total RSSI measurement duration = 1000 μs // rssi_duration *** adi,rssi-duration GAIN_CHANGE_OCCURS, // reset RSSI accumulator on gain change event // rssi_restart_mode *** adi,rssi-restart-mode 0, // RSSI control values are in microseconds // rssi_unit_is_rx_samples_enable *** adi,rssi-unit-is-rx-samples-enable 1, // wait 1 μs between RSSI measurements // rssi_wait *** adi,rssi-wait /* Aux ADC Control */ /* bladeRF Micro: N/A, pin tied to GND */ 256, // AuxADC decimate by 256 // aux_adc_decimation *** adi,aux-adc-decimation 40000000UL, // AuxADC sample rate 40 MHz // aux_adc_rate *** adi,aux-adc-rate /* AuxDAC Control */ /* bladeRF Micro: AuxDAC1 is TP7 and AUXDAC_TRIM, AuxDAC2 is TP8 */ 1, // AuxDAC does not slave the ENSM // aux_dac_manual_mode_enable *** adi,aux-dac-manual-mode-enable 0, // AuxDAC1 default value = 0 mV // aux_dac1_default_value_mV *** adi,aux-dac1-default-value-mV 0, // N/A when aux_dac_manual_mode_enable = 1 // aux_dac1_active_in_rx_enable *** adi,aux-dac1-active-in-rx-enable 0, // N/A when aux_dac_manual_mode_enable = 1 // aux_dac1_active_in_tx_enable *** adi,aux-dac1-active-in-tx-enable 0, // N/A when aux_dac_manual_mode_enable = 1 // aux_dac1_active_in_alert_enable *** adi,aux-dac1-active-in-alert-enable 0, // N/A when aux_dac_manual_mode_enable = 1 // aux_dac1_rx_delay_us *** adi,aux-dac1-rx-delay-us 0, // N/A when aux_dac_manual_mode_enable = 1 // aux_dac1_tx_delay_us *** adi,aux-dac1-tx-delay-us 0, // AuxDAC2 default value = 0 mV // aux_dac2_default_value_mV *** adi,aux-dac2-default-value-mV 0, // N/A when aux_dac_manual_mode_enable = 1 // aux_dac2_active_in_rx_enable *** adi,aux-dac2-active-in-rx-enable 0, // N/A when aux_dac_manual_mode_enable = 1 // aux_dac2_active_in_tx_enable *** adi,aux-dac2-active-in-tx-enable 0, // N/A when aux_dac_manual_mode_enable = 1 // aux_dac2_active_in_alert_enable *** adi,aux-dac2-active-in-alert-enable 0, // N/A when aux_dac_manual_mode_enable = 1 // aux_dac2_rx_delay_us *** adi,aux-dac2-rx-delay-us 0, // N/A when aux_dac_manual_mode_enable = 1 // aux_dac2_tx_delay_us *** adi,aux-dac2-tx-delay-us /* Temperature Sensor Control */ 256, // Temperature sensor decimate by 256 // temp_sense_decimation *** adi,temp-sense-decimation 1000, // Measure temperature every 1000 ms // temp_sense_measurement_interval_ms *** adi,temp-sense-measurement-interval-ms 206, // Offset = +206 degrees C // temp_sense_offset_signed *** adi,temp-sense-offset-signed 1, // Periodic temperature measurements enabled // temp_sense_periodic_measurement_enable *** adi,temp-sense-periodic-measurement-enable /* Control Out Setup */ /* See https://wiki.analog.com/resources/tools-software/linux-drivers/iio-transceiver/ad9361-customization#control_output_setup */ 0xFF, // Enable all CTRL_OUT bits // ctrl_outs_enable_mask *** adi,ctrl-outs-enable-mask 7, // CTRL_OUT index is 0 // ctrl_outs_index *** adi,ctrl-outs-index /* External LNA Control */ /* bladeRF Micro: GPO_0 is TP3, GPO_1 is TP4 */ 0, // N/A when elna_rx(1,2)_gpo(0,1)_control_enable = 0 // elna_settling_delay_ns *** adi,elna-settling-delay-ns 0, // MUST be 0 when elna_rx(1,2)_gpo(0,1)_control_enable = 0 // elna_gain_mdB *** adi,elna-gain-mdB 0, // MUST be 0 when elna_rx(1,2)_gpo(0,1)_control_enable = 0 // elna_bypass_loss_mdB *** adi,elna-bypass-loss-mdB 0, // Ext LNA Ctrl bit in Rx1 gain table does NOT set GPO0 state // elna_rx1_gpo0_control_enable *** adi,elna-rx1-gpo0-control-enable 0, // Ext LNA Ctrl bit in Rx2 gain table does NOT set GPO1 state // elna_rx2_gpo1_control_enable *** adi,elna-rx2-gpo1-control-enable 0, // N/A when elna_rx(1,2)_gpo(0,1)_control_enable = 0 // elna_gaintable_all_index_enable *** adi,elna-gaintable-all-index-enable /* Digital Interface Control */ #ifdef ENABLE_AD9361_DIGITAL_INTERFACE_TIMING_VERIFICATION /* Calibrate the digital interface delay (hardware validation) */ 0, // Don't skip digital interface tuning // digital_interface_tune_skip_mode *** adi,digital-interface-tune-skip-mode #else /* Use hardcoded digital interface delay values (production) */ 2, // Skip RX and TX tuning; use hardcoded values below // digital_interface_tune_skip_mode *** adi,digital-interface-tune-skip-mode #endif // ENABLE_AD9361_DIGITAL_INTERFACE_TIMING_VERIFICATION 0, // ?? UNDOCUMENTED ?? // digital_interface_tune_fir_disable *** adi,digital-interface-tune-fir-disable 1, // Swap I and Q (spectral inversion) // pp_tx_swap_enable *** adi,pp-tx-swap-enable 1, // Swap I and Q (spectral inversion) // pp_rx_swap_enable *** adi,pp-rx-swap-enable 0, // Don't swap TX1 and TX2 // tx_channel_swap_enable *** adi,tx-channel-swap-enable 0, // Don't swap RX1 and RX2 // rx_channel_swap_enable *** adi,rx-channel-swap-enable 1, // Toggle RX_FRAME with 50% duty cycle // rx_frame_pulse_mode_enable *** adi,rx-frame-pulse-mode-enable 0, // Data port timing reflects # of enabled signal paths // two_t_two_r_timing_enable *** adi,2t2r-timing-enable 0, // Don't invert data bus // invert_data_bus_enable *** adi,invert-data-bus-enable 0, // Don't invert data clock // invert_data_clk_enable *** adi,invert-data-clk-enable 0, // MUST be 0 when lvds_mode_enable = 1 // fdd_alt_word_order_enable *** adi,fdd-alt-word-order-enable 0, // Don't invert RX_FRAME // invert_rx_frame_enable *** adi,invert-rx-frame-enable 0, // Don't make RX sample rate 2x the TX sample rate // fdd_rx_rate_2tx_enable *** adi,fdd-rx-rate-2tx-enable 0, // MUST be 0 when lvds_mode_enable = 1 // swap_ports_enable *** adi,swap-ports-enable 0, // MUST be 0 when lvds_mode_enable = 1 // single_data_rate_enable *** adi,single-data-rate-enable 1, // Use LVDS mode on data port // lvds_mode_enable *** adi,lvds-mode-enable 0, // MUST be 0 when lvds_mode_enable = 1 // half_duplex_mode_enable *** adi,half-duplex-mode-enable 0, // MUST be 0 when lvds_mode_enable = 1 // single_port_mode_enable *** adi,single-port-mode-enable 0, // MUST be 0 when lvds_mode_enable = 1 // full_port_enable *** adi,full-port-enable 0, // MUST be 0 when lvds_mode_enable = 1 // full_duplex_swap_bits_enable *** adi,full-duplex-swap-bits-enable 0, // RX_DATA delay rel to RX_FRAME = 0 DATA_CLK/2 cycles // delay_rx_data *** adi,delay-rx-data // Approx 0.3 ns/LSB on next 4 values 5, // DATA_CLK delay = 1.5 ns // rx_data_clock_delay *** adi,rx-data-clock-delay 0, // RX_DATA/RX_FRAME delay = 0 ns // rx_data_delay *** adi,rx-data-delay 0, // FB_CLK delay = 0 ns // tx_fb_clock_delay *** adi,tx-fb-clock-delay 5, // TX_DATA/TX_FRAME delay = 1.5 ns // tx_data_delay *** adi,tx-data-delay 300, // LVDS driver bias 300 mV // lvds_bias_mV *** adi,lvds-bias-mV 1, // Enable LVDS on-chip termination // lvds_rx_onchip_termination_enable *** adi,lvds-rx-onchip-termination-enable 1, // RX1 and RX2 are not phase-aligned // rx1rx2_phase_inversion_en *** adi,rx1-rx2-phase-inversion-enable 0xFF, // Default signal inversion mappings // lvds_invert1_control *** adi,lvds-invert1-control 0x0F, // Default signal inversion mappings // lvds_invert2_control *** adi,lvds-invert2-control 1, // CLK_OUT drive increased by ~20% // clk_out_drive 1, // DATA_CLK drive increased by ~20% // dataclk_drive 1, // Data port drive increased by ~20% // data_port_drive 0, // CLK_OUT minimum slew (fastest rise/fall) // clk_out_slew 0, // DATA_CLK minimum slew (fastest rise/fall) // dataclk_slew 0, // Data port minimum slew (fastest rise/fall) // data_port_slew /* GPO Control */ 0, // GPO0 is LOW in Sleep/Wait/Alert states // gpo0_inactive_state_high_enable *** adi,gpo0-inactive-state-high-enable 0, // GPO1 is LOW in Sleep/Wait/Alert states // gpo1_inactive_state_high_enable *** adi,gpo1-inactive-state-high-enable 0, // GPO2 is LOW in Sleep/Wait/Alert states // gpo2_inactive_state_high_enable *** adi,gpo2-inactive-state-high-enable 0, // GPO3 is LOW in Sleep/Wait/Alert states // gpo3_inactive_state_high_enable *** adi,gpo3-inactive-state-high-enable 0, // GPO0 does not change state when entering RX state // gpo0_slave_rx_enable *** adi,gpo0-slave-rx-enable 0, // GPO0 does not change state when entering TX state // gpo0_slave_tx_enable *** adi,gpo0-slave-tx-enable 0, // GPO1 does not change state when entering RX state // gpo1_slave_rx_enable *** adi,gpo1-slave-rx-enable 0, // GPO1 does not change state when entering TX state // gpo1_slave_tx_enable *** adi,gpo1-slave-tx-enable 0, // GPO2 does not change state when entering RX state // gpo2_slave_rx_enable *** adi,gpo2-slave-rx-enable 0, // GPO2 does not change state when entering TX state // gpo2_slave_tx_enable *** adi,gpo2-slave-tx-enable 0, // GPO3 does not change state when entering RX state // gpo3_slave_rx_enable *** adi,gpo3-slave-rx-enable 0, // GPO3 does not change state when entering TX state // gpo3_slave_tx_enable *** adi,gpo3-slave-tx-enable 0, // N/A when gpo0_slave_rx_enable = 0 // gpo0_rx_delay_us *** adi,gpo0-rx-delay-us 0, // N/A when gpo0_slave_tx_enable = 0 // gpo0_tx_delay_us *** adi,gpo0-tx-delay-us 0, // N/A when gpo1_slave_rx_enable = 0 // gpo1_rx_delay_us *** adi,gpo1-rx-delay-us 0, // N/A when gpo1_slave_tx_enable = 0 // gpo1_tx_delay_us *** adi,gpo1-tx-delay-us 0, // N/A when gpo2_slave_rx_enable = 0 // gpo2_rx_delay_us *** adi,gpo2-rx-delay-us 0, // N/A when gpo2_slave_tx_enable = 0 // gpo2_tx_delay_us *** adi,gpo2-tx-delay-us 0, // N/A when gpo3_slave_rx_enable = 0 // gpo3_rx_delay_us *** adi,gpo3-rx-delay-us 0, // N/A when gpo3_slave_tx_enable = 0 // gpo3_tx_delay_us *** adi,gpo3-tx-delay-us /* Tx Monitor Control */ /* bladeRF Micro: N/A, TX_MON1 and TX_MON2 tied to GND */ 37000, // N/A // low_high_gain_threshold_mdB *** adi,txmon-low-high-thresh 0, // N/A // low_gain_dB *** adi,txmon-low-gain 24, // N/A // high_gain_dB *** adi,txmon-high-gain 0, // N/A // tx_mon_track_en *** adi,txmon-dc-tracking-enable 0, // N/A // one_shot_mode_en *** adi,txmon-one-shot-mode-enable 511, // N/A // tx_mon_delay *** adi,txmon-delay 8192, // N/A // tx_mon_duration *** adi,txmon-duration 2, // N/A // tx1_mon_front_end_gain *** adi,txmon-1-front-end-gain 2, // N/A // tx2_mon_front_end_gain *** adi,txmon-2-front-end-gain 48, // N/A // tx1_mon_lo_cm *** adi,txmon-1-lo-cm 48, // N/A // tx2_mon_lo_cm *** adi,txmon-2-lo-cm /* GPIO definitions */ RFFE_CONTROL_RESET_N, // Reset using RFFE bit 0 // gpio_resetb *** reset-gpios /* MCS Sync */ -1, // Future use (MCS Sync) // gpio_sync *** sync-gpios -1, // Future use (MCS Sync) // gpio_cal_sw1 *** cal-sw1-gpios -1, // Future use (MCS Sync) // gpio_cal_sw2 *** cal-sw2-gpios /* External LO clocks */ NULL, // Future use (RX_EXT_LO, TX_EXT_LO control) // (*ad9361_rfpll_ext_recalc_rate)() NULL, // Future use (RX_EXT_LO, TX_EXT_LO control) // (*ad9361_rfpll_ext_round_rate)() NULL // Future use (RX_EXT_LO, TX_EXT_LO control) // (*ad9361_rfpll_ext_set_rate)() }; // clang-format on /** * AD9361 FIR Filters * * The AD9361 RFIC provides programmable FIR filters on both the RX and TX * paths. * * On TX, the signal path is: * * DIGITAL: * [ Programmable TX FIR ] -> [ HB1 ] -> [ HB2 ] -> [ HB3/INT3 ] -> [ DAC ] * ANALOG: * [ DAC ] -> [ BB LPF ] -> [ Secondary LPF ] -> ... * * The Programmable TX FIR is a programmable polyphase FIR filter, which can * interpolate by 1, 2, 4, or be bypassed. Taps are stored in 16-bit * twos-complement. If interpolating by 1, there is a limit of 64 taps; * otherwise, the limit is 128 taps. * * HB1 and HB2 are fixed-coefficient half-band interpolating filters, and can * interpolate by 2 or be bypassed. HB3/INT3 is a fixed-coefficient * interpolating filter, and can interpolate by 2 or 3, or be bypassed. * * BB LPF is a third-order Butterworth LPF, and the Secondary LPF is a * single-pole low-pass filter. Both have programmable corner frequencies. * * On RX, the signal path is: * * ANALOG: * ... -> [ TIA LPF ] -> [ BB LPF ] -> [ ADC ] * DIGITAL: * [ ADC ] -> [ HB3/DEC3 ] -> [ HB2 ] -> [ HB1 ] -> [ Programmable RX FIR ] * * The TIA LPF is a transimpedance amplifier which applies a single-pole * low-pass filter, and the BB LPF is a third-order Butterworth low-pass filter. * Both have programmable corner frequencies. * * HB3/DEC3 is a fixed-coefficient decimating filter, and can decimate by a * factor of 2 or 3, or be bypassed. HB2 is a fixed-coefficient half-band * decimating filter, and can decimate by a factor of 2 or be bypassed. HB1 is a * fixed-coefficient half-band decimating filter, and can also decimate by a * factor of 2 or be bypassed. * * The Programmable RX FIR filter is a programmable polyphase filter, which can * decimate by a factor of 1, 2, or 4, or be bypassed. Similar to the TX FIR, * taps are stored in 16-bit twos-complement. The maximum number of taps is * limited to the ratio of the sample clock to the filter's output rate, * multiplied by 16, up to a maximum of 128 taps. There is a fixed +6 dB gain, * so the below RX filters are configured for a -6 dB gain to effect a net gain * of 0 dB. * * In practice, the decimation/interpolation settings must match for both the RX * and TX FIR filters. If they differ, TX quadrature calibration (and likely * other calibrations) will fail. * * * This file specifies four filters: * bladerf2_rfic_rx_fir_config = decimate by 1 RX FIR * bladerf2_rfic_tx_fir_config = interpolate by 1 TX FIR * bladerf2_rfic_rx_fir_config_dec2 = decimate by 2 RX FIR * bladerf2_rfic_tx_fir_config_int2 = interpolate by 2 TX FIR * * The first two (the 1x filters) are the default, and should provide reasonable * performance under most circumstances. The other two filters are primarily * intended for situations requiring a flatter TX spectrum, particularly when * the ratio of sample rate to signal bandwidth is low. */ AD9361_RXFIRConfig bladerf2_rfic_rx_fir_config = { 3, // rx (RX1 = 1, RX2 = 2, both = 3) -6, // rx_gain (-12, -6, 0, or 6 dB) 1, // rx_dec (decimate by 1, 2, or 4) /** * RX FIR Filter * Built using https://github.com/analogdevicesinc/libad9361-iio * Branch: filter_generation * Commit: f749cef974f687f696226455dc7684277886cf3b * * This filter is intended to improve the flatness of the RX spectrum. It is * a 64-tap, decimate-by-1 filter. * * Design parameters: * * fdp.Rdata = 30720000; * fdp.RxTx = "Rx"; * fdp.Type = "Lowpass"; * fdp.DAC_div = 1; * fdp.HB3 = 2; * fdp.HB2 = 2; * fdp.HB1 = 2; * fdp.FIR = 1; * fdp.PLL_mult = 4; * fdp.converter_rate = 245760000; * fdp.PLL_rate = 983040000; * fdp.Fpass = fdp.Rdata*0.42; * fdp.Fstop = fdp.Rdata*0.50; * fdp.Fcenter = 0; * fdp.Apass = 0.125; * fdp.Astop = 85; * fdp.phEQ = -1; * fdp.wnom = 17920000; * fdp.caldiv = 7; * fdp.RFbw = 22132002; * fdp.FIRdBmin = 0; * fdp.int_FIR = 1; */ // clang-format off { 0, 0, 0, 1, -1, 3, -6, 11, -19, 33, -53, 84, -129, 193, -282, 404, -565, 777, -1052, 1401, -1841, 2390, -3071, 3911, -4947, 6230, -7833, 9888, -12416, 15624, -21140, 32767, 32767, -21140, 15624, -12416, 9888, -7833, 6230, -4947, 3911, -3071, 2390, -1841, 1401, -1052, 777, -565, 404, -282, 193, -129, 84, -53, 33, -19, 11, -6, 3, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // unused 0, 0, 0, 0, 0, 0, 0, 0, // unused 0, 0, 0, 0, 0, 0, 0, 0, // unused 0, 0, 0, 0, 0, 0, 0, 0, // unused 0, 0, 0, 0, 0, 0, 0, 0, // unused 0, 0, 0, 0, 0, 0, 0, 0, // unused 0, 0, 0, 0, 0, 0, 0, 0, // unused 0, 0, 0, 0, 0, 0, 0, 0, // unused }, // rx_coef[128] // clang-format on 64, // rx_coef_size { 0, 0, 0, 0, 0, 0 }, // rx_path_clks[6] 0 // rx_bandwidth }; AD9361_TXFIRConfig bladerf2_rfic_tx_fir_config = { 3, // tx (TX1 = 1, TX2 = 2, both = 3) 0, // tx_gain (-6 or 0 dB) 1, // tx_int (interpolate by 1, 2, or 4) /** * TX FIR Filter * * This filter literally does nothing, but it is here as a placeholder. */ // clang-format off { 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // unused 0, 0, 0, 0, 0, 0, 0, 0, // unused 0, 0, 0, 0, 0, 0, 0, 0, // unused 0, 0, 0, 0, 0, 0, 0, 0, // unused 0, 0, 0, 0, 0, 0, 0, 0, // unused 0, 0, 0, 0, 0, 0, 0, 0, // unused 0, 0, 0, 0, 0, 0, 0, 0, // unused 0, 0, 0, 0, 0, 0, 0, 0, // unused }, // tx_coef[128] // clang-format on 64, // tx_coef_size { 0, 0, 0, 0, 0, 0 }, // tx_path_clks[6] 0 // tx_bandwidth }; AD9361_RXFIRConfig bladerf2_rfic_rx_fir_config_dec2 = { 3, // rx (RX1 = 1, RX2 = 2, both = 3) -6, // rx_gain (-12, -6, 0, or 6 dB) 2, // rx_dec (decimate by 1, 2, or 4) /** * RX FIR Filter * Built using https://github.com/analogdevicesinc/libad9361-iio * Branch: filter_generation * Commit: f749cef974f687f696226455dc7684277886cf3b * * This filter is intended to improve the flatness of the RX spectrum. * * It is a 128-tap, decimate-by-2 filter. Note that you MUST use a * interpolate-by-2 filter on TX if you are using this filter. * * Design parameters: * * fdp.Rdata = 15360000; * fdp.RxTx = "Rx"; * fdp.Type = "Lowpass"; * fdp.DAC_div = 1; * fdp.HB3 = 2; * fdp.HB2 = 2; * fdp.HB1 = 2; * fdp.FIR = 2; * fdp.PLL_mult = 4; * fdp.converter_rate = 245760000; * fdp.PLL_rate = 983040000; * fdp.Fpass = fdp.Rdata*0.45; * fdp.Fstop = fdp.Rdata*0.50; * fdp.Fcenter = 0; * fdp.Apass = 0.1250; * fdp.Astop = 85; * fdp.phEQ = 217; * fdp.wnom = 8800000; * fdp.caldiv = 19; * fdp.RFbw = 8472407; * fdp.FIRdBmin = 0; * fdp.int_FIR = 1; */ // clang-format off { 22, 125, 207, 190, 15, -98, -45, 91, 60, -76, -90, 69, 115, -47, -147, 22, 173, 18, -198, -66, 211, 127, -214, -194, 200, 269, -168, -345, 113, 419, -36, -484, -66, 536, 193, -566, -343, 568, 513, -535, -699, 458, 897, -329, -1099, 140, 1296, 120, -1479, -464, 1636, 912, -1750, -1496, 1797, 2275, -1734, -3378, 1464, 5120, -659, -8461, -2238, 18338, 32689, 24727, 4100, -7107, -2663, 4128, 2513, -2578, -2378, 1567, 2184, -861, -1953, 351, 1703, 22, -1446, -290, 1190, 474, -942, -590, 710, 650, -498, -664, 311, 642, -150, -593, 18, 524, 86, -444, -162, 357, 211, -271, -238, 189, 245, -116, -237, 53, 216, -2, -187, -37, 154, 64, -119, -82, 87, 89, -56, -96, 30, 99, 3, -120, -107, 0, 56, 45, }, // rx_coef[128] // clang-format on 128, // rx_coef_size { 0, 0, 0, 0, 0, 0 }, // rx_path_clks[6] 0 // rx_bandwidth }; AD9361_TXFIRConfig bladerf2_rfic_tx_fir_config_int2 = { 3, // tx (TX1 = 1, TX2 = 2, both = 3) 0, // tx_gain (-6 or 0 dB) 2, // tx_int (interpolate by 1, 2, or 4) /** * TX FIR Filter * Built using https://github.com/analogdevicesinc/libad9361-iio * Branch: filter_generation * Commit: f749cef974f687f696226455dc7684277886cf3b * * This filter is intended to improve the flatness of the TX spectrum. * * It is a 128-tap, interpolate-by-2 filter. Note that you MUST use a * decimate-by-2 filter on RX if you are using this filter. * * Design parameters: * * fdp.Rdata = 15360000; * fdp.RxTx = "Tx"; * fdp.Type = "Lowpass"; * fdp.DAC_div = 1; * fdp.HB3 = 2; * fdp.HB2 = 2; * fdp.HB1 = 2; * fdp.FIR = 2; * fdp.PLL_mult = 4; * fdp.converter_rate = 245760000; * fdp.PLL_rate = 983040000; * fdp.Fpass = fdp.Rdata*0.45; * fdp.Fstop = fdp.Rdata*0.50; * fdp.Fcenter = 0; * fdp.Apass = 0.1250; * fdp.Astop = 85; * fdp.phEQ = 217; * fdp.wnom = 8800000; * fdp.caldiv = 19; * fdp.RFbw = 8472407; * fdp.FIRdBmin = 0; * fdp.int_FIR = 1; */ // clang-format off { 20, 104, 183, 161, 0, -129, -82, 61, 69, -65, -108, 31, 117, -15, -145, -23, 155, 61, -167, -113, 163, 167, -149, -227, 116, 286, -67, -342, -3, 388, 91, -421, -197, 433, 321, -420, -457, 376, 602, -294, -749, 171, 891, 1, -1019, -225, 1123, 507, -1190, -855, 1205, 1279, -1148, -1800, 984, 2456, -656, -3329, 31, 4619, 1275, -6897, -4889, 12679, 29822, 27710, 9244, -5193, -4330, 2732, 3367, -1405, -2793, 571, 2318, -25, -1901, -338, 1527, 574, -1189, -716, 885, 787, -617, -802, 383, 774, -187, -714, 25, 632, 101, -535, -193, 432, 254, -330, -289, 232, 299, -143, -291, 66, 267, -3, -234, -46, 192, 79, -153, -103, 107, 109, -76, -117, 32, 103, -19, -115, -35, 83, 34, -120, -204, -134, -42, 12, }, // tx_coef[128] // clang-format on 128, // tx_coef_size { 0, 0, 0, 0, 0, 0 }, // tx_path_clks[6] 0 // tx_bandwidth }; AD9361_RXFIRConfig bladerf2_rfic_rx_fir_config_dec4 = { 3, // rx (RX1 = 1, RX2 = 2, both = 3) -6, // rx_gain (-12, -6, 0, or 6 dB) 4, // rx_dec (decimate by 1, 2, or 4) /** * RX FIR Filter * Built using https://github.com/analogdevicesinc/libad9361-iio * Branch: filter_generation * Commit: f749cef974f687f696226455dc7684277886cf3b * * This filter is intended to allow sample rates down to 520834 sps. * * It is a 128-tap, decimate-by-4 filter. Note that you MUST use a * interpolate-by-4 filter on TX if you are using this filter. * * Design parameters: * * fdp.Rdata = 520834; * fdp.RxTx = "Rx"; * fdp.Type = "Lowpass"; * fdp.DAC_div = 1; * fdp.HB3 = 3; * fdp.HB2 = 2; * fdp.HB1 = 2; * fdp.FIR = 4; * fdp.PLL_mult = 32; * fdp.converter_rate = 25000000; * fdp.PLL_rate = 800000000; * fdp.Fpass = fdp.Rdata*0.375; * fdp.Fstop = fdp.Rdata*0.50; * fdp.Fcenter = 0; * fdp.Apass = 0.125; * fdp.Astop = 85; * fdp.phEQ = 217; * fdp.wnom = 347220; * fdp.caldiv = 309; * fdp.RFbw = 433256; * fdp.FIRdBmin = 0; * fdp.int_FIR = 1; */ // clang-format off { -30, -24, -46, -54, -28, -6, 50, 82, 108, 84, 28, -60, -136, -172, -132, -24, 122, 244, 280, 192, -2, -238, -410, -428, -250, 80, 436, 656, 614, 276, -252, -760, -1006, -830, -234, 580, 1272, 1494, 1060, 48, -1178, -2086, -2192, -1284, 420, 2296, 3504, 3324, 1502, -1544, -4746, -6664, -5978, -1984, 5054, 13852, 22416, 28606, 30790, 28370, 21974, 13264, 4422, -2522, -6282, -6630, -4358, -892, 2236, 3914, 3762, 2144, -80, -1948, -2774, -2376, -1078, 486, 1652, 2008, 1510, 466, -640, -1352, -1434, -928, -110, 652, 1060, 990, 532, -82, -586, -792, -654, -274, 164, 480, 562, 410, 118, -178, -362, -378, -244, -34, 154, 256, 240, 136, -4, -116, -168, -144, -74, 14, 74, 102, 76, 38, -28, -54, -96, -68, -82, -26, -34, -2, }, // rx_coef[128] // clang-format on 128, // rx_coef_size { 0, 0, 0, 0, 0, 0 }, // rx_path_clks[6] 0 // rx_bandwidth }; AD9361_TXFIRConfig bladerf2_rfic_tx_fir_config_int4 = { 3, // tx (TX1 = 1, TX2 = 2, both = 3) 0, // tx_gain (-6 or 0 dB) 4, // tx_int (interpolate by 1, 2, or 4) /** * TX FIR Filter * Built using https://github.com/analogdevicesinc/libad9361-iio * Branch: filter_generation * Commit: f749cef974f687f696226455dc7684277886cf3b * * This filter is intended to allow sample rates down to 520834 sps. * * It is a 128-tap, interpolate-by-4 filter. Note that you MUST use a * decimate-by-4 filter on RX if you are using this filter. * * Design parameters: * * fdp.Rdata = 520834; * fdp.RxTx = "Tx"; * fdp.Type = "Lowpass"; * fdp.DAC_div = 1; * fdp.HB3 = 3; * fdp.HB2 = 2; * fdp.HB1 = 2; * fdp.FIR = 4; * fdp.PLL_mult = 32; * fdp.converter_rate = 25000000; * fdp.PLL_rate = 800000000; * fdp.Fpass = fdp.Rdata*0.375; * fdp.Fstop = fdp.Rdata*0.50; * fdp.Fcenter = 0; * fdp.Apass = 0.125; * fdp.Astop = 85; * fdp.phEQ = 217; * fdp.wnom = 347220; * fdp.caldiv = 309; * fdp.RFbw = 1253611; * fdp.FIRdBmin = 0; * fdp.int_FIR = 1; */ // clang-format off { -18, 2, -14, 16, 34, 76, 104, 124, 108, 62, -12, -86, -136, -128, -58, 58, 174, 242, 214, 84, -110, -294, -382, -310, -84, 226, 494, 586, 426, 40, -434, -796, -860, -538, 92, 792, 1258, 1226, 622, -386, -1406, -1972, -1730, -628, 1002, 2522, 3200, 2526, 466, -2400, -4986, -6012, -4444, 90, 7064, 15112, 22370, 27018, 27836, 24590, 18120, 10072, 2400, -3220, -5868, -5578, -3214, -106, 2446, 3584, 3126, 1508, -464, -1970, -2484, -1940, -696, 666, 1590, 1764, 1212, 244, -706, -1258, -1242, -732, 10, 656, 964, 850, 412, -134, -560, -710, -560, -208, 178, 444, 500, 352, 88, -172, -330, -336, -212, -24, 144, 230, 218, 124, 2, -100, -146, -126, -62, 18, 82, 110, 98, 60, 12, -28, -52, -56, -50, -32, -18, -8, }, // tx_coef[128] // clang-format on 128, // tx_coef_size { 0, 0, 0, 0, 0, 0 }, // tx_path_clks[6] 0 // tx_bandwidth }; #endif // !defined(BLADERF_NIOS_BUILD) || defined(BLADERF_NIOS_LIBAD936X) bladeRF-2024.05/fpga_common/src/band_select.c000066400000000000000000000040211457144405000206510ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include "band_select.h" #include "lms.h" int band_select(struct bladerf *dev, bladerf_module module, bool low_band) { int status; uint32_t gpio; const uint32_t band = low_band ? 2 : 1; log_debug("Selecting %s band.\n", low_band ? "low" : "high"); status = lms_select_band(dev, module, low_band); if (status != 0) { return status; } #ifndef BLADERF_NIOS_BUILD status = dev->backend->config_gpio_read(dev, &gpio); #else status = CONFIG_GPIO_READ(dev, &gpio); #endif if (status != 0) { return status; } gpio &= ~(module == BLADERF_MODULE_TX ? (3 << 3) : (3 << 5)); gpio |= (module == BLADERF_MODULE_TX ? (band << 3) : (band << 5)); #ifndef BLADERF_NIOS_BUILD return dev->backend->config_gpio_write(dev, gpio); #else return CONFIG_GPIO_WRITE(dev, gpio); #endif } bladeRF-2024.05/fpga_common/src/bladerf2_common.c000066400000000000000000000131451457144405000214460ustar00rootroot00000000000000/* This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2018 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifdef BLADERF_NIOS_BUILD #include "devices.h" #endif // BLADERF_NIOS_BUILD /* Avoid building this in low-memory situations */ #if !defined(BLADERF_NIOS_BUILD) || defined(BLADERF_NIOS_LIBAD936X) #include "bladerf2_common.h" /** * Value of the current sense resistor (R132) */ float const ina219_r_shunt = 0.001F; int errno_ad9361_to_bladerf(int err) { if (err >= 0) { return 0; } switch (err) { case EIO: return BLADERF_ERR_IO; case EAGAIN: return BLADERF_ERR_WOULD_BLOCK; case ENOMEM: return BLADERF_ERR_MEM; case EFAULT: return BLADERF_ERR_UNEXPECTED; case ENODEV: return BLADERF_ERR_NODEV; case EINVAL: return BLADERF_ERR_INVAL; case ETIMEDOUT: return BLADERF_ERR_TIMEOUT; } return BLADERF_ERR_UNEXPECTED; } struct band_port_map const *_get_band_port_map_by_freq(bladerf_channel ch, bladerf_frequency freq) { struct band_port_map const *port_map; size_t port_map_len; int64_t freqi = (int64_t)freq; size_t i; /* Select the band->port map for RX vs TX */ if (BLADERF_CHANNEL_IS_TX(ch)) { port_map = bladerf2_tx_band_port_map; port_map_len = ARRAY_SIZE(bladerf2_tx_band_port_map); } else { port_map = bladerf2_rx_band_port_map; port_map_len = ARRAY_SIZE(bladerf2_rx_band_port_map); } if (NULL == port_map) { return NULL; } /* Search through the band->port map for the desired band */ for (i = 0; i < port_map_len; i++) { if (is_within_range(&port_map[i].frequency, freqi)) { return &port_map[i]; } } /* Wasn't found, return a null ptr */ return NULL; } int _modify_spdt_bits_by_freq(uint32_t *reg, bladerf_channel ch, bool enabled, bladerf_frequency freq) { struct band_port_map const *port_map; uint32_t shift; if (NULL == reg) { return BLADERF_ERR_INVAL; } /* Look up the port configuration for this frequency */ port_map = _get_band_port_map_by_freq(ch, enabled ? freq : 0); if (NULL == port_map) { return BLADERF_ERR_INVAL; } /* Modify the reg bits accordingly */ switch (ch) { case BLADERF_CHANNEL_RX(0): shift = RFFE_CONTROL_RX_SPDT_1; break; case BLADERF_CHANNEL_RX(1): shift = RFFE_CONTROL_RX_SPDT_2; break; case BLADERF_CHANNEL_TX(0): shift = RFFE_CONTROL_TX_SPDT_1; break; case BLADERF_CHANNEL_TX(1): shift = RFFE_CONTROL_TX_SPDT_2; break; default: return BLADERF_ERR_INVAL; } *reg &= ~(RFFE_CONTROL_SPDT_MASK << shift); *reg |= port_map->spdt << shift; return 0; } int _get_rffe_control_bit_for_dir(bladerf_direction dir) { switch (dir) { case BLADERF_RX: return RFFE_CONTROL_ENABLE; case BLADERF_TX: return RFFE_CONTROL_TXNRX; default: return UINT32_MAX; } } int _get_rffe_control_bit_for_ch(bladerf_channel ch) { switch (ch) { case BLADERF_CHANNEL_RX(0): return RFFE_CONTROL_MIMO_RX_EN_0; case BLADERF_CHANNEL_RX(1): return RFFE_CONTROL_MIMO_RX_EN_1; case BLADERF_CHANNEL_TX(0): return RFFE_CONTROL_MIMO_TX_EN_0; case BLADERF_CHANNEL_TX(1): return RFFE_CONTROL_MIMO_TX_EN_1; default: return UINT32_MAX; } } bool _rffe_ch_enabled(uint32_t reg, bladerf_channel ch) { return (reg >> _get_rffe_control_bit_for_ch(ch)) & 0x1; } bool _rffe_dir_enabled(uint32_t reg, bladerf_direction dir) { return (reg >> _get_rffe_control_bit_for_dir(dir)) & 0x1; } bool _rffe_dir_otherwise_enabled(uint32_t reg, bladerf_channel ch) { switch (ch) { case BLADERF_CHANNEL_RX(0): return _rffe_ch_enabled(reg, BLADERF_CHANNEL_RX(1)); case BLADERF_CHANNEL_RX(1): return _rffe_ch_enabled(reg, BLADERF_CHANNEL_RX(0)); case BLADERF_CHANNEL_TX(0): return _rffe_ch_enabled(reg, BLADERF_CHANNEL_TX(1)); case BLADERF_CHANNEL_TX(1): return _rffe_ch_enabled(reg, BLADERF_CHANNEL_TX(0)); } return false; } #endif // !defined(BLADERF_NIOS_BUILD) || defined(BLADERF_NIOS_LIBAD936X) bladeRF-2024.05/fpga_common/src/lms.c000066400000000000000000002764651457144405000172300ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2013-2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ /* * If you're diving into this file, have the following documentation handy. * * As most registers don't have a clearly defined names, or are not grouped by * a specific set of functionality, there's little value in providing named * macro definitions, hence the hard-coded addresses and bitmasks. * * LMS6002D Project page: * http://www.limemicro.com/products/LMS6002D.php?sector=default * * LMS6002D Datasheet: * http://www.limemicro.com/download/LMS6002Dr2-DataSheet-1.2r0.pdf * * LMS6002D Programming and Calibration Guide: * http://www.limemicro.com/download/LMS6002Dr2-Programming_and_Calibration_Guide-1.1r1.pdf * * LMS6002D FAQ: * http://www.limemicro.com/download/FAQ_v1.0r10.pdf * */ #include #include #include #include "lms.h" #ifndef BLADERF_NIOS_BUILD # include "log.h" # include "rel_assert.h" # include "board/board.h" # include "board/bladerf1/capabilities.h" // #define LMS_COUNT_BUSY_WAITS /* Unneeded, due to USB transfer duration */ # define VTUNE_BUSY_WAIT(us) \ do { \ INC_BUSY_WAIT_COUNT(us); \ log_verbose("VTUNE_BUSY_WAIT(%u)\n", us); \ } while(0) #else # include # define VTUNE_BUSY_WAIT(us) { usleep(us); INC_BUSY_WAIT_COUNT(us); } #endif /* By counting the busy waits between a VCOCAP write and VTUNE read, we can * get a sense of how good/bad our initial VCOCAP guess is and how * (in)efficient our tuning routine is. */ #ifdef LMS_COUNT_BUSY_WAITS static volatile uint32_t busy_wait_count = 0; static volatile uint32_t busy_wait_duration = 0; # define INC_BUSY_WAIT_COUNT(us) do { \ busy_wait_count++; \ busy_wait_duration += us; \ } while (0) # define RESET_BUSY_WAIT_COUNT() do { \ busy_wait_count = 0; \ busy_wait_duration = 0; \ } while (0) static inline void PRINT_BUSY_WAIT_INFO() { if (busy_wait_count > 10) { log_warning("Busy wait count: %u\n", busy_wait_count); } else { log_debug("Busy wait count: %u\n", busy_wait_count); } log_debug("Busy wait duration: %u us\n", busy_wait_duration); } #else # define INC_BUSY_WAIT_COUNT(us) do {} while (0) # define RESET_BUSY_WAIT_COUNT() do {} while (0) # define PRINT_BUSY_WAIT_INFO() #endif #define LMS_REFERENCE_HZ (38400000u) #define kHz(x) (x * 1000) #define MHz(x) (x * 1000000) #define GHz(x) (x * 1000000000) struct dc_cal_state { uint8_t clk_en; /* Backup of clock enables */ uint8_t reg0x72; /* Register backup */ bladerf_lna_gain lna_gain; /* Backup of gain values */ int rxvga1_gain; int rxvga2_gain; uint8_t base_addr; /* Base address of DC cal regs */ unsigned int num_submodules; /* # of DC cal submodules to operate on */ int rxvga1_curr_gain; /* Current gains used in retry loops */ int rxvga2_curr_gain; }; #ifndef BLADERF_NIOS_BUILD /* LPF conversion table */ static const unsigned int uint_bandwidths[] = { MHz(28), MHz(20), MHz(14), MHz(12), MHz(10), kHz(8750), MHz(7), MHz(6), kHz(5500), MHz(5), kHz(3840), MHz(3), kHz(2750), kHz(2500), kHz(1750), kHz(1500) }; #endif #define FREQ_RANGE(low_, high_, value_) \ { \ FIELD_INIT(.low, low_), \ FIELD_INIT(.high, high_), \ FIELD_INIT(.value, value_), \ } /* Here we define more conservative band ranges than those in the * LMS FAQ (5.24), with the intent of avoiding the use of "edges" that might * cause the PLLs to lose lock over temperature changes */ #define VCO4_LOW 3800000000ull #define VCO4_HIGH 4535000000ull #define VCO3_LOW VCO4_HIGH #define VCO3_HIGH 5408000000ull #define VCO2_LOW VCO3_HIGH #define VCO2_HIGH 6480000000ull #define VCO1_LOW VCO2_HIGH #define VCO1_HIGH 7600000000ull #if VCO4_LOW/16 != BLADERF_FREQUENCY_MIN # error "BLADERF_FREQUENCY_MIN is not actual VCO4_LOW/16 minimum" #endif #if VCO1_HIGH/2 != BLADERF_FREQUENCY_MAX # error "BLADERF_FREQUENCY_MAX is not actual VCO1_HIGH/2 maximum" #endif /* SELVCO values */ #define VCO4 (4 << 3) #define VCO3 (5 << 3) #define VCO2 (6 << 3) #define VCO1 (7 << 3) /* FRANGE values */ #define DIV2 0x4 #define DIV4 0x5 #define DIV8 0x6 #define DIV16 0x7 #ifndef BLADERF_NIOS_BUILD /* Frequency Range table. Corresponds to the LMS FREQSEL table. * Per feedback from the LMS google group, the last entry, listed as 3.72G * in the programming manual, can be applied up to 3.8G */ static const struct freq_range { uint32_t low; uint32_t high; uint8_t value; } bands[] = { FREQ_RANGE(BLADERF_FREQUENCY_MIN, VCO4_HIGH/16, VCO4 | DIV16), FREQ_RANGE(VCO3_LOW/16, VCO3_HIGH/16, VCO3 | DIV16), FREQ_RANGE(VCO2_LOW/16, VCO2_HIGH/16, VCO2 | DIV16), FREQ_RANGE(VCO1_LOW/16, VCO1_HIGH/16, VCO1 | DIV16), FREQ_RANGE(VCO4_LOW/8, VCO4_HIGH/8, VCO4 | DIV8), FREQ_RANGE(VCO3_LOW/8, VCO3_HIGH/8, VCO3 | DIV8), FREQ_RANGE(VCO2_LOW/8, VCO2_HIGH/8, VCO2 | DIV8), FREQ_RANGE(VCO1_LOW/8, VCO1_HIGH/8, VCO1 | DIV8), FREQ_RANGE(VCO4_LOW/4, VCO4_HIGH/4, VCO4 | DIV4), FREQ_RANGE(VCO3_LOW/4, VCO3_HIGH/4, VCO3 | DIV4), FREQ_RANGE(VCO2_LOW/4, VCO2_HIGH/4, VCO2 | DIV4), FREQ_RANGE(VCO1_LOW/4, VCO1_HIGH/4, VCO1 | DIV4), FREQ_RANGE(VCO4_LOW/2, VCO4_HIGH/2, VCO4 | DIV2), FREQ_RANGE(VCO3_LOW/2, VCO3_HIGH/2, VCO3 | DIV2), FREQ_RANGE(VCO2_LOW/2, VCO2_HIGH/2, VCO2 | DIV2), FREQ_RANGE(VCO1_LOW/2, BLADERF_FREQUENCY_MAX, VCO1 | DIV2), }; /* * The LMS FAQ (Rev 1.0r10, Section 5.20) states that the RXVGA1 codes may be * converted to dB via: * value_db = 20 * log10(127 / (127 - code)) * * However, an offset of 5 appears to be required, yielding: * value_db = 5 + 20 * log10(127 / (127 - code)) * */ static const uint8_t rxvga1_lut_code2val[] = { 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 20, 20, 21, 21, 22, 22, 22, 23, 24, 24, 25, 25, 26, 27, 28, 29, 30 }; /* The closest values from the above forumla have been selected. * indicides 0 - 4 are clamped to 5dB */ static const uint8_t rxvga1_lut_val2code[] = { 2, 2, 2, 2, 2, 2, 14, 26, 37, 47, 56, 63, 70, 76, 82, 87, 91, 95, 99, 102, 104, 107, 109, 111, 113, 114, 116, 117, 118, 119, 120, }; static const uint8_t lms_reg_dumpset[] = { /* Top level configuration */ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0E, 0x0F, /* TX PLL Configuration */ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, /* RX PLL Configuration */ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, /* TX LPF Modules Configuration */ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, /* TX RF Modules Configuration */ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, /* RX LPF, ADC, and DAC Modules Configuration */ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, /* RX VGA2 Configuration */ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, /* RX FE Modules Configuration */ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C }; #endif /* Register 0x08: RF loopback config and additional BB config * * LBRFEN[3:0] @ [3:0] * 0000 - RF loopback disabled * 0001 - TXMIX output connected to LNA1 path * 0010 - TXMIX output connected to LNA2 path * 0011 - TXMIX output connected to LNA3 path * else - Reserved * * LBEN_OPIN @ [4] * 0 - Disabled * 1 - TX BB loopback signal is connected to RX output pins * * LBEN_VGA2IN @ [5] * 0 - Disabled * 1 - TX BB loopback signal is connected to RXVGA2 input * * LBEN_LPFIN @ [6] * 0 - Disabled * 1 - TX BB loopback signal is connected to RXLPF input * */ #define LBEN_OPIN (1 << 4) #define LBEN_VGA2IN (1 << 5) #define LBEN_LPFIN (1 << 6) #define LBEN_MASK (LBEN_OPIN | LBEN_VGA2IN | LBEN_LPFIN) #define LBRFEN_LNA1 1 #define LBRFEN_LNA2 2 #define LBRFEN_LNA3 3 #define LBRFEN_MASK 0xf /* [3:2] are marked reserved */ /* Register 0x46: Baseband loopback config * * LOOPBBEN[1:0] @ [3:2] * 00 - All Baseband loops opened (default) * 01 - TX loopback path connected from TXLPF output * 10 - TX loopback path connected from TXVGA1 output * 11 - TX loopback path connected from Env/peak detect output */ #define LOOPBBEN_TXLPF (1 << 2) #define LOOPBBEN_TXVGA (2 << 2) #define LOOPBBEN_ENVPK (3 << 2) #define LOOBBBEN_MASK (3 << 2) static inline int is_loopback_enabled(struct bladerf *dev) { bladerf_loopback loopback; int status; status = lms_get_loopback_mode(dev, &loopback); if (status != 0) { return status; } return loopback != BLADERF_LB_NONE; } /* VCOCAP estimation. The MIN/MAX values were determined experimentally by * sampling the VCOCAP values over frequency, for each of the VCOs and finding * these to be in the "middle" of a linear regression. Although the curve * isn't actually linear, the linear approximation yields satisfactory error. */ #define VCOCAP_MAX_VALUE 0x3f #define VCOCAP_EST_MIN 15 #define VCOCAP_EST_MAX 55 #define VCOCAP_EST_RANGE (VCOCAP_EST_MAX - VCOCAP_EST_MIN) #define VCOCAP_EST_THRESH 7 /* Complain if we're +/- 7 on our guess */ /* This is a linear interpolation of our experimentally identified * mean VCOCAP min and VCOCAP max values: */ static inline uint8_t estimate_vcocap(unsigned int f_target, unsigned int f_low, unsigned int f_high) { unsigned int vcocap; const float denom = (float) (f_high - f_low); const float num = VCOCAP_EST_RANGE; const float f_diff = (float) (f_target - f_low); vcocap = (unsigned int) ((num / denom * f_diff) + 0.5 + VCOCAP_EST_MIN); if (vcocap > VCOCAP_MAX_VALUE) { log_warning("Clamping VCOCAP estimate from %u to %u\n", vcocap, VCOCAP_MAX_VALUE); vcocap = VCOCAP_MAX_VALUE; } else { log_verbose("VCOCAP estimate: %u\n", vcocap); } return (uint8_t) vcocap; } static int write_pll_config(struct bladerf *dev, bladerf_module module, uint8_t freqsel, bool low_band) { int status; uint8_t regval; uint8_t selout; uint8_t addr; if (module == BLADERF_MODULE_TX) { addr = 0x15; } else { addr = 0x25; } status = LMS_READ(dev, addr, ®val); if (status != 0) { return status; } status = is_loopback_enabled(dev); if (status < 0) { return status; } if (status == 0) { /* Loopback not enabled - update the PLL output buffer. */ selout = low_band ? 1 : 2; regval = (freqsel << 2) | selout; } else { /* Loopback is enabled - don't touch PLL output buffer. */ regval = (regval & ~0xfc) | (freqsel << 2); } return LMS_WRITE(dev, addr, regval); } #ifndef BLADERF_NIOS_BUILD int lms_config_charge_pumps(struct bladerf *dev, bladerf_module module) { int status; uint8_t data; const uint8_t base = (module == BLADERF_MODULE_RX) ? 0x20 : 0x10; /* Set the PLL Ichp, Iup and Idn currents */ status = LMS_READ(dev, base + 6, &data); if (status != 0) { return status; } data &= ~(0x1f); data |= 0x0c; status = LMS_WRITE(dev, base + 6, data); if (status != 0) { return status; } status = LMS_READ(dev, base + 7, &data); if (status != 0) { return status; } data &= ~(0x1f); data |= 3; status = LMS_WRITE(dev, base + 7, data); if (status != 0) { return status; } status = LMS_READ(dev, base + 8, &data); if (status != 0) { return status; } data &= ~(0x1f); data |= 3; status = LMS_WRITE(dev, base + 8, data); if (status != 0) { return status; } return 0; } #endif #ifndef BLADERF_NIOS_BUILD int lms_lpf_enable(struct bladerf *dev, bladerf_module mod, bool enable) { int status; uint8_t data; const uint8_t reg = (mod == BLADERF_MODULE_RX) ? 0x54 : 0x34; status = LMS_READ(dev, reg, &data); if (status != 0) { return status; } if (enable) { data |= (1 << 1); } else { data &= ~(1 << 1); } status = LMS_WRITE(dev, reg, data); if (status != 0) { return status; } /* Check to see if we are bypassed */ status = LMS_READ(dev, reg + 1, &data); if (status != 0) { return status; } else if (data & (1 << 6)) { /* Bypass is enabled; switch back to normal operation */ data &= ~(1 << 6); status = LMS_WRITE(dev, reg + 1, data); } return status; } #endif #ifndef BLADERF_NIOS_BUILD int lms_lpf_get_mode(struct bladerf *dev, bladerf_module mod, bladerf_lpf_mode *mode) { int status; const uint8_t reg = (mod == BLADERF_MODULE_RX) ? 0x54 : 0x34; uint8_t data_h, data_l; bool lpf_enabled, lpf_bypassed; status = LMS_READ(dev, reg, &data_l); if (status != 0) { return status; } status = LMS_READ(dev, reg + 1, &data_h); if (status != 0) { return status; } lpf_enabled = (data_l & (1 << 1)) != 0; lpf_bypassed = (data_h & (1 << 6)) != 0; if (lpf_enabled && !lpf_bypassed) { *mode = BLADERF_LPF_NORMAL; } else if (!lpf_enabled && lpf_bypassed) { *mode = BLADERF_LPF_BYPASSED; } else if (!lpf_enabled && !lpf_bypassed) { *mode = BLADERF_LPF_DISABLED; } else { log_debug("Invalid LPF configuration: 0x%02x, 0x%02x\n", data_l, data_h); status = BLADERF_ERR_INVAL; } return status; } #endif #ifndef BLADERF_NIOS_BUILD int lms_lpf_set_mode(struct bladerf *dev, bladerf_module mod, bladerf_lpf_mode mode) { int status; const uint8_t reg = (mod == BLADERF_MODULE_RX) ? 0x54 : 0x34; uint8_t data_l, data_h; status = LMS_READ(dev, reg, &data_l); if (status != 0) { return status; } status = LMS_READ(dev, reg + 1, &data_h); if (status != 0) { return status; } switch (mode) { case BLADERF_LPF_NORMAL: data_l |= (1 << 1); /* Enable LPF */ data_h &= ~(1 << 6); /* Disable LPF bypass */ break; case BLADERF_LPF_BYPASSED: data_l &= ~(1 << 1); /* Power down LPF */ data_h |= (1 << 6); /* Enable LPF bypass */ break; case BLADERF_LPF_DISABLED: data_l &= ~(1 << 1); /* Power down LPF */ data_h &= ~(1 << 6); /* Disable LPF bypass */ break; default: log_debug("Invalid LPF mode: %d\n", mode); return BLADERF_ERR_INVAL; } status = LMS_WRITE(dev, reg, data_l); if (status != 0) { return status; } status = LMS_WRITE(dev, reg + 1, data_h); return status; } #endif #ifndef BLADERF_NIOS_BUILD int lms_set_bandwidth(struct bladerf *dev, bladerf_module mod, lms_bw bw) { int status; uint8_t data; const uint8_t reg = (mod == BLADERF_MODULE_RX) ? 0x54 : 0x34; status = LMS_READ(dev, reg, &data); if (status != 0) { return status; } data &= ~0x3c; /* Clear out previous bandwidth setting */ data |= (bw << 2); /* Apply new bandwidth setting */ return LMS_WRITE(dev, reg, data); } #endif #ifndef BLADERF_NIOS_BUILD int lms_get_bandwidth(struct bladerf *dev, bladerf_module mod, lms_bw *bw) { int status; uint8_t data; const uint8_t reg = (mod == BLADERF_MODULE_RX) ? 0x54 : 0x34; status = LMS_READ(dev, reg, &data); if (status != 0) { return status; } /* Fetch bandwidth table index from reg[5:2] */ data >>= 2; data &= 0xf; assert(data < ARRAY_SIZE(uint_bandwidths)); *bw = (lms_bw)data; return 0; } #endif #ifndef BLADERF_NIOS_BUILD lms_bw lms_uint2bw(unsigned int req) { lms_bw ret; if ( req <= kHz(1500)) ret = BW_1p5MHz; else if (req <= kHz(1750)) ret = BW_1p75MHz; else if (req <= kHz(2500)) ret = BW_2p5MHz; else if (req <= kHz(2750)) ret = BW_2p75MHz; else if (req <= MHz(3) ) ret = BW_3MHz; else if (req <= kHz(3840)) ret = BW_3p84MHz; else if (req <= MHz(5) ) ret = BW_5MHz; else if (req <= kHz(5500)) ret = BW_5p5MHz; else if (req <= MHz(6) ) ret = BW_6MHz; else if (req <= MHz(7) ) ret = BW_7MHz; else if (req <= kHz(8750)) ret = BW_8p75MHz; else if (req <= MHz(10) ) ret = BW_10MHz; else if (req <= MHz(12) ) ret = BW_12MHz; else if (req <= MHz(14) ) ret = BW_14MHz; else if (req <= MHz(20) ) ret = BW_20MHz; else ret = BW_28MHz; return ret; } #endif #ifndef BLADERF_NIOS_BUILD /* Return the table entry */ unsigned int lms_bw2uint(lms_bw bw) { unsigned int idx = bw & 0xf; assert(idx < ARRAY_SIZE(uint_bandwidths)); return uint_bandwidths[idx]; } #endif /* Enable dithering on the module PLL */ #ifndef BLADERF_NIOS_BUILD int lms_dither_enable(struct bladerf *dev, bladerf_module mod, uint8_t nbits, bool enable) { int status; /* Select the base address based on which PLL we are configuring */ const uint8_t reg = (mod == BLADERF_MODULE_RX) ? 0x24 : 0x14; uint8_t data; /* Valid range is 1 - 8 bits (inclusive) */ if (nbits < 1 || nbits > 8) { return BLADERF_ERR_INVAL; } /* Read what we currently have in there */ status = LMS_READ(dev, reg, &data); if (status != 0) { return status; } if (enable) { /* Enable dithering */ data |= (1 << 7); /* Clear out the previous setting of the number of bits to dither */ data &= ~(7 << 4); /* Update with the desired number of bits to dither */ data |= (((nbits - 1) & 7) << 4); } else { /* Clear dithering enable bit */ data &= ~(1 << 7); } /* Write it out */ status = LMS_WRITE(dev, reg, data); return status; } #endif /* Soft reset of the LMS */ #ifndef BLADERF_NIOS_BUILD int lms_soft_reset(struct bladerf *dev) { int status = LMS_WRITE(dev, 0x05, 0x12); if (status == 0) { status = LMS_WRITE(dev, 0x05, 0x32); } return status; } #endif /* Set the gain on the LNA */ #ifndef BLADERF_NIOS_BUILD int lms_lna_set_gain(struct bladerf *dev, bladerf_lna_gain gain) { int status; uint8_t data; if (gain == BLADERF_LNA_GAIN_BYPASS || gain == BLADERF_LNA_GAIN_MID || gain == BLADERF_LNA_GAIN_MAX) { status = LMS_READ(dev, 0x75, &data); if (status == 0) { data &= ~(3 << 6); /* Clear out previous gain setting */ data |= ((gain & 3) << 6); /* Update gain value */ status = LMS_WRITE(dev, 0x75, data); } } else { status = BLADERF_ERR_INVAL; } return status; } #endif #ifndef BLADERF_NIOS_BUILD int lms_lna_get_gain(struct bladerf *dev, bladerf_lna_gain *gain) { int status; uint8_t data; status = LMS_READ(dev, 0x75, &data); if (status == 0) { data >>= 6; data &= 3; *gain = (bladerf_lna_gain)data; if (*gain == BLADERF_LNA_GAIN_UNKNOWN) { status = BLADERF_ERR_INVAL; } } return status; } #endif /* Select which LNA to enable */ int lms_select_lna(struct bladerf *dev, lms_lna lna) { int status; uint8_t data; status = LMS_READ(dev, 0x75, &data); if (status != 0) { return status; } data &= ~(3 << 4); data |= ((lna & 3) << 4); return LMS_WRITE(dev, 0x75, data); } #ifndef BLADERF_NIOS_BUILD int lms_get_lna(struct bladerf *dev, lms_lna *lna) { int status; uint8_t data; status = LMS_READ(dev, 0x75, &data); if (status != 0) { *lna = LNA_NONE; return status; } else { *lna = (lms_lna) ((data >> 4) & 0x3); return 0; } } #endif /* Enable bit is in reserved register documented in this thread: * https://groups.google.com/forum/#!topic/limemicro-opensource/8iTannzlfzg */ #ifndef BLADERF_NIOS_BUILD int lms_rxvga1_enable(struct bladerf *dev, bool enable) { int status; uint8_t data; status = LMS_READ(dev, 0x7d, &data); if (status != 0) { return status; } if (enable) { data &= ~(1 << 3); } else { data |= (1 << 3); } return LMS_WRITE(dev, 0x7d, data); } #endif /* Set the RFB_TIA_RXFE mixer gain */ #ifndef BLADERF_NIOS_BUILD int lms_rxvga1_set_gain(struct bladerf *dev, int gain) { if (gain > BLADERF_RXVGA1_GAIN_MAX) { gain = BLADERF_RXVGA1_GAIN_MAX; log_info("Clamping RXVGA1 gain to %ddB\n", gain); } else if (gain < BLADERF_RXVGA1_GAIN_MIN) { gain = BLADERF_RXVGA1_GAIN_MIN; log_info("Clamping RXVGA1 gain to %ddB\n", gain); } return LMS_WRITE(dev, 0x76, rxvga1_lut_val2code[gain]); } #endif /* Get the RFB_TIA_RXFE mixer gain */ #ifndef BLADERF_NIOS_BUILD int lms_rxvga1_get_gain(struct bladerf *dev, int *gain) { uint8_t data; int status = LMS_READ(dev, 0x76, &data); if (status == 0) { data &= 0x7f; if (data > 120) { data = 120; } *gain = rxvga1_lut_code2val[data]; } return status; } #endif /* Enable RXVGA2 */ #ifndef BLADERF_NIOS_BUILD int lms_rxvga2_enable(struct bladerf *dev, bool enable) { int status; uint8_t data; status = LMS_READ(dev, 0x64, &data); if (status != 0) { return status; } if (enable) { data |= (1 << 1); } else { data &= ~(1 << 1); } return LMS_WRITE(dev, 0x64, data); } #endif /* Set the gain on RXVGA2 */ #ifndef BLADERF_NIOS_BUILD int lms_rxvga2_set_gain(struct bladerf *dev, int gain) { if (gain > BLADERF_RXVGA2_GAIN_MAX) { gain = BLADERF_RXVGA2_GAIN_MAX; log_info("Clamping RXVGA2 gain to %ddB\n", gain); } else if (gain < BLADERF_RXVGA2_GAIN_MIN) { gain = BLADERF_RXVGA2_GAIN_MIN; log_info("Clamping RXVGA2 gain to %ddB\n", gain); } /* 3 dB per register code */ return LMS_WRITE(dev, 0x65, gain / 3); } #endif #ifndef BLADERF_NIOS_BUILD int lms_rxvga2_get_gain(struct bladerf *dev, int *gain) { uint8_t data; const int status = LMS_READ(dev, 0x65, &data); if (status == 0) { /* 3 dB per code */ data *= 3; *gain = data; } return status; } #endif int lms_select_pa(struct bladerf *dev, lms_pa pa) { int status; uint8_t data; status = LMS_READ(dev, 0x44, &data); /* Disable PA1, PA2, and AUX PA - we'll enable as requested below. */ data &= ~0x1C; /* AUX PA powered down */ data |= (1 << 1); switch (pa) { case PA_AUX: data &= ~(1 << 1); /* Power up the AUX PA */ break; case PA_1: data |= (2 << 2); /* PA_EN[2:0] = 010 - Enable PA1 */ break; case PA_2: data |= (4 << 2); /* PA_EN[2:0] = 100 - Enable PA2 */ break; case PA_NONE: break; default: assert(!"Invalid PA selection"); status = BLADERF_ERR_INVAL; } if (status == 0) { status = LMS_WRITE(dev, 0x44, data); } return status; }; #ifndef BLADERF_NIOS_BUILD int lms_peakdetect_enable(struct bladerf *dev, bool enable) { int status; uint8_t data; status = LMS_READ(dev, 0x44, &data); if (status == 0) { if (enable) { data &= ~(1 << 0); } else { data |= (1 << 0); } status = LMS_WRITE(dev, 0x44, data); } return status; } #endif #ifndef BLADERF_NIOS_BUILD int lms_enable_rffe(struct bladerf *dev, bladerf_module module, bool enable) { int status; uint8_t data; uint8_t addr = (module == BLADERF_MODULE_TX ? 0x40 : 0x70); status = LMS_READ(dev, addr, &data); if (status == 0) { if (module == BLADERF_MODULE_TX) { if (enable) { data |= (1 << 1); } else { data &= ~(1 << 1); } } else { if (enable) { data |= (1 << 0); } else { data &= ~(1 << 0); } } status = LMS_WRITE(dev, addr, data); } return status; } #endif #ifndef BLADERF_NIOS_BUILD int lms_txvga2_set_gain(struct bladerf *dev, int gain_int) { int status; uint8_t data; int8_t gain; if (gain_int > BLADERF_TXVGA2_GAIN_MAX) { gain = BLADERF_TXVGA2_GAIN_MAX; log_info("Clamping TXVGA2 gain to %ddB\n", gain); } else if (gain_int < BLADERF_TXVGA2_GAIN_MIN) { gain = 0; log_info("Clamping TXVGA2 gain to %ddB\n", gain); } else { gain = gain_int; } status = LMS_READ(dev, 0x45, &data); if (status == 0) { data &= ~(0x1f << 3); data |= ((gain & 0x1f) << 3); status = LMS_WRITE(dev, 0x45, data); } return status; } #endif #ifndef BLADERF_NIOS_BUILD int lms_txvga2_get_gain(struct bladerf *dev, int *gain) { int status; uint8_t data; status = LMS_READ(dev, 0x45, &data); if (status == 0) { *gain = (data >> 3) & 0x1f; /* Register values of 25-31 all correspond to 25 dB */ if (*gain > 25) { *gain = 25; } } return status; } #endif #ifndef BLADERF_NIOS_BUILD int lms_txvga1_set_gain(struct bladerf *dev, int gain_int) { int8_t gain; if (gain_int < BLADERF_TXVGA1_GAIN_MIN) { gain = BLADERF_TXVGA1_GAIN_MIN; log_info("Clamping TXVGA1 gain to %ddB\n", gain); } else if (gain_int > BLADERF_TXVGA1_GAIN_MAX) { gain = BLADERF_TXVGA1_GAIN_MAX; log_info("Clamping TXVGA1 gain to %ddB\n", gain); } else { gain = gain_int; } /* Apply offset to convert gain to register table index */ gain = (gain + 35); /* Since 0x41 is only VGA1GAIN, we don't need to RMW */ return LMS_WRITE(dev, 0x41, gain); } #endif #ifndef BLADERF_NIOS_BUILD int lms_txvga1_get_gain(struct bladerf *dev, int *gain) { int status; uint8_t data; status = LMS_READ(dev, 0x41, &data); if (status == 0) { /* Clamp to max value */ data = data & 0x1f; /* Convert table index to value */ *gain = data - 35; } return status; } #endif #ifndef BLADERF_NIOS_BUILD static inline int enable_lna_power(struct bladerf *dev, bool enable) { int status; uint8_t regval; /* Magic test register to power down LNAs */ status = LMS_READ(dev, 0x7d, ®val); if (status != 0) { return status; } if (enable) { regval &= ~(1 << 0); } else { regval |= (1 << 0); } status = LMS_WRITE(dev, 0x7d, regval); if (status != 0) { return status; } /* Decode test registers */ status = LMS_READ(dev, 0x70, ®val); if (status != 0) { return status; } if (enable) { regval &= ~(1 << 1); } else { regval |= (1 << 1); } return LMS_WRITE(dev, 0x70, regval); } #endif /* Power up/down RF loopback switch */ #ifndef BLADERF_NIOS_BUILD static inline int enable_rf_loopback_switch(struct bladerf *dev, bool enable) { int status; uint8_t regval; status = LMS_READ(dev, 0x0b, ®val); if (status != 0) { return status; } if (enable) { regval |= (1 << 0); } else { regval &= ~(1 << 0); } return LMS_WRITE(dev, 0x0b, regval); } #endif /* Configure TX-side of loopback */ #ifndef BLADERF_NIOS_BUILD static int loopback_tx(struct bladerf *dev, bladerf_loopback mode) { int status = 0; switch(mode) { case BLADERF_LB_BB_TXLPF_RXVGA2: case BLADERF_LB_BB_TXLPF_RXLPF: case BLADERF_LB_BB_TXVGA1_RXVGA2: case BLADERF_LB_BB_TXVGA1_RXLPF: break; case BLADERF_LB_RF_LNA1: case BLADERF_LB_RF_LNA2: case BLADERF_LB_RF_LNA3: status = lms_select_pa(dev, PA_AUX); break; case BLADERF_LB_NONE: { struct lms_freq f; /* Restore proper settings (PA) for this frequency */ status = lms_get_frequency(dev, BLADERF_MODULE_TX, &f); if (status != 0) { return status; } status = lms_set_frequency(dev, BLADERF_MODULE_TX, lms_frequency_to_hz(&f)); if (status != 0) { return status; } status = lms_select_band(dev, BLADERF_MODULE_TX, lms_frequency_to_hz(&f) < BLADERF1_BAND_HIGH); break; } default: assert(!"Invalid loopback mode encountered"); status = BLADERF_ERR_INVAL; } return status; } #endif /* Configure RX-side of loopback */ #ifndef BLADERF_NIOS_BUILD static int loopback_rx(struct bladerf *dev, bladerf_loopback mode) { int status; bladerf_lpf_mode lpf_mode; uint8_t lna; uint8_t regval; status = lms_lpf_get_mode(dev, BLADERF_MODULE_RX, &lpf_mode); if (status != 0) { return status; } switch (mode) { case BLADERF_LB_BB_TXLPF_RXVGA2: case BLADERF_LB_BB_TXVGA1_RXVGA2: /* Ensure RXVGA2 is enabled */ status = lms_rxvga2_enable(dev, true); if (status != 0) { return status; } /* RXLPF must be disabled */ status = lms_lpf_set_mode(dev, BLADERF_MODULE_RX, BLADERF_LPF_DISABLED); if (status != 0) { return status; } break; case BLADERF_LB_BB_TXLPF_RXLPF: case BLADERF_LB_BB_TXVGA1_RXLPF: /* RXVGA1 must be disabled */ status = lms_rxvga1_enable(dev, false); if (status != 0) { return status; } /* Enable the RXLPF if needed */ if (lpf_mode == BLADERF_LPF_DISABLED) { status = lms_lpf_set_mode(dev, BLADERF_MODULE_RX, BLADERF_LPF_NORMAL); if (status != 0) { return status; } } /* Ensure RXVGA2 is enabled */ status = lms_rxvga2_enable(dev, true); if (status != 0) { return status; } break; case BLADERF_LB_RF_LNA1: case BLADERF_LB_RF_LNA2: case BLADERF_LB_RF_LNA3: lna = mode - BLADERF_LB_RF_LNA1 + 1; assert(lna >= 1 && lna <= 3); /* Power down LNAs */ status = enable_lna_power(dev, false); if (status != 0) { return status; } /* Ensure RXVGA1 is enabled */ status = lms_rxvga1_enable(dev, true); if (status != 0) { return status; } /* Enable the RXLPF if needed */ if (lpf_mode == BLADERF_LPF_DISABLED) { status = lms_lpf_set_mode(dev, BLADERF_MODULE_RX, BLADERF_LPF_NORMAL); if (status != 0) { return status; } } /* Ensure RXVGA2 is enabled */ status = lms_rxvga2_enable(dev, true); if (status != 0) { return status; } /* Select output buffer in RX PLL and select the desired LNA */ status = LMS_READ(dev, 0x25, ®val); if (status != 0) { return status; } regval &= ~0x03; regval |= lna; status = LMS_WRITE(dev, 0x25, regval); if (status != 0) { return status; } status = lms_select_lna(dev, (lms_lna) lna); if (status != 0) { return status; } /* Enable RF loopback switch */ status = enable_rf_loopback_switch(dev, true); if (status != 0) { return status; } break; case BLADERF_LB_NONE: { struct lms_freq f; /* Ensure all RX blocks are enabled */ status = lms_rxvga1_enable(dev, true); if (status != 0) { return status; } if (lpf_mode == BLADERF_LPF_DISABLED) { status = lms_lpf_set_mode(dev, BLADERF_MODULE_RX, BLADERF_LPF_NORMAL); if (status != 0) { return status; } } status = lms_rxvga2_enable(dev, true); if (status != 0) { return status; } /* Disable RF loopback switch */ status = enable_rf_loopback_switch(dev, false); if (status != 0) { return status; } /* Power up LNAs */ status = enable_lna_power(dev, true); if (status != 0) { return status; } /* Restore proper settings (LNA, RX PLL) for this frequency */ status = lms_get_frequency(dev, BLADERF_MODULE_RX, &f); if (status != 0) { return status; } status = lms_set_frequency(dev, BLADERF_MODULE_RX, lms_frequency_to_hz(&f)); if (status != 0) { return status; } status = lms_select_band(dev, BLADERF_MODULE_RX, lms_frequency_to_hz(&f) < BLADERF1_BAND_HIGH); break; } default: assert(!"Invalid loopback mode encountered"); status = BLADERF_ERR_INVAL; } return status; } #endif /* Configure "switches" in loopback path */ #ifndef BLADERF_NIOS_BUILD static int loopback_path(struct bladerf *dev, bladerf_loopback mode) { int status; uint8_t loopbben, lben_lbrf; status = LMS_READ(dev, 0x46, &loopbben); if (status != 0) { return status; } status = LMS_READ(dev, 0x08, &lben_lbrf); if (status != 0) { return status; } /* Default to baseband loopback being disabled */ loopbben &= ~LOOBBBEN_MASK; /* Default to RF and BB loopback options being disabled */ lben_lbrf &= ~(LBRFEN_MASK | LBEN_MASK); switch(mode) { case BLADERF_LB_BB_TXLPF_RXVGA2: loopbben |= LOOPBBEN_TXLPF; lben_lbrf |= LBEN_VGA2IN; break; case BLADERF_LB_BB_TXLPF_RXLPF: loopbben |= LOOPBBEN_TXLPF; lben_lbrf |= LBEN_LPFIN; break; case BLADERF_LB_BB_TXVGA1_RXVGA2: loopbben |= LOOPBBEN_TXVGA; lben_lbrf |= LBEN_VGA2IN; break; case BLADERF_LB_BB_TXVGA1_RXLPF: loopbben |= LOOPBBEN_TXVGA; lben_lbrf |= LBEN_LPFIN; break; case BLADERF_LB_RF_LNA1: lben_lbrf |= LBRFEN_LNA1; break; case BLADERF_LB_RF_LNA2: lben_lbrf |= LBRFEN_LNA2; break; case BLADERF_LB_RF_LNA3: lben_lbrf |= LBRFEN_LNA3; break; case BLADERF_LB_NONE: break; default: return BLADERF_ERR_INVAL; } status = LMS_WRITE(dev, 0x46, loopbben); if (status == 0) { status = LMS_WRITE(dev, 0x08, lben_lbrf); } return status; } #endif #ifndef BLADERF_NIOS_BUILD int lms_set_loopback_mode(struct bladerf *dev, bladerf_loopback mode) { int status; /* Verify a valid mode is provided before shutting anything down */ switch (mode) { case BLADERF_LB_BB_TXLPF_RXVGA2: case BLADERF_LB_BB_TXLPF_RXLPF: case BLADERF_LB_BB_TXVGA1_RXVGA2: case BLADERF_LB_BB_TXVGA1_RXLPF: case BLADERF_LB_RF_LNA1: case BLADERF_LB_RF_LNA2: case BLADERF_LB_RF_LNA3: case BLADERF_LB_NONE: break; default: return BLADERF_ERR_INVAL; } /* Disable all PA/LNAs while entering loopback mode or making changes */ status = lms_select_pa(dev, PA_NONE); if (status != 0) { return status; } status = lms_select_lna(dev, LNA_NONE); if (status != 0) { return status; } /* Disconnect loopback paths while we re-configure blocks */ status = loopback_path(dev, BLADERF_LB_NONE); if (status != 0) { return status; } /* Configure the RX side of the loopback path */ status = loopback_rx(dev, mode); if (status != 0) { return status; } /* Configure the TX side of the path */ status = loopback_tx(dev, mode); if (status != 0) { return status; } /* Configure "switches" along the loopback path */ status = loopback_path(dev, mode); if (status != 0) { return status; } return 0; } #endif int lms_get_loopback_mode(struct bladerf *dev, bladerf_loopback *loopback) { int status; uint8_t lben_lbrfen, loopbben; status = LMS_READ(dev, 0x08, &lben_lbrfen); if (status != 0) { return status; } status = LMS_READ(dev, 0x46, &loopbben); if (status != 0) { return status; } switch (lben_lbrfen & 0x7) { case LBRFEN_LNA1: *loopback = BLADERF_LB_RF_LNA1; return 0; case LBRFEN_LNA2: *loopback = BLADERF_LB_RF_LNA2; return 0; case LBRFEN_LNA3: *loopback = BLADERF_LB_RF_LNA3; return 0; default: break; } switch (lben_lbrfen & LBEN_MASK) { case LBEN_VGA2IN: if (loopbben & LOOPBBEN_TXLPF) { *loopback = BLADERF_LB_BB_TXLPF_RXVGA2; return 0; } else if (loopbben & LOOPBBEN_TXVGA) { *loopback = BLADERF_LB_BB_TXVGA1_RXVGA2; return 0; } break; case LBEN_LPFIN: if (loopbben & LOOPBBEN_TXLPF) { *loopback = BLADERF_LB_BB_TXLPF_RXLPF; return 0; } else if (loopbben & LOOPBBEN_TXVGA) { *loopback = BLADERF_LB_BB_TXVGA1_RXLPF; return 0; } break; default: break; } *loopback = BLADERF_LB_NONE; return 0; } /* Top level power down of the LMS */ #ifndef BLADERF_NIOS_BUILD int lms_power_down(struct bladerf *dev) { int status; uint8_t data; status = LMS_READ(dev, 0x05, &data); if (status == 0) { data &= ~(1 << 4); status = LMS_WRITE(dev, 0x05, data); } return status; } #endif /* Enable the PLL of a module */ #ifndef BLADERF_NIOS_BUILD int lms_pll_enable(struct bladerf *dev, bladerf_module mod, bool enable) { int status; const uint8_t reg = (mod == BLADERF_MODULE_RX) ? 0x24 : 0x14; uint8_t data; status = LMS_READ(dev, reg, &data); if (status == 0) { if (enable) { data |= (1 << 3); } else { data &= ~(1 << 3); } status = LMS_WRITE(dev, reg, data); } return status; } #endif /* Enable the RX subsystem */ #ifndef BLADERF_NIOS_BUILD int lms_rx_enable(struct bladerf *dev, bool enable) { int status; uint8_t data; status = LMS_READ(dev, 0x05, &data); if (status == 0) { if (enable) { data |= (1 << 2); } else { data &= ~(1 << 2); } status = LMS_WRITE(dev, 0x05, data); } return status; } #endif /* Enable the TX subsystem */ #ifndef BLADERF_NIOS_BUILD int lms_tx_enable(struct bladerf *dev, bool enable) { int status; uint8_t data; status = LMS_READ(dev, 0x05, &data); if (status == 0) { if (enable) { data |= (1 << 3); } else { data &= ~(1 << 3); } status = LMS_WRITE(dev, 0x05, data); } return status; } #endif /* Converts frequency structure to Hz */ #ifndef BLADERF_NIOS_BUILD uint32_t lms_frequency_to_hz(struct lms_freq *f) { uint64_t pll_coeff; uint32_t div; pll_coeff = (((uint64_t)f->nint) << 23) + f->nfrac; div = (f->x << 23); return (uint32_t)(((LMS_REFERENCE_HZ * pll_coeff) + (div >> 1)) / div); } #endif /* Print a frequency structure */ #ifndef BLADERF_NIOS_BUILD void lms_print_frequency(struct lms_freq *f) { log_verbose("---- Frequency ----\n"); log_verbose(" x : %d\n", f->x); log_verbose(" nint : %d\n", f->nint); log_verbose(" nfrac : %u\n", f->nfrac); log_verbose(" freqsel : 0x%02x\n", f->freqsel); log_verbose(" reference: %u\n", LMS_REFERENCE_HZ); log_verbose(" freq : %u\n", lms_frequency_to_hz(f)); } #define PRINT_FREQUENCY lms_print_frequency #else #define PRINT_FREQUENCY(f) #endif /* Get the frequency structure */ #ifndef BLADERF_NIOS_BUILD int lms_get_frequency(struct bladerf *dev, bladerf_module mod, struct lms_freq *f) { const uint8_t base = (mod == BLADERF_MODULE_RX) ? 0x20 : 0x10; int status; uint8_t data; status = LMS_READ(dev, base + 0, &data); if (status != 0) { return status; } f->nint = ((uint16_t)data) << 1; status = LMS_READ(dev, base + 1, &data); if (status != 0) { return status; } f->nint |= (data & 0x80) >> 7; f->nfrac = ((uint32_t)data & 0x7f) << 16; status = LMS_READ(dev, base + 2, &data); if (status != 0) { return status; } f->nfrac |= ((uint32_t)data)<<8; status = LMS_READ(dev, base + 3, &data); if (status != 0) { return status; } f->nfrac |= data; status = LMS_READ(dev, base + 5, &data); if (status != 0) { return status; } f->freqsel = (data>>2); f->x = 1 << ((f->freqsel & 7) - 3); status = LMS_READ(dev, base + 9, &data); if (status != 0) { return status; } f->vcocap = data & 0x3f; return status; } #endif #ifndef BLADERF_NIOS_BUILD int lms_get_quick_tune(struct bladerf *dev, bladerf_module mod, struct bladerf_quick_tune *quick_tune) { struct lms_freq f; uint32_t val; int status = lms_get_frequency(dev, mod, &f); if (status == 0) { quick_tune->freqsel = f.freqsel; quick_tune->vcocap = f.vcocap; quick_tune->nint = f.nint; quick_tune->nfrac = f.nfrac; quick_tune->xb_gpio = 0; status = dev->backend->expansion_gpio_read(dev, &val); if (status != 0) goto out; if (dev->xb == BLADERF_XB_200) { quick_tune->xb_gpio |= LMS_FREQ_XB_200_ENABLE; if (mod == BLADERF_CHANNEL_RX(0)) { quick_tune->xb_gpio |= LMS_FREQ_XB_200_MODULE_RX; /* BLADERF_XB_CONFIG_RX_BYPASS_MASK */ quick_tune->xb_gpio |= ( (val & 0x30 ) >> 4) << LMS_FREQ_XB_200_PATH_SHIFT; /* BLADERF_XB_RX_MASK */ quick_tune->xb_gpio |= ( (val & 0x30000000 ) >> 28) << LMS_FREQ_XB_200_FILTER_SW_SHIFT; } else { /* BLADERF_XB_CONFIG_TX_BYPASS_MASK */ quick_tune->xb_gpio |= ( (val & 0x0C ) >> 2) << LMS_FREQ_XB_200_FILTER_SW_SHIFT; /* BLADERF_XB_TX_MASK */ quick_tune->xb_gpio |= ( (val & 0x0C000000 ) >> 26) << LMS_FREQ_XB_200_PATH_SHIFT; } } quick_tune->flags = LMS_FREQ_FLAGS_FORCE_VCOCAP; if (lms_frequency_to_hz(&f) < BLADERF1_BAND_HIGH) { quick_tune->flags |= LMS_FREQ_FLAGS_LOW_BAND; } } out: return status; } #endif static inline int get_vtune(struct bladerf *dev, uint8_t base, uint8_t delay, uint8_t *vtune) { int status; if (delay != 0) { VTUNE_BUSY_WAIT(delay); } status = LMS_READ(dev, base + 10, vtune); *vtune >>= 6; return status; } static inline int write_vcocap(struct bladerf *dev, uint8_t base, uint8_t vcocap, uint8_t vcocap_reg_state) { int status; assert(vcocap <= VCOCAP_MAX_VALUE); log_verbose("Writing VCOCAP=%u\n", vcocap); status = LMS_WRITE(dev, base + 9, vcocap | vcocap_reg_state); if (status != 0) { log_debug("VCOCAP write failed: %d\n", status); } return status; } #define VTUNE_DELAY_LARGE 50 #define VTUNE_DELAY_SMALL 25 #define VTUNE_MAX_ITERATIONS 20 #define VCO_HIGH 0x02 #define VCO_NORM 0x00 #define VCO_LOW 0x01 #if defined(LOGGING_ENABLED) || defined(BLADERF_NIOS_DEBUG) static const char *vtune_str(uint8_t value) { switch (value) { case VCO_HIGH: return "HIGH"; case VCO_NORM: return "NORM"; case VCO_LOW: return "LOW"; default: return "INVALID"; } } #endif static int vtune_high_to_norm(struct bladerf *dev, uint8_t base, uint8_t vcocap, uint8_t vcocap_reg_state, uint8_t *vtune_high_limit) { int status; unsigned int i; uint8_t vtune = 0xff; for (i = 0; i < VTUNE_MAX_ITERATIONS; i++) { if (vcocap >= VCOCAP_MAX_VALUE) { *vtune_high_limit = VCOCAP_MAX_VALUE; log_warning("%s: VCOCAP hit max value.\n", __FUNCTION__); return 0; } vcocap++; status = write_vcocap(dev, base, vcocap, vcocap_reg_state); if (status != 0) { return status; } status = get_vtune(dev, base, VTUNE_DELAY_SMALL, &vtune); if (status != 0) { return status; } if (vtune == VCO_NORM) { *vtune_high_limit = vcocap - 1; log_verbose("VTUNE NORM @ VCOCAP=%u\n", vcocap); log_verbose("VTUNE HIGH @ VCOCAP=%u\n", *vtune_high_limit); return 0; } } log_error("VTUNE High->Norm loop failed to converge.\n"); return BLADERF_ERR_UNEXPECTED; } static int vtune_norm_to_high(struct bladerf *dev, uint8_t base, uint8_t vcocap, uint8_t vcocap_reg_state, uint8_t *vtune_high_limit) { int status; unsigned int i; uint8_t vtune = 0xff; for (i = 0; i < VTUNE_MAX_ITERATIONS; i++) { if (vcocap == 0) { *vtune_high_limit = 0; log_warning("%s: VCOCAP hit min value.\n", __FUNCTION__); return 0; } vcocap--; status = write_vcocap(dev, base, vcocap, vcocap_reg_state); if (status != 0) { return status; } status = get_vtune(dev, base, VTUNE_DELAY_SMALL, &vtune); if (status != 0) { return status; } if (vtune == VCO_HIGH) { *vtune_high_limit = vcocap; log_verbose("VTUNE high @ VCOCAP=%u\n", *vtune_high_limit); return 0; } } log_error("VTUNE High->Norm loop failed to converge.\n"); return BLADERF_ERR_UNEXPECTED; } static int vtune_low_to_norm(struct bladerf *dev, uint8_t base, uint8_t vcocap, uint8_t vcocap_reg_state, uint8_t *vtune_low_limit) { int status; unsigned int i; uint8_t vtune = 0xff; for (i = 0; i < VTUNE_MAX_ITERATIONS; i++) { if (vcocap == 0) { *vtune_low_limit = 0; log_warning("VCOCAP hit min value.\n"); return 0; } vcocap--; status = write_vcocap(dev, base, vcocap, vcocap_reg_state); if (status != 0) { return status; } status = get_vtune(dev, base, VTUNE_DELAY_SMALL, &vtune); if (status != 0) { return status; } if (vtune == VCO_NORM) { *vtune_low_limit = vcocap + 1; log_verbose("VTUNE NORM @ VCOCAP=%u\n", vcocap); log_verbose("VTUNE LOW @ VCOCAP=%u\n", *vtune_low_limit); return 0; } } log_error("VTUNE Low->Norm loop failed to converge.\n"); return BLADERF_ERR_UNEXPECTED; } /* Wait for VTUNE to reach HIGH or LOW. NORM is not a valid option here */ static int wait_for_vtune_value(struct bladerf *dev, uint8_t base, uint8_t target_value, uint8_t *vcocap, uint8_t vcocap_reg_state) { uint8_t vtune; unsigned int i; int status = 0; const unsigned int max_retries = 15; const uint8_t limit = (target_value == VCO_HIGH) ? 0 : VCOCAP_MAX_VALUE; int8_t inc = (target_value == VCO_HIGH) ? -1 : 1; assert(target_value == VCO_HIGH || target_value == VCO_LOW); for (i = 0; i < max_retries; i++) { status = get_vtune(dev, base, 0, &vtune); if (status != 0) { return status; } if (vtune == target_value) { log_verbose("VTUNE reached %s at iteration %u\n", vtune_str(target_value), i); return 0; } else { log_verbose("VTUNE was %s. Waiting and retrying...\n", vtune_str(vtune)); VTUNE_BUSY_WAIT(10); } } log_debug("Timed out while waiting for VTUNE=%s. Walking VCOCAP...\n", vtune_str(target_value)); while (*vcocap != limit) { *vcocap += inc; status = write_vcocap(dev, base, *vcocap, vcocap_reg_state); if (status != 0) { return status; } status = get_vtune(dev, base, VTUNE_DELAY_SMALL, &vtune); if (status != 0) { return status; } else if (vtune == target_value) { log_debug("VTUNE=%s reached with VCOCAP=%u\n", vtune_str(vtune), *vcocap); return 0; } } log_warning("VTUNE did not reach %s. Tuning may not be nominal.\n", vtune_str(target_value)); # ifdef ERROR_ON_NO_VTUNE_LIMIT return BLADERF_ERR_UNEXPECTED; # else return 0; # endif } /* These values are the max counts we've seen (experimentally) between * VCOCAP values that converged */ #define VCOCAP_MAX_LOW_HIGH 12 /* This function assumes an initial VCOCAP estimate has already been written. * * Remember, increasing VCOCAP works towards a lower voltage, and vice versa: * From experimental observations, we don't expect to see the "normal" region * extend beyond 16 counts. * * VCOCAP = 0 VCOCAP=63 * / \ * v v * |----High-----[ Normal ]----Low----| VTUNE voltage comparison * * The VTUNE voltage can be found on R263 (RX) or R265 (Tx). (They're under the * can shielding the LMS6002D.) By placing a scope probe on these and retuning, * you should be able to see the relationship between VCOCAP changes and * the voltage changes. */ static int tune_vcocap(struct bladerf *dev, uint8_t vcocap_est, uint8_t base, uint8_t vcocap_reg_state, uint8_t *vcocap_result) { int status; uint8_t vcocap = vcocap_est; uint8_t vtune; uint8_t vtune_high_limit; /* Where VCOCAP puts use into VTUNE HIGH region */ uint8_t vtune_low_limit; /* Where VCOCAP puts use into VTUNE HIGH region */ RESET_BUSY_WAIT_COUNT(); vtune_high_limit = VCOCAP_MAX_VALUE; vtune_low_limit = 0; status = get_vtune(dev, base, VTUNE_DELAY_LARGE, &vtune); if (status != 0) { return status; } switch (vtune) { case VCO_HIGH: log_verbose("Estimate HIGH: Walking down to NORM.\n"); status = vtune_high_to_norm(dev, base, vcocap, vcocap_reg_state, &vtune_high_limit); break; case VCO_NORM: log_verbose("Estimate NORM: Walking up to HIGH.\n"); status = vtune_norm_to_high(dev, base, vcocap, vcocap_reg_state, &vtune_high_limit); break; case VCO_LOW: log_verbose("Estimate LOW: Walking down to NORM.\n"); status = vtune_low_to_norm(dev, base, vcocap, vcocap_reg_state, &vtune_low_limit); break; } if (status != 0) { return status; } else if (vtune_high_limit != VCOCAP_MAX_VALUE) { /* We determined our VTUNE HIGH limit. Try to force ourselves to the * LOW limit and then walk back up to norm from there. * * Reminder - There's an inverse relationship between VTUNE and VCOCAP */ switch (vtune) { case VCO_HIGH: case VCO_NORM: if ( ((int) vtune_high_limit + VCOCAP_MAX_LOW_HIGH) < VCOCAP_MAX_VALUE) { vcocap = vtune_high_limit + VCOCAP_MAX_LOW_HIGH; } else { vcocap = VCOCAP_MAX_VALUE; log_verbose("Clamping VCOCAP to %u.\n", vcocap); } break; default: assert(!"Invalid state"); return BLADERF_ERR_UNEXPECTED; } status = write_vcocap(dev, base, vcocap, vcocap_reg_state); if (status != 0) { return status; } log_verbose("Waiting for VTUNE LOW @ VCOCAP=%u,\n", vcocap); status = wait_for_vtune_value(dev, base, VCO_LOW, &vcocap, vcocap_reg_state); if (status == 0) { log_verbose("Walking VTUNE LOW to NORM from VCOCAP=%u,\n", vcocap); status = vtune_low_to_norm(dev, base, vcocap, vcocap_reg_state, &vtune_low_limit); } } else { /* We determined our VTUNE LOW limit. Try to force ourselves up to * the HIGH limit and then walk down to NORM from there * * Reminder - There's an inverse relationship between VTUNE and VCOCAP */ switch (vtune) { case VCO_LOW: case VCO_NORM: if ( ((int) vtune_low_limit - VCOCAP_MAX_LOW_HIGH) > 0) { vcocap = vtune_low_limit - VCOCAP_MAX_LOW_HIGH; } else { vcocap = 0; log_verbose("Clamping VCOCAP to %u.\n", vcocap); } break; default: assert(!"Invalid state"); return BLADERF_ERR_UNEXPECTED; } status = write_vcocap(dev, base, vcocap, vcocap_reg_state); if (status != 0) { return status; } log_verbose("Waiting for VTUNE HIGH @ VCOCAP=%u\n", vcocap); status = wait_for_vtune_value(dev, base, VCO_HIGH, &vcocap, vcocap_reg_state); if (status == 0) { log_verbose("Walking VTUNE HIGH to NORM from VCOCAP=%u,\n", vcocap); status = vtune_high_to_norm(dev, base, vcocap, vcocap_reg_state, &vtune_high_limit); } } if (status == 0) { vcocap = vtune_high_limit + (vtune_low_limit - vtune_high_limit) / 2; log_verbose("VTUNE LOW: %u\n", vtune_low_limit); log_verbose("VTUNE NORM: %u\n", vcocap); log_verbose("VTUNE Est: %u (%d)\n", vcocap_est, (int) vcocap_est - vcocap); log_verbose("VTUNE HIGH: %u\n", vtune_high_limit); # if LMS_COUNT_BUSY_WAITS log_verbose("Busy waits: %u\n", busy_wait_count); log_verbose("Busy us: %u\n", busy_wait_duration); # endif status = write_vcocap(dev, base, vcocap, vcocap_reg_state); if (status != 0) { return status; } /* Inform the caller of what we converged to */ *vcocap_result = vcocap; status = get_vtune(dev, base, VTUNE_DELAY_SMALL, &vtune); if (status != 0) { return status; } PRINT_BUSY_WAIT_INFO(); if (vtune != VCO_NORM) { status = BLADERF_ERR_UNEXPECTED; log_error("Final VCOCAP=%u is not in VTUNE NORM region.\n", vcocap); } } return status; } int lms_select_band(struct bladerf *dev, bladerf_module module, bool low_band) { int status; /* If loopback mode disabled, avoid changing the PA or LNA selection, * as these need to remain are powered down or disabled */ status = is_loopback_enabled(dev); if (status < 0) { return status; } else if (status > 0) { return 0; } if (module == BLADERF_MODULE_TX) { lms_pa pa = low_band ? PA_1 : PA_2; status = lms_select_pa(dev, pa); } else { lms_lna lna = low_band ? LNA_1 : LNA_2; status = lms_select_lna(dev, lna); } return status; } #ifndef BLADERF_NIOS_BUILD int lms_calculate_tuning_params(uint32_t freq, struct lms_freq *f) { uint64_t vco_x; uint64_t temp; uint16_t nint; uint32_t nfrac; uint8_t freqsel = bands[0].value; uint8_t i = 0; const uint64_t ref_clock = LMS_REFERENCE_HZ; /* Clamp out of range values */ if (freq < BLADERF_FREQUENCY_MIN) { freq = BLADERF_FREQUENCY_MIN; log_info("Clamping frequency to %uHz\n", freq); } else if (freq > BLADERF_FREQUENCY_MAX) { freq = BLADERF_FREQUENCY_MAX; log_info("Clamping frequency to %uHz\n", freq); } /* Figure out freqsel */ while (i < ARRAY_SIZE(bands)) { if ((freq >= bands[i].low) && (freq <= bands[i].high)) { freqsel = bands[i].value; break; } i++; } /* This condition should never occur. There's a bug if it does. */ if (i >= ARRAY_SIZE(bands)) { log_critical("BUG: Failed to find frequency band information. " "Setting frequency to %u Hz.\n", BLADERF_FREQUENCY_MIN); return BLADERF_ERR_UNEXPECTED; } /* Estimate our target VCOCAP value. */ f->vcocap = estimate_vcocap(freq, bands[i].low, bands[i].high); /* Calculate integer portion of the frequency value */ vco_x = ((uint64_t)1) << ((freqsel & 7) - 3); temp = (vco_x * freq) / ref_clock; assert(temp <= UINT16_MAX); nint = (uint16_t)temp; temp = (1 << 23) * (vco_x * freq - nint * ref_clock); temp = (temp + ref_clock / 2) / ref_clock; assert(temp <= UINT32_MAX); nfrac = (uint32_t)temp; assert(vco_x <= UINT8_MAX); f->x = (uint8_t)vco_x; f->nint = nint; f->nfrac = nfrac; f->freqsel = freqsel; f->xb_gpio = 0; assert(ref_clock <= UINT32_MAX); f->flags = 0; if (freq < BLADERF1_BAND_HIGH) { f->flags |= LMS_FREQ_FLAGS_LOW_BAND; } PRINT_FREQUENCY(f); return 0; } #endif int lms_set_precalculated_frequency(struct bladerf *dev, bladerf_module mod, struct lms_freq *f) { /* Select the base address based on which PLL we are configuring */ const uint8_t base = (mod == BLADERF_MODULE_RX) ? 0x20 : 0x10; uint8_t data; uint8_t vcocap_reg_state; int status, dsm_status; /* Utilize atomic writes to the PLL registers, if possible. This * "multiwrite" is indicated by the MSB being set. */ # ifdef BLADERF_NIOS_BUILD const uint8_t pll_base = base | 0x80; # else const uint8_t pll_base = have_cap(dev->board->get_capabilities(dev), BLADERF_CAP_ATOMIC_NINT_NFRAC_WRITE) ? (base | 0x80) : base; # endif f->vcocap_result = 0xff; /* Turn on the DSMs */ status = LMS_READ(dev, 0x09, &data); if (status == 0) { data |= 0x05; status = LMS_WRITE(dev, 0x09, data); } if (status != 0) { log_debug("Failed to turn on DSMs\n"); return status; } /* Write the initial vcocap estimate first to allow for adequate time for * VTUNE to stabilize. We need to be sure to keep the upper bits of * this register and perform a RMW, as bit 7 is VOVCOREG[0]. */ status = LMS_READ(dev, base + 9, &vcocap_reg_state); if (status != 0) { goto error; } vcocap_reg_state &= ~(0x3f); status = write_vcocap(dev, base, f->vcocap, vcocap_reg_state); if (status != 0) { goto error; } status = write_pll_config(dev, mod, f->freqsel, (f->flags & LMS_FREQ_FLAGS_LOW_BAND) != 0); if (status != 0) { goto error; } data = f->nint >> 1; status = LMS_WRITE(dev, pll_base + 0, data); if (status != 0) { goto error; } data = ((f->nint & 1) << 7) | ((f->nfrac >> 16) & 0x7f); status = LMS_WRITE(dev, pll_base + 1, data); if (status != 0) { goto error; } data = ((f->nfrac >> 8) & 0xff); status = LMS_WRITE(dev, pll_base + 2, data); if (status != 0) { goto error; } data = (f->nfrac & 0xff); status = LMS_WRITE(dev, pll_base + 3, data); if (status != 0) { goto error; } /* Perform tuning algorithm unless we've been instructed to just use * the VCOCAP hint as-is. */ if (f->flags & LMS_FREQ_FLAGS_FORCE_VCOCAP) { f->vcocap_result = f->vcocap; } else { /* Walk down VCOCAP values find an optimal values */ status = tune_vcocap(dev, f->vcocap, base, vcocap_reg_state, &f->vcocap_result); } error: /* Turn off the DSMs */ dsm_status = LMS_READ(dev, 0x09, &data); if (dsm_status == 0) { data &= ~(0x05); dsm_status = LMS_WRITE(dev, 0x09, data); } return (status == 0) ? dsm_status : status; } #ifndef BLADERF_NIOS_BUILD int lms_dump_registers(struct bladerf *dev) { int status = 0; uint8_t data,i; const uint16_t num_reg = sizeof(lms_reg_dumpset); for (i = 0; i < num_reg; i++) { status = LMS_READ(dev, lms_reg_dumpset[i], &data); if (status != 0) { log_debug("Failed to read LMS @ 0x%02x\n", lms_reg_dumpset[i]); return status; } else { log_debug("LMS[0x%02x] = 0x%02x\n", lms_reg_dumpset[i], data); } } return status; } #endif /* Reference LMS6002D calibration guide, section 4.1 flow chart */ #ifndef BLADERF_NIOS_BUILD static int lms_dc_cal_loop(struct bladerf *dev, uint8_t base, uint8_t cal_address, uint8_t dc_cntval, uint8_t *dc_regval) { int status; uint8_t i, val; bool done = false; const unsigned int max_cal_count = 25; log_debug("Calibrating module %2.2x:%2.2x\n", base, cal_address); /* Set the calibration address for the block, and start it up */ status = LMS_READ(dev, base + 0x03, &val); if (status != 0) { return status; } val &= ~(0x07); val |= cal_address&0x07; status = LMS_WRITE(dev, base + 0x03, val); if (status != 0) { return status; } /* Set and latch the DC_CNTVAL */ status = LMS_WRITE(dev, base + 0x02, dc_cntval); if (status != 0) { return status; } val |= (1 << 4); status = LMS_WRITE(dev, base + 0x03, val); if (status != 0) { return status; } val &= ~(1 << 4); status = LMS_WRITE(dev, base + 0x03, val); if (status != 0) { return status; } /* Start the calibration by toggling DC_START_CLBR */ val |= (1 << 5); status = LMS_WRITE(dev, base + 0x03, val); if (status != 0) { return status; } val &= ~(1 << 5); status = LMS_WRITE(dev, base + 0x03, val); if (status != 0) { return status; } /* Main loop checking the calibration */ for (i = 0 ; i < max_cal_count && !done; i++) { /* Read active low DC_CLBR_DONE */ status = LMS_READ(dev, base + 0x01, &val); if (status != 0) { return status; } /* Check if calibration is done */ if (((val >> 1) & 1) == 0) { done = true; /* Per LMS FAQ item 4.7, we should check DC_REG_VAL, as * DC_LOCK is not a reliable indicator */ status = LMS_READ(dev, base, dc_regval); if (status == 0) { *dc_regval &= 0x3f; } } } if (done == false) { log_warning("DC calibration loop did not converge.\n"); status = BLADERF_ERR_UNEXPECTED; } else { log_debug( "DC_REGVAL: %d\n", *dc_regval ); } return status; } #endif #ifndef BLADERF_NIOS_BUILD static inline int dc_cal_backup(struct bladerf *dev, bladerf_cal_module module, struct dc_cal_state *state) { int status; memset(state, 0, sizeof(state[0])); status = LMS_READ(dev, 0x09, &state->clk_en); if (status != 0) { return status; } if (module == BLADERF_DC_CAL_RX_LPF || module == BLADERF_DC_CAL_RXVGA2) { status = LMS_READ(dev, 0x72, &state->reg0x72); if (status != 0) { return status; } status = lms_lna_get_gain(dev, &state->lna_gain); if (status != 0) { return status; } status = lms_rxvga1_get_gain(dev, &state->rxvga1_gain); if (status != 0) { return status; } status = lms_rxvga2_get_gain(dev, &state->rxvga2_gain); if (status != 0) { return status; } } return 0; } #endif #ifndef BLADERF_NIOS_BUILD static int dc_cal_module_init(struct bladerf *dev, bladerf_cal_module module, struct dc_cal_state *state) { int status; uint8_t cal_clock; uint8_t val; switch (module) { case BLADERF_DC_CAL_LPF_TUNING: cal_clock = (1 << 5); /* CLK_EN[5] - LPF CAL Clock */ state->base_addr = 0x00; state->num_submodules = 1; break; case BLADERF_DC_CAL_TX_LPF: cal_clock = (1 << 1); /* CLK_EN[1] - TX LPF DCCAL Clock */ state->base_addr = 0x30; state->num_submodules = 2; break; case BLADERF_DC_CAL_RX_LPF: cal_clock = (1 << 3); /* CLK_EN[3] - RX LPF DCCAL Clock */ state->base_addr = 0x50; state->num_submodules = 2; break; case BLADERF_DC_CAL_RXVGA2: cal_clock = (1 << 4); /* CLK_EN[4] - RX VGA2 DCCAL Clock */ state->base_addr = 0x60; state->num_submodules = 5; break; default: return BLADERF_ERR_INVAL; } /* Enable the appropriate clock based on the module */ status = LMS_WRITE(dev, 0x09, state->clk_en | cal_clock); if (status != 0) { return status; } switch (module) { case BLADERF_DC_CAL_LPF_TUNING: /* Nothing special to do */ break; case BLADERF_DC_CAL_RX_LPF: case BLADERF_DC_CAL_RXVGA2: /* FAQ 5.26 (rev 1.0r10) notes that the DC comparators should be * powered up when performing DC calibration, and then powered down * afterwards to improve receiver linearity */ if (module == BLADERF_DC_CAL_RXVGA2) { status = lms_clear(dev, 0x6e, (3 << 6)); if (status != 0) { return status; } } else { /* Power up RX LPF DC calibration comparator */ status = lms_clear(dev, 0x5f, (1 << 7)); if (status != 0) { return status; } } /* Disconnect LNA from the RXMIX input by opening up the * INLOAD_LNA_RXFE switch. This should help reduce external * interference while calibrating */ val = state->reg0x72 & ~(1 << 7); status = LMS_WRITE(dev, 0x72, val); if (status != 0) { return status; } /* Attempt to calibrate at max gain. */ status = lms_lna_set_gain(dev, BLADERF_LNA_GAIN_MAX); if (status != 0) { return status; } state->rxvga1_curr_gain = BLADERF_RXVGA1_GAIN_MAX; status = lms_rxvga1_set_gain(dev, state->rxvga1_curr_gain); if (status != 0) { return status; } state->rxvga2_curr_gain = BLADERF_RXVGA2_GAIN_MAX; status = lms_rxvga2_set_gain(dev, state->rxvga2_curr_gain); if (status != 0) { return status; } break; case BLADERF_DC_CAL_TX_LPF: /* FAQ item 4.1 notes that the DAC should be turned off or set * to generate minimum DC */ status = lms_set(dev, 0x36, (1 << 7)); if (status != 0) { return status; } /* Ensure TX LPF DC calibration comparator is powered up */ status = lms_clear(dev, 0x3f, (1 << 7)); if (status != 0) { return status; } break; default: assert(!"Invalid module"); status = BLADERF_ERR_INVAL; } return status; } #endif /* The RXVGA2 items here are based upon Lime Microsystems' recommendations * in their "Improving RxVGA2 DC Offset Calibration Stability" Document: * https://groups.google.com/group/limemicro-opensource/attach/19b675d099a22b89/Improving%20RxVGA2%20DC%20Offset%20Calibration%20Stability_v1.pdf?part=0.1&authuser=0 * * This function assumes that the submodules are preformed in a consecutive * and increasing order, as outlined in the above document. */ #ifndef BLADERF_NIOS_BUILD static int dc_cal_submodule(struct bladerf *dev, bladerf_cal_module module, unsigned int submodule, struct dc_cal_state *state, bool *converged) { int status; uint8_t val, dc_regval; *converged = false; if (module == BLADERF_DC_CAL_RXVGA2) { switch (submodule) { case 0: /* Reset VGA2GAINA and VGA2GAINB to the default power-on values, * in case we're retrying this calibration due to one of the * later submodules failing. For the same reason, RXVGA2 decode * is disabled; it is not used for the RC reference module (0) */ /* Disable RXVGA2 DECODE */ status = lms_clear(dev, 0x64, (1 << 0)); if (status != 0) { return status; } /* VGA2GAINA = 0, VGA2GAINB = 0 */ status = LMS_WRITE(dev, 0x68, 0x01); if (status != 0) { return status; } break; case 1: /* Setup for Stage 1 I and Q channels (submodules 1 and 2) */ /* Set to direct control signals: RXVGA2 Decode = 1 */ status = lms_set(dev, 0x64, (1 << 0)); if (status != 0) { return status; } /* VGA2GAINA = 0110, VGA2GAINB = 0 */ val = 0x06; status = LMS_WRITE(dev, 0x68, val); if (status != 0) { return status; } break; case 2: /* No additional changes needed - covered by previous execution * of submodule == 1. */ break; case 3: /* Setup for Stage 2 I and Q channels (submodules 3 and 4) */ /* VGA2GAINA = 0, VGA2GAINB = 0110 */ val = 0x60; status = LMS_WRITE(dev, 0x68, val); if (status != 0) { return status; } break; case 4: /* No additional changes needed - covered by execution * of submodule == 3 */ break; default: assert(!"Invalid submodule"); return BLADERF_ERR_UNEXPECTED; } } status = lms_dc_cal_loop(dev, state->base_addr, submodule, 31, &dc_regval); if (status != 0) { return status; } if (dc_regval == 31) { log_debug("DC_REGVAL suboptimal value - retrying DC cal loop.\n"); /* FAQ item 4.7 indcates that can retry with DC_CNTVAL reset */ status = lms_dc_cal_loop(dev, state->base_addr, submodule, 0, &dc_regval); if (status != 0) { return status; } else if (dc_regval == 0) { log_debug("Bad DC_REGVAL detected. DC cal failed.\n"); return 0; } } if (module == BLADERF_DC_CAL_LPF_TUNING) { /* Special case for LPF tuning module where results are * written to TX/RX LPF DCCAL */ /* Set the DC level to RX and TX DCCAL modules */ status = LMS_READ(dev, 0x35, &val); if (status == 0) { val &= ~(0x3f); val |= dc_regval; status = LMS_WRITE(dev, 0x35, val); } if (status != 0) { return status; } status = LMS_READ(dev, 0x55, &val); if (status == 0) { val &= ~(0x3f); val |= dc_regval; status = LMS_WRITE(dev, 0x55, val); } if (status != 0) { return status; } } *converged = true; return 0; } #endif #ifndef BLADERF_NIOS_BUILD static int dc_cal_retry_adjustment(struct bladerf *dev, bladerf_cal_module module, struct dc_cal_state *state, bool *limit_reached) { int status = 0; switch (module) { case BLADERF_DC_CAL_LPF_TUNING: case BLADERF_DC_CAL_TX_LPF: /* Nothing to adjust here */ *limit_reached = true; break; case BLADERF_DC_CAL_RX_LPF: if (state->rxvga1_curr_gain > BLADERF_RXVGA1_GAIN_MIN) { state->rxvga1_curr_gain -= 1; log_debug("Retrying DC cal with RXVGA1=%d\n", state->rxvga1_curr_gain); status = lms_rxvga1_set_gain(dev, state->rxvga1_curr_gain); } else { *limit_reached = true; } break; case BLADERF_DC_CAL_RXVGA2: if (state->rxvga1_curr_gain > BLADERF_RXVGA1_GAIN_MIN) { state->rxvga1_curr_gain -= 1; log_debug("Retrying DC cal with RXVGA1=%d\n", state->rxvga1_curr_gain); status = lms_rxvga1_set_gain(dev, state->rxvga1_curr_gain); } else if (state->rxvga2_curr_gain > BLADERF_RXVGA2_GAIN_MIN) { state->rxvga2_curr_gain -= 3; log_debug("Retrying DC cal with RXVGA2=%d\n", state->rxvga2_curr_gain); status = lms_rxvga2_set_gain(dev, state->rxvga2_curr_gain); } else { *limit_reached = true; } break; default: *limit_reached = true; assert(!"Invalid module"); status = BLADERF_ERR_UNEXPECTED; } if (*limit_reached) { log_debug("DC Cal retry limit reached\n"); } return status; } #endif #ifndef BLADERF_NIOS_BUILD static int dc_cal_module_deinit(struct bladerf *dev, bladerf_cal_module module, struct dc_cal_state *state) { int status = 0; switch (module) { case BLADERF_DC_CAL_LPF_TUNING: /* Nothing special to do here */ break; case BLADERF_DC_CAL_RX_LPF: /* Power down RX LPF calibration comparator */ status = lms_set(dev, 0x5f, (1 << 7)); if (status != 0) { return status; } break; case BLADERF_DC_CAL_RXVGA2: /* Restore defaults: VGA2GAINA = 1, VGA2GAINB = 0 */ status = LMS_WRITE(dev, 0x68, 0x01); if (status != 0) { return status; } /* Disable decode control signals: RXVGA2 Decode = 0 */ status = lms_clear(dev, 0x64, (1 << 0)); if (status != 0) { return status; } /* Power DC comparitors down, per FAQ 5.26 (rev 1.0r10) */ status = lms_set(dev, 0x6e, (3 << 6)); if (status != 0) { return status; } break; case BLADERF_DC_CAL_TX_LPF: /* Power down TX LPF DC calibration comparator */ status = lms_set(dev, 0x3f, (1 << 7)); if (status != 0) { return status; } /* Re-enable the DACs */ status = lms_clear(dev, 0x36, (1 << 7)); if (status != 0) { return status; } break; default: assert(!"Invalid module"); status = BLADERF_ERR_INVAL; } return status; } #endif #ifndef BLADERF_NIOS_BUILD static inline int dc_cal_restore(struct bladerf *dev, bladerf_cal_module module, struct dc_cal_state *state) { int status, ret; ret = 0; status = LMS_WRITE(dev, 0x09, state->clk_en); if (status != 0) { ret = status; } if (module == BLADERF_DC_CAL_RX_LPF || module == BLADERF_DC_CAL_RXVGA2) { status = LMS_WRITE(dev, 0x72, state->reg0x72); if (status != 0 && ret == 0) { ret = status; } status = lms_lna_set_gain(dev, state->lna_gain); if (status != 0 && ret == 0) { ret = status; } status = lms_rxvga1_set_gain(dev, state->rxvga1_gain); if (status != 0 && ret == 0) { ret = status; } status = lms_rxvga2_set_gain(dev, state->rxvga2_gain); if (status != 0) { ret = status; } } return ret; } #endif #ifndef BLADERF_NIOS_BUILD static inline int dc_cal_module(struct bladerf *dev, bladerf_cal_module module, struct dc_cal_state *state, bool *converged) { unsigned int i; int status = 0; *converged = true; for (i = 0; i < state->num_submodules && *converged && status == 0; i++) { status = dc_cal_submodule(dev, module, i, state, converged); } return status; } #endif #ifndef BLADERF_NIOS_BUILD int lms_calibrate_dc(struct bladerf *dev, bladerf_cal_module module) { int status, tmp_status; struct dc_cal_state state; bool converged, limit_reached; status = dc_cal_backup(dev, module, &state); if (status != 0) { return status; } status = dc_cal_module_init(dev, module, &state); if (status != 0) { goto error; } converged = false; limit_reached = false; while (!converged && !limit_reached && status == 0) { status = dc_cal_module(dev, module, &state, &converged); if (status == 0 && !converged) { status = dc_cal_retry_adjustment(dev, module, &state, &limit_reached); } } if (!converged && status == 0) { log_warning("DC Calibration (module=%d) failed to converge.\n", module); status = BLADERF_ERR_UNEXPECTED; } error: tmp_status = dc_cal_module_deinit(dev, module, &state); status = (status != 0) ? status : tmp_status; tmp_status = dc_cal_restore(dev, module, &state); status = (status != 0) ? status : tmp_status; return status; } #endif #ifndef BLADERF_NIOS_BUILD static inline int enable_lpf_cal_clock(struct bladerf *dev, bool enable) { const uint8_t mask = (1 << 5); if (enable) { return lms_set(dev, 0x09, mask); } else { return lms_clear(dev, 0x09, mask); } } #endif #ifndef BLADERF_NIOS_BUILD static inline int enable_rxvga2_dccal_clock(struct bladerf *dev, bool enable) { const uint8_t mask = (1 << 4); if (enable) { return lms_set(dev, 0x09, mask); } else { return lms_clear(dev, 0x09, mask); } } #endif #ifndef BLADERF_NIOS_BUILD static inline int enable_rxlpf_dccal_clock(struct bladerf *dev, bool enable) { const uint8_t mask = (1 << 3); if (enable) { return lms_set(dev, 0x09, mask); } else { return lms_clear(dev, 0x09, mask); } } #endif #ifndef BLADERF_NIOS_BUILD static inline int enable_txlpf_dccal_clock(struct bladerf *dev, bool enable) { const uint8_t mask = (1 << 1); if (enable) { return lms_set(dev, 0x09, mask); } else { return lms_clear(dev, 0x09, mask); } } #endif #ifndef BLADERF_NIOS_BUILD static int set_dc_cal_value(struct bladerf *dev, uint8_t base, uint8_t dc_addr, int16_t value) { int status; const uint8_t new_value = (uint8_t)value; uint8_t regval = (0x08 | dc_addr); /* Keep reset inactive, cal disable, load addr */ status = LMS_WRITE(dev, base + 3, regval); if (status != 0) { return status; } /* Update DC_CNTVAL */ status = LMS_WRITE(dev, base + 2, new_value); if (status != 0) { return status; } /* Strobe DC_LOAD */ regval |= (1 << 4); status = LMS_WRITE(dev, base + 3, regval); if (status != 0) { return status; } regval &= ~(1 << 4); status = LMS_WRITE(dev, base + 3, regval); if (status != 0) { return status; } status = LMS_READ(dev, base, ®val); if (status != 0) { return status; } return 0; } #endif #ifndef BLADERF_NIOS_BUILD static int get_dc_cal_value(struct bladerf *dev, uint8_t base, uint8_t dc_addr, int16_t *value) { int status; uint8_t regval; /* Keep reset inactive, cal disable, load addr */ status = LMS_WRITE(dev, base + 3, (0x08 | dc_addr)); if (status != 0) { return status; } /* Fetch value from DC_REGVAL */ status = LMS_READ(dev, base, ®val); if (status != 0) { *value = -1; return status; } *value = regval; return 0; } #endif #ifndef BLADERF_NIOS_BUILD int lms_set_dc_cals(struct bladerf *dev, const struct bladerf_lms_dc_cals *dc_cals) { int status; const bool cal_tx_lpf = (dc_cals->tx_lpf_i >= 0) || (dc_cals->tx_lpf_q >= 0); const bool cal_rx_lpf = (dc_cals->rx_lpf_i >= 0) || (dc_cals->rx_lpf_q >= 0); const bool cal_rxvga2 = (dc_cals->dc_ref >= 0) || (dc_cals->rxvga2a_i >= 0) || (dc_cals->rxvga2a_q >= 0) || (dc_cals->rxvga2b_i >= 0) || (dc_cals->rxvga2b_q >= 0); if (dc_cals->lpf_tuning >= 0) { status = enable_lpf_cal_clock(dev, true); if (status != 0) { return status; } status = set_dc_cal_value(dev, 0x00, 0, dc_cals->lpf_tuning); if (status != 0) { return status; } status = enable_lpf_cal_clock(dev, false); if (status != 0) { return status; } } if (cal_tx_lpf) { status = enable_txlpf_dccal_clock(dev, true); if (status != 0) { return status; } if (dc_cals->tx_lpf_i >= 0) { status = set_dc_cal_value(dev, 0x30, 0, dc_cals->tx_lpf_i); if (status != 0) { return status; } } if (dc_cals->tx_lpf_q >= 0) { status = set_dc_cal_value(dev, 0x30, 1, dc_cals->tx_lpf_q); if (status != 0) { return status; } } status = enable_txlpf_dccal_clock(dev, false); if (status != 0) { return status; } } if (cal_rx_lpf) { status = enable_rxlpf_dccal_clock(dev, true); if (status != 0) { return status; } if (dc_cals->rx_lpf_i >= 0) { status = set_dc_cal_value(dev, 0x50, 0, dc_cals->rx_lpf_i); if (status != 0) { return status; } } if (dc_cals->rx_lpf_q >= 0) { status = set_dc_cal_value(dev, 0x50, 1, dc_cals->rx_lpf_q); if (status != 0) { return status; } } status = enable_rxlpf_dccal_clock(dev, false); if (status != 0) { return status; } } if (cal_rxvga2) { status = enable_rxvga2_dccal_clock(dev, true); if (status != 0) { return status; } if (dc_cals->dc_ref >= 0) { status = set_dc_cal_value(dev, 0x60, 0, dc_cals->dc_ref); if (status != 0) { return status; } } if (dc_cals->rxvga2a_i >= 0) { status = set_dc_cal_value(dev, 0x60, 1, dc_cals->rxvga2a_i); if (status != 0) { return status; } } if (dc_cals->rxvga2a_q >= 0) { status = set_dc_cal_value(dev, 0x60, 2, dc_cals->rxvga2a_q); if (status != 0) { return status; } } if (dc_cals->rxvga2b_i >= 0) { status = set_dc_cal_value(dev, 0x60, 3, dc_cals->rxvga2b_i); if (status != 0) { return status; } } if (dc_cals->rxvga2b_q >= 0) { status = set_dc_cal_value(dev, 0x60, 4, dc_cals->rxvga2b_q); if (status != 0) { return status; } } status = enable_rxvga2_dccal_clock(dev, false); if (status != 0) { return status; } } return 0; } #endif #ifndef BLADERF_NIOS_BUILD int lms_get_dc_cals(struct bladerf *dev, struct bladerf_lms_dc_cals *dc_cals) { int status; status = get_dc_cal_value(dev, 0x00, 0, &dc_cals->lpf_tuning); if (status != 0) { return status; } status = get_dc_cal_value(dev, 0x30, 0, &dc_cals->tx_lpf_i); if (status != 0) { return status; } status = get_dc_cal_value(dev, 0x30, 1, &dc_cals->tx_lpf_q); if (status != 0) { return status; } status = get_dc_cal_value(dev, 0x50, 0, &dc_cals->rx_lpf_i); if (status != 0) { return status; } status = get_dc_cal_value(dev, 0x50, 1, &dc_cals->rx_lpf_q); if (status != 0) { return status; } status = get_dc_cal_value(dev, 0x60, 0, &dc_cals->dc_ref); if (status != 0) { return status; } status = get_dc_cal_value(dev, 0x60, 1, &dc_cals->rxvga2a_i); if (status != 0) { return status; } status = get_dc_cal_value(dev, 0x60, 2, &dc_cals->rxvga2a_q); if (status != 0) { return status; } status = get_dc_cal_value(dev, 0x60, 3, &dc_cals->rxvga2b_i); if (status != 0) { return status; } status = get_dc_cal_value(dev, 0x60, 4, &dc_cals->rxvga2b_q); if (status != 0) { return status; } return 0; } #endif #ifndef BLADERF_NIOS_BUILD int lms_select_sampling(struct bladerf *dev, bladerf_sampling sampling) { uint8_t val; int status = 0; if (sampling == BLADERF_SAMPLING_INTERNAL) { /* Disconnect the ADC input from the outside world */ status = LMS_READ( dev, 0x09, &val ); if (status) { log_warning( "Could not read LMS to connect ADC to external pins\n" ); goto out; } val &= ~(1<<7); status = LMS_WRITE( dev, 0x09, val ); if (status) { log_warning( "Could not write LMS to connect ADC to external pins\n" ); goto out; } /* Turn on RXVGA2 */ status = LMS_READ( dev, 0x64, &val ); if (status) { log_warning( "Could not read LMS to enable RXVGA2\n" ); goto out; } val |= (1<<1); status = LMS_WRITE( dev, 0x64, val ); if (status) { log_warning( "Could not write LMS to enable RXVGA2\n" ); goto out; } } else if (sampling == BLADERF_SAMPLING_EXTERNAL) { /* Turn off RXVGA2 */ status = LMS_READ( dev, 0x64, &val ); if (status) { log_warning( "Could not read the LMS to disable RXVGA2\n" ); goto out; } val &= ~(1<<1); status = LMS_WRITE( dev, 0x64, val ); if (status) { log_warning( "Could not write the LMS to disable RXVGA2\n" ); goto out; } /* Connect the external ADC pins to the internal ADC input */ status = LMS_READ( dev, 0x09, &val ); if (status) { log_warning( "Could not read the LMS to connect ADC to internal pins\n" ); goto out; } val |= (1<<7); status = LMS_WRITE( dev, 0x09, val ); if (status) { log_warning( "Could not write the LMS to connect ADC to internal pins\n" ); } } else { status = BLADERF_ERR_INVAL; } out: return status; } #endif #ifndef BLADERF_NIOS_BUILD int lms_get_sampling(struct bladerf *dev, bladerf_sampling *sampling) { int status = 0, external = 0; uint8_t val = 0; status = LMS_READ(dev, 0x09, &val); if (status != 0) { log_warning("Could not read state of ADC pin connectivity\n"); goto out; } external = (val & (1 << 7)) ? 1 : 0; status = LMS_READ(dev, 0x64, &val); if (status != 0) { log_warning( "Could not read RXVGA2 state\n" ); goto out; } external |= (val & (1 << 1)) ? 0 : 2; switch (external) { case 0: *sampling = BLADERF_SAMPLING_INTERNAL; break; case 3: *sampling = BLADERF_SAMPLING_EXTERNAL; break; default: *sampling = BLADERF_SAMPLING_UNKNOWN; break; } out: return status; } #endif #ifndef BLADERF_NIOS_BUILD static inline uint8_t scale_dc_offset(bladerf_module module, int16_t value) { uint8_t ret; switch (module) { case BLADERF_MODULE_RX: /* RX only has 6 bits of scale to work with, remove normalization */ value >>= 5; if (value < 0) { if (value <= -64) { /* Clamp */ value = 0x3f; } else { value = (-value) & 0x3f; } /* This register uses bit 6 to denote a negative value */ value |= (1 << 6); } else { if (value >= 64) { /* Clamp */ value = 0x3f; } else { value = value & 0x3f; } } ret = (uint8_t) value; break; case BLADERF_MODULE_TX: /* TX only has 7 bits of scale to work with, remove normalization */ value >>= 4; /* LMS6002D 0x00 = -16, 0x80 = 0, 0xff = 15.9375 */ if (value >= 0) { ret = (uint8_t) (value >= 128) ? 0x7f : (value & 0x7f); /* Assert bit 7 for positive numbers */ ret = (1 << 7) | ret; } else { ret = (uint8_t) (value <= -128) ? 0x00 : (value & 0x7f); } break; default: assert(!"Invalid module provided"); ret = 0x00; } return ret; } #endif #ifndef BLADERF_NIOS_BUILD static int set_dc_offset_reg(struct bladerf *dev, bladerf_module module, uint8_t addr, int16_t value) { int status; uint8_t regval, tmp; switch (module) { case BLADERF_MODULE_RX: status = LMS_READ(dev, addr, &tmp); if (status != 0) { return status; } /* Bit 7 is unrelated to lms dc correction, save its state */ tmp = tmp & (1 << 7); regval = scale_dc_offset(module, value) | tmp; break; case BLADERF_MODULE_TX: regval = scale_dc_offset(module, value); break; default: return BLADERF_ERR_INVAL; } status = LMS_WRITE(dev, addr, regval); return status; } #endif #ifndef BLADERF_NIOS_BUILD int lms_set_dc_offset_i(struct bladerf *dev, bladerf_module module, uint16_t value) { const uint8_t addr = (module == BLADERF_MODULE_TX) ? 0x42 : 0x71; return set_dc_offset_reg(dev, module, addr, value); } #endif #ifndef BLADERF_NIOS_BUILD int lms_set_dc_offset_q(struct bladerf *dev, bladerf_module module, int16_t value) { const uint8_t addr = (module == BLADERF_MODULE_TX) ? 0x43 : 0x72; return set_dc_offset_reg(dev, module, addr, value); } #endif #ifndef BLADERF_NIOS_BUILD int get_dc_offset(struct bladerf *dev, bladerf_module module, uint8_t addr, int16_t *value) { int status; uint8_t tmp; status = LMS_READ(dev, addr, &tmp); if (status != 0) { return status; } switch (module) { case BLADERF_MODULE_RX: /* Mask out an unrelated control bit */ tmp = tmp & 0x7f; /* Determine sign */ if (tmp & (1 << 6)) { *value = -(int16_t)(tmp & 0x3f); } else { *value = (int16_t)(tmp & 0x3f); } /* Renormalize to 2048 */ *value <<= 5; break; case BLADERF_MODULE_TX: *value = (int16_t) tmp; /* Renormalize to 2048 */ *value <<= 4; break; default: return BLADERF_ERR_INVAL; } return 0; } #endif #ifndef BLADERF_NIOS_BUILD int lms_get_dc_offset_i(struct bladerf *dev, bladerf_module module, int16_t *value) { const uint8_t addr = (module == BLADERF_MODULE_TX) ? 0x42 : 0x71; return get_dc_offset(dev, module, addr, value); } #endif #ifndef BLADERF_NIOS_BUILD int lms_get_dc_offset_q(struct bladerf *dev, bladerf_module module, int16_t *value) { const uint8_t addr = (module == BLADERF_MODULE_TX) ? 0x43 : 0x72; return get_dc_offset(dev, module, addr, value); } #endif bladeRF-2024.05/fx3_firmware/000077500000000000000000000000001457144405000155655ustar00rootroot00000000000000bladeRF-2024.05/fx3_firmware/.cproject000066400000000000000000002266551457144405000174170ustar00rootroot00000000000000 bladeRF-2024.05/fx3_firmware/.project000066400000000000000000000046501457144405000172410ustar00rootroot00000000000000 bladeRF org.eclipse.cdt.managedbuilder.core.genmakebuilder clean,full,incremental, ?name? org.eclipse.cdt.make.core.append_environment true org.eclipse.cdt.make.core.autoBuildTarget all org.eclipse.cdt.make.core.buildArguments org.eclipse.cdt.make.core.buildCommand cs-make org.eclipse.cdt.make.core.buildLocation ${workspace_loc:/bladeRF} org.eclipse.cdt.make.core.cleanBuildTarget clean org.eclipse.cdt.make.core.contents org.eclipse.cdt.make.core.activeConfigSettings org.eclipse.cdt.make.core.enableAutoBuild false org.eclipse.cdt.make.core.enableCleanBuild true org.eclipse.cdt.make.core.enableFullBuild true org.eclipse.cdt.make.core.fullBuildTarget DEBUG=y all org.eclipse.cdt.make.core.stopOnError true org.eclipse.cdt.make.core.useDefaultBuildCmd true org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder org.eclipse.cdt.core.cnature org.eclipse.cdt.managedbuilder.core.managedBuildNature org.eclipse.cdt.managedbuilder.core.ScannerConfigNature bladeRF-2024.05/fx3_firmware/C4loader.cydsn/000077500000000000000000000000001457144405000203415ustar00rootroot00000000000000bladeRF-2024.05/fx3_firmware/C4loader.cydsn/C4loader.cyfx000066400000000000000000000050651457144405000226770ustar00rootroot00000000000000 bladeRF-2024.05/fx3_firmware/C4loader.cydsn/projectfiles/000077500000000000000000000000001457144405000230325ustar00rootroot00000000000000bladeRF-2024.05/fx3_firmware/C4loader.cydsn/projectfiles/gpif2model.xml000066400000000000000000000131421457144405000256050ustar00rootroot00000000000000 False False False False False Master Synchronous Internal Positive LittleEndian Bit16 0 OUTPUT0 GPIO_26 Low ActiveHigh Beta Toggle START True 0 STATE0 True 0 False Socket Thread3 Enable DriveNewData True INIT True 0 STATE2 True 0 False Socket Thread3 Enable DrivePreviousSetData True STATE5 True 0 False Socket Thread3 Enable DrivePreviousSetData True OUTPUT0 STATE1 True 0 False Socket Thread3 Enable DrivePreviousSetData True OUTPUT0 STATE4 True 0 False Socket Thread3 Enable DrivePreviousSetData True bladeRF-2024.05/fx3_firmware/C4loader.cydsn/projectfiles/gpif2timingsimulation.xml000066400000000000000000000011771457144405000301060ustar00rootroot00000000000000 100 512 0 bladeRF-2024.05/fx3_firmware/C4loader.cydsn/projectfiles/gpif2view.xml000066400000000000000000000130011457144405000254510ustar00rootroot00000000000000 515 214.446666666667 83 70 STATE0 STATE0 1 False 00000000-0000-0000-0000-000000000000 225 137.41 83 70 STATE1 INIT 1 False 00000000-0000-0000-0000-000000000000 679 96.41 83 70 STATE3 STATE1 1 False 00000000-0000-0000-0000-000000000000 885 36.41 83 70 STATE4 STATE2 1 False 00000000-0000-0000-0000-000000000000 1104 100.41 83 70 STATE5 STATE3 1 False 00000000-0000-0000-0000-000000000000 1265 233.41 83 70 STATE6 STATE4 1 False 00000000-0000-0000-0000-000000000000 29 18.4466666666667 83 70 STARTSTATE0 START 1 False 00000000-0000-0000-0000-000000000000 TRANSITION9 DMA_RDY_TH3 STATE6 STATE0 Connector Connector None Arrow 0 TRANSITION8 LOGIC_ONE STATE5 STATE6 Connector Connector None Arrow 0 TRANSITION7 LOGIC_ONE STATE4 STATE5 Connector Connector None Arrow 0 TRANSITION6 LOGIC_ONE STATE3 STATE4 Connector Connector None Arrow 0 TRANSITION5 LOGIC_ONE STATE0 STATE3 Connector Connector None Arrow 0 TRANSITION1 LOGIC_ONE STARTSTATE0 STATE1 Connector Connector None Arrow 0 TRANSITION0 DMA_RDY_TH3 STATE1 STATE0 Connector Connector None Arrow 0 bladeRF-2024.05/fx3_firmware/CHANGELOG000066400000000000000000000120431457144405000167770ustar00rootroot00000000000000================================================================================ bladeRF FX3 firmware Change Log Summary For more detailed information, please see the git change log and issue tracker hosted on GitHub: https://github.com/nuand/bladeRF ================================================================================ v2.4.0 (2020-08-01) -------------------------------- * Add ability to send short packets to FX3 from FPGA v2.3.2 (2018-12-26) -------------------------------- * Speed up flash operations across platforms v2.3.1 (2018-09-26) -------------------------------- * Fix USB device reset (e.g. during bladerf_open()) interrupting SPI flash autoloading of FPGA images (#661) * Add BLADE_USB_CMD_QUERY_FPGA_SOURCE command, which identifies the source of the currently-running FPGA image (SPI flash vs USB host). (#646) v2.3.0 (2018-08-29) -------------------------------- * Add BLADE_USB_CMD_QUERY_FLASH_ID command, which returns the SPI flash manufacturer and device ID information. (#571) * Update README to reflect unified firmware introduced in v2.2.0 v2.2.0 (2018-06-18) -------------------------------- * Unify bladeRF builds * Quickly determine product by reading SPI flash manufacturer v2.1.1 (2018-04-26) -------------------------------- * Fix loading FPGA bitstreams from flash when there is nothing connected to the USB connector. v2.1.0 (2017-07-25) -------------------------------- * Add support for the bladeRF 2.0 (2cf0:5250). * Create a static lib (libbladeRF_fx3.a) with code common across all products. * Rename bladeRF_fw_*.img to bladeRF1_fw_*.img to avoid ambiguity. * Move USB descriptor consts to .usbdscr section so the linker glomps them. v2.0.0 (2016-04-06) -------------------------------- * bladeRF Firmware VID/PID updated to Nuand's assigned VID. Nuand VID: 2cf0 bladeRF PID: 5246 v1.9.1 (2016-04-06) -------------------------------- * Migrated build to CMake. See README.md for updated build instructions. v1.9.0 (2015-12-13) -------------------------------- * Added simple logging mechanism v1.8.1 (2015-09-08) -------------------------------- * Updated build for FX3 SDK v1.3.3 * Addressed a few minor build warnings v1.8.0 (2014-11-6) -------------------------------- * Added "device ready" query to denote when operations such as flash-based FPGA loading have completed. v1.7.1 (2014-07-19) -------------------------------- * DMA buffers are now cleared when disabling a module. This fixes an issue where stale samples were left in DMA buffers. * Added missing support for reading back the state of the firmware loopback v1.7.0 (2014-07-04) -------------------------------- * Added firmware-based loopback mode v1.6.1 (2014-01-14) -------------------------------- * Fixed FPGA becoming reset duing flash operations * Fixed defect that caused every other FPGA load to fail v1.6.0 (2013-10-20) -------------------------------- * Increased FPGA UART bridge speed (requires FPGA >= v0.0.1) * Fixed issues with switching between RF_LINK and FPGA_CONFIG modes v1.5.3 (2013-10-15) -------------------------------- * Added FPGA autoloading support * Fixed incorrect string descriptor index v1.5.2 (2013-10-04) -------------------------------- * Fixed build issue introduced by v1.5.1 v1.5.1 (2013-10-04) -------------------------------- * Packed version structure to avoid potential struct padding issues * Moved serial number initialization to avoid a race condition v1.5.0 (2013-09-28) -------------------------------- * Switched to major.minor.patch version numbering, with git string * Fixed issues with U1/U2 transitions and endpoint halt * Addred requests for reading/refreshing cached calibration data v1.4 (2013-09-22) -------------------------------- * Overhaul of firmware code and organization * Moved FPGA config to altsetting 3 - altsetting 0 is now a NULL interface. * Added bitflip LUT to speed up FPGA load * Fixes for issues identified by USB30CV and USB20CV tests * Handle "Select Exit Latency" Standard request v1.3 (2013-09-22) -------------------------------- * Fixed issue with RESET vendor request * Added ability to jump to bootloader v1.2 (2013-09-03) -------------------------------- * Added support for serial number string request * Fixed issues with HS descriptors v1.1 (2013-08-25) -------------------------------- * Cache calibration and OTP data in RAM * Added device reset functionality * Changed from 3 interfaces to 1 interface with 3 separate altsettings * Added support for programming the SPI flash OTP region * Disabled RX DMA multi-channel v1.0/v0.3 (2013-08-25) -------------------------------- * Disabled TX DMA multi-channel * Added command-line build support * Fixes for DMA channel and UART deinitialization * Fixed USB 2.0 enumeration * Added GPIO_ID and GPIO_LED I/Os v0.2 (2013-05-19) -------------------------------- * Enabled 32-bit GPIF * Change USB VID/PID to 0x1d50/0x6066, courtesy of the OpenMoko project * Slowed down UART speed v0.1 (2013-02-18) -------------------------------- * Initial firmware for FSK bridge test bladeRF-2024.05/fx3_firmware/CMakeLists.txt000066400000000000000000000146731457144405000203400ustar00rootroot00000000000000################################################################################ # Build bladeRF FX3 Firmware ################################################################################ cmake_minimum_required(VERSION 3.5) project(bladeRF_fw C) ################################################################################ # Project configuration ################################################################################ # All build output lands in this directory: set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/output) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/output) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/output) set(CMAKE_HELPERS_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/cmake/helpers) set(CMAKE_HELPERS_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/cmake/helpers) if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Release") message(STATUS "Build type not specified. Defaulting to: ${CMAKE_BUILD_TYPE}" ) endif() set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "Build type") list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake) list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/../host/cmake/modules) ################################################################################ # Version configuration ################################################################################ # Update these definitions when updating the firmware version set(VERSION_INFO_MAJOR 2) set(VERSION_INFO_MINOR 4) set(VERSION_INFO_PATCH 0) if(NOT DEFINED VERSION_INFO_EXTRA) set(VERSION_INFO_EXTRA "git") endif() include(Version) set(VERSION "${VERSION_INFO}") # Generate firmware version header file configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/src/version.h.in ${CMAKE_CURRENT_BINARY_DIR}/include/version.h @ONLY ) ################################################################################ # Configuration options ################################################################################ option(ENABLE_BLADERF_FIRMWARE "Build firmware for the bladeRF 1.0" ON ) ################################################################################ # Build Configuration ################################################################################ # Paths for input files set(INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/include" "${CMAKE_CURRENT_SOURCE_DIR}/../firmware_common" "${FX3_INCLUDE_DIR}") set(SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src") # Base filenames for output files set(BLADERF_FW bladeRF_fw_v${VERSION_INFO_BASE}) # Common source files set(SRC_BLADERF "${SRC_DIR}/bladeRF.c" "${SRC_DIR}/cyfxbladeRFusbdscr.c" "${SRC_DIR}/flash.c" "${SRC_DIR}/fpga.c" "${SRC_DIR}/gpif.c" "${SRC_DIR}/logger.c" "${SRC_DIR}/rf.c" "${SRC_DIR}/spi_flash_lib.c" "${FX3_FW_COMMON_DIR}/cyfx_gcc_startup.S" "${FX3_FW_COMMON_DIR}/cyfxtx.c" "${SRC_DIR}/bladeRF1.c" "${SRC_DIR}/bladeRF2.c" ) if(CMAKE_BUILD_TYPE STREQUAL "Debug") set(CMAKE_C_FLAGS "-O0 -g") else() set(CMAKE_C_FLAGS "-O2") endif() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wno-unused-parameter -DCYU3P_FX3=1 \ -D__CYU3P_TX__=1 -mcpu=arm926ej-s -mthumb-interwork" ) include_directories(${INCLUDE_DIRS}) enable_language(ASM) set(CMAKE_EXE_LINKER_FLAGS "-Wl,--entry,CyU3PFirmwareEntry \ -Wl,-T,\"${FX3_LINKER_FILE}\" \ -Wl,-d -Wl,--gc-sections \ -Wl,--no-wchar-size-warning" ) ################################################################################ # Build or find required host utililities ################################################################################ if(FX3_WINDOWS_HOST) set(ELF2IMG ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/elf2img.exe) # A prebuild-elf2img binary ships with the FX3 SDK. # Just copy it to our output directory for simplicity. add_custom_command( OUTPUT ${ELF2IMG} COMMAND ${CMAKE_COMMAND} -E copy ${FX3_ELF2IMG} ${ELF2IMG} ) add_custom_target(elf2img ALL DEPENDS ${ELF2IMG}) else() # Otherwise, we need to build it ourselves include(ExternalProject) ExternalProject_Add(elf2img DOWNLOAD_COMMAND "" SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/util/elf2img/" CMAKE_ARGS "-DFX3_ELF2IMG=${FX3_ELF2IMG};-DCMAKE_RUNTIME_OUTPUT_DIRECTORY=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}" INSTALL_COMMAND "" ) set(ELF2IMG ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/elf2img) endif() ################################################################################ # Build firmware ELF ################################################################################ # Build an archive of the common object files. add_library(bladeRF_fx3 STATIC ${SRC_BLADERF}) target_link_libraries(bladeRF_fx3 "${FX3_LIBRARY_DIR}/libcyfxapi.a" "${FX3_LIBRARY_DIR}/libcyu3lpp.a" "${FX3_LIBRARY_DIR}/libcyu3threadx.a" ) if(ENABLE_BLADERF_FIRMWARE) add_executable(${BLADERF_FW}.elf ${SRC_BLADERF}) target_link_libraries(${BLADERF_FW}.elf "${FX3_LIBRARY_DIR}/libcyfxapi.a" "${FX3_LIBRARY_DIR}/libcyu3lpp.a" "${FX3_LIBRARY_DIR}/libcyu3threadx.a" "${ARM_NONE_EABI_LIBC}" "${ARM_NONE_EABI_LIBGCC}" bladeRF_fx3 ) set_target_properties(${BLADERF_FW}.elf PROPERTIES LINK_FLAGS "-Wl,-Map,output/${BLADERF_FW}.map") endif() ################################################################################ # Create bootable image from firmware ELF ################################################################################ set(ELF2IMG_WORK_DIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}") if(ENABLE_BLADERF_FIRMWARE) add_custom_command( OUTPUT ${ELF2IMG_WORK_DIR}/${BLADERF_FW}.img COMMAND ${ELF2IMG} -i ${ELF2IMG_WORK_DIR}/${BLADERF_FW}.elf -o ${ELF2IMG_WORK_DIR}/${BLADERF_FW}.img DEPENDS ${ELF2IMG_WORK_DIR}/${BLADERF_FW}.elf COMMENT "Creating ${BLADERF_FW}.img. Interrupt vector removal note is expected." ) add_custom_target(${BLADERF_FW}.img ALL DEPENDS elf2img ${ELF2IMG_WORK_DIR}/${BLADERF_FW}.elf ${ELF2IMG_WORK_DIR}/${BLADERF_FW}.img) endif() ################################################################################ # Drop our .gdbinit sample into our build output directory for convenience ################################################################################ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/gdb/gdbinit_sample ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/.gdbinit @ONLY) bladeRF-2024.05/fx3_firmware/README.md000066400000000000000000000137661457144405000170610ustar00rootroot00000000000000# bladeRF FX3 Firmware Source # The FX3 firmware source is compiled for the Cypress FX3 USB 3.0 Superspeed controller. This controller converts the USB connection to a 32-bit GPIF-II programmable interface via Cypress' GPIF-II designer software. The FX3 currently has 3 interfaces associated with it: - Cyclone IV FPGA Loader - RF Link with the LMS6002D - Control Interface The FPGA loader is responsible for loading, or reloading, the FPGA over the USB link. The RF link transfers baseband IQ samples between the FPGA and the host over the USB link. The control interface uses the built in UART to communicate with the FPGA. Messages sent over this interface include general GPIO settings, LMS6002D register accesses, VCTCXO trim DAC settings and the Si5338 clock generator register accesses. ## Building ## Building the FX3 firmware first requires the download of the [Cypress FX3 SDK][cypress_sdk]. This is free (monetarily) and may require registration on the Cypress website. The FX3 uses ThreadX as an RTOS for the ARM9 which is distributed with their SDK and linked to from our software. **This firmware build requires FX3 SDK version 1.3.3 or later** [cypress_sdk]: http://www.cypress.com/?rID=57990 (Cypress FX3 SDK) [CMake](https://cmake.org) is used to configure the build. There are two locations that we must provide to CMake when configuring the build: 1. The path to the FX3 SDK, via an `FX3_INSTALL_PATH` definition. For Windows FX3 SDK installations, this is generally already set in the environment. 2. The path to the toolchain description file in `cmake/fx3-toolchain.cmake` ### Command Line-Based Build (Recommended for Linux Users) ### Below are instructions for building the FX3 firmware from the command-line. This assumes that `cmake` and `make` are in your `PATH`, and is best suited for Linux developers. Windows users may wish to skip to the next section for a GUI-based build. (Note that a command-line build is possible with the Code Sorcery tools provided in the FX3 SDK, however. The programs have a `cs-` prefix on many of them, such as `cs-make`.) Adjust the paths as necessary on your system, depending where you installed the FX3 SDK. ``` $ mkdir build $ cd build $ cmake -DFX3_INSTALL_PATH=/opt/cypress/fx3_sdk -DCMAKE_TOOLCHAIN_FILE=../cmake/fx3-toolchain.cmake ../ $ make ``` When the firmware build is completed, you should have an `output` directory containing `bladeRF_fw_v.img`. Note that it is still possible to use Eclipse to develop and debug if you followed the above steps. See the *Creating an Eclipse Project* section below. ### GUI-Based Build (Recommended for Windows Users) ### The GUI-based build procedure is better suited for Windows users. 1. Run the CMake GUI 2. Fill in path to the source. For example:
`C:/Users/jon/Documents/projects/nuand/bladeRF/fx3_firmware` 3. Set the path to the binaries directory to `build`.
For example: `C:/Users/jon/Documents/projects/nuand/bladeRF/fx3_firmware/build` 4. Click `Add Entry`. An `Add Cache Entry` dialog will appear. 5. Set `Name` to `CMAKE_MAKE_PROGRAM` 6. Set `Type` to `FILEPATH` 7. For `Value`, use the `...` button to locate the path to `cs-make.exe`. For a standard installation, this would be:
`C:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\ARM GCC\bin\cs-make.exe` 8. Click `OK`. The `Description` field does not need to be filled in. 9. Click `Configure`. A dialog will appear, asking you to specify the Generator for this project. 10. Under `Select Generator...`, select `Unix Makefiles` 11. Choose `Specify toolchain file for cross-compiling` 12. Click `Next`. 13. Select the path to `cmake/fx3-toolchain.cmake`. For example:
`C:/Users/jon/Documents/projects/nuand/bladeRF/fx3_firmware/cmake/fx3-toolchain.cmake` 14. Click `Finish`. You will see that a number of variables have been added to the CMake Cache. 15. Click `Configure`. This should print `Configuring done` when complete. 16. Click `Generate`. This should pring `Generating done` when complete. 17. There should now be an `fx3_firmware/build` directory containing a `Makefile` The Cypress FX3 Installer creates an `FX3_INSTALL_PATH` environment variable that specifies the path to the FX3 SDK. This is used by default above configuration. If you encounter issues in the above procedure, check that this environment variable is defined by echoing it from `cmd.exe`. If it is not present, you can add this in the same way you added the `CMAKE_MAKE_PROGRAM` variable definition. An example of this definition is:
`C:/Program Files (x86)/Cypress/EZ-USB FX3 SDK/1.3` ### Creating an Eclipse Project ### The FX3 SDK provides an Eclipse-based IDE. A pre-configured project file for this tool is provided in this `fx3_firmware` directory. To import this project, perform the following steps. 1. Start the `Eclipse` IDE provided with the FX3 SDK, navigate to your workspace, and switch to the C/C++ perspective. 2. From the C/C++ Projects view, select:
`Import...` --> `General` -> `Existing Projects into Workspace`. 3. Click `Next`. 3. Under `Select root directory`, select this directory (`bladeRF/fx3_firmware`) 4. You should see `bladeRF` listed under `Projects`. Ensure this is checked and click `Finish`. 5. **Linux users only**: From the C/C++ Projects view, right click bladeRF and select `Properties`. Under `C/C++ Build` --> `Builder Settings`, uncheck `Use default build command` and change `cs-make` to `make`. cs-make is provided with the Windows SDK. Linux users may simply use the `make` program provided by their distribution. 6. Kick off the build! The resulting `build/output/bladeRF_fw_v.img` should be the same as those obtained from the command-line build outlined in the previous section. For more information about developing and debugging FX3 firmware, see the [FX3 Programmer's Manual][fx3_prog_manual]. [fx3_prog_manual]: http://www.cypress.com/?rID=52250 (FX3 Programmer's Manual) ## Pre-built Firmware Binaries ## Pre-built binaries are available at: http://www.nuand.com/fx3 The latest image is pointed to by: http://www.nuand.com/fx3/latest.img bladeRF-2024.05/fx3_firmware/RFlink.cydsn/000077500000000000000000000000001457144405000200715ustar00rootroot00000000000000bladeRF-2024.05/fx3_firmware/RFlink.cydsn/RFlink.cyfx000066400000000000000000000043101457144405000221470ustar00rootroot00000000000000 bladeRF-2024.05/fx3_firmware/RFlink.cydsn/projectfiles/000077500000000000000000000000001457144405000225625ustar00rootroot00000000000000bladeRF-2024.05/fx3_firmware/RFlink.cydsn/projectfiles/gpif2model.xml000066400000000000000000000223631457144405000253420ustar00rootroot00000000000000 False False False False False Master Synchronous Internal Positive LittleEndian Bit32 0 RX_0 GPIO_17 ActiveHigh RX_1 GPIO_18 ActiveHigh TX_2 GPIO_19 ActiveHigh TX_3 GPIO_20 ActiveHigh DMA_RX GPIO_21 Low ActiveHigh Alpha Assert FLAG0 GPIO_25 Low ActiveHigh Thread_0_DMA_Ready FLAG1 GPIO_29 Low ActiveHigh Thread_1_DMA_Ready FLAG2 GPIO_27 Low ActiveHigh Thread_2_DMA_Ready FLAG3 GPIO_28 Low ActiveHigh Thread_3_DMA_Ready DMA_TX GPIO_22 Low ActiveHigh Alpha Assert DMA_DONE GPIO_23 Low ActiveHigh Alpha Assert SYS_RST GPIO_24 High ActiveHigh Alpha Toggle START True 0 INIT True 0 SYS_RST IF_RX_0 True 0 Socket Thread0 True True IF_RX_1 True 0 Socket Thread1 True True IF_TX_2 True 0 False Socket Thread2 Enable DriveNewData True DONE True 0 WAIT_0 True 0 DMA_DONE IF_TX_3 True 0 False Socket Thread3 Enable DriveNewData True IF_TX True 0 IF_RX True 0 bladeRF-2024.05/fx3_firmware/RFlink.cydsn/projectfiles/gpif2timingsimulation.xml000066400000000000000000000031331457144405000276300ustar00rootroot00000000000000 100 16 12 bladeRF-2024.05/fx3_firmware/RFlink.cydsn/projectfiles/gpif2view.xml000066400000000000000000000221571457144405000252150ustar00rootroot00000000000000 224 274.446666666667 83 70 STATE0 INIT 1 False 00000000-0000-0000-0000-000000000000 771 129.41 83 70 STATE1 IF_RX_0 1 False 00000000-0000-0000-0000-000000000000 770 237.41 83 70 STATE2 IF_RX_1 1 False 00000000-0000-0000-0000-000000000000 1024 262.41 83 70 STATE5 DONE 1 False 00000000-0000-0000-0000-000000000000 491 271.41 83 70 STATE6 WAIT_0 1 False 00000000-0000-0000-0000-000000000000 771 357.41 83 70 STATE10 IF_TX_2 1 False 00000000-0000-0000-0000-000000000000 635 166.41 83 70 STATE11 IF_RX 1 False 00000000-0000-0000-0000-000000000000 772 470.41 83 70 STATE12 IF_TX_3 1 False 00000000-0000-0000-0000-000000000000 631 418.41 83 70 STATE13 IF_TX 1 False 00000000-0000-0000-0000-000000000000 29 18.4466666666667 83 70 STARTSTATE0 START 1 False 00000000-0000-0000-0000-000000000000 TRANSITION26 LOGIC_ONE STATE5 STATE6 Connector Connector None Arrow 0 TRANSITION25 !DMA_RDY_TH3 STATE12 STATE5 Connector Connector None Arrow 0 TRANSITION24 TX_3 STATE13 STATE12 Connector Connector None Arrow 0 TRANSITION23 TX_2 STATE13 STATE10 Connector Connector None Arrow 0 TRANSITION22 TX_2|TX_3 STATE6 STATE13 Connector Connector None Arrow 0 TRANSITION21 RX_0|RX_1 STATE6 STATE11 Connector Connector None Arrow 0 TRANSITION20 RX_1 STATE11 STATE2 Connector Connector None Arrow 0 TRANSITION19 RX_0 STATE11 STATE1 Connector Connector None Arrow 0 TRANSITION17 !DMA_RDY_TH2 STATE10 STATE5 Connector Connector None Arrow 0 TRANSITION12 LOGIC_ONE STATE0 STATE6 Connector Connector None Arrow 0 TRANSITION2 !DMA_RDY_TH1 STATE2 STATE5 Connector Connector None Arrow 0 TRANSITION1 !DMA_RDY_TH0 STATE1 STATE5 Connector Connector None Arrow 0 TRANSITION0 LOGIC_ONE STARTSTATE0 STATE0 Connector Connector None Arrow 0 bladeRF-2024.05/fx3_firmware/cmake/000077500000000000000000000000001457144405000166455ustar00rootroot00000000000000bladeRF-2024.05/fx3_firmware/cmake/fx3-toolchain.cmake000066400000000000000000000133551457144405000223340ustar00rootroot00000000000000################################################################################ # Configure CMake and setup variables for the Cypress FX3 SDK v1.3.3 # # Inputs: # FX3_INSTALL_PATH Path to Cypress FX3 SDK Installation. # This variable name coincides with the environment # variable added by the FX3 SDK installer # # ################################################################################ cmake_minimum_required(VERSION 3.5) ################################################################################ # FX3 SDK paths and files ################################################################################ set(FX3_SDK_VERSION "1.3.3") set(ARM_TOOLCHAIN_VERSION "2013.11") set(GCC_VERSION "4.8.1") # There seems to be some known strange behavior where CMake loses track of # cached variables when (re)parsing toolchain files. This is a workaround # identified in http://stackoverflow.com/questions/28613394/check-cmake-cache-variable-in-toolchain-file if(FX3_INSTALL_PATH) # Use the environment to back up this definition, per that above workaround set(ENV{_FX3_INSTALL_PATH} "${FX3_INSTALL_PATH}") else() if(NOT "$ENV{_FX3_INSTALL_PATH}" STREQUAL "") # Use the definition we backed up in the environment. set(FX3_INSTALL_PATH "$ENV{_FX3_INSTALL_PATH}") else() # Try falling back to a path definition (created by Windows installer) set(FX3_INSTALL_PATH "$ENV{FX3_INSTALL_PATH}") endif() endif() # Paths to a specfic version use underscores instead of paths string(REPLACE "." "_" FX3_SDK_VERSION_PATH "${FX3_SDK_VERSION}") if(WIN32) if("${FX3_INSTALL_PATH}" STREQUAL "") set(FX3_INSTALL_PATH "C:/Program Files (x86)/Cypress/EZ-USB FX3 SDK/1.3") message("FX3_INSTALL_PATH not specified. Falling back to default.") endif() set(FX3_WINDOWS_HOST True) set(EXE ".exe") set(ARM_NONE_EABI_PATH "${FX3_INSTALL_PATH}/ARM GCC") set(FX3_FWLIB_DIR "${FX3_INSTALL_PATH}/fw_lib/${FX3_SDK_VERSION_PATH}") set(FX3_FW_COMMON_DIR "${FX3_INSTALL_PATH}/firmware/common") set(FX3_ELF2IMG "${FX3_INSTALL_PATH}/util/elf2img/elf2img.exe") set(CMAKE_MAKE_PROGRAM "${FX3_INSTALL_PATH}/ARM GCC/bin/cs-make.exe") else() if("${FX3_INSTALL_PATH}" STREQUAL "") set(FX3_INSTALL_PATH "/opt/cypress/fx3_sdk") message("FX3_INSTALL_PATH not specified. Falling back to default.") endif() set(FX3_WINDOWS_HOST False) unset(EXE) set(ARM_NONE_EABI_PATH "${FX3_INSTALL_PATH}/../ARM_GCC/arm-${ARM_TOOLCHAIN_VERSION}") set(FX3_FWLIB_DIR "${FX3_INSTALL_PATH}/cyfx3sdk/fw_lib/${FX3_SDK_VERSION_PATH}") set(FX3_FW_COMMON_DIR "${FX3_INSTALL_PATH}/cyfx3sdk/firmware/common") set(FX3_ELF2IMG "${FX3_INSTALL_PATH}/cyfx3sdk/util/elf2img/elf2img.c") endif() if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") set(FX3_LIBRARY_DIR "${FX3_FWLIB_DIR}/fx3_debug") else() set(FX3_LIBRARY_DIR "${FX3_FWLIB_DIR}/fx3_release") endif() set(FX3_WINDOWS_HOST ${FX3_WINDOWS_HOST} CACHE PATH "Cross-build host is Windows") set(FX3_INSTALL_PATH ${FX3_INSTALL_PATH} CACHE PATH "Path to FX3 SDK") set(FX3_INCLUDE_DIR "${FX3_FWLIB_DIR}/inc" CACHE PATH "Path to FX3 header directory") set(FX3_LIBRARY_DIR "${FX3_LIBRARY_DIR}" CACHE PATH "FX3 Library directory") set(FX3_FW_COMMON_DIR "${FX3_FW_COMMON_DIR}" CACHE PATH "FX3 SDK directory containing common linker and startup source files") set(FX3_LINKER_FILE "${FX3_FW_COMMON_DIR}/fx3_512k.ld" CACHE PATH "FX3 Linker script") set(FX3_ELF2IMG "${FX3_ELF2IMG}" CACHE PATH "FX3 ELF to boot image converter source (Linux) or executable (Windows)") # Perform some sanity checks on the above paths if(NOT EXISTS "${FX3_LINKER_FILE}") message(FATAL_ERROR "FX3 SDK: Could not find linker file: ${FX3_LINKER_FILE}") endif() if(NOT EXISTS "${FX3_FWLIB_DIR}") message(FATAL_ERROR "FX3 SDK: Could not find ${FX3_FWLIB_DIR}") endif() if(NOT EXISTS "${FX3_INCLUDE_DIR}/cyu3os.h") message(FATAL_ERROR "cyu3os.h is missing. Check FX3_INCLUDE_DIR definition.") endif() if(NOT EXISTS "${FX3_LIBRARY_DIR}/libcyfxapi.a") message(FATAL_ERROR "libcyfxapi.a is missing. Check FX3_LIBRARY_DIR definition.") endif() if(NOT EXISTS "${FX3_ELF2IMG}") message(FATAL_ERROR "${FX3_ELF2IMG} is missing.") endif() ################################################################################ # ARM Toolchain paths and sanity checks ################################################################################ set(CMAKE_C_COMPILER "${ARM_NONE_EABI_PATH}/bin/arm-none-eabi-gcc${EXE}") set(ARM_NONE_EABI_LIBGCC "${ARM_NONE_EABI_PATH}/lib/gcc/arm-none-eabi/${GCC_VERSION}/libgcc.a" CACHE PATH "Path to FX3 SDK's libgcc.a") set(ARM_NONE_EABI_LIBC "${ARM_NONE_EABI_PATH}/arm-none-eabi/lib/libc.a" CACHE PATH "Path to FX3 SDK's libc.a") if(NOT EXISTS ${CMAKE_C_COMPILER}) message(FATAL_ERROR "Could not find compiler: ${CMAKE_C_COMPILER}") endif() if(NOT EXISTS ${ARM_NONE_EABI_LIBGCC}) message(FATAL_ERROR "Could not find libgcc.a: ${ARM_NONE_EABI_PATH}/lib/gcc/arm-none-eabi/${GCC_VERSION}/") endif() if(NOT EXISTS ${ARM_NONE_EABI_LIBC}) message(FATAL_ERROR "Could not find libc.a") endif() ################################################################################ # CMake toolchain file configuration ################################################################################ set(CMAKE_SYSTEM_NAME Generic) # Search for programms in the build host directories set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) # Search for libraries and headers in the target directories set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(CMAKE_FIND_ROOT_PATH ${ARM_NONE_EABI_PATH}) bladeRF-2024.05/fx3_firmware/gdb/000077500000000000000000000000001457144405000163215ustar00rootroot00000000000000bladeRF-2024.05/fx3_firmware/gdb/README.md000066400000000000000000000003241457144405000175770ustar00rootroot00000000000000This directory contains a sample `.gdbinit` file that may be used to configure GDB when debugging the firmware. This file is copied to the build `output` directory alongside the firmware image during the build. bladeRF-2024.05/fx3_firmware/gdb/gdbinit_sample000066400000000000000000000016331457144405000212300ustar00rootroot00000000000000# This sample .gdbinit file based upon the one provided in Cypress's # FX3 Programmer's Manual, found here: # http://www.cypress.com/?rID=57990 # # Symlink or rename this file to ".gdbinit" in the directory from # which you're running arm-none-eabi-gdb. set prompt (arm-gdb) # Segger J-Link target remote localhost:2331 # OpenOCD # target remote localhost:3333 # monitor halt monitor speed 1000 monitor endian little set endian little monitor reset # Set the processor to SVC mode monitor reg cpsr =0xd3 # Disable all interrupts monitor memU32 0xFFFFF014 =0xFFFFFFFF # Enable the TCMs monitor memU32 0x40000000 =0xE3A00015 monitor memU32 0x40000004 =0xEE090F31 monitor memU32 0x40000008 =0xE240024F monitor memU32 0x4000000C =0xEE090F11 # Configure the FX3 SYSCLK monitor memU32 0xE0052000 = 0x00080115 # Add a delay to let the clock stabilize. monitor sleep 1000 set $pc =0x40000000 si si si si load break main bladeRF-2024.05/fx3_firmware/src/000077500000000000000000000000001457144405000163545ustar00rootroot00000000000000bladeRF-2024.05/fx3_firmware/src/bladeRF.c000066400000000000000000001021711457144405000200210ustar00rootroot00000000000000/* * bladeRF FX3 firmware (bladeRF.c) * * Copyright (c) 2013 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include "cyu3system.h" #include "cyu3os.h" #include "cyu3dma.h" #include "cyu3error.h" #include "cyu3usb.h" #include "bladeRF.h" #include "cyu3gpif.h" #include "cyu3pib.h" #include "cyu3gpio.h" #include "pib_regs.h" #include "flash.h" #include "spi_flash_lib.h" #include "rf.h" #include "fpga.h" #include "version.h" /* Generated by CMake */ #define THIS_FILE LOGGER_ID_BLADERF_C uint32_t glAppMode = MODE_NO_CONFIG; CyU3PThread bladeRFAppThread; uint8_t glUsbConfiguration = 0; /* Active USB configuration. */ uint8_t glUsbAltInterface = 0; /* Active USB interface. */ uint8_t glSelBuffer[32]; uint8_t glPageBuffer[FLASH_PAGE_SIZE] __attribute__ ((aligned (32))); CyBool_t glCalCacheValid = CyFalse; uint8_t glCal[CAL_BUFFER_SIZE] __attribute__ ((aligned (32))); CyBool_t glDeviceReady = CyFalse; /* Used to denote that the device * can't be accessed until the FPGA * autoload is finished */ CyBool_t glAutoLoadValid = CyFalse; uint8_t glAutoLoad[CAL_BUFFER_SIZE] __attribute__ ((aligned (32))); /* Standard product string descriptor */ uint8_t CyFxUSBSerial[] __attribute__ ((aligned (32))) = { 0x42, /* Descriptor size */ CY_U3P_USB_STRING_DESCR, /* Device descriptor type */ '0',0x00,'0',0x00,'0',0x00,'0',0x00,'0',0x00,'0',0x00,'0',0x00,'0',0x00, '0',0x00,'0',0x00,'0',0x00,'0',0x00,'0',0x00,'0',0x00,'0',0x00,'0',0x00, '0',0x00,'0',0x00,'0',0x00,'0',0x00,'0',0x00,'0',0x00,'0',0x00,'0',0x00, '0',0x00,'0',0x00,'0',0x00,'0',0x00,'0',0x00,'0',0x00,'0',0x00,'0',0x00, }; uint8_t CyFxUSBVersion[sizeof(FIRMWARE_VERSION)*2+2] __attribute__ ((aligned (32))); void populateVersionString() { uint32_t i; CyFxUSBVersion[0] = sizeof(CyFxUSBVersion); CyFxUSBVersion[1] = CY_U3P_USB_STRING_DESCR; for (i = 0; i < sizeof(FIRMWARE_VERSION) ; i++) { CyFxUSBVersion[2*i+2] = FIRMWARE_VERSION[i]; } return; } /* Application Error Handler */ void CyFxAppErrorHandler(CyU3PReturnStatus_t apiRetStatus) { /* firmware failed with the error code apiRetStatus */ /* Loop Indefinitely */ for (;;) /* Thread sleep : 100 ms */ CyU3PThreadSleep(100); } void NuandGPIOReconfigure(CyBool_t fullGpif, CyBool_t warm) { CyU3PReturnStatus_t apiRetStatus = CY_U3P_SUCCESS; CyU3PIoMatrixConfig_t io_cfg; CyU3PGpioSimpleConfig_t gpioConfig; CyU3PReturnStatus_t status = CY_U3P_SUCCESS; size_t i; struct { int pin; // pin number int input; // is this an input pin int warm; // should this pin be enabled via IOMatrix() call? // GPIF pins should be marked False, because they have to overriden } pins[] = { {GPIO_nSTATUS, CyTrue, CyTrue}, {GPIO_CONFDONE, CyTrue, CyTrue}, {GPIO_SYS_RST, CyFalse, CyFalse}, {GPIO_RX_EN, CyFalse, CyFalse}, {GPIO_TX_EN, CyFalse, CyFalse}, {GPIO_nCONFIG, CyFalse, CyTrue}, {GPIO_ID, CyTrue, CyTrue}, {GPIO_LED, CyFalse, CyTrue} }; #define ARR_SIZE(x) (sizeof(x)/sizeof(x[0])) io_cfg.useUart = CyTrue; io_cfg.useI2C = CyFalse; io_cfg.useI2S = CyFalse; io_cfg.useSpi = !fullGpif; io_cfg.isDQ32Bit = fullGpif; io_cfg.lppMode = CY_U3P_IO_MATRIX_LPP_DEFAULT; io_cfg.gpioSimpleEn[0] = 0; io_cfg.gpioSimpleEn[1] = 0; if (warm) { for (i = 0; i < ARR_SIZE(pins); i++) { if (!pins[i].warm) continue; if (pins[i].pin < 32) { io_cfg.gpioSimpleEn[0] |= 1 << (pins[i].pin - 1); } else { io_cfg.gpioSimpleEn[1] |= 1 << (pins[i].pin - 32); } } } io_cfg.gpioComplexEn[0] = 0; io_cfg.gpioComplexEn[1] = 0; status = CyU3PDeviceConfigureIOMatrix (&io_cfg); if (status != CY_U3P_SUCCESS) { while(1); } for (i = 0; i < ARR_SIZE(pins); i++) { // the pin has already been activated by the call to IOMatrix() if (warm && pins[i].warm) continue; apiRetStatus = CyU3PDeviceGpioOverride(pins[i].pin, CyTrue); if (apiRetStatus != 0) { LOG_ERROR(apiRetStatus); CyFxAppErrorHandler(apiRetStatus); } gpioConfig.intrMode = CY_U3P_GPIO_NO_INTR; if (pins[i].input) { // input config gpioConfig.outValue = CyTrue; gpioConfig.inputEn = CyTrue; gpioConfig.driveLowEn = CyFalse; gpioConfig.driveHighEn = CyFalse; } else { // output config gpioConfig.outValue = CyFalse; gpioConfig.driveLowEn = CyTrue; gpioConfig.driveHighEn = CyTrue; gpioConfig.inputEn = CyFalse; } apiRetStatus = CyU3PGpioSetSimpleConfig(pins[i].pin, &gpioConfig); if (apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); CyFxAppErrorHandler(apiRetStatus); } } } uint16_t NuandGetProductID() { if (NuandGetSPIManufacturer() == 0xEF) { return USB_NUAND_BLADERF2_PRODUCT_ID; } return USB_NUAND_BLADERF_PRODUCT_ID; } void NuandFpgaConfigSwFlipLut(uint16_t flipLut[256]) { if (NuandGetProductID() == USB_NUAND_BLADERF_PRODUCT_ID) { NuandFpgaConfigSwFlipLut_bladeRF1(flipLut); } else { NuandFpgaConfigSwFlipLut_bladeRF2(flipLut); } } void CyFxGpioInit(void) { CyU3PGpioClock_t gpioClock; CyU3PReturnStatus_t apiRetStatus = CY_U3P_SUCCESS; /* Init the GPIO module */ gpioClock.fastClkDiv = 2; gpioClock.slowClkDiv = 0; gpioClock.simpleDiv = CY_U3P_GPIO_SIMPLE_DIV_BY_2; gpioClock.clkSrc = CY_U3P_SYS_CLK; gpioClock.halfDiv = 0; apiRetStatus = CyU3PGpioInit(&gpioClock, NULL); if (apiRetStatus != 0) { /* Error Handling */ LOG_ERROR(apiRetStatus); CyFxAppErrorHandler(apiRetStatus); } NuandGPIOReconfigure(CyTrue, CyFalse); } static void StopApplication() { if (glAppMode == MODE_RF_CONFIG) { NuandRFLink.stop(); } else if (glAppMode == MODE_FPGA_CONFIG) { /* if a flash autoload is in progress, don't stop it */ if (glDeviceReady || !glAutoLoadValid) { NuandFpgaConfig.stop(); } } } CyBool_t GetStatus(uint16_t endpoint) { CyBool_t isHandled = CyFalse; uint8_t get_status_reply[] = {0x00, 0x00}; switch(glUsbAltInterface) { case USB_IF_RF_LINK: isHandled = NuandRFLink.halted(endpoint, &get_status_reply[0]); break; case USB_IF_CONFIG: isHandled = NuandFpgaConfig.halted(endpoint, &get_status_reply[0]); break; default: case USB_IF_SPI_FLASH: /* USB_IF_CONFIG has no end points */ break; } if(isHandled) { CyU3PUsbSendEP0Data(sizeof(get_status_reply), get_status_reply); } return isHandled; } CyU3PReturnStatus_t ClearDMAChannel(uint8_t ep, CyU3PDmaChannel * handle, uint32_t count) { CyU3PReturnStatus_t status; status = CyU3PDmaChannelReset(handle); if (status != CY_U3P_SUCCESS) { LOG_ERROR(status); return status; } status = CyU3PUsbFlushEp(ep); if (status != CY_U3P_SUCCESS) { LOG_ERROR(status); return status; } status = CyU3PUsbResetEp(ep); if (status != CY_U3P_SUCCESS) { LOG_ERROR(status); return status; } status = CyU3PDmaChannelSetXfer (handle, count); if (status != CY_U3P_SUCCESS) { LOG_ERROR(status); } return status; } CyBool_t ClearHaltCondition(uint16_t endpoint) { CyBool_t isHandled = CyFalse; switch(glUsbAltInterface) { case USB_IF_RF_LINK: isHandled = NuandRFLink.halt_endpoint(CyFalse, endpoint); break; case USB_IF_CONFIG: isHandled = NuandFpgaConfig.halt_endpoint(CyFalse, endpoint); break; default: case USB_IF_SPI_FLASH: /* USB_IF_SPI_FLASH has no end points */ break; } return isHandled; } CyBool_t SetHaltCondition(uint16_t endpoint) { CyBool_t isHandled = CyFalse; switch(glUsbAltInterface) { case USB_IF_RF_LINK: isHandled = NuandRFLink.halt_endpoint(CyTrue, endpoint); break; case USB_IF_CONFIG: isHandled = NuandFpgaConfig.halt_endpoint(CyTrue, endpoint); break; default: case USB_IF_SPI_FLASH: /* USB_IF_CONFIG has no end points */ break; } return isHandled; } void CyU3PUsbSendRetCode(CyU3PReturnStatus_t ret_status) { CyU3PReturnStatus_t apiRetStatus; apiRetStatus = CyU3PUsbSendEP0Data( sizeof(ret_status), (void*)&ret_status); if(apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); } } static CyU3PReturnStatus_t NuandReadCalTable(uint8_t *cal_buff) { CyU3PReturnStatus_t apiRetStatus; apiRetStatus = CyFxSpiTransfer(CAL_PAGE, CAL_BUFFER_SIZE, cal_buff, CyTrue, CyFalse); /* FIXME: Validate table */ return apiRetStatus; } static CyU3PReturnStatus_t NuandReadAutoLoad(uint8_t *cal_buff) { CyU3PReturnStatus_t apiRetStatus; apiRetStatus = CyFxSpiTransfer(AUTOLOAD_PAGE, AUTOLOAD_BUFFER_SIZE, cal_buff, CyTrue, CyFalse); /* FIXME: Validate table */ return apiRetStatus; } CyBool_t NuandHandleVendorRequest( uint8_t bRequest, uint16_t wValue, uint16_t wIndex, uint16_t wLength ) { CyBool_t isHandled; unsigned int ret; uint8_t use_feature; CyBool_t fpgaProg; struct bladerf_fx3_version ver; CyU3PReturnStatus_t apiRetStatus = CY_U3P_SUCCESS; int retStatus; uint16_t readC; CyBool_t txen, rxen; txen = rxen = CyFalse ; isHandled = CyTrue; /* Device is not ready to handle requests */ if (!glDeviceReady && bRequest != BLADE_USB_CMD_QUERY_DEVICE_READY) { return -1; } switch (bRequest) { case BLADE_USB_CMD_QUERY_VERSION: ver.major = FIRMWARE_VERSION_MAJOR; ver.minor = FIRMWARE_VERSION_MINOR; apiRetStatus = CyU3PUsbSendEP0Data(sizeof(ver), (void*)&ver); break; case BLADE_USB_CMD_RF_RX: apiRetStatus = CY_U3P_SUCCESS; use_feature = wValue; CyU3PGpioGetValue(GPIO_TX_EN, &txen) ; CyU3PGpioGetValue(GPIO_RX_EN, &rxen) ; if (txen == CyFalse && rxen == CyFalse) { CyU3PGpioSetValue(GPIO_SYS_RST, CyTrue) ; CyU3PGpioSetValue(GPIO_SYS_RST, CyFalse); } CyU3PGpioSetValue(GPIO_RX_EN, use_feature ? CyTrue : CyFalse); if (!use_feature) { const uint8_t ep = BLADE_RF_SAMPLE_EP_CONSUMER; apiRetStatus = NuandRFLink.reset_endpoint(ep); if(apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); } } CyU3PUsbSendRetCode(apiRetStatus); break; case BLADE_USB_CMD_RF_TX: apiRetStatus = CY_U3P_SUCCESS; use_feature = wValue; CyU3PGpioGetValue(GPIO_TX_EN, &txen) ; CyU3PGpioGetValue(GPIO_RX_EN, &rxen) ; if (txen == CyFalse && rxen == CyFalse) { CyU3PGpioSetValue(GPIO_SYS_RST, CyTrue) ; CyU3PGpioSetValue(GPIO_SYS_RST, CyFalse); } CyU3PGpioSetValue(GPIO_TX_EN, use_feature ? CyTrue : CyFalse); if (!use_feature) { const uint8_t ep = BLADE_RF_SAMPLE_EP_PRODUCER; apiRetStatus = NuandRFLink.reset_endpoint(ep); if(apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); } } CyU3PUsbSendRetCode(apiRetStatus); break; case BLADE_USB_CMD_BEGIN_PROG: retStatus = FpgaBeginProgram(); if(0 == retStatus) { NuandSetFpgaConfigSource(NUAND_FPGA_CONFIG_SOURCE_HOST); } CyU3PUsbSendRetCode(retStatus); break; case BLADE_USB_CMD_QUERY_FPGA_STATUS: apiRetStatus = CyU3PGpioGetValue (GPIO_CONFDONE, &fpgaProg); if (apiRetStatus == CY_U3P_SUCCESS) { ret = fpgaProg ? 1 : 0; } else { ret = -1; } CyU3PUsbSendRetCode(ret); break; case BLADE_USB_CMD_QUERY_DEVICE_READY: ret = glDeviceReady ? 1 : 0; CyU3PUsbSendRetCode(ret); break; case BLADE_USB_CMD_QUERY_FLASH_ID: ret = (NuandGetSPIManufacturer() << 8) | NuandGetSPIDeviceID(); CyU3PUsbSendRetCode(ret); break; case BLADE_USB_CMD_QUERY_FPGA_SOURCE: ret = (unsigned int)NuandGetFpgaConfigSource(); CyU3PUsbSendRetCode(ret); case BLADE_USB_CMD_SET_LOOPBACK: NuandRFLinkLoopBack(wValue); CyU3PUsbSendRetCode(wValue); break; case BLADE_USB_CMD_GET_LOOPBACK: { int isLoopbackEnabled = NuandRFLinkGetLoopBack(); CyU3PUsbSendRetCode(isLoopbackEnabled); } break; case BLADE_USB_CMD_READ_PAGE_BUFFER: if(wIndex + wLength > sizeof(glPageBuffer)) { apiRetStatus = CyU3PUsbStall(0x80, CyTrue, CyFalse); } apiRetStatus = CyU3PUsbSendEP0Data(wLength, &glPageBuffer[wIndex]); if(apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); } break; case BLADE_USB_CMD_WRITE_PAGE_BUFFER: if(wIndex + wLength > sizeof(glPageBuffer)) { apiRetStatus = CyU3PUsbStall(0x0, CyTrue, CyFalse); } apiRetStatus = CyU3PUsbGetEP0Data(wLength, &glPageBuffer[wIndex], &readC); if(apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); } if(readC != wLength) { LOG_ERROR(readC); LOG_ERROR(wLength); } break; case BLADE_USB_CMD_WRITE_OTP: if (glUsbAltInterface != USB_IF_SPI_FLASH) { apiRetStatus = CyU3PUsbStall(0x80, CyTrue, CyFalse); } apiRetStatus = NuandWriteOtp(wIndex, 0x100, glPageBuffer); CyU3PUsbSendRetCode(apiRetStatus); break; case BLADE_USB_CMD_READ_OTP: if (glUsbAltInterface != USB_IF_SPI_FLASH) { apiRetStatus = CyU3PUsbStall(0x80, CyTrue, CyFalse); } apiRetStatus = NuandReadOtp(wIndex, 0x100, glPageBuffer); CyU3PUsbSendRetCode(apiRetStatus); break; case BLADE_USB_CMD_LOCK_OTP: if (glUsbAltInterface != USB_IF_SPI_FLASH) { apiRetStatus = CyU3PUsbStall(0x80, CyTrue, CyFalse); } apiRetStatus = NuandLockOtp(); CyU3PUsbSendRetCode(apiRetStatus); break; case BLADE_USB_CMD_FLASH_READ: if (glUsbAltInterface != USB_IF_SPI_FLASH) { apiRetStatus = CyU3PUsbStall(0x80, CyTrue, CyFalse); } apiRetStatus = CyFxSpiTransfer ( wIndex, 0x100, glPageBuffer, CyTrue, CyFalse); CyU3PUsbSendRetCode(apiRetStatus); break; case BLADE_USB_CMD_FLASH_WRITE: if (glUsbAltInterface != USB_IF_SPI_FLASH) { apiRetStatus = CyU3PUsbStall(0x80, CyTrue, CyFalse); } apiRetStatus = CyFxSpiTransfer ( wIndex, 0x100, glPageBuffer, CyFalse, CyFalse); CyU3PUsbSendRetCode(apiRetStatus); break; case BLADE_USB_CMD_FLASH_ERASE: if (glUsbAltInterface != USB_IF_SPI_FLASH) { apiRetStatus = CyU3PUsbStall(0x80, CyTrue, CyFalse); } apiRetStatus = CyFxSpiEraseSector(CyTrue, wIndex); CyU3PUsbSendRetCode(apiRetStatus); break; case BLADE_USB_CMD_READ_CAL_CACHE: if(!glCalCacheValid) { /* Fail the request if the cache is invalid */ apiRetStatus = CyU3PUsbStall(0x80, CyTrue, CyFalse); } if(wIndex + wLength > sizeof(glCal)) { apiRetStatus = CyU3PUsbStall(0x80, CyTrue, CyFalse); } apiRetStatus = CyU3PUsbSendEP0Data(wLength, &glCal[wIndex]); if (apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); } break; case BLADE_USB_CMD_INVALIDATE_CAL_CACHE: glCalCacheValid = CyFalse; CyU3PUsbAckSetup(); break; case BLADE_USB_CMD_REFRESH_CAL_CACHE: if (glUsbAltInterface != USB_IF_SPI_FLASH) { apiRetStatus = CyU3PUsbStall(0x80, CyTrue, CyFalse); } apiRetStatus = NuandReadCalTable(glCal); if(apiRetStatus == CY_U3P_SUCCESS) { glCalCacheValid = CyTrue; } CyU3PUsbSendRetCode(apiRetStatus); break; case BLADE_USB_CMD_RESET: CyU3PUsbAckSetup(); CyU3PDeviceReset(CyFalse); break; case BLADE_USB_CMD_JUMP_TO_BOOTLOADER: StopApplication(); NuandFlashInit(); // Erase the first sector so we can write the bootloader // header apiRetStatus = CyFxSpiEraseSector(CyTrue, 0); if(apiRetStatus != CY_U3P_SUCCESS) { CyU3PUsbStall(0, CyTrue, CyFalse); CyU3PDeviceReset(CyFalse); break; } uint8_t bootloader_header[] = { 'C','Y', // Common header 0, // 10 MHz SPI, image data 0xB2, // Bootloader VID/PID (USB_NUAND_BLADERF_BOOT_PRODUCT_ID & 0xFF), (USB_NUAND_BLADERF_BOOT_PRODUCT_ID & 0xFF00) >> 8, (USB_NUAND_VENDOR_ID & 0xFF), (USB_NUAND_VENDOR_ID & 0xFF00) >> 8, }; apiRetStatus = CyFxSpiTransfer ( /* Page */ 0, sizeof(bootloader_header), bootloader_header, CyFalse, CyFalse /* Writing */ ); CyU3PUsbAckSetup(); CyU3PDeviceReset(CyFalse); break; case BLADE_USB_CMD_READ_LOG_ENTRY: CyU3PUsbSendRetCode(logger_read()); break; default: isHandled = CyFalse; } return isHandled; } /* Callback to handle the USB setup requests. */ CyBool_t CyFxbladeRFApplnUSBSetupCB(uint32_t setupdat0, uint32_t setupdat1) { uint8_t bRequest, bReqType; uint8_t bType, bTarget; uint16_t wValue, wIndex, wLength; uint8_t bTemp; CyBool_t isHandled = CyFalse; /* Decode the fields from the setup request. */ bReqType = (setupdat0 & CY_U3P_USB_REQUEST_TYPE_MASK); bType = (bReqType & CY_U3P_USB_TYPE_MASK); bTarget = (bReqType & CY_U3P_USB_TARGET_MASK); bRequest = ((setupdat0 & CY_U3P_USB_REQUEST_MASK) >> CY_U3P_USB_REQUEST_POS); wValue = ((setupdat0 & CY_U3P_USB_VALUE_MASK) >> CY_U3P_USB_VALUE_POS); wIndex = ((setupdat1 & CY_U3P_USB_INDEX_MASK) >> CY_U3P_USB_INDEX_POS); wLength = ((setupdat1 & CY_U3P_USB_LENGTH_MASK) >> CY_U3P_USB_LENGTH_POS); if (bType == CY_U3P_USB_STANDARD_RQT) { if (bRequest == CY_U3P_USB_SC_SET_SEL) { { if ((CyU3PUsbGetSpeed () == CY_U3P_SUPER_SPEED) && (wValue == 0) && (wIndex == 0) && (wLength == 6)) { CyU3PUsbGetEP0Data (32, glSelBuffer, 0); } else { isHandled = CyFalse; } } } if (bRequest == CY_U3P_USB_SC_GET_INTERFACE && wLength == 1) { bTemp = glUsbAltInterface; CyU3PUsbSendEP0Data(wLength, &bTemp); isHandled = CyTrue; } if (bRequest == CY_U3P_USB_SC_GET_CONFIGURATION && wLength == 1) { bTemp = glUsbConfiguration; CyU3PUsbSendEP0Data(wLength, &bTemp); isHandled = CyTrue; } /* Handle suspend requests */ if ((bTarget == CY_U3P_USB_TARGET_INTF) && ((bRequest == CY_U3P_USB_SC_SET_FEATURE) || (bRequest == CY_U3P_USB_SC_CLEAR_FEATURE)) && (wValue == 0)) { if (glUsbConfiguration != 0) { /* FIXME: Actually implement suspend/resume requests */ CyU3PUsbAckSetup(); } else { CyU3PUsbStall(0, CyTrue, CyFalse); } isHandled = CyTrue; } if ((bTarget == CY_U3P_USB_TARGET_ENDPT) && (bRequest == CY_U3P_USB_SC_GET_STATUS)) { if (glAppMode != MODE_NO_CONFIG) { isHandled = GetStatus(wIndex); } } if ((bTarget == CY_U3P_USB_TARGET_ENDPT) && (bRequest == CY_U3P_USB_SC_CLEAR_FEATURE) && (wValue == CY_U3P_USBX_FS_EP_HALT)) { if (glAppMode != MODE_NO_CONFIG) { isHandled = ClearHaltCondition(wIndex); } } /* Flush endpoint memory and reset channel if CLEAR_FEATURE is received */ if ((bTarget == CY_U3P_USB_TARGET_ENDPT) && (bRequest == CY_U3P_USB_SC_SET_FEATURE) && (wValue == CY_U3P_USBX_FS_EP_HALT)) { if (glAppMode != MODE_NO_CONFIG) { isHandled = SetHaltCondition(wIndex); } } } /* Handle supported bladeRF vendor requests. */ if (bType == CY_U3P_USB_VENDOR_RQT) { isHandled = NuandHandleVendorRequest(bRequest, wValue, wIndex, wLength); } return isHandled; } /* This is the callback function to handle the USB events. */ void CyFxbladeRFApplnUSBEventCB (CyU3PUsbEventType_t evtype, uint16_t evdata) { int interface; int alt_interface; switch (evtype) { case CY_U3P_USB_EVENT_SETINTF: interface = (evdata & 0xf0) >> 4; alt_interface = evdata & 0xf; /* Only support sets to interface 0 for now */ if(interface != 0) break; /* Don't do anything if we're setting the same interface over */ if( alt_interface == glUsbAltInterface ) break ; /* Stop whatever we were doing */ switch(glUsbAltInterface) { case USB_IF_CONFIG: NuandFpgaConfig.stop() ; break ; case USB_IF_RF_LINK: NuandRFLink.stop(); break ; case USB_IF_SPI_FLASH: NuandFlashDeinit(); break ; default: break ; } /* Start up the new one */ if (alt_interface == USB_IF_CONFIG) { NuandFpgaConfig.start(); } else if (alt_interface == USB_IF_RF_LINK) { NuandRFLink.start(); } else if (alt_interface == USB_IF_SPI_FLASH) { NuandFlashInit(); } glUsbAltInterface = alt_interface; break; case CY_U3P_USB_EVENT_SETCONF: glUsbConfiguration = evdata; break; case CY_U3P_USB_EVENT_RESET: case CY_U3P_USB_EVENT_DISCONNECT: /* Stop the loop back function. */ StopApplication(); break; default: break; } } /* Callback function to handle LPM requests from the USB 3.0 host. This function is invoked by the API whenever a state change from U0 -> U1 or U0 -> U2 happens. If we return CyTrue from this function, the FX3 device is retained in the low power state. If we return CyFalse, the FX3 device immediately tries to trigger an exit back to U0. This application does not have any state in which we should not allow U1/U2 transitions; and therefore the function always return CyTrue. */ static CyBool_t allow_suspend = CyTrue; void NuandAllowSuspend(CyBool_t set_allow_suspend) { allow_suspend = set_allow_suspend; } static CyBool_t CyFxApplnLPMRqtCB ( CyU3PUsbLinkPowerMode link_mode) { return allow_suspend; } static uint8_t otp_buf[0x100]; static void extractSerialAndCal(void) { int status; char serial_buf[32]; int i; NuandFlashInit(); status = NuandReadOtp(0, 0x100, otp_buf); /* Call this here while flash chip is init'd */ cacheSPIManufacturer(); if (!NuandExtractField((void*)otp_buf, 0x100, "S", serial_buf, 32)) { for (i = 0; i < 32; i++) { CyFxUSBSerial[2+i*2] = serial_buf[i]; } } /* Initialize calibration table cache */ status = NuandReadCalTable(glCal); if(status == CY_U3P_SUCCESS) { glCalCacheValid = CyTrue; } status = NuandReadAutoLoad(glAutoLoad); if(status == CY_U3P_SUCCESS) { glAutoLoadValid = CyTrue; } NuandFlashDeinit(); } void bladeRFInit(void) { CyU3PReturnStatus_t apiRetStatus = CY_U3P_SUCCESS; const uint8_t *usb3_device_descr; const uint8_t *usb2_device_descr; const uint8_t *usb_product_descr; if (NuandGetProductID() == USB_NUAND_BLADERF_PRODUCT_ID) { usb3_device_descr = CyFxUSB30DeviceDscr_bladeRF1; usb2_device_descr = CyFxUSB20DeviceDscr_bladeRF1; usb_product_descr = CyFxUSBProductDscr_bladeRF1; } else { usb3_device_descr = CyFxUSB30DeviceDscr_bladeRF2; usb2_device_descr = CyFxUSB20DeviceDscr_bladeRF2; usb_product_descr = CyFxUSBProductDscr_bladeRF2; } /* Start the USB functionality. */ apiRetStatus = CyU3PUsbStart(); if (apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); CyFxAppErrorHandler(apiRetStatus); } /* The fast enumeration is the easiest way to setup a USB connection, * where all enumeration phase is handled by the library. Only the * class / vendor requests need to be handled by the application. */ CyU3PUsbRegisterSetupCallback(CyFxbladeRFApplnUSBSetupCB, CyFalse); /* Setup the callback to handle the USB events. */ CyU3PUsbRegisterEventCallback(CyFxbladeRFApplnUSBEventCB); /* Register a callback to handle LPM requests from the USB 3.0 host. */ CyU3PUsbRegisterLPMRequestCallback(CyFxApplnLPMRqtCB); /* Set the USB Enumeration descriptors */ /* Super speed device descriptor. */ apiRetStatus = CyU3PUsbSetDesc(CY_U3P_USB_SET_SS_DEVICE_DESCR, 0, (uint8_t *)usb3_device_descr); if (apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); CyFxAppErrorHandler(apiRetStatus); } /* High speed device descriptor. */ apiRetStatus = CyU3PUsbSetDesc(CY_U3P_USB_SET_HS_DEVICE_DESCR, 0, (uint8_t *)usb2_device_descr); if (apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); CyFxAppErrorHandler(apiRetStatus); } /* BOS descriptor */ apiRetStatus = CyU3PUsbSetDesc(CY_U3P_USB_SET_SS_BOS_DESCR, 0, (uint8_t *)CyFxUSBBOSDscr); if (apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); CyFxAppErrorHandler(apiRetStatus); } /* Device qualifier descriptor */ apiRetStatus = CyU3PUsbSetDesc(CY_U3P_USB_SET_DEVQUAL_DESCR, 0, (uint8_t *)CyFxUSBDeviceQualDscr); if (apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); CyFxAppErrorHandler(apiRetStatus); } /* Super speed configuration descriptor */ apiRetStatus = CyU3PUsbSetDesc(CY_U3P_USB_SET_SS_CONFIG_DESCR, 0, (uint8_t *)CyFxUSBSSConfigDscr); if (apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); CyFxAppErrorHandler(apiRetStatus); } /* High speed configuration descriptor */ apiRetStatus = CyU3PUsbSetDesc(CY_U3P_USB_SET_HS_CONFIG_DESCR, 0, (uint8_t *)CyFxUSBHSConfigDscr); if (apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); CyFxAppErrorHandler(apiRetStatus); } /* Full speed configuration descriptor */ apiRetStatus = CyU3PUsbSetDesc(CY_U3P_USB_SET_FS_CONFIG_DESCR, 0, (uint8_t *)CyFxUSBFSConfigDscr); if (apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); CyFxAppErrorHandler(apiRetStatus); } /* String descriptor 0 */ apiRetStatus = CyU3PUsbSetDesc(CY_U3P_USB_SET_STRING_DESCR, 0, (uint8_t *)CyFxUSBStringLangIDDscr); if (apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); CyFxAppErrorHandler(apiRetStatus); } /* Manufacturer string descriptor */ apiRetStatus = CyU3PUsbSetDesc(CY_U3P_USB_SET_STRING_DESCR, BLADE_USB_STR_INDEX_MFR, (uint8_t *)CyFxUSBManufactureDscr); if (apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); CyFxAppErrorHandler(apiRetStatus); } /* Product string descriptor */ apiRetStatus = CyU3PUsbSetDesc(CY_U3P_USB_SET_STRING_DESCR, BLADE_USB_STR_INDEX_PRODUCT, (uint8_t *)usb_product_descr); if (apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); CyFxAppErrorHandler(apiRetStatus); } /* Configure the serial number string descriptor */ apiRetStatus = CyU3PUsbSetDesc(CY_U3P_USB_SET_STRING_DESCR, BLADE_USB_STR_INDEX_SERIAL, (uint8_t *)CyFxUSBSerial); if (apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); CyFxAppErrorHandler(apiRetStatus); } /* Firmware version string descriptor */ apiRetStatus = CyU3PUsbSetDesc(CY_U3P_USB_SET_STRING_DESCR, BLADE_USB_STR_INDEX_FW_VER, (uint8_t *)CyFxUSBVersion); if (apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); CyFxAppErrorHandler(apiRetStatus); } /* Connect the USB Pins with super speed operation enabled. */ apiRetStatus = CyU3PConnectState(CyTrue, CyTrue); if (apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); CyFxAppErrorHandler(apiRetStatus); } glAppMode = MODE_NO_CONFIG; } /* Entry function for the bladeRFAppThread. */ void bladeRFAppThread_Entry( uint32_t input) { CyFxGpioInit(); populateVersionString(); extractSerialAndCal(); NuandFpgaConfigSwInit(); bladeRFInit(); /* XXX Why do we need an 800ms delay here? It appears required for the FPGA * load... * * Is there an I/O or state variable that we could instead poll? */ CyU3PThreadSleep(800); if (glAutoLoadValid) { char fpga_len[11] = {0}; if (!NuandExtractField((void*)glAutoLoad, 0x100, "LEN", (char *)&fpga_len, 10)) { fpga_len[10] = 0; NuandLoadFromFlash(atoi(fpga_len)); } } glDeviceReady = CyTrue; while ( 1 ) { /* Additional application-specific code can go here */ CyU3PThreadSleep(1000); } } /* Application define function which creates the threads. */ void CyFxApplicationDefine(void) { void *ptr = NULL; uint32_t retThrdCreate = CY_U3P_SUCCESS; /* Allocate the memory for the threads */ ptr = CyU3PMemAlloc(BLADE_THREAD_STACK); /* Create the thread for the application */ retThrdCreate = CyU3PThreadCreate(&bladeRFAppThread, /* Slave FIFO app thread structure */ "21:bladeRF_thread", /* Thread ID and thread name */ bladeRFAppThread_Entry, /* Slave FIFO app thread entry function */ 0, /* No input parameter to thread */ ptr, /* Pointer to the allocated thread stack */ BLADE_THREAD_STACK, /* App Thread stack size */ BLADE_THREAD_PRIORITY, /* App Thread priority */ BLADE_THREAD_PRIORITY, /* App Thread pre-emption threshold */ CYU3P_NO_TIME_SLICE, /* No time slice for the application thread */ CYU3P_AUTO_START /* Start the thread immediately */ ); if (retThrdCreate != 0) { /* Application cannot continue */ /* Loop indefinitely */ while(1); } } /* * Main function */ int main(void) { CyU3PReturnStatus_t status = CY_U3P_SUCCESS; /* Initialize the device */ status = CyU3PDeviceInit(NULL); if (status != CY_U3P_SUCCESS) { goto handle_fatal_error; } /* Initialize the caches. Enable both Instruction and Data Caches. */ status = CyU3PDeviceCacheControl(CyTrue, CyTrue, CyTrue); if (status != CY_U3P_SUCCESS) { goto handle_fatal_error; } /* Initialize the logger so we can record failures past this point */ logger_init(); /* This is a non returnable call for initializing the RTOS kernel */ CyU3PKernelEntry(); /* Dummy return to make the compiler happy */ return 0; handle_fatal_error: /* Cannot recover from this error. */ while (1); } bladeRF-2024.05/fx3_firmware/src/bladeRF.h000066400000000000000000000102441457144405000200250ustar00rootroot00000000000000/* * Copyright (c) 2013-2017 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef _INCLUDED_BLADE_H_ #define _INCLUDED_BLADE_H_ #include #include "cyu3externcstart.h" #include "cyu3types.h" #include "cyu3usbconst.h" #include "cyu3dma.h" #include "../firmware_common/bladeRF.h" #include "../firmware_common/logger_id.h" #include "logger.h" #define BLADE_GPIF_16_32BIT_CONF_SELECT (0) #define BLADE_DMA_BUF_COUNT (2) #define BLADE_DMA_TX_SIZE (0) #define BLADE_DMA_RX_SIZE (0) #define BLADE_THREAD_STACK (0x0400) #define BLADE_THREAD_PRIORITY (8) // interface #3 #define BLADE_FPGA_EP_PRODUCER 0x02 #define BLADE_FPGA_CONFIG_SOCKET CY_U3P_UIB_SOCKET_PROD_2 // interface #1 #define BLADE_RF_SAMPLE_EP_PRODUCER 0x01 #define BLADE_RF_SAMPLE_EP_PRODUCER_USB_SOCKET CY_U3P_UIB_SOCKET_PROD_1 #define BLADE_UART_EP_PRODUCER 0x02 #define BLADE_UART_EP_PRODUCER_USB_SOCKET CY_U3P_UIB_SOCKET_PROD_2 #define BLADE_RF_SAMPLE_EP_CONSUMER 0x81 #define BLADE_RF_SAMPLE_EP_CONSUMER_USB_SOCKET CY_U3P_UIB_SOCKET_CONS_1 #define BLADE_UART_EP_CONSUMER 0x82 #define BLADE_UART_EP_CONSUMER_USB_SOCKET CY_U3P_UIB_SOCKET_CONS_2 // interface #2 // doesn't actually use BULK, EP exists for debugging purposes /* Extern definitions for the USB Descriptors */ extern const uint8_t CyFxUSBDeviceQualDscr[]; extern const uint8_t CyFxUSBFSConfigDscr[]; extern const uint8_t CyFxUSBHSConfigDscr[]; extern const uint8_t CyFxUSBBOSDscr[]; extern const uint8_t CyFxUSBSSConfigDscr[]; extern const uint8_t CyFxUSBStringLangIDDscr[]; extern const uint8_t CyFxUSBManufactureDscr[]; extern const uint8_t CyFxUSB20DeviceDscr_bladeRF1[]; extern const uint8_t CyFxUSB30DeviceDscr_bladeRF1[]; extern const uint8_t CyFxUSBProductDscr_bladeRF1[]; extern const uint8_t CyFxUSB20DeviceDscr_bladeRF2[]; extern const uint8_t CyFxUSB30DeviceDscr_bladeRF2[]; extern const uint8_t CyFxUSBProductDscr_bladeRF2[]; #include "cyu3externcend.h" CyU3PReturnStatus_t CyFxSpiEraseSector(CyBool_t /* isErase */, uint8_t /* sector */); void NuandGPIOReconfigure(CyBool_t /* fullGpif */, CyBool_t /* warm */); CyU3PReturnStatus_t ClearDMAChannel(uint8_t ep, CyU3PDmaChannel * handle, uint32_t count); void CyFxAppErrorHandler(CyU3PReturnStatus_t apiRetStatus); void NuandAllowSuspend(CyBool_t set_allow_suspend); /* defined in bladerf{1,2}.c */ void NuandFpgaConfigSwFlipLut(uint16_t flipLut[256]); void NuandFpgaConfigSwFlipLut_bladeRF1(uint16_t flipLut[256]); void NuandFpgaConfigSwFlipLut_bladeRF2(uint16_t flipLut[256]); extern uint32_t glAppMode; struct NuandApplication { void (*start)(void); void (*stop)(void); CyBool_t (*halt_endpoint)(CyBool_t set, uint16_t endpoint); CyBool_t (*halted)(uint16_t endpoint, uint8_t *data); CyU3PReturnStatus_t (*reset_endpoint)(uint8_t endpoint); }; #define GPIO_nSTATUS 52 #define GPIO_nCONFIG 51 #define GPIO_CONFDONE 50 #define GPIO_LED 58 #define GPIO_ID 59 #define GPIO_SYS_RST 24 #define GPIO_RX_EN 21 #define GPIO_TX_EN 22 #define MODE_NO_CONFIG 0 #define MODE_FPGA_CONFIG 1 #define MODE_RF_CONFIG 2 #define MODE_FW_CONFIG 3 #endif bladeRF-2024.05/fx3_firmware/src/bladeRF1.c000066400000000000000000000117031457144405000201020ustar00rootroot00000000000000/* * bladeRF 1.0 FX3 firmware (bladeRF1.c) * * Copyright (c) 2017 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include "bladeRF.h" #include /* Nuand VID */ #define VID_LOW (USB_NUAND_VENDOR_ID & 0xff) #define VID_HIGH (USB_NUAND_VENDOR_ID >> 8) /* Nuand bladeRF PID */ #define BLADERF_PID_LOW (USB_NUAND_BLADERF_PRODUCT_ID & 0xff) #define BLADERF_PID_HIGH (USB_NUAND_BLADERF_PRODUCT_ID >> 8) /* Standard device descriptor for USB 3.0 */ const uint8_t CyFxUSB30DeviceDscr_bladeRF1[] __attribute__ ((aligned (32))) __attribute__ ((section(".usbdscr"))) = { 0x12, /* Descriptor size */ CY_U3P_USB_DEVICE_DESCR, /* Device descriptor type */ 0x00,0x03, /* USB 3.0 */ 0x00, /* Device class */ 0x00, /* Device sub-class */ 0x00, /* Device protocol */ 0x09, /* Maxpacket size for EP0 : 2^9 */ VID_LOW, VID_HIGH, /* Vendor ID */ BLADERF_PID_LOW, BLADERF_PID_HIGH, /* Product ID */ 0x00,0x00, /* Device release number */ 0x01, /* Manufacture string index */ 0x02, /* Product string index */ 0x03, /* Serial number string index */ 0x01 /* Number of configurations */ }; /* Standard device descriptor for USB 2.0 */ const uint8_t CyFxUSB20DeviceDscr_bladeRF1[] __attribute__ ((aligned (32))) __attribute__ ((section(".usbdscr"))) = { 0x12, /* Descriptor size */ CY_U3P_USB_DEVICE_DESCR, /* Device descriptor type */ 0x10,0x02, /* USB 2.10 */ 0x00, /* Device class */ 0x00, /* Device sub-class */ 0x00, /* Device protocol */ 0x40, /* Maxpacket size for EP0 : 64 bytes */ VID_LOW, VID_HIGH, /* Vendor ID */ BLADERF_PID_LOW, BLADERF_PID_HIGH, /* Product ID */ 0x00,0x00, /* Device release number */ 0x01, /* Manufacture string index */ 0x02, /* Product string index */ 0x03, /* Serial number string index */ 0x01 /* Number of configurations */ }; /* Standard product string descriptor */ const uint8_t CyFxUSBProductDscr_bladeRF1[] __attribute__ ((aligned (32))) __attribute__ ((section(".usbdscr"))) = { 0x10, /* Descriptor size */ CY_U3P_USB_STRING_DESCR, /* Device descriptor type */ 'b',0x00, 'l',0x00, 'a',0x00, 'd',0x00, 'e',0x00, 'R',0x00, 'F',0x00 }; /* Place this buffer as the last buffer in the .usbdscr section so that no * other variable / code shares the same cache line. Do not add any other * variables / arrays in section. This will lead to variables sharing the * same cache line. */ const uint8_t CyFxUsbDscrAlignBuffer_bladeRF[32] __attribute__ ((aligned (32))) __attribute__ ((section(".usbdscr"))) = {}; void NuandFpgaConfigSwFlipLut_bladeRF1(uint16_t flipLut[256]) { uint32_t i; for (i = 0; i < 256; i++) { uint32_t tmpr, tmpw; tmpr = i; tmpw = 0; #define US_GPIF_2_FPP(GPIFbit, FPPbit) tmpw |= (tmpr & (1 << FPPbit)) ? (1 << GPIFbit) : 0; US_GPIF_2_FPP(7, 0); US_GPIF_2_FPP(15, 1); US_GPIF_2_FPP(6, 2); US_GPIF_2_FPP(2, 3); US_GPIF_2_FPP(1, 4); US_GPIF_2_FPP(3, 5); US_GPIF_2_FPP(9, 6); US_GPIF_2_FPP(11, 7); flipLut[i] = tmpw; } } bladeRF-2024.05/fx3_firmware/src/bladeRF2.c000066400000000000000000000111471457144405000201050ustar00rootroot00000000000000/* * bladeRF 2.0 FX3 firmware (bladeRF1.c) * * Copyright (c) 2017 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include "bladeRF.h" #include /* Nuand VID */ #define VID_LOW (USB_NUAND_VENDOR_ID & 0xff) #define VID_HIGH (USB_NUAND_VENDOR_ID >> 8) /* Nuand bladeRF PID */ #define BLADERF_PID_LOW (USB_NUAND_BLADERF2_PRODUCT_ID & 0xff) #define BLADERF_PID_HIGH (USB_NUAND_BLADERF2_PRODUCT_ID >> 8) /* Standard device descriptor for USB 3.0 */ const uint8_t CyFxUSB30DeviceDscr_bladeRF2[] __attribute__ ((aligned (32))) __attribute__ ((section(".usbdscr"))) = { 0x12, /* Descriptor size */ CY_U3P_USB_DEVICE_DESCR, /* Device descriptor type */ 0x00,0x03, /* USB 3.0 */ 0x00, /* Device class */ 0x00, /* Device sub-class */ 0x00, /* Device protocol */ 0x09, /* Maxpacket size for EP0 : 2^9 */ VID_LOW, VID_HIGH, /* Vendor ID */ BLADERF_PID_LOW, BLADERF_PID_HIGH, /* Product ID */ 0x00,0x00, /* Device release number */ 0x01, /* Manufacture string index */ 0x02, /* Product string index */ 0x03, /* Serial number string index */ 0x01 /* Number of configurations */ }; /* Standard device descriptor for USB 2.0 */ const uint8_t CyFxUSB20DeviceDscr_bladeRF2[] __attribute__ ((aligned (32))) __attribute__ ((section(".usbdscr"))) = { 0x12, /* Descriptor size */ CY_U3P_USB_DEVICE_DESCR, /* Device descriptor type */ 0x10,0x02, /* USB 2.10 */ 0x00, /* Device class */ 0x00, /* Device sub-class */ 0x00, /* Device protocol */ 0x40, /* Maxpacket size for EP0 : 64 bytes */ VID_LOW, VID_HIGH, /* Vendor ID */ BLADERF_PID_LOW, BLADERF_PID_HIGH, /* Product ID */ 0x00,0x00, /* Device release number */ 0x01, /* Manufacture string index */ 0x02, /* Product string index */ 0x03, /* Serial number string index */ 0x01 /* Number of configurations */ }; /* Standard product string descriptor */ const uint8_t CyFxUSBProductDscr_bladeRF2[] __attribute__ ((aligned (32))) __attribute__ ((section(".usbdscr"))) = { 0x18, /* Descriptor size */ CY_U3P_USB_STRING_DESCR, /* Device descriptor type */ 'b',0x00, 'l',0x00, 'a',0x00, 'd',0x00, 'e',0x00, 'R',0x00, 'F',0x00, ' ',0x00, '2',0x00, '.',0x00, '0',0x00 }; /* Place this buffer as the last buffer in the .usbdscr section so that no * other variable / code shares the same cache line. Do not add any other * variables / arrays in section. This will lead to variables sharing the * same cache line. */ const uint8_t CyFxUsbDscrAlignBuffer_bladeRF2[32] __attribute__ ((aligned (32))) __attribute__ ((section(".usbdscr"))) = {}; void NuandFpgaConfigSwFlipLut_bladeRF2(uint16_t flipLut[256]) { uint32_t i; for (i = 0; i < 256; i++) { flipLut[i] = i; } } bladeRF-2024.05/fx3_firmware/src/cyfxbladeRF.h000066400000000000000000000055771457144405000207340ustar00rootroot00000000000000/* * Copyright (c) 2013 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef _INCLUDED_CYFXBLADERF_H_ #define _INCLUDED_CYFXBLADERF_H_ #include "cyu3externcstart.h" #include "cyu3types.h" #include "cyu3usbconst.h" /* 16/32 bit GPIF Configuration select */ /* Set BLADE_GPIF_16_32BIT_CONF_SELECT = 0 for 16 bit GPIF data bus. * Set BLADE_GPIF_16_32BIT_CONF_SELECT = 1 for 32 bit GPIF data bus. */ #define BLADE_GPIF_16_32BIT_CONF_SELECT (0) #define BLADE_DMA_BUF_COUNT (2) #define BLADE_DMA_TX_SIZE (0) #define BLADE_DMA_RX_SIZE (0) #define BLADE_THREAD_STACK (0x0400) #define BLADE_THREAD_PRIORITY (8) #define CY_FX_EP_PRODUCER 0x01 /* EP 1 OUT */ #define BLADE_FPGA_EP_PRODUCER 0x02 /* EP 2 OUT */ #define CY_FX_EP_CONSUMER 0x81 /* EP 1 IN */ #define CY_FX_PRODUCER_USB_SOCKET CY_U3P_UIB_SOCKET_PROD_1 /* USB Socket 1 is producer */ #define BLADE_FPGA_CONFIG_SOCKET CY_U3P_UIB_SOCKET_PROD_2 /* USB Socket 2 is producer */ #define CY_FX_CONSUMER_USB_SOCKET CY_U3P_UIB_SOCKET_CONS_1 /* USB Socket 1 is consumer */ /* Used with FX3 Silicon. */ #define CY_FX_PRODUCER_PPORT_SOCKET CY_U3P_PIB_SOCKET_0 /* P-port Socket 0 is producer */ #define CY_FX_CONSUMER_PPORT_SOCKET CY_U3P_PIB_SOCKET_3 /* P-port Socket 3 is consumer */ /* Extern definitions for the USB Descriptors */ extern const uint8_t CyFxUSB20DeviceDscr[]; extern const uint8_t CyFxUSB30DeviceDscr[]; extern const uint8_t CyFxUSBDeviceQualDscr[]; extern const uint8_t CyFxUSBFSConfigDscr[]; extern const uint8_t CyFxUSBHSConfigDscr[]; extern const uint8_t CyFxUSBBOSDscr[]; extern const uint8_t CyFxUSBSSConfigDscr[]; extern const uint8_t CyFxUSBStringLangIDDscr[]; extern const uint8_t CyFxUSBManufactureDscr[]; extern const uint8_t CyFxUSBProductDscr[]; #include "cyu3externcend.h" #endif /* _INCLUDED_BLADE_H_ */ /*[]*/ bladeRF-2024.05/fx3_firmware/src/cyfxbladeRFusbdscr.c000066400000000000000000000533311457144405000223040ustar00rootroot00000000000000/* * Copyright (c) 2013-2017 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include "bladeRF.h" #include "cyfxbladeRF.h" /* Device descriptors for USB 3.0 and 2.0 (CyFxUSB30DeviceDscr[] and * CyFxUSB20DeviceDscr[]), along with the product string descriptor * (CyFxUSBProductDscr[]), are now located in the product-specific files * (bladeRF1.c and bladeRF2.c) */ /* Binary device object store descriptor */ const uint8_t CyFxUSBBOSDscr[] __attribute__ ((aligned (32))) __attribute__ ((section(".usbdscr"))) = { 0x05, /* Descriptor size */ CY_U3P_BOS_DESCR, /* Device descriptor type */ 0x16,0x00, /* Length of this descriptor and all sub descriptors */ 0x02, /* Number of device capability descriptors */ /* USB 2.0 extension */ 0x07, /* Descriptor size */ CY_U3P_DEVICE_CAPB_DESCR, /* Device capability type descriptor */ CY_U3P_USB2_EXTN_CAPB_TYPE, /* USB 2.0 extension capability type */ 0x02,0x00,0x00,0x00, /* Supported device level features: LPM support */ /* SuperSpeed device capability */ 0x0A, /* Descriptor size */ CY_U3P_DEVICE_CAPB_DESCR, /* Device capability type descriptor */ CY_U3P_SS_USB_CAPB_TYPE, /* SuperSpeed device capability type */ 0x00, /* Supported device level features */ 0x0E,0x00, /* Speeds supported by the device : SS, HS and FS */ 0x03, /* Functionality support */ 0x00, /* U1 Device Exit latency */ 0x00,0x00 /* U2 Device Exit latency */ }; /* Standard device qualifier descriptor */ const uint8_t CyFxUSBDeviceQualDscr[] __attribute__ ((aligned (32))) __attribute__ ((section(".usbdscr"))) = { 0x0A, /* Descriptor size */ CY_U3P_USB_DEVQUAL_DESCR, /* Device qualifier descriptor type */ 0x00,0x02, /* USB 2.0 */ 0x00, /* Device class */ 0x00, /* Device sub-class */ 0x00, /* Device protocol */ 0x40, /* Maxpacket size for EP0 : 64 bytes */ 0x01, /* Number of configurations */ 0x00 /* Reserved */ }; /* Standard super speed configuration descriptor */ const uint8_t CyFxUSBSSConfigDscr[] __attribute__ ((aligned (32))) __attribute__ ((section(".usbdscr"))) = { /* Configuration descriptor */ 0x09, /* Descriptor size */ CY_U3P_USB_CONFIG_DESCR, /* Configuration descriptor type */ 0x7B,0x00, /* Length of this descriptor and all sub descriptors */ 0x01, /* Number of interfaces */ 0x01, /* Configuration number */ 0x00, /* COnfiguration string index */ 0x80, /* Config characteristics - Bus powered */ 0x64, /* Max power consumption of device (in 8mA unit) : 200mA */ /* Interface descriptor #0, alt interface #0, Nothing */ 0x09, /* Descriptor size */ CY_U3P_USB_INTRFC_DESCR, /* Interface Descriptor type */ 0x00, /* Interface number */ 0x00, /* Alternate setting number */ 0x00, /* Number of end points */ 0xFF, /* Interface class */ 0x00, /* Interface sub class */ 0x00, /* Interface protocol code */ 0x00, /* Interface descriptor string index */ /* Interface descriptor #0, alt interface #1, RF */ 0x09, /* Descriptor size */ CY_U3P_USB_INTRFC_DESCR, /* Interface Descriptor type */ 0x00, /* Interface number */ 0x01, /* Alternate setting number */ 0x04, /* Number of end points */ 0xFF, /* Interface class */ 0x00, /* Interface sub class */ 0x00, /* Interface protocol code */ 0x00, /* Interface descriptor string index */ /* Endpoint descriptor for consumer EP */ 0x07, /* Descriptor size */ CY_U3P_USB_ENDPNT_DESCR, /* Endpoint descriptor type */ CY_FX_EP_CONSUMER, /* Endpoint address and description */ CY_U3P_USB_EP_BULK, /* Bulk endpoint type */ 0x00,0x04, /* Max packet size = 1024 bytes */ 0x00, /* Servicing interval for data transfers : 0 for Bulk */ /* Super speed endpoint companion descriptor for consumer EP */ 0x06, /* Descriptor size */ CY_U3P_SS_EP_COMPN_DESCR, /* SS endpoint companion descriptor type */ 0x0f, /* Max no. of packets in a burst : 0: burst 1 packet at a time */ 0x00, /* Max streams for bulk EP = 0 (No streams) */ 0x00,0x00, /* Service interval for the EP : 0 for bulk */ /* Endpoint descriptor for producer EP */ 0x07, /* Descriptor size */ CY_U3P_USB_ENDPNT_DESCR, /* Endpoint descriptor type */ CY_FX_EP_PRODUCER, /* Endpoint address and description */ CY_U3P_USB_EP_BULK, /* Bulk endpoint type */ 0x00,0x04, /* Max packet size = 1024 bytes */ 0x00, /* Servicing interval for data transfers : 0 for bulk */ /* Super speed endpoint companion descriptor for producer EP */ 0x06, /* Descriptor size */ CY_U3P_SS_EP_COMPN_DESCR, /* SS endpoint companion descriptor type */ 0x0f, /* Max no. of packets in a burst : 0: burst 1 packet at a time */ 0x00, /* Max streams for bulk EP = 0 (No streams) */ 0x00,0x00, /* Service interval for the EP : 0 for bulk */ /* Endpoint descriptor for consumer EP */ 0x07, /* Descriptor size */ CY_U3P_USB_ENDPNT_DESCR, /* Endpoint descriptor type */ 0x82, /* Endpoint address and description */ CY_U3P_USB_EP_BULK, /* Bulk endpoint type */ 0x00,0x04, /* Max packet size = 1024 bytes */ 0x00, /* Servicing interval for data transfers : 0 for Bulk */ /* Super speed endpoint companion descriptor for consumer EP */ 0x06, /* Descriptor size */ CY_U3P_SS_EP_COMPN_DESCR, /* SS endpoint companion descriptor type */ 0x01, /* Max no. of packets in a burst : 0: burst 1 packet at a time */ 0x00, /* Max streams for bulk EP = 0 (No streams) */ 0x00,0x00, /* Service interval for the EP : 0 for bulk */ /* Endpoint descriptor for producer EP */ 0x07, /* Descriptor size */ CY_U3P_USB_ENDPNT_DESCR, /* Endpoint descriptor type */ BLADE_FPGA_EP_PRODUCER, /* Endpoint address and description */ CY_U3P_USB_EP_BULK, /* Bulk endpoint type */ 0x00,0x04, /* Max packet size = 1024 bytes */ 0x00, /* Servicing interval for data transfers : 0 for bulk */ /* Super speed endpoint companion descriptor for producer EP */ 0x06, /* Descriptor size */ CY_U3P_SS_EP_COMPN_DESCR, /* SS endpoint companion descriptor type */ 0x0f, /* Max no. of packets in a burst : 0: burst 1 packet at a time */ 0x00, /* Max streams for bulk EP = 0 (No streams) */ 0x00,0x00, /* Service interval for the EP : 0 for bulk */ /* Interface descriptor #0, alt interface #2, FX3 firmware */ 0x09, /* Descriptor size */ CY_U3P_USB_INTRFC_DESCR, /* Interface Descriptor type */ 0x00, /* Interface number */ 0x02, /* Alternate setting number */ 0x01, /* Number of end points */ 0xFF, /* Interface class */ 0x00, /* Interface sub class */ 0x00, /* Interface protocol code */ 0x00, /* Interface descriptor string index */ /* Endpoint descriptor for producer EP */ 0x07, /* Descriptor size */ CY_U3P_USB_ENDPNT_DESCR, /* Endpoint descriptor type */ BLADE_FPGA_EP_PRODUCER, /* Endpoint address and description */ CY_U3P_USB_EP_BULK, /* Bulk endpoint type */ 0x00,0x04, /* Max packet size = 1024 bytes */ 0x00, /* Servicing interval for data transfers : 0 for bulk */ /* Super speed endpoint companion descriptor for producer EP */ 0x06, /* Descriptor size */ CY_U3P_SS_EP_COMPN_DESCR, /* SS endpoint companion descriptor type */ 0x01, /* Max no. of packets in a burst : 0: burst 1 packet at a time */ 0x00, /* Max streams for bulk EP = 0 (No streams) */ 0x00,0x00, /* Service interval for the EP : 0 for bulk */ /* Interface descriptor #0, alt interface #3, FPGA load */ 0x09, /* Descriptor size */ CY_U3P_USB_INTRFC_DESCR, /* Interface Descriptor type */ 0x00, /* Interface number */ 0x03, /* Alternate setting number */ 0x01, /* Number of end points */ 0xFF, /* Interface class */ 0x00, /* Interface sub class */ 0x00, /* Interface protocol code */ 0x00, /* Interface descriptor string index */ /* Endpoint descriptor for producer EP */ 0x07, /* Descriptor size */ CY_U3P_USB_ENDPNT_DESCR, /* Endpoint descriptor type */ BLADE_FPGA_EP_PRODUCER, /* Endpoint address and description */ CY_U3P_USB_EP_BULK, /* Bulk endpoint type */ 0x00,0x04, /* Max packet size = 1024 bytes */ 0x00, /* Servicing interval for data transfers : 0 for bulk */ /* Super speed endpoint companion descriptor for producer EP */ 0x06, /* Descriptor size */ CY_U3P_SS_EP_COMPN_DESCR, /* SS endpoint companion descriptor type */ 0x01, /* Max no. of packets in a burst : 0: burst 1 packet at a time */ 0x00, /* Max streams for bulk EP = 0 (No streams) */ 0x00,0x00, /* Service interval for the EP : 0 for bulk */ }; /* Standard high speed configuration descriptor */ const uint8_t CyFxUSBHSConfigDscr[] __attribute__ ((aligned (32))) __attribute__ ((section(".usbdscr"))) = { /* Configuration descriptor */ 0x09, /* Descriptor size */ CY_U3P_USB_CONFIG_DESCR, /* Configuration descriptor type */ 0x57,0x00, /* Length of this descriptor and all sub descriptors */ 0x01, /* Number of interfaces */ 0x01, /* Configuration number */ 0x00, /* COnfiguration string index */ 0x80, /* Config characteristics - bus powered */ 0x64, /* Max power consumption of device (in 2mA unit) : 200mA */ /* Interface descriptor #0, alt interface #0, Nothing */ 0x09, /* Descriptor size */ CY_U3P_USB_INTRFC_DESCR, /* Interface Descriptor type */ 0x00, /* Interface number */ 0x00, /* Alternate setting number */ 0x00, /* Number of endpoints */ 0xFF, /* Interface class */ 0x00, /* Interface sub class */ 0x00, /* Interface protocol code */ 0x00, /* Interface descriptor string index */ /* Interface descriptor #0, alt interface #1, RF */ 0x09, /* Descriptor size */ CY_U3P_USB_INTRFC_DESCR, /* Interface Descriptor type */ 0x00, /* Interface number */ 0x01, /* Alternate setting number */ 0x04, /* Number of endpoints */ 0xFF, /* Interface class */ 0x00, /* Interface sub class */ 0x00, /* Interface protocol code */ 0x00, /* Interface descriptor string index */ /* Endpoint descriptor for producer EP */ 0x07, /* Descriptor size */ CY_U3P_USB_ENDPNT_DESCR, /* Endpoint descriptor type */ 0x01, /* Endpoint address and description */ CY_U3P_USB_EP_BULK, /* Bulk endpoint type */ 0x00,0x02, /* Max packet size = 512 bytes */ 0x00, /* Servicing interval for data transfers : 0 for bulk */ /* Endpoint descriptor for producer EP */ 0x07, /* Descriptor size */ CY_U3P_USB_ENDPNT_DESCR, /* Endpoint descriptor type */ 0x81, /* Endpoint address and description */ CY_U3P_USB_EP_BULK, /* Bulk endpoint type */ 0x00,0x02, /* Max packet size = 512 bytes */ 0x00, /* Servicing interval for data transfers : 0 for bulk */ /* Endpoint descriptor for producer EP */ 0x07, /* Descriptor size */ CY_U3P_USB_ENDPNT_DESCR, /* Endpoint descriptor type */ 0x02, /* Endpoint address and description */ CY_U3P_USB_EP_BULK, /* Bulk endpoint type */ 0x00,0x02, /* Max packet size = 512 bytes */ 0x00, /* Servicing interval for data transfers : 0 for bulk */ /* Endpoint descriptor for producer EP */ 0x07, /* Descriptor size */ CY_U3P_USB_ENDPNT_DESCR, /* Endpoint descriptor type */ 0x82, /* Endpoint address and description */ CY_U3P_USB_EP_BULK, /* Bulk endpoint type */ 0x00,0x02, /* Max packet size = 512 bytes */ 0x00, /* Servicing interval for data transfers : 0 for bulk */ /* Interface descriptor #0, alt interface #2, FX3 firmware */ 0x09, /* Descriptor size */ CY_U3P_USB_INTRFC_DESCR, /* Interface Descriptor type */ 0x00, /* Interface number */ 0x02, /* Alternate setting number */ 0x01, /* Number of endpoints */ 0xFF, /* Interface class */ 0x00, /* Interface sub class */ 0x00, /* Interface protocol code */ 0x00, /* Interface descriptor string index */ /* Endpoint descriptor for producer EP */ 0x07, /* Descriptor size */ CY_U3P_USB_ENDPNT_DESCR, /* Endpoint descriptor type */ 0x01, /* Endpoint address and description */ CY_U3P_USB_EP_BULK, /* Bulk endpoint type */ 0x00,0x02, /* Max packet size = 512 bytes */ 0x00, /* Servicing interval for data transfers : 0 for bulk */ /* Interface descriptor #0, alt interface #3, FPGA load */ 0x09, /* Descriptor size */ CY_U3P_USB_INTRFC_DESCR, /* Interface Descriptor type */ 0x00, /* Interface number */ 0x03, /* Alternate setting number */ 0x01, /* Number of endpoints */ 0xFF, /* Interface class */ 0x00, /* Interface sub class */ 0x00, /* Interface protocol code */ 0x00, /* Interface descriptor string index */ /* Endpoint descriptor for producer EP */ 0x07, /* Descriptor size */ CY_U3P_USB_ENDPNT_DESCR, /* Endpoint descriptor type */ BLADE_FPGA_EP_PRODUCER, /* Endpoint address and description */ CY_U3P_USB_EP_BULK, /* Bulk endpoint type */ 0x00,0x02, /* Max packet size = 512 bytes */ 0x00, /* Servicing interval for data transfers : 0 for bulk */ }; /* Standard full speed configuration descriptor */ const uint8_t CyFxUSBFSConfigDscr[] __attribute__ ((aligned (32))) __attribute__ ((section(".usbdscr"))) = { /* Configuration descriptor */ 0x09, /* Descriptor size */ CY_U3P_USB_CONFIG_DESCR, /* Configuration descriptor type */ 0x27,0x00, /* Length of this descriptor and all sub descriptors */ 0x01, /* Number of interfaces */ 0x01, /* Configuration number */ 0x00, /* COnfiguration string index */ 0x80, /* Config characteristics - bus powered */ 0x32, /* Max power consumption of device (in 2mA unit) : 100mA */ /* Interface descriptor */ 0x09, /* Descriptor size */ CY_U3P_USB_INTRFC_DESCR, /* Interface descriptor type */ 0x00, /* Interface number */ 0x00, /* Alternate setting number */ 0x03, /* Number of endpoints */ 0xFF, /* Interface class */ 0x00, /* Interface sub class */ 0x00, /* Interface protocol code */ 0x00, /* Interface descriptor string index */ /* Endpoint descriptor for producer EP */ 0x07, /* Descriptor size */ CY_U3P_USB_ENDPNT_DESCR, /* Endpoint descriptor type */ CY_FX_EP_PRODUCER, /* Endpoint address and description */ CY_U3P_USB_EP_BULK, /* Bulk endpoint type */ 0x40,0x00, /* Max packet size = 64 bytes */ 0x00, /* Servicing interval for data transfers : 0 for bulk */ /* Endpoint descriptor for producer EP */ 0x07, /* Descriptor size */ CY_U3P_USB_ENDPNT_DESCR, /* Endpoint descriptor type */ BLADE_FPGA_EP_PRODUCER, /* Endpoint address and description */ CY_U3P_USB_EP_BULK, /* Bulk endpoint type */ 0x40,0x00, /* Max packet size = 64 bytes */ 0x00, /* Servicing interval for data transfers : 0 for bulk */ /* Endpoint descriptor for consumer EP */ 0x07, /* Descriptor size */ CY_U3P_USB_ENDPNT_DESCR, /* Endpoint descriptor type */ CY_FX_EP_CONSUMER, /* Endpoint address and description */ CY_U3P_USB_EP_BULK, /* Bulk endpoint type */ 0x40,0x00, /* Max packet size = 64 bytes */ 0x00 /* Servicing interval for data transfers : 0 for bulk */ }; /* Standard language ID string descriptor */ const uint8_t CyFxUSBStringLangIDDscr[] __attribute__ ((aligned (32))) __attribute__ ((section(".usbdscr"))) = { 0x04, /* Descriptor size */ CY_U3P_USB_STRING_DESCR, /* Device descriptor type */ 0x09,0x04 /* Language ID supported */ }; /* Standard manufacturer string descriptor */ const uint8_t CyFxUSBManufactureDscr[] __attribute__ ((aligned (32))) __attribute__ ((section(".usbdscr"))) = { 0x0C, /* Descriptor size */ CY_U3P_USB_STRING_DESCR, /* Device descriptor type */ 'N',0x00, 'u',0x00, 'a',0x00, 'n',0x00, 'd',0x00, }; /* [ ] */ bladeRF-2024.05/fx3_firmware/src/cyfxgpif_C4loader.h000066400000000000000000000151341457144405000220650ustar00rootroot00000000000000/* * Project Name: c4loader.cyfx * Time : 01/12/2013 00:49:46 * Device Type: FX3 * Project Type: GPIF2 * * * * * This is a generated file and should not be modified * This file need to be included only once in the firmware * This file is generated by Gpif2 designer tool version - 1.0.837.1 * */ #ifndef _INCLUDED_CYFXGPIF2CONFIG_ #define _INCLUDED_CYFXGPIF2CONFIG_ #include "cyu3types.h" #include "cyu3gpif.h" /* Summary Number of states in the state machine */ #define CY_C4LOADER_NUMBER_OF_STATES 7 /* Summary Mapping of user defined state names to state indices */ #define C4LOADER_START 0x0 #define C4LOADER_STATE0 0x2 #define C4LOADER_INIT 0x1 #define C4LOADER_STATE2 0x4 #define C4LOADER_STATE3 0x5 #define C4LOADER_STATE1 0x3 #define C4LOADER_STATE4 0x6 /* Summary Initial value of early outputs from the state machine. */ #define C4LOADER_ALPHA_START 0x0 /* Summary Transition function values used in the state machine. */ uint16_t C4loader_CyFxGpifTransition[] = { 0x0000, 0xAAAA, 0xFFFF }; /* Summary Table containing the transition information for various states. This table has to be stored in the WAVEFORM Registers. This array consists of non-replicated waveform descriptors and acts as a waveform table. */ CyU3PGpifWaveData C4loader_CyFxGpifWavedata[] = { {{0x1E739A01,0x0C0000C0,0x80000000},{0x00000000,0x00000000,0x00000000}}, {{0x2E739C02,0x0C000040,0x80000000},{0x00000000,0x00000000,0x00000000}}, {{0x2E739C03,0x00400040,0x80000000},{0x00000000,0x00000000,0x00000000}}, {{0x2E739C04,0x00000040,0x80000000},{0x00000000,0x00000000,0x00000000}}, {{0x2E739C05,0x00400040,0x80000000},{0x00000000,0x00000000,0x00000000}}, {{0x1E739A06,0x0C0000C0,0x80000000},{0x00000000,0x00000000,0x00000000}} }; /* Summary Table that maps state indices to the descriptor table indices. */ uint8_t C4loader_CyFxGpifWavedataPosition[] = { 0,1,2,3,4,5,1 }; /* Summary GPIF II configuration register values. */ uint32_t C4loader_CyFxGpifRegValue[] = { 0x800083B0, /* CY_U3P_PIB_GPIF_CONFIG */ 0x00000067, /* CY_U3P_PIB_GPIF_BUS_CONFIG */ 0x00000000, /* CY_U3P_PIB_GPIF_BUS_CONFIG2 */ 0x00000052, /* CY_U3P_PIB_GPIF_AD_CONFIG */ 0x00000000, /* CY_U3P_PIB_GPIF_STATUS */ 0x00000000, /* CY_U3P_PIB_GPIF_INTR */ 0x00000000, /* CY_U3P_PIB_GPIF_INTR_MASK */ 0x00000082, /* CY_U3P_PIB_GPIF_SERIAL_IN_CONFIG */ 0x00000782, /* CY_U3P_PIB_GPIF_SERIAL_OUT_CONFIG */ 0x54040000, /* CY_U3P_PIB_GPIF_CTRL_BUS_DIRECTION */ 0x0000FFFF, /* CY_U3P_PIB_GPIF_CTRL_BUS_DEFAULT */ 0x00000000, /* CY_U3P_PIB_GPIF_CTRL_BUS_POLARITY */ 0x00000200, /* CY_U3P_PIB_GPIF_CTRL_BUS_TOGGLE */ 0x00000000, /* CY_U3P_PIB_GPIF_CTRL_BUS_SELECT */ 0x00000000, /* CY_U3P_PIB_GPIF_CTRL_BUS_SELECT */ 0x00000000, /* CY_U3P_PIB_GPIF_CTRL_BUS_SELECT */ 0x00000000, /* CY_U3P_PIB_GPIF_CTRL_BUS_SELECT */ 0x00000000, /* CY_U3P_PIB_GPIF_CTRL_BUS_SELECT */ 0x00000000, /* CY_U3P_PIB_GPIF_CTRL_BUS_SELECT */ 0x00000000, /* CY_U3P_PIB_GPIF_CTRL_BUS_SELECT */ 0x00000000, /* CY_U3P_PIB_GPIF_CTRL_BUS_SELECT */ 0x00000000, /* CY_U3P_PIB_GPIF_CTRL_BUS_SELECT */ 0x00000008, /* CY_U3P_PIB_GPIF_CTRL_BUS_SELECT */ 0x00000000, /* CY_U3P_PIB_GPIF_CTRL_BUS_SELECT */ 0x00000000, /* CY_U3P_PIB_GPIF_CTRL_BUS_SELECT */ 0x00000000, /* CY_U3P_PIB_GPIF_CTRL_BUS_SELECT */ 0x00000000, /* CY_U3P_PIB_GPIF_CTRL_BUS_SELECT */ 0x00000000, /* CY_U3P_PIB_GPIF_CTRL_BUS_SELECT */ 0x00000000, /* CY_U3P_PIB_GPIF_CTRL_BUS_SELECT */ 0x00000006, /* CY_U3P_PIB_GPIF_CTRL_COUNT_CONFIG */ 0x00000000, /* CY_U3P_PIB_GPIF_CTRL_COUNT_RESET */ 0x0000FFFF, /* CY_U3P_PIB_GPIF_CTRL_COUNT_LIMIT */ 0x0000010A, /* CY_U3P_PIB_GPIF_ADDR_COUNT_CONFIG */ 0x00000000, /* CY_U3P_PIB_GPIF_ADDR_COUNT_RESET */ 0x0000FFFF, /* CY_U3P_PIB_GPIF_ADDR_COUNT_LIMIT */ 0x00000000, /* CY_U3P_PIB_GPIF_STATE_COUNT_CONFIG */ 0x0000FFFF, /* CY_U3P_PIB_GPIF_STATE_COUNT_LIMIT */ 0x0000010A, /* CY_U3P_PIB_GPIF_DATA_COUNT_CONFIG */ 0x00000000, /* CY_U3P_PIB_GPIF_DATA_COUNT_RESET */ 0x0000FFFF, /* CY_U3P_PIB_GPIF_DATA_COUNT_LIMIT */ 0x00000000, /* CY_U3P_PIB_GPIF_CTRL_COMP_VALUE */ 0x00000000, /* CY_U3P_PIB_GPIF_CTRL_COMP_MASK */ 0x00000000, /* CY_U3P_PIB_GPIF_DATA_COMP_VALUE */ 0x00000000, /* CY_U3P_PIB_GPIF_DATA_COMP_MASK */ 0x00000000, /* CY_U3P_PIB_GPIF_ADDR_COMP_VALUE */ 0x00000000, /* CY_U3P_PIB_GPIF_ADDR_COMP_MASK */ 0x00000000, /* CY_U3P_PIB_GPIF_DATA_CTRL */ 0x00000000, /* CY_U3P_PIB_GPIF_INGRESS_DATA */ 0x00000000, /* CY_U3P_PIB_GPIF_INGRESS_DATA */ 0x00000000, /* CY_U3P_PIB_GPIF_INGRESS_DATA */ 0x00000000, /* CY_U3P_PIB_GPIF_INGRESS_DATA */ 0x00000000, /* CY_U3P_PIB_GPIF_EGRESS_DATA */ 0x00000000, /* CY_U3P_PIB_GPIF_EGRESS_DATA */ 0x00000000, /* CY_U3P_PIB_GPIF_EGRESS_DATA */ 0x00000000, /* CY_U3P_PIB_GPIF_EGRESS_DATA */ 0x00000000, /* CY_U3P_PIB_GPIF_INGRESS_ADDRESS */ 0x00000000, /* CY_U3P_PIB_GPIF_INGRESS_ADDRESS */ 0x00000000, /* CY_U3P_PIB_GPIF_INGRESS_ADDRESS */ 0x00000000, /* CY_U3P_PIB_GPIF_INGRESS_ADDRESS */ 0x00000000, /* CY_U3P_PIB_GPIF_EGRESS_ADDRESS */ 0x00000000, /* CY_U3P_PIB_GPIF_EGRESS_ADDRESS */ 0x00000000, /* CY_U3P_PIB_GPIF_EGRESS_ADDRESS */ 0x00000000, /* CY_U3P_PIB_GPIF_EGRESS_ADDRESS */ 0x80010400, /* CY_U3P_PIB_GPIF_THREAD_CONFIG */ 0x80010401, /* CY_U3P_PIB_GPIF_THREAD_CONFIG */ 0x80010402, /* CY_U3P_PIB_GPIF_THREAD_CONFIG */ 0x80010403, /* CY_U3P_PIB_GPIF_THREAD_CONFIG */ 0x00000000, /* CY_U3P_PIB_GPIF_LAMBDA_STAT */ 0x00000000, /* CY_U3P_PIB_GPIF_ALPHA_STAT */ 0x00000000, /* CY_U3P_PIB_GPIF_BETA_STAT */ 0x00000000, /* CY_U3P_PIB_GPIF_WAVEFORM_CTRL_STAT */ 0x00000000, /* CY_U3P_PIB_GPIF_WAVEFORM_SWITCH */ 0x00000000, /* CY_U3P_PIB_GPIF_WAVEFORM_SWITCH_TIMEOUT */ 0x00000000, /* CY_U3P_PIB_GPIF_CRC_CONFIG */ 0x00000000, /* CY_U3P_PIB_GPIF_CRC_DATA */ 0xFFFFFFC1 /* CY_U3P_PIB_GPIF_BETA_DEASSERT */ }; /* Summary This structure holds all the configuration inputs for the GPIF II. */ const CyU3PGpifConfig_t C4loader_CyFxGpifConfig = { (uint16_t)(sizeof(C4loader_CyFxGpifWavedataPosition)/sizeof(uint8_t)), C4loader_CyFxGpifWavedata, C4loader_CyFxGpifWavedataPosition, (uint16_t)(sizeof(C4loader_CyFxGpifTransition)/sizeof(uint16_t)), C4loader_CyFxGpifTransition, (uint16_t)(sizeof(C4loader_CyFxGpifRegValue)/sizeof(uint32_t)), C4loader_CyFxGpifRegValue }; #endif /* _INCLUDED_CYFXGPIF2CONFIG_ */ bladeRF-2024.05/fx3_firmware/src/cyfxgpif_RFlink.h000066400000000000000000000156121457144405000216160ustar00rootroot00000000000000/* * Project Name: RFlink.cyfx * Time : 01/20/2013 22:51:22 * Device Type: FX3 * Project Type: GPIF2 * * * * * This is a generated file and should not be modified * This file need to be included only once in the firmware * This file is generated by Gpif2 designer tool version - 1.0.837.1 * */ #ifndef _INCLUDED_CYFXGPIF2CONFIG_RF_ #define _INCLUDED_CYFXGPIF2CONFIG_RF_ #include "cyu3types.h" #include "cyu3gpif.h" /* Summary Number of states in the state machine */ #define CY_RFLINK_NUMBER_OF_STATES 12 /* Summary Mapping of user defined state names to state indices */ #define RFLINK_START 0x0 #define RFLINK_INIT 0x1 #define RFLINK_IF_RX_0 0x3 #define RFLINK_IF_RX_1 0x6 #define RFLINK_IF_TX_2 0x8 #define RFLINK_DONE 0x4 #define RFLINK_WAIT_0 0x2 #define RFLINK_IF_TX_3 0x11 #define RFLINK_IF_TX 0x9 #define RFLINK_IF_RX 0x10 #define RFLINK_SHORT_PKT_0 0x5 #define RFLINK_SHORT_PKT_1 0x7 /* Summary Initial value of early outputs from the state machine. */ #define RFLINK_ALPHA_START 0x80 /* Summary Transition function values used in the state machine. */ uint16_t Rflink_CyFxGpifTransition[] = { 0x0000, 0xAAAA, 0x5555, 0xCCCC, 0xFFFF, 0xEEEE, 0xFFF0 }; /* Summary Table containing the transition information for various states. This table has to be stored in the WAVEFORM Registers. This array consists of non-replicated waveform descriptors and acts as a waveform table. */ CyU3PGpifWaveData Rflink_CyFxGpifWavedata[] = { {{0x4E739C01,0x00001000,0x80000000},{0x00000000,0x00000000,0x00000000}}, {{0x50806202,0x0000000C,0x80000000},{0x00000000,0x00000000,0x00000000}}, {{0x1E706209,0x0C00C0C6,0x80000000},{0x1E70200A,0x00010106,0x80000000}}, {{0x4E739C04,0x00001000,0x80000000},{0x4E739C05,0x00000000,0x80100000}}, {{0x4E739C04,0x00001000,0x80000000},{0x00000000,0x00000000,0x00000000}}, {{0x4E739C04,0x00001000,0x80000000},{0x4E739C07,0x04000000,0x80100000}}, {{0x2E739A08,0x08000000,0x80000000},{0x2E739A0B,0x0C000000,0x80000000}}, {{0x2E701A03,0x20000006,0x80000000},{0x2E703A06,0x24000006,0x80000000}} }; /* Summary Table that maps state indices to the descriptor table indices. */ uint8_t Rflink_CyFxGpifWavedataPosition[] = { 0,1,2,3,1,4,5,4,4,6,7,4 }; /* Summary GPIF II configuration register values. */ uint32_t Rflink_CyFxGpifRegValue[] = { 0x800083B0, /* CY_U3P_PIB_GPIF_CONFIG */ 0x0000006C, /* CY_U3P_PIB_GPIF_BUS_CONFIG */ 0x00000000, /* CY_U3P_PIB_GPIF_BUS_CONFIG2 */ 0x00000052, /* CY_U3P_PIB_GPIF_AD_CONFIG */ 0x00000000, /* CY_U3P_PIB_GPIF_STATUS */ 0x00000000, /* CY_U3P_PIB_GPIF_INTR */ 0x00000000, /* CY_U3P_PIB_GPIF_INTR_MASK */ 0x00000082, /* CY_U3P_PIB_GPIF_SERIAL_IN_CONFIG */ 0x00000782, /* CY_U3P_PIB_GPIF_SERIAL_OUT_CONFIG */ 0x55515500, /* CY_U3P_PIB_GPIF_CTRL_BUS_DIRECTION */ 0x0000FF70, /* CY_U3P_PIB_GPIF_CTRL_BUS_DEFAULT */ 0x00000000, /* CY_U3P_PIB_GPIF_CTRL_BUS_POLARITY */ 0x00000080, /* CY_U3P_PIB_GPIF_CTRL_BUS_TOGGLE */ 0x00000000, /* CY_U3P_PIB_GPIF_CTRL_BUS_SELECT */ 0x00000000, /* CY_U3P_PIB_GPIF_CTRL_BUS_SELECT */ 0x00000000, /* CY_U3P_PIB_GPIF_CTRL_BUS_SELECT */ 0x00000000, /* CY_U3P_PIB_GPIF_CTRL_BUS_SELECT */ 0x00000000, /* CY_U3P_PIB_GPIF_CTRL_BUS_SELECT */ 0x00000001, /* CY_U3P_PIB_GPIF_CTRL_BUS_SELECT */ 0x00000002, /* CY_U3P_PIB_GPIF_CTRL_BUS_SELECT */ 0x00000003, /* CY_U3P_PIB_GPIF_CTRL_BUS_SELECT */ 0x00000010, /* CY_U3P_PIB_GPIF_CTRL_BUS_SELECT */ 0x00000000, /* CY_U3P_PIB_GPIF_CTRL_BUS_SELECT */ 0x00000012, /* CY_U3P_PIB_GPIF_CTRL_BUS_SELECT */ 0x00000013, /* CY_U3P_PIB_GPIF_CTRL_BUS_SELECT */ 0x00000011, /* CY_U3P_PIB_GPIF_CTRL_BUS_SELECT */ 0x00000000, /* CY_U3P_PIB_GPIF_CTRL_BUS_SELECT */ 0x00000000, /* CY_U3P_PIB_GPIF_CTRL_BUS_SELECT */ 0x00000000, /* CY_U3P_PIB_GPIF_CTRL_BUS_SELECT */ 0x00000006, /* CY_U3P_PIB_GPIF_CTRL_COUNT_CONFIG */ 0x00000000, /* CY_U3P_PIB_GPIF_CTRL_COUNT_RESET */ 0x0000FFFF, /* CY_U3P_PIB_GPIF_CTRL_COUNT_LIMIT */ 0x0000010A, /* CY_U3P_PIB_GPIF_ADDR_COUNT_CONFIG */ 0x00000000, /* CY_U3P_PIB_GPIF_ADDR_COUNT_RESET */ 0x0000FFFF, /* CY_U3P_PIB_GPIF_ADDR_COUNT_LIMIT */ 0x00000000, /* CY_U3P_PIB_GPIF_STATE_COUNT_CONFIG */ 0x0000FFFF, /* CY_U3P_PIB_GPIF_STATE_COUNT_LIMIT */ 0x0000010A, /* CY_U3P_PIB_GPIF_DATA_COUNT_CONFIG */ 0x00000000, /* CY_U3P_PIB_GPIF_DATA_COUNT_RESET */ 0x0000FFFF, /* CY_U3P_PIB_GPIF_DATA_COUNT_LIMIT */ 0x00000000, /* CY_U3P_PIB_GPIF_CTRL_COMP_VALUE */ 0x00000000, /* CY_U3P_PIB_GPIF_CTRL_COMP_MASK */ 0x00000000, /* CY_U3P_PIB_GPIF_DATA_COMP_VALUE */ 0x00000000, /* CY_U3P_PIB_GPIF_DATA_COMP_MASK */ 0x00000000, /* CY_U3P_PIB_GPIF_ADDR_COMP_VALUE */ 0x00000000, /* CY_U3P_PIB_GPIF_ADDR_COMP_MASK */ 0x00000000, /* CY_U3P_PIB_GPIF_DATA_CTRL */ 0x00000000, /* CY_U3P_PIB_GPIF_INGRESS_DATA */ 0x00000000, /* CY_U3P_PIB_GPIF_INGRESS_DATA */ 0x00000000, /* CY_U3P_PIB_GPIF_INGRESS_DATA */ 0x00000000, /* CY_U3P_PIB_GPIF_INGRESS_DATA */ 0x00000000, /* CY_U3P_PIB_GPIF_EGRESS_DATA */ 0x00000000, /* CY_U3P_PIB_GPIF_EGRESS_DATA */ 0x00000000, /* CY_U3P_PIB_GPIF_EGRESS_DATA */ 0x00000000, /* CY_U3P_PIB_GPIF_EGRESS_DATA */ 0x00000000, /* CY_U3P_PIB_GPIF_INGRESS_ADDRESS */ 0x00000000, /* CY_U3P_PIB_GPIF_INGRESS_ADDRESS */ 0x00000000, /* CY_U3P_PIB_GPIF_INGRESS_ADDRESS */ 0x00000000, /* CY_U3P_PIB_GPIF_INGRESS_ADDRESS */ 0x00000000, /* CY_U3P_PIB_GPIF_EGRESS_ADDRESS */ 0x00000000, /* CY_U3P_PIB_GPIF_EGRESS_ADDRESS */ 0x00000000, /* CY_U3P_PIB_GPIF_EGRESS_ADDRESS */ 0x00000000, /* CY_U3P_PIB_GPIF_EGRESS_ADDRESS */ 0x80010400, /* CY_U3P_PIB_GPIF_THREAD_CONFIG */ 0x80010401, /* CY_U3P_PIB_GPIF_THREAD_CONFIG */ 0x80010402, /* CY_U3P_PIB_GPIF_THREAD_CONFIG */ 0x80010403, /* CY_U3P_PIB_GPIF_THREAD_CONFIG */ 0x00000000, /* CY_U3P_PIB_GPIF_LAMBDA_STAT */ 0x00000000, /* CY_U3P_PIB_GPIF_ALPHA_STAT */ 0x00000000, /* CY_U3P_PIB_GPIF_BETA_STAT */ 0x00800000, /* CY_U3P_PIB_GPIF_WAVEFORM_CTRL_STAT */ 0x00000000, /* CY_U3P_PIB_GPIF_WAVEFORM_SWITCH */ 0x00000000, /* CY_U3P_PIB_GPIF_WAVEFORM_SWITCH_TIMEOUT */ 0x00000000, /* CY_U3P_PIB_GPIF_CRC_CONFIG */ 0x00000000, /* CY_U3P_PIB_GPIF_CRC_DATA */ 0xFFFFFFC1 /* CY_U3P_PIB_GPIF_BETA_DEASSERT */ }; /* Summary This structure holds all the configuration inputs for the GPIF II. */ const CyU3PGpifConfig_t Rflink_CyFxGpifConfig = { (uint16_t)(sizeof(Rflink_CyFxGpifWavedataPosition)/sizeof(uint8_t)), Rflink_CyFxGpifWavedata, Rflink_CyFxGpifWavedataPosition, (uint16_t)(sizeof(Rflink_CyFxGpifTransition)/sizeof(uint16_t)), Rflink_CyFxGpifTransition, (uint16_t)(sizeof(Rflink_CyFxGpifRegValue)/sizeof(uint32_t)), Rflink_CyFxGpifRegValue }; #endif /* _INCLUDED_CYFXGPIF2CONFIG_ */ bladeRF-2024.05/fx3_firmware/src/flash.c000066400000000000000000000160471457144405000176250ustar00rootroot00000000000000/* * Copyright (c) 2013 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include "cyu3spi.h" #include "cyu3error.h" #include "bladeRF.h" #include "spi_flash_lib.h" #include "flash.h" #include "misc.h" #define THIS_FILE LOGGER_ID_FLASH_C static CyU3PReturnStatus_t FlashReadStatus(uint8_t *val) { int status; uint8_t read_status = 0x05; /* RDSTATUS */ status = CyU3PSpiSetSsnLine (CyFalse); status = CyU3PSpiTransmitWords (&read_status, 1); status = CyU3PSpiReceiveWords(val, 1); status = CyU3PSpiSetSsnLine (CyTrue); return status; } CyU3PReturnStatus_t NuandLockOtpMacronix() { CyU3PReturnStatus_t status = CY_U3P_SUCCESS; uint8_t location[1]; uint8_t read_status; status = FlashReadStatus(&read_status); location[0] = 0x06; /* Write enable. */ status = CyU3PSpiSetSsnLine (CyFalse); status = CyU3PSpiTransmitWords (location, 1); status = CyU3PSpiSetSsnLine (CyTrue); status = FlashReadStatus(&read_status); location[0] = 0x2f;// WRSCUR status = CyU3PSpiSetSsnLine (CyFalse); status = CyU3PSpiTransmitWords (location, 1); status = CyU3PSpiSetSsnLine (CyTrue); location[0] = 0x02;// Page program status = CyU3PSpiSetSsnLine (CyFalse); status = CyU3PSpiTransmitWords (location, 1); status = CyU3PSpiSetSsnLine (CyTrue); location[0] = 0x2b; /* RDSCUR */ status = CyU3PSpiSetSsnLine (CyFalse); status = CyU3PSpiTransmitWords (location, 1); status = CyU3PSpiReceiveWords(location, 1); status = CyU3PSpiSetSsnLine (CyTrue); return status; } CyU3PReturnStatus_t NuandLockOtpWinbond() { CyU3PReturnStatus_t status = CY_U3P_SUCCESS; uint8_t location[4]; uint8_t val[2]; location[0] = 0x35; // Read Status Register 2 status = CyU3PSpiSetSsnLine (CyFalse); status = CyU3PSpiTransmitWords (location, 1); status = CyU3PSpiReceiveWords(val, 1); status = CyU3PSpiSetSsnLine (CyTrue); val[0] |= 0x8; // Set LB-1 location[0] = 0x31; // Write Status Register 2 location[1] = val[0]; status = CyU3PSpiSetSsnLine (CyFalse); status = CyU3PSpiTransmitWords (location, 2); status = CyU3PSpiSetSsnLine (CyTrue); return status; } CyU3PReturnStatus_t NuandLockOtp() { if (NuandGetSPIManufacturer() == 0xEF) { return NuandLockOtpWinbond(); } return NuandLockOtpMacronix(); } CyU3PReturnStatus_t NuandEnso() { CyU3PReturnStatus_t status = CY_U3P_SUCCESS; uint8_t location[1]; location[0] = 0xb1; // ENSO status = CyU3PSpiSetSsnLine (CyFalse); status = CyU3PSpiTransmitWords (location, 1); status = CyU3PSpiSetSsnLine (CyTrue); return status; } CyU3PReturnStatus_t NuandExso() { CyU3PReturnStatus_t status = CY_U3P_SUCCESS; uint8_t location[1]; location[0] = 0xc1; // EXSO status = CyU3PSpiSetSsnLine (CyFalse); status = CyU3PSpiTransmitWords (location, 1); status = CyU3PSpiSetSsnLine (CyTrue); return status; } void NuandEraseWBSec() { uint8_t location[4]; location[0] = 0x44; // Erase security register location[1] = 0x0; location[2] = 0x1f; location[3] = 0x0; CyU3PSpiSetSsnLine (CyFalse); CyU3PSpiTransmitWords (location, 4); CyU3PSpiSetSsnLine (CyTrue); } static uint8_t spi_mfn[2]; static CyBool_t cached_spi_mfn = CyFalse; void cacheSPIManufacturer() { uint8_t location[4]; location[0] = 0x90; // RD Manu location[1] = 0x0; location[2] = 0x0; location[3] = 0x0; CyU3PSpiSetSsnLine (CyFalse); CyU3PSpiTransmitWords (location, 4); CyU3PSpiReceiveWords(spi_mfn, 2); CyU3PSpiSetSsnLine (CyTrue); cached_spi_mfn = CyTrue; } uint8_t NuandGetSPIManufacturer() { if (!cached_spi_mfn) { cacheSPIManufacturer(); } return spi_mfn[0]; } uint8_t NuandGetSPIDeviceID() { if (!cached_spi_mfn) { cacheSPIManufacturer(); } return spi_mfn[1]; } CyU3PReturnStatus_t NuandReadOtp(size_t offset, size_t size, void *buf) { CyU3PReturnStatus_t status; if (NuandGetSPIManufacturer() == 0xEF) { offset = (1 << 12) / FLASH_PAGE_SIZE; } else { status = NuandEnso(); } status = CyFxSpiTransfer(offset, size, buf, CyTrue, CyTrue); if (NuandGetSPIManufacturer() != 0xEF) { status = NuandExso(); } return status; } CyU3PReturnStatus_t NuandWriteOtp(size_t offset, size_t size, void *buf) { CyU3PReturnStatus_t status; if (NuandGetSPIManufacturer() == 0xEF) { NuandEraseWBSec(); offset = (1 << 12) / FLASH_PAGE_SIZE; } else { status = NuandEnso(); } status = CyFxSpiTransfer(offset, size, buf, CyFalse, CyTrue); if (NuandGetSPIManufacturer() != 0xEF) { status = NuandExso(); } return status; } CyU3PReturnStatus_t NuandFlashInit() { CyU3PReturnStatus_t status; NuandGPIOReconfigure(CyFalse, CyTrue); status = CyFxSpiInit(); if (NuandGetSPIManufacturer() == 0xEF) { CyU3PSpiSetClock(30000000); } glAppMode = MODE_FW_CONFIG; return status; } void NuandFlashDeinit() { CyFxSpiDeInit(); } static inline size_t min_sz(size_t x, size_t y) { return x < y ? x : y; } int NuandExtractField(char *ptr, int len, char *field, char *val, size_t maxlen) { int c, wlen; unsigned char *ub, *end; unsigned short a1, a2; int flen; flen = strlen(field); ub = (unsigned char *)ptr; end = ub + len; while (ub < end) { c = *ub; if (c == 0xff) // flash and OTP are 0xff if they've never been written to break; a1 = *(unsigned short *)(&ub[c+1]); // read checksum a2 = zcrc(ub, c+1); // calculate checksum if (a1 == a2 || 1) { if (!strncmp((char *)ub + 1, field, flen)) { wlen = min_sz(c - flen, maxlen); strncpy(val, (char *)ub + 1 + flen, wlen); val[wlen] = 0; return 0; } } else { return 1; } ub += c + 3; //skip past `c' bytes, 2 byte CRC field, and 1 byte len field } return 1; } bladeRF-2024.05/fx3_firmware/src/flash.h000066400000000000000000000032231457144405000176220ustar00rootroot00000000000000/* * Copyright (c) 2013 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef _FIRMWARE_H_ #define _FIRMWARE_H_ #include #include "cyu3error.h" CyU3PReturnStatus_t NuandReadOtp(size_t offset, size_t size, void *buf); CyU3PReturnStatus_t NuandWriteOtp(size_t offset, size_t size, void *buf); CyU3PReturnStatus_t NuandLockOtp(); uint8_t NuandGetSPIManufacturer(); uint8_t NuandGetSPIDeviceID(); void cacheSPIManufacturer(); CyU3PReturnStatus_t NuandFlashInit(); void NuandFlashDeinit(); int NuandExtractField(char *ptr, int len, char *field, char *val, size_t maxlen); #endif /* _FIRMWARE_H_ */ bladeRF-2024.05/fx3_firmware/src/fpga.c000066400000000000000000000265141457144405000174450ustar00rootroot00000000000000/* * Copyright (c) 2013-2017 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include #include #include "bladeRF.h" #include "fpga.h" #include "gpif.h" #include "spi_flash_lib.h" #define THIS_FILE LOGGER_ID_FPGA_C /* DMA Channel for RF U2P (USB to P-port) transfers */ static CyU3PDmaChannel glChHandlebladeRFUtoP; /* Counter to track the number of buffers received from USB during FPGA * programming */ static uint32_t glDMARxCount = 0; static uint16_t glFlipLut[256]; /* Tracks the last FPGA programmer (SPI flash or USB host) */ static NuandFpgaConfigSource glFpgaConfigSrc = NUAND_FPGA_CONFIG_SOURCE_INVALID; int FpgaBeginProgram(void) { CyBool_t value; unsigned tEnd; CyU3PReturnStatus_t apiRetStatus; apiRetStatus = CyU3PGpioSetValue(GPIO_nCONFIG, CyFalse); if (apiRetStatus != CY_U3P_SUCCESS) { return apiRetStatus; } tEnd = CyU3PGetTime() + 10; while (CyU3PGetTime() < tEnd); apiRetStatus = CyU3PGpioSetValue(GPIO_nCONFIG, CyTrue); tEnd = CyU3PGetTime() + 1000; do { apiRetStatus = CyU3PGpioGetValue(GPIO_nSTATUS, &value); if (CyU3PGetTime() > tEnd) return -1; } while (!value); return 0; } void NuandFpgaConfigSwInit(void) { NuandFpgaConfigSwFlipLut(glFlipLut); } /* DMA callback function to handle the produce events for U to P transfers. */ static void bladeRFConfigUtoPDmaCallback(CyU3PDmaChannel *chHandle, CyU3PDmaCbType_t type, CyU3PDmaCBInput_t *input) { CyU3PReturnStatus_t status = CY_U3P_SUCCESS; if (type == CY_U3P_DMA_CB_PROD_EVENT) { int i; uint8_t *end_in_b = &( ((uint8_t *)input->buffer_p.buffer)[input->buffer_p.count - 1]); uint16_t *end_in_w = &( ((uint16_t *)input->buffer_p.buffer)[input->buffer_p.count - 1]); /* Flip the bits in such a way that the FPGA can be programmed * This mapping can be determined by looking at the schematic */ for (i = input->buffer_p.count - 1; i >= 0; i--) { *end_in_w-- = glFlipLut[*end_in_b--]; } status = CyU3PDmaChannelCommitBuffer (chHandle, input->buffer_p.count * 2, 0); if (status != CY_U3P_SUCCESS) { LOG_ERROR(status); } /* Increment the counter. */ glDMARxCount++; } } static void NuandFpgaConfigStart(void) { uint16_t size = 0; CyU3PEpConfig_t epCfg; CyU3PDmaChannelConfig_t dmaCfg; CyU3PReturnStatus_t apiRetStatus = CY_U3P_SUCCESS; CyU3PUSBSpeed_t usbSpeed = CyU3PUsbGetSpeed(); static int first_call = 1; bool doUsb = true; NuandSetFpgaConfigSource(NUAND_FPGA_CONFIG_SOURCE_INVALID); NuandAllowSuspend(CyFalse); NuandGPIOReconfigure(CyFalse, !first_call); first_call = 0; apiRetStatus = NuandConfigureGpif(GPIF_CONFIG_FPGA_LOAD); if (apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); CyFxAppErrorHandler(apiRetStatus); } /* Determine max packet size based on USB speed */ switch (usbSpeed) { case CY_U3P_FULL_SPEED: size = 64; break; case CY_U3P_HIGH_SPEED: size = 512; break; case CY_U3P_SUPER_SPEED: size = 1024; break; case CY_U3P_NOT_CONNECTED: size = 1024; doUsb = false; break; default: LOG_ERROR(usbSpeed); CyFxAppErrorHandler(CY_U3P_ERROR_FAILURE); break; } if (doUsb) { CyU3PMemSet((uint8_t *)&epCfg, 0, sizeof (epCfg)); epCfg.enable = CyTrue; epCfg.epType = CY_U3P_USB_EP_BULK; epCfg.burstLen = 1; epCfg.streams = 0; epCfg.pcktSize = size; apiRetStatus = CyU3PSetEpConfig(BLADE_FPGA_EP_PRODUCER, &epCfg); if (apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); CyFxAppErrorHandler (apiRetStatus); } } dmaCfg.size = size * 4; dmaCfg.count = BLADE_DMA_BUF_COUNT; dmaCfg.prodSckId = BLADE_FPGA_CONFIG_SOCKET; dmaCfg.consSckId = CY_U3P_PIB_SOCKET_3; dmaCfg.dmaMode = CY_U3P_DMA_MODE_BYTE; /* Enable the callback for produce event, this is where the bits will get flipped */ dmaCfg.notification = CY_U3P_DMA_CB_PROD_EVENT; dmaCfg.cb = bladeRFConfigUtoPDmaCallback; dmaCfg.prodHeader = 0; dmaCfg.prodFooter = size * 3; dmaCfg.consHeader = 0; dmaCfg.prodAvailCount = 0; apiRetStatus = CyU3PDmaChannelCreate(&glChHandlebladeRFUtoP, CY_U3P_DMA_TYPE_MANUAL, &dmaCfg); if (apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); CyFxAppErrorHandler(apiRetStatus); } if (doUsb) { /* Flush the endpoint memory */ CyU3PUsbFlushEp(BLADE_FPGA_EP_PRODUCER); } /* Set DMA channel transfer size. */ apiRetStatus = CyU3PDmaChannelSetXfer(&glChHandlebladeRFUtoP, BLADE_DMA_TX_SIZE); if (apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); CyFxAppErrorHandler(apiRetStatus); } glAppMode = MODE_FPGA_CONFIG; } void NuandFpgaConfigStop(void) { CyU3PEpConfig_t epCfg; CyU3PReturnStatus_t apiRetStatus = CY_U3P_SUCCESS; /* Abort and clear the channel */ CyU3PDmaChannelReset(&glChHandlebladeRFUtoP); /* Flush the endpoint memory */ CyU3PUsbFlushEp(BLADE_FPGA_EP_PRODUCER); /* Destroy the channel */ CyU3PDmaChannelDestroy(&glChHandlebladeRFUtoP); /* Disable endpoints. */ CyU3PMemSet((uint8_t *)&epCfg, 0, sizeof (epCfg)); epCfg.enable = CyFalse; /* Producer endpoint configuration. */ apiRetStatus = CyU3PSetEpConfig(BLADE_FPGA_EP_PRODUCER, &epCfg); if (apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); CyFxAppErrorHandler (apiRetStatus); } apiRetStatus = NuandConfigureGpif(GPIF_CONFIG_DISABLED); if (apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); CyFxAppErrorHandler(apiRetStatus); } NuandAllowSuspend(CyTrue); glAppMode = MODE_NO_CONFIG; CyU3PGpioSetValue(GPIO_SYS_RST, CyTrue); } uint8_t FPGA_status_bits[] = { [BLADE_FPGA_EP_PRODUCER] = 0, }; CyU3PReturnStatus_t NuandFpgaConfigResetEndpoint(uint8_t endpoint) { CyU3PReturnStatus_t status = CY_U3P_ERROR_BAD_ARGUMENT; switch(endpoint) { case BLADE_FPGA_EP_PRODUCER: status = ClearDMAChannel(endpoint, &glChHandlebladeRFUtoP, BLADE_DMA_TX_SIZE); break; } return status; } CyBool_t NuandFpgaConfigHaltEndpoint(CyBool_t set, uint16_t endpoint) { CyBool_t isHandled = CyFalse; CyU3PReturnStatus_t status = CY_U3P_ERROR_BAD_ARGUMENT; switch(endpoint) { case BLADE_FPGA_EP_PRODUCER: FPGA_status_bits[endpoint] = set; status = NuandFpgaConfigResetEndpoint(endpoint); isHandled = !set; break; } if (status == CY_U3P_SUCCESS) { CyU3PUsbStall (endpoint, CyFalse, CyTrue); if(!set) { CyU3PUsbAckSetup (); } } return isHandled && status == CY_U3P_SUCCESS; } CyBool_t NuandFpgaConfigHalted(uint16_t endpoint, uint8_t * data) { CyBool_t isHandled = CyFalse; switch(endpoint) { case BLADE_FPGA_EP_PRODUCER: *data = FPGA_status_bits[endpoint]; isHandled = CyTrue; break; } return isHandled; } CyBool_t NuandLoadFromFlash(int fpga_len) { uint8_t *ptr; int nleft; CyBool_t retval = CyFalse; CyU3PDmaBuffer_t dbuf; uint32_t sector_idx = 1025; uint32_t prodCnt, consCnt; int32_t i; CyU3PDmaState_t state; CyU3PReturnStatus_t apiRetStatus = CY_U3P_SUCCESS; NuandFpgaConfigStart(); ptr = CyU3PDmaBufferAlloc(4096); apiRetStatus = CyFxSpiInit(0x100); CyFxSpiFastRead(CyTrue); apiRetStatus = CyU3PSpiSetClock(30000000); if (FpgaBeginProgram() != CY_U3P_SUCCESS) { goto out; } nleft = fpga_len; while(nleft) { apiRetStatus = CyU3PDmaChannelGetStatus(&glChHandlebladeRFUtoP, &state, &prodCnt, &consCnt); if (apiRetStatus) break; CyU3PDmaChannelAbort(&glChHandlebladeRFUtoP); apiRetStatus = CyU3PDmaChannelGetStatus(&glChHandlebladeRFUtoP, &state, &prodCnt, &consCnt); if (apiRetStatus) break; CyU3PDmaChannelReset(&glChHandlebladeRFUtoP); apiRetStatus = CyU3PDmaChannelGetStatus(&glChHandlebladeRFUtoP, &state, &prodCnt, &consCnt); if (apiRetStatus) break; if (CyFxSpiTransfer(sector_idx++, 0x100, ptr, CyTrue, CyFalse) != CY_U3P_SUCCESS) break; uint8_t *end_in_b = &( ((uint8_t *)ptr)[255]); uint16_t *end_in_w = &( ((uint16_t *)ptr)[255]); /* Flip the bits in such a way that the FPGA can be programmed * This mapping can be determined by looking at the schematic */ for (i = 255; i >= 0; i--) *end_in_w-- = glFlipLut[*end_in_b--]; dbuf.buffer = ptr; dbuf.count = ((nleft > 256) ? 256 : (nleft + 2)) * 2; dbuf.size = 4096; dbuf.status = 0; apiRetStatus = CyU3PDmaChannelSetupSendBuffer(&glChHandlebladeRFUtoP, &dbuf); if (apiRetStatus) break; apiRetStatus = CyU3PDmaChannelGetStatus(&glChHandlebladeRFUtoP, &state, &prodCnt, &consCnt); if (apiRetStatus) break; apiRetStatus = CyU3PDmaChannelWaitForCompletion(&glChHandlebladeRFUtoP, 100); if (apiRetStatus) break; apiRetStatus = CyU3PDmaChannelGetStatus(&glChHandlebladeRFUtoP, &state, &prodCnt, &consCnt); if (apiRetStatus) break; if (nleft > 256) { nleft -= 256; } else { retval = CyTrue; nleft = 0; break; } } NuandSetFpgaConfigSource(NUAND_FPGA_CONFIG_SOURCE_FLASH); out: CyU3PDmaBufferFree(ptr); CyU3PSpiDeInit(); CyFxSpiFastRead(CyFalse); NuandFpgaConfigStop(); return retval; } NuandFpgaConfigSource NuandGetFpgaConfigSource(void) { return glFpgaConfigSrc; } void NuandSetFpgaConfigSource(NuandFpgaConfigSource src) { glFpgaConfigSrc = src; } const struct NuandApplication NuandFpgaConfig = { .start = NuandFpgaConfigStart, .stop = NuandFpgaConfigStop, .halt_endpoint = NuandFpgaConfigHaltEndpoint, .halted = NuandFpgaConfigHalted, .reset_endpoint = NuandFpgaConfigResetEndpoint }; bladeRF-2024.05/fx3_firmware/src/fpga.h000066400000000000000000000026711457144405000174500ustar00rootroot00000000000000/* * Copyright (c) 2013 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef _FPGA_H_ #define _FPGA_H_ #include "bladeRF.h" void NuandFpgaConfigSwInit(void); extern const struct NuandApplication NuandFpgaConfig; int FpgaBeginProgram(void); CyBool_t NuandLoadFromFlash(int fpga_len); NuandFpgaConfigSource NuandGetFpgaConfigSource(void); void NuandSetFpgaConfigSource(NuandFpgaConfigSource src); #endif /* _FPGA_H_ */ bladeRF-2024.05/fx3_firmware/src/gpif.c000066400000000000000000000066041457144405000174530ustar00rootroot00000000000000/* * Copyright (c) 2014 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include #include "gpif.h" /* These generated headers contain declarations, and must be included in * only one place */ #include "cyfxgpif_C4loader.h" #include "cyfxgpif_RFlink.h" #define THIS_FILE LOGGER_ID_GPIF_C CyU3PReturnStatus_t NuandConfigureGpif(NuandGpifConfig config) { CyU3PReturnStatus_t status; CyU3PPibClock_t pibClock; const CyU3PGpifConfig_t *gpif_config; uint8_t gpif_state_index; uint8_t gpif_initial_alpha; static CyBool_t gpif_active = CyFalse; static CyBool_t pib_active = CyFalse; /* Restart thel GPIF and PIB block for safe measure. * * Previously, a bug had been observed where 16-bit to 32-bit GPIF * transitions messes up the first DMA transaction, requiring these * resets. */ if (gpif_active) { CyU3PGpifDisable(CyTrue); gpif_active = CyFalse; } if (pib_active) { status = CyU3PPibDeInit(); if (status != CY_U3P_SUCCESS) { return status; } pib_active = CyFalse; } switch (config) { case GPIF_CONFIG_RF_LINK: gpif_config = &Rflink_CyFxGpifConfig; gpif_state_index = RFLINK_START; gpif_initial_alpha = RFLINK_ALPHA_START; break; case GPIF_CONFIG_FPGA_LOAD: gpif_config = &C4loader_CyFxGpifConfig; gpif_state_index = C4LOADER_START; gpif_initial_alpha = C4LOADER_ALPHA_START; break; case GPIF_CONFIG_DISABLED: /* Nothing left to do here */ return CY_U3P_SUCCESS; default: return CY_U3P_ERROR_BAD_ARGUMENT; } pibClock.clkDiv = 4; pibClock.clkSrc = CY_U3P_SYS_CLK; pibClock.isHalfDiv = CyFalse; pibClock.isDllEnable = CyFalse; status = CyU3PPibInit(CyTrue, &pibClock); if (status != CY_U3P_SUCCESS) { return status; } pib_active = CyTrue; /* Load the GPIF configuration */ status = CyU3PGpifLoad(gpif_config); if (status != CY_U3P_SUCCESS) { return status; } gpif_active = CyTrue; /* Start the state machine. */ status = CyU3PGpifSMStart(gpif_state_index, gpif_initial_alpha); if (status != CY_U3P_SUCCESS) { return status; } return CY_U3P_SUCCESS; } bladeRF-2024.05/fx3_firmware/src/gpif.h000066400000000000000000000031651457144405000174570ustar00rootroot00000000000000/* * Copyright (c) 2013 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef GPIF_H_ #define GPIF_H_ /** * Supported GPIF configurations */ typedef enum { GPIF_CONFIG_DISABLED, /**< GPIF is disabled */ GPIF_CONFIG_RF_LINK, /**< GPIF configured for streaming RF samples */ GPIF_CONFIG_FPGA_LOAD, /**< GPIF configured for FPGA loading */ } NuandGpifConfig; /** * Reconfigure the GPIF (and PIB) for the specified configuration * * @param config Desired configuration * * @return CY_U3P_* return code */ CyU3PReturnStatus_t NuandConfigureGpif(NuandGpifConfig config); #endif bladeRF-2024.05/fx3_firmware/src/logger.c000066400000000000000000000217131457144405000200030ustar00rootroot00000000000000/* * Copyright (c) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include "logger.h" #ifndef LOGGER_HOST # define THIS_FILE LOGGER_ID_LOGGER_C # include # include # include "bladeRF.h" # define MUTEX_INIT(log) CyU3PMutexCreate(&log.lock, CYU3P_INHERIT) # define LOCK(log) CyU3PMutexGet(&log.lock, CYU3P_WAIT_FOREVER) # define UNLOCK(log) (void) CyU3PMutexPut(&log.lock) #else # define THIS_FILE 1 # define CY_U3P_SUCCESS 0 # define MUTEX_INIT(log) CY_U3P_SUCCESS # define LOCK(log) CY_U3P_SUCCESS # define UNLOCK(log) typedef int CyU3PReturnStatus_t; #endif #ifndef LOGGER_NUM_ENTRIES # define LOGGER_NUM_ENTRIES 256 #endif static struct { uint16_t size; uint16_t insert; uint16_t remove; logger_entry entries[LOGGER_NUM_ENTRIES]; #ifndef LOGGER_HOST CyU3PMutex lock; #endif } log; bool logger_init() { CyU3PReturnStatus_t status = CY_U3P_SUCCESS; log.size = 0; log.insert = 0; log.remove = 0; status = MUTEX_INIT(log); return status == CY_U3P_SUCCESS; } bool logger_record(uint8_t file, uint16_t line, uint16_t data) { bool success = true; bool fill_warning = false; CyU3PReturnStatus_t status; status = LOCK(log); if (status != CY_U3P_SUCCESS) { /* Can't acquire the log lock. Nothing we can do but bail out. */ return false; } if (log.size == LOGGER_NUM_ENTRIES) { /* Log is full - nothing we can do */ success = false; goto out; } /* We're about to fill the second-to-last entry. Add a fill warning * to the last entry so we can know that we might have dropped future * events. */ fill_warning = (log.size == LOGGER_NUM_ENTRIES - 2); log.entries[log.insert] = logger_entry_pack(file, line, data); log.insert = (log.insert + 1) % LOGGER_NUM_ENTRIES; log.size++; if (fill_warning) { log.entries[log.insert] = logger_entry_pack(THIS_FILE, __LINE__, 0); log.insert = (log.insert + 1) % LOGGER_NUM_ENTRIES; log.size++; } out: UNLOCK(log); return success; } logger_entry logger_read() { CyU3PReturnStatus_t status; logger_entry e; status = LOCK(log); if (status != CY_U3P_SUCCESS) { return LOG_ERR; } if (log.size == 0) { e = LOG_EOF; goto out; } e = log.entries[log.remove]; log.size--; log.remove = (log.remove + 1) % LOGGER_NUM_ENTRIES; out: UNLOCK(log); return e; } /* Logger test program. Build with * $(CC) -Wall -Wextra -DLOGGER_HOST -DLOGGER_TEST logger.c -o logger_test */ #if defined LOGGER_HOST && defined LOGGER_TEST #include #include #define NO_FAILURE_EXPECTED 0xffff #define NO_EOF_EXPECTED 0xffff #define NO_MISMATCH_EXPECTED 0xffff static void gen_test_values(uint8_t *file_id, uint16_t *line, uint16_t *data, uint16_t i) { logger_entry test; *file_id = (LOG_FILE_MASK - i) & LOG_FILE_MASK; *line = (LOG_LINE_MASK - i) & LOG_LINE_MASK; *data = (LOG_DATA_MASK - i) & LOG_LINE_MASK; test = logger_entry_pack(*file_id, *line, *data); if (test == LOG_EOF || test == LOG_ERR) { *data = 42; } } static bool add_log_entries(uint16_t start, uint16_t end, uint16_t expected_failure) { uint16_t i; uint8_t file_id; uint16_t line; uint16_t data; bool success; for (i = start; i < end; i++) { gen_test_values(&file_id, &line, &data, i); success = logger_record(file_id, line, data); if (!success) { if (i == expected_failure) { /* We expected to see this happen; it's part of the test */ return true; } else { fprintf(stderr, "Logger reported unexpected failure @ i = %u\n", i); return false; } } } if (expected_failure != NO_FAILURE_EXPECTED) { fprintf(stderr, "Expected failure did not occurr @ i = %u\n", expected_failure); return false; } else { return true; } } static bool remove_log_entries(uint16_t start, uint16_t end, uint16_t expected_eof, uint16_t expected_mismatch) { logger_entry e; uint16_t i; uint8_t file_id, exp_file_id; uint16_t line, exp_line; uint16_t data, exp_data; bool entry_valid = true; for (i = start; i < end; i++) { gen_test_values(&exp_file_id, &exp_line, &exp_data, i); e = logger_read(); if (e == LOG_ERR) { fprintf(stderr, "Logger read failed @ i = %u\n", i); return false; } if (e == LOG_EOF && expected_eof != i) { fprintf(stderr, "Logger reported unexpected EOF @ i = %u\n", i); return false; } if (e != LOG_EOF && expected_eof == i) { fprintf(stderr, "Logger did not reporte expected EOF @ i = %u\n", i); return false; } if (e == LOG_EOF && expected_eof == i) { return true; } logger_entry_unpack(e, &file_id, &line, &data); if (file_id != exp_file_id) { entry_valid = false; } if (line != exp_line) { entry_valid = false; } if (data != exp_data) { entry_valid = false; } if (!entry_valid && expected_mismatch != i) { fprintf(stderr, "Mismatch @ %u. " "Expected { 0x%02x, 0x%04x, 0x%04x }. " "Got { 0x%02x, 0x%04x, 0x%04x }\n", i, file_id, line, data, exp_file_id, exp_line, exp_data); return false; } else if (entry_valid && expected_mismatch == i) { fprintf(stderr, "Entry @ %u doesn't mismatch as expected.\n", i); } } return true; } static void print_status(const char *str, bool pass, int *retval) { const char *result_str = pass ? "Pass\n" : "Fail\n"; printf("%s: %s\n", str, result_str); if (!pass) { *retval = EXIT_FAILURE; } } int main(void) { int retval = 0; bool status; logger_init(); status = remove_log_entries(0, 1, 0, NO_FAILURE_EXPECTED); print_status("Remove from empty log", status, &retval); status = add_log_entries(0, 1, NO_FAILURE_EXPECTED); print_status("Add single entry", status, &retval); status = remove_log_entries(0, 1, NO_EOF_EXPECTED, NO_MISMATCH_EXPECTED); print_status("Remove single entry", status, &retval); status = add_log_entries(0, LOGGER_NUM_ENTRIES - 1, NO_FAILURE_EXPECTED); print_status("Fill log", status, &retval); status = add_log_entries(0, 1, 0); print_status("Overfill log", status, &retval); status = remove_log_entries(0, LOGGER_NUM_ENTRIES - 1, NO_EOF_EXPECTED, NO_MISMATCH_EXPECTED); print_status("Remove all entries", status, &retval); status = remove_log_entries(0, 1, NO_EOF_EXPECTED, 0); print_status("Remove fill warning", status, &retval); status = add_log_entries(0, 16, NO_FAILURE_EXPECTED); print_status("Add entries 0-15", status, &retval); status = remove_log_entries(0, 5, NO_EOF_EXPECTED, NO_MISMATCH_EXPECTED); print_status("Removed entries 0-5", status, &retval); status = add_log_entries(16, 21, NO_FAILURE_EXPECTED); print_status("Add 5 more entries: 16-20", status, &retval); status = remove_log_entries(5, 20, NO_EOF_EXPECTED, NO_MISMATCH_EXPECTED); print_status("Removed entries 5-19", status, &retval); status = remove_log_entries(20, 21, NO_EOF_EXPECTED, NO_MISMATCH_EXPECTED); print_status("Removed entry 20", status, &retval); status = remove_log_entries(21, 22, 21, NO_MISMATCH_EXPECTED); print_status("Got expected EOF", status, &retval); return retval; } #endif bladeRF-2024.05/fx3_firmware/src/logger.h000066400000000000000000000062351457144405000200120ustar00rootroot00000000000000/* * Copyright (c) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef LOGGER_H_ #define LOGGER_H_ #include #include #include "../firmware_common/logger_entry.h" /* This logging interface is intended to be lightweight and tightly coupled * to the associated firmware. It is design to simply note that an event * occurred in a specific file, at a specific line, with an optional argument */ /* LOGGER_MAX_VERBOSITY defines the maximum (most verbose) level that we'll * compile into the firmware */ #ifndef LOGGER_MIN_LEVEL # define LOGGER_MIN_LEVEL LOGGER_LEVEL_INFO #endif #define LOGGER_LEVEL_DEBUG 0 #define LOGGER_LEVEL_INFO 1 #define LOGGER_LEVEL_WARNING 2 #define LOGGER_LEVEL_ERROR 3 #define LOGGER_LEVLE_SILENT 4 /** * Initialize the logger state. This must be called prior to use. * * @return true on success, false on failure */ bool logger_init(); /** * Log an event. This should not be used directly; one of the level-specific * macros should be used. * * @param file_id ID of source file that is logging the event * @param line Line number where the event is being logged * @param data Optional data to include with the event * * @return true on success, false on full log or failure */ bool logger_record(uint8_t file_id, uint16_t line, uint16_t data); #if LOGGER_LEVEL_DEBUG >= LOGGER_MIN_LEVEL # define LOG_DEBUG(data) logger_record(THIS_FILE, __LINE__, data) #else # define LOG_DEBUG(data) #endif #if LOGGER_LEVEL_INFO >= LOGGER_MIN_LEVEL # define LOG_INFO(data) logger_record(THIS_FILE, __LINE__, data) #else # define LOG_INFO(data) #endif #if LOGGER_LEVEL_WARNING >= LOGGER_MIN_LEVEL # define LOG_WARNING(data) logger_record(THIS_FILE, __LINE__, data) #else # define LOG_WARNING(data) #endif #if LOGGER_LEVEL_ERROR >= LOGGER_MIN_LEVEL # define LOG_ERROR(data) logger_record(THIS_FILE, __LINE__, data) #else # define LOG_ERROR(data) #endif /** * Read and remove an entry from the log * * @return log entry on success, LOG_EOF if log is empty, and LOG_ERR if a * failure occurred while reading the log. */ logger_entry logger_read(); #endif bladeRF-2024.05/fx3_firmware/src/rf.c000066400000000000000000000354451457144405000171420ustar00rootroot00000000000000/* * Copyright (c) 2013 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include #include #include "gpif.h" #include "rf.h" #define THIS_FILE LOGGER_ID_RF_C static CyU3PDmaChannel glChHandlebladeRFUtoUART; /* DMA Channel for U2P transfers */ static CyU3PDmaChannel glChHandlebladeRFUARTtoU; /* DMA Channel for U2P transfers */ static CyU3PDmaChannel glChHandleUtoP; static CyU3PDmaChannel glChHandlePtoU; static int loopback = 0; static int loopback_when_created; void NuandRFLinkLoopBack(int lp) { loopback = lp; } int NuandRFLinkGetLoopBack() { return loopback; } static void UartBridgeStart(void) { uint16_t size = 0; CyU3PEpConfig_t epCfg; CyU3PUSBSpeed_t usbSpeed = CyU3PUsbGetSpeed(); CyU3PDmaChannelConfig_t dmaCfg; CyU3PUartConfig_t uartConfig; CyU3PReturnStatus_t apiRetStatus = CY_U3P_SUCCESS; /* Initialize the UART for printing debug messages */ apiRetStatus = CyU3PUartInit(); if (apiRetStatus != CY_U3P_SUCCESS) { CyFxAppErrorHandler(apiRetStatus); } /* Set UART configuration */ CyU3PMemSet ((uint8_t *)&uartConfig, 0, sizeof (uartConfig)); uartConfig.baudRate = CY_U3P_UART_BAUDRATE_4M; // CY_U3P_UART_BAUDRATE_115200; uartConfig.stopBit = CY_U3P_UART_ONE_STOP_BIT; uartConfig.parity = CY_U3P_UART_NO_PARITY; uartConfig.txEnable = CyTrue; uartConfig.rxEnable = CyTrue; uartConfig.flowCtrl = CyFalse; uartConfig.isDma = CyTrue; apiRetStatus = CyU3PUartSetConfig (&uartConfig, NULL); if (apiRetStatus != CY_U3P_SUCCESS) { CyFxAppErrorHandler(apiRetStatus); } /* Set UART Tx and Rx transfer Size to infinite */ apiRetStatus = CyU3PUartTxSetBlockXfer(0xFFFFFFFF); if (apiRetStatus != CY_U3P_SUCCESS) { CyFxAppErrorHandler(apiRetStatus); } apiRetStatus = CyU3PUartRxSetBlockXfer(0xFFFFFFFF); if (apiRetStatus != CY_U3P_SUCCESS) { CyFxAppErrorHandler(apiRetStatus); } /* Determine max packet size based on USB speed */ switch (usbSpeed) { case CY_U3P_FULL_SPEED: size = 64; break; case CY_U3P_HIGH_SPEED: size = 512; break; case CY_U3P_SUPER_SPEED: size = 1024; break; default: LOG_ERROR(usbSpeed); CyFxAppErrorHandler (CY_U3P_ERROR_FAILURE); break; } CyU3PMemSet ((uint8_t *)&epCfg, 0, sizeof (epCfg)); epCfg.enable = CyTrue; epCfg.epType = CY_U3P_USB_EP_BULK; epCfg.burstLen = 1; epCfg.streams = 0; epCfg.pcktSize = size; /* Producer endpoint configuration */ apiRetStatus = CyU3PSetEpConfig(BLADE_UART_EP_PRODUCER, &epCfg); if (apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); CyFxAppErrorHandler (apiRetStatus); } /* Consumer endpoint configuration */ apiRetStatus = CyU3PSetEpConfig(BLADE_UART_EP_CONSUMER, &epCfg); if (apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); CyFxAppErrorHandler (apiRetStatus); } CyU3PMemSet((uint8_t *)&dmaCfg, 0, sizeof(dmaCfg)); dmaCfg.size = 16; dmaCfg.count = 10; dmaCfg.prodSckId = CY_U3P_UIB_SOCKET_PROD_2; dmaCfg.consSckId = CY_U3P_LPP_SOCKET_UART_CONS; dmaCfg.dmaMode = CY_U3P_DMA_MODE_BYTE; dmaCfg.notification = 0; dmaCfg.cb = 0; dmaCfg.prodHeader = 0; dmaCfg.prodFooter = 0; dmaCfg.consHeader = 0; dmaCfg.prodAvailCount = 0; apiRetStatus = CyU3PDmaChannelCreate(&glChHandlebladeRFUtoUART, CY_U3P_DMA_TYPE_AUTO, &dmaCfg); if (apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); CyFxAppErrorHandler(apiRetStatus); } dmaCfg.prodSckId = CY_U3P_LPP_SOCKET_UART_PROD; dmaCfg.consSckId = CY_U3P_UIB_SOCKET_CONS_2; apiRetStatus = CyU3PDmaChannelCreate(&glChHandlebladeRFUARTtoU, CY_U3P_DMA_TYPE_AUTO, &dmaCfg); if (apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); CyFxAppErrorHandler(apiRetStatus); } /* Flush the endpoint memory */ CyU3PUsbFlushEp(BLADE_UART_EP_PRODUCER); CyU3PUsbFlushEp(BLADE_UART_EP_CONSUMER); /* Set DMA channel transfer size */ apiRetStatus = CyU3PDmaChannelSetXfer(&glChHandlebladeRFUtoUART, BLADE_DMA_TX_SIZE); if (apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); CyFxAppErrorHandler(apiRetStatus); } apiRetStatus = CyU3PDmaChannelSetXfer(&glChHandlebladeRFUARTtoU, BLADE_DMA_TX_SIZE); if (apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); CyFxAppErrorHandler(apiRetStatus); } /* Set UART Tx and Rx transfer Size to infinite */ apiRetStatus = CyU3PUartTxSetBlockXfer(0xFFFFFFFF); if (apiRetStatus != CY_U3P_SUCCESS) { CyFxAppErrorHandler(apiRetStatus); } apiRetStatus = CyU3PUartRxSetBlockXfer(0xFFFFFFFF); if (apiRetStatus != CY_U3P_SUCCESS) { CyFxAppErrorHandler(apiRetStatus); } } static void UartBridgeStop(void) { CyU3PEpConfig_t epCfg; CyU3PReturnStatus_t apiRetStatus = CY_U3P_SUCCESS; /* Flush the endpoint memory */ CyU3PUsbFlushEp(BLADE_UART_EP_PRODUCER); CyU3PUsbFlushEp(BLADE_UART_EP_CONSUMER); /* Destroy the channel */ CyU3PDmaChannelDestroy(&glChHandlebladeRFUARTtoU); CyU3PDmaChannelDestroy(&glChHandlebladeRFUtoUART); /* Disable endpoints. */ CyU3PMemSet((uint8_t *)&epCfg, 0, sizeof (epCfg)); epCfg.enable = CyFalse; /* Producer endpoint configuration. */ apiRetStatus = CyU3PSetEpConfig(BLADE_UART_EP_PRODUCER, &epCfg); if (apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); CyFxAppErrorHandler (apiRetStatus); } apiRetStatus = CyU3PSetEpConfig(BLADE_UART_EP_CONSUMER, &epCfg); if (apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); CyFxAppErrorHandler (apiRetStatus); } CyU3PUartDeInit(); } /* This function starts the RF data transport mechanism. This is the second * interface of the first and only descriptor. */ static void NuandRFLinkStart(void) { uint16_t size = 0; CyU3PEpConfig_t epCfg; CyU3PDmaChannelConfig_t dmaCfg; CyU3PReturnStatus_t apiRetStatus = CY_U3P_SUCCESS; CyU3PUSBSpeed_t usbSpeed = CyU3PUsbGetSpeed(); NuandAllowSuspend(CyFalse); NuandGPIOReconfigure(CyTrue, CyTrue); CyU3PGpioSetValue(GPIO_SYS_RST, CyTrue); CyU3PGpioSetValue(GPIO_RX_EN, CyFalse); CyU3PGpioSetValue(GPIO_TX_EN, CyFalse); CyU3PGpioSetValue(GPIO_SYS_RST, CyFalse); apiRetStatus = NuandConfigureGpif(GPIF_CONFIG_RF_LINK); if (apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); CyFxAppErrorHandler(apiRetStatus); } /* Determine max packet size based on USB speed */ switch (usbSpeed) { case CY_U3P_FULL_SPEED: size = 64; break; case CY_U3P_HIGH_SPEED: size = 512; break; case CY_U3P_SUPER_SPEED: size = 1024; break; default: LOG_ERROR(usbSpeed); CyFxAppErrorHandler (CY_U3P_ERROR_FAILURE); break; } CyU3PMemSet ((uint8_t *)&epCfg, 0, sizeof (epCfg)); epCfg.enable = CyTrue; epCfg.epType = CY_U3P_USB_EP_BULK; epCfg.burstLen = (usbSpeed == CY_U3P_SUPER_SPEED ? 15 : 1); epCfg.streams = 0; epCfg.pcktSize = size; /* Producer endpoint configuration */ apiRetStatus = CyU3PSetEpConfig(BLADE_RF_SAMPLE_EP_PRODUCER, &epCfg); if (apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); CyFxAppErrorHandler (apiRetStatus); } /* Consumer endpoint configuration */ apiRetStatus = CyU3PSetEpConfig(BLADE_RF_SAMPLE_EP_CONSUMER, &epCfg); if (apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); CyFxAppErrorHandler (apiRetStatus); } CyU3PMemSet((uint8_t *)&dmaCfg, 0, sizeof(dmaCfg)); dmaCfg.size = size * 2; dmaCfg.count = 22; dmaCfg.prodSckId = BLADE_RF_SAMPLE_EP_PRODUCER_USB_SOCKET; dmaCfg.consSckId = CY_U3P_PIB_SOCKET_3; dmaCfg.dmaMode = CY_U3P_DMA_MODE_BYTE; dmaCfg.notification = 0; dmaCfg.cb = 0; dmaCfg.prodHeader = 0; dmaCfg.prodFooter = 0; dmaCfg.consHeader = 0; dmaCfg.prodAvailCount = 0; loopback_when_created = loopback; if (loopback) { dmaCfg.prodSckId = BLADE_RF_SAMPLE_EP_PRODUCER_USB_SOCKET; dmaCfg.consSckId = BLADE_RF_SAMPLE_EP_CONSUMER_USB_SOCKET; } apiRetStatus = CyU3PDmaChannelCreate(&glChHandleUtoP, CY_U3P_DMA_TYPE_AUTO, &dmaCfg); if (apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); CyFxAppErrorHandler(apiRetStatus); } if (!loopback) { dmaCfg.prodSckId = CY_U3P_PIB_SOCKET_0; dmaCfg.consSckId = BLADE_RF_SAMPLE_EP_CONSUMER_USB_SOCKET; apiRetStatus = CyU3PDmaChannelCreate(&glChHandlePtoU, CY_U3P_DMA_TYPE_AUTO, &dmaCfg); if (apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); CyFxAppErrorHandler(apiRetStatus); } } /* Flush the Endpoint memory */ CyU3PUsbFlushEp(BLADE_RF_SAMPLE_EP_PRODUCER); CyU3PUsbFlushEp(BLADE_RF_SAMPLE_EP_CONSUMER); /* Set DMA channel transfer size. */ apiRetStatus = CyU3PDmaChannelSetXfer (&glChHandleUtoP, BLADE_DMA_TX_SIZE); if (apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); CyFxAppErrorHandler(apiRetStatus); } if (!loopback) { apiRetStatus = CyU3PDmaChannelSetXfer (&glChHandlePtoU, BLADE_DMA_TX_SIZE); if (apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); CyFxAppErrorHandler(apiRetStatus); } } UartBridgeStart(); glAppMode = MODE_RF_CONFIG; } /* This function stops the slave FIFO loop application. This shall be called * whenever a RESET or DISCONNECT event is received from the USB host. The * endpoints are disabled and the DMA pipe is destroyed by this function. */ static void NuandRFLinkStop (void) { CyU3PEpConfig_t epCfg; CyU3PReturnStatus_t apiRetStatus = CY_U3P_SUCCESS; CyU3PGpioSetValue(GPIO_SYS_RST, CyTrue); CyU3PGpioSetValue(GPIO_RX_EN, CyFalse); CyU3PGpioSetValue(GPIO_TX_EN, CyFalse); /* Flush endpoint memory buffers */ CyU3PUsbFlushEp(BLADE_RF_SAMPLE_EP_PRODUCER); CyU3PUsbFlushEp(BLADE_RF_SAMPLE_EP_CONSUMER); /* Destroy the channels */ CyU3PDmaChannelDestroy(&glChHandleUtoP); if (!loopback_when_created) CyU3PDmaChannelDestroy(&glChHandlePtoU); /* Disable endpoints. */ CyU3PMemSet ((uint8_t *)&epCfg, 0, sizeof (epCfg)); epCfg.enable = CyFalse; /* Disable producer endpoint */ apiRetStatus = CyU3PSetEpConfig(BLADE_RF_SAMPLE_EP_PRODUCER, &epCfg); if (apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); CyFxAppErrorHandler(apiRetStatus); } /* Disable consumer endpoint */ apiRetStatus = CyU3PSetEpConfig(BLADE_RF_SAMPLE_EP_CONSUMER, &epCfg); if (apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); CyFxAppErrorHandler(apiRetStatus); } /* Reset the GPIF */ apiRetStatus = NuandConfigureGpif(GPIF_CONFIG_DISABLED); if (apiRetStatus != CY_U3P_SUCCESS) { LOG_ERROR(apiRetStatus); CyFxAppErrorHandler(apiRetStatus); } UartBridgeStop(); NuandAllowSuspend(CyTrue); glAppMode = MODE_NO_CONFIG; } static uint8_t RF_status_bits[] = { [BLADE_RF_SAMPLE_EP_PRODUCER] = 0, [BLADE_RF_SAMPLE_EP_CONSUMER] = 0, [BLADE_UART_EP_PRODUCER] = 0, [BLADE_UART_EP_CONSUMER] = 0, }; CyU3PReturnStatus_t NuandRFLinkResetEndpoint(uint8_t endpoint) { CyU3PReturnStatus_t status = CY_U3P_ERROR_BAD_ARGUMENT; switch(endpoint) { case BLADE_RF_SAMPLE_EP_PRODUCER: status = ClearDMAChannel(endpoint, &glChHandleUtoP, BLADE_DMA_TX_SIZE); break; case BLADE_RF_SAMPLE_EP_CONSUMER: if (!loopback_when_created) { status = ClearDMAChannel(endpoint, &glChHandlePtoU, BLADE_DMA_TX_SIZE); } else { status = CY_U3P_SUCCESS; } break; case BLADE_UART_EP_PRODUCER: status = ClearDMAChannel(endpoint, &glChHandlebladeRFUtoUART, BLADE_DMA_TX_SIZE); break; case BLADE_UART_EP_CONSUMER: status = ClearDMAChannel(endpoint, &glChHandlebladeRFUARTtoU, BLADE_DMA_TX_SIZE); break; } return status; } CyBool_t NuandRFLinkHaltEndpoint(CyBool_t set, uint16_t endpoint) { CyBool_t isHandled = CyFalse; CyU3PReturnStatus_t status = CY_U3P_ERROR_BAD_ARGUMENT; switch(endpoint) { case BLADE_RF_SAMPLE_EP_PRODUCER: case BLADE_RF_SAMPLE_EP_CONSUMER: case BLADE_UART_EP_PRODUCER: case BLADE_UART_EP_CONSUMER: isHandled = !set; RF_status_bits[endpoint] = set; status = NuandRFLinkResetEndpoint(endpoint); break; } if (status == CY_U3P_SUCCESS) { CyU3PUsbStall (endpoint, CyFalse, CyTrue); if(!set) { CyU3PUsbAckSetup (); } } return isHandled && status == CY_U3P_SUCCESS; } CyBool_t NuandRFLinkHalted(uint16_t endpoint, uint8_t * data) { CyBool_t isHandled = CyFalse; switch(endpoint) { case BLADE_RF_SAMPLE_EP_PRODUCER: case BLADE_RF_SAMPLE_EP_CONSUMER: case BLADE_UART_EP_PRODUCER: case BLADE_UART_EP_CONSUMER: *data = RF_status_bits[endpoint]; isHandled = CyTrue; break; } return isHandled; } const struct NuandApplication NuandRFLink = { .start = NuandRFLinkStart, .stop = NuandRFLinkStop, .halt_endpoint = NuandRFLinkHaltEndpoint, .halted = NuandRFLinkHalted, .reset_endpoint = NuandRFLinkResetEndpoint, }; bladeRF-2024.05/fx3_firmware/src/rf.h000066400000000000000000000025421457144405000171370ustar00rootroot00000000000000/* * Copyright (c) 2013 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef _RF_H_ #define _RF_H_ #include "bladeRF.h" extern const struct NuandApplication NuandRFLink; /* Enable FW sample loopback */ void NuandRFLinkLoopBack(int); /* Check if FW sample loopback is enabled */ int NuandRFLinkGetLoopBack(); #endif /* _RF_H_ */ bladeRF-2024.05/fx3_firmware/src/spi_flash_lib.c000066400000000000000000000167251457144405000213310ustar00rootroot00000000000000/* * Copyright (c) 2013 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include "cyu3system.h" #include "cyu3os.h" #include "cyu3dma.h" #include "cyu3error.h" #include "cyu3usb.h" #include "cyu3uart.h" #include "bladeRF.h" #include "cyu3gpif.h" #include "cyu3pib.h" #include "cyu3gpio.h" #include "pib_regs.h" #include "cyu3spi.h" #include "spi_flash_lib.h" #include "flash.h" #define THIS_FILE LOGGER_ID_SPI_FLASH_LIB_C /* SPI initialization for application. */ CyU3PReturnStatus_t CyFxSpiInit(void) { CyU3PSpiConfig_t spiConfig; CyU3PReturnStatus_t status = CY_U3P_SUCCESS; /* Start the SPI module and configure the master. */ status = CyU3PSpiInit(); if (status != CY_U3P_SUCCESS) { return status; } /* Start the SPI master block. Run the SPI clock at 8MHz * and configure the word length to 8 bits. Also configure * the slave select using FW. */ CyU3PMemSet((uint8_t *)&spiConfig, 0, sizeof(spiConfig)); spiConfig.isLsbFirst = CyFalse; spiConfig.cpol = CyTrue; spiConfig.ssnPol = CyFalse; spiConfig.cpha = CyTrue; spiConfig.leadTime = CY_U3P_SPI_SSN_LAG_LEAD_HALF_CLK; spiConfig.lagTime = CY_U3P_SPI_SSN_LAG_LEAD_HALF_CLK; spiConfig.ssnCtrl = CY_U3P_SPI_SSN_CTRL_FW; spiConfig.clock = 8000000; spiConfig.wordLen = 8; status = CyU3PSpiSetConfig(&spiConfig, NULL); return status; } CyU3PReturnStatus_t CyFxSpiDeInit() { return CyU3PSpiDeInit(); } /* Wait for the status response from the SPI flash. */ CyU3PReturnStatus_t CyFxSpiWaitForStatus(void) { uint8_t buf[2], rd_buf[2]; CyU3PReturnStatus_t status = CY_U3P_SUCCESS; /* Wait for status response from SPI flash device. */ do { buf[0] = 0x06; /* Write enable command. */ CyU3PSpiSetSsnLine(CyFalse); status = CyU3PSpiTransmitWords (buf, 1); CyU3PSpiSetSsnLine(CyTrue); if (status != CY_U3P_SUCCESS) { LOG_ERROR(status); return status; } buf[0] = 0x05; /* Read status command */ CyU3PSpiSetSsnLine(CyFalse); status = CyU3PSpiTransmitWords(buf, 1); if (status != CY_U3P_SUCCESS) { LOG_ERROR(status); CyU3PSpiSetSsnLine(CyTrue); return status; } status = CyU3PSpiReceiveWords(rd_buf, 2); CyU3PSpiSetSsnLine(CyTrue); if(status != CY_U3P_SUCCESS) { LOG_ERROR(status); return status; } } while ((rd_buf[0] & 1) || (!(rd_buf[0] & 0x2))); return CY_U3P_SUCCESS; } CyBool_t spiFastRead = CyFalse; void CyFxSpiFastRead(CyBool_t v) { spiFastRead = v; } /* SPI read / write for programmer application. */ CyU3PReturnStatus_t CyFxSpiTransfer(uint16_t pageAddress, uint16_t byteCount, uint8_t *buffer, CyBool_t isRead, CyBool_t isOtp) { uint8_t location[5]; uint32_t byteAddress = 0; uint16_t pageCount = (byteCount / FLASH_PAGE_SIZE); CyU3PReturnStatus_t status = CY_U3P_SUCCESS; if (byteCount == 0) { return CY_U3P_SUCCESS; } if ((byteCount % FLASH_PAGE_SIZE) != 0) { return CY_U3P_ERROR_NOT_SUPPORTED; } byteAddress = pageAddress * FLASH_PAGE_SIZE; while (pageCount != 0) { location[1] = (byteAddress >> 16) & 0xFF; /* MS byte */ location[2] = (byteAddress >> 8) & 0xFF; location[3] = byteAddress & 0xFF; /* LS byte */ location[4] = 0; /* Dummy byte for Winbond chip */ if (isRead) { /* Read command. */ if (isOtp && NuandGetSPIManufacturer() == 0xEF) { location[0] = 0x48; } else { location[0] = 0x03; } if (!spiFastRead) { status = CyFxSpiWaitForStatus(); if (status != CY_U3P_SUCCESS) return status; } CyU3PSpiSetSsnLine(CyFalse); status = CyU3PSpiTransmitWords(location, location[0] == 0x03 ? 4 : 5); if (status != CY_U3P_SUCCESS) { LOG_ERROR(status); CyU3PSpiSetSsnLine (CyTrue); return status; } status = CyU3PSpiReceiveWords(buffer, FLASH_PAGE_SIZE); if (status != CY_U3P_SUCCESS) { CyU3PSpiSetSsnLine(CyTrue); return status; } CyU3PSpiSetSsnLine(CyTrue); } else { /* Write */ /* Write command */ if (isOtp && NuandGetSPIManufacturer() == 0xEF) { location[0] = 0x42; } else { location[0] = 0x02; } status = CyFxSpiWaitForStatus(); if (status != CY_U3P_SUCCESS) return status; CyU3PSpiSetSsnLine(CyFalse); status = CyU3PSpiTransmitWords(location, 4); if (status != CY_U3P_SUCCESS) { LOG_ERROR(status); CyU3PSpiSetSsnLine(CyTrue); return status; } status = CyU3PSpiTransmitWords(buffer, FLASH_PAGE_SIZE); if (status != CY_U3P_SUCCESS) { CyU3PSpiSetSsnLine(CyTrue); return status; } CyU3PSpiSetSsnLine(CyTrue); } byteAddress += FLASH_PAGE_SIZE; buffer += FLASH_PAGE_SIZE; pageCount--; } return CY_U3P_SUCCESS; } /* Function to erase SPI flash sectors. */ CyU3PReturnStatus_t CyFxSpiEraseSector(CyBool_t isErase, uint8_t sector) { uint32_t temp = 0; uint8_t location[4], rdBuf[2]; CyU3PReturnStatus_t status = CY_U3P_SUCCESS; location[0] = 0x06; /* Write enable. */ CyU3PSpiSetSsnLine (CyFalse); status = CyU3PSpiTransmitWords (location, 1); CyU3PSpiSetSsnLine (CyTrue); if (status != CY_U3P_SUCCESS) return status; if (isErase) { location[0] = 0xD8; /* Sector erase. */ temp = sector * 0x10000; location[1] = (temp >> 16) & 0xFF; location[2] = (temp >> 8) & 0xFF; location[3] = temp & 0xFF; CyU3PSpiSetSsnLine (CyFalse); status = CyU3PSpiTransmitWords (location, 4); CyU3PSpiSetSsnLine (CyTrue); } location[0] = 0x05; /* RDSTATUS */ do { CyU3PSpiSetSsnLine (CyFalse); status = CyU3PSpiTransmitWords (location, 1); status = CyU3PSpiReceiveWords(rdBuf, 1); CyU3PSpiSetSsnLine (CyTrue); } while(rdBuf[0] & 1); return status; } bladeRF-2024.05/fx3_firmware/src/spi_flash_lib.h000066400000000000000000000027411457144405000213270ustar00rootroot00000000000000/* * Copyright (c) 2013 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef _SPI_FLASH_LIB_H_ #define _SPI_FLASH_LIB_H_ #define FLASH_PAGE_SIZE 0x100 /* SPI Page size to be used for transfers. */ void CyFxSpiFastRead(CyBool_t v); CyU3PReturnStatus_t CyFxSpiInit(); CyU3PReturnStatus_t CyFxSpiDeInit(); CyU3PReturnStatus_t CyFxSpiTransfer( uint16_t pageAddress, uint16_t byteCount, uint8_t *buffer, CyBool_t isRead, CyBool_t isOtp); #endif bladeRF-2024.05/fx3_firmware/src/version.h.in000066400000000000000000000003751457144405000206240ustar00rootroot00000000000000#ifndef VERSION_H__ #define VERSION_H__ #define FIRMWARE_VERSION "@VERSION@" #define FIRMWARE_VERSION_MAJOR @VERSION_INFO_MAJOR@ #define FIRMWARE_VERSION_MINOR @VERSION_INFO_MINOR@ #define FIRMWARE_VERSION_PATCH @VERSION_INFO_PATCH@ #endif bladeRF-2024.05/fx3_firmware/util/000077500000000000000000000000001457144405000165425ustar00rootroot00000000000000bladeRF-2024.05/fx3_firmware/util/elf2img/000077500000000000000000000000001457144405000200675ustar00rootroot00000000000000bladeRF-2024.05/fx3_firmware/util/elf2img/CMakeLists.txt000066400000000000000000000007111457144405000226260ustar00rootroot00000000000000################################################################################ # Build for FX3 elf2img utility ################################################################################ cmake_minimum_required(VERSION 3.5) project(elf2img C) if(WIN32) set(EXE ".exe") else() unset(EXE) endif() if(NOT FX3_ELF2IMG) message("FX3_ELF2IMG must be defined as the location to elf2img.c") endif() add_executable(elf2img${EXE} ${FX3_ELF2IMG}) bladeRF-2024.05/hdl/000077500000000000000000000000001457144405000137405ustar00rootroot00000000000000bladeRF-2024.05/hdl/CHANGELOG000066400000000000000000000273421457144405000151620ustar00rootroot00000000000000================================================================================ bladeRF HDL Change Log Summary For more detailed information, please see the git change log and issue tracker hosted on GitHub: https://github.com/nuand/bladeRF ================================================================================ -------------------------------- v0.15.3 (2023-08-09) -------------------------------- Addresses an issue where the META state was not transitioning correctly when only channel 1 (ch1) was enabled. The fix ensures that the META state now correctly exits the META_WRITE state and enters the META_DOWNCOUNT state when ch1 is exclusively enabled. Fixes: * hdl: fifo_writer: proper META state transition for exclusive ch1 usage -------------------------------- v0.15.2 (2023-06-26) -------------------------------- Corrects RX timestamp when MIMO enabled. Fixes: * hdl: MIMO RX timestamp correction -------------------------------- v0.15.1 (2023-04-03) -------------------------------- Fixes timestamps and signal generator when 8bit format enabled. Fixes: * hdl: 8bit support for signal_generator.vhd * hdl: 8bit RX timestamp correction -------------------------------- v0.15.0 (2023-02-13) -------------------------------- Added 8bit mode feature necessary for oversampling on the bladeRF 2.0 micro Fixes: * hdl: rx-adsb: update rx-adsb and bladerf-adsb to handle packet_mode Features: * hdl: 8bit mode added -------------------------------- v0.14.0 (2021-10-01) -------------------------------- Fix several bugs in packet mode buffering mechanism, and add Wishbone master core as NiOS peripheral. Add support for bladeRF 2.0 micro xA5. Fixes: * hdl: fix RX halting issue in packet mode * hdl: ensure meta_fifos never overflow * hdl: disconnect nios_ss_n bus from GPIO(20 downto 19) Features: * hdl: add Wishbone master to bladeRF 2.0 micro's bladeRF-hosted revision * hdl: add Wishbone master IP NiOS peripheral -------------------------------- v0.12.0 (2020-08-01) -------------------------------- This version adds short packet states to the GPIF allowing the FPGA to exchange variable length packets with the FX3. Features: * bladerf: added support for short packets -------------------------------- v0.11.1 (2020-09-12) -------------------------------- This version includes a few bug fixes that mostly affect meta mode. Fixes: * hdl: meta_time_go clear if in WAIT state for longer than a cycle * hdl: avoid consecutive data_valid on adc_stream -------------------------------- v0.11.0 (2019-05-05) -------------------------------- This version improves buffering on the FPGA, and extends quicktune's controls over the XB gpio register. Fixes: * hdl: buffer sizes and checks * hdl: misc fixes Features: * bladerf: quicktune controls XB gpio register -------------------------------- v0.10.2 (2018-12-17) -------------------------------- This version improves the FPGA-based tuning support on the bladeRF2, adding quick tuning, a standby state (initialized but idle), and defining user space for API commands. Fixes: * bladerf2: retune2: fix RF path selection in adi_rfspdt_select * bladerf2: FPGA tuning: invalidate RFIC frequency on quick tune * bladerf2: FPGA tuning: Fix GAIN command on TX channels * bladerf2: FPGA tuning: Fix TX sample rate being wrong * bladerf2: FPGA tuning: Fix GAINMODE command * bladerf2: FPGA tuning: Fix implosion when state change OFF->STANDBY * build: fix SignalTap variable name * build: fix patch ordering in fpga/ip/adi Features: * bladerf2: FPGA tuning: add FASTLOCK command * bladerf2: FPGA tuning: add standby (warm idle) state * bladerf2: FPGA tuning: define user-defined command space -------------------------------- v0.10.1 (2018-12-06) -------------------------------- This version is part of development series of changes, not an official release. This version adds FPGA-based tuning for the bladeRF2. This tuning mode has the following advantages over host-based tuning: * Faster command processing: the Nios II processor on the FPGA handles the RFIC control directly, instead of relaying SPI commands between the host and RFIC. This improves turnaround time slightly. * State preservation: the device itself maintains the RFIC state, so closing and re-opening the device no longer requires reinitialization. In practice, this is about a 7.5x speedup when doing a "warm" open of an already-initialized device. * Headless operation: more and improved host-based functionalities are available in headless mode Features: * bladerf2: add FPGA-based tuning * bladerf2: increase Nios II RAM footprint from 32 kB to 128 kB -------------------------------- v0.10.0 (2018-11-26) -------------------------------- This version is part of development series of changes, not an official release. This version adds quick tuning on bladeRF2 devices. Fixes: * build: add -S option to specify fitter seed * nios: Fix Eclipse project, update docs * build: add device and device family to qsys scripts * build: fix escaping on Windows * fpga_common: check return val in lms_set_frequency (#691) Features: * bladerf2: add fastlock functions, increase Nios RAM from 16 to 32 kB * bladerf2: implement pkt_retune2 packet format for quick tuning -------------------------------- v0.9.0 (2018-10-26) -------------------------------- * bladeRF: hosted: fix typo in toggle_led1 * bladeRF: move AGC SPI driver into 80 MHz clock domain (fixes #640) (#642) * bladeRF: timing improvements (fixes #395) (#652) * build: Cygwin compatibility (#660) * bladeRF: adsb: adjust build and FIFO type to match bladeRF-micro impl * bladeRF-micro: adsb: implement support for ADS-B core on bladeRF micro * fx3_gpif: clean up metadata flags field in GPIF * fifo_writer: add metadata flags for miniexp{1,2} IO pin status * nios: clarify README.md * bladeRF-micro: add false path constraint for pwr_status (#681) * bladeRF-micro: weak pull-up on fx3_uart_rxd (fixes #679) (#683) -------------------------------- v0.8.0 (2018-09-05) -------------------------------- * bladeRF: Fix nios_gpio assignment overlap for AGC_EN * bladeRF: Fix bug in AGC band selection -------------------------------- v0.7.3 (2018-08-07) -------------------------------- * Initial release with bladeRF Micro support * bladeRF Micro: Update pin-outs and constraints for Rev1.1+ PCBs * bladeRF Micro: Latch TX data going to the RFIC's DAC -------------------------------- v0.7.2 (2018-03-26) -------------------------------- This version is part of development series of changes, not an official release. * Redesign build system to support multiple product models * Added support for the bladeRF Micro * Refactoring, bug fixes, and other misc. improvements -------------------------------- v0.7.1 (2017-12-07) -------------------------------- * Minor fix-ups -------------------------------- v0.7.0 (2017-07-02) -------------------------------- * Added support for the Automatic Gain Control -------------------------------- v0.6.0 (2015-05-25) -------------------------------- * Added TRX synchronization trigger functionality via J71-4. -------------------------------- v0.5.0 (2015-11-23) -------------------------------- * Added support for 1 PPS and 10 MHz input to tame VCTCXO * Added FIFO between TX and RX for digital loopback mode for clock synchronization and additional sample buffering. -------------------------------- v0.4.1 (2015-09-01) -------------------------------- * Fixed bug in XB GPIO masked writes introduced in v0.4.0 -------------------------------- v0.4.0 (2015-08-27) -------------------------------- * Added support for multi-write of TX and RX NINT/NFRAC registers - LMS6002D PLL registers are written atomically to allow for slightly cleaner retuning. -------------------------------- v0.3.5 (2015-08-25) -------------------------------- * Build and simulation fixes -------------------------------- v0.3.4 (2015-07-24) -------------------------------- * Fixed a bug where multiple TX NOW bursts would accumulate samples in the RX FIFO and was causing a slip in metadata headers versus samples. * Modified sample FIFOs to have under/overflow checking * Register FIFO reader output * Addressed some warnings about latches. * Build fixes for atsc_tx image -------------------------------- v0.3.3 (2015-06-30) -------------------------------- * Addressed timing constraint issue by reducing LMS SPI clock rate. * Renamed SPI controller module -------------------------------- v0.3.2 (2015-06-23) -------------------------------- * Fixed VCTCXO readback -------------------------------- v0.3.1 (2015-06-17) -------------------------------- * Added faster, custom SPI block for LMS6 communication. - This custom block removes large gaps of time between CSn and the clocking of data, as well as gaps of time between bytes. v0.3.0 (2015-06-17) -------------------------------- This version is part of development series of changes, not an official release. * Added support for the following packet formats. - pkt_8x8 - pkt_8x16 - pkt_8x32 - pkt_8x64 - pkt_32x32 For more information about these packet formats, see: bladeRF/hdl/fpga/ip/altera/nios_system/software/bladeRF_nios/README.md v0.2.0 (2015-06-17) -------------------------------- This version is part of development series of changes, not an official release. * Build updated for Quartus II 15.0 - Earlier Quartus versions are not compatible. * Redesigned control/configuration program running on NIOS II - This introduces support for different packet formats for NIOS II <-> host communication. - Readability and performance improvements * The time tamers have been separated and now have programmable interrupts. * Added tuning support: - The LMS6 VCOCAP search can now be performed in the NIOS, cutting out overhead incurred when performing all register accesses via the host. - A "Quick tune" option allows the LMS6 to be tuned using previously determined settings, instead of running the full tuning algorithm. - Introduced scheduled retune support v0.1.2 (2014-10-22) -------------------------------- * Fixed issues with TX_NOW and dropped messages. This fixes issues #334 and #335. v0.1.1 (2014-10-22) -------------------------------- * Fixed timing errors that caused failures in SPI communication with the LMS6002D. This addresses the LMS calbration failure assocaited with issue #269. v0.1.0 (2014-10-21) -------------------------------- * Backwards-compatible features introduced: - Added option to divide sample counter by 2. - Added "TX_NOW" * Fixes: - Addessed data/timestamp slipping - Fixed readback of current timestamp value - Send zero samples TX module to mitigate effect of default output power from the LMS after intialization. v0.0.6 (2014-07-20) -------------------------------- * Fixed FPGA correction for gain/phase v0.0.5 (2014-06-21) -------------------------------- * Added expansion board support for XB-200 v0.0.4 (2014-05-07) -------------------------------- * Added metadata timestamp support - Added RX/TX metadata FIFOs * Added FPGA digital loopback v0.0.3 (2014-02-01) -------------------------------- * Tweaked constraints for FX3 interface drive strength * Add 32-bit counter mode for RX performance testing v0.0.2 (2014-01-14) -------------------------------- * Tweaked constraints for the FX3 interface * Fixed SPI/UART signal contention issue * Fixed phase range for IQ correction block v0.0.1 (2013-12-28) -------------------------------- * Updated to use Quartus 13.1 tools - Renamed OpenCores I2C Qsys core to not conflict * Introduced faster UART bridge (4Mbps versus 115.2kbps) * Added IQ correction block * Added FPGA version numbering * Made FX3 GPIF FSM more maintainable bladeRF-2024.05/hdl/README.md000066400000000000000000000150511457144405000152210ustar00rootroot00000000000000# bladeRF HDL Source # The Cyclone IV FPGA is at the heart of the bladeRF. It interfaces to the Cypress FX3, Lime Micro LMS6002D RF transceiver, Si5338 clock generator chip, and VCTCXO trim DAC. It has an input to read NMEA from a GPS as well as a 1pps input for time synchronization of signals and has a reference input for a reference clock to tame the VCTCXO. Lastly, it connects directly to the expansion header for controlling GPIO or any other interfaces that may reside on the expansion board. The HDL is separated out into two different sections: | Directory | Description | | :-------- | :-------------------------------------------------------------------- | | fpga | Source HDL in the form of IP blocks or platform specific top levels | | quartus | Specific files for Quartus Prime project creation and building | IP, as it is added to the repository, falls under the category of who created the IP. Some IP is created by Intel FPGA (formerly Altera) tools and remains in an `altera` directory. Some has been written by Nuand or has been downloaded from OpenCores. These blocks should be seen as independent from the platform and, essentially, building blocks for the entire platform. Currently, the only platform we have is bladeRF. As more platforms come out, more top levels will be created but the same IP should be able to be used with any of those platforms. ## Pre-compiled FPGA Binaries ## Some FPGA binaries are available for [download][download]. Please note the md5 hash as well as the git commit hash. [download]: https://www.nuand.com/fpga/ (nuand/FPGA Images) ## Required Software ## We use an [Intel (Altera)][intel] [Cyclone IV E FPGA][cive]. The size of the FPGA is the only difference between the x40 and x115 models. Intel provides their [Quartus Prime][quartus] software for synthesizing designs for their FPGAs. The Lite Edition is free of charge, but not open source, and may require registering on their site to download the software. **Important Note:** Be sure to download and install [Quartus Prime version 17.1][quartus], which the bladeRF project files are based upon. Updates to Quartus Prime are not guaranteed to be reverse-compatible with earlier Quartus versions, nor will future versions necessarily be reverse-compatible. [intel]: https://www.altera.com/ (Altera, part of the Intel Programmable Solutions Group) [quartus]: https://dl.altera.com/17.1/?edition=lite (Quartus Prime Lite Edition v17.1) [cive]: https://www.altera.com/products/fpga/cyclone-series/cyclone-iv/overview.html ## HDL Structure ## Since the FPGA is connected and soldered down to the board, it makes sense to have a single top level which defines where the pins go, their IO levels and their genera directionality. We use a single `bladerf.vhd` top level to define a VHDL entity called `bladerf` that defines these pins. We realize people will want to change the internal guts of the FPGA for their own programmable logic reasons. Because of this, we decided to differentiate the implementations using a feature of the Quartus Prime project file called Revisions. Revisions can take a base design (top level entity, a part and pins) and duplicate that project, recording any source level changes you wish to make to the project. This way, a user must only create their own architecture that is the new implementation of the `bladerf` top level. This technique can be seen with the currently supported architectures: | Architecture | Description | | :------------ | :---------------------------------------------------------------------------------------------------------------- | | hosted | Listens for commands from the USB connection to perform operations or send/receive RF. | | atsc_tx | ATSC transmittter - Reads 4-bit ATSC symbols via USB and performs pilot insertion, filtering, and baseband shift. | ## Building the Project ## The Quartus Prime build tools supports TCL as a scripting language which we utilize to not only create the project file, but build the system without requiring the need of the GUI. Currently, the `build_bladerf.sh` performs some environment checks, builds the NIOS BSP and software, and then kicks off TCL scripts to build the FPGA image. To support multiple versions of Quartus Prime on the same machine and to ensure the environment is appropriately setup, please use the `nios2_command_shell.sh` script to get into an appropriate Quartus Prime environment. Note that this shell script is usually located in the `nios2eds` directory of your Quartus Prime install directory. Also note that this is the preferred method regardless of using Windows or Linux to build. If you're using pybombs, make sure you haven't run `setup_env.sh`, as it prevents `nios2_command_shell.sh` from working properly. 1. Take note of which Cyclone device you have. (The EP4CE40 is 40 kLE, and the EP4CE115 is 115 kLE.) You'll need this size below. 2. Enter the `quartus` directory 3. Execute, from inside an appropriate NIOS II command shell, `./build_bladerf.sh -h` to view the usage for the build script. Note the size and revision options. Also note any items you'll need to add to your PATH before continuing. 4. Execute, from inside an appropriate NIOS II command shell, `./build_bladerf.sh -s -r `, with the relevant size for your bladeRF, and the desired revision. This will create the NIOS system and software associated with the FPGA build needed by the internal RAM for execution. 5. The output of the build will be stored in a directory named in the form, `x-`. This directory will contain the bitstream, summaries, and reports. Note that there will be a _lot_ of information displayed from notes to critical warnings. Some of these are benign and others are, in fact, critical. ## Adding Signal Tap ## For advanced users who want to use Signal Tap internal logic analyzer in their design, the `build.tcl` file can be passed a `-stp` flag which will add the Signal Tap file to the project before building it: ``` quartus_sh -t ../build.tcl -rev hosted -size 115 -stp ../signaltap/debug_rx.stp ``` Note that to use Signal Tap with the Quartus Prime Lite Edition software, the TalkBack feature must be enabled. The build script tries to 'fake' this out by setting the TalkBack feature to be on, compiling the project, then turning it off immediately afterward. If this behavior is not desired, don't try to add a Signal Tap file to the project. bladeRF-2024.05/hdl/fpga/000077500000000000000000000000001457144405000146555ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/000077500000000000000000000000001457144405000152655ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/altera/000077500000000000000000000000001457144405000165355ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/altera/common_dcfifo/000077500000000000000000000000001457144405000213375ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/altera/common_dcfifo/common_dcfifo.vhd000066400000000000000000000253101457144405000246450ustar00rootroot00000000000000-- Copyright (c) 2017 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all; use ieee.math_real.all; package common_dcfifo_p is function compute_rdusedw_high( numwords : natural; width : natural; width_r : natural; add_usedw_msb : string ) return natural; function compute_wrusedw_high( numwords : natural; add_usedw_msb : string ) return natural; end package; package body common_dcfifo_p is function compute_rdusedw_high( numwords : natural; width : natural; width_r : natural; add_usedw_msb : string ) return natural is variable x : real := 0.0; variable y : real := 0.0; variable rv : natural := 0; begin x := real(numwords); if( width > width_r ) then y := real(width) / real(width_r); rv := integer(ceil(log2(x) + log2(y))) - 1; else -- Less or equal. If equal, log2(y) is 0 and the term goes away. y := real(width_r) / real(width); rv := integer(ceil(log2(x) - log2(y))) - 1; end if; if( add_usedw_msb = "on" or add_usedw_msb = "oN" or add_usedw_msb = "On" or add_usedw_msb = "ON" ) then rv := rv + 1; end if; return rv; end function; function compute_wrusedw_high( numwords : natural; add_usedw_msb : string ) return natural is variable rv : natural := 0; begin rv := integer(ceil(log2(real(numwords)))) - 1; if( add_usedw_msb = "on" or add_usedw_msb = "oN" or add_usedw_msb = "On" or add_usedw_msb = "ON" ) then rv := rv + 1; end if; return rv; end function; end package body; library ieee; use ieee.std_logic_1164.all; library altera_mf; use altera_mf.altera_mf_components.all; library work; use work.common_dcfifo_p.all; entity common_dcfifo is generic ( ADD_RAM_OUTPUT_REGISTER : string := "OFF"; ADD_USEDW_MSB_BIT : string := "OFF"; CLOCKS_ARE_SYNCHRONIZED : string := "FALSE"; DELAY_RDUSEDW : natural := 1; DELAY_WRUSEDW : natural := 1; INTENDED_DEVICE_FAMILY : string := "UNUSED"; LPM_NUMWORDS : natural := 4096; LPM_SHOWAHEAD : string := "ON"; LPM_WIDTH : natural := 32; LPM_WIDTH_R : natural := 32; OVERFLOW_CHECKING : string := "ON"; RDSYNC_DELAYPIPE : natural := 5; READ_ACLR_SYNCH : string := "ON"; UNDERFLOW_CHECKING : string := "ON"; USE_EAB : string := "ON"; WRITE_ACLR_SYNCH : string := "ON"; WRSYNC_DELAYPIPE : natural := 5 ); port ( aclr : in std_logic := '0'; data : in std_logic_vector(LPM_WIDTH-1 downto 0); rdclk : in std_logic; rdreq : in std_logic; wrclk : in std_logic; wrreq : in std_logic; q : out std_logic_vector(LPM_WIDTH_R-1 downto 0); rdempty : out std_logic; rdfull : out std_logic; rdusedw : out std_logic_vector(compute_rdusedw_high(LPM_NUMWORDS, LPM_WIDTH, LPM_WIDTH_R, ADD_USEDW_MSB_BIT) downto 0); wrempty : out std_logic; wrfull : out std_logic; wrusedw : out std_logic_vector(compute_wrusedw_high(LPM_NUMWORDS, ADD_USEDW_MSB_BIT) downto 0) --eccstatus : out std_logic_vector(1 downto 0) ); end entity; architecture arch of common_dcfifo is function valid_width_ratio( width : natural; width_r : natural ) return boolean is variable r : natural := 0; variable rv : boolean := false; begin if( width > width_r ) then r := width / width_r; else r := width_r / width; end if; case r is when 1 | 2 | 4 | 8 | 16 | 32 => rv := true; when others => rv := false; end case; return rv; end function; constant LPM_HINT : string := "UNUSED"; constant ENABLE_ECC : string := "FALSE"; begin -- ------------------------------------------------------------------------ -- Parameter checking. Should cause synthesis to error-out in Quartus. -- ------------------------------------------------------------------------ assert valid_width_ratio( LPM_WIDTH, LPM_WIDTH_R ) report "Invalid width ratio in mixed width DCFIFO!" severity failure; assert (LPM_NUMWORDS >= 4) report "Invalid FIFO depth (" & integer'image(LPM_NUMWORDS) & "). Must be >= 4." severity failure; -- ------------------------------------------------------------------------ -- MIXED WIDTH DCFIFO -- We could just always use a mixed width DCFIFO. It's legal to have -- the same input/output port widths in this mode, but (unconfirmed) -- it may use more resources (maybe?). -- ------------------------------------------------------------------------ mixed_fifo_gen : if( LPM_WIDTH /= LPM_WIDTH_R ) generate U_dcfifo_mixed_widths : dcfifo_mixed_widths generic map ( ADD_RAM_OUTPUT_REGISTER => ADD_RAM_OUTPUT_REGISTER, ADD_USEDW_MSB_BIT => ADD_USEDW_MSB_BIT, CLOCKS_ARE_SYNCHRONIZED => CLOCKS_ARE_SYNCHRONIZED, DELAY_RDUSEDW => DELAY_RDUSEDW, DELAY_WRUSEDW => DELAY_WRUSEDW, INTENDED_DEVICE_FAMILY => INTENDED_DEVICE_FAMILY, --ENABLE_ECC => ENABLE_ECC, LPM_NUMWORDS => LPM_NUMWORDS, LPM_SHOWAHEAD => LPM_SHOWAHEAD, LPM_WIDTH => LPM_WIDTH, LPM_WIDTH_R => LPM_WIDTH_R, LPM_WIDTHU => wrusedw'length, LPM_WIDTHU_R => rdusedw'length, OVERFLOW_CHECKING => OVERFLOW_CHECKING, RDSYNC_DELAYPIPE => RDSYNC_DELAYPIPE, READ_ACLR_SYNCH => READ_ACLR_SYNCH, UNDERFLOW_CHECKING => UNDERFLOW_CHECKING, USE_EAB => USE_EAB, WRITE_ACLR_SYNCH => WRITE_ACLR_SYNCH, WRSYNC_DELAYPIPE => WRSYNC_DELAYPIPE, LPM_HINT => LPM_HINT, LPM_TYPE => "dcfifo_mixed_widths" ) port map ( aclr => aclr, data => data, rdclk => rdclk, rdreq => rdreq, wrclk => wrclk, wrreq => wrreq, q => q, rdempty => rdempty, rdfull => rdfull, rdusedw => rdusedw, wrempty => wrempty, wrfull => wrfull, wrusedw => wrusedw --eccstatus => eccstatus ); end generate; -- ------------------------------------------------------------------------ -- DCFIFO -- When read/write port widths are equal. -- ------------------------------------------------------------------------ fifo_gen : if( LPM_WIDTH = LPM_WIDTH_R ) generate U_dcfifo : dcfifo generic map ( ADD_RAM_OUTPUT_REGISTER => ADD_RAM_OUTPUT_REGISTER, ADD_USEDW_MSB_BIT => ADD_USEDW_MSB_BIT, CLOCKS_ARE_SYNCHRONIZED => CLOCKS_ARE_SYNCHRONIZED, DELAY_RDUSEDW => DELAY_RDUSEDW, DELAY_WRUSEDW => DELAY_WRUSEDW, INTENDED_DEVICE_FAMILY => INTENDED_DEVICE_FAMILY, --ENABLE_ECC => ENABLE_ECC, LPM_NUMWORDS => LPM_NUMWORDS, LPM_SHOWAHEAD => LPM_SHOWAHEAD, LPM_WIDTH => LPM_WIDTH, LPM_WIDTHU => wrusedw'length, OVERFLOW_CHECKING => OVERFLOW_CHECKING, RDSYNC_DELAYPIPE => RDSYNC_DELAYPIPE, READ_ACLR_SYNCH => READ_ACLR_SYNCH, UNDERFLOW_CHECKING => UNDERFLOW_CHECKING, USE_EAB => USE_EAB, WRITE_ACLR_SYNCH => WRITE_ACLR_SYNCH, WRSYNC_DELAYPIPE => WRSYNC_DELAYPIPE, LPM_HINT => LPM_HINT, LPM_TYPE => "dcfifo" ) port map ( aclr => aclr, data => data, rdclk => rdclk, rdreq => rdreq, wrclk => wrclk, wrreq => wrreq, q => q, rdempty => rdempty, rdfull => rdfull, rdusedw => rdusedw, wrempty => wrempty, wrfull => wrfull, wrusedw => wrusedw --eccstatus => eccstatus ); end generate; end architecture; bladeRF-2024.05/hdl/fpga/ip/altera/fx3_pll/000077500000000000000000000000001457144405000201045ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/altera/fx3_pll/fx3_pll.ppf000066400000000000000000000007211457144405000221620ustar00rootroot00000000000000 bladeRF-2024.05/hdl/fpga/ip/altera/fx3_pll/fx3_pll.qip000066400000000000000000000005271457144405000221720ustar00rootroot00000000000000set_global_assignment -name IP_TOOL_NAME "ALTPLL" set_global_assignment -name IP_TOOL_VERSION "16.0" set_global_assignment -name IP_GENERATED_DEVICE_FAMILY "{Cyclone IV E}" set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "fx3_pll.vhd"] set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "fx3_pll.ppf"] bladeRF-2024.05/hdl/fpga/ip/altera/fx3_pll/fx3_pll.vhd000066400000000000000000000360531457144405000221650ustar00rootroot00000000000000-- megafunction wizard: %ALTPLL% -- GENERATION: STANDARD -- VERSION: WM1.0 -- MODULE: altpll -- ============================================================ -- File Name: fx3_pll.vhd -- Megafunction Name(s): -- altpll -- -- Simulation Library Files(s): -- -- ============================================================ -- ************************************************************ -- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! -- -- 16.0.0 Build 211 04/27/2016 SJ Lite Edition -- ************************************************************ --Copyright (C) 1991-2016 Altera Corporation. All rights reserved. --Your use of Altera Corporation's design tools, logic functions --and other software and tools, and its AMPP partner logic --functions, and any output files from any of the foregoing --(including device programming or simulation files), and any --associated documentation or information are expressly subject --to the terms and conditions of the Altera Program License --Subscription Agreement, the Altera Quartus Prime License Agreement, --the Altera MegaCore Function License Agreement, or other --applicable license agreement, including, without limitation, --that your use is for the sole purpose of programming logic --devices manufactured by Altera and sold by Altera or its --authorized distributors. Please refer to the applicable --agreement for further details. LIBRARY ieee; USE ieee.std_logic_1164.all; LIBRARY altera_mf; USE altera_mf.all; ENTITY fx3_pll IS PORT ( areset : IN STD_LOGIC := '0'; inclk0 : IN STD_LOGIC := '0'; c0 : OUT STD_LOGIC ; locked : OUT STD_LOGIC ); END fx3_pll; ARCHITECTURE SYN OF fx3_pll IS SIGNAL sub_wire0 : STD_LOGIC ; SIGNAL sub_wire1 : STD_LOGIC_VECTOR (1 DOWNTO 0); SIGNAL sub_wire2_bv : BIT_VECTOR (0 DOWNTO 0); SIGNAL sub_wire2 : STD_LOGIC_VECTOR (0 DOWNTO 0); SIGNAL sub_wire3 : STD_LOGIC_VECTOR (4 DOWNTO 0); SIGNAL sub_wire4 : STD_LOGIC ; SIGNAL sub_wire5 : STD_LOGIC ; COMPONENT altpll GENERIC ( bandwidth_type : STRING; clk0_divide_by : NATURAL; clk0_duty_cycle : NATURAL; clk0_multiply_by : NATURAL; clk0_phase_shift : STRING; compensate_clock : STRING; inclk0_input_frequency : NATURAL; intended_device_family : STRING; lpm_hint : STRING; lpm_type : STRING; operation_mode : STRING; pll_type : STRING; port_activeclock : STRING; port_areset : STRING; port_clkbad0 : STRING; port_clkbad1 : STRING; port_clkloss : STRING; port_clkswitch : STRING; port_configupdate : STRING; port_fbin : STRING; port_inclk0 : STRING; port_inclk1 : STRING; port_locked : STRING; port_pfdena : STRING; port_phasecounterselect : STRING; port_phasedone : STRING; port_phasestep : STRING; port_phaseupdown : STRING; port_pllena : STRING; port_scanaclr : STRING; port_scanclk : STRING; port_scanclkena : STRING; port_scandata : STRING; port_scandataout : STRING; port_scandone : STRING; port_scanread : STRING; port_scanwrite : STRING; port_clk0 : STRING; port_clk1 : STRING; port_clk2 : STRING; port_clk3 : STRING; port_clk4 : STRING; port_clk5 : STRING; port_clkena0 : STRING; port_clkena1 : STRING; port_clkena2 : STRING; port_clkena3 : STRING; port_clkena4 : STRING; port_clkena5 : STRING; port_extclk0 : STRING; port_extclk1 : STRING; port_extclk2 : STRING; port_extclk3 : STRING; self_reset_on_loss_lock : STRING; width_clock : NATURAL ); PORT ( areset : IN STD_LOGIC ; inclk : IN STD_LOGIC_VECTOR (1 DOWNTO 0); clk : OUT STD_LOGIC_VECTOR (4 DOWNTO 0); locked : OUT STD_LOGIC ); END COMPONENT; BEGIN sub_wire2_bv(0 DOWNTO 0) <= "0"; sub_wire2 <= To_stdlogicvector(sub_wire2_bv); sub_wire0 <= inclk0; sub_wire1 <= sub_wire2(0 DOWNTO 0) & sub_wire0; sub_wire4 <= sub_wire3(0); c0 <= sub_wire4; locked <= sub_wire5; altpll_component : altpll GENERIC MAP ( bandwidth_type => "AUTO", clk0_divide_by => 1, clk0_duty_cycle => 50, clk0_multiply_by => 1, clk0_phase_shift => "-500", compensate_clock => "CLK0", inclk0_input_frequency => 10000, intended_device_family => "Cyclone IV E", lpm_hint => "CBX_MODULE_PREFIX=fx3_pll", lpm_type => "altpll", operation_mode => "SOURCE_SYNCHRONOUS", pll_type => "AUTO", port_activeclock => "PORT_UNUSED", port_areset => "PORT_USED", port_clkbad0 => "PORT_UNUSED", port_clkbad1 => "PORT_UNUSED", port_clkloss => "PORT_UNUSED", port_clkswitch => "PORT_UNUSED", port_configupdate => "PORT_UNUSED", port_fbin => "PORT_UNUSED", port_inclk0 => "PORT_USED", port_inclk1 => "PORT_UNUSED", port_locked => "PORT_USED", port_pfdena => "PORT_UNUSED", port_phasecounterselect => "PORT_UNUSED", port_phasedone => "PORT_UNUSED", port_phasestep => "PORT_UNUSED", port_phaseupdown => "PORT_UNUSED", port_pllena => "PORT_UNUSED", port_scanaclr => "PORT_UNUSED", port_scanclk => "PORT_UNUSED", port_scanclkena => "PORT_UNUSED", port_scandata => "PORT_UNUSED", port_scandataout => "PORT_UNUSED", port_scandone => "PORT_UNUSED", port_scanread => "PORT_UNUSED", port_scanwrite => "PORT_UNUSED", port_clk0 => "PORT_USED", port_clk1 => "PORT_UNUSED", port_clk2 => "PORT_UNUSED", port_clk3 => "PORT_UNUSED", port_clk4 => "PORT_UNUSED", port_clk5 => "PORT_UNUSED", port_clkena0 => "PORT_UNUSED", port_clkena1 => "PORT_UNUSED", port_clkena2 => "PORT_UNUSED", port_clkena3 => "PORT_UNUSED", port_clkena4 => "PORT_UNUSED", port_clkena5 => "PORT_UNUSED", port_extclk0 => "PORT_UNUSED", port_extclk1 => "PORT_UNUSED", port_extclk2 => "PORT_UNUSED", port_extclk3 => "PORT_UNUSED", self_reset_on_loss_lock => "ON", width_clock => 5 ) PORT MAP ( areset => areset, inclk => sub_wire1, clk => sub_wire3, locked => sub_wire5 ); END SYN; -- ============================================================ -- CNX file retrieval info -- ============================================================ -- Retrieval info: PRIVATE: ACTIVECLK_CHECK STRING "0" -- Retrieval info: PRIVATE: BANDWIDTH STRING "1.000" -- Retrieval info: PRIVATE: BANDWIDTH_FEATURE_ENABLED STRING "1" -- Retrieval info: PRIVATE: BANDWIDTH_FREQ_UNIT STRING "MHz" -- Retrieval info: PRIVATE: BANDWIDTH_PRESET STRING "Low" -- Retrieval info: PRIVATE: BANDWIDTH_USE_AUTO STRING "1" -- Retrieval info: PRIVATE: BANDWIDTH_USE_PRESET STRING "0" -- Retrieval info: PRIVATE: CLKBAD_SWITCHOVER_CHECK STRING "0" -- Retrieval info: PRIVATE: CLKLOSS_CHECK STRING "0" -- Retrieval info: PRIVATE: CLKSWITCH_CHECK STRING "0" -- Retrieval info: PRIVATE: CNX_NO_COMPENSATE_RADIO STRING "0" -- Retrieval info: PRIVATE: CREATE_CLKBAD_CHECK STRING "0" -- Retrieval info: PRIVATE: CREATE_INCLK1_CHECK STRING "0" -- Retrieval info: PRIVATE: CUR_DEDICATED_CLK STRING "c0" -- Retrieval info: PRIVATE: CUR_FBIN_CLK STRING "c0" -- Retrieval info: PRIVATE: DEVICE_SPEED_GRADE STRING "8" -- Retrieval info: PRIVATE: DIV_FACTOR0 NUMERIC "1" -- Retrieval info: PRIVATE: DUTY_CYCLE0 STRING "50.00000000" -- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE0 STRING "100.000000" -- Retrieval info: PRIVATE: EXPLICIT_SWITCHOVER_COUNTER STRING "0" -- Retrieval info: PRIVATE: EXT_FEEDBACK_RADIO STRING "0" -- Retrieval info: PRIVATE: GLOCKED_COUNTER_EDIT_CHANGED STRING "1" -- Retrieval info: PRIVATE: GLOCKED_FEATURE_ENABLED STRING "0" -- Retrieval info: PRIVATE: GLOCKED_MODE_CHECK STRING "0" -- Retrieval info: PRIVATE: GLOCK_COUNTER_EDIT NUMERIC "1048575" -- Retrieval info: PRIVATE: HAS_MANUAL_SWITCHOVER STRING "1" -- Retrieval info: PRIVATE: INCLK0_FREQ_EDIT STRING "100.000" -- Retrieval info: PRIVATE: INCLK0_FREQ_UNIT_COMBO STRING "MHz" -- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT STRING "100.000" -- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT_CHANGED STRING "1" -- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_CHANGED STRING "1" -- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_COMBO STRING "MHz" -- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone IV E" -- Retrieval info: PRIVATE: INT_FEEDBACK__MODE_RADIO STRING "1" -- Retrieval info: PRIVATE: LOCKED_OUTPUT_CHECK STRING "1" -- Retrieval info: PRIVATE: LONG_SCAN_RADIO STRING "1" -- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE STRING "Not Available" -- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE_DIRTY NUMERIC "0" -- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT0 STRING "deg" -- Retrieval info: PRIVATE: MIG_DEVICE_SPEED_GRADE STRING "Any" -- Retrieval info: PRIVATE: MIRROR_CLK0 STRING "0" -- Retrieval info: PRIVATE: MULT_FACTOR0 NUMERIC "1" -- Retrieval info: PRIVATE: NORMAL_MODE_RADIO STRING "0" -- Retrieval info: PRIVATE: OUTPUT_FREQ0 STRING "100.00000000" -- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE0 STRING "0" -- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT0 STRING "MHz" -- Retrieval info: PRIVATE: PHASE_RECONFIG_FEATURE_ENABLED STRING "1" -- Retrieval info: PRIVATE: PHASE_RECONFIG_INPUTS_CHECK STRING "0" -- Retrieval info: PRIVATE: PHASE_SHIFT0 STRING "-500.00000000" -- Retrieval info: PRIVATE: PHASE_SHIFT_STEP_ENABLED_CHECK STRING "0" -- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT0 STRING "ps" -- Retrieval info: PRIVATE: PLL_ADVANCED_PARAM_CHECK STRING "0" -- Retrieval info: PRIVATE: PLL_ARESET_CHECK STRING "1" -- Retrieval info: PRIVATE: PLL_AUTOPLL_CHECK NUMERIC "1" -- Retrieval info: PRIVATE: PLL_ENHPLL_CHECK NUMERIC "0" -- Retrieval info: PRIVATE: PLL_FASTPLL_CHECK NUMERIC "0" -- Retrieval info: PRIVATE: PLL_FBMIMIC_CHECK STRING "0" -- Retrieval info: PRIVATE: PLL_LVDS_PLL_CHECK NUMERIC "0" -- Retrieval info: PRIVATE: PLL_PFDENA_CHECK STRING "0" -- Retrieval info: PRIVATE: PLL_TARGET_HARCOPY_CHECK NUMERIC "0" -- Retrieval info: PRIVATE: PRIMARY_CLK_COMBO STRING "inclk0" -- Retrieval info: PRIVATE: RECONFIG_FILE STRING "fx3_pll.mif" -- Retrieval info: PRIVATE: SACN_INPUTS_CHECK STRING "0" -- Retrieval info: PRIVATE: SCAN_FEATURE_ENABLED STRING "1" -- Retrieval info: PRIVATE: SELF_RESET_LOCK_LOSS STRING "1" -- Retrieval info: PRIVATE: SHORT_SCAN_RADIO STRING "0" -- Retrieval info: PRIVATE: SPREAD_FEATURE_ENABLED STRING "0" -- Retrieval info: PRIVATE: SPREAD_FREQ STRING "50.000" -- Retrieval info: PRIVATE: SPREAD_FREQ_UNIT STRING "KHz" -- Retrieval info: PRIVATE: SPREAD_PERCENT STRING "0.500" -- Retrieval info: PRIVATE: SPREAD_USE STRING "0" -- Retrieval info: PRIVATE: SRC_SYNCH_COMP_RADIO STRING "1" -- Retrieval info: PRIVATE: STICKY_CLK0 STRING "1" -- Retrieval info: PRIVATE: SWITCHOVER_COUNT_EDIT NUMERIC "1" -- Retrieval info: PRIVATE: SWITCHOVER_FEATURE_ENABLED STRING "1" -- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" -- Retrieval info: PRIVATE: USE_CLK0 STRING "1" -- Retrieval info: PRIVATE: USE_CLKENA0 STRING "0" -- Retrieval info: PRIVATE: USE_MIL_SPEED_GRADE NUMERIC "0" -- Retrieval info: PRIVATE: ZERO_DELAY_RADIO STRING "0" -- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all -- Retrieval info: CONSTANT: BANDWIDTH_TYPE STRING "AUTO" -- Retrieval info: CONSTANT: CLK0_DIVIDE_BY NUMERIC "1" -- Retrieval info: CONSTANT: CLK0_DUTY_CYCLE NUMERIC "50" -- Retrieval info: CONSTANT: CLK0_MULTIPLY_BY NUMERIC "1" -- Retrieval info: CONSTANT: CLK0_PHASE_SHIFT STRING "-500" -- Retrieval info: CONSTANT: COMPENSATE_CLOCK STRING "CLK0" -- Retrieval info: CONSTANT: INCLK0_INPUT_FREQUENCY NUMERIC "10000" -- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone IV E" -- Retrieval info: CONSTANT: LPM_TYPE STRING "altpll" -- Retrieval info: CONSTANT: OPERATION_MODE STRING "SOURCE_SYNCHRONOUS" -- Retrieval info: CONSTANT: PLL_TYPE STRING "AUTO" -- Retrieval info: CONSTANT: PORT_ACTIVECLOCK STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_ARESET STRING "PORT_USED" -- Retrieval info: CONSTANT: PORT_CLKBAD0 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_CLKBAD1 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_CLKLOSS STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_CLKSWITCH STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_CONFIGUPDATE STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_FBIN STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_INCLK0 STRING "PORT_USED" -- Retrieval info: CONSTANT: PORT_INCLK1 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_LOCKED STRING "PORT_USED" -- Retrieval info: CONSTANT: PORT_PFDENA STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_PHASECOUNTERSELECT STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_PHASEDONE STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_PHASESTEP STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_PHASEUPDOWN STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_PLLENA STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_SCANACLR STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_SCANCLK STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_SCANCLKENA STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_SCANDATA STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_SCANDATAOUT STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_SCANDONE STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_SCANREAD STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_SCANWRITE STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_clk0 STRING "PORT_USED" -- Retrieval info: CONSTANT: PORT_clk1 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_clk2 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_clk3 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_clk4 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_clk5 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_clkena0 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_clkena1 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_clkena2 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_clkena3 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_clkena4 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_clkena5 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_extclk0 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_extclk1 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_extclk2 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_extclk3 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: SELF_RESET_ON_LOSS_LOCK STRING "ON" -- Retrieval info: CONSTANT: WIDTH_CLOCK NUMERIC "5" -- Retrieval info: USED_PORT: @clk 0 0 5 0 OUTPUT_CLK_EXT VCC "@clk[4..0]" -- Retrieval info: USED_PORT: @inclk 0 0 2 0 INPUT_CLK_EXT VCC "@inclk[1..0]" -- Retrieval info: USED_PORT: areset 0 0 0 0 INPUT GND "areset" -- Retrieval info: USED_PORT: c0 0 0 0 0 OUTPUT_CLK_EXT VCC "c0" -- Retrieval info: USED_PORT: inclk0 0 0 0 0 INPUT_CLK_EXT GND "inclk0" -- Retrieval info: USED_PORT: locked 0 0 0 0 OUTPUT GND "locked" -- Retrieval info: CONNECT: @areset 0 0 0 0 areset 0 0 0 0 -- Retrieval info: CONNECT: @inclk 0 0 1 1 GND 0 0 0 0 -- Retrieval info: CONNECT: @inclk 0 0 1 0 inclk0 0 0 0 0 -- Retrieval info: CONNECT: c0 0 0 0 0 @clk 0 0 1 0 -- Retrieval info: CONNECT: locked 0 0 0 0 @locked 0 0 0 0 -- Retrieval info: GEN_FILE: TYPE_NORMAL fx3_pll.vhd TRUE -- Retrieval info: GEN_FILE: TYPE_NORMAL fx3_pll.ppf TRUE -- Retrieval info: GEN_FILE: TYPE_NORMAL fx3_pll.inc FALSE -- Retrieval info: GEN_FILE: TYPE_NORMAL fx3_pll.cmp FALSE -- Retrieval info: GEN_FILE: TYPE_NORMAL fx3_pll.bsf FALSE -- Retrieval info: GEN_FILE: TYPE_NORMAL fx3_pll_inst.vhd FALSE -- Retrieval info: CBX_MODULE_PREFIX: ON bladeRF-2024.05/hdl/fpga/ip/altera/fx3_pll/greybox_tmp/000077500000000000000000000000001457144405000224435ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/altera/fx3_pll/greybox_tmp/cbx_args.txt000066400000000000000000000025651457144405000250040ustar00rootroot00000000000000BANDWIDTH_TYPE=AUTO CLK0_DIVIDE_BY=1 CLK0_DUTY_CYCLE=50 CLK0_MULTIPLY_BY=1 CLK0_PHASE_SHIFT=0 COMPENSATE_CLOCK=CLK0 INCLK0_INPUT_FREQUENCY=10000 INTENDED_DEVICE_FAMILY="Cyclone IV E" LPM_TYPE=altpll OPERATION_MODE=SOURCE_SYNCHRONOUS PLL_TYPE=AUTO PORT_ACTIVECLOCK=PORT_UNUSED PORT_ARESET=PORT_UNUSED PORT_CLKBAD0=PORT_UNUSED PORT_CLKBAD1=PORT_UNUSED PORT_CLKLOSS=PORT_UNUSED PORT_CLKSWITCH=PORT_UNUSED PORT_CONFIGUPDATE=PORT_UNUSED PORT_FBIN=PORT_UNUSED PORT_INCLK0=PORT_USED PORT_INCLK1=PORT_UNUSED PORT_LOCKED=PORT_USED PORT_PFDENA=PORT_UNUSED PORT_PHASECOUNTERSELECT=PORT_UNUSED PORT_PHASEDONE=PORT_UNUSED PORT_PHASESTEP=PORT_UNUSED PORT_PHASEUPDOWN=PORT_UNUSED PORT_PLLENA=PORT_UNUSED PORT_SCANACLR=PORT_UNUSED PORT_SCANCLK=PORT_UNUSED PORT_SCANCLKENA=PORT_UNUSED PORT_SCANDATA=PORT_UNUSED PORT_SCANDATAOUT=PORT_UNUSED PORT_SCANDONE=PORT_UNUSED PORT_SCANREAD=PORT_UNUSED PORT_SCANWRITE=PORT_UNUSED PORT_clk0=PORT_USED PORT_clk1=PORT_UNUSED PORT_clk2=PORT_UNUSED PORT_clk3=PORT_UNUSED PORT_clk4=PORT_UNUSED PORT_clk5=PORT_UNUSED PORT_clkena0=PORT_UNUSED PORT_clkena1=PORT_UNUSED PORT_clkena2=PORT_UNUSED PORT_clkena3=PORT_UNUSED PORT_clkena4=PORT_UNUSED PORT_clkena5=PORT_UNUSED PORT_extclk0=PORT_UNUSED PORT_extclk1=PORT_UNUSED PORT_extclk2=PORT_UNUSED PORT_extclk3=PORT_UNUSED SELF_RESET_ON_LOSS_LOCK=ON WIDTH_CLOCK=5 DEVICE_FAMILY="Cyclone IV E" CBX_AUTO_BLACKBOX=ALL inclk inclk clk locked bladeRF-2024.05/hdl/fpga/ip/altera/pll/000077500000000000000000000000001457144405000173245ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/altera/pll/greybox_tmp/000077500000000000000000000000001457144405000216635ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/altera/pll/greybox_tmp/cbx_args.txt000066400000000000000000000026731457144405000242240ustar00rootroot00000000000000BANDWIDTH_TYPE=AUTO CLK0_DIVIDE_BY=1 CLK0_DUTY_CYCLE=50 CLK0_MULTIPLY_BY=1 CLK0_PHASE_SHIFT=0 CLK1_DIVIDE_BY=1 CLK1_DUTY_CYCLE=50 CLK1_MULTIPLY_BY=2 CLK1_PHASE_SHIFT=0 COMPENSATE_CLOCK=CLK0 INCLK0_INPUT_FREQUENCY=26041 INTENDED_DEVICE_FAMILY="Cyclone IV E" LPM_TYPE=altpll OPERATION_MODE=NORMAL PLL_TYPE=AUTO PORT_ACTIVECLOCK=PORT_UNUSED PORT_ARESET=PORT_USED PORT_CLKBAD0=PORT_UNUSED PORT_CLKBAD1=PORT_UNUSED PORT_CLKLOSS=PORT_UNUSED PORT_CLKSWITCH=PORT_UNUSED PORT_CONFIGUPDATE=PORT_UNUSED PORT_FBIN=PORT_UNUSED PORT_INCLK0=PORT_USED PORT_INCLK1=PORT_UNUSED PORT_LOCKED=PORT_USED PORT_PFDENA=PORT_UNUSED PORT_PHASECOUNTERSELECT=PORT_UNUSED PORT_PHASEDONE=PORT_UNUSED PORT_PHASESTEP=PORT_UNUSED PORT_PHASEUPDOWN=PORT_UNUSED PORT_PLLENA=PORT_UNUSED PORT_SCANACLR=PORT_UNUSED PORT_SCANCLK=PORT_UNUSED PORT_SCANCLKENA=PORT_UNUSED PORT_SCANDATA=PORT_UNUSED PORT_SCANDATAOUT=PORT_UNUSED PORT_SCANDONE=PORT_UNUSED PORT_SCANREAD=PORT_UNUSED PORT_SCANWRITE=PORT_UNUSED PORT_clk0=PORT_USED PORT_clk1=PORT_USED PORT_clk2=PORT_UNUSED PORT_clk3=PORT_UNUSED PORT_clk4=PORT_UNUSED PORT_clk5=PORT_UNUSED PORT_clkena0=PORT_UNUSED PORT_clkena1=PORT_UNUSED PORT_clkena2=PORT_UNUSED PORT_clkena3=PORT_UNUSED PORT_clkena4=PORT_UNUSED PORT_clkena5=PORT_UNUSED PORT_extclk0=PORT_UNUSED PORT_extclk1=PORT_UNUSED PORT_extclk2=PORT_UNUSED PORT_extclk3=PORT_UNUSED SELF_RESET_ON_LOSS_LOCK=OFF WIDTH_CLOCK=5 DEVICE_FAMILY="Cyclone IV E" CBX_AUTO_BLACKBOX=ALL areset inclk inclk clk clk locked bladeRF-2024.05/hdl/fpga/ip/altera/pll/pll.cmp000066400000000000000000000017671457144405000206270ustar00rootroot00000000000000--Copyright (C) 1991-2016 Altera Corporation. All rights reserved. --Your use of Altera Corporation's design tools, logic functions --and other software and tools, and its AMPP partner logic --functions, and any output files from any of the foregoing --(including device programming or simulation files), and any --associated documentation or information are expressly subject --to the terms and conditions of the Altera Program License --Subscription Agreement, the Altera Quartus Prime License Agreement, --the Altera MegaCore Function License Agreement, or other --applicable license agreement, including, without limitation, --that your use is for the sole purpose of programming logic --devices manufactured by Altera and sold by Altera or its --authorized distributors. Please refer to the applicable --agreement for further details. component pll PORT ( areset : IN STD_LOGIC := '0'; inclk0 : IN STD_LOGIC := '0'; c0 : OUT STD_LOGIC ; locked : OUT STD_LOGIC ); end component; bladeRF-2024.05/hdl/fpga/ip/altera/pll/pll.ppf000066400000000000000000000007151457144405000206250ustar00rootroot00000000000000 bladeRF-2024.05/hdl/fpga/ip/altera/pll/pll.qip000066400000000000000000000006401457144405000206260ustar00rootroot00000000000000set_global_assignment -name IP_TOOL_NAME "ALTPLL" set_global_assignment -name IP_TOOL_VERSION "16.0" set_global_assignment -name IP_GENERATED_DEVICE_FAMILY "{Cyclone IV E}" set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "pll.vhd"] set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "pll.cmp"] set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "pll.ppf"] bladeRF-2024.05/hdl/fpga/ip/altera/pll/pll.vhd000066400000000000000000000357351457144405000206330ustar00rootroot00000000000000-- megafunction wizard: %ALTPLL% -- GENERATION: STANDARD -- VERSION: WM1.0 -- MODULE: altpll -- ============================================================ -- File Name: pll.vhd -- Megafunction Name(s): -- altpll -- -- Simulation Library Files(s): -- -- ============================================================ -- ************************************************************ -- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! -- -- 16.0.0 Build 211 04/27/2016 SJ Lite Edition -- ************************************************************ --Copyright (C) 1991-2016 Altera Corporation. All rights reserved. --Your use of Altera Corporation's design tools, logic functions --and other software and tools, and its AMPP partner logic --functions, and any output files from any of the foregoing --(including device programming or simulation files), and any --associated documentation or information are expressly subject --to the terms and conditions of the Altera Program License --Subscription Agreement, the Altera Quartus Prime License Agreement, --the Altera MegaCore Function License Agreement, or other --applicable license agreement, including, without limitation, --that your use is for the sole purpose of programming logic --devices manufactured by Altera and sold by Altera or its --authorized distributors. Please refer to the applicable --agreement for further details. LIBRARY ieee; USE ieee.std_logic_1164.all; LIBRARY altera_mf; USE altera_mf.all; ENTITY pll IS PORT ( areset : IN STD_LOGIC := '0'; inclk0 : IN STD_LOGIC := '0'; c0 : OUT STD_LOGIC ; locked : OUT STD_LOGIC ); END pll; ARCHITECTURE SYN OF pll IS SIGNAL sub_wire0 : STD_LOGIC ; SIGNAL sub_wire1 : STD_LOGIC_VECTOR (1 DOWNTO 0); SIGNAL sub_wire2_bv : BIT_VECTOR (0 DOWNTO 0); SIGNAL sub_wire2 : STD_LOGIC_VECTOR (0 DOWNTO 0); SIGNAL sub_wire3 : STD_LOGIC_VECTOR (4 DOWNTO 0); SIGNAL sub_wire4 : STD_LOGIC ; SIGNAL sub_wire5 : STD_LOGIC ; COMPONENT altpll GENERIC ( bandwidth_type : STRING; clk0_divide_by : NATURAL; clk0_duty_cycle : NATURAL; clk0_multiply_by : NATURAL; clk0_phase_shift : STRING; compensate_clock : STRING; inclk0_input_frequency : NATURAL; intended_device_family : STRING; lpm_hint : STRING; lpm_type : STRING; operation_mode : STRING; pll_type : STRING; port_activeclock : STRING; port_areset : STRING; port_clkbad0 : STRING; port_clkbad1 : STRING; port_clkloss : STRING; port_clkswitch : STRING; port_configupdate : STRING; port_fbin : STRING; port_inclk0 : STRING; port_inclk1 : STRING; port_locked : STRING; port_pfdena : STRING; port_phasecounterselect : STRING; port_phasedone : STRING; port_phasestep : STRING; port_phaseupdown : STRING; port_pllena : STRING; port_scanaclr : STRING; port_scanclk : STRING; port_scanclkena : STRING; port_scandata : STRING; port_scandataout : STRING; port_scandone : STRING; port_scanread : STRING; port_scanwrite : STRING; port_clk0 : STRING; port_clk1 : STRING; port_clk2 : STRING; port_clk3 : STRING; port_clk4 : STRING; port_clk5 : STRING; port_clkena0 : STRING; port_clkena1 : STRING; port_clkena2 : STRING; port_clkena3 : STRING; port_clkena4 : STRING; port_clkena5 : STRING; port_extclk0 : STRING; port_extclk1 : STRING; port_extclk2 : STRING; port_extclk3 : STRING; self_reset_on_loss_lock : STRING; width_clock : NATURAL ); PORT ( areset : IN STD_LOGIC ; inclk : IN STD_LOGIC_VECTOR (1 DOWNTO 0); clk : OUT STD_LOGIC_VECTOR (4 DOWNTO 0); locked : OUT STD_LOGIC ); END COMPONENT; BEGIN sub_wire2_bv(0 DOWNTO 0) <= "0"; sub_wire2 <= To_stdlogicvector(sub_wire2_bv); sub_wire0 <= inclk0; sub_wire1 <= sub_wire2(0 DOWNTO 0) & sub_wire0; sub_wire4 <= sub_wire3(0); c0 <= sub_wire4; locked <= sub_wire5; altpll_component : altpll GENERIC MAP ( bandwidth_type => "AUTO", clk0_divide_by => 12, clk0_duty_cycle => 50, clk0_multiply_by => 25, clk0_phase_shift => "0", compensate_clock => "CLK0", inclk0_input_frequency => 26041, intended_device_family => "Cyclone IV E", lpm_hint => "CBX_MODULE_PREFIX=pll", lpm_type => "altpll", operation_mode => "NORMAL", pll_type => "AUTO", port_activeclock => "PORT_UNUSED", port_areset => "PORT_USED", port_clkbad0 => "PORT_UNUSED", port_clkbad1 => "PORT_UNUSED", port_clkloss => "PORT_UNUSED", port_clkswitch => "PORT_UNUSED", port_configupdate => "PORT_UNUSED", port_fbin => "PORT_UNUSED", port_inclk0 => "PORT_USED", port_inclk1 => "PORT_UNUSED", port_locked => "PORT_USED", port_pfdena => "PORT_UNUSED", port_phasecounterselect => "PORT_UNUSED", port_phasedone => "PORT_UNUSED", port_phasestep => "PORT_UNUSED", port_phaseupdown => "PORT_UNUSED", port_pllena => "PORT_UNUSED", port_scanaclr => "PORT_UNUSED", port_scanclk => "PORT_UNUSED", port_scanclkena => "PORT_UNUSED", port_scandata => "PORT_UNUSED", port_scandataout => "PORT_UNUSED", port_scandone => "PORT_UNUSED", port_scanread => "PORT_UNUSED", port_scanwrite => "PORT_UNUSED", port_clk0 => "PORT_USED", port_clk1 => "PORT_UNUSED", port_clk2 => "PORT_UNUSED", port_clk3 => "PORT_UNUSED", port_clk4 => "PORT_UNUSED", port_clk5 => "PORT_UNUSED", port_clkena0 => "PORT_UNUSED", port_clkena1 => "PORT_UNUSED", port_clkena2 => "PORT_UNUSED", port_clkena3 => "PORT_UNUSED", port_clkena4 => "PORT_UNUSED", port_clkena5 => "PORT_UNUSED", port_extclk0 => "PORT_UNUSED", port_extclk1 => "PORT_UNUSED", port_extclk2 => "PORT_UNUSED", port_extclk3 => "PORT_UNUSED", self_reset_on_loss_lock => "ON", width_clock => 5 ) PORT MAP ( areset => areset, inclk => sub_wire1, clk => sub_wire3, locked => sub_wire5 ); END SYN; -- ============================================================ -- CNX file retrieval info -- ============================================================ -- Retrieval info: PRIVATE: ACTIVECLK_CHECK STRING "0" -- Retrieval info: PRIVATE: BANDWIDTH STRING "1.000" -- Retrieval info: PRIVATE: BANDWIDTH_FEATURE_ENABLED STRING "1" -- Retrieval info: PRIVATE: BANDWIDTH_FREQ_UNIT STRING "MHz" -- Retrieval info: PRIVATE: BANDWIDTH_PRESET STRING "Low" -- Retrieval info: PRIVATE: BANDWIDTH_USE_AUTO STRING "1" -- Retrieval info: PRIVATE: BANDWIDTH_USE_PRESET STRING "0" -- Retrieval info: PRIVATE: CLKBAD_SWITCHOVER_CHECK STRING "0" -- Retrieval info: PRIVATE: CLKLOSS_CHECK STRING "0" -- Retrieval info: PRIVATE: CLKSWITCH_CHECK STRING "0" -- Retrieval info: PRIVATE: CNX_NO_COMPENSATE_RADIO STRING "0" -- Retrieval info: PRIVATE: CREATE_CLKBAD_CHECK STRING "0" -- Retrieval info: PRIVATE: CREATE_INCLK1_CHECK STRING "0" -- Retrieval info: PRIVATE: CUR_DEDICATED_CLK STRING "c0" -- Retrieval info: PRIVATE: CUR_FBIN_CLK STRING "c0" -- Retrieval info: PRIVATE: DEVICE_SPEED_GRADE STRING "8" -- Retrieval info: PRIVATE: DIV_FACTOR0 NUMERIC "17" -- Retrieval info: PRIVATE: DUTY_CYCLE0 STRING "50.00000000" -- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE0 STRING "80.000000" -- Retrieval info: PRIVATE: EXPLICIT_SWITCHOVER_COUNTER STRING "0" -- Retrieval info: PRIVATE: EXT_FEEDBACK_RADIO STRING "0" -- Retrieval info: PRIVATE: GLOCKED_COUNTER_EDIT_CHANGED STRING "1" -- Retrieval info: PRIVATE: GLOCKED_FEATURE_ENABLED STRING "0" -- Retrieval info: PRIVATE: GLOCKED_MODE_CHECK STRING "0" -- Retrieval info: PRIVATE: GLOCK_COUNTER_EDIT NUMERIC "1048575" -- Retrieval info: PRIVATE: HAS_MANUAL_SWITCHOVER STRING "1" -- Retrieval info: PRIVATE: INCLK0_FREQ_EDIT STRING "38.400" -- Retrieval info: PRIVATE: INCLK0_FREQ_UNIT_COMBO STRING "MHz" -- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT STRING "100.000" -- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT_CHANGED STRING "1" -- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_CHANGED STRING "1" -- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_COMBO STRING "MHz" -- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone IV E" -- Retrieval info: PRIVATE: INT_FEEDBACK__MODE_RADIO STRING "1" -- Retrieval info: PRIVATE: LOCKED_OUTPUT_CHECK STRING "1" -- Retrieval info: PRIVATE: LONG_SCAN_RADIO STRING "1" -- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE STRING "Not Available" -- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE_DIRTY NUMERIC "0" -- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT0 STRING "deg" -- Retrieval info: PRIVATE: MIG_DEVICE_SPEED_GRADE STRING "Any" -- Retrieval info: PRIVATE: MIRROR_CLK0 STRING "0" -- Retrieval info: PRIVATE: MULT_FACTOR0 NUMERIC "32" -- Retrieval info: PRIVATE: NORMAL_MODE_RADIO STRING "1" -- Retrieval info: PRIVATE: OUTPUT_FREQ0 STRING "80.00000000" -- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE0 STRING "1" -- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT0 STRING "MHz" -- Retrieval info: PRIVATE: PHASE_RECONFIG_FEATURE_ENABLED STRING "1" -- Retrieval info: PRIVATE: PHASE_RECONFIG_INPUTS_CHECK STRING "0" -- Retrieval info: PRIVATE: PHASE_SHIFT0 STRING "0.00000000" -- Retrieval info: PRIVATE: PHASE_SHIFT_STEP_ENABLED_CHECK STRING "0" -- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT0 STRING "deg" -- Retrieval info: PRIVATE: PLL_ADVANCED_PARAM_CHECK STRING "0" -- Retrieval info: PRIVATE: PLL_ARESET_CHECK STRING "1" -- Retrieval info: PRIVATE: PLL_AUTOPLL_CHECK NUMERIC "1" -- Retrieval info: PRIVATE: PLL_ENHPLL_CHECK NUMERIC "0" -- Retrieval info: PRIVATE: PLL_FASTPLL_CHECK NUMERIC "0" -- Retrieval info: PRIVATE: PLL_FBMIMIC_CHECK STRING "0" -- Retrieval info: PRIVATE: PLL_LVDS_PLL_CHECK NUMERIC "0" -- Retrieval info: PRIVATE: PLL_PFDENA_CHECK STRING "0" -- Retrieval info: PRIVATE: PLL_TARGET_HARCOPY_CHECK NUMERIC "0" -- Retrieval info: PRIVATE: PRIMARY_CLK_COMBO STRING "inclk0" -- Retrieval info: PRIVATE: RECONFIG_FILE STRING "pll.mif" -- Retrieval info: PRIVATE: SACN_INPUTS_CHECK STRING "0" -- Retrieval info: PRIVATE: SCAN_FEATURE_ENABLED STRING "1" -- Retrieval info: PRIVATE: SELF_RESET_LOCK_LOSS STRING "1" -- Retrieval info: PRIVATE: SHORT_SCAN_RADIO STRING "0" -- Retrieval info: PRIVATE: SPREAD_FEATURE_ENABLED STRING "0" -- Retrieval info: PRIVATE: SPREAD_FREQ STRING "50.000" -- Retrieval info: PRIVATE: SPREAD_FREQ_UNIT STRING "KHz" -- Retrieval info: PRIVATE: SPREAD_PERCENT STRING "0.500" -- Retrieval info: PRIVATE: SPREAD_USE STRING "0" -- Retrieval info: PRIVATE: SRC_SYNCH_COMP_RADIO STRING "0" -- Retrieval info: PRIVATE: STICKY_CLK0 STRING "1" -- Retrieval info: PRIVATE: SWITCHOVER_COUNT_EDIT NUMERIC "1" -- Retrieval info: PRIVATE: SWITCHOVER_FEATURE_ENABLED STRING "1" -- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" -- Retrieval info: PRIVATE: USE_CLK0 STRING "1" -- Retrieval info: PRIVATE: USE_CLKENA0 STRING "0" -- Retrieval info: PRIVATE: USE_MIL_SPEED_GRADE NUMERIC "0" -- Retrieval info: PRIVATE: ZERO_DELAY_RADIO STRING "0" -- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all -- Retrieval info: CONSTANT: BANDWIDTH_TYPE STRING "AUTO" -- Retrieval info: CONSTANT: CLK0_DIVIDE_BY NUMERIC "12" -- Retrieval info: CONSTANT: CLK0_DUTY_CYCLE NUMERIC "50" -- Retrieval info: CONSTANT: CLK0_MULTIPLY_BY NUMERIC "25" -- Retrieval info: CONSTANT: CLK0_PHASE_SHIFT STRING "0" -- Retrieval info: CONSTANT: COMPENSATE_CLOCK STRING "CLK0" -- Retrieval info: CONSTANT: INCLK0_INPUT_FREQUENCY NUMERIC "26041" -- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone IV E" -- Retrieval info: CONSTANT: LPM_TYPE STRING "altpll" -- Retrieval info: CONSTANT: OPERATION_MODE STRING "NORMAL" -- Retrieval info: CONSTANT: PLL_TYPE STRING "AUTO" -- Retrieval info: CONSTANT: PORT_ACTIVECLOCK STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_ARESET STRING "PORT_USED" -- Retrieval info: CONSTANT: PORT_CLKBAD0 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_CLKBAD1 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_CLKLOSS STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_CLKSWITCH STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_CONFIGUPDATE STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_FBIN STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_INCLK0 STRING "PORT_USED" -- Retrieval info: CONSTANT: PORT_INCLK1 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_LOCKED STRING "PORT_USED" -- Retrieval info: CONSTANT: PORT_PFDENA STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_PHASECOUNTERSELECT STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_PHASEDONE STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_PHASESTEP STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_PHASEUPDOWN STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_PLLENA STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_SCANACLR STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_SCANCLK STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_SCANCLKENA STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_SCANDATA STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_SCANDATAOUT STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_SCANDONE STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_SCANREAD STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_SCANWRITE STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_clk0 STRING "PORT_USED" -- Retrieval info: CONSTANT: PORT_clk1 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_clk2 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_clk3 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_clk4 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_clk5 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_clkena0 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_clkena1 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_clkena2 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_clkena3 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_clkena4 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_clkena5 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_extclk0 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_extclk1 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_extclk2 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_extclk3 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: SELF_RESET_ON_LOSS_LOCK STRING "ON" -- Retrieval info: CONSTANT: WIDTH_CLOCK NUMERIC "5" -- Retrieval info: USED_PORT: @clk 0 0 5 0 OUTPUT_CLK_EXT VCC "@clk[4..0]" -- Retrieval info: USED_PORT: @inclk 0 0 2 0 INPUT_CLK_EXT VCC "@inclk[1..0]" -- Retrieval info: USED_PORT: areset 0 0 0 0 INPUT GND "areset" -- Retrieval info: USED_PORT: c0 0 0 0 0 OUTPUT_CLK_EXT VCC "c0" -- Retrieval info: USED_PORT: inclk0 0 0 0 0 INPUT_CLK_EXT GND "inclk0" -- Retrieval info: USED_PORT: locked 0 0 0 0 OUTPUT GND "locked" -- Retrieval info: CONNECT: @areset 0 0 0 0 areset 0 0 0 0 -- Retrieval info: CONNECT: @inclk 0 0 1 1 GND 0 0 0 0 -- Retrieval info: CONNECT: @inclk 0 0 1 0 inclk0 0 0 0 0 -- Retrieval info: CONNECT: c0 0 0 0 0 @clk 0 0 1 0 -- Retrieval info: CONNECT: locked 0 0 0 0 @locked 0 0 0 0 -- Retrieval info: GEN_FILE: TYPE_NORMAL pll.vhd TRUE -- Retrieval info: GEN_FILE: TYPE_NORMAL pll.ppf TRUE -- Retrieval info: GEN_FILE: TYPE_NORMAL pll.inc FALSE -- Retrieval info: GEN_FILE: TYPE_NORMAL pll.cmp TRUE -- Retrieval info: GEN_FILE: TYPE_NORMAL pll.bsf FALSE -- Retrieval info: GEN_FILE: TYPE_NORMAL pll_inst.vhd FALSE -- Retrieval info: CBX_MODULE_PREFIX: ON bladeRF-2024.05/hdl/fpga/ip/altera/serial_pll/000077500000000000000000000000001457144405000206635ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/altera/serial_pll/greybox_tmp/000077500000000000000000000000001457144405000232225ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/altera/serial_pll/greybox_tmp/cbx_args.txt000066400000000000000000000026571457144405000255650ustar00rootroot00000000000000BANDWIDTH_TYPE=AUTO CLK0_DIVIDE_BY=88 CLK0_DUTY_CYCLE=50 CLK0_MULTIPLY_BY=105 CLK0_PHASE_SHIFT=0 COMPENSATE_CLOCK=CLK0 INCLK0_INPUT_FREQUENCY=26041 INTENDED_DEVICE_FAMILY="Cyclone IV E" LPM_TYPE=altpll OPERATION_MODE=NORMAL PLL_TYPE=AUTO PORT_ACTIVECLOCK=PORT_UNUSED PORT_ARESET=PORT_USED PORT_CLKBAD0=PORT_UNUSED PORT_CLKBAD1=PORT_UNUSED PORT_CLKLOSS=PORT_UNUSED PORT_CLKSWITCH=PORT_UNUSED PORT_CONFIGUPDATE=PORT_UNUSED PORT_FBIN=PORT_UNUSED PORT_INCLK0=PORT_USED PORT_INCLK1=PORT_UNUSED PORT_LOCKED=PORT_USED PORT_PFDENA=PORT_UNUSED PORT_PHASECOUNTERSELECT=PORT_UNUSED PORT_PHASEDONE=PORT_UNUSED PORT_PHASESTEP=PORT_UNUSED PORT_PHASEUPDOWN=PORT_UNUSED PORT_PLLENA=PORT_UNUSED PORT_SCANACLR=PORT_UNUSED PORT_SCANCLK=PORT_UNUSED PORT_SCANCLKENA=PORT_UNUSED PORT_SCANDATA=PORT_UNUSED PORT_SCANDATAOUT=PORT_UNUSED PORT_SCANDONE=PORT_UNUSED PORT_SCANREAD=PORT_UNUSED PORT_SCANWRITE=PORT_UNUSED PORT_clk0=PORT_USED PORT_clk1=PORT_UNUSED PORT_clk2=PORT_UNUSED PORT_clk3=PORT_UNUSED PORT_clk4=PORT_UNUSED PORT_clk5=PORT_UNUSED PORT_clkena0=PORT_UNUSED PORT_clkena1=PORT_UNUSED PORT_clkena2=PORT_UNUSED PORT_clkena3=PORT_UNUSED PORT_clkena4=PORT_UNUSED PORT_clkena5=PORT_UNUSED PORT_extclk0=PORT_UNUSED PORT_extclk1=PORT_UNUSED PORT_extclk2=PORT_UNUSED PORT_extclk3=PORT_UNUSED SELF_RESET_ON_LOSS_LOCK=OFF WIDTH_CLOCK=5 DEVICE_FAMILY="Cyclone IV E" CBX_AUTO_BLACKBOX=ALL areset inclk inclk clk locked bladeRF-2024.05/hdl/fpga/ip/altera/serial_pll/serial_pll.ppf000066400000000000000000000007371457144405000235270ustar00rootroot00000000000000 bladeRF-2024.05/hdl/fpga/ip/altera/serial_pll/serial_pll.qip000066400000000000000000000004311457144405000235220ustar00rootroot00000000000000set_global_assignment -name IP_TOOL_NAME "ALTPLL" set_global_assignment -name IP_TOOL_VERSION "12.1" set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "serial_pll.vhd"] set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "serial_pll.ppf"] bladeRF-2024.05/hdl/fpga/ip/altera/serial_pll/serial_pll.vhd000066400000000000000000000366121457144405000235240ustar00rootroot00000000000000-- megafunction wizard: %ALTPLL% -- GENERATION: STANDARD -- VERSION: WM1.0 -- MODULE: altpll -- ============================================================ -- File Name: serial_pll.vhd -- Megafunction Name(s): -- altpll -- -- Simulation Library Files(s): -- altera_mf -- ============================================================ -- ************************************************************ -- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! -- -- 12.1 Build 177 11/07/2012 SJ Web Edition -- ************************************************************ --Copyright (C) 1991-2012 Altera Corporation --Your use of Altera Corporation's design tools, logic functions --and other software and tools, and its AMPP partner logic --functions, and any output files from any of the foregoing --(including device programming or simulation files), and any --associated documentation or information are expressly subject --to the terms and conditions of the Altera Program License --Subscription Agreement, Altera MegaCore Function License --Agreement, or other applicable license agreement, including, --without limitation, that your use is for the sole purpose of --programming logic devices manufactured by Altera and sold by --Altera or its authorized distributors. Please refer to the --applicable agreement for further details. LIBRARY ieee; USE ieee.std_logic_1164.all; LIBRARY altera_mf; USE altera_mf.all; ENTITY serial_pll IS PORT ( areset : IN STD_LOGIC := '0'; inclk0 : IN STD_LOGIC := '0'; c0 : OUT STD_LOGIC ; locked : OUT STD_LOGIC ); END serial_pll; ARCHITECTURE SYN OF serial_pll IS SIGNAL sub_wire0 : STD_LOGIC ; SIGNAL sub_wire1 : STD_LOGIC_VECTOR (4 DOWNTO 0); SIGNAL sub_wire2 : STD_LOGIC ; SIGNAL sub_wire3 : STD_LOGIC ; SIGNAL sub_wire4 : STD_LOGIC_VECTOR (1 DOWNTO 0); SIGNAL sub_wire5_bv : BIT_VECTOR (0 DOWNTO 0); SIGNAL sub_wire5 : STD_LOGIC_VECTOR (0 DOWNTO 0); COMPONENT altpll GENERIC ( bandwidth_type : STRING; clk0_divide_by : NATURAL; clk0_duty_cycle : NATURAL; clk0_multiply_by : NATURAL; clk0_phase_shift : STRING; compensate_clock : STRING; inclk0_input_frequency : NATURAL; intended_device_family : STRING; lpm_hint : STRING; lpm_type : STRING; operation_mode : STRING; pll_type : STRING; port_activeclock : STRING; port_areset : STRING; port_clkbad0 : STRING; port_clkbad1 : STRING; port_clkloss : STRING; port_clkswitch : STRING; port_configupdate : STRING; port_fbin : STRING; port_inclk0 : STRING; port_inclk1 : STRING; port_locked : STRING; port_pfdena : STRING; port_phasecounterselect : STRING; port_phasedone : STRING; port_phasestep : STRING; port_phaseupdown : STRING; port_pllena : STRING; port_scanaclr : STRING; port_scanclk : STRING; port_scanclkena : STRING; port_scandata : STRING; port_scandataout : STRING; port_scandone : STRING; port_scanread : STRING; port_scanwrite : STRING; port_clk0 : STRING; port_clk1 : STRING; port_clk2 : STRING; port_clk3 : STRING; port_clk4 : STRING; port_clk5 : STRING; port_clkena0 : STRING; port_clkena1 : STRING; port_clkena2 : STRING; port_clkena3 : STRING; port_clkena4 : STRING; port_clkena5 : STRING; port_extclk0 : STRING; port_extclk1 : STRING; port_extclk2 : STRING; port_extclk3 : STRING; self_reset_on_loss_lock : STRING; width_clock : NATURAL ); PORT ( areset : IN STD_LOGIC ; clk : OUT STD_LOGIC_VECTOR (4 DOWNTO 0); inclk : IN STD_LOGIC_VECTOR (1 DOWNTO 0); locked : OUT STD_LOGIC ); END COMPONENT; BEGIN sub_wire5_bv(0 DOWNTO 0) <= "0"; sub_wire5 <= To_stdlogicvector(sub_wire5_bv); locked <= sub_wire0; sub_wire2 <= sub_wire1(0); c0 <= sub_wire2; sub_wire3 <= inclk0; sub_wire4 <= sub_wire5(0 DOWNTO 0) & sub_wire3; altpll_component : altpll GENERIC MAP ( bandwidth_type => "AUTO", clk0_divide_by => 88, clk0_duty_cycle => 50, clk0_multiply_by => 105, clk0_phase_shift => "0", compensate_clock => "CLK0", inclk0_input_frequency => 26041, intended_device_family => "Cyclone IV E", lpm_hint => "CBX_MODULE_PREFIX=serial_pll", lpm_type => "altpll", operation_mode => "NORMAL", pll_type => "AUTO", port_activeclock => "PORT_UNUSED", port_areset => "PORT_USED", port_clkbad0 => "PORT_UNUSED", port_clkbad1 => "PORT_UNUSED", port_clkloss => "PORT_UNUSED", port_clkswitch => "PORT_UNUSED", port_configupdate => "PORT_UNUSED", port_fbin => "PORT_UNUSED", port_inclk0 => "PORT_USED", port_inclk1 => "PORT_UNUSED", port_locked => "PORT_USED", port_pfdena => "PORT_UNUSED", port_phasecounterselect => "PORT_UNUSED", port_phasedone => "PORT_UNUSED", port_phasestep => "PORT_UNUSED", port_phaseupdown => "PORT_UNUSED", port_pllena => "PORT_UNUSED", port_scanaclr => "PORT_UNUSED", port_scanclk => "PORT_UNUSED", port_scanclkena => "PORT_UNUSED", port_scandata => "PORT_UNUSED", port_scandataout => "PORT_UNUSED", port_scandone => "PORT_UNUSED", port_scanread => "PORT_UNUSED", port_scanwrite => "PORT_UNUSED", port_clk0 => "PORT_USED", port_clk1 => "PORT_UNUSED", port_clk2 => "PORT_UNUSED", port_clk3 => "PORT_UNUSED", port_clk4 => "PORT_UNUSED", port_clk5 => "PORT_UNUSED", port_clkena0 => "PORT_UNUSED", port_clkena1 => "PORT_UNUSED", port_clkena2 => "PORT_UNUSED", port_clkena3 => "PORT_UNUSED", port_clkena4 => "PORT_UNUSED", port_clkena5 => "PORT_UNUSED", port_extclk0 => "PORT_UNUSED", port_extclk1 => "PORT_UNUSED", port_extclk2 => "PORT_UNUSED", port_extclk3 => "PORT_UNUSED", self_reset_on_loss_lock => "OFF", width_clock => 5 ) PORT MAP ( areset => areset, inclk => sub_wire4, locked => sub_wire0, clk => sub_wire1 ); END SYN; -- ============================================================ -- CNX file retrieval info -- ============================================================ -- Retrieval info: PRIVATE: ACTIVECLK_CHECK STRING "0" -- Retrieval info: PRIVATE: BANDWIDTH STRING "1.000" -- Retrieval info: PRIVATE: BANDWIDTH_FEATURE_ENABLED STRING "1" -- Retrieval info: PRIVATE: BANDWIDTH_FREQ_UNIT STRING "MHz" -- Retrieval info: PRIVATE: BANDWIDTH_PRESET STRING "Low" -- Retrieval info: PRIVATE: BANDWIDTH_USE_AUTO STRING "1" -- Retrieval info: PRIVATE: BANDWIDTH_USE_PRESET STRING "0" -- Retrieval info: PRIVATE: CLKBAD_SWITCHOVER_CHECK STRING "0" -- Retrieval info: PRIVATE: CLKLOSS_CHECK STRING "0" -- Retrieval info: PRIVATE: CLKSWITCH_CHECK STRING "0" -- Retrieval info: PRIVATE: CNX_NO_COMPENSATE_RADIO STRING "0" -- Retrieval info: PRIVATE: CREATE_CLKBAD_CHECK STRING "0" -- Retrieval info: PRIVATE: CREATE_INCLK1_CHECK STRING "0" -- Retrieval info: PRIVATE: CUR_DEDICATED_CLK STRING "c0" -- Retrieval info: PRIVATE: CUR_FBIN_CLK STRING "c0" -- Retrieval info: PRIVATE: DEVICE_SPEED_GRADE STRING "6" -- Retrieval info: PRIVATE: DIV_FACTOR0 NUMERIC "88" -- Retrieval info: PRIVATE: DUTY_CYCLE0 STRING "50.00000000" -- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE0 STRING "45.818180" -- Retrieval info: PRIVATE: EXPLICIT_SWITCHOVER_COUNTER STRING "0" -- Retrieval info: PRIVATE: EXT_FEEDBACK_RADIO STRING "0" -- Retrieval info: PRIVATE: GLOCKED_COUNTER_EDIT_CHANGED STRING "1" -- Retrieval info: PRIVATE: GLOCKED_FEATURE_ENABLED STRING "0" -- Retrieval info: PRIVATE: GLOCKED_MODE_CHECK STRING "0" -- Retrieval info: PRIVATE: GLOCK_COUNTER_EDIT NUMERIC "1048575" -- Retrieval info: PRIVATE: HAS_MANUAL_SWITCHOVER STRING "1" -- Retrieval info: PRIVATE: INCLK0_FREQ_EDIT STRING "38.400" -- Retrieval info: PRIVATE: INCLK0_FREQ_UNIT_COMBO STRING "MHz" -- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT STRING "100.000" -- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT_CHANGED STRING "1" -- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_CHANGED STRING "1" -- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_COMBO STRING "MHz" -- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone IV E" -- Retrieval info: PRIVATE: INT_FEEDBACK__MODE_RADIO STRING "1" -- Retrieval info: PRIVATE: LOCKED_OUTPUT_CHECK STRING "1" -- Retrieval info: PRIVATE: LONG_SCAN_RADIO STRING "1" -- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE STRING "Not Available" -- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE_DIRTY NUMERIC "0" -- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT0 STRING "deg" -- Retrieval info: PRIVATE: MIG_DEVICE_SPEED_GRADE STRING "Any" -- Retrieval info: PRIVATE: MIRROR_CLK0 STRING "0" -- Retrieval info: PRIVATE: MULT_FACTOR0 NUMERIC "105" -- Retrieval info: PRIVATE: NORMAL_MODE_RADIO STRING "1" -- Retrieval info: PRIVATE: OUTPUT_FREQ0 STRING "100.00000000" -- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE0 STRING "0" -- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT0 STRING "MHz" -- Retrieval info: PRIVATE: PHASE_RECONFIG_FEATURE_ENABLED STRING "1" -- Retrieval info: PRIVATE: PHASE_RECONFIG_INPUTS_CHECK STRING "0" -- Retrieval info: PRIVATE: PHASE_SHIFT0 STRING "0.00000000" -- Retrieval info: PRIVATE: PHASE_SHIFT_STEP_ENABLED_CHECK STRING "0" -- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT0 STRING "deg" -- Retrieval info: PRIVATE: PLL_ADVANCED_PARAM_CHECK STRING "0" -- Retrieval info: PRIVATE: PLL_ARESET_CHECK STRING "1" -- Retrieval info: PRIVATE: PLL_AUTOPLL_CHECK NUMERIC "1" -- Retrieval info: PRIVATE: PLL_ENHPLL_CHECK NUMERIC "0" -- Retrieval info: PRIVATE: PLL_FASTPLL_CHECK NUMERIC "0" -- Retrieval info: PRIVATE: PLL_FBMIMIC_CHECK STRING "0" -- Retrieval info: PRIVATE: PLL_LVDS_PLL_CHECK NUMERIC "0" -- Retrieval info: PRIVATE: PLL_PFDENA_CHECK STRING "0" -- Retrieval info: PRIVATE: PLL_TARGET_HARCOPY_CHECK NUMERIC "0" -- Retrieval info: PRIVATE: PRIMARY_CLK_COMBO STRING "inclk0" -- Retrieval info: PRIVATE: RECONFIG_FILE STRING "serial_pll.mif" -- Retrieval info: PRIVATE: SACN_INPUTS_CHECK STRING "0" -- Retrieval info: PRIVATE: SCAN_FEATURE_ENABLED STRING "1" -- Retrieval info: PRIVATE: SELF_RESET_LOCK_LOSS STRING "0" -- Retrieval info: PRIVATE: SHORT_SCAN_RADIO STRING "0" -- Retrieval info: PRIVATE: SPREAD_FEATURE_ENABLED STRING "0" -- Retrieval info: PRIVATE: SPREAD_FREQ STRING "50.000" -- Retrieval info: PRIVATE: SPREAD_FREQ_UNIT STRING "KHz" -- Retrieval info: PRIVATE: SPREAD_PERCENT STRING "0.500" -- Retrieval info: PRIVATE: SPREAD_USE STRING "0" -- Retrieval info: PRIVATE: SRC_SYNCH_COMP_RADIO STRING "0" -- Retrieval info: PRIVATE: STICKY_CLK0 STRING "1" -- Retrieval info: PRIVATE: SWITCHOVER_COUNT_EDIT NUMERIC "1" -- Retrieval info: PRIVATE: SWITCHOVER_FEATURE_ENABLED STRING "1" -- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" -- Retrieval info: PRIVATE: USE_CLK0 STRING "1" -- Retrieval info: PRIVATE: USE_CLKENA0 STRING "0" -- Retrieval info: PRIVATE: USE_MIL_SPEED_GRADE NUMERIC "0" -- Retrieval info: PRIVATE: ZERO_DELAY_RADIO STRING "0" -- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all -- Retrieval info: CONSTANT: BANDWIDTH_TYPE STRING "AUTO" -- Retrieval info: CONSTANT: CLK0_DIVIDE_BY NUMERIC "88" -- Retrieval info: CONSTANT: CLK0_DUTY_CYCLE NUMERIC "50" -- Retrieval info: CONSTANT: CLK0_MULTIPLY_BY NUMERIC "105" -- Retrieval info: CONSTANT: CLK0_PHASE_SHIFT STRING "0" -- Retrieval info: CONSTANT: COMPENSATE_CLOCK STRING "CLK0" -- Retrieval info: CONSTANT: INCLK0_INPUT_FREQUENCY NUMERIC "26041" -- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone IV E" -- Retrieval info: CONSTANT: LPM_TYPE STRING "altpll" -- Retrieval info: CONSTANT: OPERATION_MODE STRING "NORMAL" -- Retrieval info: CONSTANT: PLL_TYPE STRING "AUTO" -- Retrieval info: CONSTANT: PORT_ACTIVECLOCK STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_ARESET STRING "PORT_USED" -- Retrieval info: CONSTANT: PORT_CLKBAD0 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_CLKBAD1 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_CLKLOSS STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_CLKSWITCH STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_CONFIGUPDATE STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_FBIN STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_INCLK0 STRING "PORT_USED" -- Retrieval info: CONSTANT: PORT_INCLK1 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_LOCKED STRING "PORT_USED" -- Retrieval info: CONSTANT: PORT_PFDENA STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_PHASECOUNTERSELECT STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_PHASEDONE STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_PHASESTEP STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_PHASEUPDOWN STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_PLLENA STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_SCANACLR STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_SCANCLK STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_SCANCLKENA STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_SCANDATA STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_SCANDATAOUT STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_SCANDONE STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_SCANREAD STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_SCANWRITE STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_clk0 STRING "PORT_USED" -- Retrieval info: CONSTANT: PORT_clk1 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_clk2 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_clk3 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_clk4 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_clk5 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_clkena0 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_clkena1 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_clkena2 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_clkena3 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_clkena4 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_clkena5 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_extclk0 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_extclk1 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_extclk2 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: PORT_extclk3 STRING "PORT_UNUSED" -- Retrieval info: CONSTANT: SELF_RESET_ON_LOSS_LOCK STRING "OFF" -- Retrieval info: CONSTANT: WIDTH_CLOCK NUMERIC "5" -- Retrieval info: USED_PORT: @clk 0 0 5 0 OUTPUT_CLK_EXT VCC "@clk[4..0]" -- Retrieval info: USED_PORT: @inclk 0 0 2 0 INPUT_CLK_EXT VCC "@inclk[1..0]" -- Retrieval info: USED_PORT: areset 0 0 0 0 INPUT GND "areset" -- Retrieval info: USED_PORT: c0 0 0 0 0 OUTPUT_CLK_EXT VCC "c0" -- Retrieval info: USED_PORT: inclk0 0 0 0 0 INPUT_CLK_EXT GND "inclk0" -- Retrieval info: USED_PORT: locked 0 0 0 0 OUTPUT GND "locked" -- Retrieval info: CONNECT: @areset 0 0 0 0 areset 0 0 0 0 -- Retrieval info: CONNECT: @inclk 0 0 1 1 GND 0 0 0 0 -- Retrieval info: CONNECT: @inclk 0 0 1 0 inclk0 0 0 0 0 -- Retrieval info: CONNECT: c0 0 0 0 0 @clk 0 0 1 0 -- Retrieval info: CONNECT: locked 0 0 0 0 @locked 0 0 0 0 -- Retrieval info: GEN_FILE: TYPE_NORMAL serial_pll.vhd TRUE -- Retrieval info: GEN_FILE: TYPE_NORMAL serial_pll.ppf TRUE -- Retrieval info: GEN_FILE: TYPE_NORMAL serial_pll.inc FALSE -- Retrieval info: GEN_FILE: TYPE_NORMAL serial_pll.cmp FALSE -- Retrieval info: GEN_FILE: TYPE_NORMAL serial_pll.bsf FALSE -- Retrieval info: GEN_FILE: TYPE_NORMAL serial_pll_inst.vhd FALSE -- Retrieval info: LIB_FILE: altera_mf -- Retrieval info: CBX_MODULE_PREFIX: ON bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/000077500000000000000000000000001457144405000205635ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/README-adi.md000066400000000000000000000032551457144405000226020ustar00rootroot00000000000000# Subtree Instructions The hdl/ subdirectory is a git subtree. ## Creating the subtree Clear `hdl/fpga/ip/analogdevicesinc/hdl` to pave the way for the subtree: ``` rm -rf hdl/fpga/ip/analogdevicesinc/hdl git add hdl/ git commit -m 'hdl/analogdevicesinc: remove manual adi hdl codebase integration' ``` Fetch vendor master: ``` git remote add adi-hdl https://github.com/analogdevicesinc/hdl.git git fetch adi-hdl master ``` Add the subtree: ``` git subtree add -P hdl/fpga/ip/analogdevicesinc/hdl adi-hdl/master --squash ``` Prune unneeded subdirectories: ``` cd hdl/fpga/ip/analogdevicesinc/hdl git rm -r library/* projects/* git reset HEAD library/axi_ad9361 library/axi_dmac library/common library/scripts \ library/util_axis_fifo library/util_axis_resize library/util_cpack library/util_upack \ projects/arradio git checkout -- library/axi_ad9361 library/axi_dmac library/common library/scripts \ library/util_axis_fifo library/util_axis_resize library/util_cpack library/util_upack \ projects/arradio git commit -m 'hdl/analogdevicesinc: prune unnecessary subdirectories from ADI repo' ``` Replay our modifications to the vendor code, omitting the oldest commit (1ed07b8, a commit of a copy of the ADI repo) and the three most recent commits (the rm of the hdl tree, and the two subtree merges): ``` git cherry-pick -X ours \ $(git rev-list --reverse HEAD~3 ^1ed07b8 hdl/fpga/ip/analogdevicesinc/hdl) ``` ## Updating the subtree Fetch new vendor master: ``` git remote add adi-hdl https://github.com/analogdevicesinc/hdl.git git fetch adi-hdl master ``` Merge the updated subtree: ``` git subtree merge -P hdl/fpga/ip/analogdevicesinc/hdl adi-hdl/master --squash ``` bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/000077500000000000000000000000001457144405000213325ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/.gitattributes000066400000000000000000000002121457144405000242200ustar00rootroot00000000000000* text=auto *.c text *.h text *.prj *.tcl text *.txt text *.ucf text *.v text *.vhd text *.xdc text *.xml text *.qsys text Makefile text bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/.gitignore000066400000000000000000000004561457144405000233270ustar00rootroot00000000000000*.cache *.data *.xpr *.log component.xml *.jou xgui *.runs *.srcs *.sdk .Xil *_INFO.txt *_dump.txt db *.asm.rpt *.done *.eda.rpt *.fit.* *.map.* *.sta.* *.qsf *.qpf *.qws *.sof hc_output hps_isw_handoff hps_sdram_*.csv incremental_db reconfig_mif *.sopcinfo *.jdi *.pin *.os *webtalk* *.xml *.hw gui bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/LICENSE000066400000000000000000000035721457144405000223460ustar00rootroot00000000000000 Copyright 2011(c) Analog Devices, Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of Analog Devices, Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - The use of this software may or may not infringe the patent rights of one or more patent holders. This license does not release you from the requirement that you obtain separate licenses from these patent holders to use this software. - Use of the software either in source or binary form, must be run on or directly connected to an Analog Devices Inc. component. THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/Makefile000066400000000000000000000024571457144405000230020ustar00rootroot00000000000000#################################################################################### #################################################################################### ## Copyright 2011(c) Analog Devices, Inc. ## Auto-generated, do not modify! #################################################################################### #################################################################################### help: @echo "" @echo "Please specify a target." @echo "" @echo "To make all projects:" @echo " make all" @echo "" @echo "To build a specific project:" @echo " make proj.board" @echo "e.g.," @echo " make fmcomms1.zed" PROJECTS := $(filter-out $(NO_PROJ), $(shell ls projects)) define PROJECT_RULE $1.$2: cd projects/$1/$2; make endef define APROJECT_RULE $(foreach archname,$(shell ls projects/$1), $(eval $(call PROJECT_RULE,$1,$(archname)))) endef $(foreach projname,$(PROJECTS), $(eval $(call APROJECT_RULE,$(projname)))) .PHONY: lib all clean clean-all lib: make -C library/ all all: make -C projects/ all clean: make -C projects/ clean clean-all:clean make -C projects/ clean make -C library/ clean #################################################################################### #################################################################################### bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/README.md000066400000000000000000000012611457144405000226110ustar00rootroot00000000000000# HDL Reference Designs [Analog Devices Inc.] HDL libraries and projects ### Branches Each release has its own branch and master always synced with the latest release. To find out more information about the latest release please check the release notes. Every branch, which has **dev** in its name, is a development branch and should handle it accordingly. ### [Latest Release Notes] ### [HDL User Guide] ### [HDL Help & Support] [HDL User Guide]:http://wiki.analog.com/resources/fpga/docs/hdl [HDL Help & Support]:http://ez.analog.com/community/fpga [Latest Release Notes]:https://github.com/analogdevicesinc/hdl/releases [Analog Devices Inc.]:http://www.analog.com/en/index.html bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/000077500000000000000000000000001457144405000227765ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_ad9361/000077500000000000000000000000001457144405000245465ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_ad9361/Makefile000066400000000000000000000042471457144405000262150ustar00rootroot00000000000000#################################################################################### #################################################################################### ## Copyright 2011(c) Analog Devices, Inc. ## Auto-generated, do not modify! #################################################################################### #################################################################################### M_DEPS := axi_ad9361_ip.tcl M_DEPS += ../scripts/adi_env.tcl M_DEPS += ../scripts/adi_ip.tcl M_DEPS += ../common/ad_axi_ip_constr.xdc M_DEPS += ../common/ad_rst.v M_DEPS += ../common/ad_lvds_clk.v M_DEPS += ../common/ad_lvds_in.v M_DEPS += ../common/ad_lvds_out.v M_DEPS += ../common/ad_mul.v M_DEPS += ../common/ad_pnmon.v M_DEPS += ../common/ad_dds_sine.v M_DEPS += ../common/ad_dds_1.v M_DEPS += ../common/ad_dds.v M_DEPS += ../common/ad_datafmt.v M_DEPS += ../common/ad_dcfilter.v M_DEPS += ../common/ad_iqcor.v M_DEPS += ../common/ad_addsub.v M_DEPS += ../common/ad_tdd_control.v M_DEPS += ../common/up_axi.v M_DEPS += ../common/up_xfer_cntrl.v M_DEPS += ../common/up_xfer_status.v M_DEPS += ../common/up_clock_mon.v M_DEPS += ../common/up_delay_cntrl.v M_DEPS += ../common/up_adc_common.v M_DEPS += ../common/up_adc_channel.v M_DEPS += ../common/up_dac_common.v M_DEPS += ../common/up_dac_channel.v M_DEPS += ../common/up_tdd_cntrl.v M_DEPS += axi_ad9361_constr.xdc M_DEPS += axi_ad9361_dev_if.v M_DEPS += axi_ad9361_rx_pnmon.v M_DEPS += axi_ad9361_rx_channel.v M_DEPS += axi_ad9361_rx.v M_DEPS += axi_ad9361_tx_channel.v M_DEPS += axi_ad9361_tx.v M_DEPS += axi_ad9361_tdd.v M_DEPS += axi_ad9361_tdd_if.v M_DEPS += axi_ad9361.v M_VIVADO := vivado -mode batch -source M_FLIST := *.cache M_FLIST += *.data M_FLIST += *.xpr M_FLIST += *.log M_FLIST += component.xml M_FLIST += *.jou M_FLIST += xgui M_FLIST += .Xil .PHONY: all clean clean-all all: axi_ad9361.xpr clean:clean-all clean-all: rm -rf $(M_FLIST) axi_ad9361.xpr: $(M_DEPS) rm -rf $(M_FLIST) $(M_VIVADO) axi_ad9361_ip.tcl >> axi_ad9361_ip.log 2>&1 #################################################################################### #################################################################################### bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_ad9361/axi_ad9361.qip000066400000000000000000000110271457144405000270320ustar00rootroot00000000000000# This file gets copied by Qsys into the work directory. # Need to use paths relative to that. set adi_ip_dir [file join $::quartus(qip_path) ../../../../../../fpga/ip/analogdevicesinc/hdl/] set nuand_ip_dir [file join $::quartus(qip_path) ../../../../../../fpga/ip/nuand/] set_global_assignment -name VERILOG_FILE [file normalize [file join $adi_ip_dir/library/common/ad_rst.v]] set_global_assignment -name VERILOG_FILE [file normalize [file join $adi_ip_dir/library/common/altera/ad_lvds_clk.v]] set_global_assignment -name VERILOG_FILE [file normalize [file join $adi_ip_dir/library/common/altera/ad_lvds_in.v]] set_global_assignment -name VERILOG_FILE [file normalize [file join $adi_ip_dir/library/common/altera/ad_lvds_out.v]] set_global_assignment -name VERILOG_FILE [file normalize [file join $adi_ip_dir/library/common/altera/MULT_MACRO.v]] set_global_assignment -name VERILOG_FILE [file normalize [file join $adi_ip_dir/library/common/altera/DSP48E1.v]] set_global_assignment -name VERILOG_FILE [file normalize [file join $adi_ip_dir/library/common/ad_mul.v]] set_global_assignment -name VERILOG_FILE [file normalize [file join $adi_ip_dir/library/common/ad_pnmon.v]] set_global_assignment -name VERILOG_FILE [file normalize [file join $adi_ip_dir/library/common/ad_dds_sine.v]] set_global_assignment -name VERILOG_FILE [file normalize [file join $adi_ip_dir/library/common/ad_dds_1.v]] set_global_assignment -name VERILOG_FILE [file normalize [file join $adi_ip_dir/library/common/ad_dds.v]] set_global_assignment -name VERILOG_FILE [file normalize [file join $adi_ip_dir/library/common/ad_datafmt.v]] set_global_assignment -name VERILOG_FILE [file normalize [file join $adi_ip_dir/library/common/ad_dcfilter.v]] set_global_assignment -name VERILOG_FILE [file normalize [file join $adi_ip_dir/library/common/ad_iqcor.v]] set_global_assignment -name VERILOG_FILE [file normalize [file join $adi_ip_dir/library/common/up_axi.v]] set_global_assignment -name VERILOG_FILE [file normalize [file join $adi_ip_dir/library/common/up_xfer_cntrl.v]] set_global_assignment -name VERILOG_FILE [file normalize [file join $adi_ip_dir/library/common/up_xfer_status.v]] set_global_assignment -name VERILOG_FILE [file normalize [file join $adi_ip_dir/library/common/up_clock_mon.v]] set_global_assignment -name VERILOG_FILE [file normalize [file join $adi_ip_dir/library/common/up_delay_cntrl.v]] set_global_assignment -name VERILOG_FILE [file normalize [file join $adi_ip_dir/library/common/up_adc_common.v]] set_global_assignment -name VERILOG_FILE [file normalize [file join $adi_ip_dir/library/common/up_adc_channel.v]] set_global_assignment -name VERILOG_FILE [file normalize [file join $adi_ip_dir/library/common/up_dac_common.v]] set_global_assignment -name VERILOG_FILE [file normalize [file join $adi_ip_dir/library/common/up_dac_channel.v]] set_global_assignment -name VERILOG_FILE [file normalize [file join $adi_ip_dir/library/common/up_tdd_cntrl.v]] set_global_assignment -name VERILOG_FILE [file normalize [file join $adi_ip_dir/library/common/ad_tdd_control.v]] set_global_assignment -name VERILOG_FILE [file normalize [file join $adi_ip_dir/library/common/ad_addsub.v]] set_global_assignment -name VERILOG_FILE [file normalize [file join $adi_ip_dir/library/axi_ad9361/axi_ad9361_alt_lvds_tx.v]] set_global_assignment -name VERILOG_FILE [file normalize [file join $adi_ip_dir/library/axi_ad9361/axi_ad9361_alt_lvds_rx.v]] set_global_assignment -name VERILOG_FILE [file normalize [file join $adi_ip_dir/library/axi_ad9361/axi_ad9361_dev_if_alt.v]] set_global_assignment -name VERILOG_FILE [file normalize [file join $adi_ip_dir/library/axi_ad9361/axi_ad9361_rx_pnmon.v]] set_global_assignment -name VERILOG_FILE [file normalize [file join $adi_ip_dir/library/axi_ad9361/axi_ad9361_rx_channel.v]] set_global_assignment -name VERILOG_FILE [file normalize [file join $adi_ip_dir/library/axi_ad9361/axi_ad9361_rx.v]] set_global_assignment -name VERILOG_FILE [file normalize [file join $adi_ip_dir/library/axi_ad9361/axi_ad9361_tx_channel.v]] set_global_assignment -name VERILOG_FILE [file normalize [file join $adi_ip_dir/library/axi_ad9361/axi_ad9361_tx.v]] set_global_assignment -name VERILOG_FILE [file normalize [file join $adi_ip_dir/library/axi_ad9361/axi_ad9361_tdd.v]] set_global_assignment -name VERILOG_FILE [file normalize [file join $adi_ip_dir/library/axi_ad9361/axi_ad9361_tdd_if.v]] set_global_assignment -name VERILOG_FILE [file normalize [file join $adi_ip_dir/library/axi_ad9361/axi_ad9361.v]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip_dir/pll_reset/vhdl/pll_reset.vhd]] bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_ad9361/axi_ad9361.v000066400000000000000000000372511457144405000265150ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module axi_ad9361 ( // physical interface (receive) rx_clk_in_p, rx_clk_in_n, rx_frame_in_p, rx_frame_in_n, rx_data_in_p, rx_data_in_n, // physical interface (transmit) tx_clk_out_p, tx_clk_out_n, tx_frame_out_p, tx_frame_out_n, tx_data_out_p, tx_data_out_n, // ensm control enable, txnrx, // transmit master/slave dac_sync_in, dac_sync_out, // tdd sync (1s pulse) tdd_sync, tdd_sync_en, tdd_terminal_type, // delay clock delay_clk, // master interface l_clk, clk, rst, // dma interface adc_enable_i0, adc_valid_i0, adc_data_i0, adc_enable_q0, adc_valid_q0, adc_data_q0, adc_enable_i1, adc_valid_i1, adc_data_i1, adc_enable_q1, adc_valid_q1, adc_data_q1, adc_dovf, adc_dunf, adc_r1_mode, dac_enable_i0, dac_valid_i0, dac_data_i0, dac_enable_q0, dac_valid_q0, dac_data_q0, dac_enable_i1, dac_valid_i1, dac_data_i1, dac_enable_q1, dac_valid_q1, dac_data_q1, dac_dovf, dac_dunf, dac_r1_mode, // axi interface s_axi_aclk, s_axi_aresetn, s_axi_awvalid, s_axi_awaddr, s_axi_awprot, s_axi_awready, s_axi_wvalid, s_axi_wdata, s_axi_wstrb, s_axi_wready, s_axi_bvalid, s_axi_bresp, s_axi_bready, s_axi_arvalid, s_axi_araddr, s_axi_arprot, s_axi_arready, s_axi_rvalid, s_axi_rdata, s_axi_rresp, s_axi_rready, // gpio up_enable, up_txnrx, up_dac_gpio_in, up_dac_gpio_out, up_adc_gpio_in, up_adc_gpio_out, // chipscope signals tdd_dbg); // parameters parameter ID = 0; parameter DEVICE_TYPE = 0; parameter DAC_IODELAY_ENABLE = 0; parameter IO_DELAY_GROUP = "dev_if_delay_group"; parameter DAC_DATAPATH_DISABLE = 0; parameter ADC_DATAPATH_DISABLE = 0; parameter DAC_DDS_DISABLE = 0; // physical interface (receive) input rx_clk_in_p; input rx_clk_in_n; input rx_frame_in_p; input rx_frame_in_n; input [ 5:0] rx_data_in_p; input [ 5:0] rx_data_in_n; // physical interface (transmit) output tx_clk_out_p; output tx_clk_out_n; output tx_frame_out_p; output tx_frame_out_n; output [ 5:0] tx_data_out_p; output [ 5:0] tx_data_out_n; // ensm control output enable; output txnrx; // transmit master/slave input dac_sync_in; output dac_sync_out; // tdd sync input tdd_sync; output tdd_sync_en; output tdd_terminal_type; // delay clock input delay_clk; // master interface output l_clk; input clk; output rst; // dma interface output adc_enable_i0; output adc_valid_i0; output [15:0] adc_data_i0; output adc_enable_q0; output adc_valid_q0; output [15:0] adc_data_q0; output adc_enable_i1; output adc_valid_i1; output [15:0] adc_data_i1; output adc_enable_q1; output adc_valid_q1; output [15:0] adc_data_q1; input adc_dovf; input adc_dunf; output adc_r1_mode; output dac_enable_i0; output dac_valid_i0; input [15:0] dac_data_i0; output dac_enable_q0; output dac_valid_q0; input [15:0] dac_data_q0; output dac_enable_i1; output dac_valid_i1; input [15:0] dac_data_i1; output dac_enable_q1; output dac_valid_q1; input [15:0] dac_data_q1; input dac_dovf; input dac_dunf; output dac_r1_mode; // axi interface input s_axi_aclk; input s_axi_aresetn; input s_axi_awvalid; input [31:0] s_axi_awaddr; input [ 2:0] s_axi_awprot; output s_axi_awready; input s_axi_wvalid; input [31:0] s_axi_wdata; input [ 3:0] s_axi_wstrb; output s_axi_wready; output s_axi_bvalid; output [ 1:0] s_axi_bresp; input s_axi_bready; input s_axi_arvalid; input [31:0] s_axi_araddr; input [ 2:0] s_axi_arprot; output s_axi_arready; output s_axi_rvalid; output [31:0] s_axi_rdata; output [ 1:0] s_axi_rresp; input s_axi_rready; // gpio input up_enable; input up_txnrx; input [31:0] up_dac_gpio_in; output [31:0] up_dac_gpio_out; input [31:0] up_adc_gpio_in; output [31:0] up_adc_gpio_out; // chipscope signals output [41:0] tdd_dbg; // derived parameters localparam DAC_DDS_DISABLE_INT = (DAC_DATAPATH_DISABLE == 1) ? 1 : DAC_DDS_DISABLE; // internal registers reg up_wack = 'd0; reg up_rack = 'd0; reg [31:0] up_rdata = 'd0; // internal clocks and resets wire up_clk; wire up_rstn; wire delay_rst; // internal signals wire adc_ddr_edgesel; wire adc_valid_s; wire [47:0] adc_data_s; wire adc_status_s; wire adc_valid_i0_s; wire adc_valid_q0_s; wire adc_valid_i1_s; wire adc_valid_q1_s; wire dac_valid_s; wire [47:0] dac_data_s; wire dac_valid_i0_s; wire dac_valid_q0_s; wire dac_valid_i1_s; wire dac_valid_q1_s; wire [ 6:0] up_adc_dld_s; wire [34:0] up_adc_dwdata_s; wire [34:0] up_adc_drdata_s; wire [ 9:0] up_dac_dld_s; wire [49:0] up_dac_dwdata_s; wire [49:0] up_dac_drdata_s; wire delay_locked_s; wire up_wreq_s; wire [13:0] up_waddr_s; wire [31:0] up_wdata_s; wire up_wack_rx_s; wire up_wack_tx_s; wire up_rreq_s; wire [13:0] up_raddr_s; wire [31:0] up_rdata_rx_s; wire up_rack_rx_s; wire [31:0] up_rdata_tx_s; wire up_rack_tx_s; wire up_wack_tdd_s; wire up_rack_tdd_s; wire [31:0] up_rdata_tdd_s; wire tdd_tx_dp_en_s; wire tdd_rx_vco_en_s; wire tdd_tx_vco_en_s; wire tdd_rx_rf_en_s; wire tdd_tx_rf_en_s; wire [ 7:0] tdd_status_s; wire tdd_enable_s; wire tdd_txnrx_s; wire tdd_mode_s; // signal name changes assign up_clk = s_axi_aclk; assign up_rstn = s_axi_aresetn; // processor read interface always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_wack <= 'd0; up_rack <= 'd0; up_rdata <= 'd0; end else begin up_wack <= up_wack_rx_s | up_wack_tx_s | up_wack_tdd_s; up_rack <= up_rack_rx_s | up_rack_tx_s | up_rack_tdd_s; up_rdata <= up_rdata_rx_s | up_rdata_tx_s | up_rdata_tdd_s; end end // device interface axi_ad9361_dev_if #( .DEVICE_TYPE (DEVICE_TYPE), .DAC_IODELAY_ENABLE (DAC_IODELAY_ENABLE), .IO_DELAY_GROUP (IO_DELAY_GROUP)) i_dev_if ( .rx_clk_in_p (rx_clk_in_p), .rx_clk_in_n (rx_clk_in_n), .rx_frame_in_p (rx_frame_in_p), .rx_frame_in_n (rx_frame_in_n), .rx_data_in_p (rx_data_in_p), .rx_data_in_n (rx_data_in_n), .tx_clk_out_p (tx_clk_out_p), .tx_clk_out_n (tx_clk_out_n), .tx_frame_out_p (tx_frame_out_p), .tx_frame_out_n (tx_frame_out_n), .tx_data_out_p (tx_data_out_p), .tx_data_out_n (tx_data_out_n), .enable (enable), .txnrx (txnrx), .rst (rst), .clk (clk), .l_clk (l_clk), .adc_valid (adc_valid_s), .adc_data (adc_data_s), .adc_status (adc_status_s), .adc_r1_mode (adc_r1_mode), .adc_ddr_edgesel (adc_ddr_edgesel), .dac_valid (dac_valid_s), .dac_data (dac_data_s), .dac_r1_mode (dac_r1_mode), .tdd_enable (tdd_enable_s), .tdd_txnrx (tdd_txnrx_s), .tdd_mode (tdd_mode_s), .up_clk (up_clk), .up_enable (up_enable), .up_txnrx (up_txnrx), .up_adc_dld (up_adc_dld_s), .up_adc_dwdata (up_adc_dwdata_s), .up_adc_drdata (up_adc_drdata_s), .up_dac_dld (up_dac_dld_s), .up_dac_dwdata (up_dac_dwdata_s), .up_dac_drdata (up_dac_drdata_s), .delay_clk (delay_clk), .delay_rst (delay_rst), .delay_locked (delay_locked_s)); // TDD interface axi_ad9361_tdd_if #(.LEVEL_OR_PULSE_N(1)) i_tdd_if ( .clk (clk), .rst (rst), .tdd_rx_vco_en (tdd_rx_vco_en_s), .tdd_tx_vco_en (tdd_tx_vco_en_s), .tdd_rx_rf_en (tdd_rx_rf_en_s), .tdd_tx_rf_en (tdd_tx_rf_en_s), .ad9361_txnrx (tdd_txnrx_s), .ad9361_enable (tdd_enable_s), .ad9361_tdd_status (tdd_status_s)); // TDD control axi_ad9361_tdd i_tdd ( .clk (clk), .rst (rst), .tdd_rx_vco_en (tdd_rx_vco_en_s), .tdd_tx_vco_en (tdd_tx_vco_en_s), .tdd_rx_rf_en (tdd_rx_rf_en_s), .tdd_tx_rf_en (tdd_tx_rf_en_s), .tdd_enabled (tdd_mode_s), .tdd_status (tdd_status_s), .tdd_sync (tdd_sync), .tdd_sync_en (tdd_sync_en), .tdd_terminal_type (tdd_terminal_type), .tx_valid_i0 (dac_valid_i0_s), .tx_valid_q0 (dac_valid_q0_s), .tx_valid_i1 (dac_valid_i1_s), .tx_valid_q1 (dac_valid_q1_s), .tdd_tx_valid_i0 (dac_valid_i0), .tdd_tx_valid_q0 (dac_valid_q0), .tdd_tx_valid_i1 (dac_valid_i1), .tdd_tx_valid_q1 (dac_valid_q1), .rx_valid_i0 (adc_valid_i0_s), .rx_valid_q0 (adc_valid_q0_s), .rx_valid_i1 (adc_valid_i1_s), .rx_valid_q1 (adc_valid_q1_s), .tdd_rx_valid_i0 (adc_valid_i0), .tdd_rx_valid_q0 (adc_valid_q0), .tdd_rx_valid_i1 (adc_valid_i1), .tdd_rx_valid_q1 (adc_valid_q1), .up_rstn (up_rstn), .up_clk (up_clk), .up_wreq (up_wreq_s), .up_waddr (up_waddr_s), .up_wdata (up_wdata_s), .up_wack (up_wack_tdd_s), .up_rreq (up_rreq_s), .up_raddr (up_raddr_s), .up_rdata (up_rdata_tdd_s), .up_rack (up_rack_tdd_s), .tdd_dbg (tdd_dbg)); // receive axi_ad9361_rx #( .ID (ID), .DATAPATH_DISABLE (ADC_DATAPATH_DISABLE)) i_rx ( .adc_rst (rst), .adc_clk (clk), .adc_valid (adc_valid_s), .adc_data (adc_data_s), .adc_status (adc_status_s), .adc_r1_mode (adc_r1_mode), .adc_ddr_edgesel (adc_ddr_edgesel), .dac_data (dac_data_s), .up_dld (up_adc_dld_s), .up_dwdata (up_adc_dwdata_s), .up_drdata (up_adc_drdata_s), .delay_clk (delay_clk), .delay_rst (delay_rst), .delay_locked (delay_locked_s), .adc_enable_i0 (adc_enable_i0), .adc_valid_i0 (adc_valid_i0_s), .adc_data_i0 (adc_data_i0), .adc_enable_q0 (adc_enable_q0), .adc_valid_q0 (adc_valid_q0_s), .adc_data_q0 (adc_data_q0), .adc_enable_i1 (adc_enable_i1), .adc_valid_i1 (adc_valid_i1_s), .adc_data_i1 (adc_data_i1), .adc_enable_q1 (adc_enable_q1), .adc_valid_q1 (adc_valid_q1_s), .adc_data_q1 (adc_data_q1), .adc_dovf (adc_dovf), .adc_dunf (adc_dunf), .up_adc_gpio_in (up_adc_gpio_in), .up_adc_gpio_out (up_adc_gpio_out), .up_rstn (up_rstn), .up_clk (up_clk), .up_wreq (up_wreq_s), .up_waddr (up_waddr_s), .up_wdata (up_wdata_s), .up_wack (up_wack_rx_s), .up_rreq (up_rreq_s), .up_raddr (up_raddr_s), .up_rdata (up_rdata_rx_s), .up_rack (up_rack_rx_s)); // transmit axi_ad9361_tx #( .ID (ID), .DDS_DISABLE (DAC_DDS_DISABLE_INT), .DATAPATH_DISABLE (DAC_DATAPATH_DISABLE)) i_tx ( .dac_clk (clk), .dac_valid (dac_valid_s), .dac_data (dac_data_s), .dac_r1_mode (dac_r1_mode), .adc_data (adc_data_s), .up_dld (up_dac_dld_s), .up_dwdata (up_dac_dwdata_s), .up_drdata (up_dac_drdata_s), .delay_clk (delay_clk), .delay_rst (), .delay_locked (delay_locked_s), .dac_sync_in (dac_sync_in), .dac_sync_out (dac_sync_out), .dac_enable_i0 (dac_enable_i0), .dac_valid_i0 (dac_valid_i0_s), .dac_data_i0 (dac_data_i0), .dac_enable_q0 (dac_enable_q0), .dac_valid_q0 (dac_valid_q0_s), .dac_data_q0 (dac_data_q0), .dac_enable_i1 (dac_enable_i1), .dac_valid_i1 (dac_valid_i1_s), .dac_data_i1 (dac_data_i1), .dac_enable_q1 (dac_enable_q1), .dac_valid_q1 (dac_valid_q1_s), .dac_data_q1 (dac_data_q1), .dac_dovf(dac_dovf), .dac_dunf(dac_dunf), .up_dac_gpio_in (up_dac_gpio_in), .up_dac_gpio_out (up_dac_gpio_out), .up_rstn (up_rstn), .up_clk (up_clk), .up_wreq (up_wreq_s), .up_waddr (up_waddr_s), .up_wdata (up_wdata_s), .up_wack (up_wack_tx_s), .up_rreq (up_rreq_s), .up_raddr (up_raddr_s), .up_rdata (up_rdata_tx_s), .up_rack (up_rack_tx_s)); // axi interface up_axi i_up_axi ( .up_rstn (up_rstn), .up_clk (up_clk), .up_axi_awvalid (s_axi_awvalid), .up_axi_awaddr (s_axi_awaddr), .up_axi_awready (s_axi_awready), .up_axi_wvalid (s_axi_wvalid), .up_axi_wdata (s_axi_wdata), .up_axi_wstrb (s_axi_wstrb), .up_axi_wready (s_axi_wready), .up_axi_bvalid (s_axi_bvalid), .up_axi_bresp (s_axi_bresp), .up_axi_bready (s_axi_bready), .up_axi_arvalid (s_axi_arvalid), .up_axi_araddr (s_axi_araddr), .up_axi_arready (s_axi_arready), .up_axi_rvalid (s_axi_rvalid), .up_axi_rresp (s_axi_rresp), .up_axi_rdata (s_axi_rdata), .up_axi_rready (s_axi_rready), .up_wreq (up_wreq_s), .up_waddr (up_waddr_s), .up_wdata (up_wdata_s), .up_wack (up_wack), .up_rreq (up_rreq_s), .up_raddr (up_raddr_s), .up_rdata (up_rdata), .up_rack (up_rack)); endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_ad9361/axi_ad9361_alt_lvds_rx.v000066400000000000000000000157301457144405000311140ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module axi_ad9361_alt_lvds_rx ( // physical interface (receive) rx_clk_in_p, rx_clk_in_n, rx_frame_in_p, rx_frame_in_n, rx_data_in_p, rx_data_in_n, // data interface clk, rx_frame, rx_data_0, rx_data_1, rx_data_2, rx_data_3, rx_locked, rx_pll_reset); // physical interface (receive) input rx_clk_in_p; input rx_clk_in_n; input rx_frame_in_p; input rx_frame_in_n; input [ 5:0] rx_data_in_p; input [ 5:0] rx_data_in_n; // data interface output clk; output [ 3:0] rx_frame; output [ 5:0] rx_data_0; output [ 5:0] rx_data_1; output [ 5:0] rx_data_2; output [ 5:0] rx_data_3; output rx_locked; input rx_pll_reset; // internal signals wire [27:0] rx_data_s; // instantiations assign rx_frame[3] = rx_data_s[24]; assign rx_frame[2] = rx_data_s[25]; assign rx_frame[1] = rx_data_s[26]; assign rx_frame[0] = rx_data_s[27]; assign rx_data_3[5] = rx_data_s[20]; assign rx_data_3[4] = rx_data_s[16]; assign rx_data_3[3] = rx_data_s[12]; assign rx_data_3[2] = rx_data_s[ 8]; assign rx_data_3[1] = rx_data_s[ 4]; assign rx_data_3[0] = rx_data_s[ 0]; assign rx_data_2[5] = rx_data_s[21]; assign rx_data_2[4] = rx_data_s[17]; assign rx_data_2[3] = rx_data_s[13]; assign rx_data_2[2] = rx_data_s[ 9]; assign rx_data_2[1] = rx_data_s[ 5]; assign rx_data_2[0] = rx_data_s[ 1]; assign rx_data_1[5] = rx_data_s[22]; assign rx_data_1[4] = rx_data_s[18]; assign rx_data_1[3] = rx_data_s[14]; assign rx_data_1[2] = rx_data_s[10]; assign rx_data_1[1] = rx_data_s[ 6]; assign rx_data_1[0] = rx_data_s[ 2]; assign rx_data_0[5] = rx_data_s[23]; assign rx_data_0[4] = rx_data_s[19]; assign rx_data_0[3] = rx_data_s[15]; assign rx_data_0[2] = rx_data_s[11]; assign rx_data_0[1] = rx_data_s[ 7]; assign rx_data_0[0] = rx_data_s[ 3]; altlvds_rx #( .buffer_implementation ("RAM"), .cds_mode ("UNUSED"), .common_rx_tx_pll ("ON"), .data_align_rollover (4), .data_rate ("500.0 Mbps"), .deserialization_factor (4), .dpa_initial_phase_value (0), .dpll_lock_count (0), .dpll_lock_window (0), .enable_clock_pin_mode ("UNUSED"), .enable_dpa_align_to_rising_edge_only ("OFF"), .enable_dpa_calibration ("ON"), .enable_dpa_fifo ("UNUSED"), .enable_dpa_initial_phase_selection ("OFF"), .enable_dpa_mode ("OFF"), .enable_dpa_pll_calibration ("OFF"), .enable_soft_cdr_mode ("OFF"), .implement_in_les ("OFF"), .inclock_boost (0), .inclock_data_alignment ("EDGE_ALIGNED"), .inclock_period (4000), .inclock_phase_shift (0), .input_data_rate (500), .intended_device_family ("Cyclone V"), .lose_lock_on_one_change ("UNUSED"), .lpm_hint ("CBX_MODULE_PREFIX=axi_ad9361_alt_lvds_rx"), .lpm_type ("altlvds_rx"), .number_of_channels (7), .outclock_resource ("AUTO"), .pll_operation_mode ("NORMAL"), .pll_self_reset_on_loss_lock ("UNUSED"), .port_rx_channel_data_align ("PORT_UNUSED"), .port_rx_data_align ("PORT_UNUSED"), .refclk_frequency ("250.000000 MHz"), .registered_data_align_input ("UNUSED"), .registered_output ("ON"), .reset_fifo_at_first_lock ("UNUSED"), .rx_align_data_reg ("RISING_EDGE"), .sim_dpa_is_negative_ppm_drift ("OFF"), .sim_dpa_net_ppm_variation (0), .sim_dpa_output_clock_phase_shift (0), .use_coreclock_input ("OFF"), .use_dpll_rawperror ("OFF"), .use_external_pll ("OFF"), .use_no_phase_shift ("ON"), .x_on_bitslip ("ON"), .clk_src_is_pll ("off")) i_altlvds_rx ( .rx_inclock (rx_clk_in_p), .rx_in ({rx_frame_in_p, rx_data_in_p}), .rx_outclock (clk), .rx_out (rx_data_s), .rx_locked (rx_locked), .dpa_pll_cal_busy (), .dpa_pll_recal (1'b0), .pll_areset (rx_pll_reset), .pll_phasecounterselect (), .pll_phasedone (1'b1), .pll_phasestep (), .pll_phaseupdown (), .pll_scanclk (), .rx_cda_max (), .rx_cda_reset ({7{1'b0}}), .rx_channel_data_align ({7{1'b0}}), .rx_coreclk ({7{1'b1}}), .rx_data_align (1'b0), .rx_data_align_reset (1'b0), .rx_data_reset (1'b0), .rx_deskew (1'b0), .rx_divfwdclk (), .rx_dpa_lock_reset ({7{1'b0}}), .rx_dpa_locked (), .rx_dpaclock (1'b0), .rx_dpll_enable ({7{1'b1}}), .rx_dpll_hold ({7{1'b0}}), .rx_dpll_reset ({7{1'b0}}), .rx_enable (1'b1), .rx_fifo_reset ({7{1'b0}}), .rx_pll_enable (1'b1), .rx_readclock (1'b0), .rx_reset ({7{1'b0}}), .rx_syncclock (1'b0)); endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_ad9361/axi_ad9361_alt_lvds_tx.v000066400000000000000000000142771457144405000311230ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module axi_ad9361_alt_lvds_tx ( // physical interface (transmit) tx_clk_out_p, tx_clk_out_n, tx_frame_out_p, tx_frame_out_n, tx_data_out_p, tx_data_out_n, // data interface tx_clk, clk, tx_frame, tx_data_0, tx_data_1, tx_data_2, tx_data_3, tx_locked, tx_pll_reset); // physical interface (transmit) output tx_clk_out_p; output tx_clk_out_n; output tx_frame_out_p; output tx_frame_out_n; output [ 5:0] tx_data_out_p; output [ 5:0] tx_data_out_n; // data interface input tx_clk; input clk; input [ 3:0] tx_frame; input [ 5:0] tx_data_0; input [ 5:0] tx_data_1; input [ 5:0] tx_data_2; input [ 5:0] tx_data_3; output tx_locked; input tx_pll_reset; // internal registers reg [27:0] tx_data_n = 'd0; reg [27:0] tx_data_p = 'd0; // internal signals wire core_clk; wire [27:0] tx_data_s; // instantiations assign tx_clk_out_n = 1'd0; assign tx_frame_out_n = 1'd0; assign tx_data_out_n = 6'd0; assign tx_data_s[24] = tx_frame[3]; assign tx_data_s[25] = tx_frame[2]; assign tx_data_s[26] = tx_frame[1]; assign tx_data_s[27] = tx_frame[0]; assign tx_data_s[20] = tx_data_3[5]; assign tx_data_s[16] = tx_data_3[4]; assign tx_data_s[12] = tx_data_3[3]; assign tx_data_s[ 8] = tx_data_3[2]; assign tx_data_s[ 4] = tx_data_3[1]; assign tx_data_s[ 0] = tx_data_3[0]; assign tx_data_s[21] = tx_data_2[5]; assign tx_data_s[17] = tx_data_2[4]; assign tx_data_s[13] = tx_data_2[3]; assign tx_data_s[ 9] = tx_data_2[2]; assign tx_data_s[ 5] = tx_data_2[1]; assign tx_data_s[ 1] = tx_data_2[0]; assign tx_data_s[22] = tx_data_1[5]; assign tx_data_s[18] = tx_data_1[4]; assign tx_data_s[14] = tx_data_1[3]; assign tx_data_s[10] = tx_data_1[2]; assign tx_data_s[ 6] = tx_data_1[1]; assign tx_data_s[ 2] = tx_data_1[0]; assign tx_data_s[23] = tx_data_0[5]; assign tx_data_s[19] = tx_data_0[4]; assign tx_data_s[15] = tx_data_0[3]; assign tx_data_s[11] = tx_data_0[2]; assign tx_data_s[ 7] = tx_data_0[1]; assign tx_data_s[ 3] = tx_data_0[0]; always @(negedge clk) begin tx_data_n <= tx_data_s; end always @(posedge core_clk) begin tx_data_p <= tx_data_n; end altlvds_tx #( .center_align_msb ("UNUSED"), .common_rx_tx_pll ("ON"), .coreclock_divide_by (1), .data_rate ("500.0 Mbps"), .deserialization_factor (4), .differential_drive (0), .enable_clock_pin_mode ("UNUSED"), .implement_in_les ("OFF"), .inclock_boost (0), .inclock_data_alignment ("EDGE_ALIGNED"), .inclock_period (4000), .inclock_phase_shift (0), .intended_device_family ("Cyclone V"), .lpm_hint ("CBX_MODULE_PREFIX=axi_ad9361_alt_lvds_tx"), .lpm_type ("altlvds_tx"), .multi_clock ("OFF"), .number_of_channels (7), .outclock_alignment ("EDGE_ALIGNED"), .outclock_divide_by (2), .outclock_duty_cycle (50), .outclock_multiply_by (1), .outclock_phase_shift (0), .outclock_resource ("AUTO"), .output_data_rate (500), .pll_compensation_mode ("AUTO"), .pll_self_reset_on_loss_lock ("OFF"), .preemphasis_setting (0), .refclk_frequency ("250.000000 MHz"), .registered_input ("TX_CORECLK"), .use_external_pll ("OFF"), .use_no_phase_shift ("ON"), .vod_setting (0), .clk_src_is_pll ("off")) i_altlvds_tx ( .tx_inclock (tx_clk), .tx_coreclock (core_clk), .tx_in (tx_data_p), .tx_outclock (tx_clk_out_p), .tx_out ({tx_frame_out_p, tx_data_out_p}), .tx_locked (tx_locked), .pll_areset (tx_pll_reset), .sync_inclock (1'b0), .tx_data_reset (1'b0), .tx_enable (1'b1), .tx_pll_enable (1'b1), .tx_syncclock (1'b0)); endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_ad9361/axi_ad9361_constr.xdc000066400000000000000000000007641457144405000304150ustar00rootroot00000000000000 set_property shreg_extract no [get_cells -hier -filter {name =~ *enable_up*}] set_property shreg_extract no [get_cells -hier -filter {name =~ *txnrx_up*}] set_false_path -from [get_cells -hier -filter {name =~ *up_enable_int_reg && IS_SEQUENTIAL}] -to [get_cells -hier -filter {name =~ *enable_up_m1_reg && IS_SEQUENTIAL}] set_false_path -from [get_cells -hier -filter {name =~ *up_txnrx_int_reg && IS_SEQUENTIAL}] -to [get_cells -hier -filter {name =~ *txnrx_up_m1_reg && IS_SEQUENTIAL}] bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_ad9361/axi_ad9361_dev_if.v000066400000000000000000000417011457144405000300240ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // This interface includes both the transmit and receive components - // They both uses the same clock (sourced from the receiving side). `timescale 1ns/100ps module axi_ad9361_dev_if ( // physical interface (receive) rx_clk_in_p, rx_clk_in_n, rx_frame_in_p, rx_frame_in_n, rx_data_in_p, rx_data_in_n, // physical interface (transmit) tx_clk_out_p, tx_clk_out_n, tx_frame_out_p, tx_frame_out_n, tx_data_out_p, tx_data_out_n, // ensm control enable, txnrx, // clock (common to both receive and transmit) rst, clk, l_clk, // receive data path interface adc_valid, adc_data, adc_status, adc_r1_mode, adc_ddr_edgesel, // transmit data path interface dac_valid, dac_data, dac_r1_mode, // tdd interface tdd_enable, tdd_txnrx, tdd_mode, // delay interface up_clk, up_enable, up_txnrx, up_adc_dld, up_adc_dwdata, up_adc_drdata, up_dac_dld, up_dac_dwdata, up_dac_drdata, delay_clk, delay_rst, delay_locked); // this parameter controls the buffer type based on the target device. parameter DEVICE_TYPE = 0; parameter DAC_IODELAY_ENABLE = 0; parameter IO_DELAY_GROUP = "dev_if_delay_group"; // physical interface (receive) input rx_clk_in_p; input rx_clk_in_n; input rx_frame_in_p; input rx_frame_in_n; input [ 5:0] rx_data_in_p; input [ 5:0] rx_data_in_n; // physical interface (transmit) output tx_clk_out_p; output tx_clk_out_n; output tx_frame_out_p; output tx_frame_out_n; output [ 5:0] tx_data_out_p; output [ 5:0] tx_data_out_n; // ensm control output enable; output txnrx; // clock (common to both receive and transmit) input rst; input clk; output l_clk; // receive data path interface output adc_valid; output [47:0] adc_data; output adc_status; input adc_r1_mode; input adc_ddr_edgesel; // transmit data path interface input dac_valid; input [47:0] dac_data; input dac_r1_mode; // tdd interface input tdd_enable; input tdd_txnrx; input tdd_mode; // delay interface input up_clk; input up_enable; input up_txnrx; input [ 6:0] up_adc_dld; input [34:0] up_adc_dwdata; output [34:0] up_adc_drdata; input [ 9:0] up_dac_dld; input [49:0] up_dac_dwdata; output [49:0] up_dac_drdata; input delay_clk; input delay_rst; output delay_locked; // internal registers reg [ 5:0] rx_data_p = 0; reg rx_frame_p = 0; reg [ 1:0] rx_ccnt = 0; reg rx_calign = 0; reg rx_align = 0; reg [11:0] rx_data = 'd0; reg [ 1:0] rx_frame = 'd0; reg [11:0] rx_data_d = 'd0; reg [ 1:0] rx_frame_d = 'd0; reg rx_error_r1 = 'd0; reg rx_valid_r1 = 'd0; reg [23:0] rx_data_r1 = 'd0; reg rx_error_r2 = 'd0; reg rx_valid_r2 = 'd0; reg [47:0] rx_data_r2 = 'd0; reg adc_p_valid = 'd0; reg [47:0] adc_p_data = 'd0; reg adc_p_status = 'd0; reg adc_n_valid = 'd0; reg [47:0] adc_n_data = 'd0; reg adc_n_status = 'd0; reg adc_valid_int = 'd0; reg [47:0] adc_data_int = 'd0; reg adc_status_int = 'd0; reg adc_valid = 'd0; reg [47:0] adc_data = 'd0; reg adc_status = 'd0; reg [ 2:0] tx_data_cnt = 'd0; reg [47:0] tx_data = 'd0; reg tx_frame = 'd0; reg [ 5:0] tx_data_p = 'd0; reg [ 5:0] tx_data_n = 'd0; reg tx_n_frame = 'd0; reg [ 5:0] tx_n_data_p = 'd0; reg [ 5:0] tx_n_data_n = 'd0; reg tx_p_frame = 'd0; reg [ 5:0] tx_p_data_p = 'd0; reg [ 5:0] tx_p_data_n = 'd0; reg up_enable_int = 'd0; reg up_txnrx_int = 'd0; reg enable_up_m1 = 'd0; reg txnrx_up_m1 = 'd0; reg enable_up = 'd0; reg txnrx_up = 'd0; reg enable_int = 'd0; reg txnrx_int = 'd0; reg enable_n_int = 'd0; reg txnrx_n_int = 'd0; reg enable_p_int = 'd0; reg txnrx_p_int = 'd0; // internal signals wire rx_align_s; wire [ 3:0] rx_frame_s; wire [ 3:0] tx_data_sel_s; wire [ 5:0] rx_data_p_s; wire [ 5:0] rx_data_n_s; wire rx_frame_p_s; wire rx_frame_n_s; genvar l_inst; // receive data path interface assign rx_align_s = rx_frame_n_s ^ rx_frame_p_s; always @(posedge l_clk) begin rx_data_p <= rx_data_p_s; rx_frame_p <= rx_frame_p_s; rx_ccnt <= rx_ccnt + 1'b1; if (rx_ccnt == 2'd0) begin rx_calign <= rx_align; rx_align <= rx_align_s; end else begin rx_calign <= rx_calign; rx_align <= rx_align | rx_align_s; end end assign rx_frame_s = {rx_frame_d, rx_frame}; always @(posedge l_clk) begin if (rx_calign == 1'b1) begin rx_data <= {rx_data_p, rx_data_n_s}; rx_frame <= {rx_frame_p, rx_frame_n_s}; end else begin rx_data <= {rx_data_n_s, rx_data_p_s}; rx_frame <= {rx_frame_n_s, rx_frame_p_s}; end rx_data_d <= rx_data; rx_frame_d <= rx_frame; end // receive data path for single rf, frame is expected to qualify i/q msb only always @(posedge l_clk) begin rx_error_r1 <= ((rx_frame_s == 4'b1100) || (rx_frame_s == 4'b0011)) ? 1'b0 : 1'b1; rx_valid_r1 <= (rx_frame_s == 4'b1100) ? 1'b1 : 1'b0; if (rx_frame_s == 4'b1100) begin rx_data_r1[11: 0] <= {rx_data_d[11:6], rx_data[11:6]}; rx_data_r1[23:12] <= {rx_data_d[ 5:0], rx_data[ 5:0]}; end end // receive data path for dual rf, frame is expected to qualify i/q msb and lsb for rf-1 only always @(posedge l_clk) begin rx_error_r2 <= ((rx_frame_s == 4'b1111) || (rx_frame_s == 4'b1100) || (rx_frame_s == 4'b0000) || (rx_frame_s == 4'b0011)) ? 1'b0 : 1'b1; rx_valid_r2 <= (rx_frame_s == 4'b0000) ? 1'b1 : 1'b0; if (rx_frame_s == 4'b1111) begin rx_data_r2[11: 0] <= {rx_data_d[11:6], rx_data[11:6]}; rx_data_r2[23:12] <= {rx_data_d[ 5:0], rx_data[ 5:0]}; end if (rx_frame_s == 4'b0000) begin rx_data_r2[35:24] <= {rx_data_d[11:6], rx_data[11:6]}; rx_data_r2[47:36] <= {rx_data_d[ 5:0], rx_data[ 5:0]}; end end // receive data path mux always @(posedge l_clk) begin if (adc_r1_mode == 1'b1) begin adc_p_valid <= rx_valid_r1; adc_p_data <= {24'd0, rx_data_r1}; adc_p_status <= ~rx_error_r1; end else begin adc_p_valid <= rx_valid_r2; adc_p_data <= rx_data_r2; adc_p_status <= ~rx_error_r2; end end // transfer to a synchronous common clock always @(negedge l_clk) begin adc_n_valid <= adc_p_valid; adc_n_data <= adc_p_data; adc_n_status <= adc_p_status; end always @(posedge clk) begin adc_valid_int <= adc_n_valid; adc_data_int <= adc_n_data; adc_status_int <= adc_n_status; adc_valid <= adc_valid_int; if (adc_valid_int == 1'b1) begin adc_data <= adc_data_int; end adc_status <= adc_status_int; end // transmit data path mux (reverse of what receive does above) // the count simply selets the data muxing on the ddr outputs assign tx_data_sel_s = {tx_data_cnt[2], dac_r1_mode, tx_data_cnt[1:0]}; always @(posedge clk) begin if (dac_valid == 1'b1) begin tx_data_cnt <= 3'b100; end else if (tx_data_cnt[2] == 1'b1) begin tx_data_cnt <= tx_data_cnt + 1'b1; end if (dac_valid == 1'b1) begin tx_data <= dac_data; end case (tx_data_sel_s) 4'b1111: begin tx_frame <= 1'b0; tx_data_p <= tx_data[ 5: 0]; tx_data_n <= tx_data[17:12]; end 4'b1110: begin tx_frame <= 1'b1; tx_data_p <= tx_data[11: 6]; tx_data_n <= tx_data[23:18]; end 4'b1101: begin tx_frame <= 1'b0; tx_data_p <= tx_data[ 5: 0]; tx_data_n <= tx_data[17:12]; end 4'b1100: begin tx_frame <= 1'b1; tx_data_p <= tx_data[11: 6]; tx_data_n <= tx_data[23:18]; end 4'b1011: begin tx_frame <= 1'b0; tx_data_p <= tx_data[29:24]; tx_data_n <= tx_data[41:36]; end 4'b1010: begin tx_frame <= 1'b0; tx_data_p <= tx_data[35:30]; tx_data_n <= tx_data[47:42]; end 4'b1001: begin tx_frame <= 1'b1; tx_data_p <= tx_data[ 5: 0]; tx_data_n <= tx_data[17:12]; end 4'b1000: begin tx_frame <= 1'b1; tx_data_p <= tx_data[11: 6]; tx_data_n <= tx_data[23:18]; end default: begin tx_frame <= 1'b0; tx_data_p <= 6'd0; tx_data_n <= 6'd0; end endcase end // transfer data from a synchronous clock (skew less than 2ns) always @(negedge clk) begin tx_n_frame <= tx_frame; tx_n_data_p <= tx_data_p; tx_n_data_n <= tx_data_n; end always @(posedge l_clk) begin tx_p_frame <= tx_n_frame; tx_p_data_p <= tx_n_data_p; tx_p_data_n <= tx_n_data_n; end // tdd/ensm control always @(posedge up_clk) begin up_enable_int <= up_enable; up_txnrx_int <= up_txnrx; end always @(posedge clk or posedge rst) begin if (rst == 1'b1) begin enable_up_m1 <= 1'b0; txnrx_up_m1 <= 1'b0; enable_up <= 1'b0; txnrx_up <= 1'b0; end else begin enable_up_m1 <= up_enable_int; txnrx_up_m1 <= up_txnrx_int; enable_up <= enable_up_m1; txnrx_up <= txnrx_up_m1; end end always @(posedge clk) begin if (tdd_mode == 1'b1) begin enable_int <= tdd_enable; txnrx_int <= tdd_txnrx; end else begin enable_int <= enable_up; txnrx_int <= txnrx_up; end end always @(negedge clk) begin enable_n_int <= enable_int; txnrx_n_int <= txnrx_int; end always @(posedge l_clk) begin enable_p_int <= enable_n_int; txnrx_p_int <= txnrx_n_int; end // receive data interface, ibuf -> idelay -> iddr generate for (l_inst = 0; l_inst <= 5; l_inst = l_inst + 1) begin: g_rx_data ad_lvds_in #( .DEVICE_TYPE (DEVICE_TYPE), .IODELAY_CTRL (0), .IODELAY_GROUP (IO_DELAY_GROUP)) i_rx_data ( .rx_clk (l_clk), .rx_data_in_p (rx_data_in_p[l_inst]), .rx_data_in_n (rx_data_in_n[l_inst]), .rx_data_p (rx_data_p_s[l_inst]), .rx_data_n (rx_data_n_s[l_inst]), .up_clk (up_clk), .up_dld (up_adc_dld[l_inst]), .up_dwdata (up_adc_dwdata[((l_inst*5)+4):(l_inst*5)]), .up_drdata (up_adc_drdata[((l_inst*5)+4):(l_inst*5)]), .delay_clk (delay_clk), .delay_rst (delay_rst), .delay_locked ()); end endgenerate // receive frame interface, ibuf -> idelay -> iddr ad_lvds_in #( .DEVICE_TYPE (DEVICE_TYPE), .IODELAY_CTRL (1), .IODELAY_GROUP (IO_DELAY_GROUP)) i_rx_frame ( .rx_clk (l_clk), .rx_data_in_p (rx_frame_in_p), .rx_data_in_n (rx_frame_in_n), .rx_data_p (rx_frame_p_s), .rx_data_n (rx_frame_n_s), .up_clk (up_clk), .up_dld (up_adc_dld[6]), .up_dwdata (up_adc_dwdata[34:30]), .up_drdata (up_adc_drdata[34:30]), .delay_clk (delay_clk), .delay_rst (delay_rst), .delay_locked (delay_locked)); // transmit data interface, oddr -> obuf generate for (l_inst = 0; l_inst <= 5; l_inst = l_inst + 1) begin: g_tx_data ad_lvds_out #( .DEVICE_TYPE (DEVICE_TYPE), .SINGLE_ENDED (0), .IODELAY_ENABLE (DAC_IODELAY_ENABLE), .IODELAY_CTRL (0), .IODELAY_GROUP (IO_DELAY_GROUP)) i_tx_data ( .tx_clk (l_clk), .tx_data_p (tx_p_data_p[l_inst]), .tx_data_n (tx_p_data_n[l_inst]), .tx_data_out_p (tx_data_out_p[l_inst]), .tx_data_out_n (tx_data_out_n[l_inst]), .up_clk (up_clk), .up_dld (up_dac_dld[l_inst]), .up_dwdata (up_dac_dwdata[((l_inst*5)+4):(l_inst*5)]), .up_drdata (up_dac_drdata[((l_inst*5)+4):(l_inst*5)]), .delay_clk (delay_clk), .delay_rst (delay_rst), .delay_locked ()); end endgenerate // transmit frame interface, oddr -> obuf ad_lvds_out #( .DEVICE_TYPE (DEVICE_TYPE), .SINGLE_ENDED (0), .IODELAY_ENABLE (DAC_IODELAY_ENABLE), .IODELAY_CTRL (0), .IODELAY_GROUP (IO_DELAY_GROUP)) i_tx_frame ( .tx_clk (l_clk), .tx_data_p (tx_p_frame), .tx_data_n (tx_p_frame), .tx_data_out_p (tx_frame_out_p), .tx_data_out_n (tx_frame_out_n), .up_clk (up_clk), .up_dld (up_dac_dld[6]), .up_dwdata (up_dac_dwdata[34:30]), .up_drdata (up_dac_drdata[34:30]), .delay_clk (delay_clk), .delay_rst (delay_rst), .delay_locked ()); // transmit clock interface, oddr -> obuf ad_lvds_out #( .DEVICE_TYPE (DEVICE_TYPE), .SINGLE_ENDED (0), .IODELAY_ENABLE (DAC_IODELAY_ENABLE), .IODELAY_CTRL (0), .IODELAY_GROUP (IO_DELAY_GROUP)) i_tx_clk ( .tx_clk (l_clk), .tx_data_p (1'b0), .tx_data_n (1'b1), .tx_data_out_p (tx_clk_out_p), .tx_data_out_n (tx_clk_out_n), .up_clk (up_clk), .up_dld (up_dac_dld[7]), .up_dwdata (up_dac_dwdata[39:35]), .up_drdata (up_dac_drdata[39:35]), .delay_clk (delay_clk), .delay_rst (delay_rst), .delay_locked ()); // enable, oddr -> obuf ad_lvds_out #( .DEVICE_TYPE (DEVICE_TYPE), .SINGLE_ENDED (1), .IODELAY_ENABLE (DAC_IODELAY_ENABLE), .IODELAY_CTRL (0), .IODELAY_GROUP (IO_DELAY_GROUP)) i_enable ( .tx_clk (l_clk), .tx_data_p (enable_p_int), .tx_data_n (enable_p_int), .tx_data_out_p (enable), .tx_data_out_n (), .up_clk (up_clk), .up_dld (up_dac_dld[8]), .up_dwdata (up_dac_dwdata[44:40]), .up_drdata (up_dac_drdata[44:40]), .delay_clk (delay_clk), .delay_rst (delay_rst), .delay_locked ()); // txnrx, oddr -> obuf ad_lvds_out #( .DEVICE_TYPE (DEVICE_TYPE), .SINGLE_ENDED (1), .IODELAY_ENABLE (DAC_IODELAY_ENABLE), .IODELAY_CTRL (0), .IODELAY_GROUP (IO_DELAY_GROUP)) i_txnrx ( .tx_clk (l_clk), .tx_data_p (txnrx_p_int), .tx_data_n (txnrx_p_int), .tx_data_out_p (txnrx), .tx_data_out_n (), .up_clk (up_clk), .up_dld (up_dac_dld[9]), .up_dwdata (up_dac_dwdata[49:45]), .up_drdata (up_dac_drdata[49:45]), .delay_clk (delay_clk), .delay_rst (delay_rst), .delay_locked ()); // device clock interface (receive clock) ad_lvds_clk #( .DEVICE_TYPE (DEVICE_TYPE)) i_clk ( .clk_in_p (rx_clk_in_p), .clk_in_n (rx_clk_in_n), .clk (l_clk)); endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_ad9361/axi_ad9361_dev_if_alt.v000066400000000000000000000250371457144405000306700ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // This interface includes both the transmit and receive components - // They both uses the same clock (sourced from the receiving side). `timescale 1ns/100ps module axi_ad9361_dev_if ( // physical interface (receive) rx_clk_in_p, rx_clk_in_n, rx_frame_in_p, rx_frame_in_n, rx_data_in_p, rx_data_in_n, // physical interface (transmit) tx_clk_out_p, tx_clk_out_n, tx_frame_out_p, tx_frame_out_n, tx_data_out_p, tx_data_out_n, // ensm control enable, txnrx, // clock (common to both receive and transmit) rst, clk, l_clk, // receive data path interface adc_valid, adc_data, adc_status, adc_r1_mode, adc_ddr_edgesel, // transmit data path interface dac_valid, dac_data, dac_r1_mode, // tdd interface tdd_enable, tdd_txnrx, tdd_mode, // delay interface up_clk, up_enable, up_txnrx, up_adc_dld, up_adc_dwdata, up_adc_drdata, up_dac_dld, up_dac_dwdata, up_dac_drdata, delay_clk, delay_rst, delay_locked); // this parameter controls the buffer type based on the target device. parameter DEVICE_TYPE = 0; parameter DAC_IODELAY_ENABLE = 0; parameter IO_DELAY_GROUP = "dev_if_delay_group"; // physical interface (receive) input rx_clk_in_p; input rx_clk_in_n; input rx_frame_in_p; input rx_frame_in_n; input [ 5:0] rx_data_in_p; input [ 5:0] rx_data_in_n; // physical interface (transmit) output tx_clk_out_p; output tx_clk_out_n; output tx_frame_out_p; output tx_frame_out_n; output [ 5:0] tx_data_out_p; output [ 5:0] tx_data_out_n; // ensm control output enable; output txnrx; // clock (common to both receive and transmit) input rst; input clk; output l_clk; // receive data path interface output adc_valid; output [47:0] adc_data; output adc_status; input adc_r1_mode; input adc_ddr_edgesel; // transmit data path interface input dac_valid; input [47:0] dac_data; input dac_r1_mode; // tdd interface input tdd_enable; input tdd_txnrx; input tdd_mode; // delay interface input up_clk; input up_enable; input up_txnrx; input [ 6:0] up_adc_dld; input [34:0] up_adc_dwdata; output [34:0] up_adc_drdata; // = 'h0; input [ 9:0] up_dac_dld; input [49:0] up_dac_dwdata; output [49:0] up_dac_drdata; // = 'h0; input delay_clk; input delay_rst; output delay_locked; // internal registers reg [ 3:0] rx_frame = 'd0; reg [ 5:0] rx_data_3 = 'd0; reg [ 5:0] rx_data_2 = 'd0; reg [ 5:0] rx_data_1 = 'd0; reg [ 5:0] rx_data_0 = 'd0; reg rx_error_r2 = 'd0; reg rx_valid_r2 = 'd0; reg [23:0] rx_data_r2 = 'd0; reg adc_valid = 'd0; reg [47:0] adc_data = 'd0; reg adc_status = 'd0; reg tx_data_sel = 'd0; reg [47:0] tx_data = 'd0; reg [ 3:0] tx_frame = 'd0; reg [ 5:0] tx_data_0 = 'd0; reg [ 5:0] tx_data_1 = 'd0; reg [ 5:0] tx_data_2 = 'd0; reg [ 5:0] tx_data_3 = 'd0; // internal signals wire [ 3:0] rx_frame_inv_s; wire tx_locked_s; wire [ 3:0] rx_frame_s; wire [ 5:0] rx_data_0_s; wire [ 5:0] rx_data_1_s; wire [ 5:0] rx_data_2_s; wire [ 5:0] rx_data_3_s; wire rx_locked_s; wire rx_pll_reset_s; wire tx_pll_reset_s; // up_adc_drdata and up_dac_drdata explicitly assigned here // the default on the output declaration breaks modelsim... assign up_adc_drdata = 'h0; assign up_dac_drdata = 'h0; // tdd support- assign enable = up_enable; assign txnrx = up_txnrx; // defaults assign delay_locked = 1'd1; // receive data path interface assign rx_frame_inv_s = ~rx_frame; always @(posedge l_clk) begin rx_frame <= rx_frame_s; rx_data_3 <= rx_data_3_s; rx_data_2 <= rx_data_2_s; rx_data_1 <= rx_data_1_s; rx_data_0 <= rx_data_0_s; if (rx_frame_inv_s == rx_frame_s) begin rx_error_r2 <= 1'b0; end else begin rx_error_r2 <= 1'b1; end case (rx_frame) 4'b1111: begin rx_valid_r2 <= 1'b1; rx_data_r2[23:12] <= {rx_data_1, rx_data_3}; rx_data_r2[11: 0] <= {rx_data_0, rx_data_2}; end 4'b1110: begin rx_valid_r2 <= 1'b1; rx_data_r2[23:12] <= {rx_data_2, rx_data_0_s}; rx_data_r2[11: 0] <= {rx_data_1, rx_data_3}; end 4'b1100: begin rx_valid_r2 <= 1'b1; rx_data_r2[23:12] <= {rx_data_3, rx_data_1_s}; rx_data_r2[11: 0] <= {rx_data_2, rx_data_0_s}; end 4'b1000: begin rx_valid_r2 <= 1'b1; rx_data_r2[23:12] <= {rx_data_0_s, rx_data_2_s}; rx_data_r2[11: 0] <= {rx_data_3, rx_data_1_s}; end 4'b0000: begin rx_valid_r2 <= 1'b0; rx_data_r2[23:12] <= {rx_data_1, rx_data_3}; rx_data_r2[11: 0] <= {rx_data_0, rx_data_2}; end 4'b0001: begin rx_valid_r2 <= 1'b0; rx_data_r2[23:12] <= {rx_data_2, rx_data_0_s}; rx_data_r2[11: 0] <= {rx_data_1, rx_data_3}; end 4'b0011: begin rx_valid_r2 <= 1'b0; rx_data_r2[23:12] <= {rx_data_3, rx_data_1_s}; rx_data_r2[11: 0] <= {rx_data_2, rx_data_0_s}; end 4'b0111: begin rx_valid_r2 <= 1'b0; rx_data_r2[23:12] <= {rx_data_0_s, rx_data_2_s}; rx_data_r2[11: 0] <= {rx_data_3, rx_data_1_s}; end default: begin rx_valid_r2 <= 1'b0; rx_data_r2[23:12] <= 12'd0; rx_data_r2[11: 0] <= 12'd0; end endcase if (rx_valid_r2 == 1'b1) begin adc_valid <= 1'b0; adc_data <= {24'd0, rx_data_r2}; end else begin adc_valid <= 1'b1; adc_data <= {rx_data_r2, adc_data[23:0]}; end adc_status <= ~rx_error_r2 & rx_locked_s & tx_locked_s; end // transmit data path mux always @(posedge l_clk) begin tx_data_sel <= dac_valid; tx_data <= dac_data; if (tx_data_sel == 1'b1) begin tx_frame <= 4'b1111; tx_data_0 <= tx_data[11: 6]; tx_data_1 <= tx_data[23:18]; tx_data_2 <= tx_data[ 5: 0]; tx_data_3 <= tx_data[17:12]; end else begin tx_frame <= 4'b0000; tx_data_0 <= tx_data[35:30]; tx_data_1 <= tx_data[47:42]; tx_data_2 <= tx_data[29:24]; tx_data_3 <= tx_data[41:36]; end end // interface (transmit) //pll_reset #( // .SYS_CLOCK_FREQ_HZ( 80000000 ), // .DEVICE_FAMILY( "Cyclone V" ) ) //i_tx_pll_reset ( // .sys_clock(up_clk), // .pll_locked(tx_locked_s), // .pll_locked_out( ), // .pll_reset(tx_pll_reset_s) //); assign tx_pll_reset_s = rx_pll_reset_s; axi_ad9361_alt_lvds_tx i_tx ( .tx_clk_out_p (tx_clk_out_p), .tx_clk_out_n (tx_clk_out_n), .tx_frame_out_p (tx_frame_out_p), .tx_frame_out_n (tx_frame_out_n), .tx_data_out_p (tx_data_out_p), .tx_data_out_n (tx_data_out_n), .tx_clk (rx_clk_in_p), .clk (l_clk), .tx_frame (tx_frame), .tx_data_0 (tx_data_0), .tx_data_1 (tx_data_1), .tx_data_2 (tx_data_2), .tx_data_3 (tx_data_3), .tx_locked (tx_locked_s), .tx_pll_reset(tx_pll_reset_s) ); // interface (receive) pll_reset #( .SYS_CLOCK_FREQ_HZ( 80000000 ), .DEVICE_FAMILY( "Cyclone V" ) ) i_rx_pll_reset ( .sys_clock(up_clk), .pll_locked(rx_locked_s & tx_locked_s), // TX & RX PLLs will be merged anyway .pll_locked_out( ), .pll_reset(rx_pll_reset_s) ); axi_ad9361_alt_lvds_rx i_rx ( .rx_clk_in_p (rx_clk_in_p), .rx_clk_in_n (rx_clk_in_n), .rx_frame_in_p (rx_frame_in_p), .rx_frame_in_n (rx_frame_in_n), .rx_data_in_p (rx_data_in_p), .rx_data_in_n (rx_data_in_n), .clk (l_clk), .rx_frame (rx_frame_s), .rx_data_0 (rx_data_0_s), .rx_data_1 (rx_data_1_s), .rx_data_2 (rx_data_2_s), .rx_data_3 (rx_data_3_s), .rx_locked (rx_locked_s), .rx_pll_reset(rx_pll_reset_s) ); endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_ad9361/axi_ad9361_hw.tcl000066400000000000000000000150631457144405000275250ustar00rootroot00000000000000 package require -exact qsys 13.0 source ../scripts/adi_env.tcl source ../scripts/adi_ip_alt.tcl set_module_property NAME axi_ad9361 set_module_property DESCRIPTION "AXI AD9361 Interface" set_module_property VERSION 1.0 set_module_property GROUP "Analog Devices" set_module_property DISPLAY_NAME axi_ad9361 # files add_fileset quartus_synth QUARTUS_SYNTH "" "Quartus Synthesis" set_fileset_property quartus_synth TOP_LEVEL axi_ad9361 add_fileset_file axi_ad9361.qip OTHER PATH ./axi_ad9361.qip # parameters add_parameter ID INTEGER 0 set_parameter_property ID DEFAULT_VALUE 0 set_parameter_property ID DISPLAY_NAME ID set_parameter_property ID TYPE INTEGER set_parameter_property ID UNITS None set_parameter_property ID HDL_PARAMETER true add_parameter DEVICE_TYPE INTEGER 0 set_parameter_property DEVICE_TYPE DEFAULT_VALUE 0 set_parameter_property DEVICE_TYPE DISPLAY_NAME DEVICE_TYPE set_parameter_property DEVICE_TYPE TYPE INTEGER set_parameter_property DEVICE_TYPE UNITS None set_parameter_property DEVICE_TYPE HDL_PARAMETER true add_parameter DAC_DDS_DISABLE INTEGER 0 set_parameter_property DAC_DDS_DISABLE DEFAULT_VALUE 0 set_parameter_property DAC_DDS_DISABLE DISPLAY_NAME DAC_DDS_DISABLE set_parameter_property DAC_DDS_DISABLE TYPE INTEGER set_parameter_property DAC_DDS_DISABLE UNITS None set_parameter_property DAC_DDS_DISABLE HDL_PARAMETER true # axi4 slave add_interface s_axi_clock clock end add_interface_port s_axi_clock s_axi_aclk clk Input 1 add_interface s_axi_reset reset end set_interface_property s_axi_reset associatedClock s_axi_clock add_interface_port s_axi_reset s_axi_aresetn reset_n Input 1 add_interface s_axi axi4lite end set_interface_property s_axi associatedClock s_axi_clock set_interface_property s_axi associatedReset s_axi_reset add_interface_port s_axi s_axi_awvalid awvalid Input 1 add_interface_port s_axi s_axi_awaddr awaddr Input 16 add_interface_port s_axi s_axi_awprot awprot Input 3 add_interface_port s_axi s_axi_awready awready Output 1 add_interface_port s_axi s_axi_wvalid wvalid Input 1 add_interface_port s_axi s_axi_wdata wdata Input 32 add_interface_port s_axi s_axi_wstrb wstrb Input 4 add_interface_port s_axi s_axi_wready wready Output 1 add_interface_port s_axi s_axi_bvalid bvalid Output 1 add_interface_port s_axi s_axi_bresp bresp Output 2 add_interface_port s_axi s_axi_bready bready Input 1 add_interface_port s_axi s_axi_arvalid arvalid Input 1 add_interface_port s_axi s_axi_araddr araddr Input 16 add_interface_port s_axi s_axi_arprot arprot Input 3 add_interface_port s_axi s_axi_arready arready Output 1 add_interface_port s_axi s_axi_rvalid rvalid Output 1 add_interface_port s_axi s_axi_rresp rresp Output 2 add_interface_port s_axi s_axi_rdata rdata Output 32 add_interface_port s_axi s_axi_rready rready Input 1 # device interface add_interface device_clock clock end add_interface_port device_clock clk clk Input 1 add_interface device_if conduit end set_interface_property device_if associatedClock device_clock add_interface_port device_if rx_clk_in_p rx_clk_in_p Input 1 add_interface_port device_if rx_clk_in_n rx_clk_in_n Input 1 add_interface_port device_if rx_frame_in_p rx_frame_in_p Input 1 add_interface_port device_if rx_frame_in_n rx_frame_in_n Input 1 add_interface_port device_if rx_data_in_p rx_data_in_p Input 6 add_interface_port device_if rx_data_in_n rx_data_in_n Input 6 add_interface_port device_if tx_clk_out_p tx_clk_out_p Output 1 add_interface_port device_if tx_clk_out_n tx_clk_out_n Output 1 add_interface_port device_if tx_frame_out_p tx_frame_out_p Output 1 add_interface_port device_if tx_frame_out_n tx_frame_out_n Output 1 add_interface_port device_if tx_data_out_p tx_data_out_p Output 6 add_interface_port device_if tx_data_out_n tx_data_out_n Output 6 ad_alt_intf signal dac_sync_in input 1 sync ad_alt_intf signal dac_sync_out output 1 sync ad_alt_intf clock l_clk output 1 ad_alt_intf reset rst output 1 if_l_clk add_interface fifo_ch_0_in conduit end #set_interface_property fifo_ch_0_in associatedClock if_l_clk add_interface_port fifo_ch_0_in adc_enable_i0 enable Output 1 add_interface_port fifo_ch_0_in adc_valid_i0 valid Output 1 add_interface_port fifo_ch_0_in adc_data_i0 data Output 16 add_interface fifo_ch_1_in conduit end #set_interface_property fifo_ch_1_in associatedClock if_l_clk add_interface_port fifo_ch_1_in adc_enable_q0 enable Output 1 add_interface_port fifo_ch_1_in adc_valid_q0 valid Output 1 add_interface_port fifo_ch_1_in adc_data_q0 data Output 16 add_interface fifo_ch_2_in conduit end #set_interface_property fifo_ch_2_in associatedClock if_l_clk add_interface_port fifo_ch_2_in adc_enable_i1 enable Output 1 add_interface_port fifo_ch_2_in adc_valid_i1 valid Output 1 add_interface_port fifo_ch_2_in adc_data_i1 data Output 16 add_interface fifo_ch_3_in conduit end #set_interface_property fifo_ch_3_in associatedClock if_l_clk add_interface_port fifo_ch_3_in adc_enable_q1 enable Output 1 add_interface_port fifo_ch_3_in adc_valid_q1 valid Output 1 add_interface_port fifo_ch_3_in adc_data_q1 data Output 16 ad_alt_intf signal adc_dovf input 1 ovf ad_alt_intf signal adc_dunf input 1 unf add_interface fifo_ch_0_out conduit end #set_interface_property fifo_ch_0_out associatedClock if_l_clk add_interface_port fifo_ch_0_out dac_enable_i0 enable Output 1 add_interface_port fifo_ch_0_out dac_valid_i0 valid Output 1 add_interface_port fifo_ch_0_out dac_data_i0 data Input 16 add_interface fifo_ch_1_out conduit end #set_interface_property fifo_ch_1_out associatedClock if_l_clk add_interface_port fifo_ch_1_out dac_enable_q0 enable Output 1 add_interface_port fifo_ch_1_out dac_valid_q0 valid Output 1 add_interface_port fifo_ch_1_out dac_data_q0 data Input 16 add_interface fifo_ch_2_out conduit end #set_interface_property fifo_ch_2_out associatedClock if_l_clk add_interface_port fifo_ch_2_out dac_enable_i1 enable Output 1 add_interface_port fifo_ch_2_out dac_valid_i1 valid Output 1 add_interface_port fifo_ch_2_out dac_data_i1 data Input 16 add_interface fifo_ch_3_out conduit end #set_interface_property fifo_ch_3_out associatedClock if_l_clk add_interface_port fifo_ch_3_out dac_enable_q1 enable Output 1 add_interface_port fifo_ch_3_out dac_valid_q1 valid Output 1 add_interface_port fifo_ch_3_out dac_data_q1 data Input 16 ad_alt_intf signal dac_dovf input 1 ovf ad_alt_intf signal dac_dunf input 1 unf add_interface delay_clock clock end add_interface_port delay_clock delay_clk clk Input 1 bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_ad9361/axi_ad9361_ip.tcl000077500000000000000000000050241457144405000275160ustar00rootroot00000000000000# ip source ../scripts/adi_env.tcl source $ad_hdl_dir/library/scripts/adi_ip.tcl adi_ip_create axi_ad9361 adi_ip_files axi_ad9361 [list \ "$ad_hdl_dir/library/common/ad_axi_ip_constr.xdc" \ "$ad_hdl_dir/library/common/ad_rst.v" \ "$ad_hdl_dir/library/common/ad_lvds_clk.v" \ "$ad_hdl_dir/library/common/ad_lvds_in.v" \ "$ad_hdl_dir/library/common/ad_lvds_out.v" \ "$ad_hdl_dir/library/common/ad_mul.v" \ "$ad_hdl_dir/library/common/ad_pnmon.v" \ "$ad_hdl_dir/library/common/ad_dds_sine.v" \ "$ad_hdl_dir/library/common/ad_dds_1.v" \ "$ad_hdl_dir/library/common/ad_dds.v" \ "$ad_hdl_dir/library/common/ad_datafmt.v" \ "$ad_hdl_dir/library/common/ad_dcfilter.v" \ "$ad_hdl_dir/library/common/ad_iqcor.v" \ "$ad_hdl_dir/library/common/ad_addsub.v" \ "$ad_hdl_dir/library/common/ad_tdd_control.v" \ "$ad_hdl_dir/library/common/up_axi.v" \ "$ad_hdl_dir/library/common/up_xfer_cntrl.v" \ "$ad_hdl_dir/library/common/up_xfer_status.v" \ "$ad_hdl_dir/library/common/up_clock_mon.v" \ "$ad_hdl_dir/library/common/up_delay_cntrl.v" \ "$ad_hdl_dir/library/common/up_adc_common.v" \ "$ad_hdl_dir/library/common/up_adc_channel.v" \ "$ad_hdl_dir/library/common/up_dac_common.v" \ "$ad_hdl_dir/library/common/up_dac_channel.v" \ "$ad_hdl_dir/library/common/up_tdd_cntrl.v" \ "axi_ad9361_constr.xdc" \ "axi_ad9361_dev_if.v" \ "axi_ad9361_rx_pnmon.v" \ "axi_ad9361_rx_channel.v" \ "axi_ad9361_rx.v" \ "axi_ad9361_tx_channel.v" \ "axi_ad9361_tx.v" \ "axi_ad9361_tdd.v" \ "axi_ad9361_tdd_if.v" \ "axi_ad9361.v" ] adi_ip_properties axi_ad9361 adi_ip_constraints axi_ad9361 [list \ "axi_ad9361_constr.xdc" \ "$ad_hdl_dir/library/common/ad_axi_ip_constr.xdc" ] set_property driver_value 0 [ipx::get_ports *dac_sync_in* -of_objects [ipx::current_core]] set_property driver_value 0 [ipx::get_ports *dovf* -of_objects [ipx::current_core]] set_property driver_value 0 [ipx::get_ports *dunf* -of_objects [ipx::current_core]] set_property driver_value 0 [ipx::get_ports *gpio_in* -of_objects [ipx::current_core]] ipx::remove_bus_interface rst [ipx::current_core] ipx::remove_bus_interface clk [ipx::current_core] ipx::remove_bus_interface l_clk [ipx::current_core] ipx::remove_bus_interface delay_clk [ipx::current_core] ipx::add_bus_parameter ASSOCIATED_BUSIF [ipx::get_bus_interfaces s_axi_aclk \ -of_objects [ipx::current_core]] set_property value s_axi [ipx::get_bus_parameters ASSOCIATED_BUSIF \ -of_objects [ipx::get_bus_interfaces s_axi_aclk \ -of_objects [ipx::current_core]]] ipx::save_core [ipx::current_core] bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_ad9361/axi_ad9361_rx.v000066400000000000000000000265531457144405000272310ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** // ADC channel-need to work on dual mode for pn sequence `timescale 1ns/100ps module axi_ad9361_rx ( // adc interface adc_rst, adc_clk, adc_valid, adc_data, adc_status, adc_r1_mode, adc_ddr_edgesel, dac_data, // delay interface up_dld, up_dwdata, up_drdata, delay_clk, delay_rst, delay_locked, // dma interface adc_enable_i0, adc_valid_i0, adc_data_i0, adc_enable_q0, adc_valid_q0, adc_data_q0, adc_enable_i1, adc_valid_i1, adc_data_i1, adc_enable_q1, adc_valid_q1, adc_data_q1, adc_dovf, adc_dunf, // gpio up_adc_gpio_in, up_adc_gpio_out, // processor interface up_rstn, up_clk, up_wreq, up_waddr, up_wdata, up_wack, up_rreq, up_raddr, up_rdata, up_rack); // parameters parameter DATAPATH_DISABLE = 0; parameter ID = 0; // adc interface output adc_rst; input adc_clk; input adc_valid; input [47:0] adc_data; input adc_status; output adc_r1_mode; output adc_ddr_edgesel; input [47:0] dac_data; // delay interface output [ 6:0] up_dld; output [34:0] up_dwdata; input [34:0] up_drdata; input delay_clk; output delay_rst; input delay_locked; // dma interface output adc_enable_i0; output adc_valid_i0; output [15:0] adc_data_i0; output adc_enable_q0; output adc_valid_q0; output [15:0] adc_data_q0; output adc_enable_i1; output adc_valid_i1; output [15:0] adc_data_i1; output adc_enable_q1; output adc_valid_q1; output [15:0] adc_data_q1; input adc_dovf; input adc_dunf; // gpio input [31:0] up_adc_gpio_in; output [31:0] up_adc_gpio_out; // processor interface input up_rstn; input up_clk; input up_wreq; input [13:0] up_waddr; input [31:0] up_wdata; output up_wack; input up_rreq; input [13:0] up_raddr; output [31:0] up_rdata; output up_rack; // internal registers reg up_status_pn_err = 'd0; reg up_status_pn_oos = 'd0; reg up_status_or = 'd0; reg [31:0] up_rdata = 'd0; reg up_rack = 'd0; reg up_wack = 'd0; // internal signals wire [15:0] adc_dcfilter_data_out_0_s; wire [15:0] adc_dcfilter_data_out_1_s; wire [15:0] adc_dcfilter_data_out_2_s; wire [15:0] adc_dcfilter_data_out_3_s; wire [ 3:0] up_adc_pn_err_s; wire [ 3:0] up_adc_pn_oos_s; wire [ 3:0] up_adc_or_s; wire [31:0] up_rdata_s[0:5]; wire up_rack_s[0:5]; wire up_wack_s[0:5]; // processor read interface always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_status_pn_err <= 'd0; up_status_pn_oos <= 'd0; up_status_or <= 'd0; up_rdata <= 'd0; up_rack <= 'd0; up_wack <= 'd0; end else begin up_status_pn_err <= | up_adc_pn_err_s; up_status_pn_oos <= | up_adc_pn_oos_s; up_status_or <= | up_adc_or_s; up_rdata <= up_rdata_s[0] | up_rdata_s[1] | up_rdata_s[2] | up_rdata_s[3] | up_rdata_s[4] | up_rdata_s[5]; up_rack <= up_rack_s[0] | up_rack_s[1] | up_rack_s[2] | up_rack_s[3] | up_rack_s[4] | up_rack_s[5]; up_wack <= up_wack_s[0] | up_wack_s[1] | up_wack_s[2] | up_wack_s[3] | up_wack_s[4] | up_wack_s[5]; end end // channel 0 (i) axi_ad9361_rx_channel #( .Q_OR_I_N(0), .CHANNEL_ID(0), .DATAPATH_DISABLE (DATAPATH_DISABLE)) i_rx_channel_0 ( .adc_clk (adc_clk), .adc_rst (adc_rst), .adc_valid (adc_valid), .adc_data (adc_data[11:0]), .adc_data_q (adc_data[23:12]), .adc_or (1'b0), .dac_data (dac_data[11:0]), .adc_dcfilter_data_out (adc_dcfilter_data_out_0_s), .adc_dcfilter_data_in (adc_dcfilter_data_out_1_s), .adc_iqcor_valid (adc_valid_i0), .adc_iqcor_data (adc_data_i0), .adc_enable (adc_enable_i0), .up_adc_pn_err (up_adc_pn_err_s[0]), .up_adc_pn_oos (up_adc_pn_oos_s[0]), .up_adc_or (up_adc_or_s[0]), .up_rstn (up_rstn), .up_clk (up_clk), .up_wreq (up_wreq), .up_waddr (up_waddr), .up_wdata (up_wdata), .up_wack (up_wack_s[0]), .up_rreq (up_rreq), .up_raddr (up_raddr), .up_rdata (up_rdata_s[0]), .up_rack (up_rack_s[0])); // channel 1 (q) axi_ad9361_rx_channel #( .Q_OR_I_N(1), .CHANNEL_ID(1), .DATAPATH_DISABLE (DATAPATH_DISABLE)) i_rx_channel_1 ( .adc_clk (adc_clk), .adc_rst (adc_rst), .adc_valid (adc_valid), .adc_data (adc_data[23:12]), .adc_data_q (adc_data[11:0]), .adc_or (1'b0), .dac_data (dac_data[23:12]), .adc_dcfilter_data_out (adc_dcfilter_data_out_1_s), .adc_dcfilter_data_in (adc_dcfilter_data_out_0_s), .adc_iqcor_valid (adc_valid_q0), .adc_iqcor_data (adc_data_q0), .adc_enable (adc_enable_q0), .up_adc_pn_err (up_adc_pn_err_s[1]), .up_adc_pn_oos (up_adc_pn_oos_s[1]), .up_adc_or (up_adc_or_s[1]), .up_rstn (up_rstn), .up_clk (up_clk), .up_wreq (up_wreq), .up_waddr (up_waddr), .up_wdata (up_wdata), .up_wack (up_wack_s[1]), .up_rreq (up_rreq), .up_raddr (up_raddr), .up_rdata (up_rdata_s[1]), .up_rack (up_rack_s[1])); // channel 2 (i) axi_ad9361_rx_channel #( .Q_OR_I_N(0), .CHANNEL_ID(2), .DATAPATH_DISABLE (DATAPATH_DISABLE)) i_rx_channel_2 ( .adc_clk (adc_clk), .adc_rst (adc_rst), .adc_valid (adc_valid), .adc_data (adc_data[35:24]), .adc_data_q (adc_data[47:36]), .adc_or (1'b0), .dac_data (dac_data[35:24]), .adc_dcfilter_data_out (adc_dcfilter_data_out_2_s), .adc_dcfilter_data_in (adc_dcfilter_data_out_3_s), .adc_iqcor_valid (adc_valid_i1), .adc_iqcor_data (adc_data_i1), .adc_enable (adc_enable_i1), .up_adc_pn_err (up_adc_pn_err_s[2]), .up_adc_pn_oos (up_adc_pn_oos_s[2]), .up_adc_or (up_adc_or_s[2]), .up_rstn (up_rstn), .up_clk (up_clk), .up_wreq (up_wreq), .up_waddr (up_waddr), .up_wdata (up_wdata), .up_wack (up_wack_s[2]), .up_rreq (up_rreq), .up_raddr (up_raddr), .up_rdata (up_rdata_s[2]), .up_rack (up_rack_s[2])); // channel 3 (q) axi_ad9361_rx_channel #( .Q_OR_I_N(1), .CHANNEL_ID(3), .DATAPATH_DISABLE (DATAPATH_DISABLE)) i_rx_channel_3 ( .adc_clk (adc_clk), .adc_rst (adc_rst), .adc_valid (adc_valid), .adc_data (adc_data[47:36]), .adc_data_q (adc_data[35:24]), .adc_or (1'b0), .dac_data (dac_data[47:36]), .adc_dcfilter_data_out (adc_dcfilter_data_out_3_s), .adc_dcfilter_data_in (adc_dcfilter_data_out_2_s), .adc_iqcor_valid (adc_valid_q1), .adc_iqcor_data (adc_data_q1), .adc_enable (adc_enable_q1), .up_adc_pn_err (up_adc_pn_err_s[3]), .up_adc_pn_oos (up_adc_pn_oos_s[3]), .up_adc_or (up_adc_or_s[3]), .up_rstn (up_rstn), .up_clk (up_clk), .up_wreq (up_wreq), .up_waddr (up_waddr), .up_wdata (up_wdata), .up_wack (up_wack_s[3]), .up_rreq (up_rreq), .up_raddr (up_raddr), .up_rdata (up_rdata_s[3]), .up_rack (up_rack_s[3])); // common processor control up_adc_common #(.ID (ID)) i_up_adc_common ( .mmcm_rst (), .adc_clk (adc_clk), .adc_rst (adc_rst), .adc_r1_mode (adc_r1_mode), .adc_ddr_edgesel (adc_ddr_edgesel), .adc_pin_mode (), .adc_status (adc_status), .adc_sync_status (1'd0), .adc_status_ovf (adc_dovf), .adc_status_unf (adc_dunf), .adc_clk_ratio (32'd1), .adc_start_code (), .adc_sync (), .up_status_pn_err (up_status_pn_err), .up_status_pn_oos (up_status_pn_oos), .up_status_or (up_status_or), .up_drp_sel (), .up_drp_wr (), .up_drp_addr (), .up_drp_wdata (), .up_drp_rdata (16'd0), .up_drp_ready (1'd0), .up_drp_locked (1'd1), .up_usr_chanmax (), .adc_usr_chanmax (8'd3), .up_adc_gpio_in (up_adc_gpio_in), .up_adc_gpio_out (up_adc_gpio_out), .up_rstn (up_rstn), .up_clk (up_clk), .up_wreq (up_wreq), .up_waddr (up_waddr), .up_wdata (up_wdata), .up_wack (up_wack_s[4]), .up_rreq (up_rreq), .up_raddr (up_raddr), .up_rdata (up_rdata_s[4]), .up_rack (up_rack_s[4])); // adc delay control up_delay_cntrl #(.DATA_WIDTH(7), .BASE_ADDRESS(6'h02)) i_delay_cntrl ( .delay_clk (delay_clk), .delay_rst (delay_rst), .delay_locked (delay_locked), .up_dld (up_dld), .up_dwdata (up_dwdata), .up_drdata (up_drdata), .up_rstn (up_rstn), .up_clk (up_clk), .up_wreq (up_wreq), .up_waddr (up_waddr), .up_wdata (up_wdata), .up_wack (up_wack_s[5]), .up_rreq (up_rreq), .up_raddr (up_raddr), .up_rdata (up_rdata_s[5]), .up_rack (up_rack_s[5])); endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_ad9361/axi_ad9361_rx_channel.v000066400000000000000000000200151457144405000307040ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** // ADC channel-need to work on dual mode for pn sequence `timescale 1ns/100ps module axi_ad9361_rx_channel ( // adc interface adc_clk, adc_rst, adc_valid, adc_data, adc_data_q, adc_or, dac_data, // channel interface adc_dcfilter_data_out, adc_dcfilter_data_in, adc_iqcor_valid, adc_iqcor_data, adc_enable, up_adc_pn_err, up_adc_pn_oos, up_adc_or, // processor interface up_rstn, up_clk, up_wreq, up_waddr, up_wdata, up_wack, up_rreq, up_raddr, up_rdata, up_rack); // parameters parameter Q_OR_I_N = 0; parameter CHANNEL_ID = 0; parameter DATAPATH_DISABLE = 0; // adc interface input adc_clk; input adc_rst; input adc_valid; input [11:0] adc_data; input [11:0] adc_data_q; input adc_or; input [11:0] dac_data; // channel interface output [15:0] adc_dcfilter_data_out; input [15:0] adc_dcfilter_data_in; output adc_iqcor_valid; output [15:0] adc_iqcor_data; output adc_enable; output up_adc_pn_err; output up_adc_pn_oos; output up_adc_or; // processor interface input up_rstn; input up_clk; input up_wreq; input [13:0] up_waddr; input [31:0] up_wdata; output up_wack; input up_rreq; input [13:0] up_raddr; output [31:0] up_rdata; output up_rack; // internal signals wire [11:0] adc_data_s; wire adc_dfmt_valid_s; wire [15:0] adc_dfmt_data_s; wire adc_dcfilter_valid_s; wire [15:0] adc_dcfilter_data_s; wire adc_iqcor_enb_s; wire adc_dcfilt_enb_s; wire adc_dfmt_se_s; wire adc_dfmt_type_s; wire adc_dfmt_enable_s; wire [15:0] adc_dcfilt_offset_s; wire [15:0] adc_dcfilt_coeff_s; wire [15:0] adc_iqcor_coeff_1_s; wire [15:0] adc_iqcor_coeff_2_s; wire [ 3:0] adc_pnseq_sel_s; wire [ 3:0] adc_data_sel_s; wire adc_pn_err_s; wire adc_pn_oos_s; // iq correction inputs assign adc_data_s = (adc_data_sel_s == 4'h0) ? adc_data : dac_data; assign adc_dcfilter_data_out = adc_dcfilter_data_s; axi_ad9361_rx_pnmon #(.Q_OR_I_N (Q_OR_I_N), .PRBS_SEL (CHANNEL_ID)) i_rx_pnmon ( .adc_clk (adc_clk), .adc_valid (adc_valid), .adc_data_i (adc_data), .adc_data_q (adc_data_q), .adc_pnseq_sel (adc_pnseq_sel_s), .adc_pn_oos (adc_pn_oos_s), .adc_pn_err (adc_pn_err_s)); generate if (DATAPATH_DISABLE == 1) begin assign adc_dfmt_valid_s = adc_valid; assign adc_dfmt_data_s = {4'd0, adc_data_s}; end else begin ad_datafmt #(.DATA_WIDTH (12)) i_ad_datafmt ( .clk (adc_clk), .valid (adc_valid), .data (adc_data_s), .valid_out (adc_dfmt_valid_s), .data_out (adc_dfmt_data_s), .dfmt_enable (adc_dfmt_enable_s), .dfmt_type (adc_dfmt_type_s), .dfmt_se (adc_dfmt_se_s)); end endgenerate generate if (DATAPATH_DISABLE == 1) begin assign adc_dcfilter_valid_s = adc_dfmt_valid_s; assign adc_dcfilter_data_s = adc_dfmt_data_s; end else begin ad_dcfilter i_ad_dcfilter ( .clk (adc_clk), .valid (adc_dfmt_valid_s), .data (adc_dfmt_data_s), .valid_out (adc_dcfilter_valid_s), .data_out (adc_dcfilter_data_s), .dcfilt_enb (adc_dcfilt_enb_s), .dcfilt_coeff (adc_dcfilt_coeff_s), .dcfilt_offset (adc_dcfilt_offset_s)); end endgenerate generate if (DATAPATH_DISABLE == 1) begin assign adc_iqcor_valid = adc_dcfilter_valid_s; assign adc_iqcor_data = adc_dcfilter_data_s; end else begin ad_iqcor #(.Q_OR_I_N (Q_OR_I_N)) i_ad_iqcor ( .clk (adc_clk), .valid (adc_dcfilter_valid_s), .data_in (adc_dcfilter_data_s), .data_iq (adc_dcfilter_data_in), .valid_out (adc_iqcor_valid), .data_out (adc_iqcor_data), .iqcor_enable (adc_iqcor_enb_s), .iqcor_coeff_1 (adc_iqcor_coeff_1_s), .iqcor_coeff_2 (adc_iqcor_coeff_2_s)); end endgenerate up_adc_channel #(.ADC_CHANNEL_ID (CHANNEL_ID)) i_up_adc_channel ( .adc_clk (adc_clk), .adc_rst (adc_rst), .adc_enable (adc_enable), .adc_iqcor_enb (adc_iqcor_enb_s), .adc_dcfilt_enb (adc_dcfilt_enb_s), .adc_dfmt_se (adc_dfmt_se_s), .adc_dfmt_type (adc_dfmt_type_s), .adc_dfmt_enable (adc_dfmt_enable_s), .adc_dcfilt_offset (adc_dcfilt_offset_s), .adc_dcfilt_coeff (adc_dcfilt_coeff_s), .adc_iqcor_coeff_1 (adc_iqcor_coeff_1_s), .adc_iqcor_coeff_2 (adc_iqcor_coeff_2_s), .adc_pnseq_sel (adc_pnseq_sel_s), .adc_data_sel (adc_data_sel_s), .adc_pn_err (adc_pn_err_s), .adc_pn_oos (adc_pn_oos_s), .adc_or (adc_or), .up_adc_pn_err (up_adc_pn_err), .up_adc_pn_oos (up_adc_pn_oos), .up_adc_or (up_adc_or), .up_usr_datatype_be (), .up_usr_datatype_signed (), .up_usr_datatype_shift (), .up_usr_datatype_total_bits (), .up_usr_datatype_bits (), .up_usr_decimation_m (), .up_usr_decimation_n (), .adc_usr_datatype_be (1'b0), .adc_usr_datatype_signed (1'b1), .adc_usr_datatype_shift (8'd0), .adc_usr_datatype_total_bits (8'd16), .adc_usr_datatype_bits (8'd16), .adc_usr_decimation_m (16'd1), .adc_usr_decimation_n (16'd1), .up_rstn (up_rstn), .up_clk (up_clk), .up_wreq (up_wreq), .up_waddr (up_waddr), .up_wdata (up_wdata), .up_wack (up_wack), .up_rreq (up_rreq), .up_raddr (up_raddr), .up_rdata (up_rdata), .up_rack (up_rack)); endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_ad9361/axi_ad9361_rx_pnmon.v000066400000000000000000000300201457144405000304200ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** // PN monitors `timescale 1ns/100ps module axi_ad9361_rx_pnmon ( // adc interface adc_clk, adc_valid, adc_data_i, adc_data_q, // pn out of sync and error adc_pnseq_sel, adc_pn_oos, adc_pn_err); // parameters parameter Q_OR_I_N = 0; parameter PRBS_SEL = 0; localparam PRBS_P09 = 0; localparam PRBS_P11 = 1; localparam PRBS_P15 = 2; localparam PRBS_P20 = 3; // adc interface input adc_clk; input adc_valid; input [11:0] adc_data_i; input [11:0] adc_data_q; // pn out of sync and error input [ 3:0] adc_pnseq_sel; output adc_pn_oos; output adc_pn_err; // internal registers reg adc_pn0_valid = 'd0; reg [15:0] adc_pn0_data = 'd0; reg adc_pn0_valid_in = 'd0; reg [15:0] adc_pn0_data_in = 'd0; reg [15:0] adc_pn0_data_pn = 'd0; reg adc_pn1_valid_t = 'd0; reg [11:0] adc_pn1_data_d = 'd0; reg adc_pn1_valid_in = 'd0; reg [23:0] adc_pn1_data_in = 'd0; reg [23:0] adc_pn1_data_pn = 'd0; reg adc_pn_valid_in = 'd0; reg [23:0] adc_pn_data_in = 'd0; reg [23:0] adc_pn_data_pn = 'd0; // internal signals wire [11:0] adc_pn0_data_i_s; wire [11:0] adc_pn0_data_q_s; wire [11:0] adc_pn0_data_q_rev_s; wire [15:0] adc_pn0_data_s; wire adc_pn0_iq_match_s; wire [15:0] adc_pn0_data_pn_s; wire adc_pn1_valid_s; wire [23:0] adc_pn1_data_pn_s; // bit reversal function function [11:0] brfn; input [11:0] din; reg [11:0] dout; begin dout[11] = din[ 0]; dout[10] = din[ 1]; dout[ 9] = din[ 2]; dout[ 8] = din[ 3]; dout[ 7] = din[ 4]; dout[ 6] = din[ 5]; dout[ 5] = din[ 6]; dout[ 4] = din[ 7]; dout[ 3] = din[ 8]; dout[ 2] = din[ 9]; dout[ 1] = din[10]; dout[ 0] = din[11]; brfn = dout; end endfunction // device-specific prbs function function [15:0] pn0fn; input [15:0] din; reg [15:0] dout; begin dout = {din[14:0], ((^din[15:4]) ^ (^din[2:1]))}; pn0fn = dout; end endfunction // standard prbs functions function [23:0] pn1fn; input [23:0] din; reg [23:0] dout; begin case (PRBS_SEL) PRBS_P09: begin dout[23] = din[ 8] ^ din[ 4]; dout[22] = din[ 7] ^ din[ 3]; dout[21] = din[ 6] ^ din[ 2]; dout[20] = din[ 5] ^ din[ 1]; dout[19] = din[ 4] ^ din[ 0]; dout[18] = din[ 3] ^ din[ 8] ^ din[ 4]; dout[17] = din[ 2] ^ din[ 7] ^ din[ 3]; dout[16] = din[ 1] ^ din[ 6] ^ din[ 2]; dout[15] = din[ 0] ^ din[ 5] ^ din[ 1]; dout[14] = din[ 8] ^ din[ 0]; dout[13] = din[ 7] ^ din[ 8] ^ din[ 4]; dout[12] = din[ 6] ^ din[ 7] ^ din[ 3]; dout[11] = din[ 5] ^ din[ 6] ^ din[ 2]; dout[10] = din[ 4] ^ din[ 5] ^ din[ 1]; dout[ 9] = din[ 3] ^ din[ 4] ^ din[ 0]; dout[ 8] = din[ 2] ^ din[ 3] ^ din[ 8] ^ din[ 4]; dout[ 7] = din[ 1] ^ din[ 2] ^ din[ 7] ^ din[ 3]; dout[ 6] = din[ 0] ^ din[ 1] ^ din[ 6] ^ din[ 2]; dout[ 5] = din[ 8] ^ din[ 0] ^ din[ 4] ^ din[ 5] ^ din[ 1]; dout[ 4] = din[ 7] ^ din[ 8] ^ din[ 3] ^ din[ 0]; dout[ 3] = din[ 6] ^ din[ 7] ^ din[ 2] ^ din[ 8] ^ din[ 4]; dout[ 2] = din[ 5] ^ din[ 6] ^ din[ 1] ^ din[ 7] ^ din[ 3]; dout[ 1] = din[ 4] ^ din[ 5] ^ din[ 0] ^ din[ 6] ^ din[ 2]; dout[ 0] = din[ 3] ^ din[ 8] ^ din[ 5] ^ din[ 1]; end PRBS_P11: begin dout[23] = din[10] ^ din[ 8]; dout[22] = din[ 9] ^ din[ 7]; dout[21] = din[ 8] ^ din[ 6]; dout[20] = din[ 7] ^ din[ 5]; dout[19] = din[ 6] ^ din[ 4]; dout[18] = din[ 5] ^ din[ 3]; dout[17] = din[ 4] ^ din[ 2]; dout[16] = din[ 3] ^ din[ 1]; dout[15] = din[ 2] ^ din[ 0]; dout[14] = din[ 1] ^ din[10] ^ din[ 8]; dout[13] = din[ 0] ^ din[ 9] ^ din[ 7]; dout[12] = din[10] ^ din[ 6]; dout[11] = din[ 9] ^ din[ 5]; dout[10] = din[ 8] ^ din[ 4]; dout[ 9] = din[ 7] ^ din[ 3]; dout[ 8] = din[ 6] ^ din[ 2]; dout[ 7] = din[ 5] ^ din[ 1]; dout[ 6] = din[ 4] ^ din[ 0]; dout[ 5] = din[ 3] ^ din[10] ^ din[ 8]; dout[ 4] = din[ 2] ^ din[ 9] ^ din[ 7]; dout[ 3] = din[ 1] ^ din[ 8] ^ din[ 6]; dout[ 2] = din[ 0] ^ din[ 7] ^ din[ 5]; dout[ 1] = din[10] ^ din[ 6] ^ din[ 8] ^ din[ 4]; dout[ 0] = din[ 9] ^ din[ 5] ^ din[ 7] ^ din[ 3]; end PRBS_P15: begin dout[23] = din[14] ^ din[13]; dout[22] = din[13] ^ din[12]; dout[21] = din[12] ^ din[11]; dout[20] = din[11] ^ din[10]; dout[19] = din[10] ^ din[ 9]; dout[18] = din[ 9] ^ din[ 8]; dout[17] = din[ 8] ^ din[ 7]; dout[16] = din[ 7] ^ din[ 6]; dout[15] = din[ 6] ^ din[ 5]; dout[14] = din[ 5] ^ din[ 4]; dout[13] = din[ 4] ^ din[ 3]; dout[12] = din[ 3] ^ din[ 2]; dout[11] = din[ 2] ^ din[ 1]; dout[10] = din[ 1] ^ din[ 0]; dout[ 9] = din[ 0] ^ din[14] ^ din[13]; dout[ 8] = din[14] ^ din[12]; dout[ 7] = din[13] ^ din[11]; dout[ 6] = din[12] ^ din[10]; dout[ 5] = din[11] ^ din[ 9]; dout[ 4] = din[10] ^ din[ 8]; dout[ 3] = din[ 9] ^ din[ 7]; dout[ 2] = din[ 8] ^ din[ 6]; dout[ 1] = din[ 7] ^ din[ 5]; dout[ 0] = din[ 6] ^ din[ 4]; end PRBS_P20: begin dout[23] = din[19] ^ din[ 2]; dout[22] = din[18] ^ din[ 1]; dout[21] = din[17] ^ din[ 0]; dout[20] = din[16] ^ din[19] ^ din[ 2]; dout[19] = din[15] ^ din[18] ^ din[ 1]; dout[18] = din[14] ^ din[17] ^ din[ 0]; dout[17] = din[13] ^ din[16] ^ din[19] ^ din[ 2]; dout[16] = din[12] ^ din[15] ^ din[18] ^ din[ 1]; dout[15] = din[11] ^ din[14] ^ din[17] ^ din[ 0]; dout[14] = din[10] ^ din[13] ^ din[16] ^ din[19] ^ din[ 2]; dout[13] = din[ 9] ^ din[12] ^ din[15] ^ din[18] ^ din[ 1]; dout[12] = din[ 8] ^ din[11] ^ din[14] ^ din[17] ^ din[ 0]; dout[11] = din[ 7] ^ din[10] ^ din[13] ^ din[16] ^ din[19] ^ din[ 2]; dout[10] = din[ 6] ^ din[ 9] ^ din[12] ^ din[15] ^ din[18] ^ din[ 1]; dout[ 9] = din[ 5] ^ din[ 8] ^ din[11] ^ din[14] ^ din[17] ^ din[ 0]; dout[ 8] = din[ 4] ^ din[ 7] ^ din[10] ^ din[13] ^ din[16] ^ din[19] ^ din[ 2]; dout[ 7] = din[ 3] ^ din[ 6] ^ din[ 9] ^ din[12] ^ din[15] ^ din[18] ^ din[ 1]; dout[ 6] = din[ 2] ^ din[ 5] ^ din[ 8] ^ din[11] ^ din[14] ^ din[17] ^ din[ 0]; dout[ 5] = din[ 1] ^ din[ 4] ^ din[ 7] ^ din[10] ^ din[13] ^ din[16] ^ din[19] ^ din[ 2]; dout[ 4] = din[ 0] ^ din[ 3] ^ din[ 6] ^ din[ 9] ^ din[12] ^ din[15] ^ din[18] ^ din[ 1]; dout[ 3] = din[19] ^ din[ 5] ^ din[ 8] ^ din[11] ^ din[14] ^ din[17] ^ din[ 0]; dout[ 2] = din[18] ^ din[ 4] ^ din[ 7] ^ din[10] ^ din[13] ^ din[16] ^ din[19] ^ din[ 2]; dout[ 1] = din[17] ^ din[ 3] ^ din[ 6] ^ din[ 9] ^ din[12] ^ din[15] ^ din[18] ^ din[ 1]; dout[ 0] = din[16] ^ din[ 2] ^ din[ 5] ^ din[ 8] ^ din[11] ^ din[14] ^ din[17] ^ din[ 0]; end endcase pn1fn = dout; end endfunction // device specific, assuming lower nibble is lost- assign adc_pn0_data_i_s = (Q_OR_I_N == 1) ? adc_data_q : adc_data_i; assign adc_pn0_data_q_s = (Q_OR_I_N == 1) ? adc_data_i : adc_data_q; assign adc_pn0_data_q_rev_s = brfn(adc_pn0_data_q_s); assign adc_pn0_data_s = {adc_pn0_data_i_s, adc_pn0_data_q_rev_s[3:0]}; assign adc_pn0_iq_match_s = (adc_pn0_data_i_s[7:0] == adc_pn0_data_q_rev_s[11:4]) ? 1'b1 : 1'b0; assign adc_pn0_data_pn_s = (adc_pn_oos == 1'b1) ? adc_pn0_data_in : adc_pn0_data_pn; always @(posedge adc_clk) begin adc_pn0_valid <= adc_valid; adc_pn0_data <= (adc_pn0_iq_match_s == 1'b0) ? 16'hdead : adc_pn0_data_s; adc_pn0_valid_in <= adc_pn0_valid; if (adc_pn0_valid == 1'b1) begin adc_pn0_data_in <= adc_pn0_data; adc_pn0_data_pn <= pn0fn(adc_pn0_data_pn_s); end end // standard, runs on 24bit assign adc_pn1_valid_s = adc_pn1_valid_t & adc_valid; assign adc_pn1_data_pn_s = (adc_pn_oos == 1'b1) ? adc_pn1_data_in : adc_pn1_data_pn; always @(posedge adc_clk) begin if (adc_valid == 1'b1) begin adc_pn1_valid_t <= ~adc_pn1_valid_t; adc_pn1_data_d <= adc_data_i; end adc_pn1_valid_in <= adc_pn1_valid_s; if (adc_pn1_valid_s == 1'b1) begin adc_pn1_data_in <= {adc_pn1_data_d, adc_data_i}; adc_pn1_data_pn <= pn1fn(adc_pn1_data_pn_s); end end // pn mux always @(posedge adc_clk) begin if (adc_pnseq_sel == 4'h9) begin adc_pn_valid_in <= adc_pn1_valid_in; adc_pn_data_in <= adc_pn1_data_in; adc_pn_data_pn <= adc_pn1_data_pn; end else begin adc_pn_valid_in <= adc_pn0_valid_in; adc_pn_data_in <= {adc_pn0_data_in[7:0], adc_pn0_data_in}; adc_pn_data_pn <= {adc_pn0_data_pn[7:0], adc_pn0_data_pn}; end end // pn oos & pn err ad_pnmon #(.DATA_WIDTH(24)) i_pnmon ( .adc_clk (adc_clk), .adc_valid_in (adc_pn_valid_in), .adc_data_in (adc_pn_data_in), .adc_data_pn (adc_pn_data_pn), .adc_pn_oos (adc_pn_oos), .adc_pn_err (adc_pn_err)); endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_ad9361/axi_ad9361_tdd.v000066400000000000000000000247531457144405000273530ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2015(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** `timescale 1ns/1ps module axi_ad9361_tdd ( // clock clk, rst, // control signals from the tdd control tdd_rx_vco_en, tdd_tx_vco_en, tdd_rx_rf_en, tdd_tx_rf_en, // status signal tdd_enabled, tdd_status, // sync signal tdd_sync, tdd_sync_en, tdd_terminal_type, // tx/rx data flow control tx_valid_i0, tx_valid_q0, tx_valid_i1, tx_valid_q1, tdd_tx_valid_i0, tdd_tx_valid_q0, tdd_tx_valid_i1, tdd_tx_valid_q1, rx_valid_i0, rx_valid_q0, rx_valid_i1, rx_valid_q1, tdd_rx_valid_i0, tdd_rx_valid_q0, tdd_rx_valid_i1, tdd_rx_valid_q1, // bus interface up_rstn, up_clk, up_wreq, up_waddr, up_wdata, up_wack, up_rreq, up_raddr, up_rdata, up_rack, tdd_dbg ); input clk; input rst; // control signals from the tdd control output tdd_rx_vco_en; output tdd_tx_vco_en; output tdd_rx_rf_en; output tdd_tx_rf_en; output tdd_enabled; input [ 7:0] tdd_status; input tdd_sync; output tdd_sync_en; output tdd_terminal_type; // tx data flow control input tx_valid_i0; input tx_valid_q0; input tx_valid_i1; input tx_valid_q1; output tdd_tx_valid_i0; output tdd_tx_valid_q0; output tdd_tx_valid_i1; output tdd_tx_valid_q1; // rx data flow control input rx_valid_i0; input rx_valid_q0; input rx_valid_i1; input rx_valid_q1; output tdd_rx_valid_i0; output tdd_rx_valid_q0; output tdd_rx_valid_i1; output tdd_rx_valid_q1; // bus interface input up_rstn; input up_clk; input up_wreq; input [13:0] up_waddr; input [31:0] up_wdata; output up_wack; input up_rreq; input [13:0] up_raddr; output [31:0] up_rdata; output up_rack; output [41:0] tdd_dbg; // internal signals wire rst; wire tdd_enable_s; wire tdd_enable_synced_s; wire tdd_secondary_s; wire [ 7:0] tdd_burst_count_s; wire tdd_rx_only_s; wire tdd_tx_only_s; wire tdd_gated_rx_dmapath_s; wire tdd_gated_tx_dmapath_s; wire [23:0] tdd_counter_init_s; wire [23:0] tdd_frame_length_s; wire tdd_terminal_type_s; wire tdd_sync_enable_s; wire [23:0] tdd_vco_rx_on_1_s; wire [23:0] tdd_vco_rx_off_1_s; wire [23:0] tdd_vco_tx_on_1_s; wire [23:0] tdd_vco_tx_off_1_s; wire [23:0] tdd_rx_on_1_s; wire [23:0] tdd_rx_off_1_s; wire [23:0] tdd_tx_on_1_s; wire [23:0] tdd_tx_off_1_s; wire [23:0] tdd_tx_dp_on_1_s; wire [23:0] tdd_tx_dp_off_1_s; wire [23:0] tdd_vco_rx_on_2_s; wire [23:0] tdd_vco_rx_off_2_s; wire [23:0] tdd_vco_tx_on_2_s; wire [23:0] tdd_vco_tx_off_2_s; wire [23:0] tdd_rx_on_2_s; wire [23:0] tdd_rx_off_2_s; wire [23:0] tdd_tx_on_2_s; wire [23:0] tdd_tx_off_2_s; wire [23:0] tdd_tx_dp_on_2_s; wire [23:0] tdd_tx_dp_off_2_s; wire [23:0] tdd_counter_status; wire tdd_tx_dp_en_s; assign tdd_dbg = {tdd_counter_status, tdd_enable_s, tdd_sync, tdd_tx_dp_en_s, tdd_rx_vco_en, tdd_tx_vco_en, tdd_rx_rf_en, tdd_tx_rf_en}; // tx/rx data flow control assign tdd_tx_valid_i0 = ((tdd_enable_synced_s & tdd_gated_tx_dmapath_s) == 1'b1) ? (tx_valid_i0 & tdd_tx_dp_en_s) : tx_valid_i0; assign tdd_tx_valid_q0 = ((tdd_enable_synced_s & tdd_gated_tx_dmapath_s) == 1'b1) ? (tx_valid_q0 & tdd_tx_dp_en_s) : tx_valid_q0; assign tdd_tx_valid_i1 = ((tdd_enable_synced_s & tdd_gated_tx_dmapath_s) == 1'b1) ? (tx_valid_i1 & tdd_tx_dp_en_s) : tx_valid_i1; assign tdd_tx_valid_q1 = ((tdd_enable_synced_s & tdd_gated_tx_dmapath_s) == 1'b1) ? (tx_valid_q1 & tdd_tx_dp_en_s) : tx_valid_q1; assign tdd_rx_valid_i0 = ((tdd_enable_synced_s & tdd_gated_rx_dmapath_s) == 1'b1) ? (rx_valid_i0 & tdd_rx_rf_en) : rx_valid_i0; assign tdd_rx_valid_q0 = ((tdd_enable_synced_s & tdd_gated_rx_dmapath_s) == 1'b1) ? (rx_valid_q0 & tdd_rx_rf_en) : rx_valid_q0; assign tdd_rx_valid_i1 = ((tdd_enable_synced_s & tdd_gated_rx_dmapath_s) == 1'b1) ? (rx_valid_i1 & tdd_rx_rf_en) : rx_valid_i1; assign tdd_rx_valid_q1 = ((tdd_enable_synced_s & tdd_gated_rx_dmapath_s) == 1'b1) ? (rx_valid_q1 & tdd_rx_rf_en) : rx_valid_q1; assign tdd_enabled = tdd_enable_synced_s; assign tdd_terminal_type = ~tdd_terminal_type_s; // instantiations up_tdd_cntrl i_up_tdd_cntrl( .clk(clk), .rst(rst), .tdd_enable(tdd_enable_s), .tdd_secondary(tdd_secondary_s), .tdd_burst_count(tdd_burst_count_s), .tdd_tx_only(tdd_tx_only_s), .tdd_rx_only(tdd_rx_only_s), .tdd_gated_rx_dmapath(tdd_gated_rx_dmapath_s), .tdd_gated_tx_dmapath(tdd_gated_tx_dmapath_s), .tdd_counter_init(tdd_counter_init_s), .tdd_frame_length(tdd_frame_length_s), .tdd_terminal_type(tdd_terminal_type_s), .tdd_sync_enable(tdd_sync_enable_s), .tdd_vco_rx_on_1(tdd_vco_rx_on_1_s), .tdd_vco_rx_off_1(tdd_vco_rx_off_1_s), .tdd_vco_tx_on_1(tdd_vco_tx_on_1_s), .tdd_vco_tx_off_1(tdd_vco_tx_off_1_s), .tdd_rx_on_1(tdd_rx_on_1_s), .tdd_rx_off_1(tdd_rx_off_1_s), .tdd_tx_on_1(tdd_tx_on_1_s), .tdd_tx_off_1(tdd_tx_off_1_s), .tdd_tx_dp_on_1(tdd_tx_dp_on_1_s), .tdd_tx_dp_off_1(tdd_tx_dp_off_1_s), .tdd_vco_rx_on_2(tdd_vco_rx_on_2_s), .tdd_vco_rx_off_2(tdd_vco_rx_off_2_s), .tdd_vco_tx_on_2(tdd_vco_tx_on_2_s), .tdd_vco_tx_off_2(tdd_vco_tx_off_2_s), .tdd_rx_on_2(tdd_rx_on_2_s), .tdd_rx_off_2(tdd_rx_off_2_s), .tdd_tx_on_2(tdd_tx_on_2_s), .tdd_tx_off_2(tdd_tx_off_2_s), .tdd_tx_dp_on_2(tdd_tx_dp_on_2_s), .tdd_tx_dp_off_2(tdd_tx_dp_off_2_s), .tdd_status(tdd_status), .up_rstn(up_rstn), .up_clk(up_clk), .up_wreq(up_wreq), .up_waddr(up_waddr), .up_wdata(up_wdata), .up_wack(up_wack), .up_rreq(up_rreq), .up_raddr(up_raddr), .up_rdata(up_rdata), .up_rack(up_rack)); // the TX_DATA_PATH_DELAY and CONTROL_PATH_DELAY are specificly defined // for the axi_ad9361 core ad_tdd_control #( .TX_DATA_PATH_DELAY(14), .CONTROL_PATH_DELAY(3)) i_tdd_control( .clk(clk), .rst(rst), .tdd_enable(tdd_enable_s), .tdd_enable_synced (tdd_enable_synced_s), .tdd_secondary(tdd_secondary_s), .tdd_counter_init(tdd_counter_init_s), .tdd_frame_length(tdd_frame_length_s), .tdd_burst_count(tdd_burst_count_s), .tdd_rx_only(tdd_rx_only_s), .tdd_tx_only(tdd_tx_only_s), .tdd_sync (tdd_sync), .tdd_sync_en (tdd_sync_en), .tdd_vco_rx_on_1(tdd_vco_rx_on_1_s), .tdd_vco_rx_off_1(tdd_vco_rx_off_1_s), .tdd_vco_tx_on_1(tdd_vco_tx_on_1_s), .tdd_vco_tx_off_1(tdd_vco_tx_off_1_s), .tdd_rx_on_1(tdd_rx_on_1_s), .tdd_rx_off_1(tdd_rx_off_1_s), .tdd_tx_on_1(tdd_tx_on_1_s), .tdd_tx_off_1(tdd_tx_off_1_s), .tdd_tx_dp_on_1(tdd_tx_dp_on_1_s), .tdd_tx_dp_off_1(tdd_tx_dp_off_1_s), .tdd_vco_rx_on_2(tdd_vco_rx_on_2_s), .tdd_vco_rx_off_2(tdd_vco_rx_off_2_s), .tdd_vco_tx_on_2(tdd_vco_tx_on_2_s), .tdd_vco_tx_off_2(tdd_vco_tx_off_2_s), .tdd_rx_on_2(tdd_rx_on_2_s), .tdd_rx_off_2(tdd_rx_off_2_s), .tdd_tx_on_2(tdd_tx_on_2_s), .tdd_tx_off_2(tdd_tx_off_2_s), .tdd_tx_dp_on_2(tdd_tx_dp_on_2_s), .tdd_tx_dp_off_2(tdd_tx_dp_off_2_s), .tdd_tx_dp_en(tdd_tx_dp_en_s), .tdd_rx_vco_en(tdd_rx_vco_en), .tdd_tx_vco_en(tdd_tx_vco_en), .tdd_rx_rf_en(tdd_rx_rf_en), .tdd_tx_rf_en(tdd_tx_rf_en), .tdd_counter_status(tdd_counter_status)); endmodule bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_ad9361/axi_ad9361_tdd_if.v000066400000000000000000000107051457144405000300210ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2015(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** `timescale 1ns/1ps module axi_ad9361_tdd_if( // clock clk, rst, // control signals from the tdd control tdd_rx_vco_en, tdd_tx_vco_en, tdd_rx_rf_en, tdd_tx_rf_en, // device interface ad9361_txnrx, ad9361_enable, // interface status ad9361_tdd_status ); // parameters parameter LEVEL_OR_PULSE_N = 0; // the control signals are edge (pulse) or level sensitive localparam PULSE_MODE = 0; localparam LEVEL_MODE = 1; // clock input clk; input rst; // control signals from the tdd control input tdd_rx_vco_en; input tdd_tx_vco_en; input tdd_rx_rf_en; input tdd_tx_rf_en; // device interface output ad9361_txnrx; output ad9361_enable; // interface status output [ 7:0] ad9361_tdd_status; // internal registers reg tdd_rx_rf_en_d = 1'b0; reg tdd_tx_rf_en_d = 1'b0; reg tdd_vco_overlap = 1'b0; reg tdd_rf_overlap = 1'b0; wire ad9361_txnrx_s; wire ad9361_enable_s; // just one VCO can be enabled at a time assign ad9361_txnrx_s = tdd_tx_vco_en & ~tdd_rx_vco_en; always @(posedge clk) begin tdd_rx_rf_en_d <= tdd_rx_rf_en; tdd_tx_rf_en_d <= tdd_tx_rf_en; end assign ad9361_enable_s = (LEVEL_OR_PULSE_N == PULSE_MODE) ? ((~tdd_rx_rf_en_d & tdd_rx_rf_en) | (tdd_rx_rf_en_d & ~tdd_rx_rf_en) | (~tdd_tx_rf_en_d & tdd_tx_rf_en) | (tdd_tx_rf_en_d & ~tdd_tx_rf_en)) : (tdd_rx_rf_en | tdd_tx_rf_en); always @(posedge clk) begin if(rst == 1'b1) begin tdd_vco_overlap <= 1'b0; tdd_rf_overlap <= 1'b0; end else begin tdd_vco_overlap <= tdd_rx_vco_en & tdd_tx_vco_en; tdd_rf_overlap <= tdd_rx_rf_en & tdd_tx_rf_en; end end assign ad9361_tdd_status = {6'b0, tdd_rf_overlap, tdd_vco_overlap}; assign ad9361_txnrx = ad9361_txnrx_s; assign ad9361_enable = ad9361_enable_s; endmodule bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_ad9361/axi_ad9361_tx.v000066400000000000000000000261741457144405000272320ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module axi_ad9361_tx ( // dac interface dac_clk, dac_valid, dac_data, dac_r1_mode, adc_data, // delay interface up_dld, up_dwdata, up_drdata, delay_clk, delay_rst, delay_locked, // master/slave dac_sync_in, dac_sync_out, // dma interface dac_enable_i0, dac_valid_i0, dac_data_i0, dac_enable_q0, dac_valid_q0, dac_data_q0, dac_enable_i1, dac_valid_i1, dac_data_i1, dac_enable_q1, dac_valid_q1, dac_data_q1, dac_dovf, dac_dunf, // gpio up_dac_gpio_in, up_dac_gpio_out, // processor interface up_rstn, up_clk, up_wreq, up_waddr, up_wdata, up_wack, up_rreq, up_raddr, up_rdata, up_rack); // parameters parameter DATAPATH_DISABLE = 0; parameter ID = 0; parameter DDS_DISABLE = 0; // dac interface input dac_clk; output dac_valid; output [47:0] dac_data; output dac_r1_mode; input [47:0] adc_data; // delay interface output [ 9:0] up_dld; output [49:0] up_dwdata; input [49:0] up_drdata; input delay_clk; output delay_rst; input delay_locked; // master/slave input dac_sync_in; output dac_sync_out; // dma interface output dac_enable_i0; output dac_valid_i0; input [15:0] dac_data_i0; output dac_enable_q0; output dac_valid_q0; input [15:0] dac_data_q0; output dac_enable_i1; output dac_valid_i1; input [15:0] dac_data_i1; output dac_enable_q1; output dac_valid_q1; input [15:0] dac_data_q1; input dac_dovf; input dac_dunf; // gpio input [31:0] up_dac_gpio_in; output [31:0] up_dac_gpio_out; // processor interface input up_rstn; input up_clk; input up_wreq; input [13:0] up_waddr; input [31:0] up_wdata; output up_wack; input up_rreq; input [13:0] up_raddr; output [31:0] up_rdata; output up_rack; // internal registers reg dac_data_sync = 'd0; reg [ 7:0] dac_rate_cnt = 'd0; reg dac_valid = 'd0; reg dac_valid_i0 = 'd0; reg dac_valid_q0 = 'd0; reg dac_valid_i1 = 'd0; reg dac_valid_q1 = 'd0; reg [31:0] up_rdata = 'd0; reg up_rack = 'd0; reg up_wack = 'd0; // internal clock and resets wire dac_rst; // internal signals wire dac_data_sync_s; wire dac_dds_format_s; wire [ 7:0] dac_datarate_s; wire [47:0] dac_data_int_s; wire [31:0] up_rdata_s[0:5]; wire up_rack_s[0:5]; wire up_wack_s[0:5]; // master/slave assign dac_data_sync_s = (ID == 0) ? dac_sync_out : dac_sync_in; always @(posedge dac_clk) begin dac_data_sync <= dac_data_sync_s; end // rate counters and data sync signals always @(posedge dac_clk) begin if ((dac_data_sync == 1'b1) || (dac_rate_cnt == 8'd0)) begin dac_rate_cnt <= dac_datarate_s; end else begin dac_rate_cnt <= dac_rate_cnt - 1'b1; end end // dma interface always @(posedge dac_clk) begin dac_valid <= (dac_rate_cnt == 8'd0) ? 1'b1 : 1'b0; dac_valid_i0 <= dac_valid; dac_valid_q0 <= dac_valid; dac_valid_i1 <= dac_valid & ~dac_r1_mode; dac_valid_q1 <= dac_valid & ~dac_r1_mode; end // processor read interface always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_rdata <= 'd0; up_rack <= 'd0; up_wack <= 'd0; end else begin up_rdata <= up_rdata_s[0] | up_rdata_s[1] | up_rdata_s[2] | up_rdata_s[3] | up_rdata_s[4] | up_rdata_s[5]; up_rack <= up_rack_s[0] | up_rack_s[1] | up_rack_s[2] | up_rack_s[3] | up_rack_s[4] | up_rack_s[5]; up_wack <= up_wack_s[0] | up_wack_s[1] | up_wack_s[2] | up_wack_s[3] | up_wack_s[4] | up_wack_s[5]; end end // dac channel axi_ad9361_tx_channel #( .CHANNEL_ID (0), .Q_OR_I_N (0), .DDS_DISABLE (DDS_DISABLE), .DATAPATH_DISABLE (DATAPATH_DISABLE)) i_tx_channel_0 ( .dac_clk (dac_clk), .dac_rst (dac_rst), .dac_valid (dac_valid), .dma_data (dac_data_i0), .adc_data (adc_data[11:0]), .dac_data (dac_data[11:0]), .dac_data_out (dac_data_int_s[11:0]), .dac_data_in (dac_data_int_s[23:12]), .dac_enable (dac_enable_i0), .dac_data_sync (dac_data_sync), .dac_dds_format (dac_dds_format_s), .up_rstn (up_rstn), .up_clk (up_clk), .up_wreq (up_wreq), .up_waddr (up_waddr), .up_wdata (up_wdata), .up_wack (up_wack_s[0]), .up_rreq (up_rreq), .up_raddr (up_raddr), .up_rdata (up_rdata_s[0]), .up_rack (up_rack_s[0])); // dac channel axi_ad9361_tx_channel #( .CHANNEL_ID (1), .Q_OR_I_N (1), .DDS_DISABLE (DDS_DISABLE), .DATAPATH_DISABLE (DATAPATH_DISABLE)) i_tx_channel_1 ( .dac_clk (dac_clk), .dac_rst (dac_rst), .dac_valid (dac_valid), .dma_data (dac_data_q0), .adc_data (adc_data[23:12]), .dac_data (dac_data[23:12]), .dac_data_out (dac_data_int_s[23:12]), .dac_data_in (dac_data_int_s[11:0]), .dac_enable (dac_enable_q0), .dac_data_sync (dac_data_sync), .dac_dds_format (dac_dds_format_s), .up_rstn (up_rstn), .up_clk (up_clk), .up_wreq (up_wreq), .up_waddr (up_waddr), .up_wdata (up_wdata), .up_wack (up_wack_s[1]), .up_rreq (up_rreq), .up_raddr (up_raddr), .up_rdata (up_rdata_s[1]), .up_rack (up_rack_s[1])); // dac channel axi_ad9361_tx_channel #( .CHANNEL_ID (2), .Q_OR_I_N (0), .DDS_DISABLE (DDS_DISABLE), .DATAPATH_DISABLE (DATAPATH_DISABLE)) i_tx_channel_2 ( .dac_clk (dac_clk), .dac_rst (dac_rst), .dac_valid (dac_valid), .dma_data (dac_data_i1), .adc_data (adc_data[35:24]), .dac_data (dac_data[35:24]), .dac_data_out (dac_data_int_s[35:24]), .dac_data_in (dac_data_int_s[47:36]), .dac_enable (dac_enable_i1), .dac_data_sync (dac_data_sync), .dac_dds_format (dac_dds_format_s), .up_rstn (up_rstn), .up_clk (up_clk), .up_wreq (up_wreq), .up_waddr (up_waddr), .up_wdata (up_wdata), .up_wack (up_wack_s[2]), .up_rreq (up_rreq), .up_raddr (up_raddr), .up_rdata (up_rdata_s[2]), .up_rack (up_rack_s[2])); // dac channel axi_ad9361_tx_channel #( .CHANNEL_ID (3), .Q_OR_I_N (1), .DDS_DISABLE (DDS_DISABLE), .DATAPATH_DISABLE (DATAPATH_DISABLE)) i_tx_channel_3 ( .dac_clk (dac_clk), .dac_rst (dac_rst), .dac_valid (dac_valid), .dma_data (dac_data_q1), .adc_data (adc_data[47:36]), .dac_data (dac_data[47:36]), .dac_data_out (dac_data_int_s[47:36]), .dac_data_in (dac_data_int_s[35:24]), .dac_enable (dac_enable_q1), .dac_data_sync (dac_data_sync), .dac_dds_format (dac_dds_format_s), .up_rstn (up_rstn), .up_clk (up_clk), .up_wreq (up_wreq), .up_waddr (up_waddr), .up_wdata (up_wdata), .up_wack (up_wack_s[3]), .up_rreq (up_rreq), .up_raddr (up_raddr), .up_rdata (up_rdata_s[3]), .up_rack (up_rack_s[3])); // dac common processor interface up_dac_common #(.ID (ID)) i_up_dac_common ( .mmcm_rst (), .dac_clk (dac_clk), .dac_rst (dac_rst), .dac_sync (dac_sync_out), .dac_frame (), .dac_par_type (), .dac_par_enb (), .dac_r1_mode (dac_r1_mode), .dac_datafmt (dac_dds_format_s), .dac_datarate (dac_datarate_s), .dac_status (1'b1), .dac_status_ovf (dac_dovf), .dac_status_unf (dac_dunf), .dac_clk_ratio (32'd1), .up_drp_sel (), .up_drp_wr (), .up_drp_addr (), .up_drp_wdata (), .up_drp_rdata (16'd0), .up_drp_ready (1'd0), .up_drp_locked (1'd1), .up_usr_chanmax (), .dac_usr_chanmax (8'd3), .up_dac_gpio_in (up_dac_gpio_in), .up_dac_gpio_out (up_dac_gpio_out), .up_rstn (up_rstn), .up_clk (up_clk), .up_wreq (up_wreq), .up_waddr (up_waddr), .up_wdata (up_wdata), .up_wack (up_wack_s[4]), .up_rreq (up_rreq), .up_raddr (up_raddr), .up_rdata (up_rdata_s[4]), .up_rack (up_rack_s[4])); // dac delay control up_delay_cntrl #(.DATA_WIDTH(10), .BASE_ADDRESS(6'h12)) i_delay_cntrl ( .delay_clk (delay_clk), .delay_rst (delay_rst), .delay_locked (delay_locked), .up_dld (up_dld), .up_dwdata (up_dwdata), .up_drdata (up_drdata), .up_rstn (up_rstn), .up_clk (up_clk), .up_wreq (up_wreq), .up_waddr (up_waddr), .up_wdata (up_wdata), .up_wack (up_wack_s[5]), .up_rreq (up_rreq), .up_raddr (up_raddr), .up_rdata (up_rdata_s[5]), .up_rack (up_rack_s[5])); endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_ad9361/axi_ad9361_tx_channel.v000066400000000000000000000345431457144405000307210ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module axi_ad9361_tx_channel ( // dac interface dac_clk, dac_rst, dac_valid, dma_data, adc_data, dac_data, dac_data_out, dac_data_in, // processor interface dac_enable, dac_data_sync, dac_dds_format, // bus interface up_rstn, up_clk, up_wreq, up_waddr, up_wdata, up_wack, up_rreq, up_raddr, up_rdata, up_rack); // parameters parameter CHANNEL_ID = 32'h0; parameter Q_OR_I_N = 0; parameter DDS_DISABLE = 0; parameter DATAPATH_DISABLE = 0; localparam PRBS_SEL = CHANNEL_ID; localparam PRBS_P09 = 0; localparam PRBS_P11 = 1; localparam PRBS_P15 = 2; localparam PRBS_P20 = 3; // dac interface input dac_clk; input dac_rst; input dac_valid; input [15:0] dma_data; input [11:0] adc_data; output [11:0] dac_data; output [11:0] dac_data_out; input [11:0] dac_data_in; // processor interface output dac_enable; input dac_data_sync; input dac_dds_format; // bus interface input up_rstn; input up_clk; input up_wreq; input [13:0] up_waddr; input [31:0] up_wdata; output up_wack; input up_rreq; input [13:0] up_raddr; output [31:0] up_rdata; output up_rack; // internal registers reg dac_valid_sel = 'd0; reg dac_enable = 'd0; reg [11:0] dac_data = 'd0; reg [11:0] dac_data_out = 'd0; reg [23:0] dac_pn_seq = 'd0; reg [11:0] dac_pn_data = 'd0; reg [15:0] dac_pat_data = 'd0; reg [15:0] dac_dds_phase_0 = 'd0; reg [15:0] dac_dds_phase_1 = 'd0; reg [15:0] dac_dds_incr_0 = 'd0; reg [15:0] dac_dds_incr_1 = 'd0; reg [15:0] dac_dds_data = 'd0; // internal signals wire dac_iqcor_valid_s; wire [15:0] dac_iqcor_data_s; wire [15:0] dac_dds_data_s; wire [15:0] dac_dds_scale_1_s; wire [15:0] dac_dds_init_1_s; wire [15:0] dac_dds_incr_1_s; wire [15:0] dac_dds_scale_2_s; wire [15:0] dac_dds_init_2_s; wire [15:0] dac_dds_incr_2_s; wire [15:0] dac_pat_data_1_s; wire [15:0] dac_pat_data_2_s; wire [ 3:0] dac_data_sel_s; wire dac_iqcor_enb_s; wire [15:0] dac_iqcor_coeff_1_s; wire [15:0] dac_iqcor_coeff_2_s; // standard prbs functions function [23:0] pn1fn; input [23:0] din; reg [23:0] dout; begin case (PRBS_SEL) PRBS_P09: begin dout[23] = din[ 8] ^ din[ 4]; dout[22] = din[ 7] ^ din[ 3]; dout[21] = din[ 6] ^ din[ 2]; dout[20] = din[ 5] ^ din[ 1]; dout[19] = din[ 4] ^ din[ 0]; dout[18] = din[ 3] ^ din[ 8] ^ din[ 4]; dout[17] = din[ 2] ^ din[ 7] ^ din[ 3]; dout[16] = din[ 1] ^ din[ 6] ^ din[ 2]; dout[15] = din[ 0] ^ din[ 5] ^ din[ 1]; dout[14] = din[ 8] ^ din[ 0]; dout[13] = din[ 7] ^ din[ 8] ^ din[ 4]; dout[12] = din[ 6] ^ din[ 7] ^ din[ 3]; dout[11] = din[ 5] ^ din[ 6] ^ din[ 2]; dout[10] = din[ 4] ^ din[ 5] ^ din[ 1]; dout[ 9] = din[ 3] ^ din[ 4] ^ din[ 0]; dout[ 8] = din[ 2] ^ din[ 3] ^ din[ 8] ^ din[ 4]; dout[ 7] = din[ 1] ^ din[ 2] ^ din[ 7] ^ din[ 3]; dout[ 6] = din[ 0] ^ din[ 1] ^ din[ 6] ^ din[ 2]; dout[ 5] = din[ 8] ^ din[ 0] ^ din[ 4] ^ din[ 5] ^ din[ 1]; dout[ 4] = din[ 7] ^ din[ 8] ^ din[ 3] ^ din[ 0]; dout[ 3] = din[ 6] ^ din[ 7] ^ din[ 2] ^ din[ 8] ^ din[ 4]; dout[ 2] = din[ 5] ^ din[ 6] ^ din[ 1] ^ din[ 7] ^ din[ 3]; dout[ 1] = din[ 4] ^ din[ 5] ^ din[ 0] ^ din[ 6] ^ din[ 2]; dout[ 0] = din[ 3] ^ din[ 8] ^ din[ 5] ^ din[ 1]; end PRBS_P11: begin dout[23] = din[10] ^ din[ 8]; dout[22] = din[ 9] ^ din[ 7]; dout[21] = din[ 8] ^ din[ 6]; dout[20] = din[ 7] ^ din[ 5]; dout[19] = din[ 6] ^ din[ 4]; dout[18] = din[ 5] ^ din[ 3]; dout[17] = din[ 4] ^ din[ 2]; dout[16] = din[ 3] ^ din[ 1]; dout[15] = din[ 2] ^ din[ 0]; dout[14] = din[ 1] ^ din[10] ^ din[ 8]; dout[13] = din[ 0] ^ din[ 9] ^ din[ 7]; dout[12] = din[10] ^ din[ 6]; dout[11] = din[ 9] ^ din[ 5]; dout[10] = din[ 8] ^ din[ 4]; dout[ 9] = din[ 7] ^ din[ 3]; dout[ 8] = din[ 6] ^ din[ 2]; dout[ 7] = din[ 5] ^ din[ 1]; dout[ 6] = din[ 4] ^ din[ 0]; dout[ 5] = din[ 3] ^ din[10] ^ din[ 8]; dout[ 4] = din[ 2] ^ din[ 9] ^ din[ 7]; dout[ 3] = din[ 1] ^ din[ 8] ^ din[ 6]; dout[ 2] = din[ 0] ^ din[ 7] ^ din[ 5]; dout[ 1] = din[10] ^ din[ 6] ^ din[ 8] ^ din[ 4]; dout[ 0] = din[ 9] ^ din[ 5] ^ din[ 7] ^ din[ 3]; end PRBS_P15: begin dout[23] = din[14] ^ din[13]; dout[22] = din[13] ^ din[12]; dout[21] = din[12] ^ din[11]; dout[20] = din[11] ^ din[10]; dout[19] = din[10] ^ din[ 9]; dout[18] = din[ 9] ^ din[ 8]; dout[17] = din[ 8] ^ din[ 7]; dout[16] = din[ 7] ^ din[ 6]; dout[15] = din[ 6] ^ din[ 5]; dout[14] = din[ 5] ^ din[ 4]; dout[13] = din[ 4] ^ din[ 3]; dout[12] = din[ 3] ^ din[ 2]; dout[11] = din[ 2] ^ din[ 1]; dout[10] = din[ 1] ^ din[ 0]; dout[ 9] = din[ 0] ^ din[14] ^ din[13]; dout[ 8] = din[14] ^ din[12]; dout[ 7] = din[13] ^ din[11]; dout[ 6] = din[12] ^ din[10]; dout[ 5] = din[11] ^ din[ 9]; dout[ 4] = din[10] ^ din[ 8]; dout[ 3] = din[ 9] ^ din[ 7]; dout[ 2] = din[ 8] ^ din[ 6]; dout[ 1] = din[ 7] ^ din[ 5]; dout[ 0] = din[ 6] ^ din[ 4]; end PRBS_P20: begin dout[23] = din[19] ^ din[ 2]; dout[22] = din[18] ^ din[ 1]; dout[21] = din[17] ^ din[ 0]; dout[20] = din[16] ^ din[19] ^ din[ 2]; dout[19] = din[15] ^ din[18] ^ din[ 1]; dout[18] = din[14] ^ din[17] ^ din[ 0]; dout[17] = din[13] ^ din[16] ^ din[19] ^ din[ 2]; dout[16] = din[12] ^ din[15] ^ din[18] ^ din[ 1]; dout[15] = din[11] ^ din[14] ^ din[17] ^ din[ 0]; dout[14] = din[10] ^ din[13] ^ din[16] ^ din[19] ^ din[ 2]; dout[13] = din[ 9] ^ din[12] ^ din[15] ^ din[18] ^ din[ 1]; dout[12] = din[ 8] ^ din[11] ^ din[14] ^ din[17] ^ din[ 0]; dout[11] = din[ 7] ^ din[10] ^ din[13] ^ din[16] ^ din[19] ^ din[ 2]; dout[10] = din[ 6] ^ din[ 9] ^ din[12] ^ din[15] ^ din[18] ^ din[ 1]; dout[ 9] = din[ 5] ^ din[ 8] ^ din[11] ^ din[14] ^ din[17] ^ din[ 0]; dout[ 8] = din[ 4] ^ din[ 7] ^ din[10] ^ din[13] ^ din[16] ^ din[19] ^ din[ 2]; dout[ 7] = din[ 3] ^ din[ 6] ^ din[ 9] ^ din[12] ^ din[15] ^ din[18] ^ din[ 1]; dout[ 6] = din[ 2] ^ din[ 5] ^ din[ 8] ^ din[11] ^ din[14] ^ din[17] ^ din[ 0]; dout[ 5] = din[ 1] ^ din[ 4] ^ din[ 7] ^ din[10] ^ din[13] ^ din[16] ^ din[19] ^ din[ 2]; dout[ 4] = din[ 0] ^ din[ 3] ^ din[ 6] ^ din[ 9] ^ din[12] ^ din[15] ^ din[18] ^ din[ 1]; dout[ 3] = din[19] ^ din[ 5] ^ din[ 8] ^ din[11] ^ din[14] ^ din[17] ^ din[ 0]; dout[ 2] = din[18] ^ din[ 4] ^ din[ 7] ^ din[10] ^ din[13] ^ din[16] ^ din[19] ^ din[ 2]; dout[ 1] = din[17] ^ din[ 3] ^ din[ 6] ^ din[ 9] ^ din[12] ^ din[15] ^ din[18] ^ din[ 1]; dout[ 0] = din[16] ^ din[ 2] ^ din[ 5] ^ din[ 8] ^ din[11] ^ din[14] ^ din[17] ^ din[ 0]; end endcase pn1fn = dout; end endfunction // global toggle always @(posedge dac_clk) begin if (dac_data_sync == 1'b1) begin dac_valid_sel <= 1'b0; end else if (dac_valid == 1'b1) begin dac_valid_sel <= ~dac_valid_sel; end end // dac iq correction always @(posedge dac_clk) begin dac_enable <= (dac_data_sel_s == 4'h2) ? 1'b1 : 1'b0; if (dac_iqcor_valid_s == 1'b1) begin dac_data <= dac_iqcor_data_s[15:4]; end end generate if (DATAPATH_DISABLE == 1) begin assign dac_iqcor_valid_s = dac_valid; assign dac_iqcor_data_s = {dac_data_out, 4'd0}; end else begin ad_iqcor #(.Q_OR_I_N (Q_OR_I_N)) i_ad_iqcor ( .clk (dac_clk), .valid (dac_valid), .data_in ({dac_data_out, 4'd0}), .data_iq ({dac_data_in, 4'd0}), .valid_out (dac_iqcor_valid_s), .data_out (dac_iqcor_data_s), .iqcor_enable (dac_iqcor_enb_s), .iqcor_coeff_1 (dac_iqcor_coeff_1_s), .iqcor_coeff_2 (dac_iqcor_coeff_2_s)); end endgenerate // dac mux always @(posedge dac_clk) begin case (dac_data_sel_s) 4'h9: dac_data_out <= dac_pn_data; 4'h8: dac_data_out <= adc_data; 4'h3: dac_data_out <= 12'd0; 4'h2: dac_data_out <= dma_data[15:4]; 4'h1: dac_data_out <= dac_pat_data[15:4]; default: dac_data_out <= dac_dds_data[15:4]; endcase end // prbs sequences always @(posedge dac_clk) begin if (dac_data_sync == 1'b1) begin dac_pn_seq <= 24'hffffff; dac_pn_data <= 12'd0; end else if (dac_valid == 1'b1) begin if (dac_valid_sel == 1'b1) begin dac_pn_seq <= pn1fn(dac_pn_seq); dac_pn_data <= dac_pn_seq[11: 0]; end else begin dac_pn_seq <= dac_pn_seq; dac_pn_data <= dac_pn_seq[23:12]; end end end // pattern always @(posedge dac_clk) begin if (dac_valid == 1'b1) begin if (dac_valid_sel == 1'b0) begin dac_pat_data <= dac_pat_data_1_s; end else begin dac_pat_data <= dac_pat_data_2_s; end end end // dds always @(posedge dac_clk) begin if (dac_data_sync == 1'b1) begin dac_dds_phase_0 <= dac_dds_init_1_s; dac_dds_phase_1 <= dac_dds_init_2_s; dac_dds_incr_0 <= dac_dds_incr_1_s; dac_dds_incr_1 <= dac_dds_incr_2_s; dac_dds_data <= 16'd0; end else if (dac_valid == 1'b1) begin dac_dds_phase_0 <= dac_dds_phase_0 + dac_dds_incr_0; dac_dds_phase_1 <= dac_dds_phase_1 + dac_dds_incr_1; dac_dds_incr_0 <= dac_dds_incr_0; dac_dds_incr_1 <= dac_dds_incr_1; dac_dds_data <= dac_dds_data_s; end end // dds ad_dds #( .DISABLE (DDS_DISABLE)) i_dds ( .clk (dac_clk), .dds_format (dac_dds_format), .dds_phase_0 (dac_dds_phase_0), .dds_scale_0 (dac_dds_scale_1_s), .dds_phase_1 (dac_dds_phase_1), .dds_scale_1 (dac_dds_scale_2_s), .dds_data (dac_dds_data_s)); // single channel processor up_dac_channel #(.DAC_CHANNEL_ID(CHANNEL_ID)) i_up_dac_channel ( .dac_clk (dac_clk), .dac_rst (dac_rst), .dac_dds_scale_1 (dac_dds_scale_1_s), .dac_dds_init_1 (dac_dds_init_1_s), .dac_dds_incr_1 (dac_dds_incr_1_s), .dac_dds_scale_2 (dac_dds_scale_2_s), .dac_dds_init_2 (dac_dds_init_2_s), .dac_dds_incr_2 (dac_dds_incr_2_s), .dac_pat_data_1 (dac_pat_data_1_s), .dac_pat_data_2 (dac_pat_data_2_s), .dac_data_sel (dac_data_sel_s), .dac_iqcor_enb (dac_iqcor_enb_s), .dac_iqcor_coeff_1 (dac_iqcor_coeff_1_s), .dac_iqcor_coeff_2 (dac_iqcor_coeff_2_s), .up_usr_datatype_be (), .up_usr_datatype_signed (), .up_usr_datatype_shift (), .up_usr_datatype_total_bits (), .up_usr_datatype_bits (), .up_usr_interpolation_m (), .up_usr_interpolation_n (), .dac_usr_datatype_be (1'b0), .dac_usr_datatype_signed (1'b1), .dac_usr_datatype_shift (8'd0), .dac_usr_datatype_total_bits (8'd16), .dac_usr_datatype_bits (8'd16), .dac_usr_interpolation_m (16'd1), .dac_usr_interpolation_n (16'd1), .up_rstn (up_rstn), .up_clk (up_clk), .up_wreq (up_wreq), .up_waddr (up_waddr), .up_wdata (up_wdata), .up_wack (up_wack), .up_rreq (up_rreq), .up_raddr (up_raddr), .up_rdata (up_rdata), .up_rack (up_rack)); endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_dmac/000077500000000000000000000000001457144405000245435ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_dmac/2d_transfer.v000066400000000000000000000120011457144405000271350ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2013(c) Analog Devices, Inc. // Author: Lars-Peter Clausen // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** module dmac_2d_transfer ( input req_aclk, input req_aresetn, input req_valid, output reg req_ready, input [31:BYTES_PER_BEAT_WIDTH_DEST] req_dest_address, input [31:BYTES_PER_BEAT_WIDTH_SRC] req_src_address, input [DMA_LENGTH_WIDTH-1:0] req_x_length, input [DMA_LENGTH_WIDTH-1:0] req_y_length, input [DMA_LENGTH_WIDTH-1:0] req_dest_stride, input [DMA_LENGTH_WIDTH-1:0] req_src_stride, input req_sync_transfer_start, output reg req_eot, output reg out_req_valid, input out_req_ready, output [31:BYTES_PER_BEAT_WIDTH_DEST] out_req_dest_address, output [31:BYTES_PER_BEAT_WIDTH_SRC] out_req_src_address, output [DMA_LENGTH_WIDTH-1:0] out_req_length, output reg out_req_sync_transfer_start, input out_eot ); parameter DMA_LENGTH_WIDTH = 24; parameter BYTES_PER_BEAT_WIDTH_SRC = 3; parameter BYTES_PER_BEAT_WIDTH_DEST = 3; reg [31:BYTES_PER_BEAT_WIDTH_DEST] dest_address; reg [31:BYTES_PER_BEAT_WIDTH_SRC] src_address; reg [DMA_LENGTH_WIDTH-1:0] x_length; reg [DMA_LENGTH_WIDTH-1:0] y_length; reg [DMA_LENGTH_WIDTH-1:0] dest_stride; reg [DMA_LENGTH_WIDTH-1:0] src_stride; reg [1:0] req_id; reg [1:0] eot_id; reg [3:0] last_req; assign out_req_dest_address = dest_address; assign out_req_src_address = src_address; assign out_req_length = x_length; always @(posedge req_aclk) begin if (req_aresetn == 1'b0) begin req_id <= 2'b0; eot_id <= 2'b0; req_eot <= 1'b0; end else begin if (out_req_valid && out_req_ready) begin req_id <= req_id + 1'b1; last_req[req_id] <= y_length == 0; end req_eot <= 1'b0; if (out_eot) begin eot_id <= eot_id + 1'b1; req_eot <= last_req[eot_id]; end end end always @(posedge req_aclk) begin if (req_aresetn == 1'b0) begin dest_address <= 'h00; src_address <= 'h00; x_length <= 'h00; y_length <= 'h00; dest_stride <= 'h00; src_stride <= 'h00; req_ready <= 1'b1; out_req_valid <= 1'b0; out_req_sync_transfer_start <= 1'b0; end else begin if (req_ready) begin if (req_valid) begin dest_address <= req_dest_address; src_address <= req_src_address; x_length <= req_x_length; y_length <= req_y_length; dest_stride <= req_dest_stride; src_stride <= req_src_stride; out_req_sync_transfer_start <= req_sync_transfer_start; req_ready <= 1'b0; out_req_valid <= 1'b1; end end else begin if (out_req_valid && out_req_ready) begin dest_address <= dest_address + dest_stride[DMA_LENGTH_WIDTH-1:BYTES_PER_BEAT_WIDTH_DEST]; src_address <= src_address + src_stride[DMA_LENGTH_WIDTH-1:BYTES_PER_BEAT_WIDTH_SRC]; y_length <= y_length - 1'b1; out_req_sync_transfer_start <= 1'b0; if (y_length == 0) begin out_req_valid <= 1'b0; req_ready <= 1'b1; end end end end end endmodule bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_dmac/Makefile000066400000000000000000000033401457144405000262030ustar00rootroot00000000000000#################################################################################### #################################################################################### ## Copyright 2011(c) Analog Devices, Inc. ## Auto-generated, do not modify! #################################################################################### #################################################################################### M_DEPS := axi_dmac_ip.tcl M_DEPS += ../scripts/adi_env.tcl M_DEPS += ../scripts/adi_ip.tcl M_DEPS += ../common/sync_bits.v M_DEPS += ../common/up_axi.v M_DEPS += address_generator.v M_DEPS += data_mover.v M_DEPS += request_arb.v M_DEPS += request_generator.v M_DEPS += response_handler.v M_DEPS += axi_register_slice.v M_DEPS += 2d_transfer.v M_DEPS += dest_axi_mm.v M_DEPS += dest_axi_stream.v M_DEPS += dest_fifo_inf.v M_DEPS += src_axi_mm.v M_DEPS += src_axi_stream.v M_DEPS += src_fifo_inf.v M_DEPS += splitter.v M_DEPS += response_generator.v M_DEPS += axi_dmac.v M_DEPS += axi_dmac_constr.ttcl M_DEPS += bd/bd.tcl M_DEPS += ../util_axis_resize/util_axis_resize.xpr M_DEPS += ../util_axis_fifo/util_axis_fifo.xpr M_VIVADO := vivado -mode batch -source M_FLIST := *.cache M_FLIST += *.data M_FLIST += *.xpr M_FLIST += *.log M_FLIST += component.xml M_FLIST += *.jou M_FLIST += xgui M_FLIST += .Xil .PHONY: all dep clean clean-all all: dep axi_dmac.xpr clean:clean-all clean-all: rm -rf $(M_FLIST) axi_dmac.xpr: $(M_DEPS) rm -rf $(M_FLIST) $(M_VIVADO) axi_dmac_ip.tcl >> axi_dmac_ip.log 2>&1 dep: make -C ../util_axis_resize make -C ../util_axis_fifo #################################################################################### #################################################################################### bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_dmac/address_generator.v000066400000000000000000000122511457144405000304260ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2013(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** module dmac_address_generator ( input clk, input resetn, input req_valid, output reg req_ready, input [31:BYTES_PER_BEAT_WIDTH] req_address, input [BEATS_PER_BURST_WIDTH-1:0] req_last_burst_length, output reg [ID_WIDTH-1:0] id, input [ID_WIDTH-1:0] request_id, input sync_id, input eot, input enable, input pause, output reg enabled, input addr_ready, output reg addr_valid, output [31:0] addr, output [ 7:0] len, output [ 2:0] size, output [ 1:0] burst, output [ 2:0] prot, output [ 3:0] cache ); parameter ID_WIDTH = 3; parameter DMA_DATA_WIDTH = 64; parameter BEATS_PER_BURST_WIDTH = 4; parameter BYTES_PER_BEAT_WIDTH = $clog2(DMA_DATA_WIDTH/8); localparam MAX_BEATS_PER_BURST = 2**(BEATS_PER_BURST_WIDTH); `include "inc_id.h" assign burst = 2'b01; assign prot = 3'b000; assign cache = 4'b0011; assign len = length; assign size = $clog2(DMA_DATA_WIDTH/8); reg [7:0] length = 'h0; reg [31-BYTES_PER_BEAT_WIDTH:0] address = 'h00; reg [BEATS_PER_BURST_WIDTH-1:0] last_burst_len = 'h00; assign addr = {address, {BYTES_PER_BEAT_WIDTH{1'b0}}}; reg addr_valid_d1; reg last = 1'b0; // If we already asserted addr_valid we have to wait until it is accepted before // we can disable the address generator. always @(posedge clk) begin if (resetn == 1'b0) begin enabled <= 1'b0; end else begin if (enable) enabled <= 1'b1; else if (~addr_valid) enabled <= 1'b0; end end always @(posedge clk) begin if (addr_valid == 1'b0) begin if (eot == 1'b1) length <= last_burst_len; else length <= MAX_BEATS_PER_BURST - 1; end end always @(posedge clk) begin if (resetn == 1'b0) begin last <= 1'b0; end else if (addr_valid == 1'b0) begin last <= eot; end end always @(posedge clk) begin if (resetn == 1'b0) begin address <= 'h00; last_burst_len <= 'h00; req_ready <= 1'b1; addr_valid <= 1'b0; end else begin if (~enabled) begin req_ready <= 1'b1; end else if (req_ready) begin if (req_valid && enable) begin address <= req_address; req_ready <= 1'b0; last_burst_len <= req_last_burst_length; end end else begin if (addr_valid && addr_ready) begin address <= address + MAX_BEATS_PER_BURST; addr_valid <= 1'b0; if (last) req_ready <= 1'b1; end else if (id != request_id && enable) begin addr_valid <= 1'b1; end end end end always @(posedge clk) begin if (resetn == 1'b0) begin id <='h0; addr_valid_d1 <= 1'b0; end else begin addr_valid_d1 <= addr_valid; if ((addr_valid && ~addr_valid_d1) || (sync_id && id != request_id)) id <= inc_id(id); end end endmodule bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_dmac/axi_dmac.qip000066400000000000000000000050351457144405000270260ustar00rootroot00000000000000# This file gets copied by Qsys several layers into the work directory. # Any relative paths defined here must be relative to that directory. set ad_hdl_dir [file normalize [file join $::quartus(qip_path) ../../../../../../fpga/ip/analogdevicesinc/hdl/]] set_global_assignment -name VERILOG_FILE $ad_hdl_dir/library/common/sync_bits.v set_global_assignment -name VERILOG_FILE $ad_hdl_dir/library/common/sync_gray.v set_global_assignment -name VERILOG_FILE $ad_hdl_dir/library/common/up_axi.v set_global_assignment -name VERILOG_FILE $ad_hdl_dir/library/util_axis_resize/util_axis_resize.v set_global_assignment -name VERILOG_FILE $ad_hdl_dir/library/util_axis_fifo/util_axis_fifo.v set_global_assignment -name VERILOG_FILE $ad_hdl_dir/library/util_axis_fifo/address_gray.v set_global_assignment -name VERILOG_FILE $ad_hdl_dir/library/util_axis_fifo/address_gray_pipelined.v set_global_assignment -name VERILOG_FILE $ad_hdl_dir/library/util_axis_fifo/address_sync.v set_global_assignment -name MISC_FILE $ad_hdl_dir/library/axi_dmac/inc_id.h set_global_assignment -name MISC_FILE $ad_hdl_dir/library/axi_dmac/resp.h set_global_assignment -name VERILOG_FILE $ad_hdl_dir/library/axi_dmac/address_generator.v set_global_assignment -name VERILOG_FILE $ad_hdl_dir/library/axi_dmac/data_mover.v set_global_assignment -name VERILOG_FILE $ad_hdl_dir/library/axi_dmac/request_arb.v set_global_assignment -name VERILOG_FILE $ad_hdl_dir/library/axi_dmac/request_generator.v set_global_assignment -name VERILOG_FILE $ad_hdl_dir/library/axi_dmac/response_handler.v set_global_assignment -name VERILOG_FILE $ad_hdl_dir/library/axi_dmac/axi_register_slice.v set_global_assignment -name VERILOG_FILE $ad_hdl_dir/library/axi_dmac/2d_transfer.v set_global_assignment -name VERILOG_FILE $ad_hdl_dir/library/axi_dmac/dest_axi_mm.v set_global_assignment -name VERILOG_FILE $ad_hdl_dir/library/axi_dmac/dest_axi_stream.v set_global_assignment -name VERILOG_FILE $ad_hdl_dir/library/axi_dmac/dest_fifo_inf.v set_global_assignment -name VERILOG_FILE $ad_hdl_dir/library/axi_dmac/src_axi_mm.v set_global_assignment -name VERILOG_FILE $ad_hdl_dir/library/axi_dmac/src_axi_stream.v set_global_assignment -name VERILOG_FILE $ad_hdl_dir/library/axi_dmac/src_fifo_inf.v set_global_assignment -name VERILOG_FILE $ad_hdl_dir/library/axi_dmac/splitter.v set_global_assignment -name VERILOG_FILE $ad_hdl_dir/library/axi_dmac/response_generator.v set_global_assignment -name VERILOG_FILE $ad_hdl_dir/library/axi_dmac/axi_dmac.v set_global_assignment -name SDC_FILE $ad_hdl_dir/library/axi_dmac/axi_dmac_constr.sdc bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_dmac/axi_dmac.v000066400000000000000000000537631457144405000265150ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2013(c) Analog Devices, Inc. // Author: Lars-Peter Clausen // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** module axi_dmac ( // Slave AXI interface input s_axi_aclk, input s_axi_aresetn, input s_axi_awvalid, input [13:0] s_axi_awaddr, output s_axi_awready, input [2:0] s_axi_awprot, input s_axi_wvalid, input [31:0] s_axi_wdata, input [ 3:0] s_axi_wstrb, output s_axi_wready, output s_axi_bvalid, output [ 1:0] s_axi_bresp, input s_axi_bready, input s_axi_arvalid, input [13:0] s_axi_araddr, output s_axi_arready, input [2:0] s_axi_arprot, output s_axi_rvalid, input s_axi_rready, output [ 1:0] s_axi_rresp, output [31:0] s_axi_rdata, // Interrupt output reg irq, // Master AXI interface input m_dest_axi_aclk, input m_dest_axi_aresetn, // Write address output [31:0] m_dest_axi_awaddr, output [7-(4*DMA_AXI_PROTOCOL_DEST):0] m_dest_axi_awlen, output [ 2:0] m_dest_axi_awsize, output [ 1:0] m_dest_axi_awburst, output [ 2:0] m_dest_axi_awprot, output [ 3:0] m_dest_axi_awcache, output m_dest_axi_awvalid, input m_dest_axi_awready, // Write data output [DMA_DATA_WIDTH_DEST-1:0] m_dest_axi_wdata, output [(DMA_DATA_WIDTH_DEST/8)-1:0] m_dest_axi_wstrb, input m_dest_axi_wready, output m_dest_axi_wvalid, output m_dest_axi_wlast, // Write response input m_dest_axi_bvalid, input [ 1:0] m_dest_axi_bresp, output m_dest_axi_bready, // Unused read interface output m_dest_axi_arvalid, output [31:0] m_dest_axi_araddr, output [7-(4*DMA_AXI_PROTOCOL_DEST):0] m_dest_axi_arlen, output [ 2:0] m_dest_axi_arsize, output [ 1:0] m_dest_axi_arburst, output [ 3:0] m_dest_axi_arcache, output [ 2:0] m_dest_axi_arprot, input m_dest_axi_arready, input m_dest_axi_rvalid, input [ 1:0] m_dest_axi_rresp, input [DMA_DATA_WIDTH_DEST-1:0] m_dest_axi_rdata, output m_dest_axi_rready, // Master AXI interface input m_src_axi_aclk, input m_src_axi_aresetn, // Read address input m_src_axi_arready, output m_src_axi_arvalid, output [31:0] m_src_axi_araddr, output [7-(4*DMA_AXI_PROTOCOL_SRC):0] m_src_axi_arlen, output [ 2:0] m_src_axi_arsize, output [ 1:0] m_src_axi_arburst, output [ 2:0] m_src_axi_arprot, output [ 3:0] m_src_axi_arcache, // Read data and response input [DMA_DATA_WIDTH_SRC-1:0] m_src_axi_rdata, output m_src_axi_rready, input m_src_axi_rvalid, input [ 1:0] m_src_axi_rresp, // Unused write interface output m_src_axi_awvalid, output [31:0] m_src_axi_awaddr, output [7-(4*DMA_AXI_PROTOCOL_SRC):0] m_src_axi_awlen, output [ 2:0] m_src_axi_awsize, output [ 1:0] m_src_axi_awburst, output [ 3:0] m_src_axi_awcache, output [ 2:0] m_src_axi_awprot, input m_src_axi_awready, output m_src_axi_wvalid, output [DMA_DATA_WIDTH_SRC-1:0] m_src_axi_wdata, output [(DMA_DATA_WIDTH_SRC/8)-1:0] m_src_axi_wstrb, output m_src_axi_wlast, input m_src_axi_wready, input m_src_axi_bvalid, input [ 1:0] m_src_axi_bresp, output m_src_axi_bready, // Slave streaming AXI interface input s_axis_aclk, output s_axis_ready, input s_axis_valid, input [DMA_DATA_WIDTH_SRC-1:0] s_axis_data, input [0:0] s_axis_user, output s_axis_xfer_req, // Master streaming AXI interface input m_axis_aclk, input m_axis_ready, output m_axis_valid, output [DMA_DATA_WIDTH_DEST-1:0] m_axis_data, output m_axis_last, output m_axis_xfer_req, // Input FIFO interface input fifo_wr_clk, input fifo_wr_en, input [DMA_DATA_WIDTH_SRC-1:0] fifo_wr_din, output fifo_wr_overflow, input fifo_wr_sync, output fifo_wr_xfer_req, // Input FIFO interface input fifo_rd_clk, input fifo_rd_en, output fifo_rd_valid, output [DMA_DATA_WIDTH_DEST-1:0] fifo_rd_dout, output fifo_rd_underflow, output fifo_rd_xfer_req ); parameter ID = 0; parameter DMA_DATA_WIDTH_SRC = 64; parameter DMA_DATA_WIDTH_DEST = 64; parameter DMA_LENGTH_WIDTH = 24; parameter DMA_2D_TRANSFER = 1; parameter ASYNC_CLK_REQ_SRC = 1; parameter ASYNC_CLK_SRC_DEST = 1; parameter ASYNC_CLK_DEST_REQ = 1; parameter AXI_SLICE_DEST = 0; parameter AXI_SLICE_SRC = 0; parameter SYNC_TRANSFER_START = 0; parameter CYCLIC = 1; parameter DMA_AXI_PROTOCOL_DEST = 0; parameter DMA_AXI_PROTOCOL_SRC = 0; parameter DMA_TYPE_DEST = 0; parameter DMA_TYPE_SRC = 2; parameter MAX_BYTES_PER_BURST = 128; parameter FIFO_SIZE = 4; // In bursts localparam DMA_TYPE_AXI_MM = 0; localparam DMA_TYPE_AXI_STREAM = 1; localparam DMA_TYPE_FIFO = 2; localparam PCORE_VERSION = 'h00040062; localparam HAS_DEST_ADDR = DMA_TYPE_DEST == DMA_TYPE_AXI_MM; localparam HAS_SRC_ADDR = DMA_TYPE_SRC == DMA_TYPE_AXI_MM; // Argh... "[Synth 8-2722] system function call clog2 is not allowed here" localparam BYTES_PER_BEAT_WIDTH_DEST = DMA_DATA_WIDTH_DEST > 1024 ? 8 : DMA_DATA_WIDTH_DEST > 512 ? 7 : DMA_DATA_WIDTH_DEST > 256 ? 6 : DMA_DATA_WIDTH_DEST > 128 ? 5 : DMA_DATA_WIDTH_DEST > 64 ? 4 : DMA_DATA_WIDTH_DEST > 32 ? 3 : DMA_DATA_WIDTH_DEST > 16 ? 2 : DMA_DATA_WIDTH_DEST > 8 ? 1 : 0; localparam BYTES_PER_BEAT_WIDTH_SRC = DMA_DATA_WIDTH_SRC > 1024 ? 8 : DMA_DATA_WIDTH_SRC > 512 ? 7 : DMA_DATA_WIDTH_SRC > 256 ? 6 : DMA_DATA_WIDTH_SRC > 128 ? 5 : DMA_DATA_WIDTH_SRC > 64 ? 4 : DMA_DATA_WIDTH_SRC > 32 ? 3 : DMA_DATA_WIDTH_SRC > 16 ? 2 : DMA_DATA_WIDTH_SRC > 8 ? 1 : 0; // Register interface signals reg [31:0] up_rdata = 'd0; reg up_wack = 1'b0; reg up_rack = 1'b0; wire up_wreq; wire up_rreq; wire [31:0] up_wdata; wire [11:0] up_waddr; wire [11:0] up_raddr; // Scratch register reg [31:0] up_scratch = 'h00; // Control bits reg up_enable = 'h00; reg up_pause = 'h00; // Start and end of transfer wire up_eot; // Asserted for one cycle when a transfer has been completed wire up_sot; // Asserted for one cycle when a transfer has been queued // Interupt handling reg [1:0] up_irq_mask = 'h3; reg [1:0] up_irq_source = 'h0; wire [1:0] up_irq_pending; wire [1:0] up_irq_trigger; wire [1:0] up_irq_source_clear; // DMA transfer signals reg up_dma_req_valid = 1'b0; wire up_dma_req_ready; reg [1:0] up_transfer_id = 2'b0; reg [1:0] up_transfer_id_eot = 2'b0; reg [3:0] up_transfer_done_bitmap = 4'b0; reg up_axis_xlast = 1'b1; reg [31:BYTES_PER_BEAT_WIDTH_DEST] up_dma_dest_address = 'h00; reg [31:BYTES_PER_BEAT_WIDTH_SRC] up_dma_src_address = 'h00; reg [DMA_LENGTH_WIDTH-1:0] up_dma_x_length = 'h00; reg [DMA_LENGTH_WIDTH-1:0] up_dma_y_length = 'h00; reg [DMA_LENGTH_WIDTH-1:0] up_dma_src_stride = 'h00; reg [DMA_LENGTH_WIDTH-1:0] up_dma_dest_stride = 'h00; reg up_dma_cyclic = CYCLIC; wire up_dma_sync_transfer_start = SYNC_TRANSFER_START ? 1'b1 : 1'b0; // ID signals from the DMAC, just for debugging wire [2:0] dest_request_id; wire [2:0] dest_data_id; wire [2:0] dest_address_id; wire [2:0] dest_response_id; wire [2:0] src_request_id; wire [2:0] src_data_id; wire [2:0] src_address_id; wire [2:0] src_response_id; wire [7:0] dbg_status; assign m_dest_axi_araddr = 'd0; assign m_dest_axi_arlen = 'd0; assign m_dest_axi_arsize = 'd0; assign m_dest_axi_arburst = 'd0; assign m_dest_axi_arcache = 'd0; assign m_dest_axi_arprot = 'd0; assign m_src_axi_awaddr = 'd0; assign m_src_axi_awlen = 'd0; assign m_src_axi_awsize = 'd0; assign m_src_axi_awburst = 'd0; assign m_src_axi_awcache = 'd0; assign m_src_axi_awprot = 'd0; assign m_src_axi_wdata = 'd0; assign m_src_axi_wstrb = 'd0; assign m_src_axi_wlast = 'd0; up_axi #( .ADDRESS_WIDTH (12) ) i_up_axi ( .up_rstn(s_axi_aresetn), .up_clk(s_axi_aclk), .up_axi_awvalid(s_axi_awvalid), .up_axi_awaddr(s_axi_awaddr), .up_axi_awready(s_axi_awready), .up_axi_wvalid(s_axi_wvalid), .up_axi_wdata(s_axi_wdata), .up_axi_wstrb(s_axi_wstrb), .up_axi_wready(s_axi_wready), .up_axi_bvalid(s_axi_bvalid), .up_axi_bresp(s_axi_bresp), .up_axi_bready(s_axi_bready), .up_axi_arvalid(s_axi_arvalid), .up_axi_araddr(s_axi_araddr), .up_axi_arready(s_axi_arready), .up_axi_rvalid(s_axi_rvalid), .up_axi_rresp(s_axi_rresp), .up_axi_rdata(s_axi_rdata), .up_axi_rready(s_axi_rready), .up_wreq(up_wreq), .up_waddr(up_waddr), .up_wdata(up_wdata), .up_wack(up_wack), .up_rreq(up_rreq), .up_raddr(up_raddr), .up_rdata(up_rdata), .up_rack(up_rack) ); // IRQ handling assign up_irq_pending = ~up_irq_mask & up_irq_source; assign up_irq_trigger = {up_eot, up_sot}; assign up_irq_source_clear = (up_wreq == 1'b1 && up_waddr == 12'h021) ? up_wdata[1:0] : 0; always @(posedge s_axi_aclk) begin if (s_axi_aresetn == 1'b0) irq <= 1'b0; else irq <= |up_irq_pending; end always @(posedge s_axi_aclk) begin if (s_axi_aresetn == 1'b0) begin up_irq_source <= 2'b00; end else begin up_irq_source <= up_irq_trigger | (up_irq_source & ~up_irq_source_clear); end end // Register Interface always @(posedge s_axi_aclk) begin if (s_axi_aresetn == 1'b0) begin up_enable <= 'h00; up_pause <= 'h00; up_dma_src_address <= 'h00; up_dma_dest_address <= 'h00; up_dma_y_length <= 'h00; up_dma_x_length <= 'h00; up_dma_dest_stride <= 'h00; up_dma_src_stride <= 'h00; up_irq_mask <= 3'b11; up_dma_req_valid <= 1'b0; up_scratch <= 'h00; up_wack <= 1'b0; end else begin up_wack <= up_wreq; if (up_enable == 1'b1) begin if (up_wreq && up_waddr == 12'h102) begin up_dma_req_valid <= up_dma_req_valid | up_wdata[0]; end else if (up_sot) begin up_dma_req_valid <= 1'b0; end end else begin up_dma_req_valid <= 1'b0; end if (up_wreq) begin case (up_waddr) 12'h002: up_scratch <= up_wdata; 12'h020: up_irq_mask <= up_wdata; 12'h100: {up_pause, up_enable} <= up_wdata[1:0]; 12'h103: begin if (CYCLIC) up_dma_cyclic <= up_wdata[0]; up_axis_xlast <= up_wdata[1]; end 12'h104: up_dma_dest_address <= up_wdata[31:BYTES_PER_BEAT_WIDTH_DEST]; 12'h105: up_dma_src_address <= up_wdata[31:BYTES_PER_BEAT_WIDTH_SRC]; 12'h106: up_dma_x_length <= up_wdata[DMA_LENGTH_WIDTH-1:0]; 12'h107: up_dma_y_length <= up_wdata[DMA_LENGTH_WIDTH-1:0]; 12'h108: up_dma_dest_stride <= up_wdata[DMA_LENGTH_WIDTH-1:0]; 12'h109: up_dma_src_stride <= up_wdata[DMA_LENGTH_WIDTH-1:0]; endcase end end end always @(posedge s_axi_aclk) begin if (s_axi_aresetn == 1'b0) begin up_rack <= 'd0; up_rdata <= 'h00; end else begin up_rack <= up_rreq; case (up_raddr) 12'h000: up_rdata <= PCORE_VERSION; 12'h001: up_rdata <= ID; 12'h002: up_rdata <= up_scratch; 12'h020: up_rdata <= up_irq_mask; 12'h021: up_rdata <= up_irq_pending; 12'h022: up_rdata <= up_irq_source; 12'h100: up_rdata <= {up_pause, up_enable}; 12'h101: up_rdata <= up_transfer_id; 12'h102: up_rdata <= up_dma_req_valid; 12'h103: up_rdata <= {30'h00, up_axis_xlast, up_dma_cyclic}; // Flags 12'h104: up_rdata <= HAS_DEST_ADDR ? {up_dma_dest_address,{BYTES_PER_BEAT_WIDTH_DEST{1'b0}}} : 'h00; 12'h105: up_rdata <= HAS_SRC_ADDR ? {up_dma_src_address,{BYTES_PER_BEAT_WIDTH_SRC{1'b0}}} : 'h00; 12'h106: up_rdata <= up_dma_x_length; 12'h107: up_rdata <= DMA_2D_TRANSFER ? up_dma_y_length : 'h00; 12'h108: up_rdata <= DMA_2D_TRANSFER ? up_dma_dest_stride : 'h00; 12'h109: up_rdata <= DMA_2D_TRANSFER ? up_dma_src_stride : 'h00; 12'h10a: up_rdata <= up_transfer_done_bitmap; 12'h10b: up_rdata <= up_transfer_id_eot; 12'h10c: up_rdata <= 'h00; // Status 12'h10d: up_rdata <= m_dest_axi_awaddr; //HAS_DEST_ADDR ? 'h00 : 'h00; // Current dest address 12'h10e: up_rdata <= m_src_axi_araddr; //HAS_SRC_ADDR ? 'h00 : 'h00; // Current src address 12'h10f: up_rdata <= {src_response_id, 1'b0, src_data_id, 1'b0, src_address_id, 1'b0, src_request_id, 1'b0, dest_response_id, 1'b0, dest_data_id, 1'b0, dest_address_id, 1'b0, dest_request_id}; 12'h110: up_rdata <= dbg_status; default: up_rdata <= 'h00; endcase end end // Request ID and Request done bitmap handling always @(posedge s_axi_aclk) begin if (s_axi_aresetn == 1'b0 || up_enable == 1'b0) begin up_transfer_id <= 'h0; up_transfer_id_eot <= 'h0; up_transfer_done_bitmap <= 'h0; end begin if (up_dma_req_valid == 1'b1 && up_dma_req_ready == 1'b1) begin up_transfer_id <= up_transfer_id + 1'b1; up_transfer_done_bitmap[up_transfer_id] <= 1'b0; end if (up_eot == 1'b1) begin up_transfer_done_bitmap[up_transfer_id_eot] <= 1'b1; up_transfer_id_eot <= up_transfer_id_eot + 1'b1; end end end wire dma_req_valid; wire dma_req_ready; wire [31:BYTES_PER_BEAT_WIDTH_DEST] dma_req_dest_address; wire [31:BYTES_PER_BEAT_WIDTH_SRC] dma_req_src_address; wire [DMA_LENGTH_WIDTH-1:0] dma_req_length; wire dma_req_eot; wire dma_req_sync_transfer_start; wire up_req_eot; assign up_sot = up_dma_cyclic ? 1'b0 : up_dma_req_valid & up_dma_req_ready; assign up_eot = up_dma_cyclic ? 1'b0 : up_req_eot; generate if (DMA_2D_TRANSFER == 1) begin dmac_2d_transfer #( .DMA_LENGTH_WIDTH(DMA_LENGTH_WIDTH), .BYTES_PER_BEAT_WIDTH_DEST(BYTES_PER_BEAT_WIDTH_DEST), .BYTES_PER_BEAT_WIDTH_SRC(BYTES_PER_BEAT_WIDTH_SRC) ) i_2d_transfer ( .req_aclk(s_axi_aclk), .req_aresetn(s_axi_aresetn), .req_eot(up_req_eot), .req_valid(up_dma_req_valid), .req_ready(up_dma_req_ready), .req_dest_address(up_dma_dest_address), .req_src_address(up_dma_src_address), .req_x_length(up_dma_x_length), .req_y_length(up_dma_y_length), .req_dest_stride(up_dma_dest_stride), .req_src_stride(up_dma_src_stride), .req_sync_transfer_start(up_dma_sync_transfer_start), .out_req_valid(dma_req_valid), .out_req_ready(dma_req_ready), .out_req_dest_address(dma_req_dest_address), .out_req_src_address(dma_req_src_address), .out_req_length(dma_req_length), .out_req_sync_transfer_start(dma_req_sync_transfer_start), .out_eot(dma_req_eot) ); end else begin assign dma_req_valid = up_dma_req_valid; assign up_dma_req_ready = dma_req_ready; assign dma_req_dest_address = up_dma_dest_address; assign dma_req_src_address = up_dma_src_address; assign dma_req_length = up_dma_x_length; assign dma_req_sync_transfer_start = up_dma_sync_transfer_start; assign up_req_eot = dma_req_eot; end endgenerate dmac_request_arb #( .DMA_DATA_WIDTH_SRC(DMA_DATA_WIDTH_SRC), .DMA_DATA_WIDTH_DEST(DMA_DATA_WIDTH_DEST), .DMA_LENGTH_WIDTH(DMA_LENGTH_WIDTH), .BYTES_PER_BEAT_WIDTH_DEST(BYTES_PER_BEAT_WIDTH_DEST), .BYTES_PER_BEAT_WIDTH_SRC(BYTES_PER_BEAT_WIDTH_SRC), .DMA_TYPE_DEST(DMA_TYPE_DEST), .DMA_TYPE_SRC(DMA_TYPE_SRC), .ASYNC_CLK_REQ_SRC(ASYNC_CLK_REQ_SRC), .ASYNC_CLK_SRC_DEST(ASYNC_CLK_SRC_DEST), .ASYNC_CLK_DEST_REQ(ASYNC_CLK_DEST_REQ), .AXI_SLICE_DEST(AXI_SLICE_DEST), .AXI_SLICE_SRC(AXI_SLICE_SRC), .MAX_BYTES_PER_BURST(MAX_BYTES_PER_BURST), .FIFO_SIZE(FIFO_SIZE) ) i_request_arb ( .req_aclk(s_axi_aclk), .req_aresetn(s_axi_aresetn), .enable(up_enable), .pause(up_pause), .req_valid(dma_req_valid), .req_ready(dma_req_ready), .req_dest_address(dma_req_dest_address), .req_src_address(dma_req_src_address), .req_length(dma_req_length), .req_xlast(up_axis_xlast), .req_sync_transfer_start(dma_req_sync_transfer_start), .eot(dma_req_eot), .m_dest_axi_aclk(m_dest_axi_aclk), .m_dest_axi_aresetn(m_dest_axi_aresetn), .m_src_axi_aclk(m_src_axi_aclk), .m_src_axi_aresetn(m_src_axi_aresetn), .m_axi_awaddr(m_dest_axi_awaddr), .m_axi_awlen(m_dest_axi_awlen), .m_axi_awsize(m_dest_axi_awsize), .m_axi_awburst(m_dest_axi_awburst), .m_axi_awprot(m_dest_axi_awprot), .m_axi_awcache(m_dest_axi_awcache), .m_axi_awvalid(m_dest_axi_awvalid), .m_axi_awready(m_dest_axi_awready), .m_axi_wdata(m_dest_axi_wdata), .m_axi_wstrb(m_dest_axi_wstrb), .m_axi_wready(m_dest_axi_wready), .m_axi_wvalid(m_dest_axi_wvalid), .m_axi_wlast(m_dest_axi_wlast), .m_axi_bvalid(m_dest_axi_bvalid), .m_axi_bresp(m_dest_axi_bresp), .m_axi_bready(m_dest_axi_bready), .m_axi_arready(m_src_axi_arready), .m_axi_arvalid(m_src_axi_arvalid), .m_axi_araddr(m_src_axi_araddr), .m_axi_arlen(m_src_axi_arlen), .m_axi_arsize(m_src_axi_arsize), .m_axi_arburst(m_src_axi_arburst), .m_axi_arprot(m_src_axi_arprot), .m_axi_arcache(m_src_axi_arcache), .m_axi_rdata(m_src_axi_rdata), .m_axi_rready(m_src_axi_rready), .m_axi_rvalid(m_src_axi_rvalid), .m_axi_rresp(m_src_axi_rresp), .s_axis_aclk(s_axis_aclk), .s_axis_ready(s_axis_ready), .s_axis_valid(s_axis_valid), .s_axis_data(s_axis_data), .s_axis_user(s_axis_user), .s_axis_xfer_req(s_axis_xfer_req), .m_axis_aclk(m_axis_aclk), .m_axis_ready(m_axis_ready), .m_axis_valid(m_axis_valid), .m_axis_data(m_axis_data), .m_axis_last(m_axis_last), .m_axis_xfer_req(m_axis_xfer_req), .fifo_wr_clk(fifo_wr_clk), .fifo_wr_en(fifo_wr_en), .fifo_wr_din(fifo_wr_din), .fifo_wr_overflow(fifo_wr_overflow), .fifo_wr_sync(fifo_wr_sync), .fifo_wr_xfer_req(fifo_wr_xfer_req), .fifo_rd_clk(fifo_rd_clk), .fifo_rd_en(fifo_rd_en), .fifo_rd_valid(fifo_rd_valid), .fifo_rd_dout(fifo_rd_dout), .fifo_rd_underflow(fifo_rd_underflow), .fifo_rd_xfer_req(fifo_rd_xfer_req), // DBG .dbg_dest_request_id(dest_request_id), .dbg_dest_address_id(dest_address_id), .dbg_dest_data_id(dest_data_id), .dbg_dest_response_id(dest_response_id), .dbg_src_request_id(src_request_id), .dbg_src_address_id(src_address_id), .dbg_src_data_id(src_data_id), .dbg_src_response_id(src_response_id), .dbg_status(dbg_status) ); assign m_dest_axi_arvalid = 1'b0; assign m_dest_axi_rready = 1'b0; assign m_dest_axi_araddr = 'h0; assign m_dest_axi_arlen = 'h0; assign m_dest_axi_arsize = 'h0; assign m_dest_axi_arburst = 'h0; assign m_dest_axi_arcache = 'h0; assign m_dest_axi_arprot = 'h0; assign m_src_axi_awvalid = 1'b0; assign m_src_axi_wvalid = 1'b0; assign m_src_axi_bready = 1'b0; assign m_src_axi_awvalid = 'h0; assign m_src_axi_awaddr = 'h0; assign m_src_axi_awlen = 'h0; assign m_src_axi_awsize = 'h0; assign m_src_axi_awburst = 'h0; assign m_src_axi_awcache = 'h0; assign m_src_axi_awprot = 'h0; assign m_src_axi_wvalid = 'h0; assign m_src_axi_wdata = 'h0; assign m_src_axi_wstrb = 'h0; assign m_src_axi_wlast = 'h0; endmodule bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_dmac/axi_dmac_constr.sdc000066400000000000000000000011741457144405000303760ustar00rootroot00000000000000 set_false_path -to [get_registers *axi_dmac*cdc_sync_stage1*] set_false_path -from [get_registers *axi_dmac*cdc_sync_fifo_ram*] set_false_path -from [get_registers *axi_dmac*eot_mem*] set_false_path -to [get_registers *axi_dmac*reset_shift*] set_false_path -to [get_registers *axi_dmac*ram*] set_false_path -from [get_registers *axi_dmac*cdc_sync_stage2*] -to [get_registers *axi_dmac*up_rdata*] set_false_path -from [get_registers *axi_dmac*id*] -to [get_registers *axi_dmac*up_rdata*] set_false_path -from [get_registers *axi_dmac*address*] -to [get_registers *axi_dmac*up_rdata*] bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_dmac/axi_dmac_constr.ttcl000066400000000000000000000150741457144405000305770ustar00rootroot00000000000000<: set ComponentName [getComponentNameString] :> <: setOutputDirectory "./" :> <: setFileName [ttcl_add $ComponentName "_constr"] :> <: setFileExtension ".xdc" :> <: setFileProcessingOrder late :> <: set async_dest_req [getBooleanValue "ASYNC_CLK_DEST_REQ"] :> <: set async_req_src [getBooleanValue "ASYNC_CLK_REQ_SRC"] :> <: set async_src_dest [getBooleanValue "ASYNC_CLK_SRC_DEST"] :> set req_clk [get_clocks -of_objects [get_ports s_axi_aclk]] set src_clk [get_clocks -of_objects [get_ports -quiet {fifo_wr_clk s_axis_aclk m_src_axi_aclk}]] set dest_clk [get_clocks -of_objects [get_ports -quiet {fifo_rd_clk m_axis_aclk m_dest_axi_aclk}]] <: if {$async_req_src || $async_src_dest || $async_dest_req} { :> set_property ASYNC_REG TRUE \ [get_cells -quiet -hier *cdc_sync_stage1_reg*] \ [get_cells -quiet -hier *cdc_sync_stage2_reg*] <: } :> <: if {$async_req_src} { :> set_max_delay -quiet -datapath_only \ -from $req_clk \ -to [get_cells -quiet -hier *cdc_sync_stage1_reg* \ -filter {NAME =~ *i_sync_src_request_id* && PRIMITIVE_SUBGROUP == flop}] \ [get_property -min PERIOD $req_clk] set_false_path -quiet \ -from $src_clk \ -to [get_cells -quiet -hier *cdc_sync_stage1_reg* \ -filter {NAME =~ *i_sync_status_src* && PRIMITIVE_SUBGROUP == flop}] set_false_path -quiet \ -from $req_clk \ -to [get_cells -quiet -hier *cdc_sync_stage1_reg* \ -filter {NAME =~ *i_sync_control_src* && PRIMITIVE_SUBGROUP == flop}] set_max_delay -quiet -datapath_only \ -from $req_clk \ -to [get_cells -quiet -hier *cdc_sync_stage1_reg* \ -filter {NAME =~ *i_src_req_fifo/i_waddr_sync* && PRIMITIVE_SUBGROUP == flop}] \ [get_property -min PERIOD $req_clk] set_max_delay -quiet -datapath_only \ -from $src_clk \ -to [get_cells -quiet -hier *cdc_sync_stage1_reg* \ -filter {NAME =~ *i_src_req_fifo/i_raddr_sync* && PRIMITIVE_SUBGROUP == flop}] \ [get_property -min PERIOD $src_clk] set_max_delay -quiet -datapath_only \ -from [get_cells -quiet -hier *cdc_sync_fifo_ram_reg* \ -filter {NAME =~ *i_src_req_fifo* && PRIMITIVE_SUBGROUP == flop}] \ -to $src_clk \ [get_property -min PERIOD $src_clk] set_max_delay -quiet -datapath_only \ -from [get_cells -quiet -hier *eot_mem_reg* \ -filter {NAME =~ *i_request_arb* && PRIMITIVE_SUBGROUP == flop}] \ -to $src_clk \ [get_property -min PERIOD $src_clk] <: } :> <: if {$async_dest_req} { :> set_max_delay -quiet -datapath_only \ -from $dest_clk \ -to [get_cells -hier *cdc_sync_stage1_reg* \ -filter {NAME =~ *i_sync_req_response_id* && PRIMITIVE_SUBGROUP == flop}] \ [get_property -min PERIOD $dest_clk] set_false_path -quiet \ -from $dest_clk \ -to [get_cells -quiet -hier *cdc_sync_stage1_reg* \ -filter {NAME =~ *i_sync_status_dest* && PRIMITIVE_SUBGROUP == flop}] set_false_path -quiet \ -from $req_clk \ -to [get_cells -quiet -hier *cdc_sync_stage1_reg* \ -filter {NAME =~ *i_sync_control_dest* && PRIMITIVE_SUBGROUP == flop}] set_max_delay -quiet -datapath_only \ -from $req_clk \ -to [get_cells -quiet -hier *cdc_sync_stage1_reg* \ -filter {NAME =~ *i_dest_req_fifo/i_waddr_sync* && PRIMITIVE_SUBGROUP == flop}] \ [get_property -min PERIOD $req_clk] set_max_delay -quiet -datapath_only \ -from $dest_clk \ -to [get_cells -quiet -hier *cdc_sync_stage1_reg* \ -filter {NAME =~ *i_dest_req_fifo/i_raddr_sync* && PRIMITIVE_SUBGROUP == flop}] \ [get_property -min PERIOD $dest_clk] set_max_delay -quiet -datapath_only \ -from [get_cells -quiet -hier *cdc_sync_fifo_ram_reg* \ -filter {NAME =~ *i_dest_req_fifo* && PRIMITIVE_SUBGROUP == flop}] \ -to $dest_clk \ [get_property -min PERIOD $dest_clk] set_max_delay -quiet -datapath_only \ -from $dest_clk \ -to [get_cells -quiet -hier *cdc_sync_stage1_reg* \ -filter {NAME =~ *i_dest_response_fifo/i_waddr_sync* && PRIMITIVE_SUBGROUP == flop}] \ [get_property -min PERIOD $dest_clk] set_max_delay -quiet -datapath_only \ -from $req_clk \ -to [get_cells -quiet -hier *cdc_sync_stage1_reg* \ -filter {NAME =~ *i_dest_response_fifo/i_raddr_sync* && PRIMITIVE_SUBGROUP == flop}] \ [get_property -min PERIOD $req_clk] set_max_delay -quiet -datapath_only \ -from [get_cells -quiet -hier *cdc_sync_fifo_ram_reg* \ -filter {NAME =~ *i_dest_response_fifo* && PRIMITIVE_SUBGROUP == flop}] \ -to $req_clk \ [get_property -min PERIOD $req_clk] set_max_delay -quiet -datapath_only \ -from [get_cells -quiet -hier *eot_mem_reg* \ -filter {NAME =~ *i_request_arb* && PRIMITIVE_SUBGROUP == flop}] \ -to $dest_clk \ [get_property -min PERIOD $dest_clk] <: } :> <: if {$async_src_dest} { :> set_max_delay -quiet -datapath_only \ -from $src_clk \ -to [get_cells -quiet -hier *cdc_sync_stage1_reg* \ -filter {NAME =~ *i_sync_dest_request_id* && PRIMITIVE_SUBGROUP == flop}] \ [get_property -min PERIOD $src_clk] set_max_delay -quiet -datapath_only \ -from $src_clk \ -to [get_cells -quiet -hier *cdc_sync_stage1_reg* \ -filter {NAME =~ *i_fifo/i_address_gray/i_waddr_sync* && PRIMITIVE_SUBGROUP == flop}] \ [get_property -min PERIOD $src_clk] set_max_delay -quiet -datapath_only \ -from $dest_clk \ -to [get_cells -quiet -hier *cdc_sync_stage1_reg* \ -filter {NAME =~ *i_fifo/i_address_gray/i_raddr_sync* && PRIMITIVE_SUBGROUP == flop}] \ [get_property -min PERIOD $dest_clk] # In SDP mode REGCEB should not be connected. When inferring the BRAM the tools # do it anyway. The signal is not used by the BRAM though. But since the clock # associated with REGCEB is the write clock and not the read clock we get a # timing problem. Mark the path as a false path so it is not timed. set_false_path -quiet \ -to [get_pins -hier *ram_reg*/REGCEB -filter {NAME =~ *i_fifo*}] <: } :> # Reset signals set_false_path -quiet \ -from $req_clk \ -to [get_pins -quiet -hier *reset_shift_reg*/PRE] # Ignore timing for debug signals to register map set_false_path -quiet \ -from [get_cells -quiet -hier *cdc_sync_stage2_reg* \ -filter {name =~ *i_sync_src_request_id* && primitive_subgroup == flop}] \ -to [get_cells -quiet -hier *up_rdata_reg* -filter {primitive_subgroup == flop}] set_false_path -quiet \ -from [get_cells -quiet -hier *cdc_sync_stage2_reg* \ -filter {name =~ *i_sync_dest_request_id* && primitive_subgroup == flop}] \ -to [get_cells -quiet -hier *up_rdata_reg* -filter {primitive_subgroup == flop}] set_false_path -quiet \ -from [get_cells -quiet -hier *id_reg* -filter {name =~ *i_request_arb* && primitive_subgroup == flop}] \ -to [get_cells -quiet -hier *up_rdata_reg* -filter {primitive_subgroup == flop}] set_false_path -quiet \ -from [get_cells -quiet -hier *address_reg* -filter {name =~ *i_addr_gen* && primitive_subgroup == flop}] \ -to [get_cells -quiet -hier *up_rdata_reg* -filter {primitive_subgroup == flop}] bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_dmac/axi_dmac_hw.tcl000066400000000000000000000344111457144405000275150ustar00rootroot00000000000000 package require -exact qsys 13.0 source ../scripts/adi_env.tcl source ../scripts/adi_ip_alt.tcl set_module_property NAME axi_dmac set_module_property DESCRIPTION "AXI DMA Controller" set_module_property VERSION 1.0 set_module_property GROUP "Analog Devices" set_module_property DISPLAY_NAME axi_dmac set_module_property ELABORATION_CALLBACK axi_dmac_elaborate # files add_fileset quartus_synth QUARTUS_SYNTH "" "Quartus Synthesis" set_fileset_property quartus_synth TOP_LEVEL axi_dmac add_fileset_file axi_dmac.qip OTHER PATH ./axi_dmac.qip # parameters add_parameter ID INTEGER 0 set_parameter_property ID DEFAULT_VALUE 0 set_parameter_property ID DISPLAY_NAME ID set_parameter_property ID TYPE INTEGER set_parameter_property ID UNITS None set_parameter_property ID HDL_PARAMETER true add_parameter DMA_DATA_WIDTH_SRC INTEGER 0 set_parameter_property DMA_DATA_WIDTH_SRC DEFAULT_VALUE 64 set_parameter_property DMA_DATA_WIDTH_SRC DISPLAY_NAME DMA_DATA_WIDTH_SRC set_parameter_property DMA_DATA_WIDTH_SRC TYPE INTEGER set_parameter_property DMA_DATA_WIDTH_SRC UNITS None set_parameter_property DMA_DATA_WIDTH_SRC HDL_PARAMETER true add_parameter DMA_DATA_WIDTH_DEST INTEGER 0 set_parameter_property DMA_DATA_WIDTH_DEST DEFAULT_VALUE 64 set_parameter_property DMA_DATA_WIDTH_DEST DISPLAY_NAME DMA_DATA_WIDTH_DEST set_parameter_property DMA_DATA_WIDTH_DEST TYPE INTEGER set_parameter_property DMA_DATA_WIDTH_DEST UNITS None set_parameter_property DMA_DATA_WIDTH_DEST HDL_PARAMETER true add_parameter DMA_LENGTH_WIDTH INTEGER 0 set_parameter_property DMA_LENGTH_WIDTH DEFAULT_VALUE 14 set_parameter_property DMA_LENGTH_WIDTH DISPLAY_NAME DMA_LENGTH_WIDTH set_parameter_property DMA_LENGTH_WIDTH TYPE INTEGER set_parameter_property DMA_LENGTH_WIDTH UNITS None set_parameter_property DMA_LENGTH_WIDTH HDL_PARAMETER true add_parameter DMA_2D_TRANSFER INTEGER 0 set_parameter_property DMA_2D_TRANSFER DEFAULT_VALUE 1 set_parameter_property DMA_2D_TRANSFER DISPLAY_NAME DMA_2D_TRANSFER set_parameter_property DMA_2D_TRANSFER TYPE INTEGER set_parameter_property DMA_2D_TRANSFER UNITS None set_parameter_property DMA_2D_TRANSFER HDL_PARAMETER true add_parameter ASYNC_CLK_REQ_SRC INTEGER 0 set_parameter_property ASYNC_CLK_REQ_SRC DEFAULT_VALUE 1 set_parameter_property ASYNC_CLK_REQ_SRC DISPLAY_NAME ASYNC_CLK_REQ_SRC set_parameter_property ASYNC_CLK_REQ_SRC TYPE INTEGER set_parameter_property ASYNC_CLK_REQ_SRC UNITS None set_parameter_property ASYNC_CLK_REQ_SRC HDL_PARAMETER true add_parameter ASYNC_CLK_SRC_DEST INTEGER 0 set_parameter_property ASYNC_CLK_SRC_DEST DEFAULT_VALUE 1 set_parameter_property ASYNC_CLK_SRC_DEST DISPLAY_NAME ASYNC_CLK_SRC_DEST set_parameter_property ASYNC_CLK_SRC_DEST TYPE INTEGER set_parameter_property ASYNC_CLK_SRC_DEST UNITS None set_parameter_property ASYNC_CLK_SRC_DEST HDL_PARAMETER true add_parameter ASYNC_CLK_DEST_REQ INTEGER 0 set_parameter_property ASYNC_CLK_DEST_REQ DEFAULT_VALUE 1 set_parameter_property ASYNC_CLK_DEST_REQ DISPLAY_NAME ASYNC_CLK_DEST_REQ set_parameter_property ASYNC_CLK_DEST_REQ TYPE INTEGER set_parameter_property ASYNC_CLK_DEST_REQ UNITS None set_parameter_property ASYNC_CLK_DEST_REQ HDL_PARAMETER true add_parameter AXI_SLICE_DEST INTEGER 0 set_parameter_property AXI_SLICE_DEST DEFAULT_VALUE 0 set_parameter_property AXI_SLICE_DEST DISPLAY_NAME AXI_SLICE_DEST set_parameter_property AXI_SLICE_DEST TYPE INTEGER set_parameter_property AXI_SLICE_DEST UNITS None set_parameter_property AXI_SLICE_DEST HDL_PARAMETER true add_parameter AXI_SLICE_SRC INTEGER 0 set_parameter_property AXI_SLICE_SRC DEFAULT_VALUE 0 set_parameter_property AXI_SLICE_SRC DISPLAY_NAME AXI_SLICE_SRC set_parameter_property AXI_SLICE_SRC TYPE INTEGER set_parameter_property AXI_SLICE_SRC UNITS None set_parameter_property AXI_SLICE_SRC HDL_PARAMETER true add_parameter SYNC_TRANSFER_START INTEGER 0 set_parameter_property SYNC_TRANSFER_START DEFAULT_VALUE 0 set_parameter_property SYNC_TRANSFER_START DISPLAY_NAME SYNC_TRANSFER_START set_parameter_property SYNC_TRANSFER_START TYPE INTEGER set_parameter_property SYNC_TRANSFER_START UNITS None set_parameter_property SYNC_TRANSFER_START HDL_PARAMETER true add_parameter CYCLIC INTEGER 0 set_parameter_property CYCLIC DEFAULT_VALUE 1 set_parameter_property CYCLIC DISPLAY_NAME CYCLIC set_parameter_property CYCLIC TYPE INTEGER set_parameter_property CYCLIC UNITS None set_parameter_property CYCLIC HDL_PARAMETER true add_parameter DMA_TYPE_DEST INTEGER 0 set_parameter_property DMA_TYPE_DEST DEFAULT_VALUE 0 set_parameter_property DMA_TYPE_DEST DISPLAY_NAME DMA_TYPE_DEST set_parameter_property DMA_TYPE_DEST TYPE INTEGER set_parameter_property DMA_TYPE_DEST UNITS None set_parameter_property DMA_TYPE_DEST HDL_PARAMETER true add_parameter DMA_TYPE_SRC INTEGER 0 set_parameter_property DMA_TYPE_SRC DEFAULT_VALUE 2 set_parameter_property DMA_TYPE_SRC DISPLAY_NAME DMA_TYPE_SRC set_parameter_property DMA_TYPE_SRC TYPE INTEGER set_parameter_property DMA_TYPE_SRC UNITS None set_parameter_property DMA_TYPE_SRC HDL_PARAMETER true add_parameter FIFO_SIZE INTEGER 0 "In bursts" set_parameter_property FIFO_SIZE DEFAULT_VALUE 4 set_parameter_property FIFO_SIZE DISPLAY_NAME FIFO_SIZE set_parameter_property FIFO_SIZE TYPE INTEGER set_parameter_property FIFO_SIZE UNITS None set_parameter_property FIFO_SIZE HDL_PARAMETER true # axi4 slave add_interface s_axi_clock clock end add_interface_port s_axi_clock s_axi_aclk clk Input 1 add_interface s_axi_reset reset end set_interface_property s_axi_reset associatedClock s_axi_clock add_interface_port s_axi_reset s_axi_aresetn reset_n Input 1 add_interface s_axi axi4lite end set_interface_property s_axi associatedClock s_axi_clock set_interface_property s_axi associatedReset s_axi_reset add_interface_port s_axi s_axi_awvalid awvalid Input 1 add_interface_port s_axi s_axi_awaddr awaddr Input 14 add_interface_port s_axi s_axi_awready awready Output 1 add_interface_port s_axi s_axi_wvalid wvalid Input 1 add_interface_port s_axi s_axi_wdata wdata Input 32 add_interface_port s_axi s_axi_wstrb wstrb Input 4 add_interface_port s_axi s_axi_wready wready Output 1 add_interface_port s_axi s_axi_bvalid bvalid Output 1 add_interface_port s_axi s_axi_bresp bresp Output 2 add_interface_port s_axi s_axi_bready bready Input 1 add_interface_port s_axi s_axi_arvalid arvalid Input 1 add_interface_port s_axi s_axi_araddr araddr Input 14 add_interface_port s_axi s_axi_arready arready Output 1 add_interface_port s_axi s_axi_rvalid rvalid Output 1 add_interface_port s_axi s_axi_rresp rresp Output 2 add_interface_port s_axi s_axi_rdata rdata Output 32 add_interface_port s_axi s_axi_rready rready Input 1 add_interface_port s_axi s_axi_awprot awprot Input 3 add_interface_port s_axi s_axi_arprot arprot Input 3 add_interface interrupt_sender interrupt end set_interface_property interrupt_sender associatedAddressablePoint "" set_interface_property interrupt_sender associatedClock s_axi_clock set_interface_property interrupt_sender ENABLED true set_interface_property interrupt_sender EXPORT_OF "" set_interface_property interrupt_sender PORT_NAME_MAP "" set_interface_property interrupt_sender CMSIS_SVD_VARIABLES "" set_interface_property interrupt_sender SVD_ADDRESS_GROUP "" add_interface_port interrupt_sender irq irq Output 1 # conditional interface proc axi_dmac_elaborate {} { # axi4 destination/source if {[get_parameter_value DMA_TYPE_DEST] == 0} { add_interface m_dest_axi_clock clock end add_interface_port m_dest_axi_clock m_dest_axi_aclk clk Input 1 add_interface m_dest_axi_reset reset end set_interface_property m_dest_axi_reset associatedClock m_dest_axi_clock add_interface_port m_dest_axi_reset m_dest_axi_aresetn reset_n Input 1 add_interface m_dest_axi axi4 start set_interface_property m_dest_axi associatedClock m_dest_axi_clock set_interface_property m_dest_axi associatedReset m_dest_axi_reset add_interface_port m_dest_axi m_dest_axi_awvalid awvalid Output 1 add_interface_port m_dest_axi m_dest_axi_awaddr awaddr Output 32 add_interface_port m_dest_axi m_dest_axi_awready awready Input 1 add_interface_port m_dest_axi m_dest_axi_wvalid wvalid Output 1 add_interface_port m_dest_axi m_dest_axi_wdata wdata Output DMA_DATA_WIDTH_DEST add_interface_port m_dest_axi m_dest_axi_wstrb wstrb Output DMA_DATA_WIDTH_DEST/8 add_interface_port m_dest_axi m_dest_axi_wready wready Input 1 add_interface_port m_dest_axi m_dest_axi_bvalid bvalid Input 1 add_interface_port m_dest_axi m_dest_axi_bresp bresp Input 2 add_interface_port m_dest_axi m_dest_axi_bready bready Output 1 add_interface_port m_dest_axi m_dest_axi_arvalid arvalid Output 1 add_interface_port m_dest_axi m_dest_axi_araddr araddr Output 32 add_interface_port m_dest_axi m_dest_axi_arready arready Input 1 add_interface_port m_dest_axi m_dest_axi_rvalid rvalid Input 1 add_interface_port m_dest_axi m_dest_axi_rresp rresp Input 2 add_interface_port m_dest_axi m_dest_axi_rdata rdata Input DMA_DATA_WIDTH_DEST add_interface_port m_dest_axi m_dest_axi_rready rready Output 1 add_interface_port m_dest_axi m_dest_axi_awlen awlen Output 8 add_interface_port m_dest_axi m_dest_axi_awsize awsize Output 3 add_interface_port m_dest_axi m_dest_axi_awburst awburst Output 2 add_interface_port m_dest_axi m_dest_axi_awcache awcache Output 4 add_interface_port m_dest_axi m_dest_axi_awprot awprot Output 3 add_interface_port m_dest_axi m_dest_axi_wlast wlast Output 1 add_interface_port m_dest_axi m_dest_axi_arlen arlen Output 8 add_interface_port m_dest_axi m_dest_axi_arsize arsize Output 3 add_interface_port m_dest_axi m_dest_axi_arburst arburst Output 2 add_interface_port m_dest_axi m_dest_axi_arcache arcache Output 4 add_interface_port m_dest_axi m_dest_axi_arprot arprot Output 3 } if {[get_parameter_value DMA_TYPE_SRC] == 0} { add_interface m_src_axi_clock clock end add_interface_port m_src_axi_clock m_src_axi_aclk clk Input 1 add_interface m_src_axi_reset reset end set_interface_property m_src_axi_reset associatedClock m_src_axi_clock add_interface_port m_src_axi_reset m_src_axi_aresetn reset_n Input 1 add_interface m_src_axi axi4 start set_interface_property m_src_axi associatedClock m_src_axi_clock set_interface_property m_src_axi associatedReset m_src_axi_reset add_interface_port m_src_axi m_src_axi_awvalid awvalid Output 1 add_interface_port m_src_axi m_src_axi_awaddr awaddr Output 32 add_interface_port m_src_axi m_src_axi_awready awready Input 1 add_interface_port m_src_axi m_src_axi_wvalid wvalid Output 1 add_interface_port m_src_axi m_src_axi_wdata wdata Output DMA_DATA_WIDTH_SRC add_interface_port m_src_axi m_src_axi_wstrb wstrb Output DMA_DATA_WIDTH_SRC/8 add_interface_port m_src_axi m_src_axi_wready wready Input 1 add_interface_port m_src_axi m_src_axi_bvalid bvalid Input 1 add_interface_port m_src_axi m_src_axi_bresp bresp Input 2 add_interface_port m_src_axi m_src_axi_bready bready Output 1 add_interface_port m_src_axi m_src_axi_arvalid arvalid Output 1 add_interface_port m_src_axi m_src_axi_araddr araddr Output 32 add_interface_port m_src_axi m_src_axi_arready arready Input 1 add_interface_port m_src_axi m_src_axi_rvalid rvalid Input 1 add_interface_port m_src_axi m_src_axi_rresp rresp Input 2 add_interface_port m_src_axi m_src_axi_rdata rdata Input DMA_DATA_WIDTH_SRC add_interface_port m_src_axi m_src_axi_rready rready Output 1 add_interface_port m_src_axi m_src_axi_awlen awlen Output 8 add_interface_port m_src_axi m_src_axi_awsize awsize Output 3 add_interface_port m_src_axi m_src_axi_awburst awburst Output 2 add_interface_port m_src_axi m_src_axi_awcache awcache Output 4 add_interface_port m_src_axi m_src_axi_awprot awprot Output 3 add_interface_port m_src_axi m_src_axi_wlast wlast Output 1 add_interface_port m_src_axi m_src_axi_arlen arlen Output 8 add_interface_port m_src_axi m_src_axi_arsize arsize Output 3 add_interface_port m_src_axi m_src_axi_arburst arburst Output 2 add_interface_port m_src_axi m_src_axi_arcache arcache Output 4 add_interface_port m_src_axi m_src_axi_arprot arprot Output 3 } # axis destination/source if {[get_parameter_value DMA_TYPE_DEST] == 1} { ad_alt_intf clock m_axis_aclk input 1 clk ad_alt_intf signal m_axis_valid output 1 valid ad_alt_intf signal m_axis_data output DMA_DATA_WIDTH_DEST data ad_alt_intf signal m_axis_ready input 1 ready ad_alt_intf signal m_axis_last output 1 last ad_alt_intf signal m_axis_xfer_req output 1 xfer_req } if {[get_parameter_value DMA_TYPE_SRC] == 1} { ad_alt_intf clock s_axis_aclk input 1 clk ad_alt_intf signal s_axis_valid input 1 valid ad_alt_intf signal s_axis_data input DMA_DATA_WIDTH_SRC data ad_alt_intf signal s_axis_ready output 1 ready ad_alt_intf signal s_axis_xfer_req output 1 xfer_req ad_alt_intf signal s_axis_user input 1 user set_port_property s_axis_user termination true set_port_property s_axis_user termination_value 1 } # fifo destination/source if {[get_parameter_value DMA_TYPE_DEST] == 2} { ad_alt_intf clock fifo_rd_clk input 1 clk ad_alt_intf signal fifo_rd_en input 1 valid ad_alt_intf signal fifo_rd_valid output 1 valid ad_alt_intf signal fifo_rd_dout output DMA_DATA_WIDTH_DEST data ad_alt_intf signal fifo_rd_underflow output 1 unf ad_alt_intf signal fifo_rd_xfer_req output 1 xfer_req } if {[get_parameter_value DMA_TYPE_SRC] == 2} { ad_alt_intf clock fifo_wr_clk input 1 clk ad_alt_intf signal fifo_wr_en input 1 valid ad_alt_intf signal fifo_wr_din input DMA_DATA_WIDTH_SRC data ad_alt_intf signal fifo_wr_overflow output 1 ovf ad_alt_intf signal fifo_wr_sync input 1 sync ad_alt_intf signal fifo_wr_xfer_req output 1 xfer_req } } bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_dmac/axi_dmac_ip.tcl000066400000000000000000000231471457144405000275130ustar00rootroot00000000000000# ip source ../scripts/adi_env.tcl source $ad_hdl_dir/library/scripts/adi_ip.tcl adi_ip_create axi_dmac adi_ip_files axi_dmac [list \ "$ad_hdl_dir/library/common/sync_bits.v" \ "$ad_hdl_dir/library/common/up_axi.v" \ "address_generator.v" \ "data_mover.v" \ "request_arb.v" \ "request_generator.v" \ "response_handler.v" \ "axi_register_slice.v" \ "2d_transfer.v" \ "dest_axi_mm.v" \ "dest_axi_stream.v" \ "dest_fifo_inf.v" \ "src_axi_mm.v" \ "src_axi_stream.v" \ "src_fifo_inf.v" \ "splitter.v" \ "response_generator.v" \ "axi_dmac.v" \ "axi_dmac_constr.ttcl" \ "bd/bd.tcl" ] adi_ip_properties axi_dmac adi_ip_ttcl axi_dmac "axi_dmac_constr.ttcl" adi_ip_bd axi_dmac "bd/bd.tcl" adi_ip_add_core_dependencies { \ analog.com:user:util_axis_resize:1.0 \ analog.com:user:util_axis_fifo:1.0 \ } adi_add_bus "s_axis" "slave" \ "xilinx.com:interface:axis_rtl:1.0" \ "xilinx.com:interface:axis:1.0" \ [list {"s_axis_ready" "TREADY"} \ {"s_axis_valid" "TVALID"} \ {"s_axis_data" "TDATA"} \ {"s_axis_user" "TUSER"} ] adi_add_bus_clock "s_axis_aclk" "s_axis" adi_add_bus "m_axis" "master" \ "xilinx.com:interface:axis_rtl:1.0" \ "xilinx.com:interface:axis:1.0" \ [list {"m_axis_ready" "TREADY"} \ {"m_axis_valid" "TVALID"} \ {"m_axis_data" "TDATA"} ] adi_add_bus_clock "m_axis_aclk" "m_axis" adi_set_bus_dependency "m_src_axi" "m_src_axi" \ "(spirit:decode(id('MODELPARAM_VALUE.DMA_TYPE_SRC')) = 0)" adi_set_bus_dependency "m_dest_axi" "m_dest_axi" \ "(spirit:decode(id('MODELPARAM_VALUE.DMA_TYPE_DEST')) = 0)" adi_set_bus_dependency "s_axis" "s_axis" \ "(spirit:decode(id('MODELPARAM_VALUE.DMA_TYPE_SRC')) = 1)" adi_set_bus_dependency "m_axis" "m_axis" \ "(spirit:decode(id('MODELPARAM_VALUE.DMA_TYPE_DEST')) = 1)" adi_set_ports_dependency "fifo_rd" \ "(spirit:decode(id('MODELPARAM_VALUE.DMA_TYPE_DEST')) = 2)" # These are in the design to keep the Altera tools happy which can't handle # uni-directional AXI interfaces. The Xilinx tools can and do a better job when # they know that the interface is uni-directional, so disable the ports. set dummy_axi_ports [list \ "m_dest_axi_arvalid" \ "m_dest_axi_arready" \ "m_dest_axi_araddr" \ "m_dest_axi_arlen" \ "m_dest_axi_arsize" \ "m_dest_axi_arburst" \ "m_dest_axi_arcache" \ "m_dest_axi_arprot" \ "m_dest_axi_rready" \ "m_dest_axi_rvalid" \ "m_dest_axi_rresp" \ "m_dest_axi_rdata" \ "m_src_axi_awvalid" \ "m_src_axi_awready" \ "m_src_axi_awvalid" \ "m_src_axi_awaddr" \ "m_src_axi_awlen" \ "m_src_axi_awsize" \ "m_src_axi_awburst" \ "m_src_axi_awcache" \ "m_src_axi_awprot" \ "m_src_axi_wvalid" \ "m_src_axi_wready" \ "m_src_axi_wvalid" \ "m_src_axi_wdata" \ "m_src_axi_wstrb" \ "m_src_axi_wlast" \ "m_src_axi_bready" \ "m_src_axi_bvalid" \ "m_src_axi_bresp" \ ] foreach p $dummy_axi_ports { adi_set_ports_dependency $p "0" } adi_add_bus "fifo_wr" "slave" \ "analog.com:interface:fifo_wr_rtl:1.0" \ "analog.com:interface:fifo_wr:1.0" \ { \ {"fifo_wr_en" "EN"} \ {"fifo_wr_din" "DATA"} \ {"fifo_wr_overflow" "OVERFLOW"} \ {"fifo_wr_sync" "SYNC"} \ {"fifo_wr_xfer_req" "XFER_REQ"} \ } adi_add_bus_clock "fifo_wr_clk" "fifo_wr" adi_set_bus_dependency "fifo_wr" "fifo_wr" \ "(spirit:decode(id('MODELPARAM_VALUE.DMA_TYPE_SRC')) = 2)" adi_add_bus "fifo_rd" "slave" \ "analog.com:interface:fifo_rd_rtl:1.0" \ "analog.com:interface:fifo_rd:1.0" \ { {"fifo_rd_en" "EN"} \ {"fifo_rd_dout" "DATA"} \ {"fifo_rd_valid" "VALID"} \ {"fifo_rd_underflow" "UNDERFLOW"} \ } adi_add_bus_clock "fifo_rd_clk" "fifo_rd" adi_set_bus_dependency "fifo_rd" "fifo_rd" \ "(spirit:decode(id('MODELPARAM_VALUE.DMA_TYPE_DEST')) = 2)" foreach port {"m_dest_axi_aresetn" "m_src_axi_aresetn" "s_axis_valid" \ "s_axis_data" "m_axis_ready" "fifo_wr_en" "fifo_wr_din" "fifo_rd_en"} { set_property DRIVER_VALUE "0" [ipx::get_ports $port] } foreach port {"s_axis_user" "fifo_wr_sync"} { set_property DRIVER_VALUE "1" [ipx::get_ports $port] } set cc [ipx::current_core] # The core does not issue narrow bursts foreach intf [ipx::get_bus_interfaces m_*_axi -of_objects $cc] { set para [ipx::add_bus_parameter SUPPORTS_NARROW_BURST $intf] set_property "VALUE" "0" $para } set_property -dict [list \ "value_validation_type" "range_long" \ "value_validation_range_minimum" "8" \ "value_validation_range_maximum" "32" \ ] \ [ipx::get_user_parameters DMA_LENGTH_WIDTH -of_objects $cc] foreach {k v} { \ "ASYNC_CLK_REQ_SRC" "true" \ "ASYNC_CLK_SRC_DEST" "true" \ "ASYNC_CLK_DEST_REQ" "true" \ "CYCLIC" "false" \ "DMA_2D_TRANSFER" "false" \ "SYNC_TRANSFER_START" "false" \ "AXI_SLICE_SRC" "false" \ "AXI_SLICE_DEST" "false" \ } { \ set_property -dict [list \ "value_format" "bool" \ "value" $v \ ] \ [ipx::get_user_parameters $k -of_objects $cc] set_property -dict [list \ "value_format" "bool" \ "value" $v \ ] \ [ipx::get_hdl_parameters $k -of_objects $cc] } set_property -dict [list \ "enablement_tcl_expr" "\$DMA_TYPE_SRC != 0" \ ] \ [ipx::get_user_parameters SYNC_TRANSFER_START -of_objects $cc] foreach dir {"SRC" "DEST"} { set_property -dict [list \ "value_validation_type" "list" \ "value_validation_list" "16 32 64 128 256 512 1024" \ ] \ [ipx::get_user_parameters DMA_DATA_WIDTH_${dir} -of_objects $cc] set_property -dict [list \ "value_validation_type" "pairs" \ "value_validation_pairs" {"AXI3" "1" "AXI4" "0"} \ "enablement_tcl_expr" "\$DMA_TYPE_${dir} == 0" \ ] \ [ipx::get_user_parameters DMA_AXI_PROTOCOL_${dir} -of_objects $cc] set_property -dict [list \ "value_validation_type" "pairs" \ "value_validation_pairs" { \ "Memory-Mapped AXI" "0" \ "Streaming AXI" "1" \ "FIFO Interface" "2" \ } \ ] \ [ipx::get_user_parameters DMA_TYPE_${dir} -of_objects $cc] } set page0 [ipgui::get_pagespec -name "Page 0" -component $cc] set g [ipgui::add_group -name {DMA Endpoint Configuration} -component $cc \ -parent $page0 -display_name {DMA Endpoint Configuration} \ -layout "horizontal"] set src_group [ipgui::add_group -name {Source} -component $cc -parent $g \ -display_name {Source}] set dest_group [ipgui::add_group -name {Destination} -component $cc -parent $g \ -display_name {Destination}] foreach {dir group} [list "SRC" $src_group "DEST" $dest_group] { set p [ipgui::get_guiparamspec -name "DMA_TYPE_${dir}" -component $cc] ipgui::move_param -component $cc -order 0 $p -parent $group set_property -dict [list \ "widget" "comboBox" \ "display_name" "Type" \ ] $p set p [ipgui::get_guiparamspec -name "DMA_AXI_PROTOCOL_${dir}" -component $cc] ipgui::move_param -component $cc -order 1 $p -parent $group set_property -dict [list \ "widget" "comboBox" \ "display_name" "AXI Protocol" \ ] $p set p [ipgui::get_guiparamspec -name "DMA_DATA_WIDTH_${dir}" -component $cc] ipgui::move_param -component $cc -order 2 $p -parent $group set_property -dict [list \ "display_name" "Bus Width" \ ] $p set p [ipgui::get_guiparamspec -name "AXI_SLICE_${dir}" -component $cc] ipgui::move_param -component $cc -order 3 $p -parent $group set_property -dict [list \ "display_name" "Insert Register Slice" \ ] $p } set p [ipgui::get_guiparamspec -name "SYNC_TRANSFER_START" -component $cc] ipgui::move_param -component $cc -order 4 $p -parent $src_group set_property -dict [list \ "display_name" "Transfer Start Synchronization Support" \ ] $p set general_group [ipgui::add_group -name "General Configuration" -component $cc \ -parent $page0 -display_name "General Configuration"] set p [ipgui::get_guiparamspec -name "ID" -component $cc] ipgui::move_param -component $cc -order 0 $p -parent $general_group set_property -dict [list \ "display_name" "Core ID" \ ] $p set p [ipgui::get_guiparamspec -name "DMA_LENGTH_WIDTH" -component $cc] ipgui::move_param -component $cc -order 1 $p -parent $general_group set_property -dict [list \ "display_name" "DMA Transfer Length Register Width" \ ] $p set p [ipgui::get_guiparamspec -name "FIFO_SIZE" -component $cc] ipgui::move_param -component $cc -order 2 $p -parent $general_group set_property -dict [list \ "display_name" "FIFO Size (In Bursts)" \ ] $p set p [ipgui::get_guiparamspec -name "MAX_BYTES_PER_BURST" -component $cc] ipgui::move_param -component $cc -order 3 $p -parent $general_group set_property -dict [list \ "display_name" "Maximum Bytes per Burst" \ ] $p set feature_group [ipgui::add_group -name "Features" -component $cc \ -parent $page0 -display_name "Features"] set p [ipgui::get_guiparamspec -name "CYCLIC" -component $cc] ipgui::move_param -component $cc -order 0 $p -parent $feature_group set_property -dict [list \ "display_name" "Cyclic Transfer Support" \ ] $p set p [ipgui::get_guiparamspec -name "DMA_2D_TRANSFER" -component $cc] ipgui::move_param -component $cc -order 1 $p -parent $feature_group set_property -dict [list \ "display_name" "2D Transfer Support" \ ] $p set clk_group [ipgui::add_group -name {Clock Domain Configuration} -component $cc \ -parent $page0 -display_name {Clock Domain Configuration}] set p [ipgui::get_guiparamspec -name "ASYNC_CLK_REQ_SRC" -component $cc] ipgui::move_param -component $cc -order 0 $p -parent $clk_group set_property -dict [list \ "display_name" "Request and Source Clock Asynchronous" \ ] $p set p [ipgui::get_guiparamspec -name "ASYNC_CLK_SRC_DEST" -component $cc] ipgui::move_param -component $cc -order 1 $p -parent $clk_group set_property -dict [list \ "display_name" "Source and Destination Clock Asynchronous" \ ] $p set p [ipgui::get_guiparamspec -name "ASYNC_CLK_DEST_REQ" -component $cc] ipgui::move_param -component $cc -order 2 $p -parent $clk_group set_property -dict [list \ "display_name" "Destination and Request Clock Asynchronous" \ ] $p ipx::create_xgui_files [ipx::current_core] ipx::save_core $cc bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_dmac/axi_register_slice.v000066400000000000000000000105731457144405000306040ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2013(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** module axi_register_slice ( input clk, input resetn, input s_axi_valid, output s_axi_ready, input [DATA_WIDTH-1:0] s_axi_data, output m_axi_valid, input m_axi_ready, output [DATA_WIDTH-1:0] m_axi_data ); parameter DATA_WIDTH = 32; parameter FORWARD_REGISTERED = 0; parameter BACKWARD_REGISTERED = 0; /* s_axi_data -> bwd_data -> fwd_data(1) -> m_axi_data s_axi_valid -> bwd_valid -> fwd_valid(1) -> m_axi_valid s_axi_ready <- bwd_ready(2) <- fwd_ready <- m_axi_ready (1) FORWARD_REGISTERED inserts a set of FF before m_axi_data and m_axi_valid (2) BACKWARD_REGISTERED insters a FF before s_axi_ready */ wire [DATA_WIDTH-1:0] bwd_data_s; wire bwd_valid_s; wire bwd_ready_s; wire [DATA_WIDTH-1:0] fwd_data_s; wire fwd_valid_s; wire fwd_ready_s; generate if (FORWARD_REGISTERED == 1) begin reg fwd_valid = 1'b0; reg [DATA_WIDTH-1:0] fwd_data = 'h00; assign fwd_ready_s = ~fwd_valid | m_axi_ready; assign fwd_valid_s = fwd_valid; assign fwd_data_s = fwd_data; always @(posedge clk) begin if (~fwd_valid | m_axi_ready) fwd_data <= bwd_data_s; end always @(posedge clk) begin if (resetn == 1'b0) begin fwd_valid <= 1'b0; end else begin if (bwd_valid_s) fwd_valid <= 1'b1; else if (m_axi_ready) fwd_valid <= 1'b0; end end end else begin assign fwd_data_s = bwd_data_s; assign fwd_valid_s = bwd_valid_s; assign fwd_ready_s = m_axi_ready; end endgenerate generate if (BACKWARD_REGISTERED == 1) begin reg bwd_ready = 1'b1; reg [DATA_WIDTH-1:0] bwd_data = 'h00; assign bwd_valid_s = ~bwd_ready | s_axi_valid; assign bwd_data_s = bwd_ready ? s_axi_data : bwd_data; assign bwd_ready_s = bwd_ready; always @(posedge clk) begin if (bwd_ready) bwd_data <= s_axi_data; end always @(posedge clk) begin if (resetn == 1'b0) begin bwd_ready <= 1'b1; end else begin if (fwd_ready_s) bwd_ready <= 1'b1; else if (s_axi_valid) bwd_ready <= 1'b0; end end end else begin assign bwd_valid_s = s_axi_valid; assign bwd_data_s = s_axi_data; assign bwd_ready_s = fwd_ready_s; end endgenerate assign m_axi_data = fwd_data_s; assign m_axi_valid = fwd_valid_s; assign s_axi_ready = bwd_ready_s; endmodule bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_dmac/bd/000077500000000000000000000000001457144405000251305ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_dmac/bd/bd.tcl000066400000000000000000000073701457144405000262300ustar00rootroot00000000000000 proc init {cellpath otherInfo} { set ip [get_bd_cells $cellpath] bd::mark_propagate_override $ip \ "ASYNC_CLK_REQ_SRC ASYNC_CLK_SRC_DEST ASYNC_CLK_DEST_REQ" # On ZYNQ the core is most likely connected to the AXI3 HP ports so use AXI3 # as the default. set family [string tolower [get_property FAMILY [get_property PART [current_project]]]] if {$family == "zynq"} { set axi_protocol 1 } else { set axi_protocol 0 } foreach dir {SRC DEST} { # This is a bit of a hack, but we can't change the protocol if the type # is not AXI MM set old [get_property "CONFIG.DMA_TYPE_${dir}" $ip] set_property "CONFIG.DMA_TYPE_${dir}" "0" $ip set_property "CONFIG.DMA_AXI_PROTOCOL_${dir}" $axi_protocol $ip set_property "CONFIG.DMA_TYPE_${dir}" $old $ip } } proc post_config_ip {cellpath otherinfo} { set ip [get_bd_cells $cellpath] # Update AXI interface properties according to configuration set max_bytes_per_burst [get_property "CONFIG.MAX_BYTES_PER_BURST" $ip] set fifo_size [get_property "CONFIG.FIFO_SIZE" $ip] foreach dir {"SRC" "DEST"} { set type [get_property "CONFIG.DMA_TYPE_$dir" $ip] if {$type != 0} { continue } set data_width [get_property "CONFIG.DMA_DATA_WIDTH_$dir" $ip] set max_beats_per_burst [expr {int(ceil($max_bytes_per_burst * 8.0 / $data_width))}] set intf [get_bd_intf_pins [format "%s/m_%s_axi" $cellpath [string tolower $dir]]] set_property CONFIG.MAX_BURST_LENGTH $max_beats_per_burst $intf # The core issues as many requests as the amount of data the FIFO can hold if {$dir == "SRC"} { set_property CONFIG.NUM_WRITE_OUTSTANDING 0 $intf set_property CONFIG.NUM_READ_OUTSTANDING $fifo_size $intf } else { set_property CONFIG.NUM_WRITE_OUTSTANDING $fifo_size $intf set_property CONFIG.NUM_READ_OUTSTANDING 0 $intf } } } proc axi_dmac_detect_async_clk { cellpath ip param_name clk_a clk_b } { set param_src [get_property "CONFIG.$param_name.VALUE_SRC" $ip] if {[string equal $param_src "USER"]} { return; } set clk_domain_a [get_property CONFIG.CLK_DOMAIN $clk_a] set clk_domain_b [get_property CONFIG.CLK_DOMAIN $clk_b] set clk_freq_a [get_property CONFIG.FREQ_HZ $clk_a] set clk_freq_b [get_property CONFIG.FREQ_HZ $clk_b] set clk_phase_a [get_property CONFIG.PHASE $clk_a] set clk_phase_b [get_property CONFIG.PHASE $clk_b] # Only mark it as sync if we can make sure that it is sync, if the # relationship of the clocks is unknown mark it as async if {$clk_domain_a != {} && $clk_domain_b != {} && \ $clk_domain_a == $clk_domain_b && $clk_freq_a == $clk_freq_b && \ $clk_phase_a == $clk_phase_b} { set clk_async 0 } else { set clk_async 1 } set_property "CONFIG.$param_name" $clk_async $ip # if {$clk_async == 0} { # bd::send_msg -of $cellpath -type INFO -msg_id 1 -text "$clk_a and $clk_b are synchronous" # } else { # bd::send_msg -of $cellpath -type INFO -msg_id 1 -text "$clk_a and $clk_b are asynchronous" # } } proc propagate {cellpath otherinfo} { set ip [get_bd_cells $cellpath] set src_type [get_property CONFIG.DMA_TYPE_SRC $ip] set dest_type [get_property CONFIG.DMA_TYPE_DEST $ip] set req_clk [get_bd_pins "$ip/s_axi_aclk"] if {$src_type == 2} { set src_clk [get_bd_pins "$ip/fifo_wr_clk"] } elseif {$src_type == 1} { set src_clk [get_bd_pins "$ip/s_axis_aclk"] } else { set src_clk [get_bd_pins "$ip/m_src_axi_aclk"] } if {$dest_type == 2} { set dest_clk [get_bd_pins "$ip/fifo_rd_clk"] } elseif {$dest_type == 1} { set dest_clk [get_bd_pins "$ip/m_axis_aclk"] } else { set dest_clk [get_bd_pins "$ip/m_dest_axi_aclk"] } axi_dmac_detect_async_clk $cellpath $ip "ASYNC_CLK_REQ_SRC" $req_clk $src_clk axi_dmac_detect_async_clk $cellpath $ip "ASYNC_CLK_SRC_DEST" $src_clk $dest_clk axi_dmac_detect_async_clk $cellpath $ip "ASYNC_CLK_DEST_REQ" $dest_clk $req_clk } bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_dmac/data_mover.v000066400000000000000000000127171457144405000270630ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2013(c) Analog Devices, Inc. // Author: Lars-Peter Clausen // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** module dmac_data_mover ( input clk, input resetn, input [ID_WIDTH-1:0] request_id, output [ID_WIDTH-1:0] response_id, input sync_id, input eot, input enable, output reg enabled, output xfer_req, output s_axi_ready, input s_axi_valid, input [DATA_WIDTH-1:0] s_axi_data, input m_axi_ready, output m_axi_valid, output [DATA_WIDTH-1:0] m_axi_data, output m_axi_last, input req_valid, output req_ready, input [BEATS_PER_BURST_WIDTH-1:0] req_last_burst_length ); parameter ID_WIDTH = 3; parameter DATA_WIDTH = 64; parameter DISABLE_WAIT_FOR_ID = 1; parameter BEATS_PER_BURST_WIDTH = 4; parameter LAST = 0; /* 0 = last asserted at the end of each burst, 1 = last only asserted at the end of the transfer */ localparam MAX_BEATS_PER_BURST = 2**(BEATS_PER_BURST_WIDTH); `include "inc_id.h" reg [BEATS_PER_BURST_WIDTH-1:0] last_burst_length = 'h00; reg [BEATS_PER_BURST_WIDTH-1:0] beat_counter = 'h00; reg [ID_WIDTH-1:0] id = 'h00; reg [ID_WIDTH-1:0] id_next = 'h00; reg pending_burst = 1'b0; reg active = 1'b0; reg last_eot = 1'b0; reg last_non_eot = 1'b0; wire last_load; wire last; assign xfer_req = active; assign response_id = id; assign last = eot ? last_eot : last_non_eot; assign s_axi_ready = m_axi_ready & pending_burst & active; assign m_axi_valid = s_axi_valid & pending_burst & active; assign m_axi_data = s_axi_data; assign m_axi_last = LAST ? (last_eot & eot) : last; // If we want to support zero delay between transfers we have to assert // req_ready on the same cycle on which the last load happens. assign last_load = s_axi_ready && s_axi_valid && last_eot && eot; assign req_ready = last_load || ~active; always @(posedge clk) begin if (resetn == 1'b0) begin enabled <= 1'b0; end else begin if (enable) begin enabled <= 1'b1; end else begin if (DISABLE_WAIT_FOR_ID == 0) begin // We are not allowed to just deassert valid, so wait until the // current beat has been accepted if (~s_axi_valid || m_axi_ready) enabled <= 1'b0; end else begin // For memory mapped AXI busses we have to complete all pending // burst requests before we can disable the data mover. if (response_id == request_id) enabled <= 1'b0; end end end end always @(posedge clk) begin if (req_ready) begin last_eot <= req_last_burst_length == 'h0; last_non_eot <= 1'b0; beat_counter <= 'h1; end else if (s_axi_ready && s_axi_valid) begin last_eot <= beat_counter == last_burst_length; last_non_eot <= beat_counter == MAX_BEATS_PER_BURST - 1; beat_counter <= beat_counter + 1; end end always @(posedge clk) begin if (req_ready) last_burst_length <= req_last_burst_length; end always @(posedge clk) begin if (enabled == 1'b0 || resetn == 1'b0) begin active <= 1'b0; end else if (req_valid) begin active <= 1'b1; end else if (last_load) begin active <= 1'b0; end end always @(*) begin if ((s_axi_ready && s_axi_valid && last) || (sync_id && pending_burst)) id_next <= inc_id(id); else id_next <= id; end always @(posedge clk) begin if (resetn == 1'b0) begin id <= 'h0; end else begin id <= id_next; end end always @(posedge clk) begin pending_burst <= id_next != request_id; end endmodule bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_dmac/dest_axi_mm.v000066400000000000000000000160551457144405000272320ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2013(c) Analog Devices, Inc. // Author: Lars-Peter Clausen // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** module dmac_dest_mm_axi ( input m_axi_aclk, input m_axi_aresetn, input req_valid, output req_ready, input [31:BYTES_PER_BEAT_WIDTH] req_address, input [BEATS_PER_BURST_WIDTH-1:0] req_last_burst_length, input [BYTES_PER_BEAT_WIDTH-1:0] req_last_beat_bytes, input enable, output enabled, input pause, input sync_id, output sync_id_ret, output response_valid, input response_ready, output [1:0] response_resp, output response_resp_eot, input [ID_WIDTH-1:0] request_id, output [ID_WIDTH-1:0] response_id, output [ID_WIDTH-1:0] data_id, output [ID_WIDTH-1:0] address_id, input data_eot, input address_eot, input response_eot, input fifo_valid, output fifo_ready, input [DMA_DATA_WIDTH-1:0] fifo_data, // Write address input m_axi_awready, output m_axi_awvalid, output [31:0] m_axi_awaddr, output [ 7:0] m_axi_awlen, output [ 2:0] m_axi_awsize, output [ 1:0] m_axi_awburst, output [ 2:0] m_axi_awprot, output [ 3:0] m_axi_awcache, // Write data output [DMA_DATA_WIDTH-1:0] m_axi_wdata, output [(DMA_DATA_WIDTH/8)-1:0] m_axi_wstrb, input m_axi_wready, output m_axi_wvalid, output m_axi_wlast, // Write response input m_axi_bvalid, input [ 1:0] m_axi_bresp, output m_axi_bready ); parameter ID_WIDTH = 3; parameter DMA_DATA_WIDTH = 64; parameter BYTES_PER_BEAT_WIDTH = $clog2(DMA_DATA_WIDTH/8); parameter BEATS_PER_BURST_WIDTH = 4; reg [(DMA_DATA_WIDTH/8)-1:0] wstrb; wire address_req_valid; wire address_req_ready; wire data_req_valid; wire data_req_ready; wire address_enabled; wire data_enabled; assign sync_id_ret = sync_id; wire _fifo_ready; assign fifo_ready = _fifo_ready | ~enabled; splitter #( .NUM_M(2) ) i_req_splitter ( .clk(m_axi_aclk), .resetn(m_axi_aresetn), .s_valid(req_valid), .s_ready(req_ready), .m_valid({ address_req_valid, data_req_valid }), .m_ready({ address_req_ready, data_req_ready }) ); dmac_address_generator #( .ID_WIDTH(ID_WIDTH), .BEATS_PER_BURST_WIDTH(BEATS_PER_BURST_WIDTH), .BYTES_PER_BEAT_WIDTH(BYTES_PER_BEAT_WIDTH), .DMA_DATA_WIDTH(DMA_DATA_WIDTH) ) i_addr_gen ( .clk(m_axi_aclk), .resetn(m_axi_aresetn), .enable(enable), .enabled(address_enabled), .pause(pause), .id(address_id), .request_id(request_id), .sync_id(sync_id), .req_valid(address_req_valid), .req_ready(address_req_ready), .req_address(req_address), .req_last_burst_length(req_last_burst_length), .eot(address_eot), .addr_ready(m_axi_awready), .addr_valid(m_axi_awvalid), .addr(m_axi_awaddr), .len(m_axi_awlen), .size(m_axi_awsize), .burst(m_axi_awburst), .prot(m_axi_awprot), .cache(m_axi_awcache) ); dmac_data_mover # ( .ID_WIDTH(ID_WIDTH), .DATA_WIDTH(DMA_DATA_WIDTH), .BEATS_PER_BURST_WIDTH(BEATS_PER_BURST_WIDTH) ) i_data_mover ( .clk(m_axi_aclk), .resetn(m_axi_aresetn), .enable(address_enabled), .enabled(data_enabled), .xfer_req(), .request_id(address_id), .response_id(data_id), .sync_id(sync_id), .eot(data_eot), .req_valid(data_req_valid), .req_ready(data_req_ready), .req_last_burst_length(req_last_burst_length), .s_axi_valid(fifo_valid), .s_axi_ready(_fifo_ready), .s_axi_data(fifo_data), .m_axi_valid(m_axi_wvalid), .m_axi_ready(m_axi_wready), .m_axi_data(m_axi_wdata), .m_axi_last(m_axi_wlast) ); always @(*) begin if (data_eot & m_axi_wlast) begin wstrb <= (1 << (req_last_beat_bytes + 1)) - 1; end else begin wstrb <= {(DMA_DATA_WIDTH/8){1'b1}}; end end assign m_axi_wstrb = wstrb; dmac_response_handler #( .ID_WIDTH(ID_WIDTH) ) i_response_handler ( .clk(m_axi_aclk), .resetn(m_axi_aresetn), .bvalid(m_axi_bvalid), .bready(m_axi_bready), .bresp(m_axi_bresp), .enable(data_enabled), .enabled(enabled), .id(response_id), .request_id(data_id), .sync_id(sync_id), .eot(response_eot), .resp_valid(response_valid), .resp_ready(response_ready), .resp_resp(response_resp), .resp_eot(response_resp_eot) ); endmodule bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_dmac/dest_axi_stream.v000066400000000000000000000114741457144405000301140ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2013(c) Analog Devices, Inc. // Author: Lars-Peter Clausen // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** module dmac_dest_axi_stream ( input s_axis_aclk, input s_axis_aresetn, input enable, output enabled, input sync_id, output sync_id_ret, output xfer_req, input [ID_WIDTH-1:0] request_id, output [ID_WIDTH-1:0] response_id, output [ID_WIDTH-1:0] data_id, input data_eot, input response_eot, input m_axis_ready, output m_axis_valid, output [S_AXIS_DATA_WIDTH-1:0] m_axis_data, output m_axis_last, output fifo_ready, input fifo_valid, input [S_AXIS_DATA_WIDTH-1:0] fifo_data, input req_valid, output req_ready, input [BEATS_PER_BURST_WIDTH-1:0] req_last_burst_length, input req_xlast, output response_valid, input response_ready, output response_resp_eot, output [1:0] response_resp ); parameter ID_WIDTH = 3; parameter S_AXIS_DATA_WIDTH = 64; parameter BEATS_PER_BURST_WIDTH = 4; reg req_xlast_d = 1'b0; assign sync_id_ret = sync_id; wire data_enabled; wire _fifo_ready; wire m_axis_last_s; // We are not allowed to just de-assert valid, but if the streaming target does // not accept any samples anymore we'd lock up the DMA core. So retain the last // beat when disabled until it is accepted. But if in the meantime the DMA core // is re-enabled and new data becomes available overwrite the old. always @(posedge s_axis_aclk) begin if(req_ready == 1'b1) begin req_xlast_d <= req_xlast; end end assign m_axis_last = (req_xlast_d == 1'b1) ? m_axis_last_s : 1'b0; dmac_data_mover # ( .ID_WIDTH(ID_WIDTH), .DATA_WIDTH(S_AXIS_DATA_WIDTH), .BEATS_PER_BURST_WIDTH(BEATS_PER_BURST_WIDTH), .DISABLE_WAIT_FOR_ID(0), .LAST(1) ) i_data_mover ( .clk(s_axis_aclk), .resetn(s_axis_aresetn), .enable(enable), .enabled(data_enabled), .sync_id(sync_id), .xfer_req(xfer_req), .request_id(request_id), .response_id(data_id), .eot(data_eot), .req_valid(req_valid), .req_ready(req_ready), .req_last_burst_length(req_last_burst_length), .m_axi_ready(m_axis_ready), .m_axi_valid(m_axis_valid), .m_axi_data(m_axis_data), .m_axi_last(m_axis_last_s), .s_axi_ready(_fifo_ready), .s_axi_valid(fifo_valid), .s_axi_data(fifo_data) ); dmac_response_generator # ( .ID_WIDTH(ID_WIDTH) ) i_response_generator ( .clk(s_axis_aclk), .resetn(s_axis_aresetn), .enable(data_enabled), .enabled(enabled), .sync_id(sync_id), .request_id(data_id), .response_id(response_id), .eot(response_eot), .resp_valid(response_valid), .resp_ready(response_ready), .resp_eot(response_resp_eot), .resp_resp(response_resp) ); assign fifo_ready = _fifo_ready | ~enabled; endmodule bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_dmac/dest_fifo_inf.v000066400000000000000000000106601457144405000275330ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2013(c) Analog Devices, Inc. // Author: Lars-Peter Clausen // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** module dmac_dest_fifo_inf ( input clk, input resetn, input enable, output enabled, input sync_id, output sync_id_ret, input [ID_WIDTH-1:0] request_id, output [ID_WIDTH-1:0] response_id, output [ID_WIDTH-1:0] data_id, input data_eot, input response_eot, input en, output [DATA_WIDTH-1:0] dout, output valid, output underflow, output xfer_req, output fifo_ready, input fifo_valid, input [DATA_WIDTH-1:0] fifo_data, input req_valid, output req_ready, input [BEATS_PER_BURST_WIDTH-1:0] req_last_burst_length, output response_valid, input response_ready, output response_resp_eot, output [1:0] response_resp ); parameter ID_WIDTH = 3; parameter DATA_WIDTH = 64; parameter BEATS_PER_BURST_WIDTH = 4; assign sync_id_ret = sync_id; wire data_enabled; wire _fifo_ready; assign fifo_ready = _fifo_ready | ~enabled; reg en_d1; wire data_ready; wire data_valid; always @(posedge clk) begin if (resetn == 1'b0) begin en_d1 <= 1'b0; end else begin en_d1 <= en; end end assign underflow = en_d1 & (~data_valid | ~enable); assign data_ready = en_d1 & (data_valid | ~enable); assign valid = en_d1 & data_valid & enable; dmac_data_mover # ( .ID_WIDTH(ID_WIDTH), .DATA_WIDTH(DATA_WIDTH), .BEATS_PER_BURST_WIDTH(BEATS_PER_BURST_WIDTH), .DISABLE_WAIT_FOR_ID(0) ) i_data_mover ( .clk(clk), .resetn(resetn), .enable(enable), .enabled(data_enabled), .sync_id(sync_id), .xfer_req(xfer_req), .request_id(request_id), .response_id(data_id), .eot(data_eot), .req_valid(req_valid), .req_ready(req_ready), .req_last_burst_length(req_last_burst_length), .s_axi_ready(_fifo_ready), .s_axi_valid(fifo_valid), .s_axi_data(fifo_data), .m_axi_ready(data_ready), .m_axi_valid(data_valid), .m_axi_data(dout), .m_axi_last() ); dmac_response_generator # ( .ID_WIDTH(ID_WIDTH) ) i_response_generator ( .clk(clk), .resetn(resetn), .enable(data_enabled), .enabled(enabled), .sync_id(sync_id), .request_id(data_id), .response_id(response_id), .eot(response_eot), .resp_valid(response_valid), .resp_ready(response_ready), .resp_eot(response_resp_eot), .resp_resp(response_resp) ); endmodule bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_dmac/inc_id.h000066400000000000000000000055111457144405000261430ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2013(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** function [ID_WIDTH-1:0] g2b; input [ID_WIDTH-1:0] g; reg [ID_WIDTH-1:0] b; integer i; begin b[ID_WIDTH-1] = g[ID_WIDTH-1]; for (i = ID_WIDTH - 2; i >= 0; i = i - 1) b[i] = b[i + 1] ^ g[i]; g2b = b; end endfunction function [ID_WIDTH-1:0] b2g; input [ID_WIDTH-1:0] b; reg [ID_WIDTH-1:0] g; integer i; begin g[ID_WIDTH-1] = b[ID_WIDTH-1]; for (i = ID_WIDTH - 2; i >= 0; i = i -1) g[i] = b[i + 1] ^ b[i]; b2g = g; end endfunction function [ID_WIDTH:0] inc_id; input [ID_WIDTH:0] id; begin inc_id = b2g(g2b(id) + 1); end endfunction bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_dmac/request_arb.v000066400000000000000000000711371457144405000272570ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2013(c) Analog Devices, Inc. // Author: Lars-Peter Clausen // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** module dmac_request_arb ( input req_aclk, input req_aresetn, input req_valid, output req_ready, input [31:BYTES_PER_BEAT_WIDTH_DEST] req_dest_address, input [31:BYTES_PER_BEAT_WIDTH_SRC] req_src_address, input [DMA_LENGTH_WIDTH-1:0] req_length, input req_xlast, input req_sync_transfer_start, output reg eot, input enable, input pause, // Master AXI interface input m_dest_axi_aclk, input m_dest_axi_aresetn, input m_src_axi_aclk, input m_src_axi_aresetn, // Write address output [31:0] m_axi_awaddr, output [ 7:0] m_axi_awlen, output [ 2:0] m_axi_awsize, output [ 1:0] m_axi_awburst, output [ 2:0] m_axi_awprot, output [ 3:0] m_axi_awcache, output m_axi_awvalid, input m_axi_awready, // Write data output [DMA_DATA_WIDTH_DEST-1:0] m_axi_wdata, output [(DMA_DATA_WIDTH_DEST/8)-1:0] m_axi_wstrb, input m_axi_wready, output m_axi_wvalid, output m_axi_wlast, // Write response input m_axi_bvalid, input [ 1:0] m_axi_bresp, output m_axi_bready, // Read address input m_axi_arready, output m_axi_arvalid, output [31:0] m_axi_araddr, output [ 7:0] m_axi_arlen, output [ 2:0] m_axi_arsize, output [ 1:0] m_axi_arburst, output [ 2:0] m_axi_arprot, output [ 3:0] m_axi_arcache, // Read data and response input [DMA_DATA_WIDTH_SRC-1:0] m_axi_rdata, output m_axi_rready, input m_axi_rvalid, input [ 1:0] m_axi_rresp, // Slave streaming AXI interface input s_axis_aclk, output s_axis_ready, input s_axis_valid, input [DMA_DATA_WIDTH_SRC-1:0] s_axis_data, input [0:0] s_axis_user, output s_axis_xfer_req, // Master streaming AXI interface input m_axis_aclk, input m_axis_ready, output m_axis_valid, output [DMA_DATA_WIDTH_DEST-1:0] m_axis_data, output m_axis_last, output m_axis_xfer_req, // Input FIFO interface input fifo_wr_clk, input fifo_wr_en, input [DMA_DATA_WIDTH_SRC-1:0] fifo_wr_din, output fifo_wr_overflow, input fifo_wr_sync, output fifo_wr_xfer_req, // Input FIFO interface input fifo_rd_clk, input fifo_rd_en, output fifo_rd_valid, output [DMA_DATA_WIDTH_DEST-1:0] fifo_rd_dout, output fifo_rd_underflow, output fifo_rd_xfer_req, output [ID_WIDTH-1:0] dbg_dest_request_id, output [ID_WIDTH-1:0] dbg_dest_address_id, output [ID_WIDTH-1:0] dbg_dest_data_id, output [ID_WIDTH-1:0] dbg_dest_response_id, output [ID_WIDTH-1:0] dbg_src_request_id, output [ID_WIDTH-1:0] dbg_src_address_id, output [ID_WIDTH-1:0] dbg_src_data_id, output [ID_WIDTH-1:0] dbg_src_response_id, output [7:0] dbg_status ); parameter DMA_DATA_WIDTH_SRC = 64; parameter DMA_DATA_WIDTH_DEST = 64; parameter DMA_LENGTH_WIDTH = 24; parameter BYTES_PER_BEAT_WIDTH_DEST = $clog2(DMA_DATA_WIDTH_DEST/8); parameter BYTES_PER_BEAT_WIDTH_SRC = $clog2(DMA_DATA_WIDTH_SRC/8); parameter DMA_TYPE_DEST = DMA_TYPE_MM_AXI; parameter DMA_TYPE_SRC = DMA_TYPE_FIFO; parameter ASYNC_CLK_REQ_SRC = 1; parameter ASYNC_CLK_SRC_DEST = 1; parameter ASYNC_CLK_DEST_REQ = 1; parameter AXI_SLICE_DEST = 0; parameter AXI_SLICE_SRC = 0; parameter MAX_BYTES_PER_BURST = 128; parameter FIFO_SIZE = 4; parameter ID_WIDTH = $clog2(FIFO_SIZE*2); localparam DMA_TYPE_MM_AXI = 0; localparam DMA_TYPE_STREAM_AXI = 1; localparam DMA_TYPE_FIFO = 2; localparam DMA_ADDRESS_WIDTH_DEST = 32 - BYTES_PER_BEAT_WIDTH_DEST; localparam DMA_ADDRESS_WIDTH_SRC = 32 - BYTES_PER_BEAT_WIDTH_SRC; localparam DMA_DATA_WIDTH = DMA_DATA_WIDTH_SRC < DMA_DATA_WIDTH_DEST ? DMA_DATA_WIDTH_DEST : DMA_DATA_WIDTH_SRC; // Bytes per burst is the same for both dest and src, but bytes per beat may // differ, so beats per burst may also differ parameter BYTES_PER_BURST_WIDTH = $clog2(MAX_BYTES_PER_BURST); localparam BEATS_PER_BURST_WIDTH_SRC = BYTES_PER_BURST_WIDTH - BYTES_PER_BEAT_WIDTH_SRC; localparam BEATS_PER_BURST_WIDTH_DEST = BYTES_PER_BURST_WIDTH - BYTES_PER_BEAT_WIDTH_DEST; localparam BURSTS_PER_TRANSFER_WIDTH = DMA_LENGTH_WIDTH - BYTES_PER_BURST_WIDTH; reg [0:2**ID_WIDTH-1] eot_mem; wire request_eot; wire [ID_WIDTH-1:0] request_id; wire [ID_WIDTH-1:0] response_id; wire enabled_src; wire enabled_dest; wire sync_id; wire sync_id_ret_dest; wire sync_id_ret_src; wire dest_enable; wire dest_enabled; wire dest_pause; wire dest_sync_id; wire dest_sync_id_ret; wire src_enable; wire src_enabled; wire src_pause; wire src_sync_id; wire src_sync_id_ret; wire req_dest_valid; wire req_dest_ready; wire req_dest_empty; wire req_src_valid; wire req_src_ready; wire req_src_empty; wire dest_clk; wire dest_resetn; wire dest_req_valid; wire dest_req_ready; wire [DMA_ADDRESS_WIDTH_DEST-1:0] dest_req_address; wire [BEATS_PER_BURST_WIDTH_DEST-1:0] dest_req_last_burst_length; wire [BYTES_PER_BEAT_WIDTH_DEST-1:0] dest_req_last_beat_bytes; wire dest_req_xlast; wire dest_response_valid; wire dest_response_ready; wire dest_response_empty; wire [1:0] dest_response_resp; wire dest_response_resp_eot; wire [ID_WIDTH-1:0] dest_request_id; wire [ID_WIDTH-1:0] dest_response_id; wire dest_valid; wire dest_ready; wire [DMA_DATA_WIDTH_DEST-1:0] dest_data; wire dest_fifo_repacked_valid; wire dest_fifo_repacked_ready; wire [DMA_DATA_WIDTH_DEST-1:0] dest_fifo_repacked_data; wire dest_fifo_valid; wire dest_fifo_ready; wire [DMA_DATA_WIDTH-1:0] dest_fifo_data; wire src_clk; wire src_resetn; wire src_req_valid; wire src_req_ready; wire [DMA_ADDRESS_WIDTH_SRC-1:0] src_req_address; wire [BEATS_PER_BURST_WIDTH_SRC-1:0] src_req_last_burst_length; wire src_req_sync_transfer_start; wire src_response_valid; wire src_response_ready; wire src_response_empty; wire [1:0] src_response_resp; wire [ID_WIDTH-1:0] src_request_id; wire [ID_WIDTH-1:0] src_response_id; wire src_valid; wire src_ready; wire [DMA_DATA_WIDTH_SRC-1:0] src_data; wire src_fifo_valid; wire src_fifo_ready; wire [DMA_DATA_WIDTH_SRC-1:0] src_fifo_data; wire src_fifo_repacked_valid; wire src_fifo_repacked_ready; wire [DMA_DATA_WIDTH-1:0] src_fifo_repacked_data; wire src_fifo_empty; wire fifo_empty; wire response_dest_valid; wire response_dest_ready = 1'b1; wire [1:0] response_dest_resp; wire response_dest_resp_eot; /* Unused for now wire response_src_valid; wire response_src_ready = 1'b1; wire [1:0] response_src_resp; */ assign dbg_dest_request_id = dest_request_id; assign dbg_dest_response_id = dest_response_id; assign dbg_src_request_id = src_request_id; assign dbg_src_response_id = src_response_id; assign sync_id = ~enabled_dest && ~enabled_src && request_id != response_id; reg enabled; reg do_enable; // Enable src and dest if we are in sync always @(posedge req_aclk) begin if (req_aresetn == 1'b0) begin do_enable <= 1'b0; end else begin if (enable) begin // First make sure we are fully disabled if (~sync_id_ret_dest && ~sync_id_ret_src && response_id == request_id && ~enabled_dest && ~enabled_src && req_dest_empty && req_src_empty && fifo_empty) do_enable <= 1'b1; end else begin do_enable <= 1'b0; end end end // Flag enabled once both src and dest are enabled always @(posedge req_aclk) begin if (req_aresetn == 1'b0) begin enabled <= 1'b0; end else begin if (do_enable == 1'b0) enabled <= 1'b0; else if (enabled_dest && enabled_src) enabled <= 1'b1; end end assign dbg_status = {do_enable, enabled, enabled_dest, enabled_src, fifo_empty, sync_id, sync_id_ret_dest, sync_id_ret_src}; always @(posedge req_aclk) begin eot_mem[request_id] <= request_eot; end always @(posedge req_aclk) begin if (req_aresetn == 1'b0) begin eot <= 1'b0; end else begin eot <= response_dest_valid & response_dest_ready & response_dest_resp_eot; end end generate if (ASYNC_CLK_REQ_SRC) begin wire src_async_resetn_source; if (DMA_TYPE_SRC == DMA_TYPE_MM_AXI) begin assign src_async_resetn_source = m_src_axi_aresetn; end else begin assign src_async_resetn_source = req_aresetn; end reg [2:0] src_reset_shift = 3'b111; assign src_resetn = ~src_reset_shift[2]; always @(negedge src_async_resetn_source or posedge src_clk) begin if (src_async_resetn_source == 1'b0) src_reset_shift <= 3'b111; else src_reset_shift <= {src_reset_shift[1:0], 1'b0}; end end else begin assign src_resetn = req_aresetn; end endgenerate generate if (ASYNC_CLK_DEST_REQ) begin wire dest_async_resetn_source; if (DMA_TYPE_DEST == DMA_TYPE_MM_AXI) begin assign dest_async_resetn_source = m_dest_axi_aresetn; end else begin assign dest_async_resetn_source = req_aresetn; end reg [2:0] dest_reset_shift = 3'b111; assign dest_resetn = ~dest_reset_shift[2]; always @(negedge dest_async_resetn_source or posedge dest_clk) begin if (dest_async_resetn_source == 1'b0) dest_reset_shift <= 3'b111; else dest_reset_shift <= {dest_reset_shift[1:0], 1'b0}; end end else begin assign dest_resetn = req_aresetn; end endgenerate generate if (DMA_TYPE_DEST == DMA_TYPE_MM_AXI) begin assign dest_clk = m_dest_axi_aclk; wire [ID_WIDTH-1:0] dest_data_id; wire [ID_WIDTH-1:0] dest_address_id; wire dest_address_eot = eot_mem[dest_address_id]; wire dest_data_eot = eot_mem[dest_data_id]; wire dest_response_eot = eot_mem[dest_response_id]; assign dbg_dest_address_id = dest_address_id; assign dbg_dest_data_id = dest_data_id; dmac_dest_mm_axi #( .ID_WIDTH(ID_WIDTH), .DMA_DATA_WIDTH(DMA_DATA_WIDTH_DEST), .BEATS_PER_BURST_WIDTH(BEATS_PER_BURST_WIDTH_DEST), .BYTES_PER_BEAT_WIDTH(BYTES_PER_BEAT_WIDTH_DEST) ) i_dest_dma_mm ( .m_axi_aclk(m_dest_axi_aclk), .m_axi_aresetn(dest_resetn), .enable(dest_enable), .enabled(dest_enabled), .pause(dest_pause), .req_valid(dest_req_valid), .req_ready(dest_req_ready), .req_address(dest_req_address), .req_last_burst_length(dest_req_last_burst_length), .req_last_beat_bytes(dest_req_last_beat_bytes), .response_valid(dest_response_valid), .response_ready(dest_response_ready), .response_resp(dest_response_resp), .response_resp_eot(dest_response_resp_eot), .request_id(dest_request_id), .response_id(dest_response_id), .sync_id(dest_sync_id), .sync_id_ret(dest_sync_id_ret), .data_id(dest_data_id), .address_id(dest_address_id), .address_eot(dest_address_eot), .data_eot(dest_data_eot), .response_eot(dest_response_eot), .fifo_valid(dest_valid), .fifo_ready(dest_ready), .fifo_data(dest_data), .m_axi_awready(m_axi_awready), .m_axi_awvalid(m_axi_awvalid), .m_axi_awaddr(m_axi_awaddr), .m_axi_awlen(m_axi_awlen), .m_axi_awsize(m_axi_awsize), .m_axi_awburst(m_axi_awburst), .m_axi_awprot(m_axi_awprot), .m_axi_awcache(m_axi_awcache), .m_axi_wready(m_axi_wready), .m_axi_wvalid(m_axi_wvalid), .m_axi_wdata(m_axi_wdata), .m_axi_wstrb(m_axi_wstrb), .m_axi_wlast(m_axi_wlast), .m_axi_bvalid(m_axi_bvalid), .m_axi_bresp(m_axi_bresp), .m_axi_bready(m_axi_bready) ); end else begin assign m_axi_awvalid = 1'b0; assign m_axi_awaddr = 'h00; assign m_axi_awlen = 'h00; assign m_axi_awsize = 'h00; assign m_axi_awburst = 'h00; assign m_axi_awprot = 'h00; assign m_axi_awcache = 'h00; assign m_axi_wvalid = 1'b0; assign m_axi_wdata = 'h00; assign m_axi_wstrb = 'h00; assign m_axi_wlast = 1'b0; assign m_axi_bready = 1'b0; end if (DMA_TYPE_DEST == DMA_TYPE_STREAM_AXI) begin assign dest_clk = m_axis_aclk; wire [ID_WIDTH-1:0] data_id; wire data_eot = eot_mem[data_id]; wire response_eot = eot_mem[dest_response_id]; assign dbg_dest_address_id = 'h00; assign dbg_dest_data_id = data_id; dmac_dest_axi_stream #( .ID_WIDTH(ID_WIDTH), .S_AXIS_DATA_WIDTH(DMA_DATA_WIDTH_DEST), .BEATS_PER_BURST_WIDTH(BEATS_PER_BURST_WIDTH_DEST) ) i_dest_dma_stream ( .s_axis_aclk(m_axis_aclk), .s_axis_aresetn(dest_resetn), .enable(dest_enable), .enabled(dest_enabled), .req_valid(dest_req_valid), .req_ready(dest_req_ready), .req_last_burst_length(dest_req_last_burst_length), .req_xlast(dest_req_xlast), .response_valid(dest_response_valid), .response_ready(dest_response_ready), .response_resp(dest_response_resp), .response_resp_eot(dest_response_resp_eot), .request_id(dest_request_id), .response_id(dest_response_id), .data_id(data_id), .sync_id(dest_sync_id), .sync_id_ret(dest_sync_id_ret), .xfer_req(m_axis_xfer_req), .data_eot(data_eot), .response_eot(response_eot), .fifo_valid(dest_valid), .fifo_ready(dest_ready), .fifo_data(dest_data), .m_axis_valid(m_axis_valid), .m_axis_ready(m_axis_ready), .m_axis_data(m_axis_data), .m_axis_last(m_axis_last) ); end else begin assign m_axis_valid = 1'b0; assign m_axis_last = 1'b0; assign m_axis_xfer_req = 1'b0; assign m_axis_data = 'h00; end if (DMA_TYPE_DEST == DMA_TYPE_FIFO) begin assign dest_clk = fifo_rd_clk; wire [ID_WIDTH-1:0] data_id; wire data_eot = eot_mem[data_id]; wire response_eot = eot_mem[dest_response_id]; assign dbg_dest_address_id = 'h00; assign dbg_dest_data_id = data_id; dmac_dest_fifo_inf #( .ID_WIDTH(ID_WIDTH), .DATA_WIDTH(DMA_DATA_WIDTH_DEST), .BEATS_PER_BURST_WIDTH(BEATS_PER_BURST_WIDTH_DEST) ) i_dest_dma_fifo ( .clk(fifo_rd_clk), .resetn(dest_resetn), .enable(dest_enable), .enabled(dest_enabled), .req_valid(dest_req_valid), .req_ready(dest_req_ready), .req_last_burst_length(dest_req_last_burst_length), .response_valid(dest_response_valid), .response_ready(dest_response_ready), .response_resp(dest_response_resp), .response_resp_eot(dest_response_resp_eot), .request_id(dest_request_id), .response_id(dest_response_id), .data_id(data_id), .sync_id(dest_sync_id), .sync_id_ret(dest_sync_id_ret), .data_eot(data_eot), .response_eot(response_eot), .fifo_valid(dest_valid), .fifo_ready(dest_ready), .fifo_data(dest_data), .en(fifo_rd_en), .valid(fifo_rd_valid), .dout(fifo_rd_dout), .underflow(fifo_rd_underflow), .xfer_req(fifo_rd_xfer_req) ); end else begin assign fifo_rd_valid = 1'b0; assign fifo_rd_dout = 'h0; assign fifo_rd_underflow = 1'b0; assign fifo_rd_xfer_req = 1'b0; end endgenerate generate if (DMA_TYPE_SRC == DMA_TYPE_MM_AXI) begin assign src_clk = m_src_axi_aclk; wire [ID_WIDTH-1:0] src_data_id; wire [ID_WIDTH-1:0] src_address_id; wire src_address_eot = eot_mem[src_address_id]; wire src_data_eot = eot_mem[src_data_id]; assign dbg_src_address_id = src_address_id; assign dbg_src_data_id = src_data_id; dmac_src_mm_axi #( .ID_WIDTH(ID_WIDTH), .DMA_DATA_WIDTH(DMA_DATA_WIDTH_SRC), .BEATS_PER_BURST_WIDTH(BEATS_PER_BURST_WIDTH_SRC), .BYTES_PER_BEAT_WIDTH(BYTES_PER_BEAT_WIDTH_SRC) ) i_src_dma_mm ( .m_axi_aclk(m_src_axi_aclk), .m_axi_aresetn(src_resetn), .pause(src_pause), .enable(src_enable), .enabled(src_enabled), .sync_id(src_sync_id), .sync_id_ret(src_sync_id_ret), .req_valid(src_req_valid), .req_ready(src_req_ready), .req_address(src_req_address), .req_last_burst_length(src_req_last_burst_length), .response_valid(src_response_valid), .response_ready(src_response_ready), .response_resp(src_response_resp), .request_id(src_request_id), .response_id(src_response_id), .address_id(src_address_id), .data_id(src_data_id), .address_eot(src_address_eot), .data_eot(src_data_eot), .fifo_valid(src_valid), .fifo_ready(src_ready), .fifo_data(src_data), .m_axi_arready(m_axi_arready), .m_axi_arvalid(m_axi_arvalid), .m_axi_araddr(m_axi_araddr), .m_axi_arlen(m_axi_arlen), .m_axi_arsize(m_axi_arsize), .m_axi_arburst(m_axi_arburst), .m_axi_arprot(m_axi_arprot), .m_axi_arcache(m_axi_arcache), .m_axi_rready(m_axi_rready), .m_axi_rvalid(m_axi_rvalid), .m_axi_rdata(m_axi_rdata), .m_axi_rresp(m_axi_rresp) ); end else begin assign m_axi_arvalid = 1'b0; assign m_axi_araddr = 'h00; assign m_axi_arlen = 'h00; assign m_axi_arsize = 'h00; assign m_axi_arburst = 'h00; assign m_axi_arcache = 'h00; assign m_axi_arprot = 'h00; assign m_axi_rready = 1'b0; end if (DMA_TYPE_SRC == DMA_TYPE_STREAM_AXI) begin assign src_clk = s_axis_aclk; wire src_eot = eot_mem[src_response_id]; assign dbg_src_address_id = 'h00; assign dbg_src_data_id = 'h00; /* TODO */ assign src_response_valid = 1'b0; assign src_response_resp = 2'b0; dmac_src_axi_stream #( .ID_WIDTH(ID_WIDTH), .S_AXIS_DATA_WIDTH(DMA_DATA_WIDTH_SRC), .BEATS_PER_BURST_WIDTH(BEATS_PER_BURST_WIDTH_SRC) ) i_src_dma_stream ( .s_axis_aclk(s_axis_aclk), .s_axis_aresetn(src_resetn), .enable(src_enable), .enabled(src_enabled), .sync_id(src_sync_id), .sync_id_ret(src_sync_id_ret), .req_valid(src_req_valid), .req_ready(src_req_ready), .req_last_burst_length(src_req_last_burst_length), .req_sync_transfer_start(src_req_sync_transfer_start), .request_id(src_request_id), .response_id(src_response_id), .eot(src_eot), .fifo_valid(src_valid), .fifo_ready(src_ready), .fifo_data(src_data), .s_axis_valid(s_axis_valid), .s_axis_ready(s_axis_ready), .s_axis_data(s_axis_data), .s_axis_user(s_axis_user), .s_axis_xfer_req(s_axis_xfer_req) ); end else begin assign s_axis_ready = 1'b0; assign s_axis_xfer_req = 1'b0; end if (DMA_TYPE_SRC == DMA_TYPE_FIFO) begin assign src_clk = fifo_wr_clk; wire src_eot = eot_mem[src_response_id]; assign dbg_src_address_id = 'h00; assign dbg_src_data_id = 'h00; /* TODO */ assign src_response_valid = 1'b0; assign src_response_resp = 2'b0; dmac_src_fifo_inf #( .ID_WIDTH(ID_WIDTH), .DATA_WIDTH(DMA_DATA_WIDTH_SRC), .BEATS_PER_BURST_WIDTH(BEATS_PER_BURST_WIDTH_SRC) ) i_src_dma_fifo ( .clk(fifo_wr_clk), .resetn(src_resetn), .enable(src_enable), .enabled(src_enabled), .sync_id(src_sync_id), .sync_id_ret(src_sync_id_ret), .req_valid(src_req_valid), .req_ready(src_req_ready), .req_last_burst_length(src_req_last_burst_length), .req_sync_transfer_start(src_req_sync_transfer_start), .request_id(src_request_id), .response_id(src_response_id), .eot(src_eot), .fifo_valid(src_valid), .fifo_ready(src_ready), .fifo_data(src_data), .en(fifo_wr_en), .din(fifo_wr_din), .overflow(fifo_wr_overflow), .sync(fifo_wr_sync), .xfer_req(fifo_wr_xfer_req) ); end else begin assign fifo_wr_overflow = 1'b0; assign fifo_wr_xfer_req = 1'b0; end endgenerate sync_bits #( .NUM_OF_BITS(ID_WIDTH), .ASYNC_CLK(ASYNC_CLK_REQ_SRC) ) i_sync_src_request_id ( .out_clk(src_clk), .out_resetn(src_resetn), .in(request_id), .out(src_request_id) ); sync_bits #( .NUM_OF_BITS(ID_WIDTH), .ASYNC_CLK(ASYNC_CLK_SRC_DEST) ) i_sync_dest_request_id ( .out_clk(dest_clk), .out_resetn(dest_resetn), .in(src_response_id), .out(dest_request_id) ); sync_bits #( .NUM_OF_BITS(ID_WIDTH), .ASYNC_CLK(ASYNC_CLK_DEST_REQ) ) i_sync_req_response_id ( .out_clk(req_aclk), .out_resetn(req_aresetn), .in(dest_response_id), .out(response_id) ); axi_register_slice #( .DATA_WIDTH(DMA_DATA_WIDTH_SRC), .FORWARD_REGISTERED(AXI_SLICE_SRC), .BACKWARD_REGISTERED(AXI_SLICE_SRC) ) i_src_slice ( .clk(src_clk), .resetn(src_resetn), .s_axi_valid(src_valid), .s_axi_ready(src_ready), .s_axi_data(src_data), .m_axi_valid(src_fifo_valid), .m_axi_ready(src_fifo_ready), .m_axi_data(src_fifo_data) ); util_axis_resize #( .SLAVE_DATA_WIDTH(DMA_DATA_WIDTH_SRC), .MASTER_DATA_WIDTH(DMA_DATA_WIDTH) ) i_src_repack ( .clk(src_clk), .resetn(src_resetn & src_enable), .s_valid(src_fifo_valid), .s_ready(src_fifo_ready), .s_data(src_fifo_data), .m_valid(src_fifo_repacked_valid), .m_ready(src_fifo_repacked_ready), .m_data(src_fifo_repacked_data) ); util_axis_fifo #( .DATA_WIDTH(DMA_DATA_WIDTH), .ADDRESS_WIDTH($clog2(MAX_BYTES_PER_BURST / (DMA_DATA_WIDTH / 8) * FIFO_SIZE)), .ASYNC_CLK(ASYNC_CLK_SRC_DEST) ) i_fifo ( .s_axis_aclk(src_clk), .s_axis_aresetn(src_resetn), .s_axis_valid(src_fifo_repacked_valid), .s_axis_ready(src_fifo_repacked_ready), .s_axis_data(src_fifo_repacked_data), .s_axis_empty(src_fifo_empty), .s_axis_room(), .m_axis_aclk(dest_clk), .m_axis_aresetn(dest_resetn), .m_axis_valid(dest_fifo_valid), .m_axis_ready(dest_fifo_ready), .m_axis_data(dest_fifo_data), .m_axis_level() ); util_axis_resize #( .SLAVE_DATA_WIDTH(DMA_DATA_WIDTH), .MASTER_DATA_WIDTH(DMA_DATA_WIDTH_DEST) ) i_dest_repack ( .clk(dest_clk), .resetn(dest_resetn & dest_enable), .s_valid(dest_fifo_valid), .s_ready(dest_fifo_ready), .s_data(dest_fifo_data), .m_valid(dest_fifo_repacked_valid), .m_ready(dest_fifo_repacked_ready), .m_data(dest_fifo_repacked_data) ); wire _dest_valid; wire _dest_ready; wire [DMA_DATA_WIDTH_DEST-1:0] _dest_data; axi_register_slice #( .DATA_WIDTH(DMA_DATA_WIDTH_DEST), .FORWARD_REGISTERED(AXI_SLICE_DEST) ) i_dest_slice2 ( .clk(dest_clk), .resetn(dest_resetn), .s_axi_valid(dest_fifo_repacked_valid), .s_axi_ready(dest_fifo_repacked_ready), .s_axi_data(dest_fifo_repacked_data), .m_axi_valid(_dest_valid), .m_axi_ready(_dest_ready), .m_axi_data(_dest_data) ); axi_register_slice #( .DATA_WIDTH(DMA_DATA_WIDTH_DEST), .FORWARD_REGISTERED(AXI_SLICE_DEST), .BACKWARD_REGISTERED(AXI_SLICE_DEST) ) i_dest_slice ( .clk(dest_clk), .resetn(dest_resetn), .s_axi_valid(_dest_valid), .s_axi_ready(_dest_ready), .s_axi_data(_dest_data), .m_axi_valid(dest_valid), .m_axi_ready(dest_ready), .m_axi_data(dest_data) ); // We do not accept any requests until all components are enabled reg _req_valid = 1'b0; wire _req_ready; always @(posedge req_aclk) begin if (req_aresetn == 1'b0) begin _req_valid <= 1'b0; end else begin if (_req_valid == 1'b1 && _req_ready == 1'b1) begin _req_valid <= 1'b0; end else if (req_valid == 1'b1 && enabled == 1'b1) begin _req_valid <= 1'b1; end end end assign req_ready = _req_ready & _req_valid & enable; splitter #( .NUM_M(3) ) i_req_splitter ( .clk(req_aclk), .resetn(req_aresetn), .s_valid(_req_valid), .s_ready(_req_ready), .m_valid({ req_gen_valid, req_dest_valid, req_src_valid }), .m_ready({ req_gen_ready, req_dest_ready, req_src_ready }) ); util_axis_fifo #( .DATA_WIDTH(DMA_ADDRESS_WIDTH_DEST + BEATS_PER_BURST_WIDTH_DEST + BYTES_PER_BEAT_WIDTH_DEST + 1), .ADDRESS_WIDTH(0), .ASYNC_CLK(ASYNC_CLK_DEST_REQ) ) i_dest_req_fifo ( .s_axis_aclk(req_aclk), .s_axis_aresetn(req_aresetn), .s_axis_valid(req_dest_valid), .s_axis_ready(req_dest_ready), .s_axis_empty(req_dest_empty), .s_axis_data({ req_dest_address, req_length[BYTES_PER_BURST_WIDTH-1:BYTES_PER_BEAT_WIDTH_DEST], req_length[BYTES_PER_BEAT_WIDTH_DEST-1:0], req_xlast }), .s_axis_room(), .m_axis_aclk(dest_clk), .m_axis_aresetn(dest_resetn), .m_axis_valid(dest_req_valid), .m_axis_ready(dest_req_ready), .m_axis_data({ dest_req_address, dest_req_last_burst_length, dest_req_last_beat_bytes, dest_req_xlast }), .m_axis_level() ); util_axis_fifo #( .DATA_WIDTH(DMA_ADDRESS_WIDTH_SRC + BEATS_PER_BURST_WIDTH_SRC + 1), .ADDRESS_WIDTH(0), .ASYNC_CLK(ASYNC_CLK_REQ_SRC) ) i_src_req_fifo ( .s_axis_aclk(req_aclk), .s_axis_aresetn(req_aresetn), .s_axis_valid(req_src_valid), .s_axis_ready(req_src_ready), .s_axis_empty(req_src_empty), .s_axis_data({ req_src_address, req_length[BYTES_PER_BURST_WIDTH-1:BYTES_PER_BEAT_WIDTH_SRC], req_sync_transfer_start }), .s_axis_room(), .m_axis_aclk(src_clk), .m_axis_aresetn(src_resetn), .m_axis_valid(src_req_valid), .m_axis_ready(src_req_ready), .m_axis_data({ src_req_address, src_req_last_burst_length, src_req_sync_transfer_start }), .m_axis_level() ); util_axis_fifo #( .DATA_WIDTH(1), .ADDRESS_WIDTH(0), .ASYNC_CLK(ASYNC_CLK_DEST_REQ) ) i_dest_response_fifo ( .s_axis_aclk(dest_clk), .s_axis_aresetn(dest_resetn), .s_axis_valid(dest_response_valid), .s_axis_ready(dest_response_ready), .s_axis_empty(dest_response_empty), .s_axis_data(dest_response_resp_eot), .s_axis_room(), .m_axis_aclk(req_aclk), .m_axis_aresetn(req_aresetn), .m_axis_valid(response_dest_valid), .m_axis_ready(response_dest_ready), .m_axis_data(response_dest_resp_eot), .m_axis_level() ); /* Unused for now util_axis_fifo #( .DATA_WIDTH(2), .ADDRESS_WIDTH(0), .ASYNC_CLK(ASYNC_CLK_REQ_SRC) ) i_src_response_fifo ( .s_axis_aclk(src_clk), .s_axis_aresetn(src_resetn), .s_axis_valid(src_response_valid), .s_axis_ready(src_response_ready), .s_axis_empty(src_response_empty), .s_axis_data(src_response_resp), .m_axis_aclk(req_aclk), .m_axis_aresetn(req_aresetn), .m_axis_valid(response_src_valid), .m_axis_ready(response_src_ready), .m_axis_data(response_src_resp) );*/ assign src_response_empty = 1'b1; assign src_response_ready = 1'b1; dmac_request_generator #( .ID_WIDTH(ID_WIDTH), .BURSTS_PER_TRANSFER_WIDTH(BURSTS_PER_TRANSFER_WIDTH) ) i_req_gen ( .req_aclk(req_aclk), .req_aresetn(req_aresetn), .request_id(request_id), .response_id(response_id), .req_valid(req_gen_valid), .req_ready(req_gen_ready), .req_burst_count(req_length[DMA_LENGTH_WIDTH-1:BYTES_PER_BURST_WIDTH]), .enable(do_enable), .pause(pause), .eot(request_eot) ); sync_bits #( .NUM_OF_BITS(3), .ASYNC_CLK(ASYNC_CLK_DEST_REQ) ) i_sync_control_dest ( .out_clk(dest_clk), .out_resetn(dest_resetn), .in({do_enable, pause, sync_id}), .out({dest_enable, dest_pause, dest_sync_id}) ); sync_bits #( .NUM_OF_BITS(2), .ASYNC_CLK(ASYNC_CLK_DEST_REQ) ) i_sync_status_dest ( .out_clk(req_aclk), .out_resetn(req_aresetn), .in({dest_enabled | ~dest_response_empty, dest_sync_id_ret}), .out({enabled_dest, sync_id_ret_dest}) ); sync_bits #( .NUM_OF_BITS(3), .ASYNC_CLK(ASYNC_CLK_REQ_SRC) ) i_sync_control_src ( .out_clk(src_clk), .out_resetn(src_resetn), .in({do_enable, pause, sync_id}), .out({src_enable, src_pause, src_sync_id}) ); sync_bits #( .NUM_OF_BITS(3), .ASYNC_CLK(ASYNC_CLK_REQ_SRC) ) i_sync_status_src ( .out_clk(req_aclk), .out_resetn(req_aresetn), .in({src_enabled | ~src_response_empty, src_sync_id_ret, src_fifo_empty}), .out({enabled_src, sync_id_ret_src, fifo_empty}) ); endmodule bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_dmac/request_generator.v000066400000000000000000000072141457144405000304740ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2013(c) Analog Devices, Inc. // Author: Lars-Peter Clausen // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** module dmac_request_generator ( input req_aclk, input req_aresetn, output [ID_WIDTH-1:0] request_id, input [ID_WIDTH-1:0] response_id, input req_valid, output reg req_ready, input [BURSTS_PER_TRANSFER_WIDTH-1:0] req_burst_count, input enable, input pause, output eot ); parameter ID_WIDTH = 3; parameter BURSTS_PER_TRANSFER_WIDTH = 17; `include "inc_id.h" /* * Here we only need to count the number of bursts, which means we can ignore * the lower bits of the byte count. The last last burst may not contain the * maximum number of bytes, but the address_generator and data_mover will take * care that only the requested ammount of bytes is transfered. */ reg [BURSTS_PER_TRANSFER_WIDTH-1:0] burst_count = 'h00; reg [ID_WIDTH-1:0] id; wire [ID_WIDTH-1:0] id_next = inc_id(id); assign eot = burst_count == 'h00; assign request_id = id; always @(posedge req_aclk) begin if (req_aresetn == 1'b0) begin burst_count <= 'h00; id <= 'h0; req_ready <= 1'b1; end else if (enable == 1'b0) begin req_ready <= 1'b1; end else begin if (req_ready) begin if (req_valid && enable) begin burst_count <= req_burst_count; req_ready <= 1'b0; end end else if (response_id != id_next && ~pause) begin if (eot) req_ready <= 1'b1; burst_count <= burst_count - 1'b1; id <= id_next; end end end endmodule bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_dmac/resp.h000066400000000000000000000001761457144405000256710ustar00rootroot00000000000000localparam RESP_OKAY = 2'b00; localparam RESP_EXOKAY = 2'b01; localparam RESP_SLVERR = 2'b10; localparam RESP_DECERR = 2'b11; bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_dmac/response_generator.v000066400000000000000000000064151457144405000306440ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2013(c) Analog Devices, Inc. // Author: Lars-Peter Clausen // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** module dmac_response_generator ( input clk, input resetn, input enable, output reg enabled, input [ID_WIDTH-1:0] request_id, output reg [ID_WIDTH-1:0] response_id, input sync_id, input eot, output resp_valid, input resp_ready, output resp_eot, output [1:0] resp_resp ); parameter ID_WIDTH = 3; `include "inc_id.h" `include "resp.h" assign resp_resp = RESP_OKAY; assign resp_eot = eot; assign resp_valid = request_id != response_id && enabled; // We have to wait for all responses before we can disable the response handler always @(posedge clk) begin if (resetn == 1'b0) begin enabled <= 1'b0; end else begin if (enable) enabled <= 1'b1; else if (request_id == response_id) enabled <= 1'b0; end end always @(posedge clk) begin if (resetn == 1'b0) begin response_id <= 'h0; end else begin if ((resp_valid && resp_ready) || (sync_id && response_id != request_id)) response_id <= inc_id(response_id); end end endmodule bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_dmac/response_handler.v000066400000000000000000000065001457144405000302660ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2013(c) Analog Devices, Inc. // Author: Lars-Peter Clausen // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** module dmac_response_handler ( input clk, input resetn, input bvalid, output bready, input [1:0] bresp, output reg [ID_WIDTH-1:0] id, input [ID_WIDTH-1:0] request_id, input sync_id, input enable, output reg enabled, input eot, output resp_valid, input resp_ready, output resp_eot, output [1:0] resp_resp ); parameter ID_WIDTH = 3; `include "resp.h" `include "inc_id.h" assign resp_resp = bresp; assign resp_eot = eot; wire active = id != request_id && enabled; assign bready = active && resp_ready; assign resp_valid = active && bvalid; // We have to wait for all responses before we can disable the response handler always @(posedge clk) begin if (resetn == 1'b0) begin enabled <= 1'b0; end else begin if (enable) enabled <= 1'b1; else if (request_id == id) enabled <= 1'b0; end end always @(posedge clk) begin if (resetn == 1'b0) begin id <= 'h0; end else begin if ((bready && bvalid) || (sync_id && id != request_id)) id <= inc_id(id); end end endmodule bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_dmac/splitter.v000066400000000000000000000054021457144405000266010ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2013(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** module splitter ( input clk, input resetn, input s_valid, output s_ready, output [NUM_M-1:0] m_valid, input [NUM_M-1:0] m_ready ); parameter NUM_M = 2; reg [NUM_M-1:0] acked; assign s_ready = &(m_ready | acked); assign m_valid = s_valid ? ~acked : {NUM_M{1'b0}}; always @(posedge clk) begin if (resetn == 1'b0) begin acked <= {NUM_M{1'b0}}; end else begin if (s_valid & s_ready) acked <= {NUM_M{1'b0}}; else acked <= acked | (m_ready & m_valid); end end endmodule bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_dmac/src_axi_mm.v000066400000000000000000000140741457144405000270610ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2013(c) Analog Devices, Inc. // Author: Lars-Peter Clausen // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** module dmac_src_mm_axi ( input m_axi_aclk, input m_axi_aresetn, input req_valid, output req_ready, input [31:BYTES_PER_BEAT_WIDTH] req_address, input [BEATS_PER_BURST_WIDTH-1:0] req_last_burst_length, input enable, output enabled, input pause, input sync_id, output sync_id_ret, output response_valid, input response_ready, output [1:0] response_resp, input [ID_WIDTH-1:0] request_id, output [ID_WIDTH-1:0] response_id, output [ID_WIDTH-1:0] data_id, output [ID_WIDTH-1:0] address_id, input data_eot, input address_eot, output fifo_valid, input fifo_ready, output [DMA_DATA_WIDTH-1:0] fifo_data, // Read address input m_axi_arready, output m_axi_arvalid, output [31:0] m_axi_araddr, output [ 7:0] m_axi_arlen, output [ 2:0] m_axi_arsize, output [ 1:0] m_axi_arburst, output [ 2:0] m_axi_arprot, output [ 3:0] m_axi_arcache, // Read data and response input [DMA_DATA_WIDTH-1:0] m_axi_rdata, output m_axi_rready, input m_axi_rvalid, input [ 1:0] m_axi_rresp ); parameter ID_WIDTH = 3; parameter DMA_DATA_WIDTH = 64; parameter BYTES_PER_BEAT_WIDTH = 3; parameter BEATS_PER_BURST_WIDTH = 4; `include "resp.h" wire address_enabled; wire address_req_valid; wire address_req_ready; wire data_req_valid; wire data_req_ready; assign sync_id_ret = sync_id; assign response_id = data_id; assign response_valid = 1'b0; assign response_resp = RESP_OKAY; splitter #( .NUM_M(2) ) i_req_splitter ( .clk(m_axi_aclk), .resetn(m_axi_aresetn), .s_valid(req_valid), .s_ready(req_ready), .m_valid({ address_req_valid, data_req_valid }), .m_ready({ address_req_ready, data_req_ready }) ); dmac_address_generator #( .ID_WIDTH(ID_WIDTH), .BEATS_PER_BURST_WIDTH(BEATS_PER_BURST_WIDTH), .BYTES_PER_BEAT_WIDTH(BYTES_PER_BEAT_WIDTH), .DMA_DATA_WIDTH(DMA_DATA_WIDTH) ) i_addr_gen ( .clk(m_axi_aclk), .resetn(m_axi_aresetn), .enable(enable), .enabled(address_enabled), .pause(pause), .sync_id(sync_id), .request_id(request_id), .id(address_id), .req_valid(address_req_valid), .req_ready(address_req_ready), .req_address(req_address), .req_last_burst_length(req_last_burst_length), .eot(address_eot), .addr_ready(m_axi_arready), .addr_valid(m_axi_arvalid), .addr(m_axi_araddr), .len(m_axi_arlen), .size(m_axi_arsize), .burst(m_axi_arburst), .prot(m_axi_arprot), .cache(m_axi_arcache) ); dmac_data_mover # ( .ID_WIDTH(ID_WIDTH), .DATA_WIDTH(DMA_DATA_WIDTH), .BEATS_PER_BURST_WIDTH(BEATS_PER_BURST_WIDTH) ) i_data_mover ( .clk(m_axi_aclk), .resetn(m_axi_aresetn), .enable(address_enabled), .enabled(enabled), .sync_id(sync_id), .xfer_req(), .request_id(address_id), .response_id(data_id), .eot(data_eot), .req_valid(data_req_valid), .req_ready(data_req_ready), .req_last_burst_length(req_last_burst_length), .s_axi_valid(m_axi_rvalid), .s_axi_ready(m_axi_rready), .s_axi_data(m_axi_rdata), .m_axi_valid(fifo_valid), .m_axi_ready(fifo_ready), .m_axi_data(fifo_data), .m_axi_last() ); reg [1:0] rresp; always @(posedge m_axi_aclk) begin if (m_axi_rvalid && m_axi_rready) begin if (m_axi_rresp != 2'b0) rresp <= m_axi_rresp; end end endmodule bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_dmac/src_axi_stream.v000066400000000000000000000101041457144405000277310ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2013(c) Analog Devices, Inc. // Author: Lars-Peter Clausen // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** module dmac_src_axi_stream ( input s_axis_aclk, input s_axis_aresetn, input enable, output enabled, input sync_id, output sync_id_ret, input [ID_WIDTH-1:0] request_id, output [ID_WIDTH-1:0] response_id, input eot, output s_axis_ready, input s_axis_valid, input [S_AXIS_DATA_WIDTH-1:0] s_axis_data, input [0:0] s_axis_user, output s_axis_xfer_req, input fifo_ready, output fifo_valid, output [S_AXIS_DATA_WIDTH-1:0] fifo_data, input req_valid, output req_ready, input [BEATS_PER_BURST_WIDTH-1:0] req_last_burst_length, input req_sync_transfer_start ); parameter ID_WIDTH = 3; parameter S_AXIS_DATA_WIDTH = 64; parameter LENGTH_WIDTH = 24; parameter BEATS_PER_BURST_WIDTH = 4; reg needs_sync = 1'b0; wire sync = s_axis_user[0]; wire has_sync = ~needs_sync | sync; wire sync_valid = s_axis_valid & has_sync; assign sync_id_ret = sync_id; always @(posedge s_axis_aclk) begin if (s_axis_aresetn == 1'b0) begin needs_sync <= 1'b0; end else begin if (s_axis_valid && s_axis_ready && sync) begin needs_sync <= 1'b0; end else if (req_valid && req_ready) begin needs_sync <= req_sync_transfer_start; end end end dmac_data_mover # ( .ID_WIDTH(ID_WIDTH), .DATA_WIDTH(S_AXIS_DATA_WIDTH), .DISABLE_WAIT_FOR_ID(0), .BEATS_PER_BURST_WIDTH(BEATS_PER_BURST_WIDTH) ) i_data_mover ( .clk(s_axis_aclk), .resetn(s_axis_aresetn), .enable(enable), .enabled(enabled), .sync_id(sync_id), .xfer_req(s_axis_xfer_req), .request_id(request_id), .response_id(response_id), .eot(eot), .req_valid(req_valid), .req_ready(req_ready), .req_last_burst_length(req_last_burst_length), .s_axi_ready(s_axis_ready), .s_axi_valid(sync_valid), .s_axi_data(s_axis_data), .m_axi_ready(fifo_ready), .m_axi_valid(fifo_valid), .m_axi_data(fifo_data) ); endmodule bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/axi_dmac/src_fifo_inf.v000066400000000000000000000101131457144405000273540ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2013(c) Analog Devices, Inc. // Author: Lars-Peter Clausen // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** module dmac_src_fifo_inf ( input clk, input resetn, input enable, output enabled, input sync_id, output sync_id_ret, input [ID_WIDTH-1:0] request_id, output [ID_WIDTH-1:0] response_id, input eot, input en, input [DATA_WIDTH-1:0] din, output reg overflow, input sync, output xfer_req, input fifo_ready, output fifo_valid, output [DATA_WIDTH-1:0] fifo_data, input req_valid, output req_ready, input [BEATS_PER_BURST_WIDTH-1:0] req_last_burst_length, input req_sync_transfer_start ); parameter ID_WIDTH = 3; parameter DATA_WIDTH = 64; parameter BEATS_PER_BURST_WIDTH = 4; wire ready; reg needs_sync = 1'b0; wire has_sync = ~needs_sync | sync; wire sync_valid = en & ready & has_sync; always @(posedge clk) begin if (resetn == 1'b0) begin needs_sync <= 1'b0; end else begin if (ready && en && sync) begin needs_sync <= 1'b0; end else if (req_valid && req_ready) begin needs_sync <= req_sync_transfer_start; end end end always @(posedge clk) begin if (resetn == 1'b0) begin overflow <= 1'b0; end else begin if (enable) begin overflow <= en & ~ready; end else begin overflow <= en; end end end assign sync_id_ret = sync_id; dmac_data_mover # ( .ID_WIDTH(ID_WIDTH), .DATA_WIDTH(DATA_WIDTH), .DISABLE_WAIT_FOR_ID(0), .BEATS_PER_BURST_WIDTH(BEATS_PER_BURST_WIDTH) ) i_data_mover ( .clk(clk), .resetn(resetn), .enable(enable), .enabled(enabled), .sync_id(sync_id), .xfer_req(xfer_req), .request_id(request_id), .response_id(response_id), .eot(eot), .req_valid(req_valid), .req_ready(req_ready), .req_last_burst_length(req_last_burst_length), .s_axi_ready(ready), .s_axi_valid(sync_valid), .s_axi_data(din), .m_axi_ready(fifo_ready), .m_axi_valid(fifo_valid), .m_axi_data(fifo_data), .m_axi_last() ); endmodule bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/000077500000000000000000000000001457144405000242665ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_addsub.v000066400000000000000000000104071457144405000263650ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2015(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** // A simple adder/substracter width preconfigured input ports width and turn-around value // Output = A - B_constant or A + B_constant // Constraints: Awidth >= Bwidth `timescale 1ns/1ps module ad_addsub ( clk, A, Amax, out, CE ); // parameters parameter A_DATA_WIDTH = 32; parameter B_DATA_VALUE = 32'h1; parameter ADD_OR_SUB_N = 0; localparam ADDER = 1; localparam SUBSTRACTER = 0; // I/O definitions input clk; input [(A_DATA_WIDTH-1):0] A; input [(A_DATA_WIDTH-1):0] Amax; output [(A_DATA_WIDTH-1):0] out; input CE; // registers reg [(A_DATA_WIDTH-1):0] out = 'b0; reg [A_DATA_WIDTH:0] out_d = 'b0; reg [A_DATA_WIDTH:0] out_d2 = 'b0; reg [(A_DATA_WIDTH-1):0] A_d = 'b0; reg [(A_DATA_WIDTH-1):0] Amax_d = 'b0; reg [(A_DATA_WIDTH-1):0] Amax_d2 = 'b0; // constant regs reg [(A_DATA_WIDTH-1):0] B_reg = B_DATA_VALUE[(A_DATA_WIDTH-1):0]; // latch the inputs always @(posedge clk) begin A_d <= A; Amax_d <= Amax; Amax_d2 <= Amax_d; end // ADDER/SUBSTRACTER always @(posedge clk) begin if ( ADD_OR_SUB_N == ADDER ) begin out_d <= A_d + B_reg; end else begin out_d <= A_d - B_reg; end end // Resolve always @(posedge clk) begin if ( ADD_OR_SUB_N == ADDER ) begin if ( out_d > Amax_d2 ) begin out_d2 <= out_d - Amax_d2; end else begin out_d2 <= out_d; end end else begin // SUBSTRACTER if ( out_d[A_DATA_WIDTH] == 1'b1 ) begin out_d2 <= Amax_d2 + out_d; end else begin out_d2 <= out_d; end end end // output logic always @(posedge clk) begin if ( CE ) begin out <= out_d2[(A_DATA_WIDTH-1):0]; end else begin out <= 'b0; end end endmodule bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_axi_ip_constr.sdc000066400000000000000000000027431457144405000302740ustar00rootroot00000000000000 set_false_path -from [get_registers *up_xfer_cntrl:i_xfer_cntrl|d_xfer_toggle*] -to [get_registers *up_xfer_cntrl:i_xfer_cntrl|up_xfer_state_m1*] set_false_path -from [get_registers *up_xfer_cntrl:i_xfer_cntrl|up_xfer_toggle*] -to [get_registers *up_xfer_cntrl:i_xfer_cntrl|d_xfer_toggle_m1*] set_false_path -from [get_registers *up_xfer_cntrl:i_xfer_cntrl|up_xfer_data*] -to [get_registers *up_xfer_cntrl:i_xfer_cntrl|d_data_cntrl*] set_false_path -from [get_registers *up_xfer_status:i_xfer_status|up_xfer_toggle*] -to [get_registers *up_xfer_status:i_xfer_status|d_xfer_state_m1*] set_false_path -from [get_registers *up_xfer_status:i_xfer_status|d_xfer_toggle*] -to [get_registers *up_xfer_status:i_xfer_status|up_xfer_toggle_m1*] set_false_path -from [get_registers *up_xfer_status:i_xfer_status|d_xfer_data*] -to [get_registers *up_xfer_status:i_xfer_status|up_data_status*] set_false_path -from [get_registers *up_clock_mon:i_clock_mon|d_count_toggle*] -to [get_registers *up_clock_mon:i_clock_mon|up_count_toggle_m1*] set_false_path -from [get_registers *up_clock_mon:i_clock_mon|d_count_hold*] -to [get_registers *up_clock_mon:i_clock_mon|up_d_count*] set_false_path -from [get_registers *up_clock_mon:i_clock_mon|up_count_toggle*] -to [get_registers *up_clock_mon:i_clock_mon|d_count_toggle_m1*] set_false_path -from [get_registers *up_core_preset*] -to [get_registers *ad_rst:i_core_rst_reg|ad_rst_sync_m1*] bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_axi_ip_constr.xdc000066400000000000000000000044421457144405000302770ustar00rootroot00000000000000 set_property shreg_extract no [get_cells -hier -filter {name =~ *up_xfer_state*}] set_property shreg_extract no [get_cells -hier -filter {name =~ *d_xfer_toggle*}] set_property shreg_extract no [get_cells -hier -filter {name =~ *d_xfer_state*}] set_property shreg_extract no [get_cells -hier -filter {name =~ *up_xfer_toggle*}] set_property shreg_extract no [get_cells -hier -filter {name =~ *up_count_toggle*}] set_property shreg_extract no [get_cells -hier -filter {name =~ *d_count_toggle*}] set_property shreg_extract no [get_cells -hier -filter {name =~ *ad_rst_sync*}] set_false_path -from [get_cells -hier -filter {name =~ *d_xfer_toggle_reg && IS_SEQUENTIAL}] -to [get_cells -hier -filter {name =~ *up_xfer_state_m1_reg && IS_SEQUENTIAL}] set_false_path -from [get_cells -hier -filter {name =~ *up_xfer_toggle_reg && IS_SEQUENTIAL}] -to [get_cells -hier -filter {name =~ *d_xfer_toggle_m1_reg && IS_SEQUENTIAL}] set_false_path -from [get_cells -hier -filter {name =~ *up_xfer_data* && IS_SEQUENTIAL}] -to [get_cells -hier -filter {name =~ *d_data_cntrl* && IS_SEQUENTIAL}] set_false_path -from [get_cells -hier -filter {name =~ *up_xfer_toggle_reg && IS_SEQUENTIAL}] -to [get_cells -hier -filter {name =~ *d_xfer_state_m1_reg && IS_SEQUENTIAL}] set_false_path -from [get_cells -hier -filter {name =~ *d_xfer_toggle_reg && IS_SEQUENTIAL}] -to [get_cells -hier -filter {name =~ *up_xfer_toggle_m1_reg && IS_SEQUENTIAL}] set_false_path -from [get_cells -hier -filter {name =~ *d_xfer_data* && IS_SEQUENTIAL}] -to [get_cells -hier -filter {name =~ *up_data_status* && IS_SEQUENTIAL}] set_false_path -from [get_cells -hier -filter {name =~ *d_count_toggle_reg && IS_SEQUENTIAL}] -to [get_cells -hier -filter {name =~ *up_count_toggle_m1_reg && IS_SEQUENTIAL}] set_false_path -from [get_cells -hier -filter {name =~ *d_count_hold* && IS_SEQUENTIAL}] -to [get_cells -hier -filter {name =~ *up_d_count* && IS_SEQUENTIAL}] set_false_path -from [get_cells -hier -filter {name =~ *up_count_toggle_reg && IS_SEQUENTIAL}] -to [get_cells -hier -filter {name =~ *d_count_toggle_m1_reg && IS_SEQUENTIAL}] set_false_path -from [get_cells -hier -filter {name =~ *up_core_preset_reg && IS_SEQUENTIAL}] -to [get_cells -hier -filter {name =~ *ad_rst_sync_m1_reg && IS_SEQUENTIAL}] bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_axis_dma_rx.v000066400000000000000000000236631457144405000274310ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module ad_axis_dma_rx ( // dma interface dma_clk, dma_rst, dma_valid, dma_last, dma_data, dma_ready, dma_ovf, dma_unf, dma_status, dma_bw, // data interface adc_clk, adc_rst, adc_valid, adc_data, // processor interface dma_start, dma_stream, dma_count); // parameters parameter DATA_WIDTH = 64; localparam DW = DATA_WIDTH - 1; localparam BUF_THRESHOLD_LO = 6'd3; localparam BUF_THRESHOLD_HI = 6'd60; localparam DATA_WIDTH_IN_BYTES = DATA_WIDTH/8; // dma interface input dma_clk; input dma_rst; output dma_valid; output dma_last; output [DW:0] dma_data; input dma_ready; output dma_ovf; output dma_unf; output dma_status; output [31:0] dma_bw; // data interface input adc_clk; input adc_rst; input adc_valid; input [DW:0] adc_data; // processor interface input dma_start; input dma_stream; input [31:0] dma_count; // internal registers reg dma_valid_int = 'd0; reg dma_last_int = 'd0; reg [DW:0] dma_data_int = 'd0; reg dma_capture_enable = 'd0; reg [31:0] dma_capture_count = 'd0; reg dma_rd = 'd0; reg [ 5:0] dma_raddr = 'd0; reg dma_release_toggle_m1 = 'd0; reg dma_release_toggle_m2 = 'd0; reg dma_release_toggle_m3 = 'd0; reg [ 5:0] dma_release_waddr = 'd0; reg [ 5:0] dma_waddr_m1 = 'd0; reg [ 5:0] dma_waddr_m2 = 'd0; reg [ 5:0] dma_waddr = 'd0; reg [ 5:0] dma_addr_diff = 'd0; reg dma_almost_full = 'd0; reg dma_almost_empty = 'd0; reg dma_ovf = 'd0; reg dma_unf = 'd0; reg dma_resync = 'd0; reg adc_wr = 'd0; reg [ 5:0] adc_waddr = 'd0; reg [ 5:0] adc_waddr_g = 'd0; reg [ 3:0] adc_release_count = 'd0; reg [DW:0] adc_wdata = 'd0; reg adc_release_toggle = 'd0; reg [ 5:0] adc_release_waddr = 'd0; reg adc_resync_m1 = 'd0; reg adc_resync_m2 = 'd0; reg adc_resync = 'd0; // internal signals wire dma_rd_valid_s; wire dma_last_s; wire dma_ready_s; wire dma_rd_s; wire dma_release_s; wire [ 6:0] dma_addr_diff_s; wire dma_ovf_s; wire dma_unf_s; wire [DW:0] dma_rdata_s; // binary to grey conversion function [5:0] b2g; input [5:0] b; reg [5:0] g; begin g[5] = b[5]; g[4] = b[5] ^ b[4]; g[3] = b[4] ^ b[3]; g[2] = b[3] ^ b[2]; g[1] = b[2] ^ b[1]; g[0] = b[1] ^ b[0]; b2g = g; end endfunction // grey to binary conversion function [5:0] g2b; input [5:0] g; reg [5:0] b; begin b[5] = g[5]; b[4] = b[5] ^ g[4]; b[3] = b[4] ^ g[3]; b[2] = b[3] ^ g[2]; b[1] = b[2] ^ g[1]; b[0] = b[1] ^ g[0]; g2b = b; end endfunction // dma read- user interface assign dma_bw = DATA_WIDTH_IN_BYTES; assign dma_status = dma_capture_enable; always @(posedge dma_clk) begin dma_valid_int <= dma_rd_valid_s; dma_last_int <= dma_last_s; dma_data_int <= dma_rdata_s; end // dma read- capture control signals assign dma_rd_valid_s = dma_capture_enable & dma_rd; assign dma_last_s = (dma_capture_count == dma_count) ? dma_rd_valid_s : 1'b0; always @(posedge dma_clk) begin if ((dma_stream == 1'b0) && (dma_last_s == 1'b1)) begin dma_capture_enable <= 1'b0; end else if (dma_start == 1'b1) begin dma_capture_enable <= 1'b1; end if ((dma_capture_enable == 1'b0) || (dma_last_s == 1'b1)) begin dma_capture_count <= dma_bw; end else if (dma_rd == 1'b1) begin dma_capture_count <= dma_capture_count + dma_bw; end end // dma read- read data always and pass it to the external memory assign dma_ready_s = (~dma_capture_enable) | dma_ready; assign dma_rd_s = (dma_release_waddr == dma_raddr) ? 1'b0 : dma_ready_s; always @(posedge dma_clk) begin dma_rd <= dma_rd_s; if ((dma_resync == 1'b1) || (dma_rst == 1'b1)) begin dma_raddr <= 6'd0; end else if (dma_rd_s == 1'b1) begin dma_raddr <= dma_raddr + 1'b1; end end // dma read- get bursts of adc data from the other side assign dma_release_s = dma_release_toggle_m3 ^ dma_release_toggle_m2; always @(posedge dma_clk) begin if (dma_rst == 1'b1) begin dma_release_toggle_m1 <= 'd0; dma_release_toggle_m2 <= 'd0; dma_release_toggle_m3 <= 'd0; end else begin dma_release_toggle_m1 <= adc_release_toggle; dma_release_toggle_m2 <= dma_release_toggle_m1; dma_release_toggle_m3 <= dma_release_toggle_m2; end if (dma_resync == 1'b1) begin dma_release_waddr <= 6'd0; end else if (dma_release_s == 1'b1) begin dma_release_waddr <= adc_release_waddr; end end // dma read- get free running write address for ovf/unf checking assign dma_addr_diff_s = {1'b1, dma_waddr} - dma_raddr; assign dma_ovf_s = (dma_addr_diff < BUF_THRESHOLD_LO) ? dma_almost_full : 1'b0; assign dma_unf_s = (dma_addr_diff > BUF_THRESHOLD_HI) ? dma_almost_empty : 1'b0; always @(posedge dma_clk) begin if (dma_rst == 1'b1) begin dma_waddr_m1 <= 'd0; dma_waddr_m2 <= 'd0; end else begin dma_waddr_m1 <= adc_waddr_g; dma_waddr_m2 <= dma_waddr_m1; end dma_waddr <= g2b(dma_waddr_m2); dma_addr_diff <= dma_addr_diff_s[5:0]; if (dma_addr_diff > BUF_THRESHOLD_HI) begin dma_almost_full <= 1'b1; end else begin dma_almost_full <= 1'b0; end if (dma_addr_diff < BUF_THRESHOLD_LO) begin dma_almost_empty <= 1'b1; end else begin dma_almost_empty <= 1'b0; end dma_ovf <= dma_ovf_s; dma_unf <= dma_unf_s; dma_resync <= dma_ovf | dma_unf; end // adc write- used here to simply transfer data to the dma side // address is released with a free running counter always @(posedge adc_clk) begin adc_wr <= adc_valid; if ((adc_resync == 1'b1) || (adc_rst == 1'b1)) begin adc_waddr <= 6'd0; end else if (adc_wr == 1'b1) begin adc_waddr <= adc_waddr + 1'b1; end adc_waddr_g <= b2g(adc_waddr); adc_wdata <= adc_data; adc_release_count <= adc_release_count + 1'b1; if (adc_release_count == 4'hf) begin adc_release_toggle <= ~adc_release_toggle; adc_release_waddr <= adc_waddr; end if (adc_rst == 1'b1) begin adc_resync_m1 <= 'd0; adc_resync_m2 <= 'd0; end else begin adc_resync_m1 <= dma_resync; adc_resync_m2 <= adc_resync_m1; end adc_resync <= adc_resync_m2; end // interface handler for ready ad_axis_inf_rx #(.DATA_WIDTH(DATA_WIDTH)) i_axis_inf ( .clk (dma_clk), .rst (dma_rst), .valid (dma_valid_int), .last (dma_last_int), .data (dma_data_int), .inf_valid (dma_valid), .inf_last (dma_last), .inf_data (dma_data), .inf_ready (dma_ready)); // buffer (mainly for clock domain transfer) ad_mem #(.DATA_WIDTH(DATA_WIDTH), .ADDRESS_WIDTH(6)) i_mem ( .clka (adc_clk), .wea (adc_wr), .addra (adc_waddr), .dina (adc_wdata), .clkb (dma_clk), .addrb (dma_raddr), .doutb (dma_rdata_s)); endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_axis_dma_tx.v000066400000000000000000000201661457144405000274260ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** // dac vdma read module ad_axis_dma_tx ( // vdma interface dma_clk, dma_rst, dma_fs, dma_valid, dma_data, dma_ready, dma_ovf, dma_unf, // dac interface dac_clk, dac_rst, dac_rd, dac_valid, dac_data, // processor interface dma_frmcnt); // parameters parameter DATA_WIDTH = 64; localparam DW = DATA_WIDTH - 1; localparam BUF_THRESHOLD_LO = 6'd3; localparam BUF_THRESHOLD_HI = 6'd60; localparam RDY_THRESHOLD_LO = 6'd40; localparam RDY_THRESHOLD_HI = 6'd50; // vdma interface input dma_clk; input dma_rst; output dma_fs; input dma_valid; input [DW:0] dma_data; output dma_ready; output dma_ovf; output dma_unf; // dac interface input dac_clk; input dac_rst; input dac_rd; output dac_valid; output [DW:0] dac_data; // processor interface input [31:0] dma_frmcnt; // internal registers reg dac_start_m1 = 'd0; reg dac_start = 'd0; reg dac_resync_m1 = 'd0; reg dac_resync = 'd0; reg [ 5:0] dac_raddr = 'd0; reg [ 5:0] dac_raddr_g = 'd0; reg dac_rd_d = 'd0; reg dac_rd_2d = 'd0; reg dac_valid = 'd0; reg [DW:0] dac_data = 'd0; reg [31:0] dma_clkcnt = 'd0; reg dma_fs = 'd0; reg [ 5:0] dma_raddr_g_m1 = 'd0; reg [ 5:0] dma_raddr_g_m2 = 'd0; reg [ 5:0] dma_raddr = 'd0; reg [ 5:0] dma_addr_diff = 'd0; reg dma_ready = 'd0; reg dma_almost_full = 'd0; reg dma_almost_empty = 'd0; reg dma_ovf = 'd0; reg dma_unf = 'd0; reg dma_resync = 'd0; reg dma_start = 'd0; reg dma_wr = 'd0; reg [ 5:0] dma_waddr = 'd0; reg [DW:0] dma_wdata = 'd0; // internal signals wire dma_wr_s; wire [ 6:0] dma_addr_diff_s; wire dma_ovf_s; wire dma_unf_s; wire [DW:0] dac_rdata_s; // binary to grey coversion function [7:0] b2g; input [7:0] b; reg [7:0] g; begin g[7] = b[7]; g[6] = b[7] ^ b[6]; g[5] = b[6] ^ b[5]; g[4] = b[5] ^ b[4]; g[3] = b[4] ^ b[3]; g[2] = b[3] ^ b[2]; g[1] = b[2] ^ b[1]; g[0] = b[1] ^ b[0]; b2g = g; end endfunction // grey to binary conversion function [7:0] g2b; input [7:0] g; reg [7:0] b; begin b[7] = g[7]; b[6] = b[7] ^ g[6]; b[5] = b[6] ^ g[5]; b[4] = b[5] ^ g[4]; b[3] = b[4] ^ g[3]; b[2] = b[3] ^ g[2]; b[1] = b[2] ^ g[1]; b[0] = b[1] ^ g[0]; g2b = b; end endfunction // dac read interface always @(posedge dac_clk) begin if (dac_rst == 1'b1) begin dac_start_m1 <= 'd0; dac_start <= 'd0; dac_resync_m1 <= 'd0; dac_resync <= 'd0; end else begin dac_start_m1 <= dma_start; dac_start <= dac_start_m1; dac_resync_m1 <= dma_resync; dac_resync <= dac_resync_m1; end if ((dac_start == 1'b0) || (dac_resync == 1'b1) || (dac_rst == 1'b1)) begin dac_raddr <= 6'd0; end else if (dac_rd == 1'b1) begin dac_raddr <= dac_raddr + 1'b1; end dac_raddr_g <= b2g(dac_raddr); dac_rd_d <= dac_rd; dac_rd_2d <= dac_rd_d; dac_valid <= dac_rd_2d; dac_data <= dac_rdata_s; end // generate fsync always @(posedge dma_clk) begin if ((dma_resync == 1'b1) || (dma_rst == 1'b1) || (dma_clkcnt >= dma_frmcnt)) begin dma_clkcnt <= 16'd0; end else begin dma_clkcnt <= dma_clkcnt + 1'b1; end if (dma_clkcnt == 32'd1) begin dma_fs <= 1'b1; end else begin dma_fs <= 1'b0; end end // overflow or underflow status assign dma_addr_diff_s = {1'b1, dma_waddr} - dma_raddr; assign dma_ovf_s = (dma_addr_diff < BUF_THRESHOLD_LO) ? dma_almost_full : 1'b0; assign dma_unf_s = (dma_addr_diff > BUF_THRESHOLD_HI) ? dma_almost_empty : 1'b0; always @(posedge dma_clk) begin if (dma_rst == 1'b1) begin dma_raddr_g_m1 <= 'd0; dma_raddr_g_m2 <= 'd0; end else begin dma_raddr_g_m1 <= dac_raddr_g; dma_raddr_g_m2 <= dma_raddr_g_m1; end dma_raddr <= g2b(dma_raddr_g_m2); dma_addr_diff <= dma_addr_diff_s[5:0]; if (dma_addr_diff >= RDY_THRESHOLD_HI) begin dma_ready <= 1'b0; end else if (dma_addr_diff <= RDY_THRESHOLD_LO) begin dma_ready <= 1'b1; end if (dma_addr_diff > BUF_THRESHOLD_HI) begin dma_almost_full <= 1'b1; end else begin dma_almost_full <= 1'b0; end if (dma_addr_diff < BUF_THRESHOLD_LO) begin dma_almost_empty <= 1'b1; end else begin dma_almost_empty <= 1'b0; end dma_ovf <= dma_ovf_s; dma_unf <= dma_unf_s; dma_resync <= dma_ovf | dma_unf; end // vdma write assign dma_wr_s = dma_valid & dma_ready; always @(posedge dma_clk) begin if (dma_rst == 1'b1) begin dma_start <= 1'b0; end else if (dma_wr_s == 1'b1) begin dma_start <= 1'b1; end dma_wr <= dma_wr_s; if ((dma_resync == 1'b1) || (dma_rst == 1'b1)) begin dma_waddr <= 6'd0; end else if (dma_wr == 1'b1) begin dma_waddr <= dma_waddr + 1'b1; end dma_wdata <= dma_data; end // memory ad_mem #(.DATA_WIDTH(DATA_WIDTH), .ADDRESS_WIDTH(6)) i_mem ( .clka (dma_clk), .wea (dma_wr), .addra (dma_waddr), .dina (dma_wdata), .clkb (dac_clk), .addrb (dac_raddr), .doutb (dac_rdata_s)); endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_axis_inf_rx.v000066400000000000000000000151041457144405000274330ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // Xilinx ip cores are not fifo friendly and require a hard stop on the interface // valid & data can not change, if ready is deasserted (if they do you will have to // roll it back). // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module ad_axis_inf_rx ( // adi interface clk, rst, valid, last, data, // xilinx interface inf_valid, inf_last, inf_data, inf_ready); // parameter for data width parameter DATA_WIDTH = 16; localparam DW = DATA_WIDTH - 1; // adi interface input clk; input rst; input valid; input last; input [DW:0] data; // xil interface output inf_valid; output inf_last; output [DW:0] inf_data; input inf_ready; // internal registers reg [ 2:0] wcnt = 'd0; reg wlast_0 = 'd0; reg [DW:0] wdata_0 = 'd0; reg wlast_1 = 'd0; reg [DW:0] wdata_1 = 'd0; reg wlast_2 = 'd0; reg [DW:0] wdata_2 = 'd0; reg wlast_3 = 'd0; reg [DW:0] wdata_3 = 'd0; reg wlast_4 = 'd0; reg [DW:0] wdata_4 = 'd0; reg wlast_5 = 'd0; reg [DW:0] wdata_5 = 'd0; reg wlast_6 = 'd0; reg [DW:0] wdata_6 = 'd0; reg wlast_7 = 'd0; reg [DW:0] wdata_7 = 'd0; reg [ 2:0] rcnt = 'd0; reg inf_valid = 'd0; reg inf_last = 'd0; reg [DW:0] inf_data = 'd0; // internal signals wire inf_ready_s; reg inf_last_s; reg [DW:0] inf_data_s; // write interface always @(posedge clk) begin if (rst == 1'b1) begin wcnt <= 'd0; end else if (valid == 1'b1) begin wcnt <= wcnt + 1'b1; end if ((wcnt == 3'd0) && (valid == 1'b1)) begin wlast_0 <= last; wdata_0 <= data; end if ((wcnt == 3'd1) && (valid == 1'b1)) begin wlast_1 <= last; wdata_1 <= data; end if ((wcnt == 3'd2) && (valid == 1'b1)) begin wlast_2 <= last; wdata_2 <= data; end if ((wcnt == 3'd3) && (valid == 1'b1)) begin wlast_3 <= last; wdata_3 <= data; end if ((wcnt == 3'd4) && (valid == 1'b1)) begin wlast_4 <= last; wdata_4 <= data; end if ((wcnt == 3'd5) && (valid == 1'b1)) begin wlast_5 <= last; wdata_5 <= data; end if ((wcnt == 3'd6) && (valid == 1'b1)) begin wlast_6 <= last; wdata_6 <= data; end if ((wcnt == 3'd7) && (valid == 1'b1)) begin wlast_7 <= last; wdata_7 <= data; end end // read interface assign inf_ready_s = inf_ready | ~inf_valid; always @(rcnt or wlast_0 or wdata_0 or wlast_1 or wdata_1 or wlast_2 or wdata_2 or wlast_3 or wdata_3 or wlast_4 or wdata_4 or wlast_5 or wdata_5 or wlast_6 or wdata_6 or wlast_7 or wdata_7) begin case (rcnt) 3'd0: begin inf_last_s = wlast_0; inf_data_s = wdata_0; end 3'd1: begin inf_last_s = wlast_1; inf_data_s = wdata_1; end 3'd2: begin inf_last_s = wlast_2; inf_data_s = wdata_2; end 3'd3: begin inf_last_s = wlast_3; inf_data_s = wdata_3; end 3'd4: begin inf_last_s = wlast_4; inf_data_s = wdata_4; end 3'd5: begin inf_last_s = wlast_5; inf_data_s = wdata_5; end 3'd6: begin inf_last_s = wlast_6; inf_data_s = wdata_6; end default: begin inf_last_s = wlast_7; inf_data_s = wdata_7; end endcase end always @(posedge clk) begin if (rst == 1'b1) begin rcnt <= 'd0; inf_valid <= 'd0; inf_last <= 'b0; inf_data <= 'd0; end else if (inf_ready_s == 1'b1) begin if (rcnt == wcnt) begin rcnt <= rcnt; inf_valid <= 1'd0; inf_last <= 1'b0; inf_data <= 'd0; end else begin rcnt <= rcnt + 1'b1; inf_valid <= 1'b1; inf_last <= inf_last_s; inf_data <= inf_data_s; end end end endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_csc_1.v000066400000000000000000000102241457144405000261100ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** // csc = c1*d[23:16] + c2*d[15:8] + c3*d[7:0] + c4; module ad_csc_1 ( // data clk, sync, data, // constants C1, C2, C3, C4, // sync is delay matched csc_sync_1, csc_data_1); // parameters parameter DELAY_DATA_WIDTH = 16; localparam DW = DELAY_DATA_WIDTH - 1; // data input clk; input [DW:0] sync; input [23:0] data; // constants input [16:0] C1; input [16:0] C2; input [16:0] C3; input [24:0] C4; // sync is delay matched output [DW:0] csc_sync_1; output [ 7:0] csc_data_1; // internal wires wire [24:0] data_1_m_s; wire [24:0] data_2_m_s; wire [24:0] data_3_m_s; wire [DW:0] sync_3_m_s; // c1*R ad_csc_1_mul #(.DELAY_DATA_WIDTH(1)) i_mul_c1 ( .clk (clk), .data_a (C1), .data_b (data[23:16]), .data_p (data_1_m_s), .ddata_in (1'd0), .ddata_out ()); // c2*G ad_csc_1_mul #(.DELAY_DATA_WIDTH(1)) i_mul_c2 ( .clk (clk), .data_a (C2), .data_b (data[15:8]), .data_p (data_2_m_s), .ddata_in (1'd0), .ddata_out ()); // c3*B ad_csc_1_mul #(.DELAY_DATA_WIDTH(DELAY_DATA_WIDTH)) i_mul_c3 ( .clk (clk), .data_a (C3), .data_b (data[7:0]), .data_p (data_3_m_s), .ddata_in (sync), .ddata_out (sync_3_m_s)); // sum + c4 ad_csc_1_add #(.DELAY_DATA_WIDTH(DELAY_DATA_WIDTH)) i_add_c4 ( .clk (clk), .data_1 (data_1_m_s), .data_2 (data_2_m_s), .data_3 (data_3_m_s), .data_4 (C4), .data_p (csc_data_1), .ddata_in (sync_3_m_s), .ddata_out (csc_sync_1)); endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_csc_1_add.v000066400000000000000000000133471457144405000267310ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** // Color Space Conversion, adder. This is a simple adder, but had to be // pipe-lined for faster clock rates. The delay input is delay-matched to // the sum pipe-line stages `timescale 1ps/1ps module ad_csc_1_add ( // all signed clk, data_1, data_2, data_3, data_4, data_p, // delay match ddata_in, ddata_out); // parameters parameter DELAY_DATA_WIDTH = 16; localparam DW = DELAY_DATA_WIDTH - 1; // all signed input clk; input [24:0] data_1; input [24:0] data_2; input [24:0] data_3; input [24:0] data_4; output [ 7:0] data_p; // delay match input [DW:0] ddata_in; output [DW:0] ddata_out; // internal registers reg [DW:0] p1_ddata = 'd0; reg [24:0] p1_data_1 = 'd0; reg [24:0] p1_data_2 = 'd0; reg [24:0] p1_data_3 = 'd0; reg [24:0] p1_data_4 = 'd0; reg [DW:0] p2_ddata = 'd0; reg [24:0] p2_data_0 = 'd0; reg [24:0] p2_data_1 = 'd0; reg [DW:0] p3_ddata = 'd0; reg [24:0] p3_data = 'd0; reg [DW:0] ddata_out = 'd0; reg [ 7:0] data_p = 'd0; // internal signals wire [24:0] p1_data_1_p_s; wire [24:0] p1_data_1_n_s; wire [24:0] p1_data_1_s; wire [24:0] p1_data_2_p_s; wire [24:0] p1_data_2_n_s; wire [24:0] p1_data_2_s; wire [24:0] p1_data_3_p_s; wire [24:0] p1_data_3_n_s; wire [24:0] p1_data_3_s; wire [24:0] p1_data_4_p_s; wire [24:0] p1_data_4_n_s; wire [24:0] p1_data_4_s; // pipe line stage 1, get the two's complement versions assign p1_data_1_p_s = {1'b0, data_1[23:0]}; assign p1_data_1_n_s = ~p1_data_1_p_s + 1'b1; assign p1_data_1_s = (data_1[24] == 1'b1) ? p1_data_1_n_s : p1_data_1_p_s; assign p1_data_2_p_s = {1'b0, data_2[23:0]}; assign p1_data_2_n_s = ~p1_data_2_p_s + 1'b1; assign p1_data_2_s = (data_2[24] == 1'b1) ? p1_data_2_n_s : p1_data_2_p_s; assign p1_data_3_p_s = {1'b0, data_3[23:0]}; assign p1_data_3_n_s = ~p1_data_3_p_s + 1'b1; assign p1_data_3_s = (data_3[24] == 1'b1) ? p1_data_3_n_s : p1_data_3_p_s; assign p1_data_4_p_s = {1'b0, data_4[23:0]}; assign p1_data_4_n_s = ~p1_data_4_p_s + 1'b1; assign p1_data_4_s = (data_4[24] == 1'b1) ? p1_data_4_n_s : p1_data_4_p_s; always @(posedge clk) begin p1_ddata <= ddata_in; p1_data_1 <= p1_data_1_s; p1_data_2 <= p1_data_2_s; p1_data_3 <= p1_data_3_s; p1_data_4 <= p1_data_4_s; end // pipe line stage 2, get the sum (intermediate, 4->2) always @(posedge clk) begin p2_ddata <= p1_ddata; p2_data_0 <= p1_data_1 + p1_data_2; p2_data_1 <= p1_data_3 + p1_data_4; end // pipe line stage 3, get the sum (final, 2->1) always @(posedge clk) begin p3_ddata <= p2_ddata; p3_data <= p2_data_0 + p2_data_1; end // output registers, output is unsigned (0 if sum is < 0) and saturated. // the inputs are expected to be 1.4.20 format (output is 8bits). always @(posedge clk) begin ddata_out <= p3_ddata; if (p3_data[24] == 1'b1) begin data_p <= 8'h00; end else if (p3_data[23:20] == 'd0) begin data_p <= p3_data[19:12]; end else begin data_p <= 8'hff; end end endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_csc_1_mul.v000066400000000000000000000076761457144405000270060ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** // Color Space Conversion, multiplier. This is a simple partial product adder // that generates the product of the two inputs. `timescale 1ps/1ps module ad_csc_1_mul ( // data_a is signed clk, data_a, data_b, data_p, // delay match ddata_in, ddata_out); // parameters parameter DELAY_DATA_WIDTH = 16; localparam DW = DELAY_DATA_WIDTH - 1; // data_a is signed input clk; input [16:0] data_a; input [ 7:0] data_b; output [24:0] data_p; // delay match input [DW:0] ddata_in; output [DW:0] ddata_out; // internal registers reg [DW:0] p1_ddata = 'd0; reg [DW:0] p2_ddata = 'd0; reg [DW:0] ddata_out = 'd0; reg p1_sign = 'd0; reg p2_sign = 'd0; reg sign_p = 'd0; // internal signals wire [25:0] data_p_s; // a/b reg, m-reg, p-reg delay match always @(posedge clk) begin p1_ddata <= ddata_in; p2_ddata <= p1_ddata; ddata_out <= p2_ddata; end always @(posedge clk) begin p1_sign <= data_a[16]; p2_sign <= p1_sign; sign_p <= p2_sign; end assign data_p = {sign_p, data_p_s[23:0]}; MULT_MACRO #( .LATENCY (3), .WIDTH_A (17), .WIDTH_B (9)) i_mult_macro ( .CE (1'b1), .RST (1'b0), .CLK (clk), .A ({1'b0, data_a[15:0]}), .B ({1'b0, data_b}), .P (data_p_s)); endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_csc_CrYCb2RGB.v000066400000000000000000000102161457144405000273300ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** // Transmit HDMI, CrYCb to RGB conversion // The multiplication coefficients are in 1.4.12 format // The addition coefficients are in 1.12.12 format // R = (+408.583/256)*Cr + (+298.082/256)*Y + ( 000.000/256)*Cb + (-222.921); // G = (-208.120/256)*Cr + (+298.082/256)*Y + (-100.291/256)*Cb + (+135.576); // B = ( 000.000/256)*Cr + (+298.082/256)*Y + (+516.412/256)*Cb + (-276.836); module ad_csc_CrYCb2RGB ( // Cr-Y-Cb inputs clk, CrYCb_sync, CrYCb_data, // R-G-B outputs RGB_sync, RGB_data); // parameters parameter DELAY_DATA_WIDTH = 16; localparam DW = DELAY_DATA_WIDTH - 1; // Cr-Y-Cb inputs input clk; input [DW:0] CrYCb_sync; input [23:0] CrYCb_data; // R-G-B outputs output [DW:0] RGB_sync; output [23:0] RGB_data; // red ad_csc_1 #(.DELAY_DATA_WIDTH(DELAY_DATA_WIDTH)) i_csc_1_R ( .clk (clk), .sync (CrYCb_sync), .data (CrYCb_data), .C1 (17'h01989), .C2 (17'h012a1), .C3 (17'h00000), .C4 (25'h10deebc), .csc_sync_1 (RGB_sync), .csc_data_1 (RGB_data[23:16])); // green ad_csc_1 #(.DELAY_DATA_WIDTH(1)) i_csc_1_G ( .clk (clk), .sync (1'd0), .data (CrYCb_data), .C1 (17'h10d01), .C2 (17'h012a1), .C3 (17'h10644), .C4 (25'h0087937), .csc_sync_1 (), .csc_data_1 (RGB_data[15:8])); // blue ad_csc_1 #(.DELAY_DATA_WIDTH(1)) i_csc_1_B ( .clk (clk), .sync (1'd0), .data (CrYCb_data), .C1 (17'h00000), .C2 (17'h012a1), .C3 (17'h02046), .C4 (25'h1114d60), .csc_sync_1 (), .csc_data_1 (RGB_data[7:0])); endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_csc_RGB2CrYCb.v000066400000000000000000000102271457144405000273320ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** // Transmit HDMI, RGB to CrYCb conversion // The multiplication coefficients are in 1.4.12 format // The addition coefficients are in 1.12.12 format // Cr = (+112.439/256)*R + (-094.154/256)*G + (-018.285/256)*B + 128; // Y = (+065.738/256)*R + (+129.057/256)*G + (+025.064/256)*B + 16; // Cb = (-037.945/256)*R + (-074.494/256)*G + (+112.439/256)*B + 128; module ad_csc_RGB2CrYCb ( // R-G-B inputs clk, RGB_sync, RGB_data, // Cr-Y-Cb outputs CrYCb_sync, CrYCb_data); // parameters parameter DELAY_DATA_WIDTH = 16; localparam DW = DELAY_DATA_WIDTH - 1; // R-G-B inputs input clk; input [DW:0] RGB_sync; input [23:0] RGB_data; // Cr-Y-Cb outputs output [DW:0] CrYCb_sync; output [23:0] CrYCb_data; // Cr (red-diff) ad_csc_1 #(.DELAY_DATA_WIDTH(DELAY_DATA_WIDTH)) i_csc_1_Cr ( .clk (clk), .sync (RGB_sync), .data (RGB_data), .C1 (17'h00707), .C2 (17'h105e2), .C3 (17'h10124), .C4 (25'h0080000), .csc_sync_1 (CrYCb_sync), .csc_data_1 (CrYCb_data[23:16])); // Y (luma) ad_csc_1 #(.DELAY_DATA_WIDTH(1)) i_csc_1_Y ( .clk (clk), .sync (1'd0), .data (RGB_data), .C1 (17'h0041b), .C2 (17'h00810), .C3 (17'h00191), .C4 (25'h0010000), .csc_sync_1 (), .csc_data_1 (CrYCb_data[15:8])); // Cb (blue-diff) ad_csc_1 #(.DELAY_DATA_WIDTH(1)) i_csc_1_Cb ( .clk (clk), .sync (1'd0), .data (RGB_data), .C1 (17'h1025f), .C2 (17'h104a7), .C3 (17'h00707), .C4 (25'h0080000), .csc_sync_1 (), .csc_data_1 (CrYCb_data[7:0])); endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_datafmt.v000066400000000000000000000075131457144405000265470ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** // data format (offset binary or 2's complement only) `timescale 1ps/1ps module ad_datafmt ( // data path clk, valid, data, valid_out, data_out, // control signals dfmt_enable, dfmt_type, dfmt_se); // delayed data bus width parameter DATA_WIDTH = 16; localparam DW = DATA_WIDTH - 1; // data path input clk; input valid; input [DW:0] data; output valid_out; output [15:0] data_out; // control signals input dfmt_enable; input dfmt_type; input dfmt_se; // internal registers reg valid_out = 'd0; reg [15:0] data_out = 'd0; // internal signals wire type_s; wire signext_s; wire [DW:0] data_s; wire [23:0] sign_s; wire [23:0] data_out_s; // if offset-binary convert to 2's complement first assign type_s = dfmt_enable & dfmt_type; assign signext_s = dfmt_enable & dfmt_se; assign data_s = (type_s == 1'b1) ? {~data[DW], data[(DW-1):0]} : data; assign sign_s = (signext_s == 1'b1) ? {{24{data_s[DW]}}} : 24'd0; assign data_out_s = {sign_s[23:(DW+1)], data_s}; always @(posedge clk) begin valid_out <= valid; data_out <= data_out_s[15:0]; end endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_dcfilter.v000066400000000000000000000134231457144405000267200ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** // dc filter- y(n) = c*x(n) + (1-c)*y(n-1) `timescale 1ps/1ps module ad_dcfilter ( // data interface clk, valid, data, valid_out, data_out, // control interface dcfilt_enb, dcfilt_coeff, dcfilt_offset); // data interface input clk; input valid; input [15:0] data; output valid_out; output [15:0] data_out; // control interface input dcfilt_enb; input [15:0] dcfilt_coeff; input [15:0] dcfilt_offset; // internal registers reg [47:0] dc_offset = 'd0; reg [47:0] dc_offset_d = 'd0; reg valid_d = 'd0; reg [15:0] data_d = 'd0; reg valid_2d = 'd0; reg [15:0] data_2d = 'd0; reg [15:0] data_dcfilt = 'd0; reg valid_out = 'd0; reg [15:0] data_out = 'd0; reg [15:0] dcfilt_coeff_r; // internal signals wire [47:0] dc_offset_s; // cancelling the dc offset // dcfilt_coeff is flopped so to remove warnings from vivado always @(posedge clk) begin dcfilt_coeff_r <= dcfilt_coeff; end always @(posedge clk) begin dc_offset <= dc_offset_s; dc_offset_d <= dc_offset; valid_d <= valid; if (valid == 1'b1) begin data_d <= data + dcfilt_offset; end valid_2d <= valid_d; data_2d <= data_d; data_dcfilt <= data_d - dc_offset[32:17]; if (dcfilt_enb == 1'b1) begin valid_out <= valid_2d; data_out <= data_dcfilt; end else begin valid_out <= valid_2d; data_out <= data_2d; end end // dsp slice instance ((D-A)*B)+C DSP48E1 #( .ACASCREG (1), .ADREG (1), .ALUMODEREG (0), .AREG (1), .AUTORESET_PATDET ("NO_RESET"), .A_INPUT ("DIRECT"), .BCASCREG (1), .BREG (1), .B_INPUT ("DIRECT"), .CARRYINREG (0), .CARRYINSELREG (0), .CREG (1), .DREG (0), .INMODEREG (0), .MASK (48'h3fffffffffff), .MREG (1), .OPMODEREG (0), .PATTERN (48'h000000000000), .PREG (0), .SEL_MASK ("MASK"), .SEL_PATTERN ("PATTERN"), .USE_DPORT ("TRUE"), .USE_MULT ("MULTIPLY"), .USE_PATTERN_DETECT ("NO_PATDET"), .USE_SIMD ("ONE48")) i_dsp48e1 ( .CLK (clk), .A ({{14{dc_offset_s[32]}}, dc_offset_s[32:17]}), .B ({{2{dcfilt_coeff_r[15]}}, dcfilt_coeff_r}), .C (dc_offset_d), .D ({{9{data_d[15]}}, data_d}), .MULTSIGNIN (1'd0), .CARRYIN (1'd0), .CARRYCASCIN (1'd0), .ACIN (30'd0), .BCIN (18'd0), .PCIN (48'd0), .P (dc_offset_s), .MULTSIGNOUT (), .CARRYOUT (), .CARRYCASCOUT (), .ACOUT (), .BCOUT (), .PCOUT (), .ALUMODE (4'd0), .CARRYINSEL (3'd0), .INMODE (5'b01100), .OPMODE (7'b0110101), .PATTERNBDETECT (), .PATTERNDETECT (), .OVERFLOW (), .UNDERFLOW (), .CEA1 (1'd0), .CEA2 (1'd1), .CEAD (1'd1), .CEALUMODE (1'd0), .CEB1 (1'd0), .CEB2 (1'd1), .CEC (1'd1), .CECARRYIN (1'd0), .CECTRL (1'd0), .CED (1'd1), .CEINMODE (1'd0), .CEM (1'd1), .CEP (1'd0), .RSTA (1'd0), .RSTALLCARRYIN (1'd0), .RSTALUMODE (1'd0), .RSTB (1'd0), .RSTC (1'd0), .RSTCTRL (1'd0), .RSTD (1'd0), .RSTINMODE (1'd0), .RSTM (1'd0), .RSTP (1'd0)); endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_dds.v000066400000000000000000000062241457144405000256770ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2014 - 2017 (c) Analog Devices, Inc. All rights reserved. // // In this HDL repository, there are many different and unique modules, consisting // of various HDL (Verilog or VHDL) components. The individual modules are // developed independently, and may be accompanied by separate and unique license // terms. // // The user should read each of these license terms, and understand the // freedoms and responsabilities that he or she has by using this source/core. // // This core 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. // // Redistribution and use of source or resulting binaries, with or without modification // of this file, are permitted under one of the following two license terms: // // 1. The GNU General Public License version 2 as published by the // Free Software Foundation, which can be found in the top level directory // of this repository (LICENSE_GPL2), and also online at: // // // OR // // 2. An ADI specific BSD license, which can be found in the top level directory // of this repository (LICENSE_ADIBSD), and also on-line at: // https://github.com/analogdevicesinc/hdl/blob/master/LICENSE_ADIBSD // This will allow to generate bit files and not release the source code, // as long as it attaches to an ADI device. // // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module ad_dds #( // data path disable parameter DISABLE = 0) ( // interface input clk, input dds_format, input [15:0] dds_phase_0, input [15:0] dds_scale_0, input [15:0] dds_phase_1, input [15:0] dds_scale_1, output [15:0] dds_data); // internal registers reg [15:0] dds_data_int = 'd0; reg [15:0] dds_data_out = 'd0; reg [15:0] dds_scale_0_d = 'd0; reg [15:0] dds_scale_1_d = 'd0; // internal signals wire [15:0] dds_data_0_s; wire [15:0] dds_data_1_s; // disable assign dds_data = (DISABLE == 1) ? 16'd0 : dds_data_out; // dds channel output always @(posedge clk) begin dds_data_int <= dds_data_0_s + dds_data_1_s; dds_data_out[15:15] <= dds_data_int[15] ^ dds_format; dds_data_out[14: 0] <= dds_data_int[14:0]; end always @(posedge clk) begin dds_scale_0_d <= dds_scale_0; dds_scale_1_d <= dds_scale_1; end // dds-1 ad_dds_1 i_dds_1_0 ( .clk (clk), .angle (dds_phase_0), .scale (dds_scale_0_d), .dds_data (dds_data_0_s)); // dds-2 ad_dds_1 i_dds_1_1 ( .clk (clk), .angle (dds_phase_1), .scale (dds_scale_1_d), .dds_data (dds_data_1_s)); endmodule // *************************************************************************** // ***************************************************************************bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_dds_1.v000066400000000000000000000066111457144405000261170ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module ad_dds_1 ( // interface clk, angle, scale, dds_data); // interface input clk; input [15:0] angle; input [15:0] scale; output [15:0] dds_data; // internal registers reg [15:0] dds_data = 'd0; // internal signals wire [15:0] sine_s; wire [33:0] s1_data_s; // sine ad_dds_sine #(.DELAY_DATA_WIDTH(1)) i_dds_sine ( .clk (clk), .angle (angle), .sine (sine_s), .ddata_in (1'b0), .ddata_out ()); // scale ad_mul #(.DELAY_DATA_WIDTH(1)) i_dds_scale ( .clk (clk), .data_a ({sine_s[15], sine_s}), .data_b ({scale[15], scale}), .data_p (s1_data_s), .ddata_in (1'b0), .ddata_out ()); // dds data always @(posedge clk) begin dds_data <= s1_data_s[29:14]; end endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_dds_sine.v000066400000000000000000000153631457144405000267210ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** // this is a sine function (approximate), the basic idea is to approximate sine as a // polynomial function (there are a lot of stuff about this on the web) `timescale 1ns/100ps module ad_dds_sine ( // sine = sin(angle) clk, angle, sine, ddata_in, ddata_out); // parameters parameter DELAY_DATA_WIDTH = 16; localparam DW = DELAY_DATA_WIDTH - 1; // sine = sin(angle) input clk; input [ 15:0] angle; output [ 15:0] sine; input [ DW:0] ddata_in; output [ DW:0] ddata_out; // internal registers reg [ 33:0] s1_data_p = 'd0; reg [ 33:0] s1_data_n = 'd0; reg [ 15:0] s1_angle = 'd0; reg [ DW:0] s1_ddata = 'd0; reg [ 18:0] s2_data_0 = 'd0; reg [ 18:0] s2_data_1 = 'd0; reg [ DW:0] s2_ddata = 'd0; reg [ 18:0] s3_data = 'd0; reg [ DW:0] s3_ddata = 'd0; reg [ 33:0] s4_data2_p = 'd0; reg [ 33:0] s4_data2_n = 'd0; reg [ 16:0] s4_data1_p = 'd0; reg [ 16:0] s4_data1_n = 'd0; reg [ DW:0] s4_ddata = 'd0; reg [ 16:0] s5_data2_0 = 'd0; reg [ 16:0] s5_data2_1 = 'd0; reg [ 16:0] s5_data1 = 'd0; reg [ DW:0] s5_ddata = 'd0; reg [ 16:0] s6_data2 = 'd0; reg [ 16:0] s6_data1 = 'd0; reg [ DW:0] s6_ddata = 'd0; reg [ 33:0] s7_data = 'd0; reg [ DW:0] s7_ddata = 'd0; reg [ 15:0] sine = 'd0; reg [ DW:0] ddata_out = 'd0; // internal signals wire [ 15:0] angle_s; wire [ 33:0] s1_data_s; wire [ DW:0] s1_ddata_s; wire [ 15:0] s1_angle_s; wire [ 33:0] s4_data2_s; wire [ DW:0] s4_ddata_s; wire [ 16:0] s4_data1_s; wire [ 33:0] s7_data2_s; wire [ 33:0] s7_data1_s; wire [ DW:0] s7_ddata_s; // make angle 2's complement assign angle_s = {~angle[15], angle[14:0]}; // level 1 - intermediate ad_mul #(.DELAY_DATA_WIDTH(DELAY_DATA_WIDTH+16)) i_mul_s1 ( .clk (clk), .data_a ({angle_s[15], angle_s}), .data_b ({angle_s[15], angle_s}), .data_p (s1_data_s), .ddata_in ({ddata_in, angle_s}), .ddata_out ({s1_ddata_s, s1_angle_s})); // 2's complement versions always @(posedge clk) begin s1_data_p <= s1_data_s; s1_data_n <= ~s1_data_s + 1'b1; s1_angle <= s1_angle_s; s1_ddata <= s1_ddata_s; end // select partial products always @(posedge clk) begin s2_data_0 <= (s1_angle[15] == 1'b0) ? s1_data_n[31:13] : s1_data_p[31:13]; s2_data_1 <= {s1_angle[15], s1_angle[15:0], 2'b00}; s2_ddata <= s1_ddata; end // unit-sine always @(posedge clk) begin s3_data <= s2_data_0 + s2_data_1; s3_ddata <= s2_ddata; end // level 2 - final ad_mul #(.DELAY_DATA_WIDTH(DELAY_DATA_WIDTH+17)) i_mul_s2 ( .clk (clk), .data_a (s3_data[16:0]), .data_b (s3_data[16:0]), .data_p (s4_data2_s), .ddata_in ({s3_ddata, s3_data[16:0]}), .ddata_out ({s4_ddata_s, s4_data1_s})); // 2's complement versions always @(posedge clk) begin s4_data2_p <= s4_data2_s; s4_data2_n <= ~s4_data2_s + 1'b1; s4_data1_p <= s4_data1_s; s4_data1_n <= ~s4_data1_s + 1'b1; s4_ddata <= s4_ddata_s; end // select partial products always @(posedge clk) begin s5_data2_0 <= (s4_data1_p[16] == 1'b1) ? s4_data2_n[31:15] : s4_data2_p[31:15]; s5_data2_1 <= s4_data1_n; s5_data1 <= s4_data1_p; s5_ddata <= s4_ddata; end // corrected-sine always @(posedge clk) begin s6_data2 <= s5_data2_0 + s5_data2_1; s6_data1 <= s5_data1; s6_ddata <= s5_ddata; end // full-scale ad_mul #(.DELAY_DATA_WIDTH(1)) i_mul_s3_2 ( .clk (clk), .data_a (s6_data2), .data_b (17'h1d08), .data_p (s7_data2_s), .ddata_in (1'b0), .ddata_out ()); ad_mul #(.DELAY_DATA_WIDTH(DELAY_DATA_WIDTH)) i_mul_s3_1 ( .clk (clk), .data_a (s6_data1), .data_b (17'h7fff), .data_p (s7_data1_s), .ddata_in (s6_ddata), .ddata_out (s7_ddata_s)); // corrected sum always @(posedge clk) begin s7_data <= s7_data2_s + s7_data1_s; s7_ddata <= s7_ddata_s; end // output registers always @(posedge clk) begin sine <= s7_data[30:15]; ddata_out <= s7_ddata; end endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_gt_channel.v000066400000000000000000001257341457144405000272370ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** `timescale 1ns/1ps module ad_gt_channel ( // rst and clocks lpm_dfe_n, cpll_ref_clk_in, cpll_pd, cpll_rst, qpll_clk, qpll_ref_clk, qpll_locked, // receive rx_gt_rst_m, rx_p, rx_n, rx_sys_clk_sel, rx_out_clk_sel, rx_out_clk, rx_rst_done, rx_pll_locked, rx_user_ready_m, rx_clk, rx_gt_charisk, rx_gt_disperr, rx_gt_notintable, rx_gt_data, rx_gt_comma_align_enb, rx_gt_ilas_f, rx_gt_ilas_q, rx_gt_ilas_a, rx_gt_ilas_r, rx_gt_cgs_k, // transmit tx_gt_rst_m, tx_p, tx_n, tx_sys_clk_sel, tx_out_clk_sel, tx_out_clk, tx_rst_done, tx_pll_locked, tx_user_ready_m, tx_clk, tx_gt_charisk, tx_gt_data, // drp interface up_clk, up_drp_sel, up_drp_addr, up_drp_wr, up_drp_wdata, up_drp_rdata, up_drp_ready, up_drp_rxrate); // parameters parameter integer GTH_OR_GTX_N = 0; parameter [31:0] PMA_RSV = 32'h00018480; parameter integer CPLL_FBDIV = 2; parameter integer RX_OUT_DIV = 1; parameter integer RX_CLK25_DIV = 10; parameter integer RX_CLKBUF_ENABLE = 0; parameter [72:0] RX_CDR_CFG = 72'h03000023ff20400020; parameter integer TX_OUT_DIV = 1; parameter integer TX_CLK25_DIV = 10; parameter integer TX_CLKBUF_ENABLE = 0; // rst and clocks input lpm_dfe_n; input cpll_ref_clk_in; input cpll_pd; input cpll_rst; input qpll_clk; input qpll_ref_clk; input qpll_locked; // receive input rx_gt_rst_m; input rx_p; input rx_n; input [ 1:0] rx_sys_clk_sel; input [ 2:0] rx_out_clk_sel; output rx_out_clk; output rx_rst_done; output rx_pll_locked; input rx_user_ready_m; input rx_clk; output [ 3:0] rx_gt_charisk; output [ 3:0] rx_gt_disperr; output [ 3:0] rx_gt_notintable; output [31:0] rx_gt_data; input rx_gt_comma_align_enb; output [ 3:0] rx_gt_ilas_f; output [ 3:0] rx_gt_ilas_q; output [ 3:0] rx_gt_ilas_a; output [ 3:0] rx_gt_ilas_r; output [ 3:0] rx_gt_cgs_k; // transmit input tx_gt_rst_m; output tx_p; output tx_n; input [ 1:0] tx_sys_clk_sel; input [ 2:0] tx_out_clk_sel; output tx_out_clk; output tx_rst_done; output tx_pll_locked; input tx_user_ready_m; input tx_clk; input [ 3:0] tx_gt_charisk; input [31:0] tx_gt_data; // drp interface input up_clk; input up_drp_sel; input [11:0] up_drp_addr; input up_drp_wr; input [15:0] up_drp_wdata; output [15:0] up_drp_rdata; output up_drp_ready; output [ 7:0] up_drp_rxrate; // internal signals wire [ 3:0] rx_valid_k_s; wire [ 2:0] rx_rate_p_s; wire [ 3:0] rx_charisk_open_s; wire [ 3:0] rx_disperr_open_s; wire [ 3:0] rx_notintable_open_s; wire [31:0] rx_data_open_s; wire [ 1:0] rx_sys_clk_sel_s; wire [ 1:0] tx_sys_clk_sel_s; wire [ 1:0] rx_pll_clk_sel_s; wire [ 1:0] tx_pll_clk_sel_s; wire rx_out_clk_s; wire tx_out_clk_s; wire cpll_locked_s; // cgs & ilas frame characters assign rx_gt_ilas_f[3] = (rx_gt_data[31:24] == 8'hfc) ? rx_valid_k_s[3] : 1'b0; assign rx_gt_ilas_f[2] = (rx_gt_data[23:16] == 8'hfc) ? rx_valid_k_s[2] : 1'b0; assign rx_gt_ilas_f[1] = (rx_gt_data[15: 8] == 8'hfc) ? rx_valid_k_s[1] : 1'b0; assign rx_gt_ilas_f[0] = (rx_gt_data[ 7: 0] == 8'hfc) ? rx_valid_k_s[0] : 1'b0; assign rx_gt_ilas_q[3] = (rx_gt_data[31:24] == 8'h9c) ? rx_valid_k_s[3] : 1'b0; assign rx_gt_ilas_q[2] = (rx_gt_data[23:16] == 8'h9c) ? rx_valid_k_s[2] : 1'b0; assign rx_gt_ilas_q[1] = (rx_gt_data[15: 8] == 8'h9c) ? rx_valid_k_s[1] : 1'b0; assign rx_gt_ilas_q[0] = (rx_gt_data[ 7: 0] == 8'h9c) ? rx_valid_k_s[0] : 1'b0; assign rx_gt_ilas_a[3] = (rx_gt_data[31:24] == 8'h7c) ? rx_valid_k_s[3] : 1'b0; assign rx_gt_ilas_a[2] = (rx_gt_data[23:16] == 8'h7c) ? rx_valid_k_s[2] : 1'b0; assign rx_gt_ilas_a[1] = (rx_gt_data[15: 8] == 8'h7c) ? rx_valid_k_s[1] : 1'b0; assign rx_gt_ilas_a[0] = (rx_gt_data[ 7: 0] == 8'h7c) ? rx_valid_k_s[0] : 1'b0; assign rx_gt_ilas_r[3] = (rx_gt_data[31:24] == 8'h1c) ? rx_valid_k_s[3] : 1'b0; assign rx_gt_ilas_r[2] = (rx_gt_data[23:16] == 8'h1c) ? rx_valid_k_s[2] : 1'b0; assign rx_gt_ilas_r[1] = (rx_gt_data[15: 8] == 8'h1c) ? rx_valid_k_s[1] : 1'b0; assign rx_gt_ilas_r[0] = (rx_gt_data[ 7: 0] == 8'h1c) ? rx_valid_k_s[0] : 1'b0; assign rx_gt_cgs_k[3] = (rx_gt_data[31:24] == 8'hbc) ? rx_valid_k_s[3] : 1'b0; assign rx_gt_cgs_k[2] = (rx_gt_data[23:16] == 8'hbc) ? rx_valid_k_s[2] : 1'b0; assign rx_gt_cgs_k[1] = (rx_gt_data[15: 8] == 8'hbc) ? rx_valid_k_s[1] : 1'b0; assign rx_gt_cgs_k[0] = (rx_gt_data[ 7: 0] == 8'hbc) ? rx_valid_k_s[0] : 1'b0; // validate all characters assign rx_valid_k_s = rx_gt_charisk & (~rx_gt_disperr) & (~rx_gt_notintable); // rate assign rx_rate_p_s = 0; assign up_drp_rxrate = (rx_rate_p_s == 3'd0) ? RX_OUT_DIV : (rx_rate_p_s == 3'd1) ? 8'h01 : (rx_rate_p_s == 3'd2) ? 8'h02 : (rx_rate_p_s == 3'd3) ? 8'h04 : (rx_rate_p_s == 3'd4) ? 8'h08 : (rx_rate_p_s == 3'd5) ? 8'h10 : 8'h00; // pll locked assign rx_pll_locked = (rx_sys_clk_sel == 2'd3) ? qpll_locked : cpll_locked_s; assign tx_pll_locked = (tx_sys_clk_sel == 2'd3) ? qpll_locked : cpll_locked_s; // instantiations generate if (RX_CLKBUF_ENABLE == 0) begin assign rx_out_clk = rx_out_clk_s; end if (TX_CLKBUF_ENABLE == 0) begin assign tx_out_clk = tx_out_clk_s; end if (GTH_OR_GTX_N == 0) begin assign rx_sys_clk_sel_s = rx_sys_clk_sel; assign tx_sys_clk_sel_s = tx_sys_clk_sel; assign rx_pll_clk_sel_s = 2'd0; assign tx_pll_clk_sel_s = 2'd0; if (RX_CLKBUF_ENABLE == 1) begin BUFG i_bufg_rx_clk ( .I (rx_out_clk_s), .O (rx_out_clk)); end if (TX_CLKBUF_ENABLE == 1) begin BUFG i_bufg_tx_clk ( .I (tx_out_clk_s), .O (tx_out_clk)); end GTXE2_CHANNEL #( .SIM_RECEIVER_DETECT_PASS ("TRUE"), .SIM_TX_EIDLE_DRIVE_LEVEL ("X"), .SIM_RESET_SPEEDUP ("TRUE"), .SIM_CPLLREFCLK_SEL (3'b001), .SIM_VERSION ("3.0"), .ALIGN_COMMA_DOUBLE ("FALSE"), .ALIGN_COMMA_ENABLE (10'b1111111111), .ALIGN_COMMA_WORD (1), .ALIGN_MCOMMA_DET ("TRUE"), .ALIGN_MCOMMA_VALUE (10'b1010000011), .ALIGN_PCOMMA_DET ("TRUE"), .ALIGN_PCOMMA_VALUE (10'b0101111100), .SHOW_REALIGN_COMMA ("TRUE"), .RXSLIDE_AUTO_WAIT (7), .RXSLIDE_MODE ("OFF"), .RX_SIG_VALID_DLY (10), .RX_DISPERR_SEQ_MATCH ("TRUE"), .DEC_MCOMMA_DETECT ("TRUE"), .DEC_PCOMMA_DETECT ("TRUE"), .DEC_VALID_COMMA_ONLY ("FALSE"), .CBCC_DATA_SOURCE_SEL ("DECODED"), .CLK_COR_SEQ_2_USE ("FALSE"), .CLK_COR_KEEP_IDLE ("FALSE"), .CLK_COR_MAX_LAT (35), .CLK_COR_MIN_LAT (31), .CLK_COR_PRECEDENCE ("TRUE"), .CLK_COR_REPEAT_WAIT (0), .CLK_COR_SEQ_LEN (1), .CLK_COR_SEQ_1_ENABLE (4'b1111), .CLK_COR_SEQ_1_1 (10'b0000000000), .CLK_COR_SEQ_1_2 (10'b0000000000), .CLK_COR_SEQ_1_3 (10'b0000000000), .CLK_COR_SEQ_1_4 (10'b0000000000), .CLK_CORRECT_USE ("FALSE"), .CLK_COR_SEQ_2_ENABLE (4'b1111), .CLK_COR_SEQ_2_1 (10'b0000000000), .CLK_COR_SEQ_2_2 (10'b0000000000), .CLK_COR_SEQ_2_3 (10'b0000000000), .CLK_COR_SEQ_2_4 (10'b0000000000), .CHAN_BOND_KEEP_ALIGN ("FALSE"), .CHAN_BOND_MAX_SKEW (7), .CHAN_BOND_SEQ_LEN (1), .CHAN_BOND_SEQ_1_1 (10'b0000000000), .CHAN_BOND_SEQ_1_2 (10'b0000000000), .CHAN_BOND_SEQ_1_3 (10'b0000000000), .CHAN_BOND_SEQ_1_4 (10'b0000000000), .CHAN_BOND_SEQ_1_ENABLE (4'b1111), .CHAN_BOND_SEQ_2_1 (10'b0000000000), .CHAN_BOND_SEQ_2_2 (10'b0000000000), .CHAN_BOND_SEQ_2_3 (10'b0000000000), .CHAN_BOND_SEQ_2_4 (10'b0000000000), .CHAN_BOND_SEQ_2_ENABLE (4'b1111), .CHAN_BOND_SEQ_2_USE ("FALSE"), .FTS_DESKEW_SEQ_ENABLE (4'b1111), .FTS_LANE_DESKEW_CFG (4'b1111), .FTS_LANE_DESKEW_EN ("FALSE"), .ES_CONTROL (6'b000000), .ES_ERRDET_EN ("TRUE"), .ES_EYE_SCAN_EN ("TRUE"), .ES_HORZ_OFFSET (12'h000), .ES_PMA_CFG (10'b0000000000), .ES_PRESCALE (5'b00000), .ES_QUALIFIER (80'h00000000000000000000), .ES_QUAL_MASK (80'h00000000000000000000), .ES_SDATA_MASK (80'h00000000000000000000), .ES_VERT_OFFSET (9'b000000000), .RX_DATA_WIDTH (40), .OUTREFCLK_SEL_INV (2'b11), .PMA_RSV (PMA_RSV), .PMA_RSV2 (16'h2070), .PMA_RSV3 (2'b00), .PMA_RSV4 (32'h00000000), .RX_BIAS_CFG (12'b000000000100), .DMONITOR_CFG (24'h000A00), .RX_CM_SEL (2'b11), .RX_CM_TRIM (3'b010), .RX_DEBUG_CFG (12'b000000000000), .RX_OS_CFG (13'b0000010000000), .TERM_RCAL_CFG (5'b10000), .TERM_RCAL_OVRD (1'b0), .TST_RSV (32'h00000000), .RX_CLK25_DIV (RX_CLK25_DIV), .TX_CLK25_DIV (TX_CLK25_DIV), .UCODEER_CLR (1'b0), .PCS_PCIE_EN ("FALSE"), .PCS_RSVD_ATTR (48'h000000000000), .RXBUF_ADDR_MODE ("FULL"), .RXBUF_EIDLE_HI_CNT (4'b1000), .RXBUF_EIDLE_LO_CNT (4'b0000), .RXBUF_EN ("TRUE"), .RX_BUFFER_CFG (6'b000000), .RXBUF_RESET_ON_CB_CHANGE ("TRUE"), .RXBUF_RESET_ON_COMMAALIGN ("FALSE"), .RXBUF_RESET_ON_EIDLE ("FALSE"), .RXBUF_RESET_ON_RATE_CHANGE ("TRUE"), .RXBUFRESET_TIME (5'b00001), .RXBUF_THRESH_OVFLW (61), .RXBUF_THRESH_OVRD ("FALSE"), .RXBUF_THRESH_UNDFLW (4), .RXDLY_CFG (16'h001F), .RXDLY_LCFG (9'h030), .RXDLY_TAP_CFG (16'h0000), .RXPH_CFG (24'h000000), .RXPHDLY_CFG (24'h084020), .RXPH_MONITOR_SEL (5'b00000), .RX_XCLK_SEL ("RXREC"), .RX_DDI_SEL (6'b000000), .RX_DEFER_RESET_BUF_EN ("TRUE"), .RXCDR_CFG (RX_CDR_CFG), .RXCDR_FR_RESET_ON_EIDLE (1'b0), .RXCDR_HOLD_DURING_EIDLE (1'b0), .RXCDR_PH_RESET_ON_EIDLE (1'b0), .RXCDR_LOCK_CFG (6'b010101), .RXCDRFREQRESET_TIME (5'b00001), .RXCDRPHRESET_TIME (5'b00001), .RXISCANRESET_TIME (5'b00001), .RXPCSRESET_TIME (5'b00001), .RXPMARESET_TIME (5'b00011), .RXOOB_CFG (7'b0000110), .RXGEARBOX_EN ("FALSE"), .GEARBOX_MODE (3'b000), .RXPRBS_ERR_LOOPBACK (1'b0), .PD_TRANS_TIME_FROM_P2 (12'h03c), .PD_TRANS_TIME_NONE_P2 (8'h3c), .PD_TRANS_TIME_TO_P2 (8'h64), .SAS_MAX_COM (64), .SAS_MIN_COM (36), .SATA_BURST_SEQ_LEN (4'b1111), .SATA_BURST_VAL (3'b100), .SATA_EIDLE_VAL (3'b100), .SATA_MAX_BURST (8), .SATA_MAX_INIT (21), .SATA_MAX_WAKE (7), .SATA_MIN_BURST (4), .SATA_MIN_INIT (12), .SATA_MIN_WAKE (4), .TRANS_TIME_RATE (8'h0E), .TXBUF_EN ("TRUE"), .TXBUF_RESET_ON_RATE_CHANGE ("TRUE"), .TXDLY_CFG (16'h001F), .TXDLY_LCFG (9'h030), .TXDLY_TAP_CFG (16'h0000), .TXPH_CFG (16'h0780), .TXPHDLY_CFG (24'h084020), .TXPH_MONITOR_SEL (5'b00000), .TX_XCLK_SEL ("TXOUT"), .TX_DATA_WIDTH (40), .TX_DEEMPH0 (5'b00000), .TX_DEEMPH1 (5'b00000), .TX_EIDLE_ASSERT_DELAY (3'b110), .TX_EIDLE_DEASSERT_DELAY (3'b100), .TX_LOOPBACK_DRIVE_HIZ ("FALSE"), .TX_MAINCURSOR_SEL (1'b0), .TX_DRIVE_MODE ("DIRECT"), .TX_MARGIN_FULL_0 (7'b1001110), .TX_MARGIN_FULL_1 (7'b1001001), .TX_MARGIN_FULL_2 (7'b1000101), .TX_MARGIN_FULL_3 (7'b1000010), .TX_MARGIN_FULL_4 (7'b1000000), .TX_MARGIN_LOW_0 (7'b1000110), .TX_MARGIN_LOW_1 (7'b1000100), .TX_MARGIN_LOW_2 (7'b1000010), .TX_MARGIN_LOW_3 (7'b1000000), .TX_MARGIN_LOW_4 (7'b1000000), .TXGEARBOX_EN ("FALSE"), .TXPCSRESET_TIME (5'b00001), .TXPMARESET_TIME (5'b00001), .TX_RXDETECT_CFG (14'h1832), .TX_RXDETECT_REF (3'b100), .CPLL_CFG (24'hBC07DC), .CPLL_FBDIV (CPLL_FBDIV), .CPLL_FBDIV_45 (5), .CPLL_INIT_CFG (24'h00001E), .CPLL_LOCK_CFG (16'h01E8), .CPLL_REFCLK_DIV (1), .RXOUT_DIV (RX_OUT_DIV), .TXOUT_DIV (TX_OUT_DIV), .SATA_CPLL_CFG ("VCO_3000MHZ"), .RXDFELPMRESET_TIME (7'b0001111), .RXLPM_HF_CFG (14'b00000011110000), .RXLPM_LF_CFG (14'b00000011110000), .RX_DFE_GAIN_CFG (23'h020FEA), .RX_DFE_H2_CFG (12'b000000000000), .RX_DFE_H3_CFG (12'b000001000000), .RX_DFE_H4_CFG (11'b00011110000), .RX_DFE_H5_CFG (11'b00011100000), .RX_DFE_KL_CFG (13'b0000011111110), .RX_DFE_LPM_CFG (16'h0954), .RX_DFE_LPM_HOLD_DURING_EIDLE (1'b0), .RX_DFE_UT_CFG (17'b10001111000000000), .RX_DFE_VP_CFG (17'b00011111100000011), .RX_CLKMUX_PD (1'b1), .TX_CLKMUX_PD (1'b1), .RX_INT_DATAWIDTH (1), .TX_INT_DATAWIDTH (1), .TX_QPI_STATUS_EN (1'b0), .RX_DFE_KL_CFG2 (32'h3010D90C), .RX_DFE_XYD_CFG (13'b0001100010000), .TX_PREDRIVER_MODE (1'b0)) i_gtxe2_channel ( .CPLLFBCLKLOST (), .CPLLLOCK (cpll_locked_s), .CPLLLOCKDETCLK (up_clk), .CPLLLOCKEN (1'd1), .CPLLPD (cpll_pd), .CPLLREFCLKLOST (), .CPLLREFCLKSEL (3'b001), .CPLLRESET (cpll_rst), .GTRSVD (16'b0000000000000000), .PCSRSVDIN (16'b0000000000000000), .PCSRSVDIN2 (5'b00000), .PMARSVDIN (5'b00000), .PMARSVDIN2 (5'b00000), .TSTIN (20'b11111111111111111111), .TSTOUT (), .CLKRSVD (4'b0000), .GTGREFCLK (1'd0), .GTNORTHREFCLK0 (1'd0), .GTNORTHREFCLK1 (1'd0), .GTREFCLK0 (cpll_ref_clk_in), .GTREFCLK1 (1'd0), .GTSOUTHREFCLK0 (1'd0), .GTSOUTHREFCLK1 (1'd0), .DRPADDR (up_drp_addr[8:0]), .DRPCLK (up_clk), .DRPDI (up_drp_wdata), .DRPDO (up_drp_rdata), .DRPEN (up_drp_sel), .DRPRDY (up_drp_ready), .DRPWE (up_drp_wr), .GTREFCLKMONITOR (), .QPLLCLK (qpll_clk), .QPLLREFCLK (qpll_ref_clk), .RXSYSCLKSEL (rx_sys_clk_sel_s), .TXSYSCLKSEL (tx_sys_clk_sel_s), .DMONITOROUT (), .TX8B10BEN (1'd1), .LOOPBACK (3'd0), .PHYSTATUS (), .RXRATE (rx_rate_p_s), .RXVALID (), .RXPD (2'b00), .TXPD (2'b00), .SETERRSTATUS (1'd0), .EYESCANRESET (1'd0), .RXUSERRDY (rx_user_ready_m), .EYESCANDATAERROR (), .EYESCANMODE (1'd0), .EYESCANTRIGGER (1'd0), .RXCDRFREQRESET (1'd0), .RXCDRHOLD (1'd0), .RXCDRLOCK (), .RXCDROVRDEN (1'd0), .RXCDRRESET (1'd0), .RXCDRRESETRSV (1'd0), .RXCLKCORCNT (), .RX8B10BEN (1'd1), .RXUSRCLK (rx_clk), .RXUSRCLK2 (rx_clk), .RXDATA ({rx_data_open_s, rx_gt_data}), .RXPRBSERR (), .RXPRBSSEL (3'd0), .RXPRBSCNTRESET (1'd0), .RXDFEXYDEN (1'd0), .RXDFEXYDHOLD (1'd0), .RXDFEXYDOVRDEN (1'd0), .RXDISPERR ({rx_disperr_open_s, rx_gt_disperr}), .RXNOTINTABLE ({rx_notintable_open_s, rx_gt_notintable}), .GTXRXP (rx_p), .GTXRXN (rx_n), .RXBUFRESET (1'd0), .RXBUFSTATUS (), .RXDDIEN (1'd0), .RXDLYBYPASS (1'd1), .RXDLYEN (1'd0), .RXDLYOVRDEN (1'd0), .RXDLYSRESET (1'd0), .RXDLYSRESETDONE (), .RXPHALIGN (1'd0), .RXPHALIGNDONE (), .RXPHALIGNEN (1'd0), .RXPHDLYPD (1'd0), .RXPHDLYRESET (1'd0), .RXPHMONITOR (), .RXPHOVRDEN (1'd0), .RXPHSLIPMONITOR (), .RXSTATUS (), .RXBYTEISALIGNED (), .RXBYTEREALIGN (), .RXCOMMADET (), .RXCOMMADETEN (1'd1), .RXMCOMMAALIGNEN (rx_gt_comma_align_enb), .RXPCOMMAALIGNEN (rx_gt_comma_align_enb), .RXCHANBONDSEQ (), .RXCHBONDEN (1'd0), .RXCHBONDLEVEL (3'd0), .RXCHBONDMASTER (1'd1), .RXCHBONDO (), .RXCHBONDSLAVE (1'd0), .RXCHANISALIGNED (), .RXCHANREALIGN (), .RXDFEAGCHOLD (1'd0), .RXDFEAGCOVRDEN (1'd0), .RXDFECM1EN (1'd0), .RXDFELFHOLD (1'd0), .RXDFELFOVRDEN (1'd1), .RXDFELPMRESET (1'd0), .RXDFETAP2HOLD (1'd0), .RXDFETAP2OVRDEN (1'd0), .RXDFETAP3HOLD (1'd0), .RXDFETAP3OVRDEN (1'd0), .RXDFETAP4HOLD (1'd0), .RXDFETAP4OVRDEN (1'd0), .RXDFETAP5HOLD (1'd0), .RXDFETAP5OVRDEN (1'd0), .RXDFEUTHOLD (1'd0), .RXDFEUTOVRDEN (1'd0), .RXDFEVPHOLD (1'd0), .RXDFEVPOVRDEN (1'd0), .RXDFEVSEN (1'd0), .RXLPMLFKLOVRDEN (1'd0), .RXMONITOROUT (), .RXMONITORSEL (2'd0), .RXOSHOLD (1'd0), .RXOSOVRDEN (1'd0), .RXLPMHFHOLD (1'd0), .RXLPMHFOVRDEN (1'd0), .RXLPMLFHOLD (1'd0), .RXRATEDONE (), .RXOUTCLK (rx_out_clk_s), .RXOUTCLKFABRIC (), .RXOUTCLKPCS (), .RXOUTCLKSEL (rx_out_clk_sel), .RXDATAVALID (), .RXHEADER (), .RXHEADERVALID (), .RXSTARTOFSEQ (), .RXGEARBOXSLIP (1'd0), .GTRXRESET (rx_gt_rst_m), .RXOOBRESET (1'd0), .RXPCSRESET (1'd0), .RXPMARESET (1'd0), .RXLPMEN (lpm_dfe_n), .RXCOMSASDET (), .RXCOMWAKEDET (), .RXCOMINITDET (), .RXELECIDLE (), .RXELECIDLEMODE (2'b10), .RXPOLARITY (1'd0), .RXSLIDE (1'd0), .RXCHARISCOMMA (), .RXCHARISK ({rx_charisk_open_s, rx_gt_charisk}), .RXCHBONDI (5'd0), .RXRESETDONE (rx_rst_done), .RXQPIEN (1'd0), .RXQPISENN (), .RXQPISENP (), .TXPHDLYTSTCLK (1'd0), .TXPOSTCURSOR (5'd0), .TXPOSTCURSORINV (1'd0), .TXPRECURSOR (5'd0), .TXPRECURSORINV (1'd0), .TXQPIBIASEN (1'd0), .TXQPISTRONGPDOWN (1'd0), .TXQPIWEAKPUP (1'd0), .CFGRESET (1'd0), .GTTXRESET (tx_gt_rst_m), .PCSRSVDOUT (), .TXUSERRDY (tx_user_ready_m), .GTRESETSEL (1'd0), .RESETOVRD (1'd0), .TXCHARDISPMODE (8'd0), .TXCHARDISPVAL (8'd0), .TXUSRCLK (tx_clk), .TXUSRCLK2 (tx_clk), .TXELECIDLE (1'd0), .TXMARGIN (3'd0), .TXRATE (3'd0), .TXSWING (1'd0), .TXPRBSFORCEERR (1'd0), .TXDLYBYPASS (1'd1), .TXDLYEN (1'd0), .TXDLYHOLD (1'd0), .TXDLYOVRDEN (1'd0), .TXDLYSRESET (1'd0), .TXDLYSRESETDONE (), .TXDLYUPDOWN (1'd0), .TXPHALIGN (1'd0), .TXPHALIGNDONE (), .TXPHALIGNEN (1'd0), .TXPHDLYPD (1'd0), .TXPHDLYRESET (1'd0), .TXPHINIT (1'd0), .TXPHINITDONE (), .TXPHOVRDEN (1'd0), .TXBUFSTATUS (), .TXBUFDIFFCTRL (3'b100), .TXDEEMPH (1'd0), .TXDIFFCTRL (4'b1000), .TXDIFFPD (1'd0), .TXINHIBIT (1'd0), .TXMAINCURSOR (7'b0000000), .TXPISOPD (1'd0), .TXDATA ({32'd0, tx_gt_data}), .GTXTXP (tx_p), .GTXTXN (tx_n), .TXOUTCLK (tx_out_clk_s), .TXOUTCLKFABRIC (), .TXOUTCLKPCS (), .TXOUTCLKSEL (tx_out_clk_sel), .TXRATEDONE (), .TXCHARISK ({4'd0, tx_gt_charisk}), .TXGEARBOXREADY (), .TXHEADER (3'd0), .TXSEQUENCE (7'd0), .TXSTARTSEQ (1'd0), .TXPCSRESET (1'd0), .TXPMARESET (1'd0), .TXRESETDONE (tx_rst_done), .TXCOMFINISH (), .TXCOMINIT (1'd0), .TXCOMSAS (1'd0), .TXCOMWAKE (1'd0), .TXPDELECIDLEMODE (1'd0), .TXPOLARITY (1'd0), .TXDETECTRX (1'd0), .TX8B10BBYPASS (8'd0), .TXPRBSSEL (3'd0), .TXQPISENP (), .TXQPISENN ()); end if (GTH_OR_GTX_N == 1) begin assign rx_sys_clk_sel_s = (rx_sys_clk_sel == 2'd3) ? 2'b10 : 2'b00; assign tx_sys_clk_sel_s = (tx_sys_clk_sel == 2'd3) ? 2'b10 : 2'b00; assign rx_pll_clk_sel_s = rx_sys_clk_sel; assign tx_pll_clk_sel_s = tx_sys_clk_sel; if (RX_CLKBUF_ENABLE == 1) begin BUFG_GT i_bufg_rx_clk ( .I (rx_out_clk_s), .O (rx_out_clk)); end if (TX_CLKBUF_ENABLE == 1) begin BUFG_GT i_bufg_tx_clk ( .I (tx_out_clk_s), .O (tx_out_clk)); end GTHE3_CHANNEL #( .ACJTAG_DEBUG_MODE (1'b0), .ACJTAG_MODE (1'b0), .ACJTAG_RESET (1'b0), .ADAPT_CFG0 (16'b1111100000000000), .ADAPT_CFG1 (16'b0000000000000000), .ALIGN_COMMA_DOUBLE ("FALSE"), .ALIGN_COMMA_ENABLE (10'b1111111111), .ALIGN_COMMA_WORD (1), .ALIGN_MCOMMA_DET ("TRUE"), .ALIGN_MCOMMA_VALUE (10'b1010000011), .ALIGN_PCOMMA_DET ("TRUE"), .ALIGN_PCOMMA_VALUE (10'b0101111100), .A_RXOSCALRESET (1'b0), .A_RXPROGDIVRESET (1'b0), .A_TXPROGDIVRESET (1'b0), .CBCC_DATA_SOURCE_SEL ("DECODED"), .CDR_SWAP_MODE_EN (1'b0), .CHAN_BOND_KEEP_ALIGN ("FALSE"), .CHAN_BOND_MAX_SKEW (1), .CHAN_BOND_SEQ_1_1 (10'b0000000000), .CHAN_BOND_SEQ_1_2 (10'b0000000000), .CHAN_BOND_SEQ_1_3 (10'b0000000000), .CHAN_BOND_SEQ_1_4 (10'b0000000000), .CHAN_BOND_SEQ_1_ENABLE (4'b1111), .CHAN_BOND_SEQ_2_1 (10'b0000000000), .CHAN_BOND_SEQ_2_2 (10'b0000000000), .CHAN_BOND_SEQ_2_3 (10'b0000000000), .CHAN_BOND_SEQ_2_4 (10'b0000000000), .CHAN_BOND_SEQ_2_ENABLE (4'b1111), .CHAN_BOND_SEQ_2_USE ("FALSE"), .CHAN_BOND_SEQ_LEN (1), .CLK_CORRECT_USE ("FALSE"), .CLK_COR_KEEP_IDLE ("FALSE"), .CLK_COR_MAX_LAT (12), .CLK_COR_MIN_LAT (8), .CLK_COR_PRECEDENCE ("TRUE"), .CLK_COR_REPEAT_WAIT (0), .CLK_COR_SEQ_1_1 (10'b0100000000), .CLK_COR_SEQ_1_2 (10'b0100000000), .CLK_COR_SEQ_1_3 (10'b0100000000), .CLK_COR_SEQ_1_4 (10'b0100000000), .CLK_COR_SEQ_1_ENABLE (4'b1111), .CLK_COR_SEQ_2_1 (10'b0100000000), .CLK_COR_SEQ_2_2 (10'b0100000000), .CLK_COR_SEQ_2_3 (10'b0100000000), .CLK_COR_SEQ_2_4 (10'b0100000000), .CLK_COR_SEQ_2_ENABLE (4'b1111), .CLK_COR_SEQ_2_USE ("FALSE"), .CLK_COR_SEQ_LEN (1), .CPLL_CFG0 (16'b0110011111111010), .CPLL_CFG1 (16'b1010010010010100), .CPLL_CFG2 (16'b1111000000000111), .CPLL_CFG3 (6'b000000), .CPLL_FBDIV (CPLL_FBDIV), .CPLL_FBDIV_45 (5), .CPLL_INIT_CFG0 (16'b0000000000011110), .CPLL_INIT_CFG1 (8'b00000000), .CPLL_LOCK_CFG (16'b0000000111101000), .CPLL_REFCLK_DIV (1), .DDI_CTRL (2'b00), .DDI_REALIGN_WAIT (15), .DEC_MCOMMA_DETECT ("TRUE"), .DEC_PCOMMA_DETECT ("TRUE"), .DEC_VALID_COMMA_ONLY ("FALSE"), .DFE_D_X_REL_POS (1'b0), .DFE_VCM_COMP_EN (1'b0), .DMONITOR_CFG0 (10'b0000000000), .DMONITOR_CFG1 (8'b00000000), .ES_CLK_PHASE_SEL (1'b0), .ES_CONTROL (6'b000000), .ES_ERRDET_EN ("TRUE"), .ES_EYE_SCAN_EN ("TRUE"), .ES_HORZ_OFFSET (12'b000000000000), .ES_PMA_CFG (10'b0000000000), .ES_PRESCALE (5'b00000), .ES_QUALIFIER0 (16'b0000000000000000), .ES_QUALIFIER1 (16'b0000000000000000), .ES_QUALIFIER2 (16'b0000000000000000), .ES_QUALIFIER3 (16'b0000000000000000), .ES_QUALIFIER4 (16'b0000000000000000), .ES_QUAL_MASK0 (16'b0000000000000000), .ES_QUAL_MASK1 (16'b0000000000000000), .ES_QUAL_MASK2 (16'b0000000000000000), .ES_QUAL_MASK3 (16'b0000000000000000), .ES_QUAL_MASK4 (16'b0000000000000000), .ES_SDATA_MASK0 (16'b0000000000000000), .ES_SDATA_MASK1 (16'b0000000000000000), .ES_SDATA_MASK2 (16'b0000000000000000), .ES_SDATA_MASK3 (16'b0000000000000000), .ES_SDATA_MASK4 (16'b0000000000000000), .EVODD_PHI_CFG (11'b00000000000), .EYE_SCAN_SWAP_EN (1'b0), .FTS_DESKEW_SEQ_ENABLE (4'b1111), .FTS_LANE_DESKEW_CFG (4'b1111), .FTS_LANE_DESKEW_EN ("FALSE"), .GEARBOX_MODE (5'b00000), .GM_BIAS_SELECT (1'b0), .LOCAL_MASTER (1'b1), .OOBDIVCTL (2'b00), .OOB_PWRUP (1'b0), .PCI3_AUTO_REALIGN ("OVR_1K_BLK"), .PCI3_PIPE_RX_ELECIDLE (1'b0), .PCI3_RX_ASYNC_EBUF_BYPASS (2'b00), .PCI3_RX_ELECIDLE_EI2_ENABLE (1'b0), .PCI3_RX_ELECIDLE_H2L_COUNT (6'b000000), .PCI3_RX_ELECIDLE_H2L_DISABLE (3'b000), .PCI3_RX_ELECIDLE_HI_COUNT (6'b000000), .PCI3_RX_ELECIDLE_LP4_DISABLE (1'b0), .PCI3_RX_FIFO_DISABLE (1'b0), .PCIE_BUFG_DIV_CTRL (16'b0011010100001001), .PCIE_RXPCS_CFG_GEN3 (16'b0000001010100100), .PCIE_RXPMA_CFG (16'b0000000000001010), .PCIE_TXPCS_CFG_GEN3 (16'b0010010010100000), .PCIE_TXPMA_CFG (16'b0000000000001010), .PCS_PCIE_EN ("FALSE"), .PCS_RSVD0 (16'b0000000000000000), .PCS_RSVD1 (3'b000), .PD_TRANS_TIME_FROM_P2 (12'b000000111100), .PD_TRANS_TIME_NONE_P2 (8'b00011001), .PD_TRANS_TIME_TO_P2 (8'b01100100), .PLL_SEL_MODE_GEN12 (2'b11), .PLL_SEL_MODE_GEN3 (2'b11), .PMA_RSV1 (16'b0001000000000000), .PROCESS_PAR (3'b010), .RATE_SW_USE_DRP (1'b0), .RESET_POWERSAVE_DISABLE (1'b0), .RXBUFRESET_TIME (5'b00011), .RXBUF_ADDR_MODE ("FAST"), .RXBUF_EIDLE_HI_CNT (4'b1000), .RXBUF_EIDLE_LO_CNT (4'b0000), .RXBUF_EN ("TRUE"), .RXBUF_RESET_ON_CB_CHANGE ("TRUE"), .RXBUF_RESET_ON_COMMAALIGN ("FALSE"), .RXBUF_RESET_ON_EIDLE ("FALSE"), .RXBUF_RESET_ON_RATE_CHANGE ("FALSE"), .RXBUF_THRESH_OVFLW (57), .RXBUF_THRESH_OVRD ("TRUE"), .RXBUF_THRESH_UNDFLW (3), .RXCDRFREQRESET_TIME (5'b00001), .RXCDRPHRESET_TIME (5'b00001), .RXCDR_CFG0 (16'b0000000000000000), .RXCDR_CFG0_GEN3 (16'b0000000000000000), .RXCDR_CFG1 (16'b0000000000000000), .RXCDR_CFG1_GEN3 (16'b0000000000000000), .RXCDR_CFG2 (16'b0000011101100110), .RXCDR_CFG2_GEN3 (16'b0000011101100110), .RXCDR_CFG3 (16'b0000000000000000), .RXCDR_CFG3_GEN3 (16'b0000000000000000), .RXCDR_CFG4 (16'b0000000000000000), .RXCDR_CFG4_GEN3 (16'b0000000000000000), .RXCDR_CFG5 (16'b0000000000000000), .RXCDR_CFG5_GEN3 (16'b0000000000000000), .RXCDR_FR_RESET_ON_EIDLE (1'b0), .RXCDR_HOLD_DURING_EIDLE (1'b0), .RXCDR_LOCK_CFG0 (16'b0100010010000000), .RXCDR_LOCK_CFG1 (16'b0101111111111111), .RXCDR_LOCK_CFG2 (16'b0111011111000011), .RXCDR_PH_RESET_ON_EIDLE (1'b0), .RXCFOK_CFG0 (16'b0100000000000000), .RXCFOK_CFG1 (16'b0000000001100101), .RXCFOK_CFG2 (16'b0000000000101110), .RXDFELPMRESET_TIME (7'b0001111), .RXDFELPM_KL_CFG0 (16'b0000000000000000), .RXDFELPM_KL_CFG1 (16'b0000000000000010), .RXDFELPM_KL_CFG2 (16'b0000000000000000), .RXDFE_CFG0 (16'b0000101000000000), .RXDFE_CFG1 (16'b0000000000000000), .RXDFE_GC_CFG0 (16'b0000000000000000), .RXDFE_GC_CFG1 (16'b0111100001100000), .RXDFE_GC_CFG2 (16'b0000000000000000), .RXDFE_H2_CFG0 (16'b0000000000000000), .RXDFE_H2_CFG1 (16'b0000000000000000), .RXDFE_H3_CFG0 (16'b0100000000000000), .RXDFE_H3_CFG1 (16'b0000000000000000), .RXDFE_H4_CFG0 (16'b0010000000000000), .RXDFE_H4_CFG1 (16'b0000000000000011), .RXDFE_H5_CFG0 (16'b0010000000000000), .RXDFE_H5_CFG1 (16'b0000000000000011), .RXDFE_H6_CFG0 (16'b0010000000000000), .RXDFE_H6_CFG1 (16'b0000000000000000), .RXDFE_H7_CFG0 (16'b0010000000000000), .RXDFE_H7_CFG1 (16'b0000000000000000), .RXDFE_H8_CFG0 (16'b0010000000000000), .RXDFE_H8_CFG1 (16'b0000000000000000), .RXDFE_H9_CFG0 (16'b0010000000000000), .RXDFE_H9_CFG1 (16'b0000000000000000), .RXDFE_HA_CFG0 (16'b0010000000000000), .RXDFE_HA_CFG1 (16'b0000000000000000), .RXDFE_HB_CFG0 (16'b0010000000000000), .RXDFE_HB_CFG1 (16'b0000000000000000), .RXDFE_HC_CFG0 (16'b0000000000000000), .RXDFE_HC_CFG1 (16'b0000000000000000), .RXDFE_HD_CFG0 (16'b0000000000000000), .RXDFE_HD_CFG1 (16'b0000000000000000), .RXDFE_HE_CFG0 (16'b0000000000000000), .RXDFE_HE_CFG1 (16'b0000000000000000), .RXDFE_HF_CFG0 (16'b0000000000000000), .RXDFE_HF_CFG1 (16'b0000000000000000), .RXDFE_OS_CFG0 (16'b1000000000000000), .RXDFE_OS_CFG1 (16'b0000000000000000), .RXDFE_UT_CFG0 (16'b1000000000000000), .RXDFE_UT_CFG1 (16'b0000000000000011), .RXDFE_VP_CFG0 (16'b1010101000000000), .RXDFE_VP_CFG1 (16'b0000000000110011), .RXDLY_CFG (16'b0000000000011111), .RXDLY_LCFG (16'b0000000000110000), .RXELECIDLE_CFG ("Sigcfg_4"), .RXGBOX_FIFO_INIT_RD_ADDR (4), .RXGEARBOX_EN ("FALSE"), .RXISCANRESET_TIME (5'b00001), .RXLPM_CFG (16'b0000000000000000), .RXLPM_GC_CFG (16'b0000000000000000), .RXLPM_KH_CFG0 (16'b0000000000000000), .RXLPM_KH_CFG1 (16'b0000000000000010), .RXLPM_OS_CFG0 (16'b1000000000000000), .RXLPM_OS_CFG1 (16'b0000000000000010), .RXOOB_CFG (9'b000000110), .RXOOB_CLK_CFG ("PMA"), .RXOSCALRESET_TIME (5'b00011), .RXOUT_DIV (RX_OUT_DIV), .RXPCSRESET_TIME (5'b00011), .RXPHBEACON_CFG (16'b0000000000000000), .RXPHDLY_CFG (16'b0010000000100000), .RXPHSAMP_CFG (16'b0010000100000000), .RXPHSLIP_CFG (16'b0110011000100010), .RXPH_MONITOR_SEL (5'b00000), .RXPI_CFG0 (2'b00), .RXPI_CFG1 (2'b00), .RXPI_CFG2 (2'b00), .RXPI_CFG3 (2'b00), .RXPI_CFG4 (1'b0), .RXPI_CFG5 (1'b1), .RXPI_CFG6 (3'b000), .RXPI_LPM (1'b0), .RXPI_VREFSEL (1'b0), .RXPMACLK_SEL ("DATA"), .RXPMARESET_TIME (5'b00011), .RXPRBS_ERR_LOOPBACK (1'b0), .RXPRBS_LINKACQ_CNT (15), .RXSLIDE_AUTO_WAIT (7), .RXSLIDE_MODE ("OFF"), .RXSYNC_MULTILANE (1'b1), .RXSYNC_OVRD (1'b0), .RXSYNC_SKIP_DA (1'b0), .RX_AFE_CM_EN (1'b0), .RX_BIAS_CFG0 (16'b0000101010110100), .RX_BUFFER_CFG (6'b000000), .RX_CAPFF_SARC_ENB (1'b0), .RX_CLK25_DIV (RX_CLK25_DIV), .RX_CLKMUX_EN (1'b1), .RX_CLK_SLIP_OVRD (5'b00000), .RX_CM_BUF_CFG (4'b1010), .RX_CM_BUF_PD (1'b0), .RX_CM_SEL (2'b11), .RX_CM_TRIM (4'b1010), .RX_CTLE3_LPF (8'b00000001), .RX_DATA_WIDTH (40), .RX_DDI_SEL (6'b000000), .RX_DEFER_RESET_BUF_EN ("TRUE"), .RX_DFELPM_CFG0 (4'b0110), .RX_DFELPM_CFG1 (1'b1), .RX_DFELPM_KLKH_AGC_STUP_EN (1'b1), .RX_DFE_AGC_CFG0 (2'b10), .RX_DFE_AGC_CFG1 (3'b100), .RX_DFE_KL_LPM_KH_CFG0 (2'b01), .RX_DFE_KL_LPM_KH_CFG1 (3'b100), .RX_DFE_KL_LPM_KL_CFG0 (2'b01), .RX_DFE_KL_LPM_KL_CFG1 (3'b100), .RX_DFE_LPM_HOLD_DURING_EIDLE (1'b0), .RX_DISPERR_SEQ_MATCH ("TRUE"), .RX_DIVRESET_TIME (5'b00001), .RX_EN_HI_LR (1'b1), .RX_EYESCAN_VS_CODE (7'b0000000), .RX_EYESCAN_VS_NEG_DIR (1'b0), .RX_EYESCAN_VS_RANGE (2'b00), .RX_EYESCAN_VS_UT_SIGN (1'b0), .RX_FABINT_USRCLK_FLOP (1'b0), .RX_INT_DATAWIDTH (1), .RX_PMA_POWER_SAVE (1'b0), .RX_PROGDIV_CFG (20.0), .RX_SAMPLE_PERIOD (3'b101), .RX_SIG_VALID_DLY (11), .RX_SUM_DFETAPREP_EN (1'b0), .RX_SUM_IREF_TUNE (4'b0000), .RX_SUM_RES_CTRL (2'b00), .RX_SUM_VCMTUNE (4'b0000), .RX_SUM_VCM_OVWR (1'b0), .RX_SUM_VREF_TUNE (3'b000), .RX_TUNE_AFE_OS (2'b10), .RX_WIDEMODE_CDR (1'b1), .RX_XCLK_SEL ("RXDES"), .SAS_MAX_COM (64), .SAS_MIN_COM (36), .SATA_BURST_SEQ_LEN (4'b1111), .SATA_BURST_VAL (3'b100), .SATA_CPLL_CFG ("VCO_3000MHZ"), .SATA_EIDLE_VAL (3'b100), .SATA_MAX_BURST (8), .SATA_MAX_INIT (21), .SATA_MAX_WAKE (7), .SATA_MIN_BURST (4), .SATA_MIN_INIT (12), .SATA_MIN_WAKE (4), .SHOW_REALIGN_COMMA ("TRUE"), .SIM_RECEIVER_DETECT_PASS ("TRUE"), .SIM_RESET_SPEEDUP ("TRUE"), .SIM_TX_EIDLE_DRIVE_LEVEL (1'b0), .SIM_VERSION (2), .TAPDLY_SET_TX (2'b00), .TEMPERATUR_PAR (4'b0010), .TERM_RCAL_CFG (15'b100001000010000), .TERM_RCAL_OVRD (3'b000), .TRANS_TIME_RATE (8'b00001110), .TST_RSV0 (8'b00000000), .TST_RSV1 (8'b00000000), .TXBUF_EN ("TRUE"), .TXBUF_RESET_ON_RATE_CHANGE ("TRUE"), .TXDLY_CFG (16'b0000000000001001), .TXDLY_LCFG (16'b0000000001010000), .TXDRVBIAS_N (4'b1010), .TXDRVBIAS_P (4'b1010), .TXFIFO_ADDR_CFG ("LOW"), .TXGBOX_FIFO_INIT_RD_ADDR (4), .TXGEARBOX_EN ("FALSE"), .TXOUT_DIV (TX_OUT_DIV), .TXPCSRESET_TIME (5'b00011), .TXPHDLY_CFG0 (16'b0010000000100000), .TXPHDLY_CFG1 (16'b0000000011010101), .TXPH_CFG (16'b0000100110000000), .TXPH_MONITOR_SEL (5'b00000), .TXPI_CFG0 (2'b00), .TXPI_CFG1 (2'b00), .TXPI_CFG2 (2'b00), .TXPI_CFG3 (1'b0), .TXPI_CFG4 (1'b1), .TXPI_CFG5 (3'b000), .TXPI_GRAY_SEL (1'b0), .TXPI_INVSTROBE_SEL (1'b0), .TXPI_LPM (1'b0), .TXPI_PPMCLK_SEL ("TXUSRCLK2"), .TXPI_PPM_CFG (8'b00000000), .TXPI_SYNFREQ_PPM (3'b000), .TXPI_VREFSEL (1'b0), .TXPMARESET_TIME (5'b00011), .TXSYNC_MULTILANE (1'b1), .TXSYNC_OVRD (1'b0), .TXSYNC_SKIP_DA (1'b0), .TX_CLK25_DIV (TX_CLK25_DIV), .TX_CLKMUX_EN (1'b1), .TX_DATA_WIDTH (40), .TX_DCD_CFG (6'b000010), .TX_DCD_EN (1'b0), .TX_DEEMPH0 (6'b000000), .TX_DEEMPH1 (6'b000000), .TX_DIVRESET_TIME (5'b00001), .TX_DRIVE_MODE ("DIRECT"), .TX_EIDLE_ASSERT_DELAY (3'b100), .TX_EIDLE_DEASSERT_DELAY (3'b011), .TX_EML_PHI_TUNE (1'b0), .TX_FABINT_USRCLK_FLOP (1'b0), .TX_IDLE_DATA_ZERO (1'b0), .TX_INT_DATAWIDTH (1), .TX_LOOPBACK_DRIVE_HIZ ("FALSE"), .TX_MAINCURSOR_SEL (1'b0), .TX_MARGIN_FULL_0 (7'b1001111), .TX_MARGIN_FULL_1 (7'b1001110), .TX_MARGIN_FULL_2 (7'b1001100), .TX_MARGIN_FULL_3 (7'b1001010), .TX_MARGIN_FULL_4 (7'b1001000), .TX_MARGIN_LOW_0 (7'b1000110), .TX_MARGIN_LOW_1 (7'b1000101), .TX_MARGIN_LOW_2 (7'b1000011), .TX_MARGIN_LOW_3 (7'b1000010), .TX_MARGIN_LOW_4 (7'b1000000), .TX_MODE_SEL (3'b000), .TX_PMADATA_OPT (1'b0), .TX_PMA_POWER_SAVE (1'b0), .TX_PROGCLK_SEL ("PREPI"), .TX_PROGDIV_CFG (20.0), .TX_QPI_STATUS_EN (1'b0), .TX_RXDETECT_CFG (14'b00000000110010), .TX_RXDETECT_REF (3'b100), .TX_SAMPLE_PERIOD (3'b101), .TX_SARC_LPBK_ENB (1'b0), .TX_XCLK_SEL ("TXOUT"), .USE_PCS_CLK_PHASE_SEL (1'b0), .WB_MODE (2'b00)) i_gthe3_channel ( .CFGRESET (1'd0), .CLKRSVD0 (1'd0), .CLKRSVD1 (1'd0), .CPLLLOCKDETCLK (up_clk), .CPLLLOCKEN (1'd1), .CPLLPD (cpll_pd), .CPLLREFCLKSEL (3'b001), .CPLLRESET (cpll_rst), .DMONFIFORESET (1'd0), .DMONITORCLK (1'd0), .DRPADDR (up_drp_addr[8:0]), .DRPCLK (up_clk), .DRPDI (up_drp_wdata), .DRPEN (up_drp_sel), .DRPWE (up_drp_wr), .EVODDPHICALDONE (1'd0), .EVODDPHICALSTART (1'd0), .EVODDPHIDRDEN (1'd0), .EVODDPHIDWREN (1'd0), .EVODDPHIXRDEN (1'd0), .EVODDPHIXWREN (1'd0), .EYESCANMODE (1'd0), .EYESCANRESET (1'd0), .EYESCANTRIGGER (1'd0), .GTGREFCLK (1'd0), .GTHRXN (rx_n), .GTHRXP (rx_p), .GTNORTHREFCLK0 (1'd0), .GTNORTHREFCLK1 (1'd0), .GTREFCLK0 (cpll_ref_clk_in), .GTREFCLK1 (1'd0), .GTRESETSEL (1'd0), .GTRSVD (15'd0), .GTRXRESET (rx_gt_rst_m), .GTSOUTHREFCLK0 (1'd0), .GTSOUTHREFCLK1 (1'd0), .GTTXRESET (tx_gt_rst_m), .LOOPBACK (3'd0), .LPBKRXTXSEREN (1'd0), .LPBKTXRXSEREN (1'd0), .PCIEEQRXEQADAPTDONE (1'd0), .PCIERSTIDLE (1'd0), .PCIERSTTXSYNCSTART (1'd0), .PCIEUSERRATEDONE (1'd0), .PCSRSVDIN (16'd0), .PCSRSVDIN2 (5'd0), .PMARSVDIN (5'd0), .QPLL0CLK (qpll_clk), .QPLL0REFCLK (qpll_ref_clk), .QPLL1CLK (1'd0), .QPLL1REFCLK (1'd0), .RESETOVRD (1'd0), .RSTCLKENTX (1'd0), .RXBUFRESET (1'd0), .RXCDRFREQRESET (1'd0), .RXCDRHOLD (1'd0), .RXCDROVRDEN (1'd0), .RXCDRRESET (1'd0), .RXCDRRESETRSV (1'd0), .RXCHBONDEN (1'd0), .RXCHBONDI (5'd0), .RXCHBONDLEVEL (2'd0), .RXCHBONDMASTER (1'd0), .RXCHBONDSLAVE (1'd0), .RXCOMMADETEN (1'd1), .RXDFEAGCCTRL (2'b01), .RXDFEAGCHOLD (1'd0), .RXDFEAGCOVRDEN (1'd0), .RXDFELFHOLD (1'd0), .RXDFELFOVRDEN (1'd0), .RXDFELPMRESET (1'd0), .RXDFETAP10HOLD (1'd0), .RXDFETAP10OVRDEN (1'd0), .RXDFETAP11HOLD (1'd0), .RXDFETAP11OVRDEN (1'd0), .RXDFETAP12HOLD (1'd0), .RXDFETAP12OVRDEN (1'd0), .RXDFETAP13HOLD (1'd0), .RXDFETAP13OVRDEN (1'd0), .RXDFETAP14HOLD (1'd0), .RXDFETAP14OVRDEN (1'd0), .RXDFETAP15HOLD (1'd0), .RXDFETAP15OVRDEN (1'd0), .RXDFETAP2HOLD (1'd0), .RXDFETAP2OVRDEN (1'd0), .RXDFETAP3HOLD (1'd0), .RXDFETAP3OVRDEN (1'd0), .RXDFETAP4HOLD (1'd0), .RXDFETAP4OVRDEN (1'd0), .RXDFETAP5HOLD (1'd0), .RXDFETAP5OVRDEN (1'd0), .RXDFETAP6HOLD (1'd0), .RXDFETAP6OVRDEN (1'd0), .RXDFETAP7HOLD (1'd0), .RXDFETAP7OVRDEN (1'd0), .RXDFETAP8HOLD (1'd0), .RXDFETAP8OVRDEN (1'd0), .RXDFETAP9HOLD (1'd0), .RXDFETAP9OVRDEN (1'd0), .RXDFEUTHOLD (1'd0), .RXDFEUTOVRDEN (1'd0), .RXDFEVPHOLD (1'd0), .RXDFEVPOVRDEN (1'd0), .RXDFEVSEN (1'd0), .RXDFEXYDEN (1'd1), .RXDLYBYPASS (1'd1), .RXDLYEN (1'd0), .RXDLYOVRDEN (1'd0), .RXDLYSRESET (1'd0), .RXELECIDLEMODE (2'b11), .RXGEARBOXSLIP (1'd0), .RXLATCLK (1'd0), .RXLPMEN (lpm_dfe_n), .RXLPMGCHOLD (1'd0), .RXLPMGCOVRDEN (1'd0), .RXLPMHFHOLD (1'd0), .RXLPMHFOVRDEN (1'd0), .RXLPMLFHOLD (1'd0), .RXLPMLFKLOVRDEN (1'd0), .RXLPMOSHOLD (1'd0), .RXLPMOSOVRDEN (1'd0), .RXMCOMMAALIGNEN (rx_gt_comma_align_enb), .RXMONITORSEL (2'd0), .RXOOBRESET (1'd0), .RXOSCALRESET (1'd0), .RXOSHOLD (1'd0), .RXOSINTCFG (4'b1101), .RXOSINTEN (1'd1), .RXOSINTHOLD (1'd0), .RXOSINTOVRDEN (1'd0), .RXOSINTSTROBE (1'd0), .RXOSINTTESTOVRDEN (1'd0), .RXOSOVRDEN (1'd0), .RXOUTCLKSEL (rx_out_clk_sel), .RXPCOMMAALIGNEN (rx_gt_comma_align_enb), .RXPCSRESET (1'd0), .RXPD (2'd0), .RXPHALIGN (1'd0), .RXPHALIGNEN (1'd0), .RXPHDLYPD (1'd1), .RXPHDLYRESET (1'd0), .RXPHOVRDEN (1'd0), .RXPLLCLKSEL (rx_pll_clk_sel_s), .RXPMARESET (1'd0), .RXPOLARITY (1'd0), .RXPRBSCNTRESET (1'd0), .RXPRBSSEL (4'd0), .RXPROGDIVRESET (1'd0), .RXQPIEN (1'd0), .RXRATE (rx_rate_p_s), .RXRATEMODE (1'd0), .RXSLIDE (1'd0), .RXSLIPOUTCLK (1'd0), .RXSLIPPMA (1'd0), .RXSYNCALLIN (1'd0), .RXSYNCIN (1'd0), .RXSYNCMODE (1'd0), .RXSYSCLKSEL (rx_sys_clk_sel_s), .RXUSERRDY (rx_user_ready_m), .RXUSRCLK (rx_clk), .RXUSRCLK2 (rx_clk), .RX8B10BEN (1'd1), .SIGVALIDCLK (1'd0), .TSTIN (20'd0), .TXBUFDIFFCTRL (3'd0), .TXCOMINIT (1'd0), .TXCOMSAS (1'd0), .TXCOMWAKE (1'd0), .TXCTRL0 (16'd0), .TXCTRL1 (16'd0), .TXCTRL2 ({4'd0, tx_gt_charisk}), .TXDATA ({32'd0, tx_gt_data}), .TXDATAEXTENDRSVD (8'd0), .TXDEEMPH (1'd0), .TXDETECTRX (1'd0), .TXDIFFCTRL (4'b1100), .TXDIFFPD (1'd0), .TXDLYBYPASS (1'd1), .TXDLYEN (1'd0), .TXDLYHOLD (1'd0), .TXDLYOVRDEN (1'd0), .TXDLYSRESET (1'd0), .TXDLYUPDOWN (1'd0), .TXELECIDLE (1'd0), .TXHEADER (6'd0), .TXINHIBIT (1'd0), .TXLATCLK (1'd0), .TXMAINCURSOR (7'b1000000), .TXMARGIN (3'd0), .TXOUTCLKSEL (tx_out_clk_sel), .TXPCSRESET (1'd0), .TXPD (2'd0), .TXPDELECIDLEMODE (1'd0), .TXPHALIGN (1'd0), .TXPHALIGNEN (1'd0), .TXPHDLYPD (1'd1), .TXPHDLYRESET (1'd0), .TXPHDLYTSTCLK (1'd0), .TXPHINIT (1'd0), .TXPHOVRDEN (1'd0), .TXPIPPMEN (1'd0), .TXPIPPMOVRDEN (1'd0), .TXPIPPMPD (1'd0), .TXPIPPMSEL (1'd0), .TXPIPPMSTEPSIZE (5'd0), .TXPISOPD (1'd0), .TXPLLCLKSEL (tx_pll_clk_sel_s), .TXPMARESET (1'd0), .TXPOLARITY (1'd0), .TXPOSTCURSOR (5'd0), .TXPOSTCURSORINV (1'd0), .TXPRBSFORCEERR (1'd0), .TXPRBSSEL (4'd0), .TXPRECURSOR (5'd0), .TXPRECURSORINV (1'd0), .TXPROGDIVRESET (tx_gt_rst_m), .TXQPIBIASEN (1'd0), .TXQPISTRONGPDOWN (1'd0), .TXQPIWEAKPUP (1'd0), .TXRATE (3'd0), .TXRATEMODE (1'd0), .TXSEQUENCE (7'd0), .TXSWING (1'd0), .TXSYNCALLIN (1'd0), .TXSYNCIN (1'd0), .TXSYNCMODE (1'd0), .TXSYSCLKSEL (tx_sys_clk_sel_s), .TXUSERRDY (tx_user_ready_m), .TXUSRCLK (tx_clk), .TXUSRCLK2 (tx_clk), .TX8B10BBYPASS (8'd0), .TX8B10BEN (1'd1), .BUFGTCE (), .BUFGTCEMASK (), .BUFGTDIV (), .BUFGTRESET (), .BUFGTRSTMASK (), .CPLLFBCLKLOST (), .CPLLLOCK (cpll_locked_s), .CPLLREFCLKLOST (), .DMONITOROUT (), .DRPDO (up_drp_rdata), .DRPRDY (up_drp_ready), .EYESCANDATAERROR (), .GTHTXN (tx_n), .GTHTXP (tx_p), .GTPOWERGOOD (), .GTREFCLKMONITOR (), .PCIERATEGEN3 (), .PCIERATEIDLE (), .PCIERATEQPLLPD (), .PCIERATEQPLLRESET (), .PCIESYNCTXSYNCDONE (), .PCIEUSERGEN3RDY (), .PCIEUSERPHYSTATUSRST (), .PCIEUSERRATESTART (), .PCSRSVDOUT (), .PHYSTATUS (), .PINRSRVDAS (), .RESETEXCEPTION (), .RXBUFSTATUS (), .RXBYTEISALIGNED (), .RXBYTEREALIGN (), .RXCDRLOCK (), .RXCDRPHDONE (), .RXCHANBONDSEQ (), .RXCHANISALIGNED (), .RXCHANREALIGN (), .RXCHBONDO (), .RXCLKCORCNT (), .RXCOMINITDET (), .RXCOMMADET (), .RXCOMSASDET (), .RXCOMWAKEDET (), .RXCTRL0 ({rx_charisk_open_s, rx_gt_charisk}), .RXCTRL1 ({rx_disperr_open_s, rx_gt_disperr}), .RXCTRL2 (), .RXCTRL3 ({rx_notintable_open_s, rx_gt_notintable}), .RXDATA ({rx_data_open_s, rx_gt_data}), .RXDATAEXTENDRSVD (), .RXDATAVALID (), .RXDLYSRESETDONE (), .RXELECIDLE (), .RXHEADER (), .RXHEADERVALID (), .RXMONITOROUT (), .RXOSINTDONE (), .RXOSINTSTARTED (), .RXOSINTSTROBEDONE (), .RXOSINTSTROBESTARTED (), .RXOUTCLK (rx_out_clk_s), .RXOUTCLKFABRIC (), .RXOUTCLKPCS (), .RXPHALIGNDONE (), .RXPHALIGNERR (), .RXPMARESETDONE (), .RXPRBSERR (), .RXPRBSLOCKED (), .RXPRGDIVRESETDONE (), .RXQPISENN (), .RXQPISENP (), .RXRATEDONE (), .RXRECCLKOUT (), .RXRESETDONE (rx_rst_done), .RXSLIDERDY (), .RXSLIPDONE (), .RXSLIPOUTCLKRDY (), .RXSLIPPMARDY (), .RXSTARTOFSEQ (), .RXSTATUS (), .RXSYNCDONE (), .RXSYNCOUT (), .RXVALID (), .TXBUFSTATUS (), .TXCOMFINISH (), .TXDLYSRESETDONE (), .TXOUTCLK (tx_out_clk_s), .TXOUTCLKFABRIC (), .TXOUTCLKPCS (), .TXPHALIGNDONE (), .TXPHINITDONE (), .TXPMARESETDONE (), .TXPRGDIVRESETDONE (), .TXQPISENN (), .TXQPISENP (), .TXRATEDONE (), .TXRESETDONE (tx_rst_done), .TXSYNCDONE (), .TXSYNCOUT ()); end endgenerate endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_gt_channel_1.v000066400000000000000000000347401457144405000274530ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** `timescale 1ns/1ps module ad_gt_channel_1 ( // channel interface (pll) cpll_rst_m, cpll_ref_clk_in, qpll_ref_clk, qpll_locked, qpll_clk, // channel interface (rx) rx_p, rx_n, rx_out_clk, rx_clk, rx_rst, rx_rst_m, rx_sof, rx_data, rx_sysref, rx_sync, rx_pll_rst, rx_gt_rst, rx_gt_rst_m, rx_gt_charisk, rx_gt_disperr, rx_gt_notintable, rx_gt_data, rx_gt_comma_align_enb, rx_gt_ilas_f, rx_gt_ilas_q, rx_gt_ilas_a, rx_gt_ilas_r, rx_gt_cgs_k, rx_ip_rst, rx_ip_sof, rx_ip_data, rx_ip_sysref, rx_ip_sync, rx_ip_rst_done, rx_pll_locked, rx_user_ready, rx_rst_done, rx_pll_locked_m, rx_user_ready_m, rx_rst_done_m, // channel interface (tx) tx_p, tx_n, tx_out_clk, tx_clk, tx_rst, tx_rst_m, tx_data, tx_sysref, tx_sync, tx_pll_rst, tx_gt_rst, tx_gt_rst_m, tx_gt_charisk, tx_gt_data, tx_ip_rst, tx_ip_data, tx_ip_sysref, tx_ip_sync, tx_ip_rst_done, tx_pll_locked, tx_user_ready, tx_rst_done, tx_pll_locked_m, tx_user_ready_m, tx_rst_done_m, // dma interface up_es_dma_req, up_es_dma_addr, up_es_dma_data, up_es_dma_ack, up_es_dma_err, // bus interface up_rstn, up_clk, up_wreq, up_waddr, up_wdata, up_wack, up_rreq, up_raddr, up_rdata, up_rack); // parameters parameter integer ID = 0; parameter integer GTH_OR_GTX_N = 0; parameter [31:0] PMA_RSV = 32'h00018480; parameter integer CPLL_FBDIV = 2; parameter integer RX_OUT_DIV = 1; parameter integer RX_CLK25_DIV = 10; parameter integer RX_CLKBUF_ENABLE = 0; parameter [72:0] RX_CDR_CFG = 72'h03000023ff20400020; parameter integer TX_OUT_DIV = 1; parameter integer TX_CLK25_DIV = 10; parameter integer TX_CLKBUF_ENABLE = 0; // channel interface (pll) input cpll_rst_m; input cpll_ref_clk_in; input qpll_ref_clk; input qpll_locked; input qpll_clk; // channel interface (rx) input rx_p; input rx_n; output rx_out_clk; input rx_clk; output rx_rst; input rx_rst_m; output rx_sof; output [31:0] rx_data; input rx_sysref; output rx_sync; output rx_pll_rst; output rx_gt_rst; input rx_gt_rst_m; output [ 3:0] rx_gt_charisk; output [ 3:0] rx_gt_disperr; output [ 3:0] rx_gt_notintable; output [31:0] rx_gt_data; input rx_gt_comma_align_enb; output [ 3:0] rx_gt_ilas_f; output [ 3:0] rx_gt_ilas_q; output [ 3:0] rx_gt_ilas_a; output [ 3:0] rx_gt_ilas_r; output [ 3:0] rx_gt_cgs_k; output rx_ip_rst; input [ 3:0] rx_ip_sof; input [31:0] rx_ip_data; output rx_ip_sysref; input rx_ip_sync; output rx_ip_rst_done; output rx_pll_locked; output rx_user_ready; output rx_rst_done; input rx_pll_locked_m; input rx_user_ready_m; input rx_rst_done_m; // channel interface (tx) output tx_p; output tx_n; output tx_out_clk; input tx_clk; output tx_rst; input tx_rst_m; input [31:0] tx_data; input tx_sysref; input tx_sync; output tx_pll_rst; output tx_gt_rst; input tx_gt_rst_m; input [ 3:0] tx_gt_charisk; input [31:0] tx_gt_data; output tx_ip_rst; output [31:0] tx_ip_data; output tx_ip_sysref; output tx_ip_sync; output tx_ip_rst_done; output tx_pll_locked; output tx_user_ready; output tx_rst_done; input tx_pll_locked_m; input tx_user_ready_m; input tx_rst_done_m; // dma interface output up_es_dma_req; output [31:0] up_es_dma_addr; output [31:0] up_es_dma_data; input up_es_dma_ack; input up_es_dma_err; // bus interface input up_rstn; input up_clk; input up_wreq; input [13:0] up_waddr; input [31:0] up_wdata; output up_wack; input up_rreq; input [13:0] up_raddr; output [31:0] up_rdata; output up_rack; // internal signals wire lpm_dfe_n_s; wire cpll_pd_s; wire [ 1:0] rx_sys_clk_sel_s; wire [ 2:0] rx_out_clk_sel_s; wire [ 1:0] tx_sys_clk_sel_s; wire [ 2:0] tx_out_clk_sel_s; wire up_drp_sel_s; wire up_drp_wr_s; wire [11:0] up_drp_addr_s; wire [15:0] up_drp_wdata_s; wire [15:0] up_drp_rdata_s; wire up_drp_ready_s; wire [ 7:0] up_drp_rxrate_s; wire up_es_drp_sel_s; wire up_es_drp_wr_s; wire [11:0] up_es_drp_addr_s; wire [15:0] up_es_drp_wdata_s; wire [15:0] up_es_drp_rdata_s; wire up_es_drp_ready_s; wire up_es_start_s; wire up_es_stop_s; wire up_es_init_s; wire [ 4:0] up_es_prescale_s; wire [ 1:0] up_es_voffset_range_s; wire [ 7:0] up_es_voffset_step_s; wire [ 7:0] up_es_voffset_max_s; wire [ 7:0] up_es_voffset_min_s; wire [11:0] up_es_hoffset_max_s; wire [11:0] up_es_hoffset_min_s; wire [11:0] up_es_hoffset_step_s; wire [31:0] up_es_start_addr_s; wire [15:0] up_es_sdata0_s; wire [15:0] up_es_sdata1_s; wire [15:0] up_es_sdata2_s; wire [15:0] up_es_sdata3_s; wire [15:0] up_es_sdata4_s; wire [15:0] up_es_qdata0_s; wire [15:0] up_es_qdata1_s; wire [15:0] up_es_qdata2_s; wire [15:0] up_es_qdata3_s; wire [15:0] up_es_qdata4_s; wire up_es_status_s; // nothing to do for now assign tx_ip_data = tx_data; // instantiations ad_jesd_align i_align ( .rx_clk (rx_clk), .rx_ip_sof (rx_ip_sof), .rx_ip_data (rx_ip_data), .rx_sof (rx_sof), .rx_data (rx_data)); ad_gt_channel #( .GTH_OR_GTX_N (GTH_OR_GTX_N), .PMA_RSV (PMA_RSV), .CPLL_FBDIV (CPLL_FBDIV), .RX_OUT_DIV (RX_OUT_DIV), .TX_OUT_DIV (TX_OUT_DIV), .RX_CLK25_DIV (RX_CLK25_DIV), .TX_CLK25_DIV (TX_CLK25_DIV), .RX_CLKBUF_ENABLE (RX_CLKBUF_ENABLE), .TX_CLKBUF_ENABLE (TX_CLKBUF_ENABLE), .RX_CDR_CFG (RX_CDR_CFG)) i_gt ( .lpm_dfe_n (lpm_dfe_n_s), .cpll_ref_clk_in (cpll_ref_clk_in), .cpll_pd (cpll_pd_s), .cpll_rst (cpll_rst_m), .qpll_clk (qpll_clk), .qpll_ref_clk (qpll_ref_clk), .qpll_locked (qpll_locked), .rx_gt_rst_m (rx_gt_rst_m), .rx_p (rx_p), .rx_n (rx_n), .rx_sys_clk_sel (rx_sys_clk_sel_s), .rx_out_clk_sel (rx_out_clk_sel_s), .rx_out_clk (rx_out_clk), .rx_rst_done (rx_rst_done), .rx_pll_locked (rx_pll_locked), .rx_user_ready_m (rx_user_ready_m), .rx_clk (rx_clk), .rx_gt_charisk (rx_gt_charisk), .rx_gt_disperr (rx_gt_disperr), .rx_gt_notintable (rx_gt_notintable), .rx_gt_data (rx_gt_data), .rx_gt_comma_align_enb (rx_gt_comma_align_enb), .rx_gt_ilas_f (rx_gt_ilas_f), .rx_gt_ilas_q (rx_gt_ilas_q), .rx_gt_ilas_a (rx_gt_ilas_a), .rx_gt_ilas_r (rx_gt_ilas_r), .rx_gt_cgs_k (rx_gt_cgs_k), .tx_gt_rst_m (tx_gt_rst_m), .tx_p (tx_p), .tx_n (tx_n), .tx_sys_clk_sel (tx_sys_clk_sel_s), .tx_out_clk_sel (tx_out_clk_sel_s), .tx_out_clk (tx_out_clk), .tx_rst_done (tx_rst_done), .tx_pll_locked (tx_pll_locked), .tx_user_ready_m (tx_user_ready_m), .tx_clk (tx_clk), .tx_gt_charisk (tx_gt_charisk), .tx_gt_data (tx_gt_data), .up_clk (up_clk), .up_drp_sel (up_drp_sel_s), .up_drp_addr (up_drp_addr_s), .up_drp_wr (up_drp_wr_s), .up_drp_wdata (up_drp_wdata_s), .up_drp_rdata (up_drp_rdata_s), .up_drp_ready (up_drp_ready_s), .up_drp_rxrate (up_drp_rxrate_s)); ad_gt_es #( .GTH_OR_GTX_N (GTH_OR_GTX_N)) i_es ( .lpm_dfe_n (lpm_dfe_n_s), .up_rstn (up_rstn), .up_clk (up_clk), .up_es_drp_sel (up_es_drp_sel_s), .up_es_drp_wr (up_es_drp_wr_s), .up_es_drp_addr (up_es_drp_addr_s), .up_es_drp_wdata (up_es_drp_wdata_s), .up_es_drp_rdata (up_es_drp_rdata_s), .up_es_drp_ready (up_es_drp_ready_s), .up_es_dma_req (up_es_dma_req), .up_es_dma_addr (up_es_dma_addr), .up_es_dma_data (up_es_dma_data), .up_es_dma_ack (up_es_dma_ack), .up_es_start (up_es_start_s), .up_es_stop (up_es_stop_s), .up_es_init (up_es_init_s), .up_es_sdata0 (up_es_sdata0_s), .up_es_sdata1 (up_es_sdata1_s), .up_es_sdata2 (up_es_sdata2_s), .up_es_sdata3 (up_es_sdata3_s), .up_es_sdata4 (up_es_sdata4_s), .up_es_qdata0 (up_es_qdata0_s), .up_es_qdata1 (up_es_qdata1_s), .up_es_qdata2 (up_es_qdata2_s), .up_es_qdata3 (up_es_qdata3_s), .up_es_qdata4 (up_es_qdata4_s), .up_es_prescale (up_es_prescale_s), .up_es_hoffset_min (up_es_hoffset_min_s), .up_es_hoffset_max (up_es_hoffset_max_s), .up_es_hoffset_step (up_es_hoffset_step_s), .up_es_voffset_min (up_es_voffset_min_s), .up_es_voffset_max (up_es_voffset_max_s), .up_es_voffset_step (up_es_voffset_step_s), .up_es_voffset_range (up_es_voffset_range_s), .up_es_start_addr (up_es_start_addr_s), .up_es_status (up_es_status_s)); up_gt_channel #( .ID (ID)) i_up ( .lpm_dfe_n (lpm_dfe_n_s), .cpll_pd (cpll_pd_s), .rx_pll_rst (rx_pll_rst), .rx_sys_clk_sel (rx_sys_clk_sel_s), .rx_out_clk_sel (rx_out_clk_sel_s), .rx_clk (rx_clk), .rx_gt_rst (rx_gt_rst), .rx_rst (rx_rst), .rx_rst_m (rx_rst_m), .rx_ip_rst (rx_ip_rst), .rx_sysref (rx_sysref), .rx_ip_sysref (rx_ip_sysref), .rx_ip_sync (rx_ip_sync), .rx_sync (rx_sync), .rx_rst_done (rx_rst_done), .rx_rst_done_m (rx_rst_done_m), .rx_pll_locked (rx_pll_locked), .rx_pll_locked_m (rx_pll_locked_m), .rx_user_ready (rx_user_ready), .rx_ip_rst_done (rx_ip_rst_done), .tx_pll_rst (tx_pll_rst), .tx_sys_clk_sel (tx_sys_clk_sel_s), .tx_out_clk_sel (tx_out_clk_sel_s), .tx_clk (tx_clk), .tx_gt_rst (tx_gt_rst), .tx_rst (tx_rst), .tx_rst_m (tx_rst_m), .tx_ip_rst (tx_ip_rst), .tx_sysref (tx_sysref), .tx_ip_sysref (tx_ip_sysref), .tx_sync (tx_sync), .tx_ip_sync (tx_ip_sync), .tx_rst_done (tx_rst_done), .tx_rst_done_m (tx_rst_done_m), .tx_pll_locked (tx_pll_locked), .tx_pll_locked_m (tx_pll_locked_m), .tx_user_ready (tx_user_ready), .tx_ip_rst_done (tx_ip_rst_done), .up_drp_sel (up_drp_sel_s), .up_drp_wr (up_drp_wr_s), .up_drp_addr (up_drp_addr_s), .up_drp_wdata (up_drp_wdata_s), .up_drp_rdata (up_drp_rdata_s), .up_drp_ready (up_drp_ready_s), .up_drp_rxrate (up_drp_rxrate_s), .up_es_drp_sel (up_es_drp_sel_s), .up_es_drp_wr (up_es_drp_wr_s), .up_es_drp_addr (up_es_drp_addr_s), .up_es_drp_wdata (up_es_drp_wdata_s), .up_es_drp_rdata (up_es_drp_rdata_s), .up_es_drp_ready (up_es_drp_ready_s), .up_es_start (up_es_start_s), .up_es_stop (up_es_stop_s), .up_es_init (up_es_init_s), .up_es_prescale (up_es_prescale_s), .up_es_voffset_range (up_es_voffset_range_s), .up_es_voffset_step (up_es_voffset_step_s), .up_es_voffset_max (up_es_voffset_max_s), .up_es_voffset_min (up_es_voffset_min_s), .up_es_hoffset_max (up_es_hoffset_max_s), .up_es_hoffset_min (up_es_hoffset_min_s), .up_es_hoffset_step (up_es_hoffset_step_s), .up_es_start_addr (up_es_start_addr_s), .up_es_sdata0 (up_es_sdata0_s), .up_es_sdata1 (up_es_sdata1_s), .up_es_sdata2 (up_es_sdata2_s), .up_es_sdata3 (up_es_sdata3_s), .up_es_sdata4 (up_es_sdata4_s), .up_es_qdata0 (up_es_qdata0_s), .up_es_qdata1 (up_es_qdata1_s), .up_es_qdata2 (up_es_qdata2_s), .up_es_qdata3 (up_es_qdata3_s), .up_es_qdata4 (up_es_qdata4_s), .up_es_dma_err (up_es_dma_err), .up_es_status (up_es_status_s), .up_rstn (up_rstn), .up_clk (up_clk), .up_wreq (up_wreq), .up_waddr (up_waddr), .up_wdata (up_wdata), .up_wack (up_wack), .up_rreq (up_rreq), .up_raddr (up_raddr), .up_rdata (up_rdata), .up_rack (up_rack)); endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_gt_common.v000066400000000000000000000232201457144405000271020ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** `timescale 1ns/1ps module ad_gt_common ( // reset and clocks qpll_ref_clk_in, qpll_rst, qpll_clk, qpll_ref_clk, qpll_locked, // drp interface up_clk, up_drp_sel, up_drp_addr, up_drp_wr, up_drp_wdata, up_drp_rdata, up_drp_ready); // parameters parameter integer GTH_OR_GTX_N = 0; parameter integer QPLL_ENABLE = 1; parameter integer QPLL_REFCLK_DIV = 2; parameter [26:0] QPLL_CFG = 27'h06801C1; parameter integer QPLL_FBDIV_RATIO = 1'b1; parameter [ 9:0] QPLL_FBDIV = 10'b0000110000; // reset and clocks input qpll_ref_clk_in; input qpll_rst; output qpll_clk; output qpll_ref_clk; output qpll_locked; // drp interface input up_clk; input up_drp_sel; input [11:0] up_drp_addr; input up_drp_wr; input [15:0] up_drp_wdata; output [15:0] up_drp_rdata; output up_drp_ready; // instantiations generate if (QPLL_ENABLE == 0) begin assign qpll_clk = 1'd0; assign qpll_ref_clk = 1'd0; assign qpll_locked = 1'd0; assign up_drp_rdata = 16'd0; assign up_drp_ready = 1'd0; end if ((QPLL_ENABLE == 1) && (GTH_OR_GTX_N == 0)) begin GTXE2_COMMON #( .SIM_RESET_SPEEDUP ("TRUE"), .SIM_QPLLREFCLK_SEL (3'b001), .SIM_VERSION ("3.0"), .BIAS_CFG (64'h0000040000001000), .COMMON_CFG (32'h00000000), .QPLL_CFG (QPLL_CFG), .QPLL_CLKOUT_CFG (4'b0000), .QPLL_COARSE_FREQ_OVRD (6'b010000), .QPLL_COARSE_FREQ_OVRD_EN (1'b0), .QPLL_CP (10'b0000011111), .QPLL_CP_MONITOR_EN (1'b0), .QPLL_DMONITOR_SEL (1'b0), .QPLL_FBDIV (QPLL_FBDIV), .QPLL_FBDIV_MONITOR_EN (1'b0), .QPLL_FBDIV_RATIO (QPLL_FBDIV_RATIO), .QPLL_INIT_CFG (24'h000006), .QPLL_LOCK_CFG (16'h21E8), .QPLL_LPF (4'b1111), .QPLL_REFCLK_DIV (QPLL_REFCLK_DIV)) i_gtxe2_common ( .DRPCLK (up_clk), .DRPEN (up_drp_sel), .DRPADDR (up_drp_addr[7:0]), .DRPWE (up_drp_wr), .DRPDI (up_drp_wdata), .DRPDO (up_drp_rdata), .DRPRDY (up_drp_ready), .GTGREFCLK (1'd0), .GTNORTHREFCLK0 (1'd0), .GTNORTHREFCLK1 (1'd0), .GTREFCLK0 (qpll_ref_clk_in), .GTREFCLK1 (1'd0), .GTSOUTHREFCLK0 (1'd0), .GTSOUTHREFCLK1 (1'd0), .QPLLDMONITOR (), .QPLLOUTCLK (qpll_clk), .QPLLOUTREFCLK (qpll_ref_clk), .REFCLKOUTMONITOR (), .QPLLFBCLKLOST (), .QPLLLOCK (qpll_locked), .QPLLLOCKDETCLK (up_clk), .QPLLLOCKEN (1'd1), .QPLLOUTRESET (1'd0), .QPLLPD (1'd0), .QPLLREFCLKLOST (), .QPLLREFCLKSEL (3'b001), .QPLLRESET (qpll_rst), .QPLLRSVD1 (16'b0000000000000000), .QPLLRSVD2 (5'b11111), .BGBYPASSB (1'd1), .BGMONITORENB (1'd1), .BGPDB (1'd1), .BGRCALOVRD (5'b00000), .PMARSVD (8'b00000000), .RCALENB (1'd1)); end if ((QPLL_ENABLE == 1) && (GTH_OR_GTX_N == 1)) begin GTHE3_COMMON #( .SIM_RESET_SPEEDUP ("TRUE"), .SIM_VERSION (2), .SARC_EN (1'b1), .SARC_SEL (1'b0), .SDM0_DATA_PIN_SEL (1'b0), .SDM0_WIDTH_PIN_SEL (1'b0), .SDM1_DATA_PIN_SEL (1'b0), .SDM1_WIDTH_PIN_SEL (1'b0), .BIAS_CFG0 (16'b0000000000000000), .BIAS_CFG1 (16'b0000000000000000), .BIAS_CFG2 (16'b0000000000000000), .BIAS_CFG3 (16'b0000000001000000), .BIAS_CFG4 (16'b0000000000000000), .COMMON_CFG0 (16'b0000000000000000), .COMMON_CFG1 (16'b0000000000000000), .POR_CFG (16'b0000000000000100), .QPLL0_CFG0 (16'b0011000000011100), .QPLL0_CFG1 (16'b0000000000011000), .QPLL0_CFG1_G3 (16'b0000000000011000), .QPLL0_CFG2 (16'b0000000001001000), .QPLL0_CFG2_G3 (16'b0000000001001000), .QPLL0_CFG3 (16'b0000000100100000), .QPLL0_CFG4 (16'b0000000000001001), .QPLL0_INIT_CFG0 (16'b0000000000000000), .QPLL0_LOCK_CFG (16'b0010010111101000), .QPLL0_LOCK_CFG_G3 (16'b0010010111101000), .QPLL0_SDM_CFG0 (16'b0000000000000000), .QPLL0_SDM_CFG1 (16'b0000000000000000), .QPLL0_SDM_CFG2 (16'b0000000000000000), .QPLL1_CFG0 (16'b0011000000011100), .QPLL1_CFG1 (16'b0000000000011000), .QPLL1_CFG1_G3 (16'b0000000000011000), .QPLL1_CFG2 (16'b0000000001000000), .QPLL1_CFG2_G3 (16'b0000000001000000), .QPLL1_CFG3 (16'b0000000100100000), .QPLL1_CFG4 (16'b0000000000001001), .QPLL1_INIT_CFG0 (16'b0000000000000000), .QPLL1_LOCK_CFG (16'b0010010111101000), .QPLL1_LOCK_CFG_G3 (16'b0010010111101000), .QPLL1_SDM_CFG0 (16'b0000000000000000), .QPLL1_SDM_CFG1 (16'b0000000000000000), .QPLL1_SDM_CFG2 (16'b0000000000000000), .RSVD_ATTR0 (16'b0000000000000000), .RSVD_ATTR1 (16'b0000000000000000), .RSVD_ATTR2 (16'b0000000000000000), .RSVD_ATTR3 (16'b0000000000000000), .SDM0DATA1_0 (16'b0000000000000000), .SDM0INITSEED0_0 (16'b0000000000000000), .SDM1DATA1_0 (16'b0000000000000000), .SDM1INITSEED0_0 (16'b0000000000000000), .RXRECCLKOUT0_SEL (2'b00), .RXRECCLKOUT1_SEL (2'b00), .QPLL0_INIT_CFG1 (8'b00000000), .QPLL1_INIT_CFG1 (8'b00000000), .SDM0DATA1_1 (9'b000000000), .SDM0INITSEED0_1 (9'b000000000), .SDM1DATA1_1 (9'b000000000), .SDM1INITSEED0_1 (9'b000000000), .BIAS_CFG_RSVD (10'b0000000000), .QPLL0_CP (10'b0000011111), .QPLL0_CP_G3 (10'b1111111111), .QPLL0_LPF (10'b1111111111), .QPLL0_LPF_G3 (10'b0000010101), .QPLL1_CP (10'b0000011111), .QPLL1_CP_G3 (10'b1111111111), .QPLL1_LPF (10'b1111111111), .QPLL1_LPF_G3 (10'b0000010101), .QPLL0_FBDIV (QPLL_FBDIV), .QPLL0_FBDIV_G3 (80), .QPLL0_REFCLK_DIV (QPLL_REFCLK_DIV), .QPLL1_FBDIV (QPLL_FBDIV), .QPLL1_FBDIV_G3 (80), .QPLL1_REFCLK_DIV (QPLL_REFCLK_DIV)) i_gthe3_common ( .BGBYPASSB (1'd1), .BGMONITORENB (1'd1), .BGPDB (1'd1), .BGRCALOVRD (5'b11111), .BGRCALOVRDENB (1'd1), .DRPADDR (up_drp_addr[8:0]), .DRPCLK (up_clk), .DRPDI (up_drp_wdata), .DRPEN (up_drp_sel), .DRPWE (up_drp_wr), .GTGREFCLK0 (1'd0), .GTGREFCLK1 (1'd0), .GTNORTHREFCLK00 (1'd0), .GTNORTHREFCLK01 (1'd0), .GTNORTHREFCLK10 (1'd0), .GTNORTHREFCLK11 (1'd0), .GTREFCLK00 (qpll_ref_clk_in), .GTREFCLK01 (1'd0), .GTREFCLK10 (1'd0), .GTREFCLK11 (1'd0), .GTSOUTHREFCLK00 (1'd0), .GTSOUTHREFCLK01 (1'd0), .GTSOUTHREFCLK10 (1'd0), .GTSOUTHREFCLK11 (1'd0), .PMARSVD0 (8'd0), .PMARSVD1 (8'd0), .QPLLRSVD1 (8'd0), .QPLLRSVD2 (5'd0), .QPLLRSVD3 (5'd0), .QPLLRSVD4 (8'd0), .QPLL0CLKRSVD0 (1'd0), .QPLL0CLKRSVD1 (1'd0), .QPLL0LOCKDETCLK (up_clk), .QPLL0LOCKEN (1'd1), .QPLL0PD (1'd0), .QPLL0REFCLKSEL (3'b001), .QPLL0RESET (qpll_rst), .QPLL1CLKRSVD0 (1'd0), .QPLL1CLKRSVD1 (1'd0), .QPLL1LOCKDETCLK (1'd0), .QPLL1LOCKEN (1'd0), .QPLL1PD (1'd1), .QPLL1REFCLKSEL (3'b001), .QPLL1RESET (1'd1), .RCALENB (1'd1), .DRPDO (up_drp_rdata), .DRPRDY (up_drp_ready), .PMARSVDOUT0 (), .PMARSVDOUT1 (), .QPLLDMONITOR0 (), .QPLLDMONITOR1 (), .QPLL0FBCLKLOST (), .QPLL0LOCK (qpll_locked), .QPLL0OUTCLK (qpll_clk), .QPLL0OUTREFCLK (qpll_ref_clk), .QPLL0REFCLKLOST (), .QPLL1FBCLKLOST (), .QPLL1LOCK (), .QPLL1OUTCLK (), .QPLL1OUTREFCLK (), .QPLL1REFCLKLOST (), .REFCLKOUTMONITOR0 (), .REFCLKOUTMONITOR1 (), .RXRECCLK0_SEL (), .RXRECCLK1_SEL ()); end endgenerate endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_gt_common_1.v000066400000000000000000000163201457144405000273250ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** `timescale 1ns/1ps module ad_gt_common_1 ( // reset and clocks qpll0_rst, qpll0_ref_clk_in, qpll1_rst, qpll1_ref_clk_in, qpll_clk, qpll_ref_clk, qpll_locked, // bus interface up_rstn, up_clk, up_wreq, up_waddr, up_wdata, up_wack, up_rreq, up_raddr, up_rdata, up_rack); // parameters parameter integer ID = 0; parameter integer GTH_OR_GTX_N = 0; parameter integer QPLL0_ENABLE = 1; parameter integer QPLL0_REFCLK_DIV = 2; parameter [26:0] QPLL0_CFG = 27'h06801C1; parameter integer QPLL0_FBDIV_RATIO = 1'b1; parameter [ 9:0] QPLL0_FBDIV = 10'b0000110000; parameter integer QPLL1_ENABLE = 1; parameter integer QPLL1_REFCLK_DIV = 2; parameter [26:0] QPLL1_CFG = 27'h06801C1; parameter integer QPLL1_FBDIV_RATIO = 1'b1; parameter [ 9:0] QPLL1_FBDIV = 10'b0000110000; // reset and clocks input qpll0_rst; input qpll0_ref_clk_in; input qpll1_rst; input qpll1_ref_clk_in; output [ 7:0] qpll_clk; output [ 7:0] qpll_ref_clk; output [ 7:0] qpll_locked; // bus interface input up_rstn; input up_clk; input up_wreq; input [13:0] up_waddr; input [31:0] up_wdata; output up_wack; input up_rreq; input [13:0] up_raddr; output [31:0] up_rdata; output up_rack; // internal signals wire up_drp_qpll0_sel_s; wire up_drp_qpll0_wr_s; wire [11:0] up_drp_qpll0_addr_s; wire [15:0] up_drp_qpll0_wdata_s; wire [15:0] up_drp_qpll0_rdata_s; wire up_drp_qpll0_ready_s; wire up_drp_qpll1_sel_s; wire up_drp_qpll1_wr_s; wire [11:0] up_drp_qpll1_addr_s; wire [15:0] up_drp_qpll1_wdata_s; wire [15:0] up_drp_qpll1_rdata_s; wire up_drp_qpll1_ready_s; // replicate to match channels assign qpll_clk[1] = qpll_clk[0]; assign qpll_ref_clk[1] = qpll_ref_clk[0]; assign qpll_locked[1] = qpll_locked[0]; assign qpll_clk[2] = qpll_clk[0]; assign qpll_ref_clk[2] = qpll_ref_clk[0]; assign qpll_locked[2] = qpll_locked[0]; assign qpll_clk[3] = qpll_clk[0]; assign qpll_ref_clk[3] = qpll_ref_clk[0]; assign qpll_locked[3] = qpll_locked[0]; assign qpll_clk[5] = qpll_clk[4]; assign qpll_ref_clk[5] = qpll_ref_clk[4]; assign qpll_locked[5] = qpll_locked[4]; assign qpll_clk[6] = qpll_clk[4]; assign qpll_ref_clk[6] = qpll_ref_clk[4]; assign qpll_locked[6] = qpll_locked[4]; assign qpll_clk[7] = qpll_clk[4]; assign qpll_ref_clk[7] = qpll_ref_clk[4]; assign qpll_locked[7] = qpll_locked[4]; // instantiations ad_gt_common #( .GTH_OR_GTX_N (GTH_OR_GTX_N), .QPLL_ENABLE (QPLL0_ENABLE), .QPLL_REFCLK_DIV (QPLL0_REFCLK_DIV), .QPLL_CFG (QPLL0_CFG), .QPLL_FBDIV_RATIO (QPLL0_FBDIV_RATIO), .QPLL_FBDIV (QPLL0_FBDIV)) i_qpll_0 ( .qpll_ref_clk_in (qpll0_ref_clk_in), .qpll_rst (qpll0_rst), .qpll_clk (qpll_clk[0]), .qpll_ref_clk (qpll_ref_clk[0]), .qpll_locked (qpll_locked[0]), .up_clk (up_clk), .up_drp_sel (up_drp_qpll0_sel_s), .up_drp_addr (up_drp_qpll0_addr_s), .up_drp_wr (up_drp_qpll0_wr_s), .up_drp_wdata (up_drp_qpll0_wdata_s), .up_drp_rdata (up_drp_qpll0_rdata_s), .up_drp_ready (up_drp_qpll0_ready_s)); ad_gt_common #( .GTH_OR_GTX_N (GTH_OR_GTX_N), .QPLL_ENABLE (QPLL1_ENABLE), .QPLL_REFCLK_DIV (QPLL1_REFCLK_DIV), .QPLL_CFG (QPLL1_CFG), .QPLL_FBDIV_RATIO (QPLL1_FBDIV_RATIO), .QPLL_FBDIV (QPLL1_FBDIV)) i_qpll_1 ( .qpll_ref_clk_in (qpll1_ref_clk_in), .qpll_rst (qpll1_rst), .qpll_clk (qpll_clk[4]), .qpll_ref_clk (qpll_ref_clk[4]), .qpll_locked (qpll_locked[4]), .up_clk (up_clk), .up_drp_sel (up_drp_qpll1_sel_s), .up_drp_addr (up_drp_qpll1_addr_s), .up_drp_wr (up_drp_qpll1_wr_s), .up_drp_wdata (up_drp_qpll1_wdata_s), .up_drp_rdata (up_drp_qpll1_rdata_s), .up_drp_ready (up_drp_qpll1_ready_s)); up_gt #( .GTH_OR_GTX_N (GTH_OR_GTX_N)) i_up ( .up_drp_qpll0_sel (up_drp_qpll0_sel_s), .up_drp_qpll0_wr (up_drp_qpll0_wr_s), .up_drp_qpll0_addr (up_drp_qpll0_addr_s), .up_drp_qpll0_wdata (up_drp_qpll0_wdata_s), .up_drp_qpll0_rdata (up_drp_qpll0_rdata_s), .up_drp_qpll0_ready (up_drp_qpll0_ready_s), .up_drp_qpll1_sel (up_drp_qpll1_sel_s), .up_drp_qpll1_wr (up_drp_qpll1_wr_s), .up_drp_qpll1_addr (up_drp_qpll1_addr_s), .up_drp_qpll1_wdata (up_drp_qpll1_wdata_s), .up_drp_qpll1_rdata (up_drp_qpll1_rdata_s), .up_drp_qpll1_ready (up_drp_qpll1_ready_s), .up_rstn (up_rstn), .up_clk (up_clk), .up_wreq (up_wreq), .up_waddr (up_waddr), .up_wdata (up_wdata), .up_wack (up_wack), .up_rreq (up_rreq), .up_raddr (up_raddr), .up_rdata (up_rdata), .up_rack (up_rack)); endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_gt_es.v000066400000000000000000000722001457144405000262230ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module ad_gt_es ( lpm_dfe_n, // drp interface up_rstn, up_clk, up_es_drp_sel, up_es_drp_wr, up_es_drp_addr, up_es_drp_wdata, up_es_drp_rdata, up_es_drp_ready, // dma interface up_es_dma_req, up_es_dma_addr, up_es_dma_data, up_es_dma_ack, // processor interface up_es_start, up_es_stop, up_es_init, up_es_sdata0, up_es_sdata1, up_es_sdata2, up_es_sdata3, up_es_sdata4, up_es_qdata0, up_es_qdata1, up_es_qdata2, up_es_qdata3, up_es_qdata4, up_es_prescale, up_es_hoffset_min, up_es_hoffset_max, up_es_hoffset_step, up_es_voffset_min, up_es_voffset_max, up_es_voffset_step, up_es_voffset_range, up_es_start_addr, up_es_status); // parameters parameter integer GTH_OR_GTX_N = 0; // gt address localparam [11:0] ES_DRP_CTRL_ADDR = (GTH_OR_GTX_N == 1) ? 12'h03c : 12'h03d; // GTH-7 12'h03d localparam [11:0] ES_DRP_SDATA0_ADDR = (GTH_OR_GTX_N == 1) ? 12'h049 : 12'h036; // GTH-7 12'h036 localparam [11:0] ES_DRP_SDATA1_ADDR = (GTH_OR_GTX_N == 1) ? 12'h04a : 12'h037; // GTH-7 12'h037 localparam [11:0] ES_DRP_SDATA2_ADDR = (GTH_OR_GTX_N == 1) ? 12'h04b : 12'h038; // GTH-7 12'h038 localparam [11:0] ES_DRP_SDATA3_ADDR = (GTH_OR_GTX_N == 1) ? 12'h04c : 12'h039; // GTH-7 12'h039 localparam [11:0] ES_DRP_SDATA4_ADDR = (GTH_OR_GTX_N == 1) ? 12'h04d : 12'h03a; // GTH-7 12'h03a localparam [11:0] ES_DRP_QDATA0_ADDR = (GTH_OR_GTX_N == 1) ? 12'h044 : 12'h031; // GTH-7 12'h031 localparam [11:0] ES_DRP_QDATA1_ADDR = (GTH_OR_GTX_N == 1) ? 12'h045 : 12'h032; // GTH-7 12'h032 localparam [11:0] ES_DRP_QDATA2_ADDR = (GTH_OR_GTX_N == 1) ? 12'h046 : 12'h033; // GTH-7 12'h033 localparam [11:0] ES_DRP_QDATA3_ADDR = (GTH_OR_GTX_N == 1) ? 12'h047 : 12'h034; // GTH-7 12'h034 localparam [11:0] ES_DRP_QDATA4_ADDR = (GTH_OR_GTX_N == 1) ? 12'h048 : 12'h035; // GTH-7 12'h035 localparam [11:0] ES_DRP_HOFFSET_ADDR = (GTH_OR_GTX_N == 1) ? 12'h04f : 12'h03c; // GTH-7 12'h03c localparam [11:0] ES_DRP_VOFFSET_ADDR = (GTH_OR_GTX_N == 1) ? 12'h097 : 12'h03b; // GTH-7 12'h03b localparam [11:0] ES_DRP_STATUS_ADDR = (GTH_OR_GTX_N == 1) ? 12'h153 : 12'h151; // GTH-7 12'h153 localparam [11:0] ES_DRP_SCNT_ADDR = (GTH_OR_GTX_N == 1) ? 12'h152 : 12'h150; // GTH-7 12'h152 localparam [11:0] ES_DRP_ECNT_ADDR = (GTH_OR_GTX_N == 1) ? 12'h151 : 12'h14f; // GTH-7 12'h151 // state machine localparam [ 5:0] ES_FSM_IDLE = 6'h00; localparam [ 5:0] ES_FSM_STATUS = 6'h01; localparam [ 5:0] ES_FSM_INIT = 6'h02; localparam [ 5:0] ES_FSM_CTRLINIT_READ = 6'h03; localparam [ 5:0] ES_FSM_CTRLINIT_RRDY = 6'h04; localparam [ 5:0] ES_FSM_CTRLINIT_WRITE = 6'h05; localparam [ 5:0] ES_FSM_CTRLINIT_WRDY = 6'h06; localparam [ 5:0] ES_FSM_SDATA0_WRITE = 6'h07; localparam [ 5:0] ES_FSM_SDATA0_WRDY = 6'h08; localparam [ 5:0] ES_FSM_SDATA1_WRITE = 6'h09; localparam [ 5:0] ES_FSM_SDATA1_WRDY = 6'h0a; localparam [ 5:0] ES_FSM_SDATA2_WRITE = 6'h0b; localparam [ 5:0] ES_FSM_SDATA2_WRDY = 6'h0c; localparam [ 5:0] ES_FSM_SDATA3_WRITE = 6'h0d; localparam [ 5:0] ES_FSM_SDATA3_WRDY = 6'h0e; localparam [ 5:0] ES_FSM_SDATA4_WRITE = 6'h0f; localparam [ 5:0] ES_FSM_SDATA4_WRDY = 6'h10; localparam [ 5:0] ES_FSM_QDATA0_WRITE = 6'h11; localparam [ 5:0] ES_FSM_QDATA0_WRDY = 6'h12; localparam [ 5:0] ES_FSM_QDATA1_WRITE = 6'h13; localparam [ 5:0] ES_FSM_QDATA1_WRDY = 6'h14; localparam [ 5:0] ES_FSM_QDATA2_WRITE = 6'h15; localparam [ 5:0] ES_FSM_QDATA2_WRDY = 6'h16; localparam [ 5:0] ES_FSM_QDATA3_WRITE = 6'h17; localparam [ 5:0] ES_FSM_QDATA3_WRDY = 6'h18; localparam [ 5:0] ES_FSM_QDATA4_WRITE = 6'h19; localparam [ 5:0] ES_FSM_QDATA4_WRDY = 6'h1a; localparam [ 5:0] ES_FSM_HOFFSET_READ = 6'h1b; localparam [ 5:0] ES_FSM_HOFFSET_RRDY = 6'h1c; localparam [ 5:0] ES_FSM_HOFFSET_WRITE = 6'h1d; localparam [ 5:0] ES_FSM_HOFFSET_WRDY = 6'h1e; localparam [ 5:0] ES_FSM_VOFFSET_READ = 6'h1f; localparam [ 5:0] ES_FSM_VOFFSET_RRDY = 6'h20; localparam [ 5:0] ES_FSM_VOFFSET_WRITE = 6'h21; localparam [ 5:0] ES_FSM_VOFFSET_WRDY = 6'h22; localparam [ 5:0] ES_FSM_CTRLSTART_READ = 6'h23; localparam [ 5:0] ES_FSM_CTRLSTART_RRDY = 6'h24; localparam [ 5:0] ES_FSM_CTRLSTART_WRITE = 6'h25; localparam [ 5:0] ES_FSM_CTRLSTART_WRDY = 6'h26; localparam [ 5:0] ES_FSM_STATUS_READ = 6'h27; localparam [ 5:0] ES_FSM_STATUS_RRDY = 6'h28; localparam [ 5:0] ES_FSM_CTRLSTOP_READ = 6'h29; localparam [ 5:0] ES_FSM_CTRLSTOP_RRDY = 6'h2a; localparam [ 5:0] ES_FSM_CTRLSTOP_WRITE = 6'h2b; localparam [ 5:0] ES_FSM_CTRLSTOP_WRDY = 6'h2c; localparam [ 5:0] ES_FSM_SCNT_READ = 6'h2d; localparam [ 5:0] ES_FSM_SCNT_RRDY = 6'h2e; localparam [ 5:0] ES_FSM_ECNT_READ = 6'h2f; localparam [ 5:0] ES_FSM_ECNT_RRDY = 6'h30; localparam [ 5:0] ES_FSM_DMA_WRITE = 6'h31; localparam [ 5:0] ES_FSM_DMA_READY = 6'h32; localparam [ 5:0] ES_FSM_UPDATE = 6'h33; input lpm_dfe_n; // drp interface input up_rstn; input up_clk; output up_es_drp_sel; output up_es_drp_wr; output [11:0] up_es_drp_addr; output [15:0] up_es_drp_wdata; input [15:0] up_es_drp_rdata; input up_es_drp_ready; // dma interface output up_es_dma_req; output [31:0] up_es_dma_addr; output [31:0] up_es_dma_data; input up_es_dma_ack; // processor interface input up_es_start; input up_es_stop; input up_es_init; input [15:0] up_es_sdata0; input [15:0] up_es_sdata1; input [15:0] up_es_sdata2; input [15:0] up_es_sdata3; input [15:0] up_es_sdata4; input [15:0] up_es_qdata0; input [15:0] up_es_qdata1; input [15:0] up_es_qdata2; input [15:0] up_es_qdata3; input [15:0] up_es_qdata4; input [ 4:0] up_es_prescale; input [11:0] up_es_hoffset_min; input [11:0] up_es_hoffset_max; input [11:0] up_es_hoffset_step; input [ 7:0] up_es_voffset_min; input [ 7:0] up_es_voffset_max; input [ 7:0] up_es_voffset_step; input [ 1:0] up_es_voffset_range; input [31:0] up_es_start_addr; output up_es_status; // internal registers reg up_es_dma_req = 'd0; reg [31:0] up_es_dma_addr = 'd0; reg [31:0] up_es_dma_data = 'd0; reg up_es_status = 'd0; reg up_es_ut = 'd0; reg [31:0] up_es_addr = 'd0; reg [11:0] up_es_hoffset = 'd0; reg [ 7:0] up_es_voffset = 'd0; reg [15:0] up_es_hoffset_rdata = 'd0; reg [15:0] up_es_voffset_rdata = 'd0; reg [15:0] up_es_ctrl_rdata = 'd0; reg [15:0] up_es_scnt_rdata = 'd0; reg [15:0] up_es_ecnt_rdata = 'd0; reg [ 5:0] up_es_fsm = 'd0; reg up_es_drp_sel = 'd0; reg up_es_drp_wr = 'd0; reg [11:0] up_es_drp_addr = 'd0; reg [15:0] up_es_drp_wdata = 'd0; // internal signals wire up_es_heos_s; wire up_es_eos_s; wire up_es_ut_s; wire [ 7:0] up_es_voffset_2_s; wire [ 7:0] up_es_voffset_n_s; wire [ 7:0] up_es_voffset_s; // dma interface always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_es_dma_req <= 'b0; up_es_dma_addr <= 'd0; up_es_dma_data <= 'd0; end else begin if ((up_es_dma_req == 1'b1) && (up_es_dma_ack == 1'b1)) begin up_es_dma_req <= 1'b0; up_es_dma_addr <= 32'd0; up_es_dma_data <= 32'd0; end else if (up_es_fsm == ES_FSM_DMA_WRITE) begin up_es_dma_req <= 1'b1; up_es_dma_addr <= up_es_addr; up_es_dma_data <= {up_es_scnt_rdata, up_es_ecnt_rdata}; end end end // prescale, horizontal and vertical offsets assign up_es_heos_s = (up_es_hoffset == up_es_hoffset_max) ? up_es_ut : 1'b0; assign up_es_eos_s = (up_es_voffset == up_es_voffset_max) ? up_es_heos_s : 1'b0; assign up_es_ut_s = up_es_ut & ~lpm_dfe_n; assign up_es_voffset_2_s = ~up_es_voffset + 1'b1; assign up_es_voffset_n_s = {1'b1, up_es_voffset_2_s[6:0]}; assign up_es_voffset_s = (up_es_voffset[7] == 1'b1) ? up_es_voffset_n_s : up_es_voffset; always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 1'b0) begin up_es_status <= 1'b0; up_es_ut <= 'd0; up_es_addr <= 'd0; up_es_hoffset <= 'd0; up_es_voffset <= 'd0; end else begin if (up_es_fsm == ES_FSM_IDLE) begin up_es_status <= 1'b0; end else begin up_es_status <= 1'b1; end if (up_es_fsm == ES_FSM_IDLE) begin up_es_ut <= lpm_dfe_n; up_es_addr <= up_es_start_addr; up_es_hoffset <= up_es_hoffset_min; up_es_voffset <= up_es_voffset_min; end else if (up_es_fsm == ES_FSM_UPDATE) begin up_es_ut <= ~up_es_ut | lpm_dfe_n; up_es_addr <= up_es_addr + 3'd4; if (up_es_heos_s == 1'b1) begin up_es_hoffset <= up_es_hoffset_min; end else if (up_es_ut == 1'b1) begin up_es_hoffset <= up_es_hoffset + up_es_hoffset_step; end if (up_es_heos_s == 1'b1) begin up_es_voffset <= up_es_voffset + up_es_voffset_step; end end end end // read-modify-write parameters (gt's are full of mixed up controls) always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 1'b0) begin up_es_hoffset_rdata <= 'd0; up_es_voffset_rdata <= 'd0; up_es_ctrl_rdata <= 'd0; up_es_scnt_rdata <= 'd0; up_es_ecnt_rdata <= 'd0; end else begin if ((up_es_fsm == ES_FSM_HOFFSET_RRDY) && (up_es_drp_ready == 1'b1)) begin up_es_hoffset_rdata <= up_es_drp_rdata; end if ((up_es_fsm == ES_FSM_VOFFSET_RRDY) && (up_es_drp_ready == 1'b1)) begin up_es_voffset_rdata <= up_es_drp_rdata; end if (((up_es_fsm == ES_FSM_CTRLINIT_RRDY) || (up_es_fsm == ES_FSM_CTRLSTART_RRDY) || (up_es_fsm == ES_FSM_CTRLSTOP_RRDY)) && (up_es_drp_ready == 1'b1)) begin up_es_ctrl_rdata <= up_es_drp_rdata; end if ((up_es_fsm == ES_FSM_SCNT_RRDY) && (up_es_drp_ready == 1'b1)) begin up_es_scnt_rdata <= up_es_drp_rdata; end if ((up_es_fsm == ES_FSM_ECNT_RRDY) && (up_es_drp_ready == 1'b1)) begin up_es_ecnt_rdata <= up_es_drp_rdata; end end end // eye scan state machine- write vertical and horizontal offsets // and read back sample and error counters always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 1'b0) begin up_es_fsm <= ES_FSM_IDLE; end else begin if (up_es_stop == 1'b1) begin up_es_fsm <= ES_FSM_IDLE; end else begin case (up_es_fsm) ES_FSM_IDLE: begin // idle if (up_es_start == 1'b1) begin up_es_fsm <= ES_FSM_STATUS; end else begin up_es_fsm <= ES_FSM_IDLE; end end ES_FSM_STATUS: begin // set status up_es_fsm <= ES_FSM_INIT; end ES_FSM_INIT: begin // initialize if (up_es_init == 1'b1) begin up_es_fsm <= ES_FSM_CTRLINIT_READ; end else begin up_es_fsm <= ES_FSM_HOFFSET_READ; end end ES_FSM_CTRLINIT_READ: begin // control read up_es_fsm <= ES_FSM_CTRLINIT_RRDY; end ES_FSM_CTRLINIT_RRDY: begin // control ready if (up_es_drp_ready == 1'b1) begin up_es_fsm <= ES_FSM_CTRLINIT_WRITE; end else begin up_es_fsm <= ES_FSM_CTRLINIT_RRDY; end end ES_FSM_CTRLINIT_WRITE: begin // control write up_es_fsm <= ES_FSM_CTRLINIT_WRDY; end ES_FSM_CTRLINIT_WRDY: begin // control ready if (up_es_drp_ready == 1'b1) begin up_es_fsm <= ES_FSM_SDATA0_WRITE; end else begin up_es_fsm <= ES_FSM_CTRLINIT_WRDY; end end ES_FSM_SDATA0_WRITE: begin // sdata write up_es_fsm <= ES_FSM_SDATA0_WRDY; end ES_FSM_SDATA0_WRDY: begin // sdata ready if (up_es_drp_ready == 1'b1) begin up_es_fsm <= ES_FSM_SDATA1_WRITE; end else begin up_es_fsm <= ES_FSM_SDATA0_WRDY; end end ES_FSM_SDATA1_WRITE: begin // sdata write up_es_fsm <= ES_FSM_SDATA1_WRDY; end ES_FSM_SDATA1_WRDY: begin // sdata ready if (up_es_drp_ready == 1'b1) begin up_es_fsm <= ES_FSM_SDATA2_WRITE; end else begin up_es_fsm <= ES_FSM_SDATA1_WRDY; end end ES_FSM_SDATA2_WRITE: begin // sdata write up_es_fsm <= ES_FSM_SDATA2_WRDY; end ES_FSM_SDATA2_WRDY: begin // sdata ready if (up_es_drp_ready == 1'b1) begin up_es_fsm <= ES_FSM_SDATA3_WRITE; end else begin up_es_fsm <= ES_FSM_SDATA2_WRDY; end end ES_FSM_SDATA3_WRITE: begin // sdata write up_es_fsm <= ES_FSM_SDATA3_WRDY; end ES_FSM_SDATA3_WRDY: begin // sdata ready if (up_es_drp_ready == 1'b1) begin up_es_fsm <= ES_FSM_SDATA4_WRITE; end else begin up_es_fsm <= ES_FSM_SDATA3_WRDY; end end ES_FSM_SDATA4_WRITE: begin // sdata write up_es_fsm <= ES_FSM_SDATA4_WRDY; end ES_FSM_SDATA4_WRDY: begin // sdata ready if (up_es_drp_ready == 1'b1) begin up_es_fsm <= ES_FSM_QDATA0_WRITE; end else begin up_es_fsm <= ES_FSM_SDATA4_WRDY; end end ES_FSM_QDATA0_WRITE: begin // qdata write up_es_fsm <= ES_FSM_QDATA0_WRDY; end ES_FSM_QDATA0_WRDY: begin // qdata ready if (up_es_drp_ready == 1'b1) begin up_es_fsm <= ES_FSM_QDATA1_WRITE; end else begin up_es_fsm <= ES_FSM_QDATA0_WRDY; end end ES_FSM_QDATA1_WRITE: begin // qdata write up_es_fsm <= ES_FSM_QDATA1_WRDY; end ES_FSM_QDATA1_WRDY: begin // qdata ready if (up_es_drp_ready == 1'b1) begin up_es_fsm <= ES_FSM_QDATA2_WRITE; end else begin up_es_fsm <= ES_FSM_QDATA1_WRDY; end end ES_FSM_QDATA2_WRITE: begin // qdata write up_es_fsm <= ES_FSM_QDATA2_WRDY; end ES_FSM_QDATA2_WRDY: begin // qdata ready if (up_es_drp_ready == 1'b1) begin up_es_fsm <= ES_FSM_QDATA3_WRITE; end else begin up_es_fsm <= ES_FSM_QDATA2_WRDY; end end ES_FSM_QDATA3_WRITE: begin // qdata write up_es_fsm <= ES_FSM_QDATA3_WRDY; end ES_FSM_QDATA3_WRDY: begin // qdata ready if (up_es_drp_ready == 1'b1) begin up_es_fsm <= ES_FSM_QDATA4_WRITE; end else begin up_es_fsm <= ES_FSM_QDATA3_WRDY; end end ES_FSM_QDATA4_WRITE: begin // qdata write up_es_fsm <= ES_FSM_QDATA4_WRDY; end ES_FSM_QDATA4_WRDY: begin // qdata ready if (up_es_drp_ready == 1'b1) begin up_es_fsm <= ES_FSM_HOFFSET_READ; end else begin up_es_fsm <= ES_FSM_QDATA4_WRDY; end end ES_FSM_HOFFSET_READ: begin // horizontal offset read up_es_fsm <= ES_FSM_HOFFSET_RRDY; end ES_FSM_HOFFSET_RRDY: begin // horizontal offset ready if (up_es_drp_ready == 1'b1) begin up_es_fsm <= ES_FSM_HOFFSET_WRITE; end else begin up_es_fsm <= ES_FSM_HOFFSET_RRDY; end end ES_FSM_HOFFSET_WRITE: begin // horizontal offset write up_es_fsm <= ES_FSM_HOFFSET_WRDY; end ES_FSM_HOFFSET_WRDY: begin // horizontal offset ready if (up_es_drp_ready == 1'b1) begin up_es_fsm <= ES_FSM_VOFFSET_READ; end else begin up_es_fsm <= ES_FSM_HOFFSET_WRDY; end end ES_FSM_VOFFSET_READ: begin // vertical offset read up_es_fsm <= ES_FSM_VOFFSET_RRDY; end ES_FSM_VOFFSET_RRDY: begin // vertical offset ready if (up_es_drp_ready == 1'b1) begin up_es_fsm <= ES_FSM_VOFFSET_WRITE; end else begin up_es_fsm <= ES_FSM_VOFFSET_RRDY; end end ES_FSM_VOFFSET_WRITE: begin // vertical offset write up_es_fsm <= ES_FSM_VOFFSET_WRDY; end ES_FSM_VOFFSET_WRDY: begin // vertical offset ready if (up_es_drp_ready == 1'b1) begin up_es_fsm <= ES_FSM_CTRLSTART_READ; end else begin up_es_fsm <= ES_FSM_VOFFSET_WRDY; end end ES_FSM_CTRLSTART_READ: begin // control read up_es_fsm <= ES_FSM_CTRLSTART_RRDY; end ES_FSM_CTRLSTART_RRDY: begin // control ready if (up_es_drp_ready == 1'b1) begin up_es_fsm <= ES_FSM_CTRLSTART_WRITE; end else begin up_es_fsm <= ES_FSM_CTRLSTART_RRDY; end end ES_FSM_CTRLSTART_WRITE: begin // control write up_es_fsm <= ES_FSM_CTRLSTART_WRDY; end ES_FSM_CTRLSTART_WRDY: begin // control ready if (up_es_drp_ready == 1'b1) begin up_es_fsm <= ES_FSM_STATUS_READ; end else begin up_es_fsm <= ES_FSM_CTRLSTART_WRDY; end end ES_FSM_STATUS_READ: begin // status read up_es_fsm <= ES_FSM_STATUS_RRDY; end ES_FSM_STATUS_RRDY: begin // status ready if (up_es_drp_ready == 1'b0) begin up_es_fsm <= ES_FSM_STATUS_RRDY; end else if (up_es_drp_rdata[3:0] == 4'b0101) begin up_es_fsm <= ES_FSM_CTRLSTOP_READ; end else begin up_es_fsm <= ES_FSM_STATUS_READ; end end ES_FSM_CTRLSTOP_READ: begin // control read up_es_fsm <= ES_FSM_CTRLSTOP_RRDY; end ES_FSM_CTRLSTOP_RRDY: begin // control ready if (up_es_drp_ready == 1'b1) begin up_es_fsm <= ES_FSM_CTRLSTOP_WRITE; end else begin up_es_fsm <= ES_FSM_CTRLSTOP_RRDY; end end ES_FSM_CTRLSTOP_WRITE: begin // control write up_es_fsm <= ES_FSM_CTRLSTOP_WRDY; end ES_FSM_CTRLSTOP_WRDY: begin // control ready if (up_es_drp_ready == 1'b1) begin up_es_fsm <= ES_FSM_SCNT_READ; end else begin up_es_fsm <= ES_FSM_CTRLSTOP_WRDY; end end ES_FSM_SCNT_READ: begin // read sample count up_es_fsm <= ES_FSM_SCNT_RRDY; end ES_FSM_SCNT_RRDY: begin // sample count ready if (up_es_drp_ready == 1'b1) begin up_es_fsm <= ES_FSM_ECNT_READ; end else begin up_es_fsm <= ES_FSM_SCNT_RRDY; end end ES_FSM_ECNT_READ: begin // read error count up_es_fsm <= ES_FSM_ECNT_RRDY; end ES_FSM_ECNT_RRDY: begin // error count ready if (up_es_drp_ready == 1'b1) begin up_es_fsm <= ES_FSM_DMA_WRITE; end else begin up_es_fsm <= ES_FSM_ECNT_RRDY; end end ES_FSM_DMA_WRITE: begin // dma write up_es_fsm <= ES_FSM_DMA_READY; end ES_FSM_DMA_READY: begin // dma ack if (up_es_dma_ack == 1'b1) begin up_es_fsm <= ES_FSM_UPDATE; end else begin up_es_fsm <= ES_FSM_DMA_READY; end end ES_FSM_UPDATE: begin // update if (up_es_eos_s == 1'b1) begin up_es_fsm <= ES_FSM_IDLE; end else if (up_es_ut == 1'b1) begin up_es_fsm <= ES_FSM_HOFFSET_READ; end else begin up_es_fsm <= ES_FSM_VOFFSET_READ; end end default: begin up_es_fsm <= ES_FSM_IDLE; end endcase end end end // drp signals controlled by the fsm always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 1'b0) begin up_es_drp_sel <= 'd0; up_es_drp_wr <= 'd0; up_es_drp_addr <= 'd0; up_es_drp_wdata <= 'd0; end else begin case (up_es_fsm) ES_FSM_CTRLINIT_READ: begin up_es_drp_sel <= 1'b1; up_es_drp_wr <= 1'b0; up_es_drp_addr <= ES_DRP_CTRL_ADDR; up_es_drp_wdata <= 16'h0000; end ES_FSM_CTRLINIT_WRITE: begin up_es_drp_sel <= 1'b1; up_es_drp_wr <= 1'b1; up_es_drp_addr <= ES_DRP_CTRL_ADDR; if (GTH_OR_GTX_N == 1) begin up_es_drp_wdata <= {up_es_ctrl_rdata[15:10], 2'b11, up_es_ctrl_rdata[7:5], up_es_prescale}; end else begin up_es_drp_wdata <= {up_es_ctrl_rdata[15:10], 2'b11, up_es_ctrl_rdata[7:0]}; end end ES_FSM_SDATA0_WRITE: begin up_es_drp_sel <= 1'b1; up_es_drp_wr <= 1'b1; up_es_drp_addr <= ES_DRP_SDATA0_ADDR; up_es_drp_wdata <= up_es_sdata0; end ES_FSM_SDATA1_WRITE: begin up_es_drp_sel <= 1'b1; up_es_drp_wr <= 1'b1; up_es_drp_addr <= ES_DRP_SDATA1_ADDR; up_es_drp_wdata <= up_es_sdata1; end ES_FSM_SDATA2_WRITE: begin up_es_drp_sel <= 1'b1; up_es_drp_wr <= 1'b1; up_es_drp_addr <= ES_DRP_SDATA2_ADDR; up_es_drp_wdata <= up_es_sdata2; end ES_FSM_SDATA3_WRITE: begin up_es_drp_sel <= 1'b1; up_es_drp_wr <= 1'b1; up_es_drp_addr <= ES_DRP_SDATA3_ADDR; up_es_drp_wdata <= up_es_sdata3; end ES_FSM_SDATA4_WRITE: begin up_es_drp_sel <= 1'b1; up_es_drp_wr <= 1'b1; up_es_drp_addr <= ES_DRP_SDATA4_ADDR; up_es_drp_wdata <= up_es_sdata4; end ES_FSM_QDATA0_WRITE: begin up_es_drp_sel <= 1'b1; up_es_drp_wr <= 1'b1; up_es_drp_addr <= ES_DRP_QDATA0_ADDR; up_es_drp_wdata <= up_es_qdata0; end ES_FSM_QDATA1_WRITE: begin up_es_drp_sel <= 1'b1; up_es_drp_wr <= 1'b1; up_es_drp_addr <= ES_DRP_QDATA1_ADDR; up_es_drp_wdata <= up_es_qdata1; end ES_FSM_QDATA2_WRITE: begin up_es_drp_sel <= 1'b1; up_es_drp_wr <= 1'b1; up_es_drp_addr <= ES_DRP_QDATA2_ADDR; up_es_drp_wdata <= up_es_qdata2; end ES_FSM_QDATA3_WRITE: begin up_es_drp_sel <= 1'b1; up_es_drp_wr <= 1'b1; up_es_drp_addr <= ES_DRP_QDATA3_ADDR; up_es_drp_wdata <= up_es_qdata3; end ES_FSM_QDATA4_WRITE: begin up_es_drp_sel <= 1'b1; up_es_drp_wr <= 1'b1; up_es_drp_addr <= ES_DRP_QDATA4_ADDR; up_es_drp_wdata <= up_es_qdata4; end ES_FSM_HOFFSET_READ: begin up_es_drp_sel <= 1'b1; up_es_drp_wr <= 1'b0; up_es_drp_addr <= ES_DRP_HOFFSET_ADDR; up_es_drp_wdata <= 16'h0000; end ES_FSM_HOFFSET_WRITE: begin up_es_drp_sel <= 1'b1; up_es_drp_wr <= 1'b1; up_es_drp_addr <= ES_DRP_HOFFSET_ADDR; if (GTH_OR_GTX_N == 1) begin up_es_drp_wdata <= {up_es_hoffset, up_es_hoffset_rdata[3:0]}; end else begin up_es_drp_wdata <= {up_es_hoffset_rdata[15:12], up_es_hoffset}; end end ES_FSM_VOFFSET_READ: begin up_es_drp_sel <= 1'b1; up_es_drp_wr <= 1'b0; up_es_drp_addr <= ES_DRP_VOFFSET_ADDR; up_es_drp_wdata <= 16'h0000; end ES_FSM_VOFFSET_WRITE: begin up_es_drp_sel <= 1'b1; up_es_drp_wr <= 1'b1; up_es_drp_addr <= ES_DRP_VOFFSET_ADDR; if (GTH_OR_GTX_N == 1) begin up_es_drp_wdata <= {up_es_voffset_rdata[15:11], up_es_voffset_s[7], up_es_ut_s, up_es_voffset_s[6:0], up_es_voffset_range}; end else begin up_es_drp_wdata <= {up_es_prescale, up_es_voffset_rdata[10:9], up_es_ut_s, up_es_voffset_s}; end end ES_FSM_CTRLSTART_READ: begin up_es_drp_sel <= 1'b1; up_es_drp_wr <= 1'b0; up_es_drp_addr <= ES_DRP_CTRL_ADDR; up_es_drp_wdata <= 16'h0000; end ES_FSM_CTRLSTART_WRITE: begin up_es_drp_sel <= 1'b1; up_es_drp_wr <= 1'b1; up_es_drp_addr <= ES_DRP_CTRL_ADDR; if (GTH_OR_GTX_N == 1) begin up_es_drp_wdata <= {6'd1, up_es_ctrl_rdata[9:0]}; end else begin up_es_drp_wdata <= {up_es_ctrl_rdata[15:6], 6'd1}; end end ES_FSM_STATUS_READ: begin up_es_drp_sel <= 1'b1; up_es_drp_wr <= 1'b0; up_es_drp_addr <= ES_DRP_STATUS_ADDR; up_es_drp_wdata <= 16'h0000; end ES_FSM_CTRLSTOP_READ: begin up_es_drp_sel <= 1'b1; up_es_drp_wr <= 1'b0; up_es_drp_addr <= ES_DRP_CTRL_ADDR; up_es_drp_wdata <= 16'h0000; end ES_FSM_CTRLSTOP_WRITE: begin up_es_drp_sel <= 1'b1; up_es_drp_wr <= 1'b1; up_es_drp_addr <= ES_DRP_CTRL_ADDR; if (GTH_OR_GTX_N == 1) begin up_es_drp_wdata <= {6'd0, up_es_ctrl_rdata[9:0]}; end else begin up_es_drp_wdata <= {up_es_ctrl_rdata[15:6], 6'd0}; end end ES_FSM_SCNT_READ: begin up_es_drp_sel <= 1'b1; up_es_drp_wr <= 1'b0; up_es_drp_addr <= ES_DRP_SCNT_ADDR; up_es_drp_wdata <= 16'h0000; end ES_FSM_ECNT_READ: begin up_es_drp_sel <= 1'b1; up_es_drp_wr <= 1'b0; up_es_drp_addr <= ES_DRP_ECNT_ADDR; up_es_drp_wdata <= 16'h0000; end default: begin up_es_drp_sel <= 1'b0; up_es_drp_wr <= 1'b0; up_es_drp_addr <= 9'h000; up_es_drp_wdata <= 16'h0000; end endcase end end endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_gt_es_axi.v000066400000000000000000000341671457144405000270760ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module ad_gt_es_axi ( // es interface up_rstn, up_clk, up_es_dma_req_0, up_es_dma_addr_0, up_es_dma_data_0, up_es_dma_ack_0, up_es_dma_err_0, up_es_dma_req_1, up_es_dma_addr_1, up_es_dma_data_1, up_es_dma_ack_1, up_es_dma_err_1, up_es_dma_req_2, up_es_dma_addr_2, up_es_dma_data_2, up_es_dma_ack_2, up_es_dma_err_2, up_es_dma_req_3, up_es_dma_addr_3, up_es_dma_data_3, up_es_dma_ack_3, up_es_dma_err_3, up_es_dma_req_4, up_es_dma_addr_4, up_es_dma_data_4, up_es_dma_ack_4, up_es_dma_err_4, up_es_dma_req_5, up_es_dma_addr_5, up_es_dma_data_5, up_es_dma_ack_5, up_es_dma_err_5, up_es_dma_req_6, up_es_dma_addr_6, up_es_dma_data_6, up_es_dma_ack_6, up_es_dma_err_6, up_es_dma_req_7, up_es_dma_addr_7, up_es_dma_data_7, up_es_dma_ack_7, up_es_dma_err_7, // axi4 interface axi_awvalid, axi_awaddr, axi_awprot, axi_awready, axi_wvalid, axi_wdata, axi_wstrb, axi_wready, axi_bvalid, axi_bresp, axi_bready, axi_arvalid, axi_araddr, axi_arprot, axi_arready, axi_rvalid, axi_rresp, axi_rdata, axi_rready); // state machine (fair RR?) localparam [ 3:0] AXI_FSM_SCAN_0 = 4'h0; localparam [ 3:0] AXI_FSM_SCAN_1 = 4'h1; localparam [ 3:0] AXI_FSM_SCAN_2 = 4'h2; localparam [ 3:0] AXI_FSM_SCAN_3 = 4'h3; localparam [ 3:0] AXI_FSM_SCAN_4 = 4'h4; localparam [ 3:0] AXI_FSM_SCAN_5 = 4'h5; localparam [ 3:0] AXI_FSM_SCAN_6 = 4'h6; localparam [ 3:0] AXI_FSM_SCAN_7 = 4'h7; localparam [ 3:0] AXI_FSM_WRITE = 4'h8; localparam [ 3:0] AXI_FSM_WAIT = 4'h9; localparam [ 3:0] AXI_FSM_ACK = 4'ha; // es interface input up_rstn; input up_clk; input up_es_dma_req_0; input [31:0] up_es_dma_addr_0; input [31:0] up_es_dma_data_0; output up_es_dma_ack_0; output up_es_dma_err_0; input up_es_dma_req_1; input [31:0] up_es_dma_addr_1; input [31:0] up_es_dma_data_1; output up_es_dma_ack_1; output up_es_dma_err_1; input up_es_dma_req_2; input [31:0] up_es_dma_addr_2; input [31:0] up_es_dma_data_2; output up_es_dma_ack_2; output up_es_dma_err_2; input up_es_dma_req_3; input [31:0] up_es_dma_addr_3; input [31:0] up_es_dma_data_3; output up_es_dma_ack_3; output up_es_dma_err_3; input up_es_dma_req_4; input [31:0] up_es_dma_addr_4; input [31:0] up_es_dma_data_4; output up_es_dma_ack_4; output up_es_dma_err_4; input up_es_dma_req_5; input [31:0] up_es_dma_addr_5; input [31:0] up_es_dma_data_5; output up_es_dma_ack_5; output up_es_dma_err_5; input up_es_dma_req_6; input [31:0] up_es_dma_addr_6; input [31:0] up_es_dma_data_6; output up_es_dma_ack_6; output up_es_dma_err_6; input up_es_dma_req_7; input [31:0] up_es_dma_addr_7; input [31:0] up_es_dma_data_7; output up_es_dma_ack_7; output up_es_dma_err_7; // axi4 interface output axi_awvalid; output [31:0] axi_awaddr; output [ 2:0] axi_awprot; input axi_awready; output axi_wvalid; output [31:0] axi_wdata; output [ 3:0] axi_wstrb; input axi_wready; input axi_bvalid; input [ 1:0] axi_bresp; output axi_bready; output axi_arvalid; output [31:0] axi_araddr; output [ 2:0] axi_arprot; input axi_arready; input axi_rvalid; input [31:0] axi_rdata; input [ 1:0] axi_rresp; output axi_rready; // internal registers reg up_es_dma_ack_0 = 'd0; reg up_es_dma_err_0 = 'd0; reg up_es_dma_ack_1 = 'd0; reg up_es_dma_err_1 = 'd0; reg up_es_dma_ack_2 = 'd0; reg up_es_dma_err_2 = 'd0; reg up_es_dma_ack_3 = 'd0; reg up_es_dma_err_3 = 'd0; reg up_es_dma_ack_4 = 'd0; reg up_es_dma_err_4 = 'd0; reg up_es_dma_ack_5 = 'd0; reg up_es_dma_err_5 = 'd0; reg up_es_dma_ack_6 = 'd0; reg up_es_dma_err_6 = 'd0; reg up_es_dma_ack_7 = 'd0; reg up_es_dma_err_7 = 'd0; reg axi_awvalid = 'd0; reg [31:0] axi_awaddr = 'd0; reg axi_wvalid = 'd0; reg [31:0] axi_wdata = 'd0; reg axi_error = 'd0; reg [ 2:0] axi_sel = 'd0; reg [ 3:0] axi_fsm = 'd0; // axi write interface assign axi_awprot = 3'd0; assign axi_wstrb = 4'hf; assign axi_bready = 1'd1; assign axi_arvalid = 1'd0; assign axi_araddr = 32'd0; assign axi_arprot = 3'd0; assign axi_rready = 1'd1; always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_es_dma_ack_0 <= 1'b0; up_es_dma_err_0 <= 1'b0; up_es_dma_ack_1 <= 1'b0; up_es_dma_err_1 <= 1'b0; up_es_dma_ack_2 <= 1'b0; up_es_dma_err_2 <= 1'b0; up_es_dma_ack_3 <= 1'b0; up_es_dma_err_3 <= 1'b0; up_es_dma_ack_4 <= 1'b0; up_es_dma_err_4 <= 1'b0; up_es_dma_ack_5 <= 1'b0; up_es_dma_err_5 <= 1'b0; up_es_dma_ack_6 <= 1'b0; up_es_dma_err_6 <= 1'b0; up_es_dma_ack_7 <= 1'b0; up_es_dma_err_7 <= 1'b0; end else begin if ((axi_fsm == AXI_FSM_ACK) && (axi_sel == 3'd0)) begin up_es_dma_ack_0 <= 1'b1; up_es_dma_err_0 <= axi_error; end else begin up_es_dma_ack_0 <= 1'b0; up_es_dma_err_0 <= 1'b0; end if ((axi_fsm == AXI_FSM_ACK) && (axi_sel == 3'd1)) begin up_es_dma_ack_1 <= 1'b1; up_es_dma_err_1 <= axi_error; end else begin up_es_dma_ack_1 <= 1'b0; up_es_dma_err_1 <= 1'b0; end if ((axi_fsm == AXI_FSM_ACK) && (axi_sel == 3'd2)) begin up_es_dma_ack_2 <= 1'b1; up_es_dma_err_2 <= axi_error; end else begin up_es_dma_ack_2 <= 1'b0; up_es_dma_err_2 <= 1'b0; end if ((axi_fsm == AXI_FSM_ACK) && (axi_sel == 3'd3)) begin up_es_dma_ack_3 <= 1'b1; up_es_dma_err_3 <= axi_error; end else begin up_es_dma_ack_3 <= 1'b0; up_es_dma_err_3 <= 1'b0; end if ((axi_fsm == AXI_FSM_ACK) && (axi_sel == 3'd4)) begin up_es_dma_ack_4 <= 1'b1; up_es_dma_err_4 <= axi_error; end else begin up_es_dma_ack_4 <= 1'b0; up_es_dma_err_4 <= 1'b0; end if ((axi_fsm == AXI_FSM_ACK) && (axi_sel == 3'd5)) begin up_es_dma_ack_5 <= 1'b1; up_es_dma_err_5 <= axi_error; end else begin up_es_dma_ack_5 <= 1'b0; up_es_dma_err_5 <= 1'b0; end if ((axi_fsm == AXI_FSM_ACK) && (axi_sel == 3'd6)) begin up_es_dma_ack_6 <= 1'b1; up_es_dma_err_6 <= axi_error; end else begin up_es_dma_ack_6 <= 1'b0; up_es_dma_err_6 <= 1'b0; end if ((axi_fsm == AXI_FSM_ACK) && (axi_sel == 3'd7)) begin up_es_dma_ack_7 <= 1'b1; up_es_dma_err_7 <= axi_error; end else begin up_es_dma_ack_7 <= 1'b0; up_es_dma_err_7 <= 1'b0; end end end always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin axi_awvalid <= 'b0; axi_awaddr <= 'd0; axi_wvalid <= 'b0; axi_wdata <= 'd0; axi_error <= 'd0; end else begin if ((axi_awvalid == 1'b1) && (axi_awready == 1'b1)) begin axi_awvalid <= 1'b0; axi_awaddr <= 32'd0; end else if (axi_fsm == AXI_FSM_WRITE) begin axi_awvalid <= 1'b1; case (axi_sel) 3'b000: axi_awaddr <= up_es_dma_addr_0; 3'b001: axi_awaddr <= up_es_dma_addr_1; 3'b010: axi_awaddr <= up_es_dma_addr_2; 3'b011: axi_awaddr <= up_es_dma_addr_3; 3'b100: axi_awaddr <= up_es_dma_addr_4; 3'b101: axi_awaddr <= up_es_dma_addr_5; 3'b110: axi_awaddr <= up_es_dma_addr_6; default: axi_awaddr <= up_es_dma_addr_7; endcase end if ((axi_wvalid == 1'b1) && (axi_wready == 1'b1)) begin axi_wvalid <= 1'b0; axi_wdata <= 32'd0; end else if (axi_fsm == AXI_FSM_WRITE) begin axi_wvalid <= 1'b1; case (axi_sel) 3'b000: axi_wdata <= up_es_dma_data_0; 3'b001: axi_wdata <= up_es_dma_data_1; 3'b010: axi_wdata <= up_es_dma_data_2; 3'b011: axi_wdata <= up_es_dma_data_3; 3'b100: axi_wdata <= up_es_dma_data_4; 3'b101: axi_wdata <= up_es_dma_data_5; 3'b110: axi_wdata <= up_es_dma_data_6; default: axi_wdata <= up_es_dma_data_7; endcase end if (axi_bvalid == 1'b1) begin axi_error <= axi_bresp[1] | axi_bresp[0]; end end end always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin axi_sel <= 3'd0; axi_fsm <= AXI_FSM_SCAN_0; end else begin case (axi_fsm) AXI_FSM_SCAN_0: begin axi_sel <= 3'd0; if (up_es_dma_req_0 == 1'b1) begin axi_fsm <= AXI_FSM_WRITE; end else begin axi_fsm <= AXI_FSM_SCAN_1; end end AXI_FSM_SCAN_1: begin axi_sel <= 3'd1; if (up_es_dma_req_1 == 1'b1) begin axi_fsm <= AXI_FSM_WRITE; end else begin axi_fsm <= AXI_FSM_SCAN_2; end end AXI_FSM_SCAN_2: begin axi_sel <= 3'd2; if (up_es_dma_req_2 == 1'b1) begin axi_fsm <= AXI_FSM_WRITE; end else begin axi_fsm <= AXI_FSM_SCAN_3; end end AXI_FSM_SCAN_3: begin axi_sel <= 3'd3; if (up_es_dma_req_3 == 1'b1) begin axi_fsm <= AXI_FSM_WRITE; end else begin axi_fsm <= AXI_FSM_SCAN_4; end end AXI_FSM_SCAN_4: begin axi_sel <= 3'd4; if (up_es_dma_req_4 == 1'b1) begin axi_fsm <= AXI_FSM_WRITE; end else begin axi_fsm <= AXI_FSM_SCAN_5; end end AXI_FSM_SCAN_5: begin axi_sel <= 3'd5; if (up_es_dma_req_5 == 1'b1) begin axi_fsm <= AXI_FSM_WRITE; end else begin axi_fsm <= AXI_FSM_SCAN_6; end end AXI_FSM_SCAN_6: begin axi_sel <= 3'd6; if (up_es_dma_req_6 == 1'b1) begin axi_fsm <= AXI_FSM_WRITE; end else begin axi_fsm <= AXI_FSM_SCAN_7; end end AXI_FSM_SCAN_7: begin axi_sel <= 3'd7; if (up_es_dma_req_7 == 1'b1) begin axi_fsm <= AXI_FSM_WRITE; end else begin axi_fsm <= AXI_FSM_SCAN_0; end end AXI_FSM_WRITE: begin axi_sel <= axi_sel; axi_fsm <= AXI_FSM_WAIT; end AXI_FSM_WAIT: begin axi_sel <= axi_sel; if (axi_bvalid == 1'b1) begin axi_fsm <= AXI_FSM_ACK; end else begin axi_fsm <= AXI_FSM_WAIT; end end AXI_FSM_ACK: begin axi_sel <= axi_sel; case (axi_sel) 3'b000: axi_fsm <= AXI_FSM_SCAN_1; 3'b001: axi_fsm <= AXI_FSM_SCAN_2; 3'b010: axi_fsm <= AXI_FSM_SCAN_3; 3'b011: axi_fsm <= AXI_FSM_SCAN_4; 3'b100: axi_fsm <= AXI_FSM_SCAN_5; 3'b101: axi_fsm <= AXI_FSM_SCAN_6; 3'b110: axi_fsm <= AXI_FSM_SCAN_7; default: axi_fsm <= AXI_FSM_SCAN_0; endcase end default: begin axi_fsm <= AXI_FSM_SCAN_0; end endcase end end endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_iobuf.v000066400000000000000000000060351457144405000262310ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module ad_iobuf ( dio_t, dio_i, dio_o, dio_p); parameter DATA_WIDTH = 1; input [(DATA_WIDTH-1):0] dio_t; input [(DATA_WIDTH-1):0] dio_i; output [(DATA_WIDTH-1):0] dio_o; inout [(DATA_WIDTH-1):0] dio_p; genvar n; generate for (n = 0; n < DATA_WIDTH; n = n + 1) begin: g_iobuf assign dio_o[n] = dio_p[n]; assign dio_p[n] = (dio_t[n] == 1'b1) ? 1'bz : dio_i[n]; end endgenerate endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_iqcor.v000066400000000000000000000116241457144405000262420ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // iq correction = a*(i+x) + b*(q+y); offsets are added in dcfilter. `timescale 1ns/100ps module ad_iqcor ( // data interface clk, valid, data_in, data_iq, valid_out, data_out, // control interface iqcor_enable, iqcor_coeff_1, iqcor_coeff_2); // select i/q if disabled parameter Q_OR_I_N = 0; // data interface input clk; input valid; input [15:0] data_in; input [15:0] data_iq; output valid_out; output [15:0] data_out; // control interface input iqcor_enable; input [15:0] iqcor_coeff_1; input [15:0] iqcor_coeff_2; // internal registers reg p1_valid = 'd0; reg [15:0] p1_data_i = 'd0; reg [15:0] p1_data_q = 'd0; reg [33:0] p1_data_p = 'd0; reg valid_out = 'd0; reg [15:0] data_out = 'd0; reg [15:0] iqcor_coeff_1_r = 'd0; reg [15:0] iqcor_coeff_2_r = 'd0; // internal signals wire [15:0] data_i_s; wire [15:0] data_q_s; wire [33:0] p1_data_p_i_s; wire p1_valid_s; wire [15:0] p1_data_i_s; wire [33:0] p1_data_p_q_s; wire [15:0] p1_data_q_s; // swap i & q assign data_i_s = (Q_OR_I_N == 1) ? data_iq : data_in; assign data_q_s = (Q_OR_I_N == 1) ? data_in : data_iq; // coefficients are flopped to remove warnings from vivado always @(posedge clk) begin iqcor_coeff_1_r <= iqcor_coeff_1; iqcor_coeff_2_r <= iqcor_coeff_2; end // scaling functions - i ad_mul #(.DELAY_DATA_WIDTH(17)) i_mul_i ( .clk (clk), .data_a ({data_i_s[15], data_i_s}), .data_b ({iqcor_coeff_1_r[15], iqcor_coeff_1_r}), .data_p (p1_data_p_i_s), .ddata_in ({valid, data_i_s}), .ddata_out ({p1_valid_s, p1_data_i_s})); // scaling functions - q ad_mul #(.DELAY_DATA_WIDTH(16)) i_mul_q ( .clk (clk), .data_a ({data_q_s[15], data_q_s}), .data_b ({iqcor_coeff_2_r[15], iqcor_coeff_2_r}), .data_p (p1_data_p_q_s), .ddata_in (data_q_s), .ddata_out (p1_data_q_s)); // sum always @(posedge clk) begin p1_valid <= p1_valid_s; p1_data_i <= p1_data_i_s; p1_data_q <= p1_data_q_s; p1_data_p <= p1_data_p_i_s + p1_data_p_q_s; end // output registers always @(posedge clk) begin valid_out <= p1_valid; if (iqcor_enable == 1'b1) begin data_out <= p1_data_p[29:14]; end else if (Q_OR_I_N == 1) begin data_out <= p1_data_q; end else begin data_out <= p1_data_i; end end endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_jesd_align.v000066400000000000000000000072001457144405000272170ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module ad_jesd_align ( // jesd interface rx_clk, rx_ip_sof, rx_ip_data, rx_sof, rx_data); // jesd interface input rx_clk; input [ 3:0] rx_ip_sof; input [31:0] rx_ip_data; // aligned data output rx_sof; output [31:0] rx_data; // internal registers reg [31:0] rx_ip_data_d = 'd0; reg [ 3:0] rx_ip_sof_hold = 'd0; reg rx_sof = 'd0; reg rx_ip_sof_d = 'd0; reg [31:0] rx_data = 'd0; // dword may contain more than one frame per clock always @(posedge rx_clk) begin rx_ip_data_d <= rx_ip_data; rx_ip_sof_d <= rx_ip_sof; if (rx_ip_sof != 4'h0) begin rx_ip_sof_hold <= rx_ip_sof; end rx_sof <= |rx_ip_sof_d; if (rx_ip_sof_hold[0] == 1'b1) begin rx_data <= rx_ip_data; end else if (rx_ip_sof_hold[1] == 1'b1) begin rx_data <= {rx_ip_data[ 7:0], rx_ip_data_d[31: 8]}; end else if (rx_ip_sof_hold[2] == 1'b1) begin rx_data <= {rx_ip_data[15:0], rx_ip_data_d[31:16]}; end else if (rx_ip_sof_hold[3] == 1'b1) begin rx_data <= {rx_ip_data[23:0], rx_ip_data_d[31:24]}; end else begin rx_data <= 32'd0; end end endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_lvds_clk.v000066400000000000000000000063331457144405000267270ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2014(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module ad_lvds_clk ( clk_in_p, clk_in_n, clk); parameter DEVICE_TYPE = 0; localparam SERIES7 = 0; localparam VIRTEX6 = 1; input clk_in_p; input clk_in_n; output clk; // wires wire clk_ibuf_s; // instantiations IBUFGDS i_rx_clk_ibuf ( .I (clk_in_p), .IB (clk_in_n), .O (clk_ibuf_s)); generate if (DEVICE_TYPE == VIRTEX6) begin BUFR #(.BUFR_DIVIDE("BYPASS")) i_clk_rbuf ( .CLR (1'b0), .CE (1'b1), .I (clk_ibuf_s), .O (clk)); end else begin BUFG i_clk_gbuf ( .I (clk_ibuf_s), .O (clk)); end endgenerate endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_lvds_in.v000066400000000000000000000136311457144405000265630ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2014(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module ad_lvds_in ( // data interface rx_clk, rx_data_in_p, rx_data_in_n, rx_data_p, rx_data_n, // delay-data interface up_clk, up_dld, up_dwdata, up_drdata, // delay-cntrl interface delay_clk, delay_rst, delay_locked); // parameters parameter SINGLE_ENDED = 0; parameter DEVICE_TYPE = 0; parameter IODELAY_CTRL = 0; parameter IODELAY_GROUP = "dev_if_delay_group"; localparam SERIES7 = 0; localparam VIRTEX6 = 1; // data interface input rx_clk; input rx_data_in_p; input rx_data_in_n; output rx_data_p; output rx_data_n; // delay-data interface input up_clk; input up_dld; input [ 4:0] up_dwdata; output [ 4:0] up_drdata; // delay-cntrl interface input delay_clk; input delay_rst; output delay_locked; // internal registers reg rx_data_n; // internal signals wire rx_data_n_s; wire rx_data_ibuf_s; wire rx_data_idelay_s; // delay controller generate if (IODELAY_CTRL == 1) begin (* IODELAY_GROUP = IODELAY_GROUP *) IDELAYCTRL i_delay_ctrl ( .RST (delay_rst), .REFCLK (delay_clk), .RDY (delay_locked)); end else begin assign delay_locked = 1'b1; end endgenerate // receive data interface, ibuf -> idelay -> iddr generate if (SINGLE_ENDED == 1) begin assign tx_data_out_n = 1'b0; IBUF i_rx_data_ibuf ( .I (rx_data_in_p), .O (rx_data_ibuf_s)); end else begin IBUFDS i_rx_data_ibuf ( .I (rx_data_in_p), .IB (rx_data_in_n), .O (rx_data_ibuf_s)); end endgenerate if (DEVICE_TYPE == VIRTEX6) begin (* IODELAY_GROUP = IODELAY_GROUP *) IODELAYE1 #( .CINVCTRL_SEL ("FALSE"), .DELAY_SRC ("I"), .HIGH_PERFORMANCE_MODE ("TRUE"), .IDELAY_TYPE ("VAR_LOADABLE"), .IDELAY_VALUE (0), .ODELAY_TYPE ("FIXED"), .ODELAY_VALUE (0), .REFCLK_FREQUENCY (200.0), .SIGNAL_PATTERN ("DATA")) i_rx_data_idelay ( .T (1'b1), .CE (1'b0), .INC (1'b0), .CLKIN (1'b0), .DATAIN (1'b0), .ODATAIN (1'b0), .CINVCTRL (1'b0), .C (up_clk), .IDATAIN (rx_data_ibuf_s), .DATAOUT (rx_data_idelay_s), .RST (up_dld), .CNTVALUEIN (up_dwdata), .CNTVALUEOUT (up_drdata)); end else begin (* IODELAY_GROUP = IODELAY_GROUP *) IDELAYE2 #( .CINVCTRL_SEL ("FALSE"), .DELAY_SRC ("IDATAIN"), .HIGH_PERFORMANCE_MODE ("FALSE"), .IDELAY_TYPE ("VAR_LOAD"), .IDELAY_VALUE (0), .REFCLK_FREQUENCY (200.0), .PIPE_SEL ("FALSE"), .SIGNAL_PATTERN ("DATA")) i_rx_data_idelay ( .CE (1'b0), .INC (1'b0), .DATAIN (1'b0), .LDPIPEEN (1'b0), .CINVCTRL (1'b0), .REGRST (1'b0), .C (up_clk), .IDATAIN (rx_data_ibuf_s), .DATAOUT (rx_data_idelay_s), .LD (up_dld), .CNTVALUEIN (up_dwdata), .CNTVALUEOUT (up_drdata)); end IDDR #( .DDR_CLK_EDGE ("SAME_EDGE_PIPELINED"), .INIT_Q1 (1'b0), .INIT_Q2 (1'b0), .SRTYPE ("ASYNC")) i_rx_data_iddr ( .CE (1'b1), .R (1'b0), .S (1'b0), .C (rx_clk), .D (rx_data_idelay_s), .Q1 (rx_data_p), .Q2 (rx_data_n_s)); always @(posedge rx_clk) begin rx_data_n <= rx_data_n_s; end endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_lvds_out.v000066400000000000000000000122301457144405000267560ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2014(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module ad_lvds_out ( // data interface tx_clk, tx_data_p, tx_data_n, tx_data_out_p, tx_data_out_n, // delay-data interface up_clk, up_dld, up_dwdata, up_drdata, // delay-cntrl interface delay_clk, delay_rst, delay_locked); // parameters parameter DEVICE_TYPE = 0; parameter SINGLE_ENDED = 0; parameter IODELAY_ENABLE = 0; parameter IODELAY_CTRL = 0; parameter IODELAY_GROUP = "dev_if_delay_group"; localparam SERIES7 = 0; localparam VIRTEX6 = 1; // data interface input tx_clk; input tx_data_p; input tx_data_n; output tx_data_out_p; output tx_data_out_n; // delay-data interface input up_clk; input up_dld; input [ 4:0] up_dwdata; output [ 4:0] up_drdata; // delay-cntrl interface input delay_clk; input delay_rst; output delay_locked; // internal signals wire tx_data_oddr_s; wire tx_data_odelay_s; // delay controller generate if ((IODELAY_ENABLE == 1) && (DEVICE_TYPE == SERIES7) && (IODELAY_CTRL == 1)) begin (* IODELAY_GROUP = IODELAY_GROUP *) IDELAYCTRL i_delay_ctrl ( .RST (delay_rst), .REFCLK (delay_clk), .RDY (delay_locked)); end else begin assign delay_locked = 1'b1; end endgenerate // transmit data interface, oddr -> odelay -> obuf ODDR #( .DDR_CLK_EDGE ("SAME_EDGE"), .INIT (1'b0), .SRTYPE ("ASYNC")) i_tx_data_oddr ( .CE (1'b1), .R (1'b0), .S (1'b0), .C (tx_clk), .D1 (tx_data_p), .D2 (tx_data_n), .Q (tx_data_oddr_s)); generate if ((IODELAY_ENABLE == 1) && (DEVICE_TYPE == SERIES7)) begin (* IODELAY_GROUP = IODELAY_GROUP *) ODELAYE2 #( .CINVCTRL_SEL ("FALSE"), .DELAY_SRC ("ODATAIN"), .HIGH_PERFORMANCE_MODE ("FALSE"), .ODELAY_TYPE ("VAR_LOAD"), .ODELAY_VALUE (0), .REFCLK_FREQUENCY (200.0), .PIPE_SEL ("FALSE"), .SIGNAL_PATTERN ("DATA")) i_tx_data_odelay ( .CE (1'b0), .CLKIN (1'b0), .INC (1'b0), .LDPIPEEN (1'b0), .CINVCTRL (1'b0), .REGRST (1'b0), .C (up_clk), .ODATAIN (tx_data_oddr_s), .DATAOUT (tx_data_odelay_s), .LD (up_dld), .CNTVALUEIN (up_dwdata), .CNTVALUEOUT (up_drdata)); end else begin assign up_drdata = 5'd0; assign tx_data_odelay_s = tx_data_oddr_s; end endgenerate generate if (SINGLE_ENDED == 1) begin assign tx_data_out_n = 1'b0; OBUF i_tx_data_obuf ( .I (tx_data_odelay_s), .O (tx_data_out_p)); end else begin OBUFDS i_tx_data_obuf ( .I (tx_data_odelay_s), .O (tx_data_out_p), .OB (tx_data_out_n)); end endgenerate endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_mem.v000066400000000000000000000063721457144405000257070ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module ad_mem ( clka, wea, addra, dina, clkb, addrb, doutb); parameter DATA_WIDTH = 16; parameter ADDRESS_WIDTH = 5; localparam DW = DATA_WIDTH - 1; localparam AW = ADDRESS_WIDTH - 1; input clka; input wea; input [AW:0] addra; input [DW:0] dina; input clkb; input [AW:0] addrb; output [DW:0] doutb; reg [DW:0] m_ram[0:((2**ADDRESS_WIDTH)-1)]; reg [DW:0] doutb; always @(posedge clka) begin if (wea == 1'b1) begin m_ram[addra] <= dina; end end always @(posedge clkb) begin doutb <= m_ram[addrb]; end endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_mem_asym.v000066400000000000000000000121011457144405000267230ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module ad_mem_asym ( clka, wea, addra, dina, clkb, addrb, doutb); parameter A_ADDRESS_WIDTH = 10; parameter A_DATA_WIDTH = 256; parameter B_ADDRESS_WIDTH = 8; parameter B_DATA_WIDTH = 64; localparam MEM_SIZE_A = 2**A_ADDRESS_WIDTH; localparam MEM_SIZE_B = 2**B_ADDRESS_WIDTH; localparam MEM_SIZE = (MEM_SIZE_A > MEM_SIZE_B) ? MEM_SIZE_A : MEM_SIZE_B; localparam MEM_RATIO = A_DATA_WIDTH/B_DATA_WIDTH; // write interface input clka; input wea; input [A_ADDRESS_WIDTH-1:0] addra; input [A_DATA_WIDTH-1:0] dina; // read interface input clkb; input [B_ADDRESS_WIDTH-1:0] addrb; output [B_DATA_WIDTH-1:0] doutb; // internal registers reg [B_DATA_WIDTH-1:0] m_ram[0:MEM_SIZE-1]; reg [B_DATA_WIDTH-1:0] doutb; // write interface generate if (MEM_RATIO == 1) begin always @(posedge clka) begin if (wea == 1'b1) begin m_ram[addra] <= dina; end end end if (MEM_RATIO == 2) begin always @(posedge clka) begin if (wea == 1'b1) begin m_ram[{addra, 1'd0}] <= dina[((1*B_DATA_WIDTH)-1):(B_DATA_WIDTH*0)]; m_ram[{addra, 1'd1}] <= dina[((2*B_DATA_WIDTH)-1):(B_DATA_WIDTH*1)]; end end end if (MEM_RATIO == 4) begin always @(posedge clka) begin if (wea == 1'b1) begin m_ram[{addra, 2'd0}] <= dina[((1*B_DATA_WIDTH)-1):(B_DATA_WIDTH*0)]; m_ram[{addra, 2'd1}] <= dina[((2*B_DATA_WIDTH)-1):(B_DATA_WIDTH*1)]; m_ram[{addra, 2'd2}] <= dina[((3*B_DATA_WIDTH)-1):(B_DATA_WIDTH*2)]; m_ram[{addra, 2'd3}] <= dina[((4*B_DATA_WIDTH)-1):(B_DATA_WIDTH*3)]; end end end if (MEM_RATIO == 8) begin always @(posedge clka) begin if (wea == 1'b1) begin m_ram[{addra, 3'd0}] <= dina[((1*B_DATA_WIDTH)-1):(B_DATA_WIDTH*0)]; m_ram[{addra, 3'd1}] <= dina[((2*B_DATA_WIDTH)-1):(B_DATA_WIDTH*1)]; m_ram[{addra, 3'd2}] <= dina[((3*B_DATA_WIDTH)-1):(B_DATA_WIDTH*2)]; m_ram[{addra, 3'd3}] <= dina[((4*B_DATA_WIDTH)-1):(B_DATA_WIDTH*3)]; m_ram[{addra, 3'd4}] <= dina[((5*B_DATA_WIDTH)-1):(B_DATA_WIDTH*4)]; m_ram[{addra, 3'd5}] <= dina[((6*B_DATA_WIDTH)-1):(B_DATA_WIDTH*5)]; m_ram[{addra, 3'd6}] <= dina[((7*B_DATA_WIDTH)-1):(B_DATA_WIDTH*6)]; m_ram[{addra, 3'd7}] <= dina[((8*B_DATA_WIDTH)-1):(B_DATA_WIDTH*7)]; end end end endgenerate // read interface always @(posedge clkb) begin doutb <= m_ram[addrb]; end endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_mmcm_drp.v000066400000000000000000000167401457144405000267270ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // MMCM_OR_BUFR_N with DRP and device specific `timescale 1ns/100ps module ad_mmcm_drp ( // clocks clk, clk2, mmcm_rst, clk_sel, mmcm_clk_0, mmcm_clk_1, // drp interface up_clk, up_rstn, up_drp_sel, up_drp_wr, up_drp_addr, up_drp_wdata, up_drp_rdata, up_drp_ready, up_drp_locked); // parameters parameter MMCM_DEVICE_TYPE = 0; localparam MMCM_DEVICE_7SERIES = 0; localparam MMCM_DEVICE_VIRTEX6 = 1; parameter MMCM_CLKIN_PERIOD = 1.667; parameter MMCM_CLKIN2_PERIOD = 1.667; parameter MMCM_VCO_DIV = 6; parameter MMCM_VCO_MUL = 12.000; parameter MMCM_CLK0_DIV = 2.000; parameter MMCM_CLK1_DIV = 6; // clocks input clk; input clk2; input mmcm_rst; input clk_sel; output mmcm_clk_0; output mmcm_clk_1; // drp interface input up_clk; input up_rstn; input up_drp_sel; input up_drp_wr; input [11:0] up_drp_addr; input [15:0] up_drp_wdata; output [15:0] up_drp_rdata; output up_drp_ready; output up_drp_locked; // internal registers reg [15:0] up_drp_rdata = 'd0; reg up_drp_ready = 'd0; reg up_drp_locked_m1 = 'd0; reg up_drp_locked = 'd0; // internal signals wire bufg_fb_clk_s; wire mmcm_fb_clk_s; wire mmcm_clk_0_s; wire mmcm_clk_1_s; wire mmcm_locked_s; wire [15:0] up_drp_rdata_s; wire up_drp_ready_s; // drp read and locked always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 1'b0) begin up_drp_rdata <= 'd0; up_drp_ready <= 'd0; up_drp_locked_m1 <= 1'd0; up_drp_locked <= 1'd0; end else begin up_drp_rdata <= up_drp_rdata_s; up_drp_ready <= up_drp_ready_s; up_drp_locked_m1 <= mmcm_locked_s; up_drp_locked <= up_drp_locked_m1; end end // instantiations generate if (MMCM_DEVICE_TYPE == MMCM_DEVICE_VIRTEX6) begin MMCM_ADV #( .BANDWIDTH ("OPTIMIZED"), .CLKOUT4_CASCADE ("FALSE"), .CLOCK_HOLD ("FALSE"), .COMPENSATION ("ZHOLD"), .STARTUP_WAIT ("FALSE"), .DIVCLK_DIVIDE (MMCM_VCO_DIV), .CLKFBOUT_MULT_F (MMCM_VCO_MUL), .CLKFBOUT_PHASE (0.000), .CLKFBOUT_USE_FINE_PS ("FALSE"), .CLKOUT0_DIVIDE_F (MMCM_CLK0_DIV), .CLKOUT0_PHASE (0.000), .CLKOUT0_DUTY_CYCLE (0.500), .CLKOUT0_USE_FINE_PS ("FALSE"), .CLKOUT1_DIVIDE (MMCM_CLK1_DIV), .CLKOUT1_PHASE (0.000), .CLKOUT1_DUTY_CYCLE (0.500), .CLKOUT1_USE_FINE_PS ("FALSE"), .CLKIN1_PERIOD (MMCM_CLKIN_PERIOD), .CLKIN2_PERIOD (MMCM_CLKIN2_PERIOD), .REF_JITTER1 (0.010)) i_mmcm ( .CLKIN1 (clk), .CLKFBIN (bufg_fb_clk_s), .CLKFBOUT (mmcm_fb_clk_s), .CLKOUT0 (mmcm_clk_0_s), .CLKOUT1 (mmcm_clk_1_s), .LOCKED (mmcm_locked_s), .DCLK (up_clk), .DEN (up_drp_sel), .DADDR (up_drp_addr[6:0]), .DWE (up_drp_wr), .DI (up_drp_wdata), .DO (up_drp_rdata_s), .DRDY (up_drp_ready_s), .CLKFBOUTB (), .CLKOUT0B (), .CLKOUT1B (), .CLKOUT2 (), .CLKOUT2B (), .CLKOUT3 (), .CLKOUT3B (), .CLKOUT4 (), .CLKOUT5 (), .CLKOUT6 (), .CLKIN2 (clk2), .CLKINSEL (clk_sel), .PSCLK (1'b0), .PSEN (1'b0), .PSINCDEC (1'b0), .PSDONE (), .CLKINSTOPPED (), .CLKFBSTOPPED (), .PWRDWN (1'b0), .RST (mmcm_rst)); end if (MMCM_DEVICE_TYPE == MMCM_DEVICE_7SERIES) begin MMCME2_ADV #( .BANDWIDTH ("OPTIMIZED"), .CLKOUT4_CASCADE ("FALSE"), .COMPENSATION ("ZHOLD"), .STARTUP_WAIT ("FALSE"), .DIVCLK_DIVIDE (MMCM_VCO_DIV), .CLKFBOUT_MULT_F (MMCM_VCO_MUL), .CLKFBOUT_PHASE (0.000), .CLKFBOUT_USE_FINE_PS ("FALSE"), .CLKOUT0_DIVIDE_F (MMCM_CLK0_DIV), .CLKOUT0_PHASE (0.000), .CLKOUT0_DUTY_CYCLE (0.500), .CLKOUT0_USE_FINE_PS ("FALSE"), .CLKOUT1_DIVIDE (MMCM_CLK1_DIV), .CLKOUT1_PHASE (0.000), .CLKOUT1_DUTY_CYCLE (0.500), .CLKOUT1_USE_FINE_PS ("FALSE"), .CLKIN1_PERIOD (MMCM_CLKIN_PERIOD), .CLKIN2_PERIOD (MMCM_CLKIN2_PERIOD), .REF_JITTER1 (0.010)) i_mmcm ( .CLKIN1 (clk), .CLKFBIN (bufg_fb_clk_s), .CLKFBOUT (mmcm_fb_clk_s), .CLKOUT0 (mmcm_clk_0_s), .CLKOUT1 (mmcm_clk_1_s), .LOCKED (mmcm_locked_s), .DCLK (up_clk), .DEN (up_drp_sel), .DADDR (up_drp_addr[6:0]), .DWE (up_drp_wr), .DI (up_drp_wdata), .DO (up_drp_rdata_s), .DRDY (up_drp_ready_s), .CLKFBOUTB (), .CLKOUT0B (), .CLKOUT1B (), .CLKOUT2 (), .CLKOUT2B (), .CLKOUT3 (), .CLKOUT3B (), .CLKOUT4 (), .CLKOUT5 (), .CLKOUT6 (), .CLKIN2 (clk2), .CLKINSEL (clk_sel), .PSCLK (1'b0), .PSEN (1'b0), .PSINCDEC (1'b0), .PSDONE (), .CLKINSTOPPED (), .CLKFBSTOPPED (), .PWRDWN (1'b0), .RST (mmcm_rst)); end endgenerate BUFG i_fb_clk_bufg (.I (mmcm_fb_clk_s), .O (bufg_fb_clk_s)); BUFG i_clk_0_bufg (.I (mmcm_clk_0_s), .O (mmcm_clk_0)); BUFG i_clk_1_bufg (.I (mmcm_clk_1_s), .O (mmcm_clk_1)); endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_mul.v000066400000000000000000000072411457144405000257220ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** `timescale 1ps/1ps module ad_mul ( // data_p = data_a * data_b; clk, data_a, data_b, data_p, // delay interface ddata_in, ddata_out); // delayed data bus width parameter DELAY_DATA_WIDTH = 16; // data_p = data_a * data_b; input clk; input [16:0] data_a; input [16:0] data_b; output [33:0] data_p; // delay interface input [(DELAY_DATA_WIDTH-1):0] ddata_in; output [(DELAY_DATA_WIDTH-1):0] ddata_out; // internal registers reg [(DELAY_DATA_WIDTH-1):0] p1_ddata = 'd0; reg [(DELAY_DATA_WIDTH-1):0] p2_ddata = 'd0; reg [(DELAY_DATA_WIDTH-1):0] ddata_out = 'd0; // a/b reg, m-reg, p-reg delay match always @(posedge clk) begin p1_ddata <= ddata_in; p2_ddata <= p1_ddata; ddata_out <= p2_ddata; end MULT_MACRO #( .LATENCY (3), .WIDTH_A (17), .WIDTH_B (17)) i_mult_macro ( .CE (1'b1), .RST (1'b0), .CLK (clk), .A (data_a), .B (data_b), .P (data_p)); endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_mul_u16.v000066400000000000000000000073441457144405000264210ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** // both inputs are considered unsigned 16 bits- // ddata is delay matched generic data `timescale 1ps/1ps module ad_mul_u16 ( // data_p = data_a * data_b; clk, data_a, data_b, data_p, // delay interface ddata_in, ddata_out); // delayed data bus width parameter DELAY_DATA_WIDTH = 16; localparam DW = DELAY_DATA_WIDTH - 1; // data_p = data_a * data_b; input clk; input [15:0] data_a; input [15:0] data_b; output [31:0] data_p; // delay interface input [DW:0] ddata_in; output [DW:0] ddata_out; // internal registers reg [DW:0] p1_ddata = 'd0; reg [DW:0] p2_ddata = 'd0; reg [DW:0] ddata_out = 'd0; // internal signals wire [33:0] data_p_s; // a/b reg, m-reg, p-reg delay match always @(posedge clk) begin p1_ddata <= ddata_in; p2_ddata <= p1_ddata; ddata_out <= p2_ddata; end assign data_p = data_p_s[31:0]; MULT_MACRO #( .LATENCY (3), .A_DATA_WIDTH (17), .B_DATA_WIDTH (17)) i_mult_macro ( .CE (1'b1), .RST (1'b0), .CLK (clk), .A ({1'b0, data_a}), .B ({1'b0, data_b}), .P (data_p_s)); endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_pnmon.v000066400000000000000000000106651457144405000262600ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** // PN monitors `timescale 1ns/100ps module ad_pnmon ( // adc interface adc_clk, adc_valid_in, adc_data_in, adc_data_pn, // pn out of sync and error adc_pn_oos, adc_pn_err); // parameters parameter DATA_WIDTH = 16; localparam DW = DATA_WIDTH - 1; // adc interface input adc_clk; input adc_valid_in; input [DW:0] adc_data_in; input [DW:0] adc_data_pn; // pn out of sync and error output adc_pn_oos; output adc_pn_err; // internal registers reg adc_valid_d = 'd0; reg adc_pn_match_d = 'd0; reg adc_pn_match_z = 'd0; reg adc_pn_err = 'd0; reg adc_pn_oos = 'd0; reg [ 3:0] adc_pn_oos_count = 'd0; // internal signals wire adc_pn_match_d_s; wire adc_pn_match_z_s; wire adc_pn_match_s; wire adc_pn_update_s; wire adc_pn_err_s; // make sure data is not 0, sequence will fail. assign adc_pn_match_d_s = (adc_data_in == adc_data_pn) ? 1'b1 : 1'b0; assign adc_pn_match_z_s = (adc_data_in == 'd0) ? 1'b0 : 1'b1; assign adc_pn_match_s = adc_pn_match_d & adc_pn_match_z; assign adc_pn_update_s = ~(adc_pn_oos ^ adc_pn_match_s); assign adc_pn_err_s = ~(adc_pn_oos | adc_pn_match_s); // pn oos and counters (16 to clear and set). always @(posedge adc_clk) begin adc_valid_d <= adc_valid_in; adc_pn_match_d <= adc_pn_match_d_s; adc_pn_match_z <= adc_pn_match_z_s; if (adc_valid_d == 1'b1) begin adc_pn_err <= adc_pn_err_s; if ((adc_pn_update_s == 1'b1) && (adc_pn_oos_count >= 15)) begin adc_pn_oos <= ~adc_pn_oos; end if (adc_pn_update_s == 1'b1) begin adc_pn_oos_count <= adc_pn_oos_count + 1'b1; end else begin adc_pn_oos_count <= 'd0; end end end endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_rst.v000066400000000000000000000056671457144405000257470ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module ad_rst ( // clock reset preset, clk, rst); // clock reset input preset; input clk; output rst; // internal registers reg ad_rst_sync_m1 = 'd0 /* synthesis preserve */; reg ad_rst_sync = 'd0 /* synthesis preserve */; reg rst = 'd0; // simple reset gen always @(posedge clk) begin ad_rst_sync_m1 <= preset; ad_rst_sync <= ad_rst_sync_m1; rst <= ad_rst_sync; end endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_serdes_clk.v000066400000000000000000000114541457144405000272440ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // serial data output interface: serdes(x8) or oddr(x2) output module `timescale 1ps/1ps module ad_serdes_clk ( // clock and divided clock mmcm_rst, clk_in_p, clk_in_n, clk, div_clk, // drp interface up_clk, up_rstn, up_drp_sel, up_drp_wr, up_drp_addr, up_drp_wdata, up_drp_rdata, up_drp_ready, up_drp_locked); // parameters parameter SERDES_OR_DDR_N = 1; parameter MMCM_OR_BUFR_N = 1; parameter MMCM_DEVICE_TYPE = 0; parameter MMCM_CLKIN_PERIOD = 1.667; parameter MMCM_VCO_DIV = 6; parameter MMCM_VCO_MUL = 12.000; parameter MMCM_CLK0_DIV = 2.000; parameter MMCM_CLK1_DIV = 6; // clock and divided clock input mmcm_rst; input clk_in_p; input clk_in_n; output clk; output div_clk; // drp interface input up_clk; input up_rstn; input up_drp_sel; input up_drp_wr; input [11:0] up_drp_addr; input [15:0] up_drp_wdata; output [15:0] up_drp_rdata; output up_drp_ready; output up_drp_locked; // internal signals wire clk_in_s; // instantiations IBUFGDS i_clk_in_ibuf ( .I (clk_in_p), .IB (clk_in_n), .O (clk_in_s)); generate if (MMCM_OR_BUFR_N == 1) begin ad_mmcm_drp #( .MMCM_DEVICE_TYPE (MMCM_DEVICE_TYPE), .MMCM_CLKIN_PERIOD (MMCM_CLKIN_PERIOD), .MMCM_VCO_DIV (MMCM_VCO_DIV), .MMCM_VCO_MUL (MMCM_VCO_MUL), .MMCM_CLK0_DIV (MMCM_CLK0_DIV), .MMCM_CLK1_DIV (MMCM_CLK1_DIV)) i_mmcm_drp ( .clk (clk_in_s), .mmcm_rst (mmcm_rst), .mmcm_clk_0 (clk), .mmcm_clk_1 (div_clk), .up_clk (up_clk), .up_rstn (up_rstn), .up_drp_sel (up_drp_sel), .up_drp_wr (up_drp_wr), .up_drp_addr (up_drp_addr), .up_drp_wdata (up_drp_wdata), .up_drp_rdata (up_drp_rdata), .up_drp_ready (up_drp_ready), .up_drp_locked (up_drp_locked)); end if ((MMCM_OR_BUFR_N == 0) && (SERDES_OR_DDR_N == 0)) begin BUFR #(.BUFR_DIVIDE("BYPASS")) i_clk_buf ( .CLR (1'b0), .CE (1'b1), .I (clk_in_s), .O (clk)); assign div_clk = clk; end if ((MMCM_OR_BUFR_N == 0) && (SERDES_OR_DDR_N == 1)) begin BUFIO i_clk_buf ( .I (clk_in_s), .O (clk)); BUFR #(.BUFR_DIVIDE("4")) i_div_clk_buf ( .CLR (1'b0), .CE (1'b1), .I (clk_in_s), .O (div_clk)); end endgenerate endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_serdes_in.v000066400000000000000000000243731457144405000271050ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR // IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE // USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** `timescale 1ps/1ps module ad_serdes_in ( // reset and clocks rst, clk, div_clk, // data interface data_s0, data_s1, data_s2, data_s3, data_s4, data_s5, data_s6, data_s7, data_in_p, data_in_n, // delay-data interface up_clk, up_dld, up_dwdata, up_drdata, // delay-control interface delay_clk, delay_rst, delay_locked); // parameters parameter DEVICE_TYPE = 0; parameter IODELAY_CTRL = 0; parameter IODELAY_GROUP = "dev_if_delay_group"; // SDR = 0 / DDR = 1 parameter DDR_OR_SDR_N = 0; // serialization factor parameter DATA_WIDTH = 8; localparam DEVICE_6SERIES = 1; localparam DEVICE_7SERIES = 0; localparam SDR = 0; localparam DDR = 1; // reset and clocks input rst; input clk; input div_clk; // data interface output data_s0; output data_s1; output data_s2; output data_s3; output data_s4; output data_s5; output data_s6; output data_s7; input data_in_p; input data_in_n; // delay-data interface input up_clk; input up_dld; input [ 4:0] up_dwdata; output [ 4:0] up_drdata; // delay-control interface input delay_clk; input delay_rst; output delay_locked; // internal signals wire data_in_ibuf_s; wire data_in_idelay_s; wire data_shift1_s; wire data_shift2_s; // delay controller generate if (IODELAY_CTRL == 1) begin (* IODELAY_GROUP = IODELAY_GROUP *) IDELAYCTRL i_delay_ctrl ( .RST (delay_rst), .REFCLK (delay_clk), .RDY (delay_locked)); end else begin assign delay_locked = 1'b1; end endgenerate // received data interface: ibuf -> idelay -> iserdes IBUFDS i_ibuf ( .O(data_in_ibuf_s), .I(data_in_p), .IB(data_in_n) ); if(DEVICE_TYPE == DEVICE_7SERIES) begin (* IODELAY_GROUP = IODELAY_GROUP *) IDELAYE2 #( .CINVCTRL_SEL ("FALSE"), .DELAY_SRC ("IDATAIN"), .HIGH_PERFORMANCE_MODE ("FALSE"), .IDELAY_TYPE ("VAR_LOAD"), .IDELAY_VALUE (0), .REFCLK_FREQUENCY (200.0), .PIPE_SEL ("FALSE"), .SIGNAL_PATTERN ("DATA")) i_rx_data_idelay ( .CE (1'b0), .INC (1'b0), .DATAIN (1'b0), .LDPIPEEN (1'b0), .CINVCTRL (1'b0), .REGRST (1'b0), .C (up_clk), .IDATAIN (data_in_ibuf_s), .DATAOUT (data_in_idelay_s), .LD (up_dld), .CNTVALUEIN (up_dwdata), .CNTVALUEOUT (up_drdata)); // Note: The first sample in time will be data_s7, the last data_s0! if(DDR_OR_SDR_N == SDR) begin ISERDESE2 #( .DATA_RATE("SDR"), .DATA_WIDTH(DATA_WIDTH), .DYN_CLKDIV_INV_EN("FALSE"), .DYN_CLK_INV_EN("FALSE"), .INIT_Q1(1'b0), .INIT_Q2(1'b0), .INIT_Q3(1'b0), .INIT_Q4(1'b0), .INTERFACE_TYPE("NETWORKING"), .IOBDELAY("IFD"), .NUM_CE(2), .OFB_USED("FALSE"), .SERDES_MODE("MASTER"), .SRVAL_Q1(1'b0), .SRVAL_Q2(1'b0), .SRVAL_Q3(1'b0), .SRVAL_Q4(1'b0)) ISERDESE2_inst ( .O(), .Q1(data_s0), .Q2(data_s1), .Q3(data_s2), .Q4(data_s3), .Q5(data_s4), .Q6(data_s5), .Q7(data_s6), .Q8(data_s7), .SHIFTOUT1(), .SHIFTOUT2(), .BITSLIP(1'b0), .CE1(1'b1), .CE2(1'b1), .CLKDIVP(1'b0), .CLK(clk), .CLKB(~clk), .CLKDIV(div_clk), .OCLK(1'b0), .DYNCLKDIVSEL(1'b0), .DYNCLKSEL(1'b0), .D(1'b0), .DDLY(data_in_idelay_s), .OFB(1'b0), .OCLKB(1'b0), .RST(rst), .SHIFTIN1(1'b0), .SHIFTIN2(1'b0) ); end else begin ISERDESE2 #( .DATA_RATE("DDR"), .DATA_WIDTH(DATA_WIDTH), .DYN_CLKDIV_INV_EN("FALSE"), .DYN_CLK_INV_EN("FALSE"), .INIT_Q1(1'b0), .INIT_Q2(1'b0), .INIT_Q3(1'b0), .INIT_Q4(1'b0), .INTERFACE_TYPE("NETWORKING"), .IOBDELAY("IFD"), .NUM_CE(2), .OFB_USED("FALSE"), .SERDES_MODE("MASTER"), .SRVAL_Q1(1'b0), .SRVAL_Q2(1'b0), .SRVAL_Q3(1'b0), .SRVAL_Q4(1'b0)) ISERDESE2_inst ( .O(), .Q1(data_s0), .Q2(data_s1), .Q3(data_s2), .Q4(data_s3), .Q5(data_s4), .Q6(data_s5), .Q7(data_s6), .Q8(data_s7), .SHIFTOUT1(), .SHIFTOUT2(), .BITSLIP(1'b0), .CE1(1'b1), .CE2(1'b1), .CLKDIVP(1'b0), .CLK(clk), .CLKB(~clk), .CLKDIV(div_clk), .OCLK(1'b0), .DYNCLKDIVSEL(1'b0), .DYNCLKSEL(1'b0), .D(1'b0), .DDLY(data_in_idelay_s), .OFB(1'b0), .OCLKB(1'b0), .RST(rst), .SHIFTIN1(1'b0), .SHIFTIN2(1'b0) ); end end if(DEVICE_TYPE == DEVICE_6SERIES) begin (* IODELAY_GROUP = IODELAY_GROUP *) IODELAYE1 #( .CINVCTRL_SEL ("FALSE"), .DELAY_SRC ("I"), .HIGH_PERFORMANCE_MODE ("TRUE"), .IDELAY_TYPE ("VAR_LOADABLE"), .IDELAY_VALUE (0), .ODELAY_TYPE ("FIXED"), .ODELAY_VALUE (0), .REFCLK_FREQUENCY (200.0), .SIGNAL_PATTERN ("DATA")) i_rx_data_idelay ( .T (1'b1), .CE (1'b0), .INC (1'b0), .CLKIN (1'b0), .DATAIN (1'b0), .ODATAIN (1'b0), .CINVCTRL (1'b0), .C (up_clk), .IDATAIN (data_in_ibuf_s), .DATAOUT (data_in_idelay_s), .RST (up_dld), .CNTVALUEIN (up_dwdata), .CNTVALUEOUT (up_drdata)); ISERDESE1 #( .DATA_RATE("DDR"), .DATA_WIDTH(DATA_WIDTH), .DYN_CLKDIV_INV_EN("FALSE"), .DYN_CLK_INV_EN("FALSE"), .INIT_Q1(1'b0), .INIT_Q2(1'b0), .INIT_Q3(1'b0), .INIT_Q4(1'b0), .INTERFACE_TYPE("NETWORKING"), .IOBDELAY("NONE"), .NUM_CE(1), .OFB_USED("FALSE"), .SERDES_MODE("MASTER"), .SRVAL_Q1(1'b0), .SRVAL_Q2(1'b0), .SRVAL_Q3(1'b0), .SRVAL_Q4(1'b0)) i_serdes_m ( .O(), .Q1(data_s0), .Q2(data_s1), .Q3(data_s2), .Q4(data_s3), .Q5(data_s4), .Q6(data_s5), .SHIFTOUT1(data_shift1_s), .SHIFTOUT2(data_shift2_s), .BITSLIP(1'b0), .CE1(1'b1), .CE2(1'b1), .CLK(clk), .CLKB(1'b0), .CLKDIV(div_clk), .OCLK(1'b0), .DYNCLKDIVSEL(1'b0), .DYNCLKSEL(1'b0), .D(data_in_idelay_s), .DDLY(1'b0), .OFB(1'b0), .RST(rst), .SHIFTIN1(1'b0), .SHIFTIN2(1'b0) ); ISERDESE1 #( .DATA_RATE("DDR"), .DATA_WIDTH(DATA_WIDTH), .DYN_CLKDIV_INV_EN("FALSE"), .DYN_CLK_INV_EN("FALSE"), .INIT_Q1(1'b0), .INIT_Q2(1'b0), .INIT_Q3(1'b0), .INIT_Q4(1'b0), .INTERFACE_TYPE("NETWORKING"), .IOBDELAY("NONE"), .NUM_CE(1), .OFB_USED("FALSE"), .SERDES_MODE("SLAVE"), .SRVAL_Q1(1'b0), .SRVAL_Q2(1'b0), .SRVAL_Q3(1'b0), .SRVAL_Q4(1'b0)) i_serdes_s ( .O(), .Q1(), .Q2(), .Q3(data_s6), .Q4(data_s7), .Q5(), .Q6(), .SHIFTOUT1(), .SHIFTOUT2(), .BITSLIP(1'b0), .CE1(1'b1), .CE2(1'b1), .CLK(clk), .CLKB(1'b0), .CLKDIV(div_clk), .OCLK(1'b0), .DYNCLKDIVSEL(1'b0), .DYNCLKSEL(1'b0), .D(1'b0), .DDLY(1'b0), .OFB(1'b0), .RST(rst), .SHIFTIN1(data_shift1_s), .SHIFTIN2(data_shift2_s)); end endmodule bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_serdes_out.v000066400000000000000000000147511457144405000273050ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** // serial data output interface: serdes(x8) or oddr(x2) output module `timescale 1ps/1ps module ad_serdes_out ( // reset and clocks rst, clk, div_clk, // data interface data_s0, data_s1, data_s2, data_s3, data_s4, data_s5, data_s6, data_s7, data_out_p, data_out_n); // parameters parameter DEVICE_TYPE = 0; parameter SERDES_OR_DDR_N = 1; parameter DATA_WIDTH = 16; localparam DEVICE_6SERIES = 1; localparam DEVICE_7SERIES = 0; localparam DW = DATA_WIDTH - 1; // reset and clocks input rst; input clk; input div_clk; // data interface input [DW:0] data_s0; input [DW:0] data_s1; input [DW:0] data_s2; input [DW:0] data_s3; input [DW:0] data_s4; input [DW:0] data_s5; input [DW:0] data_s6; input [DW:0] data_s7; output [DW:0] data_out_p; output [DW:0] data_out_n; // internal signals wire [DW:0] data_out_s; wire [DW:0] serdes_shift1_s; wire [DW:0] serdes_shift2_s; // instantiations genvar l_inst; generate for (l_inst = 0; l_inst <= DW; l_inst = l_inst + 1) begin: g_data if (SERDES_OR_DDR_N == 0) begin ODDR #( .DDR_CLK_EDGE ("SAME_EDGE"), .INIT (1'b0), .SRTYPE ("ASYNC")) i_oddr ( .S (1'b0), .CE (1'b1), .R (rst), .C (clk), .D1 (data_s0[l_inst]), .D2 (data_s1[l_inst]), .Q (data_out_s[l_inst])); end if ((SERDES_OR_DDR_N == 1) && (DEVICE_TYPE == DEVICE_7SERIES)) begin OSERDESE2 #( .DATA_RATE_OQ ("DDR"), .DATA_RATE_TQ ("SDR"), .DATA_WIDTH (8), .TRISTATE_WIDTH (1), .SERDES_MODE ("MASTER")) i_serdes ( .D1 (data_s0[l_inst]), .D2 (data_s1[l_inst]), .D3 (data_s2[l_inst]), .D4 (data_s3[l_inst]), .D5 (data_s4[l_inst]), .D6 (data_s5[l_inst]), .D7 (data_s6[l_inst]), .D8 (data_s7[l_inst]), .T1 (1'b0), .T2 (1'b0), .T3 (1'b0), .T4 (1'b0), .SHIFTIN1 (1'b0), .SHIFTIN2 (1'b0), .SHIFTOUT1 (), .SHIFTOUT2 (), .OCE (1'b1), .CLK (clk), .CLKDIV (div_clk), .OQ (data_out_s[l_inst]), .TQ (), .OFB (), .TFB (), .TBYTEIN (1'b0), .TBYTEOUT (), .TCE (1'b0), .RST (rst)); end if ((SERDES_OR_DDR_N == 1) && (DEVICE_TYPE == DEVICE_6SERIES)) begin OSERDESE1 #( .DATA_RATE_OQ ("DDR"), .DATA_RATE_TQ ("SDR"), .DATA_WIDTH (8), .INTERFACE_TYPE ("DEFAULT"), .TRISTATE_WIDTH (1), .SERDES_MODE ("MASTER")) i_serdes_m ( .D1 (data_s0[l_inst]), .D2 (data_s1[l_inst]), .D3 (data_s2[l_inst]), .D4 (data_s3[l_inst]), .D5 (data_s4[l_inst]), .D6 (data_s5[l_inst]), .T1 (1'b0), .T2 (1'b0), .T3 (1'b0), .T4 (1'b0), .SHIFTIN1 (serdes_shift1_s[l_inst]), .SHIFTIN2 (serdes_shift2_s[l_inst]), .SHIFTOUT1 (), .SHIFTOUT2 (), .OCE (1'b1), .CLK (clk), .CLKDIV (div_clk), .CLKPERF (1'b0), .CLKPERFDELAY (1'b0), .WC (1'b0), .ODV (1'b0), .OQ (data_out_s[l_inst]), .TQ (), .OCBEXTEND (), .OFB (), .TFB (), .TCE (1'b0), .RST (rst)); OSERDESE1 #( .DATA_RATE_OQ ("DDR"), .DATA_RATE_TQ ("SDR"), .DATA_WIDTH (8), .INTERFACE_TYPE ("DEFAULT"), .TRISTATE_WIDTH (1), .SERDES_MODE ("SLAVE")) i_serdes_s ( .D1 (1'b0), .D2 (1'b0), .D3 (data_s6[l_inst]), .D4 (data_s7[l_inst]), .D5 (1'b0), .D6 (1'b0), .T1 (1'b0), .T2 (1'b0), .T3 (1'b0), .T4 (1'b0), .SHIFTIN1 (1'b0), .SHIFTIN2 (1'b0), .SHIFTOUT1 (serdes_shift1_s[l_inst]), .SHIFTOUT2 (serdes_shift2_s[l_inst]), .OCE (1'b1), .CLK (clk), .CLKDIV (div_clk), .CLKPERF (1'b0), .CLKPERFDELAY (1'b0), .WC (1'b0), .ODV (1'b0), .OQ (), .TQ (), .OCBEXTEND (), .OFB (), .TFB (), .TCE (1'b0), .RST (rst)); end OBUFDS i_obuf ( .I (data_out_s[l_inst]), .O (data_out_p[l_inst]), .OB (data_out_n[l_inst])); end endgenerate endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_ss_422to444.v000066400000000000000000000116471457144405000267450ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** // Input must be RGB or CrYCb in that order, output is CrY/CbY module ad_ss_422to444 ( // 422 inputs clk, s422_de, s422_sync, s422_data, // 444 outputs s444_sync, s444_data); // parameters parameter CR_CB_N = 0; parameter DELAY_DATA_WIDTH = 16; localparam DW = DELAY_DATA_WIDTH - 1; // 422 inputs input clk; input s422_de; input [DW:0] s422_sync; input [15:0] s422_data; // 444 inputs output [DW:0] s444_sync; output [23:0] s444_data; // internal registers reg cr_cb_sel = 'd0; reg s422_de_d = 'd0; reg [DW:0] s422_sync_d = 'd0; reg s422_de_2d = 'd0; reg [7:0] s422_Y_d; reg [7:0] s422_CbCr_d; reg [7:0] s422_CbCr_2d; reg [DW:0] s444_sync = 'd0; reg [23:0] s444_data = 'd0; reg [ 8:0] s422_CbCr_avg; // internal wires wire [ 7:0] s422_Y; wire [ 7:0] s422_CbCr; // Input format is // [15:8] Cb/Cr // [ 7:0] Y // // Output format is // [23:15] Cr // [16: 8] Y // [ 7: 0] Cb assign s422_Y = s422_data[7:0]; assign s422_CbCr = s422_data[15:8]; // first data on de assertion is cb (0x0), then cr (0x1). // previous data is held when not current always @(posedge clk) begin if (s422_de_d == 1'b1) begin cr_cb_sel <= ~cr_cb_sel; end else begin cr_cb_sel <= CR_CB_N; end end // pipe line stages always @(posedge clk) begin s422_de_d <= s422_de; s422_sync_d <= s422_sync; s422_de_2d <= s422_de_d; s422_Y_d <= s422_Y; s422_CbCr_d <= s422_CbCr; s422_CbCr_2d <= s422_CbCr_d; end // If both the left and the right sample are valid do the average, otherwise // use the only valid. always @(s422_de_2d, s422_de, s422_CbCr, s422_CbCr_2d) begin if (s422_de == 1'b1 && s422_de_2d) s422_CbCr_avg <= s422_CbCr + s422_CbCr_2d; else if (s422_de == 1'b1) s422_CbCr_avg <= {s422_CbCr, 1'b0}; else s422_CbCr_avg <= {s422_CbCr_2d, 1'b0}; end // 444 outputs always @(posedge clk) begin s444_sync <= s422_sync_d; s444_data[15:8] <= s422_Y_d; if (cr_cb_sel) begin s444_data[23:16] <= s422_CbCr_d; s444_data[ 7: 0] <= s422_CbCr_avg[8:1]; end else begin s444_data[23:16] <= s422_CbCr_avg[8:1]; s444_data[ 7: 0] <= s422_CbCr_d; end end endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_ss_444to422.v000066400000000000000000000117661457144405000267470ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** // Input must be RGB or CrYCb in that order, output is CrY/CbY module ad_ss_444to422 ( // 444 inputs clk, s444_de, s444_sync, s444_data, // 422 outputs s422_sync, s422_data); // parameters parameter CR_CB_N = 0; parameter DELAY_DATA_WIDTH = 16; localparam DW = DELAY_DATA_WIDTH - 1; // 444 inputs input clk; input s444_de; input [DW:0] s444_sync; input [23:0] s444_data; // 422 outputs output [DW:0] s422_sync; output [15:0] s422_data; // internal registers reg s444_de_d = 'd0; reg [DW:0] s444_sync_d = 'd0; reg [23:0] s444_data_d = 'd0; reg s444_de_2d = 'd0; reg [DW:0] s444_sync_2d = 'd0; reg [23:0] s444_data_2d = 'd0; reg s444_de_3d = 'd0; reg [DW:0] s444_sync_3d = 'd0; reg [23:0] s444_data_3d = 'd0; reg [ 7:0] cr = 'd0; reg [ 7:0] cb = 'd0; reg cr_cb_sel = 'd0; reg [DW:0] s422_sync = 'd0; reg [15:0] s422_data = 'd0; // internal wires wire [ 9:0] cr_s; wire [ 9:0] cb_s; // fill the data pipe lines, hold the last data on edges always @(posedge clk) begin s444_de_d <= s444_de; s444_sync_d <= s444_sync; if (s444_de == 1'b1) begin s444_data_d <= s444_data; end s444_de_2d <= s444_de_d; s444_sync_2d <= s444_sync_d; if (s444_de_d == 1'b1) begin s444_data_2d <= s444_data_d; end s444_de_3d <= s444_de_2d; s444_sync_3d <= s444_sync_2d; if (s444_de_2d == 1'b1) begin s444_data_3d <= s444_data_2d; end end // get the average 0.25*s(n-1) + 0.5*s(n) + 0.25*s(n+1) assign cr_s = {2'd0, s444_data_d[23:16]} + {2'd0, s444_data_3d[23:16]} + {1'd0, s444_data_2d[23:16], 1'd0}; assign cb_s = {2'd0, s444_data_d[7:0]} + {2'd0, s444_data_3d[7:0]} + {1'd0, s444_data_2d[7:0], 1'd0}; always @(posedge clk) begin cr <= cr_s[9:2]; cb <= cb_s[9:2]; if (s444_de_3d == 1'b1) begin cr_cb_sel <= ~cr_cb_sel; end else begin cr_cb_sel <= CR_CB_N; end end // 422 outputs always @(posedge clk) begin s422_sync <= s444_sync_3d; if (s444_de_3d == 1'b0) begin s422_data <= 'd0; end else if (cr_cb_sel == 1'b1) begin s422_data <= {cr, s444_data_3d[15:8]}; end else begin s422_data <= {cb, s444_data_3d[15:8]}; end end endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_tdd_control.v000066400000000000000000000562721457144405000274500ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2015(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** `timescale 1ns/1ps module ad_tdd_control( // clock and reset clk, rst, // TDD timming signals tdd_enable, tdd_enable_synced, tdd_secondary, tdd_tx_only, tdd_rx_only, tdd_burst_count, tdd_counter_init, tdd_frame_length, tdd_vco_rx_on_1, tdd_vco_rx_off_1, tdd_vco_tx_on_1, tdd_vco_tx_off_1, tdd_rx_on_1, tdd_rx_off_1, tdd_tx_on_1, tdd_tx_off_1, tdd_tx_dp_on_1, tdd_tx_dp_off_1, tdd_vco_rx_on_2, tdd_vco_rx_off_2, tdd_vco_tx_on_2, tdd_vco_tx_off_2, tdd_rx_on_2, tdd_rx_off_2, tdd_tx_on_2, tdd_tx_off_2, tdd_tx_dp_on_2, tdd_tx_dp_off_2, tdd_sync, tdd_sync_en, // TDD control signals tdd_tx_dp_en, tdd_rx_vco_en, tdd_tx_vco_en, tdd_rx_rf_en, tdd_tx_rf_en, tdd_counter_status); // parameters parameter integer TX_DATA_PATH_DELAY = 0; // internally eliminate the delay introduced by the TX data path parameter integer CONTROL_PATH_DELAY = 0; // internally eliminate the delay introduced by the control path localparam ON = 1'b1; localparam OFF = 1'b0; // input/output signals input clk; input rst; input tdd_enable; output tdd_enable_synced; input tdd_secondary; input tdd_tx_only; input tdd_rx_only; input [ 7:0] tdd_burst_count; input [23:0] tdd_counter_init; input [23:0] tdd_frame_length; input [23:0] tdd_vco_rx_on_1; input [23:0] tdd_vco_rx_off_1; input [23:0] tdd_vco_tx_on_1; input [23:0] tdd_vco_tx_off_1; input [23:0] tdd_rx_on_1; input [23:0] tdd_rx_off_1; input [23:0] tdd_tx_on_1; input [23:0] tdd_tx_off_1; input [23:0] tdd_tx_dp_on_1; input [23:0] tdd_tx_dp_off_1; input [23:0] tdd_vco_rx_on_2; input [23:0] tdd_vco_rx_off_2; input [23:0] tdd_vco_tx_on_2; input [23:0] tdd_vco_tx_off_2; input [23:0] tdd_rx_on_2; input [23:0] tdd_rx_off_2; input [23:0] tdd_tx_on_2; input [23:0] tdd_tx_off_2; input [23:0] tdd_tx_dp_on_2; input [23:0] tdd_tx_dp_off_2; input tdd_sync; output tdd_sync_en; output tdd_tx_dp_en; // initiate vco tx2rx switch output tdd_rx_vco_en; // initiate vco rx2tx switch output tdd_tx_vco_en; // power up RF Rx output tdd_rx_rf_en; // power up RF Tx output tdd_tx_rf_en; // enable Tx datapath output [23:0] tdd_counter_status; // tdd control related reg tdd_tx_dp_en = 1'b0; reg tdd_rx_vco_en = 1'b0; reg tdd_tx_vco_en = 1'b0; reg tdd_rx_rf_en = 1'b0; reg tdd_tx_rf_en = 1'b0; // tdd counter related reg [23:0] tdd_counter = 24'h0; reg [ 5:0] tdd_burst_counter = 6'h0; reg tdd_cstate = OFF; reg tdd_cstate_next = OFF; reg counter_at_tdd_vco_rx_on_1 = 1'b0; reg counter_at_tdd_vco_rx_off_1 = 1'b0; reg counter_at_tdd_vco_tx_on_1 = 1'b0; reg counter_at_tdd_vco_tx_off_1 = 1'b0; reg counter_at_tdd_rx_on_1 = 1'b0; reg counter_at_tdd_rx_off_1 = 1'b0; reg counter_at_tdd_tx_on_1 = 1'b0; reg counter_at_tdd_tx_off_1 = 1'b0; reg counter_at_tdd_tx_dp_on_1 = 1'b0; reg counter_at_tdd_tx_dp_off_1 = 1'b0; reg counter_at_tdd_vco_rx_on_2 = 1'b0; reg counter_at_tdd_vco_rx_off_2 = 1'b0; reg counter_at_tdd_vco_tx_on_2 = 1'b0; reg counter_at_tdd_vco_tx_off_2 = 1'b0; reg counter_at_tdd_rx_on_2 = 1'b0; reg counter_at_tdd_rx_off_2 = 1'b0; reg counter_at_tdd_tx_on_2 = 1'b0; reg counter_at_tdd_tx_off_2 = 1'b0; reg counter_at_tdd_tx_dp_on_2 = 1'b0; reg counter_at_tdd_tx_dp_off_2 = 1'b0; reg tdd_enable_synced = 1'h0; reg tdd_last_burst = 1'b0; reg tdd_sync_d1 = 1'b0; reg tdd_sync_d2 = 1'b0; reg tdd_sync_d3 = 1'b0; reg tdd_sync_en = 1'b0; // internal signals wire [23:0] tdd_vco_rx_on_1_s; wire [23:0] tdd_vco_rx_off_1_s; wire [23:0] tdd_vco_tx_on_1_s; wire [23:0] tdd_vco_tx_off_1_s; wire [23:0] tdd_rx_on_1_s; wire [23:0] tdd_rx_off_1_s; wire [23:0] tdd_tx_on_1_s; wire [23:0] tdd_tx_off_1_s; wire [23:0] tdd_tx_dp_on_1_s; wire [23:0] tdd_tx_dp_off_1_s; wire [23:0] tdd_vco_rx_on_2_s; wire [23:0] tdd_vco_rx_off_2_s; wire [23:0] tdd_vco_tx_on_2_s; wire [23:0] tdd_vco_tx_off_2_s; wire [23:0] tdd_rx_on_2_s; wire [23:0] tdd_rx_off_2_s; wire [23:0] tdd_tx_on_2_s; wire [23:0] tdd_tx_off_2_s; wire [23:0] tdd_tx_dp_on_2_s; wire [23:0] tdd_tx_dp_off_2_s; wire tdd_endof_frame; wire tdd_endof_burst; wire tdd_txrx_only_en_s; assign tdd_counter_status = tdd_counter; // synchronization of tdd_sync always @(posedge clk) begin if (rst == 1'b1) begin tdd_sync_en <= 1'b0; tdd_sync_d1 <= 1'b0; tdd_sync_d2 <= 1'b0; tdd_sync_d3 <= 1'b0; end else begin tdd_sync_en <= tdd_enable; tdd_sync_d1 <= tdd_sync; tdd_sync_d2 <= tdd_sync_d1; tdd_sync_d3 <= tdd_sync_d2; end end always @(posedge clk) begin if (rst == 1'b1) begin tdd_enable_synced <= 1'b0; end else begin tdd_enable_synced <= ((~tdd_sync_d3 & tdd_sync_d2) == 1'b1) ? tdd_enable : tdd_enable_synced; end end // *************************************************************************** // tdd counter (state machine) // *************************************************************************** always @(posedge clk) begin if (rst == 1'b1) begin tdd_cstate <= OFF; end else begin tdd_cstate <= tdd_cstate_next; end end always @* begin tdd_cstate_next <= tdd_cstate; case (tdd_cstate) ON : begin if ((tdd_enable == 1'b0) || (tdd_endof_burst == 1'b1)) begin tdd_cstate_next <= OFF; end end OFF : begin if(tdd_enable == 1'b1) begin tdd_cstate_next <= ((~tdd_sync_d3 & tdd_sync_d2) == 1'b1) ? ON : OFF; end end endcase end assign tdd_endof_frame = (tdd_counter == tdd_frame_length) ? 1'b1 : 1'b0; assign tdd_endof_burst = ((tdd_last_burst == 1'b1) && (tdd_counter == tdd_frame_length)) ? 1'b1 : 1'b0; // tdd free running counter always @(posedge clk) begin if (rst == 1'b1) begin tdd_counter <= tdd_counter_init; end else begin if (tdd_cstate == ON) begin if ((~tdd_sync_d3 & tdd_sync_d2) == 1'b1) begin tdd_counter <= 24'b0; end else begin tdd_counter <= (tdd_counter < tdd_frame_length) ? tdd_counter + 1'b1 : 24'b0; end end else begin tdd_counter <= tdd_counter_init; end end end // tdd burst counter always @(posedge clk) begin if (rst == 1'b1) begin tdd_burst_counter <= tdd_burst_count[5:0]; end else begin if (tdd_cstate == ON) begin tdd_burst_counter <= ((tdd_burst_counter > 0) && (tdd_endof_frame == 1'b1)) ? tdd_burst_counter - 1'b1 : tdd_burst_counter; end else begin tdd_burst_counter <= tdd_burst_count[5:0]; end end end always @(posedge clk) begin tdd_last_burst <= (tdd_burst_counter == 6'b1) ? 1'b1 : 1'b0; end // *************************************************************************** // generate control signals // *************************************************************************** // start/stop rx vco always @(posedge clk) begin if(rst == 1'b1) begin counter_at_tdd_vco_rx_on_1 <= 1'b0; end else if(tdd_counter == tdd_vco_rx_on_1_s) begin counter_at_tdd_vco_rx_on_1 <= 1'b1; end else begin counter_at_tdd_vco_rx_on_1 <= 1'b0; end end always @(posedge clk) begin if(rst == 1'b1) begin counter_at_tdd_vco_rx_on_2 <= 1'b0; end else if((tdd_secondary == 1'b1) && (tdd_counter == tdd_vco_rx_on_2_s)) begin counter_at_tdd_vco_rx_on_2 <= 1'b1; end else begin counter_at_tdd_vco_rx_on_2 <= 1'b0; end end always @(posedge clk) begin if(rst == 1'b1) begin counter_at_tdd_vco_rx_off_1 <= 1'b0; end else if(tdd_counter == tdd_vco_rx_off_1_s) begin counter_at_tdd_vco_rx_off_1 <= 1'b1; end else begin counter_at_tdd_vco_rx_off_1 <= 1'b0; end end always @(posedge clk) begin if(rst == 1'b1) begin counter_at_tdd_vco_rx_off_2 <= 1'b0; end else if((tdd_secondary == 1'b1) && (tdd_counter == tdd_vco_rx_off_2_s)) begin counter_at_tdd_vco_rx_off_2 <= 1'b1; end else begin counter_at_tdd_vco_rx_off_2 <= 1'b0; end end // start/stop tx vco always @(posedge clk) begin if(rst == 1'b1) begin counter_at_tdd_vco_tx_on_1 <= 1'b0; end else if(tdd_counter == tdd_vco_tx_on_1_s) begin counter_at_tdd_vco_tx_on_1 <= 1'b1; end else begin counter_at_tdd_vco_tx_on_1 <= 1'b0; end end always @(posedge clk) begin if(rst == 1'b1) begin counter_at_tdd_vco_tx_on_2 <= 1'b0; end else if((tdd_secondary == 1'b1) && (tdd_counter == tdd_vco_tx_on_2_s)) begin counter_at_tdd_vco_tx_on_2 <= 1'b1; end else begin counter_at_tdd_vco_tx_on_2 <= 1'b0; end end always @(posedge clk) begin if(rst == 1'b1) begin counter_at_tdd_vco_tx_off_1 <= 1'b0; end else if(tdd_counter == tdd_vco_tx_off_1_s) begin counter_at_tdd_vco_tx_off_1 <= 1'b1; end else begin counter_at_tdd_vco_tx_off_1 <= 1'b0; end end always @(posedge clk) begin if(rst == 1'b1) begin counter_at_tdd_vco_tx_off_2 <= 1'b0; end else if((tdd_secondary == 1'b1) && (tdd_counter == tdd_vco_tx_off_2_s)) begin counter_at_tdd_vco_tx_off_2 <= 1'b1; end else begin counter_at_tdd_vco_tx_off_2 <= 1'b0; end end // start/stop rx rf path always @(posedge clk) begin if(rst == 1'b1) begin counter_at_tdd_rx_on_1 <= 1'b0; end else if(tdd_counter == tdd_rx_on_1_s) begin counter_at_tdd_rx_on_1 <= 1'b1; end else begin counter_at_tdd_rx_on_1 <= 1'b0; end end always @(posedge clk) begin if(rst == 1'b1) begin counter_at_tdd_rx_on_2 <= 1'b0; end else if((tdd_secondary == 1'b1) && (tdd_counter == tdd_rx_on_2_s)) begin counter_at_tdd_rx_on_2 <= 1'b1; end else begin counter_at_tdd_rx_on_2 <= 1'b0; end end always @(posedge clk) begin if(rst == 1'b1) begin counter_at_tdd_rx_off_1 <= 1'b0; end else if(tdd_counter == tdd_rx_off_1_s) begin counter_at_tdd_rx_off_1 <= 1'b1; end else begin counter_at_tdd_rx_off_1 <= 1'b0; end end always @(posedge clk) begin if(rst == 1'b1) begin counter_at_tdd_rx_off_2 <= 1'b0; end else if((tdd_secondary == 1'b1) && (tdd_counter == tdd_rx_off_2_s)) begin counter_at_tdd_rx_off_2 <= 1'b1; end else begin counter_at_tdd_rx_off_2 <= 1'b0; end end // start/stop tx rf path always @(posedge clk) begin if(rst == 1'b1) begin counter_at_tdd_tx_on_1 <= 1'b0; end else if(tdd_counter == tdd_tx_on_1_s) begin counter_at_tdd_tx_on_1 <= 1'b1; end else begin counter_at_tdd_tx_on_1 <= 1'b0; end end always @(posedge clk) begin if(rst == 1'b1) begin counter_at_tdd_tx_on_2 <= 1'b0; end else if((tdd_secondary == 1'b1) && (tdd_counter == tdd_tx_on_2_s)) begin counter_at_tdd_tx_on_2 <= 1'b1; end else begin counter_at_tdd_tx_on_2 <= 1'b0; end end always @(posedge clk) begin if(rst == 1'b1) begin counter_at_tdd_tx_off_1 <= 1'b0; end else if(tdd_counter == tdd_tx_off_1_s) begin counter_at_tdd_tx_off_1 <= 1'b1; end else begin counter_at_tdd_tx_off_1 <= 1'b0; end end always @(posedge clk) begin if(rst == 1'b1) begin counter_at_tdd_tx_off_2 <= 1'b0; end else if((tdd_secondary == 1'b1) && (tdd_counter == tdd_tx_off_2_s)) begin counter_at_tdd_tx_off_2 <= 1'b1; end else begin counter_at_tdd_tx_off_2 <= 1'b0; end end // start/stop tx data path always @(posedge clk) begin if(rst == 1'b1) begin counter_at_tdd_tx_dp_on_1 <= 1'b0; end else if(tdd_counter == tdd_tx_dp_on_1_s) begin counter_at_tdd_tx_dp_on_1 <= 1'b1; end else begin counter_at_tdd_tx_dp_on_1 <= 1'b0; end end always @(posedge clk) begin if(rst == 1'b1) begin counter_at_tdd_tx_dp_on_2 <= 1'b0; end else if((tdd_secondary == 1'b1) && (tdd_counter == tdd_tx_dp_on_2_s)) begin counter_at_tdd_tx_dp_on_2 <= 1'b1; end else begin counter_at_tdd_tx_dp_on_2 <= 1'b0; end end always @(posedge clk) begin if(rst == 1'b1) begin counter_at_tdd_tx_dp_off_1 <= 1'b0; end else if(tdd_counter == tdd_tx_dp_off_1_s) begin counter_at_tdd_tx_dp_off_1 <= 1'b1; end else begin counter_at_tdd_tx_dp_off_1 <= 1'b0; end end always @(posedge clk) begin if(rst == 1'b1) begin counter_at_tdd_tx_dp_off_2 <= 1'b0; end else if((tdd_secondary == 1'b1) && (tdd_counter == tdd_tx_dp_off_2_s)) begin counter_at_tdd_tx_dp_off_2 <= 1'b1; end else begin counter_at_tdd_tx_dp_off_2 <= 1'b0; end end // control-path delay compensation ad_addsub #( .A_DATA_WIDTH(24), .B_DATA_VALUE(CONTROL_PATH_DELAY), .ADD_OR_SUB_N(0) ) i_vco_rx_on_1_comp ( .clk(clk), .A(tdd_vco_rx_on_1), .Amax(tdd_frame_length), .out(tdd_vco_rx_on_1_s), .CE(1'b1) ); ad_addsub #( .A_DATA_WIDTH(24), .B_DATA_VALUE(CONTROL_PATH_DELAY), .ADD_OR_SUB_N(0) ) i_vco_rx_off_1_comp ( .clk(clk), .A(tdd_vco_rx_off_1), .Amax(tdd_frame_length), .out(tdd_vco_rx_off_1_s), .CE(1'b1) ); ad_addsub #( .A_DATA_WIDTH(24), .B_DATA_VALUE(CONTROL_PATH_DELAY), .ADD_OR_SUB_N(0) ) i_vco_tx_on_1_comp ( .clk(clk), .A(tdd_vco_tx_on_1), .Amax(tdd_frame_length), .out(tdd_vco_tx_on_1_s), .CE(1'b1) ); ad_addsub #( .A_DATA_WIDTH(24), .B_DATA_VALUE(CONTROL_PATH_DELAY), .ADD_OR_SUB_N(0) ) i_vco_tx_off_1_comp ( .clk(clk), .A(tdd_vco_tx_off_1), .Amax(tdd_frame_length), .out(tdd_vco_tx_off_1_s), .CE(1'b1) ); ad_addsub #( .A_DATA_WIDTH(24), .B_DATA_VALUE(CONTROL_PATH_DELAY), .ADD_OR_SUB_N(0) ) i_rx_on_1_comp ( .clk(clk), .A(tdd_rx_on_1), .Amax(tdd_frame_length), .out(tdd_rx_on_1_s), .CE(1'b1) ); ad_addsub #( .A_DATA_WIDTH(24), .B_DATA_VALUE(CONTROL_PATH_DELAY), .ADD_OR_SUB_N(0) ) i_rx_off_1_comp ( .clk(clk), .A(tdd_rx_off_1), .Amax(tdd_frame_length), .out(tdd_rx_off_1_s), .CE(1'b1) ); ad_addsub #( .A_DATA_WIDTH(24), .B_DATA_VALUE(CONTROL_PATH_DELAY), .ADD_OR_SUB_N(0) ) i_tx_on_1_comp ( .clk(clk), .A(tdd_tx_on_1), .Amax(tdd_frame_length), .out(tdd_tx_on_1_s), .CE(1'b1) ); ad_addsub #( .A_DATA_WIDTH(24), .B_DATA_VALUE(CONTROL_PATH_DELAY), .ADD_OR_SUB_N(0) ) i_tx_off_1_comp ( .clk(clk), .A(tdd_tx_off_1), .Amax(tdd_frame_length), .out(tdd_tx_off_1_s), .CE(1'b1) ); ad_addsub #( .A_DATA_WIDTH(24), .B_DATA_VALUE(CONTROL_PATH_DELAY), .ADD_OR_SUB_N(0) ) i_vco_rx_on_2_comp ( .clk(clk), .A(tdd_vco_rx_on_2), .Amax(tdd_frame_length), .out(tdd_vco_rx_on_2_s), .CE(1'b1) ); ad_addsub #( .A_DATA_WIDTH(24), .B_DATA_VALUE(CONTROL_PATH_DELAY), .ADD_OR_SUB_N(0) ) i_vco_rx_off_2_comp ( .clk(clk), .A(tdd_vco_rx_off_2), .Amax(tdd_frame_length), .out(tdd_vco_rx_off_2_s), .CE(1'b1) ); ad_addsub #( .A_DATA_WIDTH(24), .B_DATA_VALUE(CONTROL_PATH_DELAY), .ADD_OR_SUB_N(0) ) i_vco_tx_on_2_comp ( .clk(clk), .A(tdd_vco_tx_on_2), .Amax(tdd_frame_length), .out(tdd_vco_tx_on_2_s), .CE(1'b1) ); ad_addsub #( .A_DATA_WIDTH(24), .B_DATA_VALUE(CONTROL_PATH_DELAY), .ADD_OR_SUB_N(0) ) i_vco_tx_off_2_comp ( .clk(clk), .A(tdd_vco_tx_off_2), .Amax(tdd_frame_length), .out(tdd_vco_tx_off_2_s), .CE(1'b1) ); ad_addsub #( .A_DATA_WIDTH(24), .B_DATA_VALUE(CONTROL_PATH_DELAY), .ADD_OR_SUB_N(0) ) i_rx_on_2_comp ( .clk(clk), .A(tdd_rx_on_2), .Amax(tdd_frame_length), .out(tdd_rx_on_2_s), .CE(1'b1) ); ad_addsub #( .A_DATA_WIDTH(24), .B_DATA_VALUE(CONTROL_PATH_DELAY), .ADD_OR_SUB_N(0) ) i_rx_off_2_comp ( .clk(clk), .A(tdd_rx_off_2), .Amax(tdd_frame_length), .out(tdd_rx_off_2_s), .CE(1'b1) ); ad_addsub #( .A_DATA_WIDTH(24), .B_DATA_VALUE(CONTROL_PATH_DELAY), .ADD_OR_SUB_N(0) ) i_tx_on_2_comp ( .clk(clk), .A(tdd_tx_on_2), .Amax(tdd_frame_length), .out(tdd_tx_on_2_s), .CE(1'b1) ); ad_addsub #( .A_DATA_WIDTH(24), .B_DATA_VALUE(CONTROL_PATH_DELAY), .ADD_OR_SUB_N(0) ) i_tx_off_2_comp ( .clk(clk), .A(tdd_tx_off_2), .Amax(tdd_frame_length), .out(tdd_tx_off_2_s), .CE(1'b1) ); // internal data-path delay compensation ad_addsub #( .A_DATA_WIDTH(24), .B_DATA_VALUE(TX_DATA_PATH_DELAY), .ADD_OR_SUB_N(0) ) i_tx_dp_on_1_comp ( .clk(clk), .A(tdd_tx_dp_on_1), .Amax(tdd_frame_length), .out(tdd_tx_dp_on_1_s), .CE(1'b1) ); ad_addsub #( .A_DATA_WIDTH(24), .B_DATA_VALUE(TX_DATA_PATH_DELAY), .ADD_OR_SUB_N(0) ) i_tx_dp_on_2_comp ( .clk(clk), .A(tdd_tx_dp_on_2), .Amax(tdd_frame_length), .out(tdd_tx_dp_on_2_s), .CE(1'b1) ); ad_addsub #( .A_DATA_WIDTH(24), .B_DATA_VALUE(TX_DATA_PATH_DELAY), .ADD_OR_SUB_N(0) ) i_tx_dp_off_1_comp ( .clk(clk), .A(tdd_tx_dp_off_1), .Amax(tdd_frame_length), .out(tdd_tx_dp_off_1_s), .CE(1'b1) ); ad_addsub #( .A_DATA_WIDTH(24), .B_DATA_VALUE(TX_DATA_PATH_DELAY), .ADD_OR_SUB_N(0) ) i_tx_dp_off_2_comp ( .clk(clk), .A(tdd_tx_dp_off_2), .Amax(tdd_frame_length), .out(tdd_tx_dp_off_2_s), .CE(1'b1) ); // output logic assign tdd_txrx_only_en_s = tdd_tx_only ^ tdd_rx_only; always @(posedge clk) begin if(rst == 1'b1) begin tdd_rx_vco_en <= 1'b0; end else if((tdd_cstate == OFF) || (counter_at_tdd_vco_rx_off_1 == 1'b1) || (counter_at_tdd_vco_rx_off_2 == 1'b1)) begin tdd_rx_vco_en <= 1'b0; end else if((tdd_cstate == ON) && ((counter_at_tdd_vco_rx_on_1 == 1'b1) || (counter_at_tdd_vco_rx_on_2 == 1'b1))) begin tdd_rx_vco_en <= 1'b1; end else if((tdd_cstate == ON) && (tdd_txrx_only_en_s == 1'b1)) begin tdd_rx_vco_en <= tdd_rx_only; end else begin tdd_rx_vco_en <= tdd_rx_vco_en; end end always @(posedge clk) begin if(rst == 1'b1) begin tdd_tx_vco_en <= 1'b0; end else if((tdd_cstate == OFF) || (counter_at_tdd_vco_tx_off_1 == 1'b1) || (counter_at_tdd_vco_tx_off_2 == 1'b1)) begin tdd_tx_vco_en <= 1'b0; end else if((tdd_cstate == ON) && ((counter_at_tdd_vco_tx_on_1 == 1'b1) || (counter_at_tdd_vco_tx_on_2 == 1'b1))) begin tdd_tx_vco_en <= 1'b1; end else if((tdd_cstate == ON) && (tdd_txrx_only_en_s == 1'b1)) begin tdd_tx_vco_en <= tdd_tx_only; end else begin tdd_tx_vco_en <= tdd_tx_vco_en; end end always @(posedge clk) begin if(rst == 1'b1) begin tdd_rx_rf_en <= 1'b0; end else if((tdd_cstate == OFF) || (counter_at_tdd_rx_off_1 == 1'b1) || (counter_at_tdd_rx_off_2 == 1'b1)) begin tdd_rx_rf_en <= 1'b0; end else if((tdd_cstate == ON) && ((counter_at_tdd_rx_on_1 == 1'b1) || (counter_at_tdd_rx_on_2 == 1'b1))) begin tdd_rx_rf_en <= 1'b1; end else if((tdd_cstate == ON) && (tdd_txrx_only_en_s == 1'b1)) begin tdd_rx_rf_en <= tdd_rx_only; end else begin tdd_rx_rf_en <= tdd_rx_rf_en; end end always @(posedge clk) begin if(rst == 1'b1) begin tdd_tx_rf_en <= 1'b0; end else if((tdd_cstate == OFF) || (counter_at_tdd_tx_off_1 == 1'b1) || (counter_at_tdd_tx_off_2 == 1'b1)) begin tdd_tx_rf_en <= 1'b0; end else if((tdd_cstate == ON) && ((counter_at_tdd_tx_on_1 == 1'b1) || (counter_at_tdd_tx_on_2 == 1'b1))) begin tdd_tx_rf_en <= 1'b1; end else if((tdd_cstate == ON) && (tdd_txrx_only_en_s == 1'b1)) begin tdd_tx_rf_en <= tdd_tx_only; end else begin tdd_tx_rf_en <= tdd_tx_rf_en; end end always @(posedge clk) begin if(rst == 1'b1) begin tdd_tx_dp_en <= 1'b0; end else if((tdd_cstate == OFF) || (counter_at_tdd_tx_dp_off_1 == 1'b1) || (counter_at_tdd_tx_dp_off_2 == 1'b1)) begin tdd_tx_dp_en <= 1'b0; end else if((tdd_cstate == ON) && ((counter_at_tdd_tx_dp_on_1 == 1'b1) || (counter_at_tdd_tx_dp_on_2 == 1'b1))) begin tdd_tx_dp_en <= 1'b1; end else if((tdd_cstate == ON) && (tdd_txrx_only_en_s == 1'b1)) begin tdd_tx_dp_en <= tdd_tx_only; end else begin tdd_tx_dp_en <= tdd_tx_dp_en; end end endmodule bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/ad_tdd_sync.v000066400000000000000000000076531457144405000267430ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2015(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** `timescale 1ns/1ps module ad_tdd_sync ( clk, // system clock (100 Mhz) rstn, sync // re-synchronization signal ); localparam PULSE_CNTR_WIDTH = 7; parameter TDD_SYNC_PERIOD = 100000000; // t_period * clk_freq - 1 input clk; input rstn; output sync; // internal registers reg [(PULSE_CNTR_WIDTH-1):0] pulse_counter = {PULSE_CNTR_WIDTH{1'b1}}; reg [31:0] sync_counter = 32'h0; reg sync_pulse = 1'b0; reg sync_period_eof = 1'b0; assign sync = sync_pulse; // a free running sync pulse generator always @(posedge clk) begin if (rstn == 1'b0) begin sync_counter <= 32'h0; sync_period_eof <= 1'b0; end else begin sync_counter <= (sync_counter < TDD_SYNC_PERIOD) ? (sync_counter + 1) : 32'b0; sync_period_eof <= (sync_counter == (TDD_SYNC_PERIOD - 1)) ? 1'b1 : 1'b0; end end // generate pulse with a specified width always @(posedge clk) begin if (rstn == 1'b0) begin pulse_counter <= 0; sync_pulse <= 0; end else begin pulse_counter <= (sync_pulse == 1'b1) ? pulse_counter + 1 : {PULSE_CNTR_WIDTH{1'h0}}; if(sync_period_eof == 1'b1) begin sync_pulse <= 1'b1; end else if(pulse_counter == {PULSE_CNTR_WIDTH{1'b1}}) begin sync_pulse <= 1'b0; end end end endmodule bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/altera/000077500000000000000000000000001457144405000255365ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/altera/DSP48E1.v000066400000000000000000000126251457144405000267230ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** // dc filter- y(n) = c*x(n) + (1-c)*y(n-1) `timescale 1ps/1ps module DSP48E1 ( ACOUT, BCOUT, CARRYCASCOUT, CARRYOUT, MULTSIGNOUT, OVERFLOW, P, PATTERNBDETECT, PATTERNDETECT, PCOUT, UNDERFLOW, A, ACIN, ALUMODE, B, BCIN, C, CARRYCASCIN, CARRYIN, CARRYINSEL, CEA1, CEA2, CEAD, CEALUMODE, CEB1, CEB2, CEC, CECARRYIN, CECTRL, CED, CEINMODE, CEM, CEP, CLK, D, INMODE, MULTSIGNIN, OPMODE, PCIN, RSTA, RSTALLCARRYIN, RSTALUMODE, RSTB, RSTC, RSTCTRL, RSTD, RSTINMODE, RSTM, RSTP); parameter ACASCREG = 1; parameter ADREG = 1; parameter ALUMODEREG = 1; parameter AREG = 1; parameter AUTORESET_PATDET = "NO_RESET"; parameter A_INPUT = "DIRECT"; parameter BCASCREG = 1; parameter BREG = 1; parameter B_INPUT = "DIRECT"; parameter CARRYINREG = 1; parameter CARRYINSELREG = 1; parameter CREG = 1; parameter DREG = 1; parameter INMODEREG = 1; parameter MASK = 'hffffffff; parameter MREG = 1; parameter OPMODEREG = 1; parameter PATTERN = 0; parameter PREG = 1; parameter SEL_MASK = "MASK"; parameter SEL_PATTERN = "PATTERN"; parameter USE_DPORT = 0; parameter USE_MULT = "MULTIPLY"; parameter USE_PATTERN_DETECT = "NO_PATDET"; parameter USE_SIMD = "ONE48"; output [29:0] ACOUT; output [17:0] BCOUT; output CARRYCASCOUT; output [ 3:0] CARRYOUT; output MULTSIGNOUT; output OVERFLOW; output [47:0] P; output PATTERNBDETECT; output PATTERNDETECT; output [47:0] PCOUT; output UNDERFLOW; input [29:0] A; input [29:0] ACIN; input [ 3:0] ALUMODE; input [17:0] B; input [17:0] BCIN; input [47:0] C; input CARRYCASCIN; input CARRYIN; input [ 2:0] CARRYINSEL; input CEA1; input CEA2; input CEAD; input CEALUMODE; input CEB1; input CEB2; input CEC; input CECARRYIN; input CECTRL; input CED; input CEINMODE; input CEM; input CEP; input CLK; input [24:0] D; input [ 4:0] INMODE; input MULTSIGNIN; input [ 6:0] OPMODE; input [47:0] PCIN; input RSTA; input RSTALLCARRYIN; input RSTALUMODE; input RSTB; input RSTC; input RSTCTRL; input RSTD; input RSTINMODE; input RSTM; input RSTP; assign ACOUT = 30'd0; assign BCOUT = 18'd0; assign CARRYCASCOUT = 1'd0; assign CARRYOUT = 4'd0; assign MULTSIGNOUT = 1'd0; assign OVERFLOW = 1'd0; assign P = 48'd0; assign PATTERNBDETECT = 1'd0; assign PATTERNDETECT = 1'd0; assign PCOUT = 48'd0; assign UNDERFLOW = 1'd0; endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/altera/MULT_MACRO.v000066400000000000000000000062441457144405000274350ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2014(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // replacing Xilinx's macro with Altera's LPM `timescale 1ps/1ps module MULT_MACRO ( CE, RST, CLK, A, B, P); parameter LATENCY = 3; parameter WIDTH_A = 16; parameter WIDTH_B = 16; localparam WIDTH_P = WIDTH_A + WIDTH_B; input CE; input RST; input CLK; input [WIDTH_A-1:0] A; input [WIDTH_B-1:0] B; output [WIDTH_P-1:0] P; lpm_mult #( .lpm_type ("lpm_mult"), .lpm_widtha (WIDTH_A), .lpm_widthb (WIDTH_B), .lpm_widthp (WIDTH_P), .lpm_representation ("SIGNED"), .lpm_pipeline (3)) i_lpm_mult ( .clken (CE), .aclr (RST), .sum (1'b0), .clock (CLK), .dataa (A), .datab (B), .result (P)); endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/altera/ad_dcfilter_alt.v000066400000000000000000000073751457144405000310410ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2014(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** // dc filter- y(n) = c*x(n) + (1-c)*y(n-1) `timescale 1ps/1ps module ad_dcfilter ( // data interface clk, valid, data, valid_out, data_out, // control interface dcfilt_enb, dcfilt_coeff, dcfilt_offset); // data interface input clk; input valid; input [15:0] data; output valid_out; output [15:0] data_out; // control interface input dcfilt_enb; input [15:0] dcfilt_coeff; input [15:0] dcfilt_offset; // internal registers reg valid_d = 'd0; reg [15:0] data_d = 'd0; reg valid_2d = 'd0; reg [15:0] data_2d = 'd0; reg valid_out = 'd0; reg [15:0] data_out = 'd0; // cancelling the dc offset always @(posedge clk) begin dc_offset <= 16'h0; valid_d <= valid; if (valid == 1'b1) begin data_d <= data + dcfilt_offset; end valid_2d <= valid_d; data_2d <= data_d - dc_offset; if (dcfilt_enb == 1'b1) begin valid_out <= valid_2d; data_out <= data_d; // DC filter not implemented in this version end else begin valid_out <= valid_d; data_out <= data_d; end end endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/altera/ad_lvds_clk.v000066400000000000000000000055431457144405000302010ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2014(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module ad_lvds_clk ( clk_in_p, clk_in_n, clk); parameter DEVICE_TYPE = 0; localparam SERIES7 = 0; localparam VIRTEX6 = 1; input clk_in_p; input clk_in_n; output clk; assign clk = clk_in_p; endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/altera/ad_lvds_in.v000066400000000000000000000075611457144405000300400ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2014(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module ad_lvds_in ( // data interface rx_clk, rx_data_in_p, rx_data_in_n, rx_data_p, rx_data_n, // delay interface delay_clk, delay_rst, delay_ld, delay_wdata, delay_rdata, delay_locked); // parameters parameter DEVICE_TYPE = 0; parameter IODELAY_CTRL = 0; parameter IODELAY_GROUP = "dev_if_delay_group"; localparam SERIES7 = 0; localparam VIRTEX6 = 1; // data interface input rx_clk; input rx_data_in_p; input rx_data_in_n; output rx_data_p; output rx_data_n; // delay interface input delay_clk; input delay_rst; input delay_ld; input [ 4:0] delay_wdata; output [ 4:0] delay_rdata; output delay_locked; // defaults assign delay_rdata = 5'd0; assign delay_locked = 1'b1; // instantiations altddio_in #( .invert_input_clocks("OFF"), .lpm_hint("UNUSED"), .lpm_type("altddio_in"), .power_up_high("OFF"), .width(1)) i_rx_data_iddr ( .aclr (1'b0), .aset (1'b0), .sclr (1'b0), .sset (1'b0), .inclocken (1'b1), .inclock (rx_clk), .datain (rx_data_in_p), .dataout_h (rx_data_p), .dataout_l (rx_data_n)); endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/altera/ad_lvds_out.v000066400000000000000000000070741457144405000302400ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2014(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module ad_lvds_out ( // data interface tx_clk, tx_data_p, tx_data_n, tx_data_out_p, tx_data_out_n); // parameters parameter DEVICE_TYPE = 0; localparam SERIES7 = 0; localparam VIRTEX6 = 1; // data interface input tx_clk; input tx_data_p; input tx_data_n; output tx_data_out_p; output tx_data_out_n; // defaults assign tx_data_out_n = 1'd0; // instantiations altddio_out #( .extend_oe_disable("OFF"), .intended_device_family("Cyclone V"), .invert_output("OFF"), .lpm_hint("UNUSED"), .lpm_type("altddio_out"), .oe_reg("UNREGISTERED"), .power_up_high("OFF"), .width(1)) i_tx_data_oddr ( .aclr (1'b0), .aset (1'b0), .sclr (1'b0), .sset (1'b0), .oe (1'b1), .oe_out (), .outclocken (1'b1), .outclock (tx_clk), .datain_h (tx_data_p), .datain_l (tx_data_n), .dataout (tx_data_out_p)); endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/altera/ad_mul_u16_alt.v000066400000000000000000000077131457144405000305310ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2014(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** // both inputs are considered unsigned 16 bits- // ddata is delay matched generic data `timescale 1ps/1ps module ad_mul_u16 ( // data_p = data_a * data_b; clk, data_a, data_b, data_p, // delay interface ddata_in, ddata_out); // delayed data bus width parameter DELAY_DATA_WIDTH = 16; localparam DW = DELAY_DATA_WIDTH - 1; // data_p = data_a * data_b; input clk; input [15:0] data_a; input [15:0] data_b; output [31:0] data_p; // delay interface input [DW:0] ddata_in; output [DW:0] ddata_out; // internal registers reg [DW:0] p1_ddata = 'd0; reg [DW:0] p2_ddata = 'd0; reg [DW:0] ddata_out = 'd0; // internal signals // a/b reg, m-reg, p-reg delay match always @(posedge clk) begin p1_ddata <= ddata_in; p2_ddata <= p1_ddata; ddata_out <= p2_ddata; end lpm_mult i_mult_macro ( .clock (clk), .dataa (data_a), .datab (data_b), .result (data_p), .aclr (1'b0), .clken (1'b1), .sum (1'b0)); defparam lpm_mult_component.lpm_hint = "MAXIMIZE_SPEED=5", lpm_mult_component.lpm_pipeline = 3, lpm_mult_component.lpm_representation = "UNSIGNED", lpm_mult_component.lpm_type = "LPM_MULT", lpm_mult_component.lpm_widtha = 16, lpm_mult_component.lpm_widthb = 16, lpm_mult_component.lpm_widthp = 32; endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/axi_ctrlif.vhd000066400000000000000000000127551457144405000271270ustar00rootroot00000000000000-- *************************************************************************** -- *************************************************************************** -- Copyright 2013(c) Analog Devices, Inc. -- Author: Lars-Peter Clausen -- -- All rights reserved. -- -- Redistribution and use in source and binary forms, with or without modification, -- are permitted provided that the following conditions are met: -- - Redistributions of source code must retain the above copyright -- notice, this list of conditions and the following disclaimer. -- - Redistributions in binary form must reproduce the above copyright -- notice, this list of conditions and the following disclaimer in -- the documentation and/or other materials provided with the -- distribution. -- - Neither the name of Analog Devices, Inc. nor the names of its -- contributors may be used to endorse or promote products derived -- from this software without specific prior written permission. -- - The use of this software may or may not infringe the patent rights -- of one or more patent holders. This license does not release you -- from the requirement that you obtain separate licenses from these -- patent holders to use this software. -- - Use of the software either in source or binary form, must be run -- on or directly connected to an Analog Devices Inc. component. -- -- THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, -- INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A -- PARTICULAR PURPOSE ARE DISCLAIMED. -- -- IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY -- RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF -- THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- *************************************************************************** -- *************************************************************************** library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity axi_ctrlif is generic ( C_NUM_REG : integer := 32; C_S_AXI_DATA_WIDTH : integer := 32; C_S_AXI_ADDR_WIDTH : integer := 32; C_FAMILY : string := "virtex6" ); port ( -- AXI bus interface S_AXI_ACLK : in std_logic; S_AXI_ARESETN : in std_logic; S_AXI_AWADDR : in std_logic_vector(C_S_AXI_ADDR_WIDTH-1 downto 0); S_AXI_AWVALID : in std_logic; S_AXI_WDATA : in std_logic_vector(C_S_AXI_DATA_WIDTH-1 downto 0); S_AXI_WSTRB : in std_logic_vector((C_S_AXI_DATA_WIDTH/8)-1 downto 0); S_AXI_WVALID : in std_logic; S_AXI_BREADY : in std_logic; S_AXI_ARADDR : in std_logic_vector(C_S_AXI_ADDR_WIDTH-1 downto 0); S_AXI_ARVALID : in std_logic; S_AXI_RREADY : in std_logic; S_AXI_ARREADY : out std_logic; S_AXI_RDATA : out std_logic_vector(C_S_AXI_DATA_WIDTH-1 downto 0); S_AXI_RRESP : out std_logic_vector(1 downto 0); S_AXI_RVALID : out std_logic; S_AXI_WREADY : out std_logic; S_AXI_BRESP : out std_logic_vector(1 downto 0); S_AXI_BVALID : out std_logic; S_AXI_AWREADY : out std_logic; rd_addr : out integer range 0 to C_NUM_REG - 1; rd_data : in std_logic_vector(C_S_AXI_DATA_WIDTH-1 downto 0); rd_ack : out std_logic; rd_stb : in std_logic; wr_addr : out integer range 0 to C_NUM_REG - 1; wr_data : out std_logic_vector(C_S_AXI_DATA_WIDTH-1 downto 0); wr_ack : in std_logic; wr_stb : out std_logic ); end entity axi_ctrlif; architecture Behavioral of axi_ctrlif is type state_type is (IDLE, RESP, ACK); signal rd_state : state_type; signal wr_state : state_type; begin process (S_AXI_ACLK) begin if rising_edge(S_AXI_ACLK) then if S_AXI_ARESETN = '0' then rd_state <= IDLE; else case rd_state is when IDLE => if S_AXI_ARVALID = '1' then rd_state <= RESP; rd_addr <= to_integer(unsigned(S_AXI_ARADDR((C_S_AXI_ADDR_WIDTH-1) downto 2))); end if; when RESP => if rd_stb = '1' and S_AXI_RREADY = '1' then rd_state <= IDLE; end if; when others => null; end case; end if; end if; end process; S_AXI_ARREADY <= '1' when rd_state = IDLE else '0'; S_AXI_RVALID <= '1' when rd_state = RESP and rd_stb = '1' else '0'; S_AXI_RRESP <= "00"; rd_ack <= '1' when rd_state = RESP and S_AXI_RREADY = '1' else '0'; S_AXI_RDATA <= rd_data; process (S_AXI_ACLK) begin if rising_edge(S_AXI_ACLK) then if S_AXI_ARESETN = '0' then wr_state <= IDLE; else case wr_state is when IDLE => if S_AXI_AWVALID = '1' and S_AXI_WVALID = '1' and wr_ack = '1' then wr_state <= ACK; end if; when ACK => wr_state <= RESP; when RESP => if S_AXI_BREADY = '1' then wr_state <= IDLE; end if; end case; end if; end if; end process; wr_stb <= '1' when S_AXI_AWVALID = '1' and S_AXI_WVALID = '1' and wr_state = IDLE else '0'; wr_data <= S_AXI_WDATA; wr_addr <= to_integer(unsigned(S_AXI_AWADDR((C_S_AXI_ADDR_WIDTH-1) downto 2))); S_AXI_AWREADY <= '1' when wr_state = ACK else '0'; S_AXI_WREADY <= '1' when wr_state = ACK else '0'; S_AXI_BRESP <= "00"; S_AXI_BVALID <= '1' when wr_state = RESP else '0'; end; bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/axi_streaming_dma_rx_fifo.vhd000066400000000000000000000032431457144405000321620ustar00rootroot00000000000000library ieee; use ieee.std_logic_1164.all; library work; use work.dma_fifo; entity axi_streaming_dma_rx_fifo is generic ( RAM_ADDR_WIDTH : integer := 3; FIFO_DWIDTH : integer := 32 ); port ( clk : in std_logic; resetn : in std_logic; fifo_reset : in std_logic; -- Enable DMA interface enable : in Boolean; period_len : in integer range 0 to 65535; -- Read port M_AXIS_ACLK : in std_logic; M_AXIS_TREADY : in std_logic; M_AXIS_TDATA : out std_logic_vector(FIFO_DWIDTH-1 downto 0); M_AXIS_TLAST : out std_logic; M_AXIS_TVALID : out std_logic; M_AXIS_TKEEP : out std_logic_vector(3 downto 0); -- Write port in_stb : in std_logic; in_ack : out std_logic; in_data : in std_logic_vector(FIFO_DWIDTH-1 downto 0) ); end; architecture imp of axi_streaming_dma_rx_fifo is signal out_stb : std_logic; signal period_count : integer range 0 to 65535; signal last : std_logic; begin M_AXIS_TVALID <= out_stb; fifo: entity dma_fifo generic map ( RAM_ADDR_WIDTH => RAM_ADDR_WIDTH, FIFO_DWIDTH => FIFO_DWIDTH ) port map ( clk => clk, resetn => resetn, fifo_reset => fifo_reset, in_stb => in_stb, in_ack => in_ack, in_data => in_data, out_stb => out_stb, out_ack => M_AXIS_TREADY, out_data => M_AXIS_TDATA ); M_AXIS_TKEEP <= "1111"; M_AXIS_TLAST <= '1' when period_count = 0 else '0'; period_counter: process(M_AXIS_ACLK) is begin if resetn = '0' then period_count <= period_len; else if out_stb = '1' and M_AXIS_TREADY = '1' then if period_count = 0 then period_count <= period_len; else period_count <= period_count - 1; end if; end if; end if; end process; end; bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/axi_streaming_dma_tx_fifo.vhd000066400000000000000000000030271457144405000321640ustar00rootroot00000000000000library ieee; use ieee.std_logic_1164.all; library work; use work.dma_fifo; entity axi_streaming_dma_tx_fifo is generic ( RAM_ADDR_WIDTH : integer := 3; FIFO_DWIDTH : integer := 32 ); port ( clk : in std_logic; resetn : in std_logic; fifo_reset : in std_logic; -- Enable DMA interface enable : in Boolean; -- Write port S_AXIS_ACLK : in std_logic; S_AXIS_TREADY : out std_logic; S_AXIS_TDATA : in std_logic_vector(FIFO_DWIDTH-1 downto 0); S_AXIS_TLAST : in std_logic; S_AXIS_TVALID : in std_logic; -- Read port out_stb : out std_logic; out_ack : in std_logic; out_data : out std_logic_vector(FIFO_DWIDTH-1 downto 0) ); end; architecture imp of axi_streaming_dma_tx_fifo is signal in_ack : std_logic; signal drain_dma : Boolean; begin fifo: entity dma_fifo generic map ( RAM_ADDR_WIDTH => RAM_ADDR_WIDTH, FIFO_DWIDTH => FIFO_DWIDTH ) port map ( clk => clk, resetn => resetn, fifo_reset => fifo_reset, in_stb => S_AXIS_TVALID, in_ack => in_ack, in_data => S_AXIS_TDATA, out_stb => out_stb, out_ack => out_ack, out_data => out_data ); drain_process: process (S_AXIS_ACLK) is variable enable_d1 : Boolean; begin if rising_edge(S_AXIS_ACLK) then if resetn = '0' then drain_dma <= False; else if S_AXIS_TLAST = '1' then drain_dma <= False; elsif enable_d1 and enable then drain_dma <= True; end if; enable_d1 := enable; end if; end if; end process; S_AXIS_TREADY <= '1' when in_ack = '1' or drain_dma else '0'; end; bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/dma_fifo.vhd000066400000000000000000000034241457144405000265400ustar00rootroot00000000000000library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity dma_fifo is generic ( RAM_ADDR_WIDTH : integer := 3; FIFO_DWIDTH : integer := 32 ); port ( clk : in std_logic; resetn : in std_logic; fifo_reset : in std_logic; -- Write port in_stb : in std_logic; in_ack : out std_logic; in_data : in std_logic_vector(FIFO_DWIDTH-1 downto 0); -- Read port out_stb : out std_logic; out_ack : in std_logic; out_data : out std_logic_vector(FIFO_DWIDTH-1 downto 0) ); end; architecture imp of dma_fifo is constant FIFO_MAX : natural := 2**RAM_ADDR_WIDTH -1; type MEM is array (0 to FIFO_MAX) of std_logic_vector(FIFO_DWIDTH - 1 downto 0); signal data_fifo : MEM; signal wr_addr : natural range 0 to FIFO_MAX; signal rd_addr : natural range 0 to FIFO_MAX; signal not_full, not_empty : Boolean; begin in_ack <= '1' when not_full else '0'; out_stb <= '1' when not_empty else '0'; out_data <= data_fifo(rd_addr); fifo_data: process (clk) is begin if rising_edge(clk) then if not_full then data_fifo(wr_addr) <= in_data; end if; end if; end process; fifo_ctrl: process (clk) is variable free_cnt : integer range 0 to FIFO_MAX + 1; begin if rising_edge(clk) then if (resetn = '0') or (fifo_reset = '1') then wr_addr <= 0; rd_addr <= 0; free_cnt := FIFO_MAX + 1; not_empty <= False; not_full <= True; else if in_stb = '1' and not_full then wr_addr <= (wr_addr + 1) mod (FIFO_MAX + 1); free_cnt := free_cnt - 1; end if; if out_ack = '1' and not_empty then rd_addr <= (rd_addr + 1) mod (FIFO_MAX + 1); free_cnt := free_cnt + 1; end if; not_full <= not (free_cnt = 0); not_empty <= not (free_cnt = FIFO_MAX + 1); end if; end if; end process; end; bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/pl330_dma_fifo.vhd000066400000000000000000000064671457144405000274730ustar00rootroot00000000000000library ieee; use ieee.std_logic_1164.all; library work; use work.dma_fifo; entity pl330_dma_fifo is generic ( RAM_ADDR_WIDTH : integer := 3; FIFO_DWIDTH : integer := 32; FIFO_DIRECTION : integer := 0 -- 0 = write FIFO, 1 = read FIFO ); port ( clk : in std_logic; resetn : in std_logic; fifo_reset : in std_logic; -- Enable DMA interface enable : in Boolean; -- Write port in_stb : in std_logic; in_ack : out std_logic; in_data : in std_logic_vector(FIFO_DWIDTH-1 downto 0); -- Read port out_stb : out std_logic; out_ack : in std_logic; out_data : out std_logic_vector(FIFO_DWIDTH-1 downto 0); -- PL330 DMA interface dclk : in std_logic; dresetn : in std_logic; davalid : in std_logic; daready : out std_logic; datype : in std_logic_vector(1 downto 0); drvalid : out std_logic; drready : in std_logic; drtype : out std_logic_vector(1 downto 0); drlast : out std_logic; DBG : out std_logic_vector(7 downto 0) ); end; architecture imp of pl330_dma_fifo is signal request_data : Boolean; type state_type is (IDLE, REQUEST, WAITING, FLUSH); signal state : state_type; signal i_in_ack : std_logic; signal i_out_stb : std_logic; begin in_ack <= i_in_ack; out_stb <= i_out_stb; fifo: entity dma_fifo generic map ( RAM_ADDR_WIDTH => RAM_ADDR_WIDTH, FIFO_DWIDTH => FIFO_DWIDTH ) port map ( clk => clk, resetn => resetn, fifo_reset => fifo_reset, in_stb => in_stb, in_ack => i_in_ack, in_data => in_data, out_stb => i_out_stb, out_ack => out_ack, out_data => out_data ); request_data <= i_in_ack = '1' when FIFO_DIRECTION = 0 else i_out_stb = '1'; drlast <= '0'; daready <= '1'; drvalid <= '1' when (state = REQUEST) or (state = FLUSH) else '0'; drtype <= "00" when state = REQUEST else "10"; DBG(0) <= davalid; DBG(2 downto 1) <= datype; DBG(3) <= '1' when request_data else '0'; process (state) begin case state is when IDLE => DBG(5 downto 4) <= "00"; when REQUEST => DBG(5 downto 4) <= "01"; when WAITING => DBG(5 downto 4) <= "10"; when FLUSH => DBG(5 downto 4) <= "11"; end case; end process; pl330_req_fsm: process (dclk) is begin if rising_edge(dclk) then if dresetn = '0' then state <= IDLE; else -- The controller may send a FLUSH request at any time and it won't -- respond to any of our requests until we've ack the FLUSH request. -- The FLUSH request is also supposed to reset our state machine, so -- go back to idle after having acked the FLUSH. if davalid = '1' and datype = "10" then state <= FLUSH; else case state is -- Nothing to do, wait for the fifo to run empty when IDLE => if request_data and enable then state <= REQUEST; end if; -- Send out a request to the PL330 when REQUEST => if drready = '1' then state <= WAITING; end if; -- Wait for a ACK from the PL330 that it did transfer the data when WAITING => if fifo_reset = '1' then state <= IDLE; elsif davalid = '1' then if datype = "00" then state <= IDLE; end if; end if; -- Send out an ACK for the flush when FLUSH => if drready = '1' then state <= IDLE; end if; end case; end if; end if; end if; end process; end; bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/sync_bits.v000066400000000000000000000065221457144405000264570ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2013(c) Analog Devices, Inc. // Author: Lars-Peter Clausen // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** /* * Helper module for synchronizing bit signals from one clock domain to another. * It uses the standard approach of 2 FF in series. * Note, that while the module allows to synchronize multiple bits at once it is * only able to synchronize multi-bit signals where at max one bit changes per * clock cycle (e.g. a gray counter). */ module sync_bits ( input [NUM_OF_BITS-1:0] in, input out_resetn, input out_clk, output [NUM_OF_BITS-1:0] out ); // Number of bits to synchronize parameter NUM_OF_BITS = 1; // Whether input and output clocks are asynchronous, if 0 the synchronizer will // be bypassed and the output signal equals the input signal. parameter ASYNC_CLK = 1; reg [NUM_OF_BITS-1:0] cdc_sync_stage1 = 'h0; reg [NUM_OF_BITS-1:0] cdc_sync_stage2 = 'h0; always @(posedge out_clk) begin if (out_resetn == 1'b0) begin cdc_sync_stage1 <= 'b0; cdc_sync_stage2 <= 'b0; end else begin cdc_sync_stage1 <= in; cdc_sync_stage2 <= cdc_sync_stage1; end end assign out = ASYNC_CLK ? cdc_sync_stage2 : in; endmodule bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/sync_gray.v000066400000000000000000000101241457144405000264510ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2013(c) Analog Devices, Inc. // Author: Lars-Peter Clausen // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** /* * Helper module for synchronizing a counter from one clock domain to another * using gray code. To work correctly the counter must not change its value by * more than one in one clock cycle in the source domain. I.e. the value may * change by either -1, 0 or +1. */ module sync_gray ( input in_clk, input in_resetn, input [DATA_WIDTH-1:0] in_count, input out_resetn, input out_clk, output [DATA_WIDTH-1:0] out_count ); // Bit-width of the counter parameter DATA_WIDTH = 1; // Whether the input and output clock are asynchronous, if set to 0 the // synchronizer will be bypassed and out_count will be in_count. parameter ASYNC_CLK = 1; reg [DATA_WIDTH-1:0] cdc_sync_stage0 = 'h0; reg [DATA_WIDTH-1:0] cdc_sync_stage1 = 'h0; reg [DATA_WIDTH-1:0] cdc_sync_stage2 = 'h0; reg [DATA_WIDTH-1:0] out_count_m = 'h0; function [DATA_WIDTH-1:0] g2b; input [DATA_WIDTH-1:0] g; reg [DATA_WIDTH-1:0] b; integer i; begin b[DATA_WIDTH-1] = g[DATA_WIDTH-1]; for (i = DATA_WIDTH - 2; i >= 0; i = i - 1) b[i] = b[i + 1] ^ g[i]; g2b = b; end endfunction function [DATA_WIDTH-1:0] b2g; input [DATA_WIDTH-1:0] b; reg [DATA_WIDTH-1:0] g; integer i; begin g[DATA_WIDTH-1] = b[DATA_WIDTH-1]; for (i = DATA_WIDTH - 2; i >= 0; i = i -1) g[i] = b[i + 1] ^ b[i]; b2g = g; end endfunction always @(posedge in_clk) begin if (in_resetn == 1'b0) begin cdc_sync_stage0 <= 'h00; end else begin cdc_sync_stage0 <= b2g(in_count); end end always @(posedge out_clk) begin if (out_resetn == 1'b0) begin cdc_sync_stage1 <= 'h00; cdc_sync_stage2 <= 'h00; out_count_m <= 'h00; end else begin cdc_sync_stage1 <= cdc_sync_stage0; cdc_sync_stage2 <= cdc_sync_stage1; out_count_m <= g2b(cdc_sync_stage2); end end assign out_count = ASYNC_CLK ? out_count_m : in_count; endmodule bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/up_adc_channel.v000066400000000000000000000332551457144405000274100ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module up_adc_channel ( // adc interface adc_clk, adc_rst, adc_enable, adc_iqcor_enb, adc_dcfilt_enb, adc_dfmt_se, adc_dfmt_type, adc_dfmt_enable, adc_dcfilt_offset, adc_dcfilt_coeff, adc_iqcor_coeff_1, adc_iqcor_coeff_2, adc_pnseq_sel, adc_data_sel, adc_pn_err, adc_pn_oos, adc_or, up_adc_pn_err, up_adc_pn_oos, up_adc_or, // user controls up_usr_datatype_be, up_usr_datatype_signed, up_usr_datatype_shift, up_usr_datatype_total_bits, up_usr_datatype_bits, up_usr_decimation_m, up_usr_decimation_n, adc_usr_datatype_be, adc_usr_datatype_signed, adc_usr_datatype_shift, adc_usr_datatype_total_bits, adc_usr_datatype_bits, adc_usr_decimation_m, adc_usr_decimation_n, // bus interface up_rstn, up_clk, up_wreq, up_waddr, up_wdata, up_wack, up_rreq, up_raddr, up_rdata, up_rack); // parameters parameter ADC_CHANNEL_ID = 4'h0; // adc interface input adc_clk; input adc_rst; output adc_enable; output adc_iqcor_enb; output adc_dcfilt_enb; output adc_dfmt_se; output adc_dfmt_type; output adc_dfmt_enable; output [15:0] adc_dcfilt_offset; output [15:0] adc_dcfilt_coeff; output [15:0] adc_iqcor_coeff_1; output [15:0] adc_iqcor_coeff_2; output [ 3:0] adc_pnseq_sel; output [ 3:0] adc_data_sel; input adc_pn_err; input adc_pn_oos; input adc_or; output up_adc_pn_err; output up_adc_pn_oos; output up_adc_or; // user controls output up_usr_datatype_be; output up_usr_datatype_signed; output [ 7:0] up_usr_datatype_shift; output [ 7:0] up_usr_datatype_total_bits; output [ 7:0] up_usr_datatype_bits; output [15:0] up_usr_decimation_m; output [15:0] up_usr_decimation_n; input adc_usr_datatype_be; input adc_usr_datatype_signed; input [ 7:0] adc_usr_datatype_shift; input [ 7:0] adc_usr_datatype_total_bits; input [ 7:0] adc_usr_datatype_bits; input [15:0] adc_usr_decimation_m; input [15:0] adc_usr_decimation_n; // bus interface input up_rstn; input up_clk; input up_wreq; input [13:0] up_waddr; input [31:0] up_wdata; output up_wack; input up_rreq; input [13:0] up_raddr; output [31:0] up_rdata; output up_rack; // internal registers reg up_wack = 'd0; reg up_adc_lb_enb = 'd0; reg up_adc_pn_sel = 'd0; reg up_adc_iqcor_enb = 'd0; reg up_adc_dcfilt_enb = 'd0; reg up_adc_dfmt_se = 'd0; reg up_adc_dfmt_type = 'd0; reg up_adc_dfmt_enable = 'd0; reg up_adc_pn_type = 'd0; reg up_adc_enable = 'd0; reg up_adc_pn_err = 'd0; reg up_adc_pn_oos = 'd0; reg up_adc_or = 'd0; reg [15:0] up_adc_dcfilt_offset = 'd0; reg [15:0] up_adc_dcfilt_coeff = 'd0; reg [15:0] up_adc_iqcor_coeff_1 = 'd0; reg [15:0] up_adc_iqcor_coeff_2 = 'd0; reg [ 3:0] up_adc_pnseq_sel = 'd0; reg [ 3:0] up_adc_data_sel = 'd0; reg up_usr_datatype_be = 'd0; reg up_usr_datatype_signed = 'd0; reg [ 7:0] up_usr_datatype_shift = 'd0; reg [ 7:0] up_usr_datatype_total_bits = 'd0; reg [ 7:0] up_usr_datatype_bits = 'd0; reg [15:0] up_usr_decimation_m = 'd0; reg [15:0] up_usr_decimation_n = 'd0; reg up_rack = 'd0; reg [31:0] up_rdata = 'd0; reg [15:0] up_adc_iqcor_coeff_tc_1 = 'd0; reg [15:0] up_adc_iqcor_coeff_tc_2 = 'd0; reg [ 3:0] up_adc_pnseq_sel_m = 'd0; reg [ 3:0] up_adc_data_sel_m = 'd0; // internal signals wire up_wreq_s; wire up_rreq_s; wire up_adc_pn_err_s; wire up_adc_pn_oos_s; wire up_adc_or_s; // 2's complement function function [15:0] sm2tc; input [15:0] din; reg [15:0] dp; reg [15:0] dn; reg [15:0] dout; begin dp = {1'b0, din[14:0]}; dn = ~dp + 1'b1; dout = (din[15] == 1'b1) ? dn : dp; sm2tc = dout; end endfunction // decode block select assign up_wreq_s = ((up_waddr[13:8] == 6'h01) && (up_waddr[7:4] == ADC_CHANNEL_ID)) ? up_wreq : 1'b0; assign up_rreq_s = ((up_raddr[13:8] == 6'h01) && (up_raddr[7:4] == ADC_CHANNEL_ID)) ? up_rreq : 1'b0; // processor write interface always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_wack <= 'd0; up_adc_lb_enb <= 'd0; up_adc_pn_sel <= 'd0; up_adc_iqcor_enb <= 'd0; up_adc_dcfilt_enb <= 'd0; up_adc_dfmt_se <= 'd0; up_adc_dfmt_type <= 'd0; up_adc_dfmt_enable <= 'd0; up_adc_pn_type <= 'd0; up_adc_enable <= 'd0; up_adc_pn_err <= 'd0; up_adc_pn_oos <= 'd0; up_adc_or <= 'd0; up_adc_dcfilt_offset <= 'd0; up_adc_dcfilt_coeff <= 'd0; up_adc_iqcor_coeff_1 <= 'd0; up_adc_iqcor_coeff_2 <= 'd0; up_adc_pnseq_sel <= 'd0; up_adc_data_sel <= 'd0; up_usr_datatype_be <= 'd0; up_usr_datatype_signed <= 'd0; up_usr_datatype_shift <= 'd0; up_usr_datatype_total_bits <= 'd0; up_usr_datatype_bits <= 'd0; up_usr_decimation_m <= 'd0; up_usr_decimation_n <= 'd0; end else begin up_wack <= up_wreq_s; if ((up_wreq_s == 1'b1) && (up_waddr[3:0] == 4'h0)) begin up_adc_lb_enb <= up_wdata[11]; up_adc_pn_sel <= up_wdata[10]; up_adc_iqcor_enb <= up_wdata[9]; up_adc_dcfilt_enb <= up_wdata[8]; up_adc_dfmt_se <= up_wdata[6]; up_adc_dfmt_type <= up_wdata[5]; up_adc_dfmt_enable <= up_wdata[4]; up_adc_pn_type <= up_wdata[1]; up_adc_enable <= up_wdata[0]; end if (up_adc_pn_err_s == 1'b1) begin up_adc_pn_err <= 1'b1; end else if ((up_wreq_s == 1'b1) && (up_waddr[3:0] == 4'h1)) begin up_adc_pn_err <= up_adc_pn_err & ~up_wdata[2]; end if (up_adc_pn_oos_s == 1'b1) begin up_adc_pn_oos <= 1'b1; end else if ((up_wreq_s == 1'b1) && (up_waddr[3:0] == 4'h1)) begin up_adc_pn_oos <= up_adc_pn_oos & ~up_wdata[1]; end if (up_adc_or_s == 1'b1) begin up_adc_or <= 1'b1; end else if ((up_wreq_s == 1'b1) && (up_waddr[3:0] == 4'h1)) begin up_adc_or <= up_adc_or & ~up_wdata[0]; end if ((up_wreq_s == 1'b1) && (up_waddr[3:0] == 4'h4)) begin up_adc_dcfilt_offset <= up_wdata[31:16]; up_adc_dcfilt_coeff <= up_wdata[15:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[3:0] == 4'h5)) begin up_adc_iqcor_coeff_1 <= up_wdata[31:16]; up_adc_iqcor_coeff_2 <= up_wdata[15:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[3:0] == 4'h6)) begin up_adc_pnseq_sel <= up_wdata[19:16]; up_adc_data_sel <= up_wdata[3:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[3:0] == 4'h8)) begin up_usr_datatype_be <= up_wdata[25]; up_usr_datatype_signed <= up_wdata[24]; up_usr_datatype_shift <= up_wdata[23:16]; up_usr_datatype_total_bits <= up_wdata[15:8]; up_usr_datatype_bits <= up_wdata[7:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[3:0] == 4'h9)) begin up_usr_decimation_m <= up_wdata[31:16]; up_usr_decimation_n <= up_wdata[15:0]; end end end // processor read interface always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_rack <= 'd0; up_rdata <= 'd0; end else begin up_rack <= up_rreq_s; if (up_rreq_s == 1'b1) begin case (up_raddr[3:0]) 4'h0: up_rdata <= {20'd0, up_adc_lb_enb, up_adc_pn_sel, up_adc_iqcor_enb, up_adc_dcfilt_enb, 1'd0, up_adc_dfmt_se, up_adc_dfmt_type, up_adc_dfmt_enable, 2'd0, up_adc_pn_type, up_adc_enable}; 4'h1: up_rdata <= {29'd0, up_adc_pn_err, up_adc_pn_oos, up_adc_or}; 4'h4: up_rdata <= {up_adc_dcfilt_offset, up_adc_dcfilt_coeff}; 4'h5: up_rdata <= {up_adc_iqcor_coeff_1, up_adc_iqcor_coeff_2}; 4'h6: up_rdata <= {12'd0, up_adc_pnseq_sel, 12'd0, up_adc_data_sel}; 4'h8: up_rdata <= {6'd0, adc_usr_datatype_be, adc_usr_datatype_signed, adc_usr_datatype_shift, adc_usr_datatype_total_bits, adc_usr_datatype_bits}; 4'h9: up_rdata <= {adc_usr_decimation_m, adc_usr_decimation_n}; default: up_rdata <= 0; endcase end else begin up_rdata <= 32'd0; end end end // change coefficients to 2's complements always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_adc_iqcor_coeff_tc_1 <= 16'd0; up_adc_iqcor_coeff_tc_2 <= 16'd0; end else begin up_adc_iqcor_coeff_tc_1 <= sm2tc(up_adc_iqcor_coeff_1); up_adc_iqcor_coeff_tc_2 <= sm2tc(up_adc_iqcor_coeff_2); end end // data/pn sources always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_adc_pnseq_sel_m <= 4'd0; up_adc_data_sel_m <= 4'd0; end else begin case ({up_adc_pn_type, up_adc_pn_sel}) 2'b10: up_adc_pnseq_sel_m <= 4'h1; 2'b01: up_adc_pnseq_sel_m <= 4'h9; default: up_adc_pnseq_sel_m <= up_adc_pnseq_sel; endcase if (up_adc_lb_enb == 1'b1) begin up_adc_data_sel_m <= 4'h1; end else begin up_adc_data_sel_m <= up_adc_data_sel; end end end // adc control & status up_xfer_cntrl #(.DATA_WIDTH(78)) i_xfer_cntrl ( .up_rstn (up_rstn), .up_clk (up_clk), .up_data_cntrl ({ up_adc_iqcor_enb, up_adc_dcfilt_enb, up_adc_dfmt_se, up_adc_dfmt_type, up_adc_dfmt_enable, up_adc_enable, up_adc_dcfilt_offset, up_adc_dcfilt_coeff, up_adc_iqcor_coeff_tc_1, up_adc_iqcor_coeff_tc_2, up_adc_pnseq_sel_m, up_adc_data_sel_m}), .up_xfer_done (), .d_rst (adc_rst), .d_clk (adc_clk), .d_data_cntrl ({ adc_iqcor_enb, adc_dcfilt_enb, adc_dfmt_se, adc_dfmt_type, adc_dfmt_enable, adc_enable, adc_dcfilt_offset, adc_dcfilt_coeff, adc_iqcor_coeff_1, adc_iqcor_coeff_2, adc_pnseq_sel, adc_data_sel})); up_xfer_status #(.DATA_WIDTH(3)) i_xfer_status ( .up_rstn (up_rstn), .up_clk (up_clk), .up_data_status ({up_adc_pn_err_s, up_adc_pn_oos_s, up_adc_or_s}), .d_rst (adc_rst), .d_clk (adc_clk), .d_data_status ({ adc_pn_err, adc_pn_oos, adc_or})); endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/up_adc_common.v000066400000000000000000000267631457144405000272760ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module up_adc_common ( // clock reset mmcm_rst, // adc interface adc_clk, adc_rst, adc_r1_mode, adc_ddr_edgesel, adc_pin_mode, adc_status, adc_sync_status, adc_status_ovf, adc_status_unf, adc_clk_ratio, adc_start_code, adc_sync, // channel interface up_status_pn_err, up_status_pn_oos, up_status_or, // drp interface up_drp_sel, up_drp_wr, up_drp_addr, up_drp_wdata, up_drp_rdata, up_drp_ready, up_drp_locked, // user channel control up_usr_chanmax, adc_usr_chanmax, up_adc_gpio_in, up_adc_gpio_out, // bus interface up_rstn, up_clk, up_wreq, up_waddr, up_wdata, up_wack, up_rreq, up_raddr, up_rdata, up_rack); // parameters localparam PCORE_VERSION = 32'h00090062; parameter ID = 0; // clock reset output mmcm_rst; // adc interface input adc_clk; output adc_rst; output adc_r1_mode; output adc_ddr_edgesel; output adc_pin_mode; input adc_status; input adc_sync_status; input adc_status_ovf; input adc_status_unf; input [31:0] adc_clk_ratio; output [31:0] adc_start_code; output adc_sync; // channel interface input up_status_pn_err; input up_status_pn_oos; input up_status_or; // drp interface output up_drp_sel; output up_drp_wr; output [11:0] up_drp_addr; output [15:0] up_drp_wdata; input [15:0] up_drp_rdata; input up_drp_ready; input up_drp_locked; // user channel control output [ 7:0] up_usr_chanmax; input [ 7:0] adc_usr_chanmax; input [31:0] up_adc_gpio_in; output [31:0] up_adc_gpio_out; // bus interface input up_rstn; input up_clk; input up_wreq; input [13:0] up_waddr; input [31:0] up_wdata; output up_wack; input up_rreq; input [13:0] up_raddr; output [31:0] up_rdata; output up_rack; // internal registers reg up_core_preset = 'd1; reg up_mmcm_preset = 'd0; reg up_wack = 'd0; reg [31:0] up_scratch = 'd0; reg up_mmcm_resetn = 'd0; reg up_resetn = 'd0; reg up_adc_r1_mode = 'd0; reg up_adc_ddr_edgesel = 'd0; reg up_adc_pin_mode = 'd0; reg up_drp_sel = 'd0; reg up_drp_wr = 'd0; reg up_drp_status = 'd0; reg up_drp_rwn = 'd0; reg [11:0] up_drp_addr = 'd0; reg [15:0] up_drp_wdata = 'd0; reg [15:0] up_drp_rdata_hold = 'd0; reg up_status_ovf = 'd0; reg up_status_unf = 'd0; reg [ 7:0] up_usr_chanmax = 'd0; reg [31:0] up_adc_gpio_out = 'd0; reg [31:0] up_adc_start_code = 'd0; reg up_adc_sync = 'd0; reg up_rack = 'd0; reg [31:0] up_rdata = 'd0; // internal signals wire up_wreq_s; wire up_rreq_s; wire up_status_s; wire up_sync_status_s; wire up_status_ovf_s; wire up_status_unf_s; wire up_cntrl_xfer_done; wire [31:0] up_adc_clk_count_s; // decode block select assign up_wreq_s = (up_waddr[13:8] == 6'h00) ? up_wreq : 1'b0; assign up_rreq_s = (up_raddr[13:8] == 6'h00) ? up_rreq : 1'b0; // processor write interface always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_core_preset <= 1'd1; up_mmcm_preset <= 1'd1; up_wack <= 'd0; up_scratch <= 'd0; up_mmcm_resetn <= 'd0; up_resetn <= 'd0; up_adc_r1_mode <= 'd0; up_adc_ddr_edgesel <= 'd0; up_adc_pin_mode <= 'd0; up_drp_sel <= 'd0; up_drp_wr <= 'd0; up_drp_status <= 'd0; up_drp_rwn <= 'd0; up_drp_addr <= 'd0; up_drp_wdata <= 'd0; up_drp_rdata_hold <= 'd0; up_status_ovf <= 'd0; up_status_unf <= 'd0; up_usr_chanmax <= 'd0; up_adc_gpio_out <= 'd0; up_adc_start_code <= 'd0; end else begin up_core_preset <= ~up_resetn; up_mmcm_preset <= ~up_mmcm_resetn; up_wack <= up_wreq_s; if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h02)) begin up_scratch <= up_wdata; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h10)) begin up_mmcm_resetn <= up_wdata[1]; up_resetn <= up_wdata[0]; end if (up_adc_sync == 1'b1) begin if (up_cntrl_xfer_done == 1'b1) begin up_adc_sync <= 1'b0; end end else if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h11)) begin up_adc_sync <= up_wdata[3]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h11)) begin up_adc_r1_mode <= up_wdata[2]; up_adc_ddr_edgesel <= up_wdata[1]; up_adc_pin_mode <= up_wdata[0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h1c)) begin up_drp_sel <= 1'b1; up_drp_wr <= ~up_wdata[28]; end else begin up_drp_sel <= 1'b0; up_drp_wr <= 1'b0; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h1c)) begin up_drp_status <= 1'b1; end else if (up_drp_ready == 1'b1) begin up_drp_status <= 1'b0; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h1c)) begin up_drp_rwn <= up_wdata[28]; up_drp_addr <= up_wdata[27:16]; up_drp_wdata <= up_wdata[15:0]; end if (up_drp_ready == 1'b1) begin up_drp_rdata_hold <= up_drp_rdata; end if (up_status_ovf_s == 1'b1) begin up_status_ovf <= 1'b1; end else if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h22)) begin up_status_ovf <= up_status_ovf & ~up_wdata[2]; end if (up_status_unf_s == 1'b1) begin up_status_unf <= 1'b1; end else if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h22)) begin up_status_unf <= up_status_unf & ~up_wdata[1]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h28)) begin up_usr_chanmax <= up_wdata[7:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h29)) begin up_adc_start_code <= up_wdata[31:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h2f)) begin up_adc_gpio_out <= up_wdata; end end end // processor read interface always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_rack <= 'd0; up_rdata <= 'd0; end else begin up_rack <= up_rreq_s; if (up_rreq_s == 1'b1) begin case (up_raddr[7:0]) 8'h00: up_rdata <= PCORE_VERSION; 8'h01: up_rdata <= ID; 8'h02: up_rdata <= up_scratch; 8'h10: up_rdata <= {30'd0, up_mmcm_resetn, up_resetn}; 8'h11: up_rdata <= {28'd0, up_adc_sync, up_adc_r1_mode, up_adc_ddr_edgesel, up_adc_pin_mode}; 8'h15: up_rdata <= up_adc_clk_count_s; 8'h16: up_rdata <= adc_clk_ratio; 8'h17: up_rdata <= {28'd0, up_status_pn_err, up_status_pn_oos, up_status_or, up_status_s}; 8'h1a: up_rdata <= {31'd0, up_sync_status_s}; 8'h1c: up_rdata <= {3'd0, up_drp_rwn, up_drp_addr, up_drp_wdata}; 8'h1d: up_rdata <= {14'd0, up_drp_locked, up_drp_status, up_drp_rdata_hold}; 8'h22: up_rdata <= {29'd0, up_status_ovf, up_status_unf, 1'b0}; 8'h23: up_rdata <= 32'd8; 8'h28: up_rdata <= {24'd0, adc_usr_chanmax}; 8'h29: up_rdata <= up_adc_start_code; 8'h2e: up_rdata <= up_adc_gpio_in; 8'h2f: up_rdata <= up_adc_gpio_out; default: up_rdata <= 0; endcase end else begin up_rdata <= 32'd0; end end end // resets ad_rst i_mmcm_rst_reg (.preset(up_mmcm_preset), .clk(up_clk), .rst(mmcm_rst)); ad_rst i_core_rst_reg (.preset(up_core_preset), .clk(adc_clk), .rst(adc_rst)); // adc control & status up_xfer_cntrl #(.DATA_WIDTH(36)) i_xfer_cntrl ( .up_rstn (up_rstn), .up_clk (up_clk), .up_data_cntrl ({ up_adc_sync, up_adc_start_code, up_adc_r1_mode, up_adc_ddr_edgesel, up_adc_pin_mode}), .up_xfer_done (up_cntrl_xfer_done), .d_rst (adc_rst), .d_clk (adc_clk), .d_data_cntrl ({ adc_sync, adc_start_code, adc_r1_mode, adc_ddr_edgesel, adc_pin_mode})); up_xfer_status #(.DATA_WIDTH(4)) i_xfer_status ( .up_rstn (up_rstn), .up_clk (up_clk), .up_data_status ({up_sync_status_s, up_status_s, up_status_ovf_s, up_status_unf_s}), .d_rst (adc_rst), .d_clk (adc_clk), .d_data_status ({ adc_sync_status, adc_status, adc_status_ovf, adc_status_unf})); // adc clock monitor up_clock_mon i_clock_mon ( .up_rstn (up_rstn), .up_clk (up_clk), .up_d_count (up_adc_clk_count_s), .d_rst (adc_rst), .d_clk (adc_clk)); endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/up_axi.v000066400000000000000000000201141457144405000257400ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module up_axi ( // reset and clocks up_rstn, up_clk, // axi4 interface up_axi_awvalid, up_axi_awaddr, up_axi_awready, up_axi_wvalid, up_axi_wdata, up_axi_wstrb, up_axi_wready, up_axi_bvalid, up_axi_bresp, up_axi_bready, up_axi_arvalid, up_axi_araddr, up_axi_arready, up_axi_rvalid, up_axi_rresp, up_axi_rdata, up_axi_rready, // pcore interface up_wreq, up_waddr, up_wdata, up_wack, up_rreq, up_raddr, up_rdata, up_rack); // parameters parameter ADDRESS_WIDTH = 14; localparam AW = ADDRESS_WIDTH - 1; // reset and clocks input up_rstn; input up_clk; // axi4 interface input up_axi_awvalid; input [31:0] up_axi_awaddr; output up_axi_awready; input up_axi_wvalid; input [31:0] up_axi_wdata; input [ 3:0] up_axi_wstrb; output up_axi_wready; output up_axi_bvalid; output [ 1:0] up_axi_bresp; input up_axi_bready; input up_axi_arvalid; input [31:0] up_axi_araddr; output up_axi_arready; output up_axi_rvalid; output [ 1:0] up_axi_rresp; output [31:0] up_axi_rdata; input up_axi_rready; // pcore interface output up_wreq; output [AW:0] up_waddr; output [31:0] up_wdata; input up_wack; output up_rreq; output [AW:0] up_raddr; input [31:0] up_rdata; input up_rack; // internal registers reg up_axi_awready = 'd0; reg up_axi_wready = 'd0; reg up_axi_bvalid = 'd0; reg up_wack_d = 'd0; reg up_wsel = 'd0; reg up_wreq = 'd0; reg [AW:0] up_waddr = 'd0; reg [31:0] up_wdata = 'd0; reg [ 4:0] up_wcount = 'd0; reg up_axi_arready = 'd0; reg up_axi_rvalid = 'd0; reg [31:0] up_axi_rdata = 'd0; reg up_rack_d = 'd0; reg [31:0] up_rdata_d = 'd0; reg up_rsel = 'd0; reg up_rreq = 'd0; reg [AW:0] up_raddr = 'd0; reg [ 4:0] up_rcount = 'd0; // internal signals wire up_wack_s; wire up_rack_s; wire [31:0] up_rdata_s; // write channel interface assign up_axi_bresp = 2'd0; always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 1'b0) begin up_axi_awready <= 'd0; up_axi_wready <= 'd0; up_axi_bvalid <= 'd0; end else begin if (up_axi_awready == 1'b1) begin up_axi_awready <= 1'b0; end else if (up_wack_s == 1'b1) begin up_axi_awready <= 1'b1; end if (up_axi_wready == 1'b1) begin up_axi_wready <= 1'b0; end else if (up_wack_s == 1'b1) begin up_axi_wready <= 1'b1; end if ((up_axi_bready == 1'b1) && (up_axi_bvalid == 1'b1)) begin up_axi_bvalid <= 1'b0; end else if (up_wack_d == 1'b1) begin up_axi_bvalid <= 1'b1; end end end assign up_wack_s = (up_wcount == 5'h1f) ? 1'b1 : (up_wcount[4] & up_wack); always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 1'b0) begin up_wack_d <= 'd0; up_wsel <= 'd0; up_wreq <= 'd0; up_waddr <= 'd0; up_wdata <= 'd0; up_wcount <= 'd0; end else begin up_wack_d <= up_wack_s; if (up_wsel == 1'b1) begin if ((up_axi_bready == 1'b1) && (up_axi_bvalid == 1'b1)) begin up_wsel <= 1'b0; end up_wreq <= 1'b0; up_waddr <= up_waddr; up_wdata <= up_wdata; end else begin up_wsel <= up_axi_awvalid & up_axi_wvalid; up_wreq <= up_axi_awvalid & up_axi_wvalid; up_waddr <= up_axi_awaddr[AW+2:2]; up_wdata <= up_axi_wdata; end if (up_wack_s == 1'b1) begin up_wcount <= 5'h00; end else if (up_wcount[4] == 1'b1) begin up_wcount <= up_wcount + 1'b1; end else if (up_wreq == 1'b1) begin up_wcount <= 5'h10; end end end // read channel interface assign up_axi_rresp = 2'd0; always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 1'b0) begin up_axi_arready <= 'd0; up_axi_rvalid <= 'd0; up_axi_rdata <= 'd0; end else begin if (up_axi_arready == 1'b1) begin up_axi_arready <= 1'b0; end else if (up_rack_s == 1'b1) begin up_axi_arready <= 1'b1; end if ((up_axi_rready == 1'b1) && (up_axi_rvalid == 1'b1)) begin up_axi_rvalid <= 1'b0; up_axi_rdata <= 32'd0; end else if (up_rack_d == 1'b1) begin up_axi_rvalid <= 1'b1; up_axi_rdata <= up_rdata_d; end end end assign up_rack_s = (up_rcount == 5'h1f) ? 1'b1 : (up_rcount[4] & up_rack); assign up_rdata_s = (up_rcount == 5'h1f) ? {2{16'hdead}} : up_rdata; always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 1'b0) begin up_rack_d <= 'd0; up_rdata_d <= 'd0; up_rsel <= 'd0; up_rreq <= 'd0; up_raddr <= 'd0; up_rcount <= 'd0; end else begin up_rack_d <= up_rack_s; up_rdata_d <= up_rdata_s; if (up_rsel == 1'b1) begin if ((up_axi_rready == 1'b1) && (up_axi_rvalid == 1'b1)) begin up_rsel <= 1'b0; end up_rreq <= 1'b0; up_raddr <= up_raddr; end else begin up_rsel <= up_axi_arvalid; up_rreq <= up_axi_arvalid; up_raddr <= up_axi_araddr[AW+2:2]; end if (up_rack_s == 1'b1) begin up_rcount <= 5'h00; end else if (up_rcount[4] == 1'b1) begin up_rcount <= up_rcount + 1'b1; end else if (up_rreq == 1'b1) begin up_rcount <= 5'h10; end end end endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/up_axis_dma_rx.v000066400000000000000000000171401457144405000274620ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module up_axis_dma_rx ( // adc interface adc_clk, adc_rst, // dma interface dma_clk, dma_rst, dma_start, dma_stream, dma_count, dma_ovf, dma_unf, dma_status, dma_bw, // bus interface up_rstn, up_clk, up_wreq, up_waddr, up_wdata, up_wack, up_rreq, up_raddr, up_rdata, up_rack); // parameters localparam PCORE_VERSION = 32'h00050063; parameter ID = 0; // adc interface input adc_clk; output adc_rst; // dma interface input dma_clk; output dma_rst; output dma_start; output dma_stream; output [31:0] dma_count; input dma_ovf; input dma_unf; input dma_status; input [31:0] dma_bw; // bus interface input up_rstn; input up_clk; input up_wreq; input [13:0] up_waddr; input [31:0] up_wdata; output up_wack; input up_rreq; input [13:0] up_raddr; output [31:0] up_rdata; output up_rack; // internal registers reg up_preset = 'd0; reg up_wack = 'd0; reg [31:0] up_scratch = 'd0; reg up_resetn = 'd0; reg up_dma_stream = 'd0; reg up_dma_start = 'd0; reg [31:0] up_dma_count = 'd0; reg up_dma_ovf = 'd0; reg up_dma_unf = 'd0; reg up_rack = 'd0; reg [31:0] up_rdata = 'd0; reg dma_start_d = 'd0; reg dma_start_2d = 'd0; reg dma_start = 'd0; // internal signals wire up_wreq_s; wire up_rreq_s; wire up_dma_ovf_s; wire up_dma_unf_s; wire up_dma_status_s; // decode block select assign up_wreq_s = (up_waddr[13:8] == 6'h00) ? up_wreq : 1'b0; assign up_rreq_s = (up_waddr[13:8] == 6'h00) ? up_rreq : 1'b0; // processor write interface always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_preset <= 1'd1; up_wack <= 'd0; up_scratch <= 'd0; up_resetn <= 'd0; up_dma_stream <= 'd0; up_dma_start <= 'd0; up_dma_count <= 'd0; up_dma_ovf <= 'd0; up_dma_unf <= 'd0; end else begin up_preset <= 1'd0; up_wack <= up_wreq_s; if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h02)) begin up_scratch <= up_wdata; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h10)) begin up_resetn <= up_wdata[0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h20)) begin up_dma_stream <= up_wdata[1]; up_dma_start <= up_wdata[0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h21)) begin up_dma_count <= up_wdata; end if (up_dma_ovf_s == 1'b1) begin up_dma_ovf <= 1'b1; end else if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h22)) begin up_dma_ovf <= up_dma_ovf & ~up_wdata[2]; end if (up_dma_unf_s == 1'b1) begin up_dma_unf <= 1'b1; end else if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h22)) begin up_dma_unf <= up_dma_unf & ~up_wdata[1]; end end end // processor read interface always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_rack <= 'd0; up_rdata <= 'd0; end else begin up_rack <= up_rreq_s; if (up_rreq_s == 1'b1) begin case (up_raddr[7:0]) 8'h00: up_rdata <= PCORE_VERSION; 8'h01: up_rdata <= ID; 8'h02: up_rdata <= up_scratch; 8'h10: up_rdata <= {31'd0, up_resetn}; 8'h20: up_rdata <= {30'd0, up_dma_stream, up_dma_start}; 8'h21: up_rdata <= up_dma_count; 8'h22: up_rdata <= {29'd0, up_dma_ovf, up_dma_unf, up_dma_status_s}; 8'h23: up_rdata <= dma_bw; default: up_rdata <= 0; endcase end else begin up_rdata <= 32'd0; end end end // resets ad_rst i_adc_rst_reg (.preset(up_preset), .clk(adc_clk), .rst(adc_rst)); ad_rst i_dma_rst_reg (.preset(up_preset), .clk(dma_clk), .rst(dma_rst)); // dma control & status up_xfer_cntrl #(.DATA_WIDTH(34)) i_dma_xfer_cntrl ( .up_rstn (up_rstn), .up_clk (up_clk), .up_data_cntrl ({ up_dma_start, up_dma_stream, up_dma_count}), .d_rst (dma_rst), .d_clk (dma_clk), .d_data_cntrl ({ dma_start_s, dma_stream, dma_count})); up_xfer_status #(.DATA_WIDTH(3)) i_dma_xfer_status ( .up_rstn (up_rstn), .up_clk (up_clk), .up_data_status ({up_dma_ovf_s, up_dma_unf_s, up_dma_status_s}), .d_rst (dma_rst), .d_clk (dma_clk), .d_data_status ({ dma_ovf, dma_unf, dma_status})); // start needs to be a pulse always @(posedge dma_clk) begin dma_start_d <= dma_start_s; dma_start_2d <= dma_start_d; dma_start <= dma_start_d & ~dma_start_2d; end endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/up_axis_dma_tx.v000066400000000000000000000150151457144405000274630ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module up_axis_dma_tx ( // dac interface dac_clk, dac_rst, // dma interface dma_clk, dma_rst, dma_frmcnt, dma_ovf, dma_unf, // bus interface up_rstn, up_clk, up_wreq, up_waddr, up_wdata, up_wack, up_rreq, up_raddr, up_rdata, up_rack); // parameters localparam PCORE_VERSION = 32'h00050062; parameter ID = 0; // dac interface input dac_clk; output dac_rst; // dma interface input dma_clk; output dma_rst; output [31:0] dma_frmcnt; input dma_ovf; input dma_unf; // bus interface input up_rstn; input up_clk; input up_wreq; input [13:0] up_waddr; input [31:0] up_wdata; output up_wack; input up_rreq; input [13:0] up_raddr; output [31:0] up_rdata; output up_rack; // internal registers reg up_preset = 'd0; reg up_wack = 'd0; reg [31:0] up_scratch = 'd0; reg up_resetn = 'd0; reg [31:0] up_dma_frmcnt = 'd0; reg up_dma_ovf = 'd0; reg up_dma_unf = 'd0; reg up_rack = 'd0; reg [31:0] up_rdata = 'd0; // internal signals wire up_wreq_s; wire up_rreq_s; wire up_dma_ovf_s; wire up_dma_unf_s; // decode block select assign up_wreq_s = (up_waddr[13:8] == 6'h10) ? up_wreq : 1'b0; assign up_rreq_s = (up_raddr[13:8] == 6'h10) ? up_rreq : 1'b0; // processor write interface always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_preset <= 1'd1; up_wack <= 'd0; up_scratch <= 'd0; up_resetn <= 'd0; up_dma_frmcnt <= 'd0; up_dma_ovf <= 'd0; up_dma_unf <= 'd0; end else begin up_preset <= 1'd0; up_wack <= up_wreq_s; if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h02)) begin up_scratch <= up_wdata; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h10)) begin up_resetn <= up_wdata[0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h21)) begin up_dma_frmcnt <= up_wdata; end if (up_dma_ovf_s == 1'b1) begin up_dma_ovf <= 1'b1; end else if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h22)) begin up_dma_ovf <= up_dma_ovf & ~up_wdata[1]; end if (up_dma_unf_s == 1'b1) begin up_dma_unf <= 1'b1; end else if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h22)) begin up_dma_unf <= up_dma_unf & ~up_wdata[0]; end end end // processor read interface always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_rack <= 'd0; up_rdata <= 'd0; end else begin up_rack <= up_rreq_s; if (up_rreq_s == 1'b1) begin case (up_raddr[7:0]) 8'h00: up_rdata <= PCORE_VERSION; 8'h01: up_rdata <= ID; 8'h02: up_rdata <= up_scratch; 8'h10: up_rdata <= {31'd0, up_resetn}; 8'h21: up_rdata <= up_dma_frmcnt; 8'h22: up_rdata <= {30'd0, up_dma_ovf, up_dma_unf}; default: up_rdata <= 0; endcase end else begin up_rdata <= 32'd0; end end end // resets ad_rst i_dac_rst_reg (.preset(up_preset), .clk(dac_clk), .rst(dac_rst)); ad_rst i_dma_rst_reg (.preset(up_preset), .clk(dma_clk), .rst(dma_rst)); // dma control & status up_xfer_cntrl #(.DATA_WIDTH(32)) i_dma_xfer_cntrl ( .up_rstn (up_rstn), .up_clk (up_clk), .up_data_cntrl ( up_dma_frmcnt), .d_rst (dma_rst), .d_clk (dma_clk), .d_data_cntrl ( dma_frmcnt)); up_xfer_status #(.DATA_WIDTH(2)) i_dma_xfer_status ( .up_rstn (up_rstn), .up_clk (up_clk), .up_data_status ({up_dma_ovf_s, up_dma_unf_s}), .d_rst (dma_rst), .d_clk (dma_clk), .d_data_status ({ dma_ovf, dma_unf})); endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/up_clkgen.v000066400000000000000000000154531457144405000264340ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module up_clkgen ( // mmcm reset mmcm_rst, // clock selection clk_sel, // drp interface up_drp_sel, up_drp_wr, up_drp_addr, up_drp_wdata, up_drp_rdata, up_drp_ready, up_drp_locked, // bus interface up_rstn, up_clk, up_wreq, up_waddr, up_wdata, up_wack, up_rreq, up_raddr, up_rdata, up_rack); // parameters localparam PCORE_VERSION = 32'h00040063; parameter ID = 0; // mmcm reset output mmcm_rst; // clock selection output clk_sel; // drp interface output up_drp_sel; output up_drp_wr; output [11:0] up_drp_addr; output [15:0] up_drp_wdata; input [15:0] up_drp_rdata; input up_drp_ready; input up_drp_locked; // bus interface input up_rstn; input up_clk; input up_wreq; input [13:0] up_waddr; input [31:0] up_wdata; output up_wack; input up_rreq; input [13:0] up_raddr; output [31:0] up_rdata; output up_rack; // internal registers reg up_mmcm_preset = 'd0; reg up_wack = 'd0; reg [31:0] up_scratch = 'd0; reg up_mmcm_resetn = 'd0; reg up_resetn = 'd0; reg up_drp_sel = 'd0; reg up_drp_wr = 'd0; reg up_drp_status = 'd0; reg up_drp_rwn = 'd0; reg [11:0] up_drp_addr = 'd0; reg [15:0] up_drp_wdata = 'd0; reg [15:0] up_drp_rdata_hold = 'd0; reg up_rack = 'd0; reg [31:0] up_rdata = 'd0; reg up_clk_sel = 'd0; // internal signals wire up_wreq_s; wire up_rreq_s; // decode block select assign up_wreq_s = (up_waddr[13:8] == 6'h00) ? up_wreq : 1'b0; assign up_rreq_s = (up_raddr[13:8] == 6'h00) ? up_rreq : 1'b0; assign clk_sel = ~up_clk_sel; // processor write interface always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_mmcm_preset <= 1'd1; up_wack <= 'd0; up_scratch <= 'd0; up_mmcm_resetn <= 'd0; up_resetn <= 'd0; up_drp_sel <= 'd0; up_drp_wr <= 'd0; up_drp_status <= 'd0; up_drp_rwn <= 'd0; up_drp_addr <= 'd0; up_drp_wdata <= 'd0; up_drp_rdata_hold <= 'd0; up_clk_sel <= 'd0; end else begin up_mmcm_preset <= ~up_mmcm_resetn; up_wack <= up_wreq_s; if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h02)) begin up_scratch <= up_wdata; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h10)) begin up_mmcm_resetn <= up_wdata[1]; up_resetn <= up_wdata[0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h11)) begin up_clk_sel <= up_wdata[0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h1c)) begin up_drp_sel <= 1'b1; up_drp_wr <= ~up_wdata[28]; end else begin up_drp_sel <= 1'b0; up_drp_wr <= 1'b0; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h1c)) begin up_drp_status <= 1'b1; end else if (up_drp_ready == 1'b1) begin up_drp_status <= 1'b0; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h1c)) begin up_drp_rwn <= up_wdata[28]; up_drp_addr <= up_wdata[27:16]; up_drp_wdata <= up_wdata[15:0]; end if (up_drp_ready == 1'b1) begin up_drp_rdata_hold <= up_drp_rdata; end end end // processor read interface always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_rack <= 'd0; up_rdata <= 'd0; end else begin up_rack <= up_rreq_s; if (up_rreq_s == 1'b1) begin case (up_raddr[7:0]) 8'h00: up_rdata <= PCORE_VERSION; 8'h01: up_rdata <= ID; 8'h02: up_rdata <= up_scratch; 8'h10: up_rdata <= {30'd0, up_mmcm_resetn, up_resetn}; 8'h11: up_rdata <= {31'd0, up_clk_sel}; 8'h17: up_rdata <= {31'd0, up_drp_locked}; 8'h1c: up_rdata <= {3'd0, up_drp_rwn, up_drp_addr, up_drp_wdata}; 8'h1d: up_rdata <= {14'd0, up_drp_locked, up_drp_status, up_drp_rdata_hold}; default: up_rdata <= 0; endcase end else begin up_rdata <= 32'd0; end end end // resets ad_rst i_mmcm_rst_reg (.preset(up_mmcm_preset), .clk(up_clk), .rst(mmcm_rst)); endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/up_clock_mon.v000066400000000000000000000115601457144405000271300ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module up_clock_mon ( // processor interface up_rstn, up_clk, up_d_count, // device interface d_rst, d_clk); // processor interface input up_rstn; input up_clk; output [31:0] up_d_count; // device interface input d_rst; input d_clk; // internal registers reg [15:0] up_count = 'd0; reg up_count_toggle = 'd0; reg up_count_toggle_m1 = 'd0; reg up_count_toggle_m2 = 'd0; reg up_count_toggle_m3 = 'd0; reg [31:0] up_d_count = 'd0; reg d_count_toggle_m1 = 'd0; reg d_count_toggle_m2 = 'd0; reg d_count_toggle_m3 = 'd0; reg d_count_toggle = 'd0; reg [31:0] d_count_hold = 'd0; reg [32:0] d_count = 'd0; // internal signals wire up_count_toggle_s; wire d_count_toggle_s; // processor reference assign up_count_toggle_s = up_count_toggle_m3 ^ up_count_toggle_m2; always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_count <= 'd0; up_count_toggle <= 'd0; up_count_toggle_m1 <= 'd0; up_count_toggle_m2 <= 'd0; up_count_toggle_m3 <= 'd0; up_d_count <= 'd0; end else begin up_count <= up_count + 1'b1; if (up_count == 16'd0) begin up_count_toggle <= ~up_count_toggle; end up_count_toggle_m1 <= d_count_toggle; up_count_toggle_m2 <= up_count_toggle_m1; up_count_toggle_m3 <= up_count_toggle_m2; if (up_count_toggle_s == 1'b1) begin up_d_count <= d_count_hold; end end end // device free running assign d_count_toggle_s = d_count_toggle_m3 ^ d_count_toggle_m2; always @(posedge d_clk or posedge d_rst) begin if (d_rst == 1'b1) begin d_count_toggle_m1 <= 'd0; d_count_toggle_m2 <= 'd0; d_count_toggle_m3 <= 'd0; end else begin d_count_toggle_m1 <= up_count_toggle; d_count_toggle_m2 <= d_count_toggle_m1; d_count_toggle_m3 <= d_count_toggle_m2; end end always @(posedge d_clk) begin if (d_count_toggle_s == 1'b1) begin d_count_toggle <= ~d_count_toggle; d_count_hold <= d_count[31:0]; end if (d_count_toggle_s == 1'b1) begin d_count <= 33'd1; end else if (d_count[32] == 1'b0) begin d_count <= d_count + 1'b1; end else begin d_count <= {33{1'b1}}; end end endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/up_dac_channel.v000066400000000000000000000307201457144405000274020ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module up_dac_channel ( // dac interface dac_clk, dac_rst, dac_dds_scale_1, dac_dds_init_1, dac_dds_incr_1, dac_dds_scale_2, dac_dds_init_2, dac_dds_incr_2, dac_pat_data_1, dac_pat_data_2, dac_data_sel, dac_iqcor_enb, dac_iqcor_coeff_1, dac_iqcor_coeff_2, // user controls up_usr_datatype_be, up_usr_datatype_signed, up_usr_datatype_shift, up_usr_datatype_total_bits, up_usr_datatype_bits, up_usr_interpolation_m, up_usr_interpolation_n, dac_usr_datatype_be, dac_usr_datatype_signed, dac_usr_datatype_shift, dac_usr_datatype_total_bits, dac_usr_datatype_bits, dac_usr_interpolation_m, dac_usr_interpolation_n, // bus interface up_rstn, up_clk, up_wreq, up_waddr, up_wdata, up_wack, up_rreq, up_raddr, up_rdata, up_rack); // parameters parameter DAC_CHANNEL_ID = 4'h0; // dac interface input dac_clk; input dac_rst; output [15:0] dac_dds_scale_1; output [15:0] dac_dds_init_1; output [15:0] dac_dds_incr_1; output [15:0] dac_dds_scale_2; output [15:0] dac_dds_init_2; output [15:0] dac_dds_incr_2; output [15:0] dac_pat_data_1; output [15:0] dac_pat_data_2; output [ 3:0] dac_data_sel; output dac_iqcor_enb; output [15:0] dac_iqcor_coeff_1; output [15:0] dac_iqcor_coeff_2; // user controls output up_usr_datatype_be; output up_usr_datatype_signed; output [ 7:0] up_usr_datatype_shift; output [ 7:0] up_usr_datatype_total_bits; output [ 7:0] up_usr_datatype_bits; output [15:0] up_usr_interpolation_m; output [15:0] up_usr_interpolation_n; input dac_usr_datatype_be; input dac_usr_datatype_signed; input [ 7:0] dac_usr_datatype_shift; input [ 7:0] dac_usr_datatype_total_bits; input [ 7:0] dac_usr_datatype_bits; input [15:0] dac_usr_interpolation_m; input [15:0] dac_usr_interpolation_n; // bus interface input up_rstn; input up_clk; input up_wreq; input [13:0] up_waddr; input [31:0] up_wdata; output up_wack; input up_rreq; input [13:0] up_raddr; output [31:0] up_rdata; output up_rack; // internal registers reg up_wack = 'd0; reg [15:0] up_dac_dds_scale_1 = 'd0; reg [15:0] up_dac_dds_init_1 = 'd0; reg [15:0] up_dac_dds_incr_1 = 'd0; reg [15:0] up_dac_dds_scale_2 = 'd0; reg [15:0] up_dac_dds_init_2 = 'd0; reg [15:0] up_dac_dds_incr_2 = 'd0; reg [15:0] up_dac_pat_data_2 = 'd0; reg [15:0] up_dac_pat_data_1 = 'd0; reg up_dac_iqcor_enb = 'd0; reg up_dac_lb_enb = 'd0; reg up_dac_pn_enb = 'd0; reg [ 3:0] up_dac_data_sel = 'd0; reg [15:0] up_dac_iqcor_coeff_1 = 'd0; reg [15:0] up_dac_iqcor_coeff_2 = 'd0; reg up_usr_datatype_be = 'd0; reg up_usr_datatype_signed = 'd0; reg [ 7:0] up_usr_datatype_shift = 'd0; reg [ 7:0] up_usr_datatype_total_bits = 'd0; reg [ 7:0] up_usr_datatype_bits = 'd0; reg [15:0] up_usr_interpolation_m = 'd0; reg [15:0] up_usr_interpolation_n = 'd0; reg up_rack = 'd0; reg [31:0] up_rdata = 'd0; reg [15:0] up_dac_dds_scale_tc_1 = 'd0; reg [15:0] up_dac_dds_scale_tc_2 = 'd0; reg [15:0] up_dac_iqcor_coeff_tc_1 = 'd0; reg [15:0] up_dac_iqcor_coeff_tc_2 = 'd0; reg [ 3:0] up_dac_data_sel_m = 'd0; // internal signals wire up_wreq_s; wire up_rreq_s; // 2's complement function function [15:0] sm2tc; input [15:0] din; reg [15:0] dp; reg [15:0] dn; reg [15:0] dout; begin dp = {1'b0, din[14:0]}; dn = ~dp + 1'b1; dout = (din[15] == 1'b1) ? dn : dp; sm2tc = dout; end endfunction // decode block select assign up_wreq_s = ((up_waddr[13:8] == 6'h11) && (up_waddr[7:4] == DAC_CHANNEL_ID)) ? up_wreq : 1'b0; assign up_rreq_s = ((up_raddr[13:8] == 6'h11) && (up_raddr[7:4] == DAC_CHANNEL_ID)) ? up_rreq : 1'b0; // processor write interface always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_wack <= 'd0; up_dac_dds_scale_1 <= 'd0; up_dac_dds_init_1 <= 'd0; up_dac_dds_incr_1 <= 'd0; up_dac_dds_scale_2 <= 'd0; up_dac_dds_init_2 <= 'd0; up_dac_dds_incr_2 <= 'd0; up_dac_pat_data_2 <= 'd0; up_dac_pat_data_1 <= 'd0; up_dac_iqcor_enb <= 'd0; up_dac_lb_enb <= 'd0; up_dac_pn_enb <= 'd0; up_dac_data_sel <= 'd0; up_dac_iqcor_coeff_1 <= 'd0; up_dac_iqcor_coeff_2 <= 'd0; up_usr_datatype_be <= 'd0; up_usr_datatype_signed <= 'd0; up_usr_datatype_shift <= 'd0; up_usr_datatype_total_bits <= 'd0; up_usr_datatype_bits <= 'd0; up_usr_interpolation_m <= 'd0; up_usr_interpolation_n <= 'd0; end else begin up_wack <= up_wreq_s; if ((up_wreq_s == 1'b1) && (up_waddr[3:0] == 4'h0)) begin up_dac_dds_scale_1 <= up_wdata[15:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[3:0] == 4'h1)) begin up_dac_dds_init_1 <= up_wdata[31:16]; up_dac_dds_incr_1 <= up_wdata[15:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[3:0] == 4'h2)) begin up_dac_dds_scale_2 <= up_wdata[15:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[3:0] == 4'h3)) begin up_dac_dds_init_2 <= up_wdata[31:16]; up_dac_dds_incr_2 <= up_wdata[15:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[3:0] == 4'h4)) begin up_dac_pat_data_2 <= up_wdata[31:16]; up_dac_pat_data_1 <= up_wdata[15:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[3:0] == 4'h5)) begin up_dac_iqcor_enb <= up_wdata[2]; up_dac_lb_enb <= up_wdata[1]; up_dac_pn_enb <= up_wdata[0]; end if ((up_wreq_s == 1'b1) && (up_waddr[3:0] == 4'h6)) begin up_dac_data_sel <= up_wdata[3:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[3:0] == 4'h7)) begin up_dac_iqcor_coeff_1 <= up_wdata[31:16]; up_dac_iqcor_coeff_2 <= up_wdata[15:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[3:0] == 4'h8)) begin up_usr_datatype_be <= up_wdata[25]; up_usr_datatype_signed <= up_wdata[24]; up_usr_datatype_shift <= up_wdata[23:16]; up_usr_datatype_total_bits <= up_wdata[15:8]; up_usr_datatype_bits <= up_wdata[7:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[3:0] == 4'h9)) begin up_usr_interpolation_m <= up_wdata[31:16]; up_usr_interpolation_n <= up_wdata[15:0]; end end end // processor read interface always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_rack <= 'd0; up_rdata <= 'd0; end else begin up_rack <= up_rreq_s; if (up_rreq_s == 1'b1) begin case (up_raddr[3:0]) 4'h0: up_rdata <= {16'd0, up_dac_dds_scale_1}; 4'h1: up_rdata <= {up_dac_dds_init_1, up_dac_dds_incr_1}; 4'h2: up_rdata <= {16'd0, up_dac_dds_scale_2}; 4'h3: up_rdata <= {up_dac_dds_init_2, up_dac_dds_incr_2}; 4'h4: up_rdata <= {up_dac_pat_data_2, up_dac_pat_data_1}; 4'h5: up_rdata <= {29'd0, up_dac_iqcor_enb, up_dac_lb_enb, up_dac_pn_enb}; 4'h6: up_rdata <= {28'd0, up_dac_data_sel_m}; 4'h7: up_rdata <= {up_dac_iqcor_coeff_1, up_dac_iqcor_coeff_2}; 4'h8: up_rdata <= {6'd0, dac_usr_datatype_be, dac_usr_datatype_signed, dac_usr_datatype_shift, dac_usr_datatype_total_bits, dac_usr_datatype_bits}; 4'h9: up_rdata <= {dac_usr_interpolation_m, dac_usr_interpolation_n}; default: up_rdata <= 0; endcase end else begin up_rdata <= 32'd0; end end end // change coefficients to 2's complements always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_dac_dds_scale_tc_1 <= 16'd0; up_dac_dds_scale_tc_2 <= 16'd0; up_dac_iqcor_coeff_tc_1 <= 16'd0; up_dac_iqcor_coeff_tc_2 <= 16'd0; end else begin up_dac_dds_scale_tc_1 <= sm2tc(up_dac_dds_scale_1); up_dac_dds_scale_tc_2 <= sm2tc(up_dac_dds_scale_2); up_dac_iqcor_coeff_tc_1 <= sm2tc(up_dac_iqcor_coeff_1); up_dac_iqcor_coeff_tc_2 <= sm2tc(up_dac_iqcor_coeff_2); end end // backward compatibility always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_dac_data_sel_m <= 4'd0; end else begin case ({up_dac_lb_enb, up_dac_pn_enb}) 2'b10: up_dac_data_sel_m <= 4'h8; 2'b01: up_dac_data_sel_m <= 4'h9; default: up_dac_data_sel_m <= up_dac_data_sel; endcase end end // dac control & status up_xfer_cntrl #(.DATA_WIDTH(165)) i_xfer_cntrl ( .up_rstn (up_rstn), .up_clk (up_clk), .up_data_cntrl ({ up_dac_iqcor_enb, up_dac_iqcor_coeff_tc_1, up_dac_iqcor_coeff_tc_2, up_dac_dds_scale_tc_1, up_dac_dds_init_1, up_dac_dds_incr_1, up_dac_dds_scale_tc_2, up_dac_dds_init_2, up_dac_dds_incr_2, up_dac_pat_data_1, up_dac_pat_data_2, up_dac_data_sel_m}), .up_xfer_done (), .d_rst (dac_rst), .d_clk (dac_clk), .d_data_cntrl ({ dac_iqcor_enb, dac_iqcor_coeff_1, dac_iqcor_coeff_2, dac_dds_scale_1, dac_dds_init_1, dac_dds_incr_1, dac_dds_scale_2, dac_dds_init_2, dac_dds_incr_2, dac_pat_data_1, dac_pat_data_2, dac_data_sel})); endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/up_dac_common.v000066400000000000000000000307731457144405000272720ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module up_dac_common ( // mmcm reset mmcm_rst, // dac interface dac_clk, dac_rst, dac_sync, dac_frame, dac_par_type, dac_par_enb, dac_r1_mode, dac_datafmt, dac_datarate, dac_status, dac_status_ovf, dac_status_unf, dac_clk_ratio, // drp interface up_drp_sel, up_drp_wr, up_drp_addr, up_drp_wdata, up_drp_rdata, up_drp_ready, up_drp_locked, // user channel control up_usr_chanmax, dac_usr_chanmax, up_dac_gpio_in, up_dac_gpio_out, // bus interface up_rstn, up_clk, up_wreq, up_waddr, up_wdata, up_wack, up_rreq, up_raddr, up_rdata, up_rack); // parameters localparam PCORE_VERSION = 32'h00080062; parameter ID = 0; // mmcm reset output mmcm_rst; // dac interface input dac_clk; output dac_rst; output dac_sync; output dac_frame; output dac_par_type; output dac_par_enb; output dac_r1_mode; output dac_datafmt; output [ 7:0] dac_datarate; input dac_status; input dac_status_ovf; input dac_status_unf; input [31:0] dac_clk_ratio; // drp interface output up_drp_sel; output up_drp_wr; output [11:0] up_drp_addr; output [15:0] up_drp_wdata; input [15:0] up_drp_rdata; input up_drp_ready; input up_drp_locked; // user channel control output [ 7:0] up_usr_chanmax; input [ 7:0] dac_usr_chanmax; input [31:0] up_dac_gpio_in; output [31:0] up_dac_gpio_out; // bus interface input up_rstn; input up_clk; input up_wreq; input [13:0] up_waddr; input [31:0] up_wdata; output up_wack; input up_rreq; input [13:0] up_raddr; output [31:0] up_rdata; output up_rack; // internal registers reg up_core_preset = 'd1; reg up_mmcm_preset = 'd0; reg up_wack = 'd0; reg [31:0] up_scratch = 'd0; reg up_mmcm_resetn = 'd0; reg up_resetn = 'd0; reg up_dac_sync = 'd0; reg up_dac_par_type = 'd0; reg up_dac_par_enb = 'd0; reg up_dac_r1_mode = 'd0; reg up_dac_datafmt = 'd0; reg [ 7:0] up_dac_datarate = 'd0; reg up_dac_frame = 'd0; reg up_drp_sel = 'd0; reg up_drp_wr = 'd0; reg up_drp_status = 'd0; reg up_drp_rwn = 'd0; reg [11:0] up_drp_addr = 'd0; reg [15:0] up_drp_wdata = 'd0; reg [15:0] up_drp_rdata_hold = 'd0; reg up_status_ovf = 'd0; reg up_status_unf = 'd0; reg [ 7:0] up_usr_chanmax = 'd0; reg [31:0] up_dac_gpio_out = 'd0; reg up_rack = 'd0; reg [31:0] up_rdata = 'd0; reg dac_sync_d = 'd0; reg dac_sync_2d = 'd0; reg [ 5:0] dac_sync_count = 'd0; reg dac_sync = 'd0; reg dac_frame_d = 'd0; reg dac_frame_2d = 'd0; reg dac_frame = 'd0; // internal signals wire up_wreq_s; wire up_rreq_s; wire up_xfer_done_s; wire up_status_s; wire up_status_ovf_s; wire up_status_unf_s; wire dac_sync_s; wire dac_frame_s; wire [31:0] up_dac_clk_count_s; // decode block select assign up_wreq_s = (up_waddr[13:8] == 6'h10) ? up_wreq : 1'b0; assign up_rreq_s = (up_raddr[13:8] == 6'h10) ? up_rreq : 1'b0; // processor write interface always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_core_preset <= 1'd1; up_mmcm_preset <= 1'd1; up_wack <= 'd0; up_scratch <= 'd0; up_mmcm_resetn <= 'd0; up_resetn <= 'd0; up_dac_sync <= 'd0; up_dac_par_type <= 'd0; up_dac_par_enb <= 'd0; up_dac_r1_mode <= 'd0; up_dac_datafmt <= 'd0; up_dac_datarate <= 'd0; up_dac_frame <= 'd0; up_drp_sel <= 'd0; up_drp_wr <= 'd0; up_drp_status <= 'd0; up_drp_rwn <= 'd0; up_drp_addr <= 'd0; up_drp_wdata <= 'd0; up_drp_rdata_hold <= 'd0; up_status_ovf <= 'd0; up_status_ovf <= 'd0; up_usr_chanmax <= 'd0; up_dac_gpio_out <= 'd0; end else begin up_core_preset <= ~up_resetn; up_mmcm_preset <= ~up_mmcm_resetn; up_wack <= up_wreq_s; if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h02)) begin up_scratch <= up_wdata; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h10)) begin up_mmcm_resetn <= up_wdata[1]; up_resetn <= up_wdata[0]; end if (up_dac_sync == 1'b1) begin if (up_xfer_done_s == 1'b1) begin up_dac_sync <= 1'b0; end end else if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h11)) begin up_dac_sync <= up_wdata[0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h12)) begin up_dac_par_type <= up_wdata[7]; up_dac_par_enb <= up_wdata[6]; up_dac_r1_mode <= up_wdata[5]; up_dac_datafmt <= up_wdata[4]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h13)) begin up_dac_datarate <= up_wdata[7:0]; end if (up_dac_frame == 1'b1) begin if (up_xfer_done_s == 1'b1) begin up_dac_frame <= 1'b0; end end else if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h14)) begin up_dac_frame <= up_wdata[0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h1c)) begin up_drp_sel <= 1'b1; up_drp_wr <= ~up_wdata[28]; end else begin up_drp_sel <= 1'b0; up_drp_wr <= 1'b0; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h1c)) begin up_drp_status <= 1'b1; end else if (up_drp_ready == 1'b1) begin up_drp_status <= 1'b0; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h1c)) begin up_drp_rwn <= up_wdata[28]; up_drp_addr <= up_wdata[27:16]; up_drp_wdata <= up_wdata[15:0]; end if (up_drp_ready == 1'b1) begin up_drp_rdata_hold <= up_drp_rdata; end if (up_status_ovf_s == 1'b1) begin up_status_ovf <= 1'b1; end else if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h22)) begin up_status_ovf <= up_status_ovf & ~up_wdata[1]; end if (up_status_unf_s == 1'b1) begin up_status_unf <= 1'b1; end else if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h22)) begin up_status_unf <= up_status_unf & ~up_wdata[0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h28)) begin up_usr_chanmax <= up_wdata[7:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h2f)) begin up_dac_gpio_out <= up_wdata; end end end // processor read interface always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_rack <= 'd0; up_rdata <= 'd0; end else begin up_rack <= up_rreq_s; if (up_rreq_s == 1'b1) begin case (up_raddr[7:0]) 8'h00: up_rdata <= PCORE_VERSION; 8'h01: up_rdata <= ID; 8'h02: up_rdata <= up_scratch; 8'h10: up_rdata <= {30'd0, up_mmcm_resetn, up_resetn}; 8'h11: up_rdata <= {31'd0, up_dac_sync}; 8'h12: up_rdata <= {24'd0, up_dac_par_type, up_dac_par_enb, up_dac_r1_mode, up_dac_datafmt, 4'd0}; 8'h13: up_rdata <= {24'd0, up_dac_datarate}; 8'h14: up_rdata <= {31'd0, up_dac_frame}; 8'h15: up_rdata <= up_dac_clk_count_s; 8'h16: up_rdata <= dac_clk_ratio; 8'h17: up_rdata <= {31'd0, up_status_s}; 8'h1c: up_rdata <= {3'd0, up_drp_rwn, up_drp_addr, up_drp_wdata}; 8'h1d: up_rdata <= {14'd0, up_drp_locked, up_drp_status, up_drp_rdata_hold}; 8'h22: up_rdata <= {30'd0, up_status_ovf, up_status_unf}; 8'h28: up_rdata <= {24'd0, dac_usr_chanmax}; 8'h2e: up_rdata <= up_dac_gpio_in; 8'h2f: up_rdata <= up_dac_gpio_out; default: up_rdata <= 0; endcase end else begin up_rdata <= 32'd0; end end end // resets ad_rst i_mmcm_rst_reg (.preset(up_mmcm_preset), .clk(up_clk), .rst(mmcm_rst)); ad_rst i_core_rst_reg (.preset(up_core_preset), .clk(dac_clk), .rst(dac_rst)); // dac control & status up_xfer_cntrl #(.DATA_WIDTH(14)) i_xfer_cntrl ( .up_rstn (up_rstn), .up_clk (up_clk), .up_data_cntrl ({ up_dac_sync, up_dac_frame, up_dac_par_type, up_dac_par_enb, up_dac_r1_mode, up_dac_datafmt, up_dac_datarate}), .up_xfer_done (up_xfer_done_s), .d_rst (dac_rst), .d_clk (dac_clk), .d_data_cntrl ({ dac_sync_s, dac_frame_s, dac_par_type, dac_par_enb, dac_r1_mode, dac_datafmt, dac_datarate})); up_xfer_status #(.DATA_WIDTH(3)) i_xfer_status ( .up_rstn (up_rstn), .up_clk (up_clk), .up_data_status ({up_status_s, up_status_ovf_s, up_status_unf_s}), .d_rst (dac_rst), .d_clk (dac_clk), .d_data_status ({ dac_status, dac_status_ovf, dac_status_unf})); // generate frame and enable always @(posedge dac_clk) begin dac_sync_d <= dac_sync_s; dac_sync_2d <= dac_sync_d; if (dac_sync_count[5] == 1'b1) begin dac_sync_count <= dac_sync_count + 1'b1; end else if ((dac_sync_d == 1'b1) && (dac_sync_2d == 1'b0)) begin dac_sync_count <= 6'h20; end dac_sync <= dac_sync_count[5]; dac_frame_d <= dac_frame_s; dac_frame_2d <= dac_frame_d; dac_frame <= dac_frame_d & ~dac_frame_2d; end // dac clock monitor up_clock_mon i_clock_mon ( .up_rstn (up_rstn), .up_clk (up_clk), .up_d_count (up_dac_clk_count_s), .d_rst (dac_rst), .d_clk (dac_clk)); endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/up_delay_cntrl.v000066400000000000000000000152041457144405000274630ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module up_delay_cntrl ( // delay interface delay_clk, delay_rst, delay_locked, // io interface up_dld, up_dwdata, up_drdata, // processor interface up_rstn, up_clk, up_wreq, up_waddr, up_wdata, up_wack, up_rreq, up_raddr, up_rdata, up_rack); // parameters parameter DATA_WIDTH = 8; parameter BASE_ADDRESS = 6'h02; // delay interface input delay_clk; output delay_rst; input delay_locked; // io interface output [(DATA_WIDTH-1):0] up_dld; output [((DATA_WIDTH*5)-1):0] up_dwdata; input [((DATA_WIDTH*5)-1):0] up_drdata; // processor interface input up_rstn; input up_clk; input up_wreq; input [13:0] up_waddr; input [31:0] up_wdata; output up_wack; input up_rreq; input [13:0] up_raddr; output [31:0] up_rdata; output up_rack; // internal registers reg up_preset = 'd0; reg up_wack = 'd0; reg up_rack = 'd0; reg [31:0] up_rdata = 'd0; reg up_dlocked_m1 = 'd0; reg up_dlocked = 'd0; reg [(DATA_WIDTH-1):0] up_dld = 'd0; reg [((DATA_WIDTH*5)-1):0] up_dwdata = 'd0; // internal signals wire up_wreq_s; wire up_rreq_s; wire [ 4:0] up_rdata_s; wire [(DATA_WIDTH-1):0] up_drdata4_s; wire [(DATA_WIDTH-1):0] up_drdata3_s; wire [(DATA_WIDTH-1):0] up_drdata2_s; wire [(DATA_WIDTH-1):0] up_drdata1_s; wire [(DATA_WIDTH-1):0] up_drdata0_s; // variables genvar n; // decode block select assign up_wreq_s = (up_waddr[13:8] == BASE_ADDRESS) ? up_wreq : 1'b0; assign up_rreq_s = (up_raddr[13:8] == BASE_ADDRESS) ? up_rreq : 1'b0; assign up_rdata_s[4] = | up_drdata4_s; assign up_rdata_s[3] = | up_drdata3_s; assign up_rdata_s[2] = | up_drdata2_s; assign up_rdata_s[1] = | up_drdata1_s; assign up_rdata_s[0] = | up_drdata0_s; generate for (n = 0; n < DATA_WIDTH; n = n + 1) begin: g_drd assign up_drdata4_s[n] = (up_raddr[7:0] == n) ? up_drdata[((n*5)+4)] : 1'd0; assign up_drdata3_s[n] = (up_raddr[7:0] == n) ? up_drdata[((n*5)+3)] : 1'd0; assign up_drdata2_s[n] = (up_raddr[7:0] == n) ? up_drdata[((n*5)+2)] : 1'd0; assign up_drdata1_s[n] = (up_raddr[7:0] == n) ? up_drdata[((n*5)+1)] : 1'd0; assign up_drdata0_s[n] = (up_raddr[7:0] == n) ? up_drdata[((n*5)+0)] : 1'd0; end endgenerate // processor interface always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_preset <= 1'd1; up_wack <= 'd0; up_rack <= 'd0; up_rdata <= 'd0; up_dlocked_m1 <= 'd0; up_dlocked <= 'd0; end else begin up_preset <= 1'd0; up_wack <= up_wreq_s; up_rack <= up_rreq_s; if (up_rreq_s == 1'b1) begin if (up_dlocked == 1'b0) begin up_rdata <= 32'hffffffff; end else begin up_rdata <= {27'd0, up_rdata_s}; end end else begin up_rdata <= 32'd0; end up_dlocked_m1 <= delay_locked; up_dlocked <= up_dlocked_m1; end end // write does not hold- read back what goes into effect. generate for (n = 0; n < DATA_WIDTH; n = n + 1) begin: g_dwr always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_dld[n] <= 'd0; up_dwdata[((n*5)+4):(n*5)] <= 'd0; end else begin if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == n)) begin up_dld[n] <= 1'd1; up_dwdata[((n*5)+4):(n*5)] <= up_wdata[4:0]; end else begin up_dld[n] <= 1'd0; up_dwdata[((n*5)+4):(n*5)] <= up_dwdata[((n*5)+4):(n*5)]; end end end end endgenerate // resets ad_rst i_delay_rst_reg ( .preset (up_preset), .clk (delay_clk), .rst (delay_rst)); endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/up_drp_cntrl.v000066400000000000000000000141751457144405000271600ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module up_drp_cntrl ( // drp interface drp_clk, drp_rst, drp_sel, drp_wr, drp_addr, drp_wdata, drp_rdata, drp_ready, drp_locked, // processor interface up_rstn, up_clk, up_drp_sel_t, up_drp_rwn, up_drp_addr, up_drp_wdata, up_drp_rdata, up_drp_status, up_drp_locked); // drp interface input drp_clk; input drp_rst; output drp_sel; output drp_wr; output [11:0] drp_addr; output [15:0] drp_wdata; input [15:0] drp_rdata; input drp_ready; input drp_locked; // processor interface input up_rstn; input up_clk; input up_drp_sel_t; input up_drp_rwn; input [11:0] up_drp_addr; input [15:0] up_drp_wdata; output [15:0] up_drp_rdata; output up_drp_status; output up_drp_locked; // internal registers reg drp_sel_t_m1 = 'd0; reg drp_sel_t_m2 = 'd0; reg drp_sel_t_m3 = 'd0; reg drp_sel = 'd0; reg drp_wr = 'd0; reg [11:0] drp_addr = 'd0; reg [15:0] drp_wdata = 'd0; reg drp_ready_int = 'd0; reg [15:0] drp_rdata_int = 'd0; reg drp_ack_t = 'd0; reg up_drp_locked_m1 = 'd0; reg up_drp_locked = 'd0; reg up_drp_ack_t_m1 = 'd0; reg up_drp_ack_t_m2 = 'd0; reg up_drp_ack_t_m3 = 'd0; reg up_drp_sel_t_d = 'd0; reg up_drp_status = 'd0; reg [15:0] up_drp_rdata = 'd0; // internal signals wire drp_sel_t_s; wire up_drp_ack_t_s; wire up_drp_sel_t_s; // drp control and status assign drp_sel_t_s = drp_sel_t_m2 ^ drp_sel_t_m3; always @(posedge drp_clk) begin if (drp_rst == 1'b1) begin drp_sel_t_m1 <= 'd0; drp_sel_t_m2 <= 'd0; drp_sel_t_m3 <= 'd0; end else begin drp_sel_t_m1 <= up_drp_sel_t; drp_sel_t_m2 <= drp_sel_t_m1; drp_sel_t_m3 <= drp_sel_t_m2; end end always @(posedge drp_clk) begin if (drp_sel_t_s == 1'b1) begin drp_sel <= 1'b1; drp_wr <= ~up_drp_rwn; drp_addr <= up_drp_addr; drp_wdata <= up_drp_wdata; end else begin drp_sel <= 1'b0; drp_wr <= 1'b0; drp_addr <= 12'd0; drp_wdata <= 16'd0; end end always @(posedge drp_clk) begin drp_ready_int <= drp_ready; if ((drp_ready_int == 1'b0) && (drp_ready == 1'b1)) begin drp_rdata_int <= drp_rdata; drp_ack_t <= ~drp_ack_t; end end // drp status transfer assign up_drp_ack_t_s = up_drp_ack_t_m3 ^ up_drp_ack_t_m2; assign up_drp_sel_t_s = up_drp_sel_t ^ up_drp_sel_t_d; always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 1'b0) begin up_drp_locked_m1 <= 'd0; up_drp_locked <= 'd0; up_drp_ack_t_m1 <= 'd0; up_drp_ack_t_m2 <= 'd0; up_drp_ack_t_m3 <= 'd0; up_drp_sel_t_d <= 'd0; up_drp_status <= 'd0; up_drp_rdata <= 'd0; end else begin up_drp_locked_m1 <= drp_locked; up_drp_locked <= up_drp_locked_m1; up_drp_ack_t_m1 <= drp_ack_t; up_drp_ack_t_m2 <= up_drp_ack_t_m1; up_drp_ack_t_m3 <= up_drp_ack_t_m2; up_drp_sel_t_d <= up_drp_sel_t; if (up_drp_ack_t_s == 1'b1) begin up_drp_status <= 1'b0; end else if (up_drp_sel_t_s == 1'b1) begin up_drp_status <= 1'b1; end if (up_drp_ack_t_s == 1'b1) begin up_drp_rdata <= drp_rdata_int; end end end endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/up_gt.v000066400000000000000000000170711457144405000256010ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module up_gt ( // drp interface up_drp_qpll0_sel, up_drp_qpll0_wr, up_drp_qpll0_addr, up_drp_qpll0_wdata, up_drp_qpll0_rdata, up_drp_qpll0_ready, up_drp_qpll1_sel, up_drp_qpll1_wr, up_drp_qpll1_addr, up_drp_qpll1_wdata, up_drp_qpll1_rdata, up_drp_qpll1_ready, // bus interface up_rstn, up_clk, up_wreq, up_waddr, up_wdata, up_wack, up_rreq, up_raddr, up_rdata, up_rack); // parameters parameter integer GTH_OR_GTX_N = 0; // drp interface output up_drp_qpll0_sel; output up_drp_qpll0_wr; output [11:0] up_drp_qpll0_addr; output [15:0] up_drp_qpll0_wdata; input [15:0] up_drp_qpll0_rdata; input up_drp_qpll0_ready; output up_drp_qpll1_sel; output up_drp_qpll1_wr; output [11:0] up_drp_qpll1_addr; output [15:0] up_drp_qpll1_wdata; input [15:0] up_drp_qpll1_rdata; input up_drp_qpll1_ready; // bus interface input up_rstn; input up_clk; input up_wreq; input [13:0] up_waddr; input [31:0] up_wdata; output up_wack; input up_rreq; input [13:0] up_raddr; output [31:0] up_rdata; output up_rack; // internal registers reg up_wack = 'd0; reg up_drp_qpll0_sel = 'd0; reg up_drp_qpll0_wr = 'd0; reg up_drp_qpll0_status = 'd0; reg up_drp_qpll0_rwn = 'd0; reg [11:0] up_drp_qpll0_addr = 'd0; reg [15:0] up_drp_qpll0_wdata = 'd0; reg [15:0] up_drp_qpll0_rdata_hold = 'd0; reg up_drp_qpll1_sel = 'd0; reg up_drp_qpll1_wr = 'd0; reg up_drp_qpll1_status = 'd0; reg up_drp_qpll1_rwn = 'd0; reg [11:0] up_drp_qpll1_addr = 'd0; reg [15:0] up_drp_qpll1_wdata = 'd0; reg [15:0] up_drp_qpll1_rdata_hold = 'd0; reg up_rack = 'd0; reg [31:0] up_rdata = 'd0; // internal signals wire up_wreq_s; wire up_rreq_s; // decode block select assign up_wreq_s = (up_waddr[13:8] == 6'h10) ? up_wreq : 1'b0; assign up_rreq_s = (up_raddr[13:8] == 6'h10) ? up_rreq : 1'b0; // processor write interface always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_wack <= 'd0; up_drp_qpll0_sel <= 'd0; up_drp_qpll0_wr <= 'd0; up_drp_qpll0_status <= 'd0; up_drp_qpll0_rwn <= 'd0; up_drp_qpll0_addr <= 'd0; up_drp_qpll0_wdata <= 'd0; up_drp_qpll0_rdata_hold <= 'd0; up_drp_qpll1_sel <= 'd0; up_drp_qpll1_wr <= 'd0; up_drp_qpll1_status <= 'd0; up_drp_qpll1_rwn <= 'd0; up_drp_qpll1_addr <= 'd0; up_drp_qpll1_wdata <= 'd0; up_drp_qpll1_rdata_hold <= 'd0; end else begin up_wack <= up_wreq_s; if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h14)) begin up_drp_qpll0_sel <= 1'b1; up_drp_qpll0_wr <= ~up_wdata[28]; end else begin up_drp_qpll0_sel <= 1'b0; up_drp_qpll0_wr <= 1'b0; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h14)) begin up_drp_qpll0_status <= 1'b1; end else if (up_drp_qpll0_ready == 1'b1) begin up_drp_qpll0_status <= 1'b0; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h14)) begin up_drp_qpll0_rwn <= up_wdata[28]; up_drp_qpll0_addr <= up_wdata[27:16]; up_drp_qpll0_wdata <= up_wdata[15:0]; end if (up_drp_qpll0_ready == 1'b1) begin up_drp_qpll0_rdata_hold <= up_drp_qpll0_rdata; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h24)) begin up_drp_qpll1_sel <= 1'b1; up_drp_qpll1_wr <= ~up_wdata[28]; end else begin up_drp_qpll1_sel <= 1'b0; up_drp_qpll1_wr <= 1'b0; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h24)) begin up_drp_qpll1_status <= 1'b1; end else if (up_drp_qpll1_ready == 1'b1) begin up_drp_qpll1_status <= 1'b0; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h24)) begin up_drp_qpll1_rwn <= up_wdata[28]; up_drp_qpll1_addr <= up_wdata[27:16]; up_drp_qpll1_wdata <= up_wdata[15:0]; end if (up_drp_qpll1_ready == 1'b1) begin up_drp_qpll1_rdata_hold <= up_drp_qpll1_rdata; end end end // processor read interface always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_rack <= 'd0; up_rdata <= 'd0; end else begin up_rack <= up_rreq_s; if (up_rreq_s == 1'b1) begin case (up_raddr[7:0]) 8'h14: up_rdata <= {3'd0, up_drp_qpll0_rwn, up_drp_qpll0_addr, up_drp_qpll0_wdata}; 8'h15: up_rdata <= {15'd0, up_drp_qpll0_status, up_drp_qpll0_rdata}; 8'h24: up_rdata <= {3'd0, up_drp_qpll1_rwn, up_drp_qpll1_addr, up_drp_qpll1_wdata}; 8'h25: up_rdata <= {15'd0, up_drp_qpll1_status, up_drp_qpll1_rdata}; 8'h3a: up_rdata <= GTH_OR_GTX_N; default: up_rdata <= 0; endcase end else begin up_rdata <= 32'd0; end end end endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/up_gt_channel.v000066400000000000000000000660361457144405000272760ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module up_gt_channel ( // gt interface lpm_dfe_n, cpll_pd, // receive interface rx_pll_rst, rx_sys_clk_sel, rx_out_clk_sel, rx_clk, rx_gt_rst, rx_rst, rx_rst_m, rx_ip_rst, rx_sysref, rx_ip_sysref, rx_ip_sync, rx_sync, rx_rst_done, rx_rst_done_m, rx_pll_locked, rx_pll_locked_m, rx_user_ready, rx_ip_rst_done, // transmit interface tx_pll_rst, tx_sys_clk_sel, tx_out_clk_sel, tx_clk, tx_gt_rst, tx_rst, tx_rst_m, tx_ip_rst, tx_sysref, tx_ip_sysref, tx_sync, tx_ip_sync, tx_rst_done, tx_rst_done_m, tx_pll_locked, tx_pll_locked_m, tx_user_ready, tx_ip_rst_done, // drp interface up_drp_sel, up_drp_wr, up_drp_addr, up_drp_wdata, up_drp_rdata, up_drp_ready, up_drp_rxrate, // es interface up_es_drp_sel, up_es_drp_wr, up_es_drp_addr, up_es_drp_wdata, up_es_drp_rdata, up_es_drp_ready, up_es_start, up_es_stop, up_es_init, up_es_prescale, up_es_voffset_range, up_es_voffset_step, up_es_voffset_max, up_es_voffset_min, up_es_hoffset_max, up_es_hoffset_min, up_es_hoffset_step, up_es_start_addr, up_es_sdata0, up_es_sdata1, up_es_sdata2, up_es_sdata3, up_es_sdata4, up_es_qdata0, up_es_qdata1, up_es_qdata2, up_es_qdata3, up_es_qdata4, up_es_dma_err, up_es_status, // bus interface up_rstn, up_clk, up_wreq, up_waddr, up_wdata, up_wack, up_rreq, up_raddr, up_rdata, up_rack); // parameters localparam [31:0] VERSION = 32'h00070161; parameter integer ID = 0; // gt interface output lpm_dfe_n; output cpll_pd; // receive interface output rx_pll_rst; output [ 1:0] rx_sys_clk_sel; output [ 2:0] rx_out_clk_sel; input rx_clk; output rx_gt_rst; output rx_rst; input rx_rst_m; output rx_ip_rst; input rx_sysref; output rx_ip_sysref; input rx_ip_sync; output rx_sync; input rx_rst_done; input rx_rst_done_m; input rx_pll_locked; input rx_pll_locked_m; output rx_user_ready; output rx_ip_rst_done; // transmit interface output tx_pll_rst; output [ 1:0] tx_sys_clk_sel; output [ 2:0] tx_out_clk_sel; input tx_clk; output tx_gt_rst; output tx_rst; input tx_rst_m; output tx_ip_rst; input tx_sysref; output tx_ip_sysref; input tx_sync; output tx_ip_sync; input tx_rst_done; input tx_rst_done_m; input tx_pll_locked; input tx_pll_locked_m; output tx_user_ready; output tx_ip_rst_done; // drp interface output up_drp_sel; output up_drp_wr; output [11:0] up_drp_addr; output [15:0] up_drp_wdata; input [15:0] up_drp_rdata; input up_drp_ready; input [ 7:0] up_drp_rxrate; // es interface input up_es_drp_sel; input up_es_drp_wr; input [11:0] up_es_drp_addr; input [15:0] up_es_drp_wdata; output [15:0] up_es_drp_rdata; output up_es_drp_ready; output up_es_start; output up_es_stop; output up_es_init; output [ 4:0] up_es_prescale; output [ 1:0] up_es_voffset_range; output [ 7:0] up_es_voffset_step; output [ 7:0] up_es_voffset_max; output [ 7:0] up_es_voffset_min; output [11:0] up_es_hoffset_max; output [11:0] up_es_hoffset_min; output [11:0] up_es_hoffset_step; output [31:0] up_es_start_addr; output [15:0] up_es_sdata0; output [15:0] up_es_sdata1; output [15:0] up_es_sdata2; output [15:0] up_es_sdata3; output [15:0] up_es_sdata4; output [15:0] up_es_qdata0; output [15:0] up_es_qdata1; output [15:0] up_es_qdata2; output [15:0] up_es_qdata3; output [15:0] up_es_qdata4; input up_es_dma_err; input up_es_status; // bus interface input up_rstn; input up_clk; input up_wreq; input [13:0] up_waddr; input [31:0] up_wdata; output up_wack; input up_rreq; input [13:0] up_raddr; output [31:0] up_rdata; output up_rack; // internal registers reg up_rx_pll_preset = 'd1; reg up_rx_gt_preset = 'd1; reg up_rx_preset = 'd1; reg up_tx_pll_preset = 'd1; reg up_tx_gt_preset = 'd1; reg up_tx_preset = 'd1; reg up_wack = 'd0; reg up_lpm_dfe_n = 'd0; reg up_cpll_pd = 'd0; reg up_drp_resetn = 'd0; reg up_rx_gt_resetn = 'd0; reg up_rx_resetn = 'd0; reg [ 1:0] up_rx_sys_clk_sel = 'd0; reg [ 2:0] up_rx_out_clk_sel = 'd0; reg up_rx_sysref_sel = 'd0; reg up_rx_sysref = 'd0; reg up_rx_sync = 'd0; reg up_rx_user_ready = 'd0; reg up_rx_pll_resetn = 'd0; reg up_tx_gt_resetn = 'd0; reg up_tx_resetn = 'd0; reg [ 1:0] up_tx_sys_clk_sel = 'd0; reg [ 2:0] up_tx_out_clk_sel = 'd0; reg up_tx_sysref_sel = 'd0; reg up_tx_sysref = 'd0; reg up_tx_sync = 'd0; reg up_tx_user_ready = 'd0; reg up_tx_pll_resetn = 'd0; reg up_drp_sel_int = 'd0; reg up_drp_wr_int = 'd0; reg up_drp_status = 'd0; reg up_drp_rwn = 'd0; reg [11:0] up_drp_addr_int = 'd0; reg [15:0] up_drp_wdata_int = 'd0; reg [15:0] up_drp_rdata_hold = 'd0; reg up_es_init = 'd0; reg up_es_stop = 'd0; reg up_es_stop_hold = 'd0; reg up_es_start = 'd0; reg up_es_start_hold = 'd0; reg [ 4:0] up_es_prescale = 'd0; reg [ 1:0] up_es_voffset_range = 'd0; reg [ 7:0] up_es_voffset_step = 'd0; reg [ 7:0] up_es_voffset_max = 'd0; reg [ 7:0] up_es_voffset_min = 'd0; reg [11:0] up_es_hoffset_max = 'd0; reg [11:0] up_es_hoffset_min = 'd0; reg [11:0] up_es_hoffset_step = 'd0; reg [31:0] up_es_start_addr = 'd0; reg [15:0] up_es_sdata1 = 'd0; reg [15:0] up_es_sdata0 = 'd0; reg [15:0] up_es_sdata3 = 'd0; reg [15:0] up_es_sdata2 = 'd0; reg [15:0] up_es_sdata4 = 'd0; reg [15:0] up_es_qdata1 = 'd0; reg [15:0] up_es_qdata0 = 'd0; reg [15:0] up_es_qdata3 = 'd0; reg [15:0] up_es_qdata2 = 'd0; reg [15:0] up_es_qdata4 = 'd0; reg up_es_dma_err_hold = 'd0; reg up_rack = 'd0; reg [31:0] up_rdata = 'd0; reg up_rx_rst_done_m1 = 'd0; reg up_rx_rst_done = 'd0; reg up_rx_rst_done_m_m1 = 'd0; reg up_rx_rst_done_m = 'd0; reg up_rx_pll_locked_m1 = 'd0; reg up_rx_pll_locked = 'd0; reg up_rx_pll_locked_m_m1 = 'd0; reg up_rx_pll_locked_m = 'd0; reg up_rx_status_m1 = 'd0; reg up_rx_status = 'd0; reg up_tx_rst_done_m1 = 'd0; reg up_tx_rst_done = 'd0; reg up_tx_rst_done_m_m1 = 'd0; reg up_tx_rst_done_m = 'd0; reg up_tx_pll_locked_m1 = 'd0; reg up_tx_pll_locked = 'd0; reg up_tx_pll_locked_m_m1 = 'd0; reg up_tx_pll_locked_m = 'd0; reg up_tx_status_m1 = 'd0; reg up_tx_status = 'd0; reg up_drp_sel = 'd0; reg up_drp_wr = 'd0; reg [11:0] up_drp_addr = 'd0; reg [15:0] up_drp_wdata = 'd0; reg [15:0] up_es_drp_rdata = 'd0; reg up_es_drp_ready = 'd0; reg [15:0] up_drp_rdata_int = 'd0; reg up_drp_ready_int = 'd0; reg rx_sysref_sel_m1 = 'd0; reg rx_sysref_sel = 'd0; reg rx_up_sysref_m1 = 'd0; reg rx_up_sysref = 'd0; reg rx_ip_sysref = 'd0; reg rx_up_sync_m1 = 'd0; reg rx_up_sync = 'd0; reg rx_sync = 'd0; reg tx_sysref_sel_m1 = 'd0; reg tx_sysref_sel = 'd0; reg tx_up_sysref_m1 = 'd0; reg tx_up_sysref = 'd0; reg tx_ip_sysref = 'd0; reg tx_up_sync_m1 = 'd0; reg tx_up_sync = 'd0; reg tx_ip_sync = 'd0; reg [31:0] up_scratch = 'd0; // internal signals wire up_wreq_s; wire up_rreq_s; // decode block select assign up_wreq_s = (up_waddr[13:8] == ID) ? up_wreq : 1'b0; assign up_rreq_s = (up_raddr[13:8] == ID) ? up_rreq : 1'b0; // user ready & ip reset done assign lpm_dfe_n = up_lpm_dfe_n; assign cpll_pd = up_cpll_pd; assign rx_sys_clk_sel = up_rx_sys_clk_sel; assign rx_out_clk_sel = up_rx_out_clk_sel; assign rx_user_ready = up_rx_user_ready; assign rx_ip_rst_done = up_rx_rst_done_m; assign tx_sys_clk_sel = up_tx_sys_clk_sel; assign tx_out_clk_sel = up_tx_out_clk_sel; assign tx_user_ready = up_tx_user_ready; assign tx_ip_rst_done = up_tx_rst_done_m; // resets always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_rx_pll_preset <= 1'b1; up_rx_gt_preset <= 1'b1; up_rx_preset <= 1'b1; up_tx_pll_preset <= 1'b1; up_tx_gt_preset <= 1'b1; up_tx_preset <= 1'b1; end else begin up_rx_pll_preset <= ~up_rx_pll_resetn; up_rx_gt_preset <= ~(up_rx_pll_resetn & up_rx_pll_locked_m & up_rx_gt_resetn); up_rx_preset <= ~(up_rx_pll_resetn & up_rx_pll_locked_m & up_rx_rst_done_m & up_rx_gt_resetn & up_rx_resetn); up_tx_pll_preset <= ~up_tx_pll_resetn; up_tx_gt_preset <= ~(up_tx_pll_resetn & up_tx_pll_locked_m & up_tx_gt_resetn); up_tx_preset <= ~(up_tx_pll_resetn & up_tx_pll_locked_m & up_tx_rst_done_m & up_tx_gt_resetn & up_tx_resetn); end end // processor write interface always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_wack <= 'd0; up_scratch <= 'd0; up_lpm_dfe_n <= 'd0; up_cpll_pd <= 'd1; up_drp_resetn <= 'd0; up_rx_gt_resetn <= 'd0; up_rx_resetn <= 'd0; up_rx_sys_clk_sel <= 2'b11; up_rx_out_clk_sel <= 3'b010; up_rx_sysref_sel <= 'd0; up_rx_sysref <= 'd0; up_rx_sync <= 'd0; up_rx_user_ready <= 'd0; up_rx_pll_resetn <= 'd0; up_tx_gt_resetn <= 'd0; up_tx_resetn <= 'd0; up_tx_sys_clk_sel <= 2'b11; up_tx_out_clk_sel <= 3'b010; up_tx_sysref_sel <= 'd0; up_tx_sysref <= 'd0; up_tx_sync <= 'd0; up_tx_user_ready <= 'd0; up_tx_pll_resetn <= 'd0; up_drp_sel_int <= 'd0; up_drp_wr_int <= 'd0; up_drp_status <= 'd0; up_drp_rwn <= 'd0; up_drp_addr_int <= 'd0; up_drp_wdata_int <= 'd0; up_drp_rdata_hold <= 'd0; up_es_init <= 'd0; up_es_stop <= 'd0; up_es_stop_hold <= 'd0; up_es_start <= 'd0; up_es_start_hold <= 'd0; up_es_prescale <= 'd0; up_es_voffset_range <= 'd0; up_es_voffset_step <= 'd0; up_es_voffset_max <= 'd0; up_es_voffset_min <= 'd0; up_es_hoffset_max <= 'd0; up_es_hoffset_min <= 'd0; up_es_hoffset_step <= 'd0; up_es_start_addr <= 'd0; up_es_sdata1 <= 'd0; up_es_sdata0 <= 'd0; up_es_sdata3 <= 'd0; up_es_sdata2 <= 'd0; up_es_sdata4 <= 'd0; up_es_qdata1 <= 'd0; up_es_qdata0 <= 'd0; up_es_qdata3 <= 'd0; up_es_qdata2 <= 'd0; up_es_qdata4 <= 'd0; up_es_dma_err_hold <= 'd0; end else begin up_wack <= up_wreq_s; if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h02)) begin up_scratch <= up_wdata; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h04)) begin up_lpm_dfe_n <= up_wdata[1]; up_cpll_pd <= up_wdata[0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h05)) begin up_drp_resetn <= up_wdata[1]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h08)) begin up_rx_gt_resetn <= up_wdata[0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h09)) begin up_rx_resetn <= up_wdata[0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h0a)) begin up_rx_sys_clk_sel <= up_wdata[5:4]; up_rx_out_clk_sel <= up_wdata[2:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h0b)) begin up_rx_sysref_sel <= up_wdata[1]; up_rx_sysref <= up_wdata[0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h0c)) begin up_rx_sync <= up_wdata[0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h0e)) begin up_rx_user_ready <= up_wdata[0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h0f)) begin up_rx_pll_resetn <= up_wdata[0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h18)) begin up_tx_gt_resetn <= up_wdata[0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h19)) begin up_tx_resetn <= up_wdata[0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h1a)) begin up_tx_sys_clk_sel <= up_wdata[5:4]; up_tx_out_clk_sel <= up_wdata[2:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h1b)) begin up_tx_sysref_sel <= up_wdata[1]; up_tx_sysref <= up_wdata[0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h1c)) begin up_tx_sync <= up_wdata[0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h1e)) begin up_tx_user_ready <= up_wdata[0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h1f)) begin up_tx_pll_resetn <= up_wdata[0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h24)) begin up_drp_sel_int <= 1'b1; up_drp_wr_int <= ~up_wdata[28]; end else begin up_drp_sel_int <= 1'b0; up_drp_wr_int <= 1'b0; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h24)) begin up_drp_status <= 1'b1; end else if (up_drp_ready == 1'b1) begin up_drp_status <= 1'b0; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h24)) begin up_drp_rwn <= up_wdata[28]; up_drp_addr_int <= up_wdata[27:16]; up_drp_wdata_int <= up_wdata[15:0]; end if (up_drp_ready_int == 1'b1) begin up_drp_rdata_hold <= up_drp_rdata_int; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h28)) begin up_es_init <= up_wdata[2]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h28)) begin up_es_stop <= up_wdata[1]; up_es_stop_hold <= up_wdata[1]; end else begin up_es_stop <= 1'd0; up_es_stop_hold <= up_es_stop_hold; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h28)) begin up_es_start <= up_wdata[0]; up_es_start_hold <= up_wdata[0]; end else begin up_es_start <= 1'd0; up_es_start_hold <= up_es_start_hold; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h29)) begin up_es_prescale <= up_wdata[4:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h2a)) begin up_es_voffset_range <= up_wdata[25:24]; up_es_voffset_step <= up_wdata[23:16]; up_es_voffset_max <= up_wdata[15:8]; up_es_voffset_min <= up_wdata[7:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h2b)) begin up_es_hoffset_max <= up_wdata[27:16]; up_es_hoffset_min <= up_wdata[11:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h2c)) begin up_es_hoffset_step <= up_wdata[11:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h2d)) begin up_es_start_addr <= up_wdata; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h2e)) begin up_es_sdata1 <= up_wdata[31:16]; up_es_sdata0 <= up_wdata[15:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h2f)) begin up_es_sdata3 <= up_wdata[31:16]; up_es_sdata2 <= up_wdata[15:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h30)) begin up_es_sdata4 <= up_wdata[15:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h31)) begin up_es_qdata1 <= up_wdata[31:16]; up_es_qdata0 <= up_wdata[15:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h32)) begin up_es_qdata3 <= up_wdata[31:16]; up_es_qdata2 <= up_wdata[15:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h33)) begin up_es_qdata4 <= up_wdata[15:0]; end if (up_es_dma_err == 1'b1) begin up_es_dma_err_hold <= 1'b1; end else if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h38)) begin up_es_dma_err_hold <= up_es_dma_err_hold & ~up_wdata[1]; end end end // processor read interface always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_rack <= 'd0; up_rdata <= 'd0; end else begin up_rack <= up_rreq_s; if (up_rreq_s == 1'b1) begin case (up_raddr[7:0]) 8'h00: up_rdata <= VERSION; 8'h01: up_rdata <= ID; 8'h02: up_rdata <= up_scratch; 8'h04: up_rdata <= {30'd0, up_lpm_dfe_n, up_cpll_pd}; 8'h05: up_rdata <= {30'd0, up_drp_resetn, 1'd0}; 8'h08: up_rdata <= {31'd0, up_rx_gt_resetn}; 8'h09: up_rdata <= {31'd0, up_rx_resetn}; 8'h0a: up_rdata <= {24'd0, 2'd0, up_rx_sys_clk_sel, 1'd0, up_rx_out_clk_sel}; 8'h0b: up_rdata <= {30'd0, up_rx_sysref_sel, up_rx_sysref}; 8'h0c: up_rdata <= {31'd0, up_rx_sync}; 8'h0d: up_rdata <= {15'd0, up_rx_status, 6'h3f, up_rx_rst_done_m, up_rx_rst_done, 6'h3f, up_rx_pll_locked_m, up_rx_pll_locked}; 8'h0e: up_rdata <= {31'd0, up_rx_user_ready}; 8'h0f: up_rdata <= {31'd0, up_rx_pll_resetn}; 8'h18: up_rdata <= {31'd0, up_tx_gt_resetn}; 8'h19: up_rdata <= {31'd0, up_tx_resetn}; 8'h1a: up_rdata <= {24'd0, 2'd0, up_tx_sys_clk_sel, 1'd0, up_tx_out_clk_sel}; 8'h1b: up_rdata <= {30'd0, up_tx_sysref_sel, up_tx_sysref}; 8'h1c: up_rdata <= {31'd0, up_tx_sync}; 8'h1d: up_rdata <= {15'd0, up_tx_status, 6'h3f, up_tx_rst_done_m, up_tx_rst_done, 6'h3f, up_tx_pll_locked_m, up_tx_pll_locked}; 8'h1e: up_rdata <= {31'd0, up_tx_user_ready}; 8'h1f: up_rdata <= {31'd0, up_tx_pll_resetn}; 8'h24: up_rdata <= {3'd0, up_drp_rwn, up_drp_addr_int, up_drp_wdata_int}; 8'h25: up_rdata <= {15'd0, up_drp_status, up_drp_rdata_int}; 8'h28: up_rdata <= {29'd0, up_es_init, up_es_stop_hold, up_es_start_hold}; 8'h29: up_rdata <= {27'd0, up_es_prescale}; 8'h2a: up_rdata <= {6'd0, up_es_voffset_range, up_es_voffset_step, up_es_voffset_max, up_es_voffset_min}; 8'h2b: up_rdata <= {4'd0, up_es_hoffset_max, 4'd0, up_es_hoffset_min}; 8'h2c: up_rdata <= {20'd0, up_es_hoffset_step}; 8'h2d: up_rdata <= up_es_start_addr; 8'h2e: up_rdata <= {up_es_sdata1, up_es_sdata0}; 8'h2f: up_rdata <= {up_es_sdata3, up_es_sdata2}; 8'h30: up_rdata <= up_es_sdata4; 8'h31: up_rdata <= {up_es_qdata1, up_es_qdata0}; 8'h32: up_rdata <= {up_es_qdata3, up_es_qdata2}; 8'h33: up_rdata <= up_es_qdata4; 8'h38: up_rdata <= {30'd0, up_es_dma_err_hold, up_es_status}; 8'h39: up_rdata <= {24'd0, up_drp_rxrate}; default: up_rdata <= 0; endcase end else begin up_rdata <= 32'd0; end end end // resets ad_rst i_rx_pll_rst_reg (.preset(up_rx_pll_preset), .clk(up_clk), .rst(rx_pll_rst)); ad_rst i_rx_gt_rst_reg (.preset(up_rx_gt_preset), .clk(up_clk), .rst(rx_gt_rst)); ad_rst i_rx_ip_rst_reg (.preset(up_rx_preset), .clk(up_clk), .rst(rx_ip_rst)); ad_rst i_rx_rst_reg (.preset(up_rx_preset), .clk(rx_clk), .rst(rx_rst)); ad_rst i_tx_pll_rst_reg (.preset(up_tx_pll_preset), .clk(up_clk), .rst(tx_pll_rst)); ad_rst i_tx_gt_rst_reg (.preset(up_tx_gt_preset), .clk(up_clk), .rst(tx_gt_rst)); ad_rst i_tx_ip_rst_reg (.preset(up_tx_preset), .clk(up_clk), .rst(tx_ip_rst)); ad_rst i_tx_rst_reg (.preset(up_tx_preset), .clk(tx_clk), .rst(tx_rst)); // reset done & pll locked always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_rx_rst_done_m1 <= 'd0; up_rx_rst_done <= 'd0; up_rx_rst_done_m_m1 <= 'd0; up_rx_rst_done_m <= 'd0; up_rx_pll_locked_m1 <= 'd0; up_rx_pll_locked <= 'd0; up_rx_pll_locked_m_m1 <= 'd0; up_rx_pll_locked_m <= 'd0; up_rx_status_m1 <= 'd0; up_rx_status <= 'd0; up_tx_rst_done_m1 <= 'd0; up_tx_rst_done <= 'd0; up_tx_rst_done_m_m1 <= 'd0; up_tx_rst_done_m <= 'd0; up_tx_pll_locked_m1 <= 'd0; up_tx_pll_locked <= 'd0; up_tx_pll_locked_m_m1 <= 'd0; up_tx_pll_locked_m <= 'd0; up_tx_status_m1 <= 'd0; up_tx_status <= 'd0; end else begin up_rx_rst_done_m1 <= rx_rst_done; up_rx_rst_done <= up_rx_rst_done_m1; up_rx_rst_done_m_m1 <= rx_rst_done_m; up_rx_rst_done_m <= up_rx_rst_done_m_m1; up_rx_pll_locked_m1 <= rx_pll_locked; up_rx_pll_locked <= up_rx_pll_locked_m1; up_rx_pll_locked_m_m1 <= rx_pll_locked_m; up_rx_pll_locked_m <= up_rx_pll_locked_m_m1; up_rx_status_m1 <= rx_sync; up_rx_status <= up_rx_status_m1; up_tx_rst_done_m1 <= tx_rst_done; up_tx_rst_done <= up_tx_rst_done_m1; up_tx_rst_done_m_m1 <= tx_rst_done_m; up_tx_rst_done_m <= up_tx_rst_done_m_m1; up_tx_pll_locked_m1 <= tx_pll_locked; up_tx_pll_locked <= up_tx_pll_locked_m1; up_tx_pll_locked_m_m1 <= tx_pll_locked_m; up_tx_pll_locked_m <= up_tx_pll_locked_m_m1; up_tx_status_m1 <= tx_ip_sync; up_tx_status <= up_tx_status_m1; end end // drp mux always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 1'b0) begin up_drp_sel <= 'd0; up_drp_wr <= 'd0; up_drp_addr <= 'd0; up_drp_wdata <= 'd0; up_es_drp_rdata <= 'd0; up_es_drp_ready <= 'd0; up_drp_rdata_int <= 'd0; up_drp_ready_int <= 'd0; end else begin if (up_es_status == 1'b1) begin up_drp_sel <= up_es_drp_sel; up_drp_wr <= up_es_drp_wr; up_drp_addr <= up_es_drp_addr; up_drp_wdata <= up_es_drp_wdata; up_es_drp_rdata <= up_drp_rdata; up_es_drp_ready <= up_drp_ready; up_drp_rdata_int <= 16'd0; up_drp_ready_int <= 1'd0; end else begin up_drp_sel <= up_drp_sel_int; up_drp_wr <= up_drp_wr_int; up_drp_addr <= up_drp_addr_int; up_drp_wdata <= up_drp_wdata_int; up_es_drp_rdata <= 16'd0; up_es_drp_ready <= 1'd0; up_drp_rdata_int <= up_drp_rdata; up_drp_ready_int <= up_drp_ready; end end end // rx sysref & sync always @(posedge rx_clk or posedge rx_rst_m) begin if (rx_rst_m == 1'b1) begin rx_sysref_sel_m1 <= 'd0; rx_sysref_sel <= 'd0; rx_up_sysref_m1 <= 'd0; rx_up_sysref <= 'd0; rx_ip_sysref <= 'd0; rx_up_sync_m1 <= 'd0; rx_up_sync <= 'd0; rx_sync <= 'd0; end else begin rx_sysref_sel_m1 <= up_rx_sysref_sel; rx_sysref_sel <= rx_sysref_sel_m1; rx_up_sysref_m1 <= up_rx_sysref; rx_up_sysref <= rx_up_sysref_m1; if (rx_sysref_sel_m1 == 1'b1) begin rx_ip_sysref <= rx_sysref; end else begin rx_ip_sysref <= rx_up_sysref; end rx_up_sync_m1 <= up_rx_sync; rx_up_sync <= rx_up_sync_m1; rx_sync <= rx_up_sync & rx_ip_sync; end end // tx sysref & sync always @(posedge tx_clk or posedge tx_rst_m) begin if (tx_rst_m == 1'b1) begin tx_sysref_sel_m1 <= 'd0; tx_sysref_sel <= 'd0; tx_up_sysref_m1 <= 'd0; tx_up_sysref <= 'd0; tx_ip_sysref <= 'd0; tx_up_sync_m1 <= 'd0; tx_up_sync <= 'd0; tx_ip_sync <= 'd0; end else begin tx_sysref_sel_m1 <= up_tx_sysref_sel; tx_sysref_sel <= tx_sysref_sel_m1; tx_up_sysref_m1 <= up_tx_sysref; tx_up_sysref <= tx_up_sysref_m1; if (tx_sysref_sel_m1 == 1'b1) begin tx_ip_sysref <= tx_sysref; end else begin tx_ip_sysref <= tx_up_sysref; end tx_up_sync_m1 <= up_tx_sync; tx_up_sync <= tx_up_sync_m1; tx_ip_sync <= tx_up_sync & tx_sync; end end endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/up_hdmi_rx.v000066400000000000000000000245661457144405000266300ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; Loos OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE PoosIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** module up_hdmi_rx ( // hdmi interface hdmi_clk, hdmi_rst, hdmi_edge_sel, hdmi_bgr, hdmi_packed, hdmi_csc_bypass, hdmi_vs_count, hdmi_hs_count, hdmi_dma_ovf, hdmi_dma_unf, hdmi_tpm_oos, hdmi_vs_oos, hdmi_hs_oos, hdmi_vs_mismatch, hdmi_hs_mismatch, hdmi_vs, hdmi_hs, hdmi_clk_ratio, // bus interface up_rstn, up_clk, up_wreq, up_waddr, up_wdata, up_wack, up_rreq, up_raddr, up_rdata, up_rack); // parameters localparam PCORE_VERSION = 32'h00040063; parameter ID = 0; // hdmi interface input hdmi_clk; output hdmi_rst; output hdmi_edge_sel; output hdmi_bgr; output hdmi_packed; output hdmi_csc_bypass; output [15:0] hdmi_vs_count; output [15:0] hdmi_hs_count; input hdmi_dma_ovf; input hdmi_dma_unf; input hdmi_tpm_oos; input hdmi_vs_oos; input hdmi_hs_oos; input hdmi_vs_mismatch; input hdmi_hs_mismatch; input [15:0] hdmi_vs; input [15:0] hdmi_hs; input [31:0] hdmi_clk_ratio; // bus interface input up_rstn; input up_clk; input up_wreq; input [13:0] up_waddr; input [31:0] up_wdata; output up_wack; input up_rreq; input [13:0] up_raddr; output [31:0] up_rdata; output up_rack; // internal registers reg up_core_preset = 'd0; reg up_resetn = 'd0; reg up_wack = 'd0; reg [31:0] up_scratch = 'd0; reg up_edge_sel = 'd0; reg up_bgr = 'd0; reg up_packed = 'd0; reg up_csc_bypass = 'd0; reg up_dma_ovf = 'd0; reg up_dma_unf = 'd0; reg up_tpm_oos = 'd0; reg up_vs_oos = 'd0; reg up_hs_oos = 'd0; reg up_vs_mismatch = 'd0; reg up_hs_mismatch = 'd0; reg [15:0] up_vs_count = 'd0; reg [15:0] up_hs_count = 'd0; reg up_rack = 'd0; reg [31:0] up_rdata = 'd0; // internal signals wire up_wreq_s; wire up_rreq_s; wire up_dma_ovf_s; wire up_dma_unf_s; wire up_vs_oos_s; wire up_hs_oos_s; wire up_vs_mismatch_s; wire up_hs_mismatch_s; wire [15:0] up_vs_s; wire [15:0] up_hs_s; wire [31:0] up_clk_count_s; // decode block select assign up_wreq_s = (up_waddr[13:12] == 2'd0) ? up_wreq : 1'b0; assign up_rreq_s = (up_raddr[13:12] == 2'd0) ? up_rreq : 1'b0; // processor write interface always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_core_preset <= 1'd1; up_resetn <= 'd0; up_wack <= 'd0; up_scratch <= 'd0; up_edge_sel <= 'd0; up_bgr <= 'd0; up_packed <= 'd0; up_csc_bypass <= 'd0; up_dma_ovf <= 'd0; up_dma_unf <= 'd0; up_tpm_oos <= 'd0; up_vs_oos <= 'd0; up_hs_oos <= 'd0; up_vs_mismatch <= 'd0; up_hs_mismatch <= 'd0; up_vs_count <= 'd0; up_hs_count <= 'd0; end else begin up_wack <= up_wreq_s; up_core_preset <= ~up_resetn; if ((up_wreq_s == 1'b1) && (up_waddr[11:0] == 12'h002)) begin up_scratch <= up_wdata; end if ((up_wreq_s == 1'b1) && (up_waddr[11:0] == 12'h010)) begin up_resetn <= up_wdata[0]; end if ((up_wreq_s == 1'b1) && (up_waddr[11:0] == 12'h011)) begin up_edge_sel <= up_wdata[3]; up_bgr <= up_wdata[2]; up_packed <= up_wdata[1]; up_csc_bypass <= up_wdata[0]; end if (up_dma_ovf_s == 1'b1) begin up_dma_ovf <= 1'b1; end else if ((up_wreq_s == 1'b1) && (up_waddr[11:0] == 12'h018)) begin up_dma_ovf <= up_dma_ovf & ~up_wdata[1]; end if (up_dma_unf_s == 1'b1) begin up_dma_unf <= 1'b1; end else if ((up_wreq_s == 1'b1) && (up_waddr[11:0] == 12'h018)) begin up_dma_unf <= up_dma_unf & ~up_wdata[0]; end if (up_tpm_oos_s == 1'b1) begin up_tpm_oos <= 1'b1; end else if ((up_wreq_s == 1'b1) && (up_waddr[11:0] == 12'h019)) begin up_tpm_oos <= up_tpm_oos & ~up_wdata[1]; end if (up_vs_oos_s == 1'b1) begin up_vs_oos <= 1'b1; end else if ((up_wreq_s == 1'b1) && (up_waddr[11:0] == 12'h020)) begin up_vs_oos <= up_vs_oos & ~up_wdata[3]; end if (up_hs_oos_s == 1'b1) begin up_hs_oos <= 1'b1; end else if ((up_wreq_s == 1'b1) && (up_waddr[11:0] == 12'h020)) begin up_hs_oos <= up_hs_oos & ~up_wdata[2]; end if (up_vs_mismatch_s == 1'b1) begin up_vs_mismatch <= 1'b1; end else if ((up_wreq_s == 1'b1) && (up_waddr[11:0] == 12'h020)) begin up_vs_mismatch <= up_vs_mismatch & ~up_wdata[1]; end if (up_hs_mismatch_s == 1'b1) begin up_hs_mismatch <= 1'b1; end else if ((up_wreq_s == 1'b1) && (up_waddr[11:0] == 12'h020)) begin up_hs_mismatch <= up_hs_mismatch & ~up_wdata[0]; end if ((up_wreq_s == 1'b1) && (up_waddr[11:0] == 12'h100)) begin up_vs_count <= up_wdata[31:16]; up_hs_count <= up_wdata[15:0]; end end end // processor read interface always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 1'b0) begin up_rack <= 'd0; up_rdata <= 'd0; end else begin up_rack <= up_rreq_s; if(up_rreq_s == 1'b1) begin case (up_raddr[11:0]) 12'h000: up_rdata <= PCORE_VERSION; 12'h001: up_rdata <= ID; 12'h002: up_rdata <= up_scratch; 12'h010: up_rdata <= {31'h0, up_resetn}; 12'h011: up_rdata <= {28'h0, up_edge_sel, up_bgr, up_packed, up_csc_bypass}; 12'h015: up_rdata <= up_clk_count_s; 12'h016: up_rdata <= hdmi_clk_ratio; 12'h018: up_rdata <= {30'h0, up_dma_ovf, up_dma_unf}; 12'h019: up_rdata <= {30'h0, up_tpm_oos, 1'b0}; 12'h020: up_rdata <= {28'h0, up_vs_oos, up_hs_oos, up_vs_mismatch, up_hs_mismatch}; 12'h100: up_rdata <= {up_vs_count, up_hs_count}; 12'h101: up_rdata <= {up_vs_s, up_hs_s}; default: up_rdata <= 0; endcase end end end // resets ad_rst i_hdmi_rst_reg ( .preset (up_core_preset), .clk (hdmi_clk), .rst (hdmi_rst)); // hdmi control & status up_xfer_cntrl #(.DATA_WIDTH(36)) i_hdmi_xfer_cntrl ( .up_rstn (up_rstn), .up_clk (up_clk), .up_data_cntrl ({ up_edge_sel, up_bgr, up_packed, up_csc_bypass, up_vs_count, up_hs_count}), .up_xfer_done (), .d_rst (hdmi_rst), .d_clk (hdmi_clk), .d_data_cntrl ({ hdmi_edge_sel, hdmi_bgr, hdmi_packed, hdmi_csc_bypass, hdmi_vs_count, hdmi_hs_count})); up_xfer_status #(.DATA_WIDTH(39)) i_hdmi_xfer_status ( .up_rstn (up_rstn), .up_clk (up_clk), .up_data_status ({ up_dma_ovf_s, up_dma_unf_s, up_tpm_oos_s, up_vs_oos_s, up_hs_oos_s, up_vs_mismatch_s, up_hs_mismatch_s, up_vs_s, up_hs_s}), .d_rst (hdmi_rst), .d_clk (hdmi_clk), .d_data_status ({ hdmi_dma_ovf, hdmi_dma_unf, hdmi_tpm_oos, hdmi_vs_oos, hdmi_hs_oos, hdmi_vs_mismatch, hdmi_hs_mismatch, hdmi_vs, hdmi_hs})); up_clock_mon i_hdmi_clock_mon ( .up_rstn (up_rstn), .up_clk (up_clk), .up_d_count (up_clk_count_s), .d_rst (hdmi_rst), .d_clk (hdmi_clk)); endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/up_hdmi_tx.v000066400000000000000000000325401457144405000266210ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module up_hdmi_tx ( // hdmi interface hdmi_clk, hdmi_rst, hdmi_full_range, hdmi_csc_bypass, hdmi_ss_bypass, hdmi_srcsel, hdmi_const_rgb, hdmi_hl_active, hdmi_hl_width, hdmi_hs_width, hdmi_he_max, hdmi_he_min, hdmi_vf_active, hdmi_vf_width, hdmi_vs_width, hdmi_ve_max, hdmi_ve_min, hdmi_clip_max, hdmi_clip_min, hdmi_status, hdmi_tpm_oos, hdmi_clk_ratio, // vdma interface vdma_clk, vdma_rst, vdma_ovf, vdma_unf, vdma_tpm_oos, // bus interface up_rstn, up_clk, up_wreq, up_waddr, up_wdata, up_wack, up_rreq, up_raddr, up_rdata, up_rack); // parameters localparam PCORE_VERSION = 32'h00040063; parameter ID = 0; // hdmi interface input hdmi_clk; output hdmi_rst; output hdmi_full_range; output hdmi_csc_bypass; output hdmi_ss_bypass; output [ 1:0] hdmi_srcsel; output [23:0] hdmi_const_rgb; output [15:0] hdmi_hl_active; output [15:0] hdmi_hl_width; output [15:0] hdmi_hs_width; output [15:0] hdmi_he_max; output [15:0] hdmi_he_min; output [15:0] hdmi_vf_active; output [15:0] hdmi_vf_width; output [15:0] hdmi_vs_width; output [15:0] hdmi_ve_max; output [15:0] hdmi_ve_min; output [23:0] hdmi_clip_max; output [23:0] hdmi_clip_min; input hdmi_status; input hdmi_tpm_oos; input [31:0] hdmi_clk_ratio; // vdma interface input vdma_clk; output vdma_rst; input vdma_ovf; input vdma_unf; input vdma_tpm_oos; // bus interface input up_rstn; input up_clk; input up_wreq; input [13:0] up_waddr; input [31:0] up_wdata; output up_wack; input up_rreq; input [13:0] up_raddr; output [31:0] up_rdata; output up_rack; // internal registers reg up_core_preset = 'd0; reg up_wack = 'd0; reg [31:0] up_scratch = 'd0; reg up_resetn = 'd0; reg up_full_range = 'd0; reg up_csc_bypass = 'd0; reg up_ss_bypass = 'd0; reg [ 1:0] up_srcsel = 'd1; reg [23:0] up_const_rgb = 'd0; reg up_vdma_ovf = 'd0; reg up_vdma_unf = 'd0; reg up_hdmi_tpm_oos = 'd0; reg up_vdma_tpm_oos = 'd0; reg [15:0] up_hl_active = 'd0; reg [15:0] up_hl_width = 'd0; reg [15:0] up_hs_width = 'd0; reg [15:0] up_he_max = 'd0; reg [15:0] up_he_min = 'd0; reg [15:0] up_vf_active = 'd0; reg [15:0] up_vf_width = 'd0; reg [15:0] up_vs_width = 'd0; reg [15:0] up_ve_max = 'd0; reg [15:0] up_ve_min = 'd0; reg [23:0] up_clip_max = 'd0; reg [23:0] up_clip_min = 'd0; reg up_rack = 'd0; reg [31:0] up_rdata = 'd0; // internal signals wire up_wreq_s; wire up_rreq_s; wire up_hdmi_status_s; wire up_hdmi_tpm_oos_s; wire [31:0] up_hdmi_clk_count_s; wire up_vdma_ovf_s; wire up_vdma_unf_s; wire up_vdma_tpm_oos_s; // decode block select assign up_wreq_s = (up_waddr[13:12] == 2'd0) ? up_wreq : 1'b0; assign up_rreq_s = (up_raddr[13:12] == 2'd0) ? up_rreq : 1'b0; // processor write interface always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_core_preset <= 1'd1; up_wack <= 'd0; up_scratch <= 'd0; up_resetn <= 'd0; up_full_range <= 'd0; up_csc_bypass <= 'd0; up_ss_bypass <= 'd0; up_srcsel <= 'd1; up_const_rgb <= 'd0; up_vdma_ovf <= 'd0; up_vdma_unf <= 'd0; up_hdmi_tpm_oos <= 'd0; up_vdma_tpm_oos <= 'd0; up_hl_active <= 'd0; up_hl_width <= 'd0; up_hs_width <= 'd0; up_he_max <= 'd0; up_he_min <= 'd0; up_vf_active <= 'd0; up_vf_width <= 'd0; up_vs_width <= 'd0; up_ve_max <= 'd0; up_ve_min <= 'd0; up_clip_max <= 24'hf0ebf0; up_clip_min <= 24'h101010; end else begin up_core_preset <= ~up_resetn; up_wack <= up_wreq_s; if ((up_wreq_s == 1'b1) && (up_waddr[11:0] == 12'h002)) begin up_scratch <= up_wdata; end if ((up_wreq_s == 1'b1) && (up_waddr[11:0] == 12'h010)) begin up_resetn <= up_wdata[0]; end if ((up_wreq_s == 1'b1) && (up_waddr[11:0] == 12'h011)) begin up_ss_bypass <= up_wdata[2]; up_full_range <= up_wdata[1]; up_csc_bypass <= up_wdata[0]; end if ((up_wreq_s == 1'b1) && (up_waddr[11:0] == 12'h012)) begin up_srcsel <= up_wdata[1:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[11:0] == 12'h013)) begin up_const_rgb <= up_wdata[23:0]; end if (up_vdma_ovf_s == 1'b1) begin up_vdma_ovf <= 1'b1; end else if ((up_wreq_s == 1'b1) && (up_waddr[11:0] == 12'h018)) begin up_vdma_ovf <= up_vdma_ovf & ~up_wdata[1]; end if (up_vdma_unf_s == 1'b1) begin up_vdma_unf <= 1'b1; end else if ((up_wreq_s == 1'b1) && (up_waddr[11:0] == 12'h018)) begin up_vdma_unf <= up_vdma_unf & ~up_wdata[0]; end if (up_hdmi_tpm_oos_s == 1'b1) begin up_hdmi_tpm_oos <= 1'b1; end else if ((up_wreq_s == 1'b1) && (up_waddr[11:0] == 12'h019)) begin up_hdmi_tpm_oos <= up_hdmi_tpm_oos & ~up_wdata[1]; end if (up_vdma_tpm_oos_s == 1'b1) begin up_vdma_tpm_oos <= 1'b1; end else if ((up_wreq_s == 1'b1) && (up_waddr[11:0] == 12'h019)) begin up_vdma_tpm_oos <= up_vdma_tpm_oos & ~up_wdata[0]; end if ((up_wreq_s == 1'b1) && (up_waddr[11:0] == 12'h011)) begin if ((up_wdata[1]== 1'b1) || (up_wdata[0] == 1'b1)) begin up_clip_max <= 24'hfefefe; up_clip_min <= 24'h010101; end else begin up_clip_max <= 24'hf0ebf0; up_clip_min <= 24'h101010; end end if ((up_wreq_s == 1'b1) && (up_waddr[11:0] == 12'h01a)) begin up_clip_max <= up_wdata[23:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[11:0] == 12'h01b)) begin up_clip_min <= up_wdata[23:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[11:0] == 12'h100)) begin up_hl_active <= up_wdata[31:16]; up_hl_width <= up_wdata[15:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[11:0] == 12'h101)) begin up_hs_width <= up_wdata[15:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[11:0] == 12'h102)) begin up_he_max <= up_wdata[31:16]; up_he_min <= up_wdata[15:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[11:0] == 12'h110)) begin up_vf_active <= up_wdata[31:16]; up_vf_width <= up_wdata[15:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[11:0] == 12'h111)) begin up_vs_width <= up_wdata[15:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[11:0] == 12'h112)) begin up_ve_max <= up_wdata[31:16]; up_ve_min <= up_wdata[15:0]; end end end // processor read interface always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_rack <= 'd0; up_rdata <= 'd0; end else begin up_rack <= up_rreq_s; if (up_rreq_s == 1'b1) begin case (up_raddr[11:0]) 12'h000: up_rdata <= PCORE_VERSION; 12'h001: up_rdata <= ID; 12'h002: up_rdata <= up_scratch; 12'h010: up_rdata <= {31'd0, up_resetn}; 12'h011: up_rdata <= {29'd0, up_ss_bypass, up_full_range, up_csc_bypass}; 12'h012: up_rdata <= {30'd0, up_srcsel}; 12'h013: up_rdata <= {8'd0, up_const_rgb}; 12'h015: up_rdata <= up_hdmi_clk_count_s; 12'h016: up_rdata <= hdmi_clk_ratio; 12'h017: up_rdata <= {31'd0, up_hdmi_status_s}; 12'h018: up_rdata <= {30'd0, up_vdma_ovf, up_vdma_unf}; 12'h019: up_rdata <= {30'd0, up_hdmi_tpm_oos, up_vdma_tpm_oos}; 12'h01a: up_rdata <= {8'd0, up_clip_max}; 12'h01b: up_rdata <= {8'd0, up_clip_min}; 12'h100: up_rdata <= {up_hl_active, up_hl_width}; 12'h101: up_rdata <= {16'd0, up_hs_width}; 12'h102: up_rdata <= {up_he_max, up_he_min}; 12'h110: up_rdata <= {up_vf_active, up_vf_width}; 12'h111: up_rdata <= {16'd0, up_vs_width}; 12'h112: up_rdata <= {up_ve_max, up_ve_min}; default: up_rdata <= 0; endcase end else begin up_rdata <= 32'd0; end end end // resets ad_rst i_core_rst_reg (.preset(up_core_preset), .clk(hdmi_clk), .rst(hdmi_rst)); ad_rst i_vdma_rst_reg (.preset(up_core_preset), .clk(vdma_clk), .rst(vdma_rst)); // hdmi control & status up_xfer_cntrl #(.DATA_WIDTH(237)) i_xfer_cntrl ( .up_rstn (up_rstn), .up_clk (up_clk), .up_data_cntrl ({ up_ss_bypass, up_full_range, up_csc_bypass, up_srcsel, up_const_rgb, up_hl_active, up_hl_width, up_hs_width, up_he_max, up_he_min, up_vf_active, up_vf_width, up_vs_width, up_ve_max, up_ve_min, up_clip_max, up_clip_min}), .up_xfer_done (), .d_rst (hdmi_rst), .d_clk (hdmi_clk), .d_data_cntrl ({ hdmi_ss_bypass, hdmi_full_range, hdmi_csc_bypass, hdmi_srcsel, hdmi_const_rgb, hdmi_hl_active, hdmi_hl_width, hdmi_hs_width, hdmi_he_max, hdmi_he_min, hdmi_vf_active, hdmi_vf_width, hdmi_vs_width, hdmi_ve_max, hdmi_ve_min, hdmi_clip_max, hdmi_clip_min})); up_xfer_status #(.DATA_WIDTH(2)) i_xfer_status ( .up_rstn (up_rstn), .up_clk (up_clk), .up_data_status ({up_hdmi_status_s, up_hdmi_tpm_oos_s}), .d_rst (hdmi_rst), .d_clk (hdmi_clk), .d_data_status ({ hdmi_status, hdmi_tpm_oos})); // hdmi clock monitor up_clock_mon i_clock_mon ( .up_rstn (up_rstn), .up_clk (up_clk), .up_d_count (up_hdmi_clk_count_s), .d_rst (hdmi_rst), .d_clk (hdmi_clk)); // vdma control & status up_xfer_status #(.DATA_WIDTH(3)) i_vdma_xfer_status ( .up_rstn (up_rstn), .up_clk (up_clk), .up_data_status ({up_vdma_ovf_s, up_vdma_unf_s, up_vdma_tpm_oos_s}), .d_rst (vdma_rst), .d_clk (vdma_clk), .d_data_status ({ vdma_ovf, vdma_unf, vdma_tpm_oos})); endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/up_pmod.v000066400000000000000000000122531457144405000261230ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module up_pmod ( pmod_clk, pmod_rst, pmod_signal_freq, // bus interface up_rstn, up_clk, up_wreq, up_waddr, up_wdata, up_wack, up_rreq, up_raddr, up_rdata, up_rack); // parameters localparam PCORE_VERSION = 32'h00010001; parameter ID = 0; input pmod_clk; output pmod_rst; input [31:0] pmod_signal_freq; // bus interface input up_rstn; input up_clk; input up_wreq; input [13:0] up_waddr; input [31:0] up_wdata; output up_wack; input up_rreq; input [13:0] up_raddr; output [31:0] up_rdata; output up_rack; // internal registers reg up_wack = 'd0; reg [31:0] up_scratch = 'd0; reg up_resetn = 'd0; reg up_rack = 'd0; reg [31:0] up_rdata = 'd0; // internal signals wire [31:0] up_pmod_signal_freq_s; wire up_wreq_s; wire up_rreq_s; // decode block select assign up_wreq_s = (up_waddr[13:8] == 6'h00) ? up_wreq : 1'b0; assign up_rreq_s = (up_raddr[13:8] == 6'h00) ? up_rreq : 1'b0; assign up_preset_s = ~up_resetn; // processor write interface always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_wack <= 'd0; up_scratch <= 'd0; up_resetn <= 'd0; end else begin up_wack <= up_wreq_s; if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h02)) begin up_scratch <= up_wdata; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h10)) begin up_resetn <= up_wdata[0]; end end end // processor read interface always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_rack <= 'd0; up_rdata <= 'd0; end else begin up_rack <= up_rreq_s; if (up_rreq_s == 1'b1) begin case (up_raddr[7:0]) 8'h00: up_rdata <= PCORE_VERSION; 8'h01: up_rdata <= ID; 8'h02: up_rdata <= up_scratch; 8'h03: up_rdata <= up_pmod_signal_freq_s; 8'h10: up_rdata <= up_resetn; default: up_rdata <= 0; endcase end else begin up_rdata <= 32'd0; end end end // resets ad_rst i_adc_rst_reg (.preset(up_preset_s), .clk(pmod_clk), .rst(pmod_rst)); // adc control & status up_xfer_status #(.DATA_WIDTH(32)) i_pmod_xfer_status ( .up_rstn (up_rstn), .up_clk (up_clk), .up_data_status (up_pmod_signal_freq_s), .d_rst (pmod_rst), .d_clk (pmod_clk), .d_data_status (pmod_signal_freq)); endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/up_tdd_cntrl.v000066400000000000000000000402321457144405000271370ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2015(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module up_tdd_cntrl ( clk, rst, //rf tdd interface control tdd_enable, tdd_secondary, tdd_rx_only, tdd_tx_only, tdd_gated_rx_dmapath, tdd_gated_tx_dmapath, tdd_burst_count, tdd_counter_init, tdd_frame_length, tdd_terminal_type, tdd_sync_enable, tdd_vco_rx_on_1, tdd_vco_rx_off_1, tdd_vco_tx_on_1, tdd_vco_tx_off_1, tdd_rx_on_1, tdd_rx_off_1, tdd_tx_on_1, tdd_tx_off_1, tdd_tx_dp_on_1, tdd_tx_dp_off_1, tdd_vco_rx_on_2, tdd_vco_rx_off_2, tdd_vco_tx_on_2, tdd_vco_tx_off_2, tdd_rx_on_2, tdd_rx_off_2, tdd_tx_on_2, tdd_tx_off_2, tdd_tx_dp_on_2, tdd_tx_dp_off_2, tdd_status, // bus interface up_rstn, up_clk, up_wreq, up_waddr, up_wdata, up_wack, up_rreq, up_raddr, up_rdata, up_rack); // parameters localparam PCORE_VERSION = 32'h00010001; parameter ID = 0; input clk; input rst; output tdd_enable; output tdd_secondary; output tdd_rx_only; output tdd_tx_only; output tdd_gated_rx_dmapath; output tdd_gated_tx_dmapath; output [ 7:0] tdd_burst_count; output [23:0] tdd_counter_init; output [23:0] tdd_frame_length; output tdd_terminal_type; output tdd_sync_enable; output [23:0] tdd_vco_rx_on_1; output [23:0] tdd_vco_rx_off_1; output [23:0] tdd_vco_tx_on_1; output [23:0] tdd_vco_tx_off_1; output [23:0] tdd_rx_on_1; output [23:0] tdd_rx_off_1; output [23:0] tdd_tx_on_1; output [23:0] tdd_tx_off_1; output [23:0] tdd_tx_dp_on_1; output [23:0] tdd_tx_dp_off_1; output [23:0] tdd_vco_rx_on_2; output [23:0] tdd_vco_rx_off_2; output [23:0] tdd_vco_tx_on_2; output [23:0] tdd_vco_tx_off_2; output [23:0] tdd_rx_on_2; output [23:0] tdd_rx_off_2; output [23:0] tdd_tx_on_2; output [23:0] tdd_tx_off_2; output [23:0] tdd_tx_dp_on_2; output [23:0] tdd_tx_dp_off_2; input [ 7:0] tdd_status; // bus interface input up_rstn; input up_clk; input up_wreq; input [13:0] up_waddr; input [31:0] up_wdata; output up_wack; input up_rreq; input [13:0] up_raddr; output [31:0] up_rdata; output up_rack; // internal registers reg up_wack = 1'h0; reg [31:0] up_scratch = 32'h0; reg up_rack = 1'h0; reg [31:0] up_rdata = 32'h0; reg up_tdd_enable = 1'h0; reg up_tdd_secondary = 1'h0; reg up_tdd_rx_only = 1'h0; reg up_tdd_tx_only = 1'h0; reg up_tdd_gated_tx_dmapath = 1'h0; reg up_tdd_gated_rx_dmapath = 1'h0; reg up_tdd_terminal_type = 1'h0; reg up_tdd_sync_enable = 1'h0; reg [ 7:0] up_tdd_burst_count = 8'h0; reg [23:0] up_tdd_counter_init = 24'h0; reg [23:0] up_tdd_frame_length = 24'h0; reg [23:0] up_tdd_vco_rx_on_1 = 24'h0; reg [23:0] up_tdd_vco_rx_off_1 = 24'h0; reg [23:0] up_tdd_vco_tx_on_1 = 24'h0; reg [23:0] up_tdd_vco_tx_off_1 = 24'h0; reg [23:0] up_tdd_rx_on_1 = 24'h0; reg [23:0] up_tdd_rx_off_1 = 24'h0; reg [23:0] up_tdd_tx_on_1 = 24'h0; reg [23:0] up_tdd_tx_off_1 = 24'h0; reg [23:0] up_tdd_tx_dp_on_1 = 24'h0; reg [23:0] up_tdd_tx_dp_off_1 = 24'h0; reg [23:0] up_tdd_vco_rx_on_2 = 24'h0; reg [23:0] up_tdd_vco_rx_off_2 = 24'h0; reg [23:0] up_tdd_vco_tx_on_2 = 24'h0; reg [23:0] up_tdd_vco_tx_off_2 = 24'h0; reg [23:0] up_tdd_rx_on_2 = 24'h0; reg [23:0] up_tdd_rx_off_2 = 24'h0; reg [23:0] up_tdd_tx_on_2 = 24'h0; reg [23:0] up_tdd_tx_off_2 = 24'h0; reg [23:0] up_tdd_tx_dp_on_2 = 24'h0; reg [23:0] up_tdd_tx_dp_off_2 = 24'h0; // internal signals wire up_wreq_s; wire up_rreq_s; wire [ 7:0] up_tdd_status_s; // decode block select assign up_wreq_s = (up_waddr[13:8] == 6'h20) ? up_wreq : 1'b0; assign up_rreq_s = (up_raddr[13:8] == 6'h20) ? up_rreq : 1'b0; // processor write interface always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_wack <= 1'h0; up_scratch <= 32'h0; up_tdd_enable <= 1'h0; up_tdd_secondary <= 1'h0; up_tdd_rx_only <= 1'h0; up_tdd_tx_only <= 1'h0; up_tdd_gated_tx_dmapath <= 1'h0; up_tdd_gated_rx_dmapath <= 1'h0; up_tdd_terminal_type <= 1'h0; up_tdd_sync_enable <= 1'h0; up_tdd_counter_init <= 24'h0; up_tdd_frame_length <= 24'h0; up_tdd_burst_count <= 8'h0; up_tdd_vco_rx_on_1 <= 24'h0; up_tdd_vco_rx_off_1 <= 24'h0; up_tdd_vco_tx_on_1 <= 24'h0; up_tdd_vco_tx_off_1 <= 24'h0; up_tdd_rx_on_1 <= 24'h0; up_tdd_rx_off_1 <= 24'h0; up_tdd_tx_on_1 <= 24'h0; up_tdd_tx_off_1 <= 24'h0; up_tdd_tx_dp_on_1 <= 24'h0; up_tdd_vco_rx_on_2 <= 24'h0; up_tdd_vco_rx_off_2 <= 24'h0; up_tdd_vco_tx_on_2 <= 24'h0; up_tdd_vco_tx_off_2 <= 24'h0; up_tdd_rx_on_2 <= 24'h0; up_tdd_rx_off_2 <= 24'h0; up_tdd_tx_on_2 <= 24'h0; up_tdd_tx_off_2 <= 24'h0; up_tdd_tx_dp_on_2 <= 24'h0; end else begin up_wack <= up_wreq_s; if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h02)) begin up_scratch <= up_wdata; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h10)) begin up_tdd_enable <= up_wdata[0]; up_tdd_secondary <= up_wdata[1]; up_tdd_rx_only <= up_wdata[2]; up_tdd_tx_only <= up_wdata[3]; up_tdd_gated_rx_dmapath <= up_wdata[4]; up_tdd_gated_tx_dmapath <= up_wdata[5]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h11)) begin up_tdd_burst_count <= up_wdata[7:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h12)) begin up_tdd_counter_init <= up_wdata[23:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h13)) begin up_tdd_frame_length <= up_wdata[23:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h14)) begin up_tdd_terminal_type <= up_wdata[1]; up_tdd_sync_enable <= up_wdata[0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h20)) begin up_tdd_vco_rx_on_1 <= up_wdata[23:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h21)) begin up_tdd_vco_rx_off_1 <= up_wdata[23:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h22)) begin up_tdd_vco_tx_on_1 <= up_wdata[23:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h23)) begin up_tdd_vco_tx_off_1 <= up_wdata[23:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h24)) begin up_tdd_rx_on_1 <= up_wdata[23:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h25)) begin up_tdd_rx_off_1 <= up_wdata[23:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h26)) begin up_tdd_tx_on_1 <= up_wdata[23:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h27)) begin up_tdd_tx_off_1 <= up_wdata[23:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h28)) begin up_tdd_tx_dp_on_1 <= up_wdata[23:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h29)) begin up_tdd_tx_dp_off_1 <= up_wdata[23:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h30)) begin up_tdd_vco_rx_on_2 <= up_wdata[23:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h31)) begin up_tdd_vco_rx_off_2 <= up_wdata[23:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h32)) begin up_tdd_vco_tx_on_2 <= up_wdata[23:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h33)) begin up_tdd_vco_tx_off_2 <= up_wdata[23:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h34)) begin up_tdd_rx_on_2 <= up_wdata[23:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h35)) begin up_tdd_rx_off_2 <= up_wdata[23:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h36)) begin up_tdd_tx_on_2 <= up_wdata[23:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h37)) begin up_tdd_tx_off_2 <= up_wdata[23:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h38)) begin up_tdd_tx_dp_on_2 <= up_wdata[23:0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h39)) begin up_tdd_tx_dp_off_2 <= up_wdata[23:0]; end end end // processor read interface always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_rack <= 1'b0; up_rdata <= 1'b0; end else begin up_rack <= up_rreq_s; if (up_rreq_s == 1'b1) begin case (up_raddr[7:0]) 8'h00: up_rdata <= PCORE_VERSION; 8'h01: up_rdata <= ID; 8'h02: up_rdata <= up_scratch; 8'h10: up_rdata <= {26'h0, up_tdd_gated_tx_dmapath, up_tdd_gated_rx_dmapath, up_tdd_tx_only, up_tdd_rx_only, up_tdd_secondary, up_tdd_enable}; 8'h11: up_rdata <= {24'h0, up_tdd_burst_count}; 8'h12: up_rdata <= { 8'h0, up_tdd_counter_init}; 8'h13: up_rdata <= { 8'h0, up_tdd_frame_length}; 8'h14: up_rdata <= {30'h0, up_tdd_terminal_type, up_tdd_sync_enable}; 8'h18: up_rdata <= {24'h0, up_tdd_status_s}; 8'h20: up_rdata <= { 8'h0, up_tdd_vco_rx_on_1}; 8'h21: up_rdata <= { 8'h0, up_tdd_vco_rx_off_1}; 8'h22: up_rdata <= { 8'h0, up_tdd_vco_tx_on_1}; 8'h23: up_rdata <= { 8'h0, up_tdd_vco_tx_off_1}; 8'h24: up_rdata <= { 8'h0, up_tdd_rx_on_1}; 8'h25: up_rdata <= { 8'h0, up_tdd_rx_off_1}; 8'h26: up_rdata <= { 8'h0, up_tdd_tx_on_1}; 8'h27: up_rdata <= { 8'h0, up_tdd_tx_off_1}; 8'h28: up_rdata <= { 8'h0, up_tdd_tx_dp_on_1}; 8'h29: up_rdata <= { 8'h0, up_tdd_tx_dp_off_1}; 8'h30: up_rdata <= { 8'h0, up_tdd_vco_rx_on_2}; 8'h31: up_rdata <= { 8'h0, up_tdd_vco_rx_off_2}; 8'h32: up_rdata <= { 8'h0, up_tdd_vco_tx_on_2}; 8'h33: up_rdata <= { 8'h0, up_tdd_vco_tx_off_2}; 8'h34: up_rdata <= { 8'h0, up_tdd_rx_on_2}; 8'h35: up_rdata <= { 8'h0, up_tdd_rx_off_2}; 8'h36: up_rdata <= { 8'h0, up_tdd_tx_on_2}; 8'h37: up_rdata <= { 8'h0, up_tdd_tx_off_2}; 8'h38: up_rdata <= { 8'h0, up_tdd_tx_dp_on_2}; 8'h39: up_rdata <= { 8'h0, up_tdd_tx_dp_off_2}; default: up_rdata <= 32'h0; endcase end end end // rf tdd control signal CDC up_xfer_cntrl #(.DATA_WIDTH(16)) i_xfer_tdd_control ( .up_rstn(up_rstn), .up_clk(up_clk), .up_data_cntrl({up_tdd_enable, up_tdd_secondary, up_tdd_rx_only, up_tdd_tx_only, up_tdd_gated_rx_dmapath, up_tdd_gated_tx_dmapath, up_tdd_burst_count, up_tdd_terminal_type, up_tdd_sync_enable }), .up_xfer_done(), .d_rst(rst), .d_clk(clk), .d_data_cntrl({tdd_enable, tdd_secondary, tdd_rx_only, tdd_tx_only, tdd_gated_rx_dmapath, tdd_gated_tx_dmapath, tdd_burst_count, tdd_terminal_type, tdd_sync_enable })); up_xfer_cntrl #(.DATA_WIDTH(528)) i_xfer_tdd_counter_values ( .up_rstn(up_rstn), .up_clk(up_clk), .up_data_cntrl({up_tdd_counter_init, up_tdd_frame_length, up_tdd_vco_rx_on_1, up_tdd_vco_rx_off_1, up_tdd_vco_tx_on_1, up_tdd_vco_tx_off_1, up_tdd_rx_on_1, up_tdd_rx_off_1, up_tdd_tx_on_1, up_tdd_tx_off_1, up_tdd_tx_dp_on_1, up_tdd_tx_dp_off_1, up_tdd_vco_rx_on_2, up_tdd_vco_rx_off_2, up_tdd_vco_tx_on_2, up_tdd_vco_tx_off_2, up_tdd_rx_on_2, up_tdd_rx_off_2, up_tdd_tx_on_2, up_tdd_tx_off_2, up_tdd_tx_dp_on_2, up_tdd_tx_dp_off_2 }), .up_xfer_done(), .d_rst(rst), .d_clk(clk), .d_data_cntrl({tdd_counter_init, tdd_frame_length, tdd_vco_rx_on_1, tdd_vco_rx_off_1, tdd_vco_tx_on_1, tdd_vco_tx_off_1, tdd_rx_on_1, tdd_rx_off_1, tdd_tx_on_1, tdd_tx_off_1, tdd_tx_dp_on_1, tdd_tx_dp_off_1, tdd_vco_rx_on_2, tdd_vco_rx_off_2, tdd_vco_tx_on_2, tdd_vco_tx_off_2, tdd_rx_on_2, tdd_rx_off_2, tdd_tx_on_2, tdd_tx_off_2, tdd_tx_dp_on_2, tdd_tx_dp_off_2 })); up_xfer_status #(.DATA_WIDTH(8)) i_xfer_tdd_status ( .up_rstn (up_rstn), .up_clk (up_clk), .up_data_status (up_tdd_status_s), .d_rst (rst), .d_clk (clk), .d_data_status (tdd_status)); endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/up_xcvr.v000066400000000000000000000243701457144405000261510ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module up_xcvr ( // common reset rst, // receive interface rx_clk, rx_rstn, rx_ext_sysref, rx_sysref, rx_ip_sync, rx_sync, rx_status, // transmit interface tx_clk, tx_rstn, tx_ext_sysref, tx_sysref, tx_sync, tx_ip_sync, tx_status, // bus interface up_rstn, up_clk, up_wreq, up_waddr, up_wdata, up_wack, up_rreq, up_raddr, up_rdata, up_rack); // parameters localparam PCORE_VERSION = 32'h00060162; parameter ID = 0; parameter DEVICE_TYPE = 0; // common reset output rst; // receive interface input rx_clk; output rx_rstn; input rx_ext_sysref; output rx_sysref; input rx_ip_sync; output rx_sync; input [ 7:0] rx_status; // transmit interface input tx_clk; output tx_rstn; input tx_ext_sysref; output tx_sysref; input tx_sync; output tx_ip_sync; input [ 7:0] tx_status; // bus interface input up_rstn; input up_clk; input up_wreq; input [13:0] up_waddr; input [31:0] up_wdata; output up_wack; input up_rreq; input [13:0] up_raddr; output [31:0] up_rdata; output up_rack; // internal registers reg up_reset = 'd1; reg up_rx_reset = 'd1; reg up_tx_reset = 'd1; reg up_wack = 'd0; reg [31:0] up_scratch = 'd0; reg up_resetn = 'd0; reg up_rx_sysref_sel = 'd0; reg up_rx_sysref = 'd0; reg up_rx_sync = 'd0; reg up_rx_resetn = 'd0; reg up_tx_sysref_sel = 'd0; reg up_tx_sysref = 'd0; reg up_tx_sync = 'd0; reg up_tx_resetn = 'd0; reg up_rack = 'd0; reg [31:0] up_rdata = 'd0; reg rx_rstn = 'd0; reg rx_sysref_sel_m1 = 'd0; reg rx_sysref_sel = 'd0; reg rx_up_sysref_m1 = 'd0; reg rx_up_sysref = 'd0; reg rx_sysref = 'd0; reg rx_up_sync_m1 = 'd0; reg rx_up_sync = 'd0; reg rx_sync = 'd0; reg tx_rstn = 'd0; reg tx_sysref_sel_m1 = 'd0; reg tx_sysref_sel = 'd0; reg tx_up_sysref_m1 = 'd0; reg tx_up_sysref = 'd0; reg tx_sysref = 'd0; reg tx_up_sync_m1 = 'd0; reg tx_up_sync = 'd0; reg tx_ip_sync = 'd0; reg [ 8:0] up_rx_status_m1 = 'd0; reg [ 8:0] up_rx_status = 'd0; reg [ 8:0] up_tx_status_m1 = 'd0; reg [ 8:0] up_tx_status = 'd0; // internal signals wire rx_rst; wire tx_rst; wire up_wreq_s; wire up_rreq_s; // decode block select assign up_wreq_s = (up_waddr[13:8] == 6'h00) ? up_wreq : 1'b0; assign up_rreq_s = (up_raddr[13:8] == 6'h00) ? up_rreq : 1'b0; // processor write interface always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_reset <= 1'b1; up_rx_reset <= 1'b1; up_tx_reset <= 1'b1; up_wack <= 'd0; up_scratch <= 'd0; up_resetn <= 'd0; up_rx_sysref_sel <= 'd0; up_rx_sysref <= 'd0; up_rx_sync <= 'd0; up_rx_resetn <= 'd0; up_tx_sysref_sel <= 'd0; up_tx_sysref <= 'd0; up_tx_sync <= 'd0; up_tx_resetn <= 'd0; end else begin up_reset <= ~up_resetn; up_rx_reset <= ~(up_resetn & up_rx_resetn); up_tx_reset <= ~(up_resetn & up_tx_resetn); up_wack <= up_wreq_s; if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h02)) begin up_scratch <= up_wdata; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h03)) begin up_resetn <= up_wdata[0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h10)) begin up_rx_sysref_sel <= up_wdata[1]; up_rx_sysref <= up_wdata[0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h11)) begin up_rx_sync <= up_wdata[0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h13)) begin up_rx_resetn <= up_wdata[0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h20)) begin up_tx_sysref_sel <= up_wdata[1]; up_tx_sysref <= up_wdata[0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h21)) begin up_tx_sync <= up_wdata[0]; end if ((up_wreq_s == 1'b1) && (up_waddr[7:0] == 8'h23)) begin up_tx_resetn <= up_wdata[0]; end end end // processor read interface always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_rack <= 'd0; up_rdata <= 'd0; end else begin up_rack <= up_rreq_s; if (up_rreq_s == 1'b1) begin case (up_raddr[7:0]) 8'h00: up_rdata <= PCORE_VERSION; 8'h01: up_rdata <= ID; 8'h02: up_rdata <= up_scratch; 8'h03: up_rdata <= {31'd0, up_resetn}; 8'h10: up_rdata <= {30'd0, up_rx_sysref_sel, up_rx_sysref}; 8'h11: up_rdata <= {31'd0, up_rx_sync}; 8'h12: up_rdata <= {23'd0, up_rx_status}; 8'h13: up_rdata <= {31'd0, up_rx_resetn}; 8'h20: up_rdata <= {30'd0, up_tx_sysref_sel, up_tx_sysref}; 8'h21: up_rdata <= {31'd0, up_tx_sync}; 8'h22: up_rdata <= {23'd0, up_tx_status}; 8'h23: up_rdata <= {31'd0, up_tx_resetn}; 8'h30: up_rdata <= DEVICE_TYPE; default: up_rdata <= 0; endcase end else begin up_rdata <= 32'd0; end end end // resets assign rst = up_reset; ad_rst i_rx_rst_reg (.preset(up_rx_reset), .clk(rx_clk), .rst(rx_rst)); ad_rst i_tx_rst_reg (.preset(up_tx_reset), .clk(tx_clk), .rst(tx_rst)); // rx sysref & sync always @(posedge rx_clk or posedge rx_rst) begin if (rx_rst == 1'b1) begin rx_rstn <= 'd0; rx_sysref_sel_m1 <= 'd0; rx_sysref_sel <= 'd0; rx_up_sysref_m1 <= 'd0; rx_up_sysref <= 'd0; rx_sysref <= 'd0; rx_up_sync_m1 <= 'd0; rx_up_sync <= 'd0; rx_sync <= 'd0; end else begin rx_rstn <= 1'd1; rx_sysref_sel_m1 <= up_rx_sysref_sel; rx_sysref_sel <= rx_sysref_sel_m1; rx_up_sysref_m1 <= up_rx_sysref; rx_up_sysref <= rx_up_sysref_m1; if (rx_sysref_sel == 1'b1) begin rx_sysref <= rx_ext_sysref; end else begin rx_sysref <= rx_up_sysref; end rx_up_sync_m1 <= up_rx_sync; rx_up_sync <= rx_up_sync_m1; rx_sync <= rx_up_sync & rx_ip_sync; end end // tx sysref & sync always @(posedge tx_clk or posedge tx_rst) begin if (tx_rst == 1'b1) begin tx_rstn <= 'd0; tx_sysref_sel_m1 <= 'd0; tx_sysref_sel <= 'd0; tx_up_sysref_m1 <= 'd0; tx_up_sysref <= 'd0; tx_sysref <= 'd0; tx_up_sync_m1 <= 'd0; tx_up_sync <= 'd0; tx_ip_sync <= 'd0; end else begin tx_rstn <= 1'd1; tx_sysref_sel_m1 <= up_tx_sysref_sel; tx_sysref_sel <= tx_sysref_sel_m1; tx_up_sysref_m1 <= up_tx_sysref; tx_up_sysref <= tx_up_sysref_m1; if (tx_sysref_sel == 1'b1) begin tx_sysref <= tx_ext_sysref; end else begin tx_sysref <= tx_up_sysref; end tx_up_sync_m1 <= up_tx_sync; tx_up_sync <= tx_up_sync_m1; tx_ip_sync <= tx_up_sync & tx_sync; end end // status always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 0) begin up_rx_status_m1 <= 'd0; up_rx_status <= 'd0; up_tx_status_m1 <= 'd0; up_tx_status <= 'd0; end else begin up_rx_status_m1 <= {rx_sync, rx_status}; up_rx_status <= up_rx_status_m1; up_tx_status_m1 <= {tx_ip_sync, tx_status}; up_tx_status <= up_tx_status_m1; end end endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/up_xfer_cntrl.v000066400000000000000000000116201457144405000273270ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module up_xfer_cntrl ( // up interface up_rstn, up_clk, up_data_cntrl, up_xfer_done, // device interface d_rst, d_clk, d_data_cntrl); // parameters parameter DATA_WIDTH = 8; localparam DW = DATA_WIDTH - 1; // up interface input up_rstn; input up_clk; input [DW:0] up_data_cntrl; output up_xfer_done; // device interface input d_rst; input d_clk; output [DW:0] d_data_cntrl; // internal registers reg up_xfer_state_m1 = 'd0; reg up_xfer_state_m2 = 'd0; reg up_xfer_state = 'd0; reg [ 5:0] up_xfer_count = 'd0; reg up_xfer_done = 'd0; reg up_xfer_toggle = 'd0; reg [DW:0] up_xfer_data = 'd0; reg d_xfer_toggle_m1 = 'd0; reg d_xfer_toggle_m2 = 'd0; reg d_xfer_toggle_m3 = 'd0; reg d_xfer_toggle = 'd0; reg [DW:0] d_data_cntrl = 'd0; // internal signals wire up_xfer_enable_s; wire d_xfer_toggle_s; // device control transfer assign up_xfer_enable_s = up_xfer_state ^ up_xfer_toggle; always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 1'b0) begin up_xfer_state_m1 <= 'd0; up_xfer_state_m2 <= 'd0; up_xfer_state <= 'd0; up_xfer_count <= 'd0; up_xfer_done <= 'd0; up_xfer_toggle <= 'd0; up_xfer_data <= 'd0; end else begin up_xfer_state_m1 <= d_xfer_toggle; up_xfer_state_m2 <= up_xfer_state_m1; up_xfer_state <= up_xfer_state_m2; up_xfer_count <= up_xfer_count + 1'd1; up_xfer_done <= (up_xfer_count == 6'd1) ? ~up_xfer_enable_s : 1'b0; if ((up_xfer_count == 6'd1) && (up_xfer_enable_s == 1'b0)) begin up_xfer_toggle <= ~up_xfer_toggle; up_xfer_data <= up_data_cntrl; end end end assign d_xfer_toggle_s = d_xfer_toggle_m3 ^ d_xfer_toggle_m2; always @(posedge d_clk or posedge d_rst) begin if (d_rst == 1'b1) begin d_xfer_toggle_m1 <= 'd0; d_xfer_toggle_m2 <= 'd0; d_xfer_toggle_m3 <= 'd0; d_xfer_toggle <= 'd0; d_data_cntrl <= 'd0; end else begin d_xfer_toggle_m1 <= up_xfer_toggle; d_xfer_toggle_m2 <= d_xfer_toggle_m1; d_xfer_toggle_m3 <= d_xfer_toggle_m2; d_xfer_toggle <= d_xfer_toggle_m3; if (d_xfer_toggle_s == 1'b1) begin d_data_cntrl <= up_xfer_data; end end end endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/common/up_xfer_status.v000066400000000000000000000117131457144405000275330ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module up_xfer_status ( // up interface up_rstn, up_clk, up_data_status, // device interface d_rst, d_clk, d_data_status); // parameters parameter DATA_WIDTH = 8; localparam DW = DATA_WIDTH - 1; // up interface input up_rstn; input up_clk; output [DW:0] up_data_status; // device interface input d_rst; input d_clk; input [DW:0] d_data_status; // internal registers reg d_xfer_state_m1 = 'd0; reg d_xfer_state_m2 = 'd0; reg d_xfer_state = 'd0; reg [ 5:0] d_xfer_count = 'd0; reg d_xfer_toggle = 'd0; reg [DW:0] d_xfer_data = 'd0; reg [DW:0] d_acc_data = 'd0; reg up_xfer_toggle_m1 = 'd0; reg up_xfer_toggle_m2 = 'd0; reg up_xfer_toggle_m3 = 'd0; reg up_xfer_toggle = 'd0; reg [DW:0] up_data_status = 'd0; // internal signals wire d_xfer_enable_s; wire up_xfer_toggle_s; // device status transfer assign d_xfer_enable_s = d_xfer_state ^ d_xfer_toggle; always @(posedge d_clk or posedge d_rst) begin if (d_rst == 1'b1) begin d_xfer_state_m1 <= 'd0; d_xfer_state_m2 <= 'd0; d_xfer_state <= 'd0; d_xfer_count <= 'd0; d_xfer_toggle <= 'd0; d_xfer_data <= 'd0; d_acc_data <= 'd0; end else begin d_xfer_state_m1 <= up_xfer_toggle; d_xfer_state_m2 <= d_xfer_state_m1; d_xfer_state <= d_xfer_state_m2; d_xfer_count <= d_xfer_count + 1'd1; if ((d_xfer_count == 6'd1) && (d_xfer_enable_s == 1'b0)) begin d_xfer_toggle <= ~d_xfer_toggle; d_xfer_data <= d_acc_data; end if ((d_xfer_count == 6'd1) && (d_xfer_enable_s == 1'b0)) begin d_acc_data <= d_data_status; end else begin d_acc_data <= d_acc_data | d_data_status; end end end assign up_xfer_toggle_s = up_xfer_toggle_m3 ^ up_xfer_toggle_m2; always @(negedge up_rstn or posedge up_clk) begin if (up_rstn == 1'b0) begin up_xfer_toggle_m1 <= 'd0; up_xfer_toggle_m2 <= 'd0; up_xfer_toggle_m3 <= 'd0; up_xfer_toggle <= 'd0; up_data_status <= 'd0; end else begin up_xfer_toggle_m1 <= d_xfer_toggle; up_xfer_toggle_m2 <= up_xfer_toggle_m1; up_xfer_toggle_m3 <= up_xfer_toggle_m2; up_xfer_toggle <= up_xfer_toggle_m3; if (up_xfer_toggle_s == 1'b1) begin up_data_status <= d_xfer_data; end end end endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/scripts/000077500000000000000000000000001457144405000244655ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/scripts/adi_env.tcl000066400000000000000000000004541457144405000266010ustar00rootroot00000000000000 # environment related stuff set ad_hdl_dir [file normalize [file join [file dirname [info script]] "../.."]] set ad_phdl_dir $ad_hdl_dir if [info exists ::env(ADI_HDL_DIR)] { set ad_hdl_dir $::env(ADI_HDL_DIR) } if [info exists ::env(ADI_PHDL_DIR)] { set ad_phdl_dir $::env(ADI_PHDL_DIR) } bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/scripts/adi_ip.tcl000066400000000000000000000241461457144405000264250ustar00rootroot00000000000000 # check tool version if {![info exists REQUIRED_VIVADO_VERSION]} { set REQUIRED_VIVADO_VERSION "2015.4.2" } if {[info exists ::env(ADI_IGNORE_VERSION_CHECK)]} { set IGNORE_VERSION_CHECK 1 } elseif {![info exists IGNORE_VERSION_CHECK]} { set IGNORE_VERSION_CHECK 0 } # ip related stuff proc adi_ip_create {ip_name} { global ad_hdl_dir global ad_phdl_dir global REQUIRED_VIVADO_VERSION global IGNORE_VERSION_CHECK if {!$IGNORE_VERSION_CHECK && [string compare [version -short] $REQUIRED_VIVADO_VERSION] != 0} { return -code error [format "ERROR: This library requires Vivado %s." $REQUIRED_VIVADO_VERSION] } create_project $ip_name . -force set lib_dirs $ad_hdl_dir/library if {$ad_hdl_dir ne $ad_phdl_dir} { lappend lib_dirs $ad_phdl_dir/library } set_property ip_repo_paths $lib_dirs [current_fileset] update_ip_catalog set proj_dir [get_property directory [current_project]] set proj_name [get_projects $ip_name] } proc adi_ip_files {ip_name ip_files} { set proj_fileset [get_filesets sources_1] add_files -norecurse -scan_for_includes -fileset $proj_fileset $ip_files set_property "top" "$ip_name" $proj_fileset } proc adi_ip_constraints {ip_name ip_constr_files {processing_order late}} { set proj_filegroup [ipx::get_file_groups -of_objects [ipx::current_core] -filter {NAME =~ *synthesis*}] foreach f_name $ip_constr_files { ipx::add_file $f_name $proj_filegroup set_property type xdc [ipx::get_files $f_name -of_objects $proj_filegroup] set_property processing_order $processing_order [ipx::get_files $f_name -of_objects $proj_filegroup] } } proc adi_ip_ttcl {ip_name ip_constr_files} { set proj_filegroup [ipx::get_file_groups -of_objects [ipx::current_core] -filter {NAME =~ *synthesis*}] set f [ipx::add_file $ip_constr_files $proj_filegroup] set_property -dict [list \ type ttcl \ ] $f } proc adi_ip_bd {ip_name ip_bd_files} { set proj_filegroup [ipx::get_file_groups xilinx_blockdiagram -of_objects [ipx::current_core]] if {$proj_filegroup == {}} { set proj_filegroup [ipx::add_file_group -type xilinx_blockdiagram "" [ipx::current_core]] } set f [ipx::add_file $ip_bd_files $proj_filegroup] set_property -dict [list \ type tclSource \ ] $f } proc adi_ip_properties {ip_name} { ipx::package_project -root_dir . set_property vendor {analog.com} [ipx::current_core] set_property library {user} [ipx::current_core] set_property taxonomy {{/AXI_Infrastructure}} [ipx::current_core] set_property vendor_display_name {Analog Devices} [ipx::current_core] set_property company_url {www.analog.com} [ipx::current_core] set_property supported_families \ {{kintexu} {Pre-Production} \ {virtexu} {Pre-Production} \ {virtex7} {Production} \ {qvirtex7} {Production} \ {kintex7} {Production} \ {kintex7l} {Production} \ {qkintex7} {Production} \ {qkintex7l} {Production} \ {artix7} {Production} \ {artix7l} {Production} \ {aartix7} {Production} \ {qartix7} {Production} \ {zynq} {Production} \ {qzynq} {Production} \ {azynq} {Production}} \ [ipx::current_core] ipx::remove_all_bus_interface [ipx::current_core] ipx::infer_bus_interface {\ s_axi_awvalid \ s_axi_awaddr \ s_axi_awprot \ s_axi_awready \ s_axi_wvalid \ s_axi_wdata \ s_axi_wstrb \ s_axi_wready \ s_axi_bvalid \ s_axi_bresp \ s_axi_bready \ s_axi_arvalid \ s_axi_araddr \ s_axi_arprot \ s_axi_arready \ s_axi_rvalid \ s_axi_rdata \ s_axi_rresp \ s_axi_rready} \ xilinx.com:interface:aximm_rtl:1.0 [ipx::current_core] ipx::infer_bus_interface s_axi_aclk xilinx.com:signal:clock_rtl:1.0 [ipx::current_core] ipx::infer_bus_interface s_axi_aresetn xilinx.com:signal:reset_rtl:1.0 [ipx::current_core] ipx::add_memory_map {s_axi} [ipx::current_core] set_property slave_memory_map_ref {s_axi} [ipx::get_bus_interfaces s_axi -of_objects [ipx::current_core]] ipx::add_address_block {axi_lite} [ipx::get_memory_maps s_axi -of_objects [ipx::current_core]] set_property range {65536} [ipx::get_address_blocks axi_lite \ -of_objects [ipx::get_memory_maps s_axi -of_objects [ipx::current_core]]] ipx::add_bus_parameter ASSOCIATED_BUSIF [ipx::get_bus_interfaces s_axi_aclk \ -of_objects [ipx::current_core]] set_property value s_axi [ipx::get_bus_parameters ASSOCIATED_BUSIF \ -of_objects [ipx::get_bus_interfaces s_axi_aclk \ -of_objects [ipx::current_core]]] ipx::infer_bus_interfaces xilinx.com:interface:clock_rtl:1.0 [ipx::current_core] ipx::infer_bus_interfaces xilinx.com:interface:reset_rtl:1.0 [ipx::current_core] ipx::infer_bus_interfaces xilinx.com:interface:aximm_rtl:1.0 [ipx::current_core] ipx::infer_bus_interfaces xilinx.com:interface:axis_rtl:1.0 [ipx::current_core] } proc adi_ip_properties_lite {ip_name} { ipx::package_project -root_dir . set_property vendor {analog.com} [ipx::current_core] set_property library {user} [ipx::current_core] set_property taxonomy {{/AXI_Infrastructure}} [ipx::current_core] set_property vendor_display_name {Analog Devices} [ipx::current_core] set_property company_url {www.analog.com} [ipx::current_core] set_property supported_families \ {{kintexu} {Pre-Production} \ {virtexu} {Pre-Production} \ {virtex7} {Production} \ {qvirtex7} {Production} \ {kintex7} {Production} \ {kintex7l} {Production} \ {qkintex7} {Production} \ {qkintex7l} {Production} \ {artix7} {Production} \ {artix7l} {Production} \ {aartix7} {Production} \ {qartix7} {Production} \ {zynq} {Production} \ {qzynq} {Production} \ {azynq} {Production}} \ [ipx::current_core] } proc adi_set_ports_dependency {port_prefix dependency} { foreach port [ipx::get_ports [format "%s%s" $port_prefix "*"]] { set_property ENABLEMENT_DEPENDENCY $dependency $port } } proc adi_set_bus_dependency {bus prefix dependency} { set_property ENABLEMENT_DEPENDENCY $dependency [ipx::get_bus_interfaces $bus -of_objects [ipx::current_core]] adi_set_ports_dependency $prefix $dependency } proc adi_add_port_map {bus phys logic} { set map [ipx::add_port_map $phys $bus] set_property "PHYSICAL_NAME" $phys $map set_property "LOGICAL_NAME" $logic $map } proc adi_add_bus {bus_name mode abs_type bus_type port_maps} { set bus [ipx::add_bus_interface $bus_name [ipx::current_core]] set_property "ABSTRACTION_TYPE_VLNV" $abs_type $bus set_property "BUS_TYPE_VLNV" $bus_type $bus set_property "INTERFACE_MODE" $mode $bus foreach port_map $port_maps { adi_add_port_map $bus {*}$port_map } } proc adi_add_bus_clock {clock_signal_name bus_inf_name {reset_signal_name ""} {reset_signal_mode "slave"}} { set bus_inf_name_clean [string map {":" "_"} $bus_inf_name] set clock_inf_name [format "%s%s" $bus_inf_name_clean "_signal_clock"] set clock_inf [ipx::add_bus_interface $clock_inf_name [ipx::current_core]] set_property abstraction_type_vlnv "xilinx.com:signal:clock_rtl:1.0" $clock_inf set_property bus_type_vlnv "xilinx.com:signal:clock:1.0" $clock_inf set_property display_name $clock_inf_name $clock_inf set clock_map [ipx::add_port_map "CLK" $clock_inf] set_property physical_name $clock_signal_name $clock_map set assoc_busif [ipx::add_bus_parameter "ASSOCIATED_BUSIF" $clock_inf] set_property value $bus_inf_name $assoc_busif if { $reset_signal_name != "" } { set assoc_reset [ipx::add_bus_parameter "ASSOCIATED_RESET" $clock_inf] set_property value $reset_signal_name $assoc_reset set reset_inf_name [format "%s%s" $bus_inf_name_clean "_signal_reset"] set reset_inf [ipx::add_bus_interface $reset_inf_name [ipx::current_core]] set_property abstraction_type_vlnv "xilinx.com:signal:reset_rtl:1.0" $reset_inf set_property bus_type_vlnv "xilinx.com:signal:reset:1.0" $reset_inf set_property display_name $reset_inf_name $reset_inf set_property interface_mode $reset_signal_mode $reset_inf set reset_map [ipx::add_port_map "RST" $reset_inf] set_property physical_name $reset_signal_name $reset_map set reset_polarity [ipx::add_bus_parameter "POLARITY" $reset_inf] set_property value "ACTIVE_LOW" $reset_polarity } } proc adi_ip_add_core_dependencies {vlnvs} { foreach file_group [ipx::get_file_groups * -of_objects [ipx::current_core]] { foreach vlnv $vlnvs { ipx::add_subcore $vlnv $file_group } } } proc adi_if_define {name} { ipx::create_abstraction_definition ADI user ${name}_rtl 1.0 ipx::create_bus_definition ADI user $name 1.0 set_property xml_file_name ${name}_rtl.xml [ipx::current_busabs] set_property xml_file_name ${name}.xml [ipx::current_busdef] set_property bus_type_vlnv ADI:user:${name}:1.0 [ipx::current_busabs] ipx::save_abstraction_definition [ipx::current_busabs] ipx::save_bus_definition [ipx::current_busdef] } proc adi_if_ports {dir width name {type none}} { ipx::add_bus_abstraction_port $name [ipx::current_busabs] set m_intf [ipx::get_bus_abstraction_ports $name -of_objects [ipx::current_busabs]] set_property master_presence required $m_intf set_property slave_presence required $m_intf set_property master_width $width $m_intf set_property slave_width $width $m_intf set m_dir "in" set s_dir "out" if {$dir eq "output"} { set m_dir "out" set s_dir "in" } set_property master_direction $m_dir $m_intf set_property slave_direction $s_dir $m_intf if {$type ne "none"} { set_property is_${type} true $m_intf } ipx::save_bus_definition [ipx::current_busdef] ipx::save_abstraction_definition [ipx::current_busabs] } proc adi_if_infer_bus {if_name mode name maps} { ipx::add_bus_interface $name [ipx::current_core] set m_bus_if [ipx::get_bus_interfaces $name -of_objects [ipx::current_core]] set_property abstraction_type_vlnv ${if_name}_rtl:1.0 $m_bus_if set_property bus_type_vlnv ${if_name}:1.0 $m_bus_if set_property interface_mode $mode $m_bus_if foreach map $maps { set m_maps [regexp -all -inline {\S+} $map] lassign $m_maps p_name p_map ipx::add_port_map $p_name $m_bus_if set_property physical_name $p_map [ipx::get_port_maps $p_name -of_objects $m_bus_if] } } bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/scripts/adi_ip_alt.tcl000066400000000000000000000037521457144405000272650ustar00rootroot00000000000000 # keep interface-mess out of the way - keeping it pretty is a waste of time proc ad_alt_intf {type name dir width {arg_1 ""} {arg_2 ""}} { if {(($type eq "clock") && ($dir eq "input"))} { add_interface if_${name} clock sink add_interface_port if_${name} ${name} clk ${dir} ${width} return } if {(($type eq "clock") && ($dir eq "output"))} { add_interface if_${name} clock source add_interface_port if_${name} ${name} clk ${dir} ${width} return } if {(($type eq "reset") && ($dir eq "input"))} { add_interface if_${name} reset sink add_interface_port if_${name} ${name} reset ${dir} ${width} set_interface_property if_${name} associatedclock ${arg_1} return } if {(($type eq "reset") && ($dir eq "output"))} { add_interface if_${name} reset source add_interface_port if_${name} ${name} reset ${dir} ${width} set_interface_property if_${name} associatedclock ${arg_1} set_interface_property if_${name} associatedResetSinks ${arg_2} return } if {(($type eq "reset-n") && ($dir eq "input"))} { add_interface if_${name} reset sink add_interface_port if_${name} ${name} reset_n ${dir} ${width} set_interface_property if_${name} associatedclock ${arg_1} return } if {(($type eq "reset-n") && ($dir eq "output"))} { add_interface if_${name} reset source add_interface_port if_${name} ${name} reset_n ${dir} ${width} set_interface_property if_${name} associatedclock ${arg_1} set_interface_property if_${name} associatedResetSinks ${arg_2} return } if {(($type eq "intr") && ($dir eq "output"))} { add_interface if_${name} interrupt source add_interface_port if_${name} ${name} irq ${dir} ${width} set_interface_property if_${name} associatedclock ${arg_1} return } set remap $arg_1 if {$arg_1 eq ""} { set remap $name } if {$type eq "signal"} { add_interface if_${name} conduit end add_interface_port if_${name} ${name} ${remap} ${dir} ${width} return } } bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/util_axis_fifo/000077500000000000000000000000001457144405000260025ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/util_axis_fifo/Makefile000066400000000000000000000023661457144405000274510ustar00rootroot00000000000000#################################################################################### #################################################################################### ## Copyright 2011(c) Analog Devices, Inc. ## Auto-generated, do not modify! #################################################################################### #################################################################################### M_DEPS := util_axis_fifo_ip.tcl M_DEPS += ../scripts/adi_env.tcl M_DEPS += ../scripts/adi_ip.tcl M_DEPS += ../common/sync_bits.v M_DEPS += ../common/sync_gray.v M_DEPS += address_gray.v M_DEPS += address_gray_pipelined.v M_DEPS += address_sync.v M_DEPS += util_axis_fifo.v M_VIVADO := vivado -mode batch -source M_FLIST := *.cache M_FLIST += *.data M_FLIST += *.xpr M_FLIST += *.log M_FLIST += component.xml M_FLIST += *.jou M_FLIST += xgui M_FLIST += .Xil .PHONY: all clean clean-all all: util_axis_fifo.xpr clean:clean-all clean-all: rm -rf $(M_FLIST) util_axis_fifo.xpr: $(M_DEPS) rm -rf $(M_FLIST) $(M_VIVADO) util_axis_fifo_ip.tcl >> util_axis_fifo_ip.log 2>&1 #################################################################################### #################################################################################### bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/util_axis_fifo/address_gray.v000066400000000000000000000121531457144405000306420ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2013(c) Analog Devices, Inc. // Author: Lars-Peter Clausen // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** module fifo_address_gray ( input m_axis_aclk, input m_axis_aresetn, input m_axis_ready, output reg m_axis_valid, output reg [ADDRESS_WIDTH:0] m_axis_level, input s_axis_aclk, input s_axis_aresetn, output reg s_axis_ready, input s_axis_valid, output reg s_axis_empty, output [ADDRESS_WIDTH-1:0] s_axis_waddr, output reg [ADDRESS_WIDTH:0] s_axis_room ); parameter ADDRESS_WIDTH = 4; reg [ADDRESS_WIDTH:0] _s_axis_waddr = 'h00; reg [ADDRESS_WIDTH:0] _s_axis_waddr_next; reg [ADDRESS_WIDTH:0] _m_axis_raddr = 'h00; reg [ADDRESS_WIDTH:0] _m_axis_raddr_next; reg [ADDRESS_WIDTH:0] s_axis_waddr_gray = 'h00; wire [ADDRESS_WIDTH:0] s_axis_waddr_gray_next; wire [ADDRESS_WIDTH:0] s_axis_raddr_gray; reg [ADDRESS_WIDTH:0] m_axis_raddr_gray = 'h00; wire [ADDRESS_WIDTH:0] m_axis_raddr_gray_next; wire [ADDRESS_WIDTH:0] m_axis_waddr_gray; assign s_axis_waddr = _s_axis_waddr[ADDRESS_WIDTH-1:0]; always @(*) begin if (s_axis_ready && s_axis_valid) _s_axis_waddr_next <= _s_axis_waddr + 1; else _s_axis_waddr_next <= _s_axis_waddr; end assign s_axis_waddr_gray_next = _s_axis_waddr_next ^ _s_axis_waddr_next[ADDRESS_WIDTH:1]; always @(posedge s_axis_aclk) begin if (s_axis_aresetn == 1'b0) begin _s_axis_waddr <= 'h00; s_axis_waddr_gray <= 'h00; end else begin _s_axis_waddr <= _s_axis_waddr_next; s_axis_waddr_gray <= s_axis_waddr_gray_next; end end always @(*) begin if (m_axis_ready && m_axis_valid) _m_axis_raddr_next <= _m_axis_raddr + 1; else _m_axis_raddr_next <= _m_axis_raddr; end assign m_axis_raddr_gray_next = _m_axis_raddr_next ^ _m_axis_raddr_next[ADDRESS_WIDTH:1]; always @(posedge m_axis_aclk) begin if (m_axis_aresetn == 1'b0) begin _m_axis_raddr <= 'h00; m_axis_raddr_gray <= 'h00; end else begin _m_axis_raddr <= _m_axis_raddr_next; m_axis_raddr_gray <= m_axis_raddr_gray_next; end end sync_bits #( .NUM_OF_BITS(ADDRESS_WIDTH + 1) ) i_waddr_sync ( .out_clk(m_axis_aclk), .out_resetn(m_axis_aresetn), .in(s_axis_waddr_gray), .out(m_axis_waddr_gray) ); sync_bits #( .NUM_OF_BITS(ADDRESS_WIDTH + 1) ) i_raddr_sync ( .out_clk(s_axis_aclk), .out_resetn(s_axis_aresetn), .in(m_axis_raddr_gray), .out(s_axis_raddr_gray) ); always @(posedge s_axis_aclk) begin if (s_axis_aresetn == 1'b0) begin s_axis_ready <= 1'b1; s_axis_empty <= 1'b1; end else begin s_axis_ready <= (s_axis_raddr_gray[ADDRESS_WIDTH] == s_axis_waddr_gray_next[ADDRESS_WIDTH] || s_axis_raddr_gray[ADDRESS_WIDTH-1] == s_axis_waddr_gray_next[ADDRESS_WIDTH-1] || s_axis_raddr_gray[ADDRESS_WIDTH-2:0] != s_axis_waddr_gray_next[ADDRESS_WIDTH-2:0]); s_axis_empty <= s_axis_raddr_gray == s_axis_waddr_gray_next; end end always @(posedge m_axis_aclk) begin if (s_axis_aresetn == 1'b0) m_axis_valid <= 1'b0; else begin m_axis_valid <= m_axis_waddr_gray != m_axis_raddr_gray_next; end end endmodule bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/util_axis_fifo/address_gray_pipelined.v000066400000000000000000000115761457144405000327030ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2013(c) Analog Devices, Inc. // Author: Lars-Peter Clausen // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** module fifo_address_gray_pipelined ( input m_axis_aclk, input m_axis_aresetn, input m_axis_ready, output reg m_axis_valid, output [ADDRESS_WIDTH-1:0] m_axis_raddr, output reg [ADDRESS_WIDTH:0] m_axis_level, input s_axis_aclk, input s_axis_aresetn, output reg s_axis_ready, input s_axis_valid, output reg s_axis_empty, output [ADDRESS_WIDTH-1:0] s_axis_waddr, output reg [ADDRESS_WIDTH:0] s_axis_room ); parameter ADDRESS_WIDTH = 4; reg [ADDRESS_WIDTH:0] _s_axis_waddr = 'h00; reg [ADDRESS_WIDTH:0] _s_axis_waddr_next; wire [ADDRESS_WIDTH:0] _s_axis_raddr; reg [ADDRESS_WIDTH:0] _m_axis_raddr = 'h00; reg [ADDRESS_WIDTH:0] _m_axis_raddr_next; wire [ADDRESS_WIDTH:0] _m_axis_waddr; assign s_axis_waddr = _s_axis_waddr[ADDRESS_WIDTH-1:0]; assign m_axis_raddr = _m_axis_raddr[ADDRESS_WIDTH-1:0]; always @(*) begin if (s_axis_ready && s_axis_valid) _s_axis_waddr_next <= _s_axis_waddr + 1; else _s_axis_waddr_next <= _s_axis_waddr; end always @(posedge s_axis_aclk) begin if (s_axis_aresetn == 1'b0) begin _s_axis_waddr <= 'h00; end else begin _s_axis_waddr <= _s_axis_waddr_next; end end always @(*) begin if (m_axis_ready && m_axis_valid) _m_axis_raddr_next <= _m_axis_raddr + 1; else _m_axis_raddr_next <= _m_axis_raddr; end always @(posedge m_axis_aclk) begin if (m_axis_aresetn == 1'b0) begin _m_axis_raddr <= 'h00; end else begin _m_axis_raddr <= _m_axis_raddr_next; end end sync_gray #( .DATA_WIDTH(ADDRESS_WIDTH + 1) ) i_waddr_sync ( .in_clk(s_axis_aclk), .in_resetn(s_axis_aresetn), .out_clk(m_axis_aclk), .out_resetn(m_axis_aresetn), .in_count(_s_axis_waddr), .out_count(_m_axis_waddr) ); sync_gray #( .DATA_WIDTH(ADDRESS_WIDTH + 1) ) i_raddr_sync ( .in_clk(m_axis_aclk), .in_resetn(m_axis_aresetn), .out_clk(s_axis_aclk), .out_resetn(s_axis_aresetn), .in_count(_m_axis_raddr), .out_count(_s_axis_raddr) ); always @(posedge s_axis_aclk) begin if (s_axis_aresetn == 1'b0) begin s_axis_ready <= 1'b1; s_axis_empty <= 1'b1; s_axis_room <= 2**ADDRESS_WIDTH; end else begin s_axis_ready <= (_s_axis_raddr[ADDRESS_WIDTH] == _s_axis_waddr_next[ADDRESS_WIDTH] || _s_axis_raddr[ADDRESS_WIDTH-1:0] != _s_axis_waddr_next[ADDRESS_WIDTH-1:0]); s_axis_empty <= _s_axis_raddr == _s_axis_waddr_next; s_axis_room <= _s_axis_raddr - _s_axis_waddr_next + 2**ADDRESS_WIDTH; end end always @(posedge m_axis_aclk) begin if (m_axis_aresetn == 1'b0) begin m_axis_valid <= 1'b0; m_axis_level <= 'h00; end else begin m_axis_valid <= _m_axis_waddr != _m_axis_raddr_next; m_axis_level <= _m_axis_waddr - _m_axis_raddr_next; end end endmodule bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/util_axis_fifo/address_sync.v000066400000000000000000000073261457144405000306620ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2013(c) Analog Devices, Inc. // Author: Lars-Peter Clausen // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** module fifo_address_sync ( input clk, input resetn, input m_axis_ready, output reg m_axis_valid, output reg [ADDRESS_WIDTH-1:0] m_axis_raddr, output [ADDRESS_WIDTH:0] m_axis_level, output reg s_axis_ready, input s_axis_valid, output reg s_axis_empty, output reg [ADDRESS_WIDTH-1:0] s_axis_waddr, output [ADDRESS_WIDTH:0] s_axis_room ); parameter ADDRESS_WIDTH = 4; reg [ADDRESS_WIDTH:0] room = 2**ADDRESS_WIDTH; reg [ADDRESS_WIDTH:0] level = 'h00; reg [ADDRESS_WIDTH:0] level_next; assign s_axis_room = room; assign m_axis_level = level; wire read = m_axis_ready & m_axis_valid; wire write = s_axis_ready & s_axis_valid; always @(posedge clk) begin if (resetn == 1'b0) begin s_axis_waddr <= 'h00; m_axis_raddr <= 'h00; end else begin if (write) s_axis_waddr <= s_axis_waddr + 1'b1; if (read) m_axis_raddr <= m_axis_raddr + 1'b1; end end always @(*) begin if (read & ~write) level_next <= level - 1'b1; else if (~read & write) level_next <= level + 1'b1; else level_next <= level; end always @(posedge clk) begin if (resetn == 1'b0) begin m_axis_valid <= 1'b0; s_axis_ready <= 1'b0; level <= 'h00; room <= 2**ADDRESS_WIDTH; s_axis_empty <= 'h00; end else begin level <= level_next; room <= 2**ADDRESS_WIDTH - level_next; m_axis_valid <= level_next != 0; s_axis_ready <= level_next != 2**ADDRESS_WIDTH; s_axis_empty <= level_next == 0; end end endmodule bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/util_axis_fifo/util_axis_fifo.v000066400000000000000000000135101457144405000311750ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2013(c) Analog Devices, Inc. // Author: Lars-Peter Clausen // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** module util_axis_fifo ( input m_axis_aclk, input m_axis_aresetn, input m_axis_ready, output m_axis_valid, output [DATA_WIDTH-1:0] m_axis_data, output [ADDRESS_WIDTH:0] m_axis_level, input s_axis_aclk, input s_axis_aresetn, output s_axis_ready, input s_axis_valid, input [DATA_WIDTH-1:0] s_axis_data, output s_axis_empty, output [ADDRESS_WIDTH:0] s_axis_room ); parameter DATA_WIDTH = 64; parameter ASYNC_CLK = 1; parameter ADDRESS_WIDTH = 4; parameter S_AXIS_REGISTERED = 1; generate if (ADDRESS_WIDTH == 0) begin reg [DATA_WIDTH-1:0] cdc_sync_fifo_ram; reg s_axis_waddr = 1'b0; reg m_axis_raddr = 1'b0; wire m_axis_waddr; wire s_axis_raddr; sync_bits #( .NUM_OF_BITS(1), .ASYNC_CLK(ASYNC_CLK) ) i_waddr_sync ( .out_clk(m_axis_aclk), .out_resetn(m_axis_aresetn), .in(s_axis_waddr), .out(m_axis_waddr) ); sync_bits #( .NUM_OF_BITS(1), .ASYNC_CLK(ASYNC_CLK) ) i_raddr_sync ( .out_clk(s_axis_aclk), .out_resetn(s_axis_aresetn), .in(m_axis_raddr), .out(s_axis_raddr) ); assign m_axis_valid = m_axis_raddr != m_axis_waddr; assign m_axis_level = m_axis_valid; assign s_axis_ready = s_axis_raddr == s_axis_waddr; assign s_axis_empty = s_axis_ready; assign s_axis_room = s_axis_ready; always @(posedge s_axis_aclk) begin if (s_axis_ready) cdc_sync_fifo_ram <= s_axis_data; end always @(posedge s_axis_aclk) begin if (s_axis_aresetn == 1'b0) begin s_axis_waddr <= 1'b0; end else begin if (s_axis_ready & s_axis_valid) begin s_axis_waddr <= s_axis_waddr + 1'b1; end end end always @(posedge m_axis_aclk) begin if (m_axis_aresetn == 1'b0) begin m_axis_raddr <= 1'b0; end else begin if (m_axis_valid & m_axis_ready) m_axis_raddr <= m_axis_raddr + 1'b1; end end assign m_axis_data = cdc_sync_fifo_ram; end else begin reg [DATA_WIDTH-1:0] ram[0:2**ADDRESS_WIDTH-1]; wire [ADDRESS_WIDTH-1:0] s_axis_waddr; wire [ADDRESS_WIDTH-1:0] m_axis_raddr; wire _m_axis_ready; wire _m_axis_valid; if (ASYNC_CLK == 1) begin fifo_address_gray_pipelined #( .ADDRESS_WIDTH(ADDRESS_WIDTH) ) i_address_gray ( .m_axis_aclk(m_axis_aclk), .m_axis_aresetn(m_axis_aresetn), .m_axis_ready(_m_axis_ready), .m_axis_valid(_m_axis_valid), .m_axis_raddr(m_axis_raddr), .m_axis_level(m_axis_level), .s_axis_aclk(s_axis_aclk), .s_axis_aresetn(s_axis_aresetn), .s_axis_ready(s_axis_ready), .s_axis_valid(s_axis_valid), .s_axis_empty(s_axis_empty), .s_axis_waddr(s_axis_waddr), .s_axis_room(s_axis_room) ); end else begin fifo_address_sync #( .ADDRESS_WIDTH(ADDRESS_WIDTH) ) i_address_sync ( .clk(m_axis_aclk), .resetn(m_axis_aresetn), .m_axis_ready(_m_axis_ready), .m_axis_valid(_m_axis_valid), .m_axis_raddr(m_axis_raddr), .m_axis_level(m_axis_level), .s_axis_ready(s_axis_ready), .s_axis_valid(s_axis_valid), .s_axis_empty(s_axis_empty), .s_axis_waddr(s_axis_waddr), .s_axis_room(s_axis_room) ); end always @(posedge s_axis_aclk) begin if (s_axis_ready) ram[s_axis_waddr] <= s_axis_data; end if (S_AXIS_REGISTERED == 1) begin reg [DATA_WIDTH-1:0] data; reg valid; always @(posedge m_axis_aclk) begin if (m_axis_aresetn == 1'b0) begin valid <= 1'b0; end else begin if (_m_axis_valid) valid <= 1'b1; else if (m_axis_ready) valid <= 1'b0; end end always @(posedge m_axis_aclk) begin if (~valid || m_axis_ready) data <= ram[m_axis_raddr]; end assign _m_axis_ready = ~valid || m_axis_ready; assign m_axis_data = data; assign m_axis_valid = valid; end else begin assign _m_axis_ready = m_axis_ready; assign m_axis_valid = _m_axis_valid; assign m_axis_data = ram[m_axis_raddr]; end end endgenerate endmodule bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/util_axis_fifo/util_axis_fifo_ip.tcl000066400000000000000000000016261457144405000322070ustar00rootroot00000000000000 source ../scripts/adi_env.tcl source $ad_hdl_dir/library/scripts/adi_ip.tcl adi_ip_create util_axis_fifo adi_ip_files util_axis_fifo [list \ "$ad_hdl_dir/library/common/sync_bits.v" \ "$ad_hdl_dir/library/common/sync_gray.v" \ "address_gray.v" \ "address_gray_pipelined.v" \ "address_sync.v" \ "util_axis_fifo.v" \ ] adi_ip_properties_lite util_axis_fifo adi_add_bus "S_AXIS" "slave" \ "xilinx.com:interface:axis_rtl:1.0" \ "xilinx.com:interface:axis:1.0" \ { {"s_axis_valid" "TVALID"} \ {"s_axis_ready" "TREADY"} \ {"s_axis_data" "TDATA"} \ } adi_add_bus "M_AXIS" "master" \ "xilinx.com:interface:axis_rtl:1.0" \ "xilinx.com:interface:axis:1.0" \ { {"m_axis_valid" "TVALID"} \ {"m_axis_ready" "TREADY"} \ {"m_axis_data" "TDATA"} \ } adi_add_bus_clock "m_axis_aclk" "M_AXIS" "m_axis_aresetn" adi_add_bus_clock "s_axis_aclk" "S_AXIS" "m_axis_aresetn" ipx::save_core [ipx::current_core] bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/util_axis_resize/000077500000000000000000000000001457144405000263605ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/util_axis_resize/Makefile000066400000000000000000000021551457144405000300230ustar00rootroot00000000000000#################################################################################### #################################################################################### ## Copyright 2011(c) Analog Devices, Inc. ## Auto-generated, do not modify! #################################################################################### #################################################################################### M_DEPS := util_axis_resize_ip.tcl M_DEPS += ../scripts/adi_env.tcl M_DEPS += ../scripts/adi_ip.tcl M_DEPS += util_axis_resize.v M_VIVADO := vivado -mode batch -source M_FLIST := *.cache M_FLIST += *.data M_FLIST += *.xpr M_FLIST += *.log M_FLIST += component.xml M_FLIST += *.jou M_FLIST += xgui M_FLIST += .Xil .PHONY: all clean clean-all all: util_axis_resize.xpr clean:clean-all clean-all: rm -rf $(M_FLIST) util_axis_resize.xpr: $(M_DEPS) rm -rf $(M_FLIST) $(M_VIVADO) util_axis_resize_ip.tcl >> util_axis_resize_ip.log 2>&1 #################################################################################### #################################################################################### bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/util_axis_resize/util_axis_resize.v000066400000000000000000000116471457144405000321420ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2013(c) Analog Devices, Inc. // Author: Lars-Peter Clausen // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** module util_axis_resize ( input clk, input resetn, input s_valid, output s_ready, input [SLAVE_DATA_WIDTH-1:0] s_data, output m_valid, input m_ready, output [MASTER_DATA_WIDTH-1:0] m_data ); parameter MASTER_DATA_WIDTH = 64; parameter SLAVE_DATA_WIDTH = 64; parameter BIG_ENDIAN = 0; generate if (SLAVE_DATA_WIDTH == MASTER_DATA_WIDTH) begin assign m_valid = s_valid; assign s_ready = m_ready; assign m_data = s_data; end else if (SLAVE_DATA_WIDTH < MASTER_DATA_WIDTH) begin localparam RATIO = MASTER_DATA_WIDTH / SLAVE_DATA_WIDTH; reg [MASTER_DATA_WIDTH-1:0] data; reg [$clog2(RATIO)-1:0] count; reg valid; always @(posedge clk) begin if (resetn == 1'b0) begin count <= RATIO - 1; valid <= 1'b0; end else begin if (count == 'h00 && s_ready == 1'b1 && s_valid == 1'b1) valid <= 1'b1; else if (m_ready == 1'b1) valid <= 1'b0; if (s_ready == 1'b1 && s_valid == 1'b1) begin if (count == 'h00) count <= RATIO - 1; else count <= count - 1'b1; end end end always @(posedge clk) begin if (s_ready == 1'b1 && s_valid == 1'b1) if (BIG_ENDIAN == 1) begin data <= {data[MASTER_DATA_WIDTH-SLAVE_DATA_WIDTH-1:0], s_data}; end else begin data <= {s_data, data[MASTER_DATA_WIDTH-1:SLAVE_DATA_WIDTH]}; end end assign s_ready = ~valid || m_ready; assign m_valid = valid; assign m_data = data; end else begin localparam RATIO = SLAVE_DATA_WIDTH / MASTER_DATA_WIDTH; reg [SLAVE_DATA_WIDTH-1:0] data; reg [$clog2(RATIO)-1:0] count; reg valid; always @(posedge clk) begin if (resetn == 1'b0) begin count <= RATIO - 1; valid <= 1'b0; end else begin if (s_valid == 1'b1 && s_ready == 1'b1) valid <= 1'b1; else if (count == 'h0 && m_ready == 1'b1 && m_valid == 1'b1) valid <= 1'b0; if (m_ready == 1'b1 && m_valid == 1'b1) begin if (count == 'h00) count <= RATIO - 1; else count <= count - 1'b1; end end end always @(posedge clk) begin if (s_ready == 1'b1 && s_valid == 1'b1) begin data <= s_data; end else if (m_ready == 1'b1 && m_valid == 1'b1) begin if (BIG_ENDIAN == 1) begin data[SLAVE_DATA_WIDTH-1:MASTER_DATA_WIDTH] <= data[SLAVE_DATA_WIDTH-MASTER_DATA_WIDTH-1:0]; end else begin data[SLAVE_DATA_WIDTH-MASTER_DATA_WIDTH-1:0] <= data[SLAVE_DATA_WIDTH-1:MASTER_DATA_WIDTH]; end end end assign s_ready = ~valid || (m_ready && count == 'h0); assign m_valid = valid; assign m_data = BIG_ENDIAN == 1 ? data[SLAVE_DATA_WIDTH-1:SLAVE_DATA_WIDTH-MASTER_DATA_WIDTH] : data[MASTER_DATA_WIDTH-1:0]; end endgenerate endmodule bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/util_axis_resize/util_axis_resize_ip.tcl000066400000000000000000000012361457144405000331400ustar00rootroot00000000000000 source ../scripts/adi_env.tcl source $ad_hdl_dir/library/scripts/adi_ip.tcl adi_ip_create util_axis_resize adi_ip_files util_axis_resize [list \ "util_axis_resize.v" ] adi_ip_properties_lite util_axis_resize adi_add_bus "s_axis" "slave" \ "xilinx.com:interface:axis_rtl:1.0" \ "xilinx.com:interface:axis:1.0" \ { {"s_valid" "TVALID"} \ {"s_ready" "TREADY"} \ {"s_data" "TDATA"} \ } adi_add_bus "m_axis" "master" \ "xilinx.com:interface:axis_rtl:1.0" \ "xilinx.com:interface:axis:1.0" \ { {"m_valid" "TVALID"} \ {"m_ready" "TREADY"} \ {"m_data" "TDATA"} \ } adi_add_bus_clock "clk" "s_axis:m_axis" "resetn" ipx::save_core [ipx::current_core] bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/util_cpack/000077500000000000000000000000001457144405000251145ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/util_cpack/Makefile000066400000000000000000000022371457144405000265600ustar00rootroot00000000000000#################################################################################### #################################################################################### ## Copyright 2011(c) Analog Devices, Inc. ## Auto-generated, do not modify! #################################################################################### #################################################################################### M_DEPS := util_cpack_ip.tcl M_DEPS += ../scripts/adi_env.tcl M_DEPS += ../scripts/adi_ip.tcl M_DEPS += util_cpack_mux.v M_DEPS += util_cpack_dsf.v M_DEPS += util_cpack.v M_DEPS += util_cpack_constr.xdc M_VIVADO := vivado -mode batch -source M_FLIST := *.cache M_FLIST += *.data M_FLIST += *.xpr M_FLIST += *.log M_FLIST += component.xml M_FLIST += *.jou M_FLIST += xgui M_FLIST += .Xil .PHONY: all clean clean-all all: util_cpack.xpr clean:clean-all clean-all: rm -rf $(M_FLIST) util_cpack.xpr: $(M_DEPS) rm -rf $(M_FLIST) $(M_VIVADO) util_cpack_ip.tcl >> util_cpack_ip.log 2>&1 #################################################################################### #################################################################################### bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/util_cpack/util_cpack.qip000066400000000000000000000010071457144405000277430ustar00rootroot00000000000000# This file gets copied by Qsys several layers into the work directory. # Any relative paths defined here must be relative to that directory. set ad_hdl_dir [file normalize [file join $::quartus(qip_path) ../../../../../../fpga/ip/analogdevicesinc/hdl/]] set_global_assignment -name VERILOG_FILE $ad_hdl_dir/library/util_cpack/util_cpack_mux.v set_global_assignment -name VERILOG_FILE $ad_hdl_dir/library/util_cpack/util_cpack_dsf.v set_global_assignment -name VERILOG_FILE $ad_hdl_dir/library/util_cpack/util_cpack.v bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/util_cpack/util_cpack.v000077500000000000000000000335131457144405000274310ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module util_cpack ( // adc interface adc_rst, adc_clk, adc_enable_0, adc_valid_0, adc_data_0, adc_enable_1, adc_valid_1, adc_data_1, adc_enable_2, adc_valid_2, adc_data_2, adc_enable_3, adc_valid_3, adc_data_3, adc_enable_4, adc_valid_4, adc_data_4, adc_enable_5, adc_valid_5, adc_data_5, adc_enable_6, adc_valid_6, adc_data_6, adc_enable_7, adc_valid_7, adc_data_7, // fifo interface adc_valid, adc_sync, adc_data); // parameters parameter CHANNEL_DATA_WIDTH = 32; parameter NUM_OF_CHANNELS = 8; localparam SAMPLES_PCHANNEL = CHANNEL_DATA_WIDTH/16; localparam NUM_OF_CHANNELS_M = 8; localparam BUS_DATA_WIDTH = NUM_OF_CHANNELS*CHANNEL_DATA_WIDTH; localparam NUM_OF_CHANNELS_P = NUM_OF_CHANNELS; // adc interface input adc_rst; input adc_clk; input adc_enable_0; input adc_valid_0; input [(CHANNEL_DATA_WIDTH-1):0] adc_data_0; input adc_enable_1; input adc_valid_1; input [(CHANNEL_DATA_WIDTH-1):0] adc_data_1; input adc_enable_2; input adc_valid_2; input [(CHANNEL_DATA_WIDTH-1):0] adc_data_2; input adc_enable_3; input adc_valid_3; input [(CHANNEL_DATA_WIDTH-1):0] adc_data_3; input adc_enable_4; input adc_valid_4; input [(CHANNEL_DATA_WIDTH-1):0] adc_data_4; input adc_enable_5; input adc_valid_5; input [(CHANNEL_DATA_WIDTH-1):0] adc_data_5; input adc_enable_6; input adc_valid_6; input [(CHANNEL_DATA_WIDTH-1):0] adc_data_6; input adc_enable_7; input adc_valid_7; input [(CHANNEL_DATA_WIDTH-1):0] adc_data_7; // fifo interface output adc_valid; output adc_sync; output [((NUM_OF_CHANNELS*CHANNEL_DATA_WIDTH)-1):0] adc_data; // internal registers reg adc_valid_d = 'd0; reg [((NUM_OF_CHANNELS_M*CHANNEL_DATA_WIDTH)-1):0] adc_data_d = 'd0; reg adc_mux_valid = 'd0; reg [(NUM_OF_CHANNELS_M-1):0] adc_mux_enable = 'd0; reg [((SAMPLES_PCHANNEL*16*79)-1):0] adc_mux_data = 'd0; reg adc_valid = 'd0; reg adc_sync = 'd0; reg [((NUM_OF_CHANNELS*CHANNEL_DATA_WIDTH)-1):0] adc_data = 'd0; // internal signals wire [(NUM_OF_CHANNELS_M-1):0] adc_enable_s; wire [(NUM_OF_CHANNELS_M-1):0] adc_valid_s; wire [((NUM_OF_CHANNELS_M*CHANNEL_DATA_WIDTH)-1):0] adc_data_s; wire [((NUM_OF_CHANNELS_M*CHANNEL_DATA_WIDTH)-1):0] adc_data_intlv_s; wire [(SAMPLES_PCHANNEL-1):0] adc_mux_valid_s; wire [(SAMPLES_PCHANNEL-1):0] adc_mux_enable_0_s; wire [(SAMPLES_PCHANNEL-1):0] adc_mux_enable_1_s; wire [(SAMPLES_PCHANNEL-1):0] adc_mux_enable_2_s; wire [(SAMPLES_PCHANNEL-1):0] adc_mux_enable_3_s; wire [(SAMPLES_PCHANNEL-1):0] adc_mux_enable_4_s; wire [(SAMPLES_PCHANNEL-1):0] adc_mux_enable_5_s; wire [(SAMPLES_PCHANNEL-1):0] adc_mux_enable_6_s; wire [(SAMPLES_PCHANNEL-1):0] adc_mux_enable_7_s; wire [((SAMPLES_PCHANNEL*16*1)-1):0] adc_mux_data_0_s; wire [((SAMPLES_PCHANNEL*16*2)-1):0] adc_mux_data_1_s; wire [((SAMPLES_PCHANNEL*16*3)-1):0] adc_mux_data_2_s; wire [((SAMPLES_PCHANNEL*16*4)-1):0] adc_mux_data_3_s; wire [((SAMPLES_PCHANNEL*16*5)-1):0] adc_mux_data_4_s; wire [((SAMPLES_PCHANNEL*16*6)-1):0] adc_mux_data_5_s; wire [((SAMPLES_PCHANNEL*16*7)-1):0] adc_mux_data_6_s; wire [((SAMPLES_PCHANNEL*16*8)-1):0] adc_mux_data_7_s; wire [(NUM_OF_CHANNELS_M-1):0] adc_dsf_valid_s; wire [(NUM_OF_CHANNELS_M-1):0] adc_dsf_sync_s; wire [(BUS_DATA_WIDTH-1):0] adc_dsf_data_s[(NUM_OF_CHANNELS_M-1):0]; // loop variables genvar n; // making things a bit easier assign adc_enable_s = { adc_enable_7, adc_enable_6, adc_enable_5, adc_enable_4, adc_enable_3, adc_enable_2, adc_enable_1, adc_enable_0}; assign adc_valid_s = { adc_valid_7, adc_valid_6, adc_valid_5, adc_valid_4, adc_valid_3, adc_valid_2, adc_valid_1, adc_valid_0}; assign adc_data_s = { adc_data_7, adc_data_6, adc_data_5, adc_data_4, adc_data_3, adc_data_2, adc_data_1, adc_data_0}; // adc first channel must be always on (doesn't have to be enabled) always @(posedge adc_clk) begin if (adc_rst == 1'b1) begin adc_valid_d <= 'd0; end else begin adc_valid_d <= adc_valid_0; end end // mw requires unused to be zero generate for (n = 0; n < NUM_OF_CHANNELS_M; n = n + 1) begin: g_in always @(posedge adc_clk) begin if ((adc_rst == 1'b1) && (adc_enable_s[n] == 1'b0)) begin adc_data_d[((CHANNEL_DATA_WIDTH*(n+1))-1):(CHANNEL_DATA_WIDTH*n)] <= 'd0; end else if (adc_valid_s[n] == 1'b1) begin adc_data_d[((CHANNEL_DATA_WIDTH*(n+1))-1):(CHANNEL_DATA_WIDTH*n)] <= adc_data_s[((CHANNEL_DATA_WIDTH*(n+1))-1):(CHANNEL_DATA_WIDTH*n)]; end end end endgenerate // interleave data generate for (n = 0; n < SAMPLES_PCHANNEL; n = n + 1) begin: g_intlv assign adc_data_intlv_s[((16*NUM_OF_CHANNELS_M*(n+1))-1):(16*NUM_OF_CHANNELS_M*n)] = { adc_data_d[(((CHANNEL_DATA_WIDTH*7)+(16*(n+1)))-1):((CHANNEL_DATA_WIDTH*7)+(16*n))], adc_data_d[(((CHANNEL_DATA_WIDTH*6)+(16*(n+1)))-1):((CHANNEL_DATA_WIDTH*6)+(16*n))], adc_data_d[(((CHANNEL_DATA_WIDTH*5)+(16*(n+1)))-1):((CHANNEL_DATA_WIDTH*5)+(16*n))], adc_data_d[(((CHANNEL_DATA_WIDTH*4)+(16*(n+1)))-1):((CHANNEL_DATA_WIDTH*4)+(16*n))], adc_data_d[(((CHANNEL_DATA_WIDTH*3)+(16*(n+1)))-1):((CHANNEL_DATA_WIDTH*3)+(16*n))], adc_data_d[(((CHANNEL_DATA_WIDTH*2)+(16*(n+1)))-1):((CHANNEL_DATA_WIDTH*2)+(16*n))], adc_data_d[(((CHANNEL_DATA_WIDTH*1)+(16*(n+1)))-1):((CHANNEL_DATA_WIDTH*1)+(16*n))], adc_data_d[(((CHANNEL_DATA_WIDTH*0)+(16*(n+1)))-1):((CHANNEL_DATA_WIDTH*0)+(16*n))]}; end endgenerate // mux generate for (n = 0; n < SAMPLES_PCHANNEL; n = n + 1) begin: g_mux util_cpack_mux i_mux ( .adc_clk (adc_clk), .adc_valid (adc_valid_d), .adc_enable (adc_enable_s), .adc_data (adc_data_intlv_s[((16*NUM_OF_CHANNELS_M*(n+1))-1):(16*NUM_OF_CHANNELS_M*n)]), .adc_mux_valid (adc_mux_valid_s[n]), .adc_mux_enable_0 (adc_mux_enable_0_s[n]), .adc_mux_data_0 (adc_mux_data_0_s[(((n+1)*16*1)-1):(n*16*1)]), .adc_mux_enable_1 (adc_mux_enable_1_s[n]), .adc_mux_data_1 (adc_mux_data_1_s[(((n+1)*16*2)-1):(n*16*2)]), .adc_mux_enable_2 (adc_mux_enable_2_s[n]), .adc_mux_data_2 (adc_mux_data_2_s[(((n+1)*16*3)-1):(n*16*3)]), .adc_mux_enable_3 (adc_mux_enable_3_s[n]), .adc_mux_data_3 (adc_mux_data_3_s[(((n+1)*16*4)-1):(n*16*4)]), .adc_mux_enable_4 (adc_mux_enable_4_s[n]), .adc_mux_data_4 (adc_mux_data_4_s[(((n+1)*16*5)-1):(n*16*5)]), .adc_mux_enable_5 (adc_mux_enable_5_s[n]), .adc_mux_data_5 (adc_mux_data_5_s[(((n+1)*16*6)-1):(n*16*6)]), .adc_mux_enable_6 (adc_mux_enable_6_s[n]), .adc_mux_data_6 (adc_mux_data_6_s[(((n+1)*16*7)-1):(n*16*7)]), .adc_mux_enable_7 (adc_mux_enable_7_s[n]), .adc_mux_data_7 (adc_mux_data_7_s[(((n+1)*16*8)-1):(n*16*8)])); end endgenerate // concat always @(posedge adc_clk) begin adc_mux_valid <= & adc_mux_valid_s; adc_mux_enable[0] <= & adc_mux_enable_0_s; adc_mux_enable[1] <= & adc_mux_enable_1_s; adc_mux_enable[2] <= & adc_mux_enable_2_s; adc_mux_enable[3] <= & adc_mux_enable_3_s; adc_mux_enable[4] <= & adc_mux_enable_4_s; adc_mux_enable[5] <= & adc_mux_enable_5_s; adc_mux_enable[6] <= & adc_mux_enable_6_s; adc_mux_enable[7] <= & adc_mux_enable_7_s; adc_mux_data[((SAMPLES_PCHANNEL*16* 9)-1):(SAMPLES_PCHANNEL*16* 1)] <= 'd0; adc_mux_data[((SAMPLES_PCHANNEL*16*19)-1):(SAMPLES_PCHANNEL*16*12)] <= 'd0; adc_mux_data[((SAMPLES_PCHANNEL*16*29)-1):(SAMPLES_PCHANNEL*16*23)] <= 'd0; adc_mux_data[((SAMPLES_PCHANNEL*16*39)-1):(SAMPLES_PCHANNEL*16*34)] <= 'd0; adc_mux_data[((SAMPLES_PCHANNEL*16*49)-1):(SAMPLES_PCHANNEL*16*45)] <= 'd0; adc_mux_data[((SAMPLES_PCHANNEL*16*59)-1):(SAMPLES_PCHANNEL*16*56)] <= 'd0; adc_mux_data[((SAMPLES_PCHANNEL*16*69)-1):(SAMPLES_PCHANNEL*16*67)] <= 'd0; adc_mux_data[((SAMPLES_PCHANNEL*16*79)-1):(SAMPLES_PCHANNEL*16*78)] <= 'd0; adc_mux_data[((SAMPLES_PCHANNEL*16* 1)-1):(SAMPLES_PCHANNEL*16* 0)] <= adc_mux_data_0_s; adc_mux_data[((SAMPLES_PCHANNEL*16*12)-1):(SAMPLES_PCHANNEL*16*10)] <= adc_mux_data_1_s; adc_mux_data[((SAMPLES_PCHANNEL*16*23)-1):(SAMPLES_PCHANNEL*16*20)] <= adc_mux_data_2_s; adc_mux_data[((SAMPLES_PCHANNEL*16*34)-1):(SAMPLES_PCHANNEL*16*30)] <= adc_mux_data_3_s; adc_mux_data[((SAMPLES_PCHANNEL*16*45)-1):(SAMPLES_PCHANNEL*16*40)] <= adc_mux_data_4_s; adc_mux_data[((SAMPLES_PCHANNEL*16*56)-1):(SAMPLES_PCHANNEL*16*50)] <= adc_mux_data_5_s; adc_mux_data[((SAMPLES_PCHANNEL*16*67)-1):(SAMPLES_PCHANNEL*16*60)] <= adc_mux_data_6_s; adc_mux_data[((SAMPLES_PCHANNEL*16*78)-1):(SAMPLES_PCHANNEL*16*70)] <= adc_mux_data_7_s; end // store & fwd generate for (n = 0; n < NUM_OF_CHANNELS_P; n = n + 1) begin: g_dsf util_cpack_dsf #( .NUM_OF_CHANNELS_M (NUM_OF_CHANNELS_M), .NUM_OF_CHANNELS_P (NUM_OF_CHANNELS_P), .CHANNEL_DATA_WIDTH (CHANNEL_DATA_WIDTH), .NUM_OF_CHANNELS_I ((n+1))) i_dsf ( .adc_clk (adc_clk), .adc_valid (adc_mux_valid), .adc_enable (adc_mux_enable[n]), .adc_data (adc_mux_data[((SAMPLES_PCHANNEL*16*((11*n)+1))-1):(SAMPLES_PCHANNEL*16*10*n)]), .adc_dsf_valid (adc_dsf_valid_s[n]), .adc_dsf_sync (adc_dsf_sync_s[n]), .adc_dsf_data (adc_dsf_data_s[n])); end endgenerate generate if (NUM_OF_CHANNELS_M > NUM_OF_CHANNELS_P) begin for (n = NUM_OF_CHANNELS_P; n < NUM_OF_CHANNELS_M; n = n + 1) begin: g_def assign adc_dsf_valid_s[n] = 'd0; assign adc_dsf_sync_s[n] = 'd0; assign adc_dsf_data_s[n] = 'd0; end end endgenerate always @(posedge adc_clk) begin adc_valid <= | adc_dsf_valid_s; adc_sync <= | adc_dsf_sync_s; adc_data <= adc_dsf_data_s[7] | adc_dsf_data_s[6] | adc_dsf_data_s[5] | adc_dsf_data_s[4] | adc_dsf_data_s[3] | adc_dsf_data_s[2] | adc_dsf_data_s[1] | adc_dsf_data_s[0]; end endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/util_cpack/util_cpack_constr.xdc000066400000000000000000000000001457144405000313100ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/util_cpack/util_cpack_dsf.v000077500000000000000000000161401457144405000302620ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module util_cpack_dsf ( // adc interface adc_clk, adc_valid, adc_enable, adc_data, // dma interface adc_dsf_valid, adc_dsf_sync, adc_dsf_data); // parameters parameter CHANNEL_DATA_WIDTH = 32; parameter NUM_OF_CHANNELS_I = 4; parameter NUM_OF_CHANNELS_M = 8; parameter NUM_OF_CHANNELS_P = 4; localparam CH_DCNT = NUM_OF_CHANNELS_P - NUM_OF_CHANNELS_I; localparam I_WIDTH = CHANNEL_DATA_WIDTH*NUM_OF_CHANNELS_I; localparam P_WIDTH = CHANNEL_DATA_WIDTH*NUM_OF_CHANNELS_P; localparam M_WIDTH = CHANNEL_DATA_WIDTH*NUM_OF_CHANNELS_M; // adc interface input adc_clk; input adc_valid; input adc_enable; input [(I_WIDTH-1):0] adc_data; // dma interface output adc_dsf_valid; output adc_dsf_sync; output [(P_WIDTH-1):0] adc_dsf_data; // internal registers reg [ 2:0] adc_samples_int = 'd0; reg [(M_WIDTH-1):0] adc_data_int = 'd0; reg adc_dsf_enable = 'd0; reg adc_dsf_valid_int = 'd0; reg adc_dsf_sync_int = 'd0; reg [(P_WIDTH-1):0] adc_dsf_data_int = 'd0; reg adc_dsf_valid = 'd0; reg adc_dsf_sync = 'd0; reg [(P_WIDTH-1):0] adc_dsf_data = 'd0; // internal signals wire [(M_WIDTH-1):0] adc_data_s; // bypass generate if (NUM_OF_CHANNELS_I == NUM_OF_CHANNELS_P) begin assign adc_data_s = 'd0; always @(posedge adc_clk) begin adc_samples_int <= 'd0; adc_data_int <= 'd0; adc_dsf_enable <= 'd0; adc_dsf_valid_int <= 'd0; adc_dsf_sync_int <= 'd0; adc_dsf_data_int <= 'd0; if (adc_enable == 1'b1) begin adc_dsf_valid <= adc_valid; adc_dsf_sync <= 1'b1; adc_dsf_data <= adc_data; end else begin adc_dsf_valid <= 'b0; adc_dsf_sync <= 'b0; adc_dsf_data <= 'd0; end end end endgenerate // data store & forward generate if (NUM_OF_CHANNELS_P > NUM_OF_CHANNELS_I) begin assign adc_data_s[(M_WIDTH-1):I_WIDTH] = 'd0; assign adc_data_s[(I_WIDTH-1):0] = adc_data; always @(posedge adc_clk) begin if (adc_valid == 1'b1) begin if (adc_samples_int >= CH_DCNT) begin adc_samples_int <= adc_samples_int - CH_DCNT; end else begin adc_samples_int <= adc_samples_int + NUM_OF_CHANNELS_I; end adc_data_int <= {adc_data_s[(I_WIDTH-1):0], adc_data_int[(M_WIDTH-1):I_WIDTH]}; end end always @(posedge adc_clk) begin adc_dsf_enable <= adc_enable; if (adc_samples_int >= CH_DCNT) begin adc_dsf_valid_int <= adc_valid; end else begin adc_dsf_valid_int <= 1'b0; end if (adc_dsf_sync_int == 1'b1) begin if (adc_dsf_valid_int == 1'b1) begin adc_dsf_sync_int <= 1'b0; end end else begin if (adc_samples_int == 3'd0) begin adc_dsf_sync_int <= 1'b1; end end end always @(posedge adc_clk) begin if (adc_valid == 1'b1) begin case (adc_samples_int) 3'b111: adc_dsf_data_int <= {adc_data_s[((CHANNEL_DATA_WIDTH*1)-1):0], adc_data_int[((CHANNEL_DATA_WIDTH*8)-1):(CHANNEL_DATA_WIDTH*1)]}; 3'b110: adc_dsf_data_int <= {adc_data_s[((CHANNEL_DATA_WIDTH*2)-1):0], adc_data_int[((CHANNEL_DATA_WIDTH*8)-1):(CHANNEL_DATA_WIDTH*2)]}; 3'b101: adc_dsf_data_int <= {adc_data_s[((CHANNEL_DATA_WIDTH*3)-1):0], adc_data_int[((CHANNEL_DATA_WIDTH*8)-1):(CHANNEL_DATA_WIDTH*3)]}; 3'b100: adc_dsf_data_int <= {adc_data_s[((CHANNEL_DATA_WIDTH*4)-1):0], adc_data_int[((CHANNEL_DATA_WIDTH*8)-1):(CHANNEL_DATA_WIDTH*4)]}; 3'b011: adc_dsf_data_int <= {adc_data_s[((CHANNEL_DATA_WIDTH*5)-1):0], adc_data_int[((CHANNEL_DATA_WIDTH*8)-1):(CHANNEL_DATA_WIDTH*5)]}; 3'b010: adc_dsf_data_int <= {adc_data_s[((CHANNEL_DATA_WIDTH*6)-1):0], adc_data_int[((CHANNEL_DATA_WIDTH*8)-1):(CHANNEL_DATA_WIDTH*6)]}; 3'b001: adc_dsf_data_int <= {adc_data_s[((CHANNEL_DATA_WIDTH*7)-1):0], adc_data_int[((CHANNEL_DATA_WIDTH*8)-1):(CHANNEL_DATA_WIDTH*7)]}; 3'b000: adc_dsf_data_int <= adc_data_s; default: adc_dsf_data_int <= 'd0; endcase end end always @(posedge adc_clk) begin if (adc_enable == 1'b1) begin adc_dsf_valid <= adc_dsf_valid_int; adc_dsf_sync <= adc_dsf_sync_int; adc_dsf_data <= adc_dsf_data_int[(P_WIDTH-1):0]; end else begin adc_dsf_valid <= 'b0; adc_dsf_sync <= 'b0; adc_dsf_data <= 'd0; end end end endgenerate endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/util_cpack/util_cpack_hw.tcl000077500000000000000000000107501457144405000304420ustar00rootroot00000000000000 package require -exact qsys 13.0 source ../scripts/adi_env.tcl source ../scripts/adi_ip_alt.tcl set_module_property NAME util_cpack set_module_property DESCRIPTION "Channel Pack Utility" set_module_property VERSION 1.0 set_module_property GROUP "Analog Devices" set_module_property DISPLAY_NAME util_cpack set_module_property ELABORATION_CALLBACK p_util_cpack # files add_fileset quartus_synth QUARTUS_SYNTH "" "Quartus Synthesis" set_fileset_property quartus_synth TOP_LEVEL util_cpack add_fileset_file util_cpack.qip OTHER PATH ./util_cpack.qip # parameters add_parameter CHANNEL_DATA_WIDTH INTEGER 0 set_parameter_property CHANNEL_DATA_WIDTH DEFAULT_VALUE 32 set_parameter_property CHANNEL_DATA_WIDTH DISPLAY_NAME CHANNEL_DATA_WIDTH set_parameter_property CHANNEL_DATA_WIDTH TYPE INTEGER set_parameter_property CHANNEL_DATA_WIDTH UNITS None set_parameter_property CHANNEL_DATA_WIDTH HDL_PARAMETER true add_parameter NUM_OF_CHANNELS INTEGER 0 set_parameter_property NUM_OF_CHANNELS DEFAULT_VALUE 8 set_parameter_property NUM_OF_CHANNELS DISPLAY_NAME NUM_OF_CHANNELS set_parameter_property NUM_OF_CHANNELS TYPE INTEGER set_parameter_property NUM_OF_CHANNELS UNITS None set_parameter_property NUM_OF_CHANNELS HDL_PARAMETER true # defaults ad_alt_intf clock adc_clk input 1 ad_alt_intf reset adc_rst input 1 if_adc_clk ad_alt_intf signal adc_valid output 1 valid ad_alt_intf signal adc_sync output 1 sync ad_alt_intf signal adc_data output NUM_OF_CHANNELS*CHANNEL_DATA_WIDTH data add_interface fifo_ch_0 conduit end #set_interface_property fifo_ch_0 associatedClock if_adc_clk add_interface_port fifo_ch_0 adc_enable_0 enable Input 1 add_interface_port fifo_ch_0 adc_valid_0 valid Input 1 add_interface_port fifo_ch_0 adc_data_0 data Input CHANNEL_DATA_WIDTH proc p_util_cpack {} { if {[get_parameter_value NUM_OF_CHANNELS] > 1} { add_interface fifo_ch_1 conduit end #set_interface_property fifo_ch_1 associatedClock if_adc_clk add_interface_port fifo_ch_1 adc_enable_1 enable Input 1 add_interface_port fifo_ch_1 adc_valid_1 valid Input 1 add_interface_port fifo_ch_1 adc_data_1 data Input CHANNEL_DATA_WIDTH } if {[get_parameter_value NUM_OF_CHANNELS] > 2} { add_interface fifo_ch_2 conduit end #set_interface_property fifo_ch_2 associatedClock if_adc_clk add_interface_port fifo_ch_2 adc_enable_2 enable Input 1 add_interface_port fifo_ch_2 adc_valid_2 valid Input 1 add_interface_port fifo_ch_2 adc_data_2 data Input CHANNEL_DATA_WIDTH } if {[get_parameter_value NUM_OF_CHANNELS] > 3} { add_interface fifo_ch_3 conduit end #set_interface_property fifo_ch_3 associatedClock if_adc_clk add_interface_port fifo_ch_3 adc_enable_3 enable Input 1 add_interface_port fifo_ch_3 adc_valid_3 valid Input 1 add_interface_port fifo_ch_3 adc_data_3 data Input CHANNEL_DATA_WIDTH } if {[get_parameter_value NUM_OF_CHANNELS] > 4} { add_interface fifo_ch_4 conduit end #set_interface_property fifo_ch_4 associatedClock if_adc_clk add_interface_port fifo_ch_4 adc_enable_4 enable Input 1 add_interface_port fifo_ch_4 adc_valid_4 valid Input 1 add_interface_port fifo_ch_4 adc_data_4 data Input CHANNEL_DATA_WIDTH } if {[get_parameter_value NUM_OF_CHANNELS] > 5} { add_interface fifo_ch_5 conduit end #set_interface_property fifo_ch_5 associatedClock if_adc_clk add_interface_port fifo_ch_5 adc_enable_5 enable Input 1 add_interface_port fifo_ch_5 adc_valid_5 valid Input 1 add_interface_port fifo_ch_5 adc_data_5 data Input CHANNEL_DATA_WIDTH } if {[get_parameter_value NUM_OF_CHANNELS] > 6} { add_interface fifo_ch_6 conduit end #set_interface_property fifo_ch_6 associatedClock if_adc_clk add_interface_port fifo_ch_6 adc_enable_6 enable Input 1 add_interface_port fifo_ch_6 adc_valid_6 valid Input 1 add_interface_port fifo_ch_6 adc_data_6 data Input CHANNEL_DATA_WIDTH } if {[get_parameter_value NUM_OF_CHANNELS] > 7} { add_interface fifo_ch_7 conduit end #set_interface_property fifo_ch_7 associatedClock if_adc_clk add_interface_port fifo_ch_7 adc_enable_7 enable Input 1 add_interface_port fifo_ch_7 adc_valid_7 valid Input 1 add_interface_port fifo_ch_7 adc_data_7 data Input CHANNEL_DATA_WIDTH } } bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/util_cpack/util_cpack_ip.tcl000066400000000000000000000027261457144405000304350ustar00rootroot00000000000000# ip source ../scripts/adi_env.tcl source $ad_hdl_dir/library/scripts/adi_ip.tcl adi_ip_create util_cpack adi_ip_files util_cpack [list \ "util_cpack_mux.v" \ "util_cpack_dsf.v" \ "util_cpack.v" \ "util_cpack_constr.xdc" ] adi_ip_properties_lite util_cpack adi_ip_constraints util_cpack [list \ "util_cpack_constr.xdc" ] set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.NUM_OF_CHANNELS')) > 1} \ [ipx::get_ports *_1* -of_objects [ipx::current_core]] set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.NUM_OF_CHANNELS')) > 2} \ [ipx::get_ports *_2* -of_objects [ipx::current_core]] set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.NUM_OF_CHANNELS')) > 3} \ [ipx::get_ports *_3* -of_objects [ipx::current_core]] set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.NUM_OF_CHANNELS')) > 4} \ [ipx::get_ports *_4* -of_objects [ipx::current_core]] set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.NUM_OF_CHANNELS')) > 5} \ [ipx::get_ports *_5* -of_objects [ipx::current_core]] set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.NUM_OF_CHANNELS')) > 6} \ [ipx::get_ports *_6* -of_objects [ipx::current_core]] set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.NUM_OF_CHANNELS')) > 7} \ [ipx::get_ports *_7* -of_objects [ipx::current_core]] ipx::remove_all_bus_interface [ipx::current_core] ipx::save_core [ipx::current_core] bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/util_cpack/util_cpack_mux.v000077500000000000000000003260571457144405000303320ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module util_cpack_mux ( // adc interface adc_clk, adc_valid, adc_enable, adc_data, // fifo interface adc_mux_valid, adc_mux_enable_0, adc_mux_data_0, adc_mux_enable_1, adc_mux_data_1, adc_mux_enable_2, adc_mux_data_2, adc_mux_enable_3, adc_mux_data_3, adc_mux_enable_4, adc_mux_data_4, adc_mux_enable_5, adc_mux_data_5, adc_mux_enable_6, adc_mux_data_6, adc_mux_enable_7, adc_mux_data_7); // adc interface input adc_clk; input adc_valid; input [ 7:0] adc_enable; input [127:0] adc_data; // fifo interface output adc_mux_valid; output adc_mux_enable_0; output [ 15:0] adc_mux_data_0; output adc_mux_enable_1; output [ 31:0] adc_mux_data_1; output adc_mux_enable_2; output [ 47:0] adc_mux_data_2; output adc_mux_enable_3; output [ 63:0] adc_mux_data_3; output adc_mux_enable_4; output [ 79:0] adc_mux_data_4; output adc_mux_enable_5; output [ 95:0] adc_mux_data_5; output adc_mux_enable_6; output [111:0] adc_mux_data_6; output adc_mux_enable_7; output [127:0] adc_mux_data_7; // internal registers reg adc_valid_d = 'd0; reg adc_mux_valid = 'd0; reg adc_mux_enable_0 = 'd0; reg adc_mux_enable_1 = 'd0; reg adc_mux_enable_2 = 'd0; reg adc_mux_enable_3 = 'd0; reg adc_mux_enable_4 = 'd0; reg adc_mux_enable_5 = 'd0; reg adc_mux_enable_6 = 'd0; reg adc_mux_enable_7 = 'd0; reg [ 15:0] adc_mux_data_0 = 'd0; reg [ 31:0] adc_mux_data_1 = 'd0; reg [ 47:0] adc_mux_data_2 = 'd0; reg [ 63:0] adc_mux_data_3 = 'd0; reg [ 79:0] adc_mux_data_4 = 'd0; reg [ 95:0] adc_mux_data_5 = 'd0; reg [111:0] adc_mux_data_6 = 'd0; reg [127:0] adc_mux_data_7 = 'd0; reg adc_mux_enable_0_0 = 'd0; reg [ 15:0] adc_mux_data_0_0 = 'd0; reg adc_mux_enable_1_0 = 'd0; reg [ 31:0] adc_mux_data_1_0 = 'd0; reg adc_mux_enable_1_1 = 'd0; reg [ 31:0] adc_mux_data_1_1 = 'd0; reg adc_mux_enable_2_0 = 'd0; reg [ 47:0] adc_mux_data_2_0 = 'd0; reg adc_mux_enable_2_1 = 'd0; reg [ 47:0] adc_mux_data_2_1 = 'd0; reg adc_mux_enable_2_2 = 'd0; reg [ 47:0] adc_mux_data_2_2 = 'd0; reg adc_mux_enable_2_3 = 'd0; reg [ 47:0] adc_mux_data_2_3 = 'd0; reg adc_mux_enable_3_0 = 'd0; reg [ 63:0] adc_mux_data_3_0 = 'd0; reg adc_mux_enable_3_1 = 'd0; reg [ 63:0] adc_mux_data_3_1 = 'd0; reg adc_mux_enable_3_2 = 'd0; reg [ 63:0] adc_mux_data_3_2 = 'd0; reg adc_mux_enable_3_3 = 'd0; reg [ 63:0] adc_mux_data_3_3 = 'd0; reg adc_mux_enable_3_4 = 'd0; reg [ 63:0] adc_mux_data_3_4 = 'd0; reg adc_mux_enable_4_0 = 'd0; reg [ 79:0] adc_mux_data_4_0 = 'd0; reg adc_mux_enable_4_1 = 'd0; reg [ 79:0] adc_mux_data_4_1 = 'd0; reg adc_mux_enable_4_2 = 'd0; reg [ 79:0] adc_mux_data_4_2 = 'd0; reg adc_mux_enable_4_3 = 'd0; reg [ 79:0] adc_mux_data_4_3 = 'd0; reg adc_mux_enable_5_0 = 'd0; reg [ 95:0] adc_mux_data_5_0 = 'd0; reg adc_mux_enable_5_1 = 'd0; reg [ 95:0] adc_mux_data_5_1 = 'd0; reg adc_mux_enable_6_0 = 'd0; reg [111:0] adc_mux_data_6_0 = 'd0; reg adc_mux_enable_7_0 = 'd0; reg [127:0] adc_mux_data_7_0 = 'd0; // simple data or for pipe line registers always @(posedge adc_clk) begin adc_valid_d <= adc_valid; adc_mux_valid <= adc_valid_d; end always @(posedge adc_clk) begin adc_mux_enable_0 <= adc_mux_enable_0_0; adc_mux_enable_1 <= adc_mux_enable_1_0 | adc_mux_enable_1_1; adc_mux_enable_2 <= adc_mux_enable_2_0 | adc_mux_enable_2_1 | adc_mux_enable_2_2 | adc_mux_enable_2_3; adc_mux_enable_3 <= adc_mux_enable_3_0 | adc_mux_enable_3_1 | adc_mux_enable_3_2 | adc_mux_enable_3_3 | adc_mux_enable_3_4; adc_mux_enable_4 <= adc_mux_enable_4_0 | adc_mux_enable_4_1 | adc_mux_enable_4_2 | adc_mux_enable_4_3; adc_mux_enable_5 <= adc_mux_enable_5_0 | adc_mux_enable_5_1; adc_mux_enable_6 <= adc_mux_enable_6_0; adc_mux_enable_7 <= adc_mux_enable_7_0; end always @(posedge adc_clk) begin adc_mux_data_0 <= adc_mux_data_0_0; adc_mux_data_1 <= adc_mux_data_1_0 | adc_mux_data_1_1; adc_mux_data_2 <= adc_mux_data_2_0 | adc_mux_data_2_1 | adc_mux_data_2_2 | adc_mux_data_2_3; adc_mux_data_3 <= adc_mux_data_3_0 | adc_mux_data_3_1 | adc_mux_data_3_2 | adc_mux_data_3_3 | adc_mux_data_3_4; adc_mux_data_4 <= adc_mux_data_4_0 | adc_mux_data_4_1 | adc_mux_data_4_2 | adc_mux_data_4_3; adc_mux_data_5 <= adc_mux_data_5_0 | adc_mux_data_5_1; adc_mux_data_6 <= adc_mux_data_6_0; adc_mux_data_7 <= adc_mux_data_7_0; end // mux below is generated using a script-- do not modify-- ask me first! // 1 channel(s) always @(posedge adc_clk) begin case (adc_enable) 8'b00000001: begin adc_mux_enable_0_0 <= 1'b1; adc_mux_data_0_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; end 8'b00000010: begin adc_mux_enable_0_0 <= 1'b1; adc_mux_data_0_0[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; end 8'b00000100: begin adc_mux_enable_0_0 <= 1'b1; adc_mux_data_0_0[((16*0)+15):(16*0)] <= adc_data[((16*2)+15):(16*2)]; end 8'b00001000: begin adc_mux_enable_0_0 <= 1'b1; adc_mux_data_0_0[((16*0)+15):(16*0)] <= adc_data[((16*3)+15):(16*3)]; end 8'b00010000: begin adc_mux_enable_0_0 <= 1'b1; adc_mux_data_0_0[((16*0)+15):(16*0)] <= adc_data[((16*4)+15):(16*4)]; end 8'b00100000: begin adc_mux_enable_0_0 <= 1'b1; adc_mux_data_0_0[((16*0)+15):(16*0)] <= adc_data[((16*5)+15):(16*5)]; end 8'b01000000: begin adc_mux_enable_0_0 <= 1'b1; adc_mux_data_0_0[((16*0)+15):(16*0)] <= adc_data[((16*6)+15):(16*6)]; end 8'b10000000: begin adc_mux_enable_0_0 <= 1'b1; adc_mux_data_0_0[((16*0)+15):(16*0)] <= adc_data[((16*7)+15):(16*7)]; end default: begin adc_mux_enable_0_0 <= 'd0; adc_mux_data_0_0 <= 'd0; end endcase end // 2 channel(s) always @(posedge adc_clk) begin case (adc_enable) 8'b00000011: begin adc_mux_enable_1_0 <= 1'b1; adc_mux_data_1_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_1_0[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; end 8'b00000101: begin adc_mux_enable_1_0 <= 1'b1; adc_mux_data_1_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_1_0[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; end 8'b00000110: begin adc_mux_enable_1_0 <= 1'b1; adc_mux_data_1_0[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_1_0[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; end 8'b00001001: begin adc_mux_enable_1_0 <= 1'b1; adc_mux_data_1_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_1_0[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; end 8'b00001010: begin adc_mux_enable_1_0 <= 1'b1; adc_mux_data_1_0[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_1_0[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; end 8'b00001100: begin adc_mux_enable_1_0 <= 1'b1; adc_mux_data_1_0[((16*0)+15):(16*0)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_1_0[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; end 8'b00010001: begin adc_mux_enable_1_0 <= 1'b1; adc_mux_data_1_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_1_0[((16*1)+15):(16*1)] <= adc_data[((16*4)+15):(16*4)]; end 8'b00010010: begin adc_mux_enable_1_0 <= 1'b1; adc_mux_data_1_0[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_1_0[((16*1)+15):(16*1)] <= adc_data[((16*4)+15):(16*4)]; end 8'b00010100: begin adc_mux_enable_1_0 <= 1'b1; adc_mux_data_1_0[((16*0)+15):(16*0)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_1_0[((16*1)+15):(16*1)] <= adc_data[((16*4)+15):(16*4)]; end 8'b00011000: begin adc_mux_enable_1_0 <= 1'b1; adc_mux_data_1_0[((16*0)+15):(16*0)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_1_0[((16*1)+15):(16*1)] <= adc_data[((16*4)+15):(16*4)]; end 8'b00100001: begin adc_mux_enable_1_0 <= 1'b1; adc_mux_data_1_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_1_0[((16*1)+15):(16*1)] <= adc_data[((16*5)+15):(16*5)]; end 8'b00100010: begin adc_mux_enable_1_0 <= 1'b1; adc_mux_data_1_0[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_1_0[((16*1)+15):(16*1)] <= adc_data[((16*5)+15):(16*5)]; end 8'b00100100: begin adc_mux_enable_1_0 <= 1'b1; adc_mux_data_1_0[((16*0)+15):(16*0)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_1_0[((16*1)+15):(16*1)] <= adc_data[((16*5)+15):(16*5)]; end 8'b00101000: begin adc_mux_enable_1_0 <= 1'b1; adc_mux_data_1_0[((16*0)+15):(16*0)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_1_0[((16*1)+15):(16*1)] <= adc_data[((16*5)+15):(16*5)]; end 8'b00110000: begin adc_mux_enable_1_0 <= 1'b1; adc_mux_data_1_0[((16*0)+15):(16*0)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_1_0[((16*1)+15):(16*1)] <= adc_data[((16*5)+15):(16*5)]; end 8'b01000001: begin adc_mux_enable_1_0 <= 1'b1; adc_mux_data_1_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_1_0[((16*1)+15):(16*1)] <= adc_data[((16*6)+15):(16*6)]; end default: begin adc_mux_enable_1_0 <= 'd0; adc_mux_data_1_0 <= 'd0; end endcase end always @(posedge adc_clk) begin case (adc_enable) 8'b01000010: begin adc_mux_enable_1_1 <= 1'b1; adc_mux_data_1_1[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_1_1[((16*1)+15):(16*1)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01000100: begin adc_mux_enable_1_1 <= 1'b1; adc_mux_data_1_1[((16*0)+15):(16*0)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_1_1[((16*1)+15):(16*1)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01001000: begin adc_mux_enable_1_1 <= 1'b1; adc_mux_data_1_1[((16*0)+15):(16*0)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_1_1[((16*1)+15):(16*1)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01010000: begin adc_mux_enable_1_1 <= 1'b1; adc_mux_data_1_1[((16*0)+15):(16*0)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_1_1[((16*1)+15):(16*1)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01100000: begin adc_mux_enable_1_1 <= 1'b1; adc_mux_data_1_1[((16*0)+15):(16*0)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_1_1[((16*1)+15):(16*1)] <= adc_data[((16*6)+15):(16*6)]; end 8'b10000001: begin adc_mux_enable_1_1 <= 1'b1; adc_mux_data_1_1[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_1_1[((16*1)+15):(16*1)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10000010: begin adc_mux_enable_1_1 <= 1'b1; adc_mux_data_1_1[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_1_1[((16*1)+15):(16*1)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10000100: begin adc_mux_enable_1_1 <= 1'b1; adc_mux_data_1_1[((16*0)+15):(16*0)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_1_1[((16*1)+15):(16*1)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10001000: begin adc_mux_enable_1_1 <= 1'b1; adc_mux_data_1_1[((16*0)+15):(16*0)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_1_1[((16*1)+15):(16*1)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10010000: begin adc_mux_enable_1_1 <= 1'b1; adc_mux_data_1_1[((16*0)+15):(16*0)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_1_1[((16*1)+15):(16*1)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10100000: begin adc_mux_enable_1_1 <= 1'b1; adc_mux_data_1_1[((16*0)+15):(16*0)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_1_1[((16*1)+15):(16*1)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11000000: begin adc_mux_enable_1_1 <= 1'b1; adc_mux_data_1_1[((16*0)+15):(16*0)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_1_1[((16*1)+15):(16*1)] <= adc_data[((16*7)+15):(16*7)]; end default: begin adc_mux_enable_1_1 <= 'd0; adc_mux_data_1_1 <= 'd0; end endcase end // 3 channel(s) always @(posedge adc_clk) begin case (adc_enable) 8'b00000111: begin adc_mux_enable_2_0 <= 1'b1; adc_mux_data_2_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_2_0[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_2_0[((16*2)+15):(16*2)] <= adc_data[((16*2)+15):(16*2)]; end 8'b00001011: begin adc_mux_enable_2_0 <= 1'b1; adc_mux_data_2_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_2_0[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_2_0[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; end 8'b00001101: begin adc_mux_enable_2_0 <= 1'b1; adc_mux_data_2_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_2_0[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_2_0[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; end 8'b00001110: begin adc_mux_enable_2_0 <= 1'b1; adc_mux_data_2_0[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_2_0[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_2_0[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; end 8'b00010011: begin adc_mux_enable_2_0 <= 1'b1; adc_mux_data_2_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_2_0[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_2_0[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; end 8'b00010101: begin adc_mux_enable_2_0 <= 1'b1; adc_mux_data_2_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_2_0[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_2_0[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; end 8'b00010110: begin adc_mux_enable_2_0 <= 1'b1; adc_mux_data_2_0[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_2_0[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_2_0[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; end 8'b00011001: begin adc_mux_enable_2_0 <= 1'b1; adc_mux_data_2_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_2_0[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_2_0[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; end 8'b00011010: begin adc_mux_enable_2_0 <= 1'b1; adc_mux_data_2_0[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_2_0[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_2_0[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; end 8'b00011100: begin adc_mux_enable_2_0 <= 1'b1; adc_mux_data_2_0[((16*0)+15):(16*0)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_2_0[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_2_0[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; end 8'b00100011: begin adc_mux_enable_2_0 <= 1'b1; adc_mux_data_2_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_2_0[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_2_0[((16*2)+15):(16*2)] <= adc_data[((16*5)+15):(16*5)]; end 8'b00100101: begin adc_mux_enable_2_0 <= 1'b1; adc_mux_data_2_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_2_0[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_2_0[((16*2)+15):(16*2)] <= adc_data[((16*5)+15):(16*5)]; end 8'b00100110: begin adc_mux_enable_2_0 <= 1'b1; adc_mux_data_2_0[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_2_0[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_2_0[((16*2)+15):(16*2)] <= adc_data[((16*5)+15):(16*5)]; end 8'b00101001: begin adc_mux_enable_2_0 <= 1'b1; adc_mux_data_2_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_2_0[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_2_0[((16*2)+15):(16*2)] <= adc_data[((16*5)+15):(16*5)]; end 8'b00101010: begin adc_mux_enable_2_0 <= 1'b1; adc_mux_data_2_0[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_2_0[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_2_0[((16*2)+15):(16*2)] <= adc_data[((16*5)+15):(16*5)]; end 8'b00101100: begin adc_mux_enable_2_0 <= 1'b1; adc_mux_data_2_0[((16*0)+15):(16*0)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_2_0[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_2_0[((16*2)+15):(16*2)] <= adc_data[((16*5)+15):(16*5)]; end default: begin adc_mux_enable_2_0 <= 'd0; adc_mux_data_2_0 <= 'd0; end endcase end always @(posedge adc_clk) begin case (adc_enable) 8'b00110001: begin adc_mux_enable_2_1 <= 1'b1; adc_mux_data_2_1[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_2_1[((16*1)+15):(16*1)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_2_1[((16*2)+15):(16*2)] <= adc_data[((16*5)+15):(16*5)]; end 8'b00110010: begin adc_mux_enable_2_1 <= 1'b1; adc_mux_data_2_1[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_2_1[((16*1)+15):(16*1)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_2_1[((16*2)+15):(16*2)] <= adc_data[((16*5)+15):(16*5)]; end 8'b00110100: begin adc_mux_enable_2_1 <= 1'b1; adc_mux_data_2_1[((16*0)+15):(16*0)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_2_1[((16*1)+15):(16*1)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_2_1[((16*2)+15):(16*2)] <= adc_data[((16*5)+15):(16*5)]; end 8'b00111000: begin adc_mux_enable_2_1 <= 1'b1; adc_mux_data_2_1[((16*0)+15):(16*0)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_2_1[((16*1)+15):(16*1)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_2_1[((16*2)+15):(16*2)] <= adc_data[((16*5)+15):(16*5)]; end 8'b01000011: begin adc_mux_enable_2_1 <= 1'b1; adc_mux_data_2_1[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_2_1[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_2_1[((16*2)+15):(16*2)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01000101: begin adc_mux_enable_2_1 <= 1'b1; adc_mux_data_2_1[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_2_1[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_2_1[((16*2)+15):(16*2)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01000110: begin adc_mux_enable_2_1 <= 1'b1; adc_mux_data_2_1[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_2_1[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_2_1[((16*2)+15):(16*2)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01001001: begin adc_mux_enable_2_1 <= 1'b1; adc_mux_data_2_1[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_2_1[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_2_1[((16*2)+15):(16*2)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01001010: begin adc_mux_enable_2_1 <= 1'b1; adc_mux_data_2_1[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_2_1[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_2_1[((16*2)+15):(16*2)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01001100: begin adc_mux_enable_2_1 <= 1'b1; adc_mux_data_2_1[((16*0)+15):(16*0)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_2_1[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_2_1[((16*2)+15):(16*2)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01010001: begin adc_mux_enable_2_1 <= 1'b1; adc_mux_data_2_1[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_2_1[((16*1)+15):(16*1)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_2_1[((16*2)+15):(16*2)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01010010: begin adc_mux_enable_2_1 <= 1'b1; adc_mux_data_2_1[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_2_1[((16*1)+15):(16*1)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_2_1[((16*2)+15):(16*2)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01010100: begin adc_mux_enable_2_1 <= 1'b1; adc_mux_data_2_1[((16*0)+15):(16*0)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_2_1[((16*1)+15):(16*1)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_2_1[((16*2)+15):(16*2)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01011000: begin adc_mux_enable_2_1 <= 1'b1; adc_mux_data_2_1[((16*0)+15):(16*0)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_2_1[((16*1)+15):(16*1)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_2_1[((16*2)+15):(16*2)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01100001: begin adc_mux_enable_2_1 <= 1'b1; adc_mux_data_2_1[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_2_1[((16*1)+15):(16*1)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_2_1[((16*2)+15):(16*2)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01100010: begin adc_mux_enable_2_1 <= 1'b1; adc_mux_data_2_1[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_2_1[((16*1)+15):(16*1)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_2_1[((16*2)+15):(16*2)] <= adc_data[((16*6)+15):(16*6)]; end default: begin adc_mux_enable_2_1 <= 'd0; adc_mux_data_2_1 <= 'd0; end endcase end always @(posedge adc_clk) begin case (adc_enable) 8'b01100100: begin adc_mux_enable_2_2 <= 1'b1; adc_mux_data_2_2[((16*0)+15):(16*0)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_2_2[((16*1)+15):(16*1)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_2_2[((16*2)+15):(16*2)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01101000: begin adc_mux_enable_2_2 <= 1'b1; adc_mux_data_2_2[((16*0)+15):(16*0)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_2_2[((16*1)+15):(16*1)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_2_2[((16*2)+15):(16*2)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01110000: begin adc_mux_enable_2_2 <= 1'b1; adc_mux_data_2_2[((16*0)+15):(16*0)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_2_2[((16*1)+15):(16*1)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_2_2[((16*2)+15):(16*2)] <= adc_data[((16*6)+15):(16*6)]; end 8'b10000011: begin adc_mux_enable_2_2 <= 1'b1; adc_mux_data_2_2[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_2_2[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_2_2[((16*2)+15):(16*2)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10000101: begin adc_mux_enable_2_2 <= 1'b1; adc_mux_data_2_2[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_2_2[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_2_2[((16*2)+15):(16*2)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10000110: begin adc_mux_enable_2_2 <= 1'b1; adc_mux_data_2_2[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_2_2[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_2_2[((16*2)+15):(16*2)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10001001: begin adc_mux_enable_2_2 <= 1'b1; adc_mux_data_2_2[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_2_2[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_2_2[((16*2)+15):(16*2)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10001010: begin adc_mux_enable_2_2 <= 1'b1; adc_mux_data_2_2[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_2_2[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_2_2[((16*2)+15):(16*2)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10001100: begin adc_mux_enable_2_2 <= 1'b1; adc_mux_data_2_2[((16*0)+15):(16*0)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_2_2[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_2_2[((16*2)+15):(16*2)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10010001: begin adc_mux_enable_2_2 <= 1'b1; adc_mux_data_2_2[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_2_2[((16*1)+15):(16*1)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_2_2[((16*2)+15):(16*2)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10010010: begin adc_mux_enable_2_2 <= 1'b1; adc_mux_data_2_2[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_2_2[((16*1)+15):(16*1)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_2_2[((16*2)+15):(16*2)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10010100: begin adc_mux_enable_2_2 <= 1'b1; adc_mux_data_2_2[((16*0)+15):(16*0)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_2_2[((16*1)+15):(16*1)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_2_2[((16*2)+15):(16*2)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10011000: begin adc_mux_enable_2_2 <= 1'b1; adc_mux_data_2_2[((16*0)+15):(16*0)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_2_2[((16*1)+15):(16*1)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_2_2[((16*2)+15):(16*2)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10100001: begin adc_mux_enable_2_2 <= 1'b1; adc_mux_data_2_2[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_2_2[((16*1)+15):(16*1)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_2_2[((16*2)+15):(16*2)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10100010: begin adc_mux_enable_2_2 <= 1'b1; adc_mux_data_2_2[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_2_2[((16*1)+15):(16*1)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_2_2[((16*2)+15):(16*2)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10100100: begin adc_mux_enable_2_2 <= 1'b1; adc_mux_data_2_2[((16*0)+15):(16*0)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_2_2[((16*1)+15):(16*1)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_2_2[((16*2)+15):(16*2)] <= adc_data[((16*7)+15):(16*7)]; end default: begin adc_mux_enable_2_2 <= 'd0; adc_mux_data_2_2 <= 'd0; end endcase end always @(posedge adc_clk) begin case (adc_enable) 8'b10101000: begin adc_mux_enable_2_3 <= 1'b1; adc_mux_data_2_3[((16*0)+15):(16*0)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_2_3[((16*1)+15):(16*1)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_2_3[((16*2)+15):(16*2)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10110000: begin adc_mux_enable_2_3 <= 1'b1; adc_mux_data_2_3[((16*0)+15):(16*0)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_2_3[((16*1)+15):(16*1)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_2_3[((16*2)+15):(16*2)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11000001: begin adc_mux_enable_2_3 <= 1'b1; adc_mux_data_2_3[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_2_3[((16*1)+15):(16*1)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_2_3[((16*2)+15):(16*2)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11000010: begin adc_mux_enable_2_3 <= 1'b1; adc_mux_data_2_3[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_2_3[((16*1)+15):(16*1)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_2_3[((16*2)+15):(16*2)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11000100: begin adc_mux_enable_2_3 <= 1'b1; adc_mux_data_2_3[((16*0)+15):(16*0)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_2_3[((16*1)+15):(16*1)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_2_3[((16*2)+15):(16*2)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11001000: begin adc_mux_enable_2_3 <= 1'b1; adc_mux_data_2_3[((16*0)+15):(16*0)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_2_3[((16*1)+15):(16*1)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_2_3[((16*2)+15):(16*2)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11010000: begin adc_mux_enable_2_3 <= 1'b1; adc_mux_data_2_3[((16*0)+15):(16*0)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_2_3[((16*1)+15):(16*1)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_2_3[((16*2)+15):(16*2)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11100000: begin adc_mux_enable_2_3 <= 1'b1; adc_mux_data_2_3[((16*0)+15):(16*0)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_2_3[((16*1)+15):(16*1)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_2_3[((16*2)+15):(16*2)] <= adc_data[((16*7)+15):(16*7)]; end default: begin adc_mux_enable_2_3 <= 'd0; adc_mux_data_2_3 <= 'd0; end endcase end // 4 channel(s) always @(posedge adc_clk) begin case (adc_enable) 8'b00001111: begin adc_mux_enable_3_0 <= 1'b1; adc_mux_data_3_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_3_0[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_3_0[((16*2)+15):(16*2)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_3_0[((16*3)+15):(16*3)] <= adc_data[((16*3)+15):(16*3)]; end 8'b00010111: begin adc_mux_enable_3_0 <= 1'b1; adc_mux_data_3_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_3_0[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_3_0[((16*2)+15):(16*2)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_3_0[((16*3)+15):(16*3)] <= adc_data[((16*4)+15):(16*4)]; end 8'b00011011: begin adc_mux_enable_3_0 <= 1'b1; adc_mux_data_3_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_3_0[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_3_0[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_3_0[((16*3)+15):(16*3)] <= adc_data[((16*4)+15):(16*4)]; end 8'b00011101: begin adc_mux_enable_3_0 <= 1'b1; adc_mux_data_3_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_3_0[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_3_0[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_3_0[((16*3)+15):(16*3)] <= adc_data[((16*4)+15):(16*4)]; end 8'b00011110: begin adc_mux_enable_3_0 <= 1'b1; adc_mux_data_3_0[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_3_0[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_3_0[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_3_0[((16*3)+15):(16*3)] <= adc_data[((16*4)+15):(16*4)]; end 8'b00100111: begin adc_mux_enable_3_0 <= 1'b1; adc_mux_data_3_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_3_0[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_3_0[((16*2)+15):(16*2)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_3_0[((16*3)+15):(16*3)] <= adc_data[((16*5)+15):(16*5)]; end 8'b00101011: begin adc_mux_enable_3_0 <= 1'b1; adc_mux_data_3_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_3_0[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_3_0[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_3_0[((16*3)+15):(16*3)] <= adc_data[((16*5)+15):(16*5)]; end 8'b00101101: begin adc_mux_enable_3_0 <= 1'b1; adc_mux_data_3_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_3_0[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_3_0[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_3_0[((16*3)+15):(16*3)] <= adc_data[((16*5)+15):(16*5)]; end 8'b00101110: begin adc_mux_enable_3_0 <= 1'b1; adc_mux_data_3_0[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_3_0[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_3_0[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_3_0[((16*3)+15):(16*3)] <= adc_data[((16*5)+15):(16*5)]; end 8'b00110011: begin adc_mux_enable_3_0 <= 1'b1; adc_mux_data_3_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_3_0[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_3_0[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_3_0[((16*3)+15):(16*3)] <= adc_data[((16*5)+15):(16*5)]; end 8'b00110101: begin adc_mux_enable_3_0 <= 1'b1; adc_mux_data_3_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_3_0[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_3_0[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_3_0[((16*3)+15):(16*3)] <= adc_data[((16*5)+15):(16*5)]; end 8'b00110110: begin adc_mux_enable_3_0 <= 1'b1; adc_mux_data_3_0[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_3_0[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_3_0[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_3_0[((16*3)+15):(16*3)] <= adc_data[((16*5)+15):(16*5)]; end 8'b00111001: begin adc_mux_enable_3_0 <= 1'b1; adc_mux_data_3_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_3_0[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_3_0[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_3_0[((16*3)+15):(16*3)] <= adc_data[((16*5)+15):(16*5)]; end 8'b00111010: begin adc_mux_enable_3_0 <= 1'b1; adc_mux_data_3_0[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_3_0[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_3_0[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_3_0[((16*3)+15):(16*3)] <= adc_data[((16*5)+15):(16*5)]; end 8'b00111100: begin adc_mux_enable_3_0 <= 1'b1; adc_mux_data_3_0[((16*0)+15):(16*0)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_3_0[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_3_0[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_3_0[((16*3)+15):(16*3)] <= adc_data[((16*5)+15):(16*5)]; end 8'b01000111: begin adc_mux_enable_3_0 <= 1'b1; adc_mux_data_3_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_3_0[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_3_0[((16*2)+15):(16*2)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_3_0[((16*3)+15):(16*3)] <= adc_data[((16*6)+15):(16*6)]; end default: begin adc_mux_enable_3_0 <= 'd0; adc_mux_data_3_0 <= 'd0; end endcase end always @(posedge adc_clk) begin case (adc_enable) 8'b01001011: begin adc_mux_enable_3_1 <= 1'b1; adc_mux_data_3_1[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_3_1[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_3_1[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_3_1[((16*3)+15):(16*3)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01001101: begin adc_mux_enable_3_1 <= 1'b1; adc_mux_data_3_1[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_3_1[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_3_1[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_3_1[((16*3)+15):(16*3)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01001110: begin adc_mux_enable_3_1 <= 1'b1; adc_mux_data_3_1[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_3_1[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_3_1[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_3_1[((16*3)+15):(16*3)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01010011: begin adc_mux_enable_3_1 <= 1'b1; adc_mux_data_3_1[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_3_1[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_3_1[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_3_1[((16*3)+15):(16*3)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01010101: begin adc_mux_enable_3_1 <= 1'b1; adc_mux_data_3_1[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_3_1[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_3_1[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_3_1[((16*3)+15):(16*3)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01010110: begin adc_mux_enable_3_1 <= 1'b1; adc_mux_data_3_1[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_3_1[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_3_1[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_3_1[((16*3)+15):(16*3)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01011001: begin adc_mux_enable_3_1 <= 1'b1; adc_mux_data_3_1[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_3_1[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_3_1[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_3_1[((16*3)+15):(16*3)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01011010: begin adc_mux_enable_3_1 <= 1'b1; adc_mux_data_3_1[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_3_1[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_3_1[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_3_1[((16*3)+15):(16*3)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01011100: begin adc_mux_enable_3_1 <= 1'b1; adc_mux_data_3_1[((16*0)+15):(16*0)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_3_1[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_3_1[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_3_1[((16*3)+15):(16*3)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01100011: begin adc_mux_enable_3_1 <= 1'b1; adc_mux_data_3_1[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_3_1[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_3_1[((16*2)+15):(16*2)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_3_1[((16*3)+15):(16*3)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01100101: begin adc_mux_enable_3_1 <= 1'b1; adc_mux_data_3_1[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_3_1[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_3_1[((16*2)+15):(16*2)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_3_1[((16*3)+15):(16*3)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01100110: begin adc_mux_enable_3_1 <= 1'b1; adc_mux_data_3_1[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_3_1[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_3_1[((16*2)+15):(16*2)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_3_1[((16*3)+15):(16*3)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01101001: begin adc_mux_enable_3_1 <= 1'b1; adc_mux_data_3_1[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_3_1[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_3_1[((16*2)+15):(16*2)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_3_1[((16*3)+15):(16*3)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01101010: begin adc_mux_enable_3_1 <= 1'b1; adc_mux_data_3_1[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_3_1[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_3_1[((16*2)+15):(16*2)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_3_1[((16*3)+15):(16*3)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01101100: begin adc_mux_enable_3_1 <= 1'b1; adc_mux_data_3_1[((16*0)+15):(16*0)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_3_1[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_3_1[((16*2)+15):(16*2)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_3_1[((16*3)+15):(16*3)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01110001: begin adc_mux_enable_3_1 <= 1'b1; adc_mux_data_3_1[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_3_1[((16*1)+15):(16*1)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_3_1[((16*2)+15):(16*2)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_3_1[((16*3)+15):(16*3)] <= adc_data[((16*6)+15):(16*6)]; end default: begin adc_mux_enable_3_1 <= 'd0; adc_mux_data_3_1 <= 'd0; end endcase end always @(posedge adc_clk) begin case (adc_enable) 8'b01110010: begin adc_mux_enable_3_2 <= 1'b1; adc_mux_data_3_2[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_3_2[((16*1)+15):(16*1)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_3_2[((16*2)+15):(16*2)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_3_2[((16*3)+15):(16*3)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01110100: begin adc_mux_enable_3_2 <= 1'b1; adc_mux_data_3_2[((16*0)+15):(16*0)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_3_2[((16*1)+15):(16*1)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_3_2[((16*2)+15):(16*2)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_3_2[((16*3)+15):(16*3)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01111000: begin adc_mux_enable_3_2 <= 1'b1; adc_mux_data_3_2[((16*0)+15):(16*0)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_3_2[((16*1)+15):(16*1)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_3_2[((16*2)+15):(16*2)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_3_2[((16*3)+15):(16*3)] <= adc_data[((16*6)+15):(16*6)]; end 8'b10000111: begin adc_mux_enable_3_2 <= 1'b1; adc_mux_data_3_2[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_3_2[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_3_2[((16*2)+15):(16*2)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_3_2[((16*3)+15):(16*3)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10001011: begin adc_mux_enable_3_2 <= 1'b1; adc_mux_data_3_2[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_3_2[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_3_2[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_3_2[((16*3)+15):(16*3)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10001101: begin adc_mux_enable_3_2 <= 1'b1; adc_mux_data_3_2[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_3_2[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_3_2[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_3_2[((16*3)+15):(16*3)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10001110: begin adc_mux_enable_3_2 <= 1'b1; adc_mux_data_3_2[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_3_2[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_3_2[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_3_2[((16*3)+15):(16*3)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10010011: begin adc_mux_enable_3_2 <= 1'b1; adc_mux_data_3_2[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_3_2[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_3_2[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_3_2[((16*3)+15):(16*3)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10010101: begin adc_mux_enable_3_2 <= 1'b1; adc_mux_data_3_2[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_3_2[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_3_2[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_3_2[((16*3)+15):(16*3)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10010110: begin adc_mux_enable_3_2 <= 1'b1; adc_mux_data_3_2[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_3_2[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_3_2[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_3_2[((16*3)+15):(16*3)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10011001: begin adc_mux_enable_3_2 <= 1'b1; adc_mux_data_3_2[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_3_2[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_3_2[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_3_2[((16*3)+15):(16*3)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10011010: begin adc_mux_enable_3_2 <= 1'b1; adc_mux_data_3_2[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_3_2[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_3_2[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_3_2[((16*3)+15):(16*3)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10011100: begin adc_mux_enable_3_2 <= 1'b1; adc_mux_data_3_2[((16*0)+15):(16*0)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_3_2[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_3_2[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_3_2[((16*3)+15):(16*3)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10100011: begin adc_mux_enable_3_2 <= 1'b1; adc_mux_data_3_2[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_3_2[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_3_2[((16*2)+15):(16*2)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_3_2[((16*3)+15):(16*3)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10100101: begin adc_mux_enable_3_2 <= 1'b1; adc_mux_data_3_2[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_3_2[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_3_2[((16*2)+15):(16*2)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_3_2[((16*3)+15):(16*3)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10100110: begin adc_mux_enable_3_2 <= 1'b1; adc_mux_data_3_2[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_3_2[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_3_2[((16*2)+15):(16*2)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_3_2[((16*3)+15):(16*3)] <= adc_data[((16*7)+15):(16*7)]; end default: begin adc_mux_enable_3_2 <= 'd0; adc_mux_data_3_2 <= 'd0; end endcase end always @(posedge adc_clk) begin case (adc_enable) 8'b10101001: begin adc_mux_enable_3_3 <= 1'b1; adc_mux_data_3_3[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_3_3[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_3_3[((16*2)+15):(16*2)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_3_3[((16*3)+15):(16*3)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10101010: begin adc_mux_enable_3_3 <= 1'b1; adc_mux_data_3_3[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_3_3[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_3_3[((16*2)+15):(16*2)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_3_3[((16*3)+15):(16*3)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10101100: begin adc_mux_enable_3_3 <= 1'b1; adc_mux_data_3_3[((16*0)+15):(16*0)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_3_3[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_3_3[((16*2)+15):(16*2)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_3_3[((16*3)+15):(16*3)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10110001: begin adc_mux_enable_3_3 <= 1'b1; adc_mux_data_3_3[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_3_3[((16*1)+15):(16*1)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_3_3[((16*2)+15):(16*2)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_3_3[((16*3)+15):(16*3)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10110010: begin adc_mux_enable_3_3 <= 1'b1; adc_mux_data_3_3[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_3_3[((16*1)+15):(16*1)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_3_3[((16*2)+15):(16*2)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_3_3[((16*3)+15):(16*3)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10110100: begin adc_mux_enable_3_3 <= 1'b1; adc_mux_data_3_3[((16*0)+15):(16*0)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_3_3[((16*1)+15):(16*1)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_3_3[((16*2)+15):(16*2)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_3_3[((16*3)+15):(16*3)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10111000: begin adc_mux_enable_3_3 <= 1'b1; adc_mux_data_3_3[((16*0)+15):(16*0)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_3_3[((16*1)+15):(16*1)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_3_3[((16*2)+15):(16*2)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_3_3[((16*3)+15):(16*3)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11000011: begin adc_mux_enable_3_3 <= 1'b1; adc_mux_data_3_3[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_3_3[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_3_3[((16*2)+15):(16*2)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_3_3[((16*3)+15):(16*3)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11000101: begin adc_mux_enable_3_3 <= 1'b1; adc_mux_data_3_3[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_3_3[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_3_3[((16*2)+15):(16*2)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_3_3[((16*3)+15):(16*3)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11000110: begin adc_mux_enable_3_3 <= 1'b1; adc_mux_data_3_3[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_3_3[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_3_3[((16*2)+15):(16*2)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_3_3[((16*3)+15):(16*3)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11001001: begin adc_mux_enable_3_3 <= 1'b1; adc_mux_data_3_3[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_3_3[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_3_3[((16*2)+15):(16*2)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_3_3[((16*3)+15):(16*3)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11001010: begin adc_mux_enable_3_3 <= 1'b1; adc_mux_data_3_3[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_3_3[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_3_3[((16*2)+15):(16*2)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_3_3[((16*3)+15):(16*3)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11001100: begin adc_mux_enable_3_3 <= 1'b1; adc_mux_data_3_3[((16*0)+15):(16*0)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_3_3[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_3_3[((16*2)+15):(16*2)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_3_3[((16*3)+15):(16*3)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11010001: begin adc_mux_enable_3_3 <= 1'b1; adc_mux_data_3_3[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_3_3[((16*1)+15):(16*1)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_3_3[((16*2)+15):(16*2)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_3_3[((16*3)+15):(16*3)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11010010: begin adc_mux_enable_3_3 <= 1'b1; adc_mux_data_3_3[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_3_3[((16*1)+15):(16*1)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_3_3[((16*2)+15):(16*2)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_3_3[((16*3)+15):(16*3)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11010100: begin adc_mux_enable_3_3 <= 1'b1; adc_mux_data_3_3[((16*0)+15):(16*0)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_3_3[((16*1)+15):(16*1)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_3_3[((16*2)+15):(16*2)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_3_3[((16*3)+15):(16*3)] <= adc_data[((16*7)+15):(16*7)]; end default: begin adc_mux_enable_3_3 <= 'd0; adc_mux_data_3_3 <= 'd0; end endcase end always @(posedge adc_clk) begin case (adc_enable) 8'b11011000: begin adc_mux_enable_3_4 <= 1'b1; adc_mux_data_3_4[((16*0)+15):(16*0)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_3_4[((16*1)+15):(16*1)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_3_4[((16*2)+15):(16*2)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_3_4[((16*3)+15):(16*3)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11100001: begin adc_mux_enable_3_4 <= 1'b1; adc_mux_data_3_4[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_3_4[((16*1)+15):(16*1)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_3_4[((16*2)+15):(16*2)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_3_4[((16*3)+15):(16*3)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11100010: begin adc_mux_enable_3_4 <= 1'b1; adc_mux_data_3_4[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_3_4[((16*1)+15):(16*1)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_3_4[((16*2)+15):(16*2)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_3_4[((16*3)+15):(16*3)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11100100: begin adc_mux_enable_3_4 <= 1'b1; adc_mux_data_3_4[((16*0)+15):(16*0)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_3_4[((16*1)+15):(16*1)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_3_4[((16*2)+15):(16*2)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_3_4[((16*3)+15):(16*3)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11101000: begin adc_mux_enable_3_4 <= 1'b1; adc_mux_data_3_4[((16*0)+15):(16*0)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_3_4[((16*1)+15):(16*1)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_3_4[((16*2)+15):(16*2)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_3_4[((16*3)+15):(16*3)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11110000: begin adc_mux_enable_3_4 <= 1'b1; adc_mux_data_3_4[((16*0)+15):(16*0)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_3_4[((16*1)+15):(16*1)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_3_4[((16*2)+15):(16*2)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_3_4[((16*3)+15):(16*3)] <= adc_data[((16*7)+15):(16*7)]; end default: begin adc_mux_enable_3_4 <= 'd0; adc_mux_data_3_4 <= 'd0; end endcase end // 5 channel(s) always @(posedge adc_clk) begin case (adc_enable) 8'b00011111: begin adc_mux_enable_4_0 <= 1'b1; adc_mux_data_4_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_4_0[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_4_0[((16*2)+15):(16*2)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_4_0[((16*3)+15):(16*3)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_4_0[((16*4)+15):(16*4)] <= adc_data[((16*4)+15):(16*4)]; end 8'b00101111: begin adc_mux_enable_4_0 <= 1'b1; adc_mux_data_4_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_4_0[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_4_0[((16*2)+15):(16*2)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_4_0[((16*3)+15):(16*3)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_4_0[((16*4)+15):(16*4)] <= adc_data[((16*5)+15):(16*5)]; end 8'b00110111: begin adc_mux_enable_4_0 <= 1'b1; adc_mux_data_4_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_4_0[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_4_0[((16*2)+15):(16*2)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_4_0[((16*3)+15):(16*3)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_4_0[((16*4)+15):(16*4)] <= adc_data[((16*5)+15):(16*5)]; end 8'b00111011: begin adc_mux_enable_4_0 <= 1'b1; adc_mux_data_4_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_4_0[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_4_0[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_4_0[((16*3)+15):(16*3)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_4_0[((16*4)+15):(16*4)] <= adc_data[((16*5)+15):(16*5)]; end 8'b00111101: begin adc_mux_enable_4_0 <= 1'b1; adc_mux_data_4_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_4_0[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_4_0[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_4_0[((16*3)+15):(16*3)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_4_0[((16*4)+15):(16*4)] <= adc_data[((16*5)+15):(16*5)]; end 8'b00111110: begin adc_mux_enable_4_0 <= 1'b1; adc_mux_data_4_0[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_4_0[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_4_0[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_4_0[((16*3)+15):(16*3)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_4_0[((16*4)+15):(16*4)] <= adc_data[((16*5)+15):(16*5)]; end 8'b01001111: begin adc_mux_enable_4_0 <= 1'b1; adc_mux_data_4_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_4_0[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_4_0[((16*2)+15):(16*2)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_4_0[((16*3)+15):(16*3)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_4_0[((16*4)+15):(16*4)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01010111: begin adc_mux_enable_4_0 <= 1'b1; adc_mux_data_4_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_4_0[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_4_0[((16*2)+15):(16*2)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_4_0[((16*3)+15):(16*3)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_4_0[((16*4)+15):(16*4)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01011011: begin adc_mux_enable_4_0 <= 1'b1; adc_mux_data_4_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_4_0[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_4_0[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_4_0[((16*3)+15):(16*3)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_4_0[((16*4)+15):(16*4)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01011101: begin adc_mux_enable_4_0 <= 1'b1; adc_mux_data_4_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_4_0[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_4_0[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_4_0[((16*3)+15):(16*3)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_4_0[((16*4)+15):(16*4)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01011110: begin adc_mux_enable_4_0 <= 1'b1; adc_mux_data_4_0[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_4_0[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_4_0[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_4_0[((16*3)+15):(16*3)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_4_0[((16*4)+15):(16*4)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01100111: begin adc_mux_enable_4_0 <= 1'b1; adc_mux_data_4_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_4_0[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_4_0[((16*2)+15):(16*2)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_4_0[((16*3)+15):(16*3)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_4_0[((16*4)+15):(16*4)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01101011: begin adc_mux_enable_4_0 <= 1'b1; adc_mux_data_4_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_4_0[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_4_0[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_4_0[((16*3)+15):(16*3)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_4_0[((16*4)+15):(16*4)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01101101: begin adc_mux_enable_4_0 <= 1'b1; adc_mux_data_4_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_4_0[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_4_0[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_4_0[((16*3)+15):(16*3)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_4_0[((16*4)+15):(16*4)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01101110: begin adc_mux_enable_4_0 <= 1'b1; adc_mux_data_4_0[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_4_0[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_4_0[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_4_0[((16*3)+15):(16*3)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_4_0[((16*4)+15):(16*4)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01110011: begin adc_mux_enable_4_0 <= 1'b1; adc_mux_data_4_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_4_0[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_4_0[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_4_0[((16*3)+15):(16*3)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_4_0[((16*4)+15):(16*4)] <= adc_data[((16*6)+15):(16*6)]; end default: begin adc_mux_enable_4_0 <= 'd0; adc_mux_data_4_0 <= 'd0; end endcase end always @(posedge adc_clk) begin case (adc_enable) 8'b01110101: begin adc_mux_enable_4_1 <= 1'b1; adc_mux_data_4_1[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_4_1[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_4_1[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_4_1[((16*3)+15):(16*3)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_4_1[((16*4)+15):(16*4)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01110110: begin adc_mux_enable_4_1 <= 1'b1; adc_mux_data_4_1[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_4_1[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_4_1[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_4_1[((16*3)+15):(16*3)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_4_1[((16*4)+15):(16*4)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01111001: begin adc_mux_enable_4_1 <= 1'b1; adc_mux_data_4_1[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_4_1[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_4_1[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_4_1[((16*3)+15):(16*3)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_4_1[((16*4)+15):(16*4)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01111010: begin adc_mux_enable_4_1 <= 1'b1; adc_mux_data_4_1[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_4_1[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_4_1[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_4_1[((16*3)+15):(16*3)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_4_1[((16*4)+15):(16*4)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01111100: begin adc_mux_enable_4_1 <= 1'b1; adc_mux_data_4_1[((16*0)+15):(16*0)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_4_1[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_4_1[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_4_1[((16*3)+15):(16*3)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_4_1[((16*4)+15):(16*4)] <= adc_data[((16*6)+15):(16*6)]; end 8'b10001111: begin adc_mux_enable_4_1 <= 1'b1; adc_mux_data_4_1[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_4_1[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_4_1[((16*2)+15):(16*2)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_4_1[((16*3)+15):(16*3)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_4_1[((16*4)+15):(16*4)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10010111: begin adc_mux_enable_4_1 <= 1'b1; adc_mux_data_4_1[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_4_1[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_4_1[((16*2)+15):(16*2)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_4_1[((16*3)+15):(16*3)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_4_1[((16*4)+15):(16*4)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10011011: begin adc_mux_enable_4_1 <= 1'b1; adc_mux_data_4_1[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_4_1[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_4_1[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_4_1[((16*3)+15):(16*3)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_4_1[((16*4)+15):(16*4)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10011101: begin adc_mux_enable_4_1 <= 1'b1; adc_mux_data_4_1[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_4_1[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_4_1[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_4_1[((16*3)+15):(16*3)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_4_1[((16*4)+15):(16*4)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10011110: begin adc_mux_enable_4_1 <= 1'b1; adc_mux_data_4_1[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_4_1[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_4_1[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_4_1[((16*3)+15):(16*3)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_4_1[((16*4)+15):(16*4)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10100111: begin adc_mux_enable_4_1 <= 1'b1; adc_mux_data_4_1[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_4_1[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_4_1[((16*2)+15):(16*2)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_4_1[((16*3)+15):(16*3)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_4_1[((16*4)+15):(16*4)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10101011: begin adc_mux_enable_4_1 <= 1'b1; adc_mux_data_4_1[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_4_1[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_4_1[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_4_1[((16*3)+15):(16*3)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_4_1[((16*4)+15):(16*4)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10101101: begin adc_mux_enable_4_1 <= 1'b1; adc_mux_data_4_1[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_4_1[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_4_1[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_4_1[((16*3)+15):(16*3)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_4_1[((16*4)+15):(16*4)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10101110: begin adc_mux_enable_4_1 <= 1'b1; adc_mux_data_4_1[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_4_1[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_4_1[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_4_1[((16*3)+15):(16*3)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_4_1[((16*4)+15):(16*4)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10110011: begin adc_mux_enable_4_1 <= 1'b1; adc_mux_data_4_1[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_4_1[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_4_1[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_4_1[((16*3)+15):(16*3)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_4_1[((16*4)+15):(16*4)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10110101: begin adc_mux_enable_4_1 <= 1'b1; adc_mux_data_4_1[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_4_1[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_4_1[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_4_1[((16*3)+15):(16*3)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_4_1[((16*4)+15):(16*4)] <= adc_data[((16*7)+15):(16*7)]; end default: begin adc_mux_enable_4_1 <= 'd0; adc_mux_data_4_1 <= 'd0; end endcase end always @(posedge adc_clk) begin case (adc_enable) 8'b10110110: begin adc_mux_enable_4_2 <= 1'b1; adc_mux_data_4_2[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_4_2[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_4_2[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_4_2[((16*3)+15):(16*3)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_4_2[((16*4)+15):(16*4)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10111001: begin adc_mux_enable_4_2 <= 1'b1; adc_mux_data_4_2[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_4_2[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_4_2[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_4_2[((16*3)+15):(16*3)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_4_2[((16*4)+15):(16*4)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10111010: begin adc_mux_enable_4_2 <= 1'b1; adc_mux_data_4_2[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_4_2[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_4_2[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_4_2[((16*3)+15):(16*3)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_4_2[((16*4)+15):(16*4)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10111100: begin adc_mux_enable_4_2 <= 1'b1; adc_mux_data_4_2[((16*0)+15):(16*0)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_4_2[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_4_2[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_4_2[((16*3)+15):(16*3)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_4_2[((16*4)+15):(16*4)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11000111: begin adc_mux_enable_4_2 <= 1'b1; adc_mux_data_4_2[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_4_2[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_4_2[((16*2)+15):(16*2)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_4_2[((16*3)+15):(16*3)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_4_2[((16*4)+15):(16*4)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11001011: begin adc_mux_enable_4_2 <= 1'b1; adc_mux_data_4_2[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_4_2[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_4_2[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_4_2[((16*3)+15):(16*3)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_4_2[((16*4)+15):(16*4)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11001101: begin adc_mux_enable_4_2 <= 1'b1; adc_mux_data_4_2[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_4_2[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_4_2[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_4_2[((16*3)+15):(16*3)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_4_2[((16*4)+15):(16*4)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11001110: begin adc_mux_enable_4_2 <= 1'b1; adc_mux_data_4_2[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_4_2[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_4_2[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_4_2[((16*3)+15):(16*3)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_4_2[((16*4)+15):(16*4)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11010011: begin adc_mux_enable_4_2 <= 1'b1; adc_mux_data_4_2[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_4_2[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_4_2[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_4_2[((16*3)+15):(16*3)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_4_2[((16*4)+15):(16*4)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11010101: begin adc_mux_enable_4_2 <= 1'b1; adc_mux_data_4_2[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_4_2[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_4_2[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_4_2[((16*3)+15):(16*3)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_4_2[((16*4)+15):(16*4)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11010110: begin adc_mux_enable_4_2 <= 1'b1; adc_mux_data_4_2[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_4_2[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_4_2[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_4_2[((16*3)+15):(16*3)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_4_2[((16*4)+15):(16*4)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11011001: begin adc_mux_enable_4_2 <= 1'b1; adc_mux_data_4_2[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_4_2[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_4_2[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_4_2[((16*3)+15):(16*3)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_4_2[((16*4)+15):(16*4)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11011010: begin adc_mux_enable_4_2 <= 1'b1; adc_mux_data_4_2[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_4_2[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_4_2[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_4_2[((16*3)+15):(16*3)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_4_2[((16*4)+15):(16*4)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11011100: begin adc_mux_enable_4_2 <= 1'b1; adc_mux_data_4_2[((16*0)+15):(16*0)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_4_2[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_4_2[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_4_2[((16*3)+15):(16*3)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_4_2[((16*4)+15):(16*4)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11100011: begin adc_mux_enable_4_2 <= 1'b1; adc_mux_data_4_2[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_4_2[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_4_2[((16*2)+15):(16*2)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_4_2[((16*3)+15):(16*3)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_4_2[((16*4)+15):(16*4)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11100101: begin adc_mux_enable_4_2 <= 1'b1; adc_mux_data_4_2[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_4_2[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_4_2[((16*2)+15):(16*2)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_4_2[((16*3)+15):(16*3)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_4_2[((16*4)+15):(16*4)] <= adc_data[((16*7)+15):(16*7)]; end default: begin adc_mux_enable_4_2 <= 'd0; adc_mux_data_4_2 <= 'd0; end endcase end always @(posedge adc_clk) begin case (adc_enable) 8'b11100110: begin adc_mux_enable_4_3 <= 1'b1; adc_mux_data_4_3[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_4_3[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_4_3[((16*2)+15):(16*2)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_4_3[((16*3)+15):(16*3)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_4_3[((16*4)+15):(16*4)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11101001: begin adc_mux_enable_4_3 <= 1'b1; adc_mux_data_4_3[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_4_3[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_4_3[((16*2)+15):(16*2)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_4_3[((16*3)+15):(16*3)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_4_3[((16*4)+15):(16*4)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11101010: begin adc_mux_enable_4_3 <= 1'b1; adc_mux_data_4_3[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_4_3[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_4_3[((16*2)+15):(16*2)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_4_3[((16*3)+15):(16*3)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_4_3[((16*4)+15):(16*4)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11101100: begin adc_mux_enable_4_3 <= 1'b1; adc_mux_data_4_3[((16*0)+15):(16*0)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_4_3[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_4_3[((16*2)+15):(16*2)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_4_3[((16*3)+15):(16*3)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_4_3[((16*4)+15):(16*4)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11110001: begin adc_mux_enable_4_3 <= 1'b1; adc_mux_data_4_3[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_4_3[((16*1)+15):(16*1)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_4_3[((16*2)+15):(16*2)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_4_3[((16*3)+15):(16*3)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_4_3[((16*4)+15):(16*4)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11110010: begin adc_mux_enable_4_3 <= 1'b1; adc_mux_data_4_3[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_4_3[((16*1)+15):(16*1)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_4_3[((16*2)+15):(16*2)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_4_3[((16*3)+15):(16*3)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_4_3[((16*4)+15):(16*4)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11110100: begin adc_mux_enable_4_3 <= 1'b1; adc_mux_data_4_3[((16*0)+15):(16*0)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_4_3[((16*1)+15):(16*1)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_4_3[((16*2)+15):(16*2)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_4_3[((16*3)+15):(16*3)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_4_3[((16*4)+15):(16*4)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11111000: begin adc_mux_enable_4_3 <= 1'b1; adc_mux_data_4_3[((16*0)+15):(16*0)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_4_3[((16*1)+15):(16*1)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_4_3[((16*2)+15):(16*2)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_4_3[((16*3)+15):(16*3)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_4_3[((16*4)+15):(16*4)] <= adc_data[((16*7)+15):(16*7)]; end default: begin adc_mux_enable_4_3 <= 'd0; adc_mux_data_4_3 <= 'd0; end endcase end // 6 channel(s) always @(posedge adc_clk) begin case (adc_enable) 8'b00111111: begin adc_mux_enable_5_0 <= 1'b1; adc_mux_data_5_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_5_0[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_5_0[((16*2)+15):(16*2)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_5_0[((16*3)+15):(16*3)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_5_0[((16*4)+15):(16*4)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_5_0[((16*5)+15):(16*5)] <= adc_data[((16*5)+15):(16*5)]; end 8'b01011111: begin adc_mux_enable_5_0 <= 1'b1; adc_mux_data_5_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_5_0[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_5_0[((16*2)+15):(16*2)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_5_0[((16*3)+15):(16*3)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_5_0[((16*4)+15):(16*4)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_5_0[((16*5)+15):(16*5)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01101111: begin adc_mux_enable_5_0 <= 1'b1; adc_mux_data_5_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_5_0[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_5_0[((16*2)+15):(16*2)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_5_0[((16*3)+15):(16*3)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_5_0[((16*4)+15):(16*4)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_5_0[((16*5)+15):(16*5)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01110111: begin adc_mux_enable_5_0 <= 1'b1; adc_mux_data_5_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_5_0[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_5_0[((16*2)+15):(16*2)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_5_0[((16*3)+15):(16*3)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_5_0[((16*4)+15):(16*4)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_5_0[((16*5)+15):(16*5)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01111011: begin adc_mux_enable_5_0 <= 1'b1; adc_mux_data_5_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_5_0[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_5_0[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_5_0[((16*3)+15):(16*3)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_5_0[((16*4)+15):(16*4)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_5_0[((16*5)+15):(16*5)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01111101: begin adc_mux_enable_5_0 <= 1'b1; adc_mux_data_5_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_5_0[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_5_0[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_5_0[((16*3)+15):(16*3)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_5_0[((16*4)+15):(16*4)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_5_0[((16*5)+15):(16*5)] <= adc_data[((16*6)+15):(16*6)]; end 8'b01111110: begin adc_mux_enable_5_0 <= 1'b1; adc_mux_data_5_0[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_5_0[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_5_0[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_5_0[((16*3)+15):(16*3)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_5_0[((16*4)+15):(16*4)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_5_0[((16*5)+15):(16*5)] <= adc_data[((16*6)+15):(16*6)]; end 8'b10011111: begin adc_mux_enable_5_0 <= 1'b1; adc_mux_data_5_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_5_0[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_5_0[((16*2)+15):(16*2)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_5_0[((16*3)+15):(16*3)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_5_0[((16*4)+15):(16*4)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_5_0[((16*5)+15):(16*5)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10101111: begin adc_mux_enable_5_0 <= 1'b1; adc_mux_data_5_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_5_0[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_5_0[((16*2)+15):(16*2)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_5_0[((16*3)+15):(16*3)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_5_0[((16*4)+15):(16*4)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_5_0[((16*5)+15):(16*5)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10110111: begin adc_mux_enable_5_0 <= 1'b1; adc_mux_data_5_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_5_0[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_5_0[((16*2)+15):(16*2)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_5_0[((16*3)+15):(16*3)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_5_0[((16*4)+15):(16*4)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_5_0[((16*5)+15):(16*5)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10111011: begin adc_mux_enable_5_0 <= 1'b1; adc_mux_data_5_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_5_0[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_5_0[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_5_0[((16*3)+15):(16*3)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_5_0[((16*4)+15):(16*4)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_5_0[((16*5)+15):(16*5)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10111101: begin adc_mux_enable_5_0 <= 1'b1; adc_mux_data_5_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_5_0[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_5_0[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_5_0[((16*3)+15):(16*3)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_5_0[((16*4)+15):(16*4)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_5_0[((16*5)+15):(16*5)] <= adc_data[((16*7)+15):(16*7)]; end 8'b10111110: begin adc_mux_enable_5_0 <= 1'b1; adc_mux_data_5_0[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_5_0[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_5_0[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_5_0[((16*3)+15):(16*3)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_5_0[((16*4)+15):(16*4)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_5_0[((16*5)+15):(16*5)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11001111: begin adc_mux_enable_5_0 <= 1'b1; adc_mux_data_5_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_5_0[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_5_0[((16*2)+15):(16*2)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_5_0[((16*3)+15):(16*3)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_5_0[((16*4)+15):(16*4)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_5_0[((16*5)+15):(16*5)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11010111: begin adc_mux_enable_5_0 <= 1'b1; adc_mux_data_5_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_5_0[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_5_0[((16*2)+15):(16*2)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_5_0[((16*3)+15):(16*3)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_5_0[((16*4)+15):(16*4)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_5_0[((16*5)+15):(16*5)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11011011: begin adc_mux_enable_5_0 <= 1'b1; adc_mux_data_5_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_5_0[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_5_0[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_5_0[((16*3)+15):(16*3)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_5_0[((16*4)+15):(16*4)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_5_0[((16*5)+15):(16*5)] <= adc_data[((16*7)+15):(16*7)]; end default: begin adc_mux_enable_5_0 <= 'd0; adc_mux_data_5_0 <= 'd0; end endcase end always @(posedge adc_clk) begin case (adc_enable) 8'b11011101: begin adc_mux_enable_5_1 <= 1'b1; adc_mux_data_5_1[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_5_1[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_5_1[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_5_1[((16*3)+15):(16*3)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_5_1[((16*4)+15):(16*4)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_5_1[((16*5)+15):(16*5)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11011110: begin adc_mux_enable_5_1 <= 1'b1; adc_mux_data_5_1[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_5_1[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_5_1[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_5_1[((16*3)+15):(16*3)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_5_1[((16*4)+15):(16*4)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_5_1[((16*5)+15):(16*5)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11100111: begin adc_mux_enable_5_1 <= 1'b1; adc_mux_data_5_1[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_5_1[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_5_1[((16*2)+15):(16*2)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_5_1[((16*3)+15):(16*3)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_5_1[((16*4)+15):(16*4)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_5_1[((16*5)+15):(16*5)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11101011: begin adc_mux_enable_5_1 <= 1'b1; adc_mux_data_5_1[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_5_1[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_5_1[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_5_1[((16*3)+15):(16*3)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_5_1[((16*4)+15):(16*4)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_5_1[((16*5)+15):(16*5)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11101101: begin adc_mux_enable_5_1 <= 1'b1; adc_mux_data_5_1[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_5_1[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_5_1[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_5_1[((16*3)+15):(16*3)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_5_1[((16*4)+15):(16*4)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_5_1[((16*5)+15):(16*5)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11101110: begin adc_mux_enable_5_1 <= 1'b1; adc_mux_data_5_1[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_5_1[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_5_1[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_5_1[((16*3)+15):(16*3)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_5_1[((16*4)+15):(16*4)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_5_1[((16*5)+15):(16*5)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11110011: begin adc_mux_enable_5_1 <= 1'b1; adc_mux_data_5_1[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_5_1[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_5_1[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_5_1[((16*3)+15):(16*3)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_5_1[((16*4)+15):(16*4)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_5_1[((16*5)+15):(16*5)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11110101: begin adc_mux_enable_5_1 <= 1'b1; adc_mux_data_5_1[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_5_1[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_5_1[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_5_1[((16*3)+15):(16*3)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_5_1[((16*4)+15):(16*4)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_5_1[((16*5)+15):(16*5)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11110110: begin adc_mux_enable_5_1 <= 1'b1; adc_mux_data_5_1[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_5_1[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_5_1[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_5_1[((16*3)+15):(16*3)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_5_1[((16*4)+15):(16*4)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_5_1[((16*5)+15):(16*5)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11111001: begin adc_mux_enable_5_1 <= 1'b1; adc_mux_data_5_1[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_5_1[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_5_1[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_5_1[((16*3)+15):(16*3)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_5_1[((16*4)+15):(16*4)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_5_1[((16*5)+15):(16*5)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11111010: begin adc_mux_enable_5_1 <= 1'b1; adc_mux_data_5_1[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_5_1[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_5_1[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_5_1[((16*3)+15):(16*3)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_5_1[((16*4)+15):(16*4)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_5_1[((16*5)+15):(16*5)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11111100: begin adc_mux_enable_5_1 <= 1'b1; adc_mux_data_5_1[((16*0)+15):(16*0)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_5_1[((16*1)+15):(16*1)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_5_1[((16*2)+15):(16*2)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_5_1[((16*3)+15):(16*3)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_5_1[((16*4)+15):(16*4)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_5_1[((16*5)+15):(16*5)] <= adc_data[((16*7)+15):(16*7)]; end default: begin adc_mux_enable_5_1 <= 'd0; adc_mux_data_5_1 <= 'd0; end endcase end // 7 channel(s) always @(posedge adc_clk) begin case (adc_enable) 8'b01111111: begin adc_mux_enable_6_0 <= 1'b1; adc_mux_data_6_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_6_0[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_6_0[((16*2)+15):(16*2)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_6_0[((16*3)+15):(16*3)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_6_0[((16*4)+15):(16*4)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_6_0[((16*5)+15):(16*5)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_6_0[((16*6)+15):(16*6)] <= adc_data[((16*6)+15):(16*6)]; end 8'b10111111: begin adc_mux_enable_6_0 <= 1'b1; adc_mux_data_6_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_6_0[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_6_0[((16*2)+15):(16*2)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_6_0[((16*3)+15):(16*3)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_6_0[((16*4)+15):(16*4)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_6_0[((16*5)+15):(16*5)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_6_0[((16*6)+15):(16*6)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11011111: begin adc_mux_enable_6_0 <= 1'b1; adc_mux_data_6_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_6_0[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_6_0[((16*2)+15):(16*2)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_6_0[((16*3)+15):(16*3)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_6_0[((16*4)+15):(16*4)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_6_0[((16*5)+15):(16*5)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_6_0[((16*6)+15):(16*6)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11101111: begin adc_mux_enable_6_0 <= 1'b1; adc_mux_data_6_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_6_0[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_6_0[((16*2)+15):(16*2)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_6_0[((16*3)+15):(16*3)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_6_0[((16*4)+15):(16*4)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_6_0[((16*5)+15):(16*5)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_6_0[((16*6)+15):(16*6)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11110111: begin adc_mux_enable_6_0 <= 1'b1; adc_mux_data_6_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_6_0[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_6_0[((16*2)+15):(16*2)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_6_0[((16*3)+15):(16*3)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_6_0[((16*4)+15):(16*4)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_6_0[((16*5)+15):(16*5)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_6_0[((16*6)+15):(16*6)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11111011: begin adc_mux_enable_6_0 <= 1'b1; adc_mux_data_6_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_6_0[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_6_0[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_6_0[((16*3)+15):(16*3)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_6_0[((16*4)+15):(16*4)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_6_0[((16*5)+15):(16*5)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_6_0[((16*6)+15):(16*6)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11111101: begin adc_mux_enable_6_0 <= 1'b1; adc_mux_data_6_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_6_0[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_6_0[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_6_0[((16*3)+15):(16*3)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_6_0[((16*4)+15):(16*4)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_6_0[((16*5)+15):(16*5)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_6_0[((16*6)+15):(16*6)] <= adc_data[((16*7)+15):(16*7)]; end 8'b11111110: begin adc_mux_enable_6_0 <= 1'b1; adc_mux_data_6_0[((16*0)+15):(16*0)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_6_0[((16*1)+15):(16*1)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_6_0[((16*2)+15):(16*2)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_6_0[((16*3)+15):(16*3)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_6_0[((16*4)+15):(16*4)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_6_0[((16*5)+15):(16*5)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_6_0[((16*6)+15):(16*6)] <= adc_data[((16*7)+15):(16*7)]; end default: begin adc_mux_enable_6_0 <= 'd0; adc_mux_data_6_0 <= 'd0; end endcase end // 8 channel(s) always @(posedge adc_clk) begin case (adc_enable) 8'b11111111: begin adc_mux_enable_7_0 <= 1'b1; adc_mux_data_7_0[((16*0)+15):(16*0)] <= adc_data[((16*0)+15):(16*0)]; adc_mux_data_7_0[((16*1)+15):(16*1)] <= adc_data[((16*1)+15):(16*1)]; adc_mux_data_7_0[((16*2)+15):(16*2)] <= adc_data[((16*2)+15):(16*2)]; adc_mux_data_7_0[((16*3)+15):(16*3)] <= adc_data[((16*3)+15):(16*3)]; adc_mux_data_7_0[((16*4)+15):(16*4)] <= adc_data[((16*4)+15):(16*4)]; adc_mux_data_7_0[((16*5)+15):(16*5)] <= adc_data[((16*5)+15):(16*5)]; adc_mux_data_7_0[((16*6)+15):(16*6)] <= adc_data[((16*6)+15):(16*6)]; adc_mux_data_7_0[((16*7)+15):(16*7)] <= adc_data[((16*7)+15):(16*7)]; end default: begin adc_mux_enable_7_0 <= 'd0; adc_mux_data_7_0 <= 'd0; end endcase end endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/util_upack/000077500000000000000000000000001457144405000251365ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/util_upack/Makefile000066400000000000000000000022371457144405000266020ustar00rootroot00000000000000#################################################################################### #################################################################################### ## Copyright 2011(c) Analog Devices, Inc. ## Auto-generated, do not modify! #################################################################################### #################################################################################### M_DEPS := util_upack_ip.tcl M_DEPS += ../scripts/adi_env.tcl M_DEPS += ../scripts/adi_ip.tcl M_DEPS += util_upack_dmx.v M_DEPS += util_upack_dsf.v M_DEPS += util_upack.v M_DEPS += util_upack_constr.xdc M_VIVADO := vivado -mode batch -source M_FLIST := *.cache M_FLIST += *.data M_FLIST += *.xpr M_FLIST += *.log M_FLIST += component.xml M_FLIST += *.jou M_FLIST += xgui M_FLIST += .Xil .PHONY: all clean clean-all all: util_upack.xpr clean:clean-all clean-all: rm -rf $(M_FLIST) util_upack.xpr: $(M_DEPS) rm -rf $(M_FLIST) $(M_VIVADO) util_upack_ip.tcl >> util_upack_ip.log 2>&1 #################################################################################### #################################################################################### bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/util_upack/util_upack.qip000066400000000000000000000010071457144405000300070ustar00rootroot00000000000000# This file gets copied by Qsys several layers into the work directory. # Any relative paths defined here must be relative to that directory. set ad_hdl_dir [file normalize [file join $::quartus(qip_path) ../../../../../../fpga/ip/analogdevicesinc/hdl/]] set_global_assignment -name VERILOG_FILE $ad_hdl_dir/library/util_upack/util_upack_dmx.v set_global_assignment -name VERILOG_FILE $ad_hdl_dir/library/util_upack/util_upack_dsf.v set_global_assignment -name VERILOG_FILE $ad_hdl_dir/library/util_upack/util_upack.v bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/util_upack/util_upack.v000077500000000000000000000255771457144405000275100ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module util_upack ( // dac interface dac_clk, dac_enable_0, dac_valid_0, dac_data_0, upack_valid_0, dac_enable_1, dac_valid_1, dac_data_1, upack_valid_1, dac_enable_2, dac_valid_2, dac_data_2, upack_valid_2, dac_enable_3, dac_valid_3, dac_data_3, upack_valid_3, dac_enable_4, dac_valid_4, dac_data_4, upack_valid_4, dac_enable_5, dac_valid_5, dac_data_5, upack_valid_5, dac_enable_6, dac_valid_6, dac_data_6, upack_valid_6, dac_enable_7, dac_valid_7, dac_data_7, upack_valid_7, dma_xfer_in, dac_xfer_out, // fifo interface dac_valid, dac_sync, dac_data); // parameters parameter CHANNEL_DATA_WIDTH = 32; parameter NUM_OF_CHANNELS = 8; localparam NUM_OF_CHANNELS_M = 8; localparam NUM_OF_CHANNELS_P = NUM_OF_CHANNELS; localparam CH_SCNT = CHANNEL_DATA_WIDTH/16; localparam M_WIDTH = CHANNEL_DATA_WIDTH*NUM_OF_CHANNELS_M; localparam P_WIDTH = CHANNEL_DATA_WIDTH*NUM_OF_CHANNELS_P; // dac interface input dac_clk; input dac_enable_0; input dac_valid_0; output [(CHANNEL_DATA_WIDTH-1):0] dac_data_0; output upack_valid_0; input dac_enable_1; input dac_valid_1; output [(CHANNEL_DATA_WIDTH-1):0] dac_data_1; output upack_valid_1; input dac_enable_2; input dac_valid_2; output [(CHANNEL_DATA_WIDTH-1):0] dac_data_2; output upack_valid_2; input dac_enable_3; input dac_valid_3; output [(CHANNEL_DATA_WIDTH-1):0] dac_data_3; output upack_valid_3; input dac_enable_4; input dac_valid_4; output [(CHANNEL_DATA_WIDTH-1):0] dac_data_4; output upack_valid_4; input dac_enable_5; input dac_valid_5; output [(CHANNEL_DATA_WIDTH-1):0] dac_data_5; output upack_valid_5; input dac_enable_6; input dac_valid_6; output [(CHANNEL_DATA_WIDTH-1):0] dac_data_6; output upack_valid_6; input dac_enable_7; input dac_valid_7; output [(CHANNEL_DATA_WIDTH-1):0] dac_data_7; output upack_valid_7; input dma_xfer_in; output dac_xfer_out; // fifo interface output dac_valid; output dac_sync; input [((NUM_OF_CHANNELS*CHANNEL_DATA_WIDTH)-1):0] dac_data; // internal registers reg dac_valid = 'd0; reg dac_sync = 'd0; reg [(M_WIDTH-1):0] dac_dsf_data = 'd0; reg [ 7:0] dac_dmx_enable = 'd0; reg xfer_valid_d1; reg xfer_valid_d2; reg xfer_valid_d3; reg xfer_valid_d4; reg xfer_valid_d5; reg dac_xfer_out; // internal signals wire dac_valid_s; wire dac_dsf_valid_s[(NUM_OF_CHANNELS_M-1):0]; wire dac_dsf_sync_s[(NUM_OF_CHANNELS_M-1):0]; wire [(M_WIDTH-1):0] dac_dsf_data_s[(NUM_OF_CHANNELS_M-1):0]; wire [(CH_SCNT-1):0] dac_dmx_enable_7_s; wire [(CH_SCNT-1):0] dac_dmx_enable_6_s; wire [(CH_SCNT-1):0] dac_dmx_enable_5_s; wire [(CH_SCNT-1):0] dac_dmx_enable_4_s; wire [(CH_SCNT-1):0] dac_dmx_enable_3_s; wire [(CH_SCNT-1):0] dac_dmx_enable_2_s; wire [(CH_SCNT-1):0] dac_dmx_enable_1_s; wire [(CH_SCNT-1):0] dac_dmx_enable_0_s; // loop variables genvar n; // parameter breaks here (max. 8) -- reduce won't work across 2d arrays. assign dac_valid_s = dac_valid_7 | dac_valid_6 | dac_valid_5 | dac_valid_4 | dac_valid_3 | dac_valid_2 | dac_valid_1 | dac_valid_0; assign upack_valid_0 = | dac_dmx_enable & dac_enable_0 & dac_xfer_out; assign upack_valid_1 = | dac_dmx_enable & dac_enable_1 & dac_xfer_out; assign upack_valid_2 = | dac_dmx_enable & dac_enable_2 & dac_xfer_out; assign upack_valid_3 = | dac_dmx_enable & dac_enable_3 & dac_xfer_out; assign upack_valid_4 = | dac_dmx_enable & dac_enable_4 & dac_xfer_out; assign upack_valid_5 = | dac_dmx_enable & dac_enable_5 & dac_xfer_out; assign upack_valid_6 = | dac_dmx_enable & dac_enable_6 & dac_xfer_out; assign upack_valid_7 = | dac_dmx_enable & dac_enable_7 & dac_xfer_out; always @(posedge dac_clk) begin xfer_valid_d1 <= dma_xfer_in; xfer_valid_d2 <= xfer_valid_d1; xfer_valid_d3 <= xfer_valid_d2; xfer_valid_d4 <= xfer_valid_d3; xfer_valid_d5 <= xfer_valid_d4; if (dac_dmx_enable[NUM_OF_CHANNELS_P-1] == 1'b1) begin dac_xfer_out <= xfer_valid_d4; end else begin dac_xfer_out <= xfer_valid_d5; end end always @(posedge dac_clk) begin dac_valid <= dac_dsf_valid_s[7] | dac_dsf_valid_s[6] | dac_dsf_valid_s[5] | dac_dsf_valid_s[4] | dac_dsf_valid_s[3] | dac_dsf_valid_s[2] | dac_dsf_valid_s[1] | dac_dsf_valid_s[0]; dac_sync <= dac_dsf_sync_s[7] | dac_dsf_sync_s[6] | dac_dsf_sync_s[5] | dac_dsf_sync_s[4] | dac_dsf_sync_s[3] | dac_dsf_sync_s[2] | dac_dsf_sync_s[1] | dac_dsf_sync_s[0]; dac_dsf_data <= dac_dsf_data_s[7] | dac_dsf_data_s[6] | dac_dsf_data_s[5] | dac_dsf_data_s[4] | dac_dsf_data_s[3] | dac_dsf_data_s[2] | dac_dsf_data_s[1] | dac_dsf_data_s[0]; dac_dmx_enable[7] <= | dac_dmx_enable_7_s; dac_dmx_enable[6] <= | dac_dmx_enable_6_s; dac_dmx_enable[5] <= | dac_dmx_enable_5_s; dac_dmx_enable[4] <= | dac_dmx_enable_4_s; dac_dmx_enable[3] <= | dac_dmx_enable_3_s; dac_dmx_enable[2] <= | dac_dmx_enable_2_s; dac_dmx_enable[1] <= | dac_dmx_enable_1_s; dac_dmx_enable[0] <= | dac_dmx_enable_0_s; end // store & fwd generate if (NUM_OF_CHANNELS_P < NUM_OF_CHANNELS_M) begin for (n = NUM_OF_CHANNELS_P; n < NUM_OF_CHANNELS_M; n = n + 1) begin: g_def assign dac_dsf_valid_s[n] = 'd0; assign dac_dsf_sync_s[n] = 'd0; assign dac_dsf_data_s[n] = 'd0; end end for (n = 0; n < NUM_OF_CHANNELS_P; n = n + 1) begin: g_dsf util_upack_dsf #( .NUM_OF_CHANNELS_P (NUM_OF_CHANNELS_P), .NUM_OF_CHANNELS_M (NUM_OF_CHANNELS_M), .CHANNEL_DATA_WIDTH (CHANNEL_DATA_WIDTH), .NUM_OF_CHANNELS_O ((n+1))) i_dsf ( .dac_clk (dac_clk), .dac_valid (dac_valid_s), .dac_data (dac_data), .dac_dmx_enable (dac_dmx_enable[n]), .dac_dsf_valid (dac_dsf_valid_s[n]), .dac_dsf_sync (dac_dsf_sync_s[n]), .dac_dsf_data (dac_dsf_data_s[n])); end endgenerate // demux generate for (n = 0; n < CH_SCNT; n = n + 1) begin: g_dmx util_upack_dmx i_dmx ( .dac_clk (dac_clk), .dac_enable ({dac_enable_7, dac_enable_6, dac_enable_5, dac_enable_4, dac_enable_3, dac_enable_2, dac_enable_1, dac_enable_0}), .dac_data_0 (dac_data_0[((16*n)+15):(16*n)]), .dac_data_1 (dac_data_1[((16*n)+15):(16*n)]), .dac_data_2 (dac_data_2[((16*n)+15):(16*n)]), .dac_data_3 (dac_data_3[((16*n)+15):(16*n)]), .dac_data_4 (dac_data_4[((16*n)+15):(16*n)]), .dac_data_5 (dac_data_5[((16*n)+15):(16*n)]), .dac_data_6 (dac_data_6[((16*n)+15):(16*n)]), .dac_data_7 (dac_data_7[((16*n)+15):(16*n)]), .dac_dmx_enable ({dac_dmx_enable_7_s[n], dac_dmx_enable_6_s[n], dac_dmx_enable_5_s[n], dac_dmx_enable_4_s[n], dac_dmx_enable_3_s[n], dac_dmx_enable_2_s[n], dac_dmx_enable_1_s[n], dac_dmx_enable_0_s[n]}), .dac_dsf_data (dac_dsf_data[((NUM_OF_CHANNELS_M*16*(n+1))-1):(NUM_OF_CHANNELS_M*16*n)])); end endgenerate endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/util_upack/util_upack_constr.xdc000066400000000000000000000000001457144405000313540ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/util_upack/util_upack_dmx.v000077500000000000000000004475061457144405000303600ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module util_upack_dmx ( // dac interface dac_clk, dac_enable, dac_data_0, dac_data_1, dac_data_2, dac_data_3, dac_data_4, dac_data_5, dac_data_6, dac_data_7, // dmx interface dac_dmx_enable, dac_dsf_data); // dac interface input dac_clk; input [ 7:0] dac_enable; output [ 15:0] dac_data_0; output [ 15:0] dac_data_1; output [ 15:0] dac_data_2; output [ 15:0] dac_data_3; output [ 15:0] dac_data_4; output [ 15:0] dac_data_5; output [ 15:0] dac_data_6; output [ 15:0] dac_data_7; // dmx interface output [ 7:0] dac_dmx_enable; input [127:0] dac_dsf_data; // internal registers reg [ 7:0] dac_dmx_enable = 'd0; reg [ 15:0] dac_data_0 = 'd0; reg [ 15:0] dac_data_1 = 'd0; reg [ 15:0] dac_data_2 = 'd0; reg [ 15:0] dac_data_3 = 'd0; reg [ 15:0] dac_data_4 = 'd0; reg [ 15:0] dac_data_5 = 'd0; reg [ 15:0] dac_data_6 = 'd0; reg [ 15:0] dac_data_7 = 'd0; reg dac_dmx_enable_0 = 'd0; reg [ 15:0] dac_dmx_data_0_0 = 'd0; reg [ 15:0] dac_dmx_data_1_0 = 'd0; reg [ 15:0] dac_dmx_data_2_0 = 'd0; reg [ 15:0] dac_dmx_data_3_0 = 'd0; reg [ 15:0] dac_dmx_data_4_0 = 'd0; reg [ 15:0] dac_dmx_data_5_0 = 'd0; reg [ 15:0] dac_dmx_data_6_0 = 'd0; reg [ 15:0] dac_dmx_data_7_0 = 'd0; reg dac_dmx_enable_1 = 'd0; reg [ 15:0] dac_dmx_data_0_1 = 'd0; reg [ 15:0] dac_dmx_data_1_1 = 'd0; reg [ 15:0] dac_dmx_data_2_1 = 'd0; reg [ 15:0] dac_dmx_data_3_1 = 'd0; reg [ 15:0] dac_dmx_data_4_1 = 'd0; reg [ 15:0] dac_dmx_data_5_1 = 'd0; reg [ 15:0] dac_dmx_data_6_1 = 'd0; reg [ 15:0] dac_dmx_data_7_1 = 'd0; reg dac_dmx_enable_2 = 'd0; reg [ 15:0] dac_dmx_data_0_2 = 'd0; reg [ 15:0] dac_dmx_data_1_2 = 'd0; reg [ 15:0] dac_dmx_data_2_2 = 'd0; reg [ 15:0] dac_dmx_data_3_2 = 'd0; reg [ 15:0] dac_dmx_data_4_2 = 'd0; reg [ 15:0] dac_dmx_data_5_2 = 'd0; reg [ 15:0] dac_dmx_data_6_2 = 'd0; reg [ 15:0] dac_dmx_data_7_2 = 'd0; reg dac_dmx_enable_3 = 'd0; reg [ 15:0] dac_dmx_data_0_3 = 'd0; reg [ 15:0] dac_dmx_data_1_3 = 'd0; reg [ 15:0] dac_dmx_data_2_3 = 'd0; reg [ 15:0] dac_dmx_data_3_3 = 'd0; reg [ 15:0] dac_dmx_data_4_3 = 'd0; reg [ 15:0] dac_dmx_data_5_3 = 'd0; reg [ 15:0] dac_dmx_data_6_3 = 'd0; reg [ 15:0] dac_dmx_data_7_3 = 'd0; reg dac_dmx_enable_4 = 'd0; reg [ 15:0] dac_dmx_data_0_4 = 'd0; reg [ 15:0] dac_dmx_data_1_4 = 'd0; reg [ 15:0] dac_dmx_data_2_4 = 'd0; reg [ 15:0] dac_dmx_data_3_4 = 'd0; reg [ 15:0] dac_dmx_data_4_4 = 'd0; reg [ 15:0] dac_dmx_data_5_4 = 'd0; reg [ 15:0] dac_dmx_data_6_4 = 'd0; reg [ 15:0] dac_dmx_data_7_4 = 'd0; reg dac_dmx_enable_5 = 'd0; reg [ 15:0] dac_dmx_data_0_5 = 'd0; reg [ 15:0] dac_dmx_data_1_5 = 'd0; reg [ 15:0] dac_dmx_data_2_5 = 'd0; reg [ 15:0] dac_dmx_data_3_5 = 'd0; reg [ 15:0] dac_dmx_data_4_5 = 'd0; reg [ 15:0] dac_dmx_data_5_5 = 'd0; reg [ 15:0] dac_dmx_data_6_5 = 'd0; reg [ 15:0] dac_dmx_data_7_5 = 'd0; reg dac_dmx_enable_6 = 'd0; reg [ 15:0] dac_dmx_data_0_6 = 'd0; reg [ 15:0] dac_dmx_data_1_6 = 'd0; reg [ 15:0] dac_dmx_data_2_6 = 'd0; reg [ 15:0] dac_dmx_data_3_6 = 'd0; reg [ 15:0] dac_dmx_data_4_6 = 'd0; reg [ 15:0] dac_dmx_data_5_6 = 'd0; reg [ 15:0] dac_dmx_data_6_6 = 'd0; reg [ 15:0] dac_dmx_data_7_6 = 'd0; reg dac_dmx_enable_7 = 'd0; reg [ 15:0] dac_dmx_data_0_7 = 'd0; reg [ 15:0] dac_dmx_data_1_7 = 'd0; reg [ 15:0] dac_dmx_data_2_7 = 'd0; reg [ 15:0] dac_dmx_data_3_7 = 'd0; reg [ 15:0] dac_dmx_data_4_7 = 'd0; reg [ 15:0] dac_dmx_data_5_7 = 'd0; reg [ 15:0] dac_dmx_data_6_7 = 'd0; reg [ 15:0] dac_dmx_data_7_7 = 'd0; reg dac_dmx_enable_0_0 = 'd0; reg [ 15:0] dac_dmx_data_0_0_0 = 'd0; reg [ 15:0] dac_dmx_data_1_0_0 = 'd0; reg [ 15:0] dac_dmx_data_2_0_0 = 'd0; reg [ 15:0] dac_dmx_data_3_0_0 = 'd0; reg [ 15:0] dac_dmx_data_4_0_0 = 'd0; reg [ 15:0] dac_dmx_data_5_0_0 = 'd0; reg [ 15:0] dac_dmx_data_6_0_0 = 'd0; reg [ 15:0] dac_dmx_data_7_0_0 = 'd0; reg dac_dmx_enable_1_0 = 'd0; reg [ 15:0] dac_dmx_data_0_1_0 = 'd0; reg [ 15:0] dac_dmx_data_1_1_0 = 'd0; reg [ 15:0] dac_dmx_data_2_1_0 = 'd0; reg [ 15:0] dac_dmx_data_3_1_0 = 'd0; reg [ 15:0] dac_dmx_data_4_1_0 = 'd0; reg [ 15:0] dac_dmx_data_5_1_0 = 'd0; reg [ 15:0] dac_dmx_data_6_1_0 = 'd0; reg [ 15:0] dac_dmx_data_7_1_0 = 'd0; reg dac_dmx_enable_1_1 = 'd0; reg [ 15:0] dac_dmx_data_0_1_1 = 'd0; reg [ 15:0] dac_dmx_data_1_1_1 = 'd0; reg [ 15:0] dac_dmx_data_2_1_1 = 'd0; reg [ 15:0] dac_dmx_data_3_1_1 = 'd0; reg [ 15:0] dac_dmx_data_4_1_1 = 'd0; reg [ 15:0] dac_dmx_data_5_1_1 = 'd0; reg [ 15:0] dac_dmx_data_6_1_1 = 'd0; reg [ 15:0] dac_dmx_data_7_1_1 = 'd0; reg dac_dmx_enable_2_0 = 'd0; reg [ 15:0] dac_dmx_data_0_2_0 = 'd0; reg [ 15:0] dac_dmx_data_1_2_0 = 'd0; reg [ 15:0] dac_dmx_data_2_2_0 = 'd0; reg [ 15:0] dac_dmx_data_3_2_0 = 'd0; reg [ 15:0] dac_dmx_data_4_2_0 = 'd0; reg [ 15:0] dac_dmx_data_5_2_0 = 'd0; reg [ 15:0] dac_dmx_data_6_2_0 = 'd0; reg [ 15:0] dac_dmx_data_7_2_0 = 'd0; reg dac_dmx_enable_2_1 = 'd0; reg [ 15:0] dac_dmx_data_0_2_1 = 'd0; reg [ 15:0] dac_dmx_data_1_2_1 = 'd0; reg [ 15:0] dac_dmx_data_2_2_1 = 'd0; reg [ 15:0] dac_dmx_data_3_2_1 = 'd0; reg [ 15:0] dac_dmx_data_4_2_1 = 'd0; reg [ 15:0] dac_dmx_data_5_2_1 = 'd0; reg [ 15:0] dac_dmx_data_6_2_1 = 'd0; reg [ 15:0] dac_dmx_data_7_2_1 = 'd0; reg dac_dmx_enable_2_2 = 'd0; reg [ 15:0] dac_dmx_data_0_2_2 = 'd0; reg [ 15:0] dac_dmx_data_1_2_2 = 'd0; reg [ 15:0] dac_dmx_data_2_2_2 = 'd0; reg [ 15:0] dac_dmx_data_3_2_2 = 'd0; reg [ 15:0] dac_dmx_data_4_2_2 = 'd0; reg [ 15:0] dac_dmx_data_5_2_2 = 'd0; reg [ 15:0] dac_dmx_data_6_2_2 = 'd0; reg [ 15:0] dac_dmx_data_7_2_2 = 'd0; reg dac_dmx_enable_2_3 = 'd0; reg [ 15:0] dac_dmx_data_0_2_3 = 'd0; reg [ 15:0] dac_dmx_data_1_2_3 = 'd0; reg [ 15:0] dac_dmx_data_2_2_3 = 'd0; reg [ 15:0] dac_dmx_data_3_2_3 = 'd0; reg [ 15:0] dac_dmx_data_4_2_3 = 'd0; reg [ 15:0] dac_dmx_data_5_2_3 = 'd0; reg [ 15:0] dac_dmx_data_6_2_3 = 'd0; reg [ 15:0] dac_dmx_data_7_2_3 = 'd0; reg dac_dmx_enable_3_0 = 'd0; reg [ 15:0] dac_dmx_data_0_3_0 = 'd0; reg [ 15:0] dac_dmx_data_1_3_0 = 'd0; reg [ 15:0] dac_dmx_data_2_3_0 = 'd0; reg [ 15:0] dac_dmx_data_3_3_0 = 'd0; reg [ 15:0] dac_dmx_data_4_3_0 = 'd0; reg [ 15:0] dac_dmx_data_5_3_0 = 'd0; reg [ 15:0] dac_dmx_data_6_3_0 = 'd0; reg [ 15:0] dac_dmx_data_7_3_0 = 'd0; reg dac_dmx_enable_3_1 = 'd0; reg [ 15:0] dac_dmx_data_0_3_1 = 'd0; reg [ 15:0] dac_dmx_data_1_3_1 = 'd0; reg [ 15:0] dac_dmx_data_2_3_1 = 'd0; reg [ 15:0] dac_dmx_data_3_3_1 = 'd0; reg [ 15:0] dac_dmx_data_4_3_1 = 'd0; reg [ 15:0] dac_dmx_data_5_3_1 = 'd0; reg [ 15:0] dac_dmx_data_6_3_1 = 'd0; reg [ 15:0] dac_dmx_data_7_3_1 = 'd0; reg dac_dmx_enable_3_2 = 'd0; reg [ 15:0] dac_dmx_data_0_3_2 = 'd0; reg [ 15:0] dac_dmx_data_1_3_2 = 'd0; reg [ 15:0] dac_dmx_data_2_3_2 = 'd0; reg [ 15:0] dac_dmx_data_3_3_2 = 'd0; reg [ 15:0] dac_dmx_data_4_3_2 = 'd0; reg [ 15:0] dac_dmx_data_5_3_2 = 'd0; reg [ 15:0] dac_dmx_data_6_3_2 = 'd0; reg [ 15:0] dac_dmx_data_7_3_2 = 'd0; reg dac_dmx_enable_3_3 = 'd0; reg [ 15:0] dac_dmx_data_0_3_3 = 'd0; reg [ 15:0] dac_dmx_data_1_3_3 = 'd0; reg [ 15:0] dac_dmx_data_2_3_3 = 'd0; reg [ 15:0] dac_dmx_data_3_3_3 = 'd0; reg [ 15:0] dac_dmx_data_4_3_3 = 'd0; reg [ 15:0] dac_dmx_data_5_3_3 = 'd0; reg [ 15:0] dac_dmx_data_6_3_3 = 'd0; reg [ 15:0] dac_dmx_data_7_3_3 = 'd0; reg dac_dmx_enable_3_4 = 'd0; reg [ 15:0] dac_dmx_data_0_3_4 = 'd0; reg [ 15:0] dac_dmx_data_1_3_4 = 'd0; reg [ 15:0] dac_dmx_data_2_3_4 = 'd0; reg [ 15:0] dac_dmx_data_3_3_4 = 'd0; reg [ 15:0] dac_dmx_data_4_3_4 = 'd0; reg [ 15:0] dac_dmx_data_5_3_4 = 'd0; reg [ 15:0] dac_dmx_data_6_3_4 = 'd0; reg [ 15:0] dac_dmx_data_7_3_4 = 'd0; reg dac_dmx_enable_4_0 = 'd0; reg [ 15:0] dac_dmx_data_0_4_0 = 'd0; reg [ 15:0] dac_dmx_data_1_4_0 = 'd0; reg [ 15:0] dac_dmx_data_2_4_0 = 'd0; reg [ 15:0] dac_dmx_data_3_4_0 = 'd0; reg [ 15:0] dac_dmx_data_4_4_0 = 'd0; reg [ 15:0] dac_dmx_data_5_4_0 = 'd0; reg [ 15:0] dac_dmx_data_6_4_0 = 'd0; reg [ 15:0] dac_dmx_data_7_4_0 = 'd0; reg dac_dmx_enable_4_1 = 'd0; reg [ 15:0] dac_dmx_data_0_4_1 = 'd0; reg [ 15:0] dac_dmx_data_1_4_1 = 'd0; reg [ 15:0] dac_dmx_data_2_4_1 = 'd0; reg [ 15:0] dac_dmx_data_3_4_1 = 'd0; reg [ 15:0] dac_dmx_data_4_4_1 = 'd0; reg [ 15:0] dac_dmx_data_5_4_1 = 'd0; reg [ 15:0] dac_dmx_data_6_4_1 = 'd0; reg [ 15:0] dac_dmx_data_7_4_1 = 'd0; reg dac_dmx_enable_4_2 = 'd0; reg [ 15:0] dac_dmx_data_0_4_2 = 'd0; reg [ 15:0] dac_dmx_data_1_4_2 = 'd0; reg [ 15:0] dac_dmx_data_2_4_2 = 'd0; reg [ 15:0] dac_dmx_data_3_4_2 = 'd0; reg [ 15:0] dac_dmx_data_4_4_2 = 'd0; reg [ 15:0] dac_dmx_data_5_4_2 = 'd0; reg [ 15:0] dac_dmx_data_6_4_2 = 'd0; reg [ 15:0] dac_dmx_data_7_4_2 = 'd0; reg dac_dmx_enable_4_3 = 'd0; reg [ 15:0] dac_dmx_data_0_4_3 = 'd0; reg [ 15:0] dac_dmx_data_1_4_3 = 'd0; reg [ 15:0] dac_dmx_data_2_4_3 = 'd0; reg [ 15:0] dac_dmx_data_3_4_3 = 'd0; reg [ 15:0] dac_dmx_data_4_4_3 = 'd0; reg [ 15:0] dac_dmx_data_5_4_3 = 'd0; reg [ 15:0] dac_dmx_data_6_4_3 = 'd0; reg [ 15:0] dac_dmx_data_7_4_3 = 'd0; reg dac_dmx_enable_5_0 = 'd0; reg [ 15:0] dac_dmx_data_0_5_0 = 'd0; reg [ 15:0] dac_dmx_data_1_5_0 = 'd0; reg [ 15:0] dac_dmx_data_2_5_0 = 'd0; reg [ 15:0] dac_dmx_data_3_5_0 = 'd0; reg [ 15:0] dac_dmx_data_4_5_0 = 'd0; reg [ 15:0] dac_dmx_data_5_5_0 = 'd0; reg [ 15:0] dac_dmx_data_6_5_0 = 'd0; reg [ 15:0] dac_dmx_data_7_5_0 = 'd0; reg dac_dmx_enable_5_1 = 'd0; reg [ 15:0] dac_dmx_data_0_5_1 = 'd0; reg [ 15:0] dac_dmx_data_1_5_1 = 'd0; reg [ 15:0] dac_dmx_data_2_5_1 = 'd0; reg [ 15:0] dac_dmx_data_3_5_1 = 'd0; reg [ 15:0] dac_dmx_data_4_5_1 = 'd0; reg [ 15:0] dac_dmx_data_5_5_1 = 'd0; reg [ 15:0] dac_dmx_data_6_5_1 = 'd0; reg [ 15:0] dac_dmx_data_7_5_1 = 'd0; reg dac_dmx_enable_6_0 = 'd0; reg [ 15:0] dac_dmx_data_0_6_0 = 'd0; reg [ 15:0] dac_dmx_data_1_6_0 = 'd0; reg [ 15:0] dac_dmx_data_2_6_0 = 'd0; reg [ 15:0] dac_dmx_data_3_6_0 = 'd0; reg [ 15:0] dac_dmx_data_4_6_0 = 'd0; reg [ 15:0] dac_dmx_data_5_6_0 = 'd0; reg [ 15:0] dac_dmx_data_6_6_0 = 'd0; reg [ 15:0] dac_dmx_data_7_6_0 = 'd0; reg dac_dmx_enable_7_0 = 'd0; reg [ 15:0] dac_dmx_data_0_7_0 = 'd0; reg [ 15:0] dac_dmx_data_1_7_0 = 'd0; reg [ 15:0] dac_dmx_data_2_7_0 = 'd0; reg [ 15:0] dac_dmx_data_3_7_0 = 'd0; reg [ 15:0] dac_dmx_data_4_7_0 = 'd0; reg [ 15:0] dac_dmx_data_5_7_0 = 'd0; reg [ 15:0] dac_dmx_data_6_7_0 = 'd0; reg [ 15:0] dac_dmx_data_7_7_0 = 'd0; // simple data or for pipe line registers always @(posedge dac_clk) begin dac_dmx_enable <= { dac_dmx_enable_7, dac_dmx_enable_6, dac_dmx_enable_5, dac_dmx_enable_4, dac_dmx_enable_3, dac_dmx_enable_2, dac_dmx_enable_1, dac_dmx_enable_0}; end always @(posedge dac_clk) begin dac_data_0 <= dac_dmx_data_0_0 | dac_dmx_data_0_1 | dac_dmx_data_0_2 | dac_dmx_data_0_3 | dac_dmx_data_0_4 | dac_dmx_data_0_5 | dac_dmx_data_0_6 | dac_dmx_data_0_7; dac_data_1 <= dac_dmx_data_1_0 | dac_dmx_data_1_1 | dac_dmx_data_1_2 | dac_dmx_data_1_3 | dac_dmx_data_1_4 | dac_dmx_data_1_5 | dac_dmx_data_1_6 | dac_dmx_data_1_7; dac_data_2 <= dac_dmx_data_2_0 | dac_dmx_data_2_1 | dac_dmx_data_2_2 | dac_dmx_data_2_3 | dac_dmx_data_2_4 | dac_dmx_data_2_5 | dac_dmx_data_2_6 | dac_dmx_data_2_7; dac_data_3 <= dac_dmx_data_3_0 | dac_dmx_data_3_1 | dac_dmx_data_3_2 | dac_dmx_data_3_3 | dac_dmx_data_3_4 | dac_dmx_data_3_5 | dac_dmx_data_3_6 | dac_dmx_data_3_7; dac_data_4 <= dac_dmx_data_4_0 | dac_dmx_data_4_1 | dac_dmx_data_4_2 | dac_dmx_data_4_3 | dac_dmx_data_4_4 | dac_dmx_data_4_5 | dac_dmx_data_4_6 | dac_dmx_data_4_7; dac_data_5 <= dac_dmx_data_5_0 | dac_dmx_data_5_1 | dac_dmx_data_5_2 | dac_dmx_data_5_3 | dac_dmx_data_5_4 | dac_dmx_data_5_5 | dac_dmx_data_5_6 | dac_dmx_data_5_7; dac_data_6 <= dac_dmx_data_6_0 | dac_dmx_data_6_1 | dac_dmx_data_6_2 | dac_dmx_data_6_3 | dac_dmx_data_6_4 | dac_dmx_data_6_5 | dac_dmx_data_6_6 | dac_dmx_data_6_7; dac_data_7 <= dac_dmx_data_7_0 | dac_dmx_data_7_1 | dac_dmx_data_7_2 | dac_dmx_data_7_3 | dac_dmx_data_7_4 | dac_dmx_data_7_5 | dac_dmx_data_7_6 | dac_dmx_data_7_7; end always @(posedge dac_clk) begin dac_dmx_enable_0 <= dac_dmx_enable_0_0; dac_dmx_data_0_0 <= dac_dmx_data_0_0_0; dac_dmx_data_1_0 <= dac_dmx_data_1_0_0; dac_dmx_data_2_0 <= dac_dmx_data_2_0_0; dac_dmx_data_3_0 <= dac_dmx_data_3_0_0; dac_dmx_data_4_0 <= dac_dmx_data_4_0_0; dac_dmx_data_5_0 <= dac_dmx_data_5_0_0; dac_dmx_data_6_0 <= dac_dmx_data_6_0_0; dac_dmx_data_7_0 <= dac_dmx_data_7_0_0; dac_dmx_enable_1 <= dac_dmx_enable_1_0 | dac_dmx_enable_1_1; dac_dmx_data_0_1 <= dac_dmx_data_0_1_0 | dac_dmx_data_0_1_1; dac_dmx_data_1_1 <= dac_dmx_data_1_1_0 | dac_dmx_data_1_1_1; dac_dmx_data_2_1 <= dac_dmx_data_2_1_0 | dac_dmx_data_2_1_1; dac_dmx_data_3_1 <= dac_dmx_data_3_1_0 | dac_dmx_data_3_1_1; dac_dmx_data_4_1 <= dac_dmx_data_4_1_0 | dac_dmx_data_4_1_1; dac_dmx_data_5_1 <= dac_dmx_data_5_1_0 | dac_dmx_data_5_1_1; dac_dmx_data_6_1 <= dac_dmx_data_6_1_0 | dac_dmx_data_6_1_1; dac_dmx_data_7_1 <= dac_dmx_data_7_1_0 | dac_dmx_data_7_1_1; dac_dmx_enable_2 <= dac_dmx_enable_2_0 | dac_dmx_enable_2_1 | dac_dmx_enable_2_2 | dac_dmx_enable_2_3; dac_dmx_data_0_2 <= dac_dmx_data_0_2_0 | dac_dmx_data_0_2_1 | dac_dmx_data_0_2_2 | dac_dmx_data_0_2_3; dac_dmx_data_1_2 <= dac_dmx_data_1_2_0 | dac_dmx_data_1_2_1 | dac_dmx_data_1_2_2 | dac_dmx_data_1_2_3; dac_dmx_data_2_2 <= dac_dmx_data_2_2_0 | dac_dmx_data_2_2_1 | dac_dmx_data_2_2_2 | dac_dmx_data_2_2_3; dac_dmx_data_3_2 <= dac_dmx_data_3_2_0 | dac_dmx_data_3_2_1 | dac_dmx_data_3_2_2 | dac_dmx_data_3_2_3; dac_dmx_data_4_2 <= dac_dmx_data_4_2_0 | dac_dmx_data_4_2_1 | dac_dmx_data_4_2_2 | dac_dmx_data_4_2_3; dac_dmx_data_5_2 <= dac_dmx_data_5_2_0 | dac_dmx_data_5_2_1 | dac_dmx_data_5_2_2 | dac_dmx_data_5_2_3; dac_dmx_data_6_2 <= dac_dmx_data_6_2_0 | dac_dmx_data_6_2_1 | dac_dmx_data_6_2_2 | dac_dmx_data_6_2_3; dac_dmx_data_7_2 <= dac_dmx_data_7_2_0 | dac_dmx_data_7_2_1 | dac_dmx_data_7_2_2 | dac_dmx_data_7_2_3; dac_dmx_enable_3 <= dac_dmx_enable_3_0 | dac_dmx_enable_3_1 | dac_dmx_enable_3_2 | dac_dmx_enable_3_3 | dac_dmx_enable_3_4; dac_dmx_data_0_3 <= dac_dmx_data_0_3_0 | dac_dmx_data_0_3_1 | dac_dmx_data_0_3_2 | dac_dmx_data_0_3_3 | dac_dmx_data_0_3_4; dac_dmx_data_1_3 <= dac_dmx_data_1_3_0 | dac_dmx_data_1_3_1 | dac_dmx_data_1_3_2 | dac_dmx_data_1_3_3 | dac_dmx_data_1_3_4; dac_dmx_data_2_3 <= dac_dmx_data_2_3_0 | dac_dmx_data_2_3_1 | dac_dmx_data_2_3_2 | dac_dmx_data_2_3_3 | dac_dmx_data_2_3_4; dac_dmx_data_3_3 <= dac_dmx_data_3_3_0 | dac_dmx_data_3_3_1 | dac_dmx_data_3_3_2 | dac_dmx_data_3_3_3 | dac_dmx_data_3_3_4; dac_dmx_data_4_3 <= dac_dmx_data_4_3_0 | dac_dmx_data_4_3_1 | dac_dmx_data_4_3_2 | dac_dmx_data_4_3_3 | dac_dmx_data_4_3_4; dac_dmx_data_5_3 <= dac_dmx_data_5_3_0 | dac_dmx_data_5_3_1 | dac_dmx_data_5_3_2 | dac_dmx_data_5_3_3 | dac_dmx_data_5_3_4; dac_dmx_data_6_3 <= dac_dmx_data_6_3_0 | dac_dmx_data_6_3_1 | dac_dmx_data_6_3_2 | dac_dmx_data_6_3_3 | dac_dmx_data_6_3_4; dac_dmx_data_7_3 <= dac_dmx_data_7_3_0 | dac_dmx_data_7_3_1 | dac_dmx_data_7_3_2 | dac_dmx_data_7_3_3 | dac_dmx_data_7_3_4; dac_dmx_enable_4 <= dac_dmx_enable_4_0 | dac_dmx_enable_4_1 | dac_dmx_enable_4_2 | dac_dmx_enable_4_3; dac_dmx_data_0_4 <= dac_dmx_data_0_4_0 | dac_dmx_data_0_4_1 | dac_dmx_data_0_4_2 | dac_dmx_data_0_4_3; dac_dmx_data_1_4 <= dac_dmx_data_1_4_0 | dac_dmx_data_1_4_1 | dac_dmx_data_1_4_2 | dac_dmx_data_1_4_3; dac_dmx_data_2_4 <= dac_dmx_data_2_4_0 | dac_dmx_data_2_4_1 | dac_dmx_data_2_4_2 | dac_dmx_data_2_4_3; dac_dmx_data_3_4 <= dac_dmx_data_3_4_0 | dac_dmx_data_3_4_1 | dac_dmx_data_3_4_2 | dac_dmx_data_3_4_3; dac_dmx_data_4_4 <= dac_dmx_data_4_4_0 | dac_dmx_data_4_4_1 | dac_dmx_data_4_4_2 | dac_dmx_data_4_4_3; dac_dmx_data_5_4 <= dac_dmx_data_5_4_0 | dac_dmx_data_5_4_1 | dac_dmx_data_5_4_2 | dac_dmx_data_5_4_3; dac_dmx_data_6_4 <= dac_dmx_data_6_4_0 | dac_dmx_data_6_4_1 | dac_dmx_data_6_4_2 | dac_dmx_data_6_4_3; dac_dmx_data_7_4 <= dac_dmx_data_7_4_0 | dac_dmx_data_7_4_1 | dac_dmx_data_7_4_2 | dac_dmx_data_7_4_3; dac_dmx_enable_5 <= dac_dmx_enable_5_0 | dac_dmx_enable_5_1; dac_dmx_data_0_5 <= dac_dmx_data_0_5_0 | dac_dmx_data_0_5_1; dac_dmx_data_1_5 <= dac_dmx_data_1_5_0 | dac_dmx_data_1_5_1; dac_dmx_data_2_5 <= dac_dmx_data_2_5_0 | dac_dmx_data_2_5_1; dac_dmx_data_3_5 <= dac_dmx_data_3_5_0 | dac_dmx_data_3_5_1; dac_dmx_data_4_5 <= dac_dmx_data_4_5_0 | dac_dmx_data_4_5_1; dac_dmx_data_5_5 <= dac_dmx_data_5_5_0 | dac_dmx_data_5_5_1; dac_dmx_data_6_5 <= dac_dmx_data_6_5_0 | dac_dmx_data_6_5_1; dac_dmx_data_7_5 <= dac_dmx_data_7_5_0 | dac_dmx_data_7_5_1; dac_dmx_enable_6 <= dac_dmx_enable_6_0; dac_dmx_data_0_6 <= dac_dmx_data_0_6_0; dac_dmx_data_1_6 <= dac_dmx_data_1_6_0; dac_dmx_data_2_6 <= dac_dmx_data_2_6_0; dac_dmx_data_3_6 <= dac_dmx_data_3_6_0; dac_dmx_data_4_6 <= dac_dmx_data_4_6_0; dac_dmx_data_5_6 <= dac_dmx_data_5_6_0; dac_dmx_data_6_6 <= dac_dmx_data_6_6_0; dac_dmx_data_7_6 <= dac_dmx_data_7_6_0; dac_dmx_enable_7 <= dac_dmx_enable_7_0; dac_dmx_data_0_7 <= dac_dmx_data_0_7_0; dac_dmx_data_1_7 <= dac_dmx_data_1_7_0; dac_dmx_data_2_7 <= dac_dmx_data_2_7_0; dac_dmx_data_3_7 <= dac_dmx_data_3_7_0; dac_dmx_data_4_7 <= dac_dmx_data_4_7_0; dac_dmx_data_5_7 <= dac_dmx_data_5_7_0; dac_dmx_data_6_7 <= dac_dmx_data_6_7_0; dac_dmx_data_7_7 <= dac_dmx_data_7_7_0; end // mux below is generated using a script-- do not modify-- ask me first! // 1 channel(s) always @(posedge dac_clk) begin case (dac_enable) 8'b00000001: begin dac_dmx_enable_0_0 <= 1'b1; dac_dmx_data_0_0_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_0_0 <= 'd0; dac_dmx_data_2_0_0 <= 'd0; dac_dmx_data_3_0_0 <= 'd0; dac_dmx_data_4_0_0 <= 'd0; dac_dmx_data_5_0_0 <= 'd0; dac_dmx_data_6_0_0 <= 'd0; dac_dmx_data_7_0_0 <= 'd0; end 8'b00000010: begin dac_dmx_enable_0_0 <= 1'b1; dac_dmx_data_0_0_0 <= 'd0; dac_dmx_data_1_0_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_0_0 <= 'd0; dac_dmx_data_3_0_0 <= 'd0; dac_dmx_data_4_0_0 <= 'd0; dac_dmx_data_5_0_0 <= 'd0; dac_dmx_data_6_0_0 <= 'd0; dac_dmx_data_7_0_0 <= 'd0; end 8'b00000100: begin dac_dmx_enable_0_0 <= 1'b1; dac_dmx_data_0_0_0 <= 'd0; dac_dmx_data_1_0_0 <= 'd0; dac_dmx_data_2_0_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_3_0_0 <= 'd0; dac_dmx_data_4_0_0 <= 'd0; dac_dmx_data_5_0_0 <= 'd0; dac_dmx_data_6_0_0 <= 'd0; dac_dmx_data_7_0_0 <= 'd0; end 8'b00001000: begin dac_dmx_enable_0_0 <= 1'b1; dac_dmx_data_0_0_0 <= 'd0; dac_dmx_data_1_0_0 <= 'd0; dac_dmx_data_2_0_0 <= 'd0; dac_dmx_data_3_0_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_4_0_0 <= 'd0; dac_dmx_data_5_0_0 <= 'd0; dac_dmx_data_6_0_0 <= 'd0; dac_dmx_data_7_0_0 <= 'd0; end 8'b00010000: begin dac_dmx_enable_0_0 <= 1'b1; dac_dmx_data_0_0_0 <= 'd0; dac_dmx_data_1_0_0 <= 'd0; dac_dmx_data_2_0_0 <= 'd0; dac_dmx_data_3_0_0 <= 'd0; dac_dmx_data_4_0_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_5_0_0 <= 'd0; dac_dmx_data_6_0_0 <= 'd0; dac_dmx_data_7_0_0 <= 'd0; end 8'b00100000: begin dac_dmx_enable_0_0 <= 1'b1; dac_dmx_data_0_0_0 <= 'd0; dac_dmx_data_1_0_0 <= 'd0; dac_dmx_data_2_0_0 <= 'd0; dac_dmx_data_3_0_0 <= 'd0; dac_dmx_data_4_0_0 <= 'd0; dac_dmx_data_5_0_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_6_0_0 <= 'd0; dac_dmx_data_7_0_0 <= 'd0; end 8'b01000000: begin dac_dmx_enable_0_0 <= 1'b1; dac_dmx_data_0_0_0 <= 'd0; dac_dmx_data_1_0_0 <= 'd0; dac_dmx_data_2_0_0 <= 'd0; dac_dmx_data_3_0_0 <= 'd0; dac_dmx_data_4_0_0 <= 'd0; dac_dmx_data_5_0_0 <= 'd0; dac_dmx_data_6_0_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_7_0_0 <= 'd0; end 8'b10000000: begin dac_dmx_enable_0_0 <= 1'b1; dac_dmx_data_0_0_0 <= 'd0; dac_dmx_data_1_0_0 <= 'd0; dac_dmx_data_2_0_0 <= 'd0; dac_dmx_data_3_0_0 <= 'd0; dac_dmx_data_4_0_0 <= 'd0; dac_dmx_data_5_0_0 <= 'd0; dac_dmx_data_6_0_0 <= 'd0; dac_dmx_data_7_0_0 <= dac_dsf_data[((16*0)+15):(16*0)]; end default: begin dac_dmx_enable_0_0 <= 'd0; dac_dmx_data_0_0_0 <= 'd0; dac_dmx_data_1_0_0 <= 'd0; dac_dmx_data_2_0_0 <= 'd0; dac_dmx_data_3_0_0 <= 'd0; dac_dmx_data_4_0_0 <= 'd0; dac_dmx_data_5_0_0 <= 'd0; dac_dmx_data_6_0_0 <= 'd0; dac_dmx_data_7_0_0 <= 'd0; end endcase end // 2 channel(s) always @(posedge dac_clk) begin case (dac_enable) 8'b00000011: begin dac_dmx_enable_1_0 <= 1'b1; dac_dmx_data_0_1_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_1_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_1_0 <= 'd0; dac_dmx_data_3_1_0 <= 'd0; dac_dmx_data_4_1_0 <= 'd0; dac_dmx_data_5_1_0 <= 'd0; dac_dmx_data_6_1_0 <= 'd0; dac_dmx_data_7_1_0 <= 'd0; end 8'b00000101: begin dac_dmx_enable_1_0 <= 1'b1; dac_dmx_data_0_1_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_1_0 <= 'd0; dac_dmx_data_2_1_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_1_0 <= 'd0; dac_dmx_data_4_1_0 <= 'd0; dac_dmx_data_5_1_0 <= 'd0; dac_dmx_data_6_1_0 <= 'd0; dac_dmx_data_7_1_0 <= 'd0; end 8'b00000110: begin dac_dmx_enable_1_0 <= 1'b1; dac_dmx_data_0_1_0 <= 'd0; dac_dmx_data_1_1_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_1_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_1_0 <= 'd0; dac_dmx_data_4_1_0 <= 'd0; dac_dmx_data_5_1_0 <= 'd0; dac_dmx_data_6_1_0 <= 'd0; dac_dmx_data_7_1_0 <= 'd0; end 8'b00001001: begin dac_dmx_enable_1_0 <= 1'b1; dac_dmx_data_0_1_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_1_0 <= 'd0; dac_dmx_data_2_1_0 <= 'd0; dac_dmx_data_3_1_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_1_0 <= 'd0; dac_dmx_data_5_1_0 <= 'd0; dac_dmx_data_6_1_0 <= 'd0; dac_dmx_data_7_1_0 <= 'd0; end 8'b00001010: begin dac_dmx_enable_1_0 <= 1'b1; dac_dmx_data_0_1_0 <= 'd0; dac_dmx_data_1_1_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_1_0 <= 'd0; dac_dmx_data_3_1_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_1_0 <= 'd0; dac_dmx_data_5_1_0 <= 'd0; dac_dmx_data_6_1_0 <= 'd0; dac_dmx_data_7_1_0 <= 'd0; end 8'b00001100: begin dac_dmx_enable_1_0 <= 1'b1; dac_dmx_data_0_1_0 <= 'd0; dac_dmx_data_1_1_0 <= 'd0; dac_dmx_data_2_1_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_3_1_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_1_0 <= 'd0; dac_dmx_data_5_1_0 <= 'd0; dac_dmx_data_6_1_0 <= 'd0; dac_dmx_data_7_1_0 <= 'd0; end 8'b00010001: begin dac_dmx_enable_1_0 <= 1'b1; dac_dmx_data_0_1_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_1_0 <= 'd0; dac_dmx_data_2_1_0 <= 'd0; dac_dmx_data_3_1_0 <= 'd0; dac_dmx_data_4_1_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_5_1_0 <= 'd0; dac_dmx_data_6_1_0 <= 'd0; dac_dmx_data_7_1_0 <= 'd0; end 8'b00010010: begin dac_dmx_enable_1_0 <= 1'b1; dac_dmx_data_0_1_0 <= 'd0; dac_dmx_data_1_1_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_1_0 <= 'd0; dac_dmx_data_3_1_0 <= 'd0; dac_dmx_data_4_1_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_5_1_0 <= 'd0; dac_dmx_data_6_1_0 <= 'd0; dac_dmx_data_7_1_0 <= 'd0; end 8'b00010100: begin dac_dmx_enable_1_0 <= 1'b1; dac_dmx_data_0_1_0 <= 'd0; dac_dmx_data_1_1_0 <= 'd0; dac_dmx_data_2_1_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_3_1_0 <= 'd0; dac_dmx_data_4_1_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_5_1_0 <= 'd0; dac_dmx_data_6_1_0 <= 'd0; dac_dmx_data_7_1_0 <= 'd0; end 8'b00011000: begin dac_dmx_enable_1_0 <= 1'b1; dac_dmx_data_0_1_0 <= 'd0; dac_dmx_data_1_1_0 <= 'd0; dac_dmx_data_2_1_0 <= 'd0; dac_dmx_data_3_1_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_4_1_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_5_1_0 <= 'd0; dac_dmx_data_6_1_0 <= 'd0; dac_dmx_data_7_1_0 <= 'd0; end 8'b00100001: begin dac_dmx_enable_1_0 <= 1'b1; dac_dmx_data_0_1_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_1_0 <= 'd0; dac_dmx_data_2_1_0 <= 'd0; dac_dmx_data_3_1_0 <= 'd0; dac_dmx_data_4_1_0 <= 'd0; dac_dmx_data_5_1_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_6_1_0 <= 'd0; dac_dmx_data_7_1_0 <= 'd0; end 8'b00100010: begin dac_dmx_enable_1_0 <= 1'b1; dac_dmx_data_0_1_0 <= 'd0; dac_dmx_data_1_1_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_1_0 <= 'd0; dac_dmx_data_3_1_0 <= 'd0; dac_dmx_data_4_1_0 <= 'd0; dac_dmx_data_5_1_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_6_1_0 <= 'd0; dac_dmx_data_7_1_0 <= 'd0; end 8'b00100100: begin dac_dmx_enable_1_0 <= 1'b1; dac_dmx_data_0_1_0 <= 'd0; dac_dmx_data_1_1_0 <= 'd0; dac_dmx_data_2_1_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_3_1_0 <= 'd0; dac_dmx_data_4_1_0 <= 'd0; dac_dmx_data_5_1_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_6_1_0 <= 'd0; dac_dmx_data_7_1_0 <= 'd0; end 8'b00101000: begin dac_dmx_enable_1_0 <= 1'b1; dac_dmx_data_0_1_0 <= 'd0; dac_dmx_data_1_1_0 <= 'd0; dac_dmx_data_2_1_0 <= 'd0; dac_dmx_data_3_1_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_4_1_0 <= 'd0; dac_dmx_data_5_1_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_6_1_0 <= 'd0; dac_dmx_data_7_1_0 <= 'd0; end 8'b00110000: begin dac_dmx_enable_1_0 <= 1'b1; dac_dmx_data_0_1_0 <= 'd0; dac_dmx_data_1_1_0 <= 'd0; dac_dmx_data_2_1_0 <= 'd0; dac_dmx_data_3_1_0 <= 'd0; dac_dmx_data_4_1_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_5_1_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_6_1_0 <= 'd0; dac_dmx_data_7_1_0 <= 'd0; end 8'b01000001: begin dac_dmx_enable_1_0 <= 1'b1; dac_dmx_data_0_1_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_1_0 <= 'd0; dac_dmx_data_2_1_0 <= 'd0; dac_dmx_data_3_1_0 <= 'd0; dac_dmx_data_4_1_0 <= 'd0; dac_dmx_data_5_1_0 <= 'd0; dac_dmx_data_6_1_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_7_1_0 <= 'd0; end default: begin dac_dmx_enable_1_0 <= 'd0; dac_dmx_data_0_1_0 <= 'd0; dac_dmx_data_1_1_0 <= 'd0; dac_dmx_data_2_1_0 <= 'd0; dac_dmx_data_3_1_0 <= 'd0; dac_dmx_data_4_1_0 <= 'd0; dac_dmx_data_5_1_0 <= 'd0; dac_dmx_data_6_1_0 <= 'd0; dac_dmx_data_7_1_0 <= 'd0; end endcase end always @(posedge dac_clk) begin case (dac_enable) 8'b01000010: begin dac_dmx_enable_1_1 <= 1'b1; dac_dmx_data_0_1_1 <= 'd0; dac_dmx_data_1_1_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_1_1 <= 'd0; dac_dmx_data_3_1_1 <= 'd0; dac_dmx_data_4_1_1 <= 'd0; dac_dmx_data_5_1_1 <= 'd0; dac_dmx_data_6_1_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_7_1_1 <= 'd0; end 8'b01000100: begin dac_dmx_enable_1_1 <= 1'b1; dac_dmx_data_0_1_1 <= 'd0; dac_dmx_data_1_1_1 <= 'd0; dac_dmx_data_2_1_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_3_1_1 <= 'd0; dac_dmx_data_4_1_1 <= 'd0; dac_dmx_data_5_1_1 <= 'd0; dac_dmx_data_6_1_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_7_1_1 <= 'd0; end 8'b01001000: begin dac_dmx_enable_1_1 <= 1'b1; dac_dmx_data_0_1_1 <= 'd0; dac_dmx_data_1_1_1 <= 'd0; dac_dmx_data_2_1_1 <= 'd0; dac_dmx_data_3_1_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_4_1_1 <= 'd0; dac_dmx_data_5_1_1 <= 'd0; dac_dmx_data_6_1_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_7_1_1 <= 'd0; end 8'b01010000: begin dac_dmx_enable_1_1 <= 1'b1; dac_dmx_data_0_1_1 <= 'd0; dac_dmx_data_1_1_1 <= 'd0; dac_dmx_data_2_1_1 <= 'd0; dac_dmx_data_3_1_1 <= 'd0; dac_dmx_data_4_1_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_5_1_1 <= 'd0; dac_dmx_data_6_1_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_7_1_1 <= 'd0; end 8'b01100000: begin dac_dmx_enable_1_1 <= 1'b1; dac_dmx_data_0_1_1 <= 'd0; dac_dmx_data_1_1_1 <= 'd0; dac_dmx_data_2_1_1 <= 'd0; dac_dmx_data_3_1_1 <= 'd0; dac_dmx_data_4_1_1 <= 'd0; dac_dmx_data_5_1_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_6_1_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_7_1_1 <= 'd0; end 8'b10000001: begin dac_dmx_enable_1_1 <= 1'b1; dac_dmx_data_0_1_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_1_1 <= 'd0; dac_dmx_data_2_1_1 <= 'd0; dac_dmx_data_3_1_1 <= 'd0; dac_dmx_data_4_1_1 <= 'd0; dac_dmx_data_5_1_1 <= 'd0; dac_dmx_data_6_1_1 <= 'd0; dac_dmx_data_7_1_1 <= dac_dsf_data[((16*1)+15):(16*1)]; end 8'b10000010: begin dac_dmx_enable_1_1 <= 1'b1; dac_dmx_data_0_1_1 <= 'd0; dac_dmx_data_1_1_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_1_1 <= 'd0; dac_dmx_data_3_1_1 <= 'd0; dac_dmx_data_4_1_1 <= 'd0; dac_dmx_data_5_1_1 <= 'd0; dac_dmx_data_6_1_1 <= 'd0; dac_dmx_data_7_1_1 <= dac_dsf_data[((16*1)+15):(16*1)]; end 8'b10000100: begin dac_dmx_enable_1_1 <= 1'b1; dac_dmx_data_0_1_1 <= 'd0; dac_dmx_data_1_1_1 <= 'd0; dac_dmx_data_2_1_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_3_1_1 <= 'd0; dac_dmx_data_4_1_1 <= 'd0; dac_dmx_data_5_1_1 <= 'd0; dac_dmx_data_6_1_1 <= 'd0; dac_dmx_data_7_1_1 <= dac_dsf_data[((16*1)+15):(16*1)]; end 8'b10001000: begin dac_dmx_enable_1_1 <= 1'b1; dac_dmx_data_0_1_1 <= 'd0; dac_dmx_data_1_1_1 <= 'd0; dac_dmx_data_2_1_1 <= 'd0; dac_dmx_data_3_1_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_4_1_1 <= 'd0; dac_dmx_data_5_1_1 <= 'd0; dac_dmx_data_6_1_1 <= 'd0; dac_dmx_data_7_1_1 <= dac_dsf_data[((16*1)+15):(16*1)]; end 8'b10010000: begin dac_dmx_enable_1_1 <= 1'b1; dac_dmx_data_0_1_1 <= 'd0; dac_dmx_data_1_1_1 <= 'd0; dac_dmx_data_2_1_1 <= 'd0; dac_dmx_data_3_1_1 <= 'd0; dac_dmx_data_4_1_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_5_1_1 <= 'd0; dac_dmx_data_6_1_1 <= 'd0; dac_dmx_data_7_1_1 <= dac_dsf_data[((16*1)+15):(16*1)]; end 8'b10100000: begin dac_dmx_enable_1_1 <= 1'b1; dac_dmx_data_0_1_1 <= 'd0; dac_dmx_data_1_1_1 <= 'd0; dac_dmx_data_2_1_1 <= 'd0; dac_dmx_data_3_1_1 <= 'd0; dac_dmx_data_4_1_1 <= 'd0; dac_dmx_data_5_1_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_6_1_1 <= 'd0; dac_dmx_data_7_1_1 <= dac_dsf_data[((16*1)+15):(16*1)]; end 8'b11000000: begin dac_dmx_enable_1_1 <= 1'b1; dac_dmx_data_0_1_1 <= 'd0; dac_dmx_data_1_1_1 <= 'd0; dac_dmx_data_2_1_1 <= 'd0; dac_dmx_data_3_1_1 <= 'd0; dac_dmx_data_4_1_1 <= 'd0; dac_dmx_data_5_1_1 <= 'd0; dac_dmx_data_6_1_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_7_1_1 <= dac_dsf_data[((16*1)+15):(16*1)]; end default: begin dac_dmx_enable_1_1 <= 'd0; dac_dmx_data_0_1_1 <= 'd0; dac_dmx_data_1_1_1 <= 'd0; dac_dmx_data_2_1_1 <= 'd0; dac_dmx_data_3_1_1 <= 'd0; dac_dmx_data_4_1_1 <= 'd0; dac_dmx_data_5_1_1 <= 'd0; dac_dmx_data_6_1_1 <= 'd0; dac_dmx_data_7_1_1 <= 'd0; end endcase end // 3 channel(s) always @(posedge dac_clk) begin case (dac_enable) 8'b00000111: begin dac_dmx_enable_2_0 <= 1'b1; dac_dmx_data_0_2_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_2_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_2_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_3_2_0 <= 'd0; dac_dmx_data_4_2_0 <= 'd0; dac_dmx_data_5_2_0 <= 'd0; dac_dmx_data_6_2_0 <= 'd0; dac_dmx_data_7_2_0 <= 'd0; end 8'b00001011: begin dac_dmx_enable_2_0 <= 1'b1; dac_dmx_data_0_2_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_2_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_2_0 <= 'd0; dac_dmx_data_3_2_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_2_0 <= 'd0; dac_dmx_data_5_2_0 <= 'd0; dac_dmx_data_6_2_0 <= 'd0; dac_dmx_data_7_2_0 <= 'd0; end 8'b00001101: begin dac_dmx_enable_2_0 <= 1'b1; dac_dmx_data_0_2_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_2_0 <= 'd0; dac_dmx_data_2_2_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_2_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_2_0 <= 'd0; dac_dmx_data_5_2_0 <= 'd0; dac_dmx_data_6_2_0 <= 'd0; dac_dmx_data_7_2_0 <= 'd0; end 8'b00001110: begin dac_dmx_enable_2_0 <= 1'b1; dac_dmx_data_0_2_0 <= 'd0; dac_dmx_data_1_2_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_2_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_2_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_2_0 <= 'd0; dac_dmx_data_5_2_0 <= 'd0; dac_dmx_data_6_2_0 <= 'd0; dac_dmx_data_7_2_0 <= 'd0; end 8'b00010011: begin dac_dmx_enable_2_0 <= 1'b1; dac_dmx_data_0_2_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_2_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_2_0 <= 'd0; dac_dmx_data_3_2_0 <= 'd0; dac_dmx_data_4_2_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_2_0 <= 'd0; dac_dmx_data_6_2_0 <= 'd0; dac_dmx_data_7_2_0 <= 'd0; end 8'b00010101: begin dac_dmx_enable_2_0 <= 1'b1; dac_dmx_data_0_2_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_2_0 <= 'd0; dac_dmx_data_2_2_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_2_0 <= 'd0; dac_dmx_data_4_2_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_2_0 <= 'd0; dac_dmx_data_6_2_0 <= 'd0; dac_dmx_data_7_2_0 <= 'd0; end 8'b00010110: begin dac_dmx_enable_2_0 <= 1'b1; dac_dmx_data_0_2_0 <= 'd0; dac_dmx_data_1_2_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_2_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_2_0 <= 'd0; dac_dmx_data_4_2_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_2_0 <= 'd0; dac_dmx_data_6_2_0 <= 'd0; dac_dmx_data_7_2_0 <= 'd0; end 8'b00011001: begin dac_dmx_enable_2_0 <= 1'b1; dac_dmx_data_0_2_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_2_0 <= 'd0; dac_dmx_data_2_2_0 <= 'd0; dac_dmx_data_3_2_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_2_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_2_0 <= 'd0; dac_dmx_data_6_2_0 <= 'd0; dac_dmx_data_7_2_0 <= 'd0; end 8'b00011010: begin dac_dmx_enable_2_0 <= 1'b1; dac_dmx_data_0_2_0 <= 'd0; dac_dmx_data_1_2_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_2_0 <= 'd0; dac_dmx_data_3_2_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_2_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_2_0 <= 'd0; dac_dmx_data_6_2_0 <= 'd0; dac_dmx_data_7_2_0 <= 'd0; end 8'b00011100: begin dac_dmx_enable_2_0 <= 1'b1; dac_dmx_data_0_2_0 <= 'd0; dac_dmx_data_1_2_0 <= 'd0; dac_dmx_data_2_2_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_3_2_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_2_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_2_0 <= 'd0; dac_dmx_data_6_2_0 <= 'd0; dac_dmx_data_7_2_0 <= 'd0; end 8'b00100011: begin dac_dmx_enable_2_0 <= 1'b1; dac_dmx_data_0_2_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_2_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_2_0 <= 'd0; dac_dmx_data_3_2_0 <= 'd0; dac_dmx_data_4_2_0 <= 'd0; dac_dmx_data_5_2_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_6_2_0 <= 'd0; dac_dmx_data_7_2_0 <= 'd0; end 8'b00100101: begin dac_dmx_enable_2_0 <= 1'b1; dac_dmx_data_0_2_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_2_0 <= 'd0; dac_dmx_data_2_2_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_2_0 <= 'd0; dac_dmx_data_4_2_0 <= 'd0; dac_dmx_data_5_2_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_6_2_0 <= 'd0; dac_dmx_data_7_2_0 <= 'd0; end 8'b00100110: begin dac_dmx_enable_2_0 <= 1'b1; dac_dmx_data_0_2_0 <= 'd0; dac_dmx_data_1_2_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_2_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_2_0 <= 'd0; dac_dmx_data_4_2_0 <= 'd0; dac_dmx_data_5_2_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_6_2_0 <= 'd0; dac_dmx_data_7_2_0 <= 'd0; end 8'b00101001: begin dac_dmx_enable_2_0 <= 1'b1; dac_dmx_data_0_2_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_2_0 <= 'd0; dac_dmx_data_2_2_0 <= 'd0; dac_dmx_data_3_2_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_2_0 <= 'd0; dac_dmx_data_5_2_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_6_2_0 <= 'd0; dac_dmx_data_7_2_0 <= 'd0; end 8'b00101010: begin dac_dmx_enable_2_0 <= 1'b1; dac_dmx_data_0_2_0 <= 'd0; dac_dmx_data_1_2_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_2_0 <= 'd0; dac_dmx_data_3_2_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_2_0 <= 'd0; dac_dmx_data_5_2_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_6_2_0 <= 'd0; dac_dmx_data_7_2_0 <= 'd0; end 8'b00101100: begin dac_dmx_enable_2_0 <= 1'b1; dac_dmx_data_0_2_0 <= 'd0; dac_dmx_data_1_2_0 <= 'd0; dac_dmx_data_2_2_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_3_2_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_2_0 <= 'd0; dac_dmx_data_5_2_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_6_2_0 <= 'd0; dac_dmx_data_7_2_0 <= 'd0; end default: begin dac_dmx_enable_2_0 <= 'd0; dac_dmx_data_0_2_0 <= 'd0; dac_dmx_data_1_2_0 <= 'd0; dac_dmx_data_2_2_0 <= 'd0; dac_dmx_data_3_2_0 <= 'd0; dac_dmx_data_4_2_0 <= 'd0; dac_dmx_data_5_2_0 <= 'd0; dac_dmx_data_6_2_0 <= 'd0; dac_dmx_data_7_2_0 <= 'd0; end endcase end always @(posedge dac_clk) begin case (dac_enable) 8'b00110001: begin dac_dmx_enable_2_1 <= 1'b1; dac_dmx_data_0_2_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_2_1 <= 'd0; dac_dmx_data_2_2_1 <= 'd0; dac_dmx_data_3_2_1 <= 'd0; dac_dmx_data_4_2_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_5_2_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_6_2_1 <= 'd0; dac_dmx_data_7_2_1 <= 'd0; end 8'b00110010: begin dac_dmx_enable_2_1 <= 1'b1; dac_dmx_data_0_2_1 <= 'd0; dac_dmx_data_1_2_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_2_1 <= 'd0; dac_dmx_data_3_2_1 <= 'd0; dac_dmx_data_4_2_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_5_2_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_6_2_1 <= 'd0; dac_dmx_data_7_2_1 <= 'd0; end 8'b00110100: begin dac_dmx_enable_2_1 <= 1'b1; dac_dmx_data_0_2_1 <= 'd0; dac_dmx_data_1_2_1 <= 'd0; dac_dmx_data_2_2_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_3_2_1 <= 'd0; dac_dmx_data_4_2_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_5_2_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_6_2_1 <= 'd0; dac_dmx_data_7_2_1 <= 'd0; end 8'b00111000: begin dac_dmx_enable_2_1 <= 1'b1; dac_dmx_data_0_2_1 <= 'd0; dac_dmx_data_1_2_1 <= 'd0; dac_dmx_data_2_2_1 <= 'd0; dac_dmx_data_3_2_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_4_2_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_5_2_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_6_2_1 <= 'd0; dac_dmx_data_7_2_1 <= 'd0; end 8'b01000011: begin dac_dmx_enable_2_1 <= 1'b1; dac_dmx_data_0_2_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_2_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_2_1 <= 'd0; dac_dmx_data_3_2_1 <= 'd0; dac_dmx_data_4_2_1 <= 'd0; dac_dmx_data_5_2_1 <= 'd0; dac_dmx_data_6_2_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_7_2_1 <= 'd0; end 8'b01000101: begin dac_dmx_enable_2_1 <= 1'b1; dac_dmx_data_0_2_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_2_1 <= 'd0; dac_dmx_data_2_2_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_2_1 <= 'd0; dac_dmx_data_4_2_1 <= 'd0; dac_dmx_data_5_2_1 <= 'd0; dac_dmx_data_6_2_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_7_2_1 <= 'd0; end 8'b01000110: begin dac_dmx_enable_2_1 <= 1'b1; dac_dmx_data_0_2_1 <= 'd0; dac_dmx_data_1_2_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_2_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_2_1 <= 'd0; dac_dmx_data_4_2_1 <= 'd0; dac_dmx_data_5_2_1 <= 'd0; dac_dmx_data_6_2_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_7_2_1 <= 'd0; end 8'b01001001: begin dac_dmx_enable_2_1 <= 1'b1; dac_dmx_data_0_2_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_2_1 <= 'd0; dac_dmx_data_2_2_1 <= 'd0; dac_dmx_data_3_2_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_2_1 <= 'd0; dac_dmx_data_5_2_1 <= 'd0; dac_dmx_data_6_2_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_7_2_1 <= 'd0; end 8'b01001010: begin dac_dmx_enable_2_1 <= 1'b1; dac_dmx_data_0_2_1 <= 'd0; dac_dmx_data_1_2_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_2_1 <= 'd0; dac_dmx_data_3_2_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_2_1 <= 'd0; dac_dmx_data_5_2_1 <= 'd0; dac_dmx_data_6_2_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_7_2_1 <= 'd0; end 8'b01001100: begin dac_dmx_enable_2_1 <= 1'b1; dac_dmx_data_0_2_1 <= 'd0; dac_dmx_data_1_2_1 <= 'd0; dac_dmx_data_2_2_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_3_2_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_2_1 <= 'd0; dac_dmx_data_5_2_1 <= 'd0; dac_dmx_data_6_2_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_7_2_1 <= 'd0; end 8'b01010001: begin dac_dmx_enable_2_1 <= 1'b1; dac_dmx_data_0_2_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_2_1 <= 'd0; dac_dmx_data_2_2_1 <= 'd0; dac_dmx_data_3_2_1 <= 'd0; dac_dmx_data_4_2_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_5_2_1 <= 'd0; dac_dmx_data_6_2_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_7_2_1 <= 'd0; end 8'b01010010: begin dac_dmx_enable_2_1 <= 1'b1; dac_dmx_data_0_2_1 <= 'd0; dac_dmx_data_1_2_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_2_1 <= 'd0; dac_dmx_data_3_2_1 <= 'd0; dac_dmx_data_4_2_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_5_2_1 <= 'd0; dac_dmx_data_6_2_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_7_2_1 <= 'd0; end 8'b01010100: begin dac_dmx_enable_2_1 <= 1'b1; dac_dmx_data_0_2_1 <= 'd0; dac_dmx_data_1_2_1 <= 'd0; dac_dmx_data_2_2_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_3_2_1 <= 'd0; dac_dmx_data_4_2_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_5_2_1 <= 'd0; dac_dmx_data_6_2_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_7_2_1 <= 'd0; end 8'b01011000: begin dac_dmx_enable_2_1 <= 1'b1; dac_dmx_data_0_2_1 <= 'd0; dac_dmx_data_1_2_1 <= 'd0; dac_dmx_data_2_2_1 <= 'd0; dac_dmx_data_3_2_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_4_2_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_5_2_1 <= 'd0; dac_dmx_data_6_2_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_7_2_1 <= 'd0; end 8'b01100001: begin dac_dmx_enable_2_1 <= 1'b1; dac_dmx_data_0_2_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_2_1 <= 'd0; dac_dmx_data_2_2_1 <= 'd0; dac_dmx_data_3_2_1 <= 'd0; dac_dmx_data_4_2_1 <= 'd0; dac_dmx_data_5_2_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_6_2_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_7_2_1 <= 'd0; end 8'b01100010: begin dac_dmx_enable_2_1 <= 1'b1; dac_dmx_data_0_2_1 <= 'd0; dac_dmx_data_1_2_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_2_1 <= 'd0; dac_dmx_data_3_2_1 <= 'd0; dac_dmx_data_4_2_1 <= 'd0; dac_dmx_data_5_2_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_6_2_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_7_2_1 <= 'd0; end default: begin dac_dmx_enable_2_1 <= 'd0; dac_dmx_data_0_2_1 <= 'd0; dac_dmx_data_1_2_1 <= 'd0; dac_dmx_data_2_2_1 <= 'd0; dac_dmx_data_3_2_1 <= 'd0; dac_dmx_data_4_2_1 <= 'd0; dac_dmx_data_5_2_1 <= 'd0; dac_dmx_data_6_2_1 <= 'd0; dac_dmx_data_7_2_1 <= 'd0; end endcase end always @(posedge dac_clk) begin case (dac_enable) 8'b01100100: begin dac_dmx_enable_2_2 <= 1'b1; dac_dmx_data_0_2_2 <= 'd0; dac_dmx_data_1_2_2 <= 'd0; dac_dmx_data_2_2_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_3_2_2 <= 'd0; dac_dmx_data_4_2_2 <= 'd0; dac_dmx_data_5_2_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_6_2_2 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_7_2_2 <= 'd0; end 8'b01101000: begin dac_dmx_enable_2_2 <= 1'b1; dac_dmx_data_0_2_2 <= 'd0; dac_dmx_data_1_2_2 <= 'd0; dac_dmx_data_2_2_2 <= 'd0; dac_dmx_data_3_2_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_4_2_2 <= 'd0; dac_dmx_data_5_2_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_6_2_2 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_7_2_2 <= 'd0; end 8'b01110000: begin dac_dmx_enable_2_2 <= 1'b1; dac_dmx_data_0_2_2 <= 'd0; dac_dmx_data_1_2_2 <= 'd0; dac_dmx_data_2_2_2 <= 'd0; dac_dmx_data_3_2_2 <= 'd0; dac_dmx_data_4_2_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_5_2_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_6_2_2 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_7_2_2 <= 'd0; end 8'b10000011: begin dac_dmx_enable_2_2 <= 1'b1; dac_dmx_data_0_2_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_2_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_2_2 <= 'd0; dac_dmx_data_3_2_2 <= 'd0; dac_dmx_data_4_2_2 <= 'd0; dac_dmx_data_5_2_2 <= 'd0; dac_dmx_data_6_2_2 <= 'd0; dac_dmx_data_7_2_2 <= dac_dsf_data[((16*2)+15):(16*2)]; end 8'b10000101: begin dac_dmx_enable_2_2 <= 1'b1; dac_dmx_data_0_2_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_2_2 <= 'd0; dac_dmx_data_2_2_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_2_2 <= 'd0; dac_dmx_data_4_2_2 <= 'd0; dac_dmx_data_5_2_2 <= 'd0; dac_dmx_data_6_2_2 <= 'd0; dac_dmx_data_7_2_2 <= dac_dsf_data[((16*2)+15):(16*2)]; end 8'b10000110: begin dac_dmx_enable_2_2 <= 1'b1; dac_dmx_data_0_2_2 <= 'd0; dac_dmx_data_1_2_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_2_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_2_2 <= 'd0; dac_dmx_data_4_2_2 <= 'd0; dac_dmx_data_5_2_2 <= 'd0; dac_dmx_data_6_2_2 <= 'd0; dac_dmx_data_7_2_2 <= dac_dsf_data[((16*2)+15):(16*2)]; end 8'b10001001: begin dac_dmx_enable_2_2 <= 1'b1; dac_dmx_data_0_2_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_2_2 <= 'd0; dac_dmx_data_2_2_2 <= 'd0; dac_dmx_data_3_2_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_2_2 <= 'd0; dac_dmx_data_5_2_2 <= 'd0; dac_dmx_data_6_2_2 <= 'd0; dac_dmx_data_7_2_2 <= dac_dsf_data[((16*2)+15):(16*2)]; end 8'b10001010: begin dac_dmx_enable_2_2 <= 1'b1; dac_dmx_data_0_2_2 <= 'd0; dac_dmx_data_1_2_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_2_2 <= 'd0; dac_dmx_data_3_2_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_2_2 <= 'd0; dac_dmx_data_5_2_2 <= 'd0; dac_dmx_data_6_2_2 <= 'd0; dac_dmx_data_7_2_2 <= dac_dsf_data[((16*2)+15):(16*2)]; end 8'b10001100: begin dac_dmx_enable_2_2 <= 1'b1; dac_dmx_data_0_2_2 <= 'd0; dac_dmx_data_1_2_2 <= 'd0; dac_dmx_data_2_2_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_3_2_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_2_2 <= 'd0; dac_dmx_data_5_2_2 <= 'd0; dac_dmx_data_6_2_2 <= 'd0; dac_dmx_data_7_2_2 <= dac_dsf_data[((16*2)+15):(16*2)]; end 8'b10010001: begin dac_dmx_enable_2_2 <= 1'b1; dac_dmx_data_0_2_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_2_2 <= 'd0; dac_dmx_data_2_2_2 <= 'd0; dac_dmx_data_3_2_2 <= 'd0; dac_dmx_data_4_2_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_5_2_2 <= 'd0; dac_dmx_data_6_2_2 <= 'd0; dac_dmx_data_7_2_2 <= dac_dsf_data[((16*2)+15):(16*2)]; end 8'b10010010: begin dac_dmx_enable_2_2 <= 1'b1; dac_dmx_data_0_2_2 <= 'd0; dac_dmx_data_1_2_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_2_2 <= 'd0; dac_dmx_data_3_2_2 <= 'd0; dac_dmx_data_4_2_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_5_2_2 <= 'd0; dac_dmx_data_6_2_2 <= 'd0; dac_dmx_data_7_2_2 <= dac_dsf_data[((16*2)+15):(16*2)]; end 8'b10010100: begin dac_dmx_enable_2_2 <= 1'b1; dac_dmx_data_0_2_2 <= 'd0; dac_dmx_data_1_2_2 <= 'd0; dac_dmx_data_2_2_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_3_2_2 <= 'd0; dac_dmx_data_4_2_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_5_2_2 <= 'd0; dac_dmx_data_6_2_2 <= 'd0; dac_dmx_data_7_2_2 <= dac_dsf_data[((16*2)+15):(16*2)]; end 8'b10011000: begin dac_dmx_enable_2_2 <= 1'b1; dac_dmx_data_0_2_2 <= 'd0; dac_dmx_data_1_2_2 <= 'd0; dac_dmx_data_2_2_2 <= 'd0; dac_dmx_data_3_2_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_4_2_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_5_2_2 <= 'd0; dac_dmx_data_6_2_2 <= 'd0; dac_dmx_data_7_2_2 <= dac_dsf_data[((16*2)+15):(16*2)]; end 8'b10100001: begin dac_dmx_enable_2_2 <= 1'b1; dac_dmx_data_0_2_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_2_2 <= 'd0; dac_dmx_data_2_2_2 <= 'd0; dac_dmx_data_3_2_2 <= 'd0; dac_dmx_data_4_2_2 <= 'd0; dac_dmx_data_5_2_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_6_2_2 <= 'd0; dac_dmx_data_7_2_2 <= dac_dsf_data[((16*2)+15):(16*2)]; end 8'b10100010: begin dac_dmx_enable_2_2 <= 1'b1; dac_dmx_data_0_2_2 <= 'd0; dac_dmx_data_1_2_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_2_2 <= 'd0; dac_dmx_data_3_2_2 <= 'd0; dac_dmx_data_4_2_2 <= 'd0; dac_dmx_data_5_2_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_6_2_2 <= 'd0; dac_dmx_data_7_2_2 <= dac_dsf_data[((16*2)+15):(16*2)]; end 8'b10100100: begin dac_dmx_enable_2_2 <= 1'b1; dac_dmx_data_0_2_2 <= 'd0; dac_dmx_data_1_2_2 <= 'd0; dac_dmx_data_2_2_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_3_2_2 <= 'd0; dac_dmx_data_4_2_2 <= 'd0; dac_dmx_data_5_2_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_6_2_2 <= 'd0; dac_dmx_data_7_2_2 <= dac_dsf_data[((16*2)+15):(16*2)]; end default: begin dac_dmx_enable_2_2 <= 'd0; dac_dmx_data_0_2_2 <= 'd0; dac_dmx_data_1_2_2 <= 'd0; dac_dmx_data_2_2_2 <= 'd0; dac_dmx_data_3_2_2 <= 'd0; dac_dmx_data_4_2_2 <= 'd0; dac_dmx_data_5_2_2 <= 'd0; dac_dmx_data_6_2_2 <= 'd0; dac_dmx_data_7_2_2 <= 'd0; end endcase end always @(posedge dac_clk) begin case (dac_enable) 8'b10101000: begin dac_dmx_enable_2_3 <= 1'b1; dac_dmx_data_0_2_3 <= 'd0; dac_dmx_data_1_2_3 <= 'd0; dac_dmx_data_2_2_3 <= 'd0; dac_dmx_data_3_2_3 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_4_2_3 <= 'd0; dac_dmx_data_5_2_3 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_6_2_3 <= 'd0; dac_dmx_data_7_2_3 <= dac_dsf_data[((16*2)+15):(16*2)]; end 8'b10110000: begin dac_dmx_enable_2_3 <= 1'b1; dac_dmx_data_0_2_3 <= 'd0; dac_dmx_data_1_2_3 <= 'd0; dac_dmx_data_2_2_3 <= 'd0; dac_dmx_data_3_2_3 <= 'd0; dac_dmx_data_4_2_3 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_5_2_3 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_6_2_3 <= 'd0; dac_dmx_data_7_2_3 <= dac_dsf_data[((16*2)+15):(16*2)]; end 8'b11000001: begin dac_dmx_enable_2_3 <= 1'b1; dac_dmx_data_0_2_3 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_2_3 <= 'd0; dac_dmx_data_2_2_3 <= 'd0; dac_dmx_data_3_2_3 <= 'd0; dac_dmx_data_4_2_3 <= 'd0; dac_dmx_data_5_2_3 <= 'd0; dac_dmx_data_6_2_3 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_7_2_3 <= dac_dsf_data[((16*2)+15):(16*2)]; end 8'b11000010: begin dac_dmx_enable_2_3 <= 1'b1; dac_dmx_data_0_2_3 <= 'd0; dac_dmx_data_1_2_3 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_2_3 <= 'd0; dac_dmx_data_3_2_3 <= 'd0; dac_dmx_data_4_2_3 <= 'd0; dac_dmx_data_5_2_3 <= 'd0; dac_dmx_data_6_2_3 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_7_2_3 <= dac_dsf_data[((16*2)+15):(16*2)]; end 8'b11000100: begin dac_dmx_enable_2_3 <= 1'b1; dac_dmx_data_0_2_3 <= 'd0; dac_dmx_data_1_2_3 <= 'd0; dac_dmx_data_2_2_3 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_3_2_3 <= 'd0; dac_dmx_data_4_2_3 <= 'd0; dac_dmx_data_5_2_3 <= 'd0; dac_dmx_data_6_2_3 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_7_2_3 <= dac_dsf_data[((16*2)+15):(16*2)]; end 8'b11001000: begin dac_dmx_enable_2_3 <= 1'b1; dac_dmx_data_0_2_3 <= 'd0; dac_dmx_data_1_2_3 <= 'd0; dac_dmx_data_2_2_3 <= 'd0; dac_dmx_data_3_2_3 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_4_2_3 <= 'd0; dac_dmx_data_5_2_3 <= 'd0; dac_dmx_data_6_2_3 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_7_2_3 <= dac_dsf_data[((16*2)+15):(16*2)]; end 8'b11010000: begin dac_dmx_enable_2_3 <= 1'b1; dac_dmx_data_0_2_3 <= 'd0; dac_dmx_data_1_2_3 <= 'd0; dac_dmx_data_2_2_3 <= 'd0; dac_dmx_data_3_2_3 <= 'd0; dac_dmx_data_4_2_3 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_5_2_3 <= 'd0; dac_dmx_data_6_2_3 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_7_2_3 <= dac_dsf_data[((16*2)+15):(16*2)]; end 8'b11100000: begin dac_dmx_enable_2_3 <= 1'b1; dac_dmx_data_0_2_3 <= 'd0; dac_dmx_data_1_2_3 <= 'd0; dac_dmx_data_2_2_3 <= 'd0; dac_dmx_data_3_2_3 <= 'd0; dac_dmx_data_4_2_3 <= 'd0; dac_dmx_data_5_2_3 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_6_2_3 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_7_2_3 <= dac_dsf_data[((16*2)+15):(16*2)]; end default: begin dac_dmx_enable_2_3 <= 'd0; dac_dmx_data_0_2_3 <= 'd0; dac_dmx_data_1_2_3 <= 'd0; dac_dmx_data_2_2_3 <= 'd0; dac_dmx_data_3_2_3 <= 'd0; dac_dmx_data_4_2_3 <= 'd0; dac_dmx_data_5_2_3 <= 'd0; dac_dmx_data_6_2_3 <= 'd0; dac_dmx_data_7_2_3 <= 'd0; end endcase end // 4 channel(s) always @(posedge dac_clk) begin case (dac_enable) 8'b00001111: begin dac_dmx_enable_3_0 <= 1'b1; dac_dmx_data_0_3_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_3_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_3_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_3_3_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_4_3_0 <= 'd0; dac_dmx_data_5_3_0 <= 'd0; dac_dmx_data_6_3_0 <= 'd0; dac_dmx_data_7_3_0 <= 'd0; end 8'b00010111: begin dac_dmx_enable_3_0 <= 1'b1; dac_dmx_data_0_3_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_3_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_3_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_3_3_0 <= 'd0; dac_dmx_data_4_3_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_5_3_0 <= 'd0; dac_dmx_data_6_3_0 <= 'd0; dac_dmx_data_7_3_0 <= 'd0; end 8'b00011011: begin dac_dmx_enable_3_0 <= 1'b1; dac_dmx_data_0_3_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_3_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_3_0 <= 'd0; dac_dmx_data_3_3_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_3_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_5_3_0 <= 'd0; dac_dmx_data_6_3_0 <= 'd0; dac_dmx_data_7_3_0 <= 'd0; end 8'b00011101: begin dac_dmx_enable_3_0 <= 1'b1; dac_dmx_data_0_3_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_3_0 <= 'd0; dac_dmx_data_2_3_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_3_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_3_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_5_3_0 <= 'd0; dac_dmx_data_6_3_0 <= 'd0; dac_dmx_data_7_3_0 <= 'd0; end 8'b00011110: begin dac_dmx_enable_3_0 <= 1'b1; dac_dmx_data_0_3_0 <= 'd0; dac_dmx_data_1_3_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_3_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_3_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_3_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_5_3_0 <= 'd0; dac_dmx_data_6_3_0 <= 'd0; dac_dmx_data_7_3_0 <= 'd0; end 8'b00100111: begin dac_dmx_enable_3_0 <= 1'b1; dac_dmx_data_0_3_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_3_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_3_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_3_3_0 <= 'd0; dac_dmx_data_4_3_0 <= 'd0; dac_dmx_data_5_3_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_6_3_0 <= 'd0; dac_dmx_data_7_3_0 <= 'd0; end 8'b00101011: begin dac_dmx_enable_3_0 <= 1'b1; dac_dmx_data_0_3_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_3_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_3_0 <= 'd0; dac_dmx_data_3_3_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_3_0 <= 'd0; dac_dmx_data_5_3_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_6_3_0 <= 'd0; dac_dmx_data_7_3_0 <= 'd0; end 8'b00101101: begin dac_dmx_enable_3_0 <= 1'b1; dac_dmx_data_0_3_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_3_0 <= 'd0; dac_dmx_data_2_3_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_3_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_3_0 <= 'd0; dac_dmx_data_5_3_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_6_3_0 <= 'd0; dac_dmx_data_7_3_0 <= 'd0; end 8'b00101110: begin dac_dmx_enable_3_0 <= 1'b1; dac_dmx_data_0_3_0 <= 'd0; dac_dmx_data_1_3_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_3_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_3_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_3_0 <= 'd0; dac_dmx_data_5_3_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_6_3_0 <= 'd0; dac_dmx_data_7_3_0 <= 'd0; end 8'b00110011: begin dac_dmx_enable_3_0 <= 1'b1; dac_dmx_data_0_3_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_3_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_3_0 <= 'd0; dac_dmx_data_3_3_0 <= 'd0; dac_dmx_data_4_3_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_3_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_6_3_0 <= 'd0; dac_dmx_data_7_3_0 <= 'd0; end 8'b00110101: begin dac_dmx_enable_3_0 <= 1'b1; dac_dmx_data_0_3_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_3_0 <= 'd0; dac_dmx_data_2_3_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_3_0 <= 'd0; dac_dmx_data_4_3_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_3_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_6_3_0 <= 'd0; dac_dmx_data_7_3_0 <= 'd0; end 8'b00110110: begin dac_dmx_enable_3_0 <= 1'b1; dac_dmx_data_0_3_0 <= 'd0; dac_dmx_data_1_3_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_3_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_3_0 <= 'd0; dac_dmx_data_4_3_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_3_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_6_3_0 <= 'd0; dac_dmx_data_7_3_0 <= 'd0; end 8'b00111001: begin dac_dmx_enable_3_0 <= 1'b1; dac_dmx_data_0_3_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_3_0 <= 'd0; dac_dmx_data_2_3_0 <= 'd0; dac_dmx_data_3_3_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_3_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_3_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_6_3_0 <= 'd0; dac_dmx_data_7_3_0 <= 'd0; end 8'b00111010: begin dac_dmx_enable_3_0 <= 1'b1; dac_dmx_data_0_3_0 <= 'd0; dac_dmx_data_1_3_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_3_0 <= 'd0; dac_dmx_data_3_3_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_3_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_3_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_6_3_0 <= 'd0; dac_dmx_data_7_3_0 <= 'd0; end 8'b00111100: begin dac_dmx_enable_3_0 <= 1'b1; dac_dmx_data_0_3_0 <= 'd0; dac_dmx_data_1_3_0 <= 'd0; dac_dmx_data_2_3_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_3_3_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_3_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_3_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_6_3_0 <= 'd0; dac_dmx_data_7_3_0 <= 'd0; end 8'b01000111: begin dac_dmx_enable_3_0 <= 1'b1; dac_dmx_data_0_3_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_3_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_3_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_3_3_0 <= 'd0; dac_dmx_data_4_3_0 <= 'd0; dac_dmx_data_5_3_0 <= 'd0; dac_dmx_data_6_3_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_7_3_0 <= 'd0; end default: begin dac_dmx_enable_3_0 <= 'd0; dac_dmx_data_0_3_0 <= 'd0; dac_dmx_data_1_3_0 <= 'd0; dac_dmx_data_2_3_0 <= 'd0; dac_dmx_data_3_3_0 <= 'd0; dac_dmx_data_4_3_0 <= 'd0; dac_dmx_data_5_3_0 <= 'd0; dac_dmx_data_6_3_0 <= 'd0; dac_dmx_data_7_3_0 <= 'd0; end endcase end always @(posedge dac_clk) begin case (dac_enable) 8'b01001011: begin dac_dmx_enable_3_1 <= 1'b1; dac_dmx_data_0_3_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_3_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_3_1 <= 'd0; dac_dmx_data_3_3_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_3_1 <= 'd0; dac_dmx_data_5_3_1 <= 'd0; dac_dmx_data_6_3_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_7_3_1 <= 'd0; end 8'b01001101: begin dac_dmx_enable_3_1 <= 1'b1; dac_dmx_data_0_3_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_3_1 <= 'd0; dac_dmx_data_2_3_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_3_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_3_1 <= 'd0; dac_dmx_data_5_3_1 <= 'd0; dac_dmx_data_6_3_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_7_3_1 <= 'd0; end 8'b01001110: begin dac_dmx_enable_3_1 <= 1'b1; dac_dmx_data_0_3_1 <= 'd0; dac_dmx_data_1_3_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_3_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_3_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_3_1 <= 'd0; dac_dmx_data_5_3_1 <= 'd0; dac_dmx_data_6_3_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_7_3_1 <= 'd0; end 8'b01010011: begin dac_dmx_enable_3_1 <= 1'b1; dac_dmx_data_0_3_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_3_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_3_1 <= 'd0; dac_dmx_data_3_3_1 <= 'd0; dac_dmx_data_4_3_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_3_1 <= 'd0; dac_dmx_data_6_3_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_7_3_1 <= 'd0; end 8'b01010101: begin dac_dmx_enable_3_1 <= 1'b1; dac_dmx_data_0_3_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_3_1 <= 'd0; dac_dmx_data_2_3_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_3_1 <= 'd0; dac_dmx_data_4_3_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_3_1 <= 'd0; dac_dmx_data_6_3_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_7_3_1 <= 'd0; end 8'b01010110: begin dac_dmx_enable_3_1 <= 1'b1; dac_dmx_data_0_3_1 <= 'd0; dac_dmx_data_1_3_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_3_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_3_1 <= 'd0; dac_dmx_data_4_3_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_3_1 <= 'd0; dac_dmx_data_6_3_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_7_3_1 <= 'd0; end 8'b01011001: begin dac_dmx_enable_3_1 <= 1'b1; dac_dmx_data_0_3_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_3_1 <= 'd0; dac_dmx_data_2_3_1 <= 'd0; dac_dmx_data_3_3_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_3_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_3_1 <= 'd0; dac_dmx_data_6_3_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_7_3_1 <= 'd0; end 8'b01011010: begin dac_dmx_enable_3_1 <= 1'b1; dac_dmx_data_0_3_1 <= 'd0; dac_dmx_data_1_3_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_3_1 <= 'd0; dac_dmx_data_3_3_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_3_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_3_1 <= 'd0; dac_dmx_data_6_3_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_7_3_1 <= 'd0; end 8'b01011100: begin dac_dmx_enable_3_1 <= 1'b1; dac_dmx_data_0_3_1 <= 'd0; dac_dmx_data_1_3_1 <= 'd0; dac_dmx_data_2_3_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_3_3_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_3_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_3_1 <= 'd0; dac_dmx_data_6_3_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_7_3_1 <= 'd0; end 8'b01100011: begin dac_dmx_enable_3_1 <= 1'b1; dac_dmx_data_0_3_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_3_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_3_1 <= 'd0; dac_dmx_data_3_3_1 <= 'd0; dac_dmx_data_4_3_1 <= 'd0; dac_dmx_data_5_3_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_6_3_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_7_3_1 <= 'd0; end 8'b01100101: begin dac_dmx_enable_3_1 <= 1'b1; dac_dmx_data_0_3_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_3_1 <= 'd0; dac_dmx_data_2_3_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_3_1 <= 'd0; dac_dmx_data_4_3_1 <= 'd0; dac_dmx_data_5_3_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_6_3_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_7_3_1 <= 'd0; end 8'b01100110: begin dac_dmx_enable_3_1 <= 1'b1; dac_dmx_data_0_3_1 <= 'd0; dac_dmx_data_1_3_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_3_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_3_1 <= 'd0; dac_dmx_data_4_3_1 <= 'd0; dac_dmx_data_5_3_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_6_3_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_7_3_1 <= 'd0; end 8'b01101001: begin dac_dmx_enable_3_1 <= 1'b1; dac_dmx_data_0_3_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_3_1 <= 'd0; dac_dmx_data_2_3_1 <= 'd0; dac_dmx_data_3_3_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_3_1 <= 'd0; dac_dmx_data_5_3_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_6_3_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_7_3_1 <= 'd0; end 8'b01101010: begin dac_dmx_enable_3_1 <= 1'b1; dac_dmx_data_0_3_1 <= 'd0; dac_dmx_data_1_3_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_3_1 <= 'd0; dac_dmx_data_3_3_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_3_1 <= 'd0; dac_dmx_data_5_3_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_6_3_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_7_3_1 <= 'd0; end 8'b01101100: begin dac_dmx_enable_3_1 <= 1'b1; dac_dmx_data_0_3_1 <= 'd0; dac_dmx_data_1_3_1 <= 'd0; dac_dmx_data_2_3_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_3_3_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_3_1 <= 'd0; dac_dmx_data_5_3_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_6_3_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_7_3_1 <= 'd0; end 8'b01110001: begin dac_dmx_enable_3_1 <= 1'b1; dac_dmx_data_0_3_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_3_1 <= 'd0; dac_dmx_data_2_3_1 <= 'd0; dac_dmx_data_3_3_1 <= 'd0; dac_dmx_data_4_3_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_5_3_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_6_3_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_7_3_1 <= 'd0; end default: begin dac_dmx_enable_3_1 <= 'd0; dac_dmx_data_0_3_1 <= 'd0; dac_dmx_data_1_3_1 <= 'd0; dac_dmx_data_2_3_1 <= 'd0; dac_dmx_data_3_3_1 <= 'd0; dac_dmx_data_4_3_1 <= 'd0; dac_dmx_data_5_3_1 <= 'd0; dac_dmx_data_6_3_1 <= 'd0; dac_dmx_data_7_3_1 <= 'd0; end endcase end always @(posedge dac_clk) begin case (dac_enable) 8'b01110010: begin dac_dmx_enable_3_2 <= 1'b1; dac_dmx_data_0_3_2 <= 'd0; dac_dmx_data_1_3_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_3_2 <= 'd0; dac_dmx_data_3_3_2 <= 'd0; dac_dmx_data_4_3_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_5_3_2 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_6_3_2 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_7_3_2 <= 'd0; end 8'b01110100: begin dac_dmx_enable_3_2 <= 1'b1; dac_dmx_data_0_3_2 <= 'd0; dac_dmx_data_1_3_2 <= 'd0; dac_dmx_data_2_3_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_3_3_2 <= 'd0; dac_dmx_data_4_3_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_5_3_2 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_6_3_2 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_7_3_2 <= 'd0; end 8'b01111000: begin dac_dmx_enable_3_2 <= 1'b1; dac_dmx_data_0_3_2 <= 'd0; dac_dmx_data_1_3_2 <= 'd0; dac_dmx_data_2_3_2 <= 'd0; dac_dmx_data_3_3_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_4_3_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_5_3_2 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_6_3_2 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_7_3_2 <= 'd0; end 8'b10000111: begin dac_dmx_enable_3_2 <= 1'b1; dac_dmx_data_0_3_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_3_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_3_2 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_3_3_2 <= 'd0; dac_dmx_data_4_3_2 <= 'd0; dac_dmx_data_5_3_2 <= 'd0; dac_dmx_data_6_3_2 <= 'd0; dac_dmx_data_7_3_2 <= dac_dsf_data[((16*3)+15):(16*3)]; end 8'b10001011: begin dac_dmx_enable_3_2 <= 1'b1; dac_dmx_data_0_3_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_3_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_3_2 <= 'd0; dac_dmx_data_3_3_2 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_3_2 <= 'd0; dac_dmx_data_5_3_2 <= 'd0; dac_dmx_data_6_3_2 <= 'd0; dac_dmx_data_7_3_2 <= dac_dsf_data[((16*3)+15):(16*3)]; end 8'b10001101: begin dac_dmx_enable_3_2 <= 1'b1; dac_dmx_data_0_3_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_3_2 <= 'd0; dac_dmx_data_2_3_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_3_2 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_3_2 <= 'd0; dac_dmx_data_5_3_2 <= 'd0; dac_dmx_data_6_3_2 <= 'd0; dac_dmx_data_7_3_2 <= dac_dsf_data[((16*3)+15):(16*3)]; end 8'b10001110: begin dac_dmx_enable_3_2 <= 1'b1; dac_dmx_data_0_3_2 <= 'd0; dac_dmx_data_1_3_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_3_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_3_2 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_3_2 <= 'd0; dac_dmx_data_5_3_2 <= 'd0; dac_dmx_data_6_3_2 <= 'd0; dac_dmx_data_7_3_2 <= dac_dsf_data[((16*3)+15):(16*3)]; end 8'b10010011: begin dac_dmx_enable_3_2 <= 1'b1; dac_dmx_data_0_3_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_3_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_3_2 <= 'd0; dac_dmx_data_3_3_2 <= 'd0; dac_dmx_data_4_3_2 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_3_2 <= 'd0; dac_dmx_data_6_3_2 <= 'd0; dac_dmx_data_7_3_2 <= dac_dsf_data[((16*3)+15):(16*3)]; end 8'b10010101: begin dac_dmx_enable_3_2 <= 1'b1; dac_dmx_data_0_3_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_3_2 <= 'd0; dac_dmx_data_2_3_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_3_2 <= 'd0; dac_dmx_data_4_3_2 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_3_2 <= 'd0; dac_dmx_data_6_3_2 <= 'd0; dac_dmx_data_7_3_2 <= dac_dsf_data[((16*3)+15):(16*3)]; end 8'b10010110: begin dac_dmx_enable_3_2 <= 1'b1; dac_dmx_data_0_3_2 <= 'd0; dac_dmx_data_1_3_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_3_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_3_2 <= 'd0; dac_dmx_data_4_3_2 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_3_2 <= 'd0; dac_dmx_data_6_3_2 <= 'd0; dac_dmx_data_7_3_2 <= dac_dsf_data[((16*3)+15):(16*3)]; end 8'b10011001: begin dac_dmx_enable_3_2 <= 1'b1; dac_dmx_data_0_3_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_3_2 <= 'd0; dac_dmx_data_2_3_2 <= 'd0; dac_dmx_data_3_3_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_3_2 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_3_2 <= 'd0; dac_dmx_data_6_3_2 <= 'd0; dac_dmx_data_7_3_2 <= dac_dsf_data[((16*3)+15):(16*3)]; end 8'b10011010: begin dac_dmx_enable_3_2 <= 1'b1; dac_dmx_data_0_3_2 <= 'd0; dac_dmx_data_1_3_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_3_2 <= 'd0; dac_dmx_data_3_3_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_3_2 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_3_2 <= 'd0; dac_dmx_data_6_3_2 <= 'd0; dac_dmx_data_7_3_2 <= dac_dsf_data[((16*3)+15):(16*3)]; end 8'b10011100: begin dac_dmx_enable_3_2 <= 1'b1; dac_dmx_data_0_3_2 <= 'd0; dac_dmx_data_1_3_2 <= 'd0; dac_dmx_data_2_3_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_3_3_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_3_2 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_3_2 <= 'd0; dac_dmx_data_6_3_2 <= 'd0; dac_dmx_data_7_3_2 <= dac_dsf_data[((16*3)+15):(16*3)]; end 8'b10100011: begin dac_dmx_enable_3_2 <= 1'b1; dac_dmx_data_0_3_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_3_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_3_2 <= 'd0; dac_dmx_data_3_3_2 <= 'd0; dac_dmx_data_4_3_2 <= 'd0; dac_dmx_data_5_3_2 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_6_3_2 <= 'd0; dac_dmx_data_7_3_2 <= dac_dsf_data[((16*3)+15):(16*3)]; end 8'b10100101: begin dac_dmx_enable_3_2 <= 1'b1; dac_dmx_data_0_3_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_3_2 <= 'd0; dac_dmx_data_2_3_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_3_2 <= 'd0; dac_dmx_data_4_3_2 <= 'd0; dac_dmx_data_5_3_2 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_6_3_2 <= 'd0; dac_dmx_data_7_3_2 <= dac_dsf_data[((16*3)+15):(16*3)]; end 8'b10100110: begin dac_dmx_enable_3_2 <= 1'b1; dac_dmx_data_0_3_2 <= 'd0; dac_dmx_data_1_3_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_3_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_3_2 <= 'd0; dac_dmx_data_4_3_2 <= 'd0; dac_dmx_data_5_3_2 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_6_3_2 <= 'd0; dac_dmx_data_7_3_2 <= dac_dsf_data[((16*3)+15):(16*3)]; end default: begin dac_dmx_enable_3_2 <= 'd0; dac_dmx_data_0_3_2 <= 'd0; dac_dmx_data_1_3_2 <= 'd0; dac_dmx_data_2_3_2 <= 'd0; dac_dmx_data_3_3_2 <= 'd0; dac_dmx_data_4_3_2 <= 'd0; dac_dmx_data_5_3_2 <= 'd0; dac_dmx_data_6_3_2 <= 'd0; dac_dmx_data_7_3_2 <= 'd0; end endcase end always @(posedge dac_clk) begin case (dac_enable) 8'b10101001: begin dac_dmx_enable_3_3 <= 1'b1; dac_dmx_data_0_3_3 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_3_3 <= 'd0; dac_dmx_data_2_3_3 <= 'd0; dac_dmx_data_3_3_3 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_3_3 <= 'd0; dac_dmx_data_5_3_3 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_6_3_3 <= 'd0; dac_dmx_data_7_3_3 <= dac_dsf_data[((16*3)+15):(16*3)]; end 8'b10101010: begin dac_dmx_enable_3_3 <= 1'b1; dac_dmx_data_0_3_3 <= 'd0; dac_dmx_data_1_3_3 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_3_3 <= 'd0; dac_dmx_data_3_3_3 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_3_3 <= 'd0; dac_dmx_data_5_3_3 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_6_3_3 <= 'd0; dac_dmx_data_7_3_3 <= dac_dsf_data[((16*3)+15):(16*3)]; end 8'b10101100: begin dac_dmx_enable_3_3 <= 1'b1; dac_dmx_data_0_3_3 <= 'd0; dac_dmx_data_1_3_3 <= 'd0; dac_dmx_data_2_3_3 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_3_3_3 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_3_3 <= 'd0; dac_dmx_data_5_3_3 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_6_3_3 <= 'd0; dac_dmx_data_7_3_3 <= dac_dsf_data[((16*3)+15):(16*3)]; end 8'b10110001: begin dac_dmx_enable_3_3 <= 1'b1; dac_dmx_data_0_3_3 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_3_3 <= 'd0; dac_dmx_data_2_3_3 <= 'd0; dac_dmx_data_3_3_3 <= 'd0; dac_dmx_data_4_3_3 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_5_3_3 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_6_3_3 <= 'd0; dac_dmx_data_7_3_3 <= dac_dsf_data[((16*3)+15):(16*3)]; end 8'b10110010: begin dac_dmx_enable_3_3 <= 1'b1; dac_dmx_data_0_3_3 <= 'd0; dac_dmx_data_1_3_3 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_3_3 <= 'd0; dac_dmx_data_3_3_3 <= 'd0; dac_dmx_data_4_3_3 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_5_3_3 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_6_3_3 <= 'd0; dac_dmx_data_7_3_3 <= dac_dsf_data[((16*3)+15):(16*3)]; end 8'b10110100: begin dac_dmx_enable_3_3 <= 1'b1; dac_dmx_data_0_3_3 <= 'd0; dac_dmx_data_1_3_3 <= 'd0; dac_dmx_data_2_3_3 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_3_3_3 <= 'd0; dac_dmx_data_4_3_3 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_5_3_3 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_6_3_3 <= 'd0; dac_dmx_data_7_3_3 <= dac_dsf_data[((16*3)+15):(16*3)]; end 8'b10111000: begin dac_dmx_enable_3_3 <= 1'b1; dac_dmx_data_0_3_3 <= 'd0; dac_dmx_data_1_3_3 <= 'd0; dac_dmx_data_2_3_3 <= 'd0; dac_dmx_data_3_3_3 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_4_3_3 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_5_3_3 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_6_3_3 <= 'd0; dac_dmx_data_7_3_3 <= dac_dsf_data[((16*3)+15):(16*3)]; end 8'b11000011: begin dac_dmx_enable_3_3 <= 1'b1; dac_dmx_data_0_3_3 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_3_3 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_3_3 <= 'd0; dac_dmx_data_3_3_3 <= 'd0; dac_dmx_data_4_3_3 <= 'd0; dac_dmx_data_5_3_3 <= 'd0; dac_dmx_data_6_3_3 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_7_3_3 <= dac_dsf_data[((16*3)+15):(16*3)]; end 8'b11000101: begin dac_dmx_enable_3_3 <= 1'b1; dac_dmx_data_0_3_3 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_3_3 <= 'd0; dac_dmx_data_2_3_3 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_3_3 <= 'd0; dac_dmx_data_4_3_3 <= 'd0; dac_dmx_data_5_3_3 <= 'd0; dac_dmx_data_6_3_3 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_7_3_3 <= dac_dsf_data[((16*3)+15):(16*3)]; end 8'b11000110: begin dac_dmx_enable_3_3 <= 1'b1; dac_dmx_data_0_3_3 <= 'd0; dac_dmx_data_1_3_3 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_3_3 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_3_3 <= 'd0; dac_dmx_data_4_3_3 <= 'd0; dac_dmx_data_5_3_3 <= 'd0; dac_dmx_data_6_3_3 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_7_3_3 <= dac_dsf_data[((16*3)+15):(16*3)]; end 8'b11001001: begin dac_dmx_enable_3_3 <= 1'b1; dac_dmx_data_0_3_3 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_3_3 <= 'd0; dac_dmx_data_2_3_3 <= 'd0; dac_dmx_data_3_3_3 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_3_3 <= 'd0; dac_dmx_data_5_3_3 <= 'd0; dac_dmx_data_6_3_3 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_7_3_3 <= dac_dsf_data[((16*3)+15):(16*3)]; end 8'b11001010: begin dac_dmx_enable_3_3 <= 1'b1; dac_dmx_data_0_3_3 <= 'd0; dac_dmx_data_1_3_3 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_3_3 <= 'd0; dac_dmx_data_3_3_3 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_3_3 <= 'd0; dac_dmx_data_5_3_3 <= 'd0; dac_dmx_data_6_3_3 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_7_3_3 <= dac_dsf_data[((16*3)+15):(16*3)]; end 8'b11001100: begin dac_dmx_enable_3_3 <= 1'b1; dac_dmx_data_0_3_3 <= 'd0; dac_dmx_data_1_3_3 <= 'd0; dac_dmx_data_2_3_3 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_3_3_3 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_3_3 <= 'd0; dac_dmx_data_5_3_3 <= 'd0; dac_dmx_data_6_3_3 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_7_3_3 <= dac_dsf_data[((16*3)+15):(16*3)]; end 8'b11010001: begin dac_dmx_enable_3_3 <= 1'b1; dac_dmx_data_0_3_3 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_3_3 <= 'd0; dac_dmx_data_2_3_3 <= 'd0; dac_dmx_data_3_3_3 <= 'd0; dac_dmx_data_4_3_3 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_5_3_3 <= 'd0; dac_dmx_data_6_3_3 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_7_3_3 <= dac_dsf_data[((16*3)+15):(16*3)]; end 8'b11010010: begin dac_dmx_enable_3_3 <= 1'b1; dac_dmx_data_0_3_3 <= 'd0; dac_dmx_data_1_3_3 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_3_3 <= 'd0; dac_dmx_data_3_3_3 <= 'd0; dac_dmx_data_4_3_3 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_5_3_3 <= 'd0; dac_dmx_data_6_3_3 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_7_3_3 <= dac_dsf_data[((16*3)+15):(16*3)]; end 8'b11010100: begin dac_dmx_enable_3_3 <= 1'b1; dac_dmx_data_0_3_3 <= 'd0; dac_dmx_data_1_3_3 <= 'd0; dac_dmx_data_2_3_3 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_3_3_3 <= 'd0; dac_dmx_data_4_3_3 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_5_3_3 <= 'd0; dac_dmx_data_6_3_3 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_7_3_3 <= dac_dsf_data[((16*3)+15):(16*3)]; end default: begin dac_dmx_enable_3_3 <= 'd0; dac_dmx_data_0_3_3 <= 'd0; dac_dmx_data_1_3_3 <= 'd0; dac_dmx_data_2_3_3 <= 'd0; dac_dmx_data_3_3_3 <= 'd0; dac_dmx_data_4_3_3 <= 'd0; dac_dmx_data_5_3_3 <= 'd0; dac_dmx_data_6_3_3 <= 'd0; dac_dmx_data_7_3_3 <= 'd0; end endcase end always @(posedge dac_clk) begin case (dac_enable) 8'b11011000: begin dac_dmx_enable_3_4 <= 1'b1; dac_dmx_data_0_3_4 <= 'd0; dac_dmx_data_1_3_4 <= 'd0; dac_dmx_data_2_3_4 <= 'd0; dac_dmx_data_3_3_4 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_4_3_4 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_5_3_4 <= 'd0; dac_dmx_data_6_3_4 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_7_3_4 <= dac_dsf_data[((16*3)+15):(16*3)]; end 8'b11100001: begin dac_dmx_enable_3_4 <= 1'b1; dac_dmx_data_0_3_4 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_3_4 <= 'd0; dac_dmx_data_2_3_4 <= 'd0; dac_dmx_data_3_3_4 <= 'd0; dac_dmx_data_4_3_4 <= 'd0; dac_dmx_data_5_3_4 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_6_3_4 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_7_3_4 <= dac_dsf_data[((16*3)+15):(16*3)]; end 8'b11100010: begin dac_dmx_enable_3_4 <= 1'b1; dac_dmx_data_0_3_4 <= 'd0; dac_dmx_data_1_3_4 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_3_4 <= 'd0; dac_dmx_data_3_3_4 <= 'd0; dac_dmx_data_4_3_4 <= 'd0; dac_dmx_data_5_3_4 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_6_3_4 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_7_3_4 <= dac_dsf_data[((16*3)+15):(16*3)]; end 8'b11100100: begin dac_dmx_enable_3_4 <= 1'b1; dac_dmx_data_0_3_4 <= 'd0; dac_dmx_data_1_3_4 <= 'd0; dac_dmx_data_2_3_4 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_3_3_4 <= 'd0; dac_dmx_data_4_3_4 <= 'd0; dac_dmx_data_5_3_4 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_6_3_4 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_7_3_4 <= dac_dsf_data[((16*3)+15):(16*3)]; end 8'b11101000: begin dac_dmx_enable_3_4 <= 1'b1; dac_dmx_data_0_3_4 <= 'd0; dac_dmx_data_1_3_4 <= 'd0; dac_dmx_data_2_3_4 <= 'd0; dac_dmx_data_3_3_4 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_4_3_4 <= 'd0; dac_dmx_data_5_3_4 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_6_3_4 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_7_3_4 <= dac_dsf_data[((16*3)+15):(16*3)]; end 8'b11110000: begin dac_dmx_enable_3_4 <= 1'b1; dac_dmx_data_0_3_4 <= 'd0; dac_dmx_data_1_3_4 <= 'd0; dac_dmx_data_2_3_4 <= 'd0; dac_dmx_data_3_3_4 <= 'd0; dac_dmx_data_4_3_4 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_5_3_4 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_6_3_4 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_7_3_4 <= dac_dsf_data[((16*3)+15):(16*3)]; end default: begin dac_dmx_enable_3_4 <= 'd0; dac_dmx_data_0_3_4 <= 'd0; dac_dmx_data_1_3_4 <= 'd0; dac_dmx_data_2_3_4 <= 'd0; dac_dmx_data_3_3_4 <= 'd0; dac_dmx_data_4_3_4 <= 'd0; dac_dmx_data_5_3_4 <= 'd0; dac_dmx_data_6_3_4 <= 'd0; dac_dmx_data_7_3_4 <= 'd0; end endcase end // 5 channel(s) always @(posedge dac_clk) begin case (dac_enable) 8'b00011111: begin dac_dmx_enable_4_0 <= 1'b1; dac_dmx_data_0_4_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_4_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_4_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_3_4_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_4_4_0 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_5_4_0 <= 'd0; dac_dmx_data_6_4_0 <= 'd0; dac_dmx_data_7_4_0 <= 'd0; end 8'b00101111: begin dac_dmx_enable_4_0 <= 1'b1; dac_dmx_data_0_4_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_4_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_4_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_3_4_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_4_4_0 <= 'd0; dac_dmx_data_5_4_0 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_6_4_0 <= 'd0; dac_dmx_data_7_4_0 <= 'd0; end 8'b00110111: begin dac_dmx_enable_4_0 <= 1'b1; dac_dmx_data_0_4_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_4_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_4_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_3_4_0 <= 'd0; dac_dmx_data_4_4_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_5_4_0 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_6_4_0 <= 'd0; dac_dmx_data_7_4_0 <= 'd0; end 8'b00111011: begin dac_dmx_enable_4_0 <= 1'b1; dac_dmx_data_0_4_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_4_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_4_0 <= 'd0; dac_dmx_data_3_4_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_4_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_5_4_0 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_6_4_0 <= 'd0; dac_dmx_data_7_4_0 <= 'd0; end 8'b00111101: begin dac_dmx_enable_4_0 <= 1'b1; dac_dmx_data_0_4_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_4_0 <= 'd0; dac_dmx_data_2_4_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_4_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_4_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_5_4_0 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_6_4_0 <= 'd0; dac_dmx_data_7_4_0 <= 'd0; end 8'b00111110: begin dac_dmx_enable_4_0 <= 1'b1; dac_dmx_data_0_4_0 <= 'd0; dac_dmx_data_1_4_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_4_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_4_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_4_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_5_4_0 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_6_4_0 <= 'd0; dac_dmx_data_7_4_0 <= 'd0; end 8'b01001111: begin dac_dmx_enable_4_0 <= 1'b1; dac_dmx_data_0_4_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_4_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_4_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_3_4_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_4_4_0 <= 'd0; dac_dmx_data_5_4_0 <= 'd0; dac_dmx_data_6_4_0 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_7_4_0 <= 'd0; end 8'b01010111: begin dac_dmx_enable_4_0 <= 1'b1; dac_dmx_data_0_4_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_4_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_4_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_3_4_0 <= 'd0; dac_dmx_data_4_4_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_5_4_0 <= 'd0; dac_dmx_data_6_4_0 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_7_4_0 <= 'd0; end 8'b01011011: begin dac_dmx_enable_4_0 <= 1'b1; dac_dmx_data_0_4_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_4_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_4_0 <= 'd0; dac_dmx_data_3_4_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_4_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_5_4_0 <= 'd0; dac_dmx_data_6_4_0 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_7_4_0 <= 'd0; end 8'b01011101: begin dac_dmx_enable_4_0 <= 1'b1; dac_dmx_data_0_4_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_4_0 <= 'd0; dac_dmx_data_2_4_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_4_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_4_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_5_4_0 <= 'd0; dac_dmx_data_6_4_0 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_7_4_0 <= 'd0; end 8'b01011110: begin dac_dmx_enable_4_0 <= 1'b1; dac_dmx_data_0_4_0 <= 'd0; dac_dmx_data_1_4_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_4_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_4_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_4_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_5_4_0 <= 'd0; dac_dmx_data_6_4_0 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_7_4_0 <= 'd0; end 8'b01100111: begin dac_dmx_enable_4_0 <= 1'b1; dac_dmx_data_0_4_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_4_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_4_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_3_4_0 <= 'd0; dac_dmx_data_4_4_0 <= 'd0; dac_dmx_data_5_4_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_6_4_0 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_7_4_0 <= 'd0; end 8'b01101011: begin dac_dmx_enable_4_0 <= 1'b1; dac_dmx_data_0_4_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_4_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_4_0 <= 'd0; dac_dmx_data_3_4_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_4_0 <= 'd0; dac_dmx_data_5_4_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_6_4_0 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_7_4_0 <= 'd0; end 8'b01101101: begin dac_dmx_enable_4_0 <= 1'b1; dac_dmx_data_0_4_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_4_0 <= 'd0; dac_dmx_data_2_4_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_4_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_4_0 <= 'd0; dac_dmx_data_5_4_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_6_4_0 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_7_4_0 <= 'd0; end 8'b01101110: begin dac_dmx_enable_4_0 <= 1'b1; dac_dmx_data_0_4_0 <= 'd0; dac_dmx_data_1_4_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_4_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_4_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_4_0 <= 'd0; dac_dmx_data_5_4_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_6_4_0 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_7_4_0 <= 'd0; end 8'b01110011: begin dac_dmx_enable_4_0 <= 1'b1; dac_dmx_data_0_4_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_4_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_4_0 <= 'd0; dac_dmx_data_3_4_0 <= 'd0; dac_dmx_data_4_4_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_4_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_6_4_0 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_7_4_0 <= 'd0; end default: begin dac_dmx_enable_4_0 <= 'd0; dac_dmx_data_0_4_0 <= 'd0; dac_dmx_data_1_4_0 <= 'd0; dac_dmx_data_2_4_0 <= 'd0; dac_dmx_data_3_4_0 <= 'd0; dac_dmx_data_4_4_0 <= 'd0; dac_dmx_data_5_4_0 <= 'd0; dac_dmx_data_6_4_0 <= 'd0; dac_dmx_data_7_4_0 <= 'd0; end endcase end always @(posedge dac_clk) begin case (dac_enable) 8'b01110101: begin dac_dmx_enable_4_1 <= 1'b1; dac_dmx_data_0_4_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_4_1 <= 'd0; dac_dmx_data_2_4_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_4_1 <= 'd0; dac_dmx_data_4_4_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_4_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_6_4_1 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_7_4_1 <= 'd0; end 8'b01110110: begin dac_dmx_enable_4_1 <= 1'b1; dac_dmx_data_0_4_1 <= 'd0; dac_dmx_data_1_4_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_4_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_4_1 <= 'd0; dac_dmx_data_4_4_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_4_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_6_4_1 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_7_4_1 <= 'd0; end 8'b01111001: begin dac_dmx_enable_4_1 <= 1'b1; dac_dmx_data_0_4_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_4_1 <= 'd0; dac_dmx_data_2_4_1 <= 'd0; dac_dmx_data_3_4_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_4_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_4_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_6_4_1 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_7_4_1 <= 'd0; end 8'b01111010: begin dac_dmx_enable_4_1 <= 1'b1; dac_dmx_data_0_4_1 <= 'd0; dac_dmx_data_1_4_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_4_1 <= 'd0; dac_dmx_data_3_4_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_4_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_4_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_6_4_1 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_7_4_1 <= 'd0; end 8'b01111100: begin dac_dmx_enable_4_1 <= 1'b1; dac_dmx_data_0_4_1 <= 'd0; dac_dmx_data_1_4_1 <= 'd0; dac_dmx_data_2_4_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_3_4_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_4_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_4_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_6_4_1 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_7_4_1 <= 'd0; end 8'b10001111: begin dac_dmx_enable_4_1 <= 1'b1; dac_dmx_data_0_4_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_4_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_4_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_3_4_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_4_4_1 <= 'd0; dac_dmx_data_5_4_1 <= 'd0; dac_dmx_data_6_4_1 <= 'd0; dac_dmx_data_7_4_1 <= dac_dsf_data[((16*4)+15):(16*4)]; end 8'b10010111: begin dac_dmx_enable_4_1 <= 1'b1; dac_dmx_data_0_4_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_4_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_4_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_3_4_1 <= 'd0; dac_dmx_data_4_4_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_5_4_1 <= 'd0; dac_dmx_data_6_4_1 <= 'd0; dac_dmx_data_7_4_1 <= dac_dsf_data[((16*4)+15):(16*4)]; end 8'b10011011: begin dac_dmx_enable_4_1 <= 1'b1; dac_dmx_data_0_4_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_4_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_4_1 <= 'd0; dac_dmx_data_3_4_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_4_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_5_4_1 <= 'd0; dac_dmx_data_6_4_1 <= 'd0; dac_dmx_data_7_4_1 <= dac_dsf_data[((16*4)+15):(16*4)]; end 8'b10011101: begin dac_dmx_enable_4_1 <= 1'b1; dac_dmx_data_0_4_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_4_1 <= 'd0; dac_dmx_data_2_4_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_4_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_4_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_5_4_1 <= 'd0; dac_dmx_data_6_4_1 <= 'd0; dac_dmx_data_7_4_1 <= dac_dsf_data[((16*4)+15):(16*4)]; end 8'b10011110: begin dac_dmx_enable_4_1 <= 1'b1; dac_dmx_data_0_4_1 <= 'd0; dac_dmx_data_1_4_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_4_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_4_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_4_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_5_4_1 <= 'd0; dac_dmx_data_6_4_1 <= 'd0; dac_dmx_data_7_4_1 <= dac_dsf_data[((16*4)+15):(16*4)]; end 8'b10100111: begin dac_dmx_enable_4_1 <= 1'b1; dac_dmx_data_0_4_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_4_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_4_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_3_4_1 <= 'd0; dac_dmx_data_4_4_1 <= 'd0; dac_dmx_data_5_4_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_6_4_1 <= 'd0; dac_dmx_data_7_4_1 <= dac_dsf_data[((16*4)+15):(16*4)]; end 8'b10101011: begin dac_dmx_enable_4_1 <= 1'b1; dac_dmx_data_0_4_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_4_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_4_1 <= 'd0; dac_dmx_data_3_4_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_4_1 <= 'd0; dac_dmx_data_5_4_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_6_4_1 <= 'd0; dac_dmx_data_7_4_1 <= dac_dsf_data[((16*4)+15):(16*4)]; end 8'b10101101: begin dac_dmx_enable_4_1 <= 1'b1; dac_dmx_data_0_4_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_4_1 <= 'd0; dac_dmx_data_2_4_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_4_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_4_1 <= 'd0; dac_dmx_data_5_4_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_6_4_1 <= 'd0; dac_dmx_data_7_4_1 <= dac_dsf_data[((16*4)+15):(16*4)]; end 8'b10101110: begin dac_dmx_enable_4_1 <= 1'b1; dac_dmx_data_0_4_1 <= 'd0; dac_dmx_data_1_4_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_4_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_4_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_4_1 <= 'd0; dac_dmx_data_5_4_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_6_4_1 <= 'd0; dac_dmx_data_7_4_1 <= dac_dsf_data[((16*4)+15):(16*4)]; end 8'b10110011: begin dac_dmx_enable_4_1 <= 1'b1; dac_dmx_data_0_4_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_4_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_4_1 <= 'd0; dac_dmx_data_3_4_1 <= 'd0; dac_dmx_data_4_4_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_4_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_6_4_1 <= 'd0; dac_dmx_data_7_4_1 <= dac_dsf_data[((16*4)+15):(16*4)]; end 8'b10110101: begin dac_dmx_enable_4_1 <= 1'b1; dac_dmx_data_0_4_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_4_1 <= 'd0; dac_dmx_data_2_4_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_4_1 <= 'd0; dac_dmx_data_4_4_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_4_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_6_4_1 <= 'd0; dac_dmx_data_7_4_1 <= dac_dsf_data[((16*4)+15):(16*4)]; end default: begin dac_dmx_enable_4_1 <= 'd0; dac_dmx_data_0_4_1 <= 'd0; dac_dmx_data_1_4_1 <= 'd0; dac_dmx_data_2_4_1 <= 'd0; dac_dmx_data_3_4_1 <= 'd0; dac_dmx_data_4_4_1 <= 'd0; dac_dmx_data_5_4_1 <= 'd0; dac_dmx_data_6_4_1 <= 'd0; dac_dmx_data_7_4_1 <= 'd0; end endcase end always @(posedge dac_clk) begin case (dac_enable) 8'b10110110: begin dac_dmx_enable_4_2 <= 1'b1; dac_dmx_data_0_4_2 <= 'd0; dac_dmx_data_1_4_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_4_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_4_2 <= 'd0; dac_dmx_data_4_4_2 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_4_2 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_6_4_2 <= 'd0; dac_dmx_data_7_4_2 <= dac_dsf_data[((16*4)+15):(16*4)]; end 8'b10111001: begin dac_dmx_enable_4_2 <= 1'b1; dac_dmx_data_0_4_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_4_2 <= 'd0; dac_dmx_data_2_4_2 <= 'd0; dac_dmx_data_3_4_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_4_2 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_4_2 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_6_4_2 <= 'd0; dac_dmx_data_7_4_2 <= dac_dsf_data[((16*4)+15):(16*4)]; end 8'b10111010: begin dac_dmx_enable_4_2 <= 1'b1; dac_dmx_data_0_4_2 <= 'd0; dac_dmx_data_1_4_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_4_2 <= 'd0; dac_dmx_data_3_4_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_4_2 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_4_2 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_6_4_2 <= 'd0; dac_dmx_data_7_4_2 <= dac_dsf_data[((16*4)+15):(16*4)]; end 8'b10111100: begin dac_dmx_enable_4_2 <= 1'b1; dac_dmx_data_0_4_2 <= 'd0; dac_dmx_data_1_4_2 <= 'd0; dac_dmx_data_2_4_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_3_4_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_4_2 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_4_2 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_6_4_2 <= 'd0; dac_dmx_data_7_4_2 <= dac_dsf_data[((16*4)+15):(16*4)]; end 8'b11000111: begin dac_dmx_enable_4_2 <= 1'b1; dac_dmx_data_0_4_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_4_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_4_2 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_3_4_2 <= 'd0; dac_dmx_data_4_4_2 <= 'd0; dac_dmx_data_5_4_2 <= 'd0; dac_dmx_data_6_4_2 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_7_4_2 <= dac_dsf_data[((16*4)+15):(16*4)]; end 8'b11001011: begin dac_dmx_enable_4_2 <= 1'b1; dac_dmx_data_0_4_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_4_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_4_2 <= 'd0; dac_dmx_data_3_4_2 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_4_2 <= 'd0; dac_dmx_data_5_4_2 <= 'd0; dac_dmx_data_6_4_2 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_7_4_2 <= dac_dsf_data[((16*4)+15):(16*4)]; end 8'b11001101: begin dac_dmx_enable_4_2 <= 1'b1; dac_dmx_data_0_4_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_4_2 <= 'd0; dac_dmx_data_2_4_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_4_2 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_4_2 <= 'd0; dac_dmx_data_5_4_2 <= 'd0; dac_dmx_data_6_4_2 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_7_4_2 <= dac_dsf_data[((16*4)+15):(16*4)]; end 8'b11001110: begin dac_dmx_enable_4_2 <= 1'b1; dac_dmx_data_0_4_2 <= 'd0; dac_dmx_data_1_4_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_4_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_4_2 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_4_2 <= 'd0; dac_dmx_data_5_4_2 <= 'd0; dac_dmx_data_6_4_2 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_7_4_2 <= dac_dsf_data[((16*4)+15):(16*4)]; end 8'b11010011: begin dac_dmx_enable_4_2 <= 1'b1; dac_dmx_data_0_4_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_4_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_4_2 <= 'd0; dac_dmx_data_3_4_2 <= 'd0; dac_dmx_data_4_4_2 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_4_2 <= 'd0; dac_dmx_data_6_4_2 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_7_4_2 <= dac_dsf_data[((16*4)+15):(16*4)]; end 8'b11010101: begin dac_dmx_enable_4_2 <= 1'b1; dac_dmx_data_0_4_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_4_2 <= 'd0; dac_dmx_data_2_4_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_4_2 <= 'd0; dac_dmx_data_4_4_2 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_4_2 <= 'd0; dac_dmx_data_6_4_2 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_7_4_2 <= dac_dsf_data[((16*4)+15):(16*4)]; end 8'b11010110: begin dac_dmx_enable_4_2 <= 1'b1; dac_dmx_data_0_4_2 <= 'd0; dac_dmx_data_1_4_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_4_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_4_2 <= 'd0; dac_dmx_data_4_4_2 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_4_2 <= 'd0; dac_dmx_data_6_4_2 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_7_4_2 <= dac_dsf_data[((16*4)+15):(16*4)]; end 8'b11011001: begin dac_dmx_enable_4_2 <= 1'b1; dac_dmx_data_0_4_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_4_2 <= 'd0; dac_dmx_data_2_4_2 <= 'd0; dac_dmx_data_3_4_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_4_2 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_4_2 <= 'd0; dac_dmx_data_6_4_2 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_7_4_2 <= dac_dsf_data[((16*4)+15):(16*4)]; end 8'b11011010: begin dac_dmx_enable_4_2 <= 1'b1; dac_dmx_data_0_4_2 <= 'd0; dac_dmx_data_1_4_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_4_2 <= 'd0; dac_dmx_data_3_4_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_4_2 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_4_2 <= 'd0; dac_dmx_data_6_4_2 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_7_4_2 <= dac_dsf_data[((16*4)+15):(16*4)]; end 8'b11011100: begin dac_dmx_enable_4_2 <= 1'b1; dac_dmx_data_0_4_2 <= 'd0; dac_dmx_data_1_4_2 <= 'd0; dac_dmx_data_2_4_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_3_4_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_4_2 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_4_2 <= 'd0; dac_dmx_data_6_4_2 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_7_4_2 <= dac_dsf_data[((16*4)+15):(16*4)]; end 8'b11100011: begin dac_dmx_enable_4_2 <= 1'b1; dac_dmx_data_0_4_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_4_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_4_2 <= 'd0; dac_dmx_data_3_4_2 <= 'd0; dac_dmx_data_4_4_2 <= 'd0; dac_dmx_data_5_4_2 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_6_4_2 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_7_4_2 <= dac_dsf_data[((16*4)+15):(16*4)]; end 8'b11100101: begin dac_dmx_enable_4_2 <= 1'b1; dac_dmx_data_0_4_2 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_4_2 <= 'd0; dac_dmx_data_2_4_2 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_4_2 <= 'd0; dac_dmx_data_4_4_2 <= 'd0; dac_dmx_data_5_4_2 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_6_4_2 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_7_4_2 <= dac_dsf_data[((16*4)+15):(16*4)]; end default: begin dac_dmx_enable_4_2 <= 'd0; dac_dmx_data_0_4_2 <= 'd0; dac_dmx_data_1_4_2 <= 'd0; dac_dmx_data_2_4_2 <= 'd0; dac_dmx_data_3_4_2 <= 'd0; dac_dmx_data_4_4_2 <= 'd0; dac_dmx_data_5_4_2 <= 'd0; dac_dmx_data_6_4_2 <= 'd0; dac_dmx_data_7_4_2 <= 'd0; end endcase end always @(posedge dac_clk) begin case (dac_enable) 8'b11100110: begin dac_dmx_enable_4_3 <= 1'b1; dac_dmx_data_0_4_3 <= 'd0; dac_dmx_data_1_4_3 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_4_3 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_4_3 <= 'd0; dac_dmx_data_4_4_3 <= 'd0; dac_dmx_data_5_4_3 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_6_4_3 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_7_4_3 <= dac_dsf_data[((16*4)+15):(16*4)]; end 8'b11101001: begin dac_dmx_enable_4_3 <= 1'b1; dac_dmx_data_0_4_3 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_4_3 <= 'd0; dac_dmx_data_2_4_3 <= 'd0; dac_dmx_data_3_4_3 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_4_3 <= 'd0; dac_dmx_data_5_4_3 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_6_4_3 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_7_4_3 <= dac_dsf_data[((16*4)+15):(16*4)]; end 8'b11101010: begin dac_dmx_enable_4_3 <= 1'b1; dac_dmx_data_0_4_3 <= 'd0; dac_dmx_data_1_4_3 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_4_3 <= 'd0; dac_dmx_data_3_4_3 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_4_3 <= 'd0; dac_dmx_data_5_4_3 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_6_4_3 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_7_4_3 <= dac_dsf_data[((16*4)+15):(16*4)]; end 8'b11101100: begin dac_dmx_enable_4_3 <= 1'b1; dac_dmx_data_0_4_3 <= 'd0; dac_dmx_data_1_4_3 <= 'd0; dac_dmx_data_2_4_3 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_3_4_3 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_4_3 <= 'd0; dac_dmx_data_5_4_3 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_6_4_3 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_7_4_3 <= dac_dsf_data[((16*4)+15):(16*4)]; end 8'b11110001: begin dac_dmx_enable_4_3 <= 1'b1; dac_dmx_data_0_4_3 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_4_3 <= 'd0; dac_dmx_data_2_4_3 <= 'd0; dac_dmx_data_3_4_3 <= 'd0; dac_dmx_data_4_4_3 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_5_4_3 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_6_4_3 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_7_4_3 <= dac_dsf_data[((16*4)+15):(16*4)]; end 8'b11110010: begin dac_dmx_enable_4_3 <= 1'b1; dac_dmx_data_0_4_3 <= 'd0; dac_dmx_data_1_4_3 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_4_3 <= 'd0; dac_dmx_data_3_4_3 <= 'd0; dac_dmx_data_4_4_3 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_5_4_3 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_6_4_3 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_7_4_3 <= dac_dsf_data[((16*4)+15):(16*4)]; end 8'b11110100: begin dac_dmx_enable_4_3 <= 1'b1; dac_dmx_data_0_4_3 <= 'd0; dac_dmx_data_1_4_3 <= 'd0; dac_dmx_data_2_4_3 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_3_4_3 <= 'd0; dac_dmx_data_4_4_3 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_5_4_3 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_6_4_3 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_7_4_3 <= dac_dsf_data[((16*4)+15):(16*4)]; end 8'b11111000: begin dac_dmx_enable_4_3 <= 1'b1; dac_dmx_data_0_4_3 <= 'd0; dac_dmx_data_1_4_3 <= 'd0; dac_dmx_data_2_4_3 <= 'd0; dac_dmx_data_3_4_3 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_4_4_3 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_5_4_3 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_6_4_3 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_7_4_3 <= dac_dsf_data[((16*4)+15):(16*4)]; end default: begin dac_dmx_enable_4_3 <= 'd0; dac_dmx_data_0_4_3 <= 'd0; dac_dmx_data_1_4_3 <= 'd0; dac_dmx_data_2_4_3 <= 'd0; dac_dmx_data_3_4_3 <= 'd0; dac_dmx_data_4_4_3 <= 'd0; dac_dmx_data_5_4_3 <= 'd0; dac_dmx_data_6_4_3 <= 'd0; dac_dmx_data_7_4_3 <= 'd0; end endcase end // 6 channel(s) always @(posedge dac_clk) begin case (dac_enable) 8'b00111111: begin dac_dmx_enable_5_0 <= 1'b1; dac_dmx_data_0_5_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_5_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_5_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_3_5_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_4_5_0 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_5_5_0 <= dac_dsf_data[((16*5)+15):(16*5)]; dac_dmx_data_6_5_0 <= 'd0; dac_dmx_data_7_5_0 <= 'd0; end 8'b01011111: begin dac_dmx_enable_5_0 <= 1'b1; dac_dmx_data_0_5_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_5_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_5_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_3_5_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_4_5_0 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_5_5_0 <= 'd0; dac_dmx_data_6_5_0 <= dac_dsf_data[((16*5)+15):(16*5)]; dac_dmx_data_7_5_0 <= 'd0; end 8'b01101111: begin dac_dmx_enable_5_0 <= 1'b1; dac_dmx_data_0_5_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_5_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_5_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_3_5_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_4_5_0 <= 'd0; dac_dmx_data_5_5_0 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_6_5_0 <= dac_dsf_data[((16*5)+15):(16*5)]; dac_dmx_data_7_5_0 <= 'd0; end 8'b01110111: begin dac_dmx_enable_5_0 <= 1'b1; dac_dmx_data_0_5_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_5_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_5_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_3_5_0 <= 'd0; dac_dmx_data_4_5_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_5_5_0 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_6_5_0 <= dac_dsf_data[((16*5)+15):(16*5)]; dac_dmx_data_7_5_0 <= 'd0; end 8'b01111011: begin dac_dmx_enable_5_0 <= 1'b1; dac_dmx_data_0_5_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_5_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_5_0 <= 'd0; dac_dmx_data_3_5_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_5_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_5_5_0 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_6_5_0 <= dac_dsf_data[((16*5)+15):(16*5)]; dac_dmx_data_7_5_0 <= 'd0; end 8'b01111101: begin dac_dmx_enable_5_0 <= 1'b1; dac_dmx_data_0_5_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_5_0 <= 'd0; dac_dmx_data_2_5_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_5_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_5_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_5_5_0 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_6_5_0 <= dac_dsf_data[((16*5)+15):(16*5)]; dac_dmx_data_7_5_0 <= 'd0; end 8'b01111110: begin dac_dmx_enable_5_0 <= 1'b1; dac_dmx_data_0_5_0 <= 'd0; dac_dmx_data_1_5_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_5_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_5_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_5_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_5_5_0 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_6_5_0 <= dac_dsf_data[((16*5)+15):(16*5)]; dac_dmx_data_7_5_0 <= 'd0; end 8'b10011111: begin dac_dmx_enable_5_0 <= 1'b1; dac_dmx_data_0_5_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_5_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_5_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_3_5_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_4_5_0 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_5_5_0 <= 'd0; dac_dmx_data_6_5_0 <= 'd0; dac_dmx_data_7_5_0 <= dac_dsf_data[((16*5)+15):(16*5)]; end 8'b10101111: begin dac_dmx_enable_5_0 <= 1'b1; dac_dmx_data_0_5_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_5_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_5_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_3_5_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_4_5_0 <= 'd0; dac_dmx_data_5_5_0 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_6_5_0 <= 'd0; dac_dmx_data_7_5_0 <= dac_dsf_data[((16*5)+15):(16*5)]; end 8'b10110111: begin dac_dmx_enable_5_0 <= 1'b1; dac_dmx_data_0_5_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_5_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_5_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_3_5_0 <= 'd0; dac_dmx_data_4_5_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_5_5_0 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_6_5_0 <= 'd0; dac_dmx_data_7_5_0 <= dac_dsf_data[((16*5)+15):(16*5)]; end 8'b10111011: begin dac_dmx_enable_5_0 <= 1'b1; dac_dmx_data_0_5_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_5_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_5_0 <= 'd0; dac_dmx_data_3_5_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_5_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_5_5_0 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_6_5_0 <= 'd0; dac_dmx_data_7_5_0 <= dac_dsf_data[((16*5)+15):(16*5)]; end 8'b10111101: begin dac_dmx_enable_5_0 <= 1'b1; dac_dmx_data_0_5_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_5_0 <= 'd0; dac_dmx_data_2_5_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_5_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_5_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_5_5_0 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_6_5_0 <= 'd0; dac_dmx_data_7_5_0 <= dac_dsf_data[((16*5)+15):(16*5)]; end 8'b10111110: begin dac_dmx_enable_5_0 <= 1'b1; dac_dmx_data_0_5_0 <= 'd0; dac_dmx_data_1_5_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_5_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_5_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_5_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_5_5_0 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_6_5_0 <= 'd0; dac_dmx_data_7_5_0 <= dac_dsf_data[((16*5)+15):(16*5)]; end 8'b11001111: begin dac_dmx_enable_5_0 <= 1'b1; dac_dmx_data_0_5_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_5_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_5_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_3_5_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_4_5_0 <= 'd0; dac_dmx_data_5_5_0 <= 'd0; dac_dmx_data_6_5_0 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_7_5_0 <= dac_dsf_data[((16*5)+15):(16*5)]; end 8'b11010111: begin dac_dmx_enable_5_0 <= 1'b1; dac_dmx_data_0_5_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_5_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_5_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_3_5_0 <= 'd0; dac_dmx_data_4_5_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_5_5_0 <= 'd0; dac_dmx_data_6_5_0 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_7_5_0 <= dac_dsf_data[((16*5)+15):(16*5)]; end 8'b11011011: begin dac_dmx_enable_5_0 <= 1'b1; dac_dmx_data_0_5_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_5_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_5_0 <= 'd0; dac_dmx_data_3_5_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_5_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_5_5_0 <= 'd0; dac_dmx_data_6_5_0 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_7_5_0 <= dac_dsf_data[((16*5)+15):(16*5)]; end default: begin dac_dmx_enable_5_0 <= 'd0; dac_dmx_data_0_5_0 <= 'd0; dac_dmx_data_1_5_0 <= 'd0; dac_dmx_data_2_5_0 <= 'd0; dac_dmx_data_3_5_0 <= 'd0; dac_dmx_data_4_5_0 <= 'd0; dac_dmx_data_5_5_0 <= 'd0; dac_dmx_data_6_5_0 <= 'd0; dac_dmx_data_7_5_0 <= 'd0; end endcase end always @(posedge dac_clk) begin case (dac_enable) 8'b11011101: begin dac_dmx_enable_5_1 <= 1'b1; dac_dmx_data_0_5_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_5_1 <= 'd0; dac_dmx_data_2_5_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_5_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_5_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_5_5_1 <= 'd0; dac_dmx_data_6_5_1 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_7_5_1 <= dac_dsf_data[((16*5)+15):(16*5)]; end 8'b11011110: begin dac_dmx_enable_5_1 <= 1'b1; dac_dmx_data_0_5_1 <= 'd0; dac_dmx_data_1_5_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_5_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_5_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_5_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_5_5_1 <= 'd0; dac_dmx_data_6_5_1 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_7_5_1 <= dac_dsf_data[((16*5)+15):(16*5)]; end 8'b11100111: begin dac_dmx_enable_5_1 <= 1'b1; dac_dmx_data_0_5_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_5_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_5_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_3_5_1 <= 'd0; dac_dmx_data_4_5_1 <= 'd0; dac_dmx_data_5_5_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_6_5_1 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_7_5_1 <= dac_dsf_data[((16*5)+15):(16*5)]; end 8'b11101011: begin dac_dmx_enable_5_1 <= 1'b1; dac_dmx_data_0_5_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_5_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_5_1 <= 'd0; dac_dmx_data_3_5_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_5_1 <= 'd0; dac_dmx_data_5_5_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_6_5_1 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_7_5_1 <= dac_dsf_data[((16*5)+15):(16*5)]; end 8'b11101101: begin dac_dmx_enable_5_1 <= 1'b1; dac_dmx_data_0_5_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_5_1 <= 'd0; dac_dmx_data_2_5_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_5_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_5_1 <= 'd0; dac_dmx_data_5_5_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_6_5_1 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_7_5_1 <= dac_dsf_data[((16*5)+15):(16*5)]; end 8'b11101110: begin dac_dmx_enable_5_1 <= 1'b1; dac_dmx_data_0_5_1 <= 'd0; dac_dmx_data_1_5_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_5_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_5_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_5_1 <= 'd0; dac_dmx_data_5_5_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_6_5_1 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_7_5_1 <= dac_dsf_data[((16*5)+15):(16*5)]; end 8'b11110011: begin dac_dmx_enable_5_1 <= 1'b1; dac_dmx_data_0_5_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_5_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_5_1 <= 'd0; dac_dmx_data_3_5_1 <= 'd0; dac_dmx_data_4_5_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_5_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_6_5_1 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_7_5_1 <= dac_dsf_data[((16*5)+15):(16*5)]; end 8'b11110101: begin dac_dmx_enable_5_1 <= 1'b1; dac_dmx_data_0_5_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_5_1 <= 'd0; dac_dmx_data_2_5_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_5_1 <= 'd0; dac_dmx_data_4_5_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_5_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_6_5_1 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_7_5_1 <= dac_dsf_data[((16*5)+15):(16*5)]; end 8'b11110110: begin dac_dmx_enable_5_1 <= 1'b1; dac_dmx_data_0_5_1 <= 'd0; dac_dmx_data_1_5_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_5_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_5_1 <= 'd0; dac_dmx_data_4_5_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_5_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_6_5_1 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_7_5_1 <= dac_dsf_data[((16*5)+15):(16*5)]; end 8'b11111001: begin dac_dmx_enable_5_1 <= 1'b1; dac_dmx_data_0_5_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_5_1 <= 'd0; dac_dmx_data_2_5_1 <= 'd0; dac_dmx_data_3_5_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_5_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_5_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_6_5_1 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_7_5_1 <= dac_dsf_data[((16*5)+15):(16*5)]; end 8'b11111010: begin dac_dmx_enable_5_1 <= 1'b1; dac_dmx_data_0_5_1 <= 'd0; dac_dmx_data_1_5_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_5_1 <= 'd0; dac_dmx_data_3_5_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_5_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_5_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_6_5_1 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_7_5_1 <= dac_dsf_data[((16*5)+15):(16*5)]; end 8'b11111100: begin dac_dmx_enable_5_1 <= 1'b1; dac_dmx_data_0_5_1 <= 'd0; dac_dmx_data_1_5_1 <= 'd0; dac_dmx_data_2_5_1 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_3_5_1 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_4_5_1 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_5_5_1 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_6_5_1 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_7_5_1 <= dac_dsf_data[((16*5)+15):(16*5)]; end default: begin dac_dmx_enable_5_1 <= 'd0; dac_dmx_data_0_5_1 <= 'd0; dac_dmx_data_1_5_1 <= 'd0; dac_dmx_data_2_5_1 <= 'd0; dac_dmx_data_3_5_1 <= 'd0; dac_dmx_data_4_5_1 <= 'd0; dac_dmx_data_5_5_1 <= 'd0; dac_dmx_data_6_5_1 <= 'd0; dac_dmx_data_7_5_1 <= 'd0; end endcase end // 7 channel(s) always @(posedge dac_clk) begin case (dac_enable) 8'b01111111: begin dac_dmx_enable_6_0 <= 1'b1; dac_dmx_data_0_6_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_6_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_6_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_3_6_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_4_6_0 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_5_6_0 <= dac_dsf_data[((16*5)+15):(16*5)]; dac_dmx_data_6_6_0 <= dac_dsf_data[((16*6)+15):(16*6)]; dac_dmx_data_7_6_0 <= 'd0; end 8'b10111111: begin dac_dmx_enable_6_0 <= 1'b1; dac_dmx_data_0_6_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_6_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_6_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_3_6_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_4_6_0 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_5_6_0 <= dac_dsf_data[((16*5)+15):(16*5)]; dac_dmx_data_6_6_0 <= 'd0; dac_dmx_data_7_6_0 <= dac_dsf_data[((16*6)+15):(16*6)]; end 8'b11011111: begin dac_dmx_enable_6_0 <= 1'b1; dac_dmx_data_0_6_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_6_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_6_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_3_6_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_4_6_0 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_5_6_0 <= 'd0; dac_dmx_data_6_6_0 <= dac_dsf_data[((16*5)+15):(16*5)]; dac_dmx_data_7_6_0 <= dac_dsf_data[((16*6)+15):(16*6)]; end 8'b11101111: begin dac_dmx_enable_6_0 <= 1'b1; dac_dmx_data_0_6_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_6_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_6_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_3_6_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_4_6_0 <= 'd0; dac_dmx_data_5_6_0 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_6_6_0 <= dac_dsf_data[((16*5)+15):(16*5)]; dac_dmx_data_7_6_0 <= dac_dsf_data[((16*6)+15):(16*6)]; end 8'b11110111: begin dac_dmx_enable_6_0 <= 1'b1; dac_dmx_data_0_6_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_6_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_6_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_3_6_0 <= 'd0; dac_dmx_data_4_6_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_5_6_0 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_6_6_0 <= dac_dsf_data[((16*5)+15):(16*5)]; dac_dmx_data_7_6_0 <= dac_dsf_data[((16*6)+15):(16*6)]; end 8'b11111011: begin dac_dmx_enable_6_0 <= 1'b1; dac_dmx_data_0_6_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_6_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_6_0 <= 'd0; dac_dmx_data_3_6_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_6_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_5_6_0 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_6_6_0 <= dac_dsf_data[((16*5)+15):(16*5)]; dac_dmx_data_7_6_0 <= dac_dsf_data[((16*6)+15):(16*6)]; end 8'b11111101: begin dac_dmx_enable_6_0 <= 1'b1; dac_dmx_data_0_6_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_6_0 <= 'd0; dac_dmx_data_2_6_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_6_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_6_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_5_6_0 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_6_6_0 <= dac_dsf_data[((16*5)+15):(16*5)]; dac_dmx_data_7_6_0 <= dac_dsf_data[((16*6)+15):(16*6)]; end 8'b11111110: begin dac_dmx_enable_6_0 <= 1'b1; dac_dmx_data_0_6_0 <= 'd0; dac_dmx_data_1_6_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_2_6_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_3_6_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_4_6_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_5_6_0 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_6_6_0 <= dac_dsf_data[((16*5)+15):(16*5)]; dac_dmx_data_7_6_0 <= dac_dsf_data[((16*6)+15):(16*6)]; end default: begin dac_dmx_enable_6_0 <= 'd0; dac_dmx_data_0_6_0 <= 'd0; dac_dmx_data_1_6_0 <= 'd0; dac_dmx_data_2_6_0 <= 'd0; dac_dmx_data_3_6_0 <= 'd0; dac_dmx_data_4_6_0 <= 'd0; dac_dmx_data_5_6_0 <= 'd0; dac_dmx_data_6_6_0 <= 'd0; dac_dmx_data_7_6_0 <= 'd0; end endcase end // 8 channel(s) always @(posedge dac_clk) begin case (dac_enable) 8'b11111111: begin dac_dmx_enable_7_0 <= 1'b1; dac_dmx_data_0_7_0 <= dac_dsf_data[((16*0)+15):(16*0)]; dac_dmx_data_1_7_0 <= dac_dsf_data[((16*1)+15):(16*1)]; dac_dmx_data_2_7_0 <= dac_dsf_data[((16*2)+15):(16*2)]; dac_dmx_data_3_7_0 <= dac_dsf_data[((16*3)+15):(16*3)]; dac_dmx_data_4_7_0 <= dac_dsf_data[((16*4)+15):(16*4)]; dac_dmx_data_5_7_0 <= dac_dsf_data[((16*5)+15):(16*5)]; dac_dmx_data_6_7_0 <= dac_dsf_data[((16*6)+15):(16*6)]; dac_dmx_data_7_7_0 <= dac_dsf_data[((16*7)+15):(16*7)]; end default: begin dac_dmx_enable_7_0 <= 'd0; dac_dmx_data_0_7_0 <= 'd0; dac_dmx_data_1_7_0 <= 'd0; dac_dmx_data_2_7_0 <= 'd0; dac_dmx_data_3_7_0 <= 'd0; dac_dmx_data_4_7_0 <= 'd0; dac_dmx_data_5_7_0 <= 'd0; dac_dmx_data_6_7_0 <= 'd0; dac_dmx_data_7_7_0 <= 'd0; end endcase end endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/util_upack/util_upack_dsf.v000077500000000000000000000230731457144405000303310ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module util_upack_dsf ( // dac interface dac_clk, dac_valid, dac_data, // dmx interface dac_dmx_enable, dac_dsf_valid, dac_dsf_sync, dac_dsf_data); // parameters parameter NUM_OF_CHANNELS_P = 4; parameter NUM_OF_CHANNELS_M = 8; parameter CHANNEL_DATA_WIDTH = 32; parameter NUM_OF_CHANNELS_O = 4; localparam CH_SCNT = CHANNEL_DATA_WIDTH/16; localparam P_WIDTH = CHANNEL_DATA_WIDTH*NUM_OF_CHANNELS_P; localparam M_WIDTH = CHANNEL_DATA_WIDTH*NUM_OF_CHANNELS_M; localparam O_WIDTH = CHANNEL_DATA_WIDTH*NUM_OF_CHANNELS_O; localparam E_WIDTH = CHANNEL_DATA_WIDTH*(NUM_OF_CHANNELS_M+1); localparam CH_DCNT = NUM_OF_CHANNELS_P - NUM_OF_CHANNELS_O; // dac interface input dac_clk; input dac_valid; input [(P_WIDTH-1):0] dac_data; // dmx interface input dac_dmx_enable; output dac_dsf_valid; output dac_dsf_sync; output [(M_WIDTH-1):0] dac_dsf_data; // internal registers reg dac_dmx_valid = 'd0; reg dac_dsf_valid = 'd0; reg dac_dsf_sync = 'd0; reg [ 2:0] dac_samples_int = 'd0; reg dac_dmx_valid_d = 'd0; reg dac_dsf_valid_d = 'd0; reg [ 2:0] dac_samples_int_d = 'd0; reg [(M_WIDTH-1):0] dac_data_int = 'd0; reg [(M_WIDTH-1):0] dac_dsf_data_int = 'd0; reg [(M_WIDTH-1):0] dac_dsf_data = 'd0; reg dac_valid_d1 = 'd0; // internal signals wire [ 2:0] dac_samples_int_s; wire [(E_WIDTH-1):0] dac_data_s; wire [(E_WIDTH-1):0] dac_data_int_0_s; wire [(E_WIDTH-1):0] dac_data_int_1_s; wire [M_WIDTH:0] dac_dsf_data_s; // bypass genvar i; generate if (NUM_OF_CHANNELS_O == NUM_OF_CHANNELS_P) begin for (i = 0; i < CH_SCNT ; i = i +1) begin: g_dsf_data assign dac_dsf_data_s[(((i +1) * NUM_OF_CHANNELS_M * 16)-1):(i*NUM_OF_CHANNELS_M*16)] = dac_data[(((i+1)*16*NUM_OF_CHANNELS_P)-1): (i*16*NUM_OF_CHANNELS_P)]; end end endgenerate generate if (NUM_OF_CHANNELS_O == NUM_OF_CHANNELS_P) begin assign dac_samples_int_s = 'd0; assign dac_data_s = 'd0; assign dac_data_int_0_s = 'd0; assign dac_data_int_1_s = 'd0; always @(posedge dac_clk) begin dac_dmx_valid <= dac_valid & dac_dmx_enable; dac_dsf_valid <= dac_valid & dac_dmx_enable; dac_dsf_sync <= dac_valid & dac_dmx_enable; dac_samples_int <= 'd0; dac_dmx_valid_d <= 'd0; dac_dsf_valid_d <= 'd0; dac_samples_int_d <= 'd0; dac_data_int <= 'd0; dac_dsf_data_int <= 'd0; if (dac_dmx_enable == 1'b1) begin dac_dsf_data <= dac_dsf_data_s[(M_WIDTH-1):0]; end else begin dac_dsf_data <= 'd0; end end end endgenerate // data store & forward generate if (NUM_OF_CHANNELS_P > NUM_OF_CHANNELS_O) begin assign dac_samples_int_s = (dac_dsf_valid == 1'b1) ? (dac_samples_int + CH_DCNT) : ((dac_samples_int >= NUM_OF_CHANNELS_O) ? (dac_samples_int - NUM_OF_CHANNELS_O) : dac_samples_int); always @(posedge dac_clk) begin dac_dmx_valid <= dac_valid & dac_dmx_enable; dac_valid_d1 <= dac_valid; if (dac_valid_d1 == 1'b1) begin if (dac_samples_int_s < NUM_OF_CHANNELS_O) begin dac_dsf_valid <= dac_valid & dac_dmx_enable; end else begin dac_dsf_valid <= 1'b0; end if (dac_samples_int_s == 0) begin dac_dsf_sync <= dac_valid & dac_dmx_enable; end else begin dac_dsf_sync <= 1'b0; end end else begin if (dac_samples_int < NUM_OF_CHANNELS_O) begin dac_dsf_valid <= dac_valid & dac_dmx_enable; end else begin dac_dsf_valid <= 1'b0; end if (dac_samples_int == 0) begin dac_dsf_sync <= dac_valid & dac_dmx_enable; end else begin dac_dsf_sync <= 1'b0; end end if (dac_dmx_valid == 1'b1) begin dac_samples_int <= dac_samples_int_s; end end assign dac_data_s[(E_WIDTH-1):P_WIDTH] = 'd0; assign dac_data_s[(P_WIDTH-1):0] = dac_data; assign dac_data_int_0_s[(E_WIDTH-1):(E_WIDTH-P_WIDTH)] = dac_data; assign dac_data_int_0_s[((E_WIDTH-P_WIDTH)-1):0] = dac_data_int[(M_WIDTH-1):(M_WIDTH-(E_WIDTH-P_WIDTH))]; assign dac_data_int_1_s[(E_WIDTH-1):(E_WIDTH-(M_WIDTH-O_WIDTH))] = dac_data_int[(M_WIDTH-1):O_WIDTH]; assign dac_data_int_1_s[((E_WIDTH-(M_WIDTH-O_WIDTH))-1):0] = 'd0; always @(posedge dac_clk) begin dac_dmx_valid_d <= dac_dmx_valid; dac_dsf_valid_d <= dac_dsf_valid; dac_samples_int_d <= dac_samples_int; if (dac_dsf_valid_d == 1'b1) begin dac_data_int <= dac_data_int_0_s[(E_WIDTH-1):(E_WIDTH-M_WIDTH)]; end else if (dac_dmx_valid_d == 1'b1) begin dac_data_int <= dac_data_int_1_s[(E_WIDTH-1):(E_WIDTH-M_WIDTH)]; end end always @(posedge dac_clk) begin if (dac_dmx_valid_d == 1'b1) begin case (dac_samples_int_d) 3'b111: dac_dsf_data_int <= { dac_data_s[((CHANNEL_DATA_WIDTH*1)-1):0], dac_data_int[((CHANNEL_DATA_WIDTH*8)-1):(CHANNEL_DATA_WIDTH*1)]}; 3'b110: dac_dsf_data_int <= { dac_data_s[((CHANNEL_DATA_WIDTH*2)-1):0], dac_data_int[((CHANNEL_DATA_WIDTH*8)-1):(CHANNEL_DATA_WIDTH*2)]}; 3'b101: dac_dsf_data_int <= { dac_data_s[((CHANNEL_DATA_WIDTH*3)-1):0], dac_data_int[((CHANNEL_DATA_WIDTH*8)-1):(CHANNEL_DATA_WIDTH*3)]}; 3'b100: dac_dsf_data_int <= { dac_data_s[((CHANNEL_DATA_WIDTH*4)-1):0], dac_data_int[((CHANNEL_DATA_WIDTH*8)-1):(CHANNEL_DATA_WIDTH*4)]}; 3'b011: dac_dsf_data_int <= { dac_data_s[((CHANNEL_DATA_WIDTH*5)-1):0], dac_data_int[((CHANNEL_DATA_WIDTH*8)-1):(CHANNEL_DATA_WIDTH*5)]}; 3'b010: dac_dsf_data_int <= { dac_data_s[((CHANNEL_DATA_WIDTH*6)-1):0], dac_data_int[((CHANNEL_DATA_WIDTH*8)-1):(CHANNEL_DATA_WIDTH*6)]}; 3'b001: dac_dsf_data_int <= { dac_data_s[((CHANNEL_DATA_WIDTH*7)-1):0], dac_data_int[((CHANNEL_DATA_WIDTH*8)-1):(CHANNEL_DATA_WIDTH*7)]}; 3'b000: dac_dsf_data_int <= dac_data_s; default: dac_dsf_data_int <= 'd0; endcase end end end endgenerate genvar n; generate if (NUM_OF_CHANNELS_P > NUM_OF_CHANNELS_O) begin assign dac_dsf_data_s[M_WIDTH] = 'd0; for (n = 0; n < CH_SCNT; n = n + 1) begin: g_out assign dac_dsf_data_s[(((n+1)*NUM_OF_CHANNELS_M*16)-1):(((n*NUM_OF_CHANNELS_M)+NUM_OF_CHANNELS_O)*16)] = 'd0; assign dac_dsf_data_s[((((n*NUM_OF_CHANNELS_M)+NUM_OF_CHANNELS_O)*16)-1):(n*NUM_OF_CHANNELS_M*16)] = dac_dsf_data_int[(((n+1)*NUM_OF_CHANNELS_O*16)-1):(n*NUM_OF_CHANNELS_O*16)]; end end endgenerate generate if (NUM_OF_CHANNELS_P > NUM_OF_CHANNELS_O) begin always @(posedge dac_clk) begin if (dac_dmx_enable == 1'b1) begin dac_dsf_data <= dac_dsf_data_s[(M_WIDTH-1):0]; end else begin dac_dsf_data <= 'd0; end end end endgenerate endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/util_upack/util_upack_hw.tcl000077500000000000000000000121701457144405000305040ustar00rootroot00000000000000 package require -exact qsys 13.0 source ../scripts/adi_env.tcl source ../scripts/adi_ip_alt.tcl set_module_property NAME util_upack set_module_property DESCRIPTION "Channel Pack Utility" set_module_property VERSION 1.0 set_module_property GROUP "Analog Devices" set_module_property DISPLAY_NAME util_upack set_module_property ELABORATION_CALLBACK p_util_upack # files add_fileset quartus_synth QUARTUS_SYNTH "" "Quartus Synthesis" set_fileset_property quartus_synth TOP_LEVEL util_upack add_fileset_file util_upack.qip OTHER PATH ./util_upack.qip # parameters add_parameter CHANNEL_DATA_WIDTH INTEGER 0 set_parameter_property CHANNEL_DATA_WIDTH DEFAULT_VALUE 32 set_parameter_property CHANNEL_DATA_WIDTH DISPLAY_NAME CHANNEL_DATA_WIDTH set_parameter_property CHANNEL_DATA_WIDTH TYPE INTEGER set_parameter_property CHANNEL_DATA_WIDTH UNITS None set_parameter_property CHANNEL_DATA_WIDTH HDL_PARAMETER true add_parameter NUM_OF_CHANNELS INTEGER 0 set_parameter_property NUM_OF_CHANNELS DEFAULT_VALUE 8 set_parameter_property NUM_OF_CHANNELS DISPLAY_NAME NUM_OF_CHANNELS set_parameter_property NUM_OF_CHANNELS TYPE INTEGER set_parameter_property NUM_OF_CHANNELS UNITS None set_parameter_property NUM_OF_CHANNELS HDL_PARAMETER true # defaults ad_alt_intf clock dac_clk input 1 ad_alt_intf signal dma_xfer_in input 1 xfer_req ad_alt_intf signal dac_xfer_out output 1 xfer_req ad_alt_intf signal dac_valid output 1 valid ad_alt_intf signal dac_sync output 1 sync ad_alt_intf signal dac_data input NUM_OF_CHANNELS*CHANNEL_DATA_WIDTH data add_interface fifo_ch_0 conduit end #set_interface_property fifo_ch_0 associatedClock if_dac_clk add_interface_port fifo_ch_0 dac_enable_0 enable Input 1 add_interface_port fifo_ch_0 dac_valid_0 valid Input 1 #add_interface_port fifo_ch_0 upack_valid_0 valid_o Output 1 add_interface_port fifo_ch_0 dac_data_0 data Output CHANNEL_DATA_WIDTH proc p_util_upack {} { if {[get_parameter_value NUM_OF_CHANNELS] > 1} { add_interface fifo_ch_1 conduit end #set_interface_property fifo_ch_1 associatedClock if_dac_clk add_interface_port fifo_ch_1 dac_enable_1 enable Input 1 add_interface_port fifo_ch_1 dac_valid_1 valid Input 1 # add_interface_port fifo_ch_1 upack_valid_1 valid_o Output 1 add_interface_port fifo_ch_1 dac_data_1 data Output CHANNEL_DATA_WIDTH } if {[get_parameter_value NUM_OF_CHANNELS] > 2} { add_interface fifo_ch_2 conduit end #set_interface_property fifo_ch_2 associatedClock if_dac_clk add_interface_port fifo_ch_2 dac_enable_2 enable Input 1 add_interface_port fifo_ch_2 dac_valid_2 valid Input 1 # add_interface_port fifo_ch_2 upack_valid_2 valid_o Output 1 add_interface_port fifo_ch_2 dac_data_2 data Output CHANNEL_DATA_WIDTH } if {[get_parameter_value NUM_OF_CHANNELS] > 3} { add_interface fifo_ch_3 conduit end #set_interface_property fifo_ch_3 associatedClock if_dac_clk add_interface_port fifo_ch_3 dac_enable_3 enable Input 1 add_interface_port fifo_ch_3 dac_valid_3 valid Input 1 # add_interface_port fifo_ch_3 upack_valid_3 valid_o Output 1 add_interface_port fifo_ch_3 dac_data_3 data Output CHANNEL_DATA_WIDTH } if {[get_parameter_value NUM_OF_CHANNELS] > 4} { add_interface fifo_ch_4 conduit end #set_interface_property fifo_ch_4 associatedClock if_dac_clk add_interface_port fifo_ch_4 dac_enable_4 enable Input 1 add_interface_port fifo_ch_4 dac_valid_4 valid Input 1 # add_interface_port fifo_ch_4 upack_valid_4 valid_o Output 1 add_interface_port fifo_ch_4 dac_data_4 data Output CHANNEL_DATA_WIDTH } if {[get_parameter_value NUM_OF_CHANNELS] > 5} { add_interface fifo_ch_5 conduit end #set_interface_property fifo_ch_5 associatedClock if_dac_clk add_interface_port fifo_ch_5 dac_enable_5 enable Input 1 add_interface_port fifo_ch_5 dac_valid_5 valid Input 1 # add_interface_port fifo_ch_5 upack_valid_5 valid_o Output 1 add_interface_port fifo_ch_5 dac_data_5 data Output CHANNEL_DATA_WIDTH } if {[get_parameter_value NUM_OF_CHANNELS] > 6} { add_interface fifo_ch_6 conduit end #set_interface_property fifo_ch_6 associatedClock if_dac_clk add_interface_port fifo_ch_6 dac_enable_6 enable Input 1 add_interface_port fifo_ch_6 dac_valid_6 valid Input 1 # add_interface_port fifo_ch_6 upack_valid_6 valid_o Output 1 add_interface_port fifo_ch_6 dac_data_6 data Output CHANNEL_DATA_WIDTH } if {[get_parameter_value NUM_OF_CHANNELS] > 7} { add_interface fifo_ch_7 conduit end #set_interface_property fifo_ch_7 associatedClock if_dac_clk add_interface_port fifo_ch_7 dac_enable_7 enable Input 1 add_interface_port fifo_ch_7 dac_valid_7 valid Input 1 # add_interface_port fifo_ch_7 upack_valid_7 valid_o Output 1 add_interface_port fifo_ch_7 dac_data_7 data Output CHANNEL_DATA_WIDTH } } bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/library/util_upack/util_upack_ip.tcl000066400000000000000000000034741457144405000305020ustar00rootroot00000000000000# ip source ../scripts/adi_env.tcl source $ad_hdl_dir/library/scripts/adi_ip.tcl adi_ip_create util_upack adi_ip_files util_upack [list \ "util_upack_dmx.v" \ "util_upack_dsf.v" \ "util_upack.v" \ "util_upack_constr.xdc" ] adi_ip_properties_lite util_upack adi_ip_constraints util_upack [list \ "util_upack_constr.xdc" ] set_property driver_value 0 [ipx::get_ports *dac_enable* -of_objects [ipx::current_core]] set_property driver_value 0 [ipx::get_ports *dac_valid* -of_objects [ipx::current_core]] set_property driver_value 0 [ipx::get_ports *dac_data* -of_objects [ipx::current_core]] set_property driver_value 0 [ipx::get_ports *dma_xfer_in* -of_objects [ipx::current_core]] set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.NUM_OF_CHANNELS')) > 1} \ [ipx::get_ports *_1* -of_objects [ipx::current_core]] set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.NUM_OF_CHANNELS')) > 2} \ [ipx::get_ports *_2* -of_objects [ipx::current_core]] set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.NUM_OF_CHANNELS')) > 3} \ [ipx::get_ports *_3* -of_objects [ipx::current_core]] set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.NUM_OF_CHANNELS')) > 4} \ [ipx::get_ports *_4* -of_objects [ipx::current_core]] set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.NUM_OF_CHANNELS')) > 5} \ [ipx::get_ports *_5* -of_objects [ipx::current_core]] set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.NUM_OF_CHANNELS')) > 6} \ [ipx::get_ports *_6* -of_objects [ipx::current_core]] set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.NUM_OF_CHANNELS')) > 7} \ [ipx::get_ports *_7* -of_objects [ipx::current_core]] ipx::remove_all_bus_interface [ipx::current_core] ipx::save_core [ipx::current_core] bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/projects/000077500000000000000000000000001457144405000231635ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/projects/arradio/000077500000000000000000000000001457144405000246045ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/projects/arradio/Makefile000066400000000000000000000013071457144405000262450ustar00rootroot00000000000000#################################################################################### #################################################################################### ## Copyright 2011(c) Analog Devices, Inc. ## Auto-generated, do not modify! #################################################################################### #################################################################################### .PHONY: all clean clean-all all: -make -C c5soc all clean: make -C c5soc clean clean-all: make -C c5soc clean-all #################################################################################### #################################################################################### bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/projects/arradio/c5soc/000077500000000000000000000000001457144405000256205ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/projects/arradio/c5soc/Makefile000066400000000000000000000125511457144405000272640ustar00rootroot00000000000000#################################################################################### #################################################################################### ## Copyright 2011(c) Analog Devices, Inc. ## Auto-generated, do not modify! #################################################################################### #################################################################################### M_DEPS += system_top.v M_DEPS += system_project.tcl M_DEPS += system_constr.sdc M_DEPS += system_bd.qsys M_DEPS += ../common/arradio_bd.qsys M_DEPS += ../../scripts/adi_env.tcl M_DEPS += ../../common/c5soc/c5soc_system_bd.qsys M_DEPS += ../../common/c5soc/c5soc_system_assign.tcl M_DEPS += ../../../library/common/ad_iobuf.v M_DEPS += ../../../library/axi_ad9361/axi_ad9361.v M_DEPS += ../../../library/axi_ad9361/axi_ad9361_alt_lvds_rx.v M_DEPS += ../../../library/axi_ad9361/axi_ad9361_alt_lvds_tx.v M_DEPS += ../../../library/axi_ad9361/axi_ad9361_dev_if_alt.v M_DEPS += ../../../library/axi_ad9361/axi_ad9361_hw.tcl M_DEPS += ../../../library/axi_ad9361/axi_ad9361_rx.v M_DEPS += ../../../library/axi_ad9361/axi_ad9361_rx_channel.v M_DEPS += ../../../library/axi_ad9361/axi_ad9361_rx_pnmon.v M_DEPS += ../../../library/axi_ad9361/axi_ad9361_tdd.v M_DEPS += ../../../library/axi_ad9361/axi_ad9361_tdd_if.v M_DEPS += ../../../library/axi_ad9361/axi_ad9361_tx.v M_DEPS += ../../../library/axi_ad9361/axi_ad9361_tx_channel.v M_DEPS += ../../../library/axi_dmac/2d_transfer.v M_DEPS += ../../../library/axi_dmac/address_generator.v M_DEPS += ../../../library/axi_dmac/axi_dmac.v M_DEPS += ../../../library/axi_dmac/axi_dmac_hw.tcl M_DEPS += ../../../library/axi_dmac/axi_register_slice.v M_DEPS += ../../../library/axi_dmac/data_mover.v M_DEPS += ../../../library/axi_dmac/dest_axi_mm.v M_DEPS += ../../../library/axi_dmac/dest_axi_stream.v M_DEPS += ../../../library/axi_dmac/dest_fifo_inf.v M_DEPS += ../../../library/axi_dmac/inc_id.h M_DEPS += ../../../library/axi_dmac/request_arb.v M_DEPS += ../../../library/axi_dmac/request_generator.v M_DEPS += ../../../library/axi_dmac/resp.h M_DEPS += ../../../library/axi_dmac/response_generator.v M_DEPS += ../../../library/axi_dmac/response_handler.v M_DEPS += ../../../library/axi_dmac/splitter.v M_DEPS += ../../../library/axi_dmac/src_axi_mm.v M_DEPS += ../../../library/axi_dmac/src_axi_stream.v M_DEPS += ../../../library/axi_dmac/src_fifo_inf.v M_DEPS += ../../../library/common/ad_addsub.v M_DEPS += ../../../library/common/ad_datafmt.v M_DEPS += ../../../library/common/ad_dcfilter.v M_DEPS += ../../../library/common/ad_dds.v M_DEPS += ../../../library/common/ad_dds_1.v M_DEPS += ../../../library/common/ad_dds_sine.v M_DEPS += ../../../library/common/ad_iqcor.v M_DEPS += ../../../library/common/ad_mul.v M_DEPS += ../../../library/common/ad_pnmon.v M_DEPS += ../../../library/common/ad_rst.v M_DEPS += ../../../library/common/ad_tdd_control.v M_DEPS += ../../../library/common/altera/DSP48E1.v M_DEPS += ../../../library/common/altera/MULT_MACRO.v M_DEPS += ../../../library/common/altera/ad_lvds_clk.v M_DEPS += ../../../library/common/altera/ad_lvds_in.v M_DEPS += ../../../library/common/altera/ad_lvds_out.v M_DEPS += ../../../library/common/sync_bits.v M_DEPS += ../../../library/common/sync_gray.v M_DEPS += ../../../library/common/up_adc_channel.v M_DEPS += ../../../library/common/up_adc_common.v M_DEPS += ../../../library/common/up_axi.v M_DEPS += ../../../library/common/up_clock_mon.v M_DEPS += ../../../library/common/up_dac_channel.v M_DEPS += ../../../library/common/up_dac_common.v M_DEPS += ../../../library/common/up_delay_cntrl.v M_DEPS += ../../../library/common/up_tdd_cntrl.v M_DEPS += ../../../library/common/up_xfer_cntrl.v M_DEPS += ../../../library/common/up_xfer_status.v M_DEPS += ../../../library/util_axis_fifo/address_gray.v M_DEPS += ../../../library/util_axis_fifo/address_gray_pipelined.v M_DEPS += ../../../library/util_axis_fifo/address_sync.v M_DEPS += ../../../library/util_axis_fifo/util_axis_fifo.v M_DEPS += ../../../library/util_axis_resize/util_axis_resize.v M_DEPS += ../../../library/util_cpack/util_cpack.v M_DEPS += ../../../library/util_cpack/util_cpack_dsf.v M_DEPS += ../../../library/util_cpack/util_cpack_hw.tcl M_DEPS += ../../../library/util_cpack/util_cpack_mux.v M_DEPS += ../../../library/util_upack/util_upack.v M_DEPS += ../../../library/util_upack/util_upack_dmx.v M_DEPS += ../../../library/util_upack/util_upack_dsf.v M_DEPS += ../../../library/util_upack/util_upack_hw.tcl M_ALTERA := quartus_sh --64bit -t M_FLIST += *.log M_FLIST += *_INFO.txt M_FLIST += *_dump.txt M_FLIST += db M_FLIST += *.asm.rpt M_FLIST += *.done M_FLIST += *.eda.rpt M_FLIST += *.fit.* M_FLIST += *.map.* M_FLIST += *.sta.* M_FLIST += *.qsf M_FLIST += *.qpf M_FLIST += *.qws M_FLIST += *.sof M_FLIST += *.cdf M_FLIST += *.sld M_FLIST += *.qdf M_FLIST += hc_output M_FLIST += system_bd M_FLIST += hps_isw_handoff M_FLIST += hps_sdram_*.csv M_FLIST += *ddr3_*.csv M_FLIST += incremental_db M_FLIST += reconfig_mif M_FLIST += *.sopcinfo M_FLIST += *.jdi M_FLIST += *.pin .PHONY: all clean clean-all all: arradio_c5soc.sof clean:clean-all clean-all: rm -rf $(M_FLIST) arradio_c5soc.sof: $(M_DEPS) rm -rf $(M_FLIST) $(M_ALTERA) system_project.tcl >> arradio_c5soc_quartus.log 2>&1 #################################################################################### #################################################################################### bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/projects/arradio/c5soc/system_bd.qsys000066400000000000000000000315141457144405000305360ustar00rootroot00000000000000 ]]> ]]> $${FILENAME}_arradio ]]> bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/projects/arradio/c5soc/system_constr.sdc000066400000000000000000000070211457144405000312270ustar00rootroot00000000000000 create_clock -period "20.000 ns" -name clk_50m [get_ports {sys_clk}] create_clock -period "4.000 ns" -name clk_250m [get_ports {rx_clk_in}] create_clock -period "12.500 ns" -name clk_80m [get_pins {i_system_bd|c5soc|sys_hps|fpga_interfaces|clocks_resets|h2f_user0_clk}] derive_pll_clocks derive_clock_uncertainty set clk_125m [get_clocks {i_system_bd|arradio|axi_ad9361|i_dev_if|i_rx|i_altlvds_rx|auto_generated|pll_sclk~PLL_OUTPUT_COUNTER|divclk}] set clk_vga [get_clocks {i_system_bd|c5soc|vga_pll|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] set_false_path -from clk_50m -to clk_80m set_false_path -from clk_50m -to $clk_125m set_false_path -from clk_80m -to clk_50m set_false_path -from clk_80m -to $clk_125m set_false_path -from $clk_125m -to clk_50m set_false_path -from $clk_125m -to clk_80m set_false_path -from clk_50m -to $clk_vga set_false_path -from $clk_vga -to clk_50m create_clock -period 4.0 -name v_rx_clk set_input_delay -clock {v_rx_clk} -max 1.2 [get_ports {rx_frame_in}] set_input_delay -clock {v_rx_clk} -max 1.2 [get_ports {rx_data_in[0]}] set_input_delay -clock {v_rx_clk} -max 1.2 [get_ports {rx_data_in[1]}] set_input_delay -clock {v_rx_clk} -max 1.2 [get_ports {rx_data_in[2]}] set_input_delay -clock {v_rx_clk} -max 1.2 [get_ports {rx_data_in[3]}] set_input_delay -clock {v_rx_clk} -max 1.2 [get_ports {rx_data_in[4]}] set_input_delay -clock {v_rx_clk} -max 1.2 [get_ports {rx_data_in[5]}] set_input_delay -clock {v_rx_clk} -min 0.2 [get_ports {rx_frame_in}] -clock_fall -add_delay set_input_delay -clock {v_rx_clk} -min 0.2 [get_ports {rx_data_in[0]}] -clock_fall -add_delay set_input_delay -clock {v_rx_clk} -min 0.2 [get_ports {rx_data_in[1]}] -clock_fall -add_delay set_input_delay -clock {v_rx_clk} -min 0.2 [get_ports {rx_data_in[2]}] -clock_fall -add_delay set_input_delay -clock {v_rx_clk} -min 0.2 [get_ports {rx_data_in[3]}] -clock_fall -add_delay set_input_delay -clock {v_rx_clk} -min 0.2 [get_ports {rx_data_in[4]}] -clock_fall -add_delay set_input_delay -clock {v_rx_clk} -min 0.2 [get_ports {rx_data_in[5]}] -clock_fall -add_delay create_generated_clock -source [get_ports {rx_clk_in}] -name v_tx_clk [get_ports {tx_clk_out}] -phase 90 set_false_path -from clk_250m -to v_tx_clk set_false_path -from v_tx_clk -to clk_250m set_output_delay -clock {v_tx_clk} -max 1.2 [get_ports {tx_frame_out}] set_output_delay -clock {v_tx_clk} -max 1.2 [get_ports {tx_data_out[0]}] set_output_delay -clock {v_tx_clk} -max 1.2 [get_ports {tx_data_out[1]}] set_output_delay -clock {v_tx_clk} -max 1.2 [get_ports {tx_data_out[2]}] set_output_delay -clock {v_tx_clk} -max 1.2 [get_ports {tx_data_out[3]}] set_output_delay -clock {v_tx_clk} -max 1.2 [get_ports {tx_data_out[4]}] set_output_delay -clock {v_tx_clk} -max 1.2 [get_ports {tx_data_out[5]}] set_output_delay -clock {v_tx_clk} -min 0.2 [get_ports {tx_frame_out}] -clock_fall -add_delay set_output_delay -clock {v_tx_clk} -min 0.2 [get_ports {tx_data_out[0]}] -clock_fall -add_delay set_output_delay -clock {v_tx_clk} -min 0.2 [get_ports {tx_data_out[1]}] -clock_fall -add_delay set_output_delay -clock {v_tx_clk} -min 0.2 [get_ports {tx_data_out[2]}] -clock_fall -add_delay set_output_delay -clock {v_tx_clk} -min 0.2 [get_ports {tx_data_out[3]}] -clock_fall -add_delay set_output_delay -clock {v_tx_clk} -min 0.2 [get_ports {tx_data_out[4]}] -clock_fall -add_delay set_output_delay -clock {v_tx_clk} -min 0.2 [get_ports {tx_data_out[5]}] -clock_fall -add_delay bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/projects/arradio/c5soc/system_project.tcl000066400000000000000000000126341457144405000314040ustar00rootroot00000000000000 load_package flow source ../../scripts/adi_env.tcl project_new arradio_c5soc -overwrite source "../../common/c5soc/c5soc_system_assign.tcl" set_global_assignment -name IP_SEARCH_PATHS "../common/;../../common/**/*;../../../library/**/*" set_user_option -name USER_IP_SEARCH_PATHS "../common/;../../common/**/*;../../../library/**/*" set_global_assignment -name QSYS_FILE system_bd.qsys set_global_assignment -name VERILOG_FILE "../../../library/common/ad_iobuf.v" set_global_assignment -name VERILOG_FILE system_top.v set_global_assignment -name SDC_FILE system_constr.sdc set_global_assignment -name TOP_LEVEL_ENTITY system_top set_instance_assignment -name IO_STANDARD LVDS -to rx_clk_in set_instance_assignment -name IO_STANDARD LVDS -to rx_frame_in set_instance_assignment -name IO_STANDARD LVDS -to rx_data_in[0] set_instance_assignment -name IO_STANDARD LVDS -to rx_data_in[1] set_instance_assignment -name IO_STANDARD LVDS -to rx_data_in[2] set_instance_assignment -name IO_STANDARD LVDS -to rx_data_in[3] set_instance_assignment -name IO_STANDARD LVDS -to rx_data_in[4] set_instance_assignment -name IO_STANDARD LVDS -to rx_data_in[5] set_instance_assignment -name IO_STANDARD LVDS -to tx_clk_out set_instance_assignment -name IO_STANDARD LVDS -to tx_frame_out set_instance_assignment -name IO_STANDARD LVDS -to tx_data_out[0] set_instance_assignment -name IO_STANDARD LVDS -to tx_data_out[1] set_instance_assignment -name IO_STANDARD LVDS -to tx_data_out[2] set_instance_assignment -name IO_STANDARD LVDS -to tx_data_out[3] set_instance_assignment -name IO_STANDARD LVDS -to tx_data_out[4] set_instance_assignment -name IO_STANDARD LVDS -to tx_data_out[5] set_instance_assignment -name INPUT_TERMINATION DIFFERENTIAL -to rx_clk_in set_instance_assignment -name INPUT_TERMINATION DIFFERENTIAL -to rx_frame_in set_instance_assignment -name INPUT_TERMINATION DIFFERENTIAL -to rx_data_in[0] set_instance_assignment -name INPUT_TERMINATION DIFFERENTIAL -to rx_data_in[1] set_instance_assignment -name INPUT_TERMINATION DIFFERENTIAL -to rx_data_in[2] set_instance_assignment -name INPUT_TERMINATION DIFFERENTIAL -to rx_data_in[3] set_instance_assignment -name INPUT_TERMINATION DIFFERENTIAL -to rx_data_in[4] set_instance_assignment -name INPUT_TERMINATION DIFFERENTIAL -to rx_data_in[5] set_location_assignment PIN_H15 -to rx_clk_in set_location_assignment PIN_G15 -to "rx_clk_in(n)" set_location_assignment PIN_F13 -to rx_frame_in set_location_assignment PIN_E13 -to "rx_frame_in(n)" set_location_assignment PIN_D11 -to rx_data_in[0] set_location_assignment PIN_D10 -to "rx_data_in[0](n)" set_location_assignment PIN_E12 -to rx_data_in[1] set_location_assignment PIN_D12 -to "rx_data_in[1](n)" set_location_assignment PIN_E9 -to rx_data_in[2] set_location_assignment PIN_D9 -to "rx_data_in[2](n)" set_location_assignment PIN_B6 -to rx_data_in[3] set_location_assignment PIN_B5 -to "rx_data_in[3](n)" set_location_assignment PIN_F11 -to rx_data_in[4] set_location_assignment PIN_E11 -to "rx_data_in[4](n)" set_location_assignment PIN_C13 -to rx_data_in[5] set_location_assignment PIN_B12 -to "rx_data_in[5](n)" set_location_assignment PIN_A11 -to tx_clk_out set_location_assignment PIN_A10 -to "tx_clk_out(n)" set_location_assignment PIN_E3 -to tx_frame_out set_location_assignment PIN_E2 -to "tx_frame_out(n)" set_location_assignment PIN_E1 -to tx_data_out[0] set_location_assignment PIN_D1 -to "tx_data_out[0](n)" set_location_assignment PIN_D2 -to tx_data_out[1] set_location_assignment PIN_C2 -to "tx_data_out[1](n)" set_location_assignment PIN_C3 -to tx_data_out[2] set_location_assignment PIN_B3 -to "tx_data_out[2](n)" set_location_assignment PIN_B2 -to tx_data_out[3] set_location_assignment PIN_B1 -to "tx_data_out[3](n)" set_location_assignment PIN_A4 -to tx_data_out[4] set_location_assignment PIN_A3 -to "tx_data_out[4](n)" set_location_assignment PIN_E4 -to tx_data_out[5] set_location_assignment PIN_D4 -to "tx_data_out[5](n)" set_instance_assignment -name IO_STANDARD "2.5 V" -to ad9361_resetb set_instance_assignment -name IO_STANDARD "2.5 V" -to ad9361_en_agc set_instance_assignment -name IO_STANDARD "2.5 V" -to ad9361_sync set_instance_assignment -name IO_STANDARD "2.5 V" -to ad9361_enable set_instance_assignment -name IO_STANDARD "2.5 V" -to ad9361_txnrx set_instance_assignment -name IO_STANDARD "2.5 V" -to spi_csn set_instance_assignment -name IO_STANDARD "2.5 V" -to spi_clk set_instance_assignment -name IO_STANDARD "2.5 V" -to spi_mosi set_instance_assignment -name IO_STANDARD "2.5 V" -to spi_miso set_location_assignment PIN_C4 -to ad9361_resetb set_location_assignment PIN_C5 -to ad9361_en_agc set_location_assignment PIN_D5 -to ad9361_sync set_location_assignment PIN_B11 -to ad9361_enable set_location_assignment PIN_C12 -to ad9361_txnrx set_location_assignment PIN_A8 -to spi_csn set_location_assignment PIN_H12 -to spi_clk set_location_assignment PIN_H13 -to spi_mosi set_location_assignment PIN_G11 -to spi_miso set_instance_assignment -name IO_STANDARD "2.5 V" -to scl set_instance_assignment -name IO_STANDARD "2.5 V" -to sda set_instance_assignment -name IO_STANDARD "2.5 V" -to ga0 set_instance_assignment -name IO_STANDARD "2.5 V" -to ga1 set_location_assignment PIN_F15 -to scl set_location_assignment PIN_G13 -to sda set_location_assignment PIN_C7 -to ga0 set_location_assignment PIN_H14 -to ga1 set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to scl set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to sda execute_flow -compile bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/projects/arradio/c5soc/system_timing.tcl000066400000000000000000000005441457144405000312220ustar00rootroot00000000000000 set worst_path [get_timing_paths -npaths 1 -setup] foreach_in_collection path $worst_path { set slack [get_path_info $path -slack] } if {$slack > 0} { set worst_path [get_timing_paths -npaths 1 -hold] foreach_in_collection path $worst_path { set slack [get_path_info $path -slack] } } if {$slack < 0} { use_this_invalid_command_to_crash } bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/projects/arradio/c5soc/system_top.v000066400000000000000000000346321457144405000302250ustar00rootroot00000000000000// *************************************************************************** // *************************************************************************** // Copyright 2011(c) Analog Devices, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // - Neither the name of Analog Devices, Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // - The use of this software may or may not infringe the patent rights // of one or more patent holders. This license does not release you // from the requirement that you obtain separate licenses from these // patent holders to use this software. // - Use of the software either in source or binary form, must be run // on or directly connected to an Analog Devices Inc. component. // // THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. // // IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY // RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps module system_top ( // clock and resets sys_clk, // hps ddr3_a, ddr3_ba, ddr3_ck_p, ddr3_ck_n, ddr3_cke, ddr3_cs_n, ddr3_ras_n, ddr3_cas_n, ddr3_we_n, ddr3_reset_n, ddr3_dq, ddr3_dqs_p, ddr3_dqs_n, ddr3_odt, ddr3_dm, ddr3_oct_rzqin, eth1_tx_clk, eth1_tx_ctl, eth1_txd0, eth1_txd1, eth1_txd2, eth1_txd3, eth1_rx_clk, eth1_rx_ctl, eth1_rxd0, eth1_rxd1, eth1_rxd2, eth1_rxd3, eth1_mdc, eth1_mdio, qspi_ss0, qspi_clk, qspi_io0, qspi_io1, qspi_io2, qspi_io3, sdio_clk, sdio_cmd, sdio_d0, sdio_d1, sdio_d2, sdio_d3, usb1_clk, usb1_stp, usb1_dir, usb1_nxt, usb1_d0, usb1_d1, usb1_d2, usb1_d3, usb1_d4, usb1_d5, usb1_d6, usb1_d7, spim1_ss0, spim1_clk, spim1_mosi, spim1_miso, uart0_rx, uart0_tx, // board gpio led, push_buttons, dip_switches, // display vga_clk, vga_blank_n, vga_sync_n, vga_hs, vga_vs, vga_r, vga_g, vga_b, // data interface rx_clk_in, rx_frame_in, rx_data_in, tx_clk_out, tx_frame_out, tx_data_out, // gpio interface ad9361_resetb, ad9361_en_agc, ad9361_sync, ad9361_enable, ad9361_txnrx, // iic interface scl, sda, ga0, ga1, // spi spi_csn, spi_clk, spi_mosi, spi_miso); // clock and resets input sys_clk; // hps output [ 14:0] ddr3_a; output [ 2:0] ddr3_ba; output ddr3_ck_p; output ddr3_ck_n; output ddr3_cke; output ddr3_cs_n; output ddr3_ras_n; output ddr3_cas_n; output ddr3_we_n; output ddr3_reset_n; inout [ 31:0] ddr3_dq; inout [ 3:0] ddr3_dqs_p; inout [ 3:0] ddr3_dqs_n; output ddr3_odt; output [ 3:0] ddr3_dm; input ddr3_oct_rzqin; output eth1_tx_clk; output eth1_tx_ctl; output eth1_txd0; output eth1_txd1; output eth1_txd2; output eth1_txd3; input eth1_rx_clk; input eth1_rx_ctl; input eth1_rxd0; input eth1_rxd1; input eth1_rxd2; input eth1_rxd3; output eth1_mdc; inout eth1_mdio; output qspi_ss0; output qspi_clk; inout qspi_io0; inout qspi_io1; inout qspi_io2; inout qspi_io3; output sdio_clk; inout sdio_cmd; inout sdio_d0; inout sdio_d1; inout sdio_d2; inout sdio_d3; input usb1_clk; output usb1_stp; input usb1_dir; input usb1_nxt; inout usb1_d0; inout usb1_d1; inout usb1_d2; inout usb1_d3; inout usb1_d4; inout usb1_d5; inout usb1_d6; inout usb1_d7; output spim1_ss0; output spim1_clk; output spim1_mosi; input spim1_miso; input uart0_rx; output uart0_tx; // board gpio output [ 3:0] led; input [ 3:0] push_buttons; input [ 3:0] dip_switches; // display output vga_clk; output vga_blank_n; output vga_sync_n; output vga_hs; output vga_vs; output [ 7:0] vga_r; output [ 7:0] vga_g; output [ 7:0] vga_b; // data interface input rx_clk_in; input rx_frame_in; input [ 5:0] rx_data_in; output tx_clk_out; output tx_frame_out; output [ 5:0] tx_data_out; // gpio interface output ad9361_resetb; output ad9361_en_agc; output ad9361_sync; output ad9361_enable; output ad9361_txnrx; // iic interface inout scl; inout sda; output ga0; output ga1; // spi interface output spi_csn; output spi_clk; output spi_mosi; input spi_miso; // internal clocks and resets wire [ 31:0] gpio_open; wire sys_resetn; wire clk; // internal signals wire adc_enable_i0; wire adc_enable_q0; wire adc_enable_i1; wire adc_enable_q1; wire adc_valid_i0; wire adc_valid_q0; wire adc_valid_i1; wire adc_valid_q1; wire adc_dwr; wire adc_dsync; wire [ 15:0] adc_chan_i0; wire [ 15:0] adc_chan_q0; wire [ 15:0] adc_chan_i1; wire [ 15:0] adc_chan_q1; wire [ 63:0] adc_ddata; wire adc_dovf; wire dac_enable_i0; wire dac_enable_q0; wire dac_enable_i1; wire dac_enable_q1; wire dac_valid_i0; wire dac_valid_q0; wire dac_valid_i1; wire dac_valid_q1; wire [ 15:0] dac_data_i0; wire [ 15:0] dac_data_q0; wire [ 15:0] dac_data_i1; wire [ 15:0] dac_data_q1; wire [ 63:0] dac_ddata; wire dac_dunf; wire dac_rd_en; wire dac_fifo_valid; wire vga_pixel_clock; wire vid_v_sync; wire vid_h_sync; wire [7:0] vid_r,vid_g,vid_b; wire i2c0_out_data; wire i2c0_sda; wire i2c0_out_clk; wire i2c0_scl_in_clk; // defaults assign vga_clk = vga_pixel_clock; assign vga_blank_n = 1'b1; assign vga_sync_n = 1'b0; assign vga_hs = vid_h_sync; assign vga_vs = vid_v_sync; assign {vga_b,vga_g,vga_r} = {vid_b,vid_g,vid_r}; assign ga0 = 1'b0; assign ga1 = 1'b0; ALT_IOBUF scl_iobuf (.i(1'b0), .oe(i2c0_out_clk), .o(i2c0_scl_in_clk), .io(scl)); // ALT_IOBUF sda_iobuf (.i(1'b0), .oe(i2c0_out_data), .o(i2c0_sda), .io(sda)); // // instantiations sld_signaltap #( .sld_advanced_trigger_entity ("basic,1,"), .sld_data_bits (64), .sld_data_bit_cntr_bits (7), .sld_enable_advanced_trigger (0), .sld_mem_address_bits (10), .sld_node_crc_bits (32), .sld_node_crc_hiword (13323), .sld_node_crc_loword (24084), .sld_node_info (1076736), .sld_ram_block_type ("AUTO"), .sld_sample_depth (1024), .sld_storage_qualifier_gap_record (0), .sld_storage_qualifier_mode ("OFF"), .sld_trigger_bits (1), .sld_trigger_in_enabled (0), .sld_trigger_level (1), .sld_trigger_level_pipeline (1)) i_ila_adc ( .acq_clk (clk), .acq_data_in (adc_ddata), .acq_trigger_in (adc_valid_i0)); system_bd i_system_bd ( .clk_clk (sys_clk), .reset_reset_n (sys_resetn), .sys_hps_memory_mem_a (ddr3_a), .sys_hps_memory_mem_ba (ddr3_ba), .sys_hps_memory_mem_ck (ddr3_ck_p), .sys_hps_memory_mem_ck_n (ddr3_ck_n), .sys_hps_memory_mem_cke (ddr3_cke), .sys_hps_memory_mem_cs_n (ddr3_cs_n), .sys_hps_memory_mem_ras_n (ddr3_ras_n), .sys_hps_memory_mem_cas_n (ddr3_cas_n), .sys_hps_memory_mem_we_n (ddr3_we_n), .sys_hps_memory_mem_reset_n (ddr3_reset_n), .sys_hps_memory_mem_dq (ddr3_dq), .sys_hps_memory_mem_dqs (ddr3_dqs_p), .sys_hps_memory_mem_dqs_n (ddr3_dqs_n), .sys_hps_memory_mem_odt (ddr3_odt), .sys_hps_memory_mem_dm (ddr3_dm), .sys_hps_memory_oct_rzqin (ddr3_oct_rzqin), .sys_hps_hps_io_hps_io_emac1_inst_TX_CLK (eth1_tx_clk), .sys_hps_hps_io_hps_io_emac1_inst_TXD0 (eth1_txd0), .sys_hps_hps_io_hps_io_emac1_inst_TXD1 (eth1_txd1), .sys_hps_hps_io_hps_io_emac1_inst_TXD2 (eth1_txd2), .sys_hps_hps_io_hps_io_emac1_inst_TXD3 (eth1_txd3), .sys_hps_hps_io_hps_io_emac1_inst_RXD0 (eth1_rxd0), .sys_hps_hps_io_hps_io_emac1_inst_MDIO (eth1_mdio), .sys_hps_hps_io_hps_io_emac1_inst_MDC (eth1_mdc), .sys_hps_hps_io_hps_io_emac1_inst_RX_CTL (eth1_rx_ctl), .sys_hps_hps_io_hps_io_emac1_inst_TX_CTL (eth1_tx_ctl), .sys_hps_hps_io_hps_io_emac1_inst_RX_CLK (eth1_rx_clk), .sys_hps_hps_io_hps_io_emac1_inst_RXD1 (eth1_rxd1), .sys_hps_hps_io_hps_io_emac1_inst_RXD2 (eth1_rxd2), .sys_hps_hps_io_hps_io_emac1_inst_RXD3 (eth1_rxd3), .sys_hps_hps_io_hps_io_qspi_inst_IO0 (qspi_io0), .sys_hps_hps_io_hps_io_qspi_inst_IO1 (qspi_io1), .sys_hps_hps_io_hps_io_qspi_inst_IO2 (qspi_io2), .sys_hps_hps_io_hps_io_qspi_inst_IO3 (qspi_io3), .sys_hps_hps_io_hps_io_qspi_inst_SS0 (qspi_ss0), .sys_hps_hps_io_hps_io_qspi_inst_CLK (qspi_clk), .sys_hps_hps_io_hps_io_sdio_inst_CMD (sdio_cmd), .sys_hps_hps_io_hps_io_sdio_inst_D0 (sdio_d0), .sys_hps_hps_io_hps_io_sdio_inst_D1 (sdio_d1), .sys_hps_hps_io_hps_io_sdio_inst_CLK (sdio_clk), .sys_hps_hps_io_hps_io_sdio_inst_D2 (sdio_d2), .sys_hps_hps_io_hps_io_sdio_inst_D3 (sdio_d3), .sys_hps_hps_io_hps_io_usb1_inst_D0 (usb1_d0), .sys_hps_hps_io_hps_io_usb1_inst_D1 (usb1_d1), .sys_hps_hps_io_hps_io_usb1_inst_D2 (usb1_d2), .sys_hps_hps_io_hps_io_usb1_inst_D3 (usb1_d3), .sys_hps_hps_io_hps_io_usb1_inst_D4 (usb1_d4), .sys_hps_hps_io_hps_io_usb1_inst_D5 (usb1_d5), .sys_hps_hps_io_hps_io_usb1_inst_D6 (usb1_d6), .sys_hps_hps_io_hps_io_usb1_inst_D7 (usb1_d7), .sys_hps_hps_io_hps_io_usb1_inst_CLK (usb1_clk), .sys_hps_hps_io_hps_io_usb1_inst_STP (usb1_stp), .sys_hps_hps_io_hps_io_usb1_inst_DIR (usb1_dir), .sys_hps_hps_io_hps_io_usb1_inst_NXT (usb1_nxt), .sys_hps_hps_io_hps_io_spim1_inst_CLK (spim1_clk), .sys_hps_hps_io_hps_io_spim1_inst_MOSI (spim1_mosi), .sys_hps_hps_io_hps_io_spim1_inst_MISO (spim1_miso), .sys_hps_hps_io_hps_io_spim1_inst_SS0 (spim1_ss0), .sys_hps_hps_io_hps_io_uart0_inst_RX (uart0_rx), .sys_hps_hps_io_hps_io_uart0_inst_TX (uart0_tx), .sys_gpio_external_connection_in_port ({16'd0, 4'd0, led, push_buttons, dip_switches}), .sys_gpio_external_connection_out_port ({gpio_open[31:16], gpio_open[15:12], led, gpio_open[7:0]}), .sys_hps_h2f_reset_reset_n (sys_resetn), .sys_hps_spim0_txd (), .sys_hps_spim0_rxd (), .sys_hps_spim0_ss_in_n (1'b1), .sys_hps_spim0_ssi_oe_n (), .sys_hps_spim0_ss_0_n (), .sys_hps_spim0_ss_1_n (), .sys_hps_spim0_ss_2_n (), .sys_hps_spim0_ss_3_n (), .sys_hps_spim0_sclk_out_clk (), .axi_ad9361_device_clock_clk (clk), .axi_ad9361_device_if_rx_clk_in_p (rx_clk_in), .axi_ad9361_device_if_rx_clk_in_n (1'b0), .axi_ad9361_device_if_rx_frame_in_p (rx_frame_in), .axi_ad9361_device_if_rx_frame_in_n (1'b0), .axi_ad9361_device_if_rx_data_in_p (rx_data_in), .axi_ad9361_device_if_rx_data_in_n (6'd0), .axi_ad9361_device_if_tx_clk_out_p (tx_clk_out), .axi_ad9361_device_if_tx_clk_out_n (), .axi_ad9361_device_if_tx_frame_out_p (tx_frame_out), .axi_ad9361_device_if_tx_frame_out_n (), .axi_ad9361_device_if_tx_data_out_p (tx_data_out), .axi_ad9361_device_if_tx_data_out_n (), .axi_ad9361_l_clk_clk (clk), .spi_ad9361_external_MISO (spi_miso), .spi_ad9361_external_MOSI (spi_mosi), .spi_ad9361_external_SCLK (spi_clk), .spi_ad9361_external_SS_n (spi_csn), .vga_pixel_clock_bridge_out_clk_clk (vga_pixel_clock), .vga_clock_video_output_clocked_video_vid_clk (vga_pixel_clock), .vga_clock_video_output_clocked_video_vid_data ({vid_r,vid_g,vid_b}), .vga_clock_video_output_clocked_video_underflow (), .vga_clock_video_output_clocked_video_vid_datavalid (), .vga_clock_video_output_clocked_video_vid_v_sync (vid_v_sync), .vga_clock_video_output_clocked_video_vid_h_sync (vid_h_sync), .vga_clock_video_output_clocked_video_vid_f (), .vga_clock_video_output_clocked_video_vid_h (), .vga_clock_video_output_clocked_video_vid_v (), .sys_hps_i2c0_out_data(i2c0_out_data), .sys_hps_i2c0_sda(i2c0_sda), .sys_hps_i2c0_clk_clk(i2c0_out_clk), .sys_hps_i2c0_scl_in_clk(i2c0_scl_in_clk), .gpio_external_connection_export ({ad9361_resetb, ad9361_en_agc, ad9361_sync, ad9361_enable, ad9361_txnrx}) ); endmodule // *************************************************************************** // *************************************************************************** bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/projects/arradio/common/000077500000000000000000000000001457144405000260745ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/hdl/projects/arradio/common/arradio_bd.qsys000077500000000000000000000516361457144405000311210ustar00rootroot00000000000000 bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/no_OS/000077500000000000000000000000001457144405000216005ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/no_OS/CMakeLists.txt000066400000000000000000000150241457144405000243420ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.5) project(ad936x C) message(STATUS "libad936x: Configuring build...") option(NIOS_HAS_HARDWARE_MULTIPLY_DIVIDE "Use hardware multiply/divide in Nios II/f" OFF ) option(BUILD_AD936X_PRINTF "Enable console printf output for the AD936x library." OFF ) option(BUILD_AD936X_PRINTF_DEBUG "Enable debugging output for the AD936x library." OFF ) ################################################################################ # Paths ################################################################################ # Repository root set(LIBAD936X_BLADERF_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/../../../../..") # Source directory for local files (patches, platform_bladerf2, etc) set(LIBAD936X_LOCAL_DIR "${LIBAD936X_BLADERF_ROOT}/thirdparty/analogdevicesinc/no-OS_local") # libbladeRF relative path set(LIBAD936X_LIBBLADERF_DIR "${LIBAD936X_BLADERF_ROOT}/host/libraries/libbladeRF") # fpga_common relative path set(LIBAD936X_FPGACOMMON_DIR "${LIBAD936X_BLADERF_ROOT}/fpga_common") # Patch files live here set(LIBAD936X_PATCH_DIR "${LIBAD936X_LOCAL_DIR}/patches") # Platform files set(LIBAD936X_PLATFORM_DIR "${LIBAD936X_LOCAL_DIR}/platform_bladerf2_headless") # Upstream source (clean) set(LIBAD936X_UPSTREAM_DIR "${LIBAD936X_LOCAL_DIR}/../no-OS/ad9361/sw") # Upstream source (patched) set(LIBAD936X_UPSTREAM_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}") # Use CMake modules from the host tree set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${LIBAD936X_BLADERF_ROOT}/host/cmake/modules/") # Ensure the toolchain file got loaded... if(NOT CMAKE_SYSTEM_PROCESSOR STREQUAL "nios2") message(FATAL_ERROR "CMAKE_SYSTEM_PROCESSOR is ${CMAKE_SYSTEM_PROCESSOR}, expected nios2") endif() ################################################################################ # Configure build ################################################################################ add_library(ad936x STATIC ${LIBAD936X_UPSTREAM_BUILD_DIR}/ad9361.c ${LIBAD936X_UPSTREAM_BUILD_DIR}/ad9361_api.c ${LIBAD936X_UPSTREAM_BUILD_DIR}/ad9361_conv.c ${LIBAD936X_UPSTREAM_BUILD_DIR}/util.c ${LIBAD936X_PLATFORM_DIR}/platform.c ${LIBAD936X_PLATFORM_DIR}/adc_core.c ${LIBAD936X_PLATFORM_DIR}/dac_core.c ${LIBAD936X_FPGACOMMON_DIR}/src/ad936x_params.c ) target_compile_options(ad936x PRIVATE -DBLADERF_NIOS_BUILD -DNUAND_MODIFICATIONS -Wall -Os ) if(NOT NIOS_HAS_HARDWARE_MULTIPLY_DIVIDE) message(STATUS "libad936x: building with software mul/mulx/div operations") target_compile_options(ad936x PRIVATE -mno-hw-div -mno-hw-mul -mno-hw-mulx ) endif(NOT NIOS_HAS_HARDWARE_MULTIPLY_DIVIDE) if(NOT MSVC) target_compile_options(ad936x PRIVATE -ffunction-sections -fdata-sections -Wno-unused-but-set-variable -std=gnu11 ) endif(NOT MSVC) # Main Nios app build uses -fshort-enums, so we need to use it here too target_compile_options(ad936x PRIVATE -fshort-enums ) if(BUILD_AD936X_PRINTF OR BUILD_AD936X_PRINTF_DEBUG) message(STATUS "libad936x: Enabling console output") target_compile_options(ad936x PRIVATE -DHAVE_VERBOSE_MESSAGES) endif(BUILD_AD936X_PRINTF OR BUILD_AD936X_PRINTF_DEBUG) if(BUILD_AD936X_PRINTF_DEBUG) message(STATUS "libad936x: Enabling full debugging output") target_compile_options(ad936x PRIVATE -DHAVE_DEBUG_MESSAGES) endif(BUILD_AD936X_PRINTF_DEBUG) target_include_directories(ad936x PUBLIC ${CMAKE_SOURCE_DIR}/include ${LIBAD936X_PLATFORM_DIR} ${LIBAD936X_UPSTREAM_BUILD_DIR} ${LIBAD936X_LIBBLADERF_DIR}/src ${LIBAD936X_LIBBLADERF_DIR}/include ${LIBAD936X_BLADERF_ROOT}/host/common/include ${LIBAD936X_BLADERF_ROOT}/firmware_common ${LIBAD936X_BLADERF_ROOT}/hdl/fpga/platforms/common/bladerf/software/bladeRF_nios/src ${LIBAD936X_BLADERF_ROOT}/hdl/fpga/platforms/bladerf-micro/software/bladeRF_nios/src ${LIBAD936X_BLADERF_ROOT}/fpga_common/include ${CMAKE_BINARY_DIR}/../bladeRF_nios_bsp ${CMAKE_BINARY_DIR}/../bladeRF_nios_bsp/drivers/inc ${CMAKE_BINARY_DIR}/../bladeRF_nios_bsp/HAL/inc ) ################################################################################ # Dependencies ################################################################################ # If the submodule hasn't been initialized/updated, do so if(NOT IS_DIRECTORY ${LIBAD936X_UPSTREAM_DIR}) message(STATUS "libad936x: Attempting to initialize missing submodule") find_package(Git QUIET) if(Git_FOUND) execute_process( COMMAND ${Git_EXECUTABLE} submodule init WORKING_DIRECTORY ${LIBAD936X_BLADERF_ROOT} ) execute_process( COMMAND ${Git_EXECUTABLE} submodule update WORKING_DIRECTORY ${LIBAD936X_BLADERF_ROOT} ) endif() endif() # Then, re-check for submodule... if(NOT IS_DIRECTORY ${LIBAD936X_UPSTREAM_DIR}) message(FATAL_ERROR "Directory ${LIBAD936X_UPSTREAM_DIR} was not found. " "It appears that this submodule has not been properly " "initialized. Please run 'git submodule init' and " "'git submodule update', and then re-run cmake.") endif() ################################################################################ # Copy files and apply patches ################################################################################ # Copy needed files from the upstream repository set(LIBAD936X_UPSTREAM_FILES ad9361.c ad9361.h ad9361_api.c ad9361_api.h ad9361_conv.c common.h util.c util.h ) foreach(cpfile IN ITEMS ${LIBAD936X_UPSTREAM_FILES}) configure_file( "${LIBAD936X_UPSTREAM_DIR}/${cpfile}" "${LIBAD936X_UPSTREAM_BUILD_DIR}/" COPYONLY ) endforeach(cpfile) # Patch the upstream files set(LIBAD936X_PATCHES 0001-0bba46e-nuand-modifications.patch 0002-0bba46e-pr-561.patch 0003-0bba46e-pr-573.patch 0004-0bba46e-pr-598.patch 0005-0bba46e-rm-ad9361_parse_fir.patch 0006-0bba46e-compilefix.patch ) find_package(Patcher REQUIRED) foreach(patchfile IN ITEMS ${LIBAD936X_PATCHES}) message(STATUS "libad936x: Applying patch: ${patchfile}") execute_process( COMMAND ${Patcher_EXECUTABLE} -p3 INPUT_FILE ${LIBAD936X_PATCH_DIR}/${patchfile} WORKING_DIRECTORY "${LIBAD936X_UPSTREAM_BUILD_DIR}" OUTPUT_QUIET RESULT_VARIABLE resultcode ERROR_VARIABLE errvar ) if(resultcode) message(FATAL_ERROR "Failed to apply ${patchfile}: ${errvar}") endif(resultcode) endforeach(patchfile) message(STATUS "libad936x: Build configured") bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/no_OS/cmake/000077500000000000000000000000001457144405000226605ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/no_OS/cmake/nios-toolchain.cmake000066400000000000000000000035101457144405000266070ustar00rootroot00000000000000################################################################################ # Configure CMake and setup variables for the Nios II environment # # Inputs: # QUARTUS_ROOTDIR Path to Quartus Prime installation. # # ################################################################################ cmake_minimum_required(VERSION 3.5) if(NOT "$ENV{QUARTUS_ROOTDIR}" STREQUAL "") set(QUARTUS_ROOTDIR "$ENV{QUARTUS_ROOTDIR}") endif() # There seems to be some known strange behavior where CMake loses track of # cached variables when (re)parsing toolchain files. This is a workaround # identified in http://stackoverflow.com/questions/28613394/check-cmake-cache-variable-in-toolchain-file if(QUARTUS_ROOTDIR) # Use the environment to back up this definition, per that above workaround set(ENV{_QUARTUS_ROOTDIR} "${QUARTUS_ROOTDIR}") else() if(NOT "$ENV{_QUARTUS_ROOTDIR}" STREQUAL "") # Use the definition we backed up in the environment. set(QUARTUS_ROOTDIR "$ENV{_QUARTUS_ROOTDIR}") endif() endif() if("${QUARTUS_ROOTDIR}" STREQUAL "") message(FATAL_ERROR "QUARTUS_ROOTDIR not defined") else() message(STATUS "QUARTUS_ROOTDIR = ${QUARTUS_ROOTDIR}") endif() ################################################################################ # CMake toolchain file configuration ################################################################################ find_program(CMAKE_C_COMPILER nios2-elf-gcc ${QUARTUS_ROOTDIR}/nios2eds/) find_program(CMAKE_CXX_COMPILER nios2-elf-g++ ${QUARTUS_ROOTDIR}/nios2eds/) set(CMAKE_C_COMPILER_WORKS 1) set(CMAKE_CXX_COMPILER_WORKS 1) set(CMAKE_SYSTEM_NAME Generic) set(CMAKE_SYSTEM_PROCESSOR nios2) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/no_OS/include/000077500000000000000000000000001457144405000232235ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/no_OS/include/host_config.h000066400000000000000000000001771457144405000257030ustar00rootroot00000000000000#ifndef HOST_CONFIG_H__ #define HOST_CONFIG_H__ #include #define ARRAY_SIZE(n) (sizeof(n) / sizeof(n[0])) #endif bladeRF-2024.05/hdl/fpga/ip/analogdevicesinc/no_OS/include/thread.h000066400000000000000000000002331457144405000246410ustar00rootroot00000000000000#ifndef BLADERF_THREAD_H_ #define BLADERF_THREAD_H_ /* Stub out MUTEX, since we don't really use anything else pthread here */ #define MUTEX bool #endif bladeRF-2024.05/hdl/fpga/ip/nuand/000077500000000000000000000000001457144405000163725ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/.gitignore000066400000000000000000000000351457144405000203600ustar00rootroot00000000000000sample_stream_tb/ transcript bladeRF-2024.05/hdl/fpga/ip/nuand/arbiter/000077500000000000000000000000001457144405000200225ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/arbiter/modelsim/000077500000000000000000000000001457144405000216335ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/arbiter/modelsim/compile.do000066400000000000000000000004211457144405000236040ustar00rootroot00000000000000# Create work library vlib nuand # Compile design files vcom -work nuand -2008 ../vhdl/arbiter.vhd vcom -work nuand -2008 ../vhdl/tb/arbiter_tb.vhd # Elaborate design vsim nuand.arbiter_tb # Add waves add wave -hexadecimal "sim:/arbiter_tb/U_arbiter/*" # Run run -all bladeRF-2024.05/hdl/fpga/ip/nuand/arbiter/qsys/000077500000000000000000000000001457144405000210215ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/arbiter/qsys/arbiter.qip000066400000000000000000000005021457144405000231610ustar00rootroot00000000000000# This file gets copied by Qsys several layers into the work directory. # Any relative paths defined here must be relative to that directory. set nuand_hdl_dir [file normalize [file join $::quartus(qip_path) ../../../../../../fpga/ip/nuand/]] set_global_assignment -name VHDL_FILE $nuand_hdl_dir/arbiter/vhdl/arbiter.vhd bladeRF-2024.05/hdl/fpga/ip/nuand/arbiter/qsys/arbiter_hw.tcl000066400000000000000000000142641457144405000236620ustar00rootroot00000000000000# TCL File Generated by Component Editor 16.0 # Fri May 12 23:15:58 PDT 2017 # DO NOT MODIFY # # arbiter "bladeRF NiOS arbiter" v1.0 # Robert Ghilduta 2017.05.12.23:15:58 # NiOS Peripheral Arbiter # # # request TCL package from ACDS 16.0 # package require -exact qsys 16.0 # # module arbiter # set_module_property DESCRIPTION "NiOS Peripheral Arbiter" set_module_property NAME arbiter set_module_property VERSION 1.0 set_module_property INTERNAL false set_module_property OPAQUE_ADDRESS_MAP true set_module_property GROUP Peripherals set_module_property AUTHOR "Robert Ghilduta" set_module_property DISPLAY_NAME "bladeRF NiOS arbiter" set_module_property INSTANTIATE_IN_SYSTEM_MODULE true set_module_property EDITABLE true set_module_property REPORT_TO_TALKBACK false set_module_property ALLOW_GREYBOX_GENERATION false set_module_property REPORT_HIERARCHY false # # file sets # add_fileset QUARTUS_SYNTH QUARTUS_SYNTH "" "" set_fileset_property QUARTUS_SYNTH TOP_LEVEL arbiter set_fileset_property QUARTUS_SYNTH ENABLE_RELATIVE_INCLUDE_PATHS false set_fileset_property QUARTUS_SYNTH ENABLE_FILE_OVERWRITE_MODE false add_fileset_file arbiter.qip OTHER PATH ./arbiter.qip # # parameters # add_parameter N INTEGER 2 "" set_parameter_property N DEFAULT_VALUE 2 set_parameter_property N DISPLAY_NAME N set_parameter_property N TYPE INTEGER set_parameter_property N UNITS None set_parameter_property N ALLOWED_RANGES -2147483648:2147483647 set_parameter_property N DESCRIPTION "" set_parameter_property N HDL_PARAMETER true # # display items # # # connection point avalon_slave_0 # add_interface avalon_slave_0 avalon end set_interface_property avalon_slave_0 addressUnits WORDS set_interface_property avalon_slave_0 associatedClock clock_sink set_interface_property avalon_slave_0 associatedReset reset set_interface_property avalon_slave_0 bitsPerSymbol 8 set_interface_property avalon_slave_0 burstOnBurstBoundariesOnly false set_interface_property avalon_slave_0 burstcountUnits WORDS set_interface_property avalon_slave_0 explicitAddressSpan 0 set_interface_property avalon_slave_0 holdTime 0 set_interface_property avalon_slave_0 linewrapBursts false set_interface_property avalon_slave_0 maximumPendingReadTransactions 1 set_interface_property avalon_slave_0 maximumPendingWriteTransactions 0 set_interface_property avalon_slave_0 readLatency 0 set_interface_property avalon_slave_0 readWaitTime 1 set_interface_property avalon_slave_0 setupTime 0 set_interface_property avalon_slave_0 timingUnits Cycles set_interface_property avalon_slave_0 writeWaitTime 0 set_interface_property avalon_slave_0 ENABLED true set_interface_property avalon_slave_0 EXPORT_OF "" set_interface_property avalon_slave_0 PORT_NAME_MAP "" set_interface_property avalon_slave_0 CMSIS_SVD_VARIABLES "" set_interface_property avalon_slave_0 SVD_ADDRESS_GROUP "" add_interface_port avalon_slave_0 addr address Input 5 add_interface_port avalon_slave_0 din writedata Input 8 add_interface_port avalon_slave_0 dout readdata Output 8 add_interface_port avalon_slave_0 write write Input 1 add_interface_port avalon_slave_0 read read Input 1 add_interface_port avalon_slave_0 waitreq waitrequest Output 1 add_interface_port avalon_slave_0 readack readdatavalid Output 1 set_interface_assignment avalon_slave_0 embeddedsw.configuration.isFlash 0 set_interface_assignment avalon_slave_0 embeddedsw.configuration.isMemoryDevice 0 set_interface_assignment avalon_slave_0 embeddedsw.configuration.isNonVolatileStorage 0 set_interface_assignment avalon_slave_0 embeddedsw.configuration.isPrintableDevice 0 # # connection point reset # add_interface reset reset end set_interface_property reset associatedClock clock_sink set_interface_property reset synchronousEdges DEASSERT set_interface_property reset ENABLED true set_interface_property reset EXPORT_OF "" set_interface_property reset PORT_NAME_MAP "" set_interface_property reset CMSIS_SVD_VARIABLES "" set_interface_property reset SVD_ADDRESS_GROUP "" add_interface_port reset reset reset Input 1 # # connection point conduit_end # add_interface conduit_end conduit end set_interface_property conduit_end associatedClock clock_sink set_interface_property conduit_end associatedReset reset set_interface_property conduit_end ENABLED true set_interface_property conduit_end EXPORT_OF "" set_interface_property conduit_end PORT_NAME_MAP "" set_interface_property conduit_end CMSIS_SVD_VARIABLES "" set_interface_property conduit_end SVD_ADDRESS_GROUP "" add_interface_port conduit_end request request Input N add_interface_port conduit_end granted granted Output N add_interface_port conduit_end ack ack Input N # # connection point interrupt_sender # add_interface interrupt_sender interrupt end set_interface_property interrupt_sender associatedAddressablePoint "" set_interface_property interrupt_sender associatedClock clock_sink set_interface_property interrupt_sender associatedReset reset set_interface_property interrupt_sender bridgedReceiverOffset "" set_interface_property interrupt_sender bridgesToReceiver "" set_interface_property interrupt_sender ENABLED true set_interface_property interrupt_sender EXPORT_OF "" set_interface_property interrupt_sender PORT_NAME_MAP "" set_interface_property interrupt_sender CMSIS_SVD_VARIABLES "" set_interface_property interrupt_sender SVD_ADDRESS_GROUP "" add_interface_port interrupt_sender intr irq Output 1 # # connection point clock_sink # add_interface clock_sink clock end set_interface_property clock_sink clockRate 0 set_interface_property clock_sink ENABLED true set_interface_property clock_sink EXPORT_OF "" set_interface_property clock_sink PORT_NAME_MAP "" set_interface_property clock_sink CMSIS_SVD_VARIABLES "" set_interface_property clock_sink SVD_ADDRESS_GROUP "" add_interface_port clock_sink clock clk Input 1 # # connection point conduit_end_1 # add_interface conduit_end_1 conduit end set_interface_property conduit_end_1 associatedClock clock_sink set_interface_property conduit_end_1 associatedReset reset set_interface_property conduit_end_1 ENABLED true set_interface_property conduit_end_1 EXPORT_OF "" set_interface_property conduit_end_1 PORT_NAME_MAP "" set_interface_property conduit_end_1 CMSIS_SVD_VARIABLES "" set_interface_property conduit_end_1 SVD_ADDRESS_GROUP "" bladeRF-2024.05/hdl/fpga/ip/nuand/arbiter/vhdl/000077500000000000000000000000001457144405000207575ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/arbiter/vhdl/arbiter.vhd000066400000000000000000000164651457144405000231260ustar00rootroot00000000000000-- Copyright (c) 2017 Nuand LLC -- -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU Affero General Public License as -- published by the Free Software Foundation, either version 3 of the -- License, or (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU Affero General Public License for more details. -- -- You should have received a copy of the GNU Affero General Public License -- along with this program. If not, see . library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; entity arbiter is generic ( N : integer := 1 ) ; port ( -- Control signals clock : in std_logic ; reset : in std_logic ; -- Memory mapped interface addr : in std_logic_vector(4 downto 0) ; din : in std_logic_vector(7 downto 0) ; dout : out std_logic_vector(7 downto 0) ; write : in std_logic ; read : in std_logic ; waitreq : out std_logic ; readack : out std_logic ; intr : out std_logic ; -- Arbiter signals request : in std_logic_vector(N-1 downto 0) ; ack : in std_logic_vector(N-1 downto 0) ; granted : out std_logic_vector(N-1 downto 0) ) ; end entity ; architecture arch of arbiter is signal rack : std_logic ; signal uaddr : unsigned(addr'range) ; signal intr_clear : std_logic ; signal intr_set : std_logic ; signal nios_csr : std_logic_vector(1 downto 0) ; signal nios_request : std_logic ; signal nios_ack : std_logic ; signal nios_granted : std_logic ; signal arbiter_request : std_logic_vector(N-1 downto 0) ; signal arbiter_ack : std_logic_vector(N-1 downto 0) ; signal arbiter_granted : std_logic_vector(N-1 downto 0) ; type fsm_t is (INIT, WAIT_FOR_REQ, GRANT, WAIT_FOR_ACK) ; type state_t is record state : fsm_t; grant : std_logic_vector(N-1 downto 0) ; mask : std_logic_vector(N-1 downto 0) ; mask_valid : std_logic ; end record; function NULL_STATE return state_t is variable rv : state_t ; begin rv.state := INIT ; rv.grant := ( others => '0' ) ; rv.mask := ( others => '1' ) ; rv.mask_valid := '0' ; return rv ; end function; signal current : state_t ; signal future : state_t ; begin nios_request <= nios_csr(0) ; nios_ack <= nios_csr(1) ; nios_granted <= current.grant(0) ; waitreq <= '0'; readack <= rack ; uaddr <= unsigned(addr) ; generate_ack : process(clock, reset) begin if( reset = '1' ) then rack <= '0' ; elsif( rising_edge(clock) ) then if( read = '1' ) then rack <= '1' ; else rack <= '0' ; end if ; end if ; end process ; mm_read : process(clock) begin if( rising_edge(clock) ) then case to_integer(uaddr) is when 0 => dout <= "000000" & nios_csr ; when 1 => dout <= "0000000" & nios_granted ; when others => dout <= x"13"; end case; end if ; end process; mm_write : process(clock, reset) begin if( reset = '1' ) then nios_csr <= ( others => '0' ) ; elsif( rising_edge(clock) ) then intr_set <= '0' ; intr_clear <= '0' ; if( write = '1' ) then case to_integer(uaddr) is when 0 => nios_csr <= din(nios_csr'range) ; when 8 => -- Command coming in! case to_integer(unsigned(din)) is when 0 => -- Set interrupt intr_set <= '1' ; when 1 => -- Clear interrupt intr_clear <= '1' ; when others => null ; end case ; when others => null ; end case ; end if ; end if ; end process ; arbiter_request <= request(N-1 downto 1) & nios_request ; arbiter_ack <= ack(N-1 downto 1) & nios_ack ; granted <= current.grant ; sync_proc : process(clock, reset) begin if( reset = '1' ) then current <= NULL_STATE ; elsif( rising_edge(clock) ) then current <= future; end if; end process; comb_proc : process( all ) variable arbiter_request_bit : std_logic_vector(N-1 downto 0) ; begin -- Next state defaults future <= current; case( current.state ) is when INIT => future.state <= WAIT_FOR_REQ ; when WAIT_FOR_REQ => if( arbiter_request /= ( arbiter_request'range => '0' ) ) then arbiter_request_bit := std_logic_vector(unsigned(not(arbiter_request)) + 1 ) ; if( (arbiter_request and current.mask) = ( arbiter_request'range => '0' ) ) then future.grant <= arbiter_request and arbiter_request_bit ; else future.grant <= (arbiter_request and current.mask) and arbiter_request_bit ; end if ; future.state <= GRANT ; end if ; when GRANT => -- it's fine if this goes to 0, the unmasked check gives requester #0 the highest priority future.mask <= std_logic_vector(unsigned(current.grant) - 1 ) ; future.state <= WAIT_FOR_ACK ; when WAIT_FOR_ACK => --if( arbiter_ack /= ( arbiter_ack'range => '0' ) ) then if( (arbiter_ack and current.grant) = current.grant ) then future.grant <= ( others => '0' ) ; future.state <= WAIT_FOR_REQ ; end if ; end case ; end process ; interrupt : process(clock, reset) type intrfsm_t is (WAIT_FOR_ARM, WAIT_FOR_GRANT, WAIT_FOR_CLEAR) ; variable intrfsm : intrfsm_t := WAIT_FOR_ARM ; begin if( reset = '1' ) then intr <= '0' ; intrfsm := WAIT_FOR_ARM ; elsif( rising_edge(clock) ) then case intrfsm is when WAIT_FOR_ARM => if( intr_set = '1' ) then intrfsm := WAIT_FOR_GRANT ; end if ; when WAIT_FOR_GRANT => if( nios_granted = '1' ) then intr <= '1' ; intrfsm := WAIT_FOR_CLEAR ; end if ; when WAIT_FOR_CLEAR => if( intr_clear = '1' ) then intr <= '0' ; intrfsm := WAIT_FOR_ARM ; end if ; end case ; end if ; end process ; end architecture ; bladeRF-2024.05/hdl/fpga/ip/nuand/arbiter/vhdl/tb/000077500000000000000000000000001457144405000213645ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/arbiter/vhdl/tb/arbiter_tb.vhd000066400000000000000000000141751457144405000242140ustar00rootroot00000000000000-- Copyright (c) 2017 Nuand LLC -- -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU Affero General Public License as -- published by the Free Software Foundation, either version 3 of the -- License, or (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU Affero General Public License for more details. -- -- You should have received a copy of the GNU Affero General Public License -- along with this program. If not, see . library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; entity arbiter_tb is end entity ; architecture arch of arbiter_tb is signal clock : std_logic := '1' ; signal reset : std_logic := '1' ; signal addr : std_logic_vector(4 downto 0) := (others => '0'); signal din : std_logic_vector(7 downto 0) ; signal dout : std_logic_vector(7 downto 0) ; signal write : std_logic := '0' ; signal read : std_logic := '0' ; signal waitreq : std_logic ; signal readack : std_logic ; signal intr : std_logic ; signal arb_request : std_logic_vector(3 downto 0) ; signal arb_ack : std_logic_vector(3 downto 0) ; signal arb_granted : std_logic_vector(3 downto 0) ; procedure read_csr( signal clock : in std_logic ; signal addr : out std_logic_vector(4 downto 0) ; signal dout : in std_logic_vector(7 downto 0) ; signal read : out std_logic ; signal readack : in std_logic ; reg : in integer ; rv : out std_logic_vector(7 downto 0) ) is begin addr <= std_logic_vector(to_unsigned(reg, addr'length)) ; read <= '1' ; wait until rising_edge(clock) and readack = '1' ; rv := std_logic_vector(dout) ; read <= '0' ; wait until rising_edge(clock) ; wait until rising_edge(clock) ; end procedure ; procedure write_csr( signal clock : in std_logic ; signal addr : out std_logic_vector(4 downto 0) ; signal din : out std_logic_vector(7 downto 0) ; signal write : out std_logic ; reg : in integer ; rv : std_logic_vector(7 downto 0) ) is begin addr <= std_logic_vector(to_unsigned(reg, addr'length)) ; din <= std_logic_vector(rv) ; write <= '1' ; wait until rising_edge(clock) ; write <= '0' ; wait until rising_edge(clock) ; end procedure ; procedure nop( signal clock : in std_logic ; count : natural ) is begin for i in 1 to count loop wait until rising_edge(clock) ; end loop ; end procedure ; procedure clear_intr( signal clock : in std_logic ; signal addr : out std_logic_vector(4 downto 0) ; signal din : out std_logic_vector(7 downto 0) ; signal write : out std_logic ) is begin addr <= std_logic_vector(to_unsigned(8, addr'length)) ; din <= std_logic_vector(to_unsigned(1, din'length)) ; write <= '1' ; wait until rising_edge(clock) ; write <= '0' ; wait until rising_edge(clock) ; end procedure ; procedure set_intr( signal clock : in std_logic ; signal addr : out std_logic_vector(4 downto 0) ; signal din : out std_logic_vector(7 downto 0) ; signal write : out std_logic ) is begin addr <= std_logic_vector(to_unsigned(8, addr'length)) ; din <= std_logic_vector(to_unsigned(0, din'length)) ; write <= '1' ; wait until rising_edge(clock) ; write <= '0' ; wait until rising_edge(clock) ; end procedure ; begin clock <= not clock after 1 ns ; U_arbiter : entity work.arbiter generic map( N => 4 ) port map ( clock => clock, reset => reset, addr => addr, din => din, dout => dout, write => write, read => read, waitreq => waitreq, readack => readack, intr => intr, request => arb_request, ack => arb_ack, granted => arb_granted ) ; tb : process variable ts : std_logic_vector(7 downto 0) := (others =>'0') ; begin arb_request <= ( others => '0' ) ; arb_ack <= ( others => '0' ) ; reset <= '1' ; nop( clock, 100 ) ; reset <= '0' ; nop( clock, 100 ) ; -- read CSR read_csr( clock, addr, dout, read, readack, 0, ts ) ; nop( clock, 1000 ) ; -- NiOS request write_csr( clock, addr, din, write, 0, x"01" ) ; -- NiOS should be granted nop( clock, 100 ) ; read_csr( clock, addr, dout, read, readack, 1, ts ) ; -- Contender #4 request arb_request <= x"4"; -- NiOS ACK nop( clock, 1000 ) ; write_csr( clock, addr, din, write, 0, x"02" ) ; nop( clock, 1000 ) ; -- NiOS request #2 write_csr( clock, addr, din, write, 8, x"00" ) ; write_csr( clock, addr, din, write, 0, x"01" ) ; nop( clock, 1000 ) ; -- Contender #4 ACK arb_request <= x"0"; arb_ack <= x"4"; nop( clock, 10) ; arb_ack <= x"0"; -- NiOS ACK #2 (with intr) nop( clock, 1000 ) ; write_csr( clock, addr, din, write, 8, x"01" ) ; nop( clock, 1000 ) ; write_csr( clock, addr, din, write, 0, x"02" ) ; nop( clock, 1000) ; -- Read the time back report "-- End of Simulation" severity failure ; end process ; end architecture ; bladeRF-2024.05/hdl/fpga/ip/nuand/command_uart/000077500000000000000000000000001457144405000210435ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/command_uart/command_uart.qip000066400000000000000000000005561457144405000242350ustar00rootroot00000000000000# When generating a system, Qsys will copy this file into its synthesis output # directory. All paths below must be relative to that directory. set nuand_ip_dir [file join $::quartus(qip_path) ../../../../../../fpga/ip/nuand] set_global_assignment -name VHDL_FILE -hdl_version VHDL_2008 [file normalize [file join $nuand_ip_dir command_uart/vhdl/command_uart.vhd]] bladeRF-2024.05/hdl/fpga/ip/nuand/command_uart/modelsim/000077500000000000000000000000001457144405000226545ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/command_uart/modelsim/compile.do000066400000000000000000000001611457144405000246260ustar00rootroot00000000000000vlib nuand vcom -work nuand -2008 ../vhdl/command_uart.vhd vcom -work nuand -2008 ../vhdl/tb/command_uart_tb.vhd bladeRF-2024.05/hdl/fpga/ip/nuand/command_uart/qsys/000077500000000000000000000000001457144405000220425ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/command_uart/qsys/command_uart_hw.tcl000066400000000000000000000117531457144405000257240ustar00rootroot00000000000000# TCL File Generated by Component Editor 15.0 # Sat May 23 16:39:31 EDT 2015 # DO NOT MODIFY # # command_uart "BladeRF Command UART" v1.0 # Nuand, LLC 2015.05.23.16:39:31 # bladeRF Command UART # # # request TCL package from ACDS 15.0 # package require -exact qsys 15.0 # # module command_uart # set_module_property DESCRIPTION "bladeRF Command UART" set_module_property NAME command_uart set_module_property VERSION 1.0 set_module_property INTERNAL false set_module_property OPAQUE_ADDRESS_MAP true set_module_property GROUP "Interface Protocols/Serial" set_module_property AUTHOR "Nuand, LLC" set_module_property DISPLAY_NAME "BladeRF Command UART" set_module_property INSTANTIATE_IN_SYSTEM_MODULE true set_module_property EDITABLE true set_module_property REPORT_TO_TALKBACK false set_module_property ALLOW_GREYBOX_GENERATION false set_module_property REPORT_HIERARCHY false # # file sets # add_fileset QUARTUS_SYNTH QUARTUS_SYNTH "" "" set_fileset_property QUARTUS_SYNTH TOP_LEVEL command_uart set_fileset_property QUARTUS_SYNTH ENABLE_RELATIVE_INCLUDE_PATHS false set_fileset_property QUARTUS_SYNTH ENABLE_FILE_OVERWRITE_MODE false add_fileset_file command_uart.qip OTHER PATH ../command_uart.qip # # parameters # # # display items # # # connection point reset # add_interface reset reset end set_interface_property reset associatedClock clock set_interface_property reset synchronousEdges DEASSERT set_interface_property reset ENABLED true set_interface_property reset EXPORT_OF "" set_interface_property reset PORT_NAME_MAP "" set_interface_property reset CMSIS_SVD_VARIABLES "" set_interface_property reset SVD_ADDRESS_GROUP "" add_interface_port reset reset reset Input 1 # # connection point rs232 # add_interface rs232 conduit end set_interface_property rs232 associatedClock "" set_interface_property rs232 associatedReset "" set_interface_property rs232 ENABLED true set_interface_property rs232 EXPORT_OF "" set_interface_property rs232 PORT_NAME_MAP "" set_interface_property rs232 CMSIS_SVD_VARIABLES "" set_interface_property rs232 SVD_ADDRESS_GROUP "" add_interface_port rs232 rs232_sin serial_in Input 1 add_interface_port rs232 rs232_sout serial_out Output 1 # # connection point interrupt # add_interface interrupt interrupt end set_interface_property interrupt associatedAddressablePoint avalon_slave set_interface_property interrupt bridgedReceiverOffset "" set_interface_property interrupt bridgesToReceiver "" set_interface_property interrupt ENABLED true set_interface_property interrupt EXPORT_OF "" set_interface_property interrupt PORT_NAME_MAP "" set_interface_property interrupt CMSIS_SVD_VARIABLES "" set_interface_property interrupt SVD_ADDRESS_GROUP "" add_interface_port interrupt irq irq Output 1 # # connection point clock # add_interface clock clock end set_interface_property clock clockRate 0 set_interface_property clock ENABLED true set_interface_property clock EXPORT_OF "" set_interface_property clock PORT_NAME_MAP "" set_interface_property clock CMSIS_SVD_VARIABLES "" set_interface_property clock SVD_ADDRESS_GROUP "" add_interface_port clock clock clk Input 1 # # connection point avalon_slave # add_interface avalon_slave avalon end set_interface_property avalon_slave addressUnits SYMBOLS set_interface_property avalon_slave associatedClock clock set_interface_property avalon_slave associatedReset reset set_interface_property avalon_slave bitsPerSymbol 8 set_interface_property avalon_slave burstOnBurstBoundariesOnly false set_interface_property avalon_slave burstcountUnits SYMBOLS set_interface_property avalon_slave explicitAddressSpan 32 set_interface_property avalon_slave holdTime 0 set_interface_property avalon_slave linewrapBursts false set_interface_property avalon_slave maximumPendingReadTransactions 1 set_interface_property avalon_slave maximumPendingWriteTransactions 0 set_interface_property avalon_slave readLatency 0 set_interface_property avalon_slave readWaitTime 1 set_interface_property avalon_slave setupTime 0 set_interface_property avalon_slave timingUnits Cycles set_interface_property avalon_slave writeWaitTime 0 set_interface_property avalon_slave ENABLED true set_interface_property avalon_slave EXPORT_OF "" set_interface_property avalon_slave PORT_NAME_MAP "" set_interface_property avalon_slave CMSIS_SVD_VARIABLES "" set_interface_property avalon_slave SVD_ADDRESS_GROUP "" add_interface_port avalon_slave addr address Input 5 add_interface_port avalon_slave dout readdata Output 32 add_interface_port avalon_slave din writedata Input 32 add_interface_port avalon_slave read read Input 1 add_interface_port avalon_slave write write Input 1 add_interface_port avalon_slave readack readdatavalid Output 1 add_interface_port avalon_slave waitreq waitrequest Output 1 set_interface_assignment avalon_slave embeddedsw.configuration.isFlash 0 set_interface_assignment avalon_slave embeddedsw.configuration.isMemoryDevice 0 set_interface_assignment avalon_slave embeddedsw.configuration.isNonVolatileStorage 0 set_interface_assignment avalon_slave embeddedsw.configuration.isPrintableDevice 0 bladeRF-2024.05/hdl/fpga/ip/nuand/command_uart/vhdl/000077500000000000000000000000001457144405000220005ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/command_uart/vhdl/command_uart.vhd000066400000000000000000000341141457144405000251570ustar00rootroot00000000000000-- Copyright (c) 2015 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; entity command_uart is port ( -- FPGA internal interface to the TX and RX FIFOs clock : in std_logic ; reset : in std_logic ; -- RS232 interface rs232_sout : out std_logic ; rs232_sin : in std_logic ; -- Avalon-MM interface addr : in std_logic_vector(4 downto 0) ; dout : out std_logic_vector(31 downto 0) ; din : in std_logic_vector(31 downto 0) ; read : in std_logic ; write : in std_logic ; waitreq : out std_logic ; readack : out std_logic ; irq : out std_logic ) ; end entity ; -- command_uart architecture arch of command_uart is -- TODO: Make this a generic instead of a constant constant CLOCKS_PER_BIT : natural := 20 ; -- Send and receive state machine definitions type send_fsm_t is (IDLE, SEND_START, SEND_DATA, SEND_STOP ) ; type receive_fsm_t is (WAIT_FOR_START, CENTER_START, SAMPLE_DATA, WAIT_FOR_STOP) ; -- FSM signals signal send_fsm : send_fsm_t ; signal receive_fsm : receive_fsm_t ; -- Synchronization signals for asynchronous input signal reg_sin : std_logic ; signal sync_sin : std_logic ; signal reg_response : std_logic_vector(127 downto 0) ; signal reg_request : std_logic_vector(127 downto 0) ; signal sin_data : std_logic_vector(7 downto 0) ; signal sin_we : std_logic ; signal sout_data : std_logic_vector(7 downto 0) ; signal sout_we : std_logic ; signal rs232_sout_reg : std_logic; signal ack : std_logic ; type magics_t is array(natural range <>) of std_logic_vector(7 downto 0) ; -- These are all the magic header characters constant magics : magics_t := ( std_logic_vector(to_unsigned(character'pos('A'),8)), -- 8x8 std_logic_vector(to_unsigned(character'pos('B'),8)), -- 8x16 std_logic_vector(to_unsigned(character'pos('C'),8)), -- 8x32 std_logic_vector(to_unsigned(character'pos('D'),8)), -- 8x64 std_logic_vector(to_unsigned(character'pos('E'),8)), -- 16x64 std_logic_vector(to_unsigned(character'pos('K'),8)), -- 32x32 std_logic_vector(to_unsigned(character'pos('N'),8)), -- Legacy std_logic_vector(to_unsigned(character'pos('T'),8)), -- Retune std_logic_vector(to_unsigned(character'pos('U'),8)) -- Retune2 ) ; signal command_in : std_logic ; signal control : std_logic_vector(7 downto 0) := (0 => '1', others =>'0') ; alias isr_enable is control(0) ; begin readack <= ack ; waitreq <= not(ack or write) ; -- Avalon-MM interface for responses mm_writes : process(clock) begin if( rising_edge(clock) ) then command_in <= '0' ; if( write = '1' ) then case to_integer(unsigned(addr)) is when 0| 1| 2| 3 => reg_response( 31 downto 0) <= din ; command_in <= '1' ; when 4| 5| 6| 7 => reg_response( 63 downto 32) <= din ; when 8| 9|10|11 => reg_response( 95 downto 64) <= din ; when 12|13|14|15 => reg_response(127 downto 96) <= din ; when others => control(7 downto 0) <= din(7 downto 0) ; end case ; end if ; end if ; end process ; send_command : process(clock, reset) type state_t is (WAITING_FOR_COMMAND, SEND_BYTE, WAITING_FOR_START, WAITING_FOR_DONE) ; variable state : state_t ; variable count : natural range 0 to 15 := 15 ; begin if( reset = '1' ) then state := WAITING_FOR_COMMAND ; sout_we <= '0' ; elsif( rising_edge(clock) ) then sout_we <= '0' ; sout_data <= reg_response(count*8+7 downto count*8) ; case state is when WAITING_FOR_COMMAND => if( command_in = '1' ) then state := SEND_BYTE ; count := 0 ; end if ; when SEND_BYTE => sout_we <= '1' ; state := WAITING_FOR_START ; when WAITING_FOR_START => if( send_fsm /= IDLE ) then state := WAITING_FOR_DONE ; end if ; when WAITING_FOR_DONE => if( send_fsm = IDLE ) then if( count < 15 ) then count := count + 1 ; state := SEND_BYTE ; else state := WAITING_FOR_COMMAND ; end if ; end if ; end case ; end if ; end process ; -- Avanlon-MM interface for requests mm_reads : process(clock) begin if( rising_edge(clock) ) then ack <= read ; if( read = '1' ) then case to_integer(unsigned(addr)) is when 0| 1| 2| 3 => dout <= reg_request( 31 downto 0) ; when 4| 5| 6| 7 => dout <= reg_request( 63 downto 32) ; when 8| 9|10|11 => dout <= reg_request( 95 downto 64) ; when 12|13|14|15 => dout <= reg_request(127 downto 96) ; when others => dout(7 downto 0) <= control ; end case ; end if ; end if ; end process ; receive_command : process(clock, reset) type state_t is (WAIT_FOR_MAGIC, CHECK_MAGIC, RECEIVE_COMMAND, INTERRUPT, WAIT_FOR_READ) ; variable state : state_t ; variable count : natural range 0 to 15 ; begin if( reset = '1' ) then state := WAIT_FOR_MAGIC ; count := 0 ; irq <= '0' ; elsif( rising_edge(clock) ) then if( sin_we = '1' ) then reg_request(count*8+7 downto count*8) <= sin_data ; end if ; case state is when WAIT_FOR_MAGIC => if( sin_we = '1' ) then state := CHECK_MAGIC ; end if ; when CHECK_MAGIC => for i in magics'range loop if( magics(i) = reg_request(7 downto 0) ) then state := RECEIVE_COMMAND ; count := count + 1 ; end if ; end loop ; if( count = 0 ) then state := WAIT_FOR_MAGIC ; end if ; when RECEIVE_COMMAND => if( sin_we = '1' ) then if( count < 15 ) then count := count + 1 ; else count := 0 ; if( isr_enable = '1' ) then state := INTERRUPT ; else state := WAIT_FOR_MAGIC ; end if ; end if ; end if ; when INTERRUPT => irq <= '1' ; state := WAIT_FOR_READ ; when WAIT_FOR_READ => if( read = '1' ) then irq <= '0' ; state := WAIT_FOR_MAGIC ; end if ; end case ; end if ; end process ; -- Synchronize asynchronous inputs reg_sin <= rs232_sin when rising_edge( clock ) ; sync_sin <= reg_sin when rising_edge( clock ) ; -- Receive data from the UART and put it in the FIFO receive_from_uart : process(clock, reset) variable bits : std_logic_vector(7 downto 0) ; variable bit_count : natural range 0 to bits'length ; variable clock_count : natural range 0 to CLOCKS_PER_BIT ; variable sin_delay : std_logic ; begin if( reset = '1' ) then receive_fsm <= WAIT_FOR_START ; sin_we <= '0' ; sin_data <= (others =>'0') ; bits := (others =>'0') ; bit_count := 0 ; clock_count := 0 ; sin_delay := '0' ; elsif( rising_edge(clock) ) then sin_we <= '0' ; case receive_fsm is -- Wait for the start signal when WAIT_FOR_START => if( sync_sin = '0' and sin_delay = '1' ) then receive_fsm <= CENTER_START ; clock_count := CLOCKS_PER_BIT/2-1 ; end if ; sin_delay := sync_sin ; -- Center the start bit when CENTER_START => clock_count := clock_count - 1 ; if( clock_count = 0 ) then receive_fsm <= SAMPLE_DATA ; clock_count := CLOCKS_PER_BIT ; bit_count := bits'length ; end if ; -- Sample the bits when SAMPLE_DATA => clock_count := clock_count - 1 ; if( clock_count = 0 ) then bits := sync_sin & bits(bits'high downto 1) ; bit_count := bit_count - 1 ; clock_count := CLOCKS_PER_BIT ; if( bit_count = 0 ) then receive_fsm <= WAIT_FOR_STOP ; sin_data <= bits ; sin_we <= '1' ; end if ; end if ; -- Wait for the stop bit when WAIT_FOR_STOP => clock_count := clock_count - 1 ; if( clock_count = 0 ) then receive_fsm <= WAIT_FOR_START ; assert sync_sin = '1' report "STOP bit not found!" severity error ; end if ; when others => end case ; end if ; end process ; -- Register outputs register_sout : process(clock, reset) is begin if (reset = '1') then rs232_sout <= '1'; elsif (rising_edge(clock)) then rs232_sout <= rs232_sout_reg; end if; end process register_sout; -- Send data to the UART from the FIFO send_to_uart : process(clock, reset) variable bits : std_logic_vector(7 downto 0) ; variable bit_count : natural range 0 to bits'length ; variable clock_count : natural range 0 to CLOCKS_PER_BIT ; begin if( reset = '1' ) then send_fsm <= IDLE ; rs232_sout_reg <= '1' ; bit_count := 0 ; clock_count := 0 ; bits := (others =>'0') ; elsif( rising_edge(clock) ) then case send_fsm is -- Wait until we have something to send when IDLE => rs232_sout_reg <= '1' ; if( sout_we = '1' ) then send_fsm <= SEND_START ; bit_count := bits'length ; clock_count := CLOCKS_PER_BIT ; end if ; -- Send the start bit when SEND_START => rs232_sout_reg <= '0' ; clock_count := clock_count - 1 ; if( clock_count = 0 ) then send_fsm <= SEND_DATA ; clock_count := CLOCKS_PER_BIT ; elsif( clock_count = 9 ) then bits := sout_data ; end if ; -- Send the data when SEND_DATA => rs232_sout_reg <= bits(0) ; clock_count := clock_count - 1 ; if( clock_count = 0 ) then bits := '0' & bits(bits'high downto 1) ; bit_count := bit_count - 1 ; clock_count := CLOCKS_PER_BIT ; if( bit_count = 0 ) then send_fsm <= SEND_STOP ; end if ; end if ; -- Send the stop bit when SEND_STOP => rs232_sout_reg <= '1' ; clock_count := clock_count - 1 ; if( clock_count = 0 ) then send_fsm <= IDLE ; end if ; -- Weird when others => send_fsm <= IDLE ; rs232_sout_reg <= '1' ; bit_count := 0 ; clock_count := 0 ; bits := (others =>'0') ; end case ; end if ; end process ; end architecture ; -- arch bladeRF-2024.05/hdl/fpga/ip/nuand/command_uart/vhdl/tb/000077500000000000000000000000001457144405000224055ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/command_uart/vhdl/tb/command_uart_tb.vhd000066400000000000000000000165051457144405000262550ustar00rootroot00000000000000library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; library std ; use std.textio.all ; entity command_uart_tb is end entity ; architecture arch of command_uart_tb is signal clock : std_logic := '1' ; signal reset : std_logic := '1' ; signal host_sin : std_logic ; signal host_sout : std_logic ; signal host_addr : std_logic_vector(4 downto 0) ; signal host_dout : std_logic_vector(31 downto 0) ; signal host_din : std_logic_vector(31 downto 0) ; signal host_read : std_logic := '0' ; signal host_write : std_logic := '0' ; signal host_readack : std_logic ; signal host_waitreq : std_logic ; signal host_irq : std_logic ; signal dev_addr : std_logic_vector(4 downto 0) ; signal dev_dout : std_logic_vector(31 downto 0) ; signal dev_din : std_logic_vector(31 downto 0) ; signal dev_read : std_logic := '0' ; signal dev_write : std_logic := '0' ; signal dev_readack : std_logic ; signal dev_waitreq : std_logic ; signal dev_irq : std_logic ; procedure nop( signal clock : in std_logic ; count : in natural ) is begin for i in 1 to count loop wait until rising_edge(clock) ; end loop ; end procedure ; procedure write_command( signal clock : in std_logic ; signal addr : out std_logic_vector(4 downto 0) ; signal din : out std_logic_vector(31 downto 0) ; signal write : out std_logic ; command : in std_logic_vector(127 downto 0) ) is begin for i in 0 to 3 loop addr <= std_logic_vector(to_unsigned(4*i, addr'length)) ; din <= command(i*32+31 downto i*32) ; write <= '1' ; wait until rising_edge(clock) ; write <= '0' ; wait until rising_edge(clock) ; end loop ; end procedure ; procedure read_command( signal clock : in std_logic ; signal addr : out std_logic_vector(4 downto 0) ; signal dout : in std_logic_vector(31 downto 0) ; signal read : out std_logic ; command : out std_logic_vector(127 downto 0) ) is begin for i in 0 to 3 loop addr <= std_logic_vector(to_unsigned(4*i, addr'length)) ; read <= '1' ; wait until rising_edge(clock) ; read <= '1' ; wait until rising_edge(clock) ; read <= '0' ; command(i*32+31 downto i*32) := dout ; nop( clock, 10 ) ; end loop ; end procedure ; procedure send_retune( signal clock : in std_logic ; signal addr : out std_logic_vector(4 downto 0) ; signal din : out std_logic_vector(31 downto 0) ; signal write : out std_logic ; timestamp : in std_logic_vector(63 downto 0) ; nint : in positive ; nfrac : in natural ; freqsel : in natural range 0 to 63 ; vcocap : in natural range 0 to 63 ; tx : in std_logic ; rx : in std_logic ; bandsel : in std_logic ) is variable data : std_logic_vector(127 downto 0) ; constant nint_slv : std_logic_vector(8 downto 0) := std_logic_vector(to_unsigned(nint,9)) ; constant nfrac_slv : std_logic_vector(22 downto 0) := std_logic_vector(to_unsigned(nfrac,23)) ; constant freqsel_slv : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(freqsel,6)) ; constant vcocap_slv : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(vcocap,6)) ; begin data( 0*8+7 downto 0*8) := std_logic_vector(to_unsigned(character'pos('T'),8)) ; data( 8*8+7 downto 1*8) := timestamp ; data(12*8+7 downto 9*8) := nfrac_slv(7 downto 0) & nfrac_slv(15 downto 8) & nint_slv(0) & nfrac_slv(22 downto 16) & nint_slv(8 downto 1) ; data(13*8+7 downto 13*8) := tx & rx & freqsel_slv ; data(14*8+7 downto 14*8) := bandsel & '0' & vcocap_slv ; data(15*8+7 downto 15*8) := (others =>'0') ; write_command(clock, addr, din, write, data) ; end procedure ; begin clock <= not clock after 1 ns ; U_host : entity work.command_uart port map ( clock => clock, reset => reset, rs232_sin => host_sin, rs232_sout => host_sout, addr => host_addr, din => host_din, dout => host_dout, read => host_read, write => host_write, readack => host_readack, waitreq => host_waitreq, irq => host_irq ) ; U_device : entity work.command_uart port map ( clock => clock, reset => reset, rs232_sin => host_sout, rs232_sout => host_sin, addr => dev_addr, din => dev_din, dout => dev_dout, read => dev_read, write => dev_write, readack => dev_readack, waitreq => dev_waitreq, irq => dev_irq ) ; tb : process variable response : std_logic_vector(127 downto 0) ; begin nop( clock, 100 ) ; reset <= '0' ; nop( clock, 100 ) ; -- Send a retune command for giggles report "HOST: Send retune command" ; send_retune( clock => clock, addr => host_addr, din => host_din, write => host_write, timestamp => (others =>'0'), nint => 131, nfrac => 0, vcocap => 32, freqsel => 44, tx => '0', rx => '0', bandsel => '0' ) ; wait until rising_edge(clock) and host_irq = '1' ; report "HOST: Received response" ; read_command(clock, host_addr, host_dout, host_read, response) ; nop( clock, 100 ) ; write_command(clock, host_addr, host_din, host_write, (others =>'0')); nop( clock, 10000 ) ; write_command(clock, host_addr, host_din, host_write, response ) ; wait until rising_edge(clock) and host_irq = '1' ; nop(clock, 500) ; report "HOST: Received response" ; read_command(clock, host_addr, host_dout, host_read, response ) ; nop( clock, 1000 ) ; report "-- End of Simulation --" severity failure ; end process ; -- Just turn it around and send it back receive_command : process variable request : std_logic_vector(127 downto 0) ; begin wait until rising_edge(clock) and dev_irq = '1' ; report "DEVICE: Received request" ; nop( clock, 100 ) ; read_command(clock, dev_addr, dev_dout, dev_read, request) ; nop( clock, 1000 ) ; report "DEVICE: Writing response" ; write_command(clock, dev_addr, dev_din, dev_write, request) ; end process ; end architecture ; bladeRF-2024.05/hdl/fpga/ip/nuand/fx3_gpif_tb.do000066400000000000000000000016501457144405000211120ustar00rootroot00000000000000# Initializes simulation of FX3 GPIF interface proc compile_fx3_gpif { root } { vlib work vcom -2008 -work work [file join $root ./synthesis/set_clear_ff.vhd] vcom -2008 -work work [file join $root ../../platforms/common/bladerf/vhdl/fx3_gpif.vhd] vcom -2008 -work work [file join $root ./simulation/util.vhd] vcom -2008 -work work [file join $root ./simulation/fx3_model.vhd] vcom -2008 -work work [file join $root ../../platforms/common/bladerf/vhdl/tb/fx3_gpif_tb.vhd] } proc simulate_fx3_gpif { } { vsim -L altera_lnsim fx3_gpif_tb } proc waves_fx3_gpif { } { add wave sim:/fx3_gpif_tb/sys_clk add wave sim:/fx3_gpif_tb/fx3_pclk add wave sim:/fx3_gpif_tb/fx3_pclk_pll add wave -radix hexadecimal -expand -group tb * add wave -radix hexadecimal -expand -group gpif sim:/fx3_gpif_tb/U_fx3_gpif/* add wave -radix hexadecimal -expand -group model sim:/fx3_gpif_tb/U_fx3_model/* } bladeRF-2024.05/hdl/fpga/ip/nuand/lms6_spi_controller/000077500000000000000000000000001457144405000223715ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/lms6_spi_controller/lms6_spi_controller.qip000066400000000000000000000005741457144405000271110ustar00rootroot00000000000000# When generating a system, Qsys will copy this file into its synthesis output # directory. All paths below must be relative to that directory. set nuand_ip_dir [file join $::quartus(qip_path) ../../../../../../fpga/ip/nuand] set_global_assignment -name VHDL_FILE -hdl_version VHDL_2008 [file normalize [file join $nuand_ip_dir lms6_spi_controller/vhdl/lms6_spi_controller.vhd]] bladeRF-2024.05/hdl/fpga/ip/nuand/lms6_spi_controller/modelsim/000077500000000000000000000000001457144405000242025ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/lms6_spi_controller/modelsim/.gitignore000066400000000000000000000000361457144405000261710ustar00rootroot00000000000000work/ nuand/ *.wlf transcript bladeRF-2024.05/hdl/fpga/ip/nuand/lms6_spi_controller/modelsim/tb.do000066400000000000000000000010611457144405000251310ustar00rootroot00000000000000set vcom_lib nuand set vcom_opts {-2008} vlib ${vcom_lib} # UUT vcom {*}$vcom_opts -work ${vcom_lib} ../vhdl/lms6_spi_controller.vhd # Models vcom {*}$vcom_opts -work ${vcom_lib} ../vhdl/tb/lms6002d_model.vhd vcom {*}$vcom_opts -work ${vcom_lib} ../vhdl/tb/nios_model.vhd # Testbench vcom {*}$vcom_opts -work ${vcom_lib} ../vhdl/tb/spi_master_tb.vhd vsim ${vcom_lib}.spi_master_tb log -r * add wave -r -hex sim:/spi_master_tb/uut/* add wave -hex sim:/spi_master_tb/lms/* add wave -hex sim:/spi_master_tb/lms/spi_reg_proc/* run -all wave zoomfull bladeRF-2024.05/hdl/fpga/ip/nuand/lms6_spi_controller/qsys/000077500000000000000000000000001457144405000233705ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/lms6_spi_controller/qsys/lms6_spi_controller_hw.tcl000066400000000000000000000137751457144405000306060ustar00rootroot00000000000000# TCL File Generated by Component Editor 15.0 # Thu Jun 25 21:35:08 EDT 2015 # DO NOT MODIFY # # lms6_spi_controller "lms6_spi_controller" v1.0 # Nuand, LLC 2015.06.25.21:35:07 # SPI Controller for LMS6002D # # # request TCL package from ACDS 15.0 # package require -exact qsys 15.0 # # module lms6_spi_controller # set_module_property DESCRIPTION "SPI Controller for LMS6002D" set_module_property NAME lms6_spi_controller set_module_property VERSION 1.0 set_module_property INTERNAL false set_module_property OPAQUE_ADDRESS_MAP true set_module_property GROUP "Interface Protocols/Serial" set_module_property AUTHOR "Nuand, LLC" set_module_property DISPLAY_NAME lms6_spi_controller set_module_property INSTANTIATE_IN_SYSTEM_MODULE true set_module_property EDITABLE true set_module_property REPORT_TO_TALKBACK false set_module_property ALLOW_GREYBOX_GENERATION false set_module_property REPORT_HIERARCHY false # # file sets # add_fileset QUARTUS_SYNTH QUARTUS_SYNTH "" "" set_fileset_property QUARTUS_SYNTH TOP_LEVEL lms6_spi_controller set_fileset_property QUARTUS_SYNTH ENABLE_RELATIVE_INCLUDE_PATHS false set_fileset_property QUARTUS_SYNTH ENABLE_FILE_OVERWRITE_MODE false add_fileset_file lms6_spi_controller.qip OTHER PATH ../lms6_spi_controller.qip # # parameters # add_parameter CLOCK_DIV INTEGER 2 set_parameter_property CLOCK_DIV DEFAULT_VALUE 2 set_parameter_property CLOCK_DIV DISPLAY_NAME CLOCK_DIV set_parameter_property CLOCK_DIV TYPE INTEGER set_parameter_property CLOCK_DIV UNITS None set_parameter_property CLOCK_DIV ALLOWED_RANGES -2147483648:2147483647 set_parameter_property CLOCK_DIV HDL_PARAMETER true add_parameter ADDR_WIDTH POSITIVE 8 set_parameter_property ADDR_WIDTH DEFAULT_VALUE 8 set_parameter_property ADDR_WIDTH DISPLAY_NAME ADDR_WIDTH set_parameter_property ADDR_WIDTH TYPE POSITIVE set_parameter_property ADDR_WIDTH ENABLED false set_parameter_property ADDR_WIDTH UNITS None set_parameter_property ADDR_WIDTH ALLOWED_RANGES 1:2147483647 set_parameter_property ADDR_WIDTH HDL_PARAMETER true add_parameter DATA_WIDTH POSITIVE 8 set_parameter_property DATA_WIDTH DEFAULT_VALUE 8 set_parameter_property DATA_WIDTH DISPLAY_NAME DATA_WIDTH set_parameter_property DATA_WIDTH TYPE POSITIVE set_parameter_property DATA_WIDTH ENABLED false set_parameter_property DATA_WIDTH UNITS None set_parameter_property DATA_WIDTH ALLOWED_RANGES 1:2147483647 set_parameter_property DATA_WIDTH HDL_PARAMETER true # # display items # # # connection point reset_sink # add_interface reset_sink reset end set_interface_property reset_sink associatedClock clock_sink set_interface_property reset_sink synchronousEdges DEASSERT set_interface_property reset_sink ENABLED true set_interface_property reset_sink EXPORT_OF "" set_interface_property reset_sink PORT_NAME_MAP "" set_interface_property reset_sink CMSIS_SVD_VARIABLES "" set_interface_property reset_sink SVD_ADDRESS_GROUP "" add_interface_port reset_sink mm_reset reset Input 1 # # connection point clock_sink # add_interface clock_sink clock end set_interface_property clock_sink clockRate 80000000 set_interface_property clock_sink ENABLED true set_interface_property clock_sink EXPORT_OF "" set_interface_property clock_sink PORT_NAME_MAP "" set_interface_property clock_sink CMSIS_SVD_VARIABLES "" set_interface_property clock_sink SVD_ADDRESS_GROUP "" add_interface_port clock_sink mm_clock clk Input 1 # # connection point conduit_end # add_interface conduit_end conduit end set_interface_property conduit_end associatedClock clock_sink set_interface_property conduit_end associatedReset reset_sink set_interface_property conduit_end ENABLED true set_interface_property conduit_end EXPORT_OF "" set_interface_property conduit_end PORT_NAME_MAP "" set_interface_property conduit_end CMSIS_SVD_VARIABLES "" set_interface_property conduit_end SVD_ADDRESS_GROUP "" add_interface_port conduit_end sclk sclk Output 1 add_interface_port conduit_end miso miso Input 1 add_interface_port conduit_end mosi mosi Output 1 add_interface_port conduit_end cs_n ss_n Output 1 # # connection point avalon_slave_0 # add_interface avalon_slave_0 avalon end set_interface_property avalon_slave_0 addressUnits SYMBOLS set_interface_property avalon_slave_0 associatedClock clock_sink set_interface_property avalon_slave_0 associatedReset reset_sink set_interface_property avalon_slave_0 bitsPerSymbol 8 set_interface_property avalon_slave_0 burstOnBurstBoundariesOnly false set_interface_property avalon_slave_0 burstcountUnits SYMBOLS set_interface_property avalon_slave_0 explicitAddressSpan 0 set_interface_property avalon_slave_0 holdTime 0 set_interface_property avalon_slave_0 linewrapBursts false set_interface_property avalon_slave_0 maximumPendingReadTransactions 1 set_interface_property avalon_slave_0 maximumPendingWriteTransactions 0 set_interface_property avalon_slave_0 readLatency 0 set_interface_property avalon_slave_0 readWaitTime 1 set_interface_property avalon_slave_0 setupTime 0 set_interface_property avalon_slave_0 timingUnits Cycles set_interface_property avalon_slave_0 writeWaitTime 0 set_interface_property avalon_slave_0 ENABLED true set_interface_property avalon_slave_0 EXPORT_OF "" set_interface_property avalon_slave_0 PORT_NAME_MAP "" set_interface_property avalon_slave_0 CMSIS_SVD_VARIABLES "" set_interface_property avalon_slave_0 SVD_ADDRESS_GROUP "" add_interface_port avalon_slave_0 mm_addr address Input addr_width add_interface_port avalon_slave_0 mm_din writedata Input data_width add_interface_port avalon_slave_0 mm_dout readdata Output data_width add_interface_port avalon_slave_0 mm_dout_val readdatavalid Output 1 add_interface_port avalon_slave_0 mm_busy waitrequest Output 1 add_interface_port avalon_slave_0 mm_read read Input 1 add_interface_port avalon_slave_0 mm_write write Input 1 set_interface_assignment avalon_slave_0 embeddedsw.configuration.isFlash 0 set_interface_assignment avalon_slave_0 embeddedsw.configuration.isMemoryDevice 0 set_interface_assignment avalon_slave_0 embeddedsw.configuration.isNonVolatileStorage 0 set_interface_assignment avalon_slave_0 embeddedsw.configuration.isPrintableDevice 0 bladeRF-2024.05/hdl/fpga/ip/nuand/lms6_spi_controller/vhdl/000077500000000000000000000000001457144405000233265ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/lms6_spi_controller/vhdl/lms6_spi_controller.vhd000066400000000000000000000203101457144405000300240ustar00rootroot00000000000000-- From Altera Solution ID rd05312011_49, need the following for Qsys to use VHDL 2008: -- altera vhdl_input_version vhdl_2008 library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.math_real.log2; -- ----------------------------------------------------------------------------- -- Entity: lms6_spi_controller -- Description: Avalon Memory-Mapped SPI controller for the LMS6002D. -- Standard: VHDL-2008 -- -- WARNING: This module has not been tested with non-default generics. -- ----------------------------------------------------------------------------- entity lms6_spi_controller is generic( CLOCK_DIV : positive range 2 to 16 := 2; -- Ratio of system clock to SPI clock ADDR_WIDTH : positive := 8; -- Number of address bits in an operation DATA_WIDTH : positive := 8 -- Number of data bits in an operation ); port( -- Physical Interface sclk : out std_logic; miso : in std_logic; mosi : out std_logic; cs_n : out std_logic; -- Avalon-MM Interface mm_clock : in std_logic; -- System clock mm_reset : in std_logic; -- System reset mm_read : in std_logic; -- Initiates a SPI read operation mm_write : in std_logic; -- Initiates a SPI write operation mm_addr : in std_logic_vector(ADDR_WIDTH-1 downto 0); -- SPI address mm_din : in std_logic_vector(DATA_WIDTH-1 downto 0); -- SPI write data mm_dout : out std_logic_vector(DATA_WIDTH-1 downto 0); -- SPI read data mm_dout_val : out std_logic; -- Read data valid. mm_busy : out std_logic -- Indicates the module is busy processing a command ); end entity; architecture lms6 of lms6_spi_controller is constant LMS_ADDR_WIDTH : positive := 7; constant LMS_DATA_WIDTH : positive := 8; constant NUM_PLL_REGS : positive := 4; constant MSG_LENGTH : positive := 1 + LMS_ADDR_WIDTH + LMS_DATA_WIDTH; -- Special LMS PLL Register Addresses constant TX0_ADDR : std_logic_vector(ADDR_WIDTH-1 downto 0) := x"90"; constant TX1_ADDR : std_logic_vector(ADDR_WIDTH-1 downto 0) := x"91"; constant TX2_ADDR : std_logic_vector(ADDR_WIDTH-1 downto 0) := x"92"; constant TX3_ADDR : std_logic_vector(ADDR_WIDTH-1 downto 0) := x"93"; constant RX0_ADDR : std_logic_vector(ADDR_WIDTH-1 downto 0) := x"A0"; constant RX1_ADDR : std_logic_vector(ADDR_WIDTH-1 downto 0) := x"A1"; constant RX2_ADDR : std_logic_vector(ADDR_WIDTH-1 downto 0) := x"A2"; constant RX3_ADDR : std_logic_vector(ADDR_WIDTH-1 downto 0) := x"A3"; -- FSM States type fsm_t is ( IDLE, SHIFT ); -- State of internal signals type state_t is record state : fsm_t; clock_count : unsigned(integer(log2(real(CLOCK_DIV)))-1 downto 0); shift_en : std_logic; shift_count : natural range 0 to MSG_LENGTH*NUM_PLL_REGS; shift_out_reg : unsigned(MSG_LENGTH*NUM_PLL_REGS-1 downto 0); shift_in_reg : unsigned(MSG_LENGTH-1 downto 0); sclk : std_logic; cs_n : std_logic; read_op : std_logic; rd_data_valid : std_logic; end record; constant reset_value : state_t := ( state => IDLE, clock_count => (others => '0'), shift_en => '0', shift_count => 0, shift_out_reg => (others => '0'), shift_in_reg => (others => '0'), sclk => '0', cs_n => '1', read_op => '0', rd_data_valid => '0' ); signal current : state_t; signal future : state_t; begin sync_proc : process( mm_clock, mm_reset ) begin if( mm_reset = '1' ) then current <= reset_value; elsif( rising_edge(mm_clock) ) then current <= future; end if; end process; comb_proc : process( all ) begin -- Physical Outputs sclk <= current.sclk; cs_n <= current.cs_n; mosi <= current.shift_out_reg(state_t.shift_out_reg'left); -- Avalon-MM outputs mm_dout <= std_logic_vector(current.shift_in_reg(LMS_DATA_WIDTH-1 downto 0)); mm_dout_val <= current.rd_data_valid; mm_busy <= '1'; -- Next state defaults future <= current; future.sclk <= '0'; future.cs_n <= '1'; future.shift_en <= '0'; future.rd_data_valid <= '0'; case( current.state ) is when IDLE => future.clock_count <= (others => '0'); future.read_op <= mm_read; mm_busy <= '0'; -- Take advantage of the multi-write capability of the LMS6 SPI -- interface. The only registers that we are going to support -- for now are the TX and RX NINT and NFRAC registers -- controlling the PLL settings. An extra address bit was added -- to the Avalon-MM interface and indicates that a multi-write -- message is intended. We queue up to NUM_PLL_REGS write -- transactions in the shift_out_reg. Upon detecting a write to -- the final register, the shift_count is set to the max. -- Otherwise, the default for a single message is used. case (mm_addr) is when TX3_ADDR => -- Multi-message future.shift_count <= MSG_LENGTH*NUM_PLL_REGS; when RX3_ADDR => -- Multi-message future.shift_count <= MSG_LENGTH*NUM_PLL_REGS; when others => -- Single message future.shift_count <= MSG_LENGTH; end case; if( (mm_read xor mm_write) = '1' ) then future.shift_out_reg <= mm_write & unsigned(mm_addr(LMS_ADDR_WIDTH-1 downto 0)) & unsigned(mm_din) & current.shift_out_reg(current.shift_out_reg'left downto MSG_LENGTH); -- Next state logic case (mm_addr) is when TX0_ADDR | TX1_ADDR | TX2_ADDR => future.state <= IDLE; when RX0_ADDR | RX1_ADDR | RX2_ADDR => future.state <= IDLE; when others => future.state <= SHIFT; end case; end if; when SHIFT => future.clock_count <= current.clock_count + 1; future.cs_n <= '0'; future.sclk <= current.clock_count(current.clock_count'left); if( current.clock_count = CLOCK_DIV-1 ) then future.shift_en <= '1'; else future.shift_en <= '0'; end if; if( current.shift_en = '1' ) then future.shift_in_reg <= current.shift_in_reg(current.shift_in_reg'left-1 downto current.shift_in_reg'right) & miso; future.shift_out_reg <= current.shift_out_reg(current.shift_out_reg'left-1 downto current.shift_out_reg'right) & '0'; future.shift_count <= current.shift_count - 1; if( current.shift_count = 1 ) then -- Only assert read_valid if a read command was issued future.rd_data_valid <= current.read_op; future.state <= IDLE; end if; end if; end case; end process; end architecture; bladeRF-2024.05/hdl/fpga/ip/nuand/lms6_spi_controller/vhdl/tb/000077500000000000000000000000001457144405000237335ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/lms6_spi_controller/vhdl/tb/lms6002d_model.vhd000066400000000000000000000150051457144405000270660ustar00rootroot00000000000000-- -- -- !!! ======================== [ WARNING ] ======================== !!! -- -- QUICK-AND-DIRTY TESTBENCH ... SCHEDULED FOR CLEAN UP -- -- !!! ======================== [ WARNING ] ======================== !!! -- -- -- Copyright (c) 2013 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; use ieee.math_real.all ; use ieee.math_complex.all ; entity lms6002d_model is port ( -- LMS RX Interface rx_clock : in std_logic ; rx_clock_out : buffer std_logic ; rx_data : buffer signed(11 downto 0) ; rx_enable : in std_logic ; rx_iq_select : buffer std_logic ; -- LMS TX Interface tx_clock : in std_logic ; tx_data : in signed(11 downto 0) ; tx_enable : in std_logic ; tx_iq_select : in std_logic ; -- LMS SPI Interface sclk : in std_logic ; sen : in std_logic ; sdio : in std_logic ; sdo : buffer std_logic ; -- LMS Control Interface pll_out : buffer std_logic ; resetx : in std_logic ) ; end entity ; -- lms6002d_model architecture arch of lms6002d_model is constant SPI_CMD_WIDTH : positive := 1; constant SPI_ADDR_WIDTH : positive := 7; constant SPI_DATA_WIDTH : positive := 8; constant SPI_MSG_WIDTH : positive := 16; -- total number of bits in a SPI message constant SPI_NUM_REGS : positive := 128; -- number of SPI registers type spi_registers_t is array( 0 to SPI_NUM_REGS-1 ) of std_logic_vector( SPI_DATA_WIDTH-1 downto 0 ); signal spi_registers : spi_registers_t := (others => (others => '1') ); begin pll_out <= '0' ; -- Write transmit samples to a file or drop them on the floor -- Read receive samples from a file or predetermined tone rx_clock_out <= rx_clock ; drive_rx_data : process( resetx, rx_clock ) begin if( resetx = '0' ) then rx_data <= (others =>'0') ; rx_iq_select <= '0' ; elsif( rising_edge(rx_clock) ) then if( rx_enable = '1' ) then rx_data <= rx_data + 1 ; rx_iq_select <= not rx_iq_select ; else rx_data <= (others =>'0') ; rx_iq_select <= '0' ; end if ; end if ; end process ; -- Keep track of the SPI register set spi_reg_proc : process( sclk ) variable ptr : natural range 0 to SPI_MSG_WIDTH-1 := 0; variable addr : std_logic_vector( SPI_ADDR_WIDTH-1 downto 0 ) := (others => '0'); variable data : std_logic_vector( SPI_DATA_WIDTH-1 downto 0 ) := (others => '0'); -- Not going to bother making this generic variable cmd : std_logic := '0'; constant RD_CMD : std_logic := '0'; constant WR_CMD : std_logic := '1'; -- Trying this method out as a thought experiment since SPI is isolated. -- The main register array is a signal because we may want to use it elsewhere. type spi_state_t is ( RX_CMD, RX_ADDR, RX_DATA, TX_DATA ); variable spi_state : spi_state_t := RX_CMD; begin sdo <= '0'; -- default if( rising_edge(sclk) ) then if( sen = '0' ) then case( spi_state ) is when RX_CMD => cmd := sdio; ptr := ptr + 1; if( ptr = SPI_CMD_WIDTH ) then ptr := 0; spi_state := RX_ADDR; end if; when RX_ADDR => addr := addr(addr'left-1 downto 0) & sdio; ptr := ptr + 1; if( ptr = SPI_ADDR_WIDTH ) then if( cmd = RD_CMD ) then data := spi_registers(to_integer(unsigned(addr))); ptr := 0; spi_state := TX_DATA; elsif( cmd = WR_CMD ) then ptr := 0; spi_state := RX_DATA; else report "Unknown command value" severity failure; end if; end if; when RX_DATA => data := data(data'left-1 downto 0) & sdio; ptr := ptr + 1; if( ptr = SPI_DATA_WIDTH ) then spi_registers(to_integer(unsigned(addr))) <= data; ptr := 0; spi_state := RX_CMD; end if; when TX_DATA => sdo <= data(data'left); data := data(data'left-1 downto 0) & "0"; ptr := ptr + 1; if( ptr = SPI_DATA_WIDTH ) then ptr := 0; spi_state := RX_CMD; end if; end case; else ptr := 0; data := (others => '0'); addr := (others => '0'); cmd := '0'; spi_state := RX_CMD; end if; end if; end process; end architecture ; -- arch bladeRF-2024.05/hdl/fpga/ip/nuand/lms6_spi_controller/vhdl/tb/nios_model.vhd000066400000000000000000000126371457144405000265770ustar00rootroot00000000000000-- -- -- !!! ======================== [ WARNING ] ======================== !!! -- -- QUICK-AND-DIRTY TESTBENCH ... SCHEDULED FOR CLEAN UP -- -- !!! ======================== [ WARNING ] ======================== !!! -- -- library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; library std; use std.env.all; entity nios_model is generic( ADDR_WIDTH : positive := 8; -- Number of address bits in an operation DATA_WIDTH : positive := 8 -- Number of data bits in an operation ); port( -- Avalon-MM Interface clock : out std_logic; reset : out std_logic; rd_req : out std_logic; wr_req : out std_logic; addr : out std_logic_vector(ADDR_WIDTH-1 downto 0); wr_data : out std_logic_vector(DATA_WIDTH-1 downto 0); rd_data : in std_logic_vector(DATA_WIDTH-1 downto 0); rd_data_val : in std_logic; mem_hold : in std_logic ); end entity; architecture arch of nios_model is function half_clk_per( freq : natural ) return time is begin return ( (0.5 sec) / real(freq) ); end function; constant SYS_CLK_PER : time := half_clk_per( 80e6 ); constant SPI_CLK_DIV : positive := 2; type command_t is ( READ, WRITE ); type operation_t is record cmd : command_t; addr : std_logic_vector(ADDR_WIDTH-1 downto 0); data : std_logic_vector(DATA_WIDTH-1 downto 0); end record; type operations_t is array(natural range<>) of operation_t; constant operations : operations_t := ( (cmd => READ, addr => 8x"55", data => (others => '1') ), (cmd => READ, addr => 8x"7C", data => (others => '1') ), (cmd => WRITE, addr => 8x"27", data => 8x"42" ), (cmd => READ, addr => 8x"27", data => 8x"42" ), (cmd => WRITE, addr => 8x"90", data => 8x"10" ), (cmd => WRITE, addr => 8x"91", data => 8x"11" ), (cmd => WRITE, addr => 8x"92", data => 8x"12" ), (cmd => WRITE, addr => 8x"93", data => 8x"13" ), (cmd => WRITE, addr => 8x"A0", data => 8x"20" ), (cmd => WRITE, addr => 8x"A1", data => 8x"21" ), (cmd => WRITE, addr => 8x"A2", data => 8x"22" ), (cmd => WRITE, addr => 8x"A3", data => 8x"23" ), (cmd => READ, addr => 8x"10", data => 8x"10" ), (cmd => READ, addr => 8x"11", data => 8x"11" ), (cmd => READ, addr => 8x"12", data => 8x"12" ), (cmd => READ, addr => 8x"13", data => 8x"13" ), (cmd => READ, addr => 8x"20", data => 8x"20" ), (cmd => READ, addr => 8x"21", data => 8x"21" ), (cmd => READ, addr => 8x"22", data => 8x"22" ), (cmd => READ, addr => 8x"23", data => 8x"23" ) ); type state_t is ( IDLE, RUN, CHECK_READ, NEXT_CMD ); signal state : state_t := IDLE; signal sys_clk : std_logic := '1'; signal sys_rst : std_logic := '1'; begin sys_clk <= not sys_clk after SYS_CLK_PER; sys_rst <= '1', '0' after SYS_CLK_PER*5; clock <= sys_clk; reset <= sys_rst; stim_proc : process( sys_clk, sys_rst ) variable op : natural range operations'range := operations'low; variable clock_count : natural := 0; begin if( sys_rst = '1' ) then op := operations'low; clock_count := 0; state <= RUN; rd_req <= '0'; wr_req <= '0'; addr <= (others => '0'); wr_data <= (others => '0'); elsif( rising_edge(sys_clk) ) then clock_count := clock_count + 1; rd_req <= '0'; wr_req <= '0'; addr <= (others => '0'); wr_data <= (others => '0'); case( state ) is when IDLE => if( mem_hold = '0' and clock_count >= operations'length*SPI_CLK_DIV*(ADDR_WIDTH+DATA_WIDTH)+10 ) then stop(0); end if; when RUN => clock_count := 0; if( mem_hold = '0' ) then case (operations(op).cmd) is when READ => rd_req <= '1'; state <= CHECK_READ; when WRITE => wr_req <= '1'; state <= NEXT_CMD; end case; addr <= operations(op).addr; wr_data <= operations(op).data; end if; when CHECK_READ => if( rd_data_val = '1' ) then assert (operations(op).data = rd_data) report "Read data does not match expected!" severity failure; state <= NEXT_CMD; end if; when NEXT_CMD => if( mem_hold = '0' and clock_count >= 64 ) then if( op = operations'high ) then state <= IDLE; else op := op + 1; state <= RUN; end if; end if; end case; end if; end process; end architecture; bladeRF-2024.05/hdl/fpga/ip/nuand/lms6_spi_controller/vhdl/tb/spi_master_tb.vhd000066400000000000000000000104471457144405000272770ustar00rootroot00000000000000library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity spi_master_tb is end entity; architecture tb of spi_master_tb is constant CLOCK_DIV : positive range 2 to 16 := 2; -- Ratio of system clock to SPI clock constant ADDR_WIDTH : positive := 8; -- Number of address bits in an operation constant DATA_WIDTH : positive := 8; -- Number of data bits in an operation signal clock : std_logic; signal reset : std_logic; signal rd_req : std_logic; signal wr_req : std_logic; signal addr : std_logic_vector(ADDR_WIDTH-1 downto 0); signal wr_data : std_logic_vector(DATA_WIDTH-1 downto 0); signal rd_data : std_logic_vector(DATA_WIDTH-1 downto 0); signal rd_data_val : std_logic; signal mem_hold : std_logic; signal sclk : std_logic; signal miso : std_logic; signal mosi : std_logic; signal cs_n : std_logic; begin nios : entity work.nios_model generic map( ADDR_WIDTH => ADDR_WIDTH, DATA_WIDTH => DATA_WIDTH ) port map( -- Avalon-MM Interface clock => clock, -- out std_logic; reset => reset, -- out std_logic; rd_req => rd_req, -- out std_logic wr_req => wr_req, -- out std_logic addr => addr, -- out std_logic_vector(ADDR_WIDTH-1 downto 0); wr_data => wr_data, -- out std_logic_vector(DATA_WIDTH-1 downto 0); rd_data => rd_data, -- in std_logic_vector(DATA_WIDTH-1 downto 0); rd_data_val => rd_data_val, -- in std_logic mem_hold => mem_hold -- in std_logic ); uut : entity work.lms6_spi_controller(lms6) generic map( CLOCK_DIV => CLOCK_DIV, ADDR_WIDTH => ADDR_WIDTH, DATA_WIDTH => DATA_WIDTH ) port map( -- Physical Interface sclk => sclk, -- out std_logic; miso => miso, -- in std_logic; mosi => mosi, -- out std_logic; cs_n => cs_n, -- out std_logic; -- Avalon-MM Interface mm_clock => clock, -- in std_logic; mm_reset => reset, -- in std_logic; mm_read => rd_req, -- in std_logic; mm_write => wr_req, -- in std_logic; mm_addr => addr, -- in std_logic_vector(ADDR_WIDTH-1 downto 0); mm_din => wr_data, -- in std_logic_vector(DATA_WIDTH-1 downto 0); mm_dout => rd_data, -- out std_logic_vector(DATA_WIDTH-1 downto 0); mm_dout_val => rd_data_val, -- out std_logic; mm_busy => mem_hold -- out std_logic; ); lms : entity work.lms6002d_model port map ( -- LMS RX Interface rx_clock => '0', -- in std_logic; rx_clock_out => open, -- buffer std_logic; rx_data => open, -- buffer signed(11 downto 0); rx_enable => '0', -- in std_logic; rx_iq_select => open, -- buffer std_logic; -- LMS TX Interface tx_clock => '0', -- in std_logic; tx_data => (others => '0'), -- in signed(11 downto 0); tx_enable => '0', -- in std_logic; tx_iq_select => '0', -- in std_logic; -- LMS SPI Interface sclk => sclk, -- in std_logic; sen => cs_n, -- in std_logic; sdio => mosi, -- in std_logic; sdo => miso, -- buffer std_logic; -- LMS Control Interface pll_out => open, -- buffer std_logic; resetx => '0' -- in std_logic ); end architecture; bladeRF-2024.05/hdl/fpga/ip/nuand/nuand.do000066400000000000000000000073211457144405000200260ustar00rootroot00000000000000proc compile_nuand { root platform } { vlib nuand vcom -work nuand -2008 [file join $root ./synthesis/constellation_mapper.vhd] vcom -work nuand -2008 [file join $root ./synthesis/sync_fifo.vhd] vcom -work nuand -2008 [file join $root ./synthesis/uart.vhd] vcom -work nuand -2008 [file join $root ./synthesis/cordic.vhd] vcom -work nuand -2008 [file join $root ./synthesis/nco.vhd] vcom -work nuand -2008 [file join $root ./synthesis/fsk_modulator.vhd] vcom -work nuand -2008 [file join $root ./synthesis/fsk_demodulator.vhd] vcom -work nuand -2008 [file join $root ./synthesis/uart.vhd] vcom -work nuand -2008 [file join $root ./synthesis/tan_table.vhd] vcom -work nuand -2008 [file join $root ./synthesis/iq_correction.vhd] vcom -work nuand -2008 [file join $root ./synthesis/synchronizer.vhd] vcom -work nuand -2008 [file join $root ./synthesis/reset_synchronizer.vhd] vcom -work nuand -2008 [file join $root ./synthesis/handshake.vhd] vcom -work nuand -2008 [file join $root ./synthesis/tb/handshake_tb.vhd] vcom -work nuand -2008 [file join $root ./synthesis/signal_processing_p.vhd] vcom -work nuand -2008 [file join $root ../altera/common_dcfifo/common_dcfifo.vhd] if { ($platform == "bladerf") || ($platform == "bladerf-micro") } { vcom -work nuand -2008 [file join $root ../../platforms/${platform}/vhdl/wrappers/lb_fifo.vhd] vcom -work nuand -2008 [file join $root ../../platforms/${platform}/vhdl/wrappers/rx_fifo.vhd] vcom -work nuand -2008 [file join $root ../../platforms/${platform}/vhdl/wrappers/tx_fifo.vhd] vcom -work nuand -2008 [file join $root ../../platforms/${platform}/vhdl/wrappers/rx_meta_fifo.vhd] vcom -work nuand -2008 [file join $root ../../platforms/${platform}/vhdl/wrappers/tx_meta_fifo.vhd] } else { # Don't error out because it might not matter... puts "WARNING: Unknown platform: ${platform}" } vcom -work nuand -2008 [file join $root ./synthesis/bit_stripper.vhd] vcom -work nuand -2008 [file join $root ./synthesis/fir_filter.vhd] vcom -work nuand -2008 [file join $root ./synthesis/atsc_tx.vhd] vcom -work nuand -2008 [file join $root ./simulation/util.vhd] vcom -work nuand -2008 [file join $root ./synthesis/tb/fir_filter_tb.vhd] vcom -work nuand -2008 [file join $root ./synthesis/tb/atsc_tx_tb.vhd] vcom -work nuand -2008 [file join $root ./simulation/fx3_model.vhd] vcom -work nuand -2008 [file join $root ./simulation/lms6002d_model.vhd] vcom -work nuand -2008 [file join $root ./synthesis/lms6002d/vhdl/lms6002d.vhd] vcom -work nuand -2008 [file join $root ./synthesis/lms6002d/vhdl/tb/lms6002d_tb.vhd] vcom -work nuand -2008 [file join $root ./synthesis/fifo_readwrite_p.vhd] vcom -work nuand -2008 [file join $root ./synthesis/fifo_reader.vhd] vcom -work nuand -2008 [file join $root ./synthesis/fifo_writer.vhd] vcom -work nuand -2008 [file join $root ./trigger/trigger.vhd] vcom -work nuand -2008 [file join $root ./synthesis/signal_generator.vhd] vcom -work nuand -2008 [file join $root ./synthesis/rx_packet_generator.vhd] vcom -work nuand -2008 [file join $root ./synthesis/set_clear_ff.vhd] vcom -work nuand -2008 [file join $root ./pll_reset/vhdl/pll_reset.vhd] vcom -work nuand -2008 [file join $root ./ps_sync/vhdl/ps_sync.vhd] vcom -work nuand -2008 [file join $root ./rfic_spi_controller/vhdl/rfic_spi_controller.vhd] vcom -work nuand -2008 [file join $root ./synthesis/bladerf_rfic_spi_ctrl.vhd] } proc compile_nuand_tb { root platform } { vcom -work nuand -2008 [file join $root ./simulation/sample_stream_tb.vhd] vcom -work nuand -2008 [file join $root ./simulation/rfic_spi_tb.vhd] } bladeRF-2024.05/hdl/fpga/ip/nuand/pll_reset/000077500000000000000000000000001457144405000203635ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/pll_reset/modelsim/000077500000000000000000000000001457144405000221745ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/pll_reset/modelsim/.gitignore000066400000000000000000000000401457144405000241560ustar00rootroot00000000000000nuand/ work/ vsim.wlf transcriptbladeRF-2024.05/hdl/fpga/ip/nuand/pll_reset/modelsim/pll_reset_tb.do000066400000000000000000000005111457144405000251730ustar00rootroot00000000000000set vcom_lib nuand set vcom_opts {-2008} vlib ${vcom_lib} # UUT vcom {*}$vcom_opts -work ${vcom_lib} ../vhdl/pll_reset.vhd # Testbench vcom {*}$vcom_opts -work ${vcom_lib} ../vhdl/tb/pll_reset_tb.vhd vsim ${vcom_lib}.pll_reset_tb add wave sim:/pll_reset_tb/* add wave sim:/pll_reset_tb/U_pll_reset/* run -all wave zoomfull bladeRF-2024.05/hdl/fpga/ip/nuand/pll_reset/pll_reset.qip000066400000000000000000000005501457144405000230670ustar00rootroot00000000000000# When generating a system, Qsys will copy this file into its synthesis output # directory. All paths below must be relative to that directory. set nuand_ip_dir [file join $::quartus(qip_path) ../../../../../../fpga/ip/nuand] set_global_assignment -name VHDL_FILE -hdl_version VHDL_2008 [file normalize [file join $nuand_ip_dir pll_reset/vhdl/pll_reset.vhd]] bladeRF-2024.05/hdl/fpga/ip/nuand/pll_reset/qsys/000077500000000000000000000000001457144405000213625ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/pll_reset/qsys/.gitignore000066400000000000000000000000031457144405000233430ustar00rootroot00000000000000.*~bladeRF-2024.05/hdl/fpga/ip/nuand/pll_reset/qsys/pll_reset_hw.tcl000066400000000000000000000107431457144405000245620ustar00rootroot00000000000000# TCL File Generated by Component Editor 16.0 # Fri Dec 01 14:41:03 EST 2017 # DO NOT MODIFY # # pll_reset "PLL Reset Controller" v2.0 # Nuand, LLC 2017.12.01.14:41:03 # Monitors a PLL and resets it if lock is lost. # # # request TCL package from ACDS 16.0 # package require -exact qsys 16.0 # # module pll_reset # set_module_property DESCRIPTION "Monitors a PLL and resets it if lock is lost." set_module_property NAME pll_reset set_module_property VERSION 2.0 set_module_property INTERNAL false set_module_property OPAQUE_ADDRESS_MAP true set_module_property GROUP Nuand set_module_property AUTHOR "Nuand, LLC" set_module_property DISPLAY_NAME "PLL Reset Controller" set_module_property INSTANTIATE_IN_SYSTEM_MODULE true set_module_property EDITABLE true set_module_property REPORT_TO_TALKBACK false set_module_property ALLOW_GREYBOX_GENERATION false set_module_property REPORT_HIERARCHY false # # file sets # add_fileset QUARTUS_SYNTH QUARTUS_SYNTH "" "" set_fileset_property QUARTUS_SYNTH TOP_LEVEL pll_reset set_fileset_property QUARTUS_SYNTH ENABLE_RELATIVE_INCLUDE_PATHS false set_fileset_property QUARTUS_SYNTH ENABLE_FILE_OVERWRITE_MODE false add_fileset_file pll_reset.vhd VHDL PATH ../vhdl/pll_reset.vhd TOP_LEVEL_FILE add_fileset SIM_VHDL SIM_VHDL "" "" set_fileset_property SIM_VHDL TOP_LEVEL pll_reset set_fileset_property SIM_VHDL ENABLE_RELATIVE_INCLUDE_PATHS false set_fileset_property SIM_VHDL ENABLE_FILE_OVERWRITE_MODE false add_fileset_file pll_reset.vhd VHDL PATH ../vhdl/pll_reset.vhd add_fileset_file pll_reset_tb.vhd VHDL PATH ../vhdl/tb/pll_reset_tb.vhd # # parameters # add_parameter SYS_CLOCK_FREQ_HZ NATURAL 10000000 "System clock frequency in Hz" set_parameter_property SYS_CLOCK_FREQ_HZ DEFAULT_VALUE 10000000 set_parameter_property SYS_CLOCK_FREQ_HZ DISPLAY_NAME SYS_CLOCK_FREQ_HZ set_parameter_property SYS_CLOCK_FREQ_HZ TYPE NATURAL set_parameter_property SYS_CLOCK_FREQ_HZ UNITS None set_parameter_property SYS_CLOCK_FREQ_HZ ALLOWED_RANGES 0:2147483647 set_parameter_property SYS_CLOCK_FREQ_HZ DESCRIPTION "System clock frequency in Hz" set_parameter_property SYS_CLOCK_FREQ_HZ HDL_PARAMETER true add_parameter DEVICE_FAMILY STRING "Cyclone V" "Cyclone IV or Cyclone V" set_parameter_property DEVICE_FAMILY DEFAULT_VALUE "Cyclone V" set_parameter_property DEVICE_FAMILY DISPLAY_NAME DEVICE_FAMILY set_parameter_property DEVICE_FAMILY WIDTH "" set_parameter_property DEVICE_FAMILY TYPE STRING set_parameter_property DEVICE_FAMILY UNITS None set_parameter_property DEVICE_FAMILY DESCRIPTION "Cyclone IV or Cyclone V" set_parameter_property DEVICE_FAMILY HDL_PARAMETER true # # display items # # # connection point clock # add_interface clock clock end set_interface_property clock clockRate 0 set_interface_property clock ENABLED true set_interface_property clock EXPORT_OF "" set_interface_property clock PORT_NAME_MAP "" set_interface_property clock CMSIS_SVD_VARIABLES "" set_interface_property clock SVD_ADDRESS_GROUP "" add_interface_port clock sys_clock clk Input 1 # # connection point pll_locked # add_interface pll_locked conduit end set_interface_property pll_locked associatedClock clock set_interface_property pll_locked associatedReset "" set_interface_property pll_locked ENABLED true set_interface_property pll_locked EXPORT_OF "" set_interface_property pll_locked PORT_NAME_MAP "" set_interface_property pll_locked CMSIS_SVD_VARIABLES "" set_interface_property pll_locked SVD_ADDRESS_GROUP "" add_interface_port pll_locked pll_locked pll_locked Input 1 # # connection point pll_locked_out # add_interface pll_locked_out conduit end set_interface_property pll_locked_out associatedClock clock set_interface_property pll_locked_out associatedReset "" set_interface_property pll_locked_out ENABLED true set_interface_property pll_locked_out EXPORT_OF "" set_interface_property pll_locked_out PORT_NAME_MAP "" set_interface_property pll_locked_out CMSIS_SVD_VARIABLES "" set_interface_property pll_locked_out SVD_ADDRESS_GROUP "" add_interface_port pll_locked_out pll_locked_out pll_locked_out Output 1 # # connection point pll_reset # add_interface pll_reset conduit end set_interface_property pll_reset associatedClock clock set_interface_property pll_reset associatedReset "" set_interface_property pll_reset ENABLED true set_interface_property pll_reset EXPORT_OF "" set_interface_property pll_reset PORT_NAME_MAP "" set_interface_property pll_reset CMSIS_SVD_VARIABLES "" set_interface_property pll_reset SVD_ADDRESS_GROUP "" add_interface_port pll_reset pll_reset pll_reset Output 1 bladeRF-2024.05/hdl/fpga/ip/nuand/pll_reset/vhdl/000077500000000000000000000000001457144405000213205ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/pll_reset/vhdl/pll_reset.vhd000066400000000000000000000116171457144405000240220ustar00rootroot00000000000000-- From Altera Solution ID rd05312011_49, need the following for Qsys to use VHDL 2008: -- altera vhdl_input_version vhdl_2008 -- PLL Reset Controller -- Copyright (c) 2017 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity pll_reset is generic ( SYS_CLOCK_FREQ_HZ : natural := 10_000_000; DEVICE_FAMILY : string := "Cyclone V" ); port ( sys_clock : in std_logic; pll_locked : in std_logic; pll_locked_out : out std_logic; pll_reset : out std_logic ); end entity; -- pll_reset architecture fsm of pll_reset is type fsm_t is ( INIT, ASSERT_RESET, WAIT_FOR_LOCK, WAIT_FOR_UNLOCK ); type state_t is record state : fsm_t; downcount : natural; pll_lock : std_logic; pll_reset : std_logic; end record; constant reset_value : state_t := ( state => INIT, downcount => 0, pll_lock => '0', pll_reset => '0' ); signal current : state_t := reset_value; signal future : state_t := reset_value; function reset_duration(device : string) return time is variable rv : time; begin if (device = "Cyclone IV") then rv := 1.1 ms; elsif (device = "Cyclone V") then rv := 1.1 ms; else report "unknown device family: " & device severity failure; end if; return rv; end function reset_duration; function time_to_ticks(duration : time; freq : natural) return natural is variable period : time; variable rv : natural; begin period := 1 sec / freq; rv := duration / period; return rv; end function time_to_ticks; begin sync_proc : process(sys_clock) begin if(rising_edge(sys_clock)) then current <= future; end if; end process sync_proc; comb_proc : process(all) begin -- outputs pll_locked_out <= current.pll_lock; pll_reset <= current.pll_reset; -- defaults future <= current; future.pll_lock <= pll_locked; future.pll_reset <= '0'; -- states case current.state is when INIT => -- prepare countdown future.downcount <= time_to_ticks(reset_duration(DEVICE_FAMILY), SYS_CLOCK_FREQ_HZ); future.state <= ASSERT_RESET; when ASSERT_RESET => -- keep reset asserted until countdown is done future.pll_reset <= '1'; if (current.downcount = 0) then future.downcount <= time_to_ticks(reset_duration(DEVICE_FAMILY), SYS_CLOCK_FREQ_HZ); future.state <= WAIT_FOR_LOCK; else future.downcount <= current.downcount - 1; end if; when WAIT_FOR_LOCK => -- de-assert reset and hope it locks if (current.pll_lock = '1') then -- we're good future.state <= WAIT_FOR_UNLOCK; end if; if (current.downcount = 0) then -- it didn't lock, let's try again future.downcount <= time_to_ticks(reset_duration(DEVICE_FAMILY), SYS_CLOCK_FREQ_HZ); future.state <= INIT; else future.downcount <= current.downcount - 1; end if; when WAIT_FOR_UNLOCK => -- monitor for PLL unlock if (current.pll_lock = '0') then future.state <= INIT; end if; end case; end process comb_proc; end architecture fsm; bladeRF-2024.05/hdl/fpga/ip/nuand/pll_reset/vhdl/tb/000077500000000000000000000000001457144405000217255ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/pll_reset/vhdl/tb/pll_reset_tb.vhd000066400000000000000000000204361457144405000251130ustar00rootroot00000000000000-- PLL Reset Controller Simulation Testbench -- Copyright (c) 2017 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; library nuand; entity pll_reset_tb is end entity; -- pll_reset_tb architecture tb of pll_reset_tb is signal done : boolean := false; signal clock : std_logic := '1'; signal pll_locked : std_logic := '0'; signal pll_locked_out : std_logic; signal pll_reset : std_logic; constant DEVICE_FAMILY : string := "Cyclone V"; constant CLOCK_HZ : natural := 10_000_000; constant EXPECTED_RESET_TIME : time := 1.1 ms; constant ALLOWED_MARGIN : time := 0.1 ms; type stage_t is ( TEST_START, TEST_PAUSE, WAIT_FOR_RESET_0, WAIT_FOR_RESET_1, WAIT_FOR_PLL_LOCKED_OUT_0, WAIT_FOR_PLL_LOCKED_OUT_1, TEST_END ); signal stage : stage_t := TEST_START; -- freq_to_period: convert from frequency in Hz to period in seconds function freq_to_period(freq : natural) return time is begin return 1 sec / freq; end function freq_to_period; begin clock <= not clock after freq_to_period(CLOCK_HZ)/2 when not done else '0'; U_pll_reset : entity nuand.pll_reset generic map ( SYS_CLOCK_FREQ_HZ => CLOCK_HZ, DEVICE_FAMILY => DEVICE_FAMILY ) port map ( sys_clock => clock, pll_locked => pll_locked, pll_locked_out => pll_locked_out, pll_reset => pll_reset ); tb : process variable start_time : time; begin -- Make sure we're in reset report "TEST: START"; stage <= TEST_START; pll_locked <= '0'; start_time := now; wait for 1 us; assert (pll_reset = '1') report "pll_reset not asserted" severity failure; -- PLL Reset state machine is holding the PLL in reset -- Wait for reset to drop stage <= WAIT_FOR_RESET_0; wait until pll_reset = '0'; assert (now - start_time) > (EXPECTED_RESET_TIME - ALLOWED_MARGIN) report "FAIL: pll_reset = 0 early " & to_string(now - start_time) severity failure; assert (now - start_time) < (EXPECTED_RESET_TIME + ALLOWED_MARGIN) report "FAIL: pll_reset = 0 late " & to_string(now - start_time) severity failure; report "GOOD: pll_reset = 0 after " & to_string(now - start_time); -- Simulate a reasonable length of time to lock wait for 100 us; -- Lock the PLL report "TEST: simulating PLL lock"; stage <= WAIT_FOR_PLL_LOCKED_OUT_1; pll_locked <= '1'; start_time := now; wait until pll_locked_out = '1'; report "INFO: pll_locked_out = 1 after " & to_string(now - start_time); -- maintain lock for awhile report "TEST: pausing with PLL locked"; stage <= TEST_PAUSE; while (now - start_time < 5 ms) loop assert (pll_reset = '0') report "FAIL: pll_reset unexpectedly asserted" severity failure; wait for 1 us; end loop; -- simulate lock failure report "TEST: simulating lock failure"; stage <= WAIT_FOR_RESET_1; pll_locked <= '0'; start_time := now; wait until pll_reset = '1'; report "INFO: pll_reset = 1 after " & to_string(now - start_time); -- Wait for reset to drop stage <= WAIT_FOR_RESET_0; wait until pll_reset = '0'; assert (now - start_time) > (EXPECTED_RESET_TIME - ALLOWED_MARGIN) report "FAIL: pll_reset = 0 early " & to_string(now - start_time) severity failure; assert (now - start_time) < (EXPECTED_RESET_TIME + ALLOWED_MARGIN) report "FAIL: pll_reset = 0 late " & to_string(now - start_time) severity failure; report "GOOD: pll_reset = 0 after " & to_string(now - start_time); -- Simulate a reasonable length of time to lock wait for 100 us; -- Lock the PLL report "TEST: simulating PLL lock"; stage <= WAIT_FOR_PLL_LOCKED_OUT_1; pll_locked <= '1'; start_time := now; wait until pll_locked_out = '1'; report "INFO: pll_locked_out = 1 after " & to_string(now - start_time); -- maintain lock for awhile report "TEST: pausing with PLL locked"; stage <= TEST_PAUSE; while (now - start_time < 5 ms) loop assert (pll_reset = '0') report "FAIL: pll_reset unexpectedly asserted" severity failure; wait for 1 us; end loop; -- simulate lock failure report "TEST: simulating lock failure"; stage <= WAIT_FOR_RESET_1; pll_locked <= '0'; start_time := now; wait until pll_reset = '1'; report "INFO: pll_reset = 1 after " & to_string(now - start_time); -- Wait for reset to drop stage <= WAIT_FOR_RESET_0; wait until pll_reset = '0'; assert (now - start_time) > (EXPECTED_RESET_TIME - ALLOWED_MARGIN) report "FAIL: pll_reset = 0 early " & to_string(now - start_time) severity failure; assert (now - start_time) < (EXPECTED_RESET_TIME + ALLOWED_MARGIN) report "FAIL: pll_reset = 0 late " & to_string(now - start_time) severity failure; report "GOOD: pll_reset = 0 after " & to_string(now - start_time); -- simulate an unreasonable length of time to lock report "TEST: simulating failure to lock PLL"; stage <= WAIT_FOR_RESET_1; start_time := now; wait until pll_reset = '1'; assert (now - start_time) > (EXPECTED_RESET_TIME - ALLOWED_MARGIN) report "FAIL: pll_reset = 1 early " & to_string(now - start_time) severity failure; assert (now - start_time) < (EXPECTED_RESET_TIME + ALLOWED_MARGIN) report "FAIL: pll_reset = 1 late " & to_string(now - start_time) severity failure; report "GOOD: pll_reset = 1 after " & to_string(now - start_time); start_time := now; stage <= WAIT_FOR_RESET_0; wait until pll_reset = '0'; assert (now - start_time) > (EXPECTED_RESET_TIME - ALLOWED_MARGIN) report "FAIL: pll_reset = 0 early " & to_string(now - start_time) severity failure; assert (now - start_time) < (EXPECTED_RESET_TIME + ALLOWED_MARGIN) report "FAIL: pll_reset = 0 late " & to_string(now - start_time) severity failure; report "GOOD: pll_reset = 0 after " & to_string(now - start_time); -- re-lock and finish wait for 100 us; report "TEST: relocking to clean up"; pll_locked <= '1'; start_time := now; stage <= WAIT_FOR_PLL_LOCKED_OUT_1; wait until pll_locked_out = '1'; report "INFO: pll_locked_out = 1 after " & to_string(now - start_time); -- done stage <= TEST_END; wait for 100 us; done <= true; report "TEST: completed"; wait; end process; end architecture tb; bladeRF-2024.05/hdl/fpga/ip/nuand/ps_sync/000077500000000000000000000000001457144405000200505ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/ps_sync/modelsim/000077500000000000000000000000001457144405000216615ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/ps_sync/modelsim/.gitignore000066400000000000000000000000361457144405000236500ustar00rootroot00000000000000work/ nuand/ *.wlf transcript bladeRF-2024.05/hdl/fpga/ip/nuand/ps_sync/modelsim/tb.do000066400000000000000000000022641457144405000226160ustar00rootroot00000000000000set vcom_lib nuand set vcom_opts {-2008} vlib ${vcom_lib} # Support # UUT vcom {*}$vcom_opts -work ${vcom_lib} ../vhdl/ps_sync.vhd # Testbench vcom {*}$vcom_opts -work ${vcom_lib} ../vhdl/tb/ps_sync_tb.vhd vsim ${vcom_lib}.ps_sync_tb log -r * # Add signals to waveform add wave sim:/ps_sync_tb/u_uut0/* add wave sim:/ps_sync_tb/u_uut0/sync_proc/* add wave sim:/ps_sync_tb/u_uut1/* add wave sim:/ps_sync_tb/u_uut1/sync_proc/* add wave sim:/ps_sync_tb/u_uut2/* add wave sim:/ps_sync_tb/u_uut2/sync_proc/* # Default radix radix -hexadecimal # Change radixes for a select few signals radix signal sim:/ps_sync_tb/u_uut0/sync_proc/count decimal radix signal sim:/ps_sync_tb/u_uut0/sync_proc/count_rate decimal radix signal sim:/ps_sync_tb/u_uut0/sync_proc/sel decimal radix signal sim:/ps_sync_tb/u_uut1/sync_proc/count decimal radix signal sim:/ps_sync_tb/u_uut1/sync_proc/count_rate decimal radix signal sim:/ps_sync_tb/u_uut1/sync_proc/sel decimal radix signal sim:/ps_sync_tb/u_uut2/sync_proc/count decimal radix signal sim:/ps_sync_tb/u_uut2/sync_proc/count_rate decimal radix signal sim:/ps_sync_tb/u_uut2/sync_proc/sel decimal run 1 ms wave zoomfull bladeRF-2024.05/hdl/fpga/ip/nuand/ps_sync/vhdl/000077500000000000000000000000001457144405000210055ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/ps_sync/vhdl/ps_sync.vhd000066400000000000000000000113121457144405000231640ustar00rootroot00000000000000-- Copyright (c) 2017 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.math_real.all; -- ---------------------------------------------------------------------------- -- Power supply synchronization controller -- ---------------------------------------------------------------------------- entity ps_sync is generic ( OUTPUTS : natural := 1; -- Number of ps sync signals USE_LFSR : boolean := true; -- Use LFSR to cycle through freqs HOP_LIST : integer_vector; -- Array of number of refclk cycles -- that sync remains at '0' or '1'. HOP_RATE : natural := 1 -- Number of times to repeat each -- hop freq. before moving on. ); port ( refclk : in std_logic; sync : out std_logic_vector(OUTPUTS-1 downto 0) := (others => '0') ); end entity; architecture arch of ps_sync is begin sync_proc : process(refclk) variable count : natural; variable count_rate : natural; variable sync_v : std_logic := '0'; variable sel : natural range HOP_LIST'range := HOP_LIST'low; -- A 10-bit maximal length LFSR should be plenty for the number of hop freqs constant LFSR_SEED : unsigned(9 downto 0) := 10x"281"; variable lfsr : unsigned(LFSR_SEED'range) := LFSR_SEED; -- FSM type fsm_t is ( LOAD_COUNT, DOWNCOUNT_LOW, DOWNCOUNT_HIGH ); variable state : fsm_t := LOAD_COUNT; begin if( rising_edge(refclk) ) then case state is when LOAD_COUNT => if( USE_LFSR = true ) then sel := to_integer(lfsr) mod HOP_LIST'length; end if; count := HOP_LIST(sel) - 1; -- this cycle counts as the first count_rate := HOP_RATE; sync_v := '0'; state := DOWNCOUNT_LOW; when DOWNCOUNT_LOW => sync_v := '0'; if( count = 1 ) then sync_v := '1'; count := HOP_LIST(sel); state := DOWNCOUNT_HIGH; else count := count - 1; end if; when DOWNCOUNT_HIGH => sync_v := '1'; if( count = 1 ) then if( count_rate = 1 ) then if( USE_LFSR = true ) then lfsr := lfsr(lfsr'high-1 downto lfsr'low) & (lfsr(9) xor lfsr(6)); else sel := (sel + 1) mod HOP_LIST'length; end if; sync_v := '0'; state := LOAD_COUNT; else sync_v := '0'; count := HOP_LIST(sel); count_rate := count_rate - 1; state := DOWNCOUNT_LOW; end if; else count := count - 1; end if; when others => sel := HOP_LIST'low; sync_v := '0'; state := LOAD_COUNT; end case; sync <= (others => sync_v); end if; end process; end architecture; bladeRF-2024.05/hdl/fpga/ip/nuand/ps_sync/vhdl/tb/000077500000000000000000000000001457144405000214125ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/ps_sync/vhdl/tb/ps_sync_tb.vhd000066400000000000000000000042571457144405000242700ustar00rootroot00000000000000-- Copyright (c) 2017 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.math_real.all; entity ps_sync_tb is end entity; architecture arch of ps_sync_tb is signal clock : std_logic := '1'; begin clock <= not clock after 13.021 ns; u_uut0 : entity work.ps_sync generic map ( OUTPUTS => 1, USE_LFSR => true, HOP_LIST => (4, 5, 6, 7, 8), HOP_RATE => 1 ) port map ( refclk => clock, sync => open ); u_uut1 : entity work.ps_sync generic map ( OUTPUTS => 2, USE_LFSR => false, HOP_LIST => (4, 5, 6, 7, 8), HOP_RATE => 3 ) port map ( refclk => clock, sync => open ); u_uut2 : entity work.ps_sync generic map ( OUTPUTS => 1, USE_LFSR => false, HOP_LIST => (0 => 4), HOP_RATE => 2 ) port map ( refclk => clock, sync => open ); end architecture; bladeRF-2024.05/hdl/fpga/ip/nuand/rfic_spi_controller/000077500000000000000000000000001457144405000224335ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/rfic_spi_controller/modelsim/000077500000000000000000000000001457144405000242445ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/rfic_spi_controller/modelsim/.gitignore000066400000000000000000000000361457144405000262330ustar00rootroot00000000000000work/ nuand/ *.wlf transcript bladeRF-2024.05/hdl/fpga/ip/nuand/rfic_spi_controller/modelsim/tb.do000066400000000000000000000007141457144405000251770ustar00rootroot00000000000000set vcom_lib nuand set vcom_opts {-2008} vlib ${vcom_lib} # UUT vcom {*}$vcom_opts -work ${vcom_lib} ../vhdl/rfic_spi_controller.vhd # Models vcom {*}$vcom_opts -work ${vcom_lib} ../vhdl/tb/rfic_model.vhd vcom {*}$vcom_opts -work ${vcom_lib} ../vhdl/tb/nios_model.vhd # Testbench vcom {*}$vcom_opts -work ${vcom_lib} ../vhdl/tb/spi_master_tb.vhd vsim ${vcom_lib}.spi_master_tb log -r * add wave -r -hex sim:/spi_master_tb/uut/* run -all wave zoomfull bladeRF-2024.05/hdl/fpga/ip/nuand/rfic_spi_controller/qsys/000077500000000000000000000000001457144405000234325ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/rfic_spi_controller/qsys/rfic_spi_controller_hw.tcl000066400000000000000000000137521457144405000307050ustar00rootroot00000000000000# TCL File Generated by Component Editor 15.0 # Thu Feb 03 12:18:40 PDT 2020 # DO NOT MODIFY # # rfic_spi_controller "rfic_spi_controller" v1.0 # Nuand, LLC 2020 # SPI Controller for RFIC # # # request TCL package from ACDS 15.0 # package require -exact qsys 15.0 # # module rfic_spi_controller # set_module_property DESCRIPTION "SPI Controller for LMS6002D" set_module_property NAME rfic_spi_controller set_module_property VERSION 1.0 set_module_property INTERNAL false set_module_property OPAQUE_ADDRESS_MAP true set_module_property GROUP "Interface Protocols/Serial" set_module_property AUTHOR "Nuand, LLC" set_module_property DISPLAY_NAME rfic_spi_controller set_module_property INSTANTIATE_IN_SYSTEM_MODULE true set_module_property EDITABLE true set_module_property REPORT_TO_TALKBACK false set_module_property ALLOW_GREYBOX_GENERATION false set_module_property REPORT_HIERARCHY false # # file sets # add_fileset QUARTUS_SYNTH QUARTUS_SYNTH "" "" set_fileset_property QUARTUS_SYNTH TOP_LEVEL rfic_spi_controller set_fileset_property QUARTUS_SYNTH ENABLE_RELATIVE_INCLUDE_PATHS false set_fileset_property QUARTUS_SYNTH ENABLE_FILE_OVERWRITE_MODE false add_fileset_file rfic_spi_controller.qip OTHER PATH ../rfic_spi_controller.qip # # parameters # add_parameter CLOCK_DIV INTEGER 2 set_parameter_property CLOCK_DIV DEFAULT_VALUE 2 set_parameter_property CLOCK_DIV DISPLAY_NAME CLOCK_DIV set_parameter_property CLOCK_DIV TYPE INTEGER set_parameter_property CLOCK_DIV UNITS None set_parameter_property CLOCK_DIV ALLOWED_RANGES -2147483648:2147483647 set_parameter_property CLOCK_DIV HDL_PARAMETER true add_parameter ADDR_WIDTH POSITIVE 8 set_parameter_property ADDR_WIDTH DEFAULT_VALUE 8 set_parameter_property ADDR_WIDTH DISPLAY_NAME ADDR_WIDTH set_parameter_property ADDR_WIDTH TYPE POSITIVE set_parameter_property ADDR_WIDTH ENABLED false set_parameter_property ADDR_WIDTH UNITS None set_parameter_property ADDR_WIDTH ALLOWED_RANGES 1:2147483647 set_parameter_property ADDR_WIDTH HDL_PARAMETER true add_parameter DATA_WIDTH POSITIVE 8 set_parameter_property DATA_WIDTH DEFAULT_VALUE 8 set_parameter_property DATA_WIDTH DISPLAY_NAME DATA_WIDTH set_parameter_property DATA_WIDTH TYPE POSITIVE set_parameter_property DATA_WIDTH ENABLED false set_parameter_property DATA_WIDTH UNITS None set_parameter_property DATA_WIDTH ALLOWED_RANGES 1:2147483647 set_parameter_property DATA_WIDTH HDL_PARAMETER true # # display items # # # connection point reset_sink # add_interface reset_sink reset end set_interface_property reset_sink associatedClock clock_sink set_interface_property reset_sink synchronousEdges DEASSERT set_interface_property reset_sink ENABLED true set_interface_property reset_sink EXPORT_OF "" set_interface_property reset_sink PORT_NAME_MAP "" set_interface_property reset_sink CMSIS_SVD_VARIABLES "" set_interface_property reset_sink SVD_ADDRESS_GROUP "" add_interface_port reset_sink mm_reset reset Input 1 # # connection point clock_sink # add_interface clock_sink clock end set_interface_property clock_sink clockRate 80000000 set_interface_property clock_sink ENABLED true set_interface_property clock_sink EXPORT_OF "" set_interface_property clock_sink PORT_NAME_MAP "" set_interface_property clock_sink CMSIS_SVD_VARIABLES "" set_interface_property clock_sink SVD_ADDRESS_GROUP "" add_interface_port clock_sink mm_clock clk Input 1 # # connection point conduit_end # add_interface conduit_end conduit end set_interface_property conduit_end associatedClock clock_sink set_interface_property conduit_end associatedReset reset_sink set_interface_property conduit_end ENABLED true set_interface_property conduit_end EXPORT_OF "" set_interface_property conduit_end PORT_NAME_MAP "" set_interface_property conduit_end CMSIS_SVD_VARIABLES "" set_interface_property conduit_end SVD_ADDRESS_GROUP "" add_interface_port conduit_end sclk sclk Output 1 add_interface_port conduit_end miso miso Input 1 add_interface_port conduit_end mosi mosi Output 1 add_interface_port conduit_end cs_n ss_n Output 1 # # connection point avalon_slave_0 # add_interface avalon_slave_0 avalon end set_interface_property avalon_slave_0 addressUnits SYMBOLS set_interface_property avalon_slave_0 associatedClock clock_sink set_interface_property avalon_slave_0 associatedReset reset_sink set_interface_property avalon_slave_0 bitsPerSymbol 8 set_interface_property avalon_slave_0 burstOnBurstBoundariesOnly false set_interface_property avalon_slave_0 burstcountUnits SYMBOLS set_interface_property avalon_slave_0 explicitAddressSpan 0 set_interface_property avalon_slave_0 holdTime 0 set_interface_property avalon_slave_0 linewrapBursts false set_interface_property avalon_slave_0 maximumPendingReadTransactions 1 set_interface_property avalon_slave_0 maximumPendingWriteTransactions 0 set_interface_property avalon_slave_0 readLatency 0 set_interface_property avalon_slave_0 readWaitTime 1 set_interface_property avalon_slave_0 setupTime 0 set_interface_property avalon_slave_0 timingUnits Cycles set_interface_property avalon_slave_0 writeWaitTime 0 set_interface_property avalon_slave_0 ENABLED true set_interface_property avalon_slave_0 EXPORT_OF "" set_interface_property avalon_slave_0 PORT_NAME_MAP "" set_interface_property avalon_slave_0 CMSIS_SVD_VARIABLES "" set_interface_property avalon_slave_0 SVD_ADDRESS_GROUP "" add_interface_port avalon_slave_0 mm_addr address Input addr_width add_interface_port avalon_slave_0 mm_din writedata Input data_width add_interface_port avalon_slave_0 mm_dout readdata Output data_width add_interface_port avalon_slave_0 mm_dout_val readdatavalid Output 1 add_interface_port avalon_slave_0 mm_busy waitrequest Output 1 add_interface_port avalon_slave_0 mm_read read Input 1 add_interface_port avalon_slave_0 mm_write write Input 1 set_interface_assignment avalon_slave_0 embeddedsw.configuration.isFlash 0 set_interface_assignment avalon_slave_0 embeddedsw.configuration.isMemoryDevice 0 set_interface_assignment avalon_slave_0 embeddedsw.configuration.isNonVolatileStorage 0 set_interface_assignment avalon_slave_0 embeddedsw.configuration.isPrintableDevice 0 bladeRF-2024.05/hdl/fpga/ip/nuand/rfic_spi_controller/rfic_spi_controller.qip000066400000000000000000000005741457144405000272150ustar00rootroot00000000000000# When generating a system, Qsys will copy this file into its synthesis output # directory. All paths below must be relative to that directory. set nuand_ip_dir [file join $::quartus(qip_path) ../../../../../../fpga/ip/nuand] set_global_assignment -name VHDL_FILE -hdl_version VHDL_2008 [file normalize [file join $nuand_ip_dir rfic_spi_controller/vhdl/rfic_spi_controller.vhd]] bladeRF-2024.05/hdl/fpga/ip/nuand/rfic_spi_controller/vhdl/000077500000000000000000000000001457144405000233705ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/rfic_spi_controller/vhdl/rfic_spi_controller.vhd000066400000000000000000000137351457144405000301450ustar00rootroot00000000000000-- From Altera Solution ID rd05312011_49, need the following for Qsys to use VHDL 2008: -- altera vhdl_input_version vhdl_2008 library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.math_real.log2; -- ----------------------------------------------------------------------------- -- Entity: rfic_spi_controller -- Description: Avalon Memory-Mapped SPI controller for the LMS6002D. -- Standard: VHDL-2008 -- -- WARNING: This module has not been tested with non-default generics. -- ----------------------------------------------------------------------------- entity rfic_spi_controller is generic( CLOCK_DIV : positive range 2 to 16 := 2; -- Ratio of system clock to SPI clock ADDR_WIDTH : positive := 16; -- Number of address bits in an operation DATA_WIDTH : positive := 8 -- Number of data bits in an operation ); port( -- Physical Interface sclk : out std_logic; miso : in std_logic; mosi : out std_logic; cs_n : out std_logic; -- Avalon-MM Interface mm_clock : in std_logic; -- System clock mm_reset : in std_logic; -- System reset mm_read : in std_logic; -- Initiates a SPI read operation mm_write : in std_logic; -- Initiates a SPI write operation mm_addr : in std_logic_vector(ADDR_WIDTH-1 downto 0); -- SPI address mm_din : in std_logic_vector(DATA_WIDTH-1 downto 0); -- SPI write data mm_dout : out std_logic_vector(DATA_WIDTH-1 downto 0); -- SPI read data mm_dout_val : out std_logic; -- Read data valid. mm_busy : out std_logic -- Indicates the module is busy processing a command ); end entity; architecture rfic of rfic_spi_controller is constant RFIC_ADDR_WIDTH : positive := 15; constant RFIC_DATA_WIDTH : positive := 8; constant MSG_LENGTH : positive := 1 + RFIC_ADDR_WIDTH + RFIC_DATA_WIDTH; -- FSM States type fsm_t is ( IDLE, SHIFT ); -- State of internal signals type state_t is record state : fsm_t; clock_count : unsigned(integer(log2(real(CLOCK_DIV)))-1 downto 0); shift_en : std_logic; shift_count : natural range 0 to MSG_LENGTH; shift_out_reg : unsigned(MSG_LENGTH-1 downto 0); shift_in_reg : unsigned(MSG_LENGTH-1 downto 0); sclk : std_logic; cs_n : std_logic; read_op : std_logic; rd_data_valid : std_logic; end record; constant reset_value : state_t := ( state => IDLE, clock_count => (others => '0'), shift_en => '0', shift_count => 0, shift_out_reg => (others => '0'), shift_in_reg => (others => '0'), sclk => '1', cs_n => '1', read_op => '0', rd_data_valid => '0' ); signal current : state_t; signal future : state_t; begin sync_proc : process( mm_clock, mm_reset ) begin if( mm_reset = '1' ) then current <= reset_value; elsif( rising_edge(mm_clock) ) then current <= future; end if; end process; comb_proc : process( all ) begin -- Physical Outputs sclk <= current.sclk; cs_n <= current.cs_n; mosi <= current.shift_out_reg(state_t.shift_out_reg'left); -- Avalon-MM outputs mm_dout <= std_logic_vector(current.shift_in_reg(RFIC_DATA_WIDTH-1 downto 0)); mm_dout_val <= current.rd_data_valid; mm_busy <= '1'; -- Next state defaults future <= current; future.sclk <= '1'; future.cs_n <= '1'; future.shift_en <= '0'; future.rd_data_valid <= '0'; case( current.state ) is when IDLE => future.clock_count <= (others => '0'); future.read_op <= mm_read; mm_busy <= '0'; future.shift_count <= MSG_LENGTH; if( (mm_read xor mm_write) = '1' ) then future.shift_out_reg <= mm_write & unsigned(mm_addr(RFIC_ADDR_WIDTH-1 downto 0)) & unsigned(mm_din); -- Next state logic future.state <= SHIFT; future.cs_n <= '0'; end if; when SHIFT => future.cs_n <= '0'; future.clock_count <= current.clock_count + 1; future.sclk <= current.clock_count(current.clock_count'left); if( current.clock_count = 0 ) then future.shift_en <= '1'; else future.shift_en <= '0'; end if; if( current.shift_en = '1' ) then future.shift_in_reg <= current.shift_in_reg(current.shift_in_reg'left-1 downto current.shift_in_reg'right) & miso; future.shift_out_reg <= current.shift_out_reg(current.shift_out_reg'left-1 downto current.shift_out_reg'right) & '0'; future.shift_count <= current.shift_count - 1; if( current.shift_count = 1 ) then -- Only assert read_valid if a read command was issued future.rd_data_valid <= current.read_op; future.state <= IDLE; end if; end if; end case; end process; end architecture; bladeRF-2024.05/hdl/fpga/ip/nuand/rfic_spi_controller/vhdl/tb/000077500000000000000000000000001457144405000237755ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/rfic_spi_controller/vhdl/tb/nios_model.vhd000066400000000000000000000126561457144405000266420ustar00rootroot00000000000000-- -- -- !!! ======================== [ WARNING ] ======================== !!! -- -- QUICK-AND-DIRTY TESTBENCH ... SCHEDULED FOR CLEAN UP -- -- !!! ======================== [ WARNING ] ======================== !!! -- -- library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; library std; use std.env.all; entity nios_model is generic( ADDR_WIDTH : positive := 16; -- Number of address bits in an operation DATA_WIDTH : positive := 8 -- Number of data bits in an operation ); port( -- Avalon-MM Interface clock : out std_logic; reset : out std_logic; rd_req : out std_logic; wr_req : out std_logic; addr : out std_logic_vector(ADDR_WIDTH-1 downto 0); wr_data : out std_logic_vector(DATA_WIDTH-1 downto 0); rd_data : in std_logic_vector(DATA_WIDTH-1 downto 0); rd_data_val : in std_logic; mem_hold : in std_logic ); end entity; architecture arch of nios_model is function half_clk_per( freq : natural ) return time is begin return ( (0.5 sec) / real(freq) ); end function; constant SYS_CLK_PER : time := half_clk_per( 80e6 ); constant SPI_CLK_DIV : positive := 2; type command_t is ( READ, WRITE ); type operation_t is record cmd : command_t; addr : std_logic_vector(ADDR_WIDTH-1 downto 0); data : std_logic_vector(DATA_WIDTH-1 downto 0); end record; type operations_t is array(natural range<>) of operation_t; constant operations : operations_t := ( (cmd => READ, addr => 16x"EEEE", data => x"33" ), (cmd => READ, addr => 16x"7C", data => (others => '1') ), (cmd => WRITE, addr => 16x"27", data => 8x"42" ), (cmd => READ, addr => 16x"27", data => 8x"42" ), (cmd => WRITE, addr => 16x"90", data => 8x"10" ), (cmd => WRITE, addr => 16x"91", data => 8x"11" ), (cmd => WRITE, addr => 16x"92", data => 8x"12" ), (cmd => WRITE, addr => 16x"93", data => 8x"13" ), (cmd => WRITE, addr => 16x"A0", data => 8x"20" ), (cmd => WRITE, addr => 16x"A1", data => 8x"21" ), (cmd => WRITE, addr => 16x"A2", data => 8x"22" ), (cmd => WRITE, addr => 16x"A3", data => 8x"23" ), (cmd => READ, addr => 16x"10", data => 8x"10" ), (cmd => READ, addr => 16x"11", data => 8x"11" ), (cmd => READ, addr => 16x"12", data => 8x"12" ), (cmd => READ, addr => 16x"13", data => 8x"13" ), (cmd => READ, addr => 16x"20", data => 8x"20" ), (cmd => READ, addr => 16x"21", data => 8x"21" ), (cmd => READ, addr => 16x"22", data => 8x"22" ), (cmd => READ, addr => 16x"23", data => 8x"23" ) ); type state_t is ( IDLE, RUN, CHECK_READ, NEXT_CMD ); signal state : state_t := IDLE; signal sys_clk : std_logic := '1'; signal sys_rst : std_logic := '1'; begin sys_clk <= not sys_clk after SYS_CLK_PER; sys_rst <= '1', '0' after SYS_CLK_PER*5; clock <= sys_clk; reset <= sys_rst; stim_proc : process( sys_clk, sys_rst ) variable op : natural range operations'range := operations'low; variable clock_count : natural := 0; begin if( sys_rst = '1' ) then op := operations'low; clock_count := 0; state <= RUN; rd_req <= '0'; wr_req <= '0'; addr <= (others => '0'); wr_data <= (others => '0'); elsif( rising_edge(sys_clk) ) then clock_count := clock_count + 1; rd_req <= '0'; wr_req <= '0'; addr <= (others => '0'); wr_data <= (others => '0'); case( state ) is when IDLE => if( mem_hold = '0' and clock_count >= operations'length*SPI_CLK_DIV*(ADDR_WIDTH+DATA_WIDTH)+10 ) then stop(0); end if; when RUN => clock_count := 0; if( mem_hold = '0' ) then case (operations(op).cmd) is when READ => rd_req <= '1'; state <= CHECK_READ; when WRITE => wr_req <= '1'; state <= NEXT_CMD; end case; addr <= operations(op).addr; wr_data <= operations(op).data; end if; when CHECK_READ => if( rd_data_val = '1' ) then --assert (operations(op).data = rd_data) report "Read data does not match expected!" severity failure; state <= NEXT_CMD; end if; when NEXT_CMD => if( mem_hold = '0' and clock_count >= 64 ) then if( op = operations'high ) then state <= IDLE; else op := op + 1; state <= RUN; end if; end if; end case; end if; end process; end architecture; bladeRF-2024.05/hdl/fpga/ip/nuand/rfic_spi_controller/vhdl/tb/rfic_model.vhd000066400000000000000000000147771457144405000266230ustar00rootroot00000000000000-- -- -- !!! ======================== [ WARNING ] ======================== !!! -- -- QUICK-AND-DIRTY TESTBENCH ... SCHEDULED FOR CLEAN UP -- -- !!! ======================== [ WARNING ] ======================== !!! -- -- -- Copyright (c) 2013 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; use ieee.math_real.all ; use ieee.math_complex.all ; entity rfic_model is port ( -- LMS RX Interface rx_clock : in std_logic ; rx_clock_out : buffer std_logic ; rx_data : buffer signed(11 downto 0) ; rx_enable : in std_logic ; rx_iq_select : buffer std_logic ; -- LMS TX Interface tx_clock : in std_logic ; tx_data : in signed(11 downto 0) ; tx_enable : in std_logic ; tx_iq_select : in std_logic ; -- LMS SPI Interface sclk : in std_logic ; sen : in std_logic ; sdio : in std_logic ; sdo : buffer std_logic ; -- LMS Control Interface pll_out : buffer std_logic ; resetx : in std_logic ) ; end entity ; -- rfic_model architecture arch of rfic_model is constant SPI_CMD_WIDTH : positive := 1; constant SPI_ADDR_WIDTH : positive := 15; constant SPI_DATA_WIDTH : positive := 8; constant SPI_MSG_WIDTH : positive := 16; -- total number of bits in a SPI message constant SPI_NUM_REGS : positive := 128; -- number of SPI registers type spi_registers_t is array( 0 to SPI_NUM_REGS-1 ) of std_logic_vector( SPI_DATA_WIDTH-1 downto 0 ); signal spi_registers : spi_registers_t := (others => (others => '1') ); begin pll_out <= '0' ; -- Write transmit samples to a file or drop them on the floor -- Read receive samples from a file or predetermined tone rx_clock_out <= rx_clock ; drive_rx_data : process( resetx, rx_clock ) begin if( resetx = '0' ) then rx_data <= (others =>'0') ; rx_iq_select <= '0' ; elsif( rising_edge(rx_clock) ) then if( rx_enable = '1' ) then rx_data <= rx_data + 1 ; rx_iq_select <= not rx_iq_select ; else rx_data <= (others =>'0') ; rx_iq_select <= '0' ; end if ; end if ; end process ; -- Keep track of the SPI register set spi_reg_proc : process( sclk ) variable ptr : natural range 0 to SPI_MSG_WIDTH-1 := 0; variable addr : std_logic_vector( SPI_ADDR_WIDTH-1 downto 0 ) := (others => '0'); variable data : std_logic_vector( SPI_DATA_WIDTH-1 downto 0 ) := (others => '0'); -- Not going to bother making this generic variable cmd : std_logic := '0'; constant RD_CMD : std_logic := '0'; constant WR_CMD : std_logic := '1'; -- Trying this method out as a thought experiment since SPI is isolated. -- The main register array is a signal because we may want to use it elsewhere. type spi_state_t is ( RX_CMD, RX_ADDR, RX_DATA, TX_DATA ); variable spi_state : spi_state_t := RX_CMD; begin sdo <= '0'; -- default if( falling_edge(sclk) ) then if( sen = '0' ) then case( spi_state ) is when RX_CMD => cmd := sdio; ptr := ptr + 1; if( ptr = SPI_CMD_WIDTH ) then ptr := 0; spi_state := RX_ADDR; end if; when RX_ADDR => addr := addr(addr'left-1 downto 0) & sdio; ptr := ptr + 1; if( ptr = SPI_ADDR_WIDTH ) then if( cmd = RD_CMD ) then --data := spi_registers(to_integer(unsigned(addr))); ptr := 0; spi_state := TX_DATA; elsif( cmd = WR_CMD ) then ptr := 0; spi_state := RX_DATA; else report "Unknown command value" severity failure; end if; end if; when RX_DATA => data := data(data'left-1 downto 0) & sdio; ptr := ptr + 1; if( ptr = SPI_DATA_WIDTH ) then --spi_registers(to_integer(unsigned(addr))) <= data; ptr := 0; spi_state := RX_CMD; end if; when TX_DATA => sdo <= data(data'left); data := data(data'left-1 downto 0) & "0"; ptr := ptr + 1; if( ptr = SPI_DATA_WIDTH ) then ptr := 0; spi_state := RX_CMD; end if; end case; else ptr := 0; data := (others => '0'); addr := (others => '0'); cmd := '0'; spi_state := RX_CMD; end if; end if; end process; end architecture ; -- arch bladeRF-2024.05/hdl/fpga/ip/nuand/rfic_spi_controller/vhdl/tb/spi_master_tb.vhd000066400000000000000000000104441457144405000273360ustar00rootroot00000000000000library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity spi_master_tb is end entity; architecture tb of spi_master_tb is constant CLOCK_DIV : positive range 2 to 16 := 2; -- Ratio of system clock to SPI clock constant ADDR_WIDTH : positive := 16; -- Number of address bits in an operation constant DATA_WIDTH : positive := 8; -- Number of data bits in an operation signal clock : std_logic; signal reset : std_logic; signal rd_req : std_logic; signal wr_req : std_logic; signal addr : std_logic_vector(ADDR_WIDTH-1 downto 0); signal wr_data : std_logic_vector(DATA_WIDTH-1 downto 0); signal rd_data : std_logic_vector(DATA_WIDTH-1 downto 0); signal rd_data_val : std_logic; signal mem_hold : std_logic; signal sclk : std_logic; signal miso : std_logic; signal mosi : std_logic; signal cs_n : std_logic; begin nios : entity work.nios_model generic map( ADDR_WIDTH => ADDR_WIDTH, DATA_WIDTH => DATA_WIDTH ) port map( -- Avalon-MM Interface clock => clock, -- out std_logic; reset => reset, -- out std_logic; rd_req => rd_req, -- out std_logic wr_req => wr_req, -- out std_logic addr => addr, -- out std_logic_vector(ADDR_WIDTH-1 downto 0); wr_data => wr_data, -- out std_logic_vector(DATA_WIDTH-1 downto 0); rd_data => rd_data, -- in std_logic_vector(DATA_WIDTH-1 downto 0); rd_data_val => rd_data_val, -- in std_logic mem_hold => mem_hold -- in std_logic ); uut : entity work.rfic_spi_controller(rfic) generic map( CLOCK_DIV => CLOCK_DIV, ADDR_WIDTH => ADDR_WIDTH, DATA_WIDTH => DATA_WIDTH ) port map( -- Physical Interface sclk => sclk, -- out std_logic; miso => miso, -- in std_logic; mosi => mosi, -- out std_logic; cs_n => cs_n, -- out std_logic; -- Avalon-MM Interface mm_clock => clock, -- in std_logic; mm_reset => reset, -- in std_logic; mm_read => rd_req, -- in std_logic; mm_write => wr_req, -- in std_logic; mm_addr => addr, -- in std_logic_vector(ADDR_WIDTH-1 downto 0); mm_din => wr_data, -- in std_logic_vector(DATA_WIDTH-1 downto 0); mm_dout => rd_data, -- out std_logic_vector(DATA_WIDTH-1 downto 0); mm_dout_val => rd_data_val, -- out std_logic; mm_busy => mem_hold -- out std_logic; ); rfic : entity work.rfic_model port map ( -- LMS RX Interface rx_clock => '0', -- in std_logic; rx_clock_out => open, -- buffer std_logic; rx_data => open, -- buffer signed(11 downto 0); rx_enable => '0', -- in std_logic; rx_iq_select => open, -- buffer std_logic; -- LMS TX Interface tx_clock => '0', -- in std_logic; tx_data => (others => '0'), -- in signed(11 downto 0); tx_enable => '0', -- in std_logic; tx_iq_select => '0', -- in std_logic; -- LMS SPI Interface sclk => sclk, -- in std_logic; sen => cs_n, -- in std_logic; sdio => mosi, -- in std_logic; sdo => miso, -- buffer std_logic; -- LMS Control Interface pll_out => open, -- buffer std_logic; resetx => '0' -- in std_logic ); end architecture; bladeRF-2024.05/hdl/fpga/ip/nuand/sample_stream_tb.do000066400000000000000000000030331457144405000222360ustar00rootroot00000000000000# Start dir set start_dir [pwd] # Make sim dir and cd into it set simdir sample_stream_tb file mkdir ${simdir} cd ${simdir} # Platform settings set platform "bladerf-micro" if { ${platform} == "bladerf" } { set NUM_MIMO_STREAMS 1 set FIFO_READER_READ_THROTTLE 1 } elseif { ${platform} == "bladerf-micro" } { set NUM_MIMO_STREAMS 2 set FIFO_READER_READ_THROTTLE 0 } else { error "Unknown platform: ${platform}" } # Add signals to waveform viewer proc addwaves { } { if { [batch_mode] == 0 } { add wave -divider "FIFO WRITER" add wave -hexadecimal sim:/sample_stream_tb/U_fifo_writer/* add wave -divider "FIFO READER" add wave -hexadecimal sim:/sample_stream_tb/U_fifo_reader/* } else { # Command-line mode, log everything to a file log -r * } } # Prettify the wave pane proc prettify { } { if { [batch_mode] == 0 } { wave zoom full configure wave -namecolwidth 400 -valuecolwidth 150 configure wave -waveselectenable 1 -waveselectcolor grey20 } } # Post-simulation cleanup tasks proc cleanup { } { global start_dir if { [batch_mode] == 1 } { quit -sim cd ${start_dir} quit } } # Load common functions do ../nuand.do # Compile HDL compile_nuand ../ ${platform} # Elaborate design vsim -GNUM_MIMO_STREAMS=${NUM_MIMO_STREAMS} \ -GFIFO_READER_READ_THROTTLE=${FIFO_READER_READ_THROTTLE} \ nuand.sample_stream_tb addwaves run 4 ms; # May run longer if needed prettify cleanup bladeRF-2024.05/hdl/fpga/ip/nuand/simulation/000077500000000000000000000000001457144405000205565ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/simulation/fx3_model.vhd000066400000000000000000000224251457144405000231460ustar00rootroot00000000000000-- Copyright (c) 2013 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.math_real.all; use ieee.math_complex.all; library work; use work.util.all; entity fx3_model is port ( fx3_pclk : buffer std_logic := '1'; fx3_gpif : inout std_logic_vector(31 downto 0); fx3_ctl : inout std_logic_vector(12 downto 0); fx3_uart_rxd : in std_logic; fx3_uart_txd : buffer std_logic; fx3_uart_cts : buffer std_logic; fx3_rx_en : in std_logic; fx3_rx_meta_en : in std_logic; fx3_tx_en : in std_logic; fx3_tx_meta_en : in std_logic; eight_bit_mode_en : in std_logic := '0'; done : out boolean ); end entity ; -- fx3_model architecture dma of fx3_model is constant PCLK_HALF_PERIOD : time := 1 sec * (1.0/100.0e6/2.0); constant START_COUNT : natural := 32; constant BLOCKS_PER_ITERATION : natural := 4; constant ITERATIONS : natural := 4; -- Control mapping alias dma0_rx_ack is fx3_ctl( 0); alias dma1_rx_ack is fx3_ctl( 1); alias dma2_tx_ack is fx3_ctl( 2); alias dma3_tx_ack is fx3_ctl( 3); alias dma_rx_enable is fx3_ctl( 4); alias dma_tx_enable is fx3_ctl( 5); alias dma_idle is fx3_ctl( 6); alias system_reset is fx3_ctl( 7); alias dma0_rx_reqx is fx3_ctl( 8); alias dma1_rx_reqx is fx3_ctl(12); -- due to 9 being connected to dclk alias dma2_tx_reqx is fx3_ctl(10); alias dma3_tx_reqx is fx3_ctl(11); type gpif_state_t is (IDLE, TX_META, TX_SAMPLES, RX_SAMPLES); signal gpif_state_rx, gpif_state_tx : gpif_state_t; signal rx_done : boolean := false; signal tx_done : boolean := false; signal rx_data : std_logic_vector(31 downto 0); signal tx_data : std_logic_vector(31 downto 0); function data_gen (count : natural) return std_logic_vector is variable msw, lsw : std_logic_vector(15 downto 0); begin msw := std_logic_vector(to_signed(count, 16)); lsw := std_logic_vector(to_signed(-count, 16)); return (msw & lsw); end function data_gen; function data_check (count : natural ; rxdata : std_logic_vector(31 downto 0)) return boolean is begin return (rxdata = data_gen(count)); end function data_check; begin -- DCLK which isn't used fx3_ctl(9) <= '0'; fx3_ctl(3 downto 0) <= (others => 'Z'); -- Create a 100MHz clock output fx3_pclk <= not fx3_pclk after PCLK_HALF_PERIOD when (not rx_done or not tx_done) else '0'; -- Doneness done <= rx_done and tx_done; rx_sample_stream : process constant BLOCK_SIZE : natural := 512; variable count : natural := START_COUNT; variable req_time : time; begin gpif_state_rx <= IDLE; dma0_rx_reqx <= '1'; dma1_rx_reqx <= '1'; dma_rx_enable <= '0'; rx_data <= (others => 'U'); wait until rising_edge(fx3_pclk) and system_reset = '0'; nop(fx3_pclk, 1000); wait until rising_edge(fx3_pclk) and fx3_rx_en = '1'; wait for 30 us; for j in 1 to ITERATIONS loop dma_rx_enable <= '1'; for i in 1 to BLOCKS_PER_ITERATION loop dma0_rx_reqx <= '0'; req_time := now; wait until rising_edge( fx3_pclk ) and dma0_rx_ack = '1'; wait until rising_edge( fx3_pclk ); dma0_rx_reqx <= '1'; report "RX iteration " & to_string(j) & " block " & to_string(i) & " delay " & to_string(now - req_time); for i in 1 to BLOCK_SIZE loop gpif_state_rx <= RX_SAMPLES; rx_data <= fx3_gpif; wait until rising_edge( fx3_pclk ); assert data_check(count, rx_data) severity failure; count := (count + 1) mod 2048; gpif_state_rx <= IDLE; rx_data <= (others => 'X'); end loop; end loop; dma_rx_enable <= '0'; wait for 10 us; end loop; report "Done with RX sample stream"; rx_done <= true; wait; end process; tx_sample_stream : process constant BLOCK_SIZE : natural := 512; variable count : natural := START_COUNT; variable timestamp_cntr : natural := 80; variable header_len : natural := 0; variable data_out : std_logic_vector(31 downto 0); variable req_time : time; begin gpif_state_tx <= IDLE; dma2_tx_reqx <= '1'; dma3_tx_reqx <= '1'; dma_tx_enable <= '0'; fx3_gpif <= (others =>'Z'); wait until rising_edge(fx3_pclk) and system_reset = '0'; nop(fx3_pclk, 1000); wait until rising_edge(fx3_pclk) and fx3_tx_en = '1'; wait for 30 us; for k in 1 to ITERATIONS loop dma_tx_enable <= '1'; for j in 1 to BLOCKS_PER_ITERATION loop header_len := 0; dma3_tx_reqx <= '0'; req_time := now; wait until rising_edge( fx3_pclk ) and dma3_tx_ack = '1'; wait until rising_edge( fx3_pclk ); wait until rising_edge( fx3_pclk ); wait until rising_edge( fx3_pclk ); dma3_tx_reqx <= '1'; report "TX iteration " & to_string(k) & " block " & to_string(j) & " delay " & to_string(now - req_time); if( fx3_tx_meta_en = '1') then header_len := 4; for i in 1 to 4 loop case (i) is when 1 => data_out := x"12341234"; when 2 => data_out(31 downto 0) := std_logic_vector(to_signed(timestamp_cntr, 32)); timestamp_cntr := timestamp_cntr + 508 * 2; when 3 => data_out := (others => '0'); when 4 => data_out := (others => '1'); end case; gpif_state_tx <= TX_META; fx3_gpif <= data_out; tx_data <= data_out; wait until rising_edge( fx3_pclk ); gpif_state_tx <= IDLE; tx_data <= (others => 'X'); end loop; end if; for i in 1 to (BLOCK_SIZE - header_len) loop gpif_state_tx <= TX_SAMPLES; data_out := data_gen(count); fx3_gpif <= data_out; tx_data <= data_out; wait until rising_edge( fx3_pclk ); count := (count + 1) mod 2048; gpif_state_tx <= IDLE; tx_data <= (others => 'X'); end loop; fx3_gpif <= (others =>'Z'); nop(fx3_pclk, 10); end loop; dma_tx_enable <= '0'; wait for 10 us; end loop; report "Done with TX sample stream"; tx_done <= true; wait; end process; reset_system : process begin system_reset <= '1'; dma_idle <= '0'; nop( fx3_pclk, 100 ); system_reset <= '0'; nop( fx3_pclk, 10 ); dma_idle <= '1'; wait; end process; -- TODO: UART Interface fx3_uart_txd <= '1'; fx3_uart_cts <= '1'; assert (gpif_state_tx = IDLE and gpif_state_rx /= IDLE) or (gpif_state_rx = IDLE and gpif_state_tx /= IDLE) or (gpif_state_rx = IDLE and gpif_state_tx = IDLE) report "gpif_state_rx and gpif_state_tx cannot both be non-idle" severity failure; end architecture dma; architecture inband_scheduler of fx3_model is begin end architecture inband_scheduler; bladeRF-2024.05/hdl/fpga/ip/nuand/simulation/lms6002d_model.vhd000066400000000000000000000055461457144405000237220ustar00rootroot00000000000000-- Copyright (c) 2013 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; use ieee.math_real.all ; use ieee.math_complex.all ; entity lms6002d_model is port ( -- LMS RX Interface rx_clock : in std_logic ; rx_clock_out : buffer std_logic ; rx_data : buffer signed(11 downto 0) ; rx_enable : in std_logic ; rx_iq_select : buffer std_logic ; -- LMS TX Interface tx_clock : in std_logic ; tx_data : in signed(11 downto 0) ; tx_enable : in std_logic ; tx_iq_select : in std_logic ; -- LMS SPI Interface sclk : in std_logic ; sen : in std_logic ; sdio : in std_logic ; sdo : buffer std_logic ; -- LMS Control Interface pll_out : buffer std_logic ; resetx : in std_logic ) ; end entity ; -- lms6002d_model architecture arch of lms6002d_model is begin pll_out <= '0' ; -- Write transmit samples to a file or drop them on the floor -- Read receive samples from a file or predetermined tone rx_clock_out <= rx_clock ; drive_rx_data : process( resetx, rx_clock ) begin if( resetx = '0' ) then rx_data <= (others =>'0') ; rx_iq_select <= '0' ; elsif( rising_edge(rx_clock) ) then if( rx_enable = '1' ) then rx_data <= rx_data + 1 ; rx_iq_select <= not rx_iq_select ; else rx_data <= (others =>'0') ; rx_iq_select <= '0' ; end if ; end if ; end process ; -- Keep track of the SPI register set sdo <= '0' ; end architecture ; -- arch bladeRF-2024.05/hdl/fpga/ip/nuand/simulation/rfic_spi_tb.vhd000066400000000000000000000040071457144405000235450ustar00rootroot00000000000000-- Copyright (c) 2020 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; library nuand ; use nuand.util.all ; use nuand.fifo_readwrite_p.all; use nuand.common_dcfifo_p.all; use nuand.bladerf_p.all; entity rfic_spi_tb is end entity ; architecture arch of rfic_spi_tb is signal clock : std_logic := '0' ; signal reset : std_logic ; signal tx_ota_req : std_logic ; begin clock <= not clock after 6.25 ns; reset <= '1', '0' after 100 ns; tx_ota_req <= '0', '1' after 1 us, '0' after 20 us; uut: entity nuand.bladerf_rfic_spi_ctrl port map( sclk => open, miso => '0', mosi => open, cs_n => open, arbiter_req => open, arbiter_grant => '1', arbiter_done => open, clock => clock, reset => reset, tx_ota_req => tx_ota_req ); end architecture ; bladeRF-2024.05/hdl/fpga/ip/nuand/simulation/sample_stream_tb.vhd000066400000000000000000000442711457144405000246120ustar00rootroot00000000000000-- Copyright (c) 2013-2017 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; use ieee.math_real.all ; library nuand ; use nuand.util.all ; use nuand.fifo_readwrite_p.all; use nuand.common_dcfifo_p.all; use nuand.bladerf_p.all; library std ; use std.env.all ; use std.textio.all ; entity sample_stream_tb is generic ( -- For bladeRF (SISO): NUM_MIMO_STREAMS : natural := 1; FIFO_READER_READ_THROTTLE : natural := 1; -- For bladeRF2 (2x2 MIMO): --NUM_MIMO_STREAMS : natural := 2; --FIFO_READER_READ_THROTTLE : natural := 0; ENABLE_CHANNEL_0 : std_logic := '1'; ENABLE_CHANNEL_1 : std_logic := '1' ); end entity ; architecture arch of sample_stream_tb is -- Checking constants constant CHECK_OVERFLOW : boolean := false ; constant CHECK_UNDERFLOW : boolean := false ; -- Clock half periods constant FX3_HALF_PERIOD : time := 1.0/(100.0e6)/2.0*1 sec ; constant TX_HALF_PERIOD : time := 1.0/(9.0e6)/2.0*1 sec ; constant RX_HALF_PERIOD : time := 1.0/(9.0e6)/2.0*1 sec ; signal dac_controls : sample_controls_t(0 to NUM_MIMO_STREAMS-1) := (others => SAMPLE_CONTROL_DISABLE); signal dac_streams : sample_streams_t(dac_controls'range) := (others => ZERO_SAMPLE); signal adc_controls : sample_controls_t(0 to NUM_MIMO_STREAMS-1) := (others => SAMPLE_CONTROL_DISABLE); signal adc_streams : sample_streams_t(adc_controls'range) := (others => ZERO_SAMPLE); -- Clocks signal fx3_clock : std_logic := '1' ; signal tx_clock : std_logic := '1' ; signal rx_clock : std_logic := '1' ; signal reset : std_logic := '1' ; -- Configuration signal usb_speed : std_logic ; signal meta_en : std_logic ; signal rx_timestamp : unsigned(63 downto 0) := (others =>'0') ; signal tx_timestamp : unsigned(63 downto 0) := (others =>'0') ; -- TX Signalling signal tx_enable : std_logic ; signal tx_native_i : signed(11 downto 0) ; signal tx_native_q : signed(11 downto 0) ; signal tx_sample_i : signed(15 downto 0) ; signal tx_sample_q : signed(15 downto 0) ; signal tx_sample_valid : std_logic ; signal tx_samples : sample_streams_t(0 to NUM_MIMO_STREAMS-1) := (others => ZERO_SAMPLE); -- RX Signalling signal rx_enable : std_logic ; signal rx_native_i : signed(11 downto 0) ; signal rx_native_q : signed(11 downto 0) ; signal rx_sample_i : signed(15 downto 0) ; signal rx_sample_q : signed(15 downto 0) ; signal rx_sample_valid : std_logic ; signal rx_samples : sample_streams_t(0 to NUM_MIMO_STREAMS-1) := (others => ZERO_SAMPLE); -- Underflow signal underflow_led : std_logic ; signal underflow_count : unsigned(63 downto 0) ; signal underflow_duration : unsigned(15 downto 0) := to_unsigned(20, 16) ; -- Overflow signal overflow_led : std_logic ; signal overflow_count : unsigned(63 downto 0) ; signal overflow_duration : unsigned(15 downto 0) := to_unsigned(20, 16) ; -- FIFO type type fifo_t is record aclr : std_logic; wclock : std_logic; wdata : std_logic_vector; wreq : std_logic; wempty : std_logic; wfull : std_logic; wused : std_logic_vector; rclock : std_logic; rdata : std_logic_vector; rreq : std_logic; rempty : std_logic; rfull : std_logic; rused : std_logic_vector; end record; -- FIFOs signal tx_sample_fifo : fifo_t( wdata( 31 downto 0), -- GPIF side is always 32 bits rdata(((NUM_MIMO_STREAMS*32)-1) downto 0), rused(compute_rdusedw_high(4096,32,(NUM_MIMO_STREAMS*32),"NO") downto 0), wused(TX_FIFO_T_DEFAULT.wused'range) ); signal rx_sample_fifo : fifo_t( wdata(((NUM_MIMO_STREAMS*32)-1) downto 0), rdata( 31 downto 0), -- GPIF side is always 32 bits rused(RX_FIFO_T_DEFAULT.rused'range), wused(compute_wrusedw_high(4096,"NO") downto 0) ); signal tx_meta_fifo : fifo_t( wdata( 31 downto 0), rdata(127 downto 0), rused(META_FIFO_TX_T_DEFAULT.rused'range), wused(META_FIFO_TX_T_DEFAULT.wused'range) ); signal rx_meta_fifo : fifo_t( wdata(127 downto 0), rdata( 31 downto 0), rused(META_FIFO_RX_T_DEFAULT.rused'range), wused(META_FIFO_RX_T_DEFAULT.wused'range) ); signal tx_loopback_fifo : loopback_fifo_t; -- Loopback controls signal tx_loopback_enabled : std_logic := '0'; alias rx_reset : std_logic is reset; alias tx_reset : std_logic is reset; alias meta_en_rx : std_logic is meta_en; alias meta_en_tx : std_logic is meta_en; alias rx_ts_reset : std_logic is rx_reset; alias tx_ts_reset : std_logic is tx_reset; signal rx_packet_control : packet_control_t; signal tx_packet_control : packet_control_t := PACKET_CONTROL_DEFAULT; signal rx_packet_ready : std_logic; signal tx_packet_ready : std_logic; begin usb_speed <= '0' ; meta_en <= '1' ; increment_tx_ts : process(tx_clock) variable ping : boolean := true ; begin if( rising_edge(tx_clock) ) then ping := not ping ; if( ping = true ) then tx_timestamp <= tx_timestamp + 1 ; end if ; end if ; end process ; increment_rx_ts : process(rx_clock) variable ping : boolean := true ; begin if( rising_edge(rx_clock) ) then ping := not ping ; if( ping = true ) then rx_timestamp <= rx_timestamp + 1 ; end if ; end if ; end process ; -- Clock creation fx3_clock <= not fx3_clock after FX3_HALF_PERIOD ; tx_clock <= not tx_clock after TX_HALF_PERIOD ; rx_clock <= not rx_clock after RX_HALF_PERIOD ; -- TX Submodule U_tx : entity work.tx generic map ( NUM_STREAMS => dac_controls'length ) port map ( tx_reset => tx_reset, tx_clock => tx_clock, tx_enable => tx_enable, meta_en => meta_en_tx, timestamp_reset => tx_ts_reset, usb_speed => usb_speed, tx_underflow_led => underflow_led, tx_timestamp => tx_timestamp, -- Triggering trigger_arm => '0', trigger_fire => '0', trigger_master => '0', trigger_line => open, -- Packet FIFO packet_en => '0', packet_control => tx_packet_control, packet_ready => tx_packet_ready, -- Samples from host via FX3 sample_fifo_wclock => fx3_clock, sample_fifo_wreq => tx_sample_fifo.wreq, sample_fifo_wdata => tx_sample_fifo.wdata, sample_fifo_wempty => tx_sample_fifo.wempty, sample_fifo_wfull => tx_sample_fifo.wfull, sample_fifo_wused => tx_sample_fifo.wused, -- Metadata from host via FX3 meta_fifo_wclock => fx3_clock, meta_fifo_wreq => tx_meta_fifo.wreq, meta_fifo_wdata => tx_meta_fifo.wdata, meta_fifo_wempty => tx_meta_fifo.wempty, meta_fifo_wfull => tx_meta_fifo.wfull, meta_fifo_wused => tx_meta_fifo.wused, -- Digital Loopback Interface loopback_enabled => tx_loopback_enabled, loopback_fifo_wdata => tx_loopback_fifo.wdata, loopback_fifo_wreq => tx_loopback_fifo.wreq, loopback_fifo_wfull => tx_loopback_fifo.wfull, loopback_fifo_wused => tx_loopback_fifo.wused, -- RFFE Interface dac_controls => dac_controls, dac_streams => dac_streams ); -- RX Submodule U_rx : entity work.rx generic map ( NUM_STREAMS => adc_controls'length ) port map ( rx_reset => rx_reset, rx_clock => rx_clock, rx_enable => rx_enable, meta_en => meta_en_rx, timestamp_reset => rx_ts_reset, usb_speed => usb_speed, rx_mux_sel => to_unsigned(4, 3), -- digital loopback rx_overflow_led => overflow_led, rx_timestamp => rx_timestamp, -- Triggering trigger_arm => '0', trigger_fire => '0', trigger_master => '0', trigger_line => open, -- Packet FIFO packet_en => '0', packet_control => rx_packet_control, packet_ready => rx_packet_ready, -- Samples to host via FX3 sample_fifo_rclock => fx3_clock, sample_fifo_raclr => not rx_enable, sample_fifo_rreq => rx_sample_fifo.rreq, sample_fifo_rdata => rx_sample_fifo.rdata, sample_fifo_rempty => rx_sample_fifo.rempty, sample_fifo_rfull => rx_sample_fifo.rfull, sample_fifo_rused => rx_sample_fifo.rused, -- Mini expansion signals mini_exp => "00", -- Metadata to host via FX3 meta_fifo_rclock => fx3_clock, meta_fifo_raclr => not rx_enable, meta_fifo_rreq => rx_meta_fifo.rreq, meta_fifo_rdata => rx_meta_fifo.rdata, meta_fifo_rempty => rx_meta_fifo.rempty, meta_fifo_rfull => rx_meta_fifo.rfull, meta_fifo_rused => rx_meta_fifo.rused, -- Digital Loopback Interface loopback_fifo_wenabled => tx_loopback_enabled, loopback_fifo_wreset => tx_reset, loopback_fifo_wclock => tx_clock, loopback_fifo_wdata => tx_loopback_fifo.wdata, loopback_fifo_wreq => tx_loopback_fifo.wreq, loopback_fifo_wfull => tx_loopback_fifo.wfull, loopback_fifo_wused => tx_loopback_fifo.wused, -- RFFE Interface adc_controls => adc_controls, adc_streams => adc_streams ); gen_dac_controls : if( NUM_MIMO_STREAMS > 1 ) generate -- The TX side of the AD9361 HDL is a FIFO pull interface -- that expects a readahead FIFO. It toggles the data request -- signal every other cycle. This behavior is mimicked here. process( tx_clock, reset ) begin if( reset = '1' ) then dac_controls <= ( 0 => (enable => ENABLE_CHANNEL_0, data_req => '1'), 1 => (enable => ENABLE_CHANNEL_1, data_req => '1') ); elsif( rising_edge(tx_clock) ) then for i in dac_controls'range loop dac_controls(i) <= ( enable => dac_controls(i).enable, data_req => not dac_controls(i).data_req ); end loop; end if; end process; else generate -- The LMS6 HDL is not nearly as complicated (or featureful) -- as the AD9361. For LMS6, we just push samples directly to -- the device, so the data request line can stay asserted. dac_controls <= (others => SAMPLE_CONTROL_ENABLE); end generate; gen_adc_controls : if( NUM_MIMO_STREAMS > 1 ) generate process( rx_clock, reset ) begin if( reset = '1' ) then adc_controls <= ( 0 => (enable => ENABLE_CHANNEL_0, data_req => '1'), 1 => (enable => ENABLE_CHANNEL_1, data_req => '1') ); elsif( rising_edge(rx_clock) ) then for i in adc_controls'range loop adc_controls(i) <= ( enable => adc_controls(i).enable, data_req => not adc_controls(i).data_req ); end loop; end if; end process; else generate adc_controls <= (others => SAMPLE_CONTROL_ENABLE); end generate; -- TX FIFO Filler tx_filler : process variable ang : real := 0.0 ; variable dang : real := MATH_PI/100.0 ; variable sample_i : signed(15 downto 0) ; variable sample_q : signed(15 downto 0) ; variable ts : integer ; begin if( reset = '1' ) then tx_sample_fifo.wdata <= (others =>'0') ; tx_sample_fifo.wreq <= '0' ; wait until reset = '0' ; end if ; for i in 1 to 100 loop wait until rising_edge(fx3_clock) ; end loop ; for j in 1 to 5 loop ts := 16#1000# + (j-1)*10000 ; for i in 1 to 5 loop tx_meta_fifo.wdata <= (others =>'0') ; wait until rising_edge(fx3_clock) and unsigned(tx_sample_fifo.wused) < 1024 ; tx_meta_fifo.wdata <= x"12345678" ; tx_meta_fifo.wreq <= '1' ; wait until rising_edge(fx3_clock) ; tx_meta_fifo.wdata <= std_logic_vector(to_unsigned(ts,tx_meta_fifo.wdata'length)) ; ts := ts + 1020 ; wait until rising_edge(fx3_clock) ; tx_meta_fifo.wdata <= x"00000000" ; wait until rising_edge(fx3_clock) ; tx_meta_fifo.wdata <= x"00000000" ; wait until rising_edge(fx3_clock) ; tx_meta_fifo.wreq <= '0' ; tx_meta_fifo.wdata <= (others =>'0') ; for r in 1 to 1020 loop if( r = 1 or r = 1020 ) then sample_i := (others =>'0') ; sample_q := (others =>'0') ; else sample_i := to_signed(2047, sample_i'length) ; sample_q := to_signed(2047, sample_q'length) ; end if ; sample_i := to_signed(integer(2047.0*cos(ang)),sample_i'length); sample_q := to_signed(integer(2047.0*sin(ang)),sample_q'length); tx_sample_fifo.wdata <= std_logic_vector(sample_q & sample_i) after 0.1 ns ; tx_sample_fifo.wreq <= '1' after 0.1 ns ; nop( fx3_clock, 1 ); tx_sample_fifo.wreq <= '0' after 0.1 ns ; ang := (ang + dang) mod MATH_2_PI ; end loop ; if( CHECK_UNDERFLOW ) then nop( fx3_clock, 3000 ) ; end if ; tx_sample_fifo.wdata <= (others =>'X') after 0.1 ns ; end loop ; nop(fx3_clock, 100000) ; end loop ; wait ; end process ; -- RX FIFO Reader rx_reader : process begin if( reset = '1' ) then rx_sample_fifo.rreq <= '0' ; wait until reset = '0' ; end if ; while true loop wait until rising_edge(fx3_clock) and unsigned(rx_sample_fifo.rused) > 512 ; for i in 1 to 512 loop rx_sample_fifo.rreq <= '1' ; nop( fx3_clock, 1 ) ; if( CHECK_OVERFLOW ) then rx_sample_fifo.rreq <= '0' ; nop( fx3_clock, 5 ) ; end if ; end loop ; rx_sample_fifo.rreq <= '0' ; end loop ; end process ; -- Testbench tb : process begin -- Initializing reset <= '1' ; tx_enable <= '0' ; rx_enable <= '0' ; nop( fx3_clock, 10 ) ; reset <= '0' ; nop( fx3_clock, 10 ) ; rx_enable <= '1' ; tx_enable <= '1' ; nop( fx3_clock, 2000000 ) ; report "-- End of Simulation --" ; stop(2) ; wait ; end process ; end architecture ; bladeRF-2024.05/hdl/fpga/ip/nuand/simulation/util.vhd000066400000000000000000000110331457144405000222340ustar00rootroot00000000000000library ieee ; use ieee.std_logic_1164.all ; library std; use std.textio.all; -- Utility package package util is procedure nop( signal clock : in std_logic ; count : in natural ) ; end package ; package body util is procedure nop( signal clock : in std_logic ; count : in natural ) is begin for i in 1 to count loop wait until rising_edge( clock ) ; end loop ; end procedure ; end package body ; library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all; library std; use std.textio.all; entity data_saver is generic( FILENAME : string := "file.dat"; DATA_WIDTH : natural := 16 ); port( reset : in std_logic; clock : in std_logic; data : std_logic_vector(DATA_WIDTH-1 downto 0); data_valid : std_logic ); end entity; architecture arch of data_saver is begin handler : process FILE fp : text; variable line_data : line; begin -- wait until falling_edge(reset); file_open(fp, FILENAME, WRITE_MODE); while (reset = '0') loop wait until rising_edge(data_valid); write(line_data, data); writeline(fp,line_data); end loop; file_close(fp); end process; end architecture; library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all; library std; use std.textio.all; entity signed_saver is generic( FILENAME : string := "file.dat"; DATA_WIDTH : natural := 16 ); port( reset : in std_logic; clock : in std_logic; data : signed(DATA_WIDTH-1 downto 0); data_valid : std_logic ); end entity; architecture arch of signed_saver is begin handler : process FILE fp : text; variable line_data : line; begin -- wait until falling_edge(reset); file_open(fp, FILENAME, WRITE_MODE); while (reset = '0') loop wait until rising_edge(clock); if data_valid = '1' then write(line_data, (to_integer(data))); writeline(fp,line_data); end if; end loop; file_close(fp); end process; end architecture; library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all; library std; use std.textio.all; entity data_reader is generic( FILENAME : string := "file.dat"; DATA_WIDTH : natural := 16 ); port( reset : in std_logic; clock : in std_logic; data_request : in std_logic; data : out std_logic_vector(DATA_WIDTH-1 downto 0); data_valid : out std_logic ); end entity; architecture arch of data_reader is type character_array_t is array (natural range <>) of character; begin handler : process variable line_data : line; variable tmp : integer; variable c : character;--_array_t(0 to 3); type bin_t is file of character ; file fp : bin_t ; variable fs : file_open_status ; begin -- data <= (others => '0'); data_valid <= '0'; wait until falling_edge(reset); file_open(fs, fp, FILENAME, READ_MODE); if( fs /= OPEN_OK ) then report "File open issues" severity failure ; end if ; --readline(fp,line_data); while (reset = '0') loop wait until rising_edge(clock); data_valid <= '0'; if data_request = '1' then read(fp, c); tmp := integer(natural(character'pos(c))); data(7 downto 0) <= std_logic_vector(to_unsigned(tmp,8)); read(fp, c); tmp := integer(natural(character'pos(c))); data(15 downto 8) <= std_logic_vector(to_unsigned(tmp,8)); read(fp, c); tmp := integer(natural(character'pos(c))); data(23 downto 16) <= std_logic_vector(to_unsigned(tmp,8)); read(fp, c); tmp := integer(natural(character'pos(c))); data(31 downto 24) <= std_logic_vector(to_unsigned(tmp,8)); data_valid <= '1'; wait until rising_edge(clock); data_valid <= '0'; end if; end loop; file_close(fp); end process; end architecture; bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/000077500000000000000000000000001457144405000204235ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/async_fifo.vhd000066400000000000000000000041061457144405000232470ustar00rootroot00000000000000-- Copyright (c) 2013 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; entity async_fifo is port ( -- Global clear clear : in std_logic ; -- Write side w_clock : in std_logic ; w_enable : in std_logic ; w_data : in std_logic_vector(7 downto 0) ; w_empty : out std_logic ; w_full : out std_logic ; -- Read side r_clock : in std_logic ; r_enable : in std_logic ; r_data : out std_logic_vector(7 downto 0) ; r_empty : out std_logic ; r_full : out std_logic ) ; end entity ; -- async_fifo architecture arch of async_fifo is -- Clear signals for their respective sides signal r_clear : std_logic ; signal w_clear : std_logic ; type status_t is record address : natural range 0 to 1023 ; count : natural range 0 to 1023 ; end record ; begin end architecture ; -- arch bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/atsc_tx.vhd000066400000000000000000000334251457144405000226020ustar00rootroot00000000000000library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; --library work; -- use work.nco_p.all; library nuand; -- use nuand.util.all; use nuand.constellation_mapper_p.all; entity atsc_tx is generic( INPUT_WIDTH : positive := 32; OUTPUT_WIDTH : positive:= 16; SYMBOL_DOWNLOAD_WIDTH : positive := 4; SPS : natural := 3; CPS : natural := 2 ); port( clock : in std_logic; reset : in std_logic; -- tx_enable : in std_logic; data_in : in std_logic_vector(INPUT_WIDTH-1 downto 0); data_in_request : out std_logic; data_in_valid : in std_logic; sample_out_i : out signed(OUTPUT_WIDTH-1 downto 0); sample_out_q : out signed(OUTPUT_WIDTH-1 downto 0); sample_out_valid : out std_logic ); end entity; architecture arch of atsc_tx is --bit stripper signals signal strip_enable : std_logic; signal symbol_bits : std_logic_vector(SYMBOL_DOWNLOAD_WIDTH-1 downto 0); signal symbol_bits_request : std_logic; signal symbol_bits_valid : std_logic; --constellation mapper signal map_inputs : constellation_mapper_inputs_t; signal map_outputs : constellation_mapper_outputs_t; --new mixed signal signal symbol_mixed : complex_fixed_t; signal symbol_mixed_valid : std_logic; --new upsampled signal signal symbol_mixed_up : complex_fixed_t; signal symbol_mixed_up_valid : std_logic; --filtered signal signal filtered_sample : complex_fixed_t; signal filtered_sample_valid : std_logic; --filtered signal signal tx_symbol : complex_fixed_t; signal tx_symbol_valid : std_logic; --filtered signal signal registered_symbol : complex_fixed_t; signal registered_symbol_valid : std_logic; --pilot signal tx_pilot : complex_fixed_t; -- todo:create tone dynamically function create_tone( fs, ftone : real) return complex_fixed_t is variable rv : complex_fixed_t := (to_signed(0,16),to_signed(0,16)); begin return rv; end function; constant atsc_lo_table : complex_fixed_array_t := ( (to_signed( integer(4096.0*1.5/7.0),16), to_signed( integer(1.5/7.0 * 0.0),16)), (to_signed( integer(1.5/7.0 * 3547.0),16), to_signed( integer(1.5/7.0 * (-2048.0)),16)), (to_signed( integer(1.5/7.0 * 2048.0),16), to_signed( integer(1.5/7.0 * (-3547.0)),16)), (to_signed( integer(1.5/7.0 * 0.0),16), to_signed( integer(1.5/7.0 * (-4096.0)),16)), (to_signed( integer(1.5/7.0 * (-2048.0)),16), to_signed( integer(1.5/7.0 * (-3547.0)),16)), (to_signed( integer(1.5/7.0 * (-3547.0)),16), to_signed( integer(1.5/7.0 * (-2048.0)),16)), (to_signed( integer(1.5/7.0 * (-4096.0)),16), to_signed( integer(1.5/7.0 * 0.0),16)), (to_signed( integer(1.5/7.0 * (-3547.0)),16), to_signed( integer(1.5/7.0 * 2048.0),16)), (to_signed( integer(1.5/7.0 * (-2048.0)),16), to_signed( integer(1.5/7.0 * 3547.0),16)), (to_signed( integer(1.5/7.0 * 0.0),16), to_signed( integer(1.5/7.0 * 4096.0),16)), (to_signed( integer(1.5/7.0 * 2048.0),16), to_signed( integer(1.5/7.0 * 3547.0),16)), (to_signed( integer(1.5/7.0 * 3547.0),16), to_signed( integer(1.5/7.0 * 2048.0),16) )); function cmult( a, b : complex_fixed_t; q : natural ) return complex_fixed_t is variable rv : complex_fixed_t := (to_signed(0,16),to_signed(0,16)); begin rv.re := resize(shift_right(a.re * b.re,q) - shift_right(a.im * b.im, q),rv.re'length); rv.re := resize(shift_right(a.re * b.re,q) + shift_right(a.im * b.re, q),rv.im'length); return rv; end function; function cmult_fs4(a : complex_fixed_t; fs_4 : natural) return complex_fixed_t is begin case fs_4 is when 0 => return (a.re,a.im); when 1 => return (a.im,-a.re); when 2 => return (-a.re,-a.im); when 3 => return (-a.im, a.re); when others => return a; end case; end function; constant ATSC_FIR : real_array_t := ( 0.000952541947487, 0.001021339440824, 0.000713161320156, 0.000099293834852, -0.000631484665308, -0.001227676654677, -0.001457043942307, -0.001190147219421, -0.000456941151589, 0.000545581017437, 0.001502219876242, 0.002074087248050, 0.002011614083297, 0.001249974660528, -0.000046895490230, -0.001513860357388, -0.002682283457258, -0.003123186912762, -0.002593740652748, -0.001139501073282, 0.000885746160816, 0.002897996639881, 0.004244432533851, 0.004405493902086, 0.003177417184785, 0.000774939833928, -0.002187174361577, -0.004841259681936, -0.006310376881971, -0.005982741937804, -0.003734744853560, -0.000027621448548, 0.004166072719588, 0.007602382204908, 0.009117175655313, 0.007993866438765, 0.004237744374945, -0.001336553068967, -0.007251920699642, -0.011732810079681, -0.013203082387958, -0.010786054755306, -0.004660238809862, 0.003849830264059, 0.012505380718689, 0.018680222433748, 0.020069392108675, 0.015404316532634, 0.004979659322029, -0.009171254616962, -0.023537317903158, -0.033804674326444, -0.035814465077870, -0.026588972738348, -0.005178629408275, 0.026889883444145, 0.065699566102954, 0.105575674164579, 0.140146665827966, 0.163608592331722, 0.171912865925582, 0.163608592331722, 0.140146665827966, 0.105575674164579, 0.065699566102954, 0.026889883444145, -0.005178629408275, -0.026588972738348, -0.035814465077870, -0.033804674326444, -0.023537317903158, -0.009171254616962, 0.004979659322029, 0.015404316532634, 0.020069392108675, 0.018680222433748, 0.012505380718689, 0.003849830264059, -0.004660238809862, -0.010786054755306, -0.013203082387958, -0.011732810079681, -0.007251920699642, -0.001336553068967, 0.004237744374945, 0.007993866438765, 0.009117175655313, 0.007602382204908, 0.004166072719588, -0.000027621448548, -0.003734744853560, -0.005982741937804, -0.006310376881971, -0.004841259681936, -0.002187174361577, 0.000774939833928, 0.003177417184785, 0.004405493902086, 0.004244432533851, 0.002897996639881, 0.000885746160816, -0.001139501073282, -0.002593740652748, -0.003123186912762, -0.002682283457258, -0.001513860357388, -0.000046895490230, 0.001249974660528, 0.002011614083297, 0.002074087248050, 0.001502219876242, 0.000545581017437, -0.000456941151589, -0.001190147219421, -0.001457043942307, -0.001227676654677, -0.000631484665308, 0.000099293834852, 0.000713161320156, 0.001021339440824, 0.000952541947487); begin --map outputs sample_out_i <= registered_symbol.re; sample_out_q <= registered_symbol.im; sample_out_valid <= registered_symbol_valid; strip_enable <= tx_enable; U_stripper : entity work.bit_stripper(arch) generic map( INPUT_WIDTH => 32, OUTPUT_WIDTH => 4 ) port map( clock => clock, reset => reset, enable => strip_enable, in_data => data_in, in_data_request => data_in_request, in_data_valid => data_in_valid, out_data => symbol_bits, out_data_request => symbol_bits_request, out_data_valid => symbol_bits_valid ); --strip symbols pull_symbols : process(clock,reset) constant DOWNCOUNT_RESET : natural range 0 to 5 := 2; variable downcount : natural range 0 to 5 := DOWNCOUNT_RESET; begin -- if (reset = '1') then symbol_bits_request <= '0'; downcount := DOWNCOUNT_RESET; elsif rising_edge(clock) then if strip_enable = '1' then symbol_bits_request <= '0'; if(downcount = 0) then symbol_bits_request <= '1'; downcount := 5; else downcount := downcount - 1 ; end if; end if; end if; end process; map_inputs.bits(map_inputs.bits'length -1 downto 3) <= (others => '0'); map_inputs.bits(2 downto 0) <= symbol_bits(2 downto 0); map_inputs.modulation <= VSB_8; map_inputs.valid <= symbol_bits_valid; --map bits to constellation point U_mapper : entity work.constellation_mapper(arch) generic map( MODULATIONS => (VSB_8, MSK) ) port map( clock => clock, inputs => map_inputs, outputs => map_outputs ); --apply fs/4 multiply to center generate_nco_phase : process(clock,reset) subtype phases_t is natural range 0 to 3; variable dphase : phases_t; begin if (reset = '1') then dphase := 0; symbol_mixed_valid <= '0'; symbol_mixed <= ((others=> '0'), (others => '0')); elsif (rising_edge(clock)) then symbol_mixed_valid <= '0'; if map_outputs.valid = '1' then symbol_mixed <= cmult_fs4(map_outputs.symbol, dphase); symbol_mixed_valid <= '1'; if dphase = phases_t'high then dphase := 0; else dphase := dphase + 1; end if; end if; end if; end process; --zero stuff to interpolate since this isn't available in the fir yet upsample : process(clock,reset) variable downcount : natural range 0 to 2; variable cps_downcount : natural range 0 to 2; begin if (reset = '1') then downcount := 0; symbol_mixed_up_valid <= '0'; elsif rising_edge(clock) then symbol_mixed_up_valid <= '0'; if symbol_mixed_valid = '1' then symbol_mixed_up <= symbol_mixed; downcount := SPS-1; cps_downcount := CPS-1; symbol_mixed_up_valid <= '1'; elsif downcount > 0 then symbol_mixed_up <= ((others => '0'), (others => '0')); if cps_downcount = 0 then symbol_mixed_up_valid <= '1'; downcount := downcount -1; cps_downcount := CPS-1; else cps_downcount := cps_downcount -1; end if; end if; end if; end process; --filter to bandwidth U_filter_re : entity work.fir_filter(systolic) generic map ( CPS => 1, H => ATSC_FIR ) port map( clock => clock, reset => reset, in_sample => symbol_mixed_up.re, in_valid => symbol_mixed_up_valid, out_sample => filtered_sample.re, out_valid => filtered_sample_valid ); U_filter_im : entity work.fir_filter(systolic) generic map ( CPS => 1, H => ATSC_FIR ) port map( clock => clock, reset => reset, in_sample => symbol_mixed_up.im, in_valid => symbol_mixed_up_valid, out_sample => filtered_sample.im, out_valid => open ); add_pilot : process(clock,reset) variable pilot : natural range atsc_lo_table'range; begin if(reset = '1') then tx_symbol <= ((others=>'0'),(others=>'0')); tx_pilot <= ((others=>'0'),(others=>'0')); tx_symbol_valid <= '0'; pilot := 0; elsif rising_edge(clock) then tx_symbol_valid <= '0'; if filtered_sample_valid = '1' then tx_symbol.re <= filtered_sample.re + shift_right(atsc_lo_table(pilot).re,2); tx_symbol.im <= filtered_sample.im + shift_right(atsc_lo_table(pilot).im,2); tx_pilot.re <= shift_right(atsc_lo_table(pilot).re,1); tx_pilot.im <= shift_right(atsc_lo_table(pilot).im,1); tx_symbol_valid <= '1'; if pilot = atsc_lo_table'high then pilot := 0; else pilot := pilot +1; end if; end if; end if; end process; register_output : process(clock,reset) begin if (reset = '1' ) then registered_symbol <= ((others=> '0'),(others=>'0')); registered_symbol_valid <= '0'; elsif rising_edge(clock) then registered_symbol.re <= shift_right(tx_symbol.re,2); registered_symbol.im <= shift_right(tx_symbol.im,2); registered_symbol_valid <= tx_symbol_valid; end if; end process; end architecture; bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/bit_stripper.vhd000066400000000000000000000063551457144405000236450ustar00rootroot00000000000000library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity bit_stripper is generic( INPUT_WIDTH : positive := 32; OUTPUT_WIDTH : positive := 1; CPS : positive := 2 ); port( clock : in std_logic; reset : in std_logic; enable : in std_logic; in_data : in std_logic_vector(INPUT_WIDTH-1 downto 0); in_data_request : out std_logic; in_data_valid : in std_logic; out_data : out std_logic_vector(OUTPUT_WIDTH-1 downto 0); out_data_request : in std_logic; out_data_valid : out std_logic ); end entity; architecture arch of bit_stripper is signal data_buffer : std_logic_vector( (INPUT_WIDTH + OUTPUT_WIDTH)-1 downto 0); type stripper_fsm_t is (FLUSH,SHIFT_BUFFER,OUTPUT_DATA); signal stripper_fsm : stripper_fsm_t; constant THRESHOLD : positive := OUTPUT_WIDTH; begin rip_bit : process(clock,reset) variable bit_count : natural range 0 to (INPUT_WIDTH + THRESHOLD + 1); begin if reset = '1' then data_buffer <= (others =>'0'); bit_count := 0; stripper_fsm <= FLUSH; out_data <= (others => '0'); out_data_valid <= '0'; in_data_request <= '0'; elsif rising_edge(clock) then out_data_valid <= '0'; in_data_request <= '0'; if enable = '0' then stripper_fsm <= FLUSH; end if; case stripper_fsm is when FLUSH => bit_count := 0; data_buffer <= (others => '0'); if enable = '1' then stripper_fsm <= SHIFT_BUFFER; end if; when SHIFT_BUFFER => -- case bit_count is when 0 => data_buffer <= "0000" & in_data; when 1 => data_buffer <= "000" & in_data & data_buffer(0); when 2 => data_buffer <= "00" & in_data & data_buffer(1 downto 0); when 3 => data_buffer <= '0' & in_data & data_buffer(2 downto 0); when 4 => data_buffer <= in_data & data_buffer(3 downto 0); when others => data_buffer <= "0000" & in_data; end case; bit_count := bit_count + INPUT_WIDTH; stripper_fsm <= OUTPUT_DATA; in_data_request <= '1'; when OUTPUT_DATA => if out_data_request = '1' then out_data <= data_buffer(OUTPUT_WIDTH -1 downto 0); out_data_valid <= '1'; --shift the data down data_buffer <= (OUTPUT_WIDTH-1 downto 0 => '0') & data_buffer( (INPUT_WIDTH+OUTPUT_WIDTH)-1 downto OUTPUT_WIDTH); bit_count := bit_count - OUTPUT_WIDTH; end if; if bit_count <= THRESHOLD then stripper_fsm <= SHIFT_BUFFER; end if; end case; end if; end process; end architecture; bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/bladerf_agc_adi_drv.vhd000066400000000000000000000161601457144405000250330ustar00rootroot00000000000000-- Copyright (c) 2020 Nuand LLC -- -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU Affero General Public License as -- published by the Free Software Foundation, either version 3 of the -- License, or (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU Affero General Public License for more details. -- -- You should have received a copy of the GNU Affero General Public License -- along with this program. If not, see . library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; use ieee.math_real.all ; entity bladerf_agc_adi_drv is port ( -- 80 MHz clock and async asserted, sync deasserted reset clock : in std_logic ; reset : in std_logic ; enable : in std_logic ; gain_inc_req : in std_logic ; gain_dec_req : in std_logic ; gain_rst_req : in std_logic ; gain_ack : out std_logic ; gain_nack : out std_logic ; gain_max : out std_logic ; -- Physical Interface ctrl_gain_inc : out std_logic ; ctrl_gain_dec : out std_logic ) ; end entity ; architecture arch of bladerf_agc_adi_drv is type gain_state_t is ( UNSET_GAIN_STATE, HIGH_GAIN_STATE, MID_GAIN_STATE, LOW_GAIN_STATE ) ; type fsm_t is ( INIT, IDLE, CTRL_WRITE_SETUP, CTRL_WRITE, UPDATE_GAINS, CTRL_WAIT ) ; -- High gain, total gain: 51dB -- -82dBm - -52dBm -- Mid gain, total gain: 33dB -- -52dBm - -30dBm -- Low gain, total gain: 15dB -- -30dBm - -17dBm type state_t is record fsm : fsm_t ; nfsm : fsm_t ; initializing : std_logic ; ack : std_logic ; nack : std_logic ; gain_state : gain_state_t ; gain_inc_req : std_logic ; gain_dec_req : std_logic ; gain_rst_req : std_logic ; gain_dir_inc : std_logic ; gain_dir_num : natural range 0 to 10 ; timeout_cnt : natural range 0 to 10 ; ctrl_gain_inc : std_logic ; ctrl_gain_dec : std_logic ; end record ; function NULL_STATE return state_t is variable rv : state_t ; begin rv.fsm := INIT ; rv.nfsm := INIT ; rv.initializing := '0' ; rv.gain_inc_req := '0' ; rv.gain_dec_req := '0' ; rv.gain_rst_req := '0' ; rv.gain_state := UNSET_GAIN_STATE ; rv.gain_dir_inc := '0'; rv.gain_dir_num := 0; rv.timeout_cnt := 0; rv.ctrl_gain_inc := '0'; rv.ctrl_gain_dec := '0'; return rv ; end function ; signal current, future : state_t := NULL_STATE ; begin gain_max <= '1' when current.gain_state = HIGH_GAIN_STATE else '0' ; gain_ack <= current.ack ; --'1' when current.fsm = UPDATE_GAINS else '0' ; gain_nack <= current.nack ; sync : process(clock, reset) begin if( reset = '1' ) then current <= NULL_STATE ; elsif( rising_edge(clock) ) then current <= future ; end if ; end process ; comb : process(all) begin future <= current ; future.ack <= '0' ; future.nack <= '0' ; future.gain_inc_req <= gain_inc_req ; future.gain_dec_req <= gain_dec_req ; future.gain_rst_req <= gain_rst_req ; future.ctrl_gain_inc <= '0' ; future.ctrl_gain_dec <= '0' ; case current.fsm is when INIT => future.nack <= '1' ; if( enable = '1' ) then future.nack <= '0' ; future.gain_dir_inc <= '0' ; future.gain_dir_num <= 3 ; future.gain_state <= HIGH_GAIN_STATE ; future.initializing <= '1' ; future.fsm <= CTRL_WRITE_SETUP ; end if ; when IDLE => if( current.gain_inc_req = '1' ) then future.gain_dir_inc <= '1' ; if( current.gain_state = LOW_GAIN_STATE ) then future.gain_state <= MID_GAIN_STATE ; future.gain_dir_num <= 1; future.fsm <= CTRL_WRITE_SETUP ; elsif( current.gain_state = MID_GAIN_STATE ) then future.gain_state <= HIGH_GAIN_STATE ; future.gain_dir_num <= 1; future.fsm <= CTRL_WRITE_SETUP ; else future.nack <= '1' ; -- gain is already maxed out end if ; end if ; if( current.gain_dec_req = '1' ) then future.gain_dir_inc <= '0' ; if( current.gain_state = MID_GAIN_STATE ) then future.gain_state <= LOW_GAIN_STATE ; future.gain_dir_num <= 1; future.fsm <= CTRL_WRITE_SETUP ; elsif( current.gain_state = HIGH_GAIN_STATE ) then future.gain_state <= MID_GAIN_STATE ; future.gain_dir_num <= 1; future.fsm <= CTRL_WRITE_SETUP ; else future.nack <= '1' ; -- gain is already at absolute minimum end if ; end if ; if( current.gain_rst_req = '1' ) then future.fsm <= INIT ; end if ; if( enable = '0' ) then future.fsm <= INIT ; end if ; when CTRL_WRITE_SETUP => future.timeout_cnt <= 0 ; future.fsm <= CTRL_WRITE ; when CTRL_WRITE => if( current.gain_dir_inc = '1' ) then future.ctrl_gain_inc <= '1' ; else future.ctrl_gain_dec <= '1' ; end if; future.timeout_cnt <= current.timeout_cnt + 1; if( current.timeout_cnt > 4 ) then future.gain_dir_num <= current.gain_dir_num - 1; future.fsm <= CTRL_WAIT ; end if ; when CTRL_WAIT => future.timeout_cnt <= current.timeout_cnt + 1; if( current.timeout_cnt > 4 ) then if( current.gain_dir_num = 0 ) then future.fsm <= UPDATE_GAINS ; else future.fsm <= CTRL_WRITE_SETUP ; end if; end if; when UPDATE_GAINS => future.ack <= '1' ; future.initializing <= '0' ; future.fsm <= IDLE ; end case ; end process ; end architecture ; bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/bladerf_rfic_spi_ctrl.vhd000066400000000000000000000146641457144405000254420ustar00rootroot00000000000000-- RFIC SPI Control -- Copyright (c) 2020 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity bladerf_rfic_spi_ctrl is generic( CLOCK_DIV : positive range 2 to 16 := 2; ADDR_WIDTH : positive := 16; DATA_WIDTH : positive := 8 ); port ( -- Physical Interface sclk : out std_logic; miso : in std_logic; mosi : out std_logic; cs_n : out std_logic; arbiter_req : out std_logic; arbiter_grant : in std_logic; arbiter_done : out std_logic; -- Control Interface clock : in std_logic; reset : in std_logic; tx_ota_req : in std_logic ); end entity; -- pll_reset architecture arch of bladerf_rfic_spi_ctrl is type fsm_t is ( INIT, GET_ARBITER, WAIT_END_TX, RELEASE_ARBITER, WAIT_TO_WR, WAIT_WR_DVALID, WAIT_WR_DVALID_2, WAIT_RD_DVALID, WAIT_RD_DVALID_2 ); type state_t is record state : fsm_t; n_state : fsm_t; mm_read : std_logic; mm_write : std_logic; mm_addr : std_logic_vector(ADDR_WIDTH-1 downto 0); mm_din : std_logic_vector(DATA_WIDTH-1 downto 0); mm_dout : std_logic_vector(DATA_WIDTH-1 downto 0); counter : natural range 0 to 50000; arbiter_req : std_logic; arbiter_done : std_logic; end record; constant reset_value : state_t := ( state => INIT, n_state => INIT, mm_read => '0', mm_write => '0', mm_addr => ( others => '0' ), mm_din => ( others => '0' ), mm_dout => ( others => '0' ), counter => 0, arbiter_req => '0', arbiter_done => '0' ); signal current : state_t := reset_value; signal future : state_t := reset_value; signal mm_dout : std_logic_vector(DATA_WIDTH-1 downto 0); signal mm_dvalid : std_logic ; signal mm_busy : std_logic ; begin arbiter_req <= current.arbiter_req; arbiter_done <= current.arbiter_done; U_rfic_spi: entity work.rfic_spi_controller port map( -- Physical Interface sclk => sclk, miso => miso, mosi => mosi, cs_n => cs_n, -- Avalon-MM Interface mm_clock => clock, mm_reset => reset, mm_read => current.mm_read, mm_write => current.mm_write, mm_addr => current.mm_addr, mm_din => current.mm_din, mm_dout => mm_dout, mm_dout_val => mm_dvalid, mm_busy => mm_busy ); sync_proc : process(clock) begin if(reset = '1') then current <= reset_value; elsif(rising_edge(clock)) then current <= future; end if; end process sync_proc; comb_proc : process(all) begin -- defaults future <= current; future.mm_read <= '0'; future.mm_write <= '0'; future.arbiter_req <= '0'; future.arbiter_done <= '0'; -- states case current.state is when INIT => if( tx_ota_req = '1' ) then future.arbiter_req <= '1'; future.state <= GET_ARBITER; end if; when GET_ARBITER => future.arbiter_req <= '1'; if( arbiter_grant = '1' ) then future.state <= WAIT_WR_DVALID; future.n_state <= WAIT_END_TX; future.mm_addr <= x"0051"; future.mm_din <= x"00"; future.mm_write <= '1'; end if; when WAIT_END_TX => if( tx_ota_req = '0' ) then future.state <= WAIT_TO_WR; future.counter <= 550; end if; when WAIT_TO_WR => if( current.counter = 0) then future.state <= WAIT_WR_DVALID; future.n_state <= RELEASE_ARBITER; future.mm_addr <= x"0051"; future.mm_din <= x"10"; future.mm_write <= '1'; else future.counter <= current.counter - 1; end if; when RELEASE_ARBITER => future.arbiter_done <= '1'; future.state <= INIT; when WAIT_WR_DVALID => future.state <= WAIT_WR_DVALID_2; when WAIT_WR_DVALID_2 => if( mm_busy = '0' ) then future.state <= WAIT_RD_DVALID; future.mm_addr <= x"0051"; future.mm_din <= x"00"; future.mm_read <= '1'; end if; when WAIT_RD_DVALID => future.state <= WAIT_RD_DVALID_2; when WAIT_RD_DVALID_2 => if( mm_dvalid = '1' ) then future.mm_dout <= mm_dout; future.state <= current.n_state; end if; end case; end process comb_proc; end architecture arch; bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/constellation_mapper.vhd000066400000000000000000000316541457144405000253610ustar00rootroot00000000000000-- Copyright (c) 2013 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; use ieee.math_real.all ; use ieee.math_complex.all ; package constellation_mapper_p is -- All possible modulations type constellation_mapper_modulation_t is ( APSK_16, APSK_32, MSK, PSK_2, PSK_4, PSK_8, PSK_8_GRAY, PSK_16, QAM_16, QAM_32, QAM_64, QAM_128, QAM_256, QAM_512, QAM_1024, QAM_2048, QAM_4096, VSB_8, MAX_MODULATION ) ; type complex_fixed_t is record re : signed(15 downto 0); im : signed(15 downto 0); end record; type complex_fixed_array_t is array(natural range <>) of complex_fixed_t; type real_array_t is array(natural range <>) of real ; type complex_array_t is array(natural range <>) of complex ; -- Array of modulations type constellation_mapper_modulation_array_t is array(natural range <>) of constellation_mapper_modulation_t ; -- Inputs to the mapper type constellation_mapper_inputs_t is record bits : std_logic_vector(15 downto 0) ; modulation : constellation_mapper_modulation_t ; valid : std_logic ; end record ; -- Outputs of the mapper type constellation_mapper_outputs_t is record symbol : complex_fixed_t ; valid : std_logic ; end record ; end package ; -- constellation_mapper_p library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; use ieee.math_real.all ; use ieee.math_complex.all ; library work ; use work.constellation_mapper_p.all ; entity constellation_mapper is generic ( SCALE_FACTOR : real := 4096.0; MODULATIONS : constellation_mapper_modulation_array_t := ( MSK, PSK_2, QAM_16, VSB_8 ) ) ; port ( clock : in std_logic ; inputs : in constellation_mapper_inputs_t ; outputs : out constellation_mapper_outputs_t ) ; end entity ; -- constellation_mapper architecture arch of constellation_mapper is type modulation_info_t is record index : natural ; mask : std_logic_vector(15 downto 0) ; end record ; -- NOTE: If QAM_4096 is ever not the end, this needs to change type modulation_index_t is array(0 to constellation_mapper_modulation_t'pos(MAX_MODULATION)-1) of modulation_info_t ; -- Get the number of entries of each of the supported modulations function size( x : constellation_mapper_modulation_t ) return natural is variable rv : natural := 0; begin case x is when APSK_16 => rv := 16; when APSK_32 => rv := 32; when MSK => rv := 2 ; when PSK_2 => rv := 2 ; when PSK_4 => rv := 4 ; when PSK_8 => rv := 8 ; when PSK_8_GRAY => rv := 8 ; when PSK_16 => rv := 16 ; when QAM_16 => rv := 16 ; when QAM_32 => rv := 32 ; when QAM_64 => rv := 64 ; when QAM_128 => rv := 128 ; when QAM_256 => rv := 256 ; when QAM_512 => rv := 512 ; when QAM_1024 => rv := 1024 ; when QAM_2048 => rv := 2048 ; when QAM_4096 => rv := 4096 ; when VSB_8 => rv := 8; when MAX_MODULATION => rv := 0; end case ; return rv ; end function ; -- 16-APSK Modulation points function constellation_apsk_16 return complex_fixed_array_t is variable rv : complex_fixed_array_t(0 to 15) := (others =>(to_signed(0,16),to_signed(0,16))) ; begin return rv ; end function ; -- 32-APSK Modulation Points function constellation_apsk_32 return complex_fixed_array_t is variable rv : complex_fixed_array_t(0 to 31) := (others =>(to_signed(0,16),to_signed(0,16))) ; begin return rv ; end function ; -- MSK Modulation Points function constellation_msk return complex_fixed_array_t is variable rv : complex_fixed_array_t(0 to 1) := (others =>(to_signed(0,16),to_signed(0,16))) ; begin return rv ; end function ; -- BPSK Modulation Points function constellation_psk_2 return complex_fixed_array_t is variable rv : complex_fixed_array_t(0 to 1) := (others =>(to_signed(0,16),to_signed(0,16))) ; begin return rv ; end function ; -- QPSK Modulation Points function constellation_psk_4 return complex_fixed_array_t is variable rv : complex_fixed_array_t(0 to 3) := (others =>(to_signed(0,16),to_signed(0,16))) ; begin return rv ; end function ; -- 8-PSK Modulation Points function constellation_psk_8 return complex_fixed_array_t is variable rv : complex_fixed_array_t(0 to 7) := (others =>(to_signed(0,16),to_signed(0,16))) ; begin return rv ; end function ; -- 8-PSK Offset Modulation Points function constellation_psk_8_gray return complex_fixed_array_t is variable rv : complex_fixed_array_t(0 to 7) := (others =>(to_signed(0,16),to_signed(0,16))) ; begin return rv ; end function ; -- 16-PSK Modulation Points function constellation_psk_16 return complex_fixed_array_t is variable rv : complex_fixed_array_t(0 to 15) := (others =>(to_signed(0,16),to_signed(0,16))) ; begin return rv ; end function ; -- 16-QAM Modulation Points function constellation_qam_16 return complex_fixed_array_t is variable rv : complex_fixed_array_t(0 to 15) := (others =>(to_signed(0,16),to_signed(0,16))) ; begin return rv ; end function ; -- 32-QAM Modulation Points function constellation_qam_32 return complex_fixed_array_t is variable rv : complex_fixed_array_t(0 to 31) := (others =>(to_signed(0,16),to_signed(0,16))) ; begin return rv ; end function ; -- 64-QAM Modulation Points function constellation_qam_64 return complex_fixed_array_t is variable rv : complex_fixed_array_t(0 to 63) := (others =>(to_signed(0,16),to_signed(0,16))) ; begin return rv ; end function ; -- 128-QAM Modulation Points function constellation_qam_128 return complex_fixed_array_t is variable rv : complex_fixed_array_t(0 to 127) := (others =>(to_signed(0,16),to_signed(0,16))) ; begin return rv ; end function ; -- 256-QAM Modulation Points function constellation_qam_256 return complex_fixed_array_t is variable rv : complex_fixed_array_t(0 to 255) := (others =>(to_signed(0,16),to_signed(0,16))) ; begin return rv ; end function ; -- 512-QAM Modulation Points function constellation_qam_512 return complex_fixed_array_t is variable rv : complex_fixed_array_t(0 to 511) := (others =>(to_signed(0,16),to_signed(0,16))) ; begin return rv ; end function ; -- 1024-QAM Modulation Points function constellation_qam_1024 return complex_fixed_array_t is variable rv : complex_fixed_array_t(0 to 1023) := (others =>(to_signed(0,16),to_signed(0,16))) ; begin return rv ; end function ; -- 2048-QAM Modulation Points function constellation_qam_2048 return complex_fixed_array_t is variable rv : complex_fixed_array_t(0 to 2047) := (others =>(to_signed(0,16),to_signed(0,16))) ; begin return rv ; end function ; -- 4096-QAM Modulation Points function constellation_qam_4096 return complex_fixed_array_t is variable rv : complex_fixed_array_t(0 to 4096) := (others =>(to_signed(0,16),to_signed(0,16))) ; begin return rv ; end function ; -- 8- VSB function constellation_vsb_8 return complex_fixed_array_t is -- (-7.0,0.0)(-5.0,0.0),(-3.0,0.0),(-1.0,0.0),(1.0,0.0),(3.0,0.0)(5.0,0.0),(7.0,0.0) variable rv : complex_fixed_array_t(0 to 7) := ( (to_signed(natural(-7.0/7.0 * SCALE_FACTOR),16), to_signed(0,16)), (to_signed(natural(-5.0/7.0 * SCALE_FACTOR),16),to_signed(0,16)), (to_signed(natural(-3.0/7.0 * SCALE_FACTOR),16),to_signed(0,16)), (to_signed(natural(-1.0/7.0 * SCALE_FACTOR),16),to_signed(0,16)), (to_signed(natural(1.0/7.0 * SCALE_FACTOR),16),to_signed(0,16)), (to_signed(natural(3.0/7.0 * SCALE_FACTOR),16),to_signed(0,16)), (to_signed(natural(5.0/7.0 * SCALE_FACTOR),16),to_signed(0,16)), (to_signed(natural(7.0/7.0 * SCALE_FACTOR),16),to_signed(0,16))); begin return rv; end function; -- Get each of the constellation arrays function constellation( x : constellation_mapper_modulation_t ) return complex_fixed_array_t is begin case x is when APSK_16 => return constellation_apsk_16 ; when APSK_32 => return constellation_apsk_32 ; when MSK => return constellation_msk ; when PSK_2 => return constellation_psk_2 ; when PSK_4 => return constellation_psk_4 ; when PSK_8 => return constellation_psk_8 ; when PSK_8_GRAY => return constellation_psk_8_gray ; when PSK_16 => return constellation_psk_16 ; when QAM_16 => return constellation_qam_16 ; when QAM_32 => return constellation_qam_32 ; when QAM_64 => return constellation_qam_64 ; when QAM_128 => return constellation_qam_128 ; when QAM_256 => return constellation_qam_256 ; when QAM_512 => return constellation_qam_512 ; when QAM_1024 => return constellation_qam_1024 ; when QAM_2048 => return constellation_qam_2048 ; when QAM_4096 => return constellation_qam_4096 ; when VSB_8 => return constellation_vsb_8 ; when MAX_MODULATION => return constellation_msk; end case ; end function ; -- Calculate the base indicies for each modulation type function calculate_indices( x : constellation_mapper_modulation_array_t ) return modulation_index_t is variable index : natural := 0; variable rv : modulation_index_t := (others =>(0, x"0000")) ; begin for i in x'range loop rv(constellation_mapper_modulation_t'pos(x(i))).index := index ; rv(constellation_mapper_modulation_t'pos(x(i))).mask := std_logic_vector(to_unsigned(size(x(i))-1,rv(constellation_mapper_modulation_t'pos(x(i))).mask'length)) ; index := index + size(x(i)) ; end loop ; return rv ; end function ; -- Take in the array and create the modulations recursively function generate_modulation_table( x : constellation_mapper_modulation_array_t ) return complex_fixed_array_t is begin report "x'low is " & integer'image(x'low) & " x'high is " &integer'image(x'high); if (x'low + 1 <= x'high) then return constellation(x(x'low)) & generate_modulation_table(x(x'low+1 to x'high)) ; else return constellation(x(x'low)); end if; end function ; -- Constant values generated constant modulation_index : modulation_index_t := calculate_indices(MODULATIONS) ; constant modulation_table : complex_fixed_array_t := generate_modulation_table(MODULATIONS) ; -- Actual signals! signal base : modulation_info_t ; signal symbol : complex_fixed_t ; begin -- Get the inputs and base address base <= modulation_index(constellation_mapper_modulation_t'pos(inputs.modulation)) ; -- Map it to the modulation table symbol <= modulation_table(base.index + to_integer(unsigned(inputs.bits and base.mask))) ; -- Register the outputs outputs.symbol <= symbol when rising_edge( clock ) and inputs.valid = '1' ; outputs.valid <= inputs.valid when rising_edge( clock ) ; end architecture ; -- arch bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/cordic.vhd000066400000000000000000000153711457144405000224000ustar00rootroot00000000000000-- Copyright (c) 2013 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; package cordic_p is -- Vectoring mode forces outputs.y to 0 -- Rotation mode forces outputs.z to 0 type cordic_mode_t is (CORDIC_ROTATION, CORDIC_VECTORING) ; -- TODO: Make this a generic package type cordic_xyz_t is record x : signed(15 downto 0) ; y : signed(15 downto 0) ; z : signed(15 downto 0) ; valid : std_logic ; end record ; end package ; -- cordic_p library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; use ieee.math_real.all ; library work ; use work.cordic_p.all ; entity cordic is port ( clock : in std_logic ; reset : in std_logic ; mode : in cordic_mode_t ; inputs : in cordic_xyz_t ; outputs : out cordic_xyz_t ) ; end entity ; -- cordic architecture arch of cordic is -- TODO: Make this generic constant NUM_STAGES : natural := 12 ; -- TODO: Use the VHDL-2008 integer_vector type integer_array_t is array(natural range <>) of integer ; -- Each stage of the CORDIC is atan(2^(-i)) function calculate_cordic_table return integer_array_t is variable rv : integer_array_t(0 to NUM_STAGES-1) := (others => 0) ; begin for i in 0 to rv'high loop rv(i) := integer(round((2.0**NUM_STAGES)*arctan(2.0**(-i))/MATH_PI)) ; end loop ; return rv ; end function ; -- Constant array constant K : integer_array_t := calculate_cordic_table ; -- The array for CORDIC stages type xyzs_t is array(0 to NUM_STAGES-1) of cordic_xyz_t ; -- ALl the XYZ's for the CORDIC stages signal xyzs : xyzs_t ; begin rotate : process(clock, reset) begin if( reset = '1' ) then xyzs <= (others =>(x => (others =>'0'), y => (others =>'0'), z => (others =>'0'), valid => '0')) ; elsif( rising_edge( clock ) ) then -- First stage will rotate the vector to be within -pi/2 to pi/2 xyzs(0).valid <= inputs.valid ; if( inputs.valid = '1' ) then case mode is when CORDIC_ROTATION => -- Make sure we're only rotating -pi/2 to pi/2 and adjust accordingly if( inputs.z > 2**(NUM_STAGES-1) ) then xyzs(0).x <= -inputs.x ; xyzs(0).y <= -inputs.y ; xyzs(0).z <= inputs.z - 2**NUM_STAGES ; elsif( inputs.z < -(2**(NUM_STAGES-1)) ) then xyzs(0).x <= -inputs.x ; xyzs(0).y <= -inputs.y ; xyzs(0).z <= inputs.z + 2**NUM_STAGES ; else xyzs(0).x <= inputs.x ; xyzs(0).y <= inputs.y ; xyzs(0).z <= inputs.z ; end if ; when CORDIC_VECTORING => -- Make sure we're in the 1st or 4th quadrant only if( inputs.x < 0 and inputs.y < 0 ) then xyzs(0).x <= -inputs.x ; xyzs(0).y <= -inputs.y ; xyzs(0).z <= inputs.z - 2**(NUM_STAGES) ; elsif( inputs.x < 0 ) then xyzs(0).x <= -inputs.x ; xyzs(0).y <= -inputs.y ; xyzs(0).z <= inputs.z + 2**(NUM_STAGES) ; else xyzs(0).x <= inputs.x ; xyzs(0).y <= inputs.y ; xyzs(0).z <= inputs.z ; end if ; end case ; end if ; -- Run through all the other stages for i in 0 to xyzs'high-1 loop xyzs(i+1).valid <= xyzs(i).valid ; if( xyzs(i).valid = '1' ) then case mode is when CORDIC_ROTATION => if( xyzs(i).z < 0 ) then xyzs(i+1).x <= xyzs(i).x + shift_right(xyzs(i).y, i) ; xyzs(i+1).y <= xyzs(i).y - shift_right(xyzs(i).x, i) ; xyzs(i+1).z <= xyzs(i).z + K(i) ; else xyzs(i+1).x <= xyzs(i).x - shift_right(xyzs(i).y, i) ; xyzs(i+1).y <= xyzs(i).y + shift_right(xyzs(i).x, i) ; xyzs(i+1).z <= xyzs(i).z - K(i) ; end if ; when CORDIC_VECTORING => if( xyzs(i).y < 0 ) then xyzs(i+1).x <= xyzs(i).x - shift_right(xyzs(i).y, i) ; xyzs(i+1).y <= xyzs(i).y + shift_right(xyzs(i).x, i) ; xyzs(i+1).z <= xyzs(i).z - K(i) ; else xyzs(i+1).x <= xyzs(i).x + shift_right(xyzs(i).y, i) ; xyzs(i+1).y <= xyzs(i).y - shift_right(xyzs(i).x, i) ; xyzs(i+1).z <= xyzs(i).z + K(i) ; end if ; end case ; end if ; end loop ; -- Output stage outputs <= xyzs(xyzs'high) ; end if ; end process ; end architecture ; -- arch bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/cos_table.vhd000066400000000000000000000046301457144405000230640ustar00rootroot00000000000000library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.math_real.all; entity cos_table is generic ( Q : positive := 12; INPUT_LENGTH : positive := 16; OUTPUT_LENGTH : positive := 16; DPHASE_STEPS_90 : positive := 4 ); port( reset : in std_logic; clock : in std_logic; phase : in unsigned(INPUT_LENGTH-1 downto 0); phase_valid : in std_logic; y : out signed(OUTPUT_LENGTH-1 downto 0); y_valid : out std_logic ); end entity; architecture arch of cos_table is type cos_table_t is array(natural range <>) of signed(INPUT_LENGTH-1 downto 0); function generate_cos_table(steps, qscale : positive) return cos_table_t is variable table : cos_table_t(0 to steps + 1) := (others => (others =>'0')); begin for i in table'range loop table(i) := to_signed(integer(round(real(qscale)*cos(MATH_PI/2.0 * real(real(i)/real(steps))))),table(i)'length); end loop; return table; end function; constant table : cos_table_t(0 to DPHASE_STEPS_90 +1) := generate_cos_table(DPHASE_STEPS_90, 2**Q); begin find_y : process(clock,reset) variable cur_index : natural; begin if reset = '1' then y <= (others=>'0'); y_valid <= '0'; elsif rising_edge(clock) then y_valid <= '0'; if phase_valid = '1' then y_valid <= '1'; if phase <= DPHASE_STEPS_90 then y <= (table(to_integer(phase))); cur_index := to_integer(phase); elsif phase <= (2*DPHASE_STEPS_90) then y <= -(table(DPHASE_STEPS_90 - (to_integer(phase) -(DPHASE_STEPS_90)))); cur_index := DPHASE_STEPS_90 - (to_integer(phase) -(DPHASE_STEPS_90)); elsif phase <= (3*DPHASE_STEPS_90) then y <= -(table(to_integer(phase)- (2*DPHASE_STEPS_90))); cur_index := to_integer(phase)- (2*DPHASE_STEPS_90); else y<= (table(DPHASE_STEPS_90 - (to_integer(phase)-(3*DPHASE_STEPS_90)))); cur_index := DPHASE_STEPS_90 - (to_integer(phase)-(3*DPHASE_STEPS_90)); end if; end if; end if; end process; end architecture;bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/edge_detector.vhd000077500000000000000000000033521457144405000237310ustar00rootroot00000000000000-- Copyright (c) 2017 Nuand LLC -- -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU Affero General Public License as -- published by the Free Software Foundation, either version 3 of the -- License, or (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU Affero General Public License for more details. -- -- You should have received a copy of the GNU Affero General Public License -- along with this program. If not, see . library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity edge_detector is generic ( EDGE_RISE : std_logic ; EDGE_FALL : std_logic ; NUM_PULSES : positive range 1 to 1023 := 2 ) ; port ( clock : in std_logic ; reset : in std_logic ; sync_in : in std_logic ; pulse_out : out std_logic ) ; end entity ; architecture arch of edge_detector is signal pulses : std_logic_vector( NUM_PULSES - 1 downto 0 ) ; begin process( clock, reset ) begin if( reset = '1' ) then pulses <= ( others => '0' ) ; pulse_out <= '0' ; elsif( rising_edge( clock ) ) then pulses <= sync_in & pulses( NUM_PULSES - 1 downto 1 ) ; if( EDGE_RISE = '1' and pulses(1 downto 0) = "10" ) then pulse_out <= '1' ; elsif ( EDGE_FALL = '1' and pulses(1 downto 0) = "01" ) then pulse_out <= '1' ; else pulse_out <= '0' ; end if ; end if ; end process ; end architecture ; bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/fifo_reader.vhd000066400000000000000000000714601457144405000234030ustar00rootroot00000000000000-- Copyright (c) 2017 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; library work; use work.fifo_readwrite_p.all; entity fifo_reader is generic ( NUM_STREAMS : natural := 1; FIFO_READ_THROTTLE : natural range 0 to 255 := 1; FIFO_USEDW_WIDTH : natural := 12; FIFO_DATA_WIDTH : natural := 32; META_FIFO_USEDW_WIDTH : natural := 3; META_FIFO_DATA_WIDTH : natural := 128 ); port ( clock : in std_logic; reset : in std_logic; enable : in std_logic; usb_speed : in std_logic; meta_en : in std_logic; packet_en : in std_logic; eight_bit_mode_en : in std_logic; timestamp : in unsigned(63 downto 0); fifo_usedw : in std_logic_vector(FIFO_USEDW_WIDTH-1 downto 0); fifo_read : buffer std_logic := '0'; fifo_empty : in std_logic; fifo_data : in std_logic_vector(FIFO_DATA_WIDTH-1 downto 0); fifo_holdoff : in std_logic := '0'; packet_control : out packet_control_t; packet_empty : out std_logic; packet_ready : in std_logic; meta_fifo_usedw : in std_logic_vector(META_FIFO_USEDW_WIDTH-1 downto 0); meta_fifo_read : buffer std_logic := '0'; meta_fifo_empty : in std_logic; meta_fifo_data : in std_logic_vector(META_FIFO_DATA_WIDTH-1 downto 0); in_sample_controls : in sample_controls_t(0 to NUM_STREAMS-1) := (others => SAMPLE_CONTROL_DISABLE); out_samples : out sample_streams_t(0 to NUM_STREAMS-1) := (others => ZERO_SAMPLE); underflow_led : buffer std_logic; underflow_count : buffer unsigned(63 downto 0); underflow_duration : in unsigned(15 downto 0) ); end entity; architecture simple of fifo_reader is constant DMA_BUF_SIZE_SS : natural := 512; constant DMA_BUF_SIZE_HS : natural := 256; signal dma_buf_size : natural range DMA_BUF_SIZE_HS to DMA_BUF_SIZE_SS := DMA_BUF_SIZE_SS; signal underflow_detected : std_logic := '0'; type meta_state_t is ( META_LOAD, META_WAIT, META_DOWNCOUNT ); type meta_fsm_t is record state : meta_state_t; dma_downcount : natural range 0 to DMA_BUF_SIZE_SS; meta_pkt_sop : std_logic; meta_pkt_eop : std_logic; skip_padding : std_logic; meta_read : std_logic; meta_cache : std_logic_vector(META_FIFO_DATA_WIDTH-1 downto 0); meta_p_time : unsigned(63 downto 0); meta_time_go : std_logic; end record; constant META_FSM_RESET_VALUE : meta_fsm_t := ( state => META_LOAD, dma_downcount => 0, meta_pkt_sop => '0', meta_pkt_eop => '0', skip_padding => '0', meta_read => '0', meta_cache => (others => '0'), meta_p_time => (others => '-'), meta_time_go => '0' ); signal meta_current : meta_fsm_t := META_FSM_RESET_VALUE; signal meta_future : meta_fsm_t := META_FSM_RESET_VALUE; type fifo_state_t is ( COMPUTE_ENABLED_CHANNELS, COMPUTE_OFFSETS, READ_PACKET, READ_SAMPLES, READ_THROTTLE, READ_HOLDOFF ); type ch_offsets_t is array( natural range <> ) of natural range fifo_data'low to fifo_data'high; type fifo_fsm_t is record state : fifo_state_t; downcount : natural range 0 to FIFO_READ_THROTTLE; sample_controls_reg : sample_controls_t(in_sample_controls'range); enabled_channels : natural range 0 to in_sample_controls'length; ch_shift : natural range 0 to out_samples'high; ch_offsets : ch_offsets_t(in_sample_controls'range); samples_left_init : natural range 0 to in_sample_controls'length; samples_left : natural range 0 to in_sample_controls'length; packet_control : packet_control_t; packet_data_cache : std_logic_vector(31 downto 0); fifo_read : std_logic; out_samples : sample_streams_t(out_samples'range); eight_bit_sample_sel: std_logic; end record; constant FIFO_FSM_RESET_VALUE : fifo_fsm_t := ( state => COMPUTE_ENABLED_CHANNELS, downcount => FIFO_READ_THROTTLE, sample_controls_reg => (others => SAMPLE_CONTROL_DISABLE), enabled_channels => 0, ch_shift => 0, ch_offsets => (others => 0), samples_left_init => 0, samples_left => 0, packet_control => PACKET_CONTROL_DEFAULT, packet_data_cache => (others => '0'), fifo_read => '0', out_samples => (others => ZERO_SAMPLE), eight_bit_sample_sel => '0' ); signal fifo_current : fifo_fsm_t := FIFO_FSM_RESET_VALUE; signal fifo_future : fifo_fsm_t := FIFO_FSM_RESET_VALUE; begin -- Throw compile/synthesis error if things don't make sense assert ( (in_sample_controls'low = out_samples'low) and (in_sample_controls'high = out_samples'high) ) report "in_sample_controls must have same range as out_samples" severity failure; -- Determine the DMA buffer size based on USB speed calc_buf_size : process( clock, reset ) begin if( reset = '1' ) then dma_buf_size <= DMA_BUF_SIZE_SS; elsif( rising_edge(clock) ) then if( usb_speed = '0' ) then dma_buf_size <= DMA_BUF_SIZE_SS; else dma_buf_size <= DMA_BUF_SIZE_HS; end if; end if; end process; -- ------------------------------------------------------------------------ -- META FIFO FSM -- ------------------------------------------------------------------------ -- Meta FIFO synchronous process meta_fsm_sync : process( clock, reset ) begin if( reset = '1' ) then meta_current <= META_FSM_RESET_VALUE; elsif( rising_edge(clock) ) then meta_current <= meta_future; end if; end process; packet_empty <= '1' when ( meta_fifo_empty = '1' and meta_current.state /= META_WAIT ) else '0' ; -- Meta FIFO combinatorial process meta_fsm_comb : process( all ) variable meta_time : unsigned(63 downto 0); begin meta_future <= meta_current; meta_future.meta_read <= '0'; meta_future.meta_pkt_sop <= '0'; meta_future.meta_pkt_eop <= '0'; case meta_current.state is when META_LOAD => meta_future.skip_padding <= '0'; meta_time := unsigned(meta_fifo_data(95 downto 32)) - 1; meta_future.meta_p_time <= meta_time; meta_future.meta_cache <= meta_fifo_data; if( meta_current.dma_downcount = NUM_STREAMS ) then meta_future.dma_downcount <= 0; end if; if( fifo_current.ch_shift = 0 ) then if( meta_fifo_empty = '0' and (packet_en = '0' or (packet_en = '1' and packet_ready = '1') ) ) then meta_future.meta_read <= '1'; meta_future.state <= META_WAIT; if( packet_en = '1' or meta_time /= timestamp ) then meta_future.meta_time_go <= '0'; else meta_future.meta_time_go <= '1'; end if; else meta_future.meta_time_go <= '0'; end if; end if; when META_WAIT => if( packet_en = '1' ) then meta_future.dma_downcount <= to_integer(unsigned(meta_current.meta_cache(15 downto 0))); else meta_future.dma_downcount <= dma_buf_size - 4; end if; if( (timestamp >= meta_current.meta_p_time or meta_current.meta_p_time + 1 = 0) and ( packet_en = '0' or ( packet_en = '1' and packet_ready = '1' ) ) ) then meta_future.meta_time_go <= '1'; meta_future.state <= META_DOWNCOUNT; meta_future.meta_pkt_sop <= '1'; else meta_future.meta_time_go <= '0'; end if; when META_DOWNCOUNT => meta_future.meta_time_go <= '1'; if( packet_en = '0' ) then if( fifo_current.fifo_read = '1') then meta_future.dma_downcount <= meta_current.dma_downcount - NUM_STREAMS; end if; if( meta_current.dma_downcount <= NUM_STREAMS ) then -- Look for 2 because of the 2 cycles passing -- through META_LOAD and META_WAIT after this. meta_future.state <= META_LOAD; end if; else if( fifo_current.packet_control.data_valid = '1') then meta_future.dma_downcount <= meta_current.dma_downcount - 1; end if; if( meta_current.dma_downcount <= 1 and packet_ready = '1' ) then meta_future.state <= META_LOAD; meta_future.meta_pkt_eop <= '1'; end if; end if; if( meta_current.meta_cache(0) = '1' ) then meta_future.skip_padding <= '1'; end if; when others => meta_future.state <= META_LOAD; end case; -- Abort? if( (enable = '0') or (meta_en = '0') ) then meta_future <= META_FSM_RESET_VALUE; end if; -- Output assignments meta_fifo_read <= meta_current.meta_read; end process; -- ------------------------------------------------------------------------ -- SAMPLE FIFO FSM -- ------------------------------------------------------------------------ -- Sample FIFO synchronous process fifo_fsm_sync : process( clock, reset ) begin if( reset = '1' ) then fifo_current <= FIFO_FSM_RESET_VALUE; elsif( rising_edge(clock) ) then fifo_current <= fifo_future; end if; end process; -- Sample FIFO combinatorial process fifo_fsm_comb : process( all ) -- -------------------------------------------------------------------- -- MIMO UNPACKER: STEP 1 of 5 -- -------------------------------------------------------------------- -- The sample FIFO output is a wide data bus that may contain more -- than one sample for a given channel. This function unpacks -- the bus into an array of sample streams. For example, a 2x2 MIMO -- design with 16-bit samples will pack its data into a 64-bit wide -- bus in one of the following ways: -- | 63:48 | 47:32 | 31:16 | 15:0 | Bits -- 1. | Q1 | I1 | Q0 | I0 | Channels 0 & 1 enabled -- 2. | Q0' | I0' | Q0 | I0 | Channel 0 only enabled -- 3. | Q1' | I1' | Q1 | I1 | Channel 1 only enabled -- This function will return an array of length 2. The 0th -- element containing I0/Q0, and the 1st element I1/Q1. It is up -- to the state machine to select between element 0 and 1 based -- on which stream(s) is/are enabled. function unpack( c : sample_controls_t; d : std_logic_vector ) return sample_streams_t is variable rv : sample_streams_t(c'range); constant OFFSET_UNIT : natural := rv(rv'low).data_i'length + rv(rv'low).data_q'length; -- The following 4 constants are platform-specific and perhaps -- should be parameters instead. This is good enough for now. constant I_HIGH : natural := 11; constant I_LOW : natural := 0; constant Q_HIGH : natural := 27; constant Q_LOW : natural := 16; begin -- Ensure the array indices are normalized assert (c'low = 0) and (c'high >= c'low) report "Invalid range for parameter 'c'" severity failure; for i in rv'range loop rv(i).data_i := resize(signed(shift_right(unsigned(d),i*OFFSET_UNIT)(I_HIGH downto I_LOW)),rv(i).data_i'length); rv(i).data_q := resize(signed(shift_right(unsigned(d),i*OFFSET_UNIT)(Q_HIGH downto Q_LOW)),rv(i).data_q'length); rv(i).data_v := '0'; end loop; return rv; end function; -- -------------------------------------------------------------------- -- MIMO UNPACKER: STEP 1 of 5 (8-bit/half band mode) -- -------------------------------------------------------------------- -- The sample FIFO output is a wide data bus that may contain more -- than one sample for a given channel. This function unpacks -- the bus into an array of sample streams. For example, a 2x2 MIMO -- design with 8-bit samples will pack its data into a 64-bit wide -- bus in one of the following ways: -- | Sample 1 | Sample 0 | -- | 63:56 | 55:48 | 47:40 | 39:32 | 31:24 | 23:16 | 15:8 | 7:0 | Bits -- 1. | Q1 | I1 | Q0 | I0 | Q1 | I1 | Q0 | I0 | Channels 0 & 1 enabled -- 2. | Q0' | I0' | Q0 | I0 | Q0' | I0' | Q0 | I0 | Channel 0 only enabled -- 3. | Q1' | I1' | Q1 | I1 | Q1' | I1' | Q1 | I1 | Channel 1 only enabled -- -- Note: This function is meant to be ran twice to retreive both samples on the bus function unpack_eight_bit_mode( c : sample_controls_t; d : std_logic_vector; sample : std_logic ) return sample_streams_t is variable rv : sample_streams_t(c'range); constant OFFSET_UNIT : natural := 16; constant SAMPLE_OFFSET_UNIT : natural := 2 * OFFSET_UNIT; -- The following 4 constants are platform-specific and perhaps -- should be parameters instead. This is good enough for now. constant I_HIGH : natural := 7; constant I_LOW : natural := 0; constant Q_HIGH : natural := 15; constant Q_LOW : natural := 8; -- 8bit mode constants constant SIGMA_DELTA_BITS : signed (3 downto 0) := "0000"; begin -- Ensure the array indices are normalized assert (c'low = 0) and (c'high >= c'low) report "Invalid range for parameter 'c'" severity failure; if (sample = '0') then for i in rv'range loop rv(i).data_i := shift_left(resize(signed(shift_right(unsigned(d),i*OFFSET_UNIT)(I_HIGH downto I_LOW)), rv(i).data_i'length),4); rv(i).data_q := shift_left(resize(signed(shift_right(unsigned(d),i*OFFSET_UNIT)(Q_HIGH downto Q_LOW)), rv(i).data_q'length),4); rv(i).data_v := '0'; end loop; elsif (sample = '1') then for i in rv'range loop rv(i).data_i := shift_left(resize(signed(shift_left(shift_right(unsigned(d),i*OFFSET_UNIT + SAMPLE_OFFSET_UNIT)(I_HIGH downto I_LOW),0)), rv(i).data_i'length),4); rv(i).data_q := shift_left(resize(signed(shift_left(shift_right(unsigned(d),i*OFFSET_UNIT + SAMPLE_OFFSET_UNIT)(Q_HIGH downto Q_LOW),0)), rv(i).data_q'length),4); rv(i).data_v := '0'; end loop; else report "fifo_reader: Sample choice out of range" severity failure; end if; return rv; end function; -- -------------------------------------------------------------------- -- MIMO UNPACKER: STEP 3 of 5 -- -------------------------------------------------------------------- -- The FIFO data has been unpacked into an array containing I and Q -- samples for each of the possible channels they belong to. We need to -- figure out which index of this unpacked array belongs to which -- channel so we can output it to the correct endpoint, as follows: -- a. All channel indices start at 0. -- b. For each channel, add 1 to the index for each previous -- channel that is enabled. For 2x2 MIMO: -- ch_enabled | array index of the unpacked data stream -- 0 & 1 | ch0 = 0 ; ch1 = 0 + 1 = 1 -- 0 only | ch0 = 0 ; ch1 = - = 0 (ch1 is disabled, doesn't matter) -- 1 only | ch0 = - = 0; ch1 = 0 + 0 = 0 (ch0 is disabled, doesn't matter) function compute_initial_channel_offsets( x : sample_controls_t ) return ch_offsets_t is variable rv : ch_offsets_t(x'range) := (others => 0); begin rv := (others => 0); for i in x'low+1 to x'high loop for j in x'low to x'high-1 loop if( x(j).enable = '1' ) then rv(i) := rv(i) + 1; end if; end loop; end loop; return rv; end function; variable unpacked : sample_streams_t(out_samples'range); variable read_req : std_logic := '0'; begin fifo_future <= fifo_current; fifo_future.fifo_read <= '0'; fifo_future.packet_control.pkt_sop <= meta_current.meta_pkt_sop; fifo_future.packet_control.data_valid <= '0'; -- MIMO UNPACKER: STEP 1 of 5 if( eight_bit_mode_en = '1') then unpacked := unpack_eight_bit_mode(fifo_current.sample_controls_reg, fifo_data, fifo_current.eight_bit_sample_sel); else unpacked := unpack(fifo_current.sample_controls_reg, fifo_data); end if; for i in fifo_future.out_samples'range loop if( fifo_current.sample_controls_reg(i).enable = '1' ) then fifo_future.out_samples(i) <= unpacked(fifo_current.ch_offsets(i) + fifo_current.ch_shift); end if; end loop; case fifo_current.state is when COMPUTE_ENABLED_CHANNELS => -- MIMO UNPACKER: STEP 2 of 5 -- Count the number of enabled channels fifo_future.enabled_channels <= count_enabled_channels(in_sample_controls); -- Register the sample control settings fifo_future.sample_controls_reg <= in_sample_controls; fifo_future.state <= COMPUTE_OFFSETS; when COMPUTE_OFFSETS => -- MIMO UNPACKER: STEP 3 of 5 fifo_future.ch_offsets <= compute_initial_channel_offsets(fifo_current.sample_controls_reg); -- MIMO UNPACKER: STEP 4 of 5 -- Compute the number of valid samples that each channel has remaining in fifo_data that -- still need to be processed (not including the first). This becomes the number of clock -- cycles to wait before asserting the FIFO read request to get a new batch of samples. fifo_future.samples_left_init <= NUM_STREAMS - fifo_current.enabled_channels; fifo_future.samples_left <= NUM_STREAMS - fifo_current.enabled_channels; if( packet_en = '1' ) then fifo_future.state <= READ_PACKET; fifo_future.samples_left <= NUM_STREAMS - 1; else fifo_future.state <= READ_SAMPLES; end if; when READ_PACKET => if( meta_current.meta_pkt_eop = '1' and meta_current.skip_padding = '1') then fifo_future.samples_left <= NUM_STREAMS - 1; end if; if( fifo_data'high > 31) then if( fifo_current.samples_left = 0) then fifo_future.packet_control.data <= fifo_current.packet_data_cache; elsif( fifo_current.samples_left = 1) then fifo_future.packet_control.data <= fifo_data(31 downto 0); fifo_future.packet_data_cache <= fifo_data(63 downto 32); end if; else fifo_future.packet_control.data <= fifo_data(31 downto 0); end if; fifo_future.packet_control.pkt_eop <= '0'; if( meta_current.meta_time_go = '1' and meta_current.dma_downcount > 0 and packet_ready = '1' ) then if( meta_current.dma_downcount = 1 ) then fifo_future.packet_control.pkt_eop <= '1'; end if; fifo_future.packet_control.data_valid <= '1'; if( fifo_current.samples_left = NUM_STREAMS - 1) then fifo_future.fifo_read <= '1'; end if; if( fifo_current.samples_left = 0 ) then fifo_future.samples_left <= NUM_STREAMS - 1; else fifo_future.samples_left <= fifo_current.samples_left - 1; end if; end if; when READ_SAMPLES => fifo_future.downcount <= FIFO_FSM_RESET_VALUE.downcount; if( fifo_holdoff = '1' ) then -- Pause for a spell fifo_future.state <= READ_HOLDOFF; elsif( fifo_empty = '0' and (meta_en = '0' or (meta_en = '1' and meta_current.meta_time_go = '1')) ) then -- Check for valid data request read_req := '0'; for i in in_sample_controls'range loop read_req := read_req or (in_sample_controls(i).data_req and in_sample_controls(i).enable); fifo_future.out_samples(i).data_v <= in_sample_controls(i).data_req and in_sample_controls(i).enable; end loop; -- Received a valid data request if( read_req = '1' ) then if( fifo_current.samples_left = 0 ) then fifo_future.samples_left <= fifo_current.samples_left_init; fifo_future.ch_shift <= 0; if( eight_bit_mode_en = '1' ) then fifo_future.fifo_read <= read_req and fifo_current.eight_bit_sample_sel; fifo_future.eight_bit_sample_sel <= not fifo_current.eight_bit_sample_sel; else fifo_future.fifo_read <= read_req; end if; else -- MIMO UNPACKER: STEP 5 of 5 -- Add the number of enabled channels to each channel's offset index. -- This points that channel to the next valid sample in the current fifo_data. fifo_future.ch_shift <= fifo_current.ch_shift + fifo_current.enabled_channels; fifo_future.samples_left <= fifo_current.samples_left - 1; end if; if( FIFO_FSM_RESET_VALUE.downcount /= 0 ) then fifo_future.state <= READ_THROTTLE; end if; end if; end if; when READ_THROTTLE => -- If in this state, downcount is guaranteed to be >= 1 if( fifo_current.downcount = 1 ) then fifo_future.state <= READ_SAMPLES; else fifo_future.downcount <= fifo_current.downcount - 1; end if; when READ_HOLDOFF => if( fifo_holdoff = '0' ) then fifo_future.state <= READ_SAMPLES; end if; when others => fifo_future.state <= FIFO_FSM_RESET_VALUE.state; end case; -- Abort? if( enable = '0' ) then fifo_future.fifo_read <= '0'; fifo_future.state <= FIFO_FSM_RESET_VALUE.state; for i in fifo_current.out_samples'range loop fifo_future.out_samples(i).data_v <= '0'; end loop; end if; if( fifo_empty = '1' and packet_en = '0' ) then -- Re-evaluate the MIMO settings fifo_future.state <= FIFO_FSM_RESET_VALUE.state; end if; -- Output assignments fifo_read <= fifo_current.fifo_read; out_samples <= fifo_current.out_samples; packet_control <= fifo_current.packet_control; end process; -- ------------------------------------------------------------------------ -- UNDERFLOW -- ------------------------------------------------------------------------ -- Underflow detection detect_underflows : process( clock, reset ) begin if( reset = '1' ) then underflow_detected <= '0'; elsif( rising_edge( clock ) ) then underflow_detected <= '0'; if( enable = '1' and fifo_empty = '1' and (meta_en = '0' or (meta_en = '1' and meta_current.meta_time_go = '1')) ) then underflow_detected <= '1'; end if; end if; end process; -- Count the number of times we underflow, but only if they are discontinuous -- meaning we have an underflow condition, a non-underflow condition, then -- another underflow condition counts as 2 underflows, but an underflow condition -- followed by N underflow conditions counts as a single underflow condition. count_underflows : process( clock, reset ) variable prev_underflow : std_logic := '0'; begin if( reset = '1' ) then prev_underflow := '0'; underflow_count <= (others =>'0'); elsif( rising_edge( clock ) ) then if( prev_underflow = '0' and underflow_detected = '1' ) then underflow_count <= underflow_count + 1; end if; prev_underflow := underflow_detected; end if; end process; -- Active high assertion for underflow_duration when the underflow -- condition has been detected. The LED will stay asserted -- if multiple underflows have occurred blink_underflow_led : process( clock, reset ) variable downcount : natural range 0 to 2**underflow_duration'length-1 := 0; begin if( reset = '1' ) then downcount := 0; underflow_led <= '0'; elsif( rising_edge(clock) ) then -- Default to not being asserted underflow_led <= '0'; -- Countdown so we can see what happened if( downcount /= 0 ) then downcount := downcount - 1; underflow_led <= '1'; end if; -- Underflow occurred so light it up if( underflow_detected = '1' ) then downcount := to_integer(underflow_duration); end if; end if; end process; end architecture; bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/fifo_readwrite_p.vhd000066400000000000000000000066251457144405000244470ustar00rootroot00000000000000-- Copyright (c) 2017 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; package fifo_readwrite_p is type sample_control_t is record enable : std_logic; data_req : std_logic; end record; type sample_controls_t is array( natural range <> ) of sample_control_t; type sample_stream_t is record data_i : signed(15 downto 0); data_q : signed(15 downto 0); data_v : std_logic; end record; type sample_streams_t is array( natural range <> ) of sample_stream_t; type packet_control_t is record pkt_core_id : std_logic_vector(7 downto 0); pkt_flags : std_logic_vector(7 downto 0); pkt_sop : std_logic; pkt_eop : std_logic; data : std_logic_vector(31 downto 0); data_valid : std_logic; end record; type packet_controls_t is array( natural range <> ) of packet_control_t; constant SAMPLE_CONTROL_ENABLE : sample_control_t; constant SAMPLE_CONTROL_DISABLE : sample_control_t; constant PACKET_CONTROL_DEFAULT : packet_control_t; constant ZERO_SAMPLE : sample_stream_t; -- Count how many channels are enabled function count_enabled_channels( x : sample_controls_t ) return natural; end package; package body fifo_readwrite_p is constant SAMPLE_CONTROL_ENABLE : sample_control_t := ( enable => '1', data_req => '1' ); constant SAMPLE_CONTROL_DISABLE : sample_control_t := ( enable => '0', data_req => '0' ); constant PACKET_CONTROL_DEFAULT : packet_control_t := ( pkt_core_id => (others => '0'), pkt_flags => (others => '0'), pkt_sop => '0', pkt_eop => '0', data => (others => '0'), data_valid => '0' ); constant ZERO_SAMPLE : sample_stream_t := ( data_i => (others => '0'), data_q => (others => '0'), data_v => '0' ); -- Count how many channels are enabled function count_enabled_channels( x : sample_controls_t ) return natural is variable rv : natural := 0; begin rv := 0; for i in x'range loop if( x(i).enable = '1' ) then rv := rv + 1; end if; end loop; return rv; end function; end package body; bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/fifo_writer.vhd000066400000000000000000000632031457144405000234510ustar00rootroot00000000000000-- Copyright (c) 2017 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; library work; use work.fifo_readwrite_p.all; entity fifo_writer is generic ( NUM_STREAMS : natural := 1; FIFO_USEDW_WIDTH : natural := 12; FIFO_DATA_WIDTH : natural := 32; META_FIFO_USEDW_WIDTH : natural := 5; META_FIFO_DATA_WIDTH : natural := 128 ); port ( clock : in std_logic; reset : in std_logic; enable : in std_logic; usb_speed : in std_logic; meta_en : in std_logic; packet_en : in std_logic; eight_bit_mode_en : in std_logic := '0'; timestamp : in unsigned(63 downto 0); mini_exp : in std_logic_vector(1 downto 0); in_sample_controls : in sample_controls_t(0 to NUM_STREAMS-1) := (others => SAMPLE_CONTROL_DISABLE); in_samples : in sample_streams_t(0 to NUM_STREAMS-1) := (others => ZERO_SAMPLE); fifo_usedw : in std_logic_vector(FIFO_USEDW_WIDTH-1 downto 0); fifo_clear : buffer std_logic; fifo_write : buffer std_logic := '0'; fifo_full : in std_logic; fifo_data : out std_logic_vector(FIFO_DATA_WIDTH-1 downto 0) := (others => '0'); packet_control : in packet_control_t; packet_ready : out std_logic; meta_fifo_full : in std_logic; meta_fifo_usedw : in std_logic_vector(META_FIFO_USEDW_WIDTH-1 downto 0); meta_fifo_data : out std_logic_vector(META_FIFO_DATA_WIDTH-1 downto 0) := (others => '0'); meta_fifo_write : out std_logic := '0'; overflow_led : buffer std_logic; overflow_count : buffer unsigned(63 downto 0); overflow_duration : in unsigned(15 downto 0) ); end entity; architecture simple of fifo_writer is constant DMA_BUF_SIZE_SS : natural := 512; constant DMA_BUF_SIZE_HS : natural := 256; signal dma_buf_size : natural range DMA_BUF_SIZE_HS to DMA_BUF_SIZE_SS := DMA_BUF_SIZE_SS; signal fifo_enough : boolean := false; signal overflow_detected : std_logic := '0'; type meta_state_t is ( IDLE, META_WRITE, META_DOWNCOUNT, PACKET_WAIT_EOP ); type meta_fsm_t is record state : meta_state_t; dma_downcount : natural range 0 to 65536; meta_write : std_logic; meta_data : std_logic_vector(meta_fifo_data'range); meta_written : std_logic; end record; constant META_FSM_RESET_VALUE : meta_fsm_t := ( state => IDLE, dma_downcount => 0, meta_write => '0', meta_data => (others => '-'), meta_written => '0' ); signal meta_current : meta_fsm_t := META_FSM_RESET_VALUE; signal meta_future : meta_fsm_t := META_FSM_RESET_VALUE; type fifo_state_t is ( CLEAR, WRITE_SAMPLES, WRITE_PACKET_PAYLOAD, HOLDOFF ); type ch_offsets_t is array( natural range <> ) of natural range fifo_data'low to fifo_data'high; type fifo_fsm_t is record state : fifo_state_t; fifo_clear : std_logic; fifo_write : std_logic; fifo_data : unsigned(fifo_data'range); samples_left : natural range 0 to in_sample_controls'length; eight_bit_delay : std_logic; end record; constant FIFO_FSM_RESET_VALUE : fifo_fsm_t := ( state => CLEAR, fifo_clear => '1', fifo_write => '0', fifo_data => (others => '-'), samples_left => 0, eight_bit_delay => '0' ); signal fifo_current : fifo_fsm_t := FIFO_FSM_RESET_VALUE; signal fifo_future : fifo_fsm_t := FIFO_FSM_RESET_VALUE; signal sync_mini_exp: std_logic_vector(1 downto 0); begin -- Throw an error if port widths don't make sense assert (fifo_data'length >= (NUM_STREAMS*2*in_samples(in_samples'low).data_i'length) ) report "fifo_data port width too narrow to support " & integer'image(NUM_STREAMS) & " MIMO streams." severity failure; -- Determine the DMA buffer size based on USB speed calc_buf_size : process( clock, reset ) begin if( reset = '1' ) then dma_buf_size <= DMA_BUF_SIZE_SS; elsif( rising_edge(clock) ) then if( usb_speed = '0' ) then dma_buf_size <= DMA_BUF_SIZE_SS; else dma_buf_size <= DMA_BUF_SIZE_HS; end if; end if; end process; -- Calculate whether there's enough room in the destination FIFO calc_fifo_free : process( clock, reset ) constant FIFO_MAX : natural := 2**fifo_usedw'length; constant META_MAX : natural := 2**meta_fifo_usedw'length; variable fifo_used_v : unsigned(fifo_usedw'length downto 0) := (others => '0'); variable meta_fifo_used_v : unsigned(meta_fifo_usedw'length downto 0) := (others => '0'); begin if( reset = '1' ) then fifo_enough <= false; fifo_used_v := (others => '0'); elsif( rising_edge(clock) ) then fifo_used_v := unsigned(fifo_full & fifo_usedw); meta_fifo_used_v := unsigned(meta_fifo_full & meta_fifo_usedw); if( fifo_full = '0' and ((FIFO_MAX - fifo_used_v) > ( dma_buf_size * 4 )) and ( ( meta_en = '1' and meta_fifo_full = '0' and ( META_MAX - 4 ) > meta_fifo_used_v ) or (meta_en = '0') ) ) then fifo_enough <= true; else fifo_enough <= false; end if; end if; end process; -- ------------------------------------------------------------------------ -- MINI EXP PIN SYNCHRONIZER -- ------------------------------------------------------------------------ generate_sync_mimo_rx_en : for i in mini_exp'range generate U_sync_mini_exp : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => clock, async => mini_exp(i), sync => sync_mini_exp(i) ); end generate; -- ------------------------------------------------------------------------ -- META FIFO WRITER -- ------------------------------------------------------------------------ -- Meta FIFO synchronous process meta_fsm_sync : process( clock, reset ) begin if( reset = '1' ) then meta_current <= META_FSM_RESET_VALUE; elsif( rising_edge(clock) ) then meta_current <= meta_future; end if; end process; packet_ready <= '1' when fifo_enough else '0'; -- Meta FIFO combinatorial process meta_fsm_comb : process( all ) variable packet_flags : std_logic_vector(7 downto 0); begin meta_future <= meta_current; meta_future.meta_write <= '0'; -- currently the GPIF modules overwrites the bottom 16 bits of the flags field if( packet_en = '0' ) then meta_future.meta_data <= x"FFF" & "11" & sync_mini_exp & x"FFFF" & std_logic_vector(timestamp) & x"12344321"; else packet_flags := packet_control.pkt_flags; meta_future.meta_data <= x"FFF" & "11" & sync_mini_exp & x"FFFF" & std_logic_vector(timestamp) & packet_control.pkt_core_id & packet_flags & std_logic_vector(to_unsigned(integer(meta_current.dma_downcount), 16)); end if; case meta_current.state is when IDLE => meta_future.dma_downcount <= dma_buf_size - 4; if( fifo_enough ) then if( packet_en = '1' ) then -- use downcount to count number of DWORDS for packets if( packet_control.pkt_sop = '1' ) then meta_future.state <= PACKET_WAIT_EOP; -- meta is not written yet, but there should be space meta_future.meta_written <= '1'; -- EOP and VALID must be asserted together, count the last VALID now if( packet_control.data_valid = '1') then meta_future.dma_downcount <= 2; else meta_future.dma_downcount <= 1; end if; end if; else meta_future.state <= META_WRITE; end if; else meta_future.meta_written <= '0'; end if; when META_WRITE => for i in in_samples'range loop if (meta_fifo_full = '0') and (in_samples(i).data_v = '1') then meta_future.meta_write <= '1'; meta_future.meta_written <= '1'; meta_future.state <= META_DOWNCOUNT; exit; -- Exit loop after first match end if; end loop; when META_DOWNCOUNT => if( fifo_current.fifo_write = '1' and meta_current.meta_write = '0' ) then meta_future.dma_downcount <= meta_current.dma_downcount - NUM_STREAMS; end if; if( meta_current.dma_downcount <= NUM_STREAMS ) then -- Look for 2 because of the 2 cycles passing -- through IDLE and META_WRITE after this. -- 8bit format requires an additional 2 cycle delay. if( eight_bit_mode_en = '1' ) then if( fifo_future.eight_bit_delay = '1' and fifo_future.samples_left = 0) then meta_future.state <= IDLE; end if; else meta_future.state <= IDLE; end if; end if; -- Patches the late meta write for MIMO mode if( in_sample_controls'length = 2 and in_sample_controls(0).enable = '1' and in_sample_controls(1).enable = '1' and eight_bit_mode_en = '0' and meta_current.dma_downcount <= NUM_STREAMS + 2 ) then meta_future.state <= IDLE; end if; when PACKET_WAIT_EOP => if( packet_control.data_valid = '1' ) then meta_future.dma_downcount <= meta_current.dma_downcount + 1; if( packet_control.pkt_eop = '1' ) then meta_future.meta_write <= '1'; meta_future.state <= IDLE; end if; end if; when others => meta_future.state <= IDLE; end case; -- Abort? if( (enable = '0') or (meta_en = '0') ) then meta_future.meta_write <= '0'; meta_future.meta_written <= '0'; meta_future.state <= IDLE; end if; -- Output assignments meta_fifo_write <= meta_current.meta_write; meta_fifo_data <= meta_current.meta_data; end process; -- ------------------------------------------------------------------------ -- SAMPLE FIFO WRITER -- ------------------------------------------------------------------------ -- Sample FIFO synchronous process fifo_fsm_sync : process( clock, reset ) begin if( reset = '1' ) then fifo_current <= FIFO_FSM_RESET_VALUE; elsif( rising_edge(clock) ) then fifo_current <= fifo_future; end if; end process; -- Sample FIFO combinatorial process fifo_fsm_comb : process( all ) -- -------------------------------------------------------------------- -- MIMO PACKER: STEP 1 of 3 -- -------------------------------------------------------------------- -- This block receives samples as an array of sample streams, one -- element per channel. These streams need to be packed into a single, -- wide bus that is written to a FIFO and eventually delivered to the -- host. When all channels are enabled, this wide bus will contain one -- I/Q sample pair for each channel. When channels are disabled, the -- wide bus may contain multiple samples from the remaining enabled -- channels in order to more efficiently use the available USB bandwidth. -- For example, a 2x2 MIMO design with 16-bit samples will pack its data -- into a 64-bit wide bus in one of the following ways: -- | 63:48 | 47:32 | 31:16 | 15:0 | Bit indices -- 1. | Q1 | I1 | Q0 | I0 | Channels 0 & 1 enabled -- 2. | Q0' | I0' | Q0 | I0 | Channel 0 only enabled -- 3. | Q1' | I1' | Q1 | I1 | Channel 1 only enabled function pack( sc : sample_controls_t; ss : sample_streams_t; d : unsigned ) return unsigned is constant LEN : natural := ss(ss'low).data_i'length + ss(ss'low).data_q'length; variable rv : unsigned(d'range) := (others => '0'); begin rv := d; for i in sc'range loop if( (sc(i).enable = '1') and (ss(i).data_v = '1') ) then rv := unsigned(ss(i).data_q) & unsigned(ss(i).data_i) & rv(rv'high downto rv'low+LEN); end if; end loop; return rv; end function; -- -------------------------------------------------------------------- -- MIMO PACKER: STEP 1 of 3 (8bit mode) -- -------------------------------------------------------------------- -- This block receives samples as an array of sample streams, one -- element per channel. These streams need to be packed into a single, -- wide bus that is written to a FIFO and eventually delivered to the -- host. When all channels are enabled, this wide bus will contain one -- I/Q sample pair for each channel. When channels are disabled, the -- wide bus may contain multiple samples from the remaining enabled -- channels in order to more efficiently use the available USB bandwidth. -- For example, a 2x2 MIMO design with 16-bit samples will pack its data -- into a 64-bit wide bus in one of the following ways: -- | Sample Set 1 | Sample Set 0 | -- | 63:56 | 55:48 | 47:40 | 39:32 | 31:24 | 23:16 | 15:8 | 7:0 | Bit indices -- 1. | Q1 | I1 | Q0 | I0 | Q1 | I1 | Q0 | I0 | Channels 0 & 1 enabled -- 2. | Q0' | I0' | Q0 | I0 | Q0' | I0' | Q0 | I0 | Channel 0 only enabled -- 3. | Q1' | I1' | Q1 | I1 | Q1' | I1' | Q1 | I1 | Channel 1 only enabled function pack_eight_bit_mode( sc : sample_controls_t; ss : sample_streams_t; d : unsigned ) return unsigned is constant IQ_PAIR_LEN : natural := ss(ss'low).data_i'length/2 + ss(ss'low).data_q'length/2; variable rv : unsigned(d'range) := (others => '0'); begin rv := d; for i in sc'range loop if( (sc(i).enable = '1') and (ss(i).data_v = '1') ) then rv := unsigned(ss(i).data_q(11 downto 4)) & unsigned(ss(i).data_i(11 downto 4)) & rv(rv'high downto rv'low+IQ_PAIR_LEN); end if; end loop; return rv; end function; variable write_req : std_logic := '0'; begin fifo_future <= fifo_current; fifo_future.fifo_clear <= '0'; fifo_future.fifo_write <= '0'; -- MIMO PACKER: STEP 1 of 3 if( packet_en = '0' ) then if( eight_bit_mode_en = '1' ) then fifo_future.fifo_data <= pack_eight_bit_mode(in_sample_controls, in_samples, fifo_current.fifo_data); else fifo_future.fifo_data <= pack(in_sample_controls, in_samples, fifo_current.fifo_data); end if; end if; case fifo_current.state is when CLEAR => -- MIMO PACKER: STEP 2 of 3 -- Compute "samples left" to fill up the fifo_data bus fifo_future.samples_left <= NUM_STREAMS - count_enabled_channels(in_sample_controls); if( enable = '1' ) then fifo_future.fifo_clear <= '0'; if( packet_en = '1' ) then fifo_future.state <= WRITE_PACKET_PAYLOAD; fifo_future.samples_left <= NUM_STREAMS - 1; else fifo_future.state <= WRITE_SAMPLES; end if; else fifo_future.fifo_clear <= '1'; fifo_future.eight_bit_delay <= '0'; end if; when WRITE_PACKET_PAYLOAD => if( meta_current.meta_written = '1' or (fifo_enough and packet_control.pkt_sop = '1' )) then -- This code converts DWORD packet data into a fifo_data std_logic_vector -- that is controlled by a generic. if( packet_control.data_valid = '1' ) then if( packet_control.pkt_eop = '1' and fifo_current.samples_left /= 0 ) then -- End of packet asserted, however fifo_data is not full so -- zero out the unset bits, commit what has been accumulated fifo_future.samples_left <= NUM_STREAMS - 1; fifo_future.fifo_write <= '1'; if (fifo_current.fifo_data'high > 31) then fifo_future.fifo_data(fifo_future.fifo_data'high downto fifo_future.fifo_data'high - 31) <= (others => '0'); end if; fifo_future.fifo_data(31 downto 0) <= unsigned(packet_control.data); elsif( fifo_current.samples_left = 0 ) then -- DWORDs perfectly filled fifo_data, commit fifo_data fifo_future.samples_left <= NUM_STREAMS - 1; fifo_future.fifo_write <= '1'; if (fifo_current.fifo_data'high > 31) then fifo_future.fifo_data <= unsigned(packet_control.data) & fifo_current.fifo_data(fifo_current.fifo_data'high downto 32); else fifo_future.fifo_data <= unsigned(packet_control.data); end if; else fifo_future.fifo_data(fifo_future.fifo_data'high downto fifo_future.fifo_data'high - 31) <= unsigned(packet_control.data); if (fifo_current.fifo_data'high > 31) then fifo_future.fifo_data(fifo_future.fifo_data'high - 32 downto 0) <= (others => '0'); end if; fifo_future.samples_left <= fifo_current.samples_left - 1; end if; end if; end if; when WRITE_SAMPLES => if( ((meta_current.meta_written = '1') or (meta_en = '0')) ) then -- Check for valid data write_req := '0'; for i in in_sample_controls'range loop if( in_sample_controls(i).enable = '1' ) then write_req := write_req or in_samples(i).data_v; end if; end loop; -- Received valid data if( write_req = '1' ) then if( fifo_current.samples_left = 0 ) then fifo_future.samples_left <= NUM_STREAMS - count_enabled_channels(in_sample_controls); if( eight_bit_mode_en = '1' ) then fifo_future.fifo_write <= write_req and fifo_current.eight_bit_delay; fifo_future.eight_bit_delay <= not fifo_current.eight_bit_delay; else fifo_future.fifo_write <= write_req; end if; else -- MIMO PACKER: STEP 3 of 3 fifo_future.samples_left <= fifo_current.samples_left - 1; end if; end if; else fifo_future.fifo_write <= '0'; end if; if( fifo_full = '1' or ( meta_current.meta_written = '0' and meta_en = '1') ) then fifo_future.fifo_write <= '0'; fifo_future.state <= HOLDOFF; end if; when HOLDOFF => if( fifo_enough ) then fifo_future.state <= WRITE_SAMPLES; end if; when others => fifo_future.state <= CLEAR; end case; -- Abort? if( enable = '0' ) then fifo_future.fifo_clear <= '1'; fifo_future.fifo_write <= '0'; fifo_future.state <= CLEAR; end if; -- Output assignments fifo_clear <= fifo_current.fifo_clear; fifo_write <= fifo_current.fifo_write; fifo_data <= std_logic_vector(fifo_current.fifo_data); end process; -- ------------------------------------------------------------------------ -- OVERFLOW -- ------------------------------------------------------------------------ -- Overflow detection detect_overflows : process( clock, reset ) begin if( reset = '1' ) then overflow_detected <= '0'; elsif( rising_edge( clock ) ) then overflow_detected <= '0'; if( enable = '1' and in_samples(in_samples'low).data_v = '1' and fifo_full = '1' and fifo_current.fifo_clear = '0' ) then overflow_detected <= '1'; end if; end if; end process; -- Count the number of times we overflow, but only if they are discontinuous -- meaning we have an overflow condition, a non-overflow condition, then -- another overflow condition counts as 2 overflows, but an overflow condition -- followed by N overflow conditions counts as a single overflow condition. count_overflows : process( clock, reset ) variable prev_overflow : std_logic := '0'; begin if( reset = '1' ) then prev_overflow := '0'; overflow_count <= (others =>'0'); elsif( rising_edge( clock ) ) then if( prev_overflow = '0' and overflow_detected = '1' ) then overflow_count <= overflow_count + 1; end if; prev_overflow := overflow_detected; end if; end process; -- Active high assertion for overflow_duration when the overflow -- condition has been detected. The LED will stay asserted -- if multiple overflows have occurred blink_overflow_led : process( clock, reset ) variable downcount : natural range 0 to 2**overflow_duration'length-1; begin if( reset = '1' ) then downcount := 0; overflow_led <= '0'; elsif( rising_edge(clock) ) then -- Default to not being asserted overflow_led <= '0'; -- Countdown so we can see what happened if( overflow_detected = '1' ) then downcount := to_integer(overflow_duration); elsif( downcount /= 0 ) then downcount := downcount - 1; overflow_led <= '1'; end if; end if; end process; end architecture; bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/fir_filter.vhd000066400000000000000000000047471457144405000232670ustar00rootroot00000000000000library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.math_real.all; library work; use work.constellation_mapper_p.all; entity fir_filter is generic ( INPUT_WIDTH : positive := 16; OUTPUT_WIDTH : positive := 16; CPS : positive := 1; Q : positive := 12; H : real_array_t := (1.0, 0.0 ,1.0); ACCUM_SCALE : positive := 32; OUTPUT_SHIFT : positive := 12 ); port( clock : in std_logic; reset : in std_logic; --input signal in_sample : in signed(INPUT_WIDTH-1 downto 0); in_valid : in std_logic; --output signal out_sample : out signed(OUTPUT_WIDTH-1 downto 0); out_valid : out std_logic ); end entity; architecture systolic of fir_filter is function mult (a,b : signed; Q : positive) return signed is begin return resize(shift_right(a*b,Q),a'length); end function; --integer(ceil(log2( real(H'length*(2**(INPUT_WIDTH-1))) ))) type accum_t is array( natural range <>) of signed( ACCUM_SCALE-1 downto 0); signal accum : accum_t(H'range); type coeff_t is array( natural range <>) of signed( (INPUT_WIDTH-1 ) downto 0); signal coeff : coeff_t(H'range); function scale_coeffecients (h : real_array_t; q : positive) return coeff_t is variable retval : coeff_t(h'range); begin for i in h'range loop retval(i) := to_signed( integer(round(h(i) * real(2**q))), OUTPUT_WIDTH); end loop; return retval; end function; constant COEF : coeff_t(H'range) := scale_coeffecients(H,Q); begin mac : process(clock, reset) begin if reset = '1' then accum <= (others => (others => '0')); out_valid <= '0'; out_sample <= (others =>'0'); elsif rising_edge(clock) then -- out_valid <= '0'; if in_valid = '1' then for i in accum'range loop if i = accum'high then accum(i) <= resize(COEF(i)*in_sample, accum(i)'length); else accum(i) <= accum(i+1) + resize(COEF(i)*in_sample, accum(i)'length); end if; end loop; out_valid <= '1'; out_sample <= resize(shift_right(accum(0),OUTPUT_SHIFT),out_sample'length); end if; end if; end process; end architecture; bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/fsk_demodulator.vhd000066400000000000000000000070521457144405000243140ustar00rootroot00000000000000-- Copyright (c) 2013 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; library work ; use work.cordic_p.all ; entity fsk_demodulator is port ( clock : in std_logic ; reset : in std_logic ; in_real : in signed(15 downto 0) ; in_imag : in signed(15 downto 0) ; in_valid : in std_logic ; out_ssd : buffer signed(15 downto 0) ; out_valid : out std_logic ) ; end entity ; -- fsk_demodulator architecture arch of fsk_demodulator is signal cordic_inputs : cordic_xyz_t ; signal cordic_outputs : cordic_xyz_t ; signal prev_z : signed(15 downto 0) ; signal delta_z : signed(15 downto 0) ; signal delta_z_valid : std_logic ; signal unwrapped_z : signed(15 downto 0) ; signal unwrapped_valid : std_logic ; begin cordic_inputs <= ( x => in_real, y => in_imag, z => (others =>'0'), valid => in_valid ) ; U_cordic : entity work.cordic port map ( clock => clock, reset => reset, mode => CORDIC_VECTORING, inputs => cordic_inputs, outputs => cordic_outputs ) ; find_derivative : process(clock, reset) begin if( reset = '1' ) then prev_z <= (others =>'0') ; delta_z <= (others =>'0') ; delta_z_valid <= '0' ; elsif( rising_edge( clock ) ) then delta_z_valid <= cordic_outputs.valid ; if( cordic_outputs.valid = '1' ) then prev_z <= cordic_outputs.z ; delta_z <= cordic_outputs.z - prev_z ; end if ; end if ; end process ; unwrap : process(clock, reset) begin if( reset = '1' ) then unwrapped_z <= (others =>'0') ; unwrapped_valid <= '0' ; elsif( rising_edge( clock ) ) then unwrapped_valid <= delta_z_valid ; if( delta_z > 4096 ) then unwrapped_z <= delta_z - 8192 ; elsif( delta_z < -4096 ) then unwrapped_z <= delta_z + 8192 ; else unwrapped_z <= delta_z ; end if ; end if ; end process ; out_ssd <= out_ssd - shift_right(out_ssd,4) + unwrapped_z when rising_edge(clock) and unwrapped_valid = '1' ; out_valid <= unwrapped_valid when rising_edge(clock); end architecture ; -- arch bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/fsk_modulator.vhd000066400000000000000000000070561457144405000240070ustar00rootroot00000000000000-- Copyright (c) 2013 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; use ieee.math_real.all ; library work ; use work.nco_p.all ; entity fsk_modulator is port ( clock : in std_logic ; reset : in std_logic ; symbol : in std_logic ; symbol_valid : in std_logic ; out_real : out signed(15 downto 0) ; out_imag : out signed(15 downto 0) ; out_valid : out std_logic ) ; end entity ; -- fsk_modulator architecture arch of fsk_modulator is -- Positive deviation for ZERO and negative deviation for ONE constant ZERO : signed(15 downto 0) := to_signed(integer(round(4096.0/19.2)),16) ; constant ONE : signed(15 downto 0) := -ZERO ; signal nco_input : nco_input_t ; signal nco_output : nco_output_t ; begin register_new_symbol : process(clock, reset) -- variable dir : std_logic ; -- variable dphase : signed(15 downto 0) ; begin if( reset = '1' ) then -- dir := '1' ; -- dphase := (others =>'0') ; nco_input.dphase <= ZERO ; nco_input.valid <= '0' ; elsif( rising_edge( clock ) ) then nco_input.valid <= '1' ; -- if( dir = '1' ) then -- if( dphase < 4094) then -- dphase := dphase + 1 ; -- else -- dphase := dphase - 1 ; -- dir := '0' ; -- end if ; -- else -- if( dphase > -4094) then -- dphase := dphase - 1 ; -- else -- dphase := dphase + 1 ; -- dir := '1' ; -- end if ; -- end if ; if( symbol_valid = '1' ) then -- nco_input.dphase <= dphase ; if( symbol = '0' ) then nco_input.dphase <= ZERO ; else nco_input.dphase <= ONE ; end if ; end if ; end if ; end process ; U_nco : entity work.nco port map ( clock => clock, reset => reset, inputs => nco_input, outputs => nco_output ) ; out_real <= nco_output.re ; out_imag <= nco_output.im ; out_valid <= nco_output.valid ; end architecture ; -- arch bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/handshake.vhd000066400000000000000000000043031457144405000230540ustar00rootroot00000000000000library ieee ; use ieee.std_logic_1164.all ; entity handshake is generic ( DATA_WIDTH : positive := 32 ) ; port ( source_reset : in std_logic ; source_clock : in std_logic ; source_data : in std_logic_vector(DATA_WIDTH-1 downto 0) ; dest_reset : in std_logic ; dest_clock : in std_logic ; dest_data : out std_logic_vector(DATA_WIDTH-1 downto 0) ; dest_req : in std_logic ; dest_ack : out std_logic ) ; end entity ; architecture arch of handshake is -- Holding flops for bus at the request time signal source_holding : std_logic_vector(source_data'range) ; -- Source req and ack signals signal source_req : std_logic ; signal source_ack : std_logic ; -- Synchronization signal for destination signal dest_ack_sync : std_logic ; begin U_sync_req : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => source_reset, clock => source_clock, async => dest_req, sync => source_req ) ; dest_ack <= dest_ack_sync ; U_sync_ack : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => dest_reset, clock => dest_clock, async => source_ack, sync => dest_ack_sync ) ; dest_data <= source_holding ; grab_source : process(source_reset, source_clock) variable prev_req : std_logic := '0' ; begin if( source_reset = '1' ) then source_holding <= (others =>'0') ; source_ack <= '0' ; prev_req := '0' ; elsif( rising_edge(source_clock) ) then if( prev_req = '0' and source_req = '1' and source_ack = '0' ) then source_holding <= source_data ; source_ack <= '1' ; elsif( source_req = '0' and source_ack = '1' ) then source_ack <= '0' ; end if ; prev_req := source_req ; end if ; end process ; end architecture ; bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/iq_correction.vhd000066400000000000000000000220671457144405000237750ustar00rootroot00000000000000library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.math_real.all; entity iq_correction is generic( INPUT_WIDTH : positive := 16; OUTPUT_WIDTH: positive := 16; DC_WIDTH : positive := 16; GAIN_WIDTH : positive := 16; PHASE_WIDTH : positive := 16; Q : positive := 12 ); port( clock : in std_logic; reset : in std_logic; --input signal in_real : in signed(INPUT_WIDTH-1 downto 0); in_imag : in signed(INPUT_WIDTH-1 downto 0); in_valid : in std_logic; --output signal out_real : out signed(OUTPUT_WIDTH-1 downto 0); out_imag : out signed(OUTPUT_WIDTh-1 downto 0); out_valid : out std_logic; --correction signals dc_real : in signed(DC_WIDTH-1 downto 0); dc_imag : in signed(DC_WIDTH-1 downto 0); gain : in signed(GAIN_WIDTH-1 downto 0); phase : in signed(PHASE_WIDTH-1 downto 0); correction_valid: in std_logic ); end entity; architecture rx of iq_correction is signal dc_balanced_real : signed(INPUT_WIDTH-1 downto 0); signal dc_balanced_imag : signed(INPUT_WIDTH-1 downto 0); signal dc_balanced_valid : std_logic; signal gain_corrected_real : signed(INPUT_WIDTH-1 downto 0); signal gain_corrected_imag : signed(INPUT_WIDTH-1 downto 0); signal gain_corrected_valid : std_logic; signal phase_corrected_real : signed(OUTPUT_WIDTH-1 downto 0); signal phase_corrected_imag : signed(OUTPUT_WIDTH-1 downto 0); signal phase_corrected_valid : std_logic; signal phase_correction : signed(OUTPUT_WIDTH-1 downto 0); begin -- U_correction_lookup : entity work.tan_table generic map( STEPS => 2**Q, ANGLE => MATH_PI*(10.0/180.0) ) port map ( clock => clock, reset => reset, phase => phase, phase_valid => correction_valid, y => phase_correction, y_valid => open ); --apply DC correction to real and imag apply_dc : process(clock, reset) begin if reset = '1' then -- dc_balanced_real <= (others => '0'); dc_balanced_imag <= (others => '0'); dc_balanced_valid <= '0'; elsif rising_edge(clock) then dc_balanced_valid <= '0'; if in_valid = '1' then dc_balanced_real <= in_real - dc_real; dc_balanced_imag <= in_imag - dc_imag; dc_balanced_valid <= '1'; end if; end if; end process; --apply gain correction to real apply_gain : process(clock, reset) begin if reset = '1' then gain_corrected_real <= (others => '0'); gain_corrected_imag <= (others => '0'); gain_corrected_valid <= '0'; elsif rising_edge(clock) then gain_corrected_valid <= '0'; if dc_balanced_valid = '1' then gain_corrected_real <= resize(shift_right(dc_balanced_real*gain,Q),gain_corrected_real'length); gain_corrected_imag <= dc_balanced_imag; gain_corrected_valid <= '1'; end if; end if; end process; --apply phase correction to imag apply_phase : process(clock, reset) variable register_offset_real : signed(OUTPUT_WIDTH-1 downto 0); variable register_offset_imag : signed(OUTPUT_WIDTH-1 downto 0); variable register_real : signed(OUTPUT_WIDTH-1 downto 0); variable register_imag : signed(OUTPUT_WIDTH-1 downto 0); variable register_valid : std_logic; begin if reset = '1' then phase_corrected_real <= (others => '0'); phase_corrected_imag <= (others => '0'); phase_corrected_valid <= '0'; register_offset_real := (others => '0'); register_offset_imag := (others => '0'); register_real := (others => '0'); register_imag := (others => '0'); register_valid := '0'; elsif rising_edge(clock) then phase_corrected_valid <= '0'; if register_valid = '1' then phase_corrected_real <= register_real + register_offset_real; phase_corrected_imag <= register_imag + register_offset_imag; phase_corrected_valid <= '1'; end if; register_valid := '0'; if gain_corrected_valid = '1' then register_offset_real := resize(shift_right(gain_corrected_imag*phase_correction,Q),phase_corrected_real'length); register_offset_imag := resize(shift_right(gain_corrected_real*phase_correction,Q),phase_corrected_imag'length); register_real := gain_corrected_real; register_imag := gain_corrected_imag; register_valid := '1'; end if; end if; end process; out_real <= phase_corrected_real; out_imag <= phase_corrected_imag; out_valid <= phase_Corrected_valid; end architecture; architecture tx of iq_correction is signal dc_balanced_real : signed(INPUT_WIDTH-1 downto 0); signal dc_balanced_imag : signed(INPUT_WIDTH-1 downto 0); signal dc_balanced_valid : std_logic; signal gain_corrected_real : signed(INPUT_WIDTH-1 downto 0); signal gain_corrected_imag : signed(INPUT_WIDTH-1 downto 0); signal gain_corrected_valid : std_logic; signal phase_corrected_real : signed(OUTPUT_WIDTH-1 downto 0); signal phase_corrected_imag : signed(OUTPUT_WIDTH-1 downto 0); signal phase_corrected_valid : std_logic; signal phase_correction : signed(OUTPUT_WIDTH-1 downto 0); begin --apply gain correction to real apply_gain : process(clock, reset) begin if reset = '1' then gain_corrected_real <= (others => '0'); gain_corrected_imag <= (others => '0'); gain_corrected_valid <= '0'; elsif rising_edge(clock) then gain_corrected_valid <= '0'; if in_valid = '1' then gain_corrected_real <= resize(shift_right(in_real*gain,Q),gain_corrected_real'length); gain_corrected_imag <= in_imag; gain_corrected_valid <= '1'; end if; end if; end process; -- U_phase_correction_lookup : entity work.tan_table generic map( STEPS => 2**Q, ANGLE => MATH_PI*(10.0/180.0) ) port map ( clock => clock, reset => reset, phase => phase, phase_valid => correction_valid, y => phase_correction, y_valid => open ); --apply phase correction to imag apply_phase : process(clock, reset) variable register_offset_real : signed(OUTPUT_WIDTH-1 downto 0); variable register_offset_imag : signed(OUTPUT_WIDTH-1 downto 0); variable register_real : signed(OUTPUT_WIDTH-1 downto 0); variable register_imag : signed(OUTPUT_WIDTH-1 downto 0); variable register_valid : std_logic; begin if reset = '1' then phase_corrected_real <= (others => '0'); phase_corrected_imag <= (others => '0'); phase_corrected_valid <= '0'; register_offset_real := (others => '0'); register_offset_imag := (others => '0'); register_real := (others => '0'); register_imag := (others => '0'); register_valid := '0'; elsif rising_edge(clock) then phase_corrected_valid <= '0'; if register_valid = '1' then phase_corrected_real <= register_real + register_offset_real; phase_corrected_imag <= register_imag + register_offset_imag; phase_corrected_valid <= '1'; end if; register_valid := '0'; if gain_corrected_valid = '1' then register_offset_real := resize(shift_right(gain_corrected_imag*phase_correction,Q),phase_corrected_real'length); register_offset_imag := resize(shift_right(gain_corrected_real*phase_correction,Q),phase_corrected_imag'length); register_real := gain_corrected_real; register_imag := gain_corrected_imag; register_valid := '1'; end if; end if; end process; --apply DC correction to real and imag apply_dc : process(clock, reset) begin if reset = '1' then -- dc_balanced_real <= (others => '0'); dc_balanced_imag <= (others => '0'); dc_balanced_valid <= '0'; elsif rising_edge(clock) then dc_balanced_valid <= '0'; if phase_corrected_valid = '1' then dc_balanced_real <= phase_corrected_real - dc_real; dc_balanced_imag <= phase_corrected_imag - dc_imag; dc_balanced_valid <= '1'; end if; end if; end process; out_real <= dc_balanced_real; out_imag <= dc_balanced_imag; out_valid <= dc_balanced_valid; end architecture; bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/lms6002d/000077500000000000000000000000001457144405000216725ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/lms6002d/modelsim/000077500000000000000000000000001457144405000235035ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/lms6002d/modelsim/compile.do000066400000000000000000000004531457144405000254610ustar00rootroot00000000000000vlib work vcom -work work -2008 ../../../lms6_spi_controller/vhdl/lms6_spi_controller.vhd vcom -work work -2008 ../vhdl/bladerf_agc_lms_drv.vhd vcom -work work -2008 ../vhdl/lms6002d.vhd vcom -work work -2008 ../vhdl/tb/bladerf_agc_lms_drv_tb.vhd vcom -work work -2008 ../vhdl/tb/lms6002d_tb.vhd bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/lms6002d/vhdl/000077500000000000000000000000001457144405000226275ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/lms6002d/vhdl/bladerf_agc.vhd000066400000000000000000000163461457144405000255550ustar00rootroot00000000000000-- Copyright (c) 2017 Nuand LLC -- -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU Affero General Public License as -- published by the Free Software Foundation, either version 3 of the -- License, or (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU Affero General Public License for more details. -- -- You should have received a copy of the GNU Affero General Public License -- along with this program. If not, see . library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; use ieee.math_real.all ; entity bladerf_agc is port ( -- 40MHz clock and async asserted, sync deasserted reset clock : in std_logic ; reset : in std_logic ; agc_hold_req : in std_logic ; gain_inc_req : out std_logic ; gain_dec_req : out std_logic ; gain_rst_req : out std_logic ; gain_ack : in std_logic ; gain_nack : in std_logic ; gain_max : in std_logic ; rst_gains : out std_logic ; burst : out std_logic ; sample_i : in signed(15 downto 0 ) ; sample_q : in signed(15 downto 0 ) ; sample_valid : in std_logic ) ; end entity ; architecture arch of bladerf_agc is type bladerf_sample_t is record i : signed(15 downto 0) ; q : signed(15 downto 0) ; valid : std_logic ; end record ; signal iir : signed( 31 downto 0 ) ; signal ptemp : signed( 31 downto 0 ) ; signal burst_cnt: signed( 7 downto 0 ) ; function run_iir( x : signed( 31 downto 0); y : signed ( 31 downto 0) ) return signed is variable amrea : signed(31 downto 0) ; begin amrea := resize( x - shift_right(x, 6) + shift_right(y, 6), 32 ); return amrea; end; type fsm_t is (IDLE, SETTLE, ATTACK, WAIT_GAIN_ACK, WAIT_GAIN_ACK_1, HOLD) ; type state_t is record fsm : fsm_t ; inc_req : std_logic ; dec_req : std_logic ; rst_req : std_logic ; timer : unsigned( 10 downto 0 ) ; end record ; function NULL_STATE return state_t is variable rv : state_t ; begin rv.fsm := IDLE ; rv.inc_req := '0' ; rv.dec_req := '0' ; rv.rst_req := '0' ; rv.timer := ( others => '0' ); return rv ; end function ; signal current, future : state_t := NULL_STATE ; signal sample, sample_out : bladerf_sample_t ; begin sample.i <= sample_i; sample.q <= sample_q; sample.valid <= sample_valid; gain_inc_req <= current.inc_req ; gain_dec_req <= current.dec_req ; gain_rst_req <= current.rst_req ; process( clock, reset ) begin if( reset = '1' ) then rst_gains <= '0' ; burst <= '0' ; elsif( rising_edge( clock )) then if( ( gain_max = '1' and iir < 1200 ) or current.fsm = SETTLE ) then rst_gains <= '1' ; else rst_gains <= '0' ; end if ; if( gain_max = '0' or iir > 1100 ) then burst <= '1' ; burst_cnt <= to_signed(18, burst_cnt'length) ; else if( ptemp > 1100 ) then burst <= '1' ; burst_cnt <= to_signed(6, burst_cnt'length) ; else if( burst_cnt > 0 ) then burst <= '1' ; burst_cnt <= burst_cnt - 1 ; else burst <= '0' ; end if ; end if ; end if ; end if ; end process ; process( clock, reset ) begin if( reset = '1' ) then iir <= ( others => '0' ) ; ptemp <= (others => '0' ) ; elsif( rising_edge( clock )) then if( current.timer = 18 ) then iir <= ptemp ; elsif( sample.valid = '1') then ptemp <= sample.i * sample.i + sample.q * sample.q ; iir <= run_iir(iir, ptemp) ; end if ; end if ; end process ; sync : process(clock, reset) begin if( reset = '1' ) then current <= NULL_STATE ; elsif( rising_edge(clock) ) then current <= future ; end if ; end process ; comb : process(all) begin future <= current ; future.inc_req <= '0' ; future.dec_req <= '0' ; future.rst_req <= '0' ; case current.fsm is when IDLE => future.fsm <= SETTLE ; when SETTLE => if( current.timer > 32 ) then -- 50 looks good 70 is overkill future.timer <= ( others => '0' ) ; future.fsm <= ATTACK ; else if( current.timer < 400 ) then future.timer <= current.timer + 1 ; end if ; end if ; when ATTACK => if( rst_gains = '1' ) then future.timer <= ( others => '0' ) ; else if( current.timer < 400 ) then future.timer <= current.timer + 1 ; end if ; end if ; if( agc_hold_req = '1' ) then future.fsm <= HOLD ; else -- 405000, -48dBm to enter mid, -28dBm to enter low if( current.timer > 24 and iir > 335000 ) then --335000 future.fsm <= WAIT_GAIN_ACK ; future.dec_req <= '1' ; elsif( current.timer < 24 and iir > 485000 ) then --335000 -- I = Q = sqrt(2048*2048/10)=657, IIR = I^2 + Q^2= 845000 future.fsm <= WAIT_GAIN_ACK ; future.dec_req <= '1' ; elsif( current.timer > 300 and iir < 1000 ) then --elsif( iir < 5000 ) then -- I = Q = 50, IIR = I^2 + Q^2= 5000 future.inc_req <= '1' ; future.fsm <= WAIT_GAIN_ACK ; end if ; end if ; when WAIT_GAIN_ACK => future.fsm <= WAIT_GAIN_ACK_1 ; when WAIT_GAIN_ACK_1 => if( gain_ack = '1' ) then future.fsm <= SETTLE ; future.timer <= ( others => '0' ) ; end if ; if( gain_nack = '1' ) then future.fsm <= ATTACK ; end if ; when HOLD => if( iir < 5000 ) then -- I = Q = 50, IIR = I^2 + Q^2= 5000 future.rst_req <= '1' ; future.fsm <= WAIT_GAIN_ACK ; end if ; end case ; end process ; end architecture ; bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/lms6002d/vhdl/bladerf_agc_lms_drv.vhd000066400000000000000000000270161457144405000272770ustar00rootroot00000000000000-- Copyright (c) 2017 Nuand LLC -- -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU Affero General Public License as -- published by the Free Software Foundation, either version 3 of the -- License, or (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU Affero General Public License for more details. -- -- You should have received a copy of the GNU Affero General Public License -- along with this program. If not, see . library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; use ieee.math_real.all ; entity bladerf_agc_lms_drv is port ( -- 80 MHz clock and async asserted, sync deasserted reset clock : in std_logic ; reset : in std_logic ; enable : in std_logic ; gain_inc_req : in std_logic ; gain_dec_req : in std_logic ; gain_rst_req : in std_logic ; gain_ack : out std_logic ; gain_nack : out std_logic ; gain_high : out std_logic ; gain_mid : out std_logic ; gain_low : out std_logic ; -- Arbiter arbiter_req : out std_logic ; arbiter_grant : in std_logic ; arbiter_done : out std_logic ; -- Misc band_sel : in std_logic ; -- Physical Interface sclk : out std_logic ; miso : in std_logic ; mosi : out std_logic ; cs_n : out std_logic ) ; end entity ; architecture arch of bladerf_agc_lms_drv is type gain_state_t is ( UNSET_GAIN_STATE, HIGH_GAIN_STATE, MID_GAIN_STATE, LOW_GAIN_STATE ) ; type lna_gain_t is ( LNA_MID_GAIN, LNA_MAX_GAIN ) ; type rxvga1_gain_t is ( RXVGA1_MID_GAIN, RXVGA1_MAX_GAIN ) ; type rxvga2_gain_t is ( RXVGA2_LOW_GAIN, RXVGA2_MID_GAIN ) ; type fsm_t is ( INIT, IDLE, SPI_WRITE, SPI_WRITE_GRANTED, WRITE_RXVGA1, WRITE_RXVGA2, UPDATE_GAINS, SPI_WAIT, SPI_WAIT_1 ) ; type gain_t is record lna_gain : lna_gain_t ; rxvga1_gain : rxvga1_gain_t ; rxvga2_gain : rxvga2_gain_t ; end record ; -- -82dBm - -52dBm constant HIGH_GAIN : gain_t := ( lna_gain => LNA_MAX_GAIN, -- 6 dB (Max) rxvga1_gain => RXVGA1_MAX_GAIN, -- 30 dB rxvga2_gain => RXVGA2_MID_GAIN -- 15 dB ) ; -- -52dBm - -30dBm constant MID_GAIN : gain_t := ( lna_gain => LNA_MID_GAIN, -- 3 dB (Mid) rxvga1_gain => RXVGA1_MAX_GAIN, -- 30 dB rxvga2_gain => RXVGA2_LOW_GAIN -- 0 dB ) ; -- -30dBm - -17dBm constant LOW_GAIN : gain_t := ( lna_gain => LNA_MID_GAIN, -- 3 dB (Mid) rxvga1_gain => RXVGA1_MID_GAIN, -- 12 dB rxvga2_gain => RXVGA2_LOW_GAIN -- 0 dB ) ; type state_t is record fsm : fsm_t ; nfsm : fsm_t ; initializing : std_logic ; ack : std_logic ; nack : std_logic ; gain_state : gain_state_t ; current_gain : gain_t ; future_gain : gain_t ; arbiter_req : std_logic ; arbiter_done : std_logic ; gain_inc_req : std_logic ; gain_dec_req : std_logic ; gain_rst_req : std_logic ; -- Avalon-MM Interface mm_write : std_logic ; mm_addr : std_logic_vector(7 downto 0) ; mm_din : std_logic_vector(7 downto 0) ; end record ; function NULL_STATE return state_t is variable rv : state_t ; begin rv.fsm := INIT ; rv.nfsm := INIT ; rv.initializing := '0' ; rv.arbiter_req := '0' ; rv.arbiter_done := '0' ; rv.gain_inc_req := '0' ; rv.gain_dec_req := '0' ; rv.gain_rst_req := '0' ; rv.gain_state := UNSET_GAIN_STATE ; rv.mm_addr := ( others => '0' ) ; rv.mm_din := ( others => '0' ) ; return rv ; end function ; signal current, future : state_t := NULL_STATE ; signal mm_busy : std_logic ; begin arbiter_req <= current.arbiter_req ; arbiter_done <= current.arbiter_done ; gain_high <= '1' when current.gain_state = HIGH_GAIN_STATE else '0' ; gain_mid <= '1' when current.gain_state = MID_GAIN_STATE else '0' ; gain_low <= '1' when current.gain_state = LOW_GAIN_STATE else '0' ; gain_ack <= current.ack ; --'1' when current.fsm = UPDATE_GAINS else '0' ; gain_nack <= current.nack ; U_spi_controller: entity work.lms6_spi_controller generic map ( CLOCK_DIV => 4 ) port map ( -- Physical Interface sclk => sclk, miso => '0', mosi => mosi, cs_n => cs_n, -- Avalon-MM Interface mm_clock => clock, mm_reset => reset, mm_read => '0', mm_write => current.mm_write, mm_addr => current.mm_addr, mm_din => current.mm_din, mm_dout => open, mm_dout_val => open, -- Read data valid. mm_busy => mm_busy ); sync : process(clock, reset) begin if( reset = '1' ) then current <= NULL_STATE ; elsif( rising_edge(clock) ) then current <= future ; end if ; end process ; comb : process(all) begin future <= current ; future.mm_write <= '0' ; future.ack <= '0' ; future.nack <= '0' ; future.arbiter_done <= '0' ; future.arbiter_req <= '0' ; future.gain_inc_req <= gain_inc_req ; future.gain_dec_req <= gain_dec_req ; future.gain_rst_req <= gain_rst_req ; case current.fsm is when INIT => future.nack <= '1' ; if( enable = '1' ) then future.nack <= '0' ; future.gain_state <= HIGH_GAIN_STATE ; future.future_gain <= HIGH_GAIN ; future.initializing <= '1' ; future.fsm <= SPI_WRITE ; end if ; when IDLE => if( current.gain_inc_req = '1' ) then if( current.gain_state = LOW_GAIN_STATE ) then future.gain_state <= MID_GAIN_STATE ; future.future_gain <= MID_GAIN ; future.fsm <= SPI_WRITE ; elsif( current.gain_state = MID_GAIN_STATE ) then future.gain_state <= HIGH_GAIN_STATE ; future.future_gain <= HIGH_GAIN ; future.fsm <= SPI_WRITE ; else future.nack <= '1' ; -- we are already as high as can be end if ; end if ; if( current.gain_dec_req = '1' ) then if( current.gain_state = MID_GAIN_STATE ) then future.gain_state <= LOW_GAIN_STATE ; future.future_gain <= LOW_GAIN ; future.fsm <= SPI_WRITE ; elsif( current.gain_state = HIGH_GAIN_STATE ) then future.gain_state <= MID_GAIN_STATE ; future.future_gain <= MID_GAIN ; future.fsm <= SPI_WRITE ; else future.nack <= '1' ; -- we are already as low as can be end if ; end if ; if( current.gain_rst_req = '1' ) then future.gain_state <= HIGH_GAIN_STATE ; future.future_gain <= HIGH_GAIN ; end if ; if( enable = '0' ) then future.fsm <= INIT ; end if ; when SPI_WRITE => future.arbiter_req <= '1' ; if( arbiter_grant = '1' ) then future.fsm <= SPI_WRITE_GRANTED ; end if ; when SPI_WRITE_GRANTED => if( current.current_gain.lna_gain /= current.future_gain.lna_gain or current.initializing = '1' ) then future.mm_addr <= x"75" ; if (current.future_gain.lna_gain = LNA_MAX_GAIN ) then if (band_sel = '0' ) then future.mm_din <= x"D0"; else future.mm_din <= x"E0"; end if ; elsif (current.future_gain.lna_gain = LNA_MID_GAIN ) then if (band_sel = '0' ) then future.mm_din <= x"90"; else future.mm_din <= x"A0"; end if ; end if ; future.mm_write <= '1' ; future.fsm <= SPI_WAIT ; future.nfsm <= WRITE_RXVGA1 ; else future.fsm <= WRITE_RXVGA1 ; end if ; when WRITE_RXVGA1 => if( current.current_gain.rxvga1_gain /= current.future_gain.rxvga1_gain or current.initializing = '1' ) then future.mm_addr <= x"76" ; if (current.future_gain.rxvga1_gain = RXVGA1_MAX_GAIN ) then future.mm_din <= x"78" ; elsif (current.future_gain.rxvga1_gain = RXVGA1_MID_GAIN ) then future.mm_din <= x"46" ; end if ; future.mm_write <= '1' ; future.fsm <= SPI_WAIT ; future.nfsm <= WRITE_RXVGA2 ; else future.fsm <= WRITE_RXVGA2 ; end if ; when WRITE_RXVGA2 => if( current.current_gain.rxvga2_gain /= current.future_gain.rxvga2_gain or current.initializing = '1' ) then future.mm_addr <= x"65" ; if (current.future_gain.rxvga2_gain = RXVGA2_MID_GAIN ) then future.mm_din <= x"05" ; elsif (current.future_gain.rxvga2_gain = RXVGA2_LOW_GAIN ) then future.mm_din <= x"00" ; end if ; future.mm_write <= '1' ; future.fsm <= SPI_WAIT ; future.nfsm <= UPDATE_GAINS ; else future.fsm <= UPDATE_GAINS ; end if ; when UPDATE_GAINS => future.ack <= '1' ; future.initializing <= '0' ; future.current_gain <= current.future_gain ; future.arbiter_done <= '1' ; future.fsm <= IDLE ; when SPI_WAIT => future.fsm <= SPI_WAIT_1 ; when SPI_WAIT_1 => if( mm_busy = '0' ) then future.fsm <= current.nfsm ; end if ; end case ; end process ; end architecture ; bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/lms6002d/vhdl/lms6002d.vhd000066400000000000000000000060061457144405000246030ustar00rootroot00000000000000library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; entity lms6002d is port ( -- RX Controls rx_clock : in std_logic ; rx_reset : in std_logic ; rx_enable : in std_logic ; -- RX Interface with LMS6002D rx_lms_data : in signed(11 downto 0) ; rx_lms_iq_sel : in std_logic ; rx_lms_enable : buffer std_logic ; -- RX Sample Interface rx_sample_i : buffer signed(11 downto 0) ; rx_sample_q : buffer signed(11 downto 0) ; rx_sample_valid : buffer std_logic ; -- TX Controls tx_clock : in std_logic ; tx_reset : in std_logic ; tx_enable : in std_logic ; -- TX Sample Interface tx_sample_i : in signed(11 downto 0) ; tx_sample_q : in signed(11 downto 0) ; tx_sample_valid : in std_logic ; -- TX Interface to the LMS6002D tx_lms_data : buffer signed(11 downto 0) ; tx_lms_iq_sel : buffer std_logic ; tx_lms_enable : buffer std_logic ) ; end entity ; architecture arch of lms6002d is begin ------------- -- Receive -- ------------- rx_sample : process(rx_clock, rx_reset) begin if( rx_reset = '1' ) then rx_sample_i <= (others =>'0') ; rx_sample_q <= (others =>'0') ; rx_sample_valid <= '0' ; rx_lms_enable <= '0' ; elsif( rising_edge( rx_clock ) ) then if( rx_lms_iq_sel = '0' ) then rx_lms_enable <= rx_enable ; end if ; rx_sample_valid <= '0' ; if( rx_lms_enable = '1' ) then if(rx_lms_iq_sel = '1' ) then rx_sample_i <= rx_lms_data ; else rx_sample_q <= rx_lms_data ; rx_sample_valid <= '1' ; end if ; end if ; end if ; end process ; -------------- -- Transmit -- -------------- tx_sample : process(tx_clock, tx_reset) variable tx_q_reg : signed(11 downto 0) ; begin if( tx_reset = '1' ) then tx_lms_data <= (others =>'0') ; tx_lms_iq_sel <= '0' ; tx_lms_enable <= '0' ; tx_q_reg := (others =>'0') ; elsif( rising_edge( tx_clock ) ) then if( tx_lms_iq_sel = '0' ) then tx_lms_enable <= tx_enable ; end if ; if( tx_sample_valid = '1' ) then tx_lms_data <= tx_sample_i ; tx_q_reg := tx_sample_q ; tx_lms_iq_sel <= '0' ; elsif( tx_lms_enable = '1' ) then tx_lms_data <= tx_q_reg ; tx_lms_iq_sel <= '1' ; else tx_lms_data <= (others =>'0') ; tx_lms_iq_sel <= '0' ; end if ; end if ; end process ; end architecture ; bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/lms6002d/vhdl/tb/000077500000000000000000000000001457144405000232345ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/lms6002d/vhdl/tb/bladerf_agc_lms_drv_tb.vhd000066400000000000000000000057371457144405000303770ustar00rootroot00000000000000-- Copyright (c) 2017 Nuand LLC -- -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU Affero General Public License as -- published by the Free Software Foundation, either version 3 of the -- License, or (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU Affero General Public License for more details. -- -- You should have received a copy of the GNU Affero General Public License -- along with this program. If not, see . library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; use ieee.math_real.all ; entity bladerf_agc_lms_drv_tb is end entity ; architecture arch of bladerf_agc_lms_drv_tb is signal clock : std_logic := '0' ; signal reset : std_logic ; signal enable : std_logic ; signal gain_inc_req : std_logic ; signal gain_dec_req : std_logic ; signal gain_rst_req : std_logic ; signal gain_ack : std_logic ; signal gain_nack : std_logic ; signal gain_high : std_logic ; signal gain_mid : std_logic ; signal gain_low : std_logic ; signal arbiter_req : std_logic ; signal arbiter_grant : std_logic ; signal arbiter_done : std_logic ; signal band_sel : std_logic ; signal sclk : std_logic ; signal miso : std_logic ; signal mosi : std_logic ; signal cs_n : std_logic ; begin U_agc_tb : entity work.bladerf_agc_lms_drv port map( clock => clock, reset => reset, enable => enable, gain_inc_req => gain_inc_req, gain_dec_req => gain_dec_req, gain_rst_req => gain_rst_req, gain_ack => gain_ack, gain_nack => gain_nack, gain_high => gain_high, gain_mid => gain_mid, gain_low => gain_low, arbiter_req => arbiter_req, arbiter_grant => arbiter_grant, arbiter_done => arbiter_done, band_sel => band_sel, sclk => sclk, miso => miso, mosi => mosi, cs_n => cs_n ); clock <= not clock after 10 ns; reset <= '1', '0' after 50 ns; enable <= '0' , '1' after 100 ns; band_sel <= '1'; gain_inc_req <= '0'; gain_dec_req <= '0'; gain_rst_req <= '0'; arbiter_grant <= '0', '1' after 170 ns; end architecture ; bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/lms6002d/vhdl/tb/lms6002d_tb.vhd000066400000000000000000000122471457144405000257010ustar00rootroot00000000000000library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; use ieee.math_real.all ; library std ; use std.env.all ; library nuand ; use nuand.util.all ; entity lms6002d_tb is end entity ; architecture arch of lms6002d_tb is signal rx_clock : std_logic := '1' ; signal rx_reset : std_logic := '1' ; signal rx_enable : std_logic := '0' ; signal rx_sample_i : signed(11 downto 0) ; signal rx_sample_q : signed(11 downto 0) ; signal rx_sample_valid : std_logic ; signal rx_lms_data : signed(11 downto 0) := (others =>'0') ; signal rx_lms_iq_sel : std_logic := '0' ; signal rx_lms_enable : std_logic ; signal tx_clock : std_logic := '1' ; signal tx_reset : std_logic := '1' ; signal tx_enable : std_logic := '0' ; signal tx_sample_i : signed(11 downto 0) := (others =>'0') ; signal tx_sample_q : signed(11 downto 0) := (others =>'0') ; signal tx_sample_valid : std_logic := '0' ; signal tx_lms_data : signed(11 downto 0) ; signal tx_lms_iq_sel : std_logic ; signal tx_lms_enable : std_logic ; signal lms_resetx : std_logic := '0' ; -- Simulation end signals signal rx_end : boolean := false ; signal tx_end : boolean := false ; signal tb_end : boolean := false ; begin -- Clock stimulus tx_clock <= not tx_clock after 1 ns ; rx_clock <= not rx_clock after 1 ns ; U_lms6002d : entity work.lms6002d(arch) port map ( rx_clock => rx_clock, rx_reset => rx_reset, rx_enable => rx_enable, rx_sample_i => rx_sample_i, rx_sample_q => rx_sample_q, rx_sample_valid => rx_sample_valid, rx_lms_data => rx_lms_data, rx_lms_iq_sel => rx_lms_iq_sel, rx_lms_enable => rx_lms_enable, tx_clock => tx_clock, tx_reset => tx_reset, tx_enable => tx_enable, tx_sample_i => tx_sample_i, tx_sample_q => tx_sample_q, tx_sample_valid => tx_sample_valid, tx_lms_data => tx_lms_data, tx_lms_iq_sel => tx_lms_iq_sel, tx_lms_enable => tx_lms_enable ) ; lms_resetx <= '1' after 5 ns ; U_lms6002d_model : entity work.lms6002d_model(arch) port map ( resetx => lms_resetx, rx_clock => rx_clock, rx_clock_out => open, rx_data => rx_lms_data, rx_enable => rx_lms_enable, rx_iq_select => rx_lms_iq_sel, tx_clock => tx_clock, tx_data => tx_lms_data, tx_enable => tx_lms_enable, tx_iq_select => tx_lms_iq_sel, sclk => '0', sen => '0', sdio => '0', sdo => open, pll_out => open ) ; -- End testbench tb_end <= rx_end and tx_end ; rx_tb : process begin -- Setup reset input conditions rx_reset <= '1' ; nop( rx_clock, 10 ) ; -- Come out of reset rx_reset <= '0' ; nop( rx_clock, 10 ) ; -- Enable the RX side of things rx_enable <= '1' ; nop( rx_clock, 2000 ) ; -- Disable RX rx_enable <= '0' ; nop( rx_clock, 100 ) ; -- Enable the RX side of things rx_enable <= '1' ; nop( rx_clock, 2000 ) ; report "-- RX Finished --" ; rx_end <= true ; wait ; end process ; tx_tb : process begin -- Setup reset input conditions tx_enable <= '0' ; nop( tx_clock, 700 ) ; tx_reset <= '0' ; nop( tx_clock, 10 ) ; tx_enable <= '1' ; for i in 1 to 10000 loop tx_sample_i <= to_signed(i mod 2048,tx_sample_i'length) ; tx_sample_q <= to_signed(-(i mod 2048),tx_sample_q'length) ; tx_sample_valid <= '1' ; nop( tx_clock, 1 ) ; tx_sample_valid <= '0' ; nop( tx_clock, 1 ) ; end loop ; report "-- TX Finshed --" ; tx_end <= true ; wait ; end process ; finish_tb : process begin wait until tb_end = true ; report "-- End of Simulation --" ; stop(2) ; end process ; end architecture ; bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/nco.vhd000066400000000000000000000062041457144405000217070ustar00rootroot00000000000000-- Copyright (c) 2013 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; package nco_p is type nco_input_t is record dphase : signed(15 downto 0) ; valid : std_logic ; end record ; type nco_output_t is record re : signed(15 downto 0) ; im : signed(15 downto 0) ; valid : std_logic ; end record ; end package ; -- nco_p library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; library work ; use work.cordic_p.all ; use work.nco_p.all ; entity nco is port ( clock : in std_logic ; reset : in std_logic ; inputs : in nco_input_t ; outputs : out nco_output_t ) ; end entity ; -- nco architecture arch of nco is signal phase : signed(15 downto 0) ; signal cordic_inputs : cordic_xyz_t ; signal cordic_outputs : cordic_xyz_t ; begin accumulate_phase : process(clock, reset) variable temp : signed(15 downto 0) ; begin if( reset = '1' ) then phase <= (others =>'0') ; elsif( rising_edge( clock ) ) then if( inputs.valid = '1' ) then temp := phase + inputs.dphase ; if( temp > 4096 ) then temp := temp - 8192 ; elsif( temp < -4096 ) then temp := temp + 8192 ; end if ; phase <= temp ; end if ; end if ; end process ; cordic_inputs <= ( x => to_signed(1234,16), y => (others =>'0'), z => phase, valid => inputs.valid ) ; U_cordic : entity work.cordic port map ( clock => clock, reset => reset, mode => CORDIC_ROTATION, inputs => cordic_inputs, outputs => cordic_outputs ) ; outputs.re <= cordic_outputs.x ; outputs.im <= cordic_outputs.y ; outputs.valid <= cordic_outputs.valid ; end architecture ; -- arch bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/reset_synchronizer.vhd000066400000000000000000000026611457144405000250720ustar00rootroot00000000000000library ieee ; use ieee.std_logic_1164.all ; entity reset_synchronizer is generic ( INPUT_LEVEL : std_logic := '1' ; OUTPUT_LEVEL : std_logic := '1' ) ; port ( clock : in std_logic ; async : in std_logic ; sync : out std_logic ) ; end entity ; architecture arch of reset_synchronizer is attribute ALTERA_ATTRIBUTE : string; attribute PRESERVE : boolean; signal reg0, reg1 : std_logic; attribute ALTERA_ATTRIBUTE of arch : architecture is "-name SDC_STATEMENT ""set_false_path -to [get_registers {*reset_synchronizer:*|*}] """; attribute ALTERA_ATTRIBUTE of reg0 : signal is "-name SYNCHRONIZER_IDENTIFICATION ""FORCED IF ASYNCHRONOUS"""; attribute ALTERA_ATTRIBUTE of reg1 : signal is "-name SYNCHRONIZER_IDENTIFICATION ""FORCED IF ASYNCHRONOUS"""; attribute PRESERVE of reg0 : signal is TRUE; attribute PRESERVE of reg1 : signal is TRUE; attribute PRESERVE of sync : signal is TRUE; begin synchronize : process( clock, async ) begin if( async = INPUT_LEVEL ) then sync <= OUTPUT_LEVEL ; reg0 <= OUTPUT_LEVEL ; reg1 <= OUTPUT_LEVEL ; elsif( rising_edge( clock ) ) then sync <= reg1 ; reg1 <= reg0 ; reg0 <= not OUTPUT_LEVEL ; end if ; end process ; end architecture ; bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/rx_packet_generator.vhd000066400000000000000000000107431457144405000251610ustar00rootroot00000000000000-- Copyright (c) 2020 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.math_real.all; use ieee.math_complex.all; library work; use work.fifo_readwrite_p.all; entity rx_packet_generator is generic ( PACKET_LEN : integer := 500; MAX_LEN : integer := 1000; INCR : integer := 50; GAP : integer := 10 ); port ( rx_reset : in std_logic; rx_clock : in std_logic; rx_enable : in std_logic; rx_packet_enable : in std_logic; rx_packet_ready : in std_logic; rx_packet_control : out packet_control_t ); end entity; architecture arch of rx_packet_generator is type state_t is ( IDLE, HOLDOFF, WAITED, WRITE ); type fsm_t is record state : state_t; hold_count : integer range -1 to GAP + 2; write_count : integer range -1 to PACKET_LEN; pkt_id : integer range 0 to 65536; pkt : packet_control_t; end record; constant FSM_RESET_VALUE : fsm_t := ( state => IDLE, hold_count => 0, write_count => 0, pkt_id => 0, pkt => PACKET_CONTROL_DEFAULT ); signal current : fsm_t := FSM_RESET_VALUE; signal future : fsm_t := FSM_RESET_VALUE; begin fsm_proc : process (rx_clock, rx_reset) begin if( rx_reset = '1' ) then current <= FSM_RESET_VALUE; elsif( rising_edge( rx_clock ) ) then current <= future; end if; end process; rx_packet_control <= current.pkt; fsm_comb : process(all) begin future <= current; future.pkt <= PACKET_CONTROL_DEFAULT; case current.state is when IDLE => future.hold_count <= 0; future.write_count <= 0; if( rx_enable = '1' and rx_packet_enable = '1' ) then future.state <= HOLDOFF; end if; when HOLDOFF => future.write_count <= PACKET_LEN; future.hold_count <= current.hold_count + 1; if(current.hold_count = GAP) then future.state <= WAITED; end if; when WAITED => if( rx_packet_ready = '1' ) then future.state <= WRITE; end if; when WRITE => future.pkt.data_valid <= '1'; future.pkt.data <= std_logic_vector(to_unsigned(current.pkt_id, 16)) & std_logic_vector(to_unsigned(current.write_count, 16)); if(current.write_count = PACKET_LEN) then future.pkt.pkt_sop <= '1'; future.pkt.data_valid <= '1'; elsif(current.write_count = 1) then future.pkt.pkt_eop <= '1'; future.state <= IDLE; if( current.pkt_id > 65000) then future.pkt_id <= 0; else future.pkt_id <= current.pkt_id + 1; end if; end if; future.write_count <= current.write_count - 1; when others => future <= FSM_RESET_VALUE; end case; end process; end architecture; bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/set_clear_ff.vhd000066400000000000000000000041321457144405000235420ustar00rootroot00000000000000-- Copyright (c) 2017 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. -- set_clear_ff: provides a simple clocked set/clear flipflop library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity set_clear_ff is port ( clock : in std_logic; reset : in std_logic; set : in std_logic; clear : in std_logic; q : out std_logic ); end entity; -- set_clear_ff architecture arch of set_clear_ff is signal q_r : std_logic; signal set_r : std_logic; signal clr_r : std_logic; begin process (reset, clock) begin if (reset = '1') then q_r <= '0'; set_r <= '0'; clr_r <= '0'; elsif (rising_edge(clock)) then set_r <= set; clr_r <= clear; if (set_r = '0' and set = '1') then q_r <= '1'; elsif(clr_r = '0' and clear = '1') then q_r <= '0'; end if; end if; end process; q <= q_r; end architecture; -- arch bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/signal_generator.vhd000066400000000000000000000045541457144405000244610ustar00rootroot00000000000000library ieee; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; entity signal_generator is port ( clock : in std_logic ; reset : in std_logic ; enable : in std_logic ; mode : in std_logic ; eightbit_en : in std_logic := '0'; sample_i : out signed(15 downto 0) ; sample_q : out signed(15 downto 0) ; sample_valid : buffer std_logic ) ; end entity ; architecture arch of signal_generator is begin counter : process(clock, reset) constant COUNT_RESET : natural := 256 ; variable count12 : integer range -2047 to 2047 := COUNT_RESET ; variable count32 : unsigned(31 downto 0) ; begin if( reset = '1' ) then count12 := COUNT_RESET ; count32 := (others =>'0') ; sample_i <= (others =>'0') ; sample_q <= (others =>'0') ; sample_valid <= '0' ; elsif( rising_edge(clock) ) then if( mode = '0' ) then sample_i <= to_signed( count12, sample_i'length) ; sample_q <= to_signed(-count12, sample_q'length) ; else sample_i <= signed(std_logic_vector(count32(15 downto 0))) ; sample_q <= signed(std_logic_vector(count32(31 downto 16))) ; if eightbit_en = '1' then sample_i <= signed(std_logic_vector(shift_left(resize(count32(8 downto 0), 16), 4))); sample_q <= signed(std_logic_vector(shift_left(resize(count32(15 downto 8), 16), 4))); end if; end if ; if( enable = '0' ) then count12 := COUNT_RESET ; count32 := (others =>'0') ; sample_i <= (others =>'0') ; sample_q <= (others =>'0') ; sample_valid <= '0' ; else sample_valid <= not sample_valid ; if( sample_valid = '1' ) then if( count12 < 2047 ) then count12 := count12 + 1 ; else count12 := -2047 ; end if ; count32 := count32 + 1 ; end if ; end if ; end if ; end process ; end architecture ; bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/signal_processing_p.vhd000066400000000000000000000004051457144405000251550ustar00rootroot00000000000000library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; package signal_processing_p is type real_array_t is array (natural range <>) of real; end package signal_processing_p; package body signal_processing_p is end package body;bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/symbol_mapper.vhd000066400000000000000000000002011457144405000237700ustar00rootroot00000000000000 library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity symbol_mapper is generic( ); bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/sync_fifo.vhd000066400000000000000000000071671457144405000231200ustar00rootroot00000000000000-- Copyright (c) 2013 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; entity sync_fifo is generic ( DEPTH : positive := 32 ; WIDTH : positive := 16 ; READ_AHEAD : boolean := true ) ; port ( areset : in std_logic ; clock : in std_logic ; -- FIFO Status information full : out std_logic ; empty : out std_logic ; used_words : out natural range 0 to DEPTH ; -- FIFO Input Side data_in : in std_logic_vector(WIDTH-1 downto 0) ; write_en : in std_logic ; -- FIFO Output Side data_out : out std_logic_vector(WIDTH-1 downto 0) ; read_en : in std_logic ) ; end entity ; -- sync_fifo architecture arch of sync_fifo is -- House keeping signal write_address : natural range 0 to DEPTH-1 ; signal read_address : natural range 0 to DEPTH-1 ; signal used : natural range 0 to DEPTH ; -- Dual port RAM type ram_t is array(0 to DEPTH-1) of std_logic_vector(WIDTH-1 downto 0) ; signal ram : ram_t ; begin empty <= '1' when used = 0 else '0' ; full <= '1' when used = DEPTH else '0' ; used_words <= used ; follow_used_words : process( clock, areset ) begin if( areset = '1' ) then used <= 0 ; write_address <= 0 ; read_address <= 0 ; elsif( rising_edge(clock) ) then if( write_en = '1' ) then if( read_en = '0' ) then if( used < DEPTH ) then write_address <= (write_address + 1) mod DEPTH ; used <= used + 1 ; else report "Trying to write a full FIFO!" severity error ; end if ; end if ; else if( read_en = '1' ) then if( used > 0 ) then read_address <= (read_address + 1) mod DEPTH ; used <= used - 1 ; else report "Trying to read an empty FIFO!" severity error ; end if ; end if ; end if ; end if ; end process ; access_ram : process( clock ) begin if( rising_edge( clock ) ) then data_out <= ram(read_address) ; if( write_en = '1' ) then ram(write_address) <= data_in ; end if ; end if ; end process ; end architecture ; -- arch bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/synchronizer.vhd000066400000000000000000000025761457144405000236750ustar00rootroot00000000000000library ieee ; use ieee.std_logic_1164.all ; entity synchronizer is generic ( RESET_LEVEL : std_logic := '1' ) ; port ( reset : in std_logic ; clock : in std_logic ; async : in std_logic ; sync : out std_logic := RESET_LEVEL ) ; end entity ; architecture arch of synchronizer is attribute ALTERA_ATTRIBUTE : string; attribute PRESERVE : boolean; signal reg0, reg1 : std_logic; attribute ALTERA_ATTRIBUTE of arch : architecture is "-name SDC_STATEMENT ""set_false_path -to [get_registers {*synchronizer:*|reg0}] """; attribute ALTERA_ATTRIBUTE of reg0 : signal is "-name SYNCHRONIZER_IDENTIFICATION ""FORCED IF ASYNCHRONOUS"""; attribute ALTERA_ATTRIBUTE of reg1 : signal is "-name SYNCHRONIZER_IDENTIFICATION ""FORCED IF ASYNCHRONOUS"""; attribute PRESERVE of reg0 : signal is TRUE; attribute PRESERVE of reg1 : signal is TRUE; attribute PRESERVE of sync : signal is TRUE; begin synchronize : process( clock, reset ) begin if( reset = '1' ) then sync <= RESET_LEVEL ; reg0 <= RESET_LEVEL ; reg1 <= RESET_LEVEL ; elsif( rising_edge( clock ) ) then sync <= reg1 ; reg1 <= reg0 ; reg0 <= async ; end if ; end process ; end architecture ; bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/tan_table.vhd000066400000000000000000000043761457144405000230710ustar00rootroot00000000000000library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.math_real.all; entity tan_table is generic( Q : positive := 12; INPUT_WIDTH : positive := 16; OUTPUT_WIDTH: positive := 16; STEPS : positive := 4; ANGLE : real := MATH_PI*(45.0/180.0) ); port( reset : in std_logic; clock : in std_logic; phase : in signed(INPUT_WIDTH-1 downto 0); phase_valid : in std_logic; y : out signed(OUTPUT_WIDTH-1 downto 0); y_valid : out std_logic ); end entity; architecture arch of tan_table is type tan_table_t is array (natural range <>) of signed(OUTPUT_WIDTH-1 downto 0); type tan_table_real_t is array (natural range <>) of real; function generate_tan_table(steps, qscale : positive) return tan_table_t is variable table : tan_table_t(0 to steps) := (others => (others => '0')); begin for i in table'range loop table(i) := to_signed(integer(round(real(2**qscale)* tan(ANGLE * real(i)/real(steps)))),table(i)'length); end loop; return table; end function; function generate_tan_table_real(steps : positive) return tan_table_real_t is variable table : tan_table_real_t(0 to steps) := (others => (0.0)); begin for i in table'range loop table(i) :=tan(ANGLE * real(i)/real(steps)); end loop; return table; end function; constant table : tan_table_t(0 to STEPS) := generate_tan_table(STEPS,Q); constant table_2 : tan_table_real_t(0 to STEPS) := generate_tan_table_real(STEPS); begin find_y : process(clock, reset) begin if reset = '1' then -- y_valid <= '0'; y <= (others => '0'); elsif rising_edge(clock) then y_valid <= '0'; if phase_valid = '1' then if phase < 0 then y <= table(to_integer(abs(phase))); else y <= -table(to_integer(abs(phase))); end if; y_valid <= '1'; end if; -- end if; end process; end architecture; bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/tb/000077500000000000000000000000001457144405000210305ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/tb/atsc_tx_tb.vhd000066400000000000000000000203221457144405000236640ustar00rootroot00000000000000library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.math_real.all; use ieee.math_complex.all; library std; use std.env.all; library work; use work.nco_p.all; library nuand; use nuand.util.all; use nuand.constellation_mapper_p.all; entity atsc_tx_tb is end entity; architecture arch of atsc_tx_tb is signal clock : std_logic := '1'; signal reset : std_logic := '1'; signal nco_inputs : nco_input_t; signal nco_outputs : nco_output_t; --fifo management type fifo_t is record aclr : std_logic ; wclock : std_logic ; wdata : std_logic_vector(31 downto 0) ; wreq : std_logic ; wempty : std_logic ; wfull : std_logic ; wused : std_logic_vector(11 downto 0) ; rclock : std_logic ; rdata : std_logic_vector(31 downto 0) ; rreq : std_logic ; rempty : std_logic ; rfull : std_logic ; rused : std_logic_vector(11 downto 0) ; end record ; signal tx_sample_fifo :fifo_t; signal tx_enable : std_logic; signal tx_valid : std_logic; --filtered signal signal tx_symbol : complex_fixed_t; signal tx_symbol_valid : std_logic; -- constant vsb_mix_table : complex_fixed_array_t := ( (to_signed(4096,16), to_signed(0,16)), (to_signed(0,16), to_signed(-4096,16)), (to_signed(-4096,16), to_signed(0,16)), (to_signed(0,16), to_signed(4096,16) )); function cmult( a, b : complex_fixed_t; q : natural ) return complex_fixed_t is variable rv : complex_fixed_t := (to_signed(0,16),to_signed(0,16)); begin rv.re := resize(shift_right(a.re * b.re,q) - shift_right(a.im * b.im, q),rv.re'length); rv.re := resize(shift_right(a.re * b.re,q) + shift_right(a.im * b.re, q),rv.im'length); return rv; end function; function cmult_fs4(a : complex_fixed_t; fs_4 : natural) return complex_fixed_t is begin case fs_4 is when 0 => return (a.re,a.im); when 1 => return (a.im,-a.re); when 2 => return (-a.re,-a.im); when 3 => return (-a.im, a.re); when others => return a; end case; end function; procedure nop( signal clock : in std_logic; count : in natural) is begin for i in 1 to count loop wait until rising_edge(clock); end loop; end procedure; constant SPS : natural := 3; constant RANDOM_MULT : unsigned(63 downto 0) := x"2545f4914f6cdd1d"; function random_xor (old : unsigned) return unsigned is variable x : unsigned(old'range) := (others=>'0'); variable y : unsigned(old'range) := (others=>'0'); variable z : unsigned(old'range) := (others=>'0'); begin x := old xor shift_right(old,12); y := x xor shift_left(x,25); z := y xor shift_right(y,27); return resize( shift_right(z * RANDOM_MULT,z'length),z'length); end function; signal data_request_reader : std_logic; signal delay_request_reader : std_logic; begin clock <= not clock after 1 ns; --construct fir filter under test --U_filter : entity work.fir_filter(systolic) -- generic map() -- port map(); tb : process variable delta : signed(15 downto 0); begin reset <= '1'; delay_request_reader <='0'; --setup nco input delta := to_signed(1,delta'length); nco_inputs.valid <= '0'; nco_inputs.dphase <= (others => '0'); nop(clock, 10); --setup state --release reset; reset <= '0'; nop(clock, 10); delay_request_reader <='1'; --clock in data for i in 0 to 100000 loop if (nco_inputs.dphase = 4096) then delta := to_signed(-1,delta'length); elsif(nco_inputs.dphase = -4096) then delta := to_signed(1,delta'length); end if; nco_inputs.dphase <= nco_inputs.dphase + delta; nco_inputs.valid <= '1' ; wait until rising_edge(clock); nco_inputs.valid <= '0'; nop(clock,10); end loop; --save result end process; data_request_reader <= '1' when ((unsigned(tx_sample_fifo.wused) < to_unsigned(2048,tx_sample_fifo.wused'length)) and delay_request_reader ='1' )else '0'; U_file_reader : entity work.data_reader generic map ( FILENAME => "input.dat", DATA_WIDTH => 32 ) port map ( reset => reset, clock => clock, data_request => data_request_reader, data => tx_sample_fifo.wdata, data_valid => tx_sample_fifo.wreq ); feed_fifo: process variable in_data: unsigned(31 downto 0) := x"1337cafe"; begin tx_enable <= '0'; --tx_sample_fifo.wdata <= (others => '0'); --tx_sample_fifo.wreq <= '0'; nop(clock,10); for i in 0 to 10 loop --tx_sample_fifo.wdata <= std_logic_vector(in_data); --tx_sample_fifo.wreq <= '1'; in_data :=random_xor(in_data); wait until rising_edge(clock); --tx_sample_fifo.wreq <= '0'; nop(clock,10); end loop; tx_enable <= '1'; for i in 0 to 100000 loop --tx_sample_fifo.wdata <= std_logic_vector(in_data); --tx_sample_fifo.wreq <= '1'; in_data :=random_xor(in_data); wait until rising_edge(clock); --tx_sample_fifo.wreq <= '0'; nop(clock,20); end loop; end process; --tmp tx_sample_fifo.aclr <= reset ; tx_sample_fifo.rclock <= clock ; tx_sample_fifo.wclock <= clock ; U_bit_fifo : entity work.tx_fifo port map ( aclr => tx_sample_fifo.aclr, data => tx_sample_fifo.wdata, rdclk => tx_sample_fifo.rclock, rdreq => tx_sample_fifo.rreq, wrclk => tx_sample_fifo.wclock, wrreq => tx_sample_fifo.wreq, q => tx_sample_fifo.rdata, rdempty => tx_sample_fifo.rempty, rdfull => tx_sample_fifo.rfull, rdusedw => tx_sample_fifo.rused, wrempty => tx_sample_fifo.wempty, wrfull => tx_sample_fifo.wfull, wrusedw => tx_sample_fifo.wused ); tx_valid_register : process(reset, clock) begin if (reset = '1') then tx_valid <= '0'; elsif rising_edge(clock) then tx_valid <= tx_sample_fifo.rreq; end if; end process; U_atsc_transmitter : entity work.atsc_tx(arch) generic map( INPUT_WIDTH => tx_sample_fifo.rdata'length, OUTPUT_WIDTH => tx_symbol.re'length ) port map ( reset => reset, clock => clock, tx_enable => tx_enable, data_in => tx_sample_fifo.rdata, data_in_request => tx_sample_fifo.rreq, data_in_valid => tx_valid, sample_out_i => tx_symbol.re, sample_out_q => tx_symbol.im, sample_out_valid => tx_symbol_valid ); U_data_saver_im : entity work.signed_saver(arch) generic map ( FILENAME => "tx_sym.im" ) port map( clock => clock, reset => reset, data => (tx_symbol.im), data_valid => tx_symbol_valid ); U_data_saver_re : entity work.signed_saver(arch) generic map ( FILENAME => "tx_sym.re" ) port map( clock => clock, reset => reset, data => (tx_symbol.re), data_valid => tx_symbol_valid ); --U_nco_test : entity work.nco(arch) -- port map ( -- clock => clock, -- reset => reset, -- inputs => nco_inputs, -- outputs => nco_outputs -- ); end architecture;bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/tb/cordic_tb.vhd000066400000000000000000000066321457144405000234720ustar00rootroot00000000000000-- Copyright (c) 2013 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; use ieee.math_real.all ; library work ; use work.cordic_p.all ; entity cordic_tb is end entity ; -- cordic_tb architecture arch of cordic_tb is signal clock : std_logic := '1' ; signal reset : std_logic := '1' ; signal inputs : cordic_xyz_t := ( x => (others =>'0'), y => (others =>'0'), z => (others =>'0'), valid => '0' ); signal outputs : cordic_xyz_t ; signal outputs2 : cordic_xyz_t ; procedure nop( signal clock : in std_logic ; count : in natural ) is begin for i in 1 to count loop wait until rising_edge( clock ) ; end loop ; end procedure ; -- nop begin -- Generate clock clock <= not clock after 1 ns ; -- Magnitude/phase to cos+isin U_cordic : entity work.cordic port map ( clock => clock, reset => reset, mode => CORDIC_ROTATION, inputs => inputs, outputs => outputs ) ; -- cos+isin to magnitude/phase U_cordic2 : entity work.cordic port map ( clock => clock, reset => reset, mode => CORDIC_VECTORING, inputs => outputs, outputs => outputs2 ) ; tb : process variable ang : integer := 0 ; variable dang : integer := integer(round(0.01*4096.0)) ; begin reset <= '1' ; nop( clock, 10 ) ; reset <= '0' ; nop( clock, 10 ) ; ang := 0 ; inputs.x <= to_signed( integer(round(4096.0/1.66)), inputs.x'length ) ; inputs.y <= to_signed( 0, inputs.y'length ) ; for i in 0 to 10000 loop inputs.z <= to_signed( ang, inputs.z'length ) ; inputs.valid <= '1' ; wait until rising_edge( clock ) ; inputs.valid <= '0' ; nop( clock, 20 ) ; ang := ang + dang ; if( ang > 4096 ) then ang := ang - 8192 ; elsif( ang < -4096 ) then ang := ang + 8192 ; end if ; end loop ; report "-- End of Simulation --" severity failure ; end process ; end architecture ; -- arch bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/tb/cos_table_tb.vhd000066400000000000000000000040231457144405000241520ustar00rootroot00000000000000library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.math_real.all; library std; use std.env.all; entity cos_table_tb is end entity; architecture arch of cos_table_tb is signal clock : std_logic := '1'; signal reset : std_logic := '1'; constant Q_SCALE : positive := 12; constant SIGNAL_LENGTH : positive := 16; constant PHASE_STEPS_90 : positive := 1024; constant PHASE_STEPS : positive := PHASE_STEPS_90*4; signal phase_request : unsigned(SIGNAL_LENGTH-1 downto 0); signal phase_request_valid : std_logic := '1'; signal cos_value : signed(SIGNAL_LENGTH-1 downto 0); signal cos_value_valid : std_logic; signal cos_ieee : signed(SIGNAL_LENGTH-1 downto 0); signal cos_error : signed(SIGNAL_LENGTH-1 downto 0); procedure nop( signal clock : in std_logic ; count : in natural ) is begin for i in 1 to count loop wait until rising_edge( clock ) ; end loop ; end procedure ; begin clock <= not clock after 1 ns; -- U_cos_table : entity work.cos_table generic map( Q => Q_SCALE, DPHASE_STEPS_90 => PHASE_STEPS_90 ) port map( reset => reset, clock => clock, phase => phase_request, phase_valid => phase_request_valid, y => cos_value, y_valid => cos_value_valid ); tb : process -- begin reset <= '1'; nop(clock, 10); phase_request <= (others => '0'); phase_request_valid <= '0'; reset <= '0'; nop(clock, 10); for i in 0 to PHASE_STEPS-1 loop wait until rising_edge(clock); phase_request <= to_unsigned(i, phase_request'length); if phase_request_valid = '1' then cos_ieee <= to_signed(integer(round(real(2**Q_SCALE)*cos( (MATH_PI*2.0) * (real(i-1)/real(PHASE_STEPS))) )),cos_ieee'length); end if; phase_request_valid <= '1'; end loop; phase_request_valid <= '0'; nop(clock, 1000); report "-- End of Simulation --"; stop(2) ; end process; error_check : process begin wait until rising_edge(clock); cos_error <= cos_ieee - cos_value; end process; end architecture; bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/tb/fir_filter_tb.vhd000066400000000000000000000406051457144405000243520ustar00rootroot00000000000000library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.math_real.all; use ieee.math_complex.all; library std; use std.env.all; library work; use work.nco_p.all; library nuand; use nuand.util.all; use nuand.constellation_mapper_p.all; entity fir_filter_tb is end entity; architecture arch of fir_filter_tb is signal clock : std_logic := '1'; signal reset : std_logic := '1'; signal nco_inputs : nco_input_t; signal nco_outputs : nco_output_t; --fifo management type fifo_t is record aclr : std_logic ; wclock : std_logic ; wdata : std_logic_vector(31 downto 0) ; wreq : std_logic ; wempty : std_logic ; wfull : std_logic ; wused : std_logic_vector(11 downto 0) ; rclock : std_logic ; rdata : std_logic_vector(31 downto 0) ; rreq : std_logic ; rempty : std_logic ; rfull : std_logic ; rused : std_logic_vector(11 downto 0) ; end record ; signal tx_sample_fifo :fifo_t; --bit stripper signals signal strip_enable : std_logic; signal symbol_bits : std_logic_vector(2 downto 0); signal symbol_bits_request : std_logic; signal symbol_bits_valid : std_logic; --constellation mapper signal map_inputs : constellation_mapper_inputs_t; signal map_outputs : constellation_mapper_outputs_t; --new mixed signal signal symbol_mixed : complex_fixed_t; signal symbol_mixed_valid : std_logic; --new upsampled signal signal symbol_mixed_up : complex_fixed_t; signal symbol_mixed_up_valid : std_logic; --filtered signal signal filtered_sample : complex_fixed_t; signal filtered_sample_valid : std_logic; --filtered signal signal tx_symbol : complex_fixed_t; signal tx_symbol_valid : std_logic; -- constant vsb_mix_table : complex_fixed_array_t := ( (to_signed(4096,16), to_signed(0,16)), (to_signed(0,16), to_signed(-4096,16)), (to_signed(-4096,16), to_signed(0,16)), (to_signed(0,16), to_signed(4096,16) )); -- -- 4.0960e+03 - 0.0000e+00i -- 3.5472e+03 - 2.0480e+03i -- 2.0480e+03 - 3.5472e+03i -- 2.5081e-13 - 4.0960e+03i -- -2.0480e+03 - 3.5472e+03i -- -3.5472e+03 - 2.0480e+03i -- -4.0960e+03 - 5.0162e-13i -- 3.5472e+03 + 2.0480e+03i -- -2.0480e+03 + 3.5472e+03i -- -7.5242e-13 + 4.0960e+03i -- 2.0480e+03 + 3.5472e+03i -- 3.5472e+03 + 2.0480e+03i -- 4.0960e+03 + 1.0032e-12i constant atsc_lo_table : complex_fixed_array_t := ( (to_signed(4096,16), to_signed(0,16)), (to_signed(3547,16), to_signed(-2048,16)), (to_signed(2048,16), to_signed(-3547,16)), (to_signed(0,16), to_signed(-4096,16)), (to_signed(-2048,16), to_signed(-3547,16)), (to_signed(-3547,16), to_signed(-2048,16)), (to_signed(-4096,16), to_signed(0,16)), (to_signed(3547,16), to_signed(2048,16)), (to_signed(-2048,16), to_signed(3547,16)), (to_signed(0,16), to_signed(4096,16)), (to_signed(2048,16), to_signed(3547,16)), (to_signed(3547,16), to_signed(4096,16) )); function cmult( a, b : complex_fixed_t; q : natural ) return complex_fixed_t is variable rv : complex_fixed_t := (to_signed(0,16),to_signed(0,16)); begin rv.re := resize(shift_right(a.re * b.re,q) - shift_right(a.im * b.im, q),rv.re'length); rv.re := resize(shift_right(a.re * b.re,q) + shift_right(a.im * b.re, q),rv.im'length); return rv; end function; function cmult_fs4(a : complex_fixed_t; fs_4 : natural) return complex_fixed_t is begin case fs_4 is when 0 => return (a.re,a.im); when 1 => return (a.im,-a.re); when 2 => return (-a.re,-a.im); when 3 => return (-a.im, a.re); when others => return a; end case; end function; procedure nop( signal clock : in std_logic; count : in natural) is begin for i in 1 to count loop wait until rising_edge(clock); end loop; end procedure; constant SPS : natural := 3; constant ATSC_FIR : real_array_t := ( 0.000952541947487, 0.001021339440824, 0.000713161320156, 0.000099293834852, -0.000631484665308, -0.001227676654677, -0.001457043942307, -0.001190147219421, -0.000456941151589, 0.000545581017437, 0.001502219876242, 0.002074087248050, 0.002011614083297, 0.001249974660528, -0.000046895490230, -0.001513860357388, -0.002682283457258, -0.003123186912762, -0.002593740652748, -0.001139501073282, 0.000885746160816, 0.002897996639881, 0.004244432533851, 0.004405493902086, 0.003177417184785, 0.000774939833928, -0.002187174361577, -0.004841259681936, -0.006310376881971, -0.005982741937804, -0.003734744853560, -0.000027621448548, 0.004166072719588, 0.007602382204908, 0.009117175655313, 0.007993866438765, 0.004237744374945, -0.001336553068967, -0.007251920699642, -0.011732810079681, -0.013203082387958, -0.010786054755306, -0.004660238809862, 0.003849830264059, 0.012505380718689, 0.018680222433748, 0.020069392108675, 0.015404316532634, 0.004979659322029, -0.009171254616962, -0.023537317903158, -0.033804674326444, -0.035814465077870, -0.026588972738348, -0.005178629408275, 0.026889883444145, 0.065699566102954, 0.105575674164579, 0.140146665827966, 0.163608592331722, 0.171912865925582, 0.163608592331722, 0.140146665827966, 0.105575674164579, 0.065699566102954, 0.026889883444145, -0.005178629408275, -0.026588972738348, -0.035814465077870, -0.033804674326444, -0.023537317903158, -0.009171254616962, 0.004979659322029, 0.015404316532634, 0.020069392108675, 0.018680222433748, 0.012505380718689, 0.003849830264059, -0.004660238809862, -0.010786054755306, -0.013203082387958, -0.011732810079681, -0.007251920699642, -0.001336553068967, 0.004237744374945, 0.007993866438765, 0.009117175655313, 0.007602382204908, 0.004166072719588, -0.000027621448548, -0.003734744853560, -0.005982741937804, -0.006310376881971, -0.004841259681936, -0.002187174361577, 0.000774939833928, 0.003177417184785, 0.004405493902086, 0.004244432533851, 0.002897996639881, 0.000885746160816, -0.001139501073282, -0.002593740652748, -0.003123186912762, -0.002682283457258, -0.001513860357388, -0.000046895490230, 0.001249974660528, 0.002011614083297, 0.002074087248050, 0.001502219876242, 0.000545581017437, -0.000456941151589, -0.001190147219421, -0.001457043942307, -0.001227676654677, -0.000631484665308, 0.000099293834852, 0.000713161320156, 0.001021339440824, 0.000952541947487); begin clock <= not clock after 1 ns; --construct fir filter under test --U_filter : entity work.fir_filter(systolic) -- generic map() -- port map(); tb : process variable delta : signed(15 downto 0); begin reset <= '1'; --setup nco input delta := to_signed(1,delta'length); nco_inputs.valid <= '0'; nco_inputs.dphase <= (others => '0'); nop(clock, 10); --setup state --release reset; reset <= '0'; nop(clock, 10); --clock in data for i in 0 to 100000 loop if (nco_inputs.dphase = 4096) then delta := to_signed(-1,delta'length); elsif(nco_inputs.dphase = -4096) then delta := to_signed(1,delta'length); end if; nco_inputs.dphase <= nco_inputs.dphase + delta; nco_inputs.valid <= '1' ; wait until rising_edge(clock); nco_inputs.valid <= '0'; nop(clock,10); end loop; --save result end process; feed_fifo: process variable in_data: unsigned(31 downto 0); begin strip_enable <= '0'; tx_sample_fifo.wdata <= (others => '0'); tx_sample_fifo.wreq <= '0'; in_data := to_unsigned(0,in_data'length); nop(clock,10); nop(clock,10); for i in 0 to 10 loop tx_sample_fifo.wdata <= std_logic_vector(in_data); tx_sample_fifo.wreq <= '1'; in_data := in_data + 1; wait until rising_edge(clock); tx_sample_fifo.wreq <= '0'; nop(clock,10); end loop; strip_enable <= '1'; for i in 0 to 1000 loop tx_sample_fifo.wdata <= std_logic_vector(in_data); tx_sample_fifo.wreq <= '1'; in_data := in_data + 1; wait until rising_edge(clock); tx_sample_fifo.wreq <= '0'; nop(clock,20); end loop; end process; --tmp tx_sample_fifo.aclr <= reset ; tx_sample_fifo.rclock <= clock ; tx_sample_fifo.wclock <= clock ; U_bit_fifo : entity work.tx_fifo port map ( aclr => tx_sample_fifo.aclr, data => tx_sample_fifo.wdata, rdclk => tx_sample_fifo.rclock, rdreq => tx_sample_fifo.rreq, wrclk => tx_sample_fifo.wclock, wrreq => tx_sample_fifo.wreq, q => tx_sample_fifo.rdata, rdempty => tx_sample_fifo.rempty, rdfull => tx_sample_fifo.rfull, rdusedw => tx_sample_fifo.rused, wrempty => tx_sample_fifo.wempty, wrfull => tx_sample_fifo.wfull, wrusedw => tx_sample_fifo.wused ); U_stripper : entity work.bit_stripper(arch) generic map( INPUT_WIDTH => 32, OUTPUT_WIDTH => 3 ) port map( clock => clock, reset => reset, enable => strip_enable, in_data => tx_sample_fifo.rdata, in_data_request => tx_sample_fifo.rreq, in_data_valid => '1', out_data => symbol_bits, out_data_request => symbol_bits_request, out_data_valid => symbol_bits_valid ); --strip symbols pull_symbols : process(clock,reset) variable downcount : natural range 0 to 2; begin -- if (reset = '1') then symbol_bits_request <= '0'; downcount := 2; elsif rising_edge(clock) then if strip_enable = '1' then symbol_bits_request <= '0'; if(downcount = 0) then symbol_bits_request <= '1'; downcount := 2; else downcount := downcount - 1 ; end if; end if; end if; end process; map_inputs.bits(map_inputs.bits'length -1 downto 3) <= (others => '0'); map_inputs.bits(2 downto 0) <= symbol_bits; map_inputs.modulation <= VSB_8; map_inputs.valid <= symbol_bits_valid; --map bits to constellation point U_mapper : entity work.constellation_mapper(arch) generic map( MODULATIONS => (VSB_8, MSK) ) port map( clock => clock, inputs => map_inputs, outputs => map_outputs ); generate_nco_phase : process(clock,reset) variable dphase : natural range 0 to 3; begin if (reset = '1') then dphase := 0; symbol_mixed_valid <= '0'; symbol_mixed <= ((others=> '0'), (others => '0')); elsif (rising_edge(clock)) then symbol_mixed_valid <= '0'; if map_outputs.valid = '1' then symbol_mixed <= cmult_fs4(map_outputs.symbol, dphase); symbol_mixed_valid <= '1'; if dphase = vsb_mix_table'high then dphase := 0; else dphase := dphase + 1; end if; end if; end if; end process; --zero stuff to interpolate since this isn't available in the fir yet upsample : process(clock,reset) variable downcount : natural range 0 to 2; begin if (reset = '1') then downcount := 0; symbol_mixed_up_valid <= '0'; elsif rising_edge(clock) then symbol_mixed_up_valid <= '0'; if symbol_mixed_valid = '1' then symbol_mixed_up <= symbol_mixed; downcount := SPS-1; symbol_mixed_up_valid <= '1'; elsif downcount > 0 then downcount := downcount -1; symbol_mixed_up <= ((others => '0'), (others => '0')); symbol_mixed_up_valid <= '1'; end if; end if; end process; --filter to bandiwdth U_filter_re : entity work.fir_filter(systolic) generic map ( CPS => 1, H => ATSC_FIR ) port map( clock => clock, reset => reset, in_sample => symbol_mixed_up.re, in_valid => symbol_mixed_up_valid, out_sample => filtered_sample.re, out_valid => filtered_sample_valid ); U_filter_im : entity work.fir_filter(systolic) generic map ( CPS => 1, H => ATSC_FIR ) port map( clock => clock, reset => reset, in_sample => symbol_mixed_up.im, in_valid => symbol_mixed_up_valid, out_sample => filtered_sample.im, out_valid => open ); add_pilot : process(clock,reset) variable pilot : natural range atsc_lo_table'range; begin if(reset = '1') then tx_symbol <= ((others=>'0'),(others=>'0')); tx_symbol_valid <= '0'; elsif rising_edge(clock) then tx_symbol_valid <= '0'; if filtered_sample_valid = '1' then tx_symbol.re <= symbol_mixed.re + atsc_lo_table(pilot).re; tx_symbol.im <= symbol_mixed.im + atsc_lo_table(pilot).im; tx_symbol_valid <= '1'; if pilot = atsc_lo_table'high then pilot := 0; else pilot := pilot +1; end if; end if; end if; end process; U_data_saver_im : entity work.signed_saver(arch) generic map ( FILENAME => "tx_sym.im" ) port map( clock => clock, reset => reset, data => (tx_symbol.im), data_valid => tx_symbol_valid ); U_data_saver_re : entity work.signed_saver(arch) generic map ( FILENAME => "tx_sym.re" ) port map( clock => clock, reset => reset, data => (tx_symbol.re), data_valid => tx_symbol_valid ); --U_nco_test : entity work.nco(arch) -- port map ( -- clock => clock, -- reset => reset, -- inputs => nco_inputs, -- outputs => nco_outputs -- ); end architecture;bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/tb/fsk_tb.vhd000066400000000000000000000063621457144405000230120ustar00rootroot00000000000000-- Copyright (c) 2013 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; use ieee.math_real.all ; entity fsk_tb is end entity ; -- fsk_tb architecture arch of fsk_tb is signal clock : std_logic := '1' ; signal reset : std_logic := '1' ; signal tx_symbol : std_logic := '0' ; signal tx_valid : std_logic := '0' ; signal tx_sig_real : signed(15 downto 0) ; signal tx_sig_imag : signed(15 downto 0) ; signal tx_sig_valid : std_logic ; signal rx_symbol : signed(15 downto 0) ; signal rx_valid : std_logic ; procedure nop( signal clock : in std_logic ; count : in natural ) is begin for i in 1 to count loop wait until rising_edge( clock ) ; end loop ; end procedure ; begin clock <= not clock after 1 ns ; U_fsk_modulator : entity work.fsk_modulator port map ( clock => clock, reset => reset, symbol => tx_symbol, symbol_valid => tx_valid, out_real => tx_sig_real, out_imag => tx_sig_imag, out_valid => tx_sig_valid ) ; U_fsk_demodulator : entity work.fsk_demodulator port map ( clock => clock, reset => reset, in_real => tx_sig_real, in_imag => tx_sig_imag, in_valid => tx_sig_valid, out_ssd => rx_symbol, out_valid => rx_valid ) ; tb : process variable s1, s2 : natural ; variable random : real ; begin reset <= '1' ; nop( clock, 10 ) ; reset <= '0' ; nop( clock, 10 ) ; s1 := 1234 ; s2 := 2345 ; for i in 0 to 10000 loop uniform( s1, s2, random ) ; if( random >= 0.5 ) then tx_symbol <= '1' ; else tx_symbol <= '0' ; end if ; tx_valid <= '1' ; nop( clock, 50 ) ; end loop ; report "-- End of Simulation --" severity failure ; end process ; end architecture ; -- arch bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/tb/handshake_tb.vhd000066400000000000000000000050661457144405000241550ustar00rootroot00000000000000library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; entity handshake_tb is end entity ; architecture arch of handshake_tb is -- Constants constant DATA_WIDTH : positive := 32 ; -- Source signals signal source_reset : std_logic := '1' ; signal source_clock : std_logic := '1' ; signal source_data : std_logic_vector(DATA_WIDTH-1 downto 0) := (others =>'0') ; signal dest_reset : std_logic := '1' ; signal dest_clock : std_logic := '1' ; signal dest_data : std_logic_vector(DATA_WIDTH-1 downto 0) ; signal dest_req : std_logic := '0' ; signal dest_ack : std_logic ; procedure nop( signal clock : in std_logic ; count : natural ) is begin for i in 1 to count loop wait until rising_edge(clock) ; end loop ; end procedure ; begin source_clock <= not source_clock after 100 ns ; dest_clock <= not dest_clock after 3 ns ; U_handshake : entity work.handshake generic map ( DATA_WIDTH => DATA_WIDTH ) port map ( source_reset => source_reset, source_clock => source_clock, source_data => source_data, dest_reset => dest_reset, dest_clock => dest_clock, dest_data => dest_data, dest_req => dest_req, dest_ack => dest_ack ) ; increment_source_data : process(source_reset, source_clock) begin if( source_reset = '1' ) then source_data <= (others =>'0') ; elsif( rising_edge(source_clock) ) then source_data <= std_logic_vector(unsigned(source_data) + 1) ; end if ; end process ; source_tb : process begin source_reset <= '1' ; nop( source_clock, 100 ) ; source_reset <= '0' ; wait ; end process ; dest_tb : process begin dest_reset <= '1' ; nop( dest_clock, 100 ) ; dest_reset <= '0' ; nop( dest_clock, 100 ) ; for i in 1 to 100 loop dest_req <= '1' ; wait until rising_edge(dest_clock) and dest_ack = '1' ; dest_req <= '0' ; wait until rising_edge(dest_clock) and dest_ack = '0' ; for x in 1 to 10 loop wait until rising_edge(source_clock) ; end loop ; end loop ; report "-- End of Simulation --" severity failure ; end process ; end architecture ; bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/tb/iq_correction_tb.vhd000066400000000000000000000114621457144405000250640ustar00rootroot00000000000000library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.math_real.all; library std; use std.env.all; entity iq_correction_tb is end entity; architecture arch of iq_correction_tb is signal clock : std_logic := '1'; signal reset : std_logic := '1'; procedure nop( signal clock : in std_logic; count : in natural) is begin for i in 1 to count loop wait until rising_edge(clock); end loop; end procedure; constant SIGNAL_LENGTH : natural := 1000; constant F_SAMP : real := 1.0e7; constant F_TONE : real := 100.0e3; constant PHASE_STEP : real := MATH_2_PI*(F_TONE/F_SAMP); constant Q_SCALE : positive := 12; constant DC_WIDTH : positive := 16; --error constants constant PHASE_OFFSET : real := (10.0/180.0); constant DC_OFFSET_REAL : real := 0.0; constant DC_OFFSET_IMAG : real := 0.0; constant GAIN_OFFSET : real := 1.0; signal PHASE_OFFSET_SIGNED : signed(15 downto 0) := to_signed(integer(round(real(2**Q_SCALE) * PHASE_OFFSET)),DC_WIDTH); constant DC_OFFSET_REAL_SIGNED : signed(15 downto 0) := to_signed(integer(round(real(2**Q_SCALE) * DC_OFFSET_REAL)),DC_WIDTH); constant DC_OFFSET_IMAG_SIGNED : signed(15 downto 0) :=to_signed(integer(round(real(2**Q_SCALE) * DC_OFFSET_IMAG)),DC_WIDTH); constant GAIN_OFFSET_SIGNED : signed(15 downto 0) := to_signed(integer(round(real(2**Q_SCALE) * GAIN_OFFSET)),DC_WIDTH); signal signal_real : signed(15 downto 0); signal signal_imag : signed(15 downto 0); signal signal_valid : std_logic; signal correction_valid : std_logic; signal corrected_real : signed(15 downto 0); signal corrected_imag : signed(15 downto 0); signal corrected_valid : std_logic; signal signal_ref_real : signed(15 downto 0); signal signal_ref_imag : signed(15 downto 0); signal error_real : signed(15 downto 0); signal error_imag : signed(15 downto 0); signal signal_real_float : real; signal signal_imag_float : real; begin clock <= not clock after 1 ns; U_iq_correction : entity work.iq_correction(tx) generic map( INPUT_WIDTH => 16 ) port map( reset => reset, clock => clock, in_real => signal_real, in_imag => signal_imag, in_valid => signal_valid, out_real => corrected_real, out_imag => corrected_imag, out_valid => corrected_valid, dc_real => DC_OFFSET_REAL_SIGNED, dc_imag => DC_OFFSET_IMAG_SIGNED, gain => GAIN_OFFSET_SIGNED, phase => PHASE_OFFSET_SIGNED, correction_valid => correction_valid ); tb : process begin reset <= '1'; signal_real <= (others => '0'); signal_imag<= (others => '0'); signal_real_float <= 0.0; signal_imag_float <= 0.0; correction_valid <= '0'; signal_valid <= '0'; nop(clock,10); correction_valid <= '1'; reset <= '0'; nop(clock,10); for i in 0 to SIGNAL_LENGTH loop wait until rising_edge(clock); signal_real <= to_signed(integer(round(real(3635)*(cos( PHASE_STEP*real(i) ) + DC_OFFSET_REAL))),signal_real'length); signal_imag <= to_signed(integer(round(real(3635)*GAIN_OFFSET*(sin( PHASE_STEP*real(i) + PHASE_OFFSET*MATH_PI ) + DC_OFFSET_IMAG))),signal_imag'length); signal_real_float <= cos( PHASE_STEP*real(i) ) + DC_OFFSET_REAL; signal_imag_float <= GAIN_OFFSET*sin( PHASE_STEP*real(i) + PHASE_OFFSET*MATH_PI ) + DC_OFFSET_IMAG; signal_valid <= '1'; wait until rising_edge(clock); signal_valid <= '0'; end loop; nop(clock, 100); report "-- End of Simulation --"; stop(2) ; end process; compare : process(clock,reset) variable i : integer; begin if reset = '1' then -- i := 0; signal_ref_real <= (others => '0'); signal_ref_imag <= (others => '0'); error_real <= (others => '0'); error_imag <= (others => '0'); elsif rising_edge(clock) then signal_ref_real <= to_signed(integer(round(real(3592)*(cos( PHASE_STEP*real(i) + PHASE_OFFSET*MATH_PI/2.0 ) ))),signal_real'length); signal_ref_imag <= to_signed(integer(round(real(3592)*(sin( PHASE_STEP*real(i) + PHASE_OFFSET*MATH_PI/2.0 ) ))),signal_imag'length); if corrected_valid = '1' then -- calc error error_real <= signal_ref_real - corrected_real; error_imag <= signal_ref_imag - corrected_imag; i := i + 1; end if; end if; end process; end architecture;bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/tb/nco_tb.vhd000066400000000000000000000055051457144405000230040ustar00rootroot00000000000000-- Copyright (c) 2013 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; library work ; use work.cordic_p.all ; use work.nco_p.all ; entity nco_tb is end entity ; -- nco_tb architecture arch of nco_tb is signal clock : std_logic := '1' ; signal reset : std_logic := '1' ; signal inputs : nco_input_t := ( dphase => (others =>'0'), valid => '0' ); signal outputs : nco_output_t ; procedure nop( signal clock : in std_logic ; count : in natural ) is begin for i in 1 to count loop wait until rising_edge( clock ) ; end loop ; end procedure ; begin clock <= not clock after 1 ns ; U_nco : entity work.nco port map ( clock => clock, reset => reset, inputs => inputs, outputs => outputs ) ; tb : process variable up_downx : boolean := true ; begin reset <= '1' ; nop( clock, 10 ) ; reset <= '0' ; nop( clock, 10 ) ; for i in 0 to 100000 loop if( inputs.dphase = 4096 ) then up_downx := false ; elsif( inputs.dphase = -4096 ) then up_downx := true ; end if ; if( up_downx ) then inputs.dphase <= inputs.dphase + 1 ; else inputs.dphase <= inputs.dphase - 1 ; end if ; inputs.valid <= '1' ; wait until rising_edge( clock ) ; inputs.valid <= '0' ; nop( clock, 10 ) ; end loop ; report "-- End of Simulation --" severity failure ; end process ; end architecture ; -- arch bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/tb/uart_tb.vhd000066400000000000000000000106341457144405000231770ustar00rootroot00000000000000-- Copyright (c) 2013 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; entity uart_tb is end entity ; -- uart_tb architecture arch of uart_tb is signal clock : std_logic := '1' ; signal reset : std_logic := '1' ; signal enable : std_logic := '0' ; signal rs232_rxd : std_logic ; signal rs232_txd : std_logic := '1' ; signal txd_we : std_logic ; signal txd_full : std_logic := '0' ; signal txd_data : std_logic_vector(7 downto 0) ; signal rxd_re : std_logic ; signal rxd_empty : std_logic := '1' ; signal rxd_data : std_logic_vector(7 downto 0) := (others =>'0') ; procedure nop( signal clock : in std_logic ; count : in natural ) is begin for i in 1 to count loop wait until rising_edge(clock) ; end loop ; end procedure ; procedure uart_send( signal clock : in std_logic ; signal txd : out std_logic ; data : in std_logic_vector(7 downto 0) ; cpb : in natural ) is begin wait until rising_edge(clock) ; -- Send start bit txd <= '0' ; nop( clock, cpb ) ; -- Send data for i in 0 to data'high loop txd <= data(i) ; nop( clock, cpb ) ; end loop ; -- Send stop bit txd <= '1' ; nop( clock, cpb ) ; end procedure ; begin clock <= not clock after 1 ns ; U_uart : entity work.uart port map ( clock => clock, reset => reset, enable => enable, rs232_rxd => rs232_rxd, rs232_txd => rs232_txd, txd_we => txd_we, txd_full => txd_full, txd_data => txd_data, rxd_re => rxd_re, rxd_empty => rxd_empty, rxd_data => rxd_data ) ; stimulate : process begin -- Reset reset <= '1' ; nop( clock, 10 ) ; -- Done with reset ... reset <= '0' ; nop( clock, 10 ) ; -- Make sure we don't do anything when we aren't enabled ... enable <= '0' ; nop( clock, 10 ) ; -- ... and now lets go! enable <= '1' ; nop( clock, 100000 ) ; -- Ding! report "-- End of Simulation -- " severity failure ; end process ; -- Just keep sending data in from the UART simulate_uart_sending : process variable val : natural := 0 ; begin rs232_txd <= '1' ; wait until enable = '1' ; nop( clock, 100 ) ; while true loop uart_send( clock, rs232_txd, std_logic_vector(to_unsigned(val,8)), 10 ) ; val := (val + 1) mod 256 ; --nop( clock, 5 ) ; end loop ; end process ; -- Feedback data continuously simulate_s2u_fifo : process begin rxd_empty <= '1' ; wait until enable = '1' ; nop( clock, 100 ) ; rxd_empty <= '0' ; rxd_data <= (others =>'0') ; while true loop wait until rising_edge( clock ) and rxd_re = '1' ; rxd_data <= std_logic_vector(unsigned(rxd_data)+1) ; end loop ; end process ; end architecture ; -- arch bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/uart.vhd000066400000000000000000000210531457144405000221020ustar00rootroot00000000000000-- Copyright (c) 2013 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; entity uart is port ( -- FPGA internal interface to the TX and RX FIFOs clock : in std_logic ; reset : in std_logic ; enable : in std_logic ; -- RS232 interface rs232_rxd : out std_logic ; rs232_txd : in std_logic ; -- UART -> FIFO interface txd_we : out std_logic ; txd_full : in std_logic ; txd_data : out std_logic_vector(7 downto 0) ; -- FIFO -> UART interface rxd_re : out std_logic ; rxd_empty : in std_logic ; rxd_data : in std_logic_vector(7 downto 0) ) ; end entity ; -- uart architecture arch of uart is -- TODO: Make this a generic instead of a constant constant CLOCKS_PER_BIT : natural := 10 ; -- Send and receive state machine definitions type send_fsm_t is (IDLE, SEND_START, SEND_DATA, SEND_STOP ) ; type receive_fsm_t is (WAIT_FOR_START, CENTER_START, SAMPLE_DATA, WAIT_FOR_STOP) ; -- FSM signals signal send_fsm : send_fsm_t ; signal receive_fsm : receive_fsm_t ; -- Synchronization signals for asynchronous input signal reg_txd : std_logic ; signal sync_txd : std_logic ; begin -- Synchronize asynchronous inputs reg_txd <= rs232_txd when rising_edge( clock ) ; sync_txd <= reg_txd when rising_edge( clock ) ; -- Receive data from the UART and put it in the FIFO receive_from_uart : process(all) variable bits : std_logic_vector(7 downto 0) ; variable bit_count : natural range 0 to bits'length ; variable clock_count : natural range 0 to CLOCKS_PER_BIT ; variable txd_delay : std_logic ; begin if( reset = '1' ) then receive_fsm <= WAIT_FOR_START ; txd_we <= '0' ; txd_data <= (others =>'0') ; bits := (others =>'0') ; bit_count := 0 ; clock_count := 0 ; txd_delay := '0' ; elsif( rising_edge(clock) ) then if( enable = '0' ) then txd_we <= '0' ; txd_data <= (others =>'0') ; bits := (others =>'0') ; bit_count := 0 ; clock_count := 0 ; txd_delay := '0' ; else txd_we <= '0' ; case receive_fsm is -- Wait for the start signal when WAIT_FOR_START => if( sync_txd = '0' and txd_delay = '1' ) then receive_fsm <= CENTER_START ; clock_count := CLOCKS_PER_BIT/2-1 ; end if ; txd_delay := sync_txd ; -- Center the start bit when CENTER_START => clock_count := clock_count - 1 ; if( clock_count = 0 ) then receive_fsm <= SAMPLE_DATA ; clock_count := CLOCKS_PER_BIT ; bit_count := bits'length ; end if ; -- Sample the bits when SAMPLE_DATA => clock_count := clock_count - 1 ; if( clock_count = 0 ) then bits := sync_txd & bits(bits'high downto 1) ; bit_count := bit_count - 1 ; clock_count := CLOCKS_PER_BIT ; if( bit_count = 0 ) then receive_fsm <= WAIT_FOR_STOP ; txd_data <= bits ; txd_we <= '1' ; end if ; end if ; -- Wait for the stop bit when WAIT_FOR_STOP => clock_count := clock_count - 1 ; if( clock_count = 0 ) then receive_fsm <= WAIT_FOR_START ; assert sync_txd = '1' report "STOP bit not found!" severity error ; end if ; when others => end case ; end if ; end if ; end process ; -- Send data to the UART from the FIFO send_to_uart : process(all) variable bits : std_logic_vector(7 downto 0) ; variable bit_count : natural range 0 to bits'length ; variable clock_count : natural range 0 to CLOCKS_PER_BIT ; begin if( reset = '1' ) then send_fsm <= IDLE ; rxd_re <= '0' ; rs232_rxd <= '1' ; bit_count := 0 ; clock_count := 0 ; bits := (others =>'0') ; elsif( rising_edge(clock) ) then if( enable = '0' ) then send_fsm <= IDLE ; rxd_re <= '0' ; rs232_rxd <= '1' ; bit_count := 0 ; clock_count := 0 ; bits := (others =>'0') ; else rxd_re <= '0' ; case send_fsm is -- Wait until we have something to send when IDLE => rs232_rxd <= '1' ; if( rxd_empty = '0' ) then send_fsm <= SEND_START ; rxd_re <= '1' ; bit_count := bits'length ; clock_count := CLOCKS_PER_BIT ; end if ; -- Send the start bit when SEND_START => rs232_rxd <= '0' ; -- bits := rxd_data ; clock_count := clock_count - 1 ; if( clock_count = 0 ) then send_fsm <= SEND_DATA ; clock_count := CLOCKS_PER_BIT ; elsif( clock_count = 9 ) then bits := rxd_data ; end if ; -- Send the data when SEND_DATA => rs232_rxd <= bits(0) ; clock_count := clock_count - 1 ; if( clock_count = 0 ) then bits := '0' & bits(bits'high downto 1) ; bit_count := bit_count - 1 ; clock_count := CLOCKS_PER_BIT ; if( bit_count = 0 ) then send_fsm <= SEND_STOP ; end if ; end if ; -- Send the stop bit when SEND_STOP => rs232_rxd <= '1' ; clock_count := clock_count - 1 ; if( clock_count = 0 ) then send_fsm <= IDLE ; end if ; -- Weird when others => send_fsm <= IDLE ; rs232_rxd <= '1' ; bit_count := 0 ; clock_count := 0 ; bits := (others =>'0') ; end case ; end if ; end if ; end process ; end architecture ; -- arch bladeRF-2024.05/hdl/fpga/ip/nuand/synthesis/uart_bridge.vhd000066400000000000000000000104171457144405000234200ustar00rootroot00000000000000-- Copyright (c) 2013 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; entity uart_bridge is port ( -- UART Interface uart_clock : in std_logic ; uart_reset : in std_logic ; uart_enable : in std_logic ; uart_rxd : out std_logic ; uart_txd : out std_logic ; -- SPI Interface spi_clock : in std_logic ; spi_reset : in std_logic ; spi_sclk : out std_logic ; spi_miso : in std_logic ; spi_mosi : out std_logic ; spi_csn : out std_logic ) ; end entity ; -- uart_bridge architecture arch of uart_bridge is -- UART to SPI FIFO signals signal u2s_write : std_logic ; signal u2s_full : std_logic ; signal u2s_data : std_logic_vector(7 downto 0) ; -- SPI to UART FIFO signals signal s2u_read : std_logic ; signal s2u_empty : std_logic ; signal s2u_data : std_logic_vector(7 downto 0) ; begin -- UART interface U_uart : entity work.uart port map ( -- Control signals clock => uart_clock, reset => uart_reset, enable => uart_enable, -- External UART signals rs232_rxd => uart_rxd, rs232_txd => uart_txd, -- FIFO signals for UART to FIFO from external interface txd_we => u2s_write, txd_full => u2s_full, txd_wdata => u2s_data, -- FIFO signals for FIFO to UART to be transmitted back rxd_re => s2u_read, rxd_empty => s2u_empty, rxd_rdata => s2u_data ) ; -- Dual clock FIFO for UART -> SPI comms U_u2s_fifo : entity work.async_fifo port map ( -- Write side: UART w_clock => uart_clock, w_enable => u2s_write, w_data => u2s_data, w_empty => open, w_full => u2s_full, -- Read side: SPI r_clock => spi_clock, r_enable => spi_read, r_data => spi_data, r_empty => spi_empty, r_full => open ) ; -- Dual clock FIFO for SPI -> UART comms U_s2u_fifo : entity work.async_fifo port map ( -- Write side: SPI w_clock => spi_clock, w_enable => spi_readback_wen, w_data => spi_readback_data, w_empty => open, w_full => s2u_full, -- Read side: UART r_clock => uart_clock, r_enable => s2u_read, r_data => s2u_data, r_empty => s2u_empty, r_full => open ) ; -- LMS SPI interface U_lms_spi : entity lms_spi port map ( -- Control signals clock => spi_clock, reset => spi_reset, -- SPI data stream spi_data => spi_data, spi_read => spi_read, spi_empty => spi_empty, -- SPI readback data stream readback_data => spi_readback_data, readback_enable => spi_readback_wen ) ; end architecture ; -- arch bladeRF-2024.05/hdl/fpga/ip/nuand/time_tamer/000077500000000000000000000000001457144405000205205ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/time_tamer/modelsim/000077500000000000000000000000001457144405000223315ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/time_tamer/modelsim/compile.do000066400000000000000000000013611457144405000243060ustar00rootroot00000000000000# Create work library vlib nuand # Compile design files vcom -work nuand -2008 ../../synthesis/synchronizer.vhd vcom -work nuand -2008 ../../synthesis/handshake.vhd vcom -work nuand -2008 ../vhdl/time_tamer.vhd vcom -work nuand -2008 ../vhdl/tb/time_tamer_tb.vhd # Elaborate design vsim nuand.time_tamer_tb # Add waves add wave -hexadecimal sim:/time_tamer_tb/U_tamer/clock add wave -hexadecimal sim:/time_tamer_tb/U_tamer/reset add wave -hexadecimal sim:/time_tamer_tb/U_tamer/ts_clock add wave -hexadecimal sim:/time_tamer_tb/U_tamer/ts_reset add wave -hexadecimal sim:/time_tamer_tb/U_tamer/timestamp add wave -hexadecimal sim:/time_tamer_tb/U_tamer/compare_time add wave -hexadecimal sim:/time_tamer_tb/U_tamer/check_compare/fsm # Run run -all bladeRF-2024.05/hdl/fpga/ip/nuand/time_tamer/qsys/000077500000000000000000000000001457144405000215175ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/time_tamer/qsys/time_tamer_hw.tcl000066400000000000000000000131361457144405000250530ustar00rootroot00000000000000# TCL File Generated by Component Editor 15.0 # Thu May 28 14:32:31 EDT 2015 # DO NOT MODIFY # # time_tamer "BladeRF Time Tamer" v1.0 # Nuand, LLC 2015.05.28.14:32:31 # Timing Sequence Tamer # # # request TCL package from ACDS 15.0 # package require -exact qsys 15.0 # # module time_tamer # set_module_property DESCRIPTION "Timing Sequence Tamer" set_module_property NAME time_tamer set_module_property VERSION 1.0 set_module_property INTERNAL false set_module_property OPAQUE_ADDRESS_MAP true set_module_property GROUP Peripherals set_module_property AUTHOR "Nuand, LLC" set_module_property DISPLAY_NAME "BladeRF Time Tamer" set_module_property INSTANTIATE_IN_SYSTEM_MODULE true set_module_property EDITABLE true set_module_property REPORT_TO_TALKBACK false set_module_property ALLOW_GREYBOX_GENERATION false set_module_property REPORT_HIERARCHY false # # file sets # add_fileset QUARTUS_SYNTH QUARTUS_SYNTH "" "" set_fileset_property QUARTUS_SYNTH TOP_LEVEL time_tamer set_fileset_property QUARTUS_SYNTH ENABLE_RELATIVE_INCLUDE_PATHS false set_fileset_property QUARTUS_SYNTH ENABLE_FILE_OVERWRITE_MODE false add_fileset_file time_tamer.qip OTHER PATH ../time_tamer.qip # # parameters # # # display items # # # connection point reset # add_interface reset reset end set_interface_property reset associatedClock clock_sink set_interface_property reset synchronousEdges DEASSERT set_interface_property reset ENABLED true set_interface_property reset EXPORT_OF "" set_interface_property reset PORT_NAME_MAP "" set_interface_property reset CMSIS_SVD_VARIABLES "" set_interface_property reset SVD_ADDRESS_GROUP "" add_interface_port reset reset reset Input 1 # # connection point avalon_slave_0 # add_interface avalon_slave_0 avalon end set_interface_property avalon_slave_0 addressUnits SYMBOLS set_interface_property avalon_slave_0 associatedClock clock_sink set_interface_property avalon_slave_0 associatedReset reset set_interface_property avalon_slave_0 bitsPerSymbol 8 set_interface_property avalon_slave_0 burstOnBurstBoundariesOnly false set_interface_property avalon_slave_0 burstcountUnits SYMBOLS set_interface_property avalon_slave_0 explicitAddressSpan 32 set_interface_property avalon_slave_0 holdTime 0 set_interface_property avalon_slave_0 linewrapBursts false set_interface_property avalon_slave_0 maximumPendingReadTransactions 1 set_interface_property avalon_slave_0 maximumPendingWriteTransactions 0 set_interface_property avalon_slave_0 readLatency 0 set_interface_property avalon_slave_0 readWaitTime 1 set_interface_property avalon_slave_0 setupTime 0 set_interface_property avalon_slave_0 timingUnits Cycles set_interface_property avalon_slave_0 writeWaitTime 0 set_interface_property avalon_slave_0 ENABLED true set_interface_property avalon_slave_0 EXPORT_OF "" set_interface_property avalon_slave_0 PORT_NAME_MAP "" set_interface_property avalon_slave_0 CMSIS_SVD_VARIABLES "" set_interface_property avalon_slave_0 SVD_ADDRESS_GROUP "" add_interface_port avalon_slave_0 din writedata Input 8 add_interface_port avalon_slave_0 dout readdata Output 8 add_interface_port avalon_slave_0 write write Input 1 add_interface_port avalon_slave_0 read read Input 1 add_interface_port avalon_slave_0 waitreq waitrequest Output 1 add_interface_port avalon_slave_0 readack readdatavalid Output 1 add_interface_port avalon_slave_0 addr address Input 5 set_interface_assignment avalon_slave_0 embeddedsw.configuration.isFlash 0 set_interface_assignment avalon_slave_0 embeddedsw.configuration.isMemoryDevice 0 set_interface_assignment avalon_slave_0 embeddedsw.configuration.isNonVolatileStorage 0 set_interface_assignment avalon_slave_0 embeddedsw.configuration.isPrintableDevice 0 # # connection point clock_sink # add_interface clock_sink clock end set_interface_property clock_sink clockRate 0 set_interface_property clock_sink ENABLED true set_interface_property clock_sink EXPORT_OF "" set_interface_property clock_sink PORT_NAME_MAP "" set_interface_property clock_sink CMSIS_SVD_VARIABLES "" set_interface_property clock_sink SVD_ADDRESS_GROUP "" add_interface_port clock_sink clock clk Input 1 # # connection point interrupt_sender # add_interface interrupt_sender interrupt end set_interface_property interrupt_sender associatedAddressablePoint avalon_slave_0 set_interface_property interrupt_sender associatedClock clock_sink set_interface_property interrupt_sender associatedReset reset set_interface_property interrupt_sender bridgedReceiverOffset "" set_interface_property interrupt_sender bridgesToReceiver "" set_interface_property interrupt_sender ENABLED true set_interface_property interrupt_sender EXPORT_OF "" set_interface_property interrupt_sender PORT_NAME_MAP "" set_interface_property interrupt_sender CMSIS_SVD_VARIABLES "" set_interface_property interrupt_sender SVD_ADDRESS_GROUP "" add_interface_port interrupt_sender intr irq Output 1 # # connection point conduit_end # add_interface conduit_end conduit end set_interface_property conduit_end associatedClock clock_sink set_interface_property conduit_end associatedReset reset set_interface_property conduit_end ENABLED true set_interface_property conduit_end EXPORT_OF "" set_interface_property conduit_end PORT_NAME_MAP "" set_interface_property conduit_end CMSIS_SVD_VARIABLES "" set_interface_property conduit_end SVD_ADDRESS_GROUP "" add_interface_port conduit_end ts_sync_in ts_sync_in Input 1 add_interface_port conduit_end ts_sync_out ts_sync_out Output 1 add_interface_port conduit_end ts_pps ts_pps Input 1 add_interface_port conduit_end ts_clock ts_clock Input 1 add_interface_port conduit_end ts_reset ts_reset Input 1 add_interface_port conduit_end ts_time ts_time Output 64 bladeRF-2024.05/hdl/fpga/ip/nuand/time_tamer/time_tamer.qip000066400000000000000000000011551457144405000233630ustar00rootroot00000000000000# When generating a system, Qsys will copy this file into its synthesis output # directory. All paths below must be relative to that directory. set nuand_ip_dir [file join $::quartus(qip_path) ../../../../../../fpga/ip/nuand] set_global_assignment -name VHDL_FILE -hdl_version VHDL_2008 [file normalize [file join $nuand_ip_dir synthesis/synchronizer.vhd]] set_global_assignment -name VHDL_FILE -hdl_version VHDL_2008 [file normalize [file join $nuand_ip_dir synthesis/handshake.vhd]] set_global_assignment -name VHDL_FILE -hdl_version VHDL_2008 [file normalize [file join $nuand_ip_dir time_tamer/vhdl/time_tamer.vhd]] bladeRF-2024.05/hdl/fpga/ip/nuand/time_tamer/vhdl/000077500000000000000000000000001457144405000214555ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/time_tamer/vhdl/tb/000077500000000000000000000000001457144405000220625ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/time_tamer/vhdl/tb/time_tamer_tb.vhd000066400000000000000000000126551457144405000254110ustar00rootroot00000000000000library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; entity time_tamer_tb is end entity ; architecture arch of time_tamer_tb is signal clock : std_logic := '1' ; signal reset : std_logic := '1' ; signal addr : std_logic_vector(4 downto 0) := (others => '0'); signal din : std_logic_vector(7 downto 0) ; signal dout : std_logic_vector(7 downto 0) ; signal write : std_logic := '0' ; signal read : std_logic := '0' ; signal waitreq : std_logic ; signal readack : std_logic ; signal intr : std_logic ; signal ts_clock : std_logic := '1' ; signal ts_reset : std_logic := '1' ; signal ts_time : std_logic_vector(63 downto 0) ; procedure read_time( signal clock : in std_logic ; signal addr : out std_logic_vector(4 downto 0) ; signal dout : in std_logic_vector(7 downto 0) ; signal read : out std_logic ; signal readack : in std_logic ; ts : out unsigned(63 downto 0) ) is begin for i in 0 to 7 loop addr <= std_logic_vector(to_unsigned(i, addr'length)) ; read <= '1' ; wait until rising_edge(clock) and readack = '1' ; ts(8*i+7 downto 8*i) := unsigned(dout) ; read <= '0' ; wait until rising_edge(clock) ; wait until rising_edge(clock) ; end loop ; end procedure ; procedure write_time( signal clock : in std_logic ; signal addr : out std_logic_vector(4 downto 0) ; signal din : out std_logic_vector(7 downto 0) ; signal write : out std_logic ; ts : unsigned(63 downto 0) ) is begin for i in 0 to 7 loop addr <= std_logic_vector(to_unsigned(i, addr'length)) ; din <= std_logic_vector(ts(i*8+7 downto i*8)) ; write <= '1' ; wait until rising_edge(clock) ; write <= '0' ; wait until rising_edge(clock) ; end loop ; end procedure ; procedure nop( signal clock : in std_logic ; count : natural ) is begin for i in 1 to count loop wait until rising_edge(clock) ; end loop ; end procedure ; procedure clear_intr( signal clock : in std_logic ; signal addr : out std_logic_vector(4 downto 0) ; signal din : out std_logic_vector(7 downto 0) ; signal write : out std_logic ) is begin addr <= std_logic_vector(to_unsigned(8, addr'length)) ; din <= std_logic_vector(to_unsigned(1, din'length)) ; write <= '1' ; wait until rising_edge(clock) ; write <= '0' ; wait until rising_edge(clock) ; end procedure ; procedure set_intr( signal clock : in std_logic ; signal addr : out std_logic_vector(4 downto 0) ; signal din : out std_logic_vector(7 downto 0) ; signal write : out std_logic ) is begin addr <= std_logic_vector(to_unsigned(8, addr'length)) ; din <= std_logic_vector(to_unsigned(0, din'length)) ; write <= '1' ; wait until rising_edge(clock) ; write <= '0' ; wait until rising_edge(clock) ; end procedure ; begin clock <= not clock after 1 ns ; ts_clock <= not ts_clock after 12 ns ; ts_reset <= '0' after 100 ns ; U_tamer : entity work.time_tamer port map ( clock => clock, reset => reset, addr => addr, din => din, dout => dout, write => write, read => read, waitreq => waitreq, readack => readack, intr => intr, ts_sync_in => '0', ts_sync_out => open, ts_pps => '0', ts_clock => ts_clock, ts_reset => ts_reset, ts_time => ts_time ) ; tb : process variable ts : unsigned(63 downto 0) := (others =>'0') ; begin reset <= '1' ; nop( clock, 100 ) ; reset <= '0' ; nop( clock, 100 ) ; nop( clock, 1000 ) ; read_time( clock, addr, dout, read, readack, ts ) ; -- Write a comparison time in the future write_time( clock, addr, din, write, x"0000_0000_0000_0400" ) ; set_intr( clock, addr, din, write ) ; -- Wait for an interrupt wait until rising_edge(clock) and intr = '1' ; nop( clock, 1000 ) ; -- Clear the interrupt clear_intr( clock, addr, din, write ) ; -- Write a comparison time in the past write_time( clock, addr, din, write, x"0000_0000_0000_0400" ) ; set_intr( clock, addr, din, write ) ; -- Wait for an interrupt wait until rising_edge(clock) and intr = '1' ; nop( clock, 1000 ) ; -- Clear the interrupt clear_intr( clock, addr, din, write ) ; nop( clock, 1000 ) ; -- Read the time back read_time( clock, addr, dout, read, readack, ts ) ; nop( clock, 1000 ) ; report "-- End of Simulation" severity failure ; end process ; end architecture ; bladeRF-2024.05/hdl/fpga/ip/nuand/time_tamer/vhdl/time_tamer.vhd000066400000000000000000000320131457144405000243050ustar00rootroot00000000000000library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; entity time_tamer is port ( -- Control signals clock : in std_logic ; reset : in std_logic ; -- Memory mapped interface addr : in std_logic_vector(4 downto 0) ; din : in std_logic_vector(7 downto 0) ; dout : out std_logic_vector(7 downto 0) ; write : in std_logic ; read : in std_logic ; waitreq : out std_logic ; readack : out std_logic ; intr : out std_logic ; -- Sync signals ts_sync_in : in std_logic ; ts_sync_out : out std_logic ; -- Exported signals ts_pps : in std_logic ; ts_clock : in std_logic ; ts_reset : in std_logic ; ts_time : out std_logic_vector(63 downto 0) ) ; end entity ; architecture arch of time_tamer is signal ack : std_logic ; signal snap_time : unsigned(63 downto 0); signal snap_req : std_logic ; signal snap_ack : std_logic ; signal hold_time : unsigned(63 downto 0) ; signal uaddr : unsigned(addr'range) ; signal status : std_logic_vector(7 downto 0) ; signal intr_clear : std_logic ; signal intr_set : std_logic ; signal timestamp : unsigned(63 downto 0) ; signal compare_time : unsigned(63 downto 0) := (others => '0'); signal mm_clear_compare : std_logic ; signal mm_compare_cleared : std_logic ; signal ts_clear_compare : std_logic ; signal ts_compare_cleared : std_logic ; signal ts_time_trigger : std_logic ; signal mm_time_trigger : std_logic ; signal current_time : unsigned(63 downto 0) ; signal current_req : std_logic ; signal current_ack : std_logic ; signal status_past : std_logic ; signal mm_compare_load : std_logic ; signal ts_compare_load : std_logic ; signal mm_compare_loaded : std_logic ; signal ts_compare_loaded : std_logic ; signal mm_ts_reset : std_logic ; begin uaddr <= unsigned(addr) ; readack <= ack ; waitreq <= not(ack or write) ; ts_sync_out <= '0' ; status <= (0 => status_past, others =>'0') ; U_sync_ts_reset : entity work.synchronizer generic map ( RESET_LEVEL => '1' ) port map ( reset => reset, clock => clock, async => ts_reset, sync => mm_ts_reset ) ; U_sync_load : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => ts_reset, clock => ts_clock, async => mm_compare_load, sync => ts_compare_load ) ; U_sync_loaded : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => reset, clock => clock, async => ts_compare_loaded, sync => mm_compare_loaded ) ; U_sync_clear : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => ts_reset, clock => ts_clock, async => mm_clear_compare, sync => ts_clear_compare ) ; U_sync_cleared : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => reset, clock => clock, async => ts_compare_cleared, sync => mm_compare_cleared ) ; U_sync_trigger : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => reset, clock => clock, async => ts_time_trigger, sync => mm_time_trigger ) ; ts_time <= std_logic_vector(timestamp) ; increment_time : process(ts_clock, ts_reset) variable tick : std_logic := '1' ; begin if( ts_reset = '1' ) then tick := '1' ; timestamp <= (others =>'0') ; elsif( rising_edge(ts_clock) ) then if( tick = '0' ) then timestamp <= timestamp + 1 ; end if ; tick := not tick ; end if ; end process ; U_snap : entity work.handshake generic map ( DATA_WIDTH => ts_time'length ) port map ( source_reset => ts_reset, source_clock => ts_clock, source_data => std_logic_vector(timestamp), dest_reset => reset, dest_clock => clock, unsigned(dest_data) => snap_time, dest_req => snap_req, dest_ack => snap_ack ) ; U_current : entity work.handshake generic map ( DATA_WIDTH => ts_time'length ) port map ( source_reset => ts_reset, source_clock => ts_clock, source_data => std_logic_vector(timestamp), dest_reset => reset, dest_clock => clock, unsigned(dest_data) => current_time, dest_req => current_req, dest_ack => current_ack ) ; request : process(clock, reset) begin if( reset = '1' ) then snap_req <= '0' ; elsif( rising_edge(clock) ) then if( uaddr = 0 and read = '1' ) then snap_req <= '1' ; else snap_req <= '0' ; end if ; end if ; end process ; generate_ack : process(clock, reset) begin if( reset = '1' ) then ack <= '0' ; elsif( rising_edge(clock) ) then if( uaddr = 0 and read = '1' and mm_ts_reset = '0' ) then ack <= snap_ack ; else ack <= read ; end if ; end if ; end process ; mm_read : process(clock) begin if( rising_edge(clock) ) then case to_integer(uaddr) is when 0 => dout <= std_logic_vector(snap_time(7 downto 0)); when 1 => dout <= std_logic_vector(snap_time(15 downto 8)); when 2 => dout <= std_logic_vector(snap_time(23 downto 16)); when 3 => dout <= std_logic_vector(snap_time(31 downto 24)); when 4 => dout <= std_logic_vector(snap_time(39 downto 32)); when 5 => dout <= std_logic_vector(snap_time(47 downto 40)); when 6 => dout <= std_logic_vector(snap_time(55 downto 48)); when 7 => dout <= std_logic_vector(snap_time(63 downto 56)); when 9 => dout <= status ; when others => dout <= x"13"; end case; end if ; end process; mm_write : process(clock) begin if( rising_edge(clock) ) then intr_set <= '0' ; intr_clear <= '0' ; if( write = '1' ) then case to_integer(uaddr) is when 0 => hold_time( 7 downto 0) <= unsigned(din) ; when 1 => hold_time(15 downto 8) <= unsigned(din) ; when 2 => hold_time(23 downto 16) <= unsigned(din) ; when 3 => hold_time(31 downto 24) <= unsigned(din) ; when 4 => hold_time(39 downto 32) <= unsigned(din) ; when 5 => hold_time(47 downto 40) <= unsigned(din) ; when 6 => hold_time(55 downto 48) <= unsigned(din) ; when 7 => hold_time(63 downto 56) <= unsigned(din) ; when 8 => -- Command coming in! case to_integer(unsigned(din)) is when 0 => -- Set interrupt intr_set <= '1' ; when 1 => -- Clear interrupt intr_clear <= '1' ; when 2 => -- Latch time manual when 3 => -- Latch time next PPS when others => null ; end case ; when others => null ; end case ; end if ; end if ; end process ; check_compare : process(ts_clock, ts_reset) type fsm_t is (WAIT_FOR_LOAD, WAIT_FOR_COMPARE, WAIT_FOR_CLEAR) ; variable fsm : fsm_t := WAIT_FOR_LOAD ; begin if( ts_reset = '1' ) then fsm := WAIT_FOR_LOAD ; ts_compare_loaded <= '0' ; ts_compare_cleared <= '0' ; ts_time_trigger <= '0' ; elsif(rising_edge(ts_clock)) then case fsm is when WAIT_FOR_LOAD => if( ts_compare_load = '1' ) then ts_compare_loaded <= '1' ; compare_time <= hold_time ; ts_compare_cleared <= '0' ; fsm := WAIT_FOR_COMPARE ; end if ; when WAIT_FOR_COMPARE => if( compare_time = timestamp ) then ts_time_trigger <= '1' ; ts_compare_loaded <= '0' ; fsm := WAIT_FOR_CLEAR ; end if ; when WAIT_FOR_CLEAR => if( ts_clear_compare = '1' ) then ts_time_trigger <= '0' ; ts_compare_cleared <= '1' ; fsm := WAIT_FOR_LOAD ; end if ; when others => null ; end case ; end if ; end process ; interrupt : process(clock, reset) type fsm_t is (WAIT_FOR_ARM, CHECK_CURRENT_TIME, SET_COMPARE_TIME, PAST_TIME, WAIT_FOR_COMPARE, WAIT_FOR_INTR_CLEAR, WAIT_FOR_COMPARE_CLEAR) ; variable fsm : fsm_t := WAIT_FOR_ARM ; begin if( reset = '1' ) then intr <= '0' ; fsm := WAIT_FOR_ARM ; mm_clear_compare <= '0' ; mm_compare_load <= '0' ; current_req <= '0' ; status_past <= '0' ; elsif( rising_edge(clock) ) then if( mm_ts_reset = '1' ) then intr <= '0' ; fsm := WAIT_FOR_ARM ; mm_clear_compare <= '0' ; mm_compare_load <= '0' ; current_req <= '0' ; status_past <= '0' ; else case fsm is when WAIT_FOR_ARM => current_req <= '0' ; status_past <= '0' ; mm_clear_compare <= '0' ; mm_compare_load <= '0' ; if( intr_set = '1' ) then fsm := CHECK_CURRENT_TIME ; end if ; when CHECK_CURRENT_TIME => current_req <= '1' ; if( current_ack = '1' ) then current_req <= '0' ; if( hold_time < current_time ) then fsm := PAST_TIME ; status_past <= '1' ; else fsm := SET_COMPARE_TIME ; end if ; end if ; when SET_COMPARE_TIME => mm_compare_load <= '1' ; if( mm_compare_loaded = '1' ) then mm_compare_load <= '0' ; fsm := WAIT_FOR_COMPARE ; end if ; when PAST_TIME => intr <= '1' ; fsm := WAIT_FOR_INTR_CLEAR ; when WAIT_FOR_COMPARE => if( mm_time_trigger = '1' ) then intr <= '1' ; fsm := WAIT_FOR_INTR_CLEAR ; end if ; when WAIT_FOR_INTR_CLEAR => mm_clear_compare <= '1' ; if( intr_clear = '1' ) then intr <= '0' ; if( status_past = '1' ) then fsm := WAIT_FOR_ARM ; else fsm := WAIT_FOR_COMPARE_CLEAR ; end if ; end if ; when WAIT_FOR_COMPARE_CLEAR => if( mm_compare_cleared = '1' ) then mm_clear_compare <= '0' ; fsm := WAIT_FOR_ARM ; end if ; when others => null ; end case ; end if ; end if ; end process ; end architecture ; bladeRF-2024.05/hdl/fpga/ip/nuand/tone_generator/000077500000000000000000000000001457144405000214055ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/tone_generator/modelsim/000077500000000000000000000000001457144405000232165ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/tone_generator/modelsim/tone_generator_tb.do000066400000000000000000000044621457144405000272500ustar00rootroot00000000000000# Initializes simulation of tone generator proc compile_tone_generator { root } { vlib work vcom -2008 -work work [file join $root . synthesis cordic.vhd] vcom -2008 -work work [file join $root . synthesis nco.vhd] vcom -2008 -work work [file join $root . synthesis reset_synchronizer.vhd] vcom -2008 -work work [file join $root . synthesis synchronizer.vhd] vcom -2008 -work work [file join $root . simulation util.vhd] vcom -2008 -work work [file join $root tone_generator vhdl tone_generator.vhd] vcom -2008 -work work [file join $root tone_generator vhdl tone_generator_hw.vhd] vcom -2008 -work work [file join $root tone_generator vhdl tb tone_generator_tb.vhd] } proc simulate_tone_generator { } { vsim -t 10ns -L altera_lnsim tone_generator_tb(tb_tgen) } proc simulate_tone_generator_hw { } { vsim -t 10ns -L altera_lnsim tone_generator_tb(tb_hw) } proc waves_tone_generator { } { add wave sim:/tone_generator_tb/clock add wave -format analog -max 2048 -min -2047 -height 100 sim:/tone_generator_tb/outputs.re add wave -format analog -max 2048 -min -2047 -height 100 sim:/tone_generator_tb/outputs.im add wave sim:/tone_generator_tb/outputs.valid add wave -expand -group tb * add wave -expand -group tone_generator sim:/tone_generator_tb/U_tone_generator/* } proc waves_tone_generator_hw { } { add wave sim:/tone_generator_tb/clock add wave sim:/tone_generator_tb/sample_clk add wave -format analog -max 2048 -min -2047 -height 100 sim:/tone_generator_tb/sample_i add wave -format analog -max 2048 -min -2047 -height 100 sim:/tone_generator_tb/sample_q add wave sim:/tone_generator_tb/sample_valid add wave -expand -group tb * add wave -expand -group tone_generator sim:/tone_generator_tb/U_tone_generator_hw/U_tone_generator/* add wave -expand -group mmap sim:/tone_generator_tb/mm_* add wave -expand -group tgen_hw sim:/tone_generator_tb/U_tone_generator_hw/* } proc run_sim { } { simulate_tone_generator waves_tone_generator run -all } proc run_sim_hw { } { simulate_tone_generator_hw waves_tone_generator_hw run -all } if [info exists root] { compile_tone_generator $root } else { # we assume we're in hdl/fpga/ip/nuand/tone_generator/modelsim compile_tone_generator [file join [pwd] .. ..] } bladeRF-2024.05/hdl/fpga/ip/nuand/tone_generator/qsys/000077500000000000000000000000001457144405000224045ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/tone_generator/qsys/tone_generator_hw.tcl000066400000000000000000000171201457144405000266220ustar00rootroot00000000000000# TCL File Generated by Component Editor 18.0 # Mon Jan 14 19:18:48 EST 2019 # DO NOT MODIFY # # tone_generator "bladeRF Tone Generator" v1.0 # Rey Sabrina Tucker 2019.01.14.19:18:48 # Generates IQ samples with tones # # # request TCL package from ACDS 16.1 # package require -exact qsys 16.1 # # module tone_generator # set_module_property DESCRIPTION "Generates IQ samples with tones" set_module_property NAME tone_generator set_module_property VERSION 1.0 set_module_property INTERNAL false set_module_property OPAQUE_ADDRESS_MAP true set_module_property GROUP Peripherals set_module_property AUTHOR "Rey Sabrina Tucker " set_module_property DISPLAY_NAME "bladeRF Tone Generator" set_module_property INSTANTIATE_IN_SYSTEM_MODULE true set_module_property EDITABLE true set_module_property REPORT_TO_TALKBACK false set_module_property ALLOW_GREYBOX_GENERATION false set_module_property REPORT_HIERARCHY false # # file sets # add_fileset QUARTUS_SYNTH QUARTUS_SYNTH "" "" set_fileset_property QUARTUS_SYNTH TOP_LEVEL tone_generator_hw set_fileset_property QUARTUS_SYNTH ENABLE_RELATIVE_INCLUDE_PATHS false set_fileset_property QUARTUS_SYNTH ENABLE_FILE_OVERWRITE_MODE false add_fileset_file tone_generator_hw.vhd VHDL PATH ../vhdl/tone_generator_hw.vhd TOP_LEVEL_FILE add_fileset_file tone_generator.vhd VHDL PATH ../vhdl/tone_generator.vhd add_fileset_file nco.vhd VHDL PATH ../../synthesis/nco.vhd add_fileset_file cordic.vhd VHDL PATH ../../synthesis/cordic.vhd add_fileset_file reset_synchronizer.vhd VHDL PATH ../../synthesis/reset_synchronizer.vhd add_fileset_file synchronizer.vhd VHDL PATH ../../synthesis/synchronizer.vhd add_fileset SIM_VHDL SIM_VHDL "" "" set_fileset_property SIM_VHDL TOP_LEVEL tone_generator_hw set_fileset_property SIM_VHDL ENABLE_RELATIVE_INCLUDE_PATHS false set_fileset_property SIM_VHDL ENABLE_FILE_OVERWRITE_MODE false add_fileset_file tone_generator_tb.vhd VHDL PATH ../vhdl/tb/tone_generator_tb.vhd add_fileset_file tone_generator.vhd VHDL PATH ../vhdl/tone_generator.vhd add_fileset_file tone_generator_hw.vhd VHDL PATH ../vhdl/tone_generator_hw.vhd # # parameters # add_parameter QUEUE_LENGTH POSITIVE 8 "Number of tones that can be queued" set_parameter_property QUEUE_LENGTH DEFAULT_VALUE 8 set_parameter_property QUEUE_LENGTH DISPLAY_NAME "Queue length" set_parameter_property QUEUE_LENGTH TYPE POSITIVE set_parameter_property QUEUE_LENGTH UNITS None set_parameter_property QUEUE_LENGTH ALLOWED_RANGES 1:2147483647 set_parameter_property QUEUE_LENGTH DESCRIPTION "Number of tones that can be queued" set_parameter_property QUEUE_LENGTH HDL_PARAMETER true add_parameter ADDR_WIDTH POSITIVE 2 "Minimum 2 bits" set_parameter_property ADDR_WIDTH DEFAULT_VALUE 2 set_parameter_property ADDR_WIDTH DISPLAY_NAME "Address bus width" set_parameter_property ADDR_WIDTH TYPE POSITIVE set_parameter_property ADDR_WIDTH UNITS None set_parameter_property ADDR_WIDTH ALLOWED_RANGES 1:2147483647 set_parameter_property ADDR_WIDTH DESCRIPTION "Minimum 2 bits" set_parameter_property ADDR_WIDTH HDL_PARAMETER true add_parameter DATA_WIDTH POSITIVE 32 "Minimum 8 bits" set_parameter_property DATA_WIDTH DEFAULT_VALUE 32 set_parameter_property DATA_WIDTH DISPLAY_NAME "Data bus width" set_parameter_property DATA_WIDTH TYPE POSITIVE set_parameter_property DATA_WIDTH UNITS None set_parameter_property DATA_WIDTH ALLOWED_RANGES 1:2147483647 set_parameter_property DATA_WIDTH DESCRIPTION "Minimum 8 bits" set_parameter_property DATA_WIDTH HDL_PARAMETER true # # display items # # # connection point reset # add_interface reset reset end set_interface_property reset associatedClock clock_sink set_interface_property reset synchronousEdges DEASSERT set_interface_property reset ENABLED true set_interface_property reset EXPORT_OF "" set_interface_property reset PORT_NAME_MAP "" set_interface_property reset CMSIS_SVD_VARIABLES "" set_interface_property reset SVD_ADDRESS_GROUP "" add_interface_port reset reset reset Input 1 # # connection point avalon_slave_0 # add_interface avalon_slave_0 avalon end set_interface_property avalon_slave_0 addressUnits WORDS set_interface_property avalon_slave_0 associatedClock clock_sink set_interface_property avalon_slave_0 associatedReset reset set_interface_property avalon_slave_0 bitsPerSymbol 8 set_interface_property avalon_slave_0 burstOnBurstBoundariesOnly false set_interface_property avalon_slave_0 burstcountUnits WORDS set_interface_property avalon_slave_0 explicitAddressSpan 0 set_interface_property avalon_slave_0 holdTime 0 set_interface_property avalon_slave_0 linewrapBursts false set_interface_property avalon_slave_0 maximumPendingReadTransactions 1 set_interface_property avalon_slave_0 maximumPendingWriteTransactions 0 set_interface_property avalon_slave_0 readLatency 0 set_interface_property avalon_slave_0 readWaitTime 1 set_interface_property avalon_slave_0 setupTime 0 set_interface_property avalon_slave_0 timingUnits Cycles set_interface_property avalon_slave_0 writeWaitTime 0 set_interface_property avalon_slave_0 ENABLED true set_interface_property avalon_slave_0 EXPORT_OF "" set_interface_property avalon_slave_0 PORT_NAME_MAP "" set_interface_property avalon_slave_0 CMSIS_SVD_VARIABLES "" set_interface_property avalon_slave_0 SVD_ADDRESS_GROUP "" add_interface_port avalon_slave_0 addr address Input addr_width add_interface_port avalon_slave_0 din writedata Input data_width add_interface_port avalon_slave_0 dout readdata Output data_width add_interface_port avalon_slave_0 write write Input 1 add_interface_port avalon_slave_0 read read Input 1 add_interface_port avalon_slave_0 waitreq waitrequest Output 1 add_interface_port avalon_slave_0 readack readdatavalid Output 1 set_interface_assignment avalon_slave_0 embeddedsw.configuration.isFlash 0 set_interface_assignment avalon_slave_0 embeddedsw.configuration.isMemoryDevice 0 set_interface_assignment avalon_slave_0 embeddedsw.configuration.isNonVolatileStorage 0 set_interface_assignment avalon_slave_0 embeddedsw.configuration.isPrintableDevice 0 # # connection point clock_sink # add_interface clock_sink clock end set_interface_property clock_sink clockRate 0 set_interface_property clock_sink ENABLED true set_interface_property clock_sink EXPORT_OF "" set_interface_property clock_sink PORT_NAME_MAP "" set_interface_property clock_sink CMSIS_SVD_VARIABLES "" set_interface_property clock_sink SVD_ADDRESS_GROUP "" add_interface_port clock_sink clock clk Input 1 # # connection point samplestream # add_interface samplestream conduit end set_interface_property samplestream associatedClock clock_sink set_interface_property samplestream associatedReset "" set_interface_property samplestream ENABLED true set_interface_property samplestream EXPORT_OF "" set_interface_property samplestream PORT_NAME_MAP "" set_interface_property samplestream CMSIS_SVD_VARIABLES "" set_interface_property samplestream SVD_ADDRESS_GROUP "" add_interface_port samplestream sample_valid valid Output 1 add_interface_port samplestream sample_i i Output 16 add_interface_port samplestream sample_q q Output 16 add_interface_port samplestream sample_clk clk Input 1 # # connection point status # add_interface status conduit end set_interface_property status associatedClock clock_sink set_interface_property status associatedReset "" set_interface_property status ENABLED true set_interface_property status EXPORT_OF "" set_interface_property status PORT_NAME_MAP "" set_interface_property status CMSIS_SVD_VARIABLES "" set_interface_property status SVD_ADDRESS_GROUP "" add_interface_port status queue_empty empty Output 1 add_interface_port status queue_full full Output 1 add_interface_port status running running Output 1 bladeRF-2024.05/hdl/fpga/ip/nuand/tone_generator/tone_generator.qip000066400000000000000000000014661457144405000251420ustar00rootroot00000000000000# When generating a system, Qsys will copy this file into its synthesis output # directory. All paths below must be relative to that directory. set nuand_ip_dir [file join $::quartus(qip_path) ../../../../../../fpga/ip/nuand] # dependencies set_global_assignment -name VHDL_FILE -hdl_version VHDL_2008 [file normalize [file join $nuand_ip_dir synthesis nco.vhd]] set_global_assignment -name VHDL_FILE -hdl_version VHDL_2008 [file normalize [file join $nuand_ip_dir synthesis cordic.vhd]] # the generator itself set_global_assignment -name VHDL_FILE -hdl_version VHDL_2008 [file normalize [file join $nuand_ip_dir tone_generator vhdl tone_generator.vhd]] # the qsys wrapper set_global_assignment -name VHDL_FILE -hdl_version VHDL_2008 [file normalize [file join $nuand_ip_dir tone_generator vhdl tone_generator_hw.vhd]] bladeRF-2024.05/hdl/fpga/ip/nuand/tone_generator/vhdl/000077500000000000000000000000001457144405000223425ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/tone_generator/vhdl/tb/000077500000000000000000000000001457144405000227475ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/tone_generator/vhdl/tb/tone_generator_tb.vhd000066400000000000000000000322421457144405000271550ustar00rootroot00000000000000-- Copyright (c) 2019 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.math_real.all; library std; use std.env.all; use std.textio.all; library work; use work.util.all; use work.tone_generator_p.all; entity tone_generator_tb is generic ( SAMPLE_CLOCK_FREQ : natural := 1_920_000; SYSTEM_CLOCK_FREQ : natural := 4_000_000; TONE_FREQUENCY : natural := 1_000; WORDS_PER_MINUTE : real := 10.0 ); end entity; architecture tb_tgen of tone_generator_tb is signal clock : std_logic := '1'; signal reset : std_logic := '1'; signal inputs : tone_generator_input_t := (dphase => (others => '0'), duration => (others => '0'), valid => '0'); signal outputs : tone_generator_output_t; constant CLOCK_PERIOD : time := 1 sec / SAMPLE_CLOCK_FREQ; constant DOT : time := (60.0 sec/50.0) / WORDS_PER_MINUTE; constant DASH : time := DOT * 3; constant PAUSE : time := DOT * 3; constant SPACE : time := DOT * 7; constant TONE_PERIOD : time := 1 sec / TONE_FREQUENCY; constant TONE_PER_CLKS : natural := TONE_PERIOD / CLOCK_PERIOD; constant TONE_DPHASE : natural := integer(round(8192.0 / real(TONE_PER_CLKS))); type tone_t is record is_on : boolean; duration: time; end record; type tones_t is array(natural range <>) of tone_t; constant MESSAGE : tones_t := ( (is_on => false, duration => PAUSE), -- H (is_on => true, duration => DOT), (is_on => false, duration => DOT), (is_on => true, duration => DOT), (is_on => false, duration => DOT), (is_on => true, duration => DOT), (is_on => false, duration => DOT), (is_on => true, duration => DOT), (is_on => false, duration => PAUSE), -- E (is_on => true, duration => DOT), (is_on => false, duration => PAUSE), -- L (is_on => true, duration => DOT), (is_on => false, duration => DOT), (is_on => true, duration => DASH), (is_on => false, duration => DOT), (is_on => true, duration => DOT), (is_on => false, duration => DOT), (is_on => true, duration => DOT), (is_on => false, duration => PAUSE), -- L (is_on => true, duration => DOT), (is_on => false, duration => DOT), (is_on => true, duration => DASH), (is_on => false, duration => DOT), (is_on => true, duration => DOT), (is_on => false, duration => DOT), (is_on => true, duration => DOT), (is_on => false, duration => PAUSE), -- O (is_on => true, duration => DASH), (is_on => false, duration => DOT), (is_on => true, duration => DASH), (is_on => false, duration => DOT), (is_on => true, duration => DASH), (is_on => false, duration => PAUSE) ); begin clock <= not clock after CLOCK_PERIOD/2; U_tone_generator : entity work.tone_generator port map ( clock => clock, reset => reset, inputs => inputs, outputs => outputs ); tb : process begin -- reset reset <= '1'; nop(clock, 10); reset <= '0'; nop(clock, 10); -- send message for i in MESSAGE'range loop if MESSAGE(i).is_on then inputs.dphase <= to_signed(TONE_DPHASE, inputs.dphase'length); else inputs.dphase <= (others => '0'); end if; inputs.duration <= to_unsigned((MESSAGE(i).duration / CLOCK_PERIOD), inputs.duration'length); inputs.valid <= '1'; wait until rising_edge(clock); inputs.valid <= '0'; wait until rising_edge(clock); wait until (outputs.active = '1'); wait until (outputs.active = '0'); end loop; -- done nop(clock, 100); report "-- End of Simulation --" severity failure ; end process tb; end architecture tb_tgen; architecture tb_hw of tone_generator_tb is signal clock : std_logic := '1'; signal reset : std_logic := '1'; signal mm_addr : std_logic_vector(1 downto 0); signal mm_din : std_logic_vector(31 downto 0); signal mm_dout : std_logic_vector(31 downto 0); signal mm_write : std_logic; signal mm_read : std_logic; signal mm_waitreq : std_logic; signal mm_readack : std_logic; signal mm_queue_empty : std_logic; signal mm_queue_full : std_logic; signal mm_running : std_logic; signal sample_clk : std_logic := '1'; signal sample_i : signed(15 downto 0); signal sample_q : signed(15 downto 0); signal sample_valid : std_logic; constant CLOCK_PERIOD : time := 1 sec / SAMPLE_CLOCK_FREQ; constant DOT : time := (60.0 sec/50.0) / WORDS_PER_MINUTE; constant DASH : time := DOT * 3; constant PAUSE : time := DOT * 3; constant SPACE : time := DOT * 7; constant TONE_PERIOD : time := 1 sec / TONE_FREQUENCY; constant TONE_PER_CLKS : natural := TONE_PERIOD / CLOCK_PERIOD; constant TONE_DPHASE : natural := integer(round(8192.0 / real(TONE_PER_CLKS))); type tone_t is record is_on : boolean; duration: time; end record; type tones_t is array(natural range <>) of tone_t; constant MESSAGE : tones_t := ( (is_on => false, duration => 1024*CLOCK_PERIOD), (is_on => true, duration => 1024*CLOCK_PERIOD), (is_on => false, duration => 1024*CLOCK_PERIOD), (is_on => true, duration => 1024*CLOCK_PERIOD), (is_on => true, duration => 1024*CLOCK_PERIOD), (is_on => false, duration => 1024*CLOCK_PERIOD), (is_on => false, duration => 1024*CLOCK_PERIOD), -- H (is_on => true, duration => DOT), (is_on => false, duration => DOT), (is_on => true, duration => DOT), (is_on => false, duration => DOT), (is_on => true, duration => DOT), (is_on => false, duration => DOT), (is_on => true, duration => DOT), (is_on => false, duration => PAUSE), -- E (is_on => true, duration => DOT), (is_on => false, duration => PAUSE), -- L (is_on => true, duration => DOT), (is_on => false, duration => DOT), (is_on => true, duration => DASH), (is_on => false, duration => DOT), (is_on => true, duration => DOT), (is_on => false, duration => DOT), (is_on => true, duration => DOT), (is_on => false, duration => PAUSE), -- L (is_on => true, duration => DOT), (is_on => false, duration => DOT), (is_on => true, duration => DASH), (is_on => false, duration => DOT), (is_on => true, duration => DOT), (is_on => false, duration => DOT), (is_on => true, duration => DOT), (is_on => false, duration => PAUSE), -- O (is_on => true, duration => DASH), (is_on => false, duration => DOT), (is_on => true, duration => DASH), (is_on => false, duration => DOT), (is_on => true, duration => DASH), (is_on => false, duration => PAUSE), (is_on => false, duration => 1024*CLOCK_PERIOD) ); begin clock <= not clock after (1 sec/SYSTEM_CLOCK_FREQ)/2; sample_clk <= not sample_clk after CLOCK_PERIOD/2; U_tone_generator_hw : entity work.tone_generator_hw port map ( clock => clock, reset => reset, sample_clk => sample_clk, sample_i => sample_i, sample_q => sample_q, sample_valid => sample_valid, addr => mm_addr, din => mm_din, dout => mm_dout, write => mm_write, read => mm_read, waitreq => mm_waitreq, readack => mm_readack, queue_empty => mm_queue_empty, queue_full => mm_queue_full, running => mm_running ); tb : process variable dphase : natural; variable duration : natural; begin -- reset reset <= '1'; nop(clock, 10); reset <= '0'; nop(clock, 10); -- send message send_message : for i in MESSAGE'range loop report "loading message " & to_string(i); -- check to make sure there's room... if (mm_queue_full = '1') then report "mm_queue_full blocking message load"; wait until (mm_queue_full = '0'); end if; wait until rising_edge(clock); -- write dphase dphase := TONE_DPHASE when MESSAGE(i).is_on else 0; if (mm_waitreq = '1') then report "mm_waitreq blocking addr 1 write"; wait until (mm_waitreq = '0'); end if; mm_addr <= std_logic_vector(to_unsigned(1, mm_addr'length)); mm_din <= std_logic_vector(to_unsigned(dphase, mm_din'length)); mm_write <= '1'; wait until rising_edge(clock); mm_write <= '0'; wait until rising_edge(clock); -- write duration duration := MESSAGE(i).duration / CLOCK_PERIOD; if (mm_waitreq = '1') then report "mm_waitreq blocking addr 2 write"; wait until (mm_waitreq = '0'); end if; mm_addr <= std_logic_vector(to_unsigned(2, mm_addr'length)); mm_din <= std_logic_vector(to_unsigned(duration, mm_din'length)); mm_write <= '1'; wait until rising_edge(clock); mm_write <= '0'; wait until rising_edge(clock); -- send append command if (mm_waitreq = '1') then report "mm_waitreq blocking addr 0 write"; wait until (mm_waitreq = '0'); end if; mm_addr <= std_logic_vector(to_unsigned(0, mm_addr'length)); mm_din <= (0 => '1', others => '0'); mm_write <= '1'; wait until rising_edge(clock); mm_write <= '0'; wait until rising_edge(clock); -- read status reg for length mm_addr <= std_logic_vector(to_unsigned(0, mm_addr'length)); mm_read <= '1'; wait until rising_edge(clock) and (mm_readack = '1'); mm_read <= '0'; report "status:" & " msg=" & to_string(i) & " run=" & to_string(mm_dout(0)) & " full=" & to_string(mm_dout(1)) & " len=" & to_string(to_integer(unsigned( mm_dout(15 downto 8)))); wait until rising_edge(clock); end loop send_message; if (mm_queue_full = '1') then report "waiting for not queue_full"; wait until (mm_queue_full = '0'); end if; if (mm_queue_empty = '0') then report "waiting for queue_empty"; wait until (mm_queue_empty = '1'); end if; if (mm_running = '1') then report "waiting for not running"; wait until (mm_running = '0'); end if; -- done nop(clock, 100); report "-- End of Simulation --" severity failure; end process tb; end architecture tb_hw; bladeRF-2024.05/hdl/fpga/ip/nuand/tone_generator/vhdl/tone_generator.vhd000066400000000000000000000270161457144405000260660ustar00rootroot00000000000000-- Copyright (c) 2019 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. -- From Altera Solution ID rd05312011_49, need the following for Qsys to use VHDL 2008: -- altera vhdl_input_version vhdl_2008 library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; package tone_generator_p is type tone_generator_input_t is record dphase : signed(15 downto 0); duration : unsigned(31 downto 0); valid : std_logic; end record; type tone_generator_output_t is record re : signed(15 downto 0); im : signed(15 downto 0); valid : std_logic; active : std_logic; end record; function NULL_TONE_GENERATOR_INPUT return tone_generator_input_t; function NULL_TONE_GENERATOR_OUTPUT return tone_generator_output_t; end package tone_generator_p; package body tone_generator_p is function NULL_TONE_GENERATOR_INPUT return tone_generator_input_t is variable rv : tone_generator_input_t; begin rv.dphase := (others => '0'); rv.duration := (others => '0'); rv.valid := '0'; return rv; end function NULL_TONE_GENERATOR_INPUT; function NULL_TONE_GENERATOR_OUTPUT return tone_generator_output_t is variable rv : tone_generator_output_t; begin rv.re := (others => '0'); rv.im := (others => '0'); rv.valid := '0'; rv.active := '0'; return rv; end function NULL_TONE_GENERATOR_OUTPUT; end package body tone_generator_p; library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.math_real.all; library work; use work.nco_p.all; use work.tone_generator_p.all; entity tone_generator is port ( clock : in std_logic; reset : in std_logic; inputs : in tone_generator_input_t; outputs : out tone_generator_output_t ); end entity tone_generator; architecture arch of tone_generator is constant HOLDCOUNT : natural := 32; type fsm_t is (IDLE, WAIT_FOR_ACK, START_TONE, ACTIVE_TONE, FINISH_TONE, WAIT_FOR_ZERO, HOLD); type state_t is record state : fsm_t; is_active : boolean; nco_reset : std_logic; downcount : natural; holdcount : natural; tone_latch : tone_generator_input_t; nco_in : nco_input_t; last_i : signed(15 downto 0); last_q : signed(15 downto 0); zero_hold_i : boolean; zero_hold_q : boolean; zero_xing_i : boolean; zero_xing_q : boolean; tone_pending : boolean; end record state_t; function NULL_STATE return state_t is variable rv : state_t; begin rv.state := IDLE; rv.is_active := false; rv.nco_reset := '1'; rv.downcount := 0; rv.holdcount := 0; rv.tone_latch := NULL_TONE_GENERATOR_INPUT; rv.nco_in := (dphase => (others => '0'), valid => '0'); rv.last_i := (others => '0'); rv.last_q := (others => '0'); rv.zero_hold_i := true; rv.zero_hold_q := true; rv.zero_xing_i := false; rv.zero_xing_q := false; rv.tone_pending := false; return rv; end function NULL_STATE; function is_zero_cross(a : signed ; b : signed) return boolean is begin return (a >= 0 and b <= 0) or (a <= 0 and b >= 0); end function is_zero_cross; signal current : state_t; signal future : state_t; signal nco_out : nco_output_t; begin U_nco : entity work.nco port map ( clock => clock, reset => current.nco_reset, inputs => current.nco_in, outputs => nco_out ); outputs.re <= (others => '0') when current.zero_hold_i else nco_out.re; outputs.im <= (others => '0') when current.zero_hold_q else nco_out.im; outputs.valid <= nco_out.valid when (current.nco_reset = '0') else '0'; outputs.active <= '1' when current.is_active else '0'; -- State machinery sync_proc : process(clock, reset) begin if (reset = '1') then current <= NULL_STATE; elsif (rising_edge(clock)) then current <= future; end if; end process sync_proc; comb_proc : process(all) begin future <= current; -- Keep last sample, so we can determine if we find a zero-crossing if (nco_out.valid = '1') then future.last_i <= nco_out.re; future.last_q <= nco_out.im; future.zero_xing_i <= is_zero_cross(current.last_i, nco_out.re); future.zero_xing_q <= is_zero_cross(current.last_q, nco_out.im); end if; -- Latch valid inputs... if (inputs.valid = '1') then future.tone_latch <= inputs; future.tone_pending <= true; end if; -- Defaults: active if tone pending, nco_in valid, nco not reset future.is_active <= current.tone_pending; future.nco_in.valid <= '1'; future.nco_reset <= '0'; case (current.state) is when IDLE => -- Zero all outputs, reset the NCO while idle future.zero_hold_i <= true; future.zero_hold_q <= true; future.nco_reset <= '1'; future.nco_in.valid <= '0'; -- We have a tone to do, folks if (current.tone_pending) then future.nco_reset <= '0'; future.state <= WAIT_FOR_ACK; end if; when WAIT_FOR_ACK => -- Wait until valid is deasserted if (inputs.valid = '0') then future.state <= START_TONE; end if; when START_TONE => -- Set up NCO, counters, etc -- We are active future.is_active <= true; -- Set up our downcounts future.downcount <= to_integer(current.tone_latch.duration); future.holdcount <= HOLDCOUNT; -- Configure the NCO future.nco_in.dphase <= current.tone_latch.dphase; -- Update state future.tone_pending <= false; future.state <= ACTIVE_TONE; when ACTIVE_TONE => -- Tone is coming out -- We are active future.is_active <= true; -- Wait for a zero-crossing to un-zero NCO output if (current.nco_in.dphase /= 0) then if (current.zero_hold_i and current.zero_xing_i) then future.zero_hold_i <= false; end if; if (current.zero_hold_q and current.zero_xing_q) then future.zero_hold_q <= false; end if; else future.zero_hold_i <= true; future.zero_hold_q <= true; end if; -- Countdown if (current.downcount > 0) then future.downcount <= current.downcount - 1; else future.state <= FINISH_TONE; end if; when FINISH_TONE => -- Determine next action -- Decrement hold count if (current.holdcount > 0) then future.holdcount <= current.holdcount - 1; end if; -- We have a few situations to handle: -- -- current dphase next dphase next state -- 1. 0 0 START_TONE -- 2. 0 != 0 START_TONE -- 3. 0 none IDLE -- 4. not 0 0 Zero-xing -> START_TONE -- 5. not 0 != 0 START_TONE -- 6. not 0 none Zero-xing -> IDLE if (current.nco_in.dphase /= 0) then -- Cases 4, 5, and 6: go to another state future.state <= WAIT_FOR_ZERO; else if (current.tone_pending) then -- Cases 1 and 2 future.state <= WAIT_FOR_ACK; else -- Case 3 future.state <= HOLD; end if; end if; when WAIT_FOR_ZERO => -- Wait for zero crossing -- Decrement hold count if (current.holdcount > 0) then future.holdcount <= current.holdcount - 1; end if; -- Snatch the next zero-crossing if (not current.zero_hold_i and current.zero_xing_i) then future.zero_hold_i <= true; end if; if (not current.zero_hold_q and current.zero_xing_q) then future.zero_hold_q <= true; end if; -- We are going to handle these cases here: -- -- current dphase next dphase next state -- 4. not 0 0 Zero-xing -> START_TONE -- 5. not 0 != 0 START_TONE -- 6. not 0 none Zero-xing -> IDLE if (current.tone_pending and current.tone_latch.dphase /= 0) then -- Case 5 future.state <= WAIT_FOR_ACK; elsif (current.zero_hold_i and current.zero_hold_q) then if (current.tone_pending) then -- Case 4 future.state <= WAIT_FOR_ACK; else -- Case 6 future.state <= HOLD; end if; end if; when HOLD => -- Keep the NCO spinning to avoid discontinuities -- Decrement hold count if (current.holdcount > 0) then future.holdcount <= current.holdcount - 1; else future.state <= IDLE; end if; -- We have a tone to do, folks if (current.tone_pending) then future.state <= WAIT_FOR_ACK; end if; end case; end process comb_proc; end architecture arch; bladeRF-2024.05/hdl/fpga/ip/nuand/tone_generator/vhdl/tone_generator_hw.vhd000066400000000000000000000367751457144405000266000ustar00rootroot00000000000000-- Copyright (c) 2019 Nuand LLC -- -- LICENSE TBD -- From Altera Solution ID rd05312011_49, need the following for Qsys to use VHDL 2008: -- altera vhdl_input_version vhdl_2008 library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; library work; use work.tone_generator_p.all; -- Register map: -- 0 control/status -- control (write): -- bit 0: append -- bit 1: clear -- status (read): -- bit 0: running -- bit 1: queue full -- bits 8-15: number of items in the queue (unsigned) -- others: reserved/undef -- 1 dphase - phase rotation per clock cycle (signed) -- one full rotation is 8192, and this is signed, so: -- dphase = 4096 / (f_clock / f_tone) -- 2 duration - in clocks (unsigned) entity tone_generator_hw is generic ( QUEUE_LENGTH : positive := 8; ADDR_WIDTH : positive := 2; DATA_WIDTH : positive := 32 ); port ( -- Control signals clock : in std_logic; reset : in std_logic; -- Samples sample_clk : in std_logic; sample_i : out signed(15 downto 0); sample_q : out signed(15 downto 0); sample_valid : out std_logic; -- Memory mapped interface addr : in std_logic_vector(ADDR_WIDTH-1 downto 0); din : in std_logic_vector(DATA_WIDTH-1 downto 0); dout : out std_logic_vector(DATA_WIDTH-1 downto 0); write : in std_logic; read : in std_logic; waitreq : out std_logic; readack : out std_logic; -- Status indicators queue_empty : out std_logic; queue_full : out std_logic; running : out std_logic ); end entity tone_generator_hw; architecture arch of tone_generator_hw is -------------------------------------------------------------------------------- -- Types -------------------------------------------------------------------------------- constant NUM_REGS : natural := 3; type tone_entries_t is array(natural range <>) of tone_generator_input_t; type tone_queue_t is record entries : tone_entries_t(0 to QUEUE_LENGTH-1); front : natural range 0 to QUEUE_LENGTH-1; -- next pop rear : natural range 0 to QUEUE_LENGTH-1; -- last push count : natural range 0 to QUEUE_LENGTH; -- items in queue end record tone_queue_t; type fsm_t is (IDLE, CTRL_DISPATCH, CTRL_CLEAR, QUEUE_CLEAR, QUEUE_PUSH, QUEUE_POP, TONE_GENERATE, WAIT_FOR_ACTIVE); type state_t is record state : fsm_t; queue : tone_queue_t; tone : tone_generator_input_t; op_pending : boolean; end record state_t; type register_t is array(natural range din'range) of std_logic; type registers_t is array(natural range 0 to NUM_REGS-1) of register_t; type control_reg_t is record append : boolean; clear : boolean; end record control_reg_t; -------------------------------------------------------------------------------- -- Signals -------------------------------------------------------------------------------- signal current : state_t; signal future : state_t; signal current_regs : registers_t; signal future_regs : registers_t; signal pend_ctrl : boolean; signal uaddr : natural range 0 to 2**addr'high; signal tgen_in : tone_generator_input_t; signal tgen_out : tone_generator_output_t; signal tgen_reset : std_logic; signal tgen_out_a : std_logic; signal tgen_out_v : std_logic; signal q_full_i : std_logic; signal q_empty_i : std_logic; signal running_i : std_logic; -------------------------------------------------------------------------------- -- Subprograms -------------------------------------------------------------------------------- function to_slv (val : register_t) return std_logic_vector is begin return std_logic_vector(unsigned(val)); end function to_slv; function to_sl (val : boolean) return std_logic is begin if (val) then return '1'; else return '0'; end if; end function to_sl; function to_reg (val : std_logic_vector) return register_t is begin return register_t(val); end function to_reg; function next_index (idx : natural) return natural is begin return (idx + 1) mod QUEUE_LENGTH; end function next_index; procedure queue_push (signal q_in : in tone_queue_t; signal q_out : out tone_queue_t; constant tone : in tone_generator_input_t; success : out boolean) is variable next_i : natural; variable ql : natural; begin q_out <= q_in; next_i := next_index(q_in.rear); ql := q_in.count; if (q_in.count >= QUEUE_LENGTH) then -- queue is full success := false; else -- add the entry at the NEXT rear index q_out.entries(next_i) <= tone; -- update indexes and counts ql := q_in.count + 1; q_out.count <= ql; q_out.rear <= next_i; success := true; end if; --report "queue_push:" & -- " prev_rear=" & to_string(q_in.rear) & -- " this_rear=" & to_string(next_i) & -- " prev_count=" & to_string(q_in.count) & -- " this_count=" & to_string(ql) & -- " success=" & to_string(success); end procedure queue_push; procedure queue_pop (signal q_in : in tone_queue_t; signal q_out : out tone_queue_t; signal tone : out tone_generator_input_t; success : out boolean) is variable next_i : natural; variable ql : natural; begin q_out <= q_in; next_i := next_index(q_in.front); ql := q_in.count; if (q_in.count = 0) then -- queue is empty success := false; else -- pop the entry at the CURRENT front index tone <= q_in.entries(q_in.front); -- update indexes and counts ql := q_in.count - 1; q_out.count <= ql; q_out.front <= next_i; success := true; end if; --report "queue_pop:" & -- " prev_front=" & to_string(q_in.front) & -- " this_front=" & to_string(next_i) & -- " prev_count=" & to_string(q_in.count) & -- " this_count=" & to_string(ql) & -- " success=" & to_string(success); end procedure queue_pop; function unpack_control (reg : register_t) return control_reg_t is variable rv : control_reg_t; begin rv.append := (reg(0) = '1'); rv.clear := (reg(1) = '1'); return rv; end function unpack_control; function unpack_control (reg : std_logic_vector) return control_reg_t is begin return unpack_control(to_reg(reg)); end function unpack_control; function NULL_REGISTERS return registers_t is begin return (others => (others => '0')); end function NULL_REGISTERS; function NULL_TONE_QUEUE return tone_queue_t is variable rv : tone_queue_t; begin rv.entries := (others => NULL_TONE_GENERATOR_INPUT); rv.front := 0; rv.rear := QUEUE_LENGTH-1; return rv; end function NULL_TONE_QUEUE; function NULL_STATE return state_t is variable rv : state_t; begin rv.state := IDLE; rv.queue := NULL_TONE_QUEUE; rv.tone := NULL_TONE_GENERATOR_INPUT; rv.op_pending := false; return rv; end function NULL_STATE; begin -- Output mappings sample_i <= tgen_out.re; sample_q <= tgen_out.im; sample_valid <= tgen_out.valid; queue_full <= q_full_i; queue_empty <= q_empty_i; running <= running_i; -- For convenience uaddr <= to_integer(unsigned(addr)); -- Status indicators q_empty_i <= '1' when (current.queue.count = 0) else '0'; q_full_i <= '1' when (current.queue.count >= QUEUE_LENGTH) else '0'; running_i <= '1' when (tgen_out_a = '1' or tgen_out_v = '1') else '0'; -- Tone generator interface (with clock domain crossing assist) -- reset, tgen_in: system clock -> sample clock -- tgen_out: sample clock -> system clock U_reset_sync : entity work.reset_synchronizer generic map ( INPUT_LEVEL => '1', OUTPUT_LEVEL => '1' ) port map ( clock => sample_clk, async => reset, sync => tgen_reset ); U_tgen_in_valid_sync : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => tgen_reset, clock => sample_clk, async => current.tone.valid, sync => tgen_in.valid ); generate_sync_tgen_in_dphase : for i in tgen_in.dphase'range generate U_tgen_in_dphase : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => tgen_reset, clock => sample_clk, async => current.tone.dphase(i), sync => tgen_in.dphase(i) ); end generate; generate_sync_tgen_in_duration : for i in tgen_in.duration'range generate U_tgen_in_duration : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => tgen_reset, clock => sample_clk, async => current.tone.duration(i), sync => tgen_in.duration(i) ); end generate; U_tgen_out_valid_sync : entity work.synchronizer port map ( reset => reset, clock => clock, async => tgen_out.valid, sync => tgen_out_v ); U_tgen_out_active_sync : entity work.synchronizer port map ( reset => reset, clock => clock, async => tgen_out.active, sync => tgen_out_a ); U_tone_generator : entity work.tone_generator port map ( clock => sample_clk, reset => tgen_reset, inputs => tgen_in, outputs => tgen_out ); -- Avalon-MM interface waitreq <= '1' when (current.op_pending or pend_ctrl) else '0'; mm_read : process(clock, reset) begin if (reset = '1') then readack <= '0'; dout <= (others => '0'); elsif (rising_edge(clock)) then -- hold off ack until there's no ops pending (race condition) readack <= to_sl(read = '1' and not current.op_pending); if (uaddr = 0) then -- count of items in queue dout <= (others => '0'); dout(0) <= running_i; dout(1) <= q_full_i; dout(15 downto 8) <= std_logic_vector(to_unsigned(current.queue.count, 8)); else dout <= to_slv(current_regs(uaddr)); end if; end if; end process mm_read; mm_write : process(clock, reset) begin if (reset = '1') then future_regs <= (others => (others => '0')); pend_ctrl <= false; elsif (rising_edge(clock)) then if (current.op_pending) then -- our previous pend_ctrl has been acknowledged pend_ctrl <= false; end if; if (write = '1' and uaddr < NUM_REGS) then future_regs(uaddr) <= to_reg(din); if (uaddr = 0) then -- send a pend_ctrl signal for the state machine to pick up pend_ctrl <= true; end if; end if; end if; end process mm_write; -- State machinery sync_proc : process(clock, reset) begin if (reset = '1') then current <= NULL_STATE; current_regs <= NULL_REGISTERS; elsif (rising_edge(clock)) then current <= future; current_regs <= future_regs; end if; end process sync_proc; comb_proc : process(all) variable ctrl_reg : control_reg_t; variable tone_val : tone_generator_input_t := NULL_TONE_GENERATOR_INPUT; variable success : boolean := true; begin future <= current; future.op_pending <= current.op_pending or pend_ctrl; future.tone.valid <= '0'; tone_val := NULL_TONE_GENERATOR_INPUT; case (current.state) is when IDLE => if (current.op_pending) then -- we have a control message to deal with future.state <= CTRL_DISPATCH; end if; if (current.queue.count > 0) then -- there is work to do if (tgen_out_a = '0') then -- let's do it! future.state <= QUEUE_POP; end if; end if; when CTRL_DISPATCH => ctrl_reg := unpack_control(current_regs(0)); -- default future.state <= CTRL_CLEAR; -- append if (ctrl_reg.append) then future.state <= QUEUE_PUSH; end if; -- clear (overrides append) if (ctrl_reg.clear) then future.state <= QUEUE_CLEAR; end if; when CTRL_CLEAR => future.op_pending <= false; future.state <= IDLE; when QUEUE_CLEAR => future.queue <= NULL_TONE_QUEUE; future.state <= CTRL_CLEAR; when QUEUE_PUSH => tone_val.dphase := signed(current_regs(1)(tone_val.dphase'range)); tone_val.duration := unsigned(current_regs(2)(tone_val.duration'range)); queue_push(current.queue, future.queue, tone_val, success); assert success report "QUEUE_PUSH failed" severity failure; future.state <= CTRL_CLEAR; when QUEUE_POP => queue_pop(current.queue, future.queue, future.tone, success); assert success report "QUEUE_POP failed" severity failure; future.state <= TONE_GENERATE; if (not success) then future.state <= IDLE; end if; when TONE_GENERATE => future.tone.valid <= '1'; future.state <= WAIT_FOR_ACTIVE; when WAIT_FOR_ACTIVE => future.tone.valid <= '1'; if (tgen_out_a = '1') then future.tone.valid <= '0'; future.state <= IDLE; end if; end case; end process comb_proc; end architecture arch; bladeRF-2024.05/hdl/fpga/ip/nuand/trigger/000077500000000000000000000000001457144405000200355ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/trigger/tb/000077500000000000000000000000001457144405000204425ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/trigger/tb/trigger_tb.vhd000066400000000000000000000022771457144405000233050ustar00rootroot00000000000000library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; use ieee.math_real.all ; entity trigger_test is end entity; architecture arch of trigger_test is constant CLOCK_FREQUENCY : REAL := 40.0e6; constant CLOCK_PERIOD : time := 1.0 / CLOCK_FREQUENCY*1 sec; constant CLOCK_HALF_PERIOD : time := CLOCK_PERIOD / 2.0; signal clk : std_logic := '1'; signal arm : std_logic := '0'; signal trig : std_logic := '1'; signal sig : std_logic := '0'; signal sigout : std_logic := '0'; begin clk <= not clk after CLOCK_HALF_PERIOD; sig <= clk; trigger_dut : entity work.trigger generic map ( DEFAULT_OUTPUT => '0' ) port map ( armed => arm, trigger_in => trig, signal_in => sig, signal_out => sigout ); tb : process begin wait for 100ns; arm <= '1'; wait for 100ns; trig <= '0'; wait for 100ns; arm <= '0'; wait for 100ns; trig <= '1'; end process; end architecture; bladeRF-2024.05/hdl/fpga/ip/nuand/trigger/trigger.vhd000066400000000000000000000012701457144405000222030ustar00rootroot00000000000000library ieee ; use ieee.std_logic_1164.all ; entity trigger is generic ( DEFAULT_OUTPUT : std_logic := '0' ); port ( armed : in std_logic; fired : in std_logic; master : in std_logic; trigger_in : in std_logic; signal_in : in std_logic; trigger_out : out std_logic; signal_out : out std_logic ); end entity; architecture async of trigger is signal triggered : std_logic := '0'; begin triggered <= not armed or not trigger_in; signal_out <= signal_in when triggered else DEFAULT_OUTPUT; trigger_out <= not fired when master else 'Z'; end architecture; bladeRF-2024.05/hdl/fpga/ip/nuand/vctcxo_tamer/000077500000000000000000000000001457144405000210705ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/vctcxo_tamer/modelsim/000077500000000000000000000000001457144405000227015ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/vctcxo_tamer/modelsim/.gitignore000066400000000000000000000000361457144405000246700ustar00rootroot00000000000000work/ nuand/ *.wlf transcript bladeRF-2024.05/hdl/fpga/ip/nuand/vctcxo_tamer/modelsim/tb.do000066400000000000000000000045121457144405000236340ustar00rootroot00000000000000set vcom_lib nuand set vcom_opts {-2008} vlib ${vcom_lib} # Support vcom {*}$vcom_opts -work ${vcom_lib} ../../synthesis/synchronizer.vhd vcom {*}$vcom_opts -work ${vcom_lib} ../../synthesis/handshake.vhd vcom {*}$vcom_opts -work ${vcom_lib} ../../synthesis/edge_detector.vhd vcom {*}$vcom_opts -work ${vcom_lib} ../../synthesis/reset_synchronizer.vhd # UUT vcom {*}$vcom_opts -work ${vcom_lib} ../vhdl/pps_counter.vhd vcom {*}$vcom_opts -work ${vcom_lib} ../vhdl/vctcxo_tamer.vhd # Testbench vcom {*}$vcom_opts -work ${vcom_lib} ../vhdl/tb/asvtx12a384m_model.vhd vcom {*}$vcom_opts -work ${vcom_lib} ../vhdl/tb/dac161s055_model.vhd vcom {*}$vcom_opts -work ${vcom_lib} ../vhdl/tb/mm_driver.vhd vcom {*}$vcom_opts -work ${vcom_lib} ../vhdl/tb/vctcxo_tamer_tb.vhd vsim ${vcom_lib}.vctcxo_tamer_tb #vsim ${vcom_lib}.dacxo_tb #log -r * # Default radix radix -hexadecimal # Change radixes for a select few signals radix signal sim:/vctcxo_tamer_tb/uut/pps_1s.count decimal radix signal sim:/vctcxo_tamer_tb/uut/pps_1s.target decimal radix signal sim:/vctcxo_tamer_tb/uut/pps_1s.error decimal radix signal sim:/vctcxo_tamer_tb/uut/pps_1s.error_mm_hold decimal radix signal sim:/vctcxo_tamer_tb/uut/pps_10s.count decimal radix signal sim:/vctcxo_tamer_tb/uut/pps_10s.target decimal radix signal sim:/vctcxo_tamer_tb/uut/pps_10s.error decimal radix signal sim:/vctcxo_tamer_tb/uut/pps_10s.error_mm_hold decimal radix signal sim:/vctcxo_tamer_tb/uut/pps_100s.count decimal radix signal sim:/vctcxo_tamer_tb/uut/pps_100s.target decimal radix signal sim:/vctcxo_tamer_tb/uut/pps_100s.error decimal radix signal sim:/vctcxo_tamer_tb/uut/pps_100s.error_mm_hold decimal radix signal sim:/vctcxo_tamer_tb/driver/current.pps_1s_count decimal radix signal sim:/vctcxo_tamer_tb/driver/current.pps_10s_count decimal radix signal sim:/vctcxo_tamer_tb/driver/current.pps_100s_count decimal radix signal sim:/vctcxo_tamer_tb/driver/current.holdoff_count decimal # Add signals to waveform #add wave sim:/vctcxo_tamer_tb/uut/* add wave sim:/vctcxo_tamer_tb/uut/pps_1s* add wave sim:/vctcxo_tamer_tb/uut/pps_10s* add wave sim:/vctcxo_tamer_tb/uut/pps_100s* #add wave sim:/vctcxo_tamer_tb/uut/int_req_proc/* add wave sim:/vctcxo_tamer_tb/driver/* add wave sim:/vctcxo_tamer_tb/dac/* add wave sim:/vctcxo_tamer_tb/vctcxo/* add wave sim:/vctcxo_tamer_tb/* run 10 ms #run 500 ms wave zoomfull bladeRF-2024.05/hdl/fpga/ip/nuand/vctcxo_tamer/qsys/000077500000000000000000000000001457144405000220675ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/vctcxo_tamer/qsys/vctcxo_tamer_hw.tcl000066400000000000000000000127341457144405000257760ustar00rootroot00000000000000# TCL File Generated by Component Editor 15.0 # Tue Sep 29 16:41:23 EDT 2015 # DO NOT MODIFY # # vctcxo_tamer "vctcxo_tamer" v1.0 # Nuand, LLC 2015.09.29.16:41:23 # VCTCXO Calibration # # # request TCL package from ACDS 15.0 # package require -exact qsys 15.0 # # module vctcxo_tamer # set_module_property DESCRIPTION "VCTCXO Calibration" set_module_property NAME vctcxo_tamer set_module_property VERSION 1.0 set_module_property INTERNAL false set_module_property OPAQUE_ADDRESS_MAP true set_module_property GROUP Nuand set_module_property AUTHOR "Nuand, LLC" set_module_property DISPLAY_NAME vctcxo_tamer set_module_property INSTANTIATE_IN_SYSTEM_MODULE true set_module_property EDITABLE true set_module_property REPORT_TO_TALKBACK false set_module_property ALLOW_GREYBOX_GENERATION false set_module_property REPORT_HIERARCHY false # # file sets # add_fileset QUARTUS_SYNTH QUARTUS_SYNTH "" "" set_fileset_property QUARTUS_SYNTH TOP_LEVEL vctcxo_tamer set_fileset_property QUARTUS_SYNTH ENABLE_RELATIVE_INCLUDE_PATHS false set_fileset_property QUARTUS_SYNTH ENABLE_FILE_OVERWRITE_MODE false add_fileset_file vctcxo_tamer.qip OTHER PATH ../vctcxo_tamer.qip # # parameters # # # display items # # # connection point reset_sink # add_interface reset_sink reset end set_interface_property reset_sink associatedClock clock_sink set_interface_property reset_sink synchronousEdges DEASSERT set_interface_property reset_sink ENABLED true set_interface_property reset_sink EXPORT_OF "" set_interface_property reset_sink PORT_NAME_MAP "" set_interface_property reset_sink CMSIS_SVD_VARIABLES "" set_interface_property reset_sink SVD_ADDRESS_GROUP "" add_interface_port reset_sink mm_reset reset Input 1 # # connection point clock_sink # add_interface clock_sink clock end set_interface_property clock_sink clockRate 80000000 set_interface_property clock_sink ENABLED true set_interface_property clock_sink EXPORT_OF "" set_interface_property clock_sink PORT_NAME_MAP "" set_interface_property clock_sink CMSIS_SVD_VARIABLES "" set_interface_property clock_sink SVD_ADDRESS_GROUP "" add_interface_port clock_sink mm_clock clk Input 1 # # connection point conduit_end # add_interface conduit_end conduit end set_interface_property conduit_end associatedClock clock_sink set_interface_property conduit_end associatedReset reset_sink set_interface_property conduit_end ENABLED true set_interface_property conduit_end EXPORT_OF "" set_interface_property conduit_end PORT_NAME_MAP "" set_interface_property conduit_end CMSIS_SVD_VARIABLES "" set_interface_property conduit_end SVD_ADDRESS_GROUP "" add_interface_port conduit_end tune_ref tune_ref Input 1 add_interface_port conduit_end vctcxo_clock vctcxo_clock Input 1 # # connection point avalon_slave_0 # add_interface avalon_slave_0 avalon end set_interface_property avalon_slave_0 addressUnits SYMBOLS set_interface_property avalon_slave_0 associatedClock clock_sink set_interface_property avalon_slave_0 associatedReset reset_sink set_interface_property avalon_slave_0 bitsPerSymbol 8 set_interface_property avalon_slave_0 burstOnBurstBoundariesOnly false set_interface_property avalon_slave_0 burstcountUnits SYMBOLS set_interface_property avalon_slave_0 explicitAddressSpan 0 set_interface_property avalon_slave_0 holdTime 0 set_interface_property avalon_slave_0 linewrapBursts false set_interface_property avalon_slave_0 maximumPendingReadTransactions 1 set_interface_property avalon_slave_0 maximumPendingWriteTransactions 0 set_interface_property avalon_slave_0 readLatency 0 set_interface_property avalon_slave_0 readWaitTime 1 set_interface_property avalon_slave_0 setupTime 0 set_interface_property avalon_slave_0 timingUnits Cycles set_interface_property avalon_slave_0 writeWaitTime 0 set_interface_property avalon_slave_0 ENABLED true set_interface_property avalon_slave_0 EXPORT_OF "" set_interface_property avalon_slave_0 PORT_NAME_MAP "" set_interface_property avalon_slave_0 CMSIS_SVD_VARIABLES "" set_interface_property avalon_slave_0 SVD_ADDRESS_GROUP "" add_interface_port avalon_slave_0 mm_addr address Input 8 add_interface_port avalon_slave_0 mm_wr_data writedata Input 8 add_interface_port avalon_slave_0 mm_rd_data readdata Output 8 add_interface_port avalon_slave_0 mm_rd_datav readdatavalid Output 1 add_interface_port avalon_slave_0 mm_wait_req waitrequest Output 1 add_interface_port avalon_slave_0 mm_rd_req read Input 1 add_interface_port avalon_slave_0 mm_wr_req write Input 1 set_interface_assignment avalon_slave_0 embeddedsw.configuration.isFlash 0 set_interface_assignment avalon_slave_0 embeddedsw.configuration.isMemoryDevice 0 set_interface_assignment avalon_slave_0 embeddedsw.configuration.isNonVolatileStorage 0 set_interface_assignment avalon_slave_0 embeddedsw.configuration.isPrintableDevice 0 # # connection point interrupt_sender # add_interface interrupt_sender interrupt end set_interface_property interrupt_sender associatedAddressablePoint avalon_slave_0 set_interface_property interrupt_sender associatedClock clock_sink set_interface_property interrupt_sender associatedReset reset_sink set_interface_property interrupt_sender bridgedReceiverOffset 0 set_interface_property interrupt_sender bridgesToReceiver "" set_interface_property interrupt_sender ENABLED true set_interface_property interrupt_sender EXPORT_OF "" set_interface_property interrupt_sender PORT_NAME_MAP "" set_interface_property interrupt_sender CMSIS_SVD_VARIABLES "" set_interface_property interrupt_sender SVD_ADDRESS_GROUP "" add_interface_port interrupt_sender mm_irq irq Output 1 bladeRF-2024.05/hdl/fpga/ip/nuand/vctcxo_tamer/vctcxo_tamer.qip000066400000000000000000000020101457144405000242720ustar00rootroot00000000000000# When generating a system, Qsys will copy this file into its synthesis output # directory. All paths below must be relative to that directory. set nuand_ip_dir [file join $::quartus(qip_path) ../../../../../../fpga/ip/nuand] set_global_assignment -name VHDL_FILE -hdl_version VHDL_2008 [file normalize [file join $nuand_ip_dir vctcxo_tamer/vhdl/vctcxo_tamer.vhd]] set_global_assignment -name VHDL_FILE -hdl_version VHDL_2008 [file normalize [file join $nuand_ip_dir vctcxo_tamer/vhdl/pps_counter.vhd]] set_global_assignment -name VHDL_FILE -hdl_version VHDL_2008 [file normalize [file join $nuand_ip_dir synthesis/handshake.vhd]] set_global_assignment -name VHDL_FILE -hdl_version VHDL_2008 [file normalize [file join $nuand_ip_dir synthesis/synchronizer.vhd]] set_global_assignment -name VHDL_FILE -hdl_version VHDL_2008 [file normalize [file join $nuand_ip_dir synthesis/reset_synchronizer.vhd]] set_global_assignment -name VHDL_FILE -hdl_version VHDL_2008 [file normalize [file join $nuand_ip_dir synthesis/edge_detector.vhd]] bladeRF-2024.05/hdl/fpga/ip/nuand/vctcxo_tamer/vhdl/000077500000000000000000000000001457144405000220255ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/vctcxo_tamer/vhdl/pps_counter.vhd000066400000000000000000000165471457144405000251060ustar00rootroot00000000000000-- From Altera Solution ID rd05312011_49, need the following for Qsys to use VHDL 2008: -- altera vhdl_input_version vhdl_2008 -- Copyright (c) 2015 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; -- ----------------------------------------------------------------------------- -- Entity: pps_counter -- Standard: VHDL-2008 -- Description: Counts number of VCTCXO clock cycles that have occurred between -- the specified number of 1PPS pulses. The count is output -- in the system clock domain along with a valid signal. -- ----------------------------------------------------------------------------- entity pps_counter is generic( COUNT_WIDTH : positive := 64; PPS_PULSES : positive range 1 to 1023 ); port( -- System-synchronous signals sys_clock : in std_logic; sys_reset : in std_logic; sys_count : out signed(COUNT_WIDTH-1 downto 0); sys_count_v : out std_logic; -- Measurement signals vctcxo_clock : in std_logic; vctcxo_reset : in std_logic; vctcxo_pps : in std_logic ); end entity; architecture arch of pps_counter is -- FSM States type fsm_t is ( IDLE, INCREMENT, HANDSHAKE_REQ ); -- State of internal signals type state_t is record state : fsm_t; pps_count : natural range 0 to 1023; handshake_d : signed(COUNT_WIDTH-1 downto 0); handshake_dv : std_logic; end record; constant reset_value : state_t := ( state => IDLE, pps_count => 0, handshake_d => (others => '-'), handshake_dv => '0' ); signal current : state_t; signal future : state_t; -- System clock domain signal sys_hs_req : std_logic := '0'; signal sys_hs_ack : std_logic := '0'; -- VCTCXO clock domain signal vctcxo_reset_hold : std_logic := '1'; signal vctcxo_hs_ack : std_logic := '0'; begin -- Counter reset control process. When the counter is reset, it may have -- been because of a trim DAC retune. Need to keep the counter FSM in reset -- for a period of time to allow the trim DAC to settle into its new value. -- A retune takes about 800 us for a full swing transition. Using the VCTCXO -- clock here because it's slower (easier to meet timing, fewer counter -- bits), and the change in precision during a retune doesn't matter here. reset_proc : process( vctcxo_clock, vctcxo_reset ) -- Number of VCTCXO clock cycles before releasing the counter reset. -- A 15-bit counter starting at 0x7FFF will take ~850 us at 38.4 MHz. variable rst_cnt_v : unsigned(14 downto 0) := (others => '1'); begin if( vctcxo_reset = '1' ) then rst_cnt_v := (others => '1'); vctcxo_reset_hold <= '1'; elsif( rising_edge( vctcxo_clock ) ) then if( rst_cnt_v /= 0 ) then rst_cnt_v := rst_cnt_v - 1; vctcxo_reset_hold <= '1'; else vctcxo_reset_hold <= '0'; end if; end if; end process; sync_proc : process( vctcxo_clock, vctcxo_reset_hold ) begin if( vctcxo_reset_hold = '1' ) then current <= reset_value; elsif( rising_edge(vctcxo_clock) ) then current <= future; end if; end process; comb_proc : process( all ) begin -- Next state defaults future <= current; future.handshake_dv <= '0'; case( current.state ) is when IDLE => future.handshake_d <= (others => '0'); future.pps_count <= 0; if( vctcxo_pps = '1' ) then future.state <= INCREMENT; end if; when INCREMENT => if( vctcxo_pps = '1' ) then future.pps_count <= current.pps_count + 1; end if; if( current.pps_count < PPS_PULSES ) then future.handshake_d <= current.handshake_d + 1; else future.handshake_dv <= '1'; future.state <= HANDSHAKE_REQ; end if; when HANDSHAKE_REQ => future.handshake_dv <= '1'; if( vctcxo_hs_ack = '1' ) then future.handshake_dv <= '0'; future.state <= IDLE; end if; end case; end process; -- Bring the handshake ack into VCTCXO clock domain U_sync_hs_ack : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => vctcxo_reset, clock => vctcxo_clock, async => sys_hs_ack, sync => vctcxo_hs_ack ); -- Bring the handshake req into System clock domain U_sync_hs_req : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => sys_reset, clock => sys_clock, async => current.handshake_dv, sync => sys_hs_req ); -- Use handshaking to get the clock count value into the system clock domain U_handshake : entity work.handshake generic map ( DATA_WIDTH => COUNT_WIDTH ) port map ( source_reset => vctcxo_reset_hold, source_clock => vctcxo_clock, source_data => std_logic_vector(current.handshake_d), dest_reset => sys_reset, dest_clock => sys_clock, signed(dest_data) => sys_count, dest_req => sys_hs_req, dest_ack => sys_hs_ack ); -- Generate a single-cycle 'count valid' pulse U_edge_detector_count_v : entity work.edge_detector generic map ( EDGE_RISE => '1', EDGE_FALL => '0' ) port map ( clock => sys_clock, reset => sys_reset, sync_in => sys_hs_ack, pulse_out => sys_count_v ); end architecture; bladeRF-2024.05/hdl/fpga/ip/nuand/vctcxo_tamer/vhdl/tb/000077500000000000000000000000001457144405000224325ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/vctcxo_tamer/vhdl/tb/asvtx12a384m_model.vhd000066400000000000000000000125231457144405000264050ustar00rootroot00000000000000-- Copyright (c) 2015 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.math_real.all; library std; use std.env.all; entity asvtx12a384m_model is port( vcon : in real; -- control voltage clock : out std_logic -- output clock ); end entity; architecture arch of asvtx12a384m_model is -- Control Voltage Tolerances constant VCON_MIN : real := 0.4; constant VCON_MAX : real := 2.4; -- Nominal output frequency constant FREQ_NOMINAL : real := 38.4e6; -- Frequency stability tolerance constant PPM_STABILITY_MIN : real := -2.0; constant PPM_STABILITY_MAX : real := 2.0; -- Frequency Tuning Tolerances constant PPM_VCON_MIN_MIN : real := -5.0; constant PPM_VCON_MIN_MAX : real := -9.5; constant PPM_VCON_MAX_MIN : real := 5.0; constant PPM_VCON_MAX_MAX : real := 9.5; -- Given a frequency, compute the half period time function half_clk_per( freq : real ) return time is begin return ( (0.5 sec) / real(freq) ); end function; -- Compute a random PPM in the given range function random_ppm( ppm_min : real; ppm_max : real ) return real is variable seed1 : positive; variable seed2 : positive; variable rand : real; begin uniform(seed1, seed2, rand); return (rand*(ppm_max-ppm_min) + ppm_min); end function; -- Given a Vcon voltage, calculate the minimum possible PPM error function vcon_ppm_min_calc( vcon : real ) return real is variable slope : real := 0.0; variable intercept : real := 0.0; variable rv : real := 0.0; begin slope := (PPM_VCON_MAX_MIN-PPM_VCON_MIN_MIN)/(VCON_MAX-VCON_MIN); intercept := PPM_VCON_MAX_MIN-(slope*VCON_MAX); if( (vcon >= VCON_MIN) and (vcon <= VCON_MAX) ) then rv := ( (slope * vcon) + intercept ); else report "vcon_ppm_min_calc: vcon out of recommended range. Returning 0." severity warning; rv := 0.0; end if; return rv; end function; -- Given a Vcon voltage, calculate the maximum possible PPM error function vcon_ppm_max_calc( vcon : real ) return real is variable slope : real := 0.0; variable intercept : real := 0.0; variable rv : real := 0.0; begin slope := (PPM_VCON_MAX_MAX-PPM_VCON_MIN_MAX)/(VCON_MAX-VCON_MIN); intercept := PPM_VCON_MAX_MAX-(slope*VCON_MAX); if( (vcon >= VCON_MIN) and (vcon <= VCON_MAX) ) then rv := ( (slope * vcon) + intercept ); else report "vcon_ppm_max_calc: vcon out of recommended range. Returning 0." severity warning; rv := 0.0; end if; return rv; end function; -- Given a Vcon PPM and a frequency stability PPM, compute the freuqency function freq_calc( vcon_ppm : real; tol_ppm : real ) return real is variable rv : real; begin -- Frequency with Vcon PPM error applied rv := ( FREQ_NOMINAL * ( 1.0 + (vcon_ppm/1.0e6) ) ); -- Apply frequency stability tolerance rv := ( rv * (1.0 + (tol_ppm/1.0e6)) ); return rv; end function; signal freq : real; signal half_per : time := 13.021 ns; signal clock_i : std_logic := '1'; begin -- i don't think the frequency is changing at all -- even though vcon is changing comb_proc : process( all ) variable tuning_ppm : real := 0.0; variable stability_ppm : real := 0.0; variable total_ppm : real := 0.0; begin stability_ppm := random_ppm(PPM_STABILITY_MIN, PPM_STABILITY_MAX); report "Setting stability error to: " & real'image(stability_ppm) & " PPM."; tuning_ppm := random_ppm(vcon_ppm_min_calc(vcon), vcon_ppm_max_calc(vcon)); report "Setting tuning error to: " & real'image(tuning_ppm) & " PPM."; freq <= freq_calc(tuning_ppm, stability_ppm); half_per <= half_clk_per(freq); report "freq_error=" & real'image(freq-FREQ_NOMINAL); report "freq=" & real'image(freq); end process; clock_i <= not clock_i after half_per; clock <= clock_i; end architecture; bladeRF-2024.05/hdl/fpga/ip/nuand/vctcxo_tamer/vhdl/tb/dac161s055_model.vhd000066400000000000000000000064551457144405000257230ustar00rootroot00000000000000-- Copyright (c) 2015 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity dac161s055_model is generic ( -- Defaults chosen to match bladerf.pdf DAC_WIDTH : positive := 16; VREF : real := 2.5; MZB : boolean := true; -- power on mid-scale? DIRECT_CONTROL : boolean := true ); port ( -- SPI Control interface --sclk : in std_logic; --sen : in std_logic; --sdi : in std_logic; --sdo : out std_logic; -- Direct control interface dac_count : in unsigned(DAC_WIDTH-1 downto 0); ldacb : in std_logic := '0'; -- Analog output vout : out real ); end entity; architecture arch of dac161s055_model is constant DAC_MID_SCALE : unsigned(DAC_WIDTH-1 downto 0) := to_unsigned( ((2**(DAC_WIDTH))/2)-1 , DAC_WIDTH ); constant DAC_LSB_VOLTAGE : real := ( (VREF) / real(2**DAC_WIDTH) ); -- Given a DAC value, get the analog output voltage function get_voltage( dac : unsigned ) return real is begin return ( real(to_integer(dac)) * DAC_LSB_VOLTAGE ); end function; -- FSM States --type fsm_t is ( ); -- State of internal signals --type state_t is record -- state : fsm_t; --end record; --constant RESET_VALUE : state_t := ( -- state => RESET_COUNTERS, --); --signal current : state_t := RESET_VALUE; --signal future : state_t := RESET_VALUE; signal powered_up : boolean := false; begin dac_guts : if( DIRECT_CONTROL = true ) generate comb_proc : process( all ) begin if( powered_up = false ) then -- Power-up voltage output if( MZB ) then vout <= get_voltage(DAC_MID_SCALE); else vout <= 0.0; end if; powered_up <= true; end if; if( ldacb = '0' ) then vout <= get_voltage(dac_count); end if; end process; end generate; end architecture; bladeRF-2024.05/hdl/fpga/ip/nuand/vctcxo_tamer/vhdl/tb/mm_driver.vhd000066400000000000000000000326301457144405000251250ustar00rootroot00000000000000-- Copyright (c) 2015 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; library std; use std.env.all; entity mm_driver is port( mm_clock : in std_logic; mm_reset : in std_logic; mm_rd_req : out std_logic; mm_wr_req : out std_logic; mm_addr : out std_logic_vector(7 downto 0); mm_wr_data : out std_logic_vector(7 downto 0); mm_rd_data : in std_logic_vector(7 downto 0); mm_rd_datav : in std_logic; mm_wait_req : in std_logic; mm_irq : in std_logic; dac_count : out unsigned(15 downto 0); tcxo_clock : out std_logic ); end entity; architecture arch of mm_driver is function half_clk_per( freq : real ) return time is begin return ( (0.5 sec) / real(freq) ); end function; constant TCXO_START_FREQ : real := 20.4e6; constant TCXO_TARGET_FREQ : real := 38.4e6; constant TCXO_INCR_FREQ : real := 1.0e6; --constant PPS_1S_TARGET : signed(63 downto 0) := to_signed(7, 64); --constant PPS_10S_TARGET : signed(63 downto 0) := to_signed(77, 64); --constant PPS_100S_TARGET : signed(63 downto 0) := to_signed(768, 64); -- --constant PPS_1S_MAX_ERROR : signed(63 downto 0) := to_signed(1, 64); --constant PPS_10S_MAX_ERROR : signed(63 downto 0) := to_signed(5, 64); --constant PPS_100S_MAX_ERROR : signed(63 downto 0) := to_signed(10, 64); constant PPS_1S_TARGET : signed(63 downto 0) := x"0000_0000_0000_9600";--12_2C00"; constant PPS_10S_TARGET : signed(63 downto 0) := x"0000_0000_0005_DC00";--B_B800"; constant PPS_100S_TARGET : signed(63 downto 0) := x"0000_0000_003A_9800";--75_3000"; constant PPS_1S_MAX_ERROR : signed(63 downto 0) := to_signed(1, 64); constant PPS_10S_MAX_ERROR : signed(63 downto 0) := to_signed(3, 64); constant PPS_100S_MAX_ERROR : signed(63 downto 0) := to_signed(38, 64); -- FSM States type fsm_t is ( RESET_COUNTERS, START_COUNTERS, ENABLE_IRQS, WAIT_FOR_IRQ, READ_COUNTS, FREQ_ADJUST, HOLDOFF, TERMINATE_SIMULATION ); type error_t is record error : signed(63 downto 0); end record; -- State of internal signals type state_t is record state : fsm_t; holdoff_count : natural; pps_1s_count : std_logic_vector(63 downto 0); pps_10s_count : std_logic_vector(63 downto 0); pps_100s_count : std_logic_vector(63 downto 0); tcxo_half_per : time; tcxo_freq : real; pid_1s : error_t; pid_10s : error_t; pid_100s : error_t; dac : unsigned(dac_count'range); end record; constant RESET_VALUE : state_t := ( state => RESET_COUNTERS, holdoff_count => 0, pps_1s_count => (others => '-'), pps_10s_count => (others => '-'), pps_100s_count => (others => '-'), tcxo_half_per => half_clk_per( TCXO_START_FREQ ), tcxo_freq => TCXO_START_FREQ, pid_1s => ( error => (others => '0') ), pid_10s => ( error => (others => '0') ), pid_100s => ( error => (others => '0') ), dac => x"7FFF" ); constant RESET_TIME : natural := 50; constant DEAD_TIME : natural := 1000; constant IRQ_TIMEOUT : natural := 2**30; --40000; constant PPS_CNT_1S_ADDR : natural := 0*8; constant PPS_CNT_10S_ADDR : natural := 1*8; constant PPS_CNT_100S_ADDR : natural := 2*8; constant CONTROL_ADDR : natural := 4*8; constant INTERRUPT_ADDR : natural := 5*8; signal tcxo_clock_i : std_logic := '1'; signal current : state_t := RESET_VALUE; signal future : state_t := RESET_VALUE; begin tcxo_clock_i <= not tcxo_clock_i after current.tcxo_half_per; tcxo_clock <= tcxo_clock_i; sync_proc : process( mm_clock, mm_reset ) begin if( mm_reset = '1' ) then current <= RESET_VALUE; elsif( rising_edge(mm_clock) ) then current <= future; end if; end process; comb_proc : process( all ) variable pps_1s_error : signed(63 downto 0) := (others => '0'); variable pps_10s_error : signed(63 downto 0) := (others => '0'); variable pps_100s_error : signed(63 downto 0) := (others => '0'); begin mm_rd_req <= '0'; mm_wr_req <= '0'; mm_addr <= (others => '0'); mm_wr_data <= (others => '0'); dac_count <= current.dac; case (current.state) is when RESET_COUNTERS => mm_wr_req <= '1'; mm_wr_data <= x"07"; mm_addr <= std_logic_vector(to_unsigned(CONTROL_ADDR,mm_addr'length)); future.holdoff_count <= 0; future.state <= START_COUNTERS; when START_COUNTERS => future.holdoff_count <= current.holdoff_count + 1; if( current.holdoff_count = RESET_TIME ) then future.holdoff_count <= 0; mm_wr_req <= '1'; mm_wr_data <= x"00"; mm_addr <= std_logic_vector(to_unsigned(CONTROL_ADDR,mm_addr'length)); future.state <= HOLDOFF; end if; when ENABLE_IRQS => mm_wr_req <= '1'; mm_wr_data <= x"01"; mm_addr <= std_logic_vector(to_unsigned(INTERRUPT_ADDR,mm_addr'length)); future.state <= WAIT_FOR_IRQ; when WAIT_FOR_IRQ => if( mm_irq = '1' ) then future.holdoff_count <= 0; mm_wr_req <= '1'; mm_wr_data <= x"11"; -- clear the interrupt mm_addr <= std_logic_vector(to_unsigned(INTERRUPT_ADDR,mm_addr'length)); future.state <= READ_COUNTS; else future.holdoff_count <= current.holdoff_count + 1; if( current.holdoff_count = IRQ_TIMEOUT ) then future.holdoff_count <= 0; future.state <= TERMINATE_SIMULATION; end if; end if; when READ_COUNTS => future.holdoff_count <= current.holdoff_count + 1; mm_rd_req <= '1'; if( current.holdoff_count < 8 ) then mm_addr <= std_logic_vector(to_unsigned(PPS_CNT_1S_ADDR+(current.holdoff_count mod 8),mm_addr'length)); future.pps_1s_count <= mm_rd_data & current.pps_1s_count(current.pps_1s_count'left downto current.pps_1s_count'right+mm_rd_data'length); elsif( current.holdoff_count < 16 ) then -- Need to shift in the last byte of data from previous count if( current.holdoff_count = 8 ) then future.pps_1s_count <= mm_rd_data & current.pps_1s_count(current.pps_1s_count'left downto current.pps_1s_count'right+mm_rd_data'length); end if; -- Also start capturing the next counter value mm_addr <= std_logic_vector(to_unsigned(PPS_CNT_10S_ADDR+(current.holdoff_count mod 8),mm_addr'length)); future.pps_10s_count <= mm_rd_data & current.pps_10s_count(current.pps_10s_count'left downto current.pps_10s_count'right+mm_rd_data'length); elsif( current.holdoff_count < 24 ) then -- Need to shift in the last byte of data from previous count if( current.holdoff_count = 16 ) then future.pps_10s_count <= mm_rd_data & current.pps_10s_count(current.pps_10s_count'left downto current.pps_10s_count'right+mm_rd_data'length); end if; -- Also start capturing the next counter value mm_addr <= std_logic_vector(to_unsigned(PPS_CNT_100S_ADDR+(current.holdoff_count mod 8),mm_addr'length)); future.pps_100s_count <= mm_rd_data & current.pps_100s_count(current.pps_100s_count'left downto current.pps_100s_count'right+mm_rd_data'length); else -- Need to shift in the last byte of data from previous count if( current.holdoff_count = 24 ) then future.pps_100s_count <= mm_rd_data & current.pps_100s_count(current.pps_100s_count'left downto current.pps_100s_count'right+mm_rd_data'length); end if; mm_rd_req <= '0'; future.holdoff_count <= 0; future.state <= FREQ_ADJUST; end if; when FREQ_ADJUST => -- Current error (only valid if the count is > 0) if( unsigned(current.pps_1s_count) /= to_unsigned(0,current.pps_1s_count'length) ) then pps_1s_error := signed(current.pps_1s_count)-PPS_1S_TARGET; end if; if( unsigned(current.pps_10s_count) /= to_unsigned(0,current.pps_10s_count'length) ) then pps_10s_error := signed(current.pps_10s_count)-PPS_10S_TARGET; end if; if( unsigned(current.pps_100s_count) /= to_unsigned(0,current.pps_100s_count'length) ) then pps_100s_error := signed(current.pps_100s_count)-PPS_100S_TARGET; end if; -- Save current error off for next time "previous error" future.pid_1s.error <= pps_1s_error; future.pid_10s.error <= pps_10s_error; future.pid_100s.error <= pps_100s_error; if( abs(pps_1s_error) > PPS_1S_MAX_ERROR ) then if( pps_1s_error < 0 ) then -- too slow, increase DAC future.dac <= current.dac + to_unsigned(1024,current.dac'length); else -- too fast, lower the DAC future.dac <= current.dac - to_unsigned(1024,current.dac'length); end if; elsif( abs(pps_10s_error) > PPS_10S_MAX_ERROR ) then if( pps_10s_error < 0 ) then -- too slow, increase DAC future.dac <= current.dac + to_unsigned(512,current.dac'length); else -- too fast, lower the DAC future.dac <= current.dac - to_unsigned(512,current.dac'length); end if; elsif( abs(pps_100s_error) > PPS_100S_MAX_ERROR ) then if( pps_100s_error < 0 ) then -- too slow, increase DAC future.dac <= current.dac + to_unsigned(128,current.dac'length); else -- too fast, lower the DAC future.dac <= current.dac - to_unsigned(128,current.dac'length); end if; end if; future.tcxo_half_per <= half_clk_per(current.tcxo_freq+TCXO_INCR_FREQ); future.tcxo_freq <= current.tcxo_freq + TCXO_INCR_FREQ; future.state <= HOLDOFF; when HOLDOFF => future.holdoff_count <= current.holdoff_count + 1; if( current.holdoff_count = DEAD_TIME ) then future.holdoff_count <= 0; future.state <= ENABLE_IRQS; end if; when TERMINATE_SIMULATION => stop(0); null; end case; end process; end architecture; bladeRF-2024.05/hdl/fpga/ip/nuand/vctcxo_tamer/vhdl/tb/vctcxo_tamer_tb.vhd000066400000000000000000000163521457144405000263270ustar00rootroot00000000000000-- Copyright (c) 2015 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity vctcxo_tamer_tb is end entity; architecture tb of vctcxo_tamer_tb is function half_clk_per( freq : real ) return time is begin return ( (0.5 sec) / real(freq) ); end function; constant SYS_CLK_PER : time := half_clk_per( 80.0e6 ); constant REF_1PPS_PER : time := half_clk_per( 1.0e3 ); --5.0e6 ); constant IDEAL_384_PER : time := half_clk_per( 38.4e6 ); signal ref_1pps : std_logic := '1'; signal ideal_38p4 : std_logic := '1'; signal sys_clk : std_logic := '1'; signal sys_rst : std_logic; signal rd_req : std_logic; signal wr_req : std_logic; signal addr : std_logic_vector(7 downto 0); signal wr_data : std_logic_vector(7 downto 0); signal rd_data : std_logic_vector(7 downto 0); signal rd_data_val : std_logic; signal wait_req : std_logic; signal irq : std_logic; signal tcxo_clock : std_logic; signal dac_count : unsigned(15 downto 0) := x"7FFF"; signal tcxo_vcon : real := 1.4; -- alias uut_pps_1s_target is << signal .vctcxo_tamer_tb.uut.pps_1s.target : signed(63 downto 0) >>; -- alias uut_pps_10s_target is << signal .vctcxo_tamer_tb.uut.pps_10s.target : signed(63 downto 0) >>; -- alias uut_pps_100s_target is << signal .vctcxo_tamer_tb.uut.pps_100s.target : signed(63 downto 0) >>; -- -- alias drv_pps_1s_target is << signal .vctcxo_tamer_tb.driver.PPS_1S_TARGET : signed(63 downto 0) >>; -- alias drv_pps_10s_target is << signal .vctcxo_tamer_tb.driver.PPS_10S_TARGET : signed(63 downto 0) >>; -- alias drv_pps_100s_target is << signal .vctcxo_tamer_tb.driver.PPS_100S_TARGET : signed(63 downto 0) >>; -- -- constant PPS_1S_TARGET : signed(63 downto 0) := x"0000_0000_0000_0F00";--12_2C00"; -- constant PPS_10S_TARGET : signed(63 downto 0) := x"0000_0000_0000_9600";--B_B800"; -- constant PPS_100S_TARGET : signed(63 downto 0) := x"0000_0000_0005_DC00";--75_3000"; begin --process --begin -- uut_pps_1s_target <= force PPS_1S_TARGET; -- drv_pps_1s_target <= force PPS_1S_TARGET; -- -- uut_pps_10s_target <= force PPS_10S_TARGET; -- drv_pps_10s_target <= force PPS_10S_TARGET; -- -- uut_pps_100s_target <= force PPS_100S_TARGET; -- drv_pps_100s_target <= force PPS_100S_TARGET; -- wait; --end process; sys_clk <= not sys_clk after SYS_CLK_PER; sys_rst <= '1', '0' after SYS_CLK_PER*5; ref_1pps <= not ref_1pps after REF_1PPS_PER; ideal_38p4 <= not ideal_38p4 after IDEAL_384_PER; -- process -- begin -- dac_count <= (others => '0'); -- wait for 10 us; -- dac_count <= dac_count + x"1000"; -- wait for 10 us; -- dac_count <= dac_count + x"1000"; -- wait for 10 us; -- dac_count <= dac_count + x"1000"; -- wait for 10 us; -- dac_count <= dac_count + x"1000"; -- wait for 10 us; -- dac_count <= dac_count + x"1000"; -- wait for 10 us; -- dac_count <= dac_count + x"1000"; -- wait for 10 us; -- dac_count <= dac_count + x"1000"; -- wait for 10 us; -- dac_count <= dac_count + x"1000"; -- wait for 10 us; -- dac_count <= dac_count + x"1000"; -- wait for 10 us; -- dac_count <= dac_count + x"1000"; -- wait; -- end process; uut : entity work.vctcxo_tamer(arch) port map( -- Physical Interface tune_ref => ref_1pps, vctcxo_clock => tcxo_clock, -- Avalon-MM Interface mm_clock => sys_clk, -- in std_logic; mm_reset => sys_rst, -- in std_logic; mm_rd_req => rd_req, -- in std_logic; mm_wr_req => wr_req, -- in std_logic; mm_addr => addr, -- in std_logic_vector(ADDR_WIDTH-1 downto 0); mm_wr_data => wr_data, -- in std_logic_vector(DATA_WIDTH-1 downto 0); mm_rd_data => rd_data, -- out std_logic_vector(DATA_WIDTH-1 downto 0); mm_rd_datav => rd_data_val, -- out std_logic; mm_wait_req => wait_req, -- out std_logic; -- Interrupt interface mm_irq => irq ); driver : entity work.mm_driver port map ( mm_clock => sys_clk, -- in std_logic; mm_reset => sys_rst, -- in std_logic; mm_rd_req => rd_req, -- out std_logic; mm_wr_req => wr_req, -- out std_logic; mm_addr => addr, -- out std_logic_vector(7 downto 0); mm_wr_data => wr_data, -- out std_logic_vector(7 downto 0); mm_rd_data => rd_data, -- in std_logic_vector(7 downto 0); mm_rd_datav => rd_data_val, -- in std_logic; mm_wait_req => wait_req, -- in std_logic mm_irq => irq, dac_count => dac_count, tcxo_clock => open --tcxo_clock ); dac : entity work.dac161s055_model generic map ( DIRECT_CONTROL => true ) port map ( -- SPI Control interface --sclk : in std_logic; --sen : in std_logic; --sdi : in std_logic; --sdo : out std_logic; -- Direct control interface dac_count => dac_count, -- in unsigned(DAC_WIDTH-1 downto 0); ldacb => '0', -- in std_logic := '0'; -- Analog output vout => tcxo_vcon -- out real ); vctcxo : entity work.asvtx12a384m_model port map ( vcon => tcxo_vcon, -- in real; -- control voltage clock => tcxo_clock -- out std_logic -- output clock ); end architecture; bladeRF-2024.05/hdl/fpga/ip/nuand/vctcxo_tamer/vhdl/vctcxo_tamer.vhd000066400000000000000000000426451457144405000252410ustar00rootroot00000000000000-- From Altera Solution ID rd05312011_49, need the following for Qsys to use VHDL 2008: -- altera vhdl_input_version vhdl_2008 -- Copyright (c) 2015 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; -- ----------------------------------------------------------------------------- -- Entity: vctcxo_tamer -- Standard: VHDL-2008 -- Description: -- Using a known reference (1PPS or 10 MHz), this module logs the number -- of VCTCXO clock cycles that have occurred over the previous 1-second, -- 10-second, and 100-second intervals. The actual counts for each interval -- are compared against the ideal to determine the error. If this error -- exceeds the given tolerance, an interrupt is sent to the NIOS processor, -- which reads the error and makes adjustments to the VCTCXO trim DAC as -- necessary. For best results, all counters should be reset after changing -- the trim DAC. -- ----------------------------------------------------------------------------- entity vctcxo_tamer is port( -- Physical Interface tune_ref : in std_logic; vctcxo_clock : in std_logic; -- Avalon-MM Interface mm_clock : in std_logic; mm_reset : in std_logic; mm_rd_req : in std_logic; mm_wr_req : in std_logic; mm_addr : in std_logic_vector(7 downto 0); mm_wr_data : in std_logic_vector(7 downto 0); mm_rd_data : out std_logic_vector(7 downto 0); mm_rd_datav : out std_logic; mm_wait_req : out std_logic := '0'; -- Avalon Interrupts mm_irq : out std_logic := '0' ); end entity; architecture arch of vctcxo_tamer is -- Register Addresses constant CONTROL_ADDR : natural := 16#00#; constant PPS_ERR_STATUS : natural := 16#01#; -- Reserved: 0x02 - 0x03 constant PPS_ERR_1S_ADDR0 : natural := 16#04#; constant PPS_ERR_1S_ADDR1 : natural := 16#05#; constant PPS_ERR_1S_ADDR2 : natural := 16#06#; constant PPS_ERR_1S_ADDR3 : natural := 16#07#; -- Reserved: 0x08 - 0x0B constant PPS_ERR_10S_ADDR0 : natural := 16#0C#; constant PPS_ERR_10S_ADDR1 : natural := 16#0D#; constant PPS_ERR_10S_ADDR2 : natural := 16#0E#; constant PPS_ERR_10S_ADDR3 : natural := 16#0F#; -- Reserved: 0x10 - 0x13 constant PPS_ERR_100S_ADDR0 : natural := 16#14#; constant PPS_ERR_100S_ADDR1 : natural := 16#15#; constant PPS_ERR_100S_ADDR2 : natural := 16#16#; constant PPS_ERR_100S_ADDR3 : natural := 16#17#; -- Reserved: 0x18 - 0xFF -- Error tolerance on each clock count, calculated for a goal of < 10 PPB -- err_counts = (seconds * nominal_vctcxo_freq) * (10 * 1e-9) constant PPS_1S_ERROR_TOL : signed(31 downto 0) := to_signed(1 , 32); constant PPS_10S_ERROR_TOL : signed(31 downto 0) := to_signed(4 , 32); constant PPS_100S_ERROR_TOL : signed(31 downto 0) := to_signed(38 , 32); type tune_mode_t is ( DISABLED, PPS, \10MHZ\ ); function unpack( x : std_logic_vector(1 downto 0) ) return tune_mode_t is variable rv : tune_mode_t := DISABLED; begin case( x ) is when "01" => rv := PPS; when "10" => rv := \10MHZ\; when others => rv := DISABLED; end case; return rv; end function; -- Counter data type count_t is record target : signed(63 downto 0); count : signed(63 downto 0); error : signed(31 downto 0); error_v : std_logic; count_v : std_logic; end record; signal pps_1s : count_t := ( target => x"0000_0000_0249_F000", --384e5 count => (others => '0'), error => (others => '0'), error_v => '0', count_v => '0' ); signal pps_10s : count_t := ( target => x"0000_0000_16E3_6000", -- 384e6 count => (others => '0'), error => (others => '0'), error_v => '0', count_v => '0' ); signal pps_100s : count_t := ( target => x"0000_0000_E4E1_C000", -- 384e7 count => (others => '0'), error => (others => '0'), error_v => '0', count_v => '0' ); -- Asynchronous signal ref_1pps : std_logic := '0'; -- Tune_ref-synchronous signals signal tune_ref_reset : std_logic := '1'; signal ref_10mhz_pps : std_logic := '0'; signal tune_ref_mode_update_req : std_logic := '0'; signal tune_ref_mode_update_ack : std_logic := '0'; signal tune_ref_mode : tune_mode_t := DISABLED; signal tune_ref_mode_hs : tune_mode_t := DISABLED; -- VCTCXO-synchronous signals signal ref_1pps_sync : std_logic := '0'; signal ref_1pps_pulse : std_logic := '0'; signal vctcxo_reset : std_logic := '1'; -- System-synchronous signals signal mm_control_reg : std_logic_vector(7 downto 0) := x"21"; alias mm_tune_mode : std_logic_vector(1 downto 0) is mm_control_reg(7 downto 6); alias mm_pps_irq_clear : std_logic is mm_control_reg(5); alias mm_pps_irq_enable : std_logic is mm_control_reg(4); alias mm_vctcxo_reset : std_logic is mm_control_reg(0); begin -- If the input reference is 10 MHz, use it as a clock to increment a -- counter that will generate a single pulse every second. ref_10mhz_count_proc : process( tune_ref, tune_ref_reset ) constant REF_10MHZ_RESET_VAL : natural range 0 to 2**24-1 := 10e6; constant REF_10MHZ_PULSE_DURATION : natural range 0 to 2**24-1 := 1e3; variable v_10mhz_count : natural range 0 to 2**24-1 := 10e6; variable v_tune_mode : tune_mode_t := DISABLED; begin if( tune_ref_reset = '1' ) then ref_10mhz_pps <= '0'; v_10mhz_count := REF_10MHZ_RESET_VAL; v_tune_mode := DISABLED; elsif( rising_edge(tune_ref) ) then ref_10mhz_pps <= '0'; if( v_tune_mode /= tune_ref_mode ) then v_10mhz_count := REF_10MHZ_RESET_VAL; elsif( tune_ref_mode = \10MHZ\ ) then v_10mhz_count := v_10mhz_count - 1; if( v_10mhz_count = 0 ) then v_10mhz_count := REF_10MHZ_RESET_VAL; end if; if( v_10mhz_count <= REF_10MHZ_PULSE_DURATION ) then ref_10mhz_pps <= '1'; end if; end if; v_tune_mode := tune_ref_mode; end if; end process; -- Tuning reference MUX ref_1pps <= tune_ref when ( unpack(mm_tune_mode) = PPS ) else ref_10mhz_pps when ( unpack(mm_tune_mode) = \10MHZ\ ) else '0'; -- Bring the 1PPS into the VCTCXO clock domain U_pps_sync : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => vctcxo_reset, clock => vctcxo_clock, async => ref_1pps, sync => ref_1pps_sync ); -- Generate a single-cycle version of the 1PPS signal U_edge_detector_pps : entity work.edge_detector generic map ( EDGE_RISE => '1', EDGE_FALL => '0' ) port map ( clock => vctcxo_clock, reset => vctcxo_reset, sync_in => ref_1pps_sync, pulse_out => ref_1pps_pulse ); -- Count number of VCTCXO clock cycles in the last 1 second U_pps_counter_1s : entity work.pps_counter generic map ( COUNT_WIDTH => pps_1s.count'length, PPS_PULSES => 1 ) port map ( sys_clock => mm_clock, sys_reset => mm_reset or mm_vctcxo_reset, sys_count => pps_1s.count, sys_count_v => pps_1s.count_v, vctcxo_clock => vctcxo_clock, vctcxo_reset => vctcxo_reset, vctcxo_pps => ref_1pps_pulse ); -- Count number of VCTCXO clock cycles in the last 10 seconds U_pps_counter_10s : entity work.pps_counter generic map ( COUNT_WIDTH => pps_10s.count'length, PPS_PULSES => 10 ) port map ( sys_clock => mm_clock, sys_reset => mm_reset or mm_vctcxo_reset, sys_count => pps_10s.count, sys_count_v => pps_10s.count_v, vctcxo_clock => vctcxo_clock, vctcxo_reset => vctcxo_reset, vctcxo_pps => ref_1pps_pulse ); -- Count number of VCTCXO clock cycles in the last 100 seconds U_pps_counter_100s : entity work.pps_counter generic map ( COUNT_WIDTH => pps_100s.count'length, PPS_PULSES => 100 ) port map ( sys_clock => mm_clock, sys_reset => mm_reset or mm_vctcxo_reset, sys_count => pps_100s.count, sys_count_v => pps_100s.count_v, vctcxo_clock => vctcxo_clock, vctcxo_reset => vctcxo_reset, vctcxo_pps => ref_1pps_pulse ); -- Interrupt Request int_req_proc : process( mm_clock ) variable tmp_1s_err : signed(PPS_1S_ERROR_TOL'range) := (others => '0'); variable tmp_10s_err : signed(PPS_10S_ERROR_TOL'range) := (others => '0'); variable tmp_100s_err : signed(PPS_100S_ERROR_TOL'range) := (others => '0'); begin if( rising_edge(mm_clock) ) then if( (pps_1s.count_v = '1') and (mm_pps_irq_enable = '1') ) then tmp_1s_err := resize( (pps_1s.count - pps_1s.target), 32 ); pps_1s.error <= tmp_1s_err; if( abs(tmp_1s_err) > PPS_1S_ERROR_TOL ) then pps_1s.error_v <= '1'; mm_irq <= '1'; end if; end if; if( (pps_10s.count_v = '1') and (mm_pps_irq_enable = '1') ) then tmp_10s_err := resize( (pps_10s.count - pps_10s.target), 32 ); pps_10s.error <= tmp_10s_err; if( abs(tmp_10s_err) > PPS_10S_ERROR_TOL ) then pps_10s.error_v <= '1'; mm_irq <= '1'; end if; end if; if( (pps_100s.count_v = '1') and (mm_pps_irq_enable = '1') ) then tmp_100s_err := resize( (pps_100s.count - pps_100s.target), 32 ); pps_100s.error <= tmp_100s_err; if( abs(tmp_100s_err) > PPS_100S_ERROR_TOL ) then pps_100s.error_v <= '1'; mm_irq <= '1'; end if; end if; if( mm_pps_irq_clear = '1' ) then -- Don't need to clear out the error count -- because we are invalidating it here. pps_1s.error_v <= '0'; pps_10s.error_v <= '0'; pps_100s.error_v <= '0'; mm_irq <= '0'; end if; end if; end process; -- Avalon-MM Read Process mm_read_proc : process( mm_clock ) begin if( rising_edge(mm_clock) ) then -- Data valid is just a one-cycle delay of read request mm_rd_datav <= mm_rd_req; mm_wait_req <= '0'; case to_integer(unsigned(mm_addr)) is -- Control Register when CONTROL_ADDR => mm_rd_data <= mm_control_reg; -- PPS Error Status when PPS_ERR_STATUS => mm_rd_data(7 downto 3) <= (others => '0'); mm_rd_data(2) <= pps_100s.error_v; mm_rd_data(1) <= pps_10s.error_v; mm_rd_data(0) <= pps_1s.error_v; -- 1 Second Count Error when PPS_ERR_1S_ADDR0 => mm_rd_data <= std_logic_vector(pps_1s.error(7 downto 0)); when PPS_ERR_1S_ADDR1 => mm_rd_data <= std_logic_vector(pps_1s.error(15 downto 8)); when PPS_ERR_1S_ADDR2 => mm_rd_data <= std_logic_vector(pps_1s.error(23 downto 16)); when PPS_ERR_1S_ADDR3 => mm_rd_data <= std_logic_vector(pps_1s.error(31 downto 24)); -- 10 Second Count Error when PPS_ERR_10S_ADDR0 => mm_rd_data <= std_logic_vector(pps_10s.error(7 downto 0)); when PPS_ERR_10S_ADDR1 => mm_rd_data <= std_logic_vector(pps_10s.error(15 downto 8)); when PPS_ERR_10S_ADDR2 => mm_rd_data <= std_logic_vector(pps_10s.error(23 downto 16)); when PPS_ERR_10S_ADDR3 => mm_rd_data <= std_logic_vector(pps_10s.error(31 downto 24)); -- 100 Second Count Error when PPS_ERR_100S_ADDR0 => mm_rd_data <= std_logic_vector(pps_100s.error(7 downto 0)); when PPS_ERR_100S_ADDR1 => mm_rd_data <= std_logic_vector(pps_100s.error(15 downto 8)); when PPS_ERR_100S_ADDR2 => mm_rd_data <= std_logic_vector(pps_100s.error(23 downto 16)); when PPS_ERR_100S_ADDR3 => mm_rd_data <= std_logic_vector(pps_100s.error(31 downto 24)); when others => null; end case; end if; end process; -- Avalon-MM Write Process mm_write_proc : process( mm_clock ) begin if( rising_edge(mm_clock) ) then mm_pps_irq_clear <= '0'; if( mm_wr_req = '1' ) then case to_integer(unsigned(mm_addr)) is when CONTROL_ADDR => mm_control_reg <= mm_wr_data; when others => null; end case; end if; end if; end process; -- Asynchronous reset, synchronous deassertion of reset U_reset_sync_vctcxo : entity work.reset_synchronizer generic map ( INPUT_LEVEL => '1', OUTPUT_LEVEL => '1' ) port map ( clock => vctcxo_clock, async => mm_vctcxo_reset or mm_reset, sync => vctcxo_reset ); -- Asynchronous reset, synchronous deassertion of reset U_reset_sync_tune_ref : entity work.reset_synchronizer generic map ( INPUT_LEVEL => '1', OUTPUT_LEVEL => '1' ) port map ( clock => tune_ref, async => mm_vctcxo_reset or mm_reset, sync => tune_ref_reset ); -- Tune Mode Updater: Keep requesting tune_mode updates tune_mode_updater_proc : process( tune_ref, tune_ref_reset ) begin if( tune_ref_reset = '1' ) then tune_ref_mode_update_req <= '0'; tune_ref_mode <= DISABLED; elsif( rising_edge(tune_ref) ) then if( tune_ref_mode_update_ack = '1' ) then tune_ref_mode_update_req <= '0'; tune_ref_mode <= tune_ref_mode_hs; else tune_ref_mode_update_req <= '1'; end if; end if; end process; -- Get the tune mode into the tune_ref clock domain U_handshake_tune_mode : entity work.handshake generic map ( DATA_WIDTH => 2 ) port map ( source_reset => mm_reset or mm_vctcxo_reset, source_clock => mm_clock, source_data => mm_tune_mode, dest_reset => tune_ref_reset, dest_clock => tune_ref, unpack(dest_data) => tune_ref_mode_hs, dest_req => tune_ref_mode_update_req, dest_ack => tune_ref_mode_update_ack ); end architecture; bladeRF-2024.05/hdl/fpga/ip/nuand/wishbone_master/000077500000000000000000000000001457144405000215635ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/wishbone_master/modelsim/000077500000000000000000000000001457144405000233745ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/wishbone_master/modelsim/compile.do000066400000000000000000000004711457144405000253520ustar00rootroot00000000000000# Create work library vlib nuand # Compile design files vcom -work nuand -2008 ../vhdl/wishbone_master.vhd vcom -work nuand -2008 ../vhdl/tb/wishbone_master_tb.vhd # Elaborate design vsim nuand.wishbone_master_tb # Add waves add wave -hexadecimal "sim:/wishbone_master_tb/U_wishbone_master/*" # Run run -all bladeRF-2024.05/hdl/fpga/ip/nuand/wishbone_master/qsys/000077500000000000000000000000001457144405000225625ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/wishbone_master/qsys/wishbone_master.qip000066400000000000000000000005221457144405000264650ustar00rootroot00000000000000# This file gets copied by Qsys several layers into the work directory. # Any relative paths defined here must be relative to that directory. set nuand_hdl_dir [file normalize [file join $::quartus(qip_path) ../../../../../../fpga/ip/nuand/]] set_global_assignment -name VHDL_FILE $nuand_hdl_dir/wishbone_master/vhdl/wishbone_master.vhd bladeRF-2024.05/hdl/fpga/ip/nuand/wishbone_master/qsys/wishbone_master_hw.tcl000066400000000000000000000152531457144405000271630ustar00rootroot00000000000000# TCL File Generated by Component Editor 16.0 # Fri May 14 23:15:32 PDT 2021 # DO NOT MODIFY # # wishbone_master "bladeRF NiOS Wishbone Master" v1.0 # Robert Ghilduta 2021.05.14.23:15:32 # NiOS Wishbone Master # # # request TCL package from ACDS 16.0 # package require -exact qsys 16.0 # # module wishbone_master # set_module_property DESCRIPTION "NiOS Wishbone Master" set_module_property NAME wishbone_master set_module_property VERSION 1.0 set_module_property INTERNAL false set_module_property OPAQUE_ADDRESS_MAP true set_module_property GROUP Peripherals set_module_property AUTHOR "Robert Ghilduta" set_module_property DISPLAY_NAME "bladeRF NiOS Wishbone Master" set_module_property INSTANTIATE_IN_SYSTEM_MODULE true set_module_property EDITABLE true set_module_property REPORT_TO_TALKBACK false set_module_property ALLOW_GREYBOX_GENERATION false set_module_property REPORT_HIERARCHY false # # file sets # add_fileset QUARTUS_SYNTH QUARTUS_SYNTH "" "" set_fileset_property QUARTUS_SYNTH TOP_LEVEL wishbone_master set_fileset_property QUARTUS_SYNTH ENABLE_RELATIVE_INCLUDE_PATHS false set_fileset_property QUARTUS_SYNTH ENABLE_FILE_OVERWRITE_MODE false add_fileset_file wishbone_master.qip OTHER PATH ./wishbone_master.qip # # parameters # add_parameter ADDR_BITS INTEGER 32 "" set_parameter_property ADDR_BITS DEFAULT_VALUE 32 set_parameter_property ADDR_BITS DISPLAY_NAME ADDR_BITS set_parameter_property ADDR_BITS TYPE INTEGER set_parameter_property ADDR_BITS UNITS None set_parameter_property ADDR_BITS ALLOWED_RANGES -2147483648:2147483647 set_parameter_property ADDR_BITS DESCRIPTION "" set_parameter_property ADDR_BITS HDL_PARAMETER true add_parameter DATA_BITS INTEGER 32 "" set_parameter_property DATA_BITS DEFAULT_VALUE 32 set_parameter_property DATA_BITS DISPLAY_NAME DATA_BITS set_parameter_property DATA_BITS TYPE INTEGER set_parameter_property DATA_BITS UNITS None set_parameter_property DATA_BITS ALLOWED_RANGES -2147483648:2147483647 set_parameter_property DATA_BITS DESCRIPTION "" set_parameter_property DATA_BITS HDL_PARAMETER true # # display items # # # connection point avalon_slave_0 # add_interface avalon_slave_0 avalon end set_interface_property avalon_slave_0 addressUnits WORDS set_interface_property avalon_slave_0 associatedClock clock_sink set_interface_property avalon_slave_0 associatedReset reset set_interface_property avalon_slave_0 bitsPerSymbol 8 set_interface_property avalon_slave_0 burstOnBurstBoundariesOnly false set_interface_property avalon_slave_0 burstcountUnits WORDS set_interface_property avalon_slave_0 explicitAddressSpan 0 set_interface_property avalon_slave_0 holdTime 0 set_interface_property avalon_slave_0 linewrapBursts false set_interface_property avalon_slave_0 maximumPendingReadTransactions 1 set_interface_property avalon_slave_0 maximumPendingWriteTransactions 0 set_interface_property avalon_slave_0 readLatency 0 set_interface_property avalon_slave_0 readWaitTime 1 set_interface_property avalon_slave_0 setupTime 0 set_interface_property avalon_slave_0 timingUnits Cycles set_interface_property avalon_slave_0 writeWaitTime 0 set_interface_property avalon_slave_0 ENABLED true set_interface_property avalon_slave_0 EXPORT_OF "" set_interface_property avalon_slave_0 PORT_NAME_MAP "" set_interface_property avalon_slave_0 CMSIS_SVD_VARIABLES "" set_interface_property avalon_slave_0 SVD_ADDRESS_GROUP "" add_interface_port avalon_slave_0 addr address Input 24 add_interface_port avalon_slave_0 din writedata Input 32 add_interface_port avalon_slave_0 dout readdata Output 32 add_interface_port avalon_slave_0 write write Input 1 add_interface_port avalon_slave_0 read read Input 1 add_interface_port avalon_slave_0 waitreq waitrequest Output 1 add_interface_port avalon_slave_0 readack readdatavalid Output 1 set_interface_assignment avalon_slave_0 embeddedsw.configuration.isFlash 0 set_interface_assignment avalon_slave_0 embeddedsw.configuration.isMemoryDevice 0 set_interface_assignment avalon_slave_0 embeddedsw.configuration.isNonVolatileStorage 0 set_interface_assignment avalon_slave_0 embeddedsw.configuration.isPrintableDevice 0 # # connection point reset # add_interface reset reset end set_interface_property reset associatedClock clock_sink set_interface_property reset synchronousEdges DEASSERT set_interface_property reset ENABLED true set_interface_property reset EXPORT_OF "" set_interface_property reset PORT_NAME_MAP "" set_interface_property reset CMSIS_SVD_VARIABLES "" set_interface_property reset SVD_ADDRESS_GROUP "" add_interface_port reset reset reset Input 1 # # connection point conduit_end # add_interface conduit_end conduit end set_interface_property conduit_end associatedClock clock_sink set_interface_property conduit_end associatedReset reset set_interface_property conduit_end ENABLED true set_interface_property conduit_end EXPORT_OF "" set_interface_property conduit_end PORT_NAME_MAP "" set_interface_property conduit_end CMSIS_SVD_VARIABLES "" set_interface_property conduit_end SVD_ADDRESS_GROUP "" add_interface_port conduit_end wb_clk_i wb_clk_i Input 1 add_interface_port conduit_end wb_rst_i wb_rst_i Input 1 add_interface_port conduit_end wb_adr_o wb_adr_o Output ADDR_BITS add_interface_port conduit_end wb_dat_o wb_dat_o Output DATA_BITS add_interface_port conduit_end wb_dat_i wb_dat_i Input DATA_BITS add_interface_port conduit_end wb_we_o wb_we_o Output 1 add_interface_port conduit_end wb_sel_o wb_sel_o Output 1 add_interface_port conduit_end wb_stb_o wb_stb_o Output 1 add_interface_port conduit_end wb_ack_i wb_ack_i Input 1 add_interface_port conduit_end wb_cyc_o wb_cyc_o Output 1 # # connection point interrupt_sender # add_interface interrupt_sender interrupt end set_interface_property interrupt_sender associatedAddressablePoint "" set_interface_property interrupt_sender associatedClock clock_sink set_interface_property interrupt_sender associatedReset reset set_interface_property interrupt_sender bridgedReceiverOffset "" set_interface_property interrupt_sender bridgesToReceiver "" set_interface_property interrupt_sender ENABLED true set_interface_property interrupt_sender EXPORT_OF "" set_interface_property interrupt_sender PORT_NAME_MAP "" set_interface_property interrupt_sender CMSIS_SVD_VARIABLES "" set_interface_property interrupt_sender SVD_ADDRESS_GROUP "" add_interface_port interrupt_sender intr irq Output 1 # # connection point clock_sink # add_interface clock_sink clock end set_interface_property clock_sink clockRate 0 set_interface_property clock_sink ENABLED true set_interface_property clock_sink EXPORT_OF "" set_interface_property clock_sink PORT_NAME_MAP "" set_interface_property clock_sink CMSIS_SVD_VARIABLES "" set_interface_property clock_sink SVD_ADDRESS_GROUP "" add_interface_port clock_sink clock clk Input 1 bladeRF-2024.05/hdl/fpga/ip/nuand/wishbone_master/vhdl/000077500000000000000000000000001457144405000225205ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/wishbone_master/vhdl/tb/000077500000000000000000000000001457144405000231255ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/nuand/wishbone_master/vhdl/tb/wishbone_master_tb.vhd000066400000000000000000000173051457144405000275140ustar00rootroot00000000000000-- Copyright (c) 2021 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; entity wishbone_master_tb is end entity ; architecture arch of wishbone_master_tb is constant ADDR_BITS : integer := 32; constant DATA_BITS : integer := 32; signal clock : std_logic := '1' ; signal reset : std_logic := '1' ; signal addr : std_logic_vector(ADDR_BITS-1 downto 0) := (others => '0'); signal din : std_logic_vector(DATA_BITS-1 downto 0) := (others => '0'); signal dout : std_logic_vector(DATA_BITS-1 downto 0) ; signal write : std_logic := '0' ; signal read : std_logic := '0' ; signal waitreq : std_logic ; signal readack : std_logic ; signal intr : std_logic ; signal arb_request : std_logic_vector(3 downto 0) ; signal arb_ack : std_logic_vector(3 downto 0) ; signal arb_granted : std_logic_vector(3 downto 0) ; procedure read_csr( signal clock : in std_logic ; signal addr : out std_logic_vector(ADDR_BITS-1 downto 0) ; signal dout : in std_logic_vector(DATA_BITS-1 downto 0) ; signal read : out std_logic ; signal readack : in std_logic ; reg : in integer ; rv : out std_logic_vector(DATA_BITS-1 downto 0) ) is begin addr <= std_logic_vector(to_unsigned(reg, addr'length)) ; read <= '1' ; wait until rising_edge(clock) and readack = '1' ; rv := std_logic_vector(dout) ; read <= '0' ; wait until rising_edge(clock) ; wait until rising_edge(clock) ; end procedure ; procedure write_csr( signal clock : in std_logic ; signal addr : out std_logic_vector(ADDR_BITS-1 downto 0) ; signal din : out std_logic_vector(DATA_BITS-1 downto 0) ; signal write : out std_logic ; reg : in integer ; rv : std_logic_vector(DATA_BITS-1 downto 0) ) is begin addr <= std_logic_vector(to_unsigned(reg, addr'length)) ; din <= std_logic_vector(rv) ; write <= '1' ; wait until rising_edge(clock) ; write <= '0' ; wait until rising_edge(clock) ; end procedure ; procedure nop( signal clock : in std_logic ; count : natural ) is begin for i in 1 to count loop wait until rising_edge(clock) ; end loop ; end procedure ; procedure clear_intr( signal clock : in std_logic ; signal addr : out std_logic_vector(ADDR_BITS-1 downto 0) ; signal din : out std_logic_vector(DATA_BITS-1 downto 0) ; signal write : out std_logic ) is begin addr <= std_logic_vector(to_unsigned(8, addr'length)) ; din <= std_logic_vector(to_unsigned(1, din'length)) ; write <= '1' ; wait until rising_edge(clock) ; write <= '0' ; wait until rising_edge(clock) ; end procedure ; procedure set_intr( signal clock : in std_logic ; signal addr : out std_logic_vector(ADDR_BITS-1 downto 0) ; signal din : out std_logic_vector(DATA_BITS-1 downto 0) ; signal write : out std_logic ) is begin addr <= std_logic_vector(to_unsigned(8, addr'length)) ; din <= std_logic_vector(to_unsigned(0, din'length)) ; write <= '1' ; wait until rising_edge(clock) ; write <= '0' ; wait until rising_edge(clock) ; end procedure ; signal wb_clk_i : std_logic := '0' ; signal wb_rst_i : std_logic ; signal wb_adr_o : std_logic_vector(ADDR_BITS-1 downto 0) ; signal wb_dat_o : std_logic_vector(DATA_BITS-1 downto 0) ; signal wb_dat_i : std_logic_vector(DATA_BITS-1 downto 0) ; signal wb_we_o : std_logic ; signal wb_sel_o : std_logic ; signal wb_stb_o : std_logic ; signal wb_ack_i : std_logic ; signal wb_cyc_o : std_logic ; begin wb_clk_i <= not wb_clk_i after 3 ns ; process(wb_clk_i) variable idx : integer := 0; begin if(rising_edge(wb_clk_i)) then wb_ack_i <= wb_cyc_o; if (wb_cyc_o = '1' and wb_we_o = '0' ) then idx := idx + 1; wb_dat_i <= wb_dat_o(wb_dat_o'high-1 downto 0) & '0'; end if; end if; end process; clock <= not clock after 1 ns ; U_wishbone_master : entity work.wishbone_master port map ( clock => clock, reset => reset, addr => addr, din => din, dout => dout, write => write, read => read, waitreq => waitreq, readack => readack, intr => intr, wb_clk_i => wb_clk_i, wb_rst_i => wb_rst_i, wb_adr_o => wb_adr_o, wb_dat_o => wb_dat_o, wb_dat_i => wb_dat_i, wb_we_o => wb_we_o, wb_sel_o => wb_sel_o, wb_stb_o => wb_stb_o, wb_ack_i => wb_ack_i, wb_cyc_o => wb_cyc_o ) ; tb : process variable ts : std_logic_vector(DATA_BITS-1 downto 0) := (others =>'0') ; begin arb_request <= ( others => '0' ) ; arb_ack <= ( others => '0' ) ; reset <= '1' ; nop( clock, 100 ) ; reset <= '0' ; nop( clock, 100 ) ; -- read CSR read_csr( clock, addr, dout, read, readack, 1000, ts ) ; nop( clock, 1000 ) ; -- NiOS request write_csr( clock, addr, din, write, 3, x"00000001" ) ; -- NiOS should be granted nop( clock, 100 ) ; read_csr( clock, addr, dout, read, readack, 1, ts ) ; -- NiOS ACK nop( clock, 1000 ) ; write_csr( clock, addr, din, write, 0, x"00000002" ) ; nop( clock, 1000 ) ; -- NiOS request #2 write_csr( clock, addr, din, write, 8, x"00000000" ) ; write_csr( clock, addr, din, write, 0, x"00000001" ) ; nop( clock, 1000 ) ; -- NiOS ACK #2 (with intr) nop( clock, 1000 ) ; write_csr( clock, addr, din, write, 8, x"00000001" ) ; nop( clock, 1000 ) ; write_csr( clock, addr, din, write, 0, x"00000002" ) ; nop( clock, 1000) ; -- Read the time back report "-- End of Simulation" severity failure ; end process ; end architecture ; bladeRF-2024.05/hdl/fpga/ip/nuand/wishbone_master/vhdl/wishbone_master.vhd000066400000000000000000000205101457144405000264120ustar00rootroot00000000000000-- Copyright (c) 2021 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; library altera_mf ; use altera_mf.altera_mf_components.all ; entity wishbone_master is generic ( ADDR_BITS : integer := 32 ; DATA_BITS : integer := 32 ) ; port ( -- Control signals clock : in std_logic ; reset : in std_logic ; -- Memory mapped interface addr : in std_logic_vector(ADDR_BITS-1 downto 0) ; din : in std_logic_vector(DATA_BITS-1 downto 0) ; dout : out std_logic_vector(DATA_BITS-1 downto 0) ; write : in std_logic ; read : in std_logic ; waitreq : out std_logic ; readack : out std_logic ; intr : out std_logic ; -- Wishbone signals wb_clk_i : in std_logic ; wb_rst_i : in std_logic ; wb_adr_o : out std_logic_vector(ADDR_BITS-1 downto 0) ; wb_dat_o : out std_logic_vector(DATA_BITS-1 downto 0) ; wb_dat_i : in std_logic_vector(DATA_BITS-1 downto 0) ; wb_we_o : out std_logic ; wb_sel_o : out std_logic ; wb_stb_o : out std_logic ; wb_ack_i : in std_logic ; wb_cyc_o : out std_logic ) ; end entity ; architecture arch of wishbone_master is signal av2wb_wfull : std_logic ; signal wb_empty : std_logic ; signal wb_empty_r : std_logic ; signal wb_bus : std_logic_vector((ADDR_BITS + DATA_BITS) downto 0) ; signal wb2av_wfull : std_logic ; signal av_empty : std_logic ; signal av_bus : std_logic_vector(DATA_BITS-1 downto 0) ; type av_fsm_t is (INIT, WAIT_FOR_ACK) ; type av_state_t is record state : av_fsm_t; read_op : std_logic ; waitreq : std_logic ; readack : std_logic ; adr : std_logic_vector(ADDR_BITS-1 downto 0) ; din : std_logic_vector(DATA_BITS-1 downto 0) ; dout : std_logic_vector(DATA_BITS-1 downto 0) ; we : std_logic ; wreq : std_logic ; req_r : std_logic ; end record; function AV_NULL_STATE return av_state_t is variable rv : av_state_t ; begin rv.state := INIT; rv.read_op := '0'; rv.waitreq := '0'; rv.readack := '0'; rv.adr := ( others => '0' ); rv.din := ( others => '0' ); rv.dout := ( others => '0' ); rv.we := '0'; rv.wreq := '0'; rv.req_r := '0'; return rv ; end function; signal av_current : av_state_t ; signal av_future : av_state_t ; type wb_fsm_t is (INIT, WAIT_FOR_REQ) ; type wb_state_t is record state : wb_fsm_t; sel : std_logic ; end record; function WB_NULL_STATE return wb_state_t is variable rv : wb_state_t ; begin rv.state := INIT ; rv.sel := '0' ; return rv ; end function; signal wb_current : wb_state_t ; signal wb_future : wb_state_t ; begin av_sync_proc : process(clock, reset) begin if (reset = '1' ) then av_current <= AV_NULL_STATE ; elsif (rising_edge(clock) ) then av_current <= av_future; end if; end process; av_comb_proc : process( all ) begin av_future <= av_current; av_future.din <= ( others => '0' ); av_future.adr <= ( others => '0' ); av_future.req_r <= '0'; av_future.wreq <= '0'; av_future.readack <= '0'; case(av_current.state) is when INIT => if (read = '1' or write = '1' ) then if (av_current.req_r = '0' ) then av_future.din <= din; av_future.adr <= addr; av_future.we <= write; av_future.wreq <= '1'; av_future.waitreq <= '1'; av_future.state <= WAIT_FOR_ACK; end if; av_future.req_r <= '1'; end if; when WAIT_FOR_ACK => if (av_empty = '0' ) then av_future.req_r <= '1'; av_future.state <= INIT; av_future.waitreq <= '0'; av_future.dout <= av_bus; if (av_current.we = '0' ) then av_future.readack <= '1'; end if; end if; when others => av_future <= AV_NULL_STATE; end case; end process; wb_sync_proc : process(clock, reset) begin if (reset = '1' ) then wb_current <= WB_NULL_STATE ; elsif (rising_edge(wb_clk_i) ) then wb_current <= wb_future; end if; end process; wb_comb_proc : process( all ) begin wb_future <= wb_current; wb_future.sel <= '0'; case(wb_current.state) is when INIT => if (wb_empty = '0' ) then wb_future.sel <= '1'; wb_future.state <= WAIT_FOR_REQ; end if; when WAIT_FOR_REQ => if (wb_ack_i = '1') then wb_future.state <= INIT; else wb_future.sel <= '1'; end if; when others => wb_future <= WB_NULL_STATE; end case; end process; intr <= '0'; U_av2wb: dcfifo generic map ( lpm_width => (1+ADDR_BITS+DATA_BITS), lpm_widthu => 4, lpm_numwords => 16, lpm_showahead => "ON" ) port map ( aclr => reset, wrclk => clock, wrreq => av_current.wreq and not av2wb_wfull, data => av_current.we & av_current.adr & av_current.din, wrfull => av2wb_wfull, wrempty => open, wrusedw => open, rdclk => wb_clk_i, rdreq => not wb_empty, q => wb_bus, rdfull => open, rdempty => wb_empty, rdusedw => open ); wb_adr_o <= wb_bus(ADDR_BITS+DATA_BITS-1 downto DATA_BITS); wb_dat_o <= wb_bus(DATA_BITS-1 downto 0); wb_we_o <= wb_bus(wb_bus'high); wb_cyc_o <= not wb_empty; wb_sel_o <= wb_current.sel; wb_stb_o <= '1'; U_wb2av: dcfifo generic map ( lpm_width => 32, lpm_widthu => 4, lpm_numwords => 16, lpm_showahead => "ON" ) port map ( aclr => reset, wrclk => wb_clk_i, wrreq => wb_ack_i and not wb2av_wfull, data => wb_dat_i, wrfull => wb2av_wfull, wrempty => open, wrusedw => open, rdclk => clock, rdreq => not av_empty, q => av_bus, rdfull => open, rdempty => av_empty, rdusedw => open ); dout <= av_current.dout; readack <= av_current.readack; waitreq <= av_current.waitreq; end architecture ; bladeRF-2024.05/hdl/fpga/ip/opencores/000077500000000000000000000000001457144405000172625ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/opencores/i2c/000077500000000000000000000000001457144405000177375ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/opencores/i2c/bench/000077500000000000000000000000001457144405000210165ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/opencores/i2c/bench/verilog/000077500000000000000000000000001457144405000224655ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/opencores/i2c/bench/verilog/i2c_slave_model.v000066400000000000000000000262411457144405000257100ustar00rootroot00000000000000///////////////////////////////////////////////////////////////////// //// //// //// WISHBONE rev.B2 compliant synthesizable I2C Slave model //// //// //// //// //// //// Authors: Richard Herveille (richard@asics.ws) www.asics.ws //// //// John Sheahan (jrsheahan@optushome.com.au) //// //// //// //// Downloaded from: http://www.opencores.org/projects/i2c/ //// //// //// ///////////////////////////////////////////////////////////////////// //// //// //// Copyright (C) 2001,2002 Richard Herveille //// //// richard@asics.ws //// //// //// //// 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 SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY //// //// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED //// //// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS //// //// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR //// //// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, //// //// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES //// //// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE //// //// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR //// //// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF //// //// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT //// //// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT //// //// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE //// //// POSSIBILITY OF SUCH DAMAGE. //// //// //// ///////////////////////////////////////////////////////////////////// // CVS Log // // $Id: i2c_slave_model.v,v 1.7 2006-09-04 09:08:51 rherveille Exp $ // // $Date: 2006-09-04 09:08:51 $ // $Revision: 1.7 $ // $Author: rherveille $ // $Locker: $ // $State: Exp $ // // Change History: // $Log: not supported by cvs2svn $ // Revision 1.6 2005/02/28 11:33:48 rherveille // Fixed Tsu:sta timing check. // Added Thd:sta timing check. // // Revision 1.5 2003/12/05 11:05:19 rherveille // Fixed slave address MSB='1' bug // // Revision 1.4 2003/09/11 08:25:37 rherveille // Fixed a bug in the timing section. Changed 'tst_scl' into 'tst_sto'. // // Revision 1.3 2002/10/30 18:11:06 rherveille // Added timing tests to i2c_model. // Updated testbench. // // Revision 1.2 2002/03/17 10:26:38 rherveille // Fixed some race conditions in the i2c-slave model. // Added debug information. // Added headers. // `include "timescale.v" module i2c_slave_model (scl, sda); // // parameters // parameter I2C_ADR = 7'b001_0000; // // input && outpus // input scl; inout sda; // // Variable declaration // wire debug = 1'b1; reg [7:0] mem [3:0]; // initiate memory reg [7:0] mem_adr; // memory address reg [7:0] mem_do; // memory data output reg sta, d_sta; reg sto, d_sto; reg [7:0] sr; // 8bit shift register reg rw; // read/write direction wire my_adr; // my address called ?? wire i2c_reset; // i2c-statemachine reset reg [2:0] bit_cnt; // 3bit downcounter wire acc_done; // 8bits transfered reg ld; // load downcounter reg sda_o; // sda-drive level wire sda_dly; // delayed version of sda // statemachine declaration parameter idle = 3'b000; parameter slave_ack = 3'b001; parameter get_mem_adr = 3'b010; parameter gma_ack = 3'b011; parameter data = 3'b100; parameter data_ack = 3'b101; reg [2:0] state; // synopsys enum_state // // module body // initial begin sda_o = 1'b1; state = idle; end // generate shift register always @(posedge scl) sr <= #1 {sr[6:0],sda}; //detect my_address assign my_adr = (sr[7:1] == I2C_ADR); // FIXME: This should not be a generic assign, but rather // qualified on address transfer phase and probably reset by stop //generate bit-counter always @(posedge scl) if(ld) bit_cnt <= #1 3'b111; else bit_cnt <= #1 bit_cnt - 3'h1; //generate access done signal assign acc_done = !(|bit_cnt); // generate delayed version of sda // this model assumes a hold time for sda after the falling edge of scl. // According to the Phillips i2c spec, there s/b a 0 ns hold time for sda // with regards to scl. If the data changes coincident with the clock, the // acknowledge is missed // Fix by Michael Sosnoski assign #1 sda_dly = sda; //detect start condition always @(negedge sda) if(scl) begin sta <= #1 1'b1; d_sta <= #1 1'b0; sto <= #1 1'b0; if(debug) $display("DEBUG i2c_slave; start condition detected at %t", $time); end else sta <= #1 1'b0; always @(posedge scl) d_sta <= #1 sta; // detect stop condition always @(posedge sda) if(scl) begin sta <= #1 1'b0; sto <= #1 1'b1; if(debug) $display("DEBUG i2c_slave; stop condition detected at %t", $time); end else sto <= #1 1'b0; //generate i2c_reset signal assign i2c_reset = sta || sto; // generate statemachine always @(negedge scl or posedge sto) if (sto || (sta && !d_sta) ) begin state <= #1 idle; // reset statemachine sda_o <= #1 1'b1; ld <= #1 1'b1; end else begin // initial settings sda_o <= #1 1'b1; ld <= #1 1'b0; case(state) // synopsys full_case parallel_case idle: // idle state if (acc_done && my_adr) begin state <= #1 slave_ack; rw <= #1 sr[0]; sda_o <= #1 1'b0; // generate i2c_ack #2; if(debug && rw) $display("DEBUG i2c_slave; command byte received (read) at %t", $time); if(debug && !rw) $display("DEBUG i2c_slave; command byte received (write) at %t", $time); if(rw) begin mem_do <= #1 mem[mem_adr]; if(debug) begin #2 $display("DEBUG i2c_slave; data block read %x from address %x (1)", mem_do, mem_adr); #2 $display("DEBUG i2c_slave; memcheck [0]=%x, [1]=%x, [2]=%x", mem[4'h0], mem[4'h1], mem[4'h2]); end end end slave_ack: begin if(rw) begin state <= #1 data; sda_o <= #1 mem_do[7]; end else state <= #1 get_mem_adr; ld <= #1 1'b1; end get_mem_adr: // wait for memory address if(acc_done) begin state <= #1 gma_ack; mem_adr <= #1 sr; // store memory address sda_o <= #1 !(sr <= 15); // generate i2c_ack, for valid address if(debug) #1 $display("DEBUG i2c_slave; address received. adr=%x, ack=%b", sr, sda_o); end gma_ack: begin state <= #1 data; ld <= #1 1'b1; end data: // receive or drive data begin if(rw) sda_o <= #1 mem_do[7]; if(acc_done) begin state <= #1 data_ack; mem_adr <= #2 mem_adr + 8'h1; sda_o <= #1 (rw && (mem_adr <= 15) ); // send ack on write, receive ack on read if(rw) begin #3 mem_do <= mem[mem_adr]; if(debug) #5 $display("DEBUG i2c_slave; data block read %x from address %x (2)", mem_do, mem_adr); end if(!rw) begin mem[ mem_adr[3:0] ] <= #1 sr; // store data in memory if(debug) #2 $display("DEBUG i2c_slave; data block write %x to address %x", sr, mem_adr); end end end data_ack: begin ld <= #1 1'b1; if(rw) if(sr[0]) // read operation && master send NACK begin state <= #1 idle; sda_o <= #1 1'b1; end else begin state <= #1 data; sda_o <= #1 mem_do[7]; end else begin state <= #1 data; sda_o <= #1 1'b1; end end endcase end // read data from memory always @(posedge scl) if(!acc_done && rw) mem_do <= #1 {mem_do[6:0], 1'b1}; // insert 1'b1 for host ack generation // generate tri-states assign sda = sda_o ? 1'bz : 1'b0; // // Timing checks // wire tst_sto = sto; wire tst_sta = sta; specify specparam normal_scl_low = 4700, normal_scl_high = 4000, normal_tsu_sta = 4700, normal_thd_sta = 4000, normal_tsu_sto = 4000, normal_tbuf = 4700, fast_scl_low = 1300, fast_scl_high = 600, fast_tsu_sta = 1300, fast_thd_sta = 600, fast_tsu_sto = 600, fast_tbuf = 1300; $width(negedge scl, normal_scl_low); // scl low time $width(posedge scl, normal_scl_high); // scl high time $setup(posedge scl, negedge sda &&& scl, normal_tsu_sta); // setup start $setup(negedge sda &&& scl, negedge scl, normal_thd_sta); // hold start $setup(posedge scl, posedge sda &&& scl, normal_tsu_sto); // setup stop $setup(posedge tst_sta, posedge tst_sto, normal_tbuf); // stop to start time endspecify endmodule bladeRF-2024.05/hdl/fpga/ip/opencores/i2c/bench/verilog/spi_slave_model.v000066400000000000000000000074001457144405000260220ustar00rootroot00000000000000///////////////////////////////////////////////////////////////////// //// //// //// SPI Slave Model //// //// //// //// //// //// Authors: Richard Herveille (richard@asics.ws) www.asics.ws //// //// //// //// http://www.opencores.org/projects/simple_spi/ //// //// //// ///////////////////////////////////////////////////////////////////// //// //// //// Copyright (C) 2004 Richard Herveille //// //// richard@asics.ws //// //// //// //// 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 SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY //// //// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED //// //// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS //// //// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR //// //// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, //// //// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES //// //// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE //// //// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR //// //// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF //// //// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT //// //// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT //// //// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE //// //// POSSIBILITY OF SUCH DAMAGE. //// //// //// ///////////////////////////////////////////////////////////////////// // CVS Log // // $Id: spi_slave_model.v,v 1.1 2004-02-28 15:32:54 rherveille Exp $ // // $Date: 2004-02-28 15:32:54 $ // $Revision: 1.1 $ // $Author: rherveille $ // $Locker: $ // $State: Exp $ // // Change History: // $Log: not supported by cvs2svn $ // // // Requires: Verilog2001 `include "timescale.v" module spi_slave_model ( input wire csn; input wire sck input wire di; output wire do ); // // Variable declaration // wire debug = 1'b1; wire cpol = 1'b0; wire cpha = 1'b0; reg [7:0] mem [7:0]; // initiate memory reg [2:0] mem_adr; // memory address reg [7:0] mem_do; // memory data output reg [7:0] sri, sro; // 8bit shift register reg [2:0] bit_cnt; reg ld; wire clk; // // module body // assign clk = cpol ^ cpha ^ sck; // generate shift registers always @(posedge clk) sri <= #1 {sri[6:0],di}; always @(posedge clk) if (&bit_cnt) sro <= #1 mem[mem_adr]; else sro <= #1 {sro[6:0],1'bx}; assign do = sro[7]; //generate bit-counter always @(posedge clk, posedge csn) if(csn) bit_cnt <= #1 3'b111; else bit_cnt <= #1 bit_cnt - 3'h1; //generate access done signal always @(posedge clk) ld <= #1 ~(|bit_cnt); always @(negedge clk) if (ld) begin mem[mem_adr] <= #1 sri; mem_adr <= #1 mem_adr + 1'b1; end initial begin bit_cnt=3'b111; mem_adr = 0; sro = mem[mem_adr]; end endmodule bladeRF-2024.05/hdl/fpga/ip/opencores/i2c/bench/verilog/tst_bench_top.v000066400000000000000000000342331457144405000255140ustar00rootroot00000000000000///////////////////////////////////////////////////////////////////// //// //// //// WISHBONE rev.B2 compliant I2C Master controller Testbench //// //// //// //// //// //// Author: Richard Herveille //// //// richard@asics.ws //// //// www.asics.ws //// //// //// //// Downloaded from: http://www.opencores.org/projects/i2c/ //// //// //// ///////////////////////////////////////////////////////////////////// //// //// //// Copyright (C) 2001 Richard Herveille //// //// richard@asics.ws //// //// //// //// 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 SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY //// //// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED //// //// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS //// //// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR //// //// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, //// //// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES //// //// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE //// //// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR //// //// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF //// //// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT //// //// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT //// //// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE //// //// POSSIBILITY OF SUCH DAMAGE. //// //// //// ///////////////////////////////////////////////////////////////////// // CVS Log // // $Id: tst_bench_top.v,v 1.8 2006-09-04 09:08:51 rherveille Exp $ // // $Date: 2006-09-04 09:08:51 $ // $Revision: 1.8 $ // $Author: rherveille $ // $Locker: $ // $State: Exp $ // // Change History: // $Log: not supported by cvs2svn $ // Revision 1.7 2005/02/27 09:24:18 rherveille // Fixed scl, sda delay. // // Revision 1.6 2004/02/28 15:40:42 rherveille // *** empty log message *** // // Revision 1.4 2003/12/05 11:04:38 rherveille // Added slave address configurability // // Revision 1.3 2002/10/30 18:11:06 rherveille // Added timing tests to i2c_model. // Updated testbench. // // Revision 1.2 2002/03/17 10:26:38 rherveille // Fixed some race conditions in the i2c-slave model. // Added debug information. // Added headers. // `include "timescale.v" module tst_bench_top(); // // wires && regs // reg clk; reg rstn; wire [31:0] adr; wire [ 7:0] dat_i, dat_o, dat0_i, dat1_i; wire we; wire stb; wire cyc; wire ack; wire inta; reg [7:0] q, qq; wire scl, scl0_o, scl0_oen, scl1_o, scl1_oen; wire sda, sda0_o, sda0_oen, sda1_o, sda1_oen; parameter PRER_LO = 3'b000; parameter PRER_HI = 3'b001; parameter CTR = 3'b010; parameter RXR = 3'b011; parameter TXR = 3'b011; parameter CR = 3'b100; parameter SR = 3'b100; parameter TXR_R = 3'b101; // undocumented / reserved output parameter CR_R = 3'b110; // undocumented / reserved output parameter RD = 1'b1; parameter WR = 1'b0; parameter SADR = 7'b0010_000; // // Module body // // generate clock always #5 clk = ~clk; // hookup wishbone master model wb_master_model #(8, 32) u0 ( .clk(clk), .rst(rstn), .adr(adr), .din(dat_i), .dout(dat_o), .cyc(cyc), .stb(stb), .we(we), .sel(), .ack(ack), .err(1'b0), .rty(1'b0) ); wire stb0 = stb & ~adr[3]; wire stb1 = stb & adr[3]; assign dat_i = ({{8'd8}{stb0}} & dat0_i) | ({{8'd8}{stb1}} & dat1_i); // hookup wishbone_i2c_master core i2c_master_top i2c_top ( // wishbone interface .wb_clk_i(clk), .wb_rst_i(1'b0), .arst_i(rstn), .wb_adr_i(adr[2:0]), .wb_dat_i(dat_o), .wb_dat_o(dat0_i), .wb_we_i(we), .wb_stb_i(stb0), .wb_cyc_i(cyc), .wb_ack_o(ack), .wb_inta_o(inta), // i2c signals .scl_pad_i(scl), .scl_pad_o(scl0_o), .scl_padoen_o(scl0_oen), .sda_pad_i(sda), .sda_pad_o(sda0_o), .sda_padoen_o(sda0_oen) ), i2c_top2 ( // wishbone interface .wb_clk_i(clk), .wb_rst_i(1'b0), .arst_i(rstn), .wb_adr_i(adr[2:0]), .wb_dat_i(dat_o), .wb_dat_o(dat1_i), .wb_we_i(we), .wb_stb_i(stb1), .wb_cyc_i(cyc), .wb_ack_o(ack), .wb_inta_o(inta), // i2c signals .scl_pad_i(scl), .scl_pad_o(scl1_o), .scl_padoen_o(scl1_oen), .sda_pad_i(sda), .sda_pad_o(sda1_o), .sda_padoen_o(sda1_oen) ); // hookup i2c slave model i2c_slave_model #(SADR) i2c_slave ( .scl(scl), .sda(sda) ); // create i2c lines delay m0_scl (scl0_oen ? 1'bz : scl0_o, scl), m1_scl (scl1_oen ? 1'bz : scl1_o, scl), m0_sda (sda0_oen ? 1'bz : sda0_o, sda), m1_sda (sda1_oen ? 1'bz : sda1_o, sda); pullup p1(scl); // pullup scl line pullup p2(sda); // pullup sda line initial begin `ifdef WAVES $shm_open("waves"); $shm_probe("AS",tst_bench_top,"AS"); $display("INFO: Signal dump enabled ...\n\n"); `endif // force i2c_slave.debug = 1'b1; // enable i2c_slave debug information force i2c_slave.debug = 1'b0; // disable i2c_slave debug information $display("\nstatus: %t Testbench started\n\n", $time); // $dumpfile("bench.vcd"); // $dumpvars(1, tst_bench_top); // $dumpvars(1, tst_bench_top.i2c_slave); // initially values clk = 0; // reset system rstn = 1'b1; // negate reset #2; rstn = 1'b0; // assert reset repeat(1) @(posedge clk); rstn = 1'b1; // negate reset $display("status: %t done reset", $time); @(posedge clk); // // program core // // program internal registers u0.wb_write(1, PRER_LO, 8'hfa); // load prescaler lo-byte u0.wb_write(1, PRER_LO, 8'hc8); // load prescaler lo-byte u0.wb_write(1, PRER_HI, 8'h00); // load prescaler hi-byte $display("status: %t programmed registers", $time); u0.wb_cmp(0, PRER_LO, 8'hc8); // verify prescaler lo-byte u0.wb_cmp(0, PRER_HI, 8'h00); // verify prescaler hi-byte $display("status: %t verified registers", $time); u0.wb_write(1, CTR, 8'h80); // enable core $display("status: %t core enabled", $time); // // access slave (write) // // drive slave address u0.wb_write(1, TXR, {SADR,WR} ); // present slave address, set write-bit u0.wb_write(0, CR, 8'h90 ); // set command (start, write) $display("status: %t generate 'start', write cmd %0h (slave address+write)", $time, {SADR,WR} ); // check tip bit u0.wb_read(1, SR, q); while(q[1]) u0.wb_read(0, SR, q); // poll it until it is zero $display("status: %t tip==0", $time); // send memory address u0.wb_write(1, TXR, 8'h01); // present slave's memory address u0.wb_write(0, CR, 8'h10); // set command (write) $display("status: %t write slave memory address 01", $time); // check tip bit u0.wb_read(1, SR, q); while(q[1]) u0.wb_read(0, SR, q); // poll it until it is zero $display("status: %t tip==0", $time); // send memory contents u0.wb_write(1, TXR, 8'ha5); // present data u0.wb_write(0, CR, 8'h10); // set command (write) $display("status: %t write data a5", $time); while (scl) #1; force scl= 1'b0; #100000; release scl; // check tip bit u0.wb_read(1, SR, q); while(q[1]) u0.wb_read(1, SR, q); // poll it until it is zero $display("status: %t tip==0", $time); // send memory contents for next memory address (auto_inc) u0.wb_write(1, TXR, 8'h5a); // present data u0.wb_write(0, CR, 8'h50); // set command (stop, write) $display("status: %t write next data 5a, generate 'stop'", $time); // check tip bit u0.wb_read(1, SR, q); while(q[1]) u0.wb_read(1, SR, q); // poll it until it is zero $display("status: %t tip==0", $time); // // delay // // #100000; // wait for 100us. // $display("status: %t wait 100us", $time); // // access slave (read) // // drive slave address u0.wb_write(1, TXR,{SADR,WR} ); // present slave address, set write-bit u0.wb_write(0, CR, 8'h90 ); // set command (start, write) $display("status: %t generate 'start', write cmd %0h (slave address+write)", $time, {SADR,WR} ); // check tip bit u0.wb_read(1, SR, q); while(q[1]) u0.wb_read(1, SR, q); // poll it until it is zero $display("status: %t tip==0", $time); // send memory address u0.wb_write(1, TXR, 8'h01); // present slave's memory address u0.wb_write(0, CR, 8'h10); // set command (write) $display("status: %t write slave address 01", $time); // check tip bit u0.wb_read(1, SR, q); while(q[1]) u0.wb_read(1, SR, q); // poll it until it is zero $display("status: %t tip==0", $time); // drive slave address u0.wb_write(1, TXR, {SADR,RD} ); // present slave's address, set read-bit u0.wb_write(0, CR, 8'h90 ); // set command (start, write) $display("status: %t generate 'repeated start', write cmd %0h (slave address+read)", $time, {SADR,RD} ); // check tip bit u0.wb_read(1, SR, q); while(q[1]) u0.wb_read(1, SR, q); // poll it until it is zero $display("status: %t tip==0", $time); // read data from slave u0.wb_write(1, CR, 8'h20); // set command (read, ack_read) $display("status: %t read + ack", $time); // check tip bit u0.wb_read(1, SR, q); while(q[1]) u0.wb_read(1, SR, q); // poll it until it is zero $display("status: %t tip==0", $time); // check data just received u0.wb_read(1, RXR, qq); if(qq !== 8'ha5) $display("\nERROR: Expected a5, received %x at time %t", qq, $time); else $display("status: %t received %x", $time, qq); // read data from slave u0.wb_write(1, CR, 8'h20); // set command (read, ack_read) $display("status: %t read + ack", $time); // check tip bit u0.wb_read(1, SR, q); while(q[1]) u0.wb_read(1, SR, q); // poll it until it is zero $display("status: %t tip==0", $time); // check data just received u0.wb_read(1, RXR, qq); if(qq !== 8'h5a) $display("\nERROR: Expected 5a, received %x at time %t", qq, $time); else $display("status: %t received %x", $time, qq); // read data from slave u0.wb_write(1, CR, 8'h20); // set command (read, ack_read) $display("status: %t read + ack", $time); // check tip bit u0.wb_read(1, SR, q); while(q[1]) u0.wb_read(1, SR, q); // poll it until it is zero $display("status: %t tip==0", $time); // check data just received u0.wb_read(1, RXR, qq); $display("status: %t received %x from 3rd read address", $time, qq); // read data from slave u0.wb_write(1, CR, 8'h28); // set command (read, nack_read) $display("status: %t read + nack", $time); // check tip bit u0.wb_read(1, SR, q); while(q[1]) u0.wb_read(1, SR, q); // poll it until it is zero $display("status: %t tip==0", $time); // check data just received u0.wb_read(1, RXR, qq); $display("status: %t received %x from 4th read address", $time, qq); // // check invalid slave memory address // // drive slave address u0.wb_write(1, TXR, {SADR,WR} ); // present slave address, set write-bit u0.wb_write(0, CR, 8'h90 ); // set command (start, write) $display("status: %t generate 'start', write cmd %0h (slave address+write). Check invalid address", $time, {SADR,WR} ); // check tip bit u0.wb_read(1, SR, q); while(q[1]) u0.wb_read(1, SR, q); // poll it until it is zero $display("status: %t tip==0", $time); // send memory address u0.wb_write(1, TXR, 8'h10); // present slave's memory address u0.wb_write(0, CR, 8'h10); // set command (write) $display("status: %t write slave memory address 10", $time); // check tip bit u0.wb_read(1, SR, q); while(q[1]) u0.wb_read(1, SR, q); // poll it until it is zero $display("status: %t tip==0", $time); // slave should have send NACK $display("status: %t Check for nack", $time); if(!q[7]) $display("\nERROR: Expected NACK, received ACK\n"); // read data from slave u0.wb_write(1, CR, 8'h40); // set command (stop) $display("status: %t generate 'stop'", $time); // check tip bit u0.wb_read(1, SR, q); while(q[1]) u0.wb_read(1, SR, q); // poll it until it is zero $display("status: %t tip==0", $time); #250000; // wait 250us $display("\n\nstatus: %t Testbench done", $time); $finish; end endmodule module delay (in, out); input in; output out; assign out = in; specify (in => out) = (600,600); endspecify endmodule bladeRF-2024.05/hdl/fpga/ip/opencores/i2c/bench/verilog/wb_master_model.v000066400000000000000000000126761457144405000260330ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////// //// //// //// WISHBONE rev.B2 Wishbone Master model //// //// //// //// //// //// Author: Richard Herveille //// //// richard@asics.ws //// //// www.asics.ws //// //// //// //// Downloaded from: http://www.opencores.org/projects/mem_ctrl //// //// //// /////////////////////////////////////////////////////////////////////// //// //// //// Copyright (C) 2001 Richard Herveille //// //// richard@asics.ws //// //// //// //// 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 SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY //// //// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED //// //// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS //// //// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR //// //// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, //// //// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES //// //// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE //// //// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR //// //// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF //// //// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT //// //// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT //// //// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE //// //// POSSIBILITY OF SUCH DAMAGE. //// //// //// /////////////////////////////////////////////////////////////////////// // CVS Log // // $Id: wb_master_model.v,v 1.4 2004-02-28 15:40:42 rherveille Exp $ // // $Date: 2004-02-28 15:40:42 $ // $Revision: 1.4 $ // $Author: rherveille $ // $Locker: $ // $State: Exp $ // // Change History: // `include "timescale.v" module wb_master_model(clk, rst, adr, din, dout, cyc, stb, we, sel, ack, err, rty); parameter dwidth = 32; parameter awidth = 32; input clk, rst; output [awidth -1:0] adr; input [dwidth -1:0] din; output [dwidth -1:0] dout; output cyc, stb; output we; output [dwidth/8 -1:0] sel; input ack, err, rty; //////////////////////////////////////////////////////////////////// // // Local Wires // reg [awidth -1:0] adr; reg [dwidth -1:0] dout; reg cyc, stb; reg we; reg [dwidth/8 -1:0] sel; reg [dwidth -1:0] q; //////////////////////////////////////////////////////////////////// // // Memory Logic // initial begin //adr = 32'hxxxx_xxxx; //adr = 0; adr = {awidth{1'bx}}; dout = {dwidth{1'bx}}; cyc = 1'b0; stb = 1'bx; we = 1'hx; sel = {dwidth/8{1'bx}}; #1; $display("\nINFO: WISHBONE MASTER MODEL INSTANTIATED (%m)\n"); end //////////////////////////////////////////////////////////////////// // // Wishbone write cycle // task wb_write; input delay; integer delay; input [awidth -1:0] a; input [dwidth -1:0] d; begin // wait initial delay repeat(delay) @(posedge clk); // assert wishbone signal #1; adr = a; dout = d; cyc = 1'b1; stb = 1'b1; we = 1'b1; sel = {dwidth/8{1'b1}}; @(posedge clk); // wait for acknowledge from slave while(~ack) @(posedge clk); // negate wishbone signals #1; cyc = 1'b0; stb = 1'bx; adr = {awidth{1'bx}}; dout = {dwidth{1'bx}}; we = 1'hx; sel = {dwidth/8{1'bx}}; end endtask //////////////////////////////////////////////////////////////////// // // Wishbone read cycle // task wb_read; input delay; integer delay; input [awidth -1:0] a; output [dwidth -1:0] d; begin // wait initial delay repeat(delay) @(posedge clk); // assert wishbone signals #1; adr = a; dout = {dwidth{1'bx}}; cyc = 1'b1; stb = 1'b1; we = 1'b0; sel = {dwidth/8{1'b1}}; @(posedge clk); // wait for acknowledge from slave while(~ack) @(posedge clk); // negate wishbone signals #1; cyc = 1'b0; stb = 1'bx; adr = {awidth{1'bx}}; dout = {dwidth{1'bx}}; we = 1'hx; sel = {dwidth/8{1'bx}}; d = din; end endtask //////////////////////////////////////////////////////////////////// // // Wishbone compare cycle (read data from location and compare with expected data) // task wb_cmp; input delay; integer delay; input [awidth -1:0] a; input [dwidth -1:0] d_exp; begin wb_read (delay, a, q); if (d_exp !== q) $display("Data compare error. Received %h, expected %h at time %t", q, d_exp, $time); end endtask endmodule bladeRF-2024.05/hdl/fpga/ip/opencores/i2c/doc/000077500000000000000000000000001457144405000205045ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/opencores/i2c/doc/i2c_specs.pdf000066400000000000000000006350171457144405000230650ustar00rootroot00000000000000%PDF-1.3 %âãÏÓ 130 0 obj << /Linearized 1 /O 132 /H [ 807 583 ] /L 211471 /E 55772 /N 18 /T 208752 >> endobj xref 130 15 0000000016 00000 n 0000000651 00000 n 0000001390 00000 n 0000001563 00000 n 0000001696 00000 n 0000001922 00000 n 0000002431 00000 n 0000002659 00000 n 0000003121 00000 n 0000006404 00000 n 0000035127 00000 n 0000055326 00000 n 0000055466 00000 n 0000000807 00000 n 0000001368 00000 n trailer << /Size 145 /Info 116 0 R /Root 131 0 R /Prev 208741 /ID[<39fba8a04ae75ebb1483bac48e64f588><39fba8a04ae75ebb1483bac48e64f588>] >> startxref 0 %%EOF 131 0 obj << /Type /Catalog /Pages 118 0 R /OpenAction [ 132 0 R /XYZ null null null ] /PageMode /UseNone /JT 129 0 R /PageLabels 115 0 R >> endobj 143 0 obj << /S 409 /T 504 /L 569 /Filter /FlateDecode /Length 144 0 R >> stream H‰b```"uÆŸ   ÀÀÊÀçh€ð.žc`àTãXÎoÃË)ðï8×MÑ‹üçE×ñÚñ©snájœÆþÅRZÕÌ÷pÐUÙ€&°>IiÝ<Ž‘ÇNÈ.çäÙæd»YÜŒý†%ã­‚I‡9'Ÿ“™6Ãø¦îf¾ŒrN3oŽ,¦å7Dq:”us˜ù wÈ. Hùtˆç"kcù Ãíe•L2-Û‚xo©4ëN6tk/LòæQ (ŠŠœt5pi§ŽÁÌPÇ“™I‡9§F8†¨IEºÍa cÅCd¦Mc`èhù’I££H*W€ì ‚-½£(åâââf¤¥˜Ä²ÅA‚ &k8XM¨€À(lVÆÀ¤Þ5•˜pj0e`¼:Hs±"8,MÑPÁÀ°–ñÃzÆ™<óòÿùmbgc’`lf˜À, ´e%c(\f¯a8ÀÀ°dÖY†YÓ6«²3è02Ââ×›éOqY¸@nËä30«ö2€SS¿13£vÔôÖ· þ3Y'†–. ½é›Èç”.b`Öjò0ȯ•Þ endstream endobj 144 0 obj 460 endobj 132 0 obj << /Type /Page /Parent 117 0 R /Resources 133 0 R /Contents 138 0 R /Thumb 75 0 R /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] /Rotate 0 >> endobj 133 0 obj << /ProcSet [ /PDF /Text ] /Font << /TT2 135 0 R /TT4 137 0 R >> /ExtGState << /GS1 141 0 R /GS2 142 0 R >> >> endobj 134 0 obj << /Type /FontDescriptor /Ascent 891 /CapHeight 0 /Descent -216 /Flags 34 /FontBBox [ -558 -307 2034 1026 ] /FontName /OKLLFM+TimesNewRomanPS-BoldMT /ItalicAngle 0 /StemV 133 /FontFile2 139 0 R >> endobj 135 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 122 /Widths [ 250 0 0 500 0 0 0 0 0 0 0 0 250 333 250 278 500 500 500 500 500 500 500 500 0 500 333 0 0 0 0 0 0 722 667 722 722 667 611 778 778 389 500 0 667 944 722 778 611 0 722 556 667 722 722 1000 0 0 0 0 0 0 0 500 0 500 556 444 556 444 333 500 556 278 0 556 278 833 556 500 556 556 444 389 333 556 500 722 500 500 444 ] /Encoding /WinAnsiEncoding /BaseFont /OKLLFM+TimesNewRomanPS-BoldMT /FontDescriptor 134 0 R >> endobj 136 0 obj << /Type /FontDescriptor /Ascent 891 /CapHeight 0 /Descent -216 /Flags 98 /FontBBox [ -498 -307 1120 1023 ] /FontName /OKLLNG+TimesNewRomanPS-ItalicMT /ItalicAngle -15 /StemV 0 /FontFile2 140 0 R >> endobj 137 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 122 /Widths [ 250 0 0 0 0 0 0 0 0 0 0 0 250 333 250 0 0 0 500 0 0 0 0 0 0 0 0 0 0 0 0 0 920 0 0 667 0 0 611 0 722 333 0 667 0 833 0 0 611 0 611 500 556 0 0 0 0 0 0 0 0 0 0 0 0 500 500 444 500 444 278 500 500 278 0 0 278 722 500 500 500 0 389 389 278 500 444 667 444 444 389 ] /Encoding /WinAnsiEncoding /BaseFont /OKLLNG+TimesNewRomanPS-ItalicMT /FontDescriptor 136 0 R >> endobj 138 0 obj << /Length 3207 /Filter /FlateDecode >> stream H‰”WËn]ÇÜ߯8KˆŽ§{¦çáU'p"À‹ÈÜ^×´Dƒ4J¶¿OUõ¡ÒÈÂÄ{»ï<º««ó׫ÓWW¾Ùvõã©Í­à>lÌ}õÒ·¶Æ>úvuw*úíáÝ鋯¿µíÝ(®ÎüóétñÏË«ŸNµ`‹å7ÃÖ>qFØÚ½ã)Î¥O¹ÕÝž_ôªì¥p5N?¾}:}wñÕ«oÞ~øxýpi}÷‹í«ûãÛõå+ÛëÅvùýÕklXuÄÅvõ·Ã¼o¹>ßüxs~ûñæþçxßK“ ù-ÜñQbk¥}ö\huÑmèÈTù±»m²²oµõ}¹¶RÜÿêñ+=øË¯ßß?|¹½¹9¿ûðÃöë‡ß.c‹ë›ÛÛëtÁh ‹G8ó[ºÂY}ìöù«OaxxuØŸï¹þù|ÿpýa¿x'‹­ì1û \Ntž»c=¹øÄ‹WuonZ1\+x³Ï϶‘¾¹þm¿€[ÉÏ•^agŸÍŸÝmÕ>Ÿp@ôú×ÛÿlõO—q±9~IìV¢‘GÛÓmYû÷«Ó¿þµ,A#ðK_Ïw'èö²æñ÷Íרùzóí§ a¾}ÚÚöÍöÝ÷eûôvÒÛ¶›íäwÖ¶õê{«k»ƒ†„©[G`¿—º×}€ \wˆ¶O„æ|ê±W kíöÔ‰Cý^·{¦½”}bYGh .)Ûòpâ~pË›a;e@ }_È7pJ×F¤ZÛ'¤8ûÀ~›sçϲwë8À–ƒN°xâ„È4-sl}Œ}JZ:ø<\W±jYâÉa4HÊkfLÕ*]Éà4pر#5U|Gùä†aq˜¬q ]|¢²§íµ 8hÈ\áS0½0+MŶ–ðsÒ¹ÓªaK º*ªI®`0åb =-E[2ÇFÚÖÄ 4´Ç±$Pn]é„ábFj,ÒRØ,Ã@ÑÙÛÿ×,™ ¢•í‚BT ¥8ë¼¹kÿã@A™T'ªCýÞÐfd!› CK©N &}´˜Ìú¿ÒTR…²r’IpQn¸+¬ÜQEŽž>Ý:+ØÌéX×Lƒß‹ÒŠÃGPuTñcDS9e5½t]p°>…ç¾Åî`„mg¨`(Cã (kL#Kš“€šî-3‰¡#p=K­;O€c ÀUTù•> );€µìD”„¦l+ÃAA;’âÄlÃÆ²›È¼ôã|øf¤wwyÄPÏ´ æê5CÛ3¿ƒ€‹-²\làäÍ|`õ„]d3›F­UØÏc­lЧQm@,á:[_dírLNÆOU·d  ˆ„{è ldå°×x 'äXgã Ó1ì^žÉbÆiÃpíã‹á€Å Í ñߦeôžàR3.­«P±L³ úžå—ÓB×c,˜LΕ‡¿y¢–EƒK^Tå5 3º7M™·¿óJôì¨>‘Tâ¬z'£9ùôŽé4K'ƬÉék½¥¿qÃÙ¡ÁËGkX?ìÐŒšTÀd~œ³P÷‰4ð8§—™$ËŽ00¬‘=Âæ¡™5#ª¹f´lEóQ³Ô}OGŸ;EGGËø¡›,gD¡àÄ×Ñ‚”5'2çä³ V!ÉÔæÇ1)a5KÙ(¢µ-=Kø#)‰†W”°ƒÛSc•±p³™**®ÒãÔ+9 \œ±ƒ‚ŒÔTëÚ=7DVèŽîéê!š‹]Š¥ Åbjê|˜ÃÁ ǾÛp‹a“Xg¤/l¿½ر3%Ñ)`8@hx6»¸ÞŽ$üÆã‹k'Ïr 9Á I«ŽÃÓûŠu95n'WfÑ:‚Æbv~>]& Û:¶ä$]8ↂ±cfÅÔË@Nö¬Ð‰£h`,ª»B‰&i“3,x‘LÚcMøžOòÍEE2NØ3E¾Ö&,§§"DÖÌ€XeIEP >³›%gwñ èN枺2ÆÙü¤£ßb†G».o3g]Äê&à‘„ZBc\1Bæo|_Ì ÙÔux_TàçÅÄtãÖHVçt7rõ *Mh¼³£å9hõÂpú u¬4êî„J m •Lê©à\¤¬ÅªJï|x­Cœõ*+µÒŒÌWéÀ! „ªiz=ÎJaƨ/ÕŒÂ&ž<:*4•m×ÙÜ×Å-4«!5$65]5 sq´<¹zîb˜™¶²yñ!—azÈ¢Õ§ü¶£N¸†>‘Zr¬ã +ÏlUg>3‡íÈÎÄ)]#` Â㦃Ԇâp¸O“Oc2‡*ÊXa€§0ËÇÈ— 4®[P7ñ wðEÂ[y´ÆjK+˜çßÙ•¶â<¾©`PËžol'™•õÇg–~çÈ~Lõœ-ø±8l"M2´œ#ÿ:Xû1k5Q…óßË.›3ÉA †Þ7Š Áü˜ )î\ÛC¹#α— 4;SΤ• ñŽg%«¿$\æ)UkÄâçJ^|q„I¹íÛÐ<…˜;ÆÀå±¶¯Sy€|ú·ZÀWô„³©.`xüiË7³ ÎK§Ó÷:ÓT@¢Åõð gž¬[É ô£Üýò6,÷(Ž÷)>%0±b\~n Püþó›¡ endstream endobj 139 0 obj << /Filter /FlateDecode /Length 28631 /Length1 46372 >> stream H‰\U tMWþþ½Ï¹7‚ˆF$Þ7nBGïDîˆWÌhE°$’hŠå=A§^Ót¨R:C…éÐ5¹ˆw=Š©N…x”±°ˆG %eͪvFåîù³¦íœµöÙçÿÿýý¯oCÔÅ"h¤ ýul§qÓ7¥›¸;$;?« ׄF»:²4{æ WVЃ{üw_0!wJ~'®¹g_0eÎø‡æºPBF^nVΙÁ«èï1mºæq#d@ýã@ЧüŽÌËŸ1;úbìz~W 6Oy#;K^,¬l¢Mƒâü¬ÙuG†ô¡ý|껦fåçN{4Øýñl+xcú âæ³»´úÁ´Ü‚ÉEÃÊ÷" ¾ÏþZ؃jÞ¦z-šæ6_b5ü©æ…=nÿ$S¡Cè-òåûß' K‰X‡cƒ3JÃ+¯"–„£”tÇ@ Fl D4܈4„"_K]” #¾‘d,–( Å&´Ä4D"ÞÅféob1.ÉDì¤õÇ’€Ö$)æ†!Íìç@O¼$-ø'PÜæ&=LÇoqW`õöfzIï0ÕìÇh\ ešb¦bÖc Žàž¼-Ç-Ûd¢ Æaš8%D¢u¡ùñöÕZ{Í)sÁÔßB¯U;+Ù|‹<°Ää1£!èL™Š°7$\ºè$!ŽgÁ|”èhbLÁrÆvHæI‰2ÅŒ¦²±2[Ž«ûªýÔÌÅ+Œ/ŽHW Ÿá$Ñ[² ×ùþ¾fh/OZŠ·ðfîå”Ô“@ÏŸÉM¹­§êûôü'Tâ{üK¢e¢,P}U¡Ý©j±Ù‹VŒ0>`¦ài% 2ж›Ô,µ@-Ôûô +ÚzbâÍI8KÝBì`\çp g½’e°\Q ôû-3xc‘Ç(–bâ™ØRKêHqIgéÆÈæÉq¹­š)·J×ãt‰½ÊÌ1«Á^ƒ\ZNÂ,Ã~”ã¡RÓ2––}%MVË;rJ•ëz´^g%Xë¬Ö ë…]ß>á¿à¯`Ö«ýtÀ`ÊŒÇ\æúå$®‰–&ÒœžzK*=•ñ2_Šä=Ù*ÛeŸœ–óòPžÈ¿U¸Z¥ÖªÃꯪ\×Ít[íÑÔeV„uÍúÑ™UÕÌÌÿÄÔ6íLgSd6™ë¦²¦ MÙñ}‘ÄîšL.XŠ"¼‡™óRœÅeöÝ­¹‡§¬Áâ`75"¢–â–ÖÃèFHºÌ’²FŠås¹-÷ä…‚ª£ZRÚª®*UV…ê±z¡µ['êÙú}}Q?·æØ(;í½öSÇ=gT@Ù‹U7ýðOô¯óo4]Ø‹v^g.ýØs©¬rÞ¤LÃLÌbŽæ2ã›Ø9%ØÃøeÌ}9®“¡ªñVËCVâ;TÁ/Šõ´%€ò{V&‰Ý’)¹¬íK™'…²\ÖS6Êd ó{A.Ê%¹%wåc‚j¯UF”¦F©1”±*[-V+U)场¢®«;ê¹Öõu ÝZ{õý¶^¡}ºT¥/[­¬D+Åšl¶.0ò{€=ÖζWÚ[ì­ö ûKûžmk988]iÎáÎåÎ?;;o8M@köÓ`¢oƒŸž52ÊŠUEbÔÆ}TÍÐgÔZÙù3 Ø+ˆ cÕ}D}8¿HßÑŸ¨BÀòÔüîM+ç(³/Y¡öœVñ-ùp­ÎRGÕ.]uOk™UFÖ™Cœ[Õ-åT%ÔxÄjŒÅkÒÿ´^Çæ¿Ü^Áœ&«›²S}®RÙÉWQ¬c6#Wº]öâ9Þ•ƒÚ%ûØw qQñZ+¶ªŸêëW3=X¡ƒ2ÌœVmÌ#NýmY†ëú9{ÿu"±ØŽ»¬úe‰“–ßj‚ d¾æØÈ®ýöp¿´"9AÏpPÇ!ê`Íc«þæ÷Ø3ôù^%²œa5Ì=´šÉÁëÉUÕ<„vY¤f¢᬴d/9®á¼ƒC:Qz›Z¤ŒþÂrá÷¨ÐƒxêoÈOM%Žžò1‘q¸Ì}1=LB<âeœdÀÃ?)hnò‰|;¹(ÁŒ6ì‘v;œ“AŠcd¯pfq]Ë_IÍRÎáu¤ÈJìñçà8ï•p‰’Nì¦J{¦]dï°Kí£öYGGÌæÔndïà;Þ.Éf.¾Áìõ~œžÎO"Q¤ð›¢Fê#H’Æ( F“·û1¬ätz)Ä*ÎÓ6Þ!çðT‚e4Žâ*''ŒsžÍóèg ^cÕ§c;Ùq‰ìáNš£-óô\‚$^ÍàyÕ<»Ž<{œ˜nà>™ÃÔàŠ‘žâaõ²ñCõ,ó„®H“]H6ûØ CàÑeø‘¼]ûqF‹i—ÉÞB3t·ïŠBŒˆ‰WõiÈÛ0ˆ]5œ7{oy“(ê1Ž*„ÊPtñ÷GwÞ±‹foKHžÐ·Oï^={tïÖ%®s§Žb_mÓ®m›èÖ­¢"Ý-#\-š7kÚ¤q£ð°†¡ B^©\/¨nÚµœÛÒJãu'gº|­2}V+wJJûêow7²~¶‘ésq+ù—:>Wfšë—š Ôÿš /5þ§)Á®^èÕ>Æåu»|g=n×É–Îõj{¤ËWY³\³.ªY×å:"‚.oxžÇå“L—×—<3o…7ÓCw»j&¹“rÛÇ`W`m.kså sì’°>R³Pa޻ꔯ±Ûãõ5r{ªøt”7+Ç—6,ÝëiñÖ«56Šë Ÿyììš¼61/;a–ÁÏ]á¿JY¼¶Á6/? ».m×(`Q ´”†8)3˜¦!jBZDPÔôaÚ0v¢ÄT9Š”´?PTFiÒà¨I*H€$URU­âéwîÎ,kcZÕòçsï9÷qî¹ß=gˆ•„,)Òa´[dTYA1„"bK‹X^±¾OCÇôаÙ7ä§öx0½ÓèlÛµ”¶ï‘ľÕÖÌï¼7ëV‹gE¢GR­9ŠY3k»Î]Ó<¢[g£©ÖÿŰæÊyµq³[÷!ˆ Í:v“Ç¢–t[ê|>Uâ|[ŒÖÄwèVšQel3wÄq5sL‹šöçÌ Ÿ·ß¡95ºÙ5ÖŠ#ÖV;p™Mû_˜Ög·”„ü™‰ÀLËpéSS[’6ÑùÕДŒ¬Äu „¥wèð$jàLeügK™e†Ÿ˜„YV'nd»•‰›þ Öó|Ë“ç7tó3Œ×ÇkÚ–çÿŒ¸É™e?͆þ›êcTˆñUè/†l…]†¾8,À XãÈÕÀ Þ8‰5Šx!‰òî¡Íž×ÉïÙDAÈF í"õ]Z •S3Tîcg ½¶|ïq*¸{Ñ߀qKY¢Ÿ¯vÓØëÑ^ÄkâYÓ€,èØÿ2û QFO¨dß@;koÆÜ rœÖA®‡\}ôkѯŜb¹ß~íj´ƒˆÍÖ‹³wS°sàg£X¯›VÀ6ûfB.2aÏV è9éUzòËj¥‹scŒ8÷¦[g‚\%|šì#û— öI.·?ÞÞu|«» ìW*ˆ:”%T Ù¼¾| gn" ö Ï?©’á#ûsœë=`†ÚIè_ƒŸži÷iüz >}Jë` jOÒè—Ê÷ƒc[iüS*Óò( çkÅØj [p¹ÐI-¸rªú>Ím>;<çÄÉϱAŸïç³?‚×1¦hfn ~u’ûsÌùî3¥Mcà¦} ¶¯_ù*`ÿ8s0ëV:<,JJ€¹—‚BöÁß“‹G(¸ÇAð*pxØ lå1X·ã™']X³ýyÌæÖâ{¨w¸“ ~ Ž%ÞÌÇz`¡ám9˜Š±Ùü^˜³â½à-0™[ÌW2¿ïÏJ/ó9ùÎSdŽç 5³âìàVŠÌgž±T†©XÈb*dÎ2ß\)ÞdÂÿ|~®Lúƒ÷Éo„¥¤<~«ÌŤÄ;åX$åL*škµgáû·èAµ€ê•.Z©¶Rb!ÿŒñ~ö u„ž—GAï°à ÎHOO|Ï'½#ÒÏ0½„Xæ©—èiHC‘ç©#’ÇsÖ¾æ9+LÀm§Ê‰†6–ŒTÛ«ÿ_ _öœ¥­hàÁÛ¡8+y?”º+¡z€b_P:éë’†¼ñžˆ>v©a¼õ0•ªÃÈ ÙFœò ß¨ýœë¢¬ý¹¦×Ð~¹¯T!¼Oì%_F¾x}ȵ)<ǹI¸$¤Ë×IdÐá’Ìgäµ7ù–#oB†ÀÉ® œŸ¹>pŽV'ùêò²€B .?'òÔáç:‡Ÿ·óò–\qj çî,~§ØËë¼ÙÍœ9ÇqŽä<Ç9Î?Q&ç÷ÓS8Ã"_ÂÜÄ»ž ìû<‚„Üfï“Ø;“5U¥û\pk©¨£(Í­£ž.êvr×Ý¥žJÔ¦DõS[?¶‰úB¿CñQ–|q- )j)mU.’¢¬CÝ„^-ANfÛš¯Ü¤\õ(rÝöuåqZ.êæjڢĩœç*ƒ”áy„ž?¡–°?ëq½‚dû¯m¥•œ <;EíÝáäãß½O£tŸJbÌ%ä¦QÊⳈÔÓ<žû¾~°–÷ÍUËEt†˜ówJçxpŒÆÅ"Q›ëÅš£"ŸMkbÏßÓ&†6—ê½o!gò^;)ž&s^´¯:5»õ´NyßAéD‚ÿ—(])¥ÔÊZ«Ô‡ónŒ=å|W°DÞõþ&r8â9JMâ{‚mßÃwÏ+´Š¡öÓ|mòc%rÿ^ÊÕîEŒZȼ^“Øú:ñ}ÂuŠ¿ø½,§t-Žùx®7¼v‘ˆm8ºÒ7µ¥2ä~I÷rÅ·_?î½_âï¨ÇRðCG—›R@¾*ê+ÛnÊåsòE»KÔûR )¿B}ü9þeða6-—;¨L6©LM÷ÙÑþ.•)¿N ìQu&rx5ô?Ž`ÞÏ Ø>Á˜_€‡0÷>´ß¦ˆò•yE?\} røæ}ú”ç©OóÓa¹Ã>!Ögûƒ×ãyÀBW²¯.&õùç”>©¿Õ·üLú8‰¼¯+æñ˜R{”Èþ3—còq: œ‘ßÄÜa:(=I$ឤ÷S~M«…q‡¥^` ªé4d äÀp ¸ÜT—!ÇéÈ4ü«À/R”%ìÏ¿®¸¶Tð^“éS¡þ•Æõ=‹éa†Â7aˆnš–ªßF®]„oI@ÙGÚ4ÚåõÑ.ù/Ðo¼ }O!=¥î¢ûîäÏ ý‰&¾›3Þ-øëóÿk½»î÷aàë"þghàÐUÄßKiÒúªô­TNцӋxž¦Eî=Aß+ôî\y@i¢ðD=Ú2ÜþÄ{½SëžK…ËÞÅô}†zåßÜW}l[Õ¿ŽÇy¶“´MIÚ>c»ÁušÚ¼¤Mä¹_tlnÓ)Ú]“IȨÀÚ&º»lÚ‡´QK Z(PhMïc«Ûê?¶Â†P24)iaM·¶‚2 Y7`ýHºß½Ï %jÅ&mÿLÖïüι÷ÜsÏ;ïú¾{á̶K2äN¹Æ–*{§Ä´=3ïõÐNQ§u`¢ÖØ,{È·$X ö£D®óoJÌØí8WµÛëSµÝ* ´Ý)Ú ø~_⪺~EÖsʱdúýL¯óÙïGæåø üÎôêÙ<³¾ ûÅ'Öü&{½ÏØr/9;ËçãÿÄÇÿ üW®óÿ øïüx8ö¿ž‹b{„OîòŒº gÕ-ø_¼FZ ™Lré(!—±*&/ƒ‡Á}øFTƒDц¯Ãäjð|àèûßÙ§’ŽjòHá\‰¾©ð{ÈÙq¦æA¯Gü¿û€£ý,ü€ô»­€ûÐÿ¦=vê;àÁ¾þ6ð*Ú°¢/ï„þ<°úûÀ?½@ÔŽw ~—ÉóÈ5î¡ÿ]¾Îýãßeû¾A"Ó<ûññ¶OçÙwŽé÷ÿi<}—¸«:îMo_u÷¹ÞçŒõãº8Kq¦ Ès´<ËÊó³¿ã¯“ Ñù_À‹À/ƒ‚ñWˆ¦ò|ÒòúŒ æÛ÷}ü²ÝOñíÄ?Ã$5Êí¸ðØóáˆ/åûùår?¿—4‚ïáw C÷ð'‘©Éßµ\n™ß»Â7×äçpÍ›¯3ðªÒ½ƒ|‰òIr–K3²ñ2žÃcæP9RÒ«¤É_„ù~Á3dú†ø.2ü,HÌÕóü#åö¡Œ‚ùž% ’,Ícäã.¬.ŠŠŸGÅÏ«ÙþaÕ®4H¼–ÿ„Ć¢ž†vš×£Ðti À.ÇßCÏ{ð‰ò“$Åß Y º!¨àa¥„ÂÆa¾“ï@%|¨E냖Ë#3Û!**•Û«Ìc´òl#ˆiòQ«j¾Ñ5ÀV’µæ×È®2”î»ö»ÀÀíò ò HUb—ª@ÿK0)ñòï©ÁW¬²r#·ß³ r70 Œ¸µãÚIÀáÞfy¼†w€M þœð4èƒ|=}½ªÖz17 r¾Õ‚²i€‹d#ß îБà&Á²wƒµ²Ùˆ ð ê7=h7‹Ê”²N¸ìųÚ*-—Ó­QŽu¢Ä£šë ÿ;±æT:c³z¤ùÃ×Ä€ ZdÅ ËW%~7TÚéú€~ÀiÀÝÀ‹4È)Õâå+ðL+ðùZÇNAN í7“V`7p8©ÖN€¡=†:!³CÄ(l¤ t È@1âõ˜§Þ1È ÐŒ¼¥Èc)ú*¸ŸLâû¬ã¤Ûm6Ó4IÓ4Kó´#]”ö¥ËKÌå‹—æ]R,“" ÑÔéJ¹2.s™®6÷¹ü.–»’ÅÍ ³ÂÙÜp"ñNâb‚W4eÙb6/£åd 8¢>X>X>ó‡|¨e¬e¼…%Æã >trìäøI>T?V?^ÏÍDM³ÑÔA»hšî¦Fi+ÝH¼‹§ùnîÐy”·b-8:Ý)wÆÍcnÓÝææ>·ßͲî>w¿;ïvõ;óÎaç)焳¨ÍÙéL93ά³ÏéÔ‹£Å­Å¦Ó1_ÍÞ@Qû ûF2Y¥ùTOrXÙYewB¦”mB¶)-“T\Š8'0â„ò“v2&m ˆ-ü8ÚRY€±ãæ‚@,d†˜/ä1¢!::bý¡|ˆåãÍlTe9Š,GU–£9ªæE\h@ÙŽ(¿ø(¿øIíZm)¥™mJ BƤÆFD°É¯b!bd/0p…lº”¥Kö¤Éz¬›–™ëµØA›Ù´@‘uCµÑ÷²„ìAÈ‘–´JëJžu‹5Ò·[ÜbSsÃX¼ ŸJ™J7îRÝHu#d¯Ò¢­J; |¼3v?ä)¥¥ ûfÆu(M‡œËY~Ýмl;Z·›nFæá4I*ÊK*rìˆØZ¡çØ "ìY6 IñJÆQ{¾¯ä/•ìUògJ~YI¯éj‚ÚoƒÚþ /e·‘š'”<§ä]¦'¤½ÒŽ…´}!í‰6@O“:n4«ÚÙ€ö§€v( =Ðö´ÍmS@ûB@† ?ÑØB)é%˜U~í²_û³_{Õ¯½â×÷k_õkÍ~¸Óóøhj¸ëHùˆ’Ë5jz£¶°Q;°3ÑÛ…—¸£·—ŠH‹žã.EìF‘X Z qPH|T-÷*Ebw1/=ˆ‰Î<ô`‰ä2Ù…n·M%"²T$"ŸÑstJD‚ K"¹tQ$>ÉFÐ’^¤'I†0ôo"¹áé;$,ÃÒ·H-{œ‰Vx²g§/ºÍ‚˜2 ú¼ˆ 9úŒˆ„AûE$zÚ¦}"¢ƒÉe ½"¹ôs‘<êá{d¼nVq%µŠï‰tß+2BJ$¢ .‘Xº[´¼Ú*ZÎÈ¡wÒƒ+›&IDeú ‘Œ »£ð _'aÕ½™,W‘o Y’u2H\£k ²†®–;ºŠTQL‰Á­EDjA·Ø•û¬HÖVŠ0jL›Dx/*·¢0Áù~^¤!¤!Eä98é"¹´H$ׂjäH$UY˜µ‚´¨¤ÊEDzùDį¿DÝ$©"–’ZÚók}q/µäè—„~ÑÌ•Ð_­±MdWøÞ;öÌø=~c’ñƒ8Á“ˆó¢IìÁ±¡à:ç;÷œûœ3פÇõÀnHÿJ礦ËÖJÿ€#ü³Ò_z? MÅ Ý ?þ<~„â•~n’n‡ŽKåú›ÒLºF*A`Å‘œ4=¢öðó˜]“®Ô— ë7G¾$}?,Kß •i ¯ø,õM…K§C§¤ Ø …ôy)®–^ª^z±ž:rK‡Ã{¥QÈ `3<ò‚4þŽ4تFü|øŽÔתŽ!5¢ŽhGTU|qd¯´ "EŒ* ‚NØ—Í`ÚÔz“ÎjÄ=3w¤/·ß"ðÆ'¡¾¬4qïr'¸·‹Ãû¦Ž«åü\ çàm¼À›y#¯çyžå5<ሣ¼² Èn/+PÆj(Õ¨mP „æ$óíDE;“"©¾x±]N•¹•½Å9Uäv%SÂøÛYœ*ÎD©œ¯ø¨/XÆú=û‹Ú`m)”Ú\$çÊíË”ñ µ˜òm=™Y„qÃÔE/åÛ¦.f³È5c¶¨u˶Ä3Èà*M&äµ"ÊògþU¿›êËZ-6ÓÆJu6UÜÐç;™%GÉ‹ÉÄ,9BY63‹GÉÑä^*Ç£‰,À:UŠ’#CiÊF (…üÀS0\q¢V@»p‰‚àÐìRAû+ ž§AÌÜ£‚z˜ *èŠÃ0Äʦ=ŠÂªÃ°ö¨ )¬ AO#! )5‡P 5«ê=kêúŠújE}•ªË¯é[C•hëQHõ"õ€‘ÿe8þ?á™îÉc™äp09LC,^˜‹'s>_éØ$UøŠLh0wp”ò¡áâdp8Q<LøJÝ™g¨3TÝL”P&¹/SÊ(ÉkÝJw28”ÈÎôžêÿŒ¯óŸúê8õŒÎNÑÎ:¨¯Þñg¨Ç©º—ú§¾Æ©¯^¥Wõ•ÚǩݙâÙž>C z8-ƒ^6î^ŠªG§Ó/žð¾£Aø 2ÈÙ¢1/š RUãÖÆ­TGšªÌ ¶¬ªÄ~ï;øÊªJ±5G1y8¿<”Ba Ìq>_™k±¢(ÈIU€´ j$´iÍ«ÒU}M¬Y®`Q^îÉ”Òé¤x8á…$~†æÝr6d¹âP–ø„Q«‰¾KMô ¬+ò‡ô_Ó¦™95߇º føsÝÏC]€ ¿†™‹ÎG¢Ì\z>½Øûó÷î3só LûjÔUC„kÏ„œŸ b«£UÇ  r^¦CþdàŸL¥tV Täª ½ÈŸÚÊk|E9¡šT¤ùµ ÷*ܯZx`$Š¿Mðm–+3¼bGZÍmé9ÍmŒ<<«½M˜[x+ÒáZÜDYxÔµÔÕ+<ìJ/u¡´…'@6oò[ýÖZ p‹£'>fEÿA>ÍÜá¨~åóGí(ò»tLù¥Ak¨ñj½5ð6ѧé‡éX+tœ`ðê9Á(š8Áâ6s‚Ímf­v·™q¸Üfâôˆ&â¬òê‰sWÏ8ªEã¨M¬UòêY«Þë!!Icn³Ãí6[m¶šIÒjÙÇñ¼Á`4Z,k6™ôzb4šu몫ívGÌét¹<žª*¢`Œ½¢èv#½Óá°ZÅâi±’°Q`„ˆ™eè§ ÒBÁ$‚Äi÷ÓtÌŒÍU~ý¯îŒwz#ú€~iXl-Èã;/Ê0cò@zñð Wx‡‹Âù«K¥<0—”mèR9Û$Rfù\Ù¼ ¸íÁÖˆZ#ŒjÄTkÐîgì~»ÿ¹uÞ{üÜ+\×ÿJæ[—»Þÿ¸ªùÞþ}aùOëð•)¼þ4.-ï¢õôòÝ©å ¾²œ!ba_¾„ßÅäFíŠõ#‚9ÿ ½gÛaÔkRNÈïŽHlÙ*^½ûçáÀÃ¥EƒÀÖ-[h„öÖ¶¶Ö–ºP0À±Á@¨µ¥-Òìr:Ø‘ÂaŽãXcµÜùÜ¡íý_¿º|©¡ù}VÏYD㇦ ¯Ý§IB3#ÇIvr•b„ÏRT¥Å uÖ+<þ†6¦Á¿ÕOŽ/Í’íxì÷ÔjÿÊßñOp 2 ÀÛhk`ÊØ®|ºM:¢ó+köV Bk5 JpmÊ%“CC¸EeÉdNMXVÞ'1툢M©†Œ"F%cb`¦iPÓ¤As+Iç`víuuÁb[î9‰¡=òñ¤öUzrvÂɹ'Ç…d¼Sñ輬ÄÖê6¸9Ñëô9kÅ :ŽÇ_ã«!ë¹fÓÖ›aM6w™Ñ+µHYjAŠÜ$Ò¤³»EA»Ñ›t¦m–€ Š4¿fÂ&Åîl1y>ü7ø#ùåôâ@OFq”õu-ÚI€v Œð8½E²TéEšM¹áR°›^®€W9˜P~¬Ý«V0£tN{Ž+9öù%?a-fÁLØõÁÚ a F½QgäÖér¸ë«D¯È°3Xƒ6,o [c äPˆ²ÎîÎáz-¿¹:‡ƒÆº]Ð’1´Ô×5%áÕr ãqìàÌ–³žÖ–ö6ºãÜ.­@ÿÓmÈZ·Ëinokg®o ä_ïϽÑÝà—£‘ùÂäM=Ëïiô!O‡ì©­rX:šš=a–üøwÅ£¯î94¿ôÖ½ÙKoýðÜÍ»øPç…Í>1XZú`y!·}“¯c‚pí„Uu£oÞBf|·"_¾ø*7Æ CTÂáP¹ðeøD}Œœ q¢˜-<Òòœ„ÿ¥ºjƒ£8ëøóv÷nïu÷öÞr{—ÜíÞÝ^’ƒI\M¹…Ó L)Rj!N+P-h¡Ô‚…Õ–NK…`[>È‹-C 0¤Ž*oSFm«Q¬ÎM?Ç’Åÿ³?ܳ{™çvòüö÷öOœTM9œ'­”Þ‘8e–¨ þ˳HEêh>r<]gIJ:çÊ£sš²RºQ½7Š`‘x¡žµ-ªu´MD%†Ú †A!O÷ÅfÍMNÊ-œ­*_È´u)ð/aÙç?Þ4s\>ß8ëy:¸¸UËä† â‰~€'J‘¿›¹íô§ôÇü»9êõy}@„¤²?vùoNkÖs18-»–¿Ø8[Yr¨këŽSö ¥8“á¨Ýþ ·q,’ËfÚ-Å¥eÅgŠ[£[cû»c?RÆN‡}ãSåˆPݦ‡™ÍJš‡Ù%8[iô7ت/•ˆxœ@¨ÝÁU‰â•^0ƒ‚ ‘ ÏÞÓ°›ø@h¨ÁŒfp2ôi’›h3†‡¸:^j€f ‰q÷`^DÌ{Ð%Fª–<2*µ&Ôj'©+—Õj±(bÔ)¥V«ª”jpAÇTz/Zè§nÑôBÍóÅaкúó™G¿Ûð“ß;¹à«k7ÚmûÈC¥éE­^~wÁìgéá¬VZÛ9ýkC‡¬ùÒ‹¥CÏ]³Wj,·L Šo­}tÇu¦ yùÄÓKd¯YW@Gxêöx1à'¼ø|xÌ” `s·è OÎÀ-,H^*›~Ñ 8ÌRñ çÁ»a‰Y×Ê—y*ñižòªDD$¬9è0ªÎ²æŽt:Š+caºÙ‰äaDRJ½-E¾×5lÂÐÂLÆ ¥MÖBmô… Ï>kWíèRØ ·¹å·¾Ù¾.Ó82d&&B¿0‡è0Ïl ºÀãMxI#ÇG¼Ñd4ÅMqu¹N œO¬I)¾^Ƶž•ç¸Ú)u<¥ŽîD—ðW|>P2Ü Gq£ÞEN­@Ÿé•Âé0 ù´Bß뇫"9C]D'õpÃTMqž¸_äD5'_}Ya '²5 F0E†‘$UŒáfÕªbcdâ3#œ‰ãLÔÇÊ1­:г{qòÈZÜÁ‰’©sÅ­ìz,âw~R\TµØÌ=TgÕÙCuöPÝÄmº©øj{‹‹Æ—„”8{qä'é±`µÕ§¹ù8£&Ÿ½ÃJÌ…x—9MwúññÑ´Á¢Ó{_²í¾ƒ‹¦N+æ-½\ºðå5ö~{$9I˜cÛ½·¾óî¦Ï6O7¥8=3£Yö?ýðÑ!l d¾¿sŽ÷PãžOÄÖŨ·rûßfT‰´7s¹è¯£\Yôºº´à1¢?£°OìÆÂ!!A\èCþ |ÒOÔ¦º =BRÓ*U™p}ö""‰Æ;/uêtŽ›¬Ï ý·Våê°ÃEÆH'Œ[’yo8g¤’õIêRòA#ïÕ»¡!¤v“Œ„wYŸÑ Épº›h\È`-67o&f‰Ñ uOš<&oÖ—PòJ\шRQfùÊ;ñá·³ãê§MßóþSÖlº¶þCxÕ>/v´hã[| ØÕ(,Kµ¼ryoƒ'òÇÁmoØâ¾aØñéèS;Ͷݞò‡Y>cL —Q ^òºé#ž„@]"JÛ[7M©&h/ÎãÑÍòįdè ¥„Ê”R¤ù€Ç#òÄïªÐ÷M¯Gõïrƒû¦ïÆ)x…åæß,†‹ìÜV¸”qŒ2ŽQÆ1z—¸ÃJN½½î”[5.7¶m€'¡Ç¾~`þ}†ÑÍ5Ú¥ÿµbÃ|8ðŸ=¬é•ñ$'¦×HΚ8ܨ\3ÇíñöT<ïùù¢Ï b<]€3Dèë/c‚é—ˆ_% 9Aìý+aµ9;ä» ŒhºKƒZó‹É þŸUãhù€Ê'Õ”Z¯r®¼‘ f»IƒœèÃwº?Ý ª‚KÎ[¸‡ ÍøaTÀ¡Í~²k¬03:(ÑåÁ©ùµ†•!ʯ÷&§.œÐwq奕ë¯=wÑ^MÞæºÖDãÄTaz±«J¯ýá¥LâO¿ØöÑÆí¶}à·öÓUº}Õ‚76ÅŠ_6€ª¬?ŽbŽÝõN {Q©7ØRÙÄ1o¬_Ym*•êˆ\ùlmµîýâ–;;Ýh½ÈD_CFDÐi±„b}ÂŽÕ¾° î¦ÀqÜöVJµ$WØ÷w-ž  ç³ÆëSGW%ÊÄ\4µâÂØòÂôb))‹ù¼ïëûøû>?üfSZÈçcrù®ÚØ&Î;~ÏïÎw~»óËÙ±}öåÞûlljIBÀ—e 2ZA²¸¬Ûx …„²@€©Y›††© ¤DÇÖB*­$Ъ J_´tãCÛu¦>,R-mjF»U1{žsÒ±Zºÿó’Øþ¿û½üÝfÉàÃR N?ÄÊ U#„©X x4ÿ⨸7†zñÞÌÙÀùäÕÈÕäôŸSÿ®f«À|°|'ô(ÞÚˆâ™1ð^ò£äTäïò½ÈWòW~…UתsJ"#Ë.IôÊJF‹*––25 L‹¨a(ÝÞpZÓ¯šöA*$ÒV+cÅ$NÂ¥Ï*^r[‚YµÆ‹ÆðXÊ嬨ÍNËÅÊE놱z:‡øŠhÛ¼þ2–æÒxºån!ôzº¥Ø³Œó\=<¢sª&£gS+ÄþÍ9s¨ÛˆàFªR$í×dݯQzRS©ȨtºTTTx§¤ÈD5$8—›{“âe’#9tïËÜMázÒÈ4ÊíÉÁäh ý©Áob“¿™*ê*Í”L‘è^ÐiiI²l´ÕÔÜIŠÕÀ$)R•’—@avÚù8î ¯O ü´_¸èNjªâ m·âxÀJÑ.º•Æ›`¦/зè¿Ð”‹ÞIãtmö‚qÍÀ«&£ÕØ`ì4ž2†S†Õx†º…Ã!óYÅ\ލw,®”*jg_óå˜%W¡jf¡gW5ÚÊùˆ+s³~×XàMa5 ñ>Ǹ™ÙeîHp䬥=øÁzÍòJW €BÖ<e_36ó„qîðtè§»9]··lzÜ3oAÛ[­Õ}½=µP :m$Ò—¤,;uqë÷矰”fþøòÏgì>–-=Ý]+½öëR›æsÊMÄNŸ_ºÒΣý7Ä7 ñ=ñM‚Ê| maØ$!ÛVÚHФXHB·è¬nÓí­Är¶Õ¶‰íeYç¾øáô%Ë%ö]Ë»ì”eнGÞcY§io¢$údYoK&'ðªü¶˜¨»¬ÀŠ@fD+©×†ã“”HG$Q•+M븽շýš´àkiÆ€ÃåŒ:qçbÑ…E¡&,ŽDÄŠ”×—¬Rñ*Pew8T¯SlDV¥©¸ÏšJ¿ p°j¥b9Â'7C®—+š`"Ê («äʸÂó7eþÓ,Vÿ*|kE\GZX†ÌÄ q° šïÀôÿƒ+ëØÕjWϹ®˜’qfa*DLËÞ¸óÉ'r/C >¬ïbfÝõý¥ÇçPBûÒþ¡œT°µ÷oS*¹Ë‚íyåH•Мñ½Ñç¢ê€ö|ü¹«Ìz•ý[Þ•@ÞÕ 7[è-¶=¶=êâ-Ë5®Žëã v©²<žOŒ&ÈãúHâ,õ+zÌöŽ6§W:hŒé€Èûb SöOÀÌì…7Oùÿ¾è—•ìö%c™sF$ ¸¨ÃÈdA8êdã9çƒH°}Ÿ±sóêÜUóêÞk!V;ÀmÌL1(½¸˜(ƒ3fzaLC3îåZP„)šÃHÎÝØàƒqsÞf ]„$âeHˆk¥å²Áök1Š0­ÙFÜ•Ü E]•€'6æÐ0—äX‚Yã¦ßA¹Eö›iô˜‚‹àVtš>çysCïƒFÈS8@¨ë8 ÉqÙŸÕšKÓ§FûHçÙ\/,«Qð£«rÌÓ¥¿\¿ÿvÃr-oc[òw8ã…†(ßüà|é÷¿|»ô§C>/®©Ö5Œªž•¥© ·žï:tÔ‚3œuU¼%˜O)/äk3hÊ»›e8À¤(Ze9wÛš¨ÏΆpà¿HU'ðOÇåZILÈòù®Úئ®3|Îñ÷WîõµãkûÞkß_çã&vFbc§i|¸üXJÒmå£Ååc ¨èXm¤£Ê–m¬ARÓUk@m×h¢lR@13mÒ²´jÍ(ÝT­´šÄ4ŠQDGâì=7¤ æØç¼çž“£{Þç¼Ïû¼Ýt:ëºMXÃt'»OvÛÖÈR7¬9§ºè®;;¸XהˆeÉEwЂ2…½ey‡k‡–dËÉ›, ķ´NY*ªšª4¯E4tK ¨]­--Ñ(Oº‹E·ÛåÖÐv YÓ»ŠéÄðݼ;ŠÊÛËÄ,”§Ê§Êö²Ìà$&¸7ˆX ß³£ë>PÏ×Ãõ„]š[ å"„¶\z¡ÇºF½]aZDÌR.Æ àFZ„R€•ÿyrïŽ{#›üÚŒYWl#Óm=Œ¨½Ð³d“#µ­÷†ú’]ÃcwGó‡îÚø8ZÊÅäSÀ>‰^0Û €W–ˆªÆe‰SUA–@•ûd)¨j\ìŽ3BR B¯ÏKQ‹>¢•®yq‡×ôz/xíÛ !Þ˜¬ÐIAº®)xP¹ ÅT¶)cÊ)8-¿ƒ£ Ë÷Ʋ¿K4^(/‚ly°©»È§÷s¸M¿¬3ÃI#‹Ûf᤭h“é]:dŽW%WÌ¨ÖØÈL”ãI#Õ‰Þë}Ç}U¼óL›÷ï>Ãõ/ž·è…»Q̲ÀóÖ{ƒt2±^|åkR-›Îuå;WYu‰UovÞ)M°FþÒÖ“Š1¾ ¼õÞÆÞ‡¿ì²¯Ž§6 <œÃ±üò {ÿöÈÙ¯?²iCQlô>Œ‡Ä¶Êò>=œ) Ê6gÒÑ‹f~'ÁÏiƒMö m"u"e» dŸº!0MÐRˆqPÓ§t‡^ÅçMVVš à‹ÝÄ­_F¯ƒSNš‘»PÇÒMfÓT“–ˆ*u 3;»9"d¡g¶Ò\ä‹€T_bÛÿƒ·¤ P[ óvß $ß{ÈB2ªÅ¶=3ñtXKÝÑ©½ÅOßñ©¥ûëÚ Èã~s8Áú¸’/=‰ç¤£PÎ~Ž.!‡.æñG¤çѸ8.“~!ýKúä,\+$— %ÃlŠÕ Ç„˜0J!Ý“w® „L·”Vë^LvKºªee)§BŽ÷+­K"t#´º °qïõ¾ëûÈG|ñ‚•ËÄD—õBša=‘®B"ÙœÍй Ë\Ë ™™ ÉÄVªø+gˆ¤*nû!Mx+@€Ã• PŒJ(DýЖjJ–îñŒáe§¡Z†5ŒzìU*ôDCCÆæ(¬ÓÑôDŸEò+Q¶ÍàAÒ¼t·—)ŠÚ ·¢ 7M•ZGCû†fIƒ´â?Û¾¨*ѯ̓ݸmØß™/ïâW•t'»²¾'mOìélÒé­—?vLæ :ÍqÀ5·NŠ´3GüEVV”$&ÐMS˜@SŒJº%—JÓM¤²«4¥ÂŠÎ‹MlS¨)Ü÷&Æ@’ò´i¬ U¦Þê½›†Õ.ªdé*Ln¿BŽ9¹_ñONþ‹Ž‹ž?JWñÕ@€Ø]n§Çéå1Ox?ˆHžÝ±ÝⳎÿØi’9=']nº}rÈɹ<œ/–ܿٺ @ÍX¸"š6l‹gå’Ld†Kr„MJ+…!ªMMæs ¸Go,MÝØb Õ/tP)ú•¢=8ÁêR:œöèŽt,'àtð“ ãF7X¼¬ ¿AÇ‘@‹CÞˆŽâvh £þ, [-4¿‡!Ê+pκ\ÑQ]œ5}\‘D¹¢~¤ºøÏÓÁ"ˆÿCç £@Ñ£·EdÔ?[ð²W §@›»ˆ"7¥ƒ,rsYšòVç¹ U×áŸL^ª½\ûñ¥ŸâWqá×;ú>~lOyóÎ]¯:¶ùkûk—kµéÚü­iÀürßï^«}X{óÄ7W™8ö <óí±‚º º|¢?4ýîy$Côû‹2þ­¾bOFçø9ù3ÕÞêöƒÖTUPœNU P*ׄ ‡2¢è qÄåt³ Vþ¾=2y#b‹¼Mã´°$ÛÈÏúÉ€»ŸøGõôçjAJ·Ëšq®bÕ=– €špYBÛL$µp<ÊÇxâÔÂJ'ãШ©,–ùD!Z)­V‰P¡‹i!œî…œ"ƒ~¶©|ÈuAØ"”·.ô?µVÖU ÊMÕŽO츮:ô²»vxQÕu­°ß6H­™×ýF’£ çÈKG'PRÕðWð †Úñ³féñøpüh£Í­Eµ/Æ×‹ëÕâWU‡ÈÉ:X§½#»GFÔÃÚ;Ÿ´™¬ûXäJü³èíØí¸#ëöWÉûg-[u3f‘º’¡íšÖ4õ»Ú4¢¡VQÆÔ¨³ªUÔÕ6£b•oU-­g„*þÄä5(IR홀$_þ/ßeÛÄ}Æñßïürw¾Kîœä|/`î싟/~Ë%)N\s@# -΂µj  Iiª•ñ¢Eô ÐV¶Žiƒj´ c”ºjÐD«m´UC“¨˜`húGNÛ{΃nÓdÝùwç³-ýžïó}>ßP(†xDVbD>çãDüSqÌEض1Ca²f,ÛçøtòÁq,W@­tR¨x0_œ(ðÅ»\ÏOT¸ÅIÅزãσC…¬ßñè‚cÒ…Z˜ŒRe*B!µ¦æEˆÈÑX¤¹!žÂM œÌ@"… )šBÊ'íUÛ¡ZM§³ÆQ dɰY“b³S¥z!«&Z€'þG©[V$1’(„°Ë_!F§æÔºØ3Yóá[W÷®íþžcO1ÚK”Zž}ù¥Þ}‡ˆÒޝW¿ëÔ¦ýçÕRÛò€êŠÄÅcÖÎ5¾ïÌÑòewœ6‹vVJ/5ž¹¼µ˜æHÓ›–8ÑLp&oøSaÍlln·›O»Ýñ‘Ö±øéÖúlõAŒÇð<[@ý\»ÚN´d€zúµ ª©XuÍ™Ö^!”Á09*Ê17•™Ê¹‡¹aãw˜y9ÏyMƒcܺ§-ãÒÛº¯ÀëñV¼{ðRå£Dt óvmÒi35­¥¨Â­_ª™¤Ü1†³ïNzîÕ ðUó4äÕBÅ=I ƒNm³YÄ^¸1QÀüĉ꺲|×KÌ^²ÌÖ\Œ‹#"FÔ`Vs/0ßæ^4vš¯sG™÷™˜¸T\î í °m½å W¾úÜ@ûMÎMR÷[ÉV6%‰J+wpeŒà•O=/íÔ‘ë‹.}õ[{èÑ´ªtÔE"Í·÷mØi­Ú1þæÒëïÍʧvMQ¦ÕxÖ”rG>^77¡§’¡%Ï­Zõâ‘›JcCÌ ÐÅ+/,J÷/šùضŸ¬xó*ÏÎÔtªÚÝÍBwkèè8 —Ïœ””Ö°Ã|]«¶¡å΄ÝiXøIÞJZ‡i-ÈÝ^R”;Ó‚*©ÄFð…6`§Èq; 4¤Ò—y kRŸ´WrI¯bMíS·ª{U·zÇ‘D;r†  â]Ž‡Ã “¯˜ƒ]ÿñEè–ê sÐ?l*ì þ_°YPÝïaµ…]ÑOг;ÅŽjæ{|w~©õÌ/íÛº>Twû÷ÒèX´¯wv$]¾ìùìH»ìC'‡ É׎ë›ôWk_Óßѧ—už#‹Ç<Á»6Ân lÇk/Ä.Æþ«õèB-ÖBQ=ê“gC7uâ­ÚÑZ¢HÈá°ª¥p8®%ƒ(Üèw˜S—DÃo²40£¶UÅ+Ô²J¨›Ói;Ý—Þ>˜ö¤)ŽTI‚ÌF_Ç7§&YÒ,w§Ë`•%'ªÆeÞ5¤p(Fs¾h4Ra"T 5ÅjtfKˆnbSˆ ÃÉÙâœYýŽcJƒCŽz뽓P?i>MÑj>»]å*®D¦‰_é½ò[V>s`A4˜x25;ß_3ãÆ¯Ü¾V±õÌ„:6W/|âØEÂxl!'F"ɤ¶¸XüâO'Rö…â‡ÏeÃØ©tw¢ÂîÁq¤ƒ*;”ÆÖ?èØrÿ@ xOqV\-Žˆc¢; Š‚$Ë"òà ’ÁØ…Ú` K1A6$¾ÛcåWìv‘ôj" ¹í̩ļV]t'‘ˆ¿k×i¬ ÷V²˜•ÃúÚОu÷•©È ŠEia÷“]×ÌŠs9HRŒ,fׂ¤éL ¨`Q8o*ªÀýýçBõm_›sŽªóœ’4Êß ” „î  ˜‰¯3tì0u5ˆ PTe8õòœèéˆ/.%B¥Ô’l/ñR`™&òIÂl: ©æ\( ;»eüö wû¹.: pÁºÌšbX¾®G™–dý•,UWþ+yê‘!¼öÉ=ô? bž´Z‘Ƥ ògòg™•0Ù,¢jG½-+Zú¬5Zx˶ú¬ Ö6k¯uÐ:nÑgñÇ-WЗ¨Üây–~VÞÛIo—¢·…ãè¢%Ù¦¬,š§ÍÉ ¡!L#~ ?c´,“4í“eIQ(M.ü›ê 0é'üb]ЯŠ­!èL– òªÞ”‰§ƒÛm¸3VÞqRb|À›ìÕt£‚(¦•0b †cÃ3Ã$$±A’DÚGS¾˜$ÃZö’d̈ÃCq‘e|n>¦È4èEò>­hÄ ¸–D“ÑT@Z‚ñQ$m9’™éÀÁDÙ`x3`Í—ÏŒòþV^n±Æˆ§OÞ¯žŠx©¨È“ BŽ|œã®ˆ†Õý‡¨¯)ê>m™¨,Ùÿ£±û/nvñTŽrâeÌIÙÅ5º¦U‹MÊx¥08ˆ†ãï¤òþ->¯3ép= 3Ç%àS纾¾ªÄ6òz´µÁ›--m*/½)Íêj·‰ùsSìûdz²eæ b_÷4AJ|uIç§÷‚*]vÏíC®;û݋ߞãDˆ¦`tSñ‚Ø;Ü ô‚}dH‡‹[ˆîþYSá(µuC”#zlÁËóY·Æg[ì\WëËmß#´¹òÎhüÖCm£Y¼…|+q4w*ñ›ÄÅПÛ®%è6²›ì©ïçµ-Ÿ¢^GÚãQ… µù¹L(’ZY*¿8r㻎V¯=æ[‡–õo´î,¥cÁlë‘ñ×Ö9úÊëE©ÉÍù¹yaOoÛŠ}ËkÝ™ñ'ïª1VäV-]ý.êx~Ý¢â‚D;<ùéŒ1 S=@¤Ñ:Õé^N6@".èJ )ô¥N¤ö,|ÊfsŒ8¬-@,¸0ÕrKPÍó« 8¨í¥%ù~©.‘9I•ú¥ª4!“®IÉá œA!H3.·Ê¢«²ýì5¶Ž1ؼ¦¦y¯šf`0^ÆÊì–¢Q-žeHㆠ[‘eíª¤_•æ¯JÿsõñlE[»ì –õ²ÁÁvÂ0Ókv“˜L…C‘i¦SQQ4ÆÓ¨‰ ò„Ý!Xáœ0§Ò(dçy"Fñéÿ«q×xé5ñS•®FG“ïQšNQ—Ô^êMŽG­£Â¨øžiapDêÄ]è‘:º‹H#ò"Å< ³¸.äú—²Yb+Œ6§9d„ Ñ,㨆iWÞ‰Ð:¿MŠ÷aF8#B„Œ´Zæïáx©YÎ×-Ušqä-ÁdûQMÔÊ òû°AâŽ3#šE›­±À³ ¸îÀV-Tã…™îDpQEœs±´æ´tA„ÓmP…îéáOïnÝ}û3=í¥>Ú¹xþ…•ÅÕ 7<便…>¿úÎä7v,[ój9lë;±ÿaI^€YY ¬ô+<‘E»ÔÄûöìŸØ/ûnw‘"x–'B–¦¸“?ÐÕ:ðs4 pøæeJÞÏ€&³»I vÆR^ ¼ŠÐU¸!–#¹Œ–@dȉÖ"òª¢S†Ã€ GÕ ùêWê YU&RR(¥b^Tþé3Êꬑ .hã¾¢8§ÀüXÿ4«{-0·ÀË,ûhö+ô¨¢#ó54ÍñŒÝ“"iv§šÓRš4;ĸ'•&2vxˆ®X¥²† Ò(Éh”(U{ÕSW3ç”kйêuoŒ&ªÒîìÁÀ‘ìûöqÿñ–Sþ3-WZ{œ‡]$®be@£[ÑéVæéVæéÆo *:< Þ ºýx6H5¶Vñg%/~k¦²íOÞ|~xù…m/lûxÛÒm%šÉu¿µjHäD%Ÿ 4oXcêý÷7¼±¨1Ö÷ãõ]{9~Wþ9ò7E2ƒG½ÂO?øÅé”çˆÞ† 0æ#¢¨ n0»W{+Þaï6ßn§×"Z?$?'¯»n’7 ·í·}ÿ0üÓnõÁ¼ôøòë [ Ãñ†Ñø>ÃAÇ=û_|t†zêGM˸ ¢”ª˜¢~-÷O¡æ‹á”ÇbšBüÆFûqumP]¿Œçý¯˜ \lÀçÉæÈã¨r®Râåø¦øý¸1•œH [Ùyò´È»õ˜Êåµ®a ê ›ƒ±y+xÞõ5*3˜AYÆÍ"Ëš·œk`{9W™AìõšÖ!°&›Dœiޏžyý<â]a|ðÐû"#¤ÄE®¡˜N£¾ñpÝP?Kþ¬>C¥ñ”ÞØó­ÎÍíñÞ©õ¡õÓGo~™}‰|¬„]ùÎ7–¾ä?>61võòýõäßÜmÇŠn‚0t›†€PY}YUÙ#$I§™°fÖbÌÈB’‹µ3Œ¾Ì:™¤`™Ž£¤`fÃB¸6L‚4iMíõ¡¬c_ \}lUÔ€£ìTåŽbP@×#§- ç9^Š«ãÇ$åw²({‹ ¤ù¤g˜º9oÕaBÞ²Û݃s/ÂQU¤Ö|”©3$H &ÇìaŽ1Œ™`XfP;Ö™Œ… F•œB.P~»‚^Ef‚ƒb€Ë¬à±;®6S)¤þÌ>–ç>ƒêaãPyæ=ûÀ÷,£`$¡rçŸqJGªè‹ºÈ‚+Qh+¤óÿ¢x¢êkÊì øÚ|èŽ7º¾ñE¹à=týîâî«–ä—˜ hJ“G =¯p Ý“(œë%oîQŽ]{¹=Û½(FG\NŸÕ™+LîØ e"úž,7üHÊKˆ^tC]'²6g¹E|‹>”ý‘ô±ñú¼tiÁƒä£eVk]0w˜KÑ5& °•hIhþCvµÆÆqUá¹3»³ïÙÙ·½;×óð®÷5»v&ÞÚÞìÞµkgÛ(D4‰¶ŠHˆ -MãT’BUY¨¢ý(FýÑòÅd«²áW4HH±€Ð"Õ"† Yjk‡sï:Âj÷œ{ÏìÜ™¹s¾ï|§…¿å>ŸÿžçõÒëS>Ò2'µ@.!s¸ˌÔs²Ÿ)ö>Hö:QÆê$“µëDÅ`¢ »RGôpGIØõ®à ÑH„B4’®¾ê÷§Ë¼@ÊöÐRÄ<üjÙ5IK-5¥A=ñÂÝ´P«•ïÞYeÔGã#‰° •iuD’+N8 ŒÔ(O"iOò“-M¦A™e$ÉXæå®à$‘Œ]¥xI6¶y›h™B‘^C´H†rv‘ f©x¢¸Xæ‹«E¾xfÈe¦¤·7kô}Ëëm@ñ¶ÝlŸürd…¡-d@®mj ËëTCokâÁš]8¸^` °Ý^áêðØƒ°}”‰Óئ¢š5—=O¡1–M € H‹±ø¶ðÉê”wTGXÀEsŠ’vµg¨Ý1âêýg„ešÐ+ÙÛ³ ÿ4Ñ'N\Ý#.”vUë?þýÜÉ/8÷Æ×VM?öüã§^øÊÚr{ÏøüÜhm¾4pú¸6öÌk/]”ú¿$|ÿ©á¡Ñ‰c/ïwNäL‹·Èù/iÃß­X$ÉÂôó•á¥/¾øÛúéîwOOÄ ,§›1¾“ºÎ€a3Ž3OÊ¥Š½G‹qÄšÁø³DWy¬Q—ÔeÕQVê" VÔ5ULÏ®ñÀ‹û Íȧ÷Úäõí ÔXgL¶º€î×”Ñð'÷ö4ÓɄޚØì?Zu˜&¯Çò: :_tZèdŠˆŽ]á¼Áßâ? 8Óž>_&¥ëºQM œ œ |»ÿ;W¤Wäõ]¼)Ýÿ.GxI=}}ÊâìÑÑšÏEr•2RÓ’cÐ]Âç8Š‘¸>ˆÍ˜é¥i¹yí򵮾µÆ:íD–7kýägr–lÊVÅpJ’œN§T5ˆ{ƒ>ì¥â8–3± LÀêQ9‚£ØÄ†aäMl†à|›õ°gͨÁœ(KÒcéTÖ’j:%KA¹+˜³8¯G .H /§« IÂ4XÔû~å_þëT±}Ø‹ÞõtÑÓœy»èÒåà‚ü3ä$¤’Xj^Jã4Ÿ>£ªXâ0ÍÆ|>GÓ@Жs+¹ÕÜZΑK–+¿@§q³è&•! BÁPY@U|о¹ysc£½ù7yc–ʨT|$÷ɉ͛4XÃæ¾`‚ÏÉï8.X‰B›ŽÚ\h,Aë’W8fËîš»vYh …`á6@µ: ¥rF‹Š¢ËŽõàÉê…àŠþob½ýç)­HÐkµCß8þ—ó Ÿ·Òéü•ÚP}+½×¿ù‡æx¿évœ=¶õ«w:d["¯#i⠆⠹WÌš{2@S(b(hYA’“9;eQ–EK†[P˜N†[œ2 HÌ€3E§—»+}•¾*©ë”lÛ·Nê‰ð\ö¡Eâ|²÷=‹•%eYÊJCYTV”5Å©ÐÿÛ6õo•,;ÄÀIÉõèdÀ¼ Jˆ£ÿƒbç>÷~ôÌ=à ¿ù<ý^ŽOƒv›ág ÞÍ#EÁÄ«VÝR˜«q38 ¤=#¢ÑjÒÄ‘.ÿ§7õ’‰‡`@"zÓÄ5C—L6 ’Eº‰³]þÆO 2ª&ž€1É“&ž1 —^Õ\È¡ÖFŽ;Ôã^¯ÃÅ͈µ‰¡l$ìmÐCLˆPu›k-µ–[+-G 2>(IXâ¥|_Jf’ÖNjɫÉëI$“|ò–¦ç­*±C¥«¥ë%”K|é'Uq•¯æ'›L<¦uûHs­É/5—›+M¡ fµ)4“»[]~G£­ÐÓ㬚1VÛ¼ëÛµ¨âªÑÝø}òº|3èK ßûuµTfy¸?í 8ÅJ&•vZ*]i_ŸŠü²8¢¢~¿Úk¬äZA¦¯ò|¸G>óU¢à·gÀ­fØ£e¹ÍíB´‚B…;wnêQbi­µxÑoúm?iýÑçœsιg=s¾•–ó!~Nœó(:hOprá +±-H©XšmtGŽ6Äîÿt È2¥z™Û÷|(ЋƒgsÉ×›KÛÇåíóÀÓùO|cÜýrMâA¸pô¿„—lÜfÇýúîìËùîì8¾ø~Úwç³;çrw‰¯IÔvçÒi“6ÍPé–u!릮Œup톴6”Ë P†&ÚV¨Ê´Q&F'A«fݲ ´HÕ:Ê?‹`¬üÁA¶üêJíÊó¾v¶²!ñÏûؾÇïÙ~žçû|Ò†åÿߌñ¬B.±øÚ'øÊ¶oŒßu(7ñ½‰Ý—M¨óá”(YëÎr§¼®6˼TIõä*uøM!à{~fÇú;|üdû±}6ô耙ÚNÞk4Ú¡=IWVû,:Ñr 1u¬º¯ÁYØG D\^„º°h?æÅk¹á•q. Õ'Ê(¬¨3¾wè·}¿OúbL(Ò÷6úSŠù(¨«¥F…œ`ã_ãƒ(•– *ï²£¼¨åCÀ’„³˜c¥¥i¹l–磡ÄýŸŸMÍ£é¹E„ÐüÍ‹ÎÎx¤(‹ šŒÅ$Œ“ä>/¡¬ô¦DK-%ÀJ c¥äÔWÁ4(áÚ0`J˜-%Ì–fKABJ^-Ÿ/Ó•rÊh²ìÑ$±°I٣ʲG‘e.Ë]’oÂU–Ó^Û1Mã#¬4PÅX0 Ÿáa¥áa¥áâdÁ6½ã$¡Iᜄ+×§>Î-RŽ‚Ç“×­ý€“k–]´üSf]¦Ì®0%™2»Â”Óþþ>‚”zâ>ôìÃkr3mî!ö¿Ò>æèÍ%ߡ*‡v8ñ7’È #ñŽ`Ôˆ Š• ¶#Èe?ùÞ £~ǰlÞüI ¿ÐX˜×4ˆ™^kcëz,{A[ÔhJs´{4|p´g4ZãEU¤Eg‘C¤qÁ¾ÄÂÖØ¾ŽÚ\"{̾hÖ‡öcåtƒ·myj\XaÿªmË” 5ËD7 œ Óºªdš‘ºb]4ét2Hû>"šð–uwˆ g3&ê GM¤ø¢ ê É •È&åiŒe•¬R İփ†Ñ´E84™V¸%4³Ì±ð1a6ñkú²j±ÍH“oű³‘YþX<ˆ€?öO† ¬Nféº-Êy&V¹fÖA(Ž§Ú‡~ûОCW·ô÷7¶ÈQns_Y1#’¡'}—¾ví;o|ë ê¹tY#Ûþò›§FFùµÓ(÷B+Ã4Û£~p„²‚qb%È3KuªŒÀ LWEÖ/¨,† óóºæMNJ+‘ÙN&F7TŽa£BTR¬¹ñÅfnõZ[§ U8Q[¬ÑÕšS›¨5kþšèaIDt¨vÂá…ðb8NTÇ!r@|ûI±„a›D«ùÂ\3lÞVØu¯“,<}øOÞ<ºjð¡o¼[Ö‘®§ûFЯÐc?þ‚ѵ~oûÚÕ;V÷c²£(ß— êEd:!Îà†9),¸B mìßæRªmy¤vö‚Z'§Å½Ì Ä:¦Ôm :É·h.é´ù ¥PE5#(B‘A±nY¦ògT… (òe5C­ qZe´P?ï(k Ï¥ü^ŒT‘Q2!~Š ½Š¦)?š~ù8»È¾Ëú@…^u8ªÈ˪LË%-ï¦Vž0€m›Ê ‰Üm/äQ3¨¼§ó(Ž(Š;¡€lÀ$¹¼,,‘1÷ËÂ’ÀIÀÙCYÈ›f¬­•& E©å½à°L,&c=&—¯i,œzbÝÐúu}õq6É$‹±,bÕ¡6»Ö †Œªïù·žœÞØX?ºÁÏt绿ruhXH%|€‚ÇèÀDw:À”wûÍ%ú-ˆQ?}Ô¹›«Æ„†_ˆ%!Sô3R·tY¿l¼#üCø—À½4$¬*åžÒž*œå~¢Ís/j\ ˆ‹±ð7fÎ Ób¿J¦U„0m ‡Ï`„C.ê´X vå+®&N§Ôd·Sp9žDÉyô £%Nw ŠÃbEÅ9O½1f£]"•rtzŽãm÷,Åç}PÔjE“¼*öv{Úþ²Ý²ÏÙŒ-òA5H¸Á=Ê'‹=ø_± €(¬h@Obwr¬ KËSî ƒY`#"2Üt¤\#¸&¦ÁÒ­Ã)<º‡K¸ïß8€Åý1—…ׇg}×é€rŸ‡»ñ“ÏÁÄÂÄÂ6Ø^øh'kr‰ìà$Ó‡/˜î„EHÁ•a‰t»Ž“Tcÿ‘¢(|C™¿ùç¹°äZðÀö¸Gâ÷ ŠÁ7 €c@¯€´â"¼ Ë×—)á?tWŒÓÖ~Ïvœ8¾øOœ‹“\âç»8 œãø€Ü¿4,nY¯«Ø¸kË('5ˆ‰?£°Nh-”²uåÖjW¦uc…i*뤲Mhmï&´Ói­6 ¤jR'M€4Tmíèèv:”»ýžU7Gy¿÷lçåÙïû}¿ïû;-sžìzaµæz‚ < ½ÞÔº‹þsÎ¥AŸ›iExTP“9t%ŒÞöèäš¹ÆÂ‡3@K/ Å5 œõ_Ã4Ž& hµ‚r…µ¬ïލánÕ'H…,»Œª(R>«-[ê× ó=¹gù¾;Wb&Î×W=·fÅvCìŽw+=ÎFú–W·rîúþ·?O—'ØÓó§ŸÛ2hu%ÿî™5«ŽõŠKñØää½}#÷lºÃW^ÉÉ2H”_øsk¢$zÁ“ˆ:¿;P²Ãöp±Û¹Á¼)ö‰žÈŠ;„M’Ȱ ,y™€x¼#Õ…9É`½Z¼sw,¦yðò5Š'%ÓSvµYíœÆjÉeÀ¼^ÿs¾ÂI¿JACTk^ª×ªMz†XykIž@X]Ö™õ«ûÒA½Eýjxb7Ο—óÊã¾ãã{Ôðã_í.®9ÿó Í_ßçf6Äg7,ï9ˆ?ÎŽŸÙM¹º¶p‰[ÂE=ø»'‘«{<žuÎb„Ž®ŽÞŽ{;¸áŽÃ韥iîÁBL'FÊÝ´‘H#Eã.ñBƒ| d³²E´lÖ°HO6àáä&A ‹¨§^øÞ¶&3xjÙxðp<Ø6žÚ6ž:6žš5žš5žz7ž:6ž:¶³<–ylògyñ ÏðÔ¾…-ê-pnVÛ¹YmÇfµÓ½­Ë0³Õ6n4zIŒ³&Ö«ãZÛ-ÆŠ‘NÜÙ+S^™‰¥¶o“Ú¾MjMæÓŽö튄]iV:'±R2Û6rmR÷µÃ-?@¹úí#Z".ûN>¾Oð%A}‚Ö¨á~Nì°qÛ`ÑTÈçÛ ®½ëƒþýâåóûV<ýÀèžÞÂgð^mq—•Y4DÝVÓÚ6kïØ½_zê%¼“Úªæ77V -5Šç|“…‘ëØý4žôRQ18Š¢˜ë3ÆõñĘq¢ã¢qÅ´BGú úàù4)×â£ñ5<”B$ÈéXïA×Ú |\é$ñÆÂ~o«ŒÒfW:="+1YV0Bëd zRZˆãB¡dÙ§x £tér—"K8†¢ ò|‰]×”Ý}²'ɬ\—ÞÃüÄ//&>‚ ¦³˜Åcte3ÕѲ¿Â®l¡lx¹¬ë#ÆEƒS ü*<“ÀÎtŸ†Œ³[»17y×LÎÕç—ýZM÷#ªcÐ}Ãp ºS%[Ú«œ™ ”~ÇN å2Vf[mý“Áß¼z²h§AkÐÅ2Šš®aÚv.NdžýÐIÃõiQ®á›tÀ”á@¤CýÔ4Ÿó`Ìó`ïÏÿvØÔü¡«&Ї÷ô;ÃxiqhhþÍ4óÇ}ٔ˩q#·yþÇØ}j€˜\Ž˜löÐ,W.¦aŸ‹Ìƒ¿Œ"៽£ÑX±ˆ㢮 …U¸ sã®^‹Õâ5}46Õ×ÖF×6‡7Š[¢ÛâÛôÆfò¨òxtoü }§±ÛÜU8PzÁ~‡ÿ+zWz¯x}þH¼*Ý(æù0/ò§TÎðJc¥õ%c&U5 …‘„Á‘WÀ{) A A×LX™'zÞÌ‘¼×XxtFe³±°Ó{˜ ¢i‹#ÄŒbjH@ËÜ?6_22“»RùAÜY°çÿf~ѼŸyù‡®)׈ª_œ?’X¹8”˱I=¾†cŸK,ÞÿD3I‘î‚÷¸H¯0g¼•…Ì!¤ÒJ…‰5p%²«ïd…J1’'1¥ÃKÞª!%¨„êHz(èt!Á±àpA>YîÏç [–/Wåš5å)žÔ’µÃ§˜’ƒÝŒA"nF"‘ŠŒ\‘ƒ Æd&E’–“#Ö@e œâ±ÏŽ ð‰,é!Ù~·LúK†Tè·Ùä‹î1—yÈ}Ö}ÃeÝÌäc•7*ìC•g+×döAyJ~±ÂfFä PhÅ¡x`A|Ó{Dò_ü€ó¤sÌyÛá,‚ àNœÃ;ð$ìü†\#ìj²|¤:[eª°¤²Z®B2Ðwt'”mþ–ÆÆ´û̯°æ1tª2#3Ýÿ¤DÒõበ{J×é1aû€ÄDØ%L©;­[ÔŠ²áÇiÐZ-\þÊ0 $Lá‘Jg‡ï'¨üö×ÿߎºýϬX½Ö‹ea©,ÓF¢A_ÞŽCA¢Ú{Ýz¢Z=_…þnÝN@ÄîòKDªß¾Ûf¶¢‡Å/Gñ1rÌÞ³òî É*N™bex]÷ÅÉ&c 56æ9ÇÚúèš1Ók„ ¯ý£­3í‘wSßu¼øYɉ%ºu6{èJHÖJ®«¤à·áÈ³Ø åîØÁØ¡øŽ“±“ñÏÄãoǃ‰pÂÚŽí±rrÊ3åÒ/Ú—p)öATÒªÒ–ºôèÞZO$ZY1ÜÌÍ\µ”»„k­¶HK¢1´í\,jÅbQ]ÊjJläƒ`¤²¸z; JÞH‹FE2·;Öx-y~}¨ñÚúˆE†ÛCà[©SŸ§DJÝki%:SdÀ¡ˆá ²UîÖÖº–ΖþÑrµ> ÷{ÓG7¥þJó.Ü\žø˜B÷’Ï­…c©wiI™Sµ™>«u$K!E°ì QLß)²(½½šQòËÊ-OP˜ðUž•{U¨XL‘”á”Evcåýþ{;ØßR‰ÍÏŸº'µƒ¥;2ý+_L¦NŒMíêÜÜØ¦…ªã‰­ÍüÊ/v“·åª›YY`ñŸÞÓÔN‘„»çååüÊíîñ#;3CÙÍ@MÛ¥ùùÛiÒ¼ÉÛ²¢R|&n —\\ý4ëkhêu±šNÕúýú:UžÍGã>ÈOˆï‰yýY~N\·Äߥ?/rz¿<,öéï/7ˆ}^¿Á¹­Ù¾ºŠ:sŸþþýK] p—ç–î*ßÄέ°ŸÇøSüY~…»¹dn=¢Ïë?Ô_×ݺð‹œß#sÌ^ÒIzB¡ø'ÿ&é=]áïÕ|fA—æ1ù¨|Z>'_”¯Ê·äÇä*}òA.,ÎgB§[d"ð-Šæ¬ øa&Å6Ìï1UOBæÀ_ó[YòÒ°˜¥â‹,+ ½æóù31h5“(&„VYò×½XŸ%¡.ò¦Wäôäví¾o0?„á‘Ñ={ÇÆïß·ÿÀÁC‡˜¸ûÇ¿‰âÂ#ô®„AGõ  ؆ 1Šý8‚‡ñäê*«þv¤q/†°—úâ;«««ýçS–òЏë^4/ó (ñ²òkè)Ñ¢2Jƒ.õ´ÓK4G?(Ó‚fü¤L»ˆþs™ö ÃÜ#ù¡¡\!9þð©É3Óï=utftlcßìô±Âøÿ>ˆäI4CÈ¡€$ÆIp§0‰3¦÷ã$²YjÅ ‰uŒZ“˜Â<¦©gîkqn$ƒš%¾c4÷ë}óÿÅYÒŠ;è&67IÞ€ûïÙŠß‘¤¹R;O#š‹(ÕúgãÜ$öµòïê壟,ÙÚ“šZæ]­Kœ)[ÿdê¥ÌK GBÝ_hQ­8ûWuåT}åêåÚ[Ï,Ÿ3´.j*»(®ü­AóZ endstream endobj 140 0 obj << /Filter /FlateDecode /Length 20107 /Length1 32364 >> stream H‰\V T”Gþªúÿg bPð ƒÃ¡HÄ@ˆ†ˆŠ/`\—9‚¢Ñ+F㮊5FñŠÉšË ƒŠW’•õXÆçWE×gt×3Q#O`z‹É¾}ÉN½ÿ½êîê¾ª€˜…”Qc{DM™V”^—ÙW2ó3¯ïë ”$ôIæìB›Žÿh¬]¬EÙ9ù4þ‹•€G*`žÊ™Zœý÷Ëg°/¸ºÜ,Ç䣭Wys£eOŸ\™ð.µ¾øË887¿°¨ÕšŒY2–ó}œS§g:pk¡ØOY%ãÝùŽ¢‹Þ)‚çˆØÛ¦9ò³vmm·˜ã-xöLŸY¨’üá^ózÁYÅíëÏÃæ2Aõ2åë¨f - ¯Éw»ùsÐæØ]¹ú_*Vv¯þï÷Ë/[°Œ¼PŠ·‘€(|‚˜‚ŒFâ!]@" ±z]1Mð'†SŒŒ–!@Ÿ•×ô¾ Æ:ÌÇcÌÂydâo°`=õF0úâ Ò9ð3ëÐ ±ZÿV#Ÿ¢N_Ö.$á#ÔÑ@«æ™±x%˜ƒ¥@áÔ—æ T0á+Ô²ïs5ðF2^A*ÒƒÝÉ&RPEçTœÜ”†rz‘jõvØU("1”úp7}/ Ñ€ÁøVa-.Pw¤zû >9°Ÿ|ÈŸ:ÓAý>E’1A.E¶á$NR ¥r•anu݆¦ ÂR”ã‘'½JE¼Oíp Öyz—>"»cäžxŒÜ¥X#ÞmÆÔ⯓:êD)´†…fTÓ|××Uí¯¡¥`‡\LÃ[(“Ü|€C¸„ë¨'ƒ<¨âž|Iù˜zQ3ÐC%ZEX„Å"ûeÇQ²QêM…tž}¸%Oå¹\É÷T™ªVÿ6né8½E–˜ßv‘PŒ‘¬–JÖ–Kî¶ãsÔ`Žã{<ÄOÉ<*§jª¡§Üšwð9£Ñ¬3êº^íD §Ho‰`"^,Ó°^2õ5NIÍ<Ã3ê@ýh.-¢%´ŒVS}G?óB>ÍWT…Úªœê¸AF”‘g–›W-£­W…k½)ÞùÉÙÑ›X‰a–pq¦pâ}‰ãNìÅAÁö ?ñ6˜Ð*¢94Ÿ–ÓŸé"'qOçEª“²«0µØ4*3Æ%³Ä,w…ºÒuw4óÆSØ0@p§‰üÙrK‰H¹Ä¡ _J¶Ž k Ancɳµ¡ £‘q’õ4šHÊ¥Rú˜*é=`_nËy9¯âù[¾¥f¨÷ÔµKU.C›^f”ÈH3]ü­4[ÆYʬ쓬›=¾i o:ÞtÅåíjã suýÑõ…NÓ³õ›z“Þ¬wè*]ë®T%Üí$ü²‰„¡»TÎH¼Œ‰‚ f'—`ÞÙ,>ìÂnÆÁ·¸‚ïDnâ¶dö®Û§'hŸÚ’z _bhM¢l* ·¼Mkim '¤Z:AgéÕÑU‘Ÿé)ÕóóìÇ=8†ã9‘GñÎä,.à·x-oàÏx/࣒åó|o°Ku”L$¨$õ;5Q"R¬æ«Mj¯ú‡:§êÔ5U/±1$GA†Ý1ú9ÆãªÙEâ4ÙÌ3?9dñ²äYª,»,'-·­kk’5Åú™u§UK¥Ta¥Té¯~¸-Ô•_”ŠónzNñNã>ûP:•(p¤!OÆM.S!«Š¨ƒÔñ;x‰•ÄЇ7r"‚ÝG‘*î-³G„ís¤·ûq¦¼3¹4,¯„á~Ö ¯£Xþ=¤à+yM+E{ÁütÈÐÔ!ƒc п_ߘ£{GõêÙ£{dD·ð®]ÂBC‚íƒl/têØ¡}»¶þmZû=ßÊ·¥O o/Ïç<¬ÓPLˆH°ϰ9C3œF¨=))²ylwÈ„ãWN›L ÿ­Ó–á6³ýÖrˆXfÿŸå_,‡üÏ’|m102–`·9OÅÛmûhüè4Ñ߉·§Ûœ÷Ýz²[_áÖ[ˆ$l msãmNʰ%8‡ÏÎ]’/ÇU{yÆÙã²<##Píé%ª—hÎ{A5Ä’[ငþÕ ÊÙÞŸàlgoFàT! ŽÉΔÑi ñ‚‚Ò##œ—iŸä„}˜³e7· âÜ×8-qN«ûÛëÍÞ ÜVQ»dé>ßÿÐ^5@Q]Wø¼wßÛÝT¬ÿàÏ’ ؈)U‘h] *IŒ d¡Ä.ˆÖˆ &¶1ÚjhÕYÿ¦5cR“v é,ĉ‹©5‚¶E«)qÆT§í$Ö¢ÖQSÂíwî¾·îbژΔáãÜ{Î=÷ž{ßwϹP™?5®ÜS^Zâ ŠÒ"^£G*Öì»ôB¿Û]Lþµ‰¾UÑÖDÈé÷„›»À*wp÷t_´5‰ÿaøêɹþ@.–^ˇØ/pø¼•ð¦æxrXãŸïÞã™à™˜ïÇ÷HiÆ’¤º„o½ü3%ä¸ù>ORp\¢§¨tÒ€Ú^˜±äíþ^wÿXKÚ°ÚøáÓ¬íÖÝjÄun̉ØTK çVÞŒÈqj‘g XtÏv#ŸÉâ?s²(0; ÃðS¤Á+XŽÏðDðž‰þ@|6ëÙ?h&Ç{Ü„Ïîiû{¬¦ÔÒ8’ão7™~Án·ƒ©©Á¡C™ΉøˆñÛª?"mس!ý²ga¼ÇGúàV”Ž3OJ⯺&ä¥2t‚UÓ}á¾›ÊëÈ›žZÔýli´-½ ØRe["î~è»—ø¿€ÞAWJä·{|Ÿž9ó²ƒZŸÿbž¶çÍôäM/ö¹s~ëlóòcza{VÄfµ‚='úD¢nµôD¡¬`bId0w|qA#¿ÅäòÓ**æÎ Æû'‡ÿuIJºK§¼Ê^JÜv³Â f§ÆöŒéÇ„ØHÑóò‹.1¶\¤@ ×ãÎ ø¥!YUæqÇ{õxã süö Éýkƒ¹k‹°‰yZ6تӄZ¶zz­W[=³ØW—íê|_®éýŠjï‡ÍWï&ò*­ÑrÏÍ=ÊÓÀô:Ý¥L‰õ^¢*e5”Bõg‡4R:—­ÓhvHëâ•?iêù€ÿö’:rè1WE»ÙÞẉÿ¥œÑï ñ¦c´6€[ºjzY”h)Ñ‹@¡£š6:FS™öŽÖ¶µzµL2H»ÏœK :ÉKЄ_Ž>Z¾‹ñKe€˜x)ÀO€O€G€á³¸s¼e }“³„Jór'pÒ,¤€Ù,£} 8n6Ózô‹õÅ:¹ß,”ÇŒE²ÁQ- Ý ûRŒ;ÉsœÄ|ÝŒE´ý3Æy°[Ð/†.¿v1ºê£éŒ(3…Ÿ² ’Wôjmü†#Å:ÖÑH¯>ºcìÇÐ>>ôwCß íi˜ßÃã€132 sżm°ç³c‡a?ÄJ`k™´NϤ6‘)¿oäS/k߯ð¾yÏöžTüá˜îæå¹½ÑÇw·cûRœEL„|ÈÀ^ÚõzËH§uìsô¢5 çi|÷jm;g”Sç@¹1N6÷Òô³€bø_3vÊSâ:yaKu¼D›¡Ÿ¬g€c#¨Nÿ]p$Ów±ß4¬g2OpnÊչ郌¿Ê÷Ñæ~²s ÖÅ:§|6Îu”ÿ‘Xë2âh3ià‡ˆ­ØÄñ`ýtœ¹ß}ŸVØQƒyz€{?¾}- Cž‡7A7㹈ž·Ö9%O1÷¢a}gl¨³¯Æ‹²šš€›ˆ%8,ƒßGéÐ?9\lÂøLæ+xq5ÌMùs|ÿô£8vµð›9¾7ÚR}.ý¨^p½já§£î s–ã´æncn1gliqãˆ^ƒw<ï“yeIu÷ÎÑöÎÜŠHÜ;æ¾’q§Yn¥)ÌYž3"›U>Ã÷ß6%"­xø~"oœUò"Z\cKë,Gä:ùlË}i—‘ î‡p†Pq 9è,ÎðIšÊ÷ØØJ/ë+©—ó¥ã[NÃ\Û;Ém g«6ó5â<›ŒÚ¹ÍhÕï3Z5Ó¬‘6­Ñ¬Ñ—sûNÙöX–ŒhÛWÕÿ/Ð?4kð?Eü›Ù*¥ÑJ›±Wr^Ò†n[B_TC]©Ú6W…rPpŽf„ù*_‹ðr3jÈG·ùËSy+ŠŸ/bΌμŒ’çXrmáüεëÏÂú»0×뼕‘ã8GržÃØßYFü«µÈûTn¡bû^|Ï?í!+ Ó^•+éqG!‰Qô°ÊG“i–y‚ܪY5Õ¨“¿T¹ ÷É®¥ªŽ¶Ê ‘::P^ ç3yD囃²žï§ª›¨Ÿæn­§yŒU^YD¿Q÷ïà§”µ ěȹír1tb,r/ôâ2+Ûi,ÃÏ[¸&Š')YÕÇÓ²RŒ£qÊw¥ôŸ¢n¿ZaͧÆ@š[ÁI¼~:¨rA1s„ºÙù˜¿½³B¾ëœ%9Ê©É|û)£¿`/-ê B²Iûö•i|Î|¹QÜ”ó{ö©õê'ñNëB^†1¼¬ ¹b°Šº›{ð ÉÔ[¡•¾. Y-–á}~Ÿð¡@Ý—Jù†YGCùŽ©°ß}|ÃÈ¥…È%ãkä¯ ¾ ÎÀyOæ9Vÿ…Ãah'Âc4ö|ýŸÔ†v ÚßÓÄõÅï@ñlÏË#ú&¹\ ŒCû}»i¡èŒ“¼V†¥»‚ñ;3h¿ 93¬kí®–Ül–ÃÕûµÓ»äÿ ¿°Ý­ìT‡2:×”¯$sîJÆÔ ûû™´jKÉÒ:{Qñü§š#ÁŸ†hpnåüÆy•sçÓ³^õ±qU|fwïvmßÚç‹?Îq|sÞõÇ&>ßîÅvýu{ŽÏΗSäk>  iiZÛ¥I/ijD#Òµj¡”*¢\¨×{±s¶Cb ©¤Aü‡T‘PL€–4•Ê´q7sn‚ؽ÷~3ó~ï½™Ù¹ÙYºŸÜEØSÙ¾Fß'ðZÀüuº—ÒýŒî¥t?sgïûÇ)Ø#N¢ÚOû5‡¶ÃF?ŸM$t3¨µ0´›ôYfX­êGã«øytdäÍ4/ŸyÄñóÜ$j@ȳvU-óÊÙ}}+…¶ŽB!Û¼N¿/†#æmŽÏñ³¨±à•mlÑß—@†°áá?Iøþ˜ÝIÊâÕ|¹yùA¶€¹â„ÎdÑuÛ yyø³öÛÏ‘Ëü|¿A¾‡^°é"i!íàÒ\šçFæ9 áü®¶köé¹üBvïê}ÐÍ£x”6üœWÓüð'íˆaæZdaZª  (\ãgh‡ ìãG—`Z,Üä4oò&Hô·l§Ú£_⟡7ê”Ð41•†/ãÜùÞË*-FTés8p™?Sr‚éRÚÖÝÔ¶u‡î¢¸i«¤¸qP/¥!Œb³Hݨ{” ÃŒdëõ±› ¥¶÷èžy؃Œüf¥Òcx•õ;t·¢Fu§Òl¸ .ÿ‰Y¯¬3\aCÿ¾rN™SÞP‡ÒV½C¯élêìèä½J5¼Ð¨t(Â%þ½‘"!ÓMÊí<ùáJH«£úk–°a¥7"@ª$í#â¤È8'\ð<ð‹Î‡!ñ[fñyÔƒ!mRÚn2餤mŸ¢ýñ¢O3tL]Xé™/lÖuu­/οǧ|úå—5ÀwÀ¥Óðƒg66 û(†;uÔb°*,J_5ZýüýQŠ0‘ †ÀtÕAµU׃ªÑù—Ìb’©µýÄeH…ù4½‘ k!íÄvÆœün’»Â]ã„3ü$…¿Æ ëÏ>ÌÇøÍüï(‹¯çnÁÃ}ä: c ²Ú$¬!Œ6ƒ†ˆˆë$Xi)FW1³Œ|ÆBÿ˜·y›»·7D1W·cÔŠMÌaŒŠ0‡$T] [Œ§\2ã%ÜS\E‘Œ{˜ngºÖ\•OEåg£òþ¨œŠÊÛ£òç¢òڨܕãnn=ò#™«¥ßaúLoaz­¹Ú/¿ï—/ûåýò“~ùk~ùK~yÄ/÷û希{q’QÓ­L×Q—/” –¡¢+x "™Ÿ‚©­D„«´Õ(Éq¶lß<‰×pN8b°:@2  òˆ´£ÝðÇ(„¿øº­6“þY24f¼ŸE*õÂ?E>¬þeXý5aøãü¡zÜ^¥/Â?€o H –ä [móÃväq/Ç!'mÞê-K„blÅ-dûN“K8€|­¢ ê“dü›|dä$l“Ô縌Mþ¤æ0Ôþ¶Wl²šYB~Y$oGž#¿Vsž!¿R¯’«JNâÅ#¾®² ç}ÐüÓ‘Ýäeõ4y¡ûD=#‡É̘«È30¤ñÐ"9a =NvBí ±ly’(¹½Ï d‹ûv£íÃ9œ§µ–gÃ0¼³°9q²–bjâd*…ªžˆycžÞòûúÿƒÚ³¢µ{—Wû÷Ë[g½”¶ÎÕ¥,òu©¤µqÈ¿sx–;Â=•èŸåSH ÏâîHbmÇý©»4XP‡‹úp–F>JƒÕf´Ýo )(í,"ŒFðYJƒeFyS’èŸ"„q„C(Ã8áP£0ÎÍá8Üè&ãÜt¸YºjF©¯J¤žR¦‚õ@˜ª2óÖ{æPÁ|¤`>ÂÌ_¿g6 æsó90kÿ§koßÿb$ õáä–á) õ¥6ì,`•ûP/[åÓ=Gkçðþ7¨DKYÅ¡>«$Ô‡b1¯æîÆá]N—å„6„Ò»Þ§kçSNé.h–WLëâëâÔË™šJ¡¹lÅä}º+Iή˜ÜÐ\I`· Áº<˜°š÷„úSÈ›8п…k|||ttlœ^à %­ž­O©jªÙÓŸÒÞýcÿeü(i5ƒSŒ:‰bÂ2ÁitTc~š6^(@lZüì5VhcT¤ÞmÇ4î(¢a˜Ò\þ·YßöÖÖ ¯ª³ðUwlÊcPr ŽQoˆUˆ0ZˆJÿáô nx_Š(vÃKN1Çí3W!‡°Ä£bQX¨Fr:–àä‰ïϽö<—»—»7¹?è\îF1(»ï€Š´Êå (ØLÐ?¿pÇt ‘_X€3㻟ä±]@(lºPEÅíX)N—âÒò9<†nú"ê-©©|äï^ þeñ ïzì–ûH«ØÖÞ¶>Ú ª êúh›¡WUV8ÅÊd¸Þ)´òbWcSì;¿ FO™ÔZT^¥õöé©6°6üMn/ÎÃØÖdÑqçøòW#<ò<Ͳ8è^DáåH+íÜÞ¦åšp~büù?C_³¨ùfaf¾k;K`ðcÓE5®O; ðlg iÇÎi]ÝÍÍ]]Ù.ªAèê÷Ç~T‡¦ÍÀ)é[%¯J/Ÿ—2®+ÒœëMéMoñmþáݪÛÕÿ¤»Üƒ›8î8¾»§‡W’u§“N/ëd=O²åZ>K~ȸÖIÆÁ.S^%j‡`S‚1y”F LB í¤“>†d’8ÃÐiƒmlC18­ÓÚI“6t¦L2ÒJ&Htï$(í•f¿{{ûºý}ö·»*½Ÿ†opÀ]ÀÛ%ާlv•U8‹™b5”MeUAýB’£ÕûeÒƒÁpÙˆÿ Ü@C6D¡QÖY{ Þ‚×<Ô[™|¹•'fbŠÉbžµ% ‰DäßX¸ ˜"dÎ× î•k$LSzU-U£RìZ± daÖëmf2û‚ß§ µ–'_«Ñ’žš[Ûbè7Å,Rdr¿¼Î›}rÏ»µM{fK'áÊå[lá œ…p×ÞÍ{‡™=wÍâ§](Í-LêÀúÒ#Úõ+ VÂ¥ÒÎ0’ºš¢´œ²RdîÃÓËÎ[?ÿLÝêQ¿Àp#Ö³MgÅé˜v…i9¿¢gÕ¢u˘N`#®À¢Õ‹«šrÚÍ`#ÚÄÕ3à%ðEŠJ¥Ó±4è_.¦S¨ô*g}*†TÝ5à4:ºÐEÐÎL€4“Fiz Í ­uM¡3ãPkRt,AŸ‚V²3Ìú3ÐmD“£­ºå§H*ô÷qQ\µZšä×£)àDsC“ºÎÕ‰ Ý—ë{½ê;…þÌhn‚öAŸcÕêiôàE³hØaÛ ‘ÈÒùl¦P̈¹Hb¾`bÑâ%œ/Θâå,s)™,0Ù›ÅK²é ›…bÎ 3F²ðà`Víí ;)†³XcÍ­lKü>ˆUÅ<ÀCÀë  †±fËYP™Ý6MYÙ6Ù¶6rx 6.7¢,>A{*åŠxú>8üvéã‰+¥W~·Ÿ‡ZxtgÇ7JBé×J›?½ Ï~ñ!ÌüâÍ;/.ɰ?]¸hÛôOw¬ë^Ëx½83¸lÁ¢†ŽÜ÷<í}Ô™Òàŧž†Ã°wôôýäf)~ûriÿ{Ð éÒµÒÏ??» «à9•&ON–^{«7Õ¾nlËó[Á̓+zz¶™ûw¾ÿý5Éþ5“H/•×ÚKw?Q¿¡Þ Bà 0ÝúnæQÍ&ýNÝ~—{ó*ó˜ã†êö·,ÒÐMÁŒ„«‡«b!ÅM!ó¤iÀ޹)Ê=ŠöÃ)˜ íäž;nI€yùÂ#±.iÑâ¸K²$ޏ kcxãnÅ!d#‘Ì?Šb»|–¸†|²³p•ÉË‹hf!å5Rþfµ-¦Qù}yαf›’¥~cc@¥ônëÛwlý²ËSþšn+Íÿjä.Øw ùxÃs­v{ ^½µÔ·­ó›=¡ÇvçO¿÷þ¿¾³ç—o¸sè|ëFÔb‰_ûâÓת—€(ì=ÁùhS—H>AÚë舫œñGÂ;´ê„iRÐB£@#MmCuõ·ªx­•·ñÖÐæht}˜izZ¯æ5má9UÝ>hÚÍ»-<ïŽ6QcµÑÈ‘•«â›ÂnžÑäŠ>ÔÎi‘6tM‚$,¶ jÁ)‚óô) 7Õ#Xš¯å£<•ã!?wL4aÒs“Ž$ß!ç:¦3¢Ìê`·|ÚâïæÆ[’Ÿ"¶+*é¿B2${‚—L‰Hy“Ëä‹y²‚3y²uäå6˜â÷’d1u˜Â°±1¢ÞÍÌÚS€ÌL¶,м Ëò@ΰšéÜ=«eäÕEŒ )Åj”_q†~J¶£ì­ÊOq‘‚¿Í[~üèǯ>½+)¼¦¿þÄø§m«¡øYõRgØ\¼Î;cK *×€ ïK„¨UÅ+_{¦Äv†¾Ú]Úôí@0¬ ‘ÁÄ×å(qC»3ÈKG»Âé £#¶ýšÝĶ)TCfÑî£Í]urDËG¢I¢Ò+$añYÁ+ÍhŸî„eÂI­Hé†ê¨•ôön½¾TÊuPgÒó:‡ÇÉ;êÅ_;`GjßQí¬·×ùÃ|]¢¹'.‡u{…TNùýn±Ù"ŠÍø¼þ¨|]°w$:Fõuu‡½Jô¤ÃÈÓ,2lÊ@ÌŽxà‹ÀOÒÍT`xwf2Ö¥`‹ èX¤1®h¸NQ‰ó·ˆ’£&žßgÄÄ‹â QC.h;$]{l¢Í#¦bžPˆ!ÈTV¢8'DÉL*Ma—))JnV~RX+,•ßÒ£Jî$KÌÙÊPôJ™ ÖÜ%Þ­dÞ óùéY!MFMN–cÂ\–œ‹:eèŒ:¢v%Q¡ïËâìC²„äꬌ" ðÞžôÝ £LB¶9=‘ãæ„26ï}$µ‚ìv´ÿO¬÷Ë®”‡Ÿ£'7¸ñ%:ä3ôøšl^ßuwË€¾xÃH(f³ÅÏññªâÕê~‚µS¸Á;Z2dÓw{¢Vw]‡ýµÊô!Íy£Cw>x¼A)l³®Ð^x¤´~ ñ~FÝ*6¯·xž%¬ÏÓS/aÝ 0}tÂ*³-¶A-íA«l¯™Çj¨œ"Lñ³µ›y:M:†7Ù7ÖY0Ö±&D6¬ÃŒý4ÑA Ô!³dbi\‹£øy|«1±:&Ö´È2kÁ’ŠËiÉnÉáü¾ˆo’„,ÇŠeßU‹± ×êNÁÐ þë¼"‘2в“8,±ú$–,Y«Id3&ñ=4±Œ¦ü4æ1˪ Š+ˆ*ù„Peh¡D¹çOb™X\¡´¢]Šú•眄 ÊX [”·Ç-ÿƒïð•÷}§6 #‘àÃÙ© f…Ÿë‹2®¬ià¼þ«n§Œ†A/Õþ‡ò*â:ÃïÍì9³ÇìÎxf=»oÆ3Ëì®÷˜=ñzƒkOÄ58%@d Á\)G•Ã%ŽI8bHK•ž*¡MÒ¥-©•Ø&†P+ˆš µM„ZE•*RµR£ÖJÕDM+°é{³‹qÒ*Rµöûgfggµïûþïûþ\ÞøkKsÕ°%NÉÐ¥yo£Þ=týW;Õæ8±{ØŒ}'üí`â«v™dØšIh`øƒ‚àCæ~óż³7»²ã+Ì÷KÏÌ; ~ÊœcÆø¿™p¦!ŠÙ³eÑxÅp#—¤D”Ìa‡kﬡv't §È5!1¡(QÍ·¡*€P …@ Ø @ÜÌ &€f>ïÐiá•N'èùVÆdÌ„3 ˜f>Çå8NQTÿ·W«Éd‚’DÑårz”®”Êq4´ø°bÉJPQ•¼B_Uþ®PŠ­g]^ERº˜þ›ÞG¬¯ÞáJ Jƒ JC¡ÌU…l‡`—zÛÛxNfXÞ£ò\ô\87f"Ü$°“¤T{Êóÿ)Ô¯˜¶åu®FÒÒ¨Òщ&)䔎HÓM£î¤1 Å2¡=Ü%áÿÒ£ø-NÁzMâ .¢OÔaسæáuìÔyï]5ÆSšžÜ¯µ‘#&%jô~´Ü-øàÓ¥fRÉÍðë”°‘`à+Þ…ëËÁ1šžú÷¡¥†á®hJLXG¦»¶‰Ô,1Z[K¥méºcßô1¸uQZn ëNÃð%uæΛ7ÎàÞ€Z¤b£Í„„c¸¿WÂ5 Ö=sÑÂè´*v/êcÚïÐGˆIÆÞ@ÔFtFtÁœÎ…:A/ 9jŒaI&[.EQÑc0C—*9º€Bœ$J8 ¨È£„‡.Rv»â©îþ»t‰L}Z<ÜÕjQks1‡ï¤½Dó²€øD8Ì„PØPIŠÃü&)RK$£ÈQA–£øGÄcQ!‹æ²Ù¸ªªª„y>–0 „bž" ) P(iY•K©¨¬¨6àcc2ÖC™0ôÎVdB€ªØçÊmöù+Â\R,6ª´ÈCòó2-Ÿ£že¼KAw«Z\¨¢Z>Em<@m^’%U’ÕÓ1cùÜ”MªÉ?Í8ÿ-G†!©ö±FøX380ß³‰;!2;!~úºÚ¦}†2ø`,‚±G:^YÑ1Ïqøç¡Ö亩‹8êÒ—K˜÷UÆéÚ“KU˜À §Ò<\¼×ª-×ÄhbEÄ;u‰‰.I©ÅìÕë牢þ¡¶mb§og£÷g[â0©u,gœK®½î˜o¸ÝþeÛ¯[œI È0Dnõwéðµ—Ÿ½~f«a«-Íy”þ@¸ ¨¿Àñ/ÌàHÁŠÕì¢Dj¡6l|S{Ö8î>ÑrÚ=®1.¦ tŸÇÓƒ'ÒªÍÓ8ïMí6^¤~¢öŸÕάˆÛ>¤¹N”b”J±aû0b„XìÃ)–UD [‚Äxš0§¬ª!@…CÅÅÖ”$rñ³ôp@i4ºÂ’)A¢ø±ðŠÄa[½¢$¶ÚYï‰YÓ-b] E;9FHµRij¹6®‰3ÉmfFXú^Ýò n–ƈ€'„P-\ûÄ”0{u0ãÜø¾ ØÙµ’Ø$Q.9ƒc©¡]IžLu¶ŠénhQâÛ¿Ù7}ý;kŸÙ–hÛÈLý™ÝÒ[¸šª­cç]Ž>ðØãó×;—Œ?Ùÿó}úð¾tKÚew§Oçã¦sê%´flý‡joaÔ~€QK€"xößÙWX·•Ze•Nýbp°%K}rÓ{ªéHØc4žóÐå9Ó‚ÆÉƒ{ßAÓ_úú*—AýÞ{áðö‡==¸ñ®c¥s+˜?gíߟ}"O­õ¯ ¬ nñolnçýC¡ànnOnyÔÿ½ÀÑ —i%wO®_Û{̳;°Ë<è9>{Öw$p„ûVù$xÉ7 žâŽ›?ÊŸç}¯.p£æéü‡¦"šËÙ_¯ÿ¾Ü=y—K„nߢ@7·Ïts~ÓáN¡ Z±˜Ô†¦øûšÖDS¯APÃCîr¥¼\&Ìœj) Tß:Ö[†õ xǸª]Õ(X _#eÏ…¤ZQ=YÉk]ÚÖäÏdN…-snø25 ç CòÁçÀU@‘Pò*¾XÒ\p¶Øöò`¤‘ÒñÇM~˜™Äº@Ó8ï#T ܘü7I > &KàÞûÀN¸Sâˤëm@q„Á¯¹•¶r 3¿ðÕj™Ž×±&·BW\Ç·að;t÷ÈW÷«ùË÷ÇÌ+'ÚKêŠÛ\JÇ›tÇó{7=Ù 3«¼<бiWRž§©ð£» O½°y~{ï[ŠËWþ%ëÒ%ŠVŠÓÆÀ‘/÷,š~÷…ûú¶EÌ{0þ_ú„•Bƒ+N“Þóc©÷C;„Yœœô0Õ2¬QtAøí ЈQ‡j `Ù;ÚcqQŽÁ*^ Þ€G-PÚ9(†{d=åØ·Ã¶ûc(íš1ë5ÞZ¯JK¥"reH~NÁ1`‚R^Õ½²$ëLÿºûæüô¾«5¸‰ë ïÝ]i¥]­¼z¬ž–d½Vk˶üÐÊÈÈÒÆ cÀ€í¸PJ\ b’4C)LÂx€RˆB38éдÊì@DSÎ~tš™vH3m:ãÎ@:2§Ó–{îJ†„Õh÷ìëîÞ¹ßù¾óš­¼èÁ]“f#œiO¹¿Áñ=«-ëQ›Ü¹o<—¹ Æ(“É,ªyüYá«äJÄñÑp°$>ƒÒùôF¾Š‚j€RiðÞ/ØÔ3aTKëwI¶ºÐËçšÕþzÓüçYYãKÔ wÿÓÇ6TFu=Å“}ÙîhåÝ¡óÕRc4ê¶ ¾B]ÏìÞ+Ú°p‹ºFWÐMÕe¬2ô"z±fôž¨9Yÿ›æKq®·9N“=wÆq¦‘LÕ,¯"M!·b2‡ä¤ßKÃAÎÙçÜè¤ÚI…S“êV.;nJ·$ ‘4M€âD%I4ñŽX¢IŠ:èF±¶Ù'å© ÕFÄ"¡ÁÈMDÉ.ŠR"¿ðù4t¢‰Ã¥XQ¾Ñ¢­t~Áy¯Ïì½=Ç­ê ýϽ.W(Ä5>îʘ۳Ȓ¾[ÒðÇnŒãûH!afgÒ°[³|ÄŠó5kVœoíÚð!¡,|J$a“n±…[KàW6~S2|ØØ95æ+É–°‚Ú‘µ¤ÂálaBŒžÔTDkp¨k×k0ñbì¡P×ñl<î_x¼¯§{û‡'žmë#«ËF';kwî?ÛNšæ‚É(ø†][wÆ«W­8ÛÙ¸gû$úþöµêòÝ•™âÔxgß[üÛ@`G¤pîéŽN"­¬0ìE1Æ~b½îýJZ*—WUÕíIZtÐD\.ÂÙeþRv48{]< z™ d®º¼ÙÎóæ`ÄŸÆh†ŸõD8ŽÊf^ðç©jxcþÀ1›]¿ƒ$r¢ÁÇj’<¦µ¬hAÒþ<¯©|þ*ÿ ÿOñy´ôb”wòQ6O.”fQ#f ó##ñÛ‹ð ¹¾†¾àñ0¢Öô7…ø]ôÍ8vq¸j£1 %@J¥0¢Ä>•¨b K¸µ$ß Ù÷ñ¦c+)_ürüµIÔœub¼zKφ+G†³#S’îè|ï–åÇ÷½U¼65F;÷ˆÞÊHÿùWËÔôÆ#['‚g`íwïeÄ«C-2çd¼«‡(«—³Dµê²±¬üy$x(v–<¹˜Žp_Ú­óIJþ „ž޽¤:ÍšOY-8´|T&åwdR„x·%èw}–‰‚bL{…ÄÏÕ?QqÃþ„;Æ@ >Ç÷ñyº‚ð$ï© aìüz¸•Ó÷é7êwééýú7õçõWõŸèuzwu|V>]½·W E …YXýxкPáÆH©GÃŒ cê1ï`Š3eQÀ0Z&‡5¢áP&H–,!¡gÊE¶…ònýôGG'Ï¢à‘;¤Êê@uE‚µù”ÍW;W?µ¥÷µï}¶ïé7Ç_GòåáölmHöÛªêìœh¶þñ©S£Ïô> ù¥×Bþ'À}¤žfüÈrWä8N6NMe’,Þq®¤’äÔ¦f8mR’^ÖÃmc·qeÿÂésbŸ¸Qh¦ï µ&SJ·¿{é@ý¸òSô3û)ñmâʳ}ï&§óZI}­ “ eñóÚ 65ª´©áT*v»ŽH’m‹X.Q”òèkU’ë½a{sºAò¶¦Âvʆ¹G *`“À¯KÍ‘*&_ølÊŸNcåæ\.3gËÈ’M€âMMKïØ8œl æÙt:ÉfqõLÁÌ;N'Á3w¨,5›˜ l‚´•Üö[ðä€Ù 9à…IzU_$é-ÑÕª~Ç‹¼î Xï ÛôËﲤwlvÌ6d„0÷ñ;MOœ*V,¾˜¥e’Bêh<5hD-©ùØÈÖàøn´{QàÁx—Jôÿ•X[ªå>©1 mA¯-þªÒbä­¡U¡e'ÔP­?ö“gV¯èûà½?L­”6sŒ©B :ïòôóÅ;íõ[žGÿ»e“Ÿµò®Mâ–çjÓ›žûbÝÒñ§&ÐêíµÍ葨Cöˆf R]YÜôÁŠ>ôÖ]¸?Ü÷Q¢¨¦*.ê\Qš0ÒºÆÐo$ecMt‰q©Ómè6.c‡ ë…è úçô/lSô¥¨ÃËÞ&)ÆP¥%gŸ3 F—0Å*â°W5°YÞëó&¼”×Ë…#VFã¸ªÖ 1 ’¢'Ft“˜ÖN3@jÞ/¯Ê™UxѤ™ÝRüºk±÷þ{[áÞ°9W€¶h$^(£DX0­K€vjµÚÂS1b±°9C928MY|>±T‘q«d[ä³óÚ3ú@UvÌsÌóC˾ þtüÕÚ¾þ×O̼:²w¯Ò8úw´§)8¸o飾äwM %çÖ-]Óóƒ¶j¥ºåõ®šäMèГŇ©Àõ4z™ `:Cu9 ¯¡m žÓ«Î‡œíi‚¶v©ru2Œ¯{Üaè`×”ïR°¹`3 É.ì,x傞ìX»A5iº«…UxO8S…H„Ð7O´EêaÂ1V¹ùYüÏàÅKüޫƃ¡X,@‘ít8BÈŽX;x¯@Ì +ÿÖ[mø­ømN9R­Ð|äÉ┳‘Ï“”*4ØT ì¹Î€3ÐÉ6ý¹Ì¿¹‘ùÂ|áá ¥9Àd„ÙE׃°Ï@ÇgfÌ3ã:aÆœ¼Ç³²£a½`"$vš^8 CŽT3ö\(T7” â]—j[4[ƒšufÂù?º«>¶‰óŒß{çäâoûîâ³qrçoûìsì$>;¾ Î勨1$P§1íºBÈ£%¤jWu@7ØèºNki…²µhùZJ[Mk§Uš´&I˶vkÄ?hR¥aöÞ éÊlŸ¿¯}gÙ¿ç÷ñà*ý곊«–‚`~NgHF{Q÷\­ô„gâè£Ä‰ÙÂè®ù©©Þ(Ût[m¸žŒmõZÖž;g)dx)=º˜_?Õ`ÃkôfW_× àÎcsµbíæ«77õ\OÂçp\ß„§w?ýúóº¿r` R)Åýɀ˖h±à†ˆ0'ý¶ÆÚ:] ²3¬EÖƒœ=1xŠ8Mžq,žy‹ø€y—½8h ¦mÓÅyÛ|ñ§Å7‹Ív«•ÍR¹Ü¨ÕžÕå¼ÎPöhËÖ}G Ï^ÙÄõîœVÂNåÑ„®%”Lç¼&?xQ—ï¤ÞǺ6$ S²ë”õœIôÏpýbÛ{0AéE8¨µQSÓФlø˜Ü;¥×;•S4vŦdÛOmw`„UU­¨ì½½Ñ_ÌÍÒÙúÊ«ÌUEŸÙÑgUhÚ¨V[ΦÐÖ:¦Ñ:5U¦•ɶ>Æ*¸A Õª£Mãi·»+‡‚æôÒá.Öþ¹wî7Ó(üêTª{þÓï?õÑCÙ˜ûÛcß™}úóß·ÇK•üÜ […G‡"5ïX¹wóëÇ?,ÎHXqg:ñìã=¼ÍNyíñPJ?\’¾*Ī 9ˆE&ӭǶû ã9¹qê¯ ¥Gį½zgð›=±ÜŽRxÃUøM¨i°Aþ:1oæ9lWó.ýnf&<¯ŸgB á–2²;„–%$<@£1žGH*=Ü1’éðÇA‚à&ëöPn·á‘4ÏÆ;¨x¼Ãß©Ãã¼Áitg"wGÜF%¡Ë^4áAÏ\0ÝŠ½ò(v!ý‡¸’yaÔk®ZÚu¦µFSj• Q¸qWÆMÇiwÆÐõœFù†p+Ú½ !‡-¡N;uèë…†Û¤.ìg Vä^.nîwm–oýÎ;ª@«-¾Õ[&¶·=¾Ø °ed=pš²ð€ âÏWH*Gù4¨@ÔéŽÝwd ª92©iºÖF8îu‰ h¥ö+U“rÛAÚn4Û³=¬o~‹/˜ðïs¸¨öàPÅy8ê– þK[›ŽýGÄ¥ÌÀÖZu}‹…0ó_!…C‰ ü £œŽè7Ø?­+ÿNwà©5‘f,¬xïCw?A;šˆá@@Ó³¢àxBˆ˜L1ÙåNULÀåšöNF"I®dBö6/a¯ÈkLxÄd5qV–ñR ãu™hÄËØè£è%«~/fZ#°íÖ%àÿ%7C0²[`ÐD)ÅÔÁSª¬‡h22ëÑV$éH%™ã ʸ¢ ÍD OÖ±¼¥òš٠Ÿ”‹9Ìj­Ï¸•Òòå¿Ûêh«X¯ VÈ¿Wl p•i§ª^ò2-›¨>³ _–†è)//[³´lÍÖ…êø*i&WáÙV÷Ào£¢Äq’˜¹N‘fkkVôM 帔ëëv 79Ä('I\T¬í»38b±Q¶x™Þ9"tƒ›ÁµÙ6G›b £™í€“Gõ °òa™h»Å~Në cÒ(7uÆöáÖÉH[²½„ 0·c,ÑJD«ÕH0‘VÂvÿƒ3†«à]xÉ€l‚B€kÄÇJÀiR60z‚&ÓëëRU5>þÏp*#Tк\}„¡ÔÕÅ CÛ%ý­p× w•ñmní}««~–…†»fíÓ—YBv4l²a–+Ë·?«þ/h”`ˆ­ª@V9µ ŒÊ÷”'ÑzÛŸ­‹3x4  º£vÚEZ`£e™m%!ÔíVo(B'`ˆ¬PVÊÎmfŸB)_`/vzŸÝÉâAˆ„ÿî'M³Ð Ëè°ü¬ òº'*ú‡MÛÌ[¨©žªX•¶önßIîrLóó¦yÇAþ@ïìyþùÞ#ƒ'±—-/§O¾ΘOe~Ñs>{^/I¢›€ôÎIÅ‚ÍwÔ«h²‹ &—”q9Ù"lçnr(·„¦®ìÁyˆJÐj•d¿ Éî¶Ô HápÌ•®‚kHÅ.ÏŽß(hâ­¿ V-áIêÒ¥-£¼º”éD*µ§p«€\-Ñ𛏝ç«T*:”ôÛ+Uôû•êÜ_¥ï÷†*xï»§ñMPã-_ûe8wÁ‡’Dë“|¬–‡ªzÓúÍn† ß ÄgʎšV~5kU³AV§DÛ,k…®‚ÏG®îu%ðcjÞÓÌ'2«l‚þ’OdVGAÿ=߀¡ó“™ú2 Þ{fËÚm“‚Ø5@,žÛÐ!³}³ÁàÊvy]‡&Cþ÷0‹bF“5š8z`ÃðKgÚ6o°÷ý”këÞqâÖ,é±#µµ¯m|ªÇ#wun¨Î…¡¾±¿¶pÈb1à$Ÿo|¯+éOþôï1‘„Ëb‰úÛKŸ¡ÕG¼î5Îð]d¦öGôð©wøM sÂ0]œ…ÌIƒãšSÆëN)¿R·Ê–„q£î„n ×3cžy°?¼þYä*z5dœS‘6©Ÿd&=j0™f´XÒ¼9:&Ì„ o¾Kbj*‰k©<@â¯ùŒ :_ObH:ÆòqŠçã|¬Mâü¢‰‚ç”à^B_¼ ܈+a4†b¯68¯½©Q-Š¿ñõ°ÂkÙ…W5Fš[<à•°ÂÿŸ°+­,/ߎ}9¯< ­ü—ïjmêºÃçÜcûú•ëÇõ}ø^Ç÷ømÇÁqb;‰Cnx•ÒB`) ¡¥-JËÂZ¡¢ñèèHÇ@E´c+"ÕJ«A€£ÆV$(“¦"­ÿtš¦IËÖ1)£íVÅÙ9×á¥U³uîÑ}øZú}ßïû}!ïf8K]÷#žåÿXš6‡éAô î䦙¥âNîž]Ýõ«Ÿlh¯Þ*¸mNO¡MèmÉÄjÃ/‰ H,ë¯ÓÞüGg0n!t*Béó ¥gÊk:Ü_U³ŠßUL̉g_†otÖøüòœOÞé{ö(³yXC&K”x“áÌY™*à'ôv+cC;z—?)©g¼gÄßÈ–5r¿ÿCù X>êeùÿc|‡µu•w%ÏÚNOÔÁ"³YŠš¾ ôªîewvöæÙ ûØ#,ÃúŽ^N:A€Nî}AŒ ô` ²@cÀ ®¨é+2Aèn¡®›°ºn’0A%†*bAJëcLFý¼QRZÃø3Fm½èì‘òäî='~Õ‘‘ãï­YràËu{¿dzÞ,ÿqüÔë`rüäâõå577ÀŸ‡6,/E¿%Uˆ€Ø«wöÁ½ÎÃÎÎKUæ¢Ð s‹…%5}–g¹—¹W”ñäë¥Ô…šë · ÜVq( òa X­oà8 *RV8_Vˆ,R'àû:— g#] ëâ¨uh¯¦í‘ˆpš¢úEGíò+—•\RUܵIc ¡3–ò:UÙƦ ¸ÀêZ¡›…:ÛÃ~‡c/³fö"j%Ž$ýK5™PÈcç Šô¶)†{µ:Kª?§HJÎ>ZN¯ª´ÅlSlý‡\çžš®°6}³â†aá²v³RN›á^7r‰tq|s—ÈgÛÕûX±þ‚XÂè1džšX9žf6dœXXøÑ¢Ž÷÷o/ÿä_ ]ÙQÊwÙÊ)û@{tZÒpuþÅyßÎmXÑÞQ?ô‡z´çï;ŸÛ;ü§rQ ”ËË$QóÄb¦æh¨×§ÙÄ4¿´eóÁß­ïéûê=êõâ¤HE‚v ü[ogˆF†ÈZûÐZÛZûŠÔ14î:&Ul»”ƒÊLí121AMƒ`QèŸÉTtAƇ¡º*X5èa_Ìbl’‡4 ‡|‡°fO†°;kÓm=6d»Èè€L„3©ë˜¢‘‘ŠXÏÏÍc½¶€õ(Ya²ˆ=Çz :0øþßÀ·ð ¶müÁ¹4– ·x{žtšøoÃÅ=¬ :ä²1j–«×èH®ÏRM"Pó1tRJÄÒ=2.m€ýûOí[ž ÅÃò)dbX«ÃãR ½OÕk,øÐìò…„f´¼¹¬Àô–…‰ØüÒœ Æ[¬VNúíù½›¥íÌ C¯Óm#ÕŸ™"NûsRý,8¯G ”ª»Íê0¹d‡àjI˜“ŽˆëBu° vÃAh‚ФÛ3×@–5GS¬žÓóÂ5YrTG=f\ƒº×ÑÖ!¼ÎµÜÀÁ_`´ï#õ»ŒMxÌÚ?¨Œú¯ÉÆXÈd=KV(œ“/ËŒü½ú‹p!|Èi÷Ú4¾Þ˜&ý09Ed§­49U9lNSG‰S–Kb%©•Šð9BëZ¸ C¢K®A¢çMÌçscæç»æuT×Ù‰‘%kCÞ9Rln̲yý²~wàlnï&¬p<éj"á¿ß½ua6TjüÑ~ýùwÂÎ \øãí}ó’áÒ§ Oí6£DaðjRÃçL¯‚ ´\f2à‡‰;" ê]ó-ækõ©£à.DÑê°†C.\™„HLp.h2³,¨U¨ªƒ²Ùo‚V¢Y~¿É„€1ZxÝšè'M굤_t3.¤!fA4„Á)Ö5Ê]„°Äœ:½¢ÞXÌ_oˆŒh$ÍFÊ¢=’lŒ0éi’i¢©*!bš¤ÄIÊèÉŠÖP•1WF.©ù´á, •¥Šg, ›K%è¾^ñÔÎåØÈ7ÎÖFzü°çíñ€ÛáOɽ¡'W4k›ñûoÙ_|ã Ó«å/Ú¦Ï <ÞˆoƒwS¼)ݸ‰Yn9@Õ‚NÈ«„¯%ø–>bmñ·0ÞBýcõ+KÅW„­â¸ðø`ëˬlÝhCÂJð„€AI`BÉT‘9nƒÅx[²;9˜¼#ÜïY_k©ÄÛìñDs±E”Ì9¡ÄÇêÜL.7ë•Òl XB_òñ|Iæ*?—¸¥ï¶ÚÖ! ÔÒ žÌP^—ýy^ ßÍòûø#¼™'éAwæbªž™>èU+n‰ngÉãÆî*{mÞØu$™Ïªº:¦"Õ?צJ¼DþÔ¾åŠá#‘€@yNÕ#Þ6ã¤óè~Z¬dÂ.š¦Œ'Il¸oªhFxÙ’9)’T¥h S@éà¨hÔ°‘(mdAv…Ù4ÐJV–¬ Y÷²,éÇ ðãN0Ô]YØDcÓ£&lÓÔ„®žLT9<©Þ`woS.Q[åî<ö·§3zíjì± 5KµÎ•zc¬.¹6áBO·]DÃÓã»"^6$mk×FÂÍK¿*ßüT¯ïü),lRžà:ñ¥¦t]¬ñõò¯G"¼4ÿ¯¶Œ2©–0i”0)¾ÖÛÏC˜ÔÝ…¤î$‹+ô3ßB˜> ™RÖ@ƒšÃÐj³CgÇÊ, q”èœY ;4o·Í‹¼dîœw%dꩨ´©) §Æ ·ä™Á².ï”÷ËŸÈfYIj£tÄé}§¯ÐïŽÆ?Œ›â—P„61À” ™<®¼ÇP$’YD^ÞƒwâýxŒH)Îb#<ÁÎ&þ,ÓÆ6(1E|Ò=õøìy™>Ô1”nOù ´u€K:uظ ø‘ò5R™© ©4‘‘ºCLkaHãU•Û&øBUŽÜÙ¯öض®:ü»÷øûúmßÜk'~;‰íÄvbÇNê8·Ï<›dm×6´Y›•´ êƒ>埪›¦5B¥ªÚÂXµQ6ÄÖ6¦QiS¤´+Hˆ!T ­@J` TÛüεÛtH¬*Cüå{õ‡Ï}øþ¾s¾óýüaÉ$žø–íZ°vPèZÈ@®õ¾ÓC÷¦¼—Ü©Æz§¸"ìi]ÙÖ|/ÏÿœýâÙ6-FÝ_ú£r£aöJºZ»àd5v­“ Ó¼¨AÏå6ˆkÃâÖð-Q¶ÇœYG¯s‹ssxs—{2òJÃtDgi¦3=Þ™¤5ú±ær˜äÊ-W—ê˃Rœw%Åð,ÃÔ‚o*8 …Ъ]N§ ÔêX¢Pª”fÁ]n]L×­#:dñ²ò˜Ñ̘ó$-é™ÛÂTí112·Å<{BªqN¹‚Ã-6'±‹áÛ.ú6”QZ_Œ¤h%[Ú“.ɛл$׈‹¸® «Q’¹P¦¨ÂZ¶BaÁ„(Œ!Aåu‡²Ú-Kl¹¬6W» b—¯Û(éôŒ‹‰2!g4¬„±Q9Ñ©hÀ´— A¼hîÀ‰÷ÛËæÑg”å(:¾n•ŒUæ÷þf(3¬V±(Ô %Y¦9tX<¦œ+°³«F‘v´š:Œõ>÷»tpiq[T0ú…¶ºfƵ¨Ìir¼`¹qi2æ0kýA»;ÒÕ–l^ÿ¹âŸ2ìtayýï;<¼*°ü»ÅWŸõ±Ôí•~Œ«î9䣑¶qÔ*¨A†.&gf—~¦ß¹ž9.œc¾'¼>ßõF·©¦‰ßæ=à®{•Z¿>¼ÆO‚(²áp$'å²R£×ÇŠ¢»Q²56J¹0nžæÔ²©U3€<ž’ÜöΚP§f:ZZB:EXÈy§¾í{×Çúf9vnå¦$LwÅcÔ>Ö s9iÉ@2'Õ¥r¹'q_áÞàœØÛ*ôä¥r÷É;cHÍ[Ñ£ÜY@E^ Ž¿¾¯3Ó÷Ó4ÓNoI“tžø%Nq;A]O‚ºž]±<ŠëÉÄK‰¿$ÈHâh‚õ$â )ATZ;îKëXyáŽQ{„ÙêÏAwaž*«ì‰Êè -eg¤x;[v©Ì~Æáà­Dvq ªuVÞ˵Ì*žDfµð‰\4»?ýDB§2,iˆ¢¹]Åï½øÕ¤;¶4dã4VR­2¦û¶¶d ™eöv-9Þ9ñõ¢­÷Ìà³#“Yg°¶y›Zû¤áëÅÍÿx}4æn´Ê˜FYãë:Ç9»B¤ü½…y˜Ÿìsâ‚…Ë—~/Y|I=]¢¤[œÊ›"ùÒ¼ö¦ÚÙëÌ»ìuòkòO¢Š’%¤Û¨ßÈM²ÛÉØÃä¬þ,÷ ûÂU„‹ÓÚv½GË'õDÇæK·$Û,DWs•»É±79æ&oh´ºßÛ·¿ûŒ`„Bv$NÉ¡-*óš¸Ö¶Ò`˜·ÆmœÅà6Ï’¯Ja!n=ö.Õèj0ôKmžeú¶SDþÿô'½^'9=Én£ûš®âËHla,’]ÀíòÃ,M/²w ¨¥?‚ªŽ–ŠÈÞL_®åÇ”®þÕžHf[®lw¨Tß1Ñ»$»Ú0ƒ„7èK Ô_èÆ°x5Ó²0¦*Õ¨¼ß—pÉB0g R?G$;-leý¶z팷Wzñ¦¯nÌþóì—P`ƒ;3±ºà†Â!vºxk“Õ•® ‘}B!nJ®(¾_ÇÞTªÚ–@åØù)ðœ 6ÄS{ø¿ƒâÚ"”¿X„úÍ2jÎè¿Q†±³ ó½EX/–aÇÿÅ#„ƒçûu»ê±öâ7úð9A@èÏsáµÄÐ4&Ž´>€,ì%2a‚<‰´=[óFž¥2'qD£Àíݯa;kÁÛÿ>ºñÀ¹è#ú˜š89P™ìwÏü,ºÅ˜ýH#hä«Ï¹ó?¡õåÙךî) _ÖüMÇ.'ò“ÿ5> endobj 142 0 obj << /Type /ExtGState /SA true /SM 0.02 /OP false /op false /OPM 1 /BG2 /Default /UCR2 /Default /TR2 /Default >> endobj 1 0 obj << /Type /Page /Parent 117 0 R /Resources 2 0 R /Contents 3 0 R /Thumb 77 0 R /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] /Rotate 0 >> endobj 2 0 obj << /ProcSet [ /PDF /Text ] /Font << /TT6 53 0 R >> /ExtGState << /GS1 141 0 R >> >> endobj 3 0 obj << /Length 161 /Filter /FlateDecode >> stream H‰L‹M Â0Dïû+ö˜šf›ô*ˆàÕ½‰‡*éQlAü÷¦M 2—7Ì›=CÎl‘k(´Ò%ê˜Dd¬¢B[4Û"‹üšçwùñLØ ESS¼ßa¢"Z¸neV*Ý€ÒŠW*•Œv)šÔœÜ(+°]·©ÍömÙ]À.$Ý Ý3ü¼ÿ¢wõˆËÉKRFT‹ÓË+ŸàÀð`š54` endstream endobj 4 0 obj << /Type /Page /Parent 117 0 R /Resources 5 0 R /Contents 6 0 R /Thumb 79 0 R /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] /Rotate 0 >> endobj 5 0 obj << /ProcSet [ /PDF /Text ] /Font << /TT2 135 0 R /TT4 137 0 R /TT6 53 0 R /TT8 54 0 R >> /ExtGState << /GS1 141 0 R >> >> endobj 6 0 obj << /Length 2464 /Filter /FlateDecode >> stream H‰´WÛ’ÛÆ}çWÌ#  ±˜ÁýqµRì¤Ê‘²bJ•²ý‘X-\KrC`W¶ÿÂûÅéž+Htò+)U­À9Ó3Ý=çôô¼Þ¬®6›\H±¹[É"iJ‘Â?ó¥ •*-E•I^‹Í~%5|ú¼ºú惟‡Uš¤©ÌÄf»Zãg¦ÄæËêûè6ÎuÏýÐâÛ~§_Düãæï¸Ÿ2û¥n±µLY§¹XËDVª›7š)®‰xóÓêífõؾ«:OÒ\в¬%ò¶”YRÖâÔ­¤Tà¸Ã ˜°¯ÄÜm2º;»µê4©k‘eöڛܭþ9³0.ÔIVz3•'ÆÊ½ÖI-mR•ɨÚ²YV)ÍÌ]ª0äè¶{N&Ë:©‘,›¤L&Ë߉Ö/fü.ÊDç|1\•%U5/’:¿ˆ5Dh&/„(â›vì&!VÈ.:DUÖì@ýbÆß¦ÿ^ˆ0µYcÊBÔ“—N±Ð!^?÷ÇSRU9{Ž(­iF“AúÅ,ÿ ={9JU5ÓƒT¹Þ‡ Ó̦ÌÞtÃöÔ?Ž(m`-aQ\SRt'­‡ã >ˆ6^WÑ] |4v'nVhgÑÚ|náó¾=ØQ;*êZáºÆ6Þtµ}¸&t#8ǼM'¯=x¿dò¤s_h«Ý~ý¯ÿŸúQü c;> B{ªÐÓ¤ÔnÕxÕª$‡ *,N?ÄÆO,Œÿ[7+ë¦Ä/tsërTig2현rð·X*ø©P¾Utã~¿ƒCA!ƒô£;x÷\ÀÓ„‹ß`ý¨ ><=>Oãÿ))]Êñ+¤Ü’DÜu›-Œ€Ž&ú&Æï÷ÚÛ&ºÖ¿LOžKzg‡.ê¼t ÅÖ#ƒòõÈàl=20_sW Ì×#ÚÜ×#_˜Ø]fTâšUèf‘#j¶ž >0 ~ShðŠÚ—,Ef¶^¼žsß#§W²ùêëùdcîãN_l;C%[ˆ2;ú2ˆ];¶Ÿ@öƒ%£ÖzýjîR3MŒGQC‘HÈêÄ×yëîÿVß«°f¬ö»‡n; FçƒÝsóÊîãE•Êó}mQ¹Hµ°íJ*ìd––vÊz7fŒA–‡gp\K.5V”x£03 «0s3(«/ÆØÊË ¬ºhc'.«-&f—2<s‰\]†‡ä÷qÑxpƃsôþ´È°GžÆ“‰0ôLÂ(xQ1ºð«D-ÈÀ,‹h8xLÂÁ-rošHÐÒÁAøj¥|µR®ZÕŽ]<‹–n@ET«ï ôôëïZMMª\“ªŒ­ùõ©èǾcÚ6tHêgÏÚ}¢oÿèb¸Àá1öðÆø몊Įoíç©Õø~˜ß±p¦9OPƒò58KSóLeÌY Ìó•6÷”µ¡ñ¬ebw™QàdèŸæ±kÜ·_óàh> endobj 8 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /F2 55 0 R /TT2 135 0 R /TT6 53 0 R /TT8 54 0 R >> /XObject << /Im1 56 0 R >> /ExtGState << /GS1 141 0 R >> /ColorSpace << /Cs8 57 0 R >> >> endobj 9 0 obj << /Length 2264 /Filter /FlateDecode >> stream H‰¼W[sÛºž¾êWàìD4Á;ó–““´i'Íi¬N2} HÈf#’ IYu}¿Ýu‹Ý3ÓÆg< XìåÛo7¸5ên\|[~àoYøEªŠÀâ UYûE¨ªvqó¡5êç~ñ×ÅO«ÅÍj•*£V›… yEág)m‰?ÈÕª]üi¸[,!-±¾ÂAaLo‡Åýig»·Þ2ñî½eˆÇ`GoiB¿Ðêƒ÷ÕŸ9Ô`)üfÆsV+ðS92§CoõÏ3uÂ,ñ“K}X ÌÐ?0ôFj¼]~,Çɪêë-S?× ZEèì&º ƒ R¬Í»Õ¨F-òÜOÉÖ¨8ŠýÕ˺‘$LuåE~¬Éœr«F;4x¬÷£šîËIíJÄ]?x~ÝÔ–DŽM»ÛZUvµ²o™á˦©™èNÖNªµÓ}_²”:éÉúK¢f¢¨Ë©Tö_|.Ô»/;÷zçj¡o¨ÕÚMÊp:XÛ©úbî¡©ÑÌ1ð3̆FÄลíÇIûf*×0dÓªÜí¶MU’'F5Q³¤oûfh:9^õ™éªÅglÚê÷ΜâhN!æT}Ûî;'Xõ`@øïžU-t?LªnÆ©ì*«Öv:ÿdš¬iá¥tSjû@QŒ0Áö­î->„dã÷T(!a%…οÂå1„æ/æ´ÿoÀ"ëR4ÔgÃÞº@#‡Šüif`²to$¤Ýo§féź-=d¤Fqàç€)F`ÓU<±…¹ˆÂ¾¦øA¦{ô·m( ª–­N‚|g‹h8²Ðµüu3у& Y¸Ë.9 È÷k4õ@»­dô4ªÚ­•ýG|Ñ'Íh;ýïw,¾ÙUÈDÕ³}m/òQ–qض“›kw“šúÙt"¡-t–oì-¤$êì•ù~?n]…{ôB£ý£¦g `Nšáëʤ{£(¼€7âˆN\3ÉÈzD$æ”ô|kw–|ÙÌ»@‘r›\y-»±• ·hÝ \5Ç×2VO©¼t¼› ï¢DRÚô5#û&;/zædÆ þK?´åöµ2Aðçõnäݰ19Cîÿu*•O¯äÓ÷…*BÌ_#KÝñœ;?úüèt~$çÿ±Aa¿¾÷è—lIpìxJéCÙlQ‹ˆÚµTÖýhëWØÏúæšáÒŠŒ«B±*w!ÌÈSZØx;ö³Y±çÿêåÔ×…Á\KäíØb§ÁEyà ®ß¿{³úÛçw·"ä}ø\OŨ2§–èwרŽÓ+TÏ’D™çªÉÛžXºõL¬wRåË 4Ú º GäÎÑÌ$“ï¸øEO7l¶ÍÎ˰d|úrR$£¨ºnq¯oG±kæNF“Æ'F0ŽÞá„M¨ØQi•&¿&æfþèT‚~RJ†áUJþîdE¢ÙŽ">îÅ][©P“ç¸X¹kÜ'îdJFîäVõ<êæ{Þ•úÂ'?Bù£îË3åoûÍä™TàEVŽ©¤Ó³¿“'§_륚£HSö\Àx}å‰(Áz|U›s‘ßöòìäëã údp¶}õUÝNƒª{ôGL/›‰:´Éª;ÛqSéAЗ E˜c¦çÁÀÅ×…#fßÅ.± G¬]Ñz´´•%w–tÞWVüüÚõ‡­LÕ’Ównš;òœ­Ñ±Õ§4v½>.‡ÜZœOÔ~úE(½b/cV’&–üK5‰nègÃZÖ4"§“jýx.]6®åÛ£]¬Pt“’2-bÑ|mÎQŽÌKæ¨ÀáÈ0¡ËÒ7ÚiˆXˆõ&B¨¼öB{|WÛ‹YÜÛÜ2÷l4€® ½ïÜ”Gþ‘>jçéˆ{'±Ã#(nqßzÜ”riahy…+ _ÂhÕ¸!¢6ª*ÝÉ•uª=§ùoηS9L7·S¿»ùlwPƒ(µŒ¦/o*ÊÄí¤«­ï„'!Š’Z £ ¶ÈNl‘Íú F‰/Ü ˜Éü… s§œ8Æ ˆ.2·IfÈø YtS<,]2糩—·ú‰†ü'ÜßÖ¬Ä^4¡è„>÷åÕ1ù‰Æ\W{»ßy¹Þ1U¥Ì¸›ªŒk‹ „¹PË«jYdù×8Ð5aT2=êªjÇE/ËÅO éÓN"=<QJ9§lØsÉ¢¥:4$ê|owç&ûj:/'ÖÞ;P €¶ŒÓ^_gñ²ëoØË “%Í¬È ãíû (’bj*5>vÕýÐw=à‡›W#}÷âYêÝCÇZï=¾Ì‰ÃÛí#©F¾5úžðSè±ù7?)FSSO#ÑôÝjñŸuxÚ endstream endobj 10 0 obj << /Type /Page /Parent 117 0 R /Resources 11 0 R /Contents 12 0 R /Thumb 83 0 R /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] /Rotate 0 >> endobj 11 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /TT2 135 0 R /TT6 53 0 R >> /XObject << /Im1 56 0 R >> /ExtGState << /GS1 141 0 R >> /ColorSpace << /Cs8 57 0 R >> >> endobj 12 0 obj << /Length 3967 /Filter /FlateDecode >> stream H‰¤WÛn9}×Wð‘½XµIv“Í~LâÁn™Íl,L’E ËíX;²”‘”óóÅSÅ[Sꢜ` nûT‘u9U¬ºúÇdŸ³ßg}m[Éü›÷uoX/jÑ Ã:ÝÖ½b«ÇÙÕëGÉ®w³ÿÌ^.fW‹…a’-îgR9-øÑ÷ugP¥Õµ°lñ8ÚžÍá4¡@~©¿žføÛ/ÃöU5×µä»j®àÇ~8Ts©êž³×ÕÿšY0Ãâ>T'ëÖ:³Dmüp¦À㸪ÿËÌQ®õ©=Î ø ªÔBâšñjþóòpölµÛÕÜÔ–3°BôàÝUs¥„h˜³æ§ÅL²5›Y[!ád Þ°¶ikkœÞZ¶f÷¡,.!”E©™ÂÑ…üéé©ÞATV ‡ó}%ÁœáPïöÕÜÂ>GCܱ’5xÉzá˜cL¦÷K àÄ€1/ÂåE×]rV°wÃ7Viøµõ®Ë¨ ìàkq=sIm2ëÙWºnøPHåfý¸Þ.Ý'˜ÞÖÿ£‚Ì6ÜŸ—lº¶ÚèÍiC~Üæ•íî™Ô Ó ~‡ØërèœÊ“þˆ·À¶·> h!?¥N<\Ô@x–ÿ†6µ²éJ`bë¯uÓÙÿ™’Q¹RÈOr>I5u§ˆ£Á›Æ8aøÑôÒó×(Y7žþøG yüw^¿e_vûãÁyE–j ¤ ¨qŒ¨b¨D,Aÿuµ•øk4B&#ÚPVPÏìVT((ÃYî—TÚ!•Óï3«Áuȧµ†Ô ÜÛÔ.›"Ž˜Æû"öþol 7÷ „¼WÊT<«sÇ@¦!Jó¨q­ë\!QP0'ÒdkÈ”"Ѝéò:¨:`ý²šCVù~Jüϱ«À´šÑi Âí$t°õóµm-Ÿ‰€4Ƶþ  ¶ÙA?t\7pQøÀ|Á´kžù©´![ðS÷ªð3æ­Ö–ÏE?´ÓŒm‡Ä/ùé…/¥Ûûy=ÜcJ]ªùWÿtlðASü˜»n°çÐîi…%HóŸv=æQ˜ñöß!mÒŒ*Za»,:ï¤/$Ù竟&ÈsË+÷cïþ_WÐŽù—#<†¯wÛ ÛÀ[…fàk¥5]wt6  36‚¡®GôB€FĶ}'ž à®Ûfðø2œ°IN8ŽãaÊb‰Ák#Ú*§\6ywwùñ²œð—lVBÃøV´y„)›•°Zˆúçî‚Í£¸»+Èg—eL½h³\”mN0i3ô¯Œ7PEíE›“¸»+ÈFieˆHE²Òhbk“îÀr;ëÁ9­g­+Ï gÁ"àÑ0òîÒè_·Ö¢B•›4Š5þe{ñîfñɽb SÁ@ ù¯8—JøM ×ðççæ—Ð :¾>âï-Ì‘òÏ[ߪëqpíÄv¾ ®ö»íîëù-%† B ½t3|6n3ÈÞ”fß9ƒ«8 Ÿ´ ¦&çÄÃË£ÍNIÄbíûÓ#µ)m8} ƒÙÌÓ”p¯>ÁEhãL—kÆ)Ñy‚…Ǫ#A¯{FjÌŠpÁ¬L›2 š‰ßI|ö¤"¼þT •F/MÚ‚Ô¤p" »¤,| TóèäõÉân>¯èÓ‡§‡ÃÓ‡fÌ6yz‚éÓS‹÷ðäI“FŸáÂé±ø¼y§ŒÑ9I0}ú3ðÉ¢H´ÂFâÄj$Û¸ù¯¤!!:èmX‰T;®D:®D03i.ë ¼\²Ð& çþ¿©¾øôæW÷Ëßå.6kXÞ•šµŒ½Zú»[B…]ѺNëú¬k²Ø\yì´tW·¡(è¶ d¡Ó²ÕrËn˜ÿC±ãŽ ëãn/aèí@iåŽëo{X®zþ€×°\:ý?oåÇŠí¢Î ý¹l³{B)x>Vur÷™­³µŽcDZ³l{XA®OÿÔ¸?¹Ð˜”’&H‰T(öþ5lmšßüó%¼9=[uüß?¹O¶®ZLv×ÊÂSc?.rË•ûm`§‹rŸ·Ë ü 6Üèœ8Ýp[ãŠ;`ß½á¶Ê¢(´¼gFÿ°ày¨_QÞzRŒe7Ùx$4ôlÁݹ'ÛÂÀ?—?"l¾ìI-]3¦ü’pÖåwûœóN|ÏR ŽZ›4žYj0á·+âÞ/;ï×w¸Ï»s/{“göl¥…Lý—ñ°Ús›‰µNHEHî…}ÖIR+º5®® ßP¥þòŒj‹«mÏOVZéFʽ¸ÒR„/¬´á0ï¾äís+mx:¢ 2ûÂJë¤K)þ÷Ù¶ã¬=YhÏг¡  ¾ŸÝhÑ[ñÒÙ4šˆ4Z-Ýkä&Cm„i‹¥†7Â&øù•6ÊûÛ&+mNø‹Vƒ¶ë’Õ.XÝ£Öh¤æE«£|µ—ϧؑ«—¬ÆaÆ–­N0mµ‚{ûŒ<—mNÒþ.e.¯´¾à³7ÜùR›Q îó!6Ë!çÁ"àd}÷3K-ŒdÐßÇ¥Öe@Æ¿ð5{ºý´Úüöi T½üu{¦áÛ/_q}UV🗇#Ž= ”øj³[ý6é¾×–Ѐƺ=ÛA[¾ìM!kˆ 4¡îèÉŠ™`wöV¹ÙÓ 4áN}ŠÇ|Ò¶%”¶-Á´m=ì˜ãóû îKîÃvŽ'2‘¶(iÛ“¶a¥©Ñ6Üo:E 8ý©@âr0‘NÀ@;2Ýœ0v,Cä…ÂóØPøh}?9/6¶C÷ÂÚ#šTUûê J¨ï,;0+ZÊ«‹åÕ¨¸€`ªsk B¸¤¸ýÄ- nIù;[â¢a߀eûÈ?à4Þðóšlú>xàüÌK¡XoÝYE!YÓ½°ˆ…ù3CÐIÅðȹ ýH7‚1”b|gœa ј'ÒÅè½u ,4ê—u-&áÑ,ònš=>^c{ÖØž¡6:üB"-=€?ªÝYúH„zqÀàè£Ýž+)‰E-œ†4 rP¨áÇ _l‹<.QÆ£EÖx¸H—¹SPô —D«'ÏÊ<*¸ÓÀú0¦³ŸøîðĆ~âÖÓøh}?Í'mq|9}îãWhLË»½oLЧ9iLæ¤1½©$Îþ;l0-ªæÀkGØ ØòîÎ1 ÷Tv»>&¼2=p È+yåá"¯<\æUA=ò*\^ä­žx<+óªàú©Ê-ÊÃÅEùéœ[FÜMSªEü´CůÀ¨»exêpB´'ŒÒ'Œº^—ì¸{ZîïìøZÕÀV»}5ïðÓ5§ ‡´‡ò)‡—\8ä¸r8Þ²¨Ëd¹9îw·;¸mÊâø,`ÊYn®^aw9 PUÀ¦au _ÁpmÊsŽG‹<òp‘G.ó¨ y./òˆVO< ž•yTp=F`îŠÈÃÅDãé$0?]=98)¶8¼Ø…âkÇõVV°—¯¿¥|Z_ÕOÝ0+–\Q'%‡³kƒ pXÑ58k”RršNÇ7$ÝTþ6àªã)*¤j»”~·Jb4)%†“Zb8-¦Ät¯&·xRNñéAOγ´ ®ûÀÔÙ&RÕx¸Ü-Ãö÷ÿ .ªŒrTt‰ª]ù¶^óxœ|üýQüA]ŽãÇC¶¡“à­ldzqÈžÛÿ);vpËÐÌ_X~¦_Sý ~n<‚“†þ Ø“)c_+\c µ-4½(fou&îÝL÷ÇÇÌÓ/Ÿ<(wÂa„z 5úÑ7ì±Eï«-—÷¹=·¸ÁB‘o½ŸÊ:Œs“ŒcqØd Ô»L<*îi÷¸z]S#Üx…·’¯ έ_ôeD!Z·îؾºËüŽ.sZÑ]æXËd—nÞ–¢j23ÊÎΈaœ]¾©¤D>è¦ÿüáá#ÙÔHäY=ª¹{îý§±AÀs QÈØwW¯Âø,Üòã4þèvz'^ÆI¼³¥È'²¿‘ï™þŽåx޽>hÜ.s77æ—Áü’Íÿbº,)¥øFD%âµÁÂÖ«¿¸5±™µÚ‰ñÅú‰è×òùï‹a­°ÛÌ©Ÿ1Cô+ld9Rƒñz¢ ãÔGˆ¿ï×'£¸‡×w¹WÃNì;îÚÛàš®ÄÜÈG=!05Ø4—ÀñìÚºU'cß‹›~Dõ`ó[“u4ÂÌâÝ'Ú:ùþ>ÄÉÜy ;ÍYAÖ²U3ò¡ Ýáü†Ø˜²Ý»ÁÓ8Œxi .ÁD«’³€ö™øbôUŽª£ŠÓݼG¾ñDÊOq–Ÿ Õd)/çá/dó†ò€¡s§ØÄh)çNú»õÄ@3: ÕÿöM‚’ endstream endobj 13 0 obj << /Type /Page /Parent 117 0 R /Resources 14 0 R /Contents 15 0 R /Thumb 85 0 R /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] /Rotate 0 >> endobj 14 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /TT2 135 0 R /TT6 53 0 R /TT8 54 0 R >> /XObject << /Im1 56 0 R >> /ExtGState << /GS1 141 0 R >> /ColorSpace << /Cs8 57 0 R >> >> endobj 15 0 obj << /Length 3392 /Filter /FlateDecode >> stream H‰”WmoÜ6þ¾¿‚©«Ô{zÁ!µ{½-Úk)Ðä(ZÙV+KŽ´ŽÛûÉ/¾™á‹´»¤Ó ˆ¥ÕCŸ™yfH>ùî¥d×óæý¦ŠËT2ÿ¶U\嬱HEΊ,+ÅšÛÍ“·’]Ž›ÿl¾Ùmžìv9“lwµ‘ŠfÁ£ªâ"Ç)i‹’ín7‚ éz³kBÁøR)¾=l^óŸîÚá"Úf±äc´Uð˜Ú9ÚJWœ½ˆþ»û~S ²B/ªqZ-çz °)ÐWÑî÷Udqv̇hÀœ ‰oHãbûc=Ú‰5ãÔFÛ<.9¢*/ž$O” #6ßî6’ulS–q.$X–à K“4.KÖÓ’Míæ #´Š‹ eRâ(éÂ#¬ ¯ùÃÃCM?ï¯ÌA-‹Ã öXö»LZ¯´Ç¿vû½â7+/•(Aƒ^/!ÌÙß÷Ò29r”Ã^*@³EYtQ gU$RûxÙa_N !7ó yN ˜ìÕ:ÁªHbåu=SJ‡ÿLé~×­!í‡Êhôg|/J0¼ÌIi ÿ4ú‘çÆ}¨ü’YÊç†ýí"h5üóŸón\À^–#·OEÒTà&áG¥i×®Ž 5u¼À”½«zƒw4z]%%ƒÎ“®Ñ¥íæ :§&Àⱋz Ë<3}„àTÑô0ãe<.f†/«­%ÿe% 8a„(/¨—²p®Y‚œ£0£¼ŒÇÅÌðÕj+©>F¹P&ñ^ÊõS.Òµ.T¦pË{Œ³›€«ÙñZ™B‹Aµ`'×Äù„wÚ…×ÊÊ­Ó+|F/¾Š™_Øù×Oí~F]Þ_C}÷oïêýÛ} ô.ñôW*Á_D2áÃÝý‘ þ²ººgýØüÁúnhY§á“&ÞZx8;ªq€\ÉÚ3‹Ãèr»€š Ö*ü·B<›ªMŸÃ©nžØŸ“ HsÏp—G?-{h-˜—Öž2'èfIîiî9nå ea-‡ùiAy C ‹«Êý(M>àtëSGâ8ÚNÒì*“¼ ˆv´ükûÏ„p+Ä{ËíúaßV55bå¤jUS?ÝtA©¤ðÔh𓊂 $·äȃ£ÂѨ+œâ´24n¥Pœî”6çÉwqõOw»–†ÍAm…Û¸¦Ûĸf;Ë—˜€ï62)laÉh8(™ì¨{á…™wm¿d’ n§N1‰SLr¢˜µQ•_.™v¨ßõí™rà¢(UP9 +GãAåh8¬ÿt§ ‡•˜n•c\ +'à» ô¦°p êÆ:Þ>taå[×/•ah@5 }½lÓG-¶i8Qú6êËúP?¶O'yœ¥A`X…AhXÞÉN„†UáŸlE¡} kÂï³ HÎ-¹©Îœ&Üe¶:ó+€;ê~|!ç_ß/)pÃ:í7J|®y,ºl7J.ßseh4, µ¡á°8üÓ:4–G`ºÕ‡q-,€ïKdÔ#]CÃÁ¶€WÔ=ðš™gm¯8²*Cõ¸ý&wûMnö«ÚoŠü‹%Ó0\Ä9÷î:àp>¯h4, ¤á°€üÓ€4P`ºq-, €ï629~:+qg•ŠËÐ3ê jÐÄtA—˜Òºg­Çâ~ÛÎ^"µhªhö/÷·¸ß8Þd*ÇxÀ)o »|Œ<`®#KXð6¢Ž¬/ÙòçÃâ~ë£þŠ„ûEIíZP-brí~‡W¸ ÉŒí.u±*{Š®|wÓ²8²Ä›Ú¥)34™¦›Ô±i…Râuç9N¶Ae¶3àv†‹h›Åg]´MñX}~ô¯6’q§«h æxÝDÛ¿²û¹YÍæc˜ØaÆDÝë'ÛׯLM83ßWjÙþ2Úæ0à’ZLŸG[|¼‰X=ìáÃÕÚ³ó2šQ -ôÇgW§%zýCTÒBÚ?v5Ng¤©ÕÁü4?É›(\“-t(S=ÌWí4ÇØ[Þ÷lß~èV3êJlðÑ6‡vÏ#;Ü´sË#›;r£â×QK›5R®xNT|f·÷óÝÔ 5ßµÛOu7èõ€=}"Ê»¯B·Õfì{XGSoºßD¸Äˆ J~¸¡ÎoVzײ»{˜°ßÞß!ÝWì¹"ù_Ȭâ¬ýÓ|8´Ó»ÇÔÎÝ D[èOÃaÖ‚%)+Kß$%Bò !u.%ßÒÙ@µy¶ìÝýгâH$‚OhDâx‡–½DÁ$¸Ï$NC©Yèò¹[t0s!$ÆÚ½þby`”êýj^o:3øT¦ •‰ÙWc¾êI“oņ¦6 N’™ºd¦:N}û¡ícv1ä´‡™Í7ã}¿GJ·õx¡~rÞ4ã´ï´SRXÎI~¤¹é!ÐBìú~|è3„”uÕé_÷fúÔ> æû›Œs*”³ŽçÒN¹&iní+ºó¯¨å”ä)Ò@úûÏXÿî9”U„ɣБbz ZXS„³†£Žîí]×ëïÆ´Fkú«§2ýãž~Æ[ýóÐ5ú¥Ç´KzHÒ¿’Žb7Ìkã=”¨d|ŽõI"…ZÅ!WëñztV̲½^¼ÐÃuTlr¤î5NªãèNœèV ^Ï3•z¦wØ1Í&uó’ORQÆ!­ÿ„×÷bùéMüöøýt‘ÆiDÏtzº¼Ô˃b1ßvy“Q«àÁ¼¼5,p¯1,$²ÀßO™»ùœ’p‚ÊO¢Ô$׎Ðj Ô7Žé´É?²ú%‘5Æh5±VI#hõÀåëý/ˆúÈK‘é÷†øï—ï6’}Ï$ûåÕ®#E óùŠ —€Åvwûò!@;Ù 'n¥ ¿Oµ=3¶gØKnO¥é§ËÝå_ÓŽâüg¶fþ4?|1ó÷ÉyL‡Bt¶–çk†„¼B˜;†æ'@xÞ„ü„S*œ#Y…ÞH!CÒI $Q2…,©¦˜2¤Y…ê?®!.9@¸×®·ÝÉuÞî,¥.‡ËÌ}¦€6m=0ŒT2Ý«†âs~…ºÞ(Ä0ŒÕýµ ƒ‚Éî±ðƒMcˆÑÁÔPPH…žNQŠBºßüã«ZãÀ×Ñð:‘ÁËNbûU…DP¶¦JÕ:?†ö“­†¨&qì}Õ‡®5Ú:Ï8aƒãoXÉ8áh»Sdœ0•6ogÍxñØ$-#"îX©†a§`f£ó"¾¥ &‘lè!ÌœÐÑ™r;ïÅÇÝÍ`A³¤ÏP誙$n9©áñ¨3 '7ç '™Á“Ú.  ù 7œÜ †Zœ@‚àZj¾ª| NÖ¯*q \j 8‚p®œûU PMbe`SõÆI=î¥ãä]¦Ïè+&±·3ã—1N¡‚^ç¿¿LÓ»ez³,£vyœð²t|Á˜1ŽgWž!´Eq^®yY0î/†úƒŠ¥,þwqéô5öU7X:éî*ÿýÌ;ƒÏ… êÜ(™Ûl‚O¯)`3ï9PZsø¦IÈ]]•ųFÆvÂú¼ Žg;1Žë͹~}rùÿ7Ë žtm—Ê‹ˆ;&` ŠýýÕ[§ lÛœÀ[¸vú¦Çñ8Š÷F±¥LÌ»³‰Ç(Ï%̨™„ß{Ã"i).*y™Q‚¬B)dTã±>õÌ˘Sln˜ƒ ¤‡wº¼ÿ¸ê‘ÍùKZ¶;¯-;]>¼]=þû(Ëb endstream endobj 16 0 obj << /Type /Page /Parent 117 0 R /Resources 17 0 R /Contents 18 0 R /Thumb 87 0 R /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] /Rotate 0 >> endobj 17 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /F2 55 0 R /TT2 135 0 R /TT4 137 0 R /TT6 53 0 R >> /XObject << /Im1 56 0 R >> /ExtGState << /GS1 141 0 R >> /ColorSpace << /Cs8 57 0 R >> >> endobj 18 0 obj << /Length 4379 /Filter /FlateDecode >> stream H‰¬WÛŽ7}×Wð‘m¬Ú$›}Û·ìØXx‘M¼cà,YÓs‰uK;ùŒÝ/ÞSÅK·F¤œ‹¦[}Xźœ*_þýw‡ÙçY_vV …¿y_öèU©¬jD[Û²7bµ™½|³ÑâÕnö¯Ùß³—‹E#´XÜδa)<ú¾l±u©:±ØÌCû»ÙÚ”Áú62–Þ¾Î>ȇíU1¯K-wÅÜà±Å\›²—âMñïÅ?fÌ`-übZ]ÚŽÍReã¶€NEê¤)¿NÌ1m]Ö§ö°øB"¥ÒôFf\Íÿ¹<‡½XíöC1oÊN X¡úVÉöeõÒ(U ¶æõb¦Åƒ˜u]Ù( ÍÞ[Ù²ë´ÛNì‡Ù-Ehʪ£U>,:†+‚ äׯ_Ë¢²B<4”Ë}¡aÎp(wûbÞáÃ]0„ÕjQµðRô Â1§˜œï¯;€gŒyQœ—ºlÈ%¶B\_DQãƒTeç\×A lñ¶x5ã¤Vëß¬äP4Håúaó°]ò+L·e+/ÙJ:}Ñ]—]í:s¬Ï¿!¯Vìn…®¥~ûØ×ùЃœÆ‘iJF…"soA¢î4ý¤PO¹n8EçIUrzµ + +È(µ’mš7r]h%=Æ"ú<ëj8Œ,6ª¬áxYÁ–ªäêÊ”VE¬&öþ…ØÂš¾B {c\]-«1Êy¸EÃz.àKÇ XCÁœ$«·FŠLª«MË÷‡%w/#7pšêÕÛȉÛ5¨›´oºG Ú?áwTæüÓêo8®-œPc¨ -ç¹[œvkG~wsƒ†}ÅóLÒÙÔnà „ºè^TæÓ„îe/»gT‡¢ÂÓäÝs‹3îQb{òñƒ|ÿpsD[ëåý$çOŸÉ£é©ŠÿD£²èhß|ÃQ´"¥¦ŽrÛÈ8Ê‹/PØU¶ünµ:If¥T–µ1Sì¤~“>FeÎbcz\t²R¨‡nÑͳ¸œxéV_*ÔÎåóÕpXí0uÈG:ë[ô+…Šå/<…trKÀ¤n» g,B§¬!âι«³IPûF[¾3è…F†ºôËW¼|ZïÀù”˜À㉊™ ”ås왚§,ÖUïÎWFM£Ó“Çå¼—_?n6-âK6âG—µy„S6m]ôȽK&«y+·|²Õ¤/ZŒu&åNZ\û3.X\_$Ƹ<˜\Ÿl6­®‹6cFïMÞæ§l®75æÀ¸Y%oô¸ž7  ³jÓø§ ,Æ å皣c‹˜–`õl4˜².ORœ‚'ÑLÀ£ÝIÓr·¨0oX*öñÖòl*ư}ýúz½ÃˆÕõÓ£ Ki¥Røb+Ü\0·ÏMW)yý>´³¹¶é¯Ö»Õ'ñ'÷j¹†sÄHòŧÆõõLÍý]ò¥hÍ#MC½‘6˜ô;aš§¥G·t8k–îdð^Óå¤!ú3%´¸0½¸îIâ ŽéŽ>“ílN{(ƒ”4´ŸÃÝôÜF+ë’°“~G*¥M‹pÚ´©tÂ4jYz2.w¤7…;ñs<9c\€3ÆM¤SÆ!M×°¹IãѸgx(£ŒqÎ7‘NW)º*t4˜’¸?ÃcgèìÉ^óÌK¼9cã±C4giÏà1ò<:ŸÆ£õûÒ7 —Qî<®ÉÜ?œ5ýÿn2÷^³ÿö‡› î8&œ_ìýIqhì"íó6ápuû1ËÁþZ5â1iiñ8ñ8Ø_[&xÈiF<ŒQ¼?ñ-¦<-'?g "%2¡ µ\¹ãÔÁÙã4GÏÓpô, †'MKSì1” º ÄS£…APù½Z\ â5±Lb³¶ŽÖr¬®q!E ²_í¶Çýn- cÀøýpWÎâ,p<~ÎÏJQ)åøéÐ:eGõ‰Ø$ñ‰óI|â] ŸZŸ²/ÍReË&Pß™¢ºÅ°Ì]üä(ŠDIU1E{GѾSò½(*<ûÂâ»,jÜ^5Þ›‡#˜ª9h  .(«ÝeWa±ÚgÄÕ À9â:4O\‡g‰ëàˆw4–4òŠN|ø¾è¥XñÊÝê“àÞbëhëÒ+õ4œîvªÚ»Zñói?ˆþ¼u¶U&ëñTò ° ©äj«˜û)vý9¿ Ñ`Œ³m›}ghŠnEòŠ9ƒé­D´cEp"TL„ò‰xØât¼]®p̀ߕü‹8ÞbENÐ…þ ÞgöÒ=ê﮾/p »Ÿ«5‘õl½Ôr˜êJþ^è1(ÝÂ?2á°×{n{ºÞpĉvwEïHP¹C{óäŽâãàh·x«÷»»ýr³!&ì`ñÃAUÒwt~‚aØZ·Á,ñ³ÜSŸÛ1hË×}½ø–éöŠ'0ú³áßõ²Åïûëû»üN&C|šƒ¬ÚPÅ)¥µ9=É”À¶£[묖' äÙ\œ®ilǯ2WÅsk#ó"ó=G§nî´™ÏÑýÙAY¸Úüièëö&qÁÞ@‡ª{;n{‡ N»ÅÁúAÁ¤Îêêy°K²í˜œ¬"ÍÒ; q¾i.Ï,UOWZ9mHÉ^1>^’ª^g"®ÖYY<]T^¬³‘qF3ZZ&OTª³;k¹Ì7L%DãéæïÕMd÷ñÖ­¥`Õ*Òz@E^ ¨ˆë­|ª§×Z1~ºšõK‹ºÎÖ\E(^áŒÎçN±~boãžÓʺ#›éŒ|ç.+*WyE¹2_µ|Æ”s‡–\åe퇥ORÄÉÉà»(owͯoo?¬Îšö#1`XÛ&dúo4PåK endstream endobj 19 0 obj << /Type /Page /Parent 117 0 R /Resources 20 0 R /Contents 21 0 R /Thumb 89 0 R /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] /Rotate 0 >> endobj 20 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /TT2 135 0 R /TT4 137 0 R /TT6 53 0 R >> /XObject << /Im1 56 0 R >> /ExtGState << /GS1 141 0 R >> /ColorSpace << /Cs8 57 0 R >> >> endobj 21 0 obj << /Length 3837 /Filter /FlateDecode >> stream H‰¤WÍŽÛ8¾û)Ì…ÄŠHýQæt‹,vf²‰2{Plu·i»c9Ý“ÇHžx«ŠEJ¶H»±ƒÜ‹,Ö}õü_Mj %2ø[6iS‰&K³"«D]i£Åúnñüͯw‹/^­ÏW«J(±º^(M·à_Ó¤u…WŠ2ÍŒXÝ-2"íoKà–i8¿†‡t«ÇÅGùÇ}·½J–eªä.Yjø·ï†d©tÚHñ&ùÏêŸ bZèZ¥…!±²´²OÏ ÙI¬þ;G×eZËCbÀ^I3…+ãjù[;º½Xïö]²¬R#H‘5u&ëçùse¹ i~]-”èŘ´ÊpV (ò"5F÷ˆ}·¸F MìÂ¦Ì žb³(o8áTø(ÓXe öPÀ\îâtCºÛ'K7Nb«D^ƒ–¢©ÀK´Éü}e€8`ôKF~)Ó U")Ä»îA$%lÈ,5Vuåî€kX­^/È©ùDú·û¤LsÙ%¸òs×o[Z‚èEZËo x6—–Ÿ—A•©)-C+NÁþ¡øµ»k¡Jî½ÙöeÜôœzœ.ž3ƒá}9Äz iÈ•ª<*ÑG¹ºí0X’e n¿ðúp¿Ûnq؉-…Q%áÔÝ]‹»»ígŠì ÍÐÀ? 1ùxÛmíê<¿ÿúûñ©?ˆ~CwHÅÛn»é·7 ]ð¼Ø€(e9JÙx)+e»ïÄu¿í‡Ûn“Š«ÏÊ«d›`~í…}߆M~×J™ÃI©¤x¼¥9·;qØ·[Þ®!e@Ð~+î÷;ÞDQ)‡g¢O»ÔêÖ^˜mÇ·âýê·V“ÕÏ'™™¹ÌdŸ‰Ý^¥Pf⸶y ÏBÐK:%\ò¢ …ì±¢I‰}ÛãUx˜t%°Wn-xá¶ý|è6bóuoížmÅÔNJm…<`tS¦Êv‹Fy&x M§%‡ XrY¬[x…(-mli}“i¼‡×HÚ`,¸ Ve“–úB,¸VeA'SÎø%¯àÊ•øôuH) ¨úVclÒDOÓ¤ÆC–¤ '¥]¹œ« 2 ÿ¶.ýã»9O“¬¯ÓbDKÈ<0f––hÏ»D•¼Î¥­›>A‡ I †×pÜëJâ—…)ÓºKÙØêæ kžRiP<\xZ‰:Ú‡ŸÅ„kr?ZÛê̼ªŒŽæ5 ߸†>xz+²»€Õxr>Øʦ8*Èä’|ôNn ôª?€… tþ4ÑUé*-²°Bªj¦†¸¬¬cÆÂ&Í/h«r‰ºÐœLT_{8 °U³ƒìåz ÅÃ{ÐÚxaš”âÌ„ÝÖ’™9™Kàæ¼š¢nEŽý6ª'Ž8V“šåkð¥¡.YÈaMÿöôÛ'(òþ]´’ýnëmðQ”¡F(íM„©Š±€c¢rä3QGø8tmOãèèÕ)yìêt0þ\LÙ8rPf¥k£L.*rS\èñ<½Æç'ÏMü~VêpJ—Ú“ÃR×øîhê«ôY±ýkl¾¬Ô†ÍŒ€Ù‡€  aKxê*¬ß¤ô„<±I€<>d›\ý«=& W¾ú…Â>ØèL~€…6M&ïþB@Œ]`‰ÀC|²Ÿß(59îZÔBG“öTB[ÚØ&xh¸ƒÆòÐÛ­àÀ‘gŒKS¤ÅùF›+´ÍL)Ò :¬ƒ¯Ö\²Ø\XR¦ÉÊTŸ}Üzr†®Ÿ‘'Kã\4瘹K‚ÙeË|Nì8i­5Ø%L§ës:‡QD6GÈæÉaÙ ôØ ±¬ë0ÝÚí”îb8ævH^™1«€Õ+3&HÐÀTÈö÷;Ñn6{ÖÃÀsÉLÖÐ üíέå [õ+VŸ”·ª;^d5ž›2èÄ;4!±HÓ±dßÕñ‹Ø³—Ú »`ËŽ†‰-Ï^´^Ýݱ?Èhþ‡Î?)Ñß©®fTQX˜ú TTø÷ˆÃU)máí8P)<…åxølËîÝÃ2­å)Þ)ëŠÓ’æ¨ÖpRŸV¸zìÝõ pA£Û Ñ¥h袠ø"Æ‘ê“7$ªÓ¢Äªc©e‰ úˆ¬HHÏŽQÙ –:u£!èi«ÒäiOswpŠÉ3ø5š+ÂÞÑ#ìö8ég8i4jØržæ®§Yí‹)\åL†ø;ÈT@ íç¯Ý ‘ýEØBÉ,ScDÔèóh‹y2*K5–%K‚ŠÊîœE•c[sPȧYÎ2ä©N1}jYˆwݺë!3÷ "núR¨„úÞ€=›ÒH™LŒ5EQÌÆ%¥a\-<íòÀèx•'Ù<7H‘žãx.:Ey“õlˆ  WýÁ–Ÿ&ºº|)¤ªfjˆËÊzfVx®gÇFxGu rtj¤Ã…­šÕ\/×kh@K~ñÅ)¤I©!¾LØÝa-3–™‹ÝY5iÞ¯XµâzÒéˆc5©ùQ¾N°çu X\kú·§ßžÂùþq^É~·=íE•…f£0õ¤2uVHÏD½š4 uÒd˜Ÿ3¹þò¹RÈìÊ3“gåy½|Þ¾Æç§à{ôûY©¹¬Ç¤väˆÔ\õ©gUŽ|Í‚¹‚‰€ù¤ÓrŸ°SWaÝvèýÜGÈþé0sÈè•íúuÁŒ ?Ó¾/i[ùêóU£3ù¹ª !CmÜ „â@K{ä·Ú¡‘‡Îß}·FtV@¦áAè&ñз8&à€©e\£²²7P*’ªNmŸë’¦ÎæÐ ƒÕ‘ÔÊð‚¼råËÞÖ§ÙÔuÔ¬f³®'ç4Ò’½Û 7=µŽ›žœÇMu]aºžN×çt3aÙ<5,›'‡eãQ×™ítÔéÖn§t°§8—é£Qõ¤Ôc¢y¡²?-5ŠhùåY:r˜¹¯€–´1îŽáî Ëų³yr˜ýr9©Uü­­%‚ÖSd `÷âÆm^kÄIœüÚã¶Â#ÚGL„µ@k)® Ïk¹ƒhîú|¿À³”ívÚÞIúà³ýÞæeNmŽñNu„o™è€RuàæU¡3¸Õ%„ën<áæ0Õ˜¿qƒJ9ût=;«Àˆrã*;˜ët~Ìkýd ÔÆ!Ý çÏB]'÷uÏèÊX×Ýy"Ö »øo£ÝÜ«¢h÷„zRd™úT´‹ 7gÐ.Ó/¢]>kÆ™]ífò“Ñ.¿E»¥æ¢“Ú“ÃRsOp¦~2ÚuƾŒv#!Ÿtabߊ*sê ¢ûNX™SµÃôñõ0ÿ ˆ7/²t¼ØlÛÂ^ħu–Éɲ†žŸ¦ÉäûdYBu\%p¯–/Ÿ‰›Ä@Ûèì$[ènÊíÛC‚Õü-þ„Œ[Òéûn¤mþLì®`·Ú=/Äz·ÝôvÍ[üHS[’"à–©1pkÑYÛbŒ€ù£ùd™ÇÀ­eö®”ư­½…¶1Ñ<9,š'Ecèꌃ¶lµ²yÄùëŒWÛnÓ@ý•}´Q°lÇ×JƒaúýÔì £f_<ì÷…BÏSÅÃÞ±Çj ­{„»}Ü[\p_£C?{èK G}à÷5¼sûçO¨£‹f|Ö–î¬-ù¬a2Ô‡îp¯/Tú…¢OS–rн\Vbõ=SD‰sóBºØ77Z½ç¬¼Ñj1y…¶jÍ7íÝ´ EÀ:.¡_¨î¸ããç:ƒ‘}4½›¿ìá5ðj,TwÖl¶=à°îÐç¨tØ©îž NðŒÝâs ’¿mG¦ð“ÑÏ8k z¢`5½q-„e³Gˆ˜5ÖÎâ´‹n«Üîgf÷©ézõ‹3‰¦Lr>õ>“ü`¥‹Ä{ endstream endobj 22 0 obj << /Type /Page /Parent 117 0 R /Resources 23 0 R /Contents 24 0 R /Thumb 91 0 R /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] /Rotate 0 >> endobj 23 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /F2 55 0 R /TT2 135 0 R /TT4 137 0 R /TT6 53 0 R /TT8 54 0 R /TT10 59 0 R >> /XObject << /Im1 56 0 R >> /ExtGState << /GS1 141 0 R >> /ColorSpace << /Cs8 57 0 R >> >> endobj 24 0 obj << /Length 2795 /Filter /FlateDecode >> stream H‰´WMsܸ­\çW *pKC øåªd{ò&Y;ÖTrpå@Ïp¤IF32Iyvó/vñ¾n$¥!¤²å²†äú Ý×—¾Vâ¦[|]Tqi”HðoYÅU.ª$NL’‹"3q¥ÅúnqùþN‰·ÇÅ߯W‹ËÕ*J¬¶ ¥y~ª*.rÚb²8)Åên‘0ÔÞ,––h¬_C‘6ôtZ|–î›Ã›h™ÅJ£¥ÆOÛtÑR鸒â}ô¯Õ‹f°~Ð…ŠMÉf%qnU@fB⤎Vÿž˜£‹,ÎÛÃfà m‰EOdÆ›åßê®oZ±>¶M´ÌãR X‘TE"‹ËôR'I*ØšïW %vbQ–qž(HVðF˜ÔÄe) Ý”¢m[ŠÐ$..”iI«\XÔ¬ð.|–§Ó)>"*kÄCA¸l#sš.>¶Ñ²Ä‡o‹U"-२r„cI19ׯJ€gŒç’ð¹dqN.±âSóMD>È$.­ëÊïÁxZ½]ð¡¦ë?¶Q§²‰rå~w·;ÔüÓM\ÈŸ#œl*­¼Á•ÅefZsŒ;~¹æâ¸*t¼ðÛÅ> ‡É©]rŸ>öiÈꤠW ùPFV)ìIG,u©460ắ£Bö‘ÆÛC'p,6<¥¤½²ÃyÅ™ìz*Ùð‚BióuQfqÄÏË¥&LœÂÆ4f«•†03`Ùæ±~'°²JþhmÇÉ*…}"åŠ]ú[”èÓ .YüJ”ÉúÙtÍ«¡ÄÜIq¶¦C¬è‘bõz×#X8×?N¼U:M2ï’Ê«i(^v× sæ›2N_ðW¥h‡Q9eÐc»xÖeëh>6™«õºé:Ÿ‹ð]Æ”ó¾dIWÎù¼ŸN˜·:ÓÔ{Ÿw´Lâl’ &¥vô”WW³£Ÿå[N~*c#»5ÿ´üw¡Ðä}2Ïåîx¼$µdEJ£(`ƒ¦˜³ ó¨rÍjHfF]2ð3¹_ä~yÃ;^>Íàt²Sxl;>”Ã:«~,ÆÃ³6+]ð…é`“óA…׳6·~¢nròÏZ] ‘æa«xÞê‚ôŽ¡Îè6}Öìaƒ ¶Û0cX¦KöÙ ÀC øá$¶è˜ÂÓ£lžÀ“˜ÌÀ£êYá!2ã» Ì@Tá/'z¢îW€*è"Iä'{Éá5UÅðúßã…¼zcßÿr!Ò¬\‡üÖlD½þÏáèÖžöö{³¹iĶ=ÞÙWѹïõ7·°‰m‚ ]TŒK·èg¹º…d”.qª\ŠížÞꛈø3ð¬{æD-šC?]M–°ü’HýœxÿÄ#…à=·vAc…Ö›ço¹ìàTgóv®¾sQ¬†(V6Š¿¨_ÅŸÄG'ˆ‚qÚ7¶£Â»¤ŸF°Íx %@ Ý#ÑZ{ÑôÄ¢}Å‚×`S¹…k&TÅèBË¢ä³g0rÐ0v9×Ï]&Q¿ö1‡É“Ή±œÁ>É 7Ávä„ûþ0·ÂÏá’Æ‹¨ B˜Åyû9î*,`Û€ÎÛ6Ù! šÈ먔‘¢ÚÄž Z+y!"û[ÎHÈÙŠ†žŽé$ˆœµ‡†%ÇñLJ߈/`½ø&‘ IdZRgè>¡*D×[j¨)Wd­¸Æ´%WTÝF^}¢IPË•èvv™­Ìƒ«Ózo¿ŠMãŬýÃÓ&êÓ± 8õ™UŸ9õè#+ËÝ?|´¯NÆú ÒOS‹UŸA=ÛCSmò"×þá¼[€]úóçQ7`phÅÓrgØ\ñ„âXÔ±á ìsv~³'¬V³£˜#>dô¼ÙÞ'.@‹ÄáÌnÆ­î)>˜6ÊçåÏ–SVÔS|òš¡šr{öÙPN¸°TþU„„òutÕ~ÙõmÝ3Ÿå«|ìú¹›Õ–„æSeàºEmìzŸ®éÅé¶9ˆþ¶ëcÛV:bÁ ]µ˜ q£³rlçÅ´ÿ•ÕùÎO²qFvP>¿Öô¨¦A`J» a+¤5R8ÄSÛ'/²Á‹ÌzQ‹ëÕ‡Hþ›¨B"#í1+ íÉ,”g8L.¨|rül.Ðzq€ámóõ¡ézŸûƒÑKoµþYm«}#îjènŦÝ1¢ ¥éÄõÛ+që^w–Úc¹¼µvÎ?žñA›AYZ–×”:¹lçâje¼…ye-d³*;A¡S.#æj˜˜*9ž¾ßíüËcÎçÁ¿|ðÏ%/jÍɱ=¶âŽòiwØÙ¯\¶w.£ž´œ¬,©¡zŽCƒMÇá¡®ãà`Û mw}Çk6žñ£kÚ_ó‚Pž¯=G™âëæð©ö9ùó'É)?ý5ÎÉ ¢ªJ>Ò)~>^ˆUKµè¶åmDjWÜ·GZOC j˜^Ûp·èºÙ‰nš*îÉs*{×Иåæ9§´”mËC ŸåÜô·©©c(‹´HÓÈ™–HS”á†J"º§~ågR‘?þ(ÐÔ&¯Ý–5­]»fèÈÐÝýW8kVIÊÌ5ß ç·Åƒùmáp~¶ûüvÚÃù0Þ»ßu˜&9XINF”Hxºµr@­Ò1‚¥üD.´ß†¸`]!ûøQmªÑG_ûà=¨²‰DãUzo‘¶Œ3óÆÈ=ñ9Ô=¢ªØ5VF ]ÜON¢ò»óÏb`:…õèxhÄ&6LŒ¤©´ŒÓ6GÅÝ͈Hh+nënØ`W4¶—2u-Ð€Ž¶íüž´”ÏDÇãÆÝ:Â|‰øk:Xû@ŸÑü'}ÐäHÒP´`° Z8Ô-ìÍ®:ÍÁ0{ô))G6U>BÓ’;’Eùïÿ‚Ú€8ÔEd„§IÊ‘ç=¡áJà lrvz‚OB6'ÝÁ!éÉmÏ ¹“Ә΄ÍÃñ/À³—B “R¦;¶*Ó¡* RÚ‹Ôû‡æ•H~âr'Hlö&“^<– Z—|Â}yuÊE'?k0=ö ºcÝ‹=Û-W‰]_>3¯ÊÖ³eX÷XO«t2’ãáZ¨[ê³™î·Þ4“ÿÚKÐ@gpe…ýF·]!»¿ÓØ©n7|Ëd¸C½»Ç4öe·ßõ?ó× ×ö3iß§Ï9h(•‘D¶¦«1ýŸCq˜5F#9&p†6&¸ûxPMiìPºXʧ»çñù S<ÎyÚ1¶Ê„[¥ìn{œb#Ní®ï‰ÐI´G¢Âà Äf)lØèêâeÑp¼~vݤaVY‚ÂæèºqÈû.«F endstream endobj 25 0 obj << /Type /Page /Parent 117 0 R /Resources 26 0 R /Contents 27 0 R /Thumb 93 0 R /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] /Rotate 0 >> endobj 26 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /TT2 135 0 R /TT6 53 0 R /TT8 54 0 R >> /XObject << /Im1 56 0 R >> /ExtGState << /GS1 141 0 R >> /ColorSpace << /Cs8 57 0 R >> >> endobj 27 0 obj << /Length 5640 /Filter /FlateDecode >> stream H‰œ—K“Û¸Çïú8’®M€à+9=[[»•}Ä£›½ŽD¸¦Ä IYÉ·Ï¿ PãŒã²kH@èú…FóíOR< «­Ê¨ÐRÄø·.£2eÅ:ÎDžê¨Tb{\½ýù(Å}·úçêÝfõv³É„›ýJ*–£,£<#Fq!6ÇUÌ?õO«5h±Âú-6RšÞ.«ÁïÏõé}¸N#táZáÑ×C¸–**ñsøçæ—U5˜Â/*—‘.X­8ÊÌ`Æ„ T¸ùËQGåi”úú°˜!‘(–ôFj¼_ÿZ cÝ‹m××á:‹Š@@‹¸Ìã ›¼UqœÖæÇÍJŠF¬Š"Êb ²„5B':* º.D_¯öä!Ç/Ö•IA«¬[ä쬘Lø\.—¨ƒW¶ð‡<èC uê!êúp]`âiR„±R$9¬ew¬É'·ûË?Þ(pKÌqI£ŒLb-ćú‹SLqTÓå$ƒæxÛܯ8¨‰£ý}˜FIP‡BÙ6ÇæTñ+T×Qü'Dd“Àðfd©u´¿!®¹èöB¦‚ »­ïÓ¯»É©Lrb’vÁC—…‰B†´ —{©£'x!á…ûÚ³4‹T1o‰LÔfË8JrXàüu„2å ÙøÌÆÏ«’(W/ aM’ñb<’L›üÍ”Œ“þsüè0õÕØt'¶åÅj1‹bvA0 X§©x:sæmK IÃi×|Sa¢¯#D_R<„b½¦XˆŒHf<ê£À/ï»Ó¾y:÷aéÀ*L ñ¿4N3$É"f¬uLÎBnLÉcj nSc‚Í¡F%ÁJ¿Hd’4ÅùY¦Ã¢’HYšJ’š•f'5ÙOo\F¨’©@ ‚©„’=ÇÉFÊ} ÛÍSœ‡z-’tRp¦uÐ7æÇªµ‹v•«Brœ°óvÙ‰|«‚Z| P®‚û»O!¬ :íì‹êêÖ¾t\bU°eøçWè0K’]ÿ‘«Á´Ó¾ëo´ä0BXg‹¨8¹’_}uöu?Dw×¶bWi¶pζ;Ñ žô¨·c½c'ÆC=Ôb¼tbhì5ñ–H3»°¢â]-YPƒ8ž‡Qª/µ š*v}ÕœÌ~О§XåÍ«f:«™5·]ÛbwZ}ŸÏ#Ô¥„j;V0åÝSrœÂî[qGáL‚ßîÅþ|²K¶a‚)Nófõ¿ítÝo›Vaú±¢mN0ýÒàu^ƒ+éTµâùܶëóóB×kÝ¥K³ $9‰‹%ιžnbp_édb®srußÛ¨-ƒx¬ÇKmÜj¦NH^{]Î)W‰‡–¼<ð¥•RîÛ¨p·,x°£>¤ÂкóÐÚ ÚõâJ7C¤VË€Äû öâáþŽõZØ:RòÑz‘á)× e K‚5~Uίk(•‹É±ž!KÁÍ‘ø±Ú(õyõÕȳ…xlÆér2‰ÂÙCÎ4^@ЪY³ScvbÎ*ÓºígÊä=9ßðÅMù1¨Y7ÖY³Î: =›Ñdùðׇw\“ÙædW’v˜áD86#¶}Ó¶#q‡n?ŸºK[ïfºtaÑ÷8'ÝéMûû:Ëkb:ú”grwgýX?b¿N6¹ð\*ÉSCu|†bwîv)ª-Ùthx‰™9bèàžáiø¹évÔ?Xp°Šƒ¿‡ë„E­õÞ<Ñÿý ¦L{ÅלˆG.9™Qœj½S³ïÅöPÍ>æÃn¢z]Ïf²9‹Pp•¹ˆggŒ±Sû@“aš £=é@rá{„cêv'æ8R™Ê‚ê±­¯œÊ6ȶkûÆÑBÂjrç¡y %bI®íC¾/ËþÅÐhB÷„¢–5¢…¦¶#±BJGâœ0=4\ñ¦O'ÛŒ.‡¦~ð ”®"òÍi4ëi£çPòÓÌØ¦{‘CSê˜Á‹uÕ¾™;àx$Ÿ~ †‰±¹û°õ4ÀìÃæ÷?p‘+í}•àÂ>…‘¸:vÑ´`ê[{®$•SÕ\C“Î š—@ÙO%*¥™íYèMª‚dñK ÎrO‰î3Qþ¦êºët~ß ´ùeÐèåº-½µ!u÷¯wqI’Î 7ñ¿ÍâéÛì·®?V­96¶Bèà‡¹É™ª·ÁÝš£‘ÇãùÔlMo‰n‚nÇŠÀ¾;÷â¹êÇáo/G~ mT cêHb¾L‚ES]òë7ËÜtl©Ù„k*Hw¦¶|àeçøPR™jl/öt²ù‰ÄRAkg]Oµ™5K0®óiýh×O´Ž*ª]oÛ2ÜË×®ÌM…ï5:–s°d6޶š´'ó©#¨v;t'è1ÌâÑ`ë?ZGýšŽÉ÷èÈŠéë¡ÑS×Ã_)£ypiâ»2e“2¤[ÊÖ¯«¦¿G5xj*’„¸·â©>Ù8÷ÎW‘¿q0§òÙúð^~ÁË_øîÄA»‹_ÅÇ?c±[I‰O‹B ¥2|;%¸ ³ –ïÞ¬¤.P¦Ÿ+™¢I£1ÄðqØò„ŽÍNmëI” o–RÀd>M]Œ3a0K.a|)`rø1ž´kyœº{ß`‰â R ‘ÌÆEáB–T‚xBÁcá„ åùe‰eŠ'uD±Å]ébhBz~YrYH&2Ç/4ÖîÞ7X¦¸B€à·Ôñ ¯=È‚JO•p—p5È™(^ÄÅ—&Éf« —DépÃ%Œ/ŒŽMRM&9ccÒKOdfâúã̃,©ñ„’«gƒ0Q*× %–)ž0¹\¸—’»ð0 .a|)¤¸Ó“0VžIK,S\!@(3 ‚±ïÜ%• ž ¥2VÏa¢Ð®AK,Q|©ã*Ajzîu' fÉf!%óO¤´­… RÌK§­S¦¯ÓØSÍ•˜7ñ„A¶¸g•ƹò ùÁ¾Aôec¯NÑM9;ß`™âI“(ý.Þ©ºáÆ—&S‘vý‚qâ™´ÄÅÙâžU§dI%ˆ'Dr޲1È™(^Ä2Å“¦Lf« †²ÇóË’K_Š09²É1É“–X¦¸BÇ•FC¨¿ÐXû_ˆ Ú$ádMäná»Á2Å“©é¹—&råa\ÂøRÀ$ÊÜF“IÇîÞ7X¢xB€ 3¥SÃhì¹á†JOˆ ¥±z6™[øn°Lñ¤€AjúîÅDêùeÉ%Œ/E˜Ü´“Ièf Ϥ%–)® ÈÌÒõK/œ»¤Ä¤ÐÆêÙ LhÏ/K,Q|)`š©ÛöÑ„ÖfÁ%Œ/u\¥è^ Ç/4ÎÝí Š/ˆÊ=¿¸c†ÜP¹‘-íœBBšFy=µËûÕ»Óâã.IdÂ8•!é&ÎðŪ.Sú¾Å—éÓežÛ\þö–'PÊ…Ñç‹.ùc+¸Ë'p©Mš};¸”¨ªž–w™¥)|5ÆÿMÅ€öiéDS¥½Ã¾™†H¨MO´ÿR^6ÍqãF¾ëWðHnYZAð([¹$N²eMÕ¼9Œ-j5©ùHiFQí¿ÏÛ €Dò†ª­ò ¾Ð ôÌàKÊzšAƒ•Ñt¤YêÈjšEO•ÑT¤¹.´¸«išœŒÖEÚ8†\¾š6RÎ/‹Õ_–/¿°îì;Dw0Úýà~­o?ÑKµ¯ÿÆoTZA›w’Æ‹T¯ ;Þú]¼çºïB_ Æ35;¯»xϵu!¬¦Ù>?¯»xϵ³¡’®¦9•GÍ]¼ç¦Õ![¯¥™¶Í£æ.Þs£ºPÍVÓÐÿø.ÝÅ+o´ ]îj0ž^]žO:Þ~ÓÛPgVƒ{I™wïÚHC}ßÙœ´WþkýÛ†®ù§ùž›±}ï!¹1»Ž-ÛýKLä¨d\Fí¢R‘ŠÑžGÜ!¡)ªªÉÇ~‚+×"9,u éX‚ ®Ž8…Ö½M«ŸWCÏÂ6Å`‚Kõ‚ɸ„‘*Â(TÆÙœ!¼Ìfsr(3 Fÿ€Ñ¿2" ÈÐì±ÙL°ù³!9”REçSó‚q¾bΘœË¡×'öžGJø#‡#‘ÀÆÃc€¾ €œÈ€EBŽ-‚¢Ó äPfÕáJµ½¿tCFø#ç“©3x.›C#›î¾€2c‘Йh0}‘¶ H€Î#õMôé¾ (3„ ¥ƒµƒ .ˆ &ãFªÓ{®7£Vø#‡2c‘ »h0}¯C£»2" ´ |š…?r(3´ |”¥`mÄ`Âä\ÂHa”ïr½9FÉH- ÌX$£Áüýè»ñ ŠØO%ôÚŸþl&¬0$‡CªÞ f‹˜œË¡ƶ>Axs‚E¤Pb$„–Å0’͉ X$p!ÍEC¬ó)x6$‡2C¨€zŸ¤g &”ðGÎ%ŒTfHò)døçPf I>UNÇBßãÚ:ÊØO$°Yà;ëÓËlHe†Í …lÆ`B^³œK©"ŒIó)¿Rsr(3L’OuÛEƒñ3D»QH%Ð2ði¦û. ÌÐ2ðu ÙŒÁ„H}—0REå„7#©”‹„.Ìßþû ŠØO% ëûë%³!9”RE˜PÈÌ S_ÁeŒPfô ›ƒ‘MO¢€2c‘ m4˜¾ÇÈäD$8ø4!zÀÊ '_›PÈfŒ1²œ\ÂHa†¤½¤‘ˆÔÊŒ!i/5²v¿ø£×ÑW0±ŸJÐË|J£ðGeF/ó©¶Ê'éƒ -ü‘s #U„1I{I#©”&i/õÐ%ŠFJø#' ‘ k¤hB äPfd”FS/ò)Mˆö¼à2f”ùT;å¹Þ´øNø#‡#‘À%ŠFVø#'2 }jtô1„GKzºt"‡#QyCÆA¶14!ÊÉ"Il‘*ÂŒ>O{s0’áŸC™±HWýR Lk³|šH%p2ðiBä½Ê 'ßt&}ðîyB˜_p #U„±>Axs0‘Z@™±H@G¿4ü42`‹ØO%èCš‹†`¦o¦Ê ¡F‡B6c0Ñ ä\ÂHaL’Oi$"µ€2Ã$ùÔ £_~_E€)b?•@…4 Á§­ðGe†P&²3†T9c2.c„ ˜¾Kò)D¤Pb$¸$ŸÒH äD¸$Ÿ´ÿ"ðiÂäPbHaB![0V¶ç—1BE˜Ñ'oŽÍ:ŸÊŒE:ú%ŸÒhþȉH$²Àœì (3†,ð](d3"õ\ÂHa¬OÞ—u>”‹€Q'*E@ÙK¥ÚGE=sõ<]}üéªÃ𹣇µ´ÁŽ;nžØóľp´¥TâÂ3aœ[…fJ¸£Š’á[X¦¤"ÜâÚ6} F“z'‚‘Æ„dT~‰9Œói6(¾±fƒrlxˆianC/0TÅ„_r.¿_„*yE“’±7)Ǧ¯ hÝŸÔ/( ­„dTnûSÑayÌ%îMlx€$*j¸ÛÙjë;äV^‚Ë=·P%í0inÔãÚ6íþƒIF þFÆNB2*wީ谴ijA±§Ž+ØÐx·Â Üeá^šèÒtRp¹_í3÷Æ6šÔÙ¤›v½Ñ$ti=JÇ’Q©ØÃWþi€Π'éTuÍÿ¢3y¼ú¸¹B6Ñ®ZüG·¼êZ¼k\k!ªÍá _·f´ÕæûÕ×úþSsmoúúsó¯Í_¯þ²YøJÁÿëø¸ÁÌW( ´°w{;cÑúаŠÉ½%ï©„°-m¹îšÍ¿™8šð†XGän.#Ö*ÀT§B¾ ¦pë­Éa:ÂÔèsèJ˜Bf,`&ÂÌÚãu0Ü;SÀú³Æg±•0K1‡ÙsÏ\+aŽê^"l}Y Cò*À˜îì{@wý0Æ{o.b]< ÔŽr€!×w>âþ~ß\«îf¬?ÆØ˜m_»‚MذXÁtƒ_â3–À…¶Ë–½ãiäÀÞþiøé¾ó%t%©l̉søië|ðf‡˜ÑÞ?Mo9³†·£+`1ü ’§[3È…ª€Åð38wõXGõâGág´óEs%L#°~¦·¡ª¬ƒõæˆágýž0ˆ—òbøÍ7wmphåB¢_~³íkW0}6¼*ü~Þll…Õ¯À$þ7¶!€[J×KtUdõæ§ð”*( {ó_QOuÒºŸð“æ²N»i{ìæ»17 ji­nHuÝU÷›ÛRý…ÿÝ4ΨÎ;ŒÆú÷cƒõvÏÃêÿ€Ìˆ^Ïo€—myñ/ÚÀ¯Ô ¸ú©Áï¶žŽÕåiª¾½œ«Ý¹z|ž¦ŸwûÉó¡:LÛãîø{ƒÆ§®Ž§êÀ®tõÛTõù2=WÓwaöûDéˆ!±½lëY~€/éCùżƒßêoá‡Ó婺ÿô¹A £`6&ëíñÁÛóà7œš}K¾r›s[íwÇ©éësÓy‹?ŸMVO´ÓËvˆ|¸€þý­áß?ð ,Eßè_X8ªï4s¬vÇÝeGòo¼DuñŸð :?NA“ÐsÖ4Š87×#ù¾| ×vÙº¸_6¸á£_öø¦¾©ng/ø6ó›à…@ éœq ûÕËùe»EQ0üÑP:«Ut>¶Æ~Ÿ›k$òzz¨.§j{æc¹¿þ¶»| c}˜áÚúÁoÞôK<ñ¡™úúrºÞŸ^É ÚÏðÔéXç=ûCz}ÚíÁF³Û!7Õ|Î8-¬23oü*ÚÃÛaGÇÓ%Äöä·û-Xã?åÛE¸Â°ö¶úØÐÕ¶:†‰É7ȯÕÃö²…ØûcpÇóM²ûÛêËôŸi{#ü¶°ç­ßjºÍÁoSÓ6_w—§ÓË¥zÜ=Ÿ/•ÿuBüØšG¸eÛË.Îø¯@¾ßüóÊde_gè›jóÙ­(Âþ°åh}9³§°ëÄmñQ?ýo¹¹¥y™É@_« W`1ÔSœ“X–ª_ÔÍž© ʼn¹© Hæ.ƒ&À¼ hIÀMg endstream endobj 28 0 obj << /Type /Page /Parent 119 0 R /Resources 29 0 R /Contents 30 0 R /Thumb 95 0 R /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] /Rotate 0 >> endobj 29 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /TT2 135 0 R /TT6 53 0 R >> /XObject << /Im2 31 0 R >> /ExtGState << /GS1 141 0 R >> /ColorSpace << /Cs9 60 0 R >> >> endobj 30 0 obj << /Length 3270 /Filter /FlateDecode >> stream H‰¬W[sÛº~ׯÀ#رâµon|ÚI§=ImÍä!§4 Yl(Ò%ikú7ú‹»7€”d'íL'ž»‹½~ûáOF=«®Š0ÚÀ¿u©*6á&Þ¤*Kâ°ˆTu\}øtŒÔ]¿úÛê»Õ‡Ý.UFíö+Ñ-ø)Š0KñJœ„›\펫  O«5pÛD@_ (ÆÕiõM~¶ÝÇ`„F÷Á:‚ŸÁŽÁÚDa¡Õ§àï»?¯rPƒ¸Ð"ÊLç¤Ö&LYðÜ ;»,Ô‰²$LÎõ!5`¯„ƒ+Tããú¯å8ÙAUý`ƒuæZ›"ÛèìÃöC´ÙlióËneT£Vy¦œ ¼FÅÛ8ÌsÜã\ vµG -ì"¦ÜæH%f1Þ,@ážðMŸN§°«T`ÌõPÇŽa?ë6žœ"ÄÖ¨m¯TE æX£M®å›¯˜ý²!¿$aŠO"-Ô½}UAzæütãî€3XíîVäÔíBû/C„[mƒ\Ù6Ǧ+i ªÇa¦ÿ€g·šùyLæ 3dubñ­À¯¹ê÷Ê$ Ý ïÛ'ÿ‹é³ hM/Gƒ“€µ[¢âu³â0Öü¿…W åçu7©i(y ‰õ(”L¤êÆQÃCs]åÔôúM/Ø„èÂ\hG¨˜ _í‰ïQ0Ýf35P«©W¬Ŧ®™åkÃÂø ‰Î4á5ñnº3ñoJÿ©„ß~±øpmBðŒwÝÖ»n+ñÜL‡þe×´¶Q³x  V€¶«_F uö ¦»ß-“š¼Ž[è­íì8á¿; ZF«*à*b€û {ô zíVóVGÛ’YŒžxsdBÞS»Ûû¹×G>k •ét@CfŽ'Qà[<ƒ5 yl&ÕtóÁÇþxdF]­îƒÜk%¢f•ˆî«fT#SLÞ4ç%lãJX ,Ñš÷wªÔW.b÷Áz þV È¨ÊÁ·)TwêK-®HÉàÏžeKT|ýõIõ0Xÿq*§—3É jäý— Ú`À´Tµs|þtöF•bÊsÍs¯yΚƒº÷ Q9ÙZ.4â' î*'”†Úêú‡ èK‘ô¥Øu^¹R`©Œ]-ˆæŠ¥Ä!Ex 7R-”°T—¯ôcÕ-ü&º®!È >}m1«vCÙqb{h%¤é›]Òé‘Gaù®9»D>°Õ¾Á$†J4N¼P`Þêh”k´KLi‰ S—n¯ä=¹-âDªA1.äVíš™‚¸ª#1+§%¼N_\W÷_1­Q)»Ü¸È¶Ìg[&om0ß±¬Aö)ŸÁ¯VT °a,•¬ô½Ž"{Ü:ÃÓ ;[¨~íÕt·%ºg£Ô;Å%=A¿£4(iG)-%×–NXâϽÃ>¾ï—Ï]+ÄÙh:°ÉåΛÆÎ$ܺ`éú¨™Á@NñŽšLƒyæÌQöØëâ2+ ê;Y ‚˜ÅÇfšN^úØß=÷æ0ú¢ ¶žš¶…;>÷g4 !6=F´©ž^†Ám–$cõ½ëO­­Éñ1Ä(")-}ãéQN»çŒhaC­àîVµ½PT9ÑnÆ=W>ò¨[*ÜÃGjÀ¦jûê» ¸ó˜ÔI˹ÅØw#Ôê‡õŸ¥$ÞD KùµŸìï1KÜcü&ØK°»Ž/ÏÏý0Iú™ ¾–ó ÄðGg6¦ÄqâEá¹pu_Э·ÃT!=ò“Í!ˆCI”áä‚(~ ?e—åê«2ž€š÷åдÍóøæ dâ p1´™8ƒEüãIÉ–.R"|>÷¤¹)9Ÿ}Tã³­š}#ž)XFµ‡N~„JÕv"4àŽ›vÏᤗΘñ=/#0ýÇ )"Ëvƒ6ž£va4ûOaKæqÒ@y5hÜA衊cAØ…½ ÁhOH80¥†f².G¸Ü=Lø¸¹Zž¹é™ÖŒÜ=Azÿ&`w8AWÚ,:žAÆ —!BnbõÜô6|¤]Á IP<œœ( ¡\38V_ïçžr ªZrÅqZ:ü†–{¾ätù1œM‹ ˆ/Ï)U–Ц…ÿ ÜfàéÔ£ÀlFùæŒ!’·êp6uˆ^ˆø€¬'_hõMLf>±²ós¸M Á£>¾‚©`Ÿ» ìòRqó­À"û—‘}†€N¹á¢ídI9Ðð9llÓê g%¤Æá£µ¾„ÖÒ™gH_õ F ž"’Ch“d…;PYcÁ(ºr=çyè+ `¿w’Öå.ZÐd×=n‚b}± ùû#§Ç$<Ó6ÃWÈìuÇ ‡;'@+YP‹ÀihV)ò›1˜†PýRò¥ê²^a2‡°Ä\^£ÌÁ'xIƒõa!›Ûp¸ ƒvJPVEdËŸiÆßBÚ~öÞ-MÙaîÌÜ•žàÕªÅFŒ§Ÿƒ®ßK,°Ü;ÎÙÍ4’Þ™-MÞâãRÔu–STý ÆIgbŒ*ê£Ñ"¦.GE>?yC”š ?Bß'† s—J›Âç_!îÁYÂPiת§ì(dÓÁ‚œê<îä[ã×PÊmÞv›O‰èÙzªšÇŸŒÇ£o…Ò>F¤t"ŸçÄ®nj¼0+‡ÉªÎž”AMIÐÜ¿Œ¼œˆ¦ŸŠEÀ½®+×§€JÈžcöª‚—õc”S;Üø}yAj‹­lC­:ƒîz^ßjëv¤\rùºQuh®ë…#æS:ý.¥ÓdY!ì®T˜ ®=+‰rJµÕ3ÀoÏ“D–+Ï"΃¬ho~v¥xÈ5‚lÞ—I·ãc]çŽüU‚SsÍ åŽ§õÄ=+J€LBí¨èSˆeS,FúóþT=]Á N„ÖEpä#¸p·n‰ÌÅo„ñKÑQìÜúah½3îz€h4œ52DA.óVÊ´ÕË@·ÿCáÍ"sG@v‹Ao¿®Y>¾=Ë!ìÌôr¢GÄ;æ~9ýs/”@œAïÒñdùŽ›Pºpû êôÈÑc¹^-‘›`NFl5Müö`ÄÆWø•œ£ Ò.0ã s"$Ú£K§Åýkq÷£vYg´fBAýjô̸#½IÇ+áçu=õÕ)•’žð)€1 ÖݱV{Ê×\— @±°ÄP@ÞíjYT|\R#šxÏÑ0*ä›JθH¤º”oH/OöÜó 3åöÈîﰨ›pT¢#ìX÷‘å ‡ôÇPÕWÖóÀí-ôÁ ÷Í<¥½]¨R÷°³W×g+šw­˜9[8|ÓR¥Iø ª•jzÃ¥öªòÎöHôQÊÖIÉ–RŒWæ9@|£N°€íÊÇVˆ‡·€$\/a‰Ó²Hça(ûòìø³@$‰ÿÃzÕì&á{Ÿ‚£&bq‹Çz7©/€€²É‰€>GûÄýægL/=±ü 3 ³ßÏÂg™·Í^U°¿ °V€äÑ£–pó=>E‘’Íwnä˧9Æ9W¨ÌÛ¦ÏlÓ·ÌÙB$7Œ”I†^hýØJ»£Y»÷h÷œÆR5À¶ <}âOGš‹æ¯u(&o:ä¨É.Q(+ ÄÚ®J¯‰H¢ðò~¤ƒd0’)+樗>POu%‚aPHuñ óÎH`VR$d׏ބv>y¼Cpvð”Ra”œ®trèÿÅtF1¸8Mçîa:ÍÄt5ñ"a ßIC½|r 17Œ2[ÆsZ;¹ñÚlF4Þl"_à rôðY 8“âÞ±Jd4Îå*pdz¹¶r‰|ù@á)`×õÐØ|BDìÄN´WÈÃÄÑèa.ÝL“øFžâÕû> stream H‰œÓù[ Qð—,ï¨Î¤HæXºi$\IRJ“½ˆ„[)Ù·DÊVDdI„l![ö}ß÷-[øwœ33÷vuoÍ}¼¿Ü3g>óœ÷|Ϲÿ_­Z»ç<Ú´mç–kBOsç儈>Íœ¯;uöïÒ² èŠíÖ½GÏ@KË.%¡—‡iÁÌɽM„ôABCµaß~ý{X›sÂØ>†³Ñ ˆÁˆ‘C¢¢‡ºr1±,:Œw§H„H4~øˆ‘.Ü(æ¤ÑcØplÑJ–äÄqMÝø$Ê_M˜/[ɉ)ÿºÔ86 `²$‘F9%ÝÑMFõéé3fªÄAΚÝèæÌÕ‘æedÍGâ(³slnÝɹ¼%Ï…REÁ‹t·x‰±..]¶|yå*EquÞ4d>[Ö®ÓœD ÖúZ³´ó(Ú°1mS!lÞ"jRÍ.†’ä­Úgª°­Ôq{ún7$î°”íD~ Â.W§U¾[€îÙk¬}LÒ >¼¿òÀÁ*;+:tXžÉäÏÕGQ,8`Í9Ž鉓l.¼¦æÔé3TOžÖ¦ê_VŸ=wžý\P´8ðb@Ý¥ËT4r§µWìW\¸v](l#•Ô8&Ýpèš½ºi;ùÖm¶ ÛÅÀؘ&;ŒÎ5^©wØ?ðî=½? ‹jÅý;|À®¤»‡N™=zlkþI@º–4> q×úL_[Âçìéß »:†€—Š((T¼â·_¸rUùoÞ¾{_·¡,ôûàÚñª«Ó~R>JÌy5ïŒú©ÅÛÌY>G*AÿR—ùEewA©Ï0[öë7v”úpÓþŠ…Üï?Üpy?KÜrÍTƒsýúí<÷§á¯¤#²Q endstream endobj 32 0 obj << /Type /Page /Parent 119 0 R /Resources 33 0 R /Contents 34 0 R /Thumb 97 0 R /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] /Rotate 0 >> endobj 33 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /TT2 135 0 R /TT6 53 0 R /TT8 54 0 R >> /XObject << /Im3 62 0 R >> /ExtGState << /GS1 141 0 R >> /ColorSpace << /Cs10 63 0 R >> >> endobj 34 0 obj << /Length 5604 /Filter /FlateDecode >> stream H‰”W[“Û¶~ׯÀ#™©h@ð1±;gš¦÷Í“YËõ*–DWâf'ýõ97€ ¥6íxÇ"p¾s¿ðÍ÷Œú|ÝükÓ7Ñ¥áß¶oú zÝh§ƒê¼kz«ö§Í›÷§V½7ÿÜ|÷°yóð”QOc‰ ~ú¾é²8ßè¨NMG—Ï›- i ÷÷ È:|zÝ|¬~ú:œßÖ[ߘj¬·~.õÞÛô•z_ÿòðÃ&‚„B¶3‹¤–n‹Lp•­~-Ô±oüRR(ÈÒhƒO¨ÆÛí»ë4\Ô~¼ õ64±R …î;]uoÚ7VëV‘6}ØuP››  °F¹Ö51*@wQ]†Íz¨ð‹¸²xKÜb²[àF2ácõúúÚŒà•=øÃxu© ¨3\›ñRo#>'EÖ¨¶+UÀ[ôÉ­|áðF9.šâ⛀&‘êçá7U{ Tº‰lºI<ÀžÞm(¨m¡ý?.µoÚj¨„òx8Î;zÕ]ÓU¿×Ù¶b¼¬ƒñMô Èê8‰=A\{5>)ã†ìßûÿÇõ­WéBxî¦lÎHlˉmuJ=~JX¡köb#®#µ½g¸|à«V}{ùt¨ÛÆUÓ¥îÀúÝt¨{xkW!¿¸ Ÿ÷ÃãËe`§Ü-«$×GÌgsÏŒYkã’Öü”¹•‚ÉA#µËj;P®mjÓVF½…¸ùêI¥8ÂK¨ö‰]õ¥¶ºR~?ïŸ/L?×X®‡×FCpÑJ¤b=£™j•…pF¶ªèXžÜ%ª‡çz¹lò†ZA€XÇvÕ Œé¹ÜHÓ6'›•f >½\Õáªvjº¼ êôr¤Žq<œ¸Mà…éy7©Ýñ8¾^Õ ÚÎj<_šFõi€Žr>SK8OÃ#û: sâ}¬Æ³:L õœê}m-TüSÿ«éuTØ 4µ"‘4‚ ¢š°mºj¸\ÕõªN»ó0¾\“ÊPq=Á@š02!¢†Óe<‚þö°{÷_XÕ‡o¤I%7I‡ é„xä) ‚) [µ#u§÷õ2R–C«õ8€ 7 ×$”-G±Ìú¥Qß ûæå:`˜XР^—ᑞ·úíßß-õÕ}ŽkÏS$ö¤AÅm-ºûvʘ¨ƒéâ{+¥þŸS+Böa"ûÚÎSÆ„ì±4e° † âTo¡ƒTŸÏ»#?]9ˆàùçtVG  ±È11q”×ãâõ5Ó|Õîœ]ÞÀîÝÓÓ€N‹"Y%ä‚ó›0쇗ñLÑÆR'‘Cb‡„^é&¯¢¹t5éË|‡7 êú2<sòX|`þ'˜û^@œÿâø[+ùW‡2¡¿A›¶ÙÍ™LWûäâ­ßf'í‡Kz wmõ(o+ß® Z¦¯ÏéëSú¾œ'È\JÝÃEAãQ_©³tÕåÀÕì«ÇFýtÞ£…2Àj«ßûa.²/êYNwtzUŸÁdª ñ¼`%I‡ *îxTÏãCÞý™/ƒ÷ÞR(<øÍjb€ÒV‡óÊ¢˜-ŠluÐë´›¦¸‰z‡Ï’Îå[Гq=ƒIºgý1õî%½`ÏEj[Îtì Xúéw¼%zGÒûOýOF‘&Î[hŸ–Žz¸ívq¤“ëÒ%ê¼@CÑw‚óz˜ž9Bxá8ž9$ÃuZ‡úZôù¥=Š£| ÆÊˆÕ"uGre,„RGº¸B<»>Ëáx™PX4,Ö*VM¾^N`gãeïçïááxøUAƒµêU­~TÑꈌ—ö;H‘ÓÆt8´3áH„Þ2VÞã‚…Ÿ¾Ys 4è !Âç r¿uÚ€Ÿ"÷pfÉuÚØÚ»+`lß ±„YãÌŠ `¢å­=e#T,„ßà"Ì’ë´iaùéJß´öìÒ†\€Yq ¬/}ƒrE~ƒ‹0K.€oÄn“ f‹.–è¹ZÙ"àB˜ãBhlïô^„{‘À9pÏaABŒwP‹h Ó팒¢2£¬a‹hÏ0·lQŠJ’}[;›”–QRP2Ê µõ "AË¥dÑkÔ"Ò٠إ Ä»°è^(zCEßFUO! …-8Œ‚f‹wv.©’Ï;Z=çsØ \qÞ›¦µÅ9ìm¤U>‡¯[Wž^!ßj]¼ƒCµi¼-ÏáÛH—瞃ŸÏ!ñ ùÖàYœÃœÑ®<¼R>ìæ®”o";1[ÉŸÎmˉ–ÏCá/<ï8né¼Õ…¿à¼5œvùÜïx ây\âC!.üãŒèuÄ #Iá–Ž­ÀQÛ?ô;©N؃ò!k{¾ÐrÀp!£ R °Hq!<Žã‰.x¡;iÏ&rJAzöqÏ2\ß8ºÐ³M… p{Ad“5‹ð? 8 äE‹]¨xjjxÁ²[Á²S V>n9ÊP“=K,q&t¹%öAW02–==ßðRµùFÈQnô¬v¾m4–7ÀÛÝBð¦]èábIÀâ½|Ã'ÛÓ pc¿ÐÃ.šùFäˆäÁpÙäÁrÍ7|IÀ]n–r#u÷t£3¥“±·»Ò…xÃKûÌ7béBl°šûO¾w!åÃF6š¹#æ KujŽ YêmÙ>Ašnb9Í]RÃñD–ÎÉÓ‡{ Ôþ\§yD$˜€àîÂÊ’Wp1 [mˆ¥ƒLÌ5¨`$–Ó|C÷é @–„’°Œ‚«ÐC¾N„j)Æ{ ¥z±óê´œÊ`€÷û˜åÎKLZÈpñ’@ps)iV¨š™éD‰ÄÇbêqR°ò6yuKýjÁÅÓ€’@k 0¨UÐÖx—`\sëlû(&¤oCXFû»¸E÷® +G\Alrµ½—­q fÁÅC¾ëú6 A^I‘ÐÝÅ%˜ÂðbÛö?âjiSna#÷` eÁ„(¼¶½&Ë‚cŸ ZbÄÌÁüZ¾u­ ø°|_ ÂÌSèCE‰)HwX¡–jÄ´d¾s£—Ôè¸Q#á.ª LìÕŽ$¥Æ$+ â=XñjÁÄ!î‰`›PVÖJ?X£J„g&ÎZDm© Téð&µÆ””M,'ÊFœD-}òI–³ãuJ™(a,¸NyŒ´XV±˜Hà °Æ¥ÕAâÃ\¸~ˆß°ÈiWHá&ƒ‹](` ¥d:å¯Sö ž²ßñè¦ì0‰…’“Ûô½KU’Üx*ÂxIÈ–¿y %PÐ\‚Yp!LàrŒ>i“nxÙÖ¸³àb{',ì„îÊ«e¹ÜŠîõ½l¦"¯Fw/'vI%ÙH»©Yp$ÚbF$'"mUòóŹOà¢Ù®ŒËU–ú ÷8¸s×@׳7åø4Éèÿò{¬îÕÁÜbvüpeÏÙqåYBÚKÌ2úIëdäêZHŸã¦ði\øu³ÎA1¸jB²N7 ò´Æ…ãt\ö%.µfŽÛi SâÔ8)µ%Ý¥•-a%gŒÓ‘œ´»‰Àv¢‚2»€%˜ÆëH^¤‚ÜÀiŽ›ÛÝ \/p ¦ñbýƒQ÷ž2• i Vä¿q:’éc12ELE×Ä5XBiœ…E¦*4МH"îS0Œ‹Åõ$ŒqcðKŒPÏAó±rB;{­ KP{öbjiHñ‰kl]‘ä¡—¸Â­ñ:ÖðZOƹ¨è¼Š+0Æ‹ãeÍ/)àD2çòÐ ¬„‹qâà¥AÆK¿E‹àqS×xKÁy$4YäÇÿSr9Á.2kÔRáE6kD¢Ái'r¶Á 'Æ a²('•{§ígKXBiœ%Iéôš‰IJ±“¾±€%”Æ Q‚¨‡ ¯(ÆjW[ÂLã…0ŽË'–@rrÒk’nK(Ö @ò,kFIÄ<‰¦×0¢u9’‹—ÚÎÑŸG&¡,(a4.GraÍœ¶ Á2µ~7b}ê9°˜ãc¿-¦9/©tàpÄ%DNŽ¿¨!DœêËÔª+f™có*¬ySUçSð|þÑó|ßqV¤:qÈR^‡YKSâ y UBÖ8!ÊÈNq’L3Ï`(™`a ¥qâ\&î’›VÀ4~VrÙx™æ<äEYCi ®L§*{iòaÒ'Ú,¡.²x楚+ ‚$‘0"kÂE ˆ˜º%”Æ a²¨˜,gÉ¢Qò7` Å:!ˆÆT¡?ip‡uTiœv êÜÄopôKliQZ'DñÒMtƒ³ýï–`/„‘`öÐ ‚ÀP°Zƒ[ôÕ…à S)DÖah ¶S \1^æ4aª—âÔ)†®= /2ÜÄ(“®ÞÁ\Ë /2YfBá;¬ÂÚ‡"'3É/b&y}í¬ öªñ›’ 54¸U\ÀâU³)¥Y\ û”xð¸5É$N5±Ó4Ô8Ñ0„X“Øât,å¢Ô4à²&ÆVä «ˆIÆ"(‹Üù¸¼ 2ÌFUf\¹ZíR] €®(¬V@-{]•T5¡µ‚+¥— ‰#‘Q< :¹l4µH Z5íF£¡ÉØŽ¦èðÜ››³5¸¢/FvU‡O©‘¤Õ%ö/Ó¸¼W²TsG•“ \Û¸ØË4.XÄ}ÊèáUØffë” cäLd™jò´¸“F•mX •ÆÄ™>ŽG“Mž¦€4>2È#HXá —L-Q ¥qâ\K®A©AYÀ ÌdƒÈzq×DâLT!ŒJq« |.jâXó:e­BRÒ(gk UÆ1FÒÍið¬#±rQ¨ J _‡*>l”샤!¯!JE¥ñÐbà…‹T“ÎO*µ K%·ÅÚóÞÕÈš†m#ঠiªÏ]©0…ì`~ÌÍiØÕ´Æˆ!Ï¢Á‹¡Ù!UD²!n+\í¸PÏ:€©!kMUÃÀïW ÐЛSnQ€·6 ÙVìÆmûw_'[2Dd‹ad¥P iÁ´ô–«è\…Ùþ9äW!-¸õßœ!¸WZKª!/¸‚¢Õru¯pÚŠ4…]‘Z®@b¶\9×rç©å*ÎCËN{ Wqö-W ªíŸ§±å*Bð7\i)«ß¾å PlÎÑ?7g i©Y®"ÃU„‰±á*æ¤ÒJRZ’´~¹£IÒb$­ß’¤Õ«„bCP©&MÒjhvÐ$­IÒjpÛæš¤Õ å¯-²j$­†2Wiµë4¦å¯$­ß’¤Å IZ ’¤Õ\i’Vƒ[pEIZ¿ò‚+MÒjð-Wš¤Å IZ yÁ•&i5øm¡IZ ’¤ÕZ®4I«Áµ\•$­†¡åª$i5ø–+NÒò¥IZ CËUQ1åÛ·\•$­IÒjH*Ô®J’VÃÔrU“&Âd:iýÖ$-MR5h’–oMÒbÐ$-MR5”$-†fHRU‹†ïã{úÿm÷éîÏwz|œ:ß=~ºýçÎÁ?˜â—;™t6P±‡z¬Æð‘û'x‹±ÿeÍ {¸¾í¯O/‡Óçî›W*§r¤È…[ØQÈ¥ß(S_w_÷ÝóþëáiÁvƒ»í6P÷ûS÷å²ï®/{6vO¯ç§_º ‘úÿl<TìC} ˆ./oçÓá¿äz8Ÿºãþéew:\ŽÝõÜ]^ÏïÝóùý„ÐÝõmwº|¢-P–ÜèçÕoÆ$H!•³P˜ó"4Þ€¸[AËÜÃÛî‡OdÁ …Ý ²‚®ÝîˆK/×½X_èã¶}fãá+®ó¢ö´ü…¿þûËá ~B?35Lü¢CyÑ)©u8?w»Ó3œä~$i׿îwü€EÝáºíðùú¿bZý§ þOÏrÁ°ÀGûßÈzá£G*¸8þðáÉ]v<\ºÏoûÝUüÞmÇ/MK;$ÿ·4½•3mw`pbªÉåËëõ@1ÒþcÔ‡„:öç/—îõîxÈ×~÷J‡ý•#@ôáL_Ïðg<ù…“jO;ÈátÙ¿ÁV¼Ë;r8QHƒ‚½Þ7Oà½*G¨Op•üÜ_¶VÈÿ ÞÒžM endstream endobj 35 0 obj << /Type /Page /Parent 119 0 R /Resources 36 0 R /Contents 37 0 R /Thumb 99 0 R /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] /Rotate 0 >> endobj 36 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /TT2 135 0 R /TT6 53 0 R >> /XObject << /Im3 62 0 R >> /ExtGState << /GS1 141 0 R >> /ColorSpace << /Cs10 63 0 R >> >> endobj 37 0 obj << /Length 3456 /Filter /FlateDecode >> stream H‰ÄW[sÛ¸~ׯÀ#˜‰Arú”8Ûm:Ýfk¦™}ÚÖ.%eI:iÿ}¿sp!hÉéföÁã™8À¹ß_ýx]Š»qõûªÍSŠë6o­h‹¼0…ueòV‰ÝaõêÝA‹·§Õ¿Vo6«W›¥ØÜ®JÅXø×¶ym ÅTyшÍaUðÕp·ZƒZ¡ð~FÊÐ××ÕGùþsw¼ÊÖU^ÊS¶Vø7tc¶.UÞJñ.ûeó÷U1˜ ¨ºÌMÃb¹u,@³ rRe›_qT]åÕRBÉ‹’¾HŒ«õOÛqê±; ]¶¶y#¤(Úºõ+ýJ…,Í›U)öbÕ4¹-JP.¡0ÚäM#@Ý4bèV·d¡Ä.Þ”º¡WÞ,e4 ^>ʯ_¿æ'Xe{” .‡¬„8ݘŸ†lÝpa²¥Ð5´­…9Öd“sþeƒË3f¿ì—*·¤K!>t_DV ‹¼qª—¬ñµy»b§êDúŸ‡¬Êµì2 WöûÃþ¸åOˆnòZþ7ƒgµtô¢ %P*GЉ£½ø ~- qºe%È¿PÜ¿zÚöˆNå¢@bƒ¦mœ,â‚l¾ˆH¼Èñ"ý…ˆž£­l®šÈ¡hË"×5TH~$«R$ï ¨}|¥óZ] m´åÇø§ ¶ªÌµCš=(_»ûýÔí¦‡¡c}.f©F[(DE4ƒd„‚XÃÒÑ&úÂ8oî;Î ùŽœi‘tdzyE¹“­k|v™Æ¯ØâæaßOb;œŽŸÄíéaŸ‡ýa‹w%=D8´  núÓî·ñ/ŽìúW?vÇΓÜ2Éé4¼Sàÿ¿š©(¢2qٰ̽ò!¶yÁ¢“>;Ÿk•ÏøÓá°åX…dW§ã4dh'$[%û¾ã+{É0âË@ñ&kpÞOâ;hˆø.’yKuFKw1maMzøÞAÅõýþ–1'¤"?¹ËJ¢»'s×Õ*!ŸGu’Ág>›_÷½8ñà- tâaäƒÒò‰>$ü3ˆýUðuFnwû#Ãï2”b\ÝrA’ƒá†ý‘ÁSwøÌeI²Oö¨_¶ý?FÕš1çZˆ4…b (ÔdVŸ´ªEß}…UUãƒýàôÓѱUãt­rØ¥‘%bPKè‹ d©ž[‰ˆâC7l§Œ<…`¯¡Ëø­\AÇ¢ÖV>*—S¦Ž)SÏ)3‡4y¸•Få@¾ëÈÒäUŠÝ’®ºÑ]mÎ%Çm/Ì ÿê¯Ð°’ä>üÛõîåŽéwÇíMïû§#&Æ=\E±ç±AiºßNböwîÆw¼q@YDÒJ!–F&ÓºÜmåqwÏ*ñÄôt<=Œ¢ë»CwœF?'õ›ŒôyRæ„DòPQјhÐÒ[ OâÏ{ØJzn;vîoþ„˜º µÂ’F‡o¦Ã±ë>uŸÄ Ø”>bÇÓ![k4×Z ù½;n¿üß8è†oYa±1xÍcÛrì¶RÁT𻥡¢‡rgåUW+¨?%~iZ‚]`ÕZŠäþȉêÂŒûʈÆÿv êKŒ…¹óOÖÍ\&×\°PžéŸ¯WgE“fšÊI[ËoÐû€äÁcF±ÑÅxWÂ×á­+ î×—Í/Äžß\oœAؘ|éY~qÿú|Á5’r”s„¼âS¨ïŽ’&Uó0˰̼GCoY0Ú‡Ž‚¼&•Õš[ î`ʼnˆ4?Ž=×$JÈIŒÝï+)×+—ò¾† }n¶#âtäæ: À=ìÇqæ®-JÈѱì=‹ =¶hc(Ð' ›¶9e˜¢HDИÏÍ[Í—Žo§‰ºa¡ÝñY‡nÄõ浫œÜ¢°y ÐûŸ_£tO†ùáõ[qÃúz´&Ä[xáhyÚ{Ò^s+5|À—ðý?e.}ôY9‰ëCÖ‡î?/VnŸûÎ(n:±n:1~:iØrJ^(âη†fQÿS·Û•nЬ§5>ô®Ðò`w”Ò-¦)y¼4¶¦Òƒ6Ö±6M–_,7ƒi´UÐËTópèUÒX›dØ¿¾úG¦ ©ãçy &Ã{ÁÓ¥âeÈÔß¾>—¸¤M†¦{Z­0q“kmi%uÍçß?ýïòWžØÅWшŸÄÇ_ ñ‰ÉÕX7«ÂÐÐz•¢•©`ý¯—ê+Ý•téäÿÙ·qÊ~j»mO{,ºijf¹%}”Üjtç¡}FÈ€nIšË@jÝ ¿ ÍŽ® `’}ò¢q€{î¦ÚFY©ö€€_(¸UÓEHbZHLëÑt8jµ8MjZL™M‹c­fÓºcbZHLë‚é<¹pŒì€V³i½°Kí¦U\ Ó:’‰iµv€Ä´”˜6"…Ž,™vNêºvU YØRøÎ€ÚùAƒ%Ëy@’0 ¢œÊœÜ+J’ 3=€&Z—™ €*ަqGÃ'eÂiÇ‹b¾%æ ê|tÅÇ<ó~ jä©ùù,0óGÇÍ4‹û ‹ÇNTã ÃáÄå vÚ:€ö9ެI^p*JW'¸ñæs‹&D(É™òG=‹tlUûÌ8矹3Êc@Hå(iRCž‡ñ¸¢q® &Þ­•¢Ù5,™¨ë´D†—#užÒKsiiu^Ú§V«Ëã  ƒ¼L&úÒúðßï2M#â5ôFþ-ƒNc£¢Õê}F‡:ØYYË˃¢6ŽØ;L›¼¯¡ÚH^Ó,†Ã5‡Û­ûØuÖÔŠrZqTÎã‚°´H"{P¸ œQHz:ûM©RêBs}Æø$&ä ¨—l.ô’Í@¹à»˜+ž…1®«8d1ÛxöùqÎ>ÿf”Ç€QÒ¤<ã‘©Pu¤E‹­[oךGÌG¥ 0Ô´ƒ„ŸµJBQ jpðÏ¢Ð4Pº¤Ü :’Üâ·En"qåxx´ªÿ_õ:nÃ0øU<*CËr${nQ C—k_ œ»>Фíë—ÿbìdjq7ÙüDJ$%Qü„é=Mà/á‹A çM‹ÊWn Öpçòj|=t÷ž:‰×¨¸ÂITÿè킊k®§ÍZ”0§3š>üžþ[HúÔ-·ããLÁB5_F4bÕ°Ow+6ÅÙJMý|¸0Ô ÕVËP”ãn·±ÊV9Ÿ ¤®«:ýÏ»,7;zÃ^©ßÒ“¿–#ß„j°²tvPJÏðn…~Wj½Âó¸÷u#AGœ²7ZÀwcveâP¼£)bg{S­ÞsÙ‹ur–ã pNµÓYË’Òj°4ÇvwÜ.Ⱥµ+µ$W@rjF+@sj&k xGÝÞ~IJ/FtS*â Ë3”­‡¼—gB>vp€<0; Ö5E‘ž¯*¹ôÀ€êj&ÕÙS¥®˜Ë  äU¦ó"-ç=«÷ƒ9»ˆŽ˜¤N3[0Q–8žr®°œŒÚúä’<âüÄ+½ÒM³±Q–˜Ë"YÕQf²fZÅ®md#½œØœ&+x$¿íb.®Ôq$åæ60ÊÏ8ˆ³r ª÷e¾¢AùÑ<³Îëͱ*|üôÌbƒ g/jfÆl@Ú]×¢˜°…õbƽô@êfðNÔÙI<ºõßÚÖ€.G:¸2i9Œ¨®Öäì":Ê$T»’™sdºZC/@âv²j´ œ°·pì ègÄ^Ú‹Êß.(!¶±-øîã¸ýãt_€ØExù·1ïöáy?=´PÍ~`ƒ‚±ùŠLp@NGW1™ iHÐ,l³ È&‡¾ Ñ\˜ï©éþÝ£¢ Ð褫u‚~‚/¶vÍ7ø)ÔÄòóƒ U|Cꩳ‘‹ÖÉü2ó`ï endstream endobj 38 0 obj << /Type /Page /Parent 119 0 R /Resources 39 0 R /Contents 40 0 R /Thumb 101 0 R /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] /Rotate 0 >> endobj 39 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /TT6 53 0 R >> /XObject << /Im3 62 0 R >> /ExtGState << /GS1 141 0 R >> /ColorSpace << /Cs10 63 0 R >> >> endobj 40 0 obj << /Length 3701 /Filter /FlateDecode >> stream H‰´WY7~ׯàc+°Ú¼›ý´ð…ÀYd #ÊŒl+F^I°‘ŸúxVkäñ8ñb€QW‘,ÖñÕÁÇ?¾Vâýqö¿ÙØ«„¤¿ÅØ^Œ²—Vz18ÛZ\ïf_îŒx¾Ÿ½š=]Î/—^(±|7S:ž¢Ÿqì#Öõ2ˆån&ãÒáýlAÒ¤¦ý×t‘¶øú<{Ûýòq}ûl¾p½êö󅦟Ãú8_(Ýx9ÿmùÓ,QJüЃêmˆjÉÞ§+H¦„¸NÏ—0uôàz7Õ'ªAé¥ÂÔx¶øyu<­âzXϾ -ä8Ènxlk)ˆÚ¼XΔ؈Y½—Š$+²FXcûI·AÖ³wðóKv¥ ؕݢª[hG1ám÷ùóç~O^¹&(ÞæŠÔYûýa¾Äx_‰b•0Y)FOîXÀ'wïWï(Ðâ"c\\ïaRÔB\­?‰¹#F'ûLWå p ¯åóY ªaÚÿz˜»Þtë¹§Pn7»Íí*~’궺?çYÓ%yUEG\˜Ô19>ñ‹âª”Ø¿Ê Ä— ÏÎwßâûA’Új,Wà š¿ŸÒsMλÛèú1S‡Õ Ú«n“~ö·ÐðèVâ5À;tK"iéɶŒÝRóæ$‰½Ú&æ#‘%~Hüµˆ¡¥ÕM>WTHçÙ…¿Sš`áϸå$EÅ»Ã~—w.8æ«WŸÖâfbÞ§|ãõúQ¾ãöæÎñ0é¾'8‘*É5½‹ȈPäÄÍÔqË_~%/½¿]mûÄ{9ךNŸP\'nöEÀQœ>lް<Ò"Ü"n6Ÿ67›Ût§ˆiëºU¼íúCôÛ}Z‹ýÇ"0+³)*žöâ¸þ¸"v¶tùC¶PW u²ð÷ÍiAé™$‰Ï6tÙ —[B¹Fª&sNÖ·$öö$H<âéuesÏö»œül{:ì·Ûõ¡¯×²jVЮ„JÅB9Oõ¸'Qy£„%Ü+ TJú¨Š+oúª«“T5¬ˆ•|@ñ£ oÄ-rcZPq`D‘ĉAß-.@¥î?û¬Î«™¢ü“A O h¨ HÒCÁ Y £+Øÿ«ÉŒŸHêÄœø,‚øY¼ýMŠ›&N‡ÞÚ,®H{}Wc­ÑHcoгîh¬ÆRߵɸ|I×Jý:ŠÔùæ;^0§Ì§@jSiS÷µÚŸc¡énKÅ×'÷ïª.8¸q[w87`1¨y¾ƒ<¥È!J’+¾‹Àãg‘yÑY›§ÎŠÑuðUt›’³®¨.ÄTºe´7s xS¶P<å ¥- *x«KC𦈔ڗ¬™S‘'·’Çè~5 ïÄ¿ÒGõï]äd_Y²k …š¾etÞAÂ/ ͳ‘¼ŽÛµœ¬Ë09HO»<·%`•Fdh—E*ö¯Kü”´ÐìÃŒF£|^&œá×{¾ƒ`t•€ˆ&ùQ,"¨C­Úb =øèÇ”I0üK"„èÃø/Uˆ<üwM€îŽ%¢¯îis‹©³ÆÍí„jLA9_ÝœÉS¶.?\¨‘Ç´¥cØRP(´Ì«N³ ²õb‹g–ñ :;²ˆ:kX8±v9–´U fE!–m˜”‚²L¡þg.ÕM ,RÃ^˜#•e@x½|‚Ök:š‰< H„4[&?ª6d.êÆ0ªïQ7îx VÝ K£3þïíÿ8òÅù÷à5öí€ϰF‚R·“É~¶.Ãät!ÏП#ߨ^éŠ}¦%Z&öÙz6¤œ.vqäÛa@‹jà·ƒ*]Íó“(˜Í›/ Ô>1H´íî3„¤º€g¤õò,¦qÚseî3º¡Yã9'| <[s>šÓ1ñ˜ñãÚº “Ó…ôã#ÝÏ bG”´*ŽHÇD2ˆ´õ '§™u”Ø8£0”ÐÛÎ[Ž’´#¡¤ŽNÓ9h73OB6Fž· ΢ZFwŽ.NΙ± Ûv€4>‘~B¥¡¢0HC™vÇÃøª²#uÝ.4ôs”=…ÅDU²\Å^Ô³IÍ3»¢{GŸfƒúM•™‘ÝQwP ‚=ëC# ĸMâeqùÕa¤¤JC§½ò!¯â«cÔ@Á}E•?=΀ÑÚÕçžɆÊIBN¶µl`ñï ¹¯9ZÊpuÁ¢‡6GÚ<Ð8}gªkw,5é=jPnŠcw›(1žêõÉ̺IýrlugjP˘b`¥©<æb©ªû\ŒyË¢ÌhY”%M X† ™Jc8_Ó¤52y=Ñ3VÆ’ ™QR%‹ã¤Ñ,•²:õtRöÌ:žK–¦;£Y.UOÕÞ$Æ…\²$˜§›OJ*Yeм¿!•pÂ~s&ãÃWf%ã£ßòV0>Öšï:,åtlýÐxÒšµCЪ½ÿ@ÊöþËdk‡l]†ÉéBZÖ [1`ŒÐÞfh­ß­–•bC˜’~úò3~„›[4ùå_ ys«i†ŠÜ8)jÒgq¹u+ÿDÌ¥âhPÌ }>oÐ*®¨jyLN7µ :­íÿõ¹kÐãïËŸoKœpžÂü}Ó y¾¥tœ-gÔ$@9ÚŸÉ–l]†v4C.KsÆhó ¨¡Ÿ™dyÐÖ‹^œYÅ3A¡çoM³2¤õ‹/†´õM¹dð^Ð4˜Å ý,¤±)‡ G¬F ¿ 7ƒ%<>§'§'Áœ2/Â6Z35—¾’–,âÔl(jt¨öPé[9Ê$ z[—ar:ù$JoqO×o'´kOEb‰lqgëŧÅÔ¶IÜ}œ Xà+÷|ÇÅ ˜7·Ò…ÉÌyVºá&‰Ë¥«î „°gÅwø…ZŸžøðò”&ÕðéŸsM="Îr¨Šµ&Z£ÃyM´mHTºUSG°[Å!Ð]³¶m ¬êW¡>|} Ķ<¥9-3Ú˜eÊéü„ l=jѫؠ«p•`Ú®W)+Ê—eÈËâ8Ø ˜•i‡£ªg¶ñP£—³°x©®é  Õ’8 ß7j#ÁŽ óÞ~S'@œö+ýæÒ˜ÜÚ{Û•ö§Â€ÕÔÿîHkÿã¿wÿËʶjˆ¼ UC0¼­Õ¤k})“­²u&§ «†-Ûô6Ò¶â›ÉVÙz1Çxqf¯‡*Œ˜¥[=T–eõ0ïˆPs&âÕámÈ·™±­;òÀ¶;?‚4o{0)†@QÛÈÔ2$@ RyFÆ;®gœáÓötÚ"çšôH^OtŒ•Œ¡íÉŹóëÜTz:);µ¾VAç9wÈN9|Û•Çe–Ö~ˆ•}õž¹£î´qìúêàa$0€\rñuržIZ1“è‹BÓéɳù‚Ê‹éþMÇBaôÀÌAHéVôk½ž/¨5e1!«Ê»Æ _9x‚3He¢P®A¡ú©m%¯ãn)ÙzHɇ“´2Òí[ÆDeã¤Z¯²yp­ª´õdÉ Î¬ Å!iJ Û™h 7{¶>€±6OÞ—çN¬úÁã¦\z/]7wE:ç¸+“âþæj¾ ¯éîåòÅ= °€Ç‹ˆn2T¥ à1šÞêg®*¿ctžB+#Í‘ m›2A"¹ÿb½\’Û†a0¼÷)¼tvI‘â5š´î&3VÞŠ7@UIåIvR Mâÿ`šAÀ{ ãKdX3•BÝÁí…ãõháPìkJ¡–ëf–t÷F· wY@(Ôó Í=Ljñ"ŒÁ›ÿóÆTa2RJã)ô+< Ð å­¥ÏShOKÙShÍF¡©ÊÝÄFh½ý~™aÊíí®lpû…PŠ?ìî’ß.ð~÷t7æøJcAiY¤½P(EGö4§Õ80šxk£Ý9:;cúâ¥þyRt¬QÖq¹u÷µuLÆ&sªãÞðÚQ<…R;G9%ÿJË‚ ‰PJbz¥ei ɹœ RŒ†K…· …÷Û!‘î.ó!‘–)S.牔g|9‘jñ0"5‡itSj-â´Í*‘j-³ñ%òl4×5TF{ùÑ‘«•F!Îx¶e ¥1Œëvr½îvk£©ï@ˆTkc RmŒ7u’¡Õ«ÓC×µ7Ýš9\`zJ~¯ZòEt\ƒ¦ÚoAqX2î tÔµ„=wAGÍ%ŒðÜíkÐ8ÖA^‚ºÐøa÷˜HæÿtP›ð?}¢{Ä©œîG:Úœl§‚Ë>,X†dªMÌb:ŽXôÙ5Ž”mZ„˜'lÏž$æFpî·7!d&åEoÞk—1Ö:^ìId»}ÿy%ÕK¬zTïþª.Ú@û´¼ì¶Å{*Ü*ê>ÍÁ]Àû¢gq¬’ô†É~lœ1“W5ê´Ü/ÑÁÃIrÀâdKKñŠ9R[€ŽîeŠ«E‹s’ñɘé¸/zF­ò™-ôÐ6?D="‹¨¢ÀÓšHHúà%‘¸BÌ|ö%‘VãÍ›ñ%=¡z)w¢‡Ÿ`½M‚>¥bÈŒïûŒèñ JNfxgDÏÒâê~Pîß¹†Ö\ÙDu´"­”Û¹zËf*ÞDZZF—Pg»YcËh¢dŽ‚f«šF²BÏh£u¦† ]#¾‡¡mÄcè9‚4q,tÛe Ÿâ‹WGÍ]Ú\P«P90 ü7Ø~·Žm´ð}¢™›ÉëÝ/ÑQ¯6ÿrަ¥Ù¼锕ònõ4›¯,þ˜:$Ì™ûÂ3…~kI|y†Ó°ˆ\•3þ 0â—žÚ endstream endobj 41 0 obj << /Type /Page /Parent 119 0 R /Resources 42 0 R /Contents 43 0 R /Thumb 103 0 R /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] /Rotate 0 >> endobj 42 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /TT2 135 0 R /TT6 53 0 R >> /XObject << /Im3 62 0 R >> /ExtGState << /GS1 141 0 R >> /ColorSpace << /Cs10 63 0 R >> >> endobj 43 0 obj << /Length 2549 /Filter /FlateDecode >> stream H‰´WKsÛF¾óWÌH‰0fð>ÚR6åTRÎJ¬ÚƒL‚S©%kó7öï×Ý3ƒ(¯}‰TE3ýøú1Ý=o~zÐêq\ý{Õ$u®UŠÿu“4¥jÒ$ÍÓRUEž4Fm‡Õ›÷C¦îN«®ÞmVo6›RiµÙ¯´a.<š&©JbÉ‹$­ÕfX¥¼u~\­!-5 ßB‘Ééíeõ1úðÜoãu‘èè¯ çnŒ×Ú$M¤ÞÇ¿o~^Õ€ÁRøÅT:Ék†•&¥¨€Ì”ÄE&ÞüÀ1U‘s< +Ä’¤šÞÆíú×v¼tgµ=»x]&u¤€"mª4ªÞdoLšfŠÑü¸YiuP«ºNÊTC²†5*Ïò¤®¤çµ:w«=y(ð‹ueV•u‹ön…3ácôòò’œà•-ü¡!<:Çpº19ãu…G„Åj•U°R5%ܱ&Ÿ\ë×56¯LqI9.ER’IŒBÝw_T\`!J“ZL׎¬ð¶¹[qP³ýoç¸H²¨‹K„²? ‡c˯€ž'UôWŒÈf‘Èó4X (p2~C\aÂi¯t¡(¾0Ü:¿øºï‘F²Ó¤.äͧuŠDbWPr¯Ñ: H`Heê]œø¿utQqÝÆåªNÊhâƵÇŒ¬"lyåVO=óËoÇLgq«ÇÈB,6½ÌqöΨNàï1ãñÁ¿yêùpQ·§aH<`é‘èOøî»Q]@×RÆçÑèÊèògÛ« âU!ÕÚã8Æñp:Rví¥U$çòD‡ûzìŽ#~"fÓ6?¢š°­Ý+;íÙ¤<ÎÁ£ÆgyÙòï\˜GBd?dGõ|(òHȿȣ•Оb$+r-sç7zؼ½ßÜ ›™Ðjiù÷"‚eiǜʒ  }Ø|øM‡ÇXÓö‘‰d³îQ}Æ RÛ°ˆ-ù8@Ó÷‡£å·öVÑÌ?rú}! ÿ<ÜþcMh‘Tåî­‚¨_#çQ¢c| Õ;vL  2NG¼ÍÁ 0ÀFTÈlÈŠºÐ{ßsJÄT‘?Tn\þ|‡g–»ð9YØÒötØ>)·sËYòÔBÙ‰=˜&ÐfT°½?Ù¥óÐí1ðÀTÑéâuÕ",GKõ7øí¹pùNŠ ­_:Å íî†Þz¬ÄÚë§cfˆÖÎm‹Ã¹ÛvÈK‚û…ýN®6Ð=ªZÝsKú²f ‘l*®ßš`‚­qÅÐÑ ´öÑ2Ëq7&êÇ^ûlõY‰k8¿‰È•"SÈí¦%…‡íuTj¨;Ú>wÝΑ„•`!©B=œ š4lQ2>9»ÞîqQøFðßÞ(ñø„PÝÞ0ÛEŸbX€MÕýdžoÛ=_p®9rAØùHN9„œâq¡âò•EOê0ÂÎ/¶íˆôÊaâ%ÉÁèQøX5 ÍAO] Є¸ÄyÄ<·Ÿâd:¾‹²Œ¥ëî‘H®‹Ê¦ÐÃ¥åqæ6sQ”u“ÊÑÏÂÛŠ@‹Íõßp !JcKˆz€ÁjÆ7±®EX>ïçk÷JÂ?+A­#éòh‡kLF´öÝ£{Eë×Oˆ×º€'¾ËËÓT‰>««Æ9÷ôLùª#ñkf!òTùÄ~ÚwBÊ*”—¥uá¿Îîª,%4á2¦¶¸rZù»q‰{.+~ãØÒô͵‘1¥0ÑYÉ¢[Ùù%ÖµŸÙþF|òòíÁM—æ=šÓììVú|-§á²4Ww¶ÕËãýõð„ ãÅcÁ#½žÕª¨ûŽÁLóôkƒ™ïïÍ4ÝQCȹ\#+ñ|s󸀆žñ‘¥÷$Õú ¤ûØÖeúP÷ôl¨ã÷‘IK7Z’N™Ùx±*-Ý=WÞ¬žŽæ:‹Û„ŒãxÚRmå '|§^¬œ¹+™Û?¹35Hç`8BYnÜ>›hÜwçDÝýyv(íº˜h-ªué«uéÚ2’¸•ëuÃÃèÌ­h ãÓa±×;jj> <¸á*Qo÷t liˆ@Ú•2DäÇ&÷±ãh"B»·½œûE¸Ðü¶â’¿9óùšäÿŽóiuV: æ˜ua%¿c¤ÆÈ4Mâ2_»iÜÒ¢óË´ÞP!»ÆK‹“‘ã\°[qj{ˆºÈ_Ã<­åb H.70Ó9î®Aн¥‰& tÏÉ£Ö“¬8;¢fè‚Rö1âiœT%rÖd ×S­è[Cc‹*JV…ò¼ e?‘{êtQŠ‹AE0”˪Kc¯}ôAîfêîQÖ÷oý½Cù"õø»¥Ÿ;‡ƒHQAƒßûŸîg€û +^”NÕ¯ê£IÐ2õ{ªv+“áÇ as®¿`y®ú•)p]œQØ…‰¢Â•hFa<ÅÃêã\[Oš@–]è''zŠ9K¿d™´y h MÌR“¤!<·pÏSD°$J4ëzZè'4`Õ3d!0ÀSÌYw¥9E>Ð" “–¼4Bar“d˜|ò: Ø/«ˆMA»Šº‚c gçDá$âÉ"椗+,deh ¯ @Vc(äí€xÒ>9uîå~ÀaÉŠWT¸láÃ~‡aÉ8µÐIQ¡³ ýÒ-S`¼™5x—øvá*³t]‹ÍÞÄyž÷…7`žHÅèyäŠ,Ofü=EÑ[¼ðÉäh/Á%†“0÷Ù°`è í¾ƒ˜5¹àrIú`!³Nuɯu¨`ñE–†úd!PX›$b–¹íé˘2Ì»ç¿ ñ•u…ì°ø/!ãYôy k|–5ÔT­~a.cXʸb™¢:ɰÎËpGa’1g–,ý’e Å$ÃŽ¦ «fÎ4 ‘…‰‚è_ÙöÞ\ ùnÛqÏ´NÜ“¶ G0wÉUˆuÁ=xŠWéÉFrà è§máöÈ‹ÜTk˜,Li2QØ41•Æ3ˆù´0—1,e\±mÜ˰1÷2¼—¼Œ9˰dé—,Sš\gêdf[^Ð=, …€‚9N‚á%8/ÁQ8 sÃ’£_è:û…Dì7ðn ˜ƒ (¬„Œ;WÈ11LŽƒ‚\ˆ& ÇáÏsÌE©¹´k"°ñ»2ÌZî œƒ:Yž™‡3 ðž™eår‰@œ! ðf:AÖUÃ’! ðf:qH›&ðä°d¼„™N"Hƒè K<‰“1×úÊQðµãê°8-ŽÀJxXýoØN{ú endstream endobj 44 0 obj << /Type /Page /Parent 119 0 R /Resources 45 0 R /Contents 46 0 R /Thumb 105 0 R /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] /Rotate 0 >> endobj 45 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /TT2 135 0 R /TT4 137 0 R /TT6 53 0 R /TT8 54 0 R >> /XObject << /Im3 62 0 R >> /ExtGState << /GS1 141 0 R >> /ColorSpace << /Cs10 63 0 R >> >> endobj 46 0 obj << /Length 2735 /Filter /FlateDecode >> stream H‰ÜWÛnÜÈ}çWô#¹Ù¡ûF²`y³Ð&‹u¤ü ï5¢¤Ù‹Í¡,ïg$ØΩ¾Ý£‹H‚Ø€†}©êª:§ªº_ýp.ØÍ!û˜µ¥Ñ‚qü_´e[³–—\óš5•.[ÉVÛìÕéV±7ûìÙ_–Ù«å²f‚-¯3!­~Ú¶ljÑUÉ [n3n—†›lm\bÿ IM_÷ÙEþó‡~wR,ªRäûb!ñ3ô‡b!dÙæì´øeùcf`†Õb?d#Jm¬Y¼¬ÝÐÉI].‹å¯‘9²©Ê*µÇš)¹ /2ãdñSwû­öC_,êÒä Vð¶áyóJ½’œ+f­ù~™ ¶f™1eÍ4 xôҥ1 ÚµaCŸ]S„¢¸øP*C»|XÄì.\ä÷÷÷åQY!Êó¡0§?”û¡XLÜC¬ZÁT/Y[# ŠÉÃó…Áâf\¸Å¥*krÉZÁÎúO¬¨0‘óÒ8×E€ ¾–o2 ªŠ¬;U©ò¾¨åf½]ï:û ÓuÙä¿@VåNßdƒ€Hå:s”ÇÇ~W¡Øþš‰Š¾pÜ¿z:ö`§tìÄ$ƒÝC ^PÌîÔA9/Áxÿ%¥¶GÖU]JÃTk¹µ;“—ªÑßXª–±”‡höÚ¦ÊF>¢©ÚîÆ¨ˆÌ䆥²)€°ïo†n‹pß°þs·ý°éÖŸG³Ô³±æ¬°òv/§#dÀaDÉCº¯ ¢ª‚€"I}ªœ]uöwt?_0¤ú‹lýb‡øä×!w[k™‚%®dh?:W{Ã*2vÿW-$çóòA岉VÑ\Ûö.¿òûpTœ¾¢.ÍeiâŒöŒ1¾Òæ¯%*9¦;;‰r_·ôM™\Tù”ÌAîr=Â"m‹ør˜Dw…ÈÛõˆÆ­-9U´¤ƒ—¥Ýß²ƒŒì|ùš´E3ïÎXÓ0Y>ÏÅœ q.,ì¾ÃÉ×û­w£½ø¢ wF†©%u”=®loÙõ¦#ˆ•u`ç7ßthµÐóH_xyEåSW  }wÅÎ>[V ô¸¿‘ÿ Ìß²óÑäÝxw@É–ÂG6ÓAºÝßm®Øeïùg±h ƒS‹ù¿ÊpÉ7õõEÜØ‰pp¶Žh¸P*ívmgKºÕMÏÈ–[a³‹ÆÖûslë€ýŸõå½å¿êóE×e“X®½å$¤ä3µîí¦ï=Ûí¨ñ¶ñë­7‡bO3§ˆ¿‹üy?|Z¯üòÙþn\ïz¶>òå~ÇnûÎÓ‘fÃϨ²67~¼*ZûÀkýóáùEԵƽ7^­dƒ·ÅS²Ï¯NÇrºù»UÜVš¯'ïÒpÛ§Peßžx‹t‡Ãݶ¿šãzz~FAÙÞ­nÙuGøÓôέr&䣲ϯ†cUUj3#…§g*üÄúãHr¼]µ ãqÂ! Іÿxò*IŠ“¢%š¡¡»!øH÷7¤|®$Gø*YJ‚Lâ,ÿJ¤ÿÐJhÕSå–þQqnË®LM¾Â«@ážÔÂçÖVšm!é~ÒíÜ$n%‚ ð¡hÜý½Éñ¢¿a…úé&Œ'çDmJQÃ9„ݰïRç¨gïRŸDƒKLm}Â%J'NY_Œ'£¾Ìÿý­Ÿš Ýg‡ƒ+ݣ㶱òÏ‹=•DòË*üt~qG·ÊÊÞ{½»V niùG¿rçin”ö}nQ+ˆ,D*¦@ÚF~ÁçÖ€^D™wWýGeæ»»@Toì=óu!í…ÝÿsöããÜO½ìã?+>Þ‘ù >cëV´`òß¾Ö›ðñ";-ØŠêc#çk²žññ‰öÕ1ÿâÅ£B4¦ù·/óHz>¢PP>)ÛÏ+Ì|4-µñ0 U;U4ñ„š@•ÿˆYàBÿ=ûfý³~ÅDS±{TIö»ø…³«Ldœ„ÑmC=r› Õ"w¦‰M&Pó5ÕiƒÔµ;´ñ¹f'°Z$"©Ží±Ž"ØQá2TÇ:ªÖ5žI$Xj¨™¡í5ŒéP…q’ní¦šƒÙ~ÿtÀñ8øYW¥LŒöuu¶±Qqðh¢v=m1Ò5±yV%"-wfÏ( ‰HÛ¦Á“\:Ï‚u¢IÅ9Að’hRã«Y¥ÎII´ŒE”J“ªFNÆ"€9qNžˆàZ–8'+•ÒM†Ô¹Z¦t“usä\ÃSîHÀ:×´GP&àÖÒI²@ ŠÉ3áèÉ2ƵsÃï—ºIÈ8ûíöÏN…qå û¹ŠÇ©ÛL‚G):¦I¹(abŠlL¸¨À£ÅuÊE%èÐ}5ᢲ¨x1ᢒMŠŽR<å¢têGÂE¥uêœB|.*ð(u%á"Huä\­S.*ð(uùpQ†Ô9#R.*À:‡üN¸¨Cê°N¡LÀßF89²Ì „qT:…DÉ<Ç×çÇ gLv…‹É<ÇÅïŸ >{rjð(AGó&墆 :>$\ÔR¤èh©S.jð(AGÃï„‹Z™0$å¢F(t4½@gÉ7á¨èƒ£A+ëk§ "&ðêʤdFlÏ.PN*¦˜íé?R„b1ª²ÚÝÃjZn9ôÕiyj´vùü‘½9”kîQDGVþd|A«,‡Ü˜Fä€äT&“!Þ*«,žpËN¶¡—à¬ÚWÑÙv‚\påÂOÐÐð -ÙÃâ‰Ö­;a²4õk•Ý&§AžâÓ¸€qª'qݎͼƒÚ2MÜf±V •kšß3¡´L;Â9ר Ê’-D]×jŠ27kôl>MÐÐ̧ÆÃÎÅcív×>0Òí0H Ü|º;MðYžêV;¡ŒŸ'ZZÂäKêÅ=>ÍFLñ*ǃˆM;æ¸ÇN8îÿ{†ÐÌÍZ°Ì–ÏAȃŠ4p˜fëR] endstream endobj 47 0 obj << /Type /Page /Parent 119 0 R /Resources 48 0 R /Contents 49 0 R /Thumb 107 0 R /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] /Rotate 0 >> endobj 48 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /TT2 135 0 R /TT4 137 0 R /TT6 53 0 R /TT8 54 0 R >> /XObject << /Im3 62 0 R >> /ExtGState << /GS1 141 0 R >> /ColorSpace << /Cs10 63 0 R >> >> endobj 49 0 obj << /Length 4542 /Filter /FlateDecode >> stream H‰ÜWÛrÛF}çWÌã ˜ €AªòàÈÞ”’Íe%VåÁÎLB2‚´AÈJ>#ùâ=Ý3¸Œ$Z)ek7»R1˜KOwŸÓ<ûòR‰ëãâý¢JU"Ãÿ²J«BTYšÙ¬enÓJ‹u»xvÞñâ°øçâ‹ÕâÙjU%VW ¥ùU•–±yš9±j/u׋%¤eû׸H[Ý.^ÉïÞ5û³d™§J’¥Æ£kŽÉRé´’â<ùqõÕÂA –Â]ªÔ:V+K df$NêdõÓL]æiëÃj`†Ž¤™¢©q¶ü¦>öM'Ö‡®I–E꤀YUf²|fžé,3‚µy¹Z(± çÒ"S¬`°Æ¦Î H·NtÍâŠ<4óKp¥q´+¸EnÁŽÁ„Wòöö6=À+køCA¸ìušczè’¥ÃÄõ ‹U”°RTܱ$ŸÜ¿_9,ÞS`Â%c\ò´ “X qÑ|IŽ ™¥Î›®†3°ÄhõbÁ š™ößwIžÙ$ ÜmÛí¾æ!T·i)M€¬‘^Þ¨ƒÂ‘Ü ôꘀ€«²âp%T._œŸŸö=Ø©=;u6ðÇFZg »‚(éF¹ö–¼L¬ü¥n—Zùn—XÑí5ûAn_«»ÄdÅX*…£™v4Óú;/šz#jñ‘kÈ[UZȾ!ë7ÄGLÖ‰Áo_‹«dYbÔ%{­¨÷LYyN>. äy&Ú¦%æ¨r’(6͇íšx^*’—zÃVŸÜÓSž¤jÐVŽ\îê¨7„ìÑßý¹È~aÚ*i_N"é=¬‚µß4àŠ–Ðî×D )vbx!×¼Póo¿=ìE °²™­l>Ä_ñªßsàùV|Ž]X'H¨Î>fcl¬l d€OyTKJVR›÷7”¥$â´ùŒ¸­åCÒÕë„Ä‚/ÎóÁd<Óý…“¹å<ò‘¹×á:©Òœá2rÏdÞººç”Y†wqìë®Çm˜õ'÷Dˆ\Ö;¯(¸˜O„œ'Ñ'묪‘"UHfÝ–œ£dï  Ab?îükà3¦âD‡-àÒß<¨|ZÍ‹7±¼GL1O6E±©[»fÝðå…üÀ~µl V¯ÞÂÔíÎoi6aâ:)9ÈfTí†Í­ßÜQ°;>n}ŠAL¢jJp#6 K%·}“PjFžà§O”³•¡µ;¬y¥æ_ŽÇk™ÿ¿¹½xºAwÉuâX+Ç!¬ÃØ0%ÿŽ2öÎ/×½O.ÍA퇵ï-2Ìp¤[î X.öìæ9é¤]åÓC½C½œ…:ª÷&¡nŽL¯óP/9ÔÍ<Ô»¦¦rVIÚAl|K{Ä÷¿Î8{Ç êߘ„;ê*¨§ $‹ÀÝËǃºmȪóüüqǫ쮢ö¤¢*ªp#…²‰Bèuö‡Ñјp»k6aHuÌpƒŽ¯%¦”ßR8äòùÙׯêŽÔ•|*¶ûÍv]÷Û}tV4û$_%Ü‹ö]½?^yaøxÄÞ{ýÛ;æ‚)TÔÙÞ"TtÞ†ŠnÃ;‚ÿðaîOp%×Wò{½ ³‚ |òÚ¶æf}¿9~7/Oë[¦.q9oo;nž}©†~¬’ÕaÈ4ãô‘¾Ëæ7J } f…?úfÛC1¦(^u³Ó{nŽí¶Ç§ Ï\'܇R A+A†?ó):8~íÅåê9ÉÍüp!Ä&Ó‡|‚¼Ë¥¸­qûÕ¡ùzþŠÄuÝÍ»^`j•,+¼Ÿ3ç¾W»:0†ìÃæëô‡œɧ7eÙØ·ßvœ.~aÂ) ²_Pø‹Ë>¡0¨û›#ÜHVä@Òìष‡›²IãsÆo6JfDH%O‡»‰iP`F#œçCEÝy€”%’8iÊo%D=ž:àéÏMç±ûKáöôô¿Ûè;H¨^P,sçŠeßÐDz Ͱ´¤äö'Ùß\ï=&‰{Þ1Å7et•y3©—8zœzÿæwøóå½X/ÿR±Nâ‹Éᅿɲ?¨4üm ë_ÌL  "ÿÆûÜTÈßý†¤ßbá­e6;|¹úŽY4â¯S­*#3nŒÄµ¸´dô䯱¥ÊBKõý®©TÙasÿ¶îñƒÁ¶ l$7ÒÌ9\éxÙt¶ë°|q¸AoÄöHˆÊ·{ñ¶éšTœ÷4ËÊ¿\-ŒsJ¨Ì¥Î £KþíšÅÕc«èËì¸j­NÝ|9×ejíÉÓ,W—©saí>ÆwN?¼þÅj¡4RC&ð¨àX z8fN¬Ú…¬Ç›£gÏ//È-íÍú­¸ª)ÐôÞ¯v"XLV¥¹&‘è`Iâ¼îÐöér£`I6¿ýâgbýëzÇ ûÏ´dõžtnÀ;@Kx~Ø·ovMzÆ}ª>åÊ‹D¿xÇÏ~|5\[™Óè=´Lñß]/Œ)RU(¡søqƒ†©Jò>íû„ ž*Áx¬IMŸk[󕇈þ!˜œ>¥ m¼û/¹ »/åú´]ž†-‹6Ñš¾Eö~rƒDÈWRúƒR¾¿áGذæ:ž¡íSeÅNìËÛ‹{&Ɔ){ì)ÃØ7A¥œ·ìï ÷î”õ)¹wÈû%g}®kêšåÊZA_]…ÿø¢GÍK{ú–È)9Öâ8}ªVò}X¹ O?»÷"›LÎПCi„iÀ<ç!UÅI{g%Å™† Î>¤qSP’„Õ àYÈ牶B„?o—ÉùÔÓÿÙcÃàRß Z;6®^Ó‚“?ÿYk†Á“ôd¸ Ü]”zú¼±>!Òþ´Ï?ròÆIšŠó„B>r#µ»m¦?ˆwF‰;—ÿ ÒUSÈ{7Ì/¾„N_A§Ÿ0Qæâ׈oÄ«3±AíÀÅŽ”¤(Ú…ÊAþib‡ “–”qOéwP='°£@W‰d´weÜ;‚9`.£D¶Žn4UíGõ0…ÚÍSM§3*‘¤@Á•fz*û݃èøm´¯,@«ùÍCòusùÜi4Q¢´ÌT08Ò¾B’›Ñ`‡¶ÑDŽÊ6;Bi(rš¦êQUìxä:_ÆÆ#(~‘µÉ¸RNG0ˆŒ#ºšèˆµ±qÚ¢ŠŽÞØ8øßDG€wl\acšiÀWš˜f0ÄÆQ—¡)Šnì”ô„´ošhnðfï ÍD«ùÆÆûcñ-&Š;¾«ª˜)&³±ï dEL¡.òQEÌÜûÎðÖù ùÎ3ÅpRšOX3ÅåÈwQ1Å娏ÜÅL1@96®(c¦@‡è‹˜bœºc\h#§#€!6Ñ1ÅT.6y9fŠÍÊØ8‹è3±?æà·“8‹Œ¦û·By”Qîk1‘Çž²Êż°X‰8z"£ïC¬t >ƒ9?¿ÎŽ ¨)éPnÔî “oYp ˜”‹™u¯á•ñ¬&x[[‚$Á[-Á@šˆZ’l™Å—žÑn½%¸ŸßŒŒhBJ½t²ÕSgì,Íe½wwJM?S³->ð×Ô¨DO°ú̓úøIÈykIƒƒ¡_vR£$ +SWŽ,-ƉDéä{z¬KWJm £-Êífîæw¨³¡ù›2éÓ@ D#ˆÁ߯?0E¾³þ$lxÖŸP¦ác¿ì@u£èq 1ó"ôË UnŸæ‡ðo_áTl«ùö ÛScNwø‹ŸóÃÆÿ¼›qÅ}~/‚_€ rˆýYŒ~xn?ÄÿÆê×6ñ }*?p>TÜY¾ç<ú^’¬·Ö8rþÍÑù'öç?çnï§û§@d×øÿw3œLî{¢°ì·/3`ð>~þÚ~<³Ð\Óß_n5• 1Yý×Û-Π¿á!o¸”è%¶=.Yo/gP½ý„»n¹Mí¿™¼x%?¦ÿå‡Òÿ½W£WÆ»;ÿýØ%_r¶ù!Q4äCã—‘Ï9„ë𑹹qÇ#ÒÀgé8\‘Øå¨Ho¬Ô2½yÉ(-õœΩդǻà9QÎy†z…¤?ÛÇé·9âý§b¤•f5öÿ¼6­EØL¡€/†KqiEøóüP×Û¯–ÝÜ ­“†)m”…úcc½Ðz‹ŒºRÃ4ŒV®Û˃QƒªDð7fÇXiP™ü†‘hè*a§ñ×1r·VX8vg¶ÊâT Á;ç"d?9œµÎ( ÆêT` ðÎ5˜ÒUJœƒ©[ ýpŒDˆ¶«@¼s5è*uœƒ­rHeb ­´–Üj TI‘h$œQ°¹õÛw_‰–ÇØ|}¤|Äfºú€|ÄR̾>äÖE,Ávéê#An]Ä  W rë"–ÖÅ×GZËà@YW rë+›¯iðÎÁ›sõ‘jœƒéäê#A¼s9Wi¯Þ9è/¾>2¤Á9—!Ù.•Ú—s.‡êS™cöÎexs.•ÒàœËiõ©ÌFQxs.•ÒàœËðæ\*q£ðÎ5œ§*¯_¼…ž³Ni¢MC »¶:VFÂ7a q wEë`cPÓ0«i 7ÍSð7Ò™4?&û/vû¶ôbk]#­«¼¿6ÆAŒ­K É!ûŽ ™;£Òâ§Ê¬©ÛFênGú :éw¤â¢¦:ÙŽ²Œ ±¢=ìoé½ £æ4ǧ›ÊعOÊìÑRøÃ©„\[³t7áîgtÝ[³…DÊpcU’mϧ±!“&¾kÏ¡Tß°à…Î;7¬s"ÃÍ u®3’Ÿ!-ÜÀ5b>„FBõ÷@äQØÍœBI”be8qIå9=F qLÐŒ&˜,”9eÈÄW"¡6ˆÊ寂 s²Yåì˜à"¡65Œë6œÑËÕÏÑ(¢†ÀÍEm®¸H¨ ErŠ¿Ø9=FçÎÑ(b“Ê5¦6›\$Ô†¢9Å_ì£sçháLá¤6ß\$Ô†" 9Å_ì£sçhPb(6#]$ÄFGQrŠ¿Ø9=FçÎÑ(¢¨…_”Úœu‘PŠÄÚ)ÃÅÎÑè1:wŽFÑèi€—Øð (:÷ö;¼ÞÐè6 Shy‡çmõï%CSòÞz”ˆõW7ˆOoºÅ!ÙþX„|!ÖvNƒ¯CwÈ0è.( &Le(†\Ê`H¦Ê„×ÔvCwzxCwÐßö.ÛâÕL))GFžº._ÓûEèNYÄ]•eQFˆ…»¡œ!õ¼Æ¨XU“jÃ+4ç…Â;— M-½MUÈ5a´£›²\Ì]œ|1Yb¤š’DW¤*ìü=ËEýà endstream endobj 50 0 obj << /Type /Page /Parent 119 0 R /Resources 51 0 R /Contents 52 0 R /Thumb 109 0 R /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] /Rotate 0 >> endobj 51 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /TT2 135 0 R /TT6 53 0 R >> /XObject << /Im3 62 0 R >> /ExtGState << /GS1 141 0 R >> /ColorSpace << /Cs10 63 0 R >> >> endobj 52 0 obj << /Length 2101 /Filter /FlateDecode >> stream H‰„WÛn¹}Ÿ¯àc÷CñNö¾)²“l6Æ®WÄ€‘Ajkg1ÒØ3òÚÎ×§Š×žnr ЇEV*V_ýí–“ÇÓæÓf NqÂàßv ƒ!£L1C¬VtäþisõÓ“$¯›·›¿Œ›«q4„“ñÆ o?Ã@­A¥)sd|Ú07[Ø X …£/›÷Ý/§ç›~«)ïýVÀÏq:õ[.èБŸúÿŽÿØ8 áwña9UÎÓbÔ„#`O†Ûu¢ÿ˜ÑVS}ÎÇÓ€4¡ŒãiÜlßÜ^¦#¹?§~k¨ë°`ƒe½’W‚1I<›×㆓Ù8G ã°3‡Û%uŽÀîÊ‘ã´ù€šù%ºR:\ݳ[`EºÂûîË—/ô^¹pؼ;öèL'z8ö[‰ˆß–iá–d0àŽ-úd}>w®”¸0M ^ɳ ¿M’^ÃDǨ WçÉha4¾Úø Êû_½¦²›z¡ÜïžvÏw~Եݷ"+»°_æÀÁD‡ ããGW®Éáÿ1¾pñè|Ýö=¨SuÂ$?()À èó§Àßù3®?‚Óv_Éu:…Q>™ÿ\ãÑF †élФ g3*-ÜeöÿÌȈ¹QŒTvC^%©•­áZÒøÅð#Œ š2‚S¹L„ÛoÏ/¿O§Ý ,OŸ÷/'§jÊFi&@"¸Mç×2<<1 ã!"OÙ¦!Æü„*!´”Ò¥s_‡ý$AÒC÷»0žK«}’hAxF¹DŠÃ§Óàˆ·ÖX˜žòßÂáÕ÷ ,<µ‰`üX›PPtp"&ÓêïdðŸÈ3x`ÖAˆ¾çĬ µ6%áÛ•Áù®8€Ÿ%­ w#­|%ž§¯ƒFŸuãtÿûóaxüVÇ ‹™çòDòêȹÚDº¸Õ¦6‘\Å „TÕ&.:oAŽ3ÿsÑ}‹¡æA¦œ;pVõüâºßÂsä÷¾{5ý¹ õé~ÊUþÜ3–™àžŸ@Nò3?žaÕËæÍsåÍ.ÞUX ™- t ×¼«°6¼pWéÂ]!#áÌîcø™¦‡0È×n²±ý x£ñqÖЇÀÇdɃûÚÞ=廉SÉ„›é4O$YJk ¾×&’Æ$vª6‘d)…麚¸¨Ó9 oèåÈ-¶…X_PiX|!rá5|ßýõ OÛÝ}iTBÜ›;.M$?©A†l]M¤K+7Ì…6›È~râ<ÁóÄeÇ“ãPùíwD¿Ø˜3»ª3×ùÅ—\¤FGøVý6Ÿ¡ÁëŽê~ݦìîKâ; í2pØ]ø oý»í ÔQ/”ߦ÷ ÃÍçÃ`{—3ìMÎ;ƒòœù…áÔ²®ÀUR¥Îz8×Ù&­bàKåÀRÌÂlQj¼Ë[â×1Ÿóm\å-lz,=¬ Æøí²ÞŸ×—ãJ_f-A§ƒi².p•µä,Ͱ¶¡Ð7Y—õþ´¸~v\N¢ï°Îõ°Î:ÃuÖP¹Mñ5Ç–ü¢³‹A  *ÄJ½©&TΕòÍk0¢¹€,ú¼%¼èe‚O \"Y‡Ï_˜%¼¨£Ë³C/×ì·57å{Ô~ ê†ôùu}3¾î·|*ýeÛ‘k­nßqs=¾åŒ‘ÞJÖ^< 0ÒîÍßÿ‡Ÿ­øiÅ¡$voŸ÷ÓéGÒ Øµ“Z¬ê[xmŽ_g, ¹$¥O« c]^¡‹>|¹÷¢ù,u%Ûç¸ý/ͪÏíf=‰ûÇTY[ûÝW(¸»S?‡ª8Z¯à¬¥:µW©¸FMrGÕ¬Å&«Ž£õέSÚygµ:<ÃUjPæ!…{°Æo¾ÂíÉJŽI¬†¦wš³Ò[žË%UÄ<Y ž¹­âճϕœôŒÓYÚûÆL8Ž|Úï_¦ãyý+g?köz¼áàíž3κ­„u¬s"æºÆ\ ƒÁüu Ìy [vbP«œ‚ئÇþÁŠó¤hÎj»l/êÖ9i\²Ö.Ó2,Hú³Ëf"Àñ˨à9Luóüª8tç38E±a^×H>¶¨eAsÃuɱ‚ª"‚aå¹*\ƒpVذºxÎ7«Â…xõìª>•Ãï’¡œ¥w ¤)ØÏ2KSj¤© ù꬚=CJiÖ]¿¼¹A‚AÚ.©‡• !Ȉ6Ù°N‚Œp[qAKn ²ažá– [ÖQ‰|S-×%ÇZ´ËawKÏUáâgM¹åÅëp¾Y.Ä«g×i>8øa7+˜Z 6èñÝn¿{þŠ´HâÄõÍ­×å–cƒ´ÕX3Y®™ ¬™ÎùšÉ)ïþÕ ¨œ£¯™,„Vu²´wk‰´-Ѻu–h€/H4,hJ4Àm‰ÖͳDÜ”hÃ:I4’oK´áºâX¡Ú­ÃsÇÕ–hžÝ¬ωWήKTcƒ“%K&†!–Ìw7ÿ†·< èƒ.],˜œ§ÆcÅt|Ì/L„j§d+aBCªTS˜m ³n…à  šÂ p[˜uó,Ì7…Ù°NÂŒäÛÂl¸.9ÖáÔêÉL°V¹á[}§6ÀÆ´„¤~nÆ«{çˆy4¬à%`~÷UŸñêî R`›På? fp g}óŒW7—|€ž*¡GòÎÑnlžðú攘™s®áëmŽ-Ô½žñêî—Ñz¡Pœºð–a`X ëÇ?0§ÿ?iån, endstream endobj 53 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 148 /Widths [ 250 0 0 0 0 0 0 0 333 333 500 564 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 564 564 0 444 0 722 667 667 722 611 556 722 722 333 0 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 0 333 0 500 0 444 500 444 500 444 333 500 500 278 0 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 333 0 444 ] /Encoding /WinAnsiEncoding /BaseFont /OKLOLD+TimesNewRomanPSMT /FontDescriptor 67 0 R >> endobj 54 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 119 /Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 333 0 0 556 556 556 556 556 556 556 556 556 556 0 0 0 0 0 0 0 667 667 722 722 0 0 0 0 0 0 667 556 833 722 0 667 0 722 667 0 0 0 944 0 0 0 0 0 0 0 556 0 556 0 500 556 556 0 556 556 222 0 0 222 0 556 556 556 0 333 500 278 556 0 722 ] /Encoding /WinAnsiEncoding /BaseFont /OKLPPG+ArialMT /FontDescriptor 69 0 R >> endobj 55 0 obj << /Type /Font /Subtype /Type1 /FirstChar 1 /LastChar 4 /Widths [ 460 549 549 500 ] /Encoding 73 0 R /BaseFont /OKMDJL+Symbol /FontDescriptor 65 0 R /ToUnicode 74 0 R >> endobj 56 0 obj << /Type /XObject /Subtype /Image /Width 41 /Height 42 /BitsPerComponent 8 /ColorSpace 57 0 R /Length 676 /Filter /FlateDecode >> stream H‰œÓù_ að/9¾£z&E2ÙM#ae%¥4¹‹è@ˆq•’ûJ¤\EDŽ!WÈ•û¾ïûÊgŽÝVM;|ÙgžyÏëù>ŸçY€ÿ¯6m=s^íÚwðÈuD®“·¹óñEBx¿ÎfÎ? ‡]ºvkÝuGöèÜËbmÝ… Àõö2í/”9±)ƒ°¾Hh¸:ì×@°­%70‚ícGAŒ3ÌÈÅÆ±\èp¥ƒxI D  #FŽ2p£™ÆŒeÃq‰D-Q“Æ7u’©òjâ$€”‘8KLJý×¥Å+Žð铦i”S3ÜÝ´éT›ž‘ 0s–LÜäì9nî<Ía~@ö$î2'×麜˜§´ä½ˆSždžÓåbÍ-Yª¯‹Ë–¯X©Ä¼jµÄó¸&-ê²€­ëÖ«N …ŠümÙêyoÜ”¾¹¶låU)ç”@iÊ6õ3™Û^æ¾=‹v€;t‰;­å»P9n·ÑiUìÑ {÷Y!{?“ԡ̇¨;¥êêÔŸÔOs>-;½>GÉDò5sÖ/‘œL0°ÌÄe}•Ù]ê3Í–ýö]©ÞnÚ@ —÷ã§ ÿW©G®…jh^¿ÿÌ5ü`¤²O endstream endobj 57 0 obj [ /Indexed /DeviceRGB 214 58 0 R ] endobj 58 0 obj << /Length 660 /Filter /FlateDecode >> stream H‰…zýÿÿÿééõÏÏèììö<< ‚¶¶Û==žy| „´´Úééô==€{©©Ôèèô::œ‚&&‘??ŸÖÖêååò88šz!!ŒŒÅÎÎçõõúýýþúúü55™ss¹ããñ}ƒƒÁááð33—pp¸ÎÎæ””É™™Ëþþÿßßï00–##‘ïï÷ÝÝîTT©LL¥ÞÞï››ÍÏÜÜî..•……Â((’xŠ~¡¡Ð++”€ÈÈã^^¯wÎÚÚì++“ŒääñââðœœÎØØì66›øøüÄÄá~ššÍÖÖë''‘$$’íí÷ÏÏçƒ~~——ÌÕÕë$$ …ÕÕêûûý77›}””ÊÓÓév€““ÊÑÑè""33•vv»¥¥Ó „ ƒŠŠÅQQ¨ÈÍÍæ Ž""‘‚‚ÀÌÌæÔÔêqq·33™ss¸ôôúMM¦ŒŒÆññøŒoo·ëëõ88œ––Ëóóù\\®€€À²²ÙŒ##ÇÇäcc²nn·  Ï‰‰ÄŠŠÄ²²Øôôùee²~&&’üüþff³îî÷Š44˜ÀÀà——Ërr¹>>  „((“ii´sÀ™™Ìˆøøû11˜uÚÚíËËåææòÛÛí¥¥Ò‰ààï †ÒÒ逜œÍØØëààðÇÇã..—22—XX¬žžÏ``¯;;›ääò77š::,,•--•NN¦ççó••ÊÅÅâ22™BB ùùü‚‚ÁEE¡ïïøQQ¦ýýýþþþÿÿþ D_Ï endstream endobj 59 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 118 /Widths [ 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 0 500 444 0 0 0 278 0 0 0 0 0 0 0 0 389 389 278 0 444 ] /Encoding /WinAnsiEncoding /BaseFont /OKMIDB+TimesNewRomanPS-BoldItalicMT /FontDescriptor 71 0 R >> endobj 60 0 obj [ /Indexed /DeviceRGB 215 61 0 R ] endobj 61 0 obj << /Length 663 /Filter /FlateDecode >> stream H‰ˆwýÿÿÿééõÏÏèììö<< ‚¶¶Û==žy| „´´Úééô==€{©©Ôèèô::œ‚&&‘??ŸÖÖêååò88šz!!ŒŒÅÎÎçõõúýýþúúü55™ss¹ããñ}ƒƒÁááð33—pp¸ÎÎæ””É™™Ëþþÿßßï00–##‘ïï÷ÝÝîTT©LL¥ÞÞï››ÍÏÜÜî..•……Â((’xŠ~¡¡Ð++”€ÈÈã^^¯wÎÚÚì++“ŒääñââðœœÎØØì66›øøüÄÄá~ššÍÖÖë''‘$$’íí÷ÏÏçƒ~~——ÌÕÕë$$ …ÕÕêûûý77›}””ÊÓÓév€““ÊÑÑè""33•vv»¥¥Ó „ ƒŠŠÅQQ¨ÈÍÍæ Ž""‘‚‚ÀÌÌæÔÔêqq·33™ss¸ôôúMM¦ŒŒÆññøŒoo·ëëõ88œ––Ëóóù\\®€€À²²ÙŒ##ÇÇäcc²nn·  Ï‰‰ÄŠŠÄ²²Øôôùee²~&&’üüþff³îî÷Š44˜ÀÀà——Ërr¹>>  „((“ii´sÀ™™Ìˆøøû11˜uÚÚíËËåææòÛÛí¥¥Ò‰ààï †ÒÒ逜œÍØØëààðÇÇã..—22—XX¬žžÏ``¯;;›ääò77š::,,•--•NN¦ççó••ÊÅÅâ22™BB ùùü‚‚ÁEE¡ïïøQQ¦ýýýþþþÿÿþýþþ itbÈ endstream endobj 62 0 obj << /Type /XObject /Subtype /Image /Width 41 /Height 42 /BitsPerComponent 8 /ColorSpace 63 0 R /Length 676 /Filter /FlateDecode >> stream H‰œÓù_ að/9¾£z&E2ÙÍŽ„•$¥4¹‹è@ˆq•’ûJ¤\EDŽ!WÈ•û¾ïûÊÍ¿ã™c·US³/ß_ö™gÞóz¾Ïçyàÿ«UkÏœW›¶í> stream H‰ˆwýÿÿÿééõÏÏèììö<< ‚¶¶Û==žy| „´´Úééô==€{©©Ôèèô::œ‚&&‘??ŸÖÖêååò88šz!!ŒŒÅÎÎçõõúýýþúúü55™ss¹ããñ}ƒƒÁááð33—pp¸ÎÎæ””É™™Ëþþÿßßï00–##‘ïï÷ÝÝîTT©LL¥ÞÞï››ÍÏÜÜî..•……Â((’xŠ~¡¡Ð++”€ÈÈã^^¯wÎÚÚì++“ŒääñââðœœÎØØì66›øøüÄÄá~ššÍÖÖë''‘$$’íí÷ÏÏçƒ~~——ÌÕÕë$$ …ÕÕêûûý77›}””ÊÓÓév€““ÊÑÑè""33•vv»¥¥Ó „ ƒŠŠÅQQ¨ÈÍÍæ Ž""‘‚‚ÀÌÌæÔÔêqq·33™ss¸ôôúMM¦ŒŒÆññøŒoo·ëëõ88œ––Ëóóù\\®€€À²²ÙŒ##ÇÇäcc²nn·  Ï‰‰ÄŠŠÄ²²Øôôùee²~&&’üüþff³îî÷Š44˜ÀÀà——Ërr¹>>  „((“ii´sÀ™™Ìˆøøû11˜uÚÚíËËåææòÛÛí¥¥Ò‰ààï †ÒÒ逜œÍØØëààðÇÇã..—22—XX¬žžÏ``¯;;›ääò77š::,,•--•NN¦ççó••ÊÅÅâ22™BB ùùü‚‚ÁEE¡ïïøQQ¦ýýýþþþÿÿþúúú i_b½ endstream endobj 65 0 obj << /Type /FontDescriptor /Ascent 0 /CapHeight 0 /Descent 0 /Flags 4 /FontBBox [ -180 -293 1090 1010 ] /FontName /OKMDJL+Symbol /ItalicAngle 0 /StemV 85 /CharSet (/minus/equal/asteriskmath/bullet) /FontFile3 66 0 R >> endobj 66 0 obj << /Filter /FlateDecode /Length 554 /Subtype /Type1C >> stream H‰bd`ab`ddäó÷öuñòÑ®ÌMÊωXüaø!ËøCŽé‡óq–r> endobj 68 0 obj << /Filter /FlateDecode /Length 39591 /Length1 60800 >> stream H‰\U P”Gþ^÷ß3ñD¢Fä^ˆJ€AŸêQ|Ð3Ñ=OÇÔbõH¯çÜ#‘¹gïI¼vŸÒ^`\à(»’•£Lãh"åÓ:Ú@è2]& æŠ{Ò%OÈ«Æ@¥t¯Ô~¼¯ SQÀ'ðg{=Ç» ÇÐD>LÑžÿ‹*’;Ä)qM.—댵Â}Ý}ßýLWÂÌU6’óð*>â,üz0‡¾TDóè{fþ¶ø£ì$»H› _’“e–\%«åßä×F™Qo\Q£”CÕ›î9î3:M¿Å¹ ˜˜W‹A\?y\M³™Ÿ“Q†%X†J¬åzYm¨ç¸?GÎã;üÈ' `Î…¼{ WÝrZËØL»é£&ºA¿´A2BÅ@1B$‰‘/–3ªÅiqAÜ‘½e®,—K5r¿¼lÀ0 ­b©ªJÕ™N˜CÍ©æ¯Z´ökÍj½æ†»§ûwî î#îÛzŠ^ÄüƒþÌt%³ÜÌ5XËøˆ+q?Žã+\lçú˜)®x_²q5„ó© ‘4Š1–&02SiÃA9TÀ(§¥ô&UÐ[´†ÞmÇ&Ž­–>¤ýŒOéã<5Ót .b!¹šƒDˆˆC8Ò$1RŒù¢”áebŸPøD¤· ’Ò!çÊÍr<*ÏÉÂ7"xcŠ‘oT§Œ3Æ%ã™òWvU jÔQS/S¬)ÃTdÚdúØtÇÔb6™ÓÍ9æ%æsfíÄjõWŽ{~ý‹4¢yª»±P4ó½ð•Nµ’28c&1Y˵ò•G¤•®P¥,”³õ™"žÊRš">§@é¯âdVCS½¸!žˆÛ†Mw)Ôx‡>¥2I˜Ú6Qg £BÝÄEĉשQ“²Bÿ qª†šU8«q]x£™oõJ±‘'}- E2Xõ …œ÷ÕBÎ÷p±ŠúÉsF nI›ø‰ÑV“4Úè#^C¨ž·•üð€æÂIï">£ïèˆvÉ:#žãÓr‰Ž4ˆ¡“2€ÎIOdµq¤`áCéâ‘ȇM§å"V‰o°˜$Eqíü÷çÆ¾Õ"„5ÍÎjr–bà‹¬÷O܇Û[]RU\gÛe8&" /‹ˆã»q‹‘‰ˆÁ!®ÁUˆ›°D/¥™¬ûcY?P"É‹ÕÒÂÜÊù½è!Y gð®OYÿ¿dÕO£‡x¬|³j´¬6ì¬LÙ¬¿UŒ™x™[[°Þ´OÅx²†Õ]ÃU~¯ð›ó=ïßñÌo¶áÌÚÊÊ<—glq§"±'Hàuæ<œïyº‘ÊÊ»Aq„…üFá7± …z#’øì&ê ]…z»žŽ|LÒ»X轈•*KLQaF,kl}ÁïÑ·TźŠ+¬GAä‹{Œ=Ìh¸ú •ÆEÖÎzµ>ÎG g(‡_Ñ›(ÁCÎ[ªlÄ‹îq¢A§H'¿P͘ ë´?y¢@³òF­Y±ö,…ŸªåÚEBbÆä„ÇÅ2xÐÀ±/ÆDGEöë×74$8¨-0Àêï÷Bï^=Ÿ÷µôèîÝ­k—Î:>çåÙÁÃlR†„p»-%Ûê ÎvÁ¶ÔÔˆ¶¶ÍÁŽ_ud»¬Ü•ò[—5»ÝÍú[ÏöÌû?Ï„{&üÏ“ºXãnµÛ¬®“É6ëš6!“í5ɶ,«ëA»=¶Ý~»ÝîÈv@O°Ú} ’­.ʶÚ]) *íÙɼ\ƒ—g’-i–gD8<½ØôbËe±9È2œÚ a±Ç5xtdR®ž¶d»ëy[r— ²;fºÒ'dÚ“{dE„»()×–ã‚-ÑÕ9¬Ýÿb½Z€£ºÊðϹû(MÈ&¼“@wsÙ`^„‡<V6» ÛæAØ©n t€h‹Ã£¢¦ дTíP†2 £†h¹ ­&:Äq:Œ:X'0}¨•m¡Ã€3Ð1×ï?wï²Ù¢ c&ßþçüÿyüç?ß9ÿ¹a5é›5¯†öúû*‡’û|´&Q‘Óitv´ÇLÙç9ò+0o9éL¾]ÅàáØîLk‘LF&oðs5™Üí76Æ2­þÇ1†)‚ÑD2Љ÷!„ Í~Ì%zâ1SëÁ„~^¯É^Ý:#šÄF¿yŸ±ÌXŸÜ˜ÀÆ&MjÚè/, ZïQaÄŸl‰si‘ï¨+îOÉ¦í§¦„üSF[ª*û|ùvXûÆæ¥ 9¹™…ui›*©æ\jhJÇUcŒå ƒé_ë‡'1kZÈ?ëRríB4Ã_\C/³û±Á¼/œHúj¡÷qÓôþä Âþ}8ZÓ‘Ò¸ƒ¾ÄEfIšh°;e³¢Â,/g‚xÂØQø¸DÕçUUn¦±Éç‡@øèĶ#^[༽{B´³»1f×ý´¦¨ŸBÕqS$Ø2äX&¬bK·cIwOàñkÄßLoiú?Ï7q\d}­©Müæu¶½¡Ùhhl‹ù#ÉD*¶ -£j¶}aÚ–*i¶7õ "µÜõšÚb¬À¿+5"õ8jðÑŽÉ"·K¢Hª¡ÀßöôÈ\‰åðXzЭøß9àñ‚ÀJ£ù£¦/QoÿÆÇ÷ØiÀú˜{)q»[jMfmÅèú¢QõQîå$%ÖKECK[29f”-ŠË*™Œþh2‘ì°º×~Ÿ‘”1KnŠ$œí°~º·ÈŒî‹cëµZP[в>CÛÓØÒö4·Å}øÄÚÓëš'–Åû¦Ãôã~VZÁZVrÅÏä7œŠ~áUí‹CDÝʪ+…ª¯ÐH鼎N£µÂÖù€N·u!¥ã?¾)Â-±L¨ƒ¯R|¡F"´ÚGŸliòÕ*ªeü¹>ã®Ñй$à…-ë¨GÇ7 ð÷ ªw×`_£FØZ€™ÐП¡ Ú?Žz3äQCúÀÇ@%Ð ø5@ X <4¢­ |‹Çp ÷S»çKÔá:K>W+•+P6ô÷©\ßL”빎ùæÊ©TŽr lež©h{ÖºÄv´+QíZÑo3uþõûÏ~*‚ÌÆA_ˆqŽ³Ï ò ¯ÕºŠò6ø±åO £ðµr%ô£¼ÈEŸÏ‰k-Êù(/FlòQÎ"èw“û }.|ì„}<ê‚ÛbÞ\È"n‹1Ëä­H;„7ÕêÓ[h<ìc°n^³³&öŸ}ú7ˆ²™°ýS`_Åmß>‘…ur®Ú«©µçh“ÂaÆΠÿ$Ì_Í1à}×ZGzÑö2lO›Á‘)À$Ø÷*£÷Ç<Ÿç9ì} Ÿâ ÀÜæ8Híƒû¨øŸP˜L<ï‹ÀÏ€‡€ïrŒ;í§Á§™3ÌMæsCñ|Rœå}ÜŒØ0Çì3óñíÆ•ø(Ù•B9ÚªóÂûÈ>óYà±™[ÌGÂ^jó^»ÊëdNeHÃU©æVg¹•!˘û,eH­¡L Ñ|æ¬kG*"|ùL8Òñ‡Ï§:#²‹ÆqìxßéÄ"-R¶•®·èA}6­–o€ÿí(?¹ñ9¢ÎàUý{ôè!á¢Jì%ŸÝ—²äA†gXÛˆñ†ËRý½¤ä°(ч5—«×ºìêOÛpÊ™2ÚmcÉÈ´ý·úÿ⼫—Cùo®aË҇鬕<×f~GBßtåÞ í ·Kð¬"xsxBáû5D ô!ZªOPç.ý*Œ]­wÑ"ô“øR{N®¢cî^ú¬Æ>b.qžžaðø›Ò<ÊæÜ§¹¤¤Ã×;H>¹ŽTgªÆúƒ:W5ÖÕ™¬±FlI5œø~VùÔÝœïð5ÍË—©TÞÈàgO3ø¹ý|Ù¼ÌcY¦rK®sNÑg"ç^¿º[ÕyR÷lýNûl™î‚Ä ëuŸ£6ç\³ ì?OÝ#¸‡±ßœ3÷[íî'­v¹ÂjÇ:ìÞ yÍ:%fX}霤9©»¬ÐÉ¥'×9*NçÑ =œºÏ‚œOõãÈáv§òç_h²ëšºÛæ(ùò¬Æ½7yüÖ-½€—ÏIœKÖƒ#lÓ½4Aþ wî Ú"X¿“Ô‘#—8Ã苘Mv *vÕQúÛ@²Žýwëà'ßõ¨c¯œ{™÷Þ}‹r®+¸ZÑæ„ZkPÝãi:ÇAõÝŠ¼‚±<T  ªHµ ª>_Å{AÅw`F,R¹y énRœÍS}æZ·¼TÃp½Bó1PÍUOµÞ*uµZWÔ»¢€’gi–¬§P.T¼ßU†|YüÈ÷pÓg×U®VÒº©òý•Ïs\Õ´Z½'Øæ¦iî2šÉÐ ØT%_Á8O€W·P~Õ²Ôûà÷”ÏsCM½Oø Ôyù-úý‚ªøŒ±*ß°?‡À·7éΉžcˆá>ƒš†x§ò`êòÛx>¥+¶¥oQ«²µÐ{â´8)N[]ü”oÓ—å÷±') Û¿ß@n\„¾±ú Åä¯Q.þ° o¿-”§çQ§¼ˆvs`Û„~ç0Æ1Ø»Ðç]ÈWi±ü%mCx\ä7ô­uÖ~H]â&u¹ç#'/²^Vã3¶X_T8†¼y1Õ7嫃;ù¼o»;ø«|Íô“}¼ƒ<«ú¡®S‘õ.´åH£ØO½ÀQñ6Ú~¶kÇñÌ?LQíp8…Q½’}@#ÎØ<í)`¦>~ìD¹ò4pÒ®Ó!à cŸ<寧C,Ÿ!¡;~åØ2ÁsÝIŸ W®¿NÝ íºõOFv{}'ÍÇ|óõÅD y™žg¸wP›gµIÜú4Œ™UÇçý8ï9÷Üsï}ϽºãyA@»ßÅÏêê[ŸƒFÔ(Ç圈Üc÷èZ-Ù. ø0×LÙç€À¤~g @ÄÊþ:9( Ÿ]@9E¾)0é_J^˜²®ˆuŘҟº?©ûrïýÁüLõ2Јzö2)¯‡S<¹¿“ï‹»öüšÄ~ŸÔÅ»äÏ÷ÄÜy&î<xV”óÿ xv>ÞÞû_Eñ~ï kÔ•¤B[ŠÚs=ÁqõÖ‡„Œg€g⻀'o|íߢ½(BûØŽ÷‘fü6ìøŽ`+Ý>©f¢~'d€·[}oÝžKä¸uŽý>‰]‰þã€UðaŽŸ°{Ç”£O*Ï¡ïÿúêD®q´o]~TG<þC@øãw¢¹Ï9ô¿Ê:|QNž3‚)þÌâ?á•_ˆï:s¤îÿçqê,q–뜿6e>:ãÜÅØ?Ω@-í5¥¨£E-kCý,êÇIç¶Ç%ÏLæI±[|Eí,êWÛÔÌšœGÑ”ó`ÅY²nb˜]UTÌ8¸èaÉVAa`H8¬Ìy_²ëJY@8 ׬ÙYÒsÕ*+K6Y–hÄ. \ OcWÉ_…]e×HA¢W¬àáÀXX‡²ï7¥„“nÔËQ@!&ûCÌ7?Ðu}ÿìù†ìvÉÒgð}öIG]}†NzNÇÒfHx'.…’aÈ`TÒÌÞ"í@0 Ðƒä@1P+,¬—õbž=èï†,š@%ëØÛ°?#$û9ÛJòÑ÷;Lf_b‡$¿ ο{øuè‚»’ú °ðOÚ_…>|,ÉGaÏ.ø•¤þ,>=¢ß®$w³V÷„sàÏJ†Öa´c鋚’²ï³mr¤Ap¼=ÁX®6+Ï+ïQ[졹n,i–¾ +׆•k#*\­©˜ÖDÌ"ÖŠ˜VÄ´"¦«RÂvb¼b“Bz€\€aÝwbÝ…= 9 ŒHû @·ÐØsXÇBÌj?Ûjpl²-±åf tŽ=¥6ÙÓ±¹ÙŽ;šsšØˆà´$»EìféÝsNÖͱÌì#ê™pÛD¾ ($Ò| (T¶Éòó³ì ²ÝAÌ4Þ®´³vµÝ¦–”Óô ,@êðç$-"AòH–69[œ»ÌãÌu–8MgÓÖÌÚYcœ³«ef‹O [öK@æjmÅ’NW·+êv¸lQmXÑFµ1Í–«•h¦V§5i-Ún­SëÖœZ§]irµ¸v»˜Ç•ë*q™®:—Ûiwx/Û(¾M èT¬qö\öÁ݈`)ž•.$æFÐÛ ¹çFœV7¬nX ¤ðÔM@KÒ«MzR}Dü˜ð¢(Jƒ5 k; 9&Z@4šMGÔˆ2Žz s:€IÛ(€]™ò•$ýM€&ýc2&å3E_eÜüú‚áB-¤Ý…´³šÁP8`æC¤§§G¼#RéQ›½ÍFsAsZë­5j j{Ô7d„ B=j±·Ø(.(îQ¹—¼€÷¨55j®Ô¨‘šæšöVŠ[³ŠJ’ó Á§­¹™Rwx%N ”D »€k#²Í€ª @r¥Ö~XûI-lèÑ/^/<éö.é-áWîò3\xŸµbIm¸ ¯ÜÐ0äOF'ZÒ…•öÚd|·´sÈT†\£|Í5âñk$! ´6r…m ×d†ä@ 0¨¬ÿ lƒÒŸÒÇü¦¾x'³g£`JŸáð„=ÊtìE¶Ç¤Ü/eHJŸ™V¥ß¬ÒU¥¿X¥/@C) a8K™gºÂú©°^Ö Ã:²=Dòˆ®Ì’R’þEÊ'¤ô›yú§yú'yúGyúkyúŽ<ýËy¢ß<<»º’!¥KHzDÊ*)ç›.®¿Çõ \/åzX§')F'eRæH™%$ýø”»ÜMœçèǤ™¨,äq…H¢V0 ºmWƒnYÁ“ ZÁCü<ý”ÊO½iùnðð,ú7Z© ý“$D+I/x ¼ü3¤øM+¸GÄÿýCƒä;Düë¤Nö뢕ÒþZ²ßO,ÿFŒzÂò£'~9êQËÖC–?èeË¿ Ôab‚[­àBžA·Ÿ"b7C3©IŽø82o¯Nt®°ü¢W¹ N³¼‹A Ä,ÏS/©“ÃqË+/2›xeŠyÄ+'E ÉiÔ-'¯“|ÉË»Y´SÆ þà9qáäïÔmä:ë[õ´Òêå¿Ëeñ+þ85ÎðËÞsü¢/N×[|ØwÀqÁWèi>ˆEŽ"V¡gø€ ï÷Jo^Üê®à"~ÂÛÈ_5 [|ÿ¼˜ÙŽ+^wƒÿQ^ì嫌8…Û b0s_áý_ó²8­Œõòž¸˜J rôžá 1â|¯œÊWJÏ*K‰~ÛôÛwÙ7Ú×ÛרWÚ—ØÙsíÙöyö GºÃãHsLwLs8šCu(âȈOŒš84P’¡yiªªl{!!Ä[_¡ÏNt&«Vª×–Ñhz5©^W--ªŽÛ'žŒ.+ªŽ:ê¾Z?Hé E•}qJÖÕcƒ ÓÞ¬húcõC„Òâ½³·î=ØÐ@«£Ã›HõÆÜè͵¸Žik£6oÙ2ûÙМPú£3–¯*¿hJÊ¢;¿9ESs²£Gª×ÖGßÎnˆDc"»¡:ºzmî×ꇔJsEùÒ"¨¡~ˆ>¯ì¨xRØéóå “a$_iA*þ–DXŒä‹0’Oc2¬F†a›æW”æç'‚Þ¥•"Ûç]´%‘ˇ!«N”⓹|JŽÃ~H$sOM6P·LæžNd²y"hÐ0â7DÈ`©€A£Tº{︽Fb: Äã´AŽCÿÍz±Æ´uÏ9÷^ccÀׯoóð›Âc 6nÂÛ(Ä@D¤q1òXµjœ)+-T[Ò&[J²) Z£Â´Vͦ˜°&ŒhM—‡4¥?©Í~LÑiLŠÚz–%S;ûŽMZUËŸI»¾ßãžïóù¾{¾Ç=­óTV²`]‡ÈAGø^£mÿƒ2^º³s$4êE¡Q€hâöÓÃVëâÎ;T`M0®èðÈJ‡Fw£ÁÄNGк84òñ9‚‹h$´­qD ž’†BŽ¡àÀÒÂT ü [G¾²˜zÂdSt²µµ~‚8LÅ ÔV˜Ú S[ ÒBÆV¸· ‡{úå¨m °#K—ˆ2ê!j± ´éùý3ÅÑl3¾lYa|¶”Â@"ÏÑ–È ¢êÖêV*‚ꤢV­‹Œ/7Û,+øíuÃjG1´7øÕ‹Å&(Äãà‰¸136Ekë 'Ú·nïOˆ 1”¢ÁLÃ_¿ýY¼)’1qJœçÄs"À°æ²ý¦ ÚÇìSöûœýœ]F;ú/Hâœýïv&Ù„'à 36ã@á¦ñ½ˆdÍ q!ÐßjG#°ÛŰ3¯F…€:€>]ü!À_>`Ñ÷ÿàgKt„©fªCƽAjq@ MÇÈx—<>ïÓË@‡veißö, ug©Øê5=ßR—Ûª‚7F+€oüàc€/8ÆËx3“dzY;C1ƒû&(Š XÓ垈 ¢@"ªþfÞ#‹#X PÊŒÆèßâ”~­=z1—Ù-£ÔµHð%òlSsÈåóˆc—É{¿fPneÞÅÈ$—q—ANƒ+?ŸCF¿/¦Än~MìJ‰¨xþ! ZMmS;AóG­Ìû%}‰¬ìû°ÛÒ›É$÷:*DM’ã”ú-59œwDMrgj4‹ Á«\ÅÛö–Mk·=GD’)QäÁB²%YëAÁ:W¹‹øxÔ “ɈNk(!dòôèñ3Ø{ÿÅ7»mæÍ/¥Çœ»Nà£a?~´¯2øiúÔõ?œ;úÖOÀ7øðLƇF©¬‚­”oâ0®' ák¢È²çF6­ëÿù;#…>½A¯Ññ(Çç÷k|õånâž9“¾ùàŹ.›)<Éí¬ ïúQú;·Ó7ÒxŸ3ô ~þúíÄÑêÁ ÒÃìzÑÇÒ1ݶCªgý¿)¸l^j¿Ø{Ó|µýOæÚå \sÁÓª&s³Ë×ào¯ë•k‹y;/j[µmÚ@•¥*´Á²!Ômé ZC±¢Xàà¦×Œ‡‹Žlš5ž*:˜ÝôŽq¡è³7\7¬[;¬·³¾ÝÏš…ò²bÏ–æÂ™Æïes¶´Å=i‡ÂEÉ¡©ß2™ƒÐlþm]}éíòYÿí–k§Ž·:ÙÎC}ßúnfID>•J­¥’¨em-%®bµÆÐ¨Ö46®ÓÇl&fãCÐ|õþ:¯^§•åøüYY¬%åvP)‡‡ ŸÑö7P9•ÀCýQ•õyôøo¬Ñ^[Vêöɪ‚mv[uÛ÷»êêÃÃÕ%%+6]™Çâ,Ñ¹ó¸æª§¹È°D76ûÃ/WW—Ø6ïcµ¡à°,y«tx·¸ªKMÅj½¥@ßV^RUÙQ+4O5ëÜžWë¼åž^=ï.25hò´ù&‹Ê¬³ÕXª+§èÖÆ‰Ž±Ï²W‘ÍIæRÃXåV[ƒ¬œUV£CcJY2ºÂV”Ô£\ JhOåp¸Ü )NÁl½ T¢(‡¹ß ôbŠ™ò‹8*ÇòK2å2S.™¹(˜»d%"ÁöãᬓyýÙŠ_‹@%®FPMr•_ð"¿–ÌÜ©ÕH¶„œj›Ï¦®SÛt651¤ ðg=x-w Þ‹ÿ™Võ¦óéûìKŸ…#Ïï‘õIådÀpMÏ( QÓ-£À(‡eUr º ‘ò”l“JWª›Ö1ºe\ [PՠЍLÆ3P<Ð!"]©¤IrUÓˆ³)E<^¥•ãrØ8›ûv+rr”N¶¶)ìoÛ=“>[eŸé)ÌWhMuµí±Á݋Ի>¯_³k‚Ìj„|&èE•“sø3$‰Øçd$rl‚ÚÞß­A¯ö¶F´A6…;ÐÄÌÁ*3ÂåjƒºAíP95"U)ÊÏèTÏèl£žÕ‰®]‚{è3(-h Hé&WÈ r›ü—Xˆ6e^øZÏÃé E×?‚¶RLcŽÕ·¦çŒµžÈüÇW^ì–àŠtC"L}k]|xrÀ9áˆ2ñ‘ó;´>¯s¤»~Ç{´$´¶ÕcÇÌÀÖH1L*‰­ÄÐäìÃÑFDcN9öLÃý!xôcÏ=Ý k7Žžø[Õ’“÷fCÓ³µ ýÀ†ypäÔΓ›[~û§žuë^½0þIµ2Ý ¸+ÐåßÃ~΀eŒõÁЯì5RîÁ»4m¯™+=d]h[:•»!AYYuM6&o$‡’ŸYE& s¥ŽP{Åé’’ÁŠk·C·Ã©øxêHؾØR–ƒý}¥¥ “#Ã}¬‚ª›¼ÀòŠ<9è½ ñÊd óû¹¬ô43ŒDþAmaHO¾ØÉ¾³v°ç ï—gÊIOy¶œ”ãý bž=GþI­4 Ùä»I’Dî;HÕ+*Qµ„ œ¾jP¾;£æ`Ãe3'¢'>Ú6g´~Ô]S9Á ™•ÁˆÕÉ SQb„ NàÃŽHÄŠp©äÊ› èÄa‹6Uªªš`Š0i£¤'“tl'þå=ÖÆ´ÆãêÌìà;„ŽÀ~î@@L‘”ñû„^k´oá·w‘½þ½ÅÇÙ7¤lh(ädBàT\nµÐãµàäeÍR¹tG.§þ¢bVôq<ÞííÓuCD’øX•bMáCA˜ÍÁ¢ 1kê>E‡€†C$„¹×¯¬†ù%TÒ©’Uˆ¢M„C0’¯Øp=b^©7«“—ö0B÷8Oó‚Fê›”é²TÄy,c¾™ •Û ´éÐI:u‰c‚93ÍJjká6¸Ÿnä7øú: Y¢!rù<-|#cMŠ×LÒÀn}t¼¹¤£»kw}÷‡[Û7T„üÑÊ¥l>wlß.Ç/;Ý=ö|®¥?ýÖŠÅqÅHžëØöçYå"qšê\‰½8‡êô1¥Ì}Û,m±þÈÑ)Ý „…l;×îÙíåÒ–RgCZ©&°zFYdG¿Hĉáì@ŸáÍpÒ甋KÍQ·ÍÏÄhŒÐXc,Šq1m¢îøˆQUW«Tªö¨YUTµ²¯#Ê} œÃ“% :Vµ~´ Ë_×ò¼M(H¾„ÈiÅaÉ(Á–#a)„„PŠšûk¤ ŠÝz3ÕŽ óeF1¡‘G:XñK®›Å•t—ÌL€PXðUÅþìá]¯o)éùé¾ëë¶_ß÷ä;/‚ó-c×Ý‹&×îy~G¤–oËË_}ÏSCgOï?½¦ýððøÊ±]+ÿ>¯òµ#g>×ÑË ³'Ð6æ× ÷`¨O-šÍç Ñ8n4 ðlLšÇP¹QÎÊ¿‡käø€ ÉXR°#S™%<‡‰ògÔÏ’–%+ótQŠ¿^„;€2ÏÁKýYØ4;?H>bXò/jg8…£Üc\–ã¹ËäCÆ>YwÅ”q×wÍ WFãù´Ë±ã½IñJ›øMÂ.~—ÀM 'dÖ8ÆWcœý¹9žÞ‡Æ÷µV=žðË"Ÿ¿Ã]-ªh´!™í¨·½¨7‰0 h§ƒuRbJ"ÝhŸš±e즨3œ‰ìMœòð¿÷_Œ\Š^µ^µÝ”="cA&~)ꑽþ°v,…ýðy·ããø63 –2Kaqi¬Ž®I¬gÖÃ3d]d}´9± ¶G·LÛžèæºùŒ˜±tº:ÝÝÝž#ÜaËA×a÷QÏÉÈ[Ñ·9®ß2bûØ>≎Ì(e):‹©êü c÷G¹ü¢xóY\àËÍ‹*æJÈu •o¾ªp¯ ‹&ES„¦SÙÔPŠK….ã=CX«¼ÔÛãe½Zrþ3 3žßÍCetøîÿÉ®à&Ž3¼»÷Ð-éNÖ[',YgYH‘dK¶±ðÄg¡ l`x9vlLƒ)˜€q ˜ÄÁ! ÆÐִ餯™ÆM)™›"iÉc†Ò¡é Ťi)M€4¸ÓN¦@dúßÉ¥dzÒî¿·zÌÞþß~ÿ÷åºx¬¹.yE4!-š³+¦ä¸Á×c¶i(^1HC‰”59u<Ô–‡òPŸÂºV5²éÖ²Vú?Ëfp8óÞ'¬Í)USX×oeµ0U-ñà+­ç¾z¦ëÐáš9—FßíZÜ‹Ë7«W®ì¯,¯ZØô½µ]ÛJ¿Am^¼ýí± s¬Ù9oe÷нË{šG/tõ5~kÓÆÆôªÄäµY#íÏïß²äÑšÕÀAóá$ü0áDalTSτǙ?ÇÃô*º—éã¶ð›Œ›M½ÖMÅ»¹¬<7!38&ì „] %+420oâÈ…Õ7ÂMPÙ€™T>¡¬S@9#YK™ŽúîN'2¹4ò`á8*‹Š‹¨¢,~ Ø(¢Fú#”i G.GèÖ8,_S Þ. 陉¼ ÉåY¿nŠœÄ›*÷ui©çkšâ,ÆRQñ––”úMä4ÛÄÁ¨¸Pïd.È+R’–(½&8+«ªŠªóÌ_=%f°Ö”ÏNM]Û.ÿ>òòÖ¡s+Ÿ9ýÚ¦þùô+'Iª¨¡wî²ËêÛâÏyòúõSŸÛ}pס»W&{Ÿ_MNl›·ü¯›‡üaÓâdáð½Oñê0ð‘5ŒRî,VTŸ©³j{ÌŸŠ F tAµS*ŸÞc¶ûo°uã#ŒòìqS×Þº¥Ä­Q\‘‡”†(ëcˆ××Ç¡Åõ Z¤ë·ÐrÖ†ü¨A«Lߟ<„³Ô(¬§­P¥€ò®¥³ê´p*HŒ&Éjyã1—Q[—-KÍSý²ê*IÅûyÂWIbFøý*pFr‡VoÑ77ö$(ªËÁ*â§zžôTáî¯-˜ª¬Ò¯Óûu>Åž©Å?ÙÙÍ …J‘­<óxUCç5ªæ×®Þ¹ 5YM¼Ï¤Êgõ´uŽÛ‡Ñ[ôô@»}y¼šÂNäbɩ҈3`•7¥1ƒ‰¨¾*iŒaC…ÕB–±±a’¿ç¶!ŠF˜}“‚}¢ƨbä3‹"ãÀñã 9i Û·jA…¶â¼ÍuÖ N–)ᤓ’Çé匒Rè2ùï1ø°ÑYàÜ:”ç à8ÁÝœnõÕàþùÈSˆRÖðàÑ>1”Ï­ t,ùfm<0í‘÷~þ»åÖ?ñƒzûÔYÇês#/v÷>¼õ¥I¥Ë*_8»ûW›—®ylߪWoÖ'´”¨×!"Ćýö"?qý a¿Ld‡|~ JÏv’º‚œÐ Ð ¨+ª“#^™8¯Ã‡üëq?ØsáP¢N#éϘHhû`ýÇ œÈ_bßÀ©S"´ò¤¤JœYLbÌû›¬]°Š‹G’¼.ÈÞ{gL©Ô‘äÒ´£q=ŽEòÓÅ¥ùiœŸvêÓcv=¨?­i“P^#Ìf‰ÉeÂq‘m©¼ZèWÉÅ~zÀ¼KŠåþýÂ~q¯e¿|B8!þÖsBþ@8+žñ•?.Š_×Åëòmáßâmßm9Æ KÄZ6 ùdÙË› $ÞáuJŽ$În±IöͲ ‹²×´ˆ6Ëz ¶ˆ‚Ùœ%ï«"Û‘ý¾„ò—ÅGU#' ”Ýáà8žófñ•à7dĬZ²$y¤QÆr–ÜPÍŪ¹ÉüO3e~­xÍ.½¸=À¶.f&´2 /èo‚eÊÕ˜ó¾h Õ <1ÀôŠº8Åwþ¿ûNÕjá­¥è/¼RÀ ‹{ pZSØ‘¿ÑÈ»Ps_¶gtL.ZäN=Œ?)ÁkZæ>Ÿ_SöôÕøô…ư?aPÁ•|‘n¹û“óE¡ãX6‘PîOš^ "D_•.£(šNúÔd3j–ÑNy0µ×órøuÏëáÏ=_K§£-áÞÔ¾Š½©‘Ð/S=ÃË èL–\;"tVe4Txƒi-ª³;Ó)5ƒÎ-§+Ô’2è$_zfh¦2èÇB—RŸ):„S…HÙYÉc“!G™=¯x$4;½/u7‡_"‰™E¸9ÔžYŸéÏ g8OÒSÑ„€iäôI>ÚGÒ÷L]¿Žø@­4´rj_º3T†a«Œ5³<]š¾Þ9ukZž¿.¼ÈÚ85·ÆUV4§(›“ߘB¯=EQÉÕûP¹„Ü :íi0ƒù^Ö Dð`%İlbró —$©ãú›£ܽ}êÀ÷~¹KÚX»}¦öî©='Pçû¯5 bCÀj|¦–û͉—jW®VkÿÜ[>Ò0qä?§ïˆúÎ,mt‹Y¬’ ¨ä.èN0«0új«h ½ÀïãÇ·óÛFù â…ÐÞäs ¡0ÃyÐhàÅ04±’HÉQNí²â•ýRÒá°Óþdc#e ¶õ¨> e]0 ÕÙ¿œÀ1–)¸;: º‚" T)“ £È^R^R^n/XgÕÈ’C6€ÙñèÚ9¸gÈ ³Ôv‡@ù¬ä>(±` ìôðjC<ì  €–K@¢Û?ð üÏ=GáŠ)•sÿ[ƒàá9VN@Ô)è•PJn ÖÄ«ØþAåƒÚ¶? Ü@ój¿¾ýÔu¾¼…Ù4iQ÷ÔÎ^®}|öÊׂh ò"?z<„s½ôà8D<‡Šz§^x:¸#øƒì|•ì™ìdÁ4àd¹aÓ°y„áÆLcfsLCrT•DMVL:ˆIv8$³hâp(e|ÂÉ4-±"äE)à?B9êm-M¥øªÒ—A*Z4H¨·Câ`0d2WL&¶ÒÉ s4Åñ\ÇÀ·®ë½ä[ÛÓ•MJeàO7*p4WEFüRoa°p¨À(ž â ž â£jŒ Š‘ÃAÏOžB£d´Ã˜+¨™ÒÔtéÚ à*MµñØ-PtØjDÚ¡U‚‘Æ# ?u‹âÿ¥¡¹ã„¾TÆs)ñŠìj€¶…ëΘzcû ®%¸CÔ¼5‘gUÕážè¯}Ä'\ßòõlGWrÛ½O²Y-â Äú²3áÉÍKn0Ò37”ôÖZr]PIÖºžJx#™ŽÝµŠêåõuLù¹pR­ýþ™^•¨DS¨ù'ÉL…õùêú¢Ù`¶Í0´ÓÚ/´?0—µ›†›–{†{ó qÆ#Æv ›8‹¹™æd›­ŠâºÝ$r!IôÊQ â“&£È:ˆv†%1.+ZKÒb²Á@¨!üޥĩ$Ÿ¤“˜´šHÄéF¯)¡%+T¢š²MzÓ`“¡i/ËJêáÐÏ8Äak–¦„¤ƒ@s’Žh8DH†Èaˆ §ÿ¯è¦Éüs§Tž¹ÞßJá;øÁµ9z3v@Ô¹02€˜¦ÅÕàeÊå<ŸÓ¥üà9:|·¿Ç®ª(±øñ»v 2­3§³}qŸÝ"AR0ÿ°+ž Ð>Y±¹VèY®Öž–ý‚OU[#ßf6Õïk­Yļ–‚ÚüÔ&JzŸÅ°$Mû$Íûx?)êůwš}ƒþÍ{}{ýG}GýÖTf»uÔÊøŠé@oq°ø²áÃdÑ`c^°ž+2KMÀÅ÷iTÀÔ”<ÑŸcDÐ1p€+ôE­¯·x}¾(›laɨiR؆#&A³8Èá¨ËÕ+ìh§Ð#иw ³‚A0`4ÐkÇI­ÒÿÖ­–¶Þ8rÆ¥8 Fè¶ÎãÏÄyü<¾¬°~Ï+hˆPg "Ô€ÕTç¦Ä?Pª¹.™hoR“‰¦Ds‚am`Dœ²ëQ‘x§YR”]…8¥Ì 6…¬ª#EÕ­væØxÔ%L#5Š­2 Á»®d.l' ²Ú(ëq!²… ó NxÅp°÷í:[›-ïÿtdÅË]R×´Ý¿*Ô°eò¥ÚŽ_ØøÞ¾—ïÚ¼Àí¸¾C_Üvñ¿Ÿ¯ÛWÑ‹;åx<¯~«¶¶ã‘ûïß=öÖÏ¿ñe_“GÉy¬vo@¥.F;êáÉnR«³w&05_½¯ ø6Or?OåÝð‚îÆÇn%좤^¢ÕÙ:)˜(y1èâa’ ÁÕW®4eƒÕ W'\m0cZÛ©X,ÝN§ƒšêÌÉò" ”·n‘e°$»¨áýÏÚ¹Ö¬&êåÁîCÝ¿ížì6¸»Çƒz±niÈ8«JbPŽæ%1-GKb‡¥%Ñ"+nIe„#%+Il—ˆ€‹‰ííÿ%¼Úcâ8ÎøÌì=vnoo9ngYàvßË•*Q,Y-~Qì¤ ‘’HVZ•J­ã´–ÂqjÙµjYÄMc:³‡Xʱ;ßîÞ`¾ï÷**  ºÚÚòr—KLä˜ðê&1ûÍæ¤9eúÌq¤;eRçöΉNNï„q³¡+»=‹²#k{¯âêÒô %ƒœ40è’A>·Òè«@÷])^=Õ®l»c@çàAð_Oó¯¡}”ª Ak\ò¦DPCHþ-²9¡æ‡ÝG+òoÎS}‚:è&R#÷üÁÎ1(R[ßÌË ,5»cg<³èmŒ3ê©Y:@''Þuv® îèNªA5zÃ}|LC†‰cšl˜jLƒF•ÓÂF•¦DÍc±©Qy6%ª‡}T5…~~ˆŸâ¹9¾‹ßÎsOñü$Ïñö6Þ@~|î‹sì³´˜u*\Ы÷CÆ”Á£ËØnpƤXS¡piš‚~`pž«]‚.tã_³¯÷;<°utSÝ-/áSVϼäÖl‡hÎõ^¡;ÔŽFñÃâÛ"ÚàwÁ^tXÜG6j|'p1È?  ì騣ÛÕˆCßDCè¨ó":îœ ž/Ö_lÿkð£LP.‚œˆ|È›yÉŒ€Sð„øç _D]:@Þâ˜P\âÐZ…MÂÁÙÁlH(R‹l@õÎj§«ãuøkôš3†Æ£«ÿ®‚Iøt™» nÂÛðóÀíâ;A­f³’}/_ɼœNû+8†2+s•kJA)A"\GU û0ŸNhÉæ$b£žß=±47ÀÄζò9ͱ}A¿æcŠ`˜VLKf®­EËy=Ír"Ó’FUs¶Ik†˜b0Bsãè’ó(ÉFÉ̶y;hËzš‚¿_ìß‘˜ð{üþhT=…sÍÍ©T²¥©)NœJbEñù¼Iäås?õˆ„Xž!/ì÷Bï8Zå;Á®  ÂÑ Ž£ÿ85VÈUÿË[!—ÍB&&6`óÂäÎ_åÈšŽ·`ŽÚœ^¨R7WýÈ"@ À`¾gÀE¼DÕ¥U*”ùœ´ð*\Ðê±è^Ñ_H#b]õsÒ{tÁlÅ@¢z4AÕ„-K.º)yPkÛw«¾¶ÍZ]Ûîééî©nòq'Ј£ÁÖ€±3ãsSc’íH¢ )/Ÿm@ïœq¯&ÎHìjâ4] ”D•«›E.êG`4ªPP¸y7 ÿ/ý„W‚•ì½î=ù}~Ô§ÿfkþpS}IÃl —ºüÛ‹`´ºÎª‰áÈ^˜~H[ž‰Á;5ïÜ=nφwScšÄ8‘…š]¿Ä¹˜¸ÀBNßloÉ.(=‘ªTª¨ж®\ ¨KSïù;Š:Œ:š$¨:æVôm´ ëÇõ“ú½šãð'N½Ø×øz²Q^â 3ºR ·˜˜&UzL8€ÿ(K¨¼ q<…Ý.4ŽÞs¬èÿ g‚pG%àÞ ¸£1z{ŒbÁsLO3“ÏBÙ§=,”1-¤ZÎXš¶JóràúùFÏ+Æž{ŸÕo‰—ºqë[»¶êRqæû;~ùp¿öÅø*}÷ ‹Zq¸Ü98sjs¬4R··ÀE¾;tW¼ä\a(^Õ`*”-÷¿Ü[¬n¼îÄÏZñ1øsëCü7|ÞÄÁ †ÅGÖ®7’NÌEI'çÃ^¢(\5HÓ«fФظAm ­™M™à؇ª{È08ŠHŽƒcä$xœÈŒfþ \™«ÊÇx2sK¹o¨S™»àKåß$þ0\§¬µ¶Áne‹õ´r@ý¿O.ãËä¾FDÊ‚aê1­Ì0ë\¡šÎU’› —A˜¥0°  Š1£‡ˆ!X!¶ Eÿv¥LU$ð<„$SAsÈ_bš²Äܘi07fr¬¯UÖ×*YC„LٌȲIúªJž‚A€H+ãesûQ,o‡u‰HŽÄI”ÎÎ…ish1}ŽáŽc zÒHš²›#µ68i¨§á‰ôT¥K"ì+J ƒ˜p¤ÎÕuªn\0Yp¸VMõ¾zµ”Ë)nY»«ï²´þŒy»ÖB¯oÝ:Rh3 Ïv[ì—r4×õ0zN ²*§a+°åMàòS`›¼<-’OÂ7áyùCø%”ÿ… K Ý€æÀ:š{ãl¥ÜŠèÿp–²9;×ÇèP9å6+ÏÌ/š»Œ©6õS¬¼â„d[ŽÊ6’Jé¡ÚÔ¦_9SdÓ¯™,,_œØÈ ßç|Fúî›*ÐÃÑ¡Ê.q@UNY‚Q¿û¹61𠛥e3ßÓ›è`±Ajni®hön˜ñsâýQ¹wÔ³fæ÷_ Îo;jJ€ÜÜy€æÎb ÓΊcòþ““’g?<è?ä÷´óÁàJS>çbœÅ!ÀIœÎÎá¼Üº Öֽ߲©@áœ$è 1 ëÊûv¸ ¤‰ïÖFi ú.+ܬ熻 ÔBñ¢DY¢$!‡kq-ŒøiõÒJ k¡ŠèIæÿËwÕÇ6qžñ÷ymÇçøëlljã³ïlßù|ÎÅg'þ1!9VHCZE¢x±¦T|$„À ‘´”ŠÐR:(ËD& Œ-жn«Ê>¤Ñ2‰Mê>ºÖƒj‘¦j‹Ù{—¤Òªj²ý¼wgûd¿Ïóûò&P•Ñ«G»Ï7K&&Êâ¢QX« ¹*²Y.ZKlnq(x±´½ôqéo¥ÿ0ù¯ËGl¸8ùÙèFÐúJ¿+ý²´@<ö«´ŽŒ•®—~xq/ÔÀBè>»—P’ÆØFY÷×µðüU¤¿úJ>›T¶ø™ÁÀ7¥~åHÀ¼ÍwE¸&Ýcî>ʪc´"‰ÑÆØ|)¥tÅž‹õ+CŠõ6 h ü¾úc“àÂûUïÇîJ e•J”C£ÒpŒ9Ì¢õ†y ÕÖ¥¾Çi!‡@#m‚aÝ À€GùKVƒF=Ù‹Š2>"ƈ0ëI$`ÓñÉÌôˆ>W0DŸáÓË¿9xïçu ³O×]²»#½ ï(mâˆ>Ïã ëµ£¶ ÛÏÜq,./c¨óh›GCE©Ï´ Â‹D4­Æ‡Nó0”9`9ê…­°¢×¨Ÿ9ÿŒ,F§Š¾†å”á¨qßQ“T¥D;NQšéGCȈž¦(»AŽ4qž¤#í yRÕcò´Js’T Kþ&Ú²c§³c{kìËô!Ùõb਩¥HOÍ`Iµˆ¡h@´ÚÊm¸Ìø(Ë8o$A‹Ÿ€ÇIŠè"§á 6Aþc#‹…ªvT&€w“B\m“öÔTC³](˜4* ‚æ6qvk>‡ZCN×<ÞÞâÑ}¥Û¥¿öìØ>û€Xx‰`oûå¾ý6^º¾y䉯;ÏŸ±…LÏ\|&¿p507!‡KJï~VÚküû §JçKW.ŒŽ~šþyfh›†@žä·µÊ`¬^|ÚØFõቀû%ñ+ah¾›À>®Jé °DÅèbÔ }¸OØ;ðfnshkäùè> Kœ…³Ñ+âõÄ#Á[Ú û…ݱã›pŸÎ%&wSv7ª?vKeuy%ŸêžK–×P8/Ç8ÕDqŒ#ÌWrL Ì«¸6* ƒ0ŽCØ\Ó¬5·Jû¹fڼ̼Êl8h>iÆfÄŒ2pHuÖKÁ`;#)wXËYmQoÏ¢ð¹0n'¦‡/Ñ9Psý¹;9C.CéȦô} tdS‘J¯Žl¯~Ñ«#ÛûzvõU=Í™_Öta`ª°I–5T'gPœEõ¬y*iëÂ@RÖRRµŸ.Î%"p7ú}³H¡M;Z—òi¸OÔ±<MðÉ4Ô±¤(‘Ú4â…T¨> hn²†‡a€LÕ€n¹®¢(ÉA6-=¼PÑ(i9©BLrøðݘ¢D"aF‰Ý’åptÈÿ?J0k¹ êgIp‚iméµR6²³t@\šÕÉA7ïð»ï~ëÔYð­Ú×÷Ÿž€å­['^̯ÁÛ1@iëÿRDË÷¶ìœK;ötÚð«0ö®â»ÐУ?M„'æájµûH-8Á‰­ä4J(n’Û¡[\ù X¤ÞÉÍËù Œ±Ç×SÝãïaÊLv“ÕÜÈ­ƒöAÇVg?ÛÏõ'ûS£Ôëˆ}ıÛ9"ÇÒ´Ûž¶gìÙ`:˜ f‰…Æ cˆ qñx"Ý Í¸Å˜ªN±).^Y]b_RÓa]n_A//—ƒp˜IsY&×áë¨îð¯¬ïNwgº³Ý¹®‡Áj{¬Lœ·†òóã©ü€{À3*3K~;5–¼!ݬ¹-ßÈ?ÌW|•šÇ >Ìœƒ÷Ã.¸†& mª={¼.Àû8†e¯µ+™êã„<šlŽ ›Í!ÛjFÑ¢/eÀP`Ry <"Ò¦.ΪÊ{äÄ€”’"‚gT®Ã"Ô‹À73î…‚¼‰åÀTqšˆØô@cRžñºniÑ€2Õ²CˈþdŠŒt‘¤Bí¨ô¦â,µæ„”Ù#‰ÖZKÅš¨yH1§Èiy–FV[­£‰Ä9ñš¨›È•,Óf^ÖåL/3ž…L?™ý1¤–5Ö^û³ôÙXXY¢±hÒSˆÍês6SÎÆtÊ©ÛÕàâÌGʼdä«X¬kž–1"efÞ•fñ̘ÇDA³™\º^ãä\ƒálÔ]ï^»Wnþè'/·=¸>?ýí¯š£Qç¥õ;5äc¥Ó¯,ýã÷×o›Wå—G$œüÚ®§šÓm;{7¼úÔñûS ›„_>´jwW}o-ûöàþŽÃ¿ÍVsImò›‰7:¯{£OÕ|tá®`»ÖáuÁu,• ·„ÛÃÇLG™1ÓÆŒ!Èš¤Ã‹Æž¼ÙÇ#ÓN*‰ã«ω ËwLþöq8‡‹t »!¸ ~îêÕKÀ®8²xˆ 王Àw)ßMœ]Z«úsíÏÞ+J¾úOánnV \HžO]”Ψwhr<ýKé×äuž&'ÈÓÔ8=‘8-’?¥EŽ 'Äc*¹=±-¹›Ø<¤’›ÅMÉ~u˜ÚN“[è³%øl¸• =µl"Ÿ¡HE­õÄ×±'¤Nh‹±–HB©:êVõªJNRèGy,¬*AQ»Å€Hw Ÿ(‡¡ŽÓL.Œ#þ†ø¹Ë—/ô1»¶ëÊ^#ŒE¼ 3ðæ\2+禎xQ‘¦†¦¡ŠC7@R*àš˜„Ÿ’¹´YNSìÝ$H~戞xLœ ñ–“ðý‰3‰Ù©$¶&F‡Dbÿ|JQßQ_x=…šÇPúöÐ!,åGx!ÛÚç”R„*‚lÑ-Ø6v=|ùŽ&›]¨å³Á”àF<Á%¦nMñ.ÃÄ\h¯MÅÜ C«×&#îýÔÛ‚>$(nO &dÂb¤:гF~°N¯æM}ž0ùô«ðîgëeОݻ– ‘ôµ2|÷ñãÍñ\žÔu¶Üµäù{Dw—:kl ¨É ×é1Xn Û®½)Ô F< «Ï‹.nâÖ‘ NÀ9³a&݆_ˆJ1ÍRtˆ ²t0èP.-„S17ß2*D†­Âùš3pönÁ“elÍ^϶ˆAö4KT‘éᬳ¤‚Üm™•e”+UÇ©5t·N éA¦ JƒÎ@e;µ~‘‘Fä–î!öP{è=Á½ÜþÐ~i¯<–Ù«|Ï>Lüˆy=óšýšs´òú8÷fìÍÔqé]ù-ëmû-ç}f‚à&¤÷åñÌDçiû,}–ù88-s~ïÜaîp÷:ï(ëGìag¤r”%êò‹Ù¹ï–ˆaz˜a}ì†Ü:«Ï&Zò&{£è§û™Í\€ ± ´YÑîÎrÚåØÅªïÄ„½²Ãf.ÚÞYY`hpŒk ¨ìaݯô •¾oXPé÷°™ òÁ ô]Ù,ƒQ„˜—c–]-!¿Å̲éVê²;½0zVæ‚ÊôÂ/î0´â8M†wËR&“eƒADGBÎÀ…ŒÝÉ0šcÇÇ®P4®dœ üX‰ ¦e¹®€á\0È04»âçÔÉ |fzµ j1½þä%§êTUŽUOW¾UÙZõ?ÌTf+Låóû NþHâ.à &¯<Î õ‡®†¡Ó½+¦ñç϶Aûrè‹iþFŠŸ»í‡”âÜ͹ğÚä µÉ{xÂŒ=Ââÿ†ñÑ‘æÃ+xÐüJÄè}>aÿ‡Í¹6hܲĎF Ї\Jàþ (”´@B[Äq‘ȶ<øHÆLÓh,.rš¯Ñcµ¯eãÅùW­ù?Ìÿ±kþ;¥P|í ðeªVïÜuK).–NÇ 8ßU¯–ðžNÑx lTó?¼{1ðí{?#ž;4t]w´ü9?²kË#Ö!0\*,=8—Ã?ÙIZLا:‚aä¯ Õ@Ï¢¢D :%C¦ÏQ½Ë-ÁÍQ+FºŽxš¡¬_¨}™áï=œßiÖè{±ï«¤[ðŒޏ6wù¦Wôš&*Œ7rùêloô%m´øRé„v< œâÇÕqm<ª4n_Ì_Ô/êSOøËòeå÷RóSáSå7ÛÌ6¯šÒU´Ê¶ýï޲B]f:ÅDZk*M§yµIü®v—^¶ÚÄêb+ÔRl>W5š}Òj“âeÐUVOª'ËÄ"!5½BÔ(ãQL-²Ž¶B–(‰A[!uaè#¸8¡M¸¯A}eÅ%U±y-ÊkB%¡Añ´LI ü³dA½²KB&ÓBJNúV{¹\/i<¯R€ìœ‚m•bÇÅ.«QŒð ¹õ:, \J§)ŠdF QÄŒ˜ pÀ7ÁV0 ΀K`Ì‚ ˜Æ¿ò"k”g”mJ@Y‚iïi¸6ÿvÊk¾s¬ÛC0 A »ýÎÒB>IáE¤þ/|#ð† ‹þî ¡v®œ²AA³W`ÖA{»º­¸ÃÞÚDÙj`ó)‹P½;ó ¿_ö{0 ¹#Ïк÷BÝ_´uÅ'óŠÍÐ/”rVæ€z q,Ã&/¦cÓñ3¹8ßÈ5òeü‚?¡eÆ2ÇÁ*~ÂF†Û„D¼-¡§2™­ØÊ|ïö‡ö&Æ2ÇùãÂñÄñö‰LWøa&Qi¯dε¿ß&ç3¶|Òò—ŒvŠŸf H3® ÂpLk£DªÕ¤aHmiµÅÔ@d®Ò_p8hyDã ¸K¨±@:!d !S¹°Œ ‡CTJÖþ3O%\¬Ø2†^Xn[ F-‡Hl c×l%ù®§» Ôå´x&nÅÇâñJül\ˆ/7ßOÓ¢i”WÊFhŒb“º®4­Úè1Ë®SAv~°b®ñH‰Ô®kÍg¾+Ä ¤– ;““DžÂ´GÛ(NP¤¡'•¦°Dy!54¡/K&ÍQš¸”Úè(ôEJÓòÿ°¤ÊGøÏMM‡v«‹ÁØŽäêU¨Õ=–~Ü#ý¡ôè&܌Ŗ|°&µçÉÕÕê»_ÈUü5Ò{¨«Õ©ëÉdÛê6üó©`²‘fYBì¯!Ë<˜Ì+¨:º¿Oy›º{ݽr?÷¸û4;WwM\t/Ê¢ŽGÐ<â<Ä>%Œ{¿ËN ÞÓìI¡â½ˆ.:Y÷ZÀ8ê|n²cÞÃñ.hQÑéþ#Ê'F0*bq±¬¬Ãéjõx¨ÚVHÑ¡ñÞâÏñ,ß”ö–¼£^ÆëéÒd,¿êhT¼Ó‘cehŠ#+ÛÕƒ¨¼W–ip·¯Òø®å{ o€†w6e@HÄÙ‘oÈ7hÐ ^%ðóH†P@ç¹â3 k.ûÌZPp¤+ß`"9¡¡iõ²o}~Š$+s¹ˆõðs¸:òí'³þX~ÈO¼ÃWª³Lï{P=JƹcH@',Õ1D†åb ‘>õ+M ¥^VŽ©10†rèÖžœÌhÌSaØ s–!çÌÌrü%ŒÇÈ8!çâî|?òñ~{ñ“Åí°XàYSàñÈ–oõßûbV‹vvÓ…âˆ'⇃ŒWñBõŽV xôß??·UŸ!ŒíçŒÕf‰çE2.bð”bÉ#ŒR‚»“K §_ R¨'.àÿF{{û‰'qyð䢬­¤Ø|Ç@v[ë„•¦(Å’msµÞìÑê){¢¤Q¦ïÖ¥¹ÌAšíM.Ó ¡ìIPëë+‚MôzµÖ©©hÆrÝ”@,µFÞðÕÆòÙ®@C Áïñ54P(ëñÓñ¸‡Ò) ^Ù.2ðã¶ü¦ƒ/…6üáïOì,é1’ŽééKç^ÙTœ·,ù‹‡; øähÿžÞá™g=?8Ú×Ùÿ½=ms‡£Ñd!ÕÕݱçì†ðcÆ©ê“}B]±÷õþŸàr±19n„Ê_{¸v—Yä^E ¨ \«üË!ŽV°Lk™óIHuÒêU!ïÙìC¢iF‡ì Zç_GçK’@,½Tgy|–Ó|~Ô¬‹®È>"@÷ÏmcÙfvÞ6–äßCÑ‚ÜZW-@¯€çè3ôÙÇÅt¤Báw«„f/uçÁ<½‡‹\£C’Ó=vC€Â_¢W7×ï&ý9ªç¦åþ•ÿð·0 M_]9¯Åžg^`O3³ì¯˜w€€ _¼î¿TWl×ïî|ïüë|>Û;öÙw8I.ŽCI ÚKJX:–¬!4)ucj÷G§Æ¡BkÕ #†P Óª‚JÝ* $Õ¦º+¿Æˆ”ýPGÑÙÄ´­ÈRªAU‰eìûžCQmݽ÷îü|ï½ûüzkñ`g¸Êƒ„¨†9’e ªäyÐô“ÞqÛ£|×x<Š·×;ìó E8MxyäU¼†·ª%ﬗxýçÖ´zó©ß>ÁˆDÉü ˆ³)³‘Ž´û«²wËÿÅw5ê"ï&µ7pµ+C‘°Û“ •LGÜÑÒŨ*9‰’*»vàã¶1ÀL I[4-!KSËý~ º‹˜Ä«÷þþßÙÿ^ï»›|F8Ö ã@zùw²›ÙÖÚZÇ}>ýÙîü¸¸jæ­õÕJrx¡ná¯,¿üÁÄo¢AðÈu€¡npß=% øpÕ¢‡bBôPŒˆÌD-ås’¼9lr&,ÉŠ'SÅŸ ¹~¨\9KE_ƃă|[¹öóe”™ó!j’Êèö†t JÒ·Wå}ÊÁÅ…>GŸ¸‘ DbäyÇGÍÉècÖ˜Cÿp8Wâ.¼)ÜJæÃùØŽðHlŸúƒÀ˜,üS|œ;™¾Æè1ž5žs½`¼bŒ£qã™&ܵR`©g­t†ô¥ÚÚX\ïL@7·Ðb«–hÄ Þ@nÓcЀ¡†òZQ;©ñ mLã´Ûõ½"Œõt]S -ÏuµŠM;+ú)ca$Ù—~ ƒ8–©<*L‘òP&«k-AZšª•ê d pª#)78™0âŠ$æÚ(Â߀ ’Y!3Á”CÍ6ÂH‡'X(¦•´bûý~¨!w4å'ˆ(„#ô6íM˜ºÂïˆ0uÿcÖ*WÎQ6ËÜn& 4A‚(ªr¹ƒ5Øqf¦ôÐŒõP9â ¦N|e•'Jô!v …°B 2AxDòÞN <}©Q&ÖR8ƒ‰8Ì“Va¶{:[(d^’åDü«nÍÌRÏÏå¬GØXa¤îvD ç"y”~Ì;"F bZ,«Ù±l‚ŽÊÕÑÝ"%¨E$ÄêZØå¾†¦–¨qžÕ†ªžo®&˜wŠÄ)y¡¯‹£Üëâ^Ï>eþî½ð™ÀŸ¹O|ו;Üø€š'yif7êü\öÍp:âýÇ;)ODàI÷ ç:®ËÙ“ØÈmtnáF¸ÑÀhäPà¸ó¸kJ:ãœp]âþÉÍyÒ, ï,á ´¤k7‹6ADòšDÍZˆ5 fÕ¡ÐÎÐxèfH…¢0¼ÁY0FÔ-®ÙëÕ,]ãg¢˜¾rUÒê¢YŸ†_Ôvj4^» %Ü,I\³t@º)ñŠdK0iBš“Dé„Ð(Åßh«Í²-÷Ê<’ÙùyËt$NXK¹#Þ±˜\` °a¡@cK!Er¾Bf„BÊñÃ+‚¬ýb²6ÝÌ‚ó€õÐíkµµ¡Bw LŠs\amè‡%òiDàiîdÖc§³^8$ê8uYR)¨FœŠVZÑʽŖ«ÒrUZNÖ²eg6¤D²ßõÂÁ¤à+)}pp0 VÑ´²jÑÁTê`)Ü ä@¼Ž·mÛûôžt"tåÍwovöðÅ…½øç%²uEßnnõÕ—^ÚúÝàèß0þä6&¿?±j ¦ÍÞy¨!þÇëÈâ¤Ev§Ò̯Ò6µ´M‰µ°"‹X’ë±DÛX…µþÔV)Ae•QŸ™”,R{r‚'¹¤šT¼ !_½o GO©¢„2íå’RjŸ)+åŠ)•hœ>¯\¤ßótãûÀ–¦‘õAÐÕÖëÅø'©3"b‘2³\͆qÍv36²ëоÎòµ,§XÐ z‚ÇÏÌÐÜJéøØ~ãPèP-ßÉwzÖGöð{<ŽÃΤwšcâ—Æo+oû'ÒNEj²¸˜$OÆ¥ƒKðdœLñ’HÆÇ㟿&U…­^+Í õª_”ˆK€Oá'O€ ï÷ù)Ü`MaÅöÖÕcÕçWú|¸†‚õtþÿLW}lç¿×gŸã‹?ÎqÎÎ%ö%w¶ç;ñù# øòAFBx¡­4µÓÇlâ5+ûê&5Ö*:A§‚4IÛd t£dST©“RÐþàŸ‰–U¨ÚdB]…¦­ {ž×N…ã{ßçž÷Ã÷^~¿ç÷< iÚÖûB¡Þ+)Ú~INW!þ¢³ì\sÞsrÎ@ïû,ÇZëÔ|”S›]ZÙC÷ùü£ ¨PÄh«2\Ø‚Ê^Õõù#jKDõÇ$&êS$ÒP”.H’Ü>@Ú@‹¬Ü2º»K€Ö€4cª'LPùµ ´Ë’ºûÐÖƒîØhàÚµ£×—^9:˜îh(†B‘„!=f÷m]^îìU”ØøIÓñ½Ão|pj\Ëuèòw½ÞÔ·ïîø1»¶'Ø¿CN>ļÀcWŒ×=þ™_EÎgXFJ¦Ó=§™˜.ÁüEØ\ÈN—³§"åÒŠyÅr¶õGâŠþóÝg÷¬Lþdú\ë9ñüôªù–¥ÖZ?J4¹VºWzXzRj †[Ý— •,¿k*f mŒŸÍÈÅ6&0æq .§ÃÞÌÛl^¯ÏÖ´¬ºú쓚tHŇÏ^ÀÞhö4.ªï©wTV]%ï^?_†b ¦œë¹(¿'ß‘Y¹±†ö°D†¹†X-’¢Þ¢®b/R§8ã#¾UÒd8š lФsçÇÈØ*›2ì"ß 3å€)pÛô7†ZM1Ã0ÄsÖÀr ·×5õ›¥ë€6ÏL±I#$$Ébr%y1É&ETÖ¤ÉÔó vy–Ìâ©ÀS0þZ|Ôø¤†SÀxbð Ð¬Š‘E_k0½#Ó±rl-v/fŽ9q& }YC²ƒñ/á"v*\J–ŒÒ%xÛ–.•šíé’såí 2!ࢉTØO\þ²ÿ.„ùÕg_n\ç·cJà§Ïè_5Ý6¼ç ¤J²3¬i†% +°&_b =M{ؕşÇ›xFö•ã¥÷É÷¡¢ã¯¾!ÆãO‘Å7+[ÔØŒW ñ¥§ô&^Á¸_AÖ¥¬°Ùƒ­ÏQ ÂfTœ SAjwåOeèCåËMHÆâèQ?UÁSA¹!©…HƒÁ¾”ig&ç÷(ºÔÞ*KDíO ¤Ò)–‰LGjOäˆ:+i¨Cb&õ©03J af—¥ 13ڔČφɸ8!‘ÃÑ9‰™klƒémC̾T1L&‹zÆ0…!~ï6Kd߉9Ô} Ììi“ªÂpo§¡,ÿúӄḳ̌È-QI3ø„ØÔO>p¸ê¡uÓ1ÄÙzƒÀ úÓÕ¨8Ì8[éÁrJOC•ÉÒU¤&PÙÒÓÑáž¿ƒ{}öøÆ¥³ ‰;YκâßË­ÿvü½!9)•?Þ5¿øê¯ÿ÷çO6»uë‹éxž´_OÏì;¹g`û?}ÉÁ—o×þ0¾ð²¿û­c?[7,œ­5È[¸½åå¾HÞç[Í¬Åæ(\zé—sýQTGm/…R¡®¦Ÿž>óîÜhåÌÅã£_ýpਚTv¿¶7í÷›Aì¥C—1­44±=g aÞÍSäEïÅ ÞˆP¤QF€ñР•èDˆŠTÉ:"rZjD6Ûí¦Ã2ÝCÖDÜC[}ößzÁxZÃm‡a`<6\TŒé~êk„‰õÀ¥Âƒ+ʤAp]ºaƒµz†‰ºÛ{ÍVu_Ö€ ¶(u MV…õû…õxݳ…áús5áÑ´ ©Ó~1š†MqKw”§²ËS©å©ó"u‰Ô%R—(æ²D¦n™ºeê–á4Oh¬ã‹€ñÕMÓ´\¶¡ÖT¬ö&[p (7Ü”Wâ6£/gôè|nòe—êŠ,çª9ó•ÜZî^Žsd&·+£ËÈ‘p“ØÝá^e]†»Sëîˆ;ùî¡Ø%wwDVY§‘èÒ£‰‘t‡>NÂÑ CO é”Û-ðQ±Uyr…'.¾Ì_äïòfC”ª1²’i3Ú‚VÖÌËZU3]Ñ(•¶¦ÝÓÌÚBö2T…ÂSL$1£Üª÷ ÇÈD8˰;Ÿ§!¾|*|AÉÒÄ©mɈµ)hmGYÒRa^ª0óBW¥uiˆíohtDš…œ•–„àíÏfvœP)’©Å×Gö—Û¼N>ilïn1úy64žL½ZlÉOlîêò‰®P°¥ÏI<–7·NžÙs䛯ï·ÿ4%E‰F„ýdüí}ééméD"¤(^>w„ÝU¯HLJ¡±_š™NÓ uÆÜbv„³ÇAáîED²,"²e¯ÈÚ@?h$ã!¾ «?ãã8Ûæwâ=ŸÕt{¸C·û×)Û«À€ÖiyQ~ ä·s8¼ÀŽf°˜‰ßÄ ¸NÎ Yà}êóƒz «·@ ˆ™ñuÄØaÊ™¶¸Omr²aŒŒÔ #Ír‡ Ž0Ü%΄?Ê0a¹ÓêÅã=5$\i³)]ʇ aï |À“Õù "ñ)Às³N!¥ë9ÔkKxö…yZ‡4¨¨*dA)+Uå’òD±„•Åd`£ \ö÷§iŸ¬÷Z²Þw©´7`â-v:º;<@‹h`$Ü!ÛvoŽ’g˜N»Õëá«6bË£_Ó±3\ýŽÝî8шçEô3ƒéªHfD² –ŪxI|"ZÄk]×~C逽‰áݬ§§ »p4¡Az$øÔçI°ÞßH7AG¼_ãšÂ:ºƒëîž¡¡žžá¡R#Ûcc‰6›µ#(ÅœÄgy†{z†¶å­ð‘<98|˜|ë\o8àRÊ€7Øí€Ú,{§åãA¼´ ÛlnÚÚ‚ü!?¶ÙÿIш†¯‡øL4"àn¦0çh¸OÐèðc¸OìDùÄN”O p0¶ ºâ™#|kPÑÂtëë#ŒH÷dh¬Ïd™HÀN͸a³;(wØÏ®òÄÿøf¼![ñµµ5LTžøÚ‡€yPxñõR“"ê–+Ê›<œ@àû–í_m®Úßq]p¿ã¹ð¶«.¶më óR´t-’–LJ²%Ñm…–£Û´¬Ø­¨Ì±ÓXJ¼Ä²£nŒÁC¬[ìk;$E½C€=Þ^úЇtÛçµéæ>t3‚"O `†í¡°"kšd †ì]ªìœ#ÉqÐ"yxî½Gü9çû¾“¼ZzÇï/EK±sÊ9õ\ò%å¼z>ù¦Øu7q?)nu}'xÃuC¾#ޑ﫟öHeµ)'§ŒriN¾àÿ–,åÄÅ2†s¥)6¥øz•:;­,ÂVäÛÊ?Ïsêñäõ®ëþ¿ú=z—¦$ãÉä1ñ¨ì ¨r¨;Æãr"˜ôžqÕÝg< eI] y£r<žHžÝí¢ÍMF°¨ ¦¸üiÞÑ%ÎøEH`¿7šæþºÍMœ¸ ^úmªB”SöZÇË8öÏ×€÷sáÂ&ô•«Ø*m¦° Ró=A² ƒÚLÝ {ÜÄ;$—DD™@)€'µ$·N]­‡ÓÏÕÁD'elX§=1œ¶z½^Ÿ/DŠñb¥&CôÐ[¬X€ƒ»O@BaBˆp/8ÆP²ŽÞË âSnÐ|éq\8ŒÇ,#šbT,xk^º©eñx‘Ñ¢,Îuí)ÙV†i±Ô/·õ=ýîÒ‘{ÊsxvŽ”¦'˜þv÷úä¢Î}Q_Ó7ômý-˜èãVÂwbY o:NwWB‰ð,Ü’Ïë˜ÙÍÛa8‘Ž==±ÍÙ"gk|ƒoó·øîáokH§%¾Ê3Oh†hG,ó4³t2ãbtb¾Y.gcÁd$vHeªçÊ+ËSqb—óæ|Kû‹xó®Ÿ +®ßµYDoP¯Ðpð[é*}Zµ^Íwð>?z¿q>C³2…â\gÖ\gzœœ5W™¯Ð¼ %J…¥R ã¿U;ëª~©v€ñ™ŹU?†©fhy†–gŠð:Š .ƒëß;\WìÇÀEjapjQ¤qcUŠ¡R Õ@¤Fžˆr÷ñõV ccÀõŸN5Äöø#ÈQˆchÑÜØ±ã(ߌù¥ºƒsruvª~¾þzÝU_öÎ"C£ß̨;ìi WWA¯}¾‡[‡Ð0é¾h¶SŽï:ß —ÙÏüÑ>o©¾ì‹æUÊxÕpd¨…É/S¬ÐU…®*UxŽO(ù ãl›@t[Ý ÿ Ñbñl9ÕNñ­VgÛ…£î¸sÚázæ›å2‚2dïN÷ÂÒÙ_ s?ŽÁžƒ=ÿøãwc‘hZ¯ÖÖèsú'|·Ÿj®-HñöJ™n¶Ý€–Ȱ‘]ñѵÁ¢•(€á«VbþÄ j%t芮¥2V"¿ëê¾–ªX‰90œgSõt­²”¨ÏJV±æ”¬C’àš_^Á34ÊýŸ×íñÍÏòÝßÐõ˜¢šyƒm;†hì2Û‘‹V6cNå‹l£¸S‹èÓj+³ZMÖkâVm»& 5¥&Ö ®Ö&jkg»âóÀY¯GvÙú÷·2ØLÕh«bWõQë4sòØWgoC‘ãV¦_Œ$¼\a¿ßêt\ƒ&—»‡RÃ&ègAy08t°ã‚†+Ã6W€/¨áú?mW›KÒÔwùô'8²ïöèÇžÒ­ãlq½çðׯ—/õ¾xeá¹Í­Û?ùLs&4= ûÝ}éeûëUQì=2×,TKÏÀè©IûÌáha¡9]‹‘ÆMË,œï­ËÃ#ëç^]X¨¹Ô|yÙР=Ó•”ºÈ¾¿‘uìãLsz6`¥Óà+8ñÑb³÷ùÉ>Óì›®³Þhëa.®’‹ûHf’åIè”d-…Å«TÜ´$‚$‰ð@"<4—i1Ð8Ö¹Ö'0>$TãïÎ0Nׄ8-ŽS 8…ˆ[ a‘p¶:ÙjI42Z g!¶ùq…%ô‹f¤«àtáýŽuÿ Q}ö!1esÌ Kr9àÄ{÷È"OKãø¡ €àQc6^ÈiXÅøj¼õÙt…V|Ù”ˆ=%B ‰PCÒDtiäÒ$tiš=!ÄifœqŒÓƒ¢×êÀ……`‚3,Ëžx"J[ªtŸssðX¨LK¥V3Õç±[²±þóö¢½foØÛ¶ç°›9doÁÕŽíݱoÙâŽÍÖÀ±g»â’f%ä]—쨃–•0O JV"x"·)'›*¤G*ùDa¶_HÓ›©”,ýºfú¶%¶#1YÚ®J¿•ÜÒ®ø¾ÓgÇÍ‘¤µh­Y–{ËÚ¶v,—`)–h!wAÁ[kPê@ÛTåP㟷ÎUŠ]*í—2rO$êòº‡¢.½Ÿy¼O¬SÆPÅ«›ð —Ìd°’¿PÀm-yÐùDŒ³…ýpá%C  G›Ó!gÜï®Ô^y9ÄB Ïäd§ï__Xž¹ÔüöJ2 fzX>Å^ymó»Íøª‡J›_gK?>Ã:´?r½u& q‘·+­d ):Nr®ÕÓ)cn¬Dà ¡ÓMÓÜúP†„3RþÞ¤ÄÝÕÉÓ.Çy1\܇9s‡)ãÂ\!§|s“@ÓíNpžL`barÑŸ@`çXÏV/ûéÿÈ.ûØ6Ê;Žßïî|gŸ_î|~ÉùìÜKür¶Ï‰;I놑ƒhÚ„UI[ÓP*ÐhGw´@c1ZèÆ”JL0TÔVÚ@ˆ‰¥­Ö‘v+ËFÖQ•Ðn꘺?¶ýºeà!¡þ±šìyÎvÙ´HwÏ“{ìG¿»ûøûû~Ã? ÿ.¸Z¯ºño¬sݾ?t^pâ¯FYÕ*ôÐêÂî˜ çCdÒRaÐÙ¬F¤ñK7‘ÿF(ÒpŸGèqz’>LŸ ú…-Ï1q”!ÉÜ(\¯˜jeìé†N¤7 ¹oóI2xR¥¿ºyôáY™'ht¨+ó¸Œþ‚©AAª°$,Eÿë_ÔÆ7„ ê…V1éK‘ÉXŠK2)?ÔˆV5»ÐLbÑ,à4ˆRèr·hDÄNõrëµ À~Q£–¹‡ÙÇíóíŸï‘öÄœå1„Pø±\1Á_Š¢#„úIw ï4†- >ƒ o3R=ݽ½-m  Š˜IÔ9Hâòþߺ4}iß#O¿¿©gçÇžypÿ×ï¡f>7ûäÕ×¾ûÖþßÑô©÷–ÿ|üÝë/Œ£Ð±rcy=u±f%²­ÁZ¦ÏªZà²xàŒ'"„Fe¶´°mθþ´é×lÝÕ0D^ÛØQiS¤}Œ|ik ŽÈ~t$}½c kØ*LØ*L¢),rn5[pí–œ¯ íü¼p kÞ&¶)­gˆÂʧ1ˆ3)á)Çõ­AÕÙÜl hõÀà¢þiEm³¦¡O¥ŸA@ćŠqãjpøM÷ ue„ºb"ñ¼\ÏES½Ÿëô–„Aa‹pÈOÌA_®¿o(·%÷¨ÿÑÜnç^ÿÞܳÎר%ç —·³o´8Ö½«›¶ú ï¤Ò1€lUä`[™+#Nú°¡kIÑLSt‡Ð ¸’Å5E$_¡Kåsä8Wåf9ŠûX#sðˆÕ´}R'«:º ŸÐçõ˺C_óë¡F˜¹M°U±Ræ†n«âo) E¤|ö?6ÑZ¾‡õ:“Ý)Oª3ÙÃ4È{Ñ©èêÕ ËÝ¡Ä-t‘PNUÊÄT!H%‹!ìt0‡¬Í¡Ñ40Åðª/’£.˜Èõ4Œ rêž™áïlz~òÍõ½éBKihY‹¬2!!®HIèvù¾±iÇí÷mµF;ó ªTùpž½R;2âÛ——(*É$„Ý];¨íc’ozù͉øšÑŸùýÔFID,k—×Ób¹•0áJƒe9eKe*ÆCˆVaðáLâÇ&ÂgûŸíCÐÕ¿ÚZŠ&ÿ:‘ö90ÁND¬À¶2¼"Æ““ݬ¯Î B9ïZÃ,šó6±uhæ£Y,¡Ñ,æ0šÅ ʼ¬|M  Ý¶ÜšdŒ´“V{µýGéãít§Ü©÷gW›Ã‚%[úpv9ÊÈcʈ¾9»Íœ¶ËÛõ‰ìS”<­LéÓæù{æ«üKò«ÊKú²GÍ7¯Ë?޽ež ¿ƒ*ø“ù‰ù¹™ÕÚw'w§g/^η³›ÐæôeÖhƒŒÂñ¨Ä+*—3€o+žl•X–ñE£„ªú0vyB…Ã@ŽCf'¾ ø8Õ%„FBä/C—BŸ†¨€¯†rÓ¶›S• µ›f·gü#Â<ÞV뿉yKÞ,%Ò–DKJ#ÒtJ†ãÁŒVgÛl¤‡¾Õ&QÁ ·X+جa%DBHØþ{Ug)"¯—Ú)×/«[ƒÒ–çü‚ï–ÆSkz¾mìèŸ<þÃÝ}[©ÙÏ-Ä’IÁ]BÖw×ðg— ©i±ÄÍ<üõëw~uf¾H çëEx½ÈJÃéW鬭‘ŒÚâ7lsjH*øm²þ'ùªM_«6©ŠÕÈSƒ˜>Õ¶°ªxí‚@IáÈÏt‘BØù† cÚ Œ4+y($V‹8áÖP¾ý?W*,œo:ÑfãíRè»®iéBH ªÔJ¿`qÿ¶…Mþa‡PȽw3,Þk ó–Ûyê¡ã_‰a‡xÙ±òùÄKÝÝàÅ(Ú¼-ìÎHðû ¿oࣲÓðàë†Î7å‡Ç´€×ù.Öið:-šØë€]p$óe#+ðJR“a\ž”IYtý å2ò@y4¢¡Œši?Fù¾Å+‹Â•z'½EGAç ' +b‡ƒÌv±õm"âv:žtŽd–]«Àå› ©$E7à ?³dL Ï ²Óg§Căa ޹P‡*—ñ!,,”û…±„PQŒ+É‘¢Øa¹K¹´»$Ç<›SG„ï'Ë¥¹Ìxq²X-2|q4ë9$—½} ‰…äã&®æ®Ñ×â×K9·ØŸ+çk:73ä U Uåj´;Ô>Óáå'9Êåab\î½¶ qgŒ ÅX¸5’‰æ^q½ÂÑ^Œ¿˜p‹¦7[Ÿ.n+>‘y"wÐ÷F|¶øwêZÌ“qv)Ä9Rò@˜§ˆss [þ¬¤DÎEY•A5ôäðbä\/¶‰b"îuÓ¼a~Ktä³]ª¼?‘樻­`8,ù¾ ^Òÿ¢ªSú´Ü“<Œó“üažâç ×Šr¤Cu‚3wÌ€qcÒ¨”ft¤q4¢ÚÉ¡æcC­rÝG7Ë£§Vt(•òÈWžZ4ýßÕÛÖU‡ï¹~݇÷áÇ}øqû>Œ;mâfŽªÙeMÓ–•–ë ˜t+“(© *¢á–D  K;ÈT u‰uY›&T[Ó©B• ,´Úþ ¡Nª«B5Qœò;ç:[÷Vîù{}|ÎÉ=ßï÷}hƒö|Ô…mÓšàJ.Ü€*åÀ§åC|4â'Âåbø”p½©PÂõvk íõ¶Û']DË ŠMRÓ“N!c¢?³Iä/0IHát’ 8¾$Ú,ìØ{ÁZìýÀ=ážxßñ¶šhŒ‚T…‡ê,š¥g=³ü™ÐtlZ›Ö§“3=?ËÍöAÑ1L0Œ¯ä*ù”ÎæÏ–|­&Í¢c¨5ÖQk¨ÁÕh¸t°s\MÃNBåjexT"[ i©6prN¯‘ Öò æäZÎ Aór­¤Èî\’;WD‚%$XBª• ÿæýF$Ã"5‚uBx‚÷RÖ Á¸‘\Tñÿ}àÝ4I¹s]&KÄ ·n•û±ªQeå‰ÀJ ûTz:køÒ®'ÌèO~ÿÆñÏ}=K„²Ùä/ž>øôÆ_z{Ï~gÛ¾~Q‚žW7nüôk{{q å‘ÃçNͤ9 <ÿ£ÏÔ†¿<=T;xìÅD$¬@ ‹>ø'½Ý{ÒQ§[ÃÌTC‚–jàÅÌ^Á˜Œ|2éÊ„ÈdÐM„ðdÌ|Ä,àwÄ¿‘y¦‰G½ HŸ£˜¬³²\i_ïrØ*¨ýÊÇ듚bŠ“6öPÎãöE"§6;*ÖsQÜ;Ê#>¢£Ø‘(ÚEd¹@Öæuä#æÀÇ`šóôÁï’)ðN ÿAç?—‰•SÉø¯¸²Œ=ag¥ÕZ–…ë- ²s8V}‘ Ávk£h”¦ë©qF½»_Po«ÙšÒÐþàþÐhp4ôoÅçWbŠ­xâ1EÕ<7Qýeä‰õuwëé£iäVñ¦ãoÇþJ4Ö³Qý¿€î4Jg¹’º¢SB^¯/= £qQ² _—äùo²_>”üõÔ¦5èàlß.´ÖA;´¡Nl§ê5LB¾ZC@ŸQg[ú@ìÍ?VÄ`ìåD¢©û‰â²ªb®º xsí½u«ßÉ>*Ú¹ñå§>ñãÁoö& ÞkÚÕùMóÑ‚óÌáþÑÃôW³ñ#»­g13ÒÖ<Ïiʤûº¨ŠÛ Œ¦+ËyÃÁ·Æ‡zÈHwæZC&ÆR#5)‰ÇI›p“6½(tÖ/áR~Óz†ÓÏaÅŸ*…ù9| [O†£*«Åe8QWÂßqq¸\$aiµø°Ž:h0‡˜£Œ‡áxƒWÂy3³ºSò]MÌaì *dh^|§‰¥qø™&1Œeä~bL vû/‚= ëCüîìI’mu±'âanH³„X!zp3jÙØU6æ‡ ¶w€Ì »3» ŸÆÈû±óÌîO›vŽ±ÑŽ@šÙiðfŠY@à ™£L( ÿ?aŽçx>k`í¦. AGÑ,zyÑýFÔT-/Iäi™‡æ‚ìÁ 3º°ÐYo}÷ã: ¨àè£0Þê.Ûxç*5 AOFÄdDKR‚¨ ©$Ø8a;°x€b”XÊ„/WÝÄ!è¶@5ÛE'ÜÙUÏáH6ž±Ãw{¿urxß±Rrp7ÚѬ¿ñ©Ú<§;7gG’bîØ[ãŸl>?ŽfvlÕ‘Ù9;~`ÛãtàÓƒ´ £mÀ¨A_s1:ϲ”&ù£ožD¸ ¸hÏß_£ „µÛwîÔ+À8€.V¶(«3,Û“…ßñÑ8>ߨì‰ÿ%?Mž@~¤cày–‹ýIDÇVV—…Ur¬¬ôYî)勪jÜ;s|µ³ÐÓ±jTj9¶‡ËІ”W ÕІØ7$Õ”ª:¤íeö°;¹aeXÝ£a^bfØŸkgôÙž_Q¯0¿dÏ©ç´Wô7™Kì<7¯\V«]Ñ—zn*÷¸{Ê}­w–Ex•×· ±¸Åé‚GFÜhÛnÌåÜ(Š$6jr Òs’CcôQßIã{¾ï‹/ô°CÌ7 Ôôßù—²ïhInJ™P=ƒÒn…–•hZ¦t#MIœ˜†,x®Qb5ÕPTµå¢,Ëéš–gè1¿Ïëe@’ÉÈ&ʯ©¼²€€žF9$pyn–›çþÌù¸S¬ŽA,4ü•—™Eæ½§Xõ¸vé”A±°ßˆ4Àâ}«)ç¶Vq¸¬RìØ¥tu^èAã=îÛ€Q8ÎGä,.¬ªP£»ÞÂõBë(ÿPóÊºÖÆqLi»Ö„`W× WNMøÊ éAWµ‘°ôp Œªýئ" Ð/¢1Ð7—8#ªCñº}"›½ fT ¡ÁÉ5Æ™r ‹‰fSÎÆ\!!Ë lÕlÌåeÙ–-¢W“v!vóV‚á{Pq šKn\)l,ÆŒ¸ÕsÚ´Œ\߆Ÿ=’ ³Þ4½bz×ïz|Û*Ë@¶„¬ù.B¶”<ËÝl±²i1L—på¥XKa¼Ž™ñGüæõz¥’¨ ø,=”3‹”ì¹×=%I,iÁ'A‚0n«X¬—rÈäß.¡uÜD&ÜAïÎ^*õf³å^œ:P+ñZõV½%¬¶Èb"qä­ê¯Ie Òd½·Á`Цm”GËGØ£å÷Ì÷œÌœ 0'Wɸzf [.¾²-¥ª='”½œ•²JVÍú|â|â¼rÞbxs0?hï§Gû{˜‘ü.{Ÿ³¯0ÆÅš“Îda¼|F8›W„EsѹZ¾aÞpÞ5ßuVÊÊç øcÞklÖñª‰Ç„Çľ'O*O¦ø„IeJÊMš“Öx91Á>—˜°œæ8=“Í–U-¬ªšid4Uá þ8ø è.QÝ@¢ŒG!€6,(I©AâIDà'¤êú¡ zÝó.Ül6›¤ÖÄcÔT—®\#Ž™™yĸ7n·5ôš†ÞÖþ¨Ýêý8kCxǯ¦DIðÑq(øš¾€$ "á¼ËÙG äç Òt…ÈÙÌï ÌS\ŠÈ£óù•<™Ç¹NÍ¿æÇ`ˆ·MtÞD„)™)Ó5/š×̦ß̉„£<`ÂØ¬\V›ˆ7ºé¡o=rlë#‡9ÑÃÆH6Ç(Cõ8Dç! /þ¾¦æ¢MteO2ÌÜx'œsPú‹f÷æ{ÝôîíÄHxB'û ëÿ@¿šj*¥ë”"e‘õ{èßT_’Ôõàɵ¿‘{ׯRäÞjkÆ8APaF¨{›š‘78µfÐEþÊÎ\)öIä8sD1)÷@cÛ˜2×¼Î+p1lÜ©ÐnM§…iyʘªÝ ÜTnçnWY±dpz ËsgïWüý£%ñpƒ.µ|-©%­¼S+î ”Ê$÷ç÷ÕÜѧµ§õöèÿd`Rš”'£“Ê+þiF~C]0’‚O”DY, Hò@ÁäLÅå¤Ñ§ØÃö(½©²pßçFÐ~oÛÈ.5•£‰~†d)‘pJ¥Qg h¶Ýjá'ñˆv­×ãgú¥±©D£¹Z­Îx¾ òÃï׌Z½V­ë¡é¨-#¹²4Ê'&´v%mýTf2Cf¦3(£é¥’S-Þ3Í\µ o{¢Žê>Ÿ_×üþl]×ë:ÍåÊU>\­òðåU–Wª9] ŒØ†ÊQ|Í_ûQÿ| »„?$pYÆY¹DQ±˜L&8$æoNEQ´¤Ï#a6¥! s•—ê®vQû«¶¢ÑxgcmlUÂŽ_®—rÀƒY¢Šª ä;„CŒ’ûgÓ×!4­ûåÕeiÝêXcËPÏôb¯³•mAjzÔì`!å68ô„’5%Lô ;H 9¶zWZêàw¼ä½èÓ±;0#yCé»wÁó3RShN Rsbq›EfцÙCãNÕcÄßo‰Äç 4¹Ê:J*jÿá,Ø.RÙ~¹tãRKų0ÀÖíS„–Ï Z~ºöF±kæEüo+s¢£§Dœðo]?dÑ©€™  7ãŠ!ÇHá&ÜŒÏÉ艄ˡž‘{’!t$x24Å 9’$:2´‚qúzTˆöL§Âˆƒ‘ÛqLÄÉ—ÃŽ Mf¢ëýYÔ1]ZÄ©àWVðÕ¡áÓ/ÉŸ°åáø¯1z耇!O¿DeƒgK¿øû¢Q%’®Wðl.‡ÑäqY:ŒuN½e¦3èÎ}{ ÔØžÝþÔÄÒ“{œn»¨õ¹ßÿÉ®b±û§lÜ8|í×=ñYS¿¢V¤Á'žE€%upüîü¹íT6¥³¸ø%Y͑٬/œxací¹aˆ¾ûµ dªƒ›duj QÄÙÊ% bPq!Æ`’=WÆ.é¹$v+ž[™ß*&¬eë.ì-ûzg Y›¤H²‘Ëä‹T!B€‡Ì‹øb8\%ˆZõcÑó—Î"Ô…p}µ½|QÚ÷ä3oñÚÆ ÐsÒl‡âËK°^1ɾZ)úµÆ÷|/m#YÖb4&ÆZá˜ÁfCÙ˜a F¨4t‚=ÁÔ¾{6~¢p–9ÇÓ^ˆ=?[x™{Y{•x•ýYì§Öq£öÞ¶ hË* qÈSê–÷…ʦ¼7˜”‹•‡¸0ü `Yž°·†à”¡KsL¬JƒÉlJü†w›³3NB¬)JLÃj!>Í¡;Ü GåNsç(n¢Åd°;…­à&¬›b ‰©™™š>R@v¡U Zµv!ý:T©ÖPêû—:cKë«UȤëvÛõ>ÑÚ¿¾dõp‚?„‡æÌ £åSõ'Éa4XŸ&Å=-õZ£ZQ¼Jv^ÒåÑ›‘b1}çºìg-4¤çUVëþ°ñÖŸy|¸œvò\òÑìÎîU1­IJÖp.‘ÛÝ­ ™ù‚XWÓBkí[/ý`Wa¨wš!gJ^âaõšWŸƒÕA\;ÄÐ*=CÏg„ ô<íŸQPP9ÜÞhψí§¡Oü ýyñ}Côo®Ê<¢”(%’‚ßçCßñ¡¶ï¨ô•ùm»Dô¼ˆŽˆ§DR,“ÑZHz&r¯Âu ´%îKÒÎH’Ì£¬[ñù®pÉ-ˆb–¢ÃES’/(A|ºíC¾rß&‘XF$'.; ÉnB¥x¬R;ˆÊA7x:Hc¶ÒR*”—u‚D¤U~ÑK!VÇö¯.:÷a¬v–$Ø!¬7½nëñmBƒÚmjbQEÒ2ÈÜ6‡~bÜ‚"Íã¾°qÃeòT:/Ø 8¢‹GÙ¨#Îoüy.êÐù0voÍ…út»?š 9´Áî‡spEϽ$> M â!D¥ë(=ˆWMf8Aé õåÀÚ-òh÷ݯ6ûât~E¬ÿ8¹O‘Hë~¥†´Lå±®¾ön¦:NllŸ£ŽS_ð}QÄØ/Û˜¶ª0Žÿoo —¶ô^ ¯PÖ2Ê[k)/òV(t€ã­o[ƒ8 2`oc™š¦N²à²Ìnç'M4K¶U4ÄÄIÌ4‹Œñ“1‹[ˆš°Ë4FeøÜöŽÅeJ0ÎO÷ÜþÎ}îsNÏý?Ï9§÷vP¾$¿æpáL¡ŒÂÉæÑ¿Çøæõ!f~R #]þ Ð+¼‚šc TœÞŸk¥}È 6aF`…EÆyYå5YÒ¬KŒøŠñ!šè–յнmug5¶› |ÝÒ[%-û2ZþFƒ>>¶ÊJ™¥¬4­†W'§%åVÛ\õº+Uî꒜;ÏÇ'T¹‹­ÙãÁ#ý~Që'¤õvTkÀŸž`¡ß • G$ѯªTyy“Í4Ckt^¢r-´zóK+TÔ˜">TÄ›¹}Cœ$õÖ`VªF«Ó$§ŠÞºážJ6ìñ•d—Øb‹¬ÙcQ‰ ÔÝ]f;p&xðªßw6ílþ;žEÏUÏž¸cº)Ó Ý¬Ii¶XsÀ(ù Ω5Gœ~‡‘d¿VSXcõ¶¹ÞmsϸY7Åàçè ð©ÒËl†kãâ-…‹ÌäÅŒ`ïFP¿„ÖBã«´¸WoÒGŒŠ‘VµÞ˜ß_ËE§úÿD¸F­ITFgUKYíðKÌþ®µZ›h4%åùKëGfï.;+B>«NÇqU®‚†ñ®¡÷Nw¸2S—ÈqÕ®‚S{žyåÈø&ûyúå ÒºuW••˜$V€x3ñp м h—]ÀS?aH&¿¾ø0\Œ_¦Ã1Ì×c¤= l›ìq@ÆQ ³pÐ}³ïyù€³-†û3 ÿ[ °(§ÇðI ôe \¼4¶î_C’wp@Ý `×S@S7Ðò1 _àBŒ¶^‰31‚ó@ç×@O°O ôÝž&M¿r‘ïbŒQ\”ƒé[ÀsÀ ã ixñ`–òð i›£1N~œ¢qÎ ožstÿ7?’ydÐZ õóVþ¿ã|­ŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒÌÿ ` =XÑbR‰8lZXé¬Ñ&êx!)9Eo0šÌ–Ô4kú6›ÛáÈÊÎÉÍsºC¾§ °¨øñ’Ò²ò oe•¯~Ô¢þ‰»v765£5Ðöd{GpOgWwOïÞ}¡‡ßðr—6—õß%æ©ÞBÕÁj°{B†p §pÚn¶[ìéëëÔÏŽ\jߦh{?†ñÚýöõpÀ~ý¯KÙÿ§ÂnڃÀ4 3ÕŒ™Ž˜GV8ÃÊò A²ÛQÉfÉ\²•dG$;Žì•@Ss ¹Þ O´†§Ûölëh nÕ娙êfÔÃ… åraL •êi´ã]÷ã ÚÐjo'ÿ ¦0BÞñ-ûQ÷§ìªrqUÔ¢¢l ð “|_ð)”=…8 Ì<µpJ²Ä«{g (’i¢6ʃSZC…ö‰§9q˜kœŽfV±2øÁ%×þ>¾êgÎÂE{Ÿ¿‘~E¹6'x9]ŠsùÏ‹a㜠endstream endobj 69 0 obj << /Type /FontDescriptor /Ascent 905 /CapHeight 0 /Descent -211 /Flags 32 /FontBBox [ -665 -325 2028 1006 ] /FontName /OKLPPG+ArialMT /ItalicAngle 0 /StemV 0 /FontFile2 70 0 R >> endobj 70 0 obj << /Filter /FlateDecode /Length 18544 /Length1 32988 >> stream H‰\U xTÕþϽ÷Í„dY@x“GRÉÂDÖ†@2 , Ê’! ™ !Ã*h€ Bè°ˆ| "Š€lŠ/h@°¨hmBѪXeÕü@h¿iEæõÌ€úÎ÷æ{îYÿ{î€HÔ@"oda·ôI>wP3Š¥#J*=¾ÉgJ¿æçÔP2g–^ç;5‡÷¾lÝ'ûÊ+ãv]Šì^-Ÿ:oò;cÞí ¤¥ýk¼ežÒcÕWûÛÊ6yYк²Õ.èåugo嬹ymf&¯Wm^ZUâ¡Äæ €÷ ^o­ôÌõµ¸èXÇö²¾>ÍSYÖ±jÿÛÀÂΜO”¯jæ,ΛŸ…*¸ï›Qæ+½ $püpK;ˆ8~ãµíˆSIˆ¬f~/¿ ëRp?øß³uãÝØ7©oâxŸ®³Õ[8€|Œdc#ª±µ°a,K~‡&åk)Îj@7læ|6ã8ëŽÁD;е.c!–ÈOÙj #€AÈCVÒpk6Æá¬ZŒÞŽiðQå¶VYk¬­Ø†òcë6"¦ãÖÚ—Ö×Hc‹uX³´¦Å>dr”Ö|3°AŽWd•[?qN<Å9(äâ8)ì½ ÍKÕ2‹½l±Lë(kuÀxx±© Nmœ•kG;Ž1—½®Ç^ìgjÄa|EíºµÕºŽ8¤âq®§'èˆ Ü^ȈiŒRôå*¼‹?á$ôž¨ÒZº–©=m}†6èÑœív¶üÝ ˜ÊTŽ5QŒË A´ñ!ÎSùyËíäÛg, Ôö¬óhËgÏ(tÂÎÞÃ4…Ï»Ž;î-|JÆ.ž’)ƒ†32i M§¹Œäs´¶…rßC‡¥/èç):„rî*z‰Áb$ÓQ&¦‹ÕbhŸ‹Ÿ¤]FÈ–²­L–CäxY&gÉy²Nšòù¼ ”?3Y*\uR *I¥¨!j¢š­6©fÕ¬ÓŽißÙÂm•¶¥¶FÛ?íÙ3ìyö|ûxûóöýöÏŠ¹;?À>ü÷=tN.’.¹«DO'NˆÜÏQ*swªØAËÄ|jµ¹¶þ¢?Àu•ÄX$^?Šþ2—†Q!¦ˆw¼ÙÚ(žV >ÀUuˆk;ÁžçÚ´@\³9°— úrÌew•"á+y–ìj3þ®Â)†®Ší2»à°ÊÐÜpÊØ#§Ó|ì.žN·ÂVp ]<FQ:ý[ZbwQoy‹ñ¤øWù/Ãï©T•czR5šñ:ߊ.Ú4[²­-ýYT(¿xˆ ÔN®®/u&©µÁs4^n°]§1M*gäœ}“Ø#sÕu­€¼|æc)¦[‹0Os«STIO QãéV-Ó•“¿ yªŒã™¶Ÿo÷Ažƒd.Kb¹s†s_Œæ ±éEžŠ;¨‚ïøžb'Ð`%Q®EO@ `¬õ:Ö[å˜f­AσZ«š=îÀwx;hIàøÐ‘oήåˆ&-ÇJ~qZŠºÏ—ÑN¤X|Ï´9ÈÐÞ_}B ´VXãî~„'ìzLÂoð-WùG* g`„¨·r¤ë=‹|k»Õ‰Âᵦb$a›]ƒÇž’™5zÔ Ì¿п_ß>½{=Ú3½G÷n]ÓRS’»<ò«¤ÄÎF‚SïÔñáíããbcÚµmóPëVÑ-£"á-Âì6MIAHu9ź™Tlª$cèдàÚð°ÀsŸ ØÔY”ó Ž©‡Ôô53YsòÿifÞÑ̼§IÑú HKÕ]†nÏ6ôF›ïf~e¶Q¤›WC|nˆ_â#™w:Ù@wÅz³u“Šu—™3Çëwg³»úˆð,#«,œÿÈëÃ#˜`ÎŒ1|õ“A!FĸúÕ „ErRf¼‘í2ãŒì`¦LtyJͼ|·+»½ÓY”–jRV‰1É„1Øl™RAV(ŒiË2í¡0zE°,×ëSøW4FcRqŠ£Ô(õŒs›ÒSŒÑ*…ãf›1Oû¿%;o宽·½ô»b+ôàÒï¯ÕÍWóÝ÷ï:ƒ¿EEìƒmEbN±?‡C¯`‡êM,)r›´„CêÁJ‚UÝ©¯Ìp%ÅSt³…1Øðú§óÑÄûMÌsîÏ<`C¼K÷rNs`{£È“Ý¡¾ üóÞŽËÔãÜIK­nuØú¨–wGäýLÙ½½Rrà î!KÁŒŒÇ¹!L½DçLÜ×Ô'øSÖþ’>¬ÆO±•YÊ'Ra¶È*öG÷ ʃö¦–mèþà0®^yPâ¹+±%Fß@ öɽVãý_x3%ÅLN¶ˆ=‹Ï”sÌ­{¥¥Îi†á‹ÖùÃð!±õõëÆð;Á^Þ˜‰I¼0kòÝwÖ:&µß‹ÿr_õÁQUWü¼÷î{» ”…t©A B á+…²ˆ@ òµYi µH¤R©–vT– aI:Ö&Ò$…’&tØ`¬ ck`FSìS§Á¶Ò?2SM§UL^ç¾û–̓1TÛšÙ_~÷œûuî¹çž{_hÚ䲸^Î5nM°˜k¢nM¢{y"¹•ø)ŒûoOü†F¦,Ù˜×F~Jõ7œúüÂŒü‚H8mI¬\ù6¿¨ŸäÔÏIÔ©R<%7l¤êª¤§²A¹:ј…𸘀Ÿ%ƒzC›Ï¨”--/(_êü/œž~“Úì÷¸—¤kÝ”™ñœÉýå/÷“û™7$fÀ`\ƒùE‘Xlp¿:„š3á2Eˆx* §§åÆ©'s~mvÇFYj<—årÄŸ£Rb¿†©ª\†?ŽÎÌ)yHt±X^FZ^¬<¶¶ÍŽ®ËH dÄÚõ³úÙØ–%ånà´Ù§÷¥ÆóªËà«Z…N‹Z2´ª‚–VU ·ðPU>¥kznù¢²–ñ¨ ·§…¤VOhYJc‰ò5¬ò”î—U©íø‰ÊZ!R^ߦ‘Ôù]FëÛtG:üq>É- 'GŠ<~e™|má+é+}+)7@WNöerd<&ý™-¥â7…B\¾.¶RXæCß5K(¬í¡ˆÞD2Œ1'è!´m‚¼|šû¢}1ðW`PŒVºÀZ e´mç¾c #y+EücéA³ÄîÅ|ÌNº8‚rƒx‹­¹´òQô{^³¹ ú°š¨úè_Ýpr=Ê«Ñ/K•ùjð],è'aœ}j½wgh–Øj¿µ”aÌåÀnÌq8ÈG›ð"`ÖIUZ§Ý€z0Ubþ=¬+^Šqv¡~ú‡\‰òhØa‡éÀDýÍÕ¿Hσ§aý¥ÎºNÚÈkN¬ ö+›®‡cc~20節 }®Ý ”d›•,3²) ®RýÚ,¾Jüõ”ÙMÃOÄ~ú 0_l •5ØYh¶ÒA–[í^q˜êŒË4uß·`ào¼rõhšþÊ´&ÐvÄ×bŒ¿8‚1ÿ.ãaaþ©àlÑ-ch7P¹þåú‰}yöuæúÄÏ1ÜD…À]Ø—(ðÛƒù§±Ïyßµ’¾¹hû6Ú¬f@ÿ% ¬c’ûpŒ5AÅaÃ5¦´©_ÿ@mp!ãLu/aœQ€Œ¦Ý@PäÏ17a^CÆ+b†cSÆbÃì„a›ŒYg Gä~:g¦^Åó¤['¨B!ÇäóÂ1 [ZܱùLq̸,㻂ã^{Ÿ×É1•`œ=ÑCw± ò "¶\æs›ù<Ћ© |q\É1Ëö¹Ì~áX“>Á™PNti¦Ùl¿c’vÎlÖ—åëØ ­Ã©cf$×ý§úÏý¢ÙŒœÙl¿kvÙ6Öó$Ÿ _–¤¹ ý) Ü韬Õú+´6_1,¢ËÀƒ"D9fˆf‹ìOygúbó zÁ¨¡½¢Ëþ£¥¨ÞE»}AZ‹o¥a<—~‘*<>xKRõ‹9o,¹ìÆ«—9竘 ¶pþÎ+¼­ðð!âè§š3ÇlÎÏò~@Žv;ñj_IÄç9:ÞçÆ§'N+<ñ9Ä—^–w ò»{NaÇ^wýœ9ÇqŽä<ÇyÆmïå¤þ1½ qÌyøЍs=Na9l|S}äaìw©m[yöq«Õn4FØÖ ”ÿ˜öq¬{[âN Û}ê>äÞ¥ŽžnqïQ3›6«|vTæ›èÇò-‘ö ²NÒvó*ö9PÚ[§Î ü »+D9|~ª±ŽQÆœGèÕì¹D·ò½Àw¢±~滨†*×ñ^à¾Ù4\Þ ¨¶Ÿ“:ܩ̬3K©Áê¡¢¹¶ƒ6ð^ñ:ØÞ{ÿÃ4ÔDžè¢éâçh¤ÁhW'}¢ã2.¸o^?ð…o=ù³+цǫ—}B4Bùã¨ô…ì·ÇûcZAZ%ß=ô³˜Jq†ê}Qª·Šqæ‚Ôˆ1Ž¡_1Û‚~£å}½ŸîÅùªBnªBÎ!ÿûªÑŒõlC^Œ(|ÔL·šQø°B®}±prì>?FÝÎ1bíGæ÷Ä~Š‰É´Äª èjLäIÌ»º8¿Y8»{ѬÊÛ„¹÷BÏ}ð[†ß|^|!J±¢ò@Ò~§`~ãª7–Sâx¡?ü°‹2q_hˆ½Û€é¤ü¸Bµ© 8¬¥zLê³éU½É¸qËwh»ØA÷‹šaL§Qb8eŠßá¬~L‡Œa´F¼L‡DU³,Rh¢¹ÑŠ·%ë/Ð=¬×_…\K1ý«è[b m5Z{¿§Áâ>ì5ú™?@œŒGÿ0®‚öEŒœ­Ý(lŸàvrŽV»”!–R¦ì—i« Íz>ü¶{ {¹ÜÏ^Øš°ÓµñöÉuò¸èÇmÄ!šGd_&8ÜW ×P3P§ÿ‰rô=­ æ0åiÝÀa…_ÐRÉ-@îø™Ú£ÀT1“žv <ükà¤#ãí6“^vaì3àgø»€¡/¢YÌÐjߺuÉà¹n¤O†™Jýåg)ÊÐ.Û½ o{øyæ›%æÃŸbñ †µ"¾G°w@ÆôȘg†x–6 dÏ@Ð.P–ô¡ƒPòÝý¼ \Jâ4fu7|.û> °¿Û¯Iÿþ“‚*†¾ ]¤qàp‰ñ0mc@΄\æúS»ŒXc4Ò¤>±Ž±BxÇÍ÷ê½²w_’õgèX2Ü8HÄÓ´“! =à•ýçh'Ãzu/^/‹ã Bw¥M$cÌ#[wãÎôñ°u´ìSÍHÈp–n+û¥†<»€ÞJ÷3õ3‘¿$¿Îb¿bNYïî»/Þý}!qˆà®8OYàBðB—ñ­òE¿˜/pâ=!s.éö´¹v&® |×ÜxÌÿ'àì¼ t/ý¯çâ,Ã9"ÀyâÞ! ðŽìÂûä^ª$êE.ùdð3ä¡"ðkÐáöî› Ey8tß?MtõC”‚¾Ë­‹TªSïÊQÐýRõõ«ñ þWCtuå¤Óÿj° å÷ÇPþ3ø ¸íßE¿à³N}ïÈÏCîüFù p<HF ÿ¿G®ûý¯ó¿?n–ñfY;Ç‚Oƒõ~CÜ4»û9{¿5ÜýˆMõ-q=;~À7Ó›x÷Å“¿}>íÇeìg_2D±Ý‹7å~Gó[–ßÏòý¨X~¿Éw,æ¥3^ý±M\wü½wŽÄ$>;ÄIˆã;lj1%Áü4>'öBñhg „H ˜r Z¥ÑC*ˆBP'±Â¤…õiZUõâÐìÐ’)[;²vTcôGÚEÝúG¨ªvhTÞç“vçÏ÷ó}ßïçÞûÞóóóYºÈ¨ÇÆŸ_ù³3~ÿ |ÊœcÔ³uõðºFÚ‘r¡ˆ,i@ l5ÐtCÀ0`&Žlä0ð<0 Ü52ŠP”zi¢ƒÎ4zàPÈhîÉ4;»Œæè·Þº-ÃÑg2²MÙêµ™ðªÆ /_™aWeH圛šŠ¸7y`¤–²ß¥D"—…B¢L0g#Šà­„†'¡(ÙG¤ô”@SyÎP$—¥Ùqa­}Ææ36?šï G¶°ÉëÀ$ °q~Ä>Âû,ö 6 “À `0³Yœâü€}@ì}R „n`˜ {VdïñȰÜŒ½+²;¸­;°<†Rv›ÝFiNÕn N°:ëH•Y§¨4ë¸Ü!ý)u…¤³¿ÊAér¤†Ý$À0ØMt~“È@+Ðôfx·àÝ"*p¸ h^o`E@f3ÀÛÀ-R(@+`eï¦0ŒÎn¤RÄÍþÈÞ"E˜ÔwØï ~›½iðØï ¾ö‚gØ›)¯D"vä ®Á"¸ùö›Ñ —”Ž8Ù$¦G‚­Â@ Ð f6ÉÊSû$:¹Jf°¹J,E>5øçä+QHJ  kLæ&°éix0Ãòp€) Ñä&pî%xÜ~ø"Lø‚¦±Œ¦ÑÉ4:pÀ†n` XÒ€êr>dXl5ºçÀl”³0r8[âëFaÕÙ¢[x‹Mã,Çéc>¥LôˆAq³0ä¡/mñ¦½¬–¸ñR@\N«S§yc_åýó«.»œ¿}‚éÉÚࣣø1¿L»ßÑ®ý²,¡…¸“.Kĵí;ÛÇéçôn,:NïqJ´ ôóØv¢‰D\§» ‘é=è°bî:«—È\Gd«7£»”ÑUâzè*8Ag³‘JCWi³:庑dE,:RQahŠd’44É"ù?53•ÐTV·Jf ÍŒ[å­ÁxÒx2š¼ÙEMÞ,4Áÿ÷èk éh]¢·3Öçõøc}@væØþbMÝ+Ë#½ ž5!г·w?ç=}ZÂßÕzýQy¤®ó éNž®óGGHg¬­}¤S鋦ꔺ˜O41Úܺ¶ö±±N?kmë:kå­åc5×>!]ËÓÍ|¬Z>V-«Yi6Æ"Æom±’ÆDSg†G™=ëµ§Ô—ht‹ý Æâ­ó/0ñ7S{0¡-ñ7jyO=y*ÂSøMñT>ÂŽlªøx¯t‚þ"›vúIpàhò()Ž}7šù$q 4p”OxÆ“ÿë@.¦){¢ÉBâZÕŽ¸ÞÖÑ>b± ÚÃoIÛ´³Ûczz*\…à&„‡B«ç1›-+üïïÿh–›ø¯@eWG©â¥$™4o¼a+hëÀ½vv´Oàq‰ÿ=$¸Á$ ÒäbFÙ$ã~¿‹8šõ²ó0åÌU¸$¹8>K|ŸÂ~•ƒ.Òx…Ñ9³Eg•’cšH®Å4GI‰Õœ3Ç„kl5±Ñ‹t)Š_Ö]ÿ¬øEýÖ¯ëI¾øfuÏésVÂ`W$daê’CþEdÓß#TgØ÷0ÖJ¥¤Ÿõ l+ÝÊõ¶,§‚SÿÙâà³â\—ø ©Þ:¿º†¡]ë|…¶‚êo¼ŠÉÎôßMΜ)¼¸–ÑÜ3kjkWr—yM9K½yyE6=ýŇüÎ'Wòò ç3¥Än‡ç$"qÉnyŒTc2Þ1 χ1dé³\"zôôÝ“í¿NÏ7àØþ÷šÌ/°SöSŽëù96‹½˜Å ¾U¸¥¤©´­ ³°³d{éAËA{oÁ¡Âƒ%=¥ßgƒæcöç/˜_¶\¯ßf·Ì·ìwË–›´)>ÿÚ%6ÑÆlç%g’` )ùˆÊDÁíž÷¾u†ÏwWpæHp>[&í:BºÈ~P Q ºÖ¯ ¹Ý®B‘™ýåË¢{Mh½Sü7ßUÅuÇß{»{{»{»÷Íq, èžQ>¼„†5c¦5jpêGB'7ÔȨ;QE %¨XküÍ Õ(ŽÄˆ '˜ª Õ†©Ó¦8ΘԦí¨cmÏØ)¥*GÿoùPgÚÎÜî¾Û·ûö½ßÿ÷ûýÿ/˜–Ê›Vô·¬m_ýRyÿáëëvo­®nmÝTýJ„ôcçTéÙøðWñxüó¶}]øP|ï·ñr\þà­zÊ7ú#ÀÛŠštÑE%·‚­!;É~3{ŠÅdâcá°@pŸÕ˜»•®a Þõ1È øý§‹ö\nl¡9Ö8#\‚­â÷Ð*C°l 4FhVä c%L—Ž"¡”4Ådâóòó ¦‘G3úìýSöjvËÕÉ·¯¾]ˆËüU¼c”%E}N§i¡HI¢(Fãn‘eh©.NßÓ½ôU¥½j@‚U “V£¤GˆÕëÕ’e…-Yq„³¯_£çk(;F5UDϽSBgýà9øž1ìÿµ(f¼£ç¿À½`êá.šzø«æ/ü,¡DX UeÒzÇzç6ÇÇÿć~᢭ËI¡âK’UÙôóᇈvšáj¼ýªU6›L}¿+ð›~³?Àˆª%GÏ+êA_'2¦fÇD°VyûA¢”Œ¸‡lA’ñt]P:‹H)YIjKºÉ¨úvžaã°1T(Ä õņ"·œ¤¬´Qî…?-4FÑé(‚#«JJ&ºS‚·üü¼\ §‰OϧÌu» žðcùÇÄ;ñg¾=±CíA|Þù¯/û¿wü³#o¨mm3 —\ÚÔ{giÅîƒÎ_ß¼ßöúÉ G·.~ŽúˢỬ"B·õ Nôˆ/‹õ"û²òš²6‘ù¾g…\î*ó¬×¹êÅF×¶Äc¢•ÓZÓÙl‚(±+%K»8Ϊ'%çZA˜†{[£°—y=5-—ßœ’Ç7Û µ ›èÊED&aàÿísôQÒ)Eq“ç_CÃ;BÀÑ»²a¬ •0…1nÈ ±ÀP»Ý€9Yþ}»# †p]·M 3©S ›”THu]pÃ3ºKÐmaaó¼° ÃBj®SÂF6-”—‡§)ÓÜi £`òÁP9´ûÊ•Žx.=Æœ{üʱøaÐО¡  Í`)ÜGàLDÏtöb7γýë’“>pw~.ܾN4[œ>i’Ÿ±äp9¶nÐ8d•V·Ãéì“ì.Éé’ì"0VwJVÕ­K-‘$»îÆnwÀÚî²³¸Ÿ²¯k¬•Ry¥\#ï”Y8ë38ëÃÈ'ûˆoŒ³¾fÍqö{v¼b<½]êüoÜM~–»OØ´©Å€¼9&ßn0g…8€¦`ø®Œ„BO³¨ëLq§0@_ävñÆ‚ ?uï_QÛÑÖôZSFërs¨«¸n×%l^½}à—Cx³Üø~ï‘íÅEò·SñµoÄ¿¼º«ý”§se7¸Aš„bú”Š<“×Ý3fj?p,Ð*˜2¾Ì\î(ÓV›×Þ3×n˜¯{^£¤ƒ)ìK3ܶRŒžv¤kiZ íP2T]œ'Qt%â~šs¢àNMäRU—ˆA÷ºuN¬’ ˜eØ$Ê2‘!)vÑl(7O¶R\UÖ=EÞRïJo—õzhŸ×C?ç’ gC#ùò`lâQ{0l!;Å“2Ѱ>˜nd}OÀA5-)rõìz pæÑYßäY‹f,|“̸°¬cèÇ¿©ûcüö¡m÷Ún ïxuÕÑ#ÖŸdçKå9ss^|ð»%?Œÿó·±Mx6®Æ­—O|öøVädIôÃ}§OÃúƒ7x¸ãHDoëR¯ˆYø3kÝÓL“C0kÄ*†!‘b#·0Äo7WYþ‚Šq).%L\Vâ¨K¤QŠA¡©,œ;{U¤Å€ ë§i'¬„Gr 0‰V‰&Ęø´|‡£`1ÓÙÍηŸgjÿ¾ýw[Óž¸#þ(úu¾¯¤õî|àGðËÒ”#5B—j(þ´Œ4LŲƒ¿¥}Ìhì>È{Ðx¬§Ò›Ì·ñ¦ÛP²[@‰jV–#E5qªC4âE½ü'{¤à?hî/ÈóàLÏ,Ϭà]áÏ9œ%oDq5»Ú\i[%¬×{ßG¸‰­7o±Õ õâvﯔ+NG*а= ùéEÓ²éeФÜT35©>$À4Z²ð“™¨U-Ø%Ët9Te×5 ¦#»l'ö(Þunª¯ê3Ðß>¡Ê=^Šºu7q7?7^ŠDb4&FctmcqÔ\GéhH<²ªU–à`0/w4Éå$wœ®§¨ø4/qùÛ+î^¼t¿âG Ûãƒ7oÆw½Y_±ü½mK—m}~Vóü-'ÚjkŽ3‰™ûÊ[¾ú¦eéÞÌɽ[/ #Œ/í¼Œ,¯{·tICÝãá¹ÍÅm®=ybtß@ã­¢Ix÷h´mÉà}p¾A#œÔ áûhåšAãéSŒ€*F«ø”É![†j—’¥b‰‘$š‡1¦0‰2TŒ˜Zl*­¬(&½¡ÈTCŸS X ÖtŸ!_»~M¾õ‹ñ*QO›ÅÿýÙ1Ÿ2ûÉhzîóþ9žÿ]-ÀQUgø<î¹÷ÜÇÞ½w³Ùl6ÙÍÝ,Ù<$/ ¡îH‚iÐ@€(– ´ˆ RE)ñ¡#”)åÑaЊ„Òh †@G¤Œ¶CZiyô!LE,̤"0@lúŸ»‰`½Ù{ÎÏÍœsϾÿû¿?›˜›CŸ ,Í- -¬ ­Žlì  ] œw®9Yc[í:ºô;2)Y%x FÙ)‰.RH¾X¯ÏPZ—ø‚‚œD:0šýÕ¤±v¨à¹.Asö—p±S6±×&>¸[Ú´ôÞi 5C‘×Ô”Iß #ª‹]A0>Û-gâØ…E¶‹—–öÀóOLY^_ƒk,Øw+ï¿Öûܲ/ÞøõßÈÑíKžÙ³óùå¯ã)Ö²§ZqªÅ6ÎÇüÔlmN’¾œþ,Ýùö»´z˾#¿XœEúûbM gdâÔ~¸á"dÅÕÔb— ܸfn;Ü*·æòyê,ëÇt­õö¾|Ⱥdéœ5áFRoÍÓ;¬+ÆÏS• É#™T×T&I /¹¬(Ø\6Œ£~ ”:’á‡ÿP#ŒñˆLånÒ’R7.¤&¤ëj=å3ô¤Bê¥cÒ‰®•°ÔqJ¯7)g ºÖÀ†x¶¼Ê1…¬PZ¢¬÷ž8 þ‡0Í…~Á^«7”kÁ)ï­ õÞ{®Öê…ß*vOóª{‚‰Ñ¼š\e9b9²Šez8«‰ú”‰‘oMŸÖ%y)Wz à@ý7Ä6áE"—'1\…c4J³¢4^,+”Tý™Lû箾-¯ŸÆ_lª+̯b=7ëðÁô7Ét¼aÿ²˜xd p¶›«íG¸~ª®ËJR]¬16'¶X}Y•¿úkQë/±—t¹8 Ò`qY$VÕ,_¤¬¬´å‡#à²(ÞÆe.fÝc“ýâHåGŠâ†8V¯xc„††#Î@™z³Ë­OEÔknÚœ3s íB¢¼“˜º<‘¨wàׂ²L·“Bœg´¹¨L«ìè]êÛ$1­Ì;ñèÄÊ‘ãÂÞ@âmGÏ™ûÊkS[ß[“^Ǿ0jÂĺ·¦ÿŽ<7}ô#?[“ng=MûŸ|쭪⃭swϪ  v`Τñß/½µM1Fͯkx¶¶0§ÿ3¶”ß;›|/L€”þÝ%ö‰DUû¸°Té™ZÐ’p+z9¼mf»èvÏ~ÚåùÀó't.|%l›¾°Ó2¹Ä.Ëw ð4ú§f7æÎcóÃÏùVû6ÓMææü6ü&i³ÿjf!? Y~+$A°|¼§$éá°’¤åEXÊËŠ4/"©VÜ;Å`²PANÜá˜âkxndöL7·'š'‰Ì퀰±]_‚뛂?xΑ¥Xáð›oHU¥”£Äl¿OðÔuxlúwŸö¦Ony;ü¿õ~ú£Oñ£»Ï¶í§o¤?_w }áÕƒB'n…øŸèó‚ïÞLå8xÏ É¶"^Äá“E°qÙ T¶as}67a¹6B®ÝLEù¸gS54Oá2g\â’œ ‰¬k†æÑ¨œð²TΣ9Qì3¡ òü(hv‰2¸^ÀÍ_9œè:è*ŠVÖdà¢/ºÿw×ô5-Y1Ú Ï| —DvûC¾€ÿ856V**ËÕÜܱ YUM壒ä0Íå Ê¹£È@–²¦!F$L#®Q¢c5ãè”·œám¬ƒbg™Ä&p1¦—+ØìP¨ÒMVîÕÿ ô˃'fŒi,)ôu_óB4 {­Z«¶ªhÄ ‘.8Ò$É€%Eå¨p«–×'ó€kÕ”âáR§a O\Jå€![¦]Í-ÓªV…¥Y«%2Å£‹u÷U¦­‚G†æ&%qæ%xi_Ì@RÓ}I^èOJ)R8po˜ÙÉÄ«ILŒ.jF‚”¡*µqÃO±7&§°Ò·‰¼Øú®]b=}¥ädßÛ·7’óÓÒ ¤2@C¦ L$aˆ;"Û)U!tú×¾}ù+Ð?ßœ~E¹ø€h6,ýpÿ•v±ÊF„d/¬b‘ɇ¥ Ç¥k·¥n+¹-s[.,&,â’•Åêļ“Ÿ5·…-“¾¹ø°aÅ6ÍWíufP„MqމÖÝÿ—"]ÃäiD>ø¬Æ”¹ !yp›î´H¨÷ÄÕáØ€ÃÞ‡ß9ÂDæTóR+ñr?ÉãÒRc¥ñ{ƒªÆxc¼—–JEž¡æ4:CZêyÆ\åá:a<é©1&)”¨|’ç>SÛH6Ñ ÊÞFw(²xM³œÂAŽ–3&7¼ 8"sUÓ¡L5M q•Ìòµúˆ¯‡´!®ØÃÞ+Rš¡jNÊX¡c½6ibÞn*èÇÛba«›4þÆa³X+£¬›´uÚcš‚‰\PW›kƒp¦®z;ôåùfÐà뮿( /«–»šºŠrtG<üý·ï?Rë„«&vð®Ä "Oÿݦ&F!Äã_öE“æÐhÒÓ æÈ¤Y9Ò5÷ƒÑa¨oõX HÜš‘8jÇlÃöF<Ï(䎀ª’H7¾“žÆzn]^÷`ýzûftôÖéì-i( Y`RÅ¥»}ºÈdNVv5 Má@?œ(”rU"DU¸DY†À¼ž ¹ mvtìèõú,½EoÕ™ÎUG ”0‡˜]HÅ_Ïšp²›DsBHµ„.¾|¢¤1&¹î$ÚötW p×Ý·«ÕÇÚ¿µÚÕJ–%KZYÆ?ù#ñ&ØcÌg ck0¶ùÙ|ä@À€„ Ó@h “h ã3¡gmfè$3ý¤IÛ´!¥n˜†IË€åÞ·–2JzïÝÝ}Ú}{ï}çœ{ 0Å€ŽÈ¸ë]»1# ˆsm`FÒn”Ž›¥Ià &蘥ã&>2MÃJÚ8´l||o Ìœq3L›ÿ9ÿ`ÐcYî.C°»ÁÏǯSäåëÓàÜ–íàØvdØÕ2 ^e •è3ôv±ËE6 ®¡Åeq2Pëp„¢b¶%ì’n2›ýžáÅ~²k ÁOSÙqÜa2nü_½æ™@ŸŒ`ëNÝì;¡Õ0c}fÒ§´ Š`?bN2v¸qÍáæ¦o¤÷¡mW_KÍ.Ùî§/sRûÀÚ+éÑÑ·(tp{ë.™…÷:ÙÊ Þ*2‚’“CR…oIîJûÚ\<&™½Íì¥Á±¿^´Œw/äE">Ή&„ÌÈgF¸þû 9úøu˜/dF|ݨ#ÂÍòÍ 49[}k}=Žg¹^¾/k”=Íò·¹/y 1 ò.QäEžqH^2¨¹³¬PF± ­:nEóøœ™Ø•ŠBóLï«*Ïsv¿Î·ZM±œ „7„w„©pž:î{ëÿMá¦P,ä°óq÷ «Xú`@ÈD @.`"x{¹Éqˆ%þ8v¦0 fÙ >É SDi Î3Ôm¢éªy’"$´3|I˜PÈË…ö(C›à “²CÔd2ƒ£ ž ÷}¸õW7æ/œ=vï— ×-* 6|ŽNô™sôdº˜¾<÷ƒÞã¿Í‰„çlNw£’Ý«œ¶ÑÍTYeoÝê=àŠÖ±/-w@m£Ncõrj¹e#µÉb‰DË©¤o:Uo›S›[žm¢šm­9‹òû³¹|V“a*©à¡šHmÑ’À3¡…‘5ÎN¶‹[éjW{[Ù­üsÂæðÆÈj¿³ŸÝÏ¿ ô…wE³Gø#²?Ô…A]òêšC! bšd)-щvÈI¶°×Ûï%½7[èFP„vÓx+ׯþB‡ßï¦L‡Š%-3¤¦±¢‘ñ¯×HDÂ뤃 ƒ½v›ÕB‘V çÁ9+í÷‚ 9â& @óPÚ€^BV4ˆÎ‘Büü(Xá,‡NÄPL+…#]Z€sÈS²¼ÅL•Tã0T£ßQýÂhjÚ=¼H\‡âª ÐHu£Twv¥Ÿ,+Í(ÝpT×ËeéL9 »·E1o…bAo½Ä.ýà¹õgšæµ>‘^3¿cÕþõÓ÷÷Зù·OŸ;‘¬BX¼cëž?¾žþæGèwº=½±¦vUHY¯<Ù¾þ+:>ÜÉxqgËܲ²®ü'.nÙ|s㦯ðK„m Þûè†#t1&éj’¨“R…ZOÔ‰õRº˜X$.–©Â+öWx2»2iž¸œ L ]Ã4È èL‹¼‚^ÁtÉ›èMÌ6™§e,Q$¸{?.V&8dŠÂ ¥4èR—ÆÖÇȘ¯ˆ«æq¯scý:w–ûš£8ü$Y¬ 9³gåyè9¥ ’gÔ—]>ŸÀ“\&ÍÔF³J}”3¶LXFD‚a¸`¾ŸN|›°y8~hòRxl1„¨Aè‚Ћõ³:­—$M)æ%ГגäI”TðbøÿJDÍ+ ¿g½i%s­ÕVÒjj +g’ €oi-©PŽÄA Å¿M`²½öÅ»†ãÕ#£Ã"&9sZ÷8¶&M\Åøe*'\ÝŒN&vUšßòD£—-ú$i‚™[–]n%¤SV*Å “¨©+~ÞyöjÝÆ™å]Ÿ¬Beµû¶÷æœS×ý¦ß™y‚CÉ»êS¾7´¾µtmÇêŸè9»Îøißœs\«…#Yë §5w«ÝŒe³&?{÷Aß´*ôY¾OÈo,šÙÖ2wÚ÷ÕæÝ¦F Ç4Duåú¦gOWš²›”¶ì6åyŒz•=%œÒ;ëÉê$;¨Nz3³ÝÁ¾É\t d]d7Ô9#).o)¿žßÎS<‚ˆ½Å€ óˆ6bñññâ.á xÞ ÂPò9mªÏâôñˆsv3ò¼°–°3ž (bà`  ÍÄÁ@ž†ê}rø¦ åÚªm¤Ã“lYx’ÍL_[‰714!»GÌ1žêih 5˜;á?Òs/>ÒcRNL À?©á ºA !&$L28ǃšz>çëw>Iÿ»ç«þ·?Í=ëÙ¾dß™S»;_D}Ê¥›(e½…ÈgOx»Ö¼ÿñ¹®ú (Î;ü¾ûy»{»w{»{pp‡p ÜÕw€eh\£`*Š¢Æø)‰R¿B Š–Ä˜ÅD“2Τµ3ŠÕÛ´•(“‰4­×Æø‡’'±j-vŠÕA™Œeô ¿÷=ˆNg¸Ûwwï–{Ÿßó<¿ç÷ç?íWºƒÐ34”…½öA™á\WÂ5ÏÅ—ê¥Ág™åòR}Yp=³Žo’ÖêÁdèsþŠïzà¦ï¦~ϼ¸™u#42B¡hF¥Q™Q“Ñê ‰3˜<× £‚)uÕ0U®jýÛÁgå®õ®›ÂƾïV±Ÿu+ªeÒ’ý $+ŽQDóDTu@êfkZ‡ÆAàü°57ÁÎïR=i$çÍ$˜kmÞ¼³â%qPœ9üb‘©XDªd1ƒBÈN,ù: ¶.NQì[a`„¡fˆÀ]I^Á“Ù-§”ˆT‘f L‘&imšÀÎj:÷ƒ+Û6}¾»ñGOœN…½mû/Nìh?²÷g=ŒÙ7ëæ0î±jÆÛáç¯öŸ¼kÀ1³Í~À»È6C(ègžaøé¥‰ÝÌOjRÐ*‡zéÖ`a/%«¬ y/ðþ•ÓG3¸boE 88Ç»(cN°Î[X|ÞÛœñ|°]h÷2£–Š ìq™æ£Ñh1X#èéR»UFU¹Ì ,¢>æW„k@_€T:¿ãº›¶‹ Kþ,nS˜]Ä¡¤‚¢D »2Bpv:’Ÿ Gû â[!2âjžhç%¦°OÓ>HQ7hûò¯±.J ÁŽÂ‹ŽBé†èe;ÌH­•4N"±ˆÔ–)Ò«(^‚4]Ì1HpN>õ(ö¹¾ØÝ3ÿ¿‡õ¿]Ánüð–|jÏÚ©«LsÖŠ7^ý%^aíÅ!Ìb'ž>þ÷ñ¯Ôðɾ ø½s7'}ì©ñ:ö6T%á˜Ý¨(¼S"úB¥J¤¬@VLÉ×c¹ßTÊôJµ¾B\©lPÆäÿøÝ3rcOæ>Y°° +ÖËrÊ gǪ•ꜪÂå9Ë 7ŠksÖ6Æ:bW nåÜͽW ™†àÿy¿wzÐ'RRÃh&u¡”Dz ³ÓóÁ G®štʆ?‰ËË0±jÚf£ÙarÐ&n§eazi³˜’,Ú³èf›GдPÞYÏ%Ï gÂÃ…<³=‹Áþ‚ä{ª Õ†'µåyDk§äqd1¥ÔÐh%TiˆjˆéÈÚ ~d “îP&­³4®Ñ¬›ï{L,ß=©”ÌmÛ¹Ïrãí=×F^ºüÖG¯oºÖý‡Û?9¾óÕ¿y¥ýÄÊŒºHɺÕå=ûqåõC8ÔñpÓ/µ¿Ç]NžíÿøüÇàÁ±·À±t,AðÑo&XhgŒp¥lÛçâè¥if a:4§¦³„0Ü‚Ì'¢£ös‹¥.©[ê‘’Ò 4"‰H I-R‡txòÒ iB’Cô?‘cXI`_ÃHàNĸÃ\7×Ã%¹œäF8qanÎ8N'8pÄRݧ&îʮÖñ8[ /<•º á¶´úJã~öº¯··—»séÒ?—ÿà*l톷rº“3g¬(Ÿ•à‰[%JÓÇ™Åéã´=Ú ‡ñ‡ùAž[ o#<â[ø~‚ç †2æËJžDË›/MF8 AyTcº7ä CSƒÅU#úz‡¨–{´C²EÒÈ&©’¶Ð«¤Š»{ù¾±j4Éó'8Óöñ¬àcN¨ªÿd¿ð°£>À±óWâeR¬Ö„Å…º[7¼Às,.Ùåvºó’()ÃÊp8ÿ*Íp…2\!  éD¡²P0ü)µÙr˜°Ý±˜«Ûê±’g±LÜo2¸­=ÆmnrûIÛûÿb¨5ÕцÖh:žVÞ¯LçÕô…è0ÌY„ñ³‡ñÝ4IvÈ¢Ì j¾&¸3±GöNò¾èuâ?€#`æ/›Ì§”û4 i?ßv½ñÈUî-ÚüôÖw¹üŸ¬jYT²3µ•ÙûRóœƒý©ˆïσn\»POÿÀo‘_ï#“ õF2™¬'«½áå€s¾ð´c…°Ê±^Øèp$Ô o…QjU©5ޣʪç륥jƒ·ÁXj5óÍÒ:µÙÛl¬³¾ý’À»Ö°Ëùåòç‹lß$¿è”Í 'jàÆzžÕ¤ó]ОIYº ½”ÀêË‹$fЉª†V[<˜‰3ÉõbÒŒaíÎC´ý"ê†ÈIyiÐÚØðÕ‚Ágv åHc½¸a´aò„æN %I?sëWÚÒ2~™ôÿ‚Äá†Uˆ|ħ–âÈO-=nñó޽ñÉ5l츳p|øÌ©Î½§Nïé<ÅøpÁÛÛÇÿ‘úôÎ.œ]ýû/rñÁ¿fÎÀß‹²±eïrªßP¿¥Ö¨ÜìpO˜ … ¹Y%þ’¬§²ZÂ]aG…Y‘¹À\¹Ê±ÆYoÖgnrlvnT›ÍÍ™ÉðgúuëzÆgÙCúPöðDØÈå¢jÔ_ÊU¨ÕÜuµzS¹“5®*šÂPP úºää ÈX•m¹Qî9™´QŸLæ9‚¾LHPHð“Û°/ÎĽ„’wán܃G0³ñb,è@Z¢‡‰ð©éc:±b/¡ùåž Bi§[¤¦îÑV øÁ0ÕÀd… V¡xÚÝu†tÕ} ôÎc7ìØ´mpÇêÎÐŽooïݶ­ïoäÿf]݉CGÇì_X‘zÀûôÜÅ+/ü…¸Ë€ÿ< ¯¡ãöÿد¶Ø(®3üŸÙÙ¹íÌìÌìâõì®íõÞÙ5¶±×6æ’].‰ v±¹›¸ ˜â¸\Ú4Å(F"¥­’U5ä"j¥Ø`;Zµ4Jz~ ´éCƒTD£H–¢ÊåÔlÿ3³†’ªá¡RŸöÌ~gÿ9sæÌ¹þÿ÷-©ñ%6îd;Ù>v?ˉº ¢âÑEqYS’˜|E B8ä!&¬âžöÅ£N5oÁ!ÎBgmAÁ}FË•BÊ›™A¤àÖÐ1â5[n´¨¯Ð‰$=õ…Y@ÁCU)žñÞ|dWvë¶GV¬X²Í[ÎÆßØ·zñ™DK¶wpöö&‹ÊfGXËœÈ`ÃÞðbq¸*º1¼#<$GO{~RõK‡"úü¥¾ÚÖªë>g€ÙÀ0Z‘J»…n±[êvuËÝJ¿Ð/öKý®~¹_‹%܉x4ßí’¶¸¶Ç·'÷GöG‡£Ç¤×åW“Ç«~Tû¶tV~+ñvò|ü×ñ’$ÝItØá9#2gDç « ðœ™3¢sFÙdþ/9£¼¹KHÄd‰õ‡âóXWu™ŸRÈ`…™5ÛÍ'ÍwÍ«&ç6+Ì=æÇ&[a¾l2æ%fª  LS#9ÂhdŠ0@4Âݼ%b-¢ªg©î.(cÊ‚óxŒ/·æÂõ­\š."¬vUø‰?jæ<¥3DŸš!úÄÔhM‹ì›“ÌÖs|4…Ž›§R$E*}ŽÆ§´JÊ_G?@YÑ[w¹ŽÉÖ ×1uT‡DA³¶Hˆ›¶O\˜~#u«Yµ‰køc YhG'b.,ˆ ¤­x®¦Óxð§Û¬ø’NïC…aŸ¶éAômétvz ëðá¹£9n6üážóÙ'—XPA×5Cóh.¬„ &ùq.À¬Ü‹·•j$áˆ" ó¥I&D‰K³¨ÐÊhˆJkÐìŒÐo§Ò‡‚ô\êÙGÙL§©Ä>ljx¢É3Òh;–ñvóRví+glWÏžsÿÀзbÇÞ­}ù¢Ô;þ¼K‘ŸÙ5Ô_RR8ü‹ãw½ðêGdYðéÁ«–EJcujky.Y‘^}`giGwGS$Xæ‘¢õˇº»Nnú)ž“hþïLÊùøàôpGDâ‘.Ïr4†Md{²"”hbÚ-¡Ût¸ÜZÂD1b2Éó£⣽ü^~˜…g£Ò)~„¿ÌOñ¬;Ö"Ò–sYÁŒ+D2;Äò™~(%£}÷ýzÃiʆoÎPÍ‘E“ºC½¾^ûr¥t:棓oÐ#¨3šÐ-Dt/GFó?±ôkU‡Ÿ÷¤“åoœÔÙñ&óÔ‹„¸ûÒ‹³ÇÖVù-®ˆžáÇËÀOõ-rA&ä)ɸiG+ o&í!QÁS"O‰ ÝžŽƒ†ú’X©R$ß=FåóÄWA3ød:HeT hÞG.ûˆ¯ÍOçs%SþÏüÌ^ÿ)ÿˆ?ïgý(Eî äÕbHœB–ÍŠ’%Hh3–÷-r%ZÂAl3Óð(ô¥tÒ²Kmjmg?«©Š[a8^à§€lŠ• z(—J¥a¤Áw+¬yMàÌ¢~óY[³‘ÚŽìж½Õ®¹Æ\úîuëŽ.{}lõ7Úža^=ÿÒ–u/i¶y8à|çÖpÀ¾{IŠ/1kô­úQÝ¡‡è0¢Þ˜£ÿ¶¡ÓY+*3Z°,A÷Þg¹÷*¢–“EMÉRŠs‰.U04ð8¼|P¸ÊêÄø”V3ÐÀ/–¨«-\Ž_+´ºVº[ô5ÆVw‡ñ4¿]Øi<Ç}‡ß/\à.º'ŒpŸ‹I—ž„¤’P“î„Qã]MƳÂw…ŽãòòóŽë´<ÜEõö:÷‘ø û‰ûoÆ wG º8ÚcÙÊ5+W­ÜmåÆ(Ǭ\¿9T7k€.ðBŒwÇTJTÞ¡9¦Læ¯çšèú*LŒ¤,Ö ¯‡“\z\JëëÙ©[Їôè’.±@Ú ’Œ!p–&ê¨z¬Y“žÁ½×nÒËödø äPñ:qÉy§(I‚K–%M×q{·žw‚Nõñ\ŸäVC¿Òy!Ä놑vò^§“WQ¬ÄÕ«(ª€¼>- ^|œ ö¼crðÊ‘êÒÿüÃM~Dծ𪶔‚Ú­#›Ç”b~–¿¡æ§Æ Ö2p’E…´¥u$Ó¹ùù©Q¾–X•­#õ뺬Ò£|È.5°´Ü*ņ&Ü!Ú¶0™Ÿ:Ç×ÒÏÁ"æ¢ý¥{ß{Ïg½§çoœ—Blèƒ-èø‹ÓÖ®MÍP…˜Ì_õ4㈶ÜW”iaö!m¬$õ_c“sÌHÄ‘pÖ»—.žÍ²õg/œlX6ñîݱKgçÿ‘Ïþø¦þf÷ì‰ßþžéûüÏÌÐø?¯‚þGœ»&Œ@Áþ€«à÷x/µ!îÈŸ¸™/‡v@ÿÀƒ¶Wúï(Ñß0Ñö÷Ú,²QÖP‘y•ƒÁiQÉFìëñ?$wÛHaPI÷TÕÞÇÆF5–×ÜXØk£n@C?@c7@Ó¤%ÃEQDEQDEQDEQDEQÄ  É j?‚ƒ‡&Ç¿ßhï¼_©é eÑX> endobj 72 0 obj << /Filter /FlateDecode /Length 9442 /Length1 18116 >> stream H‰\U T”×þî}ÿ?3€F\ÔÁ! ¸ ”Å-µD”A\TjMN4ÄC•$’º­±FRMýi¬Ò”Ä%Qkã†&J­Æ½šÐh46Åù{™xÒ¤sÏ›sß{÷Ýå»ËÐ/A!ýÙñ½crGeüH—Ó±Ó ÝÅÆ¿ë «(oÚ»gxým¹»XËfçÒŒ¯¶@?ž?gñŒ™ çw¢´CÁtwÞ¡©ë›E_…¼P ­ŽØDßS}dVPX²hË롲Ÿ ˘S4ͨà ¿Mö» Ý‹Šmý^”÷!"oŸë.œþYà ûW’øóÏâ¢%¦X’½½å¾xþôâÌ?vºh€Ïý5ñj4ºÉ Qk ˜Wd]—uË3ÒlÖgÃá™e^Víåuó“õã/÷ÉŽ©˜ˆ¯ƒœnvQ"|ð€lp b4ŒŽ¨Å¤ã.æÇ¸ˆïk~…¶¼ixÒ(½‡òÆD Â`ŒÅ5Ñ3„|E×<²yLŒÆr¼…#h@€Üªqzžڬ׊æ<9=OY´Ôâm ’Xã13QŠj¦îæ=Éñ \ãHý9ôÁpTâ;´£æ.ó€ù¢ÄÃ8$ÈëÙ¨Â6ÔÒ~UÉf†ÊÙT¼‰wñ1ùÒÕU­6ó¾ÈÆ\ìÁ~œÂ¹I§:.á%|Nb€Ñd¡ ¿ÅZy[0°uØO  g(…Ö¨=—yaE'‰9Y‚ã!\Á#êHEýi¸ —MuªQ+ÑcôæzØÐF4¢Xû Va;ࡼéA¥æ|³üIî)2ó—eBu’•/©ˆ—oÑY~QÓ´s ì’Tñt &¡sDú%¼Œ­8z\E#Y©9)‘fÑe5EmUÛÕ1½A¿ëi0™4¯˜7Åó0Ah"2ÄÖrÁ·«%οâ >\¥‰Õ ÑESh)m wè¦8’ ù¤Ð%ÕOUªkÚ­YóèåúMË>O½9R¢ éH b!^<ü•DçICpú‡ñ7|…Ûx |©• +4H¼M£1´^,¡&Âéœ!–Šx   :«žÊ­Ö©-Z?-I[¬×niÿÑ—èú«Û“㩌ۛ½Íáf#‚$lj‚Îl©þEX*¹\ƒõb}ä±ç¡ë¸!4áŽdಈm…:P%H~[üÈ¢<*¢2ª¤è/TOWèÝa-Üp'ðPÎá…ü¦ÐÛü)7©ö*BEªªB}¨ªÓZí=@²£§én}­¥ÊRm°Ž°æÚümÇ÷|ü¥Çáqyò=ë<;Í0s¨9Ùt››Ì­æ^é•CæßÍ‹æ]oM(©‰)Dº0R: A2? ÏaŠÐ\é’%’ùW°Rúâ l”wIœÇ¤Nâ4nâ[Ü“‰läGí¤&"„zyëx 7Ú$‰tS -¦åo9½JoÐFú—vP-ÕÑ~Éüyº@—é2ûsîÂ=¸P2§òL.å2^Ë[y7àƒRù Ãw•¿¬RT¹ªRï«Ôçê uM}­îkN¡¹Z½vYo¯Òê[õ½úAý‘%Î’e©µÜ²Z¬­aÖtë{ÖÏ­¦-É)q\ÂÏ~ªŒwñ}ªeJµJ¡M´Y ÷þËâRŒ£ìVT‡¨8j¢r^ľÔ$ûÍR—aì¦MR×óà¢4.CÕ“.=‘ÂDëQNÓ\T®¹Z¬qýŒ ²i4±ÚQdéë´J„s._¤SZå+¶ºªÚ&ý–š,/–›w´ÖêûHm=äñê¾Ä§à‹³Òm@ ùH?í¢çYãRÚÄ·ñox¬rjYªI}¢9±WåJ?‹³‰Â°Nåãœú5W*§r¶øHçPÂ&o㎼™J¥áBdÚî¥H*À¿Ñ—ªi0ªé˜| ™ŠtÄ¢8˜†‘.•¦by>UhÉtƒ—Sö.#ùdv,÷ämtRæf ÏPR€×(›·¡Þs• ©¡Ij­L¨ï­/«`¬Ò²±…\ò^ƒÝž}ê0n©´@ý‹zqwm­Ì(‡`_+Ùº+u6^í¦j½ÉD‡ñŽ£^-•ºýÇš‡7× Œ·7¦åñ‡”¯"QLdŒÄ @µ¢‰ö™‡9úò·žÅžÝÍ÷Ìaêý槚ݪ§Ì“Jl‘é2LS¤ÓWH—dc”L–Z¬0I?Ì—Ù–)_¤*Š•¯Ñ™G¥2yÎÊ´·ÊD¾*sªŽf¡‘KÕb;d–¦ëÛ°:i脤Ą!ñqƒ |&¶¿˜¾}z÷ŠŽŠìÙãégx˜£{¨½[×.!Á;v èо][ÿ6Oµnåçëc³ZtM1!*Å‘šc7œ9†ætŒݲw¸åÀý³ƒÃ.G©¿”1ì9^1û/%“DrÆÿI&ý(™ô“$ùÛãeOqØã.‡½–&ËþU—#Ón4zù1^~µ—o-|h¨<°§¸ìåØSŒÔ…+Sr\¢®ÆÏ7Ù‘<Ý7: 5¾~Âú g:Šk(0¼ ¦ ®aØZ‹SFg‡+Åèäpµx`¨ðwž‘>.#ÅšePò4G®Ç0£M¤WÉ^3†%Ù°zÍØg¶DƒUöš¨ý++jý‘›Ù*ϑ瞜a(wf‹¶‘b×e–^úßV”·Kþ/ëUUu…Ï{ï¾·‰ò³€¡$!²™%á'DˆXÈÈ,I°É0t ¥µRDÓú³$mµÐ*È0c™Äê1³p*c'R,Ží(C-Òb~,ÉÞ~çî{Ën -všÉ·çÞ{îϹç~÷œûµ™F¨t؃®†B<á—*‰Úlþ­®Æ«çøƒ!?–nd'CØ|ÞJlSuÞRn ®ð„S½%Þå¡AœGF(L•k³÷fdøÚå)£Ôª x³ÃÅ™ÞêÅ3‡·ÞF¡Êµ¯§û<éÉšüq­îA1o¶húõO,ÔÅuª¤ºs©¬2îN-òÞ „=K=°$àÅF¦ðOÝ -‚nø«Ö0*\‹cx0œ:#r¡ÝÍãÃfŽÛë ]$»÷ü—É-‹í+Ç}‘¸Èäˆó z§ÎË ˼pÍÀAÂÆiª^?þ©·Þí€û¨<€aÕEãáóìl>ÕM-A%ÜPˆÕ=´$s/ùÆçU‡õ k:MÚ<Ö48šøð ôÝGüENÉÿtRº¼(¬ ý꺘¾l®·¬¢&à) mß–U%Õbú)q] ™02u»¤gJ &.ŒwæJ _XäàßRL®¸R@EÕ¢yüawpVì·ú–ì웑x”׆Ùf†‹ò’ë÷$Õ“Ìë2`°ÈÕ˪jB¡[’t~„PÈïõøCÁÐâˆlXâõ¸½¡vã€q T_tN4"ßÜ”ö7Vc˵"°U§’V¯¶±¢Õ§mœ[hwã;gcU`/Þ3‚%Õ­#¡ ´ãóǧZõx+×<\CÓ÷ê)J•ÙŽO§¥ªAÕ—F4Rm)N›FK#z¬Í­Úð—Oê]J®ìh)-HÕ¯î쉦¾ŒW•+éUñŠU¨ W߆‘E«Åj­eåÀ«™>± i‘Ž÷ªÞLèÍ2í—ÄϨ\'d©fêyF/”5h_ Ü ¤Üo$ð`ð0X€1•€ÆsÄAô†µG^1çËFà=s>=c“m(GP&óýÔ*”F–Œ’ÐÞ!>“®,¹ý: _…ú–Ðkä‡â3Úz'ÆÿÕE=h m<îìãm½^‚ÌÂú¿Ãœ³aS7ì 1šènÈ1ùzs”×|^¬¡tŒ£FÛ ë‡òíðÍmhÏ@}úX£àC/ì”ЂÎ9 aC!ô»&éƒîœ~œhGh§~\NÇú£ì}7©}óží=±ý¶M×ów%kæ'ëÙÖk¨$ D­ÆDÚ¹ ¸¶~®Ÿ ZÈß Šî6ÿI1RHöêÍÚøª]ÔÒWl>FóÌ}x%ÖÒíܦ@ò¼xA6Ý4º<ëyÌUKõ»À³ljÔ—b,ÆØ\¬7H…ßF‹SX»–ª0^ªyÎ(ßΤ½fû©‘}ãj¢' ï@߯`×—èówìó¹<ë‡Ïgò¹kó£ Ï†í…bMt3ðsŒï÷…¶á(Å:“ìu" 2ÂÜK„}>:(ß7Ó/€6`llÊQ¿rx7åO ‰˜¯˜³‡ëfn0`ï$¶=¶ù–âØ)šÎü>\Ô[Dkmàüä÷ù¾0gÕ}‰Í}•¹Åœq$ó[¦é-ÚßxŸÌ©¸ä»×Kcyïà–#m›³Yм˜4ˆÆ){Á·kRqißG¾Žtìáû‰¸q™¥ðñZà:¸èHÛgã²K²2©Þ*§‹UàF:å³h(§Ø5I¼ªîØlÓO?Ðß¡TW'ÄYÎ ÛûÈm W—¶Âì¤Ó*þœ í¹¢ /ù.Í4[äâ¼Öi¶èsùzÙN_–ŒDÝ7mÿ_ d¶Ð2”ÿbváîtÑì•\ç´;#ѾhƦäiÛRVj×9¹”ý¬çQ¿ü€ý=÷;"º‘÷ø~Â6ΟÖ2ºd^‘Uq…s)ƒˆµêÎÁætYeTQ±±ñ”cø(ªP¹h*eb[áߟpN4¶qì†~„ ›‘'1ÖˆÈ 3@kÍãtÆŒUó¡Kncû­M´…cYB5öYEœwk¦Üèz_vXëi‹¹ ûÛLïb/•ÒäØjìeÏå È1X¾Ç}T?³^n`°}ÁVo žómUþ(Ä\=t)U—Vv½%?6ËSf¥¤¬‘¯›OÊ©|¥éÆVš¤wËsƺƒyïÚ!/#äI摼›2qNëä±Ú~W¨÷…´øþð{ƒ9b¾{O¨1i)Þi÷1Ädú¶ÙDÕÆ Rž5Ob¾Êßùb< 3räi£RÝ{Ëð;!Ú†sy:ïÛ€5ŠQžjÁ½ê¦bÄ’é®Jù±ˆ†ƒs±ü%ÁSYj×Û8ƒö~¬¦C_…üpå…(OÓ;ŒÇôšÌï@1R¾m”¯¦\g_™×k„ÎC—BуП]¢"ý¨ÀhN‰†¶ÈbÐó@9†º ’ÂÓúp«"VçѾ:úH~ß½‚ÞƒsšÖRôO ®¸LïÐ4ý£)½B?õ£Ÿ¸SxAÿ2)­™ômŒÍý «Æ)zk”]NƒþÒ—‚yôç¾ýÈ×B¯ÃÐ ƒŽ…ÆD&¾ˆ·ƒøÇ)¬^ÝF?p§éûÍ)üŽj¥ïÁ©½ KÿýæØLRèn¡løúºoÝË”WèN­Š~ &‚aÐfm9Ýä>F7øVÓçCcì N¨°‹>Óñeú,œcG¶Ú ÿ)šl†Ì]J6ɯ…Ò4ᮥí¯BuИ¶šFa5Tß1ôo£õîFZ£½Tå`“ª†›´ŠÍÄ ÏÆÉsHÀŸ€ ªõÂgÂ9á”°Nhš„F¡F¨*„RÁ&в˜/ÎsEQ´ˆ¼HD$ÚR™{j‚Æf‘Yx†¼Ù– C@D°HÐr44AŽÀf}M‚qú<.I’kbz@I¦„Ìj½EIêª:G0þANêS›Prc©þhMy ç~ýy=§<†õÂ$J®9A¬“£pW¬íLá q¸X/lï…Ý*xøÍbÆáÃovuaH߇{"ÎHa[ApIü¿À†YTžNå?§R¢ÿ(¹¦SÿII—îeLIWR¯ZSúbç(9JŽ$â£dQWç(ö£‰ÕÌ=ñ.5š2¼Üq¦>š•mÄÛ™ ¬Ý”Á.22ØMY(“=“ÁUÎêüf:Ô:›N<‰ü¦Î/ž4u<ΖUQk">ÒÚjª\÷°jU]÷Ì¢s™h$‰/Ä$#…!Œ„ Íð¢§aw6¼*^e†ƒOÃÍÙpw6Ü aåÿr¼ûŸ¥‰-kb8¹ªsDD±®ö³ìw´™wRÁÙŇ‹¯ábîS”§té¹å1=¯<†"§"‡qCR—Ö²Û-£·°eüªm™«[@*€±,!·sñ5ásf–¹à–fC £ £,O åƒÛ:rö¹Ù î¨íLl‰ÃŸQýJ"Þß¿{ö@ ú¡ß×§$œ[ ’ES¡(%â 6¬7R”>ðô}µ»öŒ²¯øÁË€´‚ǰY@v(‡Oaë%å ¬q£ù¢%gâq8¯¥XA°.ÂOÂ+å‡aíIE -?XÔè.pTÀ怗rSÕô*å§`ü¼Ì 7•³9àûè±Ú#É8ˆ‚r›­Í¾ Þ~—Y“ò†ê¶ö·óOØNØÏ埶¶ë6Ý>oš#k¾#*áÍ£"̕ͷ×Úlý2¼©(²d“UÛ܈ ßÙ÷;•¥¸„ÚÈ[æ‡òò¤ªjY’iÀ4‚Z˜™2)…}¯G†…IaZ„gªåk¤’jž4¿J*’ªr_þìrXSÕîϬ”uïÄŠ¢Ýg>y EîÃ/,?¼?˜Sþü}ò üùsgà *( 1 /‡Ãƒ,tcQ#îîÆ;1ç÷û¼»,XÊ˪°¿¹©ªRT`‡Ïh#ÍM•åe‚E ƒ:¾ÙöÚ·oüì³3)ìuØóðÊ/Ç*›=Á}kÕÚ%Må59[ŸœY¼°óË¿ÿ~ì%¾"¹À™oãªCŸì²—÷-]¯;WÕdfønXû:Æ-êÉ[MhqÓxSªõ_t—}lõÇïwç÷·;Ÿí{‹_ξœãž“Øn;Níúš&´I(Ä’ÚƒVŒômúÂÚµÈV +ËT¡LCÐL¢Zij–Òâf“Z©šöZÉlTltI@e MY4Æ’ìùÅòǦ8~œ³ÏR¾Ÿçû}žŸ9Žê‰¦u° ”Ô’VJn&6¡u/q2ð¼ö|òÅu/Ƶñä:Σ ¾Im2y¡£ŒÞ&¯ù¦µéäµu¿öÝf>¡«ŒâR‘½€”˪”Ãiq¸ MÍ>“Ê:+ßw ir¼I%5M;¬ÂY6©²~³PUV«$Ga´¤7F¬í˜Çóü^É¡;HÇ”ÛÉ*£–Qç u™-/߸âË_b[&{uN²·5J:ÿTB’Rdy¶èPî3V@A©Î%WqнæÿRÃ|«^–Ïc|ùdþ¶a d ø1¤lŽrñ¶Ö\Îb­½bWò¹l Ьa$Wï`MÆÒÏ"ŒÝË©mõ§/6HágwÜ×Ù·{ì'¯ßßPlè­«{Ô³4––euÓk±€¢ œ3ïÿüÇ{9'ã >à[(eRCÃîÉ{úUûŃrãg;BŒj(.~·ØÕ—žK7Ë÷£CÀ;^{‰:Ká°õ‰^(D¶G†J˜œn«ß)S–Š[›bo±µØ{ i#í¬µ›ì6W(F†þH¤ ¸áRËä[oë>«Í6µÓ\†æ ¸œ¶Š,Òj¿ëŠ¡Xžå`t;\ãöid# ]ŽúK¸êtÂ_ºN£;4¢•5Ê>“9`¬¸ü”4ÐF<ã8ø¤ná0{{å Ü‹cë¡-ÕóÉ*”Ž},¤JR•Í©*¶&•I¾µóYÅRæ·Z€SÃzjÕ[¨Ë>Ôsßi#|èöØÔèuÔsþkƒZÇô7{nÛetE„tá tdƒÖ÷p×@Ý©oMî}m¾Ù_ìé~äPد¹››è Êa_5-Ï‘¯œ ó»o¹Þ¼»¼¼ ·1Þõï㾤mЉœÐ~èºèšä&ùKÚÕȿÞ¥9ÑA½7nGv;ä+ãXCJ×3tƒŽÒ.W2ôG±ÑhÐòm~ ¯XñJÃH‚¸qn’3qe2©DgÂe ®ID™þ òÁ5_úàÀjëJÇ>6„t} ñ¿:?Ÿ2ªI,j>›>‚°|5-³>ê^ÿ“µþ÷Ýë÷[ë‹…Áã¿ó²¯·©›¸¸a‹÷”?¥nô yÿ`±8ˆ—ZóEŸÓG«»üKŸõ´«yô—n…‹¡D/‘ ¦vèÝ(êлلÉ‘´²÷PÃþanXž<øU(²~¥u¬…š¸Lµj”J5õ±ø^¦9S ™šˆå.ÇùQ†ª°¸Þ¸L‹µêákÕ¹zþY\¯úòu:ͬÿbÎ?„(6—]í}@…y(«²Â+®®¿MÌ>’+j­©°šH0v‡“Û´§£õçX_´ÕŽš©³‹¿G¯=Ú^lßÕ©õº-.ãöÄ»äD¯Pö„:aú:(µ ‹þ²Åiq;–¤)Ej¦¸KËLëÔB¦ÏÔ—ÙaÚ‘ÙoÚŸyÆôLæÕ̹̕Ì?3¾mHŒ+TœilìhL·õ6N¶Õá2Éu”17q2Û`Ó\Edë‚D ÊA*Ø„H’m1¯k²ÊYgK…¡É™")²‚F”<ãÙê!=eô[½Q+ÒH°BÔ1udÝ][žÖþ ‘´¶ŒŸ"ZZÓµëpå}ͪ‰­³ÔyÔH¬¤’qàà–ê¼Q¯2‹Fõ?Uc¾º2á €®à…À)À:ˆçz-uàa? î ì(ËŒ-ÂsØ4x¸ã  zK˜„TéàœÔ²–Ç>"UÛ }Í©é®þ³ƒíA1èU3²RNå6§žV¥×_YÿpS]ƒ@]úÍÑ—³q¹=}q´gëéž¡´åÛ»‹ÝéÔ6ãD÷Zýãœ3 Ò€Ís¦3Dí¾F˜—?˜ñåÍååô“t~”•H™”©˜G¦cL}°>”&ÓTŽÑIê¢72[Å­RghˆØ&l·KC¡aâqòqêIñIigp8t˜ÒüÅf@¬Ä$ÕbU¾«ã'çSrÙlŽ| ÿå¹)†uzÙæ¢Ò}¾¿«OzãEÿèô3¦3KŸZüy6èöy”!îèSÝmÛÉPojä{8 ‹0Ç_—)Ä¿ôÍl’MF{Ù^yT½¤Îš§Õ[ª] ø)b<„ òñaÚãA†I"‹1^dqUÜw%9w†á(ˆÂ:§2 úŽòãü$?Íÿ7ÃÖË+Œû„ ¹Êè‰Ëƒ3—û‚GéPžB7Ð-tYÑ,µ•¨'ã?݇Ï`I¬ s FAdðp—„*˜b–,[sMN¬]MCïªjæ©å'áYO`ìžþÄå È©úY•‡ ”q€e˜©ª°ñ *๔πºœ ³²˜ Œ°œ 0K¤0OÎwt11—Ó2,÷l“ Ò*b\ïa*!À¢ùïý¿°žuVzñ&nʆή­[½:  l£cÆOÌüØgôBÅlócÎÀÎí*æÅ£xâQ<ŠGñ(Å£xâQL*f`b`÷[E˜A,F) fc ˜ +!\Ü=€”ŒÎI±©T, @’Bl I © ™ % eÿÿÅAü ¿Äÿÿ¡¡‰ €Aõÿ#^»8Ò ú˜”$#ÔÊ@a³Yn báŠèm†°™€.œ e3U,†²Y€ì—P6ƒ£¾¿·¯§‹“vHfnj±_jyP~nb^@°®S~NŠgIbNf²ou”0ø3x3ø2x2¸081h3„š ºb? YÎÄä'2äƒ7ÈKeHg(eÈŠ‘¤S¨&¨/¨¾(šT ÔMšý´6{Ìk>1Ø0d1°cK€AŸ!µ®œï±ÃŠdÆ @ ÄƒÑ iLB@íp€ždì€Á˜Ë@ ”á ‡s14å0=K_o3Q"žßæ+‡$Xõbù=K@ôÖ“«T~ÏÿÛùŒÃ È¥%°Ép¨•V endstream endobj 73 0 obj << /Type /Encoding /Differences [ 1 /bullet /equal /minus /asteriskmath ] >> endobj 74 0 obj << /Filter /FlateDecode /Length 236 >> stream H‰TP»nÄ ìùŠ-/JÍYJcÑÜ5.òPœ¤Ç°¶Î€0.ü÷a9rR Fììkfùe¸Î&àÑëÌÖ™ˆ›ß£F˜p±ZÆêT£‚zUxn-á:¸ÙCß3þ™“[ŠœÆcüí¹yþ Fë8}µß?™÷n¸¢KЀ”`pfüòªÂ›Z1§kkáÛºÐ܂ҕ[ú¦•: èÌÿëîÓ|k)h„™DhÎW"Îô'¢-]NÄ‹dyÉß8ÚGærõcvR.TLlëðqÄ੤Ç~Ï•s) endstream endobj 75 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 76 /Height 99 /ColorSpace 113 0 R /BitsPerComponent 8 /Length 76 0 R >> stream 8;Z]!;%g_g$q0jhkM_JSj>mb["=X3s.?5G%LSNB0Dmj@:M@`,J+iHef?-b&Ve0SO[ 7T2abm&UO).Mg'8r`iNkl-2)]>$*GmlC?&bl#Jqm<7qTfq.oIl)$K1)FUhS<1D'tb 2XO9I>p=T>a&uYY[q*nVSBh92A?[Sh4dJa:]KO]*QF=;/W?$[ZHOoL%jFb!,dko#j [6aB(;t46Y=Tu%&Zan^VA4pstUR_F`f:/?e3m+\2?OkufnLL8mUi)D.EaXn(-L+sD ?RI"M&4-ZUR*PcrFPG(~> endstream endobj 76 0 obj 285 endobj 77 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 76 /Height 99 /ColorSpace 113 0 R /BitsPerComponent 8 /Length 78 0 R >> stream 8;Z]Y_$L)a#QV[=pMh#$M27fGP4ZIU'N)eB!!!#o&?ffLe@QGONY6Ur>PksGZ[2]Q !!"K9J,oY\-*$>~> endstream endobj 78 0 obj 82 endobj 79 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 76 /Height 99 /ColorSpace 113 0 R /BitsPerComponent 8 /Length 80 0 R >> stream 8;Z\uCD)7B%"u1k?1P1Cg$9?V9$JV`)(TE65K6bAf1fWs5R>b".`eBTI[pV@7ik7K 7Y5_PZEu+W;PqX>jIe'oEl.-F+26;+[aq>-*k"-iY>+Z>QSGmO4R%*O;d/WRN9"lU fD6qo?7Ijp,PG$Xc+Mcb]-E1dDsb9Q-Z7%'qq+!!mE7+qR/V5"Ni07ec*:"/*9"Xp ^\1]`No8(r#iTQi3*JiEp1eH$YY9_kd1D`%^V!oE(gip-qb[iN'1)sJKFgHUq$3Jn !*[oR9`~> endstream endobj 80 0 obj 273 endobj 81 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 76 /Height 99 /ColorSpace 113 0 R /BitsPerComponent 8 /Length 82 0 R >> stream 8;Z]!9+lk"$p`Kbs,2!`?*a)Poi$EpO#BDC.'M0@*!sq&UAtC!%!.Zd^aC/mp$'qM e6fGe#PCW"rXH-%LVHLpuU^e>(e[0#rjed'\-^\RjqLa.RB1a>+(8Zs?!,8\_^[*L*1- f=1jH?5'M/i?qV1:T(AmO]X$#L`R&P+6^lf_M:pr_GQBFf5].YD)us]m9W&;=CR\F <*ohCJ$LCunKQe`#;qjO_H1#ATee>2R?X%g:#*M=Toa-)=!qRJnEQ\cG0KLAm`9)r (t=a`IV0p9=_lW+h18!.9JA'ujd2E!(X"%GZ\(Bt! endstream endobj 82 0 obj 380 endobj 83 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 76 /Height 99 /ColorSpace 113 0 R /BitsPerComponent 8 /Length 84 0 R >> stream 8;Z\79,<.&%*XJ'?_m&$$VR[$<$F^o;TJsA$mL9tR)G)<;A6]n67LPQ#>b-0%hDU< T27q&U)L,)+&l=*nD]E(FoABF[>$i>P@492BHGZOaFb:rL*KloRVAl!k_*tL^h?*] Aaf:\6;-oO!Q-LS9NkP9pTXMpqq]t;jh]p+=CS$cc#M,12 4[f!o*I4L,[]Oe*b6q'O.ON]l?T7<75@RV=j]_0U5:5_@$4(k:jfn%.Y@0_R`se]5 $si%AD$9<(-J+2KND-4V6Q7C+1,3d<^VA)mkrt@f]aKVBgO's>FMX(Ibl(E)Cgpit Nb#.],bYd&&6mt.8rs>p[HL8Md-NJm(0njS`:4iJmRU6Y~> endstream endobj 84 0 obj 443 endobj 85 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 76 /Height 99 /ColorSpace 113 0 R /BitsPerComponent 8 /Length 86 0 R >> stream 8;Z\7>7uQ2%*Xe,5Dam'9O+]ce,;-@Gu&pBfV8FB:/$>jg,YTY%K,*/.M2R5lClBJst?,]M+:A,``]Gl/7 Nu`Bod`0H:5muqI@8R:#@*'qd@a=]R][A9EaIJXm"Z^?p1tX6.DfZYr^HQhR"1`0? 0Y>4X<&=\>;Zlq5LJ`1SU&+%8;$UJ'W/6gM4^>fSn5Q,6mDM.K^uq9O Zj!.aYjj(%`5GB[>](GrU1IL$CG0X8"+9UEICG7qHAsGmlXhO0p^R9 endstream endobj 86 0 obj 457 endobj 87 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 76 /Height 99 /ColorSpace 113 0 R /BitsPerComponent 8 /Length 88 0 R >> stream 8;Z\78HOMe%-6FJ5>lG!,tG^J;3l`0JOIkNTl*sZ@hKpdFN?c`N`%CE:5AfJl0`Li (5cXHYT`:Wd4!/"d1KOQOhqmg$)p.@E$V,R2nMTn"",MGA_'UP0)f` O;%T0ZmRFT(j/b%5,t9:C,D9QY"*Pa]rT@Q?b)NM*-$qVGX;%hE6:od1?#ZQJ.!YO>Wu`Ri77P\#SXV@-K=iZ7@!LN [VL!`[H\\#oY,F.=53[riC4*Ui^m?okjM]!,KoJ@>g?u,_/@26S*uK@P;,YTR"6f< H'&Wf7@SPN\!83T>i#D`#eCCu@F1M#_%7HN?s8"PUT>PWGt:)7a"b:1!3 endstream endobj 88 0 obj 460 endobj 89 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 76 /Height 99 /ColorSpace 113 0 R /BitsPerComponent 8 /Length 90 0 R >> stream 8;Z]">7uQ2$q9u#s"!'S^"i!S*>F)k+q<2MjB*FW`oP8e!+>$M3o=s>[.<9mcWAT) *ml:gTJ4W:/XBG$FFfL%<$E)UEK[IA[*icdJ3-oPap.Rs6Mp5[bM00$Jd^fl]XWc; >iemuF-"nsqs&k/[>QP>Xu2&klUjGaF^W[b7#n;QStt[6?eW)E8U^5u5iZcm+H#LE J@lf[0Kl3h1[FtOMECF2D8tkH3V4NImFZO;d3[EG:Y1<# l'o8ij'R'A/C"sIF_U]HhcOJ5]"^=Ak,q([&.(74jpMPa<:^b?27&>?V` _L'&RgB4#M=KnmAp#;^tHmQ-`eu80X!5X1Qrr~> endstream endobj 90 0 obj 369 endobj 91 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 76 /Height 99 /ColorSpace 113 0 R /BitsPerComponent 8 /Length 92 0 R >> stream 8;Z]!>7uQ2$q9d*r`?t/Hc^G7Tc+uG&=Pq`P@M"\O3:7V(dp_-R(Ne.q8&QsHN%l4 Q\[*FrrA]q*WS?Ln?a3@\3V;7o"bubo=^F@dOU2o0V4-8C3AV*A@:V(7())i@.KX0 ?q^t?7nl,m`dfnQ'3 Yl!nrfAf/q`"sF^n;8aTUC-llFKNSl%8B[X&!65 k/(iNLu`8L];_Wl0>fIP__;L/0q,57F7*;Z%D$A+"-;X6\T"=QZj endstream endobj 92 0 obj 399 endobj 93 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 76 /Height 99 /ColorSpace 113 0 R /BitsPerComponent 8 /Length 94 0 R >> stream 8;Z\79,<.&%*Z`g?_km%,tkF>X!e9"TKj`=)(Q5I@1n;O+:ba^'Rg39prrp2qsnV' eKkpW*pXhVa$0b'LVWiNC)k>O\:OFe0jcDs` CjEC.G!O)`!/99&qu~> endstream endobj 94 0 obj 481 endobj 95 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 76 /Height 99 /ColorSpace 113 0 R /BitsPerComponent 8 /Length 96 0 R >> stream 8;Z\7>7uQ2%.o>P?`&&#lVsts65#q,(H]OC>/cqH64s>Rckb*L\#'m\n::MQ4Y5Le $C>H#_SUMl*Lh$'Bd]!e5q;&2rEkea;I1O,e0GBcCm[-a)cJ(#EP]M`O)bSRZc^>,hmd#F_Au))l$]?aj/G#GO@'"H?)J!QoTT:c)(J$>Q$p @*/g"/B;ct&.2`gc/8>,C%l//BP$O\O7rW<:UDD~> endstream endobj 96 0 obj 437 endobj 97 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 76 /Height 99 /ColorSpace 113 0 R /BitsPerComponent 8 /Length 98 0 R >> stream 8;Z\7>8"gr#is&'?RC!e3mEkm5*?2.PI>:3-Sc8L7&2OumKG%@d0p^Eo(U=:>h&rl D9',9Q@ZIlrI,D-l^Bf'],IN\T6G@$jB4C2[^ViEg7:@bBZW@GYLIfV?Yg(7eVAHi g,Cd2,+5.s8Caip9`]m"#Dj7`BfB@DkdceoCbP(ri1:_-7'^7?I,;hp4R-=e2o%)I PHmHAWtiam)#EpZ[Vk->gmf-*G\tT#I$p1G!+!O=@q0N"o3Ul6eRs2#-u%ap:#,"S a.B>,'=UrmD,!XP`u^S8o:Aj264]^,KGVS@9m&I$g4,9nM<"9E%b5b"*4OsdU#K4' )Jm/R8Wo:C0!qhr"_Q:ep)o*@J`h^K)6$Ai*=dkBiV6UkRY<7?l3\\.^M/K)$k.+m ^Z25&]r#Sc?-YLrp^@0%m5q!~> endstream endobj 98 0 obj 422 endobj 99 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 76 /Height 99 /ColorSpace 113 0 R /BitsPerComponent 8 /Length 100 0 R >> stream 8;Z\6?.+?J%*XY(^W?0%]B%A?I'j\Ur]i.m:<.3k,(n'N#q4ec=MWinn,`"%d,XM2 r_s\gA3W&75jMo]nZKIY8`K#a?2rK,2C,oET#>f.Hu)>[i3s/85oeKp@!@1e%#\0C RqMQ9\j35>9er68$PAb1kQmY*.2k;P0:QHS!Xg0o ]m%"\>rBsnI\iW!lL6Xql=Z#bN6]T/Z`*oWhiSCa<:@NC#/ 2>.J66fY5:9f p,7#9B4HGdHeYHf@BZ!cgnc7ZH:aDTe:RJo,[%TF7t!,h/1euM[I&PRS)B"(p](2u -MP"U@G*h`nNR$503>j~> endstream endobj 100 0 obj 549 endobj 101 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 76 /Height 99 /ColorSpace 113 0 R /BitsPerComponent 8 /Length 102 0 R >> stream 8;Z]";%eI7$q0^)r@d2:\;hc?:!sa(Cm8qZ-n5rQgQHHs])Ep5.!QN@6T3NZO11V? =]5oqI9162RIknhmJ.4&PfcbK(R<+cEaeOBDeSsS8BE**3rb60/1G"n6rl"W.R^m3 ^uAY;=Cp9-eim6jS:S\OnM43=C6Z[A.dd[L%m_J3?N@$7@4"+Z_bMZ');^9PXe)N hZuan&hIRY>CE4m!`Xrn5_6Z'Q,jA7dbHH+"SEWcbZR_<*@OJgYtB%ooiJpG8cR-b 7p)PZ@#-ZWW$':-eTmH\LSd]XYPdK/QJ6^6D7*r,s6LE10OO%%X.:/F5!eo#d=[+l3K>,nlT?.L0<;R VH;8[g$*RH;n+M70WNU;Uc2o1cr=CeUmo8DX6VHBbHbs=p9?70!g!$EHG endstream endobj 102 0 obj 611 endobj 103 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 76 /Height 99 /ColorSpace 113 0 R /BitsPerComponent 8 /Length 104 0 R >> stream 8;Z\75n\em%*Z]jJ&]7a44Pf8JY5AdPbDoq3[j;@Cgr;^igl)Je"40LN'-#6YG'm\e.=%Me5$"nHGO-NtOROa6iZBoWp?&g/KkYQA=>`/Da FB,HiqnY3Hk*G.j(+#]E52/(HCNJqSW)728>eu6KBe\g]r?%PV4sk ]\leV)ER,opSt&+"p#b=6:ap#NTK$BP_pBi(\Zh;B_ng3R#IZm`pB8rUgceHW$M;komO ,+AjRn;qXOEV:&FY%:c0n%Q\.4CH-NgU<1:n/U$`[qI.pp^@-H$.6N~> endstream endobj 104 0 obj 452 endobj 105 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 76 /Height 99 /ColorSpace 113 0 R /BitsPerComponent 8 /Length 106 0 R >> stream 8;Z]"9+lk"%#3GSs,2!`?!)Erlp_gau6+1*'\;Zn:bBPZ0e5_g#[C#3#biQNV8El,%4SpE6:%rXrGLS_<`M2a!]R.ct:^Hnb I[h>LNS&`5@SHP`3eL3u?#2AUg.ZL'X^-BXJUQY67?NTkD2DP92:jHs:13"O+m08M B_TkA(Vs>+0O)tP5 h?o&9#6<(>jhL~> endstream endobj 106 0 obj 411 endobj 107 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 76 /Height 99 /ColorSpace 113 0 R /BitsPerComponent 8 /Length 108 0 R >> stream 8;Z\7>7uQ2%-33@?cK_=3`X?Ji=U?G1q'L:Nf8_K,sVT8OG+R"bFG5b!Vu?KB)5OE L1idT:Y-$/9k0ab,s?L>R@Qn?k/D%6KhDYnP-EmfT=51:2!2[V3X)-f'63LC`9Y(( LdfpcM-tp#)HBL"c$lL9a%S%I?Ugb.R)]TIf0RJ$hpZ7foW2oCcS*@*X6X2bn-'L) Y/4lgDXQM45B5RL3iPr`q(T WRO6.Nm".?eA_FE0c4r<:]Z@/E"2H]#%$f$;Z.I-'-O8\gGAtp^c?Th%/FBO>>de* *:q=C9=IQRFNK/MlipXmOpRPrIg,X!NFW#0/]83c(j_.kO+SB)(8Y-\GVGq<%HEaj [Z3[7(.4OQ_eB7$_7O;c$s^dbn4P>Y-!G)Fhf/Zi3nRipci#87?AfOAVKSYjcN)L_7&U~> endstream endobj 108 0 obj 466 endobj 109 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 76 /Height 99 /ColorSpace 113 0 R /BitsPerComponent 8 /Length 110 0 R >> stream 8;Z]"9,<.&$q2s\ru3CCpQD4S;35/=0M(K,kO`&<>"tTL^nI#2S-q?`-mLB'53)=Z 1lfO"pAr]k'*aZFS+3'k_-.2>8dLI$(J9LEB1eH1QJj?`TsTH<3k+ HNp%(+:;IG[10+_(C;Z+>36\,0'3[FEoM=[eB[Wo@Gd+tEh`55XN7@QO7aFoidB0] kj+/Gl^,#hr_STjH+@[>Br&[1^/Rtc endstream endobj 110 0 obj 306 endobj 111 0 obj 481 endobj 112 0 obj << /Filter [ /ASCII85Decode /LZWDecode ] /Length 111 0 R >> stream J,g]g+e/h_!_gCtO=0f)$P%cIi8Zdfc5&3j_8$7g.@L`YKUJNGBP\poR=_;Dl'P(T (7Boo^^S:71(MN]ZQX/+Cbu.lK"p74pe1T%s.DY%&\1TdJhr54.M9au6>79n6`Q:4 PbLSZTLEE(8E@'*1mg_*eTnN*;*'V3+gm-EEetX%;Bo$ur2ss*N`.-!.kG_q6GDD' dKoL!8Ka#EV,@V!\j8ZFbp6EE<9cn=N6j0nf;(&;QU6bUD')c@\ 9-d\DA=cZ0Q>gIM$$;cd2O@&a;X,Nn_aP(]I1aRc(K1^ue> gF/(+GaKo$qneLWDrQ#;5\S(\$q'4Q,85`-8;S(=Z"WSBOV*FM)4,?B],R endstream endobj 113 0 obj [ /Indexed /DeviceRGB 255 112 0 R ] endobj 114 0 obj << /S /D >> endobj 115 0 obj << /Nums [ 0 114 0 R ] >> endobj 116 0 obj << /Producer (Acrobat Distiller 4.0 for Windows) /Creator (Microsoft Word 10.0) /ModDate (D:20030703151840+02'00') /Author (Richard Herveille) /Subject (OpenCores I2C Master IP-Core Datasheet) /Title (I2C-Master Core Specifications) /CreationDate (D:20030703151808) >> endobj 117 0 obj << /Type /Pages /Kids [ 132 0 R 1 0 R 4 0 R 7 0 R 10 0 R 13 0 R 16 0 R 19 0 R 22 0 R 25 0 R ] /Count 10 /Parent 118 0 R >> endobj 118 0 obj << /Type /Pages /Kids [ 117 0 R 119 0 R ] /Count 18 >> endobj 119 0 obj << /Type /Pages /Kids [ 28 0 R 32 0 R 35 0 R 38 0 R 41 0 R 44 0 R 47 0 R 50 0 R ] /Count 8 /Parent 118 0 R >> endobj 120 0 obj << /Dt (D:20030703151839) /JTM (Distiller) >> endobj 121 0 obj /This endobj 122 0 obj << /CP (Distiller) /Fi 121 0 R >> endobj 123 0 obj << /R [ 600 600 ] >> endobj 124 0 obj << /JTF 0 /MB [ 0 0 612 792 ] /R 123 0 R /W [ 0 17 ] >> endobj 125 0 obj << /Fi [ 122 0 R ] /P [ 124 0 R ] >> endobj 126 0 obj << /Dm [ 612 792 612 792 ] >> endobj 127 0 obj << /Me 126 0 R >> endobj 128 0 obj << /D [ 125 0 R ] /MS 127 0 R /Type /JobTicketContents >> endobj 129 0 obj << /A [ 120 0 R ] /Cn [ 128 0 R ] /V 1.10001 >> endobj xref 0 130 0000000000 65535 f 0000055605 00000 n 0000055772 00000 n 0000055876 00000 n 0000056110 00000 n 0000056277 00000 n 0000056419 00000 n 0000058957 00000 n 0000059124 00000 n 0000059339 00000 n 0000061677 00000 n 0000061847 00000 n 0000062040 00000 n 0000066082 00000 n 0000066252 00000 n 0000066457 00000 n 0000069924 00000 n 0000070094 00000 n 0000070311 00000 n 0000074765 00000 n 0000074935 00000 n 0000075141 00000 n 0000079053 00000 n 0000079223 00000 n 0000079465 00000 n 0000082335 00000 n 0000082505 00000 n 0000082710 00000 n 0000088425 00000 n 0000088595 00000 n 0000088788 00000 n 0000092133 00000 n 0000092977 00000 n 0000093147 00000 n 0000093353 00000 n 0000099032 00000 n 0000099202 00000 n 0000099396 00000 n 0000102927 00000 n 0000103098 00000 n 0000103279 00000 n 0000107055 00000 n 0000107226 00000 n 0000107420 00000 n 0000110044 00000 n 0000110215 00000 n 0000110434 00000 n 0000113244 00000 n 0000113415 00000 n 0000113634 00000 n 0000118251 00000 n 0000118422 00000 n 0000118616 00000 n 0000120792 00000 n 0000121381 00000 n 0000121821 00000 n 0000122018 00000 n 0000122860 00000 n 0000122913 00000 n 0000123647 00000 n 0000124041 00000 n 0000124094 00000 n 0000124831 00000 n 0000125673 00000 n 0000125726 00000 n 0000126463 00000 n 0000126708 00000 n 0000127353 00000 n 0000127570 00000 n 0000167252 00000 n 0000167459 00000 n 0000186094 00000 n 0000186326 00000 n 0000195858 00000 n 0000195955 00000 n 0000196265 00000 n 0000196709 00000 n 0000196730 00000 n 0000196971 00000 n 0000196991 00000 n 0000197423 00000 n 0000197444 00000 n 0000197983 00000 n 0000198004 00000 n 0000198606 00000 n 0000198627 00000 n 0000199243 00000 n 0000199264 00000 n 0000199883 00000 n 0000199904 00000 n 0000200432 00000 n 0000200453 00000 n 0000201011 00000 n 0000201032 00000 n 0000201672 00000 n 0000201693 00000 n 0000202289 00000 n 0000202310 00000 n 0000202891 00000 n 0000202912 00000 n 0000203621 00000 n 0000203643 00000 n 0000204415 00000 n 0000204437 00000 n 0000205050 00000 n 0000205072 00000 n 0000205644 00000 n 0000205666 00000 n 0000206293 00000 n 0000206315 00000 n 0000206782 00000 n 0000206804 00000 n 0000206826 00000 n 0000207404 00000 n 0000207459 00000 n 0000207491 00000 n 0000207537 00000 n 0000207825 00000 n 0000207972 00000 n 0000208049 00000 n 0000208182 00000 n 0000208247 00000 n 0000208271 00000 n 0000208325 00000 n 0000208366 00000 n 0000208445 00000 n 0000208503 00000 n 0000208553 00000 n 0000208591 00000 n 0000208671 00000 n trailer << /Size 130 /ID[<39fba8a04ae75ebb1483bac48e64f588><39fba8a04ae75ebb1483bac48e64f588>] >> startxref 173 %%EOF bladeRF-2024.05/hdl/fpga/ip/opencores/i2c/doc/src/000077500000000000000000000000001457144405000212735ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/opencores/i2c/doc/src/I2C_specs.doc000066400000000000000000016140001457144405000235360ustar00rootroot00000000000000ÐÏࡱá>þÿ )+þÿÿÿ&'(0Ì_Ùoÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿì¥Á5@ ø¿žRbjbjÏ2Ï2 ~!­X­X3E¡Éÿÿÿÿÿÿˆk5CJ hw{ht%5CJ hw{h{2˜6CJ hw{ht%6CJ hw{ht%5CJ0aJ0hw{ht%5CJ4hw{ht%CJ`H*OJQJaJ`hw{ht%CJ`OJQJ$jhw{ht%CJUmHnHu !;TUV_‡ˆ´ÅÆËÐ×ãûòòêòòòòòåàåÞØØØØ$If$a$$a$$a$gdGM™$ Æf!a$¤3MÔMRýýýãäèñ 9.(($If  ÆàÀ!$IfÆkd$$If–lÖ    Ö\rÿ7¥fU"ÅnÁï Ö@@@@ t¯Ö(ÿíëÿÿíëÿÿíëÿÿíëÿÖ0    öã"ÖÖÿÿÿÖÿÿÿÿÖÿÿÿ4Ö laöÞÿpÖ(ÿíëÿÿíëÿÿíëÿÿíëÿ    % 7 ` … ùcùùùùù•kdŒ$$If–lÖ    Ö\rÿ7¥fU"ÅÿÿÿÿnÿÿÿÿÁÿÿÿÿïÿÿÿÿ t¯Ö0    öã"ÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖÿÿÿÖÿÿÿÿÖÿÿÿ4Ö laöÞÿ$If… † Š ‹ Ä å   iccccYYY & F $If$If•kd$$If–lÖ    Ö\rÿ7¥fU"ÅnÁï t¯Ö0    öã"ÖÿÿÿÿÖÿÿÿÖÿÿÿÿÖÿÿÿ4Ö laöÞÿ $ - ? d Ž » icccccc$If•kdd$$If–lÖ    Ö\rÿ7¥fU"ÅnÁï t¯Ö0    öã"ÖÿÿÿÿÖÿÿÿÖÿÿÿÿÖÿÿÿ4Ö laöÞÿ» ¼ À É Û ò  iccccc$If•kdI$$If–lÖ    Ö\rÿ7¥fU"ÅnÁï t¯Ö0    öã"ÖÿÿÿÿÖÿÿÿÖÿÿÿÿÖÿÿÿ4Ö laöÞÿ   ) C icccc$If•kd.$$If–lÖ    Ö\rÿ7¥fU"ÅnÁï t¯Ö0    öã"ÖÿÿÿÿÖÿÿÿÖÿÿÿÿÖÿÿÿ4Ö laöÞÿC D H Q c ‡ icccc$If•kd$$If–lÖ    Ö\rÿ7¥fU"ÅnÁï t¯Ö0    öã"ÖÿÿÿÿÖÿÿÿÖÿÿÿÿÖÿÿÿ4Ö laöÞÿ‡ ˆ Œ • § É icccc$If•kdø$$If–lÖ    Ö\rÿ7¥fU"ÅnÁï t¯Ö0    öã"ÖÿÿÿÿÖÿÿÿÖÿÿÿÿÖÿÿÿ4Ö laöÞÿÉ Ê Î × é  iccccc$If•kdÝ$$If–lÖ    Ö\rÿ7¥fU"ÅnÁï t¯Ö0    öã"ÖÿÿÿÿÖÿÿÿÖÿÿÿÿÖÿÿÿ4Ö laöÞÿ $ - ? e Ž ¸ icccccc$If•kdÂ$$If–lÖ    Ö\rÿ7¥fU"ÅnÁï t¯Ö0    öã"ÖÿÿÿÿÖÿÿÿÖÿÿÿÿÖÿÿÿ4Ö laöÞÿÊ " # $ ) + , - > ? e · ¸ ¹ Ì Í ¹ ¿ À s£¤³´Á ES{ˆ¡¢­ÄêET[hw·èD¢£©ÉíùõñêñõñêõêõñãêÜÒÜËÁËܺܺܺܺ˺ܲ¦²ž–ž–ž–ž–ž–ž–Ž–Ü„Ühw{ht%5\hw{hby\5hw{ht%5hw{hÎJ55hw{h·wü5H*aJhw{h·wü5 hw{hÖ)'hw{hä¦H*aJ hw{hä¦hw{ht%H*aJ hw{ht% hw{h}>k hw{hWzth}>khWzt hw{hby\3¸ ¹ º ½ Ê Ë tu£³ige`gggg[9 & FgdÚ ¬•kd§ $$If–lÖ    Ö\rÿ7¥fU"ÅnÁï t¯Ö0    öã"ÖÿÿÿÿÖÿÿÿÖÖÿÿÿ4Ö laöÞÿ ³ÁÕÖ|}~ˆ­Äê;w·è Dz”¨«´µÉúúøøøøøóîîîæîîæîîîîîîîäßøógdÚ ¬ & FgdÎJ5 & FgdÚ ¬ & FÉÓØàìíùóùù-Ækdš $$If–lÖ    Ö\”ÿ” § 8"’‘ Ö@@@@ t¯Ö(ÿíëÿÿíëÿÿíëÿÿíëÿÖ0    ö¤"ÖÖÿÿÿÖÿÿÿÿÖÿÿÿ4Ö laöpÖ(ÿíëÿÿíëÿÿíëÿÿíëÿ$If$Ifíöúÿ)„ôëååOMHMgdÚ ¬•kd! $$If–lÖ    Ö\”ÿ” § 8"’‘ t¯Ö0    ö¤"ÖÿÿÿÿÖÿÿÿÖÖÿÿÿ4Ö laö$If $$Ifa$  ÆàÀ!$If„†¥Çˆ±Öåéô)Kg‰¦§679:Ÿ¢½ÀÕØóö*-@TW„‡¸Ññž»¼öïèïÞï×Ð×Ð×Ð×ïÐïÞïÆïµï®ï§ï§ïœ‘œ‘œ‘œ‘ï§ï§ï‘ïÞïÆïŠïŠïŠï hw{h{2˜h}>kht%mHsHh}>khGK¬mHsH hw{hGK¬ hw{h¸ jhw{hiŽUmHnHuhw{ht%H*aJ hw{h¢ hw{hä¦hw{ht%5\ hw{hÚ ¬ hw{ht%hw{hÚ ¬5\5„…†¥ª°ºÆúúúôôôô$IfgdÚ ¬ÆÇÐÒ9.% $$Ifa$  ÆàÀ!$IfÆkd $$If–lÖ    Ö\”ÿÍN^ 8"9Ú Ö@@@@ t¯Ö(ÿíëÿÿíëÿÿíëÿÿíëÿÖ0    ö¤"ÖÖÿÿÿÖÿÿÿÿÖÿÿÿ4Ö laöpÖ(ÿíëÿÿíëÿÿíëÿÿíëÿÒØåæïñ÷ùùcùZùù $$Ifa$•kd¤$$If–lÖ    Ö\”ÿÍN^ 8"9ÿÿÿÿÿÿÿÿÿÿÿÿÚÿÿÿÿ t¯Ö0    ö¤"ÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖÿÿÿÖÿÿÿÿÖÿÿÿ4Ö laö$If &9icZcc $$Ifa$$If•kd’$$If–lÖ    Ö\”ÿÍN^ 8"9Ú t¯Ö0    ö¤"ÖÿÿÿÿÖÿÿÿÖÿÿÿÿÖÿÿÿ4Ö laö9:CEK^icZcc $$Ifa$$If•kdr$$If–lÖ    Ö\”ÿÍN^ 8"9Ú t¯Ö0    ö¤"ÖÿÿÿÿÖÿÿÿÖÿÿÿÿÖÿÿÿ4Ö laö^_hjp†icZcc $$Ifa$$If•kdR$$If–lÖ    Ö\”ÿÍN^ 8"9Ú t¯Ö0    ö¤"ÖÿÿÿÿÖÿÿÿÖÿÿÿÿÖÿÿÿ4Ö laö†‡’™¬icZcc $$Ifa$$If•kd2$$If–lÖ    Ö\”ÿÍN^ 8"9Ú t¯Ö0    ö¤"ÖÿÿÿÿÖÿÿÿÖÿÿÿÿÖÿÿÿ4Ö laö¬­µ·½ÐicZcc $$Ifa$$If•kd$$If–lÖ    Ö\”ÿÍN^ 8"9Ú t¯Ö0    ö¤"ÖÿÿÿÿÖÿÿÿÖÿÿÿÿÖÿÿÿ4Ö laöÐÑÚÜâicZcc $$Ifa$$If•kdò$$If–lÖ    Ö\”ÿÍN^ 8"9Ú t¯Ö0    ö¤"ÖÿÿÿÿÖÿÿÿÖÿÿÿÿÖÿÿÿ4Ö laö *icZcc $$Ifa$$If•kdÒ$$If–lÖ    Ö\”ÿÍN^ 8"9Ú t¯Ö0    ö¤"ÖÿÿÿÿÖÿÿÿÖÿÿÿÿÖÿÿÿ4Ö laö*+46=ZicZcT$If $$Ifa$$If•kd²$$If–lÖ    Ö\”ÿÍN^ 8"9Ú t¯Ö0    ö¤"ÖÿÿÿÿÖÿÿÿÖÿÿÿÿÖÿÿÿ4Ö laöZ[egn†icZcc $$Ifa$$If•kd’$$If–lÖ    Ö\”ÿÍN^ 8"9Ú t¯Ö0    ö¤"ÖÿÿÿÿÖÿÿÿÖÿÿÿÿÖÿÿÿ4Ö laö†‡ˆMglr|ˆigggb\\\\$IfgdÚ ¬•kdr$$If–lÖ    Ö\”ÿÍN^ 8"9Ú t¯Ö0    ö¤"ÖÿÿÿÿÖÿÿÿÖÖÿÿÿ4Ö laö ˆ‰“•9.% $$Ifa$  ÆàÀ!$IfÆkd`$$If–lÖ    Ö\”ÿ¹: J8"%î Ö@@@@ t¯Ö(ÿíëÿÿíëÿÿíëÿÿíëÿÖ0    ö¤"ÖÖÿÿÿÖÿÿÿÿÖÿÿÿ4Ö laöpÖ(ÿíëÿÿíëÿÿíëÿÿíëÿ•›³´¾ÀÇàùùcXOùù $$Ifa$  ÆàÀ!$If•kdç$$If–lÖ    Ö\”ÿ¹: J8"%ÿÿÿÿÿÿÿÿÿÿÿÿîÿÿÿÿ t¯Ö0    ö¤"ÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖÿÿÿÖÿÿÿÿÖÿÿÿ4Ö laö$Ifàáìîõi^UOO$If $$Ifa$  ÆàÀ!$If•kdÕ$$If–lÖ    Ö\”ÿ¹: J8"%ÿÿÿÿÿÿÿÿÿÿÿÿîÿÿÿÿ t¯Ö0    ö¤"ÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖÿÿÿÖÿÿÿÿÖÿÿÿ4Ö laö "(?i^UOO$If $$Ifa$  ÆàÀ!$If•kdÃ$$If–lÖ    Ö\”ÿ¹: J8"%ÿÿÿÿÿÿÿÿÿÿÿÿîÿÿÿÿ t¯Ö0    ö¤"ÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖÿÿÿÖÿÿÿÿÖÿÿÿ4Ö laö?@JLSkicZcc $$Ifa$$If•kd±$$If–lÖ    Ö\”ÿ¹: J8"%ÿÿÿÿÿÿÿÿÿÿÿÿîÿÿÿÿ t¯Ö0    ö¤"ÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖÿÿÿÖÿÿÿÿÖÿÿÿ4Ö laöklwy€ŸicZcc $$Ifa$$If•kdŸ$$If–lÖ    Ö\”ÿ¹: J8"%î t¯Ö0    ö¤"ÖÿÿÿÿÖÿÿÿÖÿÿÿÿÖÿÿÿ4Ö laöŸ ¡™š689:“žŸigggggggggg•kd$$If–lÖ    Ö\”ÿ¹: J8"%î t¯Ö0    ö¤"ÖÿÿÿÿÖÿÿÿÖÖÿÿÿ4Ö laö ŸÕ /0>?ož·ÐÑÓÝÞñöþ ùùùù÷÷÷÷÷÷÷ùõðêåßßßßß$IfgdÚ ¬ ÆàÀ!gdÚ ¬„Ð`„Ð$Ifäkdm$$If–lÖ    Ör”ÿ¼­‹ l8"(ñÞáÌ Ö @@@@@ t¯Ö2ÿíëÿÿíëÿÿíëÿÿíëÿÿíëÿÖ0    ö¤"ÖÖÿÿÿÿÖÿÿÿÿÿÖÿÿÿÿ4Ö laöpÖ2ÿíëÿÿíëÿÿíëÿÿíëÿÿíëÿ$&)IJQVXùððùGùùð¨kd !$$If–lÖ    Ör”ÿ¼­‹ l8"(ÿÿÿÿñÿÿÿÿ€ÞÿÿÿÿáÿÿÿÿÌÿÿÿÿ t¯Ö0    ö¤"ÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖÿÿÿÿÖÿÿÿÿÿÖÿÿÿÿ4Ö laö $$Ifa$$IfX[{|€…‡Š›öðGððööð¨kd*"$$If–lÖ    Ör”ÿ¼­‹ l8"(ñ€ÞáÌ t¯Ö0    ö¤"ÖÿÿÿÿÿÖÿÿÿÿÖÿÿÿÿÿÖÿÿÿÿ4Ö laö$If $$Ifa$›œ ¥§©»VPPGGP $$Ifa$$If¨kd&#$$If–lÖ    Ör”ÿ¼­‹ l8"(ñ€ÞáÌ t¯Ö0    ö¤"ÖÿÿÿÿÿÖÿÿÿÿÖÿÿÿÿÿÖÿÿÿÿ4Ö laö»¼ÀÅÇÉÚVPPGGP $$Ifa$$If¨kd"$$$If–lÖ    Ör”ÿ¼­‹ l8"(ñ€ÞáÌ t¯Ö0    ö¤"ÖÿÿÿÿÿÖÿÿÿÿÖÿÿÿÿÿÖÿÿÿÿ4Ö laöÚÛÞãåçøVPPGGP $$Ifa$$If¨kd%$$If–lÖ    Ör”ÿ¼­‹ l8"(ñ€ÞáÌ t¯Ö0    ö¤"ÖÿÿÿÿÿÖÿÿÿÿÖÿÿÿÿÿÖÿÿÿÿ4Ö laöøùüVPPGGP $$Ifa$$If¨kd&$$If–lÖ    Ör”ÿ¼­‹ l8"(ñ€ÞáÌ t¯Ö0    ö¤"ÖÿÿÿÿÿÖÿÿÿÿÖÿÿÿÿÿÖÿÿÿÿ4Ö laö12JlmVTTOTJTTgdÚ ¬gdÚ ¬¨kd'$$If–lÖ    Ör”ÿ¼­‹ l8"(ñ€ÞáÌ t¯Ö0    ö¤"ÖÿÿÿÿÿÖÿÿÿÿÖÖÿÿÿÿ4Ö laömµÉÊËâèïûýýýýýøòòò$IfgdÚ ¬ ž±²³´ÉËâüst! " * + C ] ~  L!M!d!~!œ!!Ë!å!¹"º"¾"##ª#P$W$X$c$¢$£$§$¼$ë$_%ôíÙÌôíÄíºí°í°íÄí°í¢íºí°íÄíºí°íºíšíšíºíšŽšíš‡‡x hw{h+i2hw{h6“6 hw{h6“hw{ht%6H*aJhw{ht%6hw{ht%OJQJ\^Jhw{ht%H*aJhw{ht%5\hw{ht%5j (hw{h{2˜EHèÿU'jN3Ã@ hw{h{2˜CJUVnH tH  hw{ht%jhw{ht%U/ûüþ@gWLFFFF$If  ÆàÀ!$If¨kdâ*$$If–lÖ    ÖF”ÿÐ¥U"<Õ° Ö@@@ t¯ÖÿíëÿÿíëÿÿíëÿÖ0    öÖ Ö ÿÿÖ ÿÿÿÖ ÿÿ4Ö laöpÖÿíëÿÿíëÿÿíëÿghjm‘¸à|vvvvv$If‚kd=,$$If–lÖ    ÖF”ÿÐ¥U"<ÿÿÿÿÕÿÿÿÿ°ÿÿÿÿ t¯Ö0    öÖ ÿÿÿÿÿÿÿÿÿÿÿÿÖ ÿÿÖ ÿÿÿÖ ÿÿ4Ö laöàáåèñ|vvp$If$If‚kd-$$If–lÖ    ÖF”ÿÐ¥U"<Õ° t¯Ö0    öÖ ÿÿÿÖ ÿÿÖ ÿÿÿÖ ÿÿ4Ö laöñò) * + C I P \ |zzzzxsmmm$IfgdÚ ¬.‚kdß-$$If–lÖ    ÖF”ÿÐ¥U"<Õ° t¯Ö0    öÖ ÿÿÿÖ ÿÿÖ Ö ÿÿ4Ö laö \ ] a c WLFF$If  ÆàÀ!$If¨kd·.$$If–lÖ    ÖF”ÿÐ¥U"<Õ° Ö@@@ t¯ÖÿíëÿÿíëÿÿíëÿÖ0    öÖ Ö ÿÿÖ ÿÿÿÖ ÿÿ4Ö laöpÖÿíëÿÿíëÿÿíëÿ ‚ „ † Ä !!!8!|qkkkkk$If  ÆàÀ!$If‚kd0$$If–lÖ    ÖF”ÿÐ¥U"<ÿÿÿÿÕÿÿÿÿ°ÿÿÿÿ t¯Ö0    öÖ ÿÿÿÿÿÿÿÿÿÿÿÿÖ ÿÿÖ ÿÿÿÖ ÿÿ4Ö laö8!9!K!L!M!d!j!q!}!|zxzsmmm$IfgdÚ ¬‚kdê0$$If–lÖ    ÖF”ÿÐ¥U"<ÿÿÿÿÕÿÿÿÿ°ÿÿÿÿ t¯Ö0    öÖ ÿÿÿÿÿÿÿÿÿÿÿÿÖ ÿÿÖ Ö ÿÿ4Ö laö}!~!‚!„!Ÿ!WLFF$If  ÆàÀ!$If¨kdÐ1$$If–lÖ    ÖF”ÿÐ¥U"<Õ° Ö@@@ t¯ÖÿíëÿÿíëÿÿíëÿÖ0    öÖ Ö ÿÿÖ ÿÿÿÖ ÿÿ4Ö laöpÖÿíëÿÿíëÿÿíëÿŸ! !²!³!´!Ë!Ñ!Ø!ä!|zzzuooo$IfgdÚ ¬‚kd+3$$If–lÖ    ÖF”ÿÐ¥U"<Õ° t¯Ö0    öÖ ÿÿÿÖ ÿÿÖ Ö ÿÿ4Ö laöä!å!ç!é!"WLFF$If  ÆàÀ!$If¨kd4$$If–lÖ    ÖF”ÿÐ¥U"<Õ° Ö@@@ t¯ÖÿíëÿÿíëÿÿíëÿÖ0    öÖ Ö ÿÿÖ ÿÿÿÖ ÿÿ4Ö laöpÖÿíëÿÿíëÿÿíëÿ""""4"|vvv$If‚kdl5$$If–lÖ    ÖF”ÿÐ¥U"<ÿÿÿÿÕÿÿÿÿ°ÿÿÿÿ t¯Ö0    öÖ ÿÿÿÿÿÿÿÿÿÿÿÿÖ ÿÿÖ ÿÿÿÖ ÿÿ4Ö laö4"5"7"9"M"|vvv$If‚kdD6$$If–lÖ    ÖF”ÿÐ¥U"<Õ° t¯Ö0    öÖ ÿÿÿÖ ÿÿÖ ÿÿÿÖ ÿÿ4Ö laöM"N"P"R"e"|vvv$If‚kd7$$If–lÖ    ÖF”ÿÐ¥U"<Õ° t¯Ö0    öÖ ÿÿÿÖ ÿÿÖ ÿÿÿÖ ÿÿ4Ö laöe"f"h"j"©"|vvv$If‚kdØ7$$If–lÖ    ÖF”ÿÐ¥U"<Õ° t¯Ö0    öÖ ÿÿÿÖ ÿÿÖ ÿÿÿÖ ÿÿ4Ö laö©"ª"®"°"¹"|vvp$If$If‚kd¢8$$If–lÖ    ÖF”ÿÐ¥U"<Õ° t¯Ö0    öÖ ÿÿÿÖ ÿÿÖ ÿÿÿÖ ÿÿ4Ö laö¹"º"¼"¾"#|vvp$If$If‚kdl9$$If–lÖ    ÖF”ÿÐ¥U"<Õ° t¯Ö0    öÖ ÿÿÿÖ ÿÿÖ ÿÿÿÖ ÿÿ4Ö laö####y##–##©#|zzzuooo$IfgdÚ ¬‚kd6:$$If–lÖ    ÖF”ÿÐ¥U"<Õ° t¯Ö0    öÖ ÿÿÿÖ ÿÿÖ Ö ÿÿ4Ö laö©#ª#¬#®#Ö#$0$K$WQQQQQQ$If¨kd;$$If–lÖ    ÖF”ÿÐ¥U"<Õ° Ö@@@ t¯ÖÿíëÿÿíëÿÿíëÿÖ0    öÖ Ö ÿÿÖ ÿÿÿÖ ÿÿ4Ö laöpÖÿíëÿÿíëÿÿíëÿK$L$N$P$c$ƒ$¢$|vvpvv$If$If‚kdi<$$If–lÖ    ÖF”ÿÐ¥U"<ÿÿÿÿÕÿÿÿÿ°ÿÿÿÿ t¯Ö0    öÖ ÿÿÿÿÿÿÿÿÿÿÿÿÖ ÿÿÖ ÿÿÿÖ ÿÿ4Ö laö¢$£$¥$§$¼$%3%_%‘%|vvpgZZg & F$Ifgd+i2 $Ifgd6“$If$If‚kdA=$$If–lÖ    ÖF”ÿÐ¥U"<Õ° t¯Ö0    öÖ ÿÿÿÖ ÿÿÖ ÿÿÿÖ ÿÿ4Ö laö_%c%r%‘%’%“%¢&¤&È&É&Ô&Ü&ò&''j'k'‘'’'—'˜'­(Ð(")#)Ù*Ú*å*æ*v+w+”+•+–+—+˜+™+ÿ./Â/Æ/)1ùñùñùêãêãùãêÙÌÙÄê½ê³ê¬ê¥ê›ê½ê‰uj‰¬ê½ê¬êjAAhw{h3ØU'j­ÀºA hw{h3ØCJUVnH tH  hw{h:¬jhw{h:¬Uhw{ht%H*aJ( hw{hYkN hw{hÎhw{ht%H*aJ hw{hÚ ¬hw{ht%5hw{ht%56\]hw{ht%6] hw{h+i2 hw{ht%hw{h6“6 hw{h6“)‘%’%–%˜%¡%|vvp$If$If‚kd >$$If–lÖ    ÖF”ÿÐ¥U"<Õ° t¯Ö0    öÖ ÿÿÿÖ ÿÿÖ ÿÿÿÖ ÿÿ4Ö laö¡%¢%¤%¦%Á%Ü%÷%|vvvvv$If‚kdÕ>$$If–lÖ    ÖF”ÿÐ¥U"<Õ° t¯Ö0    öÖ ÿÿÿÖ ÿÿÖ ÿÿÿÖ ÿÿ4Ö laö÷%ø%ú%ü%„&¤&É&Ý&|qkkk^^ & F$Ifgd+i2$If  ÆàÀ!$If‚kdŸ?$$If–lÖ    ÖF”ÿÐ¥U"<Õ° t¯Ö0    öÖ ÿÿÿÖ ÿÿÖ ÿÿÿÖ ÿÿ4Ö laöÝ&Þ&ð&ñ&ò&j'm'w'x'|zzzVTOzgdÚ ¬#$d%d&d'dNÆOÆPÆQÆ‚kdi@$$If–lÖ    ÖF”ÿÐ¥U"<Õ° t¯Ö0    öÖ ÿÿÿÖ ÿÿÖ Ö ÿÿ4Ö laöx'‘'’'Ÿ( (Ò*Ó*Ô*å*æ*!+9+P+^+u+v+˜+™+¬+-..á.â.ã./Ä0Å0úøøøøøøúøøóóóóøøøîøøøøøøîøøgdÚ ¬ & FgdÚ ¬)1*1/202h6j6]7y7~77Ñ7Ò7P8}8~8ª9W:X:Y:Z:w:x:y:z:{:}:ý;þ;¬<­<,@-@äAõîçîàîÙàÏàÈàÁ·ÁÙà‘†¬îîwîfîUî jhw{h_@›UmHnHu jhw{ht%UmHnHuhw{ht%5 hw{h‚3BjNhw{h‚3BU'j$ʺA hw{hy¸CJUVnH tH  hw{h“_9jhw{h“_9Uhw{hh‚H*aJ hw{hh‚ hw{hMLêhw{h^•H*aJ hw{hÉ= hw{h^• hw{hÚ ¬ hw{ht%hw{ht%H*aJ Å0M1N122202×3Ø3|4}4h6i6j6|6@7A7B7\7]7y7X:Y:{:|:}:”:ý;ýýýýýøýýýýýóóøýýýîýéýýýøøøýgdÉ= gdÚ ¬gd^•gdÚ ¬ý;< <<¬<ø<ù<ú<==Ò=Ó=Ô=ð=ñ=+@,@I@J@[B\B^B_BjBlBqBrBsBýøöööööñööööñöööñöööööööëëë„Ð`„ÐgdÚ ¬gdÚ ¬äAåAìABB;BBBZB\B]BlBpB‡BˆB6F7FËFÌFÍFÎFÞFQGRGzG{G|GRKSKTKUKØKÙKL2L?L@LsLŒLL›LLŸL®L³LµL¶L¸L¹LÄLÅLÐLÑL×LØLÙLÛLùòùòùòùòßòùòùòÛòùßÔÊÀ³ÀÊ©òßò¢À³Àòžò”òžòžòžžžžžžž hw{hwÅhw{ht%5\hwÅ hw{hw{hw{h+i26aJhw{hw{6H*]aJhw{hw{6]hw{h+i26] hw{h+i2h]½$jhw{hd9UmHnHtH u hw{ht% hw{hd97sBB‚B‰BŠB‹B•B–BœBBžB©BªB°B±B²B¼B½BÃBÄBÅBÆBàBáBLDNDùùëùùùùùùùùùùùùùùùùùùæùäÞ„Ð^„ÐgdÚ ¬  ÆàÀ!Ð Í gdd9 ÆàÀ!NDcDdDeDoDpD‘D’D´DÉDÊDËDÙDðDE/E:EYEoEpEqE{EËEúE.FhF—Fúøøóøøøøøøøøîîîîîîøøøéøéãá„h`„h & F  & FgdÚ ¬gdÚ ¬—FËFÌFÎF{G|G‡GˆG·G¸GÍGñGòGóGHúõ¯ˆõƒgdÚ ¬&$d%d&d'dNÆOÆPÆQÆgd+i2FEÆ€Šól&gd+i2gdd9 & F HH7HVHlH‹HªHÉHèHýH>ISITIUI_I¯IÞIJ?JnJ¢JñJ KRKTKUKúúúúúúúúúúúøøøóøóíøóçøøøâgdw{„h^„h„h`„h & F  & F UKLL L!L"L?L@LKLRL^LcLrLØÖÑÏÏÊÊÄÄ»ÄÄ $$Ifa$$IfgdwÅgdÚ ¬&$d%d&d'dNÆOÆPÆQÆgdw{ rLsLékdI]$$If–lÖ    Ör”ÿ‡í Âh£ófÕ¦;  Ö @@@@@ t¯Ö2ÿíëÿÿíëÿÿíëÿÿíëÿÿíëÿÖ0    ö ööÖÖÿÿÿÖÿÿÿÿÿÖÿÿÿÿ4Ö laöpÖ2ÿíëÿÿíëÿÿíëÿÿíëÿÿíëÿsLyL‡L‹L‘LžLŸLôôëåå7­kdü^$$If–lÖ    Ör”ÿ‡í Âh£ófÕ¦;  t¯Ö0    ö ööÖÿÿÿÿÿÖÿÿÿÖÖÿÿÿÿ4Ö laö$If $$Ifa$  ÆàÀ!$IfŸL¦L´L·L½LÆLÇLôôëåå7­kd`$$If–lÖ    Ör”ÿ‡í Âh£ófÕ¦;  t¯Ö0    ö ööÖÖÿÿÿÖÖÿÿÿÿ4Ö laö$If $$Ifa$  ÆàÀ!$IfÇLÈLÖLÙLßLêLëLôôëåå7­kda$$If–lÖ    Ör”ÿ‡í Âh£ófÕ¦;  t¯Ö0    ö ööÖÖÿÿÿÖÖÿÿÿÿ4Ö laö$If $$Ifa$  ÆàÀ!$IfÛLßLéLôLûLýLþLMMMMMMM!M#M'M0M2M3M4M?M@MNMOMeMfMnMoMqMrM—M˜M™MªM«M²M³M´MÀMÁMÇMÈMùõùõùõùõùõùîêîêîêîã×ÓÉÓÁÓÁ¸ÁÓ«£“««ÓêÓ…{u{ ht%0Jjht%0JUht%B*phÿ ht%0JjGiht%B*Uphÿht%B*phÿjht%B*Uphÿh‹]ømHnHujht%UhGM™ht%H*aJht%j,dht%OJQJU hw{ht%h»Jw hw{h»JwhwÅ hw{hwÅ*ëLòLüLÿLMMMôôëåå7­kdb$$If–lÖ    Ör”ÿ‡í Âh£ófÕ¦;  t¯Ö0    ö ööÖÖÿÿÿÖÖÿÿÿÿ4Ö laö$If $$Ifa$  ÆàÀ!$IfMMM M'M1M2Môôëåå7­kdc$$If–lÖ    Ör”ÿ‡í Âh£ófÕ¦;  t¯Ö0    ö ööÖÖÿÿÿÖÖÿÿÿÿ4Ö laö$If $$Ifa$  ÆàÀ!$If2M3MpMqMÒMÓMÔMæMçM÷MøM N NNNN4N5N6NMNý±ý§ýýýýýýýýýýýýýýý $dNÆÿK&dEÆ€V‘b&PÆÿÈMÊMËMÑMÓMÔM¬NØNíNøNOO&O*O+O/O0OCOWOZO[O_O`OdOuO€OO…O†O‰O—OšO›O¥O¦O²O³O·O¸O»OÌOÏOÐOÔOÕOØOóO÷OøO P¡P¸P¹PÑPÒPÖP×PzQ{Q’Q“Q«Q¬Q°Q±Q?R@RWRXRpRyRzR—R˜RôêäàÜàÖàÖàÖàÖàÖàÖàÖàÖàÖàÖàÖàÖàÖàÖàÖàÖàÖàÖàÖàÖàÖàÖàÖàÖàÖàÖàÖàÖàÖàÖàÖàÖàÎʹ!j®ºA h×5lCJUVnH tH hiŽjhiŽU ht%CJhÏgKht% ht%0Jjht%0JUhÏgK0JmHnHuIMNNNRNSNWNXNYNZN[NnNoNN‚N“N”N•NœN«N¬NØNÙNìNíNøNùNOOOOýýýýýýýýýýýýýýýýýýýýýýøýóýýý$a$$a$OO%O&O*O+O/O0OCODOVOWOZO[O_O`OdOeOjOtOuO€OO…O†O‰OŠOO–Oúúøøøøøóøúøøøøøøøúúøóøøøøøúú$a$$a$–O—OšO›O¥O¦O²O³O·O¸O»O¼OÁOËOÌOÏOÐOÔOÕOØOÙOáOïOðOñOòOóO÷OøOýýýøýøýýýýýóóýýýýýýýóñýýýýýý$a$$a$øO P¡P¸P¹PÑPÒPÖP×PzQ{Q’Q“Q«Q¬Q°Q±Q?R@RWRXRpRqRrRsRtRuRvRwRxRýýýýýýýýýýýýýýýýýýýýýýýýýýýýýxRyR›RœRRžRýýýýý˜R™RšRœRRžR÷ïëçà hw{ht%ht%hiŽjhiŽUjìih+i2U- 00€&P°Ð/ °à=!°"°# $ %°0) 00€°Ð/ °à=!°"°# $ %°0& 00€°Ð/ °à=!°"°# $ %°`!ðÁÿçšPÖ^2¢Ri€ÞBïø(ç|ÄÃ,ÿþxÚì½]ocI’(¦™]ïš}ݸXÀo†³{Ý‹ªµ»øqHŠl\l›¤ÄžºÓu[=³=.4tY%±‹"5$U¥ZZ~Þ¿PaßëiÿBý… ¿Üà Ã0ü` ›‘‘‘™‡¤Tªê®Ùu$žüΈÈÈÈÈÈÈ_ì”vvþäOþÛ_îüÉηŸí˜ŸÿÊ<ÿæ—üí¿ùåÿºóŸwþÌ|ûë?ûë_îüBÄÿ¹yÞüò;øó§æùÔ¼˜òvþû?ûËÿ{rút;;×××.–óç¿øóêíýÛlçµùÎyøÿ=óügû¾cêþ¯mØ:ßñ?T}nžcó¼4Ïk ÈÍslž—æymžkJ”›çØÇæyiž×湦Fäæ96ÏKó¼6Ï55,7ϱy^šçµy®©±¹yŽÍóÒ<¯ÍsMÈÍslž—æymžkêTnžcó¼4Ïkó\SG¡5ðyiž×湦Îçæ96ÏKó¼6Ï5$7ϱy^šçµy® H¹yŽÍóÒ<¯ÍsM€ËÍslž—æymžkfnžcó¼4Ïkó\€sÛ’—öóÚ<×ôÜ<Çæyiž×æ¹&Däæ96ÏKó¼6Ï5!'7ϱy^šçµy® a¹yŽÍóÒ<¯ÍsMHÌÍslž—æymžkBln¡òÚ¶>ׄìÜ<Çæyiž×æ¹&ÈÍslž—æymžk"ŠÜ<Çæyiž×æ¹&BÉÍslž—æymžk"žÜ<Çæyiž×æ¹¾Fj9¶¹¶-ËÍslž—æymžk"ºÜ<Çæyiž×æ¹&BÌÍslž—æymžk"ÎÜ<Çæyiž×湆03ÍóÒ<¯í¸ü þÝù‹¿€¿Å¿;õWðwwööàïoøwç7¿¿Ïùwçùsøûü»óÿÿ‘wþñáï?ñïÎ?ýüýgþÝù熿ÿ¿;ÿò/ÿbÇø5ý¹¦/×ôrOüóê |®ÿ€~Rý|óJ|þ`ûùêMâó‡×O×±Dwÿ€úb拾;ë»™±$!ïDÝ,LúAwv'êJØ©lêÃë§ëÖÆÎ|p¸Ý pU<µ|ØÝ‰G§nòÆÎ|„¼£ñSÀs7cîçŽÛˆl‹1ò!r„Ï„÷aòNÈm·ÃÂ-:ûêçÒÏtóÃ#äd»±‰!'ðy«µèϽ³ |¦Áëmšöó%äõøT ÑÍþÀyGw#^}&ß¶hàϬ³;ëÈ6l½S³·iÜφwÖ“m ýsòo *RÌÖ}ÿ¸]‡O)ï2&¯Ói®îy>]7Å÷G¸ÞDz?!ï¬aC‡®;jz-pL`ݽÓξ¹«~ÆÒ“4*mG¢1ûJK¹Þï•w¶#Ûp*‘©©k®›×Ž{üþ䄼³Ž )Ž3$ñ×­\_1ù]ø©§Ÿ-ðT‘4bML8Hàþ¿0~"BÞŸAUjÌ^ÝQŠ7š}ƒ¶ÀÆ»Á펔d_ãÓëu•qtç•–›"šØwÞÙMÒõ´\âS)¹$iä}Š;ë¤[­%ñé&Ÿ'Ï`ªzs }Ômp»Ÿ±Ø§:ãS•rçXzzs§}G„¼³v‘}4÷MÐÁ€í¼Rå¨qûF–)›¢÷Zï\ýôóMJi°?\뿯ä<*ñy­("fIÀjú¹ÓQ«ú™Zd‡³ðb®*Ç€ IªHhúã)lìÞ€5>ª„¢$³’ ]«Î8|ê©ë:±t׸ |[Ù…í¬Ñõ¥Ô`ÑÌ+!ýASÆK89>M¨9Z¯~Þjú¡¼kñ©‹P:‰%Ö i÷:“o^ÅœøM´2£õ•XÜXFV]Ï„š:-'ð©ˆ\чÓkd®x|Cê­ Y´qg *„[@jÒq«T*¯RSQ´2 –{á º!û|;7Ø) õ¸b½yL‘t«gRÝÍ눼c|ê ­G­û¶³l7„h\¥ðY "^‡bG¤ÇH‰¡Ðøªˆí¬eC›#TF“C <Óã2A¨1Šä°@Ûè¹r1åÝŸÅC_3“Hå)'–XÞ*bCº&^ø²Ñ·Ãçša/°"—_ñ\w¬€ éñ³ÅJ·S°È¾ùÏ«Õ\'Ä9Z È6O5(Òœ;ž~ôúhç­É¶I¥eÙp-š’n¯£.Éñý*dC‘(‹•ŸoA¶E„|][-I%~ÝøT\Îp„¾ |®“;#,¾y/ÆUG®Bf0Õ„œR¼+|®™kBÅ-HC7Î"BŽ·6 Ÿo¶Áç[2©Äâ=Abo”pQ C­‰ùÕu>·’nïl«N¯.×fˆçWñ\m$ebÏd+ˆï- \醒@ˆ§©Iº.Âg N"ÞÙ’ )Áëí÷% ´|–"!0„Ø &Ÿ„D„©·Ä§®^²•»fR‘€÷¦Ç‰iäÕ›W+œë-ñ™’ZÃ=´;èl*^Á¤uÎI|nÆRRkJÛðö£6ðRbc̆Šf‰ÏmBUkîß¼Õ¨•Ü8[ȆÒÚ«7NŸp²½~•¾õfÂÛbWðõ7iéøælh;|êýËÔnZt$d£Âê&ãv4$uÅkØÐvø õí)|&,ß^´ˆ•El¨ –ãSo%·^%´ìw#C½Js…ëÄc˜ýܼȖJp©¬òµæàU(fߙИ˜ðÖI·ÐÏíÉö•ã_¡ïÕ›ø[``U´Z¼µÐX°Õ•ØÑqø\O¶â¸‡ÞÝŒ™€\ï_'·Sø\·Ã‡û+ñ©ö)_]§ð) 3i› ùò*q´k´>ÕõM Ÿ××)MNš/¯coÅ‘×âsã";<¥$ô´o¢}íhW4m9o;Þeg“ø|ÛÔí«@'ª¤“ˆ=„¦Éz±oJ½½, …7>¯×áó2QÔ›G)i(ÞÛP«×ô~ö»qe wÄ7âó•2Q”[AŒu¡ÑèOM o½˜gû„ÍøŒÖ1>S[åi[“¤)zòøÈÛãVrž ‡!ƒ ¹™·…›F `iROSë˜îŸ¯6hç"£â넲#´óŠ&¨ÄÖPÁñ‘´ÙÇ[â³°£á²W›Y$Çb¡¾7Ú)ÞW»N›QÞ˜ÿº~í¼ÙtŠW.É”ÙLjo›dN¡lœØL°¶î°€v^mMš$‹UVšÌµ9aöÚ…Æ«7 ¥êUyw´¡ÿMGianÝ´R¤óQúÃHšz£”pÛ«h4>#ç·Y翉µnŠ›¨™_Ū­X:ŽwÃ‹äŸø|S 6Þ~ÑY¾z³Fë€ë„‰MÌÓô°5>¯_Åfú7àoɆ «Pº½Ž¶† Œ06ï»xZO²sŸBºÕI‘5 «p+A+_BSr-\¾Ò¶õñ¢b;²åý•W)+Ž ׯެ9È“ÞJˆð-I(l1ú~^¿ƒS@ñV}¼£™ØˆÄüPWð*RÔ\ߟë!t»Î¦qZ}†ø,T¢E2ö Ù<ïp÷GžÔ.gÚ°â:!&D& Û¡àÔµ;k1÷fSg_]ßdÜîf…bß›¤¡E,wm¹È¾ÞÎß]ò«ÄNø«7¡Éj¸—­×£á†Ã&³T¹àÛÙJâ¹CBNYéòÕ ‹ [ásC?ßagãC\EÇG®•éã› {×·Âç;'ä¢G¦èoâÓjEÖ*·Åç{Àm¨ÇM˜¢ß– )c„›Bþt¶È ðMÚ¨f»£Jït³~¾;BµùÚ™Áu‘QͶd{«~¾BŽÅÆ›˜{Ü>ß#G¾ŽÍnå-çñù~D ¦!±é÷j=ºC|ÞD(|óv¸MÙãn+ÝÞe?ßµ•ؓ۞l?ï˜S'e¶aC﨟ﯳ?->ßÓ‚àçÏ÷*#o`C﫟ﹳñÙî÷ÙÏw/G’íOÐÏ÷€ÛÄfÈOÕÏwÚÙW?|¾KBNíùü úy׺Ƥ‹‰ŸK?³ü?Ë~Þ!.(~Îý¼mgöô?ÿ~Þšmð‡ÑÏ[àVñÜ«Ÿ[² BßËT?o2—ûû°~6à6í³Ÿk;›$긟k§—ë?´~&;§øÃè§&äTœ¸ï!üë?ûdçÿýÅÿó‹O¾:Øt=šgO&£ìñÁìx9zš=Ë4øø£òùùábðl”Ù?G£ã¬¼8=?œŒ²Õ˜4‹ÃùèÉèé,k6³£ñpiÓ¹À'£“ñJ21‡Of—‡—Õ¬Ú®`a.ðE5Ëó:è“Ö²z­&55f8˜Œ—§£Cˆ¾˜²ãÁd1âr·“ñ¹ ëu³•ùظÙèrxJÅ›÷K÷N™O—AŠçG>àêãËÙùùè(›Î–\&Ô·œ_ °®²1üÁ¹bè‡é®(B.£ÓÏ0Mm]í1,’íà{ná.Úÿÿ—þ"Z ÿ¥½×öOñoèÞÛÿîOù&[ ÿîÂ%úù¿~ñþ‚ºüñG« !ˆp=›=-g¬’Í'ã)T2+|ü%™ŽND2 ÅéÈÐÙòÔ6Þt6êÔé ¥ÿW³ÁÑ‘œþï|üQÆ»ŒÒ,.žd’% CÜÑøYPÆ‹¨!ª ó.É8,ÃÆ=½ôõËvQ½gÌç:÷ô…¯L6‚* ´e &ãr>˜.&ƒåÈÕÅEØÿÆ–tFÓ#óíÿûsÄûÿñoÿ÷ûÉ_>:ø´s4{2ú4PÉ é×?ú䓞á%ËÙü³ÌFg'“‹…©ÇÝûö~ÖÂD‡­CJøÛÑ|1žM?ËÚÕ‡¼÷¾½8šM޳ß,£ÉÙ`:½ŸÝ›Î¦£ûâ»ñr22iž?ÖŒÎ÷]µ¦œ=ӛϲF¹Q®FSû¬QË} º³‹éÑxzÒ]~f90`/†›@ü¯ÆßŽa¢µz»)ÔjæK½V}Ðh6M¾Æîƒv­‘CƽÙðâl4]>šÏ†£Å¢7›Ìæ‹Ï²Þ‹Á4ûÊpÊérýn4™ÌžËÔçç“ñèÈT:»˜›ŒŸe禀Åh‰€;œŒž&µÃÎÃFV}PË,lþGŸæ‹¯¿˜ŽÆ¦(_‰âm¶-ÏL#L9M“.O§H¢ š¹ͧ”¨ Ö!ÌYÍD·RыӀؔÑre˜òûãÉÈ ÿl°Ìê00Çüfaz` ß)üát8¹8=𠆣#ÛÃ…Ù=´/£åÒÔa€Z…&|ûEWbç3Ãkàsïñ·fv²7”óÃ}¤Ì&Vz0:`„)Ì”c>÷ˆ{£ãÁÅd‰­É|*óuy?Ãs! ›«i*ªÚ§*þ›O‹Zá?ŸVá—ßRßà{-˳:ÖóèÑÔQÃÍŠ¡K]£ Õ¨ÛiÛH€áw£³sü–ØóJó¡ôvþúïœÔàÇ„ÁY=k´ëÙî.ãȀѳñèùgÙ£‚ð»‡ý~v06µŒÇùò`ü÷—Íj-Ûm×(øÛ‹Éhþ›éxI£¤ýÉÀ¢PôÆþ¥ß æ'£%  ÉÅÒ²V…ã¾¾8ûrðb4w¶¿9M¿›ýֶЀ¹Ym¤j»õ¬]ÝEt¬TêYµÑµ@6ÈÄÅíèûf>6¢Íg"H9ùá£Áùhþíh¸üìS¾»‹ 2ß9ÁW¦Í˜éSzlîóñ‘§ÛÝZÖÂ?¶ËZâiócs¶ œÌ°4ý¯PQß^œ=™ÆÓûZ+k¶p$vA3 r`‚+ÍV=ûÕè2ë¾XÚ±S1?y›MøÛnÃß^Cóþç9Äæ9Äæ9Æöû6;fk6!Y³ oÍ&$k6!Y³Ùïs¡í6¤i·!MÛüØìí6$k·!|ƒ¿¬×ƒd½díõ ¦×ƒ4ý>ÄöûͦÍÞïC‚~3a£±ÉØ"¬c!+ÇçÀÃá$ƒ~Á_HýâÞbt þBèüµ}gp`fèü…7èü…¢XX4t þھÆ~A­Sl$ƒ®Á_HÓïCcÉ6!°DPÁ_ÌŠ½Ç`ó±uX¿m<£Š“à$ƒ>Â_( ‰=Ç8B|dÐGÆ4‚3Cá/¼A‘à/5‚à/$ƒ>Â_D&’ [u2-ØÆ3%1ê°‰{H†ÀcØ`ï±¶ñØ4¬Ëf´aþ4ÐA¦Qè ÍŽ=Çhè#ü…dHëÐG„ f†¿:h²3•óHBðaHéLÎL4Lw¶ñH2HÖê½z£¿`ìuzn>½¼¿·Û0!y/ï6º½~ÏümÀ›}o@|sÔ±6Íj éïUv!†61ÄöE: NHº'’V‚¤=(ܤiëpx {Žý€Fõ÷˜¨ÃìSWl%-×RŠ1Ù©t,¢%›¤æÇ´Ådiä\uûOÝ㾋h¬ËFw¨Mض^¯¾'!Õ·µ»©y¹ÇT«¦=J¬ÛŽØ¾sY¢—m‡2^mQ§L´)¢æo±ÝH¡.W݃ÖäLy/Ä®êÅ8øä¶ñ¦¤Gš„û&.²"ËÑA yšŒ €å1‚h¾‚^nñnꨬAŸ"S­*¼óð è>)ÿîk]\È^¤~/¬Ûa fšGpXÀ5äZŸ ² z À„eZЈŠ$$‰¦§aµ›øºýOÀ„¶@<ÁÁÒxÇ 7Ÿ!0A”V÷5Q!ýG4§QGíȱï…Z ñÕqý$¨S½T¸,¶§Ç$†ØÞ@¸ž6zŽÀì@BÖÑñ¼‡F–xçÖ`뀶 ›„˜õ½, yn'ña ºâ›î1Ú~7}‹Œ,â°ÏHUˆ{kBà>£—Þ‘u˜‹‡L0ð@‡”ï<`,zŒD""Ï…sª»n»Ó`ªË©ÉDšŽæyÔul\+F¯§ù5É3H;ŽîV=DòRÂÙÔÞs´HÀ´¨í€ Ãݳ}G˜+¦Ý—CFB—g¾Žœùq‰IQPßGê?S_ÁŒ|¯ADk²póÜå ŽTÜ£Ù©@4‘'y«…r¾&A¤C´G´‰Ùå”D£ºèé9VAÍWCˆg‚'ÖÆ\ÐÏ´> áЇÊ@ªãUñD©:á(ÎR_Ç ™Õ©xÝð|Á2K€¿c•Y†¸$ Ï*DBé®Ïó:s6‡Jhp‡½ËÜ–Dªž˜¬=«äo5?=¹±Ð aAפ:{Ü4¶È¼DG°À>‹ˆD6„œ˜Ìö#ÂôÙxöCsjÃw‡yîR#õÝSµãf˜µÇìÊ ˜ž”‘Q{¾Þá9ž(ŸÑè瞣 ´¶ëñÌ!dœ„kG}³ï{—e ÖRYÛ&IÉŽË9 ì= Ør?)y¹Ö#(Òö½çIÑ3&bRÁ8qò袕ð¶½íz({ÑÁSwŒ&)Æ%>Ï(˜»¸Ðð¬J. zžHÄ€É=«æŒÄR»¡|ëäšqBÖÔð­CJNk(™'aDž«›¤OuŽçŸïûé—@Wwß%©îÕ*Nx¶…»)’% :¾q}!P˜OÐPcÃ3 1| ~­óÌŠHldÇO ȶ=j¼ÀmöÜ‚§cDrcß5W«ï§è.“ Î^²±nZlÐ(h8‚¢ï)“8Rš‚õðU9˜y9Û³‹žk"Õ,gW'UåéÁë¤JÇC^Ò Ú|»ÁêF×ÎðõuûzÃYŽ9<3 šß/c.Γ´ã/ iù ä=½Rd1Áñt/á4t[…pâäx¹jë `‰;i›GóyšÛˆ®<;Ž„½$¿Ïò›¤´ÀéÇv°²i2†„x@åã°Ù§o}”ŽêÔaØ£TY'9Ý-vT3å²€Ø4ƒˆ³tìb8Y±P Ùƒh¼%_¿è" +ÎS#s× ;dúbµd'%½ ¦š‘°­~Íh0aˆ±Õ ûjÆç•”$â·n!FÜ^µ'µ+ÀEv!;õY̓ÜÊn'å½jÃk§ˆe(6-)«rçÁêæK~F’]Qµ‡ìÚ+¾üÂÈ3,”#µ§Søûö„Î2—\¥QšqôTõOÁ^Ëx´4Ð 8„®^ÉH.ØeªÓ:I±Ò׃UêÔ¡»^Hkø&óÖ Å /,ù±€h%9GòïØS½²Wk-/œ‹8ö¯î%n¿²àùÞK_n®ç7ÃõýÞO[N_ÚO,‹Â¡A¸õ+‹\q$¦:²#Oobe•`&¨qbÄ9™Ýõ.½ýP 溗ñx>ßÅȤݞ×P£ÆZ.V8óC˜œÁ½ÕMŸ¬ nˆ5R18 kÍ/ÜÇ’#®EÅô¼ð- xÊpüW²‹€²h¹õ±‡'ÖÕ³4-¤ òžQåÐA²#›äV›Ú©tªaÖµ4Õ>Í­nA,œf¯ï”‚H´=^ë)Èéʼna‘˜Ö”ï&)Á&Öoù¥vˆrÖÚø-¿JÃ/̸n»ÍáJMRNkÕwéË5}Ô-'˜õÄüÎ]Ùß¼sãGœÔ×V5¯VöÕ’—º®O¼ Ûc¡Äó?^¸1 ±LK}2m?XÏé-n v «Í@íÐPÒ––>œX¨é˯Ø^D÷"pšä=ɤvBã=RÆ, {rÅ( F.‹<~ˆ¼ÅÙÑûRbÉKr-B\'ݦ íZÍsh§ÜÖTšI¦‹êø"òÞX"jàZ&âmöjm±øaMI.”¯=)Ž#ˆ‰Û¸F÷xV³uõ4bë±µ'÷kro¤£‘)&n‡(5 k‚ò˜ðw­AEž«UŒÛfbÊ'”7å`ítì#“’À#oëÅNOÜ–ò«•$·qdÙ –ÞõŠ¢º–Ü`ÂA(×ú‰9µØVÃ-Ll=`¾ž0¯Y·Éh éÊ]3IJñnµÛ!Mð80©©Ê Ü+í„Ågv‹©¢ÑT{Z9ýžXx¯1±q­ÚórŽeظ?Zha›uGÆ@’š½+˜¢~Hgm´ýê]N MÖ²?=£`úÚ›1÷ ?šÏ&³÷ʶ9¯À'5¢£ œ¡“YãA%ûrgµlÿìbbÍé­1¾;âJÔÇ<îUêåj¥ÜÎïg÷ðÈìüÅ||rº4q÷z÷³j»µûiµÝnÒi”ƒ‹åèl‘=œgóó™iËè(ëL&Ù·i‘™ÎæÏFG¦° óÍg+Gý«ñA·‹s>ßV:¿Xš¿åóÁðéèh0Ÿ^dÏOGóÏ2+ó”\‘œI¥‡w›¬„Ù ¨Qf:|4›NlôUöd<¥ƒK&³>äOO²òùì<›Ì>rx1Ÿ6y†g/žŠT÷ìQ¥¯~÷ëÞ¶îÛ¨f`/@”;?yR\ì·_tãRJÕÝñ%Ú£H>–€ ®é’ò dHæ§Žÿ(ªTÏLF—pšÌ…T3ÃèõÊé¹™øÖ€óé˃Vˆ¹Í¥+Y5 ¤$D¸‰®!ª‘¥œþsl‰NQ..žpHî[ž­K%{t§TûܺþP‡dC9wØH̬¾¶âFºb IKü#3º®âÅ6 é†POçáÂZ:A³MCaÌžæçóñÔ¶¢!”Ìf×™q8a×7QÛŒ·¤kOÇ ÉœZËâDÕ=Ùïgå½Ñ³ñpä›­€Rè¹ú!Sb·.á²r„ÈÍ*] P¹¯tN¶Ð:Yæ­Ï3`$ÙêÍVÃgsóÀYáÑð*ãC¸«ád4˜º…´À¯²UÞÊNè±é#†Š—¬º·÷è!÷©˜Ú–óñeF ˜ßìIÍãÙüÌö(Ó g]ü~¾Ìpò…#ÛüÜ„-ìÔG¡ƒéÉÅàddc³§ÓÙó)ñ %‹ÈÂä'fʯ™¿bò€J©ªƒá|4šöç0pMa~ªkÂlSúÕ`r¼œMGß½8Ò¬ÜÖ ù.FÓá ÁÔužZ”ç ƒÎÍùQ>>È·›‹ ƒ¯‚ÿzÀÒ å³eÀ^܆0ú”šUrå’,lXFŒÍQ‰…)'g+9þÕdV£L1¢|K0ªUG0Ðh9¿§”;0}˜Œ  “sô$øÊ€c,ãë…`”jH؈Rùðx<™ì ”ƒóÙrÏuâæƒ³ó¢¸©X;Aš#–aŠ»Îl@o¦±Ñð©v¸>‰'2b74ƒ‡$Ù™¥Fœ8®Ü\VûNk£®'êÖŸ@ê’“énœÞadŠHhôû•àÐ,bI•5î¡–¼p²ÊgÎAOép:³>,,"½Ç£ûf‚B 8ÊLú†L8a‘B¢_saÆ<{SäÙ‹âý¥R ª­õÑ`~¶ÀÀC;±²d—#WøžË,—8.2\İ0ôÚ“Eš)ÝUËKÓbì²ÿí`bج5„ ¢ø+hÑ:ÇR ©Ý°¢*§Qâµ»kªÏ.ÙÕŠÝ2½zD Ê14»°âXÜä"d<(Ê–2ãÙ‹oý4©V¼¤@½ÀáóSÃõ¬/S±t,+›%âðé7HWŽ@=qzÌS5ãÙ‰#GÑÂ{—$Z9ÙìšÍdʇÖ(ñ7ìZÝH,õI<¼ÔmÖH‘~× º)$Zd5æ·fqäšíŠ©ˆCk:”ULÁÖhÕî–Á©Šg£ ¹]Iе AÊæ¨ñ°§_¿Ò¯¿Ó¯¿Æ×¢v$d£`ˆ?œ>uÅÐh—A8ðeˆ¥f`EPD_gæ7u8ûapЫ¡‘~ˇG‹evy®{Èó⎸”EÜŽ[j&tí¶JNŸ †Ûåd4=Yž& ÿ¤ÁHè¡[´a™*ˆ@y©á| áRâè2Äàe„ä˘dî=@‡µ‚y±DÀb@¹k›Šó-èØiaÚȦܛ@}+´WA¦Ãá°3wp¸•âÖé0°§&Wcʼn ³H.6гnjºr°œUٔ˓iý,³ØQWkÝ I sªƒÑÄ©jÊ©Üu4Èà U8²‡ôO–UsM˸9É,›ÊA•êeŠÊXÙfÿƒ¿%‹,v´Bò÷³9Ž Â W4N OX¥oœÞE{‰ÄGž]ȵþd½„â© DJWšœU`d0ƒñÂI¦­pB·GäÂK˜hñØ1ÂÂÑhËmÛ†Ø4:9¦ÅðâÀeî‡fØÑ©‘5Ì‚V´­0K­(‹›IPÆ1œ UGFس5 üñ¹‘ï•0.¶:*ÐrÇyhCôÖ¬tÜOìu ™û#‘’UëÓZ†få-'*J•Û,>“l¹*-,ÎËË®`!Y*0XÁ®ª9­/Éó¢€µzP½"y¼x’ë©¡^òT'æfÕ^šä¯Bᕪ#Å4 ÇéÈéoQ# Œ$/–¸ ½:Ṉ̃Iä©=Ú¢p©%©bð«+%s«ü¨%øt„b{õ–jÎÒzl¨E–€Ê–-â{ ¶j”V¿E3ž¶l%ÞR±u#kwÒÈp´Ú¢s]ô-Gð Û$¡$³)^.”D6RËK¶VÑ[ãç¼MY¡¤üxm¤–‹Y´|‘³_8›qKä**ñ•x„-KïÕ„ vWq@û3ƒe]›6R„Š¿X˜… ;Ìâ…PÌŠõ<åC?ejÙ”‰~ŶšˆqýÄ’ë1¡ækÊã»^¶È‚¤€öî²ø"mæÙ‘Pa>Ö7ºI7kÔz½SÕ§“”Zr÷ψxÍVE¿’€»ËVÖ Þgv;™ÞlžtÌ fÍDr°™i¦ŒÚf0²®fe»ñß˰ûg¾ø¤mˆ·5È`ÙøZPÓMJ/U+Éòå<BžsYÀ„¼–(A5¢  ì×–v:Tèðe7Ù¬\Õ\O×¼»¡æÖúš›Éškªæ<]ssCÍ»ëkn$knl(´¹¾Ðz²Ð¦ê’_8¡? =òtÖUJÈIÌ„nVÂMY¼cCú aà”XÕìdI¦”£K¸\'ÁÇO&#R×ýàŽj)S†`ÕS>ìU²Ç²öü^E¯r¸¡u²ZÕ­±• 8KM +)*ȵ>ê=¶œn6½©8÷% …6‡$ÆùDÉ({?âíÑV-F[uk´Uïm?TU·FÚ”‹TϘ>ÜÐI륩D¤ATÆñ+´5©õûcÒÂ=öªJm®tU:Àõ”<”HxŃ‘Fî±&:Ò§‡ìHJ2£i|”I 霉>|TMì¡m8ƒ”<ëÄ–cëu¡‡î Š0Ò‰µ¡ •©ÚŠ_‰M®hM…ÚTpúÛr·ÖqZ¨œ¦ÓÑ„5›þä¦ë¢à > A{%­ƒ“ÏEuöaÔWÅQ¿+Žúu2Š[ÈÊ2cA.Þl1Ù`–X’B=àÔ&;3Z5Y=Ì£ †'üÙ\O™ÀºEÔ1É|&£¶ósj¨Ú¤FS™Mî\åöº¶ˆ"))·§:wÒ*ÊÓÙôÍgΦøJÅþ½ŠŠ¬œÄ:eÂ6¥u¸°HCt‰ñ‚€ÌÎBÕO¸çµÖÃà H$âZé”M7UšÂEm[4¶°µ}í-P‘mêÙºQBt”òáò윘†ý* ‰4׌uÌÆT ŽqÓí©ƒ÷í£JGâŽú‰Qä”Äþ²Øk GÔÜrsm+•ˆzl†ê¦íá«cB^Eƶžœv a[nƒÍ‘» ¾iô¿ŽòÓJC¡î[v«NܱnìVJ?ýj©²¥øE µ”`Š˜0‘Êï[7¦v Œû×.Ûäfä{Zµýô+·…„äZÿçMNÕmÉé­,m„ýsÇGñÿÕÃÏ"’Ô|>Ý\«TÓçï­Óuì;}ú><ôîKøí`¾ ÷KO䊿l]+Yq“¬Nñ\;ƒ*œ«ýíßÞŒâÞpv1]’o¦Z6>?C¹ÄyÂÈV¦Lö½eåyÜÐÙýÀZsåš8ørô¬–ð`‚«jSÌüþþb4£ |r¸M¾›q ëÔÀÑ:ÝóaßXײ³£‹¡‰dMKt_ K)@‚vöØ‚jìáØ{q$÷y«+v@Ð÷_þëÿúÄí®ô äІ… l*tyä“'í^d(f"wŠߟ#„ŸØ BàÁ#¼óG/•šÍNsÂpíi­WÙÓT—äÔ´‹)hñVÊyYÊw +JÂþÊ‚Ìýb$tŒÖ—hOÙxí*á$Q.?“žU‘4éyWÛy«(ôT‘Î*ŠU&ÏZ£‘ÕÍ =’bËa«Ð„£¢É¦pG&á¸+bÿŠýF¹²>Ý\اXZ5£Êi`­Ô™(y~,𜸩æ7(b¤=éáäqøä7dè„… d«ÇtÌåYBª³¦Ö'3Ø‹Ã@2˜UØzB×Ú¼ïɈë·ñù£=sŠ‚§öäÖ†¬óJzÓãÓ²šZÇI;ulI‚ïØ‰«Pl—»Ã°¶îÐ-’y™ÑŸ NìIæ,qHŸä&Wn$^,N»Â8Ӟΰô­Tþ8íð@Yã=´¸Q.Šää+ !Ý瓨Ï'´ORñ](žÀ}mOsˆ‡ K@qä§^ QŠg›'Œ©Äò¯ ^ÎÎ4é+‡ _|R¡d›ÌۗƦà-Ǻts $åVgØÉŽ·z$ŸA`(lfݰIåúÀàh6œŒÏe¦Ò”`ÊgD.2ÓÄDRò;V°µl3pßGda ±yg¤„Ëw{Rø¥Ïr6¸ü6/®ÄÙË8âW#„ÔZ‘zÝH~‹=Ó„£á, g«bª%pZÈ!Œ£Ó“òˆî3˜*VžKαe«OƒV˵¾‰Å‚kr8¿øÕØÚKùbÚö«ñÄÈå™ ·§KlrûÍex¨#ÑžiE"«õžÉЖ0+ ÅfʼnJ¢JâJEe›ÚÂÆ# S2“i‚à#Ö¸¶‘{Q#÷ôéY›L@'Wõ-ü¢z—/ý‰Ö»FsœúvÈiˆ_(·[ÁþIÔ­'ž­ßFÊ·js×é ro7`2±fM¬Z ]­ASâ:½{³µ€éF€ézÀÈí!éÙ4Ó^NK~k‡÷:7r ”+®ÂŽ;›œAè©6×Lhkò<'"1UÀ-µÐÖ¤Õñ"šÖnË«ÏG3LLz›ô}Äô¿g¦o$orîÃûlºµÔZ\ß»Y-|;ó’#ŽSï3íB fŸJ Vþ$’Æ©'ô`a¨½eÛÏÞÂG)s`»FâÖ²Tž<«öÍjEÊ0Ði‚¸h_2c»§£Éd!U/"¹Jqr)Î#©ˆ`à5bXž N7…É\™6ï7¢K¦JóSëÅÜvüæ×êˆAR&gc²!´:̘#mëãWhX‚>*Éã:«gœYƒ¥8M2èË&ìï.B†Ë É Ô™X™%ïr¦|HU²9,o(´âtË2”棓 ½\º '3¸ÌƒêLûâÓm*Øéo=V¤· }‚°‡8|òÂ2Y#÷Àf–óæ¸éÀkpÞUu‰˜åw^¬c~«‚ˆa©0àg:ÀȺޔ‚¬è É0nqIì29Ç}&µ°‡9¾ šSÎàˆ¹3ãÇ¢|›nQX£”æ:}‹ÂªÕ 0Ó† äS ñ—Âs+e2„VŒ4c‹Š=9–ÇÇqzSâI˜¾§·ÍuÇ(†ÏÆ"¦ibfGÛ6Eûá›[´îÅÂM4ÔãÜ'úÁ}sç1Öz»ÝäÛv)í ¯(цT×·]ÝRps˺[[ .mÙòÂå¯(p"—æ;…w³[±Ó¶+”ÊNétGzLÚ[FûÁùá7Â¥|"£ÐÑ®Å$´rÎ|OpX«Ë× ±lU¹ZiŸÕú{h–Þ£1.:vïBgûÀagÓ£d:T=êÔÿ³£Q*u …]6Ðco6›¡Ü£h{9vè-M„{ð§?_ØI;O]™§ž (±„:Q*X•^ß.GÝíkz;¤(Øþ$LT­`dž06B5iÂËúúÁ{%Ãü†©pŒæÏo®£Ð!_8b%™W!G¾p^ÄQœW( ž“¢Áƒ¼ƒ¤eÇ)PNž<œ Ïeè¯=lýØ9t²¶– ‚…³*O†¾H†>M„þ ýw¸jÙÑ…ÛQpQ¶K¹?7;ŒM3Á+N”v"Ï¥èZÔ(¹¸} z…Þ^8Šö¢Ëû—K°},鞉úòþ"Ú˜12̨Z˜\bŒU Ê#ún³b}¸MèǺ2Õ¹â8 ¢&Ú÷„oGùÌÔnAþ*ëmÆ€C`ëá€]úÒH¼Š™90{ȤNþÇó>Ž›üÚbàÀvŒÃ®%ŠQˆN0¸<`aÁè"ëYÞðaçæj¬Ba‚VMÚ‡±ùýĵ"XŠcÂg9áÊ“Ûyy’݆ oª˜¿Æ+µsád•’æþ&K¾tÃÆT1¬Á×d‚2}ù›ùÑhN{ùÆÜcÑÊ’”+Ô%d­È”ߦF”vYGGšË±{ErJÌ’•õux6>B¤ò LŒ8Ü™êEµ€YDGé^ÔaAY A¡ù­²Ÿ^—¶É„ãù±dâÕlÝ«0ç WßG±ƒà… ·ÿªÒÉm ¨­zë<Ë‹‚Ê~Â7"™?»ŽKÓˆPó'uÅ Â4¹UVy´Jûí?Ôçïü!:¥8ÝRËïÜX¥{ Vwê†61ôv;£Lƒ`%kÒ¾¸AÚ³¤Fi¤“âƒtЇ¤„ }\QBÐ'R6üêl¤²,Sœºô ÷ Bw¦ß¸ÓÁ„ì­¶ÙÏz^„ý gÜïX¯ãX’Àt·\n:×lš]«¤&óò×Èg'5`UL–+÷ÊnŒ õÑø$ÉjJ\\¹W½2*œù°W‰“T®l:—¤mynN»EŠq‘´AOÝÌÅ ™-W’²ªë½Õ½àJ}|,¤ ®@ܦ`Æ÷ ûS(”eqaMÌÅ⤲GnšKkÉ—’8& ÆN4CÄŽÊ“ÓTª?õPé~Î ;FÚg¿ ÎBZ]U‘J.+ôý\èÑY:tVS7ó´B‡ÈÊlç'5qÉKåp‚:BÞÊ0ž.FÁ„¹DÎéhR±?ä»wÂ\Pc ¡È²¨Ñ&ý¯=»Õý?黂sVW]¥/ÅñªT‰Mê%Š®7 óÍõY=mÊV|OØøL™ÈpYu¹Nˆ®¹÷ÑÔT_׿æ†þ f$Í‹Ú\ÊWñÍ;®á",W·ê¨Ku$H£Õ1`5*§£à~#éË ‰;yU±Ëmu»SAVÅ'ªKt d³“Ë«Ûßb™º…R±ºäíáþJ¤¢;®ÖqÔE¾Ðµ¼AeJŸä¾‹ÙŇ¯·8{ýnNøæÝâ,ïV§DßÊŒCÈb0!PÜ¥%D´µYl°¿‹‚Ï—«¢cŒÌPþáÒÏ]éç2¯Ñ´«{Á_ÆØ´þ¦?b‚ìGSC¥@ñËZ¬Ùµ¤B›Üíßá e‡’öx áƒ4À] ²X´;^GÔ P£;?l¤¸€]Xœ|5˜[ÿ¾ú &H_n®£¤Ž“ žãÓdVMçç#d"ÿÃh>7\·lÿ9‡e{Ìʰ—#Ó"Ø3d©z±ŒÝqLãÛ9Dãý.Ž% 4ÂÈØ,ß#"3Äál:€ƒkÎÎûCÛ[N0€™¹øî+€ýgÜ~›·¯p[Ž"lâœì8`Ù+òH³æ¤[ÏÿØ0Å5@1Ü•½Ô¾å]Uœ½š:5Ð}Ð\<¾½Õ^‹-Ò,L’r¢ÊŒ^XÄ~µõÐ"¹Œ×ÂÑ~'š°©0˜mwÆG7vQ%×ú rÃ6â](#Ô/–þ˜ß±œÅÙzEv±'C<ÔO–”âF³"TySÏæ¦ÃzæNM1áú5Ctð- —n!‘¼[äá¼³½¡+FÄòäUà=ï¦ü²”)Ò­íx…ôŽº&×]ï¨ ±š{gøáÛ»¨ H}ßåSæ@[jà°¬bÓÞyÖú¶¯iþ§Eí×NS޹Èé V _%/tnÀÕâ4å x“opºàØ6Ð;.±k3épÖY?­ñÖþ¯\µíÁeóÀ^%¿ŠÛYIRHx%“£v%zòõc!¡úÀ™aËñwÃá'ÕEê°”E ™½×p¥zE]¶‘v}ç«çØ ÁÂÚü:©TÙ$§¶Ê™ks§A6ÖÞ~À.ÆY»’EaÅß[Ù&ÝUF¢°¸ÅTŸL[G> ÌÝ^Ô×p¦~(QÏC‚Öø6¼¥Žˆä­uu:E©rqå:(ô„æ Å1•²†¸“ýåí^eÏe™-YÅu]þöåKc1yøV©ËÝÒ[??Á“Oú0­ýÉÕŸñ§l¢ãÑ@g…9™O‘’éœ :ûªOÞa˜¨kåï•Fíp(Ú.®àõ”@cä|¥ÑIÜ6¡}b,n¦²ö ~¯ÚïÂØƒkQaI'ÉÓI*ë’hü¦_UØuSV°þtL›ìVry³’ æÃL—ŠGÔý•ʦñj¥¬ÿƒE²H´ÒZU¬}ŠkéXp6>èœÉCβ³šM–Ì÷E0Ÿ`·™Üy[V‘ù‹ýë‡ò,;fxseóˆLÉð€;ÕçÖÜÁ¸÷Z‘ÑòkR¸á™Vžn…_8«JmèeG—ãe¼œt¾‡p%K™ÙÜ]ég|VŽ3Ù­2«¹aV€ó¨´çH9nøí]×°þ7Ük}"pj·®t ê6=–âÓ ‡àpm´Xˆ”5]r.KNÌ8, YËò¸LƉ,Þg²Ý6È–k}Ÿ/e•MÐ̲ G¯ÆÏÈÛÒ¯¥sá¶Àm8¡Lí'ÑZ?ØI² Òû“ñU_jÄF?Á.R©•¸-6Üô)˜Ð=ˆIä×DZQþšuUâÖһŮÆýÎRQÜW†®ŠâzÙn'äm/’ï†;”k;¹¡õ5}l­éc{M«•5¬V·ëe• „¨·I’ú3ûvÓÕ:Ë)¦ÚÀ<Á)×pº³k¢w ïÔFëB_ˆYVŒ.qŠáQ Cs±qzѺ°º—ýò'÷CD ?Á£@@˶0Ç¥ZÜ ˆúá‘Æ„@ZÝâ$_É^¤“ô0I#‘Ä;D'6)`ÖSÀlüÄÀllfs30w7³õVÀ‡Ÿ´¢Ù‘Mq͘¨Ù¥µ˜}©„ÄD%rU rÑtK)jS$´NKX¥ªÃY“[0V‹š¸]÷7Sƒ¸–½ÀÌ0¶ërPJÙh•<îSk!ÒE}>mt˼SR® ;Ê:JæjhçRa‡®TD-í*ß÷³Pª ªY9ÂkÁ—÷“ó`Š“û«6â _fø*áw…~—Îðë ¿3uš],ÃI÷jõÔ”¼NQ0“²PÁ‰¡©¥s\‹MWœ6Äõªe©«¿¤eÜ!à0·+!fk¯);ÛyZ´lcWŸ­odR»y!™Aqyù[•—ù1]¿MÑë¬óâ*w]ÅZX5ßam Hþ‰å3/Î t±+Z’iÓ“‰¬déîA“/GVªIÍ"ïT›¥ãÃéÐB«Ô'øæ‹·.P1nzÀÊâ…H@‘³óåø Ž°.¥†™OK§{Ͱôw:ÞÚÏíçà+& W¼IáH°k«3ݺR§‚QÉKet™$?­X}6$–k}ÇÓ€£ñ9HézH>;¨ÊUÑîˆM w˜ßsáwÒû¡êlx%+;ÅGØN³ŸÀÞÈ7€SB¡hli&m¨‘¥ ªÊNÇKTM¿Å„íTMVÍäðGÈùÔ wÒ«DürÒ©Ûé>µaà»dÍ@Z3ˆ<ëB’ÛñD[;®Ä;)„±úÓÙ¥”,Tq¥Žcì˜̘»R`­Fw¸xáƒO[ŽpI·áÙ¢<…ï5ƒ]dñƒÝg VcRQ]>¼ìöl¡ññʰ% ö”ãÅv9âÝ^•mv Óç†É;¡–ßi×Ey¡.y7Œ[ÚdÿÄýá[þ“m¬Õ=)»Q¿T`ÆZl4ê6ˆNŸ~-óXŸÞ¨$¶wþÄA9Çi¼SE]£Øò¬œøTçü39Äþ‹¦^ClÇyÏ¢b7λ™ "Ô™.¹ú­Øs¸¨Ã€ »4•7½ƒk;¿§›­æ«5íÄŠÄ}ĸñT¶;OÏ.³`y´)yYÌ„)ÉŽÈB¼ÛŽÍ 'LwÈá´¸ '•ÊùE‡:R7r´ÃFS\”ý6d!y;†e®É î*Td°o¨.Y¹ ùè¢:G²îtÝ,’ñFâUÜCaZ &H®nHµð.–ðPµmX“°.¯Âv'fÈ”Ït‘•qÓ9>=‡Ûž2oÓ®‡Õ8¨¦‚®Ð Q=¸ÍÁðþ…?/B½ÂG€¯Uýšhž)}8°[}"Î{/tГ‹c ½äž,Ç'è¨ÇùÒ4™Ï^<Õ•Ì—c3Ý«°ïî[i·0] )rD¢á Ü’È08ip-– F+ä(¢d89ex4¾Md¸Åí¯FpíUüwFŠ>B‰ên|;{¶õ ™º?žŒ‚dÝ‹ããѼš ­%Có Bü4܉ySšŽ·†~ª‰ö4ø—ãÅR:Å´\°<7Åé«Èb¶ .@ºZA‹œ//¾¦L Ýû;“\"3žÝ=Ù›.Þ–™¼åO9²rÍ #lcW‡³ã«¸µÇf«;¿•ÙJ°)å&çØ0eìMÒ©óú‰L¥Àÿ²»yL<ót>–Î}½òc–GÙ63´4G ,6 ¬ê ¦wÊnŠU–F-¿pרGT«wQóÖ…@1oUˆôaê$h=Y àW²ðæ&†IœOe¬ ÷ÿRæ­ê¬N˜Ykrg@ ò=Q¯ÎžËí aè\‰;ì-—e etÀÂAdH¾j+ù"¬°>µcÙUëܶ ¾bÍÚì(7€ü7:ÂùX?”ëe ‘ˆ%¡š¸i ‡WœF¸èuL% ¼ô’¨@+ #b»‘IrECêú*&«Ò™@‘ˆÌ¾ÌÚÅöT€ô·n™TÝYT±€J.W…óá—=Ÿ©Éb‹{íiÄ=Á­ý%Ç„”$……G¶R§¿b¡Xœ¾t>à2á©yü•#®˜ DP£•ý¸VÑQQ+º²Z°{÷“… &K”.¡0áU’–à¡Ê7½8C!‘!…î¶3t@ T°cïø¤Êå•»˜o›vL£®˜bõÆS"ìL.üœ¸®ÉŠ· ̬ë€bgSiÓ*r]*Èç:à–™þ±Inç$qÖBÎÍRc¦HÏQ„cñÌì ž†ô ao«JT…s¢v ïOOŽœ®ê/¾’ N‚"âùêz´T†ÂYa8:—ãŠÉœOµ²!ÚW9`¡¾0 ç¿WÈ¿ÐVZT‹Êõ°J1éÞÞ‚U?Ù¥¢e&PÙ®¸FÙŠvC6,^K2ïhA;_Tár=¯"H[`ý.MíM§2–Ô* u"(¸ÕYÏÝVÂ~²øjR"L%!8¬r¬­Á^ºÉ—¡B2ŽÕ¾!PŸ–¨ùét6|:»Ø¦ny1ê–¥ÎÏ'/\ÑõuÝ’«gîò]£ cÏ t'+Jp®|cž&O ¡“® ›Ce°K Ù$ˆôî|ˆãIïº+¯,•º1%_°M%×ú¨›6s“2w&^·†;Ø¢­õ°­õâ¶Z—úA{u›Kžæ×4Õò ߨ’j¯A¿å 0±›6cƒá¦Á!¤Ñv[Í"4ç@º|ëÙ8CDV„Ó*&ÑÕ”‚z-î¹rW*†úÈР|™ðÉ’º /ÞNG³íëd—«Òf ÞÉ+TÀ%49… s7o›5èÇ…'ªpP¤Ö¾À[·ûŽš­P›l·"1KÅUÔÝQӣ棇Ú6B•Õ×ðÑRȳýq@OP™ %ŽÕñuš Ï÷iëÛQB6µ ôîàÑ •=øÅ]»eû2á!Ë–«L¯@ˆV…~^«ÈÅ·oµuy‡¿iï›ÀTèöÉðì2•=8ž¤ÆŠÓº›ÚírU Úî)—@.îjRq'ý)ì­¼$ä“«KŽÔ€I¨{¡$doÛá÷]KQõ[$inuµRioš@²Y[2¸¾;&ÞÃ96Ö|]Iµ›Tç„,0¶ƒ°åD¢.n­+Õ«ÁYÛ¿‚–¹Fª!u ^ªu ©ZÛ8ݲ"9EkRqËM÷€jI”|Áe @Sê8–‚Ñ  ÖúÅJ8.CÂ:º„9$‹µ3®“Àâ µ0iø[ŽJR bžÚcT¡Ààç´¤ÔàåœÈK•}5ôb¡_u ¿w? ÔP”ðÁ‚b$Vü²¨Ðí%¢V±Dl(—J$¢ÛMrSóúÁééû‡_ž÷éÞ“Ör de«¤í™xÿðq`ÏT ÒáͬöÎ-iaDr¦mú™©.jÃw ²5mЖWoݲ ³B·¶jR6P’iDÍ~ÏMÆ.°L“¦Wr%&û…m§£5Þ·áÕ¼@Ÿøýé¶Ö>Îj‡-î”B[w1©¼C9Uq‚P­"Óy?Bk°b¥!ïÆybx,šÀ±ÀñÐÇ8š¥h­.úþW[ƒÈ-›ƒØnq}9>]°¸såô¶m‰Þ‚/6ä¸ðQa,.¶¶ “$[\(*eß–úèôn@4³±õâ¡m>ÕrϦouÒXT§L;4  §LEßzL$¬Ö “ v±hR´ì"a8OìUDè(ø*‘0è©‘ÎBµ‡4^Õ-$^’©ªe ¹´]®~„õ«¨1È^R¶¾B±²¢í´c°©õ%ÍGƒ£ÓÑ%ßgøa ˆ¬ÉgJÉ¢Ù@ca{…õîš^­i¸_³´qï“ûF¾žš5÷h0!‡‘Ôºrç ÷ða«Aû›¦¨åhnÄÞw*Ä5ËZK„šfP¨os  r>S…¶ióÕ±ZƒË¾úÐYñ¹”§BQ§¤5œâ•ã-ƪ?|SÌvú0!a%FEÒ6ºpJ°ßíù:⎇ðy‘Ï2»â-éœÈÃÉäÂÀ~` 3ì±ÁE>ùä»ñrbRß³É2‘,»÷íýì·¤kj=¨d}˜M}“ÙÉ}ÈIqŸù²zàw2H„"óòn¹Ún×ïQÕFÏÎ_Ì™™¸{½ûYµÝÚýÔ$ha³«m^dÍ œŸÏ@ y”uL¥ßB¦Efú6š?ÝwG2øØŒ5è—ggÂó)A÷ŸÁìP­Öè ß1öñGvÂ,~n—+åÃÑL¿[™nÙ¦÷óc;]¹÷Eø%Sü%ù1J3› Ø`·|x4ëC~óqÉcCN®¡fÐÏæà…•‚.÷ðt0OF¼˜=%#–g™<ˆY¦{ÿ–8Ûûü»W²òޏ™gfžœù† ßÍ36DòƒÎ¹„lòá–þSWååuFãåÃÅéøx 7²U\šÁ¥o¶?-b:-‡"|2²wÑÚÖØ‹\Iè×gËË daVeÍW©¹âN_œŸŽ¦Ù½OïsÈñlº´×zVdHg1ù³#¶7Â@¹ÖW ô  ûvf5êýhèÜÅ,¢yäŽd܃‹ò}m©jº*›‚ÁÇU¸–‚¦†žÂ2à’uôuA”ÑçtW­ ;Ÿ.ç"x.ÌjâL”ß±U[ƒO5Ùxˆ8¶çPåPüîR‘ï~T¯½o-µèaÔy˜Ûó…ç–˘“cqØÅ@äX޲.e…u¦Ù±f°XPu,t‹D‹¨i¶Ðu,‚:ÎÁTP‚ÔðÒjC…œ‡t}|¦ª8> ^õûB§^±Aê±z›ÌžÙÅÓÀéX¿ƒSc¤á||.Èóô™âæí…|{þD¾ UJ9쟌—0TU&,lŸ ›h‚žŽ^„Ü]k>L²(ª}~do• ŸX!)®èyÿCDrCÓk¿¤5¼Í{Öï¬ °r:›à; VÄé' ?¦Ÿ+¢›Žžƒl'ë¡ îŲ·Q_t0xèíÏæÏ L>†m˜Çƒ3—›R£‹F<ÊZt’5Ì“>Ê*ža!M”ÖHî`çáÀ*ÚÏlQ×,¢â# Pð,1ù{µÂ%œvÍR'[Q=<*mN‘KGf«â䈙µ º¡¥t@FêmbùXíºÓ´äÔËùŽN×Zàa*½ ?$A€Šý·ZÅà~ªÌ_E…Y·ºŒJÂäf÷Qeñ…T EÞô·×Ù¼¡2ítñüGßjäÏíº7÷›¸Ñiœ=…{{–űé[†<^O<Щ/Èüç*†‡¡Ÿ¹ÖT¤½€„ìÑ¡š,’%«t„PQÝÖ0KÁðh˜ÁýÌþ‹†¶TqÁzÜß¾²ó vÁyžò Ö°bú*³¯â<Ȇè±(Êui´DŽ;À1kWhX1ëe¨†Ì¯ S%i«gЃž‰än˜¬¡Tœ% ù­Í¦ yÁ…A$rýΦS¹gu7ó¸Ô_Úx•úŒS‹¹½!L|Çϓ;yßÏoÜ}“ãv0o“!‚ƒ£Óò‚ÄPÇÑ`!Ïàjÿدø*b)j­³ÄÓ:}1†]ñÐèg°öä¸ÿ â†1ô¿rQgc³ ŸŒÏÆ¢Ðç*£eÈb»ý[ž¹§hË<šÉE'û•êÞ)æ×2qÌ×$GÐŽ†ï:ïjT• µ­ð>'ÃðYcÉ}Ú7ãéÐ_~uå\8…0ý5æ8òkzÍj¦ØÒ¯}Hÿfm§­Î3Ú²5Ýᛘå“©6#›“Rª»NçÇáìVÜóþ†žG؃,{p;(,Þ ‹í °Ø  °ˆ¡pàc»ÛBûßϤà.!sðàr°=Tº ò$†J×ÇþMšKü å&ÏiÓцûÁ|»´sú)/úzû}ÆxY†…ròÿX˜\\ ¯rüÍ…Ì‚—ÑÖm‚aþÍotjPâÔ‰ú=Êtõ{N@•gè cvåGÃÙÓñͪ´lw¹sç)Ä&²'ýhÔ8å¦PÜד5hó±uÕÐ:,ÝкW a6O­#Õ]ßs¬ï¬Ä½RâŸÀà¬‡Ü©à•°¹ª¡^*qIÎ焸„œ˜¢++®¼ÔNœ+aÝI\².ŒÿÄšÑg\„9OŸ €Äƒd?R:¹ÖWy,mÇ£ÁÉ !è"èBÓ ]¤AºØR*m P®vœ œK%ŠR-"Ø…I~ Ó€é›@jÚï‚|¡´;[l—ï„yéIXÑíHûäX¹ý¼Hù-È÷ §°·¥Ø“ER…Ò$¶&w ‡+tÎ$ÿ°è× ¶;cyÃÅfÀ}ôôý€ ó¹süd&i̲§î —ŸŒ½Ô–8Ô),ê×AQ˜u…- Xcƒó¼ì<\¸£Ïxüòûƒ†) ÷vœs ü>ª¿ô.zRDæ-üýr"tÐì^­¬ßC{B·‡Â…&E⸠<°øœåŒ¤¢êÙL¼•}ZS˜E7£ð@_ÉZ#Þ…àaŠŠ%I ãÎðú>$ŸÅ¿Vò¹+yÌP܆€>þrY0y¥ññÇQx»QX0ÇùçN«r­ÿÍ‹$'‹C¡–-HM¢>AŸ£Ogå~´A/ò˜:„ ýPé×R¡, YW~WJÇ•ôã'*«Í/hš2Ÿ¾¯î>}¿Ý$»ÛIèzÓ©5÷p‡¼³Œb5!ÚP¯Ø§×jD•SÜï Ž‰/³¨d¦L;Š UV¦ï꼬0iöJboâ®Òž,óÖç~¯›íW!.Ô¶œŸŽ¸E¤ˆ•µ ¬µ¶Mö`’íÙ-8#v>å­‡Exd‚ï;AvJÎÏ“á% ³J›a.o_O¥T£ìÎé{a!h‰O¤³WS8$œºÂÃØ{.«’…ÍÔñeýï½ÖX…C¢x5•Åðbé“€Naä]!ÊÑPß$A¡Ü0qÕ{3DJ¢;¼Bh6NÃÉh0§+§©iÂöJÂ'3l}Ü5®ªE]Q§?Ô(¸‹NªÂU7åégûXÞšõJæ(œó·UP¦ô}?"UÅ•á I#@^àᾩ󸅘‘g56в •F)¾4PW|ú*#>C'…?É‹Å8•›ÏAÐÀ­±£l9Ë@ÖñÊU=å’„ÔŽôîºS–k¶ -^ AûJ̉QR–<*PÛÏ $Ž!')Øž¡q=ÙŽ†‹iW€d{’ Ó%›’|ÝL|ž¼µÁ‰)ؽÅâo`‚h¤ç1K Ó¬üµl³òYEdå~V~’aÕ8µ’6êÌ ÖX.˜å°ÝÛ+–¿›geÀž7¹*wŸ€iúÞ£OŒ”U³Ë]—ê,[5uÈ0ƒP™í4[Õe¼ŠìË'|Ú‚ÖÏ»þtŠSµIi²¢rï8›dÏâ ø¾žšlØþôȆ| g‚Y8RÖäNˆWÕqüw—!lè‰Pi{˾á3Mè Ú9JIÙ†ènå¤aOr^Ä*Iæ22?$ùüå*…e…>5Ú$hSæ#<W"‰ÏÿwýKC™Ž†+ºd=ñöŸL Á“Ñr9Vy¿>çME—ãðëÙô¬C ßQ”¡Á6¨¾sBhF‚Ø.Ý’„W_«{À7ÝÏM×X/¥!buâWŽß‹ #e\ò¡ü? ‹º¡Y%ù£Èæ•Xº <±žpЛ2xB`šLæ7«q5˜N¥Vø°–H(Ìt³éä¢9Æ÷0¯\ë'›õý^A¿l9›ï~-rîax©‘­§äØ£zÇ•ìfϾ¡“Ÿ‹Ð½G5éÞ£’—kÍr;ßäÞ£ùÞÝ{ÜðXp»ñV§‚ÿgEí­ÞŽÎ½y/9 øÙáÑ9Û¿/ß~JW¿•ñ‘”SþfŽÜyRô¾Q£Ü$÷ˆ›Õ(Ý€zûmÏVÂe`,T‚3®FÚ#² ®»»òöÌv†R¡K•ÅjÄžøUæíÊ–f®»²\Ù _Xî»TÇ‹KÂN—15y¾ÏЬ÷ißs$öZm(4tAîç­JèÛê§«¥ßr‰Sï‡_‹¤—ãe‘#­^Jáµ<?ÓÅ#é?©|x1\ê€ÉäE¤˜êWyï(ÆÜ˹ŒXÌÈËõ¼Ô­þòA>›Ì=p^ð2„Ã#u±˜”Cµk3pn«])“YÈxIh¢Õe%HÀ—zñXHY`Øá€´°rÎF3þøâË ü ¢ËVjr׫ÛÁ‘£- ¾¤.a?êUÜÕŽâš¿§Ý­{MÛטÎúB|Vî–)âÞ´+³@gºªBáh:haÙÊ—qãÊlØìâ~ð_ˇÇÓÌÈï†ÂÄ}Œ¡W3Cpnølὡ¾P#Ùžbãâ‚{1ÊÓÅ9³S¢9& É[ÄýáÈ]ù¿g[¦¢C4ðu J—Êù)ƒ{RÌZÇÒ)¥4=çý“Rnl´ÙÙv^[<­Øm–]‰n{l„çàg1¦î²ØZBì0¹!ïO«aé%KÀAÊ«ÐÉ#—T¹N]Œ‰½ g {øÏ§¦_~Av2õ±ÙS Ç7Žs Ó½Cä·ÁœOÈØdÞ2©ã˜K9nsÌDs¬8•ã$ÇG4—× IÄ´xÄøÃË|lË r· Š‘‹7xðAp gèrÖØd˜™^ºx/Àf›uŠc¨‹Æ©mw×U]IT+ÔAx­›“YœA"¹Ò$6%ÿˆÇ­ñØÆ2P·‘Vy/wZ›˜‘l¿üþï]âyñ\BOn,ÿ×[ãºZK"[nÈ'Û“µC\‡Yîá?¦1^dñÎóèbÓ<úˆçÑÅvóè¢h]Ì£r­O©¶ŸS©9u‘šS7šSo7§.sê"1§.â9u±íø\¬Ÿ Ÿ‹ôø\ˆñ¹¸ëñ¹x_ãsÌ©ÂIj0ªèw<£þ‹7ÇbµR8¥nÀì®b³‹ÅãØZ<£þ×·Àu¾~FÝ€p&Âøïå7šS“^•>¹U`ÿ:C,k¥ yÊPºNá-bœrÍïÐÄM(ŽÒÚ6tg( ‹ÝzU„rão­¥ îÒp`ÊX˜™ïbaƧPʇ­*œÇ8u³Wµb~œ6O]§|²ÔDá´{BUbgîÑÒ6„²J•ŸÛbÇÍ0·õ 0íK‰n­ E‡l¬ÿÔÎÕb\ŒSjSmʪÂnýãÆœ¡?íÈm†Ðþþª]d–ñô™!²£Áp8b×Q‰ejΈüü8RjG{ït£AèĈÐ{Ù}¶ˆ#ùõ@ÙðÙ”7ì Ó¤ŽeVƒûÂËÓ±Ýp“ZS‹U.då;lì`³e(8œ&¯•VÖÅ˼¥óÞRù4º'¢ü<¼¢,|Y+ß<®úÀ×u T‰Y^Óê¸òb2ŽÌ:Áoá•0¨ &´¨:£€ß[—¶¾[4XO¿Ÿ/³cCØsqËe÷½Pî&ÜíÎ@[øØ9-ëÜHA×[×ÜÂOgÙù¥Q/J çÿÒ½OŽz§ƒ9ó0ì⎒5çÉSŽxŒc]10àïvbacAWŒ•F;•Î^Bò£Jæ“ØBz¢½¢òå$û1CòÀµõnJ·‹\ž˜Hœ(‹’¼0ÅgDq‰Ø‹¥¡Ñá¹gÕî2KkˆçtÒ‘tñ„p(ÜÀÎü®‹Ø „r…ÉéšÛh¶oúåÄù6ƒ_èWߦŒU¯hcA€s´ ᑆ.Ù‚j“¤ÜF^Ô‡V½.‹J¦/„Ï#û~"ß'ú]ºú°vºü`Æá}å%±LOÎ(ÈNAØ =çÒpÅiÙ‰ÜKé™A\øÄHq-Ç¢Z‰Bd©fà%r­?Î1Õé“'–7áR›.ÉñæÛÈ߇œÌæq)ÀÐÎZ†£ðߢ,¡A²œSB ɨ-¤© ìãJj ˜‡ED æ ÙWwq20›³LÞe³gÉÚò¨ ¾]X0hWŠç+9’„© ºiÃ`¶¦T ®U¢Ni9œKÞù¾°0›¨“ÁìȺ¯Ÿ1ñzZ46‘«3ÍV“ÞîÙ¢”$¹k©™ð‰ÜåK‡ªÝvwðLЬîJ\d,\¿ÐšÅ]‹Æïnˆ"a>õâ·–j½¿K]¦ßŠÃÿ˜L “‡…6Jžj8%†D E™8:7—ˆé Ê«y)Y¢½ ý§Ô>mÜ`•”ï<½ÈBRRt3.¬´9ÅÆA&¾ý\'߃¤ ~uŠÚôd+.4°±Å›W¬Ò«k]8‘..“€êßš2¬Ï7>¢¥„ƒØ÷Y X~·-—@åéi)E„ª\(+c'/iêpïÇ3Œi‰|cá÷â>ÙS²’‰Ù(Ô)æ%ö¨í&I¼UËEm_’?ëhâYbûïýÞ)ðâå?üB»Åeþ „(‚š¸°¿vñ„¼3×ßúÞ çø;l’ºÿâÝ:ú¾¡·ÿðÿ­qÅN7·ö"ž‡^Ä †_8"œlçúéeyð×àüˆ˜=´ÿoÆpd4`6Þ&Ð À¢ PVöæ=qqÈÇ%Àæš4·½ñl¬õ¡ß»Ò¿áxíõ(Q›ð&„Tp(³<+ÜM²:|ÞÇþÙuÞœqKÆ@ÎþÈÆ6^Oâp—BÃÿoó÷úFö^0xß/¿ßM°Z¡ÐèËzâ[Ìí53„]x]D©Ò…ó‚FņÙA/|âuPÖz‹Ù€@˜ž\d03¼åÙ°¡oj*YKž û»9ÜKyB‡²ŠŽ~¹lÁѯj¹–—[íâ“_íÚ{:ù…Ý«Ö#…,m£ óè+‡¤ûîF¼Õ͇‰ZÒÛêñ®:fbrLm§—ÝBGS©›ÇÇaÞ¦ªg{¾O•󃥋Ý=Àpò ScùÓª#Y%7¸–ÉjK¾q,;P3œ0A¹ªµ¶©"s¯¶;øà‡Öju™¨Ö¨Q"¸¾Ór µ°†fUg®sæ0g~³œp£¨¶ñ6¹?e¸˜¹_%W9|s©Û( ìăJ”“²„…¢‹Ówi¸90¼œÐ‰†¬e‚:üéá{‹ûž›«óM_¨*½Ò÷H6q·uªÐJ<ñxït‚ù±Œ¦™¹ ë]ÉÔC”Ty&¡¹vEm4Ä[µ$\óŒwfFW0žnZ·Ù-WÒžqÛÉ€©‹8 +¿éý› ^ÉbáUJ¢o%Ùdì‰ìfÓmw¶â©*ÀÂøÎ„ÛÍ÷mÖbwË»r¸=¯W„už ‰o1·µcœ›·qyÁèsƒ¾‡-ˆÛ·À ÈÜÍ™„ „3§…%6$ƒÅ©Õ(: ’f‰Ë³Ÿ ÒÆÒ¯øàÊ8kÍ­•¨bq4¼L+‹l¢ÑLÖô´A 2õ²œYW! ûâ–¾åâäç‹ -<Ïp,žŒóJµò ZiZ_ J£åâl6[žNG‹ËÓKåA¥R±WâøD’~¬‘Éìì|¶34L3 §Xcáȼ-æCwn:´Ï‰ÑÆ< µªÃgƒ§£X#/ *¾›B îÎíQ+èôv¼p.XEÏ\EWìŠN_Þ³öp_€9£Ø6ÁÃÙÑ({Œ‡›ìóƒN znÛ!»žè{²ó¢÷¥Ð­UäIÙ{Iô„[­‰A™ èR™x¿µEm:[Ôñrñ¼âU´åWÕ8Î`{ "G+ˆéO'ˆþjóè1ОaGG%&ìÉű¥­¯8_ÎÙ§CÙÀ IZd6aFþœNMÇ]º£Å2†4 [Î ¥u-J”X²ë\W­¢7ç³N¶@¥0M]ŒK.WUÁØ>®žÕ¾Ñ\×$AõÈý¹˜º÷Ö'ÜÀ^‰Ñ³r…àuP`̹A%÷ÛðWmá,€W!⼋LžU¯­ 0eþà"çGç¶j³….§`P‘³Ð{÷³òÁÅ“¾ÉJcÑ”²~W¡\à žMíý]XX¹sÐ{ø°Õ(È.ê^qC‘*¹yõvfÊ¿‘V?ë¦a;9J8 ÁK‹Y¥L#+)ÝH´¬lã–iÎòeÅCÇ5µJØÔ\­îÝyu'¯™q\Ð#¨Ý¤?Õæ;dê¾ËáU~þ.Ó“%5šiŠKå2½¬´AòÞKÙèÞ |ö6=~Q¾çêÉ%n#a>c'Ÿ(¬æþ¢²’†²k9´)/,¾aÉWCœ‚ HÈ3$Ú‘KJÜÎUp’ÇÙg& ›.|¬Zd#Hd ÷UÍ«^«¦7ý¥Y㹉Àï WÚ¤h‘—ÅQë2`¢é»€0ª«Ö§‚¾7ü§ÂuÏyqsoŽ”šB vˆÐ’‘¡S“1Žrgï«T"Z “º½5> IÊ‚y¯'Ä”…ÂÒ*æÞ'÷Œ7<5¢³¬ÄŠÜ‹«Á)¦\\Ä?¾L?7óë ¨ >Ï^Œ&“Ùóϳ'³ºüÞ“*JÍNÔ¸ùö‹®E¦ªëj¥Zî¤+tJ/Šôé:B±®æˆ•yÚÂõŸ´F¥I‹Sëæ@* —ƒÏc5û¦¶lhÌWP£]ú U‰æ›j9¸uÛŠ“4IÑL$ ÄôBܽ{&N„¹›Ï¶…Ðz}7ë}õ»_k\yEÁ]Öóè×@ªª Sìº$WÙõ8Ú¬ÈýÒ‰Oü ¬[ø"‡¾rñÔi'V3¨£u‚ LÏgÇÏöp3­lý \ß¾¼°}ã´ç`t^ÐFAïÍÚdKXߨúmµmKÜ%n·BêŠî(…Ÿ£x>Òb“Úé=åTÝQÔå=Y5u¿ŽÒ’TÞ€µéŽ‘_ÉkÕh‹?Ô¤‡uHÇ2j¶T?×ånO®«”“"wïo¶¶ÁÁe-Û¢ 4ü ß»5ž<ÉdΑ¨Ä‹04ýFÜ´~€À$1ìžô¶«NIý$ÑDpw_ÊRi§w":*Ît‡qW«ÃÙqÂ3¡Ý]Ù}}ŠÉVÃgsuSBfð®ûCð7ß®\´+ì„b’†BöO°M³vë œ–hÏNÜ>ÖÁh ë ¿qsh¾X=3h'G¸¨³ÀiŒœe0x¾ C¾0ÚHDÑHû,“ѳѤ†ÖfÉ i³.Eà¦ùðÙ`¾ÈÒœ;_|uh¦¸#ØÝ”ev¾U©±ùÜšæÚ¥ËCXÞ˜¤ÍµIåVÔ PÖßQ ÝÏüø§¯gÝ©LÁ@ú,»×…YýÊþîÔˆj÷?þH¿gàå§k¨ïñÇýû?ê÷ûûý½~¯ßíwúí~«¿Ûoöýz?ï×úÕ~e¿¿¿¿¿·ßÛïîwöÛû­ýÝýæ~c¿¾Ÿï×ö«û•½þÞþÞÞ^o¯»×Ùkïµ>þhow¯¹×Ø«ïå{µ½ê^¥×ïí÷öz½^·×éµ{­Þn¯Ùkôê½¼WëU{•n¿»ßÝëöºÝn§Û»Ýf·Ñ­wón­[íV ÈúýÎ^§×év:v§ÕÙí4;N½“wjj§Òî·÷Û{í^»Ûî´ÛíV{·Ýl7ÚõvÞ®µ«íJ«ßÚoíµz­n«Ój·L[»­f«Ñª·òV­UmUvû»û»{»½Ýîng·½ÛÚÝÝmî6vë»ùnm·º[iö›ûͽf¯Ùmvšíf«¹Ûl6Íz3oÖšÕ¦ic£ßØoì5zn£Óh7ZÝF³ÑhÔy£Ö¨6*õ~}¿¾WïÕ»õN½]oÕwëÍz£^¯çõZ½Z¯äý|?ßË{y7ïäíÜ´1ßÍ›y#¯çy^Ë«y¥Ö¯í×öj½Z·Ö©µk­Ún­YkÔêµ¼V«Uk•j¿º_Ý«öªÝj§Ú®¶ª»ÕfµQ­Wój­Z­š6V :+!•nÅ­bº]iVLÓ*¦põLŠ¿ÓþO»sK ô5*™‰°Cm‡"¨»øø£*¾úx±Ý="Pü˜<Éʵ¾$ßÞé|vf —¾YûO²¦ƒüélø´ƒO+úìšwŧ|>õè“›sõ©Ÿð§~ ªÔÇ cÃgoã§'?¦D ýéŸvôi©Ï.}ì›)±|Âí(…,?MK”öcJlXÅOÍ~HD²†&,*8[Å µ};Üü§g‡^×¿Ž‚m; a îÚÁؤ¿0,MÍuüÉݧf?ˆblRßÚ};p÷ìàíÙÌŸŽý´ítË é];¬ý§a‡xÝóÜõšîUênß}öígÏ~zðùø#à ðÓ¡OÛ~Z–9ìZÑ´L¢aE ¯á’bÅ2޾eû†n÷é³gYIϲ?Ò‘äGLCŒ@÷¦DGáDËžV‘5åI:óôÀaÀnh¢.(BÒC@fÚÚ³S—ÿtí§c§2˜Ì`:ã §´Ä¤†Sš™ÚênJÓZ8éÉÌMe4‘¹iÌLm8‘¥¦±¢IÌdlµŠ&°?ºí–œÀš o Q]…“Œ“j4Ù‰,œÆrƒŸh* '³p:óššÒ˜šˆ—uÔ´Æ›ŸÚþ=ñ“ô§~›£ÆºâREhMø|L‰µ;øˆÉÄ”X½ÛÏKÜøcJ¼ãŸÍ%:>á'Ñjð©Ÿ<øÔ£D¦Ä†ø4ƒÏnðiŸvôé˜;êÓ >½à³}‚Sb_ú¡ÈQ >µè“ËYJäfÙ ?àÓŒ>»Á§å?¦Døß>àÓ>½à³ÇS"~‹:Ï?Lv:Å Ä…†ý4íg×~€ ·íºöc&Ãß჈ÂV`C"+NØ  8Ò°Ÿ¦ýÖmf ø´í …Ÿžýì٢ܴÔt§Pœ¨Q(Ä ;fN‚OÓ~ÌÊÆÌSðiÛm¨-öàóñGD>2œ¢­`EqP˜jØ™L̼Ÿ–ý´í: 5Eš³·‡?@„z9Òü˜r£‡FŒ4 €î Ýzz÷”-)ØÓ*R¦§DIq-¦-C’Ž<Å8ÊpsGÅp2àßu3[4­ÔÛ63N× `Ït©o]ÕÌK¹™Ÿ@Ú53VÛÌ\]ƒœ=ÓÙ¾aËU3»åf–k˜ÙÎÌþfÞkBëÄíPôÍ”P5³dnfˆ™5wÍìÙ6$Ø5HÝ3@ê›)¦jĸÜÌ· +¯¶Ì,Ü1dÔ3hÙ¯›–š‰¬j„½Üˆ° 3{ïšy¼mH·kHaÏ€¶oD©ª™ïs3ï7Ìü¿k䀶!ê®!’=ö¾¸ªF^ÈÜÐ0òƒi£‘$چໆ„ö JúF0«š ;7²GÃÈ »Fi›ÁÐ5ĵgÕ7Â[ÕH,¹‘\F‚Ù5Ëñ¶&]Cv{¦fš®ÚÑU·cj׎¤Ž=0n`¼Tí©Û‘±kÇCÇŽ þ¾¥øš¥s oÓFK×KÍ{@¿–rk–^–J[–2»–÷- V-åÕ-µíZëXºz2m´tT³ÔÓ°4Ó²œ§kicŸh¢NKeC$uimÁë »– ùˆW’’öÿ {ïÚsW’‡} ÿÃûɈˆ¨{Õ‚ äKÒ€ÁD:"Ü0üaÌŒ%MÙ<ôïSÏZÏZU{ŸsxkŽåÃ3öY§víº®û…2ëW2niÒJ. gR®éÊ7UòöÉ9zãà_Ùé;­Ÿ.ûÞ„û«ä‹ $*2€Ñ ò7àÌoøV.çkù;?ó¬½&¿ø\‰Æ„sÄßCÎxÈ®|ä.ëËk«œÐ" U’àm´7thÝèEWo²Q…W¢ÄzÅû¬Ê,ª³fEžN¢ÖÂ'ˆrë­(¸Þˆ’ëõ‰á†®Ú·}8(o]w¸Ø7”¥^¹ 56nVùYè L3œ³}ó@NZrõ­ŒTm„nàwÝ¿yû Ð¹wÿ¾ýöù™|%äI0ãÃ>‚æÅ?† )22Œd8ɰ’®Š­‹­Œ­Í\U…®¸ ÿH^Ùý*„ mJ^_ Yx%¤áY¶P·ÿÿVE€JGxcý“„pdŠÎ8z4š’Nqû‚rP%¤åYÈ þ¾vñý­ü}KY(Acò“© ¨Bˆª£&XÊ!d „i2žBž^ò°? ¡zMDê­Š‰·Bº•QˆX¢2ÿ¯¨ JEl"QnJ.¤Î>?Ê-uʳAû>×ÑxÐMÓ…Lü,%NÒiUúØgØgnû!„Õ>¯üó,¤öõ‰%ˆ<&Úí'£Ýœ ;ÏdüDàˆº$‘‰È< •ŠÈN–ÂÎÁKªfÖ ð½ç¾ÏŸ;¹ë¶óûžîúAVDwÛvÚv[ö×öx®wò.¶¯¾ŸlËàÜÃgßÁ7ܽ· „X¬¹Þ‘¬MBiûT¸Kû¢z}I¶Çv¡œ˜¡¦ #E÷žä¸)¡Q¶¨ Qs4Hª”IzIröL2'dOIáDVAc"ÁTJI)ˆê¸œ ÃÕ™Åá˜ÁpÂÛi4¶±ñ¶ë8Ñ®²é,¤ìîê«ÅDžØÈ‘tVrîàÞ—¸­¶1”Oº°”\Çüy–r®N”í×5›Y ¨ýµ vEìØÄæ(ý–¥TD.(|¢ò¥<3”NÌN¤Ì™‘1%bFÂfÂBSò⥤ „ dK‰–‘¬Gìâ XþŠL£ Øz;åÆçÕ.ŸS]TS³Ç¼)²Îª±vúìÊúaÊÿ“Š_pÝìÑháKžû—›©áyÂö1=Ì[½Ä‹F##Y$£•Ù .ËÓ6\Ù/”ó8QNÁœ³GÅžöys¢œ†Ec²? ‹ž1i3*BÝ "žTT0ê+£ Îâ¾Ûë6Uì|µ1¯‡¨,l#Ë[666ÙØykÊî—'e·©»mUzg*·Dõ-ŒÊ[Q€¿™â»þyUø+Õlˆ˜¯"Åx£B ˆÍ7‹Ý7Ér*÷úV,Ào¨bx- Õh¼úAÕDËpëp†ZT’(Ö#¹à·¢`#6ã×”>¿Ò?/Eå~ˆÚ}ˆ2EÕ*U¬É…lDU<>Aòo©ªy-æç—S`½ËKQÒ¢¨¢òQõO…}ës–ÍÕCDÿ–:»×¢ÈeþìQ:Ò?CìÓ]ÔûPðCÅ_¶3±ŸˆWÛYØÏÁ.ÊØþ¿¡þy3qLš´™8öýæ^ë>o{¼ïïÚÛ²vuž‰xÞSîæKCÖ>®=ôýãîÉÎq߀—מ÷ËöjíÓkú¬ýY{SmW¨¾Û÷Äöã+k|ÄÐ’Mš[ÞÈ1ŸSjôR¼1¾t‘¥+M0YD‘(òØ[1Ũ7ü ^‰ðƒÌq¦‰h3w\L3jœ‰"ýýðk1Ò<·W§3ñÿ']Öÿ³·ÆŸÖ[ÃäÓ°ý/Úÿ6áuSýï:ŽÝz\PE¾ØCÌ!zp„^B/xëä󕇿zdôÀ̃s=2¿Ñ6: îý·?,ûQ™'þÖ£r>(ôÂØËÉ*c}#ì=˜ü—'?ˆ]_iË)$¨¨ÆCÿÚ½D¸›38(îu5–WCvf¦#LP1’jƒ×®Ñ\ZÍWT:˜'ÃÒrvú24*.Œ Ë–%÷j Tõ ºzó6¼Ý<žÝ·ay7¼Úü†kèt­í¯ù9Ì-Ÿ=îžö7m¾>æ÷Í£gÿKOû;?sß^Ÿ¼xvo«wÎÙ§Ÿ´€î+!¶éegv[¬ %W¯¡ç‡ï|ìû³½Ó­ëeûÿæÿvÁá7,1Á?³GÎ"ƒpÿÿG~L§±Ëí¸®W»ñ°U; IK8*kN³Ç³ p){ÖçêWõjû›³Cf_ï‡uõœjw<T¸ûŒ÷Ôç¼~³5?~ALM_T¯^¿Õ{áOíqðãý,þ;xElþ1?À²¹ìš—ÿËæ²kNüC,›K 5YñbÙ\ʨÉËüËæ²¬ˆàü,›Ë®9‹Ç–ÍyÜ“Em‡53{̲ȼ!‡V·Ëè*fÑ¥›m¦‹mfˆeö·Ð¸fYiŠˆe»¥æ!ú•ˆqç&ÅäªÓfCE`q_å¥ñ’»ðì¾o¹qóǘŒ¾{slæ{ñ–ûOþõägq˜ÅÜ·gÚÅ–_Åò¨(ÜÇæ~˃♾oÜkB<&&/oþ•{ÜÝKâ¥{G¨JÒ¼""w=Ÿ|!Ô f?Ý}ü$I½z¯<ö`9û°ì^,ôc;âæÉBÇ‹û¾,go–ÝŸeóh™«¼û´\üZ–WËůE÷á®oË”o®þ-»‡Ëæãròpyìåbû–wO1÷»ïí²<½®þ.o¨ð{ûÐJžOXí¾ï‹{Sq æIØ=¦Î0eÐËÿHO»¬‰˜¿"ÁPõx /rìmþ3ox™ÿ„xàÛÄ ø‰ASæs³±G|dzúÎÉêÌŸJ蕈o¡ÕùOé„mßþèQŽk$D9N¿Ç›ß#G|L∙†ï µ`ÞAGÁ O©,bÂÇa:Ç]|ïó_¦±‡füÍïÿþþÓùgÄfØ^‚3x¬Æî|ñPWµ4UKOµ\®E¹0/bšÒÚR.˜jŠ…‹ZaS*œtR›J´ƒqS(œÕ g Ôquµ–´ëžZ¯Ôå-E®FXJ„«Æé¬@ØÕýœÔ']Ó®gºQlŠƒ³Ú`A³Õ®21AÝ^ÌÙ'c oŸ¿äý°[w.Á*_g¹Š¤·6£³ÝèõÖãÛ“åè6 æìV³œÆ&>·M°[BÝ>·5¯;¶*÷êØ>›ýê3¡?BƒîþñðŠx™çšã+îï–…úû­†é+\Ö¿V¼ùŒMÒÖüU.õ_!¼ú¬¿Òú9ýꨯǯ¾m7¿G,ûœPöÓï¾G,ûœPöÓï¾G,ûœPvñøJ±ìsBÙ$ƒß!–}N(›”ëIJ?¹§Àã?êàýäÝüÊÖ¢ŸØG$QUüÐÏoîñ&žeöøæÇ~¾«Ç·ŸûÌß~ýçêìíž?ã6t"Ü?'óÜÛÇŸSxÃlsvlŽÀ&7îÍo.>ñ‹>y$E]d‚¤y¢ì>gQ³ß5ýã”Ké–Q­I³„b^5¡U TJ§”JF-µ¡Q'Ð&¡Ls“@™@—@•Šøù ñê{-´(ÑC 4ˆˆôÔ§OʺófÒõFƒÒêJó†>h 0 /¯H[@YÌ÷L=Ï@OÔïL¼Î&Q 2éÇO¿#ýx5i<Î2ýÍ^NZñfÒ‰4iD›'祜–·²/XÛÝÑý¥‰ë¤êsÕ…‹í—¿W?Ôq1K¼ºx*¿–pÊ×>»¬ÿ殩ê}¼^n!¼û_ùêeÚ}d_^|§uTëÿwÓzèi¶Ì!ö¾v1ŠÝ†i.ÞϹ~‘|BÈÇ•Wþ2Çx_F:yÒ]fõ§;›‘™“N%7]ƒùŸo>·)®’—%Øã/¾$¡ÜÈ9îŸ'a Føj¯óö Ìýý¡Í7æû‰=¾Úßãë¼=~úÝ÷ñx{ÌuÜ|ª®^Uo®žUô‡'¸Ý. ß›n¼áÌîêiuÏn÷‚“c8÷ÚüàÎ^W/o<¯–ïUµÿÙÿê-‰èÜõÂ’‰,/¬q㉵|±’˜!ÎþXâ‘uCËŸ¿âs±}rûáAFkÒÙÛO¸xñÂèe¼®ÁÀgeñË»m·oN|jeâ=`½×‚ñ†ø=׉ë ÓÏËÁeFq0œi¤œüfÝÎ<$Ó=áê>;ÆoJÃð}Òî¿¢^àµÿÚz[©aŽÓçåéóêôy>}^Ÿ>S:;¡Ã=CÁÛ [vÎ6•.l›ÒŒÜëSOŸvúôÓç<1ù3{´?/OŸW§£ÿm¥~‹Æ=}üj¿ß ãž¾O|¿Û ãž¾¾Ê_ï†qåîØ^Ÿ¢øVôÞŸSÜÛ!ÙŸ¹_ÒÈ~yw–.ö%Ý,^ošØ«sÌ›-ìrXš¯ÎðšDåÄñݤj—H)“lïIxýŽ"?.!îŽ|õ’fÈþÞÿ\dPq­wbºîŸ]ÖïŸÿ<>“³ÄÝnæq.ùênyCs¯Òô­ä|7m}¨!ØåçãâVùòæïË‹cêI[²¹¦¾¾ãÝ%ß;\ö–Ú玣ǽ´&›¤2¨®e»Ms|1z,»ŽOäÙ£K!ŸýÄÍÑäsIVæ™píßA÷²sb@ûÍøêI£yM/tI8t'ÍP»£}ÜÝ\V ¡ƒnOG£«e×È:{k_ñ™÷lý·¶D=²HÕ[ äŽ,rÿóåä©7ï?/ÕÏ~nN²ËßÒÓcÛ›õØ®‰‡x?>ìågÒÎù¾Þæ úb_—®|Ê3³ùc: 9[ëó‰B,úðÚy‹3wqå/^ãç.vÞÂ8‹ÅW|W!vûïá*>c?”tw×äÈà*îó9 ·ÎÛ]™ø{ç*Oñµ…Ù5IüÕ¯uìIÕͯ7uh¨øÿüÓ.ëÿ9É埓\žCÁÂ)òÃC àŽÈ‚yPÌ%øk9†FœjG|dzŒè­nÏi4\4ðO/Uz)£e}pœâ"¾ùY¾“d$ÈÄŸÓZŒh‚ó¥·Ó‹¿¯¾å^m€/`s“Á£9âP4Ö#ÅÚõ¹rzñ7?«ïÔý°%Ž*íÑB]Òi+¿Ü˜½êÆÞ0XÃS§_lûñ*¿H%Ò§óô×ÿøûøÏxú›ùËïEøÊƒ_æÛöê8‚ëË]ë×rwŠ\¬‰ùñù¿Žßù‚&÷.Ï÷•<“椿ú£'–Íä¾Õd£*“ŠìtÅr‚ª\iÊ5ãÝÊ2±Zc6ÁGÖ­o£,“Cø^oöñꎮx|ñs«E¾I²b\ÿÜKÿþ%_PMó~Nô¾ç# w}Yž/Z‡=#Ùž£j}ê%­~Þò”™Vb~~ˆ>õózÀ¤]|¨Yü>|Ó~~g_'ýÒüóC{”C4{|óc?¿¥Ç›ðþý¯˜¿‡§¿ž?ý Xã”1—1¥Wü£3 ‡„…wùÿ¨èìOSØšù6h³Ó ¶f¾ [3Žw5â&lM|°«‘ïÁÖlÞ‹xôl0Œž  pè&/µ50ÌÍG«[ƒ°A쓊ö¸50ˆõ ?lè]:-û6F̨ØTl\[;íílx[;ííl”[;úÓÑîÝÂV§YØØfaGì¼Þ«Ní|UW;ÚÙâ®f„X«Óè Ål£³K|ÝÖμ·³ÝÚù9ÙÛÙ·v>±Súß{wœ×±]2²!ûm¸l¹\f±µ3Щ ykg S;òÖÎ@çþt¬{w ±V§YôøâPÚí󚈥_ÊjæÓÚ›Ù€W3ŸÕÞÌÆ»šù¤N½éx·Î8%6úõ„¶3GÐéh^ù»§ûOoÈá®ßïóÈÏÿåþîÿí¿ý½”\¶ÿ~*/0R›¯ê ÿÝ«|yÀ7çx³ÝÞú‘ßø^°·íÞ÷l_ËéÛß}nq»/ÿᘪ=µ9Å¿ciI¾ÊŽ/âÓ°yɸÛú±rJøs—™´¾5'jóîË‹)oÔú"Ú‰é“Æ=Õè]´õÕz˜O”"O Á\¨§ROchO¹úÐAž¯Ù†0ñböß3úKm&ÓÖ`9æ5„9ÁùH,¾ m=`¯˜ï >‡¼¾jIVaØÚ.ë\u1!ùÅA“Ãúȸ÷ ;›”¹®GÄ^…)˜â”/z™¼ò¼ûÆ.õÙ͔ӋÞåH“‹}ÑÓÁ±t˜–f‹6Å:Œ¥ËŽÀìã8hŽ$uÉ›‘‡‹#™ j ÛªtR#'èS®Âd^ô.™ßÇ|m™ß§S'^˜XòEŽ:›þ"ÍÙõp2¹Ï™‚—ÊS*ÅšÌ 4%óú¢d¾dž# ›yì’^µ¿¨q²UýE98Ö4™ ×+‘]š+:Ùÿ¹ºìdî+†9²¢è»Br›gH‹W ç6§rÈ8'­µœÈŒ?Ï­2‘Ú3Þ”µfµs ó¬LôäLênÍvDzž@¹cÐ(g¯áór‰ÒÞbŠé˜µ½ ɉ«Á\"AðÑOרvqµœñÕb>,côk„µÞ~¯Ò¾ëUR«Þ¢Ê÷¸¦ÙdÜó¸r˜Mæ½¢c\»¬o¨hµÞ&•pÏz°òuG>IP›c†hô9%ÅWÑ”dÈûÒOȨ[éà|È+[=ECxûî{8†›ßçaª[8ñ¸ìnÚ† |sœ¦9Ñ“ÿ<÷v^¬î{‹îÊ6ˆ?=ó>Ï–½ƒ¨”LBrÛ´ gâ:IJEše;`sN{}ŸCÆaŠçó‰}/çó뻢 ̲6§°I—}ý®xÌ÷²”í»õ1o¾¢È+ʶEHÜJôwœñx‘Y¦Eæ1ËTOƒÄ^×m”ø¾QLœÏ”Ÿd}p¨Ëúª{uš[h{qèƶWà ¨nÅ8ÔˆGʺX¨¼ÝS=¡k»ã±}·{ ½h˜õ±Qåˆù ç6”Q„F÷á-JžÌíì©4¶ÐwL´axsÄªš²¨¤¨ܲ…SæóCd³P…LÊ“r™ TM›Ìæ£cÍÇÑØˆh½Û›ðÖ$wlØ›JÑIÙiš,¼a¯  Ÿ·9?óJ|ö¾mrÔlpx`œâ¶sŠ¿òÎE´Ó-k]ûw$¥ ÍeÎ"Wq1æY‘u¯k5RÕu¶¸ÌP<…µŠ_!ª&ªZ = %Í¡Çxe©(æLiÃýEÛ°·Ò“m6 8síåã½`æ¶åªi[®!ª1_ÐXÈ«ê‡3´ÈjôŒqÄ™ÝøB¡‹ñŒx3Λ_öùd²=œA9ŽÉ äÉ\¤5ÈIúçm«Ê’M&¦(»am³Ÿy^Èèd›ÙNeð*Gm¢d'ÛrÊiñ土7äÖNŒxºòáå̆§.ü´僷‡]. v;±ÏñÊ=—o/(• ë” Îkï7,ëlsâYggZÉn·ÏüæäÌá$;9Ű3?9û1†’Ìâlrâg g•Ä(7np¾ÆÙAáŶkLR¹ä‘y6¢èŒ QnBZ4€wçWi@… xnÚàtùdßî‚íË}mç”,Ð¥"CÒ¯Í/—þO?ûõ‡çïþðûOø§§¿zzûû_}‚ˆ~ˆI ÂLŸΔÁŽ<×õ¡q+ˆ.ªIî¨ióF;$ep×ÇâŒGÛÖ·=óM[×™|\ Ý´¼Á»Ûg¾^úŸ—L¬’ùHâx66ï@&}¦“^Ĺ ßøÐo\‘yn{UÇIØqᦠ™ D©xÌK?¿ö$_s™Wþ½<’j=æQ uJc“ë¡OI*ç ÎK}RØ€«þ,÷7Á`9¯K ‚¡réýiÞ¸8É"š·}c^m_aKžx/€O2”ÓsîrJ›øœKÓöS„Kê÷8§ÀZÑ}h­àë‘â1¿Â_ÍѦ°£1ºÈ¨çà#^qp┹&¸´ÏBºDy™.ýá¤zçm/­A !Éh&䪜g%L|%¬fÃ1:ÙØ"ZñIš´/sôs “Í–CV hŒßG 4 ¡eÀÕ©O즯˜¤-›÷8EA^î9Äù½¶"úÛ‰M‹`ûÊ·„ibÂÙÉÑŠ »f循LcvÞ&š›ßK§Oä»!ùc!A:0މ†ñŒÁüOt­SŸ'¤Qï÷Ò„sÍñDšO̵=ùO·N¶%r·æ^‹ÅuŽ#µy¤ !Èóß9nˆGÀ`ô"C"ÍØÙ–eœ@¼øŠˆ‘·¨\æ-Š]‚”£˜+rQÍ;Â]„‡¢gÊ@óðõ,¶ØÆ9ya’X-æÑ†šUŸ¨U‡.S€¨•ƒ,¹tŠï©&Ý$Žk•>O…ìãÜô:t«çòrñæŽo›’ÅÃAZàÆM ”y¥ »ó.%(ß{Ôï:‘¢ŒËçŽ"/ ü4O`…¥y~?Æ|É<÷ÇÜ}Ǥª¸z˜&kwì²~•ã;vT˜wi:äª1äÉXaÁá|èÕÃÁÕ¼`šg ÑYM›3s6„æ4ojL²ù1ãÆëý@p%ÆáH²1µI'C籯"–Ö’es&(ÅyMSУ'¦ôÉyOúŸÒ U žüMjrÎæXã$E F^Ana>‰ᘸ—‡ 8y™×eh¢þÑOÓ\à²Ã¸ LäPÈÐÝF`AaæeEKb›Ã•m{ õÖ¶¥i‡`O€›'ö ¡ìí U[€ÞL°Ë\:=Ïs'Ç„K„éH{;¾ ÒJÕ„‘€>k rR¬¥ƒ•’ö@n©Âr ì–õx4QžÈ zíuIZGè m¨óVáß9Æ1WqžÑ>¿ël#ð%b²…ÇÄ¡3aï®. R›(9éã¼îh‡ê`’è1Žší8Èà“H¹/ϼ« lÂ!Š8QÏr(kQ„‰Û‹¢HÅÿvè]åå:…‰+„PMP‰‚|„Žà]8s§nÜ–Q&È6yè‡ì(ß‹v„=€Ðqh:‘Ζ“±m\ò2y&4‡,H²ÊË'!ûy7!†a9æO/K¨êíÆ3Ç5B“³—ƒ½‡(‚ºìXâÒåÂмgÑV‚𬠤*P„É eo *ƒÜÎÛR ¥ÙT&.›¬|ÈYŽæ€å5èåÆ.ö(ä&G*HëÚ×®(ùŠXÛL o JÁ£*ñV(£;ì9D¬ÃüŽnÞ …Ž5‰8 PHÁ> A¾ó€Ab5Ë‹„ñx¦ÆÎèŒÿ<ÿª!SPõr&%ÏbÌÂŽÌ¥LÒ`¢ !AU6©À]aŽ$)=¯Ê.ƒ÷™cÂ/ tðÊÐ[<‰aÄÆs管 B»DÕP“0ocâBQÁå~Px•-l9t#ÃɈ»HXQV Qh rÐ'Óg`© ÒsIóÏïÇ}~‚óÞÇ¢,CÛŠ®3YëZ”ÉÌCQÊ~ÞqV0L°z7å0g½À=QUHjG–ßÉ <«Ž»B“sƒÈ0ôìW'.V†h6»MÐüEš”(ŸÒ±X°Ð¨6#L ß ¸Ëg1!€VDî2ï5ì1‡ºúd0aè·6“!}å|ªc¨‚`jÆ!ßKš²Hþu œaVaŽSèÄ]ÐÝc殄(óY\÷Ue\­àžÉ¤aÜ~ ±c{"Š3Ã(\ž®ç_XÙ Ê\øyñ„6p…dOÂ`n.ÜÆ RØlÒ B ÿ<»‚‰» O1àÍyr)U‰ D‘‘D+`„£ØéD›‡Jø }‹b8WUeSÄ*2ˆ®ÄpŠŒ»"ˆUì^€bó0'™JTA jGàX•ªD›ç?€C³•®p( r ÏUH7ÙdVÄ&B)£‹¡tøT‚z6Óm.Š[‘^ªþ[“ìðä°9씋®Ý9t6ó»°Äf?Dõ(ÂÖ|‰ [—Èa@ %UUãϼ×UÞ ‡‰r™ # ‚N ˆNÌÈDú)bÞ™•mŸ „êEq«ˆa L"ëEÃd‹º="bv±IŸC·yŠßz¼oHz—+8·‰«æÝ) Zé VT “ïÊLt RXAçQ¬;ÏÚ¼åMð ¤0°¹ò%"…Á^&G …µ&»í¶Ð®¤¢~OºëÀYµÚaÀŠ“ôf]ÑŽÉ_5B—J„Z>ÙµC_eÜðüÞ&ŸN L¥œ®$"bæh@±Mr¡i EßÐg€ô Á©"r`Ø6obVW<Áô°§€é,ƒ3=§y?Îæ×r€"„†Õ®MEª6?éñÐ%x¢50tIüp ¶!ávT…à–à’LD4¿&è´',UHÿ$iU…’,~¿ô¤jÚ!Ü) ’¡ÕÞ ÆK¨VFgps•ÃZy`:Ò^d9»1U9_œõ>WSt NQEÈ#Ée8àL "7oHxKÁGWì~(]œÍ§˜ WÜ4· \-È ¼6Ò.ëÏ%V4[s©~ä‡ðæó4ËÄôM†³¤ Ù@4?Ø{Á$ÇEo)\ÐD&“á+"Rœh„Äï®É‰*ò ¨H†ã‰é‹†c._>„ÿ«àÙ 6rèºF£H…¸ÐTD IF`•À ”"LgTÑAEÅ褌ò=‘5+òª˜lb1±¯CI x/"C&(м$FˆÂ0vöN9&àäã Aá‰aIó{K"vÍWœ£ž#GU`Þ˜-DI=*-膂„»9‘CÌ) ZÆ$NÙyÐqIv¤+GÔ 5uŸHÑlR ^"ëŠ>;l@²‡]¿“}ÀDJôi_†Š¨iN˜æ$áRe…L •˜] ya6‰lŽvrÉ$2xXeð"”ÈšœÈ²Kd ô¾%—È&N“µ6‰¬ín"ÙlR… LÖ£}Ê:Η²v&•u(§K4© æ®C…4‘ÊzQ¢¿Ie³É”¡¢Ke³‡´d2˜+çì2ÌE1‘ {­%—Éz…ÀŸw™¬ƒy;’Ëd½«ÒÃd28èQgü:š©D*ƒeªuÊð’¹E»PÖÉ·›PÖ¡ú Ñ…2,Þ<º»P6A}¤äRVÇE²ùŠz„¼‹d]|1’Ëd*˜ž\&ƒc`ÖQ™LÖqÁsq™¬#)BL.“Á> &a“ÉÚ¡ ¼Éd H®—Éìàl2ìºG.&“ᨡ"¦ `ø> Ò.“Í[ç&™H6Ox©sX&“5`4.e2€°íÉôâŠåE$kpSÜE2ÜF°p&Q5ˆh½¸Lÿ†ƒ/Q™ nT2UÊd³ÓIöËê!¥/»LÓd]"(j¯ÑE2ÐÄê§QD²tê”Èà•&‘¡Ãœ7 3zÀ!a©BÎÈàtÐT®4 . ¨YÚ­ñéŠpž¿`ËûzKêÏÿíÿþ¿þáŸ`BµÿœtLÞDëÐðBH+„o-¨,BY’–¹K$üO²—Ø“™ ¿¶õ7ØaŒ¾µÎkŽAléóöÈ‹‹8þ%˜”ýhß½lú!¬§í»7cá¿Êÿ Çqïܾ{ƒIgÖ³òe ì8?kß½¸ÿ*_ÖÆyRöÝLDsš”}ÿnÏùï‰HúÛ«üã?ýßÞ×ÿô¿ÿ៟øí)þöv€?þŸ^þ×σÿªO–öŒµàô?žQ¾Àx€|üÃOœÝë«ÿÅŠÿ³4ªÖ¨òEóOt3C‰àMü/rédJ¨RÜ^×…•Šõö§ /7B› V·ŽCÍè2(3:Ç(ë²O ÖN¥´Òå‚[—OÛù–×ûíù~}^ؾ‰¡ÑÃd9&ÒÄÀA9`©ÂGϧÞ&þ æDºl7]BÔ`bÛ¢ÏŠŽ§a-®eë°j˺.›wX|ÙàùÀeBU˜ðEûɸ¬Z¿nD÷Y곓•iÚlrsúûIºLc„à,ï7éc ƒŒ –lSNmßÛÊÞÙl×òNÓ&ûMÛŠ‚“ºÓW:i+š+Nã^[¢HÞŸá~èRHø”®YÒŽ±fОë &Cxh"?>ëˆgã(÷d48Õ'ή4²1Wâpøj\÷žüªÞÛ‡Ò­1:Ñí¸ CÃ=ðÉ='H^³Þ#ïkTJ(†;ºj夸\à…Sr„ÕBVù0àu•…˜O2 DóohþÝDrˆ¨©Oÿ¼_u.yuæhíêt¨ÿ2``{Îøf]œŸúÁìçÀ~þ2ÛeýÏ"³Ÿ<2ûùG#³Óž,dÆ=iÙ÷‡iȱQëÎÞ݃ù!¸ñçŽþéoçGØ€É:œ™€¯cÂâ¾À ½(Ædèk¢‚Þ]@°¹öêØ­ÜéƒÊüµ¤ Aš<çiVúÓJÚ†$ó¾—»@% E(·g¨+ ´Ujˆ 懾ga¹™ˆö;¾ýˆ ®97ƒŸC„‰6EI½t=¾°AÍ«X ü|¯¼Œ!4Ù{S ‘ç¤$Sìx¿î^"JÏy"wƒàˆ%!+<õ‰9ÞÙ ™ë46¸® ¼°A»¨3„¤(}ó¿Ryº»v¿ob‚'Äó•†úйµ…~QclXT˜+ã!s©I i˜¦t^m• s•ð)q˘ñöX£öÜíë©c*<_Ø5ô¶ÄgS€c€ŽF EÄuN—½àXýbZtÒ9ßž´è=tl=§§{/“QüíOží¦i6IÙ\I2‰ý†fKþqoN% õÆtÓ´$:Ó#ÈZAÄ…¯’fQÏÆIãp1’«¬6àÍï&”›ö1 ¢¬ÏaE¾PÜûÞ±›"³à½®G=ì9Ä¡ÈuÀq›GŒ ɉŸ$ƒ¤U2ô£:}ÒÏã1ø¢ò\pòÙ°ù¤ÞÅŽjƒsIR¬|ÀáûîÚñ¨R’aÙ7é*›$EIe`¤”!{p:é/m¸-ÉÑ«]õmܨLŽÀÀ ‹U´Ä:)W´«²w¬‡?:¤^íürù,´Ž‚T÷ÆPJcu¸}?½xÁ·Q®·ùÜÌ}öðŸHP³¢ „›ûª  ð×{@QˆÄ ´zÉ·ÀPVÆãéÜkU+ÖyúÚ@WtnÛ”8ž{]ÀÓx­wºMëf |u²XV…×»¶c"ËK¸^øò¡À˜ˆ189™¹-ÙÆ¶àC c§n; 2û æ‹# ³sÛÆÉí:ì<ïƒõ>÷i]—ÀÖÑ1ÅYbZw=”ÿ2¸SëQ‰Òˆõ D¦Ùfs;ÁC=ÚÓ©[ÄðÀÓá4~0¤ …å©-ÞQå8l½ž€Û6ø¯÷ºOìf|}à¡;7YIxã<†bä¬ö í%–CÚ&1“Ñþ@˜Ö×â]†åäýDó¬¿-’ ¼ËðÕE˜SU¨8Ø*¬Â3„¬OÃ÷)gR‚º?~-Ëø+9dı)‚è¸hvž¿,ÌRêÃ9@™^cï`žjr ®\UÕ«2Ïl WXU­üãÀ ^Ôìqî&ØÖžÎC =ˆ§Æ¥m„‹M¾ôº€ç!,ø®wºMëf ìà@+¹:‘·]´«‡0´WNf¢®¤ÀÊ«K1j³ÁáK£{·u ¯£?Ç@ /˜vÏÁ §·w»€ç1,ø6àÕí6µ›uØVH˜)‰Ï3‹ùèuƒ+Õ”< î '`‡÷±ß® çûÜžNÝ".ütƒ×:ò¥mTÿ‰s¯ x‚Ã÷ñZ¯ûÄN«p®¹·­ô"ÑÖ• †bðÕVÅX‰‰Xºã DjB§ G¸ìí½ÂÖ¦Ó ÈºzØž7xÆ]{uàe ¾×»Ýgv³ ¾>‡Ixˆ&„œ¯O?FVx#÷Ћt CŠcpÄS•سkÈta©ª)w×YÏ´õ:9e:ðÂW_ñVí¢À2ß&°SmW@> ö .÷E'Qà¥c˜8+)bΤm·Ë ýƒéöïI“ne!f®ÕˆÜ‚Cè¹ùš^Aþˆï?„Ì”ËIA%„a}‹ò{¢Ì¡mÅûçÁ°]:]”Ó„è|XSëAr-P¿ÙmY&0%oݲ½WÚâam‹¢ˆ·ÂÖÁÅ<ª>¨BŸ"Ì‹z…vŒscÁØrÐkW fƒº"rÑÅåðÙÐû¨ÊÁöfÈ13(òÚ¸u8Õ—%á­ƒ÷67!±klJ`ˆÌ  ßá9‚Jk­]ÊmÕOüä ãþàâMYŽ,D±Ts¼·=¶ž¡Þ/¦ã+M÷³iГP4HG½ù¡î˜•t mÒ™Ô9S€â§¤“5Qá¹%žmrÔlŠ_·Þ!ÞMrзNb‡UxHÕí|A&N ¯â7aCCÛžMÚL  ¤BPuaSÁ÷nkPF%€ðëU grÄÕ¸¨ Gñ¡ªÄÀ«Ö4úÞw#Œ`ߣ™¾ZÔ¦4ê~a8Má)ªˆ0WjÒ­ˆÓ¾8D§ðº¥:¬JV¾iÒK¾,ÃÝW®C8qÏö²2¤cwÓ¢K¾:U4EGÉ*g(GãX“#Ñ-ºZh¤•Èá’—Úº1Ml ðKòê¢ÅÔ)½ÐQ³í¡.ÊÂS™¹´Cc­šPGߎ‘TÏ)/Di®'3¤à¥²šE}rAiÀënð=X0ýÑ…Òˆû¡ZÂ:öÊÆßG_v9à7½#röÉÚbK{kƒUÿ,94”ª‘de4Ñ6lD‹1üL²ÁÓõ4òê8Æ‘Ì4¬Ê= ¾>h/.h5®‘Ò¡é1OFòÁÙ.[ÔxÎ-úÙ?^¦Ú0«ÖxàèTçdÄ[üb(êhbi4˜V%C1ÑîC4ºjW`ªÊÅø†®ØaÓ·0tZjú!ܲÔÏfÍ¢ ܬ¥ÅæJ#ƒPóe\R‘ÃHÑ`T/"Œ¨¸æ††h·r3>¦4e_ ƒ9µ‡‘uFµ€Y ÝŠ §s²­Ü0#j8ƒJwMƒM•ižx±+ú?ªSsqMˆ 66rãÜ¢Û] ¨LËÂ;† [ "Q€ñƽt‘ÀHäp¹¸á5ÑÙ8©ƒ¥ÀãC7e½É|¿­Éù·òÎ/4yå®ÎŠ7j2õ2zè&µ esELP¹/Ÿ|ø%ÌØßŸÔ±E®õˆl’c ‹ h¿»:¶ [–b2´FR<.–¸I™&2•x+V¡Ê©_ƒâªÀ«Y‹ÊºôHp’Ìö/Îã‚ÿÅ \÷R|rU3†6ɬ´N‹™$1e ÔA%ŸÕpàÎUìC`Ùè¤B"ÚhÛŒ8µ˜V'±ˆä¢™-ï¢'+C*vžTérЕ}}ëm­[9:©P‹ÔÕJÄ(é¼xÇþbÓ«½³xpC 7 Q#AÙ(0I:Z`ÉäËÓ`òl:0“ÅŠÁ›¤%IMÒ“ oÌž Ђˆ‹^ôz?DÝ|„`ŋރðèDR.m'=¹èöpü‹|"Ê5zeŸÜ‹ÚbÞ›œHm@€¡5¨»oï]ÇØZ¦3‹Þï•e1¸’ÿ:¤¨h¨»ýVÒLSsé@£PèKDpÛОSq—%†w} åÌg‰?iÉCš¼¦º}6~}oò, áp.A„©;#0¸ž›.$ ¼ Ðÿ:w’¢BØ„®<VÔ]IX…ùŽ?©UêXEZbCrÛºDýÒÉÉÈVãŸj%MHªu%”\üS‰×ÆØw‚Âpî©É}ÀÖ\àt­D£mê9 åYkì4´jw²•Jl'xÆ=ÌÓ)ªŸ(ozeHB*Žç.Hñƒ1׿µÎßXׯuýÛëúM`ÝÝÐ:È“Á¼T&!ŒëTpH6ejq-öažôB »ìæ:¹»©÷S$ù%PRmóXªþ˜ z7f>ˆC.Ž®z¯MÓê9„…bãX¡¾Â~˜#w C¢òx¸Š@HR,Èꈦ èô{bqbD–$VTu½$ó›@$sMeMBh£›¡`9SéxÍh{wý?|!4é¿ãŒï|äñ’uK¨"Ã%u‘GÆmSlß,ü5ÈB[¼gj3¥ÒN³žµ™T;îOÅ#Yn–é£EÄI;]&¢é‘ŒAÂ×Àª¼F|³ƒ&U½Fˆ]5p&²ÅŅ݄ʴú5C¾=—Sœ.ïûœ;wÝú±äÒïº@_Z¾ßr1¼ï›Y|Ü0GýÔñóoW›äò zMÁ(Q„a¹9#MTUÕáï.p$·c•ÊS?à[?†ù%nÊR§kÜÔ`Àƒ– îÌ§Î’ÉØ¥ÏDA,´$¦jÁL(ÖD÷Ϥ¦¢&™”:uC]€ƒI#?™ÓcÑ@]×T¦¸üäzU8¤ÙȬX#i(Ö'ノ(ºe<ƒ9,™ójREÇ'èe¿š÷þ£©->Í⹂òÓHû‘OFf¹M˜~»£†Yáìåc†%™Å¹RÒFà™#¤F=|2ôÌžÅþ¿l½p,ƒÉü“™èuaκfëý’­iâˆOæÖ@¹DR›Es<6îÞo“·ÿäÁÒc*¶ÿ¸¼,Ízµ-ÃÚtð„-˜í’k˜(lxÏ4ó Cq~—V`ɽ†>VÏ.6–ÓCTО!ɰ1dUÔ—|…õ•27Ñöx@%ÃŽ·«b»Šç…€ÝÀ¼6¥jKoK ï.]á¹ç;´±dÃ>()ç¤c EšçÍ“Têǰøç`v0;¾ysÉæÄß&ŒùW·ÒE:„Aq?™~z-z7".žÞì·WåÓ—.QáÙÜÕ«Þ6·Ó¡8(ô'?íwÏÏÏTVòÎØy2ÂE`dÀQDu;¸Ó ¯”»ˆó®Ãs“ÞC÷¾ôr»_msmÓ×Í\Ó.û¿\#„M¤ŸRO¢8˜qO>-Æm´í8ÝA iløØÉƒ(ÈFµànÆ&~®GrTx=/?‚Ö¶¯§µYsØ1'‚óXðµÜ¡ïNÐ\ToúîÒÇ#øÖË ÚéAÊ.'ø©9Hu!uÓõ©ÕÜ­JjAx”†èÁui–,L‘n%æwŠØÌžM‡ŸÇÓ‡]Ö7¢bNeRÍò5t ¿¥5’XZ#}¹Ï^Œr)!YÛC¹DINXÍ.ɪú;º zƒºÌÞ£93tˆ©+ï ¿<B€jk›R†ñkQÓ¶Ñ WG e>£)Ýç}k4‘Aa°…W^³!Þ¶Æ…‘Ï9T¿R˜d¡‚ý°ŒOÔÓJ}…I¤:íÕB–i¤ ZPÀU!t¿–üqîg^cÌÊNŸ—aªŒ>–Ù!3lÅjpºUç#Ѧ+V²K-Ç“Ö4‹#UP‡y ú–ÝžÉ ýfÒ( ·Mª{³Ø ´^ECóçØí|c¤ÃŽ'”Y+FK-ÃXnã ›;FMEï|?{ˆÍí]¸{kîMG‡ÖÃÁY½±~Ô­Û@‰ËÍ #d3âIV9·p©ËRÍZßAÑÅ-0¶ú7‹£ «êªT6ÒPåm}±pŒÉ#(n†òÑT‘ç‘ûÃÑè´)Õ¹·’è9"Èý3‡ r˜\’‡«ƒ&­´XPÉí¦FŒPÝ««šmPê˜åÍ$iLe`=e£ˆk£:¹«Û3øþkýbmÇ)ü¾Û ©Ðûåè™"&û€¯ÍÂÂêæõ-Çíî®ýbk}»Å÷ÎÂÝ¡3V2ó‚îžj5jQBÕ"c%KuzZÞÌÂŽÓ7¥Û|üüï’n óäç0Ÿ#S¤iBTnû±,Uò—+t4‹ÇŠš%ÅÃ]`UêôéŠåTÂ0Gú^–-T‚i5ê&'³…’O3P1ƒÖ‘ (þýn"‘ pw³”Kvt³f§óXó“ïC’ärŸ5#Ö/ÃáädºÛ¨·ÔxÎÁTu­‚¹¹ôe1ž¨üP…>ê7Ð^f;tðäO¯ÌáódƒeÅ’â" ùSK7¼Ä ý·åêéf˜‘žÀ"ɧ„ Ïã«ñûXø½9~ï~φß÷;ÞoÇÓW¿H!²sˆšÈkþdˆò/ÿb¬Þ bL¡ÇmDb“ު䲪‡ ™²°É3~|| uÎÌ\‚Z1.pñ$ÃeJªáQÿe-K:*ëqTŽ`0ðÃ[çÄŠºä߮׳Ýä !zgp:{b@tµÀfh$CæÐ&åvT«ÒÕ4õÁ¼Ûy;3cl˜³MÃ¥šéýuÕžÏk²‡ž“i_~Åñ _†•næøÑàwäîÒ=Zç{›rwû®{}Š×_Ž´w‘õ nw—z:TYLzȨ= Ã`ÄåC&éGu—÷º\Ãço¿†ÆUe•:³¦5NMõ6Ueý+rp‰F³]|¤BD­„ s5dÏwžˆAãRD ®ç êj iNsÿëò¿ö,ŠÖÃ"är´„:âADógjôN·:ž:ä‰,#YõŸÅÔ›äv^<ç±(ÓBÚ«B@ÐÌdCÉó@þ³-S.7«³‹Fe–ý¡$}dW…,h~ƒgObâ.bÐ0â²Þ[ûçÇÊ6ƒ»¿:‘°Õ ÙžîM€|*Y‘¨Ì‡­ x6ñ;ÂrtE}ËÏv»5+/ãÍ>ÞÝñ‡Ç#›I ôÜtÉðRRÊŸ´4Í/¦l¦2³;ÕYV¬¥–ÌêîQúžâ¹½6i–¦ Ìn¶’k þîG©@x3¾»ôó¾õ³¹’_M<°f5`"d]càì->Ú¦Qñ)¾ ‹4TÆÃÚ¦‘-m¢¹LRÈø2óF8¾_ ÌøwëCDGvM`‹ ýð8Òê˜ÉÓ!þê”QœPf”)K2 ¶j/ê–U¯ÌLš¾/Ge-3Ãý‡P »É¨U›±ÂÈB¥¡îÀÞ4Bz×UŠéÉ#õ†‚Æçp,1­hj©çg{ÊÆ ¨//06‹+ëènfÓͨÕÍçÓð¬ Ý€¡«m @•òÎÂJHyV&"íÁ3Týk±R1›èXrfjʈBN#)ÜÁze)a‡–x­:˜t"‹ë¬œ®¤cñýÎ*°I [÷Y–|rÕ‡2Ïï9$ÀË:™:c€+ÌfÉMQYHSâi´"­×+a.âR5‘l£0FˆUùà7]ãJ§ì`l,Eš¯8!­ôH€W¿(trÅë”×0 ×å^{ø¯+#]J–‡C ® $ž•ªeõA/m\ÓÝ¿±–‡ÄÂWM}KIŸzl¥¨ÌÕ³…6K¾b¹o"í=¯håÁ*¦ =¹uè ñ¸†µspQ¨šÙ4)ò0”m¸Ýœì³n=øØè¹5¤F‡ÝYsÇD¬±Š‚Öl–Ù¨ kQ»¯Ç­îà»{h'½ž‡ÆÎKsâM޵7æKýŽ1¹Ag^èH;“—$ ¨cÊ ä-)c¥ç’&”ª9‘”fⳜƒgi,˜-ÀÉ•xV¿nY~¥(\4ojf=Í´œêé ×°Ù÷E27ùKDgb´]0JI¬ã÷ì(6D¦>ÔiÙÿÁåo³'¥LA RW=–Å )ãa¦Åì+ÍUœ^RbC½è'îéá¤Ò²À§da¹ä@'‘ ‡%œaVÞÂúÂÞƒ½«³xë–>~ü[´E«–r=àŒ|X)Ñ3Ã8÷CØL–à¢èÁK‰¼¬egø¯Ë¹=‘%MãçI3¢™SÒfSÚÜ㥚ÂMs74¸]G7Çy‡¼ƒ3Ø•’ùZK5ÈÞ¶$¬Åd«áfRŒ@$ÙÜÀS‹f@X.­’!60D¡3·‘æ…(EÅLšié5Ót¡VÂ?½õÅy‚&…-¦FùŒÆršVèÃÎ"½6,`KjöUKײàª:ýIprÙ–½dF“唽šA´HÓ­1KOÔ³î/WC£ÅTÐá\–»Xpa÷ë#×À{èt1 ê²A÷z ë+qÃÍ&z»¬i³ºÑCVceš-EµVI};™›&0ŽqØøm£²ú¡ºº™F/¨¸˜¯¿F;Df“ËZEeÅì~Q=š  ecŽÆÐH>XOýÓ-øUtºªm‘Õ̤êÆ4 í㣓–ðù`–ÉɨÜ1õ5PœëÌZ¦óž˜u˜§G ­0{Õ„‹’ZÑãÈæ€Ð[Óƒú „ä&O«v@õ–j]g*ÿ=‘IÓ(|1VÄMŠ^$,¹&Áj•ËëEïd! ‘GH®û‡¥÷­ÍÒVZÀ%ÏŽNŸ±€ÀŠ*ÍB×Á „ëÙ„!Ù¥ µ{{<KtWVBÜ ¨'±he©àJ+D©ÕSíÌ0 ù° øñ¼ÜTR@à©}%•%œÅoÍ®.©`"ù…H†VÓÑËÖòŽ?LCö–<»³%Õ¯+Õp¡ìJ·שÑ<'ÍæŸ­ÈÊ6É›ý°‚x˜Q [<ÈAk’¯žPû`ã­ŒŒåV ÐUªTßžçhAú¦j›ŒLµb‚ÂþzLhHƒ1JCŽ-›ÚÃ'!IʦÕe4*k7÷2¦^¿–*|XÚgëv)æ1Š7¾§6b;Þ›…9¥¾¹á²Àwÿbˆ%yª&vóÑñ‚?á¡BѲÕ0ŽJa©7‹‰xž-O¯•ç8h‚¿y=?¨˜•B-§hKÅÞ=1N‹n)éÉl˜ðTGVa±\ ‡Öðfö_¥§˜.ÙÙÛ5pÌÐÌ˜Š F°-^“ÊóÖç_fÄØM€Kû©‡ë]BèàÑ'ml[cm™šß5‹ú*¡âig¥†=É Kv7j¡vyAºü®#©n³²(¦ð² Ûuæ¥_×-f×haS8uÀj@ƈ–¿S#ø­,çÔbQ­;‹ ‘9ÞêIP’ `M9ˆåñ­ ùTmݲ1ËMy¢ƒ­.ø„a‹aÌëJ‰4×É@n×áú`¼’bÚ£¶B¤Œ%ø¢î ‚I÷$9_?]0<¿Ðßë–áPž@qŠd¿¢é¼Z¹»'q¬g3YOÝV\I ­äÚf‹"ó³Þ®À‡ÅÕÐìx¾^bzlv`)¼ Åâa“áˆÈ<Ï#<^¤PãÊh j -“’-1tµš)GK@˜m¦óœLÉ E“g¨HV´¨÷f=ÕiÀ>•÷¤ æåÛ<äbÍg™¢[Û«œ±!ÇfGê´À8ÓÊn—Ñ+¦ü7¿3££–µ8!|+ž‘ -Ïß¶ü|ìxc¶Bpcó`Εq×ÕfêቸQÈÀݧD¡]Ž*vR+™š X>ÜÝUDrÜÒÚ´ËA_Âä"ab¼_7¼_9׆ ùÆ-¬ì@jjò{y­ÆÏ†`Àt£)©­YZA¢P Is8è´˜$1dHÖu¡Ù'äÅC¿'á%BV+(¢33bä–`¤ÀÄR‹›YpÎP‹caZ²N¹®‡Þ\/—¡–ÀMžB[Q3c½-1êí)øÀ„tÈp¢å5ÒƒeG´ÍÌÆ±š=¸ ÍÇ™ší“ö¥2Ï„OÜŠšIºfñšgz»€{Cà‚A?¹˜¦C³P7 MEºòŸ¼Hƒ¦ ÕSMÍ©_KÀiîÙÌ'ªWœºˆ›eød9/!éB4-qð‘Eï‘ß\û‰¬+íîœMDtv¶Š¤´ÏFèû±JâhÁ-€Ç0¦fFÀL¿xVF-%F‡¯\OËœ.\¡ÞCýT½xM z:Yx÷WnÑBÌ-晑T5!Ùçº xˆ*N$[5½ÆP¨ØTEíER˜/öusˆ×ß ª°®³ù1+†@§¨j{D뢠H,¥"Áx¨<ùÞlàM•gqà1ó|©Ü½®eËß››Ìd#á0Œ®IÀˆo¨Vú”u•bW_ó_Üj¥ÂRîG!9,D›»z6xÕ*É»& íBÜÍᲬóÈ0!dXV\WyAÔŒž‚ZÔ*,å(Îú!w›ŒNéy2!N;›\äðÜ<~6g!@Gñ"f ÄÓÈ_dZÏ —%cØë{Kl 86s»Ð‹ ØVðЪ…¦x'›  ÇÁq£ØÚ& Š—!ÉÍ0‰ª–/ V˜c=åæÓœXÜòfÑbZ!ªˆÉã¤5æCô¢õ͸ àâÞ⦋ˆ¶~Û®dõ¥”AZ\€É÷‘<@I’‡hà GHêÀiF/‰y9†äQÁZSc[Ápt—ÖÉs,«¢0ZÂê“9³5‹  ²jc™øÕ¬>V£þ4ÐCÕª‚)µë‡wí"kZs ó Ò¼5enylãŠÊRT'ô Ÿ7&3ƒ ö·YnR“•Sµ*Î/Ýs†ƒUðTq=u*ÖÜD1¹¿ìµt½Rgiˆgk+|1YñÄÆ”¾ï-F/uêk¤‹Âæq%Ä#ã½{I¨W#ø*JøðCí‘ŧEæ~oçŽÑ-ȰÂBÏsÄ, 1ñJ[¿7Œ““U/5sõ/Am‹l ¸LpOŽ—àgר5Sy‰›zãýb9Øy»‘°Ž^}8E,Ø‘TŽdãj©pEù£Kts°ŒeÂ0²•5‡Ñ>¼˜Í*©&ɳ¸£«‰%‰9g*jQà|ð¼ñZäîjC‹óÂn%y¹NDÕ_ð[_†Ò(Å߉fh'ÝÎfeîc‰˜ð÷Ù: +f^9Oz°híÔ½äÔRÔ4>„¦É5%S*ðÁ(ÚEDtÕE0²Àâ§ü‚yAsÏOɘÚÊ´Â ´2;IÍ£lx‘g¹+µ€ åî"°[þñìºl$±at' &"öj_‚¡õ-vyL“j™ÃEàMÞ3¿øUùÉO¶”ǰp¼)ÐØÎI‘^Í ]]f<¸„âX­DýPÒþÉŽ»WƒíUù6 ‹€Þ8Z²¶håÝĤ·([ÁèÏ»%¢‹( U鎓oâ“ůiåÍÕY;uÖ\µZ'ÍÕoU´J§|E~g,«&ˆ«œ¾.È»MŠ»¾»<ú¼žÿÏúÉ(r5—(!Ï’€D âY­iê@&YC§+—ùñ_i¦¡úÒ¼°· {ú݃^ßi4fÒ\‹®×â„Ób.ø8-¦/nˆ/f‡˜‹PN‹éík?-¦÷_Ãi1|œ3Z‰.x®þ±uꈚg ®íG¹éÚ¦úÎÌ.¿éÎ|õ•éI„²²¥úß@Rõ8öpäwéÔ×5ñsÒÏI#þ™-hÄ×,Mnó`%,¦SB!¯*pEù´¤rÿ©ftMd££òˆ|Õÿ}²ÑZ‚ðfOÔ¨&äˆâç ˜FøŽªìg}~0ÝØ3ga‡h1åµ ‹g̈ ¹>ûÓ=—'ŽÐqUóUU„*¯%¡â&Δ·%Éî{–<ɆD µ˜‡NiXÂÅîzL™gaÇ£YwY§iMqØšXRë¬&]~æÆ‚ó”¹vÑ횤%ÃÈÝyüb‰"„;ðDš œ‰"ªæ‰8@¾*7uoCí}³4žCôú|5aI¸‹ðÙE½·w·êvf[F·(YΦøÒ¿bK¥ye†æ#‘¸VÐd«e îcºVÑz46¯ëÑE—XùQ<®† ™c]?hÔo*àÞ%žG'€t0 zwdu’À©ÇÍØ ¶â½7V'jdñ×€(pŠÒÕjy¼3ÇgOÊÔ#’5Ô“2˜:]È• ¬wO·Óf§ î„93²U&î“uëš%%kDÕ/Ú6˜¡®©ÄM¢°ZÐ ˜•¤Z.âƒu@Çäpn¼÷ª£ElTÎ}¶Yh â~ˆ • õ§L] dœa?¶ˆ{Ž4›[Ñíª|"7­w–-’ÐKk8^“Ô5´´5Æ2¤bFùhðªÑâ€GÑiHÍ0\~½2ŸNC˜Oµü98$jv‘öÅR®Ý9'ÞþΡº{ünΪ.ôvlÜ,Ó/†§–ÉšîΛü&YŽ®êÐEf¶¿Óü¥ûýh ¬Ùí;¼ÛéêaÜ?qï­kúú£®†fì€]³­cÐL^6‚çÇRxç™gP¢€4·÷м²çf+ÜH¡O7CäåMÉŽ¼ØHã ðCÒ:ivRr/ÄUsøT=଑£na ~"$GÓSô¦†ÿ ƒk&àÝ>Ú–ƒ!nÒXìÍ‚ZE¹<Ä|d0-§‚›i\r¬Uó&ð —7Ýá…D1¶p6y°xÌÏÑãªßÛÅ žÈÊ&E š¶s#¨Gœê‚†E_Hâ‚IÜC¤·÷;ûÂPïg ¶ð@é²¶~‚° äîØÝÓ~ï^.ÿlìÄ||üü¹¬f®E…£èǸX~NÔ/ÊVZ{Š––À¯#’Ç1ßÃÉ=ZŒ`yãÄñ±)C,Ž{Hfö!ÊWÏy,¡°¼2¦4ƒ23 6• üŸ“¬ïÔ±¸šŽÏê-“‰†‹Àƒ]]Ø“„‰šÚË-hLjŠn~ÿmïŒÄy*w•~$Ú–þPgv¬Äyx/s ò7¼ˆtäíH03td×Q´Ö»e·êÙË&£ƒfά€³¸±”oK2³~³ÂPÚR°Mgzé­‡apÊ9ò:¥AHx_ªLj@öÕQ^¹d­í¥3«ƒÁUÆ4¤>|‡e0ìL™N`5¶C=ÆSØtAWÍ: [ºvÀ¨½þÎ6|x°=¿ªQ¡K૎b’à"b_ÓQ '.D¤†1A£¨™p´ëª^–¾hôtê0·MŽ-SjbŠ"ÈbV€½*òÿ`Òœ«Õ› º„HZ-ÀÈH€ìêÁáU#´[ (¤µDÇÐÚdkÝèȈYÀ$,žLÃI:Ì™jã4Ïc.œ)2{fõjœ+Õ^úd7Ÿu|ð bžÛ¶ÐnÕîí.puDîuv4>¸8rqÕÃîç'Ûïzty|¢…”w÷g“Õ ‰øF«åv‰H†'[èâ‡Ñ)í0'‹Ã3 ÜСٛVš/prÒà ›ÉZ©Ô(ðÎÇÚ{&¼v4¼Í~¨Ã!—@é;wÞ¸Zü¯JSd½¬-åÀÔñÀc{Þ*Ýu¥3l«Áàª5âvÖN`ß4±Ü±.¡„ ;¶æ¥L6`¡Ó´-!˜€Ç\ÌW&Ë ¸úû 01C)3Ÿa@®ëyõNœÇ:‡ºG£ûuÖdCdÅüèPáq°‡¦Âu^äÕ°1‘Tâ®ΚXˆÀÖ)T3l@€Ýˆ­dè[=ôjË«¿N™ K÷αáß¶NS ú~/:[*ËOÒJµ`0ÓðHœàCÓEØL>Øš~x¸™d5«[ Õ[­Ô£t¨G•õÊ— ­D!0=Âô­ÙIáFä<í3Vâ8l-IÃ\׆UÙ^eC€J_l¾ÌàÆ,ìpç,ÐC¢¸‘kðN±:87BÛ­>¨„h®Óp1©@i´„Eip\5ºKÂÅÎ#‘ÂÆ›Ðçw_âFÛÔ hbhŒOì'ç×uŠ[¶k6XÆîé¶g ÐöÌ&ÏÖ¬éy*¼Ll¢½¶´MÁq9pÎàæò«ÃÕ©Ààk›92Ïkj@ïØ{]óÍênÇ ÇÂð[ŰDì‹çb¸ÈÛI*šWØÎ<¡ Õ:0\R6OÞ <Î*¬a³ÜŒ©%_‡¡š¤,Æ-"÷¡ôjga +Ð:…ξ-ùáðb‚8ždg é;ÞÙêB)Ç¡×g©Áª#ÞMiù°‰·²6ta;Së-¢8è4ÌK@q^¼zëš8K¿b’ͱ>+Fa9R5&‹/O¼Åb#Õ.<”ì¬6;«î¶`ÍyëaÁíft×ß-Ïq¬Nà áÓ{äU ?Ú”™Õ4M•$+Iä^ê9£¤rX†08]# …V̇+pÎ¥Zj ’]0eÔºz¶Î¥¬¦þ|T*&AHq‰lVølõ1ÖAan—¹JØ© Á€âá Ä’ÔãVÒÙ±39P“é–À,ƒúã+0ñDÉ™[=D;£§èÆam\Ê`že}m°.¬FP¢P²¡­l‘ÅÃËŒaI%YXG|›kÙ6ñë¥8töΖ6ËÑ.iÝAe6a’ÓjwrÆÜHËÜ•}å²À˜AY}e¤p€ÂÛj<ê-ì0|ì+Û4),FÉk°üùóX8ÃýU‹ìEJöÃSðP&3=.-†-+Ár‚ð0lFäŽÊNäã 8k«¡tRðà`É+³œ–¶aQB¤bÌ ¾hß!šeGÙÇáå°e§B{¼±Ú^n/Ú8žj^20^‰jš%i¬( {?Ì+»˜-ðdkS‰h«å—¢Úí>lc8Á}çšÉÚ¢PuX.–‰v}V—‚‰nFTê@¥N%L<£ÅÐO p¿c†¢e†õ‘ZÓâI¸s%"à&ܹK² 9X—¨sXã yËe^úcõg–%Ð#h #gh xõÆD(ÀúÆB,]·D­œ2zöäPXðè”ô² ÛNðmߌCIšwÜ÷­dË&dmÉÊŒPW@Ö+kö˜¥‘±$SÁT:–¤sxpü–ó†.mÛto}Vú GJ>€7à&åèv&Fʬ̤ág½¹”“´ØÉÆ&ŽdpJjÍŠ™'%fÆÚ3ê†æ„M4ø‡wÐ8ÚFì}³«ƒ3Üw-yÁyV×øh‡½UcôÕ„bÚ)MÃ!¾>Ù˜¦âV슦«ÛèÜè.à ÏNúƒ¹¶°¬Õ(ï¡C°êô­gÖŠÈ0!ÍË KÊtõ² Á„¸('ðlò~¯É´TTIc×n˜ƒ Ô -n= k<;mv=“ôzX.Íb.# Ï[Wî°m¥7E±Ô„â±Mß‚®ŽF ué6[dÎ,ÁPž'y°›žtƒ›èÑ©#—uMëý§Møð`sìj«×=®…÷ä·®^'Ro]ïu¡ÄÃÂXF'ª™„$B¶Þ£^Å—“`[˜ýÂá&åuzo66heKÚö.³E¤sN°%‚îë z¸Åægߵε-‡üY¦¢f˜ª°8‡³Kô0ôM¢6Ç¡¡)ø ÔRYÝSšëâ±—é\Mï€÷^]MnÌÇ@Û±â‚uuv°j“™KF!Í}ìr'pr¥…+ÁžR¬×Ë>l#8ÁwM'sÿ/e:t fó¸3Ò°Æ4‰qò7&⦺yH²œkô<Z|HöœŠg8ÓÊh·î7I¿ ‚ûG.oLÑÙiWoNäú Æ03Ç+â¶Î6î`~v~x“áœaDæ0¹]‰×¬íò¸pËÇÝÙƒõüþ«EAß+Ne´n“ÚÕZäA#6E4¶úÃ4oˆ/ŽEXkºHÑñ¦ïEDwÕCÁÇÑ”"Ø=[vsæaÙf•¥½l”•=‰L…*ÎuL~¹àQµܲ'àŒ§Ç(ŒèÕHNózf L"˜vENðÇë밀ų8\ü÷=¨ºïBW£[õèh:™Ì²H·¯|¯ô°¬ò؇/Jÿ²Fˆ2l4¬P‰Ë0“—ç Ó‚¬0 À™ Ö#}Ðô(ÑÓûjÝ{쵪GÐ`çõWkÅe³p±Ÿ —¾îßuR»”# Ô+m™©$]Ó Œµ`ૺ ©xÒŸ ÎóæÅØm뜿![5'ñ«ØÒÎñ&+¶Ê”ÇâüîÁ¨uvYÎ^cEÁrAX~ž§"®HÐu8;œ¯sܳ ÔáX £bÌûciM&!«ñ 軯|ç1˜ ¾Ô<2æu²ÝÛQ­+Üã×ññKñIxä¬Ýüˆ„¸>ŒlV<íµHæè#÷ÙcʲéG7oúÖ,ö9 JÃ"‚h»}>t7:¬xeT·¡·ØíZ<>¶ëA¨ÇP»‘ÃRªj”ìæ.º¤»A2Ïcv4ŒT›^îC]ÔÃß–t¶ÐæÓµ‚²ìãõ0“Õzwçð'¯é~F+Äy´Šzzç/–"è{¢[ŠëO³êX>Þ›æ«XG1Q›ÝG[ÎôÍË®€¥Kå"˜éÞˆ…Hc²¸í{Ä;eÀÁþw+nÁÎç y$Í¢é6‡ƒ‰èÌÌ ôìSSqEàÍ„+¦‰e"î¬Í³Y¶Vâ îã6hN’=¼ûüdšå$+Qó-ðòF ܧŠœ’ ®u`i@×ÃÅbÍa<¢w ­z´]åÏóŠ ²õKÁ|üY{°Å)ˆ@xþ¯蛞^˜úI™m…²‡ ¦ù’†7j[­£L‹ÆYVªâÐq`/Ô#.¿W̳£Þ i53]³jX`*«Ç¯b/ŠmÐJ­N=Ø*Ø ÷õˆ,ùygo>Ø]ý-ÉVÂ÷e¹ï¨"£ËlÐ!¬R¸e »…¬¬÷ùG @Ò¬M’+Hk¨F rKµ)uÄf<„qÕ«o uUìaK'‚DÁd‘ܦ•Ì´È¬Š‹¢*ÌȆ4Lƒ6?4ÀYéœË•EnDSV«¯\:š®ù¹Õ{Ù†öaåínmÍäÝÝù‰Ÿ^[¶öÍYNœ]>zbvÍ/~2=zÕ0ó€ï,í€U^™Ž¸j¿+3k‰­Ü·¢\4OÉCþIô¹®~¬¬VSóî9õi‰LäݶC££tÉDœ£÷ ÁEŒnpb5¯l‚·Ô?ß“dsÏNdzÂþ …Xw02@V+~!½¬¼#^©äbH|ii§±‰ºkôëboàÓbçÃjl #Õ‰Ïkêìt‹Ù×õÐ4‚k5E¾I5mm]J)¬Ôn|ƒï«Ž$Í#ž&†ì]Qn+€Ç›å»’nŸœY9Òù·?ýNÁkËfcá­LÖ‡§¯ÎKS-VMÓM<„žZHÀ€<ßl¶*ÜÖ8Eó-B5ä(N*òhX¼¸Ê‚£àR1=Óp…ªXALâuaœañ°’O„1}çÐdïç¶Í¶¡+ÿ‹,þÊŒHe§ê9LÝOiÒY?t[1¤žÐ‚F§å•ĵÏ–ý„pÄ/ËŠ”‰·ÔÇ ¼$5Mžà`Y—Žq‰u‡û*½j`¨i£gËZ]˯¬¼S\,¬‡Ì*epfS• €Í+›#%uµ¢ÊѶ$y¡ØÃ‹\¤`¥yóØÌüX½õy%뎙ÞÚù0&I¶ ‹ÓKº0}>4¦EViµ–#Q.¤ ¸&û^@¤Ym^ÅiƒÍ› `Ѳš 9jÍ•µ¤å,]ß#t1„iÍ]•gFš¤A“³S$Ñ)¬Ø“ÝÎv†—æ˜/xD3’°âatòá¨6!Þ<=9ßVeZ‚â>þ(`‚°Žêõ0‹;óe ÙÜ16¸ñ#RÇ@òf¦Ç¢2’¡ÃáQàP äjõ5½qqE_ãb‹û¿|÷unŒµl\c¸feÚÛ¹˜´¹JD¨/2n^¬à˃›Ua‚…‰õ$pRƒ6T4ÍÇBl4Æ\XµÃþ:wàp”Ü.P.¸¹è2U°y‰ö¦Ê»ß¡¯Z Ïfóˆ[ „¼•N¤ô´BǽXW&}ZVS„lé²è[´+°ÐŽGÁÊ€ß9>«ße³[øl[†üÿÚ»º+’äÊŒ-?Œ„dÉò{½Ì $•Ÿ•ù°C¯g4ë; ´öhµ]š;M·?ti`ù¿–ŸýœçDd}Ýên˜†µ´Ú`!ºò+*23"+㜨WÏ.Y)—¶¹ž¼ÜGŽzïìd&G¡#!.€È¥Dâ%7‚#¹YXz î†è§Ãñeðv¬ÈŽÐv®s †E;}=„‰½¯¡u×Gð$jz°š*×oë1‡Õ]¾®´¦z»\I Fª´jFåôÕú\žxf7’K‹äpÌ#±œXi7©(Â×#!á4²²Ôp‡hýƒ|;“ƒ^˜‡ØÈ[ú”“p)ïó!ÂðBXœ¦E± ¼ncJÝÖqMå—½*T5àÐÖÇ‘|[-BoQŒ*I¹†£Ö2bã÷º6ÈAT®ø!æŠÑpáTgÙ-ëŒ,5A){Iü ¡QX¤ÑûI©kUx0›0Ów¼?ÁVuÞ0pŽCÜl>´šyˤ‰>etTÚî2AOî”&‚Ó-»Ϧ9š–éÏÈCEmˆ䨥 0èÕû!BG n˜ußó‡TÉý¬R•B>#’ñOàýy77(©qžzúkfž !§RM'WyÁª ^HbV³WVr&ÀÖȯ.ÒB€¬¢ ³ë3 Q öÈ3JõÂOõ³µf°¢7Ãeøáf8‚Iu_xd×U’n¯NIhÆ/­'³^€ TðwxE¿/Æñ >5ïnËzQÂIÕ¹²v—1TõêWÞd…is±ã¥ OÇ5óÞÁðí¯«¼\¼ âjÍâ!à>‘qfùUÔŠ÷_³V B£V'«£/*BÄ Qqñû®I»}÷,°7_§äý'cÚtT¶~ìô.Ùm×ö8‹ã¬V¬»‹ö¾×µ¾î==|&“½Îbç/þ¦Óÿ:íÝdZ÷uïâä×λ§7\ËíÇ¡´W´iEZO›¢çA=ˆÊeò´JÞ“ (ˆkEESðLA WpÜ _#~¦Ç Cå LÁ]ò“¹Ü÷ܨå%‘–^]RëªÒõ?¥-øÚçíÃ÷ÖNÑ·DZzÞÞH~Cþèþv^mw{ªör£¬?¾ä[½\Þw2/&¢º´²µù£ƒ|ë/<ÓÇû#Ø7£èF¨j¤a"†*_ÍäƒdÄRæ"!zQ¶ó½~\&Z»©Ùù4»ÈXdfz6-›Þ’\kXíÕùIMÐÈ͵žÂ[¯2Vùj&Ÿt*öä價 |æXaÜ%+Ï’|hq¾"a™1=—fy®•{p*_ÍäCgp/w6zW¤pÉJµ$Z»©)…Œ4ÈÅn• ‡Ùã½W¢ûj•¯fò4úìT1…öE£Ò¿ž#'ôÄ€ÕDZ÷Éd§ hºSŒ–”QéËäCrkçcYr§cô s†hâˆD+ßyõ™¤†ÆXcU~îl(çÜì±R”`žx%Fï}¡NOe!SÐ*°"ûЇ{òÕŒèÆÈ›2/ËEÝV ý>|C9'öÆ÷Kµ˜’ý G¯Wß”Ág_7 8­Ùf^tÝéõ¾jÄîUV‹÷°§jfÍ»§j>¡·3{U§¶Þ­©ЀgëH×È;ñf¦k+˜\s:2_”Ïu!c¢kÄ]r)²ªš rÜS5ag„kiPuÒ«‹º1(|4óSÛBOÝ Ñå h’VŒŒªè%Óf®h’ã†0U4˜½›ê,O¡‹{z¦<Æ==cÙéocUEãLU¯g÷ŠW¯§Ô#UƒLÙ»©¦cÍ)z_77²é¡ºéò1¨z´| ª-ƒª'ËÇHÓÃò1hzX=&š­MV‘¦‡åcÐôhùT=]@zUÖ^Õ£åc_7Ÿà&KìþN#÷w¹¿M¹˜?8œ˜ØàØû[püæ^µénÉž÷|¾ áH— †isƒIÎíLê™['£N F“Ç–ö÷í…ÒsÑ{Ss! ÝÜ\bë91—úìÄ\ú TsµÜÜ\Ò‡Ÿ®ÇŸðòÍ_/Ç/òq¬_ñ+‡g° §~#ê¼L^ÛÒ€—Sâ˜Q¿bºûà ˜l¥ÕsJ&ÕÓq|^ÿcm±•K@x±‚(jvÁuz¹ü%&Rq²Š<Ž÷j×àöÙJŸLÉJЧ‰ê «Ÿ ÿX?ɹì*²ÞîrO¤eåúÁÛúµÜ¥¤—5+ÉÚ ~…¹ƒíYèáˆ53¾"àšxðÁ ôµIègpV-(º¨Wûëå6­V ®oçÕ iªµ 3ÃÙ«ö@–8ËNÂõ’ÑIÛÕŒÏJf—RŸÙ $KÿUЛJY„°­÷:ô¾2bÁõ´­Õxµ»ÔC<¤NÎÔR¬múÊå Ž$MEË©ô/Å_ÏÛ^Ó0}o{¶Él§~sxøæäÉÙÅúâøì´¹ƒ”„;s·ù¯g•9²z“•>ObŒÜ{õâoö‚Y·ñõ«Q…á–wÛωÏOy$mfj^¨ av <÷¶Þ)ª@BmMeÌH.tú,A{EU2ÊCa§áÔW£áý[Â_?ø%ÆLÜÇ[måÆû@?ªm´ýg~6nëˆð™ìÇþ.g¨Úû¾¢~ü>꥙Ôõî´¯XS¹•ô%Ũæ_îžLÀúÔÄG[€Üw‰¶æòÚ;Dz•ª³:×§%)–éuì†Nxry\¿½q ‘Ðæ‘|5“s²ú4¾I¾ •>½jw©;†œÄ¿Z¡‰§4X×…7ˆ·Bú˜Ù%^ëùe1ïêÎúÜ{¾2ckFŸ‹ {>Çٱ⚊ß/mGÀJ™0éâXsv”Ÿ4<ÛeeU ÍID6êÇÛ7åÏGÏÙ^£þæÅÙóMÚ֧ë£Í®y´{±Ùݽî‡üô`½ÝíÖç/õÑgggÛMlÎ/šo·ë‹æÁÞmJÏï°€iQâÑÛõöÁuu·AW.u-—°^yÙ€Î/¤®æÉÙ›Ó͵EB[[}zÈ×ŧ¤®úìïÎŽšg»õá«×KÏÖ§¾-M5«ÍúçÙCÚ¯ñ£«õ‹÷Ïß]UÛcüõññéô©kúäÓ‹ÝúÝóÍn÷þªúž½;>}µ-?»XïD;RWyü›ÝÅ£Ób«/'~Xï^mvµÊågž­Ï7»Í‹æ©Ôu±;{µ¹ºÄ7»ÝÙ»«‘º¯Ëdxñ5]xÞ7©ómôÔü=¾y^T°:>ݼ¾¼Ìð’Þì6Ûá9ã%O?9;ß4î6÷uæ–Ù>·Ÿa ØϘ僵â_¦y0a}7ú½¦üˆšþOùï^–ßÜ•®ÑÇ÷®Ÿ% sž::¢Hkˆ'•ØWœPÒµbwïþÿ=y1ú“J·“n¨Ÿºó:oºnÚ²¤ã/‘ú¯ü7(y8.›òû–}¼_vQþQ»þy»]×’%•GU9?»âo@€œvÞ·Ù`¢^ dø kþõÙ•>¬owDZþÂXº¹mŠç Gÿ¸‡«nømôÜ+ÃÆyG1·Ï2ŠÉú»ð"ìíµÑn‘5Ì;[çhû×]i.ÙF9Ž~›¾[gaQaà/×ò·ý.ÿÚæ¿BÚïšÛ—õKHóyÛ¶³¡—Ë/Ó¶o›$0Ÿ«yx=êï¨îÙ,ZÇïÏ=üÁ…’ÖKÓQZõ¿ÚÏØöàªjÛMÂè˯Ì_öÿc–,y(tÊáôèœo&»qxÐÔÿövŽÁ ±á¯×ãeýo©ciè—vÆôŽÂgêÌàð-uh¤(Y qbÈ¿–y^º×~n]õ®.ÜE¹Iûmèó«>ð¢ÒÚ©ÖrP¾íìå[ˆÉQ™·‹Ç…Éè­îí¡ÏO=.óÉÅ»|ø¥1G;û·›ýÛW}Ѓ”~õÔÐ?‘%]5 ‰-ûfKÄ|<݃y‰ü ÷#áò™î¯6†>Kc1¢ê‰6ë;×½ai{ìÓ˜ÞãõvSZ’S¶ÇχӶ;zR~þº¸–8jüó]½½.ÍÎÅk™Vç1Nèîü¶m~(¿,¿ÿã·íø¹ñIÞì¹²)ë“85Ýs$&S+ss\Ø 4¶ó¡ZZŽa¿³ÞàÔœ_ó5ª&Ì;[At¤‡’‚½¢³dBx;ië þ%£@;Ñ0° h5(]*  `pV |€}LP­<þoR_–Ž«ÓcêŠu¤’~¤)˜ñ›)ê¬h¯Oò½¸vIû"ŒîJï.Ë(/¤jm>ÔM«0%'ê#Ź{ò¸®€ÁyÔå&•9¹›d8ª9+]’×h®¬G(«•¥ÍwR^•œ{]‡i©(ðÍ×Ú: s©2Ÿ«ñö¶­U©Pî‘`n\׾ʒ´Z_¾|»×ºd·R¨ÚTqéJ]©Õ~ªzXæ»mî<Ü®_ý[óŸ/q~6Låa²><Âä}ø°Ô4}xTËÁËÝÙÉõåëc£’OŠcó¼ø×ퟫeëºóð%ëùq³Ýž½k~Ó<Ú­O6Í“õ‹cœ ^SíeÅÐʇ»ãÃWw'ÈÕöçæ|x”ÅÎN.ëêñ‡•žfáÕfývóº¹'¦—V1Žõ'ÕÍ˳Òâ–Ÿàƒ:Ô?Œ¢I¿]\ë¼ÈFôÝîìÍù÷§?Ÿ÷ɲ=n7§/Jõõ4žÿl¤H‘®ŽßVáýõñùÝë«\Þz›éú£¾™Þ[üF]Ëføá*¿,Žk.ÿyßÐ%e?¤Ù…ƒ˜fñG}cû%†v–=¯‹ðéæâÍùØfVë÷›²*ÍdZv¹165²Ó–eyõœž`yN÷êtï.=¿Çëþ£ù‰k«ÙÉöT?Ã7¿/ã/[ø¤éM®*:Ž–g½ЍKCö°Ä¼¡yŠÄ8©Õ×-Û®Hr”eÈÄ7ι±±*²VéFä¿a[`§—ϹŒ¼ì\$štà|'è¥2“q­¸Tï[SJöÉÈðp±4®WaLVe‰Ðáœ7S)h•”±ÔæÊ$>p=ÕñFo—p „+…e¸¾Õ€>X  —¿´Y£¼é®gÊâžÊJe¯o{£hü.åû­³ü6ëòQ$ï¨6æjºNqÕ|D3ŽGŒªÊ|ß⪥Cʺ“&l4Ôœ7ÂñXZ»„ï" roŶ¼ØY* øª)šìî¤2ú÷ ¬M$s€$$‚Þ¬x±Xªuÿ/_á,©I‹ ¥6Ÿû—“ £”@QÔ} ¼É\jCz}é0‡IÞ÷î½MÎuFUVt5±ô_Ší¾»mëgZ—sézfÂ…Ð¥0ÈÕÕ¢¸û8}P;)ìäb)†gZIÁ°;¥§â+iq¤®–•Kö Ç<©CåB†0Æ2a)ìäú¡®¾Ày›Uh$iÕáÎPø5 @€,yË Ý´À(† ;‰V …,™qñš³«ú§°3UæS™IÅti‡Bðz8ÃIc³S͵¹…â+Ї ¤Ÿƒ,~lEÙL™*$•* ´ÞL# QkÊ{â²ÖÕRÓ&ôˆVôÝ‚šùD„-ß$®Ä•ÐÅ"E¬§ßQ»^\:¡”³‰ÝeüpÞ—‚$›b)WÃ1-ðˆ²i‹ÛëFË…. fC ìÁ†!á-5H njA"ü§“û$l1»Ž{LY9Šrp·”¸-âÊ_.Rs’œá`ɤ§O(ÀÀ Œö~»”d;S.vK8v Ëš`$Ô‚È:…õ:]'²!+,Ö=\³‘ç0i±ÍØ!{Ô²:îš`‘|?[ 0e¬ØA»¨OâJ¦,!Kz‹ÍV0o`ë„Òb;€þo±u‚çE!²ì1B7K†ê|Ô•¸–Dä– FщÃJˆ»qœH¦+Áj¹r–5ÙÁøÀr *|ˆ‚Nr°Ç1µÖ¡\ûdÏ‘´„Ê˾)c!¸1ö8ü4Yx;ÜâZ€sÇ6yŸp»Ð]î^,N×Å"Æ—«ì|TÜ”n'g0§áÊØ„ì øc`{mNi°4£ ‰Ý±à&¾€sô’ص^ÆÐ ‡$„$ûâ ¢ [Ó’a®[í¤»Áó 0­ 30—@^H'·Ø÷¶äPr—ÔYƒ¦³c³©ÓÁ ÿÜÉê ô»FªBýFIì¶çèe0Åðë|3!$d+'j ›ˆc†Iâ»V-K5@Ë5ÕÓŠš)!:3†/~‰Å6ñr0t[¼Ñ²2D5ÒÉú„›¼Û%­ÆöLÀ,:!ìw¨Ì+Æ…sFHÖÐl‹-Ò ±Œ€ $ô ±>•ňëiÞÆ,Ï#(eÜ‹†®3œ:TîÄXyA›™Nèñ 1Gr€Ód;¡Î@U4G`8À¼_^ ÂËÕEÉE¸Û$W¢Âîðp0!` ãL˃>I1Ч'b=x{‘Ç@ƒáæhq5>̱L¿q¬O«(‹¿hzê0©ZðÈcE÷áãöÞ3á“;q>“×eÁ)R Œ5ˆþ´¡V‘ì›$ce(†*Vè’°>ÒRÚ(AM‰9JUÀ»¶Ùìá¾9¼pÔm•³ s„˜ÉË Á‡'‘w¼ïEÚyxÖ`-Ê”øHƒ cîkê‚#pf–M0gŸÂâñ掊g|@Q¶N¼ó¶õÚJ+¡ÖÎNŸ+P謨»0'ç[2:@d„§, †¶‡ßZ—ž½QO~fv²’“†bTÜÅÁnd3t¸‚hOJÁE˜JB´XY\í·+•Å2¹K/àÞHª$°˜'°zÛWYbP/Fîƒ [q0 ½ YZˆˆIeŒYZ¶Hé&™U¡|,ø@*¥Ðñ=E¸7ò©“ A`m:&VJT !qÉü\4½ÈjÁöWK#5"!ä,\ì÷ B¤r€]ƒ(„™¨?ˆÄ ¬Ôo”ÇÑZ/ 5Ì/#wõ—•Ù‚@Ë[R>#r Qü$sò’ÀM‚!ø©@…ÞñŒŽ±ª€Ã]o†V`± ÉĤQ¼XÁ¸\ü7p„–€ÀfÉiƒ gcL8wǰµì‹ÖpÍ*“S¯¸ÿÅ ¤0uõD9ìž g…¦éd"4÷¹8ºŽüÅ«€n¢C´C*"Ù¸1&lpô Q» z…[ý˜n–¿|e8îK¯{j ˆ¦Ën¡µ„®Æem >(ÄܶÇàr2ð‹üÄöhŠ„aô‡•5Æ!ô!!ÊÞCÄIl_;ò`ƒ@öZÀ¿" )û¨µ[Ç4ß²µXäp$lE0o§1‹GÌfÅ$[„0SÁ xLû#¶4ì}'ÇRìFÐjÏd@`8ø–â˜iŒD..ìQ™I¥«Ò„dd°ËSÁ ÙÞ‰ï‰ðZDÁ0AkYäNEUZÄ^'“&Z!$³Åú 8"s0É+k–#¥‰Asóáíoˆu’t©C} ´H*@—”Œ!Œá6€©‚d…Yæ`u´ƒ“¸óy5䈪RÆ Vå~äHcôI’EP†aùJ"îQ´ãTãíÄÞ*¤¥4gy94ËN2 £wµdÅè¥ *…XP(ä+È4:@­j€ÅW–:Ÿj½£ÛXe%ëhéʪ!60©ŒØµ°[’¬ht\üii†ÉS«¥71 î²¾Ž&1ß ñPÂûá‹ Fm­€­AÈɰ•PŽ{6„äÃd$ÆX‡Ðw˜œ‡gœ<š#CÃh‡£&$°!BÁ(µppqò¾2$ä†?\êð @Ûr(Ó4 É#úÝ!âç–£›.ëäœX³¢¶âM·È÷s„¥ÀPq¨¾b¬Ñx&ã Óœ&‡R‡6Ž`/8„ÈQ½åÔ  »áxkõŒÒ’RЦ—E{FØ.Ö¨A'+°¤‡ì:¥™Ú.hha5ˆJ\Ýâ:e$ê’FŠtG¬9ïø/_H¬ÿ?_þ÷—ü¹²–C­LîeÅï&N烜hÂ&mâ+ÉrÃeµÔ‘éüÃ×;|ÜtÌ]ï$æ$—"ÎÍZÐh4‡uåÌÙÙ& ?~ZÀˆ’ oLÂ)èÛEíêÇÛÎzd£Å[¾¢ `]£J)žÈà=gëUØj\•²ðEPhäàÆE÷‘_4y‚çeyÅK¦ÐÈ· G¾*ñ}öÇÞ«©´«Ñ½~„–ïÙ×G›g»õñ_°^¯ßnšõé)Rr7çåGÍÑnóúâl·i^¿<{ õøuý§ï·Û7¼Cw¶û©´Ð<¸ØìNŽOKÍÑæ¢ÙüesX}ýrýâøô¨<–®zìàl{¶ûþ¤4WžŒW=y.—!®h÷»~únWZÝœ^\UÑ!xÕÛÍÛÍÖ^ÞÐ×_ÿû£ooõÏ·ÄÞÿõֿܺýÕùùOÔ©jñöW·þ‰?ÿÍ­/o}1úû­[ÿX~ÿï_Üú‡[øßÿ®ç`!ð+É4³|ø´K¯^Á;ìCÆvÈ-àÛîaP+Tý>IωgH›(о~þè½ßû>Ë¿h”$Šý'ŠÓßág gLKà5ÑiÅVºZõŒ“€ú/ˆ…?̾»øÎqÛùˆøžG\;®KžãPºlÛdãjù˜6˜050sD^œ®eì 8\œ ®Á¹ÀUÁ!Q¹¼××××WWWW—gÃâ|$í`q$õ°ŒÅ•‘ËÃiPLLLLkXWW—góÀõÀ¹ààpUp6¸"8\œ® n\ ܸ 8\\\†çqÃàÜ šcs³ø5ÆÓ&6ÎíÔˆs¼ ±qv¹@lœagxàz<p0¹6…ûdSË`SÀx~ŸÍ×dsÁÕÙ\p%6œÅ¦óÙ4p0›†ȽÚly}ŸÍ ·Ùa3È©{lÙ¥2›A†es“ä±É0Îe“aœÃ&Ã8›M†q› ã¼68çÖÀÁ8§ÆÙp0ÎÈð' ƹÈéð `œÍƒ€qò9`Ú`ÀÔÀÌ‘Gp¸¸¸ 8\œ ®Á¹©‚³ÁÁÁeÊ‚ëëƒk€k‚«‚«ƒ+‚+Ë‚³Àù|€ëðÎSæƒ{å#`ÍësE0M®®ÎÁ•¸"8‹»×ã.Á5ð «sªÜ)¸"w . ÝzmpèÖ­C·N…xõe»ÝZZZ¢ÍÍMÚÚÚ¢n·Kûûû³<Ño)b¸.O~2xÞåÉŸzòUp=ÐÂújò‹s¬LõTÿ$R?ê©H}¤oχêª>©U}ÛÕïú¥H½3‹Ôou)%ïþ’;º)ÉòKJ2ßMI5JÉ dUiõ(u9â.L…*=PÛ΄±d¨L¨¯-‰…ÊT{cÅÜÁkÂ…ÊD5áD çn'Y=/±P™êÚ¸ÄDqÌ]”X¨LUÒ%&Šcr¯¨áw_c7T¨ÒÅ1ñàš%³ü#'NÞ̉»VN7s2…·s2™Ÿr2-Ý’ >¨d^Þ]ÉËßä%Ëý¼d¾œ—jZ²YUZ}›—¹Åçe–¢8&}´fe–­Yñ^”©~ž‘˜(æd–¢LTNÔp>áZ³â³(S;"1Q“¹‰2ÕTNb¢8&÷Š®!s[˜–YŠâØvfjŽRº¡ªÓWšíé…`¿Ç>@OÔnì~ðêAô?€¦®|vge•ßs˜‰O|8ùñã{Ó8€Îö~¾&4É8ƒ¿/á|s¢{7‰ÿ-hãæêòúÊ­å;ôö½öº¿â|Ý£ Vq†Æƒì‚ïM©üõ/7>¿ý)¿šˆ¾ux;òýáUÄè°O|Òôù¼UÆO/&Ž®rmd•]íp•£Õ.L½Xµ—ƒjÆ©˜~Xmív}ym´^x=®êÂôIz¬ea·V“8Zix£Õðy;Aµ½³OO­¶6RíøÞâó'q´tî/M?¬9úÿzÏŸãNr÷â‹TÕ£OÍîEÞ!¯_ý c¨÷Ôñ¹[³'ɽw6Êýþ• ·¡Fs‡»qœ´¡Ýx,ÚwåXðî3º@ßàŠ$$If–Þÿ!vh5ÖÅ5Ön5ÖÁ5Öï#vÅ#vn#vÁ#vï:V –l Ö@@@@ t¯Ö(ÿíëÿÿíëÿÿíëÿÿíëÿÖ0    öã"ö5ÖÅ5Ön5ÖÁ5Öï/Ö /Ö  ÿ/Ö ÿ/Ö  /Ö /Ö ÿ/Ö ÿ4ÖaöÞÿpÖ(ÿíëÿÿíëÿÿíëÿÿíëÿñ$$If–Þÿ!vh5ÖÅ5Ön5ÖÁ5Öï#vÅ#vn#vÁ#vï:V –l t¯Ö0    öã"ö5ÖÅ5Ön5ÖÁ5Öï/Ö /Ö ÿÿÿÿÿÿÿÿ/Ö 4ÖaöÞÿã$$If–Þÿ!vh5ÖÅ5Ön5ÖÁ5Öï#vÅ#vn#vÁ#vï:V –l t¯Ö0    öã"ö5ÖÅ5Ön5ÖÁ5Öï/Ö /Ö 4ÖaöÞÿã$$If–Þÿ!vh5ÖÅ5Ön5ÖÁ5Öï#vÅ#vn#vÁ#vï:V –l t¯Ö0    öã"ö5ÖÅ5Ön5ÖÁ5Öï/Ö /Ö 4ÖaöÞÿã$$If–Þÿ!vh5ÖÅ5Ön5ÖÁ5Öï#vÅ#vn#vÁ#vï:V –l t¯Ö0    öã"ö5ÖÅ5Ön5ÖÁ5Öï/Ö /Ö 4ÖaöÞÿã$$If–Þÿ!vh5ÖÅ5Ön5ÖÁ5Öï#vÅ#vn#vÁ#vï:V –l t¯Ö0    öã"ö5ÖÅ5Ön5ÖÁ5Öï/Ö /Ö 4ÖaöÞÿã$$If–Þÿ!vh5ÖÅ5Ön5ÖÁ5Öï#vÅ#vn#vÁ#vï:V –l t¯Ö0    öã"ö5ÖÅ5Ön5ÖÁ5Öï/Ö /Ö 4ÖaöÞÿã$$If–Þÿ!vh5ÖÅ5Ön5ÖÁ5Öï#vÅ#vn#vÁ#vï:V –l t¯Ö0    öã"ö5ÖÅ5Ön5ÖÁ5Öï/Ö /Ö 4ÖaöÞÿã$$If–Þÿ!vh5ÖÅ5Ön5ÖÁ5Öï#vÅ#vn#vÁ#vï:V –l t¯Ö0    öã"ö5ÖÅ5Ön5ÖÁ5Öï/Ö /Ö 4ÖaöÞÿã$$If–Þÿ!vh5ÖÅ5Ön5ÖÁ5Öï#vÅ#vn#vÁ#vï:V –l t¯Ö0    öã"ö5ÖÅ5Ön5ÖÁ5Öï/Ö /Ö 4ÖaöÞÿñ$$If–Þÿ!vh5ÖÅ5Ön5ÖÁ5Öï#vÅ#vn#vÁ#vï:V –l t¯Ö0    öã"ö5ÖÅ5Ön5ÖÁ5Öï/Ö /Ö  /Ö 4ÖaöÞÿ…$$If–!vh5Ö5Ö5Ö’5Ö‘#v#v#v’#v‘:V –l Ö@@@@ t¯Ö(ÿíëÿÿíëÿÿíëÿÿíëÿÖ0    ö¤"ö5Ö5Ö5Ö’5Ö‘/Ö /Ö  ÿ/Ö ÿ/Ö  /Ö /Ö ÿ/Ö ÿ4ÖpÖ(ÿíëÿÿíëÿÿíëÿÿíëÿú$$If–!vh5Ö5Ö5Ö’5Ö‘#v#v#v’#v‘:V –l t¯Ö0    ö¤"ö5Ö5Ö5Ö’5Ö‘/Ö /Ö ÿ/Ö  /Ö 4Ö…$$If–!vh5Ö95Ö5Ö5ÖÚ#v9#v#v#vÚ:V –l Ö@@@@ t¯Ö(ÿíëÿÿíëÿÿíëÿÿíëÿÖ0    ö¤"ö5Ö95Ö5Ö5ÖÚ/Ö /Ö  ÿ/Ö ÿ/Ö  /Ö /Ö ÿ/Ö ÿ4ÖpÖ(ÿíëÿÿíëÿÿíëÿÿíëÿì$$If–!vh5Ö95Ö5Ö5ÖÚ#v9#v#v#vÚ:V –l t¯Ö0    ö¤"ö5Ö95Ö5Ö5ÖÚ/Ö /Ö ÿÿÿÿÿÿÿÿ/Ö 4ÖÞ$$If–!vh5Ö95Ö5Ö5ÖÚ#v9#v#v#vÚ:V –l t¯Ö0    ö¤"ö5Ö95Ö5Ö5ÖÚ/Ö /Ö 4ÖÞ$$If–!vh5Ö95Ö5Ö5ÖÚ#v9#v#v#vÚ:V –l t¯Ö0    ö¤"ö5Ö95Ö5Ö5ÖÚ/Ö /Ö 4ÖÞ$$If–!vh5Ö95Ö5Ö5ÖÚ#v9#v#v#vÚ:V –l t¯Ö0    ö¤"ö5Ö95Ö5Ö5ÖÚ/Ö /Ö 4ÖÞ$$If–!vh5Ö95Ö5Ö5ÖÚ#v9#v#v#vÚ:V –l t¯Ö0    ö¤"ö5Ö95Ö5Ö5ÖÚ/Ö /Ö 4ÖÞ$$If–!vh5Ö95Ö5Ö5ÖÚ#v9#v#v#vÚ:V –l t¯Ö0    ö¤"ö5Ö95Ö5Ö5ÖÚ/Ö /Ö 4ÖÞ$$If–!vh5Ö95Ö5Ö5ÖÚ#v9#v#v#vÚ:V –l t¯Ö0    ö¤"ö5Ö95Ö5Ö5ÖÚ/Ö /Ö 4ÖÞ$$If–!vh5Ö95Ö5Ö5ÖÚ#v9#v#v#vÚ:V –l t¯Ö0    ö¤"ö5Ö95Ö5Ö5ÖÚ/Ö /Ö 4ÖÞ$$If–!vh5Ö95Ö5Ö5ÖÚ#v9#v#v#vÚ:V –l t¯Ö0    ö¤"ö5Ö95Ö5Ö5ÖÚ/Ö /Ö 4ÖÞ$$If–!vh5Ö95Ö5Ö5ÖÚ#v9#v#v#vÚ:V –l t¯Ö0    ö¤"ö5Ö95Ö5Ö5ÖÚ/Ö /Ö 4Öì$$If–!vh5Ö95Ö5Ö5ÖÚ#v9#v#v#vÚ:V –l t¯Ö0    ö¤"ö5Ö95Ö5Ö5ÖÚ/Ö /Ö  /Ö 4Ö…$$If–!vh5Ö%5Ö5Ö5Öî#v%#v#v#vî:V –l Ö@@@@ t¯Ö(ÿíëÿÿíëÿÿíëÿÿíëÿÖ0    ö¤"ö5Ö%5Ö5Ö5Öî/Ö /Ö  ÿ/Ö ÿ/Ö  /Ö /Ö ÿ/Ö ÿ4ÖpÖ(ÿíëÿÿíëÿÿíëÿÿíëÿì$$If–!vh5Ö%5Ö5Ö5Öî#v%#v#v#vî:V –l t¯Ö0    ö¤"ö5Ö%5Ö5Ö5Öî/Ö /Ö ÿÿÿÿÿÿÿÿ/Ö 4Öì$$If–!vh5Ö%5Ö5Ö5Öî#v%#v#v#vî:V –l t¯Ö0    ö¤"ö5Ö%5Ö5Ö5Öî/Ö /Ö ÿÿÿÿÿÿÿÿ/Ö 4Öì$$If–!vh5Ö%5Ö5Ö5Öî#v%#v#v#vî:V –l t¯Ö0    ö¤"ö5Ö%5Ö5Ö5Öî/Ö /Ö ÿÿÿÿÿÿÿÿ/Ö 4Öì$$If–!vh5Ö%5Ö5Ö5Öî#v%#v#v#vî:V –l t¯Ö0    ö¤"ö5Ö%5Ö5Ö5Öî/Ö /Ö ÿÿÿÿÿÿÿÿ/Ö 4ÖÞ$$If–!vh5Ö%5Ö5Ö5Öî#v%#v#v#vî:V –l t¯Ö0    ö¤"ö5Ö%5Ö5Ö5Öî/Ö /Ö 4Öì$$If–!vh5Ö%5Ö5Ö5Öî#v%#v#v#vî:V –l t¯Ö0    ö¤"ö5Ö%5Ö5Ö5Öî/Ö /Ö  /Ö 4Ö±$$If–!vh5Ö(5Öñ5ÖÞ5Öá5ÖÌ#v(#vñ#vÞ#vá#vÌ:V –l Ö @@@@@ t¯Ö2ÿíëÿÿíëÿÿíëÿÿíëÿÿíëÿÖ0    ö¤"ö5Ö(5Öñ5ÖÞ5Öá5ÖÌ/Ö /Ö  ÿ/Ö ÿ/Ö  /Ö /Ö ÿ/Ö ÿ4ÖpÖ2ÿíëÿÿíëÿÿíëÿÿíëÿÿíëÿ$$If–!vh5Ö(5Öñ5ÖÞ5Öá5ÖÌ#v(#vñ#vÞ#vá#vÌ:V –l t¯Ö0    ö¤"ö,Ö5Ö(5Öñ5ÖÞ5Öá5ÖÌ/Ö /Ö ÿÿÿÿÿÿÿÿ/Ö 4Öú$$If–!vh5Ö(5Öñ5ÖÞ5Öá5ÖÌ#v(#vñ#vÞ#vá#vÌ:V –l t¯Ö0    ö¤"ö,Ö5Ö(5Öñ5ÖÞ5Öá5ÖÌ/Ö /Ö 4Öú$$If–!vh5Ö(5Öñ5ÖÞ5Öá5ÖÌ#v(#vñ#vÞ#vá#vÌ:V –l t¯Ö0    ö¤"ö,Ö5Ö(5Öñ5ÖÞ5Öá5ÖÌ/Ö /Ö 4Öú$$If–!vh5Ö(5Öñ5ÖÞ5Öá5ÖÌ#v(#vñ#vÞ#vá#vÌ:V –l t¯Ö0    ö¤"ö,Ö5Ö(5Öñ5ÖÞ5Öá5ÖÌ/Ö /Ö 4Öú$$If–!vh5Ö(5Öñ5ÖÞ5Öá5ÖÌ#v(#vñ#vÞ#vá#vÌ:V –l t¯Ö0    ö¤"ö,Ö5Ö(5Öñ5ÖÞ5Öá5ÖÌ/Ö /Ö 4Öú$$If–!vh5Ö(5Öñ5ÖÞ5Öá5ÖÌ#v(#vñ#vÞ#vá#vÌ:V –l t¯Ö0    ö¤"ö,Ö5Ö(5Öñ5ÖÞ5Öá5ÖÌ/Ö /Ö 4Ö$$If–!vh5Ö(5Öñ5ÖÞ5Öá5ÖÌ#v(#vñ#vÞ#vá#vÌ:V –l t¯Ö0    ö¤"ö,Ö5Ö(5Öñ5ÖÞ5Öá5ÖÌ/Ö /Ö  /Ö 4ÖÂDd älåðb² ð c ð$€€A?¿ ÿ?3"ñ¿`¿€?ð€2ð ‚!qH &J£rˆ+ÈÌÿèd(`!ðà‚!qH &J£rˆ+ÈÌF à°_,®þxÚ•RÏ/Qž÷¶tw[¬_UŠ4 R6‰84©„Vâ"Q¼¤ÄZi%U'w7W‰?Bˆƒ¸ù8;9»¸X3oßnRáà%³;ßÌ7óæÍ @»bøA Ó‚bð@ãŒ)qÏó¤6É’Ê yqþ¢]v¡–ií€ðˆ â{Ô®Q61ý…†1ЇBù¨Rj 䀎ÖîGЉ L0?wnFIëFíµêüä§_>óœI>«´ëˆZzYÔÓ«®S>€¶µ÷zE   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ     þÿÿÿ !"#$%ýÿÿÿýÿÿÿýÿÿÿ*-þÿÿÿ./.ƒýÿÿÿ23456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€Root Entryÿÿÿÿÿÿÿÿ ÀF죑dAÃ,@Data ÿÿÿÿÿÿÿÿÿÿÿÿùoWordDocumentÿÿÿÿÿÿÿÿ~!ObjectPoolÿÿÿÿ €8dAÃ죑dAÃ_1086534478ÿÿÿÿÎÀFÀEdAÃàæ dAÃOle ÿÿÿÿÿÿÿÿÿÿÿÿCompObjÿÿÿÿfObjInfoÿÿÿÿÿÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿ þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿ ÿÿÿÿÎÀFMicrosoft Equation 3.0 DS Equation Equation.3ô9²qOÁ²ð¬° ƒpƒrƒeƒsƒcƒaƒlƒe†=ˆ3ˆ2ƒMƒHƒzˆ5†"ˆ1ˆ0ˆ0ƒKƒHƒz†"ˆ1†=ˆ6ˆ3‚(ƒdƒeƒc‚)†=ˆ3ƒF‚(ƒhƒeƒx‚)Equation Native ÿÿÿÿÿÿÿÿÿÿÿÿÎ_1102758061 ¡Aqn€?Ó«)`°îóøò+dAÃí\dAÃOle ÿÿÿÿÿÿÿÿÿÿÿÿObjInfo ÿÿÿÿ þÿà…ŸòùOh«‘+'³Ù0̘Àð 8 T`Contentsÿÿÿÿÿÿÿÿÿÿÿÿ1Ø£_1102760484ÿÿÿÿÿÿÿÿ¡Aqn€?Ó«)`°îóøÐfdAÃPdxdAÃOle ÿÿÿÿÿÿÿÿÿÿÿÿ ObjInfoÿÿÿÿ ‚þÿÿÿË…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊþÿÿÿ‰ýÿÿÿÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ 4128.0Build 23November 18, 20018IáúÌÞ @Ð÷Sã¥[@? ×£p=@÷(\Âõ@„^BMv^v(¼^€€€€€€€€€€€€ÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿððÿÿððððÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿðÿÿÿÿÿÿÿÿÿÿððÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿððÿÿÿðÿÿÿðÿÿÿÿÿÿÿÿÿðÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿðÿðÿððððÿðÿÿðððÿðððÿððÿðÿðÿðððÿðÿÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿðÿððððÿðÿÿðððÿððÿððÿðÿðÿðððÿðÿÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿðððððÿðÿÿðððððððððÿððððððÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿðððÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿððÿÿððÿÿÿÿÿÿððÿðððÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿððÿðÿððÿððÿÿðððÿÿðððÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿððÿðÿðÿðÿÿðÿððÿððÿðÿðÿÿðÿððÿðÿÿðÿÿðÿððÿðÿðÿðÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿðÿðÿðÿðÿÿÿðÿððÿðððÿðÿÿÿÿðÿððÿðÿÿðÿÿðÿðÿðÿðÿðÿÿÿÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿðÿÿÿÿÿÿÿÿðÿÿðÿðÿÿðÿÿÿðÿÿÿÿÿÿÿðÿÿðÿðÿÿðÿÿÿÿÿÿÿÿðÿÿðÿðÿÿðÿÿÿÿÿÿÿÿÿÿÿðÿÿðÿðÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿððÿÿÿÿÿÿÿÿÿðÿðÿÿðÿÿÿÿÿÿÿÿÿÿðÿðÿÿðÿðÿÿÿðÿÿÿÿÿÿÿÿðÿðÿÿðÿðÿÿÿÿÿÿÿÿÿðÿðÿÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿðÿÿÿÿÿÿÿðÿÿðÿÿÿÿÿÿÿðÿÿðÿÿÿÿÿÿÿÿÿðÿÿðÿÿÿÿÿÿÿðÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDÙ) Ï Drawing Variables   Solid Iron @ «       |®Gáz„?|®Gáz„?|®Gáz”?|®Gáz”?|®Gáz¤?|®Gáz¤?   ! % '«ªªªª !@«ªªªª &@(€€«ªªªª !@«ªªªª &@* / H CrossI ð?ð?JL MÐ?NO QTVX$Z$Ð?[\] ^ _ð?` Ariala$|®Gáz”?bijkð?ð?ln$À?o$À?p$À?q$Ð?r$Ø?st u v w x y „…†Œ þÿÿÿ Žð?«ªªªª !@«ªªªª &@ ‘’-DTû!é?“Ð?”Ð?•Ð?–-DTû!ù?—à?™ð?šœ  ž¢£‡DçJWÆ?¤¥¦§ ÿ­®¯°±²³´µ¶·¸¹º»¼$À?½À333333ã?Á Âà ÄÅ ArialÆÇÈÉ Closed Long ArrowÊ$À?Ëð?Ì-DTû!é?Í-DTû! @Î<>Ï<>ÐR <>Ñø <>Ò<>ÓÔ Õ$ð?×ð?Ø ÙÐ?Úê-™—q=ÛÜÝý©ñÒMbP?Þý©ñÒMbP?ßàá ÿÿÿÿâãäåæš™™™™™é?ç ÿÿÿÿè ÿÿÿÿé ÿÿÿÿê ÿÿÿÿëìíîï$Ø?ðñòóôõö ÷ øùð?úûð?üýð?þÿð?       -DTû!ù?  ð?ð? es-8RÁÀ?es-8RÁà?es-8RÁÀ? ! " #ð?$%&ð?' (ð?)ð?*+,-. /0ð?1ð?23 4 5 ä6 78Ð?9:;ð?<=UUUUUUÕ??@à?CDEIJK Y@Y@L Y@Y@NOš™™™™™é?Layer1 Light Sourcesdddð?KKKddd@@@@ð?ddd@@@Àð?ddd@À@@ð?ddd@À@Àð?ddd@@ð?ddd@Àð?´ Color Paletteðÿÿ€€¦¦RR€@@JJ$$$$ÿ@ÿž€¦)¦fR€€O@JJ.$$$ÿ€ÿ¿€¦R¦zR€@€^@J$J8$$$ÿ¿ÿÞ€¦z¦R€^€n@J8JB$$$!ÿÿÿÿ€¦¦¦¦R€€@JJJJ$$$$$¿ÿÞÿ€z¦¦R^€p€@8JBJ$$!$€ÿ¿ÿ€R¦z¦R@€^€@$J8J$$$@ÿžÿ€)¦f¦R€O€@J.J$$$ÿ€ÿ€¦R¦R@€@J$J$$$ÿ@€ÿž¦)R¦f€@€OJ$J.$$ÿ€€ÿ¿¦RR¦z€@@€^J$$J8$$ÿ¿€ÿÞ¦zR¦€^@€nJ8$JB$$!ÿÿ€ÿÿ¦¦R¦¦@€€JJ$JJ$$$$¿ÿ€Þÿz¦R¦^€@n€8J$BJ$!$€ÿ€¿ÿR¦Rz¦@€@^€$J$8J$$@ÿ€žÿ)¦Rf¦€@O€J$.J$$ÿ€€ÿ¦RR¦@@€J$$J$$@ÿž€ÿ)¦fR¦€O@€J.$J$$€ÿ¿€ÿR¦zR¦@€^@€$J8$J$$¿ÿÞ€ÿz¦R¦^€n@€8JB$J$!$ÿÿÿ€ÿ¦¦¦R¦€@€JJJ$J$$$$ÿ¿ÿ€Þ¦z¦R€^€@nJ8J$B$$!ÿ€ÿ€¿¦R¦Rz€@€@^J$J$8$$ÿ@ÿ€ž¦)¦Rf€€@OJJ$.$$TTTuuu–––ºººÛÛÛÿÿÿ0 Entity ListMain161 +ÿÿÿÿr= ×£p @†ëQ¸…@‘Âõ(\@†ëQ¸…@º…ëQ¸@]Âõ(\@533333@]Âõ(\@^Âõ(\@†ëQ¸…@Ù£p= ×@†ëQ¸…@@]Âõ(\@> ×£p=@]Âõ(\@S¸…ëQ@†ëQ¸…@Âõ(\@†ëQ¸…@¥p= ×£@]Âõ(\@âz®Gá@]Âõ(\@÷(\Âõ@†ëQ¸…@433333@†ëQ¸…@Iáz®G@]Âõ(\@†ëQ¸…@]Âõ(\@›™™™™™@†ëQ¸…@Ø£p= ×@†ëQ¸…@ìQ¸…ë@]Âõ(\@*\Âõ(@]Âõ(\@|®Gáz@]Âõ(\@Âõ(\@†ëQ¸…@ÎÌÌÌÌÌ@†ëQ¸…@âz®Gá@]Âõ(\@ …ëQ¸@]Âõ(\@433333@†ëQ¸…@r= ×£p@†ëQ¸…@†ëQ¸…@]Âõ(\@Äõ(\Â@]Âõ(\@Ø£p= ×@†ëQ¸…@®Gáz@†ëQ¸…@*\Âõ(@]Âõ(\@hfffff@]Âõ(\@|®Gáz@†ëQ¸…@¹…ëQ¸@†ëQ¸…@ÎÌÌÌÌÌ@]Âõ(\@ ×£p= @]Âõ(\@ …ëQ¸@†ëQ¸…@]Âõ(\@†ëQ¸…@r= ×£p@]Âõ(\@¯Gáz®@]Âõ(\@Äõ(\Â@†ëQ¸…@? ×£p=@†ëQ¸…@ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP? b1ø(\Âõ@q= ×£p@333333ã?S|®Gáz”?Arialà? c1œ™™™™™@r= ×£p@333333ã?A7|®Gáz”?Arialà? c1 …ëQ¸@q= ×£p@333333ã?A6|®Gáz”?Arialà? c1r= ×£p@r= ×£p@333333ã?A5|®Gáz”?Arialà? c1!Äõ(\Â@q= ×£p@333333ã?A4|®Gáz”?Arialà? c1#®Gáz@r= ×£p@333333ã?A3|®Gáz”?Arialà? c1%hfffff@q= ×£p@333333ã?A2|®Gáz”?Arialà? c1'º…ëQ¸@r= ×£p@333333ã?A1|®Gáz”?Arialà? c1) ×£p= @q= ×£p@333333ã?RW|®Gáz”?Arialà? d1+]Âõ(\@q= ×£p@333333ã?ACK|®Gáz”?Arialà? c1-¯Gáz®@r= ×£p@333333ã?D7|®Gáz”?Arialà? c1/@q= ×£p@333333ã?D6|®Gáz”?Arialà? c12S¸…ëQ@r= ×£p@333333ã?D5|®Gáz”?Arialà? c14¥p= ×£@q= ×£p@333333ã?D4|®Gáz”?Arialà? c16÷(\Âõ@r= ×£p@333333ã?D3|®Gáz”?Arialà? c18Iáz®G@q= ×£p@333333ã?D2|®Gáz”?Arialà? c1:š™™™™™@r= ×£p@333333ã?D1|®Gáz”?Arialà? c1<ìQ¸…ë@q= ×£p@333333ã?D0|®Gáz”?Arialà? e1>> ×£p=@r= ×£p@333333ã?NACK|®Gáz”?Arialà? b1@Âõ(\@q= ×£p@333333ã?P|®Gáz”?Arialà?v 1I 7ÿÿÿÿr= ×£p @Ø£p= ×@ãz®Gá@Ø£p= ×@÷(\Âõ@¯Gáz®@^Âõ(\@¯Gáz®@r= ×£p@Ø£p= ×@°Gáz®@Ø£p= ×@Äõ(\Â@¯Gáz®@@¯Gáz®@ ×£p= @Ø£p= ×@*\Âõ(@Ø£p= ×@433333@¯Gáz®@S¸…ëQ@¯Gáz®@]Âõ(\@Ø£p= ×@|®Gáz@Ø£p= ×@†ëQ¸…@¯Gáz®@¥p= ×£@¯Gáz®@¯Gáz®@Ø£p= ×@ÎÌÌÌÌÌ@Ø£p= ×@Ø£p= ×@¯Gáz®@÷(\Âõ@¯Gáz®@@Ø£p= ×@ …ëQ¸@Ø£p= ×@433333@¯Gáz®@Iáz®G@¯Gáz®@S¸…ëQ@Ø£p= ×@r= ×£p@Ø£p= ×@|®Gáz@¯Gáz®@›™™™™™@¯Gáz®@¥p= ×£@Ø£p= ×@Äõ(\Â@Ø£p= ×@ÎÌÌÌÌÌ@¯Gáz®@ìQ¸…ë@¯Gáz®@÷(\Âõ@Ø£p= ×@®Gáz@Ø£p= ×@ …ëQ¸@¯Gáz®@> ×£p=@¯Gáz®@Iáz®G@Ø£p= ×@gfffff@Ø£p= ×@r= ×£p@¯Gáz®@Âõ(\@¯Gáz®@›™™™™™@Ø£p= ×@¹…ëQ¸@Ø£p= ×@Äõ(\Â@¯Gáz®@âz®Gá@¯Gáz®@íQ¸…ë@Ø£p= ×@ ×£p= @Ø£p= ×@®Gáz@¯Gáz®@433333@¯Gáz®@> ×£p=@Ø£p= ×@]Âõ(\@Ø£p= ×@gfffff@¯Gáz®@†ëQ¸…@¯Gáz®@Âõ(\@Ø£p= ×@¯Gáz®@Ø£p= ×@¹…ëQ¸@¯Gáz®@ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?Ö1J ÿÿÿÿ¹…ëQ¸@¯Gáz®@Ø£p= ×@¯Gáz®@âz®Gá@Ø£p= ×@@Ø£p= ×@ ×£p= @¯Gáz®@*\Âõ(@¯Gáz®@433333@Ø£p= ×@S¸…ëQ@Ø£p= ×@]Âõ(\@¯Gáz®@|®Gáz@¯Gáz®@†ëQ¸…@Ø£p= ×@¥p= ×£@Ø£p= ×@¯Gáz®@¯Gáz®@ÎÌÌÌÌÌ@¯Gáz®@Ø£p= ×@Ø£p= ×@÷(\Âõ@Ø£p= ×@@¯Gáz®@ …ëQ¸@¯Gáz®@*\Âõ(@Ø£p= ×@Iáz®G@Ø£p= ×@S¸…ëQ@¯Gáz®@r= ×£p@¯Gáz®@|®Gáz@Ø£p= ×@›™™™™™@Ø£p= ×@? ×£p=@Ø£p= ×@ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?V1] ÿÿÿÿ533333@]Âõ(\@Ù£p= ×@]Âõ(\@@†ëQ¸…@> ×£p=@†ëQ¸…@S¸…ëQ@]Âõ(\@Âõ(\@]Âõ(\@¥p= ×£@†ëQ¸…@âz®Gá@†ëQ¸…@÷(\Âõ@]Âõ(\@433333@]Âõ(\@Iáz®G@†ëQ¸…@†ëQ¸…@†ëQ¸…@›™™™™™@]Âõ(\@Ø£p= ×@]Âõ(\@ìQ¸…ë@†ëQ¸…@*\Âõ(@†ëQ¸…@> ×£p=@]Âõ(\@ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?&1_ ÿÿÿÿ|®Gáz@]Âõ(\@ÎÌÌÌÌÌ@]Âõ(\@âz®Gá@†ëQ¸…@ …ëQ¸@†ëQ¸…@433333@]Âõ(\@r= ×£p@]Âõ(\@†ëQ¸…@†ëQ¸…@Äõ(\Â@†ëQ¸…@Ø£p= ×@]Âõ(\@®Gáz@]Âõ(\@*\Âõ(@†ëQ¸…@hfffff@†ëQ¸…@|®Gáz@]Âõ(\@¹…ëQ¸@]Âõ(\@ÎÌÌÌÌÌ@†ëQ¸…@ …ëQ¸@†ëQ¸…@ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP? d1aIáz®G @Äõ(\Â@333333ã?SCL|®Gáz”?Arialà? d1cIáz®G @r= ×£p@333333ã?SDA|®Gáz”?Arialà? b1i›™™™™™@¹…ëQ¸@333333ã?1|®Gáz”?Arialà? b1k…ëQ¸@º…ëQ¸@333333ã?2|®Gáz”?Arialà? b1mp= ×£p@¹…ëQ¸@333333ã?3|®Gáz”?Arialà? b1oÁõ(\Â@º…ëQ¸@333333ã?4|®Gáz”?Arialà? b1q®Gáz@¹…ëQ¸@333333ã?5|®Gáz”?Arialà? b1scfffff@º…ëQ¸@333333ã?6|®Gáz”?Arialà? b1u³…ëQ¸@¹…ëQ¸@333333ã?7|®Gáz”?Arialà? b1w×£p= @º…ëQ¸@333333ã?8|®Gáz”?Arialà? b1yUÂõ(\@¹…ëQ¸@333333ã?9|®Gáz”?Arialà? d1{›™™™™™@íQ¸…ë@333333ã?MSB|®Gáz”?Arialà? d1} ×£p= @íQ¸…ë@333333ã?LSB|®Gáz”?Arialà? b1ˆ¯Gáz®@¹…ëQ¸@333333ã?1|®Gáz”?Arialà? b1Š@¹…ëQ¸@333333ã?2|®Gáz”?Arialà? b1ŒS¸…ëQ@¹…ëQ¸@333333ã?3|®Gáz”?Arialà? b1Ž¥p= ×£@¹…ëQ¸@333333ã?4|®Gáz”?Arialà? b1÷(\Âõ@¹…ëQ¸@333333ã?5|®Gáz”?Arialà? b1’Iáz®G@¹…ëQ¸@333333ã?6|®Gáz”?Arialà? b1”›™™™™™@¹…ëQ¸@333333ã?7|®Gáz”?Arialà? b1–íQ¸…ë@¹…ëQ¸@333333ã?8|®Gáz”?Arialà? b1˜? ×£p=@¹…ëQ¸@333333ã?9|®Gáz”?Arialà? d1š¯Gáz®@íQ¸…ë@333333ã?MSB|®Gáz”?Arialà? d1œíQ¸…ë@íQ¸…ë@333333ã?LSB|®Gáz”?Arialà?ReportContentsÿÿÿÿÿÿÿÿÿÿÿÿ„]Œ_1102753424ÿÿÿÿÿÿÿÿ¡Aqn€?Ó«)`°îóøð†dAࡸdAÃOle ÿÿÿÿÿÿÿÿÿÿÿÿ ObjInfoÿÿÿÿ  4128.0Build 23November 18, 20018? ×Lë¼ @âz®Gá@ ×;Gƒ¿@|®Gáú@„^BMv^v(¼^€€€€€€€€€€€€ÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿððÿððÿÿðÿÿÿðÿÿÿÿÿÿðÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðððÿÿðÿÿÿððÿðÿðÿððÿðÿðÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðððÿðððÿððÿðÿÿððÿÿÿðÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿððððÿðÿÿððÿðÿðÿðÿðÿÿÿðÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿððÿðÿÿððÿðÿðÿðÿððÿðÿðÿÿÿÿðÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿðÿÿÿÿðÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿðÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿðÿðÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿðÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿððÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿðÿððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿððÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿððððÿÿÿððÿÿðÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿððÿÿÿÿðÿÿÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿðÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿðÿðÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿðÿðÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿððððÿðÿÿðÿðÿÿÿÿÿÿÿÿÿðÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿðÿðÿððÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿðÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿððððÿÿÿðÿðÿÿÿðÿÿÿÿÿÿÿÿÿÿðÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿððÿÿÿÿðÿðÿÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿðÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿðÿÿÿðÿðÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿðÿðÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿððððÿðÿÿðÿðÿÿÿÿÿÿÿÿÿðÿðÿðÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿðÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿðÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿððÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿðÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿðÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDÙ… Ï Drawing Variables    Short Dash Iron @        |®Gáz„?|®Gáz„?|®Gáz„?|®Gáz„?|®Gáz¤?|®Gáz¤?   ! % '«ªªªª !@«ªªªª &@(€€«ªªªª !@«ªªªª &@* / H CrossI ð?ð?JL MÐ?NO QTVX$Z$Ð?[\] ^ _ð?` Ariala$|®Gáz”?bijkð?ð?ln$À?o$À?p$À?q$Ð?r$Ø?st u v w x y „…†Œ þÿÿÿ Žð?«ªªªª !@«ªªªª &@ ‘’-DTû!é?“Ð?”Ð?•Ð?–-DTû!ù?—à?™ð?šœ  ž¢£‡DçJWÆ?¤¥¦§ ÿ­®¯°±²³´µ¶·¸¹º»¼$À?½À333333ã?Á Âfà ÄÅ ArialÆÇÈÉ Closed Long ArrowÊ$À?Ëð?Ì-DTû!é?Í-DTû! @Î<>Ï<>ÐR <>Ñø <>Ò<>ÓÔ Õ$ð?×ð?Ø ÙÐ?Úê-™—q=ÛÜÝý©ñÒMbP?Þý©ñÒMbP?ßàá ÿÿÿÿâãäåæš™™™™™é?ç ÿÿÿÿè ÿÿÿÿé ÿÿÿÿê ÿÿÿÿëìíîï$Ø?ðñòóôõö ÷ øùð?úûð?üýð?þÿð?       -DTû!ù?  ð?ð? es-8RÁÀ?es-8RÁà?es-8RÁÀ? ! " #ð?$%&ð?' (ð?)ð?*+,-. /0ð?1ð?23 4 5 ä6 78Ð?9:;ð?<=UUUUUUÕ??@à?CDEIJK Y@Y@L Y@Y@NOš™™™™™é?Layer1 Light Sourcesdddð?KKKddd@@@@ð?ddd@@@Àð?ddd@À@@ð?ddd@À@Àð?ddd@@ð?ddd@Àð?´ Color Paletteðÿÿ€€¦¦RR€@@JJ$$$$ÿ@ÿž€¦)¦fR€€O@JJ.$$$ÿ€ÿ¿€¦R¦zR€@€^@J$J8$$$ÿ¿ÿÞ€¦z¦R€^€n@J8JB$$$!ÿÿÿÿ€¦¦¦¦R€€@JJJJ$$$$$¿ÿÞÿ€z¦¦R^€p€@8JBJ$$!$€ÿ¿ÿ€R¦z¦R@€^€@$J8J$$$@ÿžÿ€)¦f¦R€O€@J.J$$$ÿ€ÿ€¦R¦R@€@J$J$$$ÿ@€ÿž¦)R¦f€@€OJ$J.$$ÿ€€ÿ¿¦RR¦z€@@€^J$$J8$$ÿ¿€ÿÞ¦zR¦€^@€nJ8$JB$$!ÿÿ€ÿÿ¦¦R¦¦@€€JJ$JJ$$$$¿ÿ€Þÿz¦R¦^€@n€8J$BJ$!$€ÿ€¿ÿR¦Rz¦@€@^€$J$8J$$@ÿ€žÿ)¦Rf¦€@O€J$.J$$ÿ€€ÿ¦RR¦@@€J$$J$$@ÿž€ÿ)¦fR¦€O@€J.$J$$€ÿ¿€ÿR¦zR¦@€^@€$J8$J$$¿ÿÞ€ÿz¦R¦^€n@€8JB$J$!$ÿÿÿ€ÿ¦¦¦R¦€@€JJJ$J$$$$ÿ¿ÿ€Þ¦z¦R€^€@nJ8J$B$$!ÿ€ÿ€¿¦R¦Rz€@€@^J$J$8$$ÿ@ÿ€ž¦)¦Rf€€@OJJ$.$$TTTuuu–––ºººÛÛÛÿÿÿ  Entity ListMain"¦1 ÿÿÿÿhfffff@®Gáz@ ×£p= @®Gáz@ …ëQ¸@íQ¸…ë@S¸…ëQ@íQ¸…ë@]Âõ(\@®Gáz@¥p= ×£@®Gáz@¯Gáz®@íQ¸…ë@÷(\Âõ@íQ¸…ë@ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?¦1 ÿÿÿÿhfffff@º…ëQ¸@ ×£p= @º…ëQ¸@ …ëQ¸@‘Âõ(\@S¸…ëQ@‘Âõ(\@]Âõ(\@º…ëQ¸@¥p= ×£@º…ëQ¸@¯Gáz®@‘Âõ(\@÷(\Âõ@‘Âõ(\@ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?G 1ýÿÿÿ@ ×£p= @hfffff@@hfffff@G 1ýÿÿÿA†ëQ¸@gfffff@Âõ(\@> ×£p=@G 1ýÿÿÿm°Gáz®@‘Âõ(\@Äõ(\Â@º…ëQ¸@G 1ýÿÿÿnÄõ(\Â@º…ëQ¸@]Âõ(\@º…ëQ¸@ª1˜ ÿÿÿÿ÷(\Âõ@? ×£p=@¯Gáz®@? ×£p=@¥p= ×£@hfffff@]Âõ(\@hfffff@S¸…ëQ@? ×£p=@ …ëQ¸@? ×£p=@ ×£p= @hfffff@hfffff@hfffff@ý©ñÒMbP?ý©ñÒMbP?€ý©ñÒMbP?ý©ñÒMbP?€ý©ñÒMbP?ý©ñÒMbP?€ý©ñÒMbP?ý©ñÒMbP?€ý©ñÒMbP?ý©ñÒMbP?€ý©ñÒMbP?ý©ñÒMbP?€ý©ñÒMbP?ý©ñÒMbP?€ý©ñÒMbP?ý©ñÒMbP?€G 1ýÿÿÿ›¥p= ×£@hfffff@÷(\Âõ@hfffff@ê1«(ý©ñÒMbP?ÿÿÿÿØ£p= W@T¸…ëQ@gfffff@? ×£p=@> ×£p=@®Gáz@Ø£p= W@@ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ð?ý©ñÒMbP?ý©ñÒMbP?ê1¯(ý©ñÒMbP?ÿÿÿÿ®Gáz@@533333@®Gáz@÷(\Âõ@Iáz®G@®Gáz@T¸…ëQ@ý©ñÒMbP?ý©ñÒMbP?qý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?º1³(ý©ñÒMbP?ÿÿÿÿ®Gáz@@º…ëQ¸@ ×£p= @®Gáz@¦p= ×£@ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?º1´(ý©ñÒMbP?ÿÿÿÿØ£p= W@@€@hfffff@Ø£p= W@¦p= ×£@ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ê1º ÿÿÿÿ®Gáz@@÷(\Âõ@ ×£p= @÷(\Âõ@@®Gáz@@ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?(ˆ1BlackË!ÿÿÿÿ‹˜UŠëý@ÓŸòî@÷(\Âõ@åî“ý¢@÷(\Âõ@@®Gáz@@$2ï# @—¤S@(ˆ1BlackÍ!ÿÿÿÿ÷(\Âõ@ ×£p= @÷(\Âõ@åî“ý¢@‹˜UŠëý@ÓŸòî@$2ï# @—¤S@®Gáz@@ê1× ÿÿÿÿ®Gáz@T¸…ëQ@†ëQ¸@T¸…ëQ@ ×£p= @Iáz®G@®Gáz@T¸…ëQ@ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?øˆ1Blacké!ÿÿÿÿÄ|\\Ø@Ø• =xL@ ×£p= @Iáz®G@®Gáz@T¸…ëQ@†ëQ¸@T¸…ëQ@ê1ë ÿÿÿÿØ£p= W@@S¸…ëQ@ ×£p= @Âõ(\O@@Ø£p= W@@ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?øˆ1Black!ÿÿÿÿØ£p= W@@S¸…ëQ@ ×£p= @©«©5¯P@d¤Ï2L@Âõ(\O@@ñê1 ÿÿÿÿØ£p= W@¦p= ×£@]Âõ(\@‘Âõ(\@gfffff@›™™™™™@Ø£p= W@¦p= ×£@ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?ý©ñÒMbP?øˆ1Black!ÿÿÿÿØ£p= W@¦p= ×£@]Âõ(\@‘Âõ(\@GCÞ*ü]@{v^/‘@gfffff@›™™™™™@G 1ýÿÿÿ# ×£p= @ãz®Gá@ ×£p= @âz®Gá@G 1ýÿÿÿ%]Âõ(\@ãz®Gá@]Âõ(\@âz®Gá@G 1ýÿÿÿ0Äõ(\Â@ãz®Gá@Äõ(\Â@º…ëQ¸@ œ1> ×£p= @âz®Gá@333333ã?Start counting|®Gáz„?Arial€ low period|®Gáz„?Arialà? 1@…ëQ¸@ÎÌÌÌÌÌ@333333ã?wait|®Gáz„?Arial€state|®Gáz„?Arialà? 1B]Âõ(\@âz®Gá@333333ã?Start counting|®Gáz„?Arial€ high period|®Gáz„?Arialà?G 1ýÿÿÿXÄõ(\Â@ÎÌÌÌÌÌ@]Âõ(\@ÎÌÌÌÌÌ@ i1Z? ×£p=@¥p= ×£@333333ã?SCL1|®Gáz”?Arialà? i1\? ×£p=@S¸…ëQ@333333ã?SCL2|®Gáz”?Arialà? h1^? ×£p=@@333333ã?SCL|®Gáz”?Arialà? p1` ×£p= @¥p= ×£@333333ã? Master1 SCL|®Gáz”?Arialà? p1b ×£p= @S¸…ëQ@333333ã? Master2 SCL|®Gáz”?Arialà? r1d ×£p= @@333333ã? wired-AND SCL|®Gáz”?Arialà?ReportContentsÿÿÿÿÿÿÿÿÿÿÿÿÍ#€1Tableÿÿÿÿ5¨¥SummaryInformation(ÿÿÿÿüDocumentSummaryInformation8ÿÿÿÿÿÿÿÿÿÿÿÿ     þÿÿÿ !"#$%&'()*+,-./0þÿÿÿ234A6789:;<=>?@1BCDEFGHIJKLMNOPQRSTUVWXYZ[\]^`ýÿÿÿabcdefghijklmnopqrstuvwxyz{|}~€ 4128.0Build 23November 18, 20018¦pýšÛO @ÎÌÌÌÌÌ@:Œ0âŽyE¾gf& 9›@@:Œ0âŽyE>„^BMv^v(¼^€€€€€€€€€€€€ÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿðÿÿÿÿððÿÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿðÿÿðÿÿÿÿÿððÿðÿÿÿðÿðÿðÿðÿÿÿÿÿÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿðÿðÿÿÿÿðÿðÿðÿðÿÿðÿðÿðÿÿÿÿÿÿÿÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿðÿÿÿÿðÿðÿðÿÿÿÿÿÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿðÿÿÿÿðÿðÿÿÿðÿÿðÿðÿðÿðÿÿÿÿÿÿðÿðÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿðÿððÿðÿÿÿÿððÿðÿðÿððÿðÿðÿðÿÿÿÿÿÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿððÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿðÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿðÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿðÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿðÿÿÿÿÿÿðÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿðÿðÿÿÿÿÿÿððÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿðÿÿðÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿðÿÿÿÿÿÿÿÿÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿðÿÿðÿÿÿðÿÿðÿÿÿÿÿÿÿÿÿÿÿÿðÿðÿðÿðÿÿÿÿÿÿððÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿðÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿðÿÿÿÿÿÿÿÿÿÿÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿðÿðÿÿÿÿÿÿÿðÿÿðÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿðÿÿÿÿÿÿÿððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿðÿÿðÿÿÿÿððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿðÿÿðÿÿðÿÿððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿðÿÿÿÿððÿÿðÿðÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿðÿÿðÿÿÿÿÿððÿðÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿðÿðÿÿÿÿðÿðÿðÿðÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿðÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿðÿÿÿÿðÿðÿÿÿðÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿðÿððÿðÿÿÿÿððÿðÿðÿðÿÿÿÿðÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿððÿÿÿðÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿðÿÿÿÿððÿÿðÿðÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿððÿÿÿÿððÿðÿÿÿðÿðÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿðÿÿÿÿðÿðÿðÿðÿÿðÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿðÿÿðÿÿÿÿðÿðÿÿÿÿðÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿðÿÿÿÿðÿðÿÿÿðÿÿðÿðÿðÿðÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿððÿÿÿÿððÿðÿðÿððÿðÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿðÿÿÿÿððÿÿÿðÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿðÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿðÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿðÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿðÿÿÿÿððÿÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿððÿÿÿÿððÿðÿÿÿÿÿÿÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿðÿÿðÿðÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿðÿÿÿÿðÿðÿðÿðÿÿÿÿÿÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿðÿÿðÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿðÿÿðÿÿÿÿðÿðÿÿÿÿÿÿÿÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿðÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿðÿÿÿÿðÿðÿÿÿðÿÿÿÿÿÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿðÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿððÿÿÿÿððÿðÿðÿðÿÿÿÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿðÿÿÿÿððÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿðÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿðÿÿðÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿðÿÿðÿðÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿðÿÿÿÿððÿÿðÿðÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿððÿÿÿÿððÿðÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿðÿÿÿÿðÿðÿðÿðÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿðÿÿðÿÿÿÿðÿðÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿðÿÿÿÿðÿðÿÿÿðÿÿÿÿÿÿðÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿððÿÿÿÿððÿðÿðÿðÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿðÿÿÿÿððÿÿÿðÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒÙÏ Drawing Variables   Solid Iron @        |®Gáz„?|®Gáz„?|®Gáz„?|®Gáz„?|®Gáz¤?|®Gáz¤?   ! % '«ªªªª !@«ªªªª &@(€€«ªªªª !@«ªªªª &@* / H CrossI ð?ð?JL MÐ?NO QTVX$Z$Ð?[\] ^ _ð?` Ariala$|®Gáz”?bijkð?ð?ln$À?o$À?p$À?q$Ð?r$Ø?st u v w x y „…†Œ þÿÿÿ Žð?«ªªªª !@«ªªªª &@ ‘’-DTû!é?“Ð?”Ð?•Ð?–-DTû!ù?—à?™ð?šœ  ž¢£‡DçJWÆ?¤¥¦§ ÿ­®¯°±²³´µ¶·¸¹º»¼$À?½À333333ã?Á Â’Ã ÄÅ ArialÆÇÈÉ Closed Long ArrowÊ$À?Ëð?Ì-DTû!é?Í-DTû! @Î<>Ï<>ÐR <>Ñø <>Ò<>ÓÔ Õ$ð?×ð?Ø ÙÐ?Úê-™—q=ÛÜÝý©ñÒMbP?Þý©ñÒMbP?ßàá ÿÿÿÿâãäåæš™™™™™é?ç ÿÿÿÿè ÿÿÿÿé ÿÿÿÿê ÿÿÿÿëìíîï$Ø?ðñòóôõö ÷ øùð?úûð?üýð?þÿð?       -DTû!ù?  ð?ð? es-8RÁÀ?es-8RÁà?es-8RÁÀ? ! " #ð?$%&ð?' (ð?)ð?*+,-. /0ð?1ð?23 4 5 ä6 78Ð?9:;ð?<=UUUUUUÕ??@à?CDEIJK Y@Y@L Y@Y@NOš™™™™™é?Layer1 Light Sourcesdddð?KKKddd@@@@ð?ddd@@@Àð?ddd@À@@ð?ddd@À@Àð?ddd@@ð?ddd@Àð?´ Color Paletteðÿÿ€€¦¦RR€@@JJ$$$$ÿ@ÿž€¦)¦fR€€O@JJ.$$$ÿ€ÿ¿€¦R¦zR€@€^@J$J8$$$ÿ¿ÿÞ€¦z¦R€^€n@J8JB$$$!ÿÿÿÿ€¦¦¦¦R€€@JJJJ$$$$$¿ÿÞÿ€z¦¦R^€p€@8JBJ$$!$€ÿ¿ÿ€R¦z¦R@€^€@$J8J$$$@ÿžÿ€)¦f¦R€O€@J.J$$$ÿ€ÿ€¦R¦R@€@J$J$$$ÿ@€ÿž¦)R¦f€@€OJ$J.$$ÿ€€ÿ¿¦RR¦z€@@€^J$$J8$$ÿ¿€ÿÞ¦zR¦€^@€nJ8$JB$$!ÿÿ€ÿÿ¦¦R¦¦@€€JJ$JJ$$$$¿ÿ€Þÿz¦R¦^€@n€8J$BJ$!$€ÿ€¿ÿR¦Rz¦@€@^€$J$8J$$@ÿ€žÿ)¦Rf¦€@O€J$.J$$ÿ€€ÿ¦RR¦@@€J$$J$$@ÿž€ÿ)¦fR¦€O@€J.$J$$€ÿ¿€ÿR¦zR¦@€^@€$J8$J$$¿ÿÞ€ÿz¦R¦^€n@€8JB$J$!$ÿÿÿ€ÿ¦¦¦R¦€@€JJJ$J$$$$ÿ¿ÿ€Þ¦z¦R€^€@nJ8J$B$$!ÿ€ÿ€¿¦R¦Rz€@€@^J$J$8$$ÿ@ÿ€ž¦)¦Rf€€@OJJ$.$$TTTuuu–––ºººÛÛÛÿÿÿØ Entity ListMain(3 1ýÿÿÿ›™™™™™@›™™™™™@®Gáz„?C 1ýÿÿÿ›™™™™™@‘Âõ(\@›™™™™™@|®Gáz@C 1ýÿÿÿ›™™™™™@|®Gáz@º…ëQ¸@|®Gáz@C 1ýÿÿÿ!º…ëQ¸@º…ëQ¸@^Âõ(\@º…ëQ¸@C 1ýÿÿÿ"^Âõ(\@º…ëQ¸@^Âõ(\@ãz®Gá@C 1ýÿÿÿ#^Âõ(\@ãz®Gá@Ù£p= ×@º…ëQ¸@C 1ýÿÿÿ$Ù£p= ×@º…ëQ¸@^Âõ(\@‘Âõ(\@C 1ýÿÿÿ%^Âõ(\@‘Âõ(\@^Âõ(\@º…ëQ¸@C 1ýÿÿÿ'Ù£p= ×@º…ëQ¸@*\Âõ(@º…ëQ¸@C 1ýÿÿÿ(*\Âõ(@º…ëQ¸@*\Âõ(@ÎÌÌÌÌÌ@C 1ýÿÿÿ)*\Âõ(@ÎÌÌÌÌÌ@S¸…ëQ@ÎÌÌÌÌÌ@C 1ýÿÿÿ*S¸…ëQ@ÎÌÌÌÌÌ@S¸…ëQ@¥p= ×£@C 1ýÿÿÿ+S¸…ëQ@¥p= ×£@*\Âõ(@¥p= ×£@C 1ýÿÿÿ,*\Âõ(@¥p= ×£@*\Âõ(@º…ëQ¸@C 1ýÿÿÿ.@º…ëQ¸@@÷(\Âõ@C 1ýÿÿÿ/@÷(\Âõ@º…ëQ¸@÷(\Âõ@3 1ýÿÿÿQ›™™™™™@ú(\Âõ@®Gáz„?C 1ýÿÿÿR›™™™™™@ðQ¸…ë@›™™™™™@Û£p= ×@C 1ýÿÿÿS›™™™™™@Û£p= ×@º…ëQ¸@Û£p= ×@C 1ýÿÿÿTº…ëQ¸@®Gáz@^Âõ(\@®Gáz@C 1ýÿÿÿU^Âõ(\@®Gáz@^Âõ(\@B ×£p=@C 1ýÿÿÿV^Âõ(\@B ×£p=@Ù£p= ×@®Gáz@C 1ýÿÿÿWÙ£p= ×@®Gáz@^Âõ(\@ðQ¸…ë@C 1ýÿÿÿX^Âõ(\@ðQ¸…ë@^Âõ(\@®Gáz@C 1ýÿÿÿYÙ£p= ×@®Gáz@*\Âõ(@®Gáz@C 1ýÿÿÿZ*\Âõ(@®Gáz@*\Âõ(@-\Âõ(@C 1ýÿÿÿ[*\Âõ(@-\Âõ(@S¸…ëQ@-\Âõ(@C 1ýÿÿÿ\S¸…ëQ@-\Âõ(@S¸…ëQ@@C 1ýÿÿÿ]S¸…ëQ@@*\Âõ(@@C 1ýÿÿÿ^*\Âõ(@@*\Âõ(@®Gáz@C 1ýÿÿÿ_@®Gáz@@V¸…ëQ@C 1ýÿÿÿ`@V¸…ëQ@º…ëQ¸@V¸…ëQ@ j1ƒ¦p= ×£@÷(\Âõ@333333ã? scl_pad_i|®Gáz”?Arialà? j1…¦p= ×£@º…ëQ¸@333333ã? scl_pad_o|®Gáz”?Arialà? m1‡¦p= ×£@|®Gáz@333333ã? scl_padoen_o|®Gáz”?Arialà? j1‰¦p= ×£@S¸…ëQ@333333ã? sda_pad_i|®Gáz”?Arialà? j1‹¦p= ×£@®Gáz@333333ã? sda_pad_o|®Gáz”?Arialà? m1¦p= ×£@Ø£p= ×@333333ã? sda_padoen_o|®Gáz”?Arialà? d1hfffff@º…ëQ¸@333333ã?SCL|®Gáz”?Arialà? d1‘gfffff@®Gáz@333333ã?SDA|®Gáz”?Arialà?Report«r2y×´¹ÉŸRäkxªŸðhˆ×ûÛ!Þèmæßt5óóÔŽœàLù§lCâ3íQ×g³BW–d”3Y»,§S{úç Ù¿^Èåÿ £ UÉm?Ý\Ç"¨m(I1y0º‰±#¶EPm*F–¥ÅeqÙƒA–Zb*jOöò°*jÛå}ñË\p^`Ζ»õyÚ“ˆ¹ò×\üªy8Ÿ\‚sÕ[Íx¶ðD5è&è„ÇCÿs‹Ï7ÕÆ™r+ý[ýZ-ˆJt'÷˜q>RlÔŽ„CÈT[H@ßÖ¤ýÔ.tñY$$If–!vh5Ö<5ÖÕ5Ö°#v<#vÕ#v°:V –l Ö@@@ t¯ÖÿíëÿÿíëÿÿíëÿÖ0    öö5Ö<5ÖÕ5Ö°/Ö /Ö  ÿ/Ö ÿ/Ö  /Ö /Ö ÿ/Ö ÿ4ÖpÖÿíëÿÿíëÿÿíëÿÖ$$If–!vh5Ö<5ÖÕ5Ö°#v<#vÕ#v°:V –l t¯Ö0    öö5Ö<5ÖÕ5Ö°/Ö /Ö ÿÿÿÿÿÿÿÿ/Ö 4ÖÈ$$If–!vh5Ö<5ÖÕ5Ö°#v<#vÕ#v°:V –l t¯Ö0    öö5Ö<5ÖÕ5Ö°/Ö /Ö 4ÖÖ$$If–!vh5Ö<5ÖÕ5Ö°#v<#vÕ#v°:V –l t¯Ö0    öö5Ö<5ÖÕ5Ö°/Ö /Ö  /Ö 4ÖY$$If–!vh5Ö<5ÖÕ5Ö°#v<#vÕ#v°:V –l Ö@@@ t¯ÖÿíëÿÿíëÿÿíëÿÖ0    öö5Ö<5ÖÕ5Ö°/Ö /Ö  ÿ/Ö ÿ/Ö  /Ö /Ö ÿ/Ö ÿ4ÖpÖÿíëÿÿíëÿÿíëÿÖ$$If–!vh5Ö<5ÖÕ5Ö°#v<#vÕ#v°:V –l t¯Ö0    öö5Ö<5ÖÕ5Ö°/Ö /Ö ÿÿÿÿÿÿÿÿ/Ö 4Öä$$If–!vh5Ö<5ÖÕ5Ö°#v<#vÕ#v°:V –l t¯Ö0    öö5Ö<5ÖÕ5Ö°/Ö /Ö ÿÿÿÿÿÿÿÿ/Ö  /Ö 4ÖY$$If–!vh5Ö<5ÖÕ5Ö°#v<#vÕ#v°:V –l Ö@@@ t¯ÖÿíëÿÿíëÿÿíëÿÖ0    öö5Ö<5ÖÕ5Ö°/Ö /Ö  ÿ/Ö ÿ/Ö  /Ö /Ö ÿ/Ö ÿ4ÖpÖÿíëÿÿíëÿÿíëÿä$$If–!vh5Ö<5ÖÕ5Ö°#v<#vÕ#v°:V –l t¯Ö0    öö5Ö<5ÖÕ5Ö°/Ö /Ö ÿ/Ö  /Ö 4ÖY$$If–!vh5Ö<5ÖÕ5Ö°#v<#vÕ#v°:V –l Ö@@@ t¯ÖÿíëÿÿíëÿÿíëÿÖ0    öö5Ö<5ÖÕ5Ö°/Ö /Ö  ÿ/Ö ÿ/Ö  /Ö /Ö ÿ/Ö ÿ4ÖpÖÿíëÿÿíëÿÿíëÿÖ$$If–!vh5Ö<5ÖÕ5Ö°#v<#vÕ#v°:V –l t¯Ö0    öö5Ö<5ÖÕ5Ö°/Ö /Ö ÿÿÿÿÿÿÿÿ/Ö 4ÖÈ$$If–!vh5Ö<5ÖÕ5Ö°#v<#vÕ#v°:V –l t¯Ö0    öö5Ö<5ÖÕ5Ö°/Ö /Ö 4ÖÈ$$If–!vh5Ö<5ÖÕ5Ö°#v<#vÕ#v°:V –l t¯Ö0    öö5Ö<5ÖÕ5Ö°/Ö /Ö 4ÖÈ$$If–!vh5Ö<5ÖÕ5Ö°#v<#vÕ#v°:V –l t¯Ö0    öö5Ö<5ÖÕ5Ö°/Ö /Ö 4ÖÈ$$If–!vh5Ö<5ÖÕ5Ö°#v<#vÕ#v°:V –l t¯Ö0    öö5Ö<5ÖÕ5Ö°/Ö /Ö 4ÖÈ$$If–!vh5Ö<5ÖÕ5Ö°#v<#vÕ#v°:V –l t¯Ö0    öö5Ö<5ÖÕ5Ö°/Ö /Ö 4ÖÖ$$If–!vh5Ö<5ÖÕ5Ö°#v<#vÕ#v°:V –l t¯Ö0    öö5Ö<5ÖÕ5Ö°/Ö /Ö  /Ö 4ÖY$$If–!vh5Ö<5ÖÕ5Ö°#v<#vÕ#v°:V –l Ö@@@ t¯ÖÿíëÿÿíëÿÿíëÿÖ0    öö5Ö<5ÖÕ5Ö°/Ö /Ö  ÿ/Ö ÿ/Ö  /Ö /Ö ÿ/Ö ÿ4ÖpÖÿíëÿÿíëÿÿíëÿÖ$$If–!vh5Ö<5ÖÕ5Ö°#v<#vÕ#v°:V –l t¯Ö0    öö5Ö<5ÖÕ5Ö°/Ö /Ö ÿÿÿÿÿÿÿÿ/Ö 4ÖÈ$$If–!vh5Ö<5ÖÕ5Ö°#v<#vÕ#v°:V –l t¯Ö0    öö5Ö<5ÖÕ5Ö°/Ö /Ö 4ÖÈ$$If–!vh5Ö<5ÖÕ5Ö°#v<#vÕ#v°:V –l t¯Ö0    öö5Ö<5ÖÕ5Ö°/Ö /Ö 4ÖÈ$$If–!vh5Ö<5ÖÕ5Ö°#v<#vÕ#v°:V –l t¯Ö0    öö5Ö<5ÖÕ5Ö°/Ö /Ö 4ÖÈ$$If–!vh5Ö<5ÖÕ5Ö°#v<#vÕ#v°:V –l t¯Ö0    öö5Ö<5ÖÕ5Ö°/Ö /Ö 4ÖÖ$$If–!vh5Ö<5ÖÕ5Ö°#v<#vÕ#v°:V –l t¯Ö0    öö5Ö<5ÖÕ5Ö°/Ö /Ö  /Ö 4ÖÛ Dd £ æÜ w ðb² ð‰ c ð$€€A?¿ ÿ?3"ñ¿`¿€?ð€2ð% kkÜLñ¦Õ­¨U^iÿ  @`!ðù kkÜLñ¦Õ­¨U^iBP–¥p܈9Ç þxÚµÜ ŒTåðï›÷û…›®¥×;m`Å-, K¬uX°±«‚p:±q 1®ÒÐ ¡àcÓÖ1׎‘¬!tcŒnmK(±Û˜†ÑYcl(1ÆPck•¬Æ´5iJc }X¶ÿÿÙƒÞ;5ÇõËìãÏùÝsÆOðÎ|Z“4&ì,6&nþd þŠ`…mÂDñ˜ñ;ü,Úo'ÎKà³Ë÷æþböü*þÊSøe'Ì,¾3Ûh˜)T.›2Ë¥’™­ 3‰ÌdFYdLc#r%äúS^ˆ\¹iäªÈ±rÃÈ¡ÐÐrÈ—{›Fn¹1䯑Fn¹ä‘ëAÎA7‹¢S¸¸)m à.nqyX%3Ì 2cÈŒ#3ŒkØŽÜrƒÈõ ç ×@n¹*rcÈUF®ŒÜr%äz« 7‰ÜäF[„ÜFäJÈõ!—@n!A®Á†‘«J=4‹L™Íâï’d*ÈL®:5b8¸Jc£áàÊC}†ƒ+•ò @nšOr jU8öÉ¡ V‰CA¦1;Ãá"7Îá"7Êá"7Èá"çphÈÍrhÈM!ÓàÐá²×2‡a3³†©ŽOq¦2Úà0LypˆÃ0%§Ì&MƒCÆàª2Wá1¸2‡ŒÁ•8d ®1‰WAƒ«lDƒ+÷!‡Á•òŸ(äød`pUÔ¬ð‰ÀàÊ|"0¸êU™Df 2#È,2 ³¹r}È%[ˆ\¹iäªÈ±¾3Œ\¹ä0eÓƒÜ4r3È!7ŽÜ0r£È 7ˆ\rr³ü@nŠÈ5â{å‡dP­1C™qŠÈRDn"r»Dnš]"7†¯pu•avŠÜ;E®9tÛ˜DÝVGC·•†W?TîCÝ–šÍ›7›]»v™‰‰ søðaóÆoàiž•½2dM«dç'e¿wv~ñ¬’ÇöÌÏ?úo†8ßýݰÉð¹ GÌÕÖµ?¹ö‰c¯¶Ží¤y%tä#VøSšôÞ 5íÛ!O\…ÂX¸iï {"é(»öPØIG¡°>âÚ+#ŽH: …;"M{gÄIG¡Pˆ6m>ꉤ£PXuí`ÔIG¡ð:Öq(”t ÙXÓæbžH: …Xû¡PÒQ(ü!æÚ×bŽH: …íq×îˆ;"é(öÅ1±¸'’ŽBáòDÓ^–ðDÒQ(lO¸v4ሤ41±¤kIG$…š$&–ôDÒQ(üV–'’ŽBa2Õ´¦<‘t ÇR®}9判£P¸-íÚ­iG$…ÂÃé¦}$퉤£PX™iÚO$…­׎d‘t §±f¡PÒQ(,Ï6mÖIG¡ð"ÖQ(”t ÿͺöý¬#’ŽBaoε9G$…‘\Óþ&牤£PØ’oÚ›òžH: …½y×îÉ;")M BoÁµK ŽH: … ˜XÁIG¡p ë$J: …Þ¢k‘”&á9¬ç¡PÒQ(¼WÄÄŠžH: …Ý¥¦} ä‰¤£Px®äÚvÉIibN,àrDòSXm¿0×ÛK¼²vþ.hŸÜ!íÁúOèZóyñœ¿kjCkwlݲ͜¼£‚¯ãÑÔ‚ìõ'ïø –̲®— Û©xï±`õ§Fíaf7Ezçf?Ð r]Æ<#}ÚPè¢Mw}wç-ßáW©ù®Üµ9[ ŸÕÏ??ÔÏÇ_MjþjŽ…‰­]ÝkʺžsÕ}!ÒMÝG#R÷RÿºãÑnêÞ•º«üëÞë¦îŠ˜Ô]é_÷‹ñnêžž«»Â¿î‰®êKÝ~ÿº­D7u÷&¤îrÿº^²›ºU¹ÅXýæ%æ+>u¿‘ R73_·â~X»îê/÷š>s±Oížt7×ü¯yýê>ãúÔ}§«ºÓò’ËúKýë>•é¦îý©»Ê¿î²ÝÔ½>+uWú×ýz®›º_ÈIÝþuÏËwS÷ݹºýþußìªîÓy©»Ü¿îÏ ÝÔ½§ u—ù×ÝU R7;_÷Â"¶›£ÏÙ•RêßÇ..1wݲÞsT=÷ïâÑsþ.ûÐ+u³ \7ç‡kø¼ö1¯ Äæ£ÿ§Bai¸múÂ-‘t c‚BIG¡pýü}RS(#xn"5‘t ½‘¶Yi‰¤£P¸ëv(”t {Ðσèãv5…Âq¬(ªMŒÂIôs }̨)ÖEÛfm´%’ŽBáÆhÝ|+ZIG¡pë J: …çÐÏóèã šB!k›l¬%’ŽBaq¬n¾«‰¤£Pص %…Âèg7úØ©¦Pxë5(»Õ&Fá=ôówôñššBáòxÝ\¯‰¤£PØo›ñ–H: …ýXû PÒQ(´ÑÏ3ècŸšB!‘¨›T¢&’ŽBá¢DÛ”-‘t Û±F¡PRzö!4ÑÏ}ècTM¡ð Ö«PîS›…¿¢Ÿ¿¡WÕ —%ÛfM²%’ŽBas²nªÉšH: …Ÿ`=…’ŽBáWèç0úxLM¡KµM$ÕIG¡°(U7¦j"é(¾µ ŠH* …¢Ÿ{ÑÇ65…Â1¬—¡Ü«61 ¿ —Õ «Òu³:]IG¡°!Ý6×¥["é(Áz %…ÂÓèç—èãa5…‚ÉÔM(SIG¡ðÙLÛ|.ÓIG¡p+Ö-P(é(îA?w£[Ô /b½ånµ‰Qø#úù3úxIM¡ÐŸm›eÙ–H: …k²u3”­‰¤£P˜Àz %…ÂÙgÍSÙgDÒQžÄÄNc½i=©61 sus~®&’ŽBa ÖÍP(é(Ærmó½\K$…ÂQ¬#P(é(ÞF?o¡#j …¥ùºéË×DRºákù¶¹*ßIG¡°kJ: …ÇÑÏ!ô±GM¡p ë_P©MŒB±Ð6 -‘”^M€pÖP(é(î,ÔÍí…šHJ¯&@xë(”t ÇÑÏ úxAM¡Ð[l›ÅÅ–HJ¯ò@XW¬›µÅšHJ¯&@Ø5…’ŽBáú9ˆ>ÆÕ '±ÞƒrPmbr¥ºÉ”j"é(nUIG¡pbWM$å®pÓ^iÚõïN}ZåJ9“ųYŽHZ¯Šº6um!ꈤôZ’œÉâÙ,O$…Âq¬×¡¬‹jMŒB.ƳYŽHJûÂ~¬P²1­‰í—3Y<›å‰¤£PØoÚíqO$¥×øäLÏf9"i½ÊãÚË®½<ሤto\Îdñl–'’ŽB!‘lÚXÒIéµ$9“ųYŽHZ¯&¸öÖ+PÖ$µ&F!’ú‘¥îIGy4Õ´[ÓM{[Úû„sYŸVÙ*§¥xjÊIëî¨kWd\»2㈤£¬ÓR<5剤£P˜Å: åÖŒÖÄ(ôgyjÊIë.œkb½eyVkbGå´OMy"é(&rM»7牤t¯ONKñÔ”#’ŽBᦼk·ä‘”þYNKñÔ”'’Ò{á ,å ‚'’Ò=%9-ÅSSŽHZw\»¤Èåˆä§œyïýæüÝóûÌ#ršdÓºk6ðýÁ~ïøï¦ö¨ýñ\íõk7ø¿÷xŸ vjeî½ÇÏšwä Íòe®OÕ`gV:UŸŠ0×ï[5؉•NÕïG™[á[5Øy•NÕ«bÌ­ô­ì´J§ê‚8s«|«žèªêŒT½Ô·j°“*ªùm³Ú·j°s*ª;“Ì øV vJ¥SõŠsk|ª–öUó‹0wص›7¬Âþêõ©lÚCIÖ¾µ]ßÚûL°s5i¤ÓÁvï;]Uý]:Øî v¦¦Sõ§™`»7؉šNÕmÙ`»7ØyšNÕÕ¹`»7ØišNÕP>Øî}³«ª/åƒíÞ`'i:U*Û½ÁÎÑtªÞ\ ¶{ƒí‚Îû}ª›ÝlÚ£¿Ý;÷'“èüIÒ32™û3Å™ÿçWX~ú?(–è-Dd I$Ü ðb² ð c ð$€€A?¿ ÿ?3"ñ¿`¿€?ð€2ðww-é{Ây™vʵžÿS`Nƒ`!ðKw-é{Ây™vʵžpG@ƒZ¸a"þxÚ½› pTÕÇïîf?Þf÷Ý·oßnBXØ÷–-á+‰0Ѹ€P6PÓ HGǦ¢Œ…(!Ìš´ÊÚ˜Ò€‚Z¡ŽØˆ¶ãÇ´UœÁ¡Ž™ˆN+¥Í¨E`(ƒÅ¡H[FÁ™ôœ›}'„†bn oöæ¿ÿýÿî9ï޷˰ÏÁÆ\¯cÌÇŽ9üɃÃåð17<æ;QÁQÀÙZ¨¥|0:+´?è-Wá+ÏÀËN±~Pú³YÖ 55,›J±*W%“, I]gý)ðt€g"xêÀg,[ >|¥àL²|Yðuƒ¯|-˜¾ZðAPU%øÀŸŒ¯|‡Á×¾-à«_ø*Á7|1ðYàƒÉõCh'L®B³X“«‚@˜:ëÏað´€g xja÷‚¯|sÀŸ¾,øºÁW¾ð¥ÀW ¾$ø*Á§ƒ/¾ø:À7|uà‹ƒ¯|:øJÁç_¾, ¾‘Å‚'‰ÅÂ_]xRàé`ظšÎ:†Ke«6.YUʰqz²Oøºñ€šY)l Ö‰M,›žlÿal.ø¶`sÁ×€Íßl.ø,løú±iàëO›œ ÖšÄf°ìá~l«ÙÒ‰Í`©†,6ƒ%çTa3˜n%±H–Å&Cãj°Éи6—Ä&Cãtl24.Û>h\Mø q©jðAã’¥àƒÆé¸¢À‡'W™)<и$žhœy)ðt€g"xêÀgYV >|¥àó¯|Yðuƒ¯|-˜J-ø’à«t™ÅÀ× ¾ÃàkßðÕ‚¯|•à›¾ø,ðõãø:ñ|YðTáÖŠ?ÂiÙÃHÏ$‚¯‰à›ƒDðYX%øº±JðµÀo0»T-V ¾J¬|1ðAµÙðAµ5uàƒjSÕ g_•,T«°%K–°uëÖ±mÛ¶±Ý»w³ƒÂiî;zºÓÁ\ð8Cì|Eìw{燆ì|§x<å|þÂ+ƒ¿rU],€çÆ•Çz|Ûà |{x=o ÷øÚ¶gb»ó.`¹¾&yó´ÓÑ¥Ú‘(råP0Ï<a$I Ĭíá|«-Œ$9$œ¿=|n|› É¡ ¡§øt´¯øHIr(Hè*Á㈠I¢øÊ< ¼Ì³žyz|EY+¹Ì3OÛ¨,Õš$ÉZÉ•yæFe†Ù$H²VòF%f•yò­"’d­ä2ωñežsã‹IÖJ.óôoTúŠ›$ÉZÉ•®<šér”Ë]ËYÎéNÃy áCGa!­B³µ]š­!-²µ]![«Ð)O§<Ò*”¦<Ò2唡¼å‘V¥¼(å‘–) ¼Ê+¤¼BÊ#­b”­mekŸ_0 ;—CEÚA«h@ÓÔTN»I­Îiïª 9ÍÇÈimü9m9§ÍÐzsÚzeJtè(ìt* sÚÛ¾[sÚ_sNóûÚsÚfoWNûŽwWN{ßóaNÛêù$§%=®\_þ{„϶’¶‡´¹…¶ÖZH)£lmî([ÛCš«ˆòŠ(´¹£)o4åÅ(/Fy¤¹ÆPÞÊ#mîXÊKyqÊ‹Si.“òLÊ#Ͱ†ß¯ÎËì×®’IZ_ñ$­§8¥u•¤´¡û•]°_ìê(H87~_àÄøc$É¡ !ßÚˆYÇI 3ÌIÚ<3¥!I K5 h)A’CAÂz¾/ÐÀ$‡‚„Çérºz:«ÜÚb[ÛYlkÓ&ØÚÚ ¶ö9iÓ&ÚÚΉ”GÚÚI”7‰ò&SÞdÊ#mÚÊ›By¤­-±G]%W×­æfõæÛêGæ.õóAUÎ9AÂ?ͳj¿ù/A’CABКÊM«˜#I ÅÖø7­å‚$‡‚„ ëy¾Èú¥ É¡ a¦uœ×À$9$L·J´´5UC’ bÖ}Ú5Öƒ‚$‡‚„ÏÌ?jnëA’CAÂïÌq¡½fYIr(Hø‘¹>ôˆ¹IäPpy(TeþCäPp&~½®˜óu$É¡ áøÏõ}ñgI ÄOé;â_ ’ âóíñ…a$É¡ ay|[¸9¾UäP°:~$üãøA’CAÂOãIc{¼È@’ ~_n¼ÿ® É¡ áïñÆçñÇI cÍýF‰Ù+Hr(Hø¾©EV›ý‚$‡‚„çÌù‘ߘ3IåS~c$¬©‡æˆ|Ä+"r(H¸NûÐ(ÖÞ5$éš „Û´§´ö˜ É¡ ¡Yûž±B»YäP°Ye´h† É¡ á)m_¸MÛF’ ¶k÷åA’CAÂf-nÖŠIVÇáF­[¯ÕÞÑ‘$‡‚„EÚ½R»MäP0Vû$ä×þB’¤«%NòLh?Ï ’ vsèy$9$<ÌŸÕšù‹’äPPÇSZ _ Hr(HXÈ?åüG’ nàÏñ‰üW‚$‡‚„xŸÄ— ’,J¯âÓùµ¼DäPPËý|ïW‘$‡‚„þ‰ZÏ?R‘$‡‚„íü÷ê#üuA’tåBI}?%Hr(H8ÎUñõ‚$é,ŸYÍ "+ù”Ⱦ@Ò'%$|©~a|¦úI ›Õ^ã!õ IzGB©ºÉ0Õ§I ‡ƒ×ïç ’ ž ¾ÞÜF’ 2ÁkÂw§ ’ êƒkôÅÁFIr(HÈÛBw[CH’UK[hGð^mSp•†$9$ü-XÁß –s$É¡ ¡\=£ "I ?S¨«H’CAãŸù?UOú‘$‡‚„&^§ÜÎoW$‡‚„“üï~¾Ï‹$9”WÍÙ‘1Ö C±JŒó:I×d$´Y“Âk¬qa$É¡ á˜5Nÿ‹Ó‘$‡‚„™ +4!QB’¤ÿ³ÂOßÐÖ$â’äPðfb*!Q‘$‡‚„ßR÷&æ©H’CA©D}ðH’CAÂlj'{O$«–'o&úò_Hü5I²ÎK_~["š¿&1F$íJ ÌLÜéŸXåG’¬ýr§ÿ˜µKé³ÞR$kïïR²4e$9$ĬÕ>¿ÕìC’¬ÿI\í{Å|ÏûŒ¹ß‹$9”ã|zd«Zc¼¤þÐ8ÄçKzAÂVuAä%µ<‚$Y”‘£rAº’ov87\îÅfábªà¹ÙÝÜŠ|¡²ÈøWÌupgE2|cg1H;ÿÛ‡ççáëw¨uæa.æ_¯œ¾ áœõ¼ï€õ¢Ir(HøµÙë}Î<èEÒ×ïþ «Ë×eöy k½r½u‹ré+™áìuÚß}¶GagÚekí.[Sòl-gk½¤)n[kwSiiåy(ÏKy^Ê#MñQžòHK+”§PžŸòü”Gš’Oyù”GZš¾ÿÝNßÿV‚”¤<Ò•òTÊ#-Í)SžFy呦„(/Dy¤¥uÊÓ)/LyaÊ#M1(Ï <ÒÒÊ‹P^”ò¢”GšR@y4ê)\9†5t„kÈÖÚ]¶¦äÙZ:ÏÖzISܶÖî¦<ÒÒÊóPž—ò¼”Gšâ£<å‘–V(O¡·x+mŽ)ŽÉŽ‘ÙçÔ«¯ýR3®å4ãò‘ñ¬ÈHÏ8 flD¿rºfüòÀŒGf¾}Þ¥e#;ßÂÜšXZ†×‘o/ƒÏSM˜7ë.«Ž­lŠc'›ìØÆF²Ž ªœ:jùùu”K¯cVd¤ë[?KËpígêW,/™}ÓX Ìû>¶“áêßÉî‚ßÚ ª‹U30wîSàð5|åt ;SçîÁû¯]Âý‰þm˱$$If–!vh5Öó5Öf5ÖÕ5Ö¦5Ö; #vó#vf#vÕ#v¦#v; :V –l Ö @@@@@ t¯Ö2ÿíëÿÿíëÿÿíëÿÿíëÿÿíëÿÖ0    ö ö5Öó5Öf5ÖÕ5Ö¦5Ö; /Ö /Ö  ÿ/Ö ÿ/Ö  /Ö /Ö ÿ/Ö ÿ4ÖpÖ2ÿíëÿÿíëÿÿíëÿÿíëÿÿíëÿ$$If–!vh5Öó5Öf5ÖÕ5Ö¦5Ö; #vó#vf#vÕ#v¦#v; :V –l t¯Ö0    ö ö5Öó5Öf5ÖÕ5Ö¦5Ö; /Ö /Ö ÿ/Ö /Ö 4Ö$$If–!vh5Öó5Öf5ÖÕ5Ö¦5Ö; #vó#vf#vÕ#v¦#v; :V –l t¯Ö0    ö ö5Öó5Öf5ÖÕ5Ö¦5Ö; /Ö /Ö /Ö 4Ö$$If–!vh5Öó5Öf5ÖÕ5Ö¦5Ö; #vó#vf#vÕ#v¦#v; :V –l t¯Ö0    ö ö5Öó5Öf5ÖÕ5Ö¦5Ö; /Ö /Ö /Ö 4Ö$$If–!vh5Öó5Öf5ÖÕ5Ö¦5Ö; #vó#vf#vÕ#v¦#v; :V –l t¯Ö0    ö ö5Öó5Öf5ÖÕ5Ö¦5Ö; /Ö /Ö /Ö 4Ö$$If–!vh5Öó5Öf5ÖÕ5Ö¦5Ö; #vó#vf#vÕ#v¦#v; :V –l t¯Ö0    ö ö5Öó5Öf5ÖÕ5Ö¦5Ö; /Ö /Ö /Ö  /Ö 4ÖDdÃÈèèðd² ð c ð@AÁ¿ÿoc_logo_smallð‚2ðc+íqÅû8âBER£wZt«ÿ?pd`!ð7+íqÅû8âBER£wZt«&Î~¤öÿÿ¥Ìöÿÿ±ãðþxÚíÝ1nA€áq $Š4”tÉ=¸â0”# Rè9ÜÑ-kG”T~Þ}ïÍ÷‹ˆ(Dh=óeídg6‡ñfŒãݯ1ãÏϱöb};^—ëß·7_~zuzïíÍø?ÆÇwÆÓú‘oãñôéãÇr?žÖÏzXß<üô½?ÿÛ×ï‡qw;ÎoÿZ$I’$I’$I¹û<ÆóC¡H8)N „„“!á¤@H8)N „„“!á¤@H8)N „„“!áNÊ 'pRNH8A…“¼v’ïìDNÚQ”!% 'á¤ö¢ ¦pNÂI8á$œ„“pÂI8 'EÍfrK8U|ø´K¯^Á;ìCÆvÈ-àÛîaP+Tý>IωgH›(о~þè½ßû>Ë¿h”$Šý'ŠÓßág gLKà5ÑiÅVºZõŒ“€ú/ˆ…?̾»øÎqÛùˆøžG\;®KžãPºlÛdãjù˜6˜050sD^œ®eì 8\œ ®Á¹ÀUÁ!Q¹¼××××WWWW—gÃâ|$í`q$õ°ŒÅ•‘ËÃiPLLLLkXWW—góÀõÀ¹ààpUp6¸"8\œ® n\ ܸ 8\\\†çqÃàÜ šcs³ø5ÆÓ&6ÎíÔˆs¼ ±qv¹@lœagxàz<p0¹6…ûdSË`SÀx~ŸÍ×dsÁÕÙ\p%6œÅ¦óÙ4p0›†ȽÚly}ŸÍ ·Ùa3È©{lÙ¥2›A†es“ä±É0Îe“aœÃ&Ã8›M†q› ã¼68çÖÀÁ8§ÆÙp0ÎÈð' ƹÈéð `œÍƒ€qò9`Ú`ÀÔÀÌ‘Gp¸¸¸ 8\œ ®Á¹©‚³ÁÁÁeÊ‚ëëƒk€k‚«‚«ƒ+‚+Ë‚³Àù|€ëðÎSæƒ{å#`ÍësE0M®®ÎÁ•¸"8‹»×ã.Á5ð «sªÜ)¸"w . ÝzmpèÖ­C·N…xõe»ÝZZZ¢ÍÍMÚÚÚ¢n·Kûûû³<Ño)b¸.O~2xÞåÉŸzòUp=ÐÂújò‹s¬LõTÿ$R?ê©H}¤oχêª>©U}ÛÕïú¥H½3‹Ôou)%ïþ’;º)ÉòKJ2ßMI5JÉ dUiõ(u9â.L…*=PÛ΄±d¨L¨¯-‰…ÊT{cÅÜÁkÂ…ÊD5áD çn'Y=/±P™êÚ¸ÄDqÌ]”X¨LUÒ%&Šcr¯¨áw_c7T¨ÒÅ1ñàš%³ü#'NÞ̉»VN7s2…·s2™Ÿr2-Ý’ >¨d^Þ]ÉËßä%Ëý¼d¾œ—jZ²YUZ}›—¹Åçe–¢8&}´fe–­Yñ^”©~ž‘˜(æd–¢LTNÔp>áZ³â³(S;"1Q“¹‰2ÕTNb¢8&÷Š®!s[˜–YŠâØvfjŽRº¡ªÓWšíé…`¿Ç>@OÔnì~ðêAô?€¦®|vge•ßs˜‰O|8ùñã{Ó8€Îö~¾&4É8ƒ¿/á|s¢{7‰ÿ-hãæêòúÊ­å;ôö½öº¿â|Ý£ Vq†Æƒì‚ïM©üõ/7>¿ý)¿šˆ¾ux;òýáUÄè°O|Òôù¼UÆO/&Ž®rmd•]íp•£Õ.L½Xµ—ƒjÆ©˜~Xmív}ym´^x=®êÂôIz¬ea·V“8Zix£Õðy;Aµ½³OO­¶6RíøÞâó'q´tî/M?¬9úÿzÏŸãNr÷â‹TÕ£OÍîEÞ!¯_ý c¨÷Ôñ¹[³'ɽw6Êýþ• ·¡Fs‡»qœ´¡Ýx,ÚwåXðî3º@ßàent Subject_5\æ޳æ ToTable 3D effects 1m:V`jÖ#Öÿÿÿ…Öÿ†ÖÿjÖ#‚Ö€€€…Öÿ†ÖÿjÖ#Ôÿÿÿ…Öÿ†ÖÿjÖ#€Ö€€€…Öÿ†ÖÿjÖ.ÔÿÖÿ…Öÿ†ÖÿjÖ.Ôÿ‚Öÿ…Öÿ†ÖÿjÖ.€ÖÿÖÿ…Öÿ†ÖÿjÖ.€Öÿ‚Öÿ…Öÿ†Öÿ‡Ö ÀÀÀÿÿÿ`5…Ê5\…Ê5B* \`J ph€€…ÊB* `J ph€6³6 ToTable 3D effects 2Ý:VajÖ.@Ô€€€€Öÿÿÿ…Öÿ†ÖÿjÖ#‚Öÿÿÿ…Öÿ†ÖÿjÖ9Ôÿ€Öÿ‚Ö€€€…Öÿ†ÖÿjÖ…Öÿ†ÖÿjÖ…Öÿ†Öÿ‡Ö ÀÀÀÿÿÿˆ4a…Ê5\…Ê5\t³#t ToTable 3D effects 3÷:VbjÖ.@Ô€€€€Öÿÿÿ…Öÿ†ÖÿjÖ‡Ö ÀÀÀÿÿÿjÖ ‡Ö ÀÀÀÿÿÿjÖ#‚Öÿÿÿ…Öÿ†ÖÿjÖ9Ôÿ€Öÿ‚Ö€€€…Öÿ†ÖÿjÖ…Öÿ†ÖÿjÖ…Öÿ†Öÿˆ4‰4b:…ÊB*`Jphÿ…Ê B*`Jphÿ…Ê5\…Ê5\br³3b ToTable Classic 1ì:VcÖ0 ÿ ÿÿÿjÖ#‚Ö…Öÿ†ÖÿjÖ#Ô…Öÿ†ÖÿjÖ#€Ö…Öÿ†ÖÿjÖ…Öÿ†ÖÿjÖ…Öÿ†Öÿ‡Ö ÿÿc9…ÊB*`Jphÿ…Ê6]…Ê5\…Ê56\]šs³Cš ToTable Classic 2#:VdÖ0 ÿ ÿÿÿjÖ%…Öÿ†Öÿ‡Ö ÀÀÀÿÿÿjÖ#Ô…Öÿ†ÖÿjÖ0€Ö…Öÿ†Öÿ‡Ö €€ÿÿÿjÖ…Öÿ†ÖÿjÖ…Öÿ†ÖÿjÖ%…Öÿ†Öÿ‡Ö €€ÿÿÿ‡Ö ÿÿd:…Ê5\…ÊB*`Jphÿÿÿ…ÊB* `J ph€…Ê5\Tt³ST ToTable Classic 3Å:VeÖ0 œ<@ñÿ< NormalCJ_HmH sH tHP@P Heading 1$$ Æf!&d0@&a$5CJ`J@J Ú ¬ Heading 2$$ Æf!@&a$5CJHD@D ŒÚ ¬ Heading 3$ Æf!@&5CJ(D@D hN Heading 4$ Æf!@&5CJL@L Heading 5$$ Æf!@&a$ 6B*CJ 8@8 Heading 6$@&6:@: Heading 7$$@&a$D@D Heading 8 ¤ð¤<@& 6]aJN @N Heading 9 ¤ð¤<@&CJOJQJ^JaJDA@òÿ¡D Default Paragraph FontVi@óÿ³V  Table Normal :V ö4Ö4Ö laö (kôÿÁ(No List 4@ò4 Header  ÆàÀ!4 @4 Footer  ÆàÀ!0U@¢0 Hyperlink>*B*.)@¢!. Page NumberL>@2L Title$¤ð¤<@&a$5CJ@KHOJQJ@YR@  Document Map-D OJQJ2B@b2 Body TextCJ0K@0 Salutationl$@‚l Envelope Address!„@ „üÿ„ôÿ„ð&€+D¼/„^„@ OJQJ^JaJ2?@’2 Closing „à^„àJ%@¢J Envelope ReturnCJOJQJ^J®I@²® Message Headerg„8„Èû$d%d&d'd-DMÆ ÿÿNÆÿOÆÿPÆÿQÆÿ^„8`„ÈûOJQJ^JaJ<"< Caption ¤x¤x 5CJ\DT@ÒD Block Text„ „ ¤x]„ ^„ T,T Table of Authorities„ð„ÿ^„ð`„ÿ$L@$ Date8+8  Endnote Text CJ<[@< E-mail Signature!6@@"6 Signature "„à^„àre@2r #HTML Preformatted, vooraf opgemaakt#CJOJQJ^J:`@B: HTML Address$6]: : Index 1%„ð„ÿ^„ð`„ÿ: : Index 2&„à„ÿ^„à`„ÿ: : Index 3'„Єÿ^„Ð`„ÿ: : Index 4(„À„ÿ^„À`„ÿ:: Index 5)„°„ÿ^„°`„ÿ:: Index 6*„ „ÿ^„ `„ÿ:: Index 7+„„ÿ^„`„ÿ:: Index 8,„€„ÿ^„€`„ÿ:: Index 9-„p„ÿ^„p`„ÿH!@RH  Index Heading.5OJQJ\^J&& TOC 1/.. TOC 2 0„ð^„ð.. TOC 3 1„à^„à.. TOC 4 2„Ð^„Ð.. TOC 5 3„À^„À.. TOC 6 4„°^„°.. TOC 7 5„ ^„ .. TOC 8 6„^„.. TOC 9 7„€^„€L.L  TOA Heading8¤x5OJQJ\^JaJ4/@’4 List9„h„˜þ^„h`„˜þ82@¢8 List 2:„Є˜þ^„Ð`„˜þ83@²8 List 3;„8„˜þ^„8`„˜þ84@Â8 List 4<„ „˜þ^„ `„˜þ85@Ò8 List 5=„„˜þ^„`„˜þL#L Table of Figures>„à„ þ^„à`„ þ:0@ò: List Bullet ? & F >6@> List Bullet 2 @ & F>7@> List Bullet 3 A & F>8@"> List Bullet 4 B & F>9@2> List Bullet 5 C & F:1@B: List Number D & F>:@R> List Number 2 E & F>;@b> List Number 3 F & F><@r> List Number 4 G & F>=@‚> List Number 5 H & FBD@’B List ContinueI„h¤x^„hFE@¢F List Continue 2J„Фx^„ÐFF@²F List Continue 3K„8¤x^„8FG@ÂF List Continue 4L„ ¤x^„ FH@ÒF List Continue 5M„¤x^„l-ñÿâl  Macro Text"N Æ àÀ €` @ àOJQJ^J_HmH sH tH8^@ò8 Normal (Web)OaJ4O@4 Note HeadingP@Z@@ Plain TextQCJOJQJ^J<P@"< Body Text 2 Rdà¤x>Q@2> Body Text 3S¤xCJaJXM@aBX Body Text First IndentT„Ò¤x`„ÒCJHC@RH Body Text IndentU„h¤x^„hTN@QbT Body Text First Indent 2 V„Ò`„ÒRR@rR Body Text Indent 2W„hdà¤x^„hTS@‚T Body Text Indent 3X„h¤x^„hCJaJ>@’> Normal Indent Y„Ä^„ÄJJ@¢J SubtitleZ$¤<@&a$OJQJ^JaJ8²8  Comment Text[CJ:Â:  Footnote Text\CJFV@¢ÑF FollowedHyperlink >*B* ph€€H™âH Û,Î Balloon Text^CJOJQJ^JaJ@j±²@ ToComm   ÿÿjÖ…Öÿ†ÖÿjÖ0Ô …Öÿ†Öÿ‡Ö ÿÿÿÿÿÿjÖ0€Ö…Öÿ†Öÿ‡Ö €ÿÿÿ‡Ö ÀÀÀÿÿÿeQB* ph€…Ê5B*\`Jph…ÊB* `J ph€…Ê56B*\]`Jphÿÿÿu³c ToTable Classic 4û:VfÖ0  ÿÿjÖ…Öÿ†ÖÿjÖ0€Ö…Öÿ†Öÿ‡Ö ÿÿÿjÖ0€Ö…Öÿ†Öÿ‡Ö €ÿÿÿjÖ…Öÿ†ÖÿjÖ…Öÿ†Öÿ‡Ö ÿÿfX…Ê5\…ÊB* `J ph€…Ê56B*\]`Jphÿÿÿ…ÊB* `J ph€…Ê5\Rv³sR ToTable Colorful 1×:VgÖ0€€ €€ €€ €€ ÿÿÿjÖ%…Öÿ†Öÿ‡Ö €ÿÿÿjÖ%…Öÿ†Öÿ‡Ö ÿÿÿjÖ…Öÿ†ÖÿjÖ%…Öÿ†Öÿ‡Ö ÿÿÿ‡Ö €€ÿÿÿg<B*phÿÿÿ…Ê56\]…Ê56\]…Ê56\]Tw³ƒT ToTable Colorful 2Õ:VhÖ0ÿÿ ÿÿÿjÖ%…Öÿ†Öÿ‡Ö ÀÀÀÿÿÿjÖ…Öÿ†ÖÿjÖ0€Ö …Öÿ†Öÿ‡Ö €ÿÿÿjÖ…Öÿ†Öÿ‡Ö ÿÿÿÿÿh@…Ê56\]…Ê56B*\]`Jphÿÿÿ…Ê56\]4x³“4 ToTable Colorful 3Ý:ViÖ0ÀÀÀÿjÖ;Ö$‚Ö…Öÿ†Öÿ‡Ö €€ÿÿÿjÖ0€Ö…Öÿ†Öÿ‡Ö €€ÿÿÿjÖ%…Öÿ†Öÿ‡Ö ÿÿÿ‡Ö €€ÿÿÿi…Ê5B*\`Jphÿÿÿ´y³£´ ToTable Columns 1 :VjÖ0    ÿÿjÖ‡Ö ÿÿÿjÖ ‡Ö ÿÿÿÿÿjÖ…Öÿ†ÖÿjÖ…Öÿ†ÖÿjÖ…Öÿ†ÖÿjÖ#€Ö…Öÿ†ÖÿjÖ…Öÿ†ÖÿjÖ…Öÿ†Öÿ‰4jl5\…ÊB*`Jphÿ…Ê B*`Jphÿ…Ê5\…Ê5\…Ê5\…Ê5\…Ê5\…Ê5\–z³³– ToTable Columns 2Ú:VkjÖ‡Ö ÿÿÿjÖ ‡Ö ÿÿÿÿjÖ…Öÿ†ÖÿjÖ…Öÿ†ÖÿjÖ…Öÿ†ÖÿjÖ%…Öÿ†Öÿ‡Ö €ÿÿÿjÖ…Öÿ†ÖÿjÖ…Öÿ†Öÿ‰4k€5\…ÊB*`Jphÿ…Ê B*`Jphÿ…Ê5\…Ê5B*\`Jph…Ê5\…ÊB*`Jphÿÿÿ…Ê5\…Ê5\¢{³Ã¢ ToTable Columns 3ý:VlÖ0€€€€ÿ€jÖ‡Ö ÀÀÀÿÿÿjÖ ‡Ö ÿÿÿjÖ…Öÿ†ÖÿjÖ…Öÿ†ÖÿjÖ#Ô€…Öÿ†ÖÿjÖ%…Öÿ†Öÿ‡Ö €ÿÿÿjÖ…Öÿ†Öÿ‰4lh5\…ÊB*`Jphÿ…Ê B*`Jphÿ…Ê5\…Ê5\…Ê5\…ÊB*`Jphÿÿÿ…Ê5\|³Ó ToTable Columns 4‰:VmjÖ‡Ö €€ÿÿÿjÖ ‡Ö ÿÿÿjÖ…Öÿ†ÖÿjÖ…Öÿ†ÖÿjÖ%…Öÿ†Öÿ‡Ö ÿÿÿ‰4mL…ÊB*`Jphÿ…Ê B*`Jphÿ…Ê5\…Ê5\…ÊB*`Jphÿÿÿ`}³ã` ToTable Columns 5Î:VnÖ0€€€ €€€ €€€ €€€ ÿÀÀÀjÖ‡Ö ÀÀÀÿÿÿjÖ…Öÿ†ÖÿjÖ…Öÿ†ÖÿjÖ#Ô€€€…Öÿ†ÖÿjÖ#€Ö€€€…Öÿ†Öÿ‰4nV…ÊB*`Jphÿ…Ê B*`Jphÿ…Ê5\…Ê5\…Ê5\…Ê56\]0‘³ó0 ToTable Contemporary²:VoÖ0ÿÿÿÿÿÿÿÿÿÿjÖ%@…Öÿ†Öÿ‡Ö ÿÿÿjÖ%€…Öÿ†Öÿ‡Ö ÿÿÿjÖ%…Öÿ†Öÿ‡Ö ÿÿÿˆ4o<…Ê@B*`Jphÿ…Ê€B*`Jphÿ…Ê5B*\`Jphÿ®’³® To Table Elegant_:VpÖ0jÖ…Öÿ†Öÿ‡Ö ÿÿp…Ê;B*`Jphÿjš³j To Table Grid7:VqÖ0ÿÿÿÿÿÿqÆ~³#Æ To Table Grid 1z:VrÖ0jÖ…Öÿ†ÖÿjÖ…Öÿ†Öÿ‡Ö ÿÿr…Ê6]…Ê6]³3 To Table Grid 2»:VsÖ0ÿÿÿÿjÖ…Öÿ†ÖÿjÖ…Öÿ†ÖÿjÖ#Ô…Öÿ†ÖÿjÖ…Öÿ†Öÿ‡Ö ÿÿs,…Ê5\…Ê5\…Ê5\…Ê5\ú€³Cú To Table Grid 3­:VtÖ0  ÿjÖ…Öÿ†ÖÿjÖ…Öÿ†ÖÿjÖ0€Ö…Öÿ†Öÿ‡Ö ÿÿÿÿÿ‡Ö ÿÿt…Ê5\…Ê5\>³S> To Table Grid 4Å:VuÖ0ÿ ÿ jÖ…Öÿ†ÖÿjÖ0Ô…Öÿ†Öÿ‡Ö ÿÿÿÿÿjÖ0€Ö…Öÿ†Öÿ‡Ö ÿÿÿÿÿ‡Ö ÿÿuB…Ê5B*\`Jphÿ…Ê5B*\`Jphÿ…ÊB*`Jphÿ‚³c To Table Grid 5»:VvÖ0    jÖ…Öÿ†ÖÿjÖ…Öÿ†ÖÿjÖ#€Ö …Öÿ†ÖÿjÖ…Ö†Öÿ‡Ö ÿÿv…Ê5\…Ê5\$ƒ³s$ To Table Grid 6Æ:VwÖ0    ÿjÖ…Öÿ†ÖÿjÖ#Ô…Öÿ†ÖÿjÖ#€Ö…Öÿ†ÖÿjÖ…Ö†Öÿ‡Ö ÿÿw(…Ê5\…ÊB*`Jphÿ…Ê5\J„³ƒJ To Table Grid 7á:VxÖ0    jÖ…Öÿ†ÖÿjÖ…Öÿ†ÖÿjÖ#Ô…Öÿ†ÖÿjÖ#€Ö …Öÿ†ÖÿjÖ…Ö†Öÿ‡Ö ÿÿx25\…Ê5\…Ê5\…Ê5\…Ê5\ …³“  To Table Grid 8¢:VyÖ0€€€€€€jÖ…Öÿ†ÖÿjÖ…Öÿ†ÖÿjÖ%…Öÿ†Öÿ‡Ö €ÿÿÿ‡Ö ÿÿyH…Ê5B*\`Jphÿ…Ê5B*\`Jphÿ…Ê5B*\`Jphÿÿÿv†³£v To Table List 1ñ:VzÖ0€€ €€€€ €€ÿÿjÖ%@…Öÿ†Öÿ‡Ö ÀÀÀÿÿÿjÖ€…Öÿ†ÖÿjÖ#Ô…Öÿ†ÖÿjÖ0€Ö…Öÿ†Öÿ‡Ö ÀÀÀÿÿÿjÖ…Öÿ†Öÿˆ4zM…Ê@B*`Jphÿ…Ê€B*`Jphÿ…Ê56B* \]`J ph€…Ê5\p‡³³p To Table List 2ñ:V{Ö0ÿÿ€€€ ÿÿÿjÖ%@…Öÿ†Öÿ‡Ö ÿÿÿÿjÖ€…Öÿ†ÖÿjÖ#Ô…Öÿ†ÖÿjÖ0€Ö…Öÿ†Öÿ‡Ö €€€ jÖ…Öÿ†Öÿˆ4{G…Ê@B*`Jphÿ…Ê€B*`Jphÿ…Ê5B*\`Jphÿÿÿ…Ê5\ˆ³Ã To Table List 3«:V|Ö0 ÿ ÿÿjÖ#Ô …Öÿ†ÖÿjÖ#€Ö …Öÿ†ÖÿjÖ…Öÿ†Öÿ‡Ö ÿÿ|0…Ê5B* \`J ph€…Ê6B* ]`J ph€Æ‰³ÓÆ To Table List 4w:V}Ö0    ÿjÖ0€Ö …Öÿ†Öÿ‡Ö €€€ÿÿÿ‡Ö ÿÿ}…Ê5B*\`JphÿÿÿÒŠ³ãÒ To Table List 5…:V~Ö0ÿjÖ…Öÿ†ÖÿjÖ#€Ö …Öÿ†Öÿ‡Ö ÿÿ~…Ê5\…Ê5\‹³ó To Table List 6»:VÖ0ÿÿjÖ%@…Öÿ†Öÿ‡Ö ÿÿÿjÖ#‚Ö …Öÿ†ÖÿjÖ#€Ö …Öÿ†Öÿ‡Ö ÿÿÿˆ4…Ê5\…Ê5\ŽŒ³Ž To Table List 7:V€Ö0€ €€ €ÿjÖ%@…Öÿ†Öÿ‡Ö ÿÿÿjÖ%€…Öÿ†Öÿ‡Ö ÿÿÿÿÿjÖ…Öÿ†ÖÿjÖ…Öÿ†ÖÿjÖ#Ô€ …Öÿ†ÖÿjÖ0€Ö€ …Öÿ†Öÿ‡Ö ÀÀÀÿÿÿˆ4€>…Ê@B*`Jphÿ…Ê5\…Ê5\…Ê5\…Ê5\”³” To Table List 8:VÖ0ÿjÖ%@…Öÿ†Öÿ‡Ö ÿÿÿÿÿjÖ%€…Öÿ†Öÿ‡Ö ÿÿÿÿjÖ…Öÿ†ÖÿjÖ…Öÿ†ÖÿjÖ#Ô…Öÿ†ÖÿjÖ0€Ö…Öÿ†Öÿ‡Ö ÿÿÿÿÿˆ4D…Ê@B*`Jphÿ…Ê5\…Ê5\…Ê5\…Ê56\]Æ“³#Æ ToTable Professionall:V‚Ö0jÖ%…Öÿ†Öÿ‡Ö ÿÿÿ‡Ö ÿÿ‚…Ê5B*\`JphÿÊo³3Ê ToTable Simple 1:VƒÖ0€ ÿ€ ÿÿÿjÖ#Ô€…Öÿ†ÖÿjÖ#€Ö€…Öÿ†Öÿ‡Ö ÿÿƒrp³Cr ToTable Simple 2è:V„jÖ#Ö…Öÿ†ÖÿjÖ#‚Ö …Öÿ†ÖÿjÖ#Ô…Öÿ†ÖÿjÖ#€Ö …Öÿ†ÖÿjÖ#Ôÿ…Öÿ†ÖÿjÖ#Öÿ…Öÿ†Öÿ„O…Ê5\…Ê5\…Ê5B*\`Jphÿ…Ê5\…Ê5\…Ê5\¾q³S¾ ToTable Simple 3l:V…Ö0    ÿÿjÖ%…Öÿ†Öÿ‡Ö ÿÿÿ‡Ö ÿÿ……Ê5B*\`Jphÿÿÿp”³cp ToTable Subtle 1 :V†jÖ0@€Ö…Öÿ†Öÿ‡Ö €€ÿÿÿjÖ#Ö …Öÿ†ÖÿjÖ#‚Ö …Öÿ†ÖÿjÖ0Ô …Öÿ†Öÿ‡Ö €€ÿÿÿjÖ.Ô€Ö …Öÿ†ÖÿjÖ…Öÿ†ÖÿjÖ…Öÿ†Öÿˆ4†…Ê5\…Ê5\p•³sp ToTable Subtle 2:V‡Ö0ÿÿÿÿjÖ0Ö …Öÿ†Öÿ‡Ö €€ÿÿÿjÖ0‚Ö …Öÿ†Öÿ‡Ö €ÿÿÿjÖ#Ô …Öÿ†ÖÿjÖ#€Ö …Öÿ†ÖÿjÖ…Öÿ†ÖÿjÖ…Öÿ†Öÿ‡…Ê5\…Ê5\l›³ƒl To Table Theme7:VˆÖ0ÿÿÿÿÿÿˆ®–³“® To Table Web 1h:V‰Ö0ÿÿÿÿÿÿ3ÖjÖ…Öÿ†Öÿ‡Ö ÿÿ‰…ÊB*`Jphÿ®—³£® To Table Web 2h:VŠÖ0ÿÿÿÿÿÿ3ÖjÖ…Öÿ†Öÿ‡Ö ÿÿŠ…ÊB*`Jphÿ®˜³³® To Table Web 3h:V‹Ö0ÿÿÿÿÿÿ3ÖjÖ…Öÿ†Öÿ‡Ö ÿÿ‹…ÊB*`JphÿLþO¢ÁL Ú ¬Heading 3 Char5CJ(_HmH sH tH$6Gaz„›®ÀØ%=ARW\pƒ‡Œ‘¡­²¶ÃÇÒßäèøü$Íåþ§¿ØÝl„žŸ ¡¢£¤¥ÈžJÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿ1ÿÿÿÿ:ÿÿÿÿ;ÿÿÿÿ<ÿÿÿÿNÿÿÿÿZÿÿÿÿ ÿÿÿÿ ÿÿÿÿ7ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ1ÿÿÿÿ:ÿÿÿÿAÿÿÿÿ?ÿÿÿÿDÿÿÿÿNÿÿÿÿLÿÿÿÿGÿÿÿÿTÿÿÿÿWÿÿÿÿZÿÿÿÿdÿÿÿÿbÿÿÿÿ]ÿÿÿÿhÿÿÿÿsÿÿÿÿqÿÿÿÿl=ÿÿÿÿ' ÿÿÿÿ( ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ"ÿÿÿÿ#ÿÿÿÿ)ÿÿÿÿ(ÿÿÿÿ'ÿÿÿÿ&ÿÿÿÿÐÿÿÿÿÏÿÿÿÿÎÿÿÿÿÍÿÿÿÿÿÿÿÿ6ÿÿÿÿ7ÿÿÿÿ8ÿÿÿÿ9ÿÿÿÿ:ÿÿÿÿ;ÿÿÿÿ<ÿÿÿÿÿÿÿÿÞ) $6Gaz„›®ÀØ%=ARW\pƒ‡Œ‘¡­²¶ÃÇÒßäèøü$Íåþ§¿ØÝl„žŸ ¡¢£¤¥ÈË  !"#$%&'()*+,-./0123456789:;<=>ÿÿˆ´žJÿÿÿÿ/ÿÿÿÿZÿÿÿÿ¬ ­ ˆ‰Ÿ {|›œÚÛghà႟ ¢£‘’ÝÞžDŸDÆDÇDêDëDEE1E2EŸJO900$„4‹…0 O900$„T×È0 M900$„Œ×È0 O900$„ÌaÈ0 M900$„bÈ0 M90 0$„ ØÈ0 M900ü äšÔ0 O900ü ˆp×0 O900ü äšÔ0 O900ü äšÔ0 O900ü äšÔ0 O900ü äšÔ00O90 0$„„Œ…˜0€€¸RÄ O900$„ÌÙȘ0€€¸RÄ O900$„¶È˜@0€€¸RÄ O900$„P¶È˜@0€€¸RÄ O90"0$„À¶È˜0€€¸RÄ O90&$„œ‡ñ˜0€€¸RÄ O900ü  !;TUV_‡ˆ´ÅÆËÐ×ãäèñ%7`…†Š‹Äå $-?dŽ»¼ÀÉÛò )CDHQc‡ˆŒ•§ÉÊÎ×é  $-?eޏ¹º½ÊËtu£³ÁÕÖ|}~ˆ­Äê;w·è  D z ” ¨ « ´ µ É Ó Ø à ì í ö ú ÿ ‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÚýÿÿÿÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ   ) „ … † ¥ ª ° º Æ Ç Ð Ò Ø å æ ï ñ ÷    & 9 : C E K ^ _ h j p † ‡ ’ ™ ¬ ­ µ · ½ Ð Ñ Ú Ü â     * + 4 6 = Z [ e g n † ‡ ˆ  Mglr|ˆ‰“•›³´¾ÀÇàáìîõ "(?@JLSklwy€Ÿ ¡™š689:“žŸÕ /0>?ož·ÐÑÓÝÞñöþ $&)IJQVX[{|€…‡Š›œ ¥§©»¼ÀÅÇÉÚÛÞãåçøùü12JlmµÉÊËâèïûüþ@ghjm‘¸àáåèñò)*+CIP\]ac‚„†Ä!89KLMdjq}~‚„Ÿ ²³´ËÑØäåçé4579MNPRefhj©ª®°¹º¼¾y–©ª¬®Ö0KLNPcƒ¢£¥§¼3_‘’–˜¡¢¤¦ÁÜ÷øúü„¤ÉÝÞðñòjmwx‘’Ÿ   Ò"Ó"Ô"å"æ"!#9#P#^#u#v#˜#™#¬#%&&á&â&ã&'Ä(Å(M)N)***0*×+Ø+|,},h.i.j.|.@/A/B/\/]/y/X2Y2{2|2}2”2ý34 44¬4ø4ù4ú455Ò5Ó5Ô5ð5ñ5+8,8I8J8[:\:^:_:j:l:q:r:s::‚:‰:Š:‹:•:–:œ::ž:©:ª:°:±:²:¼:½:Ã:Ä:Å:Æ:à:á:L<N<c<d<e<o<p<‘<’<´<É<Ê<Ë<Ù<ð<=/=:=Y=o=p=q={=Ë=ú=.>h>—>Ë>Ì>Î>{?|?‡?ˆ?·?¸?Í?ñ?ò?ó?@@7@V@l@‹@ª@É@è@ý@>ASATAUA_A¯AÞAB?BnB¢BñB CRCTCUCDD D!D"D?D@DKDRD^DcDrDsDyD‡D‹D‘DžDŸD¦D´D·D½DÆDÇDÈDÖDÙDßDêDëDòDüDÿDEEEEE E'E1E2E3EpEqEÒEÓEÔEæEçE÷EøE F FFFF4F5F6FMFNFRFSFWFXFYFZF[FnFoFF‚F“F”F•FœF«F¬FØFÙFìFíFøFùFGGGGG%G&G*G+G/G0GCGDGVGWGZG[G_G`GdGeGjGtGuG€GG…G†G‰GŠGG–G—GšG›G¥G¦G²G³G·G¸G»G¼GÁGËGÌGÏGÐGÔGÕGØGÙGáGïGðGñGòGóG÷GøG H¡H¸H¹HÑHÒHÖH×HzI{I’I“I«I¬I°I±I?J@JWJXJpJqJrJsJtJuJvJwJxJyJ›JœJŸJ0€€€˜0€€˜0€˜0€˜0€˜0€˜0€˜0€˜0€€H0€˜0€‡H0€˜0€´©0€´ ©0€´ ©0€´ ©0€´ ™0€´ ©0€´ ©0€´ ©0€´ ©0€´ ™0€´ ©0€´ ©0€´ ©0€´ ©0€´©0€´ ™0€´ ©0€´ ©0€´ ©0€´ ©0€´© 0€´© 0€´© 0€´ ™0€´ ©0€´ ©0€´ ©0€´ ©0€´©0€´©0€´ ™0€´ ©0€´ ©0€´ ©0€´ ©0€´©0€´ ™0€´ ©0€´ ©0€´ ©0€´ ©0€´ ™0€´ ©0€´ ©0€´ ©0€´ ©0€´ ™0€´ ©0€´ ©0€´ ©0€´ ©0€´ ™0€´ ©0€´ ©0€´ ©0€´ ©0€´©0€´ ™0€´ ©0€´ ©0€´ ©0€´ ©0€´€©0€´©0€´ ™0€´ ˜0€´ø€0€€0€º˜0€½˜0€½˜0€½˜0€½˜ 90€½˜ 0€½˜ 0€½˜0€½˜0€½˜0€½˜0€½˜0€½(0€½˜ 0€˜ 0€˜ 0€˜ 0€˜ 0€˜ 0€˜ 0€˜ 0€˜ 0€˜ 0 €˜ 0 €˜ 0 €˜ 0 €˜ 0 €0€€0€¨ ˜0€« (0€« ©0€µ  ©0€µ  ©0€µ  ©0€µ  ™0€µ  ©0€µ  ©0€µ  ©0€µ  ©0€µ  ™0€µ  ˜0€µ 80€µ ˜0€ (0€« (0€« (0€« ©0€†  ©0€†  ©0€†  ©0€†  ™0€†  ©0€†  ©0€†  ©0€†  ©0€†  ™0€†  ©0€†  ©0€†  ©0€†  ©0€†  ™0€†  ©0€†  ©0€†  ©0€†  ©0€†  ™0€†  ©0€†  ©0€†  ©0€†  ©0€†  ™0€†  ©0€†  ©0€†  ©0€†  ©0€†  ™0€†  ©0€†  ©0€†  ©0€†  ©0€†  ™0€†  ©0€†  ©0€†  ©0€†  ©0€†  ™0€†  ©0€†  ©0€†  ©0€†  ©0€†  ™0€†  ©0€†  ©0€†  ©0€†  ©0€†  ™0€†  ©0€†  ©0€†  ©0€†  ©0€†  ™0€†  ©0€†  ©0€†  ©0€†  ©0€†  ™0€†  ˜0€† ˜0€† ˜0€† (0€« ©0€M ©0€M ©0€M ©0€M ™0€M ©0€M ©0€M ©0€M ©0€M ™0€M ©0€M ©0€M ©0€M ©0€M ™0€M ©0€M ©0€M ©0€M ©0€M ™0€M ©0€M ©0€M ©0€M ©0€M ™0€M ©0€M ©0€M ©0€M ©0€M ™0€M ©0€M ©0€M ©0€M ©0€M ™0€M ˜0€M˜0€M˜0€M˜0€M˜0€M˜0€M˜0€M˜0€M˜0€M˜0€M˜0€M˜0€M˜0€M˜0€M˜0€M˜0€M˜0€M˜0€M˜0€M˜0€M˜0€M˜0€M0€€0€Ñ˜0€Ó(0€Ó©0€Þ ©0€Þ ©0€Þ ©0€Þ ©0€Þ ™0€Þ ©0€Þ ©0€Þ ©0€Þ ©0€Þ ©0€Þ ™0€Þ ©0€Þ ©0€Þ ©0€Þ ©0€Þ ©0€Þ ™0€Þ ©0€Þ ©0€Þ ©0€Þ ©0€Þ ©0€Þ ™0€Þ ©0€Þ ©0€Þ ©0€Þ ©0€Þ ©0€Þ ™0€Þ ©0€Þ ©0€Þ ©0€Þ ©0€Þ ©0€Þ ™0€Þ ©0€Þ ©0€Þ ©0€Þ ©0€Þ ©0€Þ ™0€Þ ©0€Þ ©0€Þ ©0€Þ ©0€Þ ©0€Þ ™0€Þ ˜0€Þ˜0€Þ(0€Ó˜0€80€˜0€2˜0€2˜0€2˜0€2˜0€2˜0€2˜0€280€©0€Ë ©0€Ë ©0€Ë ™0€Ë ©0€Ë ©0€Ë ©0€Ë©0€Ë©0€Ë ™0€Ë ©0€Ë ©0€Ë ©0€Ë©0€Ë©0€Ë ™0€Ë ©0€Ë ©0€Ë ©0€Ë ™0€Ë ˜0€Ë˜0€Ë˜0€Ë˜0€Ë˜.0€Ë80€©0€+ ©0€+ ©0€+ ™0€+ ©0€+ ©0€+ ©0€+ ™0€+ ©0€+ ©0€+ ©0€+©0€+©0€+©0€+ ™0€+ ˜0€+˜0€+˜0€+80€©0€M ©0€M ©0€M ™0€M ©0€M ©0€M ©0€M ™0€M ˜0€M˜0€M˜0€M80€©0€´ ©0€´ ©0€´ ™0€´ ©0€´ ©0€´ ©0€´ ™0€´ ©0€´ ©0€´ ©0€´ ™0€´ ©0€´ ©0€´ ©0€´ ™0€´ ©0€´ ©0€´ ©0€´ ™0€´ ©0€´ ©0€´ ©0€´ ™0€´ ©0€´ ©0€´ ©0€´ ™0€´ ©0€´ ©0€´ ©0€´ ™0€´ ˜0€´˜0€´˜0€´80€©0€y ©0€y ©0€y ™0€y ©0€y ©0€y ©0€y©0€y©0€y©0€y ™0€y ©0€y ©0€y ©0€y©0€y©0€y ™0€y ©0€y ©0€y ©0€y©0€y© 0€y© 0€y©0€y ™0€y ©0€y ©0€y ©0€y ™0€y ©0€y ©0€y ©0€y©0€y©0€y ™0€y ©0€y ©0€y ©0€y©0€y© 0€y© 0€y ™0€y ˜0€y˜0€y˜0€y˜0€y0€€0€j˜0€m(0€m˜0€x˜0€x˜0€x˜0€x˜0€x˜0€x(0€m˜0€Ô"˜0€Ô"˜ 0€Ô"˜ 0€Ô"˜ 0€Ô"˜ 0€Ô"˜0€Ô"˜0€Ô"˜0€Ô"80€Ô"˜0€™#˜0€™#˜0€™#˜0€™#˜0€™#˜0€™#80€Ô"˜0€ã&˜0€ã&˜0€ã&˜0€ã&˜0€ã&˜0€ã&˜0€ã&80€Ô"˜0€*˜0€*˜0€*˜0€*˜0€*˜0€*˜0€*80€Ô"˜0€j.˜0€j.˜0€j.(0€m˜0€B/80€B/˜0€]/˜0€]/˜0€]/80€B/80€B/80€B/˜0€}20€€0€ý3˜0€4˜0€4˜0€4˜0€4˜0€4(0€4˜0€ú4˜0€ú4˜0€ú4˜0€ú4(0€4˜0€Ô5˜0€Ô5˜0€Ô5(0€4˜0€,8˜0€,8˜0€,8˜0€,8˜0€,8˜0€,8˜0€,8˜0€,8˜0€,8˜0€,8˜0€,8˜0€,8˜0€,8˜0€,8˜0€,8˜0€,8˜0€,8˜0€,8˜0€,8˜0€,8˜0€,8˜0€,8˜0€,8˜0€,8˜0€,8˜0€,8˜0€,8˜0€,8˜0€,8˜0€,8˜0€,8(0€4˜0€Æ:˜0€Æ:0€€0€L<˜0€N<˜0€N<(0€N<˜0€e<˜0€e<˜0€e<˜0€e<˜0€e<˜0€e<˜0€e<˜0€e<˜ 0€e<˜ 0€e<˜ 0€e<˜ 0€e<˜ 0€e<˜ 0€e<˜0€e<˜0€e<˜0€e<˜ 0€e<˜0€e<˜ 0€e<˜0€e<8˜0€e<˜ 0€e<˜0€e<˜0€e<˜0€e<˜0€e<(0€N<˜0€|?˜0€|?˜0€|?˜0€|?˜0€|?˜0€|?˜0€|?˜0€|?˜ 0€|?˜ 0€|?˜ 0€|?˜ 0€|?˜ 0€|?˜ 0€|?˜ 0€|?˜ 0€|?˜ 0€|?˜ 0 €|?˜ 0 €|?˜0€|?˜0€|?˜0€|?˜ 0€|?˜0€|?˜ 0€|?˜0€|?˜0€|?˜ 0€|?˜0€ñ>˜0€ñ>˜0€ñ>˜0€ñ>˜0€ñ>˜0€ñ>0€€0€wC˜0€ƒC˜0€ƒC˜0€ƒC˜0€ƒC©0€ƒC ©0€ƒC ©0€ƒC ©0€ƒC ©0€ƒC ™0€ƒC ©0€ƒC ©0€ƒC ©0€ƒC ©0€ƒC ©0€ƒC ™0€ƒC ©0€ƒC ©0€ƒC ©0€ƒC ©0€ƒC ©0€ƒC ™@0€ƒC ©0€ƒC ©0€ƒC ©0€ƒC ©0€ƒC ©0€ƒC ™@0€ƒC ©0€ƒC ©0€ƒC ©0€ƒC ©0€ƒC ©0€ƒC ™@0€ƒC ©0€ƒC ©0€ƒC ©0€ƒC ©0€ƒC ©0€ƒC ™0€ƒC ˜0€€ø€˜@0€€ø€˜@0€€€˜@0€€ø€˜@0€€0$ø†˜0€€˜0€€€˜0€€˜0€€€˜0€€˜0€€€˜0€€˜0€€€˜0€€˜0€€˜0€€€˜0€€˜0€€˜0€€€˜0€€@˜0€€˜0€€˜0€€€˜0€€˜0€€˜0€€˜0€€˜0€€€˜0€€˜0€€€˜0€€˜0€€€˜0€€˜0€€˜0€€˜0€€€˜0€€˜0€€€˜0€€@˜0€€€˜0€€˜0€€€˜0€€˜0€€€˜0€€˜0€€€˜0€€˜0€€˜0€€€˜0€€˜0€€€˜0€€˜0€€€˜0€€˜0€€€˜0€€˜0€€€˜0€€˜0€€€˜0€€˜0€€€˜0€€˜0€€€˜0€€˜0€€˜0€€€˜0€€˜0€€€˜0€€˜0€€€˜0€€˜0€€€˜0€€˜0€€˜0€€€˜0€€@˜0€€€˜0€€˜0€€€˜0€€˜0€€€˜0€€˜0€€€˜0€€˜0€€€˜0€€˜0€€˜0€€€˜0€€˜0€€€˜0€€˜0€€€˜0€€˜0€€€˜0€€˜0€€˜0€€€˜0€€€˜0€€€˜0€€€˜0€€˜0€€€˜0€€˜0€€€˜0€€˜0€€€˜0€€@˜0€€€˜0€€˜0€€€˜0€€˜0€€€˜0€€˜0€€€˜0€€˜0€€€˜0€€˜0€€€˜0€€˜0€€€˜0€€˜0€€€˜0€€˜0€€€˜0€€€˜0€€€˜0€€€˜0€€€˜0€€€˜0€€€˜0€€€˜0€€€˜0€€€˜0€€€˜€€ž‘÷0 !;TUV_‡ˆ´ÅÆËÐ×ãäèñ%7`…†Š‹Äå $-?dŽ»¼ÀÉÛò )CDHQc‡ˆŒ•§ÉÊÎ×é  º½ÊËtu£³ÁÕÖ|}~ˆ­Äê;w·è  D z ” ¨ « ´ µ É Ó Ø à ì í ö ú ÿ    ) „ … † ¥ ª ° º Æ Ç Ð Ò Ø å æ ï ñ ÷    & 9 : C E K ^ _ h j p † ‡ ’ ™ ¬ ­ µ · ½ Ð Ñ Ú Ü â     * + 4 6 = Z [ e g n † ‡ ˆ  Mglr|ˆ‰“•›³´¾ÀÇàáìîõ "(?@JLSklwy€Ÿ ¡™š689:“žŸÕ /0>?ož·ÐÑÓÝÞñöþ $&)IJQVX[{|€…‡Š›œ ¥§©»¼ÀÅÇÉÚÛÞãåçøùü12JlmµÉÊËâèïûüþ@ghjm‘¸àáåèñò)*+CIP\]ac‚„†Ä!89KLMdjq}~‚„Ÿ ²³´ËÑØäåçé4579MNPRefhj©ª®°¹º¼¾y–©ª¬®Ö0KLNPcƒ¢£¥§¼3_‘’–˜¡¢¤¦ÁÜ÷øúü„¤ÉÝÞðñòjmwx‘’Ÿ   Ò"Ó"Ô"å"æ"!#9#P#^#u#v#˜#™#¬#%&&á&â&ã&'Ä(Å(M)N)***0*×+Ø+|,},h.i.j.|.@/A/B/\/]/y/X2Y2{2|2}2”2ý34 44¬4ø4ù4ú455Ò5Ó5Ô5ð5ñ5+8,8I8J8[:\:^:_:j:l:q:r:s::‚:‰:Š:‹:•:–:œ::ž:©:ª:°:±:²:¼:½:Ã:Ä:Å:Æ:à:á:L<N<c<d<e<o<p<‘<’<´<É<Ê<Ë<Ù<ð<=/=:=Y=o=p=q={=Ë=ú=.>h>—>Ë>Ì>Î>{?|?‡?ˆ?·?¸?Í?ñ?ò?ó?@@7@V@l@‹@ª@É@è@ý@>ASATAUA_A¯AÞAB?BnB¢BRCTCUCDD D!D"D@DKDRD^DcDrDsDyD‡D‹D‘DžDŸD¦D´D·D½DÆDÇDÈDÖDÙDßDêDëDòDüDÿDEEEEE E'E1E2E3EÒEŸJ 0€€€š0€€š0€š0€š0€š0€š0€š0€š0€J0€š0€ŒJ0€š0€¹«0€¹ «0€¹ «0€¹ «0€¹ ›0€¹ «0€¹ «0€¹ «0€¹ «0€¹ ›0€¹ «0€¹ «0€¹ «0€¹ «0€¹«0€¹ ›0€¹ «0€¹ «0€¹ «0€¹ «0€¹« 0€¹« 0€¹« 0€¹ “0€¹ «0€¹ «0€¹ «0€¹ «0€¹«0€¹«0€¹ ›0€¹ «0€¹ «0€¹ «0€¹ «0€¹«0€¹ ›0€¹ «0€¹ «0€¹ «0€¹ «0€¹ “0€¹ «0€¹ «0€¹ «0€¹ «0€¹ “0€¹ «0€¹ «0€¹ «0€¹ «0€¹ “0€¹ «0€¹ «0€¹ «0€¹ «0€¹«0€¹ ›0€¹ š0€¹ 0€€0€&š0€)š0€)š0€)š0€)š 90€)š 0€)š 0€)š0€)š0€)š0€)š0€)š0€)*0€)š 0€š€ 0€š€ 0€š€ 0€š 0€š 0€š€ 0€š 0€š€ 0€š€ 0 €š€ 0 €š 0 €š 0 €š 0 € 0€€0€w š0€z *0€z «0€„  «0€„  «0€„  «0€„  ›0€„  «0€„  «0€„  «0€„  «0€„  ›0€„  š0€„ :0€„ š0€é *0€z *0€z *0€z «0€U  «0€U  «0€U  «0€U  ›0€U  «0€U  «0€U  «0€U  «0€U  ›0€U  «0€U  «0€U  «0€U  «0€U  ›0€U  «0€U  «0€U  «0€U  «0€U  ›0€U  «0€U  «0€U  «0€U  «0€U  ›0€U  «0€U  «0€U  «0€U  «0€U  ›0€U  «0€U  «0€U  «0€U  «0€U  ›0€U  «0€U  «0€U  «0€U  «0€U  ›0€U  «0€U  «0€U  «0€U  «0€U  ›0€U  «0€U  «0€U  «0€U  «0€U  ›0€U  «0€U  «0€U  «0€U  «0€U  ›0€U  «0€U  «0€U  «0€U  «0€U  ›0€U  š0€U š0€U š0€U *0€z «0€ «0€ «0€ «0€ ›0€ «0€ «0€ «0€ «0€ ›0€ «0€ «0€ «0€ «0€ ›0€ «0€ «0€ «0€ «0€ ›0€ «0€ «0€ «0€ «0€ ›0€ «0€ «0€ «0€ «0€ ›0€ «0€ «0€ «0€ «0€ ›0€ š0€š0€š0€š0€š0€š0€š0€š0€š0€š0€š0€š0€š0€š0€š0€š0€š0€š0€š0€š0€š0€š0€ 0€€0€¯š0€±*0€±«0€¼ «0€¼ «0€¼ «0€¼ «0€¼ ›0€¼ «0€¼ «0€¼ «0€¼ «0€¼ «0€¼ ›0€¼ «0€¼ «0€¼ «0€¼ «0€¼ «0€¼ ›0€¼ «0€¼ «0€¼ «0€¼ «0€¼ «0€¼ ›0€¼ «0€¼ «0€¼ «0€¼ «0€¼ «0€¼ ›0€¼ «0€¼ «0€¼ «0€¼ «0€¼ «0€¼ ›0€¼ «0€¼ «0€¼ «0€¼ «0€¼ «0€¼ ›0€¼ «0€¼ «0€¼ «0€¼ «0€¼ «0€¼ ›0€¼ š0€¼š0€¼*0€±š0€ö:0€öš0€š0€š0€š0€š0€š0€š0€:0€ö«0€© «0€© «0€© ›0€© «0€© «0€© «0€©«0€©«0€© ›0€© «0€© «0€© «0€©«0€©«0€© ›0€© «0€© «0€© «0€© ›0€© š0€©š0€©š0€©š0€©š.0€©:0€ö«0€  «0€  «0€  ›0€  «0€  «0€  «0€  ›0€  «0€  «0€  «0€ «0€ «0€ «0€  ›0€  š0€ š0€ š0€ :0€ö«0€- «0€- «0€- ›0€- «0€- «0€- «0€- ›0€- š0€-š0€-š0€-:0€ö«0€” «0€” «0€” ›0€” «0€” «0€” «0€” ›0€” «0€” «0€” «0€” ›0€” «0€” «0€” «0€” ›0€” «0€” «0€” «0€” ›0€” «0€” «0€” «0€” ›0€” «0€” «0€” «0€” ›0€” «0€” «0€” «0€” ›0€” š0€”š0€”š0€”:0€ö«0€` «0€` «0€` ›0€` «0€` «0€` «0€`«0€`«0€`«0€` ›0€` «0€` «0€` «0€`«0€`«0€` ›0€` «0€` «0€` «0€`«0€`«€ 0€`«€ 0€`«0€` ›0€` «0€` «0€` «0€` ›0€` «0€` «0€` «0€`«0€`«0€` ›0€` «0€` «0€` «0€`«0€`«€ 0€`« 0€` ›0€` š0€`š0€`š0€`š0€` 0€€0€U š0€X *0€X š0€c š0€c š0€c š0€c š0€c š0€c *0€X š0€Ë$š0€Ë$š 0€Ë$š 0€Ë$š 0€Ë$š 0€Ë$š0€Ë$š0€Ë$š0€Ë$:0€Ë$š0€Ÿ&š0€Ÿ&š0€Ÿ&š0€Ÿ&š0€Ÿ&š0€Ÿ&:0€Ë$š0€é)š0€é)š0€é)š0€é)š0€é)š0€é)š0€é):0€Ë$š0€"-š0€"-š0€"-š0€"-š0€"-š0€"-š0€"-:0€Ë$š0€q1š0€q1š0€q1*0€X š0€I2:0€I2š0€d2š0€d2š0€36:0€I2:0€I2:0€I2š0€¬8 0€€0€,:š0€/:š0€/:š0€/:š0€/:š0€/:*0€/:š0€);š0€);š0€);š0€);*0€/:š0€<š0€<š0€<*0€/:š0€[>š0€[>š0€[>š0€[>š0€[>š0€[>š0€[>š0€[>š0€[>š0€[>š0€[>š0€[>š0€[>š0€[>š0€[>š0€[>š0€[>š0€[>š0€[>š0€[>š0€[>š0€[>š0€[>š0€[>š0€[>š0€[>š0€[>š0€[>š0€[>š0€[>š0€[>*0€/:š0€õ@š0€õ@ 0€€0€{Bš0€}Bš0€}B*0€}Bš0€”Bš0€”Bš0€”Bš0€”Bš0€”Bš0€”Bš0€”Bš0€”Bš 0€”Bš 0€”Bš 0€”Bš 0€”Bš 0€”Bš 0€”Bš0€”Bš0€”Bš0€”Bš 0€”Bš0€”Bš 0€”Bš0€”Bš0€”Bš 0€”Bš0€²:€š@0€`š@0€`š0€²:€*0€·=€š0€¸=€š0€¸=€š0€¸=€š0€¸=€š0€¸=€š0€¸=€š0€¸=€š0€¸=€š 0€¸=€š 0€¸=€š 0€¸=€š 0€¸=€š 0€¸=€š 0€¸=€š 0€¸=€š 0€¸=€š 0€¸=€š 0 €¸=€š 0 €¸=€š0€¸=€š0€¸=€š0€¸=€š 0€¸=€š0€¸=€š 0€¸=€š0€¸=€š0€¸=€š 0€¸=€M90‚2,„ðS*M90e2€š@0€`š@0€`0€O90E2€O90j2€O90j2€O90m2€O90E2 O90m2 O90m2 O90m2 O90E2 0 O90o2 O90o2 O90o2 O90o2 O90G2 0 Oy0q2 Oy0q2 Oy0q2 Oy0q2 Oy0I2 @0 Oy0u2 Oy0u2 Oy0u2 Oy0u2 Oy0M2 @0 Oy0{2 Oy0{2 Oy0{2 Oy0{2 Oy0S2 @0 Oy02 Oy02 Oy02 Oy02 Oy0W2 @0  0„t‡…G@H0JKL 0…Hù†>>               £Ê _%)1äAÛLÈM˜RžR*7<[pvyƒ‡ã …  »  C ‡ É  ¸ ³Éí„ÆÒ9^†¬Ð*Z†ˆ•à?kŸŸX›»Úømûgàñ\ 8!}!Ÿ!ä!"4"M"e"©"¹"#©#K$¢$‘%¡%÷%Ý&x'Å0ý;sBND—FHUKrLsLŸLÇLëLM2MMNO–OøOxRžR+-./012345689:;=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\]^_`abcdefghijklmnoqrstuwxz{|}~€‚„…†ˆ‰Š‹ŒR,_x…±³v#”#–#Y2w2y2žJ tÿ•€:”ÿ•„:”ÿ•„:”ÿ•Œ2;>ew”—£tÿ•€XÿŒ!tÿ•€¥ÃÅË:”ÿ•Œðôð  Ùß/ðX2ð$çšPÖ^2¢Ri€ÞBïøÿÉÿ‚2ð$É4³ðL ðç1)Û' ðMðç™1)r'ðð~¢ ð  “ ð6€Š ¿ÿ?¿ÿˆðÚ%Ì1)•ð2 ðð~ ð “ ð6€Š¿ÿ?¿ÿˆð–µçð7 ðð~ ð “ ð6€Š¿ÿ?¿ÿˆðHg#çð5 ðð~ ð “ ð6€Š¿ÿ?¿ÿˆð–vµ[ð: ðð~ ð “ ð6€Š¿ÿ?¿ÿˆð–?µ$!ð; ðð~ ð “ ð6€Š¿ÿ?¿ÿˆðïv$!ð7 ðð~ ð “ ð6€Š¿ÿ?¿ÿˆðHvg#$!ð2 ðð„B ð à ðH¿D¿ÐÑÿ?¿ÿˆðg#°L&°ð2ð„B ð à ðH¿D¿ÐÑÿ?¿ÿˆðg#±L&±ð0ðfÒ ð! s ð*¿ÿ?¿ÿˆð“H>ð6ðf" ð# s ð*¿ÿ?¿ÿˆðêH•ð5ð~B ð$ ³ ðB¿D¿Ñÿ?¿ÿˆð"ð"ð1ð~B ð%‚ ³ ðB¿D¿Ñÿ?¿ÿˆðžçžvð/ðfÒ ð& s ð*¿ÿ?¿ÿˆðµ“ï>ð+ðf" ð' s ð*¿ÿ?¿ÿˆðµêï•ð+ð~¢ ð1 “ ð6€Š1¿ÿ?¿ÿˆðç\ Û'ð, ððfÒ ð2 s ð*¿ÿ?¿ÿˆð\ –Êð(ðfÒ ð3 s ð*¿ÿ?¿ÿˆð\ “–>ð)ðf" ð4 s ð*¿ÿ?¿ÿˆð\ ê–•ð+ðx ð: ƒ ð0€ Š:¿ÿ?¿ÿð–Ÿ!µ„$ð ð ðx ð; ƒ ð0€ Š;¿ÿ?¿ÿð–ö$µÛ'ð ð ðx ð< ƒ ð0€ Š<¿ÿ?¿ÿðïŸ!Û'ð ð ð`Ò ð= c ð$¿ÿ?¿ÿð\ ¼"–g#ðð`" ð> c ð$¿ÿ?¿ÿð\ &–¾&ðð`Ò ð? c ð$¿ÿ?¿ÿðµ¼"ïg#ðð`" ð@ c ð$¿ÿ?¿ÿðµ&ï¾&ððrB ðF “ ð6¿D¿ÿ?¿ÿð.#ž.#ððxB ðGB £ ð<¿D¿Ñÿ?¿ÿðL&"L&ððxB ðH‚ £ ð<¿D¿Ñÿ?¿ÿðž-!ž.#ððrB ðI “ ð6¿D¿ÿ?¿ÿð"-!"L&ððxB ðL £ ð<¿D¿Ñÿ?¿ÿðµaHaðð~¢ ðN “ ð6€ ŠN¿¿ÿ?¿ÿð Û'˜1)ð- ð ðCð@ ð²*b, ðÛððð†¢ ðZ ƒ ð0€ ŠZ¿ÿ?¿ÿ"ñ¿€ðz*šòð ð ð†B ðW £ ð<¿D¿Îÿ?¿ÿ"ñ¿€ðBcB,ðð†B ðX £ ð<¿D¿Îÿ?¿ÿ"ñ¿€ð c ,ðð†B ðY £ ð<¿D¿Îÿ?¿ÿ"ñ¿€ðÒcÒ,ðð€B ð\ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðBò òð+ð€B ð_ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðzòBòð%ð€B ð` “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð òÒòð%ð†B ðd £ ð<¿D¿Îÿ?¿ÿ"ñ¿€ðšcš,ðð€B ðe “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðšHbHð#ð€B ðl “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðBº ºð%ð€B ðm “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðzºBºð"ð€B ðn “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðÒšð#ð€B ðo “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðšbð#ðbðf ðBñ G ðt3"ñ’¿€ðB YððrB ð]‚ “ ð6¿D¿ÿ?¿ÿðBñíGð6ðrB ðp “ ð6¿D¿ÿ?¿ÿðíñ ñð-ð€B ðu “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð Òð+ð€B ðv “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðzgBgð%ðnðf ð ñÒG ð|3"ñ’¿€ðÒšgððxB ðg £ ð<¿D¿ÿ?¿ÿˆðµGÒGð0ðxB ðx £ ð<¿D¿ÿ?¿ÿˆð ñµGð*ðpðt ð ñÒG ð} ðˆ3"ñ’¿€ðz•Bë ððrB ð~ “ ð6¿D¿ÿ?¿ÿðµGÒGð ðrB ð “ ð6¿D¿ÿ?¿ÿð ñµGð ðpðt ð ñÒG ð€ ðˆ3"ñ’¿€ðÒòšHððrB ð “ ð6¿D¿ÿ?¿ÿðµGÒGððrB ð‚ “ ð6¿D¿ÿ?¿ÿð ñµGððpðt ð ñÒG ðƒ ðˆ3"ñ’¿€ð ºÒððrB ð„ “ ð6¿D¿ÿ?¿ÿðµGÒGððrB ð… “ ð6¿D¿ÿ?¿ÿð ñµGðð€B ð† “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðB= =ð"ð€B ð‡ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðšgbgð"ð†B ð‰ £ ð<¿D¿Îÿ?¿ÿ"ñ¿€ðzcz,ðð€B ðŠ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð²òzòðð€B ð‹ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð²ºzºðð€B ðŒ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð²gzgðð€B ð “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð²“z“ððpðt ð‚ ðJ"F ðŽ ðˆ3"ñ’¿€ðz=B“ððrB ð‚ “ ð6¿D¿ÿ?¿ÿð‚ ð-!FððrB ð “ ð6¿D¿ÿ?¿ÿð-!ðJ"ðððpðt ð ñÒG ð‘ ðˆ3"ñ’¿€ð =Ò“ððrB ð’ “ ð6¿D¿ÿ?¿ÿðµGÒGððrB ð“ “ ð6¿D¿ÿ?¿ÿð ñµGðð€B ð” “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðÒ“š“ðð€B ð• “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðš“b“ðð€B 𘠓 ð6¿D¿ÿ?¿ÿ"ñ¿€ð²°z°ðð€B ð™ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðz°B°ððpðt ð‚ ðJ"F ðš ðˆ3"ñ’¿€ðBi ¿ððrB 𛂠“ ð6¿D¿ÿ?¿ÿð‚ ð-!FððrB 𜠓 ð6¿D¿ÿ?¿ÿð-!ðJ"ððð€B ð “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð iÒiðð€B ðž “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðÒjšjðð€B 🠓 ð6¿D¿ÿ?¿ÿ"ñ¿€ðšjbjðð€B ð  “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð²£z£ðð€B ð¡B “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð²ë %ë ðð€B 𢠓 ð6¿D¿ÿ?¿ÿ"ñ¿€ðBë ë ððpðt ð‚ ðJ"F ð£ ðˆ3"ñ’¿€ð £Òù ððrB 𤂠“ ð6¿D¿ÿ?¿ÿð‚ ð-!FððrB 𥠓 ð6¿D¿ÿ?¿ÿð-!ðJ"ððð€B 𦠓 ð6¿D¿ÿ?¿ÿ"ñ¿€ðÒ£š£ðð€B ð§ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðš£b£ðð€B 𨠓 ð6¿D¿ÿ?¿ÿ"ñ¿€ð²P$zP$ððpðt ð‚ ðJ"F ð© ðˆ3"ñ’¿€ðBú" P$ððrB 𪂠“ ð6¿D¿ÿ?¿ÿð‚ ð-!FððrB ð« “ ð6¿D¿ÿ?¿ÿð-!ðJ"ððð€B 𬠓 ð6¿D¿ÿ?¿ÿ"ñ¿€ðzP$BP$ðð€B ð­ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð ú"Òú"ððpðt ð ñÒG ð® ðˆ3"ñ’¿€ðÒú"šP$ððrB 㒹 ð6¿D¿ÿ?¿ÿðµGÒGððrB ð° “ ð6¿D¿ÿ?¿ÿð ñµGðð€B ð±      !"#$%&'()*+,-0/Š123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnpýÿÿÿqrstuvwxyz{|}~€ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðšP$bP$ððnðf ð‚ ,-!‚  ð½3"ñ’¿€ðzû$%Q&ððxB 𳂠£ ð<¿D¿ÿ?¿ÿˆð‚ ,-!‚ ððxB 𺠣 ð<¿D¿ÿ?¿ÿˆð‚ ,-!‚ ðð€B ð¾B “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð²û$zû$ðð€B ð¿B “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð²Q&zQ&ðð€B ðÀ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð%û$šû$ðð€B ðÁ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð%Q&šQ&ððpðt ð‚ ,-!‚  ðà ðˆ3"ñ’¿€ðšû$EQ&ððrB ðÄ‚ “ ð6¿D¿ÿ?¿ÿð‚ ,-!‚ ððrB ðÅ “ ð6¿D¿ÿ?¿ÿð‚ ,-!‚ ðð€B ðÆ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðEû$)û$ðð€B ðÇ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðEQ&)Q&ðð€B ðÈ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð²¨)z¨)ððpðt ð‚ ðJ"F ðÉ ðˆ3"ñ’¿€ðBR( ¨)ððrB ðÊ‚ “ ð6¿D¿ÿ?¿ÿð‚ ð-!FððrB ðË “ ð6¿D¿ÿ?¿ÿð-!ðJ"ððð€B ðÌ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðz¨)B¨)ðð€B ðÍ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð R(ÒR(ððpðt ð ñÒG ðÎ ðˆ3"ñ’¿€ðÒR(š¨)ððrB ðÏ “ ð6¿D¿ÿ?¿ÿðµGÒGððrB ðÐ “ ð6¿D¿ÿ?¿ÿð ñµGðð€B ðÑ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðš¨)b¨)ððpðt ð‚ ,-!‚  ðÒ ðˆ3"ñ’¿€ðBS*í©+ððrB ðÓ‚ “ ð6¿D¿ÿ?¿ÿð‚ ,-!‚ ððrB ðÔ “ ð6¿D¿ÿ?¿ÿð‚ ,-!‚ ððpðt ð‚ ,-!‚  ðÕ ðˆ3"ñ’¿€ðÒS*}©+ððrB ðÖ‚ “ ð6¿D¿ÿ?¿ÿð‚ ,-!‚ ððrB ð× “ ð6¿D¿ÿ?¿ÿð‚ ,-!‚ ðð€B ðØ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðíS*ÒS*ðð€B ðÙ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðí©+Ò©+ððÚðf ð}3-b‰. ðè3"ñ’¿€ð}S*b©+ððVðZ ð‚ ,-!‚  ðÚ ðˆð}3-(‰.ððrB ðÛ‚ “ ð6¿D¿ÿ?¿ÿð‚ ,-!‚ ððrB ðÜ “ ð6¿D¿ÿ?¿ÿð‚ ,-!‚ ððVðZ ð‚ ,-!‚  ðÝ ðˆð(3-Ó‰.ððrB ðÞ‚ “ ð6¿D¿ÿ?¿ÿð‚ ,-!‚ ððrB ðß “ ð6¿D¿ÿ?¿ÿð‚ ,-!‚ ððVðZ ð‚ ,-!‚  ðà ðˆðÓ3-~‰.ððrB ðá‚ “ ð6¿D¿ÿ?¿ÿð‚ ,-!‚ ððrB ðâ “ ð6¿D¿ÿ?¿ÿð‚ ,-!‚ ððVðZ ð‚ ,-!‚  ðã ðˆð~3-)‰.ððrB ðä‚ “ ð6¿D¿ÿ?¿ÿð‚ ,-!‚ ððrB ðå “ ð6¿D¿ÿ?¿ÿð‚ ,-!‚ ððrB ðæ “ ð6¿D¿ÿ?¿ÿð}3-b3-ððrB ðç “ ð6¿D¿ÿ?¿ÿð}‰.b‰.ðð8ðf ð²3-B‰. ð 3"ñ’¿€ð²S*B©+ððVðZ ð‚ ,-!‚  ðø ðˆð—3-B‰.ððrB ðù‚ “ ð6¿D¿ÿ?¿ÿð‚ ,-!‚ ððrB ðú “ ð6¿D¿ÿ?¿ÿð‚ ,-!‚ ððVðZ ð‚ ,-!‚  ðû ðˆðì3-—‰.ððrB ðü‚ “ ð6¿D¿ÿ?¿ÿð‚ ,-!‚ ððrB ðý “ ð6¿D¿ÿ?¿ÿð‚ ,-!‚ ððVðZ ð‚ ,-!‚  ðþ ðˆðA3-ì‰.ððrB ðÿ‚ “ ð6¿D¿ÿ?¿ÿð‚ ,-!‚ ððrB ð “ ð6¿D¿ÿ?¿ÿð‚ ,-!‚ ððVðZ ð‚ ,-!‚  ð ðˆð–3-A‰.ððrB ð‚ “ ð6¿D¿ÿ?¿ÿð‚ ,-!‚ ððrB ð “ ð6¿D¿ÿ?¿ÿð‚ ,-!‚ ððVðZ ð‚ ,-!‚  ð ðˆðë3-–‰.ððrB ð‚ “ ð6¿D¿ÿ?¿ÿð‚ ,-!‚ ððrB ð “ ð6¿D¿ÿ?¿ÿð‚ ,-!‚ ððrB ðB “ ð6¿D¿ÿ?¿ÿð²3-B3-ððrB ðB “ ð6¿D¿ÿ?¿ÿð²‰.B‰.ððx(ðn ð> 3 ¡%-6 ðƒ ðˆC"ñ‘’ððð~¢ ðT “ ð6€ŠT¿ÿ?¿ÿˆð? @'ð ðð~Ò ð  “ ð6€Š ¿ÿ?¿ÿˆð²3 ¶û ð= ðð~â ð  “ ð6€Š ¿ÿ?¿ÿˆð² ¶ŒðO ðð~B ð ³ ðB¿D¿Ñÿ?¿ÿˆð´û ´ ð6ðhð` ð´´îÑ ð# ð ˆð´Œî©ððx¢ ð ƒ ð0€Š¿ÿ?¿ÿð´´îÑð7 ððxB ð £ ð<¿D¿Ñÿ?¿ÿð´´´Ñð5ðRð` ð²Ñ¶b ð=# ð ˆð²©¶:ððxâ ð ƒ ð0€Š¿ÿ?¿ÿð²Ñ¶Eð6 ððbðZ ð´´îÑ ð ðˆð´Eîbððx¢ ð ƒ ð0€Š¿ÿ?¿ÿð´´îÑð4 ððxB ð £ ð<¿D¿Ñÿ?¿ÿð´´´Ñð4ðtð` ð²b¶G ð8# ð ˆð²:¶ðð~Ò ð “ ð6€Š¿ÿ?¿ÿˆ ð²b¶*ð7 ðð~B ð  ³ ðB¿D¿Ñÿ?¿ÿˆ ð´*´Gð8ðnðZ ð¶ bR ð‚ ðˆð¶ bRððxB ð4 £ ð<¿D¿ÿ?¿ÿˆð¶RbRð(ðxB ð5‚ £ ð<¿D¿ÿ?¿ÿˆðb bRð)ð~B ð6B ³ ðB¿D¿Ñÿ?¿ÿˆð¶ b ð)ð~¢ ð7 “ ð6€Š7¿ÿ?¿ÿˆðïê ðð) ððÎðZ ð²b° ð ðˆð²b°ðð~â ð “ ð6€Š¿ÿ?¿ÿˆð²¶“ð- ððnðZ ð¶bY ð€ ðˆð¶bYððxB ð. £ ð<¿D¿ÿ?¿ÿˆð¶YbYð+ðxB ð/‚ £ ð<¿D¿ÿ?¿ÿˆðbbYð.ð~B ð0B ³ ðB¿D¿Ñÿ?¿ÿˆð¶bð-ð~¢ ð1 “ ð6€Š1¿ÿ?¿ÿˆðïñðð, ððhð` ð´´îÑ ð9# ð ˆð´“î°ððx¢ ð: ƒ ð0€Š:¿ÿ?¿ÿð´´îÑð' ððxB ð; £ ð<¿D¿Ñÿ?¿ÿð´´´Ñð'ðRð` ð²Ñ¶b ð># ð ˆð²°¶A%ððxâ ð? ƒ ð0€Š?¿ÿ?¿ÿð²Ñ¶Eð( ððbðZ ð´´îÑ ð@ ðˆð´Eîbððx¢ ðA ƒ ð0€ŠA¿ÿ?¿ÿð´´îÑð( ððxB ðB £ ð<¿D¿Ñÿ?¿ÿð´´´Ñð(ðhð` ð²b¶G ðC# ð ˆð²A%¶&(ððxÒ ðD ƒ ð0€ŠD¿ÿ?¿ÿð²b¶*ð( ððxB ðE £ ð<¿D¿Ñÿ?¿ÿð´*´Gð(ð°ð` ð²FbØ! ðF# ð ˆð²%&b·-ððxâ ðG ƒ ð0€ŠG¿ÿ?¿ÿð²G¶» ð* ððVðZ ð¶bº ðH ðˆð¶FbððrB ðI “ ð6¿D¿ÿ?¿ÿð¶ºbºð*ðrB ðJ‚ “ ð6¿D¿ÿ?¿ÿðbbºð*ðxB ðKB £ ð<¿D¿Ñÿ?¿ÿð¶bð*ðx¢ ðL ƒ ð0€ŠL¿ÿ?¿ÿðïðºð* ððbðZ ð´´îÑ ðM ðˆð´» îØ!ððx¢ ðN ƒ ð0€ŠN¿ÿ?¿ÿð´´îÑð* ððxB ðO £ ð<¿D¿Ñÿ?¿ÿð´´´Ñð*ðxB ðQ £ ð<¿D¿ÿ?¿ÿˆð ã²ãð(ðxB ðR‚ £ ð<¿D¿ÿ?¿ÿˆð ã ê!ð)ð~B ðU ³ ðB¿D¿Ñÿ?¿ÿˆð ê!²ê!ð(ðhð` ð²b¶G ðV# ð ˆðîÔ.ò¹1ððxÒ ðW ƒ ð0€ŠW¿ÿ?¿ÿð²b¶*ð) ððxB ðX £ ð<¿D¿Ñÿ?¿ÿð´*´Gð)ðhð` ð²b¶G ðY# ð ˆðñA%õ"&(ððxÒ ðZ ƒ ð0€ ŠZ¿ÿ?¿ÿð²b¶*ð% ð ðxB ð[ £ ð<¿D¿Ñÿ?¿ÿð´*´Gð%ðÎðZ ðñ%&¡%·- ð ðˆðñ%&¡%·-ðð~â ð] “ ð6€#Š]¿ÿ?¿ÿˆðñ&(õ"š,ð ð#ðnðZ ðõ"%&¡%`* ð~ ðˆðõ"%&¡%`*ððxB ð_ £ ð<¿D¿ÿ?¿ÿˆðõ"`*¡%`*ððxB ð`‚ £ ð<¿D¿ÿ?¿ÿˆð¡%%&¡%`*ðð~B ðaB ³ ðB¿D¿Ñÿ?¿ÿˆðõ"%&¡%%&ðð~¢ ðb “ ð6€"Šb¿ÿ?¿ÿˆð.#ø(/%*ð ð"ðhð` ð´´îÑ ðc# ð ˆðóš,-!·-ððx¢ ðd ƒ ð0€!Šd¿ÿ?¿ÿð´´îÑð ð!ðxB ðe £ ð<¿D¿Ñÿ?¿ÿð´´´ÑððxB ðf £ ð<¿D¿ÿ?¿ÿˆð¶ê!óê!ð&ð~B ðg ³ ðB¿D¿Ñÿ?¿ÿˆðóê!óA%ð'ð~¢ ðh “ ð6€$Šh¿ÿ?¿ÿˆðï#"ð@#ð% ð$ð~â ðl “ ð6€'Šl¿ÿ?¿ÿˆðî¹1ò-6ð* ð'ðnðZ ðò¸/žó3 ð} ðˆðò¸/žó3ððxB ðn £ ð<¿D¿ÿ?¿ÿˆðòó3žó3ððxB ðo‚ £ ð<¿D¿ÿ?¿ÿˆðž¸/žó3ðð~B ðpB ³ ðB¿D¿Ñÿ?¿ÿˆðò¸/ž¸/ðð~¢ ðq “ ð6€&Šq¿ÿ?¿ÿˆð+‹2,¨3ð ð&ð~¢ ðs “ ð6€%Šs¿ÿ?¿ÿˆð´2îº3ð+ ð%ðxB ðu £ ð<¿D¿ÿ?¿ÿˆð´·-ó·-ð'ð~B ðv ³ ðB¿D¿Ñÿ?¿ÿˆðð·-ðÔ.ð%ðxB ðyB £ ð<¿D¿ÿ?¿ÿˆð> ó3îó3ð&ðxB ðz‚ £ ð<¿D¿ÿ?¿ÿˆð>  > ó3ð(ð~B ð{ ³ ðB¿D¿Ñÿ?¿ÿˆð>  ² ð(ð¤Cð@ ð 2+¡%‹/ ðÝððð†¢ ð# s ð*€.¿ÿ?¿ÿ#"ñ ¿`¿€ðbP+J"¦,ð ð.ð†¢ ð" s ð*€-¿ÿ?¿ÿ#"ñ ¿`¿€ð# 2+µˆ,ð ð-ð†¢ ð s ð*€,¿ÿ?¿ÿ#"ñ ¿`¿€ð ./%p/ð ð,ð†¢ ð s ð*€+¿ÿ?¿ÿ#"ñ ¿`¿€ð Ä,“ .ð ð+ð€B ð• “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð! ý,é ý,ðð€B ð— “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð" á-” á-ðð€B 𘂠“ ð6¿D¿ÿ?¿ÿ"ñ¿€ð” ý,Í á-ðð€B ð™ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðé ý," á-ðð€B ðš “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðÍ ý,? ý,ðð€B ð› “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð? ý,x á-ðð€B ð  “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð! S.> S.ðð€B ð¡ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð> S.w 7/ðð€B 𢠓 ð6¿D¿ÿ?¿ÿ"ñ¿€ðw 7/[ 7/ðð€B 𣂠“ ð6¿D¿ÿ?¿ÿ"ñ¿€ð[ S.” 7/ðð€B 𤠓 ð6¿D¿ÿ?¿ÿ"ñ¿€ð” S.x S.ððhðf ð †(f!j) ðª3"ñ’¿€ðx ý,Î á-ððxB 𜠣 ð<¿D¿ÿ?¿ÿˆð j)‚ j)ððxB ð‚ £ ð<¿D¿ÿ?¿ÿˆð‚ †(» j)ððxB ðž £ ð<¿D¿ÿ?¿ÿˆð» †(-!†(ððrB ð© “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ð« ðˆ3"ñ’¿€ðÎ ý,$á-ððrB 𬠓 ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ð­‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ð® “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB 㒹 ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ð° ðˆ3"ñ’¿€ð$ý,zá-ððrB ð± “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB 𲂠“ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ð³ “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ð´ “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ðµ ðˆ3"ñ’¿€ðzý,Ðá-ððrB ð¶ “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ð·‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB 𸠓 ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ð¹ “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ðº ðˆ3"ñ’¿€ðÐý,&á-ððrB ð» “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB 𼂠“ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ð½ “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ð¾ “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ð¿ ðˆ3"ñ’¿€ð&ý,|á-ððrB ðÀ “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ðÁ‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ð “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ðà “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ðÄ ðˆ3"ñ’¿€ð|ý,Òá-ððrB ðÅ “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ðÆ‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ðÇ “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ðÈ “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ðð€B ðÉ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðx S.± 7/ðð€B ðÊ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð± 7/7/ðð€B ðË‚ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðS.@7/ðð€B ðÌ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð@S.$S.ðð€B ðÍ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð$S.]7/ðð€B ðÎ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð]7/_7/ððÜðf ð_Û'µ¿( ðù3"ñ’¿€ð_S.µ7/ððrB ðÏ‚ “ ð6¿D¿ÿ?¿ÿð_Û'˜¿(ððrB ðÐ “ ð6¿D¿ÿ?¿ÿð˜Û'|Û'ððrB ðÑ “ ð6¿D¿ÿ?¿ÿð|Û'µ¿(ðð€B ðÒ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðµ7/a7/ððdðt ð †(f!j) ðÓ ðˆ3"ñ’¿€ðÒý,(á-ððrB ðÔ “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ðÕ‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ðÖ “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ð× “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ðØ ðˆ3"ñ’¿€ð(ý,~á-ððrB ðÙ “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ðÚ‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ðÛ “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ðÜ “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ðÝ ðˆ3"ñ’¿€ð~ý,Ôá-ððrB ðÞ “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ðß‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ðà “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ðá “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ðâ ðˆ3"ñ’¿€ðÔý,*á-ððrB ðã “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ðä‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ðå “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ðæ “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ðç ðˆ3"ñ’¿€ð*ý,€á-ððrB ðè “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ðé‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ðê “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ðë “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ðì ðˆ3"ñ’¿€ð€ý,Öá-ððrB ðí “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ðî‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ðï “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ðð “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ðñ ðˆ3"ñ’¿€ðÖý,,á-ððrB ðò “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ðó‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ðô “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ðõ “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððÜðf ð·Û' ¿( ðú3"ñ’¿€ðaS.·7/ððrB ðö‚ “ ð6¿D¿ÿ?¿ÿð·Û'ð¿(ððrB ð÷ “ ð6¿D¿ÿ?¿ÿððÛ'ÔÛ'ððrB ðø “ ð6¿D¿ÿ?¿ÿðÔÛ' ¿(ðð€B ðû “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð·7/ 7/ððêðt ð·Û' ¿( ðü ðˆ3"ñ’¿€ð S.c7/ððrB ðý‚ “ ð6¿D¿ÿ?¿ÿð·Û'ð¿(ððrB ðþ “ ð6¿D¿ÿ?¿ÿððÛ'ÔÛ'ððrB ðÿ “ ð6¿D¿ÿ?¿ÿðÔÛ' ¿(ðð€B ð “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðc7/¹7/ðð€B ð‚ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð¹S.ò7/ðð€B ð “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðòS.,S.ððdðt ð †(f!j) ð ðˆ3"ñ’¿€ð,ý,‚ á-ððrB ð “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ð‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ð “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ð “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ð ðˆ3"ñ’¿€ð‚ ý,Ø!á-ððrB ð  “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ð ‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ð  “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ð  “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ð  ðˆ3"ñ’¿€ðØ!ý,.#á-ððrB ð “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ð‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ð “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ð “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ðð€B ð “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð,S.e7/ðð€B ð “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðe7/$7/ðð€B ð “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð.#á- #á-ðð€B ð‚ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð #ý,Ù#á-ðð€B ð “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðÙ#ý,¡%ý,ðð€B ð‚ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð$S.K$7/ðð€B ð “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðK$S.¡%S.ðð†B ð £ ð<¿D¿Îÿ?¿ÿ"ñ¿€ða‰+a‹/ðð†B ð £ ð<¿D¿Îÿ?¿ÿ"ñ¿€ð„$‰+„$‹/ð*ð†B ð £ ð<¿D¿Îÿ?¿ÿ"ñ¿€ð> ‰+> ‹/ððŒB ð  ³ ðB¿D¿ÐÑÿ?¿ÿ"ñ¿€ð> 4,a4,ððŒB ð! ³ ðB¿D¿ÐÑÿ?¿ÿ"ñ¿€ða4,„$7,ðð¦’ðT ðï+…&g5 ðÜ#"ñ ‘ðððŒ¢ ð& ƒ ð0€2Š&¿ÿ?¿ÿ#"ñ ¿`¿€ðFï+.#E-ð ð2ðŒ¢ ð' ƒ ð0€1Š'¿ÿ?¿ÿ#"ñ ¿`¿€ðï+DE-ð ð1ðŒ¢ ð( ƒ ð0€0Š(¿ÿ?¿ÿ#"ñ ¿`¿€ð¹.&0ð ð0ðŒ¢ ð) ƒ ð0€/Š)¿ÿ?¿ÿ#"ñ ¿`¿€ðc-w ¹.ð ð/ð€B ð* “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð œ-Í œ-ðð€B ð+ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð €.x €.ðð€B ð,‚ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðx œ-± €.ðð€B ð- “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðÍ œ- €.ðð€B ð. “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð± œ-# œ-ðð€B ð/ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð# œ-\ €.ðð€B ð0 “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð ò." ò.ðð€B ð1 “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð" ò.[ Ö/ðð€B ð2 “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð[ Ö/? Ö/ðð€B ð3‚ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð? ò.x Ö/ðð€B ð4 “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðx ò.\ ò.ððdðt ð †(f!j) ð5 ðˆ3"ñ’¿€ð\ œ-²€.ððrB ð6 “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ð7‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ð8 “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ð9 “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ð: ðˆ3"ñ’¿€ð²œ-€.ððrB ð; “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ð<‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ð= “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ð> “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ð? ðˆ3"ñ’¿€ðœ-^€.ððrB ð@ “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ðA‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ðB “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ðC “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ðD ðˆ3"ñ’¿€ð^œ-´€.ððrB ðE “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ðF‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ðG “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ðH “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ðI ðˆ3"ñ’¿€ð´œ- €.ððrB ðJ “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ðK‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ðL “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ðM “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ðN ðˆ3"ñ’¿€ð œ-`€.ððrB ðO “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ðP‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ðQ “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ðR “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ðS ðˆ3"ñ’¿€ð`œ-¶€.ððrB ðT “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ðU‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ðV “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ðW “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ðð€B ðX “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð\ ò.• Ö/ðð€B ðY “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð• Ö/AÖ/ðð€B ðb “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðCÖ/ñÖ/ððdðt ð †(f!j) ðc ðˆ3"ñ’¿€ð¶œ- €.ððrB ðd “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ðe‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ðf “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððr | ˆ ”  ¬´¼ÄäI2C-Master Core Specifications'OpenCores I2C Master IP-Core DatasheetfRichard HerveilleerichSpecifications TemplateRichard Herveillepl164Microsoft Word 10.0@øÍª¬@ a_AÃ@äXà‘À@Ê ŒdAÃT ß:þÿÕÍÕœ.“—+,ù®DÕÍÕœ.“—+,ù®d  pxŒ”œ¤¬ ´¼ÄÌ Ô ÿä OpenCoresw°}#EA I2C-Master Core Specifications Title´ 8@ _PID_HLINKSäAlKhttp://www.opencores.org/þÿ ÿÿÿÿ ÀFMicrosoft Word Document MSWoB ðg “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ðh ðˆ3"ñ’¿€ð œ-b€.ððrB ði “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ðj‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ðk “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ðl “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ðm ðˆ3"ñ’¿€ðbœ-¸€.ððrB ðn “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ðo‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ðp “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ðq “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ðr ðˆ3"ñ’¿€ð¸œ-€.ððrB ðs “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ðt‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ðu “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ðv “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ðw ðˆ3"ñ’¿€ðœ-d€.ððrB ðx “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ðy‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ðz “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ð{ “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ð| ðˆ3"ñ’¿€ðdœ-º€.ððrB ð} “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ð~‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ð “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ð€ “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ð ðˆ3"ñ’¿€ðºœ- €.ððrB ð‚ “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ðƒ‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ð„ “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ð… “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððêðt ð·Û' ¿( ð‹ ðˆ3"ñ’¿€ðñò.GÖ/ððrB ðŒ‚ “ ð6¿D¿ÿ?¿ÿð·Û'ð¿(ððrB ð “ ð6¿D¿ÿ?¿ÿððÛ'ÔÛ'ððrB ðŽ “ ð6¿D¿ÿ?¿ÿðÔÛ' ¿(ððdðt ð †(f!j) ð’ ðˆ3"ñ’¿€ð œ-f!€.ððrB ð“ “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB 𔂠“ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ð• “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ð– “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ð— ðˆ3"ñ’¿€ðf!œ-¼"€.ððrB 𘠓 ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB 𙂠“ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ðš “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ð› “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ðœ ðˆ3"ñ’¿€ð¼"œ-$€.ððrB ð “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ðž‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB 🠓 ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ð  “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ðð†B 𨠣 ð<¿D¿Îÿ?¿ÿ"ñ¿€ðE(,E*0ðð†B ð© £ ð<¿D¿Îÿ?¿ÿ"ñ¿€ðK$F,K$H0ðð†B 𪠣 ð<¿D¿Îÿ?¿ÿ"ñ¿€ðé ,é 0ððŒB ð« ³ ðB¿D¿ÐÑÿ?¿ÿ"ñ¿€ðé ñ,Eñ,ð!ðŒB 𬠳 ðB¿D¿ÐÑÿ?¿ÿ"ñ¿€ðEñ,K$ñ,ðð€B 𵂠“ ð6¿D¿ÿ?¿ÿ"ñ¿€ðAò.zÖ/ðð€B ð¶ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðzò. ò.ðð€B ð· “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð ò.CÖ/ðð€B 𸠓 ð6¿D¿ÿ?¿ÿ"ñ¿€ðGÖ/½$Ö/ðð˜B ðÆ Ó ðN¿D¿ÐÑÔÕÿ?¿ÿ"ñ¿€ðK$ñ,/%ñ,ðð€B ðË “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð$€.½$€.ððŒ¢ ðÍ ƒ ð0€6ŠÍ¿ÿ?¿ÿ#"ñ ¿`¿€ðF1.#d2ð ð6ðŒ¢ ðÎ ƒ ð0€5ŠÎ¿ÿ?¿ÿ#"ñ ¿`¿€ð1Dd2ð ð5ðŒ¢ ðÏ ƒ ð0€4ŠÏ¿ÿ?¿ÿ#"ñ ¿`¿€ðØ3&.5ð ð4ðŒ¢ ðÐ ƒ ð0€3ŠÐ¿ÿ?¿ÿ#"ñ ¿`¿€ð‚2w Ø3ð ð3ðdðt ð †(f!j) ðÜ ðˆ3"ñ’¿€ð\ »2²Ÿ3ððrB ðÝ “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ðÞ‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ðß “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ðà “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ðá ðˆ3"ñ’¿€ð²»2Ÿ3ððrB ðâ “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ðã‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ðä “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ðå “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ðæ ðˆ3"ñ’¿€ð»2^Ÿ3ððrB ðç “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ðè‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ðé “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ðê “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ðë ðˆ3"ñ’¿€ð^»2´Ÿ3ððrB ðì “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ðí‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ðî “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ðï “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ðð ðˆ3"ñ’¿€ð´»2 Ÿ3ððrB ðñ “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ðò‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ðó “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ðô “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ðõ ðˆ3"ñ’¿€ð »2`Ÿ3ððrB ðö “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ð÷‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ðø “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ðù “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ðú ðˆ3"ñ’¿€ð`»2¶Ÿ3ððrB ðû “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ðü‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ðý “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ðþ “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ðð€B ð “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð• õ4Aõ4ðð€B ð “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðïõ4Eõ4ððdðt ð †(f!j) ð ðˆ3"ñ’¿€ð¶»2 Ÿ3ððrB ð “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ð‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ð “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ð “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ð ðˆ3"ñ’¿€ð »2bŸ3ððrB ð “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ð ‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ð  “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ð  “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ð  ðˆ3"ñ’¿€ðb»2¸Ÿ3ððrB ð  “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ð‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ð “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ð “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ð ðˆ3"ñ’¿€ð¸»2Ÿ3ððrB ð “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ð‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ð “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ð “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ð ðˆ3"ñ’¿€ð»2dŸ3ððrB ð “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ð‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ð “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ð “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ð ðˆ3"ñ’¿€ðd»2ºŸ3ððrB ð “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ð‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ð “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ð “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ð  ðˆ3"ñ’¿€ðº»2 Ÿ3ððrB ð! “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ð"‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ð# “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ð$ “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ð) ðˆ3"ñ’¿€ð »2f!Ÿ3ððrB ð* “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ð+‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ð, “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ð- “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ð. ðˆ3"ñ’¿€ðf!»2¼"Ÿ3ððrB ð/ “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ð0‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ð1 “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ð2 “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ð3 ðˆ3"ñ’¿€ð¼"»2$Ÿ3ððrB ð4 “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ð5‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ð6 “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ð7 “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ðð†B ð9 £ ð<¿D¿Îÿ?¿ÿ"ñ¿€ðEG1EI5ðð†B ð: £ ð<¿D¿Îÿ?¿ÿ"ñ¿€ðK$e1K$g5ðð†B ð; £ ð<¿D¿Îÿ?¿ÿ"ñ¿€ðé ,1é .5ððŒB ð< ³ ðB¿D¿ÐÑÿ?¿ÿ"ñ¿€ðé 2E2ððŒB ð= ³ ðB¿D¿ÐÑÿ?¿ÿ"ñ¿€ðE2K$2ðð€B ð>‚ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðA4zõ4ðð€B ð? “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðz4 4ðð€B ð@ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð 4Cõ4ðð€B ðV‚ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðé 4" õ4ðð€B ðW‚ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð" 4” 4ðð€B ðX “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð” 4Í õ4ðð€B ðY “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðÍ õ4? õ4ððêðt ð·Û' ¿( ðZ ðˆ3"ñ’¿€ð? 4• õ4ððrB ð[‚ “ ð6¿D¿ÿ?¿ÿð·Û'ð¿(ððrB ð\ “ ð6¿D¿ÿ?¿ÿððÛ'ÔÛ'ððrB ð] “ ð6¿D¿ÿ?¿ÿðÔÛ' ¿(ððdðt ð †(f!j) ð^ ðˆ3"ñ’¿€ð »2\ Ÿ3ððrB ð_ “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ð`‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ða “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ðb “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ððdðt ð †(f!j) ðc ðˆ3"ñ’¿€ð° »2 Ÿ3ððrB ðd “ ð6¿D¿ÿ?¿ÿð j)‚ j)ððrB ðe‚ “ ð6¿D¿ÿ?¿ÿð‚ †(» j)ððrB ðf “ ð6¿D¿ÿ?¿ÿð» †(-!†(ððrB ðg “ ð6¿D¿ÿ?¿ÿð-!†(f!j)ðð€B ðh “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð> õ4é õ4ðð€B ði “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð> Ÿ3° Ÿ3ððêðt ð·Û' ¿( ðj ðˆ3"ñ’¿€ð™4ïõ4ððrB ðk‚ “ ð6¿D¿ÿ?¿ÿð·Û'ð¿(ððrB ðl “ ð6¿D¿ÿ?¿ÿððÛ'ÔÛ'ððrB ðm “ ð6¿D¿ÿ?¿ÿðÔÛ' ¿(ðð€B ðn “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðCõ4™õ4ðð€B ðo‚ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðE4~õ4ð ð€B ðp‚ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð~4›4ððbðf ðbý2›á3 ðs3"ñ’¿€ð›4Ôõ4ððrB ðq “ ð6¿D¿ÿ?¿ÿðbý2›á3ððrB ðr‚ “ ð6¿D¿ÿ?¿ÿðbý2›á3ðð€B ðt‚ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðEõ4›õ4ððÀðf ðÔý2*á3 ð{3"ñ’¿€ðÔ4*õ4ððVðZ ðbý2›á3 ðv ðˆðñý2*á3ððrB ðw “ ð6¿D¿ÿ?¿ÿðbý2›á3ððrB ðx‚ “ ð6¿D¿ÿ?¿ÿðbý2›á3ððrB ðy‚ “ ð6¿D¿ÿ?¿ÿðÔý2ñý2ððrB ðz‚ “ ð6¿D¿ÿ?¿ÿðÔá3ñá3ððÎðt ðÔý2*á3 ð| ðˆ3"ñ’¿€ð*4€õ4ððVðZ ðbý2›á3 ð} ðˆðñý2*á3ððrB ð~ “ ð6¿D¿ÿ?¿ÿðbý2›á3ð ðrB ð‚ “ ð6¿D¿ÿ?¿ÿðbý2›á3ð ðrB ð€‚ “ ð6¿D¿ÿ?¿ÿðÔý2ñý2ð ðrB ð‚ “ ð6¿D¿ÿ?¿ÿðÔá3ñá3ð ðÎðt ðÔý2*á3 ð‚ ðˆ3"ñ’¿€ð€4Öõ4ððVðZ ðbý2›á3 ðƒ ðˆðñý2*á3ððrB ð„ “ ð6¿D¿ÿ?¿ÿðbý2›á3ð ðrB ð…‚ “ ð6¿D¿ÿ?¿ÿðbý2›á3ð ðrB ð†‚ “ ð6¿D¿ÿ?¿ÿðÔý2ñý2ð ðrB ð‡‚ “ ð6¿D¿ÿ?¿ÿðÔá3ñá3ð ðÎðt ðÔý2*á3 ðˆ ðˆ3"ñ’¿€ðÖ4,õ4ððVðZ ðbý2›á3 ð‰ ðˆðñý2*á3ððrB ðŠ “ ð6¿D¿ÿ?¿ÿðbý2›á3ð ðrB ð‹‚ “ ð6¿D¿ÿ?¿ÿðbý2›á3ð ðrB ðŒ‚ “ ð6¿D¿ÿ?¿ÿðÔý2ñý2ð ðrB ð‚ “ ð6¿D¿ÿ?¿ÿðÔá3ñá3ð ðÎðt ðÔý2*á3 ðŽ ðˆ3"ñ’¿€ð,4‚ õ4ððVðZ ðbý2›á3 ð ðˆðñý2*á3ððrB ð “ ð6¿D¿ÿ?¿ÿðbý2›á3ð ðrB ð‘‚ “ ð6¿D¿ÿ?¿ÿðbý2›á3ð ðrB ð’‚ “ ð6¿D¿ÿ?¿ÿðÔý2ñý2ð ðrB ð“‚ “ ð6¿D¿ÿ?¿ÿðÔá3ñá3ð ðÎðt ðÔý2*á3 ð” ðˆ3"ñ’¿€ð‚ 4Ø!õ4ððVðZ ðbý2›á3 ð• ðˆðñý2*á3ððrB ð– “ ð6¿D¿ÿ?¿ÿðbý2›á3ð ðrB ð—‚ “ ð6¿D¿ÿ?¿ÿðbý2›á3ð ðrB 𘂠“ ð6¿D¿ÿ?¿ÿðÔý2ñý2ð ðrB 𙂠“ ð6¿D¿ÿ?¿ÿðÔá3ñá3ð ð€B ð ‚ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðØ!4$4ðð€B ð¡‚ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðØ!õ4õ"õ4ðð€B 𢂠“ ð6¿D¿ÿ?¿ÿ"ñ¿€ðõ"4.#õ4ðð€B 𣠓 ð6¿D¿ÿ?¿ÿ"ñ¿€ð$Ÿ3„$Ÿ3ð ð€B 𤂠“ ð6¿D¿ÿ?¿ÿ"ñ¿€ð„$»2½$Ÿ3ð ð€B 𥠓 ð6¿D¿ÿ?¿ÿ"ñ¿€ð/%4L&4ð ð€B 𦠓 ð6¿D¿ÿ?¿ÿ"ñ¿€ð½$»2…&»2ð ð€B ð§ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ð$4K$õ4ð ð€B 𨠓 ð6¿D¿ÿ?¿ÿ"ñ¿€ðK$õ4ö$õ4ðð€B ð©‚ “ ð6¿D¿ÿ?¿ÿ"ñ¿€ðö$4/%õ4ðð˜B ðª Ó ðN¿D¿ÐÑÒÓÿ?¿ÿ"ñ¿€ð 2é 2ð 𺲠ðÙ c ðjAÁÿƒÃ.¿ wbc4windozešÿÿÿšÿÿÿ£S`T£S`TšÿÿÿC"ñ¿`’¿ðð#ð´² ðÚ c ðjAÁÿƒÃ.¿ wbc4windozešÿÿÿšÿÿÿ£S`T£S`Tšÿÿÿ3"ñ¿`’¿ðððt² ðÞ s ð*€€A ??¿ ÿ?3"ñ¿`¿€?ðððB ðS ð¿Ëÿ ?ð6¬4,8\:Ì>RCžJÙ·¯úÿÿ"WjÞs!ì 4O¦ÿÿÿhð!4 ƒ6™ .4ÛªfZWtÝÛ™44Üùéza 4ÿÿ ATI± A_± AdO A ¼ Aœ_± Aì> A|! AôL±" AtL±# A´K±$ AtK±% A4K±& At¼' A P( A\S) A¼U* AGJMZdmwz}Š“œ¦¯²µ¸Ð/7JPai8@ck×ß7?v~®³/š/•4›4;5?5Ê:Ð:å:ë: <<ÿ=>œ>¡>ãAèAsBxB2D:D^DbDŸD¥D½DÀDëDñDE E'E+E3EÓEÔE•F›FGHIHKHNH—HšH&I(I*I-IvIyIJJ7J;JŸJ  )*Ÿ¢Õ  .0=@F]cpv‘Ÿ¥¸Ï–œ¡³ÎÙ÷´"·"{=€=Î=Ò=ú=þ=.>3>k>o>—>›>_AdA²A¶AÞAâABBBBFBnBrB¢B§BôBøB#C&C3EÓEÔEçEìE GGGGJGUGjGmGG•GÁGÊGGHNH&I-I7J>JŸJ33333333333333333333333333333333333333!Vˆ´7` ?¼Û cˆé ?£Öê;èD z ) † â  ˆ Mõ€“ŸÑ)J[|Jµhmá+c‚†9„ éjª¾y®LP£§ì’¦ÜüÉò!#v#Ë<{=ó?ý@>A_A@D2E3EoEÓEÔEåEçEöEøEF FFF3F6FLFNFVF[FmFoF€F‚F’F•FªFÙFëFíF÷FGG&G)G+G.G0GBGDGUGWGYG[G^G`GcGuGGG„G†GˆGŠG•G—G™G›G¤G¦G±G³G¶G¸GºG¼GÊGÌGÎGÐGÓGÕG×GóGöG¡H·H¹HÐHÒHÕH×HyI{I‘I“IªI¬I¯I@JVJXJoJŸJ3EÓEÔEŸJÿÿRichard HerveilleRichard HerveilleRichard HerveilleRichard HerveilleRichard HerveilleRichard HerveilleRichard HerveilleRichard Herveillerichard Herveille|ÿÿÿ®é PHÿÿÿÿÿÿÿÿ}ÿÿÿV%ªGÿÿÿÿÿÿÿÿ~ÿÿÿ´ßœqFÿÿÿÿÿÿÿÿÿÿÿÂŽî“Eÿÿÿÿÿÿÿÿ€ÿÿÿŠ]~ÎCÿÿÿÿÿÿÿÿÿÿÿzû¦¤Bÿÿÿÿÿÿÿÿ‚ÿÿÿðN€ØAÿÿÿÿÿÿÿÿƒÿÿÿT7T @ÿÿÿÿÿÿÿÿˆÿÿÿª{:}Dÿÿÿÿÿÿÿÿ‰ÿÿÿnX\^?ÿÿÿÿÿÿÿÿ¾ ÿÿÿÿÿÿÿÿÿ®\Šÿÿÿÿÿÿÿÿÿèy1ÆoìÂÿÿÿÿÿÿÿÿÿ ,l5\C¼æÿÿÿÿÿÿÿÿÿOh 9ÆoìÂÿÿÿÿÿÿÿÿÿ‹À>>Ö>ÿEh5HÆoìÂÿat¬Mÿÿÿÿÿÿÿÿÿ3eÅWÿÿÿÿÿÿÿÿÿ’)¨^ÿÿÿÿÿÿÿÿÿY}FlÿZ/môÖàÿÿÿÿÿÿÿÿÿÅF"oõ8ÿÿÿÿÿÿÿÿÿR¬sÿÿÿÿÿÿÿÿÿ„„˜þÆ^„`„˜þ.„ „˜þÆ ^„ `„˜þ.„8„˜þÆ8^„8`„˜þ.„Є˜þÆÐ^„Ð`„˜þ. „„˜þÆ^„`„˜þOJQJo(·ð „ „˜þÆ ^„ `„˜þOJQJo(·ð „8„˜þÆ8^„8`„˜þOJQJo(·ð „Є˜þÆÐ^„Ð`„˜þOJQJo(·ð„h„˜þÆh^„h`„˜þ. „h„˜þÆh^„h`„˜þOJQJo(·ð„h„˜þÆh^„h`„˜þo()„h„˜þÆh^„h`„˜þo()„h„˜þÆh^„h`„˜þo(-„h„˜þÆh^„h`„˜þ.„„PþÆ^„`„Pþ..„È„þÆ^„È`„þ...„À„xýÆØ ^„À`„xý.... „¸„èüƨ ^„¸`„èü ..... „° „XüÆ^„° `„Xü ...... „¨ „ÈûÆà^„¨ `„Èû....... „ „8ûư^„ `„8û........ „à„`úÆ€^„à`„`ú.........„h„˜þÆh^„h`„˜þo(-„h„˜þÆh^„h`„˜þ„h„˜þÆh^„h`„˜þo(-„h„˜þÆh^„h`„˜þo()„h„˜þÆh^„h`„˜þo()„h„˜þÆh^„h`„˜þo() „h„˜þÆh^„h`„˜þOJQJo(·ðh„Є˜þÆÐ^„Ð`„˜þOJQJo(‡hˆH·ðh„ „˜þÆ ^„ `„˜þOJQJ^Jo(‡hˆHoh„p„˜þÆp^„p`„˜þOJQJo(‡hˆH§ðh„@ „˜þÆ@ ^„@ `„˜þOJQJo(‡hˆH·ðh„„˜þÆ^„`„˜þOJQJ^Jo(‡hˆHoh„à„˜þÆà^„à`„˜þOJQJo(‡hˆH§ðh„°„˜þư^„°`„˜þOJQJo(‡hˆH·ðh„€„˜þÆ€^„€`„˜þOJQJ^Jo(‡hˆHoh„P„˜þÆP^„P`„˜þOJQJo(‡hˆH§ðh„Є˜þÆÐ^„Ð`„˜þOJQJo(‡hˆH·ðh„ „˜þÆ ^„ `„˜þOJQJ^Jo(‡hˆHoh„p„˜þÆp^„p`„˜þOJQJo(‡hˆH§ðh„@ „˜þÆ@ ^„@ `„˜þOJQJo(‡hˆH·ðh„„˜þÆ^„`„˜þOJQJ^Jo(‡hˆHoh„à„˜þÆà^„à`„˜þOJQJo(‡hˆH§ðh„°„˜þư^„°`„˜þOJQJo(‡hˆH·ðh„€„˜þÆ€^„€`„˜þOJQJ^Jo(‡hˆHoh„P„˜þÆP^„P`„˜þOJQJo(‡hˆH§ð„h„˜þÆh^„h`„˜þo()‹À> ,l5Oh 9Eh5HY}FlR¬s3eÅW’)¨^¾ at¬M®\Šèy1‰ÿÿÿƒÿÿÿ‚ÿÿÿÿÿÿ€ÿÿÿˆÿÿÿÿÿÿ~ÿÿÿ}ÿÿÿ|ÿÿÿÅF"oZ/mÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ                  9å8T^šÉ= ¨t >5Ûxd9hN΢ t%†A&Ö)'\R*+i2ÎJ5 H6“_9‚3BGÏgKYkN Uby\\-_Gnc}>k×5lToWzt»Jww{¸h‚iŽ6“^•{2˜GM™_@›ä¦‰-ª:¬Ú ¬GK¬y¸]½wŸÉÛ,Î3ØeçMLê‹]øÔ-ù·wü‡´ÅÆËÐ×ãäèñ%7…†Š‹ $-?»¼ÀÉÛ )CDHQc‡ˆŒ•§ÉÊÎ×é $-?¸¹´ µ É Ó Ø à ì í ö ú ÿ   ¥ ª ° º Æ Ç Ð Ò Ø å æ ï ñ ÷    & 9 : C E K ^ _ h j p † ‡ ’ ™ ¬ ­ µ · ½ Ð Ñ Ú Ü â     * + 4 6 = Z [ e g n † ‡ Mglr|ˆ‰“•›³´¾ÀÇàáìîõ "(?@JLSklwy€Ÿ Þñöþ $&)IJQVX[{|€…‡Š›œ ¥§©»¼ÀÅÇÉÚÛÞãåçøùüÊËâèïûüþghjmàáåèñò*+CIP\]ac‚„†89LMdjq}~‚„Ÿ ³´ËÑØäåçé4579MNPRefhj©ª®°¹º¼¾y–©ª¬®KLNP¢£¥§‘’–˜¡¢¤¦÷øúüÝÞ@DKDRD^DcDrDsDyD‡D‹D‘DžDŸD¦D´D·D½DÆDÇDÈDÖDÙDßDêDëDòDüDÿDEEEEE E'E1E2E3EqEŸJžžžžžžžžžž–ž–žžžžžžžžžžž–žžžžžž–žžžžžžž–žžž–žž–ž–žžžžžžž–žžžžžž–žžžžž–ulÿ@žJ`@ÿÿUnknownrichardJeanne Wiegelmannÿÿÿÿÿÿÿÿÿÿÿÿ G‡z €ÿTimes New Roman5€Symbol3& ‡z €ÿArial3‡z €ÿTimesA&LucidabrightA"GenevaArial?5 ‡z €ÿCourier New5& ‡z!€ÿTahoma;€Wingdings"qˆðÐähBDR†Ëw† w†¤ÔT ß:#}T ß:#}ð£Ã»»€24dEE 3ƒQðßßH(ðÿäÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛ,ÎÿÿGC:\Program Files\Microsoft Office\Sjablonen\Specifications Template.dotI2C-Master Core Specifications&OpenCores I2C Master IP-Core DatasheetRichard HerveilleRichard Herveillel                   CompObjÿÿÿÿÿÿÿÿÿÿÿÿjÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrdDocWord.Document.8ô9²qbladeRF-2024.05/hdl/fpga/ip/opencores/i2c/i2c.qip000066400000000000000000000014551457144405000211340ustar00rootroot00000000000000# When generating a system, Qsys will copy this file into its synthesis output # directory. All paths below must be relative to that directory. set oc_ip_dir [file join $::quartus(qip_path) ../../../../../../fpga/ip/opencores] set_global_assignment -name VERILOG_FILE [file normalize [file join $oc_ip_dir i2c/rtl/verilog/i2c_master_top.v ]] set_global_assignment -name VERILOG_FILE [file normalize [file join $oc_ip_dir i2c/rtl/verilog/timescale.v ]] set_global_assignment -name VERILOG_FILE [file normalize [file join $oc_ip_dir i2c/rtl/verilog/i2c_master_defines.v ]] set_global_assignment -name VERILOG_FILE [file normalize [file join $oc_ip_dir i2c/rtl/verilog/i2c_master_byte_ctrl.v ]] set_global_assignment -name VERILOG_FILE [file normalize [file join $oc_ip_dir i2c/rtl/verilog/i2c_master_bit_ctrl.v ]] bladeRF-2024.05/hdl/fpga/ip/opencores/i2c/qsys/000077500000000000000000000000001457144405000207365ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/opencores/i2c/qsys/oc_i2c_master_hw.tcl000066400000000000000000000144431457144405000246570ustar00rootroot00000000000000# TCL File Generated by Component Editor 13.1 # Sun Nov 24 13:25:09 EST 2013 # DO NOT MODIFY # !!! 'package require' statement has been modified from the origial # !!! Component Editor generation, to permit building under multiple # !!! Quartus versions. # # bladerf_oc_i2c_master "BladeRF OpenCores I2C Master" v1.0 # OpenCores 2013.11.24.13:25:09 # BladeRF OpenCores I2C Master # # # request TCL package from ACDS # package require qsys # # module bladerf_oc_i2c_master # set_module_property DESCRIPTION "BladeRF OpenCores I2C Master" set_module_property NAME bladerf_oc_i2c_master set_module_property VERSION 1.0 set_module_property INTERNAL false set_module_property OPAQUE_ADDRESS_MAP true set_module_property GROUP Communication set_module_property AUTHOR OpenCores set_module_property DISPLAY_NAME "BladeRF OpenCores I2C Master" set_module_property INSTANTIATE_IN_SYSTEM_MODULE true set_module_property EDITABLE true set_module_property REPORT_TO_TALKBACK false set_module_property ALLOW_GREYBOX_GENERATION false # # file sets # add_fileset QUARTUS_SYNTH QUARTUS_SYNTH "" "" set_fileset_property QUARTUS_SYNTH TOP_LEVEL i2c_master_top set_fileset_property QUARTUS_SYNTH ENABLE_RELATIVE_INCLUDE_PATHS false add_fileset_file i2c.qip OTHER PATH ../i2c.qip # # parameters # add_parameter ARST_LVL INTEGER 0 "" set_parameter_property ARST_LVL DEFAULT_VALUE 0 set_parameter_property ARST_LVL DISPLAY_NAME ARST_LVL set_parameter_property ARST_LVL WIDTH "" set_parameter_property ARST_LVL TYPE INTEGER set_parameter_property ARST_LVL UNITS None set_parameter_property ARST_LVL ALLOWED_RANGES 0:1 set_parameter_property ARST_LVL DESCRIPTION "" set_parameter_property ARST_LVL HDL_PARAMETER true # # display items # # # connection point clock_sink # add_interface clock_sink clock end set_interface_property clock_sink clockRate 0 set_interface_property clock_sink ENABLED true set_interface_property clock_sink EXPORT_OF "" set_interface_property clock_sink PORT_NAME_MAP "" #set_interface_property clock_sink CMSIS_SVD_VARIABLES "" #set_interface_property clock_sink SVD_ADDRESS_GROUP "" add_interface_port clock_sink wb_clk_i clk Input 1 # # connection point reset_sink # add_interface reset_sink reset end set_interface_property reset_sink associatedClock clock_sink set_interface_property reset_sink synchronousEdges DEASSERT set_interface_property reset_sink ENABLED true set_interface_property reset_sink EXPORT_OF "" set_interface_property reset_sink PORT_NAME_MAP "" #set_interface_property reset_sink CMSIS_SVD_VARIABLES "" #set_interface_property reset_sink SVD_ADDRESS_GROUP "" add_interface_port reset_sink wb_rst_i reset Input 1 # # connection point conduit_end # add_interface conduit_end conduit end set_interface_property conduit_end associatedClock "" set_interface_property conduit_end associatedReset "" set_interface_property conduit_end ENABLED true set_interface_property conduit_end EXPORT_OF "" set_interface_property conduit_end PORT_NAME_MAP "" #set_interface_property conduit_end CMSIS_SVD_VARIABLES "" #set_interface_property conduit_end SVD_ADDRESS_GROUP "" add_interface_port conduit_end scl_pad_o scl_pad_o Output 1 add_interface_port conduit_end scl_padoen_o scl_padoen_o Output 1 add_interface_port conduit_end sda_pad_i sda_pad_i Input 1 add_interface_port conduit_end sda_pad_o sda_pad_o Output 1 add_interface_port conduit_end sda_padoen_o sda_padoen_o Output 1 add_interface_port conduit_end arst_i arst_i Input 1 add_interface_port conduit_end scl_pad_i scl_pad_i Input 1 # # connection point interrupt_sender # add_interface interrupt_sender interrupt end set_interface_property interrupt_sender associatedAddressablePoint bladerf_oc_i2c_master set_interface_property interrupt_sender associatedClock clock_sink set_interface_property interrupt_sender associatedReset reset_sink set_interface_property interrupt_sender ENABLED true set_interface_property interrupt_sender EXPORT_OF "" set_interface_property interrupt_sender PORT_NAME_MAP "" #set_interface_property interrupt_sender CMSIS_SVD_VARIABLES "" #set_interface_property interrupt_sender SVD_ADDRESS_GROUP "" add_interface_port interrupt_sender wb_inta_o irq Output 1 # # connection point bladerf_oc_i2c_master # add_interface bladerf_oc_i2c_master avalon end set_interface_property bladerf_oc_i2c_master addressUnits WORDS set_interface_property bladerf_oc_i2c_master associatedClock clock_sink set_interface_property bladerf_oc_i2c_master associatedReset reset_sink set_interface_property bladerf_oc_i2c_master bitsPerSymbol 8 set_interface_property bladerf_oc_i2c_master burstOnBurstBoundariesOnly false set_interface_property bladerf_oc_i2c_master burstcountUnits WORDS set_interface_property bladerf_oc_i2c_master explicitAddressSpan 0 set_interface_property bladerf_oc_i2c_master holdTime 0 set_interface_property bladerf_oc_i2c_master linewrapBursts false set_interface_property bladerf_oc_i2c_master maximumPendingReadTransactions 0 set_interface_property bladerf_oc_i2c_master readLatency 0 set_interface_property bladerf_oc_i2c_master readWaitTime 1 set_interface_property bladerf_oc_i2c_master setupTime 0 set_interface_property bladerf_oc_i2c_master timingUnits Cycles set_interface_property bladerf_oc_i2c_master writeWaitTime 0 set_interface_property bladerf_oc_i2c_master ENABLED true set_interface_property bladerf_oc_i2c_master EXPORT_OF "" set_interface_property bladerf_oc_i2c_master PORT_NAME_MAP "" #set_interface_property bladerf_oc_i2c_master CMSIS_SVD_VARIABLES "" #set_interface_property bladerf_oc_i2c_master SVD_ADDRESS_GROUP "" add_interface_port bladerf_oc_i2c_master wb_dat_i writedata Input 8 add_interface_port bladerf_oc_i2c_master wb_dat_o readdata Output 8 add_interface_port bladerf_oc_i2c_master wb_we_i write Input 1 add_interface_port bladerf_oc_i2c_master wb_stb_i byteenable Input 1 add_interface_port bladerf_oc_i2c_master wb_cyc_i chipselect Input 1 add_interface_port bladerf_oc_i2c_master wb_ack_o waitrequest_n Output 1 add_interface_port bladerf_oc_i2c_master wb_adr_i address Input 3 set_interface_assignment bladerf_oc_i2c_master embeddedsw.configuration.isFlash 0 set_interface_assignment bladerf_oc_i2c_master embeddedsw.configuration.isMemoryDevice 0 set_interface_assignment bladerf_oc_i2c_master embeddedsw.configuration.isNonVolatileStorage 0 set_interface_assignment bladerf_oc_i2c_master embeddedsw.configuration.isPrintableDevice 0 bladeRF-2024.05/hdl/fpga/ip/opencores/i2c/rtl/000077500000000000000000000000001457144405000205405ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/opencores/i2c/rtl/verilog/000077500000000000000000000000001457144405000222075ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/opencores/i2c/rtl/verilog/i2c_master_bit_ctrl.v000066400000000000000000000512261457144405000263160ustar00rootroot00000000000000///////////////////////////////////////////////////////////////////// //// //// //// WISHBONE rev.B2 compliant I2C Master bit-controller //// //// //// //// //// //// Author: Richard Herveille //// //// richard@asics.ws //// //// www.asics.ws //// //// //// //// Downloaded from: http://www.opencores.org/projects/i2c/ //// //// //// ///////////////////////////////////////////////////////////////////// //// //// //// Copyright (C) 2001 Richard Herveille //// //// richard@asics.ws //// //// //// //// 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 SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY //// //// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED //// //// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS //// //// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR //// //// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, //// //// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES //// //// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE //// //// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR //// //// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF //// //// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT //// //// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT //// //// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE //// //// POSSIBILITY OF SUCH DAMAGE. //// //// //// ///////////////////////////////////////////////////////////////////// // CVS Log // // $Id: i2c_master_bit_ctrl.v,v 1.14 2009-01-20 10:25:29 rherveille Exp $ // // $Date: 2009-01-20 10:25:29 $ // $Revision: 1.14 $ // $Author: rherveille $ // $Locker: $ // $State: Exp $ // // Change History: // $Log: $ // Revision 1.14 2009/01/20 10:25:29 rherveille // Added clock synchronization logic // Fixed slave_wait signal // // Revision 1.13 2009/01/19 20:29:26 rherveille // Fixed synopsys miss spell (synopsis) // Fixed cr[0] register width // Fixed ! usage instead of ~ // Fixed bit controller parameter width to 18bits // // Revision 1.12 2006/09/04 09:08:13 rherveille // fixed short scl high pulse after clock stretch // fixed slave model not returning correct '(n)ack' signal // // Revision 1.11 2004/05/07 11:02:26 rherveille // Fixed a bug where the core would signal an arbitration lost (AL bit set), when another master controls the bus and the other master generates a STOP bit. // // Revision 1.10 2003/08/09 07:01:33 rherveille // Fixed a bug in the Arbitration Lost generation caused by delay on the (external) sda line. // Fixed a potential bug in the byte controller's host-acknowledge generation. // // Revision 1.9 2003/03/10 14:26:37 rherveille // Fixed cmd_ack generation item (no bug). // // Revision 1.8 2003/02/05 00:06:10 rherveille // Fixed a bug where the core would trigger an erroneous 'arbitration lost' interrupt after being reset, when the reset pulse width < 3 clk cycles. // // Revision 1.7 2002/12/26 16:05:12 rherveille // Small code simplifications // // Revision 1.6 2002/12/26 15:02:32 rherveille // Core is now a Multimaster I2C controller // // Revision 1.5 2002/11/30 22:24:40 rherveille // Cleaned up code // // Revision 1.4 2002/10/30 18:10:07 rherveille // Fixed some reported minor start/stop generation timing issuess. // // Revision 1.3 2002/06/15 07:37:03 rherveille // Fixed a small timing bug in the bit controller.\nAdded verilog simulation environment. // // Revision 1.2 2001/11/05 11:59:25 rherveille // Fixed wb_ack_o generation bug. // Fixed bug in the byte_controller statemachine. // Added headers. // // ///////////////////////////////////// // Bit controller section ///////////////////////////////////// // // Translate simple commands into SCL/SDA transitions // Each command has 5 states, A/B/C/D/idle // // start: SCL ~~~~~~~~~~\____ // SDA ~~~~~~~~\______ // x | A | B | C | D | i // // repstart SCL ____/~~~~\___ // SDA __/~~~\______ // x | A | B | C | D | i // // stop SCL ____/~~~~~~~~ // SDA ==\____/~~~~~ // x | A | B | C | D | i // //- write SCL ____/~~~~\____ // SDA ==X=========X= // x | A | B | C | D | i // //- read SCL ____/~~~~\____ // SDA XXXX=====XXXX // x | A | B | C | D | i // // Timing: Normal mode Fast mode /////////////////////////////////////////////////////////////////////// // Fscl 100KHz 400KHz // Th_scl 4.0us 0.6us High period of SCL // Tl_scl 4.7us 1.3us Low period of SCL // Tsu:sta 4.7us 0.6us setup time for a repeated start condition // Tsu:sto 4.0us 0.6us setup time for a stop conditon // Tbuf 4.7us 1.3us Bus free time between a stop and start condition // // synopsys translate_off `include "timescale.v" // synopsys translate_on `include "i2c_master_defines.v" module i2c_master_bit_ctrl ( input clk, // system clock input rst, // synchronous active high reset input nReset, // asynchronous active low reset input ena, // core enable signal input [15:0] clk_cnt, // clock prescale value input [ 3:0] cmd, // command (from byte controller) output reg cmd_ack, // command complete acknowledge output reg busy, // i2c bus busy output reg al, // i2c bus arbitration lost input din, output reg dout, input scl_i, // i2c clock line input output scl_o, // i2c clock line output output reg scl_oen, // i2c clock line output enable (active low) input sda_i, // i2c data line input output sda_o, // i2c data line output output reg sda_oen // i2c data line output enable (active low) ); // // variable declarations // reg [ 1:0] cSCL, cSDA; // capture SCL and SDA reg [ 2:0] fSCL, fSDA; // SCL and SDA filter inputs reg sSCL, sSDA; // filtered and synchronized SCL and SDA inputs reg dSCL, dSDA; // delayed versions of sSCL and sSDA reg dscl_oen; // delayed scl_oen reg sda_chk; // check SDA output (Multi-master arbitration) reg clk_en; // clock generation signals reg slave_wait; // slave inserts wait states reg [15:0] cnt; // clock divider counter (synthesis) reg [13:0] filter_cnt; // clock divider for filter // state machine variable reg [17:0] c_state; // synopsys enum_state // // module body // // whenever the slave is not ready it can delay the cycle by pulling SCL low // delay scl_oen always @(posedge clk) dscl_oen <= #1 scl_oen; // slave_wait is asserted when master wants to drive SCL high, but the slave pulls it low // slave_wait remains asserted until the slave releases SCL always @(posedge clk or negedge nReset) if (!nReset) slave_wait <= 1'b0; else slave_wait <= (scl_oen & ~dscl_oen & ~sSCL) | (slave_wait & ~sSCL); // master drives SCL high, but another master pulls it low // master start counting down its low cycle now (clock synchronization) wire scl_sync = dSCL & ~sSCL & scl_oen; // generate clk enable signal always @(posedge clk or negedge nReset) if (~nReset) begin cnt <= #1 16'h0; clk_en <= #1 1'b1; end else if (rst || ~|cnt || !ena || scl_sync) begin cnt <= #1 clk_cnt; clk_en <= #1 1'b1; end else if (slave_wait) begin cnt <= #1 cnt; clk_en <= #1 1'b0; end else begin cnt <= #1 cnt - 16'h1; clk_en <= #1 1'b0; end // generate bus status controller // capture SDA and SCL // reduce metastability risk always @(posedge clk or negedge nReset) if (!nReset) begin cSCL <= #1 2'b00; cSDA <= #1 2'b00; end else if (rst) begin cSCL <= #1 2'b00; cSDA <= #1 2'b00; end else begin cSCL <= {cSCL[0],scl_i}; cSDA <= {cSDA[0],sda_i}; end // filter SCL and SDA signals; (attempt to) remove glitches always @(posedge clk or negedge nReset) if (!nReset ) filter_cnt <= 14'h0; else if (rst || !ena ) filter_cnt <= 14'h0; else if (~|filter_cnt) filter_cnt <= clk_cnt[15:2]; //clk_cnt >> 2; //16x I2C bus frequency else filter_cnt <= filter_cnt - 1'b1; always @(posedge clk or negedge nReset) if (!nReset) begin fSCL <= 3'b111; fSDA <= 3'b111; end else if (rst) begin fSCL <= 3'b111; fSDA <= 3'b111; end else if (~|filter_cnt) begin fSCL <= {fSCL[1:0],cSCL[1]}; fSDA <= {fSDA[1:0],cSDA[1]}; end // generate filtered SCL and SDA signals always @(posedge clk or negedge nReset) if (~nReset) begin sSCL <= #1 1'b1; sSDA <= #1 1'b1; dSCL <= #1 1'b1; dSDA <= #1 1'b1; end else if (rst) begin sSCL <= #1 1'b1; sSDA <= #1 1'b1; dSCL <= #1 1'b1; dSDA <= #1 1'b1; end else begin sSCL <= #1 &fSCL[2:1] | &fSCL[1:0] | (fSCL[2] & fSCL[0]); sSDA <= #1 &fSDA[2:1] | &fSDA[1:0] | (fSDA[2] & fSDA[0]); dSCL <= #1 sSCL; dSDA <= #1 sSDA; end // detect start condition => detect falling edge on SDA while SCL is high // detect stop condition => detect rising edge on SDA while SCL is high reg sta_condition; reg sto_condition; always @(posedge clk or negedge nReset) if (~nReset) begin sta_condition <= #1 1'b0; sto_condition <= #1 1'b0; end else if (rst) begin sta_condition <= #1 1'b0; sto_condition <= #1 1'b0; end else begin sta_condition <= #1 ~sSDA & dSDA & sSCL; sto_condition <= #1 sSDA & ~dSDA & sSCL; end // generate i2c bus busy signal always @(posedge clk or negedge nReset) if (!nReset) busy <= #1 1'b0; else if (rst ) busy <= #1 1'b0; else busy <= #1 (sta_condition | busy) & ~sto_condition; // generate arbitration lost signal // aribitration lost when: // 1) master drives SDA high, but the i2c bus is low // 2) stop detected while not requested reg cmd_stop; always @(posedge clk or negedge nReset) if (~nReset) cmd_stop <= #1 1'b0; else if (rst) cmd_stop <= #1 1'b0; else if (clk_en) cmd_stop <= #1 cmd == `I2C_CMD_STOP; always @(posedge clk or negedge nReset) if (~nReset) al <= #1 1'b0; else if (rst) al <= #1 1'b0; else al <= #1 (sda_chk & ~sSDA & sda_oen) | (|c_state & sto_condition & ~cmd_stop); // generate dout signal (store SDA on rising edge of SCL) always @(posedge clk) if (sSCL & ~dSCL) dout <= #1 sSDA; // generate statemachine // nxt_state decoder parameter [17:0] idle = 18'b0_0000_0000_0000_0000; parameter [17:0] start_a = 18'b0_0000_0000_0000_0001; parameter [17:0] start_b = 18'b0_0000_0000_0000_0010; parameter [17:0] start_c = 18'b0_0000_0000_0000_0100; parameter [17:0] start_d = 18'b0_0000_0000_0000_1000; parameter [17:0] start_e = 18'b0_0000_0000_0001_0000; parameter [17:0] stop_a = 18'b0_0000_0000_0010_0000; parameter [17:0] stop_b = 18'b0_0000_0000_0100_0000; parameter [17:0] stop_c = 18'b0_0000_0000_1000_0000; parameter [17:0] stop_d = 18'b0_0000_0001_0000_0000; parameter [17:0] rd_a = 18'b0_0000_0010_0000_0000; parameter [17:0] rd_b = 18'b0_0000_0100_0000_0000; parameter [17:0] rd_c = 18'b0_0000_1000_0000_0000; parameter [17:0] rd_d = 18'b0_0001_0000_0000_0000; parameter [17:0] wr_a = 18'b0_0010_0000_0000_0000; parameter [17:0] wr_b = 18'b0_0100_0000_0000_0000; parameter [17:0] wr_c = 18'b0_1000_0000_0000_0000; parameter [17:0] wr_d = 18'b1_0000_0000_0000_0000; always @(posedge clk or negedge nReset) if (!nReset) begin c_state <= #1 idle; cmd_ack <= #1 1'b0; scl_oen <= #1 1'b1; sda_oen <= #1 1'b1; sda_chk <= #1 1'b0; end else if (rst | al) begin c_state <= #1 idle; cmd_ack <= #1 1'b0; scl_oen <= #1 1'b1; sda_oen <= #1 1'b1; sda_chk <= #1 1'b0; end else begin cmd_ack <= #1 1'b0; // default no command acknowledge + assert cmd_ack only 1clk cycle if (clk_en) case (c_state) // synopsys full_case parallel_case // idle state idle: begin case (cmd) // synopsys full_case parallel_case `I2C_CMD_START: c_state <= #1 start_a; `I2C_CMD_STOP: c_state <= #1 stop_a; `I2C_CMD_WRITE: c_state <= #1 wr_a; `I2C_CMD_READ: c_state <= #1 rd_a; default: c_state <= #1 idle; endcase scl_oen <= #1 scl_oen; // keep SCL in same state sda_oen <= #1 sda_oen; // keep SDA in same state sda_chk <= #1 1'b0; // don't check SDA output end // start start_a: begin c_state <= #1 start_b; scl_oen <= #1 scl_oen; // keep SCL in same state sda_oen <= #1 1'b1; // set SDA high sda_chk <= #1 1'b0; // don't check SDA output end start_b: begin c_state <= #1 start_c; scl_oen <= #1 1'b1; // set SCL high sda_oen <= #1 1'b1; // keep SDA high sda_chk <= #1 1'b0; // don't check SDA output end start_c: begin c_state <= #1 start_d; scl_oen <= #1 1'b1; // keep SCL high sda_oen <= #1 1'b0; // set SDA low sda_chk <= #1 1'b0; // don't check SDA output end start_d: begin c_state <= #1 start_e; scl_oen <= #1 1'b1; // keep SCL high sda_oen <= #1 1'b0; // keep SDA low sda_chk <= #1 1'b0; // don't check SDA output end start_e: begin c_state <= #1 idle; cmd_ack <= #1 1'b1; scl_oen <= #1 1'b0; // set SCL low sda_oen <= #1 1'b0; // keep SDA low sda_chk <= #1 1'b0; // don't check SDA output end // stop stop_a: begin c_state <= #1 stop_b; scl_oen <= #1 1'b0; // keep SCL low sda_oen <= #1 1'b0; // set SDA low sda_chk <= #1 1'b0; // don't check SDA output end stop_b: begin c_state <= #1 stop_c; scl_oen <= #1 1'b1; // set SCL high sda_oen <= #1 1'b0; // keep SDA low sda_chk <= #1 1'b0; // don't check SDA output end stop_c: begin c_state <= #1 stop_d; scl_oen <= #1 1'b1; // keep SCL high sda_oen <= #1 1'b0; // keep SDA low sda_chk <= #1 1'b0; // don't check SDA output end stop_d: begin c_state <= #1 idle; cmd_ack <= #1 1'b1; scl_oen <= #1 1'b1; // keep SCL high sda_oen <= #1 1'b1; // set SDA high sda_chk <= #1 1'b0; // don't check SDA output end // read rd_a: begin c_state <= #1 rd_b; scl_oen <= #1 1'b0; // keep SCL low sda_oen <= #1 1'b1; // tri-state SDA sda_chk <= #1 1'b0; // don't check SDA output end rd_b: begin c_state <= #1 rd_c; scl_oen <= #1 1'b1; // set SCL high sda_oen <= #1 1'b1; // keep SDA tri-stated sda_chk <= #1 1'b0; // don't check SDA output end rd_c: begin c_state <= #1 rd_d; scl_oen <= #1 1'b1; // keep SCL high sda_oen <= #1 1'b1; // keep SDA tri-stated sda_chk <= #1 1'b0; // don't check SDA output end rd_d: begin c_state <= #1 idle; cmd_ack <= #1 1'b1; scl_oen <= #1 1'b0; // set SCL low sda_oen <= #1 1'b1; // keep SDA tri-stated sda_chk <= #1 1'b0; // don't check SDA output end // write wr_a: begin c_state <= #1 wr_b; scl_oen <= #1 1'b0; // keep SCL low sda_oen <= #1 din; // set SDA sda_chk <= #1 1'b0; // don't check SDA output (SCL low) end wr_b: begin c_state <= #1 wr_c; scl_oen <= #1 1'b1; // set SCL high sda_oen <= #1 din; // keep SDA sda_chk <= #1 1'b0; // don't check SDA output yet // allow some time for SDA and SCL to settle end wr_c: begin c_state <= #1 wr_d; scl_oen <= #1 1'b1; // keep SCL high sda_oen <= #1 din; sda_chk <= #1 1'b1; // check SDA output end wr_d: begin c_state <= #1 idle; cmd_ack <= #1 1'b1; scl_oen <= #1 1'b0; // set SCL low sda_oen <= #1 din; sda_chk <= #1 1'b0; // don't check SDA output (SCL low) end endcase end // assign scl and sda output (always gnd) assign scl_o = 1'b0; assign sda_o = 1'b0; endmodule bladeRF-2024.05/hdl/fpga/ip/opencores/i2c/rtl/verilog/i2c_master_byte_ctrl.v000066400000000000000000000244631457144405000265060ustar00rootroot00000000000000///////////////////////////////////////////////////////////////////// //// //// //// WISHBONE rev.B2 compliant I2C Master byte-controller //// //// //// //// //// //// Author: Richard Herveille //// //// richard@asics.ws //// //// www.asics.ws //// //// //// //// Downloaded from: http://www.opencores.org/projects/i2c/ //// //// //// ///////////////////////////////////////////////////////////////////// //// //// //// Copyright (C) 2001 Richard Herveille //// //// richard@asics.ws //// //// //// //// 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 SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY //// //// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED //// //// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS //// //// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR //// //// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, //// //// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES //// //// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE //// //// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR //// //// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF //// //// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT //// //// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT //// //// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE //// //// POSSIBILITY OF SUCH DAMAGE. //// //// //// ///////////////////////////////////////////////////////////////////// // CVS Log // // $Id: i2c_master_byte_ctrl.v,v 1.8 2009-01-19 20:29:26 rherveille Exp $ // // $Date: 2009-01-19 20:29:26 $ // $Revision: 1.8 $ // $Author: rherveille $ // $Locker: $ // $State: Exp $ // // Change History: // $Log: not supported by cvs2svn $ // Revision 1.7 2004/02/18 11:40:46 rherveille // Fixed a potential bug in the statemachine. During a 'stop' 2 cmd_ack signals were generated. Possibly canceling a new start command. // // Revision 1.6 2003/08/09 07:01:33 rherveille // Fixed a bug in the Arbitration Lost generation caused by delay on the (external) sda line. // Fixed a potential bug in the byte controller's host-acknowledge generation. // // Revision 1.5 2002/12/26 15:02:32 rherveille // Core is now a Multimaster I2C controller // // Revision 1.4 2002/11/30 22:24:40 rherveille // Cleaned up code // // Revision 1.3 2001/11/05 11:59:25 rherveille // Fixed wb_ack_o generation bug. // Fixed bug in the byte_controller statemachine. // Added headers. // // synopsys translate_off `include "timescale.v" // synopsys translate_on `include "i2c_master_defines.v" module i2c_master_byte_ctrl ( clk, rst, nReset, ena, clk_cnt, start, stop, read, write, ack_in, din, cmd_ack, ack_out, dout, i2c_busy, i2c_al, scl_i, scl_o, scl_oen, sda_i, sda_o, sda_oen ); // // inputs & outputs // input clk; // master clock input rst; // synchronous active high reset input nReset; // asynchronous active low reset input ena; // core enable signal input [15:0] clk_cnt; // 4x SCL // control inputs input start; input stop; input read; input write; input ack_in; input [7:0] din; // status outputs output cmd_ack; reg cmd_ack; output ack_out; reg ack_out; output i2c_busy; output i2c_al; output [7:0] dout; // I2C signals input scl_i; output scl_o; output scl_oen; input sda_i; output sda_o; output sda_oen; // // Variable declarations // // statemachine parameter [4:0] ST_IDLE = 5'b0_0000; parameter [4:0] ST_START = 5'b0_0001; parameter [4:0] ST_READ = 5'b0_0010; parameter [4:0] ST_WRITE = 5'b0_0100; parameter [4:0] ST_ACK = 5'b0_1000; parameter [4:0] ST_STOP = 5'b1_0000; // signals for bit_controller reg [3:0] core_cmd; reg core_txd; wire core_ack, core_rxd; // signals for shift register reg [7:0] sr; //8bit shift register reg shift, ld; // signals for state machine wire go; reg [2:0] dcnt; wire cnt_done; // // Module body // // hookup bit_controller i2c_master_bit_ctrl bit_controller ( .clk ( clk ), .rst ( rst ), .nReset ( nReset ), .ena ( ena ), .clk_cnt ( clk_cnt ), .cmd ( core_cmd ), .cmd_ack ( core_ack ), .busy ( i2c_busy ), .al ( i2c_al ), .din ( core_txd ), .dout ( core_rxd ), .scl_i ( scl_i ), .scl_o ( scl_o ), .scl_oen ( scl_oen ), .sda_i ( sda_i ), .sda_o ( sda_o ), .sda_oen ( sda_oen ) ); // generate go-signal assign go = (read | write | stop) & ~cmd_ack; // assign dout output to shift-register assign dout = sr; // generate shift register always @(posedge clk or negedge nReset) if (!nReset) sr <= #1 8'h0; else if (rst) sr <= #1 8'h0; else if (ld) sr <= #1 din; else if (shift) sr <= #1 {sr[6:0], core_rxd}; // generate counter always @(posedge clk or negedge nReset) if (!nReset) dcnt <= #1 3'h0; else if (rst) dcnt <= #1 3'h0; else if (ld) dcnt <= #1 3'h7; else if (shift) dcnt <= #1 dcnt - 3'h1; assign cnt_done = ~(|dcnt); // // state machine // reg [4:0] c_state; // synopsys enum_state always @(posedge clk or negedge nReset) if (!nReset) begin core_cmd <= #1 `I2C_CMD_NOP; core_txd <= #1 1'b0; shift <= #1 1'b0; ld <= #1 1'b0; cmd_ack <= #1 1'b0; c_state <= #1 ST_IDLE; ack_out <= #1 1'b0; end else if (rst | i2c_al) begin core_cmd <= #1 `I2C_CMD_NOP; core_txd <= #1 1'b0; shift <= #1 1'b0; ld <= #1 1'b0; cmd_ack <= #1 1'b0; c_state <= #1 ST_IDLE; ack_out <= #1 1'b0; end else begin // initially reset all signals core_txd <= #1 sr[7]; shift <= #1 1'b0; ld <= #1 1'b0; cmd_ack <= #1 1'b0; case (c_state) // synopsys full_case parallel_case ST_IDLE: if (go) begin if (start) begin c_state <= #1 ST_START; core_cmd <= #1 `I2C_CMD_START; end else if (read) begin c_state <= #1 ST_READ; core_cmd <= #1 `I2C_CMD_READ; end else if (write) begin c_state <= #1 ST_WRITE; core_cmd <= #1 `I2C_CMD_WRITE; end else // stop begin c_state <= #1 ST_STOP; core_cmd <= #1 `I2C_CMD_STOP; end ld <= #1 1'b1; end ST_START: if (core_ack) begin if (read) begin c_state <= #1 ST_READ; core_cmd <= #1 `I2C_CMD_READ; end else begin c_state <= #1 ST_WRITE; core_cmd <= #1 `I2C_CMD_WRITE; end ld <= #1 1'b1; end ST_WRITE: if (core_ack) if (cnt_done) begin c_state <= #1 ST_ACK; core_cmd <= #1 `I2C_CMD_READ; end else begin c_state <= #1 ST_WRITE; // stay in same state core_cmd <= #1 `I2C_CMD_WRITE; // write next bit shift <= #1 1'b1; end ST_READ: if (core_ack) begin if (cnt_done) begin c_state <= #1 ST_ACK; core_cmd <= #1 `I2C_CMD_WRITE; end else begin c_state <= #1 ST_READ; // stay in same state core_cmd <= #1 `I2C_CMD_READ; // read next bit end shift <= #1 1'b1; core_txd <= #1 ack_in; end ST_ACK: if (core_ack) begin if (stop) begin c_state <= #1 ST_STOP; core_cmd <= #1 `I2C_CMD_STOP; end else begin c_state <= #1 ST_IDLE; core_cmd <= #1 `I2C_CMD_NOP; // generate command acknowledge signal cmd_ack <= #1 1'b1; end // assign ack_out output to bit_controller_rxd (contains last received bit) ack_out <= #1 core_rxd; core_txd <= #1 1'b1; end else core_txd <= #1 ack_in; ST_STOP: if (core_ack) begin c_state <= #1 ST_IDLE; core_cmd <= #1 `I2C_CMD_NOP; // generate command acknowledge signal cmd_ack <= #1 1'b1; end endcase end endmodule bladeRF-2024.05/hdl/fpga/ip/opencores/i2c/rtl/verilog/i2c_master_defines.v000066400000000000000000000057031457144405000261300ustar00rootroot00000000000000///////////////////////////////////////////////////////////////////// //// //// //// WISHBONE rev.B2 compliant I2C Master controller defines //// //// //// //// //// //// Author: Richard Herveille //// //// richard@asics.ws //// //// www.asics.ws //// //// //// //// Downloaded from: http://www.opencores.org/projects/i2c/ //// //// //// ///////////////////////////////////////////////////////////////////// //// //// //// Copyright (C) 2001 Richard Herveille //// //// richard@asics.ws //// //// //// //// 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 SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY //// //// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED //// //// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS //// //// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR //// //// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, //// //// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES //// //// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE //// //// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR //// //// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF //// //// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT //// //// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT //// //// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE //// //// POSSIBILITY OF SUCH DAMAGE. //// //// //// ///////////////////////////////////////////////////////////////////// // CVS Log // // $Id: i2c_master_defines.v,v 1.3 2001-11-05 11:59:25 rherveille Exp $ // // $Date: 2001-11-05 11:59:25 $ // $Revision: 1.3 $ // $Author: rherveille $ // $Locker: $ // $State: Exp $ // // Change History: // $Log: not supported by cvs2svn $ // I2C registers wishbone addresses // bitcontroller states `define I2C_CMD_NOP 4'b0000 `define I2C_CMD_START 4'b0001 `define I2C_CMD_STOP 4'b0010 `define I2C_CMD_WRITE 4'b0100 `define I2C_CMD_READ 4'b1000 bladeRF-2024.05/hdl/fpga/ip/opencores/i2c/rtl/verilog/i2c_master_top.v000066400000000000000000000235261457144405000253200ustar00rootroot00000000000000///////////////////////////////////////////////////////////////////// //// //// //// WISHBONE revB.2 compliant I2C Master controller Top-level //// //// //// //// //// //// Author: Richard Herveille //// //// richard@asics.ws //// //// www.asics.ws //// //// //// //// Downloaded from: http://www.opencores.org/projects/i2c/ //// //// //// ///////////////////////////////////////////////////////////////////// //// //// //// Copyright (C) 2001 Richard Herveille //// //// richard@asics.ws //// //// //// //// 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 SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY //// //// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED //// //// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS //// //// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR //// //// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, //// //// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES //// //// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE //// //// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR //// //// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF //// //// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT //// //// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT //// //// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE //// //// POSSIBILITY OF SUCH DAMAGE. //// //// //// ///////////////////////////////////////////////////////////////////// // CVS Log // // $Id: i2c_master_top.v,v 1.12 2009-01-19 20:29:26 rherveille Exp $ // // $Date: 2009-01-19 20:29:26 $ // $Revision: 1.12 $ // $Author: rherveille $ // $Locker: $ // $State: Exp $ // // Change History: // Revision 1.11 2005/02/27 09:26:24 rherveille // Fixed register overwrite issue. // Removed full_case pragma, replaced it by a default statement. // // Revision 1.10 2003/09/01 10:34:38 rherveille // Fix a blocking vs. non-blocking error in the wb_dat output mux. // // Revision 1.9 2003/01/09 16:44:45 rherveille // Fixed a bug in the Command Register declaration. // // Revision 1.8 2002/12/26 16:05:12 rherveille // Small code simplifications // // Revision 1.7 2002/12/26 15:02:32 rherveille // Core is now a Multimaster I2C controller // // Revision 1.6 2002/11/30 22:24:40 rherveille // Cleaned up code // // Revision 1.5 2001/11/10 10:52:55 rherveille // Changed PRER reset value from 0x0000 to 0xffff, conform specs. // // synopsys translate_off `include "timescale.v" // synopsys translate_on `include "i2c_master_defines.v" module i2c_master_top( wb_clk_i, wb_rst_i, arst_i, wb_adr_i, wb_dat_i, wb_dat_o, wb_we_i, wb_stb_i, wb_cyc_i, wb_ack_o, wb_inta_o, scl_pad_i, scl_pad_o, scl_padoen_o, sda_pad_i, sda_pad_o, sda_padoen_o ); // parameters parameter ARST_LVL = 0; // asynchronous reset level // // inputs & outputs // // wishbone signals input wb_clk_i; // master clock input input wb_rst_i; // synchronous active high reset input arst_i; // asynchronous reset input [2:0] wb_adr_i; // lower address bits input [7:0] wb_dat_i; // databus input output [7:0] wb_dat_o; // databus output input wb_we_i; // write enable input input wb_stb_i; // stobe/core select signal input wb_cyc_i; // valid bus cycle input output wb_ack_o; // bus cycle acknowledge output output wb_inta_o; // interrupt request signal output reg [7:0] wb_dat_o; reg wb_ack_o; reg wb_inta_o; // I2C signals // i2c clock line input scl_pad_i; // SCL-line input output scl_pad_o; // SCL-line output (always 1'b0) output scl_padoen_o; // SCL-line output enable (active low) // i2c data line input sda_pad_i; // SDA-line input output sda_pad_o; // SDA-line output (always 1'b0) output sda_padoen_o; // SDA-line output enable (active low) // // variable declarations // // registers reg [15:0] prer; // clock prescale register reg [ 7:0] ctr; // control register reg [ 7:0] txr; // transmit register wire [ 7:0] rxr; // receive register reg [ 7:0] cr; // command register wire [ 7:0] sr; // status register // done signal: command completed, clear command register wire done; // core enable signal wire core_en; wire ien; // status register signals wire irxack; reg rxack; // received aknowledge from slave reg tip; // transfer in progress reg irq_flag; // interrupt pending flag wire i2c_busy; // bus busy (start signal detected) wire i2c_al; // i2c bus arbitration lost reg al; // status register arbitration lost bit // // module body // // generate internal reset wire rst_i = arst_i ^ ARST_LVL[0]; // generate wishbone signals wire wb_wacc = wb_we_i & wb_ack_o; // generate acknowledge output signal always @(posedge wb_clk_i) wb_ack_o <= #1 wb_cyc_i & wb_stb_i & ~wb_ack_o; // because timing is always honored // assign DAT_O always @(posedge wb_clk_i) begin case (wb_adr_i) // synopsys parallel_case 3'b000: wb_dat_o <= #1 prer[ 7:0]; 3'b001: wb_dat_o <= #1 prer[15:8]; 3'b010: wb_dat_o <= #1 ctr; 3'b011: wb_dat_o <= #1 rxr; // write is transmit register (txr) 3'b100: wb_dat_o <= #1 sr; // write is command register (cr) 3'b101: wb_dat_o <= #1 txr; 3'b110: wb_dat_o <= #1 cr; 3'b111: wb_dat_o <= #1 0; // reserved endcase end // generate registers always @(posedge wb_clk_i or negedge rst_i) if (!rst_i) begin prer <= #1 16'hffff; ctr <= #1 8'h0; txr <= #1 8'h0; end else if (wb_rst_i) begin prer <= #1 16'hffff; ctr <= #1 8'h0; txr <= #1 8'h0; end else if (wb_wacc) case (wb_adr_i) // synopsys parallel_case 3'b000 : prer [ 7:0] <= #1 wb_dat_i; 3'b001 : prer [15:8] <= #1 wb_dat_i; 3'b010 : ctr <= #1 wb_dat_i; 3'b011 : txr <= #1 wb_dat_i; default: ; endcase // generate command register (special case) always @(posedge wb_clk_i or negedge rst_i) if (!rst_i) cr <= #1 8'h0; else if (wb_rst_i) cr <= #1 8'h0; else if (wb_wacc) begin if (core_en & (wb_adr_i == 3'b100) ) cr <= #1 wb_dat_i; end else begin if (done | i2c_al) cr[7:4] <= #1 4'h0; // clear command bits when done // or when aribitration lost cr[2:1] <= #1 2'b0; // reserved bits cr[0] <= #1 1'b0; // clear IRQ_ACK bit end // decode command register wire sta = cr[7]; wire sto = cr[6]; wire rd = cr[5]; wire wr = cr[4]; wire ack = cr[3]; wire iack = cr[0]; // decode control register assign core_en = ctr[7]; assign ien = ctr[6]; // hookup byte controller block i2c_master_byte_ctrl byte_controller ( .clk ( wb_clk_i ), .rst ( wb_rst_i ), .nReset ( rst_i ), .ena ( core_en ), .clk_cnt ( prer ), .start ( sta ), .stop ( sto ), .read ( rd ), .write ( wr ), .ack_in ( ack ), .din ( txr ), .cmd_ack ( done ), .ack_out ( irxack ), .dout ( rxr ), .i2c_busy ( i2c_busy ), .i2c_al ( i2c_al ), .scl_i ( scl_pad_i ), .scl_o ( scl_pad_o ), .scl_oen ( scl_padoen_o ), .sda_i ( sda_pad_i ), .sda_o ( sda_pad_o ), .sda_oen ( sda_padoen_o ) ); // status register block + interrupt request signal always @(posedge wb_clk_i or negedge rst_i) if (!rst_i) begin al <= #1 1'b0; rxack <= #1 1'b0; tip <= #1 1'b0; irq_flag <= #1 1'b0; end else if (wb_rst_i) begin al <= #1 1'b0; rxack <= #1 1'b0; tip <= #1 1'b0; irq_flag <= #1 1'b0; end else begin al <= #1 i2c_al | (al & ~sta); rxack <= #1 irxack; tip <= #1 (rd | wr); irq_flag <= #1 (done | i2c_al | irq_flag) & ~iack; // interrupt request flag is always generated end // generate interrupt request signals always @(posedge wb_clk_i or negedge rst_i) if (!rst_i) wb_inta_o <= #1 1'b0; else if (wb_rst_i) wb_inta_o <= #1 1'b0; else wb_inta_o <= #1 irq_flag && ien; // interrupt signal is only generated when IEN (interrupt enable bit is set) // assign status register bits assign sr[7] = rxack; assign sr[6] = i2c_busy; assign sr[5] = al; assign sr[4:2] = 3'h0; // reserved assign sr[1] = tip; assign sr[0] = irq_flag; endmodule bladeRF-2024.05/hdl/fpga/ip/opencores/i2c/rtl/verilog/timescale.v000066400000000000000000000000271457144405000243430ustar00rootroot00000000000000`timescale 1ns / 10ps bladeRF-2024.05/hdl/fpga/ip/opencores/i2c/rtl/vhdl/000077500000000000000000000000001457144405000214755ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/opencores/i2c/rtl/vhdl/I2C.VHD000066400000000000000000000323461457144405000224250ustar00rootroot00000000000000-- -- Simple I2C controller -- -- 1) No multimaster -- 2) No slave mode -- 3) No fifo's -- -- notes: -- Every command is acknowledged. Do not set a new command before previous is acknowledged. -- Dout is available 1 clock cycle later as cmd_ack -- library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; package I2C is component simple_i2c is port ( clk : in std_logic; ena : in std_logic; nReset : in std_logic; clk_cnt : in unsigned(7 downto 0); -- 4x SCL -- input signals start, stop, read, write, ack_in : std_logic; Din : in std_logic_vector(7 downto 0); -- output signals cmd_ack : out std_logic; ack_out : out std_logic; Dout : out std_logic_vector(7 downto 0); -- i2c signals SCL : inout std_logic; SDA : inout std_logic ); end component simple_i2c; end package I2C; library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; entity simple_i2c is port ( clk : in std_logic; ena : in std_logic; nReset : in std_logic; clk_cnt : in unsigned(7 downto 0); -- 4x SCL -- input signals start, stop, read, write, ack_in : std_logic; Din : in std_logic_vector(7 downto 0); -- output signals cmd_ack : out std_logic; ack_out : out std_logic; Dout : out std_logic_vector(7 downto 0); -- i2c signals SCL : inout std_logic; SDA : inout std_logic ); end entity simple_i2c; architecture structural of simple_i2c is component i2c_core is port ( clk : in std_logic; nReset : in std_logic; clk_cnt : in unsigned(7 downto 0); cmd : in std_logic_vector(2 downto 0); cmd_ack : out std_logic; busy : out std_logic; Din : in std_logic; Dout : out std_logic; SCL : inout std_logic; SDA : inout std_logic ); end component i2c_core; -- commands for i2c_core constant CMD_NOP : std_logic_vector(2 downto 0) := "000"; constant CMD_START : std_logic_vector(2 downto 0) := "010"; constant CMD_STOP : std_logic_vector(2 downto 0) := "011"; constant CMD_READ : std_logic_vector(2 downto 0) := "100"; constant CMD_WRITE : std_logic_vector(2 downto 0) := "101"; -- signals for i2c_core signal core_cmd : std_logic_vector(2 downto 0); signal core_ack, core_busy, core_txd, core_rxd : std_logic; -- signals for shift register signal sr : std_logic_vector(7 downto 0); -- 8bit shift register signal shift, ld : std_logic; -- signals for state machine signal go, host_ack : std_logic; begin -- hookup i2c core u1: i2c_core port map (clk, nReset, clk_cnt, core_cmd, core_ack, core_busy, core_txd, core_rxd, SCL, SDA); -- generate host-command-acknowledge cmd_ack <= host_ack; -- generate go-signal go <= (read or write) and not host_ack; -- assign Dout output to shift-register Dout <= sr; -- assign ack_out output to core_rxd (contains last received bit) ack_out <= core_rxd; -- generate shift register shift_register: process(clk) begin if (clk'event and clk = '1') then if (ld = '1') then sr <= din; elsif (shift = '1') then sr <= (sr(6 downto 0) & core_rxd); end if; end if; end process shift_register; -- -- state machine -- statemachine : block type states is (st_idle, st_start, st_read, st_write, st_ack, st_stop); signal state : states; signal dcnt : unsigned(2 downto 0); begin -- -- command interpreter, translate complex commands into simpler I2C commands -- nxt_state_decoder: process(clk, nReset, state) variable nxt_state : states; variable idcnt : unsigned(2 downto 0); variable ihost_ack : std_logic; variable icore_cmd : std_logic_vector(2 downto 0); variable icore_txd : std_logic; variable ishift, iload : std_logic; begin -- 8 databits (1byte) of data to shift-in/out idcnt := dcnt; -- no acknowledge (until command complete) ihost_ack := '0'; icore_txd := core_txd; -- keep current command to i2c_core icore_cmd := core_cmd; -- no shifting or loading of shift-register ishift := '0'; iload := '0'; -- keep current state; nxt_state := state; case state is when st_idle => if (go = '1') then if (start = '1') then nxt_state := st_start; icore_cmd := CMD_START; elsif (read = '1') then nxt_state := st_read; icore_cmd := CMD_READ; idcnt := "111"; else nxt_state := st_write; icore_cmd := CMD_WRITE; idcnt := "111"; iload := '1'; end if; end if; when st_start => if (core_ack = '1') then if (read = '1') then nxt_state := st_read; icore_cmd := CMD_READ; idcnt := "111"; else nxt_state := st_write; icore_cmd := CMD_WRITE; idcnt := "111"; iload := '1'; end if; end if; when st_write => if (core_ack = '1') then idcnt := dcnt -1; -- count down Data_counter icore_txd := sr(7); if (dcnt = 0) then nxt_state := st_ack; icore_cmd := CMD_READ; else ishift := '1'; -- icore_txd := sr(7); end if; end if; when st_read => if (core_ack = '1') then idcnt := dcnt -1; -- count down Data_counter ishift := '1'; if (dcnt = 0) then nxt_state := st_ack; icore_cmd := CMD_WRITE; icore_txd := ack_in; end if; end if; when st_ack => if (core_ack = '1') then -- generate command acknowledge signal ihost_ack := '1'; -- Perform an additional shift, needed for 'read' (store last received bit in shift register) ishift := '1'; -- check for stop; Should a STOP command be generated ? if (stop = '1') then nxt_state := st_stop; icore_cmd := CMD_STOP; else nxt_state := st_idle; icore_cmd := CMD_NOP; end if; end if; when st_stop => if (core_ack = '1') then nxt_state := st_idle; icore_cmd := CMD_NOP; end if; when others => -- illegal states nxt_state := st_idle; icore_cmd := CMD_NOP; end case; -- generate registers if (nReset = '0') then core_cmd <= CMD_NOP; core_txd <= '0'; shift <= '0'; ld <= '0'; dcnt <= "111"; host_ack <= '0'; state <= st_idle; elsif (clk'event and clk = '1') then if (ena = '1') then state <= nxt_state; dcnt <= idcnt; shift <= ishift; ld <= iload; core_cmd <= icore_cmd; core_txd <= icore_txd; host_ack <= ihost_ack; end if; end if; end process nxt_state_decoder; end block statemachine; end architecture structural; -- -- -- I2C Core -- -- Translate simple commands into SCL/SDA transitions -- Each command has 5 states, A/B/C/D/idle -- -- start: SCL ~~~~~~~~~~\____ -- SDA ~~~~~~~~\______ -- x | A | B | C | D | i -- -- repstart SCL ____/~~~~\___ -- SDA __/~~~\______ -- x | A | B | C | D | i -- -- stop SCL ____/~~~~~~~~ -- SDA ==\____/~~~~~ -- x | A | B | C | D | i -- --- write SCL ____/~~~~\____ -- SDA ==X=========X= -- x | A | B | C | D | i -- --- read SCL ____/~~~~\____ -- SDA XXXX=====XXXX -- x | A | B | C | D | i -- -- Timing: Normal mode Fast mode ----------------------------------------------------------------- -- Fscl 100KHz 400KHz -- Th_scl 4.0us 0.6us High period of SCL -- Tl_scl 4.7us 1.3us Low period of SCL -- Tsu:sta 4.7us 0.6us setup time for a repeated start condition -- Tsu:sto 4.0us 0.6us setup time for a stop conditon -- Tbuf 4.7us 1.3us Bus free time between a stop and start condition -- library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; entity i2c_core is port ( clk : in std_logic; nReset : in std_logic; clk_cnt : in unsigned(7 downto 0); cmd : in std_logic_vector(2 downto 0); cmd_ack : out std_logic; busy : out std_logic; Din : in std_logic; Dout : out std_logic; SCL : inout std_logic; SDA : inout std_logic ); end entity i2c_core; architecture structural of i2c_core is constant CMD_NOP : std_logic_vector(2 downto 0) := "000"; constant CMD_START : std_logic_vector(2 downto 0) := "010"; constant CMD_STOP : std_logic_vector(2 downto 0) := "011"; constant CMD_READ : std_logic_vector(2 downto 0) := "100"; constant CMD_WRITE : std_logic_vector(2 downto 0) := "101"; type cmds is (idle, start_a, start_b, start_c, start_d, stop_a, stop_b, stop_c, rd_a, rd_b, rd_c, rd_d, wr_a, wr_b, wr_c, wr_d); signal state : cmds; signal SDAo, SCLo : std_logic; signal txd : std_logic; signal clk_en, slave_wait :std_logic; signal cnt : unsigned(7 downto 0) := clk_cnt; begin -- whenever the slave is not ready it can delay the cycle by pulling SCL low slave_wait <= '1' when ((SCLo = '1') and (SCL = '0')) else '0'; -- generate clk enable signal gen_clken: process(clk, nReset) begin if (nReset = '0') then cnt <= (others => '0'); clk_en <= '1'; --'0'; elsif (clk'event and clk = '1') then if (cnt = 0) then clk_en <= '1'; cnt <= clk_cnt; else if (slave_wait = '0') then cnt <= cnt -1; end if; clk_en <= '0'; end if; end if; end process gen_clken; -- generate statemachine nxt_state_decoder : process (clk, nReset, state, cmd, SDA) variable nxt_state : cmds; variable icmd_ack, ibusy, store_sda : std_logic; variable itxd : std_logic; begin nxt_state := state; icmd_ack := '0'; -- default no acknowledge ibusy := '1'; -- default busy store_sda := '0'; itxd := txd; case (state) is -- idle when idle => case cmd is when CMD_START => nxt_state := start_a; icmd_ack := '1'; -- command completed when CMD_STOP => nxt_state := stop_a; icmd_ack := '1'; -- command completed when CMD_WRITE => nxt_state := wr_a; icmd_ack := '1'; -- command completed itxd := Din; when CMD_READ => nxt_state := rd_a; icmd_ack := '1'; -- command completed when others => nxt_state := idle; -- don't acknowledge NOP command icmd_ack := '1'; -- command completed ibusy := '0'; end case; -- start when start_a => nxt_state := start_b; when start_b => nxt_state := start_c; when start_c => nxt_state := start_d; when start_d => nxt_state := idle; ibusy := '0'; -- not busy when idle -- stop when stop_a => nxt_state := stop_b; when stop_b => nxt_state := stop_c; when stop_c => -- nxt_state := stop_d; -- when stop_d => nxt_state := idle; ibusy := '0'; -- not busy when idle -- read when rd_a => nxt_state := rd_b; when rd_b => nxt_state := rd_c; when rd_c => nxt_state := rd_d; store_sda := '1'; when rd_d => nxt_state := idle; ibusy := '0'; -- not busy when idle -- write when wr_a => nxt_state := wr_b; when wr_b => nxt_state := wr_c; when wr_c => nxt_state := wr_d; when wr_d => nxt_state := idle; ibusy := '0'; -- not busy when idle end case; -- generate regs if (nReset = '0') then state <= idle; cmd_ack <= '0'; busy <= '0'; txd <= '0'; Dout <= '0'; elsif (clk'event and clk = '1') then if (clk_en = '1') then state <= nxt_state; busy <= ibusy; txd <= itxd; if (store_sda = '1') then Dout <= SDA; end if; end if; cmd_ack <= icmd_ack and clk_en; end if; end process nxt_state_decoder; -- -- convert states to SCL and SDA signals -- output_decoder: process (clk, nReset, state) variable iscl, isda : std_logic; begin case (state) is when idle => iscl := SCLo; -- keep SCL in same state isda := SDA; -- keep SDA in same state -- start when start_a => iscl := SCLo; -- keep SCL in same state (for repeated start) isda := '1'; -- set SDA high when start_b => iscl := '1'; -- set SCL high isda := '1'; -- keep SDA high when start_c => iscl := '1'; -- keep SCL high isda := '0'; -- sel SDA low when start_d => iscl := '0'; -- set SCL low isda := '0'; -- keep SDA low -- stop when stop_a => iscl := '0'; -- keep SCL disabled isda := '0'; -- set SDA low when stop_b => iscl := '1'; -- set SCL high isda := '0'; -- keep SDA low when stop_c => iscl := '1'; -- keep SCL high isda := '1'; -- set SDA high -- write when wr_a => iscl := '0'; -- keep SCL low -- isda := txd; -- set SDA isda := Din; when wr_b => iscl := '1'; -- set SCL high -- isda := txd; -- set SDA isda := Din; when wr_c => iscl := '1'; -- keep SCL high -- isda := txd; -- set SDA isda := Din; when wr_d => iscl := '0'; -- set SCL low -- isda := txd; -- set SDA isda := Din; -- read when rd_a => iscl := '0'; -- keep SCL low isda := '1'; -- tri-state SDA when rd_b => iscl := '1'; -- set SCL high isda := '1'; -- tri-state SDA when rd_c => iscl := '1'; -- keep SCL high isda := '1'; -- tri-state SDA when rd_d => iscl := '0'; -- set SCL low isda := '1'; -- tri-state SDA end case; -- generate registers if (nReset = '0') then SCLo <= '1'; SDAo <= '1'; elsif (clk'event and clk = '1') then if (clk_en = '1') then SCLo <= iscl; SDAo <= isda; end if; end if; end process output_decoder; SCL <= '0' when (SCLo = '0') else 'Z'; -- since SCL is externally pulled-up convert a '1' to a 'Z'(tri-state) SDA <= '0' when (SDAo = '0') else 'Z'; -- since SDA is externally pulled-up convert a '1' to a 'Z'(tri-state) -- SCL <= SCLo; -- SDA <= SDAo; end architecture structural; bladeRF-2024.05/hdl/fpga/ip/opencores/i2c/rtl/vhdl/i2c_master_bit_ctrl.vhd000066400000000000000000000576551457144405000261340ustar00rootroot00000000000000--------------------------------------------------------------------- ---- ---- ---- WISHBONE revB2 I2C Master Core; bit-controller ---- ---- ---- ---- ---- ---- Author: Richard Herveille ---- ---- richard@asics.ws ---- ---- www.asics.ws ---- ---- ---- ---- Downloaded from: http://www.opencores.org/projects/i2c/ ---- ---- ---- --------------------------------------------------------------------- ---- ---- ---- Copyright (C) 2000 Richard Herveille ---- ---- richard@asics.ws ---- ---- ---- ---- 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 SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY ---- ---- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ---- ---- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS ---- ---- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR ---- ---- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, ---- ---- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ---- ---- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ---- ---- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR ---- ---- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ---- ---- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ---- ---- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ---- ---- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ---- ---- POSSIBILITY OF SUCH DAMAGE. ---- ---- ---- --------------------------------------------------------------------- -- CVS Log -- -- $Id: i2c_master_bit_ctrl.vhd,v 1.17 2009-02-04 20:17:34 rherveille Exp $ -- -- $Date: 2009-02-04 20:17:34 $ -- $Revision: 1.17 $ -- $Author: rherveille $ -- $Locker: $ -- $State: Exp $ -- -- Change History: -- $Log: not supported by cvs2svn $ -- Revision 1.16 2009/01/20 20:40:36 rherveille -- Fixed type iscl_oen instead of scl_oen -- -- Revision 1.15 2009/01/20 10:34:51 rherveille -- Added SCL clock synchronization logic -- Fixed slave_wait signal generation -- -- Revision 1.14 2006/10/11 12:10:13 rherveille -- Added missing semicolons ';' on endif -- -- Revision 1.13 2006/10/06 10:48:24 rherveille -- fixed short scl high pulse after clock stretch -- -- Revision 1.12 2004/05/07 11:53:31 rherveille -- Fixed previous fix :) Made a variable vs signal mistake. -- -- Revision 1.11 2004/05/07 11:04:00 rherveille -- Fixed a bug where the core would signal an arbitration lost (AL bit set), when another master controls the bus and the other master generates a STOP bit. -- -- Revision 1.10 2004/02/27 07:49:43 rherveille -- Fixed a bug in the arbitration-lost signal generation. VHDL version only. -- -- Revision 1.9 2003/08/12 14:48:37 rherveille -- Forgot an 'end if' :-/ -- -- Revision 1.8 2003/08/09 07:01:13 rherveille -- Fixed a bug in the Arbitration Lost generation caused by delay on the (external) sda line. -- Fixed a potential bug in the byte controller's host-acknowledge generation. -- -- Revision 1.7 2003/02/05 00:06:02 rherveille -- Fixed a bug where the core would trigger an erroneous 'arbitration lost' interrupt after being reset, when the reset pulse width < 3 clk cycles. -- -- Revision 1.6 2003/02/01 02:03:06 rherveille -- Fixed a few 'arbitration lost' bugs. VHDL version only. -- -- Revision 1.5 2002/12/26 16:05:47 rherveille -- Core is now a Multimaster I2C controller. -- -- Revision 1.4 2002/11/30 22:24:37 rherveille -- Cleaned up code -- -- Revision 1.3 2002/10/30 18:09:53 rherveille -- Fixed some reported minor start/stop generation timing issuess. -- -- Revision 1.2 2002/06/15 07:37:04 rherveille -- Fixed a small timing bug in the bit controller.\nAdded verilog simulation environment. -- -- Revision 1.1 2001/11/05 12:02:33 rherveille -- Split i2c_master_core.vhd into separate files for each entity; same layout as verilog version. -- Code updated, is now up-to-date to doc. rev.0.4. -- Added headers. -- -- ------------------------------------- -- Bit controller section ------------------------------------ -- -- Translate simple commands into SCL/SDA transitions -- Each command has 5 states, A/B/C/D/idle -- -- start: SCL ~~~~~~~~~~~~~~\____ -- SDA XX/~~~~~~~\______ -- x | A | B | C | D | i -- -- repstart SCL ______/~~~~~~~\___ -- SDA __/~~~~~~~\______ -- x | A | B | C | D | i -- -- stop SCL _______/~~~~~~~~~~~ -- SDA ==\___________/~~~~~ -- x | A | B | C | D | i -- --- write SCL ______/~~~~~~~\____ -- SDA XXX===============XX -- x | A | B | C | D | i -- --- read SCL ______/~~~~~~~\____ -- SDA XXXXXXX=XXXXXXXXXXX -- x | A | B | C | D | i -- -- Timing: Normal mode Fast mode ----------------------------------------------------------------- -- Fscl 100KHz 400KHz -- Th_scl 4.0us 0.6us High period of SCL -- Tl_scl 4.7us 1.3us Low period of SCL -- Tsu:sta 4.7us 0.6us setup time for a repeated start condition -- Tsu:sto 4.0us 0.6us setup time for a stop conditon -- Tbuf 4.7us 1.3us Bus free time between a stop and start condition -- library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity i2c_master_bit_ctrl is port ( clk : in std_logic; rst : in std_logic; nReset : in std_logic; ena : in std_logic; -- core enable signal clk_cnt : in unsigned(15 downto 0); -- clock prescale value cmd : in std_logic_vector(3 downto 0); cmd_ack : out std_logic; -- command completed busy : out std_logic; -- i2c bus busy al : out std_logic; -- arbitration lost din : in std_logic; dout : out std_logic; -- i2c lines scl_i : in std_logic; -- i2c clock line input scl_o : out std_logic; -- i2c clock line output scl_oen : out std_logic; -- i2c clock line output enable, active low sda_i : in std_logic; -- i2c data line input sda_o : out std_logic; -- i2c data line output sda_oen : out std_logic -- i2c data line output enable, active low ); end entity i2c_master_bit_ctrl; architecture structural of i2c_master_bit_ctrl is constant I2C_CMD_NOP : std_logic_vector(3 downto 0) := "0000"; constant I2C_CMD_START : std_logic_vector(3 downto 0) := "0001"; constant I2C_CMD_STOP : std_logic_vector(3 downto 0) := "0010"; constant I2C_CMD_READ : std_logic_vector(3 downto 0) := "0100"; constant I2C_CMD_WRITE : std_logic_vector(3 downto 0) := "1000"; type states is (idle, start_a, start_b, start_c, start_d, start_e, stop_a, stop_b, stop_c, stop_d, rd_a, rd_b, rd_c, rd_d, wr_a, wr_b, wr_c, wr_d); signal c_state : states; signal iscl_oen, isda_oen : std_logic; -- internal I2C lines signal sda_chk : std_logic; -- check SDA status (multi-master arbitration) signal dscl_oen : std_logic; -- delayed scl_oen signals signal sSCL, sSDA : std_logic; -- synchronized SCL and SDA inputs signal dSCL, dSDA : std_logic; -- delayed versions ofsSCL and sSDA signal clk_en : std_logic; -- statemachine clock enable signal scl_sync, slave_wait : std_logic; -- clock generation signals signal ial : std_logic; -- internal arbitration lost signal signal cnt : unsigned(15 downto 0); -- clock divider counter (synthesis) begin -- whenever the slave is not ready it can delay the cycle by pulling SCL low -- delay scl_oen process (clk, nReset) begin if (nReset = '0') then dscl_oen <= '0'; elsif (clk'event and clk = '1') then dscl_oen <= iscl_oen; end if; end process; -- slave_wait is asserted when master wants to drive SCL high, but the slave pulls it low -- slave_wait remains asserted until the slave releases SCL process (clk, nReset) begin if (nReset = '0') then slave_wait <= '0'; elsif (clk'event and clk = '1') then slave_wait <= (iscl_oen and not dscl_oen and not sSCL) or (slave_wait and not sSCL); end if; end process; -- master drives SCL high, but another master pulls it low -- master start counting down its low cycle now (clock synchronization) scl_sync <= dSCL and not sSCL and iscl_oen; -- generate clk enable signal gen_clken: process(clk, nReset) begin if (nReset = '0') then cnt <= (others => '0'); clk_en <= '1'; elsif (clk'event and clk = '1') then if ((rst = '1') or (cnt = 0) or (ena = '0') or (scl_sync = '1')) then cnt <= clk_cnt; clk_en <= '1'; elsif (slave_wait = '1') then cnt <= cnt; clk_en <= '0'; else cnt <= cnt -1; clk_en <= '0'; end if; end if; end process gen_clken; -- generate bus status controller bus_status_ctrl: block signal cSCL, cSDA : std_logic_vector( 1 downto 0); -- capture SDA and SCL signal fSCL, fSDA : std_logic_vector( 2 downto 0); -- filter inputs for SCL and SDA signal filter_cnt : unsigned(13 downto 0); -- clock divider for filter signal sta_condition : std_logic; -- start detected signal sto_condition : std_logic; -- stop detected signal cmd_stop : std_logic; -- STOP command signal ibusy : std_logic; -- internal busy signal begin -- capture SCL and SDA capture_scl_sda: process(clk, nReset) begin if (nReset = '0') then cSCL <= "00"; cSDA <= "00"; elsif (clk'event and clk = '1') then if (rst = '1') then cSCL <= "00"; cSDA <= "00"; else cSCL <= (cSCL(0) & scl_i); cSDA <= (cSDA(0) & sda_i); end if; end if; end process capture_scl_sda; -- filter SCL and SDA; (attempt to) remove glitches filter_divider: process(clk, nReset) begin if (nReset = '0') then filter_cnt <= (others => '0'); elsif (clk'event and clk = '1') then if ( (rst = '1') or (ena = '0') ) then filter_cnt <= (others => '0'); elsif (filter_cnt = 0) then filter_cnt <= clk_cnt(15 downto 2); else filter_cnt <= filter_cnt -1; end if; end if; end process filter_divider; filter_scl_sda: process(clk, nReset) begin if (nReset = '0') then fSCL <= (others => '1'); fSDA <= (others => '1'); elsif (clk'event and clk = '1') then if (rst = '1') then fSCL <= (others => '1'); fSDA <= (others => '1'); elsif (filter_cnt = 0) then fSCL <= (fSCL(1 downto 0) & cSCL(1)); fSDA <= (fSDA(1 downto 0) & cSDA(1)); end if; end if; end process filter_scl_sda; -- generate filtered SCL and SDA signals scl_sda: process(clk, nReset) begin if (nReset = '0') then sSCL <= '1'; sSDA <= '1'; dSCL <= '1'; dSDA <= '1'; elsif (clk'event and clk = '1') then if (rst = '1') then sSCL <= '1'; sSDA <= '1'; dSCL <= '1'; dSDA <= '1'; else sSCL <= (fSCL(2) and fSCL(1)) or (fSCL(2) and fSCL(0)) or (fSCL(1) and fSCL(0)); sSDA <= (fSDA(2) and fSDA(1)) or (fSDA(2) and fSDA(0)) or (fSDA(1) and fSDA(0)); dSCL <= sSCL; dSDA <= sSDA; end if; end if; end process scl_sda; -- detect start condition => detect falling edge on SDA while SCL is high -- detect stop condition => detect rising edge on SDA while SCL is high detect_sta_sto: process(clk, nReset) begin if (nReset = '0') then sta_condition <= '0'; sto_condition <= '0'; elsif (clk'event and clk = '1') then if (rst = '1') then sta_condition <= '0'; sto_condition <= '0'; else sta_condition <= (not sSDA and dSDA) and sSCL; sto_condition <= (sSDA and not dSDA) and sSCL; end if; end if; end process detect_sta_sto; -- generate i2c-bus busy signal gen_busy: process(clk, nReset) begin if (nReset = '0') then ibusy <= '0'; elsif (clk'event and clk = '1') then if (rst = '1') then ibusy <= '0'; else ibusy <= (sta_condition or ibusy) and not sto_condition; end if; end if; end process gen_busy; busy <= ibusy; -- generate arbitration lost signal -- aribitration lost when: -- 1) master drives SDA high, but the i2c bus is low -- 2) stop detected while not requested (detect during 'idle' state) gen_al: process(clk, nReset) begin if (nReset = '0') then cmd_stop <= '0'; ial <= '0'; elsif (clk'event and clk = '1') then if (rst = '1') then cmd_stop <= '0'; ial <= '0'; else if (clk_en = '1') then if (cmd = I2C_CMD_STOP) then cmd_stop <= '1'; else cmd_stop <= '0'; end if; end if; if (c_state = idle) then ial <= (sda_chk and not sSDA and isda_oen) or (sto_condition and not cmd_stop); else ial <= (sda_chk and not sSDA and isda_oen); end if; end if; end if; end process gen_al; al <= ial; -- generate dout signal, store dout on rising edge of SCL gen_dout: process(clk, nReset) begin if (nReset = '0') then dout <= '0'; elsif (clk'event and clk = '1') then if (sSCL = '1' and dSCL = '0') then dout <= sSDA; end if; end if; end process gen_dout; end block bus_status_ctrl; -- generate statemachine nxt_state_decoder : process (clk, nReset) begin if (nReset = '0') then c_state <= idle; cmd_ack <= '0'; iscl_oen <= '1'; isda_oen <= '1'; sda_chk <= '0'; elsif (clk'event and clk = '1') then if (rst = '1' or ial = '1') then c_state <= idle; cmd_ack <= '0'; iscl_oen <= '1'; isda_oen <= '1'; sda_chk <= '0'; else cmd_ack <= '0'; -- default no acknowledge if (clk_en = '1') then case (c_state) is -- idle when idle => case cmd is when I2C_CMD_START => c_state <= start_a; when I2C_CMD_STOP => c_state <= stop_a; when I2C_CMD_WRITE => c_state <= wr_a; when I2C_CMD_READ => c_state <= rd_a; when others => c_state <= idle; -- NOP command end case; iscl_oen <= iscl_oen; -- keep SCL in same state isda_oen <= isda_oen; -- keep SDA in same state sda_chk <= '0'; -- don't check SDA -- start when start_a => c_state <= start_b; iscl_oen <= iscl_oen; -- keep SCL in same state (for repeated start) isda_oen <= '1'; -- set SDA high sda_chk <= '0'; -- don't check SDA when start_b => c_state <= start_c; iscl_oen <= '1'; -- set SCL high isda_oen <= '1'; -- keep SDA high sda_chk <= '0'; -- don't check SDA when start_c => c_state <= start_d; iscl_oen <= '1'; -- keep SCL high isda_oen <= '0'; -- set SDA low sda_chk <= '0'; -- don't check SDA when start_d => c_state <= start_e; iscl_oen <= '1'; -- keep SCL high isda_oen <= '0'; -- keep SDA low sda_chk <= '0'; -- don't check SDA when start_e => c_state <= idle; cmd_ack <= '1'; -- command completed iscl_oen <= '0'; -- set SCL low isda_oen <= '0'; -- keep SDA low sda_chk <= '0'; -- don't check SDA -- stop when stop_a => c_state <= stop_b; iscl_oen <= '0'; -- keep SCL low isda_oen <= '0'; -- set SDA low sda_chk <= '0'; -- don't check SDA when stop_b => c_state <= stop_c; iscl_oen <= '1'; -- set SCL high isda_oen <= '0'; -- keep SDA low sda_chk <= '0'; -- don't check SDA when stop_c => c_state <= stop_d; iscl_oen <= '1'; -- keep SCL high isda_oen <= '0'; -- keep SDA low sda_chk <= '0'; -- don't check SDA when stop_d => c_state <= idle; cmd_ack <= '1'; -- command completed iscl_oen <= '1'; -- keep SCL high isda_oen <= '1'; -- set SDA high sda_chk <= '0'; -- don't check SDA -- read when rd_a => c_state <= rd_b; iscl_oen <= '0'; -- keep SCL low isda_oen <= '1'; -- tri-state SDA sda_chk <= '0'; -- don't check SDA when rd_b => c_state <= rd_c; iscl_oen <= '1'; -- set SCL high isda_oen <= '1'; -- tri-state SDA sda_chk <= '0'; -- don't check SDA when rd_c => c_state <= rd_d; iscl_oen <= '1'; -- keep SCL high isda_oen <= '1'; -- tri-state SDA sda_chk <= '0'; -- don't check SDA when rd_d => c_state <= idle; cmd_ack <= '1'; -- command completed iscl_oen <= '0'; -- set SCL low isda_oen <= '1'; -- tri-state SDA sda_chk <= '0'; -- don't check SDA -- write when wr_a => c_state <= wr_b; iscl_oen <= '0'; -- keep SCL low isda_oen <= din; -- set SDA sda_chk <= '0'; -- don't check SDA (SCL low) when wr_b => c_state <= wr_c; iscl_oen <= '1'; -- set SCL high isda_oen <= din; -- keep SDA sda_chk <= '0'; -- don't check SDA yet -- Allow some more time for SDA and SCL to settle when wr_c => c_state <= wr_d; iscl_oen <= '1'; -- keep SCL high isda_oen <= din; -- keep SDA sda_chk <= '1'; -- check SDA when wr_d => c_state <= idle; cmd_ack <= '1'; -- command completed iscl_oen <= '0'; -- set SCL low isda_oen <= din; -- keep SDA sda_chk <= '0'; -- don't check SDA (SCL low) when others => end case; end if; end if; end if; end process nxt_state_decoder; -- assign outputs scl_o <= '0'; scl_oen <= iscl_oen; sda_o <= '0'; sda_oen <= isda_oen; end architecture structural; bladeRF-2024.05/hdl/fpga/ip/opencores/i2c/rtl/vhdl/i2c_master_byte_ctrl.vhd000066400000000000000000000305261457144405000263050ustar00rootroot00000000000000--------------------------------------------------------------------- ---- ---- ---- WISHBONE revB2 compl. I2C Master Core; byte-controller ---- ---- ---- ---- ---- ---- Author: Richard Herveille ---- ---- richard@asics.ws ---- ---- www.asics.ws ---- ---- ---- ---- Downloaded from: http://www.opencores.org/projects/i2c/ ---- ---- ---- --------------------------------------------------------------------- ---- ---- ---- Copyright (C) 2000 Richard Herveille ---- ---- richard@asics.ws ---- ---- ---- ---- 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 SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY ---- ---- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ---- ---- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS ---- ---- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR ---- ---- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, ---- ---- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ---- ---- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ---- ---- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR ---- ---- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ---- ---- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ---- ---- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ---- ---- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ---- ---- POSSIBILITY OF SUCH DAMAGE. ---- ---- ---- --------------------------------------------------------------------- -- CVS Log -- -- $Id: i2c_master_byte_ctrl.vhd,v 1.5 2004-02-18 11:41:48 rherveille Exp $ -- -- $Date: 2004-02-18 11:41:48 $ -- $Revision: 1.5 $ -- $Author: rherveille $ -- $Locker: $ -- $State: Exp $ -- -- Change History: -- $Log: not supported by cvs2svn $ -- Revision 1.4 2003/08/09 07:01:13 rherveille -- Fixed a bug in the Arbitration Lost generation caused by delay on the (external) sda line. -- Fixed a potential bug in the byte controller's host-acknowledge generation. -- -- Revision 1.3 2002/12/26 16:05:47 rherveille -- Core is now a Multimaster I2C controller. -- -- Revision 1.2 2002/11/30 22:24:37 rherveille -- Cleaned up code -- -- Revision 1.1 2001/11/05 12:02:33 rherveille -- Split i2c_master_core.vhd into separate files for each entity; same layout as verilog version. -- Code updated, is now up-to-date to doc. rev.0.4. -- Added headers. -- -- ------------------------------------------ -- Byte controller section ------------------------------------------ -- library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; entity i2c_master_byte_ctrl is port ( clk : in std_logic; rst : in std_logic; -- synchronous active high reset (WISHBONE compatible) nReset : in std_logic; -- asynchornous active low reset (FPGA compatible) ena : in std_logic; -- core enable signal clk_cnt : in unsigned(15 downto 0); -- 4x SCL -- input signals start, stop, read, write, ack_in : std_logic; din : in std_logic_vector(7 downto 0); -- output signals cmd_ack : out std_logic; -- command done ack_out : out std_logic; i2c_busy : out std_logic; -- arbitration lost i2c_al : out std_logic; -- i2c bus busy dout : out std_logic_vector(7 downto 0); -- i2c lines scl_i : in std_logic; -- i2c clock line input scl_o : out std_logic; -- i2c clock line output scl_oen : out std_logic; -- i2c clock line output enable, active low sda_i : in std_logic; -- i2c data line input sda_o : out std_logic; -- i2c data line output sda_oen : out std_logic -- i2c data line output enable, active low ); end entity i2c_master_byte_ctrl; architecture structural of i2c_master_byte_ctrl is component i2c_master_bit_ctrl is port ( clk : in std_logic; rst : in std_logic; nReset : in std_logic; ena : in std_logic; -- core enable signal clk_cnt : in unsigned(15 downto 0); -- clock prescale value cmd : in std_logic_vector(3 downto 0); cmd_ack : out std_logic; -- command done busy : out std_logic; -- i2c bus busy al : out std_logic; -- arbitration lost din : in std_logic; dout : out std_logic; -- i2c lines scl_i : in std_logic; -- i2c clock line input scl_o : out std_logic; -- i2c clock line output scl_oen : out std_logic; -- i2c clock line output enable, active low sda_i : in std_logic; -- i2c data line input sda_o : out std_logic; -- i2c data line output sda_oen : out std_logic -- i2c data line output enable, active low ); end component i2c_master_bit_ctrl; -- commands for bit_controller block constant I2C_CMD_NOP : std_logic_vector(3 downto 0) := "0000"; constant I2C_CMD_START : std_logic_vector(3 downto 0) := "0001"; constant I2C_CMD_STOP : std_logic_vector(3 downto 0) := "0010"; constant I2C_CMD_READ : std_logic_vector(3 downto 0) := "0100"; constant I2C_CMD_WRITE : std_logic_vector(3 downto 0) := "1000"; -- signals for bit_controller signal core_cmd : std_logic_vector(3 downto 0); signal core_ack, core_txd, core_rxd : std_logic; signal al : std_logic; -- signals for shift register signal sr : std_logic_vector(7 downto 0); -- 8bit shift register signal shift, ld : std_logic; -- signals for state machine signal go, host_ack : std_logic; signal dcnt : unsigned(2 downto 0); -- data counter signal cnt_done : std_logic; begin -- hookup bit_controller bit_ctrl: i2c_master_bit_ctrl port map( clk => clk, rst => rst, nReset => nReset, ena => ena, clk_cnt => clk_cnt, cmd => core_cmd, cmd_ack => core_ack, busy => i2c_busy, al => al, din => core_txd, dout => core_rxd, scl_i => scl_i, scl_o => scl_o, scl_oen => scl_oen, sda_i => sda_i, sda_o => sda_o, sda_oen => sda_oen ); i2c_al <= al; -- generate host-command-acknowledge cmd_ack <= host_ack; -- generate go-signal go <= (read or write or stop) and not host_ack; -- assign Dout output to shift-register dout <= sr; -- generate shift register shift_register: process(clk, nReset) begin if (nReset = '0') then sr <= (others => '0'); elsif (clk'event and clk = '1') then if (rst = '1') then sr <= (others => '0'); elsif (ld = '1') then sr <= din; elsif (shift = '1') then sr <= (sr(6 downto 0) & core_rxd); end if; end if; end process shift_register; -- generate data-counter data_cnt: process(clk, nReset) begin if (nReset = '0') then dcnt <= (others => '0'); elsif (clk'event and clk = '1') then if (rst = '1') then dcnt <= (others => '0'); elsif (ld = '1') then dcnt <= (others => '1'); -- load counter with 7 elsif (shift = '1') then dcnt <= dcnt -1; end if; end if; end process data_cnt; cnt_done <= '1' when (dcnt = 0) else '0'; -- -- state machine -- statemachine : block type states is (st_idle, st_start, st_read, st_write, st_ack, st_stop); signal c_state : states; begin -- -- command interpreter, translate complex commands into simpler I2C commands -- nxt_state_decoder: process(clk, nReset) begin if (nReset = '0') then core_cmd <= I2C_CMD_NOP; core_txd <= '0'; shift <= '0'; ld <= '0'; host_ack <= '0'; c_state <= st_idle; ack_out <= '0'; elsif (clk'event and clk = '1') then if (rst = '1' or al = '1') then core_cmd <= I2C_CMD_NOP; core_txd <= '0'; shift <= '0'; ld <= '0'; host_ack <= '0'; c_state <= st_idle; ack_out <= '0'; else -- initialy reset all signal core_txd <= sr(7); shift <= '0'; ld <= '0'; host_ack <= '0'; case c_state is when st_idle => if (go = '1') then if (start = '1') then c_state <= st_start; core_cmd <= I2C_CMD_START; elsif (read = '1') then c_state <= st_read; core_cmd <= I2C_CMD_READ; elsif (write = '1') then c_state <= st_write; core_cmd <= I2C_CMD_WRITE; else -- stop c_state <= st_stop; core_cmd <= I2C_CMD_STOP; end if; ld <= '1'; end if; when st_start => if (core_ack = '1') then if (read = '1') then c_state <= st_read; core_cmd <= I2C_CMD_READ; else c_state <= st_write; core_cmd <= I2C_CMD_WRITE; end if; ld <= '1'; end if; when st_write => if (core_ack = '1') then if (cnt_done = '1') then c_state <= st_ack; core_cmd <= I2C_CMD_READ; else c_state <= st_write; -- stay in same state core_cmd <= I2C_CMD_WRITE; -- write next bit shift <= '1'; end if; end if; when st_read => if (core_ack = '1') then if (cnt_done = '1') then c_state <= st_ack; core_cmd <= I2C_CMD_WRITE; else c_state <= st_read; -- stay in same state core_cmd <= I2C_CMD_READ; -- read next bit end if; shift <= '1'; core_txd <= ack_in; end if; when st_ack => if (core_ack = '1') then -- check for stop; Should a STOP command be generated ? if (stop = '1') then c_state <= st_stop; core_cmd <= I2C_CMD_STOP; else c_state <= st_idle; core_cmd <= I2C_CMD_NOP; -- generate command acknowledge signal host_ack <= '1'; end if; -- assign ack_out output to core_rxd (contains last received bit) ack_out <= core_rxd; core_txd <= '1'; else core_txd <= ack_in; end if; when st_stop => if (core_ack = '1') then c_state <= st_idle; core_cmd <= I2C_CMD_NOP; -- generate command acknowledge signal host_ack <= '1'; end if; when others => -- illegal states c_state <= st_idle; core_cmd <= I2C_CMD_NOP; report ("Byte controller entered illegal state."); end case; end if; end if; end process nxt_state_decoder; end block statemachine; end architecture structural; bladeRF-2024.05/hdl/fpga/ip/opencores/i2c/rtl/vhdl/i2c_master_top.vhd000066400000000000000000000352061457144405000251200ustar00rootroot00000000000000--------------------------------------------------------------------- ---- ---- ---- WISHBONE revB2 compl. I2C Master Core; top level ---- ---- ---- ---- ---- ---- Author: Richard Herveille ---- ---- richard@asics.ws ---- ---- www.asics.ws ---- ---- ---- ---- Downloaded from: http://www.opencores.org/projects/i2c/ ---- ---- ---- --------------------------------------------------------------------- ---- ---- ---- Copyright (C) 2000 Richard Herveille ---- ---- richard@asics.ws ---- ---- ---- ---- 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 SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY ---- ---- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ---- ---- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS ---- ---- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR ---- ---- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, ---- ---- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ---- ---- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ---- ---- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR ---- ---- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ---- ---- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ---- ---- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ---- ---- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ---- ---- POSSIBILITY OF SUCH DAMAGE. ---- ---- ---- --------------------------------------------------------------------- -- CVS Log -- -- $Id: i2c_master_top.vhd,v 1.8 2009-01-20 10:38:45 rherveille Exp $ -- -- $Date: 2009-01-20 10:38:45 $ -- $Revision: 1.8 $ -- $Author: rherveille $ -- $Locker: $ -- $State: Exp $ -- -- Change History: -- Revision 1.7 2004/03/14 10:17:03 rherveille -- Fixed simulation issue when writing to CR register -- -- Revision 1.6 2003/08/09 07:01:13 rherveille -- Fixed a bug in the Arbitration Lost generation caused by delay on the (external) sda line. -- Fixed a potential bug in the byte controller's host-acknowledge generation. -- -- Revision 1.5 2003/02/01 02:03:06 rherveille -- Fixed a few 'arbitration lost' bugs. VHDL version only. -- -- Revision 1.4 2002/12/26 16:05:47 rherveille -- Core is now a Multimaster I2C controller. -- -- Revision 1.3 2002/11/30 22:24:37 rherveille -- Cleaned up code -- -- Revision 1.2 2001/11/10 10:52:44 rherveille -- Changed PRER reset value from 0x0000 to 0xffff, conform specs. -- library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity i2c_master_top is generic( ARST_LVL : std_logic := '0' -- asynchronous reset level ); port ( -- wishbone signals wb_clk_i : in std_logic; -- master clock input wb_rst_i : in std_logic := '0'; -- synchronous active high reset arst_i : in std_logic := not ARST_LVL; -- asynchronous reset wb_adr_i : in std_logic_vector(2 downto 0); -- lower address bits wb_dat_i : in std_logic_vector(7 downto 0); -- Databus input wb_dat_o : out std_logic_vector(7 downto 0); -- Databus output wb_we_i : in std_logic; -- Write enable input wb_stb_i : in std_logic; -- Strobe signals / core select signal wb_cyc_i : in std_logic; -- Valid bus cycle input wb_ack_o : out std_logic; -- Bus cycle acknowledge output wb_inta_o : out std_logic; -- interrupt request output signal -- i2c lines scl_pad_i : in std_logic; -- i2c clock line input scl_pad_o : out std_logic; -- i2c clock line output scl_padoen_o : out std_logic; -- i2c clock line output enable, active low sda_pad_i : in std_logic; -- i2c data line input sda_pad_o : out std_logic; -- i2c data line output sda_padoen_o : out std_logic -- i2c data line output enable, active low ); end entity i2c_master_top; architecture structural of i2c_master_top is component i2c_master_byte_ctrl is port ( clk : in std_logic; rst : in std_logic; -- synchronous active high reset (WISHBONE compatible) nReset : in std_logic; -- asynchornous active low reset (FPGA compatible) ena : in std_logic; -- core enable signal clk_cnt : in unsigned(15 downto 0); -- 4x SCL -- input signals start, stop, read, write, ack_in : std_logic; din : in std_logic_vector(7 downto 0); -- output signals cmd_ack : out std_logic; ack_out : out std_logic; i2c_busy : out std_logic; i2c_al : out std_logic; dout : out std_logic_vector(7 downto 0); -- i2c lines scl_i : in std_logic; -- i2c clock line input scl_o : out std_logic; -- i2c clock line output scl_oen : out std_logic; -- i2c clock line output enable, active low sda_i : in std_logic; -- i2c data line input sda_o : out std_logic; -- i2c data line output sda_oen : out std_logic -- i2c data line output enable, active low ); end component i2c_master_byte_ctrl; -- registers signal prer : unsigned(15 downto 0); -- clock prescale register signal ctr : std_logic_vector(7 downto 0); -- control register signal txr : std_logic_vector(7 downto 0); -- transmit register signal rxr : std_logic_vector(7 downto 0); -- receive register signal cr : std_logic_vector(7 downto 0); -- command register signal sr : std_logic_vector(7 downto 0); -- status register -- internal reset signal signal rst_i : std_logic; -- wishbone write access signal wb_wacc : std_logic; -- internal acknowledge signal signal iack_o : std_logic; -- done signal: command completed, clear command register signal done : std_logic; -- command register signals signal sta, sto, rd, wr, ack, iack : std_logic; signal core_en : std_logic; -- core enable signal signal ien : std_logic; -- interrupt enable signal -- status register signals signal irxack, rxack : std_logic; -- received aknowledge from slave signal tip : std_logic; -- transfer in progress signal irq_flag : std_logic; -- interrupt pending flag signal i2c_busy : std_logic; -- i2c bus busy (start signal detected) signal i2c_al, al : std_logic; -- arbitration lost begin -- generate internal reset signal rst_i <= arst_i xor ARST_LVL; -- generate acknowledge output signal gen_ack_o : process(wb_clk_i) begin if (wb_clk_i'event and wb_clk_i = '1') then iack_o <= wb_cyc_i and wb_stb_i and not iack_o; -- because timing is always honored end if; end process gen_ack_o; wb_ack_o <= iack_o; -- generate wishbone write access signal wb_wacc <= wb_we_i and iack_o; -- assign wb_dat_o assign_dato : process(wb_clk_i) begin if (wb_clk_i'event and wb_clk_i = '1') then case wb_adr_i is when "000" => wb_dat_o <= std_logic_vector(prer( 7 downto 0)); when "001" => wb_dat_o <= std_logic_vector(prer(15 downto 8)); when "010" => wb_dat_o <= ctr; when "011" => wb_dat_o <= rxr; -- write is transmit register TxR when "100" => wb_dat_o <= sr; -- write is command register CR -- Debugging registers: -- These registers are not documented. -- Functionality could change in future releases when "101" => wb_dat_o <= txr; when "110" => wb_dat_o <= cr; when "111" => wb_dat_o <= (others => '0'); when others => wb_dat_o <= (others => 'X'); -- for simulation only end case; end if; end process assign_dato; -- generate registers (CR, SR see below) gen_regs: process(rst_i, wb_clk_i) begin if (rst_i = '0') then prer <= (others => '1'); ctr <= (others => '0'); txr <= (others => '0'); elsif (wb_clk_i'event and wb_clk_i = '1') then if (wb_rst_i = '1') then prer <= (others => '1'); ctr <= (others => '0'); txr <= (others => '0'); elsif (wb_wacc = '1') then case wb_adr_i is when "000" => prer( 7 downto 0) <= unsigned(wb_dat_i); when "001" => prer(15 downto 8) <= unsigned(wb_dat_i); when "010" => ctr <= wb_dat_i; when "011" => txr <= wb_dat_i; when "100" => null; --write to CR, avoid executing the others clause -- illegal cases, for simulation only when others => report ("Illegal write address, setting all registers to unknown."); prer <= (others => 'X'); ctr <= (others => 'X'); txr <= (others => 'X'); end case; end if; end if; end process gen_regs; -- generate command register gen_cr: process(rst_i, wb_clk_i) begin if (rst_i = '0') then cr <= (others => '0'); elsif (wb_clk_i'event and wb_clk_i = '1') then if (wb_rst_i = '1') then cr <= (others => '0'); elsif (wb_wacc = '1') then if ( (core_en = '1') and (wb_adr_i = "100") ) then -- only take new commands when i2c core enabled -- pending commands are finished cr <= wb_dat_i; end if; else if (done = '1' or i2c_al = '1') then cr(7 downto 4) <= (others => '0'); -- clear command bits when command done or arbitration lost end if; cr(2 downto 1) <= (others => '0'); -- reserved bits, always '0' cr(0) <= '0'; -- clear IRQ_ACK bit end if; end if; end process gen_cr; -- decode command register sta <= cr(7); sto <= cr(6); rd <= cr(5); wr <= cr(4); ack <= cr(3); iack <= cr(0); -- decode control register core_en <= ctr(7); ien <= ctr(6); -- hookup byte controller block byte_ctrl: i2c_master_byte_ctrl port map ( clk => wb_clk_i, rst => wb_rst_i, nReset => rst_i, ena => core_en, clk_cnt => prer, start => sta, stop => sto, read => rd, write => wr, ack_in => ack, i2c_busy => i2c_busy, i2c_al => i2c_al, din => txr, cmd_ack => done, ack_out => irxack, dout => rxr, scl_i => scl_pad_i, scl_o => scl_pad_o, scl_oen => scl_padoen_o, sda_i => sda_pad_i, sda_o => sda_pad_o, sda_oen => sda_padoen_o ); -- status register block + interrupt request signal st_irq_block : block begin -- generate status register bits gen_sr_bits: process (wb_clk_i, rst_i) begin if (rst_i = '0') then al <= '0'; rxack <= '0'; tip <= '0'; irq_flag <= '0'; elsif (wb_clk_i'event and wb_clk_i = '1') then if (wb_rst_i = '1') then al <= '0'; rxack <= '0'; tip <= '0'; irq_flag <= '0'; else al <= i2c_al or (al and not sta); rxack <= irxack; tip <= (rd or wr); -- interrupt request flag is always generated irq_flag <= (done or i2c_al or irq_flag) and not iack; end if; end if; end process gen_sr_bits; -- generate interrupt request signals gen_irq: process (wb_clk_i, rst_i) begin if (rst_i = '0') then wb_inta_o <= '0'; elsif (wb_clk_i'event and wb_clk_i = '1') then if (wb_rst_i = '1') then wb_inta_o <= '0'; else -- interrupt signal is only generated when IEN (interrupt enable bit) is set wb_inta_o <= irq_flag and ien; end if; end if; end process gen_irq; -- assign status register bits sr(7) <= rxack; sr(6) <= i2c_busy; sr(5) <= al; sr(4 downto 2) <= (others => '0'); -- reserved sr(1) <= tip; sr(0) <= irq_flag; end block; end architecture structural; bladeRF-2024.05/hdl/fpga/ip/opencores/i2c/rtl/vhdl/readme000066400000000000000000000014251457144405000226570ustar00rootroot00000000000000 -- This code is provided for free and may be used and -- -- distributed without restriction provided that the -- -- copyright statement is not removed from the file and -- -- that any derivative work contains the original -- -- copyright notice and the associated disclaimer. -- -- Comments and suggestions are always welcome -- The i2c_master core consists of three files: - i2c_master_top -- top level - i2c_master_byte_ctrl -- byte controller - i2c_master_bit_ctrl -- bit controller VHDL needs to be compiled in order. The files are listed above in descending order. I2C.VHD and tst_ds1621.vhd are not supported anymore. They remain mostly for historical purposes, altough they might prove usefull. Richard Herveille rherveille@opencores.org bladeRF-2024.05/hdl/fpga/ip/opencores/i2c/rtl/vhdl/tst_ds1621.vhd000066400000000000000000000154571457144405000240260ustar00rootroot00000000000000-- -- -- State machine for reading data from Dallas 1621 -- -- Testsystem for i2c controller -- -- library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use work.i2c.all; entity DS1621_interface is port ( clk : in std_logic; nReset : in std_logic; Dout : out std_logic_vector(7 downto 0); -- data read from ds1621 error : out std_logic; -- no correct ack received SCL : inout std_logic; SDA : inout std_logic ); end entity DS1621_interface; architecture structural of DS1621_interface is constant SLAVE_ADDR : std_logic_vector(6 downto 0) := "1001000"; constant CLK_CNT : unsigned(7 downto 0) := conv_unsigned(20, 8); signal cmd_ack : std_logic; signal D : std_logic_vector(7 downto 0); signal lack, store_dout : std_logic; signal start, read, write, ack, stop : std_logic; signal i2c_dout : std_logic_vector(7 downto 0); begin -- hookup I2C controller u1: simple_i2c port map (clk => clk, ena => '1', clk_cnt => clk_cnt, nReset => nReset, read => read, write => write, start => start, stop => stop, ack_in => ack, cmd_ack => cmd_ack, Din => D, Dout => i2c_dout, ack_out => lack, SCL => SCL, SDA => SDA); init_statemachine : block type states is (i1, i2, i3, i4, i5, t1, t2, t3, t4, t5); signal state : states; begin nxt_state_decoder: process(clk, nReset, state) variable nxt_state : states; variable iD : std_logic_vector(7 downto 0); variable ierr : std_logic; variable istart, iread, iwrite, iack, istop : std_logic; variable istore_dout : std_logic; begin nxt_state := state; ierr := '0'; istore_dout := '0'; istart := start; iread := read; iwrite := write; iack := ack; istop := stop; iD := D; case (state) is -- init DS1621 -- 1) send start condition -- 2) send slave address + write -- 3) check ack -- 4) send "access config" command (0xAC) -- 5) check ack -- 6) send config register data (0x00) -- 7) check ack -- 8) send stop condition -- 9) send start condition -- 10) send slave address + write -- 11) check ack -- 12) send "start conversion" command (0xEE) -- 13) check ack -- 14) send stop condition when i1 => -- send start condition, sent slave address + write nxt_state := i2; istart := '1'; iread := '0'; iwrite := '1'; iack := '0'; istop := '0'; iD := (slave_addr & '0'); -- write to slave (R/W = '0') when i2 => -- send "access config" command if (cmd_ack = '1') then nxt_state := i3; -- check aknowledge bit if (lack = '1') then ierr := '1'; -- no acknowledge received from last command, expected ACK end if; istart := '0'; iread := '0'; iwrite := '1'; iack := '0'; istop := '0'; iD := x"AC"; end if; when i3 => -- send config register data, sent stop condition if (cmd_ack = '1') then nxt_state := i4; -- check aknowledge bit if (lack = '1') then ierr := '1'; -- no acknowledge received from last command, expected ACK end if; istart := '0'; iread := '0'; iwrite := '1'; iack := '0'; istop := '1'; iD := x"00"; end if; when i4 => -- send start condition, sent slave address + write if (cmd_ack = '1') then nxt_state := i5; istart := '1'; iread := '0'; iwrite := '1'; iack := '0'; istop := '0'; iD := (slave_addr & '0'); -- write to slave (R/W = '0') end if; when i5 => -- send "start conversion" command + stop condition if (cmd_ack = '1') then nxt_state := t1; -- check aknowledge bit if (lack = '1') then ierr := '1'; -- no acknowledge received from last command, expected ACK end if; istart := '0'; iread := '0'; iwrite := '1'; iack := '0'; istop := '1'; iD := x"EE"; end if; -- read temperature -- 1) sent start condition -- 2) sent slave address + write -- 3) check ack -- 4) sent "read temperature" command (0xAA) -- 5) check ack -- 6) sent start condition -- 7) sent slave address + read -- 8) check ack -- 9) read msb -- 10) send ack -- 11) read lsb -- 12) send nack -- 13) send stop condition when t1 => -- send start condition, sent slave address + write if (cmd_ack = '1') then nxt_state := t2; -- check aknowledge bit if (lack = '1') then ierr := '1'; -- no acknowledge received from last command, expected ACK end if; istart := '1'; iread := '0'; iwrite := '1'; iack := '0'; istop := '0'; iD := (slave_addr & '0'); -- write to slave (R/W = '0') end if; when t2 => -- send read temperature command if (cmd_ack = '1') then nxt_state := t3; -- check aknowledge bit if (lack = '1') then ierr := '1'; -- no acknowledge received from last command, expected ACK end if; istart := '0'; iread := '0'; iwrite := '1'; iack := '0'; istop := '0'; iD := x"AA"; end if; when t3 => -- send (repeated) start condition, send slave address + read if (cmd_ack = '1') then nxt_state := t4; -- check aknowledge bit if (lack = '1') then ierr := '1'; -- no acknowledge received, expected ACK end if; istart := '1'; iread := '0'; iwrite := '1'; iack := '0'; istop := '0'; iD := (slave_addr & '1'); -- read from slave (R/W = '1') end if; when t4 => -- read MSB (hi-byte), send acknowledge if (cmd_ack = '1') then nxt_state := t5; -- check aknowledge bit if (lack = '1') then ierr := '1'; -- no acknowledge received from last command, expected ACK end if; istart := '0'; iread := '1'; iwrite := '0'; iack := '0'; --ACK istop := '0'; end if; when t5 => -- read LSB (lo-byte), send acknowledge, sent stop if (cmd_ack = '1') then nxt_state := t1; istart := '0'; iread := '1'; iwrite := '0'; iack := '1'; --NACK istop := '1'; istore_dout := '1'; end if; end case; -- genregs if (nReset = '0') then state <= i1; error <= '0'; store_dout <= '0'; start <= '0'; read <= '0'; write <= '0'; ack <= '0'; stop <= '0'; D <= (others => '0'); elsif (clk'event and clk = '1') then state <= nxt_state; error <= ierr; store_dout <= istore_dout; start <= istart; read <= iread; write <= iwrite; ack <= iack; stop <= istop; D <= iD; end if; end process nxt_state_decoder; end block init_statemachine; -- store temp gen_dout : process(clk) begin if (clk'event and clk = '1') then if (store_dout = '1') then Dout <= i2c_dout; end if; end if; end process gen_dout; end architecture structural; bladeRF-2024.05/hdl/fpga/ip/opencores/i2c/sim/000077500000000000000000000000001457144405000205275ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/opencores/i2c/sim/i2c_verilog/000077500000000000000000000000001457144405000227335ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/opencores/i2c/sim/i2c_verilog/run/000077500000000000000000000000001457144405000235375ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/opencores/i2c/sim/i2c_verilog/run/bench.vcd000066400000000000000000242167071457144405000253370ustar00rootroot00000000000000$date Jun 15, 2002 13:36:37 $end $version ncsim: v03.40.(b001) $end $timescale 10 ps $end $scope module tst_bench_top $end $var reg 1 ! clk $end $var reg 1 " rstn $end $var wire 1 # adr [31] $end $var wire 1 $ adr [30] $end $var wire 1 % adr [29] $end $var wire 1 & adr [28] $end $var wire 1 ' adr [27] $end $var wire 1 ( adr [26] $end $var wire 1 ) adr [25] $end $var wire 1 * adr [24] $end $var wire 1 + adr [23] $end $var wire 1 , adr [22] $end $var wire 1 - adr [21] $end $var wire 1 . adr [20] $end $var wire 1 / adr [19] $end $var wire 1 0 adr [18] $end $var wire 1 1 adr [17] $end $var wire 1 2 adr [16] $end $var wire 1 3 adr [15] $end $var wire 1 4 adr [14] $end $var wire 1 5 adr [13] $end $var wire 1 6 adr [12] $end $var wire 1 7 adr [11] $end $var wire 1 8 adr [10] $end $var wire 1 9 adr [9] $end $var wire 1 : adr [8] $end $var wire 1 ; adr [7] $end $var wire 1 < adr [6] $end $var wire 1 = adr [5] $end $var wire 1 > adr [4] $end $var wire 1 ? adr [3] $end $var wire 1 @ adr [2] $end $var wire 1 A adr [1] $end $var wire 1 B adr [0] $end $var wire 8 C dat_i [7:0] $end $var wire 8 D dat_o [7:0] $end $var wire 1 E we $end $var wire 1 F stb $end $var wire 1 G cyc $end $var wire 1 H ack $end $var wire 1 I inta $end $var reg 8 J q [7:0] $end $var reg 8 K qq [7:0] $end $var wire 1 L scl $end $var wire 1 M scl_o $end $var wire 1 N scl_oen $end $var wire 1 O sda $end $var wire 1 P sda_o $end $var wire 1 Q sda_oen $end $var parameter 3 R PRER_LO $end $var parameter 3 S PRER_HI $end $var parameter 3 T CTR $end $var parameter 3 U RXR $end $var parameter 3 V TXR $end $var parameter 3 W CR $end $var parameter 3 X SR $end $var parameter 3 Y TXR_R $end $var parameter 3 Z CR_R $end $scope module i2c_slave $end $var parameter 7 [ I2C_ADR $end $var wire 1 L scl $end $var wire 1 O sda $end $var wire 1 \ debug $end $var reg 8 ] mem_adr [7:0] $end $var reg 8 ^ mem_do [7:0] $end $var reg 1 _ sta $end $var reg 1 ` d_sta $end $var reg 1 a sto $end $var reg 1 b d_sto $end $var reg 8 c sr [7:0] $end $var reg 1 d rw $end $var wire 1 e my_adr $end $var wire 1 f i2c_reset $end $var reg 3 g bit_cnt [2:0] $end $var wire 1 h acc_done $end $var reg 1 i ld $end $var reg 1 j sda_o $end $var parameter 3 k idle $end $var parameter 3 l slave_ack $end $var parameter 3 m get_mem_adr $end $var parameter 3 n gma_ack $end $var parameter 3 o data $end $var parameter 3 p data_ack $end $var reg 3 q state [2:0] $end $upscope $end $upscope $end $enddefinitions $end $dumpvars b101 p b100 o b11 n b10 m b1 l b0 k b1010000 [ b110 Z b101 Y b100 X b100 W b11 V b11 U b10 T b1 S b0 R 0! 1" x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB bx C bx D xE xF 0G 0H xI bx J bx K xL 0M xN xO 0P xQ 0\ bx ] bx ^ x_ x` xa xb bx c xd xe xf bx g xh xi 1j b0 q $end #200 0" #300 1Q 1N 0I 1O 1L #400 1a bx1 c 1f #500 1! 1i #1000 0! #1500 1! #2000 0! #2500 1! #3000 0! #3500 1! #4000 0! #4500 1! #5000 0! #5500 1! #6000 0! #6500 1! #7000 0! #7500 1! #8000 0! #8500 1! #9000 0! #9500 1! #10000 0! #10500 1! #11000 0! #11500 1! #12000 0! #12500 1! #13000 0! #13500 1! #14000 0! #14500 1! #15000 0! #15500 1! #16000 0! #16500 1! #17000 0! #17500 1! #18000 0! #18500 1! #19000 0! #19500 1! 1" #20000 0! #20500 1! #20600 1E 1F 1G b110010 D 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 0@ 0A 0B b11111111 C 1H #21000 0! #21500 1! #21600 xE bx D x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22000 0! #22500 1! #22600 1E 1F 1G b0 D 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 0@ 0A 1B 1H #23000 0! #23500 1! #23600 xE bx D x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 0@ 0A 0B b110010 C 1H #24000 0! #24500 1! #24600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 0@ 0A 1B b0 C 1H #25000 0! #25500 1! #25600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26000 0! #26500 1! #26600 1E 1F 1G b10000000 D 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 0@ 1A 0B 1H #27000 0! #27500 1! #27600 xE bx D x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28000 0! #28500 1! #28600 1E 1F 1G b10100000 D 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 0@ 1A 1B 1H #29000 0! #29500 1! #29600 xE bx D x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29700 1E 1F 1G b10010000 D 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30000 0! #30500 1! #30600 xE bx D x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31000 0! #31500 1! #31600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H b10 C #32000 0! #32500 1! #32600 b10 J xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33000 0! #33500 1! #33600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34000 0! #34500 1! #34600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35000 0! #35500 1! #35600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36000 0! #36500 1! #36600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37000 0! #37500 1! #37600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38000 0! #38500 1! #38600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39000 0! #39500 1! #39600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40000 0! #40500 1! #40600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #41000 0! #41500 1! #41600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #41700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #42000 0! #42500 1! #42600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #42700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #43000 0! #43500 1! #43600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #43700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #44000 0! #44500 1! #44600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #44700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #45000 0! #45500 1! #45600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #45700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #46000 0! #46500 1! #46600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #46700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #47000 0! #47500 1! #47600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #47700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #48000 0! #48500 1! #48600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #48700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #49000 0! #49500 1! #49600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #49700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #50000 0! #50500 1! #50600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #50700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #51000 0! #51500 1! #51600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #51700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #52000 0! #52500 1! #52600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #52700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #53000 0! #53500 1! #53600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #53700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #54000 0! #54500 1! #54600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #54700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #55000 0! #55500 1! #55600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #55700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #56000 0! #56500 1! #56600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #56700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #57000 0! #57500 1! #57600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #57700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #58000 0! #58500 1! #58600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #58700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #59000 0! #59500 1! #59600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #59700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #60000 0! #60500 1! #60600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #60700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #61000 0! #61500 1! #61600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #61700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #62000 0! #62500 1! #62600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #62700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #63000 0! #63500 1! #63600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #63700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #64000 0! #64500 1! #64600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #64700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #65000 0! #65500 1! #65600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #65700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #66000 0! #66500 1! #66600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #66700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #67000 0! #67500 1! #67600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #67700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #68000 0! #68500 1! #68600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #68700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #69000 0! #69500 1! #69600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #69700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #70000 0! #70500 1! #70600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #70700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #71000 0! #71500 1! #71600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #71700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #72000 0! #72500 1! #72600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #72700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #73000 0! #73500 1! #73600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #73700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #74000 0! #74500 1! #74600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #74700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #75000 0! #75500 1! #75600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #75700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #76000 0! #76500 1! #76600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #76700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #77000 0! #77500 1! #77600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #77700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #78000 0! #78500 1! #78600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #78700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #79000 0! #79500 1! #79600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #79700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #80000 0! #80500 1! #80600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #80700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #81000 0! #81500 1! #81600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #81700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #82000 0! #82500 1! #82600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #82700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #83000 0! #83500 1! #83600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #83700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #84000 0! #84500 1! #84600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #84700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #85000 0! #85500 1! #85600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #85700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #86000 0! #86500 1! #86600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #86700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #87000 0! #87500 1! #87600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #87700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #88000 0! #88500 1! #88600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #88700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #89000 0! #89500 1! #89600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #89700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #90000 0! #90500 1! #90600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #90700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #91000 0! #91500 1! #91600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #91700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #92000 0! #92500 1! #92600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #92700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #93000 0! #93500 1! #93600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #93700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #94000 0! #94500 1! #94600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #94700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #95000 0! #95500 1! #95600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #95700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #96000 0! #96500 1! #96600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #96700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #97000 0! #97500 1! #97600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #97700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #98000 0! #98500 1! #98600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #98700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #99000 0! #99500 1! #99600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #99700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #100000 0! #100500 1! #100600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #100700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #101000 0! #101500 1! #101600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #101700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #102000 0! #102500 1! #102600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #102700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #103000 0! #103500 1! #103600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #103700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #104000 0! #104500 1! #104600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #104700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #105000 0! #105500 1! #105600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #105700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #106000 0! #106500 1! #106600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #106700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #107000 0! #107500 1! #107600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #107700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #108000 0! #108500 1! #108600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #108700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #109000 0! #109500 1! #109600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #109700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #110000 0! #110500 1! #110600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #110700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #111000 0! #111500 1! #111600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #111700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #112000 0! #112500 1! #112600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #112700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #113000 0! #113500 1! #113600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #113700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #114000 0! #114500 1! #114600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #114700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #115000 0! #115500 1! #115600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #115700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #116000 0! #116500 1! #116600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #116700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #117000 0! #117500 1! #117600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #117700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #118000 0! #118500 1! #118600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #118700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #119000 0! #119500 1! #119600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #119700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #120000 0! #120500 1! #120600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #120700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #121000 0! #121500 1! #121600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #121700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #122000 0! #122500 1! #122600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #122700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #123000 0! #123500 1! #123600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #123700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #124000 0! #124500 1! #124600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #124700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #125000 0! #125500 1! #125600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #125700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #126000 0! #126500 1! #126600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #126700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #127000 0! #127500 1! #127600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #127700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #128000 0! #128500 1! #128600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #128700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #129000 0! #129500 1! #129600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #129700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #130000 0! #130500 1! #130600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #130700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #131000 0! #131500 1! #131600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #131700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #132000 0! #132500 1! #132600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #132700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #133000 0! #133500 1! #133600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #133700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #134000 0! #134500 1! #134600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #134700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #135000 0! #135500 1! #135600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #135700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #136000 0! #136500 1! #136600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #136700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #137000 0! #137500 1! #137600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #137700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #138000 0! #138500 1! #138600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #138700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #139000 0! #139500 1! #139600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #139700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #140000 0! #140500 1! #140600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #140700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #141000 0! #141500 1! #141600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #141700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #142000 0! #142500 1! #142600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #142700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #143000 0! #143500 1! #143600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #143700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #144000 0! #144500 1! #144600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #144700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #145000 0! #145500 1! #145600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #145700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #146000 0! #146500 1! #146600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #146700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #147000 0! #147500 1! #147600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #147700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #148000 0! #148500 1! #148600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #148700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #149000 0! #149500 1! #149600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #149700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #150000 0! #150500 1! #150600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #150700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #151000 0! #151500 1! #151600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #151700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #152000 0! #152500 1! #152600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #152700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #153000 0! #153500 1! #153600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #153700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #154000 0! #154500 1! #154600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #154700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #155000 0! #155500 1! #155600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #155700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #156000 0! #156500 1! #156600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #156700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #157000 0! #157500 1! #157600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #157700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #158000 0! #158500 1! #158600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #158700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #159000 0! #159500 1! #159600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #159700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #160000 0! #160500 1! #160600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #160700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #161000 0! #161500 1! #161600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #161700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #162000 0! #162500 1! #162600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #162700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #163000 0! #163500 1! #163600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #163700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #164000 0! #164500 1! #164600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #164700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #165000 0! #165500 1! #165600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #165700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #166000 0! #166500 1! #166600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #166700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #167000 0! #167500 1! #167600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #167700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #168000 0! #168500 1! #168600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #168700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #169000 0! #169500 1! #169600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #169700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #170000 0! #170500 1! #170600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #170700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #171000 0! #171500 1! #171600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #171700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #172000 0! #172500 1! #172600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #172700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #173000 0! #173500 1! #173600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #173700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #174000 0! #174500 1! #174600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #174700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #175000 0! #175500 1! #175600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #175700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #176000 0! #176500 1! #176600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #176700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #177000 0! #177500 1! #177600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #177700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #178000 0! #178500 1! #178600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #178700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #179000 0! #179500 1! #179600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #179700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #180000 0! #180500 1! #180600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #180700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #181000 0! #181500 1! #181600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #181700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #182000 0! #182500 1! #182600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #182700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #183000 0! #183500 1! #183600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #183700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #184000 0! #184500 1! #184600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #184700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #185000 0! #185500 1! #185600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #185700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #186000 0! #186500 1! #186600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #186700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #187000 0! #187500 1! #187600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #187700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #188000 0! #188500 1! #188600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #188700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #189000 0! #189500 1! #189600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #189700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #190000 0! #190500 1! #190600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #190700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #191000 0! #191500 1! #191600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #191700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #192000 0! #192500 1! #192600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #192700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #193000 0! #193500 1! #193600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #193700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #194000 0! #194500 1! #194600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #194700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #195000 0! #195500 1! #195600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #195700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #196000 0! #196500 1! #196600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #196700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #197000 0! #197500 1! #197600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #197700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #198000 0! #198500 1! #198600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #198700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #199000 0! #199500 1! #199600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #199700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #200000 0! #200500 1! #200600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #200700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #201000 0! #201500 1! #201600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #201700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #202000 0! #202500 1! #202600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #202700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #203000 0! #203500 1! #203600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #203700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #204000 0! #204500 1! #204600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #204700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #205000 0! #205500 1! #205600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #205700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #206000 0! #206500 1! #206600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #206700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #207000 0! #207500 1! #207600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #207700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #208000 0! #208500 1! #208600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #208700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #209000 0! #209500 1! #209600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #209700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #210000 0! #210500 1! #210600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #210700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #211000 0! #211500 1! #211600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #211700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #212000 0! #212500 1! #212600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #212700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #213000 0! #213500 1! #213600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #213700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #214000 0! #214500 1! #214600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #214700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #215000 0! #215500 1! #215600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #215700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #216000 0! #216500 1! #216600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #216700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #217000 0! #217500 1! #217600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #217700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #218000 0! #218500 1! #218600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #218700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #219000 0! #219500 1! #219600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #219700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #220000 0! #220500 1! #220600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #220700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #221000 0! #221500 1! #221600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #221700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #222000 0! #222500 1! #222600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #222700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #223000 0! #223500 1! #223600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #223700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #224000 0! #224500 1! #224600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #224700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #225000 0! #225500 1! #225600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #225700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #226000 0! #226500 1! #226600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #226700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #227000 0! #227500 1! #227600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #227700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #228000 0! #228500 1! #228600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #228700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #229000 0! #229500 1! #229600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #229700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #230000 0! #230500 1! #230600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #230700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #231000 0! #231500 1! #231600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #231700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #232000 0! #232500 1! #232600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0Q 0O #232700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1_ #233000 0! #233500 1! #233600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #233700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #234000 0! #234500 1! #234600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #234700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #235000 0! #235500 1! b1000010 C #235600 b1000010 J xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #235700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #236000 0! #236500 1! #236600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #236700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #237000 0! #237500 1! #237600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #237700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #238000 0! #238500 1! #238600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #238700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #239000 0! #239500 1! #239600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #239700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #240000 0! #240500 1! #240600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #240700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #241000 0! #241500 1! #241600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #241700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #242000 0! #242500 1! #242600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #242700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #243000 0! #243500 1! #243600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #243700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #244000 0! #244500 1! #244600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #244700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #245000 0! #245500 1! #245600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #245700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #246000 0! #246500 1! #246600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #246700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #247000 0! #247500 1! #247600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #247700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #248000 0! #248500 1! #248600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #248700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #249000 0! #249500 1! #249600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #249700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #250000 0! #250500 1! #250600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #250700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #251000 0! #251500 1! #251600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #251700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #252000 0! #252500 1! #252600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #252700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #253000 0! #253500 1! #253600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #253700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #254000 0! #254500 1! #254600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #254700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #255000 0! #255500 1! #255600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #255700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #256000 0! #256500 1! #256600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #256700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #257000 0! #257500 1! #257600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #257700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #258000 0! #258500 1! #258600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #258700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #259000 0! #259500 1! #259600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #259700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #260000 0! #260500 1! #260600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #260700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #261000 0! #261500 1! #261600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #261700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #262000 0! #262500 1! #262600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #262700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #263000 0! #263500 1! #263600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #263700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #264000 0! #264500 1! #264600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #264700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #265000 0! #265500 1! #265600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #265700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #266000 0! #266500 1! #266600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #266700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #267000 0! #267500 1! #267600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #267700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #268000 0! #268500 1! #268600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #268700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #269000 0! #269500 1! #269600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #269700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #270000 0! #270500 1! #270600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #270700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #271000 0! #271500 1! #271600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #271700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #272000 0! #272500 1! #272600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #272700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #273000 0! #273500 1! #273600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #273700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #274000 0! #274500 1! #274600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #274700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #275000 0! #275500 1! #275600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #275700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #276000 0! #276500 1! #276600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #276700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #277000 0! #277500 1! #277600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #277700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #278000 0! #278500 1! #278600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #278700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #279000 0! #279500 1! #279600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #279700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #280000 0! #280500 1! #280600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #280700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #281000 0! #281500 1! #281600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #281700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #282000 0! #282500 1! #282600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #282700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #283000 0! #283500 1! #283600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #283700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #284000 0! #284500 1! #284600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #284700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #285000 0! #285500 1! #285600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #285700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #286000 0! #286500 1! #286600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #286700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #287000 0! #287500 1! #287600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #287700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #288000 0! #288500 1! #288600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #288700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #289000 0! #289500 1! #289600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #289700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #290000 0! #290500 1! #290600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #290700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #291000 0! #291500 1! #291600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #291700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #292000 0! #292500 1! #292600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #292700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #293000 0! #293500 1! #293600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #293700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #294000 0! #294500 1! #294600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #294700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #295000 0! #295500 1! #295600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #295700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #296000 0! #296500 1! #296600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #296700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #297000 0! #297500 1! #297600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #297700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #298000 0! #298500 1! #298600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #298700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #299000 0! #299500 1! #299600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #299700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #300000 0! #300500 1! #300600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #300700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #301000 0! #301500 1! #301600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #301700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #302000 0! #302500 1! #302600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #302700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #303000 0! #303500 1! #303600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #303700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #304000 0! #304500 1! #304600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #304700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #305000 0! #305500 1! #305600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #305700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #306000 0! #306500 1! #306600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #306700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #307000 0! #307500 1! #307600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #307700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #308000 0! #308500 1! #308600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #308700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #309000 0! #309500 1! #309600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #309700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #310000 0! #310500 1! #310600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #310700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #311000 0! #311500 1! #311600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #311700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #312000 0! #312500 1! #312600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #312700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #313000 0! #313500 1! #313600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #313700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #314000 0! #314500 1! #314600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #314700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #315000 0! #315500 1! #315600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #315700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #316000 0! #316500 1! #316600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #316700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #317000 0! #317500 1! #317600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #317700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #318000 0! #318500 1! #318600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #318700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #319000 0! #319500 1! #319600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #319700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #320000 0! #320500 1! #320600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #320700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #321000 0! #321500 1! #321600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #321700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #322000 0! #322500 1! #322600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #322700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #323000 0! #323500 1! #323600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #323700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #324000 0! #324500 1! #324600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #324700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #325000 0! #325500 1! #325600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #325700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #326000 0! #326500 1! #326600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #326700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #327000 0! #327500 1! #327600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #327700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #328000 0! #328500 1! #328600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #328700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #329000 0! #329500 1! #329600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #329700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #330000 0! #330500 1! #330600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #330700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #331000 0! #331500 1! #331600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #331700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #332000 0! #332500 1! #332600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #332700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #333000 0! #333500 1! #333600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #333700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #334000 0! #334500 1! #334600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #334700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #335000 0! #335500 1! #335600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #335700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #336000 0! #336500 1! #336600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #336700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #337000 0! #337500 1! #337600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #337700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #338000 0! #338500 1! #338600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #338700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #339000 0! #339500 1! #339600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #339700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #340000 0! #340500 1! #340600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #340700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #341000 0! #341500 1! #341600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #341700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #342000 0! #342500 1! #342600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #342700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #343000 0! #343500 1! #343600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #343700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #344000 0! #344500 1! #344600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #344700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #345000 0! #345500 1! #345600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #345700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #346000 0! #346500 1! #346600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #346700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #347000 0! #347500 1! #347600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #347700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #348000 0! #348500 1! #348600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #348700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #349000 0! #349500 1! #349600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #349700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #350000 0! #350500 1! #350600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #350700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #351000 0! #351500 1! #351600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #351700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #352000 0! #352500 1! #352600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #352700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #353000 0! #353500 1! #353600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #353700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #354000 0! #354500 1! #354600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #354700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #355000 0! #355500 1! #355600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #355700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #356000 0! #356500 1! #356600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #356700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #357000 0! #357500 1! #357600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #357700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #358000 0! #358500 1! #358600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #358700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #359000 0! #359500 1! #359600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #359700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #360000 0! #360500 1! #360600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #360700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #361000 0! #361500 1! #361600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #361700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #362000 0! #362500 1! #362600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #362700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #363000 0! #363500 1! #363600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #363700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #364000 0! #364500 1! #364600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #364700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #365000 0! #365500 1! #365600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #365700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #366000 0! #366500 1! #366600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #366700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #367000 0! #367500 1! #367600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #367700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #368000 0! #368500 1! #368600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #368700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #369000 0! #369500 1! #369600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #369700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #370000 0! #370500 1! #370600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #370700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #371000 0! #371500 1! #371600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #371700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #372000 0! #372500 1! #372600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #372700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #373000 0! #373500 1! #373600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #373700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #374000 0! #374500 1! #374600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #374700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #375000 0! #375500 1! #375600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #375700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #376000 0! #376500 1! #376600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #376700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #377000 0! #377500 1! #377600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #377700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #378000 0! #378500 1! #378600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #378700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #379000 0! #379500 1! #379600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #379700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #380000 0! #380500 1! #380600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #380700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #381000 0! #381500 1! #381600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #381700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #382000 0! #382500 1! #382600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #382700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #383000 0! #383500 1! #383600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #383700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #384000 0! #384500 1! #384600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #384700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #385000 0! #385500 1! #385600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1Q 1O #385700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0a #386000 0! #386500 1! #386600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #386700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #387000 0! #387500 1! #387600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #387700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #388000 0! #388500 1! #388600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #388700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #389000 0! #389500 1! #389600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #389700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #390000 0! #390500 1! #390600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #390700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #391000 0! #391500 1! #391600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #391700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #392000 0! #392500 1! #392600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #392700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #393000 0! #393500 1! #393600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #393700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #394000 0! #394500 1! #394600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #394700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #395000 0! #395500 1! #395600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #395700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #396000 0! #396500 1! #396600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #396700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #397000 0! #397500 1! #397600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #397700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #398000 0! #398500 1! #398600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #398700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #399000 0! #399500 1! #399600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #399700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #400000 0! #400500 1! #400600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #400700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #401000 0! #401500 1! #401600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #401700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #402000 0! #402500 1! #402600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #402700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #403000 0! #403500 1! #403600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #403700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #404000 0! #404500 1! #404600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #404700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #405000 0! #405500 1! #405600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #405700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #406000 0! #406500 1! #406600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #406700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #407000 0! #407500 1! #407600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #407700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #408000 0! #408500 1! #408600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #408700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #409000 0! #409500 1! #409600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #409700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #410000 0! #410500 1! #410600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #410700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #411000 0! #411500 1! #411600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #411700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #412000 0! #412500 1! #412600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #412700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #413000 0! #413500 1! #413600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #413700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #414000 0! #414500 1! #414600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #414700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #415000 0! #415500 1! #415600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #415700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #416000 0! #416500 1! #416600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #416700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #417000 0! #417500 1! #417600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #417700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #418000 0! #418500 1! #418600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #418700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #419000 0! #419500 1! #419600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #419700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #420000 0! #420500 1! #420600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #420700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #421000 0! #421500 1! #421600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #421700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #422000 0! #422500 1! #422600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #422700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #423000 0! #423500 1! #423600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #423700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #424000 0! #424500 1! #424600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #424700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #425000 0! #425500 1! #425600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #425700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #426000 0! #426500 1! #426600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #426700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #427000 0! #427500 1! #427600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #427700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #428000 0! #428500 1! #428600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #428700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #429000 0! #429500 1! #429600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #429700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #430000 0! #430500 1! #430600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #430700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #431000 0! #431500 1! #431600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #431700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #432000 0! #432500 1! #432600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #432700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #433000 0! #433500 1! #433600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #433700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #434000 0! #434500 1! #434600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #434700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #435000 0! #435500 1! #435600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #435700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #436000 0! #436500 1! #436600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #436700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1` b111 g bx11 c 0e 0h #437000 0! #437500 1! #437600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #437700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #438000 0! #438500 1! #438600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #438700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #439000 0! #439500 1! #439600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #439700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #440000 0! #440500 1! #440600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #440700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #441000 0! #441500 1! #441600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #441700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #442000 0! #442500 1! #442600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #442700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #443000 0! #443500 1! #443600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #443700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #444000 0! #444500 1! #444600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #444700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #445000 0! #445500 1! #445600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #445700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #446000 0! #446500 1! #446600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #446700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #447000 0! #447500 1! #447600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #447700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #448000 0! #448500 1! #448600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #448700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #449000 0! #449500 1! #449600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #449700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #450000 0! #450500 1! #450600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #450700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #451000 0! #451500 1! #451600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #451700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #452000 0! #452500 1! #452600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #452700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #453000 0! #453500 1! #453600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #453700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #454000 0! #454500 1! #454600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #454700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #455000 0! #455500 1! #455600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #455700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #456000 0! #456500 1! #456600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #456700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #457000 0! #457500 1! #457600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #457700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #458000 0! #458500 1! #458600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #458700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #459000 0! #459500 1! #459600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #459700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #460000 0! #460500 1! #460600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #460700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #461000 0! #461500 1! #461600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #461700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #462000 0! #462500 1! #462600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #462700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #463000 0! #463500 1! #463600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #463700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #464000 0! #464500 1! #464600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #464700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #465000 0! #465500 1! #465600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #465700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #466000 0! #466500 1! #466600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #466700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #467000 0! #467500 1! #467600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #467700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #468000 0! #468500 1! #468600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #468700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #469000 0! #469500 1! #469600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #469700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #470000 0! #470500 1! #470600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #470700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #471000 0! #471500 1! #471600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #471700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #472000 0! #472500 1! #472600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #472700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #473000 0! #473500 1! #473600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #473700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #474000 0! #474500 1! #474600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #474700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #475000 0! #475500 1! #475600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #475700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #476000 0! #476500 1! #476600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #476700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #477000 0! #477500 1! #477600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #477700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #478000 0! #478500 1! #478600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #478700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #479000 0! #479500 1! #479600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #479700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #480000 0! #480500 1! #480600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #480700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #481000 0! #481500 1! #481600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #481700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #482000 0! #482500 1! #482600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #482700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #483000 0! #483500 1! #483600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #483700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #484000 0! #484500 1! #484600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #484700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #485000 0! #485500 1! #485600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #485700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #486000 0! #486500 1! #486600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #486700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #487000 0! #487500 1! #487600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #487700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #488000 0! #488500 1! #488600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #488700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #489000 0! #489500 1! #489600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #489700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #490000 0! #490500 1! #490600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #490700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #491000 0! #491500 1! #491600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #491700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #492000 0! #492500 1! #492600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #492700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #493000 0! #493500 1! #493600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #493700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #494000 0! #494500 1! #494600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #494700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #495000 0! #495500 1! #495600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #495700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #496000 0! #496500 1! #496600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #496700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #497000 0! #497500 1! #497600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #497700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #498000 0! #498500 1! #498600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #498700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #499000 0! #499500 1! #499600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #499700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #500000 0! #500500 1! #500600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #500700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #501000 0! #501500 1! #501600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #501700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #502000 0! #502500 1! #502600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #502700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #503000 0! #503500 1! #503600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #503700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #504000 0! #504500 1! #504600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #504700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #505000 0! #505500 1! #505600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #505700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #506000 0! #506500 1! #506600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #506700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #507000 0! #507500 1! #507600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #507700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #508000 0! #508500 1! #508600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #508700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #509000 0! #509500 1! #509600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #509700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #510000 0! #510500 1! #510600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #510700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #511000 0! #511500 1! #511600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #511700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #512000 0! #512500 1! #512600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #512700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #513000 0! #513500 1! #513600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #513700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #514000 0! #514500 1! #514600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #514700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #515000 0! #515500 1! #515600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #515700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #516000 0! #516500 1! #516600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #516700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #517000 0! #517500 1! #517600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #517700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #518000 0! #518500 1! #518600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #518700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #519000 0! #519500 1! #519600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #519700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #520000 0! #520500 1! #520600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #520700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #521000 0! #521500 1! #521600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #521700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #522000 0! #522500 1! #522600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #522700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #523000 0! #523500 1! #523600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #523700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #524000 0! #524500 1! #524600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #524700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #525000 0! #525500 1! #525600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #525700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #526000 0! #526500 1! #526600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #526700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #527000 0! #527500 1! #527600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #527700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #528000 0! #528500 1! #528600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #528700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #529000 0! #529500 1! #529600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #529700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #530000 0! #530500 1! #530600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #530700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #531000 0! #531500 1! #531600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #531700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #532000 0! #532500 1! #532600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #532700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #533000 0! #533500 1! #533600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #533700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #534000 0! #534500 1! #534600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #534700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #535000 0! #535500 1! #535600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #535700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #536000 0! #536500 1! #536600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #536700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #537000 0! #537500 1! #537600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #537700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #538000 0! #538500 1! #538600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #538700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0i #539000 0! #539500 1! #539600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #539700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #540000 0! #540500 1! #540600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #540700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #541000 0! #541500 1! #541600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #541700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #542000 0! #542500 1! #542600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #542700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #543000 0! #543500 1! #543600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #543700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #544000 0! #544500 1! #544600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #544700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #545000 0! #545500 1! #545600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #545700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #546000 0! #546500 1! #546600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #546700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #547000 0! #547500 1! #547600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #547700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #548000 0! #548500 1! #548600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #548700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #549000 0! #549500 1! #549600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #549700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #550000 0! #550500 1! #550600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #550700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #551000 0! #551500 1! #551600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #551700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #552000 0! #552500 1! #552600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #552700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #553000 0! #553500 1! #553600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #553700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #554000 0! #554500 1! #554600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #554700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #555000 0! #555500 1! #555600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #555700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #556000 0! #556500 1! #556600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #556700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #557000 0! #557500 1! #557600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #557700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #558000 0! #558500 1! #558600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #558700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #559000 0! #559500 1! #559600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #559700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #560000 0! #560500 1! #560600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #560700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #561000 0! #561500 1! #561600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #561700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #562000 0! #562500 1! #562600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #562700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #563000 0! #563500 1! #563600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #563700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #564000 0! #564500 1! #564600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #564700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #565000 0! #565500 1! #565600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #565700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #566000 0! #566500 1! #566600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #566700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #567000 0! #567500 1! #567600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #567700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #568000 0! #568500 1! #568600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #568700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #569000 0! #569500 1! #569600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #569700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #570000 0! #570500 1! #570600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #570700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #571000 0! #571500 1! #571600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #571700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #572000 0! #572500 1! #572600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #572700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #573000 0! #573500 1! #573600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #573700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #574000 0! #574500 1! #574600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #574700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #575000 0! #575500 1! #575600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #575700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #576000 0! #576500 1! #576600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #576700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #577000 0! #577500 1! #577600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #577700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #578000 0! #578500 1! #578600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #578700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #579000 0! #579500 1! #579600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #579700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #580000 0! #580500 1! #580600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #580700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #581000 0! #581500 1! #581600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #581700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #582000 0! #582500 1! #582600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #582700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #583000 0! #583500 1! #583600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #583700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #584000 0! #584500 1! #584600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #584700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #585000 0! #585500 1! #585600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #585700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #586000 0! #586500 1! #586600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #586700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #587000 0! #587500 1! #587600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #587700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #588000 0! #588500 1! #588600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #588700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #589000 0! #589500 1! #589600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #589700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #590000 0! #590500 1! #590600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #590700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #591000 0! #591500 1! #591600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #591700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #592000 0! #592500 1! #592600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #592700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #593000 0! #593500 1! #593600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #593700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #594000 0! #594500 1! #594600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #594700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #595000 0! #595500 1! #595600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #595700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #596000 0! #596500 1! #596600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #596700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #597000 0! #597500 1! #597600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #597700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #598000 0! #598500 1! #598600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #598700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #599000 0! #599500 1! #599600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #599700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #600000 0! #600500 1! #600600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #600700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #601000 0! #601500 1! #601600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #601700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #602000 0! #602500 1! #602600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #602700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #603000 0! #603500 1! #603600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #603700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #604000 0! #604500 1! #604600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #604700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #605000 0! #605500 1! #605600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #605700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #606000 0! #606500 1! #606600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #606700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #607000 0! #607500 1! #607600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #607700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #608000 0! #608500 1! #608600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #608700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #609000 0! #609500 1! #609600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #609700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #610000 0! #610500 1! #610600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #610700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #611000 0! #611500 1! #611600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #611700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #612000 0! #612500 1! #612600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #612700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #613000 0! #613500 1! #613600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #613700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #614000 0! #614500 1! #614600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #614700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #615000 0! #615500 1! #615600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #615700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #616000 0! #616500 1! #616600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #616700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #617000 0! #617500 1! #617600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #617700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #618000 0! #618500 1! #618600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #618700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #619000 0! #619500 1! #619600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #619700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #620000 0! #620500 1! #620600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #620700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #621000 0! #621500 1! #621600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #621700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #622000 0! #622500 1! #622600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #622700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #623000 0! #623500 1! #623600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #623700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #624000 0! #624500 1! #624600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #624700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #625000 0! #625500 1! #625600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #625700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #626000 0! #626500 1! #626600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #626700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #627000 0! #627500 1! #627600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #627700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #628000 0! #628500 1! #628600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #628700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #629000 0! #629500 1! #629600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #629700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #630000 0! #630500 1! #630600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #630700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #631000 0! #631500 1! #631600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #631700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #632000 0! #632500 1! #632600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #632700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #633000 0! #633500 1! #633600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #633700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #634000 0! #634500 1! #634600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #634700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #635000 0! #635500 1! #635600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #635700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #636000 0! #636500 1! #636600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #636700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #637000 0! #637500 1! #637600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #637700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #638000 0! #638500 1! #638600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #638700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #639000 0! #639500 1! #639600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #639700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #640000 0! #640500 1! #640600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0Q 0O #640700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0_ 0f #641000 0! #641500 1! #641600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #641700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #642000 0! #642500 1! #642600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #642700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #643000 0! #643500 1! #643600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #643700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #644000 0! #644500 1! #644600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #644700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #645000 0! #645500 1! #645600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #645700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #646000 0! #646500 1! #646600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #646700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #647000 0! #647500 1! #647600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #647700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #648000 0! #648500 1! #648600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #648700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #649000 0! #649500 1! #649600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #649700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #650000 0! #650500 1! #650600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #650700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #651000 0! #651500 1! #651600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #651700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #652000 0! #652500 1! #652600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #652700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #653000 0! #653500 1! #653600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #653700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #654000 0! #654500 1! #654600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #654700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #655000 0! #655500 1! #655600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #655700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #656000 0! #656500 1! #656600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #656700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #657000 0! #657500 1! #657600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #657700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #658000 0! #658500 1! #658600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #658700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #659000 0! #659500 1! #659600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #659700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #660000 0! #660500 1! #660600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #660700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #661000 0! #661500 1! #661600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #661700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #662000 0! #662500 1! #662600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #662700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #663000 0! #663500 1! #663600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #663700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #664000 0! #664500 1! #664600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #664700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #665000 0! #665500 1! #665600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #665700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #666000 0! #666500 1! #666600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #666700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #667000 0! #667500 1! #667600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #667700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #668000 0! #668500 1! #668600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #668700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #669000 0! #669500 1! #669600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #669700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #670000 0! #670500 1! #670600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #670700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #671000 0! #671500 1! #671600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #671700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #672000 0! #672500 1! #672600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #672700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #673000 0! #673500 1! #673600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #673700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #674000 0! #674500 1! #674600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #674700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #675000 0! #675500 1! #675600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #675700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #676000 0! #676500 1! #676600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #676700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #677000 0! #677500 1! #677600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #677700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #678000 0! #678500 1! #678600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #678700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #679000 0! #679500 1! #679600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #679700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #680000 0! #680500 1! #680600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #680700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #681000 0! #681500 1! #681600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #681700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #682000 0! #682500 1! #682600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #682700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #683000 0! #683500 1! #683600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #683700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #684000 0! #684500 1! #684600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #684700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #685000 0! #685500 1! #685600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #685700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #686000 0! #686500 1! #686600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #686700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #687000 0! #687500 1! #687600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #687700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #688000 0! #688500 1! #688600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #688700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #689000 0! #689500 1! #689600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #689700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #690000 0! #690500 1! #690600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #690700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #691000 0! #691500 1! #691600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #691700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0` b110 g bx110 c #692000 0! #692500 1! #692600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #692700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #693000 0! #693500 1! #693600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #693700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #694000 0! #694500 1! #694600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #694700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #695000 0! #695500 1! #695600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #695700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #696000 0! #696500 1! #696600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #696700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #697000 0! #697500 1! #697600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #697700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #698000 0! #698500 1! #698600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #698700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #699000 0! #699500 1! #699600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #699700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #700000 0! #700500 1! #700600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #700700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #701000 0! #701500 1! #701600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #701700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #702000 0! #702500 1! #702600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #702700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #703000 0! #703500 1! #703600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #703700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #704000 0! #704500 1! #704600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #704700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #705000 0! #705500 1! #705600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #705700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #706000 0! #706500 1! #706600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #706700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #707000 0! #707500 1! #707600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #707700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #708000 0! #708500 1! #708600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #708700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #709000 0! #709500 1! #709600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #709700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #710000 0! #710500 1! #710600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #710700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #711000 0! #711500 1! #711600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #711700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #712000 0! #712500 1! #712600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #712700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #713000 0! #713500 1! #713600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #713700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #714000 0! #714500 1! #714600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #714700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #715000 0! #715500 1! #715600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #715700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #716000 0! #716500 1! #716600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #716700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #717000 0! #717500 1! #717600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #717700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #718000 0! #718500 1! #718600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #718700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #719000 0! #719500 1! #719600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #719700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #720000 0! #720500 1! #720600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #720700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #721000 0! #721500 1! #721600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #721700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #722000 0! #722500 1! #722600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #722700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #723000 0! #723500 1! #723600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #723700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #724000 0! #724500 1! #724600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #724700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #725000 0! #725500 1! #725600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #725700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #726000 0! #726500 1! #726600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #726700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #727000 0! #727500 1! #727600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #727700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #728000 0! #728500 1! #728600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #728700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #729000 0! #729500 1! #729600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #729700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #730000 0! #730500 1! #730600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #730700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #731000 0! #731500 1! #731600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #731700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #732000 0! #732500 1! #732600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #732700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #733000 0! #733500 1! #733600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #733700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #734000 0! #734500 1! #734600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #734700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #735000 0! #735500 1! #735600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #735700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #736000 0! #736500 1! #736600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #736700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #737000 0! #737500 1! #737600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #737700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #738000 0! #738500 1! #738600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #738700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #739000 0! #739500 1! #739600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #739700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #740000 0! #740500 1! #740600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #740700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #741000 0! #741500 1! #741600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #741700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #742000 0! #742500 1! #742600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #742700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #743000 0! #743500 1! #743600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #743700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #744000 0! #744500 1! #744600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #744700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #745000 0! #745500 1! #745600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #745700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #746000 0! #746500 1! #746600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #746700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #747000 0! #747500 1! #747600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #747700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #748000 0! #748500 1! #748600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #748700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #749000 0! #749500 1! #749600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #749700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #750000 0! #750500 1! #750600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #750700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #751000 0! #751500 1! #751600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #751700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #752000 0! #752500 1! #752600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #752700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #753000 0! #753500 1! #753600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #753700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #754000 0! #754500 1! #754600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #754700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #755000 0! #755500 1! #755600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #755700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #756000 0! #756500 1! #756600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #756700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #757000 0! #757500 1! #757600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #757700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #758000 0! #758500 1! #758600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #758700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #759000 0! #759500 1! #759600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #759700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #760000 0! #760500 1! #760600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #760700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #761000 0! #761500 1! #761600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #761700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #762000 0! #762500 1! #762600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #762700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #763000 0! #763500 1! #763600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #763700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #764000 0! #764500 1! #764600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #764700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #765000 0! #765500 1! #765600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #765700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #766000 0! #766500 1! #766600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #766700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #767000 0! #767500 1! #767600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #767700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #768000 0! #768500 1! #768600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #768700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #769000 0! #769500 1! #769600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #769700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #770000 0! #770500 1! #770600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #770700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #771000 0! #771500 1! #771600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #771700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #772000 0! #772500 1! #772600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #772700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #773000 0! #773500 1! #773600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #773700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #774000 0! #774500 1! #774600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #774700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #775000 0! #775500 1! #775600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #775700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #776000 0! #776500 1! #776600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #776700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #777000 0! #777500 1! #777600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #777700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #778000 0! #778500 1! #778600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #778700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #779000 0! #779500 1! #779600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #779700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #780000 0! #780500 1! #780600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #780700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #781000 0! #781500 1! #781600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #781700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #782000 0! #782500 1! #782600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #782700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #783000 0! #783500 1! #783600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #783700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #784000 0! #784500 1! #784600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #784700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #785000 0! #785500 1! #785600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #785700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #786000 0! #786500 1! #786600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #786700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #787000 0! #787500 1! #787600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #787700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #788000 0! #788500 1! #788600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #788700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #789000 0! #789500 1! #789600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #789700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #790000 0! #790500 1! #790600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #790700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #791000 0! #791500 1! #791600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #791700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #792000 0! #792500 1! #792600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #792700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #793000 0! #793500 1! #793600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #793700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #794000 0! #794500 1! #794600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #794700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #795000 0! #795500 1! #795600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #795700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #796000 0! #796500 1! #796600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #796700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #797000 0! #797500 1! #797600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #797700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #798000 0! #798500 1! #798600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #798700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #799000 0! #799500 1! #799600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #799700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #800000 0! #800500 1! #800600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #800700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #801000 0! #801500 1! #801600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #801700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #802000 0! #802500 1! #802600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #802700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #803000 0! #803500 1! #803600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #803700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #804000 0! #804500 1! #804600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #804700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #805000 0! #805500 1! #805600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #805700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #806000 0! #806500 1! #806600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #806700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #807000 0! #807500 1! #807600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #807700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #808000 0! #808500 1! #808600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #808700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #809000 0! #809500 1! #809600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #809700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #810000 0! #810500 1! #810600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #810700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #811000 0! #811500 1! #811600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #811700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #812000 0! #812500 1! #812600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #812700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #813000 0! #813500 1! #813600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #813700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #814000 0! #814500 1! #814600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #814700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #815000 0! #815500 1! #815600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #815700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #816000 0! #816500 1! #816600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #816700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #817000 0! #817500 1! #817600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #817700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #818000 0! #818500 1! #818600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #818700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #819000 0! #819500 1! #819600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #819700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #820000 0! #820500 1! #820600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #820700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #821000 0! #821500 1! #821600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #821700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #822000 0! #822500 1! #822600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #822700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #823000 0! #823500 1! #823600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #823700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #824000 0! #824500 1! #824600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #824700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #825000 0! #825500 1! #825600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #825700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #826000 0! #826500 1! #826600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #826700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #827000 0! #827500 1! #827600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #827700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #828000 0! #828500 1! #828600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #828700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #829000 0! #829500 1! #829600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #829700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #830000 0! #830500 1! #830600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #830700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #831000 0! #831500 1! #831600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #831700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #832000 0! #832500 1! #832600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #832700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #833000 0! #833500 1! #833600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #833700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #834000 0! #834500 1! #834600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #834700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #835000 0! #835500 1! #835600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #835700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #836000 0! #836500 1! #836600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #836700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #837000 0! #837500 1! #837600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #837700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #838000 0! #838500 1! #838600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #838700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #839000 0! #839500 1! #839600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #839700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #840000 0! #840500 1! #840600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #840700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #841000 0! #841500 1! #841600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #841700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #842000 0! #842500 1! #842600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #842700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #843000 0! #843500 1! #843600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #843700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #844000 0! #844500 1! #844600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #844700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #845000 0! #845500 1! #845600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #845700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #846000 0! #846500 1! #846600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #846700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #847000 0! #847500 1! #847600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #847700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #848000 0! #848500 1! #848600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #848700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #849000 0! #849500 1! #849600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #849700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #850000 0! #850500 1! #850600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #850700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #851000 0! #851500 1! #851600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #851700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #852000 0! #852500 1! #852600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #852700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #853000 0! #853500 1! #853600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #853700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #854000 0! #854500 1! #854600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #854700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #855000 0! #855500 1! #855600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #855700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #856000 0! #856500 1! #856600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #856700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #857000 0! #857500 1! #857600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #857700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #858000 0! #858500 1! #858600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #858700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #859000 0! #859500 1! #859600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #859700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #860000 0! #860500 1! #860600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #860700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #861000 0! #861500 1! #861600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #861700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #862000 0! #862500 1! #862600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #862700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #863000 0! #863500 1! #863600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #863700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #864000 0! #864500 1! #864600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #864700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #865000 0! #865500 1! #865600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #865700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #866000 0! #866500 1! #866600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #866700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #867000 0! #867500 1! #867600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #867700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #868000 0! #868500 1! #868600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #868700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #869000 0! #869500 1! #869600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #869700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #870000 0! #870500 1! #870600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #870700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #871000 0! #871500 1! #871600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #871700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #872000 0! #872500 1! #872600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #872700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #873000 0! #873500 1! #873600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #873700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #874000 0! #874500 1! #874600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #874700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #875000 0! #875500 1! #875600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #875700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #876000 0! #876500 1! #876600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #876700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #877000 0! #877500 1! #877600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #877700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #878000 0! #878500 1! #878600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #878700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #879000 0! #879500 1! #879600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #879700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #880000 0! #880500 1! #880600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #880700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #881000 0! #881500 1! #881600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #881700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #882000 0! #882500 1! #882600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #882700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #883000 0! #883500 1! #883600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #883700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #884000 0! #884500 1! #884600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #884700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #885000 0! #885500 1! #885600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #885700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #886000 0! #886500 1! #886600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #886700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #887000 0! #887500 1! #887600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #887700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #888000 0! #888500 1! #888600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #888700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #889000 0! #889500 1! #889600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #889700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #890000 0! #890500 1! #890600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #890700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #891000 0! #891500 1! #891600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #891700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #892000 0! #892500 1! #892600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #892700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #893000 0! #893500 1! #893600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #893700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #894000 0! #894500 1! #894600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #894700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #895000 0! #895500 1! #895600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1Q 1O #895700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #896000 0! #896500 1! #896600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #896700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #897000 0! #897500 1! #897600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #897700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #898000 0! #898500 1! #898600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #898700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #899000 0! #899500 1! #899600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #899700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #900000 0! #900500 1! #900600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #900700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #901000 0! #901500 1! #901600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #901700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #902000 0! #902500 1! #902600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #902700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #903000 0! #903500 1! #903600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #903700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #904000 0! #904500 1! #904600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #904700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #905000 0! #905500 1! #905600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #905700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #906000 0! #906500 1! #906600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #906700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #907000 0! #907500 1! #907600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #907700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #908000 0! #908500 1! #908600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #908700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #909000 0! #909500 1! #909600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #909700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #910000 0! #910500 1! #910600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #910700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #911000 0! #911500 1! #911600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #911700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #912000 0! #912500 1! #912600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #912700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #913000 0! #913500 1! #913600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #913700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #914000 0! #914500 1! #914600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #914700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #915000 0! #915500 1! #915600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #915700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #916000 0! #916500 1! #916600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #916700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #917000 0! #917500 1! #917600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #917700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #918000 0! #918500 1! #918600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #918700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #919000 0! #919500 1! #919600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #919700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #920000 0! #920500 1! #920600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #920700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #921000 0! #921500 1! #921600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #921700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #922000 0! #922500 1! #922600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #922700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #923000 0! #923500 1! #923600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #923700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #924000 0! #924500 1! #924600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #924700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #925000 0! #925500 1! #925600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #925700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #926000 0! #926500 1! #926600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #926700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #927000 0! #927500 1! #927600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #927700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #928000 0! #928500 1! #928600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #928700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #929000 0! #929500 1! #929600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #929700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #930000 0! #930500 1! #930600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #930700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #931000 0! #931500 1! #931600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #931700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #932000 0! #932500 1! #932600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #932700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #933000 0! #933500 1! #933600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #933700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #934000 0! #934500 1! #934600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #934700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #935000 0! #935500 1! #935600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #935700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #936000 0! #936500 1! #936600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #936700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #937000 0! #937500 1! #937600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #937700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #938000 0! #938500 1! #938600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #938700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #939000 0! #939500 1! #939600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #939700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #940000 0! #940500 1! #940600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #940700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #941000 0! #941500 1! #941600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #941700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #942000 0! #942500 1! #942600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #942700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #943000 0! #943500 1! #943600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #943700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #944000 0! #944500 1! #944600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #944700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #945000 0! #945500 1! #945600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #945700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #946000 0! #946500 1! #946600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #946700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H b101 g bx1101 c #947000 0! #947500 1! #947600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #947700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #948000 0! #948500 1! #948600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #948700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #949000 0! #949500 1! #949600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #949700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #950000 0! #950500 1! #950600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #950700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #951000 0! #951500 1! #951600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #951700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #952000 0! #952500 1! #952600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #952700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #953000 0! #953500 1! #953600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #953700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #954000 0! #954500 1! #954600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #954700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #955000 0! #955500 1! #955600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #955700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #956000 0! #956500 1! #956600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #956700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #957000 0! #957500 1! #957600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #957700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #958000 0! #958500 1! #958600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #958700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #959000 0! #959500 1! #959600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #959700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #960000 0! #960500 1! #960600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #960700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #961000 0! #961500 1! #961600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #961700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #962000 0! #962500 1! #962600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #962700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #963000 0! #963500 1! #963600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #963700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #964000 0! #964500 1! #964600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #964700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #965000 0! #965500 1! #965600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #965700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #966000 0! #966500 1! #966600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #966700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #967000 0! #967500 1! #967600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #967700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #968000 0! #968500 1! #968600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #968700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #969000 0! #969500 1! #969600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #969700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #970000 0! #970500 1! #970600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #970700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #971000 0! #971500 1! #971600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #971700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #972000 0! #972500 1! #972600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #972700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #973000 0! #973500 1! #973600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #973700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #974000 0! #974500 1! #974600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #974700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #975000 0! #975500 1! #975600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #975700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #976000 0! #976500 1! #976600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #976700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #977000 0! #977500 1! #977600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #977700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #978000 0! #978500 1! #978600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #978700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #979000 0! #979500 1! #979600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #979700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #980000 0! #980500 1! #980600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #980700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #981000 0! #981500 1! #981600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #981700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #982000 0! #982500 1! #982600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #982700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #983000 0! #983500 1! #983600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #983700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #984000 0! #984500 1! #984600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #984700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #985000 0! #985500 1! #985600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #985700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #986000 0! #986500 1! #986600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #986700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #987000 0! #987500 1! #987600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #987700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #988000 0! #988500 1! #988600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #988700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #989000 0! #989500 1! #989600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #989700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #990000 0! #990500 1! #990600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #990700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #991000 0! #991500 1! #991600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #991700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #992000 0! #992500 1! #992600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #992700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #993000 0! #993500 1! #993600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #993700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #994000 0! #994500 1! #994600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #994700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #995000 0! #995500 1! #995600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #995700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #996000 0! #996500 1! #996600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #996700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #997000 0! #997500 1! #997600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #997700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #998000 0! #998500 1! #998600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #998700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #999000 0! #999500 1! #999600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #999700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1000000 0! #1000500 1! #1000600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1000700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1001000 0! #1001500 1! #1001600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1001700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1002000 0! #1002500 1! #1002600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1002700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1003000 0! #1003500 1! #1003600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1003700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1004000 0! #1004500 1! #1004600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1004700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1005000 0! #1005500 1! #1005600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1005700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1006000 0! #1006500 1! #1006600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1006700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1007000 0! #1007500 1! #1007600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1007700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1008000 0! #1008500 1! #1008600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1008700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1009000 0! #1009500 1! #1009600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1009700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1010000 0! #1010500 1! #1010600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1010700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1011000 0! #1011500 1! #1011600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1011700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1012000 0! #1012500 1! #1012600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1012700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1013000 0! #1013500 1! #1013600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1013700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1014000 0! #1014500 1! #1014600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1014700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1015000 0! #1015500 1! #1015600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1015700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1016000 0! #1016500 1! #1016600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1016700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1017000 0! #1017500 1! #1017600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1017700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1018000 0! #1018500 1! #1018600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1018700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1019000 0! #1019500 1! #1019600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1019700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1020000 0! #1020500 1! #1020600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1020700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1021000 0! #1021500 1! #1021600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1021700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1022000 0! #1022500 1! #1022600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1022700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1023000 0! #1023500 1! #1023600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1023700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1024000 0! #1024500 1! #1024600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1024700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1025000 0! #1025500 1! #1025600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1025700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1026000 0! #1026500 1! #1026600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1026700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1027000 0! #1027500 1! #1027600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1027700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1028000 0! #1028500 1! #1028600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1028700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1029000 0! #1029500 1! #1029600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1029700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1030000 0! #1030500 1! #1030600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1030700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1031000 0! #1031500 1! #1031600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1031700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1032000 0! #1032500 1! #1032600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1032700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1033000 0! #1033500 1! #1033600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1033700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1034000 0! #1034500 1! #1034600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1034700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1035000 0! #1035500 1! #1035600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1035700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1036000 0! #1036500 1! #1036600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1036700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1037000 0! #1037500 1! #1037600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1037700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1038000 0! #1038500 1! #1038600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1038700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1039000 0! #1039500 1! #1039600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1039700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1040000 0! #1040500 1! #1040600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1040700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1041000 0! #1041500 1! #1041600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1041700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1042000 0! #1042500 1! #1042600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1042700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1043000 0! #1043500 1! #1043600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1043700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1044000 0! #1044500 1! #1044600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1044700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1045000 0! #1045500 1! #1045600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1045700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1046000 0! #1046500 1! #1046600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1046700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1047000 0! #1047500 1! #1047600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1047700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1048000 0! #1048500 1! #1048600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #1048700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1049000 0! #1049500 1! #1049600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1049700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1050000 0! #1050500 1! #1050600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1050700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1051000 0! #1051500 1! #1051600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1051700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1052000 0! #1052500 1! #1052600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1052700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1053000 0! #1053500 1! #1053600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1053700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1054000 0! #1054500 1! #1054600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1054700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1055000 0! #1055500 1! #1055600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1055700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1056000 0! #1056500 1! #1056600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1056700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1057000 0! #1057500 1! #1057600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1057700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1058000 0! #1058500 1! #1058600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1058700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1059000 0! #1059500 1! #1059600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1059700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1060000 0! #1060500 1! #1060600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1060700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1061000 0! #1061500 1! #1061600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1061700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1062000 0! #1062500 1! #1062600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1062700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1063000 0! #1063500 1! #1063600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1063700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1064000 0! #1064500 1! #1064600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1064700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1065000 0! #1065500 1! #1065600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1065700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1066000 0! #1066500 1! #1066600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1066700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1067000 0! #1067500 1! #1067600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1067700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1068000 0! #1068500 1! #1068600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1068700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1069000 0! #1069500 1! #1069600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1069700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1070000 0! #1070500 1! #1070600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1070700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1071000 0! #1071500 1! #1071600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1071700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1072000 0! #1072500 1! #1072600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1072700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1073000 0! #1073500 1! #1073600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1073700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1074000 0! #1074500 1! #1074600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1074700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1075000 0! #1075500 1! #1075600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1075700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1076000 0! #1076500 1! #1076600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1076700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1077000 0! #1077500 1! #1077600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1077700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1078000 0! #1078500 1! #1078600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1078700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1079000 0! #1079500 1! #1079600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1079700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1080000 0! #1080500 1! #1080600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1080700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1081000 0! #1081500 1! #1081600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1081700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1082000 0! #1082500 1! #1082600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1082700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1083000 0! #1083500 1! #1083600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1083700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1084000 0! #1084500 1! #1084600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1084700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1085000 0! #1085500 1! #1085600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1085700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1086000 0! #1086500 1! #1086600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1086700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1087000 0! #1087500 1! #1087600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1087700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1088000 0! #1088500 1! #1088600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1088700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1089000 0! #1089500 1! #1089600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1089700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1090000 0! #1090500 1! #1090600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1090700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1091000 0! #1091500 1! #1091600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1091700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1092000 0! #1092500 1! #1092600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1092700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1093000 0! #1093500 1! #1093600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1093700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1094000 0! #1094500 1! #1094600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1094700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1095000 0! #1095500 1! #1095600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1095700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1096000 0! #1096500 1! #1096600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1096700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1097000 0! #1097500 1! #1097600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1097700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1098000 0! #1098500 1! #1098600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1098700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1099000 0! #1099500 1! #1099600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1099700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1100000 0! #1100500 1! #1100600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1100700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1101000 0! #1101500 1! #1101600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1101700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1102000 0! #1102500 1! #1102600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1102700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1103000 0! #1103500 1! #1103600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1103700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1104000 0! #1104500 1! #1104600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1104700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1105000 0! #1105500 1! #1105600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1105700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1106000 0! #1106500 1! #1106600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1106700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1107000 0! #1107500 1! #1107600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1107700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1108000 0! #1108500 1! #1108600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1108700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1109000 0! #1109500 1! #1109600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1109700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1110000 0! #1110500 1! #1110600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1110700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1111000 0! #1111500 1! #1111600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1111700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1112000 0! #1112500 1! #1112600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1112700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1113000 0! #1113500 1! #1113600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1113700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1114000 0! #1114500 1! #1114600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1114700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1115000 0! #1115500 1! #1115600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1115700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1116000 0! #1116500 1! #1116600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1116700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1117000 0! #1117500 1! #1117600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1117700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1118000 0! #1118500 1! #1118600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1118700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1119000 0! #1119500 1! #1119600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1119700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1120000 0! #1120500 1! #1120600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1120700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1121000 0! #1121500 1! #1121600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1121700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1122000 0! #1122500 1! #1122600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1122700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1123000 0! #1123500 1! #1123600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1123700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1124000 0! #1124500 1! #1124600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1124700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1125000 0! #1125500 1! #1125600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1125700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1126000 0! #1126500 1! #1126600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1126700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1127000 0! #1127500 1! #1127600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1127700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1128000 0! #1128500 1! #1128600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1128700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1129000 0! #1129500 1! #1129600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1129700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1130000 0! #1130500 1! #1130600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1130700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1131000 0! #1131500 1! #1131600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1131700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1132000 0! #1132500 1! #1132600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1132700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1133000 0! #1133500 1! #1133600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1133700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1134000 0! #1134500 1! #1134600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1134700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1135000 0! #1135500 1! #1135600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1135700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1136000 0! #1136500 1! #1136600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1136700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1137000 0! #1137500 1! #1137600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1137700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1138000 0! #1138500 1! #1138600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1138700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1139000 0! #1139500 1! #1139600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1139700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1140000 0! #1140500 1! #1140600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1140700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1141000 0! #1141500 1! #1141600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1141700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1142000 0! #1142500 1! #1142600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1142700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1143000 0! #1143500 1! #1143600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1143700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1144000 0! #1144500 1! #1144600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1144700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1145000 0! #1145500 1! #1145600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1145700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1146000 0! #1146500 1! #1146600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1146700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1147000 0! #1147500 1! #1147600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1147700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1148000 0! #1148500 1! #1148600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1148700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1149000 0! #1149500 1! #1149600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1149700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1150000 0! #1150500 1! #1150600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0Q 0O #1150700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1151000 0! #1151500 1! #1151600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1151700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1152000 0! #1152500 1! #1152600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1152700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1153000 0! #1153500 1! #1153600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1153700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1154000 0! #1154500 1! #1154600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1154700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1155000 0! #1155500 1! #1155600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1155700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1156000 0! #1156500 1! #1156600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1156700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1157000 0! #1157500 1! #1157600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1157700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1158000 0! #1158500 1! #1158600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1158700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1159000 0! #1159500 1! #1159600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1159700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1160000 0! #1160500 1! #1160600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1160700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1161000 0! #1161500 1! #1161600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1161700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1162000 0! #1162500 1! #1162600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1162700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1163000 0! #1163500 1! #1163600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1163700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1164000 0! #1164500 1! #1164600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1164700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1165000 0! #1165500 1! #1165600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1165700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1166000 0! #1166500 1! #1166600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1166700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1167000 0! #1167500 1! #1167600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1167700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1168000 0! #1168500 1! #1168600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1168700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1169000 0! #1169500 1! #1169600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1169700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1170000 0! #1170500 1! #1170600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1170700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1171000 0! #1171500 1! #1171600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1171700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1172000 0! #1172500 1! #1172600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1172700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1173000 0! #1173500 1! #1173600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1173700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1174000 0! #1174500 1! #1174600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1174700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1175000 0! #1175500 1! #1175600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1175700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1176000 0! #1176500 1! #1176600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1176700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1177000 0! #1177500 1! #1177600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1177700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1178000 0! #1178500 1! #1178600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1178700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1179000 0! #1179500 1! #1179600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1179700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1180000 0! #1180500 1! #1180600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1180700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1181000 0! #1181500 1! #1181600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1181700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1182000 0! #1182500 1! #1182600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1182700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1183000 0! #1183500 1! #1183600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1183700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1184000 0! #1184500 1! #1184600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1184700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1185000 0! #1185500 1! #1185600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1185700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1186000 0! #1186500 1! #1186600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1186700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1187000 0! #1187500 1! #1187600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1187700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1188000 0! #1188500 1! #1188600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1188700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1189000 0! #1189500 1! #1189600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1189700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1190000 0! #1190500 1! #1190600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1190700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1191000 0! #1191500 1! #1191600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1191700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1192000 0! #1192500 1! #1192600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1192700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1193000 0! #1193500 1! #1193600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1193700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1194000 0! #1194500 1! #1194600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1194700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1195000 0! #1195500 1! #1195600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1195700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1196000 0! #1196500 1! #1196600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1196700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1197000 0! #1197500 1! #1197600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1197700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1198000 0! #1198500 1! #1198600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1198700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1199000 0! #1199500 1! #1199600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1199700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1200000 0! #1200500 1! #1200600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1200700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1201000 0! #1201500 1! #1201600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #1201700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H b100 g bx11010 c #1202000 0! #1202500 1! #1202600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1202700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1203000 0! #1203500 1! #1203600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1203700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1204000 0! #1204500 1! #1204600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1204700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1205000 0! #1205500 1! #1205600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1205700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1206000 0! #1206500 1! #1206600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1206700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1207000 0! #1207500 1! #1207600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1207700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1208000 0! #1208500 1! #1208600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1208700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1209000 0! #1209500 1! #1209600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1209700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1210000 0! #1210500 1! #1210600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1210700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1211000 0! #1211500 1! #1211600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1211700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1212000 0! #1212500 1! #1212600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1212700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1213000 0! #1213500 1! #1213600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1213700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1214000 0! #1214500 1! #1214600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1214700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1215000 0! #1215500 1! #1215600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1215700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1216000 0! #1216500 1! #1216600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1216700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1217000 0! #1217500 1! #1217600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1217700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1218000 0! #1218500 1! #1218600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1218700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1219000 0! #1219500 1! #1219600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1219700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1220000 0! #1220500 1! #1220600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1220700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1221000 0! #1221500 1! #1221600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1221700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1222000 0! #1222500 1! #1222600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1222700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1223000 0! #1223500 1! #1223600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1223700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1224000 0! #1224500 1! #1224600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1224700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1225000 0! #1225500 1! #1225600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1225700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1226000 0! #1226500 1! #1226600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1226700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1227000 0! #1227500 1! #1227600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1227700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1228000 0! #1228500 1! #1228600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1228700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1229000 0! #1229500 1! #1229600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1229700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1230000 0! #1230500 1! #1230600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1230700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1231000 0! #1231500 1! #1231600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1231700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1232000 0! #1232500 1! #1232600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1232700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1233000 0! #1233500 1! #1233600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1233700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1234000 0! #1234500 1! #1234600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1234700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1235000 0! #1235500 1! #1235600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1235700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1236000 0! #1236500 1! #1236600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1236700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1237000 0! #1237500 1! #1237600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1237700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1238000 0! #1238500 1! #1238600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1238700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1239000 0! #1239500 1! #1239600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1239700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1240000 0! #1240500 1! #1240600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1240700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1241000 0! #1241500 1! #1241600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1241700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1242000 0! #1242500 1! #1242600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1242700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1243000 0! #1243500 1! #1243600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1243700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1244000 0! #1244500 1! #1244600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1244700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1245000 0! #1245500 1! #1245600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1245700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1246000 0! #1246500 1! #1246600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1246700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1247000 0! #1247500 1! #1247600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1247700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1248000 0! #1248500 1! #1248600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1248700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1249000 0! #1249500 1! #1249600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1249700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1250000 0! #1250500 1! #1250600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1250700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1251000 0! #1251500 1! #1251600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1251700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1252000 0! #1252500 1! #1252600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1252700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1253000 0! #1253500 1! #1253600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1253700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1254000 0! #1254500 1! #1254600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1254700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1255000 0! #1255500 1! #1255600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1255700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1256000 0! #1256500 1! #1256600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1256700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1257000 0! #1257500 1! #1257600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1257700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1258000 0! #1258500 1! #1258600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1258700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1259000 0! #1259500 1! #1259600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1259700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1260000 0! #1260500 1! #1260600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1260700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1261000 0! #1261500 1! #1261600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1261700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1262000 0! #1262500 1! #1262600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1262700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1263000 0! #1263500 1! #1263600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1263700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1264000 0! #1264500 1! #1264600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1264700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1265000 0! #1265500 1! #1265600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1265700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1266000 0! #1266500 1! #1266600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1266700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1267000 0! #1267500 1! #1267600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1267700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1268000 0! #1268500 1! #1268600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1268700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1269000 0! #1269500 1! #1269600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1269700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1270000 0! #1270500 1! #1270600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1270700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1271000 0! #1271500 1! #1271600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1271700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1272000 0! #1272500 1! #1272600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1272700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1273000 0! #1273500 1! #1273600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1273700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1274000 0! #1274500 1! #1274600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1274700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1275000 0! #1275500 1! #1275600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1275700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1276000 0! #1276500 1! #1276600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1276700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1277000 0! #1277500 1! #1277600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1277700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1278000 0! #1278500 1! #1278600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1278700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1279000 0! #1279500 1! #1279600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1279700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1280000 0! #1280500 1! #1280600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1280700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1281000 0! #1281500 1! #1281600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1281700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1282000 0! #1282500 1! #1282600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1282700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1283000 0! #1283500 1! #1283600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1283700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1284000 0! #1284500 1! #1284600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1284700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1285000 0! #1285500 1! #1285600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1285700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1286000 0! #1286500 1! #1286600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1286700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1287000 0! #1287500 1! #1287600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1287700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1288000 0! #1288500 1! #1288600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1288700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1289000 0! #1289500 1! #1289600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1289700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1290000 0! #1290500 1! #1290600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1290700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1291000 0! #1291500 1! #1291600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1291700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1292000 0! #1292500 1! #1292600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1292700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1293000 0! #1293500 1! #1293600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1293700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1294000 0! #1294500 1! #1294600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1294700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1295000 0! #1295500 1! #1295600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1295700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1296000 0! #1296500 1! #1296600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1296700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1297000 0! #1297500 1! #1297600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1297700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1298000 0! #1298500 1! #1298600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1298700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1299000 0! #1299500 1! #1299600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1299700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1300000 0! #1300500 1! #1300600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1300700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1301000 0! #1301500 1! #1301600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1301700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1302000 0! #1302500 1! #1302600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1302700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1303000 0! #1303500 1! #1303600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #1303700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1304000 0! #1304500 1! #1304600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1304700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1305000 0! #1305500 1! #1305600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1305700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1306000 0! #1306500 1! #1306600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1306700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1307000 0! #1307500 1! #1307600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1307700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1308000 0! #1308500 1! #1308600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1308700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1309000 0! #1309500 1! #1309600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1309700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1310000 0! #1310500 1! #1310600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1310700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1311000 0! #1311500 1! #1311600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1311700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1312000 0! #1312500 1! #1312600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1312700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1313000 0! #1313500 1! #1313600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1313700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1314000 0! #1314500 1! #1314600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1314700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1315000 0! #1315500 1! #1315600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1315700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1316000 0! #1316500 1! #1316600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1316700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1317000 0! #1317500 1! #1317600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1317700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1318000 0! #1318500 1! #1318600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1318700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1319000 0! #1319500 1! #1319600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1319700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1320000 0! #1320500 1! #1320600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1320700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1321000 0! #1321500 1! #1321600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1321700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1322000 0! #1322500 1! #1322600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1322700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1323000 0! #1323500 1! #1323600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1323700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1324000 0! #1324500 1! #1324600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1324700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1325000 0! #1325500 1! #1325600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1325700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1326000 0! #1326500 1! #1326600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1326700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1327000 0! #1327500 1! #1327600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1327700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1328000 0! #1328500 1! #1328600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1328700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1329000 0! #1329500 1! #1329600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1329700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1330000 0! #1330500 1! #1330600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1330700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1331000 0! #1331500 1! #1331600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1331700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1332000 0! #1332500 1! #1332600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1332700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1333000 0! #1333500 1! #1333600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1333700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1334000 0! #1334500 1! #1334600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1334700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1335000 0! #1335500 1! #1335600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1335700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1336000 0! #1336500 1! #1336600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1336700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1337000 0! #1337500 1! #1337600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1337700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1338000 0! #1338500 1! #1338600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1338700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1339000 0! #1339500 1! #1339600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1339700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1340000 0! #1340500 1! #1340600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1340700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1341000 0! #1341500 1! #1341600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1341700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1342000 0! #1342500 1! #1342600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1342700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1343000 0! #1343500 1! #1343600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1343700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1344000 0! #1344500 1! #1344600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1344700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1345000 0! #1345500 1! #1345600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1345700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1346000 0! #1346500 1! #1346600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1346700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1347000 0! #1347500 1! #1347600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1347700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1348000 0! #1348500 1! #1348600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1348700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1349000 0! #1349500 1! #1349600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1349700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1350000 0! #1350500 1! #1350600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1350700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1351000 0! #1351500 1! #1351600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1351700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1352000 0! #1352500 1! #1352600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1352700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1353000 0! #1353500 1! #1353600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1353700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1354000 0! #1354500 1! #1354600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1354700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1355000 0! #1355500 1! #1355600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1355700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1356000 0! #1356500 1! #1356600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1356700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1357000 0! #1357500 1! #1357600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1357700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1358000 0! #1358500 1! #1358600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1358700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1359000 0! #1359500 1! #1359600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1359700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1360000 0! #1360500 1! #1360600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1360700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1361000 0! #1361500 1! #1361600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1361700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1362000 0! #1362500 1! #1362600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1362700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1363000 0! #1363500 1! #1363600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1363700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1364000 0! #1364500 1! #1364600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1364700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1365000 0! #1365500 1! #1365600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1365700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1366000 0! #1366500 1! #1366600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1366700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1367000 0! #1367500 1! #1367600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1367700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1368000 0! #1368500 1! #1368600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1368700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1369000 0! #1369500 1! #1369600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1369700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1370000 0! #1370500 1! #1370600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1370700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1371000 0! #1371500 1! #1371600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1371700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1372000 0! #1372500 1! #1372600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1372700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1373000 0! #1373500 1! #1373600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1373700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1374000 0! #1374500 1! #1374600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1374700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1375000 0! #1375500 1! #1375600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1375700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1376000 0! #1376500 1! #1376600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1376700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1377000 0! #1377500 1! #1377600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1377700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1378000 0! #1378500 1! #1378600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1378700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1379000 0! #1379500 1! #1379600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1379700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1380000 0! #1380500 1! #1380600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1380700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1381000 0! #1381500 1! #1381600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1381700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1382000 0! #1382500 1! #1382600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1382700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1383000 0! #1383500 1! #1383600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1383700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1384000 0! #1384500 1! #1384600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1384700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1385000 0! #1385500 1! #1385600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1385700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1386000 0! #1386500 1! #1386600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1386700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1387000 0! #1387500 1! #1387600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1387700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1388000 0! #1388500 1! #1388600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1388700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1389000 0! #1389500 1! #1389600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1389700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1390000 0! #1390500 1! #1390600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1390700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1391000 0! #1391500 1! #1391600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1391700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1392000 0! #1392500 1! #1392600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1392700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1393000 0! #1393500 1! #1393600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1393700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1394000 0! #1394500 1! #1394600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1394700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1395000 0! #1395500 1! #1395600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1395700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1396000 0! #1396500 1! #1396600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1396700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1397000 0! #1397500 1! #1397600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1397700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1398000 0! #1398500 1! #1398600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1398700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1399000 0! #1399500 1! #1399600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1399700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1400000 0! #1400500 1! #1400600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1400700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1401000 0! #1401500 1! #1401600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1401700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1402000 0! #1402500 1! #1402600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1402700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1403000 0! #1403500 1! #1403600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1403700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1404000 0! #1404500 1! #1404600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1404700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1405000 0! #1405500 1! #1405600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1405700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1406000 0! #1406500 1! #1406600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1406700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1407000 0! #1407500 1! #1407600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1407700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1408000 0! #1408500 1! #1408600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1408700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1409000 0! #1409500 1! #1409600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1409700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1410000 0! #1410500 1! #1410600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1410700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1411000 0! #1411500 1! #1411600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1411700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1412000 0! #1412500 1! #1412600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1412700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1413000 0! #1413500 1! #1413600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1413700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1414000 0! #1414500 1! #1414600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1414700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1415000 0! #1415500 1! #1415600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1415700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1416000 0! #1416500 1! #1416600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1416700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1417000 0! #1417500 1! #1417600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1417700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1418000 0! #1418500 1! #1418600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1418700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1419000 0! #1419500 1! #1419600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1419700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1420000 0! #1420500 1! #1420600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1420700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1421000 0! #1421500 1! #1421600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1421700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1422000 0! #1422500 1! #1422600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1422700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1423000 0! #1423500 1! #1423600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1423700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1424000 0! #1424500 1! #1424600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1424700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1425000 0! #1425500 1! #1425600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1425700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1426000 0! #1426500 1! #1426600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1426700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1427000 0! #1427500 1! #1427600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1427700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1428000 0! #1428500 1! #1428600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1428700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1429000 0! #1429500 1! #1429600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1429700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1430000 0! #1430500 1! #1430600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1430700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1431000 0! #1431500 1! #1431600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1431700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1432000 0! #1432500 1! #1432600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1432700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1433000 0! #1433500 1! #1433600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1433700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1434000 0! #1434500 1! #1434600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1434700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1435000 0! #1435500 1! #1435600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1435700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1436000 0! #1436500 1! #1436600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1436700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1437000 0! #1437500 1! #1437600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1437700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1438000 0! #1438500 1! #1438600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1438700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1439000 0! #1439500 1! #1439600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1439700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1440000 0! #1440500 1! #1440600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1440700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1441000 0! #1441500 1! #1441600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1441700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1442000 0! #1442500 1! #1442600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1442700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1443000 0! #1443500 1! #1443600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1443700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1444000 0! #1444500 1! #1444600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1444700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1445000 0! #1445500 1! #1445600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1445700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1446000 0! #1446500 1! #1446600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1446700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1447000 0! #1447500 1! #1447600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1447700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1448000 0! #1448500 1! #1448600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1448700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1449000 0! #1449500 1! #1449600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1449700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1450000 0! #1450500 1! #1450600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1450700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1451000 0! #1451500 1! #1451600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1451700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1452000 0! #1452500 1! #1452600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1452700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1453000 0! #1453500 1! #1453600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1453700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1454000 0! #1454500 1! #1454600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1454700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1455000 0! #1455500 1! #1455600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1455700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1456000 0! #1456500 1! #1456600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #1456700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H b11 g bx110100 c #1457000 0! #1457500 1! #1457600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1457700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1458000 0! #1458500 1! #1458600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1458700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1459000 0! #1459500 1! #1459600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1459700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1460000 0! #1460500 1! #1460600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1460700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1461000 0! #1461500 1! #1461600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1461700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1462000 0! #1462500 1! #1462600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1462700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1463000 0! #1463500 1! #1463600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1463700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1464000 0! #1464500 1! #1464600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1464700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1465000 0! #1465500 1! #1465600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1465700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1466000 0! #1466500 1! #1466600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1466700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1467000 0! #1467500 1! #1467600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1467700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1468000 0! #1468500 1! #1468600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1468700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1469000 0! #1469500 1! #1469600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1469700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1470000 0! #1470500 1! #1470600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1470700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1471000 0! #1471500 1! #1471600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1471700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1472000 0! #1472500 1! #1472600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1472700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1473000 0! #1473500 1! #1473600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1473700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1474000 0! #1474500 1! #1474600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1474700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1475000 0! #1475500 1! #1475600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1475700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1476000 0! #1476500 1! #1476600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1476700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1477000 0! #1477500 1! #1477600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1477700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1478000 0! #1478500 1! #1478600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1478700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1479000 0! #1479500 1! #1479600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1479700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1480000 0! #1480500 1! #1480600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1480700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1481000 0! #1481500 1! #1481600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1481700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1482000 0! #1482500 1! #1482600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1482700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1483000 0! #1483500 1! #1483600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1483700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1484000 0! #1484500 1! #1484600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1484700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1485000 0! #1485500 1! #1485600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1485700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1486000 0! #1486500 1! #1486600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1486700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1487000 0! #1487500 1! #1487600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1487700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1488000 0! #1488500 1! #1488600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1488700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1489000 0! #1489500 1! #1489600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1489700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1490000 0! #1490500 1! #1490600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1490700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1491000 0! #1491500 1! #1491600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1491700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1492000 0! #1492500 1! #1492600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1492700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1493000 0! #1493500 1! #1493600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1493700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1494000 0! #1494500 1! #1494600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1494700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1495000 0! #1495500 1! #1495600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1495700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1496000 0! #1496500 1! #1496600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1496700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1497000 0! #1497500 1! #1497600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1497700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1498000 0! #1498500 1! #1498600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1498700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1499000 0! #1499500 1! #1499600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1499700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1500000 0! #1500500 1! #1500600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1500700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1501000 0! #1501500 1! #1501600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1501700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1502000 0! #1502500 1! #1502600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1502700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1503000 0! #1503500 1! #1503600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1503700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1504000 0! #1504500 1! #1504600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1504700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1505000 0! #1505500 1! #1505600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1505700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1506000 0! #1506500 1! #1506600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1506700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1507000 0! #1507500 1! #1507600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1507700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1508000 0! #1508500 1! #1508600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1508700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1509000 0! #1509500 1! #1509600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1509700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1510000 0! #1510500 1! #1510600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1510700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1511000 0! #1511500 1! #1511600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1511700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1512000 0! #1512500 1! #1512600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1512700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1513000 0! #1513500 1! #1513600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1513700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1514000 0! #1514500 1! #1514600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1514700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1515000 0! #1515500 1! #1515600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1515700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1516000 0! #1516500 1! #1516600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1516700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1517000 0! #1517500 1! #1517600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1517700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1518000 0! #1518500 1! #1518600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1518700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1519000 0! #1519500 1! #1519600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1519700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1520000 0! #1520500 1! #1520600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1520700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1521000 0! #1521500 1! #1521600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1521700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1522000 0! #1522500 1! #1522600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1522700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1523000 0! #1523500 1! #1523600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1523700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1524000 0! #1524500 1! #1524600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1524700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1525000 0! #1525500 1! #1525600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1525700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1526000 0! #1526500 1! #1526600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1526700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1527000 0! #1527500 1! #1527600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1527700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1528000 0! #1528500 1! #1528600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1528700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1529000 0! #1529500 1! #1529600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1529700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1530000 0! #1530500 1! #1530600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1530700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1531000 0! #1531500 1! #1531600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1531700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1532000 0! #1532500 1! #1532600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1532700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1533000 0! #1533500 1! #1533600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1533700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1534000 0! #1534500 1! #1534600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1534700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1535000 0! #1535500 1! #1535600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1535700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1536000 0! #1536500 1! #1536600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1536700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1537000 0! #1537500 1! #1537600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1537700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1538000 0! #1538500 1! #1538600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1538700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1539000 0! #1539500 1! #1539600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1539700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1540000 0! #1540500 1! #1540600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1540700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1541000 0! #1541500 1! #1541600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1541700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1542000 0! #1542500 1! #1542600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1542700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1543000 0! #1543500 1! #1543600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1543700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1544000 0! #1544500 1! #1544600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1544700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1545000 0! #1545500 1! #1545600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1545700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1546000 0! #1546500 1! #1546600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1546700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1547000 0! #1547500 1! #1547600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1547700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1548000 0! #1548500 1! #1548600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1548700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1549000 0! #1549500 1! #1549600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1549700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1550000 0! #1550500 1! #1550600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1550700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1551000 0! #1551500 1! #1551600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1551700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1552000 0! #1552500 1! #1552600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1552700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1553000 0! #1553500 1! #1553600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1553700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1554000 0! #1554500 1! #1554600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1554700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1555000 0! #1555500 1! #1555600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1555700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1556000 0! #1556500 1! #1556600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1556700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1557000 0! #1557500 1! #1557600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1557700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1558000 0! #1558500 1! #1558600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #1558700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1559000 0! #1559500 1! #1559600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1559700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1560000 0! #1560500 1! #1560600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1560700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1561000 0! #1561500 1! #1561600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1561700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1562000 0! #1562500 1! #1562600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1562700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1563000 0! #1563500 1! #1563600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1563700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1564000 0! #1564500 1! #1564600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1564700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1565000 0! #1565500 1! #1565600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1565700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1566000 0! #1566500 1! #1566600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1566700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1567000 0! #1567500 1! #1567600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1567700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1568000 0! #1568500 1! #1568600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1568700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1569000 0! #1569500 1! #1569600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1569700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1570000 0! #1570500 1! #1570600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1570700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1571000 0! #1571500 1! #1571600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1571700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1572000 0! #1572500 1! #1572600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1572700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1573000 0! #1573500 1! #1573600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1573700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1574000 0! #1574500 1! #1574600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1574700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1575000 0! #1575500 1! #1575600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1575700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1576000 0! #1576500 1! #1576600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1576700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1577000 0! #1577500 1! #1577600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1577700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1578000 0! #1578500 1! #1578600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1578700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1579000 0! #1579500 1! #1579600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1579700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1580000 0! #1580500 1! #1580600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1580700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1581000 0! #1581500 1! #1581600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1581700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1582000 0! #1582500 1! #1582600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1582700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1583000 0! #1583500 1! #1583600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1583700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1584000 0! #1584500 1! #1584600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1584700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1585000 0! #1585500 1! #1585600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1585700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1586000 0! #1586500 1! #1586600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1586700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1587000 0! #1587500 1! #1587600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1587700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1588000 0! #1588500 1! #1588600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1588700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1589000 0! #1589500 1! #1589600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1589700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1590000 0! #1590500 1! #1590600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1590700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1591000 0! #1591500 1! #1591600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1591700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1592000 0! #1592500 1! #1592600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1592700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1593000 0! #1593500 1! #1593600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1593700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1594000 0! #1594500 1! #1594600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1594700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1595000 0! #1595500 1! #1595600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1595700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1596000 0! #1596500 1! #1596600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1596700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1597000 0! #1597500 1! #1597600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1597700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1598000 0! #1598500 1! #1598600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1598700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1599000 0! #1599500 1! #1599600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1599700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1600000 0! #1600500 1! #1600600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1600700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1601000 0! #1601500 1! #1601600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1601700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1602000 0! #1602500 1! #1602600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1602700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1603000 0! #1603500 1! #1603600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1603700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1604000 0! #1604500 1! #1604600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1604700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1605000 0! #1605500 1! #1605600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1605700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1606000 0! #1606500 1! #1606600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1606700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1607000 0! #1607500 1! #1607600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1607700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1608000 0! #1608500 1! #1608600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1608700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1609000 0! #1609500 1! #1609600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1609700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1610000 0! #1610500 1! #1610600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1610700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1611000 0! #1611500 1! #1611600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1611700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1612000 0! #1612500 1! #1612600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1612700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1613000 0! #1613500 1! #1613600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1613700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1614000 0! #1614500 1! #1614600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1614700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1615000 0! #1615500 1! #1615600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1615700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1616000 0! #1616500 1! #1616600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1616700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1617000 0! #1617500 1! #1617600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1617700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1618000 0! #1618500 1! #1618600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1618700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1619000 0! #1619500 1! #1619600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1619700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1620000 0! #1620500 1! #1620600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1620700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1621000 0! #1621500 1! #1621600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1621700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1622000 0! #1622500 1! #1622600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1622700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1623000 0! #1623500 1! #1623600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1623700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1624000 0! #1624500 1! #1624600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1624700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1625000 0! #1625500 1! #1625600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1625700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1626000 0! #1626500 1! #1626600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1626700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1627000 0! #1627500 1! #1627600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1627700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1628000 0! #1628500 1! #1628600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1628700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1629000 0! #1629500 1! #1629600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1629700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1630000 0! #1630500 1! #1630600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1630700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1631000 0! #1631500 1! #1631600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1631700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1632000 0! #1632500 1! #1632600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1632700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1633000 0! #1633500 1! #1633600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1633700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1634000 0! #1634500 1! #1634600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1634700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1635000 0! #1635500 1! #1635600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1635700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1636000 0! #1636500 1! #1636600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1636700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1637000 0! #1637500 1! #1637600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1637700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1638000 0! #1638500 1! #1638600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1638700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1639000 0! #1639500 1! #1639600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1639700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1640000 0! #1640500 1! #1640600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1640700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1641000 0! #1641500 1! #1641600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1641700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1642000 0! #1642500 1! #1642600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1642700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1643000 0! #1643500 1! #1643600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1643700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1644000 0! #1644500 1! #1644600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1644700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1645000 0! #1645500 1! #1645600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1645700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1646000 0! #1646500 1! #1646600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1646700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1647000 0! #1647500 1! #1647600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1647700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1648000 0! #1648500 1! #1648600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1648700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1649000 0! #1649500 1! #1649600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1649700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1650000 0! #1650500 1! #1650600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1650700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1651000 0! #1651500 1! #1651600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1651700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1652000 0! #1652500 1! #1652600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1652700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1653000 0! #1653500 1! #1653600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1653700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1654000 0! #1654500 1! #1654600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1654700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1655000 0! #1655500 1! #1655600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1655700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1656000 0! #1656500 1! #1656600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1656700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1657000 0! #1657500 1! #1657600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1657700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1658000 0! #1658500 1! #1658600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1658700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1659000 0! #1659500 1! #1659600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1659700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1660000 0! #1660500 1! #1660600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1660700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1661000 0! #1661500 1! #1661600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1661700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1662000 0! #1662500 1! #1662600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1662700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1663000 0! #1663500 1! #1663600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1663700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1664000 0! #1664500 1! #1664600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1664700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1665000 0! #1665500 1! #1665600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1665700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1666000 0! #1666500 1! #1666600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1666700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1667000 0! #1667500 1! #1667600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1667700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1668000 0! #1668500 1! #1668600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1668700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1669000 0! #1669500 1! #1669600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1669700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1670000 0! #1670500 1! #1670600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1670700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1671000 0! #1671500 1! #1671600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1671700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1672000 0! #1672500 1! #1672600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1672700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1673000 0! #1673500 1! #1673600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1673700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1674000 0! #1674500 1! #1674600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1674700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1675000 0! #1675500 1! #1675600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1675700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1676000 0! #1676500 1! #1676600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1676700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1677000 0! #1677500 1! #1677600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1677700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1678000 0! #1678500 1! #1678600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1678700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1679000 0! #1679500 1! #1679600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1679700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1680000 0! #1680500 1! #1680600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1680700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1681000 0! #1681500 1! #1681600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1681700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1682000 0! #1682500 1! #1682600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1682700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1683000 0! #1683500 1! #1683600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1683700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1684000 0! #1684500 1! #1684600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1684700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1685000 0! #1685500 1! #1685600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1685700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1686000 0! #1686500 1! #1686600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1686700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1687000 0! #1687500 1! #1687600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1687700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1688000 0! #1688500 1! #1688600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1688700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1689000 0! #1689500 1! #1689600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1689700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1690000 0! #1690500 1! #1690600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1690700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1691000 0! #1691500 1! #1691600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1691700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1692000 0! #1692500 1! #1692600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1692700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1693000 0! #1693500 1! #1693600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1693700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1694000 0! #1694500 1! #1694600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1694700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1695000 0! #1695500 1! #1695600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1695700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1696000 0! #1696500 1! #1696600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1696700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1697000 0! #1697500 1! #1697600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1697700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1698000 0! #1698500 1! #1698600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1698700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1699000 0! #1699500 1! #1699600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1699700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1700000 0! #1700500 1! #1700600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1700700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1701000 0! #1701500 1! #1701600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1701700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1702000 0! #1702500 1! #1702600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1702700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1703000 0! #1703500 1! #1703600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1703700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1704000 0! #1704500 1! #1704600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1704700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1705000 0! #1705500 1! #1705600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1705700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1706000 0! #1706500 1! #1706600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1706700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1707000 0! #1707500 1! #1707600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1707700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1708000 0! #1708500 1! #1708600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1708700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1709000 0! #1709500 1! #1709600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1709700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1710000 0! #1710500 1! #1710600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1710700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1711000 0! #1711500 1! #1711600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #1711700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H b10 g bx1101000 c #1712000 0! #1712500 1! #1712600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1712700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1713000 0! #1713500 1! #1713600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1713700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1714000 0! #1714500 1! #1714600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1714700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1715000 0! #1715500 1! #1715600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1715700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1716000 0! #1716500 1! #1716600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1716700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1717000 0! #1717500 1! #1717600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1717700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1718000 0! #1718500 1! #1718600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1718700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1719000 0! #1719500 1! #1719600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1719700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1720000 0! #1720500 1! #1720600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1720700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1721000 0! #1721500 1! #1721600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1721700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1722000 0! #1722500 1! #1722600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1722700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1723000 0! #1723500 1! #1723600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1723700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1724000 0! #1724500 1! #1724600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1724700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1725000 0! #1725500 1! #1725600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1725700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1726000 0! #1726500 1! #1726600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1726700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1727000 0! #1727500 1! #1727600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1727700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1728000 0! #1728500 1! #1728600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1728700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1729000 0! #1729500 1! #1729600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1729700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1730000 0! #1730500 1! #1730600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1730700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1731000 0! #1731500 1! #1731600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1731700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1732000 0! #1732500 1! #1732600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1732700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1733000 0! #1733500 1! #1733600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1733700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1734000 0! #1734500 1! #1734600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1734700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1735000 0! #1735500 1! #1735600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1735700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1736000 0! #1736500 1! #1736600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1736700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1737000 0! #1737500 1! #1737600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1737700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1738000 0! #1738500 1! #1738600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1738700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1739000 0! #1739500 1! #1739600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1739700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1740000 0! #1740500 1! #1740600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1740700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1741000 0! #1741500 1! #1741600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1741700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1742000 0! #1742500 1! #1742600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1742700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1743000 0! #1743500 1! #1743600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1743700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1744000 0! #1744500 1! #1744600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1744700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1745000 0! #1745500 1! #1745600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1745700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1746000 0! #1746500 1! #1746600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1746700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1747000 0! #1747500 1! #1747600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1747700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1748000 0! #1748500 1! #1748600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1748700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1749000 0! #1749500 1! #1749600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1749700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1750000 0! #1750500 1! #1750600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1750700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1751000 0! #1751500 1! #1751600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1751700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1752000 0! #1752500 1! #1752600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1752700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1753000 0! #1753500 1! #1753600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1753700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1754000 0! #1754500 1! #1754600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1754700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1755000 0! #1755500 1! #1755600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1755700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1756000 0! #1756500 1! #1756600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1756700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1757000 0! #1757500 1! #1757600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1757700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1758000 0! #1758500 1! #1758600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1758700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1759000 0! #1759500 1! #1759600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1759700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1760000 0! #1760500 1! #1760600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1760700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1761000 0! #1761500 1! #1761600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1761700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1762000 0! #1762500 1! #1762600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1762700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1763000 0! #1763500 1! #1763600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1763700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1764000 0! #1764500 1! #1764600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1764700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1765000 0! #1765500 1! #1765600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1765700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1766000 0! #1766500 1! #1766600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1766700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1767000 0! #1767500 1! #1767600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1767700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1768000 0! #1768500 1! #1768600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1768700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1769000 0! #1769500 1! #1769600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1769700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1770000 0! #1770500 1! #1770600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1770700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1771000 0! #1771500 1! #1771600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1771700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1772000 0! #1772500 1! #1772600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1772700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1773000 0! #1773500 1! #1773600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1773700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1774000 0! #1774500 1! #1774600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1774700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1775000 0! #1775500 1! #1775600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1775700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1776000 0! #1776500 1! #1776600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1776700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1777000 0! #1777500 1! #1777600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1777700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1778000 0! #1778500 1! #1778600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1778700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1779000 0! #1779500 1! #1779600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1779700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1780000 0! #1780500 1! #1780600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1780700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1781000 0! #1781500 1! #1781600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1781700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1782000 0! #1782500 1! #1782600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1782700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1783000 0! #1783500 1! #1783600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1783700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1784000 0! #1784500 1! #1784600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1784700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1785000 0! #1785500 1! #1785600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1785700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1786000 0! #1786500 1! #1786600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1786700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1787000 0! #1787500 1! #1787600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1787700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1788000 0! #1788500 1! #1788600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1788700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1789000 0! #1789500 1! #1789600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1789700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1790000 0! #1790500 1! #1790600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1790700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1791000 0! #1791500 1! #1791600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1791700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1792000 0! #1792500 1! #1792600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1792700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1793000 0! #1793500 1! #1793600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1793700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1794000 0! #1794500 1! #1794600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1794700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1795000 0! #1795500 1! #1795600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1795700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1796000 0! #1796500 1! #1796600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1796700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1797000 0! #1797500 1! #1797600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1797700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1798000 0! #1798500 1! #1798600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1798700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1799000 0! #1799500 1! #1799600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1799700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1800000 0! #1800500 1! #1800600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1800700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1801000 0! #1801500 1! #1801600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1801700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1802000 0! #1802500 1! #1802600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1802700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1803000 0! #1803500 1! #1803600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1803700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1804000 0! #1804500 1! #1804600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1804700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1805000 0! #1805500 1! #1805600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1805700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1806000 0! #1806500 1! #1806600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1806700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1807000 0! #1807500 1! #1807600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1807700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1808000 0! #1808500 1! #1808600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1808700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1809000 0! #1809500 1! #1809600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1809700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1810000 0! #1810500 1! #1810600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1810700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1811000 0! #1811500 1! #1811600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1811700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1812000 0! #1812500 1! #1812600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1812700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1813000 0! #1813500 1! #1813600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #1813700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1814000 0! #1814500 1! #1814600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1814700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1815000 0! #1815500 1! #1815600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1815700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1816000 0! #1816500 1! #1816600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1816700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1817000 0! #1817500 1! #1817600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1817700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1818000 0! #1818500 1! #1818600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1818700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1819000 0! #1819500 1! #1819600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1819700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1820000 0! #1820500 1! #1820600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1820700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1821000 0! #1821500 1! #1821600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1821700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1822000 0! #1822500 1! #1822600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1822700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1823000 0! #1823500 1! #1823600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1823700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1824000 0! #1824500 1! #1824600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1824700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1825000 0! #1825500 1! #1825600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1825700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1826000 0! #1826500 1! #1826600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1826700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1827000 0! #1827500 1! #1827600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1827700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1828000 0! #1828500 1! #1828600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1828700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1829000 0! #1829500 1! #1829600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1829700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1830000 0! #1830500 1! #1830600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1830700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1831000 0! #1831500 1! #1831600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1831700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1832000 0! #1832500 1! #1832600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1832700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1833000 0! #1833500 1! #1833600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1833700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1834000 0! #1834500 1! #1834600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1834700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1835000 0! #1835500 1! #1835600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1835700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1836000 0! #1836500 1! #1836600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1836700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1837000 0! #1837500 1! #1837600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1837700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1838000 0! #1838500 1! #1838600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1838700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1839000 0! #1839500 1! #1839600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1839700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1840000 0! #1840500 1! #1840600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1840700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1841000 0! #1841500 1! #1841600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1841700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1842000 0! #1842500 1! #1842600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1842700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1843000 0! #1843500 1! #1843600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1843700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1844000 0! #1844500 1! #1844600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1844700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1845000 0! #1845500 1! #1845600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1845700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1846000 0! #1846500 1! #1846600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1846700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1847000 0! #1847500 1! #1847600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1847700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1848000 0! #1848500 1! #1848600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1848700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1849000 0! #1849500 1! #1849600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1849700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1850000 0! #1850500 1! #1850600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1850700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1851000 0! #1851500 1! #1851600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1851700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1852000 0! #1852500 1! #1852600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1852700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1853000 0! #1853500 1! #1853600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1853700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1854000 0! #1854500 1! #1854600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1854700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1855000 0! #1855500 1! #1855600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1855700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1856000 0! #1856500 1! #1856600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1856700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1857000 0! #1857500 1! #1857600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1857700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1858000 0! #1858500 1! #1858600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1858700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1859000 0! #1859500 1! #1859600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1859700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1860000 0! #1860500 1! #1860600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1860700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1861000 0! #1861500 1! #1861600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1861700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1862000 0! #1862500 1! #1862600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1862700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1863000 0! #1863500 1! #1863600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1863700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1864000 0! #1864500 1! #1864600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1864700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1865000 0! #1865500 1! #1865600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1865700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1866000 0! #1866500 1! #1866600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1866700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1867000 0! #1867500 1! #1867600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1867700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1868000 0! #1868500 1! #1868600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1868700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1869000 0! #1869500 1! #1869600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1869700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1870000 0! #1870500 1! #1870600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1870700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1871000 0! #1871500 1! #1871600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1871700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1872000 0! #1872500 1! #1872600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1872700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1873000 0! #1873500 1! #1873600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1873700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1874000 0! #1874500 1! #1874600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1874700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1875000 0! #1875500 1! #1875600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1875700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1876000 0! #1876500 1! #1876600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1876700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1877000 0! #1877500 1! #1877600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1877700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1878000 0! #1878500 1! #1878600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1878700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1879000 0! #1879500 1! #1879600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1879700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1880000 0! #1880500 1! #1880600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1880700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1881000 0! #1881500 1! #1881600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1881700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1882000 0! #1882500 1! #1882600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1882700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1883000 0! #1883500 1! #1883600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1883700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1884000 0! #1884500 1! #1884600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1884700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1885000 0! #1885500 1! #1885600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1885700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1886000 0! #1886500 1! #1886600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1886700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1887000 0! #1887500 1! #1887600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1887700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1888000 0! #1888500 1! #1888600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1888700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1889000 0! #1889500 1! #1889600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1889700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1890000 0! #1890500 1! #1890600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1890700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1891000 0! #1891500 1! #1891600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1891700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1892000 0! #1892500 1! #1892600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1892700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1893000 0! #1893500 1! #1893600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1893700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1894000 0! #1894500 1! #1894600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1894700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1895000 0! #1895500 1! #1895600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1895700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1896000 0! #1896500 1! #1896600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1896700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1897000 0! #1897500 1! #1897600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1897700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1898000 0! #1898500 1! #1898600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1898700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1899000 0! #1899500 1! #1899600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1899700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1900000 0! #1900500 1! #1900600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1900700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1901000 0! #1901500 1! #1901600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1901700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1902000 0! #1902500 1! #1902600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1902700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1903000 0! #1903500 1! #1903600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1903700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1904000 0! #1904500 1! #1904600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1904700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1905000 0! #1905500 1! #1905600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1905700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1906000 0! #1906500 1! #1906600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1906700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1907000 0! #1907500 1! #1907600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1907700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1908000 0! #1908500 1! #1908600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1908700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1909000 0! #1909500 1! #1909600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1909700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1910000 0! #1910500 1! #1910600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1910700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1911000 0! #1911500 1! #1911600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1911700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1912000 0! #1912500 1! #1912600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1912700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1913000 0! #1913500 1! #1913600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1913700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1914000 0! #1914500 1! #1914600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1914700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1915000 0! #1915500 1! #1915600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1915700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1916000 0! #1916500 1! #1916600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1916700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1917000 0! #1917500 1! #1917600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1917700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1918000 0! #1918500 1! #1918600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1918700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1919000 0! #1919500 1! #1919600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1919700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1920000 0! #1920500 1! #1920600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1920700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1921000 0! #1921500 1! #1921600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1921700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1922000 0! #1922500 1! #1922600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1922700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1923000 0! #1923500 1! #1923600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1923700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1924000 0! #1924500 1! #1924600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1924700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1925000 0! #1925500 1! #1925600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1925700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1926000 0! #1926500 1! #1926600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1926700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1927000 0! #1927500 1! #1927600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1927700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1928000 0! #1928500 1! #1928600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1928700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1929000 0! #1929500 1! #1929600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1929700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1930000 0! #1930500 1! #1930600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1930700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1931000 0! #1931500 1! #1931600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1931700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1932000 0! #1932500 1! #1932600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1932700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1933000 0! #1933500 1! #1933600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1933700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1934000 0! #1934500 1! #1934600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1934700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1935000 0! #1935500 1! #1935600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1935700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1936000 0! #1936500 1! #1936600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1936700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1937000 0! #1937500 1! #1937600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1937700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1938000 0! #1938500 1! #1938600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1938700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1939000 0! #1939500 1! #1939600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1939700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1940000 0! #1940500 1! #1940600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1940700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1941000 0! #1941500 1! #1941600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1941700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1942000 0! #1942500 1! #1942600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1942700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1943000 0! #1943500 1! #1943600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1943700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1944000 0! #1944500 1! #1944600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1944700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1945000 0! #1945500 1! #1945600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1945700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1946000 0! #1946500 1! #1946600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1946700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1947000 0! #1947500 1! #1947600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1947700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1948000 0! #1948500 1! #1948600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1948700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1949000 0! #1949500 1! #1949600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1949700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1950000 0! #1950500 1! #1950600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1950700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1951000 0! #1951500 1! #1951600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1951700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1952000 0! #1952500 1! #1952600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1952700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1953000 0! #1953500 1! #1953600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1953700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1954000 0! #1954500 1! #1954600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1954700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1955000 0! #1955500 1! #1955600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1955700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1956000 0! #1956500 1! #1956600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1956700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1957000 0! #1957500 1! #1957600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1957700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1958000 0! #1958500 1! #1958600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1958700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1959000 0! #1959500 1! #1959600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1959700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1960000 0! #1960500 1! #1960600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1960700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1961000 0! #1961500 1! #1961600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1961700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1962000 0! #1962500 1! #1962600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1962700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1963000 0! #1963500 1! #1963600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1963700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1964000 0! #1964500 1! #1964600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1964700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1965000 0! #1965500 1! #1965600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1965700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1966000 0! #1966500 1! #1966600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #1966700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H b1 g b11010000 c #1967000 0! #1967500 1! #1967600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1967700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1968000 0! #1968500 1! #1968600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1968700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1969000 0! #1969500 1! #1969600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1969700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1970000 0! #1970500 1! #1970600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1970700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1971000 0! #1971500 1! #1971600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1971700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1972000 0! #1972500 1! #1972600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1972700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1973000 0! #1973500 1! #1973600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1973700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1974000 0! #1974500 1! #1974600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1974700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1975000 0! #1975500 1! #1975600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1975700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1976000 0! #1976500 1! #1976600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1976700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1977000 0! #1977500 1! #1977600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1977700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1978000 0! #1978500 1! #1978600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1978700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1979000 0! #1979500 1! #1979600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1979700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1980000 0! #1980500 1! #1980600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1980700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1981000 0! #1981500 1! #1981600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1981700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1982000 0! #1982500 1! #1982600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1982700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1983000 0! #1983500 1! #1983600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1983700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1984000 0! #1984500 1! #1984600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1984700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1985000 0! #1985500 1! #1985600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1985700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1986000 0! #1986500 1! #1986600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1986700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1987000 0! #1987500 1! #1987600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1987700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1988000 0! #1988500 1! #1988600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1988700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1989000 0! #1989500 1! #1989600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1989700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1990000 0! #1990500 1! #1990600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1990700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1991000 0! #1991500 1! #1991600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1991700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1992000 0! #1992500 1! #1992600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1992700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1993000 0! #1993500 1! #1993600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1993700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1994000 0! #1994500 1! #1994600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1994700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1995000 0! #1995500 1! #1995600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1995700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1996000 0! #1996500 1! #1996600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1996700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1997000 0! #1997500 1! #1997600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1997700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1998000 0! #1998500 1! #1998600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1998700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #1999000 0! #1999500 1! #1999600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #1999700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2000000 0! #2000500 1! #2000600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2000700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2001000 0! #2001500 1! #2001600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2001700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2002000 0! #2002500 1! #2002600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2002700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2003000 0! #2003500 1! #2003600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2003700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2004000 0! #2004500 1! #2004600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2004700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2005000 0! #2005500 1! #2005600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2005700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2006000 0! #2006500 1! #2006600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2006700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2007000 0! #2007500 1! #2007600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2007700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2008000 0! #2008500 1! #2008600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2008700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2009000 0! #2009500 1! #2009600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2009700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2010000 0! #2010500 1! #2010600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2010700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2011000 0! #2011500 1! #2011600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2011700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2012000 0! #2012500 1! #2012600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2012700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2013000 0! #2013500 1! #2013600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2013700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2014000 0! #2014500 1! #2014600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2014700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2015000 0! #2015500 1! #2015600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2015700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2016000 0! #2016500 1! #2016600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2016700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2017000 0! #2017500 1! #2017600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2017700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2018000 0! #2018500 1! #2018600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2018700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2019000 0! #2019500 1! #2019600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2019700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2020000 0! #2020500 1! #2020600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2020700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2021000 0! #2021500 1! #2021600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2021700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2022000 0! #2022500 1! #2022600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2022700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2023000 0! #2023500 1! #2023600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2023700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2024000 0! #2024500 1! #2024600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2024700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2025000 0! #2025500 1! #2025600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2025700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2026000 0! #2026500 1! #2026600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2026700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2027000 0! #2027500 1! #2027600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2027700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2028000 0! #2028500 1! #2028600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2028700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2029000 0! #2029500 1! #2029600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2029700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2030000 0! #2030500 1! #2030600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2030700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2031000 0! #2031500 1! #2031600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2031700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2032000 0! #2032500 1! #2032600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2032700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2033000 0! #2033500 1! #2033600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2033700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2034000 0! #2034500 1! #2034600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2034700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2035000 0! #2035500 1! #2035600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2035700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2036000 0! #2036500 1! #2036600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2036700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2037000 0! #2037500 1! #2037600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2037700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2038000 0! #2038500 1! #2038600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2038700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2039000 0! #2039500 1! #2039600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2039700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2040000 0! #2040500 1! #2040600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2040700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2041000 0! #2041500 1! #2041600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2041700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2042000 0! #2042500 1! #2042600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2042700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2043000 0! #2043500 1! #2043600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2043700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2044000 0! #2044500 1! #2044600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2044700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2045000 0! #2045500 1! #2045600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2045700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2046000 0! #2046500 1! #2046600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2046700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2047000 0! #2047500 1! #2047600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2047700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2048000 0! #2048500 1! #2048600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2048700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2049000 0! #2049500 1! #2049600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2049700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2050000 0! #2050500 1! #2050600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2050700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2051000 0! #2051500 1! #2051600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2051700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2052000 0! #2052500 1! #2052600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2052700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2053000 0! #2053500 1! #2053600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2053700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2054000 0! #2054500 1! #2054600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2054700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2055000 0! #2055500 1! #2055600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2055700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2056000 0! #2056500 1! #2056600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2056700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2057000 0! #2057500 1! #2057600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2057700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2058000 0! #2058500 1! #2058600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2058700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2059000 0! #2059500 1! #2059600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2059700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2060000 0! #2060500 1! #2060600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2060700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2061000 0! #2061500 1! #2061600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2061700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2062000 0! #2062500 1! #2062600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2062700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2063000 0! #2063500 1! #2063600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2063700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2064000 0! #2064500 1! #2064600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2064700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2065000 0! #2065500 1! #2065600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2065700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2066000 0! #2066500 1! #2066600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2066700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2067000 0! #2067500 1! #2067600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2067700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2068000 0! #2068500 1! #2068600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #2068700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2069000 0! #2069500 1! #2069600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2069700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2070000 0! #2070500 1! #2070600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2070700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2071000 0! #2071500 1! #2071600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2071700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2072000 0! #2072500 1! #2072600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2072700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2073000 0! #2073500 1! #2073600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2073700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2074000 0! #2074500 1! #2074600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2074700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2075000 0! #2075500 1! #2075600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2075700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2076000 0! #2076500 1! #2076600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2076700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2077000 0! #2077500 1! #2077600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2077700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2078000 0! #2078500 1! #2078600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2078700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2079000 0! #2079500 1! #2079600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2079700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2080000 0! #2080500 1! #2080600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2080700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2081000 0! #2081500 1! #2081600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2081700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2082000 0! #2082500 1! #2082600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2082700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2083000 0! #2083500 1! #2083600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2083700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2084000 0! #2084500 1! #2084600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2084700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2085000 0! #2085500 1! #2085600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2085700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2086000 0! #2086500 1! #2086600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2086700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2087000 0! #2087500 1! #2087600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2087700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2088000 0! #2088500 1! #2088600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2088700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2089000 0! #2089500 1! #2089600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2089700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2090000 0! #2090500 1! #2090600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2090700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2091000 0! #2091500 1! #2091600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2091700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2092000 0! #2092500 1! #2092600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2092700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2093000 0! #2093500 1! #2093600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2093700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2094000 0! #2094500 1! #2094600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2094700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2095000 0! #2095500 1! #2095600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2095700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2096000 0! #2096500 1! #2096600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2096700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2097000 0! #2097500 1! #2097600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2097700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2098000 0! #2098500 1! #2098600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2098700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2099000 0! #2099500 1! #2099600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2099700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2100000 0! #2100500 1! #2100600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2100700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2101000 0! #2101500 1! #2101600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2101700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2102000 0! #2102500 1! #2102600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2102700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2103000 0! #2103500 1! #2103600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2103700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2104000 0! #2104500 1! #2104600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2104700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2105000 0! #2105500 1! #2105600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2105700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2106000 0! #2106500 1! #2106600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2106700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2107000 0! #2107500 1! #2107600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2107700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2108000 0! #2108500 1! #2108600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2108700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2109000 0! #2109500 1! #2109600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2109700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2110000 0! #2110500 1! #2110600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2110700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2111000 0! #2111500 1! #2111600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2111700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2112000 0! #2112500 1! #2112600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2112700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2113000 0! #2113500 1! #2113600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2113700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2114000 0! #2114500 1! #2114600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2114700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2115000 0! #2115500 1! #2115600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2115700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2116000 0! #2116500 1! #2116600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2116700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2117000 0! #2117500 1! #2117600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2117700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2118000 0! #2118500 1! #2118600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2118700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2119000 0! #2119500 1! #2119600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2119700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2120000 0! #2120500 1! #2120600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2120700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2121000 0! #2121500 1! #2121600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2121700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2122000 0! #2122500 1! #2122600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2122700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2123000 0! #2123500 1! #2123600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2123700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2124000 0! #2124500 1! #2124600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2124700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2125000 0! #2125500 1! #2125600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2125700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2126000 0! #2126500 1! #2126600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2126700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2127000 0! #2127500 1! #2127600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2127700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2128000 0! #2128500 1! #2128600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2128700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2129000 0! #2129500 1! #2129600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2129700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2130000 0! #2130500 1! #2130600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2130700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2131000 0! #2131500 1! #2131600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2131700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2132000 0! #2132500 1! #2132600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2132700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2133000 0! #2133500 1! #2133600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2133700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2134000 0! #2134500 1! #2134600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2134700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2135000 0! #2135500 1! #2135600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2135700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2136000 0! #2136500 1! #2136600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2136700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2137000 0! #2137500 1! #2137600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2137700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2138000 0! #2138500 1! #2138600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2138700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2139000 0! #2139500 1! #2139600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2139700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2140000 0! #2140500 1! #2140600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2140700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2141000 0! #2141500 1! #2141600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2141700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2142000 0! #2142500 1! #2142600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2142700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2143000 0! #2143500 1! #2143600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2143700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2144000 0! #2144500 1! #2144600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2144700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2145000 0! #2145500 1! #2145600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2145700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2146000 0! #2146500 1! #2146600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2146700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2147000 0! #2147500 1! #2147600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2147700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2148000 0! #2148500 1! #2148600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2148700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2149000 0! #2149500 1! #2149600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2149700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2150000 0! #2150500 1! #2150600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2150700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2151000 0! #2151500 1! #2151600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2151700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2152000 0! #2152500 1! #2152600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2152700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2153000 0! #2153500 1! #2153600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2153700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2154000 0! #2154500 1! #2154600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2154700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2155000 0! #2155500 1! #2155600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2155700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2156000 0! #2156500 1! #2156600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2156700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2157000 0! #2157500 1! #2157600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2157700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2158000 0! #2158500 1! #2158600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2158700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2159000 0! #2159500 1! #2159600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2159700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2160000 0! #2160500 1! #2160600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2160700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2161000 0! #2161500 1! #2161600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2161700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2162000 0! #2162500 1! #2162600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2162700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2163000 0! #2163500 1! #2163600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2163700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2164000 0! #2164500 1! #2164600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2164700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2165000 0! #2165500 1! #2165600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2165700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2166000 0! #2166500 1! #2166600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2166700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2167000 0! #2167500 1! #2167600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2167700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2168000 0! #2168500 1! #2168600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2168700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2169000 0! #2169500 1! #2169600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2169700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2170000 0! #2170500 1! #2170600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2170700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2171000 0! #2171500 1! #2171600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2171700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2172000 0! #2172500 1! #2172600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2172700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2173000 0! #2173500 1! #2173600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2173700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2174000 0! #2174500 1! #2174600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2174700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2175000 0! #2175500 1! #2175600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2175700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2176000 0! #2176500 1! #2176600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2176700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2177000 0! #2177500 1! #2177600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2177700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2178000 0! #2178500 1! #2178600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2178700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2179000 0! #2179500 1! #2179600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2179700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2180000 0! #2180500 1! #2180600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2180700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2181000 0! #2181500 1! #2181600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2181700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2182000 0! #2182500 1! #2182600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2182700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2183000 0! #2183500 1! #2183600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2183700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2184000 0! #2184500 1! #2184600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2184700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2185000 0! #2185500 1! #2185600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2185700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2186000 0! #2186500 1! #2186600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2186700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2187000 0! #2187500 1! #2187600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2187700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2188000 0! #2188500 1! #2188600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2188700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2189000 0! #2189500 1! #2189600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2189700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2190000 0! #2190500 1! #2190600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2190700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2191000 0! #2191500 1! #2191600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2191700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2192000 0! #2192500 1! #2192600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2192700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2193000 0! #2193500 1! #2193600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2193700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2194000 0! #2194500 1! #2194600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2194700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2195000 0! #2195500 1! #2195600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2195700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2196000 0! #2196500 1! #2196600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2196700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2197000 0! #2197500 1! #2197600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2197700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2198000 0! #2198500 1! #2198600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2198700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2199000 0! #2199500 1! #2199600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2199700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2200000 0! #2200500 1! #2200600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2200700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2201000 0! #2201500 1! #2201600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2201700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2202000 0! #2202500 1! #2202600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2202700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2203000 0! #2203500 1! #2203600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2203700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2204000 0! #2204500 1! #2204600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2204700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2205000 0! #2205500 1! #2205600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2205700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2206000 0! #2206500 1! #2206600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2206700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2207000 0! #2207500 1! #2207600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2207700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2208000 0! #2208500 1! #2208600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2208700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2209000 0! #2209500 1! #2209600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2209700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2210000 0! #2210500 1! #2210600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2210700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2211000 0! #2211500 1! #2211600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2211700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2212000 0! #2212500 1! #2212600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2212700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2213000 0! #2213500 1! #2213600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2213700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2214000 0! #2214500 1! #2214600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2214700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2215000 0! #2215500 1! #2215600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2215700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2216000 0! #2216500 1! #2216600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2216700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2217000 0! #2217500 1! #2217600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2217700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2218000 0! #2218500 1! #2218600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2218700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2219000 0! #2219500 1! #2219600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2219700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2220000 0! #2220500 1! #2220600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2220700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2221000 0! #2221500 1! #2221600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #2221700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H b0 g b10100000 c 1e 1h #2222000 0! #2222500 1! #2222600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2222700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2223000 0! #2223500 1! #2223600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2223700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2224000 0! #2224500 1! #2224600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2224700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2225000 0! #2225500 1! #2225600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2225700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2226000 0! #2226500 1! #2226600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2226700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2227000 0! #2227500 1! #2227600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2227700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2228000 0! #2228500 1! #2228600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2228700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2229000 0! #2229500 1! #2229600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2229700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2230000 0! #2230500 1! #2230600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2230700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2231000 0! #2231500 1! #2231600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2231700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2232000 0! #2232500 1! #2232600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2232700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2233000 0! #2233500 1! #2233600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2233700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2234000 0! #2234500 1! #2234600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2234700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2235000 0! #2235500 1! #2235600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2235700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2236000 0! #2236500 1! #2236600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2236700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2237000 0! #2237500 1! #2237600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2237700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2238000 0! #2238500 1! #2238600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2238700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2239000 0! #2239500 1! #2239600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2239700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2240000 0! #2240500 1! #2240600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2240700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2241000 0! #2241500 1! #2241600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2241700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2242000 0! #2242500 1! #2242600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2242700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2243000 0! #2243500 1! #2243600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2243700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2244000 0! #2244500 1! #2244600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2244700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2245000 0! #2245500 1! #2245600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2245700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2246000 0! #2246500 1! #2246600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2246700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2247000 0! #2247500 1! #2247600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2247700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2248000 0! #2248500 1! #2248600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2248700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2249000 0! #2249500 1! #2249600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2249700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2250000 0! #2250500 1! #2250600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2250700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2251000 0! #2251500 1! #2251600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2251700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2252000 0! #2252500 1! #2252600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2252700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2253000 0! #2253500 1! #2253600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2253700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2254000 0! #2254500 1! #2254600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2254700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2255000 0! #2255500 1! #2255600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2255700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2256000 0! #2256500 1! #2256600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2256700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2257000 0! #2257500 1! #2257600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2257700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2258000 0! #2258500 1! #2258600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2258700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2259000 0! #2259500 1! #2259600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2259700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2260000 0! #2260500 1! #2260600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2260700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2261000 0! #2261500 1! #2261600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2261700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2262000 0! #2262500 1! #2262600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2262700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2263000 0! #2263500 1! #2263600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2263700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2264000 0! #2264500 1! #2264600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2264700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2265000 0! #2265500 1! #2265600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2265700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2266000 0! #2266500 1! #2266600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2266700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2267000 0! #2267500 1! #2267600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2267700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2268000 0! #2268500 1! #2268600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2268700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2269000 0! #2269500 1! #2269600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2269700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2270000 0! #2270500 1! #2270600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2270700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2271000 0! #2271500 1! #2271600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2271700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2272000 0! #2272500 1! #2272600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2272700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2273000 0! #2273500 1! #2273600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2273700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2274000 0! #2274500 1! #2274600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2274700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2275000 0! #2275500 1! #2275600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2275700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2276000 0! #2276500 1! #2276600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2276700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2277000 0! #2277500 1! #2277600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2277700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2278000 0! #2278500 1! #2278600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2278700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2279000 0! #2279500 1! #2279600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2279700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2280000 0! #2280500 1! #2280600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2280700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2281000 0! #2281500 1! #2281600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2281700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2282000 0! #2282500 1! #2282600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2282700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2283000 0! #2283500 1! #2283600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2283700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2284000 0! #2284500 1! #2284600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2284700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2285000 0! #2285500 1! #2285600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2285700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2286000 0! #2286500 1! #2286600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2286700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2287000 0! #2287500 1! #2287600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2287700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2288000 0! #2288500 1! #2288600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2288700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2289000 0! #2289500 1! #2289600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2289700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2290000 0! #2290500 1! #2290600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2290700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2291000 0! #2291500 1! #2291600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2291700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2292000 0! #2292500 1! #2292600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2292700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2293000 0! #2293500 1! #2293600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2293700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2294000 0! #2294500 1! #2294600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2294700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2295000 0! #2295500 1! #2295600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2295700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2296000 0! #2296500 1! #2296600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2296700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2297000 0! #2297500 1! #2297600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2297700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2298000 0! #2298500 1! #2298600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2298700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2299000 0! #2299500 1! #2299600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2299700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2300000 0! #2300500 1! #2300600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2300700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2301000 0! #2301500 1! #2301600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2301700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2302000 0! #2302500 1! #2302600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2302700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2303000 0! #2303500 1! #2303600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2303700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2304000 0! #2304500 1! #2304600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2304700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2305000 0! #2305500 1! #2305600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2305700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2306000 0! #2306500 1! #2306600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2306700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2307000 0! #2307500 1! #2307600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2307700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2308000 0! #2308500 1! #2308600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2308700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2309000 0! #2309500 1! #2309600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2309700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2310000 0! #2310500 1! #2310600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2310700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2311000 0! #2311500 1! #2311600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2311700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2312000 0! #2312500 1! #2312600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2312700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2313000 0! #2313500 1! #2313600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2313700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2314000 0! #2314500 1! #2314600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2314700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2315000 0! #2315500 1! #2315600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2315700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2316000 0! #2316500 1! #2316600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2316700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2317000 0! #2317500 1! #2317600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2317700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2318000 0! #2318500 1! #2318600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2318700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2319000 0! #2319500 1! #2319600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2319700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2320000 0! #2320500 1! #2320600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2320700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2321000 0! #2321500 1! #2321600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2321700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2322000 0! #2322500 1! #2322600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2322700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2323000 0! #2323500 1! #2323600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #2323700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H b1 q 0d 0j #2324000 0! #2324500 1! #2324600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2324700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2325000 0! #2325500 1! #2325600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2325700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2326000 0! #2326500 1! #2326600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2326700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2327000 0! #2327500 1! #2327600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2327700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2328000 0! #2328500 1! #2328600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2328700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2329000 0! #2329500 1! #2329600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2329700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2330000 0! #2330500 1! #2330600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2330700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2331000 0! #2331500 1! #2331600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2331700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2332000 0! #2332500 1! #2332600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2332700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2333000 0! #2333500 1! #2333600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2333700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2334000 0! #2334500 1! #2334600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2334700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2335000 0! #2335500 1! #2335600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2335700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2336000 0! #2336500 1! #2336600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2336700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2337000 0! #2337500 1! #2337600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2337700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2338000 0! #2338500 1! #2338600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2338700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2339000 0! #2339500 1! #2339600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2339700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2340000 0! #2340500 1! #2340600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2340700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2341000 0! #2341500 1! #2341600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2341700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2342000 0! #2342500 1! #2342600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2342700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2343000 0! #2343500 1! #2343600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2343700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2344000 0! #2344500 1! #2344600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2344700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2345000 0! #2345500 1! #2345600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2345700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2346000 0! #2346500 1! #2346600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2346700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2347000 0! #2347500 1! #2347600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2347700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2348000 0! #2348500 1! #2348600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2348700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2349000 0! #2349500 1! #2349600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2349700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2350000 0! #2350500 1! #2350600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2350700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2351000 0! #2351500 1! #2351600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2351700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2352000 0! #2352500 1! #2352600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2352700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2353000 0! #2353500 1! #2353600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2353700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2354000 0! #2354500 1! #2354600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2354700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2355000 0! #2355500 1! #2355600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2355700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2356000 0! #2356500 1! #2356600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2356700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2357000 0! #2357500 1! #2357600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2357700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2358000 0! #2358500 1! #2358600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2358700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2359000 0! #2359500 1! #2359600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2359700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2360000 0! #2360500 1! #2360600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2360700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2361000 0! #2361500 1! #2361600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2361700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2362000 0! #2362500 1! #2362600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2362700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2363000 0! #2363500 1! #2363600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2363700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2364000 0! #2364500 1! #2364600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2364700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2365000 0! #2365500 1! #2365600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2365700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2366000 0! #2366500 1! #2366600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2366700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2367000 0! #2367500 1! #2367600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2367700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2368000 0! #2368500 1! #2368600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2368700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2369000 0! #2369500 1! #2369600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2369700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2370000 0! #2370500 1! #2370600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2370700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2371000 0! #2371500 1! #2371600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2371700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2372000 0! #2372500 1! #2372600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2372700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2373000 0! #2373500 1! #2373600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2373700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2374000 0! #2374500 1! #2374600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2374700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2375000 0! #2375500 1! #2375600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2375700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2376000 0! #2376500 1! #2376600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2376700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2377000 0! #2377500 1! #2377600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2377700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2378000 0! #2378500 1! #2378600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2378700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2379000 0! #2379500 1! #2379600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2379700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2380000 0! #2380500 1! #2380600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2380700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2381000 0! #2381500 1! #2381600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2381700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2382000 0! #2382500 1! #2382600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2382700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2383000 0! #2383500 1! #2383600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2383700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2384000 0! #2384500 1! #2384600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2384700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2385000 0! #2385500 1! #2385600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2385700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2386000 0! #2386500 1! #2386600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2386700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2387000 0! #2387500 1! #2387600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2387700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2388000 0! #2388500 1! #2388600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2388700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2389000 0! #2389500 1! #2389600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2389700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2390000 0! #2390500 1! #2390600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2390700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2391000 0! #2391500 1! #2391600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2391700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2392000 0! #2392500 1! #2392600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2392700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2393000 0! #2393500 1! #2393600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2393700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2394000 0! #2394500 1! #2394600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2394700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2395000 0! #2395500 1! #2395600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2395700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2396000 0! #2396500 1! #2396600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2396700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2397000 0! #2397500 1! #2397600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2397700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2398000 0! #2398500 1! #2398600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2398700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2399000 0! #2399500 1! #2399600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2399700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2400000 0! #2400500 1! #2400600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2400700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2401000 0! #2401500 1! #2401600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2401700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2402000 0! #2402500 1! #2402600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2402700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2403000 0! #2403500 1! #2403600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2403700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2404000 0! #2404500 1! #2404600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2404700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2405000 0! #2405500 1! #2405600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2405700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2406000 0! #2406500 1! #2406600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2406700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2407000 0! #2407500 1! #2407600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2407700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2408000 0! #2408500 1! #2408600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2408700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2409000 0! #2409500 1! #2409600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2409700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2410000 0! #2410500 1! #2410600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2410700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2411000 0! #2411500 1! #2411600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2411700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2412000 0! #2412500 1! #2412600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2412700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2413000 0! #2413500 1! #2413600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2413700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2414000 0! #2414500 1! #2414600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2414700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2415000 0! #2415500 1! #2415600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2415700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2416000 0! #2416500 1! #2416600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2416700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2417000 0! #2417500 1! #2417600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2417700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2418000 0! #2418500 1! #2418600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2418700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2419000 0! #2419500 1! #2419600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2419700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2420000 0! #2420500 1! #2420600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2420700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2421000 0! #2421500 1! #2421600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2421700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2422000 0! #2422500 1! #2422600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2422700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2423000 0! #2423500 1! #2423600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2423700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2424000 0! #2424500 1! #2424600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2424700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2425000 0! #2425500 1! #2425600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1Q #2425700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2426000 0! #2426500 1! #2426600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2426700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2427000 0! #2427500 1! #2427600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2427700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2428000 0! #2428500 1! #2428600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2428700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2429000 0! #2429500 1! #2429600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2429700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2430000 0! #2430500 1! #2430600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2430700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2431000 0! #2431500 1! #2431600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2431700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2432000 0! #2432500 1! #2432600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2432700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2433000 0! #2433500 1! #2433600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2433700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2434000 0! #2434500 1! #2434600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2434700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2435000 0! #2435500 1! #2435600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2435700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2436000 0! #2436500 1! #2436600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2436700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2437000 0! #2437500 1! #2437600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2437700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2438000 0! #2438500 1! #2438600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2438700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2439000 0! #2439500 1! #2439600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2439700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2440000 0! #2440500 1! #2440600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2440700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2441000 0! #2441500 1! #2441600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2441700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2442000 0! #2442500 1! #2442600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2442700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2443000 0! #2443500 1! #2443600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2443700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2444000 0! #2444500 1! #2444600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2444700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2445000 0! #2445500 1! #2445600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2445700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2446000 0! #2446500 1! #2446600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2446700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2447000 0! #2447500 1! #2447600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2447700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2448000 0! #2448500 1! #2448600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2448700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2449000 0! #2449500 1! #2449600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2449700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2450000 0! #2450500 1! #2450600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2450700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2451000 0! #2451500 1! #2451600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2451700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2452000 0! #2452500 1! #2452600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2452700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2453000 0! #2453500 1! #2453600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2453700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2454000 0! #2454500 1! #2454600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2454700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2455000 0! #2455500 1! #2455600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2455700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2456000 0! #2456500 1! #2456600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2456700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2457000 0! #2457500 1! #2457600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2457700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2458000 0! #2458500 1! #2458600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2458700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2459000 0! #2459500 1! #2459600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2459700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2460000 0! #2460500 1! #2460600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2460700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2461000 0! #2461500 1! #2461600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2461700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2462000 0! #2462500 1! #2462600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2462700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2463000 0! #2463500 1! #2463600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2463700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2464000 0! #2464500 1! #2464600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2464700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2465000 0! #2465500 1! #2465600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2465700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2466000 0! #2466500 1! #2466600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2466700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2467000 0! #2467500 1! #2467600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2467700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2468000 0! #2468500 1! #2468600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2468700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2469000 0! #2469500 1! #2469600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2469700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2470000 0! #2470500 1! #2470600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2470700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2471000 0! #2471500 1! #2471600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2471700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2472000 0! #2472500 1! #2472600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2472700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2473000 0! #2473500 1! #2473600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2473700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2474000 0! #2474500 1! #2474600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2474700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2475000 0! #2475500 1! #2475600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2475700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2476000 0! #2476500 1! #2476600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #2476700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H b111 g b1000000 c 0e 0h #2477000 0! #2477500 1! #2477600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2477700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2478000 0! #2478500 1! #2478600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2478700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2479000 0! #2479500 1! #2479600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2479700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2480000 0! #2480500 1! #2480600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2480700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2481000 0! #2481500 1! #2481600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2481700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2482000 0! #2482500 1! #2482600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2482700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2483000 0! #2483500 1! #2483600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2483700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2484000 0! #2484500 1! #2484600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2484700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2485000 0! #2485500 1! #2485600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2485700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2486000 0! #2486500 1! #2486600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2486700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2487000 0! #2487500 1! #2487600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2487700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2488000 0! #2488500 1! #2488600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2488700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2489000 0! #2489500 1! #2489600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2489700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2490000 0! #2490500 1! #2490600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2490700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2491000 0! #2491500 1! #2491600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2491700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2492000 0! #2492500 1! #2492600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2492700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2493000 0! #2493500 1! #2493600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2493700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2494000 0! #2494500 1! #2494600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2494700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2495000 0! #2495500 1! #2495600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2495700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2496000 0! #2496500 1! #2496600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2496700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2497000 0! #2497500 1! #2497600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2497700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2498000 0! #2498500 1! #2498600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2498700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2499000 0! #2499500 1! #2499600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2499700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2500000 0! #2500500 1! #2500600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2500700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2501000 0! #2501500 1! #2501600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2501700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2502000 0! #2502500 1! #2502600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2502700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2503000 0! #2503500 1! #2503600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2503700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2504000 0! #2504500 1! #2504600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2504700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2505000 0! #2505500 1! #2505600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2505700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2506000 0! #2506500 1! #2506600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2506700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2507000 0! #2507500 1! #2507600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2507700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2508000 0! #2508500 1! #2508600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2508700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2509000 0! #2509500 1! #2509600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2509700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2510000 0! #2510500 1! #2510600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2510700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2511000 0! #2511500 1! #2511600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2511700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2512000 0! #2512500 1! #2512600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2512700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2513000 0! #2513500 1! #2513600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2513700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2514000 0! #2514500 1! #2514600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2514700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2515000 0! #2515500 1! #2515600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2515700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2516000 0! #2516500 1! #2516600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2516700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2517000 0! #2517500 1! #2517600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2517700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2518000 0! #2518500 1! #2518600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2518700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2519000 0! #2519500 1! #2519600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2519700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2520000 0! #2520500 1! #2520600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2520700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2521000 0! #2521500 1! #2521600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2521700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2522000 0! #2522500 1! #2522600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2522700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2523000 0! #2523500 1! #2523600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2523700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2524000 0! #2524500 1! #2524600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2524700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2525000 0! #2525500 1! #2525600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2525700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2526000 0! #2526500 1! #2526600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2526700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2527000 0! #2527500 1! #2527600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2527700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2528000 0! #2528500 1! #2528600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2528700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2529000 0! #2529500 1! #2529600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2529700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2530000 0! #2530500 1! #2530600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2530700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2531000 0! #2531500 1! #2531600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2531700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2532000 0! #2532500 1! #2532600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2532700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2533000 0! #2533500 1! #2533600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2533700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2534000 0! #2534500 1! #2534600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2534700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2535000 0! #2535500 1! #2535600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2535700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2536000 0! #2536500 1! #2536600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2536700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2537000 0! #2537500 1! #2537600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2537700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2538000 0! #2538500 1! #2538600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2538700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2539000 0! #2539500 1! #2539600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2539700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2540000 0! #2540500 1! #2540600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2540700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2541000 0! #2541500 1! #2541600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2541700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2542000 0! #2542500 1! #2542600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2542700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2543000 0! #2543500 1! #2543600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2543700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2544000 0! #2544500 1! #2544600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2544700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2545000 0! #2545500 1! #2545600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2545700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2546000 0! #2546500 1! #2546600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2546700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2547000 0! #2547500 1! #2547600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2547700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2548000 0! #2548500 1! #2548600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2548700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2549000 0! #2549500 1! #2549600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2549700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2550000 0! #2550500 1! #2550600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2550700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2551000 0! #2551500 1! #2551600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2551700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2552000 0! #2552500 1! #2552600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2552700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2553000 0! #2553500 1! #2553600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2553700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2554000 0! #2554500 1! #2554600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2554700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2555000 0! #2555500 1! #2555600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2555700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2556000 0! #2556500 1! #2556600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2556700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2557000 0! #2557500 1! #2557600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2557700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2558000 0! #2558500 1! #2558600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2558700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2559000 0! #2559500 1! #2559600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2559700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2560000 0! #2560500 1! #2560600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2560700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2561000 0! #2561500 1! #2561600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2561700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2562000 0! #2562500 1! #2562600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2562700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2563000 0! #2563500 1! #2563600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2563700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2564000 0! #2564500 1! #2564600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2564700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2565000 0! #2565500 1! #2565600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2565700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2566000 0! #2566500 1! #2566600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2566700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2567000 0! #2567500 1! #2567600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2567700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2568000 0! #2568500 1! #2568600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2568700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2569000 0! #2569500 1! #2569600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2569700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2570000 0! #2570500 1! #2570600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2570700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2571000 0! #2571500 1! #2571600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2571700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2572000 0! #2572500 1! #2572600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2572700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2573000 0! #2573500 1! #2573600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2573700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2574000 0! #2574500 1! #2574600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2574700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2575000 0! #2575500 1! #2575600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2575700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2576000 0! #2576500 1! #2576600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2576700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2577000 0! #2577500 1! #2577600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2577700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2578000 0! #2578500 1! #2578600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #2578700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1j b10 q 1i 1O #2579000 0! #2579500 1! #2579600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2579700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2580000 0! #2580500 1! #2580600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2580700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B b1000011 C 1H #2581000 0! #2581500 1! #2581600 b1000011 J xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2581700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B b1000001 C 1H #2582000 0! #2582500 1! #2582600 b1000001 J xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2583000 0! #2583500 1! #2583600 1E 1F 1G b1 D 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 0@ 1A 1B b0 C 1H #2584000 0! #2584500 1! #2584600 xE bx D x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2584700 1E 1F 1G b10000 D 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B b1000001 C 1H #2585000 0! #2585500 1! #2585600 xE bx D x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2586000 0! #2586500 1! #2586600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H b1000011 C #2587000 0! #2587500 1! #2587600 b1000011 J xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2587700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2588000 0! #2588500 1! #2588600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2588700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2589000 0! #2589500 1! #2589600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2589700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2590000 0! #2590500 1! #2590600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2590700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2591000 0! #2591500 1! #2591600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2591700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2592000 0! #2592500 1! #2592600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2592700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2593000 0! #2593500 1! #2593600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2593700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2594000 0! #2594500 1! #2594600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2594700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2595000 0! #2595500 1! #2595600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2595700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2596000 0! #2596500 1! #2596600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2596700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2597000 0! #2597500 1! #2597600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2597700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2598000 0! #2598500 1! #2598600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2598700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2599000 0! #2599500 1! #2599600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2599700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2600000 0! #2600500 1! #2600600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2600700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2601000 0! #2601500 1! #2601600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2601700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2602000 0! #2602500 1! #2602600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2602700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2603000 0! #2603500 1! #2603600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2603700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2604000 0! #2604500 1! #2604600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2604700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2605000 0! #2605500 1! #2605600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2605700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2606000 0! #2606500 1! #2606600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2606700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2607000 0! #2607500 1! #2607600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2607700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2608000 0! #2608500 1! #2608600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2608700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2609000 0! #2609500 1! #2609600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2609700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2610000 0! #2610500 1! #2610600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2610700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2611000 0! #2611500 1! #2611600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2611700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2612000 0! #2612500 1! #2612600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2612700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2613000 0! #2613500 1! #2613600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2613700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2614000 0! #2614500 1! #2614600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2614700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2615000 0! #2615500 1! #2615600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2615700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2616000 0! #2616500 1! #2616600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2616700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2617000 0! #2617500 1! #2617600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2617700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2618000 0! #2618500 1! #2618600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2618700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2619000 0! #2619500 1! #2619600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2619700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2620000 0! #2620500 1! #2620600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2620700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2621000 0! #2621500 1! #2621600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2621700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2622000 0! #2622500 1! #2622600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2622700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2623000 0! #2623500 1! #2623600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2623700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2624000 0! #2624500 1! #2624600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2624700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2625000 0! #2625500 1! #2625600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2625700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2626000 0! #2626500 1! #2626600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2626700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2627000 0! #2627500 1! #2627600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2627700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2628000 0! #2628500 1! #2628600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2628700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2629000 0! #2629500 1! #2629600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2629700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2630000 0! #2630500 1! #2630600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2630700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2631000 0! #2631500 1! #2631600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2631700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2632000 0! #2632500 1! #2632600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2632700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2633000 0! #2633500 1! #2633600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2633700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2634000 0! #2634500 1! #2634600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2634700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2635000 0! #2635500 1! #2635600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2635700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2636000 0! #2636500 1! #2636600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2636700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2637000 0! #2637500 1! #2637600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2637700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2638000 0! #2638500 1! #2638600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2638700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2639000 0! #2639500 1! #2639600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2639700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2640000 0! #2640500 1! #2640600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2640700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2641000 0! #2641500 1! #2641600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2641700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2642000 0! #2642500 1! #2642600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2642700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2643000 0! #2643500 1! #2643600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2643700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2644000 0! #2644500 1! #2644600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2644700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2645000 0! #2645500 1! #2645600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2645700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2646000 0! #2646500 1! #2646600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2646700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2647000 0! #2647500 1! #2647600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2647700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2648000 0! #2648500 1! #2648600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2648700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2649000 0! #2649500 1! #2649600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2649700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2650000 0! #2650500 1! #2650600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2650700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2651000 0! #2651500 1! #2651600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2651700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2652000 0! #2652500 1! #2652600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2652700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2653000 0! #2653500 1! #2653600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2653700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2654000 0! #2654500 1! #2654600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2654700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2655000 0! #2655500 1! #2655600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2655700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2656000 0! #2656500 1! #2656600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2656700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2657000 0! #2657500 1! #2657600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2657700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2658000 0! #2658500 1! #2658600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2658700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2659000 0! #2659500 1! #2659600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2659700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2660000 0! #2660500 1! #2660600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2660700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2661000 0! #2661500 1! #2661600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2661700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2662000 0! #2662500 1! #2662600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2662700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2663000 0! #2663500 1! #2663600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2663700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2664000 0! #2664500 1! #2664600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2664700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2665000 0! #2665500 1! #2665600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2665700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2666000 0! #2666500 1! #2666600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2666700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2667000 0! #2667500 1! #2667600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2667700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2668000 0! #2668500 1! #2668600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2668700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2669000 0! #2669500 1! #2669600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2669700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2670000 0! #2670500 1! #2670600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2670700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2671000 0! #2671500 1! #2671600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2671700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2672000 0! #2672500 1! #2672600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2672700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2673000 0! #2673500 1! #2673600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2673700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2674000 0! #2674500 1! #2674600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2674700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2675000 0! #2675500 1! #2675600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2675700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2676000 0! #2676500 1! #2676600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2676700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2677000 0! #2677500 1! #2677600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2677700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2678000 0! #2678500 1! #2678600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2678700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2679000 0! #2679500 1! #2679600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2679700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2680000 0! #2680500 1! #2680600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0Q 0O #2680700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2681000 0! #2681500 1! #2681600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2681700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2682000 0! #2682500 1! #2682600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2682700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2683000 0! #2683500 1! #2683600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2683700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2684000 0! #2684500 1! #2684600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2684700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2685000 0! #2685500 1! #2685600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2685700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2686000 0! #2686500 1! #2686600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2686700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2687000 0! #2687500 1! #2687600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2687700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2688000 0! #2688500 1! #2688600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2688700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2689000 0! #2689500 1! #2689600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2689700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2690000 0! #2690500 1! #2690600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2690700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2691000 0! #2691500 1! #2691600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2691700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2692000 0! #2692500 1! #2692600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2692700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2693000 0! #2693500 1! #2693600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2693700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2694000 0! #2694500 1! #2694600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2694700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2695000 0! #2695500 1! #2695600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2695700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2696000 0! #2696500 1! #2696600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2696700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2697000 0! #2697500 1! #2697600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2697700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2698000 0! #2698500 1! #2698600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2698700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2699000 0! #2699500 1! #2699600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2699700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2700000 0! #2700500 1! #2700600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2700700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2701000 0! #2701500 1! #2701600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2701700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2702000 0! #2702500 1! #2702600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2702700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2703000 0! #2703500 1! #2703600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2703700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2704000 0! #2704500 1! #2704600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2704700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2705000 0! #2705500 1! #2705600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2705700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2706000 0! #2706500 1! #2706600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2706700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2707000 0! #2707500 1! #2707600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2707700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2708000 0! #2708500 1! #2708600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2708700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2709000 0! #2709500 1! #2709600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2709700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2710000 0! #2710500 1! #2710600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2710700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2711000 0! #2711500 1! #2711600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2711700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2712000 0! #2712500 1! #2712600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2712700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2713000 0! #2713500 1! #2713600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2713700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2714000 0! #2714500 1! #2714600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2714700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2715000 0! #2715500 1! #2715600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2715700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2716000 0! #2716500 1! #2716600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2716700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2717000 0! #2717500 1! #2717600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2717700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2718000 0! #2718500 1! #2718600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2718700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2719000 0! #2719500 1! #2719600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2719700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2720000 0! #2720500 1! #2720600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2720700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2721000 0! #2721500 1! #2721600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2721700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2722000 0! #2722500 1! #2722600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2722700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2723000 0! #2723500 1! #2723600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2723700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2724000 0! #2724500 1! #2724600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2724700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2725000 0! #2725500 1! #2725600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2725700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2726000 0! #2726500 1! #2726600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2726700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2727000 0! #2727500 1! #2727600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2727700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2728000 0! #2728500 1! #2728600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2728700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2729000 0! #2729500 1! #2729600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2729700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2730000 0! #2730500 1! #2730600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2730700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2731000 0! #2731500 1! #2731600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #2731700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H b10000000 c #2732000 0! #2732500 1! #2732600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2732700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2733000 0! #2733500 1! #2733600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2733700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2734000 0! #2734500 1! #2734600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2734700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2735000 0! #2735500 1! #2735600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2735700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2736000 0! #2736500 1! #2736600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2736700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2737000 0! #2737500 1! #2737600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2737700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2738000 0! #2738500 1! #2738600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2738700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2739000 0! #2739500 1! #2739600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2739700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2740000 0! #2740500 1! #2740600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2740700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2741000 0! #2741500 1! #2741600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2741700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2742000 0! #2742500 1! #2742600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2742700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2743000 0! #2743500 1! #2743600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2743700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2744000 0! #2744500 1! #2744600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2744700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2745000 0! #2745500 1! #2745600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2745700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2746000 0! #2746500 1! #2746600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2746700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2747000 0! #2747500 1! #2747600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2747700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2748000 0! #2748500 1! #2748600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2748700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2749000 0! #2749500 1! #2749600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2749700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2750000 0! #2750500 1! #2750600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2750700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2751000 0! #2751500 1! #2751600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2751700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2752000 0! #2752500 1! #2752600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2752700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2753000 0! #2753500 1! #2753600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2753700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2754000 0! #2754500 1! #2754600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2754700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2755000 0! #2755500 1! #2755600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2755700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2756000 0! #2756500 1! #2756600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2756700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2757000 0! #2757500 1! #2757600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2757700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2758000 0! #2758500 1! #2758600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2758700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2759000 0! #2759500 1! #2759600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2759700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2760000 0! #2760500 1! #2760600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2760700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2761000 0! #2761500 1! #2761600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2761700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2762000 0! #2762500 1! #2762600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2762700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2763000 0! #2763500 1! #2763600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2763700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2764000 0! #2764500 1! #2764600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2764700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2765000 0! #2765500 1! #2765600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2765700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2766000 0! #2766500 1! #2766600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2766700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2767000 0! #2767500 1! #2767600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2767700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2768000 0! #2768500 1! #2768600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2768700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2769000 0! #2769500 1! #2769600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2769700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2770000 0! #2770500 1! #2770600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2770700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2771000 0! #2771500 1! #2771600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2771700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2772000 0! #2772500 1! #2772600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2772700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2773000 0! #2773500 1! #2773600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2773700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2774000 0! #2774500 1! #2774600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2774700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2775000 0! #2775500 1! #2775600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2775700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2776000 0! #2776500 1! #2776600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2776700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2777000 0! #2777500 1! #2777600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2777700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2778000 0! #2778500 1! #2778600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2778700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2779000 0! #2779500 1! #2779600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2779700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2780000 0! #2780500 1! #2780600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2780700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2781000 0! #2781500 1! #2781600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2781700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2782000 0! #2782500 1! #2782600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2782700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2783000 0! #2783500 1! #2783600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2783700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2784000 0! #2784500 1! #2784600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2784700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2785000 0! #2785500 1! #2785600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2785700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2786000 0! #2786500 1! #2786600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2786700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2787000 0! #2787500 1! #2787600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2787700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2788000 0! #2788500 1! #2788600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2788700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2789000 0! #2789500 1! #2789600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2789700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2790000 0! #2790500 1! #2790600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2790700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2791000 0! #2791500 1! #2791600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2791700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2792000 0! #2792500 1! #2792600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2792700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2793000 0! #2793500 1! #2793600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2793700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2794000 0! #2794500 1! #2794600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2794700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2795000 0! #2795500 1! #2795600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2795700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2796000 0! #2796500 1! #2796600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2796700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2797000 0! #2797500 1! #2797600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2797700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2798000 0! #2798500 1! #2798600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2798700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2799000 0! #2799500 1! #2799600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2799700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2800000 0! #2800500 1! #2800600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2800700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2801000 0! #2801500 1! #2801600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2801700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2802000 0! #2802500 1! #2802600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2802700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2803000 0! #2803500 1! #2803600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2803700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2804000 0! #2804500 1! #2804600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2804700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2805000 0! #2805500 1! #2805600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2805700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2806000 0! #2806500 1! #2806600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2806700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2807000 0! #2807500 1! #2807600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2807700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2808000 0! #2808500 1! #2808600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2808700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2809000 0! #2809500 1! #2809600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2809700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2810000 0! #2810500 1! #2810600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2810700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2811000 0! #2811500 1! #2811600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2811700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2812000 0! #2812500 1! #2812600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2812700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2813000 0! #2813500 1! #2813600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2813700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2814000 0! #2814500 1! #2814600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2814700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2815000 0! #2815500 1! #2815600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2815700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2816000 0! #2816500 1! #2816600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2816700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2817000 0! #2817500 1! #2817600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2817700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2818000 0! #2818500 1! #2818600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2818700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2819000 0! #2819500 1! #2819600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2819700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2820000 0! #2820500 1! #2820600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2820700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2821000 0! #2821500 1! #2821600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2821700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2822000 0! #2822500 1! #2822600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2822700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2823000 0! #2823500 1! #2823600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2823700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2824000 0! #2824500 1! #2824600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2824700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2825000 0! #2825500 1! #2825600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2825700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2826000 0! #2826500 1! #2826600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2826700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2827000 0! #2827500 1! #2827600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2827700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2828000 0! #2828500 1! #2828600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2828700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2829000 0! #2829500 1! #2829600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2829700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2830000 0! #2830500 1! #2830600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2830700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2831000 0! #2831500 1! #2831600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2831700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2832000 0! #2832500 1! #2832600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2832700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2833000 0! #2833500 1! #2833600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #2833700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0i #2834000 0! #2834500 1! #2834600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2834700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2835000 0! #2835500 1! #2835600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2835700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2836000 0! #2836500 1! #2836600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2836700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2837000 0! #2837500 1! #2837600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2837700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2838000 0! #2838500 1! #2838600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2838700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2839000 0! #2839500 1! #2839600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2839700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2840000 0! #2840500 1! #2840600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2840700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2841000 0! #2841500 1! #2841600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2841700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2842000 0! #2842500 1! #2842600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2842700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2843000 0! #2843500 1! #2843600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2843700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2844000 0! #2844500 1! #2844600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2844700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2845000 0! #2845500 1! #2845600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2845700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2846000 0! #2846500 1! #2846600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2846700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2847000 0! #2847500 1! #2847600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2847700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2848000 0! #2848500 1! #2848600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2848700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2849000 0! #2849500 1! #2849600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2849700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2850000 0! #2850500 1! #2850600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2850700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2851000 0! #2851500 1! #2851600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2851700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2852000 0! #2852500 1! #2852600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2852700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2853000 0! #2853500 1! #2853600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2853700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2854000 0! #2854500 1! #2854600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2854700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2855000 0! #2855500 1! #2855600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2855700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2856000 0! #2856500 1! #2856600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2856700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2857000 0! #2857500 1! #2857600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2857700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2858000 0! #2858500 1! #2858600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2858700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2859000 0! #2859500 1! #2859600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2859700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2860000 0! #2860500 1! #2860600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2860700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2861000 0! #2861500 1! #2861600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2861700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2862000 0! #2862500 1! #2862600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2862700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2863000 0! #2863500 1! #2863600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2863700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2864000 0! #2864500 1! #2864600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2864700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2865000 0! #2865500 1! #2865600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2865700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2866000 0! #2866500 1! #2866600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2866700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2867000 0! #2867500 1! #2867600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2867700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2868000 0! #2868500 1! #2868600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2868700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2869000 0! #2869500 1! #2869600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2869700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2870000 0! #2870500 1! #2870600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2870700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2871000 0! #2871500 1! #2871600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2871700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2872000 0! #2872500 1! #2872600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2872700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2873000 0! #2873500 1! #2873600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2873700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2874000 0! #2874500 1! #2874600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2874700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2875000 0! #2875500 1! #2875600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2875700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2876000 0! #2876500 1! #2876600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2876700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2877000 0! #2877500 1! #2877600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2877700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2878000 0! #2878500 1! #2878600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2878700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2879000 0! #2879500 1! #2879600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2879700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2880000 0! #2880500 1! #2880600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2880700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2881000 0! #2881500 1! #2881600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2881700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2882000 0! #2882500 1! #2882600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2882700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2883000 0! #2883500 1! #2883600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2883700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2884000 0! #2884500 1! #2884600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2884700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2885000 0! #2885500 1! #2885600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2885700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2886000 0! #2886500 1! #2886600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2886700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2887000 0! #2887500 1! #2887600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2887700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2888000 0! #2888500 1! #2888600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2888700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2889000 0! #2889500 1! #2889600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2889700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2890000 0! #2890500 1! #2890600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2890700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2891000 0! #2891500 1! #2891600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2891700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2892000 0! #2892500 1! #2892600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2892700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2893000 0! #2893500 1! #2893600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2893700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2894000 0! #2894500 1! #2894600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2894700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2895000 0! #2895500 1! #2895600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2895700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2896000 0! #2896500 1! #2896600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2896700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2897000 0! #2897500 1! #2897600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2897700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2898000 0! #2898500 1! #2898600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2898700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2899000 0! #2899500 1! #2899600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2899700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2900000 0! #2900500 1! #2900600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2900700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2901000 0! #2901500 1! #2901600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2901700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2902000 0! #2902500 1! #2902600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2902700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2903000 0! #2903500 1! #2903600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2903700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2904000 0! #2904500 1! #2904600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2904700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2905000 0! #2905500 1! #2905600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2905700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2906000 0! #2906500 1! #2906600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2906700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2907000 0! #2907500 1! #2907600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2907700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2908000 0! #2908500 1! #2908600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2908700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2909000 0! #2909500 1! #2909600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2909700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2910000 0! #2910500 1! #2910600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2910700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2911000 0! #2911500 1! #2911600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2911700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2912000 0! #2912500 1! #2912600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2912700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2913000 0! #2913500 1! #2913600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2913700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2914000 0! #2914500 1! #2914600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2914700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2915000 0! #2915500 1! #2915600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2915700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2916000 0! #2916500 1! #2916600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2916700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2917000 0! #2917500 1! #2917600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2917700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2918000 0! #2918500 1! #2918600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2918700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2919000 0! #2919500 1! #2919600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2919700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2920000 0! #2920500 1! #2920600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2920700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2921000 0! #2921500 1! #2921600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2921700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2922000 0! #2922500 1! #2922600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2922700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2923000 0! #2923500 1! #2923600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2923700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2924000 0! #2924500 1! #2924600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2924700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2925000 0! #2925500 1! #2925600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2925700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2926000 0! #2926500 1! #2926600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2926700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2927000 0! #2927500 1! #2927600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2927700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2928000 0! #2928500 1! #2928600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2928700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2929000 0! #2929500 1! #2929600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2929700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2930000 0! #2930500 1! #2930600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2930700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2931000 0! #2931500 1! #2931600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2931700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2932000 0! #2932500 1! #2932600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2932700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2933000 0! #2933500 1! #2933600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2933700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2934000 0! #2934500 1! #2934600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2934700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2935000 0! #2935500 1! #2935600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2935700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2936000 0! #2936500 1! #2936600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2936700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2937000 0! #2937500 1! #2937600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2937700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2938000 0! #2938500 1! #2938600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2938700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2939000 0! #2939500 1! #2939600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2939700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2940000 0! #2940500 1! #2940600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2940700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2941000 0! #2941500 1! #2941600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2941700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2942000 0! #2942500 1! #2942600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2942700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2943000 0! #2943500 1! #2943600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2943700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2944000 0! #2944500 1! #2944600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2944700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2945000 0! #2945500 1! #2945600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2945700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2946000 0! #2946500 1! #2946600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2946700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2947000 0! #2947500 1! #2947600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2947700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2948000 0! #2948500 1! #2948600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2948700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2949000 0! #2949500 1! #2949600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2949700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2950000 0! #2950500 1! #2950600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2950700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2951000 0! #2951500 1! #2951600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2951700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2952000 0! #2952500 1! #2952600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2952700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2953000 0! #2953500 1! #2953600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2953700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2954000 0! #2954500 1! #2954600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2954700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2955000 0! #2955500 1! #2955600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2955700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2956000 0! #2956500 1! #2956600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2956700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2957000 0! #2957500 1! #2957600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2957700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2958000 0! #2958500 1! #2958600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2958700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2959000 0! #2959500 1! #2959600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2959700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2960000 0! #2960500 1! #2960600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2960700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2961000 0! #2961500 1! #2961600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2961700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2962000 0! #2962500 1! #2962600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2962700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2963000 0! #2963500 1! #2963600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2963700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2964000 0! #2964500 1! #2964600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2964700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2965000 0! #2965500 1! #2965600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2965700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2966000 0! #2966500 1! #2966600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2966700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2967000 0! #2967500 1! #2967600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2967700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2968000 0! #2968500 1! #2968600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2968700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2969000 0! #2969500 1! #2969600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2969700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2970000 0! #2970500 1! #2970600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2970700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2971000 0! #2971500 1! #2971600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2971700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2972000 0! #2972500 1! #2972600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2972700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2973000 0! #2973500 1! #2973600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2973700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2974000 0! #2974500 1! #2974600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2974700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2975000 0! #2975500 1! #2975600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2975700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2976000 0! #2976500 1! #2976600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2976700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2977000 0! #2977500 1! #2977600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2977700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2978000 0! #2978500 1! #2978600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2978700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2979000 0! #2979500 1! #2979600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2979700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2980000 0! #2980500 1! #2980600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2980700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2981000 0! #2981500 1! #2981600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2981700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2982000 0! #2982500 1! #2982600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2982700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2983000 0! #2983500 1! #2983600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2983700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2984000 0! #2984500 1! #2984600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2984700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2985000 0! #2985500 1! #2985600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2985700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2986000 0! #2986500 1! #2986600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #2986700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H b110 g b0 c #2987000 0! #2987500 1! #2987600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2987700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2988000 0! #2988500 1! #2988600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2988700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2989000 0! #2989500 1! #2989600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2989700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2990000 0! #2990500 1! #2990600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2990700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2991000 0! #2991500 1! #2991600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2991700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2992000 0! #2992500 1! #2992600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2992700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2993000 0! #2993500 1! #2993600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2993700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2994000 0! #2994500 1! #2994600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2994700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2995000 0! #2995500 1! #2995600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2995700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2996000 0! #2996500 1! #2996600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2996700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2997000 0! #2997500 1! #2997600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2997700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2998000 0! #2998500 1! #2998600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2998700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #2999000 0! #2999500 1! #2999600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #2999700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3000000 0! #3000500 1! #3000600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3000700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3001000 0! #3001500 1! #3001600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3001700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3002000 0! #3002500 1! #3002600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3002700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3003000 0! #3003500 1! #3003600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3003700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3004000 0! #3004500 1! #3004600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3004700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3005000 0! #3005500 1! #3005600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3005700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3006000 0! #3006500 1! #3006600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3006700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3007000 0! #3007500 1! #3007600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3007700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3008000 0! #3008500 1! #3008600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3008700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3009000 0! #3009500 1! #3009600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3009700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3010000 0! #3010500 1! #3010600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3010700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3011000 0! #3011500 1! #3011600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3011700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3012000 0! #3012500 1! #3012600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3012700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3013000 0! #3013500 1! #3013600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3013700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3014000 0! #3014500 1! #3014600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3014700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3015000 0! #3015500 1! #3015600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3015700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3016000 0! #3016500 1! #3016600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3016700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3017000 0! #3017500 1! #3017600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3017700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3018000 0! #3018500 1! #3018600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3018700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3019000 0! #3019500 1! #3019600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3019700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3020000 0! #3020500 1! #3020600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3020700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3021000 0! #3021500 1! #3021600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3021700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3022000 0! #3022500 1! #3022600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3022700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3023000 0! #3023500 1! #3023600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3023700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3024000 0! #3024500 1! #3024600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3024700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3025000 0! #3025500 1! #3025600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3025700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3026000 0! #3026500 1! #3026600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3026700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3027000 0! #3027500 1! #3027600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3027700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3028000 0! #3028500 1! #3028600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3028700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3029000 0! #3029500 1! #3029600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3029700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3030000 0! #3030500 1! #3030600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3030700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3031000 0! #3031500 1! #3031600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3031700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3032000 0! #3032500 1! #3032600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3032700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3033000 0! #3033500 1! #3033600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3033700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3034000 0! #3034500 1! #3034600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3034700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3035000 0! #3035500 1! #3035600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3035700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3036000 0! #3036500 1! #3036600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3036700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3037000 0! #3037500 1! #3037600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3037700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3038000 0! #3038500 1! #3038600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3038700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3039000 0! #3039500 1! #3039600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3039700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3040000 0! #3040500 1! #3040600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3040700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3041000 0! #3041500 1! #3041600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3041700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3042000 0! #3042500 1! #3042600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3042700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3043000 0! #3043500 1! #3043600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3043700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3044000 0! #3044500 1! #3044600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3044700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3045000 0! #3045500 1! #3045600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3045700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3046000 0! #3046500 1! #3046600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3046700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3047000 0! #3047500 1! #3047600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3047700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3048000 0! #3048500 1! #3048600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3048700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3049000 0! #3049500 1! #3049600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3049700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3050000 0! #3050500 1! #3050600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3050700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3051000 0! #3051500 1! #3051600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3051700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3052000 0! #3052500 1! #3052600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3052700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3053000 0! #3053500 1! #3053600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3053700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3054000 0! #3054500 1! #3054600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3054700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3055000 0! #3055500 1! #3055600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3055700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3056000 0! #3056500 1! #3056600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3056700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3057000 0! #3057500 1! #3057600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3057700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3058000 0! #3058500 1! #3058600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3058700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3059000 0! #3059500 1! #3059600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3059700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3060000 0! #3060500 1! #3060600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3060700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3061000 0! #3061500 1! #3061600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3061700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3062000 0! #3062500 1! #3062600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3062700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3063000 0! #3063500 1! #3063600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3063700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3064000 0! #3064500 1! #3064600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3064700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3065000 0! #3065500 1! #3065600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3065700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3066000 0! #3066500 1! #3066600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3066700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3067000 0! #3067500 1! #3067600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3067700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3068000 0! #3068500 1! #3068600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3068700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3069000 0! #3069500 1! #3069600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3069700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3070000 0! #3070500 1! #3070600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3070700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3071000 0! #3071500 1! #3071600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3071700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3072000 0! #3072500 1! #3072600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3072700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3073000 0! #3073500 1! #3073600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3073700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3074000 0! #3074500 1! #3074600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3074700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3075000 0! #3075500 1! #3075600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3075700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3076000 0! #3076500 1! #3076600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3076700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3077000 0! #3077500 1! #3077600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3077700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3078000 0! #3078500 1! #3078600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3078700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3079000 0! #3079500 1! #3079600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3079700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3080000 0! #3080500 1! #3080600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3080700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3081000 0! #3081500 1! #3081600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3081700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3082000 0! #3082500 1! #3082600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3082700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3083000 0! #3083500 1! #3083600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3083700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3084000 0! #3084500 1! #3084600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3084700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3085000 0! #3085500 1! #3085600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3085700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3086000 0! #3086500 1! #3086600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3086700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3087000 0! #3087500 1! #3087600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3087700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3088000 0! #3088500 1! #3088600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #3088700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3089000 0! #3089500 1! #3089600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3089700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3090000 0! #3090500 1! #3090600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3090700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3091000 0! #3091500 1! #3091600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3091700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3092000 0! #3092500 1! #3092600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3092700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3093000 0! #3093500 1! #3093600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3093700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3094000 0! #3094500 1! #3094600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3094700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3095000 0! #3095500 1! #3095600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3095700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3096000 0! #3096500 1! #3096600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3096700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3097000 0! #3097500 1! #3097600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3097700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3098000 0! #3098500 1! #3098600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3098700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3099000 0! #3099500 1! #3099600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3099700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3100000 0! #3100500 1! #3100600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3100700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3101000 0! #3101500 1! #3101600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3101700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3102000 0! #3102500 1! #3102600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3102700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3103000 0! #3103500 1! #3103600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3103700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3104000 0! #3104500 1! #3104600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3104700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3105000 0! #3105500 1! #3105600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3105700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3106000 0! #3106500 1! #3106600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3106700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3107000 0! #3107500 1! #3107600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3107700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3108000 0! #3108500 1! #3108600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3108700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3109000 0! #3109500 1! #3109600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3109700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3110000 0! #3110500 1! #3110600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3110700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3111000 0! #3111500 1! #3111600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3111700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3112000 0! #3112500 1! #3112600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3112700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3113000 0! #3113500 1! #3113600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3113700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3114000 0! #3114500 1! #3114600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3114700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3115000 0! #3115500 1! #3115600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3115700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3116000 0! #3116500 1! #3116600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3116700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3117000 0! #3117500 1! #3117600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3117700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3118000 0! #3118500 1! #3118600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3118700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3119000 0! #3119500 1! #3119600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3119700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3120000 0! #3120500 1! #3120600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3120700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3121000 0! #3121500 1! #3121600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3121700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3122000 0! #3122500 1! #3122600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3122700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3123000 0! #3123500 1! #3123600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3123700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3124000 0! #3124500 1! #3124600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3124700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3125000 0! #3125500 1! #3125600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3125700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3126000 0! #3126500 1! #3126600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3126700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3127000 0! #3127500 1! #3127600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3127700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3128000 0! #3128500 1! #3128600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3128700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3129000 0! #3129500 1! #3129600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3129700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3130000 0! #3130500 1! #3130600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3130700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3131000 0! #3131500 1! #3131600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3131700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3132000 0! #3132500 1! #3132600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3132700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3133000 0! #3133500 1! #3133600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3133700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3134000 0! #3134500 1! #3134600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3134700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3135000 0! #3135500 1! #3135600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3135700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3136000 0! #3136500 1! #3136600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3136700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3137000 0! #3137500 1! #3137600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3137700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3138000 0! #3138500 1! #3138600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3138700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3139000 0! #3139500 1! #3139600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3139700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3140000 0! #3140500 1! #3140600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3140700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3141000 0! #3141500 1! #3141600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3141700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3142000 0! #3142500 1! #3142600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3142700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3143000 0! #3143500 1! #3143600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3143700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3144000 0! #3144500 1! #3144600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3144700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3145000 0! #3145500 1! #3145600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3145700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3146000 0! #3146500 1! #3146600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3146700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3147000 0! #3147500 1! #3147600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3147700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3148000 0! #3148500 1! #3148600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3148700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3149000 0! #3149500 1! #3149600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3149700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3150000 0! #3150500 1! #3150600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3150700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3151000 0! #3151500 1! #3151600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3151700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3152000 0! #3152500 1! #3152600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3152700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3153000 0! #3153500 1! #3153600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3153700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3154000 0! #3154500 1! #3154600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3154700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3155000 0! #3155500 1! #3155600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3155700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3156000 0! #3156500 1! #3156600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3156700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3157000 0! #3157500 1! #3157600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3157700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3158000 0! #3158500 1! #3158600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3158700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3159000 0! #3159500 1! #3159600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3159700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3160000 0! #3160500 1! #3160600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3160700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3161000 0! #3161500 1! #3161600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3161700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3162000 0! #3162500 1! #3162600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3162700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3163000 0! #3163500 1! #3163600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3163700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3164000 0! #3164500 1! #3164600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3164700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3165000 0! #3165500 1! #3165600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3165700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3166000 0! #3166500 1! #3166600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3166700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3167000 0! #3167500 1! #3167600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3167700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3168000 0! #3168500 1! #3168600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3168700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3169000 0! #3169500 1! #3169600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3169700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3170000 0! #3170500 1! #3170600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3170700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3171000 0! #3171500 1! #3171600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3171700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3172000 0! #3172500 1! #3172600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3172700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3173000 0! #3173500 1! #3173600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3173700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3174000 0! #3174500 1! #3174600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3174700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3175000 0! #3175500 1! #3175600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3175700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3176000 0! #3176500 1! #3176600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3176700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3177000 0! #3177500 1! #3177600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3177700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3178000 0! #3178500 1! #3178600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3178700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3179000 0! #3179500 1! #3179600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3179700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3180000 0! #3180500 1! #3180600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3180700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3181000 0! #3181500 1! #3181600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3181700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3182000 0! #3182500 1! #3182600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3182700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3183000 0! #3183500 1! #3183600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3183700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3184000 0! #3184500 1! #3184600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3184700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3185000 0! #3185500 1! #3185600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3185700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3186000 0! #3186500 1! #3186600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3186700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3187000 0! #3187500 1! #3187600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3187700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3188000 0! #3188500 1! #3188600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3188700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3189000 0! #3189500 1! #3189600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3189700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3190000 0! #3190500 1! #3190600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3190700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3191000 0! #3191500 1! #3191600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3191700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3192000 0! #3192500 1! #3192600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3192700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3193000 0! #3193500 1! #3193600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3193700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3194000 0! #3194500 1! #3194600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3194700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3195000 0! #3195500 1! #3195600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3195700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3196000 0! #3196500 1! #3196600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3196700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3197000 0! #3197500 1! #3197600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3197700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3198000 0! #3198500 1! #3198600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3198700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3199000 0! #3199500 1! #3199600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3199700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3200000 0! #3200500 1! #3200600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3200700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3201000 0! #3201500 1! #3201600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3201700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3202000 0! #3202500 1! #3202600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3202700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3203000 0! #3203500 1! #3203600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3203700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3204000 0! #3204500 1! #3204600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3204700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3205000 0! #3205500 1! #3205600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3205700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3206000 0! #3206500 1! #3206600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3206700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3207000 0! #3207500 1! #3207600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3207700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3208000 0! #3208500 1! #3208600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3208700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3209000 0! #3209500 1! #3209600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3209700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3210000 0! #3210500 1! #3210600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3210700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3211000 0! #3211500 1! #3211600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3211700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3212000 0! #3212500 1! #3212600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3212700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3213000 0! #3213500 1! #3213600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3213700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3214000 0! #3214500 1! #3214600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3214700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3215000 0! #3215500 1! #3215600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3215700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3216000 0! #3216500 1! #3216600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3216700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3217000 0! #3217500 1! #3217600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3217700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3218000 0! #3218500 1! #3218600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3218700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3219000 0! #3219500 1! #3219600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3219700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3220000 0! #3220500 1! #3220600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3220700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3221000 0! #3221500 1! #3221600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3221700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3222000 0! #3222500 1! #3222600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3222700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3223000 0! #3223500 1! #3223600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3223700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3224000 0! #3224500 1! #3224600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3224700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3225000 0! #3225500 1! #3225600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3225700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3226000 0! #3226500 1! #3226600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3226700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3227000 0! #3227500 1! #3227600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3227700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3228000 0! #3228500 1! #3228600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3228700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3229000 0! #3229500 1! #3229600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3229700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3230000 0! #3230500 1! #3230600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3230700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3231000 0! #3231500 1! #3231600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3231700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3232000 0! #3232500 1! #3232600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3232700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3233000 0! #3233500 1! #3233600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3233700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3234000 0! #3234500 1! #3234600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3234700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3235000 0! #3235500 1! #3235600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3235700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3236000 0! #3236500 1! #3236600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3236700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3237000 0! #3237500 1! #3237600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3237700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3238000 0! #3238500 1! #3238600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3238700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3239000 0! #3239500 1! #3239600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3239700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3240000 0! #3240500 1! #3240600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3240700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3241000 0! #3241500 1! #3241600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #3241700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H b101 g #3242000 0! #3242500 1! #3242600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3242700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3243000 0! #3243500 1! #3243600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3243700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3244000 0! #3244500 1! #3244600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3244700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3245000 0! #3245500 1! #3245600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3245700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3246000 0! #3246500 1! #3246600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3246700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3247000 0! #3247500 1! #3247600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3247700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3248000 0! #3248500 1! #3248600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3248700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3249000 0! #3249500 1! #3249600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3249700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3250000 0! #3250500 1! #3250600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3250700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3251000 0! #3251500 1! #3251600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3251700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3252000 0! #3252500 1! #3252600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3252700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3253000 0! #3253500 1! #3253600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3253700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3254000 0! #3254500 1! #3254600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3254700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3255000 0! #3255500 1! #3255600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3255700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3256000 0! #3256500 1! #3256600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3256700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3257000 0! #3257500 1! #3257600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3257700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3258000 0! #3258500 1! #3258600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3258700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3259000 0! #3259500 1! #3259600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3259700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3260000 0! #3260500 1! #3260600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3260700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3261000 0! #3261500 1! #3261600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3261700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3262000 0! #3262500 1! #3262600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3262700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3263000 0! #3263500 1! #3263600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3263700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3264000 0! #3264500 1! #3264600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3264700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3265000 0! #3265500 1! #3265600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3265700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3266000 0! #3266500 1! #3266600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3266700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3267000 0! #3267500 1! #3267600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3267700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3268000 0! #3268500 1! #3268600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3268700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3269000 0! #3269500 1! #3269600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3269700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3270000 0! #3270500 1! #3270600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3270700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3271000 0! #3271500 1! #3271600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3271700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3272000 0! #3272500 1! #3272600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3272700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3273000 0! #3273500 1! #3273600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3273700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3274000 0! #3274500 1! #3274600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3274700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3275000 0! #3275500 1! #3275600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3275700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3276000 0! #3276500 1! #3276600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3276700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3277000 0! #3277500 1! #3277600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3277700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3278000 0! #3278500 1! #3278600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3278700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3279000 0! #3279500 1! #3279600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3279700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3280000 0! #3280500 1! #3280600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3280700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3281000 0! #3281500 1! #3281600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3281700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3282000 0! #3282500 1! #3282600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3282700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3283000 0! #3283500 1! #3283600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3283700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3284000 0! #3284500 1! #3284600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3284700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3285000 0! #3285500 1! #3285600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3285700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3286000 0! #3286500 1! #3286600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3286700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3287000 0! #3287500 1! #3287600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3287700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3288000 0! #3288500 1! #3288600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3288700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3289000 0! #3289500 1! #3289600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3289700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3290000 0! #3290500 1! #3290600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3290700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3291000 0! #3291500 1! #3291600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3291700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3292000 0! #3292500 1! #3292600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3292700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3293000 0! #3293500 1! #3293600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3293700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3294000 0! #3294500 1! #3294600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3294700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3295000 0! #3295500 1! #3295600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3295700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3296000 0! #3296500 1! #3296600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3296700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3297000 0! #3297500 1! #3297600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3297700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3298000 0! #3298500 1! #3298600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3298700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3299000 0! #3299500 1! #3299600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3299700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3300000 0! #3300500 1! #3300600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3300700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3301000 0! #3301500 1! #3301600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3301700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3302000 0! #3302500 1! #3302600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3302700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3303000 0! #3303500 1! #3303600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3303700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3304000 0! #3304500 1! #3304600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3304700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3305000 0! #3305500 1! #3305600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3305700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3306000 0! #3306500 1! #3306600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3306700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3307000 0! #3307500 1! #3307600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3307700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3308000 0! #3308500 1! #3308600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3308700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3309000 0! #3309500 1! #3309600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3309700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3310000 0! #3310500 1! #3310600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3310700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3311000 0! #3311500 1! #3311600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3311700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3312000 0! #3312500 1! #3312600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3312700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3313000 0! #3313500 1! #3313600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3313700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3314000 0! #3314500 1! #3314600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3314700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3315000 0! #3315500 1! #3315600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3315700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3316000 0! #3316500 1! #3316600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3316700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3317000 0! #3317500 1! #3317600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3317700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3318000 0! #3318500 1! #3318600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3318700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3319000 0! #3319500 1! #3319600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3319700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3320000 0! #3320500 1! #3320600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3320700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3321000 0! #3321500 1! #3321600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3321700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3322000 0! #3322500 1! #3322600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3322700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3323000 0! #3323500 1! #3323600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3323700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3324000 0! #3324500 1! #3324600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3324700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3325000 0! #3325500 1! #3325600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3325700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3326000 0! #3326500 1! #3326600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3326700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3327000 0! #3327500 1! #3327600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3327700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3328000 0! #3328500 1! #3328600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3328700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3329000 0! #3329500 1! #3329600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3329700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3330000 0! #3330500 1! #3330600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3330700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3331000 0! #3331500 1! #3331600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3331700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3332000 0! #3332500 1! #3332600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3332700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3333000 0! #3333500 1! #3333600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3333700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3334000 0! #3334500 1! #3334600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3334700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3335000 0! #3335500 1! #3335600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3335700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3336000 0! #3336500 1! #3336600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3336700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3337000 0! #3337500 1! #3337600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3337700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3338000 0! #3338500 1! #3338600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3338700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3339000 0! #3339500 1! #3339600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3339700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3340000 0! #3340500 1! #3340600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3340700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3341000 0! #3341500 1! #3341600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3341700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3342000 0! #3342500 1! #3342600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3342700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3343000 0! #3343500 1! #3343600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #3343700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3344000 0! #3344500 1! #3344600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3344700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3345000 0! #3345500 1! #3345600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3345700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3346000 0! #3346500 1! #3346600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3346700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3347000 0! #3347500 1! #3347600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3347700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3348000 0! #3348500 1! #3348600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3348700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3349000 0! #3349500 1! #3349600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3349700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3350000 0! #3350500 1! #3350600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3350700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3351000 0! #3351500 1! #3351600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3351700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3352000 0! #3352500 1! #3352600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3352700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3353000 0! #3353500 1! #3353600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3353700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3354000 0! #3354500 1! #3354600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3354700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3355000 0! #3355500 1! #3355600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3355700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3356000 0! #3356500 1! #3356600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3356700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3357000 0! #3357500 1! #3357600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3357700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3358000 0! #3358500 1! #3358600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3358700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3359000 0! #3359500 1! #3359600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3359700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3360000 0! #3360500 1! #3360600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3360700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3361000 0! #3361500 1! #3361600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3361700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3362000 0! #3362500 1! #3362600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3362700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3363000 0! #3363500 1! #3363600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3363700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3364000 0! #3364500 1! #3364600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3364700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3365000 0! #3365500 1! #3365600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3365700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3366000 0! #3366500 1! #3366600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3366700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3367000 0! #3367500 1! #3367600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3367700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3368000 0! #3368500 1! #3368600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3368700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3369000 0! #3369500 1! #3369600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3369700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3370000 0! #3370500 1! #3370600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3370700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3371000 0! #3371500 1! #3371600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3371700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3372000 0! #3372500 1! #3372600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3372700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3373000 0! #3373500 1! #3373600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3373700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3374000 0! #3374500 1! #3374600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3374700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3375000 0! #3375500 1! #3375600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3375700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3376000 0! #3376500 1! #3376600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3376700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3377000 0! #3377500 1! #3377600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3377700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3378000 0! #3378500 1! #3378600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3378700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3379000 0! #3379500 1! #3379600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3379700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3380000 0! #3380500 1! #3380600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3380700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3381000 0! #3381500 1! #3381600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3381700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3382000 0! #3382500 1! #3382600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3382700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3383000 0! #3383500 1! #3383600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3383700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3384000 0! #3384500 1! #3384600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3384700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3385000 0! #3385500 1! #3385600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3385700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3386000 0! #3386500 1! #3386600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3386700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3387000 0! #3387500 1! #3387600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3387700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3388000 0! #3388500 1! #3388600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3388700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3389000 0! #3389500 1! #3389600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3389700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3390000 0! #3390500 1! #3390600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3390700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3391000 0! #3391500 1! #3391600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3391700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3392000 0! #3392500 1! #3392600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3392700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3393000 0! #3393500 1! #3393600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3393700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3394000 0! #3394500 1! #3394600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3394700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3395000 0! #3395500 1! #3395600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3395700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3396000 0! #3396500 1! #3396600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3396700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3397000 0! #3397500 1! #3397600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3397700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3398000 0! #3398500 1! #3398600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3398700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3399000 0! #3399500 1! #3399600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3399700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3400000 0! #3400500 1! #3400600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3400700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3401000 0! #3401500 1! #3401600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3401700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3402000 0! #3402500 1! #3402600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3402700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3403000 0! #3403500 1! #3403600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3403700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3404000 0! #3404500 1! #3404600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3404700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3405000 0! #3405500 1! #3405600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3405700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3406000 0! #3406500 1! #3406600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3406700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3407000 0! #3407500 1! #3407600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3407700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3408000 0! #3408500 1! #3408600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3408700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3409000 0! #3409500 1! #3409600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3409700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3410000 0! #3410500 1! #3410600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3410700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3411000 0! #3411500 1! #3411600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3411700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3412000 0! #3412500 1! #3412600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3412700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3413000 0! #3413500 1! #3413600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3413700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3414000 0! #3414500 1! #3414600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3414700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3415000 0! #3415500 1! #3415600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3415700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3416000 0! #3416500 1! #3416600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3416700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3417000 0! #3417500 1! #3417600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3417700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3418000 0! #3418500 1! #3418600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3418700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3419000 0! #3419500 1! #3419600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3419700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3420000 0! #3420500 1! #3420600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3420700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3421000 0! #3421500 1! #3421600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3421700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3422000 0! #3422500 1! #3422600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3422700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3423000 0! #3423500 1! #3423600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3423700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3424000 0! #3424500 1! #3424600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3424700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3425000 0! #3425500 1! #3425600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3425700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3426000 0! #3426500 1! #3426600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3426700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3427000 0! #3427500 1! #3427600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3427700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3428000 0! #3428500 1! #3428600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3428700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3429000 0! #3429500 1! #3429600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3429700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3430000 0! #3430500 1! #3430600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3430700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3431000 0! #3431500 1! #3431600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3431700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3432000 0! #3432500 1! #3432600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3432700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3433000 0! #3433500 1! #3433600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3433700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3434000 0! #3434500 1! #3434600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3434700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3435000 0! #3435500 1! #3435600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3435700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3436000 0! #3436500 1! #3436600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3436700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3437000 0! #3437500 1! #3437600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3437700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3438000 0! #3438500 1! #3438600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3438700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3439000 0! #3439500 1! #3439600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3439700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3440000 0! #3440500 1! #3440600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3440700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3441000 0! #3441500 1! #3441600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3441700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3442000 0! #3442500 1! #3442600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3442700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3443000 0! #3443500 1! #3443600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3443700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3444000 0! #3444500 1! #3444600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3444700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3445000 0! #3445500 1! #3445600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3445700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3446000 0! #3446500 1! #3446600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3446700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3447000 0! #3447500 1! #3447600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3447700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3448000 0! #3448500 1! #3448600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3448700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3449000 0! #3449500 1! #3449600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3449700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3450000 0! #3450500 1! #3450600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3450700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3451000 0! #3451500 1! #3451600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3451700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3452000 0! #3452500 1! #3452600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3452700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3453000 0! #3453500 1! #3453600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3453700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3454000 0! #3454500 1! #3454600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3454700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3455000 0! #3455500 1! #3455600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3455700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3456000 0! #3456500 1! #3456600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3456700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3457000 0! #3457500 1! #3457600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3457700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3458000 0! #3458500 1! #3458600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3458700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3459000 0! #3459500 1! #3459600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3459700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3460000 0! #3460500 1! #3460600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3460700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3461000 0! #3461500 1! #3461600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3461700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3462000 0! #3462500 1! #3462600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3462700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3463000 0! #3463500 1! #3463600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3463700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3464000 0! #3464500 1! #3464600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3464700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3465000 0! #3465500 1! #3465600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3465700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3466000 0! #3466500 1! #3466600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3466700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3467000 0! #3467500 1! #3467600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3467700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3468000 0! #3468500 1! #3468600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3468700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3469000 0! #3469500 1! #3469600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3469700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3470000 0! #3470500 1! #3470600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3470700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3471000 0! #3471500 1! #3471600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3471700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3472000 0! #3472500 1! #3472600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3472700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3473000 0! #3473500 1! #3473600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3473700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3474000 0! #3474500 1! #3474600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3474700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3475000 0! #3475500 1! #3475600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3475700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3476000 0! #3476500 1! #3476600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3476700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3477000 0! #3477500 1! #3477600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3477700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3478000 0! #3478500 1! #3478600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3478700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3479000 0! #3479500 1! #3479600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3479700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3480000 0! #3480500 1! #3480600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3480700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3481000 0! #3481500 1! #3481600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3481700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3482000 0! #3482500 1! #3482600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3482700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3483000 0! #3483500 1! #3483600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3483700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3484000 0! #3484500 1! #3484600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3484700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3485000 0! #3485500 1! #3485600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3485700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3486000 0! #3486500 1! #3486600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3486700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3487000 0! #3487500 1! #3487600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3487700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3488000 0! #3488500 1! #3488600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3488700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3489000 0! #3489500 1! #3489600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3489700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3490000 0! #3490500 1! #3490600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3490700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3491000 0! #3491500 1! #3491600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3491700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3492000 0! #3492500 1! #3492600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3492700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3493000 0! #3493500 1! #3493600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3493700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3494000 0! #3494500 1! #3494600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3494700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3495000 0! #3495500 1! #3495600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3495700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3496000 0! #3496500 1! #3496600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #3496700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H b100 g #3497000 0! #3497500 1! #3497600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3497700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3498000 0! #3498500 1! #3498600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3498700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3499000 0! #3499500 1! #3499600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3499700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3500000 0! #3500500 1! #3500600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3500700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3501000 0! #3501500 1! #3501600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3501700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3502000 0! #3502500 1! #3502600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3502700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3503000 0! #3503500 1! #3503600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3503700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3504000 0! #3504500 1! #3504600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3504700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3505000 0! #3505500 1! #3505600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3505700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3506000 0! #3506500 1! #3506600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3506700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3507000 0! #3507500 1! #3507600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3507700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3508000 0! #3508500 1! #3508600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3508700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3509000 0! #3509500 1! #3509600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3509700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3510000 0! #3510500 1! #3510600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3510700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3511000 0! #3511500 1! #3511600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3511700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3512000 0! #3512500 1! #3512600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3512700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3513000 0! #3513500 1! #3513600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3513700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3514000 0! #3514500 1! #3514600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3514700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3515000 0! #3515500 1! #3515600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3515700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3516000 0! #3516500 1! #3516600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3516700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3517000 0! #3517500 1! #3517600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3517700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3518000 0! #3518500 1! #3518600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3518700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3519000 0! #3519500 1! #3519600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3519700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3520000 0! #3520500 1! #3520600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3520700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3521000 0! #3521500 1! #3521600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3521700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3522000 0! #3522500 1! #3522600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3522700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3523000 0! #3523500 1! #3523600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3523700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3524000 0! #3524500 1! #3524600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3524700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3525000 0! #3525500 1! #3525600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3525700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3526000 0! #3526500 1! #3526600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3526700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3527000 0! #3527500 1! #3527600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3527700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3528000 0! #3528500 1! #3528600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3528700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3529000 0! #3529500 1! #3529600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3529700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3530000 0! #3530500 1! #3530600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3530700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3531000 0! #3531500 1! #3531600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3531700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3532000 0! #3532500 1! #3532600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3532700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3533000 0! #3533500 1! #3533600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3533700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3534000 0! #3534500 1! #3534600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3534700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3535000 0! #3535500 1! #3535600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3535700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3536000 0! #3536500 1! #3536600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3536700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3537000 0! #3537500 1! #3537600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3537700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3538000 0! #3538500 1! #3538600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3538700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3539000 0! #3539500 1! #3539600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3539700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3540000 0! #3540500 1! #3540600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3540700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3541000 0! #3541500 1! #3541600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3541700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3542000 0! #3542500 1! #3542600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3542700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3543000 0! #3543500 1! #3543600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3543700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3544000 0! #3544500 1! #3544600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3544700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3545000 0! #3545500 1! #3545600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3545700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3546000 0! #3546500 1! #3546600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3546700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3547000 0! #3547500 1! #3547600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3547700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3548000 0! #3548500 1! #3548600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3548700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3549000 0! #3549500 1! #3549600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3549700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3550000 0! #3550500 1! #3550600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3550700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3551000 0! #3551500 1! #3551600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3551700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3552000 0! #3552500 1! #3552600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3552700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3553000 0! #3553500 1! #3553600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3553700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3554000 0! #3554500 1! #3554600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3554700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3555000 0! #3555500 1! #3555600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3555700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3556000 0! #3556500 1! #3556600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3556700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3557000 0! #3557500 1! #3557600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3557700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3558000 0! #3558500 1! #3558600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3558700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3559000 0! #3559500 1! #3559600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3559700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3560000 0! #3560500 1! #3560600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3560700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3561000 0! #3561500 1! #3561600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3561700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3562000 0! #3562500 1! #3562600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3562700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3563000 0! #3563500 1! #3563600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3563700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3564000 0! #3564500 1! #3564600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3564700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3565000 0! #3565500 1! #3565600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3565700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3566000 0! #3566500 1! #3566600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3566700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3567000 0! #3567500 1! #3567600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3567700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3568000 0! #3568500 1! #3568600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3568700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3569000 0! #3569500 1! #3569600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3569700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3570000 0! #3570500 1! #3570600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3570700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3571000 0! #3571500 1! #3571600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3571700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3572000 0! #3572500 1! #3572600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3572700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3573000 0! #3573500 1! #3573600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3573700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3574000 0! #3574500 1! #3574600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3574700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3575000 0! #3575500 1! #3575600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3575700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3576000 0! #3576500 1! #3576600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3576700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3577000 0! #3577500 1! #3577600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3577700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3578000 0! #3578500 1! #3578600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3578700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3579000 0! #3579500 1! #3579600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3579700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3580000 0! #3580500 1! #3580600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3580700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3581000 0! #3581500 1! #3581600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3581700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3582000 0! #3582500 1! #3582600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3582700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3583000 0! #3583500 1! #3583600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3583700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3584000 0! #3584500 1! #3584600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3584700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3585000 0! #3585500 1! #3585600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3585700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3586000 0! #3586500 1! #3586600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3586700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3587000 0! #3587500 1! #3587600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3587700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3588000 0! #3588500 1! #3588600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3588700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3589000 0! #3589500 1! #3589600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3589700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3590000 0! #3590500 1! #3590600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3590700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3591000 0! #3591500 1! #3591600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3591700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3592000 0! #3592500 1! #3592600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3592700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3593000 0! #3593500 1! #3593600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3593700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3594000 0! #3594500 1! #3594600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3594700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3595000 0! #3595500 1! #3595600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3595700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3596000 0! #3596500 1! #3596600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3596700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3597000 0! #3597500 1! #3597600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3597700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3598000 0! #3598500 1! #3598600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #3598700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3599000 0! #3599500 1! #3599600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3599700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3600000 0! #3600500 1! #3600600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3600700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3601000 0! #3601500 1! #3601600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3601700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3602000 0! #3602500 1! #3602600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3602700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3603000 0! #3603500 1! #3603600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3603700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3604000 0! #3604500 1! #3604600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3604700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3605000 0! #3605500 1! #3605600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3605700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3606000 0! #3606500 1! #3606600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3606700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3607000 0! #3607500 1! #3607600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3607700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3608000 0! #3608500 1! #3608600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3608700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3609000 0! #3609500 1! #3609600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3609700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3610000 0! #3610500 1! #3610600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3610700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3611000 0! #3611500 1! #3611600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3611700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3612000 0! #3612500 1! #3612600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3612700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3613000 0! #3613500 1! #3613600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3613700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3614000 0! #3614500 1! #3614600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3614700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3615000 0! #3615500 1! #3615600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3615700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3616000 0! #3616500 1! #3616600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3616700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3617000 0! #3617500 1! #3617600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3617700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3618000 0! #3618500 1! #3618600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3618700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3619000 0! #3619500 1! #3619600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3619700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3620000 0! #3620500 1! #3620600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3620700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3621000 0! #3621500 1! #3621600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3621700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3622000 0! #3622500 1! #3622600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3622700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3623000 0! #3623500 1! #3623600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3623700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3624000 0! #3624500 1! #3624600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3624700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3625000 0! #3625500 1! #3625600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3625700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3626000 0! #3626500 1! #3626600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3626700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3627000 0! #3627500 1! #3627600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3627700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3628000 0! #3628500 1! #3628600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3628700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3629000 0! #3629500 1! #3629600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3629700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3630000 0! #3630500 1! #3630600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3630700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3631000 0! #3631500 1! #3631600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3631700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3632000 0! #3632500 1! #3632600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3632700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3633000 0! #3633500 1! #3633600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3633700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3634000 0! #3634500 1! #3634600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3634700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3635000 0! #3635500 1! #3635600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3635700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3636000 0! #3636500 1! #3636600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3636700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3637000 0! #3637500 1! #3637600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3637700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3638000 0! #3638500 1! #3638600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3638700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3639000 0! #3639500 1! #3639600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3639700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3640000 0! #3640500 1! #3640600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3640700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3641000 0! #3641500 1! #3641600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3641700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3642000 0! #3642500 1! #3642600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3642700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3643000 0! #3643500 1! #3643600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3643700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3644000 0! #3644500 1! #3644600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3644700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3645000 0! #3645500 1! #3645600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3645700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3646000 0! #3646500 1! #3646600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3646700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3647000 0! #3647500 1! #3647600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3647700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3648000 0! #3648500 1! #3648600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3648700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3649000 0! #3649500 1! #3649600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3649700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3650000 0! #3650500 1! #3650600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3650700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3651000 0! #3651500 1! #3651600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3651700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3652000 0! #3652500 1! #3652600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3652700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3653000 0! #3653500 1! #3653600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3653700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3654000 0! #3654500 1! #3654600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3654700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3655000 0! #3655500 1! #3655600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3655700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3656000 0! #3656500 1! #3656600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3656700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3657000 0! #3657500 1! #3657600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3657700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3658000 0! #3658500 1! #3658600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3658700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3659000 0! #3659500 1! #3659600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3659700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3660000 0! #3660500 1! #3660600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3660700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3661000 0! #3661500 1! #3661600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3661700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3662000 0! #3662500 1! #3662600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3662700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3663000 0! #3663500 1! #3663600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3663700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3664000 0! #3664500 1! #3664600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3664700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3665000 0! #3665500 1! #3665600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3665700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3666000 0! #3666500 1! #3666600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3666700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3667000 0! #3667500 1! #3667600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3667700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3668000 0! #3668500 1! #3668600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3668700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3669000 0! #3669500 1! #3669600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3669700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3670000 0! #3670500 1! #3670600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3670700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3671000 0! #3671500 1! #3671600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3671700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3672000 0! #3672500 1! #3672600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3672700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3673000 0! #3673500 1! #3673600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3673700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3674000 0! #3674500 1! #3674600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3674700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3675000 0! #3675500 1! #3675600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3675700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3676000 0! #3676500 1! #3676600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3676700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3677000 0! #3677500 1! #3677600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3677700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3678000 0! #3678500 1! #3678600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3678700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3679000 0! #3679500 1! #3679600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3679700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3680000 0! #3680500 1! #3680600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3680700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3681000 0! #3681500 1! #3681600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3681700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3682000 0! #3682500 1! #3682600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3682700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3683000 0! #3683500 1! #3683600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3683700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3684000 0! #3684500 1! #3684600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3684700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3685000 0! #3685500 1! #3685600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3685700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3686000 0! #3686500 1! #3686600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3686700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3687000 0! #3687500 1! #3687600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3687700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3688000 0! #3688500 1! #3688600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3688700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3689000 0! #3689500 1! #3689600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3689700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3690000 0! #3690500 1! #3690600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3690700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3691000 0! #3691500 1! #3691600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3691700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3692000 0! #3692500 1! #3692600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3692700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3693000 0! #3693500 1! #3693600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3693700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3694000 0! #3694500 1! #3694600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3694700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3695000 0! #3695500 1! #3695600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3695700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3696000 0! #3696500 1! #3696600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3696700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3697000 0! #3697500 1! #3697600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3697700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3698000 0! #3698500 1! #3698600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3698700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3699000 0! #3699500 1! #3699600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3699700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3700000 0! #3700500 1! #3700600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3700700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3701000 0! #3701500 1! #3701600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3701700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3702000 0! #3702500 1! #3702600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3702700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3703000 0! #3703500 1! #3703600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3703700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3704000 0! #3704500 1! #3704600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3704700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3705000 0! #3705500 1! #3705600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3705700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3706000 0! #3706500 1! #3706600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3706700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3707000 0! #3707500 1! #3707600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3707700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3708000 0! #3708500 1! #3708600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3708700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3709000 0! #3709500 1! #3709600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3709700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3710000 0! #3710500 1! #3710600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3710700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3711000 0! #3711500 1! #3711600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3711700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3712000 0! #3712500 1! #3712600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3712700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3713000 0! #3713500 1! #3713600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3713700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3714000 0! #3714500 1! #3714600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3714700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3715000 0! #3715500 1! #3715600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3715700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3716000 0! #3716500 1! #3716600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3716700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3717000 0! #3717500 1! #3717600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3717700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3718000 0! #3718500 1! #3718600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3718700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3719000 0! #3719500 1! #3719600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3719700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3720000 0! #3720500 1! #3720600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3720700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3721000 0! #3721500 1! #3721600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3721700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3722000 0! #3722500 1! #3722600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3722700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3723000 0! #3723500 1! #3723600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3723700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3724000 0! #3724500 1! #3724600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3724700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3725000 0! #3725500 1! #3725600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3725700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3726000 0! #3726500 1! #3726600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3726700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3727000 0! #3727500 1! #3727600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3727700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3728000 0! #3728500 1! #3728600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3728700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3729000 0! #3729500 1! #3729600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3729700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3730000 0! #3730500 1! #3730600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3730700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3731000 0! #3731500 1! #3731600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3731700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3732000 0! #3732500 1! #3732600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3732700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3733000 0! #3733500 1! #3733600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3733700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3734000 0! #3734500 1! #3734600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3734700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3735000 0! #3735500 1! #3735600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3735700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3736000 0! #3736500 1! #3736600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3736700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3737000 0! #3737500 1! #3737600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3737700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3738000 0! #3738500 1! #3738600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3738700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3739000 0! #3739500 1! #3739600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3739700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3740000 0! #3740500 1! #3740600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3740700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3741000 0! #3741500 1! #3741600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3741700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3742000 0! #3742500 1! #3742600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3742700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3743000 0! #3743500 1! #3743600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3743700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3744000 0! #3744500 1! #3744600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3744700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3745000 0! #3745500 1! #3745600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3745700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3746000 0! #3746500 1! #3746600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3746700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3747000 0! #3747500 1! #3747600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3747700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3748000 0! #3748500 1! #3748600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3748700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3749000 0! #3749500 1! #3749600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3749700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3750000 0! #3750500 1! #3750600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3750700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3751000 0! #3751500 1! #3751600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #3751700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H b11 g #3752000 0! #3752500 1! #3752600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3752700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3753000 0! #3753500 1! #3753600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3753700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3754000 0! #3754500 1! #3754600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3754700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3755000 0! #3755500 1! #3755600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3755700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3756000 0! #3756500 1! #3756600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3756700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3757000 0! #3757500 1! #3757600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3757700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3758000 0! #3758500 1! #3758600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3758700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3759000 0! #3759500 1! #3759600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3759700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3760000 0! #3760500 1! #3760600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3760700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3761000 0! #3761500 1! #3761600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3761700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3762000 0! #3762500 1! #3762600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3762700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3763000 0! #3763500 1! #3763600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3763700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3764000 0! #3764500 1! #3764600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3764700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3765000 0! #3765500 1! #3765600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3765700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3766000 0! #3766500 1! #3766600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3766700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3767000 0! #3767500 1! #3767600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3767700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3768000 0! #3768500 1! #3768600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3768700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3769000 0! #3769500 1! #3769600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3769700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3770000 0! #3770500 1! #3770600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3770700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3771000 0! #3771500 1! #3771600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3771700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3772000 0! #3772500 1! #3772600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3772700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3773000 0! #3773500 1! #3773600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3773700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3774000 0! #3774500 1! #3774600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3774700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3775000 0! #3775500 1! #3775600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3775700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3776000 0! #3776500 1! #3776600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3776700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3777000 0! #3777500 1! #3777600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3777700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3778000 0! #3778500 1! #3778600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3778700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3779000 0! #3779500 1! #3779600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3779700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3780000 0! #3780500 1! #3780600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3780700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3781000 0! #3781500 1! #3781600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3781700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3782000 0! #3782500 1! #3782600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3782700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3783000 0! #3783500 1! #3783600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3783700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3784000 0! #3784500 1! #3784600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3784700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3785000 0! #3785500 1! #3785600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3785700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3786000 0! #3786500 1! #3786600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3786700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3787000 0! #3787500 1! #3787600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3787700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3788000 0! #3788500 1! #3788600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3788700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3789000 0! #3789500 1! #3789600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3789700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3790000 0! #3790500 1! #3790600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3790700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3791000 0! #3791500 1! #3791600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3791700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3792000 0! #3792500 1! #3792600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3792700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3793000 0! #3793500 1! #3793600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3793700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3794000 0! #3794500 1! #3794600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3794700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3795000 0! #3795500 1! #3795600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3795700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3796000 0! #3796500 1! #3796600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3796700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3797000 0! #3797500 1! #3797600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3797700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3798000 0! #3798500 1! #3798600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3798700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3799000 0! #3799500 1! #3799600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3799700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3800000 0! #3800500 1! #3800600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3800700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3801000 0! #3801500 1! #3801600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3801700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3802000 0! #3802500 1! #3802600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3802700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3803000 0! #3803500 1! #3803600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3803700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3804000 0! #3804500 1! #3804600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3804700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3805000 0! #3805500 1! #3805600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3805700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3806000 0! #3806500 1! #3806600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3806700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3807000 0! #3807500 1! #3807600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3807700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3808000 0! #3808500 1! #3808600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3808700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3809000 0! #3809500 1! #3809600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3809700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3810000 0! #3810500 1! #3810600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3810700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3811000 0! #3811500 1! #3811600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3811700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3812000 0! #3812500 1! #3812600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3812700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3813000 0! #3813500 1! #3813600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3813700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3814000 0! #3814500 1! #3814600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3814700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3815000 0! #3815500 1! #3815600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3815700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3816000 0! #3816500 1! #3816600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3816700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3817000 0! #3817500 1! #3817600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3817700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3818000 0! #3818500 1! #3818600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3818700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3819000 0! #3819500 1! #3819600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3819700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3820000 0! #3820500 1! #3820600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3820700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3821000 0! #3821500 1! #3821600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3821700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3822000 0! #3822500 1! #3822600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3822700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3823000 0! #3823500 1! #3823600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3823700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3824000 0! #3824500 1! #3824600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3824700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3825000 0! #3825500 1! #3825600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3825700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3826000 0! #3826500 1! #3826600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3826700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3827000 0! #3827500 1! #3827600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3827700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3828000 0! #3828500 1! #3828600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3828700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3829000 0! #3829500 1! #3829600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3829700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3830000 0! #3830500 1! #3830600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3830700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3831000 0! #3831500 1! #3831600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3831700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3832000 0! #3832500 1! #3832600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3832700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3833000 0! #3833500 1! #3833600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3833700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3834000 0! #3834500 1! #3834600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3834700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3835000 0! #3835500 1! #3835600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3835700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3836000 0! #3836500 1! #3836600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3836700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3837000 0! #3837500 1! #3837600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3837700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3838000 0! #3838500 1! #3838600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3838700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3839000 0! #3839500 1! #3839600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3839700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3840000 0! #3840500 1! #3840600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3840700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3841000 0! #3841500 1! #3841600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3841700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3842000 0! #3842500 1! #3842600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3842700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3843000 0! #3843500 1! #3843600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3843700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3844000 0! #3844500 1! #3844600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3844700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3845000 0! #3845500 1! #3845600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3845700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3846000 0! #3846500 1! #3846600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3846700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3847000 0! #3847500 1! #3847600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3847700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3848000 0! #3848500 1! #3848600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3848700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3849000 0! #3849500 1! #3849600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3849700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3850000 0! #3850500 1! #3850600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3850700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3851000 0! #3851500 1! #3851600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3851700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3852000 0! #3852500 1! #3852600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3852700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3853000 0! #3853500 1! #3853600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #3853700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3854000 0! #3854500 1! #3854600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3854700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3855000 0! #3855500 1! #3855600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3855700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3856000 0! #3856500 1! #3856600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3856700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3857000 0! #3857500 1! #3857600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3857700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3858000 0! #3858500 1! #3858600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3858700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3859000 0! #3859500 1! #3859600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3859700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3860000 0! #3860500 1! #3860600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3860700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3861000 0! #3861500 1! #3861600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3861700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3862000 0! #3862500 1! #3862600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3862700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3863000 0! #3863500 1! #3863600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3863700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3864000 0! #3864500 1! #3864600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3864700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3865000 0! #3865500 1! #3865600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3865700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3866000 0! #3866500 1! #3866600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3866700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3867000 0! #3867500 1! #3867600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3867700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3868000 0! #3868500 1! #3868600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3868700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3869000 0! #3869500 1! #3869600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3869700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3870000 0! #3870500 1! #3870600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3870700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3871000 0! #3871500 1! #3871600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3871700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3872000 0! #3872500 1! #3872600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3872700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3873000 0! #3873500 1! #3873600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3873700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3874000 0! #3874500 1! #3874600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3874700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3875000 0! #3875500 1! #3875600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3875700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3876000 0! #3876500 1! #3876600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3876700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3877000 0! #3877500 1! #3877600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3877700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3878000 0! #3878500 1! #3878600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3878700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3879000 0! #3879500 1! #3879600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3879700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3880000 0! #3880500 1! #3880600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3880700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3881000 0! #3881500 1! #3881600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3881700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3882000 0! #3882500 1! #3882600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3882700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3883000 0! #3883500 1! #3883600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3883700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3884000 0! #3884500 1! #3884600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3884700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3885000 0! #3885500 1! #3885600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3885700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3886000 0! #3886500 1! #3886600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3886700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3887000 0! #3887500 1! #3887600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3887700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3888000 0! #3888500 1! #3888600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3888700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3889000 0! #3889500 1! #3889600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3889700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3890000 0! #3890500 1! #3890600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3890700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3891000 0! #3891500 1! #3891600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3891700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3892000 0! #3892500 1! #3892600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3892700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3893000 0! #3893500 1! #3893600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3893700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3894000 0! #3894500 1! #3894600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3894700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3895000 0! #3895500 1! #3895600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3895700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3896000 0! #3896500 1! #3896600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3896700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3897000 0! #3897500 1! #3897600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3897700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3898000 0! #3898500 1! #3898600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3898700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3899000 0! #3899500 1! #3899600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3899700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3900000 0! #3900500 1! #3900600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3900700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3901000 0! #3901500 1! #3901600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3901700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3902000 0! #3902500 1! #3902600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3902700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3903000 0! #3903500 1! #3903600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3903700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3904000 0! #3904500 1! #3904600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3904700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3905000 0! #3905500 1! #3905600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3905700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3906000 0! #3906500 1! #3906600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3906700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3907000 0! #3907500 1! #3907600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3907700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3908000 0! #3908500 1! #3908600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3908700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3909000 0! #3909500 1! #3909600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3909700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3910000 0! #3910500 1! #3910600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3910700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3911000 0! #3911500 1! #3911600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3911700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3912000 0! #3912500 1! #3912600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3912700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3913000 0! #3913500 1! #3913600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3913700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3914000 0! #3914500 1! #3914600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3914700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3915000 0! #3915500 1! #3915600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3915700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3916000 0! #3916500 1! #3916600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3916700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3917000 0! #3917500 1! #3917600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3917700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3918000 0! #3918500 1! #3918600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3918700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3919000 0! #3919500 1! #3919600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3919700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3920000 0! #3920500 1! #3920600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3920700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3921000 0! #3921500 1! #3921600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3921700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3922000 0! #3922500 1! #3922600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3922700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3923000 0! #3923500 1! #3923600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3923700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3924000 0! #3924500 1! #3924600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3924700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3925000 0! #3925500 1! #3925600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3925700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3926000 0! #3926500 1! #3926600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3926700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3927000 0! #3927500 1! #3927600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3927700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3928000 0! #3928500 1! #3928600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3928700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3929000 0! #3929500 1! #3929600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3929700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3930000 0! #3930500 1! #3930600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3930700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3931000 0! #3931500 1! #3931600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3931700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3932000 0! #3932500 1! #3932600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3932700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3933000 0! #3933500 1! #3933600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3933700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3934000 0! #3934500 1! #3934600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3934700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3935000 0! #3935500 1! #3935600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3935700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3936000 0! #3936500 1! #3936600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3936700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3937000 0! #3937500 1! #3937600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3937700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3938000 0! #3938500 1! #3938600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3938700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3939000 0! #3939500 1! #3939600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3939700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3940000 0! #3940500 1! #3940600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3940700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3941000 0! #3941500 1! #3941600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3941700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3942000 0! #3942500 1! #3942600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3942700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3943000 0! #3943500 1! #3943600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3943700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3944000 0! #3944500 1! #3944600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3944700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3945000 0! #3945500 1! #3945600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3945700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3946000 0! #3946500 1! #3946600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3946700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3947000 0! #3947500 1! #3947600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3947700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3948000 0! #3948500 1! #3948600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3948700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3949000 0! #3949500 1! #3949600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3949700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3950000 0! #3950500 1! #3950600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3950700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3951000 0! #3951500 1! #3951600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3951700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3952000 0! #3952500 1! #3952600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3952700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3953000 0! #3953500 1! #3953600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3953700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3954000 0! #3954500 1! #3954600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3954700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3955000 0! #3955500 1! #3955600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3955700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3956000 0! #3956500 1! #3956600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3956700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3957000 0! #3957500 1! #3957600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3957700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3958000 0! #3958500 1! #3958600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3958700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3959000 0! #3959500 1! #3959600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3959700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3960000 0! #3960500 1! #3960600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3960700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3961000 0! #3961500 1! #3961600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3961700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3962000 0! #3962500 1! #3962600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3962700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3963000 0! #3963500 1! #3963600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3963700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3964000 0! #3964500 1! #3964600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3964700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3965000 0! #3965500 1! #3965600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3965700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3966000 0! #3966500 1! #3966600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3966700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3967000 0! #3967500 1! #3967600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3967700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3968000 0! #3968500 1! #3968600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3968700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3969000 0! #3969500 1! #3969600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3969700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3970000 0! #3970500 1! #3970600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3970700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3971000 0! #3971500 1! #3971600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3971700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3972000 0! #3972500 1! #3972600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3972700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3973000 0! #3973500 1! #3973600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3973700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3974000 0! #3974500 1! #3974600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3974700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3975000 0! #3975500 1! #3975600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3975700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3976000 0! #3976500 1! #3976600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3976700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3977000 0! #3977500 1! #3977600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3977700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3978000 0! #3978500 1! #3978600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3978700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3979000 0! #3979500 1! #3979600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3979700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3980000 0! #3980500 1! #3980600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3980700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3981000 0! #3981500 1! #3981600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3981700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3982000 0! #3982500 1! #3982600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3982700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3983000 0! #3983500 1! #3983600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3983700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3984000 0! #3984500 1! #3984600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3984700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3985000 0! #3985500 1! #3985600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3985700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3986000 0! #3986500 1! #3986600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3986700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3987000 0! #3987500 1! #3987600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3987700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3988000 0! #3988500 1! #3988600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3988700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3989000 0! #3989500 1! #3989600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3989700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3990000 0! #3990500 1! #3990600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3990700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3991000 0! #3991500 1! #3991600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3991700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3992000 0! #3992500 1! #3992600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3992700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3993000 0! #3993500 1! #3993600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3993700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3994000 0! #3994500 1! #3994600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3994700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3995000 0! #3995500 1! #3995600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3995700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3996000 0! #3996500 1! #3996600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3996700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3997000 0! #3997500 1! #3997600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3997700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3998000 0! #3998500 1! #3998600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3998700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #3999000 0! #3999500 1! #3999600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #3999700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4000000 0! #4000500 1! #4000600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4000700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4001000 0! #4001500 1! #4001600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4001700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4002000 0! #4002500 1! #4002600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4002700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4003000 0! #4003500 1! #4003600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4003700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4004000 0! #4004500 1! #4004600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4004700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4005000 0! #4005500 1! #4005600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4005700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4006000 0! #4006500 1! #4006600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #4006700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H b10 g #4007000 0! #4007500 1! #4007600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4007700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4008000 0! #4008500 1! #4008600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4008700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4009000 0! #4009500 1! #4009600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4009700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4010000 0! #4010500 1! #4010600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4010700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4011000 0! #4011500 1! #4011600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4011700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4012000 0! #4012500 1! #4012600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4012700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4013000 0! #4013500 1! #4013600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4013700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4014000 0! #4014500 1! #4014600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4014700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4015000 0! #4015500 1! #4015600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4015700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4016000 0! #4016500 1! #4016600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4016700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4017000 0! #4017500 1! #4017600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4017700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4018000 0! #4018500 1! #4018600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4018700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4019000 0! #4019500 1! #4019600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4019700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4020000 0! #4020500 1! #4020600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4020700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4021000 0! #4021500 1! #4021600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4021700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4022000 0! #4022500 1! #4022600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4022700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4023000 0! #4023500 1! #4023600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4023700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4024000 0! #4024500 1! #4024600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4024700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4025000 0! #4025500 1! #4025600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4025700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4026000 0! #4026500 1! #4026600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4026700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4027000 0! #4027500 1! #4027600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4027700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4028000 0! #4028500 1! #4028600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4028700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4029000 0! #4029500 1! #4029600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4029700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4030000 0! #4030500 1! #4030600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4030700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4031000 0! #4031500 1! #4031600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4031700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4032000 0! #4032500 1! #4032600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4032700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4033000 0! #4033500 1! #4033600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4033700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4034000 0! #4034500 1! #4034600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4034700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4035000 0! #4035500 1! #4035600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4035700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4036000 0! #4036500 1! #4036600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4036700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4037000 0! #4037500 1! #4037600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4037700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4038000 0! #4038500 1! #4038600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4038700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4039000 0! #4039500 1! #4039600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4039700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4040000 0! #4040500 1! #4040600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4040700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4041000 0! #4041500 1! #4041600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4041700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4042000 0! #4042500 1! #4042600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4042700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4043000 0! #4043500 1! #4043600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4043700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4044000 0! #4044500 1! #4044600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4044700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4045000 0! #4045500 1! #4045600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4045700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4046000 0! #4046500 1! #4046600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4046700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4047000 0! #4047500 1! #4047600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4047700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4048000 0! #4048500 1! #4048600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4048700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4049000 0! #4049500 1! #4049600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4049700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4050000 0! #4050500 1! #4050600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4050700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4051000 0! #4051500 1! #4051600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4051700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4052000 0! #4052500 1! #4052600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4052700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4053000 0! #4053500 1! #4053600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4053700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4054000 0! #4054500 1! #4054600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4054700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4055000 0! #4055500 1! #4055600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4055700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4056000 0! #4056500 1! #4056600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4056700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4057000 0! #4057500 1! #4057600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4057700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4058000 0! #4058500 1! #4058600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4058700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4059000 0! #4059500 1! #4059600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4059700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4060000 0! #4060500 1! #4060600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4060700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4061000 0! #4061500 1! #4061600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4061700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4062000 0! #4062500 1! #4062600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4062700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4063000 0! #4063500 1! #4063600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4063700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4064000 0! #4064500 1! #4064600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4064700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4065000 0! #4065500 1! #4065600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4065700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4066000 0! #4066500 1! #4066600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4066700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4067000 0! #4067500 1! #4067600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4067700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4068000 0! #4068500 1! #4068600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4068700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4069000 0! #4069500 1! #4069600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4069700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4070000 0! #4070500 1! #4070600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4070700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4071000 0! #4071500 1! #4071600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4071700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4072000 0! #4072500 1! #4072600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4072700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4073000 0! #4073500 1! #4073600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4073700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4074000 0! #4074500 1! #4074600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4074700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4075000 0! #4075500 1! #4075600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4075700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4076000 0! #4076500 1! #4076600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4076700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4077000 0! #4077500 1! #4077600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4077700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4078000 0! #4078500 1! #4078600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4078700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4079000 0! #4079500 1! #4079600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4079700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4080000 0! #4080500 1! #4080600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4080700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4081000 0! #4081500 1! #4081600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4081700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4082000 0! #4082500 1! #4082600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4082700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4083000 0! #4083500 1! #4083600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4083700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4084000 0! #4084500 1! #4084600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4084700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4085000 0! #4085500 1! #4085600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4085700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4086000 0! #4086500 1! #4086600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4086700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4087000 0! #4087500 1! #4087600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4087700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4088000 0! #4088500 1! #4088600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4088700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4089000 0! #4089500 1! #4089600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4089700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4090000 0! #4090500 1! #4090600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4090700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4091000 0! #4091500 1! #4091600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4091700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4092000 0! #4092500 1! #4092600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4092700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4093000 0! #4093500 1! #4093600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4093700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4094000 0! #4094500 1! #4094600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4094700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4095000 0! #4095500 1! #4095600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4095700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4096000 0! #4096500 1! #4096600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4096700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4097000 0! #4097500 1! #4097600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4097700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4098000 0! #4098500 1! #4098600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4098700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4099000 0! #4099500 1! #4099600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4099700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4100000 0! #4100500 1! #4100600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4100700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4101000 0! #4101500 1! #4101600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4101700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4102000 0! #4102500 1! #4102600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4102700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4103000 0! #4103500 1! #4103600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4103700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4104000 0! #4104500 1! #4104600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4104700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4105000 0! #4105500 1! #4105600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4105700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4106000 0! #4106500 1! #4106600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4106700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4107000 0! #4107500 1! #4107600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4107700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4108000 0! #4108500 1! #4108600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #4108700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4109000 0! #4109500 1! #4109600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4109700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4110000 0! #4110500 1! #4110600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4110700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4111000 0! #4111500 1! #4111600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4111700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4112000 0! #4112500 1! #4112600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4112700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4113000 0! #4113500 1! #4113600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4113700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4114000 0! #4114500 1! #4114600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4114700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4115000 0! #4115500 1! #4115600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4115700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4116000 0! #4116500 1! #4116600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4116700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4117000 0! #4117500 1! #4117600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4117700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4118000 0! #4118500 1! #4118600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4118700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4119000 0! #4119500 1! #4119600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4119700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4120000 0! #4120500 1! #4120600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4120700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4121000 0! #4121500 1! #4121600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4121700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4122000 0! #4122500 1! #4122600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4122700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4123000 0! #4123500 1! #4123600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4123700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4124000 0! #4124500 1! #4124600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4124700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4125000 0! #4125500 1! #4125600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4125700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4126000 0! #4126500 1! #4126600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4126700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4127000 0! #4127500 1! #4127600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4127700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4128000 0! #4128500 1! #4128600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4128700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4129000 0! #4129500 1! #4129600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4129700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4130000 0! #4130500 1! #4130600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4130700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4131000 0! #4131500 1! #4131600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4131700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4132000 0! #4132500 1! #4132600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4132700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4133000 0! #4133500 1! #4133600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4133700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4134000 0! #4134500 1! #4134600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4134700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4135000 0! #4135500 1! #4135600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4135700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4136000 0! #4136500 1! #4136600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4136700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4137000 0! #4137500 1! #4137600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4137700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4138000 0! #4138500 1! #4138600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4138700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4139000 0! #4139500 1! #4139600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4139700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4140000 0! #4140500 1! #4140600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4140700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4141000 0! #4141500 1! #4141600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4141700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4142000 0! #4142500 1! #4142600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4142700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4143000 0! #4143500 1! #4143600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4143700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4144000 0! #4144500 1! #4144600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4144700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4145000 0! #4145500 1! #4145600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4145700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4146000 0! #4146500 1! #4146600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4146700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4147000 0! #4147500 1! #4147600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4147700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4148000 0! #4148500 1! #4148600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4148700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4149000 0! #4149500 1! #4149600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4149700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4150000 0! #4150500 1! #4150600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4150700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4151000 0! #4151500 1! #4151600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4151700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4152000 0! #4152500 1! #4152600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4152700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4153000 0! #4153500 1! #4153600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4153700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4154000 0! #4154500 1! #4154600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4154700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4155000 0! #4155500 1! #4155600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4155700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4156000 0! #4156500 1! #4156600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4156700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4157000 0! #4157500 1! #4157600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4157700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4158000 0! #4158500 1! #4158600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4158700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4159000 0! #4159500 1! #4159600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4159700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4160000 0! #4160500 1! #4160600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4160700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4161000 0! #4161500 1! #4161600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4161700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4162000 0! #4162500 1! #4162600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4162700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4163000 0! #4163500 1! #4163600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4163700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4164000 0! #4164500 1! #4164600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4164700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4165000 0! #4165500 1! #4165600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4165700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4166000 0! #4166500 1! #4166600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4166700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4167000 0! #4167500 1! #4167600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4167700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4168000 0! #4168500 1! #4168600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4168700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4169000 0! #4169500 1! #4169600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4169700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4170000 0! #4170500 1! #4170600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4170700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4171000 0! #4171500 1! #4171600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4171700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4172000 0! #4172500 1! #4172600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4172700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4173000 0! #4173500 1! #4173600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4173700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4174000 0! #4174500 1! #4174600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4174700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4175000 0! #4175500 1! #4175600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4175700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4176000 0! #4176500 1! #4176600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4176700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4177000 0! #4177500 1! #4177600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4177700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4178000 0! #4178500 1! #4178600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4178700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4179000 0! #4179500 1! #4179600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4179700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4180000 0! #4180500 1! #4180600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4180700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4181000 0! #4181500 1! #4181600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4181700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4182000 0! #4182500 1! #4182600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4182700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4183000 0! #4183500 1! #4183600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4183700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4184000 0! #4184500 1! #4184600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4184700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4185000 0! #4185500 1! #4185600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4185700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4186000 0! #4186500 1! #4186600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4186700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4187000 0! #4187500 1! #4187600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4187700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4188000 0! #4188500 1! #4188600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4188700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4189000 0! #4189500 1! #4189600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4189700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4190000 0! #4190500 1! #4190600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4190700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4191000 0! #4191500 1! #4191600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4191700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4192000 0! #4192500 1! #4192600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4192700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4193000 0! #4193500 1! #4193600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4193700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4194000 0! #4194500 1! #4194600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4194700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4195000 0! #4195500 1! #4195600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4195700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4196000 0! #4196500 1! #4196600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4196700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4197000 0! #4197500 1! #4197600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4197700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4198000 0! #4198500 1! #4198600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4198700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4199000 0! #4199500 1! #4199600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4199700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4200000 0! #4200500 1! #4200600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4200700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4201000 0! #4201500 1! #4201600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4201700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4202000 0! #4202500 1! #4202600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4202700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4203000 0! #4203500 1! #4203600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4203700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4204000 0! #4204500 1! #4204600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4204700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4205000 0! #4205500 1! #4205600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4205700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4206000 0! #4206500 1! #4206600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4206700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4207000 0! #4207500 1! #4207600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4207700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4208000 0! #4208500 1! #4208600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4208700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4209000 0! #4209500 1! #4209600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4209700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4210000 0! #4210500 1! #4210600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4210700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4211000 0! #4211500 1! #4211600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4211700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4212000 0! #4212500 1! #4212600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4212700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4213000 0! #4213500 1! #4213600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4213700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4214000 0! #4214500 1! #4214600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4214700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4215000 0! #4215500 1! #4215600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4215700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4216000 0! #4216500 1! #4216600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4216700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4217000 0! #4217500 1! #4217600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4217700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4218000 0! #4218500 1! #4218600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4218700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4219000 0! #4219500 1! #4219600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4219700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4220000 0! #4220500 1! #4220600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4220700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4221000 0! #4221500 1! #4221600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4221700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4222000 0! #4222500 1! #4222600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4222700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4223000 0! #4223500 1! #4223600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4223700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4224000 0! #4224500 1! #4224600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4224700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4225000 0! #4225500 1! #4225600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4225700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4226000 0! #4226500 1! #4226600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4226700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4227000 0! #4227500 1! #4227600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4227700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4228000 0! #4228500 1! #4228600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4228700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4229000 0! #4229500 1! #4229600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4229700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4230000 0! #4230500 1! #4230600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4230700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4231000 0! #4231500 1! #4231600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4231700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4232000 0! #4232500 1! #4232600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4232700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4233000 0! #4233500 1! #4233600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4233700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4234000 0! #4234500 1! #4234600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4234700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4235000 0! #4235500 1! #4235600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4235700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4236000 0! #4236500 1! #4236600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4236700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4237000 0! #4237500 1! #4237600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4237700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4238000 0! #4238500 1! #4238600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4238700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4239000 0! #4239500 1! #4239600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4239700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4240000 0! #4240500 1! #4240600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4240700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4241000 0! #4241500 1! #4241600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4241700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4242000 0! #4242500 1! #4242600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4242700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4243000 0! #4243500 1! #4243600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4243700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4244000 0! #4244500 1! #4244600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4244700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4245000 0! #4245500 1! #4245600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4245700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4246000 0! #4246500 1! #4246600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4246700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4247000 0! #4247500 1! #4247600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4247700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4248000 0! #4248500 1! #4248600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4248700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4249000 0! #4249500 1! #4249600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4249700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4250000 0! #4250500 1! #4250600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4250700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4251000 0! #4251500 1! #4251600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4251700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4252000 0! #4252500 1! #4252600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4252700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4253000 0! #4253500 1! #4253600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4253700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4254000 0! #4254500 1! #4254600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4254700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4255000 0! #4255500 1! #4255600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4255700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4256000 0! #4256500 1! #4256600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4256700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4257000 0! #4257500 1! #4257600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4257700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4258000 0! #4258500 1! #4258600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4258700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4259000 0! #4259500 1! #4259600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4259700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4260000 0! #4260500 1! #4260600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4260700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4261000 0! #4261500 1! #4261600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #4261700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H b1 g #4262000 0! #4262500 1! #4262600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4262700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4263000 0! #4263500 1! #4263600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4263700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4264000 0! #4264500 1! #4264600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4264700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4265000 0! #4265500 1! #4265600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4265700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4266000 0! #4266500 1! #4266600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4266700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4267000 0! #4267500 1! #4267600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4267700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4268000 0! #4268500 1! #4268600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4268700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4269000 0! #4269500 1! #4269600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4269700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4270000 0! #4270500 1! #4270600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4270700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4271000 0! #4271500 1! #4271600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4271700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4272000 0! #4272500 1! #4272600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4272700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4273000 0! #4273500 1! #4273600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4273700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4274000 0! #4274500 1! #4274600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4274700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4275000 0! #4275500 1! #4275600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4275700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4276000 0! #4276500 1! #4276600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4276700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4277000 0! #4277500 1! #4277600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4277700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4278000 0! #4278500 1! #4278600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4278700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4279000 0! #4279500 1! #4279600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4279700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4280000 0! #4280500 1! #4280600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4280700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4281000 0! #4281500 1! #4281600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4281700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4282000 0! #4282500 1! #4282600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4282700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4283000 0! #4283500 1! #4283600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4283700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4284000 0! #4284500 1! #4284600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4284700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4285000 0! #4285500 1! #4285600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4285700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4286000 0! #4286500 1! #4286600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4286700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4287000 0! #4287500 1! #4287600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4287700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4288000 0! #4288500 1! #4288600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4288700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4289000 0! #4289500 1! #4289600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4289700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4290000 0! #4290500 1! #4290600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4290700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4291000 0! #4291500 1! #4291600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4291700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4292000 0! #4292500 1! #4292600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4292700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4293000 0! #4293500 1! #4293600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4293700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4294000 0! #4294500 1! #4294600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4294700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4295000 0! #4295500 1! #4295600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4295700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4296000 0! #4296500 1! #4296600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4296700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4297000 0! #4297500 1! #4297600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4297700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4298000 0! #4298500 1! #4298600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4298700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4299000 0! #4299500 1! #4299600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4299700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4300000 0! #4300500 1! #4300600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4300700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4301000 0! #4301500 1! #4301600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4301700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4302000 0! #4302500 1! #4302600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4302700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4303000 0! #4303500 1! #4303600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4303700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4304000 0! #4304500 1! #4304600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4304700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4305000 0! #4305500 1! #4305600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4305700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4306000 0! #4306500 1! #4306600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4306700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4307000 0! #4307500 1! #4307600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4307700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4308000 0! #4308500 1! #4308600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4308700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4309000 0! #4309500 1! #4309600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4309700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4310000 0! #4310500 1! #4310600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4310700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4311000 0! #4311500 1! #4311600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4311700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4312000 0! #4312500 1! #4312600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4312700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4313000 0! #4313500 1! #4313600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4313700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4314000 0! #4314500 1! #4314600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4314700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4315000 0! #4315500 1! #4315600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4315700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4316000 0! #4316500 1! #4316600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4316700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4317000 0! #4317500 1! #4317600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4317700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4318000 0! #4318500 1! #4318600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4318700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4319000 0! #4319500 1! #4319600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4319700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4320000 0! #4320500 1! #4320600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4320700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4321000 0! #4321500 1! #4321600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4321700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4322000 0! #4322500 1! #4322600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4322700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4323000 0! #4323500 1! #4323600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4323700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4324000 0! #4324500 1! #4324600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4324700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4325000 0! #4325500 1! #4325600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4325700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4326000 0! #4326500 1! #4326600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4326700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4327000 0! #4327500 1! #4327600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4327700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4328000 0! #4328500 1! #4328600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4328700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4329000 0! #4329500 1! #4329600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4329700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4330000 0! #4330500 1! #4330600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4330700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4331000 0! #4331500 1! #4331600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4331700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4332000 0! #4332500 1! #4332600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4332700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4333000 0! #4333500 1! #4333600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4333700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4334000 0! #4334500 1! #4334600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4334700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4335000 0! #4335500 1! #4335600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4335700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4336000 0! #4336500 1! #4336600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4336700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4337000 0! #4337500 1! #4337600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4337700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4338000 0! #4338500 1! #4338600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4338700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4339000 0! #4339500 1! #4339600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4339700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4340000 0! #4340500 1! #4340600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4340700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4341000 0! #4341500 1! #4341600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4341700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4342000 0! #4342500 1! #4342600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4342700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4343000 0! #4343500 1! #4343600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4343700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4344000 0! #4344500 1! #4344600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4344700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4345000 0! #4345500 1! #4345600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4345700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4346000 0! #4346500 1! #4346600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4346700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4347000 0! #4347500 1! #4347600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4347700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4348000 0! #4348500 1! #4348600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4348700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4349000 0! #4349500 1! #4349600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4349700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4350000 0! #4350500 1! #4350600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4350700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4351000 0! #4351500 1! #4351600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4351700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4352000 0! #4352500 1! #4352600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4352700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4353000 0! #4353500 1! #4353600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4353700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4354000 0! #4354500 1! #4354600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4354700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4355000 0! #4355500 1! #4355600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4355700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4356000 0! #4356500 1! #4356600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4356700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4357000 0! #4357500 1! #4357600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4357700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4358000 0! #4358500 1! #4358600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4358700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4359000 0! #4359500 1! #4359600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4359700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4360000 0! #4360500 1! #4360600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4360700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4361000 0! #4361500 1! #4361600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4361700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4362000 0! #4362500 1! #4362600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4362700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4363000 0! #4363500 1! #4363600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #4363700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4364000 0! #4364500 1! #4364600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4364700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4365000 0! #4365500 1! #4365600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4365700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4366000 0! #4366500 1! #4366600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4366700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4367000 0! #4367500 1! #4367600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4367700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4368000 0! #4368500 1! #4368600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4368700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4369000 0! #4369500 1! #4369600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4369700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4370000 0! #4370500 1! #4370600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4370700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4371000 0! #4371500 1! #4371600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4371700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4372000 0! #4372500 1! #4372600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4372700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4373000 0! #4373500 1! #4373600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4373700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4374000 0! #4374500 1! #4374600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4374700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4375000 0! #4375500 1! #4375600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4375700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4376000 0! #4376500 1! #4376600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4376700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4377000 0! #4377500 1! #4377600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4377700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4378000 0! #4378500 1! #4378600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4378700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4379000 0! #4379500 1! #4379600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4379700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4380000 0! #4380500 1! #4380600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4380700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4381000 0! #4381500 1! #4381600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4381700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4382000 0! #4382500 1! #4382600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4382700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4383000 0! #4383500 1! #4383600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4383700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4384000 0! #4384500 1! #4384600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4384700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4385000 0! #4385500 1! #4385600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4385700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4386000 0! #4386500 1! #4386600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4386700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4387000 0! #4387500 1! #4387600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4387700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4388000 0! #4388500 1! #4388600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4388700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4389000 0! #4389500 1! #4389600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4389700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4390000 0! #4390500 1! #4390600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4390700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4391000 0! #4391500 1! #4391600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4391700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4392000 0! #4392500 1! #4392600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4392700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4393000 0! #4393500 1! #4393600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4393700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4394000 0! #4394500 1! #4394600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4394700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4395000 0! #4395500 1! #4395600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4395700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4396000 0! #4396500 1! #4396600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4396700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4397000 0! #4397500 1! #4397600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4397700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4398000 0! #4398500 1! #4398600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4398700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4399000 0! #4399500 1! #4399600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4399700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4400000 0! #4400500 1! #4400600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4400700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4401000 0! #4401500 1! #4401600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4401700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4402000 0! #4402500 1! #4402600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4402700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4403000 0! #4403500 1! #4403600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4403700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4404000 0! #4404500 1! #4404600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4404700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4405000 0! #4405500 1! #4405600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4405700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4406000 0! #4406500 1! #4406600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4406700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4407000 0! #4407500 1! #4407600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4407700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4408000 0! #4408500 1! #4408600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4408700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4409000 0! #4409500 1! #4409600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4409700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4410000 0! #4410500 1! #4410600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4410700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4411000 0! #4411500 1! #4411600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4411700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4412000 0! #4412500 1! #4412600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4412700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4413000 0! #4413500 1! #4413600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4413700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4414000 0! #4414500 1! #4414600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4414700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4415000 0! #4415500 1! #4415600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4415700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4416000 0! #4416500 1! #4416600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4416700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4417000 0! #4417500 1! #4417600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4417700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4418000 0! #4418500 1! #4418600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4418700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4419000 0! #4419500 1! #4419600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4419700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4420000 0! #4420500 1! #4420600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4420700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4421000 0! #4421500 1! #4421600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4421700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4422000 0! #4422500 1! #4422600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4422700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4423000 0! #4423500 1! #4423600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4423700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4424000 0! #4424500 1! #4424600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4424700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4425000 0! #4425500 1! #4425600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4425700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4426000 0! #4426500 1! #4426600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4426700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4427000 0! #4427500 1! #4427600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4427700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4428000 0! #4428500 1! #4428600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4428700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4429000 0! #4429500 1! #4429600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4429700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4430000 0! #4430500 1! #4430600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4430700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4431000 0! #4431500 1! #4431600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4431700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4432000 0! #4432500 1! #4432600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4432700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4433000 0! #4433500 1! #4433600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4433700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4434000 0! #4434500 1! #4434600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4434700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4435000 0! #4435500 1! #4435600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4435700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4436000 0! #4436500 1! #4436600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4436700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4437000 0! #4437500 1! #4437600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4437700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4438000 0! #4438500 1! #4438600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4438700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4439000 0! #4439500 1! #4439600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4439700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4440000 0! #4440500 1! #4440600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4440700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4441000 0! #4441500 1! #4441600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4441700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4442000 0! #4442500 1! #4442600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4442700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4443000 0! #4443500 1! #4443600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4443700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4444000 0! #4444500 1! #4444600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4444700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4445000 0! #4445500 1! #4445600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4445700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4446000 0! #4446500 1! #4446600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4446700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4447000 0! #4447500 1! #4447600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4447700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4448000 0! #4448500 1! #4448600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4448700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4449000 0! #4449500 1! #4449600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4449700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4450000 0! #4450500 1! #4450600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4450700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4451000 0! #4451500 1! #4451600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4451700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4452000 0! #4452500 1! #4452600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4452700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4453000 0! #4453500 1! #4453600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4453700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4454000 0! #4454500 1! #4454600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4454700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4455000 0! #4455500 1! #4455600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4455700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4456000 0! #4456500 1! #4456600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4456700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4457000 0! #4457500 1! #4457600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4457700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4458000 0! #4458500 1! #4458600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4458700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4459000 0! #4459500 1! #4459600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4459700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4460000 0! #4460500 1! #4460600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4460700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4461000 0! #4461500 1! #4461600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4461700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4462000 0! #4462500 1! #4462600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4462700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4463000 0! #4463500 1! #4463600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4463700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4464000 0! #4464500 1! #4464600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4464700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4465000 0! #4465500 1! #4465600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1Q 1O #4465700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4466000 0! #4466500 1! #4466600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4466700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4467000 0! #4467500 1! #4467600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4467700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4468000 0! #4468500 1! #4468600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4468700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4469000 0! #4469500 1! #4469600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4469700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4470000 0! #4470500 1! #4470600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4470700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4471000 0! #4471500 1! #4471600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4471700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4472000 0! #4472500 1! #4472600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4472700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4473000 0! #4473500 1! #4473600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4473700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4474000 0! #4474500 1! #4474600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4474700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4475000 0! #4475500 1! #4475600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4475700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4476000 0! #4476500 1! #4476600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4476700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4477000 0! #4477500 1! #4477600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4477700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4478000 0! #4478500 1! #4478600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4478700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4479000 0! #4479500 1! #4479600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4479700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4480000 0! #4480500 1! #4480600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4480700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4481000 0! #4481500 1! #4481600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4481700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4482000 0! #4482500 1! #4482600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4482700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4483000 0! #4483500 1! #4483600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4483700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4484000 0! #4484500 1! #4484600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4484700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4485000 0! #4485500 1! #4485600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4485700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4486000 0! #4486500 1! #4486600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4486700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4487000 0! #4487500 1! #4487600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4487700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4488000 0! #4488500 1! #4488600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4488700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4489000 0! #4489500 1! #4489600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4489700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4490000 0! #4490500 1! #4490600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4490700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4491000 0! #4491500 1! #4491600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4491700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4492000 0! #4492500 1! #4492600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4492700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4493000 0! #4493500 1! #4493600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4493700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4494000 0! #4494500 1! #4494600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4494700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4495000 0! #4495500 1! #4495600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4495700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4496000 0! #4496500 1! #4496600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4496700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4497000 0! #4497500 1! #4497600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4497700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4498000 0! #4498500 1! #4498600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4498700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4499000 0! #4499500 1! #4499600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4499700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4500000 0! #4500500 1! #4500600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4500700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4501000 0! #4501500 1! #4501600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4501700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4502000 0! #4502500 1! #4502600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4502700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4503000 0! #4503500 1! #4503600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4503700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4504000 0! #4504500 1! #4504600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4504700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4505000 0! #4505500 1! #4505600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4505700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4506000 0! #4506500 1! #4506600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4506700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4507000 0! #4507500 1! #4507600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4507700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4508000 0! #4508500 1! #4508600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4508700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4509000 0! #4509500 1! #4509600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4509700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4510000 0! #4510500 1! #4510600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4510700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4511000 0! #4511500 1! #4511600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4511700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4512000 0! #4512500 1! #4512600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4512700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4513000 0! #4513500 1! #4513600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4513700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4514000 0! #4514500 1! #4514600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4514700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4515000 0! #4515500 1! #4515600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4515700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4516000 0! #4516500 1! #4516600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #4516700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H b0 g b1 c 1h #4517000 0! #4517500 1! #4517600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4517700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4518000 0! #4518500 1! #4518600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4518700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4519000 0! #4519500 1! #4519600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4519700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4520000 0! #4520500 1! #4520600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4520700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4521000 0! #4521500 1! #4521600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4521700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4522000 0! #4522500 1! #4522600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4522700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4523000 0! #4523500 1! #4523600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4523700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4524000 0! #4524500 1! #4524600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4524700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4525000 0! #4525500 1! #4525600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4525700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4526000 0! #4526500 1! #4526600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4526700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4527000 0! #4527500 1! #4527600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4527700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4528000 0! #4528500 1! #4528600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4528700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4529000 0! #4529500 1! #4529600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4529700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4530000 0! #4530500 1! #4530600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4530700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4531000 0! #4531500 1! #4531600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4531700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4532000 0! #4532500 1! #4532600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4532700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4533000 0! #4533500 1! #4533600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4533700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4534000 0! #4534500 1! #4534600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4534700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4535000 0! #4535500 1! #4535600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4535700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4536000 0! #4536500 1! #4536600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4536700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4537000 0! #4537500 1! #4537600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4537700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4538000 0! #4538500 1! #4538600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4538700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4539000 0! #4539500 1! #4539600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4539700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4540000 0! #4540500 1! #4540600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4540700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4541000 0! #4541500 1! #4541600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4541700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4542000 0! #4542500 1! #4542600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4542700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4543000 0! #4543500 1! #4543600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4543700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4544000 0! #4544500 1! #4544600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4544700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4545000 0! #4545500 1! #4545600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4545700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4546000 0! #4546500 1! #4546600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4546700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4547000 0! #4547500 1! #4547600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4547700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4548000 0! #4548500 1! #4548600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4548700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4549000 0! #4549500 1! #4549600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4549700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4550000 0! #4550500 1! #4550600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4550700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4551000 0! #4551500 1! #4551600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4551700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4552000 0! #4552500 1! #4552600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4552700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4553000 0! #4553500 1! #4553600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4553700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4554000 0! #4554500 1! #4554600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4554700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4555000 0! #4555500 1! #4555600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4555700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4556000 0! #4556500 1! #4556600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4556700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4557000 0! #4557500 1! #4557600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4557700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4558000 0! #4558500 1! #4558600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4558700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4559000 0! #4559500 1! #4559600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4559700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4560000 0! #4560500 1! #4560600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4560700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4561000 0! #4561500 1! #4561600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4561700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4562000 0! #4562500 1! #4562600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4562700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4563000 0! #4563500 1! #4563600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4563700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4564000 0! #4564500 1! #4564600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4564700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4565000 0! #4565500 1! #4565600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4565700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4566000 0! #4566500 1! #4566600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4566700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4567000 0! #4567500 1! #4567600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4567700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4568000 0! #4568500 1! #4568600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4568700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4569000 0! #4569500 1! #4569600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4569700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4570000 0! #4570500 1! #4570600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4570700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4571000 0! #4571500 1! #4571600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4571700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4572000 0! #4572500 1! #4572600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4572700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4573000 0! #4573500 1! #4573600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4573700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4574000 0! #4574500 1! #4574600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4574700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4575000 0! #4575500 1! #4575600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4575700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4576000 0! #4576500 1! #4576600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4576700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4577000 0! #4577500 1! #4577600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4577700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4578000 0! #4578500 1! #4578600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4578700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4579000 0! #4579500 1! #4579600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4579700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4580000 0! #4580500 1! #4580600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4580700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4581000 0! #4581500 1! #4581600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4581700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4582000 0! #4582500 1! #4582600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4582700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4583000 0! #4583500 1! #4583600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4583700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4584000 0! #4584500 1! #4584600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4584700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4585000 0! #4585500 1! #4585600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4585700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4586000 0! #4586500 1! #4586600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4586700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4587000 0! #4587500 1! #4587600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4587700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4588000 0! #4588500 1! #4588600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4588700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4589000 0! #4589500 1! #4589600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4589700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4590000 0! #4590500 1! #4590600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4590700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4591000 0! #4591500 1! #4591600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4591700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4592000 0! #4592500 1! #4592600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4592700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4593000 0! #4593500 1! #4593600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4593700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4594000 0! #4594500 1! #4594600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4594700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4595000 0! #4595500 1! #4595600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4595700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4596000 0! #4596500 1! #4596600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4596700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4597000 0! #4597500 1! #4597600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4597700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4598000 0! #4598500 1! #4598600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4598700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4599000 0! #4599500 1! #4599600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4599700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4600000 0! #4600500 1! #4600600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4600700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4601000 0! #4601500 1! #4601600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4601700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4602000 0! #4602500 1! #4602600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4602700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4603000 0! #4603500 1! #4603600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4603700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4604000 0! #4604500 1! #4604600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4604700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4605000 0! #4605500 1! #4605600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4605700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4606000 0! #4606500 1! #4606600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4606700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4607000 0! #4607500 1! #4607600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4607700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4608000 0! #4608500 1! #4608600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4608700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4609000 0! #4609500 1! #4609600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4609700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4610000 0! #4610500 1! #4610600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4610700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4611000 0! #4611500 1! #4611600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4611700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4612000 0! #4612500 1! #4612600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4612700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4613000 0! #4613500 1! #4613600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4613700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4614000 0! #4614500 1! #4614600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4614700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4615000 0! #4615500 1! #4615600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4615700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4616000 0! #4616500 1! #4616600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4616700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4617000 0! #4617500 1! #4617600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4617700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4618000 0! #4618500 1! #4618600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #4618700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H b11 q b1 ] 0j 0O #4619000 0! #4619500 1! #4619600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4619700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4620000 0! #4620500 1! #4620600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4620700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4621000 0! #4621500 1! #4621600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4621700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4622000 0! #4622500 1! #4622600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4622700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4623000 0! #4623500 1! #4623600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4623700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4624000 0! #4624500 1! #4624600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4624700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4625000 0! #4625500 1! #4625600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4625700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4626000 0! #4626500 1! #4626600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4626700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4627000 0! #4627500 1! #4627600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4627700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4628000 0! #4628500 1! #4628600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4628700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4629000 0! #4629500 1! #4629600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4629700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4630000 0! #4630500 1! #4630600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4630700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4631000 0! #4631500 1! #4631600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4631700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4632000 0! #4632500 1! #4632600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4632700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4633000 0! #4633500 1! #4633600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4633700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4634000 0! #4634500 1! #4634600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4634700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4635000 0! #4635500 1! #4635600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4635700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4636000 0! #4636500 1! #4636600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4636700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4637000 0! #4637500 1! #4637600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4637700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4638000 0! #4638500 1! #4638600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4638700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4639000 0! #4639500 1! #4639600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4639700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4640000 0! #4640500 1! #4640600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4640700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4641000 0! #4641500 1! #4641600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4641700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4642000 0! #4642500 1! #4642600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4642700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4643000 0! #4643500 1! #4643600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4643700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4644000 0! #4644500 1! #4644600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4644700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4645000 0! #4645500 1! #4645600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4645700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4646000 0! #4646500 1! #4646600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4646700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4647000 0! #4647500 1! #4647600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4647700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4648000 0! #4648500 1! #4648600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4648700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4649000 0! #4649500 1! #4649600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4649700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4650000 0! #4650500 1! #4650600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4650700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4651000 0! #4651500 1! #4651600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4651700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4652000 0! #4652500 1! #4652600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4652700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4653000 0! #4653500 1! #4653600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4653700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4654000 0! #4654500 1! #4654600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4654700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4655000 0! #4655500 1! #4655600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4655700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4656000 0! #4656500 1! #4656600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4656700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4657000 0! #4657500 1! #4657600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4657700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4658000 0! #4658500 1! #4658600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4658700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4659000 0! #4659500 1! #4659600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4659700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4660000 0! #4660500 1! #4660600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4660700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4661000 0! #4661500 1! #4661600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4661700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4662000 0! #4662500 1! #4662600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4662700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4663000 0! #4663500 1! #4663600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4663700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4664000 0! #4664500 1! #4664600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4664700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4665000 0! #4665500 1! #4665600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4665700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4666000 0! #4666500 1! #4666600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4666700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4667000 0! #4667500 1! #4667600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4667700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4668000 0! #4668500 1! #4668600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4668700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4669000 0! #4669500 1! #4669600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4669700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4670000 0! #4670500 1! #4670600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4670700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4671000 0! #4671500 1! #4671600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4671700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4672000 0! #4672500 1! #4672600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4672700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4673000 0! #4673500 1! #4673600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4673700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4674000 0! #4674500 1! #4674600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4674700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4675000 0! #4675500 1! #4675600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4675700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4676000 0! #4676500 1! #4676600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4676700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4677000 0! #4677500 1! #4677600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4677700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4678000 0! #4678500 1! #4678600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4678700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4679000 0! #4679500 1! #4679600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4679700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4680000 0! #4680500 1! #4680600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4680700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4681000 0! #4681500 1! #4681600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4681700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4682000 0! #4682500 1! #4682600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4682700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4683000 0! #4683500 1! #4683600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4683700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4684000 0! #4684500 1! #4684600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4684700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4685000 0! #4685500 1! #4685600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4685700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4686000 0! #4686500 1! #4686600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4686700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4687000 0! #4687500 1! #4687600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4687700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4688000 0! #4688500 1! #4688600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4688700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4689000 0! #4689500 1! #4689600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4689700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4690000 0! #4690500 1! #4690600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4690700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4691000 0! #4691500 1! #4691600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4691700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4692000 0! #4692500 1! #4692600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4692700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4693000 0! #4693500 1! #4693600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4693700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4694000 0! #4694500 1! #4694600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4694700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4695000 0! #4695500 1! #4695600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4695700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4696000 0! #4696500 1! #4696600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4696700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4697000 0! #4697500 1! #4697600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4697700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4698000 0! #4698500 1! #4698600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4698700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4699000 0! #4699500 1! #4699600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4699700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4700000 0! #4700500 1! #4700600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4700700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4701000 0! #4701500 1! #4701600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4701700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4702000 0! #4702500 1! #4702600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4702700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4703000 0! #4703500 1! #4703600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4703700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4704000 0! #4704500 1! #4704600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4704700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4705000 0! #4705500 1! #4705600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4705700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4706000 0! #4706500 1! #4706600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4706700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4707000 0! #4707500 1! #4707600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4707700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4708000 0! #4708500 1! #4708600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4708700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4709000 0! #4709500 1! #4709600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4709700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4710000 0! #4710500 1! #4710600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4710700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4711000 0! #4711500 1! #4711600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4711700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4712000 0! #4712500 1! #4712600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4712700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4713000 0! #4713500 1! #4713600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4713700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4714000 0! #4714500 1! #4714600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4714700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4715000 0! #4715500 1! #4715600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4715700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4716000 0! #4716500 1! #4716600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4716700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4717000 0! #4717500 1! #4717600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4717700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4718000 0! #4718500 1! #4718600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4718700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4719000 0! #4719500 1! #4719600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4719700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4720000 0! #4720500 1! #4720600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4720700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4721000 0! #4721500 1! #4721600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4721700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4722000 0! #4722500 1! #4722600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4722700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4723000 0! #4723500 1! #4723600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4723700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4724000 0! #4724500 1! #4724600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4724700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4725000 0! #4725500 1! #4725600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4725700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4726000 0! #4726500 1! #4726600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4726700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4727000 0! #4727500 1! #4727600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4727700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4728000 0! #4728500 1! #4728600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4728700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4729000 0! #4729500 1! #4729600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4729700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4730000 0! #4730500 1! #4730600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4730700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4731000 0! #4731500 1! #4731600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4731700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4732000 0! #4732500 1! #4732600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4732700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4733000 0! #4733500 1! #4733600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4733700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4734000 0! #4734500 1! #4734600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4734700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4735000 0! #4735500 1! #4735600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4735700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4736000 0! #4736500 1! #4736600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4736700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4737000 0! #4737500 1! #4737600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4737700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4738000 0! #4738500 1! #4738600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4738700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4739000 0! #4739500 1! #4739600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4739700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4740000 0! #4740500 1! #4740600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4740700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4741000 0! #4741500 1! #4741600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4741700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4742000 0! #4742500 1! #4742600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4742700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4743000 0! #4743500 1! #4743600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4743700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4744000 0! #4744500 1! #4744600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4744700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4745000 0! #4745500 1! #4745600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4745700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4746000 0! #4746500 1! #4746600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4746700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4747000 0! #4747500 1! #4747600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4747700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4748000 0! #4748500 1! #4748600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4748700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4749000 0! #4749500 1! #4749600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4749700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4750000 0! #4750500 1! #4750600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4750700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4751000 0! #4751500 1! #4751600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4751700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4752000 0! #4752500 1! #4752600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4752700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4753000 0! #4753500 1! #4753600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4753700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4754000 0! #4754500 1! #4754600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4754700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4755000 0! #4755500 1! #4755600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4755700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4756000 0! #4756500 1! #4756600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4756700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4757000 0! #4757500 1! #4757600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4757700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4758000 0! #4758500 1! #4758600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4758700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4759000 0! #4759500 1! #4759600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4759700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4760000 0! #4760500 1! #4760600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4760700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4761000 0! #4761500 1! #4761600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4761700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4762000 0! #4762500 1! #4762600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4762700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4763000 0! #4763500 1! #4763600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4763700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4764000 0! #4764500 1! #4764600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4764700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4765000 0! #4765500 1! #4765600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4765700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4766000 0! #4766500 1! #4766600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4766700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4767000 0! #4767500 1! #4767600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4767700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4768000 0! #4768500 1! #4768600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4768700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4769000 0! #4769500 1! #4769600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4769700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4770000 0! #4770500 1! #4770600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4770700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4771000 0! #4771500 1! #4771600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #4771700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H b111 g b10 c 0h #4772000 0! #4772500 1! #4772600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4772700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4773000 0! #4773500 1! #4773600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4773700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4774000 0! #4774500 1! #4774600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4774700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4775000 0! #4775500 1! #4775600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4775700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4776000 0! #4776500 1! #4776600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4776700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4777000 0! #4777500 1! #4777600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4777700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4778000 0! #4778500 1! #4778600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4778700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4779000 0! #4779500 1! #4779600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4779700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4780000 0! #4780500 1! #4780600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4780700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4781000 0! #4781500 1! #4781600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4781700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4782000 0! #4782500 1! #4782600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4782700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4783000 0! #4783500 1! #4783600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4783700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4784000 0! #4784500 1! #4784600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4784700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4785000 0! #4785500 1! #4785600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4785700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4786000 0! #4786500 1! #4786600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4786700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4787000 0! #4787500 1! #4787600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4787700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4788000 0! #4788500 1! #4788600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4788700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4789000 0! #4789500 1! #4789600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4789700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4790000 0! #4790500 1! #4790600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4790700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4791000 0! #4791500 1! #4791600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4791700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4792000 0! #4792500 1! #4792600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4792700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4793000 0! #4793500 1! #4793600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4793700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4794000 0! #4794500 1! #4794600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4794700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4795000 0! #4795500 1! #4795600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4795700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4796000 0! #4796500 1! #4796600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4796700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4797000 0! #4797500 1! #4797600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4797700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4798000 0! #4798500 1! #4798600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4798700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4799000 0! #4799500 1! #4799600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4799700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4800000 0! #4800500 1! #4800600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4800700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4801000 0! #4801500 1! #4801600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4801700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4802000 0! #4802500 1! #4802600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4802700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4803000 0! #4803500 1! #4803600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4803700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4804000 0! #4804500 1! #4804600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4804700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4805000 0! #4805500 1! #4805600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4805700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4806000 0! #4806500 1! #4806600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4806700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4807000 0! #4807500 1! #4807600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4807700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4808000 0! #4808500 1! #4808600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4808700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4809000 0! #4809500 1! #4809600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4809700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4810000 0! #4810500 1! #4810600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4810700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4811000 0! #4811500 1! #4811600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4811700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4812000 0! #4812500 1! #4812600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4812700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4813000 0! #4813500 1! #4813600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4813700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4814000 0! #4814500 1! #4814600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4814700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4815000 0! #4815500 1! #4815600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4815700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4816000 0! #4816500 1! #4816600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4816700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4817000 0! #4817500 1! #4817600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4817700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4818000 0! #4818500 1! #4818600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4818700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4819000 0! #4819500 1! #4819600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4819700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4820000 0! #4820500 1! #4820600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4820700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4821000 0! #4821500 1! #4821600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4821700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4822000 0! #4822500 1! #4822600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4822700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4823000 0! #4823500 1! #4823600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4823700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4824000 0! #4824500 1! #4824600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4824700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4825000 0! #4825500 1! #4825600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4825700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4826000 0! #4826500 1! #4826600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4826700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4827000 0! #4827500 1! #4827600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4827700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4828000 0! #4828500 1! #4828600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4828700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4829000 0! #4829500 1! #4829600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4829700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4830000 0! #4830500 1! #4830600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4830700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4831000 0! #4831500 1! #4831600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4831700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4832000 0! #4832500 1! #4832600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4832700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4833000 0! #4833500 1! #4833600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4833700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4834000 0! #4834500 1! #4834600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4834700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4835000 0! #4835500 1! #4835600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4835700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4836000 0! #4836500 1! #4836600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4836700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4837000 0! #4837500 1! #4837600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4837700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4838000 0! #4838500 1! #4838600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4838700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4839000 0! #4839500 1! #4839600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4839700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4840000 0! #4840500 1! #4840600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4840700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4841000 0! #4841500 1! #4841600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4841700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4842000 0! #4842500 1! #4842600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4842700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4843000 0! #4843500 1! #4843600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4843700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4844000 0! #4844500 1! #4844600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4844700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4845000 0! #4845500 1! #4845600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4845700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4846000 0! #4846500 1! #4846600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4846700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4847000 0! #4847500 1! #4847600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4847700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4848000 0! #4848500 1! #4848600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4848700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4849000 0! #4849500 1! #4849600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4849700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4850000 0! #4850500 1! #4850600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4850700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4851000 0! #4851500 1! #4851600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4851700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4852000 0! #4852500 1! #4852600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4852700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4853000 0! #4853500 1! #4853600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4853700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4854000 0! #4854500 1! #4854600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4854700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4855000 0! #4855500 1! #4855600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4855700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4856000 0! #4856500 1! #4856600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4856700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4857000 0! #4857500 1! #4857600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4857700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4858000 0! #4858500 1! #4858600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4858700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4859000 0! #4859500 1! #4859600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4859700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4860000 0! #4860500 1! #4860600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4860700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4861000 0! #4861500 1! #4861600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4861700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4862000 0! #4862500 1! #4862600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4862700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4863000 0! #4863500 1! #4863600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4863700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4864000 0! #4864500 1! #4864600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4864700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4865000 0! #4865500 1! #4865600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4865700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4866000 0! #4866500 1! #4866600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4866700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4867000 0! #4867500 1! #4867600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4867700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4868000 0! #4868500 1! #4868600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4868700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4869000 0! #4869500 1! #4869600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4869700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4870000 0! #4870500 1! #4870600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4870700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4871000 0! #4871500 1! #4871600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4871700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4872000 0! #4872500 1! #4872600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4872700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4873000 0! #4873500 1! #4873600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #4873700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1j b100 q 1i 1O #4874000 0! #4874500 1! #4874600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4874700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4875000 0! #4875500 1! #4875600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4875700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4876000 0! #4876500 1! #4876600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4876700 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B b1000001 C 1H #4877000 0! #4877500 1! #4877600 b1000001 J xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4878000 0! #4878500 1! #4878600 1E 1F 1G b10100101 D 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 0@ 1A 1B b10000000 C 1H #4879000 0! #4879500 1! #4879600 xE bx D x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4879700 1E 1F 1G b10000 D 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B b1000001 C 1H #4880000 0! #4880500 1! #4880600 xE bx D x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4881000 0! #4881500 1! #4881600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H b1000011 C #4882000 0! #4882500 1! #4882600 b1000011 J xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4883000 0! #4883500 1! #4883600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4884000 0! #4884500 1! #4884600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4885000 0! #4885500 1! #4885600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4886000 0! #4886500 1! #4886600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4887000 0! #4887500 1! #4887600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4888000 0! #4888500 1! #4888600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4889000 0! #4889500 1! #4889600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4890000 0! #4890500 1! #4890600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4891000 0! #4891500 1! #4891600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4892000 0! #4892500 1! #4892600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4893000 0! #4893500 1! #4893600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4894000 0! #4894500 1! #4894600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4895000 0! #4895500 1! #4895600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4896000 0! #4896500 1! #4896600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4897000 0! #4897500 1! #4897600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4898000 0! #4898500 1! #4898600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4899000 0! #4899500 1! #4899600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4900000 0! #4900500 1! #4900600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4901000 0! #4901500 1! #4901600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4902000 0! #4902500 1! #4902600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4903000 0! #4903500 1! #4903600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4904000 0! #4904500 1! #4904600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4905000 0! #4905500 1! #4905600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4906000 0! #4906500 1! #4906600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4907000 0! #4907500 1! #4907600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4908000 0! #4908500 1! #4908600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4909000 0! #4909500 1! #4909600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4910000 0! #4910500 1! #4910600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4911000 0! #4911500 1! #4911600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4912000 0! #4912500 1! #4912600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4913000 0! #4913500 1! #4913600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4914000 0! #4914500 1! #4914600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4915000 0! #4915500 1! #4915600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4916000 0! #4916500 1! #4916600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4917000 0! #4917500 1! #4917600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4918000 0! #4918500 1! #4918600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4919000 0! #4919500 1! #4919600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4920000 0! #4920500 1! #4920600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4921000 0! #4921500 1! #4921600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4922000 0! #4922500 1! #4922600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4923000 0! #4923500 1! #4923600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4924000 0! #4924500 1! #4924600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4925000 0! #4925500 1! #4925600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4926000 0! #4926500 1! #4926600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4927000 0! #4927500 1! #4927600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4928000 0! #4928500 1! #4928600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4929000 0! #4929500 1! #4929600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4930000 0! #4930500 1! #4930600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4931000 0! #4931500 1! #4931600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4932000 0! #4932500 1! #4932600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4933000 0! #4933500 1! #4933600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4934000 0! #4934500 1! #4934600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4935000 0! #4935500 1! #4935600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4936000 0! #4936500 1! #4936600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4937000 0! #4937500 1! #4937600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4938000 0! #4938500 1! #4938600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4939000 0! #4939500 1! #4939600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4940000 0! #4940500 1! #4940600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4941000 0! #4941500 1! #4941600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4942000 0! #4942500 1! #4942600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4943000 0! #4943500 1! #4943600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4944000 0! #4944500 1! #4944600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4945000 0! #4945500 1! #4945600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4946000 0! #4946500 1! #4946600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4947000 0! #4947500 1! #4947600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4948000 0! #4948500 1! #4948600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4949000 0! #4949500 1! #4949600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4950000 0! #4950500 1! #4950600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4951000 0! #4951500 1! #4951600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4952000 0! #4952500 1! #4952600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4953000 0! #4953500 1! #4953600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4954000 0! #4954500 1! #4954600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4955000 0! #4955500 1! #4955600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4956000 0! #4956500 1! #4956600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4957000 0! #4957500 1! #4957600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4958000 0! #4958500 1! #4958600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4959000 0! #4959500 1! #4959600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4960000 0! #4960500 1! #4960600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4961000 0! #4961500 1! #4961600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4962000 0! #4962500 1! #4962600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4963000 0! #4963500 1! #4963600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4964000 0! #4964500 1! #4964600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4965000 0! #4965500 1! #4965600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4966000 0! #4966500 1! #4966600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4967000 0! #4967500 1! #4967600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4968000 0! #4968500 1! #4968600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4969000 0! #4969500 1! #4969600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4970000 0! #4970500 1! #4970600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4971000 0! #4971500 1! #4971600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4972000 0! #4972500 1! #4972600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4973000 0! #4973500 1! #4973600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4974000 0! #4974500 1! #4974600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4975000 0! #4975500 1! #4975600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4976000 0! #4976500 1! #4976600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4977000 0! #4977500 1! #4977600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4978000 0! #4978500 1! #4978600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4979000 0! #4979500 1! #4979600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4980000 0! #4980500 1! #4980600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4981000 0! #4981500 1! #4981600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4982000 0! #4982500 1! #4982600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4983000 0! #4983500 1! #4983600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4984000 0! #4984500 1! #4984600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4985000 0! #4985500 1! #4985600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4986000 0! #4986500 1! #4986600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4987000 0! #4987500 1! #4987600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4988000 0! #4988500 1! #4988600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4989000 0! #4989500 1! #4989600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4990000 0! #4990500 1! #4990600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4991000 0! #4991500 1! #4991600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4992000 0! #4992500 1! #4992600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4993000 0! #4993500 1! #4993600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4994000 0! #4994500 1! #4994600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4995000 0! #4995500 1! #4995600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4996000 0! #4996500 1! #4996600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4997000 0! #4997500 1! #4997600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #4998000 0! #4998500 1! #4998600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #4999000 0! #4999500 1! #4999600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5000000 0! #5000500 1! #5000600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5001000 0! #5001500 1! #5001600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5002000 0! #5002500 1! #5002600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5003000 0! #5003500 1! #5003600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5004000 0! #5004500 1! #5004600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5005000 0! #5005500 1! #5005600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5006000 0! #5006500 1! #5006600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5007000 0! #5007500 1! #5007600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5008000 0! #5008500 1! #5008600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5009000 0! #5009500 1! #5009600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5010000 0! #5010500 1! #5010600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5011000 0! #5011500 1! #5011600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5012000 0! #5012500 1! #5012600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5013000 0! #5013500 1! #5013600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5014000 0! #5014500 1! #5014600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5015000 0! #5015500 1! #5015600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5016000 0! #5016500 1! #5016600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5017000 0! #5017500 1! #5017600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5018000 0! #5018500 1! #5018600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5019000 0! #5019500 1! #5019600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5020000 0! #5020500 1! #5020600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5021000 0! #5021500 1! #5021600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5022000 0! #5022500 1! #5022600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5023000 0! #5023500 1! #5023600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5024000 0! #5024500 1! #5024600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5025000 0! #5025500 1! #5025600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5026000 0! #5026500 1! #5026600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #5026700 b101 c #5027000 0! #5027500 1! #5027600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5028000 0! #5028500 1! #5028600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5029000 0! #5029500 1! #5029600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5030000 0! #5030500 1! #5030600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5031000 0! #5031500 1! #5031600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5032000 0! #5032500 1! #5032600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5033000 0! #5033500 1! #5033600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5034000 0! #5034500 1! #5034600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5035000 0! #5035500 1! #5035600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5036000 0! #5036500 1! #5036600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5037000 0! #5037500 1! #5037600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5038000 0! #5038500 1! #5038600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5039000 0! #5039500 1! #5039600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5040000 0! #5040500 1! #5040600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5041000 0! #5041500 1! #5041600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5042000 0! #5042500 1! #5042600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5043000 0! #5043500 1! #5043600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5044000 0! #5044500 1! #5044600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5045000 0! #5045500 1! #5045600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5046000 0! #5046500 1! #5046600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5047000 0! #5047500 1! #5047600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5048000 0! #5048500 1! #5048600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5049000 0! #5049500 1! #5049600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5050000 0! #5050500 1! #5050600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5051000 0! #5051500 1! #5051600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5052000 0! #5052500 1! #5052600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5053000 0! #5053500 1! #5053600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5054000 0! #5054500 1! #5054600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5055000 0! #5055500 1! #5055600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5056000 0! #5056500 1! #5056600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5057000 0! #5057500 1! #5057600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5058000 0! #5058500 1! #5058600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5059000 0! #5059500 1! #5059600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5060000 0! #5060500 1! #5060600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5061000 0! #5061500 1! #5061600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5062000 0! #5062500 1! #5062600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5063000 0! #5063500 1! #5063600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5064000 0! #5064500 1! #5064600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5065000 0! #5065500 1! #5065600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5066000 0! #5066500 1! #5066600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5067000 0! #5067500 1! #5067600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5068000 0! #5068500 1! #5068600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5069000 0! #5069500 1! #5069600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5070000 0! #5070500 1! #5070600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5071000 0! #5071500 1! #5071600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5072000 0! #5072500 1! #5072600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5073000 0! #5073500 1! #5073600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5074000 0! #5074500 1! #5074600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5075000 0! #5075500 1! #5075600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5076000 0! #5076500 1! #5076600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5077000 0! #5077500 1! #5077600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5078000 0! #5078500 1! #5078600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5079000 0! #5079500 1! #5079600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5080000 0! #5080500 1! #5080600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5081000 0! #5081500 1! #5081600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5082000 0! #5082500 1! #5082600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5083000 0! #5083500 1! #5083600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5084000 0! #5084500 1! #5084600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5085000 0! #5085500 1! #5085600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5086000 0! #5086500 1! #5086600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5087000 0! #5087500 1! #5087600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5088000 0! #5088500 1! #5088600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5089000 0! #5089500 1! #5089600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5090000 0! #5090500 1! #5090600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5091000 0! #5091500 1! #5091600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5092000 0! #5092500 1! #5092600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5093000 0! #5093500 1! #5093600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5094000 0! #5094500 1! #5094600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5095000 0! #5095500 1! #5095600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5096000 0! #5096500 1! #5096600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5097000 0! #5097500 1! #5097600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5098000 0! #5098500 1! #5098600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5099000 0! #5099500 1! #5099600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5100000 0! #5100500 1! #5100600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5101000 0! #5101500 1! #5101600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5102000 0! #5102500 1! #5102600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5103000 0! #5103500 1! #5103600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5104000 0! #5104500 1! #5104600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5105000 0! #5105500 1! #5105600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5106000 0! #5106500 1! #5106600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5107000 0! #5107500 1! #5107600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5108000 0! #5108500 1! #5108600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5109000 0! #5109500 1! #5109600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5110000 0! #5110500 1! #5110600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5111000 0! #5111500 1! #5111600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5112000 0! #5112500 1! #5112600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5113000 0! #5113500 1! #5113600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5114000 0! #5114500 1! #5114600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5115000 0! #5115500 1! #5115600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5116000 0! #5116500 1! #5116600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5117000 0! #5117500 1! #5117600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5118000 0! #5118500 1! #5118600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5119000 0! #5119500 1! #5119600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5120000 0! #5120500 1! #5120600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5121000 0! #5121500 1! #5121600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5122000 0! #5122500 1! #5122600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5123000 0! #5123500 1! #5123600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5124000 0! #5124500 1! #5124600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5125000 0! #5125500 1! #5125600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5126000 0! #5126500 1! #5126600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5127000 0! #5127500 1! #5127600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5128000 0! #5128500 1! #5128600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #5128700 0i #5129000 0! #5129500 1! #5129600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5130000 0! #5130500 1! #5130600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5131000 0! #5131500 1! #5131600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5132000 0! #5132500 1! #5132600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5133000 0! #5133500 1! #5133600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5134000 0! #5134500 1! #5134600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5135000 0! #5135500 1! #5135600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5136000 0! #5136500 1! #5136600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5137000 0! #5137500 1! #5137600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5138000 0! #5138500 1! #5138600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5139000 0! #5139500 1! #5139600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5140000 0! #5140500 1! #5140600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5141000 0! #5141500 1! #5141600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5142000 0! #5142500 1! #5142600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5143000 0! #5143500 1! #5143600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5144000 0! #5144500 1! #5144600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5145000 0! #5145500 1! #5145600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5146000 0! #5146500 1! #5146600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5147000 0! #5147500 1! #5147600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5148000 0! #5148500 1! #5148600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5149000 0! #5149500 1! #5149600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5150000 0! #5150500 1! #5150600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5151000 0! #5151500 1! #5151600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5152000 0! #5152500 1! #5152600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5153000 0! #5153500 1! #5153600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5154000 0! #5154500 1! #5154600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5155000 0! #5155500 1! #5155600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5156000 0! #5156500 1! #5156600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5157000 0! #5157500 1! #5157600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5158000 0! #5158500 1! #5158600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5159000 0! #5159500 1! #5159600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5160000 0! #5160500 1! #5160600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5161000 0! #5161500 1! #5161600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5162000 0! #5162500 1! #5162600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5163000 0! #5163500 1! #5163600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5164000 0! #5164500 1! #5164600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5165000 0! #5165500 1! #5165600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5166000 0! #5166500 1! #5166600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5167000 0! #5167500 1! #5167600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5168000 0! #5168500 1! #5168600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5169000 0! #5169500 1! #5169600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5170000 0! #5170500 1! #5170600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5171000 0! #5171500 1! #5171600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5172000 0! #5172500 1! #5172600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5173000 0! #5173500 1! #5173600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5174000 0! #5174500 1! #5174600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5175000 0! #5175500 1! #5175600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5176000 0! #5176500 1! #5176600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5177000 0! #5177500 1! #5177600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5178000 0! #5178500 1! #5178600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5179000 0! #5179500 1! #5179600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5180000 0! #5180500 1! #5180600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5181000 0! #5181500 1! #5181600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5182000 0! #5182500 1! #5182600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5183000 0! #5183500 1! #5183600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5184000 0! #5184500 1! #5184600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5185000 0! #5185500 1! #5185600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5186000 0! #5186500 1! #5186600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5187000 0! #5187500 1! #5187600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5188000 0! #5188500 1! #5188600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5189000 0! #5189500 1! #5189600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5190000 0! #5190500 1! #5190600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5191000 0! #5191500 1! #5191600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5192000 0! #5192500 1! #5192600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5193000 0! #5193500 1! #5193600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5194000 0! #5194500 1! #5194600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5195000 0! #5195500 1! #5195600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5196000 0! #5196500 1! #5196600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5197000 0! #5197500 1! #5197600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5198000 0! #5198500 1! #5198600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5199000 0! #5199500 1! #5199600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5200000 0! #5200500 1! #5200600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5201000 0! #5201500 1! #5201600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5202000 0! #5202500 1! #5202600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5203000 0! #5203500 1! #5203600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5204000 0! #5204500 1! #5204600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5205000 0! #5205500 1! #5205600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5206000 0! #5206500 1! #5206600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5207000 0! #5207500 1! #5207600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5208000 0! #5208500 1! #5208600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5209000 0! #5209500 1! #5209600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5210000 0! #5210500 1! #5210600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5211000 0! #5211500 1! #5211600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5212000 0! #5212500 1! #5212600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5213000 0! #5213500 1! #5213600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5214000 0! #5214500 1! #5214600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5215000 0! #5215500 1! #5215600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5216000 0! #5216500 1! #5216600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5217000 0! #5217500 1! #5217600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5218000 0! #5218500 1! #5218600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5219000 0! #5219500 1! #5219600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5220000 0! #5220500 1! #5220600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5221000 0! #5221500 1! #5221600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5222000 0! #5222500 1! #5222600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5223000 0! #5223500 1! #5223600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5224000 0! #5224500 1! #5224600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5225000 0! #5225500 1! #5225600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5226000 0! #5226500 1! #5226600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5227000 0! #5227500 1! #5227600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5228000 0! #5228500 1! #5228600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5229000 0! #5229500 1! #5229600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5230000 0! #5230500 1! #5230600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0Q 0O #5231000 0! #5231500 1! #5231600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5232000 0! #5232500 1! #5232600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5233000 0! #5233500 1! #5233600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5234000 0! #5234500 1! #5234600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5235000 0! #5235500 1! #5235600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5236000 0! #5236500 1! #5236600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5237000 0! #5237500 1! #5237600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5238000 0! #5238500 1! #5238600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5239000 0! #5239500 1! #5239600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5240000 0! #5240500 1! #5240600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5241000 0! #5241500 1! #5241600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5242000 0! #5242500 1! #5242600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5243000 0! #5243500 1! #5243600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5244000 0! #5244500 1! #5244600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5245000 0! #5245500 1! #5245600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5246000 0! #5246500 1! #5246600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5247000 0! #5247500 1! #5247600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5248000 0! #5248500 1! #5248600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5249000 0! #5249500 1! #5249600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5250000 0! #5250500 1! #5250600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5251000 0! #5251500 1! #5251600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5252000 0! #5252500 1! #5252600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5253000 0! #5253500 1! #5253600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5254000 0! #5254500 1! #5254600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5255000 0! #5255500 1! #5255600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5256000 0! #5256500 1! #5256600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5257000 0! #5257500 1! #5257600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5258000 0! #5258500 1! #5258600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5259000 0! #5259500 1! #5259600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5260000 0! #5260500 1! #5260600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5261000 0! #5261500 1! #5261600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5262000 0! #5262500 1! #5262600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5263000 0! #5263500 1! #5263600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5264000 0! #5264500 1! #5264600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5265000 0! #5265500 1! #5265600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5266000 0! #5266500 1! #5266600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5267000 0! #5267500 1! #5267600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5268000 0! #5268500 1! #5268600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5269000 0! #5269500 1! #5269600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5270000 0! #5270500 1! #5270600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5271000 0! #5271500 1! #5271600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5272000 0! #5272500 1! #5272600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5273000 0! #5273500 1! #5273600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5274000 0! #5274500 1! #5274600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5275000 0! #5275500 1! #5275600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5276000 0! #5276500 1! #5276600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5277000 0! #5277500 1! #5277600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5278000 0! #5278500 1! #5278600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5279000 0! #5279500 1! #5279600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5280000 0! #5280500 1! #5280600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5281000 0! #5281500 1! #5281600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #5281700 b110 g b1010 c #5282000 0! #5282500 1! #5282600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5283000 0! #5283500 1! #5283600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5284000 0! #5284500 1! #5284600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5285000 0! #5285500 1! #5285600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5286000 0! #5286500 1! #5286600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5287000 0! #5287500 1! #5287600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5288000 0! #5288500 1! #5288600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5289000 0! #5289500 1! #5289600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5290000 0! #5290500 1! #5290600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5291000 0! #5291500 1! #5291600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5292000 0! #5292500 1! #5292600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5293000 0! #5293500 1! #5293600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5294000 0! #5294500 1! #5294600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5295000 0! #5295500 1! #5295600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5296000 0! #5296500 1! #5296600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5297000 0! #5297500 1! #5297600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5298000 0! #5298500 1! #5298600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5299000 0! #5299500 1! #5299600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5300000 0! #5300500 1! #5300600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5301000 0! #5301500 1! #5301600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5302000 0! #5302500 1! #5302600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5303000 0! #5303500 1! #5303600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5304000 0! #5304500 1! #5304600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5305000 0! #5305500 1! #5305600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5306000 0! #5306500 1! #5306600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5307000 0! #5307500 1! #5307600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5308000 0! #5308500 1! #5308600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5309000 0! #5309500 1! #5309600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5310000 0! #5310500 1! #5310600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5311000 0! #5311500 1! #5311600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5312000 0! #5312500 1! #5312600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5313000 0! #5313500 1! #5313600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5314000 0! #5314500 1! #5314600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5315000 0! #5315500 1! #5315600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5316000 0! #5316500 1! #5316600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5317000 0! #5317500 1! #5317600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5318000 0! #5318500 1! #5318600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5319000 0! #5319500 1! #5319600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5320000 0! #5320500 1! #5320600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5321000 0! #5321500 1! #5321600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5322000 0! #5322500 1! #5322600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5323000 0! #5323500 1! #5323600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5324000 0! #5324500 1! #5324600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5325000 0! #5325500 1! #5325600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5326000 0! #5326500 1! #5326600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5327000 0! #5327500 1! #5327600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5328000 0! #5328500 1! #5328600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5329000 0! #5329500 1! #5329600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5330000 0! #5330500 1! #5330600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5331000 0! #5331500 1! #5331600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5332000 0! #5332500 1! #5332600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5333000 0! #5333500 1! #5333600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5334000 0! #5334500 1! #5334600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5335000 0! #5335500 1! #5335600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5336000 0! #5336500 1! #5336600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5337000 0! #5337500 1! #5337600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5338000 0! #5338500 1! #5338600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5339000 0! #5339500 1! #5339600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5340000 0! #5340500 1! #5340600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5341000 0! #5341500 1! #5341600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5342000 0! #5342500 1! #5342600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5343000 0! #5343500 1! #5343600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5344000 0! #5344500 1! #5344600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5345000 0! #5345500 1! #5345600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5346000 0! #5346500 1! #5346600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5347000 0! #5347500 1! #5347600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5348000 0! #5348500 1! #5348600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5349000 0! #5349500 1! #5349600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5350000 0! #5350500 1! #5350600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5351000 0! #5351500 1! #5351600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5352000 0! #5352500 1! #5352600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5353000 0! #5353500 1! #5353600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5354000 0! #5354500 1! #5354600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5355000 0! #5355500 1! #5355600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5356000 0! #5356500 1! #5356600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5357000 0! #5357500 1! #5357600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5358000 0! #5358500 1! #5358600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5359000 0! #5359500 1! #5359600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5360000 0! #5360500 1! #5360600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5361000 0! #5361500 1! #5361600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5362000 0! #5362500 1! #5362600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5363000 0! #5363500 1! #5363600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5364000 0! #5364500 1! #5364600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5365000 0! #5365500 1! #5365600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5366000 0! #5366500 1! #5366600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5367000 0! #5367500 1! #5367600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5368000 0! #5368500 1! #5368600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5369000 0! #5369500 1! #5369600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5370000 0! #5370500 1! #5370600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5371000 0! #5371500 1! #5371600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5372000 0! #5372500 1! #5372600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5373000 0! #5373500 1! #5373600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5374000 0! #5374500 1! #5374600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5375000 0! #5375500 1! #5375600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5376000 0! #5376500 1! #5376600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5377000 0! #5377500 1! #5377600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5378000 0! #5378500 1! #5378600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5379000 0! #5379500 1! #5379600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5380000 0! #5380500 1! #5380600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5381000 0! #5381500 1! #5381600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5382000 0! #5382500 1! #5382600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5383000 0! #5383500 1! #5383600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #5384000 0! #5384500 1! #5384600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5385000 0! #5385500 1! #5385600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5386000 0! #5386500 1! #5386600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5387000 0! #5387500 1! #5387600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5388000 0! #5388500 1! #5388600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5389000 0! #5389500 1! #5389600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5390000 0! #5390500 1! #5390600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5391000 0! #5391500 1! #5391600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5392000 0! #5392500 1! #5392600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5393000 0! #5393500 1! #5393600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5394000 0! #5394500 1! #5394600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5395000 0! #5395500 1! #5395600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5396000 0! #5396500 1! #5396600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5397000 0! #5397500 1! #5397600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5398000 0! #5398500 1! #5398600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5399000 0! #5399500 1! #5399600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5400000 0! #5400500 1! #5400600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5401000 0! #5401500 1! #5401600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5402000 0! #5402500 1! #5402600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5403000 0! #5403500 1! #5403600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5404000 0! #5404500 1! #5404600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5405000 0! #5405500 1! #5405600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5406000 0! #5406500 1! #5406600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5407000 0! #5407500 1! #5407600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5408000 0! #5408500 1! #5408600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5409000 0! #5409500 1! #5409600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5410000 0! #5410500 1! #5410600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5411000 0! #5411500 1! #5411600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5412000 0! #5412500 1! #5412600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5413000 0! #5413500 1! #5413600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5414000 0! #5414500 1! #5414600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5415000 0! #5415500 1! #5415600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5416000 0! #5416500 1! #5416600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5417000 0! #5417500 1! #5417600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5418000 0! #5418500 1! #5418600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5419000 0! #5419500 1! #5419600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5420000 0! #5420500 1! #5420600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5421000 0! #5421500 1! #5421600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5422000 0! #5422500 1! #5422600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5423000 0! #5423500 1! #5423600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5424000 0! #5424500 1! #5424600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5425000 0! #5425500 1! #5425600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5426000 0! #5426500 1! #5426600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5427000 0! #5427500 1! #5427600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5428000 0! #5428500 1! #5428600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5429000 0! #5429500 1! #5429600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5430000 0! #5430500 1! #5430600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5431000 0! #5431500 1! #5431600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5432000 0! #5432500 1! #5432600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5433000 0! #5433500 1! #5433600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5434000 0! #5434500 1! #5434600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5435000 0! #5435500 1! #5435600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5436000 0! #5436500 1! #5436600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5437000 0! #5437500 1! #5437600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5438000 0! #5438500 1! #5438600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5439000 0! #5439500 1! #5439600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5440000 0! #5440500 1! #5440600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5441000 0! #5441500 1! #5441600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5442000 0! #5442500 1! #5442600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5443000 0! #5443500 1! #5443600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5444000 0! #5444500 1! #5444600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5445000 0! #5445500 1! #5445600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5446000 0! #5446500 1! #5446600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5447000 0! #5447500 1! #5447600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5448000 0! #5448500 1! #5448600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5449000 0! #5449500 1! #5449600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5450000 0! #5450500 1! #5450600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5451000 0! #5451500 1! #5451600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5452000 0! #5452500 1! #5452600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5453000 0! #5453500 1! #5453600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5454000 0! #5454500 1! #5454600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5455000 0! #5455500 1! #5455600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5456000 0! #5456500 1! #5456600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5457000 0! #5457500 1! #5457600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5458000 0! #5458500 1! #5458600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5459000 0! #5459500 1! #5459600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5460000 0! #5460500 1! #5460600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5461000 0! #5461500 1! #5461600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5462000 0! #5462500 1! #5462600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5463000 0! #5463500 1! #5463600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5464000 0! #5464500 1! #5464600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5465000 0! #5465500 1! #5465600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5466000 0! #5466500 1! #5466600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5467000 0! #5467500 1! #5467600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5468000 0! #5468500 1! #5468600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5469000 0! #5469500 1! #5469600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5470000 0! #5470500 1! #5470600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5471000 0! #5471500 1! #5471600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5472000 0! #5472500 1! #5472600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5473000 0! #5473500 1! #5473600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5474000 0! #5474500 1! #5474600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5475000 0! #5475500 1! #5475600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5476000 0! #5476500 1! #5476600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5477000 0! #5477500 1! #5477600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5478000 0! #5478500 1! #5478600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5479000 0! #5479500 1! #5479600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5480000 0! #5480500 1! #5480600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5481000 0! #5481500 1! #5481600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5482000 0! #5482500 1! #5482600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5483000 0! #5483500 1! #5483600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5484000 0! #5484500 1! #5484600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5485000 0! #5485500 1! #5485600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1Q 1O #5486000 0! #5486500 1! #5486600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5487000 0! #5487500 1! #5487600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5488000 0! #5488500 1! #5488600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5489000 0! #5489500 1! #5489600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5490000 0! #5490500 1! #5490600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5491000 0! #5491500 1! #5491600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5492000 0! #5492500 1! #5492600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5493000 0! #5493500 1! #5493600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5494000 0! #5494500 1! #5494600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5495000 0! #5495500 1! #5495600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5496000 0! #5496500 1! #5496600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5497000 0! #5497500 1! #5497600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5498000 0! #5498500 1! #5498600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5499000 0! #5499500 1! #5499600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5500000 0! #5500500 1! #5500600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5501000 0! #5501500 1! #5501600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5502000 0! #5502500 1! #5502600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5503000 0! #5503500 1! #5503600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5504000 0! #5504500 1! #5504600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5505000 0! #5505500 1! #5505600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5506000 0! #5506500 1! #5506600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5507000 0! #5507500 1! #5507600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5508000 0! #5508500 1! #5508600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5509000 0! #5509500 1! #5509600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5510000 0! #5510500 1! #5510600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5511000 0! #5511500 1! #5511600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5512000 0! #5512500 1! #5512600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5513000 0! #5513500 1! #5513600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5514000 0! #5514500 1! #5514600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5515000 0! #5515500 1! #5515600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5516000 0! #5516500 1! #5516600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5517000 0! #5517500 1! #5517600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5518000 0! #5518500 1! #5518600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5519000 0! #5519500 1! #5519600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5520000 0! #5520500 1! #5520600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5521000 0! #5521500 1! #5521600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5522000 0! #5522500 1! #5522600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5523000 0! #5523500 1! #5523600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5524000 0! #5524500 1! #5524600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5525000 0! #5525500 1! #5525600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5526000 0! #5526500 1! #5526600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5527000 0! #5527500 1! #5527600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5528000 0! #5528500 1! #5528600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5529000 0! #5529500 1! #5529600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5530000 0! #5530500 1! #5530600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5531000 0! #5531500 1! #5531600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5532000 0! #5532500 1! #5532600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5533000 0! #5533500 1! #5533600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5534000 0! #5534500 1! #5534600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5535000 0! #5535500 1! #5535600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5536000 0! #5536500 1! #5536600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #5536700 b101 g b10101 c #5537000 0! #5537500 1! #5537600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5538000 0! #5538500 1! #5538600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5539000 0! #5539500 1! #5539600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5540000 0! #5540500 1! #5540600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5541000 0! #5541500 1! #5541600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5542000 0! #5542500 1! #5542600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5543000 0! #5543500 1! #5543600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5544000 0! #5544500 1! #5544600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5545000 0! #5545500 1! #5545600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5546000 0! #5546500 1! #5546600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5547000 0! #5547500 1! #5547600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5548000 0! #5548500 1! #5548600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5549000 0! #5549500 1! #5549600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5550000 0! #5550500 1! #5550600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5551000 0! #5551500 1! #5551600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5552000 0! #5552500 1! #5552600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5553000 0! #5553500 1! #5553600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5554000 0! #5554500 1! #5554600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5555000 0! #5555500 1! #5555600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5556000 0! #5556500 1! #5556600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5557000 0! #5557500 1! #5557600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5558000 0! #5558500 1! #5558600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5559000 0! #5559500 1! #5559600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5560000 0! #5560500 1! #5560600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5561000 0! #5561500 1! #5561600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5562000 0! #5562500 1! #5562600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5563000 0! #5563500 1! #5563600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5564000 0! #5564500 1! #5564600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5565000 0! #5565500 1! #5565600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5566000 0! #5566500 1! #5566600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5567000 0! #5567500 1! #5567600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5568000 0! #5568500 1! #5568600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5569000 0! #5569500 1! #5569600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5570000 0! #5570500 1! #5570600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5571000 0! #5571500 1! #5571600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5572000 0! #5572500 1! #5572600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5573000 0! #5573500 1! #5573600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5574000 0! #5574500 1! #5574600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5575000 0! #5575500 1! #5575600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5576000 0! #5576500 1! #5576600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5577000 0! #5577500 1! #5577600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5578000 0! #5578500 1! #5578600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5579000 0! #5579500 1! #5579600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5580000 0! #5580500 1! #5580600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5581000 0! #5581500 1! #5581600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5582000 0! #5582500 1! #5582600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5583000 0! #5583500 1! #5583600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5584000 0! #5584500 1! #5584600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5585000 0! #5585500 1! #5585600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5586000 0! #5586500 1! #5586600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5587000 0! #5587500 1! #5587600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5588000 0! #5588500 1! #5588600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5589000 0! #5589500 1! #5589600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5590000 0! #5590500 1! #5590600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5591000 0! #5591500 1! #5591600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5592000 0! #5592500 1! #5592600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5593000 0! #5593500 1! #5593600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5594000 0! #5594500 1! #5594600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5595000 0! #5595500 1! #5595600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5596000 0! #5596500 1! #5596600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5597000 0! #5597500 1! #5597600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5598000 0! #5598500 1! #5598600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5599000 0! #5599500 1! #5599600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5600000 0! #5600500 1! #5600600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5601000 0! #5601500 1! #5601600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5602000 0! #5602500 1! #5602600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5603000 0! #5603500 1! #5603600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5604000 0! #5604500 1! #5604600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5605000 0! #5605500 1! #5605600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5606000 0! #5606500 1! #5606600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5607000 0! #5607500 1! #5607600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5608000 0! #5608500 1! #5608600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5609000 0! #5609500 1! #5609600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5610000 0! #5610500 1! #5610600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5611000 0! #5611500 1! #5611600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5612000 0! #5612500 1! #5612600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5613000 0! #5613500 1! #5613600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5614000 0! #5614500 1! #5614600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5615000 0! #5615500 1! #5615600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5616000 0! #5616500 1! #5616600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5617000 0! #5617500 1! #5617600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5618000 0! #5618500 1! #5618600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5619000 0! #5619500 1! #5619600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5620000 0! #5620500 1! #5620600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5621000 0! #5621500 1! #5621600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5622000 0! #5622500 1! #5622600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5623000 0! #5623500 1! #5623600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5624000 0! #5624500 1! #5624600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5625000 0! #5625500 1! #5625600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5626000 0! #5626500 1! #5626600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5627000 0! #5627500 1! #5627600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5628000 0! #5628500 1! #5628600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5629000 0! #5629500 1! #5629600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5630000 0! #5630500 1! #5630600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5631000 0! #5631500 1! #5631600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5632000 0! #5632500 1! #5632600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5633000 0! #5633500 1! #5633600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5634000 0! #5634500 1! #5634600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5635000 0! #5635500 1! #5635600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5636000 0! #5636500 1! #5636600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5637000 0! #5637500 1! #5637600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5638000 0! #5638500 1! #5638600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #5639000 0! #5639500 1! #5639600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5640000 0! #5640500 1! #5640600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5641000 0! #5641500 1! #5641600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5642000 0! #5642500 1! #5642600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5643000 0! #5643500 1! #5643600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5644000 0! #5644500 1! #5644600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5645000 0! #5645500 1! #5645600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5646000 0! #5646500 1! #5646600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5647000 0! #5647500 1! #5647600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5648000 0! #5648500 1! #5648600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5649000 0! #5649500 1! #5649600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5650000 0! #5650500 1! #5650600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5651000 0! #5651500 1! #5651600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5652000 0! #5652500 1! #5652600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5653000 0! #5653500 1! #5653600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5654000 0! #5654500 1! #5654600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5655000 0! #5655500 1! #5655600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5656000 0! #5656500 1! #5656600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5657000 0! #5657500 1! #5657600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5658000 0! #5658500 1! #5658600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5659000 0! #5659500 1! #5659600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5660000 0! #5660500 1! #5660600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5661000 0! #5661500 1! #5661600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5662000 0! #5662500 1! #5662600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5663000 0! #5663500 1! #5663600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5664000 0! #5664500 1! #5664600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5665000 0! #5665500 1! #5665600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5666000 0! #5666500 1! #5666600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5667000 0! #5667500 1! #5667600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5668000 0! #5668500 1! #5668600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5669000 0! #5669500 1! #5669600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5670000 0! #5670500 1! #5670600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5671000 0! #5671500 1! #5671600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5672000 0! #5672500 1! #5672600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5673000 0! #5673500 1! #5673600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5674000 0! #5674500 1! #5674600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5675000 0! #5675500 1! #5675600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5676000 0! #5676500 1! #5676600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5677000 0! #5677500 1! #5677600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5678000 0! #5678500 1! #5678600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5679000 0! #5679500 1! #5679600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5680000 0! #5680500 1! #5680600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5681000 0! #5681500 1! #5681600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5682000 0! #5682500 1! #5682600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5683000 0! #5683500 1! #5683600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5684000 0! #5684500 1! #5684600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5685000 0! #5685500 1! #5685600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5686000 0! #5686500 1! #5686600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5687000 0! #5687500 1! #5687600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5688000 0! #5688500 1! #5688600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5689000 0! #5689500 1! #5689600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5690000 0! #5690500 1! #5690600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5691000 0! #5691500 1! #5691600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5692000 0! #5692500 1! #5692600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5693000 0! #5693500 1! #5693600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5694000 0! #5694500 1! #5694600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5695000 0! #5695500 1! #5695600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5696000 0! #5696500 1! #5696600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5697000 0! #5697500 1! #5697600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5698000 0! #5698500 1! #5698600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5699000 0! #5699500 1! #5699600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5700000 0! #5700500 1! #5700600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5701000 0! #5701500 1! #5701600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5702000 0! #5702500 1! #5702600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5703000 0! #5703500 1! #5703600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5704000 0! #5704500 1! #5704600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5705000 0! #5705500 1! #5705600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5706000 0! #5706500 1! #5706600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5707000 0! #5707500 1! #5707600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5708000 0! #5708500 1! #5708600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5709000 0! #5709500 1! #5709600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5710000 0! #5710500 1! #5710600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5711000 0! #5711500 1! #5711600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5712000 0! #5712500 1! #5712600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5713000 0! #5713500 1! #5713600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5714000 0! #5714500 1! #5714600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5715000 0! #5715500 1! #5715600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5716000 0! #5716500 1! #5716600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5717000 0! #5717500 1! #5717600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5718000 0! #5718500 1! #5718600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5719000 0! #5719500 1! #5719600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5720000 0! #5720500 1! #5720600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5721000 0! #5721500 1! #5721600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5722000 0! #5722500 1! #5722600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5723000 0! #5723500 1! #5723600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5724000 0! #5724500 1! #5724600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5725000 0! #5725500 1! #5725600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5726000 0! #5726500 1! #5726600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5727000 0! #5727500 1! #5727600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5728000 0! #5728500 1! #5728600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5729000 0! #5729500 1! #5729600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5730000 0! #5730500 1! #5730600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5731000 0! #5731500 1! #5731600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5732000 0! #5732500 1! #5732600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5733000 0! #5733500 1! #5733600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5734000 0! #5734500 1! #5734600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5735000 0! #5735500 1! #5735600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5736000 0! #5736500 1! #5736600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5737000 0! #5737500 1! #5737600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5738000 0! #5738500 1! #5738600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5739000 0! #5739500 1! #5739600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5740000 0! #5740500 1! #5740600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0Q 0O #5741000 0! #5741500 1! #5741600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5742000 0! #5742500 1! #5742600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5743000 0! #5743500 1! #5743600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5744000 0! #5744500 1! #5744600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5745000 0! #5745500 1! #5745600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5746000 0! #5746500 1! #5746600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5747000 0! #5747500 1! #5747600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5748000 0! #5748500 1! #5748600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5749000 0! #5749500 1! #5749600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5750000 0! #5750500 1! #5750600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5751000 0! #5751500 1! #5751600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5752000 0! #5752500 1! #5752600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5753000 0! #5753500 1! #5753600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5754000 0! #5754500 1! #5754600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5755000 0! #5755500 1! #5755600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5756000 0! #5756500 1! #5756600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5757000 0! #5757500 1! #5757600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5758000 0! #5758500 1! #5758600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5759000 0! #5759500 1! #5759600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5760000 0! #5760500 1! #5760600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5761000 0! #5761500 1! #5761600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5762000 0! #5762500 1! #5762600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5763000 0! #5763500 1! #5763600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5764000 0! #5764500 1! #5764600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5765000 0! #5765500 1! #5765600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5766000 0! #5766500 1! #5766600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5767000 0! #5767500 1! #5767600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5768000 0! #5768500 1! #5768600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5769000 0! #5769500 1! #5769600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5770000 0! #5770500 1! #5770600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5771000 0! #5771500 1! #5771600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5772000 0! #5772500 1! #5772600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5773000 0! #5773500 1! #5773600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5774000 0! #5774500 1! #5774600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5775000 0! #5775500 1! #5775600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5776000 0! #5776500 1! #5776600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5777000 0! #5777500 1! #5777600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5778000 0! #5778500 1! #5778600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5779000 0! #5779500 1! #5779600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5780000 0! #5780500 1! #5780600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5781000 0! #5781500 1! #5781600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5782000 0! #5782500 1! #5782600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5783000 0! #5783500 1! #5783600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5784000 0! #5784500 1! #5784600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5785000 0! #5785500 1! #5785600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5786000 0! #5786500 1! #5786600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5787000 0! #5787500 1! #5787600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5788000 0! #5788500 1! #5788600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5789000 0! #5789500 1! #5789600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5790000 0! #5790500 1! #5790600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5791000 0! #5791500 1! #5791600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #5791700 b100 g b101010 c #5792000 0! #5792500 1! #5792600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5793000 0! #5793500 1! #5793600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5794000 0! #5794500 1! #5794600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5795000 0! #5795500 1! #5795600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5796000 0! #5796500 1! #5796600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5797000 0! #5797500 1! #5797600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5798000 0! #5798500 1! #5798600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5799000 0! #5799500 1! #5799600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5800000 0! #5800500 1! #5800600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5801000 0! #5801500 1! #5801600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5802000 0! #5802500 1! #5802600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5803000 0! #5803500 1! #5803600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5804000 0! #5804500 1! #5804600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5805000 0! #5805500 1! #5805600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5806000 0! #5806500 1! #5806600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5807000 0! #5807500 1! #5807600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5808000 0! #5808500 1! #5808600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5809000 0! #5809500 1! #5809600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5810000 0! #5810500 1! #5810600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5811000 0! #5811500 1! #5811600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5812000 0! #5812500 1! #5812600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5813000 0! #5813500 1! #5813600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5814000 0! #5814500 1! #5814600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5815000 0! #5815500 1! #5815600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5816000 0! #5816500 1! #5816600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5817000 0! #5817500 1! #5817600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5818000 0! #5818500 1! #5818600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5819000 0! #5819500 1! #5819600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5820000 0! #5820500 1! #5820600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5821000 0! #5821500 1! #5821600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5822000 0! #5822500 1! #5822600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5823000 0! #5823500 1! #5823600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5824000 0! #5824500 1! #5824600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5825000 0! #5825500 1! #5825600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5826000 0! #5826500 1! #5826600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5827000 0! #5827500 1! #5827600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5828000 0! #5828500 1! #5828600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5829000 0! #5829500 1! #5829600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5830000 0! #5830500 1! #5830600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5831000 0! #5831500 1! #5831600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5832000 0! #5832500 1! #5832600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5833000 0! #5833500 1! #5833600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5834000 0! #5834500 1! #5834600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5835000 0! #5835500 1! #5835600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5836000 0! #5836500 1! #5836600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5837000 0! #5837500 1! #5837600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5838000 0! #5838500 1! #5838600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5839000 0! #5839500 1! #5839600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5840000 0! #5840500 1! #5840600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5841000 0! #5841500 1! #5841600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5842000 0! #5842500 1! #5842600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5843000 0! #5843500 1! #5843600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5844000 0! #5844500 1! #5844600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5845000 0! #5845500 1! #5845600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5846000 0! #5846500 1! #5846600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5847000 0! #5847500 1! #5847600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5848000 0! #5848500 1! #5848600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5849000 0! #5849500 1! #5849600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5850000 0! #5850500 1! #5850600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5851000 0! #5851500 1! #5851600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5852000 0! #5852500 1! #5852600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5853000 0! #5853500 1! #5853600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5854000 0! #5854500 1! #5854600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5855000 0! #5855500 1! #5855600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5856000 0! #5856500 1! #5856600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5857000 0! #5857500 1! #5857600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5858000 0! #5858500 1! #5858600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5859000 0! #5859500 1! #5859600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5860000 0! #5860500 1! #5860600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5861000 0! #5861500 1! #5861600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5862000 0! #5862500 1! #5862600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5863000 0! #5863500 1! #5863600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5864000 0! #5864500 1! #5864600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5865000 0! #5865500 1! #5865600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5866000 0! #5866500 1! #5866600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5867000 0! #5867500 1! #5867600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5868000 0! #5868500 1! #5868600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5869000 0! #5869500 1! #5869600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5870000 0! #5870500 1! #5870600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5871000 0! #5871500 1! #5871600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5872000 0! #5872500 1! #5872600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5873000 0! #5873500 1! #5873600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5874000 0! #5874500 1! #5874600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5875000 0! #5875500 1! #5875600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5876000 0! #5876500 1! #5876600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5877000 0! #5877500 1! #5877600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5878000 0! #5878500 1! #5878600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5879000 0! #5879500 1! #5879600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5880000 0! #5880500 1! #5880600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5881000 0! #5881500 1! #5881600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5882000 0! #5882500 1! #5882600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5883000 0! #5883500 1! #5883600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5884000 0! #5884500 1! #5884600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5885000 0! #5885500 1! #5885600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5886000 0! #5886500 1! #5886600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5887000 0! #5887500 1! #5887600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5888000 0! #5888500 1! #5888600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5889000 0! #5889500 1! #5889600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5890000 0! #5890500 1! #5890600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5891000 0! #5891500 1! #5891600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5892000 0! #5892500 1! #5892600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5893000 0! #5893500 1! #5893600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #5894000 0! #5894500 1! #5894600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5895000 0! #5895500 1! #5895600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5896000 0! #5896500 1! #5896600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5897000 0! #5897500 1! #5897600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5898000 0! #5898500 1! #5898600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5899000 0! #5899500 1! #5899600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5900000 0! #5900500 1! #5900600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5901000 0! #5901500 1! #5901600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5902000 0! #5902500 1! #5902600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5903000 0! #5903500 1! #5903600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5904000 0! #5904500 1! #5904600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5905000 0! #5905500 1! #5905600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5906000 0! #5906500 1! #5906600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5907000 0! #5907500 1! #5907600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5908000 0! #5908500 1! #5908600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5909000 0! #5909500 1! #5909600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5910000 0! #5910500 1! #5910600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5911000 0! #5911500 1! #5911600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5912000 0! #5912500 1! #5912600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5913000 0! #5913500 1! #5913600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5914000 0! #5914500 1! #5914600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5915000 0! #5915500 1! #5915600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5916000 0! #5916500 1! #5916600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5917000 0! #5917500 1! #5917600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5918000 0! #5918500 1! #5918600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5919000 0! #5919500 1! #5919600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5920000 0! #5920500 1! #5920600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5921000 0! #5921500 1! #5921600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5922000 0! #5922500 1! #5922600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5923000 0! #5923500 1! #5923600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5924000 0! #5924500 1! #5924600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5925000 0! #5925500 1! #5925600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5926000 0! #5926500 1! #5926600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5927000 0! #5927500 1! #5927600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5928000 0! #5928500 1! #5928600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5929000 0! #5929500 1! #5929600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5930000 0! #5930500 1! #5930600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5931000 0! #5931500 1! #5931600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5932000 0! #5932500 1! #5932600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5933000 0! #5933500 1! #5933600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5934000 0! #5934500 1! #5934600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5935000 0! #5935500 1! #5935600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5936000 0! #5936500 1! #5936600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5937000 0! #5937500 1! #5937600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5938000 0! #5938500 1! #5938600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5939000 0! #5939500 1! #5939600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5940000 0! #5940500 1! #5940600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5941000 0! #5941500 1! #5941600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5942000 0! #5942500 1! #5942600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5943000 0! #5943500 1! #5943600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5944000 0! #5944500 1! #5944600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5945000 0! #5945500 1! #5945600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5946000 0! #5946500 1! #5946600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5947000 0! #5947500 1! #5947600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5948000 0! #5948500 1! #5948600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5949000 0! #5949500 1! #5949600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5950000 0! #5950500 1! #5950600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5951000 0! #5951500 1! #5951600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5952000 0! #5952500 1! #5952600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5953000 0! #5953500 1! #5953600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5954000 0! #5954500 1! #5954600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5955000 0! #5955500 1! #5955600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5956000 0! #5956500 1! #5956600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5957000 0! #5957500 1! #5957600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5958000 0! #5958500 1! #5958600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5959000 0! #5959500 1! #5959600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5960000 0! #5960500 1! #5960600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5961000 0! #5961500 1! #5961600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5962000 0! #5962500 1! #5962600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5963000 0! #5963500 1! #5963600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5964000 0! #5964500 1! #5964600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5965000 0! #5965500 1! #5965600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5966000 0! #5966500 1! #5966600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5967000 0! #5967500 1! #5967600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5968000 0! #5968500 1! #5968600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5969000 0! #5969500 1! #5969600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5970000 0! #5970500 1! #5970600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5971000 0! #5971500 1! #5971600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5972000 0! #5972500 1! #5972600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5973000 0! #5973500 1! #5973600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5974000 0! #5974500 1! #5974600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5975000 0! #5975500 1! #5975600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5976000 0! #5976500 1! #5976600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5977000 0! #5977500 1! #5977600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5978000 0! #5978500 1! #5978600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5979000 0! #5979500 1! #5979600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5980000 0! #5980500 1! #5980600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5981000 0! #5981500 1! #5981600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5982000 0! #5982500 1! #5982600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5983000 0! #5983500 1! #5983600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5984000 0! #5984500 1! #5984600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5985000 0! #5985500 1! #5985600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5986000 0! #5986500 1! #5986600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5987000 0! #5987500 1! #5987600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5988000 0! #5988500 1! #5988600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5989000 0! #5989500 1! #5989600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5990000 0! #5990500 1! #5990600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5991000 0! #5991500 1! #5991600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5992000 0! #5992500 1! #5992600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5993000 0! #5993500 1! #5993600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5994000 0! #5994500 1! #5994600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5995000 0! #5995500 1! #5995600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5996000 0! #5996500 1! #5996600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5997000 0! #5997500 1! #5997600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #5998000 0! #5998500 1! #5998600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #5999000 0! #5999500 1! #5999600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6000000 0! #6000500 1! #6000600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6001000 0! #6001500 1! #6001600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6002000 0! #6002500 1! #6002600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6003000 0! #6003500 1! #6003600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6004000 0! #6004500 1! #6004600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6005000 0! #6005500 1! #6005600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6006000 0! #6006500 1! #6006600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6007000 0! #6007500 1! #6007600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6008000 0! #6008500 1! #6008600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6009000 0! #6009500 1! #6009600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6010000 0! #6010500 1! #6010600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6011000 0! #6011500 1! #6011600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6012000 0! #6012500 1! #6012600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6013000 0! #6013500 1! #6013600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6014000 0! #6014500 1! #6014600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6015000 0! #6015500 1! #6015600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6016000 0! #6016500 1! #6016600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6017000 0! #6017500 1! #6017600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6018000 0! #6018500 1! #6018600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6019000 0! #6019500 1! #6019600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6020000 0! #6020500 1! #6020600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6021000 0! #6021500 1! #6021600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6022000 0! #6022500 1! #6022600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6023000 0! #6023500 1! #6023600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6024000 0! #6024500 1! #6024600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6025000 0! #6025500 1! #6025600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6026000 0! #6026500 1! #6026600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6027000 0! #6027500 1! #6027600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6028000 0! #6028500 1! #6028600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6029000 0! #6029500 1! #6029600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6030000 0! #6030500 1! #6030600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6031000 0! #6031500 1! #6031600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6032000 0! #6032500 1! #6032600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6033000 0! #6033500 1! #6033600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6034000 0! #6034500 1! #6034600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6035000 0! #6035500 1! #6035600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6036000 0! #6036500 1! #6036600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6037000 0! #6037500 1! #6037600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6038000 0! #6038500 1! #6038600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6039000 0! #6039500 1! #6039600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6040000 0! #6040500 1! #6040600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6041000 0! #6041500 1! #6041600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6042000 0! #6042500 1! #6042600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6043000 0! #6043500 1! #6043600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6044000 0! #6044500 1! #6044600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6045000 0! #6045500 1! #6045600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6046000 0! #6046500 1! #6046600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #6046700 b11 g b1010100 c #6047000 0! #6047500 1! #6047600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6048000 0! #6048500 1! #6048600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6049000 0! #6049500 1! #6049600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6050000 0! #6050500 1! #6050600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6051000 0! #6051500 1! #6051600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6052000 0! #6052500 1! #6052600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6053000 0! #6053500 1! #6053600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6054000 0! #6054500 1! #6054600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6055000 0! #6055500 1! #6055600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6056000 0! #6056500 1! #6056600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6057000 0! #6057500 1! #6057600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6058000 0! #6058500 1! #6058600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6059000 0! #6059500 1! #6059600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6060000 0! #6060500 1! #6060600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6061000 0! #6061500 1! #6061600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6062000 0! #6062500 1! #6062600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6063000 0! #6063500 1! #6063600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6064000 0! #6064500 1! #6064600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6065000 0! #6065500 1! #6065600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6066000 0! #6066500 1! #6066600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6067000 0! #6067500 1! #6067600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6068000 0! #6068500 1! #6068600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6069000 0! #6069500 1! #6069600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6070000 0! #6070500 1! #6070600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6071000 0! #6071500 1! #6071600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6072000 0! #6072500 1! #6072600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6073000 0! #6073500 1! #6073600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6074000 0! #6074500 1! #6074600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6075000 0! #6075500 1! #6075600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6076000 0! #6076500 1! #6076600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6077000 0! #6077500 1! #6077600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6078000 0! #6078500 1! #6078600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6079000 0! #6079500 1! #6079600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6080000 0! #6080500 1! #6080600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6081000 0! #6081500 1! #6081600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6082000 0! #6082500 1! #6082600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6083000 0! #6083500 1! #6083600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6084000 0! #6084500 1! #6084600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6085000 0! #6085500 1! #6085600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6086000 0! #6086500 1! #6086600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6087000 0! #6087500 1! #6087600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6088000 0! #6088500 1! #6088600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6089000 0! #6089500 1! #6089600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6090000 0! #6090500 1! #6090600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6091000 0! #6091500 1! #6091600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6092000 0! #6092500 1! #6092600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6093000 0! #6093500 1! #6093600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6094000 0! #6094500 1! #6094600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6095000 0! #6095500 1! #6095600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6096000 0! #6096500 1! #6096600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6097000 0! #6097500 1! #6097600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6098000 0! #6098500 1! #6098600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6099000 0! #6099500 1! #6099600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6100000 0! #6100500 1! #6100600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6101000 0! #6101500 1! #6101600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6102000 0! #6102500 1! #6102600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6103000 0! #6103500 1! #6103600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6104000 0! #6104500 1! #6104600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6105000 0! #6105500 1! #6105600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6106000 0! #6106500 1! #6106600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6107000 0! #6107500 1! #6107600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6108000 0! #6108500 1! #6108600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6109000 0! #6109500 1! #6109600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6110000 0! #6110500 1! #6110600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6111000 0! #6111500 1! #6111600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6112000 0! #6112500 1! #6112600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6113000 0! #6113500 1! #6113600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6114000 0! #6114500 1! #6114600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6115000 0! #6115500 1! #6115600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6116000 0! #6116500 1! #6116600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6117000 0! #6117500 1! #6117600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6118000 0! #6118500 1! #6118600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6119000 0! #6119500 1! #6119600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6120000 0! #6120500 1! #6120600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6121000 0! #6121500 1! #6121600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6122000 0! #6122500 1! #6122600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6123000 0! #6123500 1! #6123600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6124000 0! #6124500 1! #6124600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6125000 0! #6125500 1! #6125600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6126000 0! #6126500 1! #6126600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6127000 0! #6127500 1! #6127600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6128000 0! #6128500 1! #6128600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6129000 0! #6129500 1! #6129600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6130000 0! #6130500 1! #6130600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6131000 0! #6131500 1! #6131600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6132000 0! #6132500 1! #6132600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6133000 0! #6133500 1! #6133600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6134000 0! #6134500 1! #6134600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6135000 0! #6135500 1! #6135600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6136000 0! #6136500 1! #6136600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6137000 0! #6137500 1! #6137600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6138000 0! #6138500 1! #6138600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6139000 0! #6139500 1! #6139600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6140000 0! #6140500 1! #6140600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6141000 0! #6141500 1! #6141600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6142000 0! #6142500 1! #6142600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6143000 0! #6143500 1! #6143600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6144000 0! #6144500 1! #6144600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6145000 0! #6145500 1! #6145600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6146000 0! #6146500 1! #6146600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6147000 0! #6147500 1! #6147600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6148000 0! #6148500 1! #6148600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #6149000 0! #6149500 1! #6149600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6150000 0! #6150500 1! #6150600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6151000 0! #6151500 1! #6151600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6152000 0! #6152500 1! #6152600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6153000 0! #6153500 1! #6153600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6154000 0! #6154500 1! #6154600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6155000 0! #6155500 1! #6155600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6156000 0! #6156500 1! #6156600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6157000 0! #6157500 1! #6157600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6158000 0! #6158500 1! #6158600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6159000 0! #6159500 1! #6159600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6160000 0! #6160500 1! #6160600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6161000 0! #6161500 1! #6161600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6162000 0! #6162500 1! #6162600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6163000 0! #6163500 1! #6163600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6164000 0! #6164500 1! #6164600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6165000 0! #6165500 1! #6165600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6166000 0! #6166500 1! #6166600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6167000 0! #6167500 1! #6167600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6168000 0! #6168500 1! #6168600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6169000 0! #6169500 1! #6169600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6170000 0! #6170500 1! #6170600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6171000 0! #6171500 1! #6171600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6172000 0! #6172500 1! #6172600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6173000 0! #6173500 1! #6173600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6174000 0! #6174500 1! #6174600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6175000 0! #6175500 1! #6175600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6176000 0! #6176500 1! #6176600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6177000 0! #6177500 1! #6177600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6178000 0! #6178500 1! #6178600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6179000 0! #6179500 1! #6179600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6180000 0! #6180500 1! #6180600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6181000 0! #6181500 1! #6181600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6182000 0! #6182500 1! #6182600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6183000 0! #6183500 1! #6183600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6184000 0! #6184500 1! #6184600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6185000 0! #6185500 1! #6185600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6186000 0! #6186500 1! #6186600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6187000 0! #6187500 1! #6187600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6188000 0! #6188500 1! #6188600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6189000 0! #6189500 1! #6189600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6190000 0! #6190500 1! #6190600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6191000 0! #6191500 1! #6191600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6192000 0! #6192500 1! #6192600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6193000 0! #6193500 1! #6193600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6194000 0! #6194500 1! #6194600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6195000 0! #6195500 1! #6195600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6196000 0! #6196500 1! #6196600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6197000 0! #6197500 1! #6197600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6198000 0! #6198500 1! #6198600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6199000 0! #6199500 1! #6199600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6200000 0! #6200500 1! #6200600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6201000 0! #6201500 1! #6201600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6202000 0! #6202500 1! #6202600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6203000 0! #6203500 1! #6203600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6204000 0! #6204500 1! #6204600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6205000 0! #6205500 1! #6205600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6206000 0! #6206500 1! #6206600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6207000 0! #6207500 1! #6207600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6208000 0! #6208500 1! #6208600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6209000 0! #6209500 1! #6209600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6210000 0! #6210500 1! #6210600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6211000 0! #6211500 1! #6211600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6212000 0! #6212500 1! #6212600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6213000 0! #6213500 1! #6213600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6214000 0! #6214500 1! #6214600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6215000 0! #6215500 1! #6215600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6216000 0! #6216500 1! #6216600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6217000 0! #6217500 1! #6217600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6218000 0! #6218500 1! #6218600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6219000 0! #6219500 1! #6219600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6220000 0! #6220500 1! #6220600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6221000 0! #6221500 1! #6221600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6222000 0! #6222500 1! #6222600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6223000 0! #6223500 1! #6223600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6224000 0! #6224500 1! #6224600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6225000 0! #6225500 1! #6225600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6226000 0! #6226500 1! #6226600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6227000 0! #6227500 1! #6227600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6228000 0! #6228500 1! #6228600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6229000 0! #6229500 1! #6229600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6230000 0! #6230500 1! #6230600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6231000 0! #6231500 1! #6231600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6232000 0! #6232500 1! #6232600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6233000 0! #6233500 1! #6233600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6234000 0! #6234500 1! #6234600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6235000 0! #6235500 1! #6235600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6236000 0! #6236500 1! #6236600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6237000 0! #6237500 1! #6237600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6238000 0! #6238500 1! #6238600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6239000 0! #6239500 1! #6239600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6240000 0! #6240500 1! #6240600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6241000 0! #6241500 1! #6241600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6242000 0! #6242500 1! #6242600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6243000 0! #6243500 1! #6243600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6244000 0! #6244500 1! #6244600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6245000 0! #6245500 1! #6245600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6246000 0! #6246500 1! #6246600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6247000 0! #6247500 1! #6247600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6248000 0! #6248500 1! #6248600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6249000 0! #6249500 1! #6249600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6250000 0! #6250500 1! #6250600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1Q 1O #6251000 0! #6251500 1! #6251600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6252000 0! #6252500 1! #6252600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6253000 0! #6253500 1! #6253600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6254000 0! #6254500 1! #6254600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6255000 0! #6255500 1! #6255600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6256000 0! #6256500 1! #6256600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6257000 0! #6257500 1! #6257600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6258000 0! #6258500 1! #6258600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6259000 0! #6259500 1! #6259600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6260000 0! #6260500 1! #6260600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6261000 0! #6261500 1! #6261600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6262000 0! #6262500 1! #6262600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6263000 0! #6263500 1! #6263600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6264000 0! #6264500 1! #6264600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6265000 0! #6265500 1! #6265600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6266000 0! #6266500 1! #6266600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6267000 0! #6267500 1! #6267600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6268000 0! #6268500 1! #6268600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6269000 0! #6269500 1! #6269600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6270000 0! #6270500 1! #6270600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6271000 0! #6271500 1! #6271600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6272000 0! #6272500 1! #6272600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6273000 0! #6273500 1! #6273600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6274000 0! #6274500 1! #6274600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6275000 0! #6275500 1! #6275600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6276000 0! #6276500 1! #6276600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6277000 0! #6277500 1! #6277600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6278000 0! #6278500 1! #6278600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6279000 0! #6279500 1! #6279600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6280000 0! #6280500 1! #6280600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6281000 0! #6281500 1! #6281600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6282000 0! #6282500 1! #6282600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6283000 0! #6283500 1! #6283600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6284000 0! #6284500 1! #6284600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6285000 0! #6285500 1! #6285600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6286000 0! #6286500 1! #6286600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6287000 0! #6287500 1! #6287600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6288000 0! #6288500 1! #6288600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6289000 0! #6289500 1! #6289600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6290000 0! #6290500 1! #6290600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6291000 0! #6291500 1! #6291600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6292000 0! #6292500 1! #6292600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6293000 0! #6293500 1! #6293600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6294000 0! #6294500 1! #6294600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6295000 0! #6295500 1! #6295600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6296000 0! #6296500 1! #6296600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6297000 0! #6297500 1! #6297600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6298000 0! #6298500 1! #6298600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6299000 0! #6299500 1! #6299600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6300000 0! #6300500 1! #6300600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6301000 0! #6301500 1! #6301600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #6301700 b10 g b10101001 c #6302000 0! #6302500 1! #6302600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6303000 0! #6303500 1! #6303600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6304000 0! #6304500 1! #6304600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6305000 0! #6305500 1! #6305600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6306000 0! #6306500 1! #6306600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6307000 0! #6307500 1! #6307600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6308000 0! #6308500 1! #6308600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6309000 0! #6309500 1! #6309600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6310000 0! #6310500 1! #6310600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6311000 0! #6311500 1! #6311600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6312000 0! #6312500 1! #6312600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6313000 0! #6313500 1! #6313600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6314000 0! #6314500 1! #6314600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6315000 0! #6315500 1! #6315600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6316000 0! #6316500 1! #6316600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6317000 0! #6317500 1! #6317600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6318000 0! #6318500 1! #6318600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6319000 0! #6319500 1! #6319600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6320000 0! #6320500 1! #6320600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6321000 0! #6321500 1! #6321600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6322000 0! #6322500 1! #6322600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6323000 0! #6323500 1! #6323600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6324000 0! #6324500 1! #6324600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6325000 0! #6325500 1! #6325600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6326000 0! #6326500 1! #6326600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6327000 0! #6327500 1! #6327600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6328000 0! #6328500 1! #6328600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6329000 0! #6329500 1! #6329600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6330000 0! #6330500 1! #6330600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6331000 0! #6331500 1! #6331600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6332000 0! #6332500 1! #6332600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6333000 0! #6333500 1! #6333600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6334000 0! #6334500 1! #6334600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6335000 0! #6335500 1! #6335600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6336000 0! #6336500 1! #6336600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6337000 0! #6337500 1! #6337600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6338000 0! #6338500 1! #6338600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6339000 0! #6339500 1! #6339600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6340000 0! #6340500 1! #6340600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6341000 0! #6341500 1! #6341600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6342000 0! #6342500 1! #6342600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6343000 0! #6343500 1! #6343600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6344000 0! #6344500 1! #6344600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6345000 0! #6345500 1! #6345600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6346000 0! #6346500 1! #6346600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6347000 0! #6347500 1! #6347600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6348000 0! #6348500 1! #6348600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6349000 0! #6349500 1! #6349600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6350000 0! #6350500 1! #6350600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6351000 0! #6351500 1! #6351600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6352000 0! #6352500 1! #6352600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6353000 0! #6353500 1! #6353600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6354000 0! #6354500 1! #6354600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6355000 0! #6355500 1! #6355600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6356000 0! #6356500 1! #6356600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6357000 0! #6357500 1! #6357600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6358000 0! #6358500 1! #6358600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6359000 0! #6359500 1! #6359600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6360000 0! #6360500 1! #6360600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6361000 0! #6361500 1! #6361600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6362000 0! #6362500 1! #6362600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6363000 0! #6363500 1! #6363600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6364000 0! #6364500 1! #6364600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6365000 0! #6365500 1! #6365600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6366000 0! #6366500 1! #6366600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6367000 0! #6367500 1! #6367600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6368000 0! #6368500 1! #6368600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6369000 0! #6369500 1! #6369600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6370000 0! #6370500 1! #6370600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6371000 0! #6371500 1! #6371600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6372000 0! #6372500 1! #6372600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6373000 0! #6373500 1! #6373600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6374000 0! #6374500 1! #6374600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6375000 0! #6375500 1! #6375600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6376000 0! #6376500 1! #6376600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6377000 0! #6377500 1! #6377600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6378000 0! #6378500 1! #6378600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6379000 0! #6379500 1! #6379600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6380000 0! #6380500 1! #6380600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6381000 0! #6381500 1! #6381600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6382000 0! #6382500 1! #6382600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6383000 0! #6383500 1! #6383600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6384000 0! #6384500 1! #6384600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6385000 0! #6385500 1! #6385600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6386000 0! #6386500 1! #6386600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6387000 0! #6387500 1! #6387600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6388000 0! #6388500 1! #6388600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6389000 0! #6389500 1! #6389600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6390000 0! #6390500 1! #6390600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6391000 0! #6391500 1! #6391600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6392000 0! #6392500 1! #6392600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6393000 0! #6393500 1! #6393600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6394000 0! #6394500 1! #6394600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6395000 0! #6395500 1! #6395600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6396000 0! #6396500 1! #6396600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6397000 0! #6397500 1! #6397600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6398000 0! #6398500 1! #6398600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6399000 0! #6399500 1! #6399600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6400000 0! #6400500 1! #6400600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6401000 0! #6401500 1! #6401600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6402000 0! #6402500 1! #6402600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6403000 0! #6403500 1! #6403600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #6404000 0! #6404500 1! #6404600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6405000 0! #6405500 1! #6405600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6406000 0! #6406500 1! #6406600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6407000 0! #6407500 1! #6407600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6408000 0! #6408500 1! #6408600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6409000 0! #6409500 1! #6409600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6410000 0! #6410500 1! #6410600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6411000 0! #6411500 1! #6411600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6412000 0! #6412500 1! #6412600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6413000 0! #6413500 1! #6413600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6414000 0! #6414500 1! #6414600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6415000 0! #6415500 1! #6415600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6416000 0! #6416500 1! #6416600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6417000 0! #6417500 1! #6417600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6418000 0! #6418500 1! #6418600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6419000 0! #6419500 1! #6419600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6420000 0! #6420500 1! #6420600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6421000 0! #6421500 1! #6421600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6422000 0! #6422500 1! #6422600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6423000 0! #6423500 1! #6423600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6424000 0! #6424500 1! #6424600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6425000 0! #6425500 1! #6425600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6426000 0! #6426500 1! #6426600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6427000 0! #6427500 1! #6427600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6428000 0! #6428500 1! #6428600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6429000 0! #6429500 1! #6429600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6430000 0! #6430500 1! #6430600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6431000 0! #6431500 1! #6431600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6432000 0! #6432500 1! #6432600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6433000 0! #6433500 1! #6433600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6434000 0! #6434500 1! #6434600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6435000 0! #6435500 1! #6435600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6436000 0! #6436500 1! #6436600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6437000 0! #6437500 1! #6437600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6438000 0! #6438500 1! #6438600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6439000 0! #6439500 1! #6439600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6440000 0! #6440500 1! #6440600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6441000 0! #6441500 1! #6441600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6442000 0! #6442500 1! #6442600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6443000 0! #6443500 1! #6443600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6444000 0! #6444500 1! #6444600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6445000 0! #6445500 1! #6445600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6446000 0! #6446500 1! #6446600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6447000 0! #6447500 1! #6447600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6448000 0! #6448500 1! #6448600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6449000 0! #6449500 1! #6449600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6450000 0! #6450500 1! #6450600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6451000 0! #6451500 1! #6451600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6452000 0! #6452500 1! #6452600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6453000 0! #6453500 1! #6453600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6454000 0! #6454500 1! #6454600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6455000 0! #6455500 1! #6455600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6456000 0! #6456500 1! #6456600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6457000 0! #6457500 1! #6457600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6458000 0! #6458500 1! #6458600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6459000 0! #6459500 1! #6459600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6460000 0! #6460500 1! #6460600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6461000 0! #6461500 1! #6461600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6462000 0! #6462500 1! #6462600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6463000 0! #6463500 1! #6463600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6464000 0! #6464500 1! #6464600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6465000 0! #6465500 1! #6465600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6466000 0! #6466500 1! #6466600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6467000 0! #6467500 1! #6467600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6468000 0! #6468500 1! #6468600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6469000 0! #6469500 1! #6469600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6470000 0! #6470500 1! #6470600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6471000 0! #6471500 1! #6471600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6472000 0! #6472500 1! #6472600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6473000 0! #6473500 1! #6473600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6474000 0! #6474500 1! #6474600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6475000 0! #6475500 1! #6475600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6476000 0! #6476500 1! #6476600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6477000 0! #6477500 1! #6477600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6478000 0! #6478500 1! #6478600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6479000 0! #6479500 1! #6479600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6480000 0! #6480500 1! #6480600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6481000 0! #6481500 1! #6481600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6482000 0! #6482500 1! #6482600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6483000 0! #6483500 1! #6483600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6484000 0! #6484500 1! #6484600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6485000 0! #6485500 1! #6485600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6486000 0! #6486500 1! #6486600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6487000 0! #6487500 1! #6487600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6488000 0! #6488500 1! #6488600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6489000 0! #6489500 1! #6489600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6490000 0! #6490500 1! #6490600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6491000 0! #6491500 1! #6491600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6492000 0! #6492500 1! #6492600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6493000 0! #6493500 1! #6493600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6494000 0! #6494500 1! #6494600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6495000 0! #6495500 1! #6495600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6496000 0! #6496500 1! #6496600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6497000 0! #6497500 1! #6497600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6498000 0! #6498500 1! #6498600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6499000 0! #6499500 1! #6499600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6500000 0! #6500500 1! #6500600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6501000 0! #6501500 1! #6501600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6502000 0! #6502500 1! #6502600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6503000 0! #6503500 1! #6503600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6504000 0! #6504500 1! #6504600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6505000 0! #6505500 1! #6505600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0Q 0O #6506000 0! #6506500 1! #6506600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6507000 0! #6507500 1! #6507600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6508000 0! #6508500 1! #6508600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6509000 0! #6509500 1! #6509600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6510000 0! #6510500 1! #6510600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6511000 0! #6511500 1! #6511600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6512000 0! #6512500 1! #6512600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6513000 0! #6513500 1! #6513600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6514000 0! #6514500 1! #6514600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6515000 0! #6515500 1! #6515600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6516000 0! #6516500 1! #6516600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6517000 0! #6517500 1! #6517600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6518000 0! #6518500 1! #6518600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6519000 0! #6519500 1! #6519600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6520000 0! #6520500 1! #6520600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6521000 0! #6521500 1! #6521600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6522000 0! #6522500 1! #6522600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6523000 0! #6523500 1! #6523600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6524000 0! #6524500 1! #6524600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6525000 0! #6525500 1! #6525600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6526000 0! #6526500 1! #6526600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6527000 0! #6527500 1! #6527600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6528000 0! #6528500 1! #6528600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6529000 0! #6529500 1! #6529600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6530000 0! #6530500 1! #6530600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6531000 0! #6531500 1! #6531600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6532000 0! #6532500 1! #6532600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6533000 0! #6533500 1! #6533600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6534000 0! #6534500 1! #6534600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6535000 0! #6535500 1! #6535600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6536000 0! #6536500 1! #6536600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6537000 0! #6537500 1! #6537600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6538000 0! #6538500 1! #6538600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6539000 0! #6539500 1! #6539600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6540000 0! #6540500 1! #6540600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6541000 0! #6541500 1! #6541600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6542000 0! #6542500 1! #6542600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6543000 0! #6543500 1! #6543600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6544000 0! #6544500 1! #6544600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6545000 0! #6545500 1! #6545600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6546000 0! #6546500 1! #6546600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6547000 0! #6547500 1! #6547600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6548000 0! #6548500 1! #6548600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6549000 0! #6549500 1! #6549600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6550000 0! #6550500 1! #6550600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6551000 0! #6551500 1! #6551600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6552000 0! #6552500 1! #6552600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6553000 0! #6553500 1! #6553600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6554000 0! #6554500 1! #6554600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6555000 0! #6555500 1! #6555600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6556000 0! #6556500 1! #6556600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #6556700 b1 g b1010010 c #6557000 0! #6557500 1! #6557600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6558000 0! #6558500 1! #6558600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6559000 0! #6559500 1! #6559600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6560000 0! #6560500 1! #6560600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6561000 0! #6561500 1! #6561600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6562000 0! #6562500 1! #6562600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6563000 0! #6563500 1! #6563600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6564000 0! #6564500 1! #6564600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6565000 0! #6565500 1! #6565600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6566000 0! #6566500 1! #6566600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6567000 0! #6567500 1! #6567600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6568000 0! #6568500 1! #6568600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6569000 0! #6569500 1! #6569600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6570000 0! #6570500 1! #6570600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6571000 0! #6571500 1! #6571600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6572000 0! #6572500 1! #6572600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6573000 0! #6573500 1! #6573600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6574000 0! #6574500 1! #6574600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6575000 0! #6575500 1! #6575600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6576000 0! #6576500 1! #6576600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6577000 0! #6577500 1! #6577600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6578000 0! #6578500 1! #6578600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6579000 0! #6579500 1! #6579600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6580000 0! #6580500 1! #6580600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6581000 0! #6581500 1! #6581600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6582000 0! #6582500 1! #6582600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6583000 0! #6583500 1! #6583600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6584000 0! #6584500 1! #6584600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6585000 0! #6585500 1! #6585600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6586000 0! #6586500 1! #6586600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6587000 0! #6587500 1! #6587600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6588000 0! #6588500 1! #6588600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6589000 0! #6589500 1! #6589600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6590000 0! #6590500 1! #6590600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6591000 0! #6591500 1! #6591600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6592000 0! #6592500 1! #6592600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6593000 0! #6593500 1! #6593600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6594000 0! #6594500 1! #6594600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6595000 0! #6595500 1! #6595600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6596000 0! #6596500 1! #6596600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6597000 0! #6597500 1! #6597600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6598000 0! #6598500 1! #6598600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6599000 0! #6599500 1! #6599600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6600000 0! #6600500 1! #6600600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6601000 0! #6601500 1! #6601600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6602000 0! #6602500 1! #6602600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6603000 0! #6603500 1! #6603600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6604000 0! #6604500 1! #6604600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6605000 0! #6605500 1! #6605600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6606000 0! #6606500 1! #6606600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6607000 0! #6607500 1! #6607600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6608000 0! #6608500 1! #6608600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6609000 0! #6609500 1! #6609600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6610000 0! #6610500 1! #6610600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6611000 0! #6611500 1! #6611600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6612000 0! #6612500 1! #6612600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6613000 0! #6613500 1! #6613600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6614000 0! #6614500 1! #6614600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6615000 0! #6615500 1! #6615600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6616000 0! #6616500 1! #6616600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6617000 0! #6617500 1! #6617600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6618000 0! #6618500 1! #6618600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6619000 0! #6619500 1! #6619600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6620000 0! #6620500 1! #6620600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6621000 0! #6621500 1! #6621600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6622000 0! #6622500 1! #6622600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6623000 0! #6623500 1! #6623600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6624000 0! #6624500 1! #6624600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6625000 0! #6625500 1! #6625600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6626000 0! #6626500 1! #6626600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6627000 0! #6627500 1! #6627600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6628000 0! #6628500 1! #6628600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6629000 0! #6629500 1! #6629600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6630000 0! #6630500 1! #6630600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6631000 0! #6631500 1! #6631600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6632000 0! #6632500 1! #6632600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6633000 0! #6633500 1! #6633600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6634000 0! #6634500 1! #6634600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6635000 0! #6635500 1! #6635600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6636000 0! #6636500 1! #6636600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6637000 0! #6637500 1! #6637600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6638000 0! #6638500 1! #6638600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6639000 0! #6639500 1! #6639600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6640000 0! #6640500 1! #6640600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6641000 0! #6641500 1! #6641600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6642000 0! #6642500 1! #6642600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6643000 0! #6643500 1! #6643600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6644000 0! #6644500 1! #6644600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6645000 0! #6645500 1! #6645600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6646000 0! #6646500 1! #6646600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6647000 0! #6647500 1! #6647600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6648000 0! #6648500 1! #6648600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6649000 0! #6649500 1! #6649600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6650000 0! #6650500 1! #6650600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6651000 0! #6651500 1! #6651600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6652000 0! #6652500 1! #6652600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6653000 0! #6653500 1! #6653600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6654000 0! #6654500 1! #6654600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6655000 0! #6655500 1! #6655600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6656000 0! #6656500 1! #6656600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6657000 0! #6657500 1! #6657600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6658000 0! #6658500 1! #6658600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #6659000 0! #6659500 1! #6659600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6660000 0! #6660500 1! #6660600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6661000 0! #6661500 1! #6661600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6662000 0! #6662500 1! #6662600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6663000 0! #6663500 1! #6663600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6664000 0! #6664500 1! #6664600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6665000 0! #6665500 1! #6665600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6666000 0! #6666500 1! #6666600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6667000 0! #6667500 1! #6667600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6668000 0! #6668500 1! #6668600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6669000 0! #6669500 1! #6669600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6670000 0! #6670500 1! #6670600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6671000 0! #6671500 1! #6671600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6672000 0! #6672500 1! #6672600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6673000 0! #6673500 1! #6673600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6674000 0! #6674500 1! #6674600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6675000 0! #6675500 1! #6675600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6676000 0! #6676500 1! #6676600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6677000 0! #6677500 1! #6677600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6678000 0! #6678500 1! #6678600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6679000 0! #6679500 1! #6679600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6680000 0! #6680500 1! #6680600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6681000 0! #6681500 1! #6681600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6682000 0! #6682500 1! #6682600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6683000 0! #6683500 1! #6683600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6684000 0! #6684500 1! #6684600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6685000 0! #6685500 1! #6685600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6686000 0! #6686500 1! #6686600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6687000 0! #6687500 1! #6687600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6688000 0! #6688500 1! #6688600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6689000 0! #6689500 1! #6689600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6690000 0! #6690500 1! #6690600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6691000 0! #6691500 1! #6691600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6692000 0! #6692500 1! #6692600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6693000 0! #6693500 1! #6693600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6694000 0! #6694500 1! #6694600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6695000 0! #6695500 1! #6695600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6696000 0! #6696500 1! #6696600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6697000 0! #6697500 1! #6697600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6698000 0! #6698500 1! #6698600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6699000 0! #6699500 1! #6699600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6700000 0! #6700500 1! #6700600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6701000 0! #6701500 1! #6701600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6702000 0! #6702500 1! #6702600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6703000 0! #6703500 1! #6703600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6704000 0! #6704500 1! #6704600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6705000 0! #6705500 1! #6705600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6706000 0! #6706500 1! #6706600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6707000 0! #6707500 1! #6707600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6708000 0! #6708500 1! #6708600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6709000 0! #6709500 1! #6709600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6710000 0! #6710500 1! #6710600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6711000 0! #6711500 1! #6711600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6712000 0! #6712500 1! #6712600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6713000 0! #6713500 1! #6713600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6714000 0! #6714500 1! #6714600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6715000 0! #6715500 1! #6715600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6716000 0! #6716500 1! #6716600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6717000 0! #6717500 1! #6717600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6718000 0! #6718500 1! #6718600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6719000 0! #6719500 1! #6719600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6720000 0! #6720500 1! #6720600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6721000 0! #6721500 1! #6721600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6722000 0! #6722500 1! #6722600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6723000 0! #6723500 1! #6723600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6724000 0! #6724500 1! #6724600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6725000 0! #6725500 1! #6725600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6726000 0! #6726500 1! #6726600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6727000 0! #6727500 1! #6727600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6728000 0! #6728500 1! #6728600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6729000 0! #6729500 1! #6729600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6730000 0! #6730500 1! #6730600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6731000 0! #6731500 1! #6731600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6732000 0! #6732500 1! #6732600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6733000 0! #6733500 1! #6733600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6734000 0! #6734500 1! #6734600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6735000 0! #6735500 1! #6735600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6736000 0! #6736500 1! #6736600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6737000 0! #6737500 1! #6737600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6738000 0! #6738500 1! #6738600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6739000 0! #6739500 1! #6739600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6740000 0! #6740500 1! #6740600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6741000 0! #6741500 1! #6741600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6742000 0! #6742500 1! #6742600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6743000 0! #6743500 1! #6743600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6744000 0! #6744500 1! #6744600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6745000 0! #6745500 1! #6745600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6746000 0! #6746500 1! #6746600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6747000 0! #6747500 1! #6747600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6748000 0! #6748500 1! #6748600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6749000 0! #6749500 1! #6749600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6750000 0! #6750500 1! #6750600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6751000 0! #6751500 1! #6751600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6752000 0! #6752500 1! #6752600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6753000 0! #6753500 1! #6753600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6754000 0! #6754500 1! #6754600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6755000 0! #6755500 1! #6755600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6756000 0! #6756500 1! #6756600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6757000 0! #6757500 1! #6757600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6758000 0! #6758500 1! #6758600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6759000 0! #6759500 1! #6759600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6760000 0! #6760500 1! #6760600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1Q 1O #6761000 0! #6761500 1! #6761600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6762000 0! #6762500 1! #6762600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6763000 0! #6763500 1! #6763600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6764000 0! #6764500 1! #6764600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6765000 0! #6765500 1! #6765600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6766000 0! #6766500 1! #6766600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6767000 0! #6767500 1! #6767600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6768000 0! #6768500 1! #6768600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6769000 0! #6769500 1! #6769600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6770000 0! #6770500 1! #6770600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6771000 0! #6771500 1! #6771600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6772000 0! #6772500 1! #6772600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6773000 0! #6773500 1! #6773600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6774000 0! #6774500 1! #6774600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6775000 0! #6775500 1! #6775600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6776000 0! #6776500 1! #6776600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6777000 0! #6777500 1! #6777600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6778000 0! #6778500 1! #6778600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6779000 0! #6779500 1! #6779600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6780000 0! #6780500 1! #6780600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6781000 0! #6781500 1! #6781600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6782000 0! #6782500 1! #6782600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6783000 0! #6783500 1! #6783600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6784000 0! #6784500 1! #6784600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6785000 0! #6785500 1! #6785600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6786000 0! #6786500 1! #6786600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6787000 0! #6787500 1! #6787600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6788000 0! #6788500 1! #6788600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6789000 0! #6789500 1! #6789600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6790000 0! #6790500 1! #6790600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6791000 0! #6791500 1! #6791600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6792000 0! #6792500 1! #6792600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6793000 0! #6793500 1! #6793600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6794000 0! #6794500 1! #6794600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6795000 0! #6795500 1! #6795600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6796000 0! #6796500 1! #6796600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6797000 0! #6797500 1! #6797600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6798000 0! #6798500 1! #6798600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6799000 0! #6799500 1! #6799600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6800000 0! #6800500 1! #6800600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6801000 0! #6801500 1! #6801600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6802000 0! #6802500 1! #6802600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6803000 0! #6803500 1! #6803600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6804000 0! #6804500 1! #6804600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6805000 0! #6805500 1! #6805600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6806000 0! #6806500 1! #6806600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6807000 0! #6807500 1! #6807600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6808000 0! #6808500 1! #6808600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6809000 0! #6809500 1! #6809600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6810000 0! #6810500 1! #6810600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6811000 0! #6811500 1! #6811600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #6811700 b0 g b10100101 c 1h #6812000 0! #6812500 1! #6812600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6813000 0! #6813500 1! #6813600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6814000 0! #6814500 1! #6814600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6815000 0! #6815500 1! #6815600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6816000 0! #6816500 1! #6816600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6817000 0! #6817500 1! #6817600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6818000 0! #6818500 1! #6818600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6819000 0! #6819500 1! #6819600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6820000 0! #6820500 1! #6820600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6821000 0! #6821500 1! #6821600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6822000 0! #6822500 1! #6822600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6823000 0! #6823500 1! #6823600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6824000 0! #6824500 1! #6824600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6825000 0! #6825500 1! #6825600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6826000 0! #6826500 1! #6826600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6827000 0! #6827500 1! #6827600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6828000 0! #6828500 1! #6828600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6829000 0! #6829500 1! #6829600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6830000 0! #6830500 1! #6830600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6831000 0! #6831500 1! #6831600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6832000 0! #6832500 1! #6832600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6833000 0! #6833500 1! #6833600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6834000 0! #6834500 1! #6834600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6835000 0! #6835500 1! #6835600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6836000 0! #6836500 1! #6836600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6837000 0! #6837500 1! #6837600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6838000 0! #6838500 1! #6838600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6839000 0! #6839500 1! #6839600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6840000 0! #6840500 1! #6840600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6841000 0! #6841500 1! #6841600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6842000 0! #6842500 1! #6842600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6843000 0! #6843500 1! #6843600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6844000 0! #6844500 1! #6844600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6845000 0! #6845500 1! #6845600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6846000 0! #6846500 1! #6846600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6847000 0! #6847500 1! #6847600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6848000 0! #6848500 1! #6848600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6849000 0! #6849500 1! #6849600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6850000 0! #6850500 1! #6850600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6851000 0! #6851500 1! #6851600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6852000 0! #6852500 1! #6852600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6853000 0! #6853500 1! #6853600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6854000 0! #6854500 1! #6854600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6855000 0! #6855500 1! #6855600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6856000 0! #6856500 1! #6856600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6857000 0! #6857500 1! #6857600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6858000 0! #6858500 1! #6858600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6859000 0! #6859500 1! #6859600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6860000 0! #6860500 1! #6860600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6861000 0! #6861500 1! #6861600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6862000 0! #6862500 1! #6862600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6863000 0! #6863500 1! #6863600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6864000 0! #6864500 1! #6864600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6865000 0! #6865500 1! #6865600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6866000 0! #6866500 1! #6866600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6867000 0! #6867500 1! #6867600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6868000 0! #6868500 1! #6868600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6869000 0! #6869500 1! #6869600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6870000 0! #6870500 1! #6870600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6871000 0! #6871500 1! #6871600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6872000 0! #6872500 1! #6872600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6873000 0! #6873500 1! #6873600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6874000 0! #6874500 1! #6874600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6875000 0! #6875500 1! #6875600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6876000 0! #6876500 1! #6876600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6877000 0! #6877500 1! #6877600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6878000 0! #6878500 1! #6878600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6879000 0! #6879500 1! #6879600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6880000 0! #6880500 1! #6880600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6881000 0! #6881500 1! #6881600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6882000 0! #6882500 1! #6882600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6883000 0! #6883500 1! #6883600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6884000 0! #6884500 1! #6884600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6885000 0! #6885500 1! #6885600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6886000 0! #6886500 1! #6886600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6887000 0! #6887500 1! #6887600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6888000 0! #6888500 1! #6888600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6889000 0! #6889500 1! #6889600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6890000 0! #6890500 1! #6890600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6891000 0! #6891500 1! #6891600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6892000 0! #6892500 1! #6892600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6893000 0! #6893500 1! #6893600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6894000 0! #6894500 1! #6894600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6895000 0! #6895500 1! #6895600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6896000 0! #6896500 1! #6896600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6897000 0! #6897500 1! #6897600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6898000 0! #6898500 1! #6898600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6899000 0! #6899500 1! #6899600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6900000 0! #6900500 1! #6900600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6901000 0! #6901500 1! #6901600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6902000 0! #6902500 1! #6902600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6903000 0! #6903500 1! #6903600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6904000 0! #6904500 1! #6904600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6905000 0! #6905500 1! #6905600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6906000 0! #6906500 1! #6906600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6907000 0! #6907500 1! #6907600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6908000 0! #6908500 1! #6908600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6909000 0! #6909500 1! #6909600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6910000 0! #6910500 1! #6910600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6911000 0! #6911500 1! #6911600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6912000 0! #6912500 1! #6912600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6913000 0! #6913500 1! #6913600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #6913700 b101 q 0j 0O #6913800 b10 ] #6914000 0! #6914500 1! #6914600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6915000 0! #6915500 1! #6915600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6916000 0! #6916500 1! #6916600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6917000 0! #6917500 1! #6917600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6918000 0! #6918500 1! #6918600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6919000 0! #6919500 1! #6919600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6920000 0! #6920500 1! #6920600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6921000 0! #6921500 1! #6921600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6922000 0! #6922500 1! #6922600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6923000 0! #6923500 1! #6923600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6924000 0! #6924500 1! #6924600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6925000 0! #6925500 1! #6925600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6926000 0! #6926500 1! #6926600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6927000 0! #6927500 1! #6927600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6928000 0! #6928500 1! #6928600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6929000 0! #6929500 1! #6929600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6930000 0! #6930500 1! #6930600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6931000 0! #6931500 1! #6931600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6932000 0! #6932500 1! #6932600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6933000 0! #6933500 1! #6933600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6934000 0! #6934500 1! #6934600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6935000 0! #6935500 1! #6935600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6936000 0! #6936500 1! #6936600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6937000 0! #6937500 1! #6937600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6938000 0! #6938500 1! #6938600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6939000 0! #6939500 1! #6939600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6940000 0! #6940500 1! #6940600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6941000 0! #6941500 1! #6941600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6942000 0! #6942500 1! #6942600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6943000 0! #6943500 1! #6943600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6944000 0! #6944500 1! #6944600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6945000 0! #6945500 1! #6945600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6946000 0! #6946500 1! #6946600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6947000 0! #6947500 1! #6947600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6948000 0! #6948500 1! #6948600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6949000 0! #6949500 1! #6949600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6950000 0! #6950500 1! #6950600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6951000 0! #6951500 1! #6951600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6952000 0! #6952500 1! #6952600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6953000 0! #6953500 1! #6953600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6954000 0! #6954500 1! #6954600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6955000 0! #6955500 1! #6955600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6956000 0! #6956500 1! #6956600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6957000 0! #6957500 1! #6957600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6958000 0! #6958500 1! #6958600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6959000 0! #6959500 1! #6959600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6960000 0! #6960500 1! #6960600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6961000 0! #6961500 1! #6961600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6962000 0! #6962500 1! #6962600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6963000 0! #6963500 1! #6963600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6964000 0! #6964500 1! #6964600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6965000 0! #6965500 1! #6965600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6966000 0! #6966500 1! #6966600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6967000 0! #6967500 1! #6967600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6968000 0! #6968500 1! #6968600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6969000 0! #6969500 1! #6969600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6970000 0! #6970500 1! #6970600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6971000 0! #6971500 1! #6971600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6972000 0! #6972500 1! #6972600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6973000 0! #6973500 1! #6973600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6974000 0! #6974500 1! #6974600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6975000 0! #6975500 1! #6975600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6976000 0! #6976500 1! #6976600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6977000 0! #6977500 1! #6977600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6978000 0! #6978500 1! #6978600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6979000 0! #6979500 1! #6979600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6980000 0! #6980500 1! #6980600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6981000 0! #6981500 1! #6981600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6982000 0! #6982500 1! #6982600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6983000 0! #6983500 1! #6983600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6984000 0! #6984500 1! #6984600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6985000 0! #6985500 1! #6985600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6986000 0! #6986500 1! #6986600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6987000 0! #6987500 1! #6987600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6988000 0! #6988500 1! #6988600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6989000 0! #6989500 1! #6989600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6990000 0! #6990500 1! #6990600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6991000 0! #6991500 1! #6991600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6992000 0! #6992500 1! #6992600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6993000 0! #6993500 1! #6993600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6994000 0! #6994500 1! #6994600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6995000 0! #6995500 1! #6995600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6996000 0! #6996500 1! #6996600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6997000 0! #6997500 1! #6997600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #6998000 0! #6998500 1! #6998600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #6999000 0! #6999500 1! #6999600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7000000 0! #7000500 1! #7000600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7001000 0! #7001500 1! #7001600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7002000 0! #7002500 1! #7002600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7003000 0! #7003500 1! #7003600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7004000 0! #7004500 1! #7004600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7005000 0! #7005500 1! #7005600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7006000 0! #7006500 1! #7006600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7007000 0! #7007500 1! #7007600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7008000 0! #7008500 1! #7008600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7009000 0! #7009500 1! #7009600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7010000 0! #7010500 1! #7010600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7011000 0! #7011500 1! #7011600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7012000 0! #7012500 1! #7012600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7013000 0! #7013500 1! #7013600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7014000 0! #7014500 1! #7014600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7015000 0! #7015500 1! #7015600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7016000 0! #7016500 1! #7016600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7017000 0! #7017500 1! #7017600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7018000 0! #7018500 1! #7018600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7019000 0! #7019500 1! #7019600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7020000 0! #7020500 1! #7020600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7021000 0! #7021500 1! #7021600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7022000 0! #7022500 1! #7022600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7023000 0! #7023500 1! #7023600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7024000 0! #7024500 1! #7024600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7025000 0! #7025500 1! #7025600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7026000 0! #7026500 1! #7026600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7027000 0! #7027500 1! #7027600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7028000 0! #7028500 1! #7028600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7029000 0! #7029500 1! #7029600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7030000 0! #7030500 1! #7030600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7031000 0! #7031500 1! #7031600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7032000 0! #7032500 1! #7032600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7033000 0! #7033500 1! #7033600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7034000 0! #7034500 1! #7034600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7035000 0! #7035500 1! #7035600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7036000 0! #7036500 1! #7036600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7037000 0! #7037500 1! #7037600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7038000 0! #7038500 1! #7038600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7039000 0! #7039500 1! #7039600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7040000 0! #7040500 1! #7040600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7041000 0! #7041500 1! #7041600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7042000 0! #7042500 1! #7042600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7043000 0! #7043500 1! #7043600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7044000 0! #7044500 1! #7044600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7045000 0! #7045500 1! #7045600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7046000 0! #7046500 1! #7046600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7047000 0! #7047500 1! #7047600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7048000 0! #7048500 1! #7048600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7049000 0! #7049500 1! #7049600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7050000 0! #7050500 1! #7050600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7051000 0! #7051500 1! #7051600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7052000 0! #7052500 1! #7052600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7053000 0! #7053500 1! #7053600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7054000 0! #7054500 1! #7054600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7055000 0! #7055500 1! #7055600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7056000 0! #7056500 1! #7056600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7057000 0! #7057500 1! #7057600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7058000 0! #7058500 1! #7058600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7059000 0! #7059500 1! #7059600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7060000 0! #7060500 1! #7060600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7061000 0! #7061500 1! #7061600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7062000 0! #7062500 1! #7062600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7063000 0! #7063500 1! #7063600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7064000 0! #7064500 1! #7064600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7065000 0! #7065500 1! #7065600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7066000 0! #7066500 1! #7066600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #7066700 b111 g b1001010 c 0h #7067000 0! #7067500 1! #7067600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7068000 0! #7068500 1! #7068600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7069000 0! #7069500 1! #7069600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7070000 0! #7070500 1! #7070600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7071000 0! #7071500 1! #7071600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7072000 0! #7072500 1! #7072600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7073000 0! #7073500 1! #7073600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7074000 0! #7074500 1! #7074600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7075000 0! #7075500 1! #7075600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7076000 0! #7076500 1! #7076600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7077000 0! #7077500 1! #7077600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7078000 0! #7078500 1! #7078600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7079000 0! #7079500 1! #7079600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7080000 0! #7080500 1! #7080600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7081000 0! #7081500 1! #7081600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7082000 0! #7082500 1! #7082600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7083000 0! #7083500 1! #7083600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7084000 0! #7084500 1! #7084600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7085000 0! #7085500 1! #7085600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7086000 0! #7086500 1! #7086600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7087000 0! #7087500 1! #7087600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7088000 0! #7088500 1! #7088600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7089000 0! #7089500 1! #7089600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7090000 0! #7090500 1! #7090600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7091000 0! #7091500 1! #7091600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7092000 0! #7092500 1! #7092600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7093000 0! #7093500 1! #7093600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7094000 0! #7094500 1! #7094600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7095000 0! #7095500 1! #7095600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7096000 0! #7096500 1! #7096600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7097000 0! #7097500 1! #7097600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7098000 0! #7098500 1! #7098600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7099000 0! #7099500 1! #7099600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7100000 0! #7100500 1! #7100600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7101000 0! #7101500 1! #7101600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7102000 0! #7102500 1! #7102600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7103000 0! #7103500 1! #7103600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7104000 0! #7104500 1! #7104600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7105000 0! #7105500 1! #7105600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7106000 0! #7106500 1! #7106600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7107000 0! #7107500 1! #7107600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7108000 0! #7108500 1! #7108600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7109000 0! #7109500 1! #7109600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7110000 0! #7110500 1! #7110600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7111000 0! #7111500 1! #7111600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7112000 0! #7112500 1! #7112600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7113000 0! #7113500 1! #7113600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7114000 0! #7114500 1! #7114600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7115000 0! #7115500 1! #7115600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7116000 0! #7116500 1! #7116600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7117000 0! #7117500 1! #7117600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7118000 0! #7118500 1! #7118600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7119000 0! #7119500 1! #7119600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7120000 0! #7120500 1! #7120600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7121000 0! #7121500 1! #7121600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7122000 0! #7122500 1! #7122600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7123000 0! #7123500 1! #7123600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7124000 0! #7124500 1! #7124600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7125000 0! #7125500 1! #7125600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7126000 0! #7126500 1! #7126600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7127000 0! #7127500 1! #7127600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7128000 0! #7128500 1! #7128600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7129000 0! #7129500 1! #7129600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7130000 0! #7130500 1! #7130600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7131000 0! #7131500 1! #7131600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7132000 0! #7132500 1! #7132600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7133000 0! #7133500 1! #7133600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7134000 0! #7134500 1! #7134600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7135000 0! #7135500 1! #7135600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7136000 0! #7136500 1! #7136600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7137000 0! #7137500 1! #7137600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7138000 0! #7138500 1! #7138600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7139000 0! #7139500 1! #7139600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7140000 0! #7140500 1! #7140600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7141000 0! #7141500 1! #7141600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7142000 0! #7142500 1! #7142600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7143000 0! #7143500 1! #7143600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7144000 0! #7144500 1! #7144600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7145000 0! #7145500 1! #7145600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7146000 0! #7146500 1! #7146600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7147000 0! #7147500 1! #7147600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7148000 0! #7148500 1! #7148600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7149000 0! #7149500 1! #7149600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7150000 0! #7150500 1! #7150600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7151000 0! #7151500 1! #7151600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7152000 0! #7152500 1! #7152600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7153000 0! #7153500 1! #7153600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7154000 0! #7154500 1! #7154600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7155000 0! #7155500 1! #7155600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7156000 0! #7156500 1! #7156600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7157000 0! #7157500 1! #7157600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7158000 0! #7158500 1! #7158600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7159000 0! #7159500 1! #7159600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7160000 0! #7160500 1! #7160600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7161000 0! #7161500 1! #7161600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7162000 0! #7162500 1! #7162600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7163000 0! #7163500 1! #7163600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7164000 0! #7164500 1! #7164600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7165000 0! #7165500 1! #7165600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7166000 0! #7166500 1! #7166600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7167000 0! #7167500 1! #7167600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7168000 0! #7168500 1! #7168600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #7168700 1j 1i b100 q 1O #7169000 0! #7169500 1! #7169600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7170000 0! #7170500 1! #7170600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7171000 0! #7171500 1! #7171600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H b1000001 C #7172000 0! #7172500 1! #7172600 b1000001 J xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7173000 0! #7173500 1! #7173600 1E 1F 1G b1011010 D 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 0@ 1A 1B b10000000 C 1H #7174000 0! #7174500 1! #7174600 xE bx D x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7174700 1E 1F 1G b1010000 D 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B b1000001 C 1H #7175000 0! #7175500 1! #7175600 xE bx D x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7176000 0! #7176500 1! #7176600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H b1000011 C #7177000 0! #7177500 1! #7177600 b1000011 J xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7178000 0! #7178500 1! #7178600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7179000 0! #7179500 1! #7179600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7180000 0! #7180500 1! #7180600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7181000 0! #7181500 1! #7181600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7182000 0! #7182500 1! #7182600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7183000 0! #7183500 1! #7183600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7184000 0! #7184500 1! #7184600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7185000 0! #7185500 1! #7185600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7186000 0! #7186500 1! #7186600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7187000 0! #7187500 1! #7187600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7188000 0! #7188500 1! #7188600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7189000 0! #7189500 1! #7189600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7190000 0! #7190500 1! #7190600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7191000 0! #7191500 1! #7191600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7192000 0! #7192500 1! #7192600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7193000 0! #7193500 1! #7193600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7194000 0! #7194500 1! #7194600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7195000 0! #7195500 1! #7195600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7196000 0! #7196500 1! #7196600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7197000 0! #7197500 1! #7197600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7198000 0! #7198500 1! #7198600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7199000 0! #7199500 1! #7199600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7200000 0! #7200500 1! #7200600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7201000 0! #7201500 1! #7201600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7202000 0! #7202500 1! #7202600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7203000 0! #7203500 1! #7203600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7204000 0! #7204500 1! #7204600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7205000 0! #7205500 1! #7205600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7206000 0! #7206500 1! #7206600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7207000 0! #7207500 1! #7207600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7208000 0! #7208500 1! #7208600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7209000 0! #7209500 1! #7209600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7210000 0! #7210500 1! #7210600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7211000 0! #7211500 1! #7211600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7212000 0! #7212500 1! #7212600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7213000 0! #7213500 1! #7213600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7214000 0! #7214500 1! #7214600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7215000 0! #7215500 1! #7215600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7216000 0! #7216500 1! #7216600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7217000 0! #7217500 1! #7217600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7218000 0! #7218500 1! #7218600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7219000 0! #7219500 1! #7219600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7220000 0! #7220500 1! #7220600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7221000 0! #7221500 1! #7221600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7222000 0! #7222500 1! #7222600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7223000 0! #7223500 1! #7223600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7224000 0! #7224500 1! #7224600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7225000 0! #7225500 1! #7225600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7226000 0! #7226500 1! #7226600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7227000 0! #7227500 1! #7227600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7228000 0! #7228500 1! #7228600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7229000 0! #7229500 1! #7229600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7230000 0! #7230500 1! #7230600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7231000 0! #7231500 1! #7231600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7232000 0! #7232500 1! #7232600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7233000 0! #7233500 1! #7233600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7234000 0! #7234500 1! #7234600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7235000 0! #7235500 1! #7235600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7236000 0! #7236500 1! #7236600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7237000 0! #7237500 1! #7237600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7238000 0! #7238500 1! #7238600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7239000 0! #7239500 1! #7239600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7240000 0! #7240500 1! #7240600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7241000 0! #7241500 1! #7241600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7242000 0! #7242500 1! #7242600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7243000 0! #7243500 1! #7243600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7244000 0! #7244500 1! #7244600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7245000 0! #7245500 1! #7245600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7246000 0! #7246500 1! #7246600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7247000 0! #7247500 1! #7247600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7248000 0! #7248500 1! #7248600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7249000 0! #7249500 1! #7249600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7250000 0! #7250500 1! #7250600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7251000 0! #7251500 1! #7251600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7252000 0! #7252500 1! #7252600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7253000 0! #7253500 1! #7253600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7254000 0! #7254500 1! #7254600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7255000 0! #7255500 1! #7255600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7256000 0! #7256500 1! #7256600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7257000 0! #7257500 1! #7257600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7258000 0! #7258500 1! #7258600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7259000 0! #7259500 1! #7259600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7260000 0! #7260500 1! #7260600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7261000 0! #7261500 1! #7261600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7262000 0! #7262500 1! #7262600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7263000 0! #7263500 1! #7263600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7264000 0! #7264500 1! #7264600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7265000 0! #7265500 1! #7265600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7266000 0! #7266500 1! #7266600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7267000 0! #7267500 1! #7267600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7268000 0! #7268500 1! #7268600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7269000 0! #7269500 1! #7269600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7270000 0! #7270500 1! #7270600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0Q 0O #7271000 0! #7271500 1! #7271600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7272000 0! #7272500 1! #7272600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7273000 0! #7273500 1! #7273600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7274000 0! #7274500 1! #7274600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7275000 0! #7275500 1! #7275600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7276000 0! #7276500 1! #7276600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7277000 0! #7277500 1! #7277600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7278000 0! #7278500 1! #7278600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7279000 0! #7279500 1! #7279600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7280000 0! #7280500 1! #7280600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7281000 0! #7281500 1! #7281600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7282000 0! #7282500 1! #7282600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7283000 0! #7283500 1! #7283600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7284000 0! #7284500 1! #7284600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7285000 0! #7285500 1! #7285600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7286000 0! #7286500 1! #7286600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7287000 0! #7287500 1! #7287600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7288000 0! #7288500 1! #7288600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7289000 0! #7289500 1! #7289600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7290000 0! #7290500 1! #7290600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7291000 0! #7291500 1! #7291600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7292000 0! #7292500 1! #7292600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7293000 0! #7293500 1! #7293600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7294000 0! #7294500 1! #7294600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7295000 0! #7295500 1! #7295600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7296000 0! #7296500 1! #7296600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7297000 0! #7297500 1! #7297600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7298000 0! #7298500 1! #7298600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7299000 0! #7299500 1! #7299600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7300000 0! #7300500 1! #7300600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7301000 0! #7301500 1! #7301600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7302000 0! #7302500 1! #7302600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7303000 0! #7303500 1! #7303600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7304000 0! #7304500 1! #7304600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7305000 0! #7305500 1! #7305600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7306000 0! #7306500 1! #7306600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7307000 0! #7307500 1! #7307600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7308000 0! #7308500 1! #7308600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7309000 0! #7309500 1! #7309600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7310000 0! #7310500 1! #7310600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7311000 0! #7311500 1! #7311600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7312000 0! #7312500 1! #7312600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7313000 0! #7313500 1! #7313600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7314000 0! #7314500 1! #7314600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7315000 0! #7315500 1! #7315600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7316000 0! #7316500 1! #7316600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7317000 0! #7317500 1! #7317600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7318000 0! #7318500 1! #7318600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7319000 0! #7319500 1! #7319600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7320000 0! #7320500 1! #7320600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7321000 0! #7321500 1! #7321600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #7321700 b10010100 c #7322000 0! #7322500 1! #7322600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7323000 0! #7323500 1! #7323600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7324000 0! #7324500 1! #7324600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7325000 0! #7325500 1! #7325600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7326000 0! #7326500 1! #7326600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7327000 0! #7327500 1! #7327600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7328000 0! #7328500 1! #7328600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7329000 0! #7329500 1! #7329600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7330000 0! #7330500 1! #7330600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7331000 0! #7331500 1! #7331600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7332000 0! #7332500 1! #7332600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7333000 0! #7333500 1! #7333600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7334000 0! #7334500 1! #7334600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7335000 0! #7335500 1! #7335600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7336000 0! #7336500 1! #7336600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7337000 0! #7337500 1! #7337600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7338000 0! #7338500 1! #7338600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7339000 0! #7339500 1! #7339600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7340000 0! #7340500 1! #7340600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7341000 0! #7341500 1! #7341600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7342000 0! #7342500 1! #7342600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7343000 0! #7343500 1! #7343600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7344000 0! #7344500 1! #7344600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7345000 0! #7345500 1! #7345600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7346000 0! #7346500 1! #7346600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7347000 0! #7347500 1! #7347600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7348000 0! #7348500 1! #7348600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7349000 0! #7349500 1! #7349600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7350000 0! #7350500 1! #7350600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7351000 0! #7351500 1! #7351600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7352000 0! #7352500 1! #7352600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7353000 0! #7353500 1! #7353600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7354000 0! #7354500 1! #7354600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7355000 0! #7355500 1! #7355600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7356000 0! #7356500 1! #7356600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7357000 0! #7357500 1! #7357600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7358000 0! #7358500 1! #7358600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7359000 0! #7359500 1! #7359600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7360000 0! #7360500 1! #7360600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7361000 0! #7361500 1! #7361600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7362000 0! #7362500 1! #7362600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7363000 0! #7363500 1! #7363600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7364000 0! #7364500 1! #7364600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7365000 0! #7365500 1! #7365600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7366000 0! #7366500 1! #7366600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7367000 0! #7367500 1! #7367600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7368000 0! #7368500 1! #7368600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7369000 0! #7369500 1! #7369600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7370000 0! #7370500 1! #7370600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7371000 0! #7371500 1! #7371600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7372000 0! #7372500 1! #7372600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7373000 0! #7373500 1! #7373600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7374000 0! #7374500 1! #7374600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7375000 0! #7375500 1! #7375600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7376000 0! #7376500 1! #7376600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7377000 0! #7377500 1! #7377600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7378000 0! #7378500 1! #7378600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7379000 0! #7379500 1! #7379600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7380000 0! #7380500 1! #7380600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7381000 0! #7381500 1! #7381600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7382000 0! #7382500 1! #7382600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7383000 0! #7383500 1! #7383600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7384000 0! #7384500 1! #7384600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7385000 0! #7385500 1! #7385600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7386000 0! #7386500 1! #7386600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7387000 0! #7387500 1! #7387600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7388000 0! #7388500 1! #7388600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7389000 0! #7389500 1! #7389600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7390000 0! #7390500 1! #7390600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7391000 0! #7391500 1! #7391600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7392000 0! #7392500 1! #7392600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7393000 0! #7393500 1! #7393600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7394000 0! #7394500 1! #7394600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7395000 0! #7395500 1! #7395600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7396000 0! #7396500 1! #7396600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7397000 0! #7397500 1! #7397600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7398000 0! #7398500 1! #7398600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7399000 0! #7399500 1! #7399600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7400000 0! #7400500 1! #7400600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7401000 0! #7401500 1! #7401600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7402000 0! #7402500 1! #7402600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7403000 0! #7403500 1! #7403600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7404000 0! #7404500 1! #7404600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7405000 0! #7405500 1! #7405600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7406000 0! #7406500 1! #7406600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7407000 0! #7407500 1! #7407600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7408000 0! #7408500 1! #7408600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7409000 0! #7409500 1! #7409600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7410000 0! #7410500 1! #7410600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7411000 0! #7411500 1! #7411600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7412000 0! #7412500 1! #7412600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7413000 0! #7413500 1! #7413600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7414000 0! #7414500 1! #7414600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7415000 0! #7415500 1! #7415600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7416000 0! #7416500 1! #7416600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7417000 0! #7417500 1! #7417600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7418000 0! #7418500 1! #7418600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7419000 0! #7419500 1! #7419600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7420000 0! #7420500 1! #7420600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7421000 0! #7421500 1! #7421600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7422000 0! #7422500 1! #7422600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7423000 0! #7423500 1! #7423600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #7423700 0i #7424000 0! #7424500 1! #7424600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7425000 0! #7425500 1! #7425600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7426000 0! #7426500 1! #7426600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7427000 0! #7427500 1! #7427600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7428000 0! #7428500 1! #7428600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7429000 0! #7429500 1! #7429600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7430000 0! #7430500 1! #7430600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7431000 0! #7431500 1! #7431600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7432000 0! #7432500 1! #7432600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7433000 0! #7433500 1! #7433600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7434000 0! #7434500 1! #7434600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7435000 0! #7435500 1! #7435600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7436000 0! #7436500 1! #7436600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7437000 0! #7437500 1! #7437600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7438000 0! #7438500 1! #7438600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7439000 0! #7439500 1! #7439600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7440000 0! #7440500 1! #7440600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7441000 0! #7441500 1! #7441600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7442000 0! #7442500 1! #7442600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7443000 0! #7443500 1! #7443600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7444000 0! #7444500 1! #7444600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7445000 0! #7445500 1! #7445600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7446000 0! #7446500 1! #7446600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7447000 0! #7447500 1! #7447600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7448000 0! #7448500 1! #7448600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7449000 0! #7449500 1! #7449600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7450000 0! #7450500 1! #7450600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7451000 0! #7451500 1! #7451600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7452000 0! #7452500 1! #7452600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7453000 0! #7453500 1! #7453600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7454000 0! #7454500 1! #7454600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7455000 0! #7455500 1! #7455600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7456000 0! #7456500 1! #7456600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7457000 0! #7457500 1! #7457600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7458000 0! #7458500 1! #7458600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7459000 0! #7459500 1! #7459600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7460000 0! #7460500 1! #7460600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7461000 0! #7461500 1! #7461600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7462000 0! #7462500 1! #7462600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7463000 0! #7463500 1! #7463600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7464000 0! #7464500 1! #7464600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7465000 0! #7465500 1! #7465600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7466000 0! #7466500 1! #7466600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7467000 0! #7467500 1! #7467600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7468000 0! #7468500 1! #7468600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7469000 0! #7469500 1! #7469600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7470000 0! #7470500 1! #7470600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7471000 0! #7471500 1! #7471600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7472000 0! #7472500 1! #7472600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7473000 0! #7473500 1! #7473600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7474000 0! #7474500 1! #7474600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7475000 0! #7475500 1! #7475600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7476000 0! #7476500 1! #7476600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7477000 0! #7477500 1! #7477600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7478000 0! #7478500 1! #7478600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7479000 0! #7479500 1! #7479600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7480000 0! #7480500 1! #7480600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7481000 0! #7481500 1! #7481600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7482000 0! #7482500 1! #7482600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7483000 0! #7483500 1! #7483600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7484000 0! #7484500 1! #7484600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7485000 0! #7485500 1! #7485600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7486000 0! #7486500 1! #7486600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7487000 0! #7487500 1! #7487600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7488000 0! #7488500 1! #7488600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7489000 0! #7489500 1! #7489600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7490000 0! #7490500 1! #7490600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7491000 0! #7491500 1! #7491600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7492000 0! #7492500 1! #7492600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7493000 0! #7493500 1! #7493600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7494000 0! #7494500 1! #7494600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7495000 0! #7495500 1! #7495600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7496000 0! #7496500 1! #7496600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7497000 0! #7497500 1! #7497600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7498000 0! #7498500 1! #7498600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7499000 0! #7499500 1! #7499600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7500000 0! #7500500 1! #7500600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7501000 0! #7501500 1! #7501600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7502000 0! #7502500 1! #7502600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7503000 0! #7503500 1! #7503600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7504000 0! #7504500 1! #7504600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7505000 0! #7505500 1! #7505600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7506000 0! #7506500 1! #7506600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7507000 0! #7507500 1! #7507600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7508000 0! #7508500 1! #7508600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7509000 0! #7509500 1! #7509600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7510000 0! #7510500 1! #7510600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7511000 0! #7511500 1! #7511600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7512000 0! #7512500 1! #7512600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7513000 0! #7513500 1! #7513600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7514000 0! #7514500 1! #7514600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7515000 0! #7515500 1! #7515600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7516000 0! #7516500 1! #7516600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7517000 0! #7517500 1! #7517600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7518000 0! #7518500 1! #7518600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7519000 0! #7519500 1! #7519600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7520000 0! #7520500 1! #7520600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7521000 0! #7521500 1! #7521600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7522000 0! #7522500 1! #7522600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7523000 0! #7523500 1! #7523600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7524000 0! #7524500 1! #7524600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7525000 0! #7525500 1! #7525600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1Q 1O #7526000 0! #7526500 1! #7526600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7527000 0! #7527500 1! #7527600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7528000 0! #7528500 1! #7528600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7529000 0! #7529500 1! #7529600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7530000 0! #7530500 1! #7530600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7531000 0! #7531500 1! #7531600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7532000 0! #7532500 1! #7532600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7533000 0! #7533500 1! #7533600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7534000 0! #7534500 1! #7534600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7535000 0! #7535500 1! #7535600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7536000 0! #7536500 1! #7536600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7537000 0! #7537500 1! #7537600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7538000 0! #7538500 1! #7538600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7539000 0! #7539500 1! #7539600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7540000 0! #7540500 1! #7540600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7541000 0! #7541500 1! #7541600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7542000 0! #7542500 1! #7542600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7543000 0! #7543500 1! #7543600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7544000 0! #7544500 1! #7544600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7545000 0! #7545500 1! #7545600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7546000 0! #7546500 1! #7546600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7547000 0! #7547500 1! #7547600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7548000 0! #7548500 1! #7548600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7549000 0! #7549500 1! #7549600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7550000 0! #7550500 1! #7550600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7551000 0! #7551500 1! #7551600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7552000 0! #7552500 1! #7552600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7553000 0! #7553500 1! #7553600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7554000 0! #7554500 1! #7554600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7555000 0! #7555500 1! #7555600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7556000 0! #7556500 1! #7556600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7557000 0! #7557500 1! #7557600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7558000 0! #7558500 1! #7558600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7559000 0! #7559500 1! #7559600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7560000 0! #7560500 1! #7560600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7561000 0! #7561500 1! #7561600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7562000 0! #7562500 1! #7562600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7563000 0! #7563500 1! #7563600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7564000 0! #7564500 1! #7564600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7565000 0! #7565500 1! #7565600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7566000 0! #7566500 1! #7566600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7567000 0! #7567500 1! #7567600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7568000 0! #7568500 1! #7568600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7569000 0! #7569500 1! #7569600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7570000 0! #7570500 1! #7570600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7571000 0! #7571500 1! #7571600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7572000 0! #7572500 1! #7572600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7573000 0! #7573500 1! #7573600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7574000 0! #7574500 1! #7574600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7575000 0! #7575500 1! #7575600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7576000 0! #7576500 1! #7576600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #7576700 b110 g b101001 c #7577000 0! #7577500 1! #7577600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7578000 0! #7578500 1! #7578600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7579000 0! #7579500 1! #7579600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7580000 0! #7580500 1! #7580600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7581000 0! #7581500 1! #7581600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7582000 0! #7582500 1! #7582600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7583000 0! #7583500 1! #7583600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7584000 0! #7584500 1! #7584600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7585000 0! #7585500 1! #7585600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7586000 0! #7586500 1! #7586600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7587000 0! #7587500 1! #7587600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7588000 0! #7588500 1! #7588600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7589000 0! #7589500 1! #7589600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7590000 0! #7590500 1! #7590600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7591000 0! #7591500 1! #7591600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7592000 0! #7592500 1! #7592600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7593000 0! #7593500 1! #7593600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7594000 0! #7594500 1! #7594600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7595000 0! #7595500 1! #7595600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7596000 0! #7596500 1! #7596600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7597000 0! #7597500 1! #7597600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7598000 0! #7598500 1! #7598600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7599000 0! #7599500 1! #7599600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7600000 0! #7600500 1! #7600600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7601000 0! #7601500 1! #7601600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7602000 0! #7602500 1! #7602600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7603000 0! #7603500 1! #7603600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7604000 0! #7604500 1! #7604600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7605000 0! #7605500 1! #7605600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7606000 0! #7606500 1! #7606600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7607000 0! #7607500 1! #7607600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7608000 0! #7608500 1! #7608600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7609000 0! #7609500 1! #7609600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7610000 0! #7610500 1! #7610600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7611000 0! #7611500 1! #7611600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7612000 0! #7612500 1! #7612600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7613000 0! #7613500 1! #7613600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7614000 0! #7614500 1! #7614600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7615000 0! #7615500 1! #7615600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7616000 0! #7616500 1! #7616600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7617000 0! #7617500 1! #7617600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7618000 0! #7618500 1! #7618600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7619000 0! #7619500 1! #7619600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7620000 0! #7620500 1! #7620600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7621000 0! #7621500 1! #7621600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7622000 0! #7622500 1! #7622600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7623000 0! #7623500 1! #7623600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7624000 0! #7624500 1! #7624600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7625000 0! #7625500 1! #7625600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7626000 0! #7626500 1! #7626600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7627000 0! #7627500 1! #7627600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7628000 0! #7628500 1! #7628600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7629000 0! #7629500 1! #7629600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7630000 0! #7630500 1! #7630600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7631000 0! #7631500 1! #7631600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7632000 0! #7632500 1! #7632600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7633000 0! #7633500 1! #7633600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7634000 0! #7634500 1! #7634600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7635000 0! #7635500 1! #7635600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7636000 0! #7636500 1! #7636600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7637000 0! #7637500 1! #7637600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7638000 0! #7638500 1! #7638600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7639000 0! #7639500 1! #7639600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7640000 0! #7640500 1! #7640600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7641000 0! #7641500 1! #7641600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7642000 0! #7642500 1! #7642600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7643000 0! #7643500 1! #7643600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7644000 0! #7644500 1! #7644600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7645000 0! #7645500 1! #7645600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7646000 0! #7646500 1! #7646600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7647000 0! #7647500 1! #7647600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7648000 0! #7648500 1! #7648600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7649000 0! #7649500 1! #7649600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7650000 0! #7650500 1! #7650600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7651000 0! #7651500 1! #7651600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7652000 0! #7652500 1! #7652600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7653000 0! #7653500 1! #7653600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7654000 0! #7654500 1! #7654600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7655000 0! #7655500 1! #7655600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7656000 0! #7656500 1! #7656600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7657000 0! #7657500 1! #7657600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7658000 0! #7658500 1! #7658600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7659000 0! #7659500 1! #7659600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7660000 0! #7660500 1! #7660600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7661000 0! #7661500 1! #7661600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7662000 0! #7662500 1! #7662600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7663000 0! #7663500 1! #7663600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7664000 0! #7664500 1! #7664600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7665000 0! #7665500 1! #7665600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7666000 0! #7666500 1! #7666600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7667000 0! #7667500 1! #7667600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7668000 0! #7668500 1! #7668600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7669000 0! #7669500 1! #7669600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7670000 0! #7670500 1! #7670600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7671000 0! #7671500 1! #7671600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7672000 0! #7672500 1! #7672600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7673000 0! #7673500 1! #7673600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7674000 0! #7674500 1! #7674600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7675000 0! #7675500 1! #7675600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7676000 0! #7676500 1! #7676600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7677000 0! #7677500 1! #7677600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7678000 0! #7678500 1! #7678600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #7679000 0! #7679500 1! #7679600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7680000 0! #7680500 1! #7680600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7681000 0! #7681500 1! #7681600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7682000 0! #7682500 1! #7682600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7683000 0! #7683500 1! #7683600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7684000 0! #7684500 1! #7684600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7685000 0! #7685500 1! #7685600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7686000 0! #7686500 1! #7686600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7687000 0! #7687500 1! #7687600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7688000 0! #7688500 1! #7688600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7689000 0! #7689500 1! #7689600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7690000 0! #7690500 1! #7690600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7691000 0! #7691500 1! #7691600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7692000 0! #7692500 1! #7692600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7693000 0! #7693500 1! #7693600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7694000 0! #7694500 1! #7694600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7695000 0! #7695500 1! #7695600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7696000 0! #7696500 1! #7696600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7697000 0! #7697500 1! #7697600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7698000 0! #7698500 1! #7698600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7699000 0! #7699500 1! #7699600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7700000 0! #7700500 1! #7700600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7701000 0! #7701500 1! #7701600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7702000 0! #7702500 1! #7702600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7703000 0! #7703500 1! #7703600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7704000 0! #7704500 1! #7704600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7705000 0! #7705500 1! #7705600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7706000 0! #7706500 1! #7706600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7707000 0! #7707500 1! #7707600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7708000 0! #7708500 1! #7708600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7709000 0! #7709500 1! #7709600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7710000 0! #7710500 1! #7710600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7711000 0! #7711500 1! #7711600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7712000 0! #7712500 1! #7712600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7713000 0! #7713500 1! #7713600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7714000 0! #7714500 1! #7714600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7715000 0! #7715500 1! #7715600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7716000 0! #7716500 1! #7716600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7717000 0! #7717500 1! #7717600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7718000 0! #7718500 1! #7718600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7719000 0! #7719500 1! #7719600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7720000 0! #7720500 1! #7720600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7721000 0! #7721500 1! #7721600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7722000 0! #7722500 1! #7722600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7723000 0! #7723500 1! #7723600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7724000 0! #7724500 1! #7724600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7725000 0! #7725500 1! #7725600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7726000 0! #7726500 1! #7726600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7727000 0! #7727500 1! #7727600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7728000 0! #7728500 1! #7728600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7729000 0! #7729500 1! #7729600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7730000 0! #7730500 1! #7730600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7731000 0! #7731500 1! #7731600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7732000 0! #7732500 1! #7732600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7733000 0! #7733500 1! #7733600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7734000 0! #7734500 1! #7734600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7735000 0! #7735500 1! #7735600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7736000 0! #7736500 1! #7736600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7737000 0! #7737500 1! #7737600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7738000 0! #7738500 1! #7738600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7739000 0! #7739500 1! #7739600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7740000 0! #7740500 1! #7740600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7741000 0! #7741500 1! #7741600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7742000 0! #7742500 1! #7742600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7743000 0! #7743500 1! #7743600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7744000 0! #7744500 1! #7744600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7745000 0! #7745500 1! #7745600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7746000 0! #7746500 1! #7746600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7747000 0! #7747500 1! #7747600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7748000 0! #7748500 1! #7748600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7749000 0! #7749500 1! #7749600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7750000 0! #7750500 1! #7750600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7751000 0! #7751500 1! #7751600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7752000 0! #7752500 1! #7752600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7753000 0! #7753500 1! #7753600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7754000 0! #7754500 1! #7754600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7755000 0! #7755500 1! #7755600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7756000 0! #7756500 1! #7756600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7757000 0! #7757500 1! #7757600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7758000 0! #7758500 1! #7758600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7759000 0! #7759500 1! #7759600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7760000 0! #7760500 1! #7760600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7761000 0! #7761500 1! #7761600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7762000 0! #7762500 1! #7762600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7763000 0! #7763500 1! #7763600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7764000 0! #7764500 1! #7764600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7765000 0! #7765500 1! #7765600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7766000 0! #7766500 1! #7766600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7767000 0! #7767500 1! #7767600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7768000 0! #7768500 1! #7768600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7769000 0! #7769500 1! #7769600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7770000 0! #7770500 1! #7770600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7771000 0! #7771500 1! #7771600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7772000 0! #7772500 1! #7772600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7773000 0! #7773500 1! #7773600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7774000 0! #7774500 1! #7774600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7775000 0! #7775500 1! #7775600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7776000 0! #7776500 1! #7776600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7777000 0! #7777500 1! #7777600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7778000 0! #7778500 1! #7778600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7779000 0! #7779500 1! #7779600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7780000 0! #7780500 1! #7780600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0Q 0O #7781000 0! #7781500 1! #7781600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7782000 0! #7782500 1! #7782600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7783000 0! #7783500 1! #7783600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7784000 0! #7784500 1! #7784600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7785000 0! #7785500 1! #7785600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7786000 0! #7786500 1! #7786600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7787000 0! #7787500 1! #7787600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7788000 0! #7788500 1! #7788600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7789000 0! #7789500 1! #7789600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7790000 0! #7790500 1! #7790600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7791000 0! #7791500 1! #7791600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7792000 0! #7792500 1! #7792600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7793000 0! #7793500 1! #7793600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7794000 0! #7794500 1! #7794600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7795000 0! #7795500 1! #7795600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7796000 0! #7796500 1! #7796600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7797000 0! #7797500 1! #7797600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7798000 0! #7798500 1! #7798600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7799000 0! #7799500 1! #7799600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7800000 0! #7800500 1! #7800600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7801000 0! #7801500 1! #7801600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7802000 0! #7802500 1! #7802600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7803000 0! #7803500 1! #7803600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7804000 0! #7804500 1! #7804600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7805000 0! #7805500 1! #7805600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7806000 0! #7806500 1! #7806600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7807000 0! #7807500 1! #7807600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7808000 0! #7808500 1! #7808600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7809000 0! #7809500 1! #7809600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7810000 0! #7810500 1! #7810600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7811000 0! #7811500 1! #7811600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7812000 0! #7812500 1! #7812600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7813000 0! #7813500 1! #7813600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7814000 0! #7814500 1! #7814600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7815000 0! #7815500 1! #7815600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7816000 0! #7816500 1! #7816600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7817000 0! #7817500 1! #7817600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7818000 0! #7818500 1! #7818600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7819000 0! #7819500 1! #7819600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7820000 0! #7820500 1! #7820600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7821000 0! #7821500 1! #7821600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7822000 0! #7822500 1! #7822600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7823000 0! #7823500 1! #7823600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7824000 0! #7824500 1! #7824600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7825000 0! #7825500 1! #7825600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7826000 0! #7826500 1! #7826600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7827000 0! #7827500 1! #7827600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7828000 0! #7828500 1! #7828600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7829000 0! #7829500 1! #7829600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7830000 0! #7830500 1! #7830600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7831000 0! #7831500 1! #7831600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #7831700 b101 g b1010010 c #7832000 0! #7832500 1! #7832600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7833000 0! #7833500 1! #7833600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7834000 0! #7834500 1! #7834600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7835000 0! #7835500 1! #7835600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7836000 0! #7836500 1! #7836600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7837000 0! #7837500 1! #7837600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7838000 0! #7838500 1! #7838600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7839000 0! #7839500 1! #7839600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7840000 0! #7840500 1! #7840600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7841000 0! #7841500 1! #7841600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7842000 0! #7842500 1! #7842600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7843000 0! #7843500 1! #7843600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7844000 0! #7844500 1! #7844600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7845000 0! #7845500 1! #7845600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7846000 0! #7846500 1! #7846600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7847000 0! #7847500 1! #7847600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7848000 0! #7848500 1! #7848600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7849000 0! #7849500 1! #7849600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7850000 0! #7850500 1! #7850600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7851000 0! #7851500 1! #7851600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7852000 0! #7852500 1! #7852600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7853000 0! #7853500 1! #7853600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7854000 0! #7854500 1! #7854600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7855000 0! #7855500 1! #7855600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7856000 0! #7856500 1! #7856600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7857000 0! #7857500 1! #7857600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7858000 0! #7858500 1! #7858600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7859000 0! #7859500 1! #7859600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7860000 0! #7860500 1! #7860600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7861000 0! #7861500 1! #7861600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7862000 0! #7862500 1! #7862600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7863000 0! #7863500 1! #7863600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7864000 0! #7864500 1! #7864600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7865000 0! #7865500 1! #7865600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7866000 0! #7866500 1! #7866600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7867000 0! #7867500 1! #7867600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7868000 0! #7868500 1! #7868600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7869000 0! #7869500 1! #7869600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7870000 0! #7870500 1! #7870600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7871000 0! #7871500 1! #7871600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7872000 0! #7872500 1! #7872600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7873000 0! #7873500 1! #7873600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7874000 0! #7874500 1! #7874600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7875000 0! #7875500 1! #7875600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7876000 0! #7876500 1! #7876600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7877000 0! #7877500 1! #7877600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7878000 0! #7878500 1! #7878600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7879000 0! #7879500 1! #7879600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7880000 0! #7880500 1! #7880600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7881000 0! #7881500 1! #7881600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7882000 0! #7882500 1! #7882600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7883000 0! #7883500 1! #7883600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7884000 0! #7884500 1! #7884600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7885000 0! #7885500 1! #7885600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7886000 0! #7886500 1! #7886600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7887000 0! #7887500 1! #7887600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7888000 0! #7888500 1! #7888600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7889000 0! #7889500 1! #7889600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7890000 0! #7890500 1! #7890600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7891000 0! #7891500 1! #7891600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7892000 0! #7892500 1! #7892600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7893000 0! #7893500 1! #7893600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7894000 0! #7894500 1! #7894600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7895000 0! #7895500 1! #7895600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7896000 0! #7896500 1! #7896600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7897000 0! #7897500 1! #7897600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7898000 0! #7898500 1! #7898600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7899000 0! #7899500 1! #7899600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7900000 0! #7900500 1! #7900600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7901000 0! #7901500 1! #7901600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7902000 0! #7902500 1! #7902600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7903000 0! #7903500 1! #7903600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7904000 0! #7904500 1! #7904600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7905000 0! #7905500 1! #7905600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7906000 0! #7906500 1! #7906600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7907000 0! #7907500 1! #7907600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7908000 0! #7908500 1! #7908600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7909000 0! #7909500 1! #7909600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7910000 0! #7910500 1! #7910600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7911000 0! #7911500 1! #7911600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7912000 0! #7912500 1! #7912600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7913000 0! #7913500 1! #7913600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7914000 0! #7914500 1! #7914600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7915000 0! #7915500 1! #7915600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7916000 0! #7916500 1! #7916600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7917000 0! #7917500 1! #7917600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7918000 0! #7918500 1! #7918600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7919000 0! #7919500 1! #7919600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7920000 0! #7920500 1! #7920600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7921000 0! #7921500 1! #7921600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7922000 0! #7922500 1! #7922600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7923000 0! #7923500 1! #7923600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7924000 0! #7924500 1! #7924600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7925000 0! #7925500 1! #7925600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7926000 0! #7926500 1! #7926600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7927000 0! #7927500 1! #7927600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7928000 0! #7928500 1! #7928600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7929000 0! #7929500 1! #7929600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7930000 0! #7930500 1! #7930600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7931000 0! #7931500 1! #7931600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7932000 0! #7932500 1! #7932600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7933000 0! #7933500 1! #7933600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #7934000 0! #7934500 1! #7934600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7935000 0! #7935500 1! #7935600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7936000 0! #7936500 1! #7936600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7937000 0! #7937500 1! #7937600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7938000 0! #7938500 1! #7938600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7939000 0! #7939500 1! #7939600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7940000 0! #7940500 1! #7940600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7941000 0! #7941500 1! #7941600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7942000 0! #7942500 1! #7942600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7943000 0! #7943500 1! #7943600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7944000 0! #7944500 1! #7944600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7945000 0! #7945500 1! #7945600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7946000 0! #7946500 1! #7946600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7947000 0! #7947500 1! #7947600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7948000 0! #7948500 1! #7948600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7949000 0! #7949500 1! #7949600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7950000 0! #7950500 1! #7950600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7951000 0! #7951500 1! #7951600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7952000 0! #7952500 1! #7952600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7953000 0! #7953500 1! #7953600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7954000 0! #7954500 1! #7954600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7955000 0! #7955500 1! #7955600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7956000 0! #7956500 1! #7956600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7957000 0! #7957500 1! #7957600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7958000 0! #7958500 1! #7958600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7959000 0! #7959500 1! #7959600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7960000 0! #7960500 1! #7960600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7961000 0! #7961500 1! #7961600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7962000 0! #7962500 1! #7962600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7963000 0! #7963500 1! #7963600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7964000 0! #7964500 1! #7964600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7965000 0! #7965500 1! #7965600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7966000 0! #7966500 1! #7966600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7967000 0! #7967500 1! #7967600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7968000 0! #7968500 1! #7968600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7969000 0! #7969500 1! #7969600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7970000 0! #7970500 1! #7970600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7971000 0! #7971500 1! #7971600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7972000 0! #7972500 1! #7972600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7973000 0! #7973500 1! #7973600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7974000 0! #7974500 1! #7974600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7975000 0! #7975500 1! #7975600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7976000 0! #7976500 1! #7976600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7977000 0! #7977500 1! #7977600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7978000 0! #7978500 1! #7978600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7979000 0! #7979500 1! #7979600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7980000 0! #7980500 1! #7980600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7981000 0! #7981500 1! #7981600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7982000 0! #7982500 1! #7982600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7983000 0! #7983500 1! #7983600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7984000 0! #7984500 1! #7984600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7985000 0! #7985500 1! #7985600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7986000 0! #7986500 1! #7986600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7987000 0! #7987500 1! #7987600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7988000 0! #7988500 1! #7988600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7989000 0! #7989500 1! #7989600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7990000 0! #7990500 1! #7990600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7991000 0! #7991500 1! #7991600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7992000 0! #7992500 1! #7992600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7993000 0! #7993500 1! #7993600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7994000 0! #7994500 1! #7994600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7995000 0! #7995500 1! #7995600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7996000 0! #7996500 1! #7996600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7997000 0! #7997500 1! #7997600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #7998000 0! #7998500 1! #7998600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #7999000 0! #7999500 1! #7999600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8000000 0! #8000500 1! #8000600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8001000 0! #8001500 1! #8001600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8002000 0! #8002500 1! #8002600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8003000 0! #8003500 1! #8003600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8004000 0! #8004500 1! #8004600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8005000 0! #8005500 1! #8005600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8006000 0! #8006500 1! #8006600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8007000 0! #8007500 1! #8007600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8008000 0! #8008500 1! #8008600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8009000 0! #8009500 1! #8009600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8010000 0! #8010500 1! #8010600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8011000 0! #8011500 1! #8011600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8012000 0! #8012500 1! #8012600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8013000 0! #8013500 1! #8013600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8014000 0! #8014500 1! #8014600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8015000 0! #8015500 1! #8015600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8016000 0! #8016500 1! #8016600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8017000 0! #8017500 1! #8017600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8018000 0! #8018500 1! #8018600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8019000 0! #8019500 1! #8019600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8020000 0! #8020500 1! #8020600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8021000 0! #8021500 1! #8021600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8022000 0! #8022500 1! #8022600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8023000 0! #8023500 1! #8023600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8024000 0! #8024500 1! #8024600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8025000 0! #8025500 1! #8025600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8026000 0! #8026500 1! #8026600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8027000 0! #8027500 1! #8027600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8028000 0! #8028500 1! #8028600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8029000 0! #8029500 1! #8029600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8030000 0! #8030500 1! #8030600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8031000 0! #8031500 1! #8031600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8032000 0! #8032500 1! #8032600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8033000 0! #8033500 1! #8033600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8034000 0! #8034500 1! #8034600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8035000 0! #8035500 1! #8035600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1Q 1O #8036000 0! #8036500 1! #8036600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8037000 0! #8037500 1! #8037600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8038000 0! #8038500 1! #8038600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8039000 0! #8039500 1! #8039600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8040000 0! #8040500 1! #8040600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8041000 0! #8041500 1! #8041600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8042000 0! #8042500 1! #8042600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8043000 0! #8043500 1! #8043600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8044000 0! #8044500 1! #8044600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8045000 0! #8045500 1! #8045600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8046000 0! #8046500 1! #8046600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8047000 0! #8047500 1! #8047600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8048000 0! #8048500 1! #8048600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8049000 0! #8049500 1! #8049600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8050000 0! #8050500 1! #8050600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8051000 0! #8051500 1! #8051600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8052000 0! #8052500 1! #8052600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8053000 0! #8053500 1! #8053600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8054000 0! #8054500 1! #8054600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8055000 0! #8055500 1! #8055600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8056000 0! #8056500 1! #8056600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8057000 0! #8057500 1! #8057600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8058000 0! #8058500 1! #8058600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8059000 0! #8059500 1! #8059600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8060000 0! #8060500 1! #8060600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8061000 0! #8061500 1! #8061600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8062000 0! #8062500 1! #8062600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8063000 0! #8063500 1! #8063600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8064000 0! #8064500 1! #8064600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8065000 0! #8065500 1! #8065600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8066000 0! #8066500 1! #8066600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8067000 0! #8067500 1! #8067600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8068000 0! #8068500 1! #8068600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8069000 0! #8069500 1! #8069600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8070000 0! #8070500 1! #8070600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8071000 0! #8071500 1! #8071600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8072000 0! #8072500 1! #8072600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8073000 0! #8073500 1! #8073600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8074000 0! #8074500 1! #8074600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8075000 0! #8075500 1! #8075600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8076000 0! #8076500 1! #8076600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8077000 0! #8077500 1! #8077600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8078000 0! #8078500 1! #8078600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8079000 0! #8079500 1! #8079600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8080000 0! #8080500 1! #8080600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8081000 0! #8081500 1! #8081600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8082000 0! #8082500 1! #8082600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8083000 0! #8083500 1! #8083600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8084000 0! #8084500 1! #8084600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8085000 0! #8085500 1! #8085600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8086000 0! #8086500 1! #8086600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #8086700 b100 g b10100101 c #8087000 0! #8087500 1! #8087600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8088000 0! #8088500 1! #8088600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8089000 0! #8089500 1! #8089600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8090000 0! #8090500 1! #8090600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8091000 0! #8091500 1! #8091600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8092000 0! #8092500 1! #8092600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8093000 0! #8093500 1! #8093600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8094000 0! #8094500 1! #8094600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8095000 0! #8095500 1! #8095600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8096000 0! #8096500 1! #8096600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8097000 0! #8097500 1! #8097600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8098000 0! #8098500 1! #8098600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8099000 0! #8099500 1! #8099600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8100000 0! #8100500 1! #8100600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8101000 0! #8101500 1! #8101600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8102000 0! #8102500 1! #8102600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8103000 0! #8103500 1! #8103600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8104000 0! #8104500 1! #8104600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8105000 0! #8105500 1! #8105600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8106000 0! #8106500 1! #8106600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8107000 0! #8107500 1! #8107600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8108000 0! #8108500 1! #8108600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8109000 0! #8109500 1! #8109600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8110000 0! #8110500 1! #8110600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8111000 0! #8111500 1! #8111600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8112000 0! #8112500 1! #8112600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8113000 0! #8113500 1! #8113600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8114000 0! #8114500 1! #8114600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8115000 0! #8115500 1! #8115600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8116000 0! #8116500 1! #8116600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8117000 0! #8117500 1! #8117600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8118000 0! #8118500 1! #8118600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8119000 0! #8119500 1! #8119600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8120000 0! #8120500 1! #8120600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8121000 0! #8121500 1! #8121600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8122000 0! #8122500 1! #8122600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8123000 0! #8123500 1! #8123600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8124000 0! #8124500 1! #8124600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8125000 0! #8125500 1! #8125600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8126000 0! #8126500 1! #8126600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8127000 0! #8127500 1! #8127600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8128000 0! #8128500 1! #8128600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8129000 0! #8129500 1! #8129600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8130000 0! #8130500 1! #8130600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8131000 0! #8131500 1! #8131600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8132000 0! #8132500 1! #8132600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8133000 0! #8133500 1! #8133600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8134000 0! #8134500 1! #8134600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8135000 0! #8135500 1! #8135600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8136000 0! #8136500 1! #8136600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8137000 0! #8137500 1! #8137600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8138000 0! #8138500 1! #8138600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8139000 0! #8139500 1! #8139600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8140000 0! #8140500 1! #8140600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8141000 0! #8141500 1! #8141600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8142000 0! #8142500 1! #8142600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8143000 0! #8143500 1! #8143600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8144000 0! #8144500 1! #8144600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8145000 0! #8145500 1! #8145600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8146000 0! #8146500 1! #8146600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8147000 0! #8147500 1! #8147600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8148000 0! #8148500 1! #8148600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8149000 0! #8149500 1! #8149600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8150000 0! #8150500 1! #8150600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8151000 0! #8151500 1! #8151600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8152000 0! #8152500 1! #8152600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8153000 0! #8153500 1! #8153600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8154000 0! #8154500 1! #8154600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8155000 0! #8155500 1! #8155600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8156000 0! #8156500 1! #8156600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8157000 0! #8157500 1! #8157600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8158000 0! #8158500 1! #8158600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8159000 0! #8159500 1! #8159600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8160000 0! #8160500 1! #8160600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8161000 0! #8161500 1! #8161600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8162000 0! #8162500 1! #8162600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8163000 0! #8163500 1! #8163600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8164000 0! #8164500 1! #8164600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8165000 0! #8165500 1! #8165600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8166000 0! #8166500 1! #8166600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8167000 0! #8167500 1! #8167600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8168000 0! #8168500 1! #8168600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8169000 0! #8169500 1! #8169600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8170000 0! #8170500 1! #8170600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8171000 0! #8171500 1! #8171600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8172000 0! #8172500 1! #8172600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8173000 0! #8173500 1! #8173600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8174000 0! #8174500 1! #8174600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8175000 0! #8175500 1! #8175600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8176000 0! #8176500 1! #8176600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8177000 0! #8177500 1! #8177600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8178000 0! #8178500 1! #8178600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8179000 0! #8179500 1! #8179600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8180000 0! #8180500 1! #8180600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8181000 0! #8181500 1! #8181600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8182000 0! #8182500 1! #8182600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8183000 0! #8183500 1! #8183600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8184000 0! #8184500 1! #8184600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8185000 0! #8185500 1! #8185600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8186000 0! #8186500 1! #8186600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8187000 0! #8187500 1! #8187600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8188000 0! #8188500 1! #8188600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #8189000 0! #8189500 1! #8189600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8190000 0! #8190500 1! #8190600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8191000 0! #8191500 1! #8191600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8192000 0! #8192500 1! #8192600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8193000 0! #8193500 1! #8193600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8194000 0! #8194500 1! #8194600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8195000 0! #8195500 1! #8195600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8196000 0! #8196500 1! #8196600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8197000 0! #8197500 1! #8197600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8198000 0! #8198500 1! #8198600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8199000 0! #8199500 1! #8199600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8200000 0! #8200500 1! #8200600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8201000 0! #8201500 1! #8201600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8202000 0! #8202500 1! #8202600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8203000 0! #8203500 1! #8203600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8204000 0! #8204500 1! #8204600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8205000 0! #8205500 1! #8205600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8206000 0! #8206500 1! #8206600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8207000 0! #8207500 1! #8207600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8208000 0! #8208500 1! #8208600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8209000 0! #8209500 1! #8209600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8210000 0! #8210500 1! #8210600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8211000 0! #8211500 1! #8211600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8212000 0! #8212500 1! #8212600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8213000 0! #8213500 1! #8213600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8214000 0! #8214500 1! #8214600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8215000 0! #8215500 1! #8215600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8216000 0! #8216500 1! #8216600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8217000 0! #8217500 1! #8217600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8218000 0! #8218500 1! #8218600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8219000 0! #8219500 1! #8219600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8220000 0! #8220500 1! #8220600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8221000 0! #8221500 1! #8221600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8222000 0! #8222500 1! #8222600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8223000 0! #8223500 1! #8223600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8224000 0! #8224500 1! #8224600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8225000 0! #8225500 1! #8225600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8226000 0! #8226500 1! #8226600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8227000 0! #8227500 1! #8227600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8228000 0! #8228500 1! #8228600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8229000 0! #8229500 1! #8229600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8230000 0! #8230500 1! #8230600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8231000 0! #8231500 1! #8231600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8232000 0! #8232500 1! #8232600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8233000 0! #8233500 1! #8233600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8234000 0! #8234500 1! #8234600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8235000 0! #8235500 1! #8235600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8236000 0! #8236500 1! #8236600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8237000 0! #8237500 1! #8237600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8238000 0! #8238500 1! #8238600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8239000 0! #8239500 1! #8239600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8240000 0! #8240500 1! #8240600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8241000 0! #8241500 1! #8241600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8242000 0! #8242500 1! #8242600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8243000 0! #8243500 1! #8243600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8244000 0! #8244500 1! #8244600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8245000 0! #8245500 1! #8245600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8246000 0! #8246500 1! #8246600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8247000 0! #8247500 1! #8247600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8248000 0! #8248500 1! #8248600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8249000 0! #8249500 1! #8249600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8250000 0! #8250500 1! #8250600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8251000 0! #8251500 1! #8251600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8252000 0! #8252500 1! #8252600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8253000 0! #8253500 1! #8253600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8254000 0! #8254500 1! #8254600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8255000 0! #8255500 1! #8255600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8256000 0! #8256500 1! #8256600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8257000 0! #8257500 1! #8257600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8258000 0! #8258500 1! #8258600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8259000 0! #8259500 1! #8259600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8260000 0! #8260500 1! #8260600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8261000 0! #8261500 1! #8261600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8262000 0! #8262500 1! #8262600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8263000 0! #8263500 1! #8263600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8264000 0! #8264500 1! #8264600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8265000 0! #8265500 1! #8265600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8266000 0! #8266500 1! #8266600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8267000 0! #8267500 1! #8267600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8268000 0! #8268500 1! #8268600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8269000 0! #8269500 1! #8269600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8270000 0! #8270500 1! #8270600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8271000 0! #8271500 1! #8271600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8272000 0! #8272500 1! #8272600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8273000 0! #8273500 1! #8273600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8274000 0! #8274500 1! #8274600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8275000 0! #8275500 1! #8275600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8276000 0! #8276500 1! #8276600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8277000 0! #8277500 1! #8277600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8278000 0! #8278500 1! #8278600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8279000 0! #8279500 1! #8279600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8280000 0! #8280500 1! #8280600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8281000 0! #8281500 1! #8281600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8282000 0! #8282500 1! #8282600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8283000 0! #8283500 1! #8283600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8284000 0! #8284500 1! #8284600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8285000 0! #8285500 1! #8285600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8286000 0! #8286500 1! #8286600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8287000 0! #8287500 1! #8287600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8288000 0! #8288500 1! #8288600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8289000 0! #8289500 1! #8289600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8290000 0! #8290500 1! #8290600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8291000 0! #8291500 1! #8291600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8292000 0! #8292500 1! #8292600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8293000 0! #8293500 1! #8293600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8294000 0! #8294500 1! #8294600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8295000 0! #8295500 1! #8295600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8296000 0! #8296500 1! #8296600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8297000 0! #8297500 1! #8297600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8298000 0! #8298500 1! #8298600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8299000 0! #8299500 1! #8299600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8300000 0! #8300500 1! #8300600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8301000 0! #8301500 1! #8301600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8302000 0! #8302500 1! #8302600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8303000 0! #8303500 1! #8303600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8304000 0! #8304500 1! #8304600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8305000 0! #8305500 1! #8305600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8306000 0! #8306500 1! #8306600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8307000 0! #8307500 1! #8307600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8308000 0! #8308500 1! #8308600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8309000 0! #8309500 1! #8309600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8310000 0! #8310500 1! #8310600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8311000 0! #8311500 1! #8311600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8312000 0! #8312500 1! #8312600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8313000 0! #8313500 1! #8313600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8314000 0! #8314500 1! #8314600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8315000 0! #8315500 1! #8315600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8316000 0! #8316500 1! #8316600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8317000 0! #8317500 1! #8317600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8318000 0! #8318500 1! #8318600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8319000 0! #8319500 1! #8319600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8320000 0! #8320500 1! #8320600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8321000 0! #8321500 1! #8321600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8322000 0! #8322500 1! #8322600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8323000 0! #8323500 1! #8323600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8324000 0! #8324500 1! #8324600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8325000 0! #8325500 1! #8325600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8326000 0! #8326500 1! #8326600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8327000 0! #8327500 1! #8327600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8328000 0! #8328500 1! #8328600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8329000 0! #8329500 1! #8329600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8330000 0! #8330500 1! #8330600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8331000 0! #8331500 1! #8331600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8332000 0! #8332500 1! #8332600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8333000 0! #8333500 1! #8333600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8334000 0! #8334500 1! #8334600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8335000 0! #8335500 1! #8335600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8336000 0! #8336500 1! #8336600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8337000 0! #8337500 1! #8337600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8338000 0! #8338500 1! #8338600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8339000 0! #8339500 1! #8339600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8340000 0! #8340500 1! #8340600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8341000 0! #8341500 1! #8341600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #8341700 b11 g b1001011 c #8342000 0! #8342500 1! #8342600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8343000 0! #8343500 1! #8343600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8344000 0! #8344500 1! #8344600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8345000 0! #8345500 1! #8345600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8346000 0! #8346500 1! #8346600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8347000 0! #8347500 1! #8347600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8348000 0! #8348500 1! #8348600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8349000 0! #8349500 1! #8349600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8350000 0! #8350500 1! #8350600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8351000 0! #8351500 1! #8351600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8352000 0! #8352500 1! #8352600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8353000 0! #8353500 1! #8353600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8354000 0! #8354500 1! #8354600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8355000 0! #8355500 1! #8355600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8356000 0! #8356500 1! #8356600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8357000 0! #8357500 1! #8357600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8358000 0! #8358500 1! #8358600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8359000 0! #8359500 1! #8359600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8360000 0! #8360500 1! #8360600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8361000 0! #8361500 1! #8361600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8362000 0! #8362500 1! #8362600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8363000 0! #8363500 1! #8363600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8364000 0! #8364500 1! #8364600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8365000 0! #8365500 1! #8365600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8366000 0! #8366500 1! #8366600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8367000 0! #8367500 1! #8367600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8368000 0! #8368500 1! #8368600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8369000 0! #8369500 1! #8369600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8370000 0! #8370500 1! #8370600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8371000 0! #8371500 1! #8371600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8372000 0! #8372500 1! #8372600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8373000 0! #8373500 1! #8373600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8374000 0! #8374500 1! #8374600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8375000 0! #8375500 1! #8375600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8376000 0! #8376500 1! #8376600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8377000 0! #8377500 1! #8377600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8378000 0! #8378500 1! #8378600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8379000 0! #8379500 1! #8379600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8380000 0! #8380500 1! #8380600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8381000 0! #8381500 1! #8381600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8382000 0! #8382500 1! #8382600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8383000 0! #8383500 1! #8383600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8384000 0! #8384500 1! #8384600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8385000 0! #8385500 1! #8385600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8386000 0! #8386500 1! #8386600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8387000 0! #8387500 1! #8387600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8388000 0! #8388500 1! #8388600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8389000 0! #8389500 1! #8389600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8390000 0! #8390500 1! #8390600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8391000 0! #8391500 1! #8391600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8392000 0! #8392500 1! #8392600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8393000 0! #8393500 1! #8393600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8394000 0! #8394500 1! #8394600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8395000 0! #8395500 1! #8395600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8396000 0! #8396500 1! #8396600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8397000 0! #8397500 1! #8397600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8398000 0! #8398500 1! #8398600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8399000 0! #8399500 1! #8399600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8400000 0! #8400500 1! #8400600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8401000 0! #8401500 1! #8401600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8402000 0! #8402500 1! #8402600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8403000 0! #8403500 1! #8403600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8404000 0! #8404500 1! #8404600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8405000 0! #8405500 1! #8405600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8406000 0! #8406500 1! #8406600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8407000 0! #8407500 1! #8407600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8408000 0! #8408500 1! #8408600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8409000 0! #8409500 1! #8409600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8410000 0! #8410500 1! #8410600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8411000 0! #8411500 1! #8411600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8412000 0! #8412500 1! #8412600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8413000 0! #8413500 1! #8413600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8414000 0! #8414500 1! #8414600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8415000 0! #8415500 1! #8415600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8416000 0! #8416500 1! #8416600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8417000 0! #8417500 1! #8417600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8418000 0! #8418500 1! #8418600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8419000 0! #8419500 1! #8419600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8420000 0! #8420500 1! #8420600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8421000 0! #8421500 1! #8421600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8422000 0! #8422500 1! #8422600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8423000 0! #8423500 1! #8423600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8424000 0! #8424500 1! #8424600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8425000 0! #8425500 1! #8425600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8426000 0! #8426500 1! #8426600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8427000 0! #8427500 1! #8427600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8428000 0! #8428500 1! #8428600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8429000 0! #8429500 1! #8429600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8430000 0! #8430500 1! #8430600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8431000 0! #8431500 1! #8431600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8432000 0! #8432500 1! #8432600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8433000 0! #8433500 1! #8433600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8434000 0! #8434500 1! #8434600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8435000 0! #8435500 1! #8435600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8436000 0! #8436500 1! #8436600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8437000 0! #8437500 1! #8437600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8438000 0! #8438500 1! #8438600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8439000 0! #8439500 1! #8439600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8440000 0! #8440500 1! #8440600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8441000 0! #8441500 1! #8441600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8442000 0! #8442500 1! #8442600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8443000 0! #8443500 1! #8443600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #8444000 0! #8444500 1! #8444600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8445000 0! #8445500 1! #8445600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8446000 0! #8446500 1! #8446600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8447000 0! #8447500 1! #8447600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8448000 0! #8448500 1! #8448600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8449000 0! #8449500 1! #8449600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8450000 0! #8450500 1! #8450600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8451000 0! #8451500 1! #8451600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8452000 0! #8452500 1! #8452600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8453000 0! #8453500 1! #8453600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8454000 0! #8454500 1! #8454600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8455000 0! #8455500 1! #8455600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8456000 0! #8456500 1! #8456600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8457000 0! #8457500 1! #8457600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8458000 0! #8458500 1! #8458600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8459000 0! #8459500 1! #8459600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8460000 0! #8460500 1! #8460600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8461000 0! #8461500 1! #8461600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8462000 0! #8462500 1! #8462600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8463000 0! #8463500 1! #8463600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8464000 0! #8464500 1! #8464600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8465000 0! #8465500 1! #8465600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8466000 0! #8466500 1! #8466600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8467000 0! #8467500 1! #8467600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8468000 0! #8468500 1! #8468600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8469000 0! #8469500 1! #8469600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8470000 0! #8470500 1! #8470600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8471000 0! #8471500 1! #8471600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8472000 0! #8472500 1! #8472600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8473000 0! #8473500 1! #8473600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8474000 0! #8474500 1! #8474600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8475000 0! #8475500 1! #8475600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8476000 0! #8476500 1! #8476600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8477000 0! #8477500 1! #8477600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8478000 0! #8478500 1! #8478600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8479000 0! #8479500 1! #8479600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8480000 0! #8480500 1! #8480600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8481000 0! #8481500 1! #8481600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8482000 0! #8482500 1! #8482600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8483000 0! #8483500 1! #8483600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8484000 0! #8484500 1! #8484600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8485000 0! #8485500 1! #8485600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8486000 0! #8486500 1! #8486600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8487000 0! #8487500 1! #8487600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8488000 0! #8488500 1! #8488600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8489000 0! #8489500 1! #8489600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8490000 0! #8490500 1! #8490600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8491000 0! #8491500 1! #8491600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8492000 0! #8492500 1! #8492600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8493000 0! #8493500 1! #8493600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8494000 0! #8494500 1! #8494600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8495000 0! #8495500 1! #8495600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8496000 0! #8496500 1! #8496600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8497000 0! #8497500 1! #8497600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8498000 0! #8498500 1! #8498600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8499000 0! #8499500 1! #8499600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8500000 0! #8500500 1! #8500600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8501000 0! #8501500 1! #8501600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8502000 0! #8502500 1! #8502600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8503000 0! #8503500 1! #8503600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8504000 0! #8504500 1! #8504600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8505000 0! #8505500 1! #8505600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8506000 0! #8506500 1! #8506600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8507000 0! #8507500 1! #8507600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8508000 0! #8508500 1! #8508600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8509000 0! #8509500 1! #8509600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8510000 0! #8510500 1! #8510600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8511000 0! #8511500 1! #8511600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8512000 0! #8512500 1! #8512600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8513000 0! #8513500 1! #8513600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8514000 0! #8514500 1! #8514600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8515000 0! #8515500 1! #8515600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8516000 0! #8516500 1! #8516600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8517000 0! #8517500 1! #8517600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8518000 0! #8518500 1! #8518600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8519000 0! #8519500 1! #8519600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8520000 0! #8520500 1! #8520600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8521000 0! #8521500 1! #8521600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8522000 0! #8522500 1! #8522600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8523000 0! #8523500 1! #8523600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8524000 0! #8524500 1! #8524600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8525000 0! #8525500 1! #8525600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8526000 0! #8526500 1! #8526600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8527000 0! #8527500 1! #8527600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8528000 0! #8528500 1! #8528600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8529000 0! #8529500 1! #8529600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8530000 0! #8530500 1! #8530600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8531000 0! #8531500 1! #8531600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8532000 0! #8532500 1! #8532600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8533000 0! #8533500 1! #8533600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8534000 0! #8534500 1! #8534600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8535000 0! #8535500 1! #8535600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8536000 0! #8536500 1! #8536600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8537000 0! #8537500 1! #8537600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8538000 0! #8538500 1! #8538600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8539000 0! #8539500 1! #8539600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8540000 0! #8540500 1! #8540600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8541000 0! #8541500 1! #8541600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8542000 0! #8542500 1! #8542600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8543000 0! #8543500 1! #8543600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8544000 0! #8544500 1! #8544600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8545000 0! #8545500 1! #8545600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0Q 0O #8546000 0! #8546500 1! #8546600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8547000 0! #8547500 1! #8547600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8548000 0! #8548500 1! #8548600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8549000 0! #8549500 1! #8549600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8550000 0! #8550500 1! #8550600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8551000 0! #8551500 1! #8551600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8552000 0! #8552500 1! #8552600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8553000 0! #8553500 1! #8553600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8554000 0! #8554500 1! #8554600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8555000 0! #8555500 1! #8555600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8556000 0! #8556500 1! #8556600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8557000 0! #8557500 1! #8557600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8558000 0! #8558500 1! #8558600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8559000 0! #8559500 1! #8559600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8560000 0! #8560500 1! #8560600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8561000 0! #8561500 1! #8561600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8562000 0! #8562500 1! #8562600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8563000 0! #8563500 1! #8563600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8564000 0! #8564500 1! #8564600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8565000 0! #8565500 1! #8565600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8566000 0! #8566500 1! #8566600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8567000 0! #8567500 1! #8567600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8568000 0! #8568500 1! #8568600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8569000 0! #8569500 1! #8569600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8570000 0! #8570500 1! #8570600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8571000 0! #8571500 1! #8571600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8572000 0! #8572500 1! #8572600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8573000 0! #8573500 1! #8573600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8574000 0! #8574500 1! #8574600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8575000 0! #8575500 1! #8575600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8576000 0! #8576500 1! #8576600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8577000 0! #8577500 1! #8577600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8578000 0! #8578500 1! #8578600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8579000 0! #8579500 1! #8579600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8580000 0! #8580500 1! #8580600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8581000 0! #8581500 1! #8581600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8582000 0! #8582500 1! #8582600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8583000 0! #8583500 1! #8583600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8584000 0! #8584500 1! #8584600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8585000 0! #8585500 1! #8585600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8586000 0! #8586500 1! #8586600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8587000 0! #8587500 1! #8587600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8588000 0! #8588500 1! #8588600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8589000 0! #8589500 1! #8589600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8590000 0! #8590500 1! #8590600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8591000 0! #8591500 1! #8591600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8592000 0! #8592500 1! #8592600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8593000 0! #8593500 1! #8593600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8594000 0! #8594500 1! #8594600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8595000 0! #8595500 1! #8595600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8596000 0! #8596500 1! #8596600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #8596700 b10 g b10010110 c #8597000 0! #8597500 1! #8597600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8598000 0! #8598500 1! #8598600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8599000 0! #8599500 1! #8599600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8600000 0! #8600500 1! #8600600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8601000 0! #8601500 1! #8601600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8602000 0! #8602500 1! #8602600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8603000 0! #8603500 1! #8603600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8604000 0! #8604500 1! #8604600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8605000 0! #8605500 1! #8605600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8606000 0! #8606500 1! #8606600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8607000 0! #8607500 1! #8607600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8608000 0! #8608500 1! #8608600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8609000 0! #8609500 1! #8609600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8610000 0! #8610500 1! #8610600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8611000 0! #8611500 1! #8611600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8612000 0! #8612500 1! #8612600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8613000 0! #8613500 1! #8613600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8614000 0! #8614500 1! #8614600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8615000 0! #8615500 1! #8615600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8616000 0! #8616500 1! #8616600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8617000 0! #8617500 1! #8617600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8618000 0! #8618500 1! #8618600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8619000 0! #8619500 1! #8619600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8620000 0! #8620500 1! #8620600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8621000 0! #8621500 1! #8621600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8622000 0! #8622500 1! #8622600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8623000 0! #8623500 1! #8623600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8624000 0! #8624500 1! #8624600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8625000 0! #8625500 1! #8625600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8626000 0! #8626500 1! #8626600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8627000 0! #8627500 1! #8627600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8628000 0! #8628500 1! #8628600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8629000 0! #8629500 1! #8629600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8630000 0! #8630500 1! #8630600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8631000 0! #8631500 1! #8631600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8632000 0! #8632500 1! #8632600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8633000 0! #8633500 1! #8633600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8634000 0! #8634500 1! #8634600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8635000 0! #8635500 1! #8635600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8636000 0! #8636500 1! #8636600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8637000 0! #8637500 1! #8637600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8638000 0! #8638500 1! #8638600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8639000 0! #8639500 1! #8639600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8640000 0! #8640500 1! #8640600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8641000 0! #8641500 1! #8641600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8642000 0! #8642500 1! #8642600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8643000 0! #8643500 1! #8643600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8644000 0! #8644500 1! #8644600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8645000 0! #8645500 1! #8645600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8646000 0! #8646500 1! #8646600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8647000 0! #8647500 1! #8647600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8648000 0! #8648500 1! #8648600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8649000 0! #8649500 1! #8649600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8650000 0! #8650500 1! #8650600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8651000 0! #8651500 1! #8651600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8652000 0! #8652500 1! #8652600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8653000 0! #8653500 1! #8653600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8654000 0! #8654500 1! #8654600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8655000 0! #8655500 1! #8655600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8656000 0! #8656500 1! #8656600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8657000 0! #8657500 1! #8657600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8658000 0! #8658500 1! #8658600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8659000 0! #8659500 1! #8659600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8660000 0! #8660500 1! #8660600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8661000 0! #8661500 1! #8661600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8662000 0! #8662500 1! #8662600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8663000 0! #8663500 1! #8663600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8664000 0! #8664500 1! #8664600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8665000 0! #8665500 1! #8665600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8666000 0! #8666500 1! #8666600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8667000 0! #8667500 1! #8667600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8668000 0! #8668500 1! #8668600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8669000 0! #8669500 1! #8669600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8670000 0! #8670500 1! #8670600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8671000 0! #8671500 1! #8671600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8672000 0! #8672500 1! #8672600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8673000 0! #8673500 1! #8673600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8674000 0! #8674500 1! #8674600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8675000 0! #8675500 1! #8675600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8676000 0! #8676500 1! #8676600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8677000 0! #8677500 1! #8677600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8678000 0! #8678500 1! #8678600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8679000 0! #8679500 1! #8679600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8680000 0! #8680500 1! #8680600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8681000 0! #8681500 1! #8681600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8682000 0! #8682500 1! #8682600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8683000 0! #8683500 1! #8683600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8684000 0! #8684500 1! #8684600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8685000 0! #8685500 1! #8685600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8686000 0! #8686500 1! #8686600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8687000 0! #8687500 1! #8687600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8688000 0! #8688500 1! #8688600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8689000 0! #8689500 1! #8689600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8690000 0! #8690500 1! #8690600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8691000 0! #8691500 1! #8691600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8692000 0! #8692500 1! #8692600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8693000 0! #8693500 1! #8693600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8694000 0! #8694500 1! #8694600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8695000 0! #8695500 1! #8695600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8696000 0! #8696500 1! #8696600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8697000 0! #8697500 1! #8697600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8698000 0! #8698500 1! #8698600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #8699000 0! #8699500 1! #8699600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8700000 0! #8700500 1! #8700600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8701000 0! #8701500 1! #8701600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8702000 0! #8702500 1! #8702600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8703000 0! #8703500 1! #8703600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8704000 0! #8704500 1! #8704600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8705000 0! #8705500 1! #8705600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8706000 0! #8706500 1! #8706600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8707000 0! #8707500 1! #8707600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8708000 0! #8708500 1! #8708600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8709000 0! #8709500 1! #8709600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8710000 0! #8710500 1! #8710600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8711000 0! #8711500 1! #8711600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8712000 0! #8712500 1! #8712600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8713000 0! #8713500 1! #8713600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8714000 0! #8714500 1! #8714600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8715000 0! #8715500 1! #8715600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8716000 0! #8716500 1! #8716600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8717000 0! #8717500 1! #8717600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8718000 0! #8718500 1! #8718600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8719000 0! #8719500 1! #8719600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8720000 0! #8720500 1! #8720600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8721000 0! #8721500 1! #8721600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8722000 0! #8722500 1! #8722600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8723000 0! #8723500 1! #8723600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8724000 0! #8724500 1! #8724600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8725000 0! #8725500 1! #8725600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8726000 0! #8726500 1! #8726600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8727000 0! #8727500 1! #8727600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8728000 0! #8728500 1! #8728600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8729000 0! #8729500 1! #8729600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8730000 0! #8730500 1! #8730600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8731000 0! #8731500 1! #8731600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8732000 0! #8732500 1! #8732600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8733000 0! #8733500 1! #8733600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8734000 0! #8734500 1! #8734600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8735000 0! #8735500 1! #8735600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8736000 0! #8736500 1! #8736600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8737000 0! #8737500 1! #8737600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8738000 0! #8738500 1! #8738600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8739000 0! #8739500 1! #8739600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8740000 0! #8740500 1! #8740600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8741000 0! #8741500 1! #8741600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8742000 0! #8742500 1! #8742600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8743000 0! #8743500 1! #8743600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8744000 0! #8744500 1! #8744600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8745000 0! #8745500 1! #8745600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8746000 0! #8746500 1! #8746600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8747000 0! #8747500 1! #8747600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8748000 0! #8748500 1! #8748600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8749000 0! #8749500 1! #8749600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8750000 0! #8750500 1! #8750600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8751000 0! #8751500 1! #8751600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8752000 0! #8752500 1! #8752600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8753000 0! #8753500 1! #8753600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8754000 0! #8754500 1! #8754600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8755000 0! #8755500 1! #8755600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8756000 0! #8756500 1! #8756600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8757000 0! #8757500 1! #8757600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8758000 0! #8758500 1! #8758600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8759000 0! #8759500 1! #8759600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8760000 0! #8760500 1! #8760600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8761000 0! #8761500 1! #8761600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8762000 0! #8762500 1! #8762600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8763000 0! #8763500 1! #8763600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8764000 0! #8764500 1! #8764600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8765000 0! #8765500 1! #8765600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8766000 0! #8766500 1! #8766600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8767000 0! #8767500 1! #8767600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8768000 0! #8768500 1! #8768600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8769000 0! #8769500 1! #8769600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8770000 0! #8770500 1! #8770600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8771000 0! #8771500 1! #8771600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8772000 0! #8772500 1! #8772600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8773000 0! #8773500 1! #8773600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8774000 0! #8774500 1! #8774600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8775000 0! #8775500 1! #8775600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8776000 0! #8776500 1! #8776600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8777000 0! #8777500 1! #8777600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8778000 0! #8778500 1! #8778600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8779000 0! #8779500 1! #8779600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8780000 0! #8780500 1! #8780600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8781000 0! #8781500 1! #8781600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8782000 0! #8782500 1! #8782600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8783000 0! #8783500 1! #8783600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8784000 0! #8784500 1! #8784600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8785000 0! #8785500 1! #8785600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8786000 0! #8786500 1! #8786600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8787000 0! #8787500 1! #8787600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8788000 0! #8788500 1! #8788600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8789000 0! #8789500 1! #8789600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8790000 0! #8790500 1! #8790600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8791000 0! #8791500 1! #8791600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8792000 0! #8792500 1! #8792600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8793000 0! #8793500 1! #8793600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8794000 0! #8794500 1! #8794600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8795000 0! #8795500 1! #8795600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8796000 0! #8796500 1! #8796600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8797000 0! #8797500 1! #8797600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8798000 0! #8798500 1! #8798600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8799000 0! #8799500 1! #8799600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8800000 0! #8800500 1! #8800600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1Q 1O #8801000 0! #8801500 1! #8801600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8802000 0! #8802500 1! #8802600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8803000 0! #8803500 1! #8803600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8804000 0! #8804500 1! #8804600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8805000 0! #8805500 1! #8805600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8806000 0! #8806500 1! #8806600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8807000 0! #8807500 1! #8807600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8808000 0! #8808500 1! #8808600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8809000 0! #8809500 1! #8809600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8810000 0! #8810500 1! #8810600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8811000 0! #8811500 1! #8811600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8812000 0! #8812500 1! #8812600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8813000 0! #8813500 1! #8813600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8814000 0! #8814500 1! #8814600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8815000 0! #8815500 1! #8815600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8816000 0! #8816500 1! #8816600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8817000 0! #8817500 1! #8817600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8818000 0! #8818500 1! #8818600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8819000 0! #8819500 1! #8819600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8820000 0! #8820500 1! #8820600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8821000 0! #8821500 1! #8821600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8822000 0! #8822500 1! #8822600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8823000 0! #8823500 1! #8823600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8824000 0! #8824500 1! #8824600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8825000 0! #8825500 1! #8825600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8826000 0! #8826500 1! #8826600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8827000 0! #8827500 1! #8827600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8828000 0! #8828500 1! #8828600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8829000 0! #8829500 1! #8829600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8830000 0! #8830500 1! #8830600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8831000 0! #8831500 1! #8831600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8832000 0! #8832500 1! #8832600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8833000 0! #8833500 1! #8833600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8834000 0! #8834500 1! #8834600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8835000 0! #8835500 1! #8835600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8836000 0! #8836500 1! #8836600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8837000 0! #8837500 1! #8837600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8838000 0! #8838500 1! #8838600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8839000 0! #8839500 1! #8839600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8840000 0! #8840500 1! #8840600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8841000 0! #8841500 1! #8841600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8842000 0! #8842500 1! #8842600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8843000 0! #8843500 1! #8843600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8844000 0! #8844500 1! #8844600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8845000 0! #8845500 1! #8845600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8846000 0! #8846500 1! #8846600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8847000 0! #8847500 1! #8847600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8848000 0! #8848500 1! #8848600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8849000 0! #8849500 1! #8849600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8850000 0! #8850500 1! #8850600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8851000 0! #8851500 1! #8851600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #8851700 b1 g b101101 c #8852000 0! #8852500 1! #8852600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8853000 0! #8853500 1! #8853600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8854000 0! #8854500 1! #8854600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8855000 0! #8855500 1! #8855600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8856000 0! #8856500 1! #8856600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8857000 0! #8857500 1! #8857600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8858000 0! #8858500 1! #8858600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8859000 0! #8859500 1! #8859600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8860000 0! #8860500 1! #8860600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8861000 0! #8861500 1! #8861600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8862000 0! #8862500 1! #8862600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8863000 0! #8863500 1! #8863600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8864000 0! #8864500 1! #8864600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8865000 0! #8865500 1! #8865600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8866000 0! #8866500 1! #8866600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8867000 0! #8867500 1! #8867600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8868000 0! #8868500 1! #8868600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8869000 0! #8869500 1! #8869600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8870000 0! #8870500 1! #8870600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8871000 0! #8871500 1! #8871600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8872000 0! #8872500 1! #8872600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8873000 0! #8873500 1! #8873600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8874000 0! #8874500 1! #8874600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8875000 0! #8875500 1! #8875600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8876000 0! #8876500 1! #8876600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8877000 0! #8877500 1! #8877600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8878000 0! #8878500 1! #8878600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8879000 0! #8879500 1! #8879600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8880000 0! #8880500 1! #8880600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8881000 0! #8881500 1! #8881600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8882000 0! #8882500 1! #8882600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8883000 0! #8883500 1! #8883600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8884000 0! #8884500 1! #8884600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8885000 0! #8885500 1! #8885600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8886000 0! #8886500 1! #8886600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8887000 0! #8887500 1! #8887600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8888000 0! #8888500 1! #8888600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8889000 0! #8889500 1! #8889600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8890000 0! #8890500 1! #8890600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8891000 0! #8891500 1! #8891600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8892000 0! #8892500 1! #8892600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8893000 0! #8893500 1! #8893600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8894000 0! #8894500 1! #8894600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8895000 0! #8895500 1! #8895600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8896000 0! #8896500 1! #8896600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8897000 0! #8897500 1! #8897600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8898000 0! #8898500 1! #8898600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8899000 0! #8899500 1! #8899600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8900000 0! #8900500 1! #8900600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8901000 0! #8901500 1! #8901600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8902000 0! #8902500 1! #8902600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8903000 0! #8903500 1! #8903600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8904000 0! #8904500 1! #8904600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8905000 0! #8905500 1! #8905600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8906000 0! #8906500 1! #8906600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8907000 0! #8907500 1! #8907600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8908000 0! #8908500 1! #8908600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8909000 0! #8909500 1! #8909600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8910000 0! #8910500 1! #8910600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8911000 0! #8911500 1! #8911600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8912000 0! #8912500 1! #8912600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8913000 0! #8913500 1! #8913600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8914000 0! #8914500 1! #8914600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8915000 0! #8915500 1! #8915600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8916000 0! #8916500 1! #8916600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8917000 0! #8917500 1! #8917600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8918000 0! #8918500 1! #8918600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8919000 0! #8919500 1! #8919600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8920000 0! #8920500 1! #8920600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8921000 0! #8921500 1! #8921600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8922000 0! #8922500 1! #8922600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8923000 0! #8923500 1! #8923600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8924000 0! #8924500 1! #8924600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8925000 0! #8925500 1! #8925600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8926000 0! #8926500 1! #8926600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8927000 0! #8927500 1! #8927600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8928000 0! #8928500 1! #8928600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8929000 0! #8929500 1! #8929600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8930000 0! #8930500 1! #8930600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8931000 0! #8931500 1! #8931600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8932000 0! #8932500 1! #8932600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8933000 0! #8933500 1! #8933600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8934000 0! #8934500 1! #8934600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8935000 0! #8935500 1! #8935600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8936000 0! #8936500 1! #8936600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8937000 0! #8937500 1! #8937600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8938000 0! #8938500 1! #8938600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8939000 0! #8939500 1! #8939600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8940000 0! #8940500 1! #8940600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8941000 0! #8941500 1! #8941600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8942000 0! #8942500 1! #8942600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8943000 0! #8943500 1! #8943600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8944000 0! #8944500 1! #8944600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8945000 0! #8945500 1! #8945600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8946000 0! #8946500 1! #8946600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8947000 0! #8947500 1! #8947600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8948000 0! #8948500 1! #8948600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8949000 0! #8949500 1! #8949600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8950000 0! #8950500 1! #8950600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8951000 0! #8951500 1! #8951600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8952000 0! #8952500 1! #8952600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8953000 0! #8953500 1! #8953600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #8954000 0! #8954500 1! #8954600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8955000 0! #8955500 1! #8955600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8956000 0! #8956500 1! #8956600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8957000 0! #8957500 1! #8957600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8958000 0! #8958500 1! #8958600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8959000 0! #8959500 1! #8959600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8960000 0! #8960500 1! #8960600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8961000 0! #8961500 1! #8961600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8962000 0! #8962500 1! #8962600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8963000 0! #8963500 1! #8963600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8964000 0! #8964500 1! #8964600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8965000 0! #8965500 1! #8965600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8966000 0! #8966500 1! #8966600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8967000 0! #8967500 1! #8967600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8968000 0! #8968500 1! #8968600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8969000 0! #8969500 1! #8969600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8970000 0! #8970500 1! #8970600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8971000 0! #8971500 1! #8971600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8972000 0! #8972500 1! #8972600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8973000 0! #8973500 1! #8973600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8974000 0! #8974500 1! #8974600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8975000 0! #8975500 1! #8975600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8976000 0! #8976500 1! #8976600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8977000 0! #8977500 1! #8977600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8978000 0! #8978500 1! #8978600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8979000 0! #8979500 1! #8979600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8980000 0! #8980500 1! #8980600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8981000 0! #8981500 1! #8981600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8982000 0! #8982500 1! #8982600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8983000 0! #8983500 1! #8983600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8984000 0! #8984500 1! #8984600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8985000 0! #8985500 1! #8985600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8986000 0! #8986500 1! #8986600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8987000 0! #8987500 1! #8987600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8988000 0! #8988500 1! #8988600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8989000 0! #8989500 1! #8989600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8990000 0! #8990500 1! #8990600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8991000 0! #8991500 1! #8991600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8992000 0! #8992500 1! #8992600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8993000 0! #8993500 1! #8993600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8994000 0! #8994500 1! #8994600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8995000 0! #8995500 1! #8995600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8996000 0! #8996500 1! #8996600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8997000 0! #8997500 1! #8997600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #8998000 0! #8998500 1! #8998600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #8999000 0! #8999500 1! #8999600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9000000 0! #9000500 1! #9000600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9001000 0! #9001500 1! #9001600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9002000 0! #9002500 1! #9002600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9003000 0! #9003500 1! #9003600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9004000 0! #9004500 1! #9004600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9005000 0! #9005500 1! #9005600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9006000 0! #9006500 1! #9006600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9007000 0! #9007500 1! #9007600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9008000 0! #9008500 1! #9008600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9009000 0! #9009500 1! #9009600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9010000 0! #9010500 1! #9010600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9011000 0! #9011500 1! #9011600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9012000 0! #9012500 1! #9012600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9013000 0! #9013500 1! #9013600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9014000 0! #9014500 1! #9014600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9015000 0! #9015500 1! #9015600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9016000 0! #9016500 1! #9016600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9017000 0! #9017500 1! #9017600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9018000 0! #9018500 1! #9018600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9019000 0! #9019500 1! #9019600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9020000 0! #9020500 1! #9020600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9021000 0! #9021500 1! #9021600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9022000 0! #9022500 1! #9022600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9023000 0! #9023500 1! #9023600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9024000 0! #9024500 1! #9024600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9025000 0! #9025500 1! #9025600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9026000 0! #9026500 1! #9026600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9027000 0! #9027500 1! #9027600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9028000 0! #9028500 1! #9028600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9029000 0! #9029500 1! #9029600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9030000 0! #9030500 1! #9030600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9031000 0! #9031500 1! #9031600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9032000 0! #9032500 1! #9032600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9033000 0! #9033500 1! #9033600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9034000 0! #9034500 1! #9034600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9035000 0! #9035500 1! #9035600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9036000 0! #9036500 1! #9036600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9037000 0! #9037500 1! #9037600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9038000 0! #9038500 1! #9038600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9039000 0! #9039500 1! #9039600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9040000 0! #9040500 1! #9040600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9041000 0! #9041500 1! #9041600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9042000 0! #9042500 1! #9042600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9043000 0! #9043500 1! #9043600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9044000 0! #9044500 1! #9044600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9045000 0! #9045500 1! #9045600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9046000 0! #9046500 1! #9046600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9047000 0! #9047500 1! #9047600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9048000 0! #9048500 1! #9048600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9049000 0! #9049500 1! #9049600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9050000 0! #9050500 1! #9050600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9051000 0! #9051500 1! #9051600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9052000 0! #9052500 1! #9052600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9053000 0! #9053500 1! #9053600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9054000 0! #9054500 1! #9054600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9055000 0! #9055500 1! #9055600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0Q 0O #9056000 0! #9056500 1! #9056600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9057000 0! #9057500 1! #9057600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9058000 0! #9058500 1! #9058600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9059000 0! #9059500 1! #9059600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9060000 0! #9060500 1! #9060600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9061000 0! #9061500 1! #9061600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9062000 0! #9062500 1! #9062600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9063000 0! #9063500 1! #9063600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9064000 0! #9064500 1! #9064600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9065000 0! #9065500 1! #9065600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9066000 0! #9066500 1! #9066600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9067000 0! #9067500 1! #9067600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9068000 0! #9068500 1! #9068600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9069000 0! #9069500 1! #9069600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9070000 0! #9070500 1! #9070600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9071000 0! #9071500 1! #9071600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9072000 0! #9072500 1! #9072600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9073000 0! #9073500 1! #9073600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9074000 0! #9074500 1! #9074600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9075000 0! #9075500 1! #9075600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9076000 0! #9076500 1! #9076600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9077000 0! #9077500 1! #9077600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9078000 0! #9078500 1! #9078600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9079000 0! #9079500 1! #9079600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9080000 0! #9080500 1! #9080600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9081000 0! #9081500 1! #9081600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9082000 0! #9082500 1! #9082600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9083000 0! #9083500 1! #9083600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9084000 0! #9084500 1! #9084600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9085000 0! #9085500 1! #9085600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9086000 0! #9086500 1! #9086600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9087000 0! #9087500 1! #9087600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9088000 0! #9088500 1! #9088600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9089000 0! #9089500 1! #9089600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9090000 0! #9090500 1! #9090600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9091000 0! #9091500 1! #9091600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9092000 0! #9092500 1! #9092600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9093000 0! #9093500 1! #9093600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9094000 0! #9094500 1! #9094600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9095000 0! #9095500 1! #9095600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9096000 0! #9096500 1! #9096600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9097000 0! #9097500 1! #9097600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9098000 0! #9098500 1! #9098600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9099000 0! #9099500 1! #9099600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9100000 0! #9100500 1! #9100600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9101000 0! #9101500 1! #9101600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9102000 0! #9102500 1! #9102600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9103000 0! #9103500 1! #9103600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9104000 0! #9104500 1! #9104600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9105000 0! #9105500 1! #9105600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9106000 0! #9106500 1! #9106600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #9106700 b0 g b1011010 c 1h #9107000 0! #9107500 1! #9107600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9108000 0! #9108500 1! #9108600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9109000 0! #9109500 1! #9109600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9110000 0! #9110500 1! #9110600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9111000 0! #9111500 1! #9111600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9112000 0! #9112500 1! #9112600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9113000 0! #9113500 1! #9113600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9114000 0! #9114500 1! #9114600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9115000 0! #9115500 1! #9115600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9116000 0! #9116500 1! #9116600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9117000 0! #9117500 1! #9117600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9118000 0! #9118500 1! #9118600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9119000 0! #9119500 1! #9119600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9120000 0! #9120500 1! #9120600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9121000 0! #9121500 1! #9121600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9122000 0! #9122500 1! #9122600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9123000 0! #9123500 1! #9123600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9124000 0! #9124500 1! #9124600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9125000 0! #9125500 1! #9125600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9126000 0! #9126500 1! #9126600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9127000 0! #9127500 1! #9127600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9128000 0! #9128500 1! #9128600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9129000 0! #9129500 1! #9129600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9130000 0! #9130500 1! #9130600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9131000 0! #9131500 1! #9131600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9132000 0! #9132500 1! #9132600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9133000 0! #9133500 1! #9133600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9134000 0! #9134500 1! #9134600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9135000 0! #9135500 1! #9135600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9136000 0! #9136500 1! #9136600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9137000 0! #9137500 1! #9137600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9138000 0! #9138500 1! #9138600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9139000 0! #9139500 1! #9139600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9140000 0! #9140500 1! #9140600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9141000 0! #9141500 1! #9141600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9142000 0! #9142500 1! #9142600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9143000 0! #9143500 1! #9143600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9144000 0! #9144500 1! #9144600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9145000 0! #9145500 1! #9145600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9146000 0! #9146500 1! #9146600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9147000 0! #9147500 1! #9147600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9148000 0! #9148500 1! #9148600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9149000 0! #9149500 1! #9149600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9150000 0! #9150500 1! #9150600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9151000 0! #9151500 1! #9151600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9152000 0! #9152500 1! #9152600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9153000 0! #9153500 1! #9153600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9154000 0! #9154500 1! #9154600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9155000 0! #9155500 1! #9155600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9156000 0! #9156500 1! #9156600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9157000 0! #9157500 1! #9157600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9158000 0! #9158500 1! #9158600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9159000 0! #9159500 1! #9159600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9160000 0! #9160500 1! #9160600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9161000 0! #9161500 1! #9161600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9162000 0! #9162500 1! #9162600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9163000 0! #9163500 1! #9163600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9164000 0! #9164500 1! #9164600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9165000 0! #9165500 1! #9165600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9166000 0! #9166500 1! #9166600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9167000 0! #9167500 1! #9167600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9168000 0! #9168500 1! #9168600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9169000 0! #9169500 1! #9169600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9170000 0! #9170500 1! #9170600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9171000 0! #9171500 1! #9171600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9172000 0! #9172500 1! #9172600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9173000 0! #9173500 1! #9173600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9174000 0! #9174500 1! #9174600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9175000 0! #9175500 1! #9175600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9176000 0! #9176500 1! #9176600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9177000 0! #9177500 1! #9177600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9178000 0! #9178500 1! #9178600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9179000 0! #9179500 1! #9179600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9180000 0! #9180500 1! #9180600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9181000 0! #9181500 1! #9181600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9182000 0! #9182500 1! #9182600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9183000 0! #9183500 1! #9183600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9184000 0! #9184500 1! #9184600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9185000 0! #9185500 1! #9185600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9186000 0! #9186500 1! #9186600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9187000 0! #9187500 1! #9187600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9188000 0! #9188500 1! #9188600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9189000 0! #9189500 1! #9189600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9190000 0! #9190500 1! #9190600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9191000 0! #9191500 1! #9191600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9192000 0! #9192500 1! #9192600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9193000 0! #9193500 1! #9193600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9194000 0! #9194500 1! #9194600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9195000 0! #9195500 1! #9195600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9196000 0! #9196500 1! #9196600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9197000 0! #9197500 1! #9197600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9198000 0! #9198500 1! #9198600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9199000 0! #9199500 1! #9199600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9200000 0! #9200500 1! #9200600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9201000 0! #9201500 1! #9201600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9202000 0! #9202500 1! #9202600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9203000 0! #9203500 1! #9203600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9204000 0! #9204500 1! #9204600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9205000 0! #9205500 1! #9205600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9206000 0! #9206500 1! #9206600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9207000 0! #9207500 1! #9207600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9208000 0! #9208500 1! #9208600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #9208700 b101 q 0j #9208800 b11 ] #9209000 0! #9209500 1! #9209600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9210000 0! #9210500 1! #9210600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9211000 0! #9211500 1! #9211600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9212000 0! #9212500 1! #9212600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9213000 0! #9213500 1! #9213600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9214000 0! #9214500 1! #9214600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9215000 0! #9215500 1! #9215600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9216000 0! #9216500 1! #9216600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9217000 0! #9217500 1! #9217600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9218000 0! #9218500 1! #9218600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9219000 0! #9219500 1! #9219600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9220000 0! #9220500 1! #9220600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9221000 0! #9221500 1! #9221600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9222000 0! #9222500 1! #9222600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9223000 0! #9223500 1! #9223600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9224000 0! #9224500 1! #9224600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9225000 0! #9225500 1! #9225600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9226000 0! #9226500 1! #9226600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9227000 0! #9227500 1! #9227600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9228000 0! #9228500 1! #9228600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9229000 0! #9229500 1! #9229600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9230000 0! #9230500 1! #9230600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9231000 0! #9231500 1! #9231600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9232000 0! #9232500 1! #9232600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9233000 0! #9233500 1! #9233600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9234000 0! #9234500 1! #9234600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9235000 0! #9235500 1! #9235600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9236000 0! #9236500 1! #9236600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9237000 0! #9237500 1! #9237600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9238000 0! #9238500 1! #9238600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9239000 0! #9239500 1! #9239600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9240000 0! #9240500 1! #9240600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9241000 0! #9241500 1! #9241600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9242000 0! #9242500 1! #9242600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9243000 0! #9243500 1! #9243600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9244000 0! #9244500 1! #9244600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9245000 0! #9245500 1! #9245600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9246000 0! #9246500 1! #9246600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9247000 0! #9247500 1! #9247600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9248000 0! #9248500 1! #9248600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9249000 0! #9249500 1! #9249600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9250000 0! #9250500 1! #9250600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9251000 0! #9251500 1! #9251600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9252000 0! #9252500 1! #9252600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9253000 0! #9253500 1! #9253600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9254000 0! #9254500 1! #9254600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9255000 0! #9255500 1! #9255600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9256000 0! #9256500 1! #9256600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9257000 0! #9257500 1! #9257600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9258000 0! #9258500 1! #9258600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9259000 0! #9259500 1! #9259600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9260000 0! #9260500 1! #9260600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9261000 0! #9261500 1! #9261600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9262000 0! #9262500 1! #9262600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9263000 0! #9263500 1! #9263600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9264000 0! #9264500 1! #9264600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9265000 0! #9265500 1! #9265600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9266000 0! #9266500 1! #9266600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9267000 0! #9267500 1! #9267600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9268000 0! #9268500 1! #9268600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9269000 0! #9269500 1! #9269600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9270000 0! #9270500 1! #9270600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9271000 0! #9271500 1! #9271600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9272000 0! #9272500 1! #9272600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9273000 0! #9273500 1! #9273600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9274000 0! #9274500 1! #9274600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9275000 0! #9275500 1! #9275600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9276000 0! #9276500 1! #9276600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9277000 0! #9277500 1! #9277600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9278000 0! #9278500 1! #9278600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9279000 0! #9279500 1! #9279600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9280000 0! #9280500 1! #9280600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9281000 0! #9281500 1! #9281600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9282000 0! #9282500 1! #9282600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9283000 0! #9283500 1! #9283600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9284000 0! #9284500 1! #9284600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9285000 0! #9285500 1! #9285600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9286000 0! #9286500 1! #9286600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9287000 0! #9287500 1! #9287600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9288000 0! #9288500 1! #9288600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9289000 0! #9289500 1! #9289600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9290000 0! #9290500 1! #9290600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9291000 0! #9291500 1! #9291600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9292000 0! #9292500 1! #9292600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9293000 0! #9293500 1! #9293600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9294000 0! #9294500 1! #9294600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9295000 0! #9295500 1! #9295600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9296000 0! #9296500 1! #9296600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9297000 0! #9297500 1! #9297600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9298000 0! #9298500 1! #9298600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9299000 0! #9299500 1! #9299600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9300000 0! #9300500 1! #9300600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9301000 0! #9301500 1! #9301600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9302000 0! #9302500 1! #9302600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9303000 0! #9303500 1! #9303600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9304000 0! #9304500 1! #9304600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9305000 0! #9305500 1! #9305600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9306000 0! #9306500 1! #9306600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9307000 0! #9307500 1! #9307600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9308000 0! #9308500 1! #9308600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9309000 0! #9309500 1! #9309600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9310000 0! #9310500 1! #9310600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1Q #9311000 0! #9311500 1! #9311600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9312000 0! #9312500 1! #9312600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9313000 0! #9313500 1! #9313600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9314000 0! #9314500 1! #9314600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9315000 0! #9315500 1! #9315600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9316000 0! #9316500 1! #9316600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9317000 0! #9317500 1! #9317600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9318000 0! #9318500 1! #9318600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9319000 0! #9319500 1! #9319600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9320000 0! #9320500 1! #9320600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9321000 0! #9321500 1! #9321600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9322000 0! #9322500 1! #9322600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9323000 0! #9323500 1! #9323600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9324000 0! #9324500 1! #9324600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9325000 0! #9325500 1! #9325600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9326000 0! #9326500 1! #9326600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9327000 0! #9327500 1! #9327600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9328000 0! #9328500 1! #9328600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9329000 0! #9329500 1! #9329600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9330000 0! #9330500 1! #9330600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9331000 0! #9331500 1! #9331600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9332000 0! #9332500 1! #9332600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9333000 0! #9333500 1! #9333600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9334000 0! #9334500 1! #9334600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9335000 0! #9335500 1! #9335600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9336000 0! #9336500 1! #9336600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9337000 0! #9337500 1! #9337600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9338000 0! #9338500 1! #9338600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9339000 0! #9339500 1! #9339600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9340000 0! #9340500 1! #9340600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9341000 0! #9341500 1! #9341600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9342000 0! #9342500 1! #9342600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9343000 0! #9343500 1! #9343600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9344000 0! #9344500 1! #9344600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9345000 0! #9345500 1! #9345600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9346000 0! #9346500 1! #9346600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9347000 0! #9347500 1! #9347600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9348000 0! #9348500 1! #9348600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9349000 0! #9349500 1! #9349600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9350000 0! #9350500 1! #9350600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9351000 0! #9351500 1! #9351600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9352000 0! #9352500 1! #9352600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9353000 0! #9353500 1! #9353600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9354000 0! #9354500 1! #9354600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9355000 0! #9355500 1! #9355600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9356000 0! #9356500 1! #9356600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9357000 0! #9357500 1! #9357600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9358000 0! #9358500 1! #9358600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9359000 0! #9359500 1! #9359600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9360000 0! #9360500 1! #9360600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9361000 0! #9361500 1! #9361600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #9361700 b111 g b10110100 c 0h #9362000 0! #9362500 1! #9362600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9363000 0! #9363500 1! #9363600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9364000 0! #9364500 1! #9364600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9365000 0! #9365500 1! #9365600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9366000 0! #9366500 1! #9366600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9367000 0! #9367500 1! #9367600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9368000 0! #9368500 1! #9368600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9369000 0! #9369500 1! #9369600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9370000 0! #9370500 1! #9370600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9371000 0! #9371500 1! #9371600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9372000 0! #9372500 1! #9372600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9373000 0! #9373500 1! #9373600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9374000 0! #9374500 1! #9374600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9375000 0! #9375500 1! #9375600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9376000 0! #9376500 1! #9376600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9377000 0! #9377500 1! #9377600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9378000 0! #9378500 1! #9378600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9379000 0! #9379500 1! #9379600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9380000 0! #9380500 1! #9380600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9381000 0! #9381500 1! #9381600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9382000 0! #9382500 1! #9382600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9383000 0! #9383500 1! #9383600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9384000 0! #9384500 1! #9384600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9385000 0! #9385500 1! #9385600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9386000 0! #9386500 1! #9386600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9387000 0! #9387500 1! #9387600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9388000 0! #9388500 1! #9388600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9389000 0! #9389500 1! #9389600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9390000 0! #9390500 1! #9390600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9391000 0! #9391500 1! #9391600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9392000 0! #9392500 1! #9392600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9393000 0! #9393500 1! #9393600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9394000 0! #9394500 1! #9394600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9395000 0! #9395500 1! #9395600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9396000 0! #9396500 1! #9396600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9397000 0! #9397500 1! #9397600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9398000 0! #9398500 1! #9398600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9399000 0! #9399500 1! #9399600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9400000 0! #9400500 1! #9400600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9401000 0! #9401500 1! #9401600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9402000 0! #9402500 1! #9402600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9403000 0! #9403500 1! #9403600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9404000 0! #9404500 1! #9404600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9405000 0! #9405500 1! #9405600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9406000 0! #9406500 1! #9406600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9407000 0! #9407500 1! #9407600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9408000 0! #9408500 1! #9408600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9409000 0! #9409500 1! #9409600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9410000 0! #9410500 1! #9410600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9411000 0! #9411500 1! #9411600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9412000 0! #9412500 1! #9412600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9413000 0! #9413500 1! #9413600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9414000 0! #9414500 1! #9414600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9415000 0! #9415500 1! #9415600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9416000 0! #9416500 1! #9416600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9417000 0! #9417500 1! #9417600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9418000 0! #9418500 1! #9418600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9419000 0! #9419500 1! #9419600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9420000 0! #9420500 1! #9420600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9421000 0! #9421500 1! #9421600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9422000 0! #9422500 1! #9422600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9423000 0! #9423500 1! #9423600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9424000 0! #9424500 1! #9424600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9425000 0! #9425500 1! #9425600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9426000 0! #9426500 1! #9426600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9427000 0! #9427500 1! #9427600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9428000 0! #9428500 1! #9428600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9429000 0! #9429500 1! #9429600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9430000 0! #9430500 1! #9430600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9431000 0! #9431500 1! #9431600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9432000 0! #9432500 1! #9432600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9433000 0! #9433500 1! #9433600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9434000 0! #9434500 1! #9434600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9435000 0! #9435500 1! #9435600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9436000 0! #9436500 1! #9436600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9437000 0! #9437500 1! #9437600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9438000 0! #9438500 1! #9438600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9439000 0! #9439500 1! #9439600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9440000 0! #9440500 1! #9440600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9441000 0! #9441500 1! #9441600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9442000 0! #9442500 1! #9442600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9443000 0! #9443500 1! #9443600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9444000 0! #9444500 1! #9444600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9445000 0! #9445500 1! #9445600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9446000 0! #9446500 1! #9446600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9447000 0! #9447500 1! #9447600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9448000 0! #9448500 1! #9448600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9449000 0! #9449500 1! #9449600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9450000 0! #9450500 1! #9450600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9451000 0! #9451500 1! #9451600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9452000 0! #9452500 1! #9452600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9453000 0! #9453500 1! #9453600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9454000 0! #9454500 1! #9454600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9455000 0! #9455500 1! #9455600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9456000 0! #9456500 1! #9456600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9457000 0! #9457500 1! #9457600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9458000 0! #9458500 1! #9458600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9459000 0! #9459500 1! #9459600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9460000 0! #9460500 1! #9460600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9461000 0! #9461500 1! #9461600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9462000 0! #9462500 1! #9462600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9463000 0! #9463500 1! #9463600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #9463700 1j 1i b100 q 1O #9464000 0! #9464500 1! #9464600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #9465000 0! #9465500 1! #9465600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9466000 0! #9466500 1! #9466600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H b1000001 C #9467000 0! #9467500 1! #9467600 b1000001 J xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #9468000 0! #9468500 1! #9469000 0! #9469500 1! #9470000 0! #9470500 1! #9471000 0! #9471500 1! #9472000 0! #9472500 1! #9473000 0! #9473500 1! #9474000 0! #9474500 1! #9475000 0! #9475500 1! #9476000 0! #9476500 1! #9477000 0! #9477500 1! #9478000 0! #9478500 1! #9479000 0! #9479500 1! #9480000 0! #9480500 1! #9481000 0! #9481500 1! #9482000 0! #9482500 1! #9483000 0! #9483500 1! #9484000 0! #9484500 1! #9485000 0! #9485500 1! #9486000 0! #9486500 1! #9487000 0! #9487500 1! #9488000 0! #9488500 1! #9489000 0! #9489500 1! #9490000 0! #9490500 1! #9491000 0! #9491500 1! #9492000 0! #9492500 1! #9493000 0! #9493500 1! #9494000 0! #9494500 1! #9495000 0! #9495500 1! #9496000 0! #9496500 1! #9497000 0! #9497500 1! #9498000 0! #9498500 1! #9499000 0! #9499500 1! #9500000 0! #9500500 1! #9501000 0! #9501500 1! #9502000 0! #9502500 1! #9503000 0! #9503500 1! #9504000 0! #9504500 1! #9505000 0! #9505500 1! #9506000 0! #9506500 1! #9507000 0! #9507500 1! #9508000 0! #9508500 1! #9509000 0! #9509500 1! #9510000 0! #9510500 1! #9511000 0! #9511500 1! #9512000 0! #9512500 1! #9513000 0! #9513500 1! #9514000 0! #9514500 1! #9515000 0! #9515500 1! #9516000 0! #9516500 1! #9517000 0! #9517500 1! #9518000 0! #9518500 1! #9519000 0! #9519500 1! #9520000 0! #9520500 1! #9521000 0! #9521500 1! #9522000 0! #9522500 1! #9523000 0! #9523500 1! #9524000 0! #9524500 1! #9525000 0! #9525500 1! #9526000 0! #9526500 1! #9527000 0! #9527500 1! #9528000 0! #9528500 1! #9529000 0! #9529500 1! #9530000 0! #9530500 1! #9531000 0! #9531500 1! #9532000 0! #9532500 1! #9533000 0! #9533500 1! #9534000 0! #9534500 1! #9535000 0! #9535500 1! #9536000 0! #9536500 1! #9537000 0! #9537500 1! #9538000 0! #9538500 1! #9539000 0! #9539500 1! #9540000 0! #9540500 1! #9541000 0! #9541500 1! #9542000 0! #9542500 1! #9543000 0! #9543500 1! #9544000 0! #9544500 1! #9545000 0! #9545500 1! #9546000 0! #9546500 1! #9547000 0! #9547500 1! #9548000 0! #9548500 1! #9549000 0! #9549500 1! #9550000 0! #9550500 1! #9551000 0! #9551500 1! #9552000 0! #9552500 1! #9553000 0! #9553500 1! #9554000 0! #9554500 1! #9555000 0! #9555500 1! #9556000 0! #9556500 1! #9557000 0! #9557500 1! #9558000 0! #9558500 1! #9559000 0! #9559500 1! #9560000 0! #9560500 1! #9561000 0! #9561500 1! #9562000 0! #9562500 1! #9563000 0! #9563500 1! #9564000 0! #9564500 1! #9565000 0! #9565500 1! #9565600 0Q 0O #9566000 0! #9566500 1! #9567000 0! #9567500 1! #9568000 0! #9568500 1! #9569000 0! #9569500 1! #9570000 0! #9570500 1! #9571000 0! #9571500 1! #9572000 0! #9572500 1! #9573000 0! #9573500 1! #9574000 0! #9574500 1! #9575000 0! #9575500 1! #9576000 0! #9576500 1! #9577000 0! #9577500 1! #9578000 0! #9578500 1! #9579000 0! #9579500 1! #9580000 0! #9580500 1! #9581000 0! #9581500 1! #9582000 0! #9582500 1! #9583000 0! #9583500 1! #9584000 0! #9584500 1! #9585000 0! #9585500 1! #9586000 0! #9586500 1! #9587000 0! #9587500 1! #9588000 0! #9588500 1! #9589000 0! #9589500 1! #9590000 0! #9590500 1! #9591000 0! #9591500 1! #9592000 0! #9592500 1! #9593000 0! #9593500 1! #9594000 0! #9594500 1! #9595000 0! #9595500 1! #9596000 0! #9596500 1! #9597000 0! #9597500 1! #9598000 0! #9598500 1! #9599000 0! #9599500 1! #9600000 0! #9600500 1! #9601000 0! #9601500 1! #9602000 0! #9602500 1! #9603000 0! #9603500 1! #9604000 0! #9604500 1! #9605000 0! #9605500 1! #9606000 0! #9606500 1! #9607000 0! #9607500 1! #9608000 0! #9608500 1! #9609000 0! #9609500 1! #9610000 0! #9610500 1! #9611000 0! #9611500 1! #9612000 0! #9612500 1! #9613000 0! #9613500 1! #9614000 0! #9614500 1! #9615000 0! #9615500 1! #9616000 0! #9616500 1! #9616600 1N 1L #9616700 b1101000 c #9617000 0! #9617500 1! #9618000 0! #9618500 1! #9619000 0! #9619500 1! #9620000 0! #9620500 1! #9621000 0! #9621500 1! #9622000 0! #9622500 1! #9623000 0! #9623500 1! #9624000 0! #9624500 1! #9625000 0! #9625500 1! #9626000 0! #9626500 1! #9627000 0! #9627500 1! #9628000 0! #9628500 1! #9629000 0! #9629500 1! #9630000 0! #9630500 1! #9631000 0! #9631500 1! #9632000 0! #9632500 1! #9633000 0! #9633500 1! #9634000 0! #9634500 1! #9635000 0! #9635500 1! #9636000 0! #9636500 1! #9637000 0! #9637500 1! #9638000 0! #9638500 1! #9639000 0! #9639500 1! #9640000 0! #9640500 1! #9641000 0! #9641500 1! #9642000 0! #9642500 1! #9643000 0! #9643500 1! #9644000 0! #9644500 1! #9645000 0! #9645500 1! #9646000 0! #9646500 1! #9647000 0! #9647500 1! #9648000 0! #9648500 1! #9649000 0! #9649500 1! #9650000 0! #9650500 1! #9651000 0! #9651500 1! #9652000 0! #9652500 1! #9653000 0! #9653500 1! #9654000 0! #9654500 1! #9655000 0! #9655500 1! #9656000 0! #9656500 1! #9657000 0! #9657500 1! #9658000 0! #9658500 1! #9659000 0! #9659500 1! #9660000 0! #9660500 1! #9661000 0! #9661500 1! #9662000 0! #9662500 1! #9663000 0! #9663500 1! #9664000 0! #9664500 1! #9665000 0! #9665500 1! #9666000 0! #9666500 1! #9667000 0! #9667500 1! #9667600 1Q 1O #9667700 1a 1f #9667800 b0 q #9668000 0! #9668500 1! #9669000 0! #9669500 1! #9670000 0! #9670500 1! #9671000 0! #9671500 1! #9672000 0! #9672500 1! #9673000 0! #9673500 1! #9674000 0! #9674500 1! #9675000 0! #9675500 1! #9676000 0! #9676500 1! #9677000 0! #9677500 1! #9678000 0! #9678500 1! #9679000 0! #9679500 1! #9680000 0! #9680500 1! #9681000 0! #9681500 1! #9682000 0! #9682500 1! #9683000 0! #9683500 1! #9684000 0! #9684500 1! #9685000 0! #9685500 1! #9686000 0! #9686500 1! #9687000 0! #9687500 1! #9688000 0! #9688500 1! #9689000 0! #9689500 1! #9690000 0! #9690500 1! #9691000 0! #9691500 1! #9692000 0! #9692500 1! #9693000 0! #9693500 1! #9694000 0! #9694500 1! #9695000 0! #9695500 1! #9696000 0! #9696500 1! #9697000 0! #9697500 1! #9698000 0! #9698500 1! #9699000 0! #9699500 1! #9700000 0! #9700500 1! #9701000 0! #9701500 1! #9702000 0! #9702500 1! #9703000 0! #9703500 1! #9704000 0! #9704500 1! #9705000 0! #9705500 1! #9706000 0! #9706500 1! #9707000 0! #9707500 1! #9708000 0! #9708500 1! #9709000 0! #9709500 1! #9710000 0! #9710500 1! #9711000 0! #9711500 1! #9712000 0! #9712500 1! #9713000 0! #9713500 1! #9714000 0! #9714500 1! #9715000 0! #9715500 1! #9716000 0! #9716500 1! #9717000 0! #9717500 1! #9718000 0! #9718500 1! #9719000 0! #9719500 1! #9720000 0! #9720500 1! #9721000 0! #9721500 1! #9722000 0! #9722500 1! #9723000 0! #9723500 1! #9724000 0! #9724500 1! #9725000 0! #9725500 1! #9726000 0! #9726500 1! #9727000 0! #9727500 1! #9728000 0! #9728500 1! #9729000 0! #9729500 1! #9730000 0! #9730500 1! #9731000 0! #9731500 1! #9732000 0! #9732500 1! #9733000 0! #9733500 1! #9734000 0! #9734500 1! #9735000 0! #9735500 1! #9736000 0! #9736500 1! #9737000 0! #9737500 1! #9738000 0! #9738500 1! #9739000 0! #9739500 1! #9740000 0! #9740500 1! #9741000 0! #9741500 1! #9742000 0! #9742500 1! #9743000 0! #9743500 1! #9744000 0! #9744500 1! #9745000 0! #9745500 1! #9746000 0! #9746500 1! #9747000 0! #9747500 1! #9748000 0! #9748500 1! #9749000 0! #9749500 1! #9750000 0! #9750500 1! #9751000 0! #9751500 1! #9752000 0! #9752500 1! #9753000 0! #9753500 1! #9754000 0! #9754500 1! #9755000 0! #9755500 1! #9756000 0! #9756500 1! #9757000 0! #9757500 1! #9758000 0! #9758500 1! #9759000 0! #9759500 1! #9760000 0! #9760500 1! #9761000 0! #9761500 1! #9762000 0! #9762500 1! #9763000 0! #9763500 1! #9764000 0! #9764500 1! #9765000 0! #9765500 1! #9766000 0! #9766500 1! #9767000 0! #9767500 1! #9768000 0! #9768500 1! #9769000 0! #9769500 1! #9770000 0! #9770500 1! #9771000 0! #9771500 1! #9772000 0! #9772500 1! #9773000 0! #9773500 1! #9774000 0! #9774500 1! #9775000 0! #9775500 1! #9776000 0! #9776500 1! #9777000 0! #9777500 1! #9778000 0! #9778500 1! #9779000 0! #9779500 1! #9780000 0! #9780500 1! #9781000 0! #9781500 1! #9782000 0! #9782500 1! #9783000 0! #9783500 1! #9784000 0! #9784500 1! #9785000 0! #9785500 1! #9786000 0! #9786500 1! #9787000 0! #9787500 1! #9788000 0! #9788500 1! #9789000 0! #9789500 1! #9790000 0! #9790500 1! #9791000 0! #9791500 1! #9792000 0! #9792500 1! #9793000 0! #9793500 1! #9794000 0! #9794500 1! #9795000 0! #9795500 1! #9796000 0! #9796500 1! #9797000 0! #9797500 1! #9798000 0! #9798500 1! #9799000 0! #9799500 1! #9800000 0! #9800500 1! #9801000 0! #9801500 1! #9802000 0! #9802500 1! #9803000 0! #9803500 1! #9804000 0! #9804500 1! #9805000 0! #9805500 1! #9806000 0! #9806500 1! #9807000 0! #9807500 1! #9808000 0! #9808500 1! #9809000 0! #9809500 1! #9810000 0! #9810500 1! #9811000 0! #9811500 1! #9812000 0! #9812500 1! #9813000 0! #9813500 1! #9814000 0! #9814500 1! #9815000 0! #9815500 1! #9816000 0! #9816500 1! #9817000 0! #9817500 1! #9818000 0! #9818500 1! #9819000 0! #9819500 1! #9820000 0! #9820500 1! #9821000 0! #9821500 1! #9822000 0! #9822500 1! #9823000 0! #9823500 1! #9824000 0! #9824500 1! #9825000 0! #9825500 1! #9826000 0! #9826500 1! #9827000 0! #9827500 1! #9828000 0! #9828500 1! #9829000 0! #9829500 1! #9830000 0! #9830500 1! #9831000 0! #9831500 1! #9832000 0! #9832500 1! #9833000 0! #9833500 1! #9834000 0! #9834500 1! #9835000 0! #9835500 1! #9836000 0! #9836500 1! #9837000 0! #9837500 1! #9838000 0! #9838500 1! #9839000 0! #9839500 1! #9840000 0! #9840500 1! #9841000 0! #9841500 1! #9842000 0! #9842500 1! #9843000 0! #9843500 1! #9844000 0! #9844500 1! #9845000 0! #9845500 1! #9846000 0! #9846500 1! #9847000 0! #9847500 1! #9848000 0! #9848500 1! #9849000 0! #9849500 1! #9850000 0! #9850500 1! #9851000 0! #9851500 1! #9852000 0! #9852500 1! #9853000 0! #9853500 1! #9854000 0! #9854500 1! #9855000 0! #9855500 1! #9856000 0! #9856500 1! #9857000 0! #9857500 1! #9858000 0! #9858500 1! #9859000 0! #9859500 1! #9860000 0! #9860500 1! #9861000 0! #9861500 1! #9862000 0! #9862500 1! #9863000 0! #9863500 1! #9864000 0! #9864500 1! #9865000 0! #9865500 1! #9866000 0! #9866500 1! #9867000 0! #9867500 1! #9868000 0! #9868500 1! #9869000 0! #9869500 1! #9870000 0! #9870500 1! #9871000 0! #9871500 1! #9872000 0! #9872500 1! #9873000 0! #9873500 1! #9874000 0! #9874500 1! #9875000 0! #9875500 1! #9876000 0! #9876500 1! #9877000 0! #9877500 1! #9878000 0! #9878500 1! #9879000 0! #9879500 1! #9880000 0! #9880500 1! #9881000 0! #9881500 1! #9882000 0! #9882500 1! #9883000 0! #9883500 1! #9884000 0! #9884500 1! #9885000 0! #9885500 1! #9886000 0! #9886500 1! #9887000 0! #9887500 1! #9888000 0! #9888500 1! #9889000 0! #9889500 1! #9890000 0! #9890500 1! #9891000 0! #9891500 1! #9892000 0! #9892500 1! #9893000 0! #9893500 1! #9894000 0! #9894500 1! #9895000 0! #9895500 1! #9896000 0! #9896500 1! #9897000 0! #9897500 1! #9898000 0! #9898500 1! #9899000 0! #9899500 1! #9900000 0! #9900500 1! #9901000 0! #9901500 1! #9902000 0! #9902500 1! #9903000 0! #9903500 1! #9904000 0! #9904500 1! #9905000 0! #9905500 1! #9906000 0! #9906500 1! #9907000 0! #9907500 1! #9908000 0! #9908500 1! #9909000 0! #9909500 1! #9910000 0! #9910500 1! #9911000 0! #9911500 1! #9912000 0! #9912500 1! #9913000 0! #9913500 1! #9914000 0! #9914500 1! #9915000 0! #9915500 1! #9916000 0! #9916500 1! #9917000 0! #9917500 1! #9918000 0! #9918500 1! #9919000 0! #9919500 1! #9920000 0! #9920500 1! #9921000 0! #9921500 1! #9922000 0! #9922500 1! #9923000 0! #9923500 1! #9924000 0! #9924500 1! #9925000 0! #9925500 1! #9926000 0! #9926500 1! #9927000 0! #9927500 1! #9928000 0! #9928500 1! #9929000 0! #9929500 1! #9930000 0! #9930500 1! #9931000 0! #9931500 1! #9932000 0! #9932500 1! #9933000 0! #9933500 1! #9934000 0! #9934500 1! #9935000 0! #9935500 1! #9936000 0! #9936500 1! #9937000 0! #9937500 1! #9938000 0! #9938500 1! #9939000 0! #9939500 1! #9940000 0! #9940500 1! #9941000 0! #9941500 1! #9942000 0! #9942500 1! #9943000 0! #9943500 1! #9944000 0! #9944500 1! #9945000 0! #9945500 1! #9946000 0! #9946500 1! #9947000 0! #9947500 1! #9948000 0! #9948500 1! #9949000 0! #9949500 1! #9950000 0! #9950500 1! #9951000 0! #9951500 1! #9952000 0! #9952500 1! #9953000 0! #9953500 1! #9954000 0! #9954500 1! #9955000 0! #9955500 1! #9956000 0! #9956500 1! #9957000 0! #9957500 1! #9958000 0! #9958500 1! #9959000 0! #9959500 1! #9960000 0! #9960500 1! #9961000 0! #9961500 1! #9962000 0! #9962500 1! #9963000 0! #9963500 1! #9964000 0! #9964500 1! #9965000 0! #9965500 1! #9966000 0! #9966500 1! #9967000 0! #9967500 1! #9968000 0! #9968500 1! #9969000 0! #9969500 1! #9970000 0! #9970500 1! #9971000 0! #9971500 1! #9972000 0! #9972500 1! #9973000 0! #9973500 1! #9974000 0! #9974500 1! #9975000 0! #9975500 1! #9976000 0! #9976500 1! #9977000 0! #9977500 1! #9978000 0! #9978500 1! #9979000 0! #9979500 1! #9980000 0! #9980500 1! #9981000 0! #9981500 1! #9982000 0! #9982500 1! #9983000 0! #9983500 1! #9984000 0! #9984500 1! #9985000 0! #9985500 1! #9986000 0! #9986500 1! #9987000 0! #9987500 1! #9988000 0! #9988500 1! #9989000 0! #9989500 1! #9990000 0! #9990500 1! #9991000 0! #9991500 1! #9992000 0! #9992500 1! #9993000 0! #9993500 1! #9994000 0! #9994500 1! #9995000 0! #9995500 1! #9996000 0! #9996500 1! #9997000 0! #9997500 1! #9998000 0! #9998500 1! #9999000 0! #9999500 1! #10000000 0! #10000500 1! #10001000 0! #10001500 1! #10002000 0! #10002500 1! #10003000 0! #10003500 1! #10004000 0! #10004500 1! #10005000 0! #10005500 1! #10006000 0! #10006500 1! #10007000 0! #10007500 1! #10008000 0! #10008500 1! #10009000 0! #10009500 1! #10010000 0! #10010500 1! #10011000 0! #10011500 1! #10012000 0! #10012500 1! #10013000 0! #10013500 1! #10014000 0! #10014500 1! #10015000 0! #10015500 1! #10016000 0! #10016500 1! #10017000 0! #10017500 1! #10018000 0! #10018500 1! #10019000 0! #10019500 1! #10020000 0! #10020500 1! #10021000 0! #10021500 1! #10022000 0! #10022500 1! #10023000 0! #10023500 1! #10024000 0! #10024500 1! #10025000 0! #10025500 1! #10026000 0! #10026500 1! #10027000 0! #10027500 1! #10028000 0! #10028500 1! #10029000 0! #10029500 1! #10030000 0! #10030500 1! #10031000 0! #10031500 1! #10032000 0! #10032500 1! #10033000 0! #10033500 1! #10034000 0! #10034500 1! #10035000 0! #10035500 1! #10036000 0! #10036500 1! #10037000 0! #10037500 1! #10038000 0! #10038500 1! #10039000 0! #10039500 1! #10040000 0! #10040500 1! #10041000 0! #10041500 1! #10042000 0! #10042500 1! #10043000 0! #10043500 1! #10044000 0! #10044500 1! #10045000 0! #10045500 1! #10046000 0! #10046500 1! #10047000 0! #10047500 1! #10048000 0! #10048500 1! #10049000 0! #10049500 1! #10050000 0! #10050500 1! #10051000 0! #10051500 1! #10052000 0! #10052500 1! #10053000 0! #10053500 1! #10054000 0! #10054500 1! #10055000 0! #10055500 1! #10056000 0! #10056500 1! #10057000 0! #10057500 1! #10058000 0! #10058500 1! #10059000 0! #10059500 1! #10060000 0! #10060500 1! #10061000 0! #10061500 1! #10062000 0! #10062500 1! #10063000 0! #10063500 1! #10064000 0! #10064500 1! #10065000 0! #10065500 1! #10066000 0! #10066500 1! #10067000 0! #10067500 1! #10068000 0! #10068500 1! #10069000 0! #10069500 1! #10070000 0! #10070500 1! #10071000 0! #10071500 1! #10072000 0! #10072500 1! #10073000 0! #10073500 1! #10074000 0! #10074500 1! #10075000 0! #10075500 1! #10076000 0! #10076500 1! #10077000 0! #10077500 1! #10078000 0! #10078500 1! #10079000 0! #10079500 1! #10080000 0! #10080500 1! #10081000 0! #10081500 1! #10082000 0! #10082500 1! #10083000 0! #10083500 1! #10084000 0! #10084500 1! #10085000 0! #10085500 1! #10086000 0! #10086500 1! #10087000 0! #10087500 1! #10088000 0! #10088500 1! #10089000 0! #10089500 1! #10090000 0! #10090500 1! #10091000 0! #10091500 1! #10092000 0! #10092500 1! #10093000 0! #10093500 1! #10094000 0! #10094500 1! #10095000 0! #10095500 1! #10096000 0! #10096500 1! #10097000 0! #10097500 1! #10098000 0! #10098500 1! #10099000 0! #10099500 1! #10100000 0! #10100500 1! #10101000 0! #10101500 1! #10102000 0! #10102500 1! #10103000 0! #10103500 1! #10104000 0! #10104500 1! #10105000 0! #10105500 1! #10106000 0! #10106500 1! #10107000 0! #10107500 1! #10108000 0! #10108500 1! #10109000 0! #10109500 1! #10110000 0! #10110500 1! #10111000 0! #10111500 1! #10112000 0! #10112500 1! #10113000 0! #10113500 1! #10114000 0! #10114500 1! #10115000 0! #10115500 1! #10116000 0! #10116500 1! #10117000 0! #10117500 1! #10118000 0! #10118500 1! #10119000 0! #10119500 1! #10120000 0! #10120500 1! #10121000 0! #10121500 1! #10122000 0! #10122500 1! #10123000 0! #10123500 1! #10124000 0! #10124500 1! #10125000 0! #10125500 1! #10126000 0! #10126500 1! #10127000 0! #10127500 1! #10128000 0! #10128500 1! #10129000 0! #10129500 1! #10130000 0! #10130500 1! #10131000 0! #10131500 1! #10132000 0! #10132500 1! #10133000 0! #10133500 1! #10134000 0! #10134500 1! #10135000 0! #10135500 1! #10136000 0! #10136500 1! #10137000 0! #10137500 1! #10138000 0! #10138500 1! #10139000 0! #10139500 1! #10140000 0! #10140500 1! #10141000 0! #10141500 1! #10142000 0! #10142500 1! #10143000 0! #10143500 1! #10144000 0! #10144500 1! #10145000 0! #10145500 1! #10146000 0! #10146500 1! #10147000 0! #10147500 1! #10148000 0! #10148500 1! #10149000 0! #10149500 1! #10150000 0! #10150500 1! #10151000 0! #10151500 1! #10152000 0! #10152500 1! #10153000 0! #10153500 1! #10154000 0! #10154500 1! #10155000 0! #10155500 1! #10156000 0! #10156500 1! #10157000 0! #10157500 1! #10158000 0! #10158500 1! #10159000 0! #10159500 1! #10160000 0! #10160500 1! #10161000 0! #10161500 1! #10162000 0! #10162500 1! #10163000 0! #10163500 1! #10164000 0! #10164500 1! #10165000 0! #10165500 1! #10166000 0! #10166500 1! #10167000 0! #10167500 1! #10168000 0! #10168500 1! #10169000 0! #10169500 1! #10170000 0! #10170500 1! #10171000 0! #10171500 1! #10172000 0! #10172500 1! #10173000 0! #10173500 1! #10174000 0! #10174500 1! #10175000 0! #10175500 1! #10176000 0! #10176500 1! #10177000 0! #10177500 1! #10178000 0! #10178500 1! #10179000 0! #10179500 1! #10180000 0! #10180500 1! #10181000 0! #10181500 1! #10182000 0! #10182500 1! #10183000 0! #10183500 1! #10184000 0! #10184500 1! #10185000 0! #10185500 1! #10186000 0! #10186500 1! #10187000 0! #10187500 1! #10188000 0! #10188500 1! #10189000 0! #10189500 1! #10190000 0! #10190500 1! #10191000 0! #10191500 1! #10192000 0! #10192500 1! #10193000 0! #10193500 1! #10194000 0! #10194500 1! #10195000 0! #10195500 1! #10196000 0! #10196500 1! #10197000 0! #10197500 1! #10198000 0! #10198500 1! #10199000 0! #10199500 1! #10200000 0! #10200500 1! #10201000 0! #10201500 1! #10202000 0! #10202500 1! #10203000 0! #10203500 1! #10204000 0! #10204500 1! #10205000 0! #10205500 1! #10206000 0! #10206500 1! #10207000 0! #10207500 1! #10208000 0! #10208500 1! #10209000 0! #10209500 1! #10210000 0! #10210500 1! #10211000 0! #10211500 1! #10212000 0! #10212500 1! #10213000 0! #10213500 1! #10214000 0! #10214500 1! #10215000 0! #10215500 1! #10216000 0! #10216500 1! #10217000 0! #10217500 1! #10218000 0! #10218500 1! #10219000 0! #10219500 1! #10220000 0! #10220500 1! #10221000 0! #10221500 1! #10222000 0! #10222500 1! #10223000 0! #10223500 1! #10224000 0! #10224500 1! #10225000 0! #10225500 1! #10226000 0! #10226500 1! #10227000 0! #10227500 1! #10228000 0! #10228500 1! #10229000 0! #10229500 1! #10230000 0! #10230500 1! #10231000 0! #10231500 1! #10232000 0! #10232500 1! #10233000 0! #10233500 1! #10234000 0! #10234500 1! #10235000 0! #10235500 1! #10236000 0! #10236500 1! #10237000 0! #10237500 1! #10238000 0! #10238500 1! #10239000 0! #10239500 1! #10240000 0! #10240500 1! #10241000 0! #10241500 1! #10242000 0! #10242500 1! #10243000 0! #10243500 1! #10244000 0! #10244500 1! #10245000 0! #10245500 1! #10246000 0! #10246500 1! #10247000 0! #10247500 1! #10248000 0! #10248500 1! #10249000 0! #10249500 1! #10250000 0! #10250500 1! #10251000 0! #10251500 1! #10252000 0! #10252500 1! #10253000 0! #10253500 1! #10254000 0! #10254500 1! #10255000 0! #10255500 1! #10256000 0! #10256500 1! #10257000 0! #10257500 1! #10258000 0! #10258500 1! #10259000 0! #10259500 1! #10260000 0! #10260500 1! #10261000 0! #10261500 1! #10262000 0! #10262500 1! #10263000 0! #10263500 1! #10264000 0! #10264500 1! #10265000 0! #10265500 1! #10266000 0! #10266500 1! #10267000 0! #10267500 1! #10268000 0! #10268500 1! #10269000 0! #10269500 1! #10270000 0! #10270500 1! #10271000 0! #10271500 1! #10272000 0! #10272500 1! #10273000 0! #10273500 1! #10274000 0! #10274500 1! #10275000 0! #10275500 1! #10276000 0! #10276500 1! #10277000 0! #10277500 1! #10278000 0! #10278500 1! #10279000 0! #10279500 1! #10280000 0! #10280500 1! #10281000 0! #10281500 1! #10282000 0! #10282500 1! #10283000 0! #10283500 1! #10284000 0! #10284500 1! #10285000 0! #10285500 1! #10286000 0! #10286500 1! #10287000 0! #10287500 1! #10288000 0! #10288500 1! #10289000 0! #10289500 1! #10290000 0! #10290500 1! #10291000 0! #10291500 1! #10292000 0! #10292500 1! #10293000 0! #10293500 1! #10294000 0! #10294500 1! #10295000 0! #10295500 1! #10296000 0! #10296500 1! #10297000 0! #10297500 1! #10298000 0! #10298500 1! #10299000 0! #10299500 1! #10300000 0! #10300500 1! #10301000 0! #10301500 1! #10302000 0! #10302500 1! #10303000 0! #10303500 1! #10304000 0! #10304500 1! #10305000 0! #10305500 1! #10306000 0! #10306500 1! #10307000 0! #10307500 1! #10308000 0! #10308500 1! #10309000 0! #10309500 1! #10310000 0! #10310500 1! #10311000 0! #10311500 1! #10312000 0! #10312500 1! #10313000 0! #10313500 1! #10314000 0! #10314500 1! #10315000 0! #10315500 1! #10316000 0! #10316500 1! #10317000 0! #10317500 1! #10318000 0! #10318500 1! #10319000 0! #10319500 1! #10320000 0! #10320500 1! #10321000 0! #10321500 1! #10322000 0! #10322500 1! #10323000 0! #10323500 1! #10324000 0! #10324500 1! #10325000 0! #10325500 1! #10326000 0! #10326500 1! #10327000 0! #10327500 1! #10328000 0! #10328500 1! #10329000 0! #10329500 1! #10330000 0! #10330500 1! #10331000 0! #10331500 1! #10332000 0! #10332500 1! #10333000 0! #10333500 1! #10334000 0! #10334500 1! #10335000 0! #10335500 1! #10336000 0! #10336500 1! #10337000 0! #10337500 1! #10338000 0! #10338500 1! #10339000 0! #10339500 1! #10340000 0! #10340500 1! #10341000 0! #10341500 1! #10342000 0! #10342500 1! #10343000 0! #10343500 1! #10344000 0! #10344500 1! #10345000 0! #10345500 1! #10346000 0! #10346500 1! #10347000 0! #10347500 1! #10348000 0! #10348500 1! #10349000 0! #10349500 1! #10350000 0! #10350500 1! #10351000 0! #10351500 1! #10352000 0! #10352500 1! #10353000 0! #10353500 1! #10354000 0! #10354500 1! #10355000 0! #10355500 1! #10356000 0! #10356500 1! #10357000 0! #10357500 1! #10358000 0! #10358500 1! #10359000 0! #10359500 1! #10360000 0! #10360500 1! #10361000 0! #10361500 1! #10362000 0! #10362500 1! #10363000 0! #10363500 1! #10364000 0! #10364500 1! #10365000 0! #10365500 1! #10366000 0! #10366500 1! #10367000 0! #10367500 1! #10368000 0! #10368500 1! #10369000 0! #10369500 1! #10370000 0! #10370500 1! #10371000 0! #10371500 1! #10372000 0! #10372500 1! #10373000 0! #10373500 1! #10374000 0! #10374500 1! #10375000 0! #10375500 1! #10376000 0! #10376500 1! #10377000 0! #10377500 1! #10378000 0! #10378500 1! #10379000 0! #10379500 1! #10380000 0! #10380500 1! #10381000 0! #10381500 1! #10382000 0! #10382500 1! #10383000 0! #10383500 1! #10384000 0! #10384500 1! #10385000 0! #10385500 1! #10386000 0! #10386500 1! #10387000 0! #10387500 1! #10388000 0! #10388500 1! #10389000 0! #10389500 1! #10390000 0! #10390500 1! #10391000 0! #10391500 1! #10392000 0! #10392500 1! #10393000 0! #10393500 1! #10394000 0! #10394500 1! #10395000 0! #10395500 1! #10396000 0! #10396500 1! #10397000 0! #10397500 1! #10398000 0! #10398500 1! #10399000 0! #10399500 1! #10400000 0! #10400500 1! #10401000 0! #10401500 1! #10402000 0! #10402500 1! #10403000 0! #10403500 1! #10404000 0! #10404500 1! #10405000 0! #10405500 1! #10406000 0! #10406500 1! #10407000 0! #10407500 1! #10408000 0! #10408500 1! #10409000 0! #10409500 1! #10410000 0! #10410500 1! #10411000 0! #10411500 1! #10412000 0! #10412500 1! #10413000 0! #10413500 1! #10414000 0! #10414500 1! #10415000 0! #10415500 1! #10416000 0! #10416500 1! #10417000 0! #10417500 1! #10418000 0! #10418500 1! #10419000 0! #10419500 1! #10420000 0! #10420500 1! #10421000 0! #10421500 1! #10422000 0! #10422500 1! #10423000 0! #10423500 1! #10424000 0! #10424500 1! #10425000 0! #10425500 1! #10426000 0! #10426500 1! #10427000 0! #10427500 1! #10428000 0! #10428500 1! #10429000 0! #10429500 1! #10430000 0! #10430500 1! #10431000 0! #10431500 1! #10432000 0! #10432500 1! #10433000 0! #10433500 1! #10434000 0! #10434500 1! #10435000 0! #10435500 1! #10436000 0! #10436500 1! #10437000 0! #10437500 1! #10438000 0! #10438500 1! #10439000 0! #10439500 1! #10440000 0! #10440500 1! #10441000 0! #10441500 1! #10442000 0! #10442500 1! #10443000 0! #10443500 1! #10444000 0! #10444500 1! #10445000 0! #10445500 1! #10446000 0! #10446500 1! #10447000 0! #10447500 1! #10448000 0! #10448500 1! #10449000 0! #10449500 1! #10450000 0! #10450500 1! #10451000 0! #10451500 1! #10452000 0! #10452500 1! #10453000 0! #10453500 1! #10454000 0! #10454500 1! #10455000 0! #10455500 1! #10456000 0! #10456500 1! #10457000 0! #10457500 1! #10458000 0! #10458500 1! #10459000 0! #10459500 1! #10460000 0! #10460500 1! #10461000 0! #10461500 1! #10462000 0! #10462500 1! #10463000 0! #10463500 1! #10464000 0! #10464500 1! #10465000 0! #10465500 1! #10466000 0! #10466500 1! #10467000 0! #10467500 1! #10468000 0! #10468500 1! #10469000 0! #10469500 1! #10470000 0! #10470500 1! #10471000 0! #10471500 1! #10472000 0! #10472500 1! #10473000 0! #10473500 1! #10474000 0! #10474500 1! #10475000 0! #10475500 1! #10476000 0! #10476500 1! #10477000 0! #10477500 1! #10478000 0! #10478500 1! #10479000 0! #10479500 1! #10480000 0! #10480500 1! #10481000 0! #10481500 1! #10482000 0! #10482500 1! #10483000 0! #10483500 1! #10484000 0! #10484500 1! #10485000 0! #10485500 1! #10486000 0! #10486500 1! #10487000 0! #10487500 1! #10488000 0! #10488500 1! #10489000 0! #10489500 1! #10490000 0! #10490500 1! #10491000 0! #10491500 1! #10492000 0! #10492500 1! #10493000 0! #10493500 1! #10494000 0! #10494500 1! #10495000 0! #10495500 1! #10496000 0! #10496500 1! #10497000 0! #10497500 1! #10498000 0! #10498500 1! #10499000 0! #10499500 1! #10500000 0! #10500500 1! #10501000 0! #10501500 1! #10502000 0! #10502500 1! #10503000 0! #10503500 1! #10504000 0! #10504500 1! #10505000 0! #10505500 1! #10506000 0! #10506500 1! #10507000 0! #10507500 1! #10508000 0! #10508500 1! #10509000 0! #10509500 1! #10510000 0! #10510500 1! #10511000 0! #10511500 1! #10512000 0! #10512500 1! #10513000 0! #10513500 1! #10514000 0! #10514500 1! #10515000 0! #10515500 1! #10516000 0! #10516500 1! #10517000 0! #10517500 1! #10518000 0! #10518500 1! #10519000 0! #10519500 1! #10520000 0! #10520500 1! #10521000 0! #10521500 1! #10522000 0! #10522500 1! #10523000 0! #10523500 1! #10524000 0! #10524500 1! #10525000 0! #10525500 1! #10526000 0! #10526500 1! #10527000 0! #10527500 1! #10528000 0! #10528500 1! #10529000 0! #10529500 1! #10530000 0! #10530500 1! #10531000 0! #10531500 1! #10532000 0! #10532500 1! #10533000 0! #10533500 1! #10534000 0! #10534500 1! #10535000 0! #10535500 1! #10536000 0! #10536500 1! #10537000 0! #10537500 1! #10538000 0! #10538500 1! #10539000 0! #10539500 1! #10540000 0! #10540500 1! #10541000 0! #10541500 1! #10542000 0! #10542500 1! #10543000 0! #10543500 1! #10544000 0! #10544500 1! #10545000 0! #10545500 1! #10546000 0! #10546500 1! #10547000 0! #10547500 1! #10548000 0! #10548500 1! #10549000 0! #10549500 1! #10550000 0! #10550500 1! #10551000 0! #10551500 1! #10552000 0! #10552500 1! #10553000 0! #10553500 1! #10554000 0! #10554500 1! #10555000 0! #10555500 1! #10556000 0! #10556500 1! #10557000 0! #10557500 1! #10558000 0! #10558500 1! #10559000 0! #10559500 1! #10560000 0! #10560500 1! #10561000 0! #10561500 1! #10562000 0! #10562500 1! #10563000 0! #10563500 1! #10564000 0! #10564500 1! #10565000 0! #10565500 1! #10566000 0! #10566500 1! #10567000 0! #10567500 1! #10568000 0! #10568500 1! #10569000 0! #10569500 1! #10570000 0! #10570500 1! #10571000 0! #10571500 1! #10572000 0! #10572500 1! #10573000 0! #10573500 1! #10574000 0! #10574500 1! #10575000 0! #10575500 1! #10576000 0! #10576500 1! #10577000 0! #10577500 1! #10578000 0! #10578500 1! #10579000 0! #10579500 1! #10580000 0! #10580500 1! #10581000 0! #10581500 1! #10582000 0! #10582500 1! #10583000 0! #10583500 1! #10584000 0! #10584500 1! #10585000 0! #10585500 1! #10586000 0! #10586500 1! #10587000 0! #10587500 1! #10588000 0! #10588500 1! #10589000 0! #10589500 1! #10590000 0! #10590500 1! #10591000 0! #10591500 1! #10592000 0! #10592500 1! #10593000 0! #10593500 1! #10594000 0! #10594500 1! #10595000 0! #10595500 1! #10596000 0! #10596500 1! #10597000 0! #10597500 1! #10598000 0! #10598500 1! #10599000 0! #10599500 1! #10600000 0! #10600500 1! #10601000 0! #10601500 1! #10602000 0! #10602500 1! #10603000 0! #10603500 1! #10604000 0! #10604500 1! #10605000 0! #10605500 1! #10606000 0! #10606500 1! #10607000 0! #10607500 1! #10608000 0! #10608500 1! #10609000 0! #10609500 1! #10610000 0! #10610500 1! #10611000 0! #10611500 1! #10612000 0! #10612500 1! #10613000 0! #10613500 1! #10614000 0! #10614500 1! #10615000 0! #10615500 1! #10616000 0! #10616500 1! #10617000 0! #10617500 1! #10618000 0! #10618500 1! #10619000 0! #10619500 1! #10620000 0! #10620500 1! #10621000 0! #10621500 1! #10622000 0! #10622500 1! #10623000 0! #10623500 1! #10624000 0! #10624500 1! #10625000 0! #10625500 1! #10626000 0! #10626500 1! #10627000 0! #10627500 1! #10628000 0! #10628500 1! #10629000 0! #10629500 1! #10630000 0! #10630500 1! #10631000 0! #10631500 1! #10632000 0! #10632500 1! #10633000 0! #10633500 1! #10634000 0! #10634500 1! #10635000 0! #10635500 1! #10636000 0! #10636500 1! #10637000 0! #10637500 1! #10638000 0! #10638500 1! #10639000 0! #10639500 1! #10640000 0! #10640500 1! #10641000 0! #10641500 1! #10642000 0! #10642500 1! #10643000 0! #10643500 1! #10644000 0! #10644500 1! #10645000 0! #10645500 1! #10646000 0! #10646500 1! #10647000 0! #10647500 1! #10648000 0! #10648500 1! #10649000 0! #10649500 1! #10650000 0! #10650500 1! #10651000 0! #10651500 1! #10652000 0! #10652500 1! #10653000 0! #10653500 1! #10654000 0! #10654500 1! #10655000 0! #10655500 1! #10656000 0! #10656500 1! #10657000 0! #10657500 1! #10658000 0! #10658500 1! #10659000 0! #10659500 1! #10660000 0! #10660500 1! #10661000 0! #10661500 1! #10662000 0! #10662500 1! #10663000 0! #10663500 1! #10664000 0! #10664500 1! #10665000 0! #10665500 1! #10666000 0! #10666500 1! #10667000 0! #10667500 1! #10668000 0! #10668500 1! #10669000 0! #10669500 1! #10670000 0! #10670500 1! #10671000 0! #10671500 1! #10672000 0! #10672500 1! #10673000 0! #10673500 1! #10674000 0! #10674500 1! #10675000 0! #10675500 1! #10676000 0! #10676500 1! #10677000 0! #10677500 1! #10678000 0! #10678500 1! #10679000 0! #10679500 1! #10680000 0! #10680500 1! #10681000 0! #10681500 1! #10682000 0! #10682500 1! #10683000 0! #10683500 1! #10684000 0! #10684500 1! #10685000 0! #10685500 1! #10686000 0! #10686500 1! #10687000 0! #10687500 1! #10688000 0! #10688500 1! #10689000 0! #10689500 1! #10690000 0! #10690500 1! #10691000 0! #10691500 1! #10692000 0! #10692500 1! #10693000 0! #10693500 1! #10694000 0! #10694500 1! #10695000 0! #10695500 1! #10696000 0! #10696500 1! #10697000 0! #10697500 1! #10698000 0! #10698500 1! #10699000 0! #10699500 1! #10700000 0! #10700500 1! #10701000 0! #10701500 1! #10702000 0! #10702500 1! #10703000 0! #10703500 1! #10704000 0! #10704500 1! #10705000 0! #10705500 1! #10706000 0! #10706500 1! #10707000 0! #10707500 1! #10708000 0! #10708500 1! #10709000 0! #10709500 1! #10710000 0! #10710500 1! #10711000 0! #10711500 1! #10712000 0! #10712500 1! #10713000 0! #10713500 1! #10714000 0! #10714500 1! #10715000 0! #10715500 1! #10716000 0! #10716500 1! #10717000 0! #10717500 1! #10718000 0! #10718500 1! #10719000 0! #10719500 1! #10720000 0! #10720500 1! #10721000 0! #10721500 1! #10722000 0! #10722500 1! #10723000 0! #10723500 1! #10724000 0! #10724500 1! #10725000 0! #10725500 1! #10726000 0! #10726500 1! #10727000 0! #10727500 1! #10728000 0! #10728500 1! #10729000 0! #10729500 1! #10730000 0! #10730500 1! #10731000 0! #10731500 1! #10732000 0! #10732500 1! #10733000 0! #10733500 1! #10734000 0! #10734500 1! #10735000 0! #10735500 1! #10736000 0! #10736500 1! #10737000 0! #10737500 1! #10738000 0! #10738500 1! #10739000 0! #10739500 1! #10740000 0! #10740500 1! #10741000 0! #10741500 1! #10742000 0! #10742500 1! #10743000 0! #10743500 1! #10744000 0! #10744500 1! #10745000 0! #10745500 1! #10746000 0! #10746500 1! #10747000 0! #10747500 1! #10748000 0! #10748500 1! #10749000 0! #10749500 1! #10750000 0! #10750500 1! #10751000 0! #10751500 1! #10752000 0! #10752500 1! #10753000 0! #10753500 1! #10754000 0! #10754500 1! #10755000 0! #10755500 1! #10756000 0! #10756500 1! #10757000 0! #10757500 1! #10758000 0! #10758500 1! #10759000 0! #10759500 1! #10760000 0! #10760500 1! #10761000 0! #10761500 1! #10762000 0! #10762500 1! #10763000 0! #10763500 1! #10764000 0! #10764500 1! #10765000 0! #10765500 1! #10766000 0! #10766500 1! #10767000 0! #10767500 1! #10768000 0! #10768500 1! #10769000 0! #10769500 1! #10770000 0! #10770500 1! #10771000 0! #10771500 1! #10772000 0! #10772500 1! #10773000 0! #10773500 1! #10774000 0! #10774500 1! #10775000 0! #10775500 1! #10776000 0! #10776500 1! #10777000 0! #10777500 1! #10778000 0! #10778500 1! #10779000 0! #10779500 1! #10780000 0! #10780500 1! #10781000 0! #10781500 1! #10782000 0! #10782500 1! #10783000 0! #10783500 1! #10784000 0! #10784500 1! #10785000 0! #10785500 1! #10786000 0! #10786500 1! #10787000 0! #10787500 1! #10788000 0! #10788500 1! #10789000 0! #10789500 1! #10790000 0! #10790500 1! #10791000 0! #10791500 1! #10792000 0! #10792500 1! #10793000 0! #10793500 1! #10794000 0! #10794500 1! #10795000 0! #10795500 1! #10796000 0! #10796500 1! #10797000 0! #10797500 1! #10798000 0! #10798500 1! #10799000 0! #10799500 1! #10800000 0! #10800500 1! #10801000 0! #10801500 1! #10802000 0! #10802500 1! #10803000 0! #10803500 1! #10804000 0! #10804500 1! #10805000 0! #10805500 1! #10806000 0! #10806500 1! #10807000 0! #10807500 1! #10808000 0! #10808500 1! #10809000 0! #10809500 1! #10810000 0! #10810500 1! #10811000 0! #10811500 1! #10812000 0! #10812500 1! #10813000 0! #10813500 1! #10814000 0! #10814500 1! #10815000 0! #10815500 1! #10816000 0! #10816500 1! #10817000 0! #10817500 1! #10818000 0! #10818500 1! #10819000 0! #10819500 1! #10820000 0! #10820500 1! #10821000 0! #10821500 1! #10822000 0! #10822500 1! #10823000 0! #10823500 1! #10824000 0! #10824500 1! #10825000 0! #10825500 1! #10826000 0! #10826500 1! #10827000 0! #10827500 1! #10828000 0! #10828500 1! #10829000 0! #10829500 1! #10830000 0! #10830500 1! #10831000 0! #10831500 1! #10832000 0! #10832500 1! #10833000 0! #10833500 1! #10834000 0! #10834500 1! #10835000 0! #10835500 1! #10836000 0! #10836500 1! #10837000 0! #10837500 1! #10838000 0! #10838500 1! #10839000 0! #10839500 1! #10840000 0! #10840500 1! #10841000 0! #10841500 1! #10842000 0! #10842500 1! #10843000 0! #10843500 1! #10844000 0! #10844500 1! #10845000 0! #10845500 1! #10846000 0! #10846500 1! #10847000 0! #10847500 1! #10848000 0! #10848500 1! #10849000 0! #10849500 1! #10850000 0! #10850500 1! #10851000 0! #10851500 1! #10852000 0! #10852500 1! #10853000 0! #10853500 1! #10854000 0! #10854500 1! #10855000 0! #10855500 1! #10856000 0! #10856500 1! #10857000 0! #10857500 1! #10858000 0! #10858500 1! #10859000 0! #10859500 1! #10860000 0! #10860500 1! #10861000 0! #10861500 1! #10862000 0! #10862500 1! #10863000 0! #10863500 1! #10864000 0! #10864500 1! #10865000 0! #10865500 1! #10866000 0! #10866500 1! #10867000 0! #10867500 1! #10868000 0! #10868500 1! #10869000 0! #10869500 1! #10870000 0! #10870500 1! #10871000 0! #10871500 1! #10872000 0! #10872500 1! #10873000 0! #10873500 1! #10874000 0! #10874500 1! #10875000 0! #10875500 1! #10876000 0! #10876500 1! #10877000 0! #10877500 1! #10878000 0! #10878500 1! #10879000 0! #10879500 1! #10880000 0! #10880500 1! #10881000 0! #10881500 1! #10882000 0! #10882500 1! #10883000 0! #10883500 1! #10884000 0! #10884500 1! #10885000 0! #10885500 1! #10886000 0! #10886500 1! #10887000 0! #10887500 1! #10888000 0! #10888500 1! #10889000 0! #10889500 1! #10890000 0! #10890500 1! #10891000 0! #10891500 1! #10892000 0! #10892500 1! #10893000 0! #10893500 1! #10894000 0! #10894500 1! #10895000 0! #10895500 1! #10896000 0! #10896500 1! #10897000 0! #10897500 1! #10898000 0! #10898500 1! #10899000 0! #10899500 1! #10900000 0! #10900500 1! #10901000 0! #10901500 1! #10902000 0! #10902500 1! #10903000 0! #10903500 1! #10904000 0! #10904500 1! #10905000 0! #10905500 1! #10906000 0! #10906500 1! #10907000 0! #10907500 1! #10908000 0! #10908500 1! #10909000 0! #10909500 1! #10910000 0! #10910500 1! #10911000 0! #10911500 1! #10912000 0! #10912500 1! #10913000 0! #10913500 1! #10914000 0! #10914500 1! #10915000 0! #10915500 1! #10916000 0! #10916500 1! #10917000 0! #10917500 1! #10918000 0! #10918500 1! #10919000 0! #10919500 1! #10920000 0! #10920500 1! #10921000 0! #10921500 1! #10922000 0! #10922500 1! #10923000 0! #10923500 1! #10924000 0! #10924500 1! #10925000 0! #10925500 1! #10926000 0! #10926500 1! #10927000 0! #10927500 1! #10928000 0! #10928500 1! #10929000 0! #10929500 1! #10930000 0! #10930500 1! #10931000 0! #10931500 1! #10932000 0! #10932500 1! #10933000 0! #10933500 1! #10934000 0! #10934500 1! #10935000 0! #10935500 1! #10936000 0! #10936500 1! #10937000 0! #10937500 1! #10938000 0! #10938500 1! #10939000 0! #10939500 1! #10940000 0! #10940500 1! #10941000 0! #10941500 1! #10942000 0! #10942500 1! #10943000 0! #10943500 1! #10944000 0! #10944500 1! #10945000 0! #10945500 1! #10946000 0! #10946500 1! #10947000 0! #10947500 1! #10948000 0! #10948500 1! #10949000 0! #10949500 1! #10950000 0! #10950500 1! #10951000 0! #10951500 1! #10952000 0! #10952500 1! #10953000 0! #10953500 1! #10954000 0! #10954500 1! #10955000 0! #10955500 1! #10956000 0! #10956500 1! #10957000 0! #10957500 1! #10958000 0! #10958500 1! #10959000 0! #10959500 1! #10960000 0! #10960500 1! #10961000 0! #10961500 1! #10962000 0! #10962500 1! #10963000 0! #10963500 1! #10964000 0! #10964500 1! #10965000 0! #10965500 1! #10966000 0! #10966500 1! #10967000 0! #10967500 1! #10968000 0! #10968500 1! #10969000 0! #10969500 1! #10970000 0! #10970500 1! #10971000 0! #10971500 1! #10972000 0! #10972500 1! #10973000 0! #10973500 1! #10974000 0! #10974500 1! #10975000 0! #10975500 1! #10976000 0! #10976500 1! #10977000 0! #10977500 1! #10978000 0! #10978500 1! #10979000 0! #10979500 1! #10980000 0! #10980500 1! #10981000 0! #10981500 1! #10982000 0! #10982500 1! #10983000 0! #10983500 1! #10984000 0! #10984500 1! #10985000 0! #10985500 1! #10986000 0! #10986500 1! #10987000 0! #10987500 1! #10988000 0! #10988500 1! #10989000 0! #10989500 1! #10990000 0! #10990500 1! #10991000 0! #10991500 1! #10992000 0! #10992500 1! #10993000 0! #10993500 1! #10994000 0! #10994500 1! #10995000 0! #10995500 1! #10996000 0! #10996500 1! #10997000 0! #10997500 1! #10998000 0! #10998500 1! #10999000 0! #10999500 1! #11000000 0! #11000500 1! #11001000 0! #11001500 1! #11002000 0! #11002500 1! #11003000 0! #11003500 1! #11004000 0! #11004500 1! #11005000 0! #11005500 1! #11006000 0! #11006500 1! #11007000 0! #11007500 1! #11008000 0! #11008500 1! #11009000 0! #11009500 1! #11010000 0! #11010500 1! #11011000 0! #11011500 1! #11012000 0! #11012500 1! #11013000 0! #11013500 1! #11014000 0! #11014500 1! #11015000 0! #11015500 1! #11016000 0! #11016500 1! #11017000 0! #11017500 1! #11018000 0! #11018500 1! #11019000 0! #11019500 1! #11020000 0! #11020500 1! #11021000 0! #11021500 1! #11022000 0! #11022500 1! #11023000 0! #11023500 1! #11024000 0! #11024500 1! #11025000 0! #11025500 1! #11026000 0! #11026500 1! #11027000 0! #11027500 1! #11028000 0! #11028500 1! #11029000 0! #11029500 1! #11030000 0! #11030500 1! #11031000 0! #11031500 1! #11032000 0! #11032500 1! #11033000 0! #11033500 1! #11034000 0! #11034500 1! #11035000 0! #11035500 1! #11036000 0! #11036500 1! #11037000 0! #11037500 1! #11038000 0! #11038500 1! #11039000 0! #11039500 1! #11040000 0! #11040500 1! #11041000 0! #11041500 1! #11042000 0! #11042500 1! #11043000 0! #11043500 1! #11044000 0! #11044500 1! #11045000 0! #11045500 1! #11046000 0! #11046500 1! #11047000 0! #11047500 1! #11048000 0! #11048500 1! #11049000 0! #11049500 1! #11050000 0! #11050500 1! #11051000 0! #11051500 1! #11052000 0! #11052500 1! #11053000 0! #11053500 1! #11054000 0! #11054500 1! #11055000 0! #11055500 1! #11056000 0! #11056500 1! #11057000 0! #11057500 1! #11058000 0! #11058500 1! #11059000 0! #11059500 1! #11060000 0! #11060500 1! #11061000 0! #11061500 1! #11062000 0! #11062500 1! #11063000 0! #11063500 1! #11064000 0! #11064500 1! #11065000 0! #11065500 1! #11066000 0! #11066500 1! #11067000 0! #11067500 1! #11068000 0! #11068500 1! #11069000 0! #11069500 1! #11070000 0! #11070500 1! #11071000 0! #11071500 1! #11072000 0! #11072500 1! #11073000 0! #11073500 1! #11074000 0! #11074500 1! #11075000 0! #11075500 1! #11076000 0! #11076500 1! #11077000 0! #11077500 1! #11078000 0! #11078500 1! #11079000 0! #11079500 1! #11080000 0! #11080500 1! #11081000 0! #11081500 1! #11082000 0! #11082500 1! #11083000 0! #11083500 1! #11084000 0! #11084500 1! #11085000 0! #11085500 1! #11086000 0! #11086500 1! #11087000 0! #11087500 1! #11088000 0! #11088500 1! #11089000 0! #11089500 1! #11090000 0! #11090500 1! #11091000 0! #11091500 1! #11092000 0! #11092500 1! #11093000 0! #11093500 1! #11094000 0! #11094500 1! #11095000 0! #11095500 1! #11096000 0! #11096500 1! #11097000 0! #11097500 1! #11098000 0! #11098500 1! #11099000 0! #11099500 1! #11100000 0! #11100500 1! #11101000 0! #11101500 1! #11102000 0! #11102500 1! #11103000 0! #11103500 1! #11104000 0! #11104500 1! #11105000 0! #11105500 1! #11106000 0! #11106500 1! #11107000 0! #11107500 1! #11108000 0! #11108500 1! #11109000 0! #11109500 1! #11110000 0! #11110500 1! #11111000 0! #11111500 1! #11112000 0! #11112500 1! #11113000 0! #11113500 1! #11114000 0! #11114500 1! #11115000 0! #11115500 1! #11116000 0! #11116500 1! #11117000 0! #11117500 1! #11118000 0! #11118500 1! #11119000 0! #11119500 1! #11120000 0! #11120500 1! #11121000 0! #11121500 1! #11122000 0! #11122500 1! #11123000 0! #11123500 1! #11124000 0! #11124500 1! #11125000 0! #11125500 1! #11126000 0! #11126500 1! #11127000 0! #11127500 1! #11128000 0! #11128500 1! #11129000 0! #11129500 1! #11130000 0! #11130500 1! #11131000 0! #11131500 1! #11132000 0! #11132500 1! #11133000 0! #11133500 1! #11134000 0! #11134500 1! #11135000 0! #11135500 1! #11136000 0! #11136500 1! #11137000 0! #11137500 1! #11138000 0! #11138500 1! #11139000 0! #11139500 1! #11140000 0! #11140500 1! #11141000 0! #11141500 1! #11142000 0! #11142500 1! #11143000 0! #11143500 1! #11144000 0! #11144500 1! #11145000 0! #11145500 1! #11146000 0! #11146500 1! #11147000 0! #11147500 1! #11148000 0! #11148500 1! #11149000 0! #11149500 1! #11150000 0! #11150500 1! #11151000 0! #11151500 1! #11152000 0! #11152500 1! #11153000 0! #11153500 1! #11154000 0! #11154500 1! #11155000 0! #11155500 1! #11156000 0! #11156500 1! #11157000 0! #11157500 1! #11158000 0! #11158500 1! #11159000 0! #11159500 1! #11160000 0! #11160500 1! #11161000 0! #11161500 1! #11162000 0! #11162500 1! #11163000 0! #11163500 1! #11164000 0! #11164500 1! #11165000 0! #11165500 1! #11166000 0! #11166500 1! #11167000 0! #11167500 1! #11168000 0! #11168500 1! #11169000 0! #11169500 1! #11170000 0! #11170500 1! #11171000 0! #11171500 1! #11172000 0! #11172500 1! #11173000 0! #11173500 1! #11174000 0! #11174500 1! #11175000 0! #11175500 1! #11176000 0! #11176500 1! #11177000 0! #11177500 1! #11178000 0! #11178500 1! #11179000 0! #11179500 1! #11180000 0! #11180500 1! #11181000 0! #11181500 1! #11182000 0! #11182500 1! #11183000 0! #11183500 1! #11184000 0! #11184500 1! #11185000 0! #11185500 1! #11186000 0! #11186500 1! #11187000 0! #11187500 1! #11188000 0! #11188500 1! #11189000 0! #11189500 1! #11190000 0! #11190500 1! #11191000 0! #11191500 1! #11192000 0! #11192500 1! #11193000 0! #11193500 1! #11194000 0! #11194500 1! #11195000 0! #11195500 1! #11196000 0! #11196500 1! #11197000 0! #11197500 1! #11198000 0! #11198500 1! #11199000 0! #11199500 1! #11200000 0! #11200500 1! #11201000 0! #11201500 1! #11202000 0! #11202500 1! #11203000 0! #11203500 1! #11204000 0! #11204500 1! #11205000 0! #11205500 1! #11206000 0! #11206500 1! #11207000 0! #11207500 1! #11208000 0! #11208500 1! #11209000 0! #11209500 1! #11210000 0! #11210500 1! #11211000 0! #11211500 1! #11212000 0! #11212500 1! #11213000 0! #11213500 1! #11214000 0! #11214500 1! #11215000 0! #11215500 1! #11216000 0! #11216500 1! #11217000 0! #11217500 1! #11218000 0! #11218500 1! #11219000 0! #11219500 1! #11220000 0! #11220500 1! #11221000 0! #11221500 1! #11222000 0! #11222500 1! #11223000 0! #11223500 1! #11224000 0! #11224500 1! #11225000 0! #11225500 1! #11226000 0! #11226500 1! #11227000 0! #11227500 1! #11228000 0! #11228500 1! #11229000 0! #11229500 1! #11230000 0! #11230500 1! #11231000 0! #11231500 1! #11232000 0! #11232500 1! #11233000 0! #11233500 1! #11234000 0! #11234500 1! #11235000 0! #11235500 1! #11236000 0! #11236500 1! #11237000 0! #11237500 1! #11238000 0! #11238500 1! #11239000 0! #11239500 1! #11240000 0! #11240500 1! #11241000 0! #11241500 1! #11242000 0! #11242500 1! #11243000 0! #11243500 1! #11244000 0! #11244500 1! #11245000 0! #11245500 1! #11246000 0! #11246500 1! #11247000 0! #11247500 1! #11248000 0! #11248500 1! #11249000 0! #11249500 1! #11250000 0! #11250500 1! #11251000 0! #11251500 1! #11252000 0! #11252500 1! #11253000 0! #11253500 1! #11254000 0! #11254500 1! #11255000 0! #11255500 1! #11256000 0! #11256500 1! #11257000 0! #11257500 1! #11258000 0! #11258500 1! #11259000 0! #11259500 1! #11260000 0! #11260500 1! #11261000 0! #11261500 1! #11262000 0! #11262500 1! #11263000 0! #11263500 1! #11264000 0! #11264500 1! #11265000 0! #11265500 1! #11266000 0! #11266500 1! #11267000 0! #11267500 1! #11268000 0! #11268500 1! #11269000 0! #11269500 1! #11270000 0! #11270500 1! #11271000 0! #11271500 1! #11272000 0! #11272500 1! #11273000 0! #11273500 1! #11274000 0! #11274500 1! #11275000 0! #11275500 1! #11276000 0! #11276500 1! #11277000 0! #11277500 1! #11278000 0! #11278500 1! #11279000 0! #11279500 1! #11280000 0! #11280500 1! #11281000 0! #11281500 1! #11282000 0! #11282500 1! #11283000 0! #11283500 1! #11284000 0! #11284500 1! #11285000 0! #11285500 1! #11286000 0! #11286500 1! #11287000 0! #11287500 1! #11288000 0! #11288500 1! #11289000 0! #11289500 1! #11290000 0! #11290500 1! #11291000 0! #11291500 1! #11292000 0! #11292500 1! #11293000 0! #11293500 1! #11294000 0! #11294500 1! #11295000 0! #11295500 1! #11296000 0! #11296500 1! #11297000 0! #11297500 1! #11298000 0! #11298500 1! #11299000 0! #11299500 1! #11300000 0! #11300500 1! #11301000 0! #11301500 1! #11302000 0! #11302500 1! #11303000 0! #11303500 1! #11304000 0! #11304500 1! #11305000 0! #11305500 1! #11306000 0! #11306500 1! #11307000 0! #11307500 1! #11308000 0! #11308500 1! #11309000 0! #11309500 1! #11310000 0! #11310500 1! #11311000 0! #11311500 1! #11312000 0! #11312500 1! #11313000 0! #11313500 1! #11314000 0! #11314500 1! #11315000 0! #11315500 1! #11316000 0! #11316500 1! #11317000 0! #11317500 1! #11318000 0! #11318500 1! #11319000 0! #11319500 1! #11320000 0! #11320500 1! #11321000 0! #11321500 1! #11322000 0! #11322500 1! #11323000 0! #11323500 1! #11324000 0! #11324500 1! #11325000 0! #11325500 1! #11326000 0! #11326500 1! #11327000 0! #11327500 1! #11328000 0! #11328500 1! #11329000 0! #11329500 1! #11330000 0! #11330500 1! #11331000 0! #11331500 1! #11332000 0! #11332500 1! #11333000 0! #11333500 1! #11334000 0! #11334500 1! #11335000 0! #11335500 1! #11336000 0! #11336500 1! #11337000 0! #11337500 1! #11338000 0! #11338500 1! #11339000 0! #11339500 1! #11340000 0! #11340500 1! #11341000 0! #11341500 1! #11342000 0! #11342500 1! #11343000 0! #11343500 1! #11344000 0! #11344500 1! #11345000 0! #11345500 1! #11346000 0! #11346500 1! #11347000 0! #11347500 1! #11348000 0! #11348500 1! #11349000 0! #11349500 1! #11350000 0! #11350500 1! #11351000 0! #11351500 1! #11352000 0! #11352500 1! #11353000 0! #11353500 1! #11354000 0! #11354500 1! #11355000 0! #11355500 1! #11356000 0! #11356500 1! #11357000 0! #11357500 1! #11358000 0! #11358500 1! #11359000 0! #11359500 1! #11360000 0! #11360500 1! #11361000 0! #11361500 1! #11362000 0! #11362500 1! #11363000 0! #11363500 1! #11364000 0! #11364500 1! #11365000 0! #11365500 1! #11366000 0! #11366500 1! #11367000 0! #11367500 1! #11368000 0! #11368500 1! #11369000 0! #11369500 1! #11370000 0! #11370500 1! #11371000 0! #11371500 1! #11372000 0! #11372500 1! #11373000 0! #11373500 1! #11374000 0! #11374500 1! #11375000 0! #11375500 1! #11376000 0! #11376500 1! #11377000 0! #11377500 1! #11378000 0! #11378500 1! #11379000 0! #11379500 1! #11380000 0! #11380500 1! #11381000 0! #11381500 1! #11382000 0! #11382500 1! #11383000 0! #11383500 1! #11384000 0! #11384500 1! #11385000 0! #11385500 1! #11386000 0! #11386500 1! #11387000 0! #11387500 1! #11388000 0! #11388500 1! #11389000 0! #11389500 1! #11390000 0! #11390500 1! #11391000 0! #11391500 1! #11392000 0! #11392500 1! #11393000 0! #11393500 1! #11394000 0! #11394500 1! #11395000 0! #11395500 1! #11396000 0! #11396500 1! #11397000 0! #11397500 1! #11398000 0! #11398500 1! #11399000 0! #11399500 1! #11400000 0! #11400500 1! #11401000 0! #11401500 1! #11402000 0! #11402500 1! #11403000 0! #11403500 1! #11404000 0! #11404500 1! #11405000 0! #11405500 1! #11406000 0! #11406500 1! #11407000 0! #11407500 1! #11408000 0! #11408500 1! #11409000 0! #11409500 1! #11410000 0! #11410500 1! #11411000 0! #11411500 1! #11412000 0! #11412500 1! #11413000 0! #11413500 1! #11414000 0! #11414500 1! #11415000 0! #11415500 1! #11416000 0! #11416500 1! #11417000 0! #11417500 1! #11418000 0! #11418500 1! #11419000 0! #11419500 1! #11420000 0! #11420500 1! #11421000 0! #11421500 1! #11422000 0! #11422500 1! #11423000 0! #11423500 1! #11424000 0! #11424500 1! #11425000 0! #11425500 1! #11426000 0! #11426500 1! #11427000 0! #11427500 1! #11428000 0! #11428500 1! #11429000 0! #11429500 1! #11430000 0! #11430500 1! #11431000 0! #11431500 1! #11432000 0! #11432500 1! #11433000 0! #11433500 1! #11434000 0! #11434500 1! #11435000 0! #11435500 1! #11436000 0! #11436500 1! #11437000 0! #11437500 1! #11438000 0! #11438500 1! #11439000 0! #11439500 1! #11440000 0! #11440500 1! #11441000 0! #11441500 1! #11442000 0! #11442500 1! #11443000 0! #11443500 1! #11444000 0! #11444500 1! #11445000 0! #11445500 1! #11446000 0! #11446500 1! #11447000 0! #11447500 1! #11448000 0! #11448500 1! #11449000 0! #11449500 1! #11450000 0! #11450500 1! #11451000 0! #11451500 1! #11452000 0! #11452500 1! #11453000 0! #11453500 1! #11454000 0! #11454500 1! #11455000 0! #11455500 1! #11456000 0! #11456500 1! #11457000 0! #11457500 1! #11458000 0! #11458500 1! #11459000 0! #11459500 1! #11460000 0! #11460500 1! #11461000 0! #11461500 1! #11462000 0! #11462500 1! #11463000 0! #11463500 1! #11464000 0! #11464500 1! #11465000 0! #11465500 1! #11466000 0! #11466500 1! #11467000 0! #11467500 1! #11468000 0! #11468500 1! #11469000 0! #11469500 1! #11470000 0! #11470500 1! #11471000 0! #11471500 1! #11472000 0! #11472500 1! #11473000 0! #11473500 1! #11474000 0! #11474500 1! #11475000 0! #11475500 1! #11476000 0! #11476500 1! #11477000 0! #11477500 1! #11478000 0! #11478500 1! #11479000 0! #11479500 1! #11480000 0! #11480500 1! #11481000 0! #11481500 1! #11482000 0! #11482500 1! #11483000 0! #11483500 1! #11484000 0! #11484500 1! #11485000 0! #11485500 1! #11486000 0! #11486500 1! #11487000 0! #11487500 1! #11488000 0! #11488500 1! #11489000 0! #11489500 1! #11490000 0! #11490500 1! #11491000 0! #11491500 1! #11492000 0! #11492500 1! #11493000 0! #11493500 1! #11494000 0! #11494500 1! #11495000 0! #11495500 1! #11496000 0! #11496500 1! #11497000 0! #11497500 1! #11498000 0! #11498500 1! #11499000 0! #11499500 1! #11500000 0! #11500500 1! #11501000 0! #11501500 1! #11502000 0! #11502500 1! #11503000 0! #11503500 1! #11504000 0! #11504500 1! #11505000 0! #11505500 1! #11506000 0! #11506500 1! #11507000 0! #11507500 1! #11508000 0! #11508500 1! #11509000 0! #11509500 1! #11510000 0! #11510500 1! #11511000 0! #11511500 1! #11512000 0! #11512500 1! #11513000 0! #11513500 1! #11514000 0! #11514500 1! #11515000 0! #11515500 1! #11516000 0! #11516500 1! #11517000 0! #11517500 1! #11518000 0! #11518500 1! #11519000 0! #11519500 1! #11520000 0! #11520500 1! #11521000 0! #11521500 1! #11522000 0! #11522500 1! #11523000 0! #11523500 1! #11524000 0! #11524500 1! #11525000 0! #11525500 1! #11526000 0! #11526500 1! #11527000 0! #11527500 1! #11528000 0! #11528500 1! #11529000 0! #11529500 1! #11530000 0! #11530500 1! #11531000 0! #11531500 1! #11532000 0! #11532500 1! #11533000 0! #11533500 1! #11534000 0! #11534500 1! #11535000 0! #11535500 1! #11536000 0! #11536500 1! #11537000 0! #11537500 1! #11538000 0! #11538500 1! #11539000 0! #11539500 1! #11540000 0! #11540500 1! #11541000 0! #11541500 1! #11542000 0! #11542500 1! #11543000 0! #11543500 1! #11544000 0! #11544500 1! #11545000 0! #11545500 1! #11546000 0! #11546500 1! #11547000 0! #11547500 1! #11548000 0! #11548500 1! #11549000 0! #11549500 1! #11550000 0! #11550500 1! #11551000 0! #11551500 1! #11552000 0! #11552500 1! #11553000 0! #11553500 1! #11554000 0! #11554500 1! #11555000 0! #11555500 1! #11556000 0! #11556500 1! #11557000 0! #11557500 1! #11558000 0! #11558500 1! #11559000 0! #11559500 1! #11560000 0! #11560500 1! #11561000 0! #11561500 1! #11562000 0! #11562500 1! #11563000 0! #11563500 1! #11564000 0! #11564500 1! #11565000 0! #11565500 1! #11566000 0! #11566500 1! #11567000 0! #11567500 1! #11568000 0! #11568500 1! #11569000 0! #11569500 1! #11570000 0! #11570500 1! #11571000 0! #11571500 1! #11572000 0! #11572500 1! #11573000 0! #11573500 1! #11574000 0! #11574500 1! #11575000 0! #11575500 1! #11576000 0! #11576500 1! #11577000 0! #11577500 1! #11578000 0! #11578500 1! #11579000 0! #11579500 1! #11580000 0! #11580500 1! #11581000 0! #11581500 1! #11582000 0! #11582500 1! #11583000 0! #11583500 1! #11584000 0! #11584500 1! #11585000 0! #11585500 1! #11586000 0! #11586500 1! #11587000 0! #11587500 1! #11588000 0! #11588500 1! #11589000 0! #11589500 1! #11590000 0! #11590500 1! #11591000 0! #11591500 1! #11592000 0! #11592500 1! #11593000 0! #11593500 1! #11594000 0! #11594500 1! #11595000 0! #11595500 1! #11596000 0! #11596500 1! #11597000 0! #11597500 1! #11598000 0! #11598500 1! #11599000 0! #11599500 1! #11600000 0! #11600500 1! #11601000 0! #11601500 1! #11602000 0! #11602500 1! #11603000 0! #11603500 1! #11604000 0! #11604500 1! #11605000 0! #11605500 1! #11606000 0! #11606500 1! #11607000 0! #11607500 1! #11608000 0! #11608500 1! #11609000 0! #11609500 1! #11610000 0! #11610500 1! #11611000 0! #11611500 1! #11612000 0! #11612500 1! #11613000 0! #11613500 1! #11614000 0! #11614500 1! #11615000 0! #11615500 1! #11616000 0! #11616500 1! #11617000 0! #11617500 1! #11618000 0! #11618500 1! #11619000 0! #11619500 1! #11620000 0! #11620500 1! #11621000 0! #11621500 1! #11622000 0! #11622500 1! #11623000 0! #11623500 1! #11624000 0! #11624500 1! #11625000 0! #11625500 1! #11626000 0! #11626500 1! #11627000 0! #11627500 1! #11628000 0! #11628500 1! #11629000 0! #11629500 1! #11630000 0! #11630500 1! #11631000 0! #11631500 1! #11632000 0! #11632500 1! #11633000 0! #11633500 1! #11634000 0! #11634500 1! #11635000 0! #11635500 1! #11636000 0! #11636500 1! #11637000 0! #11637500 1! #11638000 0! #11638500 1! #11639000 0! #11639500 1! #11640000 0! #11640500 1! #11641000 0! #11641500 1! #11642000 0! #11642500 1! #11643000 0! #11643500 1! #11644000 0! #11644500 1! #11645000 0! #11645500 1! #11646000 0! #11646500 1! #11647000 0! #11647500 1! #11648000 0! #11648500 1! #11649000 0! #11649500 1! #11650000 0! #11650500 1! #11651000 0! #11651500 1! #11652000 0! #11652500 1! #11653000 0! #11653500 1! #11654000 0! #11654500 1! #11655000 0! #11655500 1! #11656000 0! #11656500 1! #11657000 0! #11657500 1! #11658000 0! #11658500 1! #11659000 0! #11659500 1! #11660000 0! #11660500 1! #11661000 0! #11661500 1! #11662000 0! #11662500 1! #11663000 0! #11663500 1! #11664000 0! #11664500 1! #11665000 0! #11665500 1! #11666000 0! #11666500 1! #11667000 0! #11667500 1! #11668000 0! #11668500 1! #11669000 0! #11669500 1! #11670000 0! #11670500 1! #11671000 0! #11671500 1! #11672000 0! #11672500 1! #11673000 0! #11673500 1! #11674000 0! #11674500 1! #11675000 0! #11675500 1! #11676000 0! #11676500 1! #11677000 0! #11677500 1! #11678000 0! #11678500 1! #11679000 0! #11679500 1! #11680000 0! #11680500 1! #11681000 0! #11681500 1! #11682000 0! #11682500 1! #11683000 0! #11683500 1! #11684000 0! #11684500 1! #11685000 0! #11685500 1! #11686000 0! #11686500 1! #11687000 0! #11687500 1! #11688000 0! #11688500 1! #11689000 0! #11689500 1! #11690000 0! #11690500 1! #11691000 0! #11691500 1! #11692000 0! #11692500 1! #11693000 0! #11693500 1! #11694000 0! #11694500 1! #11695000 0! #11695500 1! #11696000 0! #11696500 1! #11697000 0! #11697500 1! #11698000 0! #11698500 1! #11699000 0! #11699500 1! #11700000 0! #11700500 1! #11701000 0! #11701500 1! #11702000 0! #11702500 1! #11703000 0! #11703500 1! #11704000 0! #11704500 1! #11705000 0! #11705500 1! #11706000 0! #11706500 1! #11707000 0! #11707500 1! #11708000 0! #11708500 1! #11709000 0! #11709500 1! #11710000 0! #11710500 1! #11711000 0! #11711500 1! #11712000 0! #11712500 1! #11713000 0! #11713500 1! #11714000 0! #11714500 1! #11715000 0! #11715500 1! #11716000 0! #11716500 1! #11717000 0! #11717500 1! #11718000 0! #11718500 1! #11719000 0! #11719500 1! #11720000 0! #11720500 1! #11721000 0! #11721500 1! #11722000 0! #11722500 1! #11723000 0! #11723500 1! #11724000 0! #11724500 1! #11725000 0! #11725500 1! #11726000 0! #11726500 1! #11727000 0! #11727500 1! #11728000 0! #11728500 1! #11729000 0! #11729500 1! #11730000 0! #11730500 1! #11731000 0! #11731500 1! #11732000 0! #11732500 1! #11733000 0! #11733500 1! #11734000 0! #11734500 1! #11735000 0! #11735500 1! #11736000 0! #11736500 1! #11737000 0! #11737500 1! #11738000 0! #11738500 1! #11739000 0! #11739500 1! #11740000 0! #11740500 1! #11741000 0! #11741500 1! #11742000 0! #11742500 1! #11743000 0! #11743500 1! #11744000 0! #11744500 1! #11745000 0! #11745500 1! #11746000 0! #11746500 1! #11747000 0! #11747500 1! #11748000 0! #11748500 1! #11749000 0! #11749500 1! #11750000 0! #11750500 1! #11751000 0! #11751500 1! #11752000 0! #11752500 1! #11753000 0! #11753500 1! #11754000 0! #11754500 1! #11755000 0! #11755500 1! #11756000 0! #11756500 1! #11757000 0! #11757500 1! #11758000 0! #11758500 1! #11759000 0! #11759500 1! #11760000 0! #11760500 1! #11761000 0! #11761500 1! #11762000 0! #11762500 1! #11763000 0! #11763500 1! #11764000 0! #11764500 1! #11765000 0! #11765500 1! #11766000 0! #11766500 1! #11767000 0! #11767500 1! #11768000 0! #11768500 1! #11769000 0! #11769500 1! #11770000 0! #11770500 1! #11771000 0! #11771500 1! #11772000 0! #11772500 1! #11773000 0! #11773500 1! #11774000 0! #11774500 1! #11775000 0! #11775500 1! #11776000 0! #11776500 1! #11777000 0! #11777500 1! #11778000 0! #11778500 1! #11779000 0! #11779500 1! #11780000 0! #11780500 1! #11781000 0! #11781500 1! #11782000 0! #11782500 1! #11783000 0! #11783500 1! #11784000 0! #11784500 1! #11785000 0! #11785500 1! #11786000 0! #11786500 1! #11787000 0! #11787500 1! #11788000 0! #11788500 1! #11789000 0! #11789500 1! #11790000 0! #11790500 1! #11791000 0! #11791500 1! #11792000 0! #11792500 1! #11793000 0! #11793500 1! #11794000 0! #11794500 1! #11795000 0! #11795500 1! #11796000 0! #11796500 1! #11797000 0! #11797500 1! #11798000 0! #11798500 1! #11799000 0! #11799500 1! #11800000 0! #11800500 1! #11801000 0! #11801500 1! #11802000 0! #11802500 1! #11803000 0! #11803500 1! #11804000 0! #11804500 1! #11805000 0! #11805500 1! #11806000 0! #11806500 1! #11807000 0! #11807500 1! #11808000 0! #11808500 1! #11809000 0! #11809500 1! #11810000 0! #11810500 1! #11811000 0! #11811500 1! #11812000 0! #11812500 1! #11813000 0! #11813500 1! #11814000 0! #11814500 1! #11815000 0! #11815500 1! #11816000 0! #11816500 1! #11817000 0! #11817500 1! #11818000 0! #11818500 1! #11819000 0! #11819500 1! #11820000 0! #11820500 1! #11821000 0! #11821500 1! #11822000 0! #11822500 1! #11823000 0! #11823500 1! #11824000 0! #11824500 1! #11825000 0! #11825500 1! #11826000 0! #11826500 1! #11827000 0! #11827500 1! #11828000 0! #11828500 1! #11829000 0! #11829500 1! #11830000 0! #11830500 1! #11831000 0! #11831500 1! #11832000 0! #11832500 1! #11833000 0! #11833500 1! #11834000 0! #11834500 1! #11835000 0! #11835500 1! #11836000 0! #11836500 1! #11837000 0! #11837500 1! #11838000 0! #11838500 1! #11839000 0! #11839500 1! #11840000 0! #11840500 1! #11841000 0! #11841500 1! #11842000 0! #11842500 1! #11843000 0! #11843500 1! #11844000 0! #11844500 1! #11845000 0! #11845500 1! #11846000 0! #11846500 1! #11847000 0! #11847500 1! #11848000 0! #11848500 1! #11849000 0! #11849500 1! #11850000 0! #11850500 1! #11851000 0! #11851500 1! #11852000 0! #11852500 1! #11853000 0! #11853500 1! #11854000 0! #11854500 1! #11855000 0! #11855500 1! #11856000 0! #11856500 1! #11857000 0! #11857500 1! #11858000 0! #11858500 1! #11859000 0! #11859500 1! #11860000 0! #11860500 1! #11861000 0! #11861500 1! #11862000 0! #11862500 1! #11863000 0! #11863500 1! #11864000 0! #11864500 1! #11865000 0! #11865500 1! #11866000 0! #11866500 1! #11867000 0! #11867500 1! #11868000 0! #11868500 1! #11869000 0! #11869500 1! #11870000 0! #11870500 1! #11871000 0! #11871500 1! #11872000 0! #11872500 1! #11873000 0! #11873500 1! #11874000 0! #11874500 1! #11875000 0! #11875500 1! #11876000 0! #11876500 1! #11877000 0! #11877500 1! #11878000 0! #11878500 1! #11879000 0! #11879500 1! #11880000 0! #11880500 1! #11881000 0! #11881500 1! #11882000 0! #11882500 1! #11883000 0! #11883500 1! #11884000 0! #11884500 1! #11885000 0! #11885500 1! #11886000 0! #11886500 1! #11887000 0! #11887500 1! #11888000 0! #11888500 1! #11889000 0! #11889500 1! #11890000 0! #11890500 1! #11891000 0! #11891500 1! #11892000 0! #11892500 1! #11893000 0! #11893500 1! #11894000 0! #11894500 1! #11895000 0! #11895500 1! #11896000 0! #11896500 1! #11897000 0! #11897500 1! #11898000 0! #11898500 1! #11899000 0! #11899500 1! #11900000 0! #11900500 1! #11901000 0! #11901500 1! #11902000 0! #11902500 1! #11903000 0! #11903500 1! #11904000 0! #11904500 1! #11905000 0! #11905500 1! #11906000 0! #11906500 1! #11907000 0! #11907500 1! #11908000 0! #11908500 1! #11909000 0! #11909500 1! #11910000 0! #11910500 1! #11911000 0! #11911500 1! #11912000 0! #11912500 1! #11913000 0! #11913500 1! #11914000 0! #11914500 1! #11915000 0! #11915500 1! #11916000 0! #11916500 1! #11917000 0! #11917500 1! #11918000 0! #11918500 1! #11919000 0! #11919500 1! #11920000 0! #11920500 1! #11921000 0! #11921500 1! #11922000 0! #11922500 1! #11923000 0! #11923500 1! #11924000 0! #11924500 1! #11925000 0! #11925500 1! #11926000 0! #11926500 1! #11927000 0! #11927500 1! #11928000 0! #11928500 1! #11929000 0! #11929500 1! #11930000 0! #11930500 1! #11931000 0! #11931500 1! #11932000 0! #11932500 1! #11933000 0! #11933500 1! #11934000 0! #11934500 1! #11935000 0! #11935500 1! #11936000 0! #11936500 1! #11937000 0! #11937500 1! #11938000 0! #11938500 1! #11939000 0! #11939500 1! #11940000 0! #11940500 1! #11941000 0! #11941500 1! #11942000 0! #11942500 1! #11943000 0! #11943500 1! #11944000 0! #11944500 1! #11945000 0! #11945500 1! #11946000 0! #11946500 1! #11947000 0! #11947500 1! #11948000 0! #11948500 1! #11949000 0! #11949500 1! #11950000 0! #11950500 1! #11951000 0! #11951500 1! #11952000 0! #11952500 1! #11953000 0! #11953500 1! #11954000 0! #11954500 1! #11955000 0! #11955500 1! #11956000 0! #11956500 1! #11957000 0! #11957500 1! #11958000 0! #11958500 1! #11959000 0! #11959500 1! #11960000 0! #11960500 1! #11961000 0! #11961500 1! #11962000 0! #11962500 1! #11963000 0! #11963500 1! #11964000 0! #11964500 1! #11965000 0! #11965500 1! #11966000 0! #11966500 1! #11967000 0! #11967500 1! #11968000 0! #11968500 1! #11969000 0! #11969500 1! #11970000 0! #11970500 1! #11971000 0! #11971500 1! #11972000 0! #11972500 1! #11973000 0! #11973500 1! #11974000 0! #11974500 1! #11975000 0! #11975500 1! #11976000 0! #11976500 1! #11977000 0! #11977500 1! #11978000 0! #11978500 1! #11979000 0! #11979500 1! #11980000 0! #11980500 1! #11981000 0! #11981500 1! #11982000 0! #11982500 1! #11983000 0! #11983500 1! #11984000 0! #11984500 1! #11985000 0! #11985500 1! #11986000 0! #11986500 1! #11987000 0! #11987500 1! #11988000 0! #11988500 1! #11989000 0! #11989500 1! #11990000 0! #11990500 1! #11991000 0! #11991500 1! #11992000 0! #11992500 1! #11993000 0! #11993500 1! #11994000 0! #11994500 1! #11995000 0! #11995500 1! #11996000 0! #11996500 1! #11997000 0! #11997500 1! #11998000 0! #11998500 1! #11999000 0! #11999500 1! #12000000 0! #12000500 1! #12001000 0! #12001500 1! #12002000 0! #12002500 1! #12003000 0! #12003500 1! #12004000 0! #12004500 1! #12005000 0! #12005500 1! #12006000 0! #12006500 1! #12007000 0! #12007500 1! #12008000 0! #12008500 1! #12009000 0! #12009500 1! #12010000 0! #12010500 1! #12011000 0! #12011500 1! #12012000 0! #12012500 1! #12013000 0! #12013500 1! #12014000 0! #12014500 1! #12015000 0! #12015500 1! #12016000 0! #12016500 1! #12017000 0! #12017500 1! #12018000 0! #12018500 1! #12019000 0! #12019500 1! #12020000 0! #12020500 1! #12021000 0! #12021500 1! #12022000 0! #12022500 1! #12023000 0! #12023500 1! #12024000 0! #12024500 1! #12025000 0! #12025500 1! #12026000 0! #12026500 1! #12027000 0! #12027500 1! #12028000 0! #12028500 1! #12029000 0! #12029500 1! #12030000 0! #12030500 1! #12031000 0! #12031500 1! #12032000 0! #12032500 1! #12033000 0! #12033500 1! #12034000 0! #12034500 1! #12035000 0! #12035500 1! #12036000 0! #12036500 1! #12037000 0! #12037500 1! #12038000 0! #12038500 1! #12039000 0! #12039500 1! #12040000 0! #12040500 1! #12041000 0! #12041500 1! #12042000 0! #12042500 1! #12043000 0! #12043500 1! #12044000 0! #12044500 1! #12045000 0! #12045500 1! #12046000 0! #12046500 1! #12047000 0! #12047500 1! #12048000 0! #12048500 1! #12049000 0! #12049500 1! #12050000 0! #12050500 1! #12051000 0! #12051500 1! #12052000 0! #12052500 1! #12053000 0! #12053500 1! #12054000 0! #12054500 1! #12055000 0! #12055500 1! #12056000 0! #12056500 1! #12057000 0! #12057500 1! #12058000 0! #12058500 1! #12059000 0! #12059500 1! #12060000 0! #12060500 1! #12061000 0! #12061500 1! #12062000 0! #12062500 1! #12063000 0! #12063500 1! #12064000 0! #12064500 1! #12065000 0! #12065500 1! #12066000 0! #12066500 1! #12067000 0! #12067500 1! #12068000 0! #12068500 1! #12069000 0! #12069500 1! #12070000 0! #12070500 1! #12071000 0! #12071500 1! #12072000 0! #12072500 1! #12073000 0! #12073500 1! #12074000 0! #12074500 1! #12075000 0! #12075500 1! #12076000 0! #12076500 1! #12077000 0! #12077500 1! #12078000 0! #12078500 1! #12079000 0! #12079500 1! #12080000 0! #12080500 1! #12081000 0! #12081500 1! #12082000 0! #12082500 1! #12083000 0! #12083500 1! #12084000 0! #12084500 1! #12085000 0! #12085500 1! #12086000 0! #12086500 1! #12087000 0! #12087500 1! #12088000 0! #12088500 1! #12089000 0! #12089500 1! #12090000 0! #12090500 1! #12091000 0! #12091500 1! #12092000 0! #12092500 1! #12093000 0! #12093500 1! #12094000 0! #12094500 1! #12095000 0! #12095500 1! #12096000 0! #12096500 1! #12097000 0! #12097500 1! #12098000 0! #12098500 1! #12099000 0! #12099500 1! #12100000 0! #12100500 1! #12101000 0! #12101500 1! #12102000 0! #12102500 1! #12103000 0! #12103500 1! #12104000 0! #12104500 1! #12105000 0! #12105500 1! #12106000 0! #12106500 1! #12107000 0! #12107500 1! #12108000 0! #12108500 1! #12109000 0! #12109500 1! #12110000 0! #12110500 1! #12111000 0! #12111500 1! #12112000 0! #12112500 1! #12113000 0! #12113500 1! #12114000 0! #12114500 1! #12115000 0! #12115500 1! #12116000 0! #12116500 1! #12117000 0! #12117500 1! #12118000 0! #12118500 1! #12119000 0! #12119500 1! #12120000 0! #12120500 1! #12121000 0! #12121500 1! #12122000 0! #12122500 1! #12123000 0! #12123500 1! #12124000 0! #12124500 1! #12125000 0! #12125500 1! #12126000 0! #12126500 1! #12127000 0! #12127500 1! #12128000 0! #12128500 1! #12129000 0! #12129500 1! #12130000 0! #12130500 1! #12131000 0! #12131500 1! #12132000 0! #12132500 1! #12133000 0! #12133500 1! #12134000 0! #12134500 1! #12135000 0! #12135500 1! #12136000 0! #12136500 1! #12137000 0! #12137500 1! #12138000 0! #12138500 1! #12139000 0! #12139500 1! #12140000 0! #12140500 1! #12141000 0! #12141500 1! #12142000 0! #12142500 1! #12143000 0! #12143500 1! #12144000 0! #12144500 1! #12145000 0! #12145500 1! #12146000 0! #12146500 1! #12147000 0! #12147500 1! #12148000 0! #12148500 1! #12149000 0! #12149500 1! #12150000 0! #12150500 1! #12151000 0! #12151500 1! #12152000 0! #12152500 1! #12153000 0! #12153500 1! #12154000 0! #12154500 1! #12155000 0! #12155500 1! #12156000 0! #12156500 1! #12157000 0! #12157500 1! #12158000 0! #12158500 1! #12159000 0! #12159500 1! #12160000 0! #12160500 1! #12161000 0! #12161500 1! #12162000 0! #12162500 1! #12163000 0! #12163500 1! #12164000 0! #12164500 1! #12165000 0! #12165500 1! #12166000 0! #12166500 1! #12167000 0! #12167500 1! #12168000 0! #12168500 1! #12169000 0! #12169500 1! #12170000 0! #12170500 1! #12171000 0! #12171500 1! #12172000 0! #12172500 1! #12173000 0! #12173500 1! #12174000 0! #12174500 1! #12175000 0! #12175500 1! #12176000 0! #12176500 1! #12177000 0! #12177500 1! #12178000 0! #12178500 1! #12179000 0! #12179500 1! #12180000 0! #12180500 1! #12181000 0! #12181500 1! #12182000 0! #12182500 1! #12183000 0! #12183500 1! #12184000 0! #12184500 1! #12185000 0! #12185500 1! #12186000 0! #12186500 1! #12187000 0! #12187500 1! #12188000 0! #12188500 1! #12189000 0! #12189500 1! #12190000 0! #12190500 1! #12191000 0! #12191500 1! #12192000 0! #12192500 1! #12193000 0! #12193500 1! #12194000 0! #12194500 1! #12195000 0! #12195500 1! #12196000 0! #12196500 1! #12197000 0! #12197500 1! #12198000 0! #12198500 1! #12199000 0! #12199500 1! #12200000 0! #12200500 1! #12201000 0! #12201500 1! #12202000 0! #12202500 1! #12203000 0! #12203500 1! #12204000 0! #12204500 1! #12205000 0! #12205500 1! #12206000 0! #12206500 1! #12207000 0! #12207500 1! #12208000 0! #12208500 1! #12209000 0! #12209500 1! #12210000 0! #12210500 1! #12211000 0! #12211500 1! #12212000 0! #12212500 1! #12213000 0! #12213500 1! #12214000 0! #12214500 1! #12215000 0! #12215500 1! #12216000 0! #12216500 1! #12217000 0! #12217500 1! #12218000 0! #12218500 1! #12219000 0! #12219500 1! #12220000 0! #12220500 1! #12221000 0! #12221500 1! #12222000 0! #12222500 1! #12223000 0! #12223500 1! #12224000 0! #12224500 1! #12225000 0! #12225500 1! #12226000 0! #12226500 1! #12227000 0! #12227500 1! #12228000 0! #12228500 1! #12229000 0! #12229500 1! #12230000 0! #12230500 1! #12231000 0! #12231500 1! #12232000 0! #12232500 1! #12233000 0! #12233500 1! #12234000 0! #12234500 1! #12235000 0! #12235500 1! #12236000 0! #12236500 1! #12237000 0! #12237500 1! #12238000 0! #12238500 1! #12239000 0! #12239500 1! #12240000 0! #12240500 1! #12241000 0! #12241500 1! #12242000 0! #12242500 1! #12243000 0! #12243500 1! #12244000 0! #12244500 1! #12245000 0! #12245500 1! #12246000 0! #12246500 1! #12247000 0! #12247500 1! #12248000 0! #12248500 1! #12249000 0! #12249500 1! #12250000 0! #12250500 1! #12251000 0! #12251500 1! #12252000 0! #12252500 1! #12253000 0! #12253500 1! #12254000 0! #12254500 1! #12255000 0! #12255500 1! #12256000 0! #12256500 1! #12257000 0! #12257500 1! #12258000 0! #12258500 1! #12259000 0! #12259500 1! #12260000 0! #12260500 1! #12261000 0! #12261500 1! #12262000 0! #12262500 1! #12263000 0! #12263500 1! #12264000 0! #12264500 1! #12265000 0! #12265500 1! #12266000 0! #12266500 1! #12267000 0! #12267500 1! #12268000 0! #12268500 1! #12269000 0! #12269500 1! #12270000 0! #12270500 1! #12271000 0! #12271500 1! #12272000 0! #12272500 1! #12273000 0! #12273500 1! #12274000 0! #12274500 1! #12275000 0! #12275500 1! #12276000 0! #12276500 1! #12277000 0! #12277500 1! #12278000 0! #12278500 1! #12279000 0! #12279500 1! #12280000 0! #12280500 1! #12281000 0! #12281500 1! #12282000 0! #12282500 1! #12283000 0! #12283500 1! #12284000 0! #12284500 1! #12285000 0! #12285500 1! #12286000 0! #12286500 1! #12287000 0! #12287500 1! #12288000 0! #12288500 1! #12289000 0! #12289500 1! #12290000 0! #12290500 1! #12291000 0! #12291500 1! #12292000 0! #12292500 1! #12293000 0! #12293500 1! #12294000 0! #12294500 1! #12295000 0! #12295500 1! #12296000 0! #12296500 1! #12297000 0! #12297500 1! #12298000 0! #12298500 1! #12299000 0! #12299500 1! #12300000 0! #12300500 1! #12301000 0! #12301500 1! #12302000 0! #12302500 1! #12303000 0! #12303500 1! #12304000 0! #12304500 1! #12305000 0! #12305500 1! #12306000 0! #12306500 1! #12307000 0! #12307500 1! #12308000 0! #12308500 1! #12309000 0! #12309500 1! #12310000 0! #12310500 1! #12311000 0! #12311500 1! #12312000 0! #12312500 1! #12313000 0! #12313500 1! #12314000 0! #12314500 1! #12315000 0! #12315500 1! #12316000 0! #12316500 1! #12317000 0! #12317500 1! #12318000 0! #12318500 1! #12319000 0! #12319500 1! #12320000 0! #12320500 1! #12321000 0! #12321500 1! #12322000 0! #12322500 1! #12323000 0! #12323500 1! #12324000 0! #12324500 1! #12325000 0! #12325500 1! #12326000 0! #12326500 1! #12327000 0! #12327500 1! #12328000 0! #12328500 1! #12329000 0! #12329500 1! #12330000 0! #12330500 1! #12331000 0! #12331500 1! #12332000 0! #12332500 1! #12333000 0! #12333500 1! #12334000 0! #12334500 1! #12335000 0! #12335500 1! #12336000 0! #12336500 1! #12337000 0! #12337500 1! #12338000 0! #12338500 1! #12339000 0! #12339500 1! #12340000 0! #12340500 1! #12341000 0! #12341500 1! #12342000 0! #12342500 1! #12343000 0! #12343500 1! #12344000 0! #12344500 1! #12345000 0! #12345500 1! #12346000 0! #12346500 1! #12347000 0! #12347500 1! #12348000 0! #12348500 1! #12349000 0! #12349500 1! #12350000 0! #12350500 1! #12351000 0! #12351500 1! #12352000 0! #12352500 1! #12353000 0! #12353500 1! #12354000 0! #12354500 1! #12355000 0! #12355500 1! #12356000 0! #12356500 1! #12357000 0! #12357500 1! #12358000 0! #12358500 1! #12359000 0! #12359500 1! #12360000 0! #12360500 1! #12361000 0! #12361500 1! #12362000 0! #12362500 1! #12363000 0! #12363500 1! #12364000 0! #12364500 1! #12365000 0! #12365500 1! #12366000 0! #12366500 1! #12367000 0! #12367500 1! #12368000 0! #12368500 1! #12369000 0! #12369500 1! #12370000 0! #12370500 1! #12371000 0! #12371500 1! #12372000 0! #12372500 1! #12373000 0! #12373500 1! #12374000 0! #12374500 1! #12375000 0! #12375500 1! #12376000 0! #12376500 1! #12377000 0! #12377500 1! #12378000 0! #12378500 1! #12379000 0! #12379500 1! #12380000 0! #12380500 1! #12381000 0! #12381500 1! #12382000 0! #12382500 1! #12383000 0! #12383500 1! #12384000 0! #12384500 1! #12385000 0! #12385500 1! #12386000 0! #12386500 1! #12387000 0! #12387500 1! #12388000 0! #12388500 1! #12389000 0! #12389500 1! #12390000 0! #12390500 1! #12391000 0! #12391500 1! #12392000 0! #12392500 1! #12393000 0! #12393500 1! #12394000 0! #12394500 1! #12395000 0! #12395500 1! #12396000 0! #12396500 1! #12397000 0! #12397500 1! #12398000 0! #12398500 1! #12399000 0! #12399500 1! #12400000 0! #12400500 1! #12401000 0! #12401500 1! #12402000 0! #12402500 1! #12403000 0! #12403500 1! #12404000 0! #12404500 1! #12405000 0! #12405500 1! #12406000 0! #12406500 1! #12407000 0! #12407500 1! #12408000 0! #12408500 1! #12409000 0! #12409500 1! #12410000 0! #12410500 1! #12411000 0! #12411500 1! #12412000 0! #12412500 1! #12413000 0! #12413500 1! #12414000 0! #12414500 1! #12415000 0! #12415500 1! #12416000 0! #12416500 1! #12417000 0! #12417500 1! #12418000 0! #12418500 1! #12419000 0! #12419500 1! #12420000 0! #12420500 1! #12421000 0! #12421500 1! #12422000 0! #12422500 1! #12423000 0! #12423500 1! #12424000 0! #12424500 1! #12425000 0! #12425500 1! #12426000 0! #12426500 1! #12427000 0! #12427500 1! #12428000 0! #12428500 1! #12429000 0! #12429500 1! #12430000 0! #12430500 1! #12431000 0! #12431500 1! #12432000 0! #12432500 1! #12433000 0! #12433500 1! #12434000 0! #12434500 1! #12435000 0! #12435500 1! #12436000 0! #12436500 1! #12437000 0! #12437500 1! #12438000 0! #12438500 1! #12439000 0! #12439500 1! #12440000 0! #12440500 1! #12441000 0! #12441500 1! #12442000 0! #12442500 1! #12443000 0! #12443500 1! #12444000 0! #12444500 1! #12445000 0! #12445500 1! #12446000 0! #12446500 1! #12447000 0! #12447500 1! #12448000 0! #12448500 1! #12449000 0! #12449500 1! #12450000 0! #12450500 1! #12451000 0! #12451500 1! #12452000 0! #12452500 1! #12453000 0! #12453500 1! #12454000 0! #12454500 1! #12455000 0! #12455500 1! #12456000 0! #12456500 1! #12457000 0! #12457500 1! #12458000 0! #12458500 1! #12459000 0! #12459500 1! #12460000 0! #12460500 1! #12461000 0! #12461500 1! #12462000 0! #12462500 1! #12463000 0! #12463500 1! #12464000 0! #12464500 1! #12465000 0! #12465500 1! #12466000 0! #12466500 1! #12467000 0! #12467500 1! #12468000 0! #12468500 1! #12469000 0! #12469500 1! #12470000 0! #12470500 1! #12471000 0! #12471500 1! #12472000 0! #12472500 1! #12473000 0! #12473500 1! #12474000 0! #12474500 1! #12475000 0! #12475500 1! #12476000 0! #12476500 1! #12477000 0! #12477500 1! #12478000 0! #12478500 1! #12479000 0! #12479500 1! #12480000 0! #12480500 1! #12481000 0! #12481500 1! #12482000 0! #12482500 1! #12483000 0! #12483500 1! #12484000 0! #12484500 1! #12485000 0! #12485500 1! #12486000 0! #12486500 1! #12487000 0! #12487500 1! #12488000 0! #12488500 1! #12489000 0! #12489500 1! #12490000 0! #12490500 1! #12491000 0! #12491500 1! #12492000 0! #12492500 1! #12493000 0! #12493500 1! #12494000 0! #12494500 1! #12495000 0! #12495500 1! #12496000 0! #12496500 1! #12497000 0! #12497500 1! #12498000 0! #12498500 1! #12499000 0! #12499500 1! #12500000 0! #12500500 1! #12501000 0! #12501500 1! #12502000 0! #12502500 1! #12503000 0! #12503500 1! #12504000 0! #12504500 1! #12505000 0! #12505500 1! #12506000 0! #12506500 1! #12507000 0! #12507500 1! #12508000 0! #12508500 1! #12509000 0! #12509500 1! #12510000 0! #12510500 1! #12511000 0! #12511500 1! #12512000 0! #12512500 1! #12513000 0! #12513500 1! #12514000 0! #12514500 1! #12515000 0! #12515500 1! #12516000 0! #12516500 1! #12517000 0! #12517500 1! #12518000 0! #12518500 1! #12519000 0! #12519500 1! #12520000 0! #12520500 1! #12521000 0! #12521500 1! #12522000 0! #12522500 1! #12523000 0! #12523500 1! #12524000 0! #12524500 1! #12525000 0! #12525500 1! #12526000 0! #12526500 1! #12527000 0! #12527500 1! #12528000 0! #12528500 1! #12529000 0! #12529500 1! #12530000 0! #12530500 1! #12531000 0! #12531500 1! #12532000 0! #12532500 1! #12533000 0! #12533500 1! #12534000 0! #12534500 1! #12535000 0! #12535500 1! #12536000 0! #12536500 1! #12537000 0! #12537500 1! #12538000 0! #12538500 1! #12539000 0! #12539500 1! #12540000 0! #12540500 1! #12541000 0! #12541500 1! #12542000 0! #12542500 1! #12543000 0! #12543500 1! #12544000 0! #12544500 1! #12545000 0! #12545500 1! #12546000 0! #12546500 1! #12547000 0! #12547500 1! #12548000 0! #12548500 1! #12549000 0! #12549500 1! #12550000 0! #12550500 1! #12551000 0! #12551500 1! #12552000 0! #12552500 1! #12553000 0! #12553500 1! #12554000 0! #12554500 1! #12555000 0! #12555500 1! #12556000 0! #12556500 1! #12557000 0! #12557500 1! #12558000 0! #12558500 1! #12559000 0! #12559500 1! #12560000 0! #12560500 1! #12561000 0! #12561500 1! #12562000 0! #12562500 1! #12563000 0! #12563500 1! #12564000 0! #12564500 1! #12565000 0! #12565500 1! #12566000 0! #12566500 1! #12567000 0! #12567500 1! #12568000 0! #12568500 1! #12569000 0! #12569500 1! #12570000 0! #12570500 1! #12571000 0! #12571500 1! #12572000 0! #12572500 1! #12573000 0! #12573500 1! #12574000 0! #12574500 1! #12575000 0! #12575500 1! #12576000 0! #12576500 1! #12577000 0! #12577500 1! #12578000 0! #12578500 1! #12579000 0! #12579500 1! #12580000 0! #12580500 1! #12581000 0! #12581500 1! #12582000 0! #12582500 1! #12583000 0! #12583500 1! #12584000 0! #12584500 1! #12585000 0! #12585500 1! #12586000 0! #12586500 1! #12587000 0! #12587500 1! #12588000 0! #12588500 1! #12589000 0! #12589500 1! #12590000 0! #12590500 1! #12591000 0! #12591500 1! #12592000 0! #12592500 1! #12593000 0! #12593500 1! #12594000 0! #12594500 1! #12595000 0! #12595500 1! #12596000 0! #12596500 1! #12597000 0! #12597500 1! #12598000 0! #12598500 1! #12599000 0! #12599500 1! #12600000 0! #12600500 1! #12601000 0! #12601500 1! #12602000 0! #12602500 1! #12603000 0! #12603500 1! #12604000 0! #12604500 1! #12605000 0! #12605500 1! #12606000 0! #12606500 1! #12607000 0! #12607500 1! #12608000 0! #12608500 1! #12609000 0! #12609500 1! #12610000 0! #12610500 1! #12611000 0! #12611500 1! #12612000 0! #12612500 1! #12613000 0! #12613500 1! #12614000 0! #12614500 1! #12615000 0! #12615500 1! #12616000 0! #12616500 1! #12617000 0! #12617500 1! #12618000 0! #12618500 1! #12619000 0! #12619500 1! #12620000 0! #12620500 1! #12621000 0! #12621500 1! #12622000 0! #12622500 1! #12623000 0! #12623500 1! #12624000 0! #12624500 1! #12625000 0! #12625500 1! #12626000 0! #12626500 1! #12627000 0! #12627500 1! #12628000 0! #12628500 1! #12629000 0! #12629500 1! #12630000 0! #12630500 1! #12631000 0! #12631500 1! #12632000 0! #12632500 1! #12633000 0! #12633500 1! #12634000 0! #12634500 1! #12635000 0! #12635500 1! #12636000 0! #12636500 1! #12637000 0! #12637500 1! #12638000 0! #12638500 1! #12639000 0! #12639500 1! #12640000 0! #12640500 1! #12641000 0! #12641500 1! #12642000 0! #12642500 1! #12643000 0! #12643500 1! #12644000 0! #12644500 1! #12645000 0! #12645500 1! #12646000 0! #12646500 1! #12647000 0! #12647500 1! #12648000 0! #12648500 1! #12649000 0! #12649500 1! #12650000 0! #12650500 1! #12651000 0! #12651500 1! #12652000 0! #12652500 1! #12653000 0! #12653500 1! #12654000 0! #12654500 1! #12655000 0! #12655500 1! #12656000 0! #12656500 1! #12657000 0! #12657500 1! #12658000 0! #12658500 1! #12659000 0! #12659500 1! #12660000 0! #12660500 1! #12661000 0! #12661500 1! #12662000 0! #12662500 1! #12663000 0! #12663500 1! #12664000 0! #12664500 1! #12665000 0! #12665500 1! #12666000 0! #12666500 1! #12667000 0! #12667500 1! #12668000 0! #12668500 1! #12669000 0! #12669500 1! #12670000 0! #12670500 1! #12671000 0! #12671500 1! #12672000 0! #12672500 1! #12673000 0! #12673500 1! #12674000 0! #12674500 1! #12675000 0! #12675500 1! #12676000 0! #12676500 1! #12677000 0! #12677500 1! #12678000 0! #12678500 1! #12679000 0! #12679500 1! #12680000 0! #12680500 1! #12681000 0! #12681500 1! #12682000 0! #12682500 1! #12683000 0! #12683500 1! #12684000 0! #12684500 1! #12685000 0! #12685500 1! #12686000 0! #12686500 1! #12687000 0! #12687500 1! #12688000 0! #12688500 1! #12689000 0! #12689500 1! #12690000 0! #12690500 1! #12691000 0! #12691500 1! #12692000 0! #12692500 1! #12693000 0! #12693500 1! #12694000 0! #12694500 1! #12695000 0! #12695500 1! #12696000 0! #12696500 1! #12697000 0! #12697500 1! #12698000 0! #12698500 1! #12699000 0! #12699500 1! #12700000 0! #12700500 1! #12701000 0! #12701500 1! #12702000 0! #12702500 1! #12703000 0! #12703500 1! #12704000 0! #12704500 1! #12705000 0! #12705500 1! #12706000 0! #12706500 1! #12707000 0! #12707500 1! #12708000 0! #12708500 1! #12709000 0! #12709500 1! #12710000 0! #12710500 1! #12711000 0! #12711500 1! #12712000 0! #12712500 1! #12713000 0! #12713500 1! #12714000 0! #12714500 1! #12715000 0! #12715500 1! #12716000 0! #12716500 1! #12717000 0! #12717500 1! #12718000 0! #12718500 1! #12719000 0! #12719500 1! #12720000 0! #12720500 1! #12721000 0! #12721500 1! #12722000 0! #12722500 1! #12723000 0! #12723500 1! #12724000 0! #12724500 1! #12725000 0! #12725500 1! #12726000 0! #12726500 1! #12727000 0! #12727500 1! #12728000 0! #12728500 1! #12729000 0! #12729500 1! #12730000 0! #12730500 1! #12731000 0! #12731500 1! #12732000 0! #12732500 1! #12733000 0! #12733500 1! #12734000 0! #12734500 1! #12735000 0! #12735500 1! #12736000 0! #12736500 1! #12737000 0! #12737500 1! #12738000 0! #12738500 1! #12739000 0! #12739500 1! #12740000 0! #12740500 1! #12741000 0! #12741500 1! #12742000 0! #12742500 1! #12743000 0! #12743500 1! #12744000 0! #12744500 1! #12745000 0! #12745500 1! #12746000 0! #12746500 1! #12747000 0! #12747500 1! #12748000 0! #12748500 1! #12749000 0! #12749500 1! #12750000 0! #12750500 1! #12751000 0! #12751500 1! #12752000 0! #12752500 1! #12753000 0! #12753500 1! #12754000 0! #12754500 1! #12755000 0! #12755500 1! #12756000 0! #12756500 1! #12757000 0! #12757500 1! #12758000 0! #12758500 1! #12759000 0! #12759500 1! #12760000 0! #12760500 1! #12761000 0! #12761500 1! #12762000 0! #12762500 1! #12763000 0! #12763500 1! #12764000 0! #12764500 1! #12765000 0! #12765500 1! #12766000 0! #12766500 1! #12767000 0! #12767500 1! #12768000 0! #12768500 1! #12769000 0! #12769500 1! #12770000 0! #12770500 1! #12771000 0! #12771500 1! #12772000 0! #12772500 1! #12773000 0! #12773500 1! #12774000 0! #12774500 1! #12775000 0! #12775500 1! #12776000 0! #12776500 1! #12777000 0! #12777500 1! #12778000 0! #12778500 1! #12779000 0! #12779500 1! #12780000 0! #12780500 1! #12781000 0! #12781500 1! #12782000 0! #12782500 1! #12783000 0! #12783500 1! #12784000 0! #12784500 1! #12785000 0! #12785500 1! #12786000 0! #12786500 1! #12787000 0! #12787500 1! #12788000 0! #12788500 1! #12789000 0! #12789500 1! #12790000 0! #12790500 1! #12791000 0! #12791500 1! #12792000 0! #12792500 1! #12793000 0! #12793500 1! #12794000 0! #12794500 1! #12795000 0! #12795500 1! #12796000 0! #12796500 1! #12797000 0! #12797500 1! #12798000 0! #12798500 1! #12799000 0! #12799500 1! #12800000 0! #12800500 1! #12801000 0! #12801500 1! #12802000 0! #12802500 1! #12803000 0! #12803500 1! #12804000 0! #12804500 1! #12805000 0! #12805500 1! #12806000 0! #12806500 1! #12807000 0! #12807500 1! #12808000 0! #12808500 1! #12809000 0! #12809500 1! #12810000 0! #12810500 1! #12811000 0! #12811500 1! #12812000 0! #12812500 1! #12813000 0! #12813500 1! #12814000 0! #12814500 1! #12815000 0! #12815500 1! #12816000 0! #12816500 1! #12817000 0! #12817500 1! #12818000 0! #12818500 1! #12819000 0! #12819500 1! #12820000 0! #12820500 1! #12821000 0! #12821500 1! #12822000 0! #12822500 1! #12823000 0! #12823500 1! #12824000 0! #12824500 1! #12825000 0! #12825500 1! #12826000 0! #12826500 1! #12827000 0! #12827500 1! #12828000 0! #12828500 1! #12829000 0! #12829500 1! #12830000 0! #12830500 1! #12831000 0! #12831500 1! #12832000 0! #12832500 1! #12833000 0! #12833500 1! #12834000 0! #12834500 1! #12835000 0! #12835500 1! #12836000 0! #12836500 1! #12837000 0! #12837500 1! #12838000 0! #12838500 1! #12839000 0! #12839500 1! #12840000 0! #12840500 1! #12841000 0! #12841500 1! #12842000 0! #12842500 1! #12843000 0! #12843500 1! #12844000 0! #12844500 1! #12845000 0! #12845500 1! #12846000 0! #12846500 1! #12847000 0! #12847500 1! #12848000 0! #12848500 1! #12849000 0! #12849500 1! #12850000 0! #12850500 1! #12851000 0! #12851500 1! #12852000 0! #12852500 1! #12853000 0! #12853500 1! #12854000 0! #12854500 1! #12855000 0! #12855500 1! #12856000 0! #12856500 1! #12857000 0! #12857500 1! #12858000 0! #12858500 1! #12859000 0! #12859500 1! #12860000 0! #12860500 1! #12861000 0! #12861500 1! #12862000 0! #12862500 1! #12863000 0! #12863500 1! #12864000 0! #12864500 1! #12865000 0! #12865500 1! #12866000 0! #12866500 1! #12867000 0! #12867500 1! #12868000 0! #12868500 1! #12869000 0! #12869500 1! #12870000 0! #12870500 1! #12871000 0! #12871500 1! #12872000 0! #12872500 1! #12873000 0! #12873500 1! #12874000 0! #12874500 1! #12875000 0! #12875500 1! #12876000 0! #12876500 1! #12877000 0! #12877500 1! #12878000 0! #12878500 1! #12879000 0! #12879500 1! #12880000 0! #12880500 1! #12881000 0! #12881500 1! #12882000 0! #12882500 1! #12883000 0! #12883500 1! #12884000 0! #12884500 1! #12885000 0! #12885500 1! #12886000 0! #12886500 1! #12887000 0! #12887500 1! #12888000 0! #12888500 1! #12889000 0! #12889500 1! #12890000 0! #12890500 1! #12891000 0! #12891500 1! #12892000 0! #12892500 1! #12893000 0! #12893500 1! #12894000 0! #12894500 1! #12895000 0! #12895500 1! #12896000 0! #12896500 1! #12897000 0! #12897500 1! #12898000 0! #12898500 1! #12899000 0! #12899500 1! #12900000 0! #12900500 1! #12901000 0! #12901500 1! #12902000 0! #12902500 1! #12903000 0! #12903500 1! #12904000 0! #12904500 1! #12905000 0! #12905500 1! #12906000 0! #12906500 1! #12907000 0! #12907500 1! #12908000 0! #12908500 1! #12909000 0! #12909500 1! #12910000 0! #12910500 1! #12911000 0! #12911500 1! #12912000 0! #12912500 1! #12913000 0! #12913500 1! #12914000 0! #12914500 1! #12915000 0! #12915500 1! #12916000 0! #12916500 1! #12917000 0! #12917500 1! #12918000 0! #12918500 1! #12919000 0! #12919500 1! #12920000 0! #12920500 1! #12921000 0! #12921500 1! #12922000 0! #12922500 1! #12923000 0! #12923500 1! #12924000 0! #12924500 1! #12925000 0! #12925500 1! #12926000 0! #12926500 1! #12927000 0! #12927500 1! #12928000 0! #12928500 1! #12929000 0! #12929500 1! #12930000 0! #12930500 1! #12931000 0! #12931500 1! #12932000 0! #12932500 1! #12933000 0! #12933500 1! #12934000 0! #12934500 1! #12935000 0! #12935500 1! #12936000 0! #12936500 1! #12937000 0! #12937500 1! #12938000 0! #12938500 1! #12939000 0! #12939500 1! #12940000 0! #12940500 1! #12941000 0! #12941500 1! #12942000 0! #12942500 1! #12943000 0! #12943500 1! #12944000 0! #12944500 1! #12945000 0! #12945500 1! #12946000 0! #12946500 1! #12947000 0! #12947500 1! #12948000 0! #12948500 1! #12949000 0! #12949500 1! #12950000 0! #12950500 1! #12951000 0! #12951500 1! #12952000 0! #12952500 1! #12953000 0! #12953500 1! #12954000 0! #12954500 1! #12955000 0! #12955500 1! #12956000 0! #12956500 1! #12957000 0! #12957500 1! #12958000 0! #12958500 1! #12959000 0! #12959500 1! #12960000 0! #12960500 1! #12961000 0! #12961500 1! #12962000 0! #12962500 1! #12963000 0! #12963500 1! #12964000 0! #12964500 1! #12965000 0! #12965500 1! #12966000 0! #12966500 1! #12967000 0! #12967500 1! #12968000 0! #12968500 1! #12969000 0! #12969500 1! #12970000 0! #12970500 1! #12971000 0! #12971500 1! #12972000 0! #12972500 1! #12973000 0! #12973500 1! #12974000 0! #12974500 1! #12975000 0! #12975500 1! #12976000 0! #12976500 1! #12977000 0! #12977500 1! #12978000 0! #12978500 1! #12979000 0! #12979500 1! #12980000 0! #12980500 1! #12981000 0! #12981500 1! #12982000 0! #12982500 1! #12983000 0! #12983500 1! #12984000 0! #12984500 1! #12985000 0! #12985500 1! #12986000 0! #12986500 1! #12987000 0! #12987500 1! #12988000 0! #12988500 1! #12989000 0! #12989500 1! #12990000 0! #12990500 1! #12991000 0! #12991500 1! #12992000 0! #12992500 1! #12993000 0! #12993500 1! #12994000 0! #12994500 1! #12995000 0! #12995500 1! #12996000 0! #12996500 1! #12997000 0! #12997500 1! #12998000 0! #12998500 1! #12999000 0! #12999500 1! #13000000 0! #13000500 1! #13001000 0! #13001500 1! #13002000 0! #13002500 1! #13003000 0! #13003500 1! #13004000 0! #13004500 1! #13005000 0! #13005500 1! #13006000 0! #13006500 1! #13007000 0! #13007500 1! #13008000 0! #13008500 1! #13009000 0! #13009500 1! #13010000 0! #13010500 1! #13011000 0! #13011500 1! #13012000 0! #13012500 1! #13013000 0! #13013500 1! #13014000 0! #13014500 1! #13015000 0! #13015500 1! #13016000 0! #13016500 1! #13017000 0! #13017500 1! #13018000 0! #13018500 1! #13019000 0! #13019500 1! #13020000 0! #13020500 1! #13021000 0! #13021500 1! #13022000 0! #13022500 1! #13023000 0! #13023500 1! #13024000 0! #13024500 1! #13025000 0! #13025500 1! #13026000 0! #13026500 1! #13027000 0! #13027500 1! #13028000 0! #13028500 1! #13029000 0! #13029500 1! #13030000 0! #13030500 1! #13031000 0! #13031500 1! #13032000 0! #13032500 1! #13033000 0! #13033500 1! #13034000 0! #13034500 1! #13035000 0! #13035500 1! #13036000 0! #13036500 1! #13037000 0! #13037500 1! #13038000 0! #13038500 1! #13039000 0! #13039500 1! #13040000 0! #13040500 1! #13041000 0! #13041500 1! #13042000 0! #13042500 1! #13043000 0! #13043500 1! #13044000 0! #13044500 1! #13045000 0! #13045500 1! #13046000 0! #13046500 1! #13047000 0! #13047500 1! #13048000 0! #13048500 1! #13049000 0! #13049500 1! #13050000 0! #13050500 1! #13051000 0! #13051500 1! #13052000 0! #13052500 1! #13053000 0! #13053500 1! #13054000 0! #13054500 1! #13055000 0! #13055500 1! #13056000 0! #13056500 1! #13057000 0! #13057500 1! #13058000 0! #13058500 1! #13059000 0! #13059500 1! #13060000 0! #13060500 1! #13061000 0! #13061500 1! #13062000 0! #13062500 1! #13063000 0! #13063500 1! #13064000 0! #13064500 1! #13065000 0! #13065500 1! #13066000 0! #13066500 1! #13067000 0! #13067500 1! #13068000 0! #13068500 1! #13069000 0! #13069500 1! #13070000 0! #13070500 1! #13071000 0! #13071500 1! #13072000 0! #13072500 1! #13073000 0! #13073500 1! #13074000 0! #13074500 1! #13075000 0! #13075500 1! #13076000 0! #13076500 1! #13077000 0! #13077500 1! #13078000 0! #13078500 1! #13079000 0! #13079500 1! #13080000 0! #13080500 1! #13081000 0! #13081500 1! #13082000 0! #13082500 1! #13083000 0! #13083500 1! #13084000 0! #13084500 1! #13085000 0! #13085500 1! #13086000 0! #13086500 1! #13087000 0! #13087500 1! #13088000 0! #13088500 1! #13089000 0! #13089500 1! #13090000 0! #13090500 1! #13091000 0! #13091500 1! #13092000 0! #13092500 1! #13093000 0! #13093500 1! #13094000 0! #13094500 1! #13095000 0! #13095500 1! #13096000 0! #13096500 1! #13097000 0! #13097500 1! #13098000 0! #13098500 1! #13099000 0! #13099500 1! #13100000 0! #13100500 1! #13101000 0! #13101500 1! #13102000 0! #13102500 1! #13103000 0! #13103500 1! #13104000 0! #13104500 1! #13105000 0! #13105500 1! #13106000 0! #13106500 1! #13107000 0! #13107500 1! #13108000 0! #13108500 1! #13109000 0! #13109500 1! #13110000 0! #13110500 1! #13111000 0! #13111500 1! #13112000 0! #13112500 1! #13113000 0! #13113500 1! #13114000 0! #13114500 1! #13115000 0! #13115500 1! #13116000 0! #13116500 1! #13117000 0! #13117500 1! #13118000 0! #13118500 1! #13119000 0! #13119500 1! #13120000 0! #13120500 1! #13121000 0! #13121500 1! #13122000 0! #13122500 1! #13123000 0! #13123500 1! #13124000 0! #13124500 1! #13125000 0! #13125500 1! #13126000 0! #13126500 1! #13127000 0! #13127500 1! #13128000 0! #13128500 1! #13129000 0! #13129500 1! #13130000 0! #13130500 1! #13131000 0! #13131500 1! #13132000 0! #13132500 1! #13133000 0! #13133500 1! #13134000 0! #13134500 1! #13135000 0! #13135500 1! #13136000 0! #13136500 1! #13137000 0! #13137500 1! #13138000 0! #13138500 1! #13139000 0! #13139500 1! #13140000 0! #13140500 1! #13141000 0! #13141500 1! #13142000 0! #13142500 1! #13143000 0! #13143500 1! #13144000 0! #13144500 1! #13145000 0! #13145500 1! #13146000 0! #13146500 1! #13147000 0! #13147500 1! #13148000 0! #13148500 1! #13149000 0! #13149500 1! #13150000 0! #13150500 1! #13151000 0! #13151500 1! #13152000 0! #13152500 1! #13153000 0! #13153500 1! #13154000 0! #13154500 1! #13155000 0! #13155500 1! #13156000 0! #13156500 1! #13157000 0! #13157500 1! #13158000 0! #13158500 1! #13159000 0! #13159500 1! #13160000 0! #13160500 1! #13161000 0! #13161500 1! #13162000 0! #13162500 1! #13163000 0! #13163500 1! #13164000 0! #13164500 1! #13165000 0! #13165500 1! #13166000 0! #13166500 1! #13167000 0! #13167500 1! #13168000 0! #13168500 1! #13169000 0! #13169500 1! #13170000 0! #13170500 1! #13171000 0! #13171500 1! #13172000 0! #13172500 1! #13173000 0! #13173500 1! #13174000 0! #13174500 1! #13175000 0! #13175500 1! #13176000 0! #13176500 1! #13177000 0! #13177500 1! #13178000 0! #13178500 1! #13179000 0! #13179500 1! #13180000 0! #13180500 1! #13181000 0! #13181500 1! #13182000 0! #13182500 1! #13183000 0! #13183500 1! #13184000 0! #13184500 1! #13185000 0! #13185500 1! #13186000 0! #13186500 1! #13187000 0! #13187500 1! #13188000 0! #13188500 1! #13189000 0! #13189500 1! #13190000 0! #13190500 1! #13191000 0! #13191500 1! #13192000 0! #13192500 1! #13193000 0! #13193500 1! #13194000 0! #13194500 1! #13195000 0! #13195500 1! #13196000 0! #13196500 1! #13197000 0! #13197500 1! #13198000 0! #13198500 1! #13199000 0! #13199500 1! #13200000 0! #13200500 1! #13201000 0! #13201500 1! #13202000 0! #13202500 1! #13203000 0! #13203500 1! #13204000 0! #13204500 1! #13205000 0! #13205500 1! #13206000 0! #13206500 1! #13207000 0! #13207500 1! #13208000 0! #13208500 1! #13209000 0! #13209500 1! #13210000 0! #13210500 1! #13211000 0! #13211500 1! #13212000 0! #13212500 1! #13213000 0! #13213500 1! #13214000 0! #13214500 1! #13215000 0! #13215500 1! #13216000 0! #13216500 1! #13217000 0! #13217500 1! #13218000 0! #13218500 1! #13219000 0! #13219500 1! #13220000 0! #13220500 1! #13221000 0! #13221500 1! #13222000 0! #13222500 1! #13223000 0! #13223500 1! #13224000 0! #13224500 1! #13225000 0! #13225500 1! #13226000 0! #13226500 1! #13227000 0! #13227500 1! #13228000 0! #13228500 1! #13229000 0! #13229500 1! #13230000 0! #13230500 1! #13231000 0! #13231500 1! #13232000 0! #13232500 1! #13233000 0! #13233500 1! #13234000 0! #13234500 1! #13235000 0! #13235500 1! #13236000 0! #13236500 1! #13237000 0! #13237500 1! #13238000 0! #13238500 1! #13239000 0! #13239500 1! #13240000 0! #13240500 1! #13241000 0! #13241500 1! #13242000 0! #13242500 1! #13243000 0! #13243500 1! #13244000 0! #13244500 1! #13245000 0! #13245500 1! #13246000 0! #13246500 1! #13247000 0! #13247500 1! #13248000 0! #13248500 1! #13249000 0! #13249500 1! #13250000 0! #13250500 1! #13251000 0! #13251500 1! #13252000 0! #13252500 1! #13253000 0! #13253500 1! #13254000 0! #13254500 1! #13255000 0! #13255500 1! #13256000 0! #13256500 1! #13257000 0! #13257500 1! #13258000 0! #13258500 1! #13259000 0! #13259500 1! #13260000 0! #13260500 1! #13261000 0! #13261500 1! #13262000 0! #13262500 1! #13263000 0! #13263500 1! #13264000 0! #13264500 1! #13265000 0! #13265500 1! #13266000 0! #13266500 1! #13267000 0! #13267500 1! #13268000 0! #13268500 1! #13269000 0! #13269500 1! #13270000 0! #13270500 1! #13271000 0! #13271500 1! #13272000 0! #13272500 1! #13273000 0! #13273500 1! #13274000 0! #13274500 1! #13275000 0! #13275500 1! #13276000 0! #13276500 1! #13277000 0! #13277500 1! #13278000 0! #13278500 1! #13279000 0! #13279500 1! #13280000 0! #13280500 1! #13281000 0! #13281500 1! #13282000 0! #13282500 1! #13283000 0! #13283500 1! #13284000 0! #13284500 1! #13285000 0! #13285500 1! #13286000 0! #13286500 1! #13287000 0! #13287500 1! #13288000 0! #13288500 1! #13289000 0! #13289500 1! #13290000 0! #13290500 1! #13291000 0! #13291500 1! #13292000 0! #13292500 1! #13293000 0! #13293500 1! #13294000 0! #13294500 1! #13295000 0! #13295500 1! #13296000 0! #13296500 1! #13297000 0! #13297500 1! #13298000 0! #13298500 1! #13299000 0! #13299500 1! #13300000 0! #13300500 1! #13301000 0! #13301500 1! #13302000 0! #13302500 1! #13303000 0! #13303500 1! #13304000 0! #13304500 1! #13305000 0! #13305500 1! #13306000 0! #13306500 1! #13307000 0! #13307500 1! #13308000 0! #13308500 1! #13309000 0! #13309500 1! #13310000 0! #13310500 1! #13311000 0! #13311500 1! #13312000 0! #13312500 1! #13313000 0! #13313500 1! #13314000 0! #13314500 1! #13315000 0! #13315500 1! #13316000 0! #13316500 1! #13317000 0! #13317500 1! #13318000 0! #13318500 1! #13319000 0! #13319500 1! #13320000 0! #13320500 1! #13321000 0! #13321500 1! #13322000 0! #13322500 1! #13323000 0! #13323500 1! #13324000 0! #13324500 1! #13325000 0! #13325500 1! #13326000 0! #13326500 1! #13327000 0! #13327500 1! #13328000 0! #13328500 1! #13329000 0! #13329500 1! #13330000 0! #13330500 1! #13331000 0! #13331500 1! #13332000 0! #13332500 1! #13333000 0! #13333500 1! #13334000 0! #13334500 1! #13335000 0! #13335500 1! #13336000 0! #13336500 1! #13337000 0! #13337500 1! #13338000 0! #13338500 1! #13339000 0! #13339500 1! #13340000 0! #13340500 1! #13341000 0! #13341500 1! #13342000 0! #13342500 1! #13343000 0! #13343500 1! #13344000 0! #13344500 1! #13345000 0! #13345500 1! #13346000 0! #13346500 1! #13347000 0! #13347500 1! #13348000 0! #13348500 1! #13349000 0! #13349500 1! #13350000 0! #13350500 1! #13351000 0! #13351500 1! #13352000 0! #13352500 1! #13353000 0! #13353500 1! #13354000 0! #13354500 1! #13355000 0! #13355500 1! #13356000 0! #13356500 1! #13357000 0! #13357500 1! #13358000 0! #13358500 1! #13359000 0! #13359500 1! #13360000 0! #13360500 1! #13361000 0! #13361500 1! #13362000 0! #13362500 1! #13363000 0! #13363500 1! #13364000 0! #13364500 1! #13365000 0! #13365500 1! #13366000 0! #13366500 1! #13367000 0! #13367500 1! #13368000 0! #13368500 1! #13369000 0! #13369500 1! #13370000 0! #13370500 1! #13371000 0! #13371500 1! #13372000 0! #13372500 1! #13373000 0! #13373500 1! #13374000 0! #13374500 1! #13375000 0! #13375500 1! #13376000 0! #13376500 1! #13377000 0! #13377500 1! #13378000 0! #13378500 1! #13379000 0! #13379500 1! #13380000 0! #13380500 1! #13381000 0! #13381500 1! #13382000 0! #13382500 1! #13383000 0! #13383500 1! #13384000 0! #13384500 1! #13385000 0! #13385500 1! #13386000 0! #13386500 1! #13387000 0! #13387500 1! #13388000 0! #13388500 1! #13389000 0! #13389500 1! #13390000 0! #13390500 1! #13391000 0! #13391500 1! #13392000 0! #13392500 1! #13393000 0! #13393500 1! #13394000 0! #13394500 1! #13395000 0! #13395500 1! #13396000 0! #13396500 1! #13397000 0! #13397500 1! #13398000 0! #13398500 1! #13399000 0! #13399500 1! #13400000 0! #13400500 1! #13401000 0! #13401500 1! #13402000 0! #13402500 1! #13403000 0! #13403500 1! #13404000 0! #13404500 1! #13405000 0! #13405500 1! #13406000 0! #13406500 1! #13407000 0! #13407500 1! #13408000 0! #13408500 1! #13409000 0! #13409500 1! #13410000 0! #13410500 1! #13411000 0! #13411500 1! #13412000 0! #13412500 1! #13413000 0! #13413500 1! #13414000 0! #13414500 1! #13415000 0! #13415500 1! #13416000 0! #13416500 1! #13417000 0! #13417500 1! #13418000 0! #13418500 1! #13419000 0! #13419500 1! #13420000 0! #13420500 1! #13421000 0! #13421500 1! #13422000 0! #13422500 1! #13423000 0! #13423500 1! #13424000 0! #13424500 1! #13425000 0! #13425500 1! #13426000 0! #13426500 1! #13427000 0! #13427500 1! #13428000 0! #13428500 1! #13429000 0! #13429500 1! #13430000 0! #13430500 1! #13431000 0! #13431500 1! #13432000 0! #13432500 1! #13433000 0! #13433500 1! #13434000 0! #13434500 1! #13435000 0! #13435500 1! #13436000 0! #13436500 1! #13437000 0! #13437500 1! #13438000 0! #13438500 1! #13439000 0! #13439500 1! #13440000 0! #13440500 1! #13441000 0! #13441500 1! #13442000 0! #13442500 1! #13443000 0! #13443500 1! #13444000 0! #13444500 1! #13445000 0! #13445500 1! #13446000 0! #13446500 1! #13447000 0! #13447500 1! #13448000 0! #13448500 1! #13449000 0! #13449500 1! #13450000 0! #13450500 1! #13451000 0! #13451500 1! #13452000 0! #13452500 1! #13453000 0! #13453500 1! #13454000 0! #13454500 1! #13455000 0! #13455500 1! #13456000 0! #13456500 1! #13457000 0! #13457500 1! #13458000 0! #13458500 1! #13459000 0! #13459500 1! #13460000 0! #13460500 1! #13461000 0! #13461500 1! #13462000 0! #13462500 1! #13463000 0! #13463500 1! #13464000 0! #13464500 1! #13465000 0! #13465500 1! #13466000 0! #13466500 1! #13467000 0! #13467500 1! #13468000 0! #13468500 1! #13469000 0! #13469500 1! #13470000 0! #13470500 1! #13471000 0! #13471500 1! #13472000 0! #13472500 1! #13473000 0! #13473500 1! #13474000 0! #13474500 1! #13475000 0! #13475500 1! #13476000 0! #13476500 1! #13477000 0! #13477500 1! #13478000 0! #13478500 1! #13479000 0! #13479500 1! #13480000 0! #13480500 1! #13481000 0! #13481500 1! #13482000 0! #13482500 1! #13483000 0! #13483500 1! #13484000 0! #13484500 1! #13485000 0! #13485500 1! #13486000 0! #13486500 1! #13487000 0! #13487500 1! #13488000 0! #13488500 1! #13489000 0! #13489500 1! #13490000 0! #13490500 1! #13491000 0! #13491500 1! #13492000 0! #13492500 1! #13493000 0! #13493500 1! #13494000 0! #13494500 1! #13495000 0! #13495500 1! #13496000 0! #13496500 1! #13497000 0! #13497500 1! #13498000 0! #13498500 1! #13499000 0! #13499500 1! #13500000 0! #13500500 1! #13501000 0! #13501500 1! #13502000 0! #13502500 1! #13503000 0! #13503500 1! #13504000 0! #13504500 1! #13505000 0! #13505500 1! #13506000 0! #13506500 1! #13507000 0! #13507500 1! #13508000 0! #13508500 1! #13509000 0! #13509500 1! #13510000 0! #13510500 1! #13511000 0! #13511500 1! #13512000 0! #13512500 1! #13513000 0! #13513500 1! #13514000 0! #13514500 1! #13515000 0! #13515500 1! #13516000 0! #13516500 1! #13517000 0! #13517500 1! #13518000 0! #13518500 1! #13519000 0! #13519500 1! #13520000 0! #13520500 1! #13521000 0! #13521500 1! #13522000 0! #13522500 1! #13523000 0! #13523500 1! #13524000 0! #13524500 1! #13525000 0! #13525500 1! #13526000 0! #13526500 1! #13527000 0! #13527500 1! #13528000 0! #13528500 1! #13529000 0! #13529500 1! #13530000 0! #13530500 1! #13531000 0! #13531500 1! #13532000 0! #13532500 1! #13533000 0! #13533500 1! #13534000 0! #13534500 1! #13535000 0! #13535500 1! #13536000 0! #13536500 1! #13537000 0! #13537500 1! #13538000 0! #13538500 1! #13539000 0! #13539500 1! #13540000 0! #13540500 1! #13541000 0! #13541500 1! #13542000 0! #13542500 1! #13543000 0! #13543500 1! #13544000 0! #13544500 1! #13545000 0! #13545500 1! #13546000 0! #13546500 1! #13547000 0! #13547500 1! #13548000 0! #13548500 1! #13549000 0! #13549500 1! #13550000 0! #13550500 1! #13551000 0! #13551500 1! #13552000 0! #13552500 1! #13553000 0! #13553500 1! #13554000 0! #13554500 1! #13555000 0! #13555500 1! #13556000 0! #13556500 1! #13557000 0! #13557500 1! #13558000 0! #13558500 1! #13559000 0! #13559500 1! #13560000 0! #13560500 1! #13561000 0! #13561500 1! #13562000 0! #13562500 1! #13563000 0! #13563500 1! #13564000 0! #13564500 1! #13565000 0! #13565500 1! #13566000 0! #13566500 1! #13567000 0! #13567500 1! #13568000 0! #13568500 1! #13569000 0! #13569500 1! #13570000 0! #13570500 1! #13571000 0! #13571500 1! #13572000 0! #13572500 1! #13573000 0! #13573500 1! #13574000 0! #13574500 1! #13575000 0! #13575500 1! #13576000 0! #13576500 1! #13577000 0! #13577500 1! #13578000 0! #13578500 1! #13579000 0! #13579500 1! #13580000 0! #13580500 1! #13581000 0! #13581500 1! #13582000 0! #13582500 1! #13583000 0! #13583500 1! #13584000 0! #13584500 1! #13585000 0! #13585500 1! #13586000 0! #13586500 1! #13587000 0! #13587500 1! #13588000 0! #13588500 1! #13589000 0! #13589500 1! #13590000 0! #13590500 1! #13591000 0! #13591500 1! #13592000 0! #13592500 1! #13593000 0! #13593500 1! #13594000 0! #13594500 1! #13595000 0! #13595500 1! #13596000 0! #13596500 1! #13597000 0! #13597500 1! #13598000 0! #13598500 1! #13599000 0! #13599500 1! #13600000 0! #13600500 1! #13601000 0! #13601500 1! #13602000 0! #13602500 1! #13603000 0! #13603500 1! #13604000 0! #13604500 1! #13605000 0! #13605500 1! #13606000 0! #13606500 1! #13607000 0! #13607500 1! #13608000 0! #13608500 1! #13609000 0! #13609500 1! #13610000 0! #13610500 1! #13611000 0! #13611500 1! #13612000 0! #13612500 1! #13613000 0! #13613500 1! #13614000 0! #13614500 1! #13615000 0! #13615500 1! #13616000 0! #13616500 1! #13617000 0! #13617500 1! #13618000 0! #13618500 1! #13619000 0! #13619500 1! #13620000 0! #13620500 1! #13621000 0! #13621500 1! #13622000 0! #13622500 1! #13623000 0! #13623500 1! #13624000 0! #13624500 1! #13625000 0! #13625500 1! #13626000 0! #13626500 1! #13627000 0! #13627500 1! #13628000 0! #13628500 1! #13629000 0! #13629500 1! #13630000 0! #13630500 1! #13631000 0! #13631500 1! #13632000 0! #13632500 1! #13633000 0! #13633500 1! #13634000 0! #13634500 1! #13635000 0! #13635500 1! #13636000 0! #13636500 1! #13637000 0! #13637500 1! #13638000 0! #13638500 1! #13639000 0! #13639500 1! #13640000 0! #13640500 1! #13641000 0! #13641500 1! #13642000 0! #13642500 1! #13643000 0! #13643500 1! #13644000 0! #13644500 1! #13645000 0! #13645500 1! #13646000 0! #13646500 1! #13647000 0! #13647500 1! #13648000 0! #13648500 1! #13649000 0! #13649500 1! #13650000 0! #13650500 1! #13651000 0! #13651500 1! #13652000 0! #13652500 1! #13653000 0! #13653500 1! #13654000 0! #13654500 1! #13655000 0! #13655500 1! #13656000 0! #13656500 1! #13657000 0! #13657500 1! #13658000 0! #13658500 1! #13659000 0! #13659500 1! #13660000 0! #13660500 1! #13661000 0! #13661500 1! #13662000 0! #13662500 1! #13663000 0! #13663500 1! #13664000 0! #13664500 1! #13665000 0! #13665500 1! #13666000 0! #13666500 1! #13667000 0! #13667500 1! #13668000 0! #13668500 1! #13669000 0! #13669500 1! #13670000 0! #13670500 1! #13671000 0! #13671500 1! #13672000 0! #13672500 1! #13673000 0! #13673500 1! #13674000 0! #13674500 1! #13675000 0! #13675500 1! #13676000 0! #13676500 1! #13677000 0! #13677500 1! #13678000 0! #13678500 1! #13679000 0! #13679500 1! #13680000 0! #13680500 1! #13681000 0! #13681500 1! #13682000 0! #13682500 1! #13683000 0! #13683500 1! #13684000 0! #13684500 1! #13685000 0! #13685500 1! #13686000 0! #13686500 1! #13687000 0! #13687500 1! #13688000 0! #13688500 1! #13689000 0! #13689500 1! #13690000 0! #13690500 1! #13691000 0! #13691500 1! #13692000 0! #13692500 1! #13693000 0! #13693500 1! #13694000 0! #13694500 1! #13695000 0! #13695500 1! #13696000 0! #13696500 1! #13697000 0! #13697500 1! #13698000 0! #13698500 1! #13699000 0! #13699500 1! #13700000 0! #13700500 1! #13701000 0! #13701500 1! #13702000 0! #13702500 1! #13703000 0! #13703500 1! #13704000 0! #13704500 1! #13705000 0! #13705500 1! #13706000 0! #13706500 1! #13707000 0! #13707500 1! #13708000 0! #13708500 1! #13709000 0! #13709500 1! #13710000 0! #13710500 1! #13711000 0! #13711500 1! #13712000 0! #13712500 1! #13713000 0! #13713500 1! #13714000 0! #13714500 1! #13715000 0! #13715500 1! #13716000 0! #13716500 1! #13717000 0! #13717500 1! #13718000 0! #13718500 1! #13719000 0! #13719500 1! #13720000 0! #13720500 1! #13721000 0! #13721500 1! #13722000 0! #13722500 1! #13723000 0! #13723500 1! #13724000 0! #13724500 1! #13725000 0! #13725500 1! #13726000 0! #13726500 1! #13727000 0! #13727500 1! #13728000 0! #13728500 1! #13729000 0! #13729500 1! #13730000 0! #13730500 1! #13731000 0! #13731500 1! #13732000 0! #13732500 1! #13733000 0! #13733500 1! #13734000 0! #13734500 1! #13735000 0! #13735500 1! #13736000 0! #13736500 1! #13737000 0! #13737500 1! #13738000 0! #13738500 1! #13739000 0! #13739500 1! #13740000 0! #13740500 1! #13741000 0! #13741500 1! #13742000 0! #13742500 1! #13743000 0! #13743500 1! #13744000 0! #13744500 1! #13745000 0! #13745500 1! #13746000 0! #13746500 1! #13747000 0! #13747500 1! #13748000 0! #13748500 1! #13749000 0! #13749500 1! #13750000 0! #13750500 1! #13751000 0! #13751500 1! #13752000 0! #13752500 1! #13753000 0! #13753500 1! #13754000 0! #13754500 1! #13755000 0! #13755500 1! #13756000 0! #13756500 1! #13757000 0! #13757500 1! #13758000 0! #13758500 1! #13759000 0! #13759500 1! #13760000 0! #13760500 1! #13761000 0! #13761500 1! #13762000 0! #13762500 1! #13763000 0! #13763500 1! #13764000 0! #13764500 1! #13765000 0! #13765500 1! #13766000 0! #13766500 1! #13767000 0! #13767500 1! #13768000 0! #13768500 1! #13769000 0! #13769500 1! #13770000 0! #13770500 1! #13771000 0! #13771500 1! #13772000 0! #13772500 1! #13773000 0! #13773500 1! #13774000 0! #13774500 1! #13775000 0! #13775500 1! #13776000 0! #13776500 1! #13777000 0! #13777500 1! #13778000 0! #13778500 1! #13779000 0! #13779500 1! #13780000 0! #13780500 1! #13781000 0! #13781500 1! #13782000 0! #13782500 1! #13783000 0! #13783500 1! #13784000 0! #13784500 1! #13785000 0! #13785500 1! #13786000 0! #13786500 1! #13787000 0! #13787500 1! #13788000 0! #13788500 1! #13789000 0! #13789500 1! #13790000 0! #13790500 1! #13791000 0! #13791500 1! #13792000 0! #13792500 1! #13793000 0! #13793500 1! #13794000 0! #13794500 1! #13795000 0! #13795500 1! #13796000 0! #13796500 1! #13797000 0! #13797500 1! #13798000 0! #13798500 1! #13799000 0! #13799500 1! #13800000 0! #13800500 1! #13801000 0! #13801500 1! #13802000 0! #13802500 1! #13803000 0! #13803500 1! #13804000 0! #13804500 1! #13805000 0! #13805500 1! #13806000 0! #13806500 1! #13807000 0! #13807500 1! #13808000 0! #13808500 1! #13809000 0! #13809500 1! #13810000 0! #13810500 1! #13811000 0! #13811500 1! #13812000 0! #13812500 1! #13813000 0! #13813500 1! #13814000 0! #13814500 1! #13815000 0! #13815500 1! #13816000 0! #13816500 1! #13817000 0! #13817500 1! #13818000 0! #13818500 1! #13819000 0! #13819500 1! #13820000 0! #13820500 1! #13821000 0! #13821500 1! #13822000 0! #13822500 1! #13823000 0! #13823500 1! #13824000 0! #13824500 1! #13825000 0! #13825500 1! #13826000 0! #13826500 1! #13827000 0! #13827500 1! #13828000 0! #13828500 1! #13829000 0! #13829500 1! #13830000 0! #13830500 1! #13831000 0! #13831500 1! #13832000 0! #13832500 1! #13833000 0! #13833500 1! #13834000 0! #13834500 1! #13835000 0! #13835500 1! #13836000 0! #13836500 1! #13837000 0! #13837500 1! #13838000 0! #13838500 1! #13839000 0! #13839500 1! #13840000 0! #13840500 1! #13841000 0! #13841500 1! #13842000 0! #13842500 1! #13843000 0! #13843500 1! #13844000 0! #13844500 1! #13845000 0! #13845500 1! #13846000 0! #13846500 1! #13847000 0! #13847500 1! #13848000 0! #13848500 1! #13849000 0! #13849500 1! #13850000 0! #13850500 1! #13851000 0! #13851500 1! #13852000 0! #13852500 1! #13853000 0! #13853500 1! #13854000 0! #13854500 1! #13855000 0! #13855500 1! #13856000 0! #13856500 1! #13857000 0! #13857500 1! #13858000 0! #13858500 1! #13859000 0! #13859500 1! #13860000 0! #13860500 1! #13861000 0! #13861500 1! #13862000 0! #13862500 1! #13863000 0! #13863500 1! #13864000 0! #13864500 1! #13865000 0! #13865500 1! #13866000 0! #13866500 1! #13867000 0! #13867500 1! #13868000 0! #13868500 1! #13869000 0! #13869500 1! #13870000 0! #13870500 1! #13871000 0! #13871500 1! #13872000 0! #13872500 1! #13873000 0! #13873500 1! #13874000 0! #13874500 1! #13875000 0! #13875500 1! #13876000 0! #13876500 1! #13877000 0! #13877500 1! #13878000 0! #13878500 1! #13879000 0! #13879500 1! #13880000 0! #13880500 1! #13881000 0! #13881500 1! #13882000 0! #13882500 1! #13883000 0! #13883500 1! #13884000 0! #13884500 1! #13885000 0! #13885500 1! #13886000 0! #13886500 1! #13887000 0! #13887500 1! #13888000 0! #13888500 1! #13889000 0! #13889500 1! #13890000 0! #13890500 1! #13891000 0! #13891500 1! #13892000 0! #13892500 1! #13893000 0! #13893500 1! #13894000 0! #13894500 1! #13895000 0! #13895500 1! #13896000 0! #13896500 1! #13897000 0! #13897500 1! #13898000 0! #13898500 1! #13899000 0! #13899500 1! #13900000 0! #13900500 1! #13901000 0! #13901500 1! #13902000 0! #13902500 1! #13903000 0! #13903500 1! #13904000 0! #13904500 1! #13905000 0! #13905500 1! #13906000 0! #13906500 1! #13907000 0! #13907500 1! #13908000 0! #13908500 1! #13909000 0! #13909500 1! #13910000 0! #13910500 1! #13911000 0! #13911500 1! #13912000 0! #13912500 1! #13913000 0! #13913500 1! #13914000 0! #13914500 1! #13915000 0! #13915500 1! #13916000 0! #13916500 1! #13917000 0! #13917500 1! #13918000 0! #13918500 1! #13919000 0! #13919500 1! #13920000 0! #13920500 1! #13921000 0! #13921500 1! #13922000 0! #13922500 1! #13923000 0! #13923500 1! #13924000 0! #13924500 1! #13925000 0! #13925500 1! #13926000 0! #13926500 1! #13927000 0! #13927500 1! #13928000 0! #13928500 1! #13929000 0! #13929500 1! #13930000 0! #13930500 1! #13931000 0! #13931500 1! #13932000 0! #13932500 1! #13933000 0! #13933500 1! #13934000 0! #13934500 1! #13935000 0! #13935500 1! #13936000 0! #13936500 1! #13937000 0! #13937500 1! #13938000 0! #13938500 1! #13939000 0! #13939500 1! #13940000 0! #13940500 1! #13941000 0! #13941500 1! #13942000 0! #13942500 1! #13943000 0! #13943500 1! #13944000 0! #13944500 1! #13945000 0! #13945500 1! #13946000 0! #13946500 1! #13947000 0! #13947500 1! #13948000 0! #13948500 1! #13949000 0! #13949500 1! #13950000 0! #13950500 1! #13951000 0! #13951500 1! #13952000 0! #13952500 1! #13953000 0! #13953500 1! #13954000 0! #13954500 1! #13955000 0! #13955500 1! #13956000 0! #13956500 1! #13957000 0! #13957500 1! #13958000 0! #13958500 1! #13959000 0! #13959500 1! #13960000 0! #13960500 1! #13961000 0! #13961500 1! #13962000 0! #13962500 1! #13963000 0! #13963500 1! #13964000 0! #13964500 1! #13965000 0! #13965500 1! #13966000 0! #13966500 1! #13967000 0! #13967500 1! #13968000 0! #13968500 1! #13969000 0! #13969500 1! #13970000 0! #13970500 1! #13971000 0! #13971500 1! #13972000 0! #13972500 1! #13973000 0! #13973500 1! #13974000 0! #13974500 1! #13975000 0! #13975500 1! #13976000 0! #13976500 1! #13977000 0! #13977500 1! #13978000 0! #13978500 1! #13979000 0! #13979500 1! #13980000 0! #13980500 1! #13981000 0! #13981500 1! #13982000 0! #13982500 1! #13983000 0! #13983500 1! #13984000 0! #13984500 1! #13985000 0! #13985500 1! #13986000 0! #13986500 1! #13987000 0! #13987500 1! #13988000 0! #13988500 1! #13989000 0! #13989500 1! #13990000 0! #13990500 1! #13991000 0! #13991500 1! #13992000 0! #13992500 1! #13993000 0! #13993500 1! #13994000 0! #13994500 1! #13995000 0! #13995500 1! #13996000 0! #13996500 1! #13997000 0! #13997500 1! #13998000 0! #13998500 1! #13999000 0! #13999500 1! #14000000 0! #14000500 1! #14001000 0! #14001500 1! #14002000 0! #14002500 1! #14003000 0! #14003500 1! #14004000 0! #14004500 1! #14005000 0! #14005500 1! #14006000 0! #14006500 1! #14007000 0! #14007500 1! #14008000 0! #14008500 1! #14009000 0! #14009500 1! #14010000 0! #14010500 1! #14011000 0! #14011500 1! #14012000 0! #14012500 1! #14013000 0! #14013500 1! #14014000 0! #14014500 1! #14015000 0! #14015500 1! #14016000 0! #14016500 1! #14017000 0! #14017500 1! #14018000 0! #14018500 1! #14019000 0! #14019500 1! #14020000 0! #14020500 1! #14021000 0! #14021500 1! #14022000 0! #14022500 1! #14023000 0! #14023500 1! #14024000 0! #14024500 1! #14025000 0! #14025500 1! #14026000 0! #14026500 1! #14027000 0! #14027500 1! #14028000 0! #14028500 1! #14029000 0! #14029500 1! #14030000 0! #14030500 1! #14031000 0! #14031500 1! #14032000 0! #14032500 1! #14033000 0! #14033500 1! #14034000 0! #14034500 1! #14035000 0! #14035500 1! #14036000 0! #14036500 1! #14037000 0! #14037500 1! #14038000 0! #14038500 1! #14039000 0! #14039500 1! #14040000 0! #14040500 1! #14041000 0! #14041500 1! #14042000 0! #14042500 1! #14043000 0! #14043500 1! #14044000 0! #14044500 1! #14045000 0! #14045500 1! #14046000 0! #14046500 1! #14047000 0! #14047500 1! #14048000 0! #14048500 1! #14049000 0! #14049500 1! #14050000 0! #14050500 1! #14051000 0! #14051500 1! #14052000 0! #14052500 1! #14053000 0! #14053500 1! #14054000 0! #14054500 1! #14055000 0! #14055500 1! #14056000 0! #14056500 1! #14057000 0! #14057500 1! #14058000 0! #14058500 1! #14059000 0! #14059500 1! #14060000 0! #14060500 1! #14061000 0! #14061500 1! #14062000 0! #14062500 1! #14063000 0! #14063500 1! #14064000 0! #14064500 1! #14065000 0! #14065500 1! #14066000 0! #14066500 1! #14067000 0! #14067500 1! #14068000 0! #14068500 1! #14069000 0! #14069500 1! #14070000 0! #14070500 1! #14071000 0! #14071500 1! #14072000 0! #14072500 1! #14073000 0! #14073500 1! #14074000 0! #14074500 1! #14075000 0! #14075500 1! #14076000 0! #14076500 1! #14077000 0! #14077500 1! #14078000 0! #14078500 1! #14079000 0! #14079500 1! #14080000 0! #14080500 1! #14081000 0! #14081500 1! #14082000 0! #14082500 1! #14083000 0! #14083500 1! #14084000 0! #14084500 1! #14085000 0! #14085500 1! #14086000 0! #14086500 1! #14087000 0! #14087500 1! #14088000 0! #14088500 1! #14089000 0! #14089500 1! #14090000 0! #14090500 1! #14091000 0! #14091500 1! #14092000 0! #14092500 1! #14093000 0! #14093500 1! #14094000 0! #14094500 1! #14095000 0! #14095500 1! #14096000 0! #14096500 1! #14097000 0! #14097500 1! #14098000 0! #14098500 1! #14099000 0! #14099500 1! #14100000 0! #14100500 1! #14101000 0! #14101500 1! #14102000 0! #14102500 1! #14103000 0! #14103500 1! #14104000 0! #14104500 1! #14105000 0! #14105500 1! #14106000 0! #14106500 1! #14107000 0! #14107500 1! #14108000 0! #14108500 1! #14109000 0! #14109500 1! #14110000 0! #14110500 1! #14111000 0! #14111500 1! #14112000 0! #14112500 1! #14113000 0! #14113500 1! #14114000 0! #14114500 1! #14115000 0! #14115500 1! #14116000 0! #14116500 1! #14117000 0! #14117500 1! #14118000 0! #14118500 1! #14119000 0! #14119500 1! #14120000 0! #14120500 1! #14121000 0! #14121500 1! #14122000 0! #14122500 1! #14123000 0! #14123500 1! #14124000 0! #14124500 1! #14125000 0! #14125500 1! #14126000 0! #14126500 1! #14127000 0! #14127500 1! #14128000 0! #14128500 1! #14129000 0! #14129500 1! #14130000 0! #14130500 1! #14131000 0! #14131500 1! #14132000 0! #14132500 1! #14133000 0! #14133500 1! #14134000 0! #14134500 1! #14135000 0! #14135500 1! #14136000 0! #14136500 1! #14137000 0! #14137500 1! #14138000 0! #14138500 1! #14139000 0! #14139500 1! #14140000 0! #14140500 1! #14141000 0! #14141500 1! #14142000 0! #14142500 1! #14143000 0! #14143500 1! #14144000 0! #14144500 1! #14145000 0! #14145500 1! #14146000 0! #14146500 1! #14147000 0! #14147500 1! #14148000 0! #14148500 1! #14149000 0! #14149500 1! #14150000 0! #14150500 1! #14151000 0! #14151500 1! #14152000 0! #14152500 1! #14153000 0! #14153500 1! #14154000 0! #14154500 1! #14155000 0! #14155500 1! #14156000 0! #14156500 1! #14157000 0! #14157500 1! #14158000 0! #14158500 1! #14159000 0! #14159500 1! #14160000 0! #14160500 1! #14161000 0! #14161500 1! #14162000 0! #14162500 1! #14163000 0! #14163500 1! #14164000 0! #14164500 1! #14165000 0! #14165500 1! #14166000 0! #14166500 1! #14167000 0! #14167500 1! #14168000 0! #14168500 1! #14169000 0! #14169500 1! #14170000 0! #14170500 1! #14171000 0! #14171500 1! #14172000 0! #14172500 1! #14173000 0! #14173500 1! #14174000 0! #14174500 1! #14175000 0! #14175500 1! #14176000 0! #14176500 1! #14177000 0! #14177500 1! #14178000 0! #14178500 1! #14179000 0! #14179500 1! #14180000 0! #14180500 1! #14181000 0! #14181500 1! #14182000 0! #14182500 1! #14183000 0! #14183500 1! #14184000 0! #14184500 1! #14185000 0! #14185500 1! #14186000 0! #14186500 1! #14187000 0! #14187500 1! #14188000 0! #14188500 1! #14189000 0! #14189500 1! #14190000 0! #14190500 1! #14191000 0! #14191500 1! #14192000 0! #14192500 1! #14193000 0! #14193500 1! #14194000 0! #14194500 1! #14195000 0! #14195500 1! #14196000 0! #14196500 1! #14197000 0! #14197500 1! #14198000 0! #14198500 1! #14199000 0! #14199500 1! #14200000 0! #14200500 1! #14201000 0! #14201500 1! #14202000 0! #14202500 1! #14203000 0! #14203500 1! #14204000 0! #14204500 1! #14205000 0! #14205500 1! #14206000 0! #14206500 1! #14207000 0! #14207500 1! #14208000 0! #14208500 1! #14209000 0! #14209500 1! #14210000 0! #14210500 1! #14211000 0! #14211500 1! #14212000 0! #14212500 1! #14213000 0! #14213500 1! #14214000 0! #14214500 1! #14215000 0! #14215500 1! #14216000 0! #14216500 1! #14217000 0! #14217500 1! #14218000 0! #14218500 1! #14219000 0! #14219500 1! #14220000 0! #14220500 1! #14221000 0! #14221500 1! #14222000 0! #14222500 1! #14223000 0! #14223500 1! #14224000 0! #14224500 1! #14225000 0! #14225500 1! #14226000 0! #14226500 1! #14227000 0! #14227500 1! #14228000 0! #14228500 1! #14229000 0! #14229500 1! #14230000 0! #14230500 1! #14231000 0! #14231500 1! #14232000 0! #14232500 1! #14233000 0! #14233500 1! #14234000 0! #14234500 1! #14235000 0! #14235500 1! #14236000 0! #14236500 1! #14237000 0! #14237500 1! #14238000 0! #14238500 1! #14239000 0! #14239500 1! #14240000 0! #14240500 1! #14241000 0! #14241500 1! #14242000 0! #14242500 1! #14243000 0! #14243500 1! #14244000 0! #14244500 1! #14245000 0! #14245500 1! #14246000 0! #14246500 1! #14247000 0! #14247500 1! #14248000 0! #14248500 1! #14249000 0! #14249500 1! #14250000 0! #14250500 1! #14251000 0! #14251500 1! #14252000 0! #14252500 1! #14253000 0! #14253500 1! #14254000 0! #14254500 1! #14255000 0! #14255500 1! #14256000 0! #14256500 1! #14257000 0! #14257500 1! #14258000 0! #14258500 1! #14259000 0! #14259500 1! #14260000 0! #14260500 1! #14261000 0! #14261500 1! #14262000 0! #14262500 1! #14263000 0! #14263500 1! #14264000 0! #14264500 1! #14265000 0! #14265500 1! #14266000 0! #14266500 1! #14267000 0! #14267500 1! #14268000 0! #14268500 1! #14269000 0! #14269500 1! #14270000 0! #14270500 1! #14271000 0! #14271500 1! #14272000 0! #14272500 1! #14273000 0! #14273500 1! #14274000 0! #14274500 1! #14275000 0! #14275500 1! #14276000 0! #14276500 1! #14277000 0! #14277500 1! #14278000 0! #14278500 1! #14279000 0! #14279500 1! #14280000 0! #14280500 1! #14281000 0! #14281500 1! #14282000 0! #14282500 1! #14283000 0! #14283500 1! #14284000 0! #14284500 1! #14285000 0! #14285500 1! #14286000 0! #14286500 1! #14287000 0! #14287500 1! #14288000 0! #14288500 1! #14289000 0! #14289500 1! #14290000 0! #14290500 1! #14291000 0! #14291500 1! #14292000 0! #14292500 1! #14293000 0! #14293500 1! #14294000 0! #14294500 1! #14295000 0! #14295500 1! #14296000 0! #14296500 1! #14297000 0! #14297500 1! #14298000 0! #14298500 1! #14299000 0! #14299500 1! #14300000 0! #14300500 1! #14301000 0! #14301500 1! #14302000 0! #14302500 1! #14303000 0! #14303500 1! #14304000 0! #14304500 1! #14305000 0! #14305500 1! #14306000 0! #14306500 1! #14307000 0! #14307500 1! #14308000 0! #14308500 1! #14309000 0! #14309500 1! #14310000 0! #14310500 1! #14311000 0! #14311500 1! #14312000 0! #14312500 1! #14313000 0! #14313500 1! #14314000 0! #14314500 1! #14315000 0! #14315500 1! #14316000 0! #14316500 1! #14317000 0! #14317500 1! #14318000 0! #14318500 1! #14319000 0! #14319500 1! #14320000 0! #14320500 1! #14321000 0! #14321500 1! #14322000 0! #14322500 1! #14323000 0! #14323500 1! #14324000 0! #14324500 1! #14325000 0! #14325500 1! #14326000 0! #14326500 1! #14327000 0! #14327500 1! #14328000 0! #14328500 1! #14329000 0! #14329500 1! #14330000 0! #14330500 1! #14331000 0! #14331500 1! #14332000 0! #14332500 1! #14333000 0! #14333500 1! #14334000 0! #14334500 1! #14335000 0! #14335500 1! #14336000 0! #14336500 1! #14337000 0! #14337500 1! #14338000 0! #14338500 1! #14339000 0! #14339500 1! #14340000 0! #14340500 1! #14341000 0! #14341500 1! #14342000 0! #14342500 1! #14343000 0! #14343500 1! #14344000 0! #14344500 1! #14345000 0! #14345500 1! #14346000 0! #14346500 1! #14347000 0! #14347500 1! #14348000 0! #14348500 1! #14349000 0! #14349500 1! #14350000 0! #14350500 1! #14351000 0! #14351500 1! #14352000 0! #14352500 1! #14353000 0! #14353500 1! #14354000 0! #14354500 1! #14355000 0! #14355500 1! #14356000 0! #14356500 1! #14357000 0! #14357500 1! #14358000 0! #14358500 1! #14359000 0! #14359500 1! #14360000 0! #14360500 1! #14361000 0! #14361500 1! #14362000 0! #14362500 1! #14363000 0! #14363500 1! #14364000 0! #14364500 1! #14365000 0! #14365500 1! #14366000 0! #14366500 1! #14367000 0! #14367500 1! #14368000 0! #14368500 1! #14369000 0! #14369500 1! #14370000 0! #14370500 1! #14371000 0! #14371500 1! #14372000 0! #14372500 1! #14373000 0! #14373500 1! #14374000 0! #14374500 1! #14375000 0! #14375500 1! #14376000 0! #14376500 1! #14377000 0! #14377500 1! #14378000 0! #14378500 1! #14379000 0! #14379500 1! #14380000 0! #14380500 1! #14381000 0! #14381500 1! #14382000 0! #14382500 1! #14383000 0! #14383500 1! #14384000 0! #14384500 1! #14385000 0! #14385500 1! #14386000 0! #14386500 1! #14387000 0! #14387500 1! #14388000 0! #14388500 1! #14389000 0! #14389500 1! #14390000 0! #14390500 1! #14391000 0! #14391500 1! #14392000 0! #14392500 1! #14393000 0! #14393500 1! #14394000 0! #14394500 1! #14395000 0! #14395500 1! #14396000 0! #14396500 1! #14397000 0! #14397500 1! #14398000 0! #14398500 1! #14399000 0! #14399500 1! #14400000 0! #14400500 1! #14401000 0! #14401500 1! #14402000 0! #14402500 1! #14403000 0! #14403500 1! #14404000 0! #14404500 1! #14405000 0! #14405500 1! #14406000 0! #14406500 1! #14407000 0! #14407500 1! #14408000 0! #14408500 1! #14409000 0! #14409500 1! #14410000 0! #14410500 1! #14411000 0! #14411500 1! #14412000 0! #14412500 1! #14413000 0! #14413500 1! #14414000 0! #14414500 1! #14415000 0! #14415500 1! #14416000 0! #14416500 1! #14417000 0! #14417500 1! #14418000 0! #14418500 1! #14419000 0! #14419500 1! #14420000 0! #14420500 1! #14421000 0! #14421500 1! #14422000 0! #14422500 1! #14423000 0! #14423500 1! #14424000 0! #14424500 1! #14425000 0! #14425500 1! #14426000 0! #14426500 1! #14427000 0! #14427500 1! #14428000 0! #14428500 1! #14429000 0! #14429500 1! #14430000 0! #14430500 1! #14431000 0! #14431500 1! #14432000 0! #14432500 1! #14433000 0! #14433500 1! #14434000 0! #14434500 1! #14435000 0! #14435500 1! #14436000 0! #14436500 1! #14437000 0! #14437500 1! #14438000 0! #14438500 1! #14439000 0! #14439500 1! #14440000 0! #14440500 1! #14441000 0! #14441500 1! #14442000 0! #14442500 1! #14443000 0! #14443500 1! #14444000 0! #14444500 1! #14445000 0! #14445500 1! #14446000 0! #14446500 1! #14447000 0! #14447500 1! #14448000 0! #14448500 1! #14449000 0! #14449500 1! #14450000 0! #14450500 1! #14451000 0! #14451500 1! #14452000 0! #14452500 1! #14453000 0! #14453500 1! #14454000 0! #14454500 1! #14455000 0! #14455500 1! #14456000 0! #14456500 1! #14457000 0! #14457500 1! #14458000 0! #14458500 1! #14459000 0! #14459500 1! #14460000 0! #14460500 1! #14461000 0! #14461500 1! #14462000 0! #14462500 1! #14463000 0! #14463500 1! #14464000 0! #14464500 1! #14465000 0! #14465500 1! #14466000 0! #14466500 1! #14467000 0! #14467500 1! #14468000 0! #14468500 1! #14469000 0! #14469500 1! #14470000 0! #14470500 1! #14471000 0! #14471500 1! #14472000 0! #14472500 1! #14473000 0! #14473500 1! #14474000 0! #14474500 1! #14475000 0! #14475500 1! #14476000 0! #14476500 1! #14477000 0! #14477500 1! #14478000 0! #14478500 1! #14479000 0! #14479500 1! #14480000 0! #14480500 1! #14481000 0! #14481500 1! #14482000 0! #14482500 1! #14483000 0! #14483500 1! #14484000 0! #14484500 1! #14485000 0! #14485500 1! #14486000 0! #14486500 1! #14487000 0! #14487500 1! #14488000 0! #14488500 1! #14489000 0! #14489500 1! #14490000 0! #14490500 1! #14491000 0! #14491500 1! #14492000 0! #14492500 1! #14493000 0! #14493500 1! #14494000 0! #14494500 1! #14495000 0! #14495500 1! #14496000 0! #14496500 1! #14497000 0! #14497500 1! #14498000 0! #14498500 1! #14499000 0! #14499500 1! #14500000 0! #14500500 1! #14501000 0! #14501500 1! #14502000 0! #14502500 1! #14503000 0! #14503500 1! #14504000 0! #14504500 1! #14505000 0! #14505500 1! #14506000 0! #14506500 1! #14507000 0! #14507500 1! #14508000 0! #14508500 1! #14509000 0! #14509500 1! #14510000 0! #14510500 1! #14511000 0! #14511500 1! #14512000 0! #14512500 1! #14513000 0! #14513500 1! #14514000 0! #14514500 1! #14515000 0! #14515500 1! #14516000 0! #14516500 1! #14517000 0! #14517500 1! #14518000 0! #14518500 1! #14519000 0! #14519500 1! #14520000 0! #14520500 1! #14521000 0! #14521500 1! #14522000 0! #14522500 1! #14523000 0! #14523500 1! #14524000 0! #14524500 1! #14525000 0! #14525500 1! #14526000 0! #14526500 1! #14527000 0! #14527500 1! #14528000 0! #14528500 1! #14529000 0! #14529500 1! #14530000 0! #14530500 1! #14531000 0! #14531500 1! #14532000 0! #14532500 1! #14533000 0! #14533500 1! #14534000 0! #14534500 1! #14535000 0! #14535500 1! #14536000 0! #14536500 1! #14537000 0! #14537500 1! #14538000 0! #14538500 1! #14539000 0! #14539500 1! #14540000 0! #14540500 1! #14541000 0! #14541500 1! #14542000 0! #14542500 1! #14543000 0! #14543500 1! #14544000 0! #14544500 1! #14545000 0! #14545500 1! #14546000 0! #14546500 1! #14547000 0! #14547500 1! #14548000 0! #14548500 1! #14549000 0! #14549500 1! #14550000 0! #14550500 1! #14551000 0! #14551500 1! #14552000 0! #14552500 1! #14553000 0! #14553500 1! #14554000 0! #14554500 1! #14555000 0! #14555500 1! #14556000 0! #14556500 1! #14557000 0! #14557500 1! #14558000 0! #14558500 1! #14559000 0! #14559500 1! #14560000 0! #14560500 1! #14561000 0! #14561500 1! #14562000 0! #14562500 1! #14563000 0! #14563500 1! #14564000 0! #14564500 1! #14565000 0! #14565500 1! #14566000 0! #14566500 1! #14567000 0! #14567500 1! #14568000 0! #14568500 1! #14569000 0! #14569500 1! #14570000 0! #14570500 1! #14571000 0! #14571500 1! #14572000 0! #14572500 1! #14573000 0! #14573500 1! #14574000 0! #14574500 1! #14575000 0! #14575500 1! #14576000 0! #14576500 1! #14577000 0! #14577500 1! #14578000 0! #14578500 1! #14579000 0! #14579500 1! #14580000 0! #14580500 1! #14581000 0! #14581500 1! #14582000 0! #14582500 1! #14583000 0! #14583500 1! #14584000 0! #14584500 1! #14585000 0! #14585500 1! #14586000 0! #14586500 1! #14587000 0! #14587500 1! #14588000 0! #14588500 1! #14589000 0! #14589500 1! #14590000 0! #14590500 1! #14591000 0! #14591500 1! #14592000 0! #14592500 1! #14593000 0! #14593500 1! #14594000 0! #14594500 1! #14595000 0! #14595500 1! #14596000 0! #14596500 1! #14597000 0! #14597500 1! #14598000 0! #14598500 1! #14599000 0! #14599500 1! #14600000 0! #14600500 1! #14601000 0! #14601500 1! #14602000 0! #14602500 1! #14603000 0! #14603500 1! #14604000 0! #14604500 1! #14605000 0! #14605500 1! #14606000 0! #14606500 1! #14607000 0! #14607500 1! #14608000 0! #14608500 1! #14609000 0! #14609500 1! #14610000 0! #14610500 1! #14611000 0! #14611500 1! #14612000 0! #14612500 1! #14613000 0! #14613500 1! #14614000 0! #14614500 1! #14615000 0! #14615500 1! #14616000 0! #14616500 1! #14617000 0! #14617500 1! #14618000 0! #14618500 1! #14619000 0! #14619500 1! #14620000 0! #14620500 1! #14621000 0! #14621500 1! #14622000 0! #14622500 1! #14623000 0! #14623500 1! #14624000 0! #14624500 1! #14625000 0! #14625500 1! #14626000 0! #14626500 1! #14627000 0! #14627500 1! #14628000 0! #14628500 1! #14629000 0! #14629500 1! #14630000 0! #14630500 1! #14631000 0! #14631500 1! #14632000 0! #14632500 1! #14633000 0! #14633500 1! #14634000 0! #14634500 1! #14635000 0! #14635500 1! #14636000 0! #14636500 1! #14637000 0! #14637500 1! #14638000 0! #14638500 1! #14639000 0! #14639500 1! #14640000 0! #14640500 1! #14641000 0! #14641500 1! #14642000 0! #14642500 1! #14643000 0! #14643500 1! #14644000 0! #14644500 1! #14645000 0! #14645500 1! #14646000 0! #14646500 1! #14647000 0! #14647500 1! #14648000 0! #14648500 1! #14649000 0! #14649500 1! #14650000 0! #14650500 1! #14651000 0! #14651500 1! #14652000 0! #14652500 1! #14653000 0! #14653500 1! #14654000 0! #14654500 1! #14655000 0! #14655500 1! #14656000 0! #14656500 1! #14657000 0! #14657500 1! #14658000 0! #14658500 1! #14659000 0! #14659500 1! #14660000 0! #14660500 1! #14661000 0! #14661500 1! #14662000 0! #14662500 1! #14663000 0! #14663500 1! #14664000 0! #14664500 1! #14665000 0! #14665500 1! #14666000 0! #14666500 1! #14667000 0! #14667500 1! #14668000 0! #14668500 1! #14669000 0! #14669500 1! #14670000 0! #14670500 1! #14671000 0! #14671500 1! #14672000 0! #14672500 1! #14673000 0! #14673500 1! #14674000 0! #14674500 1! #14675000 0! #14675500 1! #14676000 0! #14676500 1! #14677000 0! #14677500 1! #14678000 0! #14678500 1! #14679000 0! #14679500 1! #14680000 0! #14680500 1! #14681000 0! #14681500 1! #14682000 0! #14682500 1! #14683000 0! #14683500 1! #14684000 0! #14684500 1! #14685000 0! #14685500 1! #14686000 0! #14686500 1! #14687000 0! #14687500 1! #14688000 0! #14688500 1! #14689000 0! #14689500 1! #14690000 0! #14690500 1! #14691000 0! #14691500 1! #14692000 0! #14692500 1! #14693000 0! #14693500 1! #14694000 0! #14694500 1! #14695000 0! #14695500 1! #14696000 0! #14696500 1! #14697000 0! #14697500 1! #14698000 0! #14698500 1! #14699000 0! #14699500 1! #14700000 0! #14700500 1! #14701000 0! #14701500 1! #14702000 0! #14702500 1! #14703000 0! #14703500 1! #14704000 0! #14704500 1! #14705000 0! #14705500 1! #14706000 0! #14706500 1! #14707000 0! #14707500 1! #14708000 0! #14708500 1! #14709000 0! #14709500 1! #14710000 0! #14710500 1! #14711000 0! #14711500 1! #14712000 0! #14712500 1! #14713000 0! #14713500 1! #14714000 0! #14714500 1! #14715000 0! #14715500 1! #14716000 0! #14716500 1! #14717000 0! #14717500 1! #14718000 0! #14718500 1! #14719000 0! #14719500 1! #14720000 0! #14720500 1! #14721000 0! #14721500 1! #14722000 0! #14722500 1! #14723000 0! #14723500 1! #14724000 0! #14724500 1! #14725000 0! #14725500 1! #14726000 0! #14726500 1! #14727000 0! #14727500 1! #14728000 0! #14728500 1! #14729000 0! #14729500 1! #14730000 0! #14730500 1! #14731000 0! #14731500 1! #14732000 0! #14732500 1! #14733000 0! #14733500 1! #14734000 0! #14734500 1! #14735000 0! #14735500 1! #14736000 0! #14736500 1! #14737000 0! #14737500 1! #14738000 0! #14738500 1! #14739000 0! #14739500 1! #14740000 0! #14740500 1! #14741000 0! #14741500 1! #14742000 0! #14742500 1! #14743000 0! #14743500 1! #14744000 0! #14744500 1! #14745000 0! #14745500 1! #14746000 0! #14746500 1! #14747000 0! #14747500 1! #14748000 0! #14748500 1! #14749000 0! #14749500 1! #14750000 0! #14750500 1! #14751000 0! #14751500 1! #14752000 0! #14752500 1! #14753000 0! #14753500 1! #14754000 0! #14754500 1! #14755000 0! #14755500 1! #14756000 0! #14756500 1! #14757000 0! #14757500 1! #14758000 0! #14758500 1! #14759000 0! #14759500 1! #14760000 0! #14760500 1! #14761000 0! #14761500 1! #14762000 0! #14762500 1! #14763000 0! #14763500 1! #14764000 0! #14764500 1! #14765000 0! #14765500 1! #14766000 0! #14766500 1! #14767000 0! #14767500 1! #14768000 0! #14768500 1! #14769000 0! #14769500 1! #14770000 0! #14770500 1! #14771000 0! #14771500 1! #14772000 0! #14772500 1! #14773000 0! #14773500 1! #14774000 0! #14774500 1! #14775000 0! #14775500 1! #14776000 0! #14776500 1! #14777000 0! #14777500 1! #14778000 0! #14778500 1! #14779000 0! #14779500 1! #14780000 0! #14780500 1! #14781000 0! #14781500 1! #14782000 0! #14782500 1! #14783000 0! #14783500 1! #14784000 0! #14784500 1! #14785000 0! #14785500 1! #14786000 0! #14786500 1! #14787000 0! #14787500 1! #14788000 0! #14788500 1! #14789000 0! #14789500 1! #14790000 0! #14790500 1! #14791000 0! #14791500 1! #14792000 0! #14792500 1! #14793000 0! #14793500 1! #14794000 0! #14794500 1! #14795000 0! #14795500 1! #14796000 0! #14796500 1! #14797000 0! #14797500 1! #14798000 0! #14798500 1! #14799000 0! #14799500 1! #14800000 0! #14800500 1! #14801000 0! #14801500 1! #14802000 0! #14802500 1! #14803000 0! #14803500 1! #14804000 0! #14804500 1! #14805000 0! #14805500 1! #14806000 0! #14806500 1! #14807000 0! #14807500 1! #14808000 0! #14808500 1! #14809000 0! #14809500 1! #14810000 0! #14810500 1! #14811000 0! #14811500 1! #14812000 0! #14812500 1! #14813000 0! #14813500 1! #14814000 0! #14814500 1! #14815000 0! #14815500 1! #14816000 0! #14816500 1! #14817000 0! #14817500 1! #14818000 0! #14818500 1! #14819000 0! #14819500 1! #14820000 0! #14820500 1! #14821000 0! #14821500 1! #14822000 0! #14822500 1! #14823000 0! #14823500 1! #14824000 0! #14824500 1! #14825000 0! #14825500 1! #14826000 0! #14826500 1! #14827000 0! #14827500 1! #14828000 0! #14828500 1! #14829000 0! #14829500 1! #14830000 0! #14830500 1! #14831000 0! #14831500 1! #14832000 0! #14832500 1! #14833000 0! #14833500 1! #14834000 0! #14834500 1! #14835000 0! #14835500 1! #14836000 0! #14836500 1! #14837000 0! #14837500 1! #14838000 0! #14838500 1! #14839000 0! #14839500 1! #14840000 0! #14840500 1! #14841000 0! #14841500 1! #14842000 0! #14842500 1! #14843000 0! #14843500 1! #14844000 0! #14844500 1! #14845000 0! #14845500 1! #14846000 0! #14846500 1! #14847000 0! #14847500 1! #14848000 0! #14848500 1! #14849000 0! #14849500 1! #14850000 0! #14850500 1! #14851000 0! #14851500 1! #14852000 0! #14852500 1! #14853000 0! #14853500 1! #14854000 0! #14854500 1! #14855000 0! #14855500 1! #14856000 0! #14856500 1! #14857000 0! #14857500 1! #14858000 0! #14858500 1! #14859000 0! #14859500 1! #14860000 0! #14860500 1! #14861000 0! #14861500 1! #14862000 0! #14862500 1! #14863000 0! #14863500 1! #14864000 0! #14864500 1! #14865000 0! #14865500 1! #14866000 0! #14866500 1! #14867000 0! #14867500 1! #14868000 0! #14868500 1! #14869000 0! #14869500 1! #14870000 0! #14870500 1! #14871000 0! #14871500 1! #14872000 0! #14872500 1! #14873000 0! #14873500 1! #14874000 0! #14874500 1! #14875000 0! #14875500 1! #14876000 0! #14876500 1! #14877000 0! #14877500 1! #14878000 0! #14878500 1! #14879000 0! #14879500 1! #14880000 0! #14880500 1! #14881000 0! #14881500 1! #14882000 0! #14882500 1! #14883000 0! #14883500 1! #14884000 0! #14884500 1! #14885000 0! #14885500 1! #14886000 0! #14886500 1! #14887000 0! #14887500 1! #14888000 0! #14888500 1! #14889000 0! #14889500 1! #14890000 0! #14890500 1! #14891000 0! #14891500 1! #14892000 0! #14892500 1! #14893000 0! #14893500 1! #14894000 0! #14894500 1! #14895000 0! #14895500 1! #14896000 0! #14896500 1! #14897000 0! #14897500 1! #14898000 0! #14898500 1! #14899000 0! #14899500 1! #14900000 0! #14900500 1! #14901000 0! #14901500 1! #14902000 0! #14902500 1! #14903000 0! #14903500 1! #14904000 0! #14904500 1! #14905000 0! #14905500 1! #14906000 0! #14906500 1! #14907000 0! #14907500 1! #14908000 0! #14908500 1! #14909000 0! #14909500 1! #14910000 0! #14910500 1! #14911000 0! #14911500 1! #14912000 0! #14912500 1! #14913000 0! #14913500 1! #14914000 0! #14914500 1! #14915000 0! #14915500 1! #14916000 0! #14916500 1! #14917000 0! #14917500 1! #14918000 0! #14918500 1! #14919000 0! #14919500 1! #14920000 0! #14920500 1! #14921000 0! #14921500 1! #14922000 0! #14922500 1! #14923000 0! #14923500 1! #14924000 0! #14924500 1! #14925000 0! #14925500 1! #14926000 0! #14926500 1! #14927000 0! #14927500 1! #14928000 0! #14928500 1! #14929000 0! #14929500 1! #14930000 0! #14930500 1! #14931000 0! #14931500 1! #14932000 0! #14932500 1! #14933000 0! #14933500 1! #14934000 0! #14934500 1! #14935000 0! #14935500 1! #14936000 0! #14936500 1! #14937000 0! #14937500 1! #14938000 0! #14938500 1! #14939000 0! #14939500 1! #14940000 0! #14940500 1! #14941000 0! #14941500 1! #14942000 0! #14942500 1! #14943000 0! #14943500 1! #14944000 0! #14944500 1! #14945000 0! #14945500 1! #14946000 0! #14946500 1! #14947000 0! #14947500 1! #14948000 0! #14948500 1! #14949000 0! #14949500 1! #14950000 0! #14950500 1! #14951000 0! #14951500 1! #14952000 0! #14952500 1! #14953000 0! #14953500 1! #14954000 0! #14954500 1! #14955000 0! #14955500 1! #14956000 0! #14956500 1! #14957000 0! #14957500 1! #14958000 0! #14958500 1! #14959000 0! #14959500 1! #14960000 0! #14960500 1! #14961000 0! #14961500 1! #14962000 0! #14962500 1! #14963000 0! #14963500 1! #14964000 0! #14964500 1! #14965000 0! #14965500 1! #14966000 0! #14966500 1! #14967000 0! #14967500 1! #14968000 0! #14968500 1! #14969000 0! #14969500 1! #14970000 0! #14970500 1! #14971000 0! #14971500 1! #14972000 0! #14972500 1! #14973000 0! #14973500 1! #14974000 0! #14974500 1! #14975000 0! #14975500 1! #14976000 0! #14976500 1! #14977000 0! #14977500 1! #14978000 0! #14978500 1! #14979000 0! #14979500 1! #14980000 0! #14980500 1! #14981000 0! #14981500 1! #14982000 0! #14982500 1! #14983000 0! #14983500 1! #14984000 0! #14984500 1! #14985000 0! #14985500 1! #14986000 0! #14986500 1! #14987000 0! #14987500 1! #14988000 0! #14988500 1! #14989000 0! #14989500 1! #14990000 0! #14990500 1! #14991000 0! #14991500 1! #14992000 0! #14992500 1! #14993000 0! #14993500 1! #14994000 0! #14994500 1! #14995000 0! #14995500 1! #14996000 0! #14996500 1! #14997000 0! #14997500 1! #14998000 0! #14998500 1! #14999000 0! #14999500 1! #15000000 0! #15000500 1! #15001000 0! #15001500 1! #15002000 0! #15002500 1! #15003000 0! #15003500 1! #15004000 0! #15004500 1! #15005000 0! #15005500 1! #15006000 0! #15006500 1! #15007000 0! #15007500 1! #15008000 0! #15008500 1! #15009000 0! #15009500 1! #15010000 0! #15010500 1! #15011000 0! #15011500 1! #15012000 0! #15012500 1! #15013000 0! #15013500 1! #15014000 0! #15014500 1! #15015000 0! #15015500 1! #15016000 0! #15016500 1! #15017000 0! #15017500 1! #15018000 0! #15018500 1! #15019000 0! #15019500 1! #15020000 0! #15020500 1! #15021000 0! #15021500 1! #15022000 0! #15022500 1! #15023000 0! #15023500 1! #15024000 0! #15024500 1! #15025000 0! #15025500 1! #15026000 0! #15026500 1! #15027000 0! #15027500 1! #15028000 0! #15028500 1! #15029000 0! #15029500 1! #15030000 0! #15030500 1! #15031000 0! #15031500 1! #15032000 0! #15032500 1! #15033000 0! #15033500 1! #15034000 0! #15034500 1! #15035000 0! #15035500 1! #15036000 0! #15036500 1! #15037000 0! #15037500 1! #15038000 0! #15038500 1! #15039000 0! #15039500 1! #15040000 0! #15040500 1! #15041000 0! #15041500 1! #15042000 0! #15042500 1! #15043000 0! #15043500 1! #15044000 0! #15044500 1! #15045000 0! #15045500 1! #15046000 0! #15046500 1! #15047000 0! #15047500 1! #15048000 0! #15048500 1! #15049000 0! #15049500 1! #15050000 0! #15050500 1! #15051000 0! #15051500 1! #15052000 0! #15052500 1! #15053000 0! #15053500 1! #15054000 0! #15054500 1! #15055000 0! #15055500 1! #15056000 0! #15056500 1! #15057000 0! #15057500 1! #15058000 0! #15058500 1! #15059000 0! #15059500 1! #15060000 0! #15060500 1! #15061000 0! #15061500 1! #15062000 0! #15062500 1! #15063000 0! #15063500 1! #15064000 0! #15064500 1! #15065000 0! #15065500 1! #15066000 0! #15066500 1! #15067000 0! #15067500 1! #15068000 0! #15068500 1! #15069000 0! #15069500 1! #15070000 0! #15070500 1! #15071000 0! #15071500 1! #15072000 0! #15072500 1! #15073000 0! #15073500 1! #15074000 0! #15074500 1! #15075000 0! #15075500 1! #15076000 0! #15076500 1! #15077000 0! #15077500 1! #15078000 0! #15078500 1! #15079000 0! #15079500 1! #15080000 0! #15080500 1! #15081000 0! #15081500 1! #15082000 0! #15082500 1! #15083000 0! #15083500 1! #15084000 0! #15084500 1! #15085000 0! #15085500 1! #15086000 0! #15086500 1! #15087000 0! #15087500 1! #15088000 0! #15088500 1! #15089000 0! #15089500 1! #15090000 0! #15090500 1! #15091000 0! #15091500 1! #15092000 0! #15092500 1! #15093000 0! #15093500 1! #15094000 0! #15094500 1! #15095000 0! #15095500 1! #15096000 0! #15096500 1! #15097000 0! #15097500 1! #15098000 0! #15098500 1! #15099000 0! #15099500 1! #15100000 0! #15100500 1! #15101000 0! #15101500 1! #15102000 0! #15102500 1! #15103000 0! #15103500 1! #15104000 0! #15104500 1! #15105000 0! #15105500 1! #15106000 0! #15106500 1! #15107000 0! #15107500 1! #15108000 0! #15108500 1! #15109000 0! #15109500 1! #15110000 0! #15110500 1! #15111000 0! #15111500 1! #15112000 0! #15112500 1! #15113000 0! #15113500 1! #15114000 0! #15114500 1! #15115000 0! #15115500 1! #15116000 0! #15116500 1! #15117000 0! #15117500 1! #15118000 0! #15118500 1! #15119000 0! #15119500 1! #15120000 0! #15120500 1! #15121000 0! #15121500 1! #15122000 0! #15122500 1! #15123000 0! #15123500 1! #15124000 0! #15124500 1! #15125000 0! #15125500 1! #15126000 0! #15126500 1! #15127000 0! #15127500 1! #15128000 0! #15128500 1! #15129000 0! #15129500 1! #15130000 0! #15130500 1! #15131000 0! #15131500 1! #15132000 0! #15132500 1! #15133000 0! #15133500 1! #15134000 0! #15134500 1! #15135000 0! #15135500 1! #15136000 0! #15136500 1! #15137000 0! #15137500 1! #15138000 0! #15138500 1! #15139000 0! #15139500 1! #15140000 0! #15140500 1! #15141000 0! #15141500 1! #15142000 0! #15142500 1! #15143000 0! #15143500 1! #15144000 0! #15144500 1! #15145000 0! #15145500 1! #15146000 0! #15146500 1! #15147000 0! #15147500 1! #15148000 0! #15148500 1! #15149000 0! #15149500 1! #15150000 0! #15150500 1! #15151000 0! #15151500 1! #15152000 0! #15152500 1! #15153000 0! #15153500 1! #15154000 0! #15154500 1! #15155000 0! #15155500 1! #15156000 0! #15156500 1! #15157000 0! #15157500 1! #15158000 0! #15158500 1! #15159000 0! #15159500 1! #15160000 0! #15160500 1! #15161000 0! #15161500 1! #15162000 0! #15162500 1! #15163000 0! #15163500 1! #15164000 0! #15164500 1! #15165000 0! #15165500 1! #15166000 0! #15166500 1! #15167000 0! #15167500 1! #15168000 0! #15168500 1! #15169000 0! #15169500 1! #15170000 0! #15170500 1! #15171000 0! #15171500 1! #15172000 0! #15172500 1! #15173000 0! #15173500 1! #15174000 0! #15174500 1! #15175000 0! #15175500 1! #15176000 0! #15176500 1! #15177000 0! #15177500 1! #15178000 0! #15178500 1! #15179000 0! #15179500 1! #15180000 0! #15180500 1! #15181000 0! #15181500 1! #15182000 0! #15182500 1! #15183000 0! #15183500 1! #15184000 0! #15184500 1! #15185000 0! #15185500 1! #15186000 0! #15186500 1! #15187000 0! #15187500 1! #15188000 0! #15188500 1! #15189000 0! #15189500 1! #15190000 0! #15190500 1! #15191000 0! #15191500 1! #15192000 0! #15192500 1! #15193000 0! #15193500 1! #15194000 0! #15194500 1! #15195000 0! #15195500 1! #15196000 0! #15196500 1! #15197000 0! #15197500 1! #15198000 0! #15198500 1! #15199000 0! #15199500 1! #15200000 0! #15200500 1! #15201000 0! #15201500 1! #15202000 0! #15202500 1! #15203000 0! #15203500 1! #15204000 0! #15204500 1! #15205000 0! #15205500 1! #15206000 0! #15206500 1! #15207000 0! #15207500 1! #15208000 0! #15208500 1! #15209000 0! #15209500 1! #15210000 0! #15210500 1! #15211000 0! #15211500 1! #15212000 0! #15212500 1! #15213000 0! #15213500 1! #15214000 0! #15214500 1! #15215000 0! #15215500 1! #15216000 0! #15216500 1! #15217000 0! #15217500 1! #15218000 0! #15218500 1! #15219000 0! #15219500 1! #15220000 0! #15220500 1! #15221000 0! #15221500 1! #15222000 0! #15222500 1! #15223000 0! #15223500 1! #15224000 0! #15224500 1! #15225000 0! #15225500 1! #15226000 0! #15226500 1! #15227000 0! #15227500 1! #15228000 0! #15228500 1! #15229000 0! #15229500 1! #15230000 0! #15230500 1! #15231000 0! #15231500 1! #15232000 0! #15232500 1! #15233000 0! #15233500 1! #15234000 0! #15234500 1! #15235000 0! #15235500 1! #15236000 0! #15236500 1! #15237000 0! #15237500 1! #15238000 0! #15238500 1! #15239000 0! #15239500 1! #15240000 0! #15240500 1! #15241000 0! #15241500 1! #15242000 0! #15242500 1! #15243000 0! #15243500 1! #15244000 0! #15244500 1! #15245000 0! #15245500 1! #15246000 0! #15246500 1! #15247000 0! #15247500 1! #15248000 0! #15248500 1! #15249000 0! #15249500 1! #15250000 0! #15250500 1! #15251000 0! #15251500 1! #15252000 0! #15252500 1! #15253000 0! #15253500 1! #15254000 0! #15254500 1! #15255000 0! #15255500 1! #15256000 0! #15256500 1! #15257000 0! #15257500 1! #15258000 0! #15258500 1! #15259000 0! #15259500 1! #15260000 0! #15260500 1! #15261000 0! #15261500 1! #15262000 0! #15262500 1! #15263000 0! #15263500 1! #15264000 0! #15264500 1! #15265000 0! #15265500 1! #15266000 0! #15266500 1! #15267000 0! #15267500 1! #15268000 0! #15268500 1! #15269000 0! #15269500 1! #15270000 0! #15270500 1! #15271000 0! #15271500 1! #15272000 0! #15272500 1! #15273000 0! #15273500 1! #15274000 0! #15274500 1! #15275000 0! #15275500 1! #15276000 0! #15276500 1! #15277000 0! #15277500 1! #15278000 0! #15278500 1! #15279000 0! #15279500 1! #15280000 0! #15280500 1! #15281000 0! #15281500 1! #15282000 0! #15282500 1! #15283000 0! #15283500 1! #15284000 0! #15284500 1! #15285000 0! #15285500 1! #15286000 0! #15286500 1! #15287000 0! #15287500 1! #15288000 0! #15288500 1! #15289000 0! #15289500 1! #15290000 0! #15290500 1! #15291000 0! #15291500 1! #15292000 0! #15292500 1! #15293000 0! #15293500 1! #15294000 0! #15294500 1! #15295000 0! #15295500 1! #15296000 0! #15296500 1! #15297000 0! #15297500 1! #15298000 0! #15298500 1! #15299000 0! #15299500 1! #15300000 0! #15300500 1! #15301000 0! #15301500 1! #15302000 0! #15302500 1! #15303000 0! #15303500 1! #15304000 0! #15304500 1! #15305000 0! #15305500 1! #15306000 0! #15306500 1! #15307000 0! #15307500 1! #15308000 0! #15308500 1! #15309000 0! #15309500 1! #15310000 0! #15310500 1! #15311000 0! #15311500 1! #15312000 0! #15312500 1! #15313000 0! #15313500 1! #15314000 0! #15314500 1! #15315000 0! #15315500 1! #15316000 0! #15316500 1! #15317000 0! #15317500 1! #15318000 0! #15318500 1! #15319000 0! #15319500 1! #15320000 0! #15320500 1! #15321000 0! #15321500 1! #15322000 0! #15322500 1! #15323000 0! #15323500 1! #15324000 0! #15324500 1! #15325000 0! #15325500 1! #15326000 0! #15326500 1! #15327000 0! #15327500 1! #15328000 0! #15328500 1! #15329000 0! #15329500 1! #15330000 0! #15330500 1! #15331000 0! #15331500 1! #15332000 0! #15332500 1! #15333000 0! #15333500 1! #15334000 0! #15334500 1! #15335000 0! #15335500 1! #15336000 0! #15336500 1! #15337000 0! #15337500 1! #15338000 0! #15338500 1! #15339000 0! #15339500 1! #15340000 0! #15340500 1! #15341000 0! #15341500 1! #15342000 0! #15342500 1! #15343000 0! #15343500 1! #15344000 0! #15344500 1! #15345000 0! #15345500 1! #15346000 0! #15346500 1! #15347000 0! #15347500 1! #15348000 0! #15348500 1! #15349000 0! #15349500 1! #15350000 0! #15350500 1! #15351000 0! #15351500 1! #15352000 0! #15352500 1! #15353000 0! #15353500 1! #15354000 0! #15354500 1! #15355000 0! #15355500 1! #15356000 0! #15356500 1! #15357000 0! #15357500 1! #15358000 0! #15358500 1! #15359000 0! #15359500 1! #15360000 0! #15360500 1! #15361000 0! #15361500 1! #15362000 0! #15362500 1! #15363000 0! #15363500 1! #15364000 0! #15364500 1! #15365000 0! #15365500 1! #15366000 0! #15366500 1! #15367000 0! #15367500 1! #15368000 0! #15368500 1! #15369000 0! #15369500 1! #15370000 0! #15370500 1! #15371000 0! #15371500 1! #15372000 0! #15372500 1! #15373000 0! #15373500 1! #15374000 0! #15374500 1! #15375000 0! #15375500 1! #15376000 0! #15376500 1! #15377000 0! #15377500 1! #15378000 0! #15378500 1! #15379000 0! #15379500 1! #15380000 0! #15380500 1! #15381000 0! #15381500 1! #15382000 0! #15382500 1! #15383000 0! #15383500 1! #15384000 0! #15384500 1! #15385000 0! #15385500 1! #15386000 0! #15386500 1! #15387000 0! #15387500 1! #15388000 0! #15388500 1! #15389000 0! #15389500 1! #15390000 0! #15390500 1! #15391000 0! #15391500 1! #15392000 0! #15392500 1! #15393000 0! #15393500 1! #15394000 0! #15394500 1! #15395000 0! #15395500 1! #15396000 0! #15396500 1! #15397000 0! #15397500 1! #15398000 0! #15398500 1! #15399000 0! #15399500 1! #15400000 0! #15400500 1! #15401000 0! #15401500 1! #15402000 0! #15402500 1! #15403000 0! #15403500 1! #15404000 0! #15404500 1! #15405000 0! #15405500 1! #15406000 0! #15406500 1! #15407000 0! #15407500 1! #15408000 0! #15408500 1! #15409000 0! #15409500 1! #15410000 0! #15410500 1! #15411000 0! #15411500 1! #15412000 0! #15412500 1! #15413000 0! #15413500 1! #15414000 0! #15414500 1! #15415000 0! #15415500 1! #15416000 0! #15416500 1! #15417000 0! #15417500 1! #15418000 0! #15418500 1! #15419000 0! #15419500 1! #15420000 0! #15420500 1! #15421000 0! #15421500 1! #15422000 0! #15422500 1! #15423000 0! #15423500 1! #15424000 0! #15424500 1! #15425000 0! #15425500 1! #15426000 0! #15426500 1! #15427000 0! #15427500 1! #15428000 0! #15428500 1! #15429000 0! #15429500 1! #15430000 0! #15430500 1! #15431000 0! #15431500 1! #15432000 0! #15432500 1! #15433000 0! #15433500 1! #15434000 0! #15434500 1! #15435000 0! #15435500 1! #15436000 0! #15436500 1! #15437000 0! #15437500 1! #15438000 0! #15438500 1! #15439000 0! #15439500 1! #15440000 0! #15440500 1! #15441000 0! #15441500 1! #15442000 0! #15442500 1! #15443000 0! #15443500 1! #15444000 0! #15444500 1! #15445000 0! #15445500 1! #15446000 0! #15446500 1! #15447000 0! #15447500 1! #15448000 0! #15448500 1! #15449000 0! #15449500 1! #15450000 0! #15450500 1! #15451000 0! #15451500 1! #15452000 0! #15452500 1! #15453000 0! #15453500 1! #15454000 0! #15454500 1! #15455000 0! #15455500 1! #15456000 0! #15456500 1! #15457000 0! #15457500 1! #15458000 0! #15458500 1! #15459000 0! #15459500 1! #15460000 0! #15460500 1! #15461000 0! #15461500 1! #15462000 0! #15462500 1! #15463000 0! #15463500 1! #15464000 0! #15464500 1! #15465000 0! #15465500 1! #15466000 0! #15466500 1! #15467000 0! #15467500 1! #15468000 0! #15468500 1! #15469000 0! #15469500 1! #15470000 0! #15470500 1! #15471000 0! #15471500 1! #15472000 0! #15472500 1! #15473000 0! #15473500 1! #15474000 0! #15474500 1! #15475000 0! #15475500 1! #15476000 0! #15476500 1! #15477000 0! #15477500 1! #15478000 0! #15478500 1! #15479000 0! #15479500 1! #15480000 0! #15480500 1! #15481000 0! #15481500 1! #15482000 0! #15482500 1! #15483000 0! #15483500 1! #15484000 0! #15484500 1! #15485000 0! #15485500 1! #15486000 0! #15486500 1! #15487000 0! #15487500 1! #15488000 0! #15488500 1! #15489000 0! #15489500 1! #15490000 0! #15490500 1! #15491000 0! #15491500 1! #15492000 0! #15492500 1! #15493000 0! #15493500 1! #15494000 0! #15494500 1! #15495000 0! #15495500 1! #15496000 0! #15496500 1! #15497000 0! #15497500 1! #15498000 0! #15498500 1! #15499000 0! #15499500 1! #15500000 0! #15500500 1! #15501000 0! #15501500 1! #15502000 0! #15502500 1! #15503000 0! #15503500 1! #15504000 0! #15504500 1! #15505000 0! #15505500 1! #15506000 0! #15506500 1! #15507000 0! #15507500 1! #15508000 0! #15508500 1! #15509000 0! #15509500 1! #15510000 0! #15510500 1! #15511000 0! #15511500 1! #15512000 0! #15512500 1! #15513000 0! #15513500 1! #15514000 0! #15514500 1! #15515000 0! #15515500 1! #15516000 0! #15516500 1! #15517000 0! #15517500 1! #15518000 0! #15518500 1! #15519000 0! #15519500 1! #15520000 0! #15520500 1! #15521000 0! #15521500 1! #15522000 0! #15522500 1! #15523000 0! #15523500 1! #15524000 0! #15524500 1! #15525000 0! #15525500 1! #15526000 0! #15526500 1! #15527000 0! #15527500 1! #15528000 0! #15528500 1! #15529000 0! #15529500 1! #15530000 0! #15530500 1! #15531000 0! #15531500 1! #15532000 0! #15532500 1! #15533000 0! #15533500 1! #15534000 0! #15534500 1! #15535000 0! #15535500 1! #15536000 0! #15536500 1! #15537000 0! #15537500 1! #15538000 0! #15538500 1! #15539000 0! #15539500 1! #15540000 0! #15540500 1! #15541000 0! #15541500 1! #15542000 0! #15542500 1! #15543000 0! #15543500 1! #15544000 0! #15544500 1! #15545000 0! #15545500 1! #15546000 0! #15546500 1! #15547000 0! #15547500 1! #15548000 0! #15548500 1! #15549000 0! #15549500 1! #15550000 0! #15550500 1! #15551000 0! #15551500 1! #15552000 0! #15552500 1! #15553000 0! #15553500 1! #15554000 0! #15554500 1! #15555000 0! #15555500 1! #15556000 0! #15556500 1! #15557000 0! #15557500 1! #15558000 0! #15558500 1! #15559000 0! #15559500 1! #15560000 0! #15560500 1! #15561000 0! #15561500 1! #15562000 0! #15562500 1! #15563000 0! #15563500 1! #15564000 0! #15564500 1! #15565000 0! #15565500 1! #15566000 0! #15566500 1! #15567000 0! #15567500 1! #15568000 0! #15568500 1! #15569000 0! #15569500 1! #15570000 0! #15570500 1! #15571000 0! #15571500 1! #15572000 0! #15572500 1! #15573000 0! #15573500 1! #15574000 0! #15574500 1! #15575000 0! #15575500 1! #15576000 0! #15576500 1! #15577000 0! #15577500 1! #15578000 0! #15578500 1! #15579000 0! #15579500 1! #15580000 0! #15580500 1! #15581000 0! #15581500 1! #15582000 0! #15582500 1! #15583000 0! #15583500 1! #15584000 0! #15584500 1! #15585000 0! #15585500 1! #15586000 0! #15586500 1! #15587000 0! #15587500 1! #15588000 0! #15588500 1! #15589000 0! #15589500 1! #15590000 0! #15590500 1! #15591000 0! #15591500 1! #15592000 0! #15592500 1! #15593000 0! #15593500 1! #15594000 0! #15594500 1! #15595000 0! #15595500 1! #15596000 0! #15596500 1! #15597000 0! #15597500 1! #15598000 0! #15598500 1! #15599000 0! #15599500 1! #15600000 0! #15600500 1! #15601000 0! #15601500 1! #15602000 0! #15602500 1! #15603000 0! #15603500 1! #15604000 0! #15604500 1! #15605000 0! #15605500 1! #15606000 0! #15606500 1! #15607000 0! #15607500 1! #15608000 0! #15608500 1! #15609000 0! #15609500 1! #15610000 0! #15610500 1! #15611000 0! #15611500 1! #15612000 0! #15612500 1! #15613000 0! #15613500 1! #15614000 0! #15614500 1! #15615000 0! #15615500 1! #15616000 0! #15616500 1! #15617000 0! #15617500 1! #15618000 0! #15618500 1! #15619000 0! #15619500 1! #15620000 0! #15620500 1! #15621000 0! #15621500 1! #15622000 0! #15622500 1! #15623000 0! #15623500 1! #15624000 0! #15624500 1! #15625000 0! #15625500 1! #15626000 0! #15626500 1! #15627000 0! #15627500 1! #15628000 0! #15628500 1! #15629000 0! #15629500 1! #15630000 0! #15630500 1! #15631000 0! #15631500 1! #15632000 0! #15632500 1! #15633000 0! #15633500 1! #15634000 0! #15634500 1! #15635000 0! #15635500 1! #15636000 0! #15636500 1! #15637000 0! #15637500 1! #15638000 0! #15638500 1! #15639000 0! #15639500 1! #15640000 0! #15640500 1! #15641000 0! #15641500 1! #15642000 0! #15642500 1! #15643000 0! #15643500 1! #15644000 0! #15644500 1! #15645000 0! #15645500 1! #15646000 0! #15646500 1! #15647000 0! #15647500 1! #15648000 0! #15648500 1! #15649000 0! #15649500 1! #15650000 0! #15650500 1! #15651000 0! #15651500 1! #15652000 0! #15652500 1! #15653000 0! #15653500 1! #15654000 0! #15654500 1! #15655000 0! #15655500 1! #15656000 0! #15656500 1! #15657000 0! #15657500 1! #15658000 0! #15658500 1! #15659000 0! #15659500 1! #15660000 0! #15660500 1! #15661000 0! #15661500 1! #15662000 0! #15662500 1! #15663000 0! #15663500 1! #15664000 0! #15664500 1! #15665000 0! #15665500 1! #15666000 0! #15666500 1! #15667000 0! #15667500 1! #15668000 0! #15668500 1! #15669000 0! #15669500 1! #15670000 0! #15670500 1! #15671000 0! #15671500 1! #15672000 0! #15672500 1! #15673000 0! #15673500 1! #15674000 0! #15674500 1! #15675000 0! #15675500 1! #15676000 0! #15676500 1! #15677000 0! #15677500 1! #15678000 0! #15678500 1! #15679000 0! #15679500 1! #15680000 0! #15680500 1! #15681000 0! #15681500 1! #15682000 0! #15682500 1! #15683000 0! #15683500 1! #15684000 0! #15684500 1! #15685000 0! #15685500 1! #15686000 0! #15686500 1! #15687000 0! #15687500 1! #15688000 0! #15688500 1! #15689000 0! #15689500 1! #15690000 0! #15690500 1! #15691000 0! #15691500 1! #15692000 0! #15692500 1! #15693000 0! #15693500 1! #15694000 0! #15694500 1! #15695000 0! #15695500 1! #15696000 0! #15696500 1! #15697000 0! #15697500 1! #15698000 0! #15698500 1! #15699000 0! #15699500 1! #15700000 0! #15700500 1! #15701000 0! #15701500 1! #15702000 0! #15702500 1! #15703000 0! #15703500 1! #15704000 0! #15704500 1! #15705000 0! #15705500 1! #15706000 0! #15706500 1! #15707000 0! #15707500 1! #15708000 0! #15708500 1! #15709000 0! #15709500 1! #15710000 0! #15710500 1! #15711000 0! #15711500 1! #15712000 0! #15712500 1! #15713000 0! #15713500 1! #15714000 0! #15714500 1! #15715000 0! #15715500 1! #15716000 0! #15716500 1! #15717000 0! #15717500 1! #15718000 0! #15718500 1! #15719000 0! #15719500 1! #15720000 0! #15720500 1! #15721000 0! #15721500 1! #15722000 0! #15722500 1! #15723000 0! #15723500 1! #15724000 0! #15724500 1! #15725000 0! #15725500 1! #15726000 0! #15726500 1! #15727000 0! #15727500 1! #15728000 0! #15728500 1! #15729000 0! #15729500 1! #15730000 0! #15730500 1! #15731000 0! #15731500 1! #15732000 0! #15732500 1! #15733000 0! #15733500 1! #15734000 0! #15734500 1! #15735000 0! #15735500 1! #15736000 0! #15736500 1! #15737000 0! #15737500 1! #15738000 0! #15738500 1! #15739000 0! #15739500 1! #15740000 0! #15740500 1! #15741000 0! #15741500 1! #15742000 0! #15742500 1! #15743000 0! #15743500 1! #15744000 0! #15744500 1! #15745000 0! #15745500 1! #15746000 0! #15746500 1! #15747000 0! #15747500 1! #15748000 0! #15748500 1! #15749000 0! #15749500 1! #15750000 0! #15750500 1! #15751000 0! #15751500 1! #15752000 0! #15752500 1! #15753000 0! #15753500 1! #15754000 0! #15754500 1! #15755000 0! #15755500 1! #15756000 0! #15756500 1! #15757000 0! #15757500 1! #15758000 0! #15758500 1! #15759000 0! #15759500 1! #15760000 0! #15760500 1! #15761000 0! #15761500 1! #15762000 0! #15762500 1! #15763000 0! #15763500 1! #15764000 0! #15764500 1! #15765000 0! #15765500 1! #15766000 0! #15766500 1! #15767000 0! #15767500 1! #15768000 0! #15768500 1! #15769000 0! #15769500 1! #15770000 0! #15770500 1! #15771000 0! #15771500 1! #15772000 0! #15772500 1! #15773000 0! #15773500 1! #15774000 0! #15774500 1! #15775000 0! #15775500 1! #15776000 0! #15776500 1! #15777000 0! #15777500 1! #15778000 0! #15778500 1! #15779000 0! #15779500 1! #15780000 0! #15780500 1! #15781000 0! #15781500 1! #15782000 0! #15782500 1! #15783000 0! #15783500 1! #15784000 0! #15784500 1! #15785000 0! #15785500 1! #15786000 0! #15786500 1! #15787000 0! #15787500 1! #15788000 0! #15788500 1! #15789000 0! #15789500 1! #15790000 0! #15790500 1! #15791000 0! #15791500 1! #15792000 0! #15792500 1! #15793000 0! #15793500 1! #15794000 0! #15794500 1! #15795000 0! #15795500 1! #15796000 0! #15796500 1! #15797000 0! #15797500 1! #15798000 0! #15798500 1! #15799000 0! #15799500 1! #15800000 0! #15800500 1! #15801000 0! #15801500 1! #15802000 0! #15802500 1! #15803000 0! #15803500 1! #15804000 0! #15804500 1! #15805000 0! #15805500 1! #15806000 0! #15806500 1! #15807000 0! #15807500 1! #15808000 0! #15808500 1! #15809000 0! #15809500 1! #15810000 0! #15810500 1! #15811000 0! #15811500 1! #15812000 0! #15812500 1! #15813000 0! #15813500 1! #15814000 0! #15814500 1! #15815000 0! #15815500 1! #15816000 0! #15816500 1! #15817000 0! #15817500 1! #15818000 0! #15818500 1! #15819000 0! #15819500 1! #15820000 0! #15820500 1! #15821000 0! #15821500 1! #15822000 0! #15822500 1! #15823000 0! #15823500 1! #15824000 0! #15824500 1! #15825000 0! #15825500 1! #15826000 0! #15826500 1! #15827000 0! #15827500 1! #15828000 0! #15828500 1! #15829000 0! #15829500 1! #15830000 0! #15830500 1! #15831000 0! #15831500 1! #15832000 0! #15832500 1! #15833000 0! #15833500 1! #15834000 0! #15834500 1! #15835000 0! #15835500 1! #15836000 0! #15836500 1! #15837000 0! #15837500 1! #15838000 0! #15838500 1! #15839000 0! #15839500 1! #15840000 0! #15840500 1! #15841000 0! #15841500 1! #15842000 0! #15842500 1! #15843000 0! #15843500 1! #15844000 0! #15844500 1! #15845000 0! #15845500 1! #15846000 0! #15846500 1! #15847000 0! #15847500 1! #15848000 0! #15848500 1! #15849000 0! #15849500 1! #15850000 0! #15850500 1! #15851000 0! #15851500 1! #15852000 0! #15852500 1! #15853000 0! #15853500 1! #15854000 0! #15854500 1! #15855000 0! #15855500 1! #15856000 0! #15856500 1! #15857000 0! #15857500 1! #15858000 0! #15858500 1! #15859000 0! #15859500 1! #15860000 0! #15860500 1! #15861000 0! #15861500 1! #15862000 0! #15862500 1! #15863000 0! #15863500 1! #15864000 0! #15864500 1! #15865000 0! #15865500 1! #15866000 0! #15866500 1! #15867000 0! #15867500 1! #15868000 0! #15868500 1! #15869000 0! #15869500 1! #15870000 0! #15870500 1! #15871000 0! #15871500 1! #15872000 0! #15872500 1! #15873000 0! #15873500 1! #15874000 0! #15874500 1! #15875000 0! #15875500 1! #15876000 0! #15876500 1! #15877000 0! #15877500 1! #15878000 0! #15878500 1! #15879000 0! #15879500 1! #15880000 0! #15880500 1! #15881000 0! #15881500 1! #15882000 0! #15882500 1! #15883000 0! #15883500 1! #15884000 0! #15884500 1! #15885000 0! #15885500 1! #15886000 0! #15886500 1! #15887000 0! #15887500 1! #15888000 0! #15888500 1! #15889000 0! #15889500 1! #15890000 0! #15890500 1! #15891000 0! #15891500 1! #15892000 0! #15892500 1! #15893000 0! #15893500 1! #15894000 0! #15894500 1! #15895000 0! #15895500 1! #15896000 0! #15896500 1! #15897000 0! #15897500 1! #15898000 0! #15898500 1! #15899000 0! #15899500 1! #15900000 0! #15900500 1! #15901000 0! #15901500 1! #15902000 0! #15902500 1! #15903000 0! #15903500 1! #15904000 0! #15904500 1! #15905000 0! #15905500 1! #15906000 0! #15906500 1! #15907000 0! #15907500 1! #15908000 0! #15908500 1! #15909000 0! #15909500 1! #15910000 0! #15910500 1! #15911000 0! #15911500 1! #15912000 0! #15912500 1! #15913000 0! #15913500 1! #15914000 0! #15914500 1! #15915000 0! #15915500 1! #15916000 0! #15916500 1! #15917000 0! #15917500 1! #15918000 0! #15918500 1! #15919000 0! #15919500 1! #15920000 0! #15920500 1! #15921000 0! #15921500 1! #15922000 0! #15922500 1! #15923000 0! #15923500 1! #15924000 0! #15924500 1! #15925000 0! #15925500 1! #15926000 0! #15926500 1! #15927000 0! #15927500 1! #15928000 0! #15928500 1! #15929000 0! #15929500 1! #15930000 0! #15930500 1! #15931000 0! #15931500 1! #15932000 0! #15932500 1! #15933000 0! #15933500 1! #15934000 0! #15934500 1! #15935000 0! #15935500 1! #15936000 0! #15936500 1! #15937000 0! #15937500 1! #15938000 0! #15938500 1! #15939000 0! #15939500 1! #15940000 0! #15940500 1! #15941000 0! #15941500 1! #15942000 0! #15942500 1! #15943000 0! #15943500 1! #15944000 0! #15944500 1! #15945000 0! #15945500 1! #15946000 0! #15946500 1! #15947000 0! #15947500 1! #15948000 0! #15948500 1! #15949000 0! #15949500 1! #15950000 0! #15950500 1! #15951000 0! #15951500 1! #15952000 0! #15952500 1! #15953000 0! #15953500 1! #15954000 0! #15954500 1! #15955000 0! #15955500 1! #15956000 0! #15956500 1! #15957000 0! #15957500 1! #15958000 0! #15958500 1! #15959000 0! #15959500 1! #15960000 0! #15960500 1! #15961000 0! #15961500 1! #15962000 0! #15962500 1! #15963000 0! #15963500 1! #15964000 0! #15964500 1! #15965000 0! #15965500 1! #15966000 0! #15966500 1! #15967000 0! #15967500 1! #15968000 0! #15968500 1! #15969000 0! #15969500 1! #15970000 0! #15970500 1! #15971000 0! #15971500 1! #15972000 0! #15972500 1! #15973000 0! #15973500 1! #15974000 0! #15974500 1! #15975000 0! #15975500 1! #15976000 0! #15976500 1! #15977000 0! #15977500 1! #15978000 0! #15978500 1! #15979000 0! #15979500 1! #15980000 0! #15980500 1! #15981000 0! #15981500 1! #15982000 0! #15982500 1! #15983000 0! #15983500 1! #15984000 0! #15984500 1! #15985000 0! #15985500 1! #15986000 0! #15986500 1! #15987000 0! #15987500 1! #15988000 0! #15988500 1! #15989000 0! #15989500 1! #15990000 0! #15990500 1! #15991000 0! #15991500 1! #15992000 0! #15992500 1! #15993000 0! #15993500 1! #15994000 0! #15994500 1! #15995000 0! #15995500 1! #15996000 0! #15996500 1! #15997000 0! #15997500 1! #15998000 0! #15998500 1! #15999000 0! #15999500 1! #16000000 0! #16000500 1! #16001000 0! #16001500 1! #16002000 0! #16002500 1! #16003000 0! #16003500 1! #16004000 0! #16004500 1! #16005000 0! #16005500 1! #16006000 0! #16006500 1! #16007000 0! #16007500 1! #16008000 0! #16008500 1! #16009000 0! #16009500 1! #16010000 0! #16010500 1! #16011000 0! #16011500 1! #16012000 0! #16012500 1! #16013000 0! #16013500 1! #16014000 0! #16014500 1! #16015000 0! #16015500 1! #16016000 0! #16016500 1! #16017000 0! #16017500 1! #16018000 0! #16018500 1! #16019000 0! #16019500 1! #16020000 0! #16020500 1! #16021000 0! #16021500 1! #16022000 0! #16022500 1! #16023000 0! #16023500 1! #16024000 0! #16024500 1! #16025000 0! #16025500 1! #16026000 0! #16026500 1! #16027000 0! #16027500 1! #16028000 0! #16028500 1! #16029000 0! #16029500 1! #16030000 0! #16030500 1! #16031000 0! #16031500 1! #16032000 0! #16032500 1! #16033000 0! #16033500 1! #16034000 0! #16034500 1! #16035000 0! #16035500 1! #16036000 0! #16036500 1! #16037000 0! #16037500 1! #16038000 0! #16038500 1! #16039000 0! #16039500 1! #16040000 0! #16040500 1! #16041000 0! #16041500 1! #16042000 0! #16042500 1! #16043000 0! #16043500 1! #16044000 0! #16044500 1! #16045000 0! #16045500 1! #16046000 0! #16046500 1! #16047000 0! #16047500 1! #16048000 0! #16048500 1! #16049000 0! #16049500 1! #16050000 0! #16050500 1! #16051000 0! #16051500 1! #16052000 0! #16052500 1! #16053000 0! #16053500 1! #16054000 0! #16054500 1! #16055000 0! #16055500 1! #16056000 0! #16056500 1! #16057000 0! #16057500 1! #16058000 0! #16058500 1! #16059000 0! #16059500 1! #16060000 0! #16060500 1! #16061000 0! #16061500 1! #16062000 0! #16062500 1! #16063000 0! #16063500 1! #16064000 0! #16064500 1! #16065000 0! #16065500 1! #16066000 0! #16066500 1! #16067000 0! #16067500 1! #16068000 0! #16068500 1! #16069000 0! #16069500 1! #16070000 0! #16070500 1! #16071000 0! #16071500 1! #16072000 0! #16072500 1! #16073000 0! #16073500 1! #16074000 0! #16074500 1! #16075000 0! #16075500 1! #16076000 0! #16076500 1! #16077000 0! #16077500 1! #16078000 0! #16078500 1! #16079000 0! #16079500 1! #16080000 0! #16080500 1! #16081000 0! #16081500 1! #16082000 0! #16082500 1! #16083000 0! #16083500 1! #16084000 0! #16084500 1! #16085000 0! #16085500 1! #16086000 0! #16086500 1! #16087000 0! #16087500 1! #16088000 0! #16088500 1! #16089000 0! #16089500 1! #16090000 0! #16090500 1! #16091000 0! #16091500 1! #16092000 0! #16092500 1! #16093000 0! #16093500 1! #16094000 0! #16094500 1! #16095000 0! #16095500 1! #16096000 0! #16096500 1! #16097000 0! #16097500 1! #16098000 0! #16098500 1! #16099000 0! #16099500 1! #16100000 0! #16100500 1! #16101000 0! #16101500 1! #16102000 0! #16102500 1! #16103000 0! #16103500 1! #16104000 0! #16104500 1! #16105000 0! #16105500 1! #16106000 0! #16106500 1! #16107000 0! #16107500 1! #16108000 0! #16108500 1! #16109000 0! #16109500 1! #16110000 0! #16110500 1! #16111000 0! #16111500 1! #16112000 0! #16112500 1! #16113000 0! #16113500 1! #16114000 0! #16114500 1! #16115000 0! #16115500 1! #16116000 0! #16116500 1! #16117000 0! #16117500 1! #16118000 0! #16118500 1! #16119000 0! #16119500 1! #16120000 0! #16120500 1! #16121000 0! #16121500 1! #16122000 0! #16122500 1! #16123000 0! #16123500 1! #16124000 0! #16124500 1! #16125000 0! #16125500 1! #16126000 0! #16126500 1! #16127000 0! #16127500 1! #16128000 0! #16128500 1! #16129000 0! #16129500 1! #16130000 0! #16130500 1! #16131000 0! #16131500 1! #16132000 0! #16132500 1! #16133000 0! #16133500 1! #16134000 0! #16134500 1! #16135000 0! #16135500 1! #16136000 0! #16136500 1! #16137000 0! #16137500 1! #16138000 0! #16138500 1! #16139000 0! #16139500 1! #16140000 0! #16140500 1! #16141000 0! #16141500 1! #16142000 0! #16142500 1! #16143000 0! #16143500 1! #16144000 0! #16144500 1! #16145000 0! #16145500 1! #16146000 0! #16146500 1! #16147000 0! #16147500 1! #16148000 0! #16148500 1! #16149000 0! #16149500 1! #16150000 0! #16150500 1! #16151000 0! #16151500 1! #16152000 0! #16152500 1! #16153000 0! #16153500 1! #16154000 0! #16154500 1! #16155000 0! #16155500 1! #16156000 0! #16156500 1! #16157000 0! #16157500 1! #16158000 0! #16158500 1! #16159000 0! #16159500 1! #16160000 0! #16160500 1! #16161000 0! #16161500 1! #16162000 0! #16162500 1! #16163000 0! #16163500 1! #16164000 0! #16164500 1! #16165000 0! #16165500 1! #16166000 0! #16166500 1! #16167000 0! #16167500 1! #16168000 0! #16168500 1! #16169000 0! #16169500 1! #16170000 0! #16170500 1! #16171000 0! #16171500 1! #16172000 0! #16172500 1! #16173000 0! #16173500 1! #16174000 0! #16174500 1! #16175000 0! #16175500 1! #16176000 0! #16176500 1! #16177000 0! #16177500 1! #16178000 0! #16178500 1! #16179000 0! #16179500 1! #16180000 0! #16180500 1! #16181000 0! #16181500 1! #16182000 0! #16182500 1! #16183000 0! #16183500 1! #16184000 0! #16184500 1! #16185000 0! #16185500 1! #16186000 0! #16186500 1! #16187000 0! #16187500 1! #16188000 0! #16188500 1! #16189000 0! #16189500 1! #16190000 0! #16190500 1! #16191000 0! #16191500 1! #16192000 0! #16192500 1! #16193000 0! #16193500 1! #16194000 0! #16194500 1! #16195000 0! #16195500 1! #16196000 0! #16196500 1! #16197000 0! #16197500 1! #16198000 0! #16198500 1! #16199000 0! #16199500 1! #16200000 0! #16200500 1! #16201000 0! #16201500 1! #16202000 0! #16202500 1! #16203000 0! #16203500 1! #16204000 0! #16204500 1! #16205000 0! #16205500 1! #16206000 0! #16206500 1! #16207000 0! #16207500 1! #16208000 0! #16208500 1! #16209000 0! #16209500 1! #16210000 0! #16210500 1! #16211000 0! #16211500 1! #16212000 0! #16212500 1! #16213000 0! #16213500 1! #16214000 0! #16214500 1! #16215000 0! #16215500 1! #16216000 0! #16216500 1! #16217000 0! #16217500 1! #16218000 0! #16218500 1! #16219000 0! #16219500 1! #16220000 0! #16220500 1! #16221000 0! #16221500 1! #16222000 0! #16222500 1! #16223000 0! #16223500 1! #16224000 0! #16224500 1! #16225000 0! #16225500 1! #16226000 0! #16226500 1! #16227000 0! #16227500 1! #16228000 0! #16228500 1! #16229000 0! #16229500 1! #16230000 0! #16230500 1! #16231000 0! #16231500 1! #16232000 0! #16232500 1! #16233000 0! #16233500 1! #16234000 0! #16234500 1! #16235000 0! #16235500 1! #16236000 0! #16236500 1! #16237000 0! #16237500 1! #16238000 0! #16238500 1! #16239000 0! #16239500 1! #16240000 0! #16240500 1! #16241000 0! #16241500 1! #16242000 0! #16242500 1! #16243000 0! #16243500 1! #16244000 0! #16244500 1! #16245000 0! #16245500 1! #16246000 0! #16246500 1! #16247000 0! #16247500 1! #16248000 0! #16248500 1! #16249000 0! #16249500 1! #16250000 0! #16250500 1! #16251000 0! #16251500 1! #16252000 0! #16252500 1! #16253000 0! #16253500 1! #16254000 0! #16254500 1! #16255000 0! #16255500 1! #16256000 0! #16256500 1! #16257000 0! #16257500 1! #16258000 0! #16258500 1! #16259000 0! #16259500 1! #16260000 0! #16260500 1! #16261000 0! #16261500 1! #16262000 0! #16262500 1! #16263000 0! #16263500 1! #16264000 0! #16264500 1! #16265000 0! #16265500 1! #16266000 0! #16266500 1! #16267000 0! #16267500 1! #16268000 0! #16268500 1! #16269000 0! #16269500 1! #16270000 0! #16270500 1! #16271000 0! #16271500 1! #16272000 0! #16272500 1! #16273000 0! #16273500 1! #16274000 0! #16274500 1! #16275000 0! #16275500 1! #16276000 0! #16276500 1! #16277000 0! #16277500 1! #16278000 0! #16278500 1! #16279000 0! #16279500 1! #16280000 0! #16280500 1! #16281000 0! #16281500 1! #16282000 0! #16282500 1! #16283000 0! #16283500 1! #16284000 0! #16284500 1! #16285000 0! #16285500 1! #16286000 0! #16286500 1! #16287000 0! #16287500 1! #16288000 0! #16288500 1! #16289000 0! #16289500 1! #16290000 0! #16290500 1! #16291000 0! #16291500 1! #16292000 0! #16292500 1! #16293000 0! #16293500 1! #16294000 0! #16294500 1! #16295000 0! #16295500 1! #16296000 0! #16296500 1! #16297000 0! #16297500 1! #16298000 0! #16298500 1! #16299000 0! #16299500 1! #16300000 0! #16300500 1! #16301000 0! #16301500 1! #16302000 0! #16302500 1! #16303000 0! #16303500 1! #16304000 0! #16304500 1! #16305000 0! #16305500 1! #16306000 0! #16306500 1! #16307000 0! #16307500 1! #16308000 0! #16308500 1! #16309000 0! #16309500 1! #16310000 0! #16310500 1! #16311000 0! #16311500 1! #16312000 0! #16312500 1! #16313000 0! #16313500 1! #16314000 0! #16314500 1! #16315000 0! #16315500 1! #16316000 0! #16316500 1! #16317000 0! #16317500 1! #16318000 0! #16318500 1! #16319000 0! #16319500 1! #16320000 0! #16320500 1! #16321000 0! #16321500 1! #16322000 0! #16322500 1! #16323000 0! #16323500 1! #16324000 0! #16324500 1! #16325000 0! #16325500 1! #16326000 0! #16326500 1! #16327000 0! #16327500 1! #16328000 0! #16328500 1! #16329000 0! #16329500 1! #16330000 0! #16330500 1! #16331000 0! #16331500 1! #16332000 0! #16332500 1! #16333000 0! #16333500 1! #16334000 0! #16334500 1! #16335000 0! #16335500 1! #16336000 0! #16336500 1! #16337000 0! #16337500 1! #16338000 0! #16338500 1! #16339000 0! #16339500 1! #16340000 0! #16340500 1! #16341000 0! #16341500 1! #16342000 0! #16342500 1! #16343000 0! #16343500 1! #16344000 0! #16344500 1! #16345000 0! #16345500 1! #16346000 0! #16346500 1! #16347000 0! #16347500 1! #16348000 0! #16348500 1! #16349000 0! #16349500 1! #16350000 0! #16350500 1! #16351000 0! #16351500 1! #16352000 0! #16352500 1! #16353000 0! #16353500 1! #16354000 0! #16354500 1! #16355000 0! #16355500 1! #16356000 0! #16356500 1! #16357000 0! #16357500 1! #16358000 0! #16358500 1! #16359000 0! #16359500 1! #16360000 0! #16360500 1! #16361000 0! #16361500 1! #16362000 0! #16362500 1! #16363000 0! #16363500 1! #16364000 0! #16364500 1! #16365000 0! #16365500 1! #16366000 0! #16366500 1! #16367000 0! #16367500 1! #16368000 0! #16368500 1! #16369000 0! #16369500 1! #16370000 0! #16370500 1! #16371000 0! #16371500 1! #16372000 0! #16372500 1! #16373000 0! #16373500 1! #16374000 0! #16374500 1! #16375000 0! #16375500 1! #16376000 0! #16376500 1! #16377000 0! #16377500 1! #16378000 0! #16378500 1! #16379000 0! #16379500 1! #16380000 0! #16380500 1! #16381000 0! #16381500 1! #16382000 0! #16382500 1! #16383000 0! #16383500 1! #16384000 0! #16384500 1! #16385000 0! #16385500 1! #16386000 0! #16386500 1! #16387000 0! #16387500 1! #16388000 0! #16388500 1! #16389000 0! #16389500 1! #16390000 0! #16390500 1! #16391000 0! #16391500 1! #16392000 0! #16392500 1! #16393000 0! #16393500 1! #16394000 0! #16394500 1! #16395000 0! #16395500 1! #16396000 0! #16396500 1! #16397000 0! #16397500 1! #16398000 0! #16398500 1! #16399000 0! #16399500 1! #16400000 0! #16400500 1! #16401000 0! #16401500 1! #16402000 0! #16402500 1! #16403000 0! #16403500 1! #16404000 0! #16404500 1! #16405000 0! #16405500 1! #16406000 0! #16406500 1! #16407000 0! #16407500 1! #16408000 0! #16408500 1! #16409000 0! #16409500 1! #16410000 0! #16410500 1! #16411000 0! #16411500 1! #16412000 0! #16412500 1! #16413000 0! #16413500 1! #16414000 0! #16414500 1! #16415000 0! #16415500 1! #16416000 0! #16416500 1! #16417000 0! #16417500 1! #16418000 0! #16418500 1! #16419000 0! #16419500 1! #16420000 0! #16420500 1! #16421000 0! #16421500 1! #16422000 0! #16422500 1! #16423000 0! #16423500 1! #16424000 0! #16424500 1! #16425000 0! #16425500 1! #16426000 0! #16426500 1! #16427000 0! #16427500 1! #16428000 0! #16428500 1! #16429000 0! #16429500 1! #16430000 0! #16430500 1! #16431000 0! #16431500 1! #16432000 0! #16432500 1! #16433000 0! #16433500 1! #16434000 0! #16434500 1! #16435000 0! #16435500 1! #16436000 0! #16436500 1! #16437000 0! #16437500 1! #16438000 0! #16438500 1! #16439000 0! #16439500 1! #16440000 0! #16440500 1! #16441000 0! #16441500 1! #16442000 0! #16442500 1! #16443000 0! #16443500 1! #16444000 0! #16444500 1! #16445000 0! #16445500 1! #16446000 0! #16446500 1! #16447000 0! #16447500 1! #16448000 0! #16448500 1! #16449000 0! #16449500 1! #16450000 0! #16450500 1! #16451000 0! #16451500 1! #16452000 0! #16452500 1! #16453000 0! #16453500 1! #16454000 0! #16454500 1! #16455000 0! #16455500 1! #16456000 0! #16456500 1! #16457000 0! #16457500 1! #16458000 0! #16458500 1! #16459000 0! #16459500 1! #16460000 0! #16460500 1! #16461000 0! #16461500 1! #16462000 0! #16462500 1! #16463000 0! #16463500 1! #16464000 0! #16464500 1! #16465000 0! #16465500 1! #16466000 0! #16466500 1! #16467000 0! #16467500 1! #16468000 0! #16468500 1! #16469000 0! #16469500 1! #16470000 0! #16470500 1! #16471000 0! #16471500 1! #16472000 0! #16472500 1! #16473000 0! #16473500 1! #16474000 0! #16474500 1! #16475000 0! #16475500 1! #16476000 0! #16476500 1! #16477000 0! #16477500 1! #16478000 0! #16478500 1! #16479000 0! #16479500 1! #16480000 0! #16480500 1! #16481000 0! #16481500 1! #16482000 0! #16482500 1! #16483000 0! #16483500 1! #16484000 0! #16484500 1! #16485000 0! #16485500 1! #16486000 0! #16486500 1! #16487000 0! #16487500 1! #16488000 0! #16488500 1! #16489000 0! #16489500 1! #16490000 0! #16490500 1! #16491000 0! #16491500 1! #16492000 0! #16492500 1! #16493000 0! #16493500 1! #16494000 0! #16494500 1! #16495000 0! #16495500 1! #16496000 0! #16496500 1! #16497000 0! #16497500 1! #16498000 0! #16498500 1! #16499000 0! #16499500 1! #16500000 0! #16500500 1! #16501000 0! #16501500 1! #16502000 0! #16502500 1! #16503000 0! #16503500 1! #16504000 0! #16504500 1! #16505000 0! #16505500 1! #16506000 0! #16506500 1! #16507000 0! #16507500 1! #16508000 0! #16508500 1! #16509000 0! #16509500 1! #16510000 0! #16510500 1! #16511000 0! #16511500 1! #16512000 0! #16512500 1! #16513000 0! #16513500 1! #16514000 0! #16514500 1! #16515000 0! #16515500 1! #16516000 0! #16516500 1! #16517000 0! #16517500 1! #16518000 0! #16518500 1! #16519000 0! #16519500 1! #16520000 0! #16520500 1! #16521000 0! #16521500 1! #16522000 0! #16522500 1! #16523000 0! #16523500 1! #16524000 0! #16524500 1! #16525000 0! #16525500 1! #16526000 0! #16526500 1! #16527000 0! #16527500 1! #16528000 0! #16528500 1! #16529000 0! #16529500 1! #16530000 0! #16530500 1! #16531000 0! #16531500 1! #16532000 0! #16532500 1! #16533000 0! #16533500 1! #16534000 0! #16534500 1! #16535000 0! #16535500 1! #16536000 0! #16536500 1! #16537000 0! #16537500 1! #16538000 0! #16538500 1! #16539000 0! #16539500 1! #16540000 0! #16540500 1! #16541000 0! #16541500 1! #16542000 0! #16542500 1! #16543000 0! #16543500 1! #16544000 0! #16544500 1! #16545000 0! #16545500 1! #16546000 0! #16546500 1! #16547000 0! #16547500 1! #16548000 0! #16548500 1! #16549000 0! #16549500 1! #16550000 0! #16550500 1! #16551000 0! #16551500 1! #16552000 0! #16552500 1! #16553000 0! #16553500 1! #16554000 0! #16554500 1! #16555000 0! #16555500 1! #16556000 0! #16556500 1! #16557000 0! #16557500 1! #16558000 0! #16558500 1! #16559000 0! #16559500 1! #16560000 0! #16560500 1! #16561000 0! #16561500 1! #16562000 0! #16562500 1! #16563000 0! #16563500 1! #16564000 0! #16564500 1! #16565000 0! #16565500 1! #16566000 0! #16566500 1! #16567000 0! #16567500 1! #16568000 0! #16568500 1! #16569000 0! #16569500 1! #16570000 0! #16570500 1! #16571000 0! #16571500 1! #16572000 0! #16572500 1! #16573000 0! #16573500 1! #16574000 0! #16574500 1! #16575000 0! #16575500 1! #16576000 0! #16576500 1! #16577000 0! #16577500 1! #16578000 0! #16578500 1! #16579000 0! #16579500 1! #16580000 0! #16580500 1! #16581000 0! #16581500 1! #16582000 0! #16582500 1! #16583000 0! #16583500 1! #16584000 0! #16584500 1! #16585000 0! #16585500 1! #16586000 0! #16586500 1! #16587000 0! #16587500 1! #16588000 0! #16588500 1! #16589000 0! #16589500 1! #16590000 0! #16590500 1! #16591000 0! #16591500 1! #16592000 0! #16592500 1! #16593000 0! #16593500 1! #16594000 0! #16594500 1! #16595000 0! #16595500 1! #16596000 0! #16596500 1! #16597000 0! #16597500 1! #16598000 0! #16598500 1! #16599000 0! #16599500 1! #16600000 0! #16600500 1! #16601000 0! #16601500 1! #16602000 0! #16602500 1! #16603000 0! #16603500 1! #16604000 0! #16604500 1! #16605000 0! #16605500 1! #16606000 0! #16606500 1! #16607000 0! #16607500 1! #16608000 0! #16608500 1! #16609000 0! #16609500 1! #16610000 0! #16610500 1! #16611000 0! #16611500 1! #16612000 0! #16612500 1! #16613000 0! #16613500 1! #16614000 0! #16614500 1! #16615000 0! #16615500 1! #16616000 0! #16616500 1! #16617000 0! #16617500 1! #16618000 0! #16618500 1! #16619000 0! #16619500 1! #16620000 0! #16620500 1! #16621000 0! #16621500 1! #16622000 0! #16622500 1! #16623000 0! #16623500 1! #16624000 0! #16624500 1! #16625000 0! #16625500 1! #16626000 0! #16626500 1! #16627000 0! #16627500 1! #16628000 0! #16628500 1! #16629000 0! #16629500 1! #16630000 0! #16630500 1! #16631000 0! #16631500 1! #16632000 0! #16632500 1! #16633000 0! #16633500 1! #16634000 0! #16634500 1! #16635000 0! #16635500 1! #16636000 0! #16636500 1! #16637000 0! #16637500 1! #16638000 0! #16638500 1! #16639000 0! #16639500 1! #16640000 0! #16640500 1! #16641000 0! #16641500 1! #16642000 0! #16642500 1! #16643000 0! #16643500 1! #16644000 0! #16644500 1! #16645000 0! #16645500 1! #16646000 0! #16646500 1! #16647000 0! #16647500 1! #16648000 0! #16648500 1! #16649000 0! #16649500 1! #16650000 0! #16650500 1! #16651000 0! #16651500 1! #16652000 0! #16652500 1! #16653000 0! #16653500 1! #16654000 0! #16654500 1! #16655000 0! #16655500 1! #16656000 0! #16656500 1! #16657000 0! #16657500 1! #16658000 0! #16658500 1! #16659000 0! #16659500 1! #16660000 0! #16660500 1! #16661000 0! #16661500 1! #16662000 0! #16662500 1! #16663000 0! #16663500 1! #16664000 0! #16664500 1! #16665000 0! #16665500 1! #16666000 0! #16666500 1! #16667000 0! #16667500 1! #16668000 0! #16668500 1! #16669000 0! #16669500 1! #16670000 0! #16670500 1! #16671000 0! #16671500 1! #16672000 0! #16672500 1! #16673000 0! #16673500 1! #16674000 0! #16674500 1! #16675000 0! #16675500 1! #16676000 0! #16676500 1! #16677000 0! #16677500 1! #16678000 0! #16678500 1! #16679000 0! #16679500 1! #16680000 0! #16680500 1! #16681000 0! #16681500 1! #16682000 0! #16682500 1! #16683000 0! #16683500 1! #16684000 0! #16684500 1! #16685000 0! #16685500 1! #16686000 0! #16686500 1! #16687000 0! #16687500 1! #16688000 0! #16688500 1! #16689000 0! #16689500 1! #16690000 0! #16690500 1! #16691000 0! #16691500 1! #16692000 0! #16692500 1! #16693000 0! #16693500 1! #16694000 0! #16694500 1! #16695000 0! #16695500 1! #16696000 0! #16696500 1! #16697000 0! #16697500 1! #16698000 0! #16698500 1! #16699000 0! #16699500 1! #16700000 0! #16700500 1! #16701000 0! #16701500 1! #16702000 0! #16702500 1! #16703000 0! #16703500 1! #16704000 0! #16704500 1! #16705000 0! #16705500 1! #16706000 0! #16706500 1! #16707000 0! #16707500 1! #16708000 0! #16708500 1! #16709000 0! #16709500 1! #16710000 0! #16710500 1! #16711000 0! #16711500 1! #16712000 0! #16712500 1! #16713000 0! #16713500 1! #16714000 0! #16714500 1! #16715000 0! #16715500 1! #16716000 0! #16716500 1! #16717000 0! #16717500 1! #16718000 0! #16718500 1! #16719000 0! #16719500 1! #16720000 0! #16720500 1! #16721000 0! #16721500 1! #16722000 0! #16722500 1! #16723000 0! #16723500 1! #16724000 0! #16724500 1! #16725000 0! #16725500 1! #16726000 0! #16726500 1! #16727000 0! #16727500 1! #16728000 0! #16728500 1! #16729000 0! #16729500 1! #16730000 0! #16730500 1! #16731000 0! #16731500 1! #16732000 0! #16732500 1! #16733000 0! #16733500 1! #16734000 0! #16734500 1! #16735000 0! #16735500 1! #16736000 0! #16736500 1! #16737000 0! #16737500 1! #16738000 0! #16738500 1! #16739000 0! #16739500 1! #16740000 0! #16740500 1! #16741000 0! #16741500 1! #16742000 0! #16742500 1! #16743000 0! #16743500 1! #16744000 0! #16744500 1! #16745000 0! #16745500 1! #16746000 0! #16746500 1! #16747000 0! #16747500 1! #16748000 0! #16748500 1! #16749000 0! #16749500 1! #16750000 0! #16750500 1! #16751000 0! #16751500 1! #16752000 0! #16752500 1! #16753000 0! #16753500 1! #16754000 0! #16754500 1! #16755000 0! #16755500 1! #16756000 0! #16756500 1! #16757000 0! #16757500 1! #16758000 0! #16758500 1! #16759000 0! #16759500 1! #16760000 0! #16760500 1! #16761000 0! #16761500 1! #16762000 0! #16762500 1! #16763000 0! #16763500 1! #16764000 0! #16764500 1! #16765000 0! #16765500 1! #16766000 0! #16766500 1! #16767000 0! #16767500 1! #16768000 0! #16768500 1! #16769000 0! #16769500 1! #16770000 0! #16770500 1! #16771000 0! #16771500 1! #16772000 0! #16772500 1! #16773000 0! #16773500 1! #16774000 0! #16774500 1! #16775000 0! #16775500 1! #16776000 0! #16776500 1! #16777000 0! #16777500 1! #16778000 0! #16778500 1! #16779000 0! #16779500 1! #16780000 0! #16780500 1! #16781000 0! #16781500 1! #16782000 0! #16782500 1! #16783000 0! #16783500 1! #16784000 0! #16784500 1! #16785000 0! #16785500 1! #16786000 0! #16786500 1! #16787000 0! #16787500 1! #16788000 0! #16788500 1! #16789000 0! #16789500 1! #16790000 0! #16790500 1! #16791000 0! #16791500 1! #16792000 0! #16792500 1! #16793000 0! #16793500 1! #16794000 0! #16794500 1! #16795000 0! #16795500 1! #16796000 0! #16796500 1! #16797000 0! #16797500 1! #16798000 0! #16798500 1! #16799000 0! #16799500 1! #16800000 0! #16800500 1! #16801000 0! #16801500 1! #16802000 0! #16802500 1! #16803000 0! #16803500 1! #16804000 0! #16804500 1! #16805000 0! #16805500 1! #16806000 0! #16806500 1! #16807000 0! #16807500 1! #16808000 0! #16808500 1! #16809000 0! #16809500 1! #16810000 0! #16810500 1! #16811000 0! #16811500 1! #16812000 0! #16812500 1! #16813000 0! #16813500 1! #16814000 0! #16814500 1! #16815000 0! #16815500 1! #16816000 0! #16816500 1! #16817000 0! #16817500 1! #16818000 0! #16818500 1! #16819000 0! #16819500 1! #16820000 0! #16820500 1! #16821000 0! #16821500 1! #16822000 0! #16822500 1! #16823000 0! #16823500 1! #16824000 0! #16824500 1! #16825000 0! #16825500 1! #16826000 0! #16826500 1! #16827000 0! #16827500 1! #16828000 0! #16828500 1! #16829000 0! #16829500 1! #16830000 0! #16830500 1! #16831000 0! #16831500 1! #16832000 0! #16832500 1! #16833000 0! #16833500 1! #16834000 0! #16834500 1! #16835000 0! #16835500 1! #16836000 0! #16836500 1! #16837000 0! #16837500 1! #16838000 0! #16838500 1! #16839000 0! #16839500 1! #16840000 0! #16840500 1! #16841000 0! #16841500 1! #16842000 0! #16842500 1! #16843000 0! #16843500 1! #16844000 0! #16844500 1! #16845000 0! #16845500 1! #16846000 0! #16846500 1! #16847000 0! #16847500 1! #16848000 0! #16848500 1! #16849000 0! #16849500 1! #16850000 0! #16850500 1! #16851000 0! #16851500 1! #16852000 0! #16852500 1! #16853000 0! #16853500 1! #16854000 0! #16854500 1! #16855000 0! #16855500 1! #16856000 0! #16856500 1! #16857000 0! #16857500 1! #16858000 0! #16858500 1! #16859000 0! #16859500 1! #16860000 0! #16860500 1! #16861000 0! #16861500 1! #16862000 0! #16862500 1! #16863000 0! #16863500 1! #16864000 0! #16864500 1! #16865000 0! #16865500 1! #16866000 0! #16866500 1! #16867000 0! #16867500 1! #16868000 0! #16868500 1! #16869000 0! #16869500 1! #16870000 0! #16870500 1! #16871000 0! #16871500 1! #16872000 0! #16872500 1! #16873000 0! #16873500 1! #16874000 0! #16874500 1! #16875000 0! #16875500 1! #16876000 0! #16876500 1! #16877000 0! #16877500 1! #16878000 0! #16878500 1! #16879000 0! #16879500 1! #16880000 0! #16880500 1! #16881000 0! #16881500 1! #16882000 0! #16882500 1! #16883000 0! #16883500 1! #16884000 0! #16884500 1! #16885000 0! #16885500 1! #16886000 0! #16886500 1! #16887000 0! #16887500 1! #16888000 0! #16888500 1! #16889000 0! #16889500 1! #16890000 0! #16890500 1! #16891000 0! #16891500 1! #16892000 0! #16892500 1! #16893000 0! #16893500 1! #16894000 0! #16894500 1! #16895000 0! #16895500 1! #16896000 0! #16896500 1! #16897000 0! #16897500 1! #16898000 0! #16898500 1! #16899000 0! #16899500 1! #16900000 0! #16900500 1! #16901000 0! #16901500 1! #16902000 0! #16902500 1! #16903000 0! #16903500 1! #16904000 0! #16904500 1! #16905000 0! #16905500 1! #16906000 0! #16906500 1! #16907000 0! #16907500 1! #16908000 0! #16908500 1! #16909000 0! #16909500 1! #16910000 0! #16910500 1! #16911000 0! #16911500 1! #16912000 0! #16912500 1! #16913000 0! #16913500 1! #16914000 0! #16914500 1! #16915000 0! #16915500 1! #16916000 0! #16916500 1! #16917000 0! #16917500 1! #16918000 0! #16918500 1! #16919000 0! #16919500 1! #16920000 0! #16920500 1! #16921000 0! #16921500 1! #16922000 0! #16922500 1! #16923000 0! #16923500 1! #16924000 0! #16924500 1! #16925000 0! #16925500 1! #16926000 0! #16926500 1! #16927000 0! #16927500 1! #16928000 0! #16928500 1! #16929000 0! #16929500 1! #16930000 0! #16930500 1! #16931000 0! #16931500 1! #16932000 0! #16932500 1! #16933000 0! #16933500 1! #16934000 0! #16934500 1! #16935000 0! #16935500 1! #16936000 0! #16936500 1! #16937000 0! #16937500 1! #16938000 0! #16938500 1! #16939000 0! #16939500 1! #16940000 0! #16940500 1! #16941000 0! #16941500 1! #16942000 0! #16942500 1! #16943000 0! #16943500 1! #16944000 0! #16944500 1! #16945000 0! #16945500 1! #16946000 0! #16946500 1! #16947000 0! #16947500 1! #16948000 0! #16948500 1! #16949000 0! #16949500 1! #16950000 0! #16950500 1! #16951000 0! #16951500 1! #16952000 0! #16952500 1! #16953000 0! #16953500 1! #16954000 0! #16954500 1! #16955000 0! #16955500 1! #16956000 0! #16956500 1! #16957000 0! #16957500 1! #16958000 0! #16958500 1! #16959000 0! #16959500 1! #16960000 0! #16960500 1! #16961000 0! #16961500 1! #16962000 0! #16962500 1! #16963000 0! #16963500 1! #16964000 0! #16964500 1! #16965000 0! #16965500 1! #16966000 0! #16966500 1! #16967000 0! #16967500 1! #16968000 0! #16968500 1! #16969000 0! #16969500 1! #16970000 0! #16970500 1! #16971000 0! #16971500 1! #16972000 0! #16972500 1! #16973000 0! #16973500 1! #16974000 0! #16974500 1! #16975000 0! #16975500 1! #16976000 0! #16976500 1! #16977000 0! #16977500 1! #16978000 0! #16978500 1! #16979000 0! #16979500 1! #16980000 0! #16980500 1! #16981000 0! #16981500 1! #16982000 0! #16982500 1! #16983000 0! #16983500 1! #16984000 0! #16984500 1! #16985000 0! #16985500 1! #16986000 0! #16986500 1! #16987000 0! #16987500 1! #16988000 0! #16988500 1! #16989000 0! #16989500 1! #16990000 0! #16990500 1! #16991000 0! #16991500 1! #16992000 0! #16992500 1! #16993000 0! #16993500 1! #16994000 0! #16994500 1! #16995000 0! #16995500 1! #16996000 0! #16996500 1! #16997000 0! #16997500 1! #16998000 0! #16998500 1! #16999000 0! #16999500 1! #17000000 0! #17000500 1! #17001000 0! #17001500 1! #17002000 0! #17002500 1! #17003000 0! #17003500 1! #17004000 0! #17004500 1! #17005000 0! #17005500 1! #17006000 0! #17006500 1! #17007000 0! #17007500 1! #17008000 0! #17008500 1! #17009000 0! #17009500 1! #17010000 0! #17010500 1! #17011000 0! #17011500 1! #17012000 0! #17012500 1! #17013000 0! #17013500 1! #17014000 0! #17014500 1! #17015000 0! #17015500 1! #17016000 0! #17016500 1! #17017000 0! #17017500 1! #17018000 0! #17018500 1! #17019000 0! #17019500 1! #17020000 0! #17020500 1! #17021000 0! #17021500 1! #17022000 0! #17022500 1! #17023000 0! #17023500 1! #17024000 0! #17024500 1! #17025000 0! #17025500 1! #17026000 0! #17026500 1! #17027000 0! #17027500 1! #17028000 0! #17028500 1! #17029000 0! #17029500 1! #17030000 0! #17030500 1! #17031000 0! #17031500 1! #17032000 0! #17032500 1! #17033000 0! #17033500 1! #17034000 0! #17034500 1! #17035000 0! #17035500 1! #17036000 0! #17036500 1! #17037000 0! #17037500 1! #17038000 0! #17038500 1! #17039000 0! #17039500 1! #17040000 0! #17040500 1! #17041000 0! #17041500 1! #17042000 0! #17042500 1! #17043000 0! #17043500 1! #17044000 0! #17044500 1! #17045000 0! #17045500 1! #17046000 0! #17046500 1! #17047000 0! #17047500 1! #17048000 0! #17048500 1! #17049000 0! #17049500 1! #17050000 0! #17050500 1! #17051000 0! #17051500 1! #17052000 0! #17052500 1! #17053000 0! #17053500 1! #17054000 0! #17054500 1! #17055000 0! #17055500 1! #17056000 0! #17056500 1! #17057000 0! #17057500 1! #17058000 0! #17058500 1! #17059000 0! #17059500 1! #17060000 0! #17060500 1! #17061000 0! #17061500 1! #17062000 0! #17062500 1! #17063000 0! #17063500 1! #17064000 0! #17064500 1! #17065000 0! #17065500 1! #17066000 0! #17066500 1! #17067000 0! #17067500 1! #17068000 0! #17068500 1! #17069000 0! #17069500 1! #17070000 0! #17070500 1! #17071000 0! #17071500 1! #17072000 0! #17072500 1! #17073000 0! #17073500 1! #17074000 0! #17074500 1! #17075000 0! #17075500 1! #17076000 0! #17076500 1! #17077000 0! #17077500 1! #17078000 0! #17078500 1! #17079000 0! #17079500 1! #17080000 0! #17080500 1! #17081000 0! #17081500 1! #17082000 0! #17082500 1! #17083000 0! #17083500 1! #17084000 0! #17084500 1! #17085000 0! #17085500 1! #17086000 0! #17086500 1! #17087000 0! #17087500 1! #17088000 0! #17088500 1! #17089000 0! #17089500 1! #17090000 0! #17090500 1! #17091000 0! #17091500 1! #17092000 0! #17092500 1! #17093000 0! #17093500 1! #17094000 0! #17094500 1! #17095000 0! #17095500 1! #17096000 0! #17096500 1! #17097000 0! #17097500 1! #17098000 0! #17098500 1! #17099000 0! #17099500 1! #17100000 0! #17100500 1! #17101000 0! #17101500 1! #17102000 0! #17102500 1! #17103000 0! #17103500 1! #17104000 0! #17104500 1! #17105000 0! #17105500 1! #17106000 0! #17106500 1! #17107000 0! #17107500 1! #17108000 0! #17108500 1! #17109000 0! #17109500 1! #17110000 0! #17110500 1! #17111000 0! #17111500 1! #17112000 0! #17112500 1! #17113000 0! #17113500 1! #17114000 0! #17114500 1! #17115000 0! #17115500 1! #17116000 0! #17116500 1! #17117000 0! #17117500 1! #17118000 0! #17118500 1! #17119000 0! #17119500 1! #17120000 0! #17120500 1! #17121000 0! #17121500 1! #17122000 0! #17122500 1! #17123000 0! #17123500 1! #17124000 0! #17124500 1! #17125000 0! #17125500 1! #17126000 0! #17126500 1! #17127000 0! #17127500 1! #17128000 0! #17128500 1! #17129000 0! #17129500 1! #17130000 0! #17130500 1! #17131000 0! #17131500 1! #17132000 0! #17132500 1! #17133000 0! #17133500 1! #17134000 0! #17134500 1! #17135000 0! #17135500 1! #17136000 0! #17136500 1! #17137000 0! #17137500 1! #17138000 0! #17138500 1! #17139000 0! #17139500 1! #17140000 0! #17140500 1! #17141000 0! #17141500 1! #17142000 0! #17142500 1! #17143000 0! #17143500 1! #17144000 0! #17144500 1! #17145000 0! #17145500 1! #17146000 0! #17146500 1! #17147000 0! #17147500 1! #17148000 0! #17148500 1! #17149000 0! #17149500 1! #17150000 0! #17150500 1! #17151000 0! #17151500 1! #17152000 0! #17152500 1! #17153000 0! #17153500 1! #17154000 0! #17154500 1! #17155000 0! #17155500 1! #17156000 0! #17156500 1! #17157000 0! #17157500 1! #17158000 0! #17158500 1! #17159000 0! #17159500 1! #17160000 0! #17160500 1! #17161000 0! #17161500 1! #17162000 0! #17162500 1! #17163000 0! #17163500 1! #17164000 0! #17164500 1! #17165000 0! #17165500 1! #17166000 0! #17166500 1! #17167000 0! #17167500 1! #17168000 0! #17168500 1! #17169000 0! #17169500 1! #17170000 0! #17170500 1! #17171000 0! #17171500 1! #17172000 0! #17172500 1! #17173000 0! #17173500 1! #17174000 0! #17174500 1! #17175000 0! #17175500 1! #17176000 0! #17176500 1! #17177000 0! #17177500 1! #17178000 0! #17178500 1! #17179000 0! #17179500 1! #17180000 0! #17180500 1! #17181000 0! #17181500 1! #17182000 0! #17182500 1! #17183000 0! #17183500 1! #17184000 0! #17184500 1! #17185000 0! #17185500 1! #17186000 0! #17186500 1! #17187000 0! #17187500 1! #17188000 0! #17188500 1! #17189000 0! #17189500 1! #17190000 0! #17190500 1! #17191000 0! #17191500 1! #17192000 0! #17192500 1! #17193000 0! #17193500 1! #17194000 0! #17194500 1! #17195000 0! #17195500 1! #17196000 0! #17196500 1! #17197000 0! #17197500 1! #17198000 0! #17198500 1! #17199000 0! #17199500 1! #17200000 0! #17200500 1! #17201000 0! #17201500 1! #17202000 0! #17202500 1! #17203000 0! #17203500 1! #17204000 0! #17204500 1! #17205000 0! #17205500 1! #17206000 0! #17206500 1! #17207000 0! #17207500 1! #17208000 0! #17208500 1! #17209000 0! #17209500 1! #17210000 0! #17210500 1! #17211000 0! #17211500 1! #17212000 0! #17212500 1! #17213000 0! #17213500 1! #17214000 0! #17214500 1! #17215000 0! #17215500 1! #17216000 0! #17216500 1! #17217000 0! #17217500 1! #17218000 0! #17218500 1! #17219000 0! #17219500 1! #17220000 0! #17220500 1! #17221000 0! #17221500 1! #17222000 0! #17222500 1! #17223000 0! #17223500 1! #17224000 0! #17224500 1! #17225000 0! #17225500 1! #17226000 0! #17226500 1! #17227000 0! #17227500 1! #17228000 0! #17228500 1! #17229000 0! #17229500 1! #17230000 0! #17230500 1! #17231000 0! #17231500 1! #17232000 0! #17232500 1! #17233000 0! #17233500 1! #17234000 0! #17234500 1! #17235000 0! #17235500 1! #17236000 0! #17236500 1! #17237000 0! #17237500 1! #17238000 0! #17238500 1! #17239000 0! #17239500 1! #17240000 0! #17240500 1! #17241000 0! #17241500 1! #17242000 0! #17242500 1! #17243000 0! #17243500 1! #17244000 0! #17244500 1! #17245000 0! #17245500 1! #17246000 0! #17246500 1! #17247000 0! #17247500 1! #17248000 0! #17248500 1! #17249000 0! #17249500 1! #17250000 0! #17250500 1! #17251000 0! #17251500 1! #17252000 0! #17252500 1! #17253000 0! #17253500 1! #17254000 0! #17254500 1! #17255000 0! #17255500 1! #17256000 0! #17256500 1! #17257000 0! #17257500 1! #17258000 0! #17258500 1! #17259000 0! #17259500 1! #17260000 0! #17260500 1! #17261000 0! #17261500 1! #17262000 0! #17262500 1! #17263000 0! #17263500 1! #17264000 0! #17264500 1! #17265000 0! #17265500 1! #17266000 0! #17266500 1! #17267000 0! #17267500 1! #17268000 0! #17268500 1! #17269000 0! #17269500 1! #17270000 0! #17270500 1! #17271000 0! #17271500 1! #17272000 0! #17272500 1! #17273000 0! #17273500 1! #17274000 0! #17274500 1! #17275000 0! #17275500 1! #17276000 0! #17276500 1! #17277000 0! #17277500 1! #17278000 0! #17278500 1! #17279000 0! #17279500 1! #17280000 0! #17280500 1! #17281000 0! #17281500 1! #17282000 0! #17282500 1! #17283000 0! #17283500 1! #17284000 0! #17284500 1! #17285000 0! #17285500 1! #17286000 0! #17286500 1! #17287000 0! #17287500 1! #17288000 0! #17288500 1! #17289000 0! #17289500 1! #17290000 0! #17290500 1! #17291000 0! #17291500 1! #17292000 0! #17292500 1! #17293000 0! #17293500 1! #17294000 0! #17294500 1! #17295000 0! #17295500 1! #17296000 0! #17296500 1! #17297000 0! #17297500 1! #17298000 0! #17298500 1! #17299000 0! #17299500 1! #17300000 0! #17300500 1! #17301000 0! #17301500 1! #17302000 0! #17302500 1! #17303000 0! #17303500 1! #17304000 0! #17304500 1! #17305000 0! #17305500 1! #17306000 0! #17306500 1! #17307000 0! #17307500 1! #17308000 0! #17308500 1! #17309000 0! #17309500 1! #17310000 0! #17310500 1! #17311000 0! #17311500 1! #17312000 0! #17312500 1! #17313000 0! #17313500 1! #17314000 0! #17314500 1! #17315000 0! #17315500 1! #17316000 0! #17316500 1! #17317000 0! #17317500 1! #17318000 0! #17318500 1! #17319000 0! #17319500 1! #17320000 0! #17320500 1! #17321000 0! #17321500 1! #17322000 0! #17322500 1! #17323000 0! #17323500 1! #17324000 0! #17324500 1! #17325000 0! #17325500 1! #17326000 0! #17326500 1! #17327000 0! #17327500 1! #17328000 0! #17328500 1! #17329000 0! #17329500 1! #17330000 0! #17330500 1! #17331000 0! #17331500 1! #17332000 0! #17332500 1! #17333000 0! #17333500 1! #17334000 0! #17334500 1! #17335000 0! #17335500 1! #17336000 0! #17336500 1! #17337000 0! #17337500 1! #17338000 0! #17338500 1! #17339000 0! #17339500 1! #17340000 0! #17340500 1! #17341000 0! #17341500 1! #17342000 0! #17342500 1! #17343000 0! #17343500 1! #17344000 0! #17344500 1! #17345000 0! #17345500 1! #17346000 0! #17346500 1! #17347000 0! #17347500 1! #17348000 0! #17348500 1! #17349000 0! #17349500 1! #17350000 0! #17350500 1! #17351000 0! #17351500 1! #17352000 0! #17352500 1! #17353000 0! #17353500 1! #17354000 0! #17354500 1! #17355000 0! #17355500 1! #17356000 0! #17356500 1! #17357000 0! #17357500 1! #17358000 0! #17358500 1! #17359000 0! #17359500 1! #17360000 0! #17360500 1! #17361000 0! #17361500 1! #17362000 0! #17362500 1! #17363000 0! #17363500 1! #17364000 0! #17364500 1! #17365000 0! #17365500 1! #17366000 0! #17366500 1! #17367000 0! #17367500 1! #17368000 0! #17368500 1! #17369000 0! #17369500 1! #17370000 0! #17370500 1! #17371000 0! #17371500 1! #17372000 0! #17372500 1! #17373000 0! #17373500 1! #17374000 0! #17374500 1! #17375000 0! #17375500 1! #17376000 0! #17376500 1! #17377000 0! #17377500 1! #17378000 0! #17378500 1! #17379000 0! #17379500 1! #17380000 0! #17380500 1! #17381000 0! #17381500 1! #17382000 0! #17382500 1! #17383000 0! #17383500 1! #17384000 0! #17384500 1! #17385000 0! #17385500 1! #17386000 0! #17386500 1! #17387000 0! #17387500 1! #17388000 0! #17388500 1! #17389000 0! #17389500 1! #17390000 0! #17390500 1! #17391000 0! #17391500 1! #17392000 0! #17392500 1! #17393000 0! #17393500 1! #17394000 0! #17394500 1! #17395000 0! #17395500 1! #17396000 0! #17396500 1! #17397000 0! #17397500 1! #17398000 0! #17398500 1! #17399000 0! #17399500 1! #17400000 0! #17400500 1! #17401000 0! #17401500 1! #17402000 0! #17402500 1! #17403000 0! #17403500 1! #17404000 0! #17404500 1! #17405000 0! #17405500 1! #17406000 0! #17406500 1! #17407000 0! #17407500 1! #17408000 0! #17408500 1! #17409000 0! #17409500 1! #17410000 0! #17410500 1! #17411000 0! #17411500 1! #17412000 0! #17412500 1! #17413000 0! #17413500 1! #17414000 0! #17414500 1! #17415000 0! #17415500 1! #17416000 0! #17416500 1! #17417000 0! #17417500 1! #17418000 0! #17418500 1! #17419000 0! #17419500 1! #17420000 0! #17420500 1! #17421000 0! #17421500 1! #17422000 0! #17422500 1! #17423000 0! #17423500 1! #17424000 0! #17424500 1! #17425000 0! #17425500 1! #17426000 0! #17426500 1! #17427000 0! #17427500 1! #17428000 0! #17428500 1! #17429000 0! #17429500 1! #17430000 0! #17430500 1! #17431000 0! #17431500 1! #17432000 0! #17432500 1! #17433000 0! #17433500 1! #17434000 0! #17434500 1! #17435000 0! #17435500 1! #17436000 0! #17436500 1! #17437000 0! #17437500 1! #17438000 0! #17438500 1! #17439000 0! #17439500 1! #17440000 0! #17440500 1! #17441000 0! #17441500 1! #17442000 0! #17442500 1! #17443000 0! #17443500 1! #17444000 0! #17444500 1! #17445000 0! #17445500 1! #17446000 0! #17446500 1! #17447000 0! #17447500 1! #17448000 0! #17448500 1! #17449000 0! #17449500 1! #17450000 0! #17450500 1! #17451000 0! #17451500 1! #17452000 0! #17452500 1! #17453000 0! #17453500 1! #17454000 0! #17454500 1! #17455000 0! #17455500 1! #17456000 0! #17456500 1! #17457000 0! #17457500 1! #17458000 0! #17458500 1! #17459000 0! #17459500 1! #17460000 0! #17460500 1! #17461000 0! #17461500 1! #17462000 0! #17462500 1! #17463000 0! #17463500 1! #17464000 0! #17464500 1! #17465000 0! #17465500 1! #17466000 0! #17466500 1! #17467000 0! #17467500 1! #17468000 0! #17468500 1! #17469000 0! #17469500 1! #17470000 0! #17470500 1! #17471000 0! #17471500 1! #17472000 0! #17472500 1! #17473000 0! #17473500 1! #17474000 0! #17474500 1! #17475000 0! #17475500 1! #17476000 0! #17476500 1! #17477000 0! #17477500 1! #17478000 0! #17478500 1! #17479000 0! #17479500 1! #17480000 0! #17480500 1! #17481000 0! #17481500 1! #17482000 0! #17482500 1! #17483000 0! #17483500 1! #17484000 0! #17484500 1! #17485000 0! #17485500 1! #17486000 0! #17486500 1! #17487000 0! #17487500 1! #17488000 0! #17488500 1! #17489000 0! #17489500 1! #17490000 0! #17490500 1! #17491000 0! #17491500 1! #17492000 0! #17492500 1! #17493000 0! #17493500 1! #17494000 0! #17494500 1! #17495000 0! #17495500 1! #17496000 0! #17496500 1! #17497000 0! #17497500 1! #17498000 0! #17498500 1! #17499000 0! #17499500 1! #17500000 0! #17500500 1! #17501000 0! #17501500 1! #17502000 0! #17502500 1! #17503000 0! #17503500 1! #17504000 0! #17504500 1! #17505000 0! #17505500 1! #17506000 0! #17506500 1! #17507000 0! #17507500 1! #17508000 0! #17508500 1! #17509000 0! #17509500 1! #17510000 0! #17510500 1! #17511000 0! #17511500 1! #17512000 0! #17512500 1! #17513000 0! #17513500 1! #17514000 0! #17514500 1! #17515000 0! #17515500 1! #17516000 0! #17516500 1! #17517000 0! #17517500 1! #17518000 0! #17518500 1! #17519000 0! #17519500 1! #17520000 0! #17520500 1! #17521000 0! #17521500 1! #17522000 0! #17522500 1! #17523000 0! #17523500 1! #17524000 0! #17524500 1! #17525000 0! #17525500 1! #17526000 0! #17526500 1! #17527000 0! #17527500 1! #17528000 0! #17528500 1! #17529000 0! #17529500 1! #17530000 0! #17530500 1! #17531000 0! #17531500 1! #17532000 0! #17532500 1! #17533000 0! #17533500 1! #17534000 0! #17534500 1! #17535000 0! #17535500 1! #17536000 0! #17536500 1! #17537000 0! #17537500 1! #17538000 0! #17538500 1! #17539000 0! #17539500 1! #17540000 0! #17540500 1! #17541000 0! #17541500 1! #17542000 0! #17542500 1! #17543000 0! #17543500 1! #17544000 0! #17544500 1! #17545000 0! #17545500 1! #17546000 0! #17546500 1! #17547000 0! #17547500 1! #17548000 0! #17548500 1! #17549000 0! #17549500 1! #17550000 0! #17550500 1! #17551000 0! #17551500 1! #17552000 0! #17552500 1! #17553000 0! #17553500 1! #17554000 0! #17554500 1! #17555000 0! #17555500 1! #17556000 0! #17556500 1! #17557000 0! #17557500 1! #17558000 0! #17558500 1! #17559000 0! #17559500 1! #17560000 0! #17560500 1! #17561000 0! #17561500 1! #17562000 0! #17562500 1! #17563000 0! #17563500 1! #17564000 0! #17564500 1! #17565000 0! #17565500 1! #17566000 0! #17566500 1! #17567000 0! #17567500 1! #17568000 0! #17568500 1! #17569000 0! #17569500 1! #17570000 0! #17570500 1! #17571000 0! #17571500 1! #17572000 0! #17572500 1! #17573000 0! #17573500 1! #17574000 0! #17574500 1! #17575000 0! #17575500 1! #17576000 0! #17576500 1! #17577000 0! #17577500 1! #17578000 0! #17578500 1! #17579000 0! #17579500 1! #17580000 0! #17580500 1! #17581000 0! #17581500 1! #17582000 0! #17582500 1! #17583000 0! #17583500 1! #17584000 0! #17584500 1! #17585000 0! #17585500 1! #17586000 0! #17586500 1! #17587000 0! #17587500 1! #17588000 0! #17588500 1! #17589000 0! #17589500 1! #17590000 0! #17590500 1! #17591000 0! #17591500 1! #17592000 0! #17592500 1! #17593000 0! #17593500 1! #17594000 0! #17594500 1! #17595000 0! #17595500 1! #17596000 0! #17596500 1! #17597000 0! #17597500 1! #17598000 0! #17598500 1! #17599000 0! #17599500 1! #17600000 0! #17600500 1! #17601000 0! #17601500 1! #17602000 0! #17602500 1! #17603000 0! #17603500 1! #17604000 0! #17604500 1! #17605000 0! #17605500 1! #17606000 0! #17606500 1! #17607000 0! #17607500 1! #17608000 0! #17608500 1! #17609000 0! #17609500 1! #17610000 0! #17610500 1! #17611000 0! #17611500 1! #17612000 0! #17612500 1! #17613000 0! #17613500 1! #17614000 0! #17614500 1! #17615000 0! #17615500 1! #17616000 0! #17616500 1! #17617000 0! #17617500 1! #17618000 0! #17618500 1! #17619000 0! #17619500 1! #17620000 0! #17620500 1! #17621000 0! #17621500 1! #17622000 0! #17622500 1! #17623000 0! #17623500 1! #17624000 0! #17624500 1! #17625000 0! #17625500 1! #17626000 0! #17626500 1! #17627000 0! #17627500 1! #17628000 0! #17628500 1! #17629000 0! #17629500 1! #17630000 0! #17630500 1! #17631000 0! #17631500 1! #17632000 0! #17632500 1! #17633000 0! #17633500 1! #17634000 0! #17634500 1! #17635000 0! #17635500 1! #17636000 0! #17636500 1! #17637000 0! #17637500 1! #17638000 0! #17638500 1! #17639000 0! #17639500 1! #17640000 0! #17640500 1! #17641000 0! #17641500 1! #17642000 0! #17642500 1! #17643000 0! #17643500 1! #17644000 0! #17644500 1! #17645000 0! #17645500 1! #17646000 0! #17646500 1! #17647000 0! #17647500 1! #17648000 0! #17648500 1! #17649000 0! #17649500 1! #17650000 0! #17650500 1! #17651000 0! #17651500 1! #17652000 0! #17652500 1! #17653000 0! #17653500 1! #17654000 0! #17654500 1! #17655000 0! #17655500 1! #17656000 0! #17656500 1! #17657000 0! #17657500 1! #17658000 0! #17658500 1! #17659000 0! #17659500 1! #17660000 0! #17660500 1! #17661000 0! #17661500 1! #17662000 0! #17662500 1! #17663000 0! #17663500 1! #17664000 0! #17664500 1! #17665000 0! #17665500 1! #17666000 0! #17666500 1! #17667000 0! #17667500 1! #17668000 0! #17668500 1! #17669000 0! #17669500 1! #17670000 0! #17670500 1! #17671000 0! #17671500 1! #17672000 0! #17672500 1! #17673000 0! #17673500 1! #17674000 0! #17674500 1! #17675000 0! #17675500 1! #17676000 0! #17676500 1! #17677000 0! #17677500 1! #17678000 0! #17678500 1! #17679000 0! #17679500 1! #17680000 0! #17680500 1! #17681000 0! #17681500 1! #17682000 0! #17682500 1! #17683000 0! #17683500 1! #17684000 0! #17684500 1! #17685000 0! #17685500 1! #17686000 0! #17686500 1! #17687000 0! #17687500 1! #17688000 0! #17688500 1! #17689000 0! #17689500 1! #17690000 0! #17690500 1! #17691000 0! #17691500 1! #17692000 0! #17692500 1! #17693000 0! #17693500 1! #17694000 0! #17694500 1! #17695000 0! #17695500 1! #17696000 0! #17696500 1! #17697000 0! #17697500 1! #17698000 0! #17698500 1! #17699000 0! #17699500 1! #17700000 0! #17700500 1! #17701000 0! #17701500 1! #17702000 0! #17702500 1! #17703000 0! #17703500 1! #17704000 0! #17704500 1! #17705000 0! #17705500 1! #17706000 0! #17706500 1! #17707000 0! #17707500 1! #17708000 0! #17708500 1! #17709000 0! #17709500 1! #17710000 0! #17710500 1! #17711000 0! #17711500 1! #17712000 0! #17712500 1! #17713000 0! #17713500 1! #17714000 0! #17714500 1! #17715000 0! #17715500 1! #17716000 0! #17716500 1! #17717000 0! #17717500 1! #17718000 0! #17718500 1! #17719000 0! #17719500 1! #17720000 0! #17720500 1! #17721000 0! #17721500 1! #17722000 0! #17722500 1! #17723000 0! #17723500 1! #17724000 0! #17724500 1! #17725000 0! #17725500 1! #17726000 0! #17726500 1! #17727000 0! #17727500 1! #17728000 0! #17728500 1! #17729000 0! #17729500 1! #17730000 0! #17730500 1! #17731000 0! #17731500 1! #17732000 0! #17732500 1! #17733000 0! #17733500 1! #17734000 0! #17734500 1! #17735000 0! #17735500 1! #17736000 0! #17736500 1! #17737000 0! #17737500 1! #17738000 0! #17738500 1! #17739000 0! #17739500 1! #17740000 0! #17740500 1! #17741000 0! #17741500 1! #17742000 0! #17742500 1! #17743000 0! #17743500 1! #17744000 0! #17744500 1! #17745000 0! #17745500 1! #17746000 0! #17746500 1! #17747000 0! #17747500 1! #17748000 0! #17748500 1! #17749000 0! #17749500 1! #17750000 0! #17750500 1! #17751000 0! #17751500 1! #17752000 0! #17752500 1! #17753000 0! #17753500 1! #17754000 0! #17754500 1! #17755000 0! #17755500 1! #17756000 0! #17756500 1! #17757000 0! #17757500 1! #17758000 0! #17758500 1! #17759000 0! #17759500 1! #17760000 0! #17760500 1! #17761000 0! #17761500 1! #17762000 0! #17762500 1! #17763000 0! #17763500 1! #17764000 0! #17764500 1! #17765000 0! #17765500 1! #17766000 0! #17766500 1! #17767000 0! #17767500 1! #17768000 0! #17768500 1! #17769000 0! #17769500 1! #17770000 0! #17770500 1! #17771000 0! #17771500 1! #17772000 0! #17772500 1! #17773000 0! #17773500 1! #17774000 0! #17774500 1! #17775000 0! #17775500 1! #17776000 0! #17776500 1! #17777000 0! #17777500 1! #17778000 0! #17778500 1! #17779000 0! #17779500 1! #17780000 0! #17780500 1! #17781000 0! #17781500 1! #17782000 0! #17782500 1! #17783000 0! #17783500 1! #17784000 0! #17784500 1! #17785000 0! #17785500 1! #17786000 0! #17786500 1! #17787000 0! #17787500 1! #17788000 0! #17788500 1! #17789000 0! #17789500 1! #17790000 0! #17790500 1! #17791000 0! #17791500 1! #17792000 0! #17792500 1! #17793000 0! #17793500 1! #17794000 0! #17794500 1! #17795000 0! #17795500 1! #17796000 0! #17796500 1! #17797000 0! #17797500 1! #17798000 0! #17798500 1! #17799000 0! #17799500 1! #17800000 0! #17800500 1! #17801000 0! #17801500 1! #17802000 0! #17802500 1! #17803000 0! #17803500 1! #17804000 0! #17804500 1! #17805000 0! #17805500 1! #17806000 0! #17806500 1! #17807000 0! #17807500 1! #17808000 0! #17808500 1! #17809000 0! #17809500 1! #17810000 0! #17810500 1! #17811000 0! #17811500 1! #17812000 0! #17812500 1! #17813000 0! #17813500 1! #17814000 0! #17814500 1! #17815000 0! #17815500 1! #17816000 0! #17816500 1! #17817000 0! #17817500 1! #17818000 0! #17818500 1! #17819000 0! #17819500 1! #17820000 0! #17820500 1! #17821000 0! #17821500 1! #17822000 0! #17822500 1! #17823000 0! #17823500 1! #17824000 0! #17824500 1! #17825000 0! #17825500 1! #17826000 0! #17826500 1! #17827000 0! #17827500 1! #17828000 0! #17828500 1! #17829000 0! #17829500 1! #17830000 0! #17830500 1! #17831000 0! #17831500 1! #17832000 0! #17832500 1! #17833000 0! #17833500 1! #17834000 0! #17834500 1! #17835000 0! #17835500 1! #17836000 0! #17836500 1! #17837000 0! #17837500 1! #17838000 0! #17838500 1! #17839000 0! #17839500 1! #17840000 0! #17840500 1! #17841000 0! #17841500 1! #17842000 0! #17842500 1! #17843000 0! #17843500 1! #17844000 0! #17844500 1! #17845000 0! #17845500 1! #17846000 0! #17846500 1! #17847000 0! #17847500 1! #17848000 0! #17848500 1! #17849000 0! #17849500 1! #17850000 0! #17850500 1! #17851000 0! #17851500 1! #17852000 0! #17852500 1! #17853000 0! #17853500 1! #17854000 0! #17854500 1! #17855000 0! #17855500 1! #17856000 0! #17856500 1! #17857000 0! #17857500 1! #17858000 0! #17858500 1! #17859000 0! #17859500 1! #17860000 0! #17860500 1! #17861000 0! #17861500 1! #17862000 0! #17862500 1! #17863000 0! #17863500 1! #17864000 0! #17864500 1! #17865000 0! #17865500 1! #17866000 0! #17866500 1! #17867000 0! #17867500 1! #17868000 0! #17868500 1! #17869000 0! #17869500 1! #17870000 0! #17870500 1! #17871000 0! #17871500 1! #17872000 0! #17872500 1! #17873000 0! #17873500 1! #17874000 0! #17874500 1! #17875000 0! #17875500 1! #17876000 0! #17876500 1! #17877000 0! #17877500 1! #17878000 0! #17878500 1! #17879000 0! #17879500 1! #17880000 0! #17880500 1! #17881000 0! #17881500 1! #17882000 0! #17882500 1! #17883000 0! #17883500 1! #17884000 0! #17884500 1! #17885000 0! #17885500 1! #17886000 0! #17886500 1! #17887000 0! #17887500 1! #17888000 0! #17888500 1! #17889000 0! #17889500 1! #17890000 0! #17890500 1! #17891000 0! #17891500 1! #17892000 0! #17892500 1! #17893000 0! #17893500 1! #17894000 0! #17894500 1! #17895000 0! #17895500 1! #17896000 0! #17896500 1! #17897000 0! #17897500 1! #17898000 0! #17898500 1! #17899000 0! #17899500 1! #17900000 0! #17900500 1! #17901000 0! #17901500 1! #17902000 0! #17902500 1! #17903000 0! #17903500 1! #17904000 0! #17904500 1! #17905000 0! #17905500 1! #17906000 0! #17906500 1! #17907000 0! #17907500 1! #17908000 0! #17908500 1! #17909000 0! #17909500 1! #17910000 0! #17910500 1! #17911000 0! #17911500 1! #17912000 0! #17912500 1! #17913000 0! #17913500 1! #17914000 0! #17914500 1! #17915000 0! #17915500 1! #17916000 0! #17916500 1! #17917000 0! #17917500 1! #17918000 0! #17918500 1! #17919000 0! #17919500 1! #17920000 0! #17920500 1! #17921000 0! #17921500 1! #17922000 0! #17922500 1! #17923000 0! #17923500 1! #17924000 0! #17924500 1! #17925000 0! #17925500 1! #17926000 0! #17926500 1! #17927000 0! #17927500 1! #17928000 0! #17928500 1! #17929000 0! #17929500 1! #17930000 0! #17930500 1! #17931000 0! #17931500 1! #17932000 0! #17932500 1! #17933000 0! #17933500 1! #17934000 0! #17934500 1! #17935000 0! #17935500 1! #17936000 0! #17936500 1! #17937000 0! #17937500 1! #17938000 0! #17938500 1! #17939000 0! #17939500 1! #17940000 0! #17940500 1! #17941000 0! #17941500 1! #17942000 0! #17942500 1! #17943000 0! #17943500 1! #17944000 0! #17944500 1! #17945000 0! #17945500 1! #17946000 0! #17946500 1! #17947000 0! #17947500 1! #17948000 0! #17948500 1! #17949000 0! #17949500 1! #17950000 0! #17950500 1! #17951000 0! #17951500 1! #17952000 0! #17952500 1! #17953000 0! #17953500 1! #17954000 0! #17954500 1! #17955000 0! #17955500 1! #17956000 0! #17956500 1! #17957000 0! #17957500 1! #17958000 0! #17958500 1! #17959000 0! #17959500 1! #17960000 0! #17960500 1! #17961000 0! #17961500 1! #17962000 0! #17962500 1! #17963000 0! #17963500 1! #17964000 0! #17964500 1! #17965000 0! #17965500 1! #17966000 0! #17966500 1! #17967000 0! #17967500 1! #17968000 0! #17968500 1! #17969000 0! #17969500 1! #17970000 0! #17970500 1! #17971000 0! #17971500 1! #17972000 0! #17972500 1! #17973000 0! #17973500 1! #17974000 0! #17974500 1! #17975000 0! #17975500 1! #17976000 0! #17976500 1! #17977000 0! #17977500 1! #17978000 0! #17978500 1! #17979000 0! #17979500 1! #17980000 0! #17980500 1! #17981000 0! #17981500 1! #17982000 0! #17982500 1! #17983000 0! #17983500 1! #17984000 0! #17984500 1! #17985000 0! #17985500 1! #17986000 0! #17986500 1! #17987000 0! #17987500 1! #17988000 0! #17988500 1! #17989000 0! #17989500 1! #17990000 0! #17990500 1! #17991000 0! #17991500 1! #17992000 0! #17992500 1! #17993000 0! #17993500 1! #17994000 0! #17994500 1! #17995000 0! #17995500 1! #17996000 0! #17996500 1! #17997000 0! #17997500 1! #17998000 0! #17998500 1! #17999000 0! #17999500 1! #18000000 0! #18000500 1! #18001000 0! #18001500 1! #18002000 0! #18002500 1! #18003000 0! #18003500 1! #18004000 0! #18004500 1! #18005000 0! #18005500 1! #18006000 0! #18006500 1! #18007000 0! #18007500 1! #18008000 0! #18008500 1! #18009000 0! #18009500 1! #18010000 0! #18010500 1! #18011000 0! #18011500 1! #18012000 0! #18012500 1! #18013000 0! #18013500 1! #18014000 0! #18014500 1! #18015000 0! #18015500 1! #18016000 0! #18016500 1! #18017000 0! #18017500 1! #18018000 0! #18018500 1! #18019000 0! #18019500 1! #18020000 0! #18020500 1! #18021000 0! #18021500 1! #18022000 0! #18022500 1! #18023000 0! #18023500 1! #18024000 0! #18024500 1! #18025000 0! #18025500 1! #18026000 0! #18026500 1! #18027000 0! #18027500 1! #18028000 0! #18028500 1! #18029000 0! #18029500 1! #18030000 0! #18030500 1! #18031000 0! #18031500 1! #18032000 0! #18032500 1! #18033000 0! #18033500 1! #18034000 0! #18034500 1! #18035000 0! #18035500 1! #18036000 0! #18036500 1! #18037000 0! #18037500 1! #18038000 0! #18038500 1! #18039000 0! #18039500 1! #18040000 0! #18040500 1! #18041000 0! #18041500 1! #18042000 0! #18042500 1! #18043000 0! #18043500 1! #18044000 0! #18044500 1! #18045000 0! #18045500 1! #18046000 0! #18046500 1! #18047000 0! #18047500 1! #18048000 0! #18048500 1! #18049000 0! #18049500 1! #18050000 0! #18050500 1! #18051000 0! #18051500 1! #18052000 0! #18052500 1! #18053000 0! #18053500 1! #18054000 0! #18054500 1! #18055000 0! #18055500 1! #18056000 0! #18056500 1! #18057000 0! #18057500 1! #18058000 0! #18058500 1! #18059000 0! #18059500 1! #18060000 0! #18060500 1! #18061000 0! #18061500 1! #18062000 0! #18062500 1! #18063000 0! #18063500 1! #18064000 0! #18064500 1! #18065000 0! #18065500 1! #18066000 0! #18066500 1! #18067000 0! #18067500 1! #18068000 0! #18068500 1! #18069000 0! #18069500 1! #18070000 0! #18070500 1! #18071000 0! #18071500 1! #18072000 0! #18072500 1! #18073000 0! #18073500 1! #18074000 0! #18074500 1! #18075000 0! #18075500 1! #18076000 0! #18076500 1! #18077000 0! #18077500 1! #18078000 0! #18078500 1! #18079000 0! #18079500 1! #18080000 0! #18080500 1! #18081000 0! #18081500 1! #18082000 0! #18082500 1! #18083000 0! #18083500 1! #18084000 0! #18084500 1! #18085000 0! #18085500 1! #18086000 0! #18086500 1! #18087000 0! #18087500 1! #18088000 0! #18088500 1! #18089000 0! #18089500 1! #18090000 0! #18090500 1! #18091000 0! #18091500 1! #18092000 0! #18092500 1! #18093000 0! #18093500 1! #18094000 0! #18094500 1! #18095000 0! #18095500 1! #18096000 0! #18096500 1! #18097000 0! #18097500 1! #18098000 0! #18098500 1! #18099000 0! #18099500 1! #18100000 0! #18100500 1! #18101000 0! #18101500 1! #18102000 0! #18102500 1! #18103000 0! #18103500 1! #18104000 0! #18104500 1! #18105000 0! #18105500 1! #18106000 0! #18106500 1! #18107000 0! #18107500 1! #18108000 0! #18108500 1! #18109000 0! #18109500 1! #18110000 0! #18110500 1! #18111000 0! #18111500 1! #18112000 0! #18112500 1! #18113000 0! #18113500 1! #18114000 0! #18114500 1! #18115000 0! #18115500 1! #18116000 0! #18116500 1! #18117000 0! #18117500 1! #18118000 0! #18118500 1! #18119000 0! #18119500 1! #18120000 0! #18120500 1! #18121000 0! #18121500 1! #18122000 0! #18122500 1! #18123000 0! #18123500 1! #18124000 0! #18124500 1! #18125000 0! #18125500 1! #18126000 0! #18126500 1! #18127000 0! #18127500 1! #18128000 0! #18128500 1! #18129000 0! #18129500 1! #18130000 0! #18130500 1! #18131000 0! #18131500 1! #18132000 0! #18132500 1! #18133000 0! #18133500 1! #18134000 0! #18134500 1! #18135000 0! #18135500 1! #18136000 0! #18136500 1! #18137000 0! #18137500 1! #18138000 0! #18138500 1! #18139000 0! #18139500 1! #18140000 0! #18140500 1! #18141000 0! #18141500 1! #18142000 0! #18142500 1! #18143000 0! #18143500 1! #18144000 0! #18144500 1! #18145000 0! #18145500 1! #18146000 0! #18146500 1! #18147000 0! #18147500 1! #18148000 0! #18148500 1! #18149000 0! #18149500 1! #18150000 0! #18150500 1! #18151000 0! #18151500 1! #18152000 0! #18152500 1! #18153000 0! #18153500 1! #18154000 0! #18154500 1! #18155000 0! #18155500 1! #18156000 0! #18156500 1! #18157000 0! #18157500 1! #18158000 0! #18158500 1! #18159000 0! #18159500 1! #18160000 0! #18160500 1! #18161000 0! #18161500 1! #18162000 0! #18162500 1! #18163000 0! #18163500 1! #18164000 0! #18164500 1! #18165000 0! #18165500 1! #18166000 0! #18166500 1! #18167000 0! #18167500 1! #18168000 0! #18168500 1! #18169000 0! #18169500 1! #18170000 0! #18170500 1! #18171000 0! #18171500 1! #18172000 0! #18172500 1! #18173000 0! #18173500 1! #18174000 0! #18174500 1! #18175000 0! #18175500 1! #18176000 0! #18176500 1! #18177000 0! #18177500 1! #18178000 0! #18178500 1! #18179000 0! #18179500 1! #18180000 0! #18180500 1! #18181000 0! #18181500 1! #18182000 0! #18182500 1! #18183000 0! #18183500 1! #18184000 0! #18184500 1! #18185000 0! #18185500 1! #18186000 0! #18186500 1! #18187000 0! #18187500 1! #18188000 0! #18188500 1! #18189000 0! #18189500 1! #18190000 0! #18190500 1! #18191000 0! #18191500 1! #18192000 0! #18192500 1! #18193000 0! #18193500 1! #18194000 0! #18194500 1! #18195000 0! #18195500 1! #18196000 0! #18196500 1! #18197000 0! #18197500 1! #18198000 0! #18198500 1! #18199000 0! #18199500 1! #18200000 0! #18200500 1! #18201000 0! #18201500 1! #18202000 0! #18202500 1! #18203000 0! #18203500 1! #18204000 0! #18204500 1! #18205000 0! #18205500 1! #18206000 0! #18206500 1! #18207000 0! #18207500 1! #18208000 0! #18208500 1! #18209000 0! #18209500 1! #18210000 0! #18210500 1! #18211000 0! #18211500 1! #18212000 0! #18212500 1! #18213000 0! #18213500 1! #18214000 0! #18214500 1! #18215000 0! #18215500 1! #18216000 0! #18216500 1! #18217000 0! #18217500 1! #18218000 0! #18218500 1! #18219000 0! #18219500 1! #18220000 0! #18220500 1! #18221000 0! #18221500 1! #18222000 0! #18222500 1! #18223000 0! #18223500 1! #18224000 0! #18224500 1! #18225000 0! #18225500 1! #18226000 0! #18226500 1! #18227000 0! #18227500 1! #18228000 0! #18228500 1! #18229000 0! #18229500 1! #18230000 0! #18230500 1! #18231000 0! #18231500 1! #18232000 0! #18232500 1! #18233000 0! #18233500 1! #18234000 0! #18234500 1! #18235000 0! #18235500 1! #18236000 0! #18236500 1! #18237000 0! #18237500 1! #18238000 0! #18238500 1! #18239000 0! #18239500 1! #18240000 0! #18240500 1! #18241000 0! #18241500 1! #18242000 0! #18242500 1! #18243000 0! #18243500 1! #18244000 0! #18244500 1! #18245000 0! #18245500 1! #18246000 0! #18246500 1! #18247000 0! #18247500 1! #18248000 0! #18248500 1! #18249000 0! #18249500 1! #18250000 0! #18250500 1! #18251000 0! #18251500 1! #18252000 0! #18252500 1! #18253000 0! #18253500 1! #18254000 0! #18254500 1! #18255000 0! #18255500 1! #18256000 0! #18256500 1! #18257000 0! #18257500 1! #18258000 0! #18258500 1! #18259000 0! #18259500 1! #18260000 0! #18260500 1! #18261000 0! #18261500 1! #18262000 0! #18262500 1! #18263000 0! #18263500 1! #18264000 0! #18264500 1! #18265000 0! #18265500 1! #18266000 0! #18266500 1! #18267000 0! #18267500 1! #18268000 0! #18268500 1! #18269000 0! #18269500 1! #18270000 0! #18270500 1! #18271000 0! #18271500 1! #18272000 0! #18272500 1! #18273000 0! #18273500 1! #18274000 0! #18274500 1! #18275000 0! #18275500 1! #18276000 0! #18276500 1! #18277000 0! #18277500 1! #18278000 0! #18278500 1! #18279000 0! #18279500 1! #18280000 0! #18280500 1! #18281000 0! #18281500 1! #18282000 0! #18282500 1! #18283000 0! #18283500 1! #18284000 0! #18284500 1! #18285000 0! #18285500 1! #18286000 0! #18286500 1! #18287000 0! #18287500 1! #18288000 0! #18288500 1! #18289000 0! #18289500 1! #18290000 0! #18290500 1! #18291000 0! #18291500 1! #18292000 0! #18292500 1! #18293000 0! #18293500 1! #18294000 0! #18294500 1! #18295000 0! #18295500 1! #18296000 0! #18296500 1! #18297000 0! #18297500 1! #18298000 0! #18298500 1! #18299000 0! #18299500 1! #18300000 0! #18300500 1! #18301000 0! #18301500 1! #18302000 0! #18302500 1! #18303000 0! #18303500 1! #18304000 0! #18304500 1! #18305000 0! #18305500 1! #18306000 0! #18306500 1! #18307000 0! #18307500 1! #18308000 0! #18308500 1! #18309000 0! #18309500 1! #18310000 0! #18310500 1! #18311000 0! #18311500 1! #18312000 0! #18312500 1! #18313000 0! #18313500 1! #18314000 0! #18314500 1! #18315000 0! #18315500 1! #18316000 0! #18316500 1! #18317000 0! #18317500 1! #18318000 0! #18318500 1! #18319000 0! #18319500 1! #18320000 0! #18320500 1! #18321000 0! #18321500 1! #18322000 0! #18322500 1! #18323000 0! #18323500 1! #18324000 0! #18324500 1! #18325000 0! #18325500 1! #18326000 0! #18326500 1! #18327000 0! #18327500 1! #18328000 0! #18328500 1! #18329000 0! #18329500 1! #18330000 0! #18330500 1! #18331000 0! #18331500 1! #18332000 0! #18332500 1! #18333000 0! #18333500 1! #18334000 0! #18334500 1! #18335000 0! #18335500 1! #18336000 0! #18336500 1! #18337000 0! #18337500 1! #18338000 0! #18338500 1! #18339000 0! #18339500 1! #18340000 0! #18340500 1! #18341000 0! #18341500 1! #18342000 0! #18342500 1! #18343000 0! #18343500 1! #18344000 0! #18344500 1! #18345000 0! #18345500 1! #18346000 0! #18346500 1! #18347000 0! #18347500 1! #18348000 0! #18348500 1! #18349000 0! #18349500 1! #18350000 0! #18350500 1! #18351000 0! #18351500 1! #18352000 0! #18352500 1! #18353000 0! #18353500 1! #18354000 0! #18354500 1! #18355000 0! #18355500 1! #18356000 0! #18356500 1! #18357000 0! #18357500 1! #18358000 0! #18358500 1! #18359000 0! #18359500 1! #18360000 0! #18360500 1! #18361000 0! #18361500 1! #18362000 0! #18362500 1! #18363000 0! #18363500 1! #18364000 0! #18364500 1! #18365000 0! #18365500 1! #18366000 0! #18366500 1! #18367000 0! #18367500 1! #18368000 0! #18368500 1! #18369000 0! #18369500 1! #18370000 0! #18370500 1! #18371000 0! #18371500 1! #18372000 0! #18372500 1! #18373000 0! #18373500 1! #18374000 0! #18374500 1! #18375000 0! #18375500 1! #18376000 0! #18376500 1! #18377000 0! #18377500 1! #18378000 0! #18378500 1! #18379000 0! #18379500 1! #18380000 0! #18380500 1! #18381000 0! #18381500 1! #18382000 0! #18382500 1! #18383000 0! #18383500 1! #18384000 0! #18384500 1! #18385000 0! #18385500 1! #18386000 0! #18386500 1! #18387000 0! #18387500 1! #18388000 0! #18388500 1! #18389000 0! #18389500 1! #18390000 0! #18390500 1! #18391000 0! #18391500 1! #18392000 0! #18392500 1! #18393000 0! #18393500 1! #18394000 0! #18394500 1! #18395000 0! #18395500 1! #18396000 0! #18396500 1! #18397000 0! #18397500 1! #18398000 0! #18398500 1! #18399000 0! #18399500 1! #18400000 0! #18400500 1! #18401000 0! #18401500 1! #18402000 0! #18402500 1! #18403000 0! #18403500 1! #18404000 0! #18404500 1! #18405000 0! #18405500 1! #18406000 0! #18406500 1! #18407000 0! #18407500 1! #18408000 0! #18408500 1! #18409000 0! #18409500 1! #18410000 0! #18410500 1! #18411000 0! #18411500 1! #18412000 0! #18412500 1! #18413000 0! #18413500 1! #18414000 0! #18414500 1! #18415000 0! #18415500 1! #18416000 0! #18416500 1! #18417000 0! #18417500 1! #18418000 0! #18418500 1! #18419000 0! #18419500 1! #18420000 0! #18420500 1! #18421000 0! #18421500 1! #18422000 0! #18422500 1! #18423000 0! #18423500 1! #18424000 0! #18424500 1! #18425000 0! #18425500 1! #18426000 0! #18426500 1! #18427000 0! #18427500 1! #18428000 0! #18428500 1! #18429000 0! #18429500 1! #18430000 0! #18430500 1! #18431000 0! #18431500 1! #18432000 0! #18432500 1! #18433000 0! #18433500 1! #18434000 0! #18434500 1! #18435000 0! #18435500 1! #18436000 0! #18436500 1! #18437000 0! #18437500 1! #18438000 0! #18438500 1! #18439000 0! #18439500 1! #18440000 0! #18440500 1! #18441000 0! #18441500 1! #18442000 0! #18442500 1! #18443000 0! #18443500 1! #18444000 0! #18444500 1! #18445000 0! #18445500 1! #18446000 0! #18446500 1! #18447000 0! #18447500 1! #18448000 0! #18448500 1! #18449000 0! #18449500 1! #18450000 0! #18450500 1! #18451000 0! #18451500 1! #18452000 0! #18452500 1! #18453000 0! #18453500 1! #18454000 0! #18454500 1! #18455000 0! #18455500 1! #18456000 0! #18456500 1! #18457000 0! #18457500 1! #18458000 0! #18458500 1! #18459000 0! #18459500 1! #18460000 0! #18460500 1! #18461000 0! #18461500 1! #18462000 0! #18462500 1! #18463000 0! #18463500 1! #18464000 0! #18464500 1! #18465000 0! #18465500 1! #18466000 0! #18466500 1! #18467000 0! #18467500 1! #18468000 0! #18468500 1! #18469000 0! #18469500 1! #18470000 0! #18470500 1! #18471000 0! #18471500 1! #18472000 0! #18472500 1! #18473000 0! #18473500 1! #18474000 0! #18474500 1! #18475000 0! #18475500 1! #18476000 0! #18476500 1! #18477000 0! #18477500 1! #18478000 0! #18478500 1! #18479000 0! #18479500 1! #18480000 0! #18480500 1! #18481000 0! #18481500 1! #18482000 0! #18482500 1! #18483000 0! #18483500 1! #18484000 0! #18484500 1! #18485000 0! #18485500 1! #18486000 0! #18486500 1! #18487000 0! #18487500 1! #18488000 0! #18488500 1! #18489000 0! #18489500 1! #18490000 0! #18490500 1! #18491000 0! #18491500 1! #18492000 0! #18492500 1! #18493000 0! #18493500 1! #18494000 0! #18494500 1! #18495000 0! #18495500 1! #18496000 0! #18496500 1! #18497000 0! #18497500 1! #18498000 0! #18498500 1! #18499000 0! #18499500 1! #18500000 0! #18500500 1! #18501000 0! #18501500 1! #18502000 0! #18502500 1! #18503000 0! #18503500 1! #18504000 0! #18504500 1! #18505000 0! #18505500 1! #18506000 0! #18506500 1! #18507000 0! #18507500 1! #18508000 0! #18508500 1! #18509000 0! #18509500 1! #18510000 0! #18510500 1! #18511000 0! #18511500 1! #18512000 0! #18512500 1! #18513000 0! #18513500 1! #18514000 0! #18514500 1! #18515000 0! #18515500 1! #18516000 0! #18516500 1! #18517000 0! #18517500 1! #18518000 0! #18518500 1! #18519000 0! #18519500 1! #18520000 0! #18520500 1! #18521000 0! #18521500 1! #18522000 0! #18522500 1! #18523000 0! #18523500 1! #18524000 0! #18524500 1! #18525000 0! #18525500 1! #18526000 0! #18526500 1! #18527000 0! #18527500 1! #18528000 0! #18528500 1! #18529000 0! #18529500 1! #18530000 0! #18530500 1! #18531000 0! #18531500 1! #18532000 0! #18532500 1! #18533000 0! #18533500 1! #18534000 0! #18534500 1! #18535000 0! #18535500 1! #18536000 0! #18536500 1! #18537000 0! #18537500 1! #18538000 0! #18538500 1! #18539000 0! #18539500 1! #18540000 0! #18540500 1! #18541000 0! #18541500 1! #18542000 0! #18542500 1! #18543000 0! #18543500 1! #18544000 0! #18544500 1! #18545000 0! #18545500 1! #18546000 0! #18546500 1! #18547000 0! #18547500 1! #18548000 0! #18548500 1! #18549000 0! #18549500 1! #18550000 0! #18550500 1! #18551000 0! #18551500 1! #18552000 0! #18552500 1! #18553000 0! #18553500 1! #18554000 0! #18554500 1! #18555000 0! #18555500 1! #18556000 0! #18556500 1! #18557000 0! #18557500 1! #18558000 0! #18558500 1! #18559000 0! #18559500 1! #18560000 0! #18560500 1! #18561000 0! #18561500 1! #18562000 0! #18562500 1! #18563000 0! #18563500 1! #18564000 0! #18564500 1! #18565000 0! #18565500 1! #18566000 0! #18566500 1! #18567000 0! #18567500 1! #18568000 0! #18568500 1! #18569000 0! #18569500 1! #18570000 0! #18570500 1! #18571000 0! #18571500 1! #18572000 0! #18572500 1! #18573000 0! #18573500 1! #18574000 0! #18574500 1! #18575000 0! #18575500 1! #18576000 0! #18576500 1! #18577000 0! #18577500 1! #18578000 0! #18578500 1! #18579000 0! #18579500 1! #18580000 0! #18580500 1! #18581000 0! #18581500 1! #18582000 0! #18582500 1! #18583000 0! #18583500 1! #18584000 0! #18584500 1! #18585000 0! #18585500 1! #18586000 0! #18586500 1! #18587000 0! #18587500 1! #18588000 0! #18588500 1! #18589000 0! #18589500 1! #18590000 0! #18590500 1! #18591000 0! #18591500 1! #18592000 0! #18592500 1! #18593000 0! #18593500 1! #18594000 0! #18594500 1! #18595000 0! #18595500 1! #18596000 0! #18596500 1! #18597000 0! #18597500 1! #18598000 0! #18598500 1! #18599000 0! #18599500 1! #18600000 0! #18600500 1! #18601000 0! #18601500 1! #18602000 0! #18602500 1! #18603000 0! #18603500 1! #18604000 0! #18604500 1! #18605000 0! #18605500 1! #18606000 0! #18606500 1! #18607000 0! #18607500 1! #18608000 0! #18608500 1! #18609000 0! #18609500 1! #18610000 0! #18610500 1! #18611000 0! #18611500 1! #18612000 0! #18612500 1! #18613000 0! #18613500 1! #18614000 0! #18614500 1! #18615000 0! #18615500 1! #18616000 0! #18616500 1! #18617000 0! #18617500 1! #18618000 0! #18618500 1! #18619000 0! #18619500 1! #18620000 0! #18620500 1! #18621000 0! #18621500 1! #18622000 0! #18622500 1! #18623000 0! #18623500 1! #18624000 0! #18624500 1! #18625000 0! #18625500 1! #18626000 0! #18626500 1! #18627000 0! #18627500 1! #18628000 0! #18628500 1! #18629000 0! #18629500 1! #18630000 0! #18630500 1! #18631000 0! #18631500 1! #18632000 0! #18632500 1! #18633000 0! #18633500 1! #18634000 0! #18634500 1! #18635000 0! #18635500 1! #18636000 0! #18636500 1! #18637000 0! #18637500 1! #18638000 0! #18638500 1! #18639000 0! #18639500 1! #18640000 0! #18640500 1! #18641000 0! #18641500 1! #18642000 0! #18642500 1! #18643000 0! #18643500 1! #18644000 0! #18644500 1! #18645000 0! #18645500 1! #18646000 0! #18646500 1! #18647000 0! #18647500 1! #18648000 0! #18648500 1! #18649000 0! #18649500 1! #18650000 0! #18650500 1! #18651000 0! #18651500 1! #18652000 0! #18652500 1! #18653000 0! #18653500 1! #18654000 0! #18654500 1! #18655000 0! #18655500 1! #18656000 0! #18656500 1! #18657000 0! #18657500 1! #18658000 0! #18658500 1! #18659000 0! #18659500 1! #18660000 0! #18660500 1! #18661000 0! #18661500 1! #18662000 0! #18662500 1! #18663000 0! #18663500 1! #18664000 0! #18664500 1! #18665000 0! #18665500 1! #18666000 0! #18666500 1! #18667000 0! #18667500 1! #18668000 0! #18668500 1! #18669000 0! #18669500 1! #18670000 0! #18670500 1! #18671000 0! #18671500 1! #18672000 0! #18672500 1! #18673000 0! #18673500 1! #18674000 0! #18674500 1! #18675000 0! #18675500 1! #18676000 0! #18676500 1! #18677000 0! #18677500 1! #18678000 0! #18678500 1! #18679000 0! #18679500 1! #18680000 0! #18680500 1! #18681000 0! #18681500 1! #18682000 0! #18682500 1! #18683000 0! #18683500 1! #18684000 0! #18684500 1! #18685000 0! #18685500 1! #18686000 0! #18686500 1! #18687000 0! #18687500 1! #18688000 0! #18688500 1! #18689000 0! #18689500 1! #18690000 0! #18690500 1! #18691000 0! #18691500 1! #18692000 0! #18692500 1! #18693000 0! #18693500 1! #18694000 0! #18694500 1! #18695000 0! #18695500 1! #18696000 0! #18696500 1! #18697000 0! #18697500 1! #18698000 0! #18698500 1! #18699000 0! #18699500 1! #18700000 0! #18700500 1! #18701000 0! #18701500 1! #18702000 0! #18702500 1! #18703000 0! #18703500 1! #18704000 0! #18704500 1! #18705000 0! #18705500 1! #18706000 0! #18706500 1! #18707000 0! #18707500 1! #18708000 0! #18708500 1! #18709000 0! #18709500 1! #18710000 0! #18710500 1! #18711000 0! #18711500 1! #18712000 0! #18712500 1! #18713000 0! #18713500 1! #18714000 0! #18714500 1! #18715000 0! #18715500 1! #18716000 0! #18716500 1! #18717000 0! #18717500 1! #18718000 0! #18718500 1! #18719000 0! #18719500 1! #18720000 0! #18720500 1! #18721000 0! #18721500 1! #18722000 0! #18722500 1! #18723000 0! #18723500 1! #18724000 0! #18724500 1! #18725000 0! #18725500 1! #18726000 0! #18726500 1! #18727000 0! #18727500 1! #18728000 0! #18728500 1! #18729000 0! #18729500 1! #18730000 0! #18730500 1! #18731000 0! #18731500 1! #18732000 0! #18732500 1! #18733000 0! #18733500 1! #18734000 0! #18734500 1! #18735000 0! #18735500 1! #18736000 0! #18736500 1! #18737000 0! #18737500 1! #18738000 0! #18738500 1! #18739000 0! #18739500 1! #18740000 0! #18740500 1! #18741000 0! #18741500 1! #18742000 0! #18742500 1! #18743000 0! #18743500 1! #18744000 0! #18744500 1! #18745000 0! #18745500 1! #18746000 0! #18746500 1! #18747000 0! #18747500 1! #18748000 0! #18748500 1! #18749000 0! #18749500 1! #18750000 0! #18750500 1! #18751000 0! #18751500 1! #18752000 0! #18752500 1! #18753000 0! #18753500 1! #18754000 0! #18754500 1! #18755000 0! #18755500 1! #18756000 0! #18756500 1! #18757000 0! #18757500 1! #18758000 0! #18758500 1! #18759000 0! #18759500 1! #18760000 0! #18760500 1! #18761000 0! #18761500 1! #18762000 0! #18762500 1! #18763000 0! #18763500 1! #18764000 0! #18764500 1! #18765000 0! #18765500 1! #18766000 0! #18766500 1! #18767000 0! #18767500 1! #18768000 0! #18768500 1! #18769000 0! #18769500 1! #18770000 0! #18770500 1! #18771000 0! #18771500 1! #18772000 0! #18772500 1! #18773000 0! #18773500 1! #18774000 0! #18774500 1! #18775000 0! #18775500 1! #18776000 0! #18776500 1! #18777000 0! #18777500 1! #18778000 0! #18778500 1! #18779000 0! #18779500 1! #18780000 0! #18780500 1! #18781000 0! #18781500 1! #18782000 0! #18782500 1! #18783000 0! #18783500 1! #18784000 0! #18784500 1! #18785000 0! #18785500 1! #18786000 0! #18786500 1! #18787000 0! #18787500 1! #18788000 0! #18788500 1! #18789000 0! #18789500 1! #18790000 0! #18790500 1! #18791000 0! #18791500 1! #18792000 0! #18792500 1! #18793000 0! #18793500 1! #18794000 0! #18794500 1! #18795000 0! #18795500 1! #18796000 0! #18796500 1! #18797000 0! #18797500 1! #18798000 0! #18798500 1! #18799000 0! #18799500 1! #18800000 0! #18800500 1! #18801000 0! #18801500 1! #18802000 0! #18802500 1! #18803000 0! #18803500 1! #18804000 0! #18804500 1! #18805000 0! #18805500 1! #18806000 0! #18806500 1! #18807000 0! #18807500 1! #18808000 0! #18808500 1! #18809000 0! #18809500 1! #18810000 0! #18810500 1! #18811000 0! #18811500 1! #18812000 0! #18812500 1! #18813000 0! #18813500 1! #18814000 0! #18814500 1! #18815000 0! #18815500 1! #18816000 0! #18816500 1! #18817000 0! #18817500 1! #18818000 0! #18818500 1! #18819000 0! #18819500 1! #18820000 0! #18820500 1! #18821000 0! #18821500 1! #18822000 0! #18822500 1! #18823000 0! #18823500 1! #18824000 0! #18824500 1! #18825000 0! #18825500 1! #18826000 0! #18826500 1! #18827000 0! #18827500 1! #18828000 0! #18828500 1! #18829000 0! #18829500 1! #18830000 0! #18830500 1! #18831000 0! #18831500 1! #18832000 0! #18832500 1! #18833000 0! #18833500 1! #18834000 0! #18834500 1! #18835000 0! #18835500 1! #18836000 0! #18836500 1! #18837000 0! #18837500 1! #18838000 0! #18838500 1! #18839000 0! #18839500 1! #18840000 0! #18840500 1! #18841000 0! #18841500 1! #18842000 0! #18842500 1! #18843000 0! #18843500 1! #18844000 0! #18844500 1! #18845000 0! #18845500 1! #18846000 0! #18846500 1! #18847000 0! #18847500 1! #18848000 0! #18848500 1! #18849000 0! #18849500 1! #18850000 0! #18850500 1! #18851000 0! #18851500 1! #18852000 0! #18852500 1! #18853000 0! #18853500 1! #18854000 0! #18854500 1! #18855000 0! #18855500 1! #18856000 0! #18856500 1! #18857000 0! #18857500 1! #18858000 0! #18858500 1! #18859000 0! #18859500 1! #18860000 0! #18860500 1! #18861000 0! #18861500 1! #18862000 0! #18862500 1! #18863000 0! #18863500 1! #18864000 0! #18864500 1! #18865000 0! #18865500 1! #18866000 0! #18866500 1! #18867000 0! #18867500 1! #18868000 0! #18868500 1! #18869000 0! #18869500 1! #18870000 0! #18870500 1! #18871000 0! #18871500 1! #18872000 0! #18872500 1! #18873000 0! #18873500 1! #18874000 0! #18874500 1! #18875000 0! #18875500 1! #18876000 0! #18876500 1! #18877000 0! #18877500 1! #18878000 0! #18878500 1! #18879000 0! #18879500 1! #18880000 0! #18880500 1! #18881000 0! #18881500 1! #18882000 0! #18882500 1! #18883000 0! #18883500 1! #18884000 0! #18884500 1! #18885000 0! #18885500 1! #18886000 0! #18886500 1! #18887000 0! #18887500 1! #18888000 0! #18888500 1! #18889000 0! #18889500 1! #18890000 0! #18890500 1! #18891000 0! #18891500 1! #18892000 0! #18892500 1! #18893000 0! #18893500 1! #18894000 0! #18894500 1! #18895000 0! #18895500 1! #18896000 0! #18896500 1! #18897000 0! #18897500 1! #18898000 0! #18898500 1! #18899000 0! #18899500 1! #18900000 0! #18900500 1! #18901000 0! #18901500 1! #18902000 0! #18902500 1! #18903000 0! #18903500 1! #18904000 0! #18904500 1! #18905000 0! #18905500 1! #18906000 0! #18906500 1! #18907000 0! #18907500 1! #18908000 0! #18908500 1! #18909000 0! #18909500 1! #18910000 0! #18910500 1! #18911000 0! #18911500 1! #18912000 0! #18912500 1! #18913000 0! #18913500 1! #18914000 0! #18914500 1! #18915000 0! #18915500 1! #18916000 0! #18916500 1! #18917000 0! #18917500 1! #18918000 0! #18918500 1! #18919000 0! #18919500 1! #18920000 0! #18920500 1! #18921000 0! #18921500 1! #18922000 0! #18922500 1! #18923000 0! #18923500 1! #18924000 0! #18924500 1! #18925000 0! #18925500 1! #18926000 0! #18926500 1! #18927000 0! #18927500 1! #18928000 0! #18928500 1! #18929000 0! #18929500 1! #18930000 0! #18930500 1! #18931000 0! #18931500 1! #18932000 0! #18932500 1! #18933000 0! #18933500 1! #18934000 0! #18934500 1! #18935000 0! #18935500 1! #18936000 0! #18936500 1! #18937000 0! #18937500 1! #18938000 0! #18938500 1! #18939000 0! #18939500 1! #18940000 0! #18940500 1! #18941000 0! #18941500 1! #18942000 0! #18942500 1! #18943000 0! #18943500 1! #18944000 0! #18944500 1! #18945000 0! #18945500 1! #18946000 0! #18946500 1! #18947000 0! #18947500 1! #18948000 0! #18948500 1! #18949000 0! #18949500 1! #18950000 0! #18950500 1! #18951000 0! #18951500 1! #18952000 0! #18952500 1! #18953000 0! #18953500 1! #18954000 0! #18954500 1! #18955000 0! #18955500 1! #18956000 0! #18956500 1! #18957000 0! #18957500 1! #18958000 0! #18958500 1! #18959000 0! #18959500 1! #18960000 0! #18960500 1! #18961000 0! #18961500 1! #18962000 0! #18962500 1! #18963000 0! #18963500 1! #18964000 0! #18964500 1! #18965000 0! #18965500 1! #18966000 0! #18966500 1! #18967000 0! #18967500 1! #18968000 0! #18968500 1! #18969000 0! #18969500 1! #18970000 0! #18970500 1! #18971000 0! #18971500 1! #18972000 0! #18972500 1! #18973000 0! #18973500 1! #18974000 0! #18974500 1! #18975000 0! #18975500 1! #18976000 0! #18976500 1! #18977000 0! #18977500 1! #18978000 0! #18978500 1! #18979000 0! #18979500 1! #18980000 0! #18980500 1! #18981000 0! #18981500 1! #18982000 0! #18982500 1! #18983000 0! #18983500 1! #18984000 0! #18984500 1! #18985000 0! #18985500 1! #18986000 0! #18986500 1! #18987000 0! #18987500 1! #18988000 0! #18988500 1! #18989000 0! #18989500 1! #18990000 0! #18990500 1! #18991000 0! #18991500 1! #18992000 0! #18992500 1! #18993000 0! #18993500 1! #18994000 0! #18994500 1! #18995000 0! #18995500 1! #18996000 0! #18996500 1! #18997000 0! #18997500 1! #18998000 0! #18998500 1! #18999000 0! #18999500 1! #19000000 0! #19000500 1! #19001000 0! #19001500 1! #19002000 0! #19002500 1! #19003000 0! #19003500 1! #19004000 0! #19004500 1! #19005000 0! #19005500 1! #19006000 0! #19006500 1! #19007000 0! #19007500 1! #19008000 0! #19008500 1! #19009000 0! #19009500 1! #19010000 0! #19010500 1! #19011000 0! #19011500 1! #19012000 0! #19012500 1! #19013000 0! #19013500 1! #19014000 0! #19014500 1! #19015000 0! #19015500 1! #19016000 0! #19016500 1! #19017000 0! #19017500 1! #19018000 0! #19018500 1! #19019000 0! #19019500 1! #19020000 0! #19020500 1! #19021000 0! #19021500 1! #19022000 0! #19022500 1! #19023000 0! #19023500 1! #19024000 0! #19024500 1! #19025000 0! #19025500 1! #19026000 0! #19026500 1! #19027000 0! #19027500 1! #19028000 0! #19028500 1! #19029000 0! #19029500 1! #19030000 0! #19030500 1! #19031000 0! #19031500 1! #19032000 0! #19032500 1! #19033000 0! #19033500 1! #19034000 0! #19034500 1! #19035000 0! #19035500 1! #19036000 0! #19036500 1! #19037000 0! #19037500 1! #19038000 0! #19038500 1! #19039000 0! #19039500 1! #19040000 0! #19040500 1! #19041000 0! #19041500 1! #19042000 0! #19042500 1! #19043000 0! #19043500 1! #19044000 0! #19044500 1! #19045000 0! #19045500 1! #19046000 0! #19046500 1! #19047000 0! #19047500 1! #19048000 0! #19048500 1! #19049000 0! #19049500 1! #19050000 0! #19050500 1! #19051000 0! #19051500 1! #19052000 0! #19052500 1! #19053000 0! #19053500 1! #19054000 0! #19054500 1! #19055000 0! #19055500 1! #19056000 0! #19056500 1! #19057000 0! #19057500 1! #19058000 0! #19058500 1! #19059000 0! #19059500 1! #19060000 0! #19060500 1! #19061000 0! #19061500 1! #19062000 0! #19062500 1! #19063000 0! #19063500 1! #19064000 0! #19064500 1! #19065000 0! #19065500 1! #19066000 0! #19066500 1! #19067000 0! #19067500 1! #19068000 0! #19068500 1! #19069000 0! #19069500 1! #19070000 0! #19070500 1! #19071000 0! #19071500 1! #19072000 0! #19072500 1! #19073000 0! #19073500 1! #19074000 0! #19074500 1! #19075000 0! #19075500 1! #19076000 0! #19076500 1! #19077000 0! #19077500 1! #19078000 0! #19078500 1! #19079000 0! #19079500 1! #19080000 0! #19080500 1! #19081000 0! #19081500 1! #19082000 0! #19082500 1! #19083000 0! #19083500 1! #19084000 0! #19084500 1! #19085000 0! #19085500 1! #19086000 0! #19086500 1! #19087000 0! #19087500 1! #19088000 0! #19088500 1! #19089000 0! #19089500 1! #19090000 0! #19090500 1! #19091000 0! #19091500 1! #19092000 0! #19092500 1! #19093000 0! #19093500 1! #19094000 0! #19094500 1! #19095000 0! #19095500 1! #19096000 0! #19096500 1! #19097000 0! #19097500 1! #19098000 0! #19098500 1! #19099000 0! #19099500 1! #19100000 0! #19100500 1! #19101000 0! #19101500 1! #19102000 0! #19102500 1! #19103000 0! #19103500 1! #19104000 0! #19104500 1! #19105000 0! #19105500 1! #19106000 0! #19106500 1! #19107000 0! #19107500 1! #19108000 0! #19108500 1! #19109000 0! #19109500 1! #19110000 0! #19110500 1! #19111000 0! #19111500 1! #19112000 0! #19112500 1! #19113000 0! #19113500 1! #19114000 0! #19114500 1! #19115000 0! #19115500 1! #19116000 0! #19116500 1! #19117000 0! #19117500 1! #19118000 0! #19118500 1! #19119000 0! #19119500 1! #19120000 0! #19120500 1! #19121000 0! #19121500 1! #19122000 0! #19122500 1! #19123000 0! #19123500 1! #19124000 0! #19124500 1! #19125000 0! #19125500 1! #19126000 0! #19126500 1! #19127000 0! #19127500 1! #19128000 0! #19128500 1! #19129000 0! #19129500 1! #19130000 0! #19130500 1! #19131000 0! #19131500 1! #19132000 0! #19132500 1! #19133000 0! #19133500 1! #19134000 0! #19134500 1! #19135000 0! #19135500 1! #19136000 0! #19136500 1! #19137000 0! #19137500 1! #19138000 0! #19138500 1! #19139000 0! #19139500 1! #19140000 0! #19140500 1! #19141000 0! #19141500 1! #19142000 0! #19142500 1! #19143000 0! #19143500 1! #19144000 0! #19144500 1! #19145000 0! #19145500 1! #19146000 0! #19146500 1! #19147000 0! #19147500 1! #19148000 0! #19148500 1! #19149000 0! #19149500 1! #19150000 0! #19150500 1! #19151000 0! #19151500 1! #19152000 0! #19152500 1! #19153000 0! #19153500 1! #19154000 0! #19154500 1! #19155000 0! #19155500 1! #19156000 0! #19156500 1! #19157000 0! #19157500 1! #19158000 0! #19158500 1! #19159000 0! #19159500 1! #19160000 0! #19160500 1! #19161000 0! #19161500 1! #19162000 0! #19162500 1! #19163000 0! #19163500 1! #19164000 0! #19164500 1! #19165000 0! #19165500 1! #19166000 0! #19166500 1! #19167000 0! #19167500 1! #19168000 0! #19168500 1! #19169000 0! #19169500 1! #19170000 0! #19170500 1! #19171000 0! #19171500 1! #19172000 0! #19172500 1! #19173000 0! #19173500 1! #19174000 0! #19174500 1! #19175000 0! #19175500 1! #19176000 0! #19176500 1! #19177000 0! #19177500 1! #19178000 0! #19178500 1! #19179000 0! #19179500 1! #19180000 0! #19180500 1! #19181000 0! #19181500 1! #19182000 0! #19182500 1! #19183000 0! #19183500 1! #19184000 0! #19184500 1! #19185000 0! #19185500 1! #19186000 0! #19186500 1! #19187000 0! #19187500 1! #19188000 0! #19188500 1! #19189000 0! #19189500 1! #19190000 0! #19190500 1! #19191000 0! #19191500 1! #19192000 0! #19192500 1! #19193000 0! #19193500 1! #19194000 0! #19194500 1! #19195000 0! #19195500 1! #19196000 0! #19196500 1! #19197000 0! #19197500 1! #19198000 0! #19198500 1! #19199000 0! #19199500 1! #19200000 0! #19200500 1! #19201000 0! #19201500 1! #19202000 0! #19202500 1! #19203000 0! #19203500 1! #19204000 0! #19204500 1! #19205000 0! #19205500 1! #19206000 0! #19206500 1! #19207000 0! #19207500 1! #19208000 0! #19208500 1! #19209000 0! #19209500 1! #19210000 0! #19210500 1! #19211000 0! #19211500 1! #19212000 0! #19212500 1! #19213000 0! #19213500 1! #19214000 0! #19214500 1! #19215000 0! #19215500 1! #19216000 0! #19216500 1! #19217000 0! #19217500 1! #19218000 0! #19218500 1! #19219000 0! #19219500 1! #19220000 0! #19220500 1! #19221000 0! #19221500 1! #19222000 0! #19222500 1! #19223000 0! #19223500 1! #19224000 0! #19224500 1! #19225000 0! #19225500 1! #19226000 0! #19226500 1! #19227000 0! #19227500 1! #19228000 0! #19228500 1! #19229000 0! #19229500 1! #19230000 0! #19230500 1! #19231000 0! #19231500 1! #19232000 0! #19232500 1! #19233000 0! #19233500 1! #19234000 0! #19234500 1! #19235000 0! #19235500 1! #19236000 0! #19236500 1! #19237000 0! #19237500 1! #19238000 0! #19238500 1! #19239000 0! #19239500 1! #19240000 0! #19240500 1! #19241000 0! #19241500 1! #19242000 0! #19242500 1! #19243000 0! #19243500 1! #19244000 0! #19244500 1! #19245000 0! #19245500 1! #19246000 0! #19246500 1! #19247000 0! #19247500 1! #19248000 0! #19248500 1! #19249000 0! #19249500 1! #19250000 0! #19250500 1! #19251000 0! #19251500 1! #19252000 0! #19252500 1! #19253000 0! #19253500 1! #19254000 0! #19254500 1! #19255000 0! #19255500 1! #19256000 0! #19256500 1! #19257000 0! #19257500 1! #19258000 0! #19258500 1! #19259000 0! #19259500 1! #19260000 0! #19260500 1! #19261000 0! #19261500 1! #19262000 0! #19262500 1! #19263000 0! #19263500 1! #19264000 0! #19264500 1! #19265000 0! #19265500 1! #19266000 0! #19266500 1! #19267000 0! #19267500 1! #19268000 0! #19268500 1! #19269000 0! #19269500 1! #19270000 0! #19270500 1! #19271000 0! #19271500 1! #19272000 0! #19272500 1! #19273000 0! #19273500 1! #19274000 0! #19274500 1! #19275000 0! #19275500 1! #19276000 0! #19276500 1! #19277000 0! #19277500 1! #19278000 0! #19278500 1! #19279000 0! #19279500 1! #19280000 0! #19280500 1! #19281000 0! #19281500 1! #19282000 0! #19282500 1! #19283000 0! #19283500 1! #19284000 0! #19284500 1! #19285000 0! #19285500 1! #19286000 0! #19286500 1! #19287000 0! #19287500 1! #19288000 0! #19288500 1! #19289000 0! #19289500 1! #19290000 0! #19290500 1! #19291000 0! #19291500 1! #19292000 0! #19292500 1! #19293000 0! #19293500 1! #19294000 0! #19294500 1! #19295000 0! #19295500 1! #19296000 0! #19296500 1! #19297000 0! #19297500 1! #19298000 0! #19298500 1! #19299000 0! #19299500 1! #19300000 0! #19300500 1! #19301000 0! #19301500 1! #19302000 0! #19302500 1! #19303000 0! #19303500 1! #19304000 0! #19304500 1! #19305000 0! #19305500 1! #19306000 0! #19306500 1! #19307000 0! #19307500 1! #19308000 0! #19308500 1! #19309000 0! #19309500 1! #19310000 0! #19310500 1! #19311000 0! #19311500 1! #19312000 0! #19312500 1! #19313000 0! #19313500 1! #19314000 0! #19314500 1! #19315000 0! #19315500 1! #19316000 0! #19316500 1! #19317000 0! #19317500 1! #19318000 0! #19318500 1! #19319000 0! #19319500 1! #19320000 0! #19320500 1! #19321000 0! #19321500 1! #19322000 0! #19322500 1! #19323000 0! #19323500 1! #19324000 0! #19324500 1! #19325000 0! #19325500 1! #19326000 0! #19326500 1! #19327000 0! #19327500 1! #19328000 0! #19328500 1! #19329000 0! #19329500 1! #19330000 0! #19330500 1! #19331000 0! #19331500 1! #19332000 0! #19332500 1! #19333000 0! #19333500 1! #19334000 0! #19334500 1! #19335000 0! #19335500 1! #19336000 0! #19336500 1! #19337000 0! #19337500 1! #19338000 0! #19338500 1! #19339000 0! #19339500 1! #19340000 0! #19340500 1! #19341000 0! #19341500 1! #19342000 0! #19342500 1! #19343000 0! #19343500 1! #19344000 0! #19344500 1! #19345000 0! #19345500 1! #19346000 0! #19346500 1! #19347000 0! #19347500 1! #19348000 0! #19348500 1! #19349000 0! #19349500 1! #19350000 0! #19350500 1! #19351000 0! #19351500 1! #19352000 0! #19352500 1! #19353000 0! #19353500 1! #19354000 0! #19354500 1! #19355000 0! #19355500 1! #19356000 0! #19356500 1! #19357000 0! #19357500 1! #19358000 0! #19358500 1! #19359000 0! #19359500 1! #19360000 0! #19360500 1! #19361000 0! #19361500 1! #19362000 0! #19362500 1! #19363000 0! #19363500 1! #19364000 0! #19364500 1! #19365000 0! #19365500 1! #19366000 0! #19366500 1! #19367000 0! #19367500 1! #19368000 0! #19368500 1! #19369000 0! #19369500 1! #19370000 0! #19370500 1! #19371000 0! #19371500 1! #19372000 0! #19372500 1! #19373000 0! #19373500 1! #19374000 0! #19374500 1! #19375000 0! #19375500 1! #19376000 0! #19376500 1! #19377000 0! #19377500 1! #19378000 0! #19378500 1! #19379000 0! #19379500 1! #19380000 0! #19380500 1! #19381000 0! #19381500 1! #19382000 0! #19382500 1! #19383000 0! #19383500 1! #19384000 0! #19384500 1! #19385000 0! #19385500 1! #19386000 0! #19386500 1! #19387000 0! #19387500 1! #19388000 0! #19388500 1! #19389000 0! #19389500 1! #19390000 0! #19390500 1! #19391000 0! #19391500 1! #19392000 0! #19392500 1! #19393000 0! #19393500 1! #19394000 0! #19394500 1! #19395000 0! #19395500 1! #19396000 0! #19396500 1! #19397000 0! #19397500 1! #19398000 0! #19398500 1! #19399000 0! #19399500 1! #19400000 0! #19400500 1! #19401000 0! #19401500 1! #19402000 0! #19402500 1! #19403000 0! #19403500 1! #19404000 0! #19404500 1! #19405000 0! #19405500 1! #19406000 0! #19406500 1! #19407000 0! #19407500 1! #19408000 0! #19408500 1! #19409000 0! #19409500 1! #19410000 0! #19410500 1! #19411000 0! #19411500 1! #19412000 0! #19412500 1! #19413000 0! #19413500 1! #19414000 0! #19414500 1! #19415000 0! #19415500 1! #19416000 0! #19416500 1! #19417000 0! #19417500 1! #19418000 0! #19418500 1! #19419000 0! #19419500 1! #19420000 0! #19420500 1! #19421000 0! #19421500 1! #19422000 0! #19422500 1! #19423000 0! #19423500 1! #19424000 0! #19424500 1! #19425000 0! #19425500 1! #19426000 0! #19426500 1! #19427000 0! #19427500 1! #19428000 0! #19428500 1! #19429000 0! #19429500 1! #19430000 0! #19430500 1! #19431000 0! #19431500 1! #19432000 0! #19432500 1! #19433000 0! #19433500 1! #19434000 0! #19434500 1! #19435000 0! #19435500 1! #19436000 0! #19436500 1! #19437000 0! #19437500 1! #19438000 0! #19438500 1! #19439000 0! #19439500 1! #19440000 0! #19440500 1! #19441000 0! #19441500 1! #19442000 0! #19442500 1! #19443000 0! #19443500 1! #19444000 0! #19444500 1! #19445000 0! #19445500 1! #19446000 0! #19446500 1! #19447000 0! #19447500 1! #19448000 0! #19448500 1! #19449000 0! #19449500 1! #19450000 0! #19450500 1! #19451000 0! #19451500 1! #19452000 0! #19452500 1! #19453000 0! #19453500 1! #19454000 0! #19454500 1! #19455000 0! #19455500 1! #19456000 0! #19456500 1! #19457000 0! #19457500 1! #19458000 0! #19458500 1! #19459000 0! #19459500 1! #19460000 0! #19460500 1! #19461000 0! #19461500 1! #19462000 0! #19462500 1! #19463000 0! #19463500 1! #19464000 0! #19464500 1! #19465000 0! #19465500 1! #19466000 0! #19466500 1! #19467000 0! #19467500 1! #19468000 0! #19468500 1! #19468600 1E 1F 1G b10100000 D 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 0@ 1A 1B b0 C 1H #19469000 0! #19469500 1! #19469600 xE bx D x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19469700 1E 1F 1G b10010000 D 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B b1 C 1H #19470000 0! #19470500 1! #19470600 xE bx D x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19471000 0! #19471500 1! #19471600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H b11 C #19472000 0! #19472500 1! #19472600 b11 J xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19473000 0! #19473500 1! #19473600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19474000 0! #19474500 1! #19474600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19475000 0! #19475500 1! #19475600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19476000 0! #19476500 1! #19476600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19477000 0! #19477500 1! #19477600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19478000 0! #19478500 1! #19478600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19479000 0! #19479500 1! #19479600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19480000 0! #19480500 1! #19480600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19481000 0! #19481500 1! #19481600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19482000 0! #19482500 1! #19482600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19483000 0! #19483500 1! #19483600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19484000 0! #19484500 1! #19484600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19485000 0! #19485500 1! #19485600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19486000 0! #19486500 1! #19486600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19487000 0! #19487500 1! #19487600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19488000 0! #19488500 1! #19488600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19489000 0! #19489500 1! #19489600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19490000 0! #19490500 1! #19490600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19491000 0! #19491500 1! #19491600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19492000 0! #19492500 1! #19492600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19493000 0! #19493500 1! #19493600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19494000 0! #19494500 1! #19494600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19495000 0! #19495500 1! #19495600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19496000 0! #19496500 1! #19496600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19497000 0! #19497500 1! #19497600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19498000 0! #19498500 1! #19498600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19499000 0! #19499500 1! #19499600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19500000 0! #19500500 1! #19500600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19501000 0! #19501500 1! #19501600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19502000 0! #19502500 1! #19502600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19503000 0! #19503500 1! #19503600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19504000 0! #19504500 1! #19504600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19505000 0! #19505500 1! #19505600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19506000 0! #19506500 1! #19506600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19507000 0! #19507500 1! #19507600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19508000 0! #19508500 1! #19508600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19509000 0! #19509500 1! #19509600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19510000 0! #19510500 1! #19510600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19511000 0! #19511500 1! #19511600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19512000 0! #19512500 1! #19512600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19513000 0! #19513500 1! #19513600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19514000 0! #19514500 1! #19514600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19515000 0! #19515500 1! #19515600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19516000 0! #19516500 1! #19516600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19517000 0! #19517500 1! #19517600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19518000 0! #19518500 1! #19518600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19519000 0! #19519500 1! #19519600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19520000 0! #19520500 1! #19520600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19521000 0! #19521500 1! #19521600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19522000 0! #19522500 1! #19522600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19523000 0! #19523500 1! #19523600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19524000 0! #19524500 1! #19524600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19525000 0! #19525500 1! #19525600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19526000 0! #19526500 1! #19526600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19527000 0! #19527500 1! #19527600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19528000 0! #19528500 1! #19528600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19529000 0! #19529500 1! #19529600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19530000 0! #19530500 1! #19530600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19531000 0! #19531500 1! #19531600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19532000 0! #19532500 1! #19532600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19533000 0! #19533500 1! #19533600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19534000 0! #19534500 1! #19534600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19535000 0! #19535500 1! #19535600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19536000 0! #19536500 1! #19536600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19537000 0! #19537500 1! #19537600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19538000 0! #19538500 1! #19538600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19539000 0! #19539500 1! #19539600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19540000 0! #19540500 1! #19540600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19541000 0! #19541500 1! #19541600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19542000 0! #19542500 1! #19542600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19543000 0! #19543500 1! #19543600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19544000 0! #19544500 1! #19544600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19545000 0! #19545500 1! #19545600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19546000 0! #19546500 1! #19546600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19547000 0! #19547500 1! #19547600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19548000 0! #19548500 1! #19548600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19549000 0! #19549500 1! #19549600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19550000 0! #19550500 1! #19550600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19551000 0! #19551500 1! #19551600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19552000 0! #19552500 1! #19552600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19553000 0! #19553500 1! #19553600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19554000 0! #19554500 1! #19554600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19555000 0! #19555500 1! #19555600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19556000 0! #19556500 1! #19556600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19557000 0! #19557500 1! #19557600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19558000 0! #19558500 1! #19558600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19559000 0! #19559500 1! #19559600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19560000 0! #19560500 1! #19560600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19561000 0! #19561500 1! #19561600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19562000 0! #19562500 1! #19562600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19563000 0! #19563500 1! #19563600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19564000 0! #19564500 1! #19564600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19565000 0! #19565500 1! #19565600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19566000 0! #19566500 1! #19566600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19567000 0! #19567500 1! #19567600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19568000 0! #19568500 1! #19568600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19569000 0! #19569500 1! #19569600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19570000 0! #19570500 1! #19570600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19571000 0! #19571500 1! #19571600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19572000 0! #19572500 1! #19572600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19573000 0! #19573500 1! #19573600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19574000 0! #19574500 1! #19574600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19575000 0! #19575500 1! #19575600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19576000 0! #19576500 1! #19576600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19577000 0! #19577500 1! #19577600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19578000 0! #19578500 1! #19578600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19579000 0! #19579500 1! #19579600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19580000 0! #19580500 1! #19580600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19581000 0! #19581500 1! #19581600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19582000 0! #19582500 1! #19582600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19583000 0! #19583500 1! #19583600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19584000 0! #19584500 1! #19584600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19585000 0! #19585500 1! #19585600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19586000 0! #19586500 1! #19586600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19587000 0! #19587500 1! #19587600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19588000 0! #19588500 1! #19588600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19589000 0! #19589500 1! #19589600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19590000 0! #19590500 1! #19590600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19591000 0! #19591500 1! #19591600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19592000 0! #19592500 1! #19592600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19593000 0! #19593500 1! #19593600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19594000 0! #19594500 1! #19594600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19595000 0! #19595500 1! #19595600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19596000 0! #19596500 1! #19596600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19597000 0! #19597500 1! #19597600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19598000 0! #19598500 1! #19598600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19599000 0! #19599500 1! #19599600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19600000 0! #19600500 1! #19600600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19601000 0! #19601500 1! #19601600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19602000 0! #19602500 1! #19602600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19603000 0! #19603500 1! #19603600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19604000 0! #19604500 1! #19604600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19605000 0! #19605500 1! #19605600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19606000 0! #19606500 1! #19606600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19607000 0! #19607500 1! #19607600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19608000 0! #19608500 1! #19608600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19609000 0! #19609500 1! #19609600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19610000 0! #19610500 1! #19610600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19611000 0! #19611500 1! #19611600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19612000 0! #19612500 1! #19612600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19613000 0! #19613500 1! #19613600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19614000 0! #19614500 1! #19614600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19615000 0! #19615500 1! #19615600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19616000 0! #19616500 1! #19616600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19617000 0! #19617500 1! #19617600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19618000 0! #19618500 1! #19618600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19619000 0! #19619500 1! #19619600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19620000 0! #19620500 1! #19620600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19621000 0! #19621500 1! #19621600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19622000 0! #19622500 1! #19622600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19623000 0! #19623500 1! #19623600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19624000 0! #19624500 1! #19624600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19625000 0! #19625500 1! #19625600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19626000 0! #19626500 1! #19626600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19627000 0! #19627500 1! #19627600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19628000 0! #19628500 1! #19628600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19629000 0! #19629500 1! #19629600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19630000 0! #19630500 1! #19630600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19631000 0! #19631500 1! #19631600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19632000 0! #19632500 1! #19632600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19633000 0! #19633500 1! #19633600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19634000 0! #19634500 1! #19634600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19635000 0! #19635500 1! #19635600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19636000 0! #19636500 1! #19636600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19637000 0! #19637500 1! #19637600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19638000 0! #19638500 1! #19638600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19639000 0! #19639500 1! #19639600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19640000 0! #19640500 1! #19640600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19641000 0! #19641500 1! #19641600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19642000 0! #19642500 1! #19642600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19643000 0! #19643500 1! #19643600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19644000 0! #19644500 1! #19644600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19645000 0! #19645500 1! #19645600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19646000 0! #19646500 1! #19646600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19647000 0! #19647500 1! #19647600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19648000 0! #19648500 1! #19648600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19649000 0! #19649500 1! #19649600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19650000 0! #19650500 1! #19650600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19651000 0! #19651500 1! #19651600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19652000 0! #19652500 1! #19652600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19653000 0! #19653500 1! #19653600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19654000 0! #19654500 1! #19654600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19655000 0! #19655500 1! #19655600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19656000 0! #19656500 1! #19656600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19657000 0! #19657500 1! #19657600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19658000 0! #19658500 1! #19658600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19659000 0! #19659500 1! #19659600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19660000 0! #19660500 1! #19660600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19661000 0! #19661500 1! #19661600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19662000 0! #19662500 1! #19662600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19663000 0! #19663500 1! #19663600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0Q 0O #19663700 1_ #19664000 0! #19664500 1! #19664600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19665000 0! #19665500 1! #19665600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19666000 0! #19666500 1! b1000011 C #19666600 b1000011 J xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19667000 0! #19667500 1! #19667600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19668000 0! #19668500 1! #19668600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19669000 0! #19669500 1! #19669600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19670000 0! #19670500 1! #19670600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19671000 0! #19671500 1! #19671600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19672000 0! #19672500 1! #19672600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19673000 0! #19673500 1! #19673600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19674000 0! #19674500 1! #19674600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19675000 0! #19675500 1! #19675600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19676000 0! #19676500 1! #19676600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19677000 0! #19677500 1! #19677600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19678000 0! #19678500 1! #19678600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19679000 0! #19679500 1! #19679600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19680000 0! #19680500 1! #19680600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19681000 0! #19681500 1! #19681600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19682000 0! #19682500 1! #19682600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19683000 0! #19683500 1! #19683600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19684000 0! #19684500 1! #19684600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19685000 0! #19685500 1! #19685600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19686000 0! #19686500 1! #19686600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19687000 0! #19687500 1! #19687600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19688000 0! #19688500 1! #19688600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19689000 0! #19689500 1! #19689600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19690000 0! #19690500 1! #19690600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19691000 0! #19691500 1! #19691600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19692000 0! #19692500 1! #19692600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19693000 0! #19693500 1! #19693600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19694000 0! #19694500 1! #19694600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19695000 0! #19695500 1! #19695600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19696000 0! #19696500 1! #19696600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19697000 0! #19697500 1! #19697600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19698000 0! #19698500 1! #19698600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19699000 0! #19699500 1! #19699600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19700000 0! #19700500 1! #19700600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19701000 0! #19701500 1! #19701600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19702000 0! #19702500 1! #19702600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19703000 0! #19703500 1! #19703600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19704000 0! #19704500 1! #19704600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19705000 0! #19705500 1! #19705600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19706000 0! #19706500 1! #19706600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19707000 0! #19707500 1! #19707600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19708000 0! #19708500 1! #19708600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19709000 0! #19709500 1! #19709600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19710000 0! #19710500 1! #19710600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19711000 0! #19711500 1! #19711600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19712000 0! #19712500 1! #19712600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19713000 0! #19713500 1! #19713600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19714000 0! #19714500 1! #19714600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #19715000 0! #19715500 1! #19715600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19716000 0! #19716500 1! #19716600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19717000 0! #19717500 1! #19717600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19718000 0! #19718500 1! #19718600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19719000 0! #19719500 1! #19719600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19720000 0! #19720500 1! #19720600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19721000 0! #19721500 1! #19721600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19722000 0! #19722500 1! #19722600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19723000 0! #19723500 1! #19723600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19724000 0! #19724500 1! #19724600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19725000 0! #19725500 1! #19725600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19726000 0! #19726500 1! #19726600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19727000 0! #19727500 1! #19727600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19728000 0! #19728500 1! #19728600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19729000 0! #19729500 1! #19729600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19730000 0! #19730500 1! #19730600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19731000 0! #19731500 1! #19731600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19732000 0! #19732500 1! #19732600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19733000 0! #19733500 1! #19733600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19734000 0! #19734500 1! #19734600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19735000 0! #19735500 1! #19735600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19736000 0! #19736500 1! #19736600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19737000 0! #19737500 1! #19737600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19738000 0! #19738500 1! #19738600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19739000 0! #19739500 1! #19739600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19740000 0! #19740500 1! #19740600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19741000 0! #19741500 1! #19741600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19742000 0! #19742500 1! #19742600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19743000 0! #19743500 1! #19743600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19744000 0! #19744500 1! #19744600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19745000 0! #19745500 1! #19745600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19746000 0! #19746500 1! #19746600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19747000 0! #19747500 1! #19747600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19748000 0! #19748500 1! #19748600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19749000 0! #19749500 1! #19749600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19750000 0! #19750500 1! #19750600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19751000 0! #19751500 1! #19751600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19752000 0! #19752500 1! #19752600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19753000 0! #19753500 1! #19753600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19754000 0! #19754500 1! #19754600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19755000 0! #19755500 1! #19755600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19756000 0! #19756500 1! #19756600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19757000 0! #19757500 1! #19757600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19758000 0! #19758500 1! #19758600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19759000 0! #19759500 1! #19759600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19760000 0! #19760500 1! #19760600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19761000 0! #19761500 1! #19761600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19762000 0! #19762500 1! #19762600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19763000 0! #19763500 1! #19763600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19764000 0! #19764500 1! #19764600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19765000 0! #19765500 1! #19765600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19766000 0! #19766500 1! #19766600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19767000 0! #19767500 1! #19767600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19768000 0! #19768500 1! #19768600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19769000 0! #19769500 1! #19769600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19770000 0! #19770500 1! #19770600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19771000 0! #19771500 1! #19771600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19772000 0! #19772500 1! #19772600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19773000 0! #19773500 1! #19773600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19774000 0! #19774500 1! #19774600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19775000 0! #19775500 1! #19775600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19776000 0! #19776500 1! #19776600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19777000 0! #19777500 1! #19777600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19778000 0! #19778500 1! #19778600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19779000 0! #19779500 1! #19779600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19780000 0! #19780500 1! #19780600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19781000 0! #19781500 1! #19781600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19782000 0! #19782500 1! #19782600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19783000 0! #19783500 1! #19783600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19784000 0! #19784500 1! #19784600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19785000 0! #19785500 1! #19785600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19786000 0! #19786500 1! #19786600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19787000 0! #19787500 1! #19787600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19788000 0! #19788500 1! #19788600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19789000 0! #19789500 1! #19789600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19790000 0! #19790500 1! #19790600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19791000 0! #19791500 1! #19791600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19792000 0! #19792500 1! #19792600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19793000 0! #19793500 1! #19793600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19794000 0! #19794500 1! #19794600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19795000 0! #19795500 1! #19795600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19796000 0! #19796500 1! #19796600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19797000 0! #19797500 1! #19797600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19798000 0! #19798500 1! #19798600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19799000 0! #19799500 1! #19799600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19800000 0! #19800500 1! #19800600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19801000 0! #19801500 1! #19801600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19802000 0! #19802500 1! #19802600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19803000 0! #19803500 1! #19803600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19804000 0! #19804500 1! #19804600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19805000 0! #19805500 1! #19805600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19806000 0! #19806500 1! #19806600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19807000 0! #19807500 1! #19807600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19808000 0! #19808500 1! #19808600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19809000 0! #19809500 1! #19809600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19810000 0! #19810500 1! #19810600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19811000 0! #19811500 1! #19811600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19812000 0! #19812500 1! #19812600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19813000 0! #19813500 1! #19813600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19814000 0! #19814500 1! #19814600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19815000 0! #19815500 1! #19815600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19816000 0! #19816500 1! #19816600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1Q 1O #19816700 0a #19817000 0! #19817500 1! #19817600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19818000 0! #19818500 1! #19818600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19819000 0! #19819500 1! #19819600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19820000 0! #19820500 1! #19820600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19821000 0! #19821500 1! #19821600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19822000 0! #19822500 1! #19822600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19823000 0! #19823500 1! #19823600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19824000 0! #19824500 1! #19824600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19825000 0! #19825500 1! #19825600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19826000 0! #19826500 1! #19826600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19827000 0! #19827500 1! #19827600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19828000 0! #19828500 1! #19828600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19829000 0! #19829500 1! #19829600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19830000 0! #19830500 1! #19830600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19831000 0! #19831500 1! #19831600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19832000 0! #19832500 1! #19832600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19833000 0! #19833500 1! #19833600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19834000 0! #19834500 1! #19834600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19835000 0! #19835500 1! #19835600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19836000 0! #19836500 1! #19836600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19837000 0! #19837500 1! #19837600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19838000 0! #19838500 1! #19838600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19839000 0! #19839500 1! #19839600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19840000 0! #19840500 1! #19840600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19841000 0! #19841500 1! #19841600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19842000 0! #19842500 1! #19842600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19843000 0! #19843500 1! #19843600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19844000 0! #19844500 1! #19844600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19845000 0! #19845500 1! #19845600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19846000 0! #19846500 1! #19846600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19847000 0! #19847500 1! #19847600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19848000 0! #19848500 1! #19848600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19849000 0! #19849500 1! #19849600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19850000 0! #19850500 1! #19850600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19851000 0! #19851500 1! #19851600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19852000 0! #19852500 1! #19852600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19853000 0! #19853500 1! #19853600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19854000 0! #19854500 1! #19854600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19855000 0! #19855500 1! #19855600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19856000 0! #19856500 1! #19856600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19857000 0! #19857500 1! #19857600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19858000 0! #19858500 1! #19858600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19859000 0! #19859500 1! #19859600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19860000 0! #19860500 1! #19860600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19861000 0! #19861500 1! #19861600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19862000 0! #19862500 1! #19862600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19863000 0! #19863500 1! #19863600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19864000 0! #19864500 1! #19864600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19865000 0! #19865500 1! #19865600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19866000 0! #19866500 1! #19866600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19867000 0! #19867500 1! #19867600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #19867700 1` b11010001 c #19868000 0! #19868500 1! #19868600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19869000 0! #19869500 1! #19869600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19870000 0! #19870500 1! #19870600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19871000 0! #19871500 1! #19871600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19872000 0! #19872500 1! #19872600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19873000 0! #19873500 1! #19873600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19874000 0! #19874500 1! #19874600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19875000 0! #19875500 1! #19875600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19876000 0! #19876500 1! #19876600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19877000 0! #19877500 1! #19877600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19878000 0! #19878500 1! #19878600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19879000 0! #19879500 1! #19879600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19880000 0! #19880500 1! #19880600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19881000 0! #19881500 1! #19881600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19882000 0! #19882500 1! #19882600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19883000 0! #19883500 1! #19883600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19884000 0! #19884500 1! #19884600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19885000 0! #19885500 1! #19885600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19886000 0! #19886500 1! #19886600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19887000 0! #19887500 1! #19887600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19888000 0! #19888500 1! #19888600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19889000 0! #19889500 1! #19889600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19890000 0! #19890500 1! #19890600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19891000 0! #19891500 1! #19891600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19892000 0! #19892500 1! #19892600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19893000 0! #19893500 1! #19893600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19894000 0! #19894500 1! #19894600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19895000 0! #19895500 1! #19895600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19896000 0! #19896500 1! #19896600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19897000 0! #19897500 1! #19897600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19898000 0! #19898500 1! #19898600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19899000 0! #19899500 1! #19899600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19900000 0! #19900500 1! #19900600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19901000 0! #19901500 1! #19901600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19902000 0! #19902500 1! #19902600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19903000 0! #19903500 1! #19903600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19904000 0! #19904500 1! #19904600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19905000 0! #19905500 1! #19905600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19906000 0! #19906500 1! #19906600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19907000 0! #19907500 1! #19907600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19908000 0! #19908500 1! #19908600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19909000 0! #19909500 1! #19909600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19910000 0! #19910500 1! #19910600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19911000 0! #19911500 1! #19911600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19912000 0! #19912500 1! #19912600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19913000 0! #19913500 1! #19913600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19914000 0! #19914500 1! #19914600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19915000 0! #19915500 1! #19915600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19916000 0! #19916500 1! #19916600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19917000 0! #19917500 1! #19917600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19918000 0! #19918500 1! #19918600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19919000 0! #19919500 1! #19919600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19920000 0! #19920500 1! #19920600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19921000 0! #19921500 1! #19921600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19922000 0! #19922500 1! #19922600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19923000 0! #19923500 1! #19923600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19924000 0! #19924500 1! #19924600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19925000 0! #19925500 1! #19925600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19926000 0! #19926500 1! #19926600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19927000 0! #19927500 1! #19927600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19928000 0! #19928500 1! #19928600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19929000 0! #19929500 1! #19929600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19930000 0! #19930500 1! #19930600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19931000 0! #19931500 1! #19931600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19932000 0! #19932500 1! #19932600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19933000 0! #19933500 1! #19933600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19934000 0! #19934500 1! #19934600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19935000 0! #19935500 1! #19935600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19936000 0! #19936500 1! #19936600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19937000 0! #19937500 1! #19937600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19938000 0! #19938500 1! #19938600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19939000 0! #19939500 1! #19939600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19940000 0! #19940500 1! #19940600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19941000 0! #19941500 1! #19941600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19942000 0! #19942500 1! #19942600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19943000 0! #19943500 1! #19943600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19944000 0! #19944500 1! #19944600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19945000 0! #19945500 1! #19945600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19946000 0! #19946500 1! #19946600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19947000 0! #19947500 1! #19947600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19948000 0! #19948500 1! #19948600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19949000 0! #19949500 1! #19949600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19950000 0! #19950500 1! #19950600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19951000 0! #19951500 1! #19951600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19952000 0! #19952500 1! #19952600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19953000 0! #19953500 1! #19953600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19954000 0! #19954500 1! #19954600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19955000 0! #19955500 1! #19955600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19956000 0! #19956500 1! #19956600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19957000 0! #19957500 1! #19957600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19958000 0! #19958500 1! #19958600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19959000 0! #19959500 1! #19959600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19960000 0! #19960500 1! #19960600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19961000 0! #19961500 1! #19961600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19962000 0! #19962500 1! #19962600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19963000 0! #19963500 1! #19963600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19964000 0! #19964500 1! #19964600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19965000 0! #19965500 1! #19965600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19966000 0! #19966500 1! #19966600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19967000 0! #19967500 1! #19967600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19968000 0! #19968500 1! #19968600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19969000 0! #19969500 1! #19969600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #19969700 0i #19970000 0! #19970500 1! #19970600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19971000 0! #19971500 1! #19971600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19972000 0! #19972500 1! #19972600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19973000 0! #19973500 1! #19973600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19974000 0! #19974500 1! #19974600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19975000 0! #19975500 1! #19975600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19976000 0! #19976500 1! #19976600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19977000 0! #19977500 1! #19977600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19978000 0! #19978500 1! #19978600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19979000 0! #19979500 1! #19979600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19980000 0! #19980500 1! #19980600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19981000 0! #19981500 1! #19981600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19982000 0! #19982500 1! #19982600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19983000 0! #19983500 1! #19983600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19984000 0! #19984500 1! #19984600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19985000 0! #19985500 1! #19985600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19986000 0! #19986500 1! #19986600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19987000 0! #19987500 1! #19987600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19988000 0! #19988500 1! #19988600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19989000 0! #19989500 1! #19989600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19990000 0! #19990500 1! #19990600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19991000 0! #19991500 1! #19991600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19992000 0! #19992500 1! #19992600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19993000 0! #19993500 1! #19993600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19994000 0! #19994500 1! #19994600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19995000 0! #19995500 1! #19995600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19996000 0! #19996500 1! #19996600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19997000 0! #19997500 1! #19997600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #19998000 0! #19998500 1! #19998600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #19999000 0! #19999500 1! #19999600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20000000 0! #20000500 1! #20000600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20001000 0! #20001500 1! #20001600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20002000 0! #20002500 1! #20002600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20003000 0! #20003500 1! #20003600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20004000 0! #20004500 1! #20004600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20005000 0! #20005500 1! #20005600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20006000 0! #20006500 1! #20006600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20007000 0! #20007500 1! #20007600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20008000 0! #20008500 1! #20008600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20009000 0! #20009500 1! #20009600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20010000 0! #20010500 1! #20010600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20011000 0! #20011500 1! #20011600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20012000 0! #20012500 1! #20012600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20013000 0! #20013500 1! #20013600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20014000 0! #20014500 1! #20014600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20015000 0! #20015500 1! #20015600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20016000 0! #20016500 1! #20016600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20017000 0! #20017500 1! #20017600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20018000 0! #20018500 1! #20018600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20019000 0! #20019500 1! #20019600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20020000 0! #20020500 1! #20020600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20021000 0! #20021500 1! #20021600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20022000 0! #20022500 1! #20022600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20023000 0! #20023500 1! #20023600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20024000 0! #20024500 1! #20024600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20025000 0! #20025500 1! #20025600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20026000 0! #20026500 1! #20026600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20027000 0! #20027500 1! #20027600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20028000 0! #20028500 1! #20028600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20029000 0! #20029500 1! #20029600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20030000 0! #20030500 1! #20030600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20031000 0! #20031500 1! #20031600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20032000 0! #20032500 1! #20032600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20033000 0! #20033500 1! #20033600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20034000 0! #20034500 1! #20034600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20035000 0! #20035500 1! #20035600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20036000 0! #20036500 1! #20036600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20037000 0! #20037500 1! #20037600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20038000 0! #20038500 1! #20038600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20039000 0! #20039500 1! #20039600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20040000 0! #20040500 1! #20040600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20041000 0! #20041500 1! #20041600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20042000 0! #20042500 1! #20042600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20043000 0! #20043500 1! #20043600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20044000 0! #20044500 1! #20044600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20045000 0! #20045500 1! #20045600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20046000 0! #20046500 1! #20046600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20047000 0! #20047500 1! #20047600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20048000 0! #20048500 1! #20048600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20049000 0! #20049500 1! #20049600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20050000 0! #20050500 1! #20050600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20051000 0! #20051500 1! #20051600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20052000 0! #20052500 1! #20052600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20053000 0! #20053500 1! #20053600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20054000 0! #20054500 1! #20054600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20055000 0! #20055500 1! #20055600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20056000 0! #20056500 1! #20056600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20057000 0! #20057500 1! #20057600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20058000 0! #20058500 1! #20058600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20059000 0! #20059500 1! #20059600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20060000 0! #20060500 1! #20060600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20061000 0! #20061500 1! #20061600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20062000 0! #20062500 1! #20062600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20063000 0! #20063500 1! #20063600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20064000 0! #20064500 1! #20064600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20065000 0! #20065500 1! #20065600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20066000 0! #20066500 1! #20066600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20067000 0! #20067500 1! #20067600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20068000 0! #20068500 1! #20068600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20069000 0! #20069500 1! #20069600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20070000 0! #20070500 1! #20070600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20071000 0! #20071500 1! #20071600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0Q 0O #20071700 0_ 0f #20072000 0! #20072500 1! #20072600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20073000 0! #20073500 1! #20073600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20074000 0! #20074500 1! #20074600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20075000 0! #20075500 1! #20075600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20076000 0! #20076500 1! #20076600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20077000 0! #20077500 1! #20077600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20078000 0! #20078500 1! #20078600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20079000 0! #20079500 1! #20079600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20080000 0! #20080500 1! #20080600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20081000 0! #20081500 1! #20081600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20082000 0! #20082500 1! #20082600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20083000 0! #20083500 1! #20083600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20084000 0! #20084500 1! #20084600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20085000 0! #20085500 1! #20085600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20086000 0! #20086500 1! #20086600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20087000 0! #20087500 1! #20087600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20088000 0! #20088500 1! #20088600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20089000 0! #20089500 1! #20089600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20090000 0! #20090500 1! #20090600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20091000 0! #20091500 1! #20091600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20092000 0! #20092500 1! #20092600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20093000 0! #20093500 1! #20093600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20094000 0! #20094500 1! #20094600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20095000 0! #20095500 1! #20095600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20096000 0! #20096500 1! #20096600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20097000 0! #20097500 1! #20097600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20098000 0! #20098500 1! #20098600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20099000 0! #20099500 1! #20099600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20100000 0! #20100500 1! #20100600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20101000 0! #20101500 1! #20101600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20102000 0! #20102500 1! #20102600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20103000 0! #20103500 1! #20103600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20104000 0! #20104500 1! #20104600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20105000 0! #20105500 1! #20105600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20106000 0! #20106500 1! #20106600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20107000 0! #20107500 1! #20107600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20108000 0! #20108500 1! #20108600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20109000 0! #20109500 1! #20109600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20110000 0! #20110500 1! #20110600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20111000 0! #20111500 1! #20111600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20112000 0! #20112500 1! #20112600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20113000 0! #20113500 1! #20113600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20114000 0! #20114500 1! #20114600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20115000 0! #20115500 1! #20115600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20116000 0! #20116500 1! #20116600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20117000 0! #20117500 1! #20117600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20118000 0! #20118500 1! #20118600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20119000 0! #20119500 1! #20119600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20120000 0! #20120500 1! #20120600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20121000 0! #20121500 1! #20121600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20122000 0! #20122500 1! #20122600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #20122700 0` b110 g b10100010 c #20123000 0! #20123500 1! #20123600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20124000 0! #20124500 1! #20124600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20125000 0! #20125500 1! #20125600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20126000 0! #20126500 1! #20126600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20127000 0! #20127500 1! #20127600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20128000 0! #20128500 1! #20128600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20129000 0! #20129500 1! #20129600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20130000 0! #20130500 1! #20130600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20131000 0! #20131500 1! #20131600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20132000 0! #20132500 1! #20132600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20133000 0! #20133500 1! #20133600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20134000 0! #20134500 1! #20134600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20135000 0! #20135500 1! #20135600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20136000 0! #20136500 1! #20136600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20137000 0! #20137500 1! #20137600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20138000 0! #20138500 1! #20138600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20139000 0! #20139500 1! #20139600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20140000 0! #20140500 1! #20140600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20141000 0! #20141500 1! #20141600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20142000 0! #20142500 1! #20142600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20143000 0! #20143500 1! #20143600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20144000 0! #20144500 1! #20144600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20145000 0! #20145500 1! #20145600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20146000 0! #20146500 1! #20146600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20147000 0! #20147500 1! #20147600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20148000 0! #20148500 1! #20148600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20149000 0! #20149500 1! #20149600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20150000 0! #20150500 1! #20150600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20151000 0! #20151500 1! #20151600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20152000 0! #20152500 1! #20152600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20153000 0! #20153500 1! #20153600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20154000 0! #20154500 1! #20154600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20155000 0! #20155500 1! #20155600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20156000 0! #20156500 1! #20156600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20157000 0! #20157500 1! #20157600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20158000 0! #20158500 1! #20158600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20159000 0! #20159500 1! #20159600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20160000 0! #20160500 1! #20160600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20161000 0! #20161500 1! #20161600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20162000 0! #20162500 1! #20162600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20163000 0! #20163500 1! #20163600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20164000 0! #20164500 1! #20164600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20165000 0! #20165500 1! #20165600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20166000 0! #20166500 1! #20166600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20167000 0! #20167500 1! #20167600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20168000 0! #20168500 1! #20168600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20169000 0! #20169500 1! #20169600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20170000 0! #20170500 1! #20170600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20171000 0! #20171500 1! #20171600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20172000 0! #20172500 1! #20172600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20173000 0! #20173500 1! #20173600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20174000 0! #20174500 1! #20174600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20175000 0! #20175500 1! #20175600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20176000 0! #20176500 1! #20176600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20177000 0! #20177500 1! #20177600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20178000 0! #20178500 1! #20178600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20179000 0! #20179500 1! #20179600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20180000 0! #20180500 1! #20180600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20181000 0! #20181500 1! #20181600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20182000 0! #20182500 1! #20182600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20183000 0! #20183500 1! #20183600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20184000 0! #20184500 1! #20184600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20185000 0! #20185500 1! #20185600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20186000 0! #20186500 1! #20186600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20187000 0! #20187500 1! #20187600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20188000 0! #20188500 1! #20188600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20189000 0! #20189500 1! #20189600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20190000 0! #20190500 1! #20190600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20191000 0! #20191500 1! #20191600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20192000 0! #20192500 1! #20192600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20193000 0! #20193500 1! #20193600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20194000 0! #20194500 1! #20194600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20195000 0! #20195500 1! #20195600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20196000 0! #20196500 1! #20196600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20197000 0! #20197500 1! #20197600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20198000 0! #20198500 1! #20198600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20199000 0! #20199500 1! #20199600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20200000 0! #20200500 1! #20200600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20201000 0! #20201500 1! #20201600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20202000 0! #20202500 1! #20202600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20203000 0! #20203500 1! #20203600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20204000 0! #20204500 1! #20204600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20205000 0! #20205500 1! #20205600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20206000 0! #20206500 1! #20206600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20207000 0! #20207500 1! #20207600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20208000 0! #20208500 1! #20208600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20209000 0! #20209500 1! #20209600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20210000 0! #20210500 1! #20210600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20211000 0! #20211500 1! #20211600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20212000 0! #20212500 1! #20212600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20213000 0! #20213500 1! #20213600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20214000 0! #20214500 1! #20214600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20215000 0! #20215500 1! #20215600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20216000 0! #20216500 1! #20216600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20217000 0! #20217500 1! #20217600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20218000 0! #20218500 1! #20218600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20219000 0! #20219500 1! #20219600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20220000 0! #20220500 1! #20220600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20221000 0! #20221500 1! #20221600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20222000 0! #20222500 1! #20222600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20223000 0! #20223500 1! #20223600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20224000 0! #20224500 1! #20224600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #20225000 0! #20225500 1! #20225600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20226000 0! #20226500 1! #20226600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20227000 0! #20227500 1! #20227600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20228000 0! #20228500 1! #20228600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20229000 0! #20229500 1! #20229600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20230000 0! #20230500 1! #20230600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20231000 0! #20231500 1! #20231600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20232000 0! #20232500 1! #20232600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20233000 0! #20233500 1! #20233600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20234000 0! #20234500 1! #20234600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20235000 0! #20235500 1! #20235600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20236000 0! #20236500 1! #20236600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20237000 0! #20237500 1! #20237600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20238000 0! #20238500 1! #20238600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20239000 0! #20239500 1! #20239600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20240000 0! #20240500 1! #20240600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20241000 0! #20241500 1! #20241600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20242000 0! #20242500 1! #20242600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20243000 0! #20243500 1! #20243600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20244000 0! #20244500 1! #20244600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20245000 0! #20245500 1! #20245600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20246000 0! #20246500 1! #20246600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20247000 0! #20247500 1! #20247600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20248000 0! #20248500 1! #20248600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20249000 0! #20249500 1! #20249600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20250000 0! #20250500 1! #20250600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20251000 0! #20251500 1! #20251600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20252000 0! #20252500 1! #20252600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20253000 0! #20253500 1! #20253600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20254000 0! #20254500 1! #20254600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20255000 0! #20255500 1! #20255600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20256000 0! #20256500 1! #20256600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20257000 0! #20257500 1! #20257600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20258000 0! #20258500 1! #20258600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20259000 0! #20259500 1! #20259600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20260000 0! #20260500 1! #20260600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20261000 0! #20261500 1! #20261600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20262000 0! #20262500 1! #20262600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20263000 0! #20263500 1! #20263600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20264000 0! #20264500 1! #20264600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20265000 0! #20265500 1! #20265600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20266000 0! #20266500 1! #20266600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20267000 0! #20267500 1! #20267600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20268000 0! #20268500 1! #20268600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20269000 0! #20269500 1! #20269600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20270000 0! #20270500 1! #20270600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20271000 0! #20271500 1! #20271600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20272000 0! #20272500 1! #20272600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20273000 0! #20273500 1! #20273600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20274000 0! #20274500 1! #20274600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20275000 0! #20275500 1! #20275600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20276000 0! #20276500 1! #20276600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20277000 0! #20277500 1! #20277600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20278000 0! #20278500 1! #20278600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20279000 0! #20279500 1! #20279600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20280000 0! #20280500 1! #20280600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20281000 0! #20281500 1! #20281600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20282000 0! #20282500 1! #20282600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20283000 0! #20283500 1! #20283600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20284000 0! #20284500 1! #20284600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20285000 0! #20285500 1! #20285600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20286000 0! #20286500 1! #20286600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20287000 0! #20287500 1! #20287600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20288000 0! #20288500 1! #20288600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20289000 0! #20289500 1! #20289600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20290000 0! #20290500 1! #20290600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20291000 0! #20291500 1! #20291600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20292000 0! #20292500 1! #20292600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20293000 0! #20293500 1! #20293600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20294000 0! #20294500 1! #20294600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20295000 0! #20295500 1! #20295600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20296000 0! #20296500 1! #20296600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20297000 0! #20297500 1! #20297600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20298000 0! #20298500 1! #20298600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20299000 0! #20299500 1! #20299600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20300000 0! #20300500 1! #20300600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20301000 0! #20301500 1! #20301600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20302000 0! #20302500 1! #20302600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20303000 0! #20303500 1! #20303600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20304000 0! #20304500 1! #20304600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20305000 0! #20305500 1! #20305600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20306000 0! #20306500 1! #20306600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20307000 0! #20307500 1! #20307600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20308000 0! #20308500 1! #20308600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20309000 0! #20309500 1! #20309600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20310000 0! #20310500 1! #20310600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20311000 0! #20311500 1! #20311600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20312000 0! #20312500 1! #20312600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20313000 0! #20313500 1! #20313600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20314000 0! #20314500 1! #20314600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20315000 0! #20315500 1! #20315600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20316000 0! #20316500 1! #20316600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20317000 0! #20317500 1! #20317600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20318000 0! #20318500 1! #20318600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20319000 0! #20319500 1! #20319600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20320000 0! #20320500 1! #20320600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20321000 0! #20321500 1! #20321600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20322000 0! #20322500 1! #20322600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20323000 0! #20323500 1! #20323600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20324000 0! #20324500 1! #20324600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20325000 0! #20325500 1! #20325600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20326000 0! #20326500 1! #20326600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1Q 1O #20327000 0! #20327500 1! #20327600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20328000 0! #20328500 1! #20328600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20329000 0! #20329500 1! #20329600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20330000 0! #20330500 1! #20330600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20331000 0! #20331500 1! #20331600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20332000 0! #20332500 1! #20332600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20333000 0! #20333500 1! #20333600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20334000 0! #20334500 1! #20334600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20335000 0! #20335500 1! #20335600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20336000 0! #20336500 1! #20336600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20337000 0! #20337500 1! #20337600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20338000 0! #20338500 1! #20338600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20339000 0! #20339500 1! #20339600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20340000 0! #20340500 1! #20340600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20341000 0! #20341500 1! #20341600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20342000 0! #20342500 1! #20342600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20343000 0! #20343500 1! #20343600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20344000 0! #20344500 1! #20344600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20345000 0! #20345500 1! #20345600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20346000 0! #20346500 1! #20346600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20347000 0! #20347500 1! #20347600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20348000 0! #20348500 1! #20348600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20349000 0! #20349500 1! #20349600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20350000 0! #20350500 1! #20350600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20351000 0! #20351500 1! #20351600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20352000 0! #20352500 1! #20352600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20353000 0! #20353500 1! #20353600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20354000 0! #20354500 1! #20354600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20355000 0! #20355500 1! #20355600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20356000 0! #20356500 1! #20356600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20357000 0! #20357500 1! #20357600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20358000 0! #20358500 1! #20358600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20359000 0! #20359500 1! #20359600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20360000 0! #20360500 1! #20360600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20361000 0! #20361500 1! #20361600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20362000 0! #20362500 1! #20362600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20363000 0! #20363500 1! #20363600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20364000 0! #20364500 1! #20364600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20365000 0! #20365500 1! #20365600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20366000 0! #20366500 1! #20366600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20367000 0! #20367500 1! #20367600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20368000 0! #20368500 1! #20368600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20369000 0! #20369500 1! #20369600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20370000 0! #20370500 1! #20370600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20371000 0! #20371500 1! #20371600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20372000 0! #20372500 1! #20372600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20373000 0! #20373500 1! #20373600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20374000 0! #20374500 1! #20374600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20375000 0! #20375500 1! #20375600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20376000 0! #20376500 1! #20376600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20377000 0! #20377500 1! #20377600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #20377700 b101 g b1000101 c #20378000 0! #20378500 1! #20378600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20379000 0! #20379500 1! #20379600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20380000 0! #20380500 1! #20380600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20381000 0! #20381500 1! #20381600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20382000 0! #20382500 1! #20382600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20383000 0! #20383500 1! #20383600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20384000 0! #20384500 1! #20384600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20385000 0! #20385500 1! #20385600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20386000 0! #20386500 1! #20386600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20387000 0! #20387500 1! #20387600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20388000 0! #20388500 1! #20388600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20389000 0! #20389500 1! #20389600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20390000 0! #20390500 1! #20390600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20391000 0! #20391500 1! #20391600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20392000 0! #20392500 1! #20392600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20393000 0! #20393500 1! #20393600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20394000 0! #20394500 1! #20394600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20395000 0! #20395500 1! #20395600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20396000 0! #20396500 1! #20396600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20397000 0! #20397500 1! #20397600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20398000 0! #20398500 1! #20398600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20399000 0! #20399500 1! #20399600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20400000 0! #20400500 1! #20400600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20401000 0! #20401500 1! #20401600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20402000 0! #20402500 1! #20402600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20403000 0! #20403500 1! #20403600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20404000 0! #20404500 1! #20404600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20405000 0! #20405500 1! #20405600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20406000 0! #20406500 1! #20406600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20407000 0! #20407500 1! #20407600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20408000 0! #20408500 1! #20408600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20409000 0! #20409500 1! #20409600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20410000 0! #20410500 1! #20410600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20411000 0! #20411500 1! #20411600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20412000 0! #20412500 1! #20412600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20413000 0! #20413500 1! #20413600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20414000 0! #20414500 1! #20414600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20415000 0! #20415500 1! #20415600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20416000 0! #20416500 1! #20416600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20417000 0! #20417500 1! #20417600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20418000 0! #20418500 1! #20418600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20419000 0! #20419500 1! #20419600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20420000 0! #20420500 1! #20420600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20421000 0! #20421500 1! #20421600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20422000 0! #20422500 1! #20422600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20423000 0! #20423500 1! #20423600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20424000 0! #20424500 1! #20424600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20425000 0! #20425500 1! #20425600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20426000 0! #20426500 1! #20426600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20427000 0! #20427500 1! #20427600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20428000 0! #20428500 1! #20428600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20429000 0! #20429500 1! #20429600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20430000 0! #20430500 1! #20430600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20431000 0! #20431500 1! #20431600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20432000 0! #20432500 1! #20432600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20433000 0! #20433500 1! #20433600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20434000 0! #20434500 1! #20434600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20435000 0! #20435500 1! #20435600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20436000 0! #20436500 1! #20436600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20437000 0! #20437500 1! #20437600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20438000 0! #20438500 1! #20438600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20439000 0! #20439500 1! #20439600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20440000 0! #20440500 1! #20440600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20441000 0! #20441500 1! #20441600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20442000 0! #20442500 1! #20442600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20443000 0! #20443500 1! #20443600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20444000 0! #20444500 1! #20444600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20445000 0! #20445500 1! #20445600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20446000 0! #20446500 1! #20446600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20447000 0! #20447500 1! #20447600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20448000 0! #20448500 1! #20448600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20449000 0! #20449500 1! #20449600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20450000 0! #20450500 1! #20450600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20451000 0! #20451500 1! #20451600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20452000 0! #20452500 1! #20452600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20453000 0! #20453500 1! #20453600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20454000 0! #20454500 1! #20454600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20455000 0! #20455500 1! #20455600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20456000 0! #20456500 1! #20456600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20457000 0! #20457500 1! #20457600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20458000 0! #20458500 1! #20458600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20459000 0! #20459500 1! #20459600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20460000 0! #20460500 1! #20460600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20461000 0! #20461500 1! #20461600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20462000 0! #20462500 1! #20462600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20463000 0! #20463500 1! #20463600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20464000 0! #20464500 1! #20464600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20465000 0! #20465500 1! #20465600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20466000 0! #20466500 1! #20466600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20467000 0! #20467500 1! #20467600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20468000 0! #20468500 1! #20468600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20469000 0! #20469500 1! #20469600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20470000 0! #20470500 1! #20470600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20471000 0! #20471500 1! #20471600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20472000 0! #20472500 1! #20472600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20473000 0! #20473500 1! #20473600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20474000 0! #20474500 1! #20474600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20475000 0! #20475500 1! #20475600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20476000 0! #20476500 1! #20476600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20477000 0! #20477500 1! #20477600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20478000 0! #20478500 1! #20478600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20479000 0! #20479500 1! #20479600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #20480000 0! #20480500 1! #20480600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20481000 0! #20481500 1! #20481600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20482000 0! #20482500 1! #20482600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20483000 0! #20483500 1! #20483600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20484000 0! #20484500 1! #20484600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20485000 0! #20485500 1! #20485600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20486000 0! #20486500 1! #20486600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20487000 0! #20487500 1! #20487600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20488000 0! #20488500 1! #20488600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20489000 0! #20489500 1! #20489600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20490000 0! #20490500 1! #20490600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20491000 0! #20491500 1! #20491600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20492000 0! #20492500 1! #20492600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20493000 0! #20493500 1! #20493600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20494000 0! #20494500 1! #20494600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20495000 0! #20495500 1! #20495600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20496000 0! #20496500 1! #20496600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20497000 0! #20497500 1! #20497600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20498000 0! #20498500 1! #20498600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20499000 0! #20499500 1! #20499600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20500000 0! #20500500 1! #20500600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20501000 0! #20501500 1! #20501600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20502000 0! #20502500 1! #20502600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20503000 0! #20503500 1! #20503600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20504000 0! #20504500 1! #20504600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20505000 0! #20505500 1! #20505600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20506000 0! #20506500 1! #20506600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20507000 0! #20507500 1! #20507600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20508000 0! #20508500 1! #20508600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20509000 0! #20509500 1! #20509600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20510000 0! #20510500 1! #20510600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20511000 0! #20511500 1! #20511600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20512000 0! #20512500 1! #20512600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20513000 0! #20513500 1! #20513600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20514000 0! #20514500 1! #20514600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20515000 0! #20515500 1! #20515600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20516000 0! #20516500 1! #20516600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20517000 0! #20517500 1! #20517600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20518000 0! #20518500 1! #20518600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20519000 0! #20519500 1! #20519600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20520000 0! #20520500 1! #20520600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20521000 0! #20521500 1! #20521600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20522000 0! #20522500 1! #20522600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20523000 0! #20523500 1! #20523600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20524000 0! #20524500 1! #20524600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20525000 0! #20525500 1! #20525600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20526000 0! #20526500 1! #20526600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20527000 0! #20527500 1! #20527600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20528000 0! #20528500 1! #20528600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20529000 0! #20529500 1! #20529600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20530000 0! #20530500 1! #20530600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20531000 0! #20531500 1! #20531600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20532000 0! #20532500 1! #20532600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20533000 0! #20533500 1! #20533600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20534000 0! #20534500 1! #20534600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20535000 0! #20535500 1! #20535600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20536000 0! #20536500 1! #20536600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20537000 0! #20537500 1! #20537600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20538000 0! #20538500 1! #20538600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20539000 0! #20539500 1! #20539600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20540000 0! #20540500 1! #20540600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20541000 0! #20541500 1! #20541600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20542000 0! #20542500 1! #20542600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20543000 0! #20543500 1! #20543600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20544000 0! #20544500 1! #20544600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20545000 0! #20545500 1! #20545600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20546000 0! #20546500 1! #20546600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20547000 0! #20547500 1! #20547600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20548000 0! #20548500 1! #20548600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20549000 0! #20549500 1! #20549600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20550000 0! #20550500 1! #20550600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20551000 0! #20551500 1! #20551600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20552000 0! #20552500 1! #20552600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20553000 0! #20553500 1! #20553600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20554000 0! #20554500 1! #20554600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20555000 0! #20555500 1! #20555600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20556000 0! #20556500 1! #20556600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20557000 0! #20557500 1! #20557600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20558000 0! #20558500 1! #20558600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20559000 0! #20559500 1! #20559600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20560000 0! #20560500 1! #20560600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20561000 0! #20561500 1! #20561600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20562000 0! #20562500 1! #20562600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20563000 0! #20563500 1! #20563600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20564000 0! #20564500 1! #20564600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20565000 0! #20565500 1! #20565600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20566000 0! #20566500 1! #20566600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20567000 0! #20567500 1! #20567600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20568000 0! #20568500 1! #20568600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20569000 0! #20569500 1! #20569600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20570000 0! #20570500 1! #20570600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20571000 0! #20571500 1! #20571600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20572000 0! #20572500 1! #20572600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20573000 0! #20573500 1! #20573600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20574000 0! #20574500 1! #20574600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20575000 0! #20575500 1! #20575600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20576000 0! #20576500 1! #20576600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20577000 0! #20577500 1! #20577600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20578000 0! #20578500 1! #20578600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20579000 0! #20579500 1! #20579600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20580000 0! #20580500 1! #20580600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20581000 0! #20581500 1! #20581600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0Q 0O #20582000 0! #20582500 1! #20582600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20583000 0! #20583500 1! #20583600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20584000 0! #20584500 1! #20584600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20585000 0! #20585500 1! #20585600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20586000 0! #20586500 1! #20586600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20587000 0! #20587500 1! #20587600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20588000 0! #20588500 1! #20588600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20589000 0! #20589500 1! #20589600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20590000 0! #20590500 1! #20590600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20591000 0! #20591500 1! #20591600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20592000 0! #20592500 1! #20592600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20593000 0! #20593500 1! #20593600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20594000 0! #20594500 1! #20594600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20595000 0! #20595500 1! #20595600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20596000 0! #20596500 1! #20596600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20597000 0! #20597500 1! #20597600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20598000 0! #20598500 1! #20598600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20599000 0! #20599500 1! #20599600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20600000 0! #20600500 1! #20600600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20601000 0! #20601500 1! #20601600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20602000 0! #20602500 1! #20602600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20603000 0! #20603500 1! #20603600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20604000 0! #20604500 1! #20604600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20605000 0! #20605500 1! #20605600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20606000 0! #20606500 1! #20606600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20607000 0! #20607500 1! #20607600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20608000 0! #20608500 1! #20608600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20609000 0! #20609500 1! #20609600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20610000 0! #20610500 1! #20610600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20611000 0! #20611500 1! #20611600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20612000 0! #20612500 1! #20612600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20613000 0! #20613500 1! #20613600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20614000 0! #20614500 1! #20614600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20615000 0! #20615500 1! #20615600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20616000 0! #20616500 1! #20616600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20617000 0! #20617500 1! #20617600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20618000 0! #20618500 1! #20618600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20619000 0! #20619500 1! #20619600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20620000 0! #20620500 1! #20620600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20621000 0! #20621500 1! #20621600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20622000 0! #20622500 1! #20622600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20623000 0! #20623500 1! #20623600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20624000 0! #20624500 1! #20624600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20625000 0! #20625500 1! #20625600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20626000 0! #20626500 1! #20626600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20627000 0! #20627500 1! #20627600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20628000 0! #20628500 1! #20628600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20629000 0! #20629500 1! #20629600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20630000 0! #20630500 1! #20630600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20631000 0! #20631500 1! #20631600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20632000 0! #20632500 1! #20632600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #20632700 b100 g b10001010 c #20633000 0! #20633500 1! #20633600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20634000 0! #20634500 1! #20634600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20635000 0! #20635500 1! #20635600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20636000 0! #20636500 1! #20636600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20637000 0! #20637500 1! #20637600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20638000 0! #20638500 1! #20638600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20639000 0! #20639500 1! #20639600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20640000 0! #20640500 1! #20640600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20641000 0! #20641500 1! #20641600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20642000 0! #20642500 1! #20642600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20643000 0! #20643500 1! #20643600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20644000 0! #20644500 1! #20644600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20645000 0! #20645500 1! #20645600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20646000 0! #20646500 1! #20646600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20647000 0! #20647500 1! #20647600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20648000 0! #20648500 1! #20648600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20649000 0! #20649500 1! #20649600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20650000 0! #20650500 1! #20650600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20651000 0! #20651500 1! #20651600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20652000 0! #20652500 1! #20652600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20653000 0! #20653500 1! #20653600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20654000 0! #20654500 1! #20654600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20655000 0! #20655500 1! #20655600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20656000 0! #20656500 1! #20656600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20657000 0! #20657500 1! #20657600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20658000 0! #20658500 1! #20658600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20659000 0! #20659500 1! #20659600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20660000 0! #20660500 1! #20660600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20661000 0! #20661500 1! #20661600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20662000 0! #20662500 1! #20662600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20663000 0! #20663500 1! #20663600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20664000 0! #20664500 1! #20664600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20665000 0! #20665500 1! #20665600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20666000 0! #20666500 1! #20666600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20667000 0! #20667500 1! #20667600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20668000 0! #20668500 1! #20668600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20669000 0! #20669500 1! #20669600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20670000 0! #20670500 1! #20670600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20671000 0! #20671500 1! #20671600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20672000 0! #20672500 1! #20672600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20673000 0! #20673500 1! #20673600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20674000 0! #20674500 1! #20674600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20675000 0! #20675500 1! #20675600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20676000 0! #20676500 1! #20676600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20677000 0! #20677500 1! #20677600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20678000 0! #20678500 1! #20678600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20679000 0! #20679500 1! #20679600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20680000 0! #20680500 1! #20680600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20681000 0! #20681500 1! #20681600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20682000 0! #20682500 1! #20682600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20683000 0! #20683500 1! #20683600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20684000 0! #20684500 1! #20684600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20685000 0! #20685500 1! #20685600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20686000 0! #20686500 1! #20686600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20687000 0! #20687500 1! #20687600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20688000 0! #20688500 1! #20688600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20689000 0! #20689500 1! #20689600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20690000 0! #20690500 1! #20690600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20691000 0! #20691500 1! #20691600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20692000 0! #20692500 1! #20692600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20693000 0! #20693500 1! #20693600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20694000 0! #20694500 1! #20694600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20695000 0! #20695500 1! #20695600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20696000 0! #20696500 1! #20696600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20697000 0! #20697500 1! #20697600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20698000 0! #20698500 1! #20698600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20699000 0! #20699500 1! #20699600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20700000 0! #20700500 1! #20700600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20701000 0! #20701500 1! #20701600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20702000 0! #20702500 1! #20702600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20703000 0! #20703500 1! #20703600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20704000 0! #20704500 1! #20704600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20705000 0! #20705500 1! #20705600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20706000 0! #20706500 1! #20706600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20707000 0! #20707500 1! #20707600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20708000 0! #20708500 1! #20708600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20709000 0! #20709500 1! #20709600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20710000 0! #20710500 1! #20710600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20711000 0! #20711500 1! #20711600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20712000 0! #20712500 1! #20712600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20713000 0! #20713500 1! #20713600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20714000 0! #20714500 1! #20714600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20715000 0! #20715500 1! #20715600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20716000 0! #20716500 1! #20716600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20717000 0! #20717500 1! #20717600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20718000 0! #20718500 1! #20718600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20719000 0! #20719500 1! #20719600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20720000 0! #20720500 1! #20720600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20721000 0! #20721500 1! #20721600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20722000 0! #20722500 1! #20722600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20723000 0! #20723500 1! #20723600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20724000 0! #20724500 1! #20724600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20725000 0! #20725500 1! #20725600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20726000 0! #20726500 1! #20726600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20727000 0! #20727500 1! #20727600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20728000 0! #20728500 1! #20728600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20729000 0! #20729500 1! #20729600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20730000 0! #20730500 1! #20730600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20731000 0! #20731500 1! #20731600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20732000 0! #20732500 1! #20732600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20733000 0! #20733500 1! #20733600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20734000 0! #20734500 1! #20734600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #20735000 0! #20735500 1! #20735600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20736000 0! #20736500 1! #20736600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20737000 0! #20737500 1! #20737600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20738000 0! #20738500 1! #20738600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20739000 0! #20739500 1! #20739600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20740000 0! #20740500 1! #20740600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20741000 0! #20741500 1! #20741600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20742000 0! #20742500 1! #20742600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20743000 0! #20743500 1! #20743600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20744000 0! #20744500 1! #20744600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20745000 0! #20745500 1! #20745600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20746000 0! #20746500 1! #20746600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20747000 0! #20747500 1! #20747600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20748000 0! #20748500 1! #20748600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20749000 0! #20749500 1! #20749600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20750000 0! #20750500 1! #20750600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20751000 0! #20751500 1! #20751600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20752000 0! #20752500 1! #20752600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20753000 0! #20753500 1! #20753600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20754000 0! #20754500 1! #20754600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20755000 0! #20755500 1! #20755600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20756000 0! #20756500 1! #20756600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20757000 0! #20757500 1! #20757600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20758000 0! #20758500 1! #20758600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20759000 0! #20759500 1! #20759600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20760000 0! #20760500 1! #20760600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20761000 0! #20761500 1! #20761600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20762000 0! #20762500 1! #20762600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20763000 0! #20763500 1! #20763600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20764000 0! #20764500 1! #20764600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20765000 0! #20765500 1! #20765600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20766000 0! #20766500 1! #20766600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20767000 0! #20767500 1! #20767600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20768000 0! #20768500 1! #20768600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20769000 0! #20769500 1! #20769600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20770000 0! #20770500 1! #20770600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20771000 0! #20771500 1! #20771600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20772000 0! #20772500 1! #20772600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20773000 0! #20773500 1! #20773600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20774000 0! #20774500 1! #20774600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20775000 0! #20775500 1! #20775600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20776000 0! #20776500 1! #20776600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20777000 0! #20777500 1! #20777600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20778000 0! #20778500 1! #20778600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20779000 0! #20779500 1! #20779600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20780000 0! #20780500 1! #20780600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20781000 0! #20781500 1! #20781600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20782000 0! #20782500 1! #20782600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20783000 0! #20783500 1! #20783600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20784000 0! #20784500 1! #20784600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20785000 0! #20785500 1! #20785600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20786000 0! #20786500 1! #20786600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20787000 0! #20787500 1! #20787600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20788000 0! #20788500 1! #20788600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20789000 0! #20789500 1! #20789600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20790000 0! #20790500 1! #20790600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20791000 0! #20791500 1! #20791600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20792000 0! #20792500 1! #20792600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20793000 0! #20793500 1! #20793600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20794000 0! #20794500 1! #20794600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20795000 0! #20795500 1! #20795600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20796000 0! #20796500 1! #20796600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20797000 0! #20797500 1! #20797600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20798000 0! #20798500 1! #20798600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20799000 0! #20799500 1! #20799600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20800000 0! #20800500 1! #20800600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20801000 0! #20801500 1! #20801600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20802000 0! #20802500 1! #20802600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20803000 0! #20803500 1! #20803600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20804000 0! #20804500 1! #20804600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20805000 0! #20805500 1! #20805600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20806000 0! #20806500 1! #20806600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20807000 0! #20807500 1! #20807600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20808000 0! #20808500 1! #20808600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20809000 0! #20809500 1! #20809600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20810000 0! #20810500 1! #20810600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20811000 0! #20811500 1! #20811600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20812000 0! #20812500 1! #20812600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20813000 0! #20813500 1! #20813600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20814000 0! #20814500 1! #20814600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20815000 0! #20815500 1! #20815600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20816000 0! #20816500 1! #20816600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20817000 0! #20817500 1! #20817600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20818000 0! #20818500 1! #20818600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20819000 0! #20819500 1! #20819600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20820000 0! #20820500 1! #20820600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20821000 0! #20821500 1! #20821600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20822000 0! #20822500 1! #20822600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20823000 0! #20823500 1! #20823600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20824000 0! #20824500 1! #20824600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20825000 0! #20825500 1! #20825600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20826000 0! #20826500 1! #20826600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20827000 0! #20827500 1! #20827600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20828000 0! #20828500 1! #20828600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20829000 0! #20829500 1! #20829600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20830000 0! #20830500 1! #20830600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20831000 0! #20831500 1! #20831600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20832000 0! #20832500 1! #20832600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20833000 0! #20833500 1! #20833600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20834000 0! #20834500 1! #20834600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20835000 0! #20835500 1! #20835600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20836000 0! #20836500 1! #20836600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20837000 0! #20837500 1! #20837600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20838000 0! #20838500 1! #20838600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20839000 0! #20839500 1! #20839600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20840000 0! #20840500 1! #20840600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20841000 0! #20841500 1! #20841600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20842000 0! #20842500 1! #20842600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20843000 0! #20843500 1! #20843600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20844000 0! #20844500 1! #20844600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20845000 0! #20845500 1! #20845600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20846000 0! #20846500 1! #20846600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20847000 0! #20847500 1! #20847600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20848000 0! #20848500 1! #20848600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20849000 0! #20849500 1! #20849600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20850000 0! #20850500 1! #20850600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20851000 0! #20851500 1! #20851600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20852000 0! #20852500 1! #20852600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20853000 0! #20853500 1! #20853600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20854000 0! #20854500 1! #20854600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20855000 0! #20855500 1! #20855600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20856000 0! #20856500 1! #20856600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20857000 0! #20857500 1! #20857600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20858000 0! #20858500 1! #20858600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20859000 0! #20859500 1! #20859600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20860000 0! #20860500 1! #20860600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20861000 0! #20861500 1! #20861600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20862000 0! #20862500 1! #20862600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20863000 0! #20863500 1! #20863600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20864000 0! #20864500 1! #20864600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20865000 0! #20865500 1! #20865600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20866000 0! #20866500 1! #20866600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20867000 0! #20867500 1! #20867600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20868000 0! #20868500 1! #20868600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20869000 0! #20869500 1! #20869600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20870000 0! #20870500 1! #20870600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20871000 0! #20871500 1! #20871600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20872000 0! #20872500 1! #20872600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20873000 0! #20873500 1! #20873600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20874000 0! #20874500 1! #20874600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20875000 0! #20875500 1! #20875600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20876000 0! #20876500 1! #20876600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20877000 0! #20877500 1! #20877600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20878000 0! #20878500 1! #20878600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20879000 0! #20879500 1! #20879600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20880000 0! #20880500 1! #20880600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20881000 0! #20881500 1! #20881600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20882000 0! #20882500 1! #20882600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20883000 0! #20883500 1! #20883600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20884000 0! #20884500 1! #20884600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20885000 0! #20885500 1! #20885600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20886000 0! #20886500 1! #20886600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20887000 0! #20887500 1! #20887600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #20887700 b11 g b10100 c #20888000 0! #20888500 1! #20888600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20889000 0! #20889500 1! #20889600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20890000 0! #20890500 1! #20890600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20891000 0! #20891500 1! #20891600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20892000 0! #20892500 1! #20892600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20893000 0! #20893500 1! #20893600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20894000 0! #20894500 1! #20894600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20895000 0! #20895500 1! #20895600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20896000 0! #20896500 1! #20896600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20897000 0! #20897500 1! #20897600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20898000 0! #20898500 1! #20898600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20899000 0! #20899500 1! #20899600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20900000 0! #20900500 1! #20900600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20901000 0! #20901500 1! #20901600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20902000 0! #20902500 1! #20902600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20903000 0! #20903500 1! #20903600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20904000 0! #20904500 1! #20904600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20905000 0! #20905500 1! #20905600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20906000 0! #20906500 1! #20906600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20907000 0! #20907500 1! #20907600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20908000 0! #20908500 1! #20908600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20909000 0! #20909500 1! #20909600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20910000 0! #20910500 1! #20910600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20911000 0! #20911500 1! #20911600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20912000 0! #20912500 1! #20912600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20913000 0! #20913500 1! #20913600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20914000 0! #20914500 1! #20914600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20915000 0! #20915500 1! #20915600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20916000 0! #20916500 1! #20916600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20917000 0! #20917500 1! #20917600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20918000 0! #20918500 1! #20918600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20919000 0! #20919500 1! #20919600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20920000 0! #20920500 1! #20920600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20921000 0! #20921500 1! #20921600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20922000 0! #20922500 1! #20922600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20923000 0! #20923500 1! #20923600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20924000 0! #20924500 1! #20924600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20925000 0! #20925500 1! #20925600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20926000 0! #20926500 1! #20926600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20927000 0! #20927500 1! #20927600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20928000 0! #20928500 1! #20928600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20929000 0! #20929500 1! #20929600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20930000 0! #20930500 1! #20930600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20931000 0! #20931500 1! #20931600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20932000 0! #20932500 1! #20932600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20933000 0! #20933500 1! #20933600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20934000 0! #20934500 1! #20934600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20935000 0! #20935500 1! #20935600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20936000 0! #20936500 1! #20936600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20937000 0! #20937500 1! #20937600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20938000 0! #20938500 1! #20938600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20939000 0! #20939500 1! #20939600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20940000 0! #20940500 1! #20940600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20941000 0! #20941500 1! #20941600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20942000 0! #20942500 1! #20942600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20943000 0! #20943500 1! #20943600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20944000 0! #20944500 1! #20944600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20945000 0! #20945500 1! #20945600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20946000 0! #20946500 1! #20946600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20947000 0! #20947500 1! #20947600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20948000 0! #20948500 1! #20948600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20949000 0! #20949500 1! #20949600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20950000 0! #20950500 1! #20950600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20951000 0! #20951500 1! #20951600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20952000 0! #20952500 1! #20952600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20953000 0! #20953500 1! #20953600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20954000 0! #20954500 1! #20954600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20955000 0! #20955500 1! #20955600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20956000 0! #20956500 1! #20956600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20957000 0! #20957500 1! #20957600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20958000 0! #20958500 1! #20958600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20959000 0! #20959500 1! #20959600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20960000 0! #20960500 1! #20960600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20961000 0! #20961500 1! #20961600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20962000 0! #20962500 1! #20962600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20963000 0! #20963500 1! #20963600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20964000 0! #20964500 1! #20964600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20965000 0! #20965500 1! #20965600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20966000 0! #20966500 1! #20966600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20967000 0! #20967500 1! #20967600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20968000 0! #20968500 1! #20968600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20969000 0! #20969500 1! #20969600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20970000 0! #20970500 1! #20970600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20971000 0! #20971500 1! #20971600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20972000 0! #20972500 1! #20972600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20973000 0! #20973500 1! #20973600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20974000 0! #20974500 1! #20974600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20975000 0! #20975500 1! #20975600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20976000 0! #20976500 1! #20976600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20977000 0! #20977500 1! #20977600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20978000 0! #20978500 1! #20978600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20979000 0! #20979500 1! #20979600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20980000 0! #20980500 1! #20980600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20981000 0! #20981500 1! #20981600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20982000 0! #20982500 1! #20982600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20983000 0! #20983500 1! #20983600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20984000 0! #20984500 1! #20984600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20985000 0! #20985500 1! #20985600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20986000 0! #20986500 1! #20986600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20987000 0! #20987500 1! #20987600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20988000 0! #20988500 1! #20988600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20989000 0! #20989500 1! #20989600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #20990000 0! #20990500 1! #20990600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20991000 0! #20991500 1! #20991600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20992000 0! #20992500 1! #20992600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20993000 0! #20993500 1! #20993600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20994000 0! #20994500 1! #20994600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20995000 0! #20995500 1! #20995600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20996000 0! #20996500 1! #20996600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20997000 0! #20997500 1! #20997600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #20998000 0! #20998500 1! #20998600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #20999000 0! #20999500 1! #20999600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21000000 0! #21000500 1! #21000600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21001000 0! #21001500 1! #21001600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21002000 0! #21002500 1! #21002600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21003000 0! #21003500 1! #21003600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21004000 0! #21004500 1! #21004600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21005000 0! #21005500 1! #21005600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21006000 0! #21006500 1! #21006600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21007000 0! #21007500 1! #21007600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21008000 0! #21008500 1! #21008600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21009000 0! #21009500 1! #21009600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21010000 0! #21010500 1! #21010600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21011000 0! #21011500 1! #21011600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21012000 0! #21012500 1! #21012600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21013000 0! #21013500 1! #21013600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21014000 0! #21014500 1! #21014600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21015000 0! #21015500 1! #21015600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21016000 0! #21016500 1! #21016600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21017000 0! #21017500 1! #21017600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21018000 0! #21018500 1! #21018600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21019000 0! #21019500 1! #21019600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21020000 0! #21020500 1! #21020600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21021000 0! #21021500 1! #21021600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21022000 0! #21022500 1! #21022600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21023000 0! #21023500 1! #21023600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21024000 0! #21024500 1! #21024600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21025000 0! #21025500 1! #21025600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21026000 0! #21026500 1! #21026600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21027000 0! #21027500 1! #21027600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21028000 0! #21028500 1! #21028600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21029000 0! #21029500 1! #21029600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21030000 0! #21030500 1! #21030600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21031000 0! #21031500 1! #21031600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21032000 0! #21032500 1! #21032600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21033000 0! #21033500 1! #21033600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21034000 0! #21034500 1! #21034600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21035000 0! #21035500 1! #21035600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21036000 0! #21036500 1! #21036600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21037000 0! #21037500 1! #21037600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21038000 0! #21038500 1! #21038600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21039000 0! #21039500 1! #21039600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21040000 0! #21040500 1! #21040600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21041000 0! #21041500 1! #21041600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21042000 0! #21042500 1! #21042600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21043000 0! #21043500 1! #21043600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21044000 0! #21044500 1! #21044600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21045000 0! #21045500 1! #21045600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21046000 0! #21046500 1! #21046600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21047000 0! #21047500 1! #21047600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21048000 0! #21048500 1! #21048600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21049000 0! #21049500 1! #21049600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21050000 0! #21050500 1! #21050600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21051000 0! #21051500 1! #21051600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21052000 0! #21052500 1! #21052600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21053000 0! #21053500 1! #21053600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21054000 0! #21054500 1! #21054600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21055000 0! #21055500 1! #21055600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21056000 0! #21056500 1! #21056600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21057000 0! #21057500 1! #21057600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21058000 0! #21058500 1! #21058600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21059000 0! #21059500 1! #21059600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21060000 0! #21060500 1! #21060600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21061000 0! #21061500 1! #21061600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21062000 0! #21062500 1! #21062600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21063000 0! #21063500 1! #21063600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21064000 0! #21064500 1! #21064600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21065000 0! #21065500 1! #21065600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21066000 0! #21066500 1! #21066600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21067000 0! #21067500 1! #21067600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21068000 0! #21068500 1! #21068600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21069000 0! #21069500 1! #21069600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21070000 0! #21070500 1! #21070600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21071000 0! #21071500 1! #21071600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21072000 0! #21072500 1! #21072600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21073000 0! #21073500 1! #21073600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21074000 0! #21074500 1! #21074600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21075000 0! #21075500 1! #21075600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21076000 0! #21076500 1! #21076600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21077000 0! #21077500 1! #21077600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21078000 0! #21078500 1! #21078600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21079000 0! #21079500 1! #21079600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21080000 0! #21080500 1! #21080600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21081000 0! #21081500 1! #21081600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21082000 0! #21082500 1! #21082600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21083000 0! #21083500 1! #21083600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21084000 0! #21084500 1! #21084600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21085000 0! #21085500 1! #21085600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21086000 0! #21086500 1! #21086600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21087000 0! #21087500 1! #21087600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21088000 0! #21088500 1! #21088600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21089000 0! #21089500 1! #21089600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21090000 0! #21090500 1! #21090600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21091000 0! #21091500 1! #21091600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21092000 0! #21092500 1! #21092600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21093000 0! #21093500 1! #21093600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21094000 0! #21094500 1! #21094600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21095000 0! #21095500 1! #21095600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21096000 0! #21096500 1! #21096600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21097000 0! #21097500 1! #21097600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21098000 0! #21098500 1! #21098600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21099000 0! #21099500 1! #21099600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21100000 0! #21100500 1! #21100600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21101000 0! #21101500 1! #21101600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21102000 0! #21102500 1! #21102600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21103000 0! #21103500 1! #21103600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21104000 0! #21104500 1! #21104600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21105000 0! #21105500 1! #21105600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21106000 0! #21106500 1! #21106600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21107000 0! #21107500 1! #21107600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21108000 0! #21108500 1! #21108600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21109000 0! #21109500 1! #21109600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21110000 0! #21110500 1! #21110600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21111000 0! #21111500 1! #21111600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21112000 0! #21112500 1! #21112600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21113000 0! #21113500 1! #21113600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21114000 0! #21114500 1! #21114600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21115000 0! #21115500 1! #21115600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21116000 0! #21116500 1! #21116600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21117000 0! #21117500 1! #21117600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21118000 0! #21118500 1! #21118600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21119000 0! #21119500 1! #21119600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21120000 0! #21120500 1! #21120600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21121000 0! #21121500 1! #21121600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21122000 0! #21122500 1! #21122600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21123000 0! #21123500 1! #21123600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21124000 0! #21124500 1! #21124600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21125000 0! #21125500 1! #21125600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21126000 0! #21126500 1! #21126600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21127000 0! #21127500 1! #21127600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21128000 0! #21128500 1! #21128600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21129000 0! #21129500 1! #21129600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21130000 0! #21130500 1! #21130600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21131000 0! #21131500 1! #21131600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21132000 0! #21132500 1! #21132600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21133000 0! #21133500 1! #21133600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21134000 0! #21134500 1! #21134600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21135000 0! #21135500 1! #21135600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21136000 0! #21136500 1! #21136600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21137000 0! #21137500 1! #21137600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21138000 0! #21138500 1! #21138600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21139000 0! #21139500 1! #21139600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21140000 0! #21140500 1! #21140600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21141000 0! #21141500 1! #21141600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21142000 0! #21142500 1! #21142600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #21142700 b10 g b101000 c #21143000 0! #21143500 1! #21143600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21144000 0! #21144500 1! #21144600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21145000 0! #21145500 1! #21145600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21146000 0! #21146500 1! #21146600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21147000 0! #21147500 1! #21147600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21148000 0! #21148500 1! #21148600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21149000 0! #21149500 1! #21149600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21150000 0! #21150500 1! #21150600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21151000 0! #21151500 1! #21151600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21152000 0! #21152500 1! #21152600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21153000 0! #21153500 1! #21153600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21154000 0! #21154500 1! #21154600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21155000 0! #21155500 1! #21155600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21156000 0! #21156500 1! #21156600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21157000 0! #21157500 1! #21157600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21158000 0! #21158500 1! #21158600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21159000 0! #21159500 1! #21159600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21160000 0! #21160500 1! #21160600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21161000 0! #21161500 1! #21161600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21162000 0! #21162500 1! #21162600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21163000 0! #21163500 1! #21163600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21164000 0! #21164500 1! #21164600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21165000 0! #21165500 1! #21165600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21166000 0! #21166500 1! #21166600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21167000 0! #21167500 1! #21167600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21168000 0! #21168500 1! #21168600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21169000 0! #21169500 1! #21169600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21170000 0! #21170500 1! #21170600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21171000 0! #21171500 1! #21171600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21172000 0! #21172500 1! #21172600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21173000 0! #21173500 1! #21173600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21174000 0! #21174500 1! #21174600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21175000 0! #21175500 1! #21175600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21176000 0! #21176500 1! #21176600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21177000 0! #21177500 1! #21177600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21178000 0! #21178500 1! #21178600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21179000 0! #21179500 1! #21179600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21180000 0! #21180500 1! #21180600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21181000 0! #21181500 1! #21181600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21182000 0! #21182500 1! #21182600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21183000 0! #21183500 1! #21183600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21184000 0! #21184500 1! #21184600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21185000 0! #21185500 1! #21185600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21186000 0! #21186500 1! #21186600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21187000 0! #21187500 1! #21187600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21188000 0! #21188500 1! #21188600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21189000 0! #21189500 1! #21189600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21190000 0! #21190500 1! #21190600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21191000 0! #21191500 1! #21191600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21192000 0! #21192500 1! #21192600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21193000 0! #21193500 1! #21193600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21194000 0! #21194500 1! #21194600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21195000 0! #21195500 1! #21195600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21196000 0! #21196500 1! #21196600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21197000 0! #21197500 1! #21197600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21198000 0! #21198500 1! #21198600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21199000 0! #21199500 1! #21199600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21200000 0! #21200500 1! #21200600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21201000 0! #21201500 1! #21201600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21202000 0! #21202500 1! #21202600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21203000 0! #21203500 1! #21203600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21204000 0! #21204500 1! #21204600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21205000 0! #21205500 1! #21205600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21206000 0! #21206500 1! #21206600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21207000 0! #21207500 1! #21207600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21208000 0! #21208500 1! #21208600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21209000 0! #21209500 1! #21209600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21210000 0! #21210500 1! #21210600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21211000 0! #21211500 1! #21211600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21212000 0! #21212500 1! #21212600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21213000 0! #21213500 1! #21213600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21214000 0! #21214500 1! #21214600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21215000 0! #21215500 1! #21215600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21216000 0! #21216500 1! #21216600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21217000 0! #21217500 1! #21217600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21218000 0! #21218500 1! #21218600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21219000 0! #21219500 1! #21219600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21220000 0! #21220500 1! #21220600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21221000 0! #21221500 1! #21221600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21222000 0! #21222500 1! #21222600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21223000 0! #21223500 1! #21223600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21224000 0! #21224500 1! #21224600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21225000 0! #21225500 1! #21225600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21226000 0! #21226500 1! #21226600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21227000 0! #21227500 1! #21227600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21228000 0! #21228500 1! #21228600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21229000 0! #21229500 1! #21229600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21230000 0! #21230500 1! #21230600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21231000 0! #21231500 1! #21231600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21232000 0! #21232500 1! #21232600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21233000 0! #21233500 1! #21233600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21234000 0! #21234500 1! #21234600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21235000 0! #21235500 1! #21235600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21236000 0! #21236500 1! #21236600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21237000 0! #21237500 1! #21237600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21238000 0! #21238500 1! #21238600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21239000 0! #21239500 1! #21239600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21240000 0! #21240500 1! #21240600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21241000 0! #21241500 1! #21241600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21242000 0! #21242500 1! #21242600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21243000 0! #21243500 1! #21243600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21244000 0! #21244500 1! #21244600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #21245000 0! #21245500 1! #21245600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21246000 0! #21246500 1! #21246600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21247000 0! #21247500 1! #21247600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21248000 0! #21248500 1! #21248600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21249000 0! #21249500 1! #21249600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21250000 0! #21250500 1! #21250600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21251000 0! #21251500 1! #21251600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21252000 0! #21252500 1! #21252600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21253000 0! #21253500 1! #21253600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21254000 0! #21254500 1! #21254600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21255000 0! #21255500 1! #21255600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21256000 0! #21256500 1! #21256600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21257000 0! #21257500 1! #21257600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21258000 0! #21258500 1! #21258600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21259000 0! #21259500 1! #21259600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21260000 0! #21260500 1! #21260600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21261000 0! #21261500 1! #21261600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21262000 0! #21262500 1! #21262600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21263000 0! #21263500 1! #21263600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21264000 0! #21264500 1! #21264600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21265000 0! #21265500 1! #21265600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21266000 0! #21266500 1! #21266600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21267000 0! #21267500 1! #21267600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21268000 0! #21268500 1! #21268600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21269000 0! #21269500 1! #21269600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21270000 0! #21270500 1! #21270600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21271000 0! #21271500 1! #21271600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21272000 0! #21272500 1! #21272600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21273000 0! #21273500 1! #21273600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21274000 0! #21274500 1! #21274600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21275000 0! #21275500 1! #21275600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21276000 0! #21276500 1! #21276600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21277000 0! #21277500 1! #21277600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21278000 0! #21278500 1! #21278600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21279000 0! #21279500 1! #21279600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21280000 0! #21280500 1! #21280600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21281000 0! #21281500 1! #21281600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21282000 0! #21282500 1! #21282600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21283000 0! #21283500 1! #21283600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21284000 0! #21284500 1! #21284600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21285000 0! #21285500 1! #21285600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21286000 0! #21286500 1! #21286600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21287000 0! #21287500 1! #21287600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21288000 0! #21288500 1! #21288600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21289000 0! #21289500 1! #21289600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21290000 0! #21290500 1! #21290600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21291000 0! #21291500 1! #21291600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21292000 0! #21292500 1! #21292600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21293000 0! #21293500 1! #21293600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21294000 0! #21294500 1! #21294600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21295000 0! #21295500 1! #21295600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21296000 0! #21296500 1! #21296600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21297000 0! #21297500 1! #21297600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21298000 0! #21298500 1! #21298600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21299000 0! #21299500 1! #21299600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21300000 0! #21300500 1! #21300600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21301000 0! #21301500 1! #21301600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21302000 0! #21302500 1! #21302600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21303000 0! #21303500 1! #21303600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21304000 0! #21304500 1! #21304600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21305000 0! #21305500 1! #21305600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21306000 0! #21306500 1! #21306600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21307000 0! #21307500 1! #21307600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21308000 0! #21308500 1! #21308600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21309000 0! #21309500 1! #21309600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21310000 0! #21310500 1! #21310600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21311000 0! #21311500 1! #21311600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21312000 0! #21312500 1! #21312600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21313000 0! #21313500 1! #21313600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21314000 0! #21314500 1! #21314600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21315000 0! #21315500 1! #21315600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21316000 0! #21316500 1! #21316600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21317000 0! #21317500 1! #21317600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21318000 0! #21318500 1! #21318600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21319000 0! #21319500 1! #21319600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21320000 0! #21320500 1! #21320600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21321000 0! #21321500 1! #21321600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21322000 0! #21322500 1! #21322600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21323000 0! #21323500 1! #21323600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21324000 0! #21324500 1! #21324600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21325000 0! #21325500 1! #21325600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21326000 0! #21326500 1! #21326600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21327000 0! #21327500 1! #21327600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21328000 0! #21328500 1! #21328600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21329000 0! #21329500 1! #21329600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21330000 0! #21330500 1! #21330600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21331000 0! #21331500 1! #21331600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21332000 0! #21332500 1! #21332600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21333000 0! #21333500 1! #21333600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21334000 0! #21334500 1! #21334600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21335000 0! #21335500 1! #21335600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21336000 0! #21336500 1! #21336600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21337000 0! #21337500 1! #21337600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21338000 0! #21338500 1! #21338600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21339000 0! #21339500 1! #21339600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21340000 0! #21340500 1! #21340600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21341000 0! #21341500 1! #21341600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21342000 0! #21342500 1! #21342600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21343000 0! #21343500 1! #21343600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21344000 0! #21344500 1! #21344600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21345000 0! #21345500 1! #21345600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21346000 0! #21346500 1! #21346600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21347000 0! #21347500 1! #21347600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21348000 0! #21348500 1! #21348600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21349000 0! #21349500 1! #21349600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21350000 0! #21350500 1! #21350600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21351000 0! #21351500 1! #21351600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21352000 0! #21352500 1! #21352600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21353000 0! #21353500 1! #21353600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21354000 0! #21354500 1! #21354600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21355000 0! #21355500 1! #21355600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21356000 0! #21356500 1! #21356600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21357000 0! #21357500 1! #21357600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21358000 0! #21358500 1! #21358600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21359000 0! #21359500 1! #21359600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21360000 0! #21360500 1! #21360600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21361000 0! #21361500 1! #21361600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21362000 0! #21362500 1! #21362600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21363000 0! #21363500 1! #21363600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21364000 0! #21364500 1! #21364600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21365000 0! #21365500 1! #21365600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21366000 0! #21366500 1! #21366600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21367000 0! #21367500 1! #21367600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21368000 0! #21368500 1! #21368600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21369000 0! #21369500 1! #21369600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21370000 0! #21370500 1! #21370600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21371000 0! #21371500 1! #21371600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21372000 0! #21372500 1! #21372600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21373000 0! #21373500 1! #21373600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21374000 0! #21374500 1! #21374600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21375000 0! #21375500 1! #21375600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21376000 0! #21376500 1! #21376600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21377000 0! #21377500 1! #21377600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21378000 0! #21378500 1! #21378600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21379000 0! #21379500 1! #21379600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21380000 0! #21380500 1! #21380600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21381000 0! #21381500 1! #21381600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21382000 0! #21382500 1! #21382600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21383000 0! #21383500 1! #21383600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21384000 0! #21384500 1! #21384600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21385000 0! #21385500 1! #21385600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21386000 0! #21386500 1! #21386600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21387000 0! #21387500 1! #21387600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21388000 0! #21388500 1! #21388600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21389000 0! #21389500 1! #21389600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21390000 0! #21390500 1! #21390600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21391000 0! #21391500 1! #21391600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21392000 0! #21392500 1! #21392600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21393000 0! #21393500 1! #21393600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21394000 0! #21394500 1! #21394600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21395000 0! #21395500 1! #21395600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21396000 0! #21396500 1! #21396600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21397000 0! #21397500 1! #21397600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #21397700 b1 g b1010000 c #21398000 0! #21398500 1! #21398600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21399000 0! #21399500 1! #21399600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21400000 0! #21400500 1! #21400600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21401000 0! #21401500 1! #21401600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21402000 0! #21402500 1! #21402600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21403000 0! #21403500 1! #21403600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21404000 0! #21404500 1! #21404600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21405000 0! #21405500 1! #21405600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21406000 0! #21406500 1! #21406600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21407000 0! #21407500 1! #21407600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21408000 0! #21408500 1! #21408600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21409000 0! #21409500 1! #21409600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21410000 0! #21410500 1! #21410600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21411000 0! #21411500 1! #21411600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21412000 0! #21412500 1! #21412600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21413000 0! #21413500 1! #21413600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21414000 0! #21414500 1! #21414600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21415000 0! #21415500 1! #21415600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21416000 0! #21416500 1! #21416600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21417000 0! #21417500 1! #21417600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21418000 0! #21418500 1! #21418600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21419000 0! #21419500 1! #21419600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21420000 0! #21420500 1! #21420600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21421000 0! #21421500 1! #21421600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21422000 0! #21422500 1! #21422600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21423000 0! #21423500 1! #21423600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21424000 0! #21424500 1! #21424600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21425000 0! #21425500 1! #21425600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21426000 0! #21426500 1! #21426600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21427000 0! #21427500 1! #21427600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21428000 0! #21428500 1! #21428600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21429000 0! #21429500 1! #21429600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21430000 0! #21430500 1! #21430600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21431000 0! #21431500 1! #21431600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21432000 0! #21432500 1! #21432600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21433000 0! #21433500 1! #21433600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21434000 0! #21434500 1! #21434600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21435000 0! #21435500 1! #21435600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21436000 0! #21436500 1! #21436600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21437000 0! #21437500 1! #21437600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21438000 0! #21438500 1! #21438600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21439000 0! #21439500 1! #21439600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21440000 0! #21440500 1! #21440600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21441000 0! #21441500 1! #21441600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21442000 0! #21442500 1! #21442600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21443000 0! #21443500 1! #21443600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21444000 0! #21444500 1! #21444600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21445000 0! #21445500 1! #21445600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21446000 0! #21446500 1! #21446600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21447000 0! #21447500 1! #21447600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21448000 0! #21448500 1! #21448600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21449000 0! #21449500 1! #21449600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21450000 0! #21450500 1! #21450600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21451000 0! #21451500 1! #21451600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21452000 0! #21452500 1! #21452600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21453000 0! #21453500 1! #21453600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21454000 0! #21454500 1! #21454600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21455000 0! #21455500 1! #21455600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21456000 0! #21456500 1! #21456600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21457000 0! #21457500 1! #21457600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21458000 0! #21458500 1! #21458600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21459000 0! #21459500 1! #21459600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21460000 0! #21460500 1! #21460600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21461000 0! #21461500 1! #21461600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21462000 0! #21462500 1! #21462600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21463000 0! #21463500 1! #21463600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21464000 0! #21464500 1! #21464600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21465000 0! #21465500 1! #21465600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21466000 0! #21466500 1! #21466600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21467000 0! #21467500 1! #21467600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21468000 0! #21468500 1! #21468600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21469000 0! #21469500 1! #21469600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21470000 0! #21470500 1! #21470600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21471000 0! #21471500 1! #21471600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21472000 0! #21472500 1! #21472600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21473000 0! #21473500 1! #21473600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21474000 0! #21474500 1! #21474600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21475000 0! #21475500 1! #21475600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21476000 0! #21476500 1! #21476600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21477000 0! #21477500 1! #21477600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21478000 0! #21478500 1! #21478600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21479000 0! #21479500 1! #21479600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21480000 0! #21480500 1! #21480600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21481000 0! #21481500 1! #21481600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21482000 0! #21482500 1! #21482600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21483000 0! #21483500 1! #21483600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21484000 0! #21484500 1! #21484600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21485000 0! #21485500 1! #21485600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21486000 0! #21486500 1! #21486600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21487000 0! #21487500 1! #21487600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21488000 0! #21488500 1! #21488600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21489000 0! #21489500 1! #21489600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21490000 0! #21490500 1! #21490600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21491000 0! #21491500 1! #21491600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21492000 0! #21492500 1! #21492600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21493000 0! #21493500 1! #21493600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21494000 0! #21494500 1! #21494600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21495000 0! #21495500 1! #21495600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21496000 0! #21496500 1! #21496600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21497000 0! #21497500 1! #21497600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21498000 0! #21498500 1! #21498600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21499000 0! #21499500 1! #21499600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #21500000 0! #21500500 1! #21500600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21501000 0! #21501500 1! #21501600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21502000 0! #21502500 1! #21502600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21503000 0! #21503500 1! #21503600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21504000 0! #21504500 1! #21504600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21505000 0! #21505500 1! #21505600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21506000 0! #21506500 1! #21506600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21507000 0! #21507500 1! #21507600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21508000 0! #21508500 1! #21508600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21509000 0! #21509500 1! #21509600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21510000 0! #21510500 1! #21510600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21511000 0! #21511500 1! #21511600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21512000 0! #21512500 1! #21512600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21513000 0! #21513500 1! #21513600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21514000 0! #21514500 1! #21514600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21515000 0! #21515500 1! #21515600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21516000 0! #21516500 1! #21516600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21517000 0! #21517500 1! #21517600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21518000 0! #21518500 1! #21518600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21519000 0! #21519500 1! #21519600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21520000 0! #21520500 1! #21520600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21521000 0! #21521500 1! #21521600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21522000 0! #21522500 1! #21522600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21523000 0! #21523500 1! #21523600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21524000 0! #21524500 1! #21524600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21525000 0! #21525500 1! #21525600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21526000 0! #21526500 1! #21526600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21527000 0! #21527500 1! #21527600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21528000 0! #21528500 1! #21528600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21529000 0! #21529500 1! #21529600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21530000 0! #21530500 1! #21530600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21531000 0! #21531500 1! #21531600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21532000 0! #21532500 1! #21532600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21533000 0! #21533500 1! #21533600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21534000 0! #21534500 1! #21534600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21535000 0! #21535500 1! #21535600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21536000 0! #21536500 1! #21536600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21537000 0! #21537500 1! #21537600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21538000 0! #21538500 1! #21538600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21539000 0! #21539500 1! #21539600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21540000 0! #21540500 1! #21540600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21541000 0! #21541500 1! #21541600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21542000 0! #21542500 1! #21542600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21543000 0! #21543500 1! #21543600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21544000 0! #21544500 1! #21544600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21545000 0! #21545500 1! #21545600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21546000 0! #21546500 1! #21546600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21547000 0! #21547500 1! #21547600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21548000 0! #21548500 1! #21548600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21549000 0! #21549500 1! #21549600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21550000 0! #21550500 1! #21550600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21551000 0! #21551500 1! #21551600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21552000 0! #21552500 1! #21552600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21553000 0! #21553500 1! #21553600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21554000 0! #21554500 1! #21554600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21555000 0! #21555500 1! #21555600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21556000 0! #21556500 1! #21556600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21557000 0! #21557500 1! #21557600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21558000 0! #21558500 1! #21558600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21559000 0! #21559500 1! #21559600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21560000 0! #21560500 1! #21560600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21561000 0! #21561500 1! #21561600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21562000 0! #21562500 1! #21562600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21563000 0! #21563500 1! #21563600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21564000 0! #21564500 1! #21564600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21565000 0! #21565500 1! #21565600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21566000 0! #21566500 1! #21566600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21567000 0! #21567500 1! #21567600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21568000 0! #21568500 1! #21568600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21569000 0! #21569500 1! #21569600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21570000 0! #21570500 1! #21570600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21571000 0! #21571500 1! #21571600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21572000 0! #21572500 1! #21572600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21573000 0! #21573500 1! #21573600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21574000 0! #21574500 1! #21574600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21575000 0! #21575500 1! #21575600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21576000 0! #21576500 1! #21576600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21577000 0! #21577500 1! #21577600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21578000 0! #21578500 1! #21578600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21579000 0! #21579500 1! #21579600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21580000 0! #21580500 1! #21580600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21581000 0! #21581500 1! #21581600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21582000 0! #21582500 1! #21582600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21583000 0! #21583500 1! #21583600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21584000 0! #21584500 1! #21584600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21585000 0! #21585500 1! #21585600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21586000 0! #21586500 1! #21586600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21587000 0! #21587500 1! #21587600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21588000 0! #21588500 1! #21588600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21589000 0! #21589500 1! #21589600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21590000 0! #21590500 1! #21590600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21591000 0! #21591500 1! #21591600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21592000 0! #21592500 1! #21592600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21593000 0! #21593500 1! #21593600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21594000 0! #21594500 1! #21594600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21595000 0! #21595500 1! #21595600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21596000 0! #21596500 1! #21596600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21597000 0! #21597500 1! #21597600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21598000 0! #21598500 1! #21598600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21599000 0! #21599500 1! #21599600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21600000 0! #21600500 1! #21600600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21601000 0! #21601500 1! #21601600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21602000 0! #21602500 1! #21602600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21603000 0! #21603500 1! #21603600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21604000 0! #21604500 1! #21604600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21605000 0! #21605500 1! #21605600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21606000 0! #21606500 1! #21606600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21607000 0! #21607500 1! #21607600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21608000 0! #21608500 1! #21608600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21609000 0! #21609500 1! #21609600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21610000 0! #21610500 1! #21610600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21611000 0! #21611500 1! #21611600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21612000 0! #21612500 1! #21612600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21613000 0! #21613500 1! #21613600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21614000 0! #21614500 1! #21614600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21615000 0! #21615500 1! #21615600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21616000 0! #21616500 1! #21616600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21617000 0! #21617500 1! #21617600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21618000 0! #21618500 1! #21618600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21619000 0! #21619500 1! #21619600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21620000 0! #21620500 1! #21620600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21621000 0! #21621500 1! #21621600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21622000 0! #21622500 1! #21622600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21623000 0! #21623500 1! #21623600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21624000 0! #21624500 1! #21624600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21625000 0! #21625500 1! #21625600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21626000 0! #21626500 1! #21626600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21627000 0! #21627500 1! #21627600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21628000 0! #21628500 1! #21628600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21629000 0! #21629500 1! #21629600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21630000 0! #21630500 1! #21630600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21631000 0! #21631500 1! #21631600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21632000 0! #21632500 1! #21632600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21633000 0! #21633500 1! #21633600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21634000 0! #21634500 1! #21634600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21635000 0! #21635500 1! #21635600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21636000 0! #21636500 1! #21636600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21637000 0! #21637500 1! #21637600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21638000 0! #21638500 1! #21638600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21639000 0! #21639500 1! #21639600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21640000 0! #21640500 1! #21640600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21641000 0! #21641500 1! #21641600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21642000 0! #21642500 1! #21642600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21643000 0! #21643500 1! #21643600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21644000 0! #21644500 1! #21644600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21645000 0! #21645500 1! #21645600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21646000 0! #21646500 1! #21646600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21647000 0! #21647500 1! #21647600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21648000 0! #21648500 1! #21648600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21649000 0! #21649500 1! #21649600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21650000 0! #21650500 1! #21650600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21651000 0! #21651500 1! #21651600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21652000 0! #21652500 1! #21652600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #21652700 b0 g b10100000 c 1e 1h #21653000 0! #21653500 1! #21653600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21654000 0! #21654500 1! #21654600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21655000 0! #21655500 1! #21655600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21656000 0! #21656500 1! #21656600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21657000 0! #21657500 1! #21657600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21658000 0! #21658500 1! #21658600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21659000 0! #21659500 1! #21659600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21660000 0! #21660500 1! #21660600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21661000 0! #21661500 1! #21661600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21662000 0! #21662500 1! #21662600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21663000 0! #21663500 1! #21663600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21664000 0! #21664500 1! #21664600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21665000 0! #21665500 1! #21665600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21666000 0! #21666500 1! #21666600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21667000 0! #21667500 1! #21667600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21668000 0! #21668500 1! #21668600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21669000 0! #21669500 1! #21669600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21670000 0! #21670500 1! #21670600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21671000 0! #21671500 1! #21671600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21672000 0! #21672500 1! #21672600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21673000 0! #21673500 1! #21673600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21674000 0! #21674500 1! #21674600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21675000 0! #21675500 1! #21675600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21676000 0! #21676500 1! #21676600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21677000 0! #21677500 1! #21677600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21678000 0! #21678500 1! #21678600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21679000 0! #21679500 1! #21679600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21680000 0! #21680500 1! #21680600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21681000 0! #21681500 1! #21681600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21682000 0! #21682500 1! #21682600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21683000 0! #21683500 1! #21683600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21684000 0! #21684500 1! #21684600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21685000 0! #21685500 1! #21685600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21686000 0! #21686500 1! #21686600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21687000 0! #21687500 1! #21687600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21688000 0! #21688500 1! #21688600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21689000 0! #21689500 1! #21689600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21690000 0! #21690500 1! #21690600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21691000 0! #21691500 1! #21691600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21692000 0! #21692500 1! #21692600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21693000 0! #21693500 1! #21693600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21694000 0! #21694500 1! #21694600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21695000 0! #21695500 1! #21695600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21696000 0! #21696500 1! #21696600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21697000 0! #21697500 1! #21697600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21698000 0! #21698500 1! #21698600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21699000 0! #21699500 1! #21699600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21700000 0! #21700500 1! #21700600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21701000 0! #21701500 1! #21701600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21702000 0! #21702500 1! #21702600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21703000 0! #21703500 1! #21703600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21704000 0! #21704500 1! #21704600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21705000 0! #21705500 1! #21705600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21706000 0! #21706500 1! #21706600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21707000 0! #21707500 1! #21707600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21708000 0! #21708500 1! #21708600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21709000 0! #21709500 1! #21709600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21710000 0! #21710500 1! #21710600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21711000 0! #21711500 1! #21711600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21712000 0! #21712500 1! #21712600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21713000 0! #21713500 1! #21713600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21714000 0! #21714500 1! #21714600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21715000 0! #21715500 1! #21715600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21716000 0! #21716500 1! #21716600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21717000 0! #21717500 1! #21717600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21718000 0! #21718500 1! #21718600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21719000 0! #21719500 1! #21719600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21720000 0! #21720500 1! #21720600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21721000 0! #21721500 1! #21721600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21722000 0! #21722500 1! #21722600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21723000 0! #21723500 1! #21723600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21724000 0! #21724500 1! #21724600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21725000 0! #21725500 1! #21725600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21726000 0! #21726500 1! #21726600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21727000 0! #21727500 1! #21727600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21728000 0! #21728500 1! #21728600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21729000 0! #21729500 1! #21729600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21730000 0! #21730500 1! #21730600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21731000 0! #21731500 1! #21731600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21732000 0! #21732500 1! #21732600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21733000 0! #21733500 1! #21733600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21734000 0! #21734500 1! #21734600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21735000 0! #21735500 1! #21735600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21736000 0! #21736500 1! #21736600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21737000 0! #21737500 1! #21737600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21738000 0! #21738500 1! #21738600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21739000 0! #21739500 1! #21739600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21740000 0! #21740500 1! #21740600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21741000 0! #21741500 1! #21741600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21742000 0! #21742500 1! #21742600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21743000 0! #21743500 1! #21743600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21744000 0! #21744500 1! #21744600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21745000 0! #21745500 1! #21745600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21746000 0! #21746500 1! #21746600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21747000 0! #21747500 1! #21747600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21748000 0! #21748500 1! #21748600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21749000 0! #21749500 1! #21749600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21750000 0! #21750500 1! #21750600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21751000 0! #21751500 1! #21751600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21752000 0! #21752500 1! #21752600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21753000 0! #21753500 1! #21753600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21754000 0! #21754500 1! #21754600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #21754700 b1 q 0j #21755000 0! #21755500 1! #21755600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21756000 0! #21756500 1! #21756600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21757000 0! #21757500 1! #21757600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21758000 0! #21758500 1! #21758600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21759000 0! #21759500 1! #21759600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21760000 0! #21760500 1! #21760600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21761000 0! #21761500 1! #21761600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21762000 0! #21762500 1! #21762600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21763000 0! #21763500 1! #21763600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21764000 0! #21764500 1! #21764600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21765000 0! #21765500 1! #21765600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21766000 0! #21766500 1! #21766600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21767000 0! #21767500 1! #21767600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21768000 0! #21768500 1! #21768600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21769000 0! #21769500 1! #21769600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21770000 0! #21770500 1! #21770600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21771000 0! #21771500 1! #21771600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21772000 0! #21772500 1! #21772600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21773000 0! #21773500 1! #21773600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21774000 0! #21774500 1! #21774600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21775000 0! #21775500 1! #21775600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21776000 0! #21776500 1! #21776600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21777000 0! #21777500 1! #21777600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21778000 0! #21778500 1! #21778600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21779000 0! #21779500 1! #21779600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21780000 0! #21780500 1! #21780600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21781000 0! #21781500 1! #21781600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21782000 0! #21782500 1! #21782600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21783000 0! #21783500 1! #21783600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21784000 0! #21784500 1! #21784600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21785000 0! #21785500 1! #21785600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21786000 0! #21786500 1! #21786600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21787000 0! #21787500 1! #21787600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21788000 0! #21788500 1! #21788600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21789000 0! #21789500 1! #21789600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21790000 0! #21790500 1! #21790600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21791000 0! #21791500 1! #21791600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21792000 0! #21792500 1! #21792600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21793000 0! #21793500 1! #21793600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21794000 0! #21794500 1! #21794600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21795000 0! #21795500 1! #21795600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21796000 0! #21796500 1! #21796600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21797000 0! #21797500 1! #21797600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21798000 0! #21798500 1! #21798600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21799000 0! #21799500 1! #21799600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21800000 0! #21800500 1! #21800600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21801000 0! #21801500 1! #21801600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21802000 0! #21802500 1! #21802600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21803000 0! #21803500 1! #21803600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21804000 0! #21804500 1! #21804600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21805000 0! #21805500 1! #21805600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21806000 0! #21806500 1! #21806600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21807000 0! #21807500 1! #21807600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21808000 0! #21808500 1! #21808600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21809000 0! #21809500 1! #21809600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21810000 0! #21810500 1! #21810600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21811000 0! #21811500 1! #21811600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21812000 0! #21812500 1! #21812600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21813000 0! #21813500 1! #21813600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21814000 0! #21814500 1! #21814600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21815000 0! #21815500 1! #21815600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21816000 0! #21816500 1! #21816600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21817000 0! #21817500 1! #21817600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21818000 0! #21818500 1! #21818600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21819000 0! #21819500 1! #21819600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21820000 0! #21820500 1! #21820600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21821000 0! #21821500 1! #21821600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21822000 0! #21822500 1! #21822600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21823000 0! #21823500 1! #21823600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21824000 0! #21824500 1! #21824600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21825000 0! #21825500 1! #21825600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21826000 0! #21826500 1! #21826600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21827000 0! #21827500 1! #21827600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21828000 0! #21828500 1! #21828600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21829000 0! #21829500 1! #21829600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21830000 0! #21830500 1! #21830600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21831000 0! #21831500 1! #21831600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21832000 0! #21832500 1! #21832600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21833000 0! #21833500 1! #21833600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21834000 0! #21834500 1! #21834600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21835000 0! #21835500 1! #21835600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21836000 0! #21836500 1! #21836600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21837000 0! #21837500 1! #21837600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21838000 0! #21838500 1! #21838600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21839000 0! #21839500 1! #21839600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21840000 0! #21840500 1! #21840600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21841000 0! #21841500 1! #21841600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21842000 0! #21842500 1! #21842600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21843000 0! #21843500 1! #21843600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21844000 0! #21844500 1! #21844600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21845000 0! #21845500 1! #21845600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21846000 0! #21846500 1! #21846600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21847000 0! #21847500 1! #21847600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21848000 0! #21848500 1! #21848600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21849000 0! #21849500 1! #21849600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21850000 0! #21850500 1! #21850600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21851000 0! #21851500 1! #21851600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21852000 0! #21852500 1! #21852600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21853000 0! #21853500 1! #21853600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21854000 0! #21854500 1! #21854600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21855000 0! #21855500 1! #21855600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21856000 0! #21856500 1! #21856600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1Q #21857000 0! #21857500 1! #21857600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21858000 0! #21858500 1! #21858600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21859000 0! #21859500 1! #21859600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21860000 0! #21860500 1! #21860600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21861000 0! #21861500 1! #21861600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21862000 0! #21862500 1! #21862600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21863000 0! #21863500 1! #21863600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21864000 0! #21864500 1! #21864600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21865000 0! #21865500 1! #21865600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21866000 0! #21866500 1! #21866600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21867000 0! #21867500 1! #21867600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21868000 0! #21868500 1! #21868600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21869000 0! #21869500 1! #21869600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21870000 0! #21870500 1! #21870600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21871000 0! #21871500 1! #21871600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21872000 0! #21872500 1! #21872600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21873000 0! #21873500 1! #21873600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21874000 0! #21874500 1! #21874600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21875000 0! #21875500 1! #21875600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21876000 0! #21876500 1! #21876600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21877000 0! #21877500 1! #21877600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21878000 0! #21878500 1! #21878600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21879000 0! #21879500 1! #21879600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21880000 0! #21880500 1! #21880600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21881000 0! #21881500 1! #21881600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21882000 0! #21882500 1! #21882600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21883000 0! #21883500 1! #21883600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21884000 0! #21884500 1! #21884600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21885000 0! #21885500 1! #21885600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21886000 0! #21886500 1! #21886600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21887000 0! #21887500 1! #21887600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21888000 0! #21888500 1! #21888600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21889000 0! #21889500 1! #21889600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21890000 0! #21890500 1! #21890600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21891000 0! #21891500 1! #21891600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21892000 0! #21892500 1! #21892600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21893000 0! #21893500 1! #21893600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21894000 0! #21894500 1! #21894600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21895000 0! #21895500 1! #21895600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21896000 0! #21896500 1! #21896600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21897000 0! #21897500 1! #21897600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21898000 0! #21898500 1! #21898600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21899000 0! #21899500 1! #21899600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21900000 0! #21900500 1! #21900600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21901000 0! #21901500 1! #21901600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21902000 0! #21902500 1! #21902600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21903000 0! #21903500 1! #21903600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21904000 0! #21904500 1! #21904600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21905000 0! #21905500 1! #21905600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21906000 0! #21906500 1! #21906600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21907000 0! #21907500 1! #21907600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #21907700 b111 g b1000000 c 0e 0h #21908000 0! #21908500 1! #21908600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21909000 0! #21909500 1! #21909600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21910000 0! #21910500 1! #21910600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21911000 0! #21911500 1! #21911600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21912000 0! #21912500 1! #21912600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21913000 0! #21913500 1! #21913600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21914000 0! #21914500 1! #21914600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21915000 0! #21915500 1! #21915600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21916000 0! #21916500 1! #21916600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21917000 0! #21917500 1! #21917600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21918000 0! #21918500 1! #21918600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21919000 0! #21919500 1! #21919600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21920000 0! #21920500 1! #21920600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21921000 0! #21921500 1! #21921600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21922000 0! #21922500 1! #21922600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21923000 0! #21923500 1! #21923600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21924000 0! #21924500 1! #21924600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21925000 0! #21925500 1! #21925600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21926000 0! #21926500 1! #21926600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21927000 0! #21927500 1! #21927600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21928000 0! #21928500 1! #21928600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21929000 0! #21929500 1! #21929600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21930000 0! #21930500 1! #21930600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21931000 0! #21931500 1! #21931600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21932000 0! #21932500 1! #21932600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21933000 0! #21933500 1! #21933600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21934000 0! #21934500 1! #21934600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21935000 0! #21935500 1! #21935600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21936000 0! #21936500 1! #21936600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21937000 0! #21937500 1! #21937600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21938000 0! #21938500 1! #21938600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21939000 0! #21939500 1! #21939600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21940000 0! #21940500 1! #21940600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21941000 0! #21941500 1! #21941600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21942000 0! #21942500 1! #21942600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21943000 0! #21943500 1! #21943600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21944000 0! #21944500 1! #21944600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21945000 0! #21945500 1! #21945600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21946000 0! #21946500 1! #21946600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21947000 0! #21947500 1! #21947600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21948000 0! #21948500 1! #21948600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21949000 0! #21949500 1! #21949600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21950000 0! #21950500 1! #21950600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21951000 0! #21951500 1! #21951600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21952000 0! #21952500 1! #21952600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21953000 0! #21953500 1! #21953600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21954000 0! #21954500 1! #21954600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21955000 0! #21955500 1! #21955600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21956000 0! #21956500 1! #21956600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21957000 0! #21957500 1! #21957600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21958000 0! #21958500 1! #21958600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21959000 0! #21959500 1! #21959600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21960000 0! #21960500 1! #21960600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21961000 0! #21961500 1! #21961600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21962000 0! #21962500 1! #21962600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21963000 0! #21963500 1! #21963600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21964000 0! #21964500 1! #21964600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21965000 0! #21965500 1! #21965600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21966000 0! #21966500 1! #21966600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21967000 0! #21967500 1! #21967600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21968000 0! #21968500 1! #21968600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21969000 0! #21969500 1! #21969600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21970000 0! #21970500 1! #21970600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21971000 0! #21971500 1! #21971600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21972000 0! #21972500 1! #21972600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21973000 0! #21973500 1! #21973600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21974000 0! #21974500 1! #21974600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21975000 0! #21975500 1! #21975600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21976000 0! #21976500 1! #21976600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21977000 0! #21977500 1! #21977600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21978000 0! #21978500 1! #21978600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21979000 0! #21979500 1! #21979600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21980000 0! #21980500 1! #21980600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21981000 0! #21981500 1! #21981600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21982000 0! #21982500 1! #21982600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21983000 0! #21983500 1! #21983600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21984000 0! #21984500 1! #21984600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21985000 0! #21985500 1! #21985600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21986000 0! #21986500 1! #21986600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21987000 0! #21987500 1! #21987600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21988000 0! #21988500 1! #21988600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21989000 0! #21989500 1! #21989600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21990000 0! #21990500 1! #21990600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21991000 0! #21991500 1! #21991600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21992000 0! #21992500 1! #21992600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21993000 0! #21993500 1! #21993600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21994000 0! #21994500 1! #21994600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21995000 0! #21995500 1! #21995600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21996000 0! #21996500 1! #21996600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21997000 0! #21997500 1! #21997600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #21998000 0! #21998500 1! #21998600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #21999000 0! #21999500 1! #21999600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22000000 0! #22000500 1! #22000600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22001000 0! #22001500 1! #22001600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22002000 0! #22002500 1! #22002600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22003000 0! #22003500 1! #22003600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22004000 0! #22004500 1! #22004600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22005000 0! #22005500 1! #22005600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22006000 0! #22006500 1! #22006600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22007000 0! #22007500 1! #22007600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22008000 0! #22008500 1! #22008600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22009000 0! #22009500 1! #22009600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #22009700 1j b10 q 1i 1O #22010000 0! #22010500 1! #22010600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22011000 0! #22011500 1! #22011600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22012000 0! #22012500 1! #22012600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22013000 0! #22013500 1! #22013600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B b1000001 C 1H #22014000 0! #22014500 1! #22014600 b1000001 J xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22015000 0! #22015500 1! #22015600 1E 1F 1G b1 D 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 0@ 1A 1B b0 C 1H #22016000 0! #22016500 1! #22016600 xE bx D x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22016700 1E 1F 1G b10000 D 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B b1000001 C 1H #22017000 0! #22017500 1! #22017600 xE bx D x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22018000 0! #22018500 1! #22018600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H b1000011 C #22019000 0! #22019500 1! #22019600 b1000011 J xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22020000 0! #22020500 1! #22020600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22021000 0! #22021500 1! #22021600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22022000 0! #22022500 1! #22022600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22023000 0! #22023500 1! #22023600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22024000 0! #22024500 1! #22024600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22025000 0! #22025500 1! #22025600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22026000 0! #22026500 1! #22026600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22027000 0! #22027500 1! #22027600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22028000 0! #22028500 1! #22028600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22029000 0! #22029500 1! #22029600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22030000 0! #22030500 1! #22030600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22031000 0! #22031500 1! #22031600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22032000 0! #22032500 1! #22032600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22033000 0! #22033500 1! #22033600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22034000 0! #22034500 1! #22034600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22035000 0! #22035500 1! #22035600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22036000 0! #22036500 1! #22036600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22037000 0! #22037500 1! #22037600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22038000 0! #22038500 1! #22038600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22039000 0! #22039500 1! #22039600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22040000 0! #22040500 1! #22040600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22041000 0! #22041500 1! #22041600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22042000 0! #22042500 1! #22042600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22043000 0! #22043500 1! #22043600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22044000 0! #22044500 1! #22044600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22045000 0! #22045500 1! #22045600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22046000 0! #22046500 1! #22046600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22047000 0! #22047500 1! #22047600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22048000 0! #22048500 1! #22048600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22049000 0! #22049500 1! #22049600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22050000 0! #22050500 1! #22050600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22051000 0! #22051500 1! #22051600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22052000 0! #22052500 1! #22052600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22053000 0! #22053500 1! #22053600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22054000 0! #22054500 1! #22054600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22055000 0! #22055500 1! #22055600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22056000 0! #22056500 1! #22056600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22057000 0! #22057500 1! #22057600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22058000 0! #22058500 1! #22058600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22059000 0! #22059500 1! #22059600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22060000 0! #22060500 1! #22060600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22061000 0! #22061500 1! #22061600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22062000 0! #22062500 1! #22062600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22063000 0! #22063500 1! #22063600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22064000 0! #22064500 1! #22064600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22065000 0! #22065500 1! #22065600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22066000 0! #22066500 1! #22066600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22067000 0! #22067500 1! #22067600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22068000 0! #22068500 1! #22068600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22069000 0! #22069500 1! #22069600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22070000 0! #22070500 1! #22070600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22071000 0! #22071500 1! #22071600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22072000 0! #22072500 1! #22072600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22073000 0! #22073500 1! #22073600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22074000 0! #22074500 1! #22074600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22075000 0! #22075500 1! #22075600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22076000 0! #22076500 1! #22076600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22077000 0! #22077500 1! #22077600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22078000 0! #22078500 1! #22078600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22079000 0! #22079500 1! #22079600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22080000 0! #22080500 1! #22080600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22081000 0! #22081500 1! #22081600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22082000 0! #22082500 1! #22082600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22083000 0! #22083500 1! #22083600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22084000 0! #22084500 1! #22084600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22085000 0! #22085500 1! #22085600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22086000 0! #22086500 1! #22086600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22087000 0! #22087500 1! #22087600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22088000 0! #22088500 1! #22088600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22089000 0! #22089500 1! #22089600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22090000 0! #22090500 1! #22090600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22091000 0! #22091500 1! #22091600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22092000 0! #22092500 1! #22092600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22093000 0! #22093500 1! #22093600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22094000 0! #22094500 1! #22094600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22095000 0! #22095500 1! #22095600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22096000 0! #22096500 1! #22096600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22097000 0! #22097500 1! #22097600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22098000 0! #22098500 1! #22098600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22099000 0! #22099500 1! #22099600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22100000 0! #22100500 1! #22100600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22101000 0! #22101500 1! #22101600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22102000 0! #22102500 1! #22102600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22103000 0! #22103500 1! #22103600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22104000 0! #22104500 1! #22104600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22105000 0! #22105500 1! #22105600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22106000 0! #22106500 1! #22106600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22107000 0! #22107500 1! #22107600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22108000 0! #22108500 1! #22108600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22109000 0! #22109500 1! #22109600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22110000 0! #22110500 1! #22110600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22111000 0! #22111500 1! #22111600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0Q 0O #22112000 0! #22112500 1! #22112600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22113000 0! #22113500 1! #22113600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22114000 0! #22114500 1! #22114600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22115000 0! #22115500 1! #22115600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22116000 0! #22116500 1! #22116600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22117000 0! #22117500 1! #22117600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22118000 0! #22118500 1! #22118600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22119000 0! #22119500 1! #22119600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22120000 0! #22120500 1! #22120600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22121000 0! #22121500 1! #22121600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22122000 0! #22122500 1! #22122600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22123000 0! #22123500 1! #22123600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22124000 0! #22124500 1! #22124600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22125000 0! #22125500 1! #22125600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22126000 0! #22126500 1! #22126600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22127000 0! #22127500 1! #22127600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22128000 0! #22128500 1! #22128600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22129000 0! #22129500 1! #22129600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22130000 0! #22130500 1! #22130600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22131000 0! #22131500 1! #22131600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22132000 0! #22132500 1! #22132600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22133000 0! #22133500 1! #22133600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22134000 0! #22134500 1! #22134600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22135000 0! #22135500 1! #22135600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22136000 0! #22136500 1! #22136600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22137000 0! #22137500 1! #22137600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22138000 0! #22138500 1! #22138600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22139000 0! #22139500 1! #22139600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22140000 0! #22140500 1! #22140600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22141000 0! #22141500 1! #22141600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22142000 0! #22142500 1! #22142600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22143000 0! #22143500 1! #22143600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22144000 0! #22144500 1! #22144600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22145000 0! #22145500 1! #22145600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22146000 0! #22146500 1! #22146600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22147000 0! #22147500 1! #22147600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22148000 0! #22148500 1! #22148600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22149000 0! #22149500 1! #22149600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22150000 0! #22150500 1! #22150600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22151000 0! #22151500 1! #22151600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22152000 0! #22152500 1! #22152600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22153000 0! #22153500 1! #22153600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22154000 0! #22154500 1! #22154600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22155000 0! #22155500 1! #22155600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22156000 0! #22156500 1! #22156600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22157000 0! #22157500 1! #22157600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22158000 0! #22158500 1! #22158600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22159000 0! #22159500 1! #22159600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22160000 0! #22160500 1! #22160600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22161000 0! #22161500 1! #22161600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22162000 0! #22162500 1! #22162600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #22162700 b10000000 c #22163000 0! #22163500 1! #22163600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22164000 0! #22164500 1! #22164600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22165000 0! #22165500 1! #22165600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22166000 0! #22166500 1! #22166600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22167000 0! #22167500 1! #22167600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22168000 0! #22168500 1! #22168600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22169000 0! #22169500 1! #22169600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22170000 0! #22170500 1! #22170600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22171000 0! #22171500 1! #22171600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22172000 0! #22172500 1! #22172600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22173000 0! #22173500 1! #22173600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22174000 0! #22174500 1! #22174600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22175000 0! #22175500 1! #22175600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22176000 0! #22176500 1! #22176600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22177000 0! #22177500 1! #22177600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22178000 0! #22178500 1! #22178600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22179000 0! #22179500 1! #22179600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22180000 0! #22180500 1! #22180600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22181000 0! #22181500 1! #22181600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22182000 0! #22182500 1! #22182600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22183000 0! #22183500 1! #22183600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22184000 0! #22184500 1! #22184600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22185000 0! #22185500 1! #22185600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22186000 0! #22186500 1! #22186600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22187000 0! #22187500 1! #22187600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22188000 0! #22188500 1! #22188600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22189000 0! #22189500 1! #22189600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22190000 0! #22190500 1! #22190600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22191000 0! #22191500 1! #22191600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22192000 0! #22192500 1! #22192600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22193000 0! #22193500 1! #22193600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22194000 0! #22194500 1! #22194600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22195000 0! #22195500 1! #22195600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22196000 0! #22196500 1! #22196600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22197000 0! #22197500 1! #22197600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22198000 0! #22198500 1! #22198600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22199000 0! #22199500 1! #22199600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22200000 0! #22200500 1! #22200600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22201000 0! #22201500 1! #22201600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22202000 0! #22202500 1! #22202600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22203000 0! #22203500 1! #22203600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22204000 0! #22204500 1! #22204600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22205000 0! #22205500 1! #22205600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22206000 0! #22206500 1! #22206600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22207000 0! #22207500 1! #22207600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22208000 0! #22208500 1! #22208600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22209000 0! #22209500 1! #22209600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22210000 0! #22210500 1! #22210600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22211000 0! #22211500 1! #22211600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22212000 0! #22212500 1! #22212600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22213000 0! #22213500 1! #22213600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22214000 0! #22214500 1! #22214600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22215000 0! #22215500 1! #22215600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22216000 0! #22216500 1! #22216600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22217000 0! #22217500 1! #22217600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22218000 0! #22218500 1! #22218600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22219000 0! #22219500 1! #22219600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22220000 0! #22220500 1! #22220600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22221000 0! #22221500 1! #22221600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22222000 0! #22222500 1! #22222600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22223000 0! #22223500 1! #22223600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22224000 0! #22224500 1! #22224600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22225000 0! #22225500 1! #22225600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22226000 0! #22226500 1! #22226600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22227000 0! #22227500 1! #22227600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22228000 0! #22228500 1! #22228600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22229000 0! #22229500 1! #22229600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22230000 0! #22230500 1! #22230600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22231000 0! #22231500 1! #22231600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22232000 0! #22232500 1! #22232600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22233000 0! #22233500 1! #22233600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22234000 0! #22234500 1! #22234600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22235000 0! #22235500 1! #22235600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22236000 0! #22236500 1! #22236600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22237000 0! #22237500 1! #22237600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22238000 0! #22238500 1! #22238600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22239000 0! #22239500 1! #22239600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22240000 0! #22240500 1! #22240600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22241000 0! #22241500 1! #22241600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22242000 0! #22242500 1! #22242600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22243000 0! #22243500 1! #22243600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22244000 0! #22244500 1! #22244600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22245000 0! #22245500 1! #22245600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22246000 0! #22246500 1! #22246600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22247000 0! #22247500 1! #22247600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22248000 0! #22248500 1! #22248600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22249000 0! #22249500 1! #22249600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22250000 0! #22250500 1! #22250600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22251000 0! #22251500 1! #22251600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22252000 0! #22252500 1! #22252600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22253000 0! #22253500 1! #22253600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22254000 0! #22254500 1! #22254600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22255000 0! #22255500 1! #22255600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22256000 0! #22256500 1! #22256600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22257000 0! #22257500 1! #22257600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22258000 0! #22258500 1! #22258600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22259000 0! #22259500 1! #22259600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22260000 0! #22260500 1! #22260600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22261000 0! #22261500 1! #22261600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22262000 0! #22262500 1! #22262600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22263000 0! #22263500 1! #22263600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22264000 0! #22264500 1! #22264600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #22264700 0i #22265000 0! #22265500 1! #22265600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22266000 0! #22266500 1! #22266600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22267000 0! #22267500 1! #22267600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22268000 0! #22268500 1! #22268600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22269000 0! #22269500 1! #22269600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22270000 0! #22270500 1! #22270600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22271000 0! #22271500 1! #22271600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22272000 0! #22272500 1! #22272600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22273000 0! #22273500 1! #22273600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22274000 0! #22274500 1! #22274600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22275000 0! #22275500 1! #22275600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22276000 0! #22276500 1! #22276600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22277000 0! #22277500 1! #22277600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22278000 0! #22278500 1! #22278600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22279000 0! #22279500 1! #22279600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22280000 0! #22280500 1! #22280600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22281000 0! #22281500 1! #22281600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22282000 0! #22282500 1! #22282600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22283000 0! #22283500 1! #22283600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22284000 0! #22284500 1! #22284600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22285000 0! #22285500 1! #22285600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22286000 0! #22286500 1! #22286600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22287000 0! #22287500 1! #22287600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22288000 0! #22288500 1! #22288600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22289000 0! #22289500 1! #22289600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22290000 0! #22290500 1! #22290600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22291000 0! #22291500 1! #22291600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22292000 0! #22292500 1! #22292600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22293000 0! #22293500 1! #22293600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22294000 0! #22294500 1! #22294600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22295000 0! #22295500 1! #22295600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22296000 0! #22296500 1! #22296600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22297000 0! #22297500 1! #22297600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22298000 0! #22298500 1! #22298600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22299000 0! #22299500 1! #22299600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22300000 0! #22300500 1! #22300600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22301000 0! #22301500 1! #22301600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22302000 0! #22302500 1! #22302600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22303000 0! #22303500 1! #22303600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22304000 0! #22304500 1! #22304600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22305000 0! #22305500 1! #22305600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22306000 0! #22306500 1! #22306600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22307000 0! #22307500 1! #22307600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22308000 0! #22308500 1! #22308600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22309000 0! #22309500 1! #22309600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22310000 0! #22310500 1! #22310600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22311000 0! #22311500 1! #22311600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22312000 0! #22312500 1! #22312600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22313000 0! #22313500 1! #22313600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22314000 0! #22314500 1! #22314600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22315000 0! #22315500 1! #22315600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22316000 0! #22316500 1! #22316600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22317000 0! #22317500 1! #22317600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22318000 0! #22318500 1! #22318600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22319000 0! #22319500 1! #22319600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22320000 0! #22320500 1! #22320600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22321000 0! #22321500 1! #22321600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22322000 0! #22322500 1! #22322600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22323000 0! #22323500 1! #22323600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22324000 0! #22324500 1! #22324600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22325000 0! #22325500 1! #22325600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22326000 0! #22326500 1! #22326600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22327000 0! #22327500 1! #22327600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22328000 0! #22328500 1! #22328600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22329000 0! #22329500 1! #22329600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22330000 0! #22330500 1! #22330600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22331000 0! #22331500 1! #22331600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22332000 0! #22332500 1! #22332600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22333000 0! #22333500 1! #22333600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22334000 0! #22334500 1! #22334600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22335000 0! #22335500 1! #22335600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22336000 0! #22336500 1! #22336600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22337000 0! #22337500 1! #22337600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22338000 0! #22338500 1! #22338600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22339000 0! #22339500 1! #22339600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22340000 0! #22340500 1! #22340600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22341000 0! #22341500 1! #22341600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22342000 0! #22342500 1! #22342600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22343000 0! #22343500 1! #22343600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22344000 0! #22344500 1! #22344600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22345000 0! #22345500 1! #22345600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22346000 0! #22346500 1! #22346600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22347000 0! #22347500 1! #22347600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22348000 0! #22348500 1! #22348600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22349000 0! #22349500 1! #22349600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22350000 0! #22350500 1! #22350600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22351000 0! #22351500 1! #22351600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22352000 0! #22352500 1! #22352600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22353000 0! #22353500 1! #22353600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22354000 0! #22354500 1! #22354600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22355000 0! #22355500 1! #22355600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22356000 0! #22356500 1! #22356600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22357000 0! #22357500 1! #22357600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22358000 0! #22358500 1! #22358600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22359000 0! #22359500 1! #22359600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22360000 0! #22360500 1! #22360600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22361000 0! #22361500 1! #22361600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22362000 0! #22362500 1! #22362600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22363000 0! #22363500 1! #22363600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22364000 0! #22364500 1! #22364600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22365000 0! #22365500 1! #22365600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22366000 0! #22366500 1! #22366600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22367000 0! #22367500 1! #22367600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22368000 0! #22368500 1! #22368600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22369000 0! #22369500 1! #22369600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22370000 0! #22370500 1! #22370600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22371000 0! #22371500 1! #22371600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22372000 0! #22372500 1! #22372600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22373000 0! #22373500 1! #22373600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22374000 0! #22374500 1! #22374600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22375000 0! #22375500 1! #22375600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22376000 0! #22376500 1! #22376600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22377000 0! #22377500 1! #22377600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22378000 0! #22378500 1! #22378600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22379000 0! #22379500 1! #22379600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22380000 0! #22380500 1! #22380600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22381000 0! #22381500 1! #22381600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22382000 0! #22382500 1! #22382600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22383000 0! #22383500 1! #22383600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22384000 0! #22384500 1! #22384600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22385000 0! #22385500 1! #22385600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22386000 0! #22386500 1! #22386600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22387000 0! #22387500 1! #22387600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22388000 0! #22388500 1! #22388600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22389000 0! #22389500 1! #22389600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22390000 0! #22390500 1! #22390600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22391000 0! #22391500 1! #22391600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22392000 0! #22392500 1! #22392600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22393000 0! #22393500 1! #22393600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22394000 0! #22394500 1! #22394600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22395000 0! #22395500 1! #22395600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22396000 0! #22396500 1! #22396600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22397000 0! #22397500 1! #22397600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22398000 0! #22398500 1! #22398600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22399000 0! #22399500 1! #22399600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22400000 0! #22400500 1! #22400600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22401000 0! #22401500 1! #22401600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22402000 0! #22402500 1! #22402600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22403000 0! #22403500 1! #22403600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22404000 0! #22404500 1! #22404600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22405000 0! #22405500 1! #22405600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22406000 0! #22406500 1! #22406600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22407000 0! #22407500 1! #22407600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22408000 0! #22408500 1! #22408600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22409000 0! #22409500 1! #22409600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22410000 0! #22410500 1! #22410600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22411000 0! #22411500 1! #22411600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22412000 0! #22412500 1! #22412600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22413000 0! #22413500 1! #22413600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22414000 0! #22414500 1! #22414600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22415000 0! #22415500 1! #22415600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22416000 0! #22416500 1! #22416600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22417000 0! #22417500 1! #22417600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #22417700 b110 g b0 c #22418000 0! #22418500 1! #22418600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22419000 0! #22419500 1! #22419600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22420000 0! #22420500 1! #22420600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22421000 0! #22421500 1! #22421600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22422000 0! #22422500 1! #22422600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22423000 0! #22423500 1! #22423600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22424000 0! #22424500 1! #22424600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22425000 0! #22425500 1! #22425600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22426000 0! #22426500 1! #22426600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22427000 0! #22427500 1! #22427600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22428000 0! #22428500 1! #22428600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22429000 0! #22429500 1! #22429600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22430000 0! #22430500 1! #22430600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22431000 0! #22431500 1! #22431600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22432000 0! #22432500 1! #22432600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22433000 0! #22433500 1! #22433600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22434000 0! #22434500 1! #22434600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22435000 0! #22435500 1! #22435600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22436000 0! #22436500 1! #22436600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22437000 0! #22437500 1! #22437600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22438000 0! #22438500 1! #22438600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22439000 0! #22439500 1! #22439600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22440000 0! #22440500 1! #22440600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22441000 0! #22441500 1! #22441600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22442000 0! #22442500 1! #22442600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22443000 0! #22443500 1! #22443600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22444000 0! #22444500 1! #22444600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22445000 0! #22445500 1! #22445600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22446000 0! #22446500 1! #22446600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22447000 0! #22447500 1! #22447600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22448000 0! #22448500 1! #22448600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22449000 0! #22449500 1! #22449600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22450000 0! #22450500 1! #22450600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22451000 0! #22451500 1! #22451600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22452000 0! #22452500 1! #22452600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22453000 0! #22453500 1! #22453600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22454000 0! #22454500 1! #22454600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22455000 0! #22455500 1! #22455600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22456000 0! #22456500 1! #22456600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22457000 0! #22457500 1! #22457600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22458000 0! #22458500 1! #22458600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22459000 0! #22459500 1! #22459600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22460000 0! #22460500 1! #22460600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22461000 0! #22461500 1! #22461600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22462000 0! #22462500 1! #22462600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22463000 0! #22463500 1! #22463600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22464000 0! #22464500 1! #22464600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22465000 0! #22465500 1! #22465600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22466000 0! #22466500 1! #22466600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22467000 0! #22467500 1! #22467600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22468000 0! #22468500 1! #22468600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22469000 0! #22469500 1! #22469600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22470000 0! #22470500 1! #22470600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22471000 0! #22471500 1! #22471600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22472000 0! #22472500 1! #22472600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22473000 0! #22473500 1! #22473600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22474000 0! #22474500 1! #22474600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22475000 0! #22475500 1! #22475600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22476000 0! #22476500 1! #22476600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22477000 0! #22477500 1! #22477600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22478000 0! #22478500 1! #22478600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22479000 0! #22479500 1! #22479600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22480000 0! #22480500 1! #22480600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22481000 0! #22481500 1! #22481600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22482000 0! #22482500 1! #22482600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22483000 0! #22483500 1! #22483600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22484000 0! #22484500 1! #22484600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22485000 0! #22485500 1! #22485600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22486000 0! #22486500 1! #22486600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22487000 0! #22487500 1! #22487600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22488000 0! #22488500 1! #22488600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22489000 0! #22489500 1! #22489600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22490000 0! #22490500 1! #22490600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22491000 0! #22491500 1! #22491600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22492000 0! #22492500 1! #22492600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22493000 0! #22493500 1! #22493600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22494000 0! #22494500 1! #22494600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22495000 0! #22495500 1! #22495600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22496000 0! #22496500 1! #22496600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22497000 0! #22497500 1! #22497600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22498000 0! #22498500 1! #22498600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22499000 0! #22499500 1! #22499600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22500000 0! #22500500 1! #22500600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22501000 0! #22501500 1! #22501600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22502000 0! #22502500 1! #22502600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22503000 0! #22503500 1! #22503600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22504000 0! #22504500 1! #22504600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22505000 0! #22505500 1! #22505600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22506000 0! #22506500 1! #22506600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22507000 0! #22507500 1! #22507600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22508000 0! #22508500 1! #22508600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22509000 0! #22509500 1! #22509600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22510000 0! #22510500 1! #22510600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22511000 0! #22511500 1! #22511600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22512000 0! #22512500 1! #22512600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22513000 0! #22513500 1! #22513600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22514000 0! #22514500 1! #22514600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22515000 0! #22515500 1! #22515600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22516000 0! #22516500 1! #22516600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22517000 0! #22517500 1! #22517600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22518000 0! #22518500 1! #22518600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22519000 0! #22519500 1! #22519600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #22520000 0! #22520500 1! #22520600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22521000 0! #22521500 1! #22521600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22522000 0! #22522500 1! #22522600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22523000 0! #22523500 1! #22523600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22524000 0! #22524500 1! #22524600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22525000 0! #22525500 1! #22525600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22526000 0! #22526500 1! #22526600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22527000 0! #22527500 1! #22527600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22528000 0! #22528500 1! #22528600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22529000 0! #22529500 1! #22529600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22530000 0! #22530500 1! #22530600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22531000 0! #22531500 1! #22531600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22532000 0! #22532500 1! #22532600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22533000 0! #22533500 1! #22533600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22534000 0! #22534500 1! #22534600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22535000 0! #22535500 1! #22535600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22536000 0! #22536500 1! #22536600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22537000 0! #22537500 1! #22537600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22538000 0! #22538500 1! #22538600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22539000 0! #22539500 1! #22539600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22540000 0! #22540500 1! #22540600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22541000 0! #22541500 1! #22541600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22542000 0! #22542500 1! #22542600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22543000 0! #22543500 1! #22543600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22544000 0! #22544500 1! #22544600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22545000 0! #22545500 1! #22545600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22546000 0! #22546500 1! #22546600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22547000 0! #22547500 1! #22547600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22548000 0! #22548500 1! #22548600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22549000 0! #22549500 1! #22549600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22550000 0! #22550500 1! #22550600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22551000 0! #22551500 1! #22551600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22552000 0! #22552500 1! #22552600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22553000 0! #22553500 1! #22553600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22554000 0! #22554500 1! #22554600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22555000 0! #22555500 1! #22555600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22556000 0! #22556500 1! #22556600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22557000 0! #22557500 1! #22557600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22558000 0! #22558500 1! #22558600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22559000 0! #22559500 1! #22559600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22560000 0! #22560500 1! #22560600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22561000 0! #22561500 1! #22561600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22562000 0! #22562500 1! #22562600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22563000 0! #22563500 1! #22563600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22564000 0! #22564500 1! #22564600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22565000 0! #22565500 1! #22565600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22566000 0! #22566500 1! #22566600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22567000 0! #22567500 1! #22567600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22568000 0! #22568500 1! #22568600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22569000 0! #22569500 1! #22569600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22570000 0! #22570500 1! #22570600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22571000 0! #22571500 1! #22571600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22572000 0! #22572500 1! #22572600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22573000 0! #22573500 1! #22573600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22574000 0! #22574500 1! #22574600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22575000 0! #22575500 1! #22575600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22576000 0! #22576500 1! #22576600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22577000 0! #22577500 1! #22577600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22578000 0! #22578500 1! #22578600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22579000 0! #22579500 1! #22579600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22580000 0! #22580500 1! #22580600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22581000 0! #22581500 1! #22581600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22582000 0! #22582500 1! #22582600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22583000 0! #22583500 1! #22583600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22584000 0! #22584500 1! #22584600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22585000 0! #22585500 1! #22585600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22586000 0! #22586500 1! #22586600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22587000 0! #22587500 1! #22587600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22588000 0! #22588500 1! #22588600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22589000 0! #22589500 1! #22589600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22590000 0! #22590500 1! #22590600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22591000 0! #22591500 1! #22591600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22592000 0! #22592500 1! #22592600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22593000 0! #22593500 1! #22593600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22594000 0! #22594500 1! #22594600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22595000 0! #22595500 1! #22595600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22596000 0! #22596500 1! #22596600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22597000 0! #22597500 1! #22597600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22598000 0! #22598500 1! #22598600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22599000 0! #22599500 1! #22599600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22600000 0! #22600500 1! #22600600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22601000 0! #22601500 1! #22601600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22602000 0! #22602500 1! #22602600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22603000 0! #22603500 1! #22603600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22604000 0! #22604500 1! #22604600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22605000 0! #22605500 1! #22605600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22606000 0! #22606500 1! #22606600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22607000 0! #22607500 1! #22607600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22608000 0! #22608500 1! #22608600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22609000 0! #22609500 1! #22609600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22610000 0! #22610500 1! #22610600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22611000 0! #22611500 1! #22611600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22612000 0! #22612500 1! #22612600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22613000 0! #22613500 1! #22613600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22614000 0! #22614500 1! #22614600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22615000 0! #22615500 1! #22615600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22616000 0! #22616500 1! #22616600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22617000 0! #22617500 1! #22617600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22618000 0! #22618500 1! #22618600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22619000 0! #22619500 1! #22619600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22620000 0! #22620500 1! #22620600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22621000 0! #22621500 1! #22621600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22622000 0! #22622500 1! #22622600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22623000 0! #22623500 1! #22623600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22624000 0! #22624500 1! #22624600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22625000 0! #22625500 1! #22625600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22626000 0! #22626500 1! #22626600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22627000 0! #22627500 1! #22627600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22628000 0! #22628500 1! #22628600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22629000 0! #22629500 1! #22629600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22630000 0! #22630500 1! #22630600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22631000 0! #22631500 1! #22631600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22632000 0! #22632500 1! #22632600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22633000 0! #22633500 1! #22633600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22634000 0! #22634500 1! #22634600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22635000 0! #22635500 1! #22635600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22636000 0! #22636500 1! #22636600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22637000 0! #22637500 1! #22637600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22638000 0! #22638500 1! #22638600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22639000 0! #22639500 1! #22639600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22640000 0! #22640500 1! #22640600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22641000 0! #22641500 1! #22641600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22642000 0! #22642500 1! #22642600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22643000 0! #22643500 1! #22643600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22644000 0! #22644500 1! #22644600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22645000 0! #22645500 1! #22645600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22646000 0! #22646500 1! #22646600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22647000 0! #22647500 1! #22647600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22648000 0! #22648500 1! #22648600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22649000 0! #22649500 1! #22649600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22650000 0! #22650500 1! #22650600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22651000 0! #22651500 1! #22651600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22652000 0! #22652500 1! #22652600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22653000 0! #22653500 1! #22653600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22654000 0! #22654500 1! #22654600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22655000 0! #22655500 1! #22655600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22656000 0! #22656500 1! #22656600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22657000 0! #22657500 1! #22657600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22658000 0! #22658500 1! #22658600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22659000 0! #22659500 1! #22659600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22660000 0! #22660500 1! #22660600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22661000 0! #22661500 1! #22661600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22662000 0! #22662500 1! #22662600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22663000 0! #22663500 1! #22663600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22664000 0! #22664500 1! #22664600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22665000 0! #22665500 1! #22665600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22666000 0! #22666500 1! #22666600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22667000 0! #22667500 1! #22667600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22668000 0! #22668500 1! #22668600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22669000 0! #22669500 1! #22669600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22670000 0! #22670500 1! #22670600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22671000 0! #22671500 1! #22671600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22672000 0! #22672500 1! #22672600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #22672700 b101 g #22673000 0! #22673500 1! #22673600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22674000 0! #22674500 1! #22674600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22675000 0! #22675500 1! #22675600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22676000 0! #22676500 1! #22676600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22677000 0! #22677500 1! #22677600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22678000 0! #22678500 1! #22678600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22679000 0! #22679500 1! #22679600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22680000 0! #22680500 1! #22680600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22681000 0! #22681500 1! #22681600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22682000 0! #22682500 1! #22682600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22683000 0! #22683500 1! #22683600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22684000 0! #22684500 1! #22684600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22685000 0! #22685500 1! #22685600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22686000 0! #22686500 1! #22686600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22687000 0! #22687500 1! #22687600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22688000 0! #22688500 1! #22688600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22689000 0! #22689500 1! #22689600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22690000 0! #22690500 1! #22690600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22691000 0! #22691500 1! #22691600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22692000 0! #22692500 1! #22692600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22693000 0! #22693500 1! #22693600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22694000 0! #22694500 1! #22694600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22695000 0! #22695500 1! #22695600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22696000 0! #22696500 1! #22696600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22697000 0! #22697500 1! #22697600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22698000 0! #22698500 1! #22698600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22699000 0! #22699500 1! #22699600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22700000 0! #22700500 1! #22700600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22701000 0! #22701500 1! #22701600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22702000 0! #22702500 1! #22702600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22703000 0! #22703500 1! #22703600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22704000 0! #22704500 1! #22704600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22705000 0! #22705500 1! #22705600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22706000 0! #22706500 1! #22706600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22707000 0! #22707500 1! #22707600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22708000 0! #22708500 1! #22708600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22709000 0! #22709500 1! #22709600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22710000 0! #22710500 1! #22710600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22711000 0! #22711500 1! #22711600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22712000 0! #22712500 1! #22712600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22713000 0! #22713500 1! #22713600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22714000 0! #22714500 1! #22714600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22715000 0! #22715500 1! #22715600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22716000 0! #22716500 1! #22716600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22717000 0! #22717500 1! #22717600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22718000 0! #22718500 1! #22718600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22719000 0! #22719500 1! #22719600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22720000 0! #22720500 1! #22720600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22721000 0! #22721500 1! #22721600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22722000 0! #22722500 1! #22722600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22723000 0! #22723500 1! #22723600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22724000 0! #22724500 1! #22724600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22725000 0! #22725500 1! #22725600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22726000 0! #22726500 1! #22726600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22727000 0! #22727500 1! #22727600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22728000 0! #22728500 1! #22728600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22729000 0! #22729500 1! #22729600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22730000 0! #22730500 1! #22730600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22731000 0! #22731500 1! #22731600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22732000 0! #22732500 1! #22732600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22733000 0! #22733500 1! #22733600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22734000 0! #22734500 1! #22734600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22735000 0! #22735500 1! #22735600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22736000 0! #22736500 1! #22736600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22737000 0! #22737500 1! #22737600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22738000 0! #22738500 1! #22738600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22739000 0! #22739500 1! #22739600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22740000 0! #22740500 1! #22740600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22741000 0! #22741500 1! #22741600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22742000 0! #22742500 1! #22742600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22743000 0! #22743500 1! #22743600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22744000 0! #22744500 1! #22744600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22745000 0! #22745500 1! #22745600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22746000 0! #22746500 1! #22746600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22747000 0! #22747500 1! #22747600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22748000 0! #22748500 1! #22748600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22749000 0! #22749500 1! #22749600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22750000 0! #22750500 1! #22750600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22751000 0! #22751500 1! #22751600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22752000 0! #22752500 1! #22752600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22753000 0! #22753500 1! #22753600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22754000 0! #22754500 1! #22754600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22755000 0! #22755500 1! #22755600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22756000 0! #22756500 1! #22756600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22757000 0! #22757500 1! #22757600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22758000 0! #22758500 1! #22758600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22759000 0! #22759500 1! #22759600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22760000 0! #22760500 1! #22760600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22761000 0! #22761500 1! #22761600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22762000 0! #22762500 1! #22762600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22763000 0! #22763500 1! #22763600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22764000 0! #22764500 1! #22764600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22765000 0! #22765500 1! #22765600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22766000 0! #22766500 1! #22766600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22767000 0! #22767500 1! #22767600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22768000 0! #22768500 1! #22768600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22769000 0! #22769500 1! #22769600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22770000 0! #22770500 1! #22770600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22771000 0! #22771500 1! #22771600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22772000 0! #22772500 1! #22772600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22773000 0! #22773500 1! #22773600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22774000 0! #22774500 1! #22774600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #22775000 0! #22775500 1! #22775600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22776000 0! #22776500 1! #22776600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22777000 0! #22777500 1! #22777600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22778000 0! #22778500 1! #22778600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22779000 0! #22779500 1! #22779600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22780000 0! #22780500 1! #22780600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22781000 0! #22781500 1! #22781600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22782000 0! #22782500 1! #22782600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22783000 0! #22783500 1! #22783600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22784000 0! #22784500 1! #22784600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22785000 0! #22785500 1! #22785600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22786000 0! #22786500 1! #22786600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22787000 0! #22787500 1! #22787600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22788000 0! #22788500 1! #22788600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22789000 0! #22789500 1! #22789600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22790000 0! #22790500 1! #22790600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22791000 0! #22791500 1! #22791600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22792000 0! #22792500 1! #22792600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22793000 0! #22793500 1! #22793600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22794000 0! #22794500 1! #22794600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22795000 0! #22795500 1! #22795600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22796000 0! #22796500 1! #22796600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22797000 0! #22797500 1! #22797600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22798000 0! #22798500 1! #22798600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22799000 0! #22799500 1! #22799600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22800000 0! #22800500 1! #22800600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22801000 0! #22801500 1! #22801600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22802000 0! #22802500 1! #22802600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22803000 0! #22803500 1! #22803600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22804000 0! #22804500 1! #22804600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22805000 0! #22805500 1! #22805600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22806000 0! #22806500 1! #22806600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22807000 0! #22807500 1! #22807600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22808000 0! #22808500 1! #22808600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22809000 0! #22809500 1! #22809600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22810000 0! #22810500 1! #22810600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22811000 0! #22811500 1! #22811600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22812000 0! #22812500 1! #22812600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22813000 0! #22813500 1! #22813600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22814000 0! #22814500 1! #22814600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22815000 0! #22815500 1! #22815600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22816000 0! #22816500 1! #22816600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22817000 0! #22817500 1! #22817600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22818000 0! #22818500 1! #22818600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22819000 0! #22819500 1! #22819600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22820000 0! #22820500 1! #22820600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22821000 0! #22821500 1! #22821600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22822000 0! #22822500 1! #22822600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22823000 0! #22823500 1! #22823600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22824000 0! #22824500 1! #22824600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22825000 0! #22825500 1! #22825600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22826000 0! #22826500 1! #22826600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22827000 0! #22827500 1! #22827600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22828000 0! #22828500 1! #22828600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22829000 0! #22829500 1! #22829600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22830000 0! #22830500 1! #22830600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22831000 0! #22831500 1! #22831600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22832000 0! #22832500 1! #22832600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22833000 0! #22833500 1! #22833600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22834000 0! #22834500 1! #22834600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22835000 0! #22835500 1! #22835600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22836000 0! #22836500 1! #22836600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22837000 0! #22837500 1! #22837600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22838000 0! #22838500 1! #22838600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22839000 0! #22839500 1! #22839600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22840000 0! #22840500 1! #22840600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22841000 0! #22841500 1! #22841600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22842000 0! #22842500 1! #22842600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22843000 0! #22843500 1! #22843600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22844000 0! #22844500 1! #22844600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22845000 0! #22845500 1! #22845600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22846000 0! #22846500 1! #22846600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22847000 0! #22847500 1! #22847600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22848000 0! #22848500 1! #22848600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22849000 0! #22849500 1! #22849600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22850000 0! #22850500 1! #22850600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22851000 0! #22851500 1! #22851600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22852000 0! #22852500 1! #22852600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22853000 0! #22853500 1! #22853600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22854000 0! #22854500 1! #22854600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22855000 0! #22855500 1! #22855600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22856000 0! #22856500 1! #22856600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22857000 0! #22857500 1! #22857600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22858000 0! #22858500 1! #22858600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22859000 0! #22859500 1! #22859600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22860000 0! #22860500 1! #22860600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22861000 0! #22861500 1! #22861600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22862000 0! #22862500 1! #22862600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22863000 0! #22863500 1! #22863600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22864000 0! #22864500 1! #22864600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22865000 0! #22865500 1! #22865600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22866000 0! #22866500 1! #22866600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22867000 0! #22867500 1! #22867600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22868000 0! #22868500 1! #22868600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22869000 0! #22869500 1! #22869600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22870000 0! #22870500 1! #22870600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22871000 0! #22871500 1! #22871600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22872000 0! #22872500 1! #22872600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22873000 0! #22873500 1! #22873600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22874000 0! #22874500 1! #22874600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22875000 0! #22875500 1! #22875600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22876000 0! #22876500 1! #22876600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22877000 0! #22877500 1! #22877600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22878000 0! #22878500 1! #22878600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22879000 0! #22879500 1! #22879600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22880000 0! #22880500 1! #22880600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22881000 0! #22881500 1! #22881600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22882000 0! #22882500 1! #22882600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22883000 0! #22883500 1! #22883600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22884000 0! #22884500 1! #22884600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22885000 0! #22885500 1! #22885600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22886000 0! #22886500 1! #22886600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22887000 0! #22887500 1! #22887600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22888000 0! #22888500 1! #22888600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22889000 0! #22889500 1! #22889600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22890000 0! #22890500 1! #22890600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22891000 0! #22891500 1! #22891600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22892000 0! #22892500 1! #22892600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22893000 0! #22893500 1! #22893600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22894000 0! #22894500 1! #22894600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22895000 0! #22895500 1! #22895600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22896000 0! #22896500 1! #22896600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22897000 0! #22897500 1! #22897600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22898000 0! #22898500 1! #22898600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22899000 0! #22899500 1! #22899600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22900000 0! #22900500 1! #22900600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22901000 0! #22901500 1! #22901600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22902000 0! #22902500 1! #22902600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22903000 0! #22903500 1! #22903600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22904000 0! #22904500 1! #22904600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22905000 0! #22905500 1! #22905600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22906000 0! #22906500 1! #22906600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22907000 0! #22907500 1! #22907600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22908000 0! #22908500 1! #22908600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22909000 0! #22909500 1! #22909600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22910000 0! #22910500 1! #22910600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22911000 0! #22911500 1! #22911600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22912000 0! #22912500 1! #22912600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22913000 0! #22913500 1! #22913600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22914000 0! #22914500 1! #22914600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22915000 0! #22915500 1! #22915600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22916000 0! #22916500 1! #22916600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22917000 0! #22917500 1! #22917600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22918000 0! #22918500 1! #22918600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22919000 0! #22919500 1! #22919600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22920000 0! #22920500 1! #22920600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22921000 0! #22921500 1! #22921600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22922000 0! #22922500 1! #22922600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22923000 0! #22923500 1! #22923600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22924000 0! #22924500 1! #22924600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22925000 0! #22925500 1! #22925600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22926000 0! #22926500 1! #22926600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22927000 0! #22927500 1! #22927600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #22927700 b100 g #22928000 0! #22928500 1! #22928600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22929000 0! #22929500 1! #22929600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22930000 0! #22930500 1! #22930600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22931000 0! #22931500 1! #22931600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22932000 0! #22932500 1! #22932600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22933000 0! #22933500 1! #22933600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22934000 0! #22934500 1! #22934600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22935000 0! #22935500 1! #22935600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22936000 0! #22936500 1! #22936600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22937000 0! #22937500 1! #22937600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22938000 0! #22938500 1! #22938600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22939000 0! #22939500 1! #22939600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22940000 0! #22940500 1! #22940600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22941000 0! #22941500 1! #22941600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22942000 0! #22942500 1! #22942600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22943000 0! #22943500 1! #22943600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22944000 0! #22944500 1! #22944600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22945000 0! #22945500 1! #22945600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22946000 0! #22946500 1! #22946600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22947000 0! #22947500 1! #22947600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22948000 0! #22948500 1! #22948600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22949000 0! #22949500 1! #22949600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22950000 0! #22950500 1! #22950600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22951000 0! #22951500 1! #22951600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22952000 0! #22952500 1! #22952600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22953000 0! #22953500 1! #22953600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22954000 0! #22954500 1! #22954600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22955000 0! #22955500 1! #22955600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22956000 0! #22956500 1! #22956600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22957000 0! #22957500 1! #22957600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22958000 0! #22958500 1! #22958600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22959000 0! #22959500 1! #22959600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22960000 0! #22960500 1! #22960600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22961000 0! #22961500 1! #22961600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22962000 0! #22962500 1! #22962600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22963000 0! #22963500 1! #22963600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22964000 0! #22964500 1! #22964600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22965000 0! #22965500 1! #22965600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22966000 0! #22966500 1! #22966600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22967000 0! #22967500 1! #22967600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22968000 0! #22968500 1! #22968600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22969000 0! #22969500 1! #22969600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22970000 0! #22970500 1! #22970600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22971000 0! #22971500 1! #22971600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22972000 0! #22972500 1! #22972600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22973000 0! #22973500 1! #22973600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22974000 0! #22974500 1! #22974600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22975000 0! #22975500 1! #22975600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22976000 0! #22976500 1! #22976600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22977000 0! #22977500 1! #22977600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22978000 0! #22978500 1! #22978600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22979000 0! #22979500 1! #22979600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22980000 0! #22980500 1! #22980600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22981000 0! #22981500 1! #22981600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22982000 0! #22982500 1! #22982600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22983000 0! #22983500 1! #22983600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22984000 0! #22984500 1! #22984600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22985000 0! #22985500 1! #22985600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22986000 0! #22986500 1! #22986600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22987000 0! #22987500 1! #22987600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22988000 0! #22988500 1! #22988600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22989000 0! #22989500 1! #22989600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22990000 0! #22990500 1! #22990600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22991000 0! #22991500 1! #22991600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22992000 0! #22992500 1! #22992600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22993000 0! #22993500 1! #22993600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22994000 0! #22994500 1! #22994600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22995000 0! #22995500 1! #22995600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22996000 0! #22996500 1! #22996600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22997000 0! #22997500 1! #22997600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #22998000 0! #22998500 1! #22998600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #22999000 0! #22999500 1! #22999600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23000000 0! #23000500 1! #23000600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23001000 0! #23001500 1! #23001600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23002000 0! #23002500 1! #23002600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23003000 0! #23003500 1! #23003600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23004000 0! #23004500 1! #23004600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23005000 0! #23005500 1! #23005600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23006000 0! #23006500 1! #23006600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23007000 0! #23007500 1! #23007600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23008000 0! #23008500 1! #23008600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23009000 0! #23009500 1! #23009600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23010000 0! #23010500 1! #23010600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23011000 0! #23011500 1! #23011600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23012000 0! #23012500 1! #23012600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23013000 0! #23013500 1! #23013600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23014000 0! #23014500 1! #23014600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23015000 0! #23015500 1! #23015600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23016000 0! #23016500 1! #23016600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23017000 0! #23017500 1! #23017600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23018000 0! #23018500 1! #23018600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23019000 0! #23019500 1! #23019600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23020000 0! #23020500 1! #23020600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23021000 0! #23021500 1! #23021600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23022000 0! #23022500 1! #23022600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23023000 0! #23023500 1! #23023600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23024000 0! #23024500 1! #23024600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23025000 0! #23025500 1! #23025600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23026000 0! #23026500 1! #23026600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23027000 0! #23027500 1! #23027600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23028000 0! #23028500 1! #23028600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23029000 0! #23029500 1! #23029600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #23030000 0! #23030500 1! #23030600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23031000 0! #23031500 1! #23031600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23032000 0! #23032500 1! #23032600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23033000 0! #23033500 1! #23033600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23034000 0! #23034500 1! #23034600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23035000 0! #23035500 1! #23035600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23036000 0! #23036500 1! #23036600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23037000 0! #23037500 1! #23037600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23038000 0! #23038500 1! #23038600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23039000 0! #23039500 1! #23039600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23040000 0! #23040500 1! #23040600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23041000 0! #23041500 1! #23041600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23042000 0! #23042500 1! #23042600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23043000 0! #23043500 1! #23043600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23044000 0! #23044500 1! #23044600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23045000 0! #23045500 1! #23045600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23046000 0! #23046500 1! #23046600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23047000 0! #23047500 1! #23047600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23048000 0! #23048500 1! #23048600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23049000 0! #23049500 1! #23049600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23050000 0! #23050500 1! #23050600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23051000 0! #23051500 1! #23051600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23052000 0! #23052500 1! #23052600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23053000 0! #23053500 1! #23053600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23054000 0! #23054500 1! #23054600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23055000 0! #23055500 1! #23055600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23056000 0! #23056500 1! #23056600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23057000 0! #23057500 1! #23057600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23058000 0! #23058500 1! #23058600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23059000 0! #23059500 1! #23059600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23060000 0! #23060500 1! #23060600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23061000 0! #23061500 1! #23061600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23062000 0! #23062500 1! #23062600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23063000 0! #23063500 1! #23063600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23064000 0! #23064500 1! #23064600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23065000 0! #23065500 1! #23065600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23066000 0! #23066500 1! #23066600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23067000 0! #23067500 1! #23067600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23068000 0! #23068500 1! #23068600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23069000 0! #23069500 1! #23069600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23070000 0! #23070500 1! #23070600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23071000 0! #23071500 1! #23071600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23072000 0! #23072500 1! #23072600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23073000 0! #23073500 1! #23073600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23074000 0! #23074500 1! #23074600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23075000 0! #23075500 1! #23075600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23076000 0! #23076500 1! #23076600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23077000 0! #23077500 1! #23077600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23078000 0! #23078500 1! #23078600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23079000 0! #23079500 1! #23079600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23080000 0! #23080500 1! #23080600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23081000 0! #23081500 1! #23081600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23082000 0! #23082500 1! #23082600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23083000 0! #23083500 1! #23083600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23084000 0! #23084500 1! #23084600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23085000 0! #23085500 1! #23085600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23086000 0! #23086500 1! #23086600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23087000 0! #23087500 1! #23087600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23088000 0! #23088500 1! #23088600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23089000 0! #23089500 1! #23089600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23090000 0! #23090500 1! #23090600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23091000 0! #23091500 1! #23091600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23092000 0! #23092500 1! #23092600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23093000 0! #23093500 1! #23093600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23094000 0! #23094500 1! #23094600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23095000 0! #23095500 1! #23095600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23096000 0! #23096500 1! #23096600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23097000 0! #23097500 1! #23097600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23098000 0! #23098500 1! #23098600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23099000 0! #23099500 1! #23099600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23100000 0! #23100500 1! #23100600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23101000 0! #23101500 1! #23101600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23102000 0! #23102500 1! #23102600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23103000 0! #23103500 1! #23103600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23104000 0! #23104500 1! #23104600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23105000 0! #23105500 1! #23105600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23106000 0! #23106500 1! #23106600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23107000 0! #23107500 1! #23107600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23108000 0! #23108500 1! #23108600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23109000 0! #23109500 1! #23109600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23110000 0! #23110500 1! #23110600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23111000 0! #23111500 1! #23111600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23112000 0! #23112500 1! #23112600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23113000 0! #23113500 1! #23113600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23114000 0! #23114500 1! #23114600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23115000 0! #23115500 1! #23115600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23116000 0! #23116500 1! #23116600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23117000 0! #23117500 1! #23117600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23118000 0! #23118500 1! #23118600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23119000 0! #23119500 1! #23119600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23120000 0! #23120500 1! #23120600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23121000 0! #23121500 1! #23121600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23122000 0! #23122500 1! #23122600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23123000 0! #23123500 1! #23123600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23124000 0! #23124500 1! #23124600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23125000 0! #23125500 1! #23125600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23126000 0! #23126500 1! #23126600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23127000 0! #23127500 1! #23127600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23128000 0! #23128500 1! #23128600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23129000 0! #23129500 1! #23129600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23130000 0! #23130500 1! #23130600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23131000 0! #23131500 1! #23131600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23132000 0! #23132500 1! #23132600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23133000 0! #23133500 1! #23133600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23134000 0! #23134500 1! #23134600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23135000 0! #23135500 1! #23135600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23136000 0! #23136500 1! #23136600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23137000 0! #23137500 1! #23137600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23138000 0! #23138500 1! #23138600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23139000 0! #23139500 1! #23139600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23140000 0! #23140500 1! #23140600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23141000 0! #23141500 1! #23141600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23142000 0! #23142500 1! #23142600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23143000 0! #23143500 1! #23143600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23144000 0! #23144500 1! #23144600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23145000 0! #23145500 1! #23145600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23146000 0! #23146500 1! #23146600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23147000 0! #23147500 1! #23147600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23148000 0! #23148500 1! #23148600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23149000 0! #23149500 1! #23149600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23150000 0! #23150500 1! #23150600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23151000 0! #23151500 1! #23151600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23152000 0! #23152500 1! #23152600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23153000 0! #23153500 1! #23153600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23154000 0! #23154500 1! #23154600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23155000 0! #23155500 1! #23155600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23156000 0! #23156500 1! #23156600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23157000 0! #23157500 1! #23157600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23158000 0! #23158500 1! #23158600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23159000 0! #23159500 1! #23159600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23160000 0! #23160500 1! #23160600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23161000 0! #23161500 1! #23161600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23162000 0! #23162500 1! #23162600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23163000 0! #23163500 1! #23163600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23164000 0! #23164500 1! #23164600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23165000 0! #23165500 1! #23165600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23166000 0! #23166500 1! #23166600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23167000 0! #23167500 1! #23167600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23168000 0! #23168500 1! #23168600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23169000 0! #23169500 1! #23169600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23170000 0! #23170500 1! #23170600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23171000 0! #23171500 1! #23171600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23172000 0! #23172500 1! #23172600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23173000 0! #23173500 1! #23173600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23174000 0! #23174500 1! #23174600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23175000 0! #23175500 1! #23175600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23176000 0! #23176500 1! #23176600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23177000 0! #23177500 1! #23177600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23178000 0! #23178500 1! #23178600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23179000 0! #23179500 1! #23179600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23180000 0! #23180500 1! #23180600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23181000 0! #23181500 1! #23181600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23182000 0! #23182500 1! #23182600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #23182700 b11 g #23183000 0! #23183500 1! #23183600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23184000 0! #23184500 1! #23184600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23185000 0! #23185500 1! #23185600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23186000 0! #23186500 1! #23186600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23187000 0! #23187500 1! #23187600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23188000 0! #23188500 1! #23188600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23189000 0! #23189500 1! #23189600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23190000 0! #23190500 1! #23190600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23191000 0! #23191500 1! #23191600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23192000 0! #23192500 1! #23192600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23193000 0! #23193500 1! #23193600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23194000 0! #23194500 1! #23194600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23195000 0! #23195500 1! #23195600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23196000 0! #23196500 1! #23196600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23197000 0! #23197500 1! #23197600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23198000 0! #23198500 1! #23198600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23199000 0! #23199500 1! #23199600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23200000 0! #23200500 1! #23200600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23201000 0! #23201500 1! #23201600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23202000 0! #23202500 1! #23202600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23203000 0! #23203500 1! #23203600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23204000 0! #23204500 1! #23204600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23205000 0! #23205500 1! #23205600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23206000 0! #23206500 1! #23206600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23207000 0! #23207500 1! #23207600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23208000 0! #23208500 1! #23208600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23209000 0! #23209500 1! #23209600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23210000 0! #23210500 1! #23210600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23211000 0! #23211500 1! #23211600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23212000 0! #23212500 1! #23212600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23213000 0! #23213500 1! #23213600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23214000 0! #23214500 1! #23214600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23215000 0! #23215500 1! #23215600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23216000 0! #23216500 1! #23216600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23217000 0! #23217500 1! #23217600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23218000 0! #23218500 1! #23218600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23219000 0! #23219500 1! #23219600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23220000 0! #23220500 1! #23220600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23221000 0! #23221500 1! #23221600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23222000 0! #23222500 1! #23222600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23223000 0! #23223500 1! #23223600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23224000 0! #23224500 1! #23224600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23225000 0! #23225500 1! #23225600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23226000 0! #23226500 1! #23226600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23227000 0! #23227500 1! #23227600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23228000 0! #23228500 1! #23228600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23229000 0! #23229500 1! #23229600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23230000 0! #23230500 1! #23230600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23231000 0! #23231500 1! #23231600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23232000 0! #23232500 1! #23232600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23233000 0! #23233500 1! #23233600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23234000 0! #23234500 1! #23234600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23235000 0! #23235500 1! #23235600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23236000 0! #23236500 1! #23236600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23237000 0! #23237500 1! #23237600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23238000 0! #23238500 1! #23238600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23239000 0! #23239500 1! #23239600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23240000 0! #23240500 1! #23240600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23241000 0! #23241500 1! #23241600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23242000 0! #23242500 1! #23242600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23243000 0! #23243500 1! #23243600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23244000 0! #23244500 1! #23244600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23245000 0! #23245500 1! #23245600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23246000 0! #23246500 1! #23246600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23247000 0! #23247500 1! #23247600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23248000 0! #23248500 1! #23248600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23249000 0! #23249500 1! #23249600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23250000 0! #23250500 1! #23250600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23251000 0! #23251500 1! #23251600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23252000 0! #23252500 1! #23252600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23253000 0! #23253500 1! #23253600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23254000 0! #23254500 1! #23254600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23255000 0! #23255500 1! #23255600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23256000 0! #23256500 1! #23256600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23257000 0! #23257500 1! #23257600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23258000 0! #23258500 1! #23258600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23259000 0! #23259500 1! #23259600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23260000 0! #23260500 1! #23260600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23261000 0! #23261500 1! #23261600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23262000 0! #23262500 1! #23262600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23263000 0! #23263500 1! #23263600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23264000 0! #23264500 1! #23264600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23265000 0! #23265500 1! #23265600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23266000 0! #23266500 1! #23266600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23267000 0! #23267500 1! #23267600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23268000 0! #23268500 1! #23268600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23269000 0! #23269500 1! #23269600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23270000 0! #23270500 1! #23270600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23271000 0! #23271500 1! #23271600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23272000 0! #23272500 1! #23272600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23273000 0! #23273500 1! #23273600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23274000 0! #23274500 1! #23274600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23275000 0! #23275500 1! #23275600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23276000 0! #23276500 1! #23276600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23277000 0! #23277500 1! #23277600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23278000 0! #23278500 1! #23278600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23279000 0! #23279500 1! #23279600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23280000 0! #23280500 1! #23280600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23281000 0! #23281500 1! #23281600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23282000 0! #23282500 1! #23282600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23283000 0! #23283500 1! #23283600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23284000 0! #23284500 1! #23284600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #23285000 0! #23285500 1! #23285600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23286000 0! #23286500 1! #23286600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23287000 0! #23287500 1! #23287600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23288000 0! #23288500 1! #23288600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23289000 0! #23289500 1! #23289600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23290000 0! #23290500 1! #23290600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23291000 0! #23291500 1! #23291600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23292000 0! #23292500 1! #23292600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23293000 0! #23293500 1! #23293600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23294000 0! #23294500 1! #23294600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23295000 0! #23295500 1! #23295600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23296000 0! #23296500 1! #23296600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23297000 0! #23297500 1! #23297600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23298000 0! #23298500 1! #23298600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23299000 0! #23299500 1! #23299600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23300000 0! #23300500 1! #23300600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23301000 0! #23301500 1! #23301600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23302000 0! #23302500 1! #23302600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23303000 0! #23303500 1! #23303600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23304000 0! #23304500 1! #23304600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23305000 0! #23305500 1! #23305600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23306000 0! #23306500 1! #23306600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23307000 0! #23307500 1! #23307600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23308000 0! #23308500 1! #23308600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23309000 0! #23309500 1! #23309600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23310000 0! #23310500 1! #23310600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23311000 0! #23311500 1! #23311600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23312000 0! #23312500 1! #23312600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23313000 0! #23313500 1! #23313600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23314000 0! #23314500 1! #23314600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23315000 0! #23315500 1! #23315600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23316000 0! #23316500 1! #23316600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23317000 0! #23317500 1! #23317600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23318000 0! #23318500 1! #23318600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23319000 0! #23319500 1! #23319600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23320000 0! #23320500 1! #23320600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23321000 0! #23321500 1! #23321600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23322000 0! #23322500 1! #23322600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23323000 0! #23323500 1! #23323600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23324000 0! #23324500 1! #23324600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23325000 0! #23325500 1! #23325600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23326000 0! #23326500 1! #23326600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23327000 0! #23327500 1! #23327600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23328000 0! #23328500 1! #23328600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23329000 0! #23329500 1! #23329600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23330000 0! #23330500 1! #23330600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23331000 0! #23331500 1! #23331600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23332000 0! #23332500 1! #23332600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23333000 0! #23333500 1! #23333600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23334000 0! #23334500 1! #23334600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23335000 0! #23335500 1! #23335600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23336000 0! #23336500 1! #23336600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23337000 0! #23337500 1! #23337600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23338000 0! #23338500 1! #23338600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23339000 0! #23339500 1! #23339600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23340000 0! #23340500 1! #23340600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23341000 0! #23341500 1! #23341600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23342000 0! #23342500 1! #23342600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23343000 0! #23343500 1! #23343600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23344000 0! #23344500 1! #23344600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23345000 0! #23345500 1! #23345600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23346000 0! #23346500 1! #23346600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23347000 0! #23347500 1! #23347600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23348000 0! #23348500 1! #23348600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23349000 0! #23349500 1! #23349600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23350000 0! #23350500 1! #23350600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23351000 0! #23351500 1! #23351600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23352000 0! #23352500 1! #23352600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23353000 0! #23353500 1! #23353600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23354000 0! #23354500 1! #23354600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23355000 0! #23355500 1! #23355600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23356000 0! #23356500 1! #23356600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23357000 0! #23357500 1! #23357600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23358000 0! #23358500 1! #23358600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23359000 0! #23359500 1! #23359600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23360000 0! #23360500 1! #23360600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23361000 0! #23361500 1! #23361600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23362000 0! #23362500 1! #23362600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23363000 0! #23363500 1! #23363600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23364000 0! #23364500 1! #23364600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23365000 0! #23365500 1! #23365600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23366000 0! #23366500 1! #23366600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23367000 0! #23367500 1! #23367600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23368000 0! #23368500 1! #23368600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23369000 0! #23369500 1! #23369600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23370000 0! #23370500 1! #23370600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23371000 0! #23371500 1! #23371600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23372000 0! #23372500 1! #23372600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23373000 0! #23373500 1! #23373600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23374000 0! #23374500 1! #23374600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23375000 0! #23375500 1! #23375600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23376000 0! #23376500 1! #23376600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23377000 0! #23377500 1! #23377600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23378000 0! #23378500 1! #23378600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23379000 0! #23379500 1! #23379600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23380000 0! #23380500 1! #23380600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23381000 0! #23381500 1! #23381600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23382000 0! #23382500 1! #23382600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23383000 0! #23383500 1! #23383600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23384000 0! #23384500 1! #23384600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23385000 0! #23385500 1! #23385600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23386000 0! #23386500 1! #23386600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23387000 0! #23387500 1! #23387600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23388000 0! #23388500 1! #23388600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23389000 0! #23389500 1! #23389600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23390000 0! #23390500 1! #23390600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23391000 0! #23391500 1! #23391600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23392000 0! #23392500 1! #23392600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23393000 0! #23393500 1! #23393600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23394000 0! #23394500 1! #23394600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23395000 0! #23395500 1! #23395600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23396000 0! #23396500 1! #23396600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23397000 0! #23397500 1! #23397600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23398000 0! #23398500 1! #23398600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23399000 0! #23399500 1! #23399600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23400000 0! #23400500 1! #23400600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23401000 0! #23401500 1! #23401600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23402000 0! #23402500 1! #23402600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23403000 0! #23403500 1! #23403600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23404000 0! #23404500 1! #23404600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23405000 0! #23405500 1! #23405600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23406000 0! #23406500 1! #23406600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23407000 0! #23407500 1! #23407600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23408000 0! #23408500 1! #23408600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23409000 0! #23409500 1! #23409600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23410000 0! #23410500 1! #23410600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23411000 0! #23411500 1! #23411600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23412000 0! #23412500 1! #23412600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23413000 0! #23413500 1! #23413600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23414000 0! #23414500 1! #23414600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23415000 0! #23415500 1! #23415600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23416000 0! #23416500 1! #23416600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23417000 0! #23417500 1! #23417600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23418000 0! #23418500 1! #23418600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23419000 0! #23419500 1! #23419600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23420000 0! #23420500 1! #23420600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23421000 0! #23421500 1! #23421600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23422000 0! #23422500 1! #23422600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23423000 0! #23423500 1! #23423600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23424000 0! #23424500 1! #23424600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23425000 0! #23425500 1! #23425600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23426000 0! #23426500 1! #23426600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23427000 0! #23427500 1! #23427600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23428000 0! #23428500 1! #23428600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23429000 0! #23429500 1! #23429600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23430000 0! #23430500 1! #23430600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23431000 0! #23431500 1! #23431600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23432000 0! #23432500 1! #23432600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23433000 0! #23433500 1! #23433600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23434000 0! #23434500 1! #23434600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23435000 0! #23435500 1! #23435600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23436000 0! #23436500 1! #23436600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23437000 0! #23437500 1! #23437600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #23437700 b10 g #23438000 0! #23438500 1! #23438600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23439000 0! #23439500 1! #23439600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23440000 0! #23440500 1! #23440600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23441000 0! #23441500 1! #23441600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23442000 0! #23442500 1! #23442600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23443000 0! #23443500 1! #23443600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23444000 0! #23444500 1! #23444600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23445000 0! #23445500 1! #23445600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23446000 0! #23446500 1! #23446600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23447000 0! #23447500 1! #23447600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23448000 0! #23448500 1! #23448600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23449000 0! #23449500 1! #23449600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23450000 0! #23450500 1! #23450600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23451000 0! #23451500 1! #23451600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23452000 0! #23452500 1! #23452600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23453000 0! #23453500 1! #23453600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23454000 0! #23454500 1! #23454600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23455000 0! #23455500 1! #23455600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23456000 0! #23456500 1! #23456600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23457000 0! #23457500 1! #23457600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23458000 0! #23458500 1! #23458600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23459000 0! #23459500 1! #23459600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23460000 0! #23460500 1! #23460600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23461000 0! #23461500 1! #23461600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23462000 0! #23462500 1! #23462600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23463000 0! #23463500 1! #23463600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23464000 0! #23464500 1! #23464600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23465000 0! #23465500 1! #23465600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23466000 0! #23466500 1! #23466600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23467000 0! #23467500 1! #23467600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23468000 0! #23468500 1! #23468600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23469000 0! #23469500 1! #23469600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23470000 0! #23470500 1! #23470600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23471000 0! #23471500 1! #23471600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23472000 0! #23472500 1! #23472600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23473000 0! #23473500 1! #23473600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23474000 0! #23474500 1! #23474600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23475000 0! #23475500 1! #23475600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23476000 0! #23476500 1! #23476600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23477000 0! #23477500 1! #23477600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23478000 0! #23478500 1! #23478600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23479000 0! #23479500 1! #23479600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23480000 0! #23480500 1! #23480600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23481000 0! #23481500 1! #23481600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23482000 0! #23482500 1! #23482600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23483000 0! #23483500 1! #23483600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23484000 0! #23484500 1! #23484600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23485000 0! #23485500 1! #23485600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23486000 0! #23486500 1! #23486600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23487000 0! #23487500 1! #23487600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23488000 0! #23488500 1! #23488600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23489000 0! #23489500 1! #23489600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23490000 0! #23490500 1! #23490600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23491000 0! #23491500 1! #23491600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23492000 0! #23492500 1! #23492600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23493000 0! #23493500 1! #23493600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23494000 0! #23494500 1! #23494600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23495000 0! #23495500 1! #23495600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23496000 0! #23496500 1! #23496600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23497000 0! #23497500 1! #23497600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23498000 0! #23498500 1! #23498600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23499000 0! #23499500 1! #23499600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23500000 0! #23500500 1! #23500600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23501000 0! #23501500 1! #23501600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23502000 0! #23502500 1! #23502600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23503000 0! #23503500 1! #23503600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23504000 0! #23504500 1! #23504600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23505000 0! #23505500 1! #23505600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23506000 0! #23506500 1! #23506600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23507000 0! #23507500 1! #23507600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23508000 0! #23508500 1! #23508600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23509000 0! #23509500 1! #23509600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23510000 0! #23510500 1! #23510600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23511000 0! #23511500 1! #23511600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23512000 0! #23512500 1! #23512600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23513000 0! #23513500 1! #23513600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23514000 0! #23514500 1! #23514600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23515000 0! #23515500 1! #23515600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23516000 0! #23516500 1! #23516600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23517000 0! #23517500 1! #23517600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23518000 0! #23518500 1! #23518600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23519000 0! #23519500 1! #23519600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23520000 0! #23520500 1! #23520600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23521000 0! #23521500 1! #23521600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23522000 0! #23522500 1! #23522600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23523000 0! #23523500 1! #23523600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23524000 0! #23524500 1! #23524600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23525000 0! #23525500 1! #23525600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23526000 0! #23526500 1! #23526600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23527000 0! #23527500 1! #23527600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23528000 0! #23528500 1! #23528600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23529000 0! #23529500 1! #23529600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23530000 0! #23530500 1! #23530600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23531000 0! #23531500 1! #23531600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23532000 0! #23532500 1! #23532600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23533000 0! #23533500 1! #23533600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23534000 0! #23534500 1! #23534600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23535000 0! #23535500 1! #23535600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23536000 0! #23536500 1! #23536600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23537000 0! #23537500 1! #23537600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23538000 0! #23538500 1! #23538600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23539000 0! #23539500 1! #23539600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #23540000 0! #23540500 1! #23540600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23541000 0! #23541500 1! #23541600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23542000 0! #23542500 1! #23542600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23543000 0! #23543500 1! #23543600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23544000 0! #23544500 1! #23544600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23545000 0! #23545500 1! #23545600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23546000 0! #23546500 1! #23546600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23547000 0! #23547500 1! #23547600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23548000 0! #23548500 1! #23548600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23549000 0! #23549500 1! #23549600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23550000 0! #23550500 1! #23550600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23551000 0! #23551500 1! #23551600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23552000 0! #23552500 1! #23552600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23553000 0! #23553500 1! #23553600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23554000 0! #23554500 1! #23554600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23555000 0! #23555500 1! #23555600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23556000 0! #23556500 1! #23556600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23557000 0! #23557500 1! #23557600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23558000 0! #23558500 1! #23558600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23559000 0! #23559500 1! #23559600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23560000 0! #23560500 1! #23560600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23561000 0! #23561500 1! #23561600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23562000 0! #23562500 1! #23562600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23563000 0! #23563500 1! #23563600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23564000 0! #23564500 1! #23564600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23565000 0! #23565500 1! #23565600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23566000 0! #23566500 1! #23566600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23567000 0! #23567500 1! #23567600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23568000 0! #23568500 1! #23568600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23569000 0! #23569500 1! #23569600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23570000 0! #23570500 1! #23570600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23571000 0! #23571500 1! #23571600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23572000 0! #23572500 1! #23572600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23573000 0! #23573500 1! #23573600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23574000 0! #23574500 1! #23574600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23575000 0! #23575500 1! #23575600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23576000 0! #23576500 1! #23576600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23577000 0! #23577500 1! #23577600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23578000 0! #23578500 1! #23578600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23579000 0! #23579500 1! #23579600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23580000 0! #23580500 1! #23580600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23581000 0! #23581500 1! #23581600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23582000 0! #23582500 1! #23582600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23583000 0! #23583500 1! #23583600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23584000 0! #23584500 1! #23584600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23585000 0! #23585500 1! #23585600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23586000 0! #23586500 1! #23586600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23587000 0! #23587500 1! #23587600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23588000 0! #23588500 1! #23588600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23589000 0! #23589500 1! #23589600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23590000 0! #23590500 1! #23590600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23591000 0! #23591500 1! #23591600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23592000 0! #23592500 1! #23592600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23593000 0! #23593500 1! #23593600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23594000 0! #23594500 1! #23594600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23595000 0! #23595500 1! #23595600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23596000 0! #23596500 1! #23596600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23597000 0! #23597500 1! #23597600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23598000 0! #23598500 1! #23598600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23599000 0! #23599500 1! #23599600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23600000 0! #23600500 1! #23600600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23601000 0! #23601500 1! #23601600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23602000 0! #23602500 1! #23602600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23603000 0! #23603500 1! #23603600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23604000 0! #23604500 1! #23604600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23605000 0! #23605500 1! #23605600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23606000 0! #23606500 1! #23606600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23607000 0! #23607500 1! #23607600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23608000 0! #23608500 1! #23608600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23609000 0! #23609500 1! #23609600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23610000 0! #23610500 1! #23610600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23611000 0! #23611500 1! #23611600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23612000 0! #23612500 1! #23612600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23613000 0! #23613500 1! #23613600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23614000 0! #23614500 1! #23614600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23615000 0! #23615500 1! #23615600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23616000 0! #23616500 1! #23616600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23617000 0! #23617500 1! #23617600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23618000 0! #23618500 1! #23618600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23619000 0! #23619500 1! #23619600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23620000 0! #23620500 1! #23620600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23621000 0! #23621500 1! #23621600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23622000 0! #23622500 1! #23622600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23623000 0! #23623500 1! #23623600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23624000 0! #23624500 1! #23624600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23625000 0! #23625500 1! #23625600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23626000 0! #23626500 1! #23626600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23627000 0! #23627500 1! #23627600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23628000 0! #23628500 1! #23628600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23629000 0! #23629500 1! #23629600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23630000 0! #23630500 1! #23630600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23631000 0! #23631500 1! #23631600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23632000 0! #23632500 1! #23632600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23633000 0! #23633500 1! #23633600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23634000 0! #23634500 1! #23634600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23635000 0! #23635500 1! #23635600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23636000 0! #23636500 1! #23636600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23637000 0! #23637500 1! #23637600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23638000 0! #23638500 1! #23638600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23639000 0! #23639500 1! #23639600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23640000 0! #23640500 1! #23640600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23641000 0! #23641500 1! #23641600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23642000 0! #23642500 1! #23642600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23643000 0! #23643500 1! #23643600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23644000 0! #23644500 1! #23644600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23645000 0! #23645500 1! #23645600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23646000 0! #23646500 1! #23646600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23647000 0! #23647500 1! #23647600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23648000 0! #23648500 1! #23648600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23649000 0! #23649500 1! #23649600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23650000 0! #23650500 1! #23650600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23651000 0! #23651500 1! #23651600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23652000 0! #23652500 1! #23652600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23653000 0! #23653500 1! #23653600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23654000 0! #23654500 1! #23654600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23655000 0! #23655500 1! #23655600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23656000 0! #23656500 1! #23656600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23657000 0! #23657500 1! #23657600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23658000 0! #23658500 1! #23658600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23659000 0! #23659500 1! #23659600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23660000 0! #23660500 1! #23660600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23661000 0! #23661500 1! #23661600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23662000 0! #23662500 1! #23662600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23663000 0! #23663500 1! #23663600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23664000 0! #23664500 1! #23664600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23665000 0! #23665500 1! #23665600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23666000 0! #23666500 1! #23666600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23667000 0! #23667500 1! #23667600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23668000 0! #23668500 1! #23668600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23669000 0! #23669500 1! #23669600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23670000 0! #23670500 1! #23670600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23671000 0! #23671500 1! #23671600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23672000 0! #23672500 1! #23672600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23673000 0! #23673500 1! #23673600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23674000 0! #23674500 1! #23674600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23675000 0! #23675500 1! #23675600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23676000 0! #23676500 1! #23676600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23677000 0! #23677500 1! #23677600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23678000 0! #23678500 1! #23678600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23679000 0! #23679500 1! #23679600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23680000 0! #23680500 1! #23680600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23681000 0! #23681500 1! #23681600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23682000 0! #23682500 1! #23682600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23683000 0! #23683500 1! #23683600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23684000 0! #23684500 1! #23684600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23685000 0! #23685500 1! #23685600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23686000 0! #23686500 1! #23686600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23687000 0! #23687500 1! #23687600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23688000 0! #23688500 1! #23688600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23689000 0! #23689500 1! #23689600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23690000 0! #23690500 1! #23690600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23691000 0! #23691500 1! #23691600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23692000 0! #23692500 1! #23692600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #23692700 b1 g #23693000 0! #23693500 1! #23693600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23694000 0! #23694500 1! #23694600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23695000 0! #23695500 1! #23695600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23696000 0! #23696500 1! #23696600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23697000 0! #23697500 1! #23697600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23698000 0! #23698500 1! #23698600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23699000 0! #23699500 1! #23699600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23700000 0! #23700500 1! #23700600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23701000 0! #23701500 1! #23701600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23702000 0! #23702500 1! #23702600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23703000 0! #23703500 1! #23703600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23704000 0! #23704500 1! #23704600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23705000 0! #23705500 1! #23705600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23706000 0! #23706500 1! #23706600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23707000 0! #23707500 1! #23707600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23708000 0! #23708500 1! #23708600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23709000 0! #23709500 1! #23709600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23710000 0! #23710500 1! #23710600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23711000 0! #23711500 1! #23711600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23712000 0! #23712500 1! #23712600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23713000 0! #23713500 1! #23713600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23714000 0! #23714500 1! #23714600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23715000 0! #23715500 1! #23715600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23716000 0! #23716500 1! #23716600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23717000 0! #23717500 1! #23717600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23718000 0! #23718500 1! #23718600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23719000 0! #23719500 1! #23719600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23720000 0! #23720500 1! #23720600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23721000 0! #23721500 1! #23721600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23722000 0! #23722500 1! #23722600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23723000 0! #23723500 1! #23723600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23724000 0! #23724500 1! #23724600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23725000 0! #23725500 1! #23725600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23726000 0! #23726500 1! #23726600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23727000 0! #23727500 1! #23727600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23728000 0! #23728500 1! #23728600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23729000 0! #23729500 1! #23729600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23730000 0! #23730500 1! #23730600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23731000 0! #23731500 1! #23731600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23732000 0! #23732500 1! #23732600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23733000 0! #23733500 1! #23733600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23734000 0! #23734500 1! #23734600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23735000 0! #23735500 1! #23735600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23736000 0! #23736500 1! #23736600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23737000 0! #23737500 1! #23737600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23738000 0! #23738500 1! #23738600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23739000 0! #23739500 1! #23739600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23740000 0! #23740500 1! #23740600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23741000 0! #23741500 1! #23741600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23742000 0! #23742500 1! #23742600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23743000 0! #23743500 1! #23743600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23744000 0! #23744500 1! #23744600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23745000 0! #23745500 1! #23745600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23746000 0! #23746500 1! #23746600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23747000 0! #23747500 1! #23747600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23748000 0! #23748500 1! #23748600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23749000 0! #23749500 1! #23749600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23750000 0! #23750500 1! #23750600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23751000 0! #23751500 1! #23751600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23752000 0! #23752500 1! #23752600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23753000 0! #23753500 1! #23753600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23754000 0! #23754500 1! #23754600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23755000 0! #23755500 1! #23755600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23756000 0! #23756500 1! #23756600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23757000 0! #23757500 1! #23757600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23758000 0! #23758500 1! #23758600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23759000 0! #23759500 1! #23759600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23760000 0! #23760500 1! #23760600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23761000 0! #23761500 1! #23761600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23762000 0! #23762500 1! #23762600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23763000 0! #23763500 1! #23763600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23764000 0! #23764500 1! #23764600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23765000 0! #23765500 1! #23765600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23766000 0! #23766500 1! #23766600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23767000 0! #23767500 1! #23767600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23768000 0! #23768500 1! #23768600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23769000 0! #23769500 1! #23769600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23770000 0! #23770500 1! #23770600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23771000 0! #23771500 1! #23771600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23772000 0! #23772500 1! #23772600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23773000 0! #23773500 1! #23773600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23774000 0! #23774500 1! #23774600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23775000 0! #23775500 1! #23775600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23776000 0! #23776500 1! #23776600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23777000 0! #23777500 1! #23777600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23778000 0! #23778500 1! #23778600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23779000 0! #23779500 1! #23779600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23780000 0! #23780500 1! #23780600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23781000 0! #23781500 1! #23781600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23782000 0! #23782500 1! #23782600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23783000 0! #23783500 1! #23783600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23784000 0! #23784500 1! #23784600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23785000 0! #23785500 1! #23785600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23786000 0! #23786500 1! #23786600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23787000 0! #23787500 1! #23787600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23788000 0! #23788500 1! #23788600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23789000 0! #23789500 1! #23789600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23790000 0! #23790500 1! #23790600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23791000 0! #23791500 1! #23791600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23792000 0! #23792500 1! #23792600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23793000 0! #23793500 1! #23793600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23794000 0! #23794500 1! #23794600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #23795000 0! #23795500 1! #23795600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23796000 0! #23796500 1! #23796600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23797000 0! #23797500 1! #23797600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23798000 0! #23798500 1! #23798600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23799000 0! #23799500 1! #23799600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23800000 0! #23800500 1! #23800600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23801000 0! #23801500 1! #23801600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23802000 0! #23802500 1! #23802600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23803000 0! #23803500 1! #23803600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23804000 0! #23804500 1! #23804600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23805000 0! #23805500 1! #23805600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23806000 0! #23806500 1! #23806600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23807000 0! #23807500 1! #23807600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23808000 0! #23808500 1! #23808600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23809000 0! #23809500 1! #23809600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23810000 0! #23810500 1! #23810600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23811000 0! #23811500 1! #23811600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23812000 0! #23812500 1! #23812600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23813000 0! #23813500 1! #23813600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23814000 0! #23814500 1! #23814600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23815000 0! #23815500 1! #23815600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23816000 0! #23816500 1! #23816600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23817000 0! #23817500 1! #23817600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23818000 0! #23818500 1! #23818600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23819000 0! #23819500 1! #23819600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23820000 0! #23820500 1! #23820600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23821000 0! #23821500 1! #23821600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23822000 0! #23822500 1! #23822600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23823000 0! #23823500 1! #23823600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23824000 0! #23824500 1! #23824600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23825000 0! #23825500 1! #23825600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23826000 0! #23826500 1! #23826600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23827000 0! #23827500 1! #23827600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23828000 0! #23828500 1! #23828600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23829000 0! #23829500 1! #23829600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23830000 0! #23830500 1! #23830600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23831000 0! #23831500 1! #23831600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23832000 0! #23832500 1! #23832600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23833000 0! #23833500 1! #23833600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23834000 0! #23834500 1! #23834600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23835000 0! #23835500 1! #23835600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23836000 0! #23836500 1! #23836600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23837000 0! #23837500 1! #23837600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23838000 0! #23838500 1! #23838600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23839000 0! #23839500 1! #23839600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23840000 0! #23840500 1! #23840600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23841000 0! #23841500 1! #23841600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23842000 0! #23842500 1! #23842600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23843000 0! #23843500 1! #23843600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23844000 0! #23844500 1! #23844600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23845000 0! #23845500 1! #23845600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23846000 0! #23846500 1! #23846600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23847000 0! #23847500 1! #23847600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23848000 0! #23848500 1! #23848600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23849000 0! #23849500 1! #23849600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23850000 0! #23850500 1! #23850600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23851000 0! #23851500 1! #23851600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23852000 0! #23852500 1! #23852600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23853000 0! #23853500 1! #23853600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23854000 0! #23854500 1! #23854600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23855000 0! #23855500 1! #23855600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23856000 0! #23856500 1! #23856600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23857000 0! #23857500 1! #23857600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23858000 0! #23858500 1! #23858600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23859000 0! #23859500 1! #23859600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23860000 0! #23860500 1! #23860600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23861000 0! #23861500 1! #23861600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23862000 0! #23862500 1! #23862600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23863000 0! #23863500 1! #23863600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23864000 0! #23864500 1! #23864600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23865000 0! #23865500 1! #23865600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23866000 0! #23866500 1! #23866600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23867000 0! #23867500 1! #23867600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23868000 0! #23868500 1! #23868600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23869000 0! #23869500 1! #23869600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23870000 0! #23870500 1! #23870600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23871000 0! #23871500 1! #23871600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23872000 0! #23872500 1! #23872600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23873000 0! #23873500 1! #23873600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23874000 0! #23874500 1! #23874600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23875000 0! #23875500 1! #23875600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23876000 0! #23876500 1! #23876600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23877000 0! #23877500 1! #23877600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23878000 0! #23878500 1! #23878600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23879000 0! #23879500 1! #23879600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23880000 0! #23880500 1! #23880600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23881000 0! #23881500 1! #23881600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23882000 0! #23882500 1! #23882600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23883000 0! #23883500 1! #23883600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23884000 0! #23884500 1! #23884600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23885000 0! #23885500 1! #23885600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23886000 0! #23886500 1! #23886600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23887000 0! #23887500 1! #23887600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23888000 0! #23888500 1! #23888600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23889000 0! #23889500 1! #23889600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23890000 0! #23890500 1! #23890600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23891000 0! #23891500 1! #23891600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23892000 0! #23892500 1! #23892600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23893000 0! #23893500 1! #23893600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23894000 0! #23894500 1! #23894600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23895000 0! #23895500 1! #23895600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23896000 0! #23896500 1! #23896600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1Q 1O #23897000 0! #23897500 1! #23897600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23898000 0! #23898500 1! #23898600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23899000 0! #23899500 1! #23899600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23900000 0! #23900500 1! #23900600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23901000 0! #23901500 1! #23901600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23902000 0! #23902500 1! #23902600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23903000 0! #23903500 1! #23903600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23904000 0! #23904500 1! #23904600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23905000 0! #23905500 1! #23905600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23906000 0! #23906500 1! #23906600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23907000 0! #23907500 1! #23907600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23908000 0! #23908500 1! #23908600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23909000 0! #23909500 1! #23909600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23910000 0! #23910500 1! #23910600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23911000 0! #23911500 1! #23911600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23912000 0! #23912500 1! #23912600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23913000 0! #23913500 1! #23913600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23914000 0! #23914500 1! #23914600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23915000 0! #23915500 1! #23915600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23916000 0! #23916500 1! #23916600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23917000 0! #23917500 1! #23917600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23918000 0! #23918500 1! #23918600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23919000 0! #23919500 1! #23919600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23920000 0! #23920500 1! #23920600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23921000 0! #23921500 1! #23921600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23922000 0! #23922500 1! #23922600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23923000 0! #23923500 1! #23923600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23924000 0! #23924500 1! #23924600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23925000 0! #23925500 1! #23925600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23926000 0! #23926500 1! #23926600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23927000 0! #23927500 1! #23927600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23928000 0! #23928500 1! #23928600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23929000 0! #23929500 1! #23929600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23930000 0! #23930500 1! #23930600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23931000 0! #23931500 1! #23931600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23932000 0! #23932500 1! #23932600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23933000 0! #23933500 1! #23933600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23934000 0! #23934500 1! #23934600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23935000 0! #23935500 1! #23935600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23936000 0! #23936500 1! #23936600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23937000 0! #23937500 1! #23937600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23938000 0! #23938500 1! #23938600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23939000 0! #23939500 1! #23939600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23940000 0! #23940500 1! #23940600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23941000 0! #23941500 1! #23941600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23942000 0! #23942500 1! #23942600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23943000 0! #23943500 1! #23943600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23944000 0! #23944500 1! #23944600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23945000 0! #23945500 1! #23945600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23946000 0! #23946500 1! #23946600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23947000 0! #23947500 1! #23947600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #23947700 b0 g b1 c 1h #23948000 0! #23948500 1! #23948600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23949000 0! #23949500 1! #23949600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23950000 0! #23950500 1! #23950600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23951000 0! #23951500 1! #23951600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23952000 0! #23952500 1! #23952600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23953000 0! #23953500 1! #23953600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23954000 0! #23954500 1! #23954600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23955000 0! #23955500 1! #23955600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23956000 0! #23956500 1! #23956600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23957000 0! #23957500 1! #23957600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23958000 0! #23958500 1! #23958600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23959000 0! #23959500 1! #23959600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23960000 0! #23960500 1! #23960600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23961000 0! #23961500 1! #23961600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23962000 0! #23962500 1! #23962600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23963000 0! #23963500 1! #23963600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23964000 0! #23964500 1! #23964600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23965000 0! #23965500 1! #23965600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23966000 0! #23966500 1! #23966600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23967000 0! #23967500 1! #23967600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23968000 0! #23968500 1! #23968600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23969000 0! #23969500 1! #23969600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23970000 0! #23970500 1! #23970600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23971000 0! #23971500 1! #23971600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23972000 0! #23972500 1! #23972600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23973000 0! #23973500 1! #23973600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23974000 0! #23974500 1! #23974600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23975000 0! #23975500 1! #23975600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23976000 0! #23976500 1! #23976600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23977000 0! #23977500 1! #23977600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23978000 0! #23978500 1! #23978600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23979000 0! #23979500 1! #23979600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23980000 0! #23980500 1! #23980600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23981000 0! #23981500 1! #23981600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23982000 0! #23982500 1! #23982600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23983000 0! #23983500 1! #23983600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23984000 0! #23984500 1! #23984600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23985000 0! #23985500 1! #23985600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23986000 0! #23986500 1! #23986600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23987000 0! #23987500 1! #23987600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23988000 0! #23988500 1! #23988600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23989000 0! #23989500 1! #23989600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23990000 0! #23990500 1! #23990600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23991000 0! #23991500 1! #23991600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23992000 0! #23992500 1! #23992600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23993000 0! #23993500 1! #23993600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23994000 0! #23994500 1! #23994600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23995000 0! #23995500 1! #23995600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23996000 0! #23996500 1! #23996600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23997000 0! #23997500 1! #23997600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #23998000 0! #23998500 1! #23998600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #23999000 0! #23999500 1! #23999600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24000000 0! #24000500 1! #24000600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24001000 0! #24001500 1! #24001600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24002000 0! #24002500 1! #24002600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24003000 0! #24003500 1! #24003600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24004000 0! #24004500 1! #24004600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24005000 0! #24005500 1! #24005600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24006000 0! #24006500 1! #24006600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24007000 0! #24007500 1! #24007600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24008000 0! #24008500 1! #24008600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24009000 0! #24009500 1! #24009600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24010000 0! #24010500 1! #24010600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24011000 0! #24011500 1! #24011600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24012000 0! #24012500 1! #24012600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24013000 0! #24013500 1! #24013600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24014000 0! #24014500 1! #24014600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24015000 0! #24015500 1! #24015600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24016000 0! #24016500 1! #24016600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24017000 0! #24017500 1! #24017600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24018000 0! #24018500 1! #24018600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24019000 0! #24019500 1! #24019600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24020000 0! #24020500 1! #24020600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24021000 0! #24021500 1! #24021600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24022000 0! #24022500 1! #24022600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24023000 0! #24023500 1! #24023600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24024000 0! #24024500 1! #24024600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24025000 0! #24025500 1! #24025600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24026000 0! #24026500 1! #24026600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24027000 0! #24027500 1! #24027600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24028000 0! #24028500 1! #24028600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24029000 0! #24029500 1! #24029600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24030000 0! #24030500 1! #24030600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24031000 0! #24031500 1! #24031600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24032000 0! #24032500 1! #24032600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24033000 0! #24033500 1! #24033600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24034000 0! #24034500 1! #24034600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24035000 0! #24035500 1! #24035600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24036000 0! #24036500 1! #24036600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24037000 0! #24037500 1! #24037600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24038000 0! #24038500 1! #24038600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24039000 0! #24039500 1! #24039600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24040000 0! #24040500 1! #24040600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24041000 0! #24041500 1! #24041600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24042000 0! #24042500 1! #24042600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24043000 0! #24043500 1! #24043600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24044000 0! #24044500 1! #24044600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24045000 0! #24045500 1! #24045600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24046000 0! #24046500 1! #24046600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24047000 0! #24047500 1! #24047600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24048000 0! #24048500 1! #24048600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24049000 0! #24049500 1! #24049600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #24049700 b11 q b1 ] 0j 0O #24050000 0! #24050500 1! #24050600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24051000 0! #24051500 1! #24051600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24052000 0! #24052500 1! #24052600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24053000 0! #24053500 1! #24053600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24054000 0! #24054500 1! #24054600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24055000 0! #24055500 1! #24055600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24056000 0! #24056500 1! #24056600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24057000 0! #24057500 1! #24057600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24058000 0! #24058500 1! #24058600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24059000 0! #24059500 1! #24059600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24060000 0! #24060500 1! #24060600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24061000 0! #24061500 1! #24061600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24062000 0! #24062500 1! #24062600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24063000 0! #24063500 1! #24063600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24064000 0! #24064500 1! #24064600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24065000 0! #24065500 1! #24065600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24066000 0! #24066500 1! #24066600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24067000 0! #24067500 1! #24067600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24068000 0! #24068500 1! #24068600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24069000 0! #24069500 1! #24069600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24070000 0! #24070500 1! #24070600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24071000 0! #24071500 1! #24071600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24072000 0! #24072500 1! #24072600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24073000 0! #24073500 1! #24073600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24074000 0! #24074500 1! #24074600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24075000 0! #24075500 1! #24075600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24076000 0! #24076500 1! #24076600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24077000 0! #24077500 1! #24077600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24078000 0! #24078500 1! #24078600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24079000 0! #24079500 1! #24079600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24080000 0! #24080500 1! #24080600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24081000 0! #24081500 1! #24081600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24082000 0! #24082500 1! #24082600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24083000 0! #24083500 1! #24083600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24084000 0! #24084500 1! #24084600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24085000 0! #24085500 1! #24085600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24086000 0! #24086500 1! #24086600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24087000 0! #24087500 1! #24087600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24088000 0! #24088500 1! #24088600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24089000 0! #24089500 1! #24089600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24090000 0! #24090500 1! #24090600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24091000 0! #24091500 1! #24091600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24092000 0! #24092500 1! #24092600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24093000 0! #24093500 1! #24093600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24094000 0! #24094500 1! #24094600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24095000 0! #24095500 1! #24095600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24096000 0! #24096500 1! #24096600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24097000 0! #24097500 1! #24097600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24098000 0! #24098500 1! #24098600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24099000 0! #24099500 1! #24099600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24100000 0! #24100500 1! #24100600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24101000 0! #24101500 1! #24101600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24102000 0! #24102500 1! #24102600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24103000 0! #24103500 1! #24103600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24104000 0! #24104500 1! #24104600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24105000 0! #24105500 1! #24105600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24106000 0! #24106500 1! #24106600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24107000 0! #24107500 1! #24107600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24108000 0! #24108500 1! #24108600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24109000 0! #24109500 1! #24109600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24110000 0! #24110500 1! #24110600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24111000 0! #24111500 1! #24111600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24112000 0! #24112500 1! #24112600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24113000 0! #24113500 1! #24113600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24114000 0! #24114500 1! #24114600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24115000 0! #24115500 1! #24115600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24116000 0! #24116500 1! #24116600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24117000 0! #24117500 1! #24117600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24118000 0! #24118500 1! #24118600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24119000 0! #24119500 1! #24119600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24120000 0! #24120500 1! #24120600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24121000 0! #24121500 1! #24121600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24122000 0! #24122500 1! #24122600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24123000 0! #24123500 1! #24123600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24124000 0! #24124500 1! #24124600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24125000 0! #24125500 1! #24125600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24126000 0! #24126500 1! #24126600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24127000 0! #24127500 1! #24127600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24128000 0! #24128500 1! #24128600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24129000 0! #24129500 1! #24129600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24130000 0! #24130500 1! #24130600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24131000 0! #24131500 1! #24131600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24132000 0! #24132500 1! #24132600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24133000 0! #24133500 1! #24133600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24134000 0! #24134500 1! #24134600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24135000 0! #24135500 1! #24135600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24136000 0! #24136500 1! #24136600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24137000 0! #24137500 1! #24137600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24138000 0! #24138500 1! #24138600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24139000 0! #24139500 1! #24139600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24140000 0! #24140500 1! #24140600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24141000 0! #24141500 1! #24141600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24142000 0! #24142500 1! #24142600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24143000 0! #24143500 1! #24143600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24144000 0! #24144500 1! #24144600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24145000 0! #24145500 1! #24145600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24146000 0! #24146500 1! #24146600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24147000 0! #24147500 1! #24147600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24148000 0! #24148500 1! #24148600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24149000 0! #24149500 1! #24149600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24150000 0! #24150500 1! #24150600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24151000 0! #24151500 1! #24151600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24152000 0! #24152500 1! #24152600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24153000 0! #24153500 1! #24153600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24154000 0! #24154500 1! #24154600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24155000 0! #24155500 1! #24155600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24156000 0! #24156500 1! #24156600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24157000 0! #24157500 1! #24157600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24158000 0! #24158500 1! #24158600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24159000 0! #24159500 1! #24159600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24160000 0! #24160500 1! #24160600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24161000 0! #24161500 1! #24161600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24162000 0! #24162500 1! #24162600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24163000 0! #24163500 1! #24163600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24164000 0! #24164500 1! #24164600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24165000 0! #24165500 1! #24165600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24166000 0! #24166500 1! #24166600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24167000 0! #24167500 1! #24167600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24168000 0! #24168500 1! #24168600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24169000 0! #24169500 1! #24169600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24170000 0! #24170500 1! #24170600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24171000 0! #24171500 1! #24171600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24172000 0! #24172500 1! #24172600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24173000 0! #24173500 1! #24173600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24174000 0! #24174500 1! #24174600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24175000 0! #24175500 1! #24175600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24176000 0! #24176500 1! #24176600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24177000 0! #24177500 1! #24177600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24178000 0! #24178500 1! #24178600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24179000 0! #24179500 1! #24179600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24180000 0! #24180500 1! #24180600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24181000 0! #24181500 1! #24181600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24182000 0! #24182500 1! #24182600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24183000 0! #24183500 1! #24183600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24184000 0! #24184500 1! #24184600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24185000 0! #24185500 1! #24185600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24186000 0! #24186500 1! #24186600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24187000 0! #24187500 1! #24187600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24188000 0! #24188500 1! #24188600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24189000 0! #24189500 1! #24189600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24190000 0! #24190500 1! #24190600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24191000 0! #24191500 1! #24191600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24192000 0! #24192500 1! #24192600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24193000 0! #24193500 1! #24193600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24194000 0! #24194500 1! #24194600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24195000 0! #24195500 1! #24195600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24196000 0! #24196500 1! #24196600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24197000 0! #24197500 1! #24197600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24198000 0! #24198500 1! #24198600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24199000 0! #24199500 1! #24199600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24200000 0! #24200500 1! #24200600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24201000 0! #24201500 1! #24201600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24202000 0! #24202500 1! #24202600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #24202700 b111 g b10 c 0h #24203000 0! #24203500 1! #24203600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24204000 0! #24204500 1! #24204600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24205000 0! #24205500 1! #24205600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24206000 0! #24206500 1! #24206600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24207000 0! #24207500 1! #24207600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24208000 0! #24208500 1! #24208600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24209000 0! #24209500 1! #24209600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24210000 0! #24210500 1! #24210600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24211000 0! #24211500 1! #24211600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24212000 0! #24212500 1! #24212600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24213000 0! #24213500 1! #24213600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24214000 0! #24214500 1! #24214600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24215000 0! #24215500 1! #24215600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24216000 0! #24216500 1! #24216600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24217000 0! #24217500 1! #24217600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24218000 0! #24218500 1! #24218600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24219000 0! #24219500 1! #24219600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24220000 0! #24220500 1! #24220600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24221000 0! #24221500 1! #24221600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24222000 0! #24222500 1! #24222600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24223000 0! #24223500 1! #24223600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24224000 0! #24224500 1! #24224600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24225000 0! #24225500 1! #24225600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24226000 0! #24226500 1! #24226600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24227000 0! #24227500 1! #24227600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24228000 0! #24228500 1! #24228600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24229000 0! #24229500 1! #24229600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24230000 0! #24230500 1! #24230600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24231000 0! #24231500 1! #24231600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24232000 0! #24232500 1! #24232600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24233000 0! #24233500 1! #24233600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24234000 0! #24234500 1! #24234600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24235000 0! #24235500 1! #24235600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24236000 0! #24236500 1! #24236600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24237000 0! #24237500 1! #24237600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24238000 0! #24238500 1! #24238600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24239000 0! #24239500 1! #24239600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24240000 0! #24240500 1! #24240600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24241000 0! #24241500 1! #24241600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24242000 0! #24242500 1! #24242600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24243000 0! #24243500 1! #24243600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24244000 0! #24244500 1! #24244600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24245000 0! #24245500 1! #24245600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24246000 0! #24246500 1! #24246600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24247000 0! #24247500 1! #24247600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24248000 0! #24248500 1! #24248600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24249000 0! #24249500 1! #24249600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24250000 0! #24250500 1! #24250600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24251000 0! #24251500 1! #24251600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24252000 0! #24252500 1! #24252600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24253000 0! #24253500 1! #24253600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24254000 0! #24254500 1! #24254600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24255000 0! #24255500 1! #24255600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24256000 0! #24256500 1! #24256600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24257000 0! #24257500 1! #24257600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24258000 0! #24258500 1! #24258600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24259000 0! #24259500 1! #24259600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24260000 0! #24260500 1! #24260600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24261000 0! #24261500 1! #24261600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24262000 0! #24262500 1! #24262600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24263000 0! #24263500 1! #24263600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24264000 0! #24264500 1! #24264600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24265000 0! #24265500 1! #24265600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24266000 0! #24266500 1! #24266600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24267000 0! #24267500 1! #24267600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24268000 0! #24268500 1! #24268600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24269000 0! #24269500 1! #24269600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24270000 0! #24270500 1! #24270600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24271000 0! #24271500 1! #24271600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24272000 0! #24272500 1! #24272600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24273000 0! #24273500 1! #24273600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24274000 0! #24274500 1! #24274600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24275000 0! #24275500 1! #24275600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24276000 0! #24276500 1! #24276600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24277000 0! #24277500 1! #24277600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24278000 0! #24278500 1! #24278600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24279000 0! #24279500 1! #24279600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24280000 0! #24280500 1! #24280600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24281000 0! #24281500 1! #24281600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24282000 0! #24282500 1! #24282600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24283000 0! #24283500 1! #24283600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24284000 0! #24284500 1! #24284600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24285000 0! #24285500 1! #24285600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24286000 0! #24286500 1! #24286600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24287000 0! #24287500 1! #24287600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24288000 0! #24288500 1! #24288600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24289000 0! #24289500 1! #24289600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24290000 0! #24290500 1! #24290600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24291000 0! #24291500 1! #24291600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24292000 0! #24292500 1! #24292600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24293000 0! #24293500 1! #24293600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24294000 0! #24294500 1! #24294600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24295000 0! #24295500 1! #24295600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24296000 0! #24296500 1! #24296600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24297000 0! #24297500 1! #24297600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24298000 0! #24298500 1! #24298600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24299000 0! #24299500 1! #24299600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24300000 0! #24300500 1! #24300600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24301000 0! #24301500 1! #24301600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24302000 0! #24302500 1! #24302600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24303000 0! #24303500 1! #24303600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24304000 0! #24304500 1! #24304600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #24304700 1j b100 q 1i 1O #24305000 0! #24305500 1! #24305600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24306000 0! #24306500 1! #24306600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24307000 0! #24307500 1! #24307600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24308000 0! #24308500 1! #24308600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B b1000001 C 1H #24309000 0! #24309500 1! #24309600 b1000001 J xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24310000 0! #24310500 1! #24310600 1E 1F 1G b10100001 D 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 0@ 1A 1B b10000000 C 1H #24311000 0! #24311500 1! #24311600 xE bx D x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24311700 1E 1F 1G b10010000 D 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B b1000001 C 1H #24312000 0! #24312500 1! #24312600 xE bx D x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24313000 0! #24313500 1! #24313600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H b1000011 C #24314000 0! #24314500 1! #24314600 b1000011 J xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24315000 0! #24315500 1! #24315600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24316000 0! #24316500 1! #24316600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24317000 0! #24317500 1! #24317600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24318000 0! #24318500 1! #24318600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24319000 0! #24319500 1! #24319600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24320000 0! #24320500 1! #24320600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24321000 0! #24321500 1! #24321600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24322000 0! #24322500 1! #24322600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24323000 0! #24323500 1! #24323600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24324000 0! #24324500 1! #24324600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24325000 0! #24325500 1! #24325600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24326000 0! #24326500 1! #24326600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24327000 0! #24327500 1! #24327600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24328000 0! #24328500 1! #24328600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24329000 0! #24329500 1! #24329600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24330000 0! #24330500 1! #24330600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24331000 0! #24331500 1! #24331600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24332000 0! #24332500 1! #24332600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24333000 0! #24333500 1! #24333600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24334000 0! #24334500 1! #24334600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24335000 0! #24335500 1! #24335600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24336000 0! #24336500 1! #24336600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24337000 0! #24337500 1! #24337600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24338000 0! #24338500 1! #24338600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24339000 0! #24339500 1! #24339600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24340000 0! #24340500 1! #24340600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24341000 0! #24341500 1! #24341600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24342000 0! #24342500 1! #24342600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24343000 0! #24343500 1! #24343600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24344000 0! #24344500 1! #24344600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24345000 0! #24345500 1! #24345600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24346000 0! #24346500 1! #24346600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24347000 0! #24347500 1! #24347600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24348000 0! #24348500 1! #24348600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24349000 0! #24349500 1! #24349600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24350000 0! #24350500 1! #24350600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24351000 0! #24351500 1! #24351600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24352000 0! #24352500 1! #24352600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24353000 0! #24353500 1! #24353600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24354000 0! #24354500 1! #24354600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24355000 0! #24355500 1! #24355600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24356000 0! #24356500 1! #24356600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24357000 0! #24357500 1! #24357600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24358000 0! #24358500 1! #24358600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24359000 0! #24359500 1! #24359600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24360000 0! #24360500 1! #24360600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24361000 0! #24361500 1! #24361600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24362000 0! #24362500 1! #24362600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24363000 0! #24363500 1! #24363600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24364000 0! #24364500 1! #24364600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24365000 0! #24365500 1! #24365600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24366000 0! #24366500 1! #24366600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24367000 0! #24367500 1! #24367600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24368000 0! #24368500 1! #24368600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24369000 0! #24369500 1! #24369600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24370000 0! #24370500 1! #24370600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24371000 0! #24371500 1! #24371600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24372000 0! #24372500 1! #24372600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24373000 0! #24373500 1! #24373600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24374000 0! #24374500 1! #24374600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24375000 0! #24375500 1! #24375600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24376000 0! #24376500 1! #24376600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24377000 0! #24377500 1! #24377600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24378000 0! #24378500 1! #24378600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24379000 0! #24379500 1! #24379600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24380000 0! #24380500 1! #24380600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24381000 0! #24381500 1! #24381600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24382000 0! #24382500 1! #24382600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24383000 0! #24383500 1! #24383600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24384000 0! #24384500 1! #24384600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24385000 0! #24385500 1! #24385600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24386000 0! #24386500 1! #24386600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24387000 0! #24387500 1! #24387600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24388000 0! #24388500 1! #24388600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24389000 0! #24389500 1! #24389600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24390000 0! #24390500 1! #24390600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24391000 0! #24391500 1! #24391600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24392000 0! #24392500 1! #24392600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24393000 0! #24393500 1! #24393600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24394000 0! #24394500 1! #24394600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24395000 0! #24395500 1! #24395600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24396000 0! #24396500 1! #24396600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24397000 0! #24397500 1! #24397600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24398000 0! #24398500 1! #24398600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24399000 0! #24399500 1! #24399600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24400000 0! #24400500 1! #24400600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24401000 0! #24401500 1! #24401600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24402000 0! #24402500 1! #24402600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24403000 0! #24403500 1! #24403600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24404000 0! #24404500 1! #24404600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24405000 0! #24405500 1! #24405600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24406000 0! #24406500 1! #24406600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24407000 0! #24407500 1! #24407600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24408000 0! #24408500 1! #24408600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24409000 0! #24409500 1! #24409600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24410000 0! #24410500 1! #24410600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24411000 0! #24411500 1! #24411600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24412000 0! #24412500 1! #24412600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24413000 0! #24413500 1! #24413600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24414000 0! #24414500 1! #24414600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24415000 0! #24415500 1! #24415600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24416000 0! #24416500 1! #24416600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24417000 0! #24417500 1! #24417600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24418000 0! #24418500 1! #24418600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24419000 0! #24419500 1! #24419600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24420000 0! #24420500 1! #24420600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24421000 0! #24421500 1! #24421600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24422000 0! #24422500 1! #24422600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24423000 0! #24423500 1! #24423600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24424000 0! #24424500 1! #24424600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24425000 0! #24425500 1! #24425600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24426000 0! #24426500 1! #24426600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24427000 0! #24427500 1! #24427600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24428000 0! #24428500 1! #24428600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24429000 0! #24429500 1! #24429600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24430000 0! #24430500 1! #24430600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24431000 0! #24431500 1! #24431600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24432000 0! #24432500 1! #24432600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24433000 0! #24433500 1! #24433600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24434000 0! #24434500 1! #24434600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24435000 0! #24435500 1! #24435600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24436000 0! #24436500 1! #24436600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24437000 0! #24437500 1! #24437600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24438000 0! #24438500 1! #24438600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24439000 0! #24439500 1! #24439600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24440000 0! #24440500 1! #24440600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24441000 0! #24441500 1! #24441600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24442000 0! #24442500 1! #24442600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24443000 0! #24443500 1! #24443600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24444000 0! #24444500 1! #24444600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24445000 0! #24445500 1! #24445600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24446000 0! #24446500 1! #24446600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24447000 0! #24447500 1! #24447600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24448000 0! #24448500 1! #24448600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24449000 0! #24449500 1! #24449600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24450000 0! #24450500 1! #24450600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24451000 0! #24451500 1! #24451600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24452000 0! #24452500 1! #24452600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24453000 0! #24453500 1! #24453600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24454000 0! #24454500 1! #24454600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24455000 0! #24455500 1! #24455600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24456000 0! #24456500 1! #24456600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24457000 0! #24457500 1! #24457600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #24457700 b101 c #24458000 0! #24458500 1! #24458600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24459000 0! #24459500 1! #24459600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24460000 0! #24460500 1! #24460600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24461000 0! #24461500 1! #24461600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24462000 0! #24462500 1! #24462600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24463000 0! #24463500 1! #24463600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24464000 0! #24464500 1! #24464600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24465000 0! #24465500 1! #24465600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24466000 0! #24466500 1! #24466600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24467000 0! #24467500 1! #24467600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24468000 0! #24468500 1! #24468600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24469000 0! #24469500 1! #24469600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24470000 0! #24470500 1! #24470600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24471000 0! #24471500 1! #24471600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24472000 0! #24472500 1! #24472600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24473000 0! #24473500 1! #24473600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24474000 0! #24474500 1! #24474600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24475000 0! #24475500 1! #24475600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24476000 0! #24476500 1! #24476600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24477000 0! #24477500 1! #24477600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24478000 0! #24478500 1! #24478600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24479000 0! #24479500 1! #24479600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24480000 0! #24480500 1! #24480600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24481000 0! #24481500 1! #24481600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24482000 0! #24482500 1! #24482600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24483000 0! #24483500 1! #24483600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24484000 0! #24484500 1! #24484600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24485000 0! #24485500 1! #24485600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24486000 0! #24486500 1! #24486600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24487000 0! #24487500 1! #24487600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24488000 0! #24488500 1! #24488600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24489000 0! #24489500 1! #24489600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24490000 0! #24490500 1! #24490600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24491000 0! #24491500 1! #24491600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24492000 0! #24492500 1! #24492600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24493000 0! #24493500 1! #24493600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24494000 0! #24494500 1! #24494600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24495000 0! #24495500 1! #24495600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24496000 0! #24496500 1! #24496600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24497000 0! #24497500 1! #24497600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24498000 0! #24498500 1! #24498600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24499000 0! #24499500 1! #24499600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24500000 0! #24500500 1! #24500600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24501000 0! #24501500 1! #24501600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24502000 0! #24502500 1! #24502600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24503000 0! #24503500 1! #24503600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24504000 0! #24504500 1! #24504600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24505000 0! #24505500 1! #24505600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24506000 0! #24506500 1! #24506600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24507000 0! #24507500 1! #24507600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24508000 0! #24508500 1! #24508600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0Q 0O #24508700 1_ 1f #24509000 0! #24509500 1! #24509600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24510000 0! #24510500 1! #24510600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24511000 0! #24511500 1! #24511600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24512000 0! #24512500 1! #24512600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24513000 0! #24513500 1! #24513600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24514000 0! #24514500 1! #24514600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24515000 0! #24515500 1! #24515600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24516000 0! #24516500 1! #24516600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24517000 0! #24517500 1! #24517600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24518000 0! #24518500 1! #24518600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24519000 0! #24519500 1! #24519600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24520000 0! #24520500 1! #24520600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24521000 0! #24521500 1! #24521600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24522000 0! #24522500 1! #24522600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24523000 0! #24523500 1! #24523600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24524000 0! #24524500 1! #24524600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24525000 0! #24525500 1! #24525600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24526000 0! #24526500 1! #24526600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24527000 0! #24527500 1! #24527600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24528000 0! #24528500 1! #24528600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24529000 0! #24529500 1! #24529600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24530000 0! #24530500 1! #24530600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24531000 0! #24531500 1! #24531600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24532000 0! #24532500 1! #24532600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24533000 0! #24533500 1! #24533600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24534000 0! #24534500 1! #24534600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24535000 0! #24535500 1! #24535600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24536000 0! #24536500 1! #24536600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24537000 0! #24537500 1! #24537600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24538000 0! #24538500 1! #24538600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24539000 0! #24539500 1! #24539600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24540000 0! #24540500 1! #24540600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24541000 0! #24541500 1! #24541600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24542000 0! #24542500 1! #24542600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24543000 0! #24543500 1! #24543600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24544000 0! #24544500 1! #24544600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24545000 0! #24545500 1! #24545600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24546000 0! #24546500 1! #24546600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24547000 0! #24547500 1! #24547600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24548000 0! #24548500 1! #24548600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24549000 0! #24549500 1! #24549600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24550000 0! #24550500 1! #24550600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24551000 0! #24551500 1! #24551600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24552000 0! #24552500 1! #24552600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24553000 0! #24553500 1! #24553600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24554000 0! #24554500 1! #24554600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24555000 0! #24555500 1! #24555600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24556000 0! #24556500 1! #24556600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24557000 0! #24557500 1! #24557600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24558000 0! #24558500 1! #24558600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24559000 0! #24559500 1! #24559600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #24559700 b0 q #24560000 0! #24560500 1! #24560600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24561000 0! #24561500 1! #24561600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24562000 0! #24562500 1! #24562600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24563000 0! #24563500 1! #24563600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24564000 0! #24564500 1! #24564600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24565000 0! #24565500 1! #24565600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24566000 0! #24566500 1! #24566600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24567000 0! #24567500 1! #24567600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24568000 0! #24568500 1! #24568600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24569000 0! #24569500 1! #24569600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24570000 0! #24570500 1! #24570600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24571000 0! #24571500 1! #24571600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24572000 0! #24572500 1! #24572600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24573000 0! #24573500 1! #24573600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24574000 0! #24574500 1! #24574600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24575000 0! #24575500 1! #24575600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24576000 0! #24576500 1! #24576600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24577000 0! #24577500 1! #24577600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24578000 0! #24578500 1! #24578600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24579000 0! #24579500 1! #24579600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24580000 0! #24580500 1! #24580600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24581000 0! #24581500 1! #24581600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24582000 0! #24582500 1! #24582600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24583000 0! #24583500 1! #24583600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24584000 0! #24584500 1! #24584600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24585000 0! #24585500 1! #24585600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24586000 0! #24586500 1! #24586600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24587000 0! #24587500 1! #24587600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24588000 0! #24588500 1! #24588600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24589000 0! #24589500 1! #24589600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24590000 0! #24590500 1! #24590600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24591000 0! #24591500 1! #24591600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24592000 0! #24592500 1! #24592600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24593000 0! #24593500 1! #24593600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24594000 0! #24594500 1! #24594600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24595000 0! #24595500 1! #24595600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24596000 0! #24596500 1! #24596600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24597000 0! #24597500 1! #24597600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24598000 0! #24598500 1! #24598600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24599000 0! #24599500 1! #24599600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24600000 0! #24600500 1! #24600600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24601000 0! #24601500 1! #24601600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24602000 0! #24602500 1! #24602600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24603000 0! #24603500 1! #24603600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24604000 0! #24604500 1! #24604600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24605000 0! #24605500 1! #24605600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24606000 0! #24606500 1! #24606600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24607000 0! #24607500 1! #24607600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24608000 0! #24608500 1! #24608600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24609000 0! #24609500 1! #24609600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24610000 0! #24610500 1! #24610600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24611000 0! #24611500 1! #24611600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24612000 0! #24612500 1! #24612600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24613000 0! #24613500 1! #24613600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24614000 0! #24614500 1! #24614600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24615000 0! #24615500 1! #24615600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24616000 0! #24616500 1! #24616600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24617000 0! #24617500 1! #24617600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24618000 0! #24618500 1! #24618600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24619000 0! #24619500 1! #24619600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24620000 0! #24620500 1! #24620600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24621000 0! #24621500 1! #24621600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24622000 0! #24622500 1! #24622600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24623000 0! #24623500 1! #24623600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24624000 0! #24624500 1! #24624600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24625000 0! #24625500 1! #24625600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24626000 0! #24626500 1! #24626600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24627000 0! #24627500 1! #24627600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24628000 0! #24628500 1! #24628600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24629000 0! #24629500 1! #24629600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24630000 0! #24630500 1! #24630600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24631000 0! #24631500 1! #24631600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24632000 0! #24632500 1! #24632600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24633000 0! #24633500 1! #24633600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24634000 0! #24634500 1! #24634600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24635000 0! #24635500 1! #24635600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24636000 0! #24636500 1! #24636600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24637000 0! #24637500 1! #24637600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24638000 0! #24638500 1! #24638600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24639000 0! #24639500 1! #24639600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24640000 0! #24640500 1! #24640600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24641000 0! #24641500 1! #24641600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24642000 0! #24642500 1! #24642600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24643000 0! #24643500 1! #24643600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24644000 0! #24644500 1! #24644600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24645000 0! #24645500 1! #24645600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24646000 0! #24646500 1! #24646600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24647000 0! #24647500 1! #24647600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24648000 0! #24648500 1! #24648600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24649000 0! #24649500 1! #24649600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24650000 0! #24650500 1! #24650600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24651000 0! #24651500 1! #24651600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24652000 0! #24652500 1! #24652600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24653000 0! #24653500 1! #24653600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24654000 0! #24654500 1! #24654600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24655000 0! #24655500 1! #24655600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24656000 0! #24656500 1! #24656600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24657000 0! #24657500 1! #24657600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24658000 0! #24658500 1! #24658600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24659000 0! #24659500 1! #24659600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24660000 0! #24660500 1! #24660600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24661000 0! #24661500 1! #24661600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1Q 1O #24662000 0! #24662500 1! #24662600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24663000 0! #24663500 1! #24663600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24664000 0! #24664500 1! #24664600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24665000 0! #24665500 1! #24665600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24666000 0! #24666500 1! #24666600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24667000 0! #24667500 1! #24667600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24668000 0! #24668500 1! #24668600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24669000 0! #24669500 1! #24669600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24670000 0! #24670500 1! #24670600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24671000 0! #24671500 1! #24671600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24672000 0! #24672500 1! #24672600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24673000 0! #24673500 1! #24673600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24674000 0! #24674500 1! #24674600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24675000 0! #24675500 1! #24675600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24676000 0! #24676500 1! #24676600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24677000 0! #24677500 1! #24677600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24678000 0! #24678500 1! #24678600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24679000 0! #24679500 1! #24679600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24680000 0! #24680500 1! #24680600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24681000 0! #24681500 1! #24681600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24682000 0! #24682500 1! #24682600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24683000 0! #24683500 1! #24683600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24684000 0! #24684500 1! #24684600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24685000 0! #24685500 1! #24685600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24686000 0! #24686500 1! #24686600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24687000 0! #24687500 1! #24687600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24688000 0! #24688500 1! #24688600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24689000 0! #24689500 1! #24689600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24690000 0! #24690500 1! #24690600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24691000 0! #24691500 1! #24691600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24692000 0! #24692500 1! #24692600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24693000 0! #24693500 1! #24693600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24694000 0! #24694500 1! #24694600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24695000 0! #24695500 1! #24695600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24696000 0! #24696500 1! #24696600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24697000 0! #24697500 1! #24697600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24698000 0! #24698500 1! #24698600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24699000 0! #24699500 1! #24699600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24700000 0! #24700500 1! #24700600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24701000 0! #24701500 1! #24701600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24702000 0! #24702500 1! #24702600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24703000 0! #24703500 1! #24703600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24704000 0! #24704500 1! #24704600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24705000 0! #24705500 1! #24705600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24706000 0! #24706500 1! #24706600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24707000 0! #24707500 1! #24707600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24708000 0! #24708500 1! #24708600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24709000 0! #24709500 1! #24709600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24710000 0! #24710500 1! #24710600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24711000 0! #24711500 1! #24711600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24712000 0! #24712500 1! #24712600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #24712700 1` b1011 c #24713000 0! #24713500 1! #24713600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24714000 0! #24714500 1! #24714600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24715000 0! #24715500 1! #24715600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24716000 0! #24716500 1! #24716600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24717000 0! #24717500 1! #24717600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24718000 0! #24718500 1! #24718600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24719000 0! #24719500 1! #24719600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24720000 0! #24720500 1! #24720600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24721000 0! #24721500 1! #24721600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24722000 0! #24722500 1! #24722600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24723000 0! #24723500 1! #24723600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24724000 0! #24724500 1! #24724600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24725000 0! #24725500 1! #24725600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24726000 0! #24726500 1! #24726600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24727000 0! #24727500 1! #24727600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24728000 0! #24728500 1! #24728600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24729000 0! #24729500 1! #24729600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24730000 0! #24730500 1! #24730600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24731000 0! #24731500 1! #24731600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24732000 0! #24732500 1! #24732600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24733000 0! #24733500 1! #24733600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24734000 0! #24734500 1! #24734600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24735000 0! #24735500 1! #24735600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24736000 0! #24736500 1! #24736600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24737000 0! #24737500 1! #24737600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24738000 0! #24738500 1! #24738600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24739000 0! #24739500 1! #24739600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24740000 0! #24740500 1! #24740600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24741000 0! #24741500 1! #24741600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24742000 0! #24742500 1! #24742600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24743000 0! #24743500 1! #24743600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24744000 0! #24744500 1! #24744600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24745000 0! #24745500 1! #24745600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24746000 0! #24746500 1! #24746600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24747000 0! #24747500 1! #24747600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24748000 0! #24748500 1! #24748600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24749000 0! #24749500 1! #24749600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24750000 0! #24750500 1! #24750600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24751000 0! #24751500 1! #24751600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24752000 0! #24752500 1! #24752600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24753000 0! #24753500 1! #24753600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24754000 0! #24754500 1! #24754600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24755000 0! #24755500 1! #24755600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24756000 0! #24756500 1! #24756600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24757000 0! #24757500 1! #24757600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24758000 0! #24758500 1! #24758600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24759000 0! #24759500 1! #24759600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24760000 0! #24760500 1! #24760600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24761000 0! #24761500 1! #24761600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24762000 0! #24762500 1! #24762600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24763000 0! #24763500 1! #24763600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24764000 0! #24764500 1! #24764600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24765000 0! #24765500 1! #24765600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24766000 0! #24766500 1! #24766600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24767000 0! #24767500 1! #24767600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24768000 0! #24768500 1! #24768600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24769000 0! #24769500 1! #24769600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24770000 0! #24770500 1! #24770600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24771000 0! #24771500 1! #24771600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24772000 0! #24772500 1! #24772600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24773000 0! #24773500 1! #24773600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24774000 0! #24774500 1! #24774600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24775000 0! #24775500 1! #24775600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24776000 0! #24776500 1! #24776600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24777000 0! #24777500 1! #24777600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24778000 0! #24778500 1! #24778600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24779000 0! #24779500 1! #24779600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24780000 0! #24780500 1! #24780600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24781000 0! #24781500 1! #24781600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24782000 0! #24782500 1! #24782600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24783000 0! #24783500 1! #24783600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24784000 0! #24784500 1! #24784600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24785000 0! #24785500 1! #24785600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24786000 0! #24786500 1! #24786600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24787000 0! #24787500 1! #24787600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24788000 0! #24788500 1! #24788600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24789000 0! #24789500 1! #24789600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24790000 0! #24790500 1! #24790600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24791000 0! #24791500 1! #24791600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24792000 0! #24792500 1! #24792600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24793000 0! #24793500 1! #24793600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24794000 0! #24794500 1! #24794600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24795000 0! #24795500 1! #24795600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24796000 0! #24796500 1! #24796600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24797000 0! #24797500 1! #24797600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24798000 0! #24798500 1! #24798600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24799000 0! #24799500 1! #24799600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24800000 0! #24800500 1! #24800600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24801000 0! #24801500 1! #24801600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24802000 0! #24802500 1! #24802600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24803000 0! #24803500 1! #24803600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24804000 0! #24804500 1! #24804600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24805000 0! #24805500 1! #24805600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24806000 0! #24806500 1! #24806600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24807000 0! #24807500 1! #24807600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24808000 0! #24808500 1! #24808600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24809000 0! #24809500 1! #24809600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24810000 0! #24810500 1! #24810600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24811000 0! #24811500 1! #24811600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24812000 0! #24812500 1! #24812600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24813000 0! #24813500 1! #24813600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24814000 0! #24814500 1! #24814600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #24814700 0i #24815000 0! #24815500 1! #24815600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24816000 0! #24816500 1! #24816600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24817000 0! #24817500 1! #24817600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24818000 0! #24818500 1! #24818600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24819000 0! #24819500 1! #24819600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24820000 0! #24820500 1! #24820600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24821000 0! #24821500 1! #24821600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24822000 0! #24822500 1! #24822600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24823000 0! #24823500 1! #24823600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24824000 0! #24824500 1! #24824600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24825000 0! #24825500 1! #24825600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24826000 0! #24826500 1! #24826600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24827000 0! #24827500 1! #24827600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24828000 0! #24828500 1! #24828600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24829000 0! #24829500 1! #24829600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24830000 0! #24830500 1! #24830600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24831000 0! #24831500 1! #24831600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24832000 0! #24832500 1! #24832600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24833000 0! #24833500 1! #24833600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24834000 0! #24834500 1! #24834600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24835000 0! #24835500 1! #24835600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24836000 0! #24836500 1! #24836600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24837000 0! #24837500 1! #24837600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24838000 0! #24838500 1! #24838600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24839000 0! #24839500 1! #24839600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24840000 0! #24840500 1! #24840600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24841000 0! #24841500 1! #24841600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24842000 0! #24842500 1! #24842600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24843000 0! #24843500 1! #24843600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24844000 0! #24844500 1! #24844600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24845000 0! #24845500 1! #24845600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24846000 0! #24846500 1! #24846600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24847000 0! #24847500 1! #24847600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24848000 0! #24848500 1! #24848600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24849000 0! #24849500 1! #24849600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24850000 0! #24850500 1! #24850600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24851000 0! #24851500 1! #24851600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24852000 0! #24852500 1! #24852600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24853000 0! #24853500 1! #24853600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24854000 0! #24854500 1! #24854600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24855000 0! #24855500 1! #24855600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24856000 0! #24856500 1! #24856600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24857000 0! #24857500 1! #24857600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24858000 0! #24858500 1! #24858600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24859000 0! #24859500 1! #24859600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24860000 0! #24860500 1! #24860600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24861000 0! #24861500 1! #24861600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24862000 0! #24862500 1! #24862600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24863000 0! #24863500 1! #24863600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24864000 0! #24864500 1! #24864600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24865000 0! #24865500 1! #24865600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24866000 0! #24866500 1! #24866600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24867000 0! #24867500 1! #24867600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24868000 0! #24868500 1! #24868600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24869000 0! #24869500 1! #24869600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24870000 0! #24870500 1! #24870600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24871000 0! #24871500 1! #24871600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24872000 0! #24872500 1! #24872600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24873000 0! #24873500 1! #24873600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24874000 0! #24874500 1! #24874600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24875000 0! #24875500 1! #24875600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24876000 0! #24876500 1! #24876600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24877000 0! #24877500 1! #24877600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24878000 0! #24878500 1! #24878600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24879000 0! #24879500 1! #24879600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24880000 0! #24880500 1! #24880600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24881000 0! #24881500 1! #24881600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24882000 0! #24882500 1! #24882600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24883000 0! #24883500 1! #24883600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24884000 0! #24884500 1! #24884600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24885000 0! #24885500 1! #24885600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24886000 0! #24886500 1! #24886600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24887000 0! #24887500 1! #24887600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24888000 0! #24888500 1! #24888600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24889000 0! #24889500 1! #24889600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24890000 0! #24890500 1! #24890600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24891000 0! #24891500 1! #24891600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24892000 0! #24892500 1! #24892600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24893000 0! #24893500 1! #24893600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24894000 0! #24894500 1! #24894600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24895000 0! #24895500 1! #24895600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24896000 0! #24896500 1! #24896600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24897000 0! #24897500 1! #24897600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24898000 0! #24898500 1! #24898600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24899000 0! #24899500 1! #24899600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24900000 0! #24900500 1! #24900600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24901000 0! #24901500 1! #24901600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24902000 0! #24902500 1! #24902600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24903000 0! #24903500 1! #24903600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24904000 0! #24904500 1! #24904600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24905000 0! #24905500 1! #24905600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24906000 0! #24906500 1! #24906600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24907000 0! #24907500 1! #24907600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24908000 0! #24908500 1! #24908600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24909000 0! #24909500 1! #24909600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24910000 0! #24910500 1! #24910600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24911000 0! #24911500 1! #24911600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24912000 0! #24912500 1! #24912600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24913000 0! #24913500 1! #24913600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24914000 0! #24914500 1! #24914600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24915000 0! #24915500 1! #24915600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24916000 0! #24916500 1! #24916600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0Q 0O #24916700 0_ 0f #24917000 0! #24917500 1! #24917600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24918000 0! #24918500 1! #24918600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24919000 0! #24919500 1! #24919600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24920000 0! #24920500 1! #24920600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24921000 0! #24921500 1! #24921600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24922000 0! #24922500 1! #24922600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24923000 0! #24923500 1! #24923600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24924000 0! #24924500 1! #24924600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24925000 0! #24925500 1! #24925600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24926000 0! #24926500 1! #24926600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24927000 0! #24927500 1! #24927600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24928000 0! #24928500 1! #24928600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24929000 0! #24929500 1! #24929600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24930000 0! #24930500 1! #24930600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24931000 0! #24931500 1! #24931600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24932000 0! #24932500 1! #24932600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24933000 0! #24933500 1! #24933600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24934000 0! #24934500 1! #24934600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24935000 0! #24935500 1! #24935600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24936000 0! #24936500 1! #24936600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24937000 0! #24937500 1! #24937600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24938000 0! #24938500 1! #24938600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24939000 0! #24939500 1! #24939600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24940000 0! #24940500 1! #24940600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24941000 0! #24941500 1! #24941600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24942000 0! #24942500 1! #24942600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24943000 0! #24943500 1! #24943600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24944000 0! #24944500 1! #24944600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24945000 0! #24945500 1! #24945600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24946000 0! #24946500 1! #24946600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24947000 0! #24947500 1! #24947600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24948000 0! #24948500 1! #24948600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24949000 0! #24949500 1! #24949600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24950000 0! #24950500 1! #24950600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24951000 0! #24951500 1! #24951600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24952000 0! #24952500 1! #24952600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24953000 0! #24953500 1! #24953600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24954000 0! #24954500 1! #24954600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24955000 0! #24955500 1! #24955600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24956000 0! #24956500 1! #24956600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24957000 0! #24957500 1! #24957600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24958000 0! #24958500 1! #24958600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24959000 0! #24959500 1! #24959600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24960000 0! #24960500 1! #24960600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24961000 0! #24961500 1! #24961600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24962000 0! #24962500 1! #24962600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24963000 0! #24963500 1! #24963600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24964000 0! #24964500 1! #24964600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24965000 0! #24965500 1! #24965600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24966000 0! #24966500 1! #24966600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24967000 0! #24967500 1! #24967600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #24967700 0` b110 g b10110 c #24968000 0! #24968500 1! #24968600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24969000 0! #24969500 1! #24969600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24970000 0! #24970500 1! #24970600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24971000 0! #24971500 1! #24971600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24972000 0! #24972500 1! #24972600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24973000 0! #24973500 1! #24973600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24974000 0! #24974500 1! #24974600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24975000 0! #24975500 1! #24975600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24976000 0! #24976500 1! #24976600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24977000 0! #24977500 1! #24977600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24978000 0! #24978500 1! #24978600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24979000 0! #24979500 1! #24979600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24980000 0! #24980500 1! #24980600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24981000 0! #24981500 1! #24981600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24982000 0! #24982500 1! #24982600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24983000 0! #24983500 1! #24983600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24984000 0! #24984500 1! #24984600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24985000 0! #24985500 1! #24985600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24986000 0! #24986500 1! #24986600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24987000 0! #24987500 1! #24987600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24988000 0! #24988500 1! #24988600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24989000 0! #24989500 1! #24989600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24990000 0! #24990500 1! #24990600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24991000 0! #24991500 1! #24991600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24992000 0! #24992500 1! #24992600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24993000 0! #24993500 1! #24993600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24994000 0! #24994500 1! #24994600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24995000 0! #24995500 1! #24995600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24996000 0! #24996500 1! #24996600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24997000 0! #24997500 1! #24997600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #24998000 0! #24998500 1! #24998600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #24999000 0! #24999500 1! #24999600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25000000 0! #25000500 1! #25000600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25001000 0! #25001500 1! #25001600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25002000 0! #25002500 1! #25002600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25003000 0! #25003500 1! #25003600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25004000 0! #25004500 1! #25004600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25005000 0! #25005500 1! #25005600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25006000 0! #25006500 1! #25006600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25007000 0! #25007500 1! #25007600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25008000 0! #25008500 1! #25008600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25009000 0! #25009500 1! #25009600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25010000 0! #25010500 1! #25010600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25011000 0! #25011500 1! #25011600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25012000 0! #25012500 1! #25012600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25013000 0! #25013500 1! #25013600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25014000 0! #25014500 1! #25014600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25015000 0! #25015500 1! #25015600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25016000 0! #25016500 1! #25016600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25017000 0! #25017500 1! #25017600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25018000 0! #25018500 1! #25018600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25019000 0! #25019500 1! #25019600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25020000 0! #25020500 1! #25020600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25021000 0! #25021500 1! #25021600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25022000 0! #25022500 1! #25022600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25023000 0! #25023500 1! #25023600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25024000 0! #25024500 1! #25024600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25025000 0! #25025500 1! #25025600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25026000 0! #25026500 1! #25026600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25027000 0! #25027500 1! #25027600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25028000 0! #25028500 1! #25028600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25029000 0! #25029500 1! #25029600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25030000 0! #25030500 1! #25030600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25031000 0! #25031500 1! #25031600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25032000 0! #25032500 1! #25032600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25033000 0! #25033500 1! #25033600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25034000 0! #25034500 1! #25034600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25035000 0! #25035500 1! #25035600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25036000 0! #25036500 1! #25036600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25037000 0! #25037500 1! #25037600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25038000 0! #25038500 1! #25038600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25039000 0! #25039500 1! #25039600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25040000 0! #25040500 1! #25040600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25041000 0! #25041500 1! #25041600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25042000 0! #25042500 1! #25042600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25043000 0! #25043500 1! #25043600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25044000 0! #25044500 1! #25044600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25045000 0! #25045500 1! #25045600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25046000 0! #25046500 1! #25046600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25047000 0! #25047500 1! #25047600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25048000 0! #25048500 1! #25048600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25049000 0! #25049500 1! #25049600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25050000 0! #25050500 1! #25050600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25051000 0! #25051500 1! #25051600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25052000 0! #25052500 1! #25052600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25053000 0! #25053500 1! #25053600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25054000 0! #25054500 1! #25054600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25055000 0! #25055500 1! #25055600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25056000 0! #25056500 1! #25056600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25057000 0! #25057500 1! #25057600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25058000 0! #25058500 1! #25058600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25059000 0! #25059500 1! #25059600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25060000 0! #25060500 1! #25060600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25061000 0! #25061500 1! #25061600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25062000 0! #25062500 1! #25062600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25063000 0! #25063500 1! #25063600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25064000 0! #25064500 1! #25064600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25065000 0! #25065500 1! #25065600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25066000 0! #25066500 1! #25066600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25067000 0! #25067500 1! #25067600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25068000 0! #25068500 1! #25068600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25069000 0! #25069500 1! #25069600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #25070000 0! #25070500 1! #25070600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25071000 0! #25071500 1! #25071600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25072000 0! #25072500 1! #25072600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25073000 0! #25073500 1! #25073600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25074000 0! #25074500 1! #25074600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25075000 0! #25075500 1! #25075600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25076000 0! #25076500 1! #25076600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25077000 0! #25077500 1! #25077600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25078000 0! #25078500 1! #25078600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25079000 0! #25079500 1! #25079600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25080000 0! #25080500 1! #25080600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25081000 0! #25081500 1! #25081600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25082000 0! #25082500 1! #25082600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25083000 0! #25083500 1! #25083600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25084000 0! #25084500 1! #25084600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25085000 0! #25085500 1! #25085600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25086000 0! #25086500 1! #25086600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25087000 0! #25087500 1! #25087600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25088000 0! #25088500 1! #25088600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25089000 0! #25089500 1! #25089600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25090000 0! #25090500 1! #25090600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25091000 0! #25091500 1! #25091600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25092000 0! #25092500 1! #25092600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25093000 0! #25093500 1! #25093600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25094000 0! #25094500 1! #25094600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25095000 0! #25095500 1! #25095600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25096000 0! #25096500 1! #25096600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25097000 0! #25097500 1! #25097600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25098000 0! #25098500 1! #25098600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25099000 0! #25099500 1! #25099600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25100000 0! #25100500 1! #25100600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25101000 0! #25101500 1! #25101600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25102000 0! #25102500 1! #25102600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25103000 0! #25103500 1! #25103600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25104000 0! #25104500 1! #25104600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25105000 0! #25105500 1! #25105600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25106000 0! #25106500 1! #25106600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25107000 0! #25107500 1! #25107600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25108000 0! #25108500 1! #25108600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25109000 0! #25109500 1! #25109600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25110000 0! #25110500 1! #25110600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25111000 0! #25111500 1! #25111600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25112000 0! #25112500 1! #25112600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25113000 0! #25113500 1! #25113600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25114000 0! #25114500 1! #25114600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25115000 0! #25115500 1! #25115600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25116000 0! #25116500 1! #25116600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25117000 0! #25117500 1! #25117600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25118000 0! #25118500 1! #25118600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25119000 0! #25119500 1! #25119600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25120000 0! #25120500 1! #25120600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25121000 0! #25121500 1! #25121600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25122000 0! #25122500 1! #25122600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25123000 0! #25123500 1! #25123600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25124000 0! #25124500 1! #25124600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25125000 0! #25125500 1! #25125600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25126000 0! #25126500 1! #25126600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25127000 0! #25127500 1! #25127600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25128000 0! #25128500 1! #25128600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25129000 0! #25129500 1! #25129600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25130000 0! #25130500 1! #25130600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25131000 0! #25131500 1! #25131600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25132000 0! #25132500 1! #25132600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25133000 0! #25133500 1! #25133600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25134000 0! #25134500 1! #25134600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25135000 0! #25135500 1! #25135600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25136000 0! #25136500 1! #25136600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25137000 0! #25137500 1! #25137600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25138000 0! #25138500 1! #25138600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25139000 0! #25139500 1! #25139600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25140000 0! #25140500 1! #25140600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25141000 0! #25141500 1! #25141600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25142000 0! #25142500 1! #25142600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25143000 0! #25143500 1! #25143600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25144000 0! #25144500 1! #25144600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25145000 0! #25145500 1! #25145600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25146000 0! #25146500 1! #25146600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25147000 0! #25147500 1! #25147600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25148000 0! #25148500 1! #25148600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25149000 0! #25149500 1! #25149600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25150000 0! #25150500 1! #25150600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25151000 0! #25151500 1! #25151600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25152000 0! #25152500 1! #25152600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25153000 0! #25153500 1! #25153600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25154000 0! #25154500 1! #25154600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25155000 0! #25155500 1! #25155600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25156000 0! #25156500 1! #25156600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25157000 0! #25157500 1! #25157600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25158000 0! #25158500 1! #25158600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25159000 0! #25159500 1! #25159600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25160000 0! #25160500 1! #25160600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25161000 0! #25161500 1! #25161600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25162000 0! #25162500 1! #25162600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25163000 0! #25163500 1! #25163600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25164000 0! #25164500 1! #25164600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25165000 0! #25165500 1! #25165600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25166000 0! #25166500 1! #25166600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25167000 0! #25167500 1! #25167600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25168000 0! #25168500 1! #25168600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25169000 0! #25169500 1! #25169600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25170000 0! #25170500 1! #25170600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25171000 0! #25171500 1! #25171600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1Q 1O #25172000 0! #25172500 1! #25172600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25173000 0! #25173500 1! #25173600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25174000 0! #25174500 1! #25174600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25175000 0! #25175500 1! #25175600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25176000 0! #25176500 1! #25176600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25177000 0! #25177500 1! #25177600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25178000 0! #25178500 1! #25178600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25179000 0! #25179500 1! #25179600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25180000 0! #25180500 1! #25180600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25181000 0! #25181500 1! #25181600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25182000 0! #25182500 1! #25182600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25183000 0! #25183500 1! #25183600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25184000 0! #25184500 1! #25184600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25185000 0! #25185500 1! #25185600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25186000 0! #25186500 1! #25186600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25187000 0! #25187500 1! #25187600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25188000 0! #25188500 1! #25188600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25189000 0! #25189500 1! #25189600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25190000 0! #25190500 1! #25190600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25191000 0! #25191500 1! #25191600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25192000 0! #25192500 1! #25192600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25193000 0! #25193500 1! #25193600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25194000 0! #25194500 1! #25194600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25195000 0! #25195500 1! #25195600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25196000 0! #25196500 1! #25196600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25197000 0! #25197500 1! #25197600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25198000 0! #25198500 1! #25198600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25199000 0! #25199500 1! #25199600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25200000 0! #25200500 1! #25200600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25201000 0! #25201500 1! #25201600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25202000 0! #25202500 1! #25202600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25203000 0! #25203500 1! #25203600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25204000 0! #25204500 1! #25204600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25205000 0! #25205500 1! #25205600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25206000 0! #25206500 1! #25206600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25207000 0! #25207500 1! #25207600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25208000 0! #25208500 1! #25208600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25209000 0! #25209500 1! #25209600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25210000 0! #25210500 1! #25210600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25211000 0! #25211500 1! #25211600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25212000 0! #25212500 1! #25212600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25213000 0! #25213500 1! #25213600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25214000 0! #25214500 1! #25214600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25215000 0! #25215500 1! #25215600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25216000 0! #25216500 1! #25216600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25217000 0! #25217500 1! #25217600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25218000 0! #25218500 1! #25218600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25219000 0! #25219500 1! #25219600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25220000 0! #25220500 1! #25220600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25221000 0! #25221500 1! #25221600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25222000 0! #25222500 1! #25222600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #25222700 b101 g b101101 c #25223000 0! #25223500 1! #25223600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25224000 0! #25224500 1! #25224600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25225000 0! #25225500 1! #25225600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25226000 0! #25226500 1! #25226600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25227000 0! #25227500 1! #25227600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25228000 0! #25228500 1! #25228600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25229000 0! #25229500 1! #25229600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25230000 0! #25230500 1! #25230600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25231000 0! #25231500 1! #25231600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25232000 0! #25232500 1! #25232600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25233000 0! #25233500 1! #25233600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25234000 0! #25234500 1! #25234600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25235000 0! #25235500 1! #25235600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25236000 0! #25236500 1! #25236600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25237000 0! #25237500 1! #25237600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25238000 0! #25238500 1! #25238600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25239000 0! #25239500 1! #25239600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25240000 0! #25240500 1! #25240600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25241000 0! #25241500 1! #25241600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25242000 0! #25242500 1! #25242600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25243000 0! #25243500 1! #25243600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25244000 0! #25244500 1! #25244600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25245000 0! #25245500 1! #25245600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25246000 0! #25246500 1! #25246600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25247000 0! #25247500 1! #25247600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25248000 0! #25248500 1! #25248600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25249000 0! #25249500 1! #25249600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25250000 0! #25250500 1! #25250600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25251000 0! #25251500 1! #25251600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25252000 0! #25252500 1! #25252600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25253000 0! #25253500 1! #25253600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25254000 0! #25254500 1! #25254600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25255000 0! #25255500 1! #25255600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25256000 0! #25256500 1! #25256600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25257000 0! #25257500 1! #25257600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25258000 0! #25258500 1! #25258600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25259000 0! #25259500 1! #25259600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25260000 0! #25260500 1! #25260600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25261000 0! #25261500 1! #25261600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25262000 0! #25262500 1! #25262600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25263000 0! #25263500 1! #25263600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25264000 0! #25264500 1! #25264600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25265000 0! #25265500 1! #25265600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25266000 0! #25266500 1! #25266600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25267000 0! #25267500 1! #25267600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25268000 0! #25268500 1! #25268600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25269000 0! #25269500 1! #25269600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25270000 0! #25270500 1! #25270600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25271000 0! #25271500 1! #25271600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25272000 0! #25272500 1! #25272600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25273000 0! #25273500 1! #25273600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25274000 0! #25274500 1! #25274600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25275000 0! #25275500 1! #25275600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25276000 0! #25276500 1! #25276600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25277000 0! #25277500 1! #25277600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25278000 0! #25278500 1! #25278600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25279000 0! #25279500 1! #25279600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25280000 0! #25280500 1! #25280600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25281000 0! #25281500 1! #25281600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25282000 0! #25282500 1! #25282600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25283000 0! #25283500 1! #25283600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25284000 0! #25284500 1! #25284600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25285000 0! #25285500 1! #25285600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25286000 0! #25286500 1! #25286600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25287000 0! #25287500 1! #25287600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25288000 0! #25288500 1! #25288600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25289000 0! #25289500 1! #25289600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25290000 0! #25290500 1! #25290600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25291000 0! #25291500 1! #25291600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25292000 0! #25292500 1! #25292600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25293000 0! #25293500 1! #25293600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25294000 0! #25294500 1! #25294600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25295000 0! #25295500 1! #25295600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25296000 0! #25296500 1! #25296600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25297000 0! #25297500 1! #25297600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25298000 0! #25298500 1! #25298600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25299000 0! #25299500 1! #25299600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25300000 0! #25300500 1! #25300600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25301000 0! #25301500 1! #25301600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25302000 0! #25302500 1! #25302600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25303000 0! #25303500 1! #25303600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25304000 0! #25304500 1! #25304600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25305000 0! #25305500 1! #25305600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25306000 0! #25306500 1! #25306600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25307000 0! #25307500 1! #25307600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25308000 0! #25308500 1! #25308600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25309000 0! #25309500 1! #25309600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25310000 0! #25310500 1! #25310600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25311000 0! #25311500 1! #25311600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25312000 0! #25312500 1! #25312600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25313000 0! #25313500 1! #25313600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25314000 0! #25314500 1! #25314600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25315000 0! #25315500 1! #25315600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25316000 0! #25316500 1! #25316600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25317000 0! #25317500 1! #25317600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25318000 0! #25318500 1! #25318600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25319000 0! #25319500 1! #25319600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25320000 0! #25320500 1! #25320600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25321000 0! #25321500 1! #25321600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25322000 0! #25322500 1! #25322600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25323000 0! #25323500 1! #25323600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25324000 0! #25324500 1! #25324600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #25325000 0! #25325500 1! #25325600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25326000 0! #25326500 1! #25326600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25327000 0! #25327500 1! #25327600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25328000 0! #25328500 1! #25328600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25329000 0! #25329500 1! #25329600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25330000 0! #25330500 1! #25330600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25331000 0! #25331500 1! #25331600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25332000 0! #25332500 1! #25332600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25333000 0! #25333500 1! #25333600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25334000 0! #25334500 1! #25334600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25335000 0! #25335500 1! #25335600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25336000 0! #25336500 1! #25336600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25337000 0! #25337500 1! #25337600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25338000 0! #25338500 1! #25338600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25339000 0! #25339500 1! #25339600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25340000 0! #25340500 1! #25340600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25341000 0! #25341500 1! #25341600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25342000 0! #25342500 1! #25342600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25343000 0! #25343500 1! #25343600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25344000 0! #25344500 1! #25344600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25345000 0! #25345500 1! #25345600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25346000 0! #25346500 1! #25346600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25347000 0! #25347500 1! #25347600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25348000 0! #25348500 1! #25348600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25349000 0! #25349500 1! #25349600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25350000 0! #25350500 1! #25350600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25351000 0! #25351500 1! #25351600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25352000 0! #25352500 1! #25352600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25353000 0! #25353500 1! #25353600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25354000 0! #25354500 1! #25354600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25355000 0! #25355500 1! #25355600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25356000 0! #25356500 1! #25356600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25357000 0! #25357500 1! #25357600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25358000 0! #25358500 1! #25358600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25359000 0! #25359500 1! #25359600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25360000 0! #25360500 1! #25360600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25361000 0! #25361500 1! #25361600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25362000 0! #25362500 1! #25362600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25363000 0! #25363500 1! #25363600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25364000 0! #25364500 1! #25364600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25365000 0! #25365500 1! #25365600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25366000 0! #25366500 1! #25366600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25367000 0! #25367500 1! #25367600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25368000 0! #25368500 1! #25368600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25369000 0! #25369500 1! #25369600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25370000 0! #25370500 1! #25370600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25371000 0! #25371500 1! #25371600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25372000 0! #25372500 1! #25372600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25373000 0! #25373500 1! #25373600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25374000 0! #25374500 1! #25374600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25375000 0! #25375500 1! #25375600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25376000 0! #25376500 1! #25376600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25377000 0! #25377500 1! #25377600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25378000 0! #25378500 1! #25378600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25379000 0! #25379500 1! #25379600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25380000 0! #25380500 1! #25380600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25381000 0! #25381500 1! #25381600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25382000 0! #25382500 1! #25382600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25383000 0! #25383500 1! #25383600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25384000 0! #25384500 1! #25384600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25385000 0! #25385500 1! #25385600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25386000 0! #25386500 1! #25386600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25387000 0! #25387500 1! #25387600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25388000 0! #25388500 1! #25388600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25389000 0! #25389500 1! #25389600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25390000 0! #25390500 1! #25390600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25391000 0! #25391500 1! #25391600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25392000 0! #25392500 1! #25392600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25393000 0! #25393500 1! #25393600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25394000 0! #25394500 1! #25394600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25395000 0! #25395500 1! #25395600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25396000 0! #25396500 1! #25396600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25397000 0! #25397500 1! #25397600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25398000 0! #25398500 1! #25398600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25399000 0! #25399500 1! #25399600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25400000 0! #25400500 1! #25400600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25401000 0! #25401500 1! #25401600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25402000 0! #25402500 1! #25402600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25403000 0! #25403500 1! #25403600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25404000 0! #25404500 1! #25404600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25405000 0! #25405500 1! #25405600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25406000 0! #25406500 1! #25406600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25407000 0! #25407500 1! #25407600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25408000 0! #25408500 1! #25408600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25409000 0! #25409500 1! #25409600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25410000 0! #25410500 1! #25410600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25411000 0! #25411500 1! #25411600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25412000 0! #25412500 1! #25412600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25413000 0! #25413500 1! #25413600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25414000 0! #25414500 1! #25414600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25415000 0! #25415500 1! #25415600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25416000 0! #25416500 1! #25416600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25417000 0! #25417500 1! #25417600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25418000 0! #25418500 1! #25418600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25419000 0! #25419500 1! #25419600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25420000 0! #25420500 1! #25420600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25421000 0! #25421500 1! #25421600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25422000 0! #25422500 1! #25422600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25423000 0! #25423500 1! #25423600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25424000 0! #25424500 1! #25424600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25425000 0! #25425500 1! #25425600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25426000 0! #25426500 1! #25426600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0Q 0O #25427000 0! #25427500 1! #25427600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25428000 0! #25428500 1! #25428600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25429000 0! #25429500 1! #25429600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25430000 0! #25430500 1! #25430600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25431000 0! #25431500 1! #25431600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25432000 0! #25432500 1! #25432600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25433000 0! #25433500 1! #25433600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25434000 0! #25434500 1! #25434600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25435000 0! #25435500 1! #25435600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25436000 0! #25436500 1! #25436600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25437000 0! #25437500 1! #25437600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25438000 0! #25438500 1! #25438600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25439000 0! #25439500 1! #25439600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25440000 0! #25440500 1! #25440600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25441000 0! #25441500 1! #25441600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25442000 0! #25442500 1! #25442600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25443000 0! #25443500 1! #25443600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25444000 0! #25444500 1! #25444600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25445000 0! #25445500 1! #25445600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25446000 0! #25446500 1! #25446600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25447000 0! #25447500 1! #25447600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25448000 0! #25448500 1! #25448600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25449000 0! #25449500 1! #25449600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25450000 0! #25450500 1! #25450600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25451000 0! #25451500 1! #25451600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25452000 0! #25452500 1! #25452600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25453000 0! #25453500 1! #25453600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25454000 0! #25454500 1! #25454600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25455000 0! #25455500 1! #25455600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25456000 0! #25456500 1! #25456600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25457000 0! #25457500 1! #25457600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25458000 0! #25458500 1! #25458600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25459000 0! #25459500 1! #25459600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25460000 0! #25460500 1! #25460600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25461000 0! #25461500 1! #25461600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25462000 0! #25462500 1! #25462600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25463000 0! #25463500 1! #25463600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25464000 0! #25464500 1! #25464600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25465000 0! #25465500 1! #25465600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25466000 0! #25466500 1! #25466600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25467000 0! #25467500 1! #25467600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25468000 0! #25468500 1! #25468600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25469000 0! #25469500 1! #25469600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25470000 0! #25470500 1! #25470600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25471000 0! #25471500 1! #25471600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25472000 0! #25472500 1! #25472600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25473000 0! #25473500 1! #25473600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25474000 0! #25474500 1! #25474600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25475000 0! #25475500 1! #25475600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25476000 0! #25476500 1! #25476600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25477000 0! #25477500 1! #25477600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #25477700 b100 g b1011010 c #25478000 0! #25478500 1! #25478600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25479000 0! #25479500 1! #25479600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25480000 0! #25480500 1! #25480600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25481000 0! #25481500 1! #25481600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25482000 0! #25482500 1! #25482600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25483000 0! #25483500 1! #25483600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25484000 0! #25484500 1! #25484600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25485000 0! #25485500 1! #25485600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25486000 0! #25486500 1! #25486600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25487000 0! #25487500 1! #25487600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25488000 0! #25488500 1! #25488600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25489000 0! #25489500 1! #25489600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25490000 0! #25490500 1! #25490600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25491000 0! #25491500 1! #25491600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25492000 0! #25492500 1! #25492600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25493000 0! #25493500 1! #25493600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25494000 0! #25494500 1! #25494600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25495000 0! #25495500 1! #25495600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25496000 0! #25496500 1! #25496600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25497000 0! #25497500 1! #25497600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25498000 0! #25498500 1! #25498600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25499000 0! #25499500 1! #25499600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25500000 0! #25500500 1! #25500600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25501000 0! #25501500 1! #25501600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25502000 0! #25502500 1! #25502600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25503000 0! #25503500 1! #25503600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25504000 0! #25504500 1! #25504600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25505000 0! #25505500 1! #25505600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25506000 0! #25506500 1! #25506600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25507000 0! #25507500 1! #25507600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25508000 0! #25508500 1! #25508600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25509000 0! #25509500 1! #25509600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25510000 0! #25510500 1! #25510600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25511000 0! #25511500 1! #25511600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25512000 0! #25512500 1! #25512600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25513000 0! #25513500 1! #25513600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25514000 0! #25514500 1! #25514600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25515000 0! #25515500 1! #25515600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25516000 0! #25516500 1! #25516600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25517000 0! #25517500 1! #25517600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25518000 0! #25518500 1! #25518600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25519000 0! #25519500 1! #25519600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25520000 0! #25520500 1! #25520600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25521000 0! #25521500 1! #25521600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25522000 0! #25522500 1! #25522600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25523000 0! #25523500 1! #25523600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25524000 0! #25524500 1! #25524600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25525000 0! #25525500 1! #25525600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25526000 0! #25526500 1! #25526600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25527000 0! #25527500 1! #25527600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25528000 0! #25528500 1! #25528600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25529000 0! #25529500 1! #25529600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25530000 0! #25530500 1! #25530600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25531000 0! #25531500 1! #25531600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25532000 0! #25532500 1! #25532600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25533000 0! #25533500 1! #25533600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25534000 0! #25534500 1! #25534600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25535000 0! #25535500 1! #25535600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25536000 0! #25536500 1! #25536600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25537000 0! #25537500 1! #25537600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25538000 0! #25538500 1! #25538600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25539000 0! #25539500 1! #25539600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25540000 0! #25540500 1! #25540600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25541000 0! #25541500 1! #25541600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25542000 0! #25542500 1! #25542600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25543000 0! #25543500 1! #25543600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25544000 0! #25544500 1! #25544600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25545000 0! #25545500 1! #25545600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25546000 0! #25546500 1! #25546600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25547000 0! #25547500 1! #25547600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25548000 0! #25548500 1! #25548600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25549000 0! #25549500 1! #25549600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25550000 0! #25550500 1! #25550600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25551000 0! #25551500 1! #25551600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25552000 0! #25552500 1! #25552600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25553000 0! #25553500 1! #25553600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25554000 0! #25554500 1! #25554600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25555000 0! #25555500 1! #25555600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25556000 0! #25556500 1! #25556600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25557000 0! #25557500 1! #25557600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25558000 0! #25558500 1! #25558600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25559000 0! #25559500 1! #25559600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25560000 0! #25560500 1! #25560600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25561000 0! #25561500 1! #25561600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25562000 0! #25562500 1! #25562600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25563000 0! #25563500 1! #25563600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25564000 0! #25564500 1! #25564600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25565000 0! #25565500 1! #25565600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25566000 0! #25566500 1! #25566600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25567000 0! #25567500 1! #25567600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25568000 0! #25568500 1! #25568600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25569000 0! #25569500 1! #25569600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25570000 0! #25570500 1! #25570600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25571000 0! #25571500 1! #25571600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25572000 0! #25572500 1! #25572600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25573000 0! #25573500 1! #25573600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25574000 0! #25574500 1! #25574600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25575000 0! #25575500 1! #25575600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25576000 0! #25576500 1! #25576600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25577000 0! #25577500 1! #25577600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25578000 0! #25578500 1! #25578600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25579000 0! #25579500 1! #25579600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #25580000 0! #25580500 1! #25580600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25581000 0! #25581500 1! #25581600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25582000 0! #25582500 1! #25582600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25583000 0! #25583500 1! #25583600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25584000 0! #25584500 1! #25584600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25585000 0! #25585500 1! #25585600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25586000 0! #25586500 1! #25586600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25587000 0! #25587500 1! #25587600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25588000 0! #25588500 1! #25588600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25589000 0! #25589500 1! #25589600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25590000 0! #25590500 1! #25590600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25591000 0! #25591500 1! #25591600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25592000 0! #25592500 1! #25592600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25593000 0! #25593500 1! #25593600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25594000 0! #25594500 1! #25594600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25595000 0! #25595500 1! #25595600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25596000 0! #25596500 1! #25596600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25597000 0! #25597500 1! #25597600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25598000 0! #25598500 1! #25598600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25599000 0! #25599500 1! #25599600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25600000 0! #25600500 1! #25600600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25601000 0! #25601500 1! #25601600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25602000 0! #25602500 1! #25602600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25603000 0! #25603500 1! #25603600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25604000 0! #25604500 1! #25604600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25605000 0! #25605500 1! #25605600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25606000 0! #25606500 1! #25606600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25607000 0! #25607500 1! #25607600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25608000 0! #25608500 1! #25608600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25609000 0! #25609500 1! #25609600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25610000 0! #25610500 1! #25610600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25611000 0! #25611500 1! #25611600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25612000 0! #25612500 1! #25612600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25613000 0! #25613500 1! #25613600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25614000 0! #25614500 1! #25614600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25615000 0! #25615500 1! #25615600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25616000 0! #25616500 1! #25616600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25617000 0! #25617500 1! #25617600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25618000 0! #25618500 1! #25618600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25619000 0! #25619500 1! #25619600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25620000 0! #25620500 1! #25620600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25621000 0! #25621500 1! #25621600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25622000 0! #25622500 1! #25622600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25623000 0! #25623500 1! #25623600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25624000 0! #25624500 1! #25624600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25625000 0! #25625500 1! #25625600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25626000 0! #25626500 1! #25626600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25627000 0! #25627500 1! #25627600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25628000 0! #25628500 1! #25628600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25629000 0! #25629500 1! #25629600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25630000 0! #25630500 1! #25630600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25631000 0! #25631500 1! #25631600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25632000 0! #25632500 1! #25632600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25633000 0! #25633500 1! #25633600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25634000 0! #25634500 1! #25634600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25635000 0! #25635500 1! #25635600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25636000 0! #25636500 1! #25636600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25637000 0! #25637500 1! #25637600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25638000 0! #25638500 1! #25638600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25639000 0! #25639500 1! #25639600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25640000 0! #25640500 1! #25640600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25641000 0! #25641500 1! #25641600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25642000 0! #25642500 1! #25642600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25643000 0! #25643500 1! #25643600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25644000 0! #25644500 1! #25644600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25645000 0! #25645500 1! #25645600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25646000 0! #25646500 1! #25646600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25647000 0! #25647500 1! #25647600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25648000 0! #25648500 1! #25648600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25649000 0! #25649500 1! #25649600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25650000 0! #25650500 1! #25650600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25651000 0! #25651500 1! #25651600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25652000 0! #25652500 1! #25652600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25653000 0! #25653500 1! #25653600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25654000 0! #25654500 1! #25654600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25655000 0! #25655500 1! #25655600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25656000 0! #25656500 1! #25656600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25657000 0! #25657500 1! #25657600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25658000 0! #25658500 1! #25658600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25659000 0! #25659500 1! #25659600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25660000 0! #25660500 1! #25660600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25661000 0! #25661500 1! #25661600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25662000 0! #25662500 1! #25662600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25663000 0! #25663500 1! #25663600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25664000 0! #25664500 1! #25664600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25665000 0! #25665500 1! #25665600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25666000 0! #25666500 1! #25666600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25667000 0! #25667500 1! #25667600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25668000 0! #25668500 1! #25668600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25669000 0! #25669500 1! #25669600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25670000 0! #25670500 1! #25670600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25671000 0! #25671500 1! #25671600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25672000 0! #25672500 1! #25672600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25673000 0! #25673500 1! #25673600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25674000 0! #25674500 1! #25674600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25675000 0! #25675500 1! #25675600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25676000 0! #25676500 1! #25676600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25677000 0! #25677500 1! #25677600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25678000 0! #25678500 1! #25678600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25679000 0! #25679500 1! #25679600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25680000 0! #25680500 1! #25680600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25681000 0! #25681500 1! #25681600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25682000 0! #25682500 1! #25682600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25683000 0! #25683500 1! #25683600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25684000 0! #25684500 1! #25684600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25685000 0! #25685500 1! #25685600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25686000 0! #25686500 1! #25686600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25687000 0! #25687500 1! #25687600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25688000 0! #25688500 1! #25688600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25689000 0! #25689500 1! #25689600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25690000 0! #25690500 1! #25690600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25691000 0! #25691500 1! #25691600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25692000 0! #25692500 1! #25692600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25693000 0! #25693500 1! #25693600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25694000 0! #25694500 1! #25694600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25695000 0! #25695500 1! #25695600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25696000 0! #25696500 1! #25696600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25697000 0! #25697500 1! #25697600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25698000 0! #25698500 1! #25698600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25699000 0! #25699500 1! #25699600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25700000 0! #25700500 1! #25700600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25701000 0! #25701500 1! #25701600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25702000 0! #25702500 1! #25702600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25703000 0! #25703500 1! #25703600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25704000 0! #25704500 1! #25704600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25705000 0! #25705500 1! #25705600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25706000 0! #25706500 1! #25706600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25707000 0! #25707500 1! #25707600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25708000 0! #25708500 1! #25708600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25709000 0! #25709500 1! #25709600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25710000 0! #25710500 1! #25710600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25711000 0! #25711500 1! #25711600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25712000 0! #25712500 1! #25712600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25713000 0! #25713500 1! #25713600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25714000 0! #25714500 1! #25714600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25715000 0! #25715500 1! #25715600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25716000 0! #25716500 1! #25716600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25717000 0! #25717500 1! #25717600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25718000 0! #25718500 1! #25718600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25719000 0! #25719500 1! #25719600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25720000 0! #25720500 1! #25720600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25721000 0! #25721500 1! #25721600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25722000 0! #25722500 1! #25722600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25723000 0! #25723500 1! #25723600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25724000 0! #25724500 1! #25724600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25725000 0! #25725500 1! #25725600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25726000 0! #25726500 1! #25726600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25727000 0! #25727500 1! #25727600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25728000 0! #25728500 1! #25728600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25729000 0! #25729500 1! #25729600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25730000 0! #25730500 1! #25730600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25731000 0! #25731500 1! #25731600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25732000 0! #25732500 1! #25732600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #25732700 b11 g b10110100 c #25733000 0! #25733500 1! #25733600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25734000 0! #25734500 1! #25734600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25735000 0! #25735500 1! #25735600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25736000 0! #25736500 1! #25736600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25737000 0! #25737500 1! #25737600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25738000 0! #25738500 1! #25738600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25739000 0! #25739500 1! #25739600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25740000 0! #25740500 1! #25740600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25741000 0! #25741500 1! #25741600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25742000 0! #25742500 1! #25742600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25743000 0! #25743500 1! #25743600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25744000 0! #25744500 1! #25744600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25745000 0! #25745500 1! #25745600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25746000 0! #25746500 1! #25746600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25747000 0! #25747500 1! #25747600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25748000 0! #25748500 1! #25748600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25749000 0! #25749500 1! #25749600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25750000 0! #25750500 1! #25750600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25751000 0! #25751500 1! #25751600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25752000 0! #25752500 1! #25752600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25753000 0! #25753500 1! #25753600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25754000 0! #25754500 1! #25754600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25755000 0! #25755500 1! #25755600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25756000 0! #25756500 1! #25756600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25757000 0! #25757500 1! #25757600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25758000 0! #25758500 1! #25758600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25759000 0! #25759500 1! #25759600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25760000 0! #25760500 1! #25760600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25761000 0! #25761500 1! #25761600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25762000 0! #25762500 1! #25762600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25763000 0! #25763500 1! #25763600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25764000 0! #25764500 1! #25764600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25765000 0! #25765500 1! #25765600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25766000 0! #25766500 1! #25766600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25767000 0! #25767500 1! #25767600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25768000 0! #25768500 1! #25768600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25769000 0! #25769500 1! #25769600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25770000 0! #25770500 1! #25770600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25771000 0! #25771500 1! #25771600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25772000 0! #25772500 1! #25772600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25773000 0! #25773500 1! #25773600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25774000 0! #25774500 1! #25774600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25775000 0! #25775500 1! #25775600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25776000 0! #25776500 1! #25776600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25777000 0! #25777500 1! #25777600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25778000 0! #25778500 1! #25778600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25779000 0! #25779500 1! #25779600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25780000 0! #25780500 1! #25780600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25781000 0! #25781500 1! #25781600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25782000 0! #25782500 1! #25782600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25783000 0! #25783500 1! #25783600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25784000 0! #25784500 1! #25784600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25785000 0! #25785500 1! #25785600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25786000 0! #25786500 1! #25786600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25787000 0! #25787500 1! #25787600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25788000 0! #25788500 1! #25788600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25789000 0! #25789500 1! #25789600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25790000 0! #25790500 1! #25790600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25791000 0! #25791500 1! #25791600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25792000 0! #25792500 1! #25792600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25793000 0! #25793500 1! #25793600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25794000 0! #25794500 1! #25794600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25795000 0! #25795500 1! #25795600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25796000 0! #25796500 1! #25796600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25797000 0! #25797500 1! #25797600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25798000 0! #25798500 1! #25798600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25799000 0! #25799500 1! #25799600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25800000 0! #25800500 1! #25800600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25801000 0! #25801500 1! #25801600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25802000 0! #25802500 1! #25802600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25803000 0! #25803500 1! #25803600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25804000 0! #25804500 1! #25804600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25805000 0! #25805500 1! #25805600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25806000 0! #25806500 1! #25806600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25807000 0! #25807500 1! #25807600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25808000 0! #25808500 1! #25808600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25809000 0! #25809500 1! #25809600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25810000 0! #25810500 1! #25810600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25811000 0! #25811500 1! #25811600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25812000 0! #25812500 1! #25812600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25813000 0! #25813500 1! #25813600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25814000 0! #25814500 1! #25814600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25815000 0! #25815500 1! #25815600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25816000 0! #25816500 1! #25816600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25817000 0! #25817500 1! #25817600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25818000 0! #25818500 1! #25818600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25819000 0! #25819500 1! #25819600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25820000 0! #25820500 1! #25820600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25821000 0! #25821500 1! #25821600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25822000 0! #25822500 1! #25822600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25823000 0! #25823500 1! #25823600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25824000 0! #25824500 1! #25824600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25825000 0! #25825500 1! #25825600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25826000 0! #25826500 1! #25826600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25827000 0! #25827500 1! #25827600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25828000 0! #25828500 1! #25828600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25829000 0! #25829500 1! #25829600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25830000 0! #25830500 1! #25830600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25831000 0! #25831500 1! #25831600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25832000 0! #25832500 1! #25832600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25833000 0! #25833500 1! #25833600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25834000 0! #25834500 1! #25834600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #25835000 0! #25835500 1! #25835600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25836000 0! #25836500 1! #25836600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25837000 0! #25837500 1! #25837600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25838000 0! #25838500 1! #25838600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25839000 0! #25839500 1! #25839600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25840000 0! #25840500 1! #25840600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25841000 0! #25841500 1! #25841600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25842000 0! #25842500 1! #25842600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25843000 0! #25843500 1! #25843600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25844000 0! #25844500 1! #25844600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25845000 0! #25845500 1! #25845600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25846000 0! #25846500 1! #25846600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25847000 0! #25847500 1! #25847600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25848000 0! #25848500 1! #25848600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25849000 0! #25849500 1! #25849600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25850000 0! #25850500 1! #25850600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25851000 0! #25851500 1! #25851600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25852000 0! #25852500 1! #25852600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25853000 0! #25853500 1! #25853600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25854000 0! #25854500 1! #25854600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25855000 0! #25855500 1! #25855600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25856000 0! #25856500 1! #25856600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25857000 0! #25857500 1! #25857600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25858000 0! #25858500 1! #25858600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25859000 0! #25859500 1! #25859600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25860000 0! #25860500 1! #25860600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25861000 0! #25861500 1! #25861600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25862000 0! #25862500 1! #25862600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25863000 0! #25863500 1! #25863600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25864000 0! #25864500 1! #25864600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25865000 0! #25865500 1! #25865600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25866000 0! #25866500 1! #25866600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25867000 0! #25867500 1! #25867600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25868000 0! #25868500 1! #25868600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25869000 0! #25869500 1! #25869600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25870000 0! #25870500 1! #25870600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25871000 0! #25871500 1! #25871600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25872000 0! #25872500 1! #25872600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25873000 0! #25873500 1! #25873600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25874000 0! #25874500 1! #25874600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25875000 0! #25875500 1! #25875600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25876000 0! #25876500 1! #25876600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25877000 0! #25877500 1! #25877600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25878000 0! #25878500 1! #25878600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25879000 0! #25879500 1! #25879600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25880000 0! #25880500 1! #25880600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25881000 0! #25881500 1! #25881600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25882000 0! #25882500 1! #25882600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25883000 0! #25883500 1! #25883600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25884000 0! #25884500 1! #25884600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25885000 0! #25885500 1! #25885600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25886000 0! #25886500 1! #25886600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25887000 0! #25887500 1! #25887600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25888000 0! #25888500 1! #25888600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25889000 0! #25889500 1! #25889600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25890000 0! #25890500 1! #25890600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25891000 0! #25891500 1! #25891600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25892000 0! #25892500 1! #25892600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25893000 0! #25893500 1! #25893600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25894000 0! #25894500 1! #25894600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25895000 0! #25895500 1! #25895600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25896000 0! #25896500 1! #25896600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25897000 0! #25897500 1! #25897600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25898000 0! #25898500 1! #25898600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25899000 0! #25899500 1! #25899600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25900000 0! #25900500 1! #25900600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25901000 0! #25901500 1! #25901600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25902000 0! #25902500 1! #25902600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25903000 0! #25903500 1! #25903600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25904000 0! #25904500 1! #25904600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25905000 0! #25905500 1! #25905600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25906000 0! #25906500 1! #25906600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25907000 0! #25907500 1! #25907600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25908000 0! #25908500 1! #25908600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25909000 0! #25909500 1! #25909600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25910000 0! #25910500 1! #25910600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25911000 0! #25911500 1! #25911600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25912000 0! #25912500 1! #25912600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25913000 0! #25913500 1! #25913600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25914000 0! #25914500 1! #25914600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25915000 0! #25915500 1! #25915600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25916000 0! #25916500 1! #25916600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25917000 0! #25917500 1! #25917600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25918000 0! #25918500 1! #25918600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25919000 0! #25919500 1! #25919600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25920000 0! #25920500 1! #25920600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25921000 0! #25921500 1! #25921600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25922000 0! #25922500 1! #25922600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25923000 0! #25923500 1! #25923600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25924000 0! #25924500 1! #25924600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25925000 0! #25925500 1! #25925600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25926000 0! #25926500 1! #25926600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25927000 0! #25927500 1! #25927600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25928000 0! #25928500 1! #25928600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25929000 0! #25929500 1! #25929600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25930000 0! #25930500 1! #25930600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25931000 0! #25931500 1! #25931600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25932000 0! #25932500 1! #25932600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25933000 0! #25933500 1! #25933600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25934000 0! #25934500 1! #25934600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25935000 0! #25935500 1! #25935600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25936000 0! #25936500 1! #25936600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25937000 0! #25937500 1! #25937600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25938000 0! #25938500 1! #25938600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25939000 0! #25939500 1! #25939600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25940000 0! #25940500 1! #25940600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25941000 0! #25941500 1! #25941600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25942000 0! #25942500 1! #25942600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25943000 0! #25943500 1! #25943600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25944000 0! #25944500 1! #25944600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25945000 0! #25945500 1! #25945600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25946000 0! #25946500 1! #25946600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25947000 0! #25947500 1! #25947600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25948000 0! #25948500 1! #25948600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25949000 0! #25949500 1! #25949600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25950000 0! #25950500 1! #25950600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25951000 0! #25951500 1! #25951600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25952000 0! #25952500 1! #25952600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25953000 0! #25953500 1! #25953600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25954000 0! #25954500 1! #25954600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25955000 0! #25955500 1! #25955600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25956000 0! #25956500 1! #25956600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25957000 0! #25957500 1! #25957600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25958000 0! #25958500 1! #25958600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25959000 0! #25959500 1! #25959600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25960000 0! #25960500 1! #25960600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25961000 0! #25961500 1! #25961600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25962000 0! #25962500 1! #25962600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25963000 0! #25963500 1! #25963600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25964000 0! #25964500 1! #25964600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25965000 0! #25965500 1! #25965600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25966000 0! #25966500 1! #25966600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25967000 0! #25967500 1! #25967600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25968000 0! #25968500 1! #25968600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25969000 0! #25969500 1! #25969600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25970000 0! #25970500 1! #25970600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25971000 0! #25971500 1! #25971600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25972000 0! #25972500 1! #25972600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25973000 0! #25973500 1! #25973600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25974000 0! #25974500 1! #25974600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25975000 0! #25975500 1! #25975600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25976000 0! #25976500 1! #25976600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25977000 0! #25977500 1! #25977600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25978000 0! #25978500 1! #25978600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25979000 0! #25979500 1! #25979600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25980000 0! #25980500 1! #25980600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25981000 0! #25981500 1! #25981600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25982000 0! #25982500 1! #25982600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25983000 0! #25983500 1! #25983600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25984000 0! #25984500 1! #25984600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25985000 0! #25985500 1! #25985600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25986000 0! #25986500 1! #25986600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25987000 0! #25987500 1! #25987600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #25987700 b10 g b1101000 c #25988000 0! #25988500 1! #25988600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25989000 0! #25989500 1! #25989600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25990000 0! #25990500 1! #25990600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25991000 0! #25991500 1! #25991600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25992000 0! #25992500 1! #25992600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25993000 0! #25993500 1! #25993600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25994000 0! #25994500 1! #25994600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25995000 0! #25995500 1! #25995600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25996000 0! #25996500 1! #25996600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25997000 0! #25997500 1! #25997600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #25998000 0! #25998500 1! #25998600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #25999000 0! #25999500 1! #25999600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26000000 0! #26000500 1! #26000600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26001000 0! #26001500 1! #26001600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26002000 0! #26002500 1! #26002600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26003000 0! #26003500 1! #26003600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26004000 0! #26004500 1! #26004600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26005000 0! #26005500 1! #26005600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26006000 0! #26006500 1! #26006600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26007000 0! #26007500 1! #26007600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26008000 0! #26008500 1! #26008600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26009000 0! #26009500 1! #26009600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26010000 0! #26010500 1! #26010600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26011000 0! #26011500 1! #26011600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26012000 0! #26012500 1! #26012600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26013000 0! #26013500 1! #26013600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26014000 0! #26014500 1! #26014600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26015000 0! #26015500 1! #26015600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26016000 0! #26016500 1! #26016600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26017000 0! #26017500 1! #26017600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26018000 0! #26018500 1! #26018600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26019000 0! #26019500 1! #26019600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26020000 0! #26020500 1! #26020600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26021000 0! #26021500 1! #26021600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26022000 0! #26022500 1! #26022600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26023000 0! #26023500 1! #26023600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26024000 0! #26024500 1! #26024600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26025000 0! #26025500 1! #26025600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26026000 0! #26026500 1! #26026600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26027000 0! #26027500 1! #26027600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26028000 0! #26028500 1! #26028600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26029000 0! #26029500 1! #26029600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26030000 0! #26030500 1! #26030600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26031000 0! #26031500 1! #26031600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26032000 0! #26032500 1! #26032600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26033000 0! #26033500 1! #26033600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26034000 0! #26034500 1! #26034600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26035000 0! #26035500 1! #26035600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26036000 0! #26036500 1! #26036600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26037000 0! #26037500 1! #26037600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26038000 0! #26038500 1! #26038600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26039000 0! #26039500 1! #26039600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26040000 0! #26040500 1! #26040600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26041000 0! #26041500 1! #26041600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26042000 0! #26042500 1! #26042600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26043000 0! #26043500 1! #26043600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26044000 0! #26044500 1! #26044600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26045000 0! #26045500 1! #26045600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26046000 0! #26046500 1! #26046600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26047000 0! #26047500 1! #26047600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26048000 0! #26048500 1! #26048600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26049000 0! #26049500 1! #26049600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26050000 0! #26050500 1! #26050600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26051000 0! #26051500 1! #26051600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26052000 0! #26052500 1! #26052600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26053000 0! #26053500 1! #26053600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26054000 0! #26054500 1! #26054600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26055000 0! #26055500 1! #26055600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26056000 0! #26056500 1! #26056600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26057000 0! #26057500 1! #26057600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26058000 0! #26058500 1! #26058600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26059000 0! #26059500 1! #26059600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26060000 0! #26060500 1! #26060600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26061000 0! #26061500 1! #26061600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26062000 0! #26062500 1! #26062600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26063000 0! #26063500 1! #26063600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26064000 0! #26064500 1! #26064600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26065000 0! #26065500 1! #26065600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26066000 0! #26066500 1! #26066600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26067000 0! #26067500 1! #26067600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26068000 0! #26068500 1! #26068600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26069000 0! #26069500 1! #26069600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26070000 0! #26070500 1! #26070600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26071000 0! #26071500 1! #26071600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26072000 0! #26072500 1! #26072600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26073000 0! #26073500 1! #26073600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26074000 0! #26074500 1! #26074600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26075000 0! #26075500 1! #26075600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26076000 0! #26076500 1! #26076600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26077000 0! #26077500 1! #26077600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26078000 0! #26078500 1! #26078600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26079000 0! #26079500 1! #26079600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26080000 0! #26080500 1! #26080600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26081000 0! #26081500 1! #26081600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26082000 0! #26082500 1! #26082600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26083000 0! #26083500 1! #26083600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26084000 0! #26084500 1! #26084600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26085000 0! #26085500 1! #26085600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26086000 0! #26086500 1! #26086600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26087000 0! #26087500 1! #26087600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26088000 0! #26088500 1! #26088600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26089000 0! #26089500 1! #26089600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #26090000 0! #26090500 1! #26090600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26091000 0! #26091500 1! #26091600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26092000 0! #26092500 1! #26092600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26093000 0! #26093500 1! #26093600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26094000 0! #26094500 1! #26094600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26095000 0! #26095500 1! #26095600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26096000 0! #26096500 1! #26096600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26097000 0! #26097500 1! #26097600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26098000 0! #26098500 1! #26098600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26099000 0! #26099500 1! #26099600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26100000 0! #26100500 1! #26100600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26101000 0! #26101500 1! #26101600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26102000 0! #26102500 1! #26102600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26103000 0! #26103500 1! #26103600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26104000 0! #26104500 1! #26104600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26105000 0! #26105500 1! #26105600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26106000 0! #26106500 1! #26106600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26107000 0! #26107500 1! #26107600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26108000 0! #26108500 1! #26108600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26109000 0! #26109500 1! #26109600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26110000 0! #26110500 1! #26110600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26111000 0! #26111500 1! #26111600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26112000 0! #26112500 1! #26112600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26113000 0! #26113500 1! #26113600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26114000 0! #26114500 1! #26114600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26115000 0! #26115500 1! #26115600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26116000 0! #26116500 1! #26116600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26117000 0! #26117500 1! #26117600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26118000 0! #26118500 1! #26118600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26119000 0! #26119500 1! #26119600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26120000 0! #26120500 1! #26120600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26121000 0! #26121500 1! #26121600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26122000 0! #26122500 1! #26122600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26123000 0! #26123500 1! #26123600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26124000 0! #26124500 1! #26124600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26125000 0! #26125500 1! #26125600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26126000 0! #26126500 1! #26126600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26127000 0! #26127500 1! #26127600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26128000 0! #26128500 1! #26128600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26129000 0! #26129500 1! #26129600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26130000 0! #26130500 1! #26130600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26131000 0! #26131500 1! #26131600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26132000 0! #26132500 1! #26132600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26133000 0! #26133500 1! #26133600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26134000 0! #26134500 1! #26134600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26135000 0! #26135500 1! #26135600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26136000 0! #26136500 1! #26136600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26137000 0! #26137500 1! #26137600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26138000 0! #26138500 1! #26138600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26139000 0! #26139500 1! #26139600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26140000 0! #26140500 1! #26140600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26141000 0! #26141500 1! #26141600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26142000 0! #26142500 1! #26142600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26143000 0! #26143500 1! #26143600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26144000 0! #26144500 1! #26144600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26145000 0! #26145500 1! #26145600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26146000 0! #26146500 1! #26146600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26147000 0! #26147500 1! #26147600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26148000 0! #26148500 1! #26148600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26149000 0! #26149500 1! #26149600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26150000 0! #26150500 1! #26150600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26151000 0! #26151500 1! #26151600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26152000 0! #26152500 1! #26152600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26153000 0! #26153500 1! #26153600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26154000 0! #26154500 1! #26154600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26155000 0! #26155500 1! #26155600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26156000 0! #26156500 1! #26156600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26157000 0! #26157500 1! #26157600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26158000 0! #26158500 1! #26158600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26159000 0! #26159500 1! #26159600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26160000 0! #26160500 1! #26160600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26161000 0! #26161500 1! #26161600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26162000 0! #26162500 1! #26162600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26163000 0! #26163500 1! #26163600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26164000 0! #26164500 1! #26164600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26165000 0! #26165500 1! #26165600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26166000 0! #26166500 1! #26166600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26167000 0! #26167500 1! #26167600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26168000 0! #26168500 1! #26168600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26169000 0! #26169500 1! #26169600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26170000 0! #26170500 1! #26170600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26171000 0! #26171500 1! #26171600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26172000 0! #26172500 1! #26172600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26173000 0! #26173500 1! #26173600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26174000 0! #26174500 1! #26174600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26175000 0! #26175500 1! #26175600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26176000 0! #26176500 1! #26176600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26177000 0! #26177500 1! #26177600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26178000 0! #26178500 1! #26178600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26179000 0! #26179500 1! #26179600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26180000 0! #26180500 1! #26180600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26181000 0! #26181500 1! #26181600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26182000 0! #26182500 1! #26182600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26183000 0! #26183500 1! #26183600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26184000 0! #26184500 1! #26184600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26185000 0! #26185500 1! #26185600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26186000 0! #26186500 1! #26186600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26187000 0! #26187500 1! #26187600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26188000 0! #26188500 1! #26188600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26189000 0! #26189500 1! #26189600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26190000 0! #26190500 1! #26190600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26191000 0! #26191500 1! #26191600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26192000 0! #26192500 1! #26192600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26193000 0! #26193500 1! #26193600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26194000 0! #26194500 1! #26194600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26195000 0! #26195500 1! #26195600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26196000 0! #26196500 1! #26196600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26197000 0! #26197500 1! #26197600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26198000 0! #26198500 1! #26198600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26199000 0! #26199500 1! #26199600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26200000 0! #26200500 1! #26200600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26201000 0! #26201500 1! #26201600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26202000 0! #26202500 1! #26202600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26203000 0! #26203500 1! #26203600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26204000 0! #26204500 1! #26204600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26205000 0! #26205500 1! #26205600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26206000 0! #26206500 1! #26206600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26207000 0! #26207500 1! #26207600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26208000 0! #26208500 1! #26208600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26209000 0! #26209500 1! #26209600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26210000 0! #26210500 1! #26210600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26211000 0! #26211500 1! #26211600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26212000 0! #26212500 1! #26212600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26213000 0! #26213500 1! #26213600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26214000 0! #26214500 1! #26214600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26215000 0! #26215500 1! #26215600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26216000 0! #26216500 1! #26216600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26217000 0! #26217500 1! #26217600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26218000 0! #26218500 1! #26218600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26219000 0! #26219500 1! #26219600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26220000 0! #26220500 1! #26220600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26221000 0! #26221500 1! #26221600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26222000 0! #26222500 1! #26222600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26223000 0! #26223500 1! #26223600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26224000 0! #26224500 1! #26224600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26225000 0! #26225500 1! #26225600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26226000 0! #26226500 1! #26226600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26227000 0! #26227500 1! #26227600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26228000 0! #26228500 1! #26228600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26229000 0! #26229500 1! #26229600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26230000 0! #26230500 1! #26230600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26231000 0! #26231500 1! #26231600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26232000 0! #26232500 1! #26232600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26233000 0! #26233500 1! #26233600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26234000 0! #26234500 1! #26234600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26235000 0! #26235500 1! #26235600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26236000 0! #26236500 1! #26236600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26237000 0! #26237500 1! #26237600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26238000 0! #26238500 1! #26238600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26239000 0! #26239500 1! #26239600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26240000 0! #26240500 1! #26240600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26241000 0! #26241500 1! #26241600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26242000 0! #26242500 1! #26242600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #26242700 b1 g b11010000 c #26243000 0! #26243500 1! #26243600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26244000 0! #26244500 1! #26244600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26245000 0! #26245500 1! #26245600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26246000 0! #26246500 1! #26246600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26247000 0! #26247500 1! #26247600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26248000 0! #26248500 1! #26248600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26249000 0! #26249500 1! #26249600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26250000 0! #26250500 1! #26250600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26251000 0! #26251500 1! #26251600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26252000 0! #26252500 1! #26252600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26253000 0! #26253500 1! #26253600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26254000 0! #26254500 1! #26254600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26255000 0! #26255500 1! #26255600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26256000 0! #26256500 1! #26256600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26257000 0! #26257500 1! #26257600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26258000 0! #26258500 1! #26258600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26259000 0! #26259500 1! #26259600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26260000 0! #26260500 1! #26260600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26261000 0! #26261500 1! #26261600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26262000 0! #26262500 1! #26262600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26263000 0! #26263500 1! #26263600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26264000 0! #26264500 1! #26264600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26265000 0! #26265500 1! #26265600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26266000 0! #26266500 1! #26266600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26267000 0! #26267500 1! #26267600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26268000 0! #26268500 1! #26268600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26269000 0! #26269500 1! #26269600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26270000 0! #26270500 1! #26270600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26271000 0! #26271500 1! #26271600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26272000 0! #26272500 1! #26272600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26273000 0! #26273500 1! #26273600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26274000 0! #26274500 1! #26274600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26275000 0! #26275500 1! #26275600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26276000 0! #26276500 1! #26276600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26277000 0! #26277500 1! #26277600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26278000 0! #26278500 1! #26278600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26279000 0! #26279500 1! #26279600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26280000 0! #26280500 1! #26280600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26281000 0! #26281500 1! #26281600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26282000 0! #26282500 1! #26282600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26283000 0! #26283500 1! #26283600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26284000 0! #26284500 1! #26284600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26285000 0! #26285500 1! #26285600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26286000 0! #26286500 1! #26286600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26287000 0! #26287500 1! #26287600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26288000 0! #26288500 1! #26288600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26289000 0! #26289500 1! #26289600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26290000 0! #26290500 1! #26290600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26291000 0! #26291500 1! #26291600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26292000 0! #26292500 1! #26292600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26293000 0! #26293500 1! #26293600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26294000 0! #26294500 1! #26294600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26295000 0! #26295500 1! #26295600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26296000 0! #26296500 1! #26296600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26297000 0! #26297500 1! #26297600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26298000 0! #26298500 1! #26298600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26299000 0! #26299500 1! #26299600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26300000 0! #26300500 1! #26300600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26301000 0! #26301500 1! #26301600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26302000 0! #26302500 1! #26302600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26303000 0! #26303500 1! #26303600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26304000 0! #26304500 1! #26304600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26305000 0! #26305500 1! #26305600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26306000 0! #26306500 1! #26306600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26307000 0! #26307500 1! #26307600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26308000 0! #26308500 1! #26308600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26309000 0! #26309500 1! #26309600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26310000 0! #26310500 1! #26310600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26311000 0! #26311500 1! #26311600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26312000 0! #26312500 1! #26312600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26313000 0! #26313500 1! #26313600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26314000 0! #26314500 1! #26314600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26315000 0! #26315500 1! #26315600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26316000 0! #26316500 1! #26316600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26317000 0! #26317500 1! #26317600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26318000 0! #26318500 1! #26318600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26319000 0! #26319500 1! #26319600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26320000 0! #26320500 1! #26320600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26321000 0! #26321500 1! #26321600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26322000 0! #26322500 1! #26322600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26323000 0! #26323500 1! #26323600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26324000 0! #26324500 1! #26324600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26325000 0! #26325500 1! #26325600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26326000 0! #26326500 1! #26326600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26327000 0! #26327500 1! #26327600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26328000 0! #26328500 1! #26328600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26329000 0! #26329500 1! #26329600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26330000 0! #26330500 1! #26330600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26331000 0! #26331500 1! #26331600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26332000 0! #26332500 1! #26332600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26333000 0! #26333500 1! #26333600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26334000 0! #26334500 1! #26334600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26335000 0! #26335500 1! #26335600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26336000 0! #26336500 1! #26336600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26337000 0! #26337500 1! #26337600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26338000 0! #26338500 1! #26338600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26339000 0! #26339500 1! #26339600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26340000 0! #26340500 1! #26340600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26341000 0! #26341500 1! #26341600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26342000 0! #26342500 1! #26342600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26343000 0! #26343500 1! #26343600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26344000 0! #26344500 1! #26344600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #26345000 0! #26345500 1! #26345600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26346000 0! #26346500 1! #26346600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26347000 0! #26347500 1! #26347600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26348000 0! #26348500 1! #26348600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26349000 0! #26349500 1! #26349600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26350000 0! #26350500 1! #26350600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26351000 0! #26351500 1! #26351600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26352000 0! #26352500 1! #26352600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26353000 0! #26353500 1! #26353600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26354000 0! #26354500 1! #26354600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26355000 0! #26355500 1! #26355600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26356000 0! #26356500 1! #26356600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26357000 0! #26357500 1! #26357600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26358000 0! #26358500 1! #26358600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26359000 0! #26359500 1! #26359600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26360000 0! #26360500 1! #26360600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26361000 0! #26361500 1! #26361600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26362000 0! #26362500 1! #26362600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26363000 0! #26363500 1! #26363600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26364000 0! #26364500 1! #26364600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26365000 0! #26365500 1! #26365600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26366000 0! #26366500 1! #26366600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26367000 0! #26367500 1! #26367600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26368000 0! #26368500 1! #26368600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26369000 0! #26369500 1! #26369600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26370000 0! #26370500 1! #26370600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26371000 0! #26371500 1! #26371600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26372000 0! #26372500 1! #26372600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26373000 0! #26373500 1! #26373600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26374000 0! #26374500 1! #26374600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26375000 0! #26375500 1! #26375600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26376000 0! #26376500 1! #26376600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26377000 0! #26377500 1! #26377600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26378000 0! #26378500 1! #26378600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26379000 0! #26379500 1! #26379600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26380000 0! #26380500 1! #26380600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26381000 0! #26381500 1! #26381600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26382000 0! #26382500 1! #26382600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26383000 0! #26383500 1! #26383600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26384000 0! #26384500 1! #26384600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26385000 0! #26385500 1! #26385600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26386000 0! #26386500 1! #26386600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26387000 0! #26387500 1! #26387600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26388000 0! #26388500 1! #26388600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26389000 0! #26389500 1! #26389600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26390000 0! #26390500 1! #26390600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26391000 0! #26391500 1! #26391600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26392000 0! #26392500 1! #26392600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26393000 0! #26393500 1! #26393600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26394000 0! #26394500 1! #26394600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26395000 0! #26395500 1! #26395600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26396000 0! #26396500 1! #26396600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26397000 0! #26397500 1! #26397600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26398000 0! #26398500 1! #26398600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26399000 0! #26399500 1! #26399600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26400000 0! #26400500 1! #26400600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26401000 0! #26401500 1! #26401600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26402000 0! #26402500 1! #26402600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26403000 0! #26403500 1! #26403600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26404000 0! #26404500 1! #26404600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26405000 0! #26405500 1! #26405600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26406000 0! #26406500 1! #26406600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26407000 0! #26407500 1! #26407600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26408000 0! #26408500 1! #26408600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26409000 0! #26409500 1! #26409600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26410000 0! #26410500 1! #26410600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26411000 0! #26411500 1! #26411600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26412000 0! #26412500 1! #26412600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26413000 0! #26413500 1! #26413600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26414000 0! #26414500 1! #26414600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26415000 0! #26415500 1! #26415600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26416000 0! #26416500 1! #26416600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26417000 0! #26417500 1! #26417600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26418000 0! #26418500 1! #26418600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26419000 0! #26419500 1! #26419600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26420000 0! #26420500 1! #26420600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26421000 0! #26421500 1! #26421600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26422000 0! #26422500 1! #26422600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26423000 0! #26423500 1! #26423600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26424000 0! #26424500 1! #26424600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26425000 0! #26425500 1! #26425600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26426000 0! #26426500 1! #26426600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26427000 0! #26427500 1! #26427600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26428000 0! #26428500 1! #26428600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26429000 0! #26429500 1! #26429600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26430000 0! #26430500 1! #26430600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26431000 0! #26431500 1! #26431600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26432000 0! #26432500 1! #26432600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26433000 0! #26433500 1! #26433600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26434000 0! #26434500 1! #26434600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26435000 0! #26435500 1! #26435600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26436000 0! #26436500 1! #26436600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26437000 0! #26437500 1! #26437600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26438000 0! #26438500 1! #26438600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26439000 0! #26439500 1! #26439600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26440000 0! #26440500 1! #26440600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26441000 0! #26441500 1! #26441600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26442000 0! #26442500 1! #26442600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26443000 0! #26443500 1! #26443600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26444000 0! #26444500 1! #26444600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26445000 0! #26445500 1! #26445600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26446000 0! #26446500 1! #26446600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1Q 1O #26447000 0! #26447500 1! #26447600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26448000 0! #26448500 1! #26448600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26449000 0! #26449500 1! #26449600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26450000 0! #26450500 1! #26450600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26451000 0! #26451500 1! #26451600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26452000 0! #26452500 1! #26452600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26453000 0! #26453500 1! #26453600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26454000 0! #26454500 1! #26454600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26455000 0! #26455500 1! #26455600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26456000 0! #26456500 1! #26456600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26457000 0! #26457500 1! #26457600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26458000 0! #26458500 1! #26458600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26459000 0! #26459500 1! #26459600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26460000 0! #26460500 1! #26460600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26461000 0! #26461500 1! #26461600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26462000 0! #26462500 1! #26462600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26463000 0! #26463500 1! #26463600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26464000 0! #26464500 1! #26464600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26465000 0! #26465500 1! #26465600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26466000 0! #26466500 1! #26466600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26467000 0! #26467500 1! #26467600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26468000 0! #26468500 1! #26468600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26469000 0! #26469500 1! #26469600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26470000 0! #26470500 1! #26470600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26471000 0! #26471500 1! #26471600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26472000 0! #26472500 1! #26472600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26473000 0! #26473500 1! #26473600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26474000 0! #26474500 1! #26474600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26475000 0! #26475500 1! #26475600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26476000 0! #26476500 1! #26476600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26477000 0! #26477500 1! #26477600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26478000 0! #26478500 1! #26478600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26479000 0! #26479500 1! #26479600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26480000 0! #26480500 1! #26480600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26481000 0! #26481500 1! #26481600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26482000 0! #26482500 1! #26482600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26483000 0! #26483500 1! #26483600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26484000 0! #26484500 1! #26484600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26485000 0! #26485500 1! #26485600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26486000 0! #26486500 1! #26486600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26487000 0! #26487500 1! #26487600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26488000 0! #26488500 1! #26488600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26489000 0! #26489500 1! #26489600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26490000 0! #26490500 1! #26490600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26491000 0! #26491500 1! #26491600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26492000 0! #26492500 1! #26492600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26493000 0! #26493500 1! #26493600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26494000 0! #26494500 1! #26494600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26495000 0! #26495500 1! #26495600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26496000 0! #26496500 1! #26496600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26497000 0! #26497500 1! #26497600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #26497700 b0 g b10100001 c 1e 1h #26498000 0! #26498500 1! #26498600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26499000 0! #26499500 1! #26499600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26500000 0! #26500500 1! #26500600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26501000 0! #26501500 1! #26501600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26502000 0! #26502500 1! #26502600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26503000 0! #26503500 1! #26503600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26504000 0! #26504500 1! #26504600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26505000 0! #26505500 1! #26505600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26506000 0! #26506500 1! #26506600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26507000 0! #26507500 1! #26507600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26508000 0! #26508500 1! #26508600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26509000 0! #26509500 1! #26509600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26510000 0! #26510500 1! #26510600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26511000 0! #26511500 1! #26511600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26512000 0! #26512500 1! #26512600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26513000 0! #26513500 1! #26513600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26514000 0! #26514500 1! #26514600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26515000 0! #26515500 1! #26515600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26516000 0! #26516500 1! #26516600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26517000 0! #26517500 1! #26517600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26518000 0! #26518500 1! #26518600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26519000 0! #26519500 1! #26519600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26520000 0! #26520500 1! #26520600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26521000 0! #26521500 1! #26521600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26522000 0! #26522500 1! #26522600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26523000 0! #26523500 1! #26523600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26524000 0! #26524500 1! #26524600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26525000 0! #26525500 1! #26525600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26526000 0! #26526500 1! #26526600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26527000 0! #26527500 1! #26527600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26528000 0! #26528500 1! #26528600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26529000 0! #26529500 1! #26529600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26530000 0! #26530500 1! #26530600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26531000 0! #26531500 1! #26531600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26532000 0! #26532500 1! #26532600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26533000 0! #26533500 1! #26533600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26534000 0! #26534500 1! #26534600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26535000 0! #26535500 1! #26535600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26536000 0! #26536500 1! #26536600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26537000 0! #26537500 1! #26537600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26538000 0! #26538500 1! #26538600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26539000 0! #26539500 1! #26539600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26540000 0! #26540500 1! #26540600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26541000 0! #26541500 1! #26541600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26542000 0! #26542500 1! #26542600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26543000 0! #26543500 1! #26543600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26544000 0! #26544500 1! #26544600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26545000 0! #26545500 1! #26545600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26546000 0! #26546500 1! #26546600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26547000 0! #26547500 1! #26547600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26548000 0! #26548500 1! #26548600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26549000 0! #26549500 1! #26549600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26550000 0! #26550500 1! #26550600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26551000 0! #26551500 1! #26551600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26552000 0! #26552500 1! #26552600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26553000 0! #26553500 1! #26553600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26554000 0! #26554500 1! #26554600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26555000 0! #26555500 1! #26555600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26556000 0! #26556500 1! #26556600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26557000 0! #26557500 1! #26557600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26558000 0! #26558500 1! #26558600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26559000 0! #26559500 1! #26559600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26560000 0! #26560500 1! #26560600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26561000 0! #26561500 1! #26561600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26562000 0! #26562500 1! #26562600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26563000 0! #26563500 1! #26563600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26564000 0! #26564500 1! #26564600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26565000 0! #26565500 1! #26565600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26566000 0! #26566500 1! #26566600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26567000 0! #26567500 1! #26567600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26568000 0! #26568500 1! #26568600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26569000 0! #26569500 1! #26569600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26570000 0! #26570500 1! #26570600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26571000 0! #26571500 1! #26571600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26572000 0! #26572500 1! #26572600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26573000 0! #26573500 1! #26573600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26574000 0! #26574500 1! #26574600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26575000 0! #26575500 1! #26575600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26576000 0! #26576500 1! #26576600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26577000 0! #26577500 1! #26577600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26578000 0! #26578500 1! #26578600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26579000 0! #26579500 1! #26579600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26580000 0! #26580500 1! #26580600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26581000 0! #26581500 1! #26581600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26582000 0! #26582500 1! #26582600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26583000 0! #26583500 1! #26583600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26584000 0! #26584500 1! #26584600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26585000 0! #26585500 1! #26585600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26586000 0! #26586500 1! #26586600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26587000 0! #26587500 1! #26587600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26588000 0! #26588500 1! #26588600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26589000 0! #26589500 1! #26589600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26590000 0! #26590500 1! #26590600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26591000 0! #26591500 1! #26591600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26592000 0! #26592500 1! #26592600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26593000 0! #26593500 1! #26593600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26594000 0! #26594500 1! #26594600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26595000 0! #26595500 1! #26595600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26596000 0! #26596500 1! #26596600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26597000 0! #26597500 1! #26597600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26598000 0! #26598500 1! #26598600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26599000 0! #26599500 1! #26599600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #26599700 b1 q 1d 0j 0O #26599900 b10100101 ^ #26600000 0! #26600500 1! #26600600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26601000 0! #26601500 1! #26601600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26602000 0! #26602500 1! #26602600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26603000 0! #26603500 1! #26603600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26604000 0! #26604500 1! #26604600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26605000 0! #26605500 1! #26605600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26606000 0! #26606500 1! #26606600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26607000 0! #26607500 1! #26607600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26608000 0! #26608500 1! #26608600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26609000 0! #26609500 1! #26609600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26610000 0! #26610500 1! #26610600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26611000 0! #26611500 1! #26611600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26612000 0! #26612500 1! #26612600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26613000 0! #26613500 1! #26613600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26614000 0! #26614500 1! #26614600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26615000 0! #26615500 1! #26615600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26616000 0! #26616500 1! #26616600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26617000 0! #26617500 1! #26617600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26618000 0! #26618500 1! #26618600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26619000 0! #26619500 1! #26619600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26620000 0! #26620500 1! #26620600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26621000 0! #26621500 1! #26621600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26622000 0! #26622500 1! #26622600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26623000 0! #26623500 1! #26623600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26624000 0! #26624500 1! #26624600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26625000 0! #26625500 1! #26625600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26626000 0! #26626500 1! #26626600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26627000 0! #26627500 1! #26627600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26628000 0! #26628500 1! #26628600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26629000 0! #26629500 1! #26629600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26630000 0! #26630500 1! #26630600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26631000 0! #26631500 1! #26631600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26632000 0! #26632500 1! #26632600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26633000 0! #26633500 1! #26633600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26634000 0! #26634500 1! #26634600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26635000 0! #26635500 1! #26635600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26636000 0! #26636500 1! #26636600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26637000 0! #26637500 1! #26637600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26638000 0! #26638500 1! #26638600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26639000 0! #26639500 1! #26639600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26640000 0! #26640500 1! #26640600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26641000 0! #26641500 1! #26641600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26642000 0! #26642500 1! #26642600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26643000 0! #26643500 1! #26643600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26644000 0! #26644500 1! #26644600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26645000 0! #26645500 1! #26645600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26646000 0! #26646500 1! #26646600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26647000 0! #26647500 1! #26647600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26648000 0! #26648500 1! #26648600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26649000 0! #26649500 1! #26649600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26650000 0! #26650500 1! #26650600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26651000 0! #26651500 1! #26651600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26652000 0! #26652500 1! #26652600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26653000 0! #26653500 1! #26653600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26654000 0! #26654500 1! #26654600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26655000 0! #26655500 1! #26655600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26656000 0! #26656500 1! #26656600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26657000 0! #26657500 1! #26657600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26658000 0! #26658500 1! #26658600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26659000 0! #26659500 1! #26659600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26660000 0! #26660500 1! #26660600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26661000 0! #26661500 1! #26661600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26662000 0! #26662500 1! #26662600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26663000 0! #26663500 1! #26663600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26664000 0! #26664500 1! #26664600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26665000 0! #26665500 1! #26665600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26666000 0! #26666500 1! #26666600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26667000 0! #26667500 1! #26667600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26668000 0! #26668500 1! #26668600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26669000 0! #26669500 1! #26669600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26670000 0! #26670500 1! #26670600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26671000 0! #26671500 1! #26671600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26672000 0! #26672500 1! #26672600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26673000 0! #26673500 1! #26673600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26674000 0! #26674500 1! #26674600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26675000 0! #26675500 1! #26675600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26676000 0! #26676500 1! #26676600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26677000 0! #26677500 1! #26677600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26678000 0! #26678500 1! #26678600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26679000 0! #26679500 1! #26679600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26680000 0! #26680500 1! #26680600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26681000 0! #26681500 1! #26681600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26682000 0! #26682500 1! #26682600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26683000 0! #26683500 1! #26683600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26684000 0! #26684500 1! #26684600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26685000 0! #26685500 1! #26685600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26686000 0! #26686500 1! #26686600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26687000 0! #26687500 1! #26687600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26688000 0! #26688500 1! #26688600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26689000 0! #26689500 1! #26689600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26690000 0! #26690500 1! #26690600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26691000 0! #26691500 1! #26691600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26692000 0! #26692500 1! #26692600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26693000 0! #26693500 1! #26693600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26694000 0! #26694500 1! #26694600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26695000 0! #26695500 1! #26695600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26696000 0! #26696500 1! #26696600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26697000 0! #26697500 1! #26697600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26698000 0! #26698500 1! #26698600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26699000 0! #26699500 1! #26699600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26700000 0! #26700500 1! #26700600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26701000 0! #26701500 1! #26701600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26702000 0! #26702500 1! #26702600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26703000 0! #26703500 1! #26703600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26704000 0! #26704500 1! #26704600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26705000 0! #26705500 1! #26705600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26706000 0! #26706500 1! #26706600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26707000 0! #26707500 1! #26707600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26708000 0! #26708500 1! #26708600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26709000 0! #26709500 1! #26709600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26710000 0! #26710500 1! #26710600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26711000 0! #26711500 1! #26711600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26712000 0! #26712500 1! #26712600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26713000 0! #26713500 1! #26713600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26714000 0! #26714500 1! #26714600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26715000 0! #26715500 1! #26715600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26716000 0! #26716500 1! #26716600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26717000 0! #26717500 1! #26717600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26718000 0! #26718500 1! #26718600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26719000 0! #26719500 1! #26719600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26720000 0! #26720500 1! #26720600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26721000 0! #26721500 1! #26721600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26722000 0! #26722500 1! #26722600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26723000 0! #26723500 1! #26723600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26724000 0! #26724500 1! #26724600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26725000 0! #26725500 1! #26725600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26726000 0! #26726500 1! #26726600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26727000 0! #26727500 1! #26727600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26728000 0! #26728500 1! #26728600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26729000 0! #26729500 1! #26729600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26730000 0! #26730500 1! #26730600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26731000 0! #26731500 1! #26731600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26732000 0! #26732500 1! #26732600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26733000 0! #26733500 1! #26733600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26734000 0! #26734500 1! #26734600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26735000 0! #26735500 1! #26735600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26736000 0! #26736500 1! #26736600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26737000 0! #26737500 1! #26737600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26738000 0! #26738500 1! #26738600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26739000 0! #26739500 1! #26739600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26740000 0! #26740500 1! #26740600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26741000 0! #26741500 1! #26741600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26742000 0! #26742500 1! #26742600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26743000 0! #26743500 1! #26743600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26744000 0! #26744500 1! #26744600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26745000 0! #26745500 1! #26745600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26746000 0! #26746500 1! #26746600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26747000 0! #26747500 1! #26747600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26748000 0! #26748500 1! #26748600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26749000 0! #26749500 1! #26749600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26750000 0! #26750500 1! #26750600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26751000 0! #26751500 1! #26751600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26752000 0! #26752500 1! #26752600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #26752700 b111 g b1000010 c 0e 0h #26753000 0! #26753500 1! #26753600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26754000 0! #26754500 1! #26754600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26755000 0! #26755500 1! #26755600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26756000 0! #26756500 1! #26756600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26757000 0! #26757500 1! #26757600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26758000 0! #26758500 1! #26758600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26759000 0! #26759500 1! #26759600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26760000 0! #26760500 1! #26760600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26761000 0! #26761500 1! #26761600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26762000 0! #26762500 1! #26762600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26763000 0! #26763500 1! #26763600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26764000 0! #26764500 1! #26764600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26765000 0! #26765500 1! #26765600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26766000 0! #26766500 1! #26766600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26767000 0! #26767500 1! #26767600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26768000 0! #26768500 1! #26768600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26769000 0! #26769500 1! #26769600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26770000 0! #26770500 1! #26770600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26771000 0! #26771500 1! #26771600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26772000 0! #26772500 1! #26772600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26773000 0! #26773500 1! #26773600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26774000 0! #26774500 1! #26774600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26775000 0! #26775500 1! #26775600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26776000 0! #26776500 1! #26776600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26777000 0! #26777500 1! #26777600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26778000 0! #26778500 1! #26778600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26779000 0! #26779500 1! #26779600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26780000 0! #26780500 1! #26780600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26781000 0! #26781500 1! #26781600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26782000 0! #26782500 1! #26782600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26783000 0! #26783500 1! #26783600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26784000 0! #26784500 1! #26784600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26785000 0! #26785500 1! #26785600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26786000 0! #26786500 1! #26786600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26787000 0! #26787500 1! #26787600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26788000 0! #26788500 1! #26788600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26789000 0! #26789500 1! #26789600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26790000 0! #26790500 1! #26790600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26791000 0! #26791500 1! #26791600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26792000 0! #26792500 1! #26792600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26793000 0! #26793500 1! #26793600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26794000 0! #26794500 1! #26794600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26795000 0! #26795500 1! #26795600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26796000 0! #26796500 1! #26796600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26797000 0! #26797500 1! #26797600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26798000 0! #26798500 1! #26798600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26799000 0! #26799500 1! #26799600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26800000 0! #26800500 1! #26800600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26801000 0! #26801500 1! #26801600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26802000 0! #26802500 1! #26802600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26803000 0! #26803500 1! #26803600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26804000 0! #26804500 1! #26804600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26805000 0! #26805500 1! #26805600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26806000 0! #26806500 1! #26806600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26807000 0! #26807500 1! #26807600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26808000 0! #26808500 1! #26808600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26809000 0! #26809500 1! #26809600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26810000 0! #26810500 1! #26810600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26811000 0! #26811500 1! #26811600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26812000 0! #26812500 1! #26812600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26813000 0! #26813500 1! #26813600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26814000 0! #26814500 1! #26814600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26815000 0! #26815500 1! #26815600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26816000 0! #26816500 1! #26816600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26817000 0! #26817500 1! #26817600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26818000 0! #26818500 1! #26818600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26819000 0! #26819500 1! #26819600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26820000 0! #26820500 1! #26820600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26821000 0! #26821500 1! #26821600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26822000 0! #26822500 1! #26822600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26823000 0! #26823500 1! #26823600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26824000 0! #26824500 1! #26824600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26825000 0! #26825500 1! #26825600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26826000 0! #26826500 1! #26826600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26827000 0! #26827500 1! #26827600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26828000 0! #26828500 1! #26828600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26829000 0! #26829500 1! #26829600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26830000 0! #26830500 1! #26830600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26831000 0! #26831500 1! #26831600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26832000 0! #26832500 1! #26832600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26833000 0! #26833500 1! #26833600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26834000 0! #26834500 1! #26834600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26835000 0! #26835500 1! #26835600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26836000 0! #26836500 1! #26836600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26837000 0! #26837500 1! #26837600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26838000 0! #26838500 1! #26838600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26839000 0! #26839500 1! #26839600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26840000 0! #26840500 1! #26840600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26841000 0! #26841500 1! #26841600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26842000 0! #26842500 1! #26842600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26843000 0! #26843500 1! #26843600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26844000 0! #26844500 1! #26844600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26845000 0! #26845500 1! #26845600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26846000 0! #26846500 1! #26846600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26847000 0! #26847500 1! #26847600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26848000 0! #26848500 1! #26848600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26849000 0! #26849500 1! #26849600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26850000 0! #26850500 1! #26850600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26851000 0! #26851500 1! #26851600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26852000 0! #26852500 1! #26852600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26853000 0! #26853500 1! #26853600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26854000 0! #26854500 1! #26854600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #26854700 1j b100 q 1i 1O #26855000 0! #26855500 1! #26855600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26856000 0! #26856500 1! #26856600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26857000 0! #26857500 1! #26857600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H b1000001 C #26858000 0! #26858500 1! #26858600 b1000001 J xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26859000 0! #26859500 1! #26859600 1E 1F 1G b100000 D 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26860000 0! #26860500 1! #26860600 xE bx D x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26861000 0! #26861500 1! #26861600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H b1000011 C #26862000 0! #26862500 1! #26862600 b1000011 J xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26863000 0! #26863500 1! #26863600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26864000 0! #26864500 1! #26864600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26865000 0! #26865500 1! #26865600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26866000 0! #26866500 1! #26866600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26867000 0! #26867500 1! #26867600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26868000 0! #26868500 1! #26868600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26869000 0! #26869500 1! #26869600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26870000 0! #26870500 1! #26870600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26871000 0! #26871500 1! #26871600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26872000 0! #26872500 1! #26872600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26873000 0! #26873500 1! #26873600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26874000 0! #26874500 1! #26874600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26875000 0! #26875500 1! #26875600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26876000 0! #26876500 1! #26876600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26877000 0! #26877500 1! #26877600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26878000 0! #26878500 1! #26878600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26879000 0! #26879500 1! #26879600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26880000 0! #26880500 1! #26880600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26881000 0! #26881500 1! #26881600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26882000 0! #26882500 1! #26882600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26883000 0! #26883500 1! #26883600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26884000 0! #26884500 1! #26884600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26885000 0! #26885500 1! #26885600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26886000 0! #26886500 1! #26886600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26887000 0! #26887500 1! #26887600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26888000 0! #26888500 1! #26888600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26889000 0! #26889500 1! #26889600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26890000 0! #26890500 1! #26890600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26891000 0! #26891500 1! #26891600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26892000 0! #26892500 1! #26892600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26893000 0! #26893500 1! #26893600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26894000 0! #26894500 1! #26894600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26895000 0! #26895500 1! #26895600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26896000 0! #26896500 1! #26896600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26897000 0! #26897500 1! #26897600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26898000 0! #26898500 1! #26898600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26899000 0! #26899500 1! #26899600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26900000 0! #26900500 1! #26900600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26901000 0! #26901500 1! #26901600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26902000 0! #26902500 1! #26902600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26903000 0! #26903500 1! #26903600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26904000 0! #26904500 1! #26904600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26905000 0! #26905500 1! #26905600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26906000 0! #26906500 1! #26906600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26907000 0! #26907500 1! #26907600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26908000 0! #26908500 1! #26908600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26909000 0! #26909500 1! #26909600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26910000 0! #26910500 1! #26910600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26911000 0! #26911500 1! #26911600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26912000 0! #26912500 1! #26912600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26913000 0! #26913500 1! #26913600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26914000 0! #26914500 1! #26914600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26915000 0! #26915500 1! #26915600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26916000 0! #26916500 1! #26916600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26917000 0! #26917500 1! #26917600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26918000 0! #26918500 1! #26918600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26919000 0! #26919500 1! #26919600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26920000 0! #26920500 1! #26920600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26921000 0! #26921500 1! #26921600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26922000 0! #26922500 1! #26922600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26923000 0! #26923500 1! #26923600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26924000 0! #26924500 1! #26924600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26925000 0! #26925500 1! #26925600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26926000 0! #26926500 1! #26926600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26927000 0! #26927500 1! #26927600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26928000 0! #26928500 1! #26928600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26929000 0! #26929500 1! #26929600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26930000 0! #26930500 1! #26930600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26931000 0! #26931500 1! #26931600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26932000 0! #26932500 1! #26932600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26933000 0! #26933500 1! #26933600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26934000 0! #26934500 1! #26934600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26935000 0! #26935500 1! #26935600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26936000 0! #26936500 1! #26936600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26937000 0! #26937500 1! #26937600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26938000 0! #26938500 1! #26938600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26939000 0! #26939500 1! #26939600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26940000 0! #26940500 1! #26940600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26941000 0! #26941500 1! #26941600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26942000 0! #26942500 1! #26942600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26943000 0! #26943500 1! #26943600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26944000 0! #26944500 1! #26944600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26945000 0! #26945500 1! #26945600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26946000 0! #26946500 1! #26946600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26947000 0! #26947500 1! #26947600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26948000 0! #26948500 1! #26948600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26949000 0! #26949500 1! #26949600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26950000 0! #26950500 1! #26950600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26951000 0! #26951500 1! #26951600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26952000 0! #26952500 1! #26952600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26953000 0! #26953500 1! #26953600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26954000 0! #26954500 1! #26954600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26955000 0! #26955500 1! #26955600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26956000 0! #26956500 1! #26956600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26957000 0! #26957500 1! #26957600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26958000 0! #26958500 1! #26958600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26959000 0! #26959500 1! #26959600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26960000 0! #26960500 1! #26960600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26961000 0! #26961500 1! #26961600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26962000 0! #26962500 1! #26962600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26963000 0! #26963500 1! #26963600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26964000 0! #26964500 1! #26964600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26965000 0! #26965500 1! #26965600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26966000 0! #26966500 1! #26966600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26967000 0! #26967500 1! #26967600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26968000 0! #26968500 1! #26968600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26969000 0! #26969500 1! #26969600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26970000 0! #26970500 1! #26970600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26971000 0! #26971500 1! #26971600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26972000 0! #26972500 1! #26972600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26973000 0! #26973500 1! #26973600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26974000 0! #26974500 1! #26974600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26975000 0! #26975500 1! #26975600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26976000 0! #26976500 1! #26976600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26977000 0! #26977500 1! #26977600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26978000 0! #26978500 1! #26978600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26979000 0! #26979500 1! #26979600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26980000 0! #26980500 1! #26980600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26981000 0! #26981500 1! #26981600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26982000 0! #26982500 1! #26982600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26983000 0! #26983500 1! #26983600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26984000 0! #26984500 1! #26984600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26985000 0! #26985500 1! #26985600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26986000 0! #26986500 1! #26986600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26987000 0! #26987500 1! #26987600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26988000 0! #26988500 1! #26988600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26989000 0! #26989500 1! #26989600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26990000 0! #26990500 1! #26990600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26991000 0! #26991500 1! #26991600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26992000 0! #26992500 1! #26992600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26993000 0! #26993500 1! #26993600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26994000 0! #26994500 1! #26994600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26995000 0! #26995500 1! #26995600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26996000 0! #26996500 1! #26996600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26997000 0! #26997500 1! #26997600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #26998000 0! #26998500 1! #26998600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #26999000 0! #26999500 1! #26999600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27000000 0! #27000500 1! #27000600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27001000 0! #27001500 1! #27001600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27002000 0! #27002500 1! #27002600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27003000 0! #27003500 1! #27003600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27004000 0! #27004500 1! #27004600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27005000 0! #27005500 1! #27005600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27006000 0! #27006500 1! #27006600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27007000 0! #27007500 1! #27007600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #27007700 b1001011 ^ b10000101 c #27008000 0! #27008500 1! #27008600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27009000 0! #27009500 1! #27009600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27010000 0! #27010500 1! #27010600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27011000 0! #27011500 1! #27011600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27012000 0! #27012500 1! #27012600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27013000 0! #27013500 1! #27013600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27014000 0! #27014500 1! #27014600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27015000 0! #27015500 1! #27015600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27016000 0! #27016500 1! #27016600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27017000 0! #27017500 1! #27017600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27018000 0! #27018500 1! #27018600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27019000 0! #27019500 1! #27019600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27020000 0! #27020500 1! #27020600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27021000 0! #27021500 1! #27021600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27022000 0! #27022500 1! #27022600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27023000 0! #27023500 1! #27023600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27024000 0! #27024500 1! #27024600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27025000 0! #27025500 1! #27025600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27026000 0! #27026500 1! #27026600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27027000 0! #27027500 1! #27027600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27028000 0! #27028500 1! #27028600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27029000 0! #27029500 1! #27029600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27030000 0! #27030500 1! #27030600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27031000 0! #27031500 1! #27031600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27032000 0! #27032500 1! #27032600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27033000 0! #27033500 1! #27033600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27034000 0! #27034500 1! #27034600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27035000 0! #27035500 1! #27035600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27036000 0! #27036500 1! #27036600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27037000 0! #27037500 1! #27037600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27038000 0! #27038500 1! #27038600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27039000 0! #27039500 1! #27039600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27040000 0! #27040500 1! #27040600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27041000 0! #27041500 1! #27041600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27042000 0! #27042500 1! #27042600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27043000 0! #27043500 1! #27043600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27044000 0! #27044500 1! #27044600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27045000 0! #27045500 1! #27045600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27046000 0! #27046500 1! #27046600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27047000 0! #27047500 1! #27047600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27048000 0! #27048500 1! #27048600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27049000 0! #27049500 1! #27049600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27050000 0! #27050500 1! #27050600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27051000 0! #27051500 1! #27051600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27052000 0! #27052500 1! #27052600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27053000 0! #27053500 1! #27053600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27054000 0! #27054500 1! #27054600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27055000 0! #27055500 1! #27055600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27056000 0! #27056500 1! #27056600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27057000 0! #27057500 1! #27057600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27058000 0! #27058500 1! #27058600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27059000 0! #27059500 1! #27059600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27060000 0! #27060500 1! #27060600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27061000 0! #27061500 1! #27061600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27062000 0! #27062500 1! #27062600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27063000 0! #27063500 1! #27063600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27064000 0! #27064500 1! #27064600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27065000 0! #27065500 1! #27065600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27066000 0! #27066500 1! #27066600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27067000 0! #27067500 1! #27067600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27068000 0! #27068500 1! #27068600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27069000 0! #27069500 1! #27069600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27070000 0! #27070500 1! #27070600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27071000 0! #27071500 1! #27071600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27072000 0! #27072500 1! #27072600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27073000 0! #27073500 1! #27073600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27074000 0! #27074500 1! #27074600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27075000 0! #27075500 1! #27075600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27076000 0! #27076500 1! #27076600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27077000 0! #27077500 1! #27077600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27078000 0! #27078500 1! #27078600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27079000 0! #27079500 1! #27079600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27080000 0! #27080500 1! #27080600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27081000 0! #27081500 1! #27081600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27082000 0! #27082500 1! #27082600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27083000 0! #27083500 1! #27083600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27084000 0! #27084500 1! #27084600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27085000 0! #27085500 1! #27085600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27086000 0! #27086500 1! #27086600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27087000 0! #27087500 1! #27087600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27088000 0! #27088500 1! #27088600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27089000 0! #27089500 1! #27089600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27090000 0! #27090500 1! #27090600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27091000 0! #27091500 1! #27091600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27092000 0! #27092500 1! #27092600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27093000 0! #27093500 1! #27093600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27094000 0! #27094500 1! #27094600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27095000 0! #27095500 1! #27095600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27096000 0! #27096500 1! #27096600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27097000 0! #27097500 1! #27097600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27098000 0! #27098500 1! #27098600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27099000 0! #27099500 1! #27099600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27100000 0! #27100500 1! #27100600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27101000 0! #27101500 1! #27101600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27102000 0! #27102500 1! #27102600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27103000 0! #27103500 1! #27103600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27104000 0! #27104500 1! #27104600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27105000 0! #27105500 1! #27105600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27106000 0! #27106500 1! #27106600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27107000 0! #27107500 1! #27107600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27108000 0! #27108500 1! #27108600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27109000 0! #27109500 1! #27109600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #27109700 0i 0j 0O #27110000 0! #27110500 1! #27110600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27111000 0! #27111500 1! #27111600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27112000 0! #27112500 1! #27112600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27113000 0! #27113500 1! #27113600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27114000 0! #27114500 1! #27114600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27115000 0! #27115500 1! #27115600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27116000 0! #27116500 1! #27116600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27117000 0! #27117500 1! #27117600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27118000 0! #27118500 1! #27118600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27119000 0! #27119500 1! #27119600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27120000 0! #27120500 1! #27120600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27121000 0! #27121500 1! #27121600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27122000 0! #27122500 1! #27122600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27123000 0! #27123500 1! #27123600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27124000 0! #27124500 1! #27124600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27125000 0! #27125500 1! #27125600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27126000 0! #27126500 1! #27126600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27127000 0! #27127500 1! #27127600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27128000 0! #27128500 1! #27128600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27129000 0! #27129500 1! #27129600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27130000 0! #27130500 1! #27130600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27131000 0! #27131500 1! #27131600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27132000 0! #27132500 1! #27132600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27133000 0! #27133500 1! #27133600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27134000 0! #27134500 1! #27134600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27135000 0! #27135500 1! #27135600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27136000 0! #27136500 1! #27136600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27137000 0! #27137500 1! #27137600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27138000 0! #27138500 1! #27138600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27139000 0! #27139500 1! #27139600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27140000 0! #27140500 1! #27140600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27141000 0! #27141500 1! #27141600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27142000 0! #27142500 1! #27142600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27143000 0! #27143500 1! #27143600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27144000 0! #27144500 1! #27144600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27145000 0! #27145500 1! #27145600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27146000 0! #27146500 1! #27146600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27147000 0! #27147500 1! #27147600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27148000 0! #27148500 1! #27148600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27149000 0! #27149500 1! #27149600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27150000 0! #27150500 1! #27150600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27151000 0! #27151500 1! #27151600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27152000 0! #27152500 1! #27152600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27153000 0! #27153500 1! #27153600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27154000 0! #27154500 1! #27154600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27155000 0! #27155500 1! #27155600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27156000 0! #27156500 1! #27156600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27157000 0! #27157500 1! #27157600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27158000 0! #27158500 1! #27158600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27159000 0! #27159500 1! #27159600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27160000 0! #27160500 1! #27160600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27161000 0! #27161500 1! #27161600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27162000 0! #27162500 1! #27162600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27163000 0! #27163500 1! #27163600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27164000 0! #27164500 1! #27164600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27165000 0! #27165500 1! #27165600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27166000 0! #27166500 1! #27166600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27167000 0! #27167500 1! #27167600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27168000 0! #27168500 1! #27168600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27169000 0! #27169500 1! #27169600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27170000 0! #27170500 1! #27170600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27171000 0! #27171500 1! #27171600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27172000 0! #27172500 1! #27172600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27173000 0! #27173500 1! #27173600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27174000 0! #27174500 1! #27174600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27175000 0! #27175500 1! #27175600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27176000 0! #27176500 1! #27176600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27177000 0! #27177500 1! #27177600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27178000 0! #27178500 1! #27178600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27179000 0! #27179500 1! #27179600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27180000 0! #27180500 1! #27180600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27181000 0! #27181500 1! #27181600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27182000 0! #27182500 1! #27182600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27183000 0! #27183500 1! #27183600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27184000 0! #27184500 1! #27184600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27185000 0! #27185500 1! #27185600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27186000 0! #27186500 1! #27186600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27187000 0! #27187500 1! #27187600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27188000 0! #27188500 1! #27188600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27189000 0! #27189500 1! #27189600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27190000 0! #27190500 1! #27190600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27191000 0! #27191500 1! #27191600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27192000 0! #27192500 1! #27192600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27193000 0! #27193500 1! #27193600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27194000 0! #27194500 1! #27194600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27195000 0! #27195500 1! #27195600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27196000 0! #27196500 1! #27196600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27197000 0! #27197500 1! #27197600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27198000 0! #27198500 1! #27198600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27199000 0! #27199500 1! #27199600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27200000 0! #27200500 1! #27200600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27201000 0! #27201500 1! #27201600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27202000 0! #27202500 1! #27202600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27203000 0! #27203500 1! #27203600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27204000 0! #27204500 1! #27204600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27205000 0! #27205500 1! #27205600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27206000 0! #27206500 1! #27206600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27207000 0! #27207500 1! #27207600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27208000 0! #27208500 1! #27208600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27209000 0! #27209500 1! #27209600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27210000 0! #27210500 1! #27210600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27211000 0! #27211500 1! #27211600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27212000 0! #27212500 1! #27212600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27213000 0! #27213500 1! #27213600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27214000 0! #27214500 1! #27214600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27215000 0! #27215500 1! #27215600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27216000 0! #27216500 1! #27216600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27217000 0! #27217500 1! #27217600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27218000 0! #27218500 1! #27218600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27219000 0! #27219500 1! #27219600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27220000 0! #27220500 1! #27220600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27221000 0! #27221500 1! #27221600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27222000 0! #27222500 1! #27222600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27223000 0! #27223500 1! #27223600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27224000 0! #27224500 1! #27224600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27225000 0! #27225500 1! #27225600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27226000 0! #27226500 1! #27226600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27227000 0! #27227500 1! #27227600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27228000 0! #27228500 1! #27228600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27229000 0! #27229500 1! #27229600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27230000 0! #27230500 1! #27230600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27231000 0! #27231500 1! #27231600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27232000 0! #27232500 1! #27232600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27233000 0! #27233500 1! #27233600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27234000 0! #27234500 1! #27234600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27235000 0! #27235500 1! #27235600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27236000 0! #27236500 1! #27236600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27237000 0! #27237500 1! #27237600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27238000 0! #27238500 1! #27238600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27239000 0! #27239500 1! #27239600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27240000 0! #27240500 1! #27240600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27241000 0! #27241500 1! #27241600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27242000 0! #27242500 1! #27242600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27243000 0! #27243500 1! #27243600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27244000 0! #27244500 1! #27244600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27245000 0! #27245500 1! #27245600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27246000 0! #27246500 1! #27246600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27247000 0! #27247500 1! #27247600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27248000 0! #27248500 1! #27248600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27249000 0! #27249500 1! #27249600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27250000 0! #27250500 1! #27250600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27251000 0! #27251500 1! #27251600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27252000 0! #27252500 1! #27252600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27253000 0! #27253500 1! #27253600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27254000 0! #27254500 1! #27254600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27255000 0! #27255500 1! #27255600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27256000 0! #27256500 1! #27256600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27257000 0! #27257500 1! #27257600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27258000 0! #27258500 1! #27258600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27259000 0! #27259500 1! #27259600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27260000 0! #27260500 1! #27260600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27261000 0! #27261500 1! #27261600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27262000 0! #27262500 1! #27262600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #27262700 b10010111 ^ b110 g b1010 c #27263000 0! #27263500 1! #27263600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27264000 0! #27264500 1! #27264600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27265000 0! #27265500 1! #27265600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27266000 0! #27266500 1! #27266600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27267000 0! #27267500 1! #27267600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27268000 0! #27268500 1! #27268600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27269000 0! #27269500 1! #27269600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27270000 0! #27270500 1! #27270600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27271000 0! #27271500 1! #27271600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27272000 0! #27272500 1! #27272600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27273000 0! #27273500 1! #27273600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27274000 0! #27274500 1! #27274600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27275000 0! #27275500 1! #27275600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27276000 0! #27276500 1! #27276600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27277000 0! #27277500 1! #27277600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27278000 0! #27278500 1! #27278600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27279000 0! #27279500 1! #27279600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27280000 0! #27280500 1! #27280600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27281000 0! #27281500 1! #27281600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27282000 0! #27282500 1! #27282600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27283000 0! #27283500 1! #27283600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27284000 0! #27284500 1! #27284600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27285000 0! #27285500 1! #27285600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27286000 0! #27286500 1! #27286600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27287000 0! #27287500 1! #27287600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27288000 0! #27288500 1! #27288600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27289000 0! #27289500 1! #27289600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27290000 0! #27290500 1! #27290600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27291000 0! #27291500 1! #27291600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27292000 0! #27292500 1! #27292600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27293000 0! #27293500 1! #27293600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27294000 0! #27294500 1! #27294600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27295000 0! #27295500 1! #27295600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27296000 0! #27296500 1! #27296600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27297000 0! #27297500 1! #27297600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27298000 0! #27298500 1! #27298600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27299000 0! #27299500 1! #27299600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27300000 0! #27300500 1! #27300600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27301000 0! #27301500 1! #27301600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27302000 0! #27302500 1! #27302600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27303000 0! #27303500 1! #27303600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27304000 0! #27304500 1! #27304600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27305000 0! #27305500 1! #27305600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27306000 0! #27306500 1! #27306600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27307000 0! #27307500 1! #27307600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27308000 0! #27308500 1! #27308600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27309000 0! #27309500 1! #27309600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27310000 0! #27310500 1! #27310600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27311000 0! #27311500 1! #27311600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27312000 0! #27312500 1! #27312600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27313000 0! #27313500 1! #27313600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27314000 0! #27314500 1! #27314600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27315000 0! #27315500 1! #27315600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27316000 0! #27316500 1! #27316600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27317000 0! #27317500 1! #27317600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27318000 0! #27318500 1! #27318600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27319000 0! #27319500 1! #27319600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27320000 0! #27320500 1! #27320600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27321000 0! #27321500 1! #27321600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27322000 0! #27322500 1! #27322600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27323000 0! #27323500 1! #27323600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27324000 0! #27324500 1! #27324600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27325000 0! #27325500 1! #27325600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27326000 0! #27326500 1! #27326600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27327000 0! #27327500 1! #27327600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27328000 0! #27328500 1! #27328600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27329000 0! #27329500 1! #27329600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27330000 0! #27330500 1! #27330600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27331000 0! #27331500 1! #27331600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27332000 0! #27332500 1! #27332600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27333000 0! #27333500 1! #27333600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27334000 0! #27334500 1! #27334600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27335000 0! #27335500 1! #27335600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27336000 0! #27336500 1! #27336600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27337000 0! #27337500 1! #27337600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27338000 0! #27338500 1! #27338600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27339000 0! #27339500 1! #27339600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27340000 0! #27340500 1! #27340600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27341000 0! #27341500 1! #27341600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27342000 0! #27342500 1! #27342600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27343000 0! #27343500 1! #27343600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27344000 0! #27344500 1! #27344600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27345000 0! #27345500 1! #27345600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27346000 0! #27346500 1! #27346600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27347000 0! #27347500 1! #27347600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27348000 0! #27348500 1! #27348600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27349000 0! #27349500 1! #27349600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27350000 0! #27350500 1! #27350600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27351000 0! #27351500 1! #27351600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27352000 0! #27352500 1! #27352600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27353000 0! #27353500 1! #27353600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27354000 0! #27354500 1! #27354600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27355000 0! #27355500 1! #27355600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27356000 0! #27356500 1! #27356600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27357000 0! #27357500 1! #27357600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27358000 0! #27358500 1! #27358600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27359000 0! #27359500 1! #27359600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27360000 0! #27360500 1! #27360600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27361000 0! #27361500 1! #27361600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27362000 0! #27362500 1! #27362600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27363000 0! #27363500 1! #27363600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27364000 0! #27364500 1! #27364600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #27364700 1j 1O #27365000 0! #27365500 1! #27365600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27366000 0! #27366500 1! #27366600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27367000 0! #27367500 1! #27367600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27368000 0! #27368500 1! #27368600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27369000 0! #27369500 1! #27369600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27370000 0! #27370500 1! #27370600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27371000 0! #27371500 1! #27371600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27372000 0! #27372500 1! #27372600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27373000 0! #27373500 1! #27373600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27374000 0! #27374500 1! #27374600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27375000 0! #27375500 1! #27375600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27376000 0! #27376500 1! #27376600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27377000 0! #27377500 1! #27377600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27378000 0! #27378500 1! #27378600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27379000 0! #27379500 1! #27379600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27380000 0! #27380500 1! #27380600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27381000 0! #27381500 1! #27381600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27382000 0! #27382500 1! #27382600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27383000 0! #27383500 1! #27383600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27384000 0! #27384500 1! #27384600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27385000 0! #27385500 1! #27385600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27386000 0! #27386500 1! #27386600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27387000 0! #27387500 1! #27387600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27388000 0! #27388500 1! #27388600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27389000 0! #27389500 1! #27389600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27390000 0! #27390500 1! #27390600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27391000 0! #27391500 1! #27391600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27392000 0! #27392500 1! #27392600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27393000 0! #27393500 1! #27393600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27394000 0! #27394500 1! #27394600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27395000 0! #27395500 1! #27395600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27396000 0! #27396500 1! #27396600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27397000 0! #27397500 1! #27397600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27398000 0! #27398500 1! #27398600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27399000 0! #27399500 1! #27399600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27400000 0! #27400500 1! #27400600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27401000 0! #27401500 1! #27401600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27402000 0! #27402500 1! #27402600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27403000 0! #27403500 1! #27403600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27404000 0! #27404500 1! #27404600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27405000 0! #27405500 1! #27405600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27406000 0! #27406500 1! #27406600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27407000 0! #27407500 1! #27407600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27408000 0! #27408500 1! #27408600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27409000 0! #27409500 1! #27409600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27410000 0! #27410500 1! #27410600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27411000 0! #27411500 1! #27411600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27412000 0! #27412500 1! #27412600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27413000 0! #27413500 1! #27413600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27414000 0! #27414500 1! #27414600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27415000 0! #27415500 1! #27415600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27416000 0! #27416500 1! #27416600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27417000 0! #27417500 1! #27417600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27418000 0! #27418500 1! #27418600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27419000 0! #27419500 1! #27419600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27420000 0! #27420500 1! #27420600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27421000 0! #27421500 1! #27421600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27422000 0! #27422500 1! #27422600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27423000 0! #27423500 1! #27423600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27424000 0! #27424500 1! #27424600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27425000 0! #27425500 1! #27425600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27426000 0! #27426500 1! #27426600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27427000 0! #27427500 1! #27427600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27428000 0! #27428500 1! #27428600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27429000 0! #27429500 1! #27429600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27430000 0! #27430500 1! #27430600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27431000 0! #27431500 1! #27431600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27432000 0! #27432500 1! #27432600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27433000 0! #27433500 1! #27433600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27434000 0! #27434500 1! #27434600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27435000 0! #27435500 1! #27435600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27436000 0! #27436500 1! #27436600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27437000 0! #27437500 1! #27437600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27438000 0! #27438500 1! #27438600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27439000 0! #27439500 1! #27439600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27440000 0! #27440500 1! #27440600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27441000 0! #27441500 1! #27441600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27442000 0! #27442500 1! #27442600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27443000 0! #27443500 1! #27443600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27444000 0! #27444500 1! #27444600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27445000 0! #27445500 1! #27445600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27446000 0! #27446500 1! #27446600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27447000 0! #27447500 1! #27447600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27448000 0! #27448500 1! #27448600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27449000 0! #27449500 1! #27449600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27450000 0! #27450500 1! #27450600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27451000 0! #27451500 1! #27451600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27452000 0! #27452500 1! #27452600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27453000 0! #27453500 1! #27453600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27454000 0! #27454500 1! #27454600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27455000 0! #27455500 1! #27455600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27456000 0! #27456500 1! #27456600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27457000 0! #27457500 1! #27457600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27458000 0! #27458500 1! #27458600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27459000 0! #27459500 1! #27459600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27460000 0! #27460500 1! #27460600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27461000 0! #27461500 1! #27461600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27462000 0! #27462500 1! #27462600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27463000 0! #27463500 1! #27463600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27464000 0! #27464500 1! #27464600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27465000 0! #27465500 1! #27465600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27466000 0! #27466500 1! #27466600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27467000 0! #27467500 1! #27467600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27468000 0! #27468500 1! #27468600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27469000 0! #27469500 1! #27469600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27470000 0! #27470500 1! #27470600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27471000 0! #27471500 1! #27471600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27472000 0! #27472500 1! #27472600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27473000 0! #27473500 1! #27473600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27474000 0! #27474500 1! #27474600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27475000 0! #27475500 1! #27475600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27476000 0! #27476500 1! #27476600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27477000 0! #27477500 1! #27477600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27478000 0! #27478500 1! #27478600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27479000 0! #27479500 1! #27479600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27480000 0! #27480500 1! #27480600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27481000 0! #27481500 1! #27481600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27482000 0! #27482500 1! #27482600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27483000 0! #27483500 1! #27483600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27484000 0! #27484500 1! #27484600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27485000 0! #27485500 1! #27485600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27486000 0! #27486500 1! #27486600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27487000 0! #27487500 1! #27487600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27488000 0! #27488500 1! #27488600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27489000 0! #27489500 1! #27489600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27490000 0! #27490500 1! #27490600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27491000 0! #27491500 1! #27491600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27492000 0! #27492500 1! #27492600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27493000 0! #27493500 1! #27493600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27494000 0! #27494500 1! #27494600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27495000 0! #27495500 1! #27495600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27496000 0! #27496500 1! #27496600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27497000 0! #27497500 1! #27497600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27498000 0! #27498500 1! #27498600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27499000 0! #27499500 1! #27499600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27500000 0! #27500500 1! #27500600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27501000 0! #27501500 1! #27501600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27502000 0! #27502500 1! #27502600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27503000 0! #27503500 1! #27503600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27504000 0! #27504500 1! #27504600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27505000 0! #27505500 1! #27505600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27506000 0! #27506500 1! #27506600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27507000 0! #27507500 1! #27507600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27508000 0! #27508500 1! #27508600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27509000 0! #27509500 1! #27509600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27510000 0! #27510500 1! #27510600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27511000 0! #27511500 1! #27511600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27512000 0! #27512500 1! #27512600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27513000 0! #27513500 1! #27513600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27514000 0! #27514500 1! #27514600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27515000 0! #27515500 1! #27515600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27516000 0! #27516500 1! #27516600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27517000 0! #27517500 1! #27517600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #27517700 b101111 ^ b101 g b10101 c #27518000 0! #27518500 1! #27518600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27519000 0! #27519500 1! #27519600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27520000 0! #27520500 1! #27520600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27521000 0! #27521500 1! #27521600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27522000 0! #27522500 1! #27522600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27523000 0! #27523500 1! #27523600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27524000 0! #27524500 1! #27524600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27525000 0! #27525500 1! #27525600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27526000 0! #27526500 1! #27526600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27527000 0! #27527500 1! #27527600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27528000 0! #27528500 1! #27528600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27529000 0! #27529500 1! #27529600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27530000 0! #27530500 1! #27530600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27531000 0! #27531500 1! #27531600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27532000 0! #27532500 1! #27532600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27533000 0! #27533500 1! #27533600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27534000 0! #27534500 1! #27534600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27535000 0! #27535500 1! #27535600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27536000 0! #27536500 1! #27536600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27537000 0! #27537500 1! #27537600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27538000 0! #27538500 1! #27538600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27539000 0! #27539500 1! #27539600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27540000 0! #27540500 1! #27540600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27541000 0! #27541500 1! #27541600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27542000 0! #27542500 1! #27542600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27543000 0! #27543500 1! #27543600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27544000 0! #27544500 1! #27544600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27545000 0! #27545500 1! #27545600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27546000 0! #27546500 1! #27546600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27547000 0! #27547500 1! #27547600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27548000 0! #27548500 1! #27548600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27549000 0! #27549500 1! #27549600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27550000 0! #27550500 1! #27550600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27551000 0! #27551500 1! #27551600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27552000 0! #27552500 1! #27552600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27553000 0! #27553500 1! #27553600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27554000 0! #27554500 1! #27554600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27555000 0! #27555500 1! #27555600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27556000 0! #27556500 1! #27556600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27557000 0! #27557500 1! #27557600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27558000 0! #27558500 1! #27558600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27559000 0! #27559500 1! #27559600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27560000 0! #27560500 1! #27560600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27561000 0! #27561500 1! #27561600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27562000 0! #27562500 1! #27562600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27563000 0! #27563500 1! #27563600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27564000 0! #27564500 1! #27564600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27565000 0! #27565500 1! #27565600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27566000 0! #27566500 1! #27566600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27567000 0! #27567500 1! #27567600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27568000 0! #27568500 1! #27568600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27569000 0! #27569500 1! #27569600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27570000 0! #27570500 1! #27570600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27571000 0! #27571500 1! #27571600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27572000 0! #27572500 1! #27572600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27573000 0! #27573500 1! #27573600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27574000 0! #27574500 1! #27574600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27575000 0! #27575500 1! #27575600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27576000 0! #27576500 1! #27576600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27577000 0! #27577500 1! #27577600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27578000 0! #27578500 1! #27578600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27579000 0! #27579500 1! #27579600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27580000 0! #27580500 1! #27580600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27581000 0! #27581500 1! #27581600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27582000 0! #27582500 1! #27582600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27583000 0! #27583500 1! #27583600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27584000 0! #27584500 1! #27584600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27585000 0! #27585500 1! #27585600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27586000 0! #27586500 1! #27586600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27587000 0! #27587500 1! #27587600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27588000 0! #27588500 1! #27588600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27589000 0! #27589500 1! #27589600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27590000 0! #27590500 1! #27590600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27591000 0! #27591500 1! #27591600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27592000 0! #27592500 1! #27592600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27593000 0! #27593500 1! #27593600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27594000 0! #27594500 1! #27594600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27595000 0! #27595500 1! #27595600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27596000 0! #27596500 1! #27596600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27597000 0! #27597500 1! #27597600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27598000 0! #27598500 1! #27598600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27599000 0! #27599500 1! #27599600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27600000 0! #27600500 1! #27600600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27601000 0! #27601500 1! #27601600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27602000 0! #27602500 1! #27602600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27603000 0! #27603500 1! #27603600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27604000 0! #27604500 1! #27604600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27605000 0! #27605500 1! #27605600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27606000 0! #27606500 1! #27606600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27607000 0! #27607500 1! #27607600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27608000 0! #27608500 1! #27608600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27609000 0! #27609500 1! #27609600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27610000 0! #27610500 1! #27610600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27611000 0! #27611500 1! #27611600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27612000 0! #27612500 1! #27612600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27613000 0! #27613500 1! #27613600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27614000 0! #27614500 1! #27614600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27615000 0! #27615500 1! #27615600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27616000 0! #27616500 1! #27616600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27617000 0! #27617500 1! #27617600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27618000 0! #27618500 1! #27618600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27619000 0! #27619500 1! #27619600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #27619700 0j 0O #27620000 0! #27620500 1! #27620600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27621000 0! #27621500 1! #27621600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27622000 0! #27622500 1! #27622600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27623000 0! #27623500 1! #27623600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27624000 0! #27624500 1! #27624600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27625000 0! #27625500 1! #27625600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27626000 0! #27626500 1! #27626600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27627000 0! #27627500 1! #27627600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27628000 0! #27628500 1! #27628600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27629000 0! #27629500 1! #27629600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27630000 0! #27630500 1! #27630600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27631000 0! #27631500 1! #27631600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27632000 0! #27632500 1! #27632600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27633000 0! #27633500 1! #27633600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27634000 0! #27634500 1! #27634600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27635000 0! #27635500 1! #27635600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27636000 0! #27636500 1! #27636600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27637000 0! #27637500 1! #27637600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27638000 0! #27638500 1! #27638600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27639000 0! #27639500 1! #27639600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27640000 0! #27640500 1! #27640600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27641000 0! #27641500 1! #27641600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27642000 0! #27642500 1! #27642600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27643000 0! #27643500 1! #27643600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27644000 0! #27644500 1! #27644600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27645000 0! #27645500 1! #27645600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27646000 0! #27646500 1! #27646600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27647000 0! #27647500 1! #27647600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27648000 0! #27648500 1! #27648600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27649000 0! #27649500 1! #27649600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27650000 0! #27650500 1! #27650600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27651000 0! #27651500 1! #27651600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27652000 0! #27652500 1! #27652600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27653000 0! #27653500 1! #27653600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27654000 0! #27654500 1! #27654600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27655000 0! #27655500 1! #27655600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27656000 0! #27656500 1! #27656600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27657000 0! #27657500 1! #27657600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27658000 0! #27658500 1! #27658600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27659000 0! #27659500 1! #27659600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27660000 0! #27660500 1! #27660600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27661000 0! #27661500 1! #27661600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27662000 0! #27662500 1! #27662600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27663000 0! #27663500 1! #27663600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27664000 0! #27664500 1! #27664600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27665000 0! #27665500 1! #27665600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27666000 0! #27666500 1! #27666600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27667000 0! #27667500 1! #27667600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27668000 0! #27668500 1! #27668600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27669000 0! #27669500 1! #27669600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27670000 0! #27670500 1! #27670600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27671000 0! #27671500 1! #27671600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27672000 0! #27672500 1! #27672600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27673000 0! #27673500 1! #27673600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27674000 0! #27674500 1! #27674600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27675000 0! #27675500 1! #27675600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27676000 0! #27676500 1! #27676600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27677000 0! #27677500 1! #27677600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27678000 0! #27678500 1! #27678600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27679000 0! #27679500 1! #27679600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27680000 0! #27680500 1! #27680600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27681000 0! #27681500 1! #27681600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27682000 0! #27682500 1! #27682600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27683000 0! #27683500 1! #27683600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27684000 0! #27684500 1! #27684600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27685000 0! #27685500 1! #27685600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27686000 0! #27686500 1! #27686600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27687000 0! #27687500 1! #27687600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27688000 0! #27688500 1! #27688600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27689000 0! #27689500 1! #27689600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27690000 0! #27690500 1! #27690600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27691000 0! #27691500 1! #27691600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27692000 0! #27692500 1! #27692600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27693000 0! #27693500 1! #27693600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27694000 0! #27694500 1! #27694600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27695000 0! #27695500 1! #27695600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27696000 0! #27696500 1! #27696600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27697000 0! #27697500 1! #27697600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27698000 0! #27698500 1! #27698600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27699000 0! #27699500 1! #27699600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27700000 0! #27700500 1! #27700600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27701000 0! #27701500 1! #27701600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27702000 0! #27702500 1! #27702600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27703000 0! #27703500 1! #27703600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27704000 0! #27704500 1! #27704600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27705000 0! #27705500 1! #27705600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27706000 0! #27706500 1! #27706600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27707000 0! #27707500 1! #27707600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27708000 0! #27708500 1! #27708600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27709000 0! #27709500 1! #27709600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27710000 0! #27710500 1! #27710600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27711000 0! #27711500 1! #27711600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27712000 0! #27712500 1! #27712600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27713000 0! #27713500 1! #27713600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27714000 0! #27714500 1! #27714600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27715000 0! #27715500 1! #27715600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27716000 0! #27716500 1! #27716600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27717000 0! #27717500 1! #27717600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27718000 0! #27718500 1! #27718600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27719000 0! #27719500 1! #27719600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27720000 0! #27720500 1! #27720600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27721000 0! #27721500 1! #27721600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27722000 0! #27722500 1! #27722600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27723000 0! #27723500 1! #27723600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27724000 0! #27724500 1! #27724600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27725000 0! #27725500 1! #27725600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27726000 0! #27726500 1! #27726600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27727000 0! #27727500 1! #27727600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27728000 0! #27728500 1! #27728600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27729000 0! #27729500 1! #27729600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27730000 0! #27730500 1! #27730600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27731000 0! #27731500 1! #27731600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27732000 0! #27732500 1! #27732600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27733000 0! #27733500 1! #27733600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27734000 0! #27734500 1! #27734600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27735000 0! #27735500 1! #27735600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27736000 0! #27736500 1! #27736600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27737000 0! #27737500 1! #27737600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27738000 0! #27738500 1! #27738600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27739000 0! #27739500 1! #27739600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27740000 0! #27740500 1! #27740600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27741000 0! #27741500 1! #27741600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27742000 0! #27742500 1! #27742600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27743000 0! #27743500 1! #27743600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27744000 0! #27744500 1! #27744600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27745000 0! #27745500 1! #27745600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27746000 0! #27746500 1! #27746600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27747000 0! #27747500 1! #27747600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27748000 0! #27748500 1! #27748600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27749000 0! #27749500 1! #27749600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27750000 0! #27750500 1! #27750600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27751000 0! #27751500 1! #27751600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27752000 0! #27752500 1! #27752600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27753000 0! #27753500 1! #27753600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27754000 0! #27754500 1! #27754600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27755000 0! #27755500 1! #27755600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27756000 0! #27756500 1! #27756600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27757000 0! #27757500 1! #27757600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27758000 0! #27758500 1! #27758600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27759000 0! #27759500 1! #27759600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27760000 0! #27760500 1! #27760600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27761000 0! #27761500 1! #27761600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27762000 0! #27762500 1! #27762600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27763000 0! #27763500 1! #27763600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27764000 0! #27764500 1! #27764600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27765000 0! #27765500 1! #27765600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27766000 0! #27766500 1! #27766600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27767000 0! #27767500 1! #27767600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27768000 0! #27768500 1! #27768600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27769000 0! #27769500 1! #27769600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27770000 0! #27770500 1! #27770600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27771000 0! #27771500 1! #27771600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27772000 0! #27772500 1! #27772600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #27772700 b1011111 ^ b100 g b101010 c #27773000 0! #27773500 1! #27773600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27774000 0! #27774500 1! #27774600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27775000 0! #27775500 1! #27775600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27776000 0! #27776500 1! #27776600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27777000 0! #27777500 1! #27777600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27778000 0! #27778500 1! #27778600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27779000 0! #27779500 1! #27779600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27780000 0! #27780500 1! #27780600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27781000 0! #27781500 1! #27781600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27782000 0! #27782500 1! #27782600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27783000 0! #27783500 1! #27783600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27784000 0! #27784500 1! #27784600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27785000 0! #27785500 1! #27785600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27786000 0! #27786500 1! #27786600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27787000 0! #27787500 1! #27787600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27788000 0! #27788500 1! #27788600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27789000 0! #27789500 1! #27789600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27790000 0! #27790500 1! #27790600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27791000 0! #27791500 1! #27791600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27792000 0! #27792500 1! #27792600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27793000 0! #27793500 1! #27793600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27794000 0! #27794500 1! #27794600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27795000 0! #27795500 1! #27795600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27796000 0! #27796500 1! #27796600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27797000 0! #27797500 1! #27797600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27798000 0! #27798500 1! #27798600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27799000 0! #27799500 1! #27799600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27800000 0! #27800500 1! #27800600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27801000 0! #27801500 1! #27801600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27802000 0! #27802500 1! #27802600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27803000 0! #27803500 1! #27803600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27804000 0! #27804500 1! #27804600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27805000 0! #27805500 1! #27805600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27806000 0! #27806500 1! #27806600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27807000 0! #27807500 1! #27807600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27808000 0! #27808500 1! #27808600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27809000 0! #27809500 1! #27809600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27810000 0! #27810500 1! #27810600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27811000 0! #27811500 1! #27811600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27812000 0! #27812500 1! #27812600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27813000 0! #27813500 1! #27813600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27814000 0! #27814500 1! #27814600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27815000 0! #27815500 1! #27815600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27816000 0! #27816500 1! #27816600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27817000 0! #27817500 1! #27817600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27818000 0! #27818500 1! #27818600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27819000 0! #27819500 1! #27819600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27820000 0! #27820500 1! #27820600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27821000 0! #27821500 1! #27821600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27822000 0! #27822500 1! #27822600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27823000 0! #27823500 1! #27823600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27824000 0! #27824500 1! #27824600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27825000 0! #27825500 1! #27825600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27826000 0! #27826500 1! #27826600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27827000 0! #27827500 1! #27827600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27828000 0! #27828500 1! #27828600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27829000 0! #27829500 1! #27829600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27830000 0! #27830500 1! #27830600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27831000 0! #27831500 1! #27831600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27832000 0! #27832500 1! #27832600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27833000 0! #27833500 1! #27833600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27834000 0! #27834500 1! #27834600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27835000 0! #27835500 1! #27835600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27836000 0! #27836500 1! #27836600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27837000 0! #27837500 1! #27837600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27838000 0! #27838500 1! #27838600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27839000 0! #27839500 1! #27839600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27840000 0! #27840500 1! #27840600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27841000 0! #27841500 1! #27841600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27842000 0! #27842500 1! #27842600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27843000 0! #27843500 1! #27843600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27844000 0! #27844500 1! #27844600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27845000 0! #27845500 1! #27845600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27846000 0! #27846500 1! #27846600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27847000 0! #27847500 1! #27847600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27848000 0! #27848500 1! #27848600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27849000 0! #27849500 1! #27849600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27850000 0! #27850500 1! #27850600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27851000 0! #27851500 1! #27851600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27852000 0! #27852500 1! #27852600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27853000 0! #27853500 1! #27853600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27854000 0! #27854500 1! #27854600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27855000 0! #27855500 1! #27855600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27856000 0! #27856500 1! #27856600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27857000 0! #27857500 1! #27857600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27858000 0! #27858500 1! #27858600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27859000 0! #27859500 1! #27859600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27860000 0! #27860500 1! #27860600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27861000 0! #27861500 1! #27861600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27862000 0! #27862500 1! #27862600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27863000 0! #27863500 1! #27863600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27864000 0! #27864500 1! #27864600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27865000 0! #27865500 1! #27865600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27866000 0! #27866500 1! #27866600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27867000 0! #27867500 1! #27867600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27868000 0! #27868500 1! #27868600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27869000 0! #27869500 1! #27869600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27870000 0! #27870500 1! #27870600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27871000 0! #27871500 1! #27871600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27872000 0! #27872500 1! #27872600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27873000 0! #27873500 1! #27873600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27874000 0! #27874500 1! #27874600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #27874700 1j 0j #27875000 0! #27875500 1! #27875600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27876000 0! #27876500 1! #27876600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27877000 0! #27877500 1! #27877600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27878000 0! #27878500 1! #27878600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27879000 0! #27879500 1! #27879600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27880000 0! #27880500 1! #27880600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27881000 0! #27881500 1! #27881600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27882000 0! #27882500 1! #27882600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27883000 0! #27883500 1! #27883600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27884000 0! #27884500 1! #27884600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27885000 0! #27885500 1! #27885600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27886000 0! #27886500 1! #27886600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27887000 0! #27887500 1! #27887600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27888000 0! #27888500 1! #27888600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27889000 0! #27889500 1! #27889600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27890000 0! #27890500 1! #27890600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27891000 0! #27891500 1! #27891600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27892000 0! #27892500 1! #27892600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27893000 0! #27893500 1! #27893600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27894000 0! #27894500 1! #27894600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27895000 0! #27895500 1! #27895600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27896000 0! #27896500 1! #27896600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27897000 0! #27897500 1! #27897600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27898000 0! #27898500 1! #27898600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27899000 0! #27899500 1! #27899600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27900000 0! #27900500 1! #27900600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27901000 0! #27901500 1! #27901600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27902000 0! #27902500 1! #27902600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27903000 0! #27903500 1! #27903600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27904000 0! #27904500 1! #27904600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27905000 0! #27905500 1! #27905600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27906000 0! #27906500 1! #27906600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27907000 0! #27907500 1! #27907600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27908000 0! #27908500 1! #27908600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27909000 0! #27909500 1! #27909600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27910000 0! #27910500 1! #27910600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27911000 0! #27911500 1! #27911600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27912000 0! #27912500 1! #27912600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27913000 0! #27913500 1! #27913600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27914000 0! #27914500 1! #27914600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27915000 0! #27915500 1! #27915600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27916000 0! #27916500 1! #27916600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27917000 0! #27917500 1! #27917600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27918000 0! #27918500 1! #27918600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27919000 0! #27919500 1! #27919600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27920000 0! #27920500 1! #27920600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27921000 0! #27921500 1! #27921600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27922000 0! #27922500 1! #27922600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27923000 0! #27923500 1! #27923600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27924000 0! #27924500 1! #27924600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27925000 0! #27925500 1! #27925600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27926000 0! #27926500 1! #27926600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27927000 0! #27927500 1! #27927600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27928000 0! #27928500 1! #27928600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27929000 0! #27929500 1! #27929600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27930000 0! #27930500 1! #27930600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27931000 0! #27931500 1! #27931600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27932000 0! #27932500 1! #27932600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27933000 0! #27933500 1! #27933600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27934000 0! #27934500 1! #27934600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27935000 0! #27935500 1! #27935600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27936000 0! #27936500 1! #27936600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27937000 0! #27937500 1! #27937600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27938000 0! #27938500 1! #27938600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27939000 0! #27939500 1! #27939600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27940000 0! #27940500 1! #27940600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27941000 0! #27941500 1! #27941600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27942000 0! #27942500 1! #27942600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27943000 0! #27943500 1! #27943600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27944000 0! #27944500 1! #27944600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27945000 0! #27945500 1! #27945600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27946000 0! #27946500 1! #27946600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27947000 0! #27947500 1! #27947600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27948000 0! #27948500 1! #27948600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27949000 0! #27949500 1! #27949600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27950000 0! #27950500 1! #27950600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27951000 0! #27951500 1! #27951600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27952000 0! #27952500 1! #27952600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27953000 0! #27953500 1! #27953600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27954000 0! #27954500 1! #27954600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27955000 0! #27955500 1! #27955600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27956000 0! #27956500 1! #27956600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27957000 0! #27957500 1! #27957600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27958000 0! #27958500 1! #27958600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27959000 0! #27959500 1! #27959600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27960000 0! #27960500 1! #27960600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27961000 0! #27961500 1! #27961600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27962000 0! #27962500 1! #27962600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27963000 0! #27963500 1! #27963600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27964000 0! #27964500 1! #27964600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27965000 0! #27965500 1! #27965600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27966000 0! #27966500 1! #27966600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27967000 0! #27967500 1! #27967600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27968000 0! #27968500 1! #27968600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27969000 0! #27969500 1! #27969600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27970000 0! #27970500 1! #27970600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27971000 0! #27971500 1! #27971600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27972000 0! #27972500 1! #27972600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27973000 0! #27973500 1! #27973600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27974000 0! #27974500 1! #27974600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27975000 0! #27975500 1! #27975600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27976000 0! #27976500 1! #27976600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27977000 0! #27977500 1! #27977600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27978000 0! #27978500 1! #27978600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27979000 0! #27979500 1! #27979600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27980000 0! #27980500 1! #27980600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27981000 0! #27981500 1! #27981600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27982000 0! #27982500 1! #27982600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27983000 0! #27983500 1! #27983600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27984000 0! #27984500 1! #27984600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27985000 0! #27985500 1! #27985600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27986000 0! #27986500 1! #27986600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27987000 0! #27987500 1! #27987600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27988000 0! #27988500 1! #27988600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27989000 0! #27989500 1! #27989600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27990000 0! #27990500 1! #27990600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27991000 0! #27991500 1! #27991600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27992000 0! #27992500 1! #27992600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27993000 0! #27993500 1! #27993600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27994000 0! #27994500 1! #27994600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27995000 0! #27995500 1! #27995600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27996000 0! #27996500 1! #27996600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27997000 0! #27997500 1! #27997600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #27998000 0! #27998500 1! #27998600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #27999000 0! #27999500 1! #27999600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28000000 0! #28000500 1! #28000600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28001000 0! #28001500 1! #28001600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28002000 0! #28002500 1! #28002600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28003000 0! #28003500 1! #28003600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28004000 0! #28004500 1! #28004600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28005000 0! #28005500 1! #28005600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28006000 0! #28006500 1! #28006600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28007000 0! #28007500 1! #28007600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28008000 0! #28008500 1! #28008600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28009000 0! #28009500 1! #28009600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28010000 0! #28010500 1! #28010600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28011000 0! #28011500 1! #28011600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28012000 0! #28012500 1! #28012600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28013000 0! #28013500 1! #28013600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28014000 0! #28014500 1! #28014600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28015000 0! #28015500 1! #28015600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28016000 0! #28016500 1! #28016600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28017000 0! #28017500 1! #28017600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28018000 0! #28018500 1! #28018600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28019000 0! #28019500 1! #28019600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28020000 0! #28020500 1! #28020600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28021000 0! #28021500 1! #28021600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28022000 0! #28022500 1! #28022600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28023000 0! #28023500 1! #28023600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28024000 0! #28024500 1! #28024600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28025000 0! #28025500 1! #28025600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28026000 0! #28026500 1! #28026600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28027000 0! #28027500 1! #28027600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #28027700 b10111111 ^ b11 g b1010100 c #28028000 0! #28028500 1! #28028600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28029000 0! #28029500 1! #28029600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28030000 0! #28030500 1! #28030600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28031000 0! #28031500 1! #28031600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28032000 0! #28032500 1! #28032600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28033000 0! #28033500 1! #28033600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28034000 0! #28034500 1! #28034600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28035000 0! #28035500 1! #28035600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28036000 0! #28036500 1! #28036600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28037000 0! #28037500 1! #28037600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28038000 0! #28038500 1! #28038600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28039000 0! #28039500 1! #28039600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28040000 0! #28040500 1! #28040600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28041000 0! #28041500 1! #28041600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28042000 0! #28042500 1! #28042600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28043000 0! #28043500 1! #28043600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28044000 0! #28044500 1! #28044600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28045000 0! #28045500 1! #28045600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28046000 0! #28046500 1! #28046600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28047000 0! #28047500 1! #28047600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28048000 0! #28048500 1! #28048600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28049000 0! #28049500 1! #28049600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28050000 0! #28050500 1! #28050600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28051000 0! #28051500 1! #28051600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28052000 0! #28052500 1! #28052600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28053000 0! #28053500 1! #28053600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28054000 0! #28054500 1! #28054600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28055000 0! #28055500 1! #28055600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28056000 0! #28056500 1! #28056600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28057000 0! #28057500 1! #28057600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28058000 0! #28058500 1! #28058600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28059000 0! #28059500 1! #28059600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28060000 0! #28060500 1! #28060600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28061000 0! #28061500 1! #28061600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28062000 0! #28062500 1! #28062600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28063000 0! #28063500 1! #28063600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28064000 0! #28064500 1! #28064600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28065000 0! #28065500 1! #28065600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28066000 0! #28066500 1! #28066600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28067000 0! #28067500 1! #28067600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28068000 0! #28068500 1! #28068600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28069000 0! #28069500 1! #28069600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28070000 0! #28070500 1! #28070600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28071000 0! #28071500 1! #28071600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28072000 0! #28072500 1! #28072600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28073000 0! #28073500 1! #28073600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28074000 0! #28074500 1! #28074600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28075000 0! #28075500 1! #28075600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28076000 0! #28076500 1! #28076600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28077000 0! #28077500 1! #28077600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28078000 0! #28078500 1! #28078600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28079000 0! #28079500 1! #28079600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28080000 0! #28080500 1! #28080600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28081000 0! #28081500 1! #28081600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28082000 0! #28082500 1! #28082600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28083000 0! #28083500 1! #28083600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28084000 0! #28084500 1! #28084600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28085000 0! #28085500 1! #28085600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28086000 0! #28086500 1! #28086600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28087000 0! #28087500 1! #28087600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28088000 0! #28088500 1! #28088600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28089000 0! #28089500 1! #28089600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28090000 0! #28090500 1! #28090600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28091000 0! #28091500 1! #28091600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28092000 0! #28092500 1! #28092600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28093000 0! #28093500 1! #28093600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28094000 0! #28094500 1! #28094600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28095000 0! #28095500 1! #28095600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28096000 0! #28096500 1! #28096600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28097000 0! #28097500 1! #28097600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28098000 0! #28098500 1! #28098600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28099000 0! #28099500 1! #28099600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28100000 0! #28100500 1! #28100600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28101000 0! #28101500 1! #28101600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28102000 0! #28102500 1! #28102600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28103000 0! #28103500 1! #28103600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28104000 0! #28104500 1! #28104600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28105000 0! #28105500 1! #28105600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28106000 0! #28106500 1! #28106600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28107000 0! #28107500 1! #28107600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28108000 0! #28108500 1! #28108600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28109000 0! #28109500 1! #28109600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28110000 0! #28110500 1! #28110600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28111000 0! #28111500 1! #28111600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28112000 0! #28112500 1! #28112600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28113000 0! #28113500 1! #28113600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28114000 0! #28114500 1! #28114600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28115000 0! #28115500 1! #28115600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28116000 0! #28116500 1! #28116600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28117000 0! #28117500 1! #28117600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28118000 0! #28118500 1! #28118600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28119000 0! #28119500 1! #28119600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28120000 0! #28120500 1! #28120600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28121000 0! #28121500 1! #28121600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28122000 0! #28122500 1! #28122600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28123000 0! #28123500 1! #28123600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28124000 0! #28124500 1! #28124600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28125000 0! #28125500 1! #28125600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28126000 0! #28126500 1! #28126600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28127000 0! #28127500 1! #28127600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28128000 0! #28128500 1! #28128600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28129000 0! #28129500 1! #28129600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #28129700 1j 1O #28130000 0! #28130500 1! #28130600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28131000 0! #28131500 1! #28131600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28132000 0! #28132500 1! #28132600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28133000 0! #28133500 1! #28133600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28134000 0! #28134500 1! #28134600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28135000 0! #28135500 1! #28135600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28136000 0! #28136500 1! #28136600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28137000 0! #28137500 1! #28137600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28138000 0! #28138500 1! #28138600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28139000 0! #28139500 1! #28139600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28140000 0! #28140500 1! #28140600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28141000 0! #28141500 1! #28141600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28142000 0! #28142500 1! #28142600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28143000 0! #28143500 1! #28143600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28144000 0! #28144500 1! #28144600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28145000 0! #28145500 1! #28145600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28146000 0! #28146500 1! #28146600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28147000 0! #28147500 1! #28147600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28148000 0! #28148500 1! #28148600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28149000 0! #28149500 1! #28149600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28150000 0! #28150500 1! #28150600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28151000 0! #28151500 1! #28151600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28152000 0! #28152500 1! #28152600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28153000 0! #28153500 1! #28153600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28154000 0! #28154500 1! #28154600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28155000 0! #28155500 1! #28155600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28156000 0! #28156500 1! #28156600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28157000 0! #28157500 1! #28157600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28158000 0! #28158500 1! #28158600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28159000 0! #28159500 1! #28159600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28160000 0! #28160500 1! #28160600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28161000 0! #28161500 1! #28161600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28162000 0! #28162500 1! #28162600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28163000 0! #28163500 1! #28163600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28164000 0! #28164500 1! #28164600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28165000 0! #28165500 1! #28165600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28166000 0! #28166500 1! #28166600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28167000 0! #28167500 1! #28167600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28168000 0! #28168500 1! #28168600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28169000 0! #28169500 1! #28169600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28170000 0! #28170500 1! #28170600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28171000 0! #28171500 1! #28171600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28172000 0! #28172500 1! #28172600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28173000 0! #28173500 1! #28173600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28174000 0! #28174500 1! #28174600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28175000 0! #28175500 1! #28175600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28176000 0! #28176500 1! #28176600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28177000 0! #28177500 1! #28177600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28178000 0! #28178500 1! #28178600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28179000 0! #28179500 1! #28179600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28180000 0! #28180500 1! #28180600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28181000 0! #28181500 1! #28181600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28182000 0! #28182500 1! #28182600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28183000 0! #28183500 1! #28183600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28184000 0! #28184500 1! #28184600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28185000 0! #28185500 1! #28185600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28186000 0! #28186500 1! #28186600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28187000 0! #28187500 1! #28187600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28188000 0! #28188500 1! #28188600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28189000 0! #28189500 1! #28189600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28190000 0! #28190500 1! #28190600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28191000 0! #28191500 1! #28191600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28192000 0! #28192500 1! #28192600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28193000 0! #28193500 1! #28193600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28194000 0! #28194500 1! #28194600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28195000 0! #28195500 1! #28195600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28196000 0! #28196500 1! #28196600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28197000 0! #28197500 1! #28197600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28198000 0! #28198500 1! #28198600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28199000 0! #28199500 1! #28199600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28200000 0! #28200500 1! #28200600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28201000 0! #28201500 1! #28201600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28202000 0! #28202500 1! #28202600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28203000 0! #28203500 1! #28203600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28204000 0! #28204500 1! #28204600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28205000 0! #28205500 1! #28205600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28206000 0! #28206500 1! #28206600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28207000 0! #28207500 1! #28207600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28208000 0! #28208500 1! #28208600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28209000 0! #28209500 1! #28209600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28210000 0! #28210500 1! #28210600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28211000 0! #28211500 1! #28211600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28212000 0! #28212500 1! #28212600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28213000 0! #28213500 1! #28213600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28214000 0! #28214500 1! #28214600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28215000 0! #28215500 1! #28215600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28216000 0! #28216500 1! #28216600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28217000 0! #28217500 1! #28217600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28218000 0! #28218500 1! #28218600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28219000 0! #28219500 1! #28219600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28220000 0! #28220500 1! #28220600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28221000 0! #28221500 1! #28221600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28222000 0! #28222500 1! #28222600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28223000 0! #28223500 1! #28223600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28224000 0! #28224500 1! #28224600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28225000 0! #28225500 1! #28225600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28226000 0! #28226500 1! #28226600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28227000 0! #28227500 1! #28227600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28228000 0! #28228500 1! #28228600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28229000 0! #28229500 1! #28229600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28230000 0! #28230500 1! #28230600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28231000 0! #28231500 1! #28231600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28232000 0! #28232500 1! #28232600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28233000 0! #28233500 1! #28233600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28234000 0! #28234500 1! #28234600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28235000 0! #28235500 1! #28235600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28236000 0! #28236500 1! #28236600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28237000 0! #28237500 1! #28237600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28238000 0! #28238500 1! #28238600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28239000 0! #28239500 1! #28239600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28240000 0! #28240500 1! #28240600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28241000 0! #28241500 1! #28241600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28242000 0! #28242500 1! #28242600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28243000 0! #28243500 1! #28243600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28244000 0! #28244500 1! #28244600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28245000 0! #28245500 1! #28245600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28246000 0! #28246500 1! #28246600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28247000 0! #28247500 1! #28247600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28248000 0! #28248500 1! #28248600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28249000 0! #28249500 1! #28249600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28250000 0! #28250500 1! #28250600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28251000 0! #28251500 1! #28251600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28252000 0! #28252500 1! #28252600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28253000 0! #28253500 1! #28253600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28254000 0! #28254500 1! #28254600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28255000 0! #28255500 1! #28255600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28256000 0! #28256500 1! #28256600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28257000 0! #28257500 1! #28257600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28258000 0! #28258500 1! #28258600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28259000 0! #28259500 1! #28259600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28260000 0! #28260500 1! #28260600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28261000 0! #28261500 1! #28261600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28262000 0! #28262500 1! #28262600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28263000 0! #28263500 1! #28263600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28264000 0! #28264500 1! #28264600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28265000 0! #28265500 1! #28265600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28266000 0! #28266500 1! #28266600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28267000 0! #28267500 1! #28267600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28268000 0! #28268500 1! #28268600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28269000 0! #28269500 1! #28269600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28270000 0! #28270500 1! #28270600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28271000 0! #28271500 1! #28271600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28272000 0! #28272500 1! #28272600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28273000 0! #28273500 1! #28273600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28274000 0! #28274500 1! #28274600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28275000 0! #28275500 1! #28275600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28276000 0! #28276500 1! #28276600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28277000 0! #28277500 1! #28277600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28278000 0! #28278500 1! #28278600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28279000 0! #28279500 1! #28279600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28280000 0! #28280500 1! #28280600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28281000 0! #28281500 1! #28281600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28282000 0! #28282500 1! #28282600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #28282700 b1111111 ^ b10 g b10101001 c #28283000 0! #28283500 1! #28283600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28284000 0! #28284500 1! #28284600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28285000 0! #28285500 1! #28285600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28286000 0! #28286500 1! #28286600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28287000 0! #28287500 1! #28287600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28288000 0! #28288500 1! #28288600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28289000 0! #28289500 1! #28289600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28290000 0! #28290500 1! #28290600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28291000 0! #28291500 1! #28291600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28292000 0! #28292500 1! #28292600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28293000 0! #28293500 1! #28293600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28294000 0! #28294500 1! #28294600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28295000 0! #28295500 1! #28295600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28296000 0! #28296500 1! #28296600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28297000 0! #28297500 1! #28297600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28298000 0! #28298500 1! #28298600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28299000 0! #28299500 1! #28299600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28300000 0! #28300500 1! #28300600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28301000 0! #28301500 1! #28301600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28302000 0! #28302500 1! #28302600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28303000 0! #28303500 1! #28303600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28304000 0! #28304500 1! #28304600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28305000 0! #28305500 1! #28305600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28306000 0! #28306500 1! #28306600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28307000 0! #28307500 1! #28307600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28308000 0! #28308500 1! #28308600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28309000 0! #28309500 1! #28309600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28310000 0! #28310500 1! #28310600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28311000 0! #28311500 1! #28311600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28312000 0! #28312500 1! #28312600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28313000 0! #28313500 1! #28313600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28314000 0! #28314500 1! #28314600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28315000 0! #28315500 1! #28315600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28316000 0! #28316500 1! #28316600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28317000 0! #28317500 1! #28317600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28318000 0! #28318500 1! #28318600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28319000 0! #28319500 1! #28319600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28320000 0! #28320500 1! #28320600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28321000 0! #28321500 1! #28321600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28322000 0! #28322500 1! #28322600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28323000 0! #28323500 1! #28323600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28324000 0! #28324500 1! #28324600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28325000 0! #28325500 1! #28325600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28326000 0! #28326500 1! #28326600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28327000 0! #28327500 1! #28327600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28328000 0! #28328500 1! #28328600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28329000 0! #28329500 1! #28329600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28330000 0! #28330500 1! #28330600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28331000 0! #28331500 1! #28331600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28332000 0! #28332500 1! #28332600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28333000 0! #28333500 1! #28333600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28334000 0! #28334500 1! #28334600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28335000 0! #28335500 1! #28335600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28336000 0! #28336500 1! #28336600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28337000 0! #28337500 1! #28337600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28338000 0! #28338500 1! #28338600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28339000 0! #28339500 1! #28339600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28340000 0! #28340500 1! #28340600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28341000 0! #28341500 1! #28341600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28342000 0! #28342500 1! #28342600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28343000 0! #28343500 1! #28343600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28344000 0! #28344500 1! #28344600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28345000 0! #28345500 1! #28345600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28346000 0! #28346500 1! #28346600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28347000 0! #28347500 1! #28347600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28348000 0! #28348500 1! #28348600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28349000 0! #28349500 1! #28349600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28350000 0! #28350500 1! #28350600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28351000 0! #28351500 1! #28351600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28352000 0! #28352500 1! #28352600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28353000 0! #28353500 1! #28353600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28354000 0! #28354500 1! #28354600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28355000 0! #28355500 1! #28355600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28356000 0! #28356500 1! #28356600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28357000 0! #28357500 1! #28357600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28358000 0! #28358500 1! #28358600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28359000 0! #28359500 1! #28359600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28360000 0! #28360500 1! #28360600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28361000 0! #28361500 1! #28361600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28362000 0! #28362500 1! #28362600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28363000 0! #28363500 1! #28363600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28364000 0! #28364500 1! #28364600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28365000 0! #28365500 1! #28365600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28366000 0! #28366500 1! #28366600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28367000 0! #28367500 1! #28367600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28368000 0! #28368500 1! #28368600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28369000 0! #28369500 1! #28369600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28370000 0! #28370500 1! #28370600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28371000 0! #28371500 1! #28371600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28372000 0! #28372500 1! #28372600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28373000 0! #28373500 1! #28373600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28374000 0! #28374500 1! #28374600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28375000 0! #28375500 1! #28375600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28376000 0! #28376500 1! #28376600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28377000 0! #28377500 1! #28377600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28378000 0! #28378500 1! #28378600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28379000 0! #28379500 1! #28379600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28380000 0! #28380500 1! #28380600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28381000 0! #28381500 1! #28381600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28382000 0! #28382500 1! #28382600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28383000 0! #28383500 1! #28383600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28384000 0! #28384500 1! #28384600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #28384700 0j 0O #28385000 0! #28385500 1! #28385600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28386000 0! #28386500 1! #28386600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28387000 0! #28387500 1! #28387600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28388000 0! #28388500 1! #28388600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28389000 0! #28389500 1! #28389600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28390000 0! #28390500 1! #28390600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28391000 0! #28391500 1! #28391600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28392000 0! #28392500 1! #28392600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28393000 0! #28393500 1! #28393600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28394000 0! #28394500 1! #28394600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28395000 0! #28395500 1! #28395600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28396000 0! #28396500 1! #28396600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28397000 0! #28397500 1! #28397600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28398000 0! #28398500 1! #28398600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28399000 0! #28399500 1! #28399600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28400000 0! #28400500 1! #28400600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28401000 0! #28401500 1! #28401600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28402000 0! #28402500 1! #28402600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28403000 0! #28403500 1! #28403600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28404000 0! #28404500 1! #28404600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28405000 0! #28405500 1! #28405600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28406000 0! #28406500 1! #28406600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28407000 0! #28407500 1! #28407600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28408000 0! #28408500 1! #28408600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28409000 0! #28409500 1! #28409600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28410000 0! #28410500 1! #28410600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28411000 0! #28411500 1! #28411600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28412000 0! #28412500 1! #28412600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28413000 0! #28413500 1! #28413600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28414000 0! #28414500 1! #28414600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28415000 0! #28415500 1! #28415600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28416000 0! #28416500 1! #28416600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28417000 0! #28417500 1! #28417600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28418000 0! #28418500 1! #28418600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28419000 0! #28419500 1! #28419600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28420000 0! #28420500 1! #28420600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28421000 0! #28421500 1! #28421600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28422000 0! #28422500 1! #28422600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28423000 0! #28423500 1! #28423600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28424000 0! #28424500 1! #28424600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28425000 0! #28425500 1! #28425600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28426000 0! #28426500 1! #28426600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28427000 0! #28427500 1! #28427600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28428000 0! #28428500 1! #28428600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28429000 0! #28429500 1! #28429600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28430000 0! #28430500 1! #28430600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28431000 0! #28431500 1! #28431600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28432000 0! #28432500 1! #28432600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28433000 0! #28433500 1! #28433600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28434000 0! #28434500 1! #28434600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28435000 0! #28435500 1! #28435600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28436000 0! #28436500 1! #28436600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28437000 0! #28437500 1! #28437600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28438000 0! #28438500 1! #28438600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28439000 0! #28439500 1! #28439600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28440000 0! #28440500 1! #28440600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28441000 0! #28441500 1! #28441600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28442000 0! #28442500 1! #28442600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28443000 0! #28443500 1! #28443600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28444000 0! #28444500 1! #28444600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28445000 0! #28445500 1! #28445600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28446000 0! #28446500 1! #28446600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28447000 0! #28447500 1! #28447600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28448000 0! #28448500 1! #28448600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28449000 0! #28449500 1! #28449600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28450000 0! #28450500 1! #28450600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28451000 0! #28451500 1! #28451600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28452000 0! #28452500 1! #28452600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28453000 0! #28453500 1! #28453600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28454000 0! #28454500 1! #28454600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28455000 0! #28455500 1! #28455600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28456000 0! #28456500 1! #28456600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28457000 0! #28457500 1! #28457600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28458000 0! #28458500 1! #28458600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28459000 0! #28459500 1! #28459600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28460000 0! #28460500 1! #28460600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28461000 0! #28461500 1! #28461600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28462000 0! #28462500 1! #28462600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28463000 0! #28463500 1! #28463600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28464000 0! #28464500 1! #28464600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28465000 0! #28465500 1! #28465600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28466000 0! #28466500 1! #28466600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28467000 0! #28467500 1! #28467600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28468000 0! #28468500 1! #28468600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28469000 0! #28469500 1! #28469600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28470000 0! #28470500 1! #28470600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28471000 0! #28471500 1! #28471600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28472000 0! #28472500 1! #28472600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28473000 0! #28473500 1! #28473600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28474000 0! #28474500 1! #28474600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28475000 0! #28475500 1! #28475600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28476000 0! #28476500 1! #28476600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28477000 0! #28477500 1! #28477600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28478000 0! #28478500 1! #28478600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28479000 0! #28479500 1! #28479600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28480000 0! #28480500 1! #28480600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28481000 0! #28481500 1! #28481600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28482000 0! #28482500 1! #28482600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28483000 0! #28483500 1! #28483600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28484000 0! #28484500 1! #28484600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28485000 0! #28485500 1! #28485600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28486000 0! #28486500 1! #28486600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28487000 0! #28487500 1! #28487600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28488000 0! #28488500 1! #28488600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28489000 0! #28489500 1! #28489600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28490000 0! #28490500 1! #28490600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28491000 0! #28491500 1! #28491600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28492000 0! #28492500 1! #28492600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28493000 0! #28493500 1! #28493600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28494000 0! #28494500 1! #28494600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28495000 0! #28495500 1! #28495600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28496000 0! #28496500 1! #28496600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28497000 0! #28497500 1! #28497600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28498000 0! #28498500 1! #28498600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28499000 0! #28499500 1! #28499600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28500000 0! #28500500 1! #28500600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28501000 0! #28501500 1! #28501600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28502000 0! #28502500 1! #28502600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28503000 0! #28503500 1! #28503600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28504000 0! #28504500 1! #28504600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28505000 0! #28505500 1! #28505600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28506000 0! #28506500 1! #28506600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28507000 0! #28507500 1! #28507600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28508000 0! #28508500 1! #28508600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28509000 0! #28509500 1! #28509600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28510000 0! #28510500 1! #28510600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28511000 0! #28511500 1! #28511600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28512000 0! #28512500 1! #28512600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28513000 0! #28513500 1! #28513600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28514000 0! #28514500 1! #28514600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28515000 0! #28515500 1! #28515600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28516000 0! #28516500 1! #28516600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28517000 0! #28517500 1! #28517600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28518000 0! #28518500 1! #28518600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28519000 0! #28519500 1! #28519600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28520000 0! #28520500 1! #28520600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28521000 0! #28521500 1! #28521600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28522000 0! #28522500 1! #28522600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28523000 0! #28523500 1! #28523600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28524000 0! #28524500 1! #28524600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28525000 0! #28525500 1! #28525600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28526000 0! #28526500 1! #28526600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28527000 0! #28527500 1! #28527600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28528000 0! #28528500 1! #28528600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28529000 0! #28529500 1! #28529600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28530000 0! #28530500 1! #28530600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28531000 0! #28531500 1! #28531600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28532000 0! #28532500 1! #28532600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28533000 0! #28533500 1! #28533600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28534000 0! #28534500 1! #28534600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28535000 0! #28535500 1! #28535600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28536000 0! #28536500 1! #28536600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28537000 0! #28537500 1! #28537600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #28537700 b11111111 ^ b1 g b1010010 c #28538000 0! #28538500 1! #28538600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28539000 0! #28539500 1! #28539600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28540000 0! #28540500 1! #28540600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28541000 0! #28541500 1! #28541600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28542000 0! #28542500 1! #28542600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28543000 0! #28543500 1! #28543600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28544000 0! #28544500 1! #28544600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28545000 0! #28545500 1! #28545600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28546000 0! #28546500 1! #28546600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28547000 0! #28547500 1! #28547600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28548000 0! #28548500 1! #28548600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28549000 0! #28549500 1! #28549600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28550000 0! #28550500 1! #28550600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28551000 0! #28551500 1! #28551600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28552000 0! #28552500 1! #28552600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28553000 0! #28553500 1! #28553600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28554000 0! #28554500 1! #28554600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28555000 0! #28555500 1! #28555600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28556000 0! #28556500 1! #28556600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28557000 0! #28557500 1! #28557600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28558000 0! #28558500 1! #28558600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28559000 0! #28559500 1! #28559600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28560000 0! #28560500 1! #28560600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28561000 0! #28561500 1! #28561600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28562000 0! #28562500 1! #28562600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28563000 0! #28563500 1! #28563600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28564000 0! #28564500 1! #28564600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28565000 0! #28565500 1! #28565600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28566000 0! #28566500 1! #28566600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28567000 0! #28567500 1! #28567600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28568000 0! #28568500 1! #28568600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28569000 0! #28569500 1! #28569600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28570000 0! #28570500 1! #28570600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28571000 0! #28571500 1! #28571600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28572000 0! #28572500 1! #28572600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28573000 0! #28573500 1! #28573600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28574000 0! #28574500 1! #28574600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28575000 0! #28575500 1! #28575600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28576000 0! #28576500 1! #28576600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28577000 0! #28577500 1! #28577600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28578000 0! #28578500 1! #28578600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28579000 0! #28579500 1! #28579600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28580000 0! #28580500 1! #28580600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28581000 0! #28581500 1! #28581600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28582000 0! #28582500 1! #28582600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28583000 0! #28583500 1! #28583600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28584000 0! #28584500 1! #28584600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28585000 0! #28585500 1! #28585600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28586000 0! #28586500 1! #28586600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28587000 0! #28587500 1! #28587600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28588000 0! #28588500 1! #28588600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28589000 0! #28589500 1! #28589600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28590000 0! #28590500 1! #28590600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28591000 0! #28591500 1! #28591600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28592000 0! #28592500 1! #28592600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28593000 0! #28593500 1! #28593600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28594000 0! #28594500 1! #28594600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28595000 0! #28595500 1! #28595600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28596000 0! #28596500 1! #28596600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28597000 0! #28597500 1! #28597600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28598000 0! #28598500 1! #28598600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28599000 0! #28599500 1! #28599600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28600000 0! #28600500 1! #28600600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28601000 0! #28601500 1! #28601600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28602000 0! #28602500 1! #28602600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28603000 0! #28603500 1! #28603600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28604000 0! #28604500 1! #28604600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28605000 0! #28605500 1! #28605600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28606000 0! #28606500 1! #28606600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28607000 0! #28607500 1! #28607600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28608000 0! #28608500 1! #28608600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28609000 0! #28609500 1! #28609600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28610000 0! #28610500 1! #28610600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28611000 0! #28611500 1! #28611600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28612000 0! #28612500 1! #28612600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28613000 0! #28613500 1! #28613600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28614000 0! #28614500 1! #28614600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28615000 0! #28615500 1! #28615600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28616000 0! #28616500 1! #28616600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28617000 0! #28617500 1! #28617600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28618000 0! #28618500 1! #28618600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28619000 0! #28619500 1! #28619600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28620000 0! #28620500 1! #28620600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28621000 0! #28621500 1! #28621600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28622000 0! #28622500 1! #28622600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28623000 0! #28623500 1! #28623600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28624000 0! #28624500 1! #28624600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28625000 0! #28625500 1! #28625600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28626000 0! #28626500 1! #28626600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28627000 0! #28627500 1! #28627600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28628000 0! #28628500 1! #28628600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28629000 0! #28629500 1! #28629600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28630000 0! #28630500 1! #28630600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28631000 0! #28631500 1! #28631600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28632000 0! #28632500 1! #28632600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28633000 0! #28633500 1! #28633600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28634000 0! #28634500 1! #28634600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28635000 0! #28635500 1! #28635600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28636000 0! #28636500 1! #28636600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28637000 0! #28637500 1! #28637600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28638000 0! #28638500 1! #28638600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28639000 0! #28639500 1! #28639600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #28639700 1j 1O #28640000 0! #28640500 1! #28640600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28641000 0! #28641500 1! #28641600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28642000 0! #28642500 1! #28642600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28643000 0! #28643500 1! #28643600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28644000 0! #28644500 1! #28644600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28645000 0! #28645500 1! #28645600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28646000 0! #28646500 1! #28646600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28647000 0! #28647500 1! #28647600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28648000 0! #28648500 1! #28648600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28649000 0! #28649500 1! #28649600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28650000 0! #28650500 1! #28650600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28651000 0! #28651500 1! #28651600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28652000 0! #28652500 1! #28652600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28653000 0! #28653500 1! #28653600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28654000 0! #28654500 1! #28654600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28655000 0! #28655500 1! #28655600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28656000 0! #28656500 1! #28656600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28657000 0! #28657500 1! #28657600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28658000 0! #28658500 1! #28658600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28659000 0! #28659500 1! #28659600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28660000 0! #28660500 1! #28660600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28661000 0! #28661500 1! #28661600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28662000 0! #28662500 1! #28662600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28663000 0! #28663500 1! #28663600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28664000 0! #28664500 1! #28664600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28665000 0! #28665500 1! #28665600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28666000 0! #28666500 1! #28666600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28667000 0! #28667500 1! #28667600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28668000 0! #28668500 1! #28668600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28669000 0! #28669500 1! #28669600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28670000 0! #28670500 1! #28670600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28671000 0! #28671500 1! #28671600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28672000 0! #28672500 1! #28672600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28673000 0! #28673500 1! #28673600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28674000 0! #28674500 1! #28674600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28675000 0! #28675500 1! #28675600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28676000 0! #28676500 1! #28676600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28677000 0! #28677500 1! #28677600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28678000 0! #28678500 1! #28678600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28679000 0! #28679500 1! #28679600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28680000 0! #28680500 1! #28680600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28681000 0! #28681500 1! #28681600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28682000 0! #28682500 1! #28682600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28683000 0! #28683500 1! #28683600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28684000 0! #28684500 1! #28684600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28685000 0! #28685500 1! #28685600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28686000 0! #28686500 1! #28686600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28687000 0! #28687500 1! #28687600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28688000 0! #28688500 1! #28688600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28689000 0! #28689500 1! #28689600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28690000 0! #28690500 1! #28690600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28691000 0! #28691500 1! #28691600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28692000 0! #28692500 1! #28692600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28693000 0! #28693500 1! #28693600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28694000 0! #28694500 1! #28694600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28695000 0! #28695500 1! #28695600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28696000 0! #28696500 1! #28696600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28697000 0! #28697500 1! #28697600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28698000 0! #28698500 1! #28698600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28699000 0! #28699500 1! #28699600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28700000 0! #28700500 1! #28700600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28701000 0! #28701500 1! #28701600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28702000 0! #28702500 1! #28702600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28703000 0! #28703500 1! #28703600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28704000 0! #28704500 1! #28704600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28705000 0! #28705500 1! #28705600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28706000 0! #28706500 1! #28706600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28707000 0! #28707500 1! #28707600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28708000 0! #28708500 1! #28708600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28709000 0! #28709500 1! #28709600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28710000 0! #28710500 1! #28710600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28711000 0! #28711500 1! #28711600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28712000 0! #28712500 1! #28712600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28713000 0! #28713500 1! #28713600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28714000 0! #28714500 1! #28714600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28715000 0! #28715500 1! #28715600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28716000 0! #28716500 1! #28716600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28717000 0! #28717500 1! #28717600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28718000 0! #28718500 1! #28718600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28719000 0! #28719500 1! #28719600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28720000 0! #28720500 1! #28720600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28721000 0! #28721500 1! #28721600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28722000 0! #28722500 1! #28722600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28723000 0! #28723500 1! #28723600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28724000 0! #28724500 1! #28724600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28725000 0! #28725500 1! #28725600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28726000 0! #28726500 1! #28726600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28727000 0! #28727500 1! #28727600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28728000 0! #28728500 1! #28728600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28729000 0! #28729500 1! #28729600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28730000 0! #28730500 1! #28730600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28731000 0! #28731500 1! #28731600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28732000 0! #28732500 1! #28732600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28733000 0! #28733500 1! #28733600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28734000 0! #28734500 1! #28734600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28735000 0! #28735500 1! #28735600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28736000 0! #28736500 1! #28736600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28737000 0! #28737500 1! #28737600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28738000 0! #28738500 1! #28738600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28739000 0! #28739500 1! #28739600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28740000 0! #28740500 1! #28740600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28741000 0! #28741500 1! #28741600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28742000 0! #28742500 1! #28742600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28743000 0! #28743500 1! #28743600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28744000 0! #28744500 1! #28744600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28745000 0! #28745500 1! #28745600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28746000 0! #28746500 1! #28746600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28747000 0! #28747500 1! #28747600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28748000 0! #28748500 1! #28748600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28749000 0! #28749500 1! #28749600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28750000 0! #28750500 1! #28750600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28751000 0! #28751500 1! #28751600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28752000 0! #28752500 1! #28752600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28753000 0! #28753500 1! #28753600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28754000 0! #28754500 1! #28754600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28755000 0! #28755500 1! #28755600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28756000 0! #28756500 1! #28756600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28757000 0! #28757500 1! #28757600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28758000 0! #28758500 1! #28758600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28759000 0! #28759500 1! #28759600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28760000 0! #28760500 1! #28760600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28761000 0! #28761500 1! #28761600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28762000 0! #28762500 1! #28762600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28763000 0! #28763500 1! #28763600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28764000 0! #28764500 1! #28764600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28765000 0! #28765500 1! #28765600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28766000 0! #28766500 1! #28766600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28767000 0! #28767500 1! #28767600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28768000 0! #28768500 1! #28768600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28769000 0! #28769500 1! #28769600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28770000 0! #28770500 1! #28770600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28771000 0! #28771500 1! #28771600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28772000 0! #28772500 1! #28772600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28773000 0! #28773500 1! #28773600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28774000 0! #28774500 1! #28774600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28775000 0! #28775500 1! #28775600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28776000 0! #28776500 1! #28776600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28777000 0! #28777500 1! #28777600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28778000 0! #28778500 1! #28778600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28779000 0! #28779500 1! #28779600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28780000 0! #28780500 1! #28780600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28781000 0! #28781500 1! #28781600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28782000 0! #28782500 1! #28782600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28783000 0! #28783500 1! #28783600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28784000 0! #28784500 1! #28784600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28785000 0! #28785500 1! #28785600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28786000 0! #28786500 1! #28786600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28787000 0! #28787500 1! #28787600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28788000 0! #28788500 1! #28788600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28789000 0! #28789500 1! #28789600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28790000 0! #28790500 1! #28790600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28791000 0! #28791500 1! #28791600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28792000 0! #28792500 1! #28792600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #28792700 b0 g b10100101 c 1h #28793000 0! #28793500 1! #28793600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28794000 0! #28794500 1! #28794600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28795000 0! #28795500 1! #28795600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28796000 0! #28796500 1! #28796600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28797000 0! #28797500 1! #28797600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28798000 0! #28798500 1! #28798600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28799000 0! #28799500 1! #28799600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28800000 0! #28800500 1! #28800600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28801000 0! #28801500 1! #28801600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28802000 0! #28802500 1! #28802600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28803000 0! #28803500 1! #28803600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28804000 0! #28804500 1! #28804600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28805000 0! #28805500 1! #28805600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28806000 0! #28806500 1! #28806600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28807000 0! #28807500 1! #28807600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28808000 0! #28808500 1! #28808600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28809000 0! #28809500 1! #28809600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28810000 0! #28810500 1! #28810600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28811000 0! #28811500 1! #28811600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28812000 0! #28812500 1! #28812600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28813000 0! #28813500 1! #28813600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28814000 0! #28814500 1! #28814600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28815000 0! #28815500 1! #28815600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28816000 0! #28816500 1! #28816600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28817000 0! #28817500 1! #28817600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28818000 0! #28818500 1! #28818600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28819000 0! #28819500 1! #28819600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28820000 0! #28820500 1! #28820600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28821000 0! #28821500 1! #28821600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28822000 0! #28822500 1! #28822600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28823000 0! #28823500 1! #28823600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28824000 0! #28824500 1! #28824600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28825000 0! #28825500 1! #28825600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28826000 0! #28826500 1! #28826600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28827000 0! #28827500 1! #28827600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28828000 0! #28828500 1! #28828600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28829000 0! #28829500 1! #28829600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28830000 0! #28830500 1! #28830600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28831000 0! #28831500 1! #28831600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28832000 0! #28832500 1! #28832600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28833000 0! #28833500 1! #28833600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28834000 0! #28834500 1! #28834600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28835000 0! #28835500 1! #28835600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28836000 0! #28836500 1! #28836600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28837000 0! #28837500 1! #28837600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28838000 0! #28838500 1! #28838600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28839000 0! #28839500 1! #28839600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28840000 0! #28840500 1! #28840600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28841000 0! #28841500 1! #28841600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28842000 0! #28842500 1! #28842600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28843000 0! #28843500 1! #28843600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28844000 0! #28844500 1! #28844600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28845000 0! #28845500 1! #28845600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28846000 0! #28846500 1! #28846600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28847000 0! #28847500 1! #28847600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28848000 0! #28848500 1! #28848600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28849000 0! #28849500 1! #28849600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28850000 0! #28850500 1! #28850600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28851000 0! #28851500 1! #28851600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28852000 0! #28852500 1! #28852600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28853000 0! #28853500 1! #28853600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28854000 0! #28854500 1! #28854600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28855000 0! #28855500 1! #28855600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28856000 0! #28856500 1! #28856600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28857000 0! #28857500 1! #28857600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28858000 0! #28858500 1! #28858600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28859000 0! #28859500 1! #28859600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28860000 0! #28860500 1! #28860600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28861000 0! #28861500 1! #28861600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28862000 0! #28862500 1! #28862600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28863000 0! #28863500 1! #28863600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28864000 0! #28864500 1! #28864600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28865000 0! #28865500 1! #28865600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28866000 0! #28866500 1! #28866600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28867000 0! #28867500 1! #28867600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28868000 0! #28868500 1! #28868600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28869000 0! #28869500 1! #28869600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28870000 0! #28870500 1! #28870600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28871000 0! #28871500 1! #28871600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28872000 0! #28872500 1! #28872600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28873000 0! #28873500 1! #28873600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28874000 0! #28874500 1! #28874600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28875000 0! #28875500 1! #28875600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28876000 0! #28876500 1! #28876600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28877000 0! #28877500 1! #28877600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28878000 0! #28878500 1! #28878600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28879000 0! #28879500 1! #28879600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28880000 0! #28880500 1! #28880600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28881000 0! #28881500 1! #28881600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28882000 0! #28882500 1! #28882600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28883000 0! #28883500 1! #28883600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28884000 0! #28884500 1! #28884600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28885000 0! #28885500 1! #28885600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28886000 0! #28886500 1! #28886600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28887000 0! #28887500 1! #28887600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28888000 0! #28888500 1! #28888600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28889000 0! #28889500 1! #28889600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28890000 0! #28890500 1! #28890600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28891000 0! #28891500 1! #28891600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28892000 0! #28892500 1! #28892600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28893000 0! #28893500 1! #28893600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28894000 0! #28894500 1! #28894600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #28894700 b101 q #28894800 b10 ] #28894900 b1011010 ^ #28895000 0! #28895500 1! #28895600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28896000 0! #28896500 1! #28896600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28897000 0! #28897500 1! #28897600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28898000 0! #28898500 1! #28898600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28899000 0! #28899500 1! #28899600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28900000 0! #28900500 1! #28900600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28901000 0! #28901500 1! #28901600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28902000 0! #28902500 1! #28902600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28903000 0! #28903500 1! #28903600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28904000 0! #28904500 1! #28904600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28905000 0! #28905500 1! #28905600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28906000 0! #28906500 1! #28906600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28907000 0! #28907500 1! #28907600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28908000 0! #28908500 1! #28908600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28909000 0! #28909500 1! #28909600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28910000 0! #28910500 1! #28910600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28911000 0! #28911500 1! #28911600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28912000 0! #28912500 1! #28912600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28913000 0! #28913500 1! #28913600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28914000 0! #28914500 1! #28914600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28915000 0! #28915500 1! #28915600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28916000 0! #28916500 1! #28916600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28917000 0! #28917500 1! #28917600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28918000 0! #28918500 1! #28918600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28919000 0! #28919500 1! #28919600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28920000 0! #28920500 1! #28920600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28921000 0! #28921500 1! #28921600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28922000 0! #28922500 1! #28922600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28923000 0! #28923500 1! #28923600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28924000 0! #28924500 1! #28924600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28925000 0! #28925500 1! #28925600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28926000 0! #28926500 1! #28926600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28927000 0! #28927500 1! #28927600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28928000 0! #28928500 1! #28928600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28929000 0! #28929500 1! #28929600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28930000 0! #28930500 1! #28930600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28931000 0! #28931500 1! #28931600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28932000 0! #28932500 1! #28932600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28933000 0! #28933500 1! #28933600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28934000 0! #28934500 1! #28934600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28935000 0! #28935500 1! #28935600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28936000 0! #28936500 1! #28936600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28937000 0! #28937500 1! #28937600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28938000 0! #28938500 1! #28938600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28939000 0! #28939500 1! #28939600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28940000 0! #28940500 1! #28940600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28941000 0! #28941500 1! #28941600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28942000 0! #28942500 1! #28942600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28943000 0! #28943500 1! #28943600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28944000 0! #28944500 1! #28944600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28945000 0! #28945500 1! #28945600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28946000 0! #28946500 1! #28946600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28947000 0! #28947500 1! #28947600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28948000 0! #28948500 1! #28948600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28949000 0! #28949500 1! #28949600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28950000 0! #28950500 1! #28950600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28951000 0! #28951500 1! #28951600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28952000 0! #28952500 1! #28952600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28953000 0! #28953500 1! #28953600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28954000 0! #28954500 1! #28954600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28955000 0! #28955500 1! #28955600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28956000 0! #28956500 1! #28956600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28957000 0! #28957500 1! #28957600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28958000 0! #28958500 1! #28958600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28959000 0! #28959500 1! #28959600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28960000 0! #28960500 1! #28960600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28961000 0! #28961500 1! #28961600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28962000 0! #28962500 1! #28962600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28963000 0! #28963500 1! #28963600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28964000 0! #28964500 1! #28964600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28965000 0! #28965500 1! #28965600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28966000 0! #28966500 1! #28966600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28967000 0! #28967500 1! #28967600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28968000 0! #28968500 1! #28968600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28969000 0! #28969500 1! #28969600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28970000 0! #28970500 1! #28970600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28971000 0! #28971500 1! #28971600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28972000 0! #28972500 1! #28972600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28973000 0! #28973500 1! #28973600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28974000 0! #28974500 1! #28974600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28975000 0! #28975500 1! #28975600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28976000 0! #28976500 1! #28976600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28977000 0! #28977500 1! #28977600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28978000 0! #28978500 1! #28978600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28979000 0! #28979500 1! #28979600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28980000 0! #28980500 1! #28980600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28981000 0! #28981500 1! #28981600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28982000 0! #28982500 1! #28982600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28983000 0! #28983500 1! #28983600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28984000 0! #28984500 1! #28984600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28985000 0! #28985500 1! #28985600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28986000 0! #28986500 1! #28986600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28987000 0! #28987500 1! #28987600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28988000 0! #28988500 1! #28988600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28989000 0! #28989500 1! #28989600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28990000 0! #28990500 1! #28990600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28991000 0! #28991500 1! #28991600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28992000 0! #28992500 1! #28992600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28993000 0! #28993500 1! #28993600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28994000 0! #28994500 1! #28994600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28995000 0! #28995500 1! #28995600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28996000 0! #28996500 1! #28996600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0Q 0O #28997000 0! #28997500 1! #28997600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #28998000 0! #28998500 1! #28998600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #28999000 0! #28999500 1! #28999600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29000000 0! #29000500 1! #29000600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29001000 0! #29001500 1! #29001600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29002000 0! #29002500 1! #29002600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29003000 0! #29003500 1! #29003600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29004000 0! #29004500 1! #29004600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29005000 0! #29005500 1! #29005600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29006000 0! #29006500 1! #29006600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29007000 0! #29007500 1! #29007600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29008000 0! #29008500 1! #29008600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29009000 0! #29009500 1! #29009600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29010000 0! #29010500 1! #29010600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29011000 0! #29011500 1! #29011600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29012000 0! #29012500 1! #29012600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29013000 0! #29013500 1! #29013600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29014000 0! #29014500 1! #29014600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29015000 0! #29015500 1! #29015600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29016000 0! #29016500 1! #29016600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29017000 0! #29017500 1! #29017600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29018000 0! #29018500 1! #29018600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29019000 0! #29019500 1! #29019600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29020000 0! #29020500 1! #29020600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29021000 0! #29021500 1! #29021600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29022000 0! #29022500 1! #29022600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29023000 0! #29023500 1! #29023600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29024000 0! #29024500 1! #29024600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29025000 0! #29025500 1! #29025600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29026000 0! #29026500 1! #29026600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29027000 0! #29027500 1! #29027600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29028000 0! #29028500 1! #29028600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29029000 0! #29029500 1! #29029600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29030000 0! #29030500 1! #29030600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29031000 0! #29031500 1! #29031600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29032000 0! #29032500 1! #29032600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29033000 0! #29033500 1! #29033600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29034000 0! #29034500 1! #29034600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29035000 0! #29035500 1! #29035600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29036000 0! #29036500 1! #29036600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29037000 0! #29037500 1! #29037600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29038000 0! #29038500 1! #29038600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29039000 0! #29039500 1! #29039600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29040000 0! #29040500 1! #29040600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29041000 0! #29041500 1! #29041600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29042000 0! #29042500 1! #29042600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29043000 0! #29043500 1! #29043600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29044000 0! #29044500 1! #29044600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29045000 0! #29045500 1! #29045600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29046000 0! #29046500 1! #29046600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29047000 0! #29047500 1! #29047600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #29047700 b111 g b1001010 c 0h #29048000 0! #29048500 1! #29048600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29049000 0! #29049500 1! #29049600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29050000 0! #29050500 1! #29050600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29051000 0! #29051500 1! #29051600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29052000 0! #29052500 1! #29052600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29053000 0! #29053500 1! #29053600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29054000 0! #29054500 1! #29054600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29055000 0! #29055500 1! #29055600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29056000 0! #29056500 1! #29056600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29057000 0! #29057500 1! #29057600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29058000 0! #29058500 1! #29058600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29059000 0! #29059500 1! #29059600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29060000 0! #29060500 1! #29060600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29061000 0! #29061500 1! #29061600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29062000 0! #29062500 1! #29062600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29063000 0! #29063500 1! #29063600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29064000 0! #29064500 1! #29064600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29065000 0! #29065500 1! #29065600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29066000 0! #29066500 1! #29066600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29067000 0! #29067500 1! #29067600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29068000 0! #29068500 1! #29068600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29069000 0! #29069500 1! #29069600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29070000 0! #29070500 1! #29070600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29071000 0! #29071500 1! #29071600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29072000 0! #29072500 1! #29072600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29073000 0! #29073500 1! #29073600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29074000 0! #29074500 1! #29074600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29075000 0! #29075500 1! #29075600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29076000 0! #29076500 1! #29076600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29077000 0! #29077500 1! #29077600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29078000 0! #29078500 1! #29078600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29079000 0! #29079500 1! #29079600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29080000 0! #29080500 1! #29080600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29081000 0! #29081500 1! #29081600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29082000 0! #29082500 1! #29082600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29083000 0! #29083500 1! #29083600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29084000 0! #29084500 1! #29084600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29085000 0! #29085500 1! #29085600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29086000 0! #29086500 1! #29086600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29087000 0! #29087500 1! #29087600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29088000 0! #29088500 1! #29088600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29089000 0! #29089500 1! #29089600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29090000 0! #29090500 1! #29090600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29091000 0! #29091500 1! #29091600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29092000 0! #29092500 1! #29092600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29093000 0! #29093500 1! #29093600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29094000 0! #29094500 1! #29094600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29095000 0! #29095500 1! #29095600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29096000 0! #29096500 1! #29096600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29097000 0! #29097500 1! #29097600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29098000 0! #29098500 1! #29098600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29099000 0! #29099500 1! #29099600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29100000 0! #29100500 1! #29100600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29101000 0! #29101500 1! #29101600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29102000 0! #29102500 1! #29102600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29103000 0! #29103500 1! #29103600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29104000 0! #29104500 1! #29104600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29105000 0! #29105500 1! #29105600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29106000 0! #29106500 1! #29106600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29107000 0! #29107500 1! #29107600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29108000 0! #29108500 1! #29108600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29109000 0! #29109500 1! #29109600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29110000 0! #29110500 1! #29110600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29111000 0! #29111500 1! #29111600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29112000 0! #29112500 1! #29112600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29113000 0! #29113500 1! #29113600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29114000 0! #29114500 1! #29114600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29115000 0! #29115500 1! #29115600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29116000 0! #29116500 1! #29116600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29117000 0! #29117500 1! #29117600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29118000 0! #29118500 1! #29118600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29119000 0! #29119500 1! #29119600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29120000 0! #29120500 1! #29120600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29121000 0! #29121500 1! #29121600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29122000 0! #29122500 1! #29122600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29123000 0! #29123500 1! #29123600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29124000 0! #29124500 1! #29124600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29125000 0! #29125500 1! #29125600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29126000 0! #29126500 1! #29126600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29127000 0! #29127500 1! #29127600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29128000 0! #29128500 1! #29128600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29129000 0! #29129500 1! #29129600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29130000 0! #29130500 1! #29130600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29131000 0! #29131500 1! #29131600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29132000 0! #29132500 1! #29132600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29133000 0! #29133500 1! #29133600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29134000 0! #29134500 1! #29134600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29135000 0! #29135500 1! #29135600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29136000 0! #29136500 1! #29136600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29137000 0! #29137500 1! #29137600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29138000 0! #29138500 1! #29138600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29139000 0! #29139500 1! #29139600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29140000 0! #29140500 1! #29140600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29141000 0! #29141500 1! #29141600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29142000 0! #29142500 1! #29142600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29143000 0! #29143500 1! #29143600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29144000 0! #29144500 1! #29144600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29145000 0! #29145500 1! #29145600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29146000 0! #29146500 1! #29146600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29147000 0! #29147500 1! #29147600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29148000 0! #29148500 1! #29148600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29149000 0! #29149500 1! #29149600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #29149700 1i b100 q 0j #29150000 0! #29150500 1! #29150600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29151000 0! #29151500 1! #29151600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H b11000011 C #29152000 0! #29152500 1! #29152600 b11000011 J xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29153000 0! #29153500 1! #29153600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B b11000001 C 1H #29154000 0! #29154500 1! #29154600 b11000001 J xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29155000 0! #29155500 1! #29155600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 0@ 1A 1B b10100101 C 1H #29156000 0! #29156500 1! #29156600 b10100101 K xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29157000 0! #29157500 1! #29157600 1E 1F 1G b100000 D 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B b11000001 C 1H #29158000 0! #29158500 1! #29158600 xE bx D x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29159000 0! #29159500 1! #29159600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H b11000011 C #29160000 0! #29160500 1! #29160600 b11000011 J xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29161000 0! #29161500 1! #29161600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29162000 0! #29162500 1! #29162600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29163000 0! #29163500 1! #29163600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29164000 0! #29164500 1! #29164600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29165000 0! #29165500 1! #29165600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29166000 0! #29166500 1! #29166600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29167000 0! #29167500 1! #29167600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29168000 0! #29168500 1! #29168600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29169000 0! #29169500 1! #29169600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29170000 0! #29170500 1! #29170600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29171000 0! #29171500 1! #29171600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29172000 0! #29172500 1! #29172600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29173000 0! #29173500 1! #29173600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29174000 0! #29174500 1! #29174600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29175000 0! #29175500 1! #29175600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29176000 0! #29176500 1! #29176600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29177000 0! #29177500 1! #29177600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29178000 0! #29178500 1! #29178600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29179000 0! #29179500 1! #29179600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29180000 0! #29180500 1! #29180600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29181000 0! #29181500 1! #29181600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29182000 0! #29182500 1! #29182600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29183000 0! #29183500 1! #29183600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29184000 0! #29184500 1! #29184600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29185000 0! #29185500 1! #29185600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29186000 0! #29186500 1! #29186600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29187000 0! #29187500 1! #29187600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29188000 0! #29188500 1! #29188600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29189000 0! #29189500 1! #29189600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29190000 0! #29190500 1! #29190600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29191000 0! #29191500 1! #29191600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29192000 0! #29192500 1! #29192600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29193000 0! #29193500 1! #29193600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29194000 0! #29194500 1! #29194600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29195000 0! #29195500 1! #29195600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29196000 0! #29196500 1! #29196600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29197000 0! #29197500 1! #29197600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29198000 0! #29198500 1! #29198600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29199000 0! #29199500 1! #29199600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29200000 0! #29200500 1! #29200600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29201000 0! #29201500 1! #29201600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29202000 0! #29202500 1! #29202600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29203000 0! #29203500 1! #29203600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29204000 0! #29204500 1! #29204600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29205000 0! #29205500 1! #29205600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29206000 0! #29206500 1! #29206600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29207000 0! #29207500 1! #29207600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29208000 0! #29208500 1! #29208600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29209000 0! #29209500 1! #29209600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29210000 0! #29210500 1! #29210600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29211000 0! #29211500 1! #29211600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29212000 0! #29212500 1! #29212600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29213000 0! #29213500 1! #29213600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29214000 0! #29214500 1! #29214600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29215000 0! #29215500 1! #29215600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29216000 0! #29216500 1! #29216600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29217000 0! #29217500 1! #29217600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29218000 0! #29218500 1! #29218600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29219000 0! #29219500 1! #29219600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29220000 0! #29220500 1! #29220600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29221000 0! #29221500 1! #29221600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29222000 0! #29222500 1! #29222600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29223000 0! #29223500 1! #29223600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29224000 0! #29224500 1! #29224600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29225000 0! #29225500 1! #29225600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29226000 0! #29226500 1! #29226600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29227000 0! #29227500 1! #29227600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29228000 0! #29228500 1! #29228600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29229000 0! #29229500 1! #29229600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29230000 0! #29230500 1! #29230600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29231000 0! #29231500 1! #29231600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29232000 0! #29232500 1! #29232600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29233000 0! #29233500 1! #29233600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29234000 0! #29234500 1! #29234600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29235000 0! #29235500 1! #29235600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29236000 0! #29236500 1! #29236600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29237000 0! #29237500 1! #29237600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29238000 0! #29238500 1! #29238600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29239000 0! #29239500 1! #29239600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29240000 0! #29240500 1! #29240600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29241000 0! #29241500 1! #29241600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29242000 0! #29242500 1! #29242600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29243000 0! #29243500 1! #29243600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29244000 0! #29244500 1! #29244600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29245000 0! #29245500 1! #29245600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29246000 0! #29246500 1! #29246600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29247000 0! #29247500 1! #29247600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29248000 0! #29248500 1! #29248600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29249000 0! #29249500 1! #29249600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29250000 0! #29250500 1! #29250600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29251000 0! #29251500 1! #29251600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1Q #29252000 0! #29252500 1! #29252600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29253000 0! #29253500 1! #29253600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29254000 0! #29254500 1! #29254600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29255000 0! #29255500 1! #29255600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29256000 0! #29256500 1! #29256600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29257000 0! #29257500 1! #29257600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29258000 0! #29258500 1! #29258600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29259000 0! #29259500 1! #29259600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29260000 0! #29260500 1! #29260600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29261000 0! #29261500 1! #29261600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29262000 0! #29262500 1! #29262600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29263000 0! #29263500 1! #29263600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29264000 0! #29264500 1! #29264600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29265000 0! #29265500 1! #29265600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29266000 0! #29266500 1! #29266600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29267000 0! #29267500 1! #29267600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29268000 0! #29268500 1! #29268600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29269000 0! #29269500 1! #29269600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29270000 0! #29270500 1! #29270600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29271000 0! #29271500 1! #29271600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29272000 0! #29272500 1! #29272600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29273000 0! #29273500 1! #29273600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29274000 0! #29274500 1! #29274600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29275000 0! #29275500 1! #29275600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29276000 0! #29276500 1! #29276600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29277000 0! #29277500 1! #29277600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29278000 0! #29278500 1! #29278600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29279000 0! #29279500 1! #29279600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29280000 0! #29280500 1! #29280600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29281000 0! #29281500 1! #29281600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29282000 0! #29282500 1! #29282600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29283000 0! #29283500 1! #29283600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29284000 0! #29284500 1! #29284600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29285000 0! #29285500 1! #29285600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29286000 0! #29286500 1! #29286600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29287000 0! #29287500 1! #29287600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29288000 0! #29288500 1! #29288600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29289000 0! #29289500 1! #29289600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29290000 0! #29290500 1! #29290600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29291000 0! #29291500 1! #29291600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29292000 0! #29292500 1! #29292600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29293000 0! #29293500 1! #29293600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29294000 0! #29294500 1! #29294600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29295000 0! #29295500 1! #29295600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29296000 0! #29296500 1! #29296600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29297000 0! #29297500 1! #29297600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29298000 0! #29298500 1! #29298600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29299000 0! #29299500 1! #29299600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29300000 0! #29300500 1! #29300600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29301000 0! #29301500 1! #29301600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29302000 0! #29302500 1! #29302600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #29302700 b10110101 ^ b10010100 c #29303000 0! #29303500 1! #29303600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29304000 0! #29304500 1! #29304600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29305000 0! #29305500 1! #29305600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29306000 0! #29306500 1! #29306600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29307000 0! #29307500 1! #29307600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29308000 0! #29308500 1! #29308600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29309000 0! #29309500 1! #29309600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29310000 0! #29310500 1! #29310600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29311000 0! #29311500 1! #29311600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29312000 0! #29312500 1! #29312600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29313000 0! #29313500 1! #29313600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29314000 0! #29314500 1! #29314600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29315000 0! #29315500 1! #29315600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29316000 0! #29316500 1! #29316600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29317000 0! #29317500 1! #29317600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29318000 0! #29318500 1! #29318600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29319000 0! #29319500 1! #29319600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29320000 0! #29320500 1! #29320600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29321000 0! #29321500 1! #29321600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29322000 0! #29322500 1! #29322600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29323000 0! #29323500 1! #29323600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29324000 0! #29324500 1! #29324600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29325000 0! #29325500 1! #29325600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29326000 0! #29326500 1! #29326600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29327000 0! #29327500 1! #29327600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29328000 0! #29328500 1! #29328600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29329000 0! #29329500 1! #29329600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29330000 0! #29330500 1! #29330600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29331000 0! #29331500 1! #29331600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29332000 0! #29332500 1! #29332600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29333000 0! #29333500 1! #29333600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29334000 0! #29334500 1! #29334600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29335000 0! #29335500 1! #29335600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29336000 0! #29336500 1! #29336600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29337000 0! #29337500 1! #29337600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29338000 0! #29338500 1! #29338600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29339000 0! #29339500 1! #29339600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29340000 0! #29340500 1! #29340600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29341000 0! #29341500 1! #29341600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29342000 0! #29342500 1! #29342600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29343000 0! #29343500 1! #29343600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29344000 0! #29344500 1! #29344600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29345000 0! #29345500 1! #29345600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29346000 0! #29346500 1! #29346600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29347000 0! #29347500 1! #29347600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29348000 0! #29348500 1! #29348600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29349000 0! #29349500 1! #29349600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29350000 0! #29350500 1! #29350600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29351000 0! #29351500 1! #29351600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29352000 0! #29352500 1! #29352600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29353000 0! #29353500 1! #29353600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29354000 0! #29354500 1! #29354600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29355000 0! #29355500 1! #29355600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29356000 0! #29356500 1! #29356600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29357000 0! #29357500 1! #29357600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29358000 0! #29358500 1! #29358600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29359000 0! #29359500 1! #29359600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29360000 0! #29360500 1! #29360600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29361000 0! #29361500 1! #29361600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29362000 0! #29362500 1! #29362600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29363000 0! #29363500 1! #29363600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29364000 0! #29364500 1! #29364600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29365000 0! #29365500 1! #29365600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29366000 0! #29366500 1! #29366600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29367000 0! #29367500 1! #29367600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29368000 0! #29368500 1! #29368600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29369000 0! #29369500 1! #29369600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29370000 0! #29370500 1! #29370600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29371000 0! #29371500 1! #29371600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29372000 0! #29372500 1! #29372600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29373000 0! #29373500 1! #29373600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29374000 0! #29374500 1! #29374600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29375000 0! #29375500 1! #29375600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29376000 0! #29376500 1! #29376600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29377000 0! #29377500 1! #29377600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29378000 0! #29378500 1! #29378600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29379000 0! #29379500 1! #29379600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29380000 0! #29380500 1! #29380600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29381000 0! #29381500 1! #29381600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29382000 0! #29382500 1! #29382600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29383000 0! #29383500 1! #29383600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29384000 0! #29384500 1! #29384600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29385000 0! #29385500 1! #29385600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29386000 0! #29386500 1! #29386600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29387000 0! #29387500 1! #29387600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29388000 0! #29388500 1! #29388600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29389000 0! #29389500 1! #29389600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29390000 0! #29390500 1! #29390600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29391000 0! #29391500 1! #29391600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29392000 0! #29392500 1! #29392600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29393000 0! #29393500 1! #29393600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29394000 0! #29394500 1! #29394600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29395000 0! #29395500 1! #29395600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29396000 0! #29396500 1! #29396600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29397000 0! #29397500 1! #29397600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29398000 0! #29398500 1! #29398600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29399000 0! #29399500 1! #29399600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29400000 0! #29400500 1! #29400600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29401000 0! #29401500 1! #29401600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29402000 0! #29402500 1! #29402600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29403000 0! #29403500 1! #29403600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29404000 0! #29404500 1! #29404600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #29404700 1j 0i 1O #29405000 0! #29405500 1! #29405600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29406000 0! #29406500 1! #29406600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29407000 0! #29407500 1! #29407600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29408000 0! #29408500 1! #29408600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29409000 0! #29409500 1! #29409600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29410000 0! #29410500 1! #29410600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29411000 0! #29411500 1! #29411600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29412000 0! #29412500 1! #29412600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29413000 0! #29413500 1! #29413600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29414000 0! #29414500 1! #29414600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29415000 0! #29415500 1! #29415600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29416000 0! #29416500 1! #29416600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29417000 0! #29417500 1! #29417600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29418000 0! #29418500 1! #29418600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29419000 0! #29419500 1! #29419600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29420000 0! #29420500 1! #29420600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29421000 0! #29421500 1! #29421600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29422000 0! #29422500 1! #29422600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29423000 0! #29423500 1! #29423600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29424000 0! #29424500 1! #29424600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29425000 0! #29425500 1! #29425600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29426000 0! #29426500 1! #29426600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29427000 0! #29427500 1! #29427600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29428000 0! #29428500 1! #29428600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29429000 0! #29429500 1! #29429600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29430000 0! #29430500 1! #29430600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29431000 0! #29431500 1! #29431600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29432000 0! #29432500 1! #29432600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29433000 0! #29433500 1! #29433600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29434000 0! #29434500 1! #29434600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29435000 0! #29435500 1! #29435600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29436000 0! #29436500 1! #29436600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29437000 0! #29437500 1! #29437600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29438000 0! #29438500 1! #29438600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29439000 0! #29439500 1! #29439600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29440000 0! #29440500 1! #29440600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29441000 0! #29441500 1! #29441600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29442000 0! #29442500 1! #29442600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29443000 0! #29443500 1! #29443600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29444000 0! #29444500 1! #29444600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29445000 0! #29445500 1! #29445600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29446000 0! #29446500 1! #29446600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29447000 0! #29447500 1! #29447600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29448000 0! #29448500 1! #29448600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29449000 0! #29449500 1! #29449600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29450000 0! #29450500 1! #29450600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29451000 0! #29451500 1! #29451600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29452000 0! #29452500 1! #29452600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29453000 0! #29453500 1! #29453600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29454000 0! #29454500 1! #29454600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29455000 0! #29455500 1! #29455600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29456000 0! #29456500 1! #29456600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29457000 0! #29457500 1! #29457600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29458000 0! #29458500 1! #29458600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29459000 0! #29459500 1! #29459600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29460000 0! #29460500 1! #29460600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29461000 0! #29461500 1! #29461600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29462000 0! #29462500 1! #29462600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29463000 0! #29463500 1! #29463600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29464000 0! #29464500 1! #29464600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29465000 0! #29465500 1! #29465600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29466000 0! #29466500 1! #29466600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29467000 0! #29467500 1! #29467600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29468000 0! #29468500 1! #29468600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29469000 0! #29469500 1! #29469600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29470000 0! #29470500 1! #29470600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29471000 0! #29471500 1! #29471600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29472000 0! #29472500 1! #29472600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29473000 0! #29473500 1! #29473600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29474000 0! #29474500 1! #29474600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29475000 0! #29475500 1! #29475600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29476000 0! #29476500 1! #29476600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29477000 0! #29477500 1! #29477600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29478000 0! #29478500 1! #29478600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29479000 0! #29479500 1! #29479600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29480000 0! #29480500 1! #29480600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29481000 0! #29481500 1! #29481600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29482000 0! #29482500 1! #29482600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29483000 0! #29483500 1! #29483600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29484000 0! #29484500 1! #29484600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29485000 0! #29485500 1! #29485600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29486000 0! #29486500 1! #29486600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29487000 0! #29487500 1! #29487600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29488000 0! #29488500 1! #29488600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29489000 0! #29489500 1! #29489600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29490000 0! #29490500 1! #29490600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29491000 0! #29491500 1! #29491600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29492000 0! #29492500 1! #29492600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29493000 0! #29493500 1! #29493600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29494000 0! #29494500 1! #29494600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29495000 0! #29495500 1! #29495600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29496000 0! #29496500 1! #29496600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29497000 0! #29497500 1! #29497600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29498000 0! #29498500 1! #29498600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29499000 0! #29499500 1! #29499600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29500000 0! #29500500 1! #29500600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29501000 0! #29501500 1! #29501600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29502000 0! #29502500 1! #29502600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29503000 0! #29503500 1! #29503600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29504000 0! #29504500 1! #29504600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29505000 0! #29505500 1! #29505600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29506000 0! #29506500 1! #29506600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29507000 0! #29507500 1! #29507600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29508000 0! #29508500 1! #29508600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29509000 0! #29509500 1! #29509600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29510000 0! #29510500 1! #29510600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29511000 0! #29511500 1! #29511600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29512000 0! #29512500 1! #29512600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29513000 0! #29513500 1! #29513600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29514000 0! #29514500 1! #29514600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29515000 0! #29515500 1! #29515600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29516000 0! #29516500 1! #29516600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29517000 0! #29517500 1! #29517600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29518000 0! #29518500 1! #29518600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29519000 0! #29519500 1! #29519600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29520000 0! #29520500 1! #29520600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29521000 0! #29521500 1! #29521600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29522000 0! #29522500 1! #29522600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29523000 0! #29523500 1! #29523600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29524000 0! #29524500 1! #29524600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29525000 0! #29525500 1! #29525600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29526000 0! #29526500 1! #29526600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29527000 0! #29527500 1! #29527600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29528000 0! #29528500 1! #29528600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29529000 0! #29529500 1! #29529600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29530000 0! #29530500 1! #29530600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29531000 0! #29531500 1! #29531600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29532000 0! #29532500 1! #29532600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29533000 0! #29533500 1! #29533600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29534000 0! #29534500 1! #29534600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29535000 0! #29535500 1! #29535600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29536000 0! #29536500 1! #29536600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29537000 0! #29537500 1! #29537600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29538000 0! #29538500 1! #29538600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29539000 0! #29539500 1! #29539600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29540000 0! #29540500 1! #29540600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29541000 0! #29541500 1! #29541600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29542000 0! #29542500 1! #29542600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29543000 0! #29543500 1! #29543600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29544000 0! #29544500 1! #29544600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29545000 0! #29545500 1! #29545600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29546000 0! #29546500 1! #29546600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29547000 0! #29547500 1! #29547600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29548000 0! #29548500 1! #29548600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29549000 0! #29549500 1! #29549600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29550000 0! #29550500 1! #29550600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29551000 0! #29551500 1! #29551600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29552000 0! #29552500 1! #29552600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29553000 0! #29553500 1! #29553600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29554000 0! #29554500 1! #29554600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29555000 0! #29555500 1! #29555600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29556000 0! #29556500 1! #29556600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29557000 0! #29557500 1! #29557600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #29557700 b1101011 ^ b110 g b101001 c #29558000 0! #29558500 1! #29558600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29559000 0! #29559500 1! #29559600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29560000 0! #29560500 1! #29560600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29561000 0! #29561500 1! #29561600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29562000 0! #29562500 1! #29562600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29563000 0! #29563500 1! #29563600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29564000 0! #29564500 1! #29564600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29565000 0! #29565500 1! #29565600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29566000 0! #29566500 1! #29566600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29567000 0! #29567500 1! #29567600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29568000 0! #29568500 1! #29568600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29569000 0! #29569500 1! #29569600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29570000 0! #29570500 1! #29570600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29571000 0! #29571500 1! #29571600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29572000 0! #29572500 1! #29572600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29573000 0! #29573500 1! #29573600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29574000 0! #29574500 1! #29574600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29575000 0! #29575500 1! #29575600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29576000 0! #29576500 1! #29576600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29577000 0! #29577500 1! #29577600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29578000 0! #29578500 1! #29578600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29579000 0! #29579500 1! #29579600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29580000 0! #29580500 1! #29580600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29581000 0! #29581500 1! #29581600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29582000 0! #29582500 1! #29582600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29583000 0! #29583500 1! #29583600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29584000 0! #29584500 1! #29584600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29585000 0! #29585500 1! #29585600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29586000 0! #29586500 1! #29586600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29587000 0! #29587500 1! #29587600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29588000 0! #29588500 1! #29588600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29589000 0! #29589500 1! #29589600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29590000 0! #29590500 1! #29590600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29591000 0! #29591500 1! #29591600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29592000 0! #29592500 1! #29592600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29593000 0! #29593500 1! #29593600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29594000 0! #29594500 1! #29594600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29595000 0! #29595500 1! #29595600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29596000 0! #29596500 1! #29596600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29597000 0! #29597500 1! #29597600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29598000 0! #29598500 1! #29598600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29599000 0! #29599500 1! #29599600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29600000 0! #29600500 1! #29600600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29601000 0! #29601500 1! #29601600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29602000 0! #29602500 1! #29602600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29603000 0! #29603500 1! #29603600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29604000 0! #29604500 1! #29604600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29605000 0! #29605500 1! #29605600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29606000 0! #29606500 1! #29606600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29607000 0! #29607500 1! #29607600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29608000 0! #29608500 1! #29608600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29609000 0! #29609500 1! #29609600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29610000 0! #29610500 1! #29610600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29611000 0! #29611500 1! #29611600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29612000 0! #29612500 1! #29612600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29613000 0! #29613500 1! #29613600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29614000 0! #29614500 1! #29614600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29615000 0! #29615500 1! #29615600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29616000 0! #29616500 1! #29616600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29617000 0! #29617500 1! #29617600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29618000 0! #29618500 1! #29618600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29619000 0! #29619500 1! #29619600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29620000 0! #29620500 1! #29620600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29621000 0! #29621500 1! #29621600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29622000 0! #29622500 1! #29622600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29623000 0! #29623500 1! #29623600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29624000 0! #29624500 1! #29624600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29625000 0! #29625500 1! #29625600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29626000 0! #29626500 1! #29626600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29627000 0! #29627500 1! #29627600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29628000 0! #29628500 1! #29628600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29629000 0! #29629500 1! #29629600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29630000 0! #29630500 1! #29630600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29631000 0! #29631500 1! #29631600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29632000 0! #29632500 1! #29632600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29633000 0! #29633500 1! #29633600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29634000 0! #29634500 1! #29634600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29635000 0! #29635500 1! #29635600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29636000 0! #29636500 1! #29636600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29637000 0! #29637500 1! #29637600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29638000 0! #29638500 1! #29638600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29639000 0! #29639500 1! #29639600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29640000 0! #29640500 1! #29640600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29641000 0! #29641500 1! #29641600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29642000 0! #29642500 1! #29642600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29643000 0! #29643500 1! #29643600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29644000 0! #29644500 1! #29644600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29645000 0! #29645500 1! #29645600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29646000 0! #29646500 1! #29646600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29647000 0! #29647500 1! #29647600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29648000 0! #29648500 1! #29648600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29649000 0! #29649500 1! #29649600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29650000 0! #29650500 1! #29650600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29651000 0! #29651500 1! #29651600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29652000 0! #29652500 1! #29652600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29653000 0! #29653500 1! #29653600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29654000 0! #29654500 1! #29654600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29655000 0! #29655500 1! #29655600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29656000 0! #29656500 1! #29656600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29657000 0! #29657500 1! #29657600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29658000 0! #29658500 1! #29658600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29659000 0! #29659500 1! #29659600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #29659700 0j 0O #29660000 0! #29660500 1! #29660600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29661000 0! #29661500 1! #29661600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29662000 0! #29662500 1! #29662600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29663000 0! #29663500 1! #29663600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29664000 0! #29664500 1! #29664600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29665000 0! #29665500 1! #29665600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29666000 0! #29666500 1! #29666600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29667000 0! #29667500 1! #29667600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29668000 0! #29668500 1! #29668600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29669000 0! #29669500 1! #29669600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29670000 0! #29670500 1! #29670600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29671000 0! #29671500 1! #29671600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29672000 0! #29672500 1! #29672600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29673000 0! #29673500 1! #29673600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29674000 0! #29674500 1! #29674600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29675000 0! #29675500 1! #29675600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29676000 0! #29676500 1! #29676600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29677000 0! #29677500 1! #29677600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29678000 0! #29678500 1! #29678600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29679000 0! #29679500 1! #29679600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29680000 0! #29680500 1! #29680600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29681000 0! #29681500 1! #29681600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29682000 0! #29682500 1! #29682600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29683000 0! #29683500 1! #29683600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29684000 0! #29684500 1! #29684600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29685000 0! #29685500 1! #29685600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29686000 0! #29686500 1! #29686600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29687000 0! #29687500 1! #29687600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29688000 0! #29688500 1! #29688600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29689000 0! #29689500 1! #29689600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29690000 0! #29690500 1! #29690600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29691000 0! #29691500 1! #29691600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29692000 0! #29692500 1! #29692600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29693000 0! #29693500 1! #29693600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29694000 0! #29694500 1! #29694600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29695000 0! #29695500 1! #29695600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29696000 0! #29696500 1! #29696600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29697000 0! #29697500 1! #29697600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29698000 0! #29698500 1! #29698600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29699000 0! #29699500 1! #29699600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29700000 0! #29700500 1! #29700600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29701000 0! #29701500 1! #29701600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29702000 0! #29702500 1! #29702600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29703000 0! #29703500 1! #29703600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29704000 0! #29704500 1! #29704600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29705000 0! #29705500 1! #29705600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29706000 0! #29706500 1! #29706600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29707000 0! #29707500 1! #29707600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29708000 0! #29708500 1! #29708600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29709000 0! #29709500 1! #29709600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29710000 0! #29710500 1! #29710600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29711000 0! #29711500 1! #29711600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29712000 0! #29712500 1! #29712600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29713000 0! #29713500 1! #29713600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29714000 0! #29714500 1! #29714600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29715000 0! #29715500 1! #29715600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29716000 0! #29716500 1! #29716600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29717000 0! #29717500 1! #29717600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29718000 0! #29718500 1! #29718600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29719000 0! #29719500 1! #29719600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29720000 0! #29720500 1! #29720600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29721000 0! #29721500 1! #29721600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29722000 0! #29722500 1! #29722600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29723000 0! #29723500 1! #29723600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29724000 0! #29724500 1! #29724600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29725000 0! #29725500 1! #29725600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29726000 0! #29726500 1! #29726600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29727000 0! #29727500 1! #29727600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29728000 0! #29728500 1! #29728600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29729000 0! #29729500 1! #29729600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29730000 0! #29730500 1! #29730600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29731000 0! #29731500 1! #29731600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29732000 0! #29732500 1! #29732600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29733000 0! #29733500 1! #29733600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29734000 0! #29734500 1! #29734600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29735000 0! #29735500 1! #29735600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29736000 0! #29736500 1! #29736600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29737000 0! #29737500 1! #29737600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29738000 0! #29738500 1! #29738600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29739000 0! #29739500 1! #29739600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29740000 0! #29740500 1! #29740600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29741000 0! #29741500 1! #29741600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29742000 0! #29742500 1! #29742600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29743000 0! #29743500 1! #29743600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29744000 0! #29744500 1! #29744600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29745000 0! #29745500 1! #29745600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29746000 0! #29746500 1! #29746600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29747000 0! #29747500 1! #29747600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29748000 0! #29748500 1! #29748600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29749000 0! #29749500 1! #29749600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29750000 0! #29750500 1! #29750600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29751000 0! #29751500 1! #29751600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29752000 0! #29752500 1! #29752600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29753000 0! #29753500 1! #29753600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29754000 0! #29754500 1! #29754600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29755000 0! #29755500 1! #29755600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29756000 0! #29756500 1! #29756600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29757000 0! #29757500 1! #29757600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29758000 0! #29758500 1! #29758600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29759000 0! #29759500 1! #29759600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29760000 0! #29760500 1! #29760600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29761000 0! #29761500 1! #29761600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29762000 0! #29762500 1! #29762600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29763000 0! #29763500 1! #29763600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29764000 0! #29764500 1! #29764600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29765000 0! #29765500 1! #29765600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29766000 0! #29766500 1! #29766600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29767000 0! #29767500 1! #29767600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29768000 0! #29768500 1! #29768600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29769000 0! #29769500 1! #29769600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29770000 0! #29770500 1! #29770600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29771000 0! #29771500 1! #29771600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29772000 0! #29772500 1! #29772600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29773000 0! #29773500 1! #29773600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29774000 0! #29774500 1! #29774600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29775000 0! #29775500 1! #29775600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29776000 0! #29776500 1! #29776600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29777000 0! #29777500 1! #29777600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29778000 0! #29778500 1! #29778600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29779000 0! #29779500 1! #29779600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29780000 0! #29780500 1! #29780600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29781000 0! #29781500 1! #29781600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29782000 0! #29782500 1! #29782600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29783000 0! #29783500 1! #29783600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29784000 0! #29784500 1! #29784600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29785000 0! #29785500 1! #29785600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29786000 0! #29786500 1! #29786600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29787000 0! #29787500 1! #29787600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29788000 0! #29788500 1! #29788600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29789000 0! #29789500 1! #29789600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29790000 0! #29790500 1! #29790600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29791000 0! #29791500 1! #29791600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29792000 0! #29792500 1! #29792600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29793000 0! #29793500 1! #29793600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29794000 0! #29794500 1! #29794600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29795000 0! #29795500 1! #29795600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29796000 0! #29796500 1! #29796600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29797000 0! #29797500 1! #29797600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29798000 0! #29798500 1! #29798600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29799000 0! #29799500 1! #29799600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29800000 0! #29800500 1! #29800600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29801000 0! #29801500 1! #29801600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29802000 0! #29802500 1! #29802600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29803000 0! #29803500 1! #29803600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29804000 0! #29804500 1! #29804600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29805000 0! #29805500 1! #29805600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29806000 0! #29806500 1! #29806600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29807000 0! #29807500 1! #29807600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29808000 0! #29808500 1! #29808600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29809000 0! #29809500 1! #29809600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29810000 0! #29810500 1! #29810600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29811000 0! #29811500 1! #29811600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29812000 0! #29812500 1! #29812600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #29812700 b11010111 ^ b101 g b1010010 c #29813000 0! #29813500 1! #29813600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29814000 0! #29814500 1! #29814600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29815000 0! #29815500 1! #29815600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29816000 0! #29816500 1! #29816600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29817000 0! #29817500 1! #29817600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29818000 0! #29818500 1! #29818600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29819000 0! #29819500 1! #29819600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29820000 0! #29820500 1! #29820600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29821000 0! #29821500 1! #29821600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29822000 0! #29822500 1! #29822600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29823000 0! #29823500 1! #29823600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29824000 0! #29824500 1! #29824600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29825000 0! #29825500 1! #29825600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29826000 0! #29826500 1! #29826600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29827000 0! #29827500 1! #29827600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29828000 0! #29828500 1! #29828600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29829000 0! #29829500 1! #29829600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29830000 0! #29830500 1! #29830600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29831000 0! #29831500 1! #29831600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29832000 0! #29832500 1! #29832600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29833000 0! #29833500 1! #29833600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29834000 0! #29834500 1! #29834600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29835000 0! #29835500 1! #29835600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29836000 0! #29836500 1! #29836600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29837000 0! #29837500 1! #29837600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29838000 0! #29838500 1! #29838600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29839000 0! #29839500 1! #29839600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29840000 0! #29840500 1! #29840600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29841000 0! #29841500 1! #29841600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29842000 0! #29842500 1! #29842600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29843000 0! #29843500 1! #29843600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29844000 0! #29844500 1! #29844600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29845000 0! #29845500 1! #29845600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29846000 0! #29846500 1! #29846600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29847000 0! #29847500 1! #29847600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29848000 0! #29848500 1! #29848600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29849000 0! #29849500 1! #29849600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29850000 0! #29850500 1! #29850600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29851000 0! #29851500 1! #29851600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29852000 0! #29852500 1! #29852600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29853000 0! #29853500 1! #29853600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29854000 0! #29854500 1! #29854600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29855000 0! #29855500 1! #29855600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29856000 0! #29856500 1! #29856600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29857000 0! #29857500 1! #29857600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29858000 0! #29858500 1! #29858600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29859000 0! #29859500 1! #29859600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29860000 0! #29860500 1! #29860600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29861000 0! #29861500 1! #29861600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29862000 0! #29862500 1! #29862600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29863000 0! #29863500 1! #29863600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29864000 0! #29864500 1! #29864600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29865000 0! #29865500 1! #29865600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29866000 0! #29866500 1! #29866600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29867000 0! #29867500 1! #29867600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29868000 0! #29868500 1! #29868600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29869000 0! #29869500 1! #29869600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29870000 0! #29870500 1! #29870600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29871000 0! #29871500 1! #29871600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29872000 0! #29872500 1! #29872600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29873000 0! #29873500 1! #29873600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29874000 0! #29874500 1! #29874600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29875000 0! #29875500 1! #29875600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29876000 0! #29876500 1! #29876600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29877000 0! #29877500 1! #29877600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29878000 0! #29878500 1! #29878600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29879000 0! #29879500 1! #29879600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29880000 0! #29880500 1! #29880600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29881000 0! #29881500 1! #29881600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29882000 0! #29882500 1! #29882600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29883000 0! #29883500 1! #29883600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29884000 0! #29884500 1! #29884600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29885000 0! #29885500 1! #29885600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29886000 0! #29886500 1! #29886600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29887000 0! #29887500 1! #29887600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29888000 0! #29888500 1! #29888600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29889000 0! #29889500 1! #29889600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29890000 0! #29890500 1! #29890600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29891000 0! #29891500 1! #29891600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29892000 0! #29892500 1! #29892600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29893000 0! #29893500 1! #29893600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29894000 0! #29894500 1! #29894600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29895000 0! #29895500 1! #29895600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29896000 0! #29896500 1! #29896600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29897000 0! #29897500 1! #29897600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29898000 0! #29898500 1! #29898600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29899000 0! #29899500 1! #29899600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29900000 0! #29900500 1! #29900600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29901000 0! #29901500 1! #29901600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29902000 0! #29902500 1! #29902600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29903000 0! #29903500 1! #29903600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29904000 0! #29904500 1! #29904600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29905000 0! #29905500 1! #29905600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29906000 0! #29906500 1! #29906600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29907000 0! #29907500 1! #29907600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29908000 0! #29908500 1! #29908600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29909000 0! #29909500 1! #29909600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29910000 0! #29910500 1! #29910600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29911000 0! #29911500 1! #29911600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29912000 0! #29912500 1! #29912600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29913000 0! #29913500 1! #29913600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29914000 0! #29914500 1! #29914600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #29914700 1j 1O #29915000 0! #29915500 1! #29915600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29916000 0! #29916500 1! #29916600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29917000 0! #29917500 1! #29917600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29918000 0! #29918500 1! #29918600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29919000 0! #29919500 1! #29919600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29920000 0! #29920500 1! #29920600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29921000 0! #29921500 1! #29921600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29922000 0! #29922500 1! #29922600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29923000 0! #29923500 1! #29923600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29924000 0! #29924500 1! #29924600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29925000 0! #29925500 1! #29925600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29926000 0! #29926500 1! #29926600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29927000 0! #29927500 1! #29927600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29928000 0! #29928500 1! #29928600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29929000 0! #29929500 1! #29929600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29930000 0! #29930500 1! #29930600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29931000 0! #29931500 1! #29931600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29932000 0! #29932500 1! #29932600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29933000 0! #29933500 1! #29933600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29934000 0! #29934500 1! #29934600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29935000 0! #29935500 1! #29935600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29936000 0! #29936500 1! #29936600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29937000 0! #29937500 1! #29937600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29938000 0! #29938500 1! #29938600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29939000 0! #29939500 1! #29939600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29940000 0! #29940500 1! #29940600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29941000 0! #29941500 1! #29941600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29942000 0! #29942500 1! #29942600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29943000 0! #29943500 1! #29943600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29944000 0! #29944500 1! #29944600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29945000 0! #29945500 1! #29945600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29946000 0! #29946500 1! #29946600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29947000 0! #29947500 1! #29947600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29948000 0! #29948500 1! #29948600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29949000 0! #29949500 1! #29949600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29950000 0! #29950500 1! #29950600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29951000 0! #29951500 1! #29951600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29952000 0! #29952500 1! #29952600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29953000 0! #29953500 1! #29953600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29954000 0! #29954500 1! #29954600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29955000 0! #29955500 1! #29955600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29956000 0! #29956500 1! #29956600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29957000 0! #29957500 1! #29957600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29958000 0! #29958500 1! #29958600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29959000 0! #29959500 1! #29959600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29960000 0! #29960500 1! #29960600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29961000 0! #29961500 1! #29961600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29962000 0! #29962500 1! #29962600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29963000 0! #29963500 1! #29963600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29964000 0! #29964500 1! #29964600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29965000 0! #29965500 1! #29965600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29966000 0! #29966500 1! #29966600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29967000 0! #29967500 1! #29967600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29968000 0! #29968500 1! #29968600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29969000 0! #29969500 1! #29969600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29970000 0! #29970500 1! #29970600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29971000 0! #29971500 1! #29971600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29972000 0! #29972500 1! #29972600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29973000 0! #29973500 1! #29973600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29974000 0! #29974500 1! #29974600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29975000 0! #29975500 1! #29975600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29976000 0! #29976500 1! #29976600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29977000 0! #29977500 1! #29977600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29978000 0! #29978500 1! #29978600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29979000 0! #29979500 1! #29979600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29980000 0! #29980500 1! #29980600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29981000 0! #29981500 1! #29981600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29982000 0! #29982500 1! #29982600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29983000 0! #29983500 1! #29983600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29984000 0! #29984500 1! #29984600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29985000 0! #29985500 1! #29985600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29986000 0! #29986500 1! #29986600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29987000 0! #29987500 1! #29987600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29988000 0! #29988500 1! #29988600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29989000 0! #29989500 1! #29989600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29990000 0! #29990500 1! #29990600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29991000 0! #29991500 1! #29991600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29992000 0! #29992500 1! #29992600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29993000 0! #29993500 1! #29993600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29994000 0! #29994500 1! #29994600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29995000 0! #29995500 1! #29995600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29996000 0! #29996500 1! #29996600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29997000 0! #29997500 1! #29997600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #29998000 0! #29998500 1! #29998600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #29999000 0! #29999500 1! #29999600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30000000 0! #30000500 1! #30000600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30001000 0! #30001500 1! #30001600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30002000 0! #30002500 1! #30002600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30003000 0! #30003500 1! #30003600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30004000 0! #30004500 1! #30004600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30005000 0! #30005500 1! #30005600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30006000 0! #30006500 1! #30006600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30007000 0! #30007500 1! #30007600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30008000 0! #30008500 1! #30008600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30009000 0! #30009500 1! #30009600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30010000 0! #30010500 1! #30010600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30011000 0! #30011500 1! #30011600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30012000 0! #30012500 1! #30012600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30013000 0! #30013500 1! #30013600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30014000 0! #30014500 1! #30014600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30015000 0! #30015500 1! #30015600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30016000 0! #30016500 1! #30016600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30017000 0! #30017500 1! #30017600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30018000 0! #30018500 1! #30018600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30019000 0! #30019500 1! #30019600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30020000 0! #30020500 1! #30020600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30021000 0! #30021500 1! #30021600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30022000 0! #30022500 1! #30022600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30023000 0! #30023500 1! #30023600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30024000 0! #30024500 1! #30024600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30025000 0! #30025500 1! #30025600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30026000 0! #30026500 1! #30026600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30027000 0! #30027500 1! #30027600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30028000 0! #30028500 1! #30028600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30029000 0! #30029500 1! #30029600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30030000 0! #30030500 1! #30030600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30031000 0! #30031500 1! #30031600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30032000 0! #30032500 1! #30032600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30033000 0! #30033500 1! #30033600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30034000 0! #30034500 1! #30034600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30035000 0! #30035500 1! #30035600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30036000 0! #30036500 1! #30036600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30037000 0! #30037500 1! #30037600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30038000 0! #30038500 1! #30038600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30039000 0! #30039500 1! #30039600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30040000 0! #30040500 1! #30040600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30041000 0! #30041500 1! #30041600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30042000 0! #30042500 1! #30042600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30043000 0! #30043500 1! #30043600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30044000 0! #30044500 1! #30044600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30045000 0! #30045500 1! #30045600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30046000 0! #30046500 1! #30046600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30047000 0! #30047500 1! #30047600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30048000 0! #30048500 1! #30048600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30049000 0! #30049500 1! #30049600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30050000 0! #30050500 1! #30050600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30051000 0! #30051500 1! #30051600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30052000 0! #30052500 1! #30052600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30053000 0! #30053500 1! #30053600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30054000 0! #30054500 1! #30054600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30055000 0! #30055500 1! #30055600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30056000 0! #30056500 1! #30056600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30057000 0! #30057500 1! #30057600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30058000 0! #30058500 1! #30058600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30059000 0! #30059500 1! #30059600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30060000 0! #30060500 1! #30060600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30061000 0! #30061500 1! #30061600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30062000 0! #30062500 1! #30062600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30063000 0! #30063500 1! #30063600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30064000 0! #30064500 1! #30064600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30065000 0! #30065500 1! #30065600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30066000 0! #30066500 1! #30066600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30067000 0! #30067500 1! #30067600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #30067700 b10101111 ^ b100 g b10100101 c #30068000 0! #30068500 1! #30068600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30069000 0! #30069500 1! #30069600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30070000 0! #30070500 1! #30070600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30071000 0! #30071500 1! #30071600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30072000 0! #30072500 1! #30072600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30073000 0! #30073500 1! #30073600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30074000 0! #30074500 1! #30074600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30075000 0! #30075500 1! #30075600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30076000 0! #30076500 1! #30076600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30077000 0! #30077500 1! #30077600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30078000 0! #30078500 1! #30078600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30079000 0! #30079500 1! #30079600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30080000 0! #30080500 1! #30080600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30081000 0! #30081500 1! #30081600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30082000 0! #30082500 1! #30082600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30083000 0! #30083500 1! #30083600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30084000 0! #30084500 1! #30084600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30085000 0! #30085500 1! #30085600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30086000 0! #30086500 1! #30086600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30087000 0! #30087500 1! #30087600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30088000 0! #30088500 1! #30088600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30089000 0! #30089500 1! #30089600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30090000 0! #30090500 1! #30090600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30091000 0! #30091500 1! #30091600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30092000 0! #30092500 1! #30092600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30093000 0! #30093500 1! #30093600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30094000 0! #30094500 1! #30094600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30095000 0! #30095500 1! #30095600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30096000 0! #30096500 1! #30096600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30097000 0! #30097500 1! #30097600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30098000 0! #30098500 1! #30098600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30099000 0! #30099500 1! #30099600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30100000 0! #30100500 1! #30100600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30101000 0! #30101500 1! #30101600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30102000 0! #30102500 1! #30102600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30103000 0! #30103500 1! #30103600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30104000 0! #30104500 1! #30104600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30105000 0! #30105500 1! #30105600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30106000 0! #30106500 1! #30106600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30107000 0! #30107500 1! #30107600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30108000 0! #30108500 1! #30108600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30109000 0! #30109500 1! #30109600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30110000 0! #30110500 1! #30110600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30111000 0! #30111500 1! #30111600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30112000 0! #30112500 1! #30112600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30113000 0! #30113500 1! #30113600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30114000 0! #30114500 1! #30114600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30115000 0! #30115500 1! #30115600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30116000 0! #30116500 1! #30116600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30117000 0! #30117500 1! #30117600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30118000 0! #30118500 1! #30118600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30119000 0! #30119500 1! #30119600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30120000 0! #30120500 1! #30120600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30121000 0! #30121500 1! #30121600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30122000 0! #30122500 1! #30122600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30123000 0! #30123500 1! #30123600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30124000 0! #30124500 1! #30124600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30125000 0! #30125500 1! #30125600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30126000 0! #30126500 1! #30126600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30127000 0! #30127500 1! #30127600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30128000 0! #30128500 1! #30128600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30129000 0! #30129500 1! #30129600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30130000 0! #30130500 1! #30130600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30131000 0! #30131500 1! #30131600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30132000 0! #30132500 1! #30132600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30133000 0! #30133500 1! #30133600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30134000 0! #30134500 1! #30134600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30135000 0! #30135500 1! #30135600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30136000 0! #30136500 1! #30136600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30137000 0! #30137500 1! #30137600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30138000 0! #30138500 1! #30138600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30139000 0! #30139500 1! #30139600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30140000 0! #30140500 1! #30140600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30141000 0! #30141500 1! #30141600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30142000 0! #30142500 1! #30142600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30143000 0! #30143500 1! #30143600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30144000 0! #30144500 1! #30144600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30145000 0! #30145500 1! #30145600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30146000 0! #30146500 1! #30146600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30147000 0! #30147500 1! #30147600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30148000 0! #30148500 1! #30148600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30149000 0! #30149500 1! #30149600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30150000 0! #30150500 1! #30150600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30151000 0! #30151500 1! #30151600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30152000 0! #30152500 1! #30152600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30153000 0! #30153500 1! #30153600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30154000 0! #30154500 1! #30154600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30155000 0! #30155500 1! #30155600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30156000 0! #30156500 1! #30156600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30157000 0! #30157500 1! #30157600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30158000 0! #30158500 1! #30158600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30159000 0! #30159500 1! #30159600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30160000 0! #30160500 1! #30160600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30161000 0! #30161500 1! #30161600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30162000 0! #30162500 1! #30162600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30163000 0! #30163500 1! #30163600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30164000 0! #30164500 1! #30164600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30165000 0! #30165500 1! #30165600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30166000 0! #30166500 1! #30166600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30167000 0! #30167500 1! #30167600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30168000 0! #30168500 1! #30168600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30169000 0! #30169500 1! #30169600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #30170000 0! #30170500 1! #30170600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30171000 0! #30171500 1! #30171600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30172000 0! #30172500 1! #30172600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30173000 0! #30173500 1! #30173600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30174000 0! #30174500 1! #30174600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30175000 0! #30175500 1! #30175600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30176000 0! #30176500 1! #30176600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30177000 0! #30177500 1! #30177600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30178000 0! #30178500 1! #30178600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30179000 0! #30179500 1! #30179600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30180000 0! #30180500 1! #30180600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30181000 0! #30181500 1! #30181600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30182000 0! #30182500 1! #30182600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30183000 0! #30183500 1! #30183600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30184000 0! #30184500 1! #30184600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30185000 0! #30185500 1! #30185600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30186000 0! #30186500 1! #30186600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30187000 0! #30187500 1! #30187600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30188000 0! #30188500 1! #30188600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30189000 0! #30189500 1! #30189600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30190000 0! #30190500 1! #30190600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30191000 0! #30191500 1! #30191600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30192000 0! #30192500 1! #30192600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30193000 0! #30193500 1! #30193600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30194000 0! #30194500 1! #30194600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30195000 0! #30195500 1! #30195600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30196000 0! #30196500 1! #30196600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30197000 0! #30197500 1! #30197600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30198000 0! #30198500 1! #30198600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30199000 0! #30199500 1! #30199600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30200000 0! #30200500 1! #30200600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30201000 0! #30201500 1! #30201600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30202000 0! #30202500 1! #30202600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30203000 0! #30203500 1! #30203600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30204000 0! #30204500 1! #30204600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30205000 0! #30205500 1! #30205600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30206000 0! #30206500 1! #30206600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30207000 0! #30207500 1! #30207600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30208000 0! #30208500 1! #30208600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30209000 0! #30209500 1! #30209600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30210000 0! #30210500 1! #30210600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30211000 0! #30211500 1! #30211600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30212000 0! #30212500 1! #30212600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30213000 0! #30213500 1! #30213600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30214000 0! #30214500 1! #30214600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30215000 0! #30215500 1! #30215600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30216000 0! #30216500 1! #30216600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30217000 0! #30217500 1! #30217600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30218000 0! #30218500 1! #30218600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30219000 0! #30219500 1! #30219600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30220000 0! #30220500 1! #30220600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30221000 0! #30221500 1! #30221600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30222000 0! #30222500 1! #30222600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30223000 0! #30223500 1! #30223600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30224000 0! #30224500 1! #30224600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30225000 0! #30225500 1! #30225600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30226000 0! #30226500 1! #30226600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30227000 0! #30227500 1! #30227600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30228000 0! #30228500 1! #30228600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30229000 0! #30229500 1! #30229600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30230000 0! #30230500 1! #30230600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30231000 0! #30231500 1! #30231600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30232000 0! #30232500 1! #30232600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30233000 0! #30233500 1! #30233600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30234000 0! #30234500 1! #30234600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30235000 0! #30235500 1! #30235600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30236000 0! #30236500 1! #30236600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30237000 0! #30237500 1! #30237600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30238000 0! #30238500 1! #30238600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30239000 0! #30239500 1! #30239600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30240000 0! #30240500 1! #30240600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30241000 0! #30241500 1! #30241600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30242000 0! #30242500 1! #30242600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30243000 0! #30243500 1! #30243600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30244000 0! #30244500 1! #30244600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30245000 0! #30245500 1! #30245600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30246000 0! #30246500 1! #30246600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30247000 0! #30247500 1! #30247600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30248000 0! #30248500 1! #30248600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30249000 0! #30249500 1! #30249600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30250000 0! #30250500 1! #30250600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30251000 0! #30251500 1! #30251600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30252000 0! #30252500 1! #30252600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30253000 0! #30253500 1! #30253600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30254000 0! #30254500 1! #30254600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30255000 0! #30255500 1! #30255600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30256000 0! #30256500 1! #30256600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30257000 0! #30257500 1! #30257600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30258000 0! #30258500 1! #30258600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30259000 0! #30259500 1! #30259600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30260000 0! #30260500 1! #30260600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30261000 0! #30261500 1! #30261600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30262000 0! #30262500 1! #30262600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30263000 0! #30263500 1! #30263600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30264000 0! #30264500 1! #30264600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30265000 0! #30265500 1! #30265600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30266000 0! #30266500 1! #30266600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30267000 0! #30267500 1! #30267600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30268000 0! #30268500 1! #30268600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30269000 0! #30269500 1! #30269600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30270000 0! #30270500 1! #30270600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30271000 0! #30271500 1! #30271600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30272000 0! #30272500 1! #30272600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30273000 0! #30273500 1! #30273600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30274000 0! #30274500 1! #30274600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30275000 0! #30275500 1! #30275600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30276000 0! #30276500 1! #30276600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30277000 0! #30277500 1! #30277600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30278000 0! #30278500 1! #30278600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30279000 0! #30279500 1! #30279600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30280000 0! #30280500 1! #30280600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30281000 0! #30281500 1! #30281600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30282000 0! #30282500 1! #30282600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30283000 0! #30283500 1! #30283600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30284000 0! #30284500 1! #30284600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30285000 0! #30285500 1! #30285600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30286000 0! #30286500 1! #30286600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30287000 0! #30287500 1! #30287600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30288000 0! #30288500 1! #30288600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30289000 0! #30289500 1! #30289600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30290000 0! #30290500 1! #30290600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30291000 0! #30291500 1! #30291600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30292000 0! #30292500 1! #30292600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30293000 0! #30293500 1! #30293600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30294000 0! #30294500 1! #30294600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30295000 0! #30295500 1! #30295600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30296000 0! #30296500 1! #30296600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30297000 0! #30297500 1! #30297600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30298000 0! #30298500 1! #30298600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30299000 0! #30299500 1! #30299600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30300000 0! #30300500 1! #30300600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30301000 0! #30301500 1! #30301600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30302000 0! #30302500 1! #30302600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30303000 0! #30303500 1! #30303600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30304000 0! #30304500 1! #30304600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30305000 0! #30305500 1! #30305600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30306000 0! #30306500 1! #30306600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30307000 0! #30307500 1! #30307600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30308000 0! #30308500 1! #30308600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30309000 0! #30309500 1! #30309600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30310000 0! #30310500 1! #30310600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30311000 0! #30311500 1! #30311600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30312000 0! #30312500 1! #30312600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30313000 0! #30313500 1! #30313600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30314000 0! #30314500 1! #30314600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30315000 0! #30315500 1! #30315600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30316000 0! #30316500 1! #30316600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30317000 0! #30317500 1! #30317600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30318000 0! #30318500 1! #30318600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30319000 0! #30319500 1! #30319600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30320000 0! #30320500 1! #30320600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30321000 0! #30321500 1! #30321600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30322000 0! #30322500 1! #30322600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #30322700 b1011111 ^ b11 g b1001011 c #30323000 0! #30323500 1! #30323600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30324000 0! #30324500 1! #30324600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30325000 0! #30325500 1! #30325600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30326000 0! #30326500 1! #30326600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30327000 0! #30327500 1! #30327600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30328000 0! #30328500 1! #30328600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30329000 0! #30329500 1! #30329600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30330000 0! #30330500 1! #30330600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30331000 0! #30331500 1! #30331600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30332000 0! #30332500 1! #30332600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30333000 0! #30333500 1! #30333600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30334000 0! #30334500 1! #30334600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30335000 0! #30335500 1! #30335600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30336000 0! #30336500 1! #30336600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30337000 0! #30337500 1! #30337600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30338000 0! #30338500 1! #30338600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30339000 0! #30339500 1! #30339600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30340000 0! #30340500 1! #30340600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30341000 0! #30341500 1! #30341600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30342000 0! #30342500 1! #30342600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30343000 0! #30343500 1! #30343600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30344000 0! #30344500 1! #30344600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30345000 0! #30345500 1! #30345600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30346000 0! #30346500 1! #30346600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30347000 0! #30347500 1! #30347600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30348000 0! #30348500 1! #30348600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30349000 0! #30349500 1! #30349600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30350000 0! #30350500 1! #30350600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30351000 0! #30351500 1! #30351600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30352000 0! #30352500 1! #30352600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30353000 0! #30353500 1! #30353600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30354000 0! #30354500 1! #30354600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30355000 0! #30355500 1! #30355600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30356000 0! #30356500 1! #30356600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30357000 0! #30357500 1! #30357600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30358000 0! #30358500 1! #30358600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30359000 0! #30359500 1! #30359600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30360000 0! #30360500 1! #30360600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30361000 0! #30361500 1! #30361600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30362000 0! #30362500 1! #30362600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30363000 0! #30363500 1! #30363600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30364000 0! #30364500 1! #30364600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30365000 0! #30365500 1! #30365600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30366000 0! #30366500 1! #30366600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30367000 0! #30367500 1! #30367600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30368000 0! #30368500 1! #30368600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30369000 0! #30369500 1! #30369600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30370000 0! #30370500 1! #30370600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30371000 0! #30371500 1! #30371600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30372000 0! #30372500 1! #30372600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30373000 0! #30373500 1! #30373600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30374000 0! #30374500 1! #30374600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30375000 0! #30375500 1! #30375600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30376000 0! #30376500 1! #30376600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30377000 0! #30377500 1! #30377600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30378000 0! #30378500 1! #30378600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30379000 0! #30379500 1! #30379600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30380000 0! #30380500 1! #30380600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30381000 0! #30381500 1! #30381600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30382000 0! #30382500 1! #30382600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30383000 0! #30383500 1! #30383600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30384000 0! #30384500 1! #30384600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30385000 0! #30385500 1! #30385600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30386000 0! #30386500 1! #30386600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30387000 0! #30387500 1! #30387600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30388000 0! #30388500 1! #30388600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30389000 0! #30389500 1! #30389600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30390000 0! #30390500 1! #30390600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30391000 0! #30391500 1! #30391600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30392000 0! #30392500 1! #30392600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30393000 0! #30393500 1! #30393600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30394000 0! #30394500 1! #30394600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30395000 0! #30395500 1! #30395600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30396000 0! #30396500 1! #30396600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30397000 0! #30397500 1! #30397600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30398000 0! #30398500 1! #30398600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30399000 0! #30399500 1! #30399600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30400000 0! #30400500 1! #30400600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30401000 0! #30401500 1! #30401600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30402000 0! #30402500 1! #30402600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30403000 0! #30403500 1! #30403600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30404000 0! #30404500 1! #30404600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30405000 0! #30405500 1! #30405600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30406000 0! #30406500 1! #30406600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30407000 0! #30407500 1! #30407600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30408000 0! #30408500 1! #30408600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30409000 0! #30409500 1! #30409600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30410000 0! #30410500 1! #30410600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30411000 0! #30411500 1! #30411600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30412000 0! #30412500 1! #30412600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30413000 0! #30413500 1! #30413600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30414000 0! #30414500 1! #30414600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30415000 0! #30415500 1! #30415600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30416000 0! #30416500 1! #30416600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30417000 0! #30417500 1! #30417600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30418000 0! #30418500 1! #30418600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30419000 0! #30419500 1! #30419600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30420000 0! #30420500 1! #30420600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30421000 0! #30421500 1! #30421600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30422000 0! #30422500 1! #30422600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30423000 0! #30423500 1! #30423600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30424000 0! #30424500 1! #30424600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #30424700 0j 0O #30425000 0! #30425500 1! #30425600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30426000 0! #30426500 1! #30426600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30427000 0! #30427500 1! #30427600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30428000 0! #30428500 1! #30428600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30429000 0! #30429500 1! #30429600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30430000 0! #30430500 1! #30430600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30431000 0! #30431500 1! #30431600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30432000 0! #30432500 1! #30432600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30433000 0! #30433500 1! #30433600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30434000 0! #30434500 1! #30434600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30435000 0! #30435500 1! #30435600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30436000 0! #30436500 1! #30436600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30437000 0! #30437500 1! #30437600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30438000 0! #30438500 1! #30438600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30439000 0! #30439500 1! #30439600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30440000 0! #30440500 1! #30440600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30441000 0! #30441500 1! #30441600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30442000 0! #30442500 1! #30442600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30443000 0! #30443500 1! #30443600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30444000 0! #30444500 1! #30444600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30445000 0! #30445500 1! #30445600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30446000 0! #30446500 1! #30446600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30447000 0! #30447500 1! #30447600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30448000 0! #30448500 1! #30448600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30449000 0! #30449500 1! #30449600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30450000 0! #30450500 1! #30450600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30451000 0! #30451500 1! #30451600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30452000 0! #30452500 1! #30452600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30453000 0! #30453500 1! #30453600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30454000 0! #30454500 1! #30454600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30455000 0! #30455500 1! #30455600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30456000 0! #30456500 1! #30456600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30457000 0! #30457500 1! #30457600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30458000 0! #30458500 1! #30458600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30459000 0! #30459500 1! #30459600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30460000 0! #30460500 1! #30460600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30461000 0! #30461500 1! #30461600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30462000 0! #30462500 1! #30462600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30463000 0! #30463500 1! #30463600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30464000 0! #30464500 1! #30464600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30465000 0! #30465500 1! #30465600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30466000 0! #30466500 1! #30466600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30467000 0! #30467500 1! #30467600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30468000 0! #30468500 1! #30468600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30469000 0! #30469500 1! #30469600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30470000 0! #30470500 1! #30470600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30471000 0! #30471500 1! #30471600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30472000 0! #30472500 1! #30472600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30473000 0! #30473500 1! #30473600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30474000 0! #30474500 1! #30474600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30475000 0! #30475500 1! #30475600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30476000 0! #30476500 1! #30476600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30477000 0! #30477500 1! #30477600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30478000 0! #30478500 1! #30478600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30479000 0! #30479500 1! #30479600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30480000 0! #30480500 1! #30480600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30481000 0! #30481500 1! #30481600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30482000 0! #30482500 1! #30482600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30483000 0! #30483500 1! #30483600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30484000 0! #30484500 1! #30484600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30485000 0! #30485500 1! #30485600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30486000 0! #30486500 1! #30486600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30487000 0! #30487500 1! #30487600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30488000 0! #30488500 1! #30488600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30489000 0! #30489500 1! #30489600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30490000 0! #30490500 1! #30490600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30491000 0! #30491500 1! #30491600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30492000 0! #30492500 1! #30492600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30493000 0! #30493500 1! #30493600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30494000 0! #30494500 1! #30494600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30495000 0! #30495500 1! #30495600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30496000 0! #30496500 1! #30496600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30497000 0! #30497500 1! #30497600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30498000 0! #30498500 1! #30498600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30499000 0! #30499500 1! #30499600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30500000 0! #30500500 1! #30500600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30501000 0! #30501500 1! #30501600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30502000 0! #30502500 1! #30502600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30503000 0! #30503500 1! #30503600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30504000 0! #30504500 1! #30504600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30505000 0! #30505500 1! #30505600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30506000 0! #30506500 1! #30506600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30507000 0! #30507500 1! #30507600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30508000 0! #30508500 1! #30508600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30509000 0! #30509500 1! #30509600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30510000 0! #30510500 1! #30510600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30511000 0! #30511500 1! #30511600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30512000 0! #30512500 1! #30512600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30513000 0! #30513500 1! #30513600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30514000 0! #30514500 1! #30514600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30515000 0! #30515500 1! #30515600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30516000 0! #30516500 1! #30516600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30517000 0! #30517500 1! #30517600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30518000 0! #30518500 1! #30518600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30519000 0! #30519500 1! #30519600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30520000 0! #30520500 1! #30520600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30521000 0! #30521500 1! #30521600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30522000 0! #30522500 1! #30522600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30523000 0! #30523500 1! #30523600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30524000 0! #30524500 1! #30524600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30525000 0! #30525500 1! #30525600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30526000 0! #30526500 1! #30526600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30527000 0! #30527500 1! #30527600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30528000 0! #30528500 1! #30528600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30529000 0! #30529500 1! #30529600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30530000 0! #30530500 1! #30530600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30531000 0! #30531500 1! #30531600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30532000 0! #30532500 1! #30532600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30533000 0! #30533500 1! #30533600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30534000 0! #30534500 1! #30534600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30535000 0! #30535500 1! #30535600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30536000 0! #30536500 1! #30536600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30537000 0! #30537500 1! #30537600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30538000 0! #30538500 1! #30538600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30539000 0! #30539500 1! #30539600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30540000 0! #30540500 1! #30540600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30541000 0! #30541500 1! #30541600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30542000 0! #30542500 1! #30542600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30543000 0! #30543500 1! #30543600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30544000 0! #30544500 1! #30544600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30545000 0! #30545500 1! #30545600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30546000 0! #30546500 1! #30546600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30547000 0! #30547500 1! #30547600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30548000 0! #30548500 1! #30548600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30549000 0! #30549500 1! #30549600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30550000 0! #30550500 1! #30550600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30551000 0! #30551500 1! #30551600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30552000 0! #30552500 1! #30552600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30553000 0! #30553500 1! #30553600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30554000 0! #30554500 1! #30554600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30555000 0! #30555500 1! #30555600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30556000 0! #30556500 1! #30556600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30557000 0! #30557500 1! #30557600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30558000 0! #30558500 1! #30558600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30559000 0! #30559500 1! #30559600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30560000 0! #30560500 1! #30560600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30561000 0! #30561500 1! #30561600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30562000 0! #30562500 1! #30562600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30563000 0! #30563500 1! #30563600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30564000 0! #30564500 1! #30564600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30565000 0! #30565500 1! #30565600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30566000 0! #30566500 1! #30566600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30567000 0! #30567500 1! #30567600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30568000 0! #30568500 1! #30568600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30569000 0! #30569500 1! #30569600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30570000 0! #30570500 1! #30570600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30571000 0! #30571500 1! #30571600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30572000 0! #30572500 1! #30572600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30573000 0! #30573500 1! #30573600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30574000 0! #30574500 1! #30574600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30575000 0! #30575500 1! #30575600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30576000 0! #30576500 1! #30576600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30577000 0! #30577500 1! #30577600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #30577700 b10111111 ^ b10 g b10010110 c #30578000 0! #30578500 1! #30578600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30579000 0! #30579500 1! #30579600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30580000 0! #30580500 1! #30580600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30581000 0! #30581500 1! #30581600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30582000 0! #30582500 1! #30582600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30583000 0! #30583500 1! #30583600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30584000 0! #30584500 1! #30584600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30585000 0! #30585500 1! #30585600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30586000 0! #30586500 1! #30586600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30587000 0! #30587500 1! #30587600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30588000 0! #30588500 1! #30588600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30589000 0! #30589500 1! #30589600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30590000 0! #30590500 1! #30590600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30591000 0! #30591500 1! #30591600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30592000 0! #30592500 1! #30592600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30593000 0! #30593500 1! #30593600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30594000 0! #30594500 1! #30594600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30595000 0! #30595500 1! #30595600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30596000 0! #30596500 1! #30596600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30597000 0! #30597500 1! #30597600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30598000 0! #30598500 1! #30598600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30599000 0! #30599500 1! #30599600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30600000 0! #30600500 1! #30600600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30601000 0! #30601500 1! #30601600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30602000 0! #30602500 1! #30602600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30603000 0! #30603500 1! #30603600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30604000 0! #30604500 1! #30604600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30605000 0! #30605500 1! #30605600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30606000 0! #30606500 1! #30606600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30607000 0! #30607500 1! #30607600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30608000 0! #30608500 1! #30608600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30609000 0! #30609500 1! #30609600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30610000 0! #30610500 1! #30610600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30611000 0! #30611500 1! #30611600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30612000 0! #30612500 1! #30612600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30613000 0! #30613500 1! #30613600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30614000 0! #30614500 1! #30614600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30615000 0! #30615500 1! #30615600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30616000 0! #30616500 1! #30616600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30617000 0! #30617500 1! #30617600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30618000 0! #30618500 1! #30618600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30619000 0! #30619500 1! #30619600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30620000 0! #30620500 1! #30620600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30621000 0! #30621500 1! #30621600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30622000 0! #30622500 1! #30622600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30623000 0! #30623500 1! #30623600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30624000 0! #30624500 1! #30624600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30625000 0! #30625500 1! #30625600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30626000 0! #30626500 1! #30626600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30627000 0! #30627500 1! #30627600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30628000 0! #30628500 1! #30628600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30629000 0! #30629500 1! #30629600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30630000 0! #30630500 1! #30630600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30631000 0! #30631500 1! #30631600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30632000 0! #30632500 1! #30632600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30633000 0! #30633500 1! #30633600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30634000 0! #30634500 1! #30634600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30635000 0! #30635500 1! #30635600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30636000 0! #30636500 1! #30636600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30637000 0! #30637500 1! #30637600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30638000 0! #30638500 1! #30638600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30639000 0! #30639500 1! #30639600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30640000 0! #30640500 1! #30640600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30641000 0! #30641500 1! #30641600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30642000 0! #30642500 1! #30642600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30643000 0! #30643500 1! #30643600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30644000 0! #30644500 1! #30644600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30645000 0! #30645500 1! #30645600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30646000 0! #30646500 1! #30646600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30647000 0! #30647500 1! #30647600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30648000 0! #30648500 1! #30648600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30649000 0! #30649500 1! #30649600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30650000 0! #30650500 1! #30650600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30651000 0! #30651500 1! #30651600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30652000 0! #30652500 1! #30652600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30653000 0! #30653500 1! #30653600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30654000 0! #30654500 1! #30654600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30655000 0! #30655500 1! #30655600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30656000 0! #30656500 1! #30656600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30657000 0! #30657500 1! #30657600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30658000 0! #30658500 1! #30658600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30659000 0! #30659500 1! #30659600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30660000 0! #30660500 1! #30660600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30661000 0! #30661500 1! #30661600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30662000 0! #30662500 1! #30662600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30663000 0! #30663500 1! #30663600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30664000 0! #30664500 1! #30664600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30665000 0! #30665500 1! #30665600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30666000 0! #30666500 1! #30666600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30667000 0! #30667500 1! #30667600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30668000 0! #30668500 1! #30668600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30669000 0! #30669500 1! #30669600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30670000 0! #30670500 1! #30670600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30671000 0! #30671500 1! #30671600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30672000 0! #30672500 1! #30672600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30673000 0! #30673500 1! #30673600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30674000 0! #30674500 1! #30674600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30675000 0! #30675500 1! #30675600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30676000 0! #30676500 1! #30676600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30677000 0! #30677500 1! #30677600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30678000 0! #30678500 1! #30678600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30679000 0! #30679500 1! #30679600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #30679700 1j 1O #30680000 0! #30680500 1! #30680600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30681000 0! #30681500 1! #30681600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30682000 0! #30682500 1! #30682600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30683000 0! #30683500 1! #30683600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30684000 0! #30684500 1! #30684600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30685000 0! #30685500 1! #30685600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30686000 0! #30686500 1! #30686600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30687000 0! #30687500 1! #30687600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30688000 0! #30688500 1! #30688600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30689000 0! #30689500 1! #30689600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30690000 0! #30690500 1! #30690600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30691000 0! #30691500 1! #30691600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30692000 0! #30692500 1! #30692600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30693000 0! #30693500 1! #30693600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30694000 0! #30694500 1! #30694600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30695000 0! #30695500 1! #30695600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30696000 0! #30696500 1! #30696600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30697000 0! #30697500 1! #30697600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30698000 0! #30698500 1! #30698600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30699000 0! #30699500 1! #30699600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30700000 0! #30700500 1! #30700600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30701000 0! #30701500 1! #30701600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30702000 0! #30702500 1! #30702600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30703000 0! #30703500 1! #30703600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30704000 0! #30704500 1! #30704600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30705000 0! #30705500 1! #30705600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30706000 0! #30706500 1! #30706600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30707000 0! #30707500 1! #30707600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30708000 0! #30708500 1! #30708600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30709000 0! #30709500 1! #30709600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30710000 0! #30710500 1! #30710600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30711000 0! #30711500 1! #30711600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30712000 0! #30712500 1! #30712600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30713000 0! #30713500 1! #30713600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30714000 0! #30714500 1! #30714600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30715000 0! #30715500 1! #30715600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30716000 0! #30716500 1! #30716600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30717000 0! #30717500 1! #30717600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30718000 0! #30718500 1! #30718600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30719000 0! #30719500 1! #30719600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30720000 0! #30720500 1! #30720600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30721000 0! #30721500 1! #30721600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30722000 0! #30722500 1! #30722600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30723000 0! #30723500 1! #30723600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30724000 0! #30724500 1! #30724600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30725000 0! #30725500 1! #30725600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30726000 0! #30726500 1! #30726600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30727000 0! #30727500 1! #30727600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30728000 0! #30728500 1! #30728600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30729000 0! #30729500 1! #30729600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30730000 0! #30730500 1! #30730600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30731000 0! #30731500 1! #30731600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30732000 0! #30732500 1! #30732600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30733000 0! #30733500 1! #30733600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30734000 0! #30734500 1! #30734600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30735000 0! #30735500 1! #30735600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30736000 0! #30736500 1! #30736600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30737000 0! #30737500 1! #30737600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30738000 0! #30738500 1! #30738600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30739000 0! #30739500 1! #30739600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30740000 0! #30740500 1! #30740600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30741000 0! #30741500 1! #30741600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30742000 0! #30742500 1! #30742600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30743000 0! #30743500 1! #30743600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30744000 0! #30744500 1! #30744600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30745000 0! #30745500 1! #30745600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30746000 0! #30746500 1! #30746600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30747000 0! #30747500 1! #30747600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30748000 0! #30748500 1! #30748600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30749000 0! #30749500 1! #30749600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30750000 0! #30750500 1! #30750600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30751000 0! #30751500 1! #30751600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30752000 0! #30752500 1! #30752600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30753000 0! #30753500 1! #30753600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30754000 0! #30754500 1! #30754600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30755000 0! #30755500 1! #30755600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30756000 0! #30756500 1! #30756600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30757000 0! #30757500 1! #30757600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30758000 0! #30758500 1! #30758600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30759000 0! #30759500 1! #30759600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30760000 0! #30760500 1! #30760600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30761000 0! #30761500 1! #30761600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30762000 0! #30762500 1! #30762600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30763000 0! #30763500 1! #30763600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30764000 0! #30764500 1! #30764600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30765000 0! #30765500 1! #30765600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30766000 0! #30766500 1! #30766600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30767000 0! #30767500 1! #30767600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30768000 0! #30768500 1! #30768600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30769000 0! #30769500 1! #30769600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30770000 0! #30770500 1! #30770600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30771000 0! #30771500 1! #30771600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30772000 0! #30772500 1! #30772600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30773000 0! #30773500 1! #30773600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30774000 0! #30774500 1! #30774600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30775000 0! #30775500 1! #30775600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30776000 0! #30776500 1! #30776600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30777000 0! #30777500 1! #30777600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30778000 0! #30778500 1! #30778600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30779000 0! #30779500 1! #30779600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30780000 0! #30780500 1! #30780600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30781000 0! #30781500 1! #30781600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30782000 0! #30782500 1! #30782600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30783000 0! #30783500 1! #30783600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30784000 0! #30784500 1! #30784600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30785000 0! #30785500 1! #30785600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30786000 0! #30786500 1! #30786600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30787000 0! #30787500 1! #30787600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30788000 0! #30788500 1! #30788600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30789000 0! #30789500 1! #30789600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30790000 0! #30790500 1! #30790600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30791000 0! #30791500 1! #30791600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30792000 0! #30792500 1! #30792600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30793000 0! #30793500 1! #30793600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30794000 0! #30794500 1! #30794600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30795000 0! #30795500 1! #30795600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30796000 0! #30796500 1! #30796600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30797000 0! #30797500 1! #30797600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30798000 0! #30798500 1! #30798600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30799000 0! #30799500 1! #30799600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30800000 0! #30800500 1! #30800600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30801000 0! #30801500 1! #30801600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30802000 0! #30802500 1! #30802600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30803000 0! #30803500 1! #30803600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30804000 0! #30804500 1! #30804600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30805000 0! #30805500 1! #30805600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30806000 0! #30806500 1! #30806600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30807000 0! #30807500 1! #30807600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30808000 0! #30808500 1! #30808600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30809000 0! #30809500 1! #30809600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30810000 0! #30810500 1! #30810600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30811000 0! #30811500 1! #30811600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30812000 0! #30812500 1! #30812600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30813000 0! #30813500 1! #30813600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30814000 0! #30814500 1! #30814600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30815000 0! #30815500 1! #30815600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30816000 0! #30816500 1! #30816600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30817000 0! #30817500 1! #30817600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30818000 0! #30818500 1! #30818600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30819000 0! #30819500 1! #30819600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30820000 0! #30820500 1! #30820600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30821000 0! #30821500 1! #30821600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30822000 0! #30822500 1! #30822600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30823000 0! #30823500 1! #30823600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30824000 0! #30824500 1! #30824600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30825000 0! #30825500 1! #30825600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30826000 0! #30826500 1! #30826600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30827000 0! #30827500 1! #30827600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30828000 0! #30828500 1! #30828600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30829000 0! #30829500 1! #30829600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30830000 0! #30830500 1! #30830600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30831000 0! #30831500 1! #30831600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30832000 0! #30832500 1! #30832600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #30832700 b1111111 ^ b1 g b101101 c #30833000 0! #30833500 1! #30833600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30834000 0! #30834500 1! #30834600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30835000 0! #30835500 1! #30835600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30836000 0! #30836500 1! #30836600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30837000 0! #30837500 1! #30837600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30838000 0! #30838500 1! #30838600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30839000 0! #30839500 1! #30839600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30840000 0! #30840500 1! #30840600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30841000 0! #30841500 1! #30841600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30842000 0! #30842500 1! #30842600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30843000 0! #30843500 1! #30843600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30844000 0! #30844500 1! #30844600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30845000 0! #30845500 1! #30845600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30846000 0! #30846500 1! #30846600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30847000 0! #30847500 1! #30847600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30848000 0! #30848500 1! #30848600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30849000 0! #30849500 1! #30849600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30850000 0! #30850500 1! #30850600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30851000 0! #30851500 1! #30851600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30852000 0! #30852500 1! #30852600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30853000 0! #30853500 1! #30853600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30854000 0! #30854500 1! #30854600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30855000 0! #30855500 1! #30855600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30856000 0! #30856500 1! #30856600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30857000 0! #30857500 1! #30857600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30858000 0! #30858500 1! #30858600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30859000 0! #30859500 1! #30859600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30860000 0! #30860500 1! #30860600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30861000 0! #30861500 1! #30861600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30862000 0! #30862500 1! #30862600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30863000 0! #30863500 1! #30863600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30864000 0! #30864500 1! #30864600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30865000 0! #30865500 1! #30865600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30866000 0! #30866500 1! #30866600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30867000 0! #30867500 1! #30867600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30868000 0! #30868500 1! #30868600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30869000 0! #30869500 1! #30869600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30870000 0! #30870500 1! #30870600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30871000 0! #30871500 1! #30871600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30872000 0! #30872500 1! #30872600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30873000 0! #30873500 1! #30873600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30874000 0! #30874500 1! #30874600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30875000 0! #30875500 1! #30875600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30876000 0! #30876500 1! #30876600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30877000 0! #30877500 1! #30877600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30878000 0! #30878500 1! #30878600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30879000 0! #30879500 1! #30879600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30880000 0! #30880500 1! #30880600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30881000 0! #30881500 1! #30881600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30882000 0! #30882500 1! #30882600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30883000 0! #30883500 1! #30883600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30884000 0! #30884500 1! #30884600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30885000 0! #30885500 1! #30885600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30886000 0! #30886500 1! #30886600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30887000 0! #30887500 1! #30887600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30888000 0! #30888500 1! #30888600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30889000 0! #30889500 1! #30889600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30890000 0! #30890500 1! #30890600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30891000 0! #30891500 1! #30891600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30892000 0! #30892500 1! #30892600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30893000 0! #30893500 1! #30893600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30894000 0! #30894500 1! #30894600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30895000 0! #30895500 1! #30895600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30896000 0! #30896500 1! #30896600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30897000 0! #30897500 1! #30897600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30898000 0! #30898500 1! #30898600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30899000 0! #30899500 1! #30899600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30900000 0! #30900500 1! #30900600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30901000 0! #30901500 1! #30901600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30902000 0! #30902500 1! #30902600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30903000 0! #30903500 1! #30903600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30904000 0! #30904500 1! #30904600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30905000 0! #30905500 1! #30905600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30906000 0! #30906500 1! #30906600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30907000 0! #30907500 1! #30907600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30908000 0! #30908500 1! #30908600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30909000 0! #30909500 1! #30909600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30910000 0! #30910500 1! #30910600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30911000 0! #30911500 1! #30911600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30912000 0! #30912500 1! #30912600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30913000 0! #30913500 1! #30913600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30914000 0! #30914500 1! #30914600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30915000 0! #30915500 1! #30915600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30916000 0! #30916500 1! #30916600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30917000 0! #30917500 1! #30917600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30918000 0! #30918500 1! #30918600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30919000 0! #30919500 1! #30919600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30920000 0! #30920500 1! #30920600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30921000 0! #30921500 1! #30921600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30922000 0! #30922500 1! #30922600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30923000 0! #30923500 1! #30923600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30924000 0! #30924500 1! #30924600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30925000 0! #30925500 1! #30925600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30926000 0! #30926500 1! #30926600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30927000 0! #30927500 1! #30927600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30928000 0! #30928500 1! #30928600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30929000 0! #30929500 1! #30929600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30930000 0! #30930500 1! #30930600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30931000 0! #30931500 1! #30931600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30932000 0! #30932500 1! #30932600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30933000 0! #30933500 1! #30933600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30934000 0! #30934500 1! #30934600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #30934700 0j 0O #30935000 0! #30935500 1! #30935600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30936000 0! #30936500 1! #30936600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30937000 0! #30937500 1! #30937600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30938000 0! #30938500 1! #30938600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30939000 0! #30939500 1! #30939600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30940000 0! #30940500 1! #30940600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30941000 0! #30941500 1! #30941600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30942000 0! #30942500 1! #30942600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30943000 0! #30943500 1! #30943600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30944000 0! #30944500 1! #30944600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30945000 0! #30945500 1! #30945600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30946000 0! #30946500 1! #30946600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30947000 0! #30947500 1! #30947600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30948000 0! #30948500 1! #30948600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30949000 0! #30949500 1! #30949600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30950000 0! #30950500 1! #30950600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30951000 0! #30951500 1! #30951600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30952000 0! #30952500 1! #30952600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30953000 0! #30953500 1! #30953600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30954000 0! #30954500 1! #30954600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30955000 0! #30955500 1! #30955600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30956000 0! #30956500 1! #30956600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30957000 0! #30957500 1! #30957600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30958000 0! #30958500 1! #30958600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30959000 0! #30959500 1! #30959600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30960000 0! #30960500 1! #30960600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30961000 0! #30961500 1! #30961600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30962000 0! #30962500 1! #30962600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30963000 0! #30963500 1! #30963600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30964000 0! #30964500 1! #30964600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30965000 0! #30965500 1! #30965600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30966000 0! #30966500 1! #30966600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30967000 0! #30967500 1! #30967600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30968000 0! #30968500 1! #30968600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30969000 0! #30969500 1! #30969600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30970000 0! #30970500 1! #30970600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30971000 0! #30971500 1! #30971600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30972000 0! #30972500 1! #30972600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30973000 0! #30973500 1! #30973600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30974000 0! #30974500 1! #30974600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30975000 0! #30975500 1! #30975600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30976000 0! #30976500 1! #30976600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30977000 0! #30977500 1! #30977600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30978000 0! #30978500 1! #30978600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30979000 0! #30979500 1! #30979600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30980000 0! #30980500 1! #30980600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30981000 0! #30981500 1! #30981600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30982000 0! #30982500 1! #30982600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30983000 0! #30983500 1! #30983600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30984000 0! #30984500 1! #30984600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30985000 0! #30985500 1! #30985600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30986000 0! #30986500 1! #30986600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30987000 0! #30987500 1! #30987600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30988000 0! #30988500 1! #30988600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30989000 0! #30989500 1! #30989600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30990000 0! #30990500 1! #30990600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30991000 0! #30991500 1! #30991600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30992000 0! #30992500 1! #30992600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30993000 0! #30993500 1! #30993600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30994000 0! #30994500 1! #30994600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30995000 0! #30995500 1! #30995600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30996000 0! #30996500 1! #30996600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30997000 0! #30997500 1! #30997600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #30998000 0! #30998500 1! #30998600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #30999000 0! #30999500 1! #30999600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31000000 0! #31000500 1! #31000600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31001000 0! #31001500 1! #31001600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31002000 0! #31002500 1! #31002600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31003000 0! #31003500 1! #31003600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31004000 0! #31004500 1! #31004600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31005000 0! #31005500 1! #31005600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31006000 0! #31006500 1! #31006600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31007000 0! #31007500 1! #31007600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31008000 0! #31008500 1! #31008600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31009000 0! #31009500 1! #31009600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31010000 0! #31010500 1! #31010600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31011000 0! #31011500 1! #31011600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31012000 0! #31012500 1! #31012600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31013000 0! #31013500 1! #31013600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31014000 0! #31014500 1! #31014600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31015000 0! #31015500 1! #31015600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31016000 0! #31016500 1! #31016600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31017000 0! #31017500 1! #31017600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31018000 0! #31018500 1! #31018600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31019000 0! #31019500 1! #31019600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31020000 0! #31020500 1! #31020600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31021000 0! #31021500 1! #31021600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31022000 0! #31022500 1! #31022600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31023000 0! #31023500 1! #31023600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31024000 0! #31024500 1! #31024600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31025000 0! #31025500 1! #31025600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31026000 0! #31026500 1! #31026600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31027000 0! #31027500 1! #31027600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31028000 0! #31028500 1! #31028600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31029000 0! #31029500 1! #31029600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31030000 0! #31030500 1! #31030600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31031000 0! #31031500 1! #31031600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31032000 0! #31032500 1! #31032600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31033000 0! #31033500 1! #31033600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31034000 0! #31034500 1! #31034600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31035000 0! #31035500 1! #31035600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31036000 0! #31036500 1! #31036600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31037000 0! #31037500 1! #31037600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31038000 0! #31038500 1! #31038600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31039000 0! #31039500 1! #31039600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31040000 0! #31040500 1! #31040600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31041000 0! #31041500 1! #31041600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31042000 0! #31042500 1! #31042600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31043000 0! #31043500 1! #31043600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31044000 0! #31044500 1! #31044600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31045000 0! #31045500 1! #31045600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31046000 0! #31046500 1! #31046600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31047000 0! #31047500 1! #31047600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31048000 0! #31048500 1! #31048600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31049000 0! #31049500 1! #31049600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31050000 0! #31050500 1! #31050600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31051000 0! #31051500 1! #31051600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31052000 0! #31052500 1! #31052600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31053000 0! #31053500 1! #31053600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31054000 0! #31054500 1! #31054600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31055000 0! #31055500 1! #31055600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31056000 0! #31056500 1! #31056600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31057000 0! #31057500 1! #31057600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31058000 0! #31058500 1! #31058600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31059000 0! #31059500 1! #31059600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31060000 0! #31060500 1! #31060600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31061000 0! #31061500 1! #31061600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31062000 0! #31062500 1! #31062600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31063000 0! #31063500 1! #31063600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31064000 0! #31064500 1! #31064600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31065000 0! #31065500 1! #31065600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31066000 0! #31066500 1! #31066600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31067000 0! #31067500 1! #31067600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31068000 0! #31068500 1! #31068600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31069000 0! #31069500 1! #31069600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31070000 0! #31070500 1! #31070600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31071000 0! #31071500 1! #31071600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31072000 0! #31072500 1! #31072600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31073000 0! #31073500 1! #31073600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31074000 0! #31074500 1! #31074600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31075000 0! #31075500 1! #31075600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31076000 0! #31076500 1! #31076600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31077000 0! #31077500 1! #31077600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31078000 0! #31078500 1! #31078600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31079000 0! #31079500 1! #31079600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31080000 0! #31080500 1! #31080600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31081000 0! #31081500 1! #31081600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31082000 0! #31082500 1! #31082600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31083000 0! #31083500 1! #31083600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31084000 0! #31084500 1! #31084600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31085000 0! #31085500 1! #31085600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31086000 0! #31086500 1! #31086600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31087000 0! #31087500 1! #31087600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #31087700 b11111111 ^ b0 g b1011010 c 1h #31088000 0! #31088500 1! #31088600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31089000 0! #31089500 1! #31089600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31090000 0! #31090500 1! #31090600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31091000 0! #31091500 1! #31091600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31092000 0! #31092500 1! #31092600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31093000 0! #31093500 1! #31093600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31094000 0! #31094500 1! #31094600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31095000 0! #31095500 1! #31095600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31096000 0! #31096500 1! #31096600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31097000 0! #31097500 1! #31097600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31098000 0! #31098500 1! #31098600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31099000 0! #31099500 1! #31099600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31100000 0! #31100500 1! #31100600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31101000 0! #31101500 1! #31101600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31102000 0! #31102500 1! #31102600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31103000 0! #31103500 1! #31103600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31104000 0! #31104500 1! #31104600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31105000 0! #31105500 1! #31105600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31106000 0! #31106500 1! #31106600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31107000 0! #31107500 1! #31107600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31108000 0! #31108500 1! #31108600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31109000 0! #31109500 1! #31109600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31110000 0! #31110500 1! #31110600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31111000 0! #31111500 1! #31111600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31112000 0! #31112500 1! #31112600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31113000 0! #31113500 1! #31113600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31114000 0! #31114500 1! #31114600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31115000 0! #31115500 1! #31115600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31116000 0! #31116500 1! #31116600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31117000 0! #31117500 1! #31117600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31118000 0! #31118500 1! #31118600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31119000 0! #31119500 1! #31119600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31120000 0! #31120500 1! #31120600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31121000 0! #31121500 1! #31121600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31122000 0! #31122500 1! #31122600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31123000 0! #31123500 1! #31123600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31124000 0! #31124500 1! #31124600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31125000 0! #31125500 1! #31125600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31126000 0! #31126500 1! #31126600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31127000 0! #31127500 1! #31127600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31128000 0! #31128500 1! #31128600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31129000 0! #31129500 1! #31129600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31130000 0! #31130500 1! #31130600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31131000 0! #31131500 1! #31131600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31132000 0! #31132500 1! #31132600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31133000 0! #31133500 1! #31133600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31134000 0! #31134500 1! #31134600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31135000 0! #31135500 1! #31135600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31136000 0! #31136500 1! #31136600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31137000 0! #31137500 1! #31137600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31138000 0! #31138500 1! #31138600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31139000 0! #31139500 1! #31139600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31140000 0! #31140500 1! #31140600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31141000 0! #31141500 1! #31141600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31142000 0! #31142500 1! #31142600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31143000 0! #31143500 1! #31143600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31144000 0! #31144500 1! #31144600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31145000 0! #31145500 1! #31145600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31146000 0! #31146500 1! #31146600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31147000 0! #31147500 1! #31147600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31148000 0! #31148500 1! #31148600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31149000 0! #31149500 1! #31149600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31150000 0! #31150500 1! #31150600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31151000 0! #31151500 1! #31151600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31152000 0! #31152500 1! #31152600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31153000 0! #31153500 1! #31153600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31154000 0! #31154500 1! #31154600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31155000 0! #31155500 1! #31155600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31156000 0! #31156500 1! #31156600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31157000 0! #31157500 1! #31157600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31158000 0! #31158500 1! #31158600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31159000 0! #31159500 1! #31159600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31160000 0! #31160500 1! #31160600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31161000 0! #31161500 1! #31161600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31162000 0! #31162500 1! #31162600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31163000 0! #31163500 1! #31163600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31164000 0! #31164500 1! #31164600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31165000 0! #31165500 1! #31165600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31166000 0! #31166500 1! #31166600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31167000 0! #31167500 1! #31167600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31168000 0! #31168500 1! #31168600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31169000 0! #31169500 1! #31169600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31170000 0! #31170500 1! #31170600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31171000 0! #31171500 1! #31171600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31172000 0! #31172500 1! #31172600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31173000 0! #31173500 1! #31173600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31174000 0! #31174500 1! #31174600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31175000 0! #31175500 1! #31175600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31176000 0! #31176500 1! #31176600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31177000 0! #31177500 1! #31177600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31178000 0! #31178500 1! #31178600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31179000 0! #31179500 1! #31179600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31180000 0! #31180500 1! #31180600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31181000 0! #31181500 1! #31181600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31182000 0! #31182500 1! #31182600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31183000 0! #31183500 1! #31183600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31184000 0! #31184500 1! #31184600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31185000 0! #31185500 1! #31185600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31186000 0! #31186500 1! #31186600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31187000 0! #31187500 1! #31187600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31188000 0! #31188500 1! #31188600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31189000 0! #31189500 1! #31189600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #31189700 1j b101 q 1O #31189800 b11 ] #31189900 bx ^ #31190000 0! #31190500 1! #31190600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31191000 0! #31191500 1! #31191600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31192000 0! #31192500 1! #31192600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31193000 0! #31193500 1! #31193600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31194000 0! #31194500 1! #31194600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31195000 0! #31195500 1! #31195600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31196000 0! #31196500 1! #31196600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31197000 0! #31197500 1! #31197600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31198000 0! #31198500 1! #31198600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31199000 0! #31199500 1! #31199600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31200000 0! #31200500 1! #31200600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31201000 0! #31201500 1! #31201600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31202000 0! #31202500 1! #31202600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31203000 0! #31203500 1! #31203600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31204000 0! #31204500 1! #31204600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31205000 0! #31205500 1! #31205600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31206000 0! #31206500 1! #31206600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31207000 0! #31207500 1! #31207600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31208000 0! #31208500 1! #31208600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31209000 0! #31209500 1! #31209600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31210000 0! #31210500 1! #31210600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31211000 0! #31211500 1! #31211600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31212000 0! #31212500 1! #31212600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31213000 0! #31213500 1! #31213600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31214000 0! #31214500 1! #31214600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31215000 0! #31215500 1! #31215600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31216000 0! #31216500 1! #31216600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31217000 0! #31217500 1! #31217600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31218000 0! #31218500 1! #31218600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31219000 0! #31219500 1! #31219600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31220000 0! #31220500 1! #31220600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31221000 0! #31221500 1! #31221600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31222000 0! #31222500 1! #31222600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31223000 0! #31223500 1! #31223600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31224000 0! #31224500 1! #31224600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31225000 0! #31225500 1! #31225600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31226000 0! #31226500 1! #31226600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31227000 0! #31227500 1! #31227600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31228000 0! #31228500 1! #31228600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31229000 0! #31229500 1! #31229600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31230000 0! #31230500 1! #31230600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31231000 0! #31231500 1! #31231600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31232000 0! #31232500 1! #31232600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31233000 0! #31233500 1! #31233600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31234000 0! #31234500 1! #31234600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31235000 0! #31235500 1! #31235600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31236000 0! #31236500 1! #31236600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31237000 0! #31237500 1! #31237600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31238000 0! #31238500 1! #31238600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31239000 0! #31239500 1! #31239600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31240000 0! #31240500 1! #31240600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31241000 0! #31241500 1! #31241600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31242000 0! #31242500 1! #31242600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31243000 0! #31243500 1! #31243600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31244000 0! #31244500 1! #31244600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31245000 0! #31245500 1! #31245600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31246000 0! #31246500 1! #31246600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31247000 0! #31247500 1! #31247600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31248000 0! #31248500 1! #31248600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31249000 0! #31249500 1! #31249600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31250000 0! #31250500 1! #31250600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31251000 0! #31251500 1! #31251600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31252000 0! #31252500 1! #31252600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31253000 0! #31253500 1! #31253600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31254000 0! #31254500 1! #31254600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31255000 0! #31255500 1! #31255600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31256000 0! #31256500 1! #31256600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31257000 0! #31257500 1! #31257600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31258000 0! #31258500 1! #31258600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31259000 0! #31259500 1! #31259600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31260000 0! #31260500 1! #31260600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31261000 0! #31261500 1! #31261600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31262000 0! #31262500 1! #31262600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31263000 0! #31263500 1! #31263600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31264000 0! #31264500 1! #31264600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31265000 0! #31265500 1! #31265600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31266000 0! #31266500 1! #31266600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31267000 0! #31267500 1! #31267600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31268000 0! #31268500 1! #31268600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31269000 0! #31269500 1! #31269600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31270000 0! #31270500 1! #31270600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31271000 0! #31271500 1! #31271600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31272000 0! #31272500 1! #31272600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31273000 0! #31273500 1! #31273600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31274000 0! #31274500 1! #31274600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31275000 0! #31275500 1! #31275600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31276000 0! #31276500 1! #31276600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31277000 0! #31277500 1! #31277600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31278000 0! #31278500 1! #31278600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31279000 0! #31279500 1! #31279600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31280000 0! #31280500 1! #31280600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31281000 0! #31281500 1! #31281600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31282000 0! #31282500 1! #31282600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31283000 0! #31283500 1! #31283600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31284000 0! #31284500 1! #31284600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31285000 0! #31285500 1! #31285600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31286000 0! #31286500 1! #31286600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31287000 0! #31287500 1! #31287600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31288000 0! #31288500 1! #31288600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31289000 0! #31289500 1! #31289600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31290000 0! #31290500 1! #31290600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31291000 0! #31291500 1! #31291600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0Q 0O #31292000 0! #31292500 1! #31292600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31293000 0! #31293500 1! #31293600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31294000 0! #31294500 1! #31294600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31295000 0! #31295500 1! #31295600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31296000 0! #31296500 1! #31296600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31297000 0! #31297500 1! #31297600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31298000 0! #31298500 1! #31298600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31299000 0! #31299500 1! #31299600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31300000 0! #31300500 1! #31300600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31301000 0! #31301500 1! #31301600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31302000 0! #31302500 1! #31302600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31303000 0! #31303500 1! #31303600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31304000 0! #31304500 1! #31304600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31305000 0! #31305500 1! #31305600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31306000 0! #31306500 1! #31306600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31307000 0! #31307500 1! #31307600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31308000 0! #31308500 1! #31308600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31309000 0! #31309500 1! #31309600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31310000 0! #31310500 1! #31310600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31311000 0! #31311500 1! #31311600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31312000 0! #31312500 1! #31312600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31313000 0! #31313500 1! #31313600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31314000 0! #31314500 1! #31314600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31315000 0! #31315500 1! #31315600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31316000 0! #31316500 1! #31316600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31317000 0! #31317500 1! #31317600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31318000 0! #31318500 1! #31318600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31319000 0! #31319500 1! #31319600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31320000 0! #31320500 1! #31320600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31321000 0! #31321500 1! #31321600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31322000 0! #31322500 1! #31322600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31323000 0! #31323500 1! #31323600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31324000 0! #31324500 1! #31324600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31325000 0! #31325500 1! #31325600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31326000 0! #31326500 1! #31326600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31327000 0! #31327500 1! #31327600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31328000 0! #31328500 1! #31328600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31329000 0! #31329500 1! #31329600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31330000 0! #31330500 1! #31330600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31331000 0! #31331500 1! #31331600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31332000 0! #31332500 1! #31332600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31333000 0! #31333500 1! #31333600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31334000 0! #31334500 1! #31334600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31335000 0! #31335500 1! #31335600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31336000 0! #31336500 1! #31336600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31337000 0! #31337500 1! #31337600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31338000 0! #31338500 1! #31338600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31339000 0! #31339500 1! #31339600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31340000 0! #31340500 1! #31340600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31341000 0! #31341500 1! #31341600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31342000 0! #31342500 1! #31342600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #31342700 b111 g b10110100 c 0h #31343000 0! #31343500 1! #31343600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31344000 0! #31344500 1! #31344600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31345000 0! #31345500 1! #31345600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31346000 0! #31346500 1! #31346600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31347000 0! #31347500 1! #31347600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31348000 0! #31348500 1! #31348600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31349000 0! #31349500 1! #31349600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31350000 0! #31350500 1! #31350600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31351000 0! #31351500 1! #31351600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31352000 0! #31352500 1! #31352600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31353000 0! #31353500 1! #31353600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31354000 0! #31354500 1! #31354600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31355000 0! #31355500 1! #31355600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31356000 0! #31356500 1! #31356600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31357000 0! #31357500 1! #31357600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31358000 0! #31358500 1! #31358600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31359000 0! #31359500 1! #31359600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31360000 0! #31360500 1! #31360600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31361000 0! #31361500 1! #31361600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31362000 0! #31362500 1! #31362600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31363000 0! #31363500 1! #31363600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31364000 0! #31364500 1! #31364600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31365000 0! #31365500 1! #31365600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31366000 0! #31366500 1! #31366600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31367000 0! #31367500 1! #31367600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31368000 0! #31368500 1! #31368600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31369000 0! #31369500 1! #31369600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31370000 0! #31370500 1! #31370600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31371000 0! #31371500 1! #31371600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31372000 0! #31372500 1! #31372600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31373000 0! #31373500 1! #31373600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31374000 0! #31374500 1! #31374600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31375000 0! #31375500 1! #31375600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31376000 0! #31376500 1! #31376600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31377000 0! #31377500 1! #31377600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31378000 0! #31378500 1! #31378600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31379000 0! #31379500 1! #31379600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31380000 0! #31380500 1! #31380600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31381000 0! #31381500 1! #31381600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31382000 0! #31382500 1! #31382600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31383000 0! #31383500 1! #31383600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31384000 0! #31384500 1! #31384600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31385000 0! #31385500 1! #31385600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31386000 0! #31386500 1! #31386600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31387000 0! #31387500 1! #31387600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31388000 0! #31388500 1! #31388600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31389000 0! #31389500 1! #31389600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31390000 0! #31390500 1! #31390600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31391000 0! #31391500 1! #31391600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31392000 0! #31392500 1! #31392600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31393000 0! #31393500 1! #31393600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31394000 0! #31394500 1! #31394600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31395000 0! #31395500 1! #31395600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31396000 0! #31396500 1! #31396600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31397000 0! #31397500 1! #31397600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31398000 0! #31398500 1! #31398600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31399000 0! #31399500 1! #31399600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31400000 0! #31400500 1! #31400600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31401000 0! #31401500 1! #31401600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31402000 0! #31402500 1! #31402600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31403000 0! #31403500 1! #31403600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31404000 0! #31404500 1! #31404600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31405000 0! #31405500 1! #31405600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31406000 0! #31406500 1! #31406600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31407000 0! #31407500 1! #31407600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31408000 0! #31408500 1! #31408600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31409000 0! #31409500 1! #31409600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31410000 0! #31410500 1! #31410600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31411000 0! #31411500 1! #31411600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31412000 0! #31412500 1! #31412600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31413000 0! #31413500 1! #31413600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31414000 0! #31414500 1! #31414600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31415000 0! #31415500 1! #31415600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31416000 0! #31416500 1! #31416600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31417000 0! #31417500 1! #31417600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31418000 0! #31418500 1! #31418600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31419000 0! #31419500 1! #31419600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31420000 0! #31420500 1! #31420600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31421000 0! #31421500 1! #31421600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31422000 0! #31422500 1! #31422600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31423000 0! #31423500 1! #31423600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31424000 0! #31424500 1! #31424600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31425000 0! #31425500 1! #31425600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31426000 0! #31426500 1! #31426600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31427000 0! #31427500 1! #31427600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31428000 0! #31428500 1! #31428600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31429000 0! #31429500 1! #31429600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31430000 0! #31430500 1! #31430600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31431000 0! #31431500 1! #31431600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31432000 0! #31432500 1! #31432600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31433000 0! #31433500 1! #31433600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31434000 0! #31434500 1! #31434600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31435000 0! #31435500 1! #31435600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31436000 0! #31436500 1! #31436600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31437000 0! #31437500 1! #31437600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31438000 0! #31438500 1! #31438600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31439000 0! #31439500 1! #31439600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31440000 0! #31440500 1! #31440600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31441000 0! #31441500 1! #31441600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31442000 0! #31442500 1! #31442600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31443000 0! #31443500 1! #31443600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31444000 0! #31444500 1! #31444600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #31444700 1i b100 q xj xO #31445000 0! #31445500 1! #31445600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31446000 0! #31446500 1! #31446600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31447000 0! #31447500 1! #31447600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B b1000011 C 1H b1000001 C #31448000 0! #31448500 1! #31448600 b1000001 J xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31449000 0! #31449500 1! #31449600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 0@ 1A 1B b1011010 C 1H #31450000 0! #31450500 1! #31450600 b1011010 K xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31451000 0! #31451500 1! #31451600 1E 1F 1G b100000 D 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B b1000001 C 1H #31452000 0! #31452500 1! #31452600 xE bx D x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31453000 0! #31453500 1! #31453600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H b1000011 C #31454000 0! #31454500 1! #31454600 b1000011 J xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31455000 0! #31455500 1! #31455600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31456000 0! #31456500 1! #31456600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31457000 0! #31457500 1! #31457600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31458000 0! #31458500 1! #31458600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31459000 0! #31459500 1! #31459600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31460000 0! #31460500 1! #31460600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31461000 0! #31461500 1! #31461600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31462000 0! #31462500 1! #31462600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31463000 0! #31463500 1! #31463600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31464000 0! #31464500 1! #31464600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31465000 0! #31465500 1! #31465600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31466000 0! #31466500 1! #31466600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31467000 0! #31467500 1! #31467600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31468000 0! #31468500 1! #31468600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31469000 0! #31469500 1! #31469600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31470000 0! #31470500 1! #31470600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31471000 0! #31471500 1! #31471600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31472000 0! #31472500 1! #31472600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31473000 0! #31473500 1! #31473600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31474000 0! #31474500 1! #31474600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31475000 0! #31475500 1! #31475600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31476000 0! #31476500 1! #31476600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31477000 0! #31477500 1! #31477600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31478000 0! #31478500 1! #31478600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31479000 0! #31479500 1! #31479600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31480000 0! #31480500 1! #31480600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31481000 0! #31481500 1! #31481600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31482000 0! #31482500 1! #31482600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31483000 0! #31483500 1! #31483600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31484000 0! #31484500 1! #31484600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31485000 0! #31485500 1! #31485600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31486000 0! #31486500 1! #31486600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31487000 0! #31487500 1! #31487600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31488000 0! #31488500 1! #31488600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31489000 0! #31489500 1! #31489600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31490000 0! #31490500 1! #31490600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31491000 0! #31491500 1! #31491600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31492000 0! #31492500 1! #31492600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31493000 0! #31493500 1! #31493600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31494000 0! #31494500 1! #31494600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31495000 0! #31495500 1! #31495600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31496000 0! #31496500 1! #31496600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31497000 0! #31497500 1! #31497600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31498000 0! #31498500 1! #31498600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31499000 0! #31499500 1! #31499600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31500000 0! #31500500 1! #31500600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31501000 0! #31501500 1! #31501600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31502000 0! #31502500 1! #31502600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31503000 0! #31503500 1! #31503600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31504000 0! #31504500 1! #31504600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31505000 0! #31505500 1! #31505600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31506000 0! #31506500 1! #31506600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31507000 0! #31507500 1! #31507600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31508000 0! #31508500 1! #31508600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31509000 0! #31509500 1! #31509600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31510000 0! #31510500 1! #31510600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31511000 0! #31511500 1! #31511600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31512000 0! #31512500 1! #31512600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31513000 0! #31513500 1! #31513600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31514000 0! #31514500 1! #31514600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31515000 0! #31515500 1! #31515600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31516000 0! #31516500 1! #31516600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31517000 0! #31517500 1! #31517600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31518000 0! #31518500 1! #31518600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31519000 0! #31519500 1! #31519600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31520000 0! #31520500 1! #31520600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31521000 0! #31521500 1! #31521600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31522000 0! #31522500 1! #31522600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31523000 0! #31523500 1! #31523600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31524000 0! #31524500 1! #31524600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31525000 0! #31525500 1! #31525600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31526000 0! #31526500 1! #31526600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31527000 0! #31527500 1! #31527600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31528000 0! #31528500 1! #31528600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31529000 0! #31529500 1! #31529600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31530000 0! #31530500 1! #31530600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31531000 0! #31531500 1! #31531600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31532000 0! #31532500 1! #31532600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31533000 0! #31533500 1! #31533600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31534000 0! #31534500 1! #31534600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31535000 0! #31535500 1! #31535600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31536000 0! #31536500 1! #31536600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31537000 0! #31537500 1! #31537600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31538000 0! #31538500 1! #31538600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31539000 0! #31539500 1! #31539600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31540000 0! #31540500 1! #31540600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31541000 0! #31541500 1! #31541600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31542000 0! #31542500 1! #31542600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31543000 0! #31543500 1! #31543600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31544000 0! #31544500 1! #31544600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31545000 0! #31545500 1! #31545600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31546000 0! #31546500 1! #31546600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1Q #31547000 0! #31547500 1! #31547600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31548000 0! #31548500 1! #31548600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31549000 0! #31549500 1! #31549600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31550000 0! #31550500 1! #31550600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31551000 0! #31551500 1! #31551600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31552000 0! #31552500 1! #31552600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31553000 0! #31553500 1! #31553600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31554000 0! #31554500 1! #31554600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31555000 0! #31555500 1! #31555600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31556000 0! #31556500 1! #31556600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31557000 0! #31557500 1! #31557600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31558000 0! #31558500 1! #31558600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31559000 0! #31559500 1! #31559600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31560000 0! #31560500 1! #31560600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31561000 0! #31561500 1! #31561600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31562000 0! #31562500 1! #31562600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31563000 0! #31563500 1! #31563600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31564000 0! #31564500 1! #31564600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31565000 0! #31565500 1! #31565600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31566000 0! #31566500 1! #31566600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31567000 0! #31567500 1! #31567600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31568000 0! #31568500 1! #31568600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31569000 0! #31569500 1! #31569600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31570000 0! #31570500 1! #31570600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31571000 0! #31571500 1! #31571600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31572000 0! #31572500 1! #31572600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31573000 0! #31573500 1! #31573600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31574000 0! #31574500 1! #31574600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31575000 0! #31575500 1! #31575600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31576000 0! #31576500 1! #31576600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31577000 0! #31577500 1! #31577600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31578000 0! #31578500 1! #31578600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31579000 0! #31579500 1! #31579600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31580000 0! #31580500 1! #31580600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31581000 0! #31581500 1! #31581600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31582000 0! #31582500 1! #31582600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31583000 0! #31583500 1! #31583600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31584000 0! #31584500 1! #31584600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31585000 0! #31585500 1! #31585600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31586000 0! #31586500 1! #31586600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31587000 0! #31587500 1! #31587600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31588000 0! #31588500 1! #31588600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31589000 0! #31589500 1! #31589600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31590000 0! #31590500 1! #31590600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31591000 0! #31591500 1! #31591600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31592000 0! #31592500 1! #31592600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31593000 0! #31593500 1! #31593600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31594000 0! #31594500 1! #31594600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31595000 0! #31595500 1! #31595600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31596000 0! #31596500 1! #31596600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31597000 0! #31597500 1! #31597600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #31597700 bx1 ^ b110100x c #31598000 0! #31598500 1! #31598600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31599000 0! #31599500 1! #31599600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31600000 0! #31600500 1! b0x000011 C #31600600 b0x000011 J xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31601000 0! #31601500 1! #31601600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31602000 0! #31602500 1! #31602600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31603000 0! #31603500 1! #31603600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31604000 0! #31604500 1! #31604600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31605000 0! #31605500 1! #31605600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31606000 0! #31606500 1! #31606600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31607000 0! #31607500 1! #31607600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31608000 0! #31608500 1! #31608600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31609000 0! #31609500 1! #31609600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31610000 0! #31610500 1! #31610600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31611000 0! #31611500 1! #31611600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31612000 0! #31612500 1! #31612600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31613000 0! #31613500 1! #31613600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31614000 0! #31614500 1! #31614600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31615000 0! #31615500 1! #31615600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31616000 0! #31616500 1! #31616600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31617000 0! #31617500 1! #31617600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31618000 0! #31618500 1! #31618600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31619000 0! #31619500 1! #31619600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31620000 0! #31620500 1! #31620600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31621000 0! #31621500 1! #31621600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31622000 0! #31622500 1! #31622600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31623000 0! #31623500 1! #31623600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31624000 0! #31624500 1! #31624600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31625000 0! #31625500 1! #31625600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31626000 0! #31626500 1! #31626600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31627000 0! #31627500 1! #31627600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31628000 0! #31628500 1! #31628600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31629000 0! #31629500 1! #31629600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31630000 0! #31630500 1! #31630600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31631000 0! #31631500 1! #31631600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31632000 0! #31632500 1! #31632600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31633000 0! #31633500 1! #31633600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31634000 0! #31634500 1! #31634600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31635000 0! #31635500 1! #31635600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31636000 0! #31636500 1! #31636600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31637000 0! #31637500 1! #31637600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31638000 0! #31638500 1! #31638600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31639000 0! #31639500 1! #31639600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31640000 0! #31640500 1! #31640600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31641000 0! #31641500 1! #31641600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31642000 0! #31642500 1! #31642600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31643000 0! #31643500 1! #31643600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31644000 0! #31644500 1! #31644600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31645000 0! #31645500 1! #31645600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31646000 0! #31646500 1! #31646600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31647000 0! #31647500 1! #31647600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31648000 0! #31648500 1! #31648600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31649000 0! #31649500 1! #31649600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31650000 0! #31650500 1! #31650600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31651000 0! #31651500 1! #31651600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31652000 0! #31652500 1! #31652600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31653000 0! #31653500 1! #31653600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31654000 0! #31654500 1! #31654600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31655000 0! #31655500 1! #31655600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31656000 0! #31656500 1! #31656600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31657000 0! #31657500 1! #31657600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31658000 0! #31658500 1! #31658600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31659000 0! #31659500 1! #31659600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31660000 0! #31660500 1! #31660600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31661000 0! #31661500 1! #31661600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31662000 0! #31662500 1! #31662600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31663000 0! #31663500 1! #31663600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31664000 0! #31664500 1! #31664600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31665000 0! #31665500 1! #31665600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31666000 0! #31666500 1! #31666600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31667000 0! #31667500 1! #31667600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31668000 0! #31668500 1! #31668600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31669000 0! #31669500 1! #31669600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31670000 0! #31670500 1! #31670600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31671000 0! #31671500 1! #31671600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31672000 0! #31672500 1! #31672600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31673000 0! #31673500 1! #31673600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31674000 0! #31674500 1! #31674600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31675000 0! #31675500 1! #31675600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31676000 0! #31676500 1! #31676600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31677000 0! #31677500 1! #31677600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31678000 0! #31678500 1! #31678600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31679000 0! #31679500 1! #31679600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31680000 0! #31680500 1! #31680600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31681000 0! #31681500 1! #31681600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31682000 0! #31682500 1! #31682600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31683000 0! #31683500 1! #31683600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31684000 0! #31684500 1! #31684600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31685000 0! #31685500 1! #31685600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31686000 0! #31686500 1! #31686600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31687000 0! #31687500 1! #31687600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31688000 0! #31688500 1! #31688600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31689000 0! #31689500 1! #31689600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31690000 0! #31690500 1! #31690600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31691000 0! #31691500 1! #31691600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31692000 0! #31692500 1! #31692600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31693000 0! #31693500 1! #31693600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31694000 0! #31694500 1! #31694600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31695000 0! #31695500 1! #31695600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31696000 0! #31696500 1! #31696600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31697000 0! #31697500 1! #31697600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31698000 0! #31698500 1! #31698600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31699000 0! #31699500 1! #31699600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #31699700 1j 0i xj #31700000 0! #31700500 1! #31700600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31701000 0! #31701500 1! #31701600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31702000 0! #31702500 1! #31702600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31703000 0! #31703500 1! #31703600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31704000 0! #31704500 1! #31704600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31705000 0! #31705500 1! #31705600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31706000 0! #31706500 1! #31706600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31707000 0! #31707500 1! #31707600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31708000 0! #31708500 1! #31708600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31709000 0! #31709500 1! #31709600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31710000 0! #31710500 1! #31710600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31711000 0! #31711500 1! #31711600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31712000 0! #31712500 1! #31712600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31713000 0! #31713500 1! #31713600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31714000 0! #31714500 1! #31714600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31715000 0! #31715500 1! #31715600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31716000 0! #31716500 1! #31716600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31717000 0! #31717500 1! #31717600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31718000 0! #31718500 1! #31718600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31719000 0! #31719500 1! #31719600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31720000 0! #31720500 1! #31720600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31721000 0! #31721500 1! #31721600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31722000 0! #31722500 1! #31722600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31723000 0! #31723500 1! #31723600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31724000 0! #31724500 1! #31724600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31725000 0! #31725500 1! #31725600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31726000 0! #31726500 1! #31726600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31727000 0! #31727500 1! #31727600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31728000 0! #31728500 1! #31728600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31729000 0! #31729500 1! #31729600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31730000 0! #31730500 1! #31730600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31731000 0! #31731500 1! #31731600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31732000 0! #31732500 1! #31732600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31733000 0! #31733500 1! #31733600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31734000 0! #31734500 1! #31734600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31735000 0! #31735500 1! #31735600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31736000 0! #31736500 1! #31736600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31737000 0! #31737500 1! #31737600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31738000 0! #31738500 1! #31738600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31739000 0! #31739500 1! #31739600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31740000 0! #31740500 1! #31740600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31741000 0! #31741500 1! #31741600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31742000 0! #31742500 1! #31742600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31743000 0! #31743500 1! #31743600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31744000 0! #31744500 1! #31744600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31745000 0! #31745500 1! #31745600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31746000 0! #31746500 1! #31746600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31747000 0! #31747500 1! #31747600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31748000 0! #31748500 1! #31748600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31749000 0! #31749500 1! #31749600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31750000 0! #31750500 1! #31750600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31751000 0! #31751500 1! #31751600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31752000 0! #31752500 1! #31752600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31753000 0! #31753500 1! #31753600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31754000 0! #31754500 1! #31754600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31755000 0! #31755500 1! #31755600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31756000 0! #31756500 1! #31756600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31757000 0! #31757500 1! #31757600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31758000 0! #31758500 1! #31758600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31759000 0! #31759500 1! #31759600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31760000 0! #31760500 1! #31760600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31761000 0! #31761500 1! #31761600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31762000 0! #31762500 1! #31762600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31763000 0! #31763500 1! #31763600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31764000 0! #31764500 1! #31764600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31765000 0! #31765500 1! #31765600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31766000 0! #31766500 1! #31766600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31767000 0! #31767500 1! #31767600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31768000 0! #31768500 1! #31768600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31769000 0! #31769500 1! #31769600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31770000 0! #31770500 1! #31770600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31771000 0! #31771500 1! #31771600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31772000 0! #31772500 1! #31772600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31773000 0! #31773500 1! #31773600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31774000 0! #31774500 1! #31774600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31775000 0! #31775500 1! #31775600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31776000 0! #31776500 1! #31776600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31777000 0! #31777500 1! #31777600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31778000 0! #31778500 1! #31778600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31779000 0! #31779500 1! #31779600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31780000 0! #31780500 1! #31780600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31781000 0! #31781500 1! #31781600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31782000 0! #31782500 1! #31782600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31783000 0! #31783500 1! #31783600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31784000 0! #31784500 1! #31784600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31785000 0! #31785500 1! #31785600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31786000 0! #31786500 1! #31786600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31787000 0! #31787500 1! #31787600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31788000 0! #31788500 1! #31788600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31789000 0! #31789500 1! #31789600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31790000 0! #31790500 1! #31790600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31791000 0! #31791500 1! #31791600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31792000 0! #31792500 1! #31792600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31793000 0! #31793500 1! #31793600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31794000 0! #31794500 1! #31794600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31795000 0! #31795500 1! #31795600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31796000 0! #31796500 1! #31796600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31797000 0! #31797500 1! #31797600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31798000 0! #31798500 1! #31798600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31799000 0! #31799500 1! #31799600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31800000 0! #31800500 1! #31800600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31801000 0! #31801500 1! #31801600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31802000 0! #31802500 1! #31802600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31803000 0! #31803500 1! #31803600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31804000 0! #31804500 1! #31804600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31805000 0! #31805500 1! #31805600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31806000 0! #31806500 1! #31806600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31807000 0! #31807500 1! #31807600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31808000 0! #31808500 1! #31808600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31809000 0! #31809500 1! #31809600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31810000 0! #31810500 1! #31810600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31811000 0! #31811500 1! #31811600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31812000 0! #31812500 1! #31812600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31813000 0! #31813500 1! #31813600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31814000 0! #31814500 1! #31814600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31815000 0! #31815500 1! #31815600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31816000 0! #31816500 1! #31816600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31817000 0! #31817500 1! #31817600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31818000 0! #31818500 1! #31818600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31819000 0! #31819500 1! #31819600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31820000 0! #31820500 1! #31820600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31821000 0! #31821500 1! #31821600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31822000 0! #31822500 1! #31822600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31823000 0! #31823500 1! #31823600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31824000 0! #31824500 1! #31824600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31825000 0! #31825500 1! #31825600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31826000 0! #31826500 1! #31826600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31827000 0! #31827500 1! #31827600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31828000 0! #31828500 1! #31828600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31829000 0! #31829500 1! #31829600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31830000 0! #31830500 1! #31830600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31831000 0! #31831500 1! #31831600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31832000 0! #31832500 1! #31832600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31833000 0! #31833500 1! #31833600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31834000 0! #31834500 1! #31834600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31835000 0! #31835500 1! #31835600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31836000 0! #31836500 1! #31836600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31837000 0! #31837500 1! #31837600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31838000 0! #31838500 1! #31838600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31839000 0! #31839500 1! #31839600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31840000 0! #31840500 1! #31840600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31841000 0! #31841500 1! #31841600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31842000 0! #31842500 1! #31842600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31843000 0! #31843500 1! #31843600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31844000 0! #31844500 1! #31844600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31845000 0! #31845500 1! #31845600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31846000 0! #31846500 1! #31846600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31847000 0! #31847500 1! #31847600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31848000 0! #31848500 1! #31848600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31849000 0! #31849500 1! #31849600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31850000 0! #31850500 1! #31850600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31851000 0! #31851500 1! #31851600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31852000 0! #31852500 1! #31852600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #31852700 bx11 ^ b110 g b110100xx c #31853000 0! #31853500 1! #31853600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31854000 0! #31854500 1! #31854600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31855000 0! #31855500 1! #31855600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31856000 0! #31856500 1! #31856600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31857000 0! #31857500 1! #31857600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31858000 0! #31858500 1! #31858600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31859000 0! #31859500 1! #31859600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31860000 0! #31860500 1! #31860600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31861000 0! #31861500 1! #31861600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31862000 0! #31862500 1! #31862600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31863000 0! #31863500 1! #31863600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31864000 0! #31864500 1! #31864600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31865000 0! #31865500 1! #31865600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31866000 0! #31866500 1! #31866600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31867000 0! #31867500 1! #31867600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31868000 0! #31868500 1! #31868600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31869000 0! #31869500 1! #31869600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31870000 0! #31870500 1! #31870600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31871000 0! #31871500 1! #31871600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31872000 0! #31872500 1! #31872600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31873000 0! #31873500 1! #31873600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31874000 0! #31874500 1! #31874600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31875000 0! #31875500 1! #31875600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31876000 0! #31876500 1! #31876600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31877000 0! #31877500 1! #31877600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31878000 0! #31878500 1! #31878600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31879000 0! #31879500 1! #31879600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31880000 0! #31880500 1! #31880600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31881000 0! #31881500 1! #31881600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31882000 0! #31882500 1! #31882600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31883000 0! #31883500 1! #31883600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31884000 0! #31884500 1! #31884600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31885000 0! #31885500 1! #31885600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31886000 0! #31886500 1! #31886600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31887000 0! #31887500 1! #31887600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31888000 0! #31888500 1! #31888600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31889000 0! #31889500 1! #31889600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31890000 0! #31890500 1! #31890600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31891000 0! #31891500 1! #31891600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31892000 0! #31892500 1! #31892600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31893000 0! #31893500 1! #31893600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31894000 0! #31894500 1! #31894600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31895000 0! #31895500 1! #31895600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31896000 0! #31896500 1! #31896600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31897000 0! #31897500 1! #31897600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31898000 0! #31898500 1! #31898600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31899000 0! #31899500 1! #31899600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31900000 0! #31900500 1! #31900600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31901000 0! #31901500 1! #31901600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31902000 0! #31902500 1! #31902600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31903000 0! #31903500 1! #31903600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31904000 0! #31904500 1! #31904600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31905000 0! #31905500 1! #31905600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31906000 0! #31906500 1! #31906600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31907000 0! #31907500 1! #31907600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31908000 0! #31908500 1! #31908600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31909000 0! #31909500 1! #31909600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31910000 0! #31910500 1! #31910600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31911000 0! #31911500 1! #31911600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31912000 0! #31912500 1! #31912600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31913000 0! #31913500 1! #31913600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31914000 0! #31914500 1! #31914600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31915000 0! #31915500 1! #31915600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31916000 0! #31916500 1! #31916600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31917000 0! #31917500 1! #31917600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31918000 0! #31918500 1! #31918600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31919000 0! #31919500 1! #31919600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31920000 0! #31920500 1! #31920600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31921000 0! #31921500 1! #31921600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31922000 0! #31922500 1! #31922600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31923000 0! #31923500 1! #31923600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31924000 0! #31924500 1! #31924600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31925000 0! #31925500 1! #31925600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31926000 0! #31926500 1! #31926600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31927000 0! #31927500 1! #31927600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31928000 0! #31928500 1! #31928600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31929000 0! #31929500 1! #31929600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31930000 0! #31930500 1! #31930600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31931000 0! #31931500 1! #31931600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31932000 0! #31932500 1! #31932600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31933000 0! #31933500 1! #31933600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31934000 0! #31934500 1! #31934600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31935000 0! #31935500 1! #31935600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31936000 0! #31936500 1! #31936600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31937000 0! #31937500 1! #31937600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31938000 0! #31938500 1! #31938600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31939000 0! #31939500 1! #31939600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31940000 0! #31940500 1! #31940600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31941000 0! #31941500 1! #31941600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31942000 0! #31942500 1! #31942600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31943000 0! #31943500 1! #31943600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31944000 0! #31944500 1! #31944600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31945000 0! #31945500 1! #31945600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31946000 0! #31946500 1! #31946600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31947000 0! #31947500 1! #31947600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31948000 0! #31948500 1! #31948600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31949000 0! #31949500 1! #31949600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31950000 0! #31950500 1! #31950600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31951000 0! #31951500 1! #31951600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31952000 0! #31952500 1! #31952600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31953000 0! #31953500 1! #31953600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31954000 0! #31954500 1! #31954600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #31954700 1j xj #31955000 0! #31955500 1! #31955600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31956000 0! #31956500 1! #31956600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31957000 0! #31957500 1! #31957600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31958000 0! #31958500 1! #31958600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31959000 0! #31959500 1! #31959600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31960000 0! #31960500 1! #31960600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31961000 0! #31961500 1! #31961600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31962000 0! #31962500 1! #31962600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31963000 0! #31963500 1! #31963600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31964000 0! #31964500 1! #31964600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31965000 0! #31965500 1! #31965600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31966000 0! #31966500 1! #31966600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31967000 0! #31967500 1! #31967600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31968000 0! #31968500 1! #31968600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31969000 0! #31969500 1! #31969600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31970000 0! #31970500 1! #31970600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31971000 0! #31971500 1! #31971600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31972000 0! #31972500 1! #31972600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31973000 0! #31973500 1! #31973600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31974000 0! #31974500 1! #31974600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31975000 0! #31975500 1! #31975600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31976000 0! #31976500 1! #31976600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31977000 0! #31977500 1! #31977600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31978000 0! #31978500 1! #31978600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31979000 0! #31979500 1! #31979600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31980000 0! #31980500 1! #31980600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31981000 0! #31981500 1! #31981600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31982000 0! #31982500 1! #31982600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31983000 0! #31983500 1! #31983600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31984000 0! #31984500 1! #31984600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31985000 0! #31985500 1! #31985600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31986000 0! #31986500 1! #31986600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31987000 0! #31987500 1! #31987600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31988000 0! #31988500 1! #31988600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31989000 0! #31989500 1! #31989600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31990000 0! #31990500 1! #31990600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31991000 0! #31991500 1! #31991600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31992000 0! #31992500 1! #31992600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31993000 0! #31993500 1! #31993600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31994000 0! #31994500 1! #31994600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31995000 0! #31995500 1! #31995600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31996000 0! #31996500 1! #31996600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31997000 0! #31997500 1! #31997600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #31998000 0! #31998500 1! #31998600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #31999000 0! #31999500 1! #31999600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32000000 0! #32000500 1! #32000600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32001000 0! #32001500 1! #32001600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32002000 0! #32002500 1! #32002600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32003000 0! #32003500 1! #32003600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32004000 0! #32004500 1! #32004600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32005000 0! #32005500 1! #32005600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32006000 0! #32006500 1! #32006600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32007000 0! #32007500 1! #32007600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32008000 0! #32008500 1! #32008600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32009000 0! #32009500 1! #32009600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32010000 0! #32010500 1! #32010600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32011000 0! #32011500 1! #32011600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32012000 0! #32012500 1! #32012600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32013000 0! #32013500 1! #32013600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32014000 0! #32014500 1! #32014600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32015000 0! #32015500 1! #32015600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32016000 0! #32016500 1! #32016600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32017000 0! #32017500 1! #32017600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32018000 0! #32018500 1! #32018600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32019000 0! #32019500 1! #32019600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32020000 0! #32020500 1! #32020600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32021000 0! #32021500 1! #32021600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32022000 0! #32022500 1! #32022600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32023000 0! #32023500 1! #32023600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32024000 0! #32024500 1! #32024600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32025000 0! #32025500 1! #32025600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32026000 0! #32026500 1! #32026600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32027000 0! #32027500 1! #32027600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32028000 0! #32028500 1! #32028600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32029000 0! #32029500 1! #32029600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32030000 0! #32030500 1! #32030600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32031000 0! #32031500 1! #32031600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32032000 0! #32032500 1! #32032600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32033000 0! #32033500 1! #32033600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32034000 0! #32034500 1! #32034600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32035000 0! #32035500 1! #32035600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32036000 0! #32036500 1! #32036600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32037000 0! #32037500 1! #32037600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32038000 0! #32038500 1! #32038600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32039000 0! #32039500 1! #32039600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32040000 0! #32040500 1! #32040600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32041000 0! #32041500 1! #32041600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32042000 0! #32042500 1! #32042600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32043000 0! #32043500 1! #32043600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32044000 0! #32044500 1! #32044600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32045000 0! #32045500 1! #32045600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32046000 0! #32046500 1! #32046600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32047000 0! #32047500 1! #32047600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32048000 0! #32048500 1! #32048600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32049000 0! #32049500 1! #32049600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32050000 0! #32050500 1! #32050600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32051000 0! #32051500 1! #32051600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32052000 0! #32052500 1! #32052600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32053000 0! #32053500 1! #32053600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32054000 0! #32054500 1! #32054600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32055000 0! #32055500 1! #32055600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32056000 0! #32056500 1! #32056600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32057000 0! #32057500 1! #32057600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32058000 0! #32058500 1! #32058600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32059000 0! #32059500 1! #32059600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32060000 0! #32060500 1! #32060600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32061000 0! #32061500 1! #32061600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32062000 0! #32062500 1! #32062600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32063000 0! #32063500 1! #32063600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32064000 0! #32064500 1! #32064600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32065000 0! #32065500 1! #32065600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32066000 0! #32066500 1! #32066600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32067000 0! #32067500 1! #32067600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32068000 0! #32068500 1! #32068600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32069000 0! #32069500 1! #32069600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32070000 0! #32070500 1! #32070600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32071000 0! #32071500 1! #32071600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32072000 0! #32072500 1! #32072600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32073000 0! #32073500 1! #32073600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32074000 0! #32074500 1! #32074600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32075000 0! #32075500 1! #32075600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32076000 0! #32076500 1! #32076600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32077000 0! #32077500 1! #32077600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32078000 0! #32078500 1! #32078600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32079000 0! #32079500 1! #32079600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32080000 0! #32080500 1! #32080600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32081000 0! #32081500 1! #32081600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32082000 0! #32082500 1! #32082600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32083000 0! #32083500 1! #32083600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32084000 0! #32084500 1! #32084600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32085000 0! #32085500 1! #32085600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32086000 0! #32086500 1! #32086600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32087000 0! #32087500 1! #32087600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32088000 0! #32088500 1! #32088600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32089000 0! #32089500 1! #32089600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32090000 0! #32090500 1! #32090600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32091000 0! #32091500 1! #32091600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32092000 0! #32092500 1! #32092600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32093000 0! #32093500 1! #32093600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32094000 0! #32094500 1! #32094600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32095000 0! #32095500 1! #32095600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32096000 0! #32096500 1! #32096600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32097000 0! #32097500 1! #32097600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32098000 0! #32098500 1! #32098600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32099000 0! #32099500 1! #32099600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32100000 0! #32100500 1! #32100600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32101000 0! #32101500 1! #32101600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32102000 0! #32102500 1! #32102600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32103000 0! #32103500 1! #32103600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32104000 0! #32104500 1! #32104600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32105000 0! #32105500 1! #32105600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32106000 0! #32106500 1! #32106600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32107000 0! #32107500 1! #32107600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #32107700 bx111 ^ b101 g b10100xxx c xe #32108000 0! #32108500 1! #32108600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32109000 0! #32109500 1! #32109600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32110000 0! #32110500 1! #32110600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32111000 0! #32111500 1! #32111600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32112000 0! #32112500 1! #32112600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32113000 0! #32113500 1! #32113600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32114000 0! #32114500 1! #32114600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32115000 0! #32115500 1! #32115600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32116000 0! #32116500 1! #32116600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32117000 0! #32117500 1! #32117600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32118000 0! #32118500 1! #32118600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32119000 0! #32119500 1! #32119600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32120000 0! #32120500 1! #32120600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32121000 0! #32121500 1! #32121600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32122000 0! #32122500 1! #32122600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32123000 0! #32123500 1! #32123600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32124000 0! #32124500 1! #32124600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32125000 0! #32125500 1! #32125600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32126000 0! #32126500 1! #32126600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32127000 0! #32127500 1! #32127600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32128000 0! #32128500 1! #32128600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32129000 0! #32129500 1! #32129600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32130000 0! #32130500 1! #32130600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32131000 0! #32131500 1! #32131600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32132000 0! #32132500 1! #32132600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32133000 0! #32133500 1! #32133600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32134000 0! #32134500 1! #32134600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32135000 0! #32135500 1! #32135600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32136000 0! #32136500 1! #32136600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32137000 0! #32137500 1! #32137600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32138000 0! #32138500 1! #32138600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32139000 0! #32139500 1! #32139600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32140000 0! #32140500 1! #32140600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32141000 0! #32141500 1! #32141600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32142000 0! #32142500 1! #32142600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32143000 0! #32143500 1! #32143600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32144000 0! #32144500 1! #32144600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32145000 0! #32145500 1! #32145600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32146000 0! #32146500 1! #32146600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32147000 0! #32147500 1! #32147600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32148000 0! #32148500 1! #32148600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32149000 0! #32149500 1! #32149600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32150000 0! #32150500 1! #32150600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32151000 0! #32151500 1! #32151600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32152000 0! #32152500 1! #32152600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32153000 0! #32153500 1! #32153600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32154000 0! #32154500 1! #32154600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32155000 0! #32155500 1! #32155600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32156000 0! #32156500 1! #32156600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32157000 0! #32157500 1! #32157600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32158000 0! #32158500 1! #32158600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32159000 0! #32159500 1! #32159600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32160000 0! #32160500 1! #32160600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32161000 0! #32161500 1! #32161600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32162000 0! #32162500 1! #32162600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32163000 0! #32163500 1! #32163600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32164000 0! #32164500 1! #32164600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32165000 0! #32165500 1! #32165600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32166000 0! #32166500 1! #32166600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32167000 0! #32167500 1! #32167600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32168000 0! #32168500 1! #32168600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32169000 0! #32169500 1! #32169600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32170000 0! #32170500 1! #32170600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32171000 0! #32171500 1! #32171600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32172000 0! #32172500 1! #32172600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32173000 0! #32173500 1! #32173600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32174000 0! #32174500 1! #32174600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32175000 0! #32175500 1! #32175600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32176000 0! #32176500 1! #32176600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32177000 0! #32177500 1! #32177600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32178000 0! #32178500 1! #32178600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32179000 0! #32179500 1! #32179600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32180000 0! #32180500 1! #32180600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32181000 0! #32181500 1! #32181600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32182000 0! #32182500 1! #32182600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32183000 0! #32183500 1! #32183600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32184000 0! #32184500 1! #32184600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32185000 0! #32185500 1! #32185600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32186000 0! #32186500 1! #32186600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32187000 0! #32187500 1! #32187600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32188000 0! #32188500 1! #32188600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32189000 0! #32189500 1! #32189600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32190000 0! #32190500 1! #32190600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32191000 0! #32191500 1! #32191600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32192000 0! #32192500 1! #32192600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32193000 0! #32193500 1! #32193600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32194000 0! #32194500 1! #32194600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32195000 0! #32195500 1! #32195600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32196000 0! #32196500 1! #32196600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32197000 0! #32197500 1! #32197600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32198000 0! #32198500 1! #32198600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32199000 0! #32199500 1! #32199600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32200000 0! #32200500 1! #32200600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32201000 0! #32201500 1! #32201600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32202000 0! #32202500 1! #32202600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32203000 0! #32203500 1! #32203600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32204000 0! #32204500 1! #32204600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32205000 0! #32205500 1! #32205600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32206000 0! #32206500 1! #32206600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32207000 0! #32207500 1! #32207600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32208000 0! #32208500 1! #32208600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32209000 0! #32209500 1! #32209600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #32209700 1j xj #32210000 0! #32210500 1! #32210600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32211000 0! #32211500 1! #32211600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32212000 0! #32212500 1! #32212600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32213000 0! #32213500 1! #32213600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32214000 0! #32214500 1! #32214600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32215000 0! #32215500 1! #32215600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32216000 0! #32216500 1! #32216600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32217000 0! #32217500 1! #32217600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32218000 0! #32218500 1! #32218600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32219000 0! #32219500 1! #32219600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32220000 0! #32220500 1! #32220600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32221000 0! #32221500 1! #32221600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32222000 0! #32222500 1! #32222600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32223000 0! #32223500 1! #32223600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32224000 0! #32224500 1! #32224600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32225000 0! #32225500 1! #32225600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32226000 0! #32226500 1! #32226600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32227000 0! #32227500 1! #32227600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32228000 0! #32228500 1! #32228600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32229000 0! #32229500 1! #32229600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32230000 0! #32230500 1! #32230600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32231000 0! #32231500 1! #32231600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32232000 0! #32232500 1! #32232600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32233000 0! #32233500 1! #32233600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32234000 0! #32234500 1! #32234600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32235000 0! #32235500 1! #32235600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32236000 0! #32236500 1! #32236600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32237000 0! #32237500 1! #32237600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32238000 0! #32238500 1! #32238600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32239000 0! #32239500 1! #32239600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32240000 0! #32240500 1! #32240600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32241000 0! #32241500 1! #32241600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32242000 0! #32242500 1! #32242600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32243000 0! #32243500 1! #32243600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32244000 0! #32244500 1! #32244600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32245000 0! #32245500 1! #32245600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32246000 0! #32246500 1! #32246600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32247000 0! #32247500 1! #32247600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32248000 0! #32248500 1! #32248600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32249000 0! #32249500 1! #32249600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32250000 0! #32250500 1! #32250600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32251000 0! #32251500 1! #32251600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32252000 0! #32252500 1! #32252600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32253000 0! #32253500 1! #32253600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32254000 0! #32254500 1! #32254600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32255000 0! #32255500 1! #32255600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32256000 0! #32256500 1! #32256600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32257000 0! #32257500 1! #32257600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32258000 0! #32258500 1! #32258600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32259000 0! #32259500 1! #32259600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32260000 0! #32260500 1! #32260600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32261000 0! #32261500 1! #32261600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32262000 0! #32262500 1! #32262600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32263000 0! #32263500 1! #32263600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32264000 0! #32264500 1! #32264600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32265000 0! #32265500 1! #32265600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32266000 0! #32266500 1! #32266600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32267000 0! #32267500 1! #32267600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32268000 0! #32268500 1! #32268600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32269000 0! #32269500 1! #32269600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32270000 0! #32270500 1! #32270600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32271000 0! #32271500 1! #32271600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32272000 0! #32272500 1! #32272600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32273000 0! #32273500 1! #32273600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32274000 0! #32274500 1! #32274600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32275000 0! #32275500 1! #32275600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32276000 0! #32276500 1! #32276600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32277000 0! #32277500 1! #32277600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32278000 0! #32278500 1! #32278600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32279000 0! #32279500 1! #32279600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32280000 0! #32280500 1! #32280600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32281000 0! #32281500 1! #32281600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32282000 0! #32282500 1! #32282600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32283000 0! #32283500 1! #32283600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32284000 0! #32284500 1! #32284600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32285000 0! #32285500 1! #32285600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32286000 0! #32286500 1! #32286600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32287000 0! #32287500 1! #32287600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32288000 0! #32288500 1! #32288600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32289000 0! #32289500 1! #32289600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32290000 0! #32290500 1! #32290600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32291000 0! #32291500 1! #32291600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32292000 0! #32292500 1! #32292600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32293000 0! #32293500 1! #32293600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32294000 0! #32294500 1! #32294600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32295000 0! #32295500 1! #32295600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32296000 0! #32296500 1! #32296600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32297000 0! #32297500 1! #32297600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32298000 0! #32298500 1! #32298600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32299000 0! #32299500 1! #32299600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32300000 0! #32300500 1! #32300600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32301000 0! #32301500 1! #32301600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32302000 0! #32302500 1! #32302600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32303000 0! #32303500 1! #32303600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32304000 0! #32304500 1! #32304600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32305000 0! #32305500 1! #32305600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32306000 0! #32306500 1! #32306600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32307000 0! #32307500 1! #32307600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32308000 0! #32308500 1! #32308600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32309000 0! #32309500 1! #32309600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32310000 0! #32310500 1! #32310600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32311000 0! #32311500 1! #32311600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32312000 0! #32312500 1! #32312600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32313000 0! #32313500 1! #32313600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32314000 0! #32314500 1! #32314600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32315000 0! #32315500 1! #32315600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32316000 0! #32316500 1! #32316600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32317000 0! #32317500 1! #32317600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32318000 0! #32318500 1! #32318600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32319000 0! #32319500 1! #32319600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32320000 0! #32320500 1! #32320600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32321000 0! #32321500 1! #32321600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32322000 0! #32322500 1! #32322600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32323000 0! #32323500 1! #32323600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32324000 0! #32324500 1! #32324600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32325000 0! #32325500 1! #32325600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32326000 0! #32326500 1! #32326600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32327000 0! #32327500 1! #32327600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32328000 0! #32328500 1! #32328600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32329000 0! #32329500 1! #32329600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32330000 0! #32330500 1! #32330600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32331000 0! #32331500 1! #32331600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32332000 0! #32332500 1! #32332600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32333000 0! #32333500 1! #32333600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32334000 0! #32334500 1! #32334600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32335000 0! #32335500 1! #32335600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32336000 0! #32336500 1! #32336600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32337000 0! #32337500 1! #32337600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32338000 0! #32338500 1! #32338600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32339000 0! #32339500 1! #32339600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32340000 0! #32340500 1! #32340600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32341000 0! #32341500 1! #32341600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32342000 0! #32342500 1! #32342600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32343000 0! #32343500 1! #32343600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32344000 0! #32344500 1! #32344600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32345000 0! #32345500 1! #32345600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32346000 0! #32346500 1! #32346600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32347000 0! #32347500 1! #32347600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32348000 0! #32348500 1! #32348600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32349000 0! #32349500 1! #32349600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32350000 0! #32350500 1! #32350600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32351000 0! #32351500 1! #32351600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32352000 0! #32352500 1! #32352600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32353000 0! #32353500 1! #32353600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32354000 0! #32354500 1! #32354600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32355000 0! #32355500 1! #32355600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32356000 0! #32356500 1! #32356600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32357000 0! #32357500 1! #32357600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32358000 0! #32358500 1! #32358600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32359000 0! #32359500 1! #32359600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32360000 0! #32360500 1! #32360600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32361000 0! #32361500 1! #32361600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32362000 0! #32362500 1! #32362600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #32362700 bx1111 ^ b100 g b100xxxx c 0e #32363000 0! #32363500 1! #32363600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32364000 0! #32364500 1! #32364600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32365000 0! #32365500 1! #32365600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32366000 0! #32366500 1! #32366600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32367000 0! #32367500 1! #32367600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32368000 0! #32368500 1! #32368600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32369000 0! #32369500 1! #32369600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32370000 0! #32370500 1! #32370600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32371000 0! #32371500 1! #32371600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32372000 0! #32372500 1! #32372600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32373000 0! #32373500 1! #32373600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32374000 0! #32374500 1! #32374600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32375000 0! #32375500 1! #32375600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32376000 0! #32376500 1! #32376600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32377000 0! #32377500 1! #32377600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32378000 0! #32378500 1! #32378600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32379000 0! #32379500 1! #32379600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32380000 0! #32380500 1! #32380600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32381000 0! #32381500 1! #32381600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32382000 0! #32382500 1! #32382600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32383000 0! #32383500 1! #32383600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32384000 0! #32384500 1! #32384600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32385000 0! #32385500 1! #32385600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32386000 0! #32386500 1! #32386600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32387000 0! #32387500 1! #32387600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32388000 0! #32388500 1! #32388600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32389000 0! #32389500 1! #32389600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32390000 0! #32390500 1! #32390600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32391000 0! #32391500 1! #32391600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32392000 0! #32392500 1! #32392600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32393000 0! #32393500 1! #32393600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32394000 0! #32394500 1! #32394600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32395000 0! #32395500 1! #32395600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32396000 0! #32396500 1! #32396600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32397000 0! #32397500 1! #32397600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32398000 0! #32398500 1! #32398600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32399000 0! #32399500 1! #32399600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32400000 0! #32400500 1! #32400600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32401000 0! #32401500 1! #32401600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32402000 0! #32402500 1! #32402600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32403000 0! #32403500 1! #32403600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32404000 0! #32404500 1! #32404600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32405000 0! #32405500 1! #32405600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32406000 0! #32406500 1! #32406600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32407000 0! #32407500 1! #32407600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32408000 0! #32408500 1! #32408600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32409000 0! #32409500 1! #32409600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32410000 0! #32410500 1! #32410600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32411000 0! #32411500 1! #32411600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32412000 0! #32412500 1! #32412600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32413000 0! #32413500 1! #32413600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32414000 0! #32414500 1! #32414600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32415000 0! #32415500 1! #32415600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32416000 0! #32416500 1! #32416600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32417000 0! #32417500 1! #32417600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32418000 0! #32418500 1! #32418600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32419000 0! #32419500 1! #32419600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32420000 0! #32420500 1! #32420600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32421000 0! #32421500 1! #32421600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32422000 0! #32422500 1! #32422600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32423000 0! #32423500 1! #32423600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32424000 0! #32424500 1! #32424600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32425000 0! #32425500 1! #32425600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32426000 0! #32426500 1! #32426600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32427000 0! #32427500 1! #32427600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32428000 0! #32428500 1! #32428600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32429000 0! #32429500 1! #32429600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32430000 0! #32430500 1! #32430600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32431000 0! #32431500 1! #32431600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32432000 0! #32432500 1! #32432600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32433000 0! #32433500 1! #32433600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32434000 0! #32434500 1! #32434600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32435000 0! #32435500 1! #32435600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32436000 0! #32436500 1! #32436600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32437000 0! #32437500 1! #32437600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32438000 0! #32438500 1! #32438600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32439000 0! #32439500 1! #32439600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32440000 0! #32440500 1! #32440600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32441000 0! #32441500 1! #32441600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32442000 0! #32442500 1! #32442600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32443000 0! #32443500 1! #32443600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32444000 0! #32444500 1! #32444600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32445000 0! #32445500 1! #32445600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32446000 0! #32446500 1! #32446600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32447000 0! #32447500 1! #32447600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32448000 0! #32448500 1! #32448600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32449000 0! #32449500 1! #32449600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32450000 0! #32450500 1! #32450600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32451000 0! #32451500 1! #32451600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32452000 0! #32452500 1! #32452600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32453000 0! #32453500 1! #32453600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32454000 0! #32454500 1! #32454600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32455000 0! #32455500 1! #32455600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32456000 0! #32456500 1! #32456600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32457000 0! #32457500 1! #32457600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32458000 0! #32458500 1! #32458600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32459000 0! #32459500 1! #32459600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32460000 0! #32460500 1! #32460600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32461000 0! #32461500 1! #32461600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32462000 0! #32462500 1! #32462600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32463000 0! #32463500 1! #32463600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32464000 0! #32464500 1! #32464600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #32464700 1j xj #32465000 0! #32465500 1! #32465600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32466000 0! #32466500 1! #32466600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32467000 0! #32467500 1! #32467600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32468000 0! #32468500 1! #32468600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32469000 0! #32469500 1! #32469600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32470000 0! #32470500 1! #32470600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32471000 0! #32471500 1! #32471600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32472000 0! #32472500 1! #32472600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32473000 0! #32473500 1! #32473600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32474000 0! #32474500 1! #32474600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32475000 0! #32475500 1! #32475600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32476000 0! #32476500 1! #32476600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32477000 0! #32477500 1! #32477600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32478000 0! #32478500 1! #32478600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32479000 0! #32479500 1! #32479600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32480000 0! #32480500 1! #32480600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32481000 0! #32481500 1! #32481600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32482000 0! #32482500 1! #32482600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32483000 0! #32483500 1! #32483600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32484000 0! #32484500 1! #32484600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32485000 0! #32485500 1! #32485600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32486000 0! #32486500 1! #32486600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32487000 0! #32487500 1! #32487600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32488000 0! #32488500 1! #32488600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32489000 0! #32489500 1! #32489600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32490000 0! #32490500 1! #32490600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32491000 0! #32491500 1! #32491600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32492000 0! #32492500 1! #32492600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32493000 0! #32493500 1! #32493600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32494000 0! #32494500 1! #32494600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32495000 0! #32495500 1! #32495600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32496000 0! #32496500 1! #32496600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32497000 0! #32497500 1! #32497600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32498000 0! #32498500 1! #32498600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32499000 0! #32499500 1! #32499600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32500000 0! #32500500 1! #32500600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32501000 0! #32501500 1! #32501600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32502000 0! #32502500 1! #32502600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32503000 0! #32503500 1! #32503600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32504000 0! #32504500 1! #32504600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32505000 0! #32505500 1! #32505600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32506000 0! #32506500 1! #32506600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32507000 0! #32507500 1! #32507600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32508000 0! #32508500 1! #32508600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32509000 0! #32509500 1! #32509600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32510000 0! #32510500 1! #32510600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32511000 0! #32511500 1! #32511600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32512000 0! #32512500 1! #32512600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32513000 0! #32513500 1! #32513600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32514000 0! #32514500 1! #32514600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32515000 0! #32515500 1! #32515600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32516000 0! #32516500 1! #32516600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32517000 0! #32517500 1! #32517600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32518000 0! #32518500 1! #32518600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32519000 0! #32519500 1! #32519600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32520000 0! #32520500 1! #32520600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32521000 0! #32521500 1! #32521600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32522000 0! #32522500 1! #32522600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32523000 0! #32523500 1! #32523600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32524000 0! #32524500 1! #32524600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32525000 0! #32525500 1! #32525600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32526000 0! #32526500 1! #32526600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32527000 0! #32527500 1! #32527600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32528000 0! #32528500 1! #32528600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32529000 0! #32529500 1! #32529600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32530000 0! #32530500 1! #32530600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32531000 0! #32531500 1! #32531600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32532000 0! #32532500 1! #32532600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32533000 0! #32533500 1! #32533600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32534000 0! #32534500 1! #32534600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32535000 0! #32535500 1! #32535600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32536000 0! #32536500 1! #32536600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32537000 0! #32537500 1! #32537600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32538000 0! #32538500 1! #32538600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32539000 0! #32539500 1! #32539600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32540000 0! #32540500 1! #32540600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32541000 0! #32541500 1! #32541600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32542000 0! #32542500 1! #32542600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32543000 0! #32543500 1! #32543600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32544000 0! #32544500 1! #32544600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32545000 0! #32545500 1! #32545600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32546000 0! #32546500 1! #32546600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32547000 0! #32547500 1! #32547600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32548000 0! #32548500 1! #32548600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32549000 0! #32549500 1! #32549600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32550000 0! #32550500 1! #32550600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32551000 0! #32551500 1! #32551600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32552000 0! #32552500 1! #32552600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32553000 0! #32553500 1! #32553600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32554000 0! #32554500 1! #32554600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32555000 0! #32555500 1! #32555600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32556000 0! #32556500 1! #32556600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32557000 0! #32557500 1! #32557600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32558000 0! #32558500 1! #32558600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32559000 0! #32559500 1! #32559600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32560000 0! #32560500 1! #32560600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32561000 0! #32561500 1! #32561600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32562000 0! #32562500 1! #32562600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32563000 0! #32563500 1! #32563600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32564000 0! #32564500 1! #32564600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32565000 0! #32565500 1! #32565600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32566000 0! #32566500 1! #32566600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32567000 0! #32567500 1! #32567600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32568000 0! #32568500 1! #32568600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32569000 0! #32569500 1! #32569600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32570000 0! #32570500 1! #32570600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32571000 0! #32571500 1! #32571600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32572000 0! #32572500 1! #32572600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32573000 0! #32573500 1! #32573600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32574000 0! #32574500 1! #32574600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32575000 0! #32575500 1! #32575600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32576000 0! #32576500 1! #32576600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32577000 0! #32577500 1! #32577600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32578000 0! #32578500 1! #32578600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32579000 0! #32579500 1! #32579600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32580000 0! #32580500 1! #32580600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32581000 0! #32581500 1! #32581600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32582000 0! #32582500 1! #32582600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32583000 0! #32583500 1! #32583600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32584000 0! #32584500 1! #32584600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32585000 0! #32585500 1! #32585600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32586000 0! #32586500 1! #32586600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32587000 0! #32587500 1! #32587600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32588000 0! #32588500 1! #32588600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32589000 0! #32589500 1! #32589600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32590000 0! #32590500 1! #32590600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32591000 0! #32591500 1! #32591600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32592000 0! #32592500 1! #32592600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32593000 0! #32593500 1! #32593600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32594000 0! #32594500 1! #32594600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32595000 0! #32595500 1! #32595600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32596000 0! #32596500 1! #32596600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32597000 0! #32597500 1! #32597600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32598000 0! #32598500 1! #32598600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32599000 0! #32599500 1! #32599600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32600000 0! #32600500 1! #32600600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32601000 0! #32601500 1! #32601600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32602000 0! #32602500 1! #32602600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32603000 0! #32603500 1! #32603600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32604000 0! #32604500 1! #32604600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32605000 0! #32605500 1! #32605600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32606000 0! #32606500 1! #32606600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32607000 0! #32607500 1! #32607600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32608000 0! #32608500 1! #32608600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32609000 0! #32609500 1! #32609600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32610000 0! #32610500 1! #32610600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32611000 0! #32611500 1! #32611600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32612000 0! #32612500 1! #32612600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32613000 0! #32613500 1! #32613600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32614000 0! #32614500 1! #32614600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32615000 0! #32615500 1! #32615600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32616000 0! #32616500 1! #32616600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32617000 0! #32617500 1! #32617600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #32617700 bx11111 ^ b11 g b100xxxxx c #32618000 0! #32618500 1! #32618600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32619000 0! #32619500 1! #32619600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32620000 0! #32620500 1! #32620600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32621000 0! #32621500 1! #32621600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32622000 0! #32622500 1! #32622600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32623000 0! #32623500 1! #32623600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32624000 0! #32624500 1! #32624600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32625000 0! #32625500 1! #32625600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32626000 0! #32626500 1! #32626600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32627000 0! #32627500 1! #32627600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32628000 0! #32628500 1! #32628600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32629000 0! #32629500 1! #32629600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32630000 0! #32630500 1! #32630600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32631000 0! #32631500 1! #32631600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32632000 0! #32632500 1! #32632600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32633000 0! #32633500 1! #32633600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32634000 0! #32634500 1! #32634600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32635000 0! #32635500 1! #32635600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32636000 0! #32636500 1! #32636600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32637000 0! #32637500 1! #32637600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32638000 0! #32638500 1! #32638600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32639000 0! #32639500 1! #32639600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32640000 0! #32640500 1! #32640600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32641000 0! #32641500 1! #32641600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32642000 0! #32642500 1! #32642600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32643000 0! #32643500 1! #32643600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32644000 0! #32644500 1! #32644600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32645000 0! #32645500 1! #32645600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32646000 0! #32646500 1! #32646600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32647000 0! #32647500 1! #32647600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32648000 0! #32648500 1! #32648600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32649000 0! #32649500 1! #32649600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32650000 0! #32650500 1! #32650600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32651000 0! #32651500 1! #32651600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32652000 0! #32652500 1! #32652600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32653000 0! #32653500 1! #32653600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32654000 0! #32654500 1! #32654600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32655000 0! #32655500 1! #32655600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32656000 0! #32656500 1! #32656600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32657000 0! #32657500 1! #32657600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32658000 0! #32658500 1! #32658600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32659000 0! #32659500 1! #32659600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32660000 0! #32660500 1! #32660600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32661000 0! #32661500 1! #32661600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32662000 0! #32662500 1! #32662600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32663000 0! #32663500 1! #32663600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32664000 0! #32664500 1! #32664600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32665000 0! #32665500 1! #32665600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32666000 0! #32666500 1! #32666600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32667000 0! #32667500 1! #32667600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32668000 0! #32668500 1! #32668600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32669000 0! #32669500 1! #32669600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32670000 0! #32670500 1! #32670600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32671000 0! #32671500 1! #32671600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32672000 0! #32672500 1! #32672600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32673000 0! #32673500 1! #32673600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32674000 0! #32674500 1! #32674600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32675000 0! #32675500 1! #32675600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32676000 0! #32676500 1! #32676600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32677000 0! #32677500 1! #32677600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32678000 0! #32678500 1! #32678600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32679000 0! #32679500 1! #32679600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32680000 0! #32680500 1! #32680600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32681000 0! #32681500 1! #32681600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32682000 0! #32682500 1! #32682600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32683000 0! #32683500 1! #32683600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32684000 0! #32684500 1! #32684600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32685000 0! #32685500 1! #32685600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32686000 0! #32686500 1! #32686600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32687000 0! #32687500 1! #32687600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32688000 0! #32688500 1! #32688600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32689000 0! #32689500 1! #32689600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32690000 0! #32690500 1! #32690600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32691000 0! #32691500 1! #32691600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32692000 0! #32692500 1! #32692600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32693000 0! #32693500 1! #32693600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32694000 0! #32694500 1! #32694600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32695000 0! #32695500 1! #32695600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32696000 0! #32696500 1! #32696600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32697000 0! #32697500 1! #32697600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32698000 0! #32698500 1! #32698600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32699000 0! #32699500 1! #32699600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32700000 0! #32700500 1! #32700600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32701000 0! #32701500 1! #32701600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32702000 0! #32702500 1! #32702600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32703000 0! #32703500 1! #32703600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32704000 0! #32704500 1! #32704600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32705000 0! #32705500 1! #32705600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32706000 0! #32706500 1! #32706600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32707000 0! #32707500 1! #32707600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32708000 0! #32708500 1! #32708600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32709000 0! #32709500 1! #32709600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32710000 0! #32710500 1! #32710600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32711000 0! #32711500 1! #32711600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32712000 0! #32712500 1! #32712600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32713000 0! #32713500 1! #32713600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32714000 0! #32714500 1! #32714600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32715000 0! #32715500 1! #32715600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32716000 0! #32716500 1! #32716600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32717000 0! #32717500 1! #32717600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32718000 0! #32718500 1! #32718600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32719000 0! #32719500 1! #32719600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #32719700 1j xj #32720000 0! #32720500 1! #32720600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32721000 0! #32721500 1! #32721600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32722000 0! #32722500 1! #32722600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32723000 0! #32723500 1! #32723600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32724000 0! #32724500 1! #32724600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32725000 0! #32725500 1! #32725600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32726000 0! #32726500 1! #32726600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32727000 0! #32727500 1! #32727600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32728000 0! #32728500 1! #32728600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32729000 0! #32729500 1! #32729600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32730000 0! #32730500 1! #32730600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32731000 0! #32731500 1! #32731600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32732000 0! #32732500 1! #32732600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32733000 0! #32733500 1! #32733600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32734000 0! #32734500 1! #32734600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32735000 0! #32735500 1! #32735600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32736000 0! #32736500 1! #32736600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32737000 0! #32737500 1! #32737600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32738000 0! #32738500 1! #32738600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32739000 0! #32739500 1! #32739600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32740000 0! #32740500 1! #32740600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32741000 0! #32741500 1! #32741600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32742000 0! #32742500 1! #32742600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32743000 0! #32743500 1! #32743600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32744000 0! #32744500 1! #32744600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32745000 0! #32745500 1! #32745600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32746000 0! #32746500 1! #32746600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32747000 0! #32747500 1! #32747600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32748000 0! #32748500 1! #32748600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32749000 0! #32749500 1! #32749600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32750000 0! #32750500 1! #32750600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32751000 0! #32751500 1! #32751600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32752000 0! #32752500 1! #32752600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32753000 0! #32753500 1! #32753600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32754000 0! #32754500 1! #32754600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32755000 0! #32755500 1! #32755600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32756000 0! #32756500 1! #32756600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32757000 0! #32757500 1! #32757600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32758000 0! #32758500 1! #32758600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32759000 0! #32759500 1! #32759600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32760000 0! #32760500 1! #32760600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32761000 0! #32761500 1! #32761600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32762000 0! #32762500 1! #32762600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32763000 0! #32763500 1! #32763600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32764000 0! #32764500 1! #32764600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32765000 0! #32765500 1! #32765600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32766000 0! #32766500 1! #32766600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32767000 0! #32767500 1! #32767600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32768000 0! #32768500 1! #32768600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32769000 0! #32769500 1! #32769600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32770000 0! #32770500 1! #32770600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32771000 0! #32771500 1! #32771600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32772000 0! #32772500 1! #32772600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32773000 0! #32773500 1! #32773600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32774000 0! #32774500 1! #32774600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32775000 0! #32775500 1! #32775600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32776000 0! #32776500 1! #32776600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32777000 0! #32777500 1! #32777600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32778000 0! #32778500 1! #32778600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32779000 0! #32779500 1! #32779600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32780000 0! #32780500 1! #32780600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32781000 0! #32781500 1! #32781600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32782000 0! #32782500 1! #32782600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32783000 0! #32783500 1! #32783600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32784000 0! #32784500 1! #32784600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32785000 0! #32785500 1! #32785600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32786000 0! #32786500 1! #32786600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32787000 0! #32787500 1! #32787600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32788000 0! #32788500 1! #32788600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32789000 0! #32789500 1! #32789600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32790000 0! #32790500 1! #32790600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32791000 0! #32791500 1! #32791600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32792000 0! #32792500 1! #32792600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32793000 0! #32793500 1! #32793600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32794000 0! #32794500 1! #32794600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32795000 0! #32795500 1! #32795600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32796000 0! #32796500 1! #32796600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32797000 0! #32797500 1! #32797600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32798000 0! #32798500 1! #32798600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32799000 0! #32799500 1! #32799600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32800000 0! #32800500 1! #32800600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32801000 0! #32801500 1! #32801600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32802000 0! #32802500 1! #32802600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32803000 0! #32803500 1! #32803600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32804000 0! #32804500 1! #32804600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32805000 0! #32805500 1! #32805600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32806000 0! #32806500 1! #32806600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32807000 0! #32807500 1! #32807600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32808000 0! #32808500 1! #32808600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32809000 0! #32809500 1! #32809600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32810000 0! #32810500 1! #32810600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32811000 0! #32811500 1! #32811600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32812000 0! #32812500 1! #32812600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32813000 0! #32813500 1! #32813600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32814000 0! #32814500 1! #32814600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32815000 0! #32815500 1! #32815600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32816000 0! #32816500 1! #32816600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32817000 0! #32817500 1! #32817600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32818000 0! #32818500 1! #32818600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32819000 0! #32819500 1! #32819600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32820000 0! #32820500 1! #32820600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32821000 0! #32821500 1! #32821600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32822000 0! #32822500 1! #32822600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32823000 0! #32823500 1! #32823600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32824000 0! #32824500 1! #32824600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32825000 0! #32825500 1! #32825600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32826000 0! #32826500 1! #32826600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32827000 0! #32827500 1! #32827600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32828000 0! #32828500 1! #32828600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32829000 0! #32829500 1! #32829600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32830000 0! #32830500 1! #32830600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32831000 0! #32831500 1! #32831600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32832000 0! #32832500 1! #32832600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32833000 0! #32833500 1! #32833600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32834000 0! #32834500 1! #32834600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32835000 0! #32835500 1! #32835600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32836000 0! #32836500 1! #32836600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32837000 0! #32837500 1! #32837600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32838000 0! #32838500 1! #32838600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32839000 0! #32839500 1! #32839600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32840000 0! #32840500 1! #32840600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32841000 0! #32841500 1! #32841600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32842000 0! #32842500 1! #32842600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32843000 0! #32843500 1! #32843600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32844000 0! #32844500 1! #32844600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32845000 0! #32845500 1! #32845600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32846000 0! #32846500 1! #32846600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32847000 0! #32847500 1! #32847600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32848000 0! #32848500 1! #32848600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32849000 0! #32849500 1! #32849600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32850000 0! #32850500 1! #32850600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32851000 0! #32851500 1! #32851600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32852000 0! #32852500 1! #32852600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32853000 0! #32853500 1! #32853600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32854000 0! #32854500 1! #32854600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32855000 0! #32855500 1! #32855600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32856000 0! #32856500 1! #32856600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32857000 0! #32857500 1! #32857600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32858000 0! #32858500 1! #32858600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32859000 0! #32859500 1! #32859600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32860000 0! #32860500 1! #32860600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32861000 0! #32861500 1! #32861600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32862000 0! #32862500 1! #32862600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32863000 0! #32863500 1! #32863600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32864000 0! #32864500 1! #32864600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32865000 0! #32865500 1! #32865600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32866000 0! #32866500 1! #32866600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32867000 0! #32867500 1! #32867600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32868000 0! #32868500 1! #32868600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32869000 0! #32869500 1! #32869600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32870000 0! #32870500 1! #32870600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32871000 0! #32871500 1! #32871600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32872000 0! #32872500 1! #32872600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #32872700 bx111111 ^ b10 g b0xxxxxx c #32873000 0! #32873500 1! #32873600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32874000 0! #32874500 1! #32874600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32875000 0! #32875500 1! #32875600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32876000 0! #32876500 1! #32876600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32877000 0! #32877500 1! #32877600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32878000 0! #32878500 1! #32878600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32879000 0! #32879500 1! #32879600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32880000 0! #32880500 1! #32880600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32881000 0! #32881500 1! #32881600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32882000 0! #32882500 1! #32882600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32883000 0! #32883500 1! #32883600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32884000 0! #32884500 1! #32884600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32885000 0! #32885500 1! #32885600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32886000 0! #32886500 1! #32886600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32887000 0! #32887500 1! #32887600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32888000 0! #32888500 1! #32888600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32889000 0! #32889500 1! #32889600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32890000 0! #32890500 1! #32890600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32891000 0! #32891500 1! #32891600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32892000 0! #32892500 1! #32892600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32893000 0! #32893500 1! #32893600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32894000 0! #32894500 1! #32894600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32895000 0! #32895500 1! #32895600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32896000 0! #32896500 1! #32896600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32897000 0! #32897500 1! #32897600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32898000 0! #32898500 1! #32898600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32899000 0! #32899500 1! #32899600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32900000 0! #32900500 1! #32900600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32901000 0! #32901500 1! #32901600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32902000 0! #32902500 1! #32902600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32903000 0! #32903500 1! #32903600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32904000 0! #32904500 1! #32904600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32905000 0! #32905500 1! #32905600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32906000 0! #32906500 1! #32906600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32907000 0! #32907500 1! #32907600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32908000 0! #32908500 1! #32908600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32909000 0! #32909500 1! #32909600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32910000 0! #32910500 1! #32910600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32911000 0! #32911500 1! #32911600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32912000 0! #32912500 1! #32912600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32913000 0! #32913500 1! #32913600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32914000 0! #32914500 1! #32914600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32915000 0! #32915500 1! #32915600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32916000 0! #32916500 1! #32916600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32917000 0! #32917500 1! #32917600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32918000 0! #32918500 1! #32918600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32919000 0! #32919500 1! #32919600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32920000 0! #32920500 1! #32920600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32921000 0! #32921500 1! #32921600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32922000 0! #32922500 1! #32922600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32923000 0! #32923500 1! #32923600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32924000 0! #32924500 1! #32924600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32925000 0! #32925500 1! #32925600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32926000 0! #32926500 1! #32926600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32927000 0! #32927500 1! #32927600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32928000 0! #32928500 1! #32928600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32929000 0! #32929500 1! #32929600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32930000 0! #32930500 1! #32930600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32931000 0! #32931500 1! #32931600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32932000 0! #32932500 1! #32932600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32933000 0! #32933500 1! #32933600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32934000 0! #32934500 1! #32934600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32935000 0! #32935500 1! #32935600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32936000 0! #32936500 1! #32936600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32937000 0! #32937500 1! #32937600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32938000 0! #32938500 1! #32938600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32939000 0! #32939500 1! #32939600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32940000 0! #32940500 1! #32940600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32941000 0! #32941500 1! #32941600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32942000 0! #32942500 1! #32942600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32943000 0! #32943500 1! #32943600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32944000 0! #32944500 1! #32944600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32945000 0! #32945500 1! #32945600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32946000 0! #32946500 1! #32946600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32947000 0! #32947500 1! #32947600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32948000 0! #32948500 1! #32948600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32949000 0! #32949500 1! #32949600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32950000 0! #32950500 1! #32950600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32951000 0! #32951500 1! #32951600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32952000 0! #32952500 1! #32952600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32953000 0! #32953500 1! #32953600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32954000 0! #32954500 1! #32954600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32955000 0! #32955500 1! #32955600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32956000 0! #32956500 1! #32956600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32957000 0! #32957500 1! #32957600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32958000 0! #32958500 1! #32958600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32959000 0! #32959500 1! #32959600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32960000 0! #32960500 1! #32960600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32961000 0! #32961500 1! #32961600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32962000 0! #32962500 1! #32962600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32963000 0! #32963500 1! #32963600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32964000 0! #32964500 1! #32964600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32965000 0! #32965500 1! #32965600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32966000 0! #32966500 1! #32966600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32967000 0! #32967500 1! #32967600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32968000 0! #32968500 1! #32968600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32969000 0! #32969500 1! #32969600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32970000 0! #32970500 1! #32970600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32971000 0! #32971500 1! #32971600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32972000 0! #32972500 1! #32972600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32973000 0! #32973500 1! #32973600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32974000 0! #32974500 1! #32974600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #32974700 1j xj #32975000 0! #32975500 1! #32975600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32976000 0! #32976500 1! #32976600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32977000 0! #32977500 1! #32977600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32978000 0! #32978500 1! #32978600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32979000 0! #32979500 1! #32979600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32980000 0! #32980500 1! #32980600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32981000 0! #32981500 1! #32981600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32982000 0! #32982500 1! #32982600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32983000 0! #32983500 1! #32983600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32984000 0! #32984500 1! #32984600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32985000 0! #32985500 1! #32985600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32986000 0! #32986500 1! #32986600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32987000 0! #32987500 1! #32987600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32988000 0! #32988500 1! #32988600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32989000 0! #32989500 1! #32989600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32990000 0! #32990500 1! #32990600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32991000 0! #32991500 1! #32991600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32992000 0! #32992500 1! #32992600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32993000 0! #32993500 1! #32993600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32994000 0! #32994500 1! #32994600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32995000 0! #32995500 1! #32995600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32996000 0! #32996500 1! #32996600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32997000 0! #32997500 1! #32997600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #32998000 0! #32998500 1! #32998600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #32999000 0! #32999500 1! #32999600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33000000 0! #33000500 1! #33000600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33001000 0! #33001500 1! #33001600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33002000 0! #33002500 1! #33002600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33003000 0! #33003500 1! #33003600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33004000 0! #33004500 1! #33004600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33005000 0! #33005500 1! #33005600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33006000 0! #33006500 1! #33006600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33007000 0! #33007500 1! #33007600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33008000 0! #33008500 1! #33008600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33009000 0! #33009500 1! #33009600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33010000 0! #33010500 1! #33010600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33011000 0! #33011500 1! #33011600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33012000 0! #33012500 1! #33012600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33013000 0! #33013500 1! #33013600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33014000 0! #33014500 1! #33014600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33015000 0! #33015500 1! #33015600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33016000 0! #33016500 1! #33016600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33017000 0! #33017500 1! #33017600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33018000 0! #33018500 1! #33018600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33019000 0! #33019500 1! #33019600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33020000 0! #33020500 1! #33020600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33021000 0! #33021500 1! #33021600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33022000 0! #33022500 1! #33022600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33023000 0! #33023500 1! #33023600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33024000 0! #33024500 1! #33024600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33025000 0! #33025500 1! #33025600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33026000 0! #33026500 1! #33026600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33027000 0! #33027500 1! #33027600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33028000 0! #33028500 1! #33028600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33029000 0! #33029500 1! #33029600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33030000 0! #33030500 1! #33030600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33031000 0! #33031500 1! #33031600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33032000 0! #33032500 1! #33032600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33033000 0! #33033500 1! #33033600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33034000 0! #33034500 1! #33034600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33035000 0! #33035500 1! #33035600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33036000 0! #33036500 1! #33036600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33037000 0! #33037500 1! #33037600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33038000 0! #33038500 1! #33038600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33039000 0! #33039500 1! #33039600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33040000 0! #33040500 1! #33040600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33041000 0! #33041500 1! #33041600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33042000 0! #33042500 1! #33042600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33043000 0! #33043500 1! #33043600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33044000 0! #33044500 1! #33044600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33045000 0! #33045500 1! #33045600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33046000 0! #33046500 1! #33046600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33047000 0! #33047500 1! #33047600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33048000 0! #33048500 1! #33048600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33049000 0! #33049500 1! #33049600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33050000 0! #33050500 1! #33050600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33051000 0! #33051500 1! #33051600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33052000 0! #33052500 1! #33052600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33053000 0! #33053500 1! #33053600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33054000 0! #33054500 1! #33054600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33055000 0! #33055500 1! #33055600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33056000 0! #33056500 1! #33056600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33057000 0! #33057500 1! #33057600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33058000 0! #33058500 1! #33058600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33059000 0! #33059500 1! #33059600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33060000 0! #33060500 1! #33060600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33061000 0! #33061500 1! #33061600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33062000 0! #33062500 1! #33062600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33063000 0! #33063500 1! #33063600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33064000 0! #33064500 1! #33064600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33065000 0! #33065500 1! #33065600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33066000 0! #33066500 1! #33066600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33067000 0! #33067500 1! #33067600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33068000 0! #33068500 1! #33068600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33069000 0! #33069500 1! #33069600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33070000 0! #33070500 1! #33070600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33071000 0! #33071500 1! #33071600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33072000 0! #33072500 1! #33072600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33073000 0! #33073500 1! #33073600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33074000 0! #33074500 1! #33074600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33075000 0! #33075500 1! #33075600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33076000 0! #33076500 1! #33076600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33077000 0! #33077500 1! #33077600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33078000 0! #33078500 1! #33078600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33079000 0! #33079500 1! #33079600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33080000 0! #33080500 1! #33080600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33081000 0! #33081500 1! #33081600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33082000 0! #33082500 1! #33082600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33083000 0! #33083500 1! #33083600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33084000 0! #33084500 1! #33084600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33085000 0! #33085500 1! #33085600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33086000 0! #33086500 1! #33086600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33087000 0! #33087500 1! #33087600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33088000 0! #33088500 1! #33088600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33089000 0! #33089500 1! #33089600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33090000 0! #33090500 1! #33090600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33091000 0! #33091500 1! #33091600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33092000 0! #33092500 1! #33092600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33093000 0! #33093500 1! #33093600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33094000 0! #33094500 1! #33094600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33095000 0! #33095500 1! #33095600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33096000 0! #33096500 1! #33096600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33097000 0! #33097500 1! #33097600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33098000 0! #33098500 1! #33098600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33099000 0! #33099500 1! #33099600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33100000 0! #33100500 1! #33100600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33101000 0! #33101500 1! #33101600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33102000 0! #33102500 1! #33102600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33103000 0! #33103500 1! #33103600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33104000 0! #33104500 1! #33104600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33105000 0! #33105500 1! #33105600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33106000 0! #33106500 1! #33106600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33107000 0! #33107500 1! #33107600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33108000 0! #33108500 1! #33108600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33109000 0! #33109500 1! #33109600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33110000 0! #33110500 1! #33110600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33111000 0! #33111500 1! #33111600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33112000 0! #33112500 1! #33112600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33113000 0! #33113500 1! #33113600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33114000 0! #33114500 1! #33114600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33115000 0! #33115500 1! #33115600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33116000 0! #33116500 1! #33116600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33117000 0! #33117500 1! #33117600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33118000 0! #33118500 1! #33118600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33119000 0! #33119500 1! #33119600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33120000 0! #33120500 1! #33120600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33121000 0! #33121500 1! #33121600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33122000 0! #33122500 1! #33122600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33123000 0! #33123500 1! #33123600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33124000 0! #33124500 1! #33124600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33125000 0! #33125500 1! #33125600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33126000 0! #33126500 1! #33126600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33127000 0! #33127500 1! #33127600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #33127700 bx1111111 ^ b1 g b0xxxxxxx c #33128000 0! #33128500 1! #33128600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33129000 0! #33129500 1! #33129600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33130000 0! #33130500 1! #33130600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33131000 0! #33131500 1! #33131600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33132000 0! #33132500 1! #33132600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33133000 0! #33133500 1! #33133600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33134000 0! #33134500 1! #33134600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33135000 0! #33135500 1! #33135600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33136000 0! #33136500 1! #33136600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33137000 0! #33137500 1! #33137600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33138000 0! #33138500 1! #33138600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33139000 0! #33139500 1! #33139600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33140000 0! #33140500 1! #33140600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33141000 0! #33141500 1! #33141600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33142000 0! #33142500 1! #33142600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33143000 0! #33143500 1! #33143600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33144000 0! #33144500 1! #33144600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33145000 0! #33145500 1! #33145600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33146000 0! #33146500 1! #33146600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33147000 0! #33147500 1! #33147600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33148000 0! #33148500 1! #33148600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33149000 0! #33149500 1! #33149600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33150000 0! #33150500 1! #33150600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33151000 0! #33151500 1! #33151600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33152000 0! #33152500 1! #33152600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33153000 0! #33153500 1! #33153600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33154000 0! #33154500 1! #33154600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33155000 0! #33155500 1! #33155600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33156000 0! #33156500 1! #33156600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33157000 0! #33157500 1! #33157600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33158000 0! #33158500 1! #33158600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33159000 0! #33159500 1! #33159600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33160000 0! #33160500 1! #33160600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33161000 0! #33161500 1! #33161600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33162000 0! #33162500 1! #33162600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33163000 0! #33163500 1! #33163600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33164000 0! #33164500 1! #33164600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33165000 0! #33165500 1! #33165600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33166000 0! #33166500 1! #33166600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33167000 0! #33167500 1! #33167600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33168000 0! #33168500 1! #33168600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33169000 0! #33169500 1! #33169600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33170000 0! #33170500 1! #33170600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33171000 0! #33171500 1! #33171600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33172000 0! #33172500 1! #33172600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33173000 0! #33173500 1! #33173600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33174000 0! #33174500 1! #33174600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33175000 0! #33175500 1! #33175600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33176000 0! #33176500 1! #33176600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33177000 0! #33177500 1! #33177600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33178000 0! #33178500 1! #33178600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33179000 0! #33179500 1! #33179600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33180000 0! #33180500 1! #33180600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33181000 0! #33181500 1! #33181600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33182000 0! #33182500 1! #33182600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33183000 0! #33183500 1! #33183600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33184000 0! #33184500 1! #33184600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33185000 0! #33185500 1! #33185600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33186000 0! #33186500 1! #33186600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33187000 0! #33187500 1! #33187600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33188000 0! #33188500 1! #33188600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33189000 0! #33189500 1! #33189600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33190000 0! #33190500 1! #33190600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33191000 0! #33191500 1! #33191600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33192000 0! #33192500 1! #33192600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33193000 0! #33193500 1! #33193600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33194000 0! #33194500 1! #33194600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33195000 0! #33195500 1! #33195600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33196000 0! #33196500 1! #33196600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33197000 0! #33197500 1! #33197600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33198000 0! #33198500 1! #33198600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33199000 0! #33199500 1! #33199600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33200000 0! #33200500 1! #33200600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33201000 0! #33201500 1! #33201600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33202000 0! #33202500 1! #33202600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33203000 0! #33203500 1! #33203600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33204000 0! #33204500 1! #33204600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33205000 0! #33205500 1! #33205600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33206000 0! #33206500 1! #33206600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33207000 0! #33207500 1! #33207600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33208000 0! #33208500 1! #33208600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33209000 0! #33209500 1! #33209600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33210000 0! #33210500 1! #33210600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33211000 0! #33211500 1! #33211600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33212000 0! #33212500 1! #33212600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33213000 0! #33213500 1! #33213600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33214000 0! #33214500 1! #33214600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33215000 0! #33215500 1! #33215600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33216000 0! #33216500 1! #33216600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33217000 0! #33217500 1! #33217600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33218000 0! #33218500 1! #33218600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33219000 0! #33219500 1! #33219600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33220000 0! #33220500 1! #33220600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33221000 0! #33221500 1! #33221600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33222000 0! #33222500 1! #33222600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33223000 0! #33223500 1! #33223600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33224000 0! #33224500 1! #33224600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33225000 0! #33225500 1! #33225600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33226000 0! #33226500 1! #33226600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33227000 0! #33227500 1! #33227600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33228000 0! #33228500 1! #33228600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33229000 0! #33229500 1! #33229600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #33229700 1j xj #33230000 0! #33230500 1! #33230600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33231000 0! #33231500 1! #33231600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33232000 0! #33232500 1! #33232600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33233000 0! #33233500 1! #33233600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33234000 0! #33234500 1! #33234600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33235000 0! #33235500 1! #33235600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33236000 0! #33236500 1! #33236600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33237000 0! #33237500 1! #33237600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33238000 0! #33238500 1! #33238600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33239000 0! #33239500 1! #33239600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33240000 0! #33240500 1! #33240600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33241000 0! #33241500 1! #33241600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33242000 0! #33242500 1! #33242600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33243000 0! #33243500 1! #33243600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33244000 0! #33244500 1! #33244600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33245000 0! #33245500 1! #33245600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33246000 0! #33246500 1! #33246600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33247000 0! #33247500 1! #33247600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33248000 0! #33248500 1! #33248600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33249000 0! #33249500 1! #33249600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33250000 0! #33250500 1! #33250600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33251000 0! #33251500 1! #33251600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33252000 0! #33252500 1! #33252600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33253000 0! #33253500 1! #33253600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33254000 0! #33254500 1! #33254600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33255000 0! #33255500 1! #33255600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33256000 0! #33256500 1! #33256600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33257000 0! #33257500 1! #33257600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33258000 0! #33258500 1! #33258600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33259000 0! #33259500 1! #33259600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33260000 0! #33260500 1! #33260600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33261000 0! #33261500 1! #33261600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33262000 0! #33262500 1! #33262600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33263000 0! #33263500 1! #33263600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33264000 0! #33264500 1! #33264600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33265000 0! #33265500 1! #33265600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33266000 0! #33266500 1! #33266600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33267000 0! #33267500 1! #33267600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33268000 0! #33268500 1! #33268600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33269000 0! #33269500 1! #33269600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33270000 0! #33270500 1! #33270600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33271000 0! #33271500 1! #33271600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33272000 0! #33272500 1! #33272600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33273000 0! #33273500 1! #33273600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33274000 0! #33274500 1! #33274600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33275000 0! #33275500 1! #33275600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33276000 0! #33276500 1! #33276600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33277000 0! #33277500 1! #33277600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33278000 0! #33278500 1! #33278600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33279000 0! #33279500 1! #33279600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33280000 0! #33280500 1! #33280600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33281000 0! #33281500 1! #33281600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33282000 0! #33282500 1! #33282600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33283000 0! #33283500 1! #33283600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33284000 0! #33284500 1! #33284600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33285000 0! #33285500 1! #33285600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33286000 0! #33286500 1! #33286600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33287000 0! #33287500 1! #33287600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33288000 0! #33288500 1! #33288600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33289000 0! #33289500 1! #33289600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33290000 0! #33290500 1! #33290600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33291000 0! #33291500 1! #33291600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33292000 0! #33292500 1! #33292600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33293000 0! #33293500 1! #33293600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33294000 0! #33294500 1! #33294600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33295000 0! #33295500 1! #33295600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33296000 0! #33296500 1! #33296600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33297000 0! #33297500 1! #33297600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33298000 0! #33298500 1! #33298600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33299000 0! #33299500 1! #33299600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33300000 0! #33300500 1! #33300600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33301000 0! #33301500 1! #33301600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33302000 0! #33302500 1! #33302600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33303000 0! #33303500 1! #33303600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33304000 0! #33304500 1! #33304600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33305000 0! #33305500 1! #33305600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33306000 0! #33306500 1! #33306600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33307000 0! #33307500 1! #33307600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33308000 0! #33308500 1! #33308600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33309000 0! #33309500 1! #33309600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33310000 0! #33310500 1! #33310600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33311000 0! #33311500 1! #33311600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33312000 0! #33312500 1! #33312600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33313000 0! #33313500 1! #33313600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33314000 0! #33314500 1! #33314600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33315000 0! #33315500 1! #33315600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33316000 0! #33316500 1! #33316600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33317000 0! #33317500 1! #33317600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33318000 0! #33318500 1! #33318600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33319000 0! #33319500 1! #33319600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33320000 0! #33320500 1! #33320600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33321000 0! #33321500 1! #33321600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33322000 0! #33322500 1! #33322600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33323000 0! #33323500 1! #33323600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33324000 0! #33324500 1! #33324600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33325000 0! #33325500 1! #33325600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33326000 0! #33326500 1! #33326600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33327000 0! #33327500 1! #33327600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33328000 0! #33328500 1! #33328600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33329000 0! #33329500 1! #33329600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33330000 0! #33330500 1! #33330600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33331000 0! #33331500 1! #33331600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33332000 0! #33332500 1! #33332600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33333000 0! #33333500 1! #33333600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33334000 0! #33334500 1! #33334600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33335000 0! #33335500 1! #33335600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33336000 0! #33336500 1! #33336600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33337000 0! #33337500 1! #33337600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33338000 0! #33338500 1! #33338600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33339000 0! #33339500 1! #33339600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33340000 0! #33340500 1! #33340600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33341000 0! #33341500 1! #33341600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33342000 0! #33342500 1! #33342600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33343000 0! #33343500 1! #33343600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33344000 0! #33344500 1! #33344600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33345000 0! #33345500 1! #33345600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33346000 0! #33346500 1! #33346600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33347000 0! #33347500 1! #33347600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33348000 0! #33348500 1! #33348600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33349000 0! #33349500 1! #33349600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33350000 0! #33350500 1! #33350600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33351000 0! #33351500 1! #33351600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33352000 0! #33352500 1! #33352600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33353000 0! #33353500 1! #33353600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33354000 0! #33354500 1! #33354600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33355000 0! #33355500 1! #33355600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33356000 0! #33356500 1! #33356600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33357000 0! #33357500 1! #33357600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33358000 0! #33358500 1! #33358600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33359000 0! #33359500 1! #33359600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33360000 0! #33360500 1! #33360600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33361000 0! #33361500 1! #33361600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33362000 0! #33362500 1! #33362600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33363000 0! #33363500 1! #33363600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33364000 0! #33364500 1! #33364600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33365000 0! #33365500 1! #33365600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33366000 0! #33366500 1! #33366600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33367000 0! #33367500 1! #33367600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33368000 0! #33368500 1! #33368600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33369000 0! #33369500 1! #33369600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33370000 0! #33370500 1! #33370600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33371000 0! #33371500 1! #33371600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33372000 0! #33372500 1! #33372600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33373000 0! #33373500 1! #33373600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33374000 0! #33374500 1! #33374600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33375000 0! #33375500 1! #33375600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33376000 0! #33376500 1! #33376600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33377000 0! #33377500 1! #33377600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33378000 0! #33378500 1! #33378600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33379000 0! #33379500 1! #33379600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33380000 0! #33380500 1! #33380600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33381000 0! #33381500 1! #33381600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33382000 0! #33382500 1! #33382600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #33382700 b11111111 ^ b0 g bx c xe 1h #33383000 0! #33383500 1! #33383600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33384000 0! #33384500 1! #33384600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33385000 0! #33385500 1! #33385600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33386000 0! #33386500 1! #33386600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33387000 0! #33387500 1! #33387600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33388000 0! #33388500 1! #33388600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33389000 0! #33389500 1! #33389600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33390000 0! #33390500 1! #33390600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33391000 0! #33391500 1! #33391600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33392000 0! #33392500 1! #33392600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33393000 0! #33393500 1! #33393600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33394000 0! #33394500 1! #33394600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33395000 0! #33395500 1! #33395600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33396000 0! #33396500 1! #33396600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33397000 0! #33397500 1! #33397600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33398000 0! #33398500 1! #33398600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33399000 0! #33399500 1! #33399600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33400000 0! #33400500 1! #33400600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33401000 0! #33401500 1! #33401600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33402000 0! #33402500 1! #33402600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33403000 0! #33403500 1! #33403600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33404000 0! #33404500 1! #33404600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33405000 0! #33405500 1! #33405600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33406000 0! #33406500 1! #33406600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33407000 0! #33407500 1! #33407600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33408000 0! #33408500 1! #33408600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33409000 0! #33409500 1! #33409600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33410000 0! #33410500 1! #33410600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33411000 0! #33411500 1! #33411600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33412000 0! #33412500 1! #33412600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33413000 0! #33413500 1! #33413600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33414000 0! #33414500 1! #33414600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33415000 0! #33415500 1! #33415600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33416000 0! #33416500 1! #33416600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33417000 0! #33417500 1! #33417600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33418000 0! #33418500 1! #33418600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33419000 0! #33419500 1! #33419600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33420000 0! #33420500 1! #33420600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33421000 0! #33421500 1! #33421600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33422000 0! #33422500 1! #33422600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33423000 0! #33423500 1! #33423600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33424000 0! #33424500 1! #33424600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33425000 0! #33425500 1! #33425600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33426000 0! #33426500 1! #33426600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33427000 0! #33427500 1! #33427600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33428000 0! #33428500 1! #33428600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33429000 0! #33429500 1! #33429600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33430000 0! #33430500 1! #33430600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33431000 0! #33431500 1! #33431600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33432000 0! #33432500 1! #33432600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33433000 0! #33433500 1! #33433600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33434000 0! #33434500 1! #33434600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33435000 0! #33435500 1! #33435600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33436000 0! #33436500 1! #33436600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33437000 0! #33437500 1! #33437600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33438000 0! #33438500 1! #33438600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33439000 0! #33439500 1! #33439600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33440000 0! #33440500 1! #33440600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33441000 0! #33441500 1! #33441600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33442000 0! #33442500 1! #33442600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33443000 0! #33443500 1! #33443600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33444000 0! #33444500 1! #33444600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33445000 0! #33445500 1! #33445600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33446000 0! #33446500 1! #33446600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33447000 0! #33447500 1! #33447600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33448000 0! #33448500 1! #33448600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33449000 0! #33449500 1! #33449600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33450000 0! #33450500 1! #33450600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33451000 0! #33451500 1! #33451600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33452000 0! #33452500 1! #33452600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33453000 0! #33453500 1! #33453600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33454000 0! #33454500 1! #33454600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33455000 0! #33455500 1! #33455600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33456000 0! #33456500 1! #33456600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33457000 0! #33457500 1! #33457600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33458000 0! #33458500 1! #33458600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33459000 0! #33459500 1! #33459600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33460000 0! #33460500 1! #33460600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33461000 0! #33461500 1! #33461600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33462000 0! #33462500 1! #33462600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33463000 0! #33463500 1! #33463600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33464000 0! #33464500 1! #33464600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33465000 0! #33465500 1! #33465600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33466000 0! #33466500 1! #33466600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33467000 0! #33467500 1! #33467600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33468000 0! #33468500 1! #33468600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33469000 0! #33469500 1! #33469600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33470000 0! #33470500 1! #33470600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33471000 0! #33471500 1! #33471600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33472000 0! #33472500 1! #33472600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33473000 0! #33473500 1! #33473600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33474000 0! #33474500 1! #33474600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33475000 0! #33475500 1! #33475600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33476000 0! #33476500 1! #33476600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33477000 0! #33477500 1! #33477600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33478000 0! #33478500 1! #33478600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33479000 0! #33479500 1! #33479600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33480000 0! #33480500 1! #33480600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33481000 0! #33481500 1! #33481600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33482000 0! #33482500 1! #33482600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33483000 0! #33483500 1! #33483600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33484000 0! #33484500 1! #33484600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #33484700 1j b101 q 1O #33484800 b100 ] #33484900 bx ^ #33485000 0! #33485500 1! #33485600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33486000 0! #33486500 1! #33486600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33487000 0! #33487500 1! #33487600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33488000 0! #33488500 1! #33488600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33489000 0! #33489500 1! #33489600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33490000 0! #33490500 1! #33490600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33491000 0! #33491500 1! #33491600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33492000 0! #33492500 1! #33492600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33493000 0! #33493500 1! #33493600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33494000 0! #33494500 1! #33494600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33495000 0! #33495500 1! #33495600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33496000 0! #33496500 1! #33496600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33497000 0! #33497500 1! #33497600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33498000 0! #33498500 1! #33498600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33499000 0! #33499500 1! #33499600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33500000 0! #33500500 1! #33500600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33501000 0! #33501500 1! #33501600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33502000 0! #33502500 1! #33502600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33503000 0! #33503500 1! #33503600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33504000 0! #33504500 1! #33504600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33505000 0! #33505500 1! #33505600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33506000 0! #33506500 1! #33506600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33507000 0! #33507500 1! #33507600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33508000 0! #33508500 1! #33508600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33509000 0! #33509500 1! #33509600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33510000 0! #33510500 1! #33510600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33511000 0! #33511500 1! #33511600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33512000 0! #33512500 1! #33512600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33513000 0! #33513500 1! #33513600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33514000 0! #33514500 1! #33514600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33515000 0! #33515500 1! #33515600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33516000 0! #33516500 1! #33516600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33517000 0! #33517500 1! #33517600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33518000 0! #33518500 1! #33518600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33519000 0! #33519500 1! #33519600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33520000 0! #33520500 1! #33520600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33521000 0! #33521500 1! #33521600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33522000 0! #33522500 1! #33522600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33523000 0! #33523500 1! #33523600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33524000 0! #33524500 1! #33524600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33525000 0! #33525500 1! #33525600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33526000 0! #33526500 1! #33526600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33527000 0! #33527500 1! #33527600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33528000 0! #33528500 1! #33528600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33529000 0! #33529500 1! #33529600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33530000 0! #33530500 1! #33530600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33531000 0! #33531500 1! #33531600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33532000 0! #33532500 1! #33532600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33533000 0! #33533500 1! #33533600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33534000 0! #33534500 1! #33534600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33535000 0! #33535500 1! #33535600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33536000 0! #33536500 1! #33536600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33537000 0! #33537500 1! #33537600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33538000 0! #33538500 1! #33538600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33539000 0! #33539500 1! #33539600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33540000 0! #33540500 1! #33540600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33541000 0! #33541500 1! #33541600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33542000 0! #33542500 1! #33542600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33543000 0! #33543500 1! #33543600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33544000 0! #33544500 1! #33544600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33545000 0! #33545500 1! #33545600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33546000 0! #33546500 1! #33546600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33547000 0! #33547500 1! #33547600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33548000 0! #33548500 1! #33548600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33549000 0! #33549500 1! #33549600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33550000 0! #33550500 1! #33550600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33551000 0! #33551500 1! #33551600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33552000 0! #33552500 1! #33552600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33553000 0! #33553500 1! #33553600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33554000 0! #33554500 1! #33554600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33555000 0! #33555500 1! #33555600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33556000 0! #33556500 1! #33556600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33557000 0! #33557500 1! #33557600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33558000 0! #33558500 1! #33558600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33559000 0! #33559500 1! #33559600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33560000 0! #33560500 1! #33560600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33561000 0! #33561500 1! #33561600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33562000 0! #33562500 1! #33562600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33563000 0! #33563500 1! #33563600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33564000 0! #33564500 1! #33564600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33565000 0! #33565500 1! #33565600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33566000 0! #33566500 1! #33566600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33567000 0! #33567500 1! #33567600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33568000 0! #33568500 1! #33568600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33569000 0! #33569500 1! #33569600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33570000 0! #33570500 1! #33570600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33571000 0! #33571500 1! #33571600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33572000 0! #33572500 1! #33572600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33573000 0! #33573500 1! #33573600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33574000 0! #33574500 1! #33574600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33575000 0! #33575500 1! #33575600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33576000 0! #33576500 1! #33576600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33577000 0! #33577500 1! #33577600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33578000 0! #33578500 1! #33578600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33579000 0! #33579500 1! #33579600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33580000 0! #33580500 1! #33580600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33581000 0! #33581500 1! #33581600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33582000 0! #33582500 1! #33582600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33583000 0! #33583500 1! #33583600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33584000 0! #33584500 1! #33584600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33585000 0! #33585500 1! #33585600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33586000 0! #33586500 1! #33586600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0Q 0O #33587000 0! #33587500 1! #33587600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33588000 0! #33588500 1! #33588600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33589000 0! #33589500 1! #33589600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33590000 0! #33590500 1! #33590600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33591000 0! #33591500 1! #33591600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33592000 0! #33592500 1! #33592600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33593000 0! #33593500 1! #33593600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33594000 0! #33594500 1! #33594600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33595000 0! #33595500 1! #33595600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33596000 0! #33596500 1! #33596600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33597000 0! #33597500 1! #33597600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33598000 0! #33598500 1! #33598600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33599000 0! #33599500 1! #33599600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33600000 0! #33600500 1! #33600600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33601000 0! #33601500 1! #33601600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33602000 0! #33602500 1! #33602600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33603000 0! #33603500 1! #33603600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33604000 0! #33604500 1! #33604600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33605000 0! #33605500 1! #33605600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33606000 0! #33606500 1! #33606600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33607000 0! #33607500 1! #33607600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33608000 0! #33608500 1! #33608600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33609000 0! #33609500 1! #33609600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33610000 0! #33610500 1! #33610600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33611000 0! #33611500 1! #33611600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33612000 0! #33612500 1! #33612600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33613000 0! #33613500 1! #33613600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33614000 0! #33614500 1! #33614600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33615000 0! #33615500 1! #33615600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33616000 0! #33616500 1! #33616600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33617000 0! #33617500 1! #33617600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33618000 0! #33618500 1! #33618600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33619000 0! #33619500 1! #33619600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33620000 0! #33620500 1! #33620600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33621000 0! #33621500 1! #33621600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33622000 0! #33622500 1! #33622600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33623000 0! #33623500 1! #33623600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33624000 0! #33624500 1! #33624600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33625000 0! #33625500 1! #33625600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33626000 0! #33626500 1! #33626600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33627000 0! #33627500 1! #33627600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33628000 0! #33628500 1! #33628600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33629000 0! #33629500 1! #33629600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33630000 0! #33630500 1! #33630600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33631000 0! #33631500 1! #33631600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33632000 0! #33632500 1! #33632600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33633000 0! #33633500 1! #33633600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33634000 0! #33634500 1! #33634600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33635000 0! #33635500 1! #33635600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33636000 0! #33636500 1! #33636600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33637000 0! #33637500 1! #33637600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #33637700 b111 g bx0 c 0h #33638000 0! #33638500 1! #33638600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33639000 0! #33639500 1! #33639600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33640000 0! #33640500 1! #33640600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33641000 0! #33641500 1! #33641600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33642000 0! #33642500 1! #33642600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33643000 0! #33643500 1! #33643600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33644000 0! #33644500 1! #33644600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33645000 0! #33645500 1! #33645600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33646000 0! #33646500 1! #33646600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33647000 0! #33647500 1! #33647600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33648000 0! #33648500 1! #33648600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33649000 0! #33649500 1! #33649600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33650000 0! #33650500 1! #33650600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33651000 0! #33651500 1! #33651600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33652000 0! #33652500 1! #33652600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33653000 0! #33653500 1! #33653600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33654000 0! #33654500 1! #33654600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33655000 0! #33655500 1! #33655600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33656000 0! #33656500 1! #33656600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33657000 0! #33657500 1! #33657600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33658000 0! #33658500 1! #33658600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33659000 0! #33659500 1! #33659600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33660000 0! #33660500 1! #33660600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33661000 0! #33661500 1! #33661600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33662000 0! #33662500 1! #33662600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33663000 0! #33663500 1! #33663600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33664000 0! #33664500 1! #33664600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33665000 0! #33665500 1! #33665600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33666000 0! #33666500 1! #33666600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33667000 0! #33667500 1! #33667600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33668000 0! #33668500 1! #33668600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33669000 0! #33669500 1! #33669600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33670000 0! #33670500 1! #33670600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33671000 0! #33671500 1! #33671600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33672000 0! #33672500 1! #33672600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33673000 0! #33673500 1! #33673600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33674000 0! #33674500 1! #33674600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33675000 0! #33675500 1! #33675600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33676000 0! #33676500 1! #33676600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33677000 0! #33677500 1! #33677600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33678000 0! #33678500 1! #33678600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33679000 0! #33679500 1! #33679600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33680000 0! #33680500 1! #33680600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33681000 0! #33681500 1! #33681600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33682000 0! #33682500 1! #33682600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33683000 0! #33683500 1! #33683600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33684000 0! #33684500 1! #33684600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33685000 0! #33685500 1! #33685600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33686000 0! #33686500 1! #33686600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33687000 0! #33687500 1! #33687600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33688000 0! #33688500 1! #33688600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33689000 0! #33689500 1! #33689600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33690000 0! #33690500 1! #33690600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33691000 0! #33691500 1! #33691600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33692000 0! #33692500 1! #33692600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33693000 0! #33693500 1! #33693600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33694000 0! #33694500 1! #33694600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33695000 0! #33695500 1! #33695600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33696000 0! #33696500 1! #33696600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33697000 0! #33697500 1! #33697600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33698000 0! #33698500 1! #33698600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33699000 0! #33699500 1! #33699600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33700000 0! #33700500 1! #33700600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33701000 0! #33701500 1! #33701600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33702000 0! #33702500 1! #33702600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33703000 0! #33703500 1! #33703600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33704000 0! #33704500 1! #33704600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33705000 0! #33705500 1! #33705600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33706000 0! #33706500 1! #33706600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33707000 0! #33707500 1! #33707600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33708000 0! #33708500 1! #33708600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33709000 0! #33709500 1! #33709600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33710000 0! #33710500 1! #33710600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33711000 0! #33711500 1! #33711600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33712000 0! #33712500 1! #33712600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33713000 0! #33713500 1! #33713600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33714000 0! #33714500 1! #33714600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33715000 0! #33715500 1! #33715600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33716000 0! #33716500 1! #33716600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33717000 0! #33717500 1! #33717600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33718000 0! #33718500 1! #33718600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33719000 0! #33719500 1! #33719600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33720000 0! #33720500 1! #33720600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33721000 0! #33721500 1! #33721600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33722000 0! #33722500 1! #33722600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33723000 0! #33723500 1! #33723600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33724000 0! #33724500 1! #33724600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33725000 0! #33725500 1! #33725600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33726000 0! #33726500 1! #33726600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33727000 0! #33727500 1! #33727600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33728000 0! #33728500 1! #33728600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33729000 0! #33729500 1! #33729600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33730000 0! #33730500 1! #33730600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33731000 0! #33731500 1! #33731600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33732000 0! #33732500 1! #33732600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33733000 0! #33733500 1! #33733600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33734000 0! #33734500 1! #33734600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33735000 0! #33735500 1! #33735600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33736000 0! #33736500 1! #33736600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33737000 0! #33737500 1! #33737600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33738000 0! #33738500 1! #33738600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33739000 0! #33739500 1! #33739600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #33739700 1i b100 q xj xO #33740000 0! #33740500 1! #33740600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33741000 0! #33741500 1! #33741600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H bx000011 C #33742000 0! #33742500 1! #33742600 bx000011 J xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33743000 0! #33743500 1! #33743600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B bx000001 C 1H #33744000 0! #33744500 1! #33744600 bx000001 J xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33745000 0! #33745500 1! #33745600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 0@ 1A 1B bx C 1H #33746000 0! #33746500 1! #33746600 bx K xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33747000 0! #33747500 1! #33747600 1E 1F 1G b101000 D 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B bx000001 C 1H #33748000 0! #33748500 1! #33748600 xE bx D x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33749000 0! #33749500 1! #33749600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H bx000011 C #33750000 0! #33750500 1! #33750600 bx000011 J xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33751000 0! #33751500 1! #33751600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33752000 0! #33752500 1! #33752600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33753000 0! #33753500 1! #33753600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33754000 0! #33754500 1! #33754600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33755000 0! #33755500 1! #33755600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33756000 0! #33756500 1! #33756600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33757000 0! #33757500 1! #33757600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33758000 0! #33758500 1! #33758600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33759000 0! #33759500 1! #33759600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33760000 0! #33760500 1! #33760600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33761000 0! #33761500 1! #33761600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33762000 0! #33762500 1! #33762600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33763000 0! #33763500 1! #33763600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33764000 0! #33764500 1! #33764600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33765000 0! #33765500 1! #33765600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33766000 0! #33766500 1! #33766600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33767000 0! #33767500 1! #33767600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33768000 0! #33768500 1! #33768600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33769000 0! #33769500 1! #33769600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33770000 0! #33770500 1! #33770600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33771000 0! #33771500 1! #33771600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33772000 0! #33772500 1! #33772600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33773000 0! #33773500 1! #33773600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33774000 0! #33774500 1! #33774600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33775000 0! #33775500 1! #33775600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33776000 0! #33776500 1! #33776600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33777000 0! #33777500 1! #33777600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33778000 0! #33778500 1! #33778600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33779000 0! #33779500 1! #33779600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33780000 0! #33780500 1! #33780600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33781000 0! #33781500 1! #33781600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33782000 0! #33782500 1! #33782600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33783000 0! #33783500 1! #33783600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33784000 0! #33784500 1! #33784600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33785000 0! #33785500 1! #33785600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33786000 0! #33786500 1! #33786600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33787000 0! #33787500 1! #33787600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33788000 0! #33788500 1! #33788600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33789000 0! #33789500 1! #33789600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33790000 0! #33790500 1! #33790600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33791000 0! #33791500 1! #33791600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33792000 0! #33792500 1! #33792600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33793000 0! #33793500 1! #33793600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33794000 0! #33794500 1! #33794600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33795000 0! #33795500 1! #33795600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33796000 0! #33796500 1! #33796600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33797000 0! #33797500 1! #33797600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33798000 0! #33798500 1! #33798600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33799000 0! #33799500 1! #33799600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33800000 0! #33800500 1! #33800600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33801000 0! #33801500 1! #33801600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33802000 0! #33802500 1! #33802600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33803000 0! #33803500 1! #33803600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33804000 0! #33804500 1! #33804600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33805000 0! #33805500 1! #33805600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33806000 0! #33806500 1! #33806600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33807000 0! #33807500 1! #33807600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33808000 0! #33808500 1! #33808600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33809000 0! #33809500 1! #33809600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33810000 0! #33810500 1! #33810600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33811000 0! #33811500 1! #33811600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33812000 0! #33812500 1! #33812600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33813000 0! #33813500 1! #33813600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33814000 0! #33814500 1! #33814600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33815000 0! #33815500 1! #33815600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33816000 0! #33816500 1! #33816600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33817000 0! #33817500 1! #33817600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33818000 0! #33818500 1! #33818600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33819000 0! #33819500 1! #33819600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33820000 0! #33820500 1! #33820600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33821000 0! #33821500 1! #33821600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33822000 0! #33822500 1! #33822600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33823000 0! #33823500 1! #33823600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33824000 0! #33824500 1! #33824600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33825000 0! #33825500 1! #33825600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33826000 0! #33826500 1! #33826600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33827000 0! #33827500 1! #33827600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33828000 0! #33828500 1! #33828600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33829000 0! #33829500 1! #33829600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33830000 0! #33830500 1! #33830600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33831000 0! #33831500 1! #33831600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33832000 0! #33832500 1! #33832600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33833000 0! #33833500 1! #33833600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33834000 0! #33834500 1! #33834600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33835000 0! #33835500 1! #33835600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33836000 0! #33836500 1! #33836600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33837000 0! #33837500 1! #33837600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33838000 0! #33838500 1! #33838600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33839000 0! #33839500 1! #33839600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33840000 0! #33840500 1! #33840600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33841000 0! #33841500 1! #33841600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1Q #33842000 0! #33842500 1! #33842600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33843000 0! #33843500 1! #33843600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33844000 0! #33844500 1! #33844600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33845000 0! #33845500 1! #33845600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33846000 0! #33846500 1! #33846600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33847000 0! #33847500 1! #33847600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33848000 0! #33848500 1! #33848600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33849000 0! #33849500 1! #33849600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33850000 0! #33850500 1! #33850600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33851000 0! #33851500 1! #33851600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33852000 0! #33852500 1! #33852600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33853000 0! #33853500 1! #33853600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33854000 0! #33854500 1! #33854600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33855000 0! #33855500 1! #33855600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33856000 0! #33856500 1! #33856600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33857000 0! #33857500 1! #33857600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33858000 0! #33858500 1! #33858600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33859000 0! #33859500 1! #33859600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33860000 0! #33860500 1! #33860600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33861000 0! #33861500 1! #33861600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33862000 0! #33862500 1! #33862600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33863000 0! #33863500 1! #33863600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33864000 0! #33864500 1! #33864600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33865000 0! #33865500 1! #33865600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33866000 0! #33866500 1! #33866600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33867000 0! #33867500 1! #33867600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33868000 0! #33868500 1! #33868600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33869000 0! #33869500 1! #33869600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33870000 0! #33870500 1! #33870600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33871000 0! #33871500 1! #33871600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33872000 0! #33872500 1! #33872600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33873000 0! #33873500 1! #33873600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33874000 0! #33874500 1! #33874600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33875000 0! #33875500 1! #33875600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33876000 0! #33876500 1! #33876600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33877000 0! #33877500 1! #33877600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33878000 0! #33878500 1! #33878600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33879000 0! #33879500 1! #33879600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33880000 0! #33880500 1! #33880600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33881000 0! #33881500 1! #33881600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33882000 0! #33882500 1! #33882600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33883000 0! #33883500 1! #33883600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33884000 0! #33884500 1! #33884600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33885000 0! #33885500 1! #33885600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33886000 0! #33886500 1! #33886600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33887000 0! #33887500 1! #33887600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33888000 0! #33888500 1! #33888600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33889000 0! #33889500 1! #33889600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33890000 0! #33890500 1! #33890600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33891000 0! #33891500 1! #33891600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33892000 0! #33892500 1! #33892600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #33892700 bx1 ^ bx0x c #33893000 0! #33893500 1! #33893600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33894000 0! #33894500 1! #33894600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33895000 0! #33895500 1! #33895600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33896000 0! #33896500 1! #33896600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33897000 0! #33897500 1! #33897600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33898000 0! #33898500 1! #33898600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33899000 0! #33899500 1! #33899600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33900000 0! #33900500 1! #33900600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33901000 0! #33901500 1! #33901600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33902000 0! #33902500 1! #33902600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33903000 0! #33903500 1! #33903600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33904000 0! #33904500 1! #33904600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33905000 0! #33905500 1! #33905600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33906000 0! #33906500 1! #33906600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33907000 0! #33907500 1! #33907600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33908000 0! #33908500 1! #33908600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33909000 0! #33909500 1! #33909600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33910000 0! #33910500 1! #33910600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33911000 0! #33911500 1! #33911600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33912000 0! #33912500 1! #33912600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33913000 0! #33913500 1! #33913600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33914000 0! #33914500 1! #33914600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33915000 0! #33915500 1! #33915600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33916000 0! #33916500 1! #33916600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33917000 0! #33917500 1! #33917600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33918000 0! #33918500 1! #33918600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33919000 0! #33919500 1! #33919600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33920000 0! #33920500 1! #33920600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33921000 0! #33921500 1! #33921600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33922000 0! #33922500 1! #33922600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33923000 0! #33923500 1! #33923600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33924000 0! #33924500 1! #33924600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33925000 0! #33925500 1! #33925600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33926000 0! #33926500 1! #33926600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33927000 0! #33927500 1! #33927600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33928000 0! #33928500 1! #33928600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33929000 0! #33929500 1! #33929600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33930000 0! #33930500 1! #33930600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33931000 0! #33931500 1! #33931600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33932000 0! #33932500 1! #33932600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33933000 0! #33933500 1! #33933600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33934000 0! #33934500 1! #33934600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33935000 0! #33935500 1! #33935600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33936000 0! #33936500 1! #33936600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33937000 0! #33937500 1! #33937600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33938000 0! #33938500 1! #33938600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33939000 0! #33939500 1! #33939600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33940000 0! #33940500 1! #33940600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33941000 0! #33941500 1! #33941600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33942000 0! #33942500 1! #33942600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33943000 0! #33943500 1! #33943600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33944000 0! #33944500 1! #33944600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33945000 0! #33945500 1! #33945600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33946000 0! #33946500 1! #33946600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33947000 0! #33947500 1! #33947600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33948000 0! #33948500 1! #33948600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33949000 0! #33949500 1! #33949600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33950000 0! #33950500 1! #33950600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33951000 0! #33951500 1! #33951600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33952000 0! #33952500 1! #33952600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33953000 0! #33953500 1! #33953600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33954000 0! #33954500 1! #33954600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33955000 0! #33955500 1! #33955600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33956000 0! #33956500 1! #33956600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33957000 0! #33957500 1! #33957600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33958000 0! #33958500 1! #33958600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33959000 0! #33959500 1! #33959600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33960000 0! #33960500 1! #33960600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33961000 0! #33961500 1! #33961600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33962000 0! #33962500 1! #33962600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33963000 0! #33963500 1! #33963600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33964000 0! #33964500 1! #33964600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33965000 0! #33965500 1! #33965600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33966000 0! #33966500 1! #33966600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33967000 0! #33967500 1! #33967600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33968000 0! #33968500 1! #33968600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33969000 0! #33969500 1! #33969600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33970000 0! #33970500 1! #33970600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33971000 0! #33971500 1! #33971600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33972000 0! #33972500 1! #33972600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33973000 0! #33973500 1! #33973600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33974000 0! #33974500 1! #33974600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33975000 0! #33975500 1! #33975600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33976000 0! #33976500 1! #33976600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33977000 0! #33977500 1! #33977600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33978000 0! #33978500 1! #33978600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33979000 0! #33979500 1! #33979600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33980000 0! #33980500 1! #33980600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33981000 0! #33981500 1! #33981600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33982000 0! #33982500 1! #33982600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33983000 0! #33983500 1! #33983600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33984000 0! #33984500 1! #33984600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33985000 0! #33985500 1! #33985600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33986000 0! #33986500 1! #33986600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33987000 0! #33987500 1! #33987600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33988000 0! #33988500 1! #33988600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33989000 0! #33989500 1! #33989600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33990000 0! #33990500 1! #33990600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33991000 0! #33991500 1! #33991600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33992000 0! #33992500 1! #33992600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33993000 0! #33993500 1! #33993600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33994000 0! #33994500 1! #33994600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #33994700 1j 0i xj #33995000 0! #33995500 1! #33995600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33996000 0! #33996500 1! #33996600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33997000 0! #33997500 1! #33997600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #33998000 0! #33998500 1! #33998600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #33999000 0! #33999500 1! #33999600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34000000 0! #34000500 1! #34000600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34001000 0! #34001500 1! #34001600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34002000 0! #34002500 1! #34002600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34003000 0! #34003500 1! #34003600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34004000 0! #34004500 1! #34004600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34005000 0! #34005500 1! #34005600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34006000 0! #34006500 1! #34006600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34007000 0! #34007500 1! #34007600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34008000 0! #34008500 1! #34008600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34009000 0! #34009500 1! #34009600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34010000 0! #34010500 1! #34010600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34011000 0! #34011500 1! #34011600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34012000 0! #34012500 1! #34012600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34013000 0! #34013500 1! #34013600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34014000 0! #34014500 1! #34014600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34015000 0! #34015500 1! #34015600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34016000 0! #34016500 1! #34016600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34017000 0! #34017500 1! #34017600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34018000 0! #34018500 1! #34018600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34019000 0! #34019500 1! #34019600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34020000 0! #34020500 1! #34020600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34021000 0! #34021500 1! #34021600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34022000 0! #34022500 1! #34022600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34023000 0! #34023500 1! #34023600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34024000 0! #34024500 1! #34024600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34025000 0! #34025500 1! #34025600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34026000 0! #34026500 1! #34026600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34027000 0! #34027500 1! #34027600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34028000 0! #34028500 1! #34028600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34029000 0! #34029500 1! #34029600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34030000 0! #34030500 1! #34030600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34031000 0! #34031500 1! #34031600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34032000 0! #34032500 1! #34032600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34033000 0! #34033500 1! #34033600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34034000 0! #34034500 1! #34034600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34035000 0! #34035500 1! #34035600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34036000 0! #34036500 1! #34036600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34037000 0! #34037500 1! #34037600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34038000 0! #34038500 1! #34038600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34039000 0! #34039500 1! #34039600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34040000 0! #34040500 1! #34040600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34041000 0! #34041500 1! #34041600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34042000 0! #34042500 1! #34042600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34043000 0! #34043500 1! #34043600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34044000 0! #34044500 1! #34044600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34045000 0! #34045500 1! #34045600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34046000 0! #34046500 1! #34046600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34047000 0! #34047500 1! #34047600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34048000 0! #34048500 1! #34048600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34049000 0! #34049500 1! #34049600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34050000 0! #34050500 1! #34050600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34051000 0! #34051500 1! #34051600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34052000 0! #34052500 1! #34052600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34053000 0! #34053500 1! #34053600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34054000 0! #34054500 1! #34054600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34055000 0! #34055500 1! #34055600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34056000 0! #34056500 1! #34056600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34057000 0! #34057500 1! #34057600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34058000 0! #34058500 1! #34058600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34059000 0! #34059500 1! #34059600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34060000 0! #34060500 1! #34060600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34061000 0! #34061500 1! #34061600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34062000 0! #34062500 1! #34062600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34063000 0! #34063500 1! #34063600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34064000 0! #34064500 1! #34064600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34065000 0! #34065500 1! #34065600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34066000 0! #34066500 1! #34066600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34067000 0! #34067500 1! #34067600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34068000 0! #34068500 1! #34068600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34069000 0! #34069500 1! #34069600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34070000 0! #34070500 1! #34070600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34071000 0! #34071500 1! #34071600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34072000 0! #34072500 1! #34072600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34073000 0! #34073500 1! #34073600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34074000 0! #34074500 1! #34074600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34075000 0! #34075500 1! #34075600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34076000 0! #34076500 1! #34076600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34077000 0! #34077500 1! #34077600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34078000 0! #34078500 1! #34078600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34079000 0! #34079500 1! #34079600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34080000 0! #34080500 1! #34080600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34081000 0! #34081500 1! #34081600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34082000 0! #34082500 1! #34082600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34083000 0! #34083500 1! #34083600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34084000 0! #34084500 1! #34084600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34085000 0! #34085500 1! #34085600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34086000 0! #34086500 1! #34086600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34087000 0! #34087500 1! #34087600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34088000 0! #34088500 1! #34088600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34089000 0! #34089500 1! #34089600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34090000 0! #34090500 1! #34090600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34091000 0! #34091500 1! #34091600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34092000 0! #34092500 1! #34092600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34093000 0! #34093500 1! #34093600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34094000 0! #34094500 1! #34094600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34095000 0! #34095500 1! #34095600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34096000 0! #34096500 1! #34096600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34097000 0! #34097500 1! #34097600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34098000 0! #34098500 1! #34098600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34099000 0! #34099500 1! #34099600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34100000 0! #34100500 1! #34100600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34101000 0! #34101500 1! #34101600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34102000 0! #34102500 1! #34102600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34103000 0! #34103500 1! #34103600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34104000 0! #34104500 1! #34104600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34105000 0! #34105500 1! #34105600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34106000 0! #34106500 1! #34106600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34107000 0! #34107500 1! #34107600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34108000 0! #34108500 1! #34108600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34109000 0! #34109500 1! #34109600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34110000 0! #34110500 1! #34110600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34111000 0! #34111500 1! #34111600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34112000 0! #34112500 1! #34112600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34113000 0! #34113500 1! #34113600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34114000 0! #34114500 1! #34114600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34115000 0! #34115500 1! #34115600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34116000 0! #34116500 1! #34116600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34117000 0! #34117500 1! #34117600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34118000 0! #34118500 1! #34118600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34119000 0! #34119500 1! #34119600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34120000 0! #34120500 1! #34120600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34121000 0! #34121500 1! #34121600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34122000 0! #34122500 1! #34122600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34123000 0! #34123500 1! #34123600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34124000 0! #34124500 1! #34124600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34125000 0! #34125500 1! #34125600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34126000 0! #34126500 1! #34126600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34127000 0! #34127500 1! #34127600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34128000 0! #34128500 1! #34128600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34129000 0! #34129500 1! #34129600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34130000 0! #34130500 1! #34130600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34131000 0! #34131500 1! #34131600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34132000 0! #34132500 1! #34132600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34133000 0! #34133500 1! #34133600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34134000 0! #34134500 1! #34134600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34135000 0! #34135500 1! #34135600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34136000 0! #34136500 1! #34136600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34137000 0! #34137500 1! #34137600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34138000 0! #34138500 1! #34138600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34139000 0! #34139500 1! #34139600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34140000 0! #34140500 1! #34140600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34141000 0! #34141500 1! #34141600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34142000 0! #34142500 1! #34142600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34143000 0! #34143500 1! #34143600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34144000 0! #34144500 1! #34144600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34145000 0! #34145500 1! #34145600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34146000 0! #34146500 1! #34146600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34147000 0! #34147500 1! #34147600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #34147700 bx11 ^ b110 g bx0xx c #34148000 0! #34148500 1! #34148600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34149000 0! #34149500 1! #34149600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34150000 0! #34150500 1! #34150600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34151000 0! #34151500 1! #34151600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34152000 0! #34152500 1! #34152600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34153000 0! #34153500 1! #34153600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34154000 0! #34154500 1! #34154600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34155000 0! #34155500 1! #34155600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34156000 0! #34156500 1! #34156600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34157000 0! #34157500 1! #34157600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34158000 0! #34158500 1! #34158600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34159000 0! #34159500 1! #34159600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34160000 0! #34160500 1! #34160600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34161000 0! #34161500 1! #34161600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34162000 0! #34162500 1! #34162600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34163000 0! #34163500 1! #34163600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34164000 0! #34164500 1! #34164600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34165000 0! #34165500 1! #34165600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34166000 0! #34166500 1! #34166600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34167000 0! #34167500 1! #34167600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34168000 0! #34168500 1! #34168600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34169000 0! #34169500 1! #34169600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34170000 0! #34170500 1! #34170600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34171000 0! #34171500 1! #34171600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34172000 0! #34172500 1! #34172600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34173000 0! #34173500 1! #34173600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34174000 0! #34174500 1! #34174600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34175000 0! #34175500 1! #34175600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34176000 0! #34176500 1! #34176600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34177000 0! #34177500 1! #34177600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34178000 0! #34178500 1! #34178600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34179000 0! #34179500 1! #34179600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34180000 0! #34180500 1! #34180600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34181000 0! #34181500 1! #34181600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34182000 0! #34182500 1! #34182600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34183000 0! #34183500 1! #34183600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34184000 0! #34184500 1! #34184600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34185000 0! #34185500 1! #34185600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34186000 0! #34186500 1! #34186600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34187000 0! #34187500 1! #34187600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34188000 0! #34188500 1! #34188600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34189000 0! #34189500 1! #34189600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34190000 0! #34190500 1! #34190600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34191000 0! #34191500 1! #34191600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34192000 0! #34192500 1! #34192600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34193000 0! #34193500 1! #34193600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34194000 0! #34194500 1! #34194600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34195000 0! #34195500 1! #34195600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34196000 0! #34196500 1! #34196600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34197000 0! #34197500 1! #34197600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34198000 0! #34198500 1! #34198600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34199000 0! #34199500 1! #34199600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34200000 0! #34200500 1! #34200600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34201000 0! #34201500 1! #34201600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34202000 0! #34202500 1! #34202600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34203000 0! #34203500 1! #34203600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34204000 0! #34204500 1! #34204600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34205000 0! #34205500 1! #34205600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34206000 0! #34206500 1! #34206600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34207000 0! #34207500 1! #34207600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34208000 0! #34208500 1! #34208600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34209000 0! #34209500 1! #34209600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34210000 0! #34210500 1! #34210600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34211000 0! #34211500 1! #34211600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34212000 0! #34212500 1! #34212600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34213000 0! #34213500 1! #34213600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34214000 0! #34214500 1! #34214600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34215000 0! #34215500 1! #34215600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34216000 0! #34216500 1! #34216600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34217000 0! #34217500 1! #34217600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34218000 0! #34218500 1! #34218600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34219000 0! #34219500 1! #34219600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34220000 0! #34220500 1! #34220600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34221000 0! #34221500 1! #34221600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34222000 0! #34222500 1! #34222600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34223000 0! #34223500 1! #34223600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34224000 0! #34224500 1! #34224600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34225000 0! #34225500 1! #34225600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34226000 0! #34226500 1! #34226600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34227000 0! #34227500 1! #34227600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34228000 0! #34228500 1! #34228600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34229000 0! #34229500 1! #34229600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34230000 0! #34230500 1! #34230600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34231000 0! #34231500 1! #34231600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34232000 0! #34232500 1! #34232600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34233000 0! #34233500 1! #34233600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34234000 0! #34234500 1! #34234600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34235000 0! #34235500 1! #34235600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34236000 0! #34236500 1! #34236600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34237000 0! #34237500 1! #34237600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34238000 0! #34238500 1! #34238600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34239000 0! #34239500 1! #34239600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34240000 0! #34240500 1! #34240600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34241000 0! #34241500 1! #34241600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34242000 0! #34242500 1! #34242600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34243000 0! #34243500 1! #34243600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34244000 0! #34244500 1! #34244600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34245000 0! #34245500 1! #34245600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34246000 0! #34246500 1! #34246600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34247000 0! #34247500 1! #34247600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34248000 0! #34248500 1! #34248600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34249000 0! #34249500 1! #34249600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #34249700 1j xj #34250000 0! #34250500 1! #34250600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34251000 0! #34251500 1! #34251600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34252000 0! #34252500 1! #34252600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34253000 0! #34253500 1! #34253600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34254000 0! #34254500 1! #34254600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34255000 0! #34255500 1! #34255600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34256000 0! #34256500 1! #34256600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34257000 0! #34257500 1! #34257600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34258000 0! #34258500 1! #34258600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34259000 0! #34259500 1! #34259600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34260000 0! #34260500 1! #34260600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34261000 0! #34261500 1! #34261600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34262000 0! #34262500 1! #34262600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34263000 0! #34263500 1! #34263600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34264000 0! #34264500 1! #34264600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34265000 0! #34265500 1! #34265600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34266000 0! #34266500 1! #34266600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34267000 0! #34267500 1! #34267600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34268000 0! #34268500 1! #34268600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34269000 0! #34269500 1! #34269600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34270000 0! #34270500 1! #34270600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34271000 0! #34271500 1! #34271600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34272000 0! #34272500 1! #34272600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34273000 0! #34273500 1! #34273600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34274000 0! #34274500 1! #34274600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34275000 0! #34275500 1! #34275600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34276000 0! #34276500 1! #34276600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34277000 0! #34277500 1! #34277600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34278000 0! #34278500 1! #34278600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34279000 0! #34279500 1! #34279600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34280000 0! #34280500 1! #34280600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34281000 0! #34281500 1! #34281600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34282000 0! #34282500 1! #34282600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34283000 0! #34283500 1! #34283600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34284000 0! #34284500 1! #34284600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34285000 0! #34285500 1! #34285600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34286000 0! #34286500 1! #34286600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34287000 0! #34287500 1! #34287600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34288000 0! #34288500 1! #34288600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34289000 0! #34289500 1! #34289600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34290000 0! #34290500 1! #34290600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34291000 0! #34291500 1! #34291600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34292000 0! #34292500 1! #34292600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34293000 0! #34293500 1! #34293600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34294000 0! #34294500 1! #34294600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34295000 0! #34295500 1! #34295600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34296000 0! #34296500 1! #34296600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34297000 0! #34297500 1! #34297600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34298000 0! #34298500 1! #34298600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34299000 0! #34299500 1! #34299600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34300000 0! #34300500 1! #34300600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34301000 0! #34301500 1! #34301600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34302000 0! #34302500 1! #34302600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34303000 0! #34303500 1! #34303600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34304000 0! #34304500 1! #34304600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34305000 0! #34305500 1! #34305600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34306000 0! #34306500 1! #34306600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34307000 0! #34307500 1! #34307600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34308000 0! #34308500 1! #34308600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34309000 0! #34309500 1! #34309600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34310000 0! #34310500 1! #34310600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34311000 0! #34311500 1! #34311600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34312000 0! #34312500 1! #34312600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34313000 0! #34313500 1! #34313600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34314000 0! #34314500 1! #34314600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34315000 0! #34315500 1! #34315600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34316000 0! #34316500 1! #34316600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34317000 0! #34317500 1! #34317600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34318000 0! #34318500 1! #34318600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34319000 0! #34319500 1! #34319600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34320000 0! #34320500 1! #34320600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34321000 0! #34321500 1! #34321600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34322000 0! #34322500 1! #34322600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34323000 0! #34323500 1! #34323600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34324000 0! #34324500 1! #34324600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34325000 0! #34325500 1! #34325600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34326000 0! #34326500 1! #34326600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34327000 0! #34327500 1! #34327600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34328000 0! #34328500 1! #34328600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34329000 0! #34329500 1! #34329600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34330000 0! #34330500 1! #34330600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34331000 0! #34331500 1! #34331600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34332000 0! #34332500 1! #34332600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34333000 0! #34333500 1! #34333600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34334000 0! #34334500 1! #34334600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34335000 0! #34335500 1! #34335600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34336000 0! #34336500 1! #34336600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34337000 0! #34337500 1! #34337600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34338000 0! #34338500 1! #34338600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34339000 0! #34339500 1! #34339600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34340000 0! #34340500 1! #34340600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34341000 0! #34341500 1! #34341600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34342000 0! #34342500 1! #34342600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34343000 0! #34343500 1! #34343600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34344000 0! #34344500 1! #34344600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34345000 0! #34345500 1! #34345600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34346000 0! #34346500 1! #34346600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34347000 0! #34347500 1! #34347600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34348000 0! #34348500 1! #34348600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34349000 0! #34349500 1! #34349600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34350000 0! #34350500 1! #34350600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34351000 0! #34351500 1! #34351600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34352000 0! #34352500 1! #34352600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34353000 0! #34353500 1! #34353600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34354000 0! #34354500 1! #34354600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34355000 0! #34355500 1! #34355600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34356000 0! #34356500 1! #34356600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34357000 0! #34357500 1! #34357600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34358000 0! #34358500 1! #34358600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34359000 0! #34359500 1! #34359600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34360000 0! #34360500 1! #34360600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34361000 0! #34361500 1! #34361600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34362000 0! #34362500 1! #34362600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34363000 0! #34363500 1! #34363600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34364000 0! #34364500 1! #34364600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34365000 0! #34365500 1! #34365600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34366000 0! #34366500 1! #34366600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34367000 0! #34367500 1! #34367600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34368000 0! #34368500 1! #34368600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34369000 0! #34369500 1! #34369600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34370000 0! #34370500 1! #34370600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34371000 0! #34371500 1! #34371600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34372000 0! #34372500 1! #34372600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34373000 0! #34373500 1! #34373600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34374000 0! #34374500 1! #34374600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34375000 0! #34375500 1! #34375600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34376000 0! #34376500 1! #34376600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34377000 0! #34377500 1! #34377600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34378000 0! #34378500 1! #34378600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34379000 0! #34379500 1! #34379600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34380000 0! #34380500 1! #34380600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34381000 0! #34381500 1! #34381600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34382000 0! #34382500 1! #34382600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34383000 0! #34383500 1! #34383600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34384000 0! #34384500 1! #34384600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34385000 0! #34385500 1! #34385600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34386000 0! #34386500 1! #34386600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34387000 0! #34387500 1! #34387600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34388000 0! #34388500 1! #34388600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34389000 0! #34389500 1! #34389600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34390000 0! #34390500 1! #34390600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34391000 0! #34391500 1! #34391600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34392000 0! #34392500 1! #34392600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34393000 0! #34393500 1! #34393600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34394000 0! #34394500 1! #34394600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34395000 0! #34395500 1! #34395600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34396000 0! #34396500 1! #34396600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34397000 0! #34397500 1! #34397600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34398000 0! #34398500 1! #34398600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34399000 0! #34399500 1! #34399600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34400000 0! #34400500 1! #34400600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34401000 0! #34401500 1! #34401600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34402000 0! #34402500 1! #34402600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #34402700 bx111 ^ b101 g bx0xxx c #34403000 0! #34403500 1! #34403600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34404000 0! #34404500 1! #34404600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34405000 0! #34405500 1! #34405600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34406000 0! #34406500 1! #34406600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34407000 0! #34407500 1! #34407600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34408000 0! #34408500 1! #34408600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34409000 0! #34409500 1! #34409600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34410000 0! #34410500 1! #34410600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34411000 0! #34411500 1! #34411600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34412000 0! #34412500 1! #34412600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34413000 0! #34413500 1! #34413600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34414000 0! #34414500 1! #34414600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34415000 0! #34415500 1! #34415600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34416000 0! #34416500 1! #34416600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34417000 0! #34417500 1! #34417600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34418000 0! #34418500 1! #34418600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34419000 0! #34419500 1! #34419600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34420000 0! #34420500 1! #34420600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34421000 0! #34421500 1! #34421600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34422000 0! #34422500 1! #34422600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34423000 0! #34423500 1! #34423600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34424000 0! #34424500 1! #34424600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34425000 0! #34425500 1! #34425600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34426000 0! #34426500 1! #34426600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34427000 0! #34427500 1! #34427600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34428000 0! #34428500 1! #34428600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34429000 0! #34429500 1! #34429600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34430000 0! #34430500 1! #34430600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34431000 0! #34431500 1! #34431600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34432000 0! #34432500 1! #34432600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34433000 0! #34433500 1! #34433600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34434000 0! #34434500 1! #34434600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34435000 0! #34435500 1! #34435600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34436000 0! #34436500 1! #34436600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34437000 0! #34437500 1! #34437600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34438000 0! #34438500 1! #34438600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34439000 0! #34439500 1! #34439600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34440000 0! #34440500 1! #34440600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34441000 0! #34441500 1! #34441600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34442000 0! #34442500 1! #34442600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34443000 0! #34443500 1! #34443600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34444000 0! #34444500 1! #34444600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34445000 0! #34445500 1! #34445600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34446000 0! #34446500 1! #34446600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34447000 0! #34447500 1! #34447600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34448000 0! #34448500 1! #34448600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34449000 0! #34449500 1! #34449600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34450000 0! #34450500 1! #34450600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34451000 0! #34451500 1! #34451600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34452000 0! #34452500 1! #34452600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34453000 0! #34453500 1! #34453600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34454000 0! #34454500 1! #34454600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34455000 0! #34455500 1! #34455600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34456000 0! #34456500 1! #34456600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34457000 0! #34457500 1! #34457600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34458000 0! #34458500 1! #34458600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34459000 0! #34459500 1! #34459600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34460000 0! #34460500 1! #34460600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34461000 0! #34461500 1! #34461600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34462000 0! #34462500 1! #34462600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34463000 0! #34463500 1! #34463600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34464000 0! #34464500 1! #34464600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34465000 0! #34465500 1! #34465600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34466000 0! #34466500 1! #34466600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34467000 0! #34467500 1! #34467600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34468000 0! #34468500 1! #34468600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34469000 0! #34469500 1! #34469600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34470000 0! #34470500 1! #34470600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34471000 0! #34471500 1! #34471600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34472000 0! #34472500 1! #34472600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34473000 0! #34473500 1! #34473600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34474000 0! #34474500 1! #34474600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34475000 0! #34475500 1! #34475600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34476000 0! #34476500 1! #34476600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34477000 0! #34477500 1! #34477600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34478000 0! #34478500 1! #34478600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34479000 0! #34479500 1! #34479600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34480000 0! #34480500 1! #34480600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34481000 0! #34481500 1! #34481600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34482000 0! #34482500 1! #34482600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34483000 0! #34483500 1! #34483600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34484000 0! #34484500 1! #34484600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34485000 0! #34485500 1! #34485600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34486000 0! #34486500 1! #34486600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34487000 0! #34487500 1! #34487600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34488000 0! #34488500 1! #34488600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34489000 0! #34489500 1! #34489600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34490000 0! #34490500 1! #34490600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34491000 0! #34491500 1! #34491600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34492000 0! #34492500 1! #34492600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34493000 0! #34493500 1! #34493600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34494000 0! #34494500 1! #34494600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34495000 0! #34495500 1! #34495600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34496000 0! #34496500 1! #34496600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34497000 0! #34497500 1! #34497600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34498000 0! #34498500 1! #34498600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34499000 0! #34499500 1! #34499600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34500000 0! #34500500 1! #34500600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34501000 0! #34501500 1! #34501600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34502000 0! #34502500 1! #34502600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34503000 0! #34503500 1! #34503600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34504000 0! #34504500 1! #34504600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #34504700 1j xj #34505000 0! #34505500 1! #34505600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34506000 0! #34506500 1! #34506600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34507000 0! #34507500 1! #34507600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34508000 0! #34508500 1! #34508600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34509000 0! #34509500 1! #34509600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34510000 0! #34510500 1! #34510600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34511000 0! #34511500 1! #34511600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34512000 0! #34512500 1! #34512600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34513000 0! #34513500 1! #34513600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34514000 0! #34514500 1! #34514600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34515000 0! #34515500 1! #34515600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34516000 0! #34516500 1! #34516600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34517000 0! #34517500 1! #34517600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34518000 0! #34518500 1! #34518600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34519000 0! #34519500 1! #34519600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34520000 0! #34520500 1! #34520600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34521000 0! #34521500 1! #34521600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34522000 0! #34522500 1! #34522600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34523000 0! #34523500 1! #34523600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34524000 0! #34524500 1! #34524600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34525000 0! #34525500 1! #34525600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34526000 0! #34526500 1! #34526600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34527000 0! #34527500 1! #34527600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34528000 0! #34528500 1! #34528600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34529000 0! #34529500 1! #34529600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34530000 0! #34530500 1! #34530600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34531000 0! #34531500 1! #34531600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34532000 0! #34532500 1! #34532600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34533000 0! #34533500 1! #34533600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34534000 0! #34534500 1! #34534600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34535000 0! #34535500 1! #34535600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34536000 0! #34536500 1! #34536600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34537000 0! #34537500 1! #34537600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34538000 0! #34538500 1! #34538600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34539000 0! #34539500 1! #34539600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34540000 0! #34540500 1! #34540600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34541000 0! #34541500 1! #34541600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34542000 0! #34542500 1! #34542600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34543000 0! #34543500 1! #34543600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34544000 0! #34544500 1! #34544600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34545000 0! #34545500 1! #34545600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34546000 0! #34546500 1! #34546600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34547000 0! #34547500 1! #34547600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34548000 0! #34548500 1! #34548600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34549000 0! #34549500 1! #34549600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34550000 0! #34550500 1! #34550600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34551000 0! #34551500 1! #34551600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34552000 0! #34552500 1! #34552600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34553000 0! #34553500 1! #34553600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34554000 0! #34554500 1! #34554600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34555000 0! #34555500 1! #34555600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34556000 0! #34556500 1! #34556600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34557000 0! #34557500 1! #34557600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34558000 0! #34558500 1! #34558600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34559000 0! #34559500 1! #34559600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34560000 0! #34560500 1! #34560600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34561000 0! #34561500 1! #34561600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34562000 0! #34562500 1! #34562600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34563000 0! #34563500 1! #34563600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34564000 0! #34564500 1! #34564600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34565000 0! #34565500 1! #34565600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34566000 0! #34566500 1! #34566600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34567000 0! #34567500 1! #34567600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34568000 0! #34568500 1! #34568600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34569000 0! #34569500 1! #34569600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34570000 0! #34570500 1! #34570600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34571000 0! #34571500 1! #34571600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34572000 0! #34572500 1! #34572600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34573000 0! #34573500 1! #34573600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34574000 0! #34574500 1! #34574600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34575000 0! #34575500 1! #34575600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34576000 0! #34576500 1! #34576600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34577000 0! #34577500 1! #34577600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34578000 0! #34578500 1! #34578600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34579000 0! #34579500 1! #34579600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34580000 0! #34580500 1! #34580600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34581000 0! #34581500 1! #34581600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34582000 0! #34582500 1! #34582600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34583000 0! #34583500 1! #34583600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34584000 0! #34584500 1! #34584600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34585000 0! #34585500 1! #34585600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34586000 0! #34586500 1! #34586600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34587000 0! #34587500 1! #34587600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34588000 0! #34588500 1! #34588600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34589000 0! #34589500 1! #34589600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34590000 0! #34590500 1! #34590600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34591000 0! #34591500 1! #34591600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34592000 0! #34592500 1! #34592600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34593000 0! #34593500 1! #34593600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34594000 0! #34594500 1! #34594600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34595000 0! #34595500 1! #34595600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34596000 0! #34596500 1! #34596600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34597000 0! #34597500 1! #34597600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34598000 0! #34598500 1! #34598600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34599000 0! #34599500 1! #34599600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34600000 0! #34600500 1! #34600600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34601000 0! #34601500 1! #34601600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34602000 0! #34602500 1! #34602600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34603000 0! #34603500 1! #34603600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34604000 0! #34604500 1! #34604600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34605000 0! #34605500 1! #34605600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34606000 0! #34606500 1! #34606600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34607000 0! #34607500 1! #34607600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34608000 0! #34608500 1! #34608600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34609000 0! #34609500 1! #34609600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34610000 0! #34610500 1! #34610600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34611000 0! #34611500 1! #34611600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34612000 0! #34612500 1! #34612600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34613000 0! #34613500 1! #34613600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34614000 0! #34614500 1! #34614600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34615000 0! #34615500 1! #34615600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34616000 0! #34616500 1! #34616600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34617000 0! #34617500 1! #34617600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34618000 0! #34618500 1! #34618600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34619000 0! #34619500 1! #34619600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34620000 0! #34620500 1! #34620600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34621000 0! #34621500 1! #34621600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34622000 0! #34622500 1! #34622600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34623000 0! #34623500 1! #34623600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34624000 0! #34624500 1! #34624600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34625000 0! #34625500 1! #34625600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34626000 0! #34626500 1! #34626600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34627000 0! #34627500 1! #34627600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34628000 0! #34628500 1! #34628600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34629000 0! #34629500 1! #34629600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34630000 0! #34630500 1! #34630600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34631000 0! #34631500 1! #34631600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34632000 0! #34632500 1! #34632600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34633000 0! #34633500 1! #34633600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34634000 0! #34634500 1! #34634600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34635000 0! #34635500 1! #34635600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34636000 0! #34636500 1! #34636600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34637000 0! #34637500 1! #34637600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34638000 0! #34638500 1! #34638600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34639000 0! #34639500 1! #34639600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34640000 0! #34640500 1! #34640600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34641000 0! #34641500 1! #34641600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34642000 0! #34642500 1! #34642600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34643000 0! #34643500 1! #34643600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34644000 0! #34644500 1! #34644600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34645000 0! #34645500 1! #34645600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34646000 0! #34646500 1! #34646600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34647000 0! #34647500 1! #34647600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34648000 0! #34648500 1! #34648600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34649000 0! #34649500 1! #34649600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34650000 0! #34650500 1! #34650600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34651000 0! #34651500 1! #34651600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34652000 0! #34652500 1! #34652600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34653000 0! #34653500 1! #34653600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34654000 0! #34654500 1! #34654600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34655000 0! #34655500 1! #34655600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34656000 0! #34656500 1! #34656600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34657000 0! #34657500 1! #34657600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #34657700 bx1111 ^ b100 g bx0xxxx c #34658000 0! #34658500 1! #34658600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34659000 0! #34659500 1! #34659600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34660000 0! #34660500 1! #34660600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34661000 0! #34661500 1! #34661600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34662000 0! #34662500 1! #34662600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34663000 0! #34663500 1! #34663600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34664000 0! #34664500 1! #34664600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34665000 0! #34665500 1! #34665600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34666000 0! #34666500 1! #34666600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34667000 0! #34667500 1! #34667600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34668000 0! #34668500 1! #34668600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34669000 0! #34669500 1! #34669600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34670000 0! #34670500 1! #34670600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34671000 0! #34671500 1! #34671600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34672000 0! #34672500 1! #34672600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34673000 0! #34673500 1! #34673600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34674000 0! #34674500 1! #34674600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34675000 0! #34675500 1! #34675600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34676000 0! #34676500 1! #34676600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34677000 0! #34677500 1! #34677600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34678000 0! #34678500 1! #34678600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34679000 0! #34679500 1! #34679600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34680000 0! #34680500 1! #34680600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34681000 0! #34681500 1! #34681600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34682000 0! #34682500 1! #34682600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34683000 0! #34683500 1! #34683600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34684000 0! #34684500 1! #34684600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34685000 0! #34685500 1! #34685600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34686000 0! #34686500 1! #34686600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34687000 0! #34687500 1! #34687600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34688000 0! #34688500 1! #34688600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34689000 0! #34689500 1! #34689600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34690000 0! #34690500 1! #34690600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34691000 0! #34691500 1! #34691600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34692000 0! #34692500 1! #34692600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34693000 0! #34693500 1! #34693600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34694000 0! #34694500 1! #34694600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34695000 0! #34695500 1! #34695600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34696000 0! #34696500 1! #34696600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34697000 0! #34697500 1! #34697600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34698000 0! #34698500 1! #34698600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34699000 0! #34699500 1! #34699600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34700000 0! #34700500 1! #34700600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34701000 0! #34701500 1! #34701600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34702000 0! #34702500 1! #34702600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34703000 0! #34703500 1! #34703600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34704000 0! #34704500 1! #34704600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34705000 0! #34705500 1! #34705600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34706000 0! #34706500 1! #34706600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34707000 0! #34707500 1! #34707600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34708000 0! #34708500 1! #34708600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34709000 0! #34709500 1! #34709600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34710000 0! #34710500 1! #34710600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34711000 0! #34711500 1! #34711600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34712000 0! #34712500 1! #34712600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34713000 0! #34713500 1! #34713600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34714000 0! #34714500 1! #34714600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34715000 0! #34715500 1! #34715600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34716000 0! #34716500 1! #34716600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34717000 0! #34717500 1! #34717600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34718000 0! #34718500 1! #34718600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34719000 0! #34719500 1! #34719600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34720000 0! #34720500 1! #34720600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34721000 0! #34721500 1! #34721600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34722000 0! #34722500 1! #34722600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34723000 0! #34723500 1! #34723600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34724000 0! #34724500 1! #34724600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34725000 0! #34725500 1! #34725600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34726000 0! #34726500 1! #34726600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34727000 0! #34727500 1! #34727600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34728000 0! #34728500 1! #34728600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34729000 0! #34729500 1! #34729600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34730000 0! #34730500 1! #34730600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34731000 0! #34731500 1! #34731600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34732000 0! #34732500 1! #34732600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34733000 0! #34733500 1! #34733600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34734000 0! #34734500 1! #34734600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34735000 0! #34735500 1! #34735600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34736000 0! #34736500 1! #34736600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34737000 0! #34737500 1! #34737600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34738000 0! #34738500 1! #34738600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34739000 0! #34739500 1! #34739600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34740000 0! #34740500 1! #34740600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34741000 0! #34741500 1! #34741600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34742000 0! #34742500 1! #34742600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34743000 0! #34743500 1! #34743600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34744000 0! #34744500 1! #34744600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34745000 0! #34745500 1! #34745600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34746000 0! #34746500 1! #34746600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34747000 0! #34747500 1! #34747600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34748000 0! #34748500 1! #34748600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34749000 0! #34749500 1! #34749600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34750000 0! #34750500 1! #34750600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34751000 0! #34751500 1! #34751600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34752000 0! #34752500 1! #34752600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34753000 0! #34753500 1! #34753600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34754000 0! #34754500 1! #34754600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34755000 0! #34755500 1! #34755600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34756000 0! #34756500 1! #34756600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34757000 0! #34757500 1! #34757600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34758000 0! #34758500 1! #34758600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34759000 0! #34759500 1! #34759600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #34759700 1j xj #34760000 0! #34760500 1! #34760600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34761000 0! #34761500 1! #34761600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34762000 0! #34762500 1! #34762600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34763000 0! #34763500 1! #34763600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34764000 0! #34764500 1! #34764600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34765000 0! #34765500 1! #34765600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34766000 0! #34766500 1! #34766600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34767000 0! #34767500 1! #34767600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34768000 0! #34768500 1! #34768600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34769000 0! #34769500 1! #34769600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34770000 0! #34770500 1! #34770600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34771000 0! #34771500 1! #34771600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34772000 0! #34772500 1! #34772600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34773000 0! #34773500 1! #34773600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34774000 0! #34774500 1! #34774600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34775000 0! #34775500 1! #34775600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34776000 0! #34776500 1! #34776600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34777000 0! #34777500 1! #34777600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34778000 0! #34778500 1! #34778600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34779000 0! #34779500 1! #34779600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34780000 0! #34780500 1! #34780600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34781000 0! #34781500 1! #34781600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34782000 0! #34782500 1! #34782600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34783000 0! #34783500 1! #34783600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34784000 0! #34784500 1! #34784600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34785000 0! #34785500 1! #34785600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34786000 0! #34786500 1! #34786600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34787000 0! #34787500 1! #34787600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34788000 0! #34788500 1! #34788600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34789000 0! #34789500 1! #34789600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34790000 0! #34790500 1! #34790600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34791000 0! #34791500 1! #34791600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34792000 0! #34792500 1! #34792600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34793000 0! #34793500 1! #34793600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34794000 0! #34794500 1! #34794600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34795000 0! #34795500 1! #34795600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34796000 0! #34796500 1! #34796600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34797000 0! #34797500 1! #34797600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34798000 0! #34798500 1! #34798600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34799000 0! #34799500 1! #34799600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34800000 0! #34800500 1! #34800600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34801000 0! #34801500 1! #34801600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34802000 0! #34802500 1! #34802600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34803000 0! #34803500 1! #34803600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34804000 0! #34804500 1! #34804600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34805000 0! #34805500 1! #34805600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34806000 0! #34806500 1! #34806600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34807000 0! #34807500 1! #34807600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34808000 0! #34808500 1! #34808600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34809000 0! #34809500 1! #34809600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34810000 0! #34810500 1! #34810600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34811000 0! #34811500 1! #34811600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34812000 0! #34812500 1! #34812600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34813000 0! #34813500 1! #34813600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34814000 0! #34814500 1! #34814600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34815000 0! #34815500 1! #34815600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34816000 0! #34816500 1! #34816600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34817000 0! #34817500 1! #34817600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34818000 0! #34818500 1! #34818600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34819000 0! #34819500 1! #34819600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34820000 0! #34820500 1! #34820600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34821000 0! #34821500 1! #34821600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34822000 0! #34822500 1! #34822600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34823000 0! #34823500 1! #34823600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34824000 0! #34824500 1! #34824600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34825000 0! #34825500 1! #34825600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34826000 0! #34826500 1! #34826600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34827000 0! #34827500 1! #34827600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34828000 0! #34828500 1! #34828600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34829000 0! #34829500 1! #34829600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34830000 0! #34830500 1! #34830600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34831000 0! #34831500 1! #34831600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34832000 0! #34832500 1! #34832600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34833000 0! #34833500 1! #34833600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34834000 0! #34834500 1! #34834600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34835000 0! #34835500 1! #34835600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34836000 0! #34836500 1! #34836600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34837000 0! #34837500 1! #34837600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34838000 0! #34838500 1! #34838600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34839000 0! #34839500 1! #34839600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34840000 0! #34840500 1! #34840600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34841000 0! #34841500 1! #34841600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34842000 0! #34842500 1! #34842600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34843000 0! #34843500 1! #34843600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34844000 0! #34844500 1! #34844600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34845000 0! #34845500 1! #34845600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34846000 0! #34846500 1! #34846600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34847000 0! #34847500 1! #34847600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34848000 0! #34848500 1! #34848600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34849000 0! #34849500 1! #34849600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34850000 0! #34850500 1! #34850600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34851000 0! #34851500 1! #34851600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34852000 0! #34852500 1! #34852600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34853000 0! #34853500 1! #34853600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34854000 0! #34854500 1! #34854600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34855000 0! #34855500 1! #34855600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34856000 0! #34856500 1! #34856600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34857000 0! #34857500 1! #34857600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34858000 0! #34858500 1! #34858600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34859000 0! #34859500 1! #34859600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34860000 0! #34860500 1! #34860600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34861000 0! #34861500 1! #34861600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34862000 0! #34862500 1! #34862600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34863000 0! #34863500 1! #34863600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34864000 0! #34864500 1! #34864600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34865000 0! #34865500 1! #34865600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34866000 0! #34866500 1! #34866600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34867000 0! #34867500 1! #34867600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34868000 0! #34868500 1! #34868600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34869000 0! #34869500 1! #34869600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34870000 0! #34870500 1! #34870600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34871000 0! #34871500 1! #34871600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34872000 0! #34872500 1! #34872600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34873000 0! #34873500 1! #34873600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34874000 0! #34874500 1! #34874600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34875000 0! #34875500 1! #34875600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34876000 0! #34876500 1! #34876600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34877000 0! #34877500 1! #34877600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34878000 0! #34878500 1! #34878600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34879000 0! #34879500 1! #34879600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34880000 0! #34880500 1! #34880600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34881000 0! #34881500 1! #34881600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34882000 0! #34882500 1! #34882600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34883000 0! #34883500 1! #34883600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34884000 0! #34884500 1! #34884600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34885000 0! #34885500 1! #34885600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34886000 0! #34886500 1! #34886600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34887000 0! #34887500 1! #34887600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34888000 0! #34888500 1! #34888600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34889000 0! #34889500 1! #34889600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34890000 0! #34890500 1! #34890600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34891000 0! #34891500 1! #34891600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34892000 0! #34892500 1! #34892600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34893000 0! #34893500 1! #34893600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34894000 0! #34894500 1! #34894600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34895000 0! #34895500 1! #34895600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34896000 0! #34896500 1! #34896600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34897000 0! #34897500 1! #34897600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34898000 0! #34898500 1! #34898600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34899000 0! #34899500 1! #34899600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34900000 0! #34900500 1! #34900600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34901000 0! #34901500 1! #34901600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34902000 0! #34902500 1! #34902600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34903000 0! #34903500 1! #34903600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34904000 0! #34904500 1! #34904600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34905000 0! #34905500 1! #34905600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34906000 0! #34906500 1! #34906600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34907000 0! #34907500 1! #34907600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34908000 0! #34908500 1! #34908600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34909000 0! #34909500 1! #34909600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34910000 0! #34910500 1! #34910600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34911000 0! #34911500 1! #34911600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34912000 0! #34912500 1! #34912600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #34912700 bx11111 ^ b11 g bx0xxxxx c 0e #34913000 0! #34913500 1! #34913600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34914000 0! #34914500 1! #34914600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34915000 0! #34915500 1! #34915600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34916000 0! #34916500 1! #34916600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34917000 0! #34917500 1! #34917600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34918000 0! #34918500 1! #34918600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34919000 0! #34919500 1! #34919600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34920000 0! #34920500 1! #34920600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34921000 0! #34921500 1! #34921600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34922000 0! #34922500 1! #34922600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34923000 0! #34923500 1! #34923600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34924000 0! #34924500 1! #34924600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34925000 0! #34925500 1! #34925600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34926000 0! #34926500 1! #34926600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34927000 0! #34927500 1! #34927600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34928000 0! #34928500 1! #34928600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34929000 0! #34929500 1! #34929600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34930000 0! #34930500 1! #34930600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34931000 0! #34931500 1! #34931600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34932000 0! #34932500 1! #34932600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34933000 0! #34933500 1! #34933600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34934000 0! #34934500 1! #34934600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34935000 0! #34935500 1! #34935600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34936000 0! #34936500 1! #34936600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34937000 0! #34937500 1! #34937600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34938000 0! #34938500 1! #34938600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34939000 0! #34939500 1! #34939600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34940000 0! #34940500 1! #34940600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34941000 0! #34941500 1! #34941600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34942000 0! #34942500 1! #34942600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34943000 0! #34943500 1! #34943600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34944000 0! #34944500 1! #34944600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34945000 0! #34945500 1! #34945600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34946000 0! #34946500 1! #34946600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34947000 0! #34947500 1! #34947600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34948000 0! #34948500 1! #34948600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34949000 0! #34949500 1! #34949600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34950000 0! #34950500 1! #34950600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34951000 0! #34951500 1! #34951600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34952000 0! #34952500 1! #34952600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34953000 0! #34953500 1! #34953600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34954000 0! #34954500 1! #34954600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34955000 0! #34955500 1! #34955600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34956000 0! #34956500 1! #34956600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34957000 0! #34957500 1! #34957600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34958000 0! #34958500 1! #34958600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34959000 0! #34959500 1! #34959600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34960000 0! #34960500 1! #34960600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34961000 0! #34961500 1! #34961600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34962000 0! #34962500 1! #34962600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34963000 0! #34963500 1! #34963600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34964000 0! #34964500 1! #34964600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34965000 0! #34965500 1! #34965600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34966000 0! #34966500 1! #34966600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34967000 0! #34967500 1! #34967600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34968000 0! #34968500 1! #34968600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34969000 0! #34969500 1! #34969600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34970000 0! #34970500 1! #34970600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34971000 0! #34971500 1! #34971600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34972000 0! #34972500 1! #34972600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34973000 0! #34973500 1! #34973600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34974000 0! #34974500 1! #34974600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34975000 0! #34975500 1! #34975600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34976000 0! #34976500 1! #34976600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34977000 0! #34977500 1! #34977600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34978000 0! #34978500 1! #34978600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34979000 0! #34979500 1! #34979600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34980000 0! #34980500 1! #34980600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34981000 0! #34981500 1! #34981600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34982000 0! #34982500 1! #34982600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34983000 0! #34983500 1! #34983600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34984000 0! #34984500 1! #34984600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34985000 0! #34985500 1! #34985600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34986000 0! #34986500 1! #34986600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34987000 0! #34987500 1! #34987600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34988000 0! #34988500 1! #34988600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34989000 0! #34989500 1! #34989600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34990000 0! #34990500 1! #34990600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34991000 0! #34991500 1! #34991600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34992000 0! #34992500 1! #34992600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34993000 0! #34993500 1! #34993600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34994000 0! #34994500 1! #34994600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34995000 0! #34995500 1! #34995600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34996000 0! #34996500 1! #34996600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34997000 0! #34997500 1! #34997600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #34998000 0! #34998500 1! #34998600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #34999000 0! #34999500 1! #34999600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35000000 0! #35000500 1! #35000600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35001000 0! #35001500 1! #35001600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35002000 0! #35002500 1! #35002600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35003000 0! #35003500 1! #35003600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35004000 0! #35004500 1! #35004600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35005000 0! #35005500 1! #35005600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35006000 0! #35006500 1! #35006600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35007000 0! #35007500 1! #35007600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35008000 0! #35008500 1! #35008600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35009000 0! #35009500 1! #35009600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35010000 0! #35010500 1! #35010600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35011000 0! #35011500 1! #35011600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35012000 0! #35012500 1! #35012600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35013000 0! #35013500 1! #35013600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35014000 0! #35014500 1! #35014600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #35014700 1j xj #35015000 0! #35015500 1! #35015600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35016000 0! #35016500 1! #35016600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35017000 0! #35017500 1! #35017600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35018000 0! #35018500 1! #35018600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35019000 0! #35019500 1! #35019600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35020000 0! #35020500 1! #35020600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35021000 0! #35021500 1! #35021600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35022000 0! #35022500 1! #35022600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35023000 0! #35023500 1! #35023600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35024000 0! #35024500 1! #35024600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35025000 0! #35025500 1! #35025600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35026000 0! #35026500 1! #35026600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35027000 0! #35027500 1! #35027600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35028000 0! #35028500 1! #35028600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35029000 0! #35029500 1! #35029600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35030000 0! #35030500 1! #35030600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35031000 0! #35031500 1! #35031600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35032000 0! #35032500 1! #35032600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35033000 0! #35033500 1! #35033600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35034000 0! #35034500 1! #35034600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35035000 0! #35035500 1! #35035600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35036000 0! #35036500 1! #35036600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35037000 0! #35037500 1! #35037600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35038000 0! #35038500 1! #35038600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35039000 0! #35039500 1! #35039600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35040000 0! #35040500 1! #35040600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35041000 0! #35041500 1! #35041600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35042000 0! #35042500 1! #35042600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35043000 0! #35043500 1! #35043600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35044000 0! #35044500 1! #35044600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35045000 0! #35045500 1! #35045600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35046000 0! #35046500 1! #35046600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35047000 0! #35047500 1! #35047600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35048000 0! #35048500 1! #35048600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35049000 0! #35049500 1! #35049600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35050000 0! #35050500 1! #35050600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35051000 0! #35051500 1! #35051600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35052000 0! #35052500 1! #35052600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35053000 0! #35053500 1! #35053600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35054000 0! #35054500 1! #35054600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35055000 0! #35055500 1! #35055600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35056000 0! #35056500 1! #35056600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35057000 0! #35057500 1! #35057600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35058000 0! #35058500 1! #35058600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35059000 0! #35059500 1! #35059600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35060000 0! #35060500 1! #35060600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35061000 0! #35061500 1! #35061600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35062000 0! #35062500 1! #35062600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35063000 0! #35063500 1! #35063600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35064000 0! #35064500 1! #35064600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35065000 0! #35065500 1! #35065600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35066000 0! #35066500 1! #35066600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35067000 0! #35067500 1! #35067600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35068000 0! #35068500 1! #35068600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35069000 0! #35069500 1! #35069600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35070000 0! #35070500 1! #35070600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35071000 0! #35071500 1! #35071600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35072000 0! #35072500 1! #35072600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35073000 0! #35073500 1! #35073600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35074000 0! #35074500 1! #35074600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35075000 0! #35075500 1! #35075600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35076000 0! #35076500 1! #35076600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35077000 0! #35077500 1! #35077600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35078000 0! #35078500 1! #35078600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35079000 0! #35079500 1! #35079600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35080000 0! #35080500 1! #35080600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35081000 0! #35081500 1! #35081600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35082000 0! #35082500 1! #35082600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35083000 0! #35083500 1! #35083600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35084000 0! #35084500 1! #35084600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35085000 0! #35085500 1! #35085600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35086000 0! #35086500 1! #35086600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35087000 0! #35087500 1! #35087600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35088000 0! #35088500 1! #35088600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35089000 0! #35089500 1! #35089600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35090000 0! #35090500 1! #35090600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35091000 0! #35091500 1! #35091600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35092000 0! #35092500 1! #35092600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35093000 0! #35093500 1! #35093600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35094000 0! #35094500 1! #35094600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35095000 0! #35095500 1! #35095600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35096000 0! #35096500 1! #35096600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35097000 0! #35097500 1! #35097600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35098000 0! #35098500 1! #35098600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35099000 0! #35099500 1! #35099600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35100000 0! #35100500 1! #35100600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35101000 0! #35101500 1! #35101600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35102000 0! #35102500 1! #35102600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35103000 0! #35103500 1! #35103600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35104000 0! #35104500 1! #35104600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35105000 0! #35105500 1! #35105600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35106000 0! #35106500 1! #35106600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35107000 0! #35107500 1! #35107600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35108000 0! #35108500 1! #35108600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35109000 0! #35109500 1! #35109600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35110000 0! #35110500 1! #35110600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35111000 0! #35111500 1! #35111600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35112000 0! #35112500 1! #35112600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35113000 0! #35113500 1! #35113600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35114000 0! #35114500 1! #35114600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35115000 0! #35115500 1! #35115600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35116000 0! #35116500 1! #35116600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35117000 0! #35117500 1! #35117600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35118000 0! #35118500 1! #35118600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35119000 0! #35119500 1! #35119600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35120000 0! #35120500 1! #35120600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35121000 0! #35121500 1! #35121600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35122000 0! #35122500 1! #35122600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35123000 0! #35123500 1! #35123600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35124000 0! #35124500 1! #35124600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35125000 0! #35125500 1! #35125600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35126000 0! #35126500 1! #35126600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35127000 0! #35127500 1! #35127600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35128000 0! #35128500 1! #35128600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35129000 0! #35129500 1! #35129600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35130000 0! #35130500 1! #35130600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35131000 0! #35131500 1! #35131600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35132000 0! #35132500 1! #35132600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35133000 0! #35133500 1! #35133600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35134000 0! #35134500 1! #35134600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35135000 0! #35135500 1! #35135600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35136000 0! #35136500 1! #35136600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35137000 0! #35137500 1! #35137600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35138000 0! #35138500 1! #35138600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35139000 0! #35139500 1! #35139600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35140000 0! #35140500 1! #35140600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35141000 0! #35141500 1! #35141600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35142000 0! #35142500 1! #35142600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35143000 0! #35143500 1! #35143600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35144000 0! #35144500 1! #35144600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35145000 0! #35145500 1! #35145600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35146000 0! #35146500 1! #35146600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35147000 0! #35147500 1! #35147600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35148000 0! #35148500 1! #35148600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35149000 0! #35149500 1! #35149600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35150000 0! #35150500 1! #35150600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35151000 0! #35151500 1! #35151600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35152000 0! #35152500 1! #35152600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35153000 0! #35153500 1! #35153600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35154000 0! #35154500 1! #35154600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35155000 0! #35155500 1! #35155600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35156000 0! #35156500 1! #35156600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35157000 0! #35157500 1! #35157600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35158000 0! #35158500 1! #35158600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35159000 0! #35159500 1! #35159600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35160000 0! #35160500 1! #35160600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35161000 0! #35161500 1! #35161600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35162000 0! #35162500 1! #35162600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35163000 0! #35163500 1! #35163600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35164000 0! #35164500 1! #35164600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35165000 0! #35165500 1! #35165600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35166000 0! #35166500 1! #35166600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35167000 0! #35167500 1! #35167600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #35167700 bx111111 ^ b10 g bx0xxxxxx c xe #35168000 0! #35168500 1! #35168600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35169000 0! #35169500 1! #35169600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35170000 0! #35170500 1! #35170600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35171000 0! #35171500 1! #35171600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35172000 0! #35172500 1! #35172600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35173000 0! #35173500 1! #35173600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35174000 0! #35174500 1! #35174600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35175000 0! #35175500 1! #35175600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35176000 0! #35176500 1! #35176600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35177000 0! #35177500 1! #35177600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35178000 0! #35178500 1! #35178600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35179000 0! #35179500 1! #35179600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35180000 0! #35180500 1! #35180600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35181000 0! #35181500 1! #35181600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35182000 0! #35182500 1! #35182600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35183000 0! #35183500 1! #35183600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35184000 0! #35184500 1! #35184600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35185000 0! #35185500 1! #35185600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35186000 0! #35186500 1! #35186600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35187000 0! #35187500 1! #35187600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35188000 0! #35188500 1! #35188600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35189000 0! #35189500 1! #35189600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35190000 0! #35190500 1! #35190600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35191000 0! #35191500 1! #35191600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35192000 0! #35192500 1! #35192600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35193000 0! #35193500 1! #35193600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35194000 0! #35194500 1! #35194600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35195000 0! #35195500 1! #35195600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35196000 0! #35196500 1! #35196600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35197000 0! #35197500 1! #35197600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35198000 0! #35198500 1! #35198600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35199000 0! #35199500 1! #35199600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35200000 0! #35200500 1! #35200600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35201000 0! #35201500 1! #35201600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35202000 0! #35202500 1! #35202600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35203000 0! #35203500 1! #35203600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35204000 0! #35204500 1! #35204600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35205000 0! #35205500 1! #35205600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35206000 0! #35206500 1! #35206600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35207000 0! #35207500 1! #35207600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35208000 0! #35208500 1! #35208600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35209000 0! #35209500 1! #35209600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35210000 0! #35210500 1! #35210600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35211000 0! #35211500 1! #35211600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35212000 0! #35212500 1! #35212600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35213000 0! #35213500 1! #35213600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35214000 0! #35214500 1! #35214600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35215000 0! #35215500 1! #35215600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35216000 0! #35216500 1! #35216600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35217000 0! #35217500 1! #35217600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35218000 0! #35218500 1! #35218600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35219000 0! #35219500 1! #35219600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35220000 0! #35220500 1! #35220600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35221000 0! #35221500 1! #35221600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35222000 0! #35222500 1! #35222600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35223000 0! #35223500 1! #35223600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35224000 0! #35224500 1! #35224600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35225000 0! #35225500 1! #35225600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35226000 0! #35226500 1! #35226600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35227000 0! #35227500 1! #35227600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35228000 0! #35228500 1! #35228600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35229000 0! #35229500 1! #35229600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35230000 0! #35230500 1! #35230600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35231000 0! #35231500 1! #35231600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35232000 0! #35232500 1! #35232600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35233000 0! #35233500 1! #35233600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35234000 0! #35234500 1! #35234600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35235000 0! #35235500 1! #35235600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35236000 0! #35236500 1! #35236600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35237000 0! #35237500 1! #35237600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35238000 0! #35238500 1! #35238600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35239000 0! #35239500 1! #35239600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35240000 0! #35240500 1! #35240600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35241000 0! #35241500 1! #35241600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35242000 0! #35242500 1! #35242600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35243000 0! #35243500 1! #35243600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35244000 0! #35244500 1! #35244600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35245000 0! #35245500 1! #35245600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35246000 0! #35246500 1! #35246600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35247000 0! #35247500 1! #35247600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35248000 0! #35248500 1! #35248600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35249000 0! #35249500 1! #35249600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35250000 0! #35250500 1! #35250600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35251000 0! #35251500 1! #35251600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35252000 0! #35252500 1! #35252600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35253000 0! #35253500 1! #35253600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35254000 0! #35254500 1! #35254600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35255000 0! #35255500 1! #35255600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35256000 0! #35256500 1! #35256600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35257000 0! #35257500 1! #35257600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35258000 0! #35258500 1! #35258600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35259000 0! #35259500 1! #35259600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35260000 0! #35260500 1! #35260600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35261000 0! #35261500 1! #35261600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35262000 0! #35262500 1! #35262600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35263000 0! #35263500 1! #35263600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35264000 0! #35264500 1! #35264600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35265000 0! #35265500 1! #35265600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35266000 0! #35266500 1! #35266600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35267000 0! #35267500 1! #35267600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35268000 0! #35268500 1! #35268600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35269000 0! #35269500 1! #35269600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #35269700 1j xj #35270000 0! #35270500 1! #35270600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35271000 0! #35271500 1! #35271600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35272000 0! #35272500 1! #35272600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35273000 0! #35273500 1! #35273600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35274000 0! #35274500 1! #35274600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35275000 0! #35275500 1! #35275600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35276000 0! #35276500 1! #35276600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35277000 0! #35277500 1! #35277600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35278000 0! #35278500 1! #35278600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35279000 0! #35279500 1! #35279600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35280000 0! #35280500 1! #35280600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35281000 0! #35281500 1! #35281600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35282000 0! #35282500 1! #35282600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35283000 0! #35283500 1! #35283600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35284000 0! #35284500 1! #35284600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35285000 0! #35285500 1! #35285600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35286000 0! #35286500 1! #35286600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35287000 0! #35287500 1! #35287600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35288000 0! #35288500 1! #35288600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35289000 0! #35289500 1! #35289600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35290000 0! #35290500 1! #35290600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35291000 0! #35291500 1! #35291600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35292000 0! #35292500 1! #35292600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35293000 0! #35293500 1! #35293600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35294000 0! #35294500 1! #35294600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35295000 0! #35295500 1! #35295600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35296000 0! #35296500 1! #35296600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35297000 0! #35297500 1! #35297600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35298000 0! #35298500 1! #35298600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35299000 0! #35299500 1! #35299600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35300000 0! #35300500 1! #35300600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35301000 0! #35301500 1! #35301600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35302000 0! #35302500 1! #35302600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35303000 0! #35303500 1! #35303600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35304000 0! #35304500 1! #35304600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35305000 0! #35305500 1! #35305600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35306000 0! #35306500 1! #35306600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35307000 0! #35307500 1! #35307600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35308000 0! #35308500 1! #35308600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35309000 0! #35309500 1! #35309600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35310000 0! #35310500 1! #35310600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35311000 0! #35311500 1! #35311600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35312000 0! #35312500 1! #35312600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35313000 0! #35313500 1! #35313600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35314000 0! #35314500 1! #35314600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35315000 0! #35315500 1! #35315600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35316000 0! #35316500 1! #35316600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35317000 0! #35317500 1! #35317600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35318000 0! #35318500 1! #35318600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35319000 0! #35319500 1! #35319600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35320000 0! #35320500 1! #35320600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35321000 0! #35321500 1! #35321600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35322000 0! #35322500 1! #35322600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35323000 0! #35323500 1! #35323600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35324000 0! #35324500 1! #35324600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35325000 0! #35325500 1! #35325600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35326000 0! #35326500 1! #35326600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35327000 0! #35327500 1! #35327600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35328000 0! #35328500 1! #35328600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35329000 0! #35329500 1! #35329600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35330000 0! #35330500 1! #35330600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35331000 0! #35331500 1! #35331600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35332000 0! #35332500 1! #35332600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35333000 0! #35333500 1! #35333600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35334000 0! #35334500 1! #35334600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35335000 0! #35335500 1! #35335600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35336000 0! #35336500 1! #35336600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35337000 0! #35337500 1! #35337600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35338000 0! #35338500 1! #35338600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35339000 0! #35339500 1! #35339600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35340000 0! #35340500 1! #35340600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35341000 0! #35341500 1! #35341600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35342000 0! #35342500 1! #35342600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35343000 0! #35343500 1! #35343600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35344000 0! #35344500 1! #35344600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35345000 0! #35345500 1! #35345600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35346000 0! #35346500 1! #35346600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35347000 0! #35347500 1! #35347600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35348000 0! #35348500 1! #35348600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35349000 0! #35349500 1! #35349600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35350000 0! #35350500 1! #35350600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35351000 0! #35351500 1! #35351600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35352000 0! #35352500 1! #35352600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35353000 0! #35353500 1! #35353600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35354000 0! #35354500 1! #35354600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35355000 0! #35355500 1! #35355600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35356000 0! #35356500 1! #35356600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35357000 0! #35357500 1! #35357600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35358000 0! #35358500 1! #35358600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35359000 0! #35359500 1! #35359600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35360000 0! #35360500 1! #35360600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35361000 0! #35361500 1! #35361600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35362000 0! #35362500 1! #35362600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35363000 0! #35363500 1! #35363600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35364000 0! #35364500 1! #35364600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35365000 0! #35365500 1! #35365600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35366000 0! #35366500 1! #35366600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35367000 0! #35367500 1! #35367600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35368000 0! #35368500 1! #35368600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35369000 0! #35369500 1! #35369600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35370000 0! #35370500 1! #35370600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35371000 0! #35371500 1! #35371600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35372000 0! #35372500 1! #35372600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35373000 0! #35373500 1! #35373600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35374000 0! #35374500 1! #35374600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35375000 0! #35375500 1! #35375600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35376000 0! #35376500 1! #35376600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35377000 0! #35377500 1! #35377600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35378000 0! #35378500 1! #35378600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35379000 0! #35379500 1! #35379600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35380000 0! #35380500 1! #35380600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35381000 0! #35381500 1! #35381600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35382000 0! #35382500 1! #35382600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35383000 0! #35383500 1! #35383600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35384000 0! #35384500 1! #35384600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35385000 0! #35385500 1! #35385600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35386000 0! #35386500 1! #35386600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35387000 0! #35387500 1! #35387600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35388000 0! #35388500 1! #35388600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35389000 0! #35389500 1! #35389600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35390000 0! #35390500 1! #35390600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35391000 0! #35391500 1! #35391600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35392000 0! #35392500 1! #35392600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35393000 0! #35393500 1! #35393600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35394000 0! #35394500 1! #35394600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35395000 0! #35395500 1! #35395600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35396000 0! #35396500 1! #35396600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35397000 0! #35397500 1! #35397600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35398000 0! #35398500 1! #35398600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35399000 0! #35399500 1! #35399600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35400000 0! #35400500 1! #35400600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35401000 0! #35401500 1! #35401600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35402000 0! #35402500 1! #35402600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35403000 0! #35403500 1! #35403600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35404000 0! #35404500 1! #35404600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35405000 0! #35405500 1! #35405600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35406000 0! #35406500 1! #35406600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35407000 0! #35407500 1! #35407600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35408000 0! #35408500 1! #35408600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35409000 0! #35409500 1! #35409600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35410000 0! #35410500 1! #35410600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35411000 0! #35411500 1! #35411600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35412000 0! #35412500 1! #35412600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35413000 0! #35413500 1! #35413600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35414000 0! #35414500 1! #35414600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35415000 0! #35415500 1! #35415600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35416000 0! #35416500 1! #35416600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35417000 0! #35417500 1! #35417600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35418000 0! #35418500 1! #35418600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35419000 0! #35419500 1! #35419600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35420000 0! #35420500 1! #35420600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35421000 0! #35421500 1! #35421600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35422000 0! #35422500 1! #35422600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #35422700 bx1111111 ^ b1 g b0xxxxxxx c 0e #35423000 0! #35423500 1! #35423600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35424000 0! #35424500 1! #35424600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35425000 0! #35425500 1! #35425600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35426000 0! #35426500 1! #35426600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35427000 0! #35427500 1! #35427600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35428000 0! #35428500 1! #35428600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35429000 0! #35429500 1! #35429600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35430000 0! #35430500 1! #35430600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35431000 0! #35431500 1! #35431600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35432000 0! #35432500 1! #35432600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35433000 0! #35433500 1! #35433600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35434000 0! #35434500 1! #35434600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35435000 0! #35435500 1! #35435600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35436000 0! #35436500 1! #35436600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35437000 0! #35437500 1! #35437600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35438000 0! #35438500 1! #35438600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35439000 0! #35439500 1! #35439600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35440000 0! #35440500 1! #35440600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35441000 0! #35441500 1! #35441600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35442000 0! #35442500 1! #35442600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35443000 0! #35443500 1! #35443600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35444000 0! #35444500 1! #35444600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35445000 0! #35445500 1! #35445600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35446000 0! #35446500 1! #35446600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35447000 0! #35447500 1! #35447600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35448000 0! #35448500 1! #35448600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35449000 0! #35449500 1! #35449600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35450000 0! #35450500 1! #35450600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35451000 0! #35451500 1! #35451600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35452000 0! #35452500 1! #35452600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35453000 0! #35453500 1! #35453600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35454000 0! #35454500 1! #35454600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35455000 0! #35455500 1! #35455600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35456000 0! #35456500 1! #35456600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35457000 0! #35457500 1! #35457600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35458000 0! #35458500 1! #35458600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35459000 0! #35459500 1! #35459600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35460000 0! #35460500 1! #35460600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35461000 0! #35461500 1! #35461600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35462000 0! #35462500 1! #35462600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35463000 0! #35463500 1! #35463600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35464000 0! #35464500 1! #35464600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35465000 0! #35465500 1! #35465600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35466000 0! #35466500 1! #35466600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35467000 0! #35467500 1! #35467600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35468000 0! #35468500 1! #35468600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35469000 0! #35469500 1! #35469600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35470000 0! #35470500 1! #35470600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35471000 0! #35471500 1! #35471600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35472000 0! #35472500 1! #35472600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35473000 0! #35473500 1! #35473600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35474000 0! #35474500 1! #35474600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35475000 0! #35475500 1! #35475600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35476000 0! #35476500 1! #35476600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35477000 0! #35477500 1! #35477600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35478000 0! #35478500 1! #35478600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35479000 0! #35479500 1! #35479600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35480000 0! #35480500 1! #35480600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35481000 0! #35481500 1! #35481600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35482000 0! #35482500 1! #35482600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35483000 0! #35483500 1! #35483600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35484000 0! #35484500 1! #35484600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35485000 0! #35485500 1! #35485600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35486000 0! #35486500 1! #35486600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35487000 0! #35487500 1! #35487600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35488000 0! #35488500 1! #35488600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35489000 0! #35489500 1! #35489600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35490000 0! #35490500 1! #35490600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35491000 0! #35491500 1! #35491600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35492000 0! #35492500 1! #35492600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35493000 0! #35493500 1! #35493600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35494000 0! #35494500 1! #35494600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35495000 0! #35495500 1! #35495600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35496000 0! #35496500 1! #35496600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35497000 0! #35497500 1! #35497600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35498000 0! #35498500 1! #35498600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35499000 0! #35499500 1! #35499600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35500000 0! #35500500 1! #35500600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35501000 0! #35501500 1! #35501600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35502000 0! #35502500 1! #35502600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35503000 0! #35503500 1! #35503600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35504000 0! #35504500 1! #35504600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35505000 0! #35505500 1! #35505600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35506000 0! #35506500 1! #35506600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35507000 0! #35507500 1! #35507600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35508000 0! #35508500 1! #35508600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35509000 0! #35509500 1! #35509600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35510000 0! #35510500 1! #35510600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35511000 0! #35511500 1! #35511600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35512000 0! #35512500 1! #35512600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35513000 0! #35513500 1! #35513600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35514000 0! #35514500 1! #35514600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35515000 0! #35515500 1! #35515600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35516000 0! #35516500 1! #35516600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35517000 0! #35517500 1! #35517600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35518000 0! #35518500 1! #35518600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35519000 0! #35519500 1! #35519600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35520000 0! #35520500 1! #35520600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35521000 0! #35521500 1! #35521600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35522000 0! #35522500 1! #35522600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35523000 0! #35523500 1! #35523600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35524000 0! #35524500 1! #35524600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #35524700 1j xj #35525000 0! #35525500 1! #35525600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35526000 0! #35526500 1! #35526600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35527000 0! #35527500 1! #35527600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35528000 0! #35528500 1! #35528600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35529000 0! #35529500 1! #35529600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35530000 0! #35530500 1! #35530600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35531000 0! #35531500 1! #35531600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35532000 0! #35532500 1! #35532600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35533000 0! #35533500 1! #35533600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35534000 0! #35534500 1! #35534600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35535000 0! #35535500 1! #35535600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35536000 0! #35536500 1! #35536600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35537000 0! #35537500 1! #35537600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35538000 0! #35538500 1! #35538600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35539000 0! #35539500 1! #35539600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35540000 0! #35540500 1! #35540600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35541000 0! #35541500 1! #35541600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35542000 0! #35542500 1! #35542600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35543000 0! #35543500 1! #35543600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35544000 0! #35544500 1! #35544600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35545000 0! #35545500 1! #35545600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35546000 0! #35546500 1! #35546600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35547000 0! #35547500 1! #35547600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35548000 0! #35548500 1! #35548600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35549000 0! #35549500 1! #35549600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35550000 0! #35550500 1! #35550600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35551000 0! #35551500 1! #35551600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35552000 0! #35552500 1! #35552600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35553000 0! #35553500 1! #35553600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35554000 0! #35554500 1! #35554600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35555000 0! #35555500 1! #35555600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35556000 0! #35556500 1! #35556600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35557000 0! #35557500 1! #35557600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35558000 0! #35558500 1! #35558600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35559000 0! #35559500 1! #35559600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35560000 0! #35560500 1! #35560600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35561000 0! #35561500 1! #35561600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35562000 0! #35562500 1! #35562600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35563000 0! #35563500 1! #35563600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35564000 0! #35564500 1! #35564600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35565000 0! #35565500 1! #35565600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35566000 0! #35566500 1! #35566600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35567000 0! #35567500 1! #35567600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35568000 0! #35568500 1! #35568600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35569000 0! #35569500 1! #35569600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35570000 0! #35570500 1! #35570600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35571000 0! #35571500 1! #35571600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35572000 0! #35572500 1! #35572600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35573000 0! #35573500 1! #35573600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35574000 0! #35574500 1! #35574600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35575000 0! #35575500 1! #35575600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35576000 0! #35576500 1! #35576600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35577000 0! #35577500 1! #35577600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35578000 0! #35578500 1! #35578600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35579000 0! #35579500 1! #35579600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35580000 0! #35580500 1! #35580600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35581000 0! #35581500 1! #35581600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35582000 0! #35582500 1! #35582600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35583000 0! #35583500 1! #35583600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35584000 0! #35584500 1! #35584600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35585000 0! #35585500 1! #35585600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35586000 0! #35586500 1! #35586600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35587000 0! #35587500 1! #35587600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35588000 0! #35588500 1! #35588600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35589000 0! #35589500 1! #35589600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35590000 0! #35590500 1! #35590600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35591000 0! #35591500 1! #35591600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35592000 0! #35592500 1! #35592600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35593000 0! #35593500 1! #35593600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35594000 0! #35594500 1! #35594600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35595000 0! #35595500 1! #35595600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35596000 0! #35596500 1! #35596600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35597000 0! #35597500 1! #35597600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35598000 0! #35598500 1! #35598600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35599000 0! #35599500 1! #35599600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35600000 0! #35600500 1! #35600600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35601000 0! #35601500 1! #35601600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35602000 0! #35602500 1! #35602600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35603000 0! #35603500 1! #35603600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35604000 0! #35604500 1! #35604600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35605000 0! #35605500 1! #35605600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35606000 0! #35606500 1! #35606600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35607000 0! #35607500 1! #35607600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35608000 0! #35608500 1! #35608600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35609000 0! #35609500 1! #35609600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35610000 0! #35610500 1! #35610600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35611000 0! #35611500 1! #35611600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35612000 0! #35612500 1! #35612600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35613000 0! #35613500 1! #35613600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35614000 0! #35614500 1! #35614600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35615000 0! #35615500 1! #35615600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35616000 0! #35616500 1! #35616600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35617000 0! #35617500 1! #35617600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35618000 0! #35618500 1! #35618600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35619000 0! #35619500 1! #35619600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35620000 0! #35620500 1! #35620600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35621000 0! #35621500 1! #35621600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35622000 0! #35622500 1! #35622600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35623000 0! #35623500 1! #35623600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35624000 0! #35624500 1! #35624600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35625000 0! #35625500 1! #35625600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35626000 0! #35626500 1! #35626600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35627000 0! #35627500 1! #35627600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35628000 0! #35628500 1! #35628600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35629000 0! #35629500 1! #35629600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35630000 0! #35630500 1! #35630600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35631000 0! #35631500 1! #35631600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35632000 0! #35632500 1! #35632600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35633000 0! #35633500 1! #35633600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35634000 0! #35634500 1! #35634600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35635000 0! #35635500 1! #35635600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35636000 0! #35636500 1! #35636600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35637000 0! #35637500 1! #35637600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35638000 0! #35638500 1! #35638600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35639000 0! #35639500 1! #35639600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35640000 0! #35640500 1! #35640600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35641000 0! #35641500 1! #35641600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35642000 0! #35642500 1! #35642600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35643000 0! #35643500 1! #35643600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35644000 0! #35644500 1! #35644600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35645000 0! #35645500 1! #35645600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35646000 0! #35646500 1! #35646600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35647000 0! #35647500 1! #35647600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35648000 0! #35648500 1! #35648600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35649000 0! #35649500 1! #35649600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35650000 0! #35650500 1! #35650600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35651000 0! #35651500 1! #35651600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35652000 0! #35652500 1! #35652600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35653000 0! #35653500 1! #35653600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35654000 0! #35654500 1! #35654600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35655000 0! #35655500 1! #35655600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35656000 0! #35656500 1! #35656600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35657000 0! #35657500 1! #35657600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35658000 0! #35658500 1! #35658600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35659000 0! #35659500 1! #35659600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35660000 0! #35660500 1! #35660600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35661000 0! #35661500 1! #35661600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35662000 0! #35662500 1! #35662600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35663000 0! #35663500 1! #35663600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35664000 0! #35664500 1! #35664600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35665000 0! #35665500 1! #35665600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35666000 0! #35666500 1! #35666600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35667000 0! #35667500 1! #35667600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35668000 0! #35668500 1! #35668600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35669000 0! #35669500 1! #35669600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35670000 0! #35670500 1! #35670600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35671000 0! #35671500 1! #35671600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35672000 0! #35672500 1! #35672600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35673000 0! #35673500 1! #35673600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35674000 0! #35674500 1! #35674600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35675000 0! #35675500 1! #35675600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35676000 0! #35676500 1! #35676600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35677000 0! #35677500 1! #35677600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #35677700 b11111111 ^ b0 g bx c xe 1h #35678000 0! #35678500 1! #35678600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35679000 0! #35679500 1! #35679600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35680000 0! #35680500 1! #35680600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35681000 0! #35681500 1! #35681600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35682000 0! #35682500 1! #35682600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35683000 0! #35683500 1! #35683600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35684000 0! #35684500 1! #35684600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35685000 0! #35685500 1! #35685600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35686000 0! #35686500 1! #35686600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35687000 0! #35687500 1! #35687600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35688000 0! #35688500 1! #35688600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35689000 0! #35689500 1! #35689600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35690000 0! #35690500 1! #35690600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35691000 0! #35691500 1! #35691600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35692000 0! #35692500 1! #35692600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35693000 0! #35693500 1! #35693600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35694000 0! #35694500 1! #35694600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35695000 0! #35695500 1! #35695600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35696000 0! #35696500 1! #35696600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35697000 0! #35697500 1! #35697600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35698000 0! #35698500 1! #35698600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35699000 0! #35699500 1! #35699600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35700000 0! #35700500 1! #35700600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35701000 0! #35701500 1! #35701600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35702000 0! #35702500 1! #35702600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35703000 0! #35703500 1! #35703600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35704000 0! #35704500 1! #35704600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35705000 0! #35705500 1! #35705600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35706000 0! #35706500 1! #35706600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35707000 0! #35707500 1! #35707600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35708000 0! #35708500 1! #35708600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35709000 0! #35709500 1! #35709600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35710000 0! #35710500 1! #35710600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35711000 0! #35711500 1! #35711600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35712000 0! #35712500 1! #35712600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35713000 0! #35713500 1! #35713600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35714000 0! #35714500 1! #35714600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35715000 0! #35715500 1! #35715600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35716000 0! #35716500 1! #35716600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35717000 0! #35717500 1! #35717600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35718000 0! #35718500 1! #35718600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35719000 0! #35719500 1! #35719600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35720000 0! #35720500 1! #35720600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35721000 0! #35721500 1! #35721600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35722000 0! #35722500 1! #35722600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35723000 0! #35723500 1! #35723600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35724000 0! #35724500 1! #35724600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35725000 0! #35725500 1! #35725600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35726000 0! #35726500 1! #35726600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35727000 0! #35727500 1! #35727600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35728000 0! #35728500 1! #35728600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35729000 0! #35729500 1! #35729600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35730000 0! #35730500 1! #35730600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35731000 0! #35731500 1! #35731600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35732000 0! #35732500 1! #35732600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35733000 0! #35733500 1! #35733600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35734000 0! #35734500 1! #35734600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35735000 0! #35735500 1! #35735600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35736000 0! #35736500 1! #35736600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35737000 0! #35737500 1! #35737600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35738000 0! #35738500 1! #35738600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35739000 0! #35739500 1! #35739600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35740000 0! #35740500 1! #35740600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35741000 0! #35741500 1! #35741600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35742000 0! #35742500 1! #35742600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35743000 0! #35743500 1! #35743600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35744000 0! #35744500 1! #35744600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35745000 0! #35745500 1! #35745600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35746000 0! #35746500 1! #35746600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35747000 0! #35747500 1! #35747600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35748000 0! #35748500 1! #35748600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35749000 0! #35749500 1! #35749600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35750000 0! #35750500 1! #35750600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35751000 0! #35751500 1! #35751600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35752000 0! #35752500 1! #35752600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35753000 0! #35753500 1! #35753600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35754000 0! #35754500 1! #35754600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35755000 0! #35755500 1! #35755600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35756000 0! #35756500 1! #35756600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35757000 0! #35757500 1! #35757600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35758000 0! #35758500 1! #35758600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35759000 0! #35759500 1! #35759600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35760000 0! #35760500 1! #35760600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35761000 0! #35761500 1! #35761600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35762000 0! #35762500 1! #35762600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35763000 0! #35763500 1! #35763600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35764000 0! #35764500 1! #35764600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35765000 0! #35765500 1! #35765600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35766000 0! #35766500 1! #35766600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35767000 0! #35767500 1! #35767600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35768000 0! #35768500 1! #35768600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35769000 0! #35769500 1! #35769600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35770000 0! #35770500 1! #35770600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35771000 0! #35771500 1! #35771600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35772000 0! #35772500 1! #35772600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35773000 0! #35773500 1! #35773600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35774000 0! #35774500 1! #35774600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35775000 0! #35775500 1! #35775600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35776000 0! #35776500 1! #35776600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35777000 0! #35777500 1! #35777600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35778000 0! #35778500 1! #35778600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35779000 0! #35779500 1! #35779600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #35779700 1j b101 q 1O #35779800 b101 ] #35779900 bx ^ #35780000 0! #35780500 1! #35780600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35781000 0! #35781500 1! #35781600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35782000 0! #35782500 1! #35782600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35783000 0! #35783500 1! #35783600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35784000 0! #35784500 1! #35784600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35785000 0! #35785500 1! #35785600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35786000 0! #35786500 1! #35786600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35787000 0! #35787500 1! #35787600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35788000 0! #35788500 1! #35788600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35789000 0! #35789500 1! #35789600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35790000 0! #35790500 1! #35790600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35791000 0! #35791500 1! #35791600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35792000 0! #35792500 1! #35792600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35793000 0! #35793500 1! #35793600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35794000 0! #35794500 1! #35794600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35795000 0! #35795500 1! #35795600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35796000 0! #35796500 1! #35796600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35797000 0! #35797500 1! #35797600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35798000 0! #35798500 1! #35798600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35799000 0! #35799500 1! #35799600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35800000 0! #35800500 1! #35800600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35801000 0! #35801500 1! #35801600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35802000 0! #35802500 1! #35802600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35803000 0! #35803500 1! #35803600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35804000 0! #35804500 1! #35804600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35805000 0! #35805500 1! #35805600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35806000 0! #35806500 1! #35806600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35807000 0! #35807500 1! #35807600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35808000 0! #35808500 1! #35808600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35809000 0! #35809500 1! #35809600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35810000 0! #35810500 1! #35810600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35811000 0! #35811500 1! #35811600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35812000 0! #35812500 1! #35812600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35813000 0! #35813500 1! #35813600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35814000 0! #35814500 1! #35814600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35815000 0! #35815500 1! #35815600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35816000 0! #35816500 1! #35816600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35817000 0! #35817500 1! #35817600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35818000 0! #35818500 1! #35818600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35819000 0! #35819500 1! #35819600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35820000 0! #35820500 1! #35820600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35821000 0! #35821500 1! #35821600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35822000 0! #35822500 1! #35822600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35823000 0! #35823500 1! #35823600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35824000 0! #35824500 1! #35824600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35825000 0! #35825500 1! #35825600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35826000 0! #35826500 1! #35826600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35827000 0! #35827500 1! #35827600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35828000 0! #35828500 1! #35828600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35829000 0! #35829500 1! #35829600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35830000 0! #35830500 1! #35830600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35831000 0! #35831500 1! #35831600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35832000 0! #35832500 1! #35832600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35833000 0! #35833500 1! #35833600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35834000 0! #35834500 1! #35834600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35835000 0! #35835500 1! #35835600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35836000 0! #35836500 1! #35836600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35837000 0! #35837500 1! #35837600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35838000 0! #35838500 1! #35838600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35839000 0! #35839500 1! #35839600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35840000 0! #35840500 1! #35840600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35841000 0! #35841500 1! #35841600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35842000 0! #35842500 1! #35842600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35843000 0! #35843500 1! #35843600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35844000 0! #35844500 1! #35844600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35845000 0! #35845500 1! #35845600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35846000 0! #35846500 1! #35846600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35847000 0! #35847500 1! #35847600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35848000 0! #35848500 1! #35848600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35849000 0! #35849500 1! #35849600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35850000 0! #35850500 1! #35850600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35851000 0! #35851500 1! #35851600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35852000 0! #35852500 1! #35852600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35853000 0! #35853500 1! #35853600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35854000 0! #35854500 1! #35854600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35855000 0! #35855500 1! #35855600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35856000 0! #35856500 1! #35856600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35857000 0! #35857500 1! #35857600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35858000 0! #35858500 1! #35858600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35859000 0! #35859500 1! #35859600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35860000 0! #35860500 1! #35860600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35861000 0! #35861500 1! #35861600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35862000 0! #35862500 1! #35862600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35863000 0! #35863500 1! #35863600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35864000 0! #35864500 1! #35864600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35865000 0! #35865500 1! #35865600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35866000 0! #35866500 1! #35866600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35867000 0! #35867500 1! #35867600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35868000 0! #35868500 1! #35868600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35869000 0! #35869500 1! #35869600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35870000 0! #35870500 1! #35870600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35871000 0! #35871500 1! #35871600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35872000 0! #35872500 1! #35872600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35873000 0! #35873500 1! #35873600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35874000 0! #35874500 1! #35874600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35875000 0! #35875500 1! #35875600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35876000 0! #35876500 1! #35876600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35877000 0! #35877500 1! #35877600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35878000 0! #35878500 1! #35878600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35879000 0! #35879500 1! #35879600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35880000 0! #35880500 1! #35880600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35881000 0! #35881500 1! #35881600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35882000 0! #35882500 1! #35882600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35883000 0! #35883500 1! #35883600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35884000 0! #35884500 1! #35884600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35885000 0! #35885500 1! #35885600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35886000 0! #35886500 1! #35886600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35887000 0! #35887500 1! #35887600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35888000 0! #35888500 1! #35888600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35889000 0! #35889500 1! #35889600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35890000 0! #35890500 1! #35890600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35891000 0! #35891500 1! #35891600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35892000 0! #35892500 1! #35892600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35893000 0! #35893500 1! #35893600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35894000 0! #35894500 1! #35894600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35895000 0! #35895500 1! #35895600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35896000 0! #35896500 1! #35896600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35897000 0! #35897500 1! #35897600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35898000 0! #35898500 1! #35898600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35899000 0! #35899500 1! #35899600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35900000 0! #35900500 1! #35900600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35901000 0! #35901500 1! #35901600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35902000 0! #35902500 1! #35902600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35903000 0! #35903500 1! #35903600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35904000 0! #35904500 1! #35904600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35905000 0! #35905500 1! #35905600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35906000 0! #35906500 1! #35906600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35907000 0! #35907500 1! #35907600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35908000 0! #35908500 1! #35908600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35909000 0! #35909500 1! #35909600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35910000 0! #35910500 1! #35910600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35911000 0! #35911500 1! #35911600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35912000 0! #35912500 1! #35912600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35913000 0! #35913500 1! #35913600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35914000 0! #35914500 1! #35914600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35915000 0! #35915500 1! #35915600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35916000 0! #35916500 1! #35916600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35917000 0! #35917500 1! #35917600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35918000 0! #35918500 1! #35918600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35919000 0! #35919500 1! #35919600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35920000 0! #35920500 1! #35920600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35921000 0! #35921500 1! #35921600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35922000 0! #35922500 1! #35922600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35923000 0! #35923500 1! #35923600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35924000 0! #35924500 1! #35924600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35925000 0! #35925500 1! #35925600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35926000 0! #35926500 1! #35926600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35927000 0! #35927500 1! #35927600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35928000 0! #35928500 1! #35928600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35929000 0! #35929500 1! #35929600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35930000 0! #35930500 1! #35930600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35931000 0! #35931500 1! #35931600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35932000 0! #35932500 1! #35932600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #35932700 b111 g bx1 c 0h #35933000 0! #35933500 1! #35933600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35934000 0! #35934500 1! #35934600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35935000 0! #35935500 1! #35935600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35936000 0! #35936500 1! #35936600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35937000 0! #35937500 1! #35937600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35938000 0! #35938500 1! #35938600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35939000 0! #35939500 1! #35939600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35940000 0! #35940500 1! #35940600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35941000 0! #35941500 1! #35941600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35942000 0! #35942500 1! #35942600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35943000 0! #35943500 1! #35943600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35944000 0! #35944500 1! #35944600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35945000 0! #35945500 1! #35945600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35946000 0! #35946500 1! #35946600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35947000 0! #35947500 1! #35947600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35948000 0! #35948500 1! #35948600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35949000 0! #35949500 1! #35949600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35950000 0! #35950500 1! #35950600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35951000 0! #35951500 1! #35951600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35952000 0! #35952500 1! #35952600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35953000 0! #35953500 1! #35953600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35954000 0! #35954500 1! #35954600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35955000 0! #35955500 1! #35955600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35956000 0! #35956500 1! #35956600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35957000 0! #35957500 1! #35957600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35958000 0! #35958500 1! #35958600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35959000 0! #35959500 1! #35959600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35960000 0! #35960500 1! #35960600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35961000 0! #35961500 1! #35961600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35962000 0! #35962500 1! #35962600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35963000 0! #35963500 1! #35963600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35964000 0! #35964500 1! #35964600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35965000 0! #35965500 1! #35965600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35966000 0! #35966500 1! #35966600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35967000 0! #35967500 1! #35967600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35968000 0! #35968500 1! #35968600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35969000 0! #35969500 1! #35969600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35970000 0! #35970500 1! #35970600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35971000 0! #35971500 1! #35971600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35972000 0! #35972500 1! #35972600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35973000 0! #35973500 1! #35973600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35974000 0! #35974500 1! #35974600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35975000 0! #35975500 1! #35975600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35976000 0! #35976500 1! #35976600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35977000 0! #35977500 1! #35977600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35978000 0! #35978500 1! #35978600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35979000 0! #35979500 1! #35979600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35980000 0! #35980500 1! #35980600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35981000 0! #35981500 1! #35981600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35982000 0! #35982500 1! #35982600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35983000 0! #35983500 1! #35983600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35984000 0! #35984500 1! #35984600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35985000 0! #35985500 1! #35985600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35986000 0! #35986500 1! #35986600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35987000 0! #35987500 1! #35987600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35988000 0! #35988500 1! #35988600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35989000 0! #35989500 1! #35989600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35990000 0! #35990500 1! #35990600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35991000 0! #35991500 1! #35991600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35992000 0! #35992500 1! #35992600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35993000 0! #35993500 1! #35993600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35994000 0! #35994500 1! #35994600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35995000 0! #35995500 1! #35995600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35996000 0! #35996500 1! #35996600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35997000 0! #35997500 1! #35997600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #35998000 0! #35998500 1! #35998600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #35999000 0! #35999500 1! #35999600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36000000 0! #36000500 1! #36000600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36001000 0! #36001500 1! #36001600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36002000 0! #36002500 1! #36002600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36003000 0! #36003500 1! #36003600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36004000 0! #36004500 1! #36004600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36005000 0! #36005500 1! #36005600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36006000 0! #36006500 1! #36006600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36007000 0! #36007500 1! #36007600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36008000 0! #36008500 1! #36008600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36009000 0! #36009500 1! #36009600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36010000 0! #36010500 1! #36010600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36011000 0! #36011500 1! #36011600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36012000 0! #36012500 1! #36012600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36013000 0! #36013500 1! #36013600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36014000 0! #36014500 1! #36014600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36015000 0! #36015500 1! #36015600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36016000 0! #36016500 1! #36016600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36017000 0! #36017500 1! #36017600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36018000 0! #36018500 1! #36018600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36019000 0! #36019500 1! #36019600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36020000 0! #36020500 1! #36020600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36021000 0! #36021500 1! #36021600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36022000 0! #36022500 1! #36022600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36023000 0! #36023500 1! #36023600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36024000 0! #36024500 1! #36024600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36025000 0! #36025500 1! #36025600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36026000 0! #36026500 1! #36026600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36027000 0! #36027500 1! #36027600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36028000 0! #36028500 1! #36028600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36029000 0! #36029500 1! #36029600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36030000 0! #36030500 1! #36030600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36031000 0! #36031500 1! #36031600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36032000 0! #36032500 1! #36032600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36033000 0! #36033500 1! #36033600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36034000 0! #36034500 1! #36034600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #36034700 1i b0 q #36035000 0! #36035500 1! #36035600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36036000 0! #36036500 1! #36036600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36037000 0! #36037500 1! #36037600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H bx000001 C #36038000 0! #36038500 1! #36038600 bx000001 J xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36039000 0! #36039500 1! #36039600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 0@ 1A 1B bx C 1H #36040000 0! #36040500 1! #36040600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36041000 0! #36041500 1! #36041600 1E 1F 1G b10100000 D 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 0@ 1A 1B 1H #36042000 0! #36042500 1! #36042600 xE bx D x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36042700 1E 1F 1G b10010000 D 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B bx000001 C 1H #36043000 0! #36043500 1! #36043600 xE bx D x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36044000 0! #36044500 1! #36044600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H bx000011 C #36045000 0! #36045500 1! #36045600 bx000011 J xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36046000 0! #36046500 1! #36046600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36047000 0! #36047500 1! #36047600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36048000 0! #36048500 1! #36048600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36049000 0! #36049500 1! #36049600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36050000 0! #36050500 1! #36050600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36051000 0! #36051500 1! #36051600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36052000 0! #36052500 1! #36052600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36053000 0! #36053500 1! #36053600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36054000 0! #36054500 1! #36054600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36055000 0! #36055500 1! #36055600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36056000 0! #36056500 1! #36056600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36057000 0! #36057500 1! #36057600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36058000 0! #36058500 1! #36058600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36059000 0! #36059500 1! #36059600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36060000 0! #36060500 1! #36060600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36061000 0! #36061500 1! #36061600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36062000 0! #36062500 1! #36062600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36063000 0! #36063500 1! #36063600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36064000 0! #36064500 1! #36064600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36065000 0! #36065500 1! #36065600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36066000 0! #36066500 1! #36066600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36067000 0! #36067500 1! #36067600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36068000 0! #36068500 1! #36068600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36069000 0! #36069500 1! #36069600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36070000 0! #36070500 1! #36070600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36071000 0! #36071500 1! #36071600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36072000 0! #36072500 1! #36072600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36073000 0! #36073500 1! #36073600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36074000 0! #36074500 1! #36074600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36075000 0! #36075500 1! #36075600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36076000 0! #36076500 1! #36076600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36077000 0! #36077500 1! #36077600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36078000 0! #36078500 1! #36078600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36079000 0! #36079500 1! #36079600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36080000 0! #36080500 1! #36080600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36081000 0! #36081500 1! #36081600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36082000 0! #36082500 1! #36082600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36083000 0! #36083500 1! #36083600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36084000 0! #36084500 1! #36084600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36085000 0! #36085500 1! #36085600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36086000 0! #36086500 1! #36086600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36087000 0! #36087500 1! #36087600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36088000 0! #36088500 1! #36088600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36089000 0! #36089500 1! #36089600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36090000 0! #36090500 1! #36090600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36091000 0! #36091500 1! #36091600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36092000 0! #36092500 1! #36092600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36093000 0! #36093500 1! #36093600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36094000 0! #36094500 1! #36094600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36095000 0! #36095500 1! #36095600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36096000 0! #36096500 1! #36096600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36097000 0! #36097500 1! #36097600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36098000 0! #36098500 1! #36098600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36099000 0! #36099500 1! #36099600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36100000 0! #36100500 1! #36100600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36101000 0! #36101500 1! #36101600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36102000 0! #36102500 1! #36102600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36103000 0! #36103500 1! #36103600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36104000 0! #36104500 1! #36104600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36105000 0! #36105500 1! #36105600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36106000 0! #36106500 1! #36106600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36107000 0! #36107500 1! #36107600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36108000 0! #36108500 1! #36108600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36109000 0! #36109500 1! #36109600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36110000 0! #36110500 1! #36110600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36111000 0! #36111500 1! #36111600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36112000 0! #36112500 1! #36112600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36113000 0! #36113500 1! #36113600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36114000 0! #36114500 1! #36114600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36115000 0! #36115500 1! #36115600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36116000 0! #36116500 1! #36116600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36117000 0! #36117500 1! #36117600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36118000 0! #36118500 1! #36118600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36119000 0! #36119500 1! #36119600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36120000 0! #36120500 1! #36120600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36121000 0! #36121500 1! #36121600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36122000 0! #36122500 1! #36122600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36123000 0! #36123500 1! #36123600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36124000 0! #36124500 1! #36124600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36125000 0! #36125500 1! #36125600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36126000 0! #36126500 1! #36126600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36127000 0! #36127500 1! #36127600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36128000 0! #36128500 1! #36128600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36129000 0! #36129500 1! #36129600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36130000 0! #36130500 1! #36130600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36131000 0! #36131500 1! #36131600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36132000 0! #36132500 1! #36132600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36133000 0! #36133500 1! #36133600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36134000 0! #36134500 1! #36134600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36135000 0! #36135500 1! #36135600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36136000 0! #36136500 1! #36136600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36137000 0! #36137500 1! #36137600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36138000 0! #36138500 1! #36138600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36139000 0! #36139500 1! #36139600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36140000 0! #36140500 1! #36140600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36141000 0! #36141500 1! #36141600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36142000 0! #36142500 1! #36142600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36143000 0! #36143500 1! #36143600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36144000 0! #36144500 1! #36144600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36145000 0! #36145500 1! #36145600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36146000 0! #36146500 1! #36146600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36147000 0! #36147500 1! #36147600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36148000 0! #36148500 1! #36148600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36149000 0! #36149500 1! #36149600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36150000 0! #36150500 1! #36150600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36151000 0! #36151500 1! #36151600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36152000 0! #36152500 1! #36152600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36153000 0! #36153500 1! #36153600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36154000 0! #36154500 1! #36154600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36155000 0! #36155500 1! #36155600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36156000 0! #36156500 1! #36156600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36157000 0! #36157500 1! #36157600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36158000 0! #36158500 1! #36158600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36159000 0! #36159500 1! #36159600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36160000 0! #36160500 1! #36160600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36161000 0! #36161500 1! #36161600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36162000 0! #36162500 1! #36162600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36163000 0! #36163500 1! #36163600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36164000 0! #36164500 1! #36164600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36165000 0! #36165500 1! #36165600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36166000 0! #36166500 1! #36166600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36167000 0! #36167500 1! #36167600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36168000 0! #36168500 1! #36168600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36169000 0! #36169500 1! #36169600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36170000 0! #36170500 1! #36170600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36171000 0! #36171500 1! #36171600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36172000 0! #36172500 1! #36172600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36173000 0! #36173500 1! #36173600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36174000 0! #36174500 1! #36174600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36175000 0! #36175500 1! #36175600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36176000 0! #36176500 1! #36176600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36177000 0! #36177500 1! #36177600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36178000 0! #36178500 1! #36178600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36179000 0! #36179500 1! #36179600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36180000 0! #36180500 1! #36180600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36181000 0! #36181500 1! #36181600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36182000 0! #36182500 1! #36182600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36183000 0! #36183500 1! #36183600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36184000 0! #36184500 1! #36184600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36185000 0! #36185500 1! #36185600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36186000 0! #36186500 1! #36186600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36187000 0! #36187500 1! #36187600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #36187700 bx1 ^ bx11 c 0e #36188000 0! #36188500 1! #36188600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36189000 0! #36189500 1! #36189600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36190000 0! #36190500 1! #36190600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36191000 0! #36191500 1! #36191600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36192000 0! #36192500 1! #36192600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36193000 0! #36193500 1! #36193600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36194000 0! #36194500 1! #36194600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36195000 0! #36195500 1! #36195600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36196000 0! #36196500 1! #36196600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36197000 0! #36197500 1! #36197600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36198000 0! #36198500 1! #36198600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36199000 0! #36199500 1! #36199600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36200000 0! #36200500 1! #36200600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36201000 0! #36201500 1! #36201600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36202000 0! #36202500 1! #36202600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36203000 0! #36203500 1! #36203600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36204000 0! #36204500 1! #36204600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36205000 0! #36205500 1! #36205600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36206000 0! #36206500 1! #36206600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36207000 0! #36207500 1! #36207600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36208000 0! #36208500 1! #36208600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36209000 0! #36209500 1! #36209600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36210000 0! #36210500 1! #36210600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36211000 0! #36211500 1! #36211600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36212000 0! #36212500 1! #36212600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36213000 0! #36213500 1! #36213600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36214000 0! #36214500 1! #36214600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36215000 0! #36215500 1! #36215600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36216000 0! #36216500 1! #36216600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36217000 0! #36217500 1! #36217600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36218000 0! #36218500 1! #36218600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36219000 0! #36219500 1! #36219600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36220000 0! #36220500 1! #36220600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36221000 0! #36221500 1! #36221600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36222000 0! #36222500 1! #36222600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36223000 0! #36223500 1! #36223600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36224000 0! #36224500 1! #36224600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36225000 0! #36225500 1! #36225600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36226000 0! #36226500 1! #36226600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36227000 0! #36227500 1! #36227600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36228000 0! #36228500 1! #36228600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36229000 0! #36229500 1! #36229600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36230000 0! #36230500 1! #36230600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36231000 0! #36231500 1! #36231600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36232000 0! #36232500 1! #36232600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36233000 0! #36233500 1! #36233600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36234000 0! #36234500 1! #36234600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36235000 0! #36235500 1! #36235600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36236000 0! #36236500 1! #36236600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36237000 0! #36237500 1! #36237600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36238000 0! #36238500 1! #36238600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0Q 0O #36238700 1_ 1f #36239000 0! #36239500 1! #36239600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36240000 0! #36240500 1! #36240600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36241000 0! #36241500 1! bx1000011 C #36241600 bx1000011 J xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36242000 0! #36242500 1! #36242600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36243000 0! #36243500 1! #36243600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36244000 0! #36244500 1! #36244600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36245000 0! #36245500 1! #36245600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36246000 0! #36246500 1! #36246600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36247000 0! #36247500 1! #36247600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36248000 0! #36248500 1! #36248600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36249000 0! #36249500 1! #36249600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36250000 0! #36250500 1! #36250600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36251000 0! #36251500 1! #36251600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36252000 0! #36252500 1! #36252600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36253000 0! #36253500 1! #36253600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36254000 0! #36254500 1! #36254600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36255000 0! #36255500 1! #36255600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36256000 0! #36256500 1! #36256600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36257000 0! #36257500 1! #36257600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36258000 0! #36258500 1! #36258600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36259000 0! #36259500 1! #36259600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36260000 0! #36260500 1! #36260600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36261000 0! #36261500 1! #36261600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36262000 0! #36262500 1! #36262600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36263000 0! #36263500 1! #36263600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36264000 0! #36264500 1! #36264600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36265000 0! #36265500 1! #36265600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36266000 0! #36266500 1! #36266600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36267000 0! #36267500 1! #36267600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36268000 0! #36268500 1! #36268600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36269000 0! #36269500 1! #36269600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36270000 0! #36270500 1! #36270600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36271000 0! #36271500 1! #36271600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36272000 0! #36272500 1! #36272600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36273000 0! #36273500 1! #36273600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36274000 0! #36274500 1! #36274600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36275000 0! #36275500 1! #36275600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36276000 0! #36276500 1! #36276600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36277000 0! #36277500 1! #36277600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36278000 0! #36278500 1! #36278600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36279000 0! #36279500 1! #36279600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36280000 0! #36280500 1! #36280600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36281000 0! #36281500 1! #36281600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36282000 0! #36282500 1! #36282600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36283000 0! #36283500 1! #36283600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36284000 0! #36284500 1! #36284600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36285000 0! #36285500 1! #36285600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36286000 0! #36286500 1! #36286600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36287000 0! #36287500 1! #36287600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36288000 0! #36288500 1! #36288600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36289000 0! #36289500 1! #36289600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #36290000 0! #36290500 1! #36290600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36291000 0! #36291500 1! #36291600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36292000 0! #36292500 1! #36292600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36293000 0! #36293500 1! #36293600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36294000 0! #36294500 1! #36294600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36295000 0! #36295500 1! #36295600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36296000 0! #36296500 1! #36296600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36297000 0! #36297500 1! #36297600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36298000 0! #36298500 1! #36298600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36299000 0! #36299500 1! #36299600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36300000 0! #36300500 1! #36300600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36301000 0! #36301500 1! #36301600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36302000 0! #36302500 1! #36302600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36303000 0! #36303500 1! #36303600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36304000 0! #36304500 1! #36304600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36305000 0! #36305500 1! #36305600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36306000 0! #36306500 1! #36306600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36307000 0! #36307500 1! #36307600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36308000 0! #36308500 1! #36308600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36309000 0! #36309500 1! #36309600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36310000 0! #36310500 1! #36310600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36311000 0! #36311500 1! #36311600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36312000 0! #36312500 1! #36312600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36313000 0! #36313500 1! #36313600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36314000 0! #36314500 1! #36314600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36315000 0! #36315500 1! #36315600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36316000 0! #36316500 1! #36316600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36317000 0! #36317500 1! #36317600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36318000 0! #36318500 1! #36318600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36319000 0! #36319500 1! #36319600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36320000 0! #36320500 1! #36320600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36321000 0! #36321500 1! #36321600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36322000 0! #36322500 1! #36322600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36323000 0! #36323500 1! #36323600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36324000 0! #36324500 1! #36324600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36325000 0! #36325500 1! #36325600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36326000 0! #36326500 1! #36326600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36327000 0! #36327500 1! #36327600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36328000 0! #36328500 1! #36328600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36329000 0! #36329500 1! #36329600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36330000 0! #36330500 1! #36330600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36331000 0! #36331500 1! #36331600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36332000 0! #36332500 1! #36332600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36333000 0! #36333500 1! #36333600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36334000 0! #36334500 1! #36334600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36335000 0! #36335500 1! #36335600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36336000 0! #36336500 1! #36336600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36337000 0! #36337500 1! #36337600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36338000 0! #36338500 1! #36338600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36339000 0! #36339500 1! #36339600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36340000 0! #36340500 1! #36340600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36341000 0! #36341500 1! #36341600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36342000 0! #36342500 1! #36342600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36343000 0! #36343500 1! #36343600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36344000 0! #36344500 1! #36344600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36345000 0! #36345500 1! #36345600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36346000 0! #36346500 1! #36346600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36347000 0! #36347500 1! #36347600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36348000 0! #36348500 1! #36348600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36349000 0! #36349500 1! #36349600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36350000 0! #36350500 1! #36350600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36351000 0! #36351500 1! #36351600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36352000 0! #36352500 1! #36352600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36353000 0! #36353500 1! #36353600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36354000 0! #36354500 1! #36354600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36355000 0! #36355500 1! #36355600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36356000 0! #36356500 1! #36356600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36357000 0! #36357500 1! #36357600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36358000 0! #36358500 1! #36358600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36359000 0! #36359500 1! #36359600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36360000 0! #36360500 1! #36360600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36361000 0! #36361500 1! #36361600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36362000 0! #36362500 1! #36362600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36363000 0! #36363500 1! #36363600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36364000 0! #36364500 1! #36364600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36365000 0! #36365500 1! #36365600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36366000 0! #36366500 1! #36366600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36367000 0! #36367500 1! #36367600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36368000 0! #36368500 1! #36368600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36369000 0! #36369500 1! #36369600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36370000 0! #36370500 1! #36370600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36371000 0! #36371500 1! #36371600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36372000 0! #36372500 1! #36372600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36373000 0! #36373500 1! #36373600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36374000 0! #36374500 1! #36374600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36375000 0! #36375500 1! #36375600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36376000 0! #36376500 1! #36376600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36377000 0! #36377500 1! #36377600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36378000 0! #36378500 1! #36378600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36379000 0! #36379500 1! #36379600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36380000 0! #36380500 1! #36380600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36381000 0! #36381500 1! #36381600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36382000 0! #36382500 1! #36382600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36383000 0! #36383500 1! #36383600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36384000 0! #36384500 1! #36384600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36385000 0! #36385500 1! #36385600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36386000 0! #36386500 1! #36386600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36387000 0! #36387500 1! #36387600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36388000 0! #36388500 1! #36388600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36389000 0! #36389500 1! #36389600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36390000 0! #36390500 1! #36390600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36391000 0! #36391500 1! #36391600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1Q 1O #36392000 0! #36392500 1! #36392600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36393000 0! #36393500 1! #36393600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36394000 0! #36394500 1! #36394600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36395000 0! #36395500 1! #36395600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36396000 0! #36396500 1! #36396600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36397000 0! #36397500 1! #36397600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36398000 0! #36398500 1! #36398600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36399000 0! #36399500 1! #36399600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36400000 0! #36400500 1! #36400600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36401000 0! #36401500 1! #36401600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36402000 0! #36402500 1! #36402600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36403000 0! #36403500 1! #36403600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36404000 0! #36404500 1! #36404600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36405000 0! #36405500 1! #36405600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36406000 0! #36406500 1! #36406600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36407000 0! #36407500 1! #36407600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36408000 0! #36408500 1! #36408600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36409000 0! #36409500 1! #36409600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36410000 0! #36410500 1! #36410600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36411000 0! #36411500 1! #36411600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36412000 0! #36412500 1! #36412600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36413000 0! #36413500 1! #36413600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36414000 0! #36414500 1! #36414600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36415000 0! #36415500 1! #36415600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36416000 0! #36416500 1! #36416600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36417000 0! #36417500 1! #36417600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36418000 0! #36418500 1! #36418600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36419000 0! #36419500 1! #36419600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36420000 0! #36420500 1! #36420600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36421000 0! #36421500 1! #36421600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36422000 0! #36422500 1! #36422600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36423000 0! #36423500 1! #36423600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36424000 0! #36424500 1! #36424600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36425000 0! #36425500 1! #36425600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36426000 0! #36426500 1! #36426600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36427000 0! #36427500 1! #36427600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36428000 0! #36428500 1! #36428600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36429000 0! #36429500 1! #36429600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36430000 0! #36430500 1! #36430600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36431000 0! #36431500 1! #36431600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36432000 0! #36432500 1! #36432600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36433000 0! #36433500 1! #36433600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36434000 0! #36434500 1! #36434600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36435000 0! #36435500 1! #36435600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36436000 0! #36436500 1! #36436600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36437000 0! #36437500 1! #36437600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36438000 0! #36438500 1! #36438600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36439000 0! #36439500 1! #36439600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36440000 0! #36440500 1! #36440600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36441000 0! #36441500 1! #36441600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36442000 0! #36442500 1! #36442600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #36442700 bx11 ^ 1` bx111 c #36443000 0! #36443500 1! #36443600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36444000 0! #36444500 1! #36444600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36445000 0! #36445500 1! #36445600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36446000 0! #36446500 1! #36446600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36447000 0! #36447500 1! #36447600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36448000 0! #36448500 1! #36448600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36449000 0! #36449500 1! #36449600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36450000 0! #36450500 1! #36450600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36451000 0! #36451500 1! #36451600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36452000 0! #36452500 1! #36452600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36453000 0! #36453500 1! #36453600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36454000 0! #36454500 1! #36454600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36455000 0! #36455500 1! #36455600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36456000 0! #36456500 1! #36456600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36457000 0! #36457500 1! #36457600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36458000 0! #36458500 1! #36458600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36459000 0! #36459500 1! #36459600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36460000 0! #36460500 1! #36460600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36461000 0! #36461500 1! #36461600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36462000 0! #36462500 1! #36462600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36463000 0! #36463500 1! #36463600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36464000 0! #36464500 1! #36464600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36465000 0! #36465500 1! #36465600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36466000 0! #36466500 1! #36466600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36467000 0! #36467500 1! #36467600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36468000 0! #36468500 1! #36468600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36469000 0! #36469500 1! #36469600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36470000 0! #36470500 1! #36470600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36471000 0! #36471500 1! #36471600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36472000 0! #36472500 1! #36472600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36473000 0! #36473500 1! #36473600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36474000 0! #36474500 1! #36474600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36475000 0! #36475500 1! #36475600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36476000 0! #36476500 1! #36476600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36477000 0! #36477500 1! #36477600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36478000 0! #36478500 1! #36478600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36479000 0! #36479500 1! #36479600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36480000 0! #36480500 1! #36480600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36481000 0! #36481500 1! #36481600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36482000 0! #36482500 1! #36482600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36483000 0! #36483500 1! #36483600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36484000 0! #36484500 1! #36484600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36485000 0! #36485500 1! #36485600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36486000 0! #36486500 1! #36486600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36487000 0! #36487500 1! #36487600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36488000 0! #36488500 1! #36488600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36489000 0! #36489500 1! #36489600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36490000 0! #36490500 1! #36490600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36491000 0! #36491500 1! #36491600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36492000 0! #36492500 1! #36492600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36493000 0! #36493500 1! #36493600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36494000 0! #36494500 1! #36494600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36495000 0! #36495500 1! #36495600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36496000 0! #36496500 1! #36496600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36497000 0! #36497500 1! #36497600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36498000 0! #36498500 1! #36498600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36499000 0! #36499500 1! #36499600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36500000 0! #36500500 1! #36500600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36501000 0! #36501500 1! #36501600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36502000 0! #36502500 1! #36502600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36503000 0! #36503500 1! #36503600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36504000 0! #36504500 1! #36504600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36505000 0! #36505500 1! #36505600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36506000 0! #36506500 1! #36506600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36507000 0! #36507500 1! #36507600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36508000 0! #36508500 1! #36508600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36509000 0! #36509500 1! #36509600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36510000 0! #36510500 1! #36510600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36511000 0! #36511500 1! #36511600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36512000 0! #36512500 1! #36512600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36513000 0! #36513500 1! #36513600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36514000 0! #36514500 1! #36514600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36515000 0! #36515500 1! #36515600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36516000 0! #36516500 1! #36516600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36517000 0! #36517500 1! #36517600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36518000 0! #36518500 1! #36518600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36519000 0! #36519500 1! #36519600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36520000 0! #36520500 1! #36520600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36521000 0! #36521500 1! #36521600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36522000 0! #36522500 1! #36522600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36523000 0! #36523500 1! #36523600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36524000 0! #36524500 1! #36524600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36525000 0! #36525500 1! #36525600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36526000 0! #36526500 1! #36526600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36527000 0! #36527500 1! #36527600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36528000 0! #36528500 1! #36528600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36529000 0! #36529500 1! #36529600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36530000 0! #36530500 1! #36530600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36531000 0! #36531500 1! #36531600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36532000 0! #36532500 1! #36532600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36533000 0! #36533500 1! #36533600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36534000 0! #36534500 1! #36534600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36535000 0! #36535500 1! #36535600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36536000 0! #36536500 1! #36536600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36537000 0! #36537500 1! #36537600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36538000 0! #36538500 1! #36538600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36539000 0! #36539500 1! #36539600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36540000 0! #36540500 1! #36540600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36541000 0! #36541500 1! #36541600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36542000 0! #36542500 1! #36542600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36543000 0! #36543500 1! #36543600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36544000 0! #36544500 1! #36544600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #36544700 0i #36545000 0! #36545500 1! #36545600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36546000 0! #36546500 1! #36546600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36547000 0! #36547500 1! #36547600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36548000 0! #36548500 1! #36548600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36549000 0! #36549500 1! #36549600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36550000 0! #36550500 1! #36550600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36551000 0! #36551500 1! #36551600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36552000 0! #36552500 1! #36552600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36553000 0! #36553500 1! #36553600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36554000 0! #36554500 1! #36554600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36555000 0! #36555500 1! #36555600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36556000 0! #36556500 1! #36556600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36557000 0! #36557500 1! #36557600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36558000 0! #36558500 1! #36558600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36559000 0! #36559500 1! #36559600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36560000 0! #36560500 1! #36560600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36561000 0! #36561500 1! #36561600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36562000 0! #36562500 1! #36562600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36563000 0! #36563500 1! #36563600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36564000 0! #36564500 1! #36564600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36565000 0! #36565500 1! #36565600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36566000 0! #36566500 1! #36566600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36567000 0! #36567500 1! #36567600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36568000 0! #36568500 1! #36568600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36569000 0! #36569500 1! #36569600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36570000 0! #36570500 1! #36570600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36571000 0! #36571500 1! #36571600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36572000 0! #36572500 1! #36572600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36573000 0! #36573500 1! #36573600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36574000 0! #36574500 1! #36574600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36575000 0! #36575500 1! #36575600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36576000 0! #36576500 1! #36576600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36577000 0! #36577500 1! #36577600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36578000 0! #36578500 1! #36578600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36579000 0! #36579500 1! #36579600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36580000 0! #36580500 1! #36580600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36581000 0! #36581500 1! #36581600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36582000 0! #36582500 1! #36582600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36583000 0! #36583500 1! #36583600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36584000 0! #36584500 1! #36584600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36585000 0! #36585500 1! #36585600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36586000 0! #36586500 1! #36586600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36587000 0! #36587500 1! #36587600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36588000 0! #36588500 1! #36588600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36589000 0! #36589500 1! #36589600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36590000 0! #36590500 1! #36590600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36591000 0! #36591500 1! #36591600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36592000 0! #36592500 1! #36592600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36593000 0! #36593500 1! #36593600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36594000 0! #36594500 1! #36594600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36595000 0! #36595500 1! #36595600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36596000 0! #36596500 1! #36596600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36597000 0! #36597500 1! #36597600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36598000 0! #36598500 1! #36598600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36599000 0! #36599500 1! #36599600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36600000 0! #36600500 1! #36600600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36601000 0! #36601500 1! #36601600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36602000 0! #36602500 1! #36602600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36603000 0! #36603500 1! #36603600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36604000 0! #36604500 1! #36604600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36605000 0! #36605500 1! #36605600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36606000 0! #36606500 1! #36606600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36607000 0! #36607500 1! #36607600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36608000 0! #36608500 1! #36608600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36609000 0! #36609500 1! #36609600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36610000 0! #36610500 1! #36610600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36611000 0! #36611500 1! #36611600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36612000 0! #36612500 1! #36612600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36613000 0! #36613500 1! #36613600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36614000 0! #36614500 1! #36614600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36615000 0! #36615500 1! #36615600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36616000 0! #36616500 1! #36616600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36617000 0! #36617500 1! #36617600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36618000 0! #36618500 1! #36618600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36619000 0! #36619500 1! #36619600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36620000 0! #36620500 1! #36620600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36621000 0! #36621500 1! #36621600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36622000 0! #36622500 1! #36622600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36623000 0! #36623500 1! #36623600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36624000 0! #36624500 1! #36624600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36625000 0! #36625500 1! #36625600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36626000 0! #36626500 1! #36626600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36627000 0! #36627500 1! #36627600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36628000 0! #36628500 1! #36628600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36629000 0! #36629500 1! #36629600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36630000 0! #36630500 1! #36630600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36631000 0! #36631500 1! #36631600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36632000 0! #36632500 1! #36632600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36633000 0! #36633500 1! #36633600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36634000 0! #36634500 1! #36634600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36635000 0! #36635500 1! #36635600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36636000 0! #36636500 1! #36636600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36637000 0! #36637500 1! #36637600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36638000 0! #36638500 1! #36638600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36639000 0! #36639500 1! #36639600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36640000 0! #36640500 1! #36640600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36641000 0! #36641500 1! #36641600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36642000 0! #36642500 1! #36642600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36643000 0! #36643500 1! #36643600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36644000 0! #36644500 1! #36644600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36645000 0! #36645500 1! #36645600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36646000 0! #36646500 1! #36646600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0Q 0O #36646700 0_ 0f #36647000 0! #36647500 1! #36647600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36648000 0! #36648500 1! #36648600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36649000 0! #36649500 1! #36649600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36650000 0! #36650500 1! #36650600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36651000 0! #36651500 1! #36651600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36652000 0! #36652500 1! #36652600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36653000 0! #36653500 1! #36653600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36654000 0! #36654500 1! #36654600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36655000 0! #36655500 1! #36655600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36656000 0! #36656500 1! #36656600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36657000 0! #36657500 1! #36657600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36658000 0! #36658500 1! #36658600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36659000 0! #36659500 1! #36659600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36660000 0! #36660500 1! #36660600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36661000 0! #36661500 1! #36661600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36662000 0! #36662500 1! #36662600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36663000 0! #36663500 1! #36663600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36664000 0! #36664500 1! #36664600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36665000 0! #36665500 1! #36665600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36666000 0! #36666500 1! #36666600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36667000 0! #36667500 1! #36667600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36668000 0! #36668500 1! #36668600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36669000 0! #36669500 1! #36669600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36670000 0! #36670500 1! #36670600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36671000 0! #36671500 1! #36671600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36672000 0! #36672500 1! #36672600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36673000 0! #36673500 1! #36673600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36674000 0! #36674500 1! #36674600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36675000 0! #36675500 1! #36675600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36676000 0! #36676500 1! #36676600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36677000 0! #36677500 1! #36677600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36678000 0! #36678500 1! #36678600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36679000 0! #36679500 1! #36679600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36680000 0! #36680500 1! #36680600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36681000 0! #36681500 1! #36681600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36682000 0! #36682500 1! #36682600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36683000 0! #36683500 1! #36683600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36684000 0! #36684500 1! #36684600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36685000 0! #36685500 1! #36685600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36686000 0! #36686500 1! #36686600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36687000 0! #36687500 1! #36687600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36688000 0! #36688500 1! #36688600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36689000 0! #36689500 1! #36689600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36690000 0! #36690500 1! #36690600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36691000 0! #36691500 1! #36691600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36692000 0! #36692500 1! #36692600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36693000 0! #36693500 1! #36693600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36694000 0! #36694500 1! #36694600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36695000 0! #36695500 1! #36695600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36696000 0! #36696500 1! #36696600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36697000 0! #36697500 1! #36697600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #36697700 bx111 ^ 0` b110 g bx1110 c #36698000 0! #36698500 1! #36698600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36699000 0! #36699500 1! #36699600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36700000 0! #36700500 1! #36700600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36701000 0! #36701500 1! #36701600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36702000 0! #36702500 1! #36702600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36703000 0! #36703500 1! #36703600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36704000 0! #36704500 1! #36704600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36705000 0! #36705500 1! #36705600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36706000 0! #36706500 1! #36706600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36707000 0! #36707500 1! #36707600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36708000 0! #36708500 1! #36708600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36709000 0! #36709500 1! #36709600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36710000 0! #36710500 1! #36710600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36711000 0! #36711500 1! #36711600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36712000 0! #36712500 1! #36712600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36713000 0! #36713500 1! #36713600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36714000 0! #36714500 1! #36714600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36715000 0! #36715500 1! #36715600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36716000 0! #36716500 1! #36716600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36717000 0! #36717500 1! #36717600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36718000 0! #36718500 1! #36718600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36719000 0! #36719500 1! #36719600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36720000 0! #36720500 1! #36720600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36721000 0! #36721500 1! #36721600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36722000 0! #36722500 1! #36722600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36723000 0! #36723500 1! #36723600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36724000 0! #36724500 1! #36724600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36725000 0! #36725500 1! #36725600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36726000 0! #36726500 1! #36726600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36727000 0! #36727500 1! #36727600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36728000 0! #36728500 1! #36728600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36729000 0! #36729500 1! #36729600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36730000 0! #36730500 1! #36730600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36731000 0! #36731500 1! #36731600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36732000 0! #36732500 1! #36732600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36733000 0! #36733500 1! #36733600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36734000 0! #36734500 1! #36734600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36735000 0! #36735500 1! #36735600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36736000 0! #36736500 1! #36736600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36737000 0! #36737500 1! #36737600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36738000 0! #36738500 1! #36738600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36739000 0! #36739500 1! #36739600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36740000 0! #36740500 1! #36740600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36741000 0! #36741500 1! #36741600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36742000 0! #36742500 1! #36742600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36743000 0! #36743500 1! #36743600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36744000 0! #36744500 1! #36744600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36745000 0! #36745500 1! #36745600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36746000 0! #36746500 1! #36746600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36747000 0! #36747500 1! #36747600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36748000 0! #36748500 1! #36748600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36749000 0! #36749500 1! #36749600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36750000 0! #36750500 1! #36750600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36751000 0! #36751500 1! #36751600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36752000 0! #36752500 1! #36752600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36753000 0! #36753500 1! #36753600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36754000 0! #36754500 1! #36754600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36755000 0! #36755500 1! #36755600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36756000 0! #36756500 1! #36756600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36757000 0! #36757500 1! #36757600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36758000 0! #36758500 1! #36758600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36759000 0! #36759500 1! #36759600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36760000 0! #36760500 1! #36760600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36761000 0! #36761500 1! #36761600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36762000 0! #36762500 1! #36762600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36763000 0! #36763500 1! #36763600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36764000 0! #36764500 1! #36764600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36765000 0! #36765500 1! #36765600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36766000 0! #36766500 1! #36766600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36767000 0! #36767500 1! #36767600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36768000 0! #36768500 1! #36768600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36769000 0! #36769500 1! #36769600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36770000 0! #36770500 1! #36770600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36771000 0! #36771500 1! #36771600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36772000 0! #36772500 1! #36772600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36773000 0! #36773500 1! #36773600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36774000 0! #36774500 1! #36774600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36775000 0! #36775500 1! #36775600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36776000 0! #36776500 1! #36776600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36777000 0! #36777500 1! #36777600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36778000 0! #36778500 1! #36778600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36779000 0! #36779500 1! #36779600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36780000 0! #36780500 1! #36780600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36781000 0! #36781500 1! #36781600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36782000 0! #36782500 1! #36782600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36783000 0! #36783500 1! #36783600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36784000 0! #36784500 1! #36784600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36785000 0! #36785500 1! #36785600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36786000 0! #36786500 1! #36786600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36787000 0! #36787500 1! #36787600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36788000 0! #36788500 1! #36788600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36789000 0! #36789500 1! #36789600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36790000 0! #36790500 1! #36790600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36791000 0! #36791500 1! #36791600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36792000 0! #36792500 1! #36792600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36793000 0! #36793500 1! #36793600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36794000 0! #36794500 1! #36794600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36795000 0! #36795500 1! #36795600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36796000 0! #36796500 1! #36796600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36797000 0! #36797500 1! #36797600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36798000 0! #36798500 1! #36798600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36799000 0! #36799500 1! #36799600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #36800000 0! #36800500 1! #36800600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36801000 0! #36801500 1! #36801600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36802000 0! #36802500 1! #36802600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36803000 0! #36803500 1! #36803600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36804000 0! #36804500 1! #36804600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36805000 0! #36805500 1! #36805600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36806000 0! #36806500 1! #36806600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36807000 0! #36807500 1! #36807600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36808000 0! #36808500 1! #36808600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36809000 0! #36809500 1! #36809600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36810000 0! #36810500 1! #36810600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36811000 0! #36811500 1! #36811600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36812000 0! #36812500 1! #36812600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36813000 0! #36813500 1! #36813600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36814000 0! #36814500 1! #36814600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36815000 0! #36815500 1! #36815600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36816000 0! #36816500 1! #36816600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36817000 0! #36817500 1! #36817600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36818000 0! #36818500 1! #36818600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36819000 0! #36819500 1! #36819600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36820000 0! #36820500 1! #36820600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36821000 0! #36821500 1! #36821600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36822000 0! #36822500 1! #36822600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36823000 0! #36823500 1! #36823600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36824000 0! #36824500 1! #36824600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36825000 0! #36825500 1! #36825600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36826000 0! #36826500 1! #36826600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36827000 0! #36827500 1! #36827600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36828000 0! #36828500 1! #36828600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36829000 0! #36829500 1! #36829600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36830000 0! #36830500 1! #36830600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36831000 0! #36831500 1! #36831600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36832000 0! #36832500 1! #36832600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36833000 0! #36833500 1! #36833600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36834000 0! #36834500 1! #36834600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36835000 0! #36835500 1! #36835600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36836000 0! #36836500 1! #36836600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36837000 0! #36837500 1! #36837600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36838000 0! #36838500 1! #36838600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36839000 0! #36839500 1! #36839600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36840000 0! #36840500 1! #36840600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36841000 0! #36841500 1! #36841600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36842000 0! #36842500 1! #36842600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36843000 0! #36843500 1! #36843600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36844000 0! #36844500 1! #36844600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36845000 0! #36845500 1! #36845600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36846000 0! #36846500 1! #36846600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36847000 0! #36847500 1! #36847600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36848000 0! #36848500 1! #36848600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36849000 0! #36849500 1! #36849600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36850000 0! #36850500 1! #36850600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36851000 0! #36851500 1! #36851600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36852000 0! #36852500 1! #36852600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36853000 0! #36853500 1! #36853600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36854000 0! #36854500 1! #36854600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36855000 0! #36855500 1! #36855600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36856000 0! #36856500 1! #36856600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36857000 0! #36857500 1! #36857600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36858000 0! #36858500 1! #36858600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36859000 0! #36859500 1! #36859600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36860000 0! #36860500 1! #36860600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36861000 0! #36861500 1! #36861600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36862000 0! #36862500 1! #36862600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36863000 0! #36863500 1! #36863600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36864000 0! #36864500 1! #36864600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36865000 0! #36865500 1! #36865600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36866000 0! #36866500 1! #36866600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36867000 0! #36867500 1! #36867600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36868000 0! #36868500 1! #36868600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36869000 0! #36869500 1! #36869600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36870000 0! #36870500 1! #36870600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36871000 0! #36871500 1! #36871600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36872000 0! #36872500 1! #36872600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36873000 0! #36873500 1! #36873600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36874000 0! #36874500 1! #36874600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36875000 0! #36875500 1! #36875600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36876000 0! #36876500 1! #36876600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36877000 0! #36877500 1! #36877600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36878000 0! #36878500 1! #36878600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36879000 0! #36879500 1! #36879600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36880000 0! #36880500 1! #36880600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36881000 0! #36881500 1! #36881600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36882000 0! #36882500 1! #36882600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36883000 0! #36883500 1! #36883600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36884000 0! #36884500 1! #36884600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36885000 0! #36885500 1! #36885600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36886000 0! #36886500 1! #36886600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36887000 0! #36887500 1! #36887600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36888000 0! #36888500 1! #36888600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36889000 0! #36889500 1! #36889600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36890000 0! #36890500 1! #36890600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36891000 0! #36891500 1! #36891600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36892000 0! #36892500 1! #36892600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36893000 0! #36893500 1! #36893600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36894000 0! #36894500 1! #36894600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36895000 0! #36895500 1! #36895600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36896000 0! #36896500 1! #36896600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36897000 0! #36897500 1! #36897600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36898000 0! #36898500 1! #36898600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36899000 0! #36899500 1! #36899600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36900000 0! #36900500 1! #36900600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36901000 0! #36901500 1! #36901600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1Q 1O #36902000 0! #36902500 1! #36902600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36903000 0! #36903500 1! #36903600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36904000 0! #36904500 1! #36904600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36905000 0! #36905500 1! #36905600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36906000 0! #36906500 1! #36906600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36907000 0! #36907500 1! #36907600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36908000 0! #36908500 1! #36908600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36909000 0! #36909500 1! #36909600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36910000 0! #36910500 1! #36910600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36911000 0! #36911500 1! #36911600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36912000 0! #36912500 1! #36912600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36913000 0! #36913500 1! #36913600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36914000 0! #36914500 1! #36914600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36915000 0! #36915500 1! #36915600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36916000 0! #36916500 1! #36916600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36917000 0! #36917500 1! #36917600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36918000 0! #36918500 1! #36918600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36919000 0! #36919500 1! #36919600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36920000 0! #36920500 1! #36920600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36921000 0! #36921500 1! #36921600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36922000 0! #36922500 1! #36922600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36923000 0! #36923500 1! #36923600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36924000 0! #36924500 1! #36924600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36925000 0! #36925500 1! #36925600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36926000 0! #36926500 1! #36926600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36927000 0! #36927500 1! #36927600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36928000 0! #36928500 1! #36928600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36929000 0! #36929500 1! #36929600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36930000 0! #36930500 1! #36930600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36931000 0! #36931500 1! #36931600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36932000 0! #36932500 1! #36932600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36933000 0! #36933500 1! #36933600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36934000 0! #36934500 1! #36934600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36935000 0! #36935500 1! #36935600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36936000 0! #36936500 1! #36936600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36937000 0! #36937500 1! #36937600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36938000 0! #36938500 1! #36938600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36939000 0! #36939500 1! #36939600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36940000 0! #36940500 1! #36940600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36941000 0! #36941500 1! #36941600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36942000 0! #36942500 1! #36942600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36943000 0! #36943500 1! #36943600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36944000 0! #36944500 1! #36944600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36945000 0! #36945500 1! #36945600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36946000 0! #36946500 1! #36946600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36947000 0! #36947500 1! #36947600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36948000 0! #36948500 1! #36948600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36949000 0! #36949500 1! #36949600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36950000 0! #36950500 1! #36950600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36951000 0! #36951500 1! #36951600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36952000 0! #36952500 1! #36952600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #36952700 bx1111 ^ b101 g bx11101 c #36953000 0! #36953500 1! #36953600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36954000 0! #36954500 1! #36954600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36955000 0! #36955500 1! #36955600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36956000 0! #36956500 1! #36956600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36957000 0! #36957500 1! #36957600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36958000 0! #36958500 1! #36958600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36959000 0! #36959500 1! #36959600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36960000 0! #36960500 1! #36960600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36961000 0! #36961500 1! #36961600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36962000 0! #36962500 1! #36962600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36963000 0! #36963500 1! #36963600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36964000 0! #36964500 1! #36964600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36965000 0! #36965500 1! #36965600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36966000 0! #36966500 1! #36966600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36967000 0! #36967500 1! #36967600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36968000 0! #36968500 1! #36968600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36969000 0! #36969500 1! #36969600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36970000 0! #36970500 1! #36970600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36971000 0! #36971500 1! #36971600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36972000 0! #36972500 1! #36972600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36973000 0! #36973500 1! #36973600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36974000 0! #36974500 1! #36974600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36975000 0! #36975500 1! #36975600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36976000 0! #36976500 1! #36976600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36977000 0! #36977500 1! #36977600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36978000 0! #36978500 1! #36978600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36979000 0! #36979500 1! #36979600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36980000 0! #36980500 1! #36980600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36981000 0! #36981500 1! #36981600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36982000 0! #36982500 1! #36982600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36983000 0! #36983500 1! #36983600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36984000 0! #36984500 1! #36984600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36985000 0! #36985500 1! #36985600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36986000 0! #36986500 1! #36986600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36987000 0! #36987500 1! #36987600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36988000 0! #36988500 1! #36988600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36989000 0! #36989500 1! #36989600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36990000 0! #36990500 1! #36990600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36991000 0! #36991500 1! #36991600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36992000 0! #36992500 1! #36992600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36993000 0! #36993500 1! #36993600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36994000 0! #36994500 1! #36994600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36995000 0! #36995500 1! #36995600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36996000 0! #36996500 1! #36996600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36997000 0! #36997500 1! #36997600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #36998000 0! #36998500 1! #36998600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #36999000 0! #36999500 1! #36999600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37000000 0! #37000500 1! #37000600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37001000 0! #37001500 1! #37001600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37002000 0! #37002500 1! #37002600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37003000 0! #37003500 1! #37003600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37004000 0! #37004500 1! #37004600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37005000 0! #37005500 1! #37005600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37006000 0! #37006500 1! #37006600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37007000 0! #37007500 1! #37007600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37008000 0! #37008500 1! #37008600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37009000 0! #37009500 1! #37009600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37010000 0! #37010500 1! #37010600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37011000 0! #37011500 1! #37011600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37012000 0! #37012500 1! #37012600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37013000 0! #37013500 1! #37013600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37014000 0! #37014500 1! #37014600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37015000 0! #37015500 1! #37015600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37016000 0! #37016500 1! #37016600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37017000 0! #37017500 1! #37017600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37018000 0! #37018500 1! #37018600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37019000 0! #37019500 1! #37019600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37020000 0! #37020500 1! #37020600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37021000 0! #37021500 1! #37021600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37022000 0! #37022500 1! #37022600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37023000 0! #37023500 1! #37023600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37024000 0! #37024500 1! #37024600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37025000 0! #37025500 1! #37025600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37026000 0! #37026500 1! #37026600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37027000 0! #37027500 1! #37027600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37028000 0! #37028500 1! #37028600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37029000 0! #37029500 1! #37029600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37030000 0! #37030500 1! #37030600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37031000 0! #37031500 1! #37031600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37032000 0! #37032500 1! #37032600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37033000 0! #37033500 1! #37033600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37034000 0! #37034500 1! #37034600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37035000 0! #37035500 1! #37035600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37036000 0! #37036500 1! #37036600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37037000 0! #37037500 1! #37037600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37038000 0! #37038500 1! #37038600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37039000 0! #37039500 1! #37039600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37040000 0! #37040500 1! #37040600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37041000 0! #37041500 1! #37041600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37042000 0! #37042500 1! #37042600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37043000 0! #37043500 1! #37043600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37044000 0! #37044500 1! #37044600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37045000 0! #37045500 1! #37045600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37046000 0! #37046500 1! #37046600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37047000 0! #37047500 1! #37047600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37048000 0! #37048500 1! #37048600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37049000 0! #37049500 1! #37049600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37050000 0! #37050500 1! #37050600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37051000 0! #37051500 1! #37051600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37052000 0! #37052500 1! #37052600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37053000 0! #37053500 1! #37053600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37054000 0! #37054500 1! #37054600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #37055000 0! #37055500 1! #37055600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37056000 0! #37056500 1! #37056600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37057000 0! #37057500 1! #37057600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37058000 0! #37058500 1! #37058600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37059000 0! #37059500 1! #37059600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37060000 0! #37060500 1! #37060600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37061000 0! #37061500 1! #37061600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37062000 0! #37062500 1! #37062600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37063000 0! #37063500 1! #37063600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37064000 0! #37064500 1! #37064600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37065000 0! #37065500 1! #37065600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37066000 0! #37066500 1! #37066600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37067000 0! #37067500 1! #37067600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37068000 0! #37068500 1! #37068600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37069000 0! #37069500 1! #37069600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37070000 0! #37070500 1! #37070600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37071000 0! #37071500 1! #37071600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37072000 0! #37072500 1! #37072600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37073000 0! #37073500 1! #37073600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37074000 0! #37074500 1! #37074600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37075000 0! #37075500 1! #37075600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37076000 0! #37076500 1! #37076600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37077000 0! #37077500 1! #37077600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37078000 0! #37078500 1! #37078600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37079000 0! #37079500 1! #37079600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37080000 0! #37080500 1! #37080600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37081000 0! #37081500 1! #37081600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37082000 0! #37082500 1! #37082600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37083000 0! #37083500 1! #37083600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37084000 0! #37084500 1! #37084600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37085000 0! #37085500 1! #37085600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37086000 0! #37086500 1! #37086600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37087000 0! #37087500 1! #37087600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37088000 0! #37088500 1! #37088600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37089000 0! #37089500 1! #37089600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37090000 0! #37090500 1! #37090600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37091000 0! #37091500 1! #37091600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37092000 0! #37092500 1! #37092600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37093000 0! #37093500 1! #37093600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37094000 0! #37094500 1! #37094600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37095000 0! #37095500 1! #37095600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37096000 0! #37096500 1! #37096600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37097000 0! #37097500 1! #37097600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37098000 0! #37098500 1! #37098600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37099000 0! #37099500 1! #37099600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37100000 0! #37100500 1! #37100600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37101000 0! #37101500 1! #37101600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37102000 0! #37102500 1! #37102600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37103000 0! #37103500 1! #37103600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37104000 0! #37104500 1! #37104600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37105000 0! #37105500 1! #37105600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37106000 0! #37106500 1! #37106600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37107000 0! #37107500 1! #37107600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37108000 0! #37108500 1! #37108600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37109000 0! #37109500 1! #37109600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37110000 0! #37110500 1! #37110600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37111000 0! #37111500 1! #37111600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37112000 0! #37112500 1! #37112600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37113000 0! #37113500 1! #37113600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37114000 0! #37114500 1! #37114600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37115000 0! #37115500 1! #37115600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37116000 0! #37116500 1! #37116600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37117000 0! #37117500 1! #37117600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37118000 0! #37118500 1! #37118600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37119000 0! #37119500 1! #37119600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37120000 0! #37120500 1! #37120600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37121000 0! #37121500 1! #37121600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37122000 0! #37122500 1! #37122600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37123000 0! #37123500 1! #37123600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37124000 0! #37124500 1! #37124600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37125000 0! #37125500 1! #37125600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37126000 0! #37126500 1! #37126600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37127000 0! #37127500 1! #37127600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37128000 0! #37128500 1! #37128600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37129000 0! #37129500 1! #37129600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37130000 0! #37130500 1! #37130600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37131000 0! #37131500 1! #37131600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37132000 0! #37132500 1! #37132600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37133000 0! #37133500 1! #37133600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37134000 0! #37134500 1! #37134600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37135000 0! #37135500 1! #37135600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37136000 0! #37136500 1! #37136600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37137000 0! #37137500 1! #37137600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37138000 0! #37138500 1! #37138600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37139000 0! #37139500 1! #37139600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37140000 0! #37140500 1! #37140600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37141000 0! #37141500 1! #37141600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37142000 0! #37142500 1! #37142600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37143000 0! #37143500 1! #37143600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37144000 0! #37144500 1! #37144600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37145000 0! #37145500 1! #37145600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37146000 0! #37146500 1! #37146600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37147000 0! #37147500 1! #37147600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37148000 0! #37148500 1! #37148600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37149000 0! #37149500 1! #37149600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37150000 0! #37150500 1! #37150600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37151000 0! #37151500 1! #37151600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37152000 0! #37152500 1! #37152600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37153000 0! #37153500 1! #37153600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37154000 0! #37154500 1! #37154600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37155000 0! #37155500 1! #37155600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37156000 0! #37156500 1! #37156600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0Q 0O #37157000 0! #37157500 1! #37157600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37158000 0! #37158500 1! #37158600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37159000 0! #37159500 1! #37159600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37160000 0! #37160500 1! #37160600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37161000 0! #37161500 1! #37161600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37162000 0! #37162500 1! #37162600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37163000 0! #37163500 1! #37163600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37164000 0! #37164500 1! #37164600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37165000 0! #37165500 1! #37165600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37166000 0! #37166500 1! #37166600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37167000 0! #37167500 1! #37167600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37168000 0! #37168500 1! #37168600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37169000 0! #37169500 1! #37169600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37170000 0! #37170500 1! #37170600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37171000 0! #37171500 1! #37171600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37172000 0! #37172500 1! #37172600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37173000 0! #37173500 1! #37173600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37174000 0! #37174500 1! #37174600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37175000 0! #37175500 1! #37175600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37176000 0! #37176500 1! #37176600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37177000 0! #37177500 1! #37177600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37178000 0! #37178500 1! #37178600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37179000 0! #37179500 1! #37179600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37180000 0! #37180500 1! #37180600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37181000 0! #37181500 1! #37181600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37182000 0! #37182500 1! #37182600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37183000 0! #37183500 1! #37183600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37184000 0! #37184500 1! #37184600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37185000 0! #37185500 1! #37185600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37186000 0! #37186500 1! #37186600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37187000 0! #37187500 1! #37187600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37188000 0! #37188500 1! #37188600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37189000 0! #37189500 1! #37189600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37190000 0! #37190500 1! #37190600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37191000 0! #37191500 1! #37191600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37192000 0! #37192500 1! #37192600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37193000 0! #37193500 1! #37193600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37194000 0! #37194500 1! #37194600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37195000 0! #37195500 1! #37195600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37196000 0! #37196500 1! #37196600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37197000 0! #37197500 1! #37197600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37198000 0! #37198500 1! #37198600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37199000 0! #37199500 1! #37199600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37200000 0! #37200500 1! #37200600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37201000 0! #37201500 1! #37201600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37202000 0! #37202500 1! #37202600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37203000 0! #37203500 1! #37203600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37204000 0! #37204500 1! #37204600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37205000 0! #37205500 1! #37205600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37206000 0! #37206500 1! #37206600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37207000 0! #37207500 1! #37207600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #37207700 bx11111 ^ b100 g bx111010 c #37208000 0! #37208500 1! #37208600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37209000 0! #37209500 1! #37209600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37210000 0! #37210500 1! #37210600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37211000 0! #37211500 1! #37211600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37212000 0! #37212500 1! #37212600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37213000 0! #37213500 1! #37213600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37214000 0! #37214500 1! #37214600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37215000 0! #37215500 1! #37215600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37216000 0! #37216500 1! #37216600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37217000 0! #37217500 1! #37217600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37218000 0! #37218500 1! #37218600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37219000 0! #37219500 1! #37219600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37220000 0! #37220500 1! #37220600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37221000 0! #37221500 1! #37221600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37222000 0! #37222500 1! #37222600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37223000 0! #37223500 1! #37223600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37224000 0! #37224500 1! #37224600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37225000 0! #37225500 1! #37225600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37226000 0! #37226500 1! #37226600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37227000 0! #37227500 1! #37227600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37228000 0! #37228500 1! #37228600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37229000 0! #37229500 1! #37229600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37230000 0! #37230500 1! #37230600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37231000 0! #37231500 1! #37231600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37232000 0! #37232500 1! #37232600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37233000 0! #37233500 1! #37233600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37234000 0! #37234500 1! #37234600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37235000 0! #37235500 1! #37235600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37236000 0! #37236500 1! #37236600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37237000 0! #37237500 1! #37237600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37238000 0! #37238500 1! #37238600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37239000 0! #37239500 1! #37239600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37240000 0! #37240500 1! #37240600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37241000 0! #37241500 1! #37241600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37242000 0! #37242500 1! #37242600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37243000 0! #37243500 1! #37243600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37244000 0! #37244500 1! #37244600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37245000 0! #37245500 1! #37245600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37246000 0! #37246500 1! #37246600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37247000 0! #37247500 1! #37247600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37248000 0! #37248500 1! #37248600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37249000 0! #37249500 1! #37249600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37250000 0! #37250500 1! #37250600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37251000 0! #37251500 1! #37251600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37252000 0! #37252500 1! #37252600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37253000 0! #37253500 1! #37253600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37254000 0! #37254500 1! #37254600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37255000 0! #37255500 1! #37255600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37256000 0! #37256500 1! #37256600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37257000 0! #37257500 1! #37257600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37258000 0! #37258500 1! #37258600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37259000 0! #37259500 1! #37259600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37260000 0! #37260500 1! #37260600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37261000 0! #37261500 1! #37261600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37262000 0! #37262500 1! #37262600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37263000 0! #37263500 1! #37263600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37264000 0! #37264500 1! #37264600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37265000 0! #37265500 1! #37265600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37266000 0! #37266500 1! #37266600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37267000 0! #37267500 1! #37267600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37268000 0! #37268500 1! #37268600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37269000 0! #37269500 1! #37269600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37270000 0! #37270500 1! #37270600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37271000 0! #37271500 1! #37271600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37272000 0! #37272500 1! #37272600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37273000 0! #37273500 1! #37273600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37274000 0! #37274500 1! #37274600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37275000 0! #37275500 1! #37275600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37276000 0! #37276500 1! #37276600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37277000 0! #37277500 1! #37277600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37278000 0! #37278500 1! #37278600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37279000 0! #37279500 1! #37279600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37280000 0! #37280500 1! #37280600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37281000 0! #37281500 1! #37281600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37282000 0! #37282500 1! #37282600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37283000 0! #37283500 1! #37283600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37284000 0! #37284500 1! #37284600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37285000 0! #37285500 1! #37285600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37286000 0! #37286500 1! #37286600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37287000 0! #37287500 1! #37287600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37288000 0! #37288500 1! #37288600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37289000 0! #37289500 1! #37289600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37290000 0! #37290500 1! #37290600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37291000 0! #37291500 1! #37291600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37292000 0! #37292500 1! #37292600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37293000 0! #37293500 1! #37293600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37294000 0! #37294500 1! #37294600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37295000 0! #37295500 1! #37295600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37296000 0! #37296500 1! #37296600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37297000 0! #37297500 1! #37297600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37298000 0! #37298500 1! #37298600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37299000 0! #37299500 1! #37299600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37300000 0! #37300500 1! #37300600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37301000 0! #37301500 1! #37301600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37302000 0! #37302500 1! #37302600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37303000 0! #37303500 1! #37303600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37304000 0! #37304500 1! #37304600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37305000 0! #37305500 1! #37305600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37306000 0! #37306500 1! #37306600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37307000 0! #37307500 1! #37307600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37308000 0! #37308500 1! #37308600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37309000 0! #37309500 1! #37309600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #37310000 0! #37310500 1! #37310600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37311000 0! #37311500 1! #37311600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37312000 0! #37312500 1! #37312600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37313000 0! #37313500 1! #37313600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37314000 0! #37314500 1! #37314600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37315000 0! #37315500 1! #37315600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37316000 0! #37316500 1! #37316600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37317000 0! #37317500 1! #37317600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37318000 0! #37318500 1! #37318600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37319000 0! #37319500 1! #37319600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37320000 0! #37320500 1! #37320600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37321000 0! #37321500 1! #37321600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37322000 0! #37322500 1! #37322600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37323000 0! #37323500 1! #37323600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37324000 0! #37324500 1! #37324600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37325000 0! #37325500 1! #37325600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37326000 0! #37326500 1! #37326600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37327000 0! #37327500 1! #37327600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37328000 0! #37328500 1! #37328600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37329000 0! #37329500 1! #37329600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37330000 0! #37330500 1! #37330600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37331000 0! #37331500 1! #37331600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37332000 0! #37332500 1! #37332600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37333000 0! #37333500 1! #37333600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37334000 0! #37334500 1! #37334600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37335000 0! #37335500 1! #37335600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37336000 0! #37336500 1! #37336600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37337000 0! #37337500 1! #37337600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37338000 0! #37338500 1! #37338600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37339000 0! #37339500 1! #37339600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37340000 0! #37340500 1! #37340600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37341000 0! #37341500 1! #37341600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37342000 0! #37342500 1! #37342600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37343000 0! #37343500 1! #37343600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37344000 0! #37344500 1! #37344600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37345000 0! #37345500 1! #37345600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37346000 0! #37346500 1! #37346600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37347000 0! #37347500 1! #37347600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37348000 0! #37348500 1! #37348600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37349000 0! #37349500 1! #37349600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37350000 0! #37350500 1! #37350600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37351000 0! #37351500 1! #37351600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37352000 0! #37352500 1! #37352600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37353000 0! #37353500 1! #37353600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37354000 0! #37354500 1! #37354600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37355000 0! #37355500 1! #37355600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37356000 0! #37356500 1! #37356600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37357000 0! #37357500 1! #37357600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37358000 0! #37358500 1! #37358600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37359000 0! #37359500 1! #37359600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37360000 0! #37360500 1! #37360600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37361000 0! #37361500 1! #37361600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37362000 0! #37362500 1! #37362600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37363000 0! #37363500 1! #37363600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37364000 0! #37364500 1! #37364600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37365000 0! #37365500 1! #37365600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37366000 0! #37366500 1! #37366600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37367000 0! #37367500 1! #37367600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37368000 0! #37368500 1! #37368600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37369000 0! #37369500 1! #37369600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37370000 0! #37370500 1! #37370600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37371000 0! #37371500 1! #37371600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37372000 0! #37372500 1! #37372600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37373000 0! #37373500 1! #37373600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37374000 0! #37374500 1! #37374600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37375000 0! #37375500 1! #37375600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37376000 0! #37376500 1! #37376600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37377000 0! #37377500 1! #37377600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37378000 0! #37378500 1! #37378600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37379000 0! #37379500 1! #37379600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37380000 0! #37380500 1! #37380600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37381000 0! #37381500 1! #37381600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37382000 0! #37382500 1! #37382600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37383000 0! #37383500 1! #37383600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37384000 0! #37384500 1! #37384600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37385000 0! #37385500 1! #37385600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37386000 0! #37386500 1! #37386600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37387000 0! #37387500 1! #37387600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37388000 0! #37388500 1! #37388600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37389000 0! #37389500 1! #37389600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37390000 0! #37390500 1! #37390600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37391000 0! #37391500 1! #37391600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37392000 0! #37392500 1! #37392600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37393000 0! #37393500 1! #37393600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37394000 0! #37394500 1! #37394600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37395000 0! #37395500 1! #37395600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37396000 0! #37396500 1! #37396600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37397000 0! #37397500 1! #37397600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37398000 0! #37398500 1! #37398600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37399000 0! #37399500 1! #37399600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37400000 0! #37400500 1! #37400600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37401000 0! #37401500 1! #37401600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37402000 0! #37402500 1! #37402600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37403000 0! #37403500 1! #37403600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37404000 0! #37404500 1! #37404600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37405000 0! #37405500 1! #37405600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37406000 0! #37406500 1! #37406600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37407000 0! #37407500 1! #37407600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37408000 0! #37408500 1! #37408600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37409000 0! #37409500 1! #37409600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37410000 0! #37410500 1! #37410600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37411000 0! #37411500 1! #37411600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37412000 0! #37412500 1! #37412600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37413000 0! #37413500 1! #37413600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37414000 0! #37414500 1! #37414600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37415000 0! #37415500 1! #37415600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37416000 0! #37416500 1! #37416600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37417000 0! #37417500 1! #37417600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37418000 0! #37418500 1! #37418600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37419000 0! #37419500 1! #37419600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37420000 0! #37420500 1! #37420600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37421000 0! #37421500 1! #37421600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37422000 0! #37422500 1! #37422600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37423000 0! #37423500 1! #37423600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37424000 0! #37424500 1! #37424600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37425000 0! #37425500 1! #37425600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37426000 0! #37426500 1! #37426600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37427000 0! #37427500 1! #37427600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37428000 0! #37428500 1! #37428600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37429000 0! #37429500 1! #37429600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37430000 0! #37430500 1! #37430600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37431000 0! #37431500 1! #37431600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37432000 0! #37432500 1! #37432600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37433000 0! #37433500 1! #37433600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37434000 0! #37434500 1! #37434600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37435000 0! #37435500 1! #37435600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37436000 0! #37436500 1! #37436600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37437000 0! #37437500 1! #37437600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37438000 0! #37438500 1! #37438600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37439000 0! #37439500 1! #37439600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37440000 0! #37440500 1! #37440600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37441000 0! #37441500 1! #37441600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37442000 0! #37442500 1! #37442600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37443000 0! #37443500 1! #37443600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37444000 0! #37444500 1! #37444600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37445000 0! #37445500 1! #37445600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37446000 0! #37446500 1! #37446600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37447000 0! #37447500 1! #37447600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37448000 0! #37448500 1! #37448600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37449000 0! #37449500 1! #37449600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37450000 0! #37450500 1! #37450600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37451000 0! #37451500 1! #37451600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37452000 0! #37452500 1! #37452600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37453000 0! #37453500 1! #37453600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37454000 0! #37454500 1! #37454600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37455000 0! #37455500 1! #37455600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37456000 0! #37456500 1! #37456600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37457000 0! #37457500 1! #37457600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37458000 0! #37458500 1! #37458600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37459000 0! #37459500 1! #37459600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37460000 0! #37460500 1! #37460600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37461000 0! #37461500 1! #37461600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37462000 0! #37462500 1! #37462600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #37462700 bx111111 ^ b11 g bx1110100 c #37463000 0! #37463500 1! #37463600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37464000 0! #37464500 1! #37464600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37465000 0! #37465500 1! #37465600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37466000 0! #37466500 1! #37466600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37467000 0! #37467500 1! #37467600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37468000 0! #37468500 1! #37468600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37469000 0! #37469500 1! #37469600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37470000 0! #37470500 1! #37470600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37471000 0! #37471500 1! #37471600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37472000 0! #37472500 1! #37472600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37473000 0! #37473500 1! #37473600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37474000 0! #37474500 1! #37474600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37475000 0! #37475500 1! #37475600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37476000 0! #37476500 1! #37476600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37477000 0! #37477500 1! #37477600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37478000 0! #37478500 1! #37478600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37479000 0! #37479500 1! #37479600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37480000 0! #37480500 1! #37480600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37481000 0! #37481500 1! #37481600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37482000 0! #37482500 1! #37482600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37483000 0! #37483500 1! #37483600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37484000 0! #37484500 1! #37484600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37485000 0! #37485500 1! #37485600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37486000 0! #37486500 1! #37486600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37487000 0! #37487500 1! #37487600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37488000 0! #37488500 1! #37488600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37489000 0! #37489500 1! #37489600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37490000 0! #37490500 1! #37490600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37491000 0! #37491500 1! #37491600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37492000 0! #37492500 1! #37492600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37493000 0! #37493500 1! #37493600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37494000 0! #37494500 1! #37494600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37495000 0! #37495500 1! #37495600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37496000 0! #37496500 1! #37496600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37497000 0! #37497500 1! #37497600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37498000 0! #37498500 1! #37498600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37499000 0! #37499500 1! #37499600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37500000 0! #37500500 1! #37500600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37501000 0! #37501500 1! #37501600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37502000 0! #37502500 1! #37502600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37503000 0! #37503500 1! #37503600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37504000 0! #37504500 1! #37504600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37505000 0! #37505500 1! #37505600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37506000 0! #37506500 1! #37506600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37507000 0! #37507500 1! #37507600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37508000 0! #37508500 1! #37508600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37509000 0! #37509500 1! #37509600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37510000 0! #37510500 1! #37510600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37511000 0! #37511500 1! #37511600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37512000 0! #37512500 1! #37512600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37513000 0! #37513500 1! #37513600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37514000 0! #37514500 1! #37514600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37515000 0! #37515500 1! #37515600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37516000 0! #37516500 1! #37516600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37517000 0! #37517500 1! #37517600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37518000 0! #37518500 1! #37518600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37519000 0! #37519500 1! #37519600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37520000 0! #37520500 1! #37520600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37521000 0! #37521500 1! #37521600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37522000 0! #37522500 1! #37522600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37523000 0! #37523500 1! #37523600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37524000 0! #37524500 1! #37524600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37525000 0! #37525500 1! #37525600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37526000 0! #37526500 1! #37526600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37527000 0! #37527500 1! #37527600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37528000 0! #37528500 1! #37528600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37529000 0! #37529500 1! #37529600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37530000 0! #37530500 1! #37530600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37531000 0! #37531500 1! #37531600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37532000 0! #37532500 1! #37532600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37533000 0! #37533500 1! #37533600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37534000 0! #37534500 1! #37534600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37535000 0! #37535500 1! #37535600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37536000 0! #37536500 1! #37536600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37537000 0! #37537500 1! #37537600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37538000 0! #37538500 1! #37538600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37539000 0! #37539500 1! #37539600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37540000 0! #37540500 1! #37540600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37541000 0! #37541500 1! #37541600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37542000 0! #37542500 1! #37542600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37543000 0! #37543500 1! #37543600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37544000 0! #37544500 1! #37544600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37545000 0! #37545500 1! #37545600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37546000 0! #37546500 1! #37546600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37547000 0! #37547500 1! #37547600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37548000 0! #37548500 1! #37548600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37549000 0! #37549500 1! #37549600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37550000 0! #37550500 1! #37550600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37551000 0! #37551500 1! #37551600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37552000 0! #37552500 1! #37552600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37553000 0! #37553500 1! #37553600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37554000 0! #37554500 1! #37554600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37555000 0! #37555500 1! #37555600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37556000 0! #37556500 1! #37556600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37557000 0! #37557500 1! #37557600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37558000 0! #37558500 1! #37558600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37559000 0! #37559500 1! #37559600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37560000 0! #37560500 1! #37560600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37561000 0! #37561500 1! #37561600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37562000 0! #37562500 1! #37562600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37563000 0! #37563500 1! #37563600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37564000 0! #37564500 1! #37564600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #37565000 0! #37565500 1! #37565600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37566000 0! #37566500 1! #37566600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37567000 0! #37567500 1! #37567600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37568000 0! #37568500 1! #37568600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37569000 0! #37569500 1! #37569600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37570000 0! #37570500 1! #37570600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37571000 0! #37571500 1! #37571600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37572000 0! #37572500 1! #37572600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37573000 0! #37573500 1! #37573600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37574000 0! #37574500 1! #37574600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37575000 0! #37575500 1! #37575600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37576000 0! #37576500 1! #37576600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37577000 0! #37577500 1! #37577600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37578000 0! #37578500 1! #37578600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37579000 0! #37579500 1! #37579600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37580000 0! #37580500 1! #37580600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37581000 0! #37581500 1! #37581600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37582000 0! #37582500 1! #37582600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37583000 0! #37583500 1! #37583600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37584000 0! #37584500 1! #37584600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37585000 0! #37585500 1! #37585600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37586000 0! #37586500 1! #37586600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37587000 0! #37587500 1! #37587600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37588000 0! #37588500 1! #37588600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37589000 0! #37589500 1! #37589600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37590000 0! #37590500 1! #37590600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37591000 0! #37591500 1! #37591600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37592000 0! #37592500 1! #37592600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37593000 0! #37593500 1! #37593600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37594000 0! #37594500 1! #37594600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37595000 0! #37595500 1! #37595600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37596000 0! #37596500 1! #37596600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37597000 0! #37597500 1! #37597600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37598000 0! #37598500 1! #37598600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37599000 0! #37599500 1! #37599600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37600000 0! #37600500 1! #37600600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37601000 0! #37601500 1! #37601600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37602000 0! #37602500 1! #37602600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37603000 0! #37603500 1! #37603600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37604000 0! #37604500 1! #37604600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37605000 0! #37605500 1! #37605600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37606000 0! #37606500 1! #37606600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37607000 0! #37607500 1! #37607600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37608000 0! #37608500 1! #37608600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37609000 0! #37609500 1! #37609600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37610000 0! #37610500 1! #37610600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37611000 0! #37611500 1! #37611600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37612000 0! #37612500 1! #37612600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37613000 0! #37613500 1! #37613600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37614000 0! #37614500 1! #37614600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37615000 0! #37615500 1! #37615600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37616000 0! #37616500 1! #37616600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37617000 0! #37617500 1! #37617600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37618000 0! #37618500 1! #37618600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37619000 0! #37619500 1! #37619600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37620000 0! #37620500 1! #37620600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37621000 0! #37621500 1! #37621600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37622000 0! #37622500 1! #37622600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37623000 0! #37623500 1! #37623600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37624000 0! #37624500 1! #37624600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37625000 0! #37625500 1! #37625600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37626000 0! #37626500 1! #37626600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37627000 0! #37627500 1! #37627600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37628000 0! #37628500 1! #37628600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37629000 0! #37629500 1! #37629600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37630000 0! #37630500 1! #37630600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37631000 0! #37631500 1! #37631600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37632000 0! #37632500 1! #37632600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37633000 0! #37633500 1! #37633600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37634000 0! #37634500 1! #37634600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37635000 0! #37635500 1! #37635600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37636000 0! #37636500 1! #37636600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37637000 0! #37637500 1! #37637600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37638000 0! #37638500 1! #37638600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37639000 0! #37639500 1! #37639600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37640000 0! #37640500 1! #37640600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37641000 0! #37641500 1! #37641600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37642000 0! #37642500 1! #37642600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37643000 0! #37643500 1! #37643600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37644000 0! #37644500 1! #37644600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37645000 0! #37645500 1! #37645600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37646000 0! #37646500 1! #37646600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37647000 0! #37647500 1! #37647600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37648000 0! #37648500 1! #37648600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37649000 0! #37649500 1! #37649600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37650000 0! #37650500 1! #37650600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37651000 0! #37651500 1! #37651600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37652000 0! #37652500 1! #37652600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37653000 0! #37653500 1! #37653600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37654000 0! #37654500 1! #37654600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37655000 0! #37655500 1! #37655600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37656000 0! #37656500 1! #37656600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37657000 0! #37657500 1! #37657600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37658000 0! #37658500 1! #37658600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37659000 0! #37659500 1! #37659600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37660000 0! #37660500 1! #37660600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37661000 0! #37661500 1! #37661600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37662000 0! #37662500 1! #37662600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37663000 0! #37663500 1! #37663600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37664000 0! #37664500 1! #37664600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37665000 0! #37665500 1! #37665600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37666000 0! #37666500 1! #37666600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37667000 0! #37667500 1! #37667600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37668000 0! #37668500 1! #37668600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37669000 0! #37669500 1! #37669600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37670000 0! #37670500 1! #37670600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37671000 0! #37671500 1! #37671600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37672000 0! #37672500 1! #37672600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37673000 0! #37673500 1! #37673600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37674000 0! #37674500 1! #37674600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37675000 0! #37675500 1! #37675600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37676000 0! #37676500 1! #37676600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37677000 0! #37677500 1! #37677600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37678000 0! #37678500 1! #37678600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37679000 0! #37679500 1! #37679600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37680000 0! #37680500 1! #37680600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37681000 0! #37681500 1! #37681600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37682000 0! #37682500 1! #37682600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37683000 0! #37683500 1! #37683600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37684000 0! #37684500 1! #37684600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37685000 0! #37685500 1! #37685600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37686000 0! #37686500 1! #37686600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37687000 0! #37687500 1! #37687600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37688000 0! #37688500 1! #37688600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37689000 0! #37689500 1! #37689600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37690000 0! #37690500 1! #37690600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37691000 0! #37691500 1! #37691600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37692000 0! #37692500 1! #37692600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37693000 0! #37693500 1! #37693600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37694000 0! #37694500 1! #37694600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37695000 0! #37695500 1! #37695600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37696000 0! #37696500 1! #37696600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37697000 0! #37697500 1! #37697600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37698000 0! #37698500 1! #37698600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37699000 0! #37699500 1! #37699600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37700000 0! #37700500 1! #37700600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37701000 0! #37701500 1! #37701600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37702000 0! #37702500 1! #37702600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37703000 0! #37703500 1! #37703600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37704000 0! #37704500 1! #37704600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37705000 0! #37705500 1! #37705600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37706000 0! #37706500 1! #37706600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37707000 0! #37707500 1! #37707600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37708000 0! #37708500 1! #37708600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37709000 0! #37709500 1! #37709600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37710000 0! #37710500 1! #37710600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37711000 0! #37711500 1! #37711600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37712000 0! #37712500 1! #37712600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37713000 0! #37713500 1! #37713600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37714000 0! #37714500 1! #37714600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37715000 0! #37715500 1! #37715600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37716000 0! #37716500 1! #37716600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37717000 0! #37717500 1! #37717600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #37717700 bx1111111 ^ b10 g b11101000 c #37718000 0! #37718500 1! #37718600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37719000 0! #37719500 1! #37719600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37720000 0! #37720500 1! #37720600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37721000 0! #37721500 1! #37721600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37722000 0! #37722500 1! #37722600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37723000 0! #37723500 1! #37723600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37724000 0! #37724500 1! #37724600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37725000 0! #37725500 1! #37725600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37726000 0! #37726500 1! #37726600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37727000 0! #37727500 1! #37727600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37728000 0! #37728500 1! #37728600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37729000 0! #37729500 1! #37729600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37730000 0! #37730500 1! #37730600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37731000 0! #37731500 1! #37731600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37732000 0! #37732500 1! #37732600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37733000 0! #37733500 1! #37733600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37734000 0! #37734500 1! #37734600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37735000 0! #37735500 1! #37735600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37736000 0! #37736500 1! #37736600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37737000 0! #37737500 1! #37737600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37738000 0! #37738500 1! #37738600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37739000 0! #37739500 1! #37739600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37740000 0! #37740500 1! #37740600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37741000 0! #37741500 1! #37741600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37742000 0! #37742500 1! #37742600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37743000 0! #37743500 1! #37743600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37744000 0! #37744500 1! #37744600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37745000 0! #37745500 1! #37745600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37746000 0! #37746500 1! #37746600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37747000 0! #37747500 1! #37747600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37748000 0! #37748500 1! #37748600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37749000 0! #37749500 1! #37749600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37750000 0! #37750500 1! #37750600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37751000 0! #37751500 1! #37751600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37752000 0! #37752500 1! #37752600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37753000 0! #37753500 1! #37753600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37754000 0! #37754500 1! #37754600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37755000 0! #37755500 1! #37755600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37756000 0! #37756500 1! #37756600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37757000 0! #37757500 1! #37757600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37758000 0! #37758500 1! #37758600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37759000 0! #37759500 1! #37759600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37760000 0! #37760500 1! #37760600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37761000 0! #37761500 1! #37761600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37762000 0! #37762500 1! #37762600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37763000 0! #37763500 1! #37763600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37764000 0! #37764500 1! #37764600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37765000 0! #37765500 1! #37765600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37766000 0! #37766500 1! #37766600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37767000 0! #37767500 1! #37767600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37768000 0! #37768500 1! #37768600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37769000 0! #37769500 1! #37769600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37770000 0! #37770500 1! #37770600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37771000 0! #37771500 1! #37771600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37772000 0! #37772500 1! #37772600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37773000 0! #37773500 1! #37773600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37774000 0! #37774500 1! #37774600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37775000 0! #37775500 1! #37775600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37776000 0! #37776500 1! #37776600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37777000 0! #37777500 1! #37777600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37778000 0! #37778500 1! #37778600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37779000 0! #37779500 1! #37779600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37780000 0! #37780500 1! #37780600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37781000 0! #37781500 1! #37781600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37782000 0! #37782500 1! #37782600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37783000 0! #37783500 1! #37783600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37784000 0! #37784500 1! #37784600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37785000 0! #37785500 1! #37785600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37786000 0! #37786500 1! #37786600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37787000 0! #37787500 1! #37787600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37788000 0! #37788500 1! #37788600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37789000 0! #37789500 1! #37789600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37790000 0! #37790500 1! #37790600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37791000 0! #37791500 1! #37791600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37792000 0! #37792500 1! #37792600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37793000 0! #37793500 1! #37793600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37794000 0! #37794500 1! #37794600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37795000 0! #37795500 1! #37795600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37796000 0! #37796500 1! #37796600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37797000 0! #37797500 1! #37797600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37798000 0! #37798500 1! #37798600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37799000 0! #37799500 1! #37799600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37800000 0! #37800500 1! #37800600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37801000 0! #37801500 1! #37801600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37802000 0! #37802500 1! #37802600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37803000 0! #37803500 1! #37803600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37804000 0! #37804500 1! #37804600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37805000 0! #37805500 1! #37805600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37806000 0! #37806500 1! #37806600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37807000 0! #37807500 1! #37807600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37808000 0! #37808500 1! #37808600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37809000 0! #37809500 1! #37809600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37810000 0! #37810500 1! #37810600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37811000 0! #37811500 1! #37811600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37812000 0! #37812500 1! #37812600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37813000 0! #37813500 1! #37813600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37814000 0! #37814500 1! #37814600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37815000 0! #37815500 1! #37815600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37816000 0! #37816500 1! #37816600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37817000 0! #37817500 1! #37817600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37818000 0! #37818500 1! #37818600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37819000 0! #37819500 1! #37819600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #37820000 0! #37820500 1! #37820600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37821000 0! #37821500 1! #37821600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37822000 0! #37822500 1! #37822600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37823000 0! #37823500 1! #37823600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37824000 0! #37824500 1! #37824600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37825000 0! #37825500 1! #37825600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37826000 0! #37826500 1! #37826600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37827000 0! #37827500 1! #37827600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37828000 0! #37828500 1! #37828600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37829000 0! #37829500 1! #37829600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37830000 0! #37830500 1! #37830600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37831000 0! #37831500 1! #37831600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37832000 0! #37832500 1! #37832600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37833000 0! #37833500 1! #37833600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37834000 0! #37834500 1! #37834600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37835000 0! #37835500 1! #37835600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37836000 0! #37836500 1! #37836600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37837000 0! #37837500 1! #37837600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37838000 0! #37838500 1! #37838600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37839000 0! #37839500 1! #37839600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37840000 0! #37840500 1! #37840600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37841000 0! #37841500 1! #37841600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37842000 0! #37842500 1! #37842600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37843000 0! #37843500 1! #37843600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37844000 0! #37844500 1! #37844600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37845000 0! #37845500 1! #37845600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37846000 0! #37846500 1! #37846600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37847000 0! #37847500 1! #37847600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37848000 0! #37848500 1! #37848600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37849000 0! #37849500 1! #37849600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37850000 0! #37850500 1! #37850600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37851000 0! #37851500 1! #37851600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37852000 0! #37852500 1! #37852600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37853000 0! #37853500 1! #37853600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37854000 0! #37854500 1! #37854600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37855000 0! #37855500 1! #37855600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37856000 0! #37856500 1! #37856600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37857000 0! #37857500 1! #37857600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37858000 0! #37858500 1! #37858600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37859000 0! #37859500 1! #37859600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37860000 0! #37860500 1! #37860600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37861000 0! #37861500 1! #37861600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37862000 0! #37862500 1! #37862600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37863000 0! #37863500 1! #37863600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37864000 0! #37864500 1! #37864600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37865000 0! #37865500 1! #37865600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37866000 0! #37866500 1! #37866600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37867000 0! #37867500 1! #37867600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37868000 0! #37868500 1! #37868600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37869000 0! #37869500 1! #37869600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37870000 0! #37870500 1! #37870600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37871000 0! #37871500 1! #37871600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37872000 0! #37872500 1! #37872600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37873000 0! #37873500 1! #37873600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37874000 0! #37874500 1! #37874600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37875000 0! #37875500 1! #37875600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37876000 0! #37876500 1! #37876600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37877000 0! #37877500 1! #37877600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37878000 0! #37878500 1! #37878600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37879000 0! #37879500 1! #37879600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37880000 0! #37880500 1! #37880600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37881000 0! #37881500 1! #37881600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37882000 0! #37882500 1! #37882600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37883000 0! #37883500 1! #37883600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37884000 0! #37884500 1! #37884600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37885000 0! #37885500 1! #37885600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37886000 0! #37886500 1! #37886600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37887000 0! #37887500 1! #37887600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37888000 0! #37888500 1! #37888600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37889000 0! #37889500 1! #37889600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37890000 0! #37890500 1! #37890600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37891000 0! #37891500 1! #37891600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37892000 0! #37892500 1! #37892600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37893000 0! #37893500 1! #37893600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37894000 0! #37894500 1! #37894600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37895000 0! #37895500 1! #37895600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37896000 0! #37896500 1! #37896600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37897000 0! #37897500 1! #37897600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37898000 0! #37898500 1! #37898600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37899000 0! #37899500 1! #37899600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37900000 0! #37900500 1! #37900600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37901000 0! #37901500 1! #37901600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37902000 0! #37902500 1! #37902600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37903000 0! #37903500 1! #37903600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37904000 0! #37904500 1! #37904600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37905000 0! #37905500 1! #37905600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37906000 0! #37906500 1! #37906600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37907000 0! #37907500 1! #37907600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37908000 0! #37908500 1! #37908600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37909000 0! #37909500 1! #37909600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37910000 0! #37910500 1! #37910600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37911000 0! #37911500 1! #37911600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37912000 0! #37912500 1! #37912600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37913000 0! #37913500 1! #37913600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37914000 0! #37914500 1! #37914600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37915000 0! #37915500 1! #37915600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37916000 0! #37916500 1! #37916600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37917000 0! #37917500 1! #37917600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37918000 0! #37918500 1! #37918600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37919000 0! #37919500 1! #37919600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37920000 0! #37920500 1! #37920600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37921000 0! #37921500 1! #37921600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37922000 0! #37922500 1! #37922600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37923000 0! #37923500 1! #37923600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37924000 0! #37924500 1! #37924600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37925000 0! #37925500 1! #37925600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37926000 0! #37926500 1! #37926600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37927000 0! #37927500 1! #37927600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37928000 0! #37928500 1! #37928600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37929000 0! #37929500 1! #37929600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37930000 0! #37930500 1! #37930600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37931000 0! #37931500 1! #37931600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37932000 0! #37932500 1! #37932600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37933000 0! #37933500 1! #37933600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37934000 0! #37934500 1! #37934600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37935000 0! #37935500 1! #37935600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37936000 0! #37936500 1! #37936600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37937000 0! #37937500 1! #37937600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37938000 0! #37938500 1! #37938600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37939000 0! #37939500 1! #37939600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37940000 0! #37940500 1! #37940600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37941000 0! #37941500 1! #37941600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37942000 0! #37942500 1! #37942600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37943000 0! #37943500 1! #37943600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37944000 0! #37944500 1! #37944600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37945000 0! #37945500 1! #37945600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37946000 0! #37946500 1! #37946600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37947000 0! #37947500 1! #37947600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37948000 0! #37948500 1! #37948600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37949000 0! #37949500 1! #37949600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37950000 0! #37950500 1! #37950600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37951000 0! #37951500 1! #37951600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37952000 0! #37952500 1! #37952600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37953000 0! #37953500 1! #37953600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37954000 0! #37954500 1! #37954600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37955000 0! #37955500 1! #37955600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37956000 0! #37956500 1! #37956600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37957000 0! #37957500 1! #37957600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37958000 0! #37958500 1! #37958600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37959000 0! #37959500 1! #37959600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37960000 0! #37960500 1! #37960600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37961000 0! #37961500 1! #37961600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37962000 0! #37962500 1! #37962600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37963000 0! #37963500 1! #37963600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37964000 0! #37964500 1! #37964600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37965000 0! #37965500 1! #37965600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37966000 0! #37966500 1! #37966600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37967000 0! #37967500 1! #37967600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37968000 0! #37968500 1! #37968600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37969000 0! #37969500 1! #37969600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37970000 0! #37970500 1! #37970600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37971000 0! #37971500 1! #37971600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37972000 0! #37972500 1! #37972600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #37972700 b11111111 ^ b1 g b11010000 c #37973000 0! #37973500 1! #37973600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37974000 0! #37974500 1! #37974600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37975000 0! #37975500 1! #37975600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37976000 0! #37976500 1! #37976600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37977000 0! #37977500 1! #37977600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37978000 0! #37978500 1! #37978600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37979000 0! #37979500 1! #37979600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37980000 0! #37980500 1! #37980600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37981000 0! #37981500 1! #37981600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37982000 0! #37982500 1! #37982600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37983000 0! #37983500 1! #37983600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37984000 0! #37984500 1! #37984600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37985000 0! #37985500 1! #37985600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37986000 0! #37986500 1! #37986600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37987000 0! #37987500 1! #37987600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37988000 0! #37988500 1! #37988600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37989000 0! #37989500 1! #37989600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37990000 0! #37990500 1! #37990600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37991000 0! #37991500 1! #37991600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37992000 0! #37992500 1! #37992600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37993000 0! #37993500 1! #37993600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37994000 0! #37994500 1! #37994600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37995000 0! #37995500 1! #37995600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37996000 0! #37996500 1! #37996600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37997000 0! #37997500 1! #37997600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #37998000 0! #37998500 1! #37998600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #37999000 0! #37999500 1! #37999600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38000000 0! #38000500 1! #38000600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38001000 0! #38001500 1! #38001600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38002000 0! #38002500 1! #38002600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38003000 0! #38003500 1! #38003600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38004000 0! #38004500 1! #38004600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38005000 0! #38005500 1! #38005600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38006000 0! #38006500 1! #38006600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38007000 0! #38007500 1! #38007600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38008000 0! #38008500 1! #38008600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38009000 0! #38009500 1! #38009600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38010000 0! #38010500 1! #38010600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38011000 0! #38011500 1! #38011600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38012000 0! #38012500 1! #38012600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38013000 0! #38013500 1! #38013600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38014000 0! #38014500 1! #38014600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38015000 0! #38015500 1! #38015600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38016000 0! #38016500 1! #38016600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38017000 0! #38017500 1! #38017600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38018000 0! #38018500 1! #38018600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38019000 0! #38019500 1! #38019600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38020000 0! #38020500 1! #38020600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38021000 0! #38021500 1! #38021600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38022000 0! #38022500 1! #38022600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38023000 0! #38023500 1! #38023600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38024000 0! #38024500 1! #38024600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38025000 0! #38025500 1! #38025600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38026000 0! #38026500 1! #38026600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38027000 0! #38027500 1! #38027600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38028000 0! #38028500 1! #38028600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38029000 0! #38029500 1! #38029600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38030000 0! #38030500 1! #38030600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38031000 0! #38031500 1! #38031600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38032000 0! #38032500 1! #38032600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38033000 0! #38033500 1! #38033600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38034000 0! #38034500 1! #38034600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38035000 0! #38035500 1! #38035600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38036000 0! #38036500 1! #38036600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38037000 0! #38037500 1! #38037600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38038000 0! #38038500 1! #38038600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38039000 0! #38039500 1! #38039600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38040000 0! #38040500 1! #38040600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38041000 0! #38041500 1! #38041600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38042000 0! #38042500 1! #38042600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38043000 0! #38043500 1! #38043600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38044000 0! #38044500 1! #38044600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38045000 0! #38045500 1! #38045600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38046000 0! #38046500 1! #38046600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38047000 0! #38047500 1! #38047600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38048000 0! #38048500 1! #38048600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38049000 0! #38049500 1! #38049600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38050000 0! #38050500 1! #38050600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38051000 0! #38051500 1! #38051600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38052000 0! #38052500 1! #38052600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38053000 0! #38053500 1! #38053600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38054000 0! #38054500 1! #38054600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38055000 0! #38055500 1! #38055600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38056000 0! #38056500 1! #38056600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38057000 0! #38057500 1! #38057600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38058000 0! #38058500 1! #38058600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38059000 0! #38059500 1! #38059600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38060000 0! #38060500 1! #38060600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38061000 0! #38061500 1! #38061600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38062000 0! #38062500 1! #38062600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38063000 0! #38063500 1! #38063600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38064000 0! #38064500 1! #38064600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38065000 0! #38065500 1! #38065600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38066000 0! #38066500 1! #38066600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38067000 0! #38067500 1! #38067600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38068000 0! #38068500 1! #38068600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38069000 0! #38069500 1! #38069600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38070000 0! #38070500 1! #38070600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38071000 0! #38071500 1! #38071600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38072000 0! #38072500 1! #38072600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38073000 0! #38073500 1! #38073600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38074000 0! #38074500 1! #38074600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #38075000 0! #38075500 1! #38075600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38076000 0! #38076500 1! #38076600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38077000 0! #38077500 1! #38077600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38078000 0! #38078500 1! #38078600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38079000 0! #38079500 1! #38079600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38080000 0! #38080500 1! #38080600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38081000 0! #38081500 1! #38081600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38082000 0! #38082500 1! #38082600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38083000 0! #38083500 1! #38083600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38084000 0! #38084500 1! #38084600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38085000 0! #38085500 1! #38085600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38086000 0! #38086500 1! #38086600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38087000 0! #38087500 1! #38087600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38088000 0! #38088500 1! #38088600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38089000 0! #38089500 1! #38089600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38090000 0! #38090500 1! #38090600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38091000 0! #38091500 1! #38091600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38092000 0! #38092500 1! #38092600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38093000 0! #38093500 1! #38093600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38094000 0! #38094500 1! #38094600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38095000 0! #38095500 1! #38095600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38096000 0! #38096500 1! #38096600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38097000 0! #38097500 1! #38097600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38098000 0! #38098500 1! #38098600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38099000 0! #38099500 1! #38099600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38100000 0! #38100500 1! #38100600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38101000 0! #38101500 1! #38101600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38102000 0! #38102500 1! #38102600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38103000 0! #38103500 1! #38103600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38104000 0! #38104500 1! #38104600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38105000 0! #38105500 1! #38105600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38106000 0! #38106500 1! #38106600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38107000 0! #38107500 1! #38107600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38108000 0! #38108500 1! #38108600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38109000 0! #38109500 1! #38109600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38110000 0! #38110500 1! #38110600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38111000 0! #38111500 1! #38111600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38112000 0! #38112500 1! #38112600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38113000 0! #38113500 1! #38113600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38114000 0! #38114500 1! #38114600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38115000 0! #38115500 1! #38115600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38116000 0! #38116500 1! #38116600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38117000 0! #38117500 1! #38117600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38118000 0! #38118500 1! #38118600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38119000 0! #38119500 1! #38119600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38120000 0! #38120500 1! #38120600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38121000 0! #38121500 1! #38121600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38122000 0! #38122500 1! #38122600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38123000 0! #38123500 1! #38123600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38124000 0! #38124500 1! #38124600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38125000 0! #38125500 1! #38125600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38126000 0! #38126500 1! #38126600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38127000 0! #38127500 1! #38127600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38128000 0! #38128500 1! #38128600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38129000 0! #38129500 1! #38129600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38130000 0! #38130500 1! #38130600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38131000 0! #38131500 1! #38131600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38132000 0! #38132500 1! #38132600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38133000 0! #38133500 1! #38133600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38134000 0! #38134500 1! #38134600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38135000 0! #38135500 1! #38135600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38136000 0! #38136500 1! #38136600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38137000 0! #38137500 1! #38137600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38138000 0! #38138500 1! #38138600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38139000 0! #38139500 1! #38139600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38140000 0! #38140500 1! #38140600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38141000 0! #38141500 1! #38141600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38142000 0! #38142500 1! #38142600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38143000 0! #38143500 1! #38143600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38144000 0! #38144500 1! #38144600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38145000 0! #38145500 1! #38145600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38146000 0! #38146500 1! #38146600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38147000 0! #38147500 1! #38147600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38148000 0! #38148500 1! #38148600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38149000 0! #38149500 1! #38149600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38150000 0! #38150500 1! #38150600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38151000 0! #38151500 1! #38151600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38152000 0! #38152500 1! #38152600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38153000 0! #38153500 1! #38153600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38154000 0! #38154500 1! #38154600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38155000 0! #38155500 1! #38155600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38156000 0! #38156500 1! #38156600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38157000 0! #38157500 1! #38157600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38158000 0! #38158500 1! #38158600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38159000 0! #38159500 1! #38159600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38160000 0! #38160500 1! #38160600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38161000 0! #38161500 1! #38161600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38162000 0! #38162500 1! #38162600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38163000 0! #38163500 1! #38163600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38164000 0! #38164500 1! #38164600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38165000 0! #38165500 1! #38165600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38166000 0! #38166500 1! #38166600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38167000 0! #38167500 1! #38167600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38168000 0! #38168500 1! #38168600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38169000 0! #38169500 1! #38169600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38170000 0! #38170500 1! #38170600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38171000 0! #38171500 1! #38171600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38172000 0! #38172500 1! #38172600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38173000 0! #38173500 1! #38173600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38174000 0! #38174500 1! #38174600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38175000 0! #38175500 1! #38175600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38176000 0! #38176500 1! #38176600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38177000 0! #38177500 1! #38177600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38178000 0! #38178500 1! #38178600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38179000 0! #38179500 1! #38179600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38180000 0! #38180500 1! #38180600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38181000 0! #38181500 1! #38181600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38182000 0! #38182500 1! #38182600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38183000 0! #38183500 1! #38183600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38184000 0! #38184500 1! #38184600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38185000 0! #38185500 1! #38185600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38186000 0! #38186500 1! #38186600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38187000 0! #38187500 1! #38187600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38188000 0! #38188500 1! #38188600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38189000 0! #38189500 1! #38189600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38190000 0! #38190500 1! #38190600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38191000 0! #38191500 1! #38191600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38192000 0! #38192500 1! #38192600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38193000 0! #38193500 1! #38193600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38194000 0! #38194500 1! #38194600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38195000 0! #38195500 1! #38195600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38196000 0! #38196500 1! #38196600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38197000 0! #38197500 1! #38197600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38198000 0! #38198500 1! #38198600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38199000 0! #38199500 1! #38199600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38200000 0! #38200500 1! #38200600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38201000 0! #38201500 1! #38201600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38202000 0! #38202500 1! #38202600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38203000 0! #38203500 1! #38203600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38204000 0! #38204500 1! #38204600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38205000 0! #38205500 1! #38205600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38206000 0! #38206500 1! #38206600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38207000 0! #38207500 1! #38207600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38208000 0! #38208500 1! #38208600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38209000 0! #38209500 1! #38209600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38210000 0! #38210500 1! #38210600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38211000 0! #38211500 1! #38211600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38212000 0! #38212500 1! #38212600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38213000 0! #38213500 1! #38213600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38214000 0! #38214500 1! #38214600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38215000 0! #38215500 1! #38215600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38216000 0! #38216500 1! #38216600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38217000 0! #38217500 1! #38217600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38218000 0! #38218500 1! #38218600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38219000 0! #38219500 1! #38219600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38220000 0! #38220500 1! #38220600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38221000 0! #38221500 1! #38221600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38222000 0! #38222500 1! #38222600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38223000 0! #38223500 1! #38223600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38224000 0! #38224500 1! #38224600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38225000 0! #38225500 1! #38225600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38226000 0! #38226500 1! #38226600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38227000 0! #38227500 1! #38227600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #38227700 b0 g b10100000 c 1e 1h #38228000 0! #38228500 1! #38228600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38229000 0! #38229500 1! #38229600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38230000 0! #38230500 1! #38230600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38231000 0! #38231500 1! #38231600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38232000 0! #38232500 1! #38232600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38233000 0! #38233500 1! #38233600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38234000 0! #38234500 1! #38234600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38235000 0! #38235500 1! #38235600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38236000 0! #38236500 1! #38236600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38237000 0! #38237500 1! #38237600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38238000 0! #38238500 1! #38238600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38239000 0! #38239500 1! #38239600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38240000 0! #38240500 1! #38240600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38241000 0! #38241500 1! #38241600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38242000 0! #38242500 1! #38242600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38243000 0! #38243500 1! #38243600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38244000 0! #38244500 1! #38244600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38245000 0! #38245500 1! #38245600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38246000 0! #38246500 1! #38246600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38247000 0! #38247500 1! #38247600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38248000 0! #38248500 1! #38248600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38249000 0! #38249500 1! #38249600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38250000 0! #38250500 1! #38250600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38251000 0! #38251500 1! #38251600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38252000 0! #38252500 1! #38252600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38253000 0! #38253500 1! #38253600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38254000 0! #38254500 1! #38254600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38255000 0! #38255500 1! #38255600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38256000 0! #38256500 1! #38256600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38257000 0! #38257500 1! #38257600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38258000 0! #38258500 1! #38258600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38259000 0! #38259500 1! #38259600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38260000 0! #38260500 1! #38260600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38261000 0! #38261500 1! #38261600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38262000 0! #38262500 1! #38262600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38263000 0! #38263500 1! #38263600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38264000 0! #38264500 1! #38264600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38265000 0! #38265500 1! #38265600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38266000 0! #38266500 1! #38266600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38267000 0! #38267500 1! #38267600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38268000 0! #38268500 1! #38268600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38269000 0! #38269500 1! #38269600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38270000 0! #38270500 1! #38270600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38271000 0! #38271500 1! #38271600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38272000 0! #38272500 1! #38272600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38273000 0! #38273500 1! #38273600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38274000 0! #38274500 1! #38274600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38275000 0! #38275500 1! #38275600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38276000 0! #38276500 1! #38276600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38277000 0! #38277500 1! #38277600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38278000 0! #38278500 1! #38278600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38279000 0! #38279500 1! #38279600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38280000 0! #38280500 1! #38280600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38281000 0! #38281500 1! #38281600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38282000 0! #38282500 1! #38282600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38283000 0! #38283500 1! #38283600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38284000 0! #38284500 1! #38284600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38285000 0! #38285500 1! #38285600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38286000 0! #38286500 1! #38286600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38287000 0! #38287500 1! #38287600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38288000 0! #38288500 1! #38288600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38289000 0! #38289500 1! #38289600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38290000 0! #38290500 1! #38290600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38291000 0! #38291500 1! #38291600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38292000 0! #38292500 1! #38292600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38293000 0! #38293500 1! #38293600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38294000 0! #38294500 1! #38294600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38295000 0! #38295500 1! #38295600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38296000 0! #38296500 1! #38296600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38297000 0! #38297500 1! #38297600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38298000 0! #38298500 1! #38298600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38299000 0! #38299500 1! #38299600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38300000 0! #38300500 1! #38300600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38301000 0! #38301500 1! #38301600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38302000 0! #38302500 1! #38302600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38303000 0! #38303500 1! #38303600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38304000 0! #38304500 1! #38304600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38305000 0! #38305500 1! #38305600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38306000 0! #38306500 1! #38306600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38307000 0! #38307500 1! #38307600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38308000 0! #38308500 1! #38308600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38309000 0! #38309500 1! #38309600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38310000 0! #38310500 1! #38310600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38311000 0! #38311500 1! #38311600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38312000 0! #38312500 1! #38312600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38313000 0! #38313500 1! #38313600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38314000 0! #38314500 1! #38314600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38315000 0! #38315500 1! #38315600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38316000 0! #38316500 1! #38316600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38317000 0! #38317500 1! #38317600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38318000 0! #38318500 1! #38318600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38319000 0! #38319500 1! #38319600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38320000 0! #38320500 1! #38320600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38321000 0! #38321500 1! #38321600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38322000 0! #38322500 1! #38322600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38323000 0! #38323500 1! #38323600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38324000 0! #38324500 1! #38324600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38325000 0! #38325500 1! #38325600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38326000 0! #38326500 1! #38326600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38327000 0! #38327500 1! #38327600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38328000 0! #38328500 1! #38328600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38329000 0! #38329500 1! #38329600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #38329700 b1 q 0d 0j #38330000 0! #38330500 1! #38330600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38331000 0! #38331500 1! #38331600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38332000 0! #38332500 1! #38332600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38333000 0! #38333500 1! #38333600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38334000 0! #38334500 1! #38334600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38335000 0! #38335500 1! #38335600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38336000 0! #38336500 1! #38336600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38337000 0! #38337500 1! #38337600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38338000 0! #38338500 1! #38338600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38339000 0! #38339500 1! #38339600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38340000 0! #38340500 1! #38340600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38341000 0! #38341500 1! #38341600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38342000 0! #38342500 1! #38342600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38343000 0! #38343500 1! #38343600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38344000 0! #38344500 1! #38344600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38345000 0! #38345500 1! #38345600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38346000 0! #38346500 1! #38346600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38347000 0! #38347500 1! #38347600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38348000 0! #38348500 1! #38348600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38349000 0! #38349500 1! #38349600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38350000 0! #38350500 1! #38350600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38351000 0! #38351500 1! #38351600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38352000 0! #38352500 1! #38352600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38353000 0! #38353500 1! #38353600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38354000 0! #38354500 1! #38354600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38355000 0! #38355500 1! #38355600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38356000 0! #38356500 1! #38356600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38357000 0! #38357500 1! #38357600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38358000 0! #38358500 1! #38358600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38359000 0! #38359500 1! #38359600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38360000 0! #38360500 1! #38360600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38361000 0! #38361500 1! #38361600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38362000 0! #38362500 1! #38362600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38363000 0! #38363500 1! #38363600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38364000 0! #38364500 1! #38364600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38365000 0! #38365500 1! #38365600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38366000 0! #38366500 1! #38366600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38367000 0! #38367500 1! #38367600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38368000 0! #38368500 1! #38368600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38369000 0! #38369500 1! #38369600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38370000 0! #38370500 1! #38370600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38371000 0! #38371500 1! #38371600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38372000 0! #38372500 1! #38372600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38373000 0! #38373500 1! #38373600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38374000 0! #38374500 1! #38374600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38375000 0! #38375500 1! #38375600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38376000 0! #38376500 1! #38376600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38377000 0! #38377500 1! #38377600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38378000 0! #38378500 1! #38378600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38379000 0! #38379500 1! #38379600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38380000 0! #38380500 1! #38380600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38381000 0! #38381500 1! #38381600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38382000 0! #38382500 1! #38382600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38383000 0! #38383500 1! #38383600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38384000 0! #38384500 1! #38384600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38385000 0! #38385500 1! #38385600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38386000 0! #38386500 1! #38386600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38387000 0! #38387500 1! #38387600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38388000 0! #38388500 1! #38388600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38389000 0! #38389500 1! #38389600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38390000 0! #38390500 1! #38390600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38391000 0! #38391500 1! #38391600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38392000 0! #38392500 1! #38392600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38393000 0! #38393500 1! #38393600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38394000 0! #38394500 1! #38394600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38395000 0! #38395500 1! #38395600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38396000 0! #38396500 1! #38396600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38397000 0! #38397500 1! #38397600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38398000 0! #38398500 1! #38398600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38399000 0! #38399500 1! #38399600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38400000 0! #38400500 1! #38400600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38401000 0! #38401500 1! #38401600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38402000 0! #38402500 1! #38402600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38403000 0! #38403500 1! #38403600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38404000 0! #38404500 1! #38404600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38405000 0! #38405500 1! #38405600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38406000 0! #38406500 1! #38406600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38407000 0! #38407500 1! #38407600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38408000 0! #38408500 1! #38408600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38409000 0! #38409500 1! #38409600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38410000 0! #38410500 1! #38410600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38411000 0! #38411500 1! #38411600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38412000 0! #38412500 1! #38412600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38413000 0! #38413500 1! #38413600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38414000 0! #38414500 1! #38414600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38415000 0! #38415500 1! #38415600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38416000 0! #38416500 1! #38416600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38417000 0! #38417500 1! #38417600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38418000 0! #38418500 1! #38418600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38419000 0! #38419500 1! #38419600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38420000 0! #38420500 1! #38420600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38421000 0! #38421500 1! #38421600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38422000 0! #38422500 1! #38422600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38423000 0! #38423500 1! #38423600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38424000 0! #38424500 1! #38424600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38425000 0! #38425500 1! #38425600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38426000 0! #38426500 1! #38426600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38427000 0! #38427500 1! #38427600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38428000 0! #38428500 1! #38428600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38429000 0! #38429500 1! #38429600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38430000 0! #38430500 1! #38430600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38431000 0! #38431500 1! #38431600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1Q #38432000 0! #38432500 1! #38432600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38433000 0! #38433500 1! #38433600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38434000 0! #38434500 1! #38434600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38435000 0! #38435500 1! #38435600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38436000 0! #38436500 1! #38436600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38437000 0! #38437500 1! #38437600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38438000 0! #38438500 1! #38438600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38439000 0! #38439500 1! #38439600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38440000 0! #38440500 1! #38440600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38441000 0! #38441500 1! #38441600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38442000 0! #38442500 1! #38442600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38443000 0! #38443500 1! #38443600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38444000 0! #38444500 1! #38444600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38445000 0! #38445500 1! #38445600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38446000 0! #38446500 1! #38446600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38447000 0! #38447500 1! #38447600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38448000 0! #38448500 1! #38448600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38449000 0! #38449500 1! #38449600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38450000 0! #38450500 1! #38450600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38451000 0! #38451500 1! #38451600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38452000 0! #38452500 1! #38452600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38453000 0! #38453500 1! #38453600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38454000 0! #38454500 1! #38454600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38455000 0! #38455500 1! #38455600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38456000 0! #38456500 1! #38456600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38457000 0! #38457500 1! #38457600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38458000 0! #38458500 1! #38458600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38459000 0! #38459500 1! #38459600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38460000 0! #38460500 1! #38460600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38461000 0! #38461500 1! #38461600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38462000 0! #38462500 1! #38462600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38463000 0! #38463500 1! #38463600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38464000 0! #38464500 1! #38464600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38465000 0! #38465500 1! #38465600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38466000 0! #38466500 1! #38466600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38467000 0! #38467500 1! #38467600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38468000 0! #38468500 1! #38468600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38469000 0! #38469500 1! #38469600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38470000 0! #38470500 1! #38470600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38471000 0! #38471500 1! #38471600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38472000 0! #38472500 1! #38472600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38473000 0! #38473500 1! #38473600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38474000 0! #38474500 1! #38474600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38475000 0! #38475500 1! #38475600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38476000 0! #38476500 1! #38476600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38477000 0! #38477500 1! #38477600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38478000 0! #38478500 1! #38478600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38479000 0! #38479500 1! #38479600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38480000 0! #38480500 1! #38480600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38481000 0! #38481500 1! #38481600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38482000 0! #38482500 1! #38482600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #38482700 b111 g b1000000 c 0e 0h #38483000 0! #38483500 1! #38483600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38484000 0! #38484500 1! #38484600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38485000 0! #38485500 1! #38485600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38486000 0! #38486500 1! #38486600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38487000 0! #38487500 1! #38487600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38488000 0! #38488500 1! #38488600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38489000 0! #38489500 1! #38489600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38490000 0! #38490500 1! #38490600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38491000 0! #38491500 1! #38491600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38492000 0! #38492500 1! #38492600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38493000 0! #38493500 1! #38493600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38494000 0! #38494500 1! #38494600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38495000 0! #38495500 1! #38495600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38496000 0! #38496500 1! #38496600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38497000 0! #38497500 1! #38497600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38498000 0! #38498500 1! #38498600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38499000 0! #38499500 1! #38499600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38500000 0! #38500500 1! #38500600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38501000 0! #38501500 1! #38501600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38502000 0! #38502500 1! #38502600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38503000 0! #38503500 1! #38503600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38504000 0! #38504500 1! #38504600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38505000 0! #38505500 1! #38505600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38506000 0! #38506500 1! #38506600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38507000 0! #38507500 1! #38507600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38508000 0! #38508500 1! #38508600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38509000 0! #38509500 1! #38509600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38510000 0! #38510500 1! #38510600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38511000 0! #38511500 1! #38511600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38512000 0! #38512500 1! #38512600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38513000 0! #38513500 1! #38513600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38514000 0! #38514500 1! #38514600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38515000 0! #38515500 1! #38515600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38516000 0! #38516500 1! #38516600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38517000 0! #38517500 1! #38517600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38518000 0! #38518500 1! #38518600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38519000 0! #38519500 1! #38519600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38520000 0! #38520500 1! #38520600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38521000 0! #38521500 1! #38521600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38522000 0! #38522500 1! #38522600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38523000 0! #38523500 1! #38523600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38524000 0! #38524500 1! #38524600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38525000 0! #38525500 1! #38525600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38526000 0! #38526500 1! #38526600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38527000 0! #38527500 1! #38527600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38528000 0! #38528500 1! #38528600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38529000 0! #38529500 1! #38529600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38530000 0! #38530500 1! #38530600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38531000 0! #38531500 1! #38531600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38532000 0! #38532500 1! #38532600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38533000 0! #38533500 1! #38533600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38534000 0! #38534500 1! #38534600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38535000 0! #38535500 1! #38535600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38536000 0! #38536500 1! #38536600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38537000 0! #38537500 1! #38537600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38538000 0! #38538500 1! #38538600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38539000 0! #38539500 1! #38539600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38540000 0! #38540500 1! #38540600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38541000 0! #38541500 1! #38541600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38542000 0! #38542500 1! #38542600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38543000 0! #38543500 1! #38543600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38544000 0! #38544500 1! #38544600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38545000 0! #38545500 1! #38545600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38546000 0! #38546500 1! #38546600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38547000 0! #38547500 1! #38547600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38548000 0! #38548500 1! #38548600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38549000 0! #38549500 1! #38549600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38550000 0! #38550500 1! #38550600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38551000 0! #38551500 1! #38551600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38552000 0! #38552500 1! #38552600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38553000 0! #38553500 1! #38553600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38554000 0! #38554500 1! #38554600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38555000 0! #38555500 1! #38555600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38556000 0! #38556500 1! #38556600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38557000 0! #38557500 1! #38557600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38558000 0! #38558500 1! #38558600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38559000 0! #38559500 1! #38559600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38560000 0! #38560500 1! #38560600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38561000 0! #38561500 1! #38561600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38562000 0! #38562500 1! #38562600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38563000 0! #38563500 1! #38563600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38564000 0! #38564500 1! #38564600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38565000 0! #38565500 1! #38565600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38566000 0! #38566500 1! #38566600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38567000 0! #38567500 1! #38567600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38568000 0! #38568500 1! #38568600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38569000 0! #38569500 1! #38569600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38570000 0! #38570500 1! #38570600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38571000 0! #38571500 1! #38571600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38572000 0! #38572500 1! #38572600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38573000 0! #38573500 1! #38573600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38574000 0! #38574500 1! #38574600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38575000 0! #38575500 1! #38575600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38576000 0! #38576500 1! #38576600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38577000 0! #38577500 1! #38577600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38578000 0! #38578500 1! #38578600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38579000 0! #38579500 1! #38579600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38580000 0! #38580500 1! #38580600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38581000 0! #38581500 1! #38581600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38582000 0! #38582500 1! #38582600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38583000 0! #38583500 1! #38583600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38584000 0! #38584500 1! #38584600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #38584700 1j b10 q 1i 1O #38585000 0! #38585500 1! #38585600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38586000 0! #38586500 1! #38586600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H b1000011 C #38587000 0! #38587500 1! #38587600 b1000011 J xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38588000 0! #38588500 1! #38588600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B b1000001 C 1H #38589000 0! #38589500 1! #38589600 b1000001 J xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38590000 0! #38590500 1! #38590600 1E 1F 1G b10000 D 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 0@ 1A 1B b0xxxxxxx C 1H #38591000 0! #38591500 1! #38591600 xE bx D x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38591700 1E 1F 1G b10000 D 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B b1000001 C 1H #38592000 0! #38592500 1! #38592600 xE bx D x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38593000 0! #38593500 1! #38593600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H b1000011 C #38594000 0! #38594500 1! #38594600 b1000011 J xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38595000 0! #38595500 1! #38595600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38596000 0! #38596500 1! #38596600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38597000 0! #38597500 1! #38597600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38598000 0! #38598500 1! #38598600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38599000 0! #38599500 1! #38599600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38600000 0! #38600500 1! #38600600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38601000 0! #38601500 1! #38601600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38602000 0! #38602500 1! #38602600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38603000 0! #38603500 1! #38603600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38604000 0! #38604500 1! #38604600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38605000 0! #38605500 1! #38605600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38606000 0! #38606500 1! #38606600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38607000 0! #38607500 1! #38607600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38608000 0! #38608500 1! #38608600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38609000 0! #38609500 1! #38609600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38610000 0! #38610500 1! #38610600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38611000 0! #38611500 1! #38611600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38612000 0! #38612500 1! #38612600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38613000 0! #38613500 1! #38613600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38614000 0! #38614500 1! #38614600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38615000 0! #38615500 1! #38615600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38616000 0! #38616500 1! #38616600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38617000 0! #38617500 1! #38617600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38618000 0! #38618500 1! #38618600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38619000 0! #38619500 1! #38619600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38620000 0! #38620500 1! #38620600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38621000 0! #38621500 1! #38621600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38622000 0! #38622500 1! #38622600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38623000 0! #38623500 1! #38623600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38624000 0! #38624500 1! #38624600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38625000 0! #38625500 1! #38625600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38626000 0! #38626500 1! #38626600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38627000 0! #38627500 1! #38627600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38628000 0! #38628500 1! #38628600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38629000 0! #38629500 1! #38629600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38630000 0! #38630500 1! #38630600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38631000 0! #38631500 1! #38631600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38632000 0! #38632500 1! #38632600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38633000 0! #38633500 1! #38633600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38634000 0! #38634500 1! #38634600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38635000 0! #38635500 1! #38635600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38636000 0! #38636500 1! #38636600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38637000 0! #38637500 1! #38637600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38638000 0! #38638500 1! #38638600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38639000 0! #38639500 1! #38639600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38640000 0! #38640500 1! #38640600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38641000 0! #38641500 1! #38641600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38642000 0! #38642500 1! #38642600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38643000 0! #38643500 1! #38643600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38644000 0! #38644500 1! #38644600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38645000 0! #38645500 1! #38645600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38646000 0! #38646500 1! #38646600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38647000 0! #38647500 1! #38647600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38648000 0! #38648500 1! #38648600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38649000 0! #38649500 1! #38649600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38650000 0! #38650500 1! #38650600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38651000 0! #38651500 1! #38651600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38652000 0! #38652500 1! #38652600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38653000 0! #38653500 1! #38653600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38654000 0! #38654500 1! #38654600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38655000 0! #38655500 1! #38655600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38656000 0! #38656500 1! #38656600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38657000 0! #38657500 1! #38657600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38658000 0! #38658500 1! #38658600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38659000 0! #38659500 1! #38659600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38660000 0! #38660500 1! #38660600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38661000 0! #38661500 1! #38661600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38662000 0! #38662500 1! #38662600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38663000 0! #38663500 1! #38663600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38664000 0! #38664500 1! #38664600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38665000 0! #38665500 1! #38665600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38666000 0! #38666500 1! #38666600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38667000 0! #38667500 1! #38667600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38668000 0! #38668500 1! #38668600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38669000 0! #38669500 1! #38669600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38670000 0! #38670500 1! #38670600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38671000 0! #38671500 1! #38671600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38672000 0! #38672500 1! #38672600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38673000 0! #38673500 1! #38673600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38674000 0! #38674500 1! #38674600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38675000 0! #38675500 1! #38675600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38676000 0! #38676500 1! #38676600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38677000 0! #38677500 1! #38677600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38678000 0! #38678500 1! #38678600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38679000 0! #38679500 1! #38679600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38680000 0! #38680500 1! #38680600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38681000 0! #38681500 1! #38681600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38682000 0! #38682500 1! #38682600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38683000 0! #38683500 1! #38683600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38684000 0! #38684500 1! #38684600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38685000 0! #38685500 1! #38685600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38686000 0! #38686500 1! #38686600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0Q 0O #38687000 0! #38687500 1! #38687600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38688000 0! #38688500 1! #38688600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38689000 0! #38689500 1! #38689600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38690000 0! #38690500 1! #38690600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38691000 0! #38691500 1! #38691600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38692000 0! #38692500 1! #38692600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38693000 0! #38693500 1! #38693600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38694000 0! #38694500 1! #38694600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38695000 0! #38695500 1! #38695600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38696000 0! #38696500 1! #38696600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38697000 0! #38697500 1! #38697600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38698000 0! #38698500 1! #38698600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38699000 0! #38699500 1! #38699600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38700000 0! #38700500 1! #38700600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38701000 0! #38701500 1! #38701600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38702000 0! #38702500 1! #38702600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38703000 0! #38703500 1! #38703600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38704000 0! #38704500 1! #38704600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38705000 0! #38705500 1! #38705600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38706000 0! #38706500 1! #38706600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38707000 0! #38707500 1! #38707600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38708000 0! #38708500 1! #38708600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38709000 0! #38709500 1! #38709600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38710000 0! #38710500 1! #38710600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38711000 0! #38711500 1! #38711600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38712000 0! #38712500 1! #38712600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38713000 0! #38713500 1! #38713600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38714000 0! #38714500 1! #38714600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38715000 0! #38715500 1! #38715600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38716000 0! #38716500 1! #38716600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38717000 0! #38717500 1! #38717600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38718000 0! #38718500 1! #38718600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38719000 0! #38719500 1! #38719600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38720000 0! #38720500 1! #38720600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38721000 0! #38721500 1! #38721600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38722000 0! #38722500 1! #38722600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38723000 0! #38723500 1! #38723600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38724000 0! #38724500 1! #38724600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38725000 0! #38725500 1! #38725600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38726000 0! #38726500 1! #38726600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38727000 0! #38727500 1! #38727600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38728000 0! #38728500 1! #38728600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38729000 0! #38729500 1! #38729600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38730000 0! #38730500 1! #38730600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38731000 0! #38731500 1! #38731600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38732000 0! #38732500 1! #38732600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38733000 0! #38733500 1! #38733600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38734000 0! #38734500 1! #38734600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38735000 0! #38735500 1! #38735600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38736000 0! #38736500 1! #38736600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38737000 0! #38737500 1! #38737600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #38737700 b10000000 c #38738000 0! #38738500 1! #38738600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38739000 0! #38739500 1! #38739600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38740000 0! #38740500 1! #38740600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38741000 0! #38741500 1! #38741600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38742000 0! #38742500 1! #38742600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38743000 0! #38743500 1! #38743600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38744000 0! #38744500 1! #38744600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38745000 0! #38745500 1! #38745600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38746000 0! #38746500 1! #38746600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38747000 0! #38747500 1! #38747600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38748000 0! #38748500 1! #38748600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38749000 0! #38749500 1! #38749600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38750000 0! #38750500 1! #38750600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38751000 0! #38751500 1! #38751600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38752000 0! #38752500 1! #38752600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38753000 0! #38753500 1! #38753600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38754000 0! #38754500 1! #38754600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38755000 0! #38755500 1! #38755600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38756000 0! #38756500 1! #38756600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38757000 0! #38757500 1! #38757600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38758000 0! #38758500 1! #38758600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38759000 0! #38759500 1! #38759600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38760000 0! #38760500 1! #38760600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38761000 0! #38761500 1! #38761600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38762000 0! #38762500 1! #38762600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38763000 0! #38763500 1! #38763600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38764000 0! #38764500 1! #38764600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38765000 0! #38765500 1! #38765600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38766000 0! #38766500 1! #38766600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38767000 0! #38767500 1! #38767600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38768000 0! #38768500 1! #38768600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38769000 0! #38769500 1! #38769600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38770000 0! #38770500 1! #38770600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38771000 0! #38771500 1! #38771600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38772000 0! #38772500 1! #38772600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38773000 0! #38773500 1! #38773600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38774000 0! #38774500 1! #38774600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38775000 0! #38775500 1! #38775600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38776000 0! #38776500 1! #38776600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38777000 0! #38777500 1! #38777600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38778000 0! #38778500 1! #38778600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38779000 0! #38779500 1! #38779600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38780000 0! #38780500 1! #38780600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38781000 0! #38781500 1! #38781600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38782000 0! #38782500 1! #38782600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38783000 0! #38783500 1! #38783600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38784000 0! #38784500 1! #38784600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38785000 0! #38785500 1! #38785600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38786000 0! #38786500 1! #38786600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38787000 0! #38787500 1! #38787600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38788000 0! #38788500 1! #38788600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38789000 0! #38789500 1! #38789600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38790000 0! #38790500 1! #38790600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38791000 0! #38791500 1! #38791600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38792000 0! #38792500 1! #38792600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38793000 0! #38793500 1! #38793600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38794000 0! #38794500 1! #38794600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38795000 0! #38795500 1! #38795600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38796000 0! #38796500 1! #38796600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38797000 0! #38797500 1! #38797600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38798000 0! #38798500 1! #38798600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38799000 0! #38799500 1! #38799600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38800000 0! #38800500 1! #38800600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38801000 0! #38801500 1! #38801600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38802000 0! #38802500 1! #38802600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38803000 0! #38803500 1! #38803600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38804000 0! #38804500 1! #38804600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38805000 0! #38805500 1! #38805600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38806000 0! #38806500 1! #38806600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38807000 0! #38807500 1! #38807600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38808000 0! #38808500 1! #38808600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38809000 0! #38809500 1! #38809600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38810000 0! #38810500 1! #38810600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38811000 0! #38811500 1! #38811600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38812000 0! #38812500 1! #38812600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38813000 0! #38813500 1! #38813600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38814000 0! #38814500 1! #38814600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38815000 0! #38815500 1! #38815600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38816000 0! #38816500 1! #38816600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38817000 0! #38817500 1! #38817600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38818000 0! #38818500 1! #38818600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38819000 0! #38819500 1! #38819600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38820000 0! #38820500 1! #38820600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38821000 0! #38821500 1! #38821600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38822000 0! #38822500 1! #38822600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38823000 0! #38823500 1! #38823600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38824000 0! #38824500 1! #38824600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38825000 0! #38825500 1! #38825600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38826000 0! #38826500 1! #38826600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38827000 0! #38827500 1! #38827600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38828000 0! #38828500 1! #38828600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38829000 0! #38829500 1! #38829600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38830000 0! #38830500 1! #38830600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38831000 0! #38831500 1! #38831600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38832000 0! #38832500 1! #38832600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38833000 0! #38833500 1! #38833600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38834000 0! #38834500 1! #38834600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38835000 0! #38835500 1! #38835600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38836000 0! #38836500 1! #38836600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38837000 0! #38837500 1! #38837600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38838000 0! #38838500 1! #38838600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38839000 0! #38839500 1! #38839600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #38839700 0i #38840000 0! #38840500 1! #38840600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38841000 0! #38841500 1! #38841600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38842000 0! #38842500 1! #38842600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38843000 0! #38843500 1! #38843600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38844000 0! #38844500 1! #38844600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38845000 0! #38845500 1! #38845600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38846000 0! #38846500 1! #38846600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38847000 0! #38847500 1! #38847600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38848000 0! #38848500 1! #38848600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38849000 0! #38849500 1! #38849600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38850000 0! #38850500 1! #38850600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38851000 0! #38851500 1! #38851600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38852000 0! #38852500 1! #38852600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38853000 0! #38853500 1! #38853600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38854000 0! #38854500 1! #38854600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38855000 0! #38855500 1! #38855600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38856000 0! #38856500 1! #38856600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38857000 0! #38857500 1! #38857600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38858000 0! #38858500 1! #38858600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38859000 0! #38859500 1! #38859600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38860000 0! #38860500 1! #38860600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38861000 0! #38861500 1! #38861600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38862000 0! #38862500 1! #38862600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38863000 0! #38863500 1! #38863600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38864000 0! #38864500 1! #38864600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38865000 0! #38865500 1! #38865600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38866000 0! #38866500 1! #38866600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38867000 0! #38867500 1! #38867600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38868000 0! #38868500 1! #38868600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38869000 0! #38869500 1! #38869600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38870000 0! #38870500 1! #38870600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38871000 0! #38871500 1! #38871600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38872000 0! #38872500 1! #38872600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38873000 0! #38873500 1! #38873600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38874000 0! #38874500 1! #38874600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38875000 0! #38875500 1! #38875600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38876000 0! #38876500 1! #38876600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38877000 0! #38877500 1! #38877600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38878000 0! #38878500 1! #38878600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38879000 0! #38879500 1! #38879600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38880000 0! #38880500 1! #38880600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38881000 0! #38881500 1! #38881600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38882000 0! #38882500 1! #38882600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38883000 0! #38883500 1! #38883600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38884000 0! #38884500 1! #38884600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38885000 0! #38885500 1! #38885600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38886000 0! #38886500 1! #38886600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38887000 0! #38887500 1! #38887600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38888000 0! #38888500 1! #38888600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38889000 0! #38889500 1! #38889600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38890000 0! #38890500 1! #38890600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38891000 0! #38891500 1! #38891600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38892000 0! #38892500 1! #38892600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38893000 0! #38893500 1! #38893600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38894000 0! #38894500 1! #38894600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38895000 0! #38895500 1! #38895600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38896000 0! #38896500 1! #38896600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38897000 0! #38897500 1! #38897600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38898000 0! #38898500 1! #38898600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38899000 0! #38899500 1! #38899600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38900000 0! #38900500 1! #38900600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38901000 0! #38901500 1! #38901600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38902000 0! #38902500 1! #38902600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38903000 0! #38903500 1! #38903600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38904000 0! #38904500 1! #38904600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38905000 0! #38905500 1! #38905600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38906000 0! #38906500 1! #38906600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38907000 0! #38907500 1! #38907600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38908000 0! #38908500 1! #38908600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38909000 0! #38909500 1! #38909600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38910000 0! #38910500 1! #38910600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38911000 0! #38911500 1! #38911600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38912000 0! #38912500 1! #38912600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38913000 0! #38913500 1! #38913600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38914000 0! #38914500 1! #38914600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38915000 0! #38915500 1! #38915600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38916000 0! #38916500 1! #38916600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38917000 0! #38917500 1! #38917600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38918000 0! #38918500 1! #38918600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38919000 0! #38919500 1! #38919600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38920000 0! #38920500 1! #38920600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38921000 0! #38921500 1! #38921600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38922000 0! #38922500 1! #38922600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38923000 0! #38923500 1! #38923600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38924000 0! #38924500 1! #38924600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38925000 0! #38925500 1! #38925600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38926000 0! #38926500 1! #38926600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38927000 0! #38927500 1! #38927600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38928000 0! #38928500 1! #38928600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38929000 0! #38929500 1! #38929600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38930000 0! #38930500 1! #38930600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38931000 0! #38931500 1! #38931600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38932000 0! #38932500 1! #38932600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38933000 0! #38933500 1! #38933600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38934000 0! #38934500 1! #38934600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38935000 0! #38935500 1! #38935600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38936000 0! #38936500 1! #38936600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38937000 0! #38937500 1! #38937600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38938000 0! #38938500 1! #38938600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38939000 0! #38939500 1! #38939600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38940000 0! #38940500 1! #38940600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38941000 0! #38941500 1! #38941600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38942000 0! #38942500 1! #38942600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38943000 0! #38943500 1! #38943600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38944000 0! #38944500 1! #38944600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38945000 0! #38945500 1! #38945600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38946000 0! #38946500 1! #38946600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38947000 0! #38947500 1! #38947600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38948000 0! #38948500 1! #38948600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38949000 0! #38949500 1! #38949600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38950000 0! #38950500 1! #38950600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38951000 0! #38951500 1! #38951600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38952000 0! #38952500 1! #38952600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38953000 0! #38953500 1! #38953600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38954000 0! #38954500 1! #38954600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38955000 0! #38955500 1! #38955600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38956000 0! #38956500 1! #38956600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38957000 0! #38957500 1! #38957600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38958000 0! #38958500 1! #38958600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38959000 0! #38959500 1! #38959600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38960000 0! #38960500 1! #38960600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38961000 0! #38961500 1! #38961600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38962000 0! #38962500 1! #38962600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38963000 0! #38963500 1! #38963600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38964000 0! #38964500 1! #38964600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38965000 0! #38965500 1! #38965600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38966000 0! #38966500 1! #38966600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38967000 0! #38967500 1! #38967600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38968000 0! #38968500 1! #38968600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38969000 0! #38969500 1! #38969600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38970000 0! #38970500 1! #38970600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38971000 0! #38971500 1! #38971600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38972000 0! #38972500 1! #38972600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38973000 0! #38973500 1! #38973600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38974000 0! #38974500 1! #38974600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38975000 0! #38975500 1! #38975600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38976000 0! #38976500 1! #38976600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38977000 0! #38977500 1! #38977600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38978000 0! #38978500 1! #38978600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38979000 0! #38979500 1! #38979600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38980000 0! #38980500 1! #38980600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38981000 0! #38981500 1! #38981600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38982000 0! #38982500 1! #38982600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38983000 0! #38983500 1! #38983600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38984000 0! #38984500 1! #38984600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38985000 0! #38985500 1! #38985600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38986000 0! #38986500 1! #38986600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38987000 0! #38987500 1! #38987600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38988000 0! #38988500 1! #38988600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38989000 0! #38989500 1! #38989600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38990000 0! #38990500 1! #38990600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38991000 0! #38991500 1! #38991600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38992000 0! #38992500 1! #38992600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #38992700 b110 g b0 c #38993000 0! #38993500 1! #38993600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38994000 0! #38994500 1! #38994600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38995000 0! #38995500 1! #38995600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38996000 0! #38996500 1! #38996600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38997000 0! #38997500 1! #38997600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #38998000 0! #38998500 1! #38998600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #38999000 0! #38999500 1! #38999600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39000000 0! #39000500 1! #39000600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39001000 0! #39001500 1! #39001600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39002000 0! #39002500 1! #39002600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39003000 0! #39003500 1! #39003600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39004000 0! #39004500 1! #39004600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39005000 0! #39005500 1! #39005600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39006000 0! #39006500 1! #39006600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39007000 0! #39007500 1! #39007600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39008000 0! #39008500 1! #39008600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39009000 0! #39009500 1! #39009600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39010000 0! #39010500 1! #39010600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39011000 0! #39011500 1! #39011600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39012000 0! #39012500 1! #39012600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39013000 0! #39013500 1! #39013600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39014000 0! #39014500 1! #39014600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39015000 0! #39015500 1! #39015600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39016000 0! #39016500 1! #39016600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39017000 0! #39017500 1! #39017600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39018000 0! #39018500 1! #39018600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39019000 0! #39019500 1! #39019600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39020000 0! #39020500 1! #39020600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39021000 0! #39021500 1! #39021600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39022000 0! #39022500 1! #39022600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39023000 0! #39023500 1! #39023600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39024000 0! #39024500 1! #39024600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39025000 0! #39025500 1! #39025600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39026000 0! #39026500 1! #39026600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39027000 0! #39027500 1! #39027600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39028000 0! #39028500 1! #39028600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39029000 0! #39029500 1! #39029600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39030000 0! #39030500 1! #39030600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39031000 0! #39031500 1! #39031600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39032000 0! #39032500 1! #39032600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39033000 0! #39033500 1! #39033600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39034000 0! #39034500 1! #39034600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39035000 0! #39035500 1! #39035600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39036000 0! #39036500 1! #39036600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39037000 0! #39037500 1! #39037600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39038000 0! #39038500 1! #39038600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39039000 0! #39039500 1! #39039600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39040000 0! #39040500 1! #39040600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39041000 0! #39041500 1! #39041600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39042000 0! #39042500 1! #39042600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39043000 0! #39043500 1! #39043600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39044000 0! #39044500 1! #39044600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39045000 0! #39045500 1! #39045600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39046000 0! #39046500 1! #39046600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39047000 0! #39047500 1! #39047600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39048000 0! #39048500 1! #39048600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39049000 0! #39049500 1! #39049600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39050000 0! #39050500 1! #39050600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39051000 0! #39051500 1! #39051600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39052000 0! #39052500 1! #39052600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39053000 0! #39053500 1! #39053600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39054000 0! #39054500 1! #39054600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39055000 0! #39055500 1! #39055600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39056000 0! #39056500 1! #39056600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39057000 0! #39057500 1! #39057600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39058000 0! #39058500 1! #39058600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39059000 0! #39059500 1! #39059600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39060000 0! #39060500 1! #39060600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39061000 0! #39061500 1! #39061600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39062000 0! #39062500 1! #39062600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39063000 0! #39063500 1! #39063600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39064000 0! #39064500 1! #39064600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39065000 0! #39065500 1! #39065600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39066000 0! #39066500 1! #39066600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39067000 0! #39067500 1! #39067600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39068000 0! #39068500 1! #39068600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39069000 0! #39069500 1! #39069600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39070000 0! #39070500 1! #39070600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39071000 0! #39071500 1! #39071600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39072000 0! #39072500 1! #39072600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39073000 0! #39073500 1! #39073600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39074000 0! #39074500 1! #39074600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39075000 0! #39075500 1! #39075600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39076000 0! #39076500 1! #39076600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39077000 0! #39077500 1! #39077600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39078000 0! #39078500 1! #39078600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39079000 0! #39079500 1! #39079600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39080000 0! #39080500 1! #39080600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39081000 0! #39081500 1! #39081600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39082000 0! #39082500 1! #39082600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39083000 0! #39083500 1! #39083600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39084000 0! #39084500 1! #39084600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39085000 0! #39085500 1! #39085600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39086000 0! #39086500 1! #39086600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39087000 0! #39087500 1! #39087600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39088000 0! #39088500 1! #39088600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39089000 0! #39089500 1! #39089600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39090000 0! #39090500 1! #39090600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39091000 0! #39091500 1! #39091600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39092000 0! #39092500 1! #39092600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39093000 0! #39093500 1! #39093600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39094000 0! #39094500 1! #39094600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #39095000 0! #39095500 1! #39095600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39096000 0! #39096500 1! #39096600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39097000 0! #39097500 1! #39097600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39098000 0! #39098500 1! #39098600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39099000 0! #39099500 1! #39099600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39100000 0! #39100500 1! #39100600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39101000 0! #39101500 1! #39101600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39102000 0! #39102500 1! #39102600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39103000 0! #39103500 1! #39103600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39104000 0! #39104500 1! #39104600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39105000 0! #39105500 1! #39105600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39106000 0! #39106500 1! #39106600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39107000 0! #39107500 1! #39107600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39108000 0! #39108500 1! #39108600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39109000 0! #39109500 1! #39109600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39110000 0! #39110500 1! #39110600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39111000 0! #39111500 1! #39111600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39112000 0! #39112500 1! #39112600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39113000 0! #39113500 1! #39113600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39114000 0! #39114500 1! #39114600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39115000 0! #39115500 1! #39115600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39116000 0! #39116500 1! #39116600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39117000 0! #39117500 1! #39117600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39118000 0! #39118500 1! #39118600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39119000 0! #39119500 1! #39119600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39120000 0! #39120500 1! #39120600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39121000 0! #39121500 1! #39121600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39122000 0! #39122500 1! #39122600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39123000 0! #39123500 1! #39123600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39124000 0! #39124500 1! #39124600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39125000 0! #39125500 1! #39125600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39126000 0! #39126500 1! #39126600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39127000 0! #39127500 1! #39127600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39128000 0! #39128500 1! #39128600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39129000 0! #39129500 1! #39129600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39130000 0! #39130500 1! #39130600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39131000 0! #39131500 1! #39131600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39132000 0! #39132500 1! #39132600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39133000 0! #39133500 1! #39133600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39134000 0! #39134500 1! #39134600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39135000 0! #39135500 1! #39135600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39136000 0! #39136500 1! #39136600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39137000 0! #39137500 1! #39137600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39138000 0! #39138500 1! #39138600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39139000 0! #39139500 1! #39139600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39140000 0! #39140500 1! #39140600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39141000 0! #39141500 1! #39141600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39142000 0! #39142500 1! #39142600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39143000 0! #39143500 1! #39143600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39144000 0! #39144500 1! #39144600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39145000 0! #39145500 1! #39145600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39146000 0! #39146500 1! #39146600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39147000 0! #39147500 1! #39147600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39148000 0! #39148500 1! #39148600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39149000 0! #39149500 1! #39149600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39150000 0! #39150500 1! #39150600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39151000 0! #39151500 1! #39151600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39152000 0! #39152500 1! #39152600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39153000 0! #39153500 1! #39153600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39154000 0! #39154500 1! #39154600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39155000 0! #39155500 1! #39155600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39156000 0! #39156500 1! #39156600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39157000 0! #39157500 1! #39157600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39158000 0! #39158500 1! #39158600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39159000 0! #39159500 1! #39159600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39160000 0! #39160500 1! #39160600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39161000 0! #39161500 1! #39161600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39162000 0! #39162500 1! #39162600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39163000 0! #39163500 1! #39163600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39164000 0! #39164500 1! #39164600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39165000 0! #39165500 1! #39165600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39166000 0! #39166500 1! #39166600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39167000 0! #39167500 1! #39167600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39168000 0! #39168500 1! #39168600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39169000 0! #39169500 1! #39169600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39170000 0! #39170500 1! #39170600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39171000 0! #39171500 1! #39171600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39172000 0! #39172500 1! #39172600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39173000 0! #39173500 1! #39173600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39174000 0! #39174500 1! #39174600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39175000 0! #39175500 1! #39175600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39176000 0! #39176500 1! #39176600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39177000 0! #39177500 1! #39177600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39178000 0! #39178500 1! #39178600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39179000 0! #39179500 1! #39179600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39180000 0! #39180500 1! #39180600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39181000 0! #39181500 1! #39181600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39182000 0! #39182500 1! #39182600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39183000 0! #39183500 1! #39183600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39184000 0! #39184500 1! #39184600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39185000 0! #39185500 1! #39185600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39186000 0! #39186500 1! #39186600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39187000 0! #39187500 1! #39187600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39188000 0! #39188500 1! #39188600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39189000 0! #39189500 1! #39189600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39190000 0! #39190500 1! #39190600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39191000 0! #39191500 1! #39191600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39192000 0! #39192500 1! #39192600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39193000 0! #39193500 1! #39193600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39194000 0! #39194500 1! #39194600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39195000 0! #39195500 1! #39195600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39196000 0! #39196500 1! #39196600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39197000 0! #39197500 1! #39197600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39198000 0! #39198500 1! #39198600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39199000 0! #39199500 1! #39199600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39200000 0! #39200500 1! #39200600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39201000 0! #39201500 1! #39201600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39202000 0! #39202500 1! #39202600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39203000 0! #39203500 1! #39203600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39204000 0! #39204500 1! #39204600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39205000 0! #39205500 1! #39205600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39206000 0! #39206500 1! #39206600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39207000 0! #39207500 1! #39207600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39208000 0! #39208500 1! #39208600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39209000 0! #39209500 1! #39209600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39210000 0! #39210500 1! #39210600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39211000 0! #39211500 1! #39211600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39212000 0! #39212500 1! #39212600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39213000 0! #39213500 1! #39213600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39214000 0! #39214500 1! #39214600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39215000 0! #39215500 1! #39215600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39216000 0! #39216500 1! #39216600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39217000 0! #39217500 1! #39217600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39218000 0! #39218500 1! #39218600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39219000 0! #39219500 1! #39219600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39220000 0! #39220500 1! #39220600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39221000 0! #39221500 1! #39221600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39222000 0! #39222500 1! #39222600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39223000 0! #39223500 1! #39223600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39224000 0! #39224500 1! #39224600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39225000 0! #39225500 1! #39225600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39226000 0! #39226500 1! #39226600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39227000 0! #39227500 1! #39227600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39228000 0! #39228500 1! #39228600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39229000 0! #39229500 1! #39229600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39230000 0! #39230500 1! #39230600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39231000 0! #39231500 1! #39231600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39232000 0! #39232500 1! #39232600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39233000 0! #39233500 1! #39233600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39234000 0! #39234500 1! #39234600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39235000 0! #39235500 1! #39235600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39236000 0! #39236500 1! #39236600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39237000 0! #39237500 1! #39237600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39238000 0! #39238500 1! #39238600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39239000 0! #39239500 1! #39239600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39240000 0! #39240500 1! #39240600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39241000 0! #39241500 1! #39241600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39242000 0! #39242500 1! #39242600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39243000 0! #39243500 1! #39243600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39244000 0! #39244500 1! #39244600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39245000 0! #39245500 1! #39245600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39246000 0! #39246500 1! #39246600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39247000 0! #39247500 1! #39247600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #39247700 b101 g #39248000 0! #39248500 1! #39248600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39249000 0! #39249500 1! #39249600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39250000 0! #39250500 1! #39250600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39251000 0! #39251500 1! #39251600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39252000 0! #39252500 1! #39252600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39253000 0! #39253500 1! #39253600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39254000 0! #39254500 1! #39254600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39255000 0! #39255500 1! #39255600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39256000 0! #39256500 1! #39256600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39257000 0! #39257500 1! #39257600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39258000 0! #39258500 1! #39258600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39259000 0! #39259500 1! #39259600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39260000 0! #39260500 1! #39260600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39261000 0! #39261500 1! #39261600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39262000 0! #39262500 1! #39262600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39263000 0! #39263500 1! #39263600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39264000 0! #39264500 1! #39264600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39265000 0! #39265500 1! #39265600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39266000 0! #39266500 1! #39266600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39267000 0! #39267500 1! #39267600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39268000 0! #39268500 1! #39268600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39269000 0! #39269500 1! #39269600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39270000 0! #39270500 1! #39270600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39271000 0! #39271500 1! #39271600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39272000 0! #39272500 1! #39272600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39273000 0! #39273500 1! #39273600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39274000 0! #39274500 1! #39274600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39275000 0! #39275500 1! #39275600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39276000 0! #39276500 1! #39276600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39277000 0! #39277500 1! #39277600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39278000 0! #39278500 1! #39278600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39279000 0! #39279500 1! #39279600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39280000 0! #39280500 1! #39280600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39281000 0! #39281500 1! #39281600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39282000 0! #39282500 1! #39282600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39283000 0! #39283500 1! #39283600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39284000 0! #39284500 1! #39284600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39285000 0! #39285500 1! #39285600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39286000 0! #39286500 1! #39286600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39287000 0! #39287500 1! #39287600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39288000 0! #39288500 1! #39288600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39289000 0! #39289500 1! #39289600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39290000 0! #39290500 1! #39290600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39291000 0! #39291500 1! #39291600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39292000 0! #39292500 1! #39292600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39293000 0! #39293500 1! #39293600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39294000 0! #39294500 1! #39294600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39295000 0! #39295500 1! #39295600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39296000 0! #39296500 1! #39296600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39297000 0! #39297500 1! #39297600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39298000 0! #39298500 1! #39298600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39299000 0! #39299500 1! #39299600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39300000 0! #39300500 1! #39300600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39301000 0! #39301500 1! #39301600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39302000 0! #39302500 1! #39302600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39303000 0! #39303500 1! #39303600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39304000 0! #39304500 1! #39304600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39305000 0! #39305500 1! #39305600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39306000 0! #39306500 1! #39306600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39307000 0! #39307500 1! #39307600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39308000 0! #39308500 1! #39308600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39309000 0! #39309500 1! #39309600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39310000 0! #39310500 1! #39310600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39311000 0! #39311500 1! #39311600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39312000 0! #39312500 1! #39312600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39313000 0! #39313500 1! #39313600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39314000 0! #39314500 1! #39314600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39315000 0! #39315500 1! #39315600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39316000 0! #39316500 1! #39316600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39317000 0! #39317500 1! #39317600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39318000 0! #39318500 1! #39318600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39319000 0! #39319500 1! #39319600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39320000 0! #39320500 1! #39320600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39321000 0! #39321500 1! #39321600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39322000 0! #39322500 1! #39322600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39323000 0! #39323500 1! #39323600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39324000 0! #39324500 1! #39324600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39325000 0! #39325500 1! #39325600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39326000 0! #39326500 1! #39326600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39327000 0! #39327500 1! #39327600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39328000 0! #39328500 1! #39328600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39329000 0! #39329500 1! #39329600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39330000 0! #39330500 1! #39330600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39331000 0! #39331500 1! #39331600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39332000 0! #39332500 1! #39332600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39333000 0! #39333500 1! #39333600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39334000 0! #39334500 1! #39334600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39335000 0! #39335500 1! #39335600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39336000 0! #39336500 1! #39336600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39337000 0! #39337500 1! #39337600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39338000 0! #39338500 1! #39338600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39339000 0! #39339500 1! #39339600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39340000 0! #39340500 1! #39340600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39341000 0! #39341500 1! #39341600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39342000 0! #39342500 1! #39342600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39343000 0! #39343500 1! #39343600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39344000 0! #39344500 1! #39344600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39345000 0! #39345500 1! #39345600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39346000 0! #39346500 1! #39346600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39347000 0! #39347500 1! #39347600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39348000 0! #39348500 1! #39348600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39349000 0! #39349500 1! #39349600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #39350000 0! #39350500 1! #39350600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39351000 0! #39351500 1! #39351600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39352000 0! #39352500 1! #39352600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39353000 0! #39353500 1! #39353600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39354000 0! #39354500 1! #39354600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39355000 0! #39355500 1! #39355600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39356000 0! #39356500 1! #39356600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39357000 0! #39357500 1! #39357600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39358000 0! #39358500 1! #39358600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39359000 0! #39359500 1! #39359600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39360000 0! #39360500 1! #39360600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39361000 0! #39361500 1! #39361600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39362000 0! #39362500 1! #39362600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39363000 0! #39363500 1! #39363600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39364000 0! #39364500 1! #39364600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39365000 0! #39365500 1! #39365600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39366000 0! #39366500 1! #39366600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39367000 0! #39367500 1! #39367600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39368000 0! #39368500 1! #39368600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39369000 0! #39369500 1! #39369600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39370000 0! #39370500 1! #39370600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39371000 0! #39371500 1! #39371600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39372000 0! #39372500 1! #39372600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39373000 0! #39373500 1! #39373600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39374000 0! #39374500 1! #39374600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39375000 0! #39375500 1! #39375600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39376000 0! #39376500 1! #39376600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39377000 0! #39377500 1! #39377600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39378000 0! #39378500 1! #39378600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39379000 0! #39379500 1! #39379600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39380000 0! #39380500 1! #39380600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39381000 0! #39381500 1! #39381600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39382000 0! #39382500 1! #39382600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39383000 0! #39383500 1! #39383600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39384000 0! #39384500 1! #39384600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39385000 0! #39385500 1! #39385600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39386000 0! #39386500 1! #39386600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39387000 0! #39387500 1! #39387600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39388000 0! #39388500 1! #39388600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39389000 0! #39389500 1! #39389600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39390000 0! #39390500 1! #39390600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39391000 0! #39391500 1! #39391600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39392000 0! #39392500 1! #39392600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39393000 0! #39393500 1! #39393600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39394000 0! #39394500 1! #39394600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39395000 0! #39395500 1! #39395600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39396000 0! #39396500 1! #39396600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39397000 0! #39397500 1! #39397600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39398000 0! #39398500 1! #39398600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39399000 0! #39399500 1! #39399600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39400000 0! #39400500 1! #39400600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39401000 0! #39401500 1! #39401600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39402000 0! #39402500 1! #39402600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39403000 0! #39403500 1! #39403600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39404000 0! #39404500 1! #39404600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39405000 0! #39405500 1! #39405600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39406000 0! #39406500 1! #39406600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39407000 0! #39407500 1! #39407600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39408000 0! #39408500 1! #39408600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39409000 0! #39409500 1! #39409600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39410000 0! #39410500 1! #39410600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39411000 0! #39411500 1! #39411600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39412000 0! #39412500 1! #39412600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39413000 0! #39413500 1! #39413600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39414000 0! #39414500 1! #39414600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39415000 0! #39415500 1! #39415600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39416000 0! #39416500 1! #39416600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39417000 0! #39417500 1! #39417600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39418000 0! #39418500 1! #39418600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39419000 0! #39419500 1! #39419600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39420000 0! #39420500 1! #39420600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39421000 0! #39421500 1! #39421600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39422000 0! #39422500 1! #39422600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39423000 0! #39423500 1! #39423600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39424000 0! #39424500 1! #39424600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39425000 0! #39425500 1! #39425600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39426000 0! #39426500 1! #39426600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39427000 0! #39427500 1! #39427600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39428000 0! #39428500 1! #39428600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39429000 0! #39429500 1! #39429600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39430000 0! #39430500 1! #39430600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39431000 0! #39431500 1! #39431600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39432000 0! #39432500 1! #39432600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39433000 0! #39433500 1! #39433600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39434000 0! #39434500 1! #39434600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39435000 0! #39435500 1! #39435600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39436000 0! #39436500 1! #39436600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39437000 0! #39437500 1! #39437600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39438000 0! #39438500 1! #39438600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39439000 0! #39439500 1! #39439600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39440000 0! #39440500 1! #39440600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39441000 0! #39441500 1! #39441600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39442000 0! #39442500 1! #39442600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39443000 0! #39443500 1! #39443600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39444000 0! #39444500 1! #39444600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39445000 0! #39445500 1! #39445600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39446000 0! #39446500 1! #39446600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39447000 0! #39447500 1! #39447600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39448000 0! #39448500 1! #39448600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39449000 0! #39449500 1! #39449600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39450000 0! #39450500 1! #39450600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39451000 0! #39451500 1! #39451600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1Q 1O #39452000 0! #39452500 1! #39452600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39453000 0! #39453500 1! #39453600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39454000 0! #39454500 1! #39454600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39455000 0! #39455500 1! #39455600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39456000 0! #39456500 1! #39456600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39457000 0! #39457500 1! #39457600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39458000 0! #39458500 1! #39458600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39459000 0! #39459500 1! #39459600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39460000 0! #39460500 1! #39460600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39461000 0! #39461500 1! #39461600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39462000 0! #39462500 1! #39462600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39463000 0! #39463500 1! #39463600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39464000 0! #39464500 1! #39464600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39465000 0! #39465500 1! #39465600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39466000 0! #39466500 1! #39466600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39467000 0! #39467500 1! #39467600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39468000 0! #39468500 1! #39468600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39469000 0! #39469500 1! #39469600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39470000 0! #39470500 1! #39470600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39471000 0! #39471500 1! #39471600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39472000 0! #39472500 1! #39472600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39473000 0! #39473500 1! #39473600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39474000 0! #39474500 1! #39474600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39475000 0! #39475500 1! #39475600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39476000 0! #39476500 1! #39476600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39477000 0! #39477500 1! #39477600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39478000 0! #39478500 1! #39478600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39479000 0! #39479500 1! #39479600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39480000 0! #39480500 1! #39480600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39481000 0! #39481500 1! #39481600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39482000 0! #39482500 1! #39482600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39483000 0! #39483500 1! #39483600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39484000 0! #39484500 1! #39484600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39485000 0! #39485500 1! #39485600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39486000 0! #39486500 1! #39486600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39487000 0! #39487500 1! #39487600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39488000 0! #39488500 1! #39488600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39489000 0! #39489500 1! #39489600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39490000 0! #39490500 1! #39490600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39491000 0! #39491500 1! #39491600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39492000 0! #39492500 1! #39492600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39493000 0! #39493500 1! #39493600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39494000 0! #39494500 1! #39494600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39495000 0! #39495500 1! #39495600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39496000 0! #39496500 1! #39496600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39497000 0! #39497500 1! #39497600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39498000 0! #39498500 1! #39498600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39499000 0! #39499500 1! #39499600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39500000 0! #39500500 1! #39500600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39501000 0! #39501500 1! #39501600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39502000 0! #39502500 1! #39502600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #39502700 b100 g b1 c #39503000 0! #39503500 1! #39503600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39504000 0! #39504500 1! #39504600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39505000 0! #39505500 1! #39505600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39506000 0! #39506500 1! #39506600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39507000 0! #39507500 1! #39507600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39508000 0! #39508500 1! #39508600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39509000 0! #39509500 1! #39509600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39510000 0! #39510500 1! #39510600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39511000 0! #39511500 1! #39511600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39512000 0! #39512500 1! #39512600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39513000 0! #39513500 1! #39513600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39514000 0! #39514500 1! #39514600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39515000 0! #39515500 1! #39515600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39516000 0! #39516500 1! #39516600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39517000 0! #39517500 1! #39517600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39518000 0! #39518500 1! #39518600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39519000 0! #39519500 1! #39519600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39520000 0! #39520500 1! #39520600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39521000 0! #39521500 1! #39521600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39522000 0! #39522500 1! #39522600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39523000 0! #39523500 1! #39523600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39524000 0! #39524500 1! #39524600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39525000 0! #39525500 1! #39525600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39526000 0! #39526500 1! #39526600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39527000 0! #39527500 1! #39527600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39528000 0! #39528500 1! #39528600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39529000 0! #39529500 1! #39529600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39530000 0! #39530500 1! #39530600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39531000 0! #39531500 1! #39531600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39532000 0! #39532500 1! #39532600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39533000 0! #39533500 1! #39533600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39534000 0! #39534500 1! #39534600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39535000 0! #39535500 1! #39535600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39536000 0! #39536500 1! #39536600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39537000 0! #39537500 1! #39537600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39538000 0! #39538500 1! #39538600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39539000 0! #39539500 1! #39539600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39540000 0! #39540500 1! #39540600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39541000 0! #39541500 1! #39541600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39542000 0! #39542500 1! #39542600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39543000 0! #39543500 1! #39543600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39544000 0! #39544500 1! #39544600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39545000 0! #39545500 1! #39545600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39546000 0! #39546500 1! #39546600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39547000 0! #39547500 1! #39547600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39548000 0! #39548500 1! #39548600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39549000 0! #39549500 1! #39549600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39550000 0! #39550500 1! #39550600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39551000 0! #39551500 1! #39551600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39552000 0! #39552500 1! #39552600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39553000 0! #39553500 1! #39553600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39554000 0! #39554500 1! #39554600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39555000 0! #39555500 1! #39555600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39556000 0! #39556500 1! #39556600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39557000 0! #39557500 1! #39557600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39558000 0! #39558500 1! #39558600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39559000 0! #39559500 1! #39559600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39560000 0! #39560500 1! #39560600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39561000 0! #39561500 1! #39561600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39562000 0! #39562500 1! #39562600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39563000 0! #39563500 1! #39563600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39564000 0! #39564500 1! #39564600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39565000 0! #39565500 1! #39565600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39566000 0! #39566500 1! #39566600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39567000 0! #39567500 1! #39567600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39568000 0! #39568500 1! #39568600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39569000 0! #39569500 1! #39569600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39570000 0! #39570500 1! #39570600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39571000 0! #39571500 1! #39571600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39572000 0! #39572500 1! #39572600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39573000 0! #39573500 1! #39573600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39574000 0! #39574500 1! #39574600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39575000 0! #39575500 1! #39575600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39576000 0! #39576500 1! #39576600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39577000 0! #39577500 1! #39577600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39578000 0! #39578500 1! #39578600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39579000 0! #39579500 1! #39579600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39580000 0! #39580500 1! #39580600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39581000 0! #39581500 1! #39581600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39582000 0! #39582500 1! #39582600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39583000 0! #39583500 1! #39583600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39584000 0! #39584500 1! #39584600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39585000 0! #39585500 1! #39585600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39586000 0! #39586500 1! #39586600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39587000 0! #39587500 1! #39587600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39588000 0! #39588500 1! #39588600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39589000 0! #39589500 1! #39589600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39590000 0! #39590500 1! #39590600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39591000 0! #39591500 1! #39591600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39592000 0! #39592500 1! #39592600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39593000 0! #39593500 1! #39593600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39594000 0! #39594500 1! #39594600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39595000 0! #39595500 1! #39595600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39596000 0! #39596500 1! #39596600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39597000 0! #39597500 1! #39597600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39598000 0! #39598500 1! #39598600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39599000 0! #39599500 1! #39599600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39600000 0! #39600500 1! #39600600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39601000 0! #39601500 1! #39601600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39602000 0! #39602500 1! #39602600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39603000 0! #39603500 1! #39603600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39604000 0! #39604500 1! #39604600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #39605000 0! #39605500 1! #39605600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39606000 0! #39606500 1! #39606600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39607000 0! #39607500 1! #39607600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39608000 0! #39608500 1! #39608600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39609000 0! #39609500 1! #39609600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39610000 0! #39610500 1! #39610600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39611000 0! #39611500 1! #39611600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39612000 0! #39612500 1! #39612600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39613000 0! #39613500 1! #39613600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39614000 0! #39614500 1! #39614600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39615000 0! #39615500 1! #39615600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39616000 0! #39616500 1! #39616600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39617000 0! #39617500 1! #39617600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39618000 0! #39618500 1! #39618600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39619000 0! #39619500 1! #39619600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39620000 0! #39620500 1! #39620600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39621000 0! #39621500 1! #39621600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39622000 0! #39622500 1! #39622600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39623000 0! #39623500 1! #39623600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39624000 0! #39624500 1! #39624600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39625000 0! #39625500 1! #39625600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39626000 0! #39626500 1! #39626600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39627000 0! #39627500 1! #39627600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39628000 0! #39628500 1! #39628600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39629000 0! #39629500 1! #39629600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39630000 0! #39630500 1! #39630600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39631000 0! #39631500 1! #39631600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39632000 0! #39632500 1! #39632600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39633000 0! #39633500 1! #39633600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39634000 0! #39634500 1! #39634600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39635000 0! #39635500 1! #39635600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39636000 0! #39636500 1! #39636600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39637000 0! #39637500 1! #39637600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39638000 0! #39638500 1! #39638600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39639000 0! #39639500 1! #39639600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39640000 0! #39640500 1! #39640600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39641000 0! #39641500 1! #39641600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39642000 0! #39642500 1! #39642600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39643000 0! #39643500 1! #39643600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39644000 0! #39644500 1! #39644600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39645000 0! #39645500 1! #39645600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39646000 0! #39646500 1! #39646600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39647000 0! #39647500 1! #39647600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39648000 0! #39648500 1! #39648600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39649000 0! #39649500 1! #39649600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39650000 0! #39650500 1! #39650600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39651000 0! #39651500 1! #39651600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39652000 0! #39652500 1! #39652600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39653000 0! #39653500 1! #39653600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39654000 0! #39654500 1! #39654600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39655000 0! #39655500 1! #39655600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39656000 0! #39656500 1! #39656600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39657000 0! #39657500 1! #39657600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39658000 0! #39658500 1! #39658600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39659000 0! #39659500 1! #39659600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39660000 0! #39660500 1! #39660600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39661000 0! #39661500 1! #39661600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39662000 0! #39662500 1! #39662600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39663000 0! #39663500 1! #39663600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39664000 0! #39664500 1! #39664600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39665000 0! #39665500 1! #39665600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39666000 0! #39666500 1! #39666600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39667000 0! #39667500 1! #39667600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39668000 0! #39668500 1! #39668600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39669000 0! #39669500 1! #39669600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39670000 0! #39670500 1! #39670600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39671000 0! #39671500 1! #39671600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39672000 0! #39672500 1! #39672600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39673000 0! #39673500 1! #39673600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39674000 0! #39674500 1! #39674600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39675000 0! #39675500 1! #39675600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39676000 0! #39676500 1! #39676600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39677000 0! #39677500 1! #39677600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39678000 0! #39678500 1! #39678600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39679000 0! #39679500 1! #39679600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39680000 0! #39680500 1! #39680600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39681000 0! #39681500 1! #39681600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39682000 0! #39682500 1! #39682600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39683000 0! #39683500 1! #39683600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39684000 0! #39684500 1! #39684600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39685000 0! #39685500 1! #39685600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39686000 0! #39686500 1! #39686600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39687000 0! #39687500 1! #39687600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39688000 0! #39688500 1! #39688600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39689000 0! #39689500 1! #39689600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39690000 0! #39690500 1! #39690600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39691000 0! #39691500 1! #39691600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39692000 0! #39692500 1! #39692600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39693000 0! #39693500 1! #39693600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39694000 0! #39694500 1! #39694600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39695000 0! #39695500 1! #39695600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39696000 0! #39696500 1! #39696600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39697000 0! #39697500 1! #39697600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39698000 0! #39698500 1! #39698600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39699000 0! #39699500 1! #39699600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39700000 0! #39700500 1! #39700600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39701000 0! #39701500 1! #39701600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39702000 0! #39702500 1! #39702600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39703000 0! #39703500 1! #39703600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39704000 0! #39704500 1! #39704600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39705000 0! #39705500 1! #39705600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39706000 0! #39706500 1! #39706600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0Q 0O #39707000 0! #39707500 1! #39707600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39708000 0! #39708500 1! #39708600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39709000 0! #39709500 1! #39709600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39710000 0! #39710500 1! #39710600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39711000 0! #39711500 1! #39711600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39712000 0! #39712500 1! #39712600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39713000 0! #39713500 1! #39713600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39714000 0! #39714500 1! #39714600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39715000 0! #39715500 1! #39715600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39716000 0! #39716500 1! #39716600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39717000 0! #39717500 1! #39717600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39718000 0! #39718500 1! #39718600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39719000 0! #39719500 1! #39719600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39720000 0! #39720500 1! #39720600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39721000 0! #39721500 1! #39721600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39722000 0! #39722500 1! #39722600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39723000 0! #39723500 1! #39723600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39724000 0! #39724500 1! #39724600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39725000 0! #39725500 1! #39725600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39726000 0! #39726500 1! #39726600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39727000 0! #39727500 1! #39727600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39728000 0! #39728500 1! #39728600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39729000 0! #39729500 1! #39729600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39730000 0! #39730500 1! #39730600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39731000 0! #39731500 1! #39731600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39732000 0! #39732500 1! #39732600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39733000 0! #39733500 1! #39733600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39734000 0! #39734500 1! #39734600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39735000 0! #39735500 1! #39735600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39736000 0! #39736500 1! #39736600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39737000 0! #39737500 1! #39737600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39738000 0! #39738500 1! #39738600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39739000 0! #39739500 1! #39739600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39740000 0! #39740500 1! #39740600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39741000 0! #39741500 1! #39741600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39742000 0! #39742500 1! #39742600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39743000 0! #39743500 1! #39743600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39744000 0! #39744500 1! #39744600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39745000 0! #39745500 1! #39745600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39746000 0! #39746500 1! #39746600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39747000 0! #39747500 1! #39747600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39748000 0! #39748500 1! #39748600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39749000 0! #39749500 1! #39749600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39750000 0! #39750500 1! #39750600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39751000 0! #39751500 1! #39751600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39752000 0! #39752500 1! #39752600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39753000 0! #39753500 1! #39753600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39754000 0! #39754500 1! #39754600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39755000 0! #39755500 1! #39755600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39756000 0! #39756500 1! #39756600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39757000 0! #39757500 1! #39757600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #39757700 b11 g b10 c #39758000 0! #39758500 1! #39758600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39759000 0! #39759500 1! #39759600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39760000 0! #39760500 1! #39760600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39761000 0! #39761500 1! #39761600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39762000 0! #39762500 1! #39762600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39763000 0! #39763500 1! #39763600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39764000 0! #39764500 1! #39764600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39765000 0! #39765500 1! #39765600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39766000 0! #39766500 1! #39766600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39767000 0! #39767500 1! #39767600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39768000 0! #39768500 1! #39768600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39769000 0! #39769500 1! #39769600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39770000 0! #39770500 1! #39770600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39771000 0! #39771500 1! #39771600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39772000 0! #39772500 1! #39772600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39773000 0! #39773500 1! #39773600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39774000 0! #39774500 1! #39774600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39775000 0! #39775500 1! #39775600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39776000 0! #39776500 1! #39776600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39777000 0! #39777500 1! #39777600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39778000 0! #39778500 1! #39778600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39779000 0! #39779500 1! #39779600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39780000 0! #39780500 1! #39780600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39781000 0! #39781500 1! #39781600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39782000 0! #39782500 1! #39782600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39783000 0! #39783500 1! #39783600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39784000 0! #39784500 1! #39784600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39785000 0! #39785500 1! #39785600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39786000 0! #39786500 1! #39786600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39787000 0! #39787500 1! #39787600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39788000 0! #39788500 1! #39788600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39789000 0! #39789500 1! #39789600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39790000 0! #39790500 1! #39790600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39791000 0! #39791500 1! #39791600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39792000 0! #39792500 1! #39792600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39793000 0! #39793500 1! #39793600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39794000 0! #39794500 1! #39794600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39795000 0! #39795500 1! #39795600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39796000 0! #39796500 1! #39796600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39797000 0! #39797500 1! #39797600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39798000 0! #39798500 1! #39798600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39799000 0! #39799500 1! #39799600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39800000 0! #39800500 1! #39800600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39801000 0! #39801500 1! #39801600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39802000 0! #39802500 1! #39802600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39803000 0! #39803500 1! #39803600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39804000 0! #39804500 1! #39804600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39805000 0! #39805500 1! #39805600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39806000 0! #39806500 1! #39806600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39807000 0! #39807500 1! #39807600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39808000 0! #39808500 1! #39808600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39809000 0! #39809500 1! #39809600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39810000 0! #39810500 1! #39810600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39811000 0! #39811500 1! #39811600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39812000 0! #39812500 1! #39812600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39813000 0! #39813500 1! #39813600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39814000 0! #39814500 1! #39814600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39815000 0! #39815500 1! #39815600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39816000 0! #39816500 1! #39816600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39817000 0! #39817500 1! #39817600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39818000 0! #39818500 1! #39818600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39819000 0! #39819500 1! #39819600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39820000 0! #39820500 1! #39820600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39821000 0! #39821500 1! #39821600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39822000 0! #39822500 1! #39822600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39823000 0! #39823500 1! #39823600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39824000 0! #39824500 1! #39824600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39825000 0! #39825500 1! #39825600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39826000 0! #39826500 1! #39826600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39827000 0! #39827500 1! #39827600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39828000 0! #39828500 1! #39828600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39829000 0! #39829500 1! #39829600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39830000 0! #39830500 1! #39830600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39831000 0! #39831500 1! #39831600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39832000 0! #39832500 1! #39832600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39833000 0! #39833500 1! #39833600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39834000 0! #39834500 1! #39834600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39835000 0! #39835500 1! #39835600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39836000 0! #39836500 1! #39836600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39837000 0! #39837500 1! #39837600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39838000 0! #39838500 1! #39838600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39839000 0! #39839500 1! #39839600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39840000 0! #39840500 1! #39840600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39841000 0! #39841500 1! #39841600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39842000 0! #39842500 1! #39842600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39843000 0! #39843500 1! #39843600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39844000 0! #39844500 1! #39844600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39845000 0! #39845500 1! #39845600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39846000 0! #39846500 1! #39846600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39847000 0! #39847500 1! #39847600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39848000 0! #39848500 1! #39848600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39849000 0! #39849500 1! #39849600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39850000 0! #39850500 1! #39850600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39851000 0! #39851500 1! #39851600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39852000 0! #39852500 1! #39852600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39853000 0! #39853500 1! #39853600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39854000 0! #39854500 1! #39854600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39855000 0! #39855500 1! #39855600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39856000 0! #39856500 1! #39856600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39857000 0! #39857500 1! #39857600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39858000 0! #39858500 1! #39858600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39859000 0! #39859500 1! #39859600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #39860000 0! #39860500 1! #39860600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39861000 0! #39861500 1! #39861600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39862000 0! #39862500 1! #39862600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39863000 0! #39863500 1! #39863600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39864000 0! #39864500 1! #39864600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39865000 0! #39865500 1! #39865600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39866000 0! #39866500 1! #39866600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39867000 0! #39867500 1! #39867600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39868000 0! #39868500 1! #39868600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39869000 0! #39869500 1! #39869600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39870000 0! #39870500 1! #39870600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39871000 0! #39871500 1! #39871600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39872000 0! #39872500 1! #39872600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39873000 0! #39873500 1! #39873600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39874000 0! #39874500 1! #39874600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39875000 0! #39875500 1! #39875600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39876000 0! #39876500 1! #39876600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39877000 0! #39877500 1! #39877600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39878000 0! #39878500 1! #39878600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39879000 0! #39879500 1! #39879600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39880000 0! #39880500 1! #39880600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39881000 0! #39881500 1! #39881600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39882000 0! #39882500 1! #39882600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39883000 0! #39883500 1! #39883600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39884000 0! #39884500 1! #39884600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39885000 0! #39885500 1! #39885600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39886000 0! #39886500 1! #39886600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39887000 0! #39887500 1! #39887600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39888000 0! #39888500 1! #39888600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39889000 0! #39889500 1! #39889600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39890000 0! #39890500 1! #39890600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39891000 0! #39891500 1! #39891600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39892000 0! #39892500 1! #39892600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39893000 0! #39893500 1! #39893600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39894000 0! #39894500 1! #39894600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39895000 0! #39895500 1! #39895600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39896000 0! #39896500 1! #39896600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39897000 0! #39897500 1! #39897600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39898000 0! #39898500 1! #39898600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39899000 0! #39899500 1! #39899600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39900000 0! #39900500 1! #39900600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39901000 0! #39901500 1! #39901600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39902000 0! #39902500 1! #39902600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39903000 0! #39903500 1! #39903600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39904000 0! #39904500 1! #39904600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39905000 0! #39905500 1! #39905600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39906000 0! #39906500 1! #39906600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39907000 0! #39907500 1! #39907600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39908000 0! #39908500 1! #39908600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39909000 0! #39909500 1! #39909600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39910000 0! #39910500 1! #39910600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39911000 0! #39911500 1! #39911600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39912000 0! #39912500 1! #39912600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39913000 0! #39913500 1! #39913600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39914000 0! #39914500 1! #39914600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39915000 0! #39915500 1! #39915600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39916000 0! #39916500 1! #39916600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39917000 0! #39917500 1! #39917600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39918000 0! #39918500 1! #39918600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39919000 0! #39919500 1! #39919600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39920000 0! #39920500 1! #39920600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39921000 0! #39921500 1! #39921600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39922000 0! #39922500 1! #39922600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39923000 0! #39923500 1! #39923600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39924000 0! #39924500 1! #39924600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39925000 0! #39925500 1! #39925600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39926000 0! #39926500 1! #39926600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39927000 0! #39927500 1! #39927600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39928000 0! #39928500 1! #39928600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39929000 0! #39929500 1! #39929600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39930000 0! #39930500 1! #39930600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39931000 0! #39931500 1! #39931600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39932000 0! #39932500 1! #39932600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39933000 0! #39933500 1! #39933600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39934000 0! #39934500 1! #39934600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39935000 0! #39935500 1! #39935600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39936000 0! #39936500 1! #39936600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39937000 0! #39937500 1! #39937600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39938000 0! #39938500 1! #39938600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39939000 0! #39939500 1! #39939600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39940000 0! #39940500 1! #39940600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39941000 0! #39941500 1! #39941600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39942000 0! #39942500 1! #39942600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39943000 0! #39943500 1! #39943600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39944000 0! #39944500 1! #39944600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39945000 0! #39945500 1! #39945600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39946000 0! #39946500 1! #39946600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39947000 0! #39947500 1! #39947600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39948000 0! #39948500 1! #39948600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39949000 0! #39949500 1! #39949600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39950000 0! #39950500 1! #39950600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39951000 0! #39951500 1! #39951600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39952000 0! #39952500 1! #39952600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39953000 0! #39953500 1! #39953600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39954000 0! #39954500 1! #39954600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39955000 0! #39955500 1! #39955600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39956000 0! #39956500 1! #39956600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39957000 0! #39957500 1! #39957600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39958000 0! #39958500 1! #39958600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39959000 0! #39959500 1! #39959600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39960000 0! #39960500 1! #39960600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39961000 0! #39961500 1! #39961600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39962000 0! #39962500 1! #39962600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39963000 0! #39963500 1! #39963600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39964000 0! #39964500 1! #39964600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39965000 0! #39965500 1! #39965600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39966000 0! #39966500 1! #39966600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39967000 0! #39967500 1! #39967600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39968000 0! #39968500 1! #39968600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39969000 0! #39969500 1! #39969600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39970000 0! #39970500 1! #39970600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39971000 0! #39971500 1! #39971600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39972000 0! #39972500 1! #39972600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39973000 0! #39973500 1! #39973600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39974000 0! #39974500 1! #39974600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39975000 0! #39975500 1! #39975600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39976000 0! #39976500 1! #39976600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39977000 0! #39977500 1! #39977600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39978000 0! #39978500 1! #39978600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39979000 0! #39979500 1! #39979600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39980000 0! #39980500 1! #39980600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39981000 0! #39981500 1! #39981600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39982000 0! #39982500 1! #39982600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39983000 0! #39983500 1! #39983600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39984000 0! #39984500 1! #39984600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39985000 0! #39985500 1! #39985600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39986000 0! #39986500 1! #39986600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39987000 0! #39987500 1! #39987600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39988000 0! #39988500 1! #39988600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39989000 0! #39989500 1! #39989600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39990000 0! #39990500 1! #39990600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39991000 0! #39991500 1! #39991600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39992000 0! #39992500 1! #39992600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39993000 0! #39993500 1! #39993600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39994000 0! #39994500 1! #39994600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39995000 0! #39995500 1! #39995600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39996000 0! #39996500 1! #39996600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39997000 0! #39997500 1! #39997600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #39998000 0! #39998500 1! #39998600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #39999000 0! #39999500 1! #39999600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40000000 0! #40000500 1! #40000600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40001000 0! #40001500 1! #40001600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40002000 0! #40002500 1! #40002600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40003000 0! #40003500 1! #40003600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40004000 0! #40004500 1! #40004600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40005000 0! #40005500 1! #40005600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40006000 0! #40006500 1! #40006600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40007000 0! #40007500 1! #40007600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40008000 0! #40008500 1! #40008600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40009000 0! #40009500 1! #40009600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40010000 0! #40010500 1! #40010600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40011000 0! #40011500 1! #40011600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40012000 0! #40012500 1! #40012600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #40012700 b10 g b100 c #40013000 0! #40013500 1! #40013600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40014000 0! #40014500 1! #40014600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40015000 0! #40015500 1! #40015600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40016000 0! #40016500 1! #40016600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40017000 0! #40017500 1! #40017600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40018000 0! #40018500 1! #40018600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40019000 0! #40019500 1! #40019600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40020000 0! #40020500 1! #40020600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40021000 0! #40021500 1! #40021600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40022000 0! #40022500 1! #40022600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40023000 0! #40023500 1! #40023600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40024000 0! #40024500 1! #40024600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40025000 0! #40025500 1! #40025600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40026000 0! #40026500 1! #40026600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40027000 0! #40027500 1! #40027600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40028000 0! #40028500 1! #40028600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40029000 0! #40029500 1! #40029600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40030000 0! #40030500 1! #40030600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40031000 0! #40031500 1! #40031600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40032000 0! #40032500 1! #40032600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40033000 0! #40033500 1! #40033600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40034000 0! #40034500 1! #40034600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40035000 0! #40035500 1! #40035600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40036000 0! #40036500 1! #40036600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40037000 0! #40037500 1! #40037600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40038000 0! #40038500 1! #40038600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40039000 0! #40039500 1! #40039600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40040000 0! #40040500 1! #40040600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40041000 0! #40041500 1! #40041600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40042000 0! #40042500 1! #40042600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40043000 0! #40043500 1! #40043600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40044000 0! #40044500 1! #40044600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40045000 0! #40045500 1! #40045600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40046000 0! #40046500 1! #40046600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40047000 0! #40047500 1! #40047600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40048000 0! #40048500 1! #40048600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40049000 0! #40049500 1! #40049600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40050000 0! #40050500 1! #40050600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40051000 0! #40051500 1! #40051600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40052000 0! #40052500 1! #40052600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40053000 0! #40053500 1! #40053600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40054000 0! #40054500 1! #40054600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40055000 0! #40055500 1! #40055600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40056000 0! #40056500 1! #40056600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40057000 0! #40057500 1! #40057600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40058000 0! #40058500 1! #40058600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40059000 0! #40059500 1! #40059600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40060000 0! #40060500 1! #40060600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40061000 0! #40061500 1! #40061600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40062000 0! #40062500 1! #40062600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40063000 0! #40063500 1! #40063600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40064000 0! #40064500 1! #40064600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40065000 0! #40065500 1! #40065600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40066000 0! #40066500 1! #40066600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40067000 0! #40067500 1! #40067600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40068000 0! #40068500 1! #40068600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40069000 0! #40069500 1! #40069600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40070000 0! #40070500 1! #40070600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40071000 0! #40071500 1! #40071600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40072000 0! #40072500 1! #40072600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40073000 0! #40073500 1! #40073600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40074000 0! #40074500 1! #40074600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40075000 0! #40075500 1! #40075600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40076000 0! #40076500 1! #40076600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40077000 0! #40077500 1! #40077600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40078000 0! #40078500 1! #40078600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40079000 0! #40079500 1! #40079600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40080000 0! #40080500 1! #40080600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40081000 0! #40081500 1! #40081600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40082000 0! #40082500 1! #40082600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40083000 0! #40083500 1! #40083600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40084000 0! #40084500 1! #40084600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40085000 0! #40085500 1! #40085600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40086000 0! #40086500 1! #40086600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40087000 0! #40087500 1! #40087600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40088000 0! #40088500 1! #40088600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40089000 0! #40089500 1! #40089600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40090000 0! #40090500 1! #40090600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40091000 0! #40091500 1! #40091600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40092000 0! #40092500 1! #40092600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40093000 0! #40093500 1! #40093600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40094000 0! #40094500 1! #40094600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40095000 0! #40095500 1! #40095600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40096000 0! #40096500 1! #40096600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40097000 0! #40097500 1! #40097600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40098000 0! #40098500 1! #40098600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40099000 0! #40099500 1! #40099600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40100000 0! #40100500 1! #40100600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40101000 0! #40101500 1! #40101600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40102000 0! #40102500 1! #40102600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40103000 0! #40103500 1! #40103600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40104000 0! #40104500 1! #40104600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40105000 0! #40105500 1! #40105600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40106000 0! #40106500 1! #40106600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40107000 0! #40107500 1! #40107600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40108000 0! #40108500 1! #40108600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40109000 0! #40109500 1! #40109600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40110000 0! #40110500 1! #40110600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40111000 0! #40111500 1! #40111600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40112000 0! #40112500 1! #40112600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40113000 0! #40113500 1! #40113600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40114000 0! #40114500 1! #40114600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #40115000 0! #40115500 1! #40115600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40116000 0! #40116500 1! #40116600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40117000 0! #40117500 1! #40117600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40118000 0! #40118500 1! #40118600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40119000 0! #40119500 1! #40119600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40120000 0! #40120500 1! #40120600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40121000 0! #40121500 1! #40121600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40122000 0! #40122500 1! #40122600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40123000 0! #40123500 1! #40123600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40124000 0! #40124500 1! #40124600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40125000 0! #40125500 1! #40125600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40126000 0! #40126500 1! #40126600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40127000 0! #40127500 1! #40127600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40128000 0! #40128500 1! #40128600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40129000 0! #40129500 1! #40129600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40130000 0! #40130500 1! #40130600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40131000 0! #40131500 1! #40131600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40132000 0! #40132500 1! #40132600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40133000 0! #40133500 1! #40133600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40134000 0! #40134500 1! #40134600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40135000 0! #40135500 1! #40135600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40136000 0! #40136500 1! #40136600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40137000 0! #40137500 1! #40137600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40138000 0! #40138500 1! #40138600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40139000 0! #40139500 1! #40139600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40140000 0! #40140500 1! #40140600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40141000 0! #40141500 1! #40141600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40142000 0! #40142500 1! #40142600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40143000 0! #40143500 1! #40143600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40144000 0! #40144500 1! #40144600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40145000 0! #40145500 1! #40145600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40146000 0! #40146500 1! #40146600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40147000 0! #40147500 1! #40147600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40148000 0! #40148500 1! #40148600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40149000 0! #40149500 1! #40149600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40150000 0! #40150500 1! #40150600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40151000 0! #40151500 1! #40151600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40152000 0! #40152500 1! #40152600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40153000 0! #40153500 1! #40153600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40154000 0! #40154500 1! #40154600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40155000 0! #40155500 1! #40155600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40156000 0! #40156500 1! #40156600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40157000 0! #40157500 1! #40157600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40158000 0! #40158500 1! #40158600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40159000 0! #40159500 1! #40159600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40160000 0! #40160500 1! #40160600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40161000 0! #40161500 1! #40161600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40162000 0! #40162500 1! #40162600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40163000 0! #40163500 1! #40163600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40164000 0! #40164500 1! #40164600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40165000 0! #40165500 1! #40165600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40166000 0! #40166500 1! #40166600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40167000 0! #40167500 1! #40167600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40168000 0! #40168500 1! #40168600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40169000 0! #40169500 1! #40169600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40170000 0! #40170500 1! #40170600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40171000 0! #40171500 1! #40171600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40172000 0! #40172500 1! #40172600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40173000 0! #40173500 1! #40173600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40174000 0! #40174500 1! #40174600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40175000 0! #40175500 1! #40175600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40176000 0! #40176500 1! #40176600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40177000 0! #40177500 1! #40177600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40178000 0! #40178500 1! #40178600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40179000 0! #40179500 1! #40179600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40180000 0! #40180500 1! #40180600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40181000 0! #40181500 1! #40181600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40182000 0! #40182500 1! #40182600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40183000 0! #40183500 1! #40183600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40184000 0! #40184500 1! #40184600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40185000 0! #40185500 1! #40185600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40186000 0! #40186500 1! #40186600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40187000 0! #40187500 1! #40187600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40188000 0! #40188500 1! #40188600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40189000 0! #40189500 1! #40189600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40190000 0! #40190500 1! #40190600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40191000 0! #40191500 1! #40191600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40192000 0! #40192500 1! #40192600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40193000 0! #40193500 1! #40193600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40194000 0! #40194500 1! #40194600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40195000 0! #40195500 1! #40195600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40196000 0! #40196500 1! #40196600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40197000 0! #40197500 1! #40197600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40198000 0! #40198500 1! #40198600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40199000 0! #40199500 1! #40199600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40200000 0! #40200500 1! #40200600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40201000 0! #40201500 1! #40201600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40202000 0! #40202500 1! #40202600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40203000 0! #40203500 1! #40203600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40204000 0! #40204500 1! #40204600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40205000 0! #40205500 1! #40205600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40206000 0! #40206500 1! #40206600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40207000 0! #40207500 1! #40207600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40208000 0! #40208500 1! #40208600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40209000 0! #40209500 1! #40209600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40210000 0! #40210500 1! #40210600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40211000 0! #40211500 1! #40211600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40212000 0! #40212500 1! #40212600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40213000 0! #40213500 1! #40213600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40214000 0! #40214500 1! #40214600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40215000 0! #40215500 1! #40215600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40216000 0! #40216500 1! #40216600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40217000 0! #40217500 1! #40217600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40218000 0! #40218500 1! #40218600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40219000 0! #40219500 1! #40219600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40220000 0! #40220500 1! #40220600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40221000 0! #40221500 1! #40221600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40222000 0! #40222500 1! #40222600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40223000 0! #40223500 1! #40223600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40224000 0! #40224500 1! #40224600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40225000 0! #40225500 1! #40225600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40226000 0! #40226500 1! #40226600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40227000 0! #40227500 1! #40227600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40228000 0! #40228500 1! #40228600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40229000 0! #40229500 1! #40229600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40230000 0! #40230500 1! #40230600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40231000 0! #40231500 1! #40231600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40232000 0! #40232500 1! #40232600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40233000 0! #40233500 1! #40233600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40234000 0! #40234500 1! #40234600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40235000 0! #40235500 1! #40235600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40236000 0! #40236500 1! #40236600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40237000 0! #40237500 1! #40237600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40238000 0! #40238500 1! #40238600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40239000 0! #40239500 1! #40239600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40240000 0! #40240500 1! #40240600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40241000 0! #40241500 1! #40241600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40242000 0! #40242500 1! #40242600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40243000 0! #40243500 1! #40243600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40244000 0! #40244500 1! #40244600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40245000 0! #40245500 1! #40245600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40246000 0! #40246500 1! #40246600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40247000 0! #40247500 1! #40247600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40248000 0! #40248500 1! #40248600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40249000 0! #40249500 1! #40249600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40250000 0! #40250500 1! #40250600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40251000 0! #40251500 1! #40251600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40252000 0! #40252500 1! #40252600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40253000 0! #40253500 1! #40253600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40254000 0! #40254500 1! #40254600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40255000 0! #40255500 1! #40255600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40256000 0! #40256500 1! #40256600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40257000 0! #40257500 1! #40257600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40258000 0! #40258500 1! #40258600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40259000 0! #40259500 1! #40259600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40260000 0! #40260500 1! #40260600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40261000 0! #40261500 1! #40261600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40262000 0! #40262500 1! #40262600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40263000 0! #40263500 1! #40263600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40264000 0! #40264500 1! #40264600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40265000 0! #40265500 1! #40265600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40266000 0! #40266500 1! #40266600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40267000 0! #40267500 1! #40267600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #40267700 b1 g b1000 c #40268000 0! #40268500 1! #40268600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40269000 0! #40269500 1! #40269600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40270000 0! #40270500 1! #40270600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40271000 0! #40271500 1! #40271600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40272000 0! #40272500 1! #40272600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40273000 0! #40273500 1! #40273600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40274000 0! #40274500 1! #40274600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40275000 0! #40275500 1! #40275600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40276000 0! #40276500 1! #40276600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40277000 0! #40277500 1! #40277600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40278000 0! #40278500 1! #40278600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40279000 0! #40279500 1! #40279600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40280000 0! #40280500 1! #40280600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40281000 0! #40281500 1! #40281600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40282000 0! #40282500 1! #40282600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40283000 0! #40283500 1! #40283600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40284000 0! #40284500 1! #40284600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40285000 0! #40285500 1! #40285600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40286000 0! #40286500 1! #40286600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40287000 0! #40287500 1! #40287600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40288000 0! #40288500 1! #40288600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40289000 0! #40289500 1! #40289600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40290000 0! #40290500 1! #40290600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40291000 0! #40291500 1! #40291600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40292000 0! #40292500 1! #40292600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40293000 0! #40293500 1! #40293600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40294000 0! #40294500 1! #40294600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40295000 0! #40295500 1! #40295600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40296000 0! #40296500 1! #40296600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40297000 0! #40297500 1! #40297600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40298000 0! #40298500 1! #40298600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40299000 0! #40299500 1! #40299600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40300000 0! #40300500 1! #40300600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40301000 0! #40301500 1! #40301600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40302000 0! #40302500 1! #40302600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40303000 0! #40303500 1! #40303600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40304000 0! #40304500 1! #40304600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40305000 0! #40305500 1! #40305600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40306000 0! #40306500 1! #40306600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40307000 0! #40307500 1! #40307600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40308000 0! #40308500 1! #40308600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40309000 0! #40309500 1! #40309600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40310000 0! #40310500 1! #40310600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40311000 0! #40311500 1! #40311600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40312000 0! #40312500 1! #40312600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40313000 0! #40313500 1! #40313600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40314000 0! #40314500 1! #40314600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40315000 0! #40315500 1! #40315600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40316000 0! #40316500 1! #40316600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40317000 0! #40317500 1! #40317600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40318000 0! #40318500 1! #40318600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40319000 0! #40319500 1! #40319600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40320000 0! #40320500 1! #40320600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40321000 0! #40321500 1! #40321600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40322000 0! #40322500 1! #40322600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40323000 0! #40323500 1! #40323600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40324000 0! #40324500 1! #40324600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40325000 0! #40325500 1! #40325600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40326000 0! #40326500 1! #40326600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40327000 0! #40327500 1! #40327600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40328000 0! #40328500 1! #40328600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40329000 0! #40329500 1! #40329600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40330000 0! #40330500 1! #40330600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40331000 0! #40331500 1! #40331600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40332000 0! #40332500 1! #40332600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40333000 0! #40333500 1! #40333600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40334000 0! #40334500 1! #40334600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40335000 0! #40335500 1! #40335600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40336000 0! #40336500 1! #40336600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40337000 0! #40337500 1! #40337600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40338000 0! #40338500 1! #40338600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40339000 0! #40339500 1! #40339600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40340000 0! #40340500 1! #40340600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40341000 0! #40341500 1! #40341600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40342000 0! #40342500 1! #40342600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40343000 0! #40343500 1! #40343600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40344000 0! #40344500 1! #40344600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40345000 0! #40345500 1! #40345600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40346000 0! #40346500 1! #40346600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40347000 0! #40347500 1! #40347600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40348000 0! #40348500 1! #40348600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40349000 0! #40349500 1! #40349600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40350000 0! #40350500 1! #40350600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40351000 0! #40351500 1! #40351600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40352000 0! #40352500 1! #40352600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40353000 0! #40353500 1! #40353600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40354000 0! #40354500 1! #40354600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40355000 0! #40355500 1! #40355600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40356000 0! #40356500 1! #40356600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40357000 0! #40357500 1! #40357600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40358000 0! #40358500 1! #40358600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40359000 0! #40359500 1! #40359600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40360000 0! #40360500 1! #40360600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40361000 0! #40361500 1! #40361600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40362000 0! #40362500 1! #40362600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40363000 0! #40363500 1! #40363600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40364000 0! #40364500 1! #40364600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40365000 0! #40365500 1! #40365600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40366000 0! #40366500 1! #40366600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40367000 0! #40367500 1! #40367600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40368000 0! #40368500 1! #40368600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40369000 0! #40369500 1! #40369600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #40370000 0! #40370500 1! #40370600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40371000 0! #40371500 1! #40371600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40372000 0! #40372500 1! #40372600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40373000 0! #40373500 1! #40373600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40374000 0! #40374500 1! #40374600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40375000 0! #40375500 1! #40375600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40376000 0! #40376500 1! #40376600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40377000 0! #40377500 1! #40377600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40378000 0! #40378500 1! #40378600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40379000 0! #40379500 1! #40379600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40380000 0! #40380500 1! #40380600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40381000 0! #40381500 1! #40381600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40382000 0! #40382500 1! #40382600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40383000 0! #40383500 1! #40383600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40384000 0! #40384500 1! #40384600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40385000 0! #40385500 1! #40385600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40386000 0! #40386500 1! #40386600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40387000 0! #40387500 1! #40387600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40388000 0! #40388500 1! #40388600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40389000 0! #40389500 1! #40389600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40390000 0! #40390500 1! #40390600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40391000 0! #40391500 1! #40391600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40392000 0! #40392500 1! #40392600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40393000 0! #40393500 1! #40393600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40394000 0! #40394500 1! #40394600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40395000 0! #40395500 1! #40395600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40396000 0! #40396500 1! #40396600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40397000 0! #40397500 1! #40397600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40398000 0! #40398500 1! #40398600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40399000 0! #40399500 1! #40399600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40400000 0! #40400500 1! #40400600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40401000 0! #40401500 1! #40401600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40402000 0! #40402500 1! #40402600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40403000 0! #40403500 1! #40403600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40404000 0! #40404500 1! #40404600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40405000 0! #40405500 1! #40405600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40406000 0! #40406500 1! #40406600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40407000 0! #40407500 1! #40407600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40408000 0! #40408500 1! #40408600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40409000 0! #40409500 1! #40409600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40410000 0! #40410500 1! #40410600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40411000 0! #40411500 1! #40411600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40412000 0! #40412500 1! #40412600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40413000 0! #40413500 1! #40413600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40414000 0! #40414500 1! #40414600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40415000 0! #40415500 1! #40415600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40416000 0! #40416500 1! #40416600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40417000 0! #40417500 1! #40417600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40418000 0! #40418500 1! #40418600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40419000 0! #40419500 1! #40419600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40420000 0! #40420500 1! #40420600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40421000 0! #40421500 1! #40421600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40422000 0! #40422500 1! #40422600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40423000 0! #40423500 1! #40423600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40424000 0! #40424500 1! #40424600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40425000 0! #40425500 1! #40425600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40426000 0! #40426500 1! #40426600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40427000 0! #40427500 1! #40427600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40428000 0! #40428500 1! #40428600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40429000 0! #40429500 1! #40429600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40430000 0! #40430500 1! #40430600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40431000 0! #40431500 1! #40431600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40432000 0! #40432500 1! #40432600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40433000 0! #40433500 1! #40433600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40434000 0! #40434500 1! #40434600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40435000 0! #40435500 1! #40435600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40436000 0! #40436500 1! #40436600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40437000 0! #40437500 1! #40437600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40438000 0! #40438500 1! #40438600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40439000 0! #40439500 1! #40439600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40440000 0! #40440500 1! #40440600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40441000 0! #40441500 1! #40441600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40442000 0! #40442500 1! #40442600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40443000 0! #40443500 1! #40443600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40444000 0! #40444500 1! #40444600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40445000 0! #40445500 1! #40445600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40446000 0! #40446500 1! #40446600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40447000 0! #40447500 1! #40447600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40448000 0! #40448500 1! #40448600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40449000 0! #40449500 1! #40449600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40450000 0! #40450500 1! #40450600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40451000 0! #40451500 1! #40451600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40452000 0! #40452500 1! #40452600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40453000 0! #40453500 1! #40453600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40454000 0! #40454500 1! #40454600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40455000 0! #40455500 1! #40455600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40456000 0! #40456500 1! #40456600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40457000 0! #40457500 1! #40457600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40458000 0! #40458500 1! #40458600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40459000 0! #40459500 1! #40459600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40460000 0! #40460500 1! #40460600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40461000 0! #40461500 1! #40461600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40462000 0! #40462500 1! #40462600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40463000 0! #40463500 1! #40463600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40464000 0! #40464500 1! #40464600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40465000 0! #40465500 1! #40465600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40466000 0! #40466500 1! #40466600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40467000 0! #40467500 1! #40467600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40468000 0! #40468500 1! #40468600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40469000 0! #40469500 1! #40469600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40470000 0! #40470500 1! #40470600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40471000 0! #40471500 1! #40471600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40472000 0! #40472500 1! #40472600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40473000 0! #40473500 1! #40473600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40474000 0! #40474500 1! #40474600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40475000 0! #40475500 1! #40475600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40476000 0! #40476500 1! #40476600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40477000 0! #40477500 1! #40477600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40478000 0! #40478500 1! #40478600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40479000 0! #40479500 1! #40479600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40480000 0! #40480500 1! #40480600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40481000 0! #40481500 1! #40481600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40482000 0! #40482500 1! #40482600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40483000 0! #40483500 1! #40483600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40484000 0! #40484500 1! #40484600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40485000 0! #40485500 1! #40485600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40486000 0! #40486500 1! #40486600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40487000 0! #40487500 1! #40487600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40488000 0! #40488500 1! #40488600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40489000 0! #40489500 1! #40489600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40490000 0! #40490500 1! #40490600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40491000 0! #40491500 1! #40491600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40492000 0! #40492500 1! #40492600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40493000 0! #40493500 1! #40493600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40494000 0! #40494500 1! #40494600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40495000 0! #40495500 1! #40495600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40496000 0! #40496500 1! #40496600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40497000 0! #40497500 1! #40497600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40498000 0! #40498500 1! #40498600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40499000 0! #40499500 1! #40499600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40500000 0! #40500500 1! #40500600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40501000 0! #40501500 1! #40501600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40502000 0! #40502500 1! #40502600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40503000 0! #40503500 1! #40503600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40504000 0! #40504500 1! #40504600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40505000 0! #40505500 1! #40505600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40506000 0! #40506500 1! #40506600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40507000 0! #40507500 1! #40507600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40508000 0! #40508500 1! #40508600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40509000 0! #40509500 1! #40509600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40510000 0! #40510500 1! #40510600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40511000 0! #40511500 1! #40511600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40512000 0! #40512500 1! #40512600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40513000 0! #40513500 1! #40513600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40514000 0! #40514500 1! #40514600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40515000 0! #40515500 1! #40515600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40516000 0! #40516500 1! #40516600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40517000 0! #40517500 1! #40517600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40518000 0! #40518500 1! #40518600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40519000 0! #40519500 1! #40519600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40520000 0! #40520500 1! #40520600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40521000 0! #40521500 1! #40521600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40522000 0! #40522500 1! #40522600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1N 1L #40522700 b0 g b10000 c 1h #40523000 0! #40523500 1! #40523600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40524000 0! #40524500 1! #40524600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40525000 0! #40525500 1! #40525600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40526000 0! #40526500 1! #40526600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40527000 0! #40527500 1! #40527600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40528000 0! #40528500 1! #40528600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40529000 0! #40529500 1! #40529600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40530000 0! #40530500 1! #40530600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40531000 0! #40531500 1! #40531600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40532000 0! #40532500 1! #40532600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40533000 0! #40533500 1! #40533600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40534000 0! #40534500 1! #40534600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40535000 0! #40535500 1! #40535600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40536000 0! #40536500 1! #40536600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40537000 0! #40537500 1! #40537600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40538000 0! #40538500 1! #40538600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40539000 0! #40539500 1! #40539600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40540000 0! #40540500 1! #40540600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40541000 0! #40541500 1! #40541600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40542000 0! #40542500 1! #40542600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40543000 0! #40543500 1! #40543600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40544000 0! #40544500 1! #40544600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40545000 0! #40545500 1! #40545600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40546000 0! #40546500 1! #40546600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40547000 0! #40547500 1! #40547600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40548000 0! #40548500 1! #40548600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40549000 0! #40549500 1! #40549600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40550000 0! #40550500 1! #40550600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40551000 0! #40551500 1! #40551600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40552000 0! #40552500 1! #40552600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40553000 0! #40553500 1! #40553600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40554000 0! #40554500 1! #40554600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40555000 0! #40555500 1! #40555600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40556000 0! #40556500 1! #40556600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40557000 0! #40557500 1! #40557600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40558000 0! #40558500 1! #40558600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40559000 0! #40559500 1! #40559600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40560000 0! #40560500 1! #40560600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40561000 0! #40561500 1! #40561600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40562000 0! #40562500 1! #40562600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40563000 0! #40563500 1! #40563600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40564000 0! #40564500 1! #40564600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40565000 0! #40565500 1! #40565600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40566000 0! #40566500 1! #40566600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40567000 0! #40567500 1! #40567600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40568000 0! #40568500 1! #40568600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40569000 0! #40569500 1! #40569600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40570000 0! #40570500 1! #40570600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40571000 0! #40571500 1! #40571600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40572000 0! #40572500 1! #40572600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40573000 0! #40573500 1! #40573600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40574000 0! #40574500 1! #40574600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40575000 0! #40575500 1! #40575600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40576000 0! #40576500 1! #40576600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40577000 0! #40577500 1! #40577600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40578000 0! #40578500 1! #40578600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40579000 0! #40579500 1! #40579600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40580000 0! #40580500 1! #40580600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40581000 0! #40581500 1! #40581600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40582000 0! #40582500 1! #40582600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40583000 0! #40583500 1! #40583600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40584000 0! #40584500 1! #40584600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40585000 0! #40585500 1! #40585600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40586000 0! #40586500 1! #40586600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40587000 0! #40587500 1! #40587600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40588000 0! #40588500 1! #40588600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40589000 0! #40589500 1! #40589600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40590000 0! #40590500 1! #40590600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40591000 0! #40591500 1! #40591600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40592000 0! #40592500 1! #40592600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40593000 0! #40593500 1! #40593600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40594000 0! #40594500 1! #40594600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40595000 0! #40595500 1! #40595600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40596000 0! #40596500 1! #40596600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40597000 0! #40597500 1! #40597600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40598000 0! #40598500 1! #40598600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40599000 0! #40599500 1! #40599600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40600000 0! #40600500 1! #40600600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40601000 0! #40601500 1! #40601600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40602000 0! #40602500 1! #40602600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40603000 0! #40603500 1! #40603600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40604000 0! #40604500 1! #40604600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40605000 0! #40605500 1! #40605600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40606000 0! #40606500 1! #40606600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40607000 0! #40607500 1! #40607600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40608000 0! #40608500 1! #40608600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40609000 0! #40609500 1! #40609600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40610000 0! #40610500 1! #40610600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40611000 0! #40611500 1! #40611600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40612000 0! #40612500 1! #40612600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40613000 0! #40613500 1! #40613600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40614000 0! #40614500 1! #40614600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40615000 0! #40615500 1! #40615600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40616000 0! #40616500 1! #40616600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40617000 0! #40617500 1! #40617600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40618000 0! #40618500 1! #40618600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40619000 0! #40619500 1! #40619600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40620000 0! #40620500 1! #40620600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40621000 0! #40621500 1! #40621600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40622000 0! #40622500 1! #40622600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40623000 0! #40623500 1! #40623600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40624000 0! #40624500 1! #40624600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 0N 0L #40624700 b11 q b10000 ] #40625000 0! #40625500 1! #40625600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40626000 0! #40626500 1! #40626600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40627000 0! #40627500 1! #40627600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40628000 0! #40628500 1! #40628600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40629000 0! #40629500 1! #40629600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40630000 0! #40630500 1! #40630600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40631000 0! #40631500 1! #40631600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40632000 0! #40632500 1! #40632600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40633000 0! #40633500 1! #40633600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40634000 0! #40634500 1! #40634600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40635000 0! #40635500 1! #40635600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40636000 0! #40636500 1! #40636600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40637000 0! #40637500 1! #40637600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40638000 0! #40638500 1! #40638600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40639000 0! #40639500 1! #40639600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40640000 0! #40640500 1! #40640600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40641000 0! #40641500 1! #40641600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40642000 0! #40642500 1! #40642600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40643000 0! #40643500 1! #40643600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40644000 0! #40644500 1! #40644600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40645000 0! #40645500 1! #40645600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40646000 0! #40646500 1! #40646600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40647000 0! #40647500 1! #40647600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40648000 0! #40648500 1! #40648600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40649000 0! #40649500 1! #40649600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40650000 0! #40650500 1! #40650600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40651000 0! #40651500 1! #40651600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40652000 0! #40652500 1! #40652600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40653000 0! #40653500 1! #40653600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40654000 0! #40654500 1! #40654600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40655000 0! #40655500 1! #40655600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40656000 0! #40656500 1! #40656600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40657000 0! #40657500 1! #40657600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40658000 0! #40658500 1! #40658600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40659000 0! #40659500 1! #40659600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40660000 0! #40660500 1! #40660600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40661000 0! #40661500 1! #40661600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40662000 0! #40662500 1! #40662600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40663000 0! #40663500 1! #40663600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40664000 0! #40664500 1! #40664600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40665000 0! #40665500 1! #40665600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40666000 0! #40666500 1! #40666600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40667000 0! #40667500 1! #40667600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40668000 0! #40668500 1! #40668600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40669000 0! #40669500 1! #40669600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40670000 0! #40670500 1! #40670600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40671000 0! #40671500 1! #40671600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40672000 0! #40672500 1! #40672600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40673000 0! #40673500 1! #40673600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40674000 0! #40674500 1! #40674600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40675000 0! #40675500 1! #40675600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40676000 0! #40676500 1! #40676600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40677000 0! #40677500 1! #40677600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40678000 0! #40678500 1! #40678600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40679000 0! #40679500 1! #40679600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40680000 0! #40680500 1! #40680600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40681000 0! #40681500 1! #40681600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40682000 0! #40682500 1! #40682600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40683000 0! #40683500 1! #40683600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40684000 0! #40684500 1! #40684600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40685000 0! #40685500 1! #40685600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40686000 0! #40686500 1! #40686600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40687000 0! #40687500 1! #40687600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40688000 0! #40688500 1! #40688600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40689000 0! #40689500 1! #40689600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40690000 0! #40690500 1! #40690600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40691000 0! #40691500 1! #40691600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40692000 0! #40692500 1! #40692600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40693000 0! #40693500 1! #40693600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40694000 0! #40694500 1! #40694600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40695000 0! #40695500 1! #40695600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40696000 0! #40696500 1! #40696600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40697000 0! #40697500 1! #40697600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40698000 0! #40698500 1! #40698600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40699000 0! #40699500 1! #40699600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40700000 0! #40700500 1! #40700600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40701000 0! #40701500 1! #40701600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40702000 0! #40702500 1! #40702600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40703000 0! #40703500 1! #40703600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40704000 0! #40704500 1! #40704600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40705000 0! #40705500 1! #40705600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40706000 0! #40706500 1! #40706600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40707000 0! #40707500 1! #40707600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40708000 0! #40708500 1! #40708600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40709000 0! #40709500 1! #40709600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40710000 0! #40710500 1! #40710600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40711000 0! #40711500 1! #40711600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40712000 0! #40712500 1! #40712600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40713000 0! #40713500 1! #40713600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40714000 0! #40714500 1! #40714600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40715000 0! #40715500 1! #40715600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40716000 0! #40716500 1! #40716600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40717000 0! #40717500 1! #40717600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40718000 0! #40718500 1! #40718600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40719000 0! #40719500 1! #40719600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40720000 0! #40720500 1! #40720600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40721000 0! #40721500 1! #40721600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40722000 0! #40722500 1! #40722600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40723000 0! #40723500 1! #40723600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40724000 0! #40724500 1! #40724600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40725000 0! #40725500 1! #40725600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40726000 0! #40726500 1! #40726600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H 1Q 1O #40727000 0! #40727500 1! #40727600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40728000 0! #40728500 1! #40728600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40729000 0! #40729500 1! #40729600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40730000 0! #40730500 1! #40730600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40731000 0! #40731500 1! #40731600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40732000 0! #40732500 1! #40732600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40733000 0! #40733500 1! #40733600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40734000 0! #40734500 1! #40734600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40735000 0! #40735500 1! #40735600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40736000 0! #40736500 1! #40736600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40737000 0! #40737500 1! #40737600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40738000 0! #40738500 1! #40738600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40739000 0! #40739500 1! #40739600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40740000 0! #40740500 1! #40740600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40741000 0! #40741500 1! #40741600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40742000 0! #40742500 1! #40742600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40743000 0! #40743500 1! #40743600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40744000 0! #40744500 1! #40744600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40745000 0! #40745500 1! #40745600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40746000 0! #40746500 1! #40746600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40747000 0! #40747500 1! #40747600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40748000 0! #40748500 1! #40748600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40749000 0! #40749500 1! #40749600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40750000 0! #40750500 1! #40750600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40751000 0! #40751500 1! #40751600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40752000 0! #40752500 1! #40752600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40753000 0! #40753500 1! #40753600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40754000 0! #40754500 1! #40754600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40755000 0! #40755500 1! #40755600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40756000 0! #40756500 1! #40756600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40757000 0! #40757500 1! #40757600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40758000 0! #40758500 1! #40758600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40759000 0! #40759500 1! #40759600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40760000 0! #40760500 1! #40760600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40761000 0! #40761500 1! #40761600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40762000 0! #40762500 1! #40762600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40763000 0! #40763500 1! #40763600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40764000 0! #40764500 1! #40764600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40765000 0! #40765500 1! #40765600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40766000 0! #40766500 1! #40766600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40767000 0! #40767500 1! #40767600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40768000 0! #40768500 1! #40768600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40769000 0! #40769500 1! #40769600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40770000 0! #40770500 1! #40770600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40771000 0! #40771500 1! #40771600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40772000 0! #40772500 1! #40772600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40773000 0! #40773500 1! #40773600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40774000 0! #40774500 1! #40774600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40775000 0! #40775500 1! #40775600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40776000 0! #40776500 1! #40776600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40777000 0! #40777500 1! #40777600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 1N 1L #40777700 b111 g b100001 c 0h #40778000 0! #40778500 1! #40778600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40779000 0! #40779500 1! #40779600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40780000 0! #40780500 1! #40780600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40781000 0! #40781500 1! #40781600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40782000 0! #40782500 1! #40782600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40783000 0! #40783500 1! #40783600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40784000 0! #40784500 1! #40784600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40785000 0! #40785500 1! #40785600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40786000 0! #40786500 1! #40786600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40787000 0! #40787500 1! #40787600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40788000 0! #40788500 1! #40788600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40789000 0! #40789500 1! #40789600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40790000 0! #40790500 1! #40790600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40791000 0! #40791500 1! #40791600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40792000 0! #40792500 1! #40792600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40793000 0! #40793500 1! #40793600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40794000 0! #40794500 1! #40794600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40795000 0! #40795500 1! #40795600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40796000 0! #40796500 1! #40796600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40797000 0! #40797500 1! #40797600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40798000 0! #40798500 1! #40798600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40799000 0! #40799500 1! #40799600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40800000 0! #40800500 1! #40800600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40801000 0! #40801500 1! #40801600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40802000 0! #40802500 1! #40802600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40803000 0! #40803500 1! #40803600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40804000 0! #40804500 1! #40804600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40805000 0! #40805500 1! #40805600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40806000 0! #40806500 1! #40806600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40807000 0! #40807500 1! #40807600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40808000 0! #40808500 1! #40808600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40809000 0! #40809500 1! #40809600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40810000 0! #40810500 1! #40810600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40811000 0! #40811500 1! #40811600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40812000 0! #40812500 1! #40812600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40813000 0! #40813500 1! #40813600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40814000 0! #40814500 1! #40814600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40815000 0! #40815500 1! #40815600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40816000 0! #40816500 1! #40816600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40817000 0! #40817500 1! #40817600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40818000 0! #40818500 1! #40818600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40819000 0! #40819500 1! #40819600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40820000 0! #40820500 1! #40820600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40821000 0! #40821500 1! #40821600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40822000 0! #40822500 1! #40822600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40823000 0! #40823500 1! #40823600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40824000 0! #40824500 1! #40824600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40825000 0! #40825500 1! #40825600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40826000 0! #40826500 1! #40826600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40827000 0! #40827500 1! #40827600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40828000 0! #40828500 1! #40828600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40829000 0! #40829500 1! #40829600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40830000 0! #40830500 1! #40830600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40831000 0! #40831500 1! #40831600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40832000 0! #40832500 1! #40832600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40833000 0! #40833500 1! #40833600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40834000 0! #40834500 1! #40834600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40835000 0! #40835500 1! #40835600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40836000 0! #40836500 1! #40836600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40837000 0! #40837500 1! #40837600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40838000 0! #40838500 1! #40838600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40839000 0! #40839500 1! #40839600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40840000 0! #40840500 1! #40840600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40841000 0! #40841500 1! #40841600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40842000 0! #40842500 1! #40842600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40843000 0! #40843500 1! #40843600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40844000 0! #40844500 1! #40844600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40845000 0! #40845500 1! #40845600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40846000 0! #40846500 1! #40846600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40847000 0! #40847500 1! #40847600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40848000 0! #40848500 1! #40848600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40849000 0! #40849500 1! #40849600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40850000 0! #40850500 1! #40850600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40851000 0! #40851500 1! #40851600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40852000 0! #40852500 1! #40852600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40853000 0! #40853500 1! #40853600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40854000 0! #40854500 1! #40854600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40855000 0! #40855500 1! #40855600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40856000 0! #40856500 1! #40856600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40857000 0! #40857500 1! #40857600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40858000 0! #40858500 1! #40858600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40859000 0! #40859500 1! #40859600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40860000 0! #40860500 1! #40860600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40861000 0! #40861500 1! #40861600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40862000 0! #40862500 1! #40862600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40863000 0! #40863500 1! #40863600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40864000 0! #40864500 1! #40864600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40865000 0! #40865500 1! #40865600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40866000 0! #40866500 1! #40866600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40867000 0! #40867500 1! #40867600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40868000 0! #40868500 1! #40868600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40869000 0! #40869500 1! #40869600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40870000 0! #40870500 1! #40870600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40871000 0! #40871500 1! #40871600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40872000 0! #40872500 1! #40872600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40873000 0! #40873500 1! #40873600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40874000 0! #40874500 1! #40874600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40875000 0! #40875500 1! #40875600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40876000 0! #40876500 1! #40876600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40877000 0! #40877500 1! #40877600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40878000 0! #40878500 1! #40878600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40879000 0! #40879500 1! #40879600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H 0N 0L #40879700 b100 q 1i #40880000 0! #40880500 1! #40880600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40881000 0! #40881500 1! #40881600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H b11000011 C #40882000 0! #40882500 1! #40882600 b11000011 J xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40883000 0! #40883500 1! #40883600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B b11000001 C 1H #40884000 0! #40884500 1! #40884600 b11000001 J xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40885000 0! #40885500 1! #40885600 1E 1F 1G b1000000 D 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40886000 0! #40886500 1! #40886600 xE bx D x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40887000 0! #40887500 1! #40887600 0E 1F 1G 0# 0$ 0% 0& 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 1@ 0A 0B 1H #40888000 0! #40888500 1! #40888600 xE x# x$ x% x& x' x( x) x* x+ x, x- x. x/ x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x: x; x< x= x> x? x@ xA xB xF 0G 0H #40889000 0! #40889500 1! #40890000 0! #40890500 1! #40891000 0! #40891500 1! #40892000 0! #40892500 1! #40893000 0! #40893500 1! #40894000 0! #40894500 1! #40895000 0! #40895500 1! #40896000 0! #40896500 1! #40897000 0! #40897500 1! #40898000 0! #40898500 1! #40899000 0! #40899500 1! #40900000 0! #40900500 1! #40901000 0! #40901500 1! #40902000 0! #40902500 1! #40903000 0! #40903500 1! #40904000 0! #40904500 1! #40905000 0! #40905500 1! #40906000 0! #40906500 1! #40907000 0! #40907500 1! #40908000 0! #40908500 1! #40909000 0! #40909500 1! #40910000 0! #40910500 1! #40911000 0! #40911500 1! #40912000 0! #40912500 1! #40913000 0! #40913500 1! #40914000 0! #40914500 1! #40915000 0! #40915500 1! #40916000 0! #40916500 1! #40917000 0! #40917500 1! #40918000 0! #40918500 1! #40919000 0! #40919500 1! #40920000 0! #40920500 1! #40921000 0! #40921500 1! #40922000 0! #40922500 1! #40923000 0! #40923500 1! #40924000 0! #40924500 1! #40925000 0! #40925500 1! #40926000 0! #40926500 1! #40927000 0! #40927500 1! #40928000 0! #40928500 1! #40929000 0! #40929500 1! #40930000 0! #40930500 1! #40931000 0! #40931500 1! #40932000 0! #40932500 1! #40933000 0! #40933500 1! #40934000 0! #40934500 1! #40935000 0! #40935500 1! #40936000 0! #40936500 1! #40937000 0! #40937500 1! #40938000 0! #40938500 1! #40939000 0! #40939500 1! #40940000 0! #40940500 1! #40941000 0! #40941500 1! #40942000 0! #40942500 1! #40943000 0! #40943500 1! #40944000 0! #40944500 1! #40945000 0! #40945500 1! #40946000 0! #40946500 1! #40947000 0! #40947500 1! #40948000 0! #40948500 1! #40949000 0! #40949500 1! #40950000 0! #40950500 1! #40951000 0! #40951500 1! #40952000 0! #40952500 1! #40953000 0! #40953500 1! #40954000 0! #40954500 1! #40955000 0! #40955500 1! #40956000 0! #40956500 1! #40957000 0! #40957500 1! #40958000 0! #40958500 1! #40959000 0! #40959500 1! #40960000 0! #40960500 1! #40961000 0! #40961500 1! #40962000 0! #40962500 1! #40963000 0! #40963500 1! #40964000 0! #40964500 1! #40965000 0! #40965500 1! #40966000 0! #40966500 1! #40967000 0! #40967500 1! #40968000 0! #40968500 1! #40969000 0! #40969500 1! #40970000 0! #40970500 1! #40971000 0! #40971500 1! #40972000 0! #40972500 1! #40973000 0! #40973500 1! #40974000 0! #40974500 1! #40975000 0! #40975500 1! #40976000 0! #40976500 1! #40977000 0! #40977500 1! #40978000 0! #40978500 1! #40979000 0! #40979500 1! #40980000 0! #40980500 1! #40981000 0! #40981500 1! #40981600 0Q 0O #40982000 0! #40982500 1! #40983000 0! #40983500 1! #40984000 0! #40984500 1! #40985000 0! #40985500 1! #40986000 0! #40986500 1! #40987000 0! #40987500 1! #40988000 0! #40988500 1! #40989000 0! #40989500 1! #40990000 0! #40990500 1! #40991000 0! #40991500 1! #40992000 0! #40992500 1! #40993000 0! #40993500 1! #40994000 0! #40994500 1! #40995000 0! #40995500 1! #40996000 0! #40996500 1! #40997000 0! #40997500 1! #40998000 0! #40998500 1! #40999000 0! #40999500 1! #41000000 0! #41000500 1! #41001000 0! #41001500 1! #41002000 0! #41002500 1! #41003000 0! #41003500 1! #41004000 0! #41004500 1! #41005000 0! #41005500 1! #41006000 0! #41006500 1! #41007000 0! #41007500 1! #41008000 0! #41008500 1! #41009000 0! #41009500 1! #41010000 0! #41010500 1! #41011000 0! #41011500 1! #41012000 0! #41012500 1! #41013000 0! #41013500 1! #41014000 0! #41014500 1! #41015000 0! #41015500 1! #41016000 0! #41016500 1! #41017000 0! #41017500 1! #41018000 0! #41018500 1! #41019000 0! #41019500 1! #41020000 0! #41020500 1! #41021000 0! #41021500 1! #41022000 0! #41022500 1! #41023000 0! #41023500 1! #41024000 0! #41024500 1! #41025000 0! #41025500 1! #41026000 0! #41026500 1! #41027000 0! #41027500 1! #41028000 0! #41028500 1! #41029000 0! #41029500 1! #41030000 0! #41030500 1! #41031000 0! #41031500 1! #41032000 0! #41032500 1! #41032600 1N 1L #41032700 b1000010 c #41033000 0! #41033500 1! #41034000 0! #41034500 1! #41035000 0! #41035500 1! #41036000 0! #41036500 1! #41037000 0! #41037500 1! #41038000 0! #41038500 1! #41039000 0! #41039500 1! #41040000 0! #41040500 1! #41041000 0! #41041500 1! #41042000 0! #41042500 1! #41043000 0! #41043500 1! #41044000 0! #41044500 1! #41045000 0! #41045500 1! #41046000 0! #41046500 1! #41047000 0! #41047500 1! #41048000 0! #41048500 1! #41049000 0! #41049500 1! #41050000 0! #41050500 1! #41051000 0! #41051500 1! #41052000 0! #41052500 1! #41053000 0! #41053500 1! #41054000 0! #41054500 1! #41055000 0! #41055500 1! #41056000 0! #41056500 1! #41057000 0! #41057500 1! #41058000 0! #41058500 1! #41059000 0! #41059500 1! #41060000 0! #41060500 1! #41061000 0! #41061500 1! #41062000 0! #41062500 1! #41063000 0! #41063500 1! #41064000 0! #41064500 1! #41065000 0! #41065500 1! #41066000 0! #41066500 1! #41067000 0! #41067500 1! #41068000 0! #41068500 1! #41069000 0! #41069500 1! #41070000 0! #41070500 1! #41071000 0! #41071500 1! #41072000 0! #41072500 1! #41073000 0! #41073500 1! #41074000 0! #41074500 1! #41075000 0! #41075500 1! #41076000 0! #41076500 1! #41077000 0! #41077500 1! #41078000 0! #41078500 1! #41079000 0! #41079500 1! #41080000 0! #41080500 1! #41081000 0! #41081500 1! #41082000 0! #41082500 1! #41083000 0! #41083500 1! #41083600 1Q 1O #41083700 1a 1f #41083800 b0 q #41084000 0! #41084500 1! #41085000 0! #41085500 1! #41086000 0! #41086500 1! #41087000 0! #41087500 1! #41088000 0! #41088500 1! #41089000 0! #41089500 1! #41090000 0! #41090500 1! #41091000 0! #41091500 1! #41092000 0! #41092500 1! #41093000 0! #41093500 1! #41094000 0! #41094500 1! #41095000 0! #41095500 1! #41096000 0! #41096500 1! #41097000 0! #41097500 1! #41098000 0! #41098500 1! #41099000 0! #41099500 1! #41100000 0! #41100500 1! #41101000 0! #41101500 1! #41102000 0! #41102500 1! #41103000 0! #41103500 1! #41104000 0! #41104500 1! #41105000 0! #41105500 1! #41106000 0! #41106500 1! #41107000 0! #41107500 1! #41108000 0! #41108500 1! #41109000 0! #41109500 1! #41110000 0! #41110500 1! #41111000 0! #41111500 1! #41112000 0! #41112500 1! #41113000 0! #41113500 1! #41114000 0! #41114500 1! #41115000 0! #41115500 1! #41116000 0! #41116500 1! #41117000 0! #41117500 1! #41118000 0! #41118500 1! #41119000 0! #41119500 1! #41120000 0! #41120500 1! #41121000 0! #41121500 1! #41122000 0! #41122500 1! #41123000 0! #41123500 1! #41124000 0! #41124500 1! #41125000 0! #41125500 1! #41126000 0! #41126500 1! #41127000 0! #41127500 1! #41128000 0! #41128500 1! #41129000 0! #41129500 1! #41130000 0! #41130500 1! #41131000 0! #41131500 1! #41132000 0! #41132500 1! #41133000 0! #41133500 1! #41134000 0! #41134500 1! #41135000 0! #41135500 1! #41136000 0! #41136500 1! #41137000 0! #41137500 1! #41138000 0! #41138500 1! #41139000 0! #41139500 1! #41140000 0! #41140500 1! #41141000 0! #41141500 1! #41142000 0! #41142500 1! #41143000 0! #41143500 1! #41144000 0! #41144500 1! #41145000 0! #41145500 1! #41146000 0! #41146500 1! #41147000 0! #41147500 1! #41148000 0! #41148500 1! #41149000 0! #41149500 1! #41150000 0! #41150500 1! #41151000 0! #41151500 1! #41152000 0! #41152500 1! #41153000 0! #41153500 1! #41154000 0! #41154500 1! #41155000 0! #41155500 1! #41156000 0! #41156500 1! #41157000 0! #41157500 1! #41158000 0! #41158500 1! #41159000 0! #41159500 1! #41160000 0! #41160500 1! #41161000 0! #41161500 1! #41162000 0! #41162500 1! #41163000 0! #41163500 1! #41164000 0! #41164500 1! #41165000 0! #41165500 1! #41166000 0! #41166500 1! #41167000 0! #41167500 1! #41168000 0! #41168500 1! #41169000 0! #41169500 1! #41170000 0! #41170500 1! #41171000 0! #41171500 1! #41172000 0! #41172500 1! #41173000 0! #41173500 1! #41174000 0! #41174500 1! #41175000 0! #41175500 1! #41176000 0! #41176500 1! #41177000 0! #41177500 1! #41178000 0! #41178500 1! #41179000 0! #41179500 1! #41180000 0! #41180500 1! #41181000 0! #41181500 1! #41182000 0! #41182500 1! #41183000 0! #41183500 1! #41184000 0! #41184500 1! #41185000 0! #41185500 1! #41186000 0! #41186500 1! #41187000 0! #41187500 1! #41188000 0! #41188500 1! #41189000 0! #41189500 1! #41190000 0! #41190500 1! #41191000 0! #41191500 1! #41192000 0! #41192500 1! #41193000 0! #41193500 1! #41194000 0! #41194500 1! #41195000 0! #41195500 1! #41196000 0! #41196500 1! #41197000 0! #41197500 1! #41198000 0! #41198500 1! #41199000 0! #41199500 1! #41200000 0! #41200500 1! #41201000 0! #41201500 1! #41202000 0! #41202500 1! #41203000 0! #41203500 1! #41204000 0! #41204500 1! #41205000 0! #41205500 1! #41206000 0! #41206500 1! #41207000 0! #41207500 1! #41208000 0! #41208500 1! #41209000 0! #41209500 1! #41210000 0! #41210500 1! #41211000 0! #41211500 1! #41212000 0! #41212500 1! #41213000 0! #41213500 1! #41214000 0! #41214500 1! #41215000 0! #41215500 1! #41216000 0! #41216500 1! #41217000 0! #41217500 1! #41218000 0! #41218500 1! #41219000 0! #41219500 1! #41220000 0! #41220500 1! #41221000 0! #41221500 1! #41222000 0! #41222500 1! #41223000 0! #41223500 1! #41224000 0! #41224500 1! #41225000 0! #41225500 1! #41226000 0! #41226500 1! #41227000 0! #41227500 1! #41228000 0! #41228500 1! #41229000 0! #41229500 1! #41230000 0! #41230500 1! #41231000 0! #41231500 1! #41232000 0! #41232500 1! #41233000 0! #41233500 1! #41234000 0! #41234500 1! #41235000 0! #41235500 1! #41236000 0! #41236500 1! #41237000 0! #41237500 1! #41238000 0! #41238500 1! #41239000 0! #41239500 1! #41240000 0! #41240500 1! #41241000 0! #41241500 1! #41242000 0! #41242500 1! #41243000 0! #41243500 1! #41244000 0! #41244500 1! #41245000 0! #41245500 1! #41246000 0! #41246500 1! #41247000 0! #41247500 1! #41248000 0! #41248500 1! #41249000 0! #41249500 1! #41250000 0! #41250500 1! #41251000 0! #41251500 1! #41252000 0! #41252500 1! #41253000 0! #41253500 1! #41254000 0! #41254500 1! #41255000 0! #41255500 1! #41256000 0! #41256500 1! #41257000 0! #41257500 1! #41258000 0! #41258500 1! #41259000 0! #41259500 1! #41260000 0! #41260500 1! #41261000 0! #41261500 1! #41262000 0! #41262500 1! #41263000 0! #41263500 1! #41264000 0! #41264500 1! #41265000 0! #41265500 1! #41266000 0! #41266500 1! #41267000 0! #41267500 1! #41268000 0! #41268500 1! #41269000 0! #41269500 1! #41270000 0! #41270500 1! #41271000 0! #41271500 1! #41272000 0! #41272500 1! #41273000 0! #41273500 1! #41274000 0! #41274500 1! #41275000 0! #41275500 1! #41276000 0! #41276500 1! #41277000 0! #41277500 1! #41278000 0! #41278500 1! #41279000 0! #41279500 1! #41280000 0! #41280500 1! #41281000 0! #41281500 1! #41282000 0! #41282500 1! #41283000 0! #41283500 1! #41284000 0! #41284500 1! #41285000 0! #41285500 1! #41286000 0! #41286500 1! #41287000 0! #41287500 1! #41288000 0! #41288500 1! #41289000 0! #41289500 1! #41290000 0! #41290500 1! #41291000 0! #41291500 1! #41292000 0! #41292500 1! #41293000 0! #41293500 1! #41294000 0! #41294500 1! #41295000 0! #41295500 1! #41296000 0! #41296500 1! #41297000 0! #41297500 1! #41298000 0! #41298500 1! #41299000 0! #41299500 1! #41300000 0! #41300500 1! #41301000 0! #41301500 1! #41302000 0! #41302500 1! #41303000 0! #41303500 1! #41304000 0! #41304500 1! #41305000 0! #41305500 1! #41306000 0! #41306500 1! #41307000 0! #41307500 1! #41308000 0! #41308500 1! #41309000 0! #41309500 1! #41310000 0! #41310500 1! #41311000 0! #41311500 1! #41312000 0! #41312500 1! #41313000 0! #41313500 1! #41314000 0! #41314500 1! #41315000 0! #41315500 1! #41316000 0! #41316500 1! #41317000 0! #41317500 1! #41318000 0! #41318500 1! #41319000 0! #41319500 1! #41320000 0! #41320500 1! #41321000 0! #41321500 1! #41322000 0! #41322500 1! #41323000 0! #41323500 1! #41324000 0! #41324500 1! #41325000 0! #41325500 1! #41326000 0! #41326500 1! #41327000 0! #41327500 1! #41328000 0! #41328500 1! #41329000 0! #41329500 1! #41330000 0! #41330500 1! #41331000 0! #41331500 1! #41332000 0! #41332500 1! #41333000 0! #41333500 1! #41334000 0! #41334500 1! #41335000 0! #41335500 1! #41336000 0! #41336500 1! #41337000 0! #41337500 1! #41338000 0! #41338500 1! #41339000 0! #41339500 1! #41340000 0! #41340500 1! #41341000 0! #41341500 1! #41342000 0! #41342500 1! #41343000 0! #41343500 1! #41344000 0! #41344500 1! #41345000 0! #41345500 1! #41346000 0! #41346500 1! #41347000 0! #41347500 1! #41348000 0! #41348500 1! #41349000 0! #41349500 1! #41350000 0! #41350500 1! #41351000 0! #41351500 1! #41352000 0! #41352500 1! #41353000 0! #41353500 1! #41354000 0! #41354500 1! #41355000 0! #41355500 1! #41356000 0! #41356500 1! #41357000 0! #41357500 1! #41358000 0! #41358500 1! #41359000 0! #41359500 1! #41360000 0! #41360500 1! #41361000 0! #41361500 1! #41362000 0! #41362500 1! #41363000 0! #41363500 1! #41364000 0! #41364500 1! #41365000 0! #41365500 1! #41366000 0! #41366500 1! #41367000 0! #41367500 1! #41368000 0! #41368500 1! #41369000 0! #41369500 1! #41370000 0! #41370500 1! #41371000 0! #41371500 1! #41372000 0! #41372500 1! #41373000 0! #41373500 1! #41374000 0! #41374500 1! #41375000 0! #41375500 1! #41376000 0! #41376500 1! #41377000 0! #41377500 1! #41378000 0! #41378500 1! #41379000 0! #41379500 1! #41380000 0! #41380500 1! #41381000 0! #41381500 1! #41382000 0! #41382500 1! #41383000 0! #41383500 1! #41384000 0! #41384500 1! #41385000 0! #41385500 1! #41386000 0! #41386500 1! #41387000 0! #41387500 1! #41388000 0! #41388500 1! #41389000 0! #41389500 1! #41390000 0! #41390500 1! #41391000 0! #41391500 1! #41392000 0! #41392500 1! #41393000 0! #41393500 1! #41394000 0! #41394500 1! #41395000 0! #41395500 1! #41396000 0! #41396500 1! #41397000 0! #41397500 1! #41398000 0! #41398500 1! #41399000 0! #41399500 1! #41400000 0! #41400500 1! #41401000 0! #41401500 1! #41402000 0! #41402500 1! #41403000 0! #41403500 1! #41404000 0! #41404500 1! #41405000 0! #41405500 1! #41406000 0! #41406500 1! #41407000 0! #41407500 1! #41408000 0! #41408500 1! #41409000 0! #41409500 1! #41410000 0! #41410500 1! #41411000 0! #41411500 1! #41412000 0! #41412500 1! #41413000 0! #41413500 1! #41414000 0! #41414500 1! #41415000 0! #41415500 1! #41416000 0! #41416500 1! #41417000 0! #41417500 1! #41418000 0! #41418500 1! #41419000 0! #41419500 1! #41420000 0! #41420500 1! #41421000 0! #41421500 1! #41422000 0! #41422500 1! #41423000 0! #41423500 1! #41424000 0! #41424500 1! #41425000 0! #41425500 1! #41426000 0! #41426500 1! #41427000 0! #41427500 1! #41428000 0! #41428500 1! #41429000 0! #41429500 1! #41430000 0! #41430500 1! #41431000 0! #41431500 1! #41432000 0! #41432500 1! #41433000 0! #41433500 1! #41434000 0! #41434500 1! #41435000 0! #41435500 1! #41436000 0! #41436500 1! #41437000 0! #41437500 1! #41438000 0! #41438500 1! #41439000 0! #41439500 1! #41440000 0! #41440500 1! #41441000 0! #41441500 1! #41442000 0! #41442500 1! #41443000 0! #41443500 1! #41444000 0! #41444500 1! #41445000 0! #41445500 1! #41446000 0! #41446500 1! #41447000 0! #41447500 1! #41448000 0! #41448500 1! #41449000 0! #41449500 1! #41450000 0! #41450500 1! #41451000 0! #41451500 1! #41452000 0! #41452500 1! #41453000 0! #41453500 1! #41454000 0! #41454500 1! #41455000 0! #41455500 1! #41456000 0! #41456500 1! #41457000 0! #41457500 1! #41458000 0! #41458500 1! #41459000 0! #41459500 1! #41460000 0! #41460500 1! #41461000 0! #41461500 1! #41462000 0! #41462500 1! #41463000 0! #41463500 1! #41464000 0! #41464500 1! #41465000 0! #41465500 1! #41466000 0! #41466500 1! #41467000 0! #41467500 1! #41468000 0! #41468500 1! #41469000 0! #41469500 1! #41470000 0! #41470500 1! #41471000 0! #41471500 1! #41472000 0! #41472500 1! #41473000 0! #41473500 1! #41474000 0! #41474500 1! #41475000 0! #41475500 1! #41476000 0! #41476500 1! #41477000 0! #41477500 1! #41478000 0! #41478500 1! #41479000 0! #41479500 1! #41480000 0! #41480500 1! #41481000 0! #41481500 1! #41482000 0! #41482500 1! #41483000 0! #41483500 1! #41484000 0! #41484500 1! #41485000 0! #41485500 1! #41486000 0! #41486500 1! #41487000 0! #41487500 1! #41488000 0! #41488500 1! #41489000 0! #41489500 1! #41490000 0! #41490500 1! #41491000 0! #41491500 1! #41492000 0! #41492500 1! #41493000 0! #41493500 1! #41494000 0! #41494500 1! #41495000 0! #41495500 1! #41496000 0! #41496500 1! #41497000 0! #41497500 1! #41498000 0! #41498500 1! #41499000 0! #41499500 1! #41500000 0! #41500500 1! #41501000 0! #41501500 1! #41502000 0! #41502500 1! #41503000 0! #41503500 1! #41504000 0! #41504500 1! #41505000 0! #41505500 1! #41506000 0! #41506500 1! #41507000 0! #41507500 1! #41508000 0! #41508500 1! #41509000 0! #41509500 1! #41510000 0! #41510500 1! #41511000 0! #41511500 1! #41512000 0! #41512500 1! #41513000 0! #41513500 1! #41514000 0! #41514500 1! #41515000 0! #41515500 1! #41516000 0! #41516500 1! #41517000 0! #41517500 1! #41518000 0! #41518500 1! #41519000 0! #41519500 1! #41520000 0! #41520500 1! #41521000 0! #41521500 1! #41522000 0! #41522500 1! #41523000 0! #41523500 1! #41524000 0! #41524500 1! #41525000 0! #41525500 1! #41526000 0! #41526500 1! #41527000 0! #41527500 1! #41528000 0! #41528500 1! #41529000 0! #41529500 1! #41530000 0! #41530500 1! #41531000 0! #41531500 1! #41532000 0! #41532500 1! #41533000 0! #41533500 1! #41534000 0! #41534500 1! #41535000 0! #41535500 1! #41536000 0! #41536500 1! #41537000 0! #41537500 1! #41538000 0! #41538500 1! #41539000 0! #41539500 1! #41540000 0! #41540500 1! #41541000 0! #41541500 1! #41542000 0! #41542500 1! #41543000 0! #41543500 1! #41544000 0! #41544500 1! #41545000 0! #41545500 1! #41546000 0! #41546500 1! #41547000 0! #41547500 1! #41548000 0! #41548500 1! #41549000 0! #41549500 1! #41550000 0! #41550500 1! #41551000 0! #41551500 1! #41552000 0! #41552500 1! #41553000 0! #41553500 1! #41554000 0! #41554500 1! #41555000 0! #41555500 1! #41556000 0! #41556500 1! #41557000 0! #41557500 1! #41558000 0! #41558500 1! #41559000 0! #41559500 1! #41560000 0! #41560500 1! #41561000 0! #41561500 1! #41562000 0! #41562500 1! #41563000 0! #41563500 1! #41564000 0! #41564500 1! #41565000 0! #41565500 1! #41566000 0! #41566500 1! #41567000 0! #41567500 1! #41568000 0! #41568500 1! #41569000 0! #41569500 1! #41570000 0! #41570500 1! #41571000 0! #41571500 1! #41572000 0! #41572500 1! #41573000 0! #41573500 1! #41574000 0! #41574500 1! #41575000 0! #41575500 1! #41576000 0! #41576500 1! #41577000 0! #41577500 1! #41578000 0! #41578500 1! #41579000 0! #41579500 1! #41580000 0! #41580500 1! #41581000 0! #41581500 1! #41582000 0! #41582500 1! #41583000 0! #41583500 1! #41584000 0! #41584500 1! #41585000 0! #41585500 1! #41586000 0! #41586500 1! #41587000 0! #41587500 1! #41588000 0! #41588500 1! #41589000 0! #41589500 1! #41590000 0! #41590500 1! #41591000 0! #41591500 1! #41592000 0! #41592500 1! #41593000 0! #41593500 1! #41594000 0! #41594500 1! #41595000 0! #41595500 1! #41596000 0! #41596500 1! #41597000 0! #41597500 1! #41598000 0! #41598500 1! #41599000 0! #41599500 1! #41600000 0! #41600500 1! #41601000 0! #41601500 1! #41602000 0! #41602500 1! #41603000 0! #41603500 1! #41604000 0! #41604500 1! #41605000 0! #41605500 1! #41606000 0! #41606500 1! #41607000 0! #41607500 1! #41608000 0! #41608500 1! #41609000 0! #41609500 1! #41610000 0! #41610500 1! #41611000 0! #41611500 1! #41612000 0! #41612500 1! #41613000 0! #41613500 1! #41614000 0! #41614500 1! #41615000 0! #41615500 1! #41616000 0! #41616500 1! #41617000 0! #41617500 1! #41618000 0! #41618500 1! #41619000 0! #41619500 1! #41620000 0! #41620500 1! #41621000 0! #41621500 1! #41622000 0! #41622500 1! #41623000 0! #41623500 1! #41624000 0! #41624500 1! #41625000 0! #41625500 1! #41626000 0! #41626500 1! #41627000 0! #41627500 1! #41628000 0! #41628500 1! #41629000 0! #41629500 1! #41630000 0! #41630500 1! #41631000 0! #41631500 1! #41632000 0! #41632500 1! #41633000 0! #41633500 1! #41634000 0! #41634500 1! #41635000 0! #41635500 1! #41636000 0! #41636500 1! #41637000 0! #41637500 1! #41638000 0! #41638500 1! #41639000 0! #41639500 1! #41640000 0! #41640500 1! #41641000 0! #41641500 1! #41642000 0! #41642500 1! #41643000 0! #41643500 1! #41644000 0! #41644500 1! #41645000 0! #41645500 1! #41646000 0! #41646500 1! #41647000 0! #41647500 1! #41648000 0! #41648500 1! #41649000 0! #41649500 1! #41650000 0! #41650500 1! #41651000 0! #41651500 1! #41652000 0! #41652500 1! #41653000 0! #41653500 1! #41654000 0! #41654500 1! #41655000 0! #41655500 1! #41656000 0! #41656500 1! #41657000 0! #41657500 1! #41658000 0! #41658500 1! #41659000 0! #41659500 1! #41660000 0! #41660500 1! #41661000 0! #41661500 1! #41662000 0! #41662500 1! #41663000 0! #41663500 1! #41664000 0! #41664500 1! #41665000 0! #41665500 1! #41666000 0! #41666500 1! #41667000 0! #41667500 1! #41668000 0! #41668500 1! #41669000 0! #41669500 1! #41670000 0! #41670500 1! #41671000 0! #41671500 1! #41672000 0! #41672500 1! #41673000 0! #41673500 1! #41674000 0! #41674500 1! #41675000 0! #41675500 1! #41676000 0! #41676500 1! #41677000 0! #41677500 1! #41678000 0! #41678500 1! #41679000 0! #41679500 1! #41680000 0! #41680500 1! #41681000 0! #41681500 1! #41682000 0! #41682500 1! #41683000 0! #41683500 1! #41684000 0! #41684500 1! #41685000 0! #41685500 1! #41686000 0! #41686500 1! #41687000 0! #41687500 1! #41688000 0! #41688500 1! #41689000 0! #41689500 1! #41690000 0! #41690500 1! #41691000 0! #41691500 1! #41692000 0! #41692500 1! #41693000 0! #41693500 1! #41694000 0! #41694500 1! #41695000 0! #41695500 1! #41696000 0! #41696500 1! #41697000 0! #41697500 1! #41698000 0! #41698500 1! #41699000 0! #41699500 1! #41700000 0! #41700500 1! #41701000 0! #41701500 1! #41702000 0! #41702500 1! #41703000 0! #41703500 1! #41704000 0! #41704500 1! #41705000 0! #41705500 1! #41706000 0! #41706500 1! #41707000 0! #41707500 1! #41708000 0! #41708500 1! #41709000 0! #41709500 1! #41710000 0! #41710500 1! #41711000 0! #41711500 1! #41712000 0! #41712500 1! #41713000 0! #41713500 1! #41714000 0! #41714500 1! #41715000 0! #41715500 1! #41716000 0! #41716500 1! #41717000 0! #41717500 1! #41718000 0! #41718500 1! #41719000 0! #41719500 1! #41720000 0! #41720500 1! #41721000 0! #41721500 1! #41722000 0! #41722500 1! #41723000 0! #41723500 1! #41724000 0! #41724500 1! #41725000 0! #41725500 1! #41726000 0! #41726500 1! #41727000 0! #41727500 1! #41728000 0! #41728500 1! #41729000 0! #41729500 1! #41730000 0! #41730500 1! #41731000 0! #41731500 1! #41732000 0! #41732500 1! #41733000 0! #41733500 1! #41734000 0! #41734500 1! #41735000 0! #41735500 1! #41736000 0! #41736500 1! #41737000 0! #41737500 1! #41738000 0! #41738500 1! #41739000 0! #41739500 1! #41740000 0! #41740500 1! #41741000 0! #41741500 1! #41742000 0! #41742500 1! #41743000 0! #41743500 1! #41744000 0! #41744500 1! #41745000 0! #41745500 1! #41746000 0! #41746500 1! #41747000 0! #41747500 1! #41748000 0! #41748500 1! #41749000 0! #41749500 1! #41750000 0! #41750500 1! #41751000 0! #41751500 1! #41752000 0! #41752500 1! #41753000 0! #41753500 1! #41754000 0! #41754500 1! #41755000 0! #41755500 1! #41756000 0! #41756500 1! #41757000 0! #41757500 1! #41758000 0! #41758500 1! #41759000 0! #41759500 1! #41760000 0! #41760500 1! #41761000 0! #41761500 1! #41762000 0! #41762500 1! #41763000 0! #41763500 1! #41764000 0! #41764500 1! #41765000 0! #41765500 1! #41766000 0! #41766500 1! #41767000 0! #41767500 1! #41768000 0! #41768500 1! #41769000 0! #41769500 1! #41770000 0! #41770500 1! #41771000 0! #41771500 1! #41772000 0! #41772500 1! #41773000 0! #41773500 1! #41774000 0! #41774500 1! #41775000 0! #41775500 1! #41776000 0! #41776500 1! #41777000 0! #41777500 1! #41778000 0! #41778500 1! #41779000 0! #41779500 1! #41780000 0! #41780500 1! #41781000 0! #41781500 1! #41782000 0! #41782500 1! #41783000 0! #41783500 1! #41784000 0! #41784500 1! #41785000 0! #41785500 1! #41786000 0! #41786500 1! #41787000 0! #41787500 1! #41788000 0! #41788500 1! #41789000 0! #41789500 1! #41790000 0! #41790500 1! #41791000 0! #41791500 1! #41792000 0! #41792500 1! #41793000 0! #41793500 1! #41794000 0! #41794500 1! #41795000 0! #41795500 1! #41796000 0! #41796500 1! #41797000 0! #41797500 1! #41798000 0! #41798500 1! #41799000 0! #41799500 1! #41800000 0! #41800500 1! #41801000 0! #41801500 1! #41802000 0! #41802500 1! #41803000 0! #41803500 1! #41804000 0! #41804500 1! #41805000 0! #41805500 1! #41806000 0! #41806500 1! #41807000 0! #41807500 1! #41808000 0! #41808500 1! #41809000 0! #41809500 1! #41810000 0! #41810500 1! #41811000 0! #41811500 1! #41812000 0! #41812500 1! #41813000 0! #41813500 1! #41814000 0! #41814500 1! #41815000 0! #41815500 1! #41816000 0! #41816500 1! #41817000 0! #41817500 1! #41818000 0! #41818500 1! #41819000 0! #41819500 1! #41820000 0! #41820500 1! #41821000 0! #41821500 1! #41822000 0! #41822500 1! #41823000 0! #41823500 1! #41824000 0! #41824500 1! #41825000 0! #41825500 1! #41826000 0! #41826500 1! #41827000 0! #41827500 1! #41828000 0! #41828500 1! #41829000 0! #41829500 1! #41830000 0! #41830500 1! #41831000 0! #41831500 1! #41832000 0! #41832500 1! #41833000 0! #41833500 1! #41834000 0! #41834500 1! #41835000 0! #41835500 1! #41836000 0! #41836500 1! #41837000 0! #41837500 1! #41838000 0! #41838500 1! #41839000 0! #41839500 1! #41840000 0! #41840500 1! #41841000 0! #41841500 1! #41842000 0! #41842500 1! #41843000 0! #41843500 1! #41844000 0! #41844500 1! #41845000 0! #41845500 1! #41846000 0! #41846500 1! #41847000 0! #41847500 1! #41848000 0! #41848500 1! #41849000 0! #41849500 1! #41850000 0! #41850500 1! #41851000 0! #41851500 1! #41852000 0! #41852500 1! #41853000 0! #41853500 1! #41854000 0! #41854500 1! #41855000 0! #41855500 1! #41856000 0! #41856500 1! #41857000 0! #41857500 1! #41858000 0! #41858500 1! #41859000 0! #41859500 1! #41860000 0! #41860500 1! #41861000 0! #41861500 1! #41862000 0! #41862500 1! #41863000 0! #41863500 1! #41864000 0! #41864500 1! #41865000 0! #41865500 1! #41866000 0! #41866500 1! #41867000 0! #41867500 1! #41868000 0! #41868500 1! #41869000 0! #41869500 1! #41870000 0! #41870500 1! #41871000 0! #41871500 1! #41872000 0! #41872500 1! #41873000 0! #41873500 1! #41874000 0! #41874500 1! #41875000 0! #41875500 1! #41876000 0! #41876500 1! #41877000 0! #41877500 1! #41878000 0! #41878500 1! #41879000 0! #41879500 1! #41880000 0! #41880500 1! #41881000 0! #41881500 1! #41882000 0! #41882500 1! #41883000 0! #41883500 1! #41884000 0! #41884500 1! #41885000 0! #41885500 1! #41886000 0! #41886500 1! #41887000 0! #41887500 1! #41888000 0! #41888500 1! #41889000 0! #41889500 1! #41890000 0! #41890500 1! #41891000 0! #41891500 1! #41892000 0! #41892500 1! #41893000 0! #41893500 1! #41894000 0! #41894500 1! #41895000 0! #41895500 1! #41896000 0! #41896500 1! #41897000 0! #41897500 1! #41898000 0! #41898500 1! #41899000 0! #41899500 1! #41900000 0! #41900500 1! #41901000 0! #41901500 1! #41902000 0! #41902500 1! #41903000 0! #41903500 1! #41904000 0! #41904500 1! #41905000 0! #41905500 1! #41906000 0! #41906500 1! #41907000 0! #41907500 1! #41908000 0! #41908500 1! #41909000 0! #41909500 1! #41910000 0! #41910500 1! #41911000 0! #41911500 1! #41912000 0! #41912500 1! #41913000 0! #41913500 1! #41914000 0! #41914500 1! #41915000 0! #41915500 1! #41916000 0! #41916500 1! #41917000 0! #41917500 1! #41918000 0! #41918500 1! #41919000 0! #41919500 1! #41920000 0! #41920500 1! #41921000 0! #41921500 1! #41922000 0! #41922500 1! #41923000 0! #41923500 1! #41924000 0! #41924500 1! #41925000 0! #41925500 1! #41926000 0! #41926500 1! #41927000 0! #41927500 1! #41928000 0! #41928500 1! #41929000 0! #41929500 1! #41930000 0! #41930500 1! #41931000 0! #41931500 1! #41932000 0! #41932500 1! #41933000 0! #41933500 1! #41934000 0! #41934500 1! #41935000 0! #41935500 1! #41936000 0! #41936500 1! #41937000 0! #41937500 1! #41938000 0! #41938500 1! #41939000 0! #41939500 1! #41940000 0! #41940500 1! #41941000 0! #41941500 1! #41942000 0! #41942500 1! #41943000 0! #41943500 1! #41944000 0! #41944500 1! #41945000 0! #41945500 1! #41946000 0! #41946500 1! #41947000 0! #41947500 1! #41948000 0! #41948500 1! #41949000 0! #41949500 1! #41950000 0! #41950500 1! #41951000 0! #41951500 1! #41952000 0! #41952500 1! #41953000 0! #41953500 1! #41954000 0! #41954500 1! #41955000 0! #41955500 1! #41956000 0! #41956500 1! #41957000 0! #41957500 1! #41958000 0! #41958500 1! #41959000 0! #41959500 1! #41960000 0! #41960500 1! #41961000 0! #41961500 1! #41962000 0! #41962500 1! #41963000 0! #41963500 1! #41964000 0! #41964500 1! #41965000 0! #41965500 1! #41966000 0! #41966500 1! #41967000 0! #41967500 1! #41968000 0! #41968500 1! #41969000 0! #41969500 1! #41970000 0! #41970500 1! #41971000 0! #41971500 1! #41972000 0! #41972500 1! #41973000 0! #41973500 1! #41974000 0! #41974500 1! #41975000 0! #41975500 1! #41976000 0! #41976500 1! #41977000 0! #41977500 1! #41978000 0! #41978500 1! #41979000 0! #41979500 1! #41980000 0! #41980500 1! #41981000 0! #41981500 1! #41982000 0! #41982500 1! #41983000 0! #41983500 1! #41984000 0! #41984500 1! #41985000 0! #41985500 1! #41986000 0! #41986500 1! #41987000 0! #41987500 1! #41988000 0! #41988500 1! #41989000 0! #41989500 1! #41990000 0! #41990500 1! #41991000 0! #41991500 1! #41992000 0! #41992500 1! #41993000 0! #41993500 1! #41994000 0! #41994500 1! #41995000 0! #41995500 1! #41996000 0! #41996500 1! #41997000 0! #41997500 1! #41998000 0! #41998500 1! #41999000 0! #41999500 1! #42000000 0! #42000500 1! #42001000 0! #42001500 1! #42002000 0! #42002500 1! #42003000 0! #42003500 1! #42004000 0! #42004500 1! #42005000 0! #42005500 1! #42006000 0! #42006500 1! #42007000 0! #42007500 1! #42008000 0! #42008500 1! #42009000 0! #42009500 1! #42010000 0! #42010500 1! #42011000 0! #42011500 1! #42012000 0! #42012500 1! #42013000 0! #42013500 1! #42014000 0! #42014500 1! #42015000 0! #42015500 1! #42016000 0! #42016500 1! #42017000 0! #42017500 1! #42018000 0! #42018500 1! #42019000 0! #42019500 1! #42020000 0! #42020500 1! #42021000 0! #42021500 1! #42022000 0! #42022500 1! #42023000 0! #42023500 1! #42024000 0! #42024500 1! #42025000 0! #42025500 1! #42026000 0! #42026500 1! #42027000 0! #42027500 1! #42028000 0! #42028500 1! #42029000 0! #42029500 1! #42030000 0! #42030500 1! #42031000 0! #42031500 1! #42032000 0! #42032500 1! #42033000 0! #42033500 1! #42034000 0! #42034500 1! #42035000 0! #42035500 1! #42036000 0! #42036500 1! #42037000 0! #42037500 1! #42038000 0! #42038500 1! #42039000 0! #42039500 1! #42040000 0! #42040500 1! #42041000 0! #42041500 1! #42042000 0! #42042500 1! #42043000 0! #42043500 1! #42044000 0! #42044500 1! #42045000 0! #42045500 1! #42046000 0! #42046500 1! #42047000 0! #42047500 1! #42048000 0! #42048500 1! #42049000 0! #42049500 1! #42050000 0! #42050500 1! #42051000 0! #42051500 1! #42052000 0! #42052500 1! #42053000 0! #42053500 1! #42054000 0! #42054500 1! #42055000 0! #42055500 1! #42056000 0! #42056500 1! #42057000 0! #42057500 1! #42058000 0! #42058500 1! #42059000 0! #42059500 1! #42060000 0! #42060500 1! #42061000 0! #42061500 1! #42062000 0! #42062500 1! #42063000 0! #42063500 1! #42064000 0! #42064500 1! #42065000 0! #42065500 1! #42066000 0! #42066500 1! #42067000 0! #42067500 1! #42068000 0! #42068500 1! #42069000 0! #42069500 1! #42070000 0! #42070500 1! #42071000 0! #42071500 1! #42072000 0! #42072500 1! #42073000 0! #42073500 1! #42074000 0! #42074500 1! #42075000 0! #42075500 1! #42076000 0! #42076500 1! #42077000 0! #42077500 1! #42078000 0! #42078500 1! #42079000 0! #42079500 1! #42080000 0! #42080500 1! #42081000 0! #42081500 1! #42082000 0! #42082500 1! #42083000 0! #42083500 1! #42084000 0! #42084500 1! #42085000 0! #42085500 1! #42086000 0! #42086500 1! #42087000 0! #42087500 1! #42088000 0! #42088500 1! #42089000 0! #42089500 1! #42090000 0! #42090500 1! #42091000 0! #42091500 1! #42092000 0! #42092500 1! #42093000 0! #42093500 1! #42094000 0! #42094500 1! #42095000 0! #42095500 1! #42096000 0! #42096500 1! #42097000 0! #42097500 1! #42098000 0! #42098500 1! #42099000 0! #42099500 1! #42100000 0! #42100500 1! #42101000 0! #42101500 1! #42102000 0! #42102500 1! #42103000 0! #42103500 1! #42104000 0! #42104500 1! #42105000 0! #42105500 1! #42106000 0! #42106500 1! #42107000 0! #42107500 1! #42108000 0! #42108500 1! #42109000 0! #42109500 1! #42110000 0! #42110500 1! #42111000 0! #42111500 1! #42112000 0! #42112500 1! #42113000 0! #42113500 1! #42114000 0! #42114500 1! #42115000 0! #42115500 1! #42116000 0! #42116500 1! #42117000 0! #42117500 1! #42118000 0! #42118500 1! #42119000 0! #42119500 1! #42120000 0! #42120500 1! #42121000 0! #42121500 1! #42122000 0! #42122500 1! #42123000 0! #42123500 1! #42124000 0! #42124500 1! #42125000 0! #42125500 1! #42126000 0! #42126500 1! #42127000 0! #42127500 1! #42128000 0! #42128500 1! #42129000 0! #42129500 1! #42130000 0! #42130500 1! #42131000 0! #42131500 1! #42132000 0! #42132500 1! #42133000 0! #42133500 1! #42134000 0! #42134500 1! #42135000 0! #42135500 1! #42136000 0! #42136500 1! #42137000 0! #42137500 1! #42138000 0! #42138500 1! #42139000 0! #42139500 1! #42140000 0! #42140500 1! #42141000 0! #42141500 1! #42142000 0! #42142500 1! #42143000 0! #42143500 1! #42144000 0! #42144500 1! #42145000 0! #42145500 1! #42146000 0! #42146500 1! #42147000 0! #42147500 1! #42148000 0! #42148500 1! #42149000 0! #42149500 1! #42150000 0! #42150500 1! #42151000 0! #42151500 1! #42152000 0! #42152500 1! #42153000 0! #42153500 1! #42154000 0! #42154500 1! #42155000 0! #42155500 1! #42156000 0! #42156500 1! #42157000 0! #42157500 1! #42158000 0! #42158500 1! #42159000 0! #42159500 1! #42160000 0! #42160500 1! #42161000 0! #42161500 1! #42162000 0! #42162500 1! #42163000 0! #42163500 1! #42164000 0! #42164500 1! #42165000 0! #42165500 1! #42166000 0! #42166500 1! #42167000 0! #42167500 1! #42168000 0! #42168500 1! #42169000 0! #42169500 1! #42170000 0! #42170500 1! #42171000 0! #42171500 1! #42172000 0! #42172500 1! #42173000 0! #42173500 1! #42174000 0! #42174500 1! #42175000 0! #42175500 1! #42176000 0! #42176500 1! #42177000 0! #42177500 1! #42178000 0! #42178500 1! #42179000 0! #42179500 1! #42180000 0! #42180500 1! #42181000 0! #42181500 1! #42182000 0! #42182500 1! #42183000 0! #42183500 1! #42184000 0! #42184500 1! #42185000 0! #42185500 1! #42186000 0! #42186500 1! #42187000 0! #42187500 1! #42188000 0! #42188500 1! #42189000 0! #42189500 1! #42190000 0! #42190500 1! #42191000 0! #42191500 1! #42192000 0! #42192500 1! #42193000 0! #42193500 1! #42194000 0! #42194500 1! #42195000 0! #42195500 1! #42196000 0! #42196500 1! #42197000 0! #42197500 1! #42198000 0! #42198500 1! #42199000 0! #42199500 1! #42200000 0! #42200500 1! #42201000 0! #42201500 1! #42202000 0! #42202500 1! #42203000 0! #42203500 1! #42204000 0! #42204500 1! #42205000 0! #42205500 1! #42206000 0! #42206500 1! #42207000 0! #42207500 1! #42208000 0! #42208500 1! #42209000 0! #42209500 1! #42210000 0! #42210500 1! #42211000 0! #42211500 1! #42212000 0! #42212500 1! #42213000 0! #42213500 1! #42214000 0! #42214500 1! #42215000 0! #42215500 1! #42216000 0! #42216500 1! #42217000 0! #42217500 1! #42218000 0! #42218500 1! #42219000 0! #42219500 1! #42220000 0! #42220500 1! #42221000 0! #42221500 1! #42222000 0! #42222500 1! #42223000 0! #42223500 1! #42224000 0! #42224500 1! #42225000 0! #42225500 1! #42226000 0! #42226500 1! #42227000 0! #42227500 1! #42228000 0! #42228500 1! #42229000 0! #42229500 1! #42230000 0! #42230500 1! #42231000 0! #42231500 1! #42232000 0! #42232500 1! #42233000 0! #42233500 1! #42234000 0! #42234500 1! #42235000 0! #42235500 1! #42236000 0! #42236500 1! #42237000 0! #42237500 1! #42238000 0! #42238500 1! #42239000 0! #42239500 1! #42240000 0! #42240500 1! #42241000 0! #42241500 1! #42242000 0! #42242500 1! #42243000 0! #42243500 1! #42244000 0! #42244500 1! #42245000 0! #42245500 1! #42246000 0! #42246500 1! #42247000 0! #42247500 1! #42248000 0! #42248500 1! #42249000 0! #42249500 1! #42250000 0! #42250500 1! #42251000 0! #42251500 1! #42252000 0! #42252500 1! #42253000 0! #42253500 1! #42254000 0! #42254500 1! #42255000 0! #42255500 1! #42256000 0! #42256500 1! #42257000 0! #42257500 1! #42258000 0! #42258500 1! #42259000 0! #42259500 1! #42260000 0! #42260500 1! #42261000 0! #42261500 1! #42262000 0! #42262500 1! #42263000 0! #42263500 1! #42264000 0! #42264500 1! #42265000 0! #42265500 1! #42266000 0! #42266500 1! #42267000 0! #42267500 1! #42268000 0! #42268500 1! #42269000 0! #42269500 1! #42270000 0! #42270500 1! #42271000 0! #42271500 1! #42272000 0! #42272500 1! #42273000 0! #42273500 1! #42274000 0! #42274500 1! #42275000 0! #42275500 1! #42276000 0! #42276500 1! #42277000 0! #42277500 1! #42278000 0! #42278500 1! #42279000 0! #42279500 1! #42280000 0! #42280500 1! #42281000 0! #42281500 1! #42282000 0! #42282500 1! #42283000 0! #42283500 1! #42284000 0! #42284500 1! #42285000 0! #42285500 1! #42286000 0! #42286500 1! #42287000 0! #42287500 1! #42288000 0! #42288500 1! #42289000 0! #42289500 1! #42290000 0! #42290500 1! #42291000 0! #42291500 1! #42292000 0! #42292500 1! #42293000 0! #42293500 1! #42294000 0! #42294500 1! #42295000 0! #42295500 1! #42296000 0! #42296500 1! #42297000 0! #42297500 1! #42298000 0! #42298500 1! #42299000 0! #42299500 1! #42300000 0! #42300500 1! #42301000 0! #42301500 1! #42302000 0! #42302500 1! #42303000 0! #42303500 1! #42304000 0! #42304500 1! #42305000 0! #42305500 1! #42306000 0! #42306500 1! #42307000 0! #42307500 1! #42308000 0! #42308500 1! #42309000 0! #42309500 1! #42310000 0! #42310500 1! #42311000 0! #42311500 1! #42312000 0! #42312500 1! #42313000 0! #42313500 1! #42314000 0! #42314500 1! #42315000 0! #42315500 1! #42316000 0! #42316500 1! #42317000 0! #42317500 1! #42318000 0! #42318500 1! #42319000 0! #42319500 1! #42320000 0! #42320500 1! #42321000 0! #42321500 1! #42322000 0! #42322500 1! #42323000 0! #42323500 1! #42324000 0! #42324500 1! #42325000 0! #42325500 1! #42326000 0! #42326500 1! #42327000 0! #42327500 1! #42328000 0! #42328500 1! #42329000 0! #42329500 1! #42330000 0! #42330500 1! #42331000 0! #42331500 1! #42332000 0! #42332500 1! #42333000 0! #42333500 1! #42334000 0! #42334500 1! #42335000 0! #42335500 1! #42336000 0! #42336500 1! #42337000 0! #42337500 1! #42338000 0! #42338500 1! #42339000 0! #42339500 1! #42340000 0! #42340500 1! #42341000 0! #42341500 1! #42342000 0! #42342500 1! #42343000 0! #42343500 1! #42344000 0! #42344500 1! #42345000 0! #42345500 1! #42346000 0! #42346500 1! #42347000 0! #42347500 1! #42348000 0! #42348500 1! #42349000 0! #42349500 1! #42350000 0! #42350500 1! #42351000 0! #42351500 1! #42352000 0! #42352500 1! #42353000 0! #42353500 1! #42354000 0! #42354500 1! #42355000 0! #42355500 1! #42356000 0! #42356500 1! #42357000 0! #42357500 1! #42358000 0! #42358500 1! #42359000 0! #42359500 1! #42360000 0! #42360500 1! #42361000 0! #42361500 1! #42362000 0! #42362500 1! #42363000 0! #42363500 1! #42364000 0! #42364500 1! #42365000 0! #42365500 1! #42366000 0! #42366500 1! #42367000 0! #42367500 1! #42368000 0! #42368500 1! #42369000 0! #42369500 1! #42370000 0! #42370500 1! #42371000 0! #42371500 1! #42372000 0! #42372500 1! #42373000 0! #42373500 1! #42374000 0! #42374500 1! #42375000 0! #42375500 1! #42376000 0! #42376500 1! #42377000 0! #42377500 1! #42378000 0! #42378500 1! #42379000 0! #42379500 1! #42380000 0! #42380500 1! #42381000 0! #42381500 1! #42382000 0! #42382500 1! #42383000 0! #42383500 1! #42384000 0! #42384500 1! #42385000 0! #42385500 1! #42386000 0! #42386500 1! #42387000 0! #42387500 1! #42388000 0! #42388500 1! #42389000 0! #42389500 1! #42390000 0! #42390500 1! #42391000 0! #42391500 1! #42392000 0! #42392500 1! #42393000 0! #42393500 1! #42394000 0! #42394500 1! #42395000 0! #42395500 1! #42396000 0! #42396500 1! #42397000 0! #42397500 1! #42398000 0! #42398500 1! #42399000 0! #42399500 1! #42400000 0! #42400500 1! #42401000 0! #42401500 1! #42402000 0! #42402500 1! #42403000 0! #42403500 1! #42404000 0! #42404500 1! #42405000 0! #42405500 1! #42406000 0! #42406500 1! #42407000 0! #42407500 1! #42408000 0! #42408500 1! #42409000 0! #42409500 1! #42410000 0! #42410500 1! #42411000 0! #42411500 1! #42412000 0! #42412500 1! #42413000 0! #42413500 1! #42414000 0! #42414500 1! #42415000 0! #42415500 1! #42416000 0! #42416500 1! #42417000 0! #42417500 1! #42418000 0! #42418500 1! #42419000 0! #42419500 1! #42420000 0! #42420500 1! #42421000 0! #42421500 1! #42422000 0! #42422500 1! #42423000 0! #42423500 1! #42424000 0! #42424500 1! #42425000 0! #42425500 1! #42426000 0! #42426500 1! #42427000 0! #42427500 1! #42428000 0! #42428500 1! #42429000 0! #42429500 1! #42430000 0! #42430500 1! #42431000 0! #42431500 1! #42432000 0! #42432500 1! #42433000 0! #42433500 1! #42434000 0! #42434500 1! #42435000 0! #42435500 1! #42436000 0! #42436500 1! #42437000 0! #42437500 1! #42438000 0! #42438500 1! #42439000 0! #42439500 1! #42440000 0! #42440500 1! #42441000 0! #42441500 1! #42442000 0! #42442500 1! #42443000 0! #42443500 1! #42444000 0! #42444500 1! #42445000 0! #42445500 1! #42446000 0! #42446500 1! #42447000 0! #42447500 1! #42448000 0! #42448500 1! #42449000 0! #42449500 1! #42450000 0! #42450500 1! #42451000 0! #42451500 1! #42452000 0! #42452500 1! #42453000 0! #42453500 1! #42454000 0! #42454500 1! #42455000 0! #42455500 1! #42456000 0! #42456500 1! #42457000 0! #42457500 1! #42458000 0! #42458500 1! #42459000 0! #42459500 1! #42460000 0! #42460500 1! #42461000 0! #42461500 1! #42462000 0! #42462500 1! #42463000 0! #42463500 1! #42464000 0! #42464500 1! #42465000 0! #42465500 1! #42466000 0! #42466500 1! #42467000 0! #42467500 1! #42468000 0! #42468500 1! #42469000 0! #42469500 1! #42470000 0! #42470500 1! #42471000 0! #42471500 1! #42472000 0! #42472500 1! #42473000 0! #42473500 1! #42474000 0! #42474500 1! #42475000 0! #42475500 1! #42476000 0! #42476500 1! #42477000 0! #42477500 1! #42478000 0! #42478500 1! #42479000 0! #42479500 1! #42480000 0! #42480500 1! #42481000 0! #42481500 1! #42482000 0! #42482500 1! #42483000 0! #42483500 1! #42484000 0! #42484500 1! #42485000 0! #42485500 1! #42486000 0! #42486500 1! #42487000 0! #42487500 1! #42488000 0! #42488500 1! #42489000 0! #42489500 1! #42490000 0! #42490500 1! #42491000 0! #42491500 1! #42492000 0! #42492500 1! #42493000 0! #42493500 1! #42494000 0! #42494500 1! #42495000 0! #42495500 1! #42496000 0! #42496500 1! #42497000 0! #42497500 1! #42498000 0! #42498500 1! #42499000 0! #42499500 1! #42500000 0! #42500500 1! #42501000 0! #42501500 1! #42502000 0! #42502500 1! #42503000 0! #42503500 1! #42504000 0! #42504500 1! #42505000 0! #42505500 1! #42506000 0! #42506500 1! #42507000 0! #42507500 1! #42508000 0! #42508500 1! #42509000 0! #42509500 1! #42510000 0! #42510500 1! #42511000 0! #42511500 1! #42512000 0! #42512500 1! #42513000 0! #42513500 1! #42514000 0! #42514500 1! #42515000 0! #42515500 1! #42516000 0! #42516500 1! #42517000 0! #42517500 1! #42518000 0! #42518500 1! #42519000 0! #42519500 1! #42520000 0! #42520500 1! #42521000 0! #42521500 1! #42522000 0! #42522500 1! #42523000 0! #42523500 1! #42524000 0! #42524500 1! #42525000 0! #42525500 1! #42526000 0! #42526500 1! #42527000 0! #42527500 1! #42528000 0! #42528500 1! #42529000 0! #42529500 1! #42530000 0! #42530500 1! #42531000 0! #42531500 1! #42532000 0! #42532500 1! #42533000 0! #42533500 1! #42534000 0! #42534500 1! #42535000 0! #42535500 1! #42536000 0! #42536500 1! #42537000 0! #42537500 1! #42538000 0! #42538500 1! #42539000 0! #42539500 1! #42540000 0! #42540500 1! #42541000 0! #42541500 1! #42542000 0! #42542500 1! #42543000 0! #42543500 1! #42544000 0! #42544500 1! #42545000 0! #42545500 1! #42546000 0! #42546500 1! #42547000 0! #42547500 1! #42548000 0! #42548500 1! #42549000 0! #42549500 1! #42550000 0! #42550500 1! #42551000 0! #42551500 1! #42552000 0! #42552500 1! #42553000 0! #42553500 1! #42554000 0! #42554500 1! #42555000 0! #42555500 1! #42556000 0! #42556500 1! #42557000 0! #42557500 1! #42558000 0! #42558500 1! #42559000 0! #42559500 1! #42560000 0! #42560500 1! #42561000 0! #42561500 1! #42562000 0! #42562500 1! #42563000 0! #42563500 1! #42564000 0! #42564500 1! #42565000 0! #42565500 1! #42566000 0! #42566500 1! #42567000 0! #42567500 1! #42568000 0! #42568500 1! #42569000 0! #42569500 1! #42570000 0! #42570500 1! #42571000 0! #42571500 1! #42572000 0! #42572500 1! #42573000 0! #42573500 1! #42574000 0! #42574500 1! #42575000 0! #42575500 1! #42576000 0! #42576500 1! #42577000 0! #42577500 1! #42578000 0! #42578500 1! #42579000 0! #42579500 1! #42580000 0! #42580500 1! #42581000 0! #42581500 1! #42582000 0! #42582500 1! #42583000 0! #42583500 1! #42584000 0! #42584500 1! #42585000 0! #42585500 1! #42586000 0! #42586500 1! #42587000 0! #42587500 1! #42588000 0! #42588500 1! #42589000 0! #42589500 1! #42590000 0! #42590500 1! #42591000 0! #42591500 1! #42592000 0! #42592500 1! #42593000 0! #42593500 1! #42594000 0! #42594500 1! #42595000 0! #42595500 1! #42596000 0! #42596500 1! #42597000 0! #42597500 1! #42598000 0! #42598500 1! #42599000 0! #42599500 1! #42600000 0! #42600500 1! #42601000 0! #42601500 1! #42602000 0! #42602500 1! #42603000 0! #42603500 1! #42604000 0! #42604500 1! #42605000 0! #42605500 1! #42606000 0! #42606500 1! #42607000 0! #42607500 1! #42608000 0! #42608500 1! #42609000 0! #42609500 1! #42610000 0! #42610500 1! #42611000 0! #42611500 1! #42612000 0! #42612500 1! #42613000 0! #42613500 1! #42614000 0! #42614500 1! #42615000 0! #42615500 1! #42616000 0! #42616500 1! #42617000 0! #42617500 1! #42618000 0! #42618500 1! #42619000 0! #42619500 1! #42620000 0! #42620500 1! #42621000 0! #42621500 1! #42622000 0! #42622500 1! #42623000 0! #42623500 1! #42624000 0! #42624500 1! #42625000 0! #42625500 1! #42626000 0! #42626500 1! #42627000 0! #42627500 1! #42628000 0! #42628500 1! #42629000 0! #42629500 1! #42630000 0! #42630500 1! #42631000 0! #42631500 1! #42632000 0! #42632500 1! #42633000 0! #42633500 1! #42634000 0! #42634500 1! #42635000 0! #42635500 1! #42636000 0! #42636500 1! #42637000 0! #42637500 1! #42638000 0! #42638500 1! #42639000 0! #42639500 1! #42640000 0! #42640500 1! #42641000 0! #42641500 1! #42642000 0! #42642500 1! #42643000 0! #42643500 1! #42644000 0! #42644500 1! #42645000 0! #42645500 1! #42646000 0! #42646500 1! #42647000 0! #42647500 1! #42648000 0! #42648500 1! #42649000 0! #42649500 1! #42650000 0! #42650500 1! #42651000 0! #42651500 1! #42652000 0! #42652500 1! #42653000 0! #42653500 1! #42654000 0! #42654500 1! #42655000 0! #42655500 1! #42656000 0! #42656500 1! #42657000 0! #42657500 1! #42658000 0! #42658500 1! #42659000 0! #42659500 1! #42660000 0! #42660500 1! #42661000 0! #42661500 1! #42662000 0! #42662500 1! #42663000 0! #42663500 1! #42664000 0! #42664500 1! #42665000 0! #42665500 1! #42666000 0! #42666500 1! #42667000 0! #42667500 1! #42668000 0! #42668500 1! #42669000 0! #42669500 1! #42670000 0! #42670500 1! #42671000 0! #42671500 1! #42672000 0! #42672500 1! #42673000 0! #42673500 1! #42674000 0! #42674500 1! #42675000 0! #42675500 1! #42676000 0! #42676500 1! #42677000 0! #42677500 1! #42678000 0! #42678500 1! #42679000 0! #42679500 1! #42680000 0! #42680500 1! #42681000 0! #42681500 1! #42682000 0! #42682500 1! #42683000 0! #42683500 1! #42684000 0! #42684500 1! #42685000 0! #42685500 1! #42686000 0! #42686500 1! #42687000 0! #42687500 1! #42688000 0! #42688500 1! #42689000 0! #42689500 1! #42690000 0! #42690500 1! #42691000 0! #42691500 1! #42692000 0! #42692500 1! #42693000 0! #42693500 1! #42694000 0! #42694500 1! #42695000 0! #42695500 1! #42696000 0! #42696500 1! #42697000 0! #42697500 1! #42698000 0! #42698500 1! #42699000 0! #42699500 1! #42700000 0! #42700500 1! #42701000 0! #42701500 1! #42702000 0! #42702500 1! #42703000 0! #42703500 1! #42704000 0! #42704500 1! #42705000 0! #42705500 1! #42706000 0! #42706500 1! #42707000 0! #42707500 1! #42708000 0! #42708500 1! #42709000 0! #42709500 1! #42710000 0! #42710500 1! #42711000 0! #42711500 1! #42712000 0! #42712500 1! #42713000 0! #42713500 1! #42714000 0! #42714500 1! #42715000 0! #42715500 1! #42716000 0! #42716500 1! #42717000 0! #42717500 1! #42718000 0! #42718500 1! #42719000 0! #42719500 1! #42720000 0! #42720500 1! #42721000 0! #42721500 1! #42722000 0! #42722500 1! #42723000 0! #42723500 1! #42724000 0! #42724500 1! #42725000 0! #42725500 1! #42726000 0! #42726500 1! #42727000 0! #42727500 1! #42728000 0! #42728500 1! #42729000 0! #42729500 1! #42730000 0! #42730500 1! #42731000 0! #42731500 1! #42732000 0! #42732500 1! #42733000 0! #42733500 1! #42734000 0! #42734500 1! #42735000 0! #42735500 1! #42736000 0! #42736500 1! #42737000 0! #42737500 1! #42738000 0! #42738500 1! #42739000 0! #42739500 1! #42740000 0! #42740500 1! #42741000 0! #42741500 1! #42742000 0! #42742500 1! #42743000 0! #42743500 1! #42744000 0! #42744500 1! #42745000 0! #42745500 1! #42746000 0! #42746500 1! #42747000 0! #42747500 1! #42748000 0! #42748500 1! #42749000 0! #42749500 1! #42750000 0! #42750500 1! #42751000 0! #42751500 1! #42752000 0! #42752500 1! #42753000 0! #42753500 1! #42754000 0! #42754500 1! #42755000 0! #42755500 1! #42756000 0! #42756500 1! #42757000 0! #42757500 1! #42758000 0! #42758500 1! #42759000 0! #42759500 1! #42760000 0! #42760500 1! #42761000 0! #42761500 1! #42762000 0! #42762500 1! #42763000 0! #42763500 1! #42764000 0! #42764500 1! #42765000 0! #42765500 1! #42766000 0! #42766500 1! #42767000 0! #42767500 1! #42768000 0! #42768500 1! #42769000 0! #42769500 1! #42770000 0! #42770500 1! #42771000 0! #42771500 1! #42772000 0! #42772500 1! #42773000 0! #42773500 1! #42774000 0! #42774500 1! #42775000 0! #42775500 1! #42776000 0! #42776500 1! #42777000 0! #42777500 1! #42778000 0! #42778500 1! #42779000 0! #42779500 1! #42780000 0! #42780500 1! #42781000 0! #42781500 1! #42782000 0! #42782500 1! #42783000 0! #42783500 1! #42784000 0! #42784500 1! #42785000 0! #42785500 1! #42786000 0! #42786500 1! #42787000 0! #42787500 1! #42788000 0! #42788500 1! #42789000 0! #42789500 1! #42790000 0! #42790500 1! #42791000 0! #42791500 1! #42792000 0! #42792500 1! #42793000 0! #42793500 1! #42794000 0! #42794500 1! #42795000 0! #42795500 1! #42796000 0! #42796500 1! #42797000 0! #42797500 1! #42798000 0! #42798500 1! #42799000 0! #42799500 1! #42800000 0! #42800500 1! #42801000 0! #42801500 1! #42802000 0! #42802500 1! #42803000 0! #42803500 1! #42804000 0! #42804500 1! #42805000 0! #42805500 1! #42806000 0! #42806500 1! #42807000 0! #42807500 1! #42808000 0! #42808500 1! #42809000 0! #42809500 1! #42810000 0! #42810500 1! #42811000 0! #42811500 1! #42812000 0! #42812500 1! #42813000 0! #42813500 1! #42814000 0! #42814500 1! #42815000 0! #42815500 1! #42816000 0! #42816500 1! #42817000 0! #42817500 1! #42818000 0! #42818500 1! #42819000 0! #42819500 1! #42820000 0! #42820500 1! #42821000 0! #42821500 1! #42822000 0! #42822500 1! #42823000 0! #42823500 1! #42824000 0! #42824500 1! #42825000 0! #42825500 1! #42826000 0! #42826500 1! #42827000 0! #42827500 1! #42828000 0! #42828500 1! #42829000 0! #42829500 1! #42830000 0! #42830500 1! #42831000 0! #42831500 1! #42832000 0! #42832500 1! #42833000 0! #42833500 1! #42834000 0! #42834500 1! #42835000 0! #42835500 1! #42836000 0! #42836500 1! #42837000 0! #42837500 1! #42838000 0! #42838500 1! #42839000 0! #42839500 1! #42840000 0! #42840500 1! #42841000 0! #42841500 1! #42842000 0! #42842500 1! #42843000 0! #42843500 1! #42844000 0! #42844500 1! #42845000 0! #42845500 1! #42846000 0! #42846500 1! #42847000 0! #42847500 1! #42848000 0! #42848500 1! #42849000 0! #42849500 1! #42850000 0! #42850500 1! #42851000 0! #42851500 1! #42852000 0! #42852500 1! #42853000 0! #42853500 1! #42854000 0! #42854500 1! #42855000 0! #42855500 1! #42856000 0! #42856500 1! #42857000 0! #42857500 1! #42858000 0! #42858500 1! #42859000 0! #42859500 1! #42860000 0! #42860500 1! #42861000 0! #42861500 1! #42862000 0! #42862500 1! #42863000 0! #42863500 1! #42864000 0! #42864500 1! #42865000 0! #42865500 1! #42866000 0! #42866500 1! #42867000 0! #42867500 1! #42868000 0! #42868500 1! #42869000 0! #42869500 1! #42870000 0! #42870500 1! #42871000 0! #42871500 1! #42872000 0! #42872500 1! #42873000 0! #42873500 1! #42874000 0! #42874500 1! #42875000 0! #42875500 1! #42876000 0! #42876500 1! #42877000 0! #42877500 1! #42878000 0! #42878500 1! #42879000 0! #42879500 1! #42880000 0! #42880500 1! #42881000 0! #42881500 1! #42882000 0! #42882500 1! #42883000 0! #42883500 1! #42884000 0! #42884500 1! #42885000 0! #42885500 1! #42886000 0! #42886500 1! #42887000 0! #42887500 1! #42888000 0! #42888500 1! #42889000 0! #42889500 1! #42890000 0! #42890500 1! #42891000 0! #42891500 1! #42892000 0! #42892500 1! #42893000 0! #42893500 1! #42894000 0! #42894500 1! #42895000 0! #42895500 1! #42896000 0! #42896500 1! #42897000 0! #42897500 1! #42898000 0! #42898500 1! #42899000 0! #42899500 1! #42900000 0! #42900500 1! #42901000 0! #42901500 1! #42902000 0! #42902500 1! #42903000 0! #42903500 1! #42904000 0! #42904500 1! #42905000 0! #42905500 1! #42906000 0! #42906500 1! #42907000 0! #42907500 1! #42908000 0! #42908500 1! #42909000 0! #42909500 1! #42910000 0! #42910500 1! #42911000 0! #42911500 1! #42912000 0! #42912500 1! #42913000 0! #42913500 1! #42914000 0! #42914500 1! #42915000 0! #42915500 1! #42916000 0! #42916500 1! #42917000 0! #42917500 1! #42918000 0! #42918500 1! #42919000 0! #42919500 1! #42920000 0! #42920500 1! #42921000 0! #42921500 1! #42922000 0! #42922500 1! #42923000 0! #42923500 1! #42924000 0! #42924500 1! #42925000 0! #42925500 1! #42926000 0! #42926500 1! #42927000 0! #42927500 1! #42928000 0! #42928500 1! #42929000 0! #42929500 1! #42930000 0! #42930500 1! #42931000 0! #42931500 1! #42932000 0! #42932500 1! #42933000 0! #42933500 1! #42934000 0! #42934500 1! #42935000 0! #42935500 1! #42936000 0! #42936500 1! #42937000 0! #42937500 1! #42938000 0! #42938500 1! #42939000 0! #42939500 1! #42940000 0! #42940500 1! #42941000 0! #42941500 1! #42942000 0! #42942500 1! #42943000 0! #42943500 1! #42944000 0! #42944500 1! #42945000 0! #42945500 1! #42946000 0! #42946500 1! #42947000 0! #42947500 1! #42948000 0! #42948500 1! #42949000 0! #42949500 1! #42950000 0! #42950500 1! #42951000 0! #42951500 1! #42952000 0! #42952500 1! #42953000 0! #42953500 1! #42954000 0! #42954500 1! #42955000 0! #42955500 1! #42956000 0! #42956500 1! #42957000 0! #42957500 1! #42958000 0! #42958500 1! #42959000 0! #42959500 1! #42960000 0! #42960500 1! #42961000 0! #42961500 1! #42962000 0! #42962500 1! #42963000 0! #42963500 1! #42964000 0! #42964500 1! #42965000 0! #42965500 1! #42966000 0! #42966500 1! #42967000 0! #42967500 1! #42968000 0! #42968500 1! #42969000 0! #42969500 1! #42970000 0! #42970500 1! #42971000 0! #42971500 1! #42972000 0! #42972500 1! #42973000 0! #42973500 1! #42974000 0! #42974500 1! #42975000 0! #42975500 1! #42976000 0! #42976500 1! #42977000 0! #42977500 1! #42978000 0! #42978500 1! #42979000 0! #42979500 1! #42980000 0! #42980500 1! #42981000 0! #42981500 1! #42982000 0! #42982500 1! #42983000 0! #42983500 1! #42984000 0! #42984500 1! #42985000 0! #42985500 1! #42986000 0! #42986500 1! #42987000 0! #42987500 1! #42988000 0! #42988500 1! #42989000 0! #42989500 1! #42990000 0! #42990500 1! #42991000 0! #42991500 1! #42992000 0! #42992500 1! #42993000 0! #42993500 1! #42994000 0! #42994500 1! #42995000 0! #42995500 1! #42996000 0! #42996500 1! #42997000 0! #42997500 1! #42998000 0! #42998500 1! #42999000 0! #42999500 1! #43000000 0! #43000500 1! #43001000 0! #43001500 1! #43002000 0! #43002500 1! #43003000 0! #43003500 1! #43004000 0! #43004500 1! #43005000 0! #43005500 1! #43006000 0! #43006500 1! #43007000 0! #43007500 1! #43008000 0! #43008500 1! #43009000 0! #43009500 1! #43010000 0! #43010500 1! #43011000 0! #43011500 1! #43012000 0! #43012500 1! #43013000 0! #43013500 1! #43014000 0! #43014500 1! #43015000 0! #43015500 1! #43016000 0! #43016500 1! #43017000 0! #43017500 1! #43018000 0! #43018500 1! #43019000 0! #43019500 1! #43020000 0! #43020500 1! #43021000 0! #43021500 1! #43022000 0! #43022500 1! #43023000 0! #43023500 1! #43024000 0! #43024500 1! #43025000 0! #43025500 1! #43026000 0! #43026500 1! #43027000 0! #43027500 1! #43028000 0! #43028500 1! #43029000 0! #43029500 1! #43030000 0! #43030500 1! #43031000 0! #43031500 1! #43032000 0! #43032500 1! #43033000 0! #43033500 1! #43034000 0! #43034500 1! #43035000 0! #43035500 1! #43036000 0! #43036500 1! #43037000 0! #43037500 1! #43038000 0! #43038500 1! #43039000 0! #43039500 1! #43040000 0! #43040500 1! #43041000 0! #43041500 1! #43042000 0! #43042500 1! #43043000 0! #43043500 1! #43044000 0! #43044500 1! #43045000 0! #43045500 1! #43046000 0! #43046500 1! #43047000 0! #43047500 1! #43048000 0! #43048500 1! #43049000 0! #43049500 1! #43050000 0! #43050500 1! #43051000 0! #43051500 1! #43052000 0! #43052500 1! #43053000 0! #43053500 1! #43054000 0! #43054500 1! #43055000 0! #43055500 1! #43056000 0! #43056500 1! #43057000 0! #43057500 1! #43058000 0! #43058500 1! #43059000 0! #43059500 1! #43060000 0! #43060500 1! #43061000 0! #43061500 1! #43062000 0! #43062500 1! #43063000 0! #43063500 1! #43064000 0! #43064500 1! #43065000 0! #43065500 1! #43066000 0! #43066500 1! #43067000 0! #43067500 1! #43068000 0! #43068500 1! #43069000 0! #43069500 1! #43070000 0! #43070500 1! #43071000 0! #43071500 1! #43072000 0! #43072500 1! #43073000 0! #43073500 1! #43074000 0! #43074500 1! #43075000 0! #43075500 1! #43076000 0! #43076500 1! #43077000 0! #43077500 1! #43078000 0! #43078500 1! #43079000 0! #43079500 1! #43080000 0! #43080500 1! #43081000 0! #43081500 1! #43082000 0! #43082500 1! #43083000 0! #43083500 1! #43084000 0! #43084500 1! #43085000 0! #43085500 1! #43086000 0! #43086500 1! #43087000 0! #43087500 1! #43088000 0! #43088500 1! #43089000 0! #43089500 1! #43090000 0! #43090500 1! #43091000 0! #43091500 1! #43092000 0! #43092500 1! #43093000 0! #43093500 1! #43094000 0! #43094500 1! #43095000 0! #43095500 1! #43096000 0! #43096500 1! #43097000 0! #43097500 1! #43098000 0! #43098500 1! #43099000 0! #43099500 1! #43100000 0! #43100500 1! #43101000 0! #43101500 1! #43102000 0! #43102500 1! #43103000 0! #43103500 1! #43104000 0! #43104500 1! #43105000 0! #43105500 1! #43106000 0! #43106500 1! #43107000 0! #43107500 1! #43108000 0! #43108500 1! #43109000 0! #43109500 1! #43110000 0! #43110500 1! #43111000 0! #43111500 1! #43112000 0! #43112500 1! #43113000 0! #43113500 1! #43114000 0! #43114500 1! #43115000 0! #43115500 1! #43116000 0! #43116500 1! #43117000 0! #43117500 1! #43118000 0! #43118500 1! #43119000 0! #43119500 1! #43120000 0! #43120500 1! #43121000 0! #43121500 1! #43122000 0! #43122500 1! #43123000 0! #43123500 1! #43124000 0! #43124500 1! #43125000 0! #43125500 1! #43126000 0! #43126500 1! #43127000 0! #43127500 1! #43128000 0! #43128500 1! #43129000 0! #43129500 1! #43130000 0! #43130500 1! #43131000 0! #43131500 1! #43132000 0! #43132500 1! #43133000 0! #43133500 1! #43134000 0! #43134500 1! #43135000 0! #43135500 1! #43136000 0! #43136500 1! #43137000 0! #43137500 1! #43138000 0! #43138500 1! #43139000 0! #43139500 1! #43140000 0! #43140500 1! #43141000 0! #43141500 1! #43142000 0! #43142500 1! #43143000 0! #43143500 1! #43144000 0! #43144500 1! #43145000 0! #43145500 1! #43146000 0! #43146500 1! #43147000 0! #43147500 1! #43148000 0! #43148500 1! #43149000 0! #43149500 1! #43150000 0! #43150500 1! #43151000 0! #43151500 1! #43152000 0! #43152500 1! #43153000 0! #43153500 1! #43154000 0! #43154500 1! #43155000 0! #43155500 1! #43156000 0! #43156500 1! #43157000 0! #43157500 1! #43158000 0! #43158500 1! #43159000 0! #43159500 1! #43160000 0! #43160500 1! #43161000 0! #43161500 1! #43162000 0! #43162500 1! #43163000 0! #43163500 1! #43164000 0! #43164500 1! #43165000 0! #43165500 1! #43166000 0! #43166500 1! #43167000 0! #43167500 1! #43168000 0! #43168500 1! #43169000 0! #43169500 1! #43170000 0! #43170500 1! #43171000 0! #43171500 1! #43172000 0! #43172500 1! #43173000 0! #43173500 1! #43174000 0! #43174500 1! #43175000 0! #43175500 1! #43176000 0! #43176500 1! #43177000 0! #43177500 1! #43178000 0! #43178500 1! #43179000 0! #43179500 1! #43180000 0! #43180500 1! #43181000 0! #43181500 1! #43182000 0! #43182500 1! #43183000 0! #43183500 1! #43184000 0! #43184500 1! #43185000 0! #43185500 1! #43186000 0! #43186500 1! #43187000 0! #43187500 1! #43188000 0! #43188500 1! #43189000 0! #43189500 1! #43190000 0! #43190500 1! #43191000 0! #43191500 1! #43192000 0! #43192500 1! #43193000 0! #43193500 1! #43194000 0! #43194500 1! #43195000 0! #43195500 1! #43196000 0! #43196500 1! #43197000 0! #43197500 1! #43198000 0! #43198500 1! #43199000 0! #43199500 1! #43200000 0! #43200500 1! #43201000 0! #43201500 1! #43202000 0! #43202500 1! #43203000 0! #43203500 1! #43204000 0! #43204500 1! #43205000 0! #43205500 1! #43206000 0! #43206500 1! #43207000 0! #43207500 1! #43208000 0! #43208500 1! #43209000 0! #43209500 1! #43210000 0! #43210500 1! #43211000 0! #43211500 1! #43212000 0! #43212500 1! #43213000 0! #43213500 1! #43214000 0! #43214500 1! #43215000 0! #43215500 1! #43216000 0! #43216500 1! #43217000 0! #43217500 1! #43218000 0! #43218500 1! #43219000 0! #43219500 1! #43220000 0! #43220500 1! #43221000 0! #43221500 1! #43222000 0! #43222500 1! #43223000 0! #43223500 1! #43224000 0! #43224500 1! #43225000 0! #43225500 1! #43226000 0! #43226500 1! #43227000 0! #43227500 1! #43228000 0! #43228500 1! #43229000 0! #43229500 1! #43230000 0! #43230500 1! #43231000 0! #43231500 1! #43232000 0! #43232500 1! #43233000 0! #43233500 1! #43234000 0! #43234500 1! #43235000 0! #43235500 1! #43236000 0! #43236500 1! #43237000 0! #43237500 1! #43238000 0! #43238500 1! #43239000 0! #43239500 1! #43240000 0! #43240500 1! #43241000 0! #43241500 1! #43242000 0! #43242500 1! #43243000 0! #43243500 1! #43244000 0! #43244500 1! #43245000 0! #43245500 1! #43246000 0! #43246500 1! #43247000 0! #43247500 1! #43248000 0! #43248500 1! #43249000 0! #43249500 1! #43250000 0! #43250500 1! #43251000 0! #43251500 1! #43252000 0! #43252500 1! #43253000 0! #43253500 1! #43254000 0! #43254500 1! #43255000 0! #43255500 1! #43256000 0! #43256500 1! #43257000 0! #43257500 1! #43258000 0! #43258500 1! #43259000 0! #43259500 1! #43260000 0! #43260500 1! #43261000 0! #43261500 1! #43262000 0! #43262500 1! #43263000 0! #43263500 1! #43264000 0! #43264500 1! #43265000 0! #43265500 1! #43266000 0! #43266500 1! #43267000 0! #43267500 1! #43268000 0! #43268500 1! #43269000 0! #43269500 1! #43270000 0! #43270500 1! #43271000 0! #43271500 1! #43272000 0! #43272500 1! #43273000 0! #43273500 1! #43274000 0! #43274500 1! #43275000 0! #43275500 1! #43276000 0! #43276500 1! #43277000 0! #43277500 1! #43278000 0! #43278500 1! #43279000 0! #43279500 1! #43280000 0! #43280500 1! #43281000 0! #43281500 1! #43282000 0! #43282500 1! #43283000 0! #43283500 1! #43284000 0! #43284500 1! #43285000 0! #43285500 1! #43286000 0! #43286500 1! #43287000 0! #43287500 1! #43288000 0! #43288500 1! #43289000 0! #43289500 1! #43290000 0! #43290500 1! #43291000 0! #43291500 1! #43292000 0! #43292500 1! #43293000 0! #43293500 1! #43294000 0! #43294500 1! #43295000 0! #43295500 1! #43296000 0! #43296500 1! #43297000 0! #43297500 1! #43298000 0! #43298500 1! #43299000 0! #43299500 1! #43300000 0! #43300500 1! #43301000 0! #43301500 1! #43302000 0! #43302500 1! #43303000 0! #43303500 1! #43304000 0! #43304500 1! #43305000 0! #43305500 1! #43306000 0! #43306500 1! #43307000 0! #43307500 1! #43308000 0! #43308500 1! #43309000 0! #43309500 1! #43310000 0! #43310500 1! #43311000 0! #43311500 1! #43312000 0! #43312500 1! #43313000 0! #43313500 1! #43314000 0! #43314500 1! #43315000 0! #43315500 1! #43316000 0! #43316500 1! #43317000 0! #43317500 1! #43318000 0! #43318500 1! #43319000 0! #43319500 1! #43320000 0! #43320500 1! #43321000 0! #43321500 1! #43322000 0! #43322500 1! #43323000 0! #43323500 1! #43324000 0! #43324500 1! #43325000 0! #43325500 1! #43326000 0! #43326500 1! #43327000 0! #43327500 1! #43328000 0! #43328500 1! #43329000 0! #43329500 1! #43330000 0! #43330500 1! #43331000 0! #43331500 1! #43332000 0! #43332500 1! #43333000 0! #43333500 1! #43334000 0! #43334500 1! #43335000 0! #43335500 1! #43336000 0! #43336500 1! #43337000 0! #43337500 1! #43338000 0! #43338500 1! #43339000 0! #43339500 1! #43340000 0! #43340500 1! #43341000 0! #43341500 1! #43342000 0! #43342500 1! #43343000 0! #43343500 1! #43344000 0! #43344500 1! #43345000 0! #43345500 1! #43346000 0! #43346500 1! #43347000 0! #43347500 1! #43348000 0! #43348500 1! #43349000 0! #43349500 1! #43350000 0! #43350500 1! #43351000 0! #43351500 1! #43352000 0! #43352500 1! #43353000 0! #43353500 1! #43354000 0! #43354500 1! #43355000 0! #43355500 1! #43356000 0! #43356500 1! #43357000 0! #43357500 1! #43358000 0! #43358500 1! #43359000 0! #43359500 1! #43360000 0! #43360500 1! #43361000 0! #43361500 1! #43362000 0! #43362500 1! #43363000 0! #43363500 1! #43364000 0! #43364500 1! #43365000 0! #43365500 1! #43366000 0! #43366500 1! #43367000 0! #43367500 1! #43368000 0! #43368500 1! #43369000 0! #43369500 1! #43370000 0! #43370500 1! #43371000 0! #43371500 1! #43372000 0! #43372500 1! #43373000 0! #43373500 1! #43374000 0! #43374500 1! #43375000 0! #43375500 1! #43376000 0! #43376500 1! #43377000 0! #43377500 1! #43378000 0! #43378500 1! #43379000 0! #43379500 1! #43380000 0! #43380500 1! #43381000 0! #43381500 1! #43382000 0! #43382500 1! #43383000 0! #43383500 1! #43384000 0! #43384500 1! #43385000 0! #43385500 1! #43386000 0! #43386500 1! #43387000 0! #43387500 1! #43388000 0! #43388500 1! #43388600 bladeRF-2024.05/hdl/fpga/ip/opencores/i2c/sim/i2c_verilog/run/ncverilog.key000066400000000000000000000000051457144405000262340ustar00rootroot00000000000000exit bladeRF-2024.05/hdl/fpga/ip/opencores/i2c/sim/i2c_verilog/run/ncverilog.log000066400000000000000000000111311457144405000262270ustar00rootroot00000000000000ncverilog: v03.40.(b001): (c) Copyright 1995 - 2001 Cadence Design Systems, Inc. ncverilog: v03.40.(b001): Started on Jun 15, 2002 at 13:36:36 ncverilog +access+rwc +linedebug +define+"WAVES" +incdir+../../../../bench/verilog +incdir+../../../../rtl/verilog +libext+.v -y /tools/synopsys/dw/sim_ver/ ../../../../rtl/verilog/i2c_master_bit_ctrl.v ../../../../rtl/verilog/i2c_master_byte_ctrl.v ../../../../rtl/verilog/i2c_master_top.v ../../../../bench/verilog/i2c_slave_model.v ../../../../bench/verilog/wb_master_model.v ../../../../bench/verilog/tst_bench_top.v ncverilog: *W,BADPRF: The +linedebug option may have an adverse performance impact. file: ../../../../rtl/verilog/i2c_master_bit_ctrl.v module worklib.i2c_master_bit_ctrl:v (up-to-date) errors: 0, warnings: 0 file: ../../../../rtl/verilog/i2c_master_byte_ctrl.v module worklib.i2c_master_byte_ctrl:v (up-to-date) errors: 0, warnings: 0 file: ../../../../rtl/verilog/i2c_master_top.v module worklib.i2c_master_top:v (up-to-date) errors: 0, warnings: 0 file: ../../../../bench/verilog/i2c_slave_model.v module worklib.i2c_slave_model:v (up-to-date) errors: 0, warnings: 0 file: ../../../../bench/verilog/wb_master_model.v module worklib.wb_master_model:v (up-to-date) errors: 0, warnings: 0 file: ../../../../bench/verilog/tst_bench_top.v module worklib.tst_bench_top:v errors: 0, warnings: 0 ncvlog: *W,LIBNOU: Library "/tools/synopsys/dw/sim_ver/" given but not used. Total errors/warnings found outside modules and primitives: errors: 0, warnings: 1 Caching library 'worklib' ....... Done Elaborating the design hierarchy: Building instance overlay tables: .................... Done Generating native compiled code: worklib.tst_bench_top:v <0x7fb52c98> streams: 12, words: 59009 Loading native compiled code: .................... Done Building instance specific data structures. Design hierarchy summary: Instances Unique Modules: 6 6 Primitives: 2 1 Registers: 68 68 Scalar wires: 48 - Expanded wires: 36 2 Vectored wires: 6 - Always blocks: 23 23 Initial blocks: 3 3 Cont. assignments: 28 28 Pseudo assignments: 11 14 Simulation timescale: 10ps Writing initial simulation snapshot: worklib.tst_bench_top:v Loading snapshot worklib.tst_bench_top:v .................... Done ncsim> source /cds/tools/inca/files/ncsimrc ncsim> run INFO: Signal dump enabled ... status: 0 Testbench started INFO: WISHBONE MASTER MODEL INSTANTIATED (tst_bench_top.u0) status: 19500 done reset status: 23600 programmed registers status: 25600 verified registers status: 27600 enabled core status: 30600 generate 'start', write cmd a0 (slave address+write) status: 2582600 tip==0 status: 2585600 write slave memory address 01 status: 4877600 tip==0 status: 4880600 write data a5 status: 7172600 tip==0 status: 7175600 write next data 5a, generate 'stop' status: 9467600 tip==0 status: 19467600 wait 100us status: 19470600 generate 'start', write cmd a0 (slave address+write) status: 22014600 tip==0 status: 22017600 write slave address 01 status: 24309600 tip==0 status: 24312600 generate 'repeated start', write cmd a1 (slave address+read) status: 26858600 tip==0 status: 26860600 read + ack status: 29154600 tip==0 status: 29158600 read + ack status: 31448600 tip==0 status: 31452600 read + ack status: 33744600 tip==0 status: 33746600 received xx from 3rd read address status: 33748600 read + nack status: 36038600 tip==0 status: 36040600 received xx from 4th read address status: 36043600 generate 'start', write cmd a0 (slave address+write). Check invalid address status: 38589600 tip==0 status: 38592600 write slave memory address 10 status: 40884600 tip==0 status: 40884600 Check for nack status: 40886600 generate 'stop' status: 40888600 tip==0 status: 43388600 Testbench done Simulation stopped via $stop(1) at time 433886 NS + 0 /mnt/pooh/projects/I2C/bench/verilog/tst_bench_top.v:427 $stop; ncsim> exit ncverilog: v03.40.(b001): Exiting on Jun 15, 2002 at 13:47:48 (total: 00:11:12) bladeRF-2024.05/hdl/fpga/ip/opencores/i2c/sim/i2c_verilog/run/run000066400000000000000000000010021457144405000242570ustar00rootroot00000000000000#!/bin/csh set i2c = ../../.. set bench = $i2c/bench set wave_dir = $i2c/sim/rtl_sim/i2c_verilog/waves ncverilog \ \ +access+rwc \ +define+WAVES \ \ +incdir+$bench/verilog \ +incdir+$i2c/rtl/verilog \ \ $i2c/rtl/verilog/i2c_master_bit_ctrl.v \ $i2c/rtl/verilog/i2c_master_byte_ctrl.v \ $i2c/rtl/verilog/i2c_master_top.v \ \ $bench/verilog/i2c_slave_model.v \ $bench/verilog/wb_master_model.v \ $bench/verilog/tst_bench_top.v bladeRF-2024.05/hdl/fpga/ip/opencores/i2c/software/000077500000000000000000000000001457144405000215715ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/opencores/i2c/software/include/000077500000000000000000000000001457144405000232145ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/opencores/i2c/software/include/oc_i2c_master.h000066400000000000000000000131341457144405000261000ustar00rootroot00000000000000/* ///////////////////////////////////////////////////////////////////// //// //// //// Include file for OpenCores I2C Master core //// //// //// //// File : oc_i2c_master.h //// //// Function: c-include file //// //// //// //// Authors: Richard Herveille (richard@asics.ws) //// //// Filip Miletic //// //// //// //// www.opencores.org //// //// //// ///////////////////////////////////////////////////////////////////// //// //// //// Copyright (C) 2001 Richard Herveille //// //// Filip Miletic //// //// //// //// 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 SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY //// //// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED //// //// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS //// //// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR //// //// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, //// //// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES //// //// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE //// //// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR //// //// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF //// //// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT //// //// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT //// //// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE //// //// POSSIBILITY OF SUCH DAMAGE. //// //// //// ///////////////////////////////////////////////////////////////////// */ /* * Definitions for the Opencores i2c master core */ /* --- Definitions for i2c master's registers --- */ /* ----- Read-write access */ #define OC_I2C_PRER_LO 0x00 /* Low byte clock prescaler register */ #define OC_I2C_PRER_HI 0x01 /* High byte clock prescaler register */ #define OC_I2C_CTR 0x02 /* Control register */ /* ----- Write-only registers */ #define OC_I2C_TXR 0x03 /* Transmit byte register */ #define OC_I2C_CR 0x04 /* Command register */ /* ----- Read-only registers */ #define OC_I2C_RXR 0x03 /* Receive byte register */ #define OC_I2C_SR 0x04 /* Status register */ /* ----- Bits definition */ /* ----- Control register */ #define OC_I2C_EN (1<<7) /* Core enable bit: */ /* 1 - core is enabled */ /* 0 - core is disabled */ #define OC_I2C_IEN (1<<6) /* Interrupt enable bit */ /* 1 - Interrupt enabled */ /* 0 - Interrupt disabled */ /* Other bits in CR are reserved */ /* ----- Command register bits */ #define OC_I2C_STA (1<<7) /* Generate (repeated) start condition*/ #define OC_I2C_STO (1<<6) /* Generate stop condition */ #define OC_I2C_RD (1<<5) /* Read from slave */ #define OC_I2C_WR (1<<4) /* Write to slave */ #define OC_I2C_ACK (1<<3) /* Acknowledge from slave */ /* 1 - ACK */ /* 0 - NACK */ #define OC_I2C_IACK (1<<0) /* Interrupt acknowledge */ /* ----- Status register bits */ #define OC_I2C_RXACK (1<<7) /* ACK received from slave */ /* 1 - ACK */ /* 0 - NACK */ #define OC_I2C_BUSY (1<<6) /* Busy bit */ #define OC_I2C_TIP (1<<1) /* Transfer in progress */ #define OC_I2C_IF (1<<0) /* Interrupt flag */ /* bit testing and setting macros */ #define OC_ISSET(reg,bitmask) ((reg)&(bitmask)) #define OC_ISCLEAR(reg,bitmask) (!(OC_ISSET(reg,bitmask))) #define OC_BITSET(reg,bitmask) ((reg)|(bitmask)) #define OC_BITCLEAR(reg,bitmask) ((reg)|(~(bitmask))) #define OC_BITTOGGLE(reg,bitmask) ((reg)^(bitmask)) #define OC_REGMOVE(reg,value) ((reg)=(value))bladeRF-2024.05/hdl/fpga/ip/opencores/i2c/web_uploads/000077500000000000000000000000001457144405000222435ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/ip/opencores/i2c/web_uploads/Thumbs.db000066400000000000000000000270001457144405000240130ustar00rootroot00000000000000ÐÏࡱá>þÿ þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿÿþÿÿÿþÿÿÿÿÿÿÿ þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRoot EntryÿÿÿÿÿÿÿÿÄðøîPÎþÿÿÿ256_318bad101b4610b3*ÿÿÿÿÿÿÿÿÿÿÿÿ/#ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ#‡Uªœò$#‡Uªœò$‰PNG  IHDRÌœ/}sRGB®ÎégAMA± üa"ÁIDATx^í´-E•†qP¼0‚ WÉp Ê OGðEDTÌ ™ÑYpL0á“AAÂa>DÅ€ðdD@žŠ˜.˜Ç4ÿUP4'ô9·O×éî¯õ¯>§CUí¿ªvíJÝ÷Zaºå^JÞNÓD§Î ÜÉÀôëgM⃠6Ír_%î`á¬iN¤ÓfO×ñ$³Q€« Î!™‰2ð‚‰†>Àÿna:H3`€ @C2ÊÉ4“`À`¬:L3Ðl’QN¦˜6“`Õaš†0`ÐŒr2ÍÀ$°˜«Ó 4„€†d”“i&Á@V.–⟜„ò5†¹£âzR«Å~.<\XW¸8\»ŸŽû î/ì%l®½SÇùBš_¤ÿïö¾.ü"\ŸÓ‘¼Ý]X¹ðÌWôÿÁÂláüýßXØ99ÿCýæ^-*Ïœ!/ü1€qˆ§…´ã 3pIØoâ †(òm*‡‘~ €Ò…+ìÅÝýÛ5 »9Ý-ÍǰЭrbmÍÀt0Ð&×k:u*Ì@ƒ°hPf9©f jlªfÔá™1`РÌrRÍ@Õ ØTͨÃ3 bÀ A™å¤šª°¨šQ‡gÄ€ @ƒ2ËI5U3`P5£Ï 4ˆ\ob)0Ûc‡ ›ØTÁšò¶ ܳ èÿڦ؈ú°Ñéw#>3­·³à£c$Ž¥Àÿ9Æs}¤ì^€Æ*X"á¼ý‡·u]Žî:Òß{:Xx;çrya¤Ü*ð@¾2Ák²xIFqn¾9æÎ1`'ËyéoŒAxé¦Å daÀ í+ðbLÞðëÁxY¨Å daÀ í+üDѾQàZoÏ“ÇjîùsbÌ@‡°С̶ªf È€ €Ë„è06Î|«nl\Ì@‡°èpæ[u3`à2`:Ì€ @‡3ߪ›—3Ðal:œùVÝ ð%Óºå_ᾟ¾æ µ|H±‹r?)Íç¾»ºàAÒýáñŸ'ç³Ú|½kÂ× v– ­A _Šý[À>]ËíD_^òÖÕÊÇ™ŽrñºÀÁŸt\³ l¾IGZÁ®Š ÀŸC§1ø\W ôæâpÀ§Ø;!¼ç‡ïúë²Ø¬°Âz¡ð?ªÃúp•0î§ÅD]Ž1ÌË>ÏØÛUéúùÎË@·ÞÖÕBô¦ž*ü±n°>'ðFÓºdcEtm]‘…xî¯#o^ïï?ëüÏjLo^;ƒ¼EqžÕGϽBšj¤aº„ß©3BÅEY8±OœÕù' ôÉëêà÷ëŠ,ij²ŽŸâ÷ÎÂLÍ‘çˆnN‘®; âWåHT†81tý¤+ok¤çv"‡жË&Rp#¯h{6[?30€3Ðal:œùVÝ Ø¸ ˜3`ÐáÌ·êfÀÀeÀ t˜2`%ñó ©“ø5›~”1¯ÝOž.0÷ü^<×ïÒ÷°ÂÅ\ë¥IËþ!ÝL¡0Êf¦Tzë¥Ä„O6 û6 eRákº9p­ÒÌt)igº¬Ÿl=àZ¼ÄÜ÷!,>‘6HÐy­Â ¹ÊAšŒ—‡ôS?z-kïW¢ûŸže Î aÑ+&S©Lw ‰a3_«é%|ºŠ/Ø|K 0þH`'k˜YÒKæQ‘oN~*PÉYHAAˆ÷ñ!Ì/ ³Â•ÂRá¯üÏÂBü 8»QúWÂj!¬Ctd±•‡µÓ?8Ç3TÈ9´f/an÷·Âoú\g=ÄWú\ãôS…/ßXÈè/‡ /°«pàò•„ô ûÍ­!ü­tüp½@A¸\àc¡ßàmÇŒ®äÃŒðKgy†s輺À‚âê§_ˆúö4_ÿŽÛ†p{]†;â$þ÷†´°Ÿ#æ?ùGäy‡1ÜL )'pAWЇ²ñ?kà©ÜB–G?YønHÀA:Â+å“…SðÁ¹_ Ç èJºˆ—ÅD› ® Ï÷; Ò“²KøÃx$lv2¾+¤—¼¸,è…ä õá †“s”{Ê0åõòOkTôÅAÂ~Š€ÑEwŒ uõ`Õ‚Ç ìdQçˆÝ)ì.¥~ 8ÿk€L¡‚"T`"¡0ÿXØU ž,`© dd¬ØT`–û-<•ò¶(TþSHÜC €RP(PpÈ`â¸M€d*"­çhÈtÖSÇtêgår¦B¤"“V •••T» ÿ%`YÝÈïE!ö'êHÆ“N p2 ý¹þE…rú£/ácЋƒpò±p.ÆÞpFz0²ä%•°.Á"1ÿ_Òóôæ9ÉZúÍʾ¢,Òx ýèLkÈ*E êbá¿Ã󴤬ÐÛ[€'ÂúšwTVxÂa/ÊT€$ þI¥f+3餢RF)Ÿ— ÔêçŽLbÚE¿Ñ} ¨èö áððûÜu€ò²Ÿ€î,Ÿþ¦pžÀgÅ9Ç3ÔEÎ÷k“¨ïúYƤ²„ëβE*.ÞÃò!³Ç«‡5Š÷¥·A™AòW XAZjÎ¥áRùŽÒ.……s´ dÀ¤÷ÐC6”J]wZ( l¿¥Í´r¤s‡„€ëôc‰å‡+®qVý#¿ñöM)`d£àÁÙááäå!ÒxLÓ—·Rˆ) äQZ9iýÉk*^†·ná†JWQ0üðçÓ²Ãýó9HPœT|º„uZéXo8G9—êNeÅÂHRX~|T‡rÀ¹å‰.Ÿº/JÎQàoa$)c +ëµ»€Õ¥õÁe-nãÜHçfC . ÷a™?_H…›F¥¢}TÀeÂ;_à,{”G膒I3•šsÑ],DQù_º"è|€€›NfbµqápÅb_Žõôdœ‘‘´€¤“û¢Yó•–ÃÂ=è—…þÏIîŸÕo &ñ"ÄGg¸ÜÓ.;¼'ÊM4œ¤™r@·‚–ãO‹ž4_àpŸD¹È%å>ñ$ñ‚rñ€+O½ èHEĘÑM¢¬Î t÷ÒsQt'¿ñ°WNðª¿-\$кÓêGIë\áAÄr³ :‰3ID½~’iiÆÿÇgÊÞ×/ÎS!èì+Ð HÃ.þNÓ4D…ÛÇèßõ·†I/ýx¦ÈM¿sƒÂa¬ôǺÃE/nã½£èÃɱ¯†ñ\tò¡ [hÒîÓ0®‡å!×1DýïŽô–‘XúÕ4ŸÊäU¼‡±ê£’–âï2áöÒãUz/­]ê¾ÿÇÊÞ×+A1|úò´ôqÒ˜bü„Qw_¯—~ÅtÄ4õJï BïGw€‹È Q/n{ÅQ¦À溇‡–}ÙDDÝhÕàá³Bô|Êp]§Ž±<ô«i>•)«Å:@×®QZŠ¿Ë„Û—“2]€: %.úNôì誠ÿ­-SžY‘ùtb@Ò 0Â㾕1-t§›0Q™F0Q…¸0w1`àÒ`:Ì€ @‡3ߪ›—3Ðal:œùVÝ ä2,|°˜3™°±…õä#­!^`ºYäÀÊ©:…ÕcïæûDúFg_]Ââ–ÈÞXW„!ž¸— W´‹u’ žÝ_¼ÐÁÒ]¶‘ꌱÛt¦+4x àŽm ìïºx àŽAÇ,b íŽÔ L6Ó‘N…È€ @Ú©˜l¦#œ 3…€,´;R30 ØLG>8f 6Yhw¤f`:°˜Ž|p*Ì@l²ÐîHÍÀt0`0ùàT˜, Ød¡Ý‘Š6Dñ¥)¾xÃ1ýF—âû€|Ò ´šïð^^À‡-øTZñØ­®‰roÀŸÉ«UìÔJ·#Kà TÿùNdÝoFš–ÌàkÒßx¬ýc06ÓR º™>м©›êß®5Ÿ™gkøÂ$?oß“b€—¼)P÷Bòý¿Ó§ -¹’p›"æòŸÊ‘€q¿,ºÐ´2À§»,¼€ÏHŸÛ´#½U Ÿ[?£ê@#]Ðg³GHïuXHcÊ@ ÀBäz=Ìçæ!lÞ àcT²Öx‡aðšk±SÀɠϾ÷¥b!V«F~Õ”0Àh}S° ÏfÈ7}÷ܼŒ˜ä;n·‹6?dÚÁ€ @;òÑZ˜±°‹6?dÚÁ€ @;òÑZ˜±°‹6?dÚÁ€×äËG¦ÒÉýÈ13ªÎ|= Wš L‹õûhÕé¥<¡ê@G ¯N}GLÚ=o÷:€SX{¬hÒgÝÇš“U @nK_wrg›ã7°ÈH¾£6¹°ÈŽß ddÀ #ùŽÚ äfÀ w8~3‘\Ó€OÎsõž†¨™Vû˜ÀË š Ì\!xðž¹åiÀ&”à)K#ï`ySÄÓ€ýsÊÓ€M)ÅN§0w1à1—3Ðal:œùPý‘ “Už»„°WëcO«„k;é¸~xn±Ž\ë÷Ü’<Ñ ·Vè¼îüA!^«ö@áÁAÿ͂ބëMRC— ._Ž„U¹ØTNigÜPšófÞõÈûévÞ-Ü_x´@åF0 ¼ŸŠ±r¸Æsç » ' ›ÿyŽÊr Gˆ¦ÒRÙŸ À®ú_:ôÞ8èš~sí·áÈlåbP9¥ ðºPIÔqFøºp¹@ëþ+€ðRQ*oÀýšÀ@èÏ…Ë„g |%è‹Â2á7¬Àk³÷Ž>)4qÉ¥ûФd`ô%|#œ»PG _íbP;å­²tšp¶ða©N>wõá– ùUá<×v¾#|Søˆðá%á¾5uä-·¼6œ–ôûù]ä}C¼äÞÞÒŠ…ÿµ«fP;å­Wýqߺû°©€Ïûÿ1©P©ã§°ö×o¦Dé*œ'¬nÄ ^,œÂážß7”A¾üƒ^ðsŽðqá©Ao¼&Ü} :î%в´” þVÂa.r¤Ì:Z´•Z8„ß êqÄ Á‰­^z_¼‡w$ ¹Äf2×Ã+Ã×XÛcËÜãž~ëH?:Çw#7õ¢NüÓzTþ ½¾ƒH ÏõmB_ÒÇ9p–+=^Å8³Œ_/Dob\ ^¯ÿM˜3\ûû^–êȬÇvk&¨ø/ð XÀ”èÚcÆSú1Ü3Ô”¨ÒŠõ¹q¹Î§}°^·1Wf-4¾Aϳ„± B.áš±=, ew2hE¦¥ûŒÀü?ñDa?v{X4+°&€Á¾=„‡ TŒ3úÈÈ«…Ï TÒû!QõAB…g&‚™ ÒBYgÚïk\ù€dŸtaÌÉÇ@½H(ûRP]Zþ§ |Oé­ÂóºËfþIå³éc½”ÄPg~·[H¿bÿ³WAà>ÜØIsÁ /º“ާ_øLÏÅ~踢øÜœNÌ _n˜»gë7Â⦷R¡á¡BRAqw?- Òuo‰iÄ T ¼…aB…¿^ø¥GáÊuŒ“pXÀtå°D®Ï]ñ†ðþhl² V‘„µ]æ¤`:àÒO_\²¸v»Íœàžo4‚‚e¦ n‘p„ÝW* ÿYþ‹àð`l£ÐRsO/ ÞC_I׳,x˜§ÅX¸ÐeÄ#Z²ËnñSëQ/ÖLÌ xŸpÆxçÊÊXÓ€npwŠmz¹² lô}cWˆ16Š#øRŒ¥¯Kqë›Ì@;¨Âà.¿Lx…@—­_߆i"úcŒãâ0ðÁsL1Y¦o×Μh¾VLñ±¡'Ni-D#FëÙ9§ÿÖ´?Ë`ðL!‘UpXJoFlb „¹Çq„¾ S=?è#Ñ­`ˆQ[YEµÏT~¦8.æF{¿+°PäèÎKt¤xðv~»ÂÆ™Š:a¨x‹ p8OZž!Ü,Äé8Æ ¹Nï‹a´éȈ3£ÙLÝ•Ê _¬T+ ÆübÑ|6¼üH˜˜Ï¿J /ËÿÏò€µï”7Â"ßgÒ³À9£íËʃ‚¬  <ÑH0n@CÁã aiªC(ï |ö’]t’²Gc‹‘¤¬#Œ‰0­ÉNIduºC]dô^`]À~3ŒÙ,à³—Œ¥oSsÂá .N(0ìò"³&S©ìLá`á¨Ü(Hëâì cZdi‘+D¾,¼%„ß[õòg1V±X¿?(0Z|¹ð:!®X+ªïdî^`…-8ù~¡ðtú@E¦’3¥GEf pKÊ=#P‰0þ”Âà  ¢0݆wIy`&ÃÑï})Ëltú‚@ƒC?#œ£ÁèÇô(<0Cijl¦Ž‹}ËØçŒn6}¥ªCÂßi¨UÊXœ&Mòíµa°¨•àŽDÆkÔ– ÅxT­>®2ßS@f–WI†ðæ'oÆžJiÒ4 #±ÔÏ@]Ó€ø(mš¬?ÇBŒmëøCÙŠ’#n"m3M̧٠dcÀ õŽØ ägÀ 8f 6Ù¨wÄf ?6ùóÀ)0Ù°ÈF½#6ù°ÈŸNÈÆ€ @6ê±ÈÏ€ @þ

bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/build/nios_system.tcl000066400000000000000000001105241457144405000255540ustar00rootroot00000000000000# qsys scripting (.tcl) file for nios_system package require -exact qsys 16.0 create_system {nios_system} set_project_property HIDE_FROM_IP_CATALOG {false} if { [info exists device_family] == 0 } { error "Device family variable not set." } else { set_project_property DEVICE_FAMILY $device_family } if { [info exists device] == 0 } { error "Device variable not set." } else { set_project_property DEVICE $device } if { [info exists nios_impl] == 0 } { error "Nios implementation variable not set." } else { switch -regexp $nios_impl { "[Tt][Ii][Nn][Yy]" { puts "using tiny"; set nios_impl Tiny } "[Ff][Aa][Ss][Tt]" { puts "using fast"; set nios_impl Fast } default { error "Invalid NIOS implementation: ${nios_impl}." } } } if { [info exists platform_revision] == 0 } { set platform_revision "default" } else { puts "platform revision: ${platform_revision}" } # Instances and instance parameters # (disabled instances are intentionally culled) add_instance axi_ad9361_0 axi_ad9361 1.0 set_instance_parameter_value axi_ad9361_0 {ID} {0} set_instance_parameter_value axi_ad9361_0 {DEVICE_TYPE} {0} set_instance_parameter_value axi_ad9361_0 {DAC_DDS_DISABLE} {1} add_instance cb_ad9361_0_data altera_clock_bridge set_instance_parameter_value cb_ad9361_0_data {EXPLICIT_CLOCK_RATE} {0.0} set_instance_parameter_value cb_ad9361_0_data {NUM_CLOCK_OUTPUTS} {1} add_instance command_uart command_uart 1.0 add_instance control altera_avalon_pio set_instance_parameter_value control {bitClearingEdgeCapReg} {0} set_instance_parameter_value control {bitModifyingOutReg} {1} set_instance_parameter_value control {captureEdge} {0} set_instance_parameter_value control {direction} {InOut} set_instance_parameter_value control {edgeType} {RISING} set_instance_parameter_value control {generateIRQ} {0} set_instance_parameter_value control {irqType} {LEVEL} set_instance_parameter_value control {resetValue} {0.0} set_instance_parameter_value control {simDoTestBenchWiring} {0} set_instance_parameter_value control {simDrivenValue} {0.0} set_instance_parameter_value control {width} {32} add_instance gpio_rffe_0 altera_avalon_pio set_instance_parameter_value gpio_rffe_0 {bitClearingEdgeCapReg} {0} set_instance_parameter_value gpio_rffe_0 {bitModifyingOutReg} {1} set_instance_parameter_value gpio_rffe_0 {captureEdge} {0} set_instance_parameter_value gpio_rffe_0 {direction} {InOut} set_instance_parameter_value gpio_rffe_0 {edgeType} {RISING} set_instance_parameter_value gpio_rffe_0 {generateIRQ} {1} set_instance_parameter_value gpio_rffe_0 {irqType} {LEVEL} set_instance_parameter_value gpio_rffe_0 {resetValue} {0x00018000} set_instance_parameter_value gpio_rffe_0 {simDoTestBenchWiring} {0} set_instance_parameter_value gpio_rffe_0 {simDrivenValue} {0.0} set_instance_parameter_value gpio_rffe_0 {width} {32} add_instance wishbone_master_0 wishbone_master 1.0 set_instance_parameter_value wishbone_master_0 {ADDR_BITS} {32} set_instance_parameter_value wishbone_master_0 {DATA_BITS} {32} add_instance jtag_uart altera_avalon_jtag_uart set_instance_parameter_value jtag_uart {allowMultipleConnections} {0} set_instance_parameter_value jtag_uart {hubInstanceID} {0} set_instance_parameter_value jtag_uart {readBufferDepth} {64} set_instance_parameter_value jtag_uart {readIRQThreshold} {8} set_instance_parameter_value jtag_uart {simInputCharacterStream} {} set_instance_parameter_value jtag_uart {simInteractiveOptions} {INTERACTIVE_INPUT_OUTPUT} set_instance_parameter_value jtag_uart {useRegistersForReadBuffer} {0} set_instance_parameter_value jtag_uart {useRegistersForWriteBuffer} {0} set_instance_parameter_value jtag_uart {useRelativePathForSimFile} {0} set_instance_parameter_value jtag_uart {writeBufferDepth} {64} set_instance_parameter_value jtag_uart {writeIRQThreshold} {8} add_instance nios2 altera_nios2_gen2 set_instance_parameter_value nios2 {tmr_enabled} {0} set_instance_parameter_value nios2 {setting_disable_tmr_inj} {0} set_instance_parameter_value nios2 {setting_showUnpublishedSettings} {0} set_instance_parameter_value nios2 {setting_showInternalSettings} {0} set_instance_parameter_value nios2 {setting_preciseIllegalMemAccessException} {0} set_instance_parameter_value nios2 {setting_exportPCB} {0} set_instance_parameter_value nios2 {setting_exportdebuginfo} {0} set_instance_parameter_value nios2 {setting_clearXBitsLDNonBypass} {1} set_instance_parameter_value nios2 {setting_bigEndian} {0} set_instance_parameter_value nios2 {setting_export_large_RAMs} {0} set_instance_parameter_value nios2 {setting_asic_enabled} {0} set_instance_parameter_value nios2 {setting_asic_synopsys_translate_on_off} {0} set_instance_parameter_value nios2 {setting_asic_third_party_synthesis} {0} set_instance_parameter_value nios2 {setting_asic_add_scan_mode_input} {0} set_instance_parameter_value nios2 {setting_oci_version} {1} set_instance_parameter_value nios2 {setting_fast_register_read} {0} set_instance_parameter_value nios2 {setting_exportHostDebugPort} {0} set_instance_parameter_value nios2 {setting_oci_export_jtag_signals} {0} set_instance_parameter_value nios2 {setting_avalonDebugPortPresent} {0} set_instance_parameter_value nios2 {setting_alwaysEncrypt} {1} set_instance_parameter_value nios2 {io_regionbase} {0} set_instance_parameter_value nios2 {io_regionsize} {0} set_instance_parameter_value nios2 {setting_support31bitdcachebypass} {1} set_instance_parameter_value nios2 {setting_activateTrace} {1} set_instance_parameter_value nios2 {setting_allow_break_inst} {0} set_instance_parameter_value nios2 {setting_activateTestEndChecker} {0} set_instance_parameter_value nios2 {setting_ecc_sim_test_ports} {0} set_instance_parameter_value nios2 {setting_disableocitrace} {0} set_instance_parameter_value nios2 {setting_activateMonitors} {1} set_instance_parameter_value nios2 {setting_HDLSimCachesCleared} {1} set_instance_parameter_value nios2 {setting_HBreakTest} {0} set_instance_parameter_value nios2 {setting_breakslaveoveride} {0} set_instance_parameter_value nios2 {mpu_useLimit} {0} set_instance_parameter_value nios2 {mpu_enabled} {0} set_instance_parameter_value nios2 {mmu_enabled} {0} set_instance_parameter_value nios2 {mmu_autoAssignTlbPtrSz} {1} set_instance_parameter_value nios2 {cpuReset} {0} set_instance_parameter_value nios2 {resetrequest_enabled} {1} set_instance_parameter_value nios2 {setting_removeRAMinit} {0} set_instance_parameter_value nios2 {setting_tmr_output_disable} {0} set_instance_parameter_value nios2 {setting_shadowRegisterSets} {0} set_instance_parameter_value nios2 {mpu_numOfInstRegion} {8} set_instance_parameter_value nios2 {mpu_numOfDataRegion} {8} set_instance_parameter_value nios2 {mmu_TLBMissExcOffset} {0} set_instance_parameter_value nios2 {resetOffset} {0} set_instance_parameter_value nios2 {exceptionOffset} {32} set_instance_parameter_value nios2 {cpuID} {0} set_instance_parameter_value nios2 {breakOffset} {32} set_instance_parameter_value nios2 {userDefinedSettings} {} set_instance_parameter_value nios2 {tracefilename} {} set_instance_parameter_value nios2 {resetSlave} {ram.s1} set_instance_parameter_value nios2 {mmu_TLBMissExcSlave} {} set_instance_parameter_value nios2 {exceptionSlave} {ram.s1} set_instance_parameter_value nios2 {breakSlave} {nios2_qsys_0.jtag_debug_module} set_instance_parameter_value nios2 {setting_interruptControllerType} {Internal} set_instance_parameter_value nios2 {setting_branchpredictiontype} {Dynamic} set_instance_parameter_value nios2 {setting_bhtPtrSz} {8} set_instance_parameter_value nios2 {cpuArchRev} {1} set_instance_parameter_value nios2 {mul_shift_choice} {1} set_instance_parameter_value nios2 {mul_32_impl} {2} set_instance_parameter_value nios2 {mul_64_impl} {1} set_instance_parameter_value nios2 {shift_rot_impl} {1} set_instance_parameter_value nios2 {dividerType} {srt2} set_instance_parameter_value nios2 {mpu_minInstRegionSize} {12} set_instance_parameter_value nios2 {mpu_minDataRegionSize} {12} set_instance_parameter_value nios2 {mmu_uitlbNumEntries} {4} set_instance_parameter_value nios2 {mmu_udtlbNumEntries} {6} set_instance_parameter_value nios2 {mmu_tlbPtrSz} {7} set_instance_parameter_value nios2 {mmu_tlbNumWays} {16} set_instance_parameter_value nios2 {mmu_processIDNumBits} {8} set_instance_parameter_value nios2 {impl} ${nios_impl} set_instance_parameter_value nios2 {icache_size} {2048} set_instance_parameter_value nios2 {fa_cache_line} {2} set_instance_parameter_value nios2 {fa_cache_linesize} {0} set_instance_parameter_value nios2 {icache_tagramBlockType} {Automatic} set_instance_parameter_value nios2 {icache_ramBlockType} {Automatic} set_instance_parameter_value nios2 {icache_numTCIM} {0} set_instance_parameter_value nios2 {icache_burstType} {None} set_instance_parameter_value nios2 {dcache_bursts} {false} set_instance_parameter_value nios2 {dcache_victim_buf_impl} {ram} set_instance_parameter_value nios2 {dcache_size} {2048} set_instance_parameter_value nios2 {dcache_tagramBlockType} {Automatic} set_instance_parameter_value nios2 {dcache_ramBlockType} {Automatic} set_instance_parameter_value nios2 {dcache_numTCDM} {0} set_instance_parameter_value nios2 {setting_exportvectors} {0} set_instance_parameter_value nios2 {setting_usedesignware} {0} set_instance_parameter_value nios2 {setting_ecc_present} {0} set_instance_parameter_value nios2 {setting_ic_ecc_present} {1} set_instance_parameter_value nios2 {setting_rf_ecc_present} {1} set_instance_parameter_value nios2 {setting_mmu_ecc_present} {1} set_instance_parameter_value nios2 {setting_dc_ecc_present} {0} set_instance_parameter_value nios2 {setting_itcm_ecc_present} {0} set_instance_parameter_value nios2 {setting_dtcm_ecc_present} {0} set_instance_parameter_value nios2 {regfile_ramBlockType} {Automatic} set_instance_parameter_value nios2 {ocimem_ramBlockType} {Automatic} set_instance_parameter_value nios2 {ocimem_ramInit} {0} set_instance_parameter_value nios2 {mmu_ramBlockType} {Automatic} set_instance_parameter_value nios2 {bht_ramBlockType} {Automatic} set_instance_parameter_value nios2 {cdx_enabled} {0} set_instance_parameter_value nios2 {mpx_enabled} {0} set_instance_parameter_value nios2 {debug_enabled} {1} set_instance_parameter_value nios2 {debug_triggerArming} {1} set_instance_parameter_value nios2 {debug_debugReqSignals} {0} set_instance_parameter_value nios2 {debug_assignJtagInstanceID} {0} set_instance_parameter_value nios2 {debug_jtagInstanceID} {0} set_instance_parameter_value nios2 {debug_OCIOnchipTrace} {_128} set_instance_parameter_value nios2 {debug_hwbreakpoint} {0} set_instance_parameter_value nios2 {debug_datatrigger} {0} set_instance_parameter_value nios2 {debug_traceType} {none} set_instance_parameter_value nios2 {debug_traceStorage} {onchip_trace} set_instance_parameter_value nios2 {master_addr_map} {0} set_instance_parameter_value nios2 {instruction_master_paddr_base} {0} set_instance_parameter_value nios2 {instruction_master_paddr_size} {0.0} set_instance_parameter_value nios2 {flash_instruction_master_paddr_base} {0} set_instance_parameter_value nios2 {flash_instruction_master_paddr_size} {0.0} set_instance_parameter_value nios2 {data_master_paddr_base} {0} set_instance_parameter_value nios2 {data_master_paddr_size} {0.0} set_instance_parameter_value nios2 {tightly_coupled_instruction_master_0_paddr_base} {0} set_instance_parameter_value nios2 {tightly_coupled_instruction_master_0_paddr_size} {0.0} set_instance_parameter_value nios2 {tightly_coupled_instruction_master_1_paddr_base} {0} set_instance_parameter_value nios2 {tightly_coupled_instruction_master_1_paddr_size} {0.0} set_instance_parameter_value nios2 {tightly_coupled_instruction_master_2_paddr_base} {0} set_instance_parameter_value nios2 {tightly_coupled_instruction_master_2_paddr_size} {0.0} set_instance_parameter_value nios2 {tightly_coupled_instruction_master_3_paddr_base} {0} set_instance_parameter_value nios2 {tightly_coupled_instruction_master_3_paddr_size} {0.0} set_instance_parameter_value nios2 {tightly_coupled_data_master_0_paddr_base} {0} set_instance_parameter_value nios2 {tightly_coupled_data_master_0_paddr_size} {0.0} set_instance_parameter_value nios2 {tightly_coupled_data_master_1_paddr_base} {0} set_instance_parameter_value nios2 {tightly_coupled_data_master_1_paddr_size} {0.0} set_instance_parameter_value nios2 {tightly_coupled_data_master_2_paddr_base} {0} set_instance_parameter_value nios2 {tightly_coupled_data_master_2_paddr_size} {0.0} set_instance_parameter_value nios2 {tightly_coupled_data_master_3_paddr_base} {0} set_instance_parameter_value nios2 {tightly_coupled_data_master_3_paddr_size} {0.0} set_instance_parameter_value nios2 {instruction_master_high_performance_paddr_base} {0} set_instance_parameter_value nios2 {instruction_master_high_performance_paddr_size} {0.0} set_instance_parameter_value nios2 {data_master_high_performance_paddr_base} {0} set_instance_parameter_value nios2 {data_master_high_performance_paddr_size} {0.0} add_instance opencores_i2c bladerf_oc_i2c_master 1.0 set_instance_parameter_value opencores_i2c {ARST_LVL} {1} add_instance peripheral_spi altera_avalon_spi set_instance_parameter_value peripheral_spi {clockPhase} {1} set_instance_parameter_value peripheral_spi {clockPolarity} {1} set_instance_parameter_value peripheral_spi {dataWidth} {8} set_instance_parameter_value peripheral_spi {disableAvalonFlowControl} {0} set_instance_parameter_value peripheral_spi {insertDelayBetweenSlaveSelectAndSClk} {0} set_instance_parameter_value peripheral_spi {insertSync} {0} set_instance_parameter_value peripheral_spi {lsbOrderedFirst} {0} set_instance_parameter_value peripheral_spi {masterSPI} {1} set_instance_parameter_value peripheral_spi {numberOfSlaves} {2} set_instance_parameter_value peripheral_spi {syncRegDepth} {2} set_instance_parameter_value peripheral_spi {targetClockRate} {9600000.0} set_instance_parameter_value peripheral_spi {targetSlaveSelectToSClkDelay} {0.0} add_instance ram altera_avalon_onchip_memory2 set_instance_parameter_value ram {allowInSystemMemoryContentEditor} {1} set_instance_parameter_value ram {blockType} {AUTO} set_instance_parameter_value ram {dataWidth} {32} set_instance_parameter_value ram {dataWidth2} {32} set_instance_parameter_value ram {dualPort} {0} set_instance_parameter_value ram {enableDiffWidth} {0} set_instance_parameter_value ram {initMemContent} {1} set_instance_parameter_value ram {initializationFileName} {onchip_memory2_0} set_instance_parameter_value ram {instanceID} {MED} set_instance_parameter_value ram {memorySize} ${ram_size} set_instance_parameter_value ram {readDuringWriteMode} {DONT_CARE} set_instance_parameter_value ram {simAllowMRAMContentsFile} {0} set_instance_parameter_value ram {simMemInitOnlyFilename} {0} set_instance_parameter_value ram {singleClockOperation} {0} set_instance_parameter_value ram {slave1Latency} {1} set_instance_parameter_value ram {slave2Latency} {1} set_instance_parameter_value ram {useNonDefaultInitFile} {0} set_instance_parameter_value ram {copyInitFile} {0} set_instance_parameter_value ram {useShallowMemBlocks} {0} set_instance_parameter_value ram {writable} {1} set_instance_parameter_value ram {ecc_enabled} {0} set_instance_parameter_value ram {resetrequest_enabled} {1} add_instance rb_ad9361_0_data altera_reset_bridge set_instance_parameter_value rb_ad9361_0_data {ACTIVE_LOW_RESET} {0} set_instance_parameter_value rb_ad9361_0_data {SYNCHRONOUS_EDGES} {deassert} set_instance_parameter_value rb_ad9361_0_data {NUM_RESET_OUTPUTS} {1} set_instance_parameter_value rb_ad9361_0_data {USE_RESET_REQUEST} {0} add_instance rffe_spi altera_avalon_spi set_instance_parameter_value rffe_spi {clockPhase} {0} set_instance_parameter_value rffe_spi {clockPolarity} {1} set_instance_parameter_value rffe_spi {dataWidth} {8} set_instance_parameter_value rffe_spi {disableAvalonFlowControl} {0} set_instance_parameter_value rffe_spi {insertDelayBetweenSlaveSelectAndSClk} {0} set_instance_parameter_value rffe_spi {insertSync} {0} set_instance_parameter_value rffe_spi {lsbOrderedFirst} {0} set_instance_parameter_value rffe_spi {masterSPI} {1} set_instance_parameter_value rffe_spi {numberOfSlaves} {1} set_instance_parameter_value rffe_spi {syncRegDepth} {2} set_instance_parameter_value rffe_spi {targetClockRate} {40000000.0} set_instance_parameter_value rffe_spi {targetSlaveSelectToSClkDelay} {0.0} add_instance rx_tamer time_tamer 1.0 add_instance rx_trigger_ctl altera_avalon_pio set_instance_parameter_value rx_trigger_ctl {bitClearingEdgeCapReg} {0} set_instance_parameter_value rx_trigger_ctl {bitModifyingOutReg} {1} set_instance_parameter_value rx_trigger_ctl {captureEdge} {0} set_instance_parameter_value rx_trigger_ctl {direction} {InOut} set_instance_parameter_value rx_trigger_ctl {edgeType} {RISING} set_instance_parameter_value rx_trigger_ctl {generateIRQ} {0} set_instance_parameter_value rx_trigger_ctl {irqType} {LEVEL} set_instance_parameter_value rx_trigger_ctl {resetValue} {0.0} set_instance_parameter_value rx_trigger_ctl {simDoTestBenchWiring} {0} set_instance_parameter_value rx_trigger_ctl {simDrivenValue} {0.0} set_instance_parameter_value rx_trigger_ctl {width} {8} add_instance system_clock clock_source set_instance_parameter_value system_clock {clockFrequency} {80000000.0} set_instance_parameter_value system_clock {clockFrequencyKnown} {1} set_instance_parameter_value system_clock {resetSynchronousEdges} {DEASSERT} add_instance tx_tamer time_tamer 1.0 add_instance tx_trigger_ctl altera_avalon_pio set_instance_parameter_value tx_trigger_ctl {bitClearingEdgeCapReg} {0} set_instance_parameter_value tx_trigger_ctl {bitModifyingOutReg} {1} set_instance_parameter_value tx_trigger_ctl {captureEdge} {0} set_instance_parameter_value tx_trigger_ctl {direction} {InOut} set_instance_parameter_value tx_trigger_ctl {edgeType} {RISING} set_instance_parameter_value tx_trigger_ctl {generateIRQ} {0} set_instance_parameter_value tx_trigger_ctl {irqType} {LEVEL} set_instance_parameter_value tx_trigger_ctl {resetValue} {0.0} set_instance_parameter_value tx_trigger_ctl {simDoTestBenchWiring} {0} set_instance_parameter_value tx_trigger_ctl {simDrivenValue} {0.0} set_instance_parameter_value tx_trigger_ctl {width} {8} add_instance vctcxo_tamer_0 altera_avalon_onchip_memory2 set_instance_parameter_value vctcxo_tamer_0 {allowInSystemMemoryContentEditor} {0} set_instance_parameter_value vctcxo_tamer_0 {blockType} {AUTO} set_instance_parameter_value vctcxo_tamer_0 {dataWidth} {8} set_instance_parameter_value vctcxo_tamer_0 {dataWidth2} {32} set_instance_parameter_value vctcxo_tamer_0 {dualPort} {0} set_instance_parameter_value vctcxo_tamer_0 {enableDiffWidth} {0} set_instance_parameter_value vctcxo_tamer_0 {initMemContent} {0} set_instance_parameter_value vctcxo_tamer_0 {initializationFileName} {onchip_mem.hex} set_instance_parameter_value vctcxo_tamer_0 {instanceID} {NONE} set_instance_parameter_value vctcxo_tamer_0 {memorySize} {256.0} set_instance_parameter_value vctcxo_tamer_0 {readDuringWriteMode} {DONT_CARE} set_instance_parameter_value vctcxo_tamer_0 {simAllowMRAMContentsFile} {0} set_instance_parameter_value vctcxo_tamer_0 {simMemInitOnlyFilename} {0} set_instance_parameter_value vctcxo_tamer_0 {singleClockOperation} {0} set_instance_parameter_value vctcxo_tamer_0 {slave1Latency} {1} set_instance_parameter_value vctcxo_tamer_0 {slave2Latency} {1} set_instance_parameter_value vctcxo_tamer_0 {useNonDefaultInitFile} {0} set_instance_parameter_value vctcxo_tamer_0 {copyInitFile} {0} set_instance_parameter_value vctcxo_tamer_0 {useShallowMemBlocks} {0} set_instance_parameter_value vctcxo_tamer_0 {writable} {1} set_instance_parameter_value vctcxo_tamer_0 {ecc_enabled} {0} set_instance_parameter_value vctcxo_tamer_0 {resetrequest_enabled} {1} add_instance xb_gpio altera_avalon_pio set_instance_parameter_value xb_gpio {bitClearingEdgeCapReg} {0} set_instance_parameter_value xb_gpio {bitModifyingOutReg} {0} set_instance_parameter_value xb_gpio {captureEdge} {0} set_instance_parameter_value xb_gpio {direction} {InOut} set_instance_parameter_value xb_gpio {edgeType} {RISING} set_instance_parameter_value xb_gpio {generateIRQ} {0} set_instance_parameter_value xb_gpio {irqType} {LEVEL} set_instance_parameter_value xb_gpio {resetValue} {0.0} set_instance_parameter_value xb_gpio {simDoTestBenchWiring} {0} set_instance_parameter_value xb_gpio {simDrivenValue} {0.0} set_instance_parameter_value xb_gpio {width} {32} add_instance xb_gpio_dir altera_avalon_pio set_instance_parameter_value xb_gpio_dir {bitClearingEdgeCapReg} {0} set_instance_parameter_value xb_gpio_dir {bitModifyingOutReg} {0} set_instance_parameter_value xb_gpio_dir {captureEdge} {0} set_instance_parameter_value xb_gpio_dir {direction} {Output} set_instance_parameter_value xb_gpio_dir {edgeType} {RISING} set_instance_parameter_value xb_gpio_dir {generateIRQ} {0} set_instance_parameter_value xb_gpio_dir {irqType} {LEVEL} set_instance_parameter_value xb_gpio_dir {resetValue} {0.0} set_instance_parameter_value xb_gpio_dir {simDoTestBenchWiring} {0} set_instance_parameter_value xb_gpio_dir {simDrivenValue} {0.0} set_instance_parameter_value xb_gpio_dir {width} {32} add_instance arbiter_0 arbiter 1.0 set_instance_parameter_value arbiter_0 {N} {2} # exported interfaces add_interface ad9361_adc_i0 conduit end set_interface_property ad9361_adc_i0 EXPORT_OF axi_ad9361_0.fifo_ch_0_in add_interface ad9361_adc_i1 conduit end set_interface_property ad9361_adc_i1 EXPORT_OF axi_ad9361_0.fifo_ch_2_in add_interface ad9361_adc_overflow conduit end set_interface_property ad9361_adc_overflow EXPORT_OF axi_ad9361_0.if_adc_dovf add_interface ad9361_adc_q0 conduit end set_interface_property ad9361_adc_q0 EXPORT_OF axi_ad9361_0.fifo_ch_1_in add_interface ad9361_adc_q1 conduit end set_interface_property ad9361_adc_q1 EXPORT_OF axi_ad9361_0.fifo_ch_3_in add_interface ad9361_adc_underflow conduit end set_interface_property ad9361_adc_underflow EXPORT_OF axi_ad9361_0.if_adc_dunf add_interface ad9361_dac_i0 conduit end set_interface_property ad9361_dac_i0 EXPORT_OF axi_ad9361_0.fifo_ch_0_out add_interface ad9361_dac_i1 conduit end set_interface_property ad9361_dac_i1 EXPORT_OF axi_ad9361_0.fifo_ch_2_out add_interface ad9361_dac_overflow conduit end set_interface_property ad9361_dac_overflow EXPORT_OF axi_ad9361_0.if_dac_dovf add_interface ad9361_dac_q0 conduit end set_interface_property ad9361_dac_q0 EXPORT_OF axi_ad9361_0.fifo_ch_1_out add_interface ad9361_dac_q1 conduit end set_interface_property ad9361_dac_q1 EXPORT_OF axi_ad9361_0.fifo_ch_3_out add_interface ad9361_dac_sync_in conduit end set_interface_property ad9361_dac_sync_in EXPORT_OF axi_ad9361_0.if_dac_sync_in add_interface ad9361_dac_sync_out conduit end set_interface_property ad9361_dac_sync_out EXPORT_OF axi_ad9361_0.if_dac_sync_out add_interface ad9361_dac_underflow conduit end set_interface_property ad9361_dac_underflow EXPORT_OF axi_ad9361_0.if_dac_dunf add_interface ad9361_data_clock clock source set_interface_property ad9361_data_clock EXPORT_OF cb_ad9361_0_data.out_clk add_interface ad9361_data_reset reset source set_interface_property ad9361_data_reset EXPORT_OF rb_ad9361_0_data.out_reset add_interface ad9361_device_if conduit end set_interface_property ad9361_device_if EXPORT_OF axi_ad9361_0.device_if add_interface clk clock sink set_interface_property clk EXPORT_OF system_clock.clk_in add_interface command conduit end set_interface_property command EXPORT_OF command_uart.rs232 add_interface dac conduit end set_interface_property dac EXPORT_OF peripheral_spi.external add_interface gpio conduit end set_interface_property gpio EXPORT_OF control.external_connection add_interface gpio_rffe_0 conduit end set_interface_property gpio_rffe_0 EXPORT_OF gpio_rffe_0.external_connection add_interface oc_i2c conduit end set_interface_property oc_i2c EXPORT_OF opencores_i2c.conduit_end add_interface reset reset sink set_interface_property reset EXPORT_OF system_clock.clk_in_reset add_interface rx_tamer conduit end set_interface_property rx_tamer EXPORT_OF rx_tamer.conduit_end add_interface rx_trigger_ctl conduit end set_interface_property rx_trigger_ctl EXPORT_OF rx_trigger_ctl.external_connection add_interface spi conduit end set_interface_property spi EXPORT_OF rffe_spi.external add_interface tx_tamer conduit end set_interface_property tx_tamer EXPORT_OF tx_tamer.conduit_end add_interface tx_trigger_ctl conduit end set_interface_property tx_trigger_ctl EXPORT_OF tx_trigger_ctl.external_connection add_interface xb_gpio conduit end set_interface_property xb_gpio EXPORT_OF xb_gpio.external_connection add_interface xb_gpio_dir conduit end set_interface_property xb_gpio_dir EXPORT_OF xb_gpio_dir.external_connection add_interface arbiter conduit end set_interface_property arbiter EXPORT_OF arbiter_0.conduit_end add_interface wbm conduit end set_interface_property wbm EXPORT_OF wishbone_master_0.conduit_end # connections and connection parameters add_connection axi_ad9361_0.if_l_clk axi_ad9361_0.device_clock add_connection axi_ad9361_0.if_l_clk cb_ad9361_0_data.in_clk add_connection axi_ad9361_0.if_l_clk rb_ad9361_0_data.clk add_connection axi_ad9361_0.if_rst rb_ad9361_0_data.in_reset add_connection nios2.data_master axi_ad9361_0.s_axi set_connection_parameter_value nios2.data_master/axi_ad9361_0.s_axi arbitrationPriority {1} set_connection_parameter_value nios2.data_master/axi_ad9361_0.s_axi baseAddress {0x00010000} set_connection_parameter_value nios2.data_master/axi_ad9361_0.s_axi defaultConnection {0} add_connection nios2.data_master command_uart.avalon_slave set_connection_parameter_value nios2.data_master/command_uart.avalon_slave arbitrationPriority {1} set_connection_parameter_value nios2.data_master/command_uart.avalon_slave baseAddress {0x9120} set_connection_parameter_value nios2.data_master/command_uart.avalon_slave defaultConnection {0} add_connection nios2.data_master control.s1 set_connection_parameter_value nios2.data_master/control.s1 arbitrationPriority {1} set_connection_parameter_value nios2.data_master/control.s1 baseAddress {0x9040} set_connection_parameter_value nios2.data_master/control.s1 defaultConnection {0} add_connection nios2.data_master gpio_rffe_0.s1 set_connection_parameter_value nios2.data_master/gpio_rffe_0.s1 arbitrationPriority {1} set_connection_parameter_value nios2.data_master/gpio_rffe_0.s1 baseAddress {0x9440} set_connection_parameter_value nios2.data_master/gpio_rffe_0.s1 defaultConnection {0} add_connection nios2.data_master jtag_uart.avalon_jtag_slave set_connection_parameter_value nios2.data_master/jtag_uart.avalon_jtag_slave arbitrationPriority {1} set_connection_parameter_value nios2.data_master/jtag_uart.avalon_jtag_slave baseAddress {0x9100} set_connection_parameter_value nios2.data_master/jtag_uart.avalon_jtag_slave defaultConnection {0} add_connection nios2.data_master nios2.debug_mem_slave set_connection_parameter_value nios2.data_master/nios2.debug_mem_slave arbitrationPriority {1} set_connection_parameter_value nios2.data_master/nios2.debug_mem_slave baseAddress {0x8800} set_connection_parameter_value nios2.data_master/nios2.debug_mem_slave defaultConnection {0} add_connection nios2.data_master opencores_i2c.bladerf_oc_i2c_master set_connection_parameter_value nios2.data_master/opencores_i2c.bladerf_oc_i2c_master arbitrationPriority {1} set_connection_parameter_value nios2.data_master/opencores_i2c.bladerf_oc_i2c_master baseAddress {0x90f0} set_connection_parameter_value nios2.data_master/opencores_i2c.bladerf_oc_i2c_master defaultConnection {0} add_connection nios2.data_master peripheral_spi.spi_control_port set_connection_parameter_value nios2.data_master/peripheral_spi.spi_control_port arbitrationPriority {1} set_connection_parameter_value nios2.data_master/peripheral_spi.spi_control_port baseAddress {0x9060} set_connection_parameter_value nios2.data_master/peripheral_spi.spi_control_port defaultConnection {0} add_connection nios2.data_master ram.s1 set_connection_parameter_value nios2.data_master/ram.s1 arbitrationPriority {1} set_connection_parameter_value nios2.data_master/ram.s1 baseAddress {0x00020000} set_connection_parameter_value nios2.data_master/ram.s1 defaultConnection {0} add_connection nios2.data_master rffe_spi.spi_control_port set_connection_parameter_value nios2.data_master/rffe_spi.spi_control_port arbitrationPriority {1} set_connection_parameter_value nios2.data_master/rffe_spi.spi_control_port baseAddress {0x9200} set_connection_parameter_value nios2.data_master/rffe_spi.spi_control_port defaultConnection {0} add_connection nios2.data_master rx_tamer.avalon_slave_0 set_connection_parameter_value nios2.data_master/rx_tamer.avalon_slave_0 arbitrationPriority {1} set_connection_parameter_value nios2.data_master/rx_tamer.avalon_slave_0 baseAddress {0x9160} set_connection_parameter_value nios2.data_master/rx_tamer.avalon_slave_0 defaultConnection {0} add_connection nios2.data_master rx_trigger_ctl.s1 set_connection_parameter_value nios2.data_master/rx_trigger_ctl.s1 arbitrationPriority {1} set_connection_parameter_value nios2.data_master/rx_trigger_ctl.s1 baseAddress {0x9400} set_connection_parameter_value nios2.data_master/rx_trigger_ctl.s1 defaultConnection {0} add_connection nios2.data_master tx_tamer.avalon_slave_0 set_connection_parameter_value nios2.data_master/tx_tamer.avalon_slave_0 arbitrationPriority {1} set_connection_parameter_value nios2.data_master/tx_tamer.avalon_slave_0 baseAddress {0x9140} set_connection_parameter_value nios2.data_master/tx_tamer.avalon_slave_0 defaultConnection {0} add_connection nios2.data_master tx_trigger_ctl.s1 set_connection_parameter_value nios2.data_master/tx_trigger_ctl.s1 arbitrationPriority {1} set_connection_parameter_value nios2.data_master/tx_trigger_ctl.s1 baseAddress {0x9420} set_connection_parameter_value nios2.data_master/tx_trigger_ctl.s1 defaultConnection {0} add_connection nios2.data_master vctcxo_tamer_0.s1 set_connection_parameter_value nios2.data_master/vctcxo_tamer_0.s1 arbitrationPriority {1} set_connection_parameter_value nios2.data_master/vctcxo_tamer_0.s1 baseAddress {0x9300} set_connection_parameter_value nios2.data_master/vctcxo_tamer_0.s1 defaultConnection {0} add_connection nios2.data_master wishbone_master_0.avalon_slave_0 avalon set_connection_parameter_value nios2.data_master/wishbone_master_0.avalon_slave_0 arbitrationPriority {1} set_connection_parameter_value nios2.data_master/wishbone_master_0.avalon_slave_0 baseAddress {0x10000000} set_connection_parameter_value nios2.data_master/wishbone_master_0.avalon_slave_0 defaultConnection {0} add_connection nios2.data_master xb_gpio.s1 set_connection_parameter_value nios2.data_master/xb_gpio.s1 arbitrationPriority {1} set_connection_parameter_value nios2.data_master/xb_gpio.s1 baseAddress {0x90b0} set_connection_parameter_value nios2.data_master/xb_gpio.s1 defaultConnection {0} add_connection nios2.data_master xb_gpio_dir.s1 set_connection_parameter_value nios2.data_master/xb_gpio_dir.s1 arbitrationPriority {1} set_connection_parameter_value nios2.data_master/xb_gpio_dir.s1 baseAddress {0x90a0} set_connection_parameter_value nios2.data_master/xb_gpio_dir.s1 defaultConnection {0} add_connection nios2.data_master arbiter_0.avalon_slave_0 avalon set_connection_parameter_value nios2.data_master/arbiter_0.avalon_slave_0 arbitrationPriority {1} set_connection_parameter_value nios2.data_master/arbiter_0.avalon_slave_0 baseAddress {0x9500} set_connection_parameter_value nios2.data_master/arbiter_0.avalon_slave_0 defaultConnection {0} add_connection nios2.instruction_master nios2.debug_mem_slave set_connection_parameter_value nios2.instruction_master/nios2.debug_mem_slave arbitrationPriority {1} set_connection_parameter_value nios2.instruction_master/nios2.debug_mem_slave baseAddress {0x8800} set_connection_parameter_value nios2.instruction_master/nios2.debug_mem_slave defaultConnection {0} add_connection nios2.instruction_master ram.s1 set_connection_parameter_value nios2.instruction_master/ram.s1 arbitrationPriority {1} set_connection_parameter_value nios2.instruction_master/ram.s1 baseAddress {0x00020000} set_connection_parameter_value nios2.instruction_master/ram.s1 defaultConnection {0} add_connection nios2.irq command_uart.interrupt set_connection_parameter_value nios2.irq/command_uart.interrupt irqNumber {7} add_connection nios2.irq arbiter_0.interrupt_sender interrupt set_connection_parameter_value nios2.irq/arbiter_0.interrupt_sender irqNumber {6} add_connection nios2.irq gpio_rffe_0.irq set_connection_parameter_value nios2.irq/gpio_rffe_0.irq irqNumber {9} add_connection nios2.irq jtag_uart.irq set_connection_parameter_value nios2.irq/jtag_uart.irq irqNumber {1} add_connection nios2.irq opencores_i2c.interrupt_sender set_connection_parameter_value nios2.irq/opencores_i2c.interrupt_sender irqNumber {5} add_connection nios2.irq peripheral_spi.irq set_connection_parameter_value nios2.irq/peripheral_spi.irq irqNumber {4} add_connection nios2.irq rffe_spi.irq set_connection_parameter_value nios2.irq/rffe_spi.irq irqNumber {8} add_connection nios2.irq rx_tamer.interrupt_sender set_connection_parameter_value nios2.irq/rx_tamer.interrupt_sender irqNumber {3} add_connection nios2.irq wishbone_master_0.interrupt_sender interrupt set_connection_parameter_value nios2.irq/wishbone_master_0.interrupt_sender irqNumber {10} add_connection nios2.irq tx_tamer.interrupt_sender set_connection_parameter_value nios2.irq/tx_tamer.interrupt_sender irqNumber {2} add_connection system_clock.clk axi_ad9361_0.delay_clock add_connection system_clock.clk axi_ad9361_0.s_axi_clock add_connection system_clock.clk command_uart.clock add_connection system_clock.clk control.clk add_connection system_clock.clk gpio_rffe_0.clk add_connection system_clock.clk jtag_uart.clk add_connection system_clock.clk nios2.clk add_connection system_clock.clk opencores_i2c.clock_sink add_connection system_clock.clk peripheral_spi.clk add_connection system_clock.clk ram.clk1 add_connection system_clock.clk rffe_spi.clk add_connection system_clock.clk rx_tamer.clock_sink add_connection system_clock.clk rx_trigger_ctl.clk add_connection system_clock.clk tx_tamer.clock_sink add_connection system_clock.clk tx_trigger_ctl.clk add_connection system_clock.clk vctcxo_tamer_0.clk1 add_connection system_clock.clk xb_gpio.clk add_connection system_clock.clk xb_gpio_dir.clk add_connection system_clock.clk arbiter_0.clock_sink clock add_connection system_clock.clk wishbone_master_0.clock_sink clock add_connection system_clock.clk_reset axi_ad9361_0.s_axi_reset add_connection system_clock.clk_reset command_uart.reset add_connection system_clock.clk_reset control.reset add_connection system_clock.clk_reset gpio_rffe_0.reset add_connection system_clock.clk_reset jtag_uart.reset add_connection system_clock.clk_reset nios2.reset add_connection system_clock.clk_reset opencores_i2c.reset_sink add_connection system_clock.clk_reset peripheral_spi.reset add_connection system_clock.clk_reset ram.reset1 add_connection system_clock.clk_reset rffe_spi.reset add_connection system_clock.clk_reset rx_tamer.reset add_connection system_clock.clk_reset rx_trigger_ctl.reset add_connection system_clock.clk_reset tx_tamer.reset add_connection system_clock.clk_reset tx_trigger_ctl.reset add_connection system_clock.clk_reset vctcxo_tamer_0.reset1 add_connection system_clock.clk_reset xb_gpio.reset add_connection system_clock.clk_reset xb_gpio_dir.reset add_connection system_clock.clk_reset arbiter_0.reset reset add_connection system_clock.clk_reset wishbone_master_0.reset reset # interconnect requirements set_interconnect_requirement {$system} {qsys_mm.clockCrossingAdapter} {HANDSHAKE} set_interconnect_requirement {$system} {qsys_mm.maxAdditionalLatency} {1} set_interconnect_requirement {$system} {qsys_mm.enableEccProtection} {FALSE} set_interconnect_requirement {$system} {qsys_mm.insertDefaultSlave} {FALSE} if { $platform_revision == "foxhunt" } { puts "Adding tone_generator..." add_instance tone_generator_0 tone_generator 1.0 set_instance_parameter_value tone_generator_0 {ADDR_WIDTH} {2} set_instance_parameter_value tone_generator_0 {DATA_WIDTH} {32} set_instance_parameter_value tone_generator_0 {QUEUE_LENGTH} {8} add_interface tonegen_sample conduit end set_interface_property tonegen_sample EXPORT_OF tone_generator_0.samplestream add_interface tonegen_status conduit end set_interface_property tonegen_status EXPORT_OF tone_generator_0.status add_connection system_clock.clk tone_generator_0.clock_sink add_connection system_clock.clk_reset tone_generator_0.reset add_connection nios2.data_master tone_generator_0.avalon_slave_0 set_connection_parameter_value nios2.data_master/tone_generator_0.avalon_slave_0 arbitrationPriority {1} set_connection_parameter_value nios2.data_master/tone_generator_0.avalon_slave_0 baseAddress {0x9220} set_connection_parameter_value nios2.data_master/tone_generator_0.avalon_slave_0 defaultConnection {0} } save_system {nios_system.qsys} bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/build/platform.conf000066400000000000000000000021731457144405000251670ustar00rootroot00000000000000#!/usr/bin/env bash # Load some platform-specific options by setting bash variables. # This file will be sourced by the main build script. PROJECT_NAME="bladerf" # Board / product name BOARD_NAME="bladeRF-micro" # Minimum Quartus version for this platform declare -A PLATFORM_QUARTUS_VER # associative array PLATFORM_QUARTUS_VER[major]=16 PLATFORM_QUARTUS_VER[minor]=0 # Project revisions available for this platform PLATFORM_REVISIONS=("hosted" "adsb" "foxhunt" "wlan") # Valid FPGA sizes for this platform PLATFORM_FPGA_SIZES=("A2" "A4" "A5" "A9") # Parameters: # $1 FPGA size # Prints string containing full device part number function get_device() { echo -n "5CEB${1}F23C8" } # Parameters: # $1 FPGA size # Prints string containing the device family function get_device_family() { echo -n "Cyclone V" } # Parameters: # $1 FPGA size # Prints string containing the amount of RAM to allocate to the common_system # RAM during Qsys generation function get_qsys_ram() { if [ "${1}" == "A4" ] || [ "${1}" == "A5" ] || [ "${1}" == "A9" ]; then rams=131072 else rams=32768 fi echo -n "${rams}" } bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/build/platform.sh000066400000000000000000000027511457144405000246560ustar00rootroot00000000000000#!/usr/bin/env bash # FX3 PLL echo "Build FX3 PLL" ip-generate \ --output-directory="fx3_pll" \ --output-name="fx3_pll" \ --remove-qsys-generate-warning \ --file-set=QUARTUS_SYNTH \ --language=VHDL \ --component-name="altera_pll" \ --part=${DEVICE} \ --component-param=gui_pll_mode="Integer-N PLL" \ --component-param=gui_operation_mode="source synchronous" \ --component-param=gui_pll_auto_reset="On" \ --component-param=gui_use_locked="True" \ --component-param=gui_number_of_clocks="1" \ --component-param=gui_reference_clock_frequency="100.0 MHz" \ --component-param=gui_output_clock_frequency0="100.0 MHz" \ --component-param=gui_phase_shift0="-3420 ps" \ --component-param=gui_duty_cycle0="50%" \ # System PLL echo "Build System PLL" ip-generate \ --output-directory="system_pll" \ --output-name="system_pll" \ --remove-qsys-generate-warning \ --file-set=QUARTUS_SYNTH \ --language=VHDL \ --component-name="altera_pll" \ --part=${DEVICE} \ --component-param=gui_pll_mode="Integer-N PLL" \ --component-param=gui_operation_mode="normal" \ --component-param=gui_pll_auto_reset="On" \ --component-param=gui_use_locked="True" \ --component-param=gui_number_of_clocks="1" \ --component-param=gui_reference_clock_frequency="38.4 MHz" \ --component-param=gui_output_clock_frequency0="80.0 MHz" \ --component-param=gui_phase_shift0="0.0 ps" \ --component-param=gui_duty_cycle0="50%" \ bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/build/suppressed_messages.srf000066400000000000000000000065311457144405000272760ustar00rootroot00000000000000{ "" "" "" "Verilog HDL or VHDL warning at axi_ad9361_alt_lvds_rx_lvds_rx.v(49): object \"clkselect\" assigned a value but never read" { } { } 0 10036 "" 0 0 "Design Software" 0 -1 0 ""} { "" "" "" "Verilog HDL or VHDL warning at axi_ad9361_alt_lvds_tx_lvds_tx.v(49): object \"clkselect\" assigned a value but never read" { } { } 0 10036 "" 0 0 "Design Software" 0 -1 0 ""} { "" "" "" "Verilog HDL or VHDL warning at nios_system_rffe_spi.v(383): conditional expression evaluates to a constant" { } { } 0 10037 "" 0 0 "Design Software" 0 -1 0 ""} { "" "" "" "Verilog HDL or VHDL warning at nios_system_rffe_spi.v(384): conditional expression evaluates to a constant" { } { } 0 10037 "" 0 0 "Design Software" 0 -1 0 ""} { "" "" "" "Verilog HDL Case Statement warning at i2c_master_bit_ctrl.v(406): honored full_case synthesis attribute - differences between design synthesis and simulation may occur" { } { } 0 10208 "" 0 0 "Design Software" 0 -1 0 ""} { "" "" "" "Unrecognized synthesis attribute \"enum_state\" at ../../../fpga/ip/opencores/i2c/rtl/verilog/i2c_master_bit_ctrl.v(185)" { } { } 0 10335 "" 0 0 "Design Software" 0 -1 0 ""} { "" "" "" "Unrecognized synthesis attribute \"enum_state\" at ../../../fpga/ip/opencores/i2c/rtl/verilog/i2c_master_byte_ctrl.v(199)" { } { } 0 10335 "" 0 0 "Design Software" 0 -1 0 ""} { "" "" "" "Verilog HDL Synthesis Attribute warning at i2c_master_bit_ctrl.v(410): ignoring full_case attribute on case statement with explicit default case item" { } { } 0 10766 "" 0 0 "Design Software" 0 -1 0 ""} { "" "" "" "No output dependent on input pin \"c5_clock_2\"" { } { } 0 15610 "" 0 0 "Design Software" 0 -1 0 ""} { "" "" "" "Ignored set_false_path at qfit2_legacy_fmain_fitter_flow.tcl(117): Argument is not an object ID" { } { } 0 332049 "" 0 0 "Design Software" 0 -1 0 ""} { "" "" "" "Ignored set_false_path at qsta_default_script.tcl(1333): Argument is not an object ID" { } { } 0 332049 "" 0 0 "Design Software" 0 -1 0 ""} { "" "" "" "Ignored filter at qfit2_legacy_fmain_fitter_flow.tcl(117): *rs_dgwp\|dffpipe_cd9:dffpipe11\|dffe12a* could not be matched with a clock or keeper or register or port or pin or cell or partition" { } { } 0 332174 "" 0 0 "Design Software" 0 -1 0 ""} { "" "" "" "Ignored filter at qfit2_legacy_fmain_fitter_flow.tcl(117): *ws_dgrp\|dffpipe_ed9:dffpipe15\|dffe16a* could not be matched with a clock or keeper or register or port or pin or cell or partition" { } { } 0 332174 "" 0 0 "Design Software" 0 -1 0 ""} { "" "" "" "Ignored filter at qsta_default_script.tcl(1333): *rs_dgwp\|dffpipe_cd9:dffpipe11\|dffe12a* could not be matched with a clock or keeper or register or port or pin or cell or partition" { } { } 0 332174 "" 0 0 "Design Software" 0 -1 0 ""} { "" "" "" "Ignored filter at qsta_default_script.tcl(1333): *ws_dgrp\|dffpipe_ed9:dffpipe15\|dffe16a* could not be matched with a clock or keeper or register or port or pin or cell or partition" { } { } 0 332174 "" 0 0 "Design Software" 0 -1 0 ""} { "" "" "" "Verilog HDL or VHDL warning at nios_system_mm_interconnect_2_router.sv" { } { } 0 9999 "" 0 0 "Design Software" 0 -1 0 ""} { "" "" "" "Verilog HDL assignment warning at altera_merlin_axi_slave_ni.sv" { } { } 0 9999 "" 0 0 "Design Software" 0 -1 0 ""} { "" "" "" "Verilog HDL or VHDL warning at altera_merlin_width_adapter.sv" { } { } 0 9999 "" 0 0 "Design Software" 0 -1 0 ""} bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/constraints/000077500000000000000000000000001457144405000237415ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/constraints/bladerf-wlan.sdc000066400000000000000000000022641457144405000267760ustar00rootroot00000000000000# bladeRF Micro Design Constraints File # # Copyright (c) 2020 Nuand LLC # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # Clock inputs create_clock -period "80.0 MHz" [get_ports adi_rx_clock] bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/constraints/bladerf.sdc000066400000000000000000000107571457144405000260450ustar00rootroot00000000000000# bladeRF Micro Design Constraints File # # Copyright (c) 2013-2017 Nuand LLC # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # Clock inputs create_clock -period "38.4 MHz" [get_ports c5_clock2] create_clock -period "250.0 MHz" [get_ports adi_rx_clock] # Generate the appropriate PLL clocks derive_pll_clocks derive_clock_uncertainty # Platform-specific clock aliases set fx3_clock {U_fx3_pll|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk} set system_clock {U_system_pll|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk} # Trace delays between AD9361 and FPGA (bladeRF Micro) set adi_spi_clk_trace_delay 0.127 set adi_spi_di_trace_delay 0.168 set adi_spi_do_trace_delay 0.119 set adi_spi_enb_trace_delay 0.137 # Trace delays between FX3 and FPGA (bladeRF Micro) set fx3_data_trace_delay 0.260 set fx3_sclk_trace_delay 0.000 set fx3_dclk_trace_delay 0.226 # Trace delays between ADF4002 and FPGA (bladeRF Micro) set adf_spi_clk_trace_delay 0.383 set adf_spi_data_trace_delay 0.373 set adf_spi_le_trace_delay 0.311 # Trace delays between AD5621 and FPGA (bladeRF Micro) set dac_spi_sclk_trace_delay 0.164 set dac_spi_sdin_trace_delay 0.181 set dac_spi_nsync_trace_delay 0.193 # First flop synchronizer false path set_false_path -from [get_registers {*source_holding[*]}] -to * # Slow Interfaces set_false_path -from * -to [get_ports ps_sync_1p*] set_false_path -from * -to [get_ports {rx_bias_en tx_bias_en}] set_false_path -from * -to [get_ports {exp_gpio[*] exp_clock_oe}] set_false_path -from * -to [get_ports adf_ce] set_false_path -from * -to [get_ports led*] set_false_path -from * -to [get_ports {adi_*x_spdt*_v*}] set_false_path -from * -to [get_ports si_clock_sel] set_false_path -from * -to [get_ports ufl_clock_oe] set_false_path -from adf_muxout -to * set_false_path -from exp_clock_req -to * set_false_path -from exp_present -to * set_false_path -from pwr_status -to * # JTAG settings set_clock_groups -exclusive -group [get_clocks altera_reserved_tck] set_input_delay -clock [get_clocks altera_reserved_tck] 2.0 [get_ports altera_reserved_tdi] set_input_delay -clock [get_clocks altera_reserved_tck] 2.0 [get_ports altera_reserved_tms] set_output_delay -clock [get_clocks altera_reserved_tck] 2.0 [get_ports altera_reserved_tdo] # Exceptions # The TX dcfifo aclr (TX clock) has recovery violation going to the write clock domain (PCLK) # The DCFIFO documentation says to false path aclr-->rdclk, but we need to do it to wrclk. # Has not been an issue so far, so probably safe? # With the LVDS cores, the TX PLL clock got merged with the RX PLL clock set_false_path -from {reset_synchronizer:U_reset_sync_rx|sync} -to {tx:U_tx|tx_*fifo*common_dcfifo*dffpipe_3dc:wraclr|dffe12a[0]} set_false_path -from {reset_synchronizer:U_reset_sync_rx|sync} -to {tx:U_tx|tx_*fifo*common_dcfifo*dffpipe_3dc:wraclr|dffe13a[0]} set_false_path -from {reset_synchronizer:U_reset_sync_tx|sync} -to {tx:U_tx|tx_*fifo*common_dcfifo*dffpipe_3dc:wraclr|dffe12a[0]} set_false_path -from {reset_synchronizer:U_reset_sync_tx|sync} -to {tx:U_tx|tx_*fifo*common_dcfifo*dffpipe_3dc:wraclr|dffe13a[0]} # False path between hold_time and compare_time due to the way the FSM is setup set_false_path -from {*x_tamer|hold_time[*]} -to {*x_tamer|compare_time[*]} # Mini Expansion Port (J51) set_false_path -from [get_ports mini_exp*] -to * set_false_path -from * -to [get_ports mini_exp*] bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/constraints/i2c.sdc000066400000000000000000000051201457144405000251070ustar00rootroot00000000000000# bladeRF Micro Design Constraints File for I2C interfaces # # Copyright (c) 2017 Nuand LLC # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # Create generated clocks. Input clock to the SPI block in the common_system # is 80 MHz, actual output clock is 400 kHz set pwr_scl_divisor 200 create_generated_clock -name i2c_scl_reg -source [get_pins $system_clock] -divide_by $pwr_scl_divisor [get_registers {*bit_controller|scl_oen}] create_generated_clock -name pwr_scl_pin -source [get_registers -no_duplicates {*bit_controller|scl_oen}] [get_ports {pwr_scl}] set_max_skew -from [get_clocks {pwr_scl_pin}] -to [get_ports {pwr_scl}] 0.2 # Constraints for INA219 data set ina_i2c_data_ts 100.0 set ina_i2c_data_th 900.0 set_input_delay -clock [get_clocks pwr_scl_pin] -max $ina_i2c_data_ts [get_ports {pwr_sda}] set_input_delay -clock [get_clocks pwr_scl_pin] -min $ina_i2c_data_th [get_ports {pwr_sda}] set_output_delay -clock [get_clocks pwr_scl_pin] -max $ina_i2c_data_ts [get_ports {pwr_sda}] set_output_delay -clock [get_clocks pwr_scl_pin] -min $ina_i2c_data_th [get_ports {pwr_sda}] # Multicycle constraints set_multicycle_path -setup -start -from [get_clocks $system_clock] -to [get_clocks {pwr_scl_pin}] [expr {$pwr_scl_divisor / 2}] set_multicycle_path -hold -start -from [get_clocks $system_clock] -to [get_clocks {pwr_scl_pin}] [expr {$pwr_scl_divisor - 1}] set_multicycle_path -setup -end -from [get_clocks {pwr_scl_pin}] -to [get_clocks $system_clock] [expr {$pwr_scl_divisor / 2}] set_multicycle_path -hold -end -from [get_clocks {pwr_scl_pin}] -to [get_clocks $system_clock] [expr {$pwr_scl_divisor - 1}] bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/constraints/pins.tcl000066400000000000000000000420251457144405000254210ustar00rootroot00000000000000# Top level pins for bladeRF package require ::quartus::project ########## # BANK 3A/3B ########## set_location_assignment PIN_R6 -to fx3_gpif[6] set_location_assignment PIN_U7 -to fx3_gpif[5] set_location_assignment PIN_R5 -to fx3_gpif[8] set_location_assignment PIN_U8 -to fx3_gpif[7] set_location_assignment PIN_P6 -to fx3_gpif[4] set_location_assignment PIN_W8 -to fx3_gpif[9] set_location_assignment PIN_N6 -to fx3_gpif[10] set_location_assignment PIN_W9 -to fx3_gpif[11] set_location_assignment PIN_T7 -to fx3_gpif[12] set_location_assignment PIN_U6 -to fx3_gpif[3] set_location_assignment PIN_T8 -to fx3_gpif[13] set_location_assignment PIN_V6 -to fx3_ctl[9] set_location_assignment PIN_M6 -to fx3_gpif[15] set_location_assignment PIN_R7 -to fx3_gpif[16] set_location_assignment PIN_M7 -to fx3_gpif[17] set_location_assignment PIN_P7 -to fx3_gpif[14] set_location_assignment PIN_AB6 -to fx3_gpif[0] set_location_assignment PIN_V9 -to fx3_gpif[18] set_location_assignment PIN_AB5 -to fx3_gpif[1] set_location_assignment PIN_V10 -to fx3_gpif[19] set_location_assignment PIN_P8 -to fx3_gpif[20] set_location_assignment PIN_AA7 -to fx3_gpif[2] set_location_assignment PIN_N8 -to fx3_gpif[21] set_location_assignment PIN_AB7 -to fx3_gpif[22] set_location_assignment PIN_AA8 -to fx3_gpif[23] set_location_assignment PIN_T9 -to fx3_gpif[24] set_location_assignment PIN_AB8 -to fx3_gpif[25] set_location_assignment PIN_U10 -to fx3_gpif[26] set_location_assignment PIN_M8 -to fx3_gpif[27] set_location_assignment PIN_AA10 -to fx3_gpif[28] set_location_assignment PIN_M9 -to fx3_gpif[29] set_location_assignment PIN_AA9 -to fx3_gpif[30] set_location_assignment PIN_Y10 -to fx3_gpif[31] set_location_assignment PIN_Y9 -to fx3_ctl[0] set_location_assignment PIN_R9 -to fx3_ctl[1] set_location_assignment PIN_U11 -to fx3_ctl[2] set_location_assignment PIN_R12 -to fx3_ctl[3] set_location_assignment PIN_U12 -to fx3_ctl[4] set_location_assignment PIN_P12 -to fx3_ctl[5] set_location_assignment PIN_AB10 -to fx3_ctl[6] set_location_assignment PIN_R10 -to fx3_ctl[7] set_location_assignment PIN_AB11 -to fx3_ctl[8] set_location_assignment PIN_P9 -to fx3_ctl[10] set_location_assignment PIN_Y11 -to fx3_ctl[11] set_location_assignment PIN_N9 -to fx3_pclk set_location_assignment PIN_AA12 -to fx3_ctl[12] set_location_assignment PIN_R11 -to pwr_status # Bank Voltage set_global_assignment -name IOBANK_VCCIO "1.8V" -section_id "3A" set_global_assignment -name IOBANK_VCCIO "1.8V" -section_id "3B" # Single-ended output constraints set outs {} foreach pin ${outs} { set_instance_assignment -name IO_STANDARD "1.8 V" -to ${pin} set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to ${pin} set_instance_assignment -name SLEW_RATE 1 -to ${pin} } # Single-ended inout constraints set inouts {} for { set i 0 } { $i < 32 } { incr i } { lappend inouts "fx3_gpif\[${i}\]" } for { set i 0 } { $i < 13 } { incr i } { lappend inouts "fx3_ctl\[${i}\]" } foreach pin ${inouts} { set_instance_assignment -name IO_STANDARD "1.8 V" -to ${pin} set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to ${pin} set_instance_assignment -name SLEW_RATE 1 -to ${pin} } # Single-ended input constraints set ins { fx3_pclk pwr_status } foreach pin ${ins} { set_instance_assignment -name IO_STANDARD "1.8 V" -to ${pin} } set_instance_assignment -name WEAK_PULL_UP_RESISTOR "ON" -to pwr_status ########## # BANK 4A & 5B ########## # Bank 4A set_location_assignment PIN_V13 -to "adi_rx_data[0](n)" set_location_assignment PIN_AB12 -to adi_ctrl_out[7] set_location_assignment PIN_U13 -to adi_rx_data[0] set_location_assignment PIN_T12 -to "adi_rx_data[1](n)" set_location_assignment PIN_AA14 -to adi_ctrl_out[6] set_location_assignment PIN_T13 -to adi_rx_data[1] set_location_assignment PIN_AA13 -to adi_ctrl_out[5] set_location_assignment PIN_AB15 -to adi_ctrl_out[4] set_location_assignment PIN_Y14 -to "adi_rx_data[2](n)" set_location_assignment PIN_Y15 -to adi_rx_data[2] set_location_assignment PIN_V14 -to "adi_rx_clock(n)" set_location_assignment PIN_V15 -to adi_rx_clock set_location_assignment PIN_AB18 -to adi_tx_spdt1_v[1] set_location_assignment PIN_AB20 -to "adi_tx_clock(n)" set_location_assignment PIN_Y16 -to "adi_rx_data[3](n)" set_location_assignment PIN_AB21 -to adi_tx_clock set_location_assignment PIN_Y17 -to adi_rx_data[3] set_location_assignment PIN_T14 -to "adi_rx_data[4](n)" set_location_assignment PIN_AA17 -to "adi_tx_frame(n)" set_location_assignment PIN_U15 -to adi_rx_data[4] set_location_assignment PIN_AA18 -to adi_tx_frame set_location_assignment PIN_AA19 -to "adi_tx_data[5](n)" set_location_assignment PIN_V20 -to "adi_rx_data[5](n)" set_location_assignment PIN_AA20 -to adi_tx_data[5] set_location_assignment PIN_W19 -to adi_rx_data[5] set_location_assignment PIN_AB22 -to "adi_tx_data[4](n)" set_location_assignment PIN_AA22 -to adi_tx_data[4] set_location_assignment PIN_Y22 -to "adi_tx_data[3](n)" set_location_assignment PIN_Y20 -to "adi_rx_frame(n)" set_location_assignment PIN_W22 -to adi_tx_data[3] set_location_assignment PIN_Y19 -to adi_rx_frame set_location_assignment PIN_Y21 -to "adi_tx_data[2](n)" set_location_assignment PIN_R14 -to adi_tx_spdt1_v[2] set_location_assignment PIN_W21 -to adi_tx_data[2] set_location_assignment PIN_U22 -to "adi_tx_data[1](n)" set_location_assignment PIN_V19 -to adi_ctrl_out[3] set_location_assignment PIN_V21 -to adi_tx_data[1] set_location_assignment PIN_V18 -to adi_ctrl_out[2] set_location_assignment PIN_U16 -to adi_ctrl_out[1] set_location_assignment PIN_U21 -to "adi_tx_data[0](n)" set_location_assignment PIN_U17 -to adi_ctrl_out[0] set_location_assignment PIN_U20 -to adi_tx_data[0] set_location_assignment PIN_P14 -to adi_rx_spdt2_v[2] set_location_assignment PIN_AB17 -to adi_tx_spdt2_v[1] set_location_assignment PIN_AA15 -to adi_tx_spdt2_v[2] # Bank 5B set_location_assignment PIN_N16 -to adi_ctrl_in[0] set_location_assignment PIN_N20 -to adi_ctrl_in[1] set_location_assignment PIN_M16 -to adi_ctrl_in[2] set_location_assignment PIN_N21 -to adi_ctrl_in[3] set_location_assignment PIN_M18 -to adi_sync_in set_location_assignment PIN_K17 -to adi_enable set_location_assignment PIN_M20 -to adi_en_agc set_location_assignment PIN_L17 -to adi_txnrx set_location_assignment PIN_M21 -to adi_reset_n set_location_assignment PIN_L19 -to adi_spi_csn set_location_assignment PIN_K21 -to adi_spi_sdo set_location_assignment PIN_L18 -to adi_spi_sdi set_location_assignment PIN_K22 -to adi_spi_sclk set_location_assignment PIN_N19 -to adi_rx_spdt1_v[1] set_location_assignment PIN_M22 -to adi_rx_spdt1_v[2] set_location_assignment PIN_L22 -to adi_rx_spdt2_v[1] # Bank voltage set_global_assignment -name IOBANK_VCCIO "2.5V" -section_id "4A" set_global_assignment -name IOBANK_VCCIO "2.5V" -section_id "5B" # Single-ended output constraints set outs { adi_en_agc adi_txnrx adi_reset_n adi_enable adi_spi_csn adi_spi_sdi adi_spi_sclk adi_sync_in } for { set i 0 } { $i < 4 } { incr i } { lappend outs "adi_ctrl_in\[${i}\]" } for { set i 1 } { $i < 3 } { incr i } { for { set j 1 } { $j < 3 } { incr j } { lappend outs "adi_rx_spdt${j}_v\[${i}\]" lappend outs "adi_tx_spdt${j}_v\[${i}\]" set_instance_assignment -name IO_MAXIMUM_TOGGLE_RATE "1 MHz" -to adi_rx_spdt${j}_v\[${i}\] set_instance_assignment -name IO_MAXIMUM_TOGGLE_RATE "1 MHz" -to adi_tx_spdt${j}_v\[${i}\] } } foreach pin ${outs} { set_instance_assignment -name IO_STANDARD "2.5 V" -to ${pin} set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to ${pin} set_instance_assignment -name SLEW_RATE 1 -to ${pin} } # Single-ended inout constraints set inouts { } foreach pin ${inouts} { set_instance_assignment -name IO_STANDARD "2.5 V" -to ${pin} set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to ${pin} set_instance_assignment -name SLEW_RATE 1 -to ${pin} } # Single-ended input constraints set ins { adi_spi_sdo } for { set i 0 } { $i < 8 } { incr i } { lappend ins "adi_ctrl_out\[${i}\]" } foreach pin ${ins} { set_instance_assignment -name IO_STANDARD "2.5 V" -to ${pin} } # LVDS outputs set lvds_outs { adi_tx_frame adi_tx_clock } for { set i 0 } { $i < 6 } { incr i } { lappend lvds_outs "adi_tx_data\[${i}\]" } foreach pin ${lvds_outs} { set_instance_assignment -name IO_STANDARD "LVDS" -to ${pin} #set_instance_assignment -name IO_STANDARD "LVDS" -to "${pin}(n)" } # LVDS inputs set lvds_ins { adi_rx_frame adi_rx_clock } for { set i 0 } { $i < 6 } { incr i } { lappend lvds_ins "adi_rx_data\[${i}\]" } foreach pin ${lvds_ins} { set_instance_assignment -name IO_STANDARD "LVDS" -to ${pin} #set_instance_assignment -name IO_STANDARD "LVDS" -to "${pin}(n)" set_instance_assignment -name INPUT_TERMINATION "DIFFERENTIAL" -to ${pin} #set_instance_assignment -name INPUT_TERMINATION "DIFFERENTIAL" -to "${pin}(n)" } ########## # BANK 5A ########## set_location_assignment PIN_T19 -to ufl_clock_oe set_location_assignment PIN_T18 -to adf_ce set_location_assignment PIN_T17 -to c5_clock2_oe set_location_assignment PIN_T22 -to si_clock_sel set_location_assignment PIN_P16 -to fx3_uart_cts set_location_assignment PIN_P18 -to fx3_uart_rxd set_location_assignment PIN_P17 -to fx3_uart_txd set_location_assignment PIN_T20 -to exp_clock_oe set_location_assignment PIN_P19 -to pwr_sda set_location_assignment PIN_P22 -to pwr_scl set_location_assignment PIN_T15 -to adf_muxout set_location_assignment PIN_R15 -to adf_sclk set_location_assignment PIN_R17 -to adf_sdi set_location_assignment PIN_R16 -to adf_csn set_location_assignment PIN_R22 -to rx_bias_en set_location_assignment PIN_R21 -to tx_bias_en # Bank voltage set_global_assignment -name IOBANK_VCCIO "3.3V" -section_id "5A" # Single-ended output constraints set outs { adf_sclk adf_sdi adf_csn fx3_uart_cts fx3_uart_rxd adf_ce exp_clock_oe ufl_clock_oe c5_clock2_oe si_clock_sel pwr_scl rx_bias_en tx_bias_en } foreach pin ${outs} { set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to ${pin} set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to ${pin} set_instance_assignment -name SLEW_RATE 1 -to ${pin} } # Single-ended inout constraints set inouts { pwr_sda } foreach pin ${inouts} { set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to ${pin} set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to ${pin} set_instance_assignment -name SLEW_RATE 1 -to ${pin} } # Single-ended input constraints set ins { fx3_uart_txd adf_muxout } foreach pin ${ins} { set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to ${pin} } set_instance_assignment -name WEAK_PULL_UP_RESISTOR "ON" -to adf_muxout set_instance_assignment -name WEAK_PULL_UP_RESISTOR "ON" -to fx3_uart_rxd ########## # BANK 7A & 8A ########## # Bank 7A set_location_assignment PIN_K20 -to led[3] set_location_assignment PIN_B16 -to led[2] set_location_assignment PIN_K19 -to led[1] set_location_assignment PIN_G15 -to exp_present set_location_assignment PIN_B15 -to exp_i2c_scl set_location_assignment PIN_F14 -to exp_i2c_sda set_location_assignment PIN_H13 -to c5_clock2 set_location_assignment PIN_A12 -to dac_sclk set_location_assignment PIN_H11 -to dac_sdi set_location_assignment PIN_G12 -to dac_csn set_location_assignment PIN_D12 -to exp_clock_req set_location_assignment PIN_H16 -to mini_exp1 set_location_assignment PIN_H15 -to mini_exp2 set_location_assignment PIN_E12 -to hw_rev[0] set_location_assignment PIN_E15 -to hw_rev[1] set_location_assignment PIN_C11 -to ps_sync_1p1 set_location_assignment PIN_C13 -to ps_sync_1p8 # Bank 8A set_location_assignment PIN_G10 -to exp_gpio[15] set_location_assignment PIN_L7 -to exp_gpio[17] set_location_assignment PIN_F10 -to exp_gpio[14] set_location_assignment PIN_K7 -to exp_gpio[16] set_location_assignment PIN_J7 -to exp_gpio[1] set_location_assignment PIN_H8 -to exp_gpio[31] set_location_assignment PIN_J8 -to exp_gpio[0] set_location_assignment PIN_G8 -to exp_gpio[30] set_location_assignment PIN_J9 -to exp_gpio[3] set_location_assignment PIN_A10 -to exp_gpio[19] set_location_assignment PIN_H9 -to exp_gpio[2] set_location_assignment PIN_A9 -to exp_gpio[18] set_location_assignment PIN_B10 -to exp_gpio[5] set_location_assignment PIN_A5 -to exp_gpio[21] set_location_assignment PIN_C9 -to exp_gpio[4] set_location_assignment PIN_B5 -to exp_gpio[20] set_location_assignment PIN_E10 -to exp_gpio[7] set_location_assignment PIN_B6 -to exp_gpio[23] set_location_assignment PIN_F9 -to exp_gpio[6] set_location_assignment PIN_B7 -to exp_gpio[22] set_location_assignment PIN_A8 -to exp_gpio[9] set_location_assignment PIN_C6 -to exp_gpio[25] set_location_assignment PIN_A7 -to exp_gpio[8] set_location_assignment PIN_D6 -to exp_gpio[24] set_location_assignment PIN_E9 -to exp_gpio[11] set_location_assignment PIN_D7 -to exp_gpio[27] set_location_assignment PIN_D9 -to exp_gpio[10] set_location_assignment PIN_C8 -to exp_gpio[26] set_location_assignment PIN_G6 -to exp_gpio[13] set_location_assignment PIN_F7 -to exp_gpio[29] set_location_assignment PIN_H6 -to exp_gpio[12] set_location_assignment PIN_E7 -to exp_gpio[28] # Bank Voltage set_global_assignment -name IOBANK_VCCIO "3.3V" -section_id "7A" set_global_assignment -name IOBANK_VCCIO "3.3V" -section_id "8A" # Single-ended output constraints set outs { dac_sclk dac_sdi dac_csn ps_sync_1p1 ps_sync_1p8 } for { set i 1 } { $i < 4 } { incr i } { lappend outs "led\[${i}\]" } foreach pin ${outs} { set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to ${pin} if { ${pin} == "exp_clock_out" } { set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to ${pin} set_instance_assignment -name SLEW_RATE 1 -to ${pin} } else { set_instance_assignment -name CURRENT_STRENGTH_NEW "MINIMUM CURRENT" -to ${pin} set_instance_assignment -name SLEW_RATE 0 -to ${pin} } } # Single-ended inout constraints set inouts { exp_i2c_scl exp_i2c_sda mini_exp1 mini_exp2 } for { set i 0 } { $i < 32 } { incr i } { lappend inouts "exp_gpio\[${i}\]" } foreach pin ${inouts} { set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to ${pin} set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to ${pin} set_instance_assignment -name SLEW_RATE 1 -to ${pin} } # Single-ended input constraints set ins { c5_clock2 exp_present exp_clock_req hw_rev[0] hw_rev[1] } foreach pin ${ins} { set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to ${pin} } set_instance_assignment -name WEAK_PULL_UP_RESISTOR "ON" -to hw_rev[0] set_instance_assignment -name WEAK_PULL_UP_RESISTOR "ON" -to hw_rev[1] # JTAG set_instance_assignment -name IO_STANDARD "1.8 V" -to altera_reserved_tck set_instance_assignment -name IO_STANDARD "1.8 V" -to altera_reserved_tdi set_instance_assignment -name IO_STANDARD "1.8 V" -to altera_reserved_tms set_instance_assignment -name IO_STANDARD "1.8 V" -to altera_reserved_tdo set_instance_assignment -name CURRENT_STRENGTH_NEW "Default" -to altera_reserved_tdo set_instance_assignment -name SLEW_RATE 1 -to altera_reserved_tdo # Configuration information set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "PASSIVE PARALLEL X8" set_global_assignment -name USE_CONFIGURATION_DEVICE OFF set_global_assignment -name GENERATE_TTF_FILE ON set_global_assignment -name GENERATE_RBF_FILE ON set_global_assignment -name CRC_ERROR_OPEN_DRAIN OFF set_global_assignment -name FORCE_CONFIGURATION_VCCIO ON set_global_assignment -name CONFIGURATION_VCCIO_LEVEL "1.8V" set_global_assignment -name ON_CHIP_BITSTREAM_DECOMPRESSION OFF set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -rise set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -fall set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -rise set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -fall set_global_assignment -name RESERVE_DATA7_THROUGH_DATA5_AFTER_CONFIGURATION "USE AS REGULAR IO" set_global_assignment -name CVP_CONFDONE_OPEN_DRAIN OFF set_global_assignment -name RESERVE_FLASH_NCE_AFTER_CONFIGURATION "USE AS REGULAR IO" set_global_assignment -name RESERVE_OTHER_AP_PINS_AFTER_CONFIGURATION "USE AS REGULAR IO" set_global_assignment -name CYCLONEII_RESERVE_NCEO_AFTER_CONFIGURATION "USE AS REGULAR IO" set_global_assignment -name RESERVE_DCLK_AFTER_CONFIGURATION "USE AS REGULAR IO" bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/constraints/spi.sdc000066400000000000000000000113351457144405000252320ustar00rootroot00000000000000# bladeRF Micro Design Constraints File for peripheral SPI/I2C interfaces # # Copyright (c) 2017 Nuand LLC # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # References: # * Analog Devices ADF4002 datasheet # * Analog Devices AD5601/AD5611/AD5621 datasheet # * http://www.alterawiki.com/wiki/Constrain_SPI_Core ### Peripheral SPI ### # This bus services the ADF4002 and the AD5621. # Create generated clocks. Input clock to the SPI block in the common_system # is 80 MHz, actual output clock is 8 MHz. Note: the ADF4002 clock is inverted. set peri_sclk_divisor 10 create_generated_clock -name peri_sclk_reg -source [get_pins $system_clock] -divide_by $peri_sclk_divisor [get_registers {*peripheral_spi|SCLK_reg}] create_generated_clock -name adf_sclk_pin -source [get_registers -no_duplicates {*peripheral_spi|SCLK_reg}] -phase 180 [get_ports {adf_sclk}] create_generated_clock -name dac_sclk_pin -source [get_registers -no_duplicates {*peripheral_spi|SCLK_reg}] [get_ports {dac_sclk}] set_max_skew -from [get_clocks {adf_sclk_pin}] -to [get_ports {adf_sclk}] 0.2 set_max_skew -from [get_clocks {dac_sclk_pin}] -to [get_ports {dac_sclk}] 0.2 # Data-in to Clock setup and hold times set adf_spi_data_ts 10.0 set adf_spi_data_th 10.0 # Data-in to Clock setup and hold times set dac_spi_data_ts 5.0 set dac_spi_data_th 4.5 # Enable to Clock setup and hold times set dac_spi_nsync_ts 10.0 set dac_spi_nsync_th 0.0 # Constraints for ADF data/enable (FPGA -> ADF4002) # Max output delay = setup + (data_trace_delay + src_clock_trace_delay) set v [expr {$adf_spi_data_ts + ($adf_spi_data_trace_delay + $adf_spi_clk_trace_delay)}] set_output_delay -clock [get_clocks adf_sclk_pin] -max $v [get_ports {adf_sdi}] set v [expr {$adf_spi_data_ts + ($adf_spi_le_trace_delay + $adf_spi_clk_trace_delay)}] set_output_delay -clock [get_clocks adf_sclk_pin] -max $v [get_ports {adf_csn}] # Min output delay = -1 * hold + (data_trace_delay + src_clock_trace_delay) set v [expr {(-1 * $adf_spi_data_th) + ($adf_spi_data_trace_delay + $adf_spi_clk_trace_delay)}] set_output_delay -clock [get_clocks adf_sclk_pin] -min $v [get_ports {adf_sdi}] set v [expr {(-1 * $adf_spi_data_th) + ($adf_spi_le_trace_delay + $adf_spi_clk_trace_delay)}] set_output_delay -clock [get_clocks adf_sclk_pin] -min $v [get_ports {adf_csn}] # Multicycle constraints set_multicycle_path -setup -start -from [get_clocks $system_clock] -to [get_clocks {adf_sclk_pin}] [expr {$peri_sclk_divisor / 2}] set_multicycle_path -hold -start -from [get_clocks $system_clock] -to [get_clocks {adf_sclk_pin}] [expr {$peri_sclk_divisor - 1}] # Constraints for DAC data/enable (FPGA -> AD5621) # Max output delay = setup + (data_trace_delay + src_clock_trace_delay) set v [expr {$dac_spi_data_ts + ($dac_spi_sdin_trace_delay + $dac_spi_sclk_trace_delay)}] set_output_delay -clock [get_clocks dac_sclk_pin] -max $v [get_ports {dac_sdi}] set v [expr {$dac_spi_nsync_ts + ($dac_spi_nsync_trace_delay + $dac_spi_sclk_trace_delay)}] set_output_delay -clock [get_clocks dac_sclk_pin] -max $v [get_ports {dac_csn}] # Min output delay = -1 * hold + (data_trace_delay + src_clock_trace_delay) set v [expr {(-1 * $dac_spi_data_th) + ($dac_spi_sdin_trace_delay + $dac_spi_sclk_trace_delay)}] set_output_delay -clock [get_clocks dac_sclk_pin] -min $v [get_ports {dac_sdi}] set v [expr {(-1 * $dac_spi_nsync_th) + ($dac_spi_nsync_trace_delay + $dac_spi_sclk_trace_delay)}] set_output_delay -clock [get_clocks dac_sclk_pin] -min $v [get_ports {dac_csn}] # Multicycle constraints set_multicycle_path -setup -start -from [get_clocks $system_clock] -to [get_clocks {dac_sclk_pin}] [expr {$peri_sclk_divisor / 2}] set_multicycle_path -hold -start -from [get_clocks $system_clock] -to [get_clocks {dac_sclk_pin}] [expr {$peri_sclk_divisor - 1}] bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/modelsim/000077500000000000000000000000001457144405000232035ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/modelsim/compile.do000066400000000000000000000011521457144405000251560ustar00rootroot00000000000000source ../../../ip/nuand/nuand.do compile_nuand ../../../ip/nuand bladerf-micro vcom -work nuand -2008 ../vhdl/tb/nios_system.vhd vcom -work nuand -2008 ../../../platforms/common/bladerf/vhdl/fx3_gpif.vhd vcom -work nuand -2008 ../vhdl/bladerf_p.vhd vcom -work nuand -2008 ../vhdl/bladerf.vhd vcom -work nuand -2008 ../vhdl/rx.vhd vcom -work nuand -2008 ../vhdl/tx.vhd vcom -work nuand -2008 ../vhdl/bladerf-hosted.vhd vcom -work nuand -2008 ../vhdl/tb/fx3_pll.vhd vcom -work nuand -2008 ../vhdl/tb/system_pll.vhd vcom -work nuand -2008 ../vhdl/tb/bladerf_tb.vhd compile_nuand_tb ../../../ip/nuand bladerf-micro bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/modelsim/fx3_gpif_iq_8bit_tb.do000066400000000000000000000005311457144405000273370ustar00rootroot00000000000000source ../../../ip/nuand/nuand.do vcom -work nuand -2008 ../vhdl/rx.vhd vcom -work nuand -2008 ../vhdl/tx.vhd vlib rtl_work vcom -work rtl_work -2008 ../../../ip/altera/fx3_pll/fx3_pll.vhd compile_nuand ../../../ip/nuand bladerf-micro vcom -work nuand -2008 ../vhdl/tb/fx3_model.vhd vcom -work nuand -2008 ../vhdl/tb/fx3_gpif_iq_8bit_tb.vhd bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/modelsim/fx3_gpif_iq_tb.do000066400000000000000000000005241457144405000264130ustar00rootroot00000000000000source ../../../ip/nuand/nuand.do vcom -work nuand -2008 ../vhdl/rx.vhd vcom -work nuand -2008 ../vhdl/tx.vhd vlib rtl_work vcom -work rtl_work -2008 ../../../ip/altera/fx3_pll/fx3_pll.vhd compile_nuand ../../../ip/nuand bladerf-micro vcom -work nuand -2008 ../vhdl/tb/fx3_model.vhd vcom -work nuand -2008 ../vhdl/tb/fx3_gpif_iq_tb.vhd bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/modelsim/fx3_gpif_meta_8bit_tb.do000066400000000000000000000005331457144405000276560ustar00rootroot00000000000000source ../../../ip/nuand/nuand.do vcom -work nuand -2008 ../vhdl/rx.vhd vcom -work nuand -2008 ../vhdl/tx.vhd vlib rtl_work vcom -work rtl_work -2008 ../../../ip/altera/fx3_pll/fx3_pll.vhd compile_nuand ../../../ip/nuand bladerf-micro vcom -work nuand -2008 ../vhdl/tb/fx3_model.vhd vcom -work nuand -2008 ../vhdl/tb/fx3_gpif_meta_8bit_tb.vhd bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/modelsim/fx3_gpif_meta_tb.do000066400000000000000000000005261457144405000267320ustar00rootroot00000000000000source ../../../ip/nuand/nuand.do vcom -work nuand -2008 ../vhdl/rx.vhd vcom -work nuand -2008 ../vhdl/tx.vhd vlib rtl_work vcom -work rtl_work -2008 ../../../ip/altera/fx3_pll/fx3_pll.vhd compile_nuand ../../../ip/nuand bladerf-micro vcom -work nuand -2008 ../vhdl/tb/fx3_model.vhd vcom -work nuand -2008 ../vhdl/tb/fx3_gpif_meta_tb.vhd bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/modelsim/fx3_gpif_packet_tb.do000066400000000000000000000005301457144405000272460ustar00rootroot00000000000000source ../../../ip/nuand/nuand.do vcom -work nuand -2008 ../vhdl/rx.vhd vcom -work nuand -2008 ../vhdl/tx.vhd vlib rtl_work vcom -work rtl_work -2008 ../../../ip/altera/fx3_pll/fx3_pll.vhd compile_nuand ../../../ip/nuand bladerf-micro vcom -work nuand -2008 ../vhdl/tb/fx3_model.vhd vcom -work nuand -2008 ../vhdl/tb/fx3_gpif_packet_tb.vhd bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/modelsim/fx3_gpif_tb.do000066400000000000000000000005211457144405000257170ustar00rootroot00000000000000source ../../../ip/nuand/nuand.do vcom -work nuand -2008 ../vhdl/rx.vhd vcom -work nuand -2008 ../vhdl/tx.vhd vlib rtl_work vcom -work rtl_work -2008 ../../../ip/altera/fx3_pll/fx3_pll.vhd compile_nuand ../../../ip/nuand bladerf-micro vcom -work nuand -2008 ../vhdl/tb/fx3_model.vhd vcom -work nuand -2008 ../vhdl/tb/fx3_gpif_tb.vhd bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/modelsim/loopback.do000066400000000000000000000003601457144405000253200ustar00rootroot00000000000000source ../../../ip/nuand/nuand.do vcom -work nuand -2008 ../vhdl/rx.vhd vcom -work nuand -2008 ../vhdl/tx.vhd compile_nuand ../../../ip/nuand bladerf-micro vcom -work nuand -2008 ../vhdl/tb/loopback_tb.vhd vsim -t 1ps nuand.loopback_tb bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/modelsim/rx_counter_8bit_tb.do000066400000000000000000000005301457144405000273300ustar00rootroot00000000000000source ../../../ip/nuand/nuand.do vcom -work nuand -2008 ../vhdl/rx.vhd vcom -work nuand -2008 ../vhdl/tx.vhd vlib rtl_work vcom -work rtl_work -2008 ../../../ip/altera/fx3_pll/fx3_pll.vhd compile_nuand ../../../ip/nuand bladerf-micro vcom -work nuand -2008 ../vhdl/tb/fx3_model.vhd vcom -work nuand -2008 ../vhdl/tb/rx_counter_8bit_tb.vhd bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/modelsim/rx_timestamp_tb.do000066400000000000000000000005251457144405000267320ustar00rootroot00000000000000source ../../../ip/nuand/nuand.do vcom -work nuand -2008 ../vhdl/rx.vhd vcom -work nuand -2008 ../vhdl/tx.vhd vlib rtl_work vcom -work rtl_work -2008 ../../../ip/altera/fx3_pll/fx3_pll.vhd compile_nuand ../../../ip/nuand bladerf-micro vcom -work nuand -2008 ../vhdl/tb/fx3_model.vhd vcom -work nuand -2008 ../vhdl/tb/rx_timestamp_tb.vhd bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/modelsim/test.do000066400000000000000000000057301457144405000245130ustar00rootroot00000000000000################################################################################ # This file is part of the bladeRF project: # http://www.github.com/nuand/bladeRF # Copyright (C) 2023 Nuand LLC # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. ################################################################################ ################################################################################ # Runs testbench simulations or executes "do" files. # Exit Status: The script exits with the status code indicating success (0) or failure (1). ################################################################################ set status 0 if {$argc == 0 || $1 == "-h" || $1 == "--help"} { # If "-h" is passed, print the usage information and exit puts "Usage: do test.do vsim \[testbench parameters\] " puts " do test.do do \[additional_parameters\]" puts "" puts "Arguments:" puts " vsim: Run a testbench simulation." puts " do: Execute a 'do' file with parameters." puts " -h: Print this help message." return } set params "" for {set i 2} {$i <= 9} {incr i} { if {[info exists $i]} { append params [eval set $i] append params " " } } if { $1 == "vsim" } { set testbench [lindex $params 0] set tb_args [lrange $params 1 end-1] set time_us [lindex $params end] set assertion_log log.txt vsim $testbench -assertfile $assertion_log {*}$tb_args; run ${time_us}us; set f [open $assertion_log] set file_content [read $f] close $f if {[catch {exec grep -c Failure << $file_content} result]} { set fail_count 0 } else { set fail_count $result } echo "fail_count:" $fail_count if { $fail_count > 0 } { set status 1 echo "\nSee log.txt for failure\n" } else { exec rm $assertion_log } } else { onerror {set status 1} set do_file $1 do $do_file {*}$params } quit -code $status bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/modelsim/wave_8bit_rx.do000066400000000000000000000650251457144405000261400ustar00rootroot00000000000000onerror {resume} quietly WaveActivateNextPane {} 0 add wave -noupdate -expand -group Focus /fx3_gpif_iq_8bit_tb/U_fx3_gpif/pclk add wave -noupdate -expand -group Focus /fx3_gpif_iq_8bit_tb/U_fx3_gpif/gpif_out add wave -noupdate -expand -group Focus /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/clock add wave -noupdate -expand -group Focus /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/in_sample_controls add wave -noupdate -expand -group Focus -expand -subitemconfig {/fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/in_samples(0) -expand /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/in_samples(1) -expand} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/in_samples add wave -noupdate -expand -group Focus -expand /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/fifo_future add wave -noupdate -expand -group Focus -expand /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/fifo_current add wave -noupdate -expand -group Focus /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/fifo_clear add wave -noupdate -expand -group Focus /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/fifo_data add wave -noupdate -expand -group Focus /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/fifo_write add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/gpif_state_rx add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/gpif_state_tx add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/fx3_tx_meta_en add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/fx3_rx_meta_en add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/fx3_rx_en add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/fx3_uart_rxd add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/fx3_tx_en add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/fx3_ctl add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/fx3_gpif add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/fx3_pclk add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/done add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/gpif_state_rx add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/gpif_state_tx add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/fx3_tx_meta_en add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/fx3_rx_meta_en add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/fx3_rx_en add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/fx3_uart_rxd add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/fx3_tx_en add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/fx3_ctl add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/fx3_gpif add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/fx3_pclk add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/done add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/pclk add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/current add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/ctl_in add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/gpif_in add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/meta_enable add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/packet_enable add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/reset add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_fifo_data add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_fifo_empty add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_fifo_full add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_fifo_usedw add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_meta_fifo_data add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_meta_fifo_empty add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_meta_fifo_full add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_meta_fifo_usedr add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_fifo_empty add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_fifo_full add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_fifo_usedw add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_meta_fifo_empty add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_meta_fifo_full add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_meta_fifo_usedw add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_timestamp add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/usb_speed add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/ctl_oe add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/ctl_out add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/gpif_oe add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/gpif_out add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_enable add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_fifo_read add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_meta_fifo_read add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_enable add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_fifo_data add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_fifo_write add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_meta_fifo_data add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_meta_fifo_write add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/pclk add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/current add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/ctl_in add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/gpif_in add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/meta_enable add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/packet_enable add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/reset add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_fifo_data add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_fifo_empty add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_fifo_full add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_fifo_usedw add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_meta_fifo_data add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_meta_fifo_empty add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_meta_fifo_full add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_meta_fifo_usedr add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_fifo_empty add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_fifo_full add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_fifo_usedw add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_meta_fifo_empty add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_meta_fifo_full add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_meta_fifo_usedw add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_timestamp add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/usb_speed add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/ctl_oe add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/ctl_out add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/gpif_oe add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/gpif_out add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_enable add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_fifo_read add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_meta_fifo_read add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_enable add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_fifo_data add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_fifo_write add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_meta_fifo_data add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_meta_fifo_write add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/clock add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/eight_bit_mode_en add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/enable add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/fifo_data add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/fifo_future add wave -noupdate -group {fifo reader} -expand /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/fifo_current add wave -noupdate -group {fifo reader} -expand -subitemconfig {/fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/in_sample_controls(0) -expand /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/in_sample_controls(1) -expand} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/in_sample_controls add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/FIFO_DATA_WIDTH add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/fifo_empty add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/fifo_holdoff add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/FIFO_READ_THROTTLE add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/fifo_usedw add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/FIFO_USEDW_WIDTH add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/meta_en add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/meta_fifo_data add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/META_FIFO_DATA_WIDTH add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/meta_fifo_empty add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/meta_fifo_usedw add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/META_FIFO_USEDW_WIDTH add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/NUM_STREAMS add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/packet_en add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/packet_ready add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/reset add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/timestamp add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/underflow_duration add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/usb_speed add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/fifo_read add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/meta_fifo_read add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/out_samples add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/packet_control add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/packet_empty add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/underflow_count add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/underflow_led add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/dma_buf_size add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/DMA_BUF_SIZE_HS add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/DMA_BUF_SIZE_SS add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/FIFO_FSM_RESET_VALUE add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/meta_current add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/META_FSM_RESET_VALUE add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/meta_future add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/underflow_detected add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/clock add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/eight_bit_mode_en add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/enable add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/fifo_data add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/fifo_future add wave -noupdate -group {fifo reader} -expand /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/fifo_current add wave -noupdate -group {fifo reader} -expand -subitemconfig {/fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/in_sample_controls(0) -expand /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/in_sample_controls(1) -expand} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/in_sample_controls add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/FIFO_DATA_WIDTH add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/fifo_empty add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/fifo_holdoff add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/FIFO_READ_THROTTLE add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/fifo_usedw add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/FIFO_USEDW_WIDTH add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/meta_en add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/meta_fifo_data add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/META_FIFO_DATA_WIDTH add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/meta_fifo_empty add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/meta_fifo_usedw add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/META_FIFO_USEDW_WIDTH add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/NUM_STREAMS add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/packet_en add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/packet_ready add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/reset add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/timestamp add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/underflow_duration add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/usb_speed add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/fifo_read add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/meta_fifo_read add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/out_samples add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/packet_control add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/packet_empty add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/underflow_count add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/underflow_led add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/dma_buf_size add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/DMA_BUF_SIZE_HS add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/DMA_BUF_SIZE_SS add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/FIFO_FSM_RESET_VALUE add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/meta_current add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/META_FSM_RESET_VALUE add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/meta_future add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/underflow_detected add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/rdclk add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/rdreq add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/q add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/ADD_RAM_OUTPUT_REGISTER add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/ADD_USEDW_MSB_BIT add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/CLOCKS_ARE_SYNCHRONIZED add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/DELAY_RDUSEDW add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/DELAY_WRUSEDW add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/INTENDED_DEVICE_FAMILY add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/LPM_NUMWORDS add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/LPM_SHOWAHEAD add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/LPM_WIDTH add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/LPM_WIDTH_R add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/OVERFLOW_CHECKING add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/RDSYNC_DELAYPIPE add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/READ_ACLR_SYNCH add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/UNDERFLOW_CHECKING add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/USE_EAB add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/WRITE_ACLR_SYNCH add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/WRSYNC_DELAYPIPE add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/aclr add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/data add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/wrclk add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/wrreq add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/rdempty add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/rdfull add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/rdusedw add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/wrempty add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/wrfull add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/wrusedw add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/rdclk add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/rdreq add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/q add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/ADD_RAM_OUTPUT_REGISTER add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/ADD_USEDW_MSB_BIT add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/CLOCKS_ARE_SYNCHRONIZED add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/DELAY_RDUSEDW add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/DELAY_WRUSEDW add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/INTENDED_DEVICE_FAMILY add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/LPM_NUMWORDS add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/LPM_SHOWAHEAD add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/LPM_WIDTH add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/LPM_WIDTH_R add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/OVERFLOW_CHECKING add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/RDSYNC_DELAYPIPE add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/READ_ACLR_SYNCH add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/UNDERFLOW_CHECKING add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/USE_EAB add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/WRITE_ACLR_SYNCH add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/WRSYNC_DELAYPIPE add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/aclr add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/data add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/wrclk add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/wrreq add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/rdempty add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/rdfull add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/rdusedw add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/wrempty add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/wrfull add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/wrusedw add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/clock add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/eight_bit_mode_en add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/enable add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/FIFO_DATA_WIDTH add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/fifo_full add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/fifo_usedw add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/FIFO_USEDW_WIDTH add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/in_sample_controls add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/in_samples add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/meta_en add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/META_FIFO_DATA_WIDTH add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/meta_fifo_full add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/meta_fifo_usedw add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/META_FIFO_USEDW_WIDTH add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/mini_exp add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/NUM_STREAMS add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/overflow_duration add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/packet_control add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/packet_en add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/reset add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/timestamp add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/usb_speed add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/fifo_clear add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/fifo_data add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/fifo_write add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/meta_fifo_data add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/meta_fifo_write add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/overflow_count add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/overflow_led add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/packet_ready add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/dma_buf_size add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/DMA_BUF_SIZE_HS add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/DMA_BUF_SIZE_SS add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/fifo_current add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/fifo_enough add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/FIFO_FSM_RESET_VALUE add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/fifo_future add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/meta_current add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/META_FSM_RESET_VALUE add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/meta_future add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/overflow_detected add wave -noupdate -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/sync_mini_exp TreeUpdate [SetDefaultTree] WaveRestoreCursors {{gpif failure point} {269669500 ps} 1} {Turnover {57111568 ps} 1} {{Cursor 11} {270019500 ps} 0} quietly wave cursor active 3 configure wave -namecolwidth 165 configure wave -valuecolwidth 106 configure wave -justifyvalue left configure wave -signalnamewidth 1 configure wave -snapdistance 10 configure wave -datasetprefix 0 configure wave -rowmargin 4 configure wave -childrowmargin 2 configure wave -gridoffset 0 configure wave -gridperiod 1 configure wave -griddelta 40 configure wave -timeline 0 configure wave -timelineunits us update WaveRestoreZoom {263533733 ps} {272445593 ps} bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/modelsim/wave_8bit_rx_meta.do000066400000000000000000000661351457144405000271510ustar00rootroot00000000000000onerror {resume} quietly WaveActivateNextPane {} 0 add wave -noupdate -expand -group Focus /fx3_gpif_meta_8bit_tb/U_fx3_gpif/pclk add wave -noupdate -expand -group Focus /fx3_gpif_meta_8bit_tb/U_fx3_gpif/gpif_out add wave -noupdate -expand -group Focus /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/clock add wave -noupdate -expand -group Focus /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/in_sample_controls add wave -noupdate -expand -group Focus -expand -subitemconfig {/fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/in_samples(0) -expand /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/in_samples(1) -expand} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/in_samples add wave -noupdate -expand -group Focus -expand /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/fifo_future add wave -noupdate -expand -group Focus -expand /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/fifo_current add wave -noupdate -expand -group Focus /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/fifo_clear add wave -noupdate -expand -group Focus /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/fifo_data add wave -noupdate -expand -group Focus /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/fifo_write add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/gpif_state_rx add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/gpif_state_tx add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/fx3_tx_meta_en add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/fx3_rx_meta_en add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/fx3_rx_en add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/fx3_uart_rxd add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/fx3_tx_en add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/fx3_ctl add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/fx3_gpif add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/fx3_pclk add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/done add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/gpif_state_rx add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/gpif_state_tx add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/fx3_tx_meta_en add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/fx3_rx_meta_en add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/fx3_rx_en add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/fx3_uart_rxd add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/fx3_tx_en add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/fx3_ctl add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/fx3_gpif add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/fx3_pclk add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/done add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/pclk add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/current add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/ctl_in add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/gpif_in add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/meta_enable add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/packet_enable add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/reset add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_fifo_data add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_fifo_empty add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_fifo_full add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_fifo_usedw add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_meta_fifo_data add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_meta_fifo_empty add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_meta_fifo_full add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_meta_fifo_usedr add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_fifo_empty add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_fifo_full add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_fifo_usedw add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_meta_fifo_empty add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_meta_fifo_full add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_meta_fifo_usedw add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_timestamp add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/usb_speed add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/ctl_oe add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/ctl_out add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/gpif_oe add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/gpif_out add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_enable add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_fifo_read add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_meta_fifo_read add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_enable add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_fifo_data add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_fifo_write add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_meta_fifo_data add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_meta_fifo_write add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/pclk add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/current add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/ctl_in add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/gpif_in add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/meta_enable add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/packet_enable add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/reset add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_fifo_data add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_fifo_empty add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_fifo_full add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_fifo_usedw add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_meta_fifo_data add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_meta_fifo_empty add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_meta_fifo_full add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_meta_fifo_usedr add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_fifo_empty add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_fifo_full add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_fifo_usedw add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_meta_fifo_empty add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_meta_fifo_full add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_meta_fifo_usedw add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_timestamp add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/usb_speed add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/ctl_oe add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/ctl_out add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/gpif_oe add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/gpif_out add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_enable add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_fifo_read add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_meta_fifo_read add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_enable add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_fifo_data add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_fifo_write add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_meta_fifo_data add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_meta_fifo_write add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/clock add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/eight_bit_mode_en add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/enable add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/fifo_data add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/fifo_future add wave -noupdate -group {fifo reader} -expand /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/fifo_current add wave -noupdate -group {fifo reader} -expand -subitemconfig {/fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/in_sample_controls(0) -expand /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/in_sample_controls(1) -expand} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/in_sample_controls add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/FIFO_DATA_WIDTH add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/fifo_empty add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/fifo_holdoff add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/FIFO_READ_THROTTLE add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/fifo_usedw add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/FIFO_USEDW_WIDTH add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/meta_en add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/meta_fifo_data add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/META_FIFO_DATA_WIDTH add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/meta_fifo_empty add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/meta_fifo_usedw add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/META_FIFO_USEDW_WIDTH add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/NUM_STREAMS add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/packet_en add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/packet_ready add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/reset add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/timestamp add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/underflow_duration add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/usb_speed add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/fifo_read add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/meta_fifo_read add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/out_samples add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/packet_control add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/packet_empty add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/underflow_count add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/underflow_led add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/dma_buf_size add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/DMA_BUF_SIZE_HS add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/DMA_BUF_SIZE_SS add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/FIFO_FSM_RESET_VALUE add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/meta_current add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/META_FSM_RESET_VALUE add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/meta_future add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/underflow_detected add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/clock add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/eight_bit_mode_en add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/enable add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/fifo_data add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/fifo_future add wave -noupdate -group {fifo reader} -expand /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/fifo_current add wave -noupdate -group {fifo reader} -expand -subitemconfig {/fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/in_sample_controls(0) -expand /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/in_sample_controls(1) -expand} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/in_sample_controls add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/FIFO_DATA_WIDTH add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/fifo_empty add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/fifo_holdoff add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/FIFO_READ_THROTTLE add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/fifo_usedw add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/FIFO_USEDW_WIDTH add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/meta_en add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/meta_fifo_data add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/META_FIFO_DATA_WIDTH add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/meta_fifo_empty add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/meta_fifo_usedw add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/META_FIFO_USEDW_WIDTH add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/NUM_STREAMS add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/packet_en add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/packet_ready add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/reset add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/timestamp add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/underflow_duration add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/usb_speed add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/fifo_read add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/meta_fifo_read add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/out_samples add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/packet_control add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/packet_empty add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/underflow_count add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/underflow_led add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/dma_buf_size add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/DMA_BUF_SIZE_HS add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/DMA_BUF_SIZE_SS add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/FIFO_FSM_RESET_VALUE add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/meta_current add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/META_FSM_RESET_VALUE add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/meta_future add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/underflow_detected add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/rdclk add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/rdreq add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/q add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/ADD_RAM_OUTPUT_REGISTER add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/ADD_USEDW_MSB_BIT add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/CLOCKS_ARE_SYNCHRONIZED add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/DELAY_RDUSEDW add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/DELAY_WRUSEDW add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/INTENDED_DEVICE_FAMILY add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/LPM_NUMWORDS add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/LPM_SHOWAHEAD add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/LPM_WIDTH add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/LPM_WIDTH_R add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/OVERFLOW_CHECKING add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/RDSYNC_DELAYPIPE add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/READ_ACLR_SYNCH add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/UNDERFLOW_CHECKING add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/USE_EAB add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/WRITE_ACLR_SYNCH add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/WRSYNC_DELAYPIPE add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/aclr add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/data add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/wrclk add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/wrreq add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/rdempty add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/rdfull add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/rdusedw add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/wrempty add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/wrfull add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/wrusedw add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/rdclk add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/rdreq add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/q add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/ADD_RAM_OUTPUT_REGISTER add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/ADD_USEDW_MSB_BIT add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/CLOCKS_ARE_SYNCHRONIZED add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/DELAY_RDUSEDW add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/DELAY_WRUSEDW add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/INTENDED_DEVICE_FAMILY add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/LPM_NUMWORDS add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/LPM_SHOWAHEAD add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/LPM_WIDTH add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/LPM_WIDTH_R add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/OVERFLOW_CHECKING add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/RDSYNC_DELAYPIPE add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/READ_ACLR_SYNCH add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/UNDERFLOW_CHECKING add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/USE_EAB add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/WRITE_ACLR_SYNCH add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/WRSYNC_DELAYPIPE add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/aclr add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/data add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/wrclk add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/wrreq add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/rdempty add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/rdfull add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/rdusedw add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/wrempty add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/wrfull add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/wrusedw add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/clock add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/eight_bit_mode_en add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/enable add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/FIFO_DATA_WIDTH add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/fifo_full add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/fifo_usedw add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/FIFO_USEDW_WIDTH add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/in_sample_controls add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/in_samples add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/meta_en add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/META_FIFO_DATA_WIDTH add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/meta_fifo_full add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/meta_fifo_usedw add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/META_FIFO_USEDW_WIDTH add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/mini_exp add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/NUM_STREAMS add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/overflow_duration add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/packet_control add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/packet_en add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/reset add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/timestamp add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/usb_speed add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/fifo_clear add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/fifo_data add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/fifo_write add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/meta_fifo_data add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/meta_fifo_write add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/overflow_count add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/overflow_led add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/packet_ready add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/dma_buf_size add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/DMA_BUF_SIZE_HS add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/DMA_BUF_SIZE_SS add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/fifo_current add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/fifo_enough add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/FIFO_FSM_RESET_VALUE add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/fifo_future add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/meta_current add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/META_FSM_RESET_VALUE add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/meta_future add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/overflow_detected add wave -noupdate -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/sync_mini_exp TreeUpdate [SetDefaultTree] WaveRestoreCursors {{gpif failure point} {269669500 ps} 1} {Turnover {57111568 ps} 1} {{Cursor 11} {270019500 ps} 0} quietly wave cursor active 3 configure wave -namecolwidth 165 configure wave -valuecolwidth 106 configure wave -justifyvalue left configure wave -signalnamewidth 1 configure wave -snapdistance 10 configure wave -datasetprefix 0 configure wave -rowmargin 4 configure wave -childrowmargin 2 configure wave -gridoffset 0 configure wave -gridperiod 1 configure wave -griddelta 40 configure wave -timeline 0 configure wave -timelineunits us update WaveRestoreZoom {263533733 ps} {272445593 ps} bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/modelsim/wave_8bit_tx.do000066400000000000000000000765441457144405000261520ustar00rootroot00000000000000onerror {resume} quietly WaveActivateNextPane {} 0 add wave -noupdate -expand -group Focus /fx3_gpif_iq_8bit_tb/U_fx3_gpif/pclk add wave -noupdate -expand -group Focus /fx3_gpif_iq_8bit_tb/U_fx3_gpif/gpif_in add wave -noupdate -expand -group Focus /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/clock add wave -noupdate -expand -group Focus /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/fifo_read add wave -noupdate -expand -group Focus /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/fifo_current.eight_bit_sample_sel add wave -noupdate -expand -group Focus -label out_samples /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/fifo_future.out_samples add wave -noupdate -expand -group Focus /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/out_samples add wave -noupdate -expand -group Focus /fx3_gpif_iq_8bit_tb/U_fx3_gpif/pclk add wave -noupdate -expand -group Focus /fx3_gpif_iq_8bit_tb/U_fx3_gpif/gpif_in add wave -noupdate -expand -group Focus /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/clock add wave -noupdate -expand -group Focus /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/fifo_read add wave -noupdate -expand -group Focus /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/fifo_current.eight_bit_sample_sel add wave -noupdate -expand -group Focus -label out_samples -expand -subitemconfig {/fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/fifo_future.out_samples(0) -expand /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/fifo_future.out_samples(1) -expand} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/fifo_future.out_samples add wave -noupdate -expand -group Focus /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/out_samples add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/gpif_state_rx add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/gpif_state_tx add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/fx3_tx_meta_en add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/fx3_rx_meta_en add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/fx3_rx_en add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/fx3_uart_rxd add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/fx3_tx_en add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/fx3_ctl add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/fx3_gpif add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/fx3_pclk add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/done add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/gpif_state_rx add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/gpif_state_tx add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/fx3_tx_meta_en add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/fx3_rx_meta_en add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/fx3_rx_en add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/fx3_uart_rxd add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/fx3_tx_en add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/fx3_ctl add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/fx3_gpif add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/fx3_pclk add wave -noupdate -group {fx3 model} /fx3_gpif_iq_8bit_tb/U_fx3_model/done add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/pclk add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/current add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/ctl_in add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/gpif_in add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/meta_enable add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/packet_enable add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/reset add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_fifo_data add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_fifo_empty add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_fifo_full add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_fifo_usedw add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_meta_fifo_data add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_meta_fifo_empty add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_meta_fifo_full add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_meta_fifo_usedr add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_fifo_empty add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_fifo_full add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_fifo_usedw add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_meta_fifo_empty add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_meta_fifo_full add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_meta_fifo_usedw add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_timestamp add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/usb_speed add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/ctl_oe add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/ctl_out add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/gpif_oe add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/gpif_out add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_enable add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_fifo_read add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_meta_fifo_read add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_enable add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_fifo_data add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_fifo_write add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_meta_fifo_data add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_meta_fifo_write add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/pclk add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/current add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/ctl_in add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/gpif_in add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/meta_enable add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/packet_enable add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/reset add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_fifo_data add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_fifo_empty add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_fifo_full add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_fifo_usedw add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_meta_fifo_data add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_meta_fifo_empty add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_meta_fifo_full add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_meta_fifo_usedr add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_fifo_empty add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_fifo_full add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_fifo_usedw add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_meta_fifo_empty add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_meta_fifo_full add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_meta_fifo_usedw add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_timestamp add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/usb_speed add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/ctl_oe add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/ctl_out add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/gpif_oe add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/gpif_out add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_enable add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_fifo_read add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/rx_meta_fifo_read add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_enable add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_fifo_data add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_fifo_write add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_meta_fifo_data add wave -noupdate -group {fx3 gpif} /fx3_gpif_iq_8bit_tb/U_fx3_gpif/tx_meta_fifo_write add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/clock add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/enable add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/FIFO_DATA_WIDTH add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/fifo_full add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/fifo_usedw add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/FIFO_USEDW_WIDTH add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/in_sample_controls add wave -noupdate -expand -group {fifo writer} -subitemconfig {/fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/in_samples(0) -expand /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/in_samples(1) -expand} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/in_samples add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/meta_en add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/META_FIFO_DATA_WIDTH add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/meta_fifo_full add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/meta_fifo_usedw add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/META_FIFO_USEDW_WIDTH add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/mini_exp add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/NUM_STREAMS add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/overflow_duration add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/packet_control add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/packet_en add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/reset add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/timestamp add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/usb_speed add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/fifo_clear add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/fifo_data add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/fifo_write add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/meta_fifo_data add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/meta_fifo_write add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/overflow_count add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/overflow_led add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/packet_ready add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/dma_buf_size add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/DMA_BUF_SIZE_HS add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/DMA_BUF_SIZE_SS add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/fifo_current add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/fifo_enough add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/FIFO_FSM_RESET_VALUE add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/fifo_future add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/meta_current add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/META_FSM_RESET_VALUE add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/meta_future add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/overflow_detected add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/sync_mini_exp add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/clock add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/enable add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/FIFO_DATA_WIDTH add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/fifo_full add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/fifo_usedw add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/FIFO_USEDW_WIDTH add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/in_sample_controls add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/in_samples add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/meta_en add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/META_FIFO_DATA_WIDTH add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/meta_fifo_full add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/meta_fifo_usedw add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/META_FIFO_USEDW_WIDTH add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/mini_exp add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/NUM_STREAMS add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/overflow_duration add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/packet_control add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/packet_en add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/reset add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/timestamp add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/usb_speed add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/fifo_clear add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/fifo_data add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/fifo_write add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/meta_fifo_data add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/meta_fifo_write add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/overflow_count add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/overflow_led add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/packet_ready add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/dma_buf_size add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/DMA_BUF_SIZE_HS add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/DMA_BUF_SIZE_SS add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/fifo_current add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/fifo_enough add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/FIFO_FSM_RESET_VALUE add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/fifo_future add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/meta_current add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/META_FSM_RESET_VALUE add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/meta_future add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/overflow_detected add wave -noupdate -expand -group {fifo writer} /fx3_gpif_iq_8bit_tb/U_rx/U_fifo_writer/sync_mini_exp add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/clock add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/eight_bit_mode_en add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/enable add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/fifo_data add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/fifo_future add wave -noupdate -group {fifo reader} -expand /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/fifo_current add wave -noupdate -group {fifo reader} -expand -subitemconfig {/fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/in_sample_controls(0) -expand /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/in_sample_controls(1) -expand} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/in_sample_controls add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/FIFO_DATA_WIDTH add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/fifo_empty add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/fifo_holdoff add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/FIFO_READ_THROTTLE add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/fifo_usedw add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/FIFO_USEDW_WIDTH add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/meta_en add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/meta_fifo_data add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/META_FIFO_DATA_WIDTH add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/meta_fifo_empty add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/meta_fifo_usedw add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/META_FIFO_USEDW_WIDTH add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/NUM_STREAMS add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/packet_en add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/packet_ready add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/reset add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/timestamp add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/underflow_duration add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/usb_speed add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/fifo_read add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/meta_fifo_read add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/out_samples add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/packet_control add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/packet_empty add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/underflow_count add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/underflow_led add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/dma_buf_size add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/DMA_BUF_SIZE_HS add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/DMA_BUF_SIZE_SS add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/FIFO_FSM_RESET_VALUE add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/meta_current add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/META_FSM_RESET_VALUE add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/meta_future add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/underflow_detected add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/clock add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/eight_bit_mode_en add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/enable add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/fifo_data add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/fifo_future add wave -noupdate -group {fifo reader} -expand /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/fifo_current add wave -noupdate -group {fifo reader} -expand -subitemconfig {/fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/in_sample_controls(0) -expand /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/in_sample_controls(1) -expand} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/in_sample_controls add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/FIFO_DATA_WIDTH add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/fifo_empty add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/fifo_holdoff add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/FIFO_READ_THROTTLE add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/fifo_usedw add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/FIFO_USEDW_WIDTH add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/meta_en add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/meta_fifo_data add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/META_FIFO_DATA_WIDTH add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/meta_fifo_empty add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/meta_fifo_usedw add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/META_FIFO_USEDW_WIDTH add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/NUM_STREAMS add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/packet_en add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/packet_ready add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/reset add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/timestamp add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/underflow_duration add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/usb_speed add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/fifo_read add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/meta_fifo_read add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/out_samples add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/packet_control add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/packet_empty add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/underflow_count add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/underflow_led add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/dma_buf_size add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/DMA_BUF_SIZE_HS add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/DMA_BUF_SIZE_SS add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/FIFO_FSM_RESET_VALUE add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/meta_current add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/META_FSM_RESET_VALUE add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/meta_future add wave -noupdate -group {fifo reader} /fx3_gpif_iq_8bit_tb/U_tx/U_fifo_reader/underflow_detected add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/rdclk add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/rdreq add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/q add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/ADD_RAM_OUTPUT_REGISTER add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/ADD_USEDW_MSB_BIT add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/CLOCKS_ARE_SYNCHRONIZED add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/DELAY_RDUSEDW add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/DELAY_WRUSEDW add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/INTENDED_DEVICE_FAMILY add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/LPM_NUMWORDS add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/LPM_SHOWAHEAD add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/LPM_WIDTH add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/LPM_WIDTH_R add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/OVERFLOW_CHECKING add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/RDSYNC_DELAYPIPE add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/READ_ACLR_SYNCH add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/UNDERFLOW_CHECKING add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/USE_EAB add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/WRITE_ACLR_SYNCH add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/WRSYNC_DELAYPIPE add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/aclr add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/data add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/wrclk add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/wrreq add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/rdempty add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/rdfull add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/rdusedw add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/wrempty add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/wrfull add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/wrusedw add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/rdclk add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/rdreq add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/q add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/ADD_RAM_OUTPUT_REGISTER add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/ADD_USEDW_MSB_BIT add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/CLOCKS_ARE_SYNCHRONIZED add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/DELAY_RDUSEDW add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/DELAY_WRUSEDW add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/INTENDED_DEVICE_FAMILY add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/LPM_NUMWORDS add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/LPM_SHOWAHEAD add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/LPM_WIDTH add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/LPM_WIDTH_R add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/OVERFLOW_CHECKING add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/RDSYNC_DELAYPIPE add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/READ_ACLR_SYNCH add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/UNDERFLOW_CHECKING add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/USE_EAB add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/WRITE_ACLR_SYNCH add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/WRSYNC_DELAYPIPE add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/aclr add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/data add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/wrclk add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/wrreq add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/rdempty add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/rdfull add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/rdusedw add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/wrempty add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/wrfull add wave -noupdate -group {tx sample fifo} /fx3_gpif_iq_8bit_tb/U_tx/U_tx_sample_fifo/wrusedw TreeUpdate [SetDefaultTree] WaveRestoreCursors {{Stream fail point} {42333672 ps} 1} {{Cursor 8} {41129500 ps} 0} quietly wave cursor active 2 configure wave -namecolwidth 165 configure wave -valuecolwidth 106 configure wave -justifyvalue left configure wave -signalnamewidth 1 configure wave -snapdistance 10 configure wave -datasetprefix 0 configure wave -rowmargin 4 configure wave -childrowmargin 2 configure wave -gridoffset 0 configure wave -gridperiod 1 configure wave -griddelta 40 configure wave -timeline 0 configure wave -timelineunits us update WaveRestoreZoom {39311955 ps} {45299371 ps} bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/modelsim/wave_8bit_tx_meta.do000066400000000000000000001000101457144405000271300ustar00rootroot00000000000000onerror {resume} quietly WaveActivateNextPane {} 0 add wave -noupdate -expand -group Focus /fx3_gpif_meta_8bit_tb/U_fx3_gpif/pclk add wave -noupdate -expand -group Focus /fx3_gpif_meta_8bit_tb/U_fx3_gpif/gpif_in add wave -noupdate -expand -group Focus /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/clock add wave -noupdate -expand -group Focus /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/fifo_read add wave -noupdate -expand -group Focus /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/fifo_current.eight_bit_sample_sel add wave -noupdate -expand -group Focus -label out_samples /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/fifo_future.out_samples add wave -noupdate -expand -group Focus /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/out_samples add wave -noupdate -expand -group Focus /fx3_gpif_meta_8bit_tb/U_fx3_gpif/pclk add wave -noupdate -expand -group Focus /fx3_gpif_meta_8bit_tb/U_fx3_gpif/gpif_in add wave -noupdate -expand -group Focus /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/clock add wave -noupdate -expand -group Focus /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/fifo_read add wave -noupdate -expand -group Focus /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/fifo_current.eight_bit_sample_sel add wave -noupdate -expand -group Focus -label out_samples -expand -subitemconfig {/fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/fifo_future.out_samples(0) -expand /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/fifo_future.out_samples(1) -expand} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/fifo_future.out_samples add wave -noupdate -expand -group Focus /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/out_samples add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/gpif_state_rx add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/gpif_state_tx add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/fx3_tx_meta_en add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/fx3_rx_meta_en add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/fx3_rx_en add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/fx3_uart_rxd add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/fx3_tx_en add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/fx3_ctl add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/fx3_gpif add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/fx3_pclk add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/done add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/gpif_state_rx add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/gpif_state_tx add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/fx3_tx_meta_en add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/fx3_rx_meta_en add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/fx3_rx_en add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/fx3_uart_rxd add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/fx3_tx_en add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/fx3_ctl add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/fx3_gpif add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/fx3_pclk add wave -noupdate -group {fx3 model} /fx3_gpif_meta_8bit_tb/U_fx3_model/done add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/pclk add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/current add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/ctl_in add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/gpif_in add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/meta_enable add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/packet_enable add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/reset add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_fifo_data add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_fifo_empty add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_fifo_full add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_fifo_usedw add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_meta_fifo_data add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_meta_fifo_empty add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_meta_fifo_full add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_meta_fifo_usedr add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_fifo_empty add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_fifo_full add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_fifo_usedw add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_meta_fifo_empty add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_meta_fifo_full add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_meta_fifo_usedw add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_timestamp add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/usb_speed add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/ctl_oe add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/ctl_out add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/gpif_oe add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/gpif_out add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_enable add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_fifo_read add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_meta_fifo_read add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_enable add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_fifo_data add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_fifo_write add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_meta_fifo_data add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_meta_fifo_write add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/pclk add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/current add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/ctl_in add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/gpif_in add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/meta_enable add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/packet_enable add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/reset add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_fifo_data add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_fifo_empty add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_fifo_full add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_fifo_usedw add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_meta_fifo_data add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_meta_fifo_empty add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_meta_fifo_full add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_meta_fifo_usedr add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_fifo_empty add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_fifo_full add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_fifo_usedw add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_meta_fifo_empty add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_meta_fifo_full add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_meta_fifo_usedw add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_timestamp add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/usb_speed add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/ctl_oe add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/ctl_out add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/gpif_oe add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/gpif_out add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_enable add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_fifo_read add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/rx_meta_fifo_read add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_enable add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_fifo_data add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_fifo_write add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_meta_fifo_data add wave -noupdate -group {fx3 gpif} /fx3_gpif_meta_8bit_tb/U_fx3_gpif/tx_meta_fifo_write add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/clock add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/enable add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/FIFO_DATA_WIDTH add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/fifo_full add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/fifo_usedw add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/FIFO_USEDW_WIDTH add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/in_sample_controls add wave -noupdate -expand -group {fifo writer} -subitemconfig {/fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/in_samples(0) -expand /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/in_samples(1) -expand} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/in_samples add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/meta_en add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/META_FIFO_DATA_WIDTH add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/meta_fifo_full add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/meta_fifo_usedw add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/META_FIFO_USEDW_WIDTH add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/mini_exp add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/NUM_STREAMS add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/overflow_duration add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/packet_control add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/packet_en add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/reset add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/timestamp add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/usb_speed add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/fifo_clear add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/fifo_data add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/fifo_write add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/meta_fifo_data add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/meta_fifo_write add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/overflow_count add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/overflow_led add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/packet_ready add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/dma_buf_size add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/DMA_BUF_SIZE_HS add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/DMA_BUF_SIZE_SS add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/fifo_current add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/fifo_enough add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/FIFO_FSM_RESET_VALUE add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/fifo_future add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/meta_current add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/META_FSM_RESET_VALUE add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/meta_future add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/overflow_detected add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/sync_mini_exp add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/clock add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/enable add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/FIFO_DATA_WIDTH add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/fifo_full add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/fifo_usedw add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/FIFO_USEDW_WIDTH add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/in_sample_controls add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/in_samples add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/meta_en add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/META_FIFO_DATA_WIDTH add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/meta_fifo_full add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/meta_fifo_usedw add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/META_FIFO_USEDW_WIDTH add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/mini_exp add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/NUM_STREAMS add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/overflow_duration add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/packet_control add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/packet_en add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/reset add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/timestamp add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/usb_speed add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/fifo_clear add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/fifo_data add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/fifo_write add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/meta_fifo_data add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/meta_fifo_write add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/overflow_count add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/overflow_led add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/packet_ready add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/dma_buf_size add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/DMA_BUF_SIZE_HS add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/DMA_BUF_SIZE_SS add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/fifo_current add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/fifo_enough add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/FIFO_FSM_RESET_VALUE add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/fifo_future add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/meta_current add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/META_FSM_RESET_VALUE add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/meta_future add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/overflow_detected add wave -noupdate -expand -group {fifo writer} /fx3_gpif_meta_8bit_tb/U_rx/U_fifo_writer/sync_mini_exp add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/clock add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/eight_bit_mode_en add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/enable add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/fifo_data add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/fifo_future add wave -noupdate -group {fifo reader} -expand /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/fifo_current add wave -noupdate -group {fifo reader} -expand -subitemconfig {/fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/in_sample_controls(0) -expand /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/in_sample_controls(1) -expand} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/in_sample_controls add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/FIFO_DATA_WIDTH add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/fifo_empty add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/fifo_holdoff add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/FIFO_READ_THROTTLE add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/fifo_usedw add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/FIFO_USEDW_WIDTH add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/meta_en add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/meta_fifo_data add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/META_FIFO_DATA_WIDTH add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/meta_fifo_empty add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/meta_fifo_usedw add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/META_FIFO_USEDW_WIDTH add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/NUM_STREAMS add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/packet_en add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/packet_ready add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/reset add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/timestamp add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/underflow_duration add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/usb_speed add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/fifo_read add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/meta_fifo_read add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/out_samples add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/packet_control add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/packet_empty add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/underflow_count add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/underflow_led add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/dma_buf_size add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/DMA_BUF_SIZE_HS add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/DMA_BUF_SIZE_SS add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/FIFO_FSM_RESET_VALUE add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/meta_current add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/META_FSM_RESET_VALUE add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/meta_future add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/underflow_detected add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/clock add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/eight_bit_mode_en add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/enable add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/fifo_data add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/fifo_future add wave -noupdate -group {fifo reader} -expand /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/fifo_current add wave -noupdate -group {fifo reader} -expand -subitemconfig {/fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/in_sample_controls(0) -expand /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/in_sample_controls(1) -expand} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/in_sample_controls add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/FIFO_DATA_WIDTH add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/fifo_empty add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/fifo_holdoff add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/FIFO_READ_THROTTLE add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/fifo_usedw add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/FIFO_USEDW_WIDTH add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/meta_en add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/meta_fifo_data add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/META_FIFO_DATA_WIDTH add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/meta_fifo_empty add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/meta_fifo_usedw add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/META_FIFO_USEDW_WIDTH add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/NUM_STREAMS add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/packet_en add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/packet_ready add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/reset add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/timestamp add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/underflow_duration add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/usb_speed add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/fifo_read add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/meta_fifo_read add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/out_samples add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/packet_control add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/packet_empty add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/underflow_count add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/underflow_led add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/dma_buf_size add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/DMA_BUF_SIZE_HS add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/DMA_BUF_SIZE_SS add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/FIFO_FSM_RESET_VALUE add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/meta_current add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/META_FSM_RESET_VALUE add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/meta_future add wave -noupdate -group {fifo reader} /fx3_gpif_meta_8bit_tb/U_tx/U_fifo_reader/underflow_detected add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/rdclk add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/rdreq add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/q add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/ADD_RAM_OUTPUT_REGISTER add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/ADD_USEDW_MSB_BIT add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/CLOCKS_ARE_SYNCHRONIZED add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/DELAY_RDUSEDW add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/DELAY_WRUSEDW add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/INTENDED_DEVICE_FAMILY add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/LPM_NUMWORDS add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/LPM_SHOWAHEAD add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/LPM_WIDTH add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/LPM_WIDTH_R add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/OVERFLOW_CHECKING add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/RDSYNC_DELAYPIPE add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/READ_ACLR_SYNCH add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/UNDERFLOW_CHECKING add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/USE_EAB add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/WRITE_ACLR_SYNCH add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/WRSYNC_DELAYPIPE add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/aclr add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/data add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/wrclk add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/wrreq add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/rdempty add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/rdfull add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/rdusedw add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/wrempty add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/wrfull add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/wrusedw add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/rdclk add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/rdreq add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/q add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/ADD_RAM_OUTPUT_REGISTER add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/ADD_USEDW_MSB_BIT add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/CLOCKS_ARE_SYNCHRONIZED add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/DELAY_RDUSEDW add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/DELAY_WRUSEDW add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/INTENDED_DEVICE_FAMILY add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/LPM_NUMWORDS add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/LPM_SHOWAHEAD add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/LPM_WIDTH add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/LPM_WIDTH_R add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/OVERFLOW_CHECKING add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/RDSYNC_DELAYPIPE add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/READ_ACLR_SYNCH add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/UNDERFLOW_CHECKING add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/USE_EAB add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/WRITE_ACLR_SYNCH add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/WRSYNC_DELAYPIPE add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/aclr add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/data add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/wrclk add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/wrreq add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/rdempty add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/rdfull add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/rdusedw add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/wrempty add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/wrfull add wave -noupdate -group {tx sample fifo} /fx3_gpif_meta_8bit_tb/U_tx/U_tx_sample_fifo/wrusedw TreeUpdate [SetDefaultTree] WaveRestoreCursors {{Stream fail point} {42333672 ps} 1} {{Cursor 8} {41129500 ps} 0} quietly wave cursor active 2 configure wave -namecolwidth 165 configure wave -valuecolwidth 106 configure wave -justifyvalue left configure wave -signalnamewidth 1 configure wave -snapdistance 10 configure wave -datasetprefix 0 configure wave -rowmargin 4 configure wave -childrowmargin 2 configure wave -gridoffset 0 configure wave -gridperiod 1 configure wave -griddelta 40 configure wave -timeline 0 configure wave -timelineunits us update WaveRestoreZoom {39311955 ps} {45299371 ps} bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/modelsim/wave_rx_counter_8bit.do000066400000000000000000000667041457144405000277040ustar00rootroot00000000000000onerror {resume} quietly WaveActivateNextPane {} 0 add wave -noupdate /rx_counter_8bit_tb/U_fx3_gpif/gpif_oe add wave -noupdate /rx_counter_8bit_tb/U_fx3_gpif/gpif_out add wave -noupdate -radix decimal -expand -subitemconfig {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0) {-height 17 -expand} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i {-height 17 -childformat {{/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(15) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(14) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(13) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(12) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(11) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(10) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(9) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(8) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(7) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(6) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(5) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(4) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(3) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(2) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(1) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(0) -radix decimal}}} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(15) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(14) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(13) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(12) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(11) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(10) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(9) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(8) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(7) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(6) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(5) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(4) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(3) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(2) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(1) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(0) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_q {-height 17 -childformat {{/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_q(15) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_q(14) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_q(13) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_q(12) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_q(11) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_q(10) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_q(9) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_q(8) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_q(7) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_q(6) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_q(5) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_q(4) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_q(3) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_q(2) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_q(1) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_q(0) -radix decimal}}} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_q(15) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_q(14) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_q(13) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_q(12) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_q(11) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_q(10) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_q(9) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_q(8) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_q(7) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_q(6) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_q(5) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_q(4) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_q(3) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_q(2) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_q(1) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_q(0) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_v {-height 17} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(1) {-height 17 -expand} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(1).data_i {-height 17} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(1).data_q {-height 17} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(1).data_v {-height 17}} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples add wave -noupdate /rx_counter_8bit_tb/U_rx/U_fifo_writer/fifo_data add wave -noupdate -group {fx3 model} /rx_counter_8bit_tb/U_fx3_model/gpif_state_rx add wave -noupdate -group {fx3 model} /rx_counter_8bit_tb/U_fx3_model/gpif_state_tx add wave -noupdate -group {fx3 model} /rx_counter_8bit_tb/U_fx3_model/fx3_tx_meta_en add wave -noupdate -group {fx3 model} /rx_counter_8bit_tb/U_fx3_model/fx3_rx_meta_en add wave -noupdate -group {fx3 model} /rx_counter_8bit_tb/U_fx3_model/fx3_rx_en add wave -noupdate -group {fx3 model} /rx_counter_8bit_tb/U_fx3_model/fx3_uart_rxd add wave -noupdate -group {fx3 model} /rx_counter_8bit_tb/U_fx3_model/fx3_tx_en add wave -noupdate -group {fx3 model} /rx_counter_8bit_tb/U_fx3_model/fx3_ctl add wave -noupdate -group {fx3 model} /rx_counter_8bit_tb/U_fx3_model/fx3_gpif add wave -noupdate -group {fx3 model} /rx_counter_8bit_tb/U_fx3_model/fx3_pclk add wave -noupdate -group {fx3 model} /rx_counter_8bit_tb/U_fx3_model/done add wave -noupdate -group {fx3 gpif} /rx_counter_8bit_tb/U_fx3_gpif/pclk add wave -noupdate -group {fx3 gpif} /rx_counter_8bit_tb/U_fx3_gpif/current add wave -noupdate -group {fx3 gpif} /rx_counter_8bit_tb/U_fx3_gpif/ctl_in add wave -noupdate -group {fx3 gpif} /rx_counter_8bit_tb/U_fx3_gpif/gpif_in add wave -noupdate -group {fx3 gpif} /rx_counter_8bit_tb/U_fx3_gpif/meta_enable add wave -noupdate -group {fx3 gpif} /rx_counter_8bit_tb/U_fx3_gpif/packet_enable add wave -noupdate -group {fx3 gpif} /rx_counter_8bit_tb/U_fx3_gpif/reset add wave -noupdate -group {fx3 gpif} /rx_counter_8bit_tb/U_fx3_gpif/rx_fifo_data add wave -noupdate -group {fx3 gpif} /rx_counter_8bit_tb/U_fx3_gpif/rx_fifo_empty add wave -noupdate -group {fx3 gpif} /rx_counter_8bit_tb/U_fx3_gpif/rx_fifo_full add wave -noupdate -group {fx3 gpif} /rx_counter_8bit_tb/U_fx3_gpif/rx_fifo_usedw add wave -noupdate -group {fx3 gpif} /rx_counter_8bit_tb/U_fx3_gpif/rx_meta_fifo_data add wave -noupdate -group {fx3 gpif} /rx_counter_8bit_tb/U_fx3_gpif/rx_meta_fifo_empty add wave -noupdate -group {fx3 gpif} /rx_counter_8bit_tb/U_fx3_gpif/rx_meta_fifo_full add wave -noupdate -group {fx3 gpif} /rx_counter_8bit_tb/U_fx3_gpif/rx_meta_fifo_usedr add wave -noupdate -group {fx3 gpif} /rx_counter_8bit_tb/U_fx3_gpif/tx_fifo_empty add wave -noupdate -group {fx3 gpif} /rx_counter_8bit_tb/U_fx3_gpif/tx_fifo_full add wave -noupdate -group {fx3 gpif} /rx_counter_8bit_tb/U_fx3_gpif/tx_fifo_usedw add wave -noupdate -group {fx3 gpif} /rx_counter_8bit_tb/U_fx3_gpif/tx_meta_fifo_empty add wave -noupdate -group {fx3 gpif} /rx_counter_8bit_tb/U_fx3_gpif/tx_meta_fifo_full add wave -noupdate -group {fx3 gpif} /rx_counter_8bit_tb/U_fx3_gpif/tx_meta_fifo_usedw add wave -noupdate -group {fx3 gpif} /rx_counter_8bit_tb/U_fx3_gpif/tx_timestamp add wave -noupdate -group {fx3 gpif} /rx_counter_8bit_tb/U_fx3_gpif/usb_speed add wave -noupdate -group {fx3 gpif} /rx_counter_8bit_tb/U_fx3_gpif/ctl_oe add wave -noupdate -group {fx3 gpif} /rx_counter_8bit_tb/U_fx3_gpif/ctl_out add wave -noupdate -group {fx3 gpif} /rx_counter_8bit_tb/U_fx3_gpif/gpif_oe add wave -noupdate -group {fx3 gpif} /rx_counter_8bit_tb/U_fx3_gpif/gpif_out add wave -noupdate -group {fx3 gpif} /rx_counter_8bit_tb/U_fx3_gpif/rx_enable add wave -noupdate -group {fx3 gpif} /rx_counter_8bit_tb/U_fx3_gpif/rx_fifo_read add wave -noupdate -group {fx3 gpif} /rx_counter_8bit_tb/U_fx3_gpif/rx_meta_fifo_read add wave -noupdate -group {fx3 gpif} /rx_counter_8bit_tb/U_fx3_gpif/tx_enable add wave -noupdate -group {fx3 gpif} /rx_counter_8bit_tb/U_fx3_gpif/tx_fifo_data add wave -noupdate -group {fx3 gpif} /rx_counter_8bit_tb/U_fx3_gpif/tx_fifo_write add wave -noupdate -group {fx3 gpif} /rx_counter_8bit_tb/U_fx3_gpif/tx_meta_fifo_data add wave -noupdate -group {fx3 gpif} /rx_counter_8bit_tb/U_fx3_gpif/tx_meta_fifo_write add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/rdclk add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/rdreq add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/q add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/ADD_RAM_OUTPUT_REGISTER add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/ADD_USEDW_MSB_BIT add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/CLOCKS_ARE_SYNCHRONIZED add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/DELAY_RDUSEDW add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/DELAY_WRUSEDW add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/INTENDED_DEVICE_FAMILY add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/LPM_NUMWORDS add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/LPM_SHOWAHEAD add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/LPM_WIDTH add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/LPM_WIDTH_R add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/OVERFLOW_CHECKING add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/RDSYNC_DELAYPIPE add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/READ_ACLR_SYNCH add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/UNDERFLOW_CHECKING add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/USE_EAB add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/WRITE_ACLR_SYNCH add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/WRSYNC_DELAYPIPE add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/aclr add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/data add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/wrclk add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/wrreq add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/rdempty add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/rdfull add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/rdusedw add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/wrempty add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/wrfull add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/wrusedw add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/rdclk add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/rdreq add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/q add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/ADD_RAM_OUTPUT_REGISTER add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/ADD_USEDW_MSB_BIT add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/CLOCKS_ARE_SYNCHRONIZED add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/DELAY_RDUSEDW add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/DELAY_WRUSEDW add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/INTENDED_DEVICE_FAMILY add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/LPM_NUMWORDS add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/LPM_SHOWAHEAD add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/LPM_WIDTH add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/LPM_WIDTH_R add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/OVERFLOW_CHECKING add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/RDSYNC_DELAYPIPE add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/READ_ACLR_SYNCH add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/UNDERFLOW_CHECKING add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/USE_EAB add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/WRITE_ACLR_SYNCH add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/WRSYNC_DELAYPIPE add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/aclr add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/data add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/wrclk add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/wrreq add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/rdempty add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/rdfull add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/rdusedw add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/wrempty add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/wrfull add wave -noupdate -group {tx sample fifo} /rx_counter_8bit_tb/U_tx/U_tx_sample_fifo/wrusedw add wave -noupdate -expand -group {fifo writer} /rx_counter_8bit_tb/U_rx/U_fifo_writer/clock add wave -noupdate -expand -group {fifo writer} /rx_counter_8bit_tb/U_rx/U_fifo_writer/eight_bit_mode_en add wave -noupdate -expand -group {fifo writer} /rx_counter_8bit_tb/U_rx/U_fifo_writer/enable add wave -noupdate -expand -group {fifo writer} /rx_counter_8bit_tb/U_rx/U_fifo_writer/FIFO_DATA_WIDTH add wave -noupdate -expand -group {fifo writer} /rx_counter_8bit_tb/U_rx/U_fifo_writer/fifo_full add wave -noupdate -expand -group {fifo writer} /rx_counter_8bit_tb/U_rx/U_fifo_writer/fifo_usedw add wave -noupdate -expand -group {fifo writer} /rx_counter_8bit_tb/U_rx/U_fifo_writer/FIFO_USEDW_WIDTH add wave -noupdate -expand -group {fifo writer} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_sample_controls add wave -noupdate -expand -group {fifo writer} -radix decimal -childformat {{/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0) -radix decimal -childformat {{/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i -radix decimal -childformat {{/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(15) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(14) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(13) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(12) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(11) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(10) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(9) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(8) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(7) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(6) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(5) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(4) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(3) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(2) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(1) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(0) -radix decimal}}} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_q -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_v -radix decimal}}} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(1) -radix decimal -childformat {{/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(1).data_i -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(1).data_q -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(1).data_v -radix decimal}}}} -expand -subitemconfig {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0) {-height 17 -radix decimal -childformat {{/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i -radix decimal -childformat {{/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(15) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(14) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(13) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(12) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(11) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(10) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(9) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(8) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(7) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(6) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(5) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(4) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(3) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(2) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(1) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(0) -radix decimal}}} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_q -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_v -radix decimal}} -expand} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i {-height 17 -radix decimal -childformat {{/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(15) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(14) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(13) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(12) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(11) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(10) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(9) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(8) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(7) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(6) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(5) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(4) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(3) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(2) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(1) -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(0) -radix decimal}}} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(15) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(14) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(13) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(12) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(11) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(10) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(9) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(8) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(7) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(6) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(5) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(4) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(3) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(2) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(1) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_i(0) {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_q {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(0).data_v {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(1) {-height 17 -radix decimal -childformat {{/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(1).data_i -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(1).data_q -radix decimal} {/rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(1).data_v -radix decimal}} -expand} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(1).data_i {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(1).data_q {-height 17 -radix decimal} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples(1).data_v {-height 17 -radix decimal}} /rx_counter_8bit_tb/U_rx/U_fifo_writer/in_samples add wave -noupdate -expand -group {fifo writer} /rx_counter_8bit_tb/U_rx/U_fifo_writer/meta_en add wave -noupdate -expand -group {fifo writer} /rx_counter_8bit_tb/U_rx/U_fifo_writer/META_FIFO_DATA_WIDTH add wave -noupdate -expand -group {fifo writer} /rx_counter_8bit_tb/U_rx/U_fifo_writer/meta_fifo_full add wave -noupdate -expand -group {fifo writer} /rx_counter_8bit_tb/U_rx/U_fifo_writer/meta_fifo_usedw add wave -noupdate -expand -group {fifo writer} /rx_counter_8bit_tb/U_rx/U_fifo_writer/META_FIFO_USEDW_WIDTH add wave -noupdate -expand -group {fifo writer} /rx_counter_8bit_tb/U_rx/U_fifo_writer/mini_exp add wave -noupdate -expand -group {fifo writer} /rx_counter_8bit_tb/U_rx/U_fifo_writer/NUM_STREAMS add wave -noupdate -expand -group {fifo writer} /rx_counter_8bit_tb/U_rx/U_fifo_writer/overflow_duration add wave -noupdate -expand -group {fifo writer} /rx_counter_8bit_tb/U_rx/U_fifo_writer/packet_control add wave -noupdate -expand -group {fifo writer} /rx_counter_8bit_tb/U_rx/U_fifo_writer/packet_en add wave -noupdate -expand -group {fifo writer} /rx_counter_8bit_tb/U_rx/U_fifo_writer/reset add wave -noupdate -expand -group {fifo writer} /rx_counter_8bit_tb/U_rx/U_fifo_writer/timestamp add wave -noupdate -expand -group {fifo writer} /rx_counter_8bit_tb/U_rx/U_fifo_writer/usb_speed add wave -noupdate -expand -group {fifo writer} /rx_counter_8bit_tb/U_rx/U_fifo_writer/fifo_clear add wave -noupdate -expand -group {fifo writer} /rx_counter_8bit_tb/U_rx/U_fifo_writer/fifo_data add wave -noupdate -expand -group {fifo writer} /rx_counter_8bit_tb/U_rx/U_fifo_writer/fifo_write add wave -noupdate -expand -group {fifo writer} /rx_counter_8bit_tb/U_rx/U_fifo_writer/meta_fifo_data add wave -noupdate -expand -group {fifo writer} /rx_counter_8bit_tb/U_rx/U_fifo_writer/meta_fifo_write add wave -noupdate -expand -group {fifo writer} /rx_counter_8bit_tb/U_rx/U_fifo_writer/overflow_count add wave -noupdate -expand -group {fifo writer} /rx_counter_8bit_tb/U_rx/U_fifo_writer/overflow_led add wave -noupdate -expand -group {fifo writer} /rx_counter_8bit_tb/U_rx/U_fifo_writer/packet_ready add wave -noupdate -expand -group {fifo writer} /rx_counter_8bit_tb/U_rx/U_fifo_writer/dma_buf_size add wave -noupdate -expand -group {fifo writer} /rx_counter_8bit_tb/U_rx/U_fifo_writer/DMA_BUF_SIZE_HS add wave -noupdate -expand -group {fifo writer} /rx_counter_8bit_tb/U_rx/U_fifo_writer/DMA_BUF_SIZE_SS add wave -noupdate -expand -group {fifo writer} /rx_counter_8bit_tb/U_rx/U_fifo_writer/fifo_current add wave -noupdate -expand -group {fifo writer} /rx_counter_8bit_tb/U_rx/U_fifo_writer/fifo_enough add wave -noupdate -expand -group {fifo writer} /rx_counter_8bit_tb/U_rx/U_fifo_writer/FIFO_FSM_RESET_VALUE add wave -noupdate -expand -group {fifo writer} /rx_counter_8bit_tb/U_rx/U_fifo_writer/fifo_future add wave -noupdate -expand -group {fifo writer} /rx_counter_8bit_tb/U_rx/U_fifo_writer/meta_current add wave -noupdate -expand -group {fifo writer} /rx_counter_8bit_tb/U_rx/U_fifo_writer/META_FSM_RESET_VALUE add wave -noupdate -expand -group {fifo writer} /rx_counter_8bit_tb/U_rx/U_fifo_writer/meta_future add wave -noupdate -expand -group {fifo writer} /rx_counter_8bit_tb/U_rx/U_fifo_writer/overflow_detected add wave -noupdate -expand -group {fifo writer} /rx_counter_8bit_tb/U_rx/U_fifo_writer/sync_mini_exp TreeUpdate [SetDefaultTree] WaveRestoreCursors {{GPIF start} {269209329 ps} 1} {in_samples {41444776 ps} 1} {{Cursor 5} {723894680 ps} 0} quietly wave cursor active 3 configure wave -namecolwidth 165 configure wave -valuecolwidth 106 configure wave -justifyvalue left configure wave -signalnamewidth 1 configure wave -snapdistance 10 configure wave -datasetprefix 0 configure wave -rowmargin 4 configure wave -childrowmargin 2 configure wave -gridoffset 0 configure wave -gridperiod 1 configure wave -griddelta 40 configure wave -timeline 0 configure wave -timelineunits us update WaveRestoreZoom {0 ps} {1016086528 ps} bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/modelsim/wave_rx_timestamp_tb.do000066400000000000000000000437041457144405000277620ustar00rootroot00000000000000onerror {resume} quietly WaveActivateNextPane {} 0 add wave -noupdate -color Pink /rx_timestamp_tb/U_rx/U_fifo_writer/eight_bit_mode_en add wave -noupdate /rx_timestamp_tb/U_fx3_gpif/pclk add wave -noupdate /rx_timestamp_tb/U_fx3_gpif/gpif_out add wave -noupdate /rx_timestamp_tb/U_fx3_gpif/gpif_oe add wave -noupdate /rx_timestamp_tb/U_rx/U_fifo_writer/clock add wave -noupdate -radix decimal /rx_timestamp_tb/U_rx/U_fifo_writer/timestamp add wave -noupdate -expand -subitemconfig {/rx_timestamp_tb/U_rx/U_fifo_writer/meta_current.dma_downcount {-color {Cornflower Blue} -height 17} /rx_timestamp_tb/U_rx/U_fifo_writer/meta_current.meta_write {-color Salmon -height 17}} /rx_timestamp_tb/U_rx/U_fifo_writer/meta_current add wave -noupdate -expand -subitemconfig {/rx_timestamp_tb/U_rx/U_fifo_writer/fifo_current.fifo_write {-color {Steel Blue} -height 17} /rx_timestamp_tb/U_rx/U_fifo_writer/fifo_current.samples_left {-color Gold} /rx_timestamp_tb/U_rx/U_fifo_writer/fifo_current.eight_bit_delay {-color Gold -height 17}} /rx_timestamp_tb/U_rx/U_fifo_writer/fifo_current add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/pclk add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/reset add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/usb_speed add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/gpif_in add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/ctl_in add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/meta_enable add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/packet_enable add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/tx_fifo_full add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/tx_fifo_empty add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/tx_fifo_usedw add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/tx_timestamp add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/tx_meta_fifo_full add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/tx_meta_fifo_empty add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/tx_meta_fifo_usedw add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/rx_fifo_full add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/rx_fifo_empty add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/rx_fifo_usedw add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/rx_fifo_data add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/rx_meta_fifo_full add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/rx_meta_fifo_empty add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/rx_meta_fifo_usedr add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/rx_meta_fifo_data add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/current add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/future add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/can_rx add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/should_rx add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/can_tx add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/should_tx add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/rx_fifo_enough add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/tx_fifo_enough add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/rx_fifo_critical add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/underrun add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/dma_req add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/gpif_buf_size add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/dma3_tx_reqx add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/dma2_tx_reqx add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/dma1_rx_reqx add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/dma0_rx_reqx add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/dma_idle add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/dma_tx_enable add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/dma_rx_enable add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/dma3_tx_ack add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/dma2_tx_ack add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/dma1_rx_ack add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/dma0_rx_ack add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/gpif_out add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/gpif_oe add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/ctl_out add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/ctl_oe add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/tx_enable add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/rx_enable add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/tx_fifo_write add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/tx_fifo_data add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/tx_meta_fifo_write add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/tx_meta_fifo_data add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/rx_fifo_read add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/rx_meta_fifo_read add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/pclk add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/reset add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/usb_speed add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/gpif_in add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/ctl_in add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/meta_enable add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/packet_enable add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/tx_fifo_full add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/tx_fifo_empty add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/tx_fifo_usedw add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/tx_timestamp add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/tx_meta_fifo_full add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/tx_meta_fifo_empty add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/tx_meta_fifo_usedw add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/rx_fifo_full add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/rx_fifo_empty add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/rx_fifo_usedw add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/rx_fifo_data add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/rx_meta_fifo_full add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/rx_meta_fifo_empty add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/rx_meta_fifo_usedr add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/rx_meta_fifo_data add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/current add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/future add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/can_rx add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/should_rx add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/can_tx add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/should_tx add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/rx_fifo_enough add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/tx_fifo_enough add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/rx_fifo_critical add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/underrun add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/dma_req add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/gpif_buf_size add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/dma3_tx_reqx add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/dma2_tx_reqx add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/dma1_rx_reqx add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/dma0_rx_reqx add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/dma_idle add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/dma_tx_enable add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/dma_rx_enable add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/dma3_tx_ack add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/dma2_tx_ack add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/dma1_rx_ack add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/dma0_rx_ack add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/gpif_out add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/gpif_oe add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/ctl_out add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/ctl_oe add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/tx_enable add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/rx_enable add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/tx_fifo_write add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/tx_fifo_data add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/tx_meta_fifo_write add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/tx_meta_fifo_data add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/rx_fifo_read add wave -noupdate -group fx3_gpif /rx_timestamp_tb/U_fx3_gpif/rx_meta_fifo_read add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/clock add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/NUM_STREAMS add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/FIFO_USEDW_WIDTH add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/FIFO_DATA_WIDTH add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/META_FIFO_USEDW_WIDTH add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/META_FIFO_DATA_WIDTH add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/reset add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/enable add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/usb_speed add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/meta_en add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/packet_en add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/eight_bit_mode_en add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/timestamp add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/mini_exp add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/in_sample_controls add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/in_samples add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/fifo_usedw add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/fifo_full add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/packet_control add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/meta_fifo_full add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/meta_fifo_usedw add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/overflow_duration add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/dma_buf_size add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/fifo_enough add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/overflow_detected add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/meta_current add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/meta_future add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/fifo_current add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/fifo_future add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/sync_mini_exp add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/DMA_BUF_SIZE_SS add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/DMA_BUF_SIZE_HS add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/META_FSM_RESET_VALUE add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/FIFO_FSM_RESET_VALUE add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/fifo_clear add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/fifo_write add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/fifo_data add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/packet_ready add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/meta_fifo_data add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/meta_fifo_write add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/overflow_led add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/overflow_count add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/clock add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/NUM_STREAMS add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/FIFO_USEDW_WIDTH add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/FIFO_DATA_WIDTH add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/META_FIFO_USEDW_WIDTH add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/META_FIFO_DATA_WIDTH add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/reset add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/enable add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/usb_speed add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/meta_en add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/packet_en add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/eight_bit_mode_en add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/timestamp add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/mini_exp add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/in_sample_controls add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/in_samples add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/fifo_usedw add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/fifo_full add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/packet_control add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/meta_fifo_full add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/meta_fifo_usedw add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/overflow_duration add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/dma_buf_size add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/fifo_enough add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/overflow_detected add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/meta_current add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/meta_future add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/fifo_current add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/fifo_future add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/sync_mini_exp add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/DMA_BUF_SIZE_SS add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/DMA_BUF_SIZE_HS add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/META_FSM_RESET_VALUE add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/FIFO_FSM_RESET_VALUE add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/fifo_clear add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/fifo_write add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/fifo_data add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/packet_ready add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/meta_fifo_data add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/meta_fifo_write add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/overflow_led add wave -noupdate -expand -group fifo_writer /rx_timestamp_tb/U_rx/U_fifo_writer/overflow_count TreeUpdate [SetDefaultTree] WaveRestoreCursors {{Cursor 11} {42111448 ps} 1} {{Cursor 2} {42555896 ps} 1} {{Meta_wr expected} {267335472 ps} 1} {{Cursor 4} {492979686 ps} 0} quietly wave cursor active 4 configure wave -namecolwidth 165 configure wave -valuecolwidth 106 configure wave -justifyvalue left configure wave -signalnamewidth 1 configure wave -snapdistance 10 configure wave -datasetprefix 0 configure wave -rowmargin 4 configure wave -childrowmargin 2 configure wave -gridoffset 0 configure wave -gridperiod 1 configure wave -griddelta 40 configure wave -timeline 0 configure wave -timelineunits us update WaveRestoreZoom {492180935 ps} {508008039 ps} bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/modelsim/wlan_fx3_gpif_tb.do000066400000000000000000000005331457144405000267430ustar00rootroot00000000000000source ../../../ip/nuand/nuand.do vcom -work nuand -2008 ../vhdl/rx.vhd vcom -work nuand -2008 ../vhdl/tx.vhd vlib rtl_work vcom -work rtl_work -2008 ../../../ip/altera/fx3_pll/fx3_pll.vhd compile_nuand ../../../ip/nuand bladerf-micro vcom -work nuand -2008 ../vhdl/tb/wlan_fx3_model.vhd vcom -work nuand -2008 ../vhdl/tb/wlan_fx3_gpif_tb.vhd bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/signaltap/000077500000000000000000000000001457144405000233545ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/signaltap/demo.stp000066400000000000000000010530421457144405000250350ustar00rootroot00000000000000 11111111111111111111 11111111111111111111 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/signaltap/fifo_writer.stp000066400000000000000000045254071457144405000264440ustar00rootroot00000000000000 'rx:U_rx|fifo_writer:U_fifo_writer|meta_current.meta_write' == rising edge 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/signaltap/tx.stp000066400000000000000000235417051457144405000245600ustar00rootroot00000000000000 'tx:U_tx|dac_streams[0].data_v' == rising edge 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 0100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100100000000000000000000010000000000100000000000000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011000000000000010000000000100000000001000000000000000011001010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000100000000001000000000010000000000000000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000001000000000010000000000100000000000000001100101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000010000000000100000000001000000000000000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000100000000001000000000010000000000000000110010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000001000000000010000000000100000000000000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000010000000000100000000001000000000000000011001010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110010000000000100000000001000000000010000000000000000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100000000000000000000000000000000000000000000001000001100101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011000000000000000000000000000000000000000000000010000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110000000000000000000000000000000000000000000000100000110010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100000000000000000000000000000000000000000000001000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011001000000000000000000000000000000000000000000010000011001010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110010000000000000000000000000000000000000000000100000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100100000000000000000000000000000000000000000001000001100101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000000000000000000000000000000000000010000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000100000000000000000000000000000000100000110010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000001000000000000000000000000000000001000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000010000000000000000000000000000000010000011001010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000100000000000000000000000000000000100000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000001000000000000000000000000000000001000001100101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000010000000000000000000000000000000010000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000100000000000000000000000000000000100000110010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100100000000001000000000000000000000000000000001000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011000000000000000000000000100000000000000000000010000011001010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000000000000001000000000000000000000100000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000000000000000010000000000000000000001000001100101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011000000000000000000000000100000000000000000000010000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110010000000000000000000001000000000000000000000100000110010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000000000000000010000000000000000000001000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011001000000000000000000000100000000000000000000010000011001010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110010000000000000000000001000000000000000000000100000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100000000000001000000000010000000000000000000001000001100101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000010000000000100000000000000000000010000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000100000000001000000000000000000000100000110010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000001000000000010000000000000000000001000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000010000000000100000000000000000000010000011001010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000100000000001000000000000000000000100000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000001000000000010000000000000000000001000001100101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011001000000000010000000000100000000000000000000010000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000000000000000000000000010000000000100000110010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000000000000000000000000000100000000001000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011000000000000000000000000000000000001000000000010000011001010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110000000000000000000000000000000000010000000000100000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000000000000000000000000000100000000001000001100101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000000000000000000000000001000000000010000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000000000000000000000000010000000000100000110010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000000000000000000000000000100000000001000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000010000000000000000000001000000000010000011001010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000100000000000000000000010000000000100000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000001000000000000000000000100000000001000001100101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000010000000000000000000001000000000010000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000100000000000000000000010000000000100000110010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000001000000000000000000000100000000001000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011001000000000010000000000000000000001000000000010000011001010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110010000000000100000000000000000000010000000000100000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100000000000000000000000010000000000100000000001000001100101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011000000000000000000000000100000000001000000000010000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110000000000000000000000001000000000010000000000100000110010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100000000000000000000000010000000000100000000001000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000000000000000100000000001000000000010000011001010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000000000000001000000000010000000000100000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000000000000000010000000000100000000001000001100101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000000000000000100000000001000000000010000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000100000000001000000000010000000000100000110010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000001000000000010000000000100000000001000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000010000000000100000000001000000000010000011001010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000100000000001000000000010000000000100000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000001000000000010000000000100000000001000001100101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011001000000000010000000000100000000001000000000010000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110010000000000100000000001000000000010000000000100000110010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100100000000001000000000010000000000100000000001000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011000000000000000000000000000000000000000000000000000111001010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000000000000000000000000000000000000000001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100000000000000000000000000000000000000000000000000011100101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000000000000000000000000000000000000000000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000000000000000000000000000000000000000001110010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000000000000000000000000000000000000000000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000000000000000000000000000000000000000000111001010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000000000000000000000000000000000000000001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000001000000000000000000000000000000000000011100101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000010000000000000000000000000000000000000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000100000000000000000000000000000000000001110010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000001000000000000000000000000000000000000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000010000000000000000000000000000000000000111001010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110010000000000100000000000000000000000000000000000001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100100000000001000000000000000000000000000000000000011100101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011001000000000010000000000000000000000000000000000000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000000000000001000000000000000000000000001110010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100000000000000000000000010000000000000000000000000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011000000000000000000000000100000000000000000000000000111001010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110000000000000000000000001000000000000000000000000001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000000000000000010000000000000000000000000011100101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011001000000000000000000000100000000000000000000000000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000000000000001000000000000000000000000001110010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000000000000000010000000000000000000000000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000010000000000100000000000000000000000000111001010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000100000000001000000000000000000000000001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000001000000000010000000000000000000000000011100101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000010000000000100000000000000000000000000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000100000000001000000000000000000000000001110010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000001000000000010000000000000000000000000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011001000000000010000000000100000000000000000000000000111001010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110010000000000100000000001000000000000000000000000001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100000000000000000000000000000000000100000000000000011100101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011000000000000000000000000000000000001000000000000000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110000000000000000000000000000000000010000000000000001110010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000000000000000000000000000100000000000000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000000000000000000000000001000000000000000111001010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000000000000000000000000010000000000000001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100100000000000000000000000000000000100000000000000011100101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011001000000000000000000000000000000001000000000000000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000100000000000000000000010000000000000001110010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100000000000001000000000000000000000100000000000000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011000000000000010000000000000000000001000000000000000111001010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000100000000000000000000010000000000000001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000001000000000000000000000100000000000000011100101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000010000000000000000000001000000000000000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000100000000000000000000010000000000000001110010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000001000000000000000000000100000000000000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000000000000000100000000001000000000000000111001010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000000000000001000000000010000000000000001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000000000000000010000000000100000000000000011100101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000000000000000100000000001000000000000000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000000000000001000000000010000000000000001110010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000000000000000010000000000100000000000000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011001000000000000000000000100000000001000000000000000111001010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000000000000001000000000010000000000000001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100000000000001000000000010000000000100000000000000011100101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011000000000000010000000000100000000001000000000000000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000100000000001000000000010000000000000001110010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000001000000000010000000000100000000000000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000010000000000100000000001000000000000000111001010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000100000000001000000000010000000000000001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000001000000000010000000000100000000000000011100101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000010000000000100000000001000000000000000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000000000000000000000000000000000000100001110010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000000000000000000000000000000000000001000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000000000000000000000000000000000000010000111001010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000000000000000000000000000000000000100001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000000000000000000000000000000000000001000011100101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000000000000000000000000000000000000010000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110010000000000000000000000000000000000000000000100001110010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100100000000000000000000000000000000000000000001000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011000000000000010000000000000000000000000000000010000111001010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000100000000000000000000000000000000100001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100000000000001000000000000000000000000000000001000011100101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011000000000000010000000000000000000000000000000010000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110010000000000100000000000000000000000000000000100001110010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000001000000000000000000000000000000001000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000010000000000000000000000000000000010000111001010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000100000000000000000000000000000000100001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000000000000000010000000000000000000001000011100101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000000000000000100000000000000000000010000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110000000000000000000000001000000000000000000000100001110010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100000000000000000000000010000000000000000000001000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011001000000000000000000000100000000000000000000010000111001010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110010000000000000000000001000000000000000000000100001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100100000000000000000000010000000000000000000001000011100101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011001000000000000000000000100000000000000000000010000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000100000000001000000000000000000000100001110010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000001000000000010000000000000000000001000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000010000000000100000000000000000000010000111001010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000100000000001000000000000000000000100001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000001000000000010000000000000000000001000011100101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000010000000000100000000000000000000010000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000100000000001000000000000000000000100001110010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100100000000001000000000010000000000000000000001000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011000000000000000000000000000000000001000000000010000111001010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000000000000000000000000010000000000100001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100000000000000000000000000000000000100000000001000011100101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000000000000000000000000001000000000010000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000000000000000000000000010000000000100001110010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000000000000000000000000000100000000001000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000000000000000000000000001000000000010000111001010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000000000000000000000000010000000000100001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000001000000000000000000000100000000001000011100101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011000000000000010000000000000000000001000000000010000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110000000000000100000000000000000000010000000000100001110010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000001000000000000000000000100000000001000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011001000000000010000000000000000000001000000000010000111001010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110010000000000100000000000000000000010000000000100001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100100000000001000000000000000000000100000000001000011100101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011001000000000010000000000000000000001000000000010000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000000000000001000000000010000000000100001110010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100000000000000000000000010000000000100000000001000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011000000000000000000000000100000000001000000000010000111001010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000000000000001000000000010000000000100001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000000000000000010000000000100000000001000011100101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000000000000000100000000001000000000010000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000000000000001000000000010000000000100001110010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000000000000000010000000000100000000001000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000010000000000100000000001000000000010000111001010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000100000000001000000000010000000000100001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100000000000001000000000010000000000100000000001000011100101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011000000000000010000000000100000000001000000000010000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110010000000000100000000001000000000010000000000100001110010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000001000000000010000000000100000000001000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011001000000000010000000000100000000001000000000010000111001010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000100000000001000000000010000000000100001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000000000000000000000000000000000000000000000010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000000000000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000000000000000000000000000000000000000000001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100000000000000000000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000000000000000000000000000000000000000000000101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110010000000000000000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100100000000000000000000000000000000000000000000000000010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000000000000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000100000000000000000000000000000000000000001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100000000000001000000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000010000000000000000000000000000000000000000101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000100000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000001000000000000000000000000000000000000000010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000010000000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000100000000000000000000000000000000000000001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100100000000001000000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011000000000000000000000000100000000000000000000000000000101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000000000000001000000000000000000000000000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000000000000000010000000000000000000000000000010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011000000000000000000000000100000000000000000000000000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110010000000000000000000001000000000000000000000000000001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000000000000000010000000000000000000000000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000000000000000100000000000000000000000000000101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000000000000001000000000000000000000000000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000001000000000010000000000000000000000000000010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000010000000000100000000000000000000000000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000100000000001000000000000000000000000000001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000001000000000010000000000000000000000000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000010000000000100000000000000000000000000000101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110010000000000100000000001000000000000000000000000000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100100000000001000000000010000000000000000000000000000010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011001000000000010000000000100000000000000000000000000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000000000000000000000000010000000000000000001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100000000000000000000000000000000000100000000000000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011000000000000000000000000000000000001000000000000000000101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110000000000000000000000000000000000010000000000000000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000000000000000000000000000100000000000000000010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000000000000000000000000001000000000000000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000000000000000000000000010000000000000000001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000000000000000000000000000100000000000000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000010000000000000000000001000000000000000000101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000100000000000000000000010000000000000000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000001000000000000000000000100000000000000000010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000010000000000000000000001000000000000000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110010000000000100000000000000000000010000000000000000001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000001000000000000000000000100000000000000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011001000000000010000000000000000000001000000000000000000101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110010000000000100000000000000000000010000000000000000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100000000000000000000000010000000000100000000000000000010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000000000000000100000000001000000000000000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000000000000001000000000010000000000000000001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000000000000000010000000000100000000000000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000000000000000100000000001000000000000000000101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110010000000000000000000001000000000010000000000000000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000000000000000010000000000100000000000000000010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011001000000000000000000000100000000001000000000000000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000100000000001000000000010000000000000000001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000001000000000010000000000100000000000000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000010000000000100000000001000000000000000000101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000100000000001000000000010000000000000000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000001000000000010000000000100000000000000000010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000010000000000100000000001000000000000000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000100000000001000000000010000000000000000001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000001000000000010000000000100000000000000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011000000000000000000000000000000000000000000000010000000101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000000000000000000000000000000000000100000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000000000000000000000000000000000000001000000010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011000000000000000000000000000000000000000000000010000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110010000000000000000000000000000000000000000000100000001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000000000000000000000000000000000000001000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000000000000000000000000000000000000010000000101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000000000000000000000000000000000000100000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000001000000000000000000000000000000001000000010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011000000000000010000000000000000000000000000000010000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110000000000000100000000000000000000000000000000100000001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100000000000001000000000000000000000000000000001000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011001000000000010000000000000000000000000000000010000000101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000100000000000000000000000000000000100000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000001000000000000000000000000000000001000000010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000010000000000000000000000000000000010000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000000000000001000000000000000000000100000001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100000000000000000000000010000000000000000000001000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000000000000000100000000000000000000010000000101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000000000000001000000000000000000000100000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000000000000000010000000000000000000001000000010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000000000000000100000000000000000000010000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000000000000001000000000000000000000100000001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000000000000000010000000000000000000001000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011000000000000010000000000100000000000000000000010000000101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000100000000001000000000000000000000100000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100000000000001000000000010000000000000000000001000000010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011000000000000010000000000100000000000000000000010000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110010000000000100000000001000000000000000000000100000001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000001000000000010000000000000000000001000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000010000000000100000000000000000000010000000101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000100000000001000000000000000000000100000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000000000000000000000000000100000000001000000010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000000000000000000000000001000000000010000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000000000000000000000000010000000000100000001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000000000000000000000000000100000000001000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000000000000000000000000001000000000010000000101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110010000000000000000000000000000000010000000000100000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100100000000000000000000000000000000100000000001000000010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011001000000000000000000000000000000001000000000010000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000100000000000000000000010000000000100000001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100000000000001000000000000000000000100000000001000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011000000000000010000000000000000000001000000000010000000101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000100000000000000000000010000000000100000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000001000000000000000000000100000000001000000010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000010000000000000000000001000000000010000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000100000000000000000000010000000000100000001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000001000000000000000000000100000000001000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000000000000000100000000001000000000010000000101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000000000000001000000000010000000000100000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100000000000000000000000010000000000100000000001000000010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011000000000000000000000000100000000001000000000010000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110010000000000000000000001000000000010000000000100000001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000000000000000010000000000100000000001000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011001000000000000000000000100000000001000000000010000000101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110010000000000000000000001000000000010000000000100000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100000000000001000000000010000000000100000000001000000010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000010000000000100000000001000000000010000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000100000000001000000000010000000000100000001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000001000000000010000000000100000000001000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000010000000000100000000001000000000010000000101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000100000000001000000000010000000000100000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000001000000000010000000000100000000001000000010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000010000000000100000000001000000000010000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000000000000000000000000000000000000000001001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100000000000000000000000000000000000000000000000000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011000000000000000000000000000000000000000000000000000100101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110000000000000000000000000000000000000000000000000001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000000000000000000000000000000000000000000010010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011001000000000000000000000000000000000000000000000000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000000000000000000000000000000000000000001001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000000000000000000000000000000000000000000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000010000000000000000000000000000000000000100101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000100000000000000000000000000000000000001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000001000000000000000000000000000000000000010010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000010000000000000000000000000000000000000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000100000000000000000000000000000000000001001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000001000000000000000000000000000000000000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011001000000000010000000000000000000000000000000000000100101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110010000000000100000000000000000000000000000000000001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100000000000000000000000010000000000000000000000000010010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011000000000000000000000000100000000000000000000000000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110000000000000000000000001000000000000000000000000001001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000000000000000010000000000000000000000000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000000000000000100000000000000000000000000100101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000000000000001000000000000000000000000001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000000000000000010000000000000000000000000010010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000000000000000100000000000000000000000000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000100000000001000000000000000000000000001001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000001000000000010000000000000000000000000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011000000000000010000000000100000000000000000000000000100101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110000000000000100000000001000000000000000000000000001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000001000000000010000000000000000000000000010010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011001000000000010000000000100000000000000000000000000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110010000000000100000000001000000000000000000000000001001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100100000000001000000000010000000000000000000000000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000000000000000000000000001000000000000000100101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000000000000000000000000010000000000000001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000000000000000000000000000100000000000000010010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000000000000000000000000001000000000000000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000000000000000000000000010000000000000001001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000000000000000000000000000100000000000000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000000000000000000000000001000000000000000100101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000000000000000000000000010000000000000001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000001000000000000000000000100000000000000010010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011000000000000010000000000000000000001000000000000000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110000000000000100000000000000000000010000000000000001001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100000000000001000000000000000000000100000000000000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011001000000000010000000000000000000001000000000000000100101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110010000000000100000000000000000000010000000000000001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100100000000001000000000000000000000100000000000000010010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011001000000000010000000000000000000001000000000000000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000000000000001000000000010000000000000001001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000000000000000010000000000100000000000000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000000000000000100000000001000000000000000100101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000000000000001000000000010000000000000001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000000000000000010000000000100000000000000010010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000000000000000100000000001000000000000000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000000000000001000000000010000000000000001001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100100000000000000000000010000000000100000000000000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011000000000000010000000000100000000001000000000000000100101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000100000000001000000000010000000000000001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100000000000001000000000010000000000100000000000000010010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011000000000000010000000000100000000001000000000000000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110010000000000100000000001000000000010000000000000001001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000001000000000010000000000100000000000000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000010000000000100000000001000000000000000100101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000100000000001000000000010000000000000001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000000000000000000000000000000000000001000010010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000000000000000000000000000000000000010000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000000000000000000000000000000000000100001001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000000000000000000000000000000000000001000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011001000000000000000000000000000000000000000000010000100101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110010000000000000000000000000000000000000000000100001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100100000000000000000000000000000000000000000001000010010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011001000000000000000000000000000000000000000000010000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000100000000000000000000000000000000100001001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000001000000000000000000000000000000001000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000010000000000000000000000000000000010000100101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000100000000000000000000000000000000100001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000001000000000000000000000000000000001000010010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000010000000000000000000000000000000010000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000100000000000000000000000000000000100001001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000001000000000000000000000000000000001000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011000000000000000000000000100000000000000000000010000100101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000000000000001000000000000000000000100001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100000000000000000000000010000000000000000000001000010010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011000000000000000000000000100000000000000000000010000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110010000000000000000000001000000000000000000000100001001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000000000000000010000000000000000000001000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011001000000000000000000000100000000000000000000010000100101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000000000000001000000000000000000000100001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000001000000000010000000000000000000001000010010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000010000000000100000000000000000000010000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000100000000001000000000000000000000100001001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000001000000000010000000000000000000001000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000010000000000100000000000000000000010000100101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110010000000000100000000001000000000000000000000100001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100100000000001000000000010000000000000000000001000010010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011001000000000010000000000100000000000000000000010000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000000000000000000000000010000000000100001001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100000000000000000000000000000000000100000000001000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000000000000000000000000001000000000010000100101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000000000000000000000000010000000000100001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000000000000000000000000000100000000001000010010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000000000000000000000000001000000000010000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000000000000000000000000010000000000100001001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000000000000000000000000000100000000001000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011000000000000010000000000000000000001000000000010000100101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000100000000000000000000010000000000100001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100000000000001000000000000000000000100000000001000010010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011000000000000010000000000000000000001000000000010000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110010000000000100000000000000000000010000000000100001001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000001000000000000000000000100000000001000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011001000000000010000000000000000000001000000000010000100101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110010000000000100000000000000000000010000000000100001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000000000000000010000000000100000000001000010010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000000000000000100000000001000000000010000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000000000000001000000000010000000000100001001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000000000000000010000000000100000000001000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000000000000000100000000001000000000010000100101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000000000000001000000000010000000000100001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100100000000000000000000010000000000100000000001000010010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011001000000000000000000000100000000001000000000010000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000100000000001000000000010000000000100001001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100000000000001000000000010000000000100000000001000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011000000000000010000000000100000000001000000000010000100101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000100000000001000000000010000000000100001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000001000000000010000000000100000000001000010010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000010000000000100000000001000000000010000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000100000000001000000000010000000000100001001010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000001000000000010000000000100000000001000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000000000000000000000000000000000000000000010101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000000000000000000000000000000000000000000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000000000000000000000000000000000000000000001010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000000000000000000000000000000000000000000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000000000000000000000000000000000000000000101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000000000000000000000000000000000000000000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011001000000000000000000000000000000000000000000000000010101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110010000000000000000000000000000000000000000000000000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100000000000001000000000000000000000000000000000000001010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011000000000000010000000000000000000000000000000000000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110000000000000100000000000000000000000000000000000000101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100000000000001000000000000000000000000000000000000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000010000000000000000000000000000000000000010101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000100000000000000000000000000000000000000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000001000000000000000000000000000000000000001010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000010000000000000000000000000000000000000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000000000000001000000000000000000000000000101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000000000000000010000000000000000000000000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000000000000000100000000000000000000000000010101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000000000000001000000000000000000000000000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000000000000000010000000000000000000000000001010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011001000000000000000000000100000000000000000000000000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110010000000000000000000001000000000000000000000000000101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100100000000000000000000010000000000000000000000000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011000000000000010000000000100000000000000000000000000010101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000100000000001000000000000000000000000000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000001000000000010000000000000000000000000001010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000010000000000100000000000000000000000000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000100000000001000000000000000000000000000101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000001000000000010000000000000000000000000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000010000000000100000000000000000000000000010101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000100000000001000000000000000000000000000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000000000000000000000000000100000000000000001010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000000000000000000000000001000000000000000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110000000000000000000000000000000000010000000000000000101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100000000000000000000000000000000000100000000000000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011001000000000000000000000000000000001000000000000000010101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000000000000000000000000010000000000000000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000000000000000000000000000100000000000000001010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000000000000000000000000001000000000000000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000100000000000000000000010000000000000000101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000001000000000000000000000100000000000000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000010000000000000000000001000000000000000010101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110000000000000100000000000000000000010000000000000000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000001000000000000000000000100000000000000001010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011001000000000010000000000000000000001000000000000000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110010000000000100000000000000000000010000000000000000101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100100000000001000000000000000000000100000000000000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011000000000000000000000000100000000001000000000000000010101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000000000000001000000000010000000000000000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000000000000000010000000000100000000000000001010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000000000000000100000000001000000000000000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000000000000001000000000010000000000000000101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000000000000000010000000000100000000000000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000000000000000100000000001000000000000000010101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110010000000000000000000001000000000010000000000000000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100000000000001000000000010000000000100000000000000001010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011000000000000010000000000100000000001000000000000000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110000000000000100000000001000000000010000000000000000101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000001000000000010000000000100000000000000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000010000000000100000000001000000000000000010101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000100000000001000000000010000000000000000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000001000000000010000000000100000000000000001010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000010000000000100000000001000000000000000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000000000000000000000000000000000000100000101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100000000000000000000000000000000000000000000001000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011000000000000000000000000000000000000000000000010000010101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110000000000000000000000000000000000000000000000100000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000000000000000000000000000000000000001000001010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011001000000000000000000000000000000000000000000010000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000000000000000000000000000000000000100000101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000000000000000000000000000000000000001000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000010000000000000000000000000000000010000010101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000100000000000000000000000000000000100000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000001000000000000000000000000000000001000001010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000010000000000000000000000000000000010000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000100000000000000000000000000000000100000101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000001000000000000000000000000000000001000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011001000000000010000000000000000000000000000000010000010101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000100000000000000000000000000000000100000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100000000000000000000000010000000000000000000001000001010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011000000000000000000000000100000000000000000000010000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110000000000000000000000001000000000000000000000100000101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000000000000000010000000000000000000001000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000000000000000100000000000000000000010000010101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000000000000001000000000000000000000100000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000000000000000010000000000000000000001000001010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000000000000000100000000000000000000010000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000100000000001000000000000000000000100000101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000001000000000010000000000000000000001000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000010000000000100000000000000000000010000010101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110000000000000100000000001000000000000000000000100000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000001000000000010000000000000000000001000001010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011001000000000010000000000100000000000000000000010000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110010000000000100000000001000000000000000000000100000101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000001000000000010000000000000000000001000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011000000000000000000000000000000000001000000000010000010101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000000000000000000000000010000000000100000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100000000000000000000000000000000000100000000001000001010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011000000000000000000000000000000000001000000000010000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000000000000000000000000010000000000100000101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000000000000000000000000000100000000001000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000000000000000000000000001000000000010000010101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000000000000000000000000010000000000100000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000001000000000000000000000100000000001000001010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000010000000000000000000001000000000010000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000100000000000000000000010000000000100000101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000001000000000000000000000100000000001000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000010000000000000000000001000000000010000010101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110010000000000100000000000000000000010000000000100000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100100000000001000000000000000000000100000000001000001010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011001000000000010000000000000000000001000000000010000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000000000000001000000000010000000000100000101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100000000000000000000000010000000000100000000001000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011000000000000000000000000100000000001000000000010000010101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110000000000000000000000001000000000010000000000100000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000000000000000010000000000100000000001000001010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000000000000000100000000001000000000010000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000000000000001000000000010000000000100000101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000000000000000010000000000100000000001000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000010000000000100000000001000000000010000010101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000100000000001000000000010000000000100000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000001000000000010000000000100000000001000001010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000010000000000100000000001000000000010000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000100000000001000000000010000000000100000101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000001000000000010000000000100000000001000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011001000000000010000000000100000000001000000000010000010101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110010000000000100000000001000000000010000000000100000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100000000000000000000000000000000000000000000000000011010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000000000000000000000000000000000000000000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000000000000000000000000000000000000000001101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000000000000000000000000000000000000000000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000000000000000000000000000000000000000000110101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000000000000000000000000000000000000000001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000000000000000000000000000000000000000000011010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000000000000000000000000000000000000000000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000100000000000000000000000000000000000001101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100000000000001000000000000000000000000000000000000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011000000000000010000000000000000000000000000000000000110101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110000000000000100000000000000000000000000000000000001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000001000000000000000000000000000000000000011010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011001000000000010000000000000000000000000000000000000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000100000000000000000000000000000000000001101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000001000000000000000000000000000000000000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000000000000000100000000000000000000000000110101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000000000000001000000000000000000000000001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000000000000000010000000000000000000000000011010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000000000000000100000000000000000000000000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000000000000001000000000000000000000000001101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000000000000000010000000000000000000000000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011001000000000000000000000100000000000000000000000000110101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110010000000000000000000001000000000000000000000000001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100000000000001000000000010000000000000000000000000011010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011000000000000010000000000100000000000000000000000000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000100000000001000000000000000000000000001101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000001000000000010000000000000000000000000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000010000000000100000000000000000000000000110101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000100000000001000000000000000000000000001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000001000000000010000000000000000000000000011010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011001000000000010000000000100000000000000000000000000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000000000000000000000000010000000000000001101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000000000000000000000000000100000000000000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000000000000000000000000001000000000000000110101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110000000000000000000000000000000000010000000000000001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000000000000000000000000000100000000000000011010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000000000000000000000000001000000000000000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000000000000000000000000010000000000000001101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000000000000000000000000000100000000000000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000010000000000000000000001000000000000000110101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000100000000000000000000010000000000000001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100000000000001000000000000000000000100000000000000011010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011000000000000010000000000000000000001000000000000000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110010000000000100000000000000000000010000000000000001101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000001000000000000000000000100000000000000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000010000000000000000000001000000000000000110101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000100000000000000000000010000000000000001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000000000000000010000000000100000000000000011010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000000000000000100000000001000000000000000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000000000000001000000000010000000000000001101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000000000000000010000000000100000000000000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011001000000000000000000000100000000001000000000000000110101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110010000000000000000000001000000000010000000000000001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000000000000000010000000000100000000000000011010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000000000000000100000000001000000000000000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000100000000001000000000010000000000000001101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100000000000001000000000010000000000100000000000000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011000000000000010000000000100000000001000000000000000110101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110000000000000100000000001000000000010000000000000001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000001000000000010000000000100000000000000011010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000010000000000100000000001000000000000000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000100000000001000000000010000000000000001101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000001000000000010000000000100000000000000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000000000000000000000000000000000000010000110101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000000000000000000000000000000000000100001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100000000000000000000000000000000000000000000001000011010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000000000000000000000000000000000000010000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000000000000000000000000000000000000100001101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000000000000000000000000000000000000001000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000000000000000000000000000000000000010000110101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000000000000000000000000000000000000100001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000001000000000000000000000000000000001000011010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000010000000000000000000000000000000010000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110000000000000100000000000000000000000000000000100001101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100000000000001000000000000000000000000000000001000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011001000000000010000000000000000000000000000000010000110101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110010000000000100000000000000000000000000000000100001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100100000000001000000000000000000000000000000001000011010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011001000000000010000000000000000000000000000000010000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000000000000001000000000000000000000100001101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000000000000000010000000000000000000001000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000000000000000100000000000000000000010000110101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000000000000001000000000000000000000100001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000000000000000010000000000000000000001000011010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000000000000000100000000000000000000010000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000000000000001000000000000000000000100001101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000000000000000010000000000000000000001000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000010000000000100000000000000000000010000110101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000100000000001000000000000000000000100001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100000000000001000000000010000000000000000000001000011010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011000000000000010000000000100000000000000000000010000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110010000000000100000000001000000000000000000000100001101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000001000000000010000000000000000000001000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011001000000000010000000000100000000000000000000010000110101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110010000000000100000000001000000000000000000000100001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000000000000000000000000000100000000001000011010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000000000000000000000000001000000000010000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000000000000000000000000010000000000100001101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000000000000000000000000000100000000001000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000000000000000000000000001000000000010000110101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000000000000000000000000010000000000100001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000000000000000000000000000100000000001000011010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000000000000000000000000001000000000010000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000100000000000000000000010000000000100001101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100000000000001000000000000000000000100000000001000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011000000000000010000000000000000000001000000000010000110101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110000000000000100000000000000000000010000000000100001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000001000000000000000000000100000000001000011010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011001000000000010000000000000000000001000000000010000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110010000000000100000000000000000000010000000000100001101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100100000000001000000000000000000000100000000001000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000000000000000100000000001000000000010000110101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000000000000001000000000010000000000100001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000000000000000010000000000100000000001000011010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000000000000000100000000001000000000010000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000000000000001000000000010000000000100001101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000000000000000010000000000100000000001000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000000000000000100000000001000000000010000110101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000000000000001000000000010000000000100001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100000000000001000000000010000000000100000000001000011010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011000000000000010000000000100000000001000000000010000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110000000000000100000000001000000000010000000000100001101010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100000000000001000000000010000000000100000000001000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000010000000000100000000001000000000010000110101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110010000000000100000000001000000000010000000000100001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000001000000000010000000000100000000001000011010101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000010000000000100000000001000000000010000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000000000000000000000000000000000000000000011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100000000000000000000000000000000000000000000000000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011000000000000000000000000000000000000000000000000000001101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110000000000000000000000000000000000000000000000000000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000000000000000000000000000000000000000000000110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000000000000000000000000000000000000000000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000000000000000000000000000000000000000000011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000000000000000000000000000000000000000000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011000000000000010000000000000000000000000000000000000001101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000100000000000000000000000000000000000000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100000000000001000000000000000000000000000000000000000110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011000000000000010000000000000000000000000000000000000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110010000000000100000000000000000000000000000000000000011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000001000000000000000000000000000000000000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011001000000000010000000000000000000000000000000000000001101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110010000000000100000000000000000000000000000000000000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000000000000000010000000000000000000000000000110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011000000000000000000000000100000000000000000000000000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000000000000001000000000000000000000000000011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000000000000000010000000000000000000000000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000000000000000100000000000000000000000000001101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000000000000001000000000000000000000000000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000000000000000010000000000000000000000000000110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000000000000000100000000000000000000000000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000100000000001000000000000000000000000000011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000001000000000010000000000000000000000000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000010000000000100000000000000000000000000001101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000100000000001000000000000000000000000000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000001000000000010000000000000000000000000000110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011001000000000010000000000100000000000000000000000000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110010000000000100000000001000000000000000000000000000011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000001000000000010000000000000000000000000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011000000000000000000000000000000000001000000000000000001101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000000000000000000000000010000000000000000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000000000000000000000000000100000000000000000110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000000000000000000000000001000000000000000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000000000000000000000000010000000000000000011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000000000000000000000000000100000000000000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000000000000000000000000001000000000000000001101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000000000000000000000000010000000000000000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100000000000001000000000000000000000100000000000000000110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011000000000000010000000000000000000001000000000000000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000100000000000000000000010000000000000000011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000001000000000000000000000100000000000000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000010000000000000000000001000000000000000001101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000100000000000000000000010000000000000000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000001000000000000000000000100000000000000000110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000010000000000000000000001000000000000000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000000000000001000000000010000000000000000011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000000000000000010000000000100000000000000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011000000000000000000000000100000000001000000000000000001101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000000000000001000000000010000000000000000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000000000000000010000000000100000000000000000110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011001000000000000000000000100000000001000000000000000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110010000000000000000000001000000000010000000000000000011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100100000000000000000000010000000000100000000000000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000010000000000100000000001000000000000000001101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000100000000001000000000010000000000000000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000001000000000010000000000100000000000000000110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000010000000000100000000001000000000000000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000100000000001000000000010000000000000000011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000001000000000010000000000100000000000000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000010000000000100000000001000000000000000001101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110010000000000100000000001000000000010000000000000000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100000000000000000000000000000000000000000000001000000110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011000000000000000000000000000000000000000000000010000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110000000000000000000000000000000000000000000000100000011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100000000000000000000000000000000000000000000001000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011001000000000000000000000000000000000000000000010000001101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110010000000000000000000000000000000000000000000100000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000000000000000000000000000000000000001000000110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000000000000000000000000000000000000010000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000100000000000000000000000000000000100000011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000001000000000000000000000000000000001000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011000000000000010000000000000000000000000000000010000001101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000100000000000000000000000000000000100000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000001000000000000000000000000000000001000000110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000010000000000000000000000000000000010000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000100000000000000000000000000000000100000011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000001000000000000000000000000000000001000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011000000000000000000000000100000000000000000000010000001101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000000000000001000000000000000000000100000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000000000000000010000000000000000000001000000110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000000000000000100000000000000000000010000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110010000000000000000000001000000000000000000000100000011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000000000000000010000000000000000000001000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000000000000000100000000000000000000010000001101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000000000000001000000000000000000000100000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100000000000001000000000010000000000000000000001000000110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011000000000000010000000000100000000000000000000010000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110000000000000100000000001000000000000000000000100000011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100000000000001000000000010000000000000000000001000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011001000000000010000000000100000000000000000000010000001101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110010000000000100000000001000000000000000000000100000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000001000000000010000000000000000000001000000110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000010000000000100000000000000000000010000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000000000000000000000000010000000000100000011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000000000000000000000000000100000000001000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000000000000000000000000001000000000010000001101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000000000000000000000000010000000000100000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000000000000000000000000000100000000001000000110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011001000000000000000000000000000000001000000000010000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110010000000000000000000000000000000010000000000100000011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100100000000000000000000000000000000100000000001000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011000000000000010000000000000000000001000000000010000001101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000100000000000000000000010000000000100000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100000000000001000000000000000000000100000000001000000110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000010000000000000000000001000000000010000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000100000000000000000000010000000000100000011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000001000000000000000000000100000000001000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000010000000000000000000001000000000010000001101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000100000000000000000000010000000000100000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000000000000000010000000000100000000001000000110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000000000000000100000000001000000000010000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000000000000001000000000010000000000100000011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000000000000000010000000000100000000001000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000000000000000100000000001000000000010000001101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110010000000000000000000001000000000010000000000100000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100100000000000000000000010000000000100000000001000000110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000000000000000100000000001000000000010000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000100000000001000000000010000000000100000011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100000000000001000000000010000000000100000000001000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011000000000000010000000000100000000001000000000010000001101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000100000000001000000000010000000000100000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000001000000000010000000000100000000001000000110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000010000000000100000000001000000000010000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000100000000001000000000010000000000100000011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000001000000000010000000000100000000001000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000000000000000000000000000000000000000000101101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000000000000000000000000000000000000000001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000000000000000000000000000000000000000000010110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000000000000000000000000000000000000000000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000000000000000000000000000000000000000001011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000000000000000000000000000000000000000000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000000000000000000000000000000000000000000101101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000000000000000000000000000000000000000001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000001000000000000000000000000000000000000010110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000010000000000000000000000000000000000000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000100000000000000000000000000000000000001011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000001000000000000000000000000000000000000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011001000000000010000000000000000000000000000000000000101101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110010000000000100000000000000000000000000000000000001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100100000000001000000000000000000000000000000000000010110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011001000000000010000000000000000000000000000000000000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000000000000001000000000000000000000000001011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100000000000000000000000010000000000000000000000000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011000000000000000000000000100000000000000000000000000101101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110000000000000000000000001000000000000000000000000001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000000000000000010000000000000000000000000010110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000000000000000100000000000000000000000000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000000000000001000000000000000000000000001011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000000000000000010000000000000000000000000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000010000000000100000000000000000000000000101101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000100000000001000000000000000000000000001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000001000000000010000000000000000000000000010110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000010000000000100000000000000000000000000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110010000000000100000000001000000000000000000000000001011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000001000000000010000000000000000000000000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011001000000000010000000000100000000000000000000000000101101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110010000000000100000000001000000000000000000000000001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100000000000000000000000000000000000100000000000000010110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011000000000000000000000000000000000001000000000000000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110000000000000000000000000000000000010000000000000001011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000000000000000000000000000100000000000000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000000000000000000000000001000000000000000101101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000000000000000000000000010000000000000001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000000000000000000000000000100000000000000010110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000000000000000000000000001000000000000000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000100000000000000000000010000000000000001011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000001000000000000000000000100000000000000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000010000000000000000000001000000000000000101101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110000000000000100000000000000000000010000000000000001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000001000000000000000000000100000000000000010110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011001000000000010000000000000000000001000000000000000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110010000000000100000000000000000000010000000000000001011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100100000000001000000000000000000000100000000000000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011000000000000000000000000100000000001000000000000000101101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000000000000001000000000010000000000000001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000000000000000010000000000100000000000000010110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000000000000000100000000001000000000000000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000000000000001000000000010000000000000001011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000000000000000010000000000100000000000000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000000000000000100000000001000000000000000101101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000000000000001000000000010000000000000001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000001000000000010000000000100000000000000010110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000010000000000100000000001000000000000000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000100000000001000000000010000000000000001011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000001000000000010000000000100000000000000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011001000000000010000000000100000000001000000000000000101101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110010000000000100000000001000000000010000000000000001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100100000000001000000000010000000000100000000000000010110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011001000000000010000000000100000000001000000000000000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000000000000000000000000000000000000100001011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100000000000000000000000000000000000000000000001000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000000000000000000000000000000000000010000101101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000000000000000000000000000000000000100001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000000000000000000000000000000000000001000010110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000000000000000000000000000000000000010000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000000000000000000000000000000000000100001011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000000000000000000000000000000000000001000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011000000000000010000000000000000000000000000000010000101101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000100000000000000000000000000000000100001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100000000000001000000000000000000000000000000001000010110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000010000000000000000000000000000000010000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000100000000000000000000000000000000100001011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000001000000000000000000000000000000001000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011001000000000010000000000000000000000000000000010000101101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000100000000000000000000000000000000100001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100000000000000000000000010000000000000000000001000010110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000000000000000100000000000000000000010000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000000000000001000000000000000000000100001011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000000000000000010000000000000000000001000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000000000000000100000000000000000000010000101101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000000000000001000000000000000000000100001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100100000000000000000000010000000000000000000001000010110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011001000000000000000000000100000000000000000000010000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000100000000001000000000000000000000100001011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000001000000000010000000000000000000001000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011000000000000010000000000100000000000000000000010000101101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110000000000000100000000001000000000000000000000100001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000001000000000010000000000000000000001000010110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011001000000000010000000000100000000000000000000010000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000100000000001000000000000000000000100001011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000001000000000010000000000000000000001000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000000000000000000000000001000000000010000101101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000000000000000000000000010000000000100001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000000000000000000000000000100000000001000010110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000000000000000000000000001000000000010000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000000000000000000000000010000000000100001011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000000000000000000000000000100000000001000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011001000000000000000000000000000000001000000000010000101101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110010000000000000000000000000000000010000000000100001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100000000000001000000000000000000000100000000001000010110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011000000000000010000000000000000000001000000000010000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000100000000000000000000010000000000100001011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000001000000000000000000000100000000001000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000010000000000000000000001000000000010000101101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000100000000000000000000010000000000100001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000001000000000000000000000100000000001000010110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000010000000000000000000001000000000010000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000000000000001000000000010000000000100001011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000000000000000010000000000100000000001000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000000000000000100000000001000000000010000101101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110000000000000000000000001000000000010000000000100001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000000000000000010000000000100000000001000010110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011001000000000000000000000100000000001000000000010000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110010000000000000000000001000000000010000000000100001011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100100000000000000000000010000000000100000000001000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000010000000000100000000001000000000010000101101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000100000000001000000000010000000000100001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000001000000000010000000000100000000001000010110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000010000000000100000000001000000000010000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000100000000001000000000010000000000100001011010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000001000000000010000000000100000000001000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011001000000000010000000000100000000001000000000010000101101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110010000000000100000000001000000000010000000000100001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100000000000000000000000000000000000000000000000000001110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011000000000000000000000000000000000000000000000000000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110000000000000000000000000000000000000000000000000000111010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100000000000000000000000000000000000000000000000000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000000000000000000000000000000000000000000011101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000000000000000000000000000000000000000000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000000000000000000000000000000000000000000001110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000000000000000000000000000000000000000000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000100000000000000000000000000000000000000111010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000001000000000000000000000000000000000000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011000000000000010000000000000000000000000000000000000011101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110000000000000100000000000000000000000000000000000000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000001000000000000000000000000000000000000001110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000010000000000000000000000000000000000000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000100000000000000000000000000000000000000111010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100100000000001000000000000000000000000000000000000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000000000000000100000000000000000000000000011101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000000000000001000000000000000000000000000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000000000000000010000000000000000000000000001110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011000000000000000000000000100000000000000000000000000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110010000000000000000000001000000000000000000000000000111010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000000000000000010000000000000000000000000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011001000000000000000000000100000000000000000000000000011101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110010000000000000000000001000000000000000000000000000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000001000000000010000000000000000000000000001110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000010000000000100000000000000000000000000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110000000000000100000000001000000000000000000000000000111010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100000000000001000000000010000000000000000000000000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011001000000000010000000000100000000000000000000000000011101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000100000000001000000000000000000000000000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101011110101100100000000001000000000010000000000000000000000000001110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000010000000000100000000000000000000000000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000000000000000000000000010000000000000000111010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100000000000000000000000000000000000100000000000000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011000000000000000000000000000000000001000000000000000011101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110000000000000000000000000000000000010000000000000000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101001110101100100000000000000000000000000000000100000000000000001110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011001000000000000000000000000000000001000000000000000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110010000000000000000000000000000000010000000000000000111010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100100000000000000000000000000000000100000000000000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011000000000000010000000000000000000001000000000000000011101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110000000000000100000000000000000000010000000000000000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100000000000001000000000000000000000100000000000000001110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011000000000000010000000000000000000001000000000000000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110010000000000100000000000000000000010000000000000000111010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100100000000001000000000000000000000100000000000000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010111101011001000000000010000000000000000000001000000000000000011101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010101111010110010000000000100000000000000000000010000000000000000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000000000000000010000000000100000000000000001110101000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110001000001010011101011000000000000000000000000100000000001000000000000000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010101111010110000000000000000000000001000000000010000000000000000111010100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000100000101011110101100000000000000000000000010000000000100000000000000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010011101011001000000000000000000000100000000001000000000000000011101010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100010000010100111010110010000000000000000000001000000000010000000000000000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000010010001111111111111111111111111111111100001110011000100000101011110101100100000000000000000000010000000000100000000000000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110001000001010111101011001000000000000000000000100000000001000000000000000011101110010000000000000001000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000010000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100010000010100111010110000000000000100000000001000000000010000000000000000111010100100000000000000010000000000000001000000000000000000000000000000000001000000000000000000000000010000000000000000100000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000100000101001110101100000000000001000000000010000000000100000000000000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000001000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101010001000001010111101011000000000000010000000000100000000001000000000000000011101010000000001000000000000000100000000100000000000000000000000000000000000100000000100100000000000001100000000000000011000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010100010000010101111010110000000000000100000000001000000000010000000000000000111011100100000010000000010000001000000000000000000000000000000000000000000001000000001001000000000000011000000000000000110000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101000100000101001110101100100000000001000000000010000000000100000000000000001110101001000000100000000100000010000000010000000000000000000000000000000000010000000010010000000000000110000000000000001100000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101010001000001010011101011001000000000010000000000100000000001000000000000000011101110000000001000000000000000100000000000000000000000000000000000000000000100000000100100000000000001100000000000000011000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000100010000010101111010110010000000000100000000001000000000010000000000000000111010100000000001000000000000000100000001000000000000000000000000000000000001000000000100000000000010010100000000000000100100000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001000100000101011110101100100000000001000000000010000000000100000000000000001110111001000000010000000100000001000000000000000000000000000000000000000000010000000001000000000000100101000000000000001001000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100010001000001010011101011000000000000000000000000000000000000000000000010000011101010010000000100000001000000010000000100000000000000000000000000000000000100000000010000000000001001010000000000000010010000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000100010000010100111010110000000000000000000000000000000000000000000000100000111011100000000001000000000000000100000000000000000000000000000000000000000001000000000100000000000010010100000000000000100100000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110000100000101011110101100000000000000000000000000000000000000000000001000001110101000000000110000000000000011000000010000000000000000000000000000000000010000000011010000000000100111000000000000001101000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101100001000001010111101011000000000000000000000000000000000000000000000010000011101110010000001100000001000000110000000000000000000000000000000000000000000100000000110100000000001001110000000000000011010000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011000010000010100111010110010000000000000000000000000000000000000000000100000111010100100000011000000010000001100000001000000000000000000000000000000000001000000001101000000000010011100000000000000110100000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110000100000101001110101100100000000000000000000000000000000000000000001000001110111000000000110000000000000011000000000000000000000000000000000000000000010000000011010000000000100111000000000000001101000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100100001000001010111101011001000000000000000000000000000000000000000000010000011101010000000000010000000000000001000000100000000000000000000000000000000000100000000001000000000000001001000010000000010001000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001000010000010101111010110010000000000000000000000000000000000000000000100000111011100100000000100000010000000010000000000000000000000000000000000000000001000000000010000000000000010010000100000000100010000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010000100000101001110101100000000000001000000000000000000000000000000001000001110101001000000001000000100000000100000010000000000000000000000000000000000010000000000100000000000000100100001000000001000100000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100100001000001010011101011000000000000010000000000000000000000000000000010000011101110000000000010000000000000001000000000000000000000000000000000000000000100000000001000000000000001001000010000000010001000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010000010000010101111010110000000000000100000000000000000000000000000000100000111010100000000010100000000000001010000001000000000000000000000000000000000001000000001011000000000000011010000100000000110010000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100000100000101011110101100000000000001000000000000000000000000000000001000001110111001000000101000000100000010100000000000000000000000000000000000000000010000000010110000000000000110100001000000001100100000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000001000001010011101011001000000000010000000000000000000000000000000010000011101010010000001010000001000000101000000100000000000000000000000000000000000100000000101100000000000001101000010000000011001000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010000010000010100111010110010000000000100000000000000000000000000000000100000111011100000000010100000000000001010000000000000000000000000000000000000000001000000001011000000000000011010000100000000110010000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000000100000101011110101100100000000001000000000000000000000000000000001000001110101000000000011000000000000001100000010000000000000000000000000000000000010000000001100000000000100101100001000000001001100000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000001000001010111101011001000000000010000000000000000000000000000000010000011101110010000000110000001000000011000000000000000000000000000000000000000000100000000011000000000001001011000010000000010011000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000000010000010100111010110000000000000000000000001000000000000000000000100000111010100100000001100000010000000110000001000000000000000000000000000000000001000000000110000000000010010110000100000000100110000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000000100000101001110101100000000000000000000000010000000000000000000001000001110111000000000011000000000000001100000000000000000000000000000000000000000010000000001100000000000100101100001000000001001100000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101111110000001010111101011000000000000000000000000100000000000000000000010000011101010000000001110000000000000111000000100000000000000000000000000000000000100000000111100000000001001111000010000000011011000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011111100000010101111010110000000000000000000000001000000000000000000000100000111011100100000011100000010000001110000000000000000000000000000000000000000001000000001111000000000010011110000100000000110110000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111111000000101001110101100100000000000000000000010000000000000000000001000001110101001000000111000000100000011100000010000000000000000000000000000000000010000000011110000000000100111100001000000001101100000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101111110000001010011101011001000000000000000000000100000000000000000000010000011101110000000001110000000000000111000000000000000000000000000000000000000000100000000111100000000001001111000010000000011011000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001111100000010101111010110010000000000000000000001000000000000000000000100000111010100000000000010000000000000001000001000000000000000000000000000000000001000000000000100000000000010001000000000000101001000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011111000000101011110101100100000000000000000000010000000000000000000001000001110111001000000000100000100000000010000000000000000000000000000000000000000010000000000001000000000000100010000000000001010010000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100111110000001010011101011000000000000010000000000100000000000000000000010000011101010010000000001000001000000000100000100000000000000000000000000000000000100000000000010000000000001000100000000000010100100000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001111100000010100111010110000000000000100000000001000000000000000000000100000111011100000000000010000000000000001000000000000000000000000000000000000000001000000000000100000000000010001000000000000101001000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101111000000101011110101100000000000001000000000010000000000000000000001000001110101000000000100100000000000010010000010000000000000000000000000000000000010000000010011000000000000110010000000000001110010000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101011110000001010111101011000000000000010000000000100000000000000000000010000011101110010000001001000001000000100100000000000000000000000000000000000000000100000000100110000000000001100100000000000011100100000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010111100000010100111010110010000000000100000000001000000000000000000000100000111010100100000010010000010000001001000001000000000000000000000000000000000001000000001001100000000000011001000000000000111001000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101111000000101001110101100100000000001000000000010000000000000000000001000001110111000000000100100000000000010010000000000000000000000000000000000000000010000000010011000000000000110010000000000001110010000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100011110000001010111101011001000000000010000000000100000000000000000000010000011101010000000000101000000000000010100000100000000000000000000000000000000000100000000010010000000001001010100000000000010110100000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000111100000010101111010110010000000000100000000001000000000000000000000100000111011100100000001010000010000000101000000000000000000000000000000000000000001000000000100100000000010010101000000000000101101000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001111000000101001110101100000000000000000000000000000000000100000000001000001110101001000000010100000100000001010000010000000000000000000000000000000000010000000001001000000000100101010000000000001011010000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100011110000001010011101011000000000000000000000000000000000001000000000010000011101110000000000101000000000000010100000000000000000000000000000000000000000100000000010010000000001001010100000000000010110100000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011011100000010101111010110000000000000000000000000000000000010000000000100000111010100000000011010000000000001101000001000000000000000000000000000000000001000000001101100000000010011101000000000000111101000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110111000000101011110101100000000000000000000000000000000000100000000001000001110111001000000110100000100000011010000000000000000000000000000000000000000010000000011011000000000100111010000000000001111010000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101101110000001010011101011001000000000000000000000000000000001000000000010000011101010010000001101000001000000110100000100000000000000000000000000000000000100000000110110000000001001110100000000000011110100000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011011100000010100111010110010000000000000000000000000000000010000000000100000111011100000000011010000000000001101000000000000000000000000000000000000000001000000001101100000000010011101000000000000111101000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010111000000101011110101100100000000000000000000000000000000100000000001000001110101000000000001100000000000000110000010000000000000000000000000000000000010000000000101000000000000100110001000000001010110000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100101110000001010111101011001000000000000000000000000000000001000000000010000011101110010000000011000001000000001100000000000000000000000000000000000000000100000000001010000000000001001100010000000010101100000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001011100000010100111010110000000000000100000000000000000000010000000000100000111010100100000000110000010000000011000001000000000000000000000000000000000001000000000010100000000000010011000100000000101011000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010111000000101001110101100000000000001000000000000000000000100000000001000001110111000000000001100000000000000110000000000000000000000000000000000000000010000000000101000000000000100110001000000001010110000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101001110000001010111101011000000000000010000000000000000000001000000000010000011101010000000001011000000000000101100000100000000000000000000000000000000000100000000101110000000000001101100010000000011101100000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010011100000010101111010110000000000000100000000000000000000010000000000100000111011100100000010110000010000001011000000000000000000000000000000000000000001000000001011100000000000011011000100000000111011000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100111000000101001110101100100000000001000000000000000000000100000000001000001110101001000000101100000100000010110000010000000000000000000000000000000000010000000010111000000000000110110001000000001110110000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101001110000001010011101011001000000000010000000000000000000001000000000010000011101110000000001011000000000000101100000000000000000000000000000000000000000100000000101110000000000001101100010000000011101100000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000011100000010101111010110010000000000100000000000000000000010000000000100000111010100000000001110000000000000111000001000000000000000000000000000000000001000000000110100000000010010111000100000000101111000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000111000000101011110101100100000000001000000000000000000000100000000001000001110111001000000011100000100000001110000000000000000000000000000000000000000010000000001101000000000100101110001000000001011110000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100001110000001010011101011000000000000000000000000100000000001000000000010000011101010010000000111000001000000011100000100000000000000000000000000000000000100000000011010000000001001011100010000000010111100000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000011100000010100111010110000000000000000000000001000000000010000000000100000111011100000000001110000000000000111000000000000000000000000000000000000000001000000000110100000000010010111000100000000101111000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111011000000101011110101100000000000000000000000010000000000100000000001000001110101000000000111100000000000011110000010000000000000000000000000000000000010000000011111000000000100111110001000000001111110000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101110110000001010111101011000000000000000000000000100000000001000000000010000011101110010000001111000001000000111100000000000000000000000000000000000000000100000000111110000000001001111100010000000011111100000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011101100000010100111010110010000000000000000000001000000000010000000000100000111010100100000011110000010000001111000001000000000000000000000000000000000001000000001111100000000010011111000100000000111111000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111011000000101001110101100100000000000000000000010000000000100000000001000001110111000000000111100000000000011110000000000000000000000000000000000000000010000000011111000000000100111110001000000001111110000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110110000001010111101011001000000000000000000000100000000001000000000010000011101010000000000000100000000000000010000100000000000000000000000000000000000100000000000001000000000001000010000000000010000010000001000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001101100000010101111010110010000000000000000000001000000000010000000000100000111011100100000000001000010000000000100000000000000000000000000000000000000001000000000000010000000000010000100000000000100000100000010000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011011000000101001110101100000000000001000000000010000000000100000000001000001110101001000000000010000100000000001000010000000000000000000000000000000000010000000000000100000000000100001000000000001000001000000100000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110110000001010011101011000000000000010000000000100000000001000000000010000011101110000000000000100000000000000010000000000000000000000000000000000000000100000000000001000000000001000010000000000010000010000001000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010101100000010101111010110000000000000100000000001000000000010000000000100000111010100000000010001000000000001000100001000000000000000000000000000000000001000000001001010000000000011000100000000000110000100000010000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101011000000101011110101100000000000001000000000010000000000100000000001000001110111001000000100010000100000010001000000000000000000000000000000000000000010000000010010100000000000110001000000000001100001000000100000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101010110000001010011101011001000000000010000000000100000000001000000000010000011101010010000001000100001000000100010000100000000000000000000000000000000000100000000100101000000000001100010000000000011000010000001000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010101100000010100111010110010000000000100000000001000000000010000000000100000111011100000000010001000000000001000100000000000000000000000000000000000000001000000001001010000000000011000100000000000110000100000010000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001011000000101011110101100100000000001000000000010000000000100000000001000001110101000000000010010000000000001001000010000000000000000000000000000000000010000000001000100000000100101001000000000001001001000000100000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100010110000001010111101011001000000000010000000000100000000001000000000010000011101110010000000100100001000000010010000000000000000000000000000000000000000100000000010001000000001001010010000000000010010010000001000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000101100000010100111010110000000000000000000000000000000000000000000000000001111010100100000001001000010000000100100001000000000000000000000000000000000001000000000100010000000010010100100000000000100100100000010000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001011000000101001110101100000000000000000000000000000000000000000000000000011110111000000000010010000000000001001000000000000000000000000000000000000000010000000001000100000000100101001000000000001001001000000100000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101100110000001010111101011000000000000000000000000000000000000000000000000000111101010000000001100100000000000110010000100000000000000000000000000000000000100000000110101000000001001110010000000000011010010000001000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011001100000010101111010110000000000000000000000000000000000000000000000000001111011100100000011001000010000001100100000000000000000000000000000000000000001000000001101010000000010011100100000000000110100100000010000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110011000000101001110101100100000000000000000000000000000000000000000000000011110101001000000110010000100000011001000010000000000000000000000000000000000010000000011010100000000100111001000000000001101001000000100000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101100110000001010011101011001000000000000000000000000000000000000000000000000111101110000000001100100000000000110010000000000000000000000000000000000000000100000000110101000000001001110010000000000011010010000001000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001001100000010101111010110010000000000000000000000000000000000000000000000001111010100000000000101000000000000010100001000000000000000000000000000000000001000000000010010000000000010010100100000000100010100000010000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010011000000101011110101100100000000000000000000000000000000000000000000000011110111001000000001010000100000000101000000000000000000000000000000000000000010000000000100100000000000100101001000000001000101000000100000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100100110000001010011101011000000000000010000000000000000000000000000000000000111101010010000000010100001000000001010000100000000000000000000000000000000000100000000001001000000000001001010010000000010001010000001000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001001100000010100111010110000000000000100000000000000000000000000000000000001111011100000000000101000000000000010100000000000000000000000000000000000000001000000000010010000000000010010100100000000100010100000010000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100011000000101011110101100000000000001000000000000000000000000000000000000011110101000000000101010000000000010101000010000000000000000000000000000000000010000000010110100000000000110101001000000001100101000000100000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101000110000001010111101011000000000000010000000000000000000000000000000000000111101110010000001010100001000000101010000000000000000000000000000000000000000100000000101101000000000001101010010000000011001010000001000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010001100000010100111010110010000000000100000000000000000000000000000000000001111010100100000010101000010000001010100001000000000000000000000000000000000001000000001011010000000000011010100100000000110010100000010000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100011000000101001110101100100000000001000000000000000000000000000000000000011110111000000000101010000000000010101000000000000000000000000000000000000000010000000010110100000000000110101001000000001100101000000100000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000110000001010111101011001000000000010000000000000000000000000000000000000111101010000000000110100000000000011010000100000000000000000000000000000000000100000000011001000000001001011010010000000010011010000001000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000001100000010101111010110010000000000100000000000000000000000000000000000001111011100100000001101000010000000110100000000000000000000000000000000000000001000000000110010000000010010110100100000000100110100000010000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000011000000101001110101100000000000000000000000010000000000000000000000000011110101001000000011010000100000001101000010000000000000000000000000000000000010000000001100100000000100101101001000000001001101000000100000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000110000001010011101011000000000000000000000000100000000000000000000000000111101110000000000110100000000000011010000000000000000000000000000000000000000100000000011001000000001001011010010000000010011010000001000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011110100000010101111010110000000000000000000000001000000000000000000000000001111010100000000011101000000000001110100001000000000000000000000000000000000001000000001111010000000010011110100100000000110110100000010000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111101000000101011110101100000000000000000000000010000000000000000000000000011110111001000000111010000100000011101000000000000000000000000000000000000000010000000011110100000000100111101001000000001101101000000100000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101111010000001010011101011001000000000000000000000100000000000000000000000000111101010010000001110100001000000111010000100000000000000000000000000000000000100000000111101000000001001111010010000000011011010000001000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011110100000010100111010110010000000000000000000001000000000000000000000000001111011100000000011101000000000001110100000000000000000000000000000000000000001000000001111010000000010011110100100000000110110100000010000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011101000000101011110101100100000000000000000000010000000000000000000000000011110101000000000000110000000000000011000010000000000000000000000000000000000010000000000001100000000000100011000000000001010011000000100000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100111010000001010111101011001000000000000000000000100000000000000000000000000111101110010000000001100001000000000110000000000000000000000000000000000000000100000000000011000000000001000110000000000010100110000001000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001110100000010100111010110000000000000100000000001000000000000000000000000001111010100100000000011000010000000001100001000000000000000000000000000000000001000000000000110000000000010001100000000000101001100000010000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011101000000101001110101100000000000001000000000010000000000000000000000000011110111000000000000110000000000000011000000000000000000000000000000000000000010000000000001100000000000100011000000000001010011000000100000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101011010000001010111101011000000000000010000000000100000000000000000000000000111101010000000001001100000000000100110000100000000000000000000000000000000000100000000100111000000000001100110000000000011100110000001000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010110100000010101111010110000000000000100000000001000000000000000000000000001111011100100000010011000010000001001100000000000000000000000000000000000000001000000001001110000000000011001100000000000111001100000010000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101101000000101001110101100100000000001000000000010000000000000000000000000011110101001000000100110000100000010011000010000000000000000000000000000000000010000000010011100000000000110011000000000001110011000000100000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101011010000001010011101011001000000000010000000000100000000000000000000000000111101110000000001001100000000000100110000000000000000000000000000000000000000100000000100111000000000001100110000000000011100110000001000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000110100000010101111010110010000000000100000000001000000000000000000000000001111010100000000001011000000000000101100001000000000000000000000000000000000001000000000100110000000010010101100000000000101101100000010000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001101000000101011110101100100000000001000000000010000000000000000000000000011110111001000000010110000100000001011000000000000000000000000000000000000000010000000001001100000000100101011000000000001011011000000100000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100011010000001010011101011000000000000000000000000000000000001000000000000000111101010010000000101100001000000010110000100000000000000000000000000000000000100000000010011000000001001010110000000000010110110000001000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000110100000010100111010110000000000000000000000000000000000010000000000000001111011100000000001011000000000000101100000000000000000000000000000000000000001000000000100110000000010010101100000000000101101100000010000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110101000000101011110101100000000000000000000000000000000000100000000000000011110101000000000110110000000000011011000010000000000000000000000000000000000010000000011011100000000100111011000000000001111011000000100000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101101010000001010111101011000000000000000000000000000000000001000000000000000111101110010000001101100001000000110110000000000000000000000000000000000000000100000000110111000000001001110110000000000011110110000001000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011010100000010100111010110010000000000000000000000000000000010000000000000001111010100100000011011000010000001101100001000000000000000000000000000000000001000000001101110000000010011101100000000000111101100000010000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110101000000101001110101100100000000000000000000000000000000100000000000000011110111000000000110110000000000011011000000000000000000000000000000000000000010000000011011100000000100111011000000000001111011000000100000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100101010000001010111101011001000000000000000000000000000000001000000000000000111101010000000000011100000000000001110000100000000000000000000000000000000000100000000001011000000000001001110010000000010101110000001000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001010100000010101111010110010000000000000000000000000000000010000000000000001111011100100000000111000010000000011100000000000000000000000000000000000000001000000000010110000000000010011100100000000101011100000010000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010101000000101001110101100000000000001000000000000000000000100000000000000011110101001000000001110000100000000111000010000000000000000000000000000000000010000000000101100000000000100111001000000001010111000000100000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100101010000001010011101011000000000000010000000000000000000001000000000000000111101110000000000011100000000000001110000000000000000000000000000000000000000100000000001011000000000001001110010000000010101110000001000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010010100000010101111010110000000000000100000000000000000000010000000000000001111010100000000010111000000000001011100001000000000000000000000000000000000001000000001011110000000000011011100100000000111011100000010000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100101000000101011110101100000000000001000000000000000000000100000000000000011110111001000000101110000100000010111000000000000000000000000000000000000000010000000010111100000000000110111001000000001110111000000100000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101001010000001010011101011001000000000010000000000000000000001000000000000000111101010010000001011100001000000101110000100000000000000000000000000000000000100000000101111000000000001101110010000000011101110000001000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010010100000010100111010110010000000000100000000000000000000010000000000000001111011100000000010111000000000001011100000000000000000000000000000000000000001000000001011110000000000011011100100000000111011100000010000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000101000000101011110101100100000000001000000000000000000000100000000000000011110101000000000011110000000000001111000010000000000000000000000000000000000010000000001101100000000100101111001000000001011111000000100000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100001010000001010111101011001000000000010000000000000000000001000000000000000111101110010000000111100001000000011110000000000000000000000000000000000000000100000000011011000000001001011110010000000010111110000001000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000010100000010100111010110000000000000000000000001000000000010000000000000001111010100100000001111000010000000111100001000000000000000000000000000000000001000000000110110000000010010111100100000000101111100000010000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000101000000101001110101100000000000000000000000010000000000100000000000000011110111000000000011110000000000001111000000000000000000000000000000000000000010000000001101100000000100101111001000000001011111000000100000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101110010000001010111101011000000000000000000000000100000000001000000000000000111101010000000001111100000000000111110000100000000000000000000000000000000000100000000111111000000001001111110010000000011111110000001000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011100100000010101111010110000000000000000000000001000000000010000000000000001111011100100000011111000010000001111100000000000000000000000000000000000000001000000001111110000000010011111100100000000111111100000010000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111001000000101001110101100100000000000000000000010000000000100000000000000011110101001000000111110000100000011111000010000000000000000000000000000000000010000000011111100000000100111111001000000001111111000000100000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101110010000001010011101011001000000000000000000000100000000001000000000000000111101110000000001111100000000000111110000000000000000000000000000000000000000100000000111111000000001001111110010000000011111110000001000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100100000010101111010110010000000000000000000001000000000010000000000000001111010100000000000000100000000000000010001000000000000000000000000000000000001000000000000001000000000010000010000000000100000010000000000100010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011001000000101011110101100100000000000000000000010000000000100000000000000011110111001000000000001000100000000000100000000000000000000000000000000000000010000000000000010000000000100000100000000001000000100000000001000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110010000001010011101011000000000000010000000000100000000001000000000000000111101010010000000000010001000000000001000100000000000000000000000000000000000100000000000000100000000001000001000000000010000001000000000010001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100100000010100111010110000000000000100000000001000000000010000000000000001111011100000000000000100000000000000010000000000000000000000000000000000000001000000000000001000000000010000010000000000100000010000000000100010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101001000000101011110101100000000000001000000000010000000000100000000000000011110101000000000100001000000000010000100010000000000000000000000000000000000010000000010010010000000000110000100000000001100000100000000001000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101010010000001010111101011000000000000010000000000100000000001000000000000000111101110010000001000010001000000100001000000000000000000000000000000000000000100000000100100100000000001100001000000000011000001000000000010001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010100100000010100111010110010000000000100000000001000000000010000000000000001111010100100000010000100010000001000010001000000000000000000000000000000000001000000001001001000000000011000010000000000110000010000000000100010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101001000000101001110101100100000000001000000000010000000000100000000000000011110111000000000100001000000000010000100000000000000000000000000000000000000010000000010010010000000000110000100000000001100000100000000001000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100010010000001010111101011001000000000010000000000100000000001000000000000000111101010000000000100010000000000010001000100000000000000000000000000000000000100000000010000100000001001010001000000000010010001000000000010001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000100100000010101111010110010000000000100000000001000000000010000000000000001111011100100000001000100010000000100010000000000000000000000000000000000000001000000000100001000000010010100010000000000100100010000000000100010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001001000000101001110101100000000000000000000000000000000000000000000001000011110101001000000010001000100000001000100010000000000000000000000000000000000010000000001000010000000100101000100000000001001000100000000001000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100010010000001010011101011000000000000000000000000000000000000000000000010000111101110000000000100010000000000010001000000000000000000000000000000000000000100000000010000100000001001010001000000000010010001000000000010001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011000100000010101111010110000000000000000000000000000000000000000000000100001111010100000000011000100000000001100010001000000000000000000000000000000000001000000001101001000000010011100010000000000110100010000000000100010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110001000000101011110101100000000000000000000000000000000000000000000001000011110111001000000110001000100000011000100000000000000000000000000000000000000010000000011010010000000100111000100000000001101000100000000001000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101100010000001010011101011001000000000000000000000000000000000000000000010000111101010010000001100010001000000110001000100000000000000000000000000000000000100000000110100100000001001110001000000000011010001000000000010001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011000100000010100111010110010000000000000000000000000000000000000000000100001111011100000000011000100000000001100010000000000000000000000000000000000000001000000001101001000000010011100010000000000110100010000000000100010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010001000000101011110101100100000000000000000000000000000000000000000001000011110101000000000001001000000000000100100010000000000000000000000000000000000010000000000100010000000000100100101000000001000100100000000001000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100100010000001010111101011001000000000000000000000000000000000000000000010000111101110010000000010010001000000001001000000000000000000000000000000000000000100000000001000100000000001001001010000000010001001000000000010001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001000100000010100111010110000000000000100000000000000000000000000000000100001111010100100000000100100010000000010010001000000000000000000000000000000000001000000000010001000000000010010010100000000100010010000000000100010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010001000000101001110101100000000000001000000000000000000000000000000001000011110111000000000001001000000000000100100000000000000000000000000000000000000010000000000100010000000000100100101000000001000100100000000001000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101000010000001010111101011000000000000010000000000000000000000000000000010000111101010000000001010010000000000101001000100000000000000000000000000000000000100000000101100100000000001101001010000000011001001000000000010001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010000100000010101111010110000000000000100000000000000000000000000000000100001111011100100000010100100010000001010010000000000000000000000000000000000000001000000001011001000000000011010010100000000110010010000000000100010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100001000000101001110101100100000000001000000000000000000000000000000001000011110101001000000101001000100000010100100010000000000000000000000000000000000010000000010110010000000000110100101000000001100100100000000001000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000010000001010011101011001000000000010000000000000000000000000000000010000111101110000000001010010000000000101001000000000000000000000000000000000000000100000000101100100000000001101001010000000011001001000000000010001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000000100000010101111010110010000000000100000000000000000000000000000000100001111010100000000001100100000000000110010001000000000000000000000000000000000001000000000110001000000010010110010100000000100110010000000000100010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000001000000101011110101100100000000001000000000000000000000000000000001000011110111001000000011001000100000001100100000000000000000000000000000000000000010000000001100010000000100101100101000000001001100100000000001000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000010000001010011101011000000000000000000000000100000000000000000000010000111101010010000000110010001000000011001000100000000000000000000000000000000000100000000011000100000001001011001010000000010011001000000000010001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000000100000010100111010110000000000000000000000001000000000000000000000100001111011100000000001100100000000000110010000000000000000000000000000000000000001000000000110001000000010010110010100000000100110010000000000100010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111110000000101011110101100000000000000000000000010000000000000000000001000011110101000000000111001000000000011100100010000000000000000000000000000000000010000000011110010000000100111100101000000001101100100000000001000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101111100000001010111101011000000000000000000000000100000000000000000000010000111101110010000001110010001000000111001000000000000000000000000000000000000000100000000111100100000001001111001010000000011011001000000000010001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011111000000010100111010110010000000000000000000001000000000000000000000100001111010100100000011100100010000001110010001000000000000000000000000000000000001000000001111001000000010011110010100000000110110010000000000100010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111110000000101001110101100100000000000000000000010000000000000000000001000011110111000000000111001000000000011100100000000000000000000000000000000000000010000000011110010000000100111100101000000001101100100000000001000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100111100000001010111101011001000000000000000000000100000000000000000000010000111101010000000000001010000000000000101000100000000000000000000000000000000000100000000000010100000000001000101000000000010100101000000000010001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001111000000010101111010110010000000000000000000001000000000000000000000100001111011100100000000010100010000000001010000000000000000000000000000000000000001000000000000101000000000010001010000000000101001010000000000100010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011110000000101001110101100000000000001000000000010000000000000000000001000011110101001000000000101000100000000010100010000000000000000000000000000000000010000000000001010000000000100010100000000001010010100000000001000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100111100000001010011101011000000000000010000000000100000000000000000000010000111101110000000000001010000000000000101000000000000000000000000000000000000000100000000000010100000000001000101000000000010100101000000000010001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010111000000010101111010110000000000000100000000001000000000000000000000100001111010100000000010010100000000001001010001000000000000000000000000000000000001000000001001101000000000011001010000000000111001010000000000100010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101110000000101011110101100000000000001000000000010000000000000000000001000011110111001000000100101000100000010010100000000000000000000000000000000000000010000000010011010000000000110010100000000001110010100000000001000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101011100000001010011101011001000000000010000000000100000000000000000000010000111101010010000001001010001000000100101000100000000000000000000000000000000000100000000100110100000000001100101000000000011100101000000000010001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010111000000010100111010110010000000000100000000001000000000000000000000100001111011100000000010010100000000001001010000000000000000000000000000000000000001000000001001101000000000011001010000000000111001010000000000100010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001110000000101011110101100100000000001000000000010000000000000000000001000011110101000000000010101000000000001010100010000000000000000000000000000000000010000000001001010000000100101010100000000001011010100000000001000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100011100000001010111101011001000000000010000000000100000000000000000000010000111101110010000000101010001000000010101000000000000000000000000000000000000000100000000010010100000001001010101000000000010110101000000000010001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000111000000010100111010110000000000000000000000000000000000010000000000100001111010100100000001010100010000000101010001000000000000000000000000000000000001000000000100101000000010010101010000000000101101010000000000100010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001110000000101001110101100000000000000000000000000000000000100000000001000011110111000000000010101000000000001010100000000000000000000000000000000000000010000000001001010000000100101010100000000001011010100000000001000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101101100000001010111101011000000000000000000000000000000000001000000000010000111101010000000001101010000000000110101000100000000000000000000000000000000000100000000110110100000001001110101000000000011110101000000000010001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011011000000010101111010110000000000000000000000000000000000010000000000100001111011100100000011010100010000001101010000000000000000000000000000000000000001000000001101101000000010011101010000000000111101010000000000100010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110110000000101001110101100100000000000000000000000000000000100000000001000011110101001000000110101000100000011010100010000000000000000000000000000000000010000000011011010000000100111010100000000001111010100000000001000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101101100000001010011101011001000000000000000000000000000000001000000000010000111101110000000001101010000000000110101000000000000000000000000000000000000000100000000110110100000001001110101000000000011110101000000000010001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001011000000010101111010110010000000000000000000000000000000010000000000100001111010100000000000110100000000000011010001000000000000000000000000000000000001000000000010101000000000010011010100000000101011010000000000100010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010110000000101011110101100100000000000000000000000000000000100000000001000011110111001000000001101000100000000110100000000000000000000000000000000000000010000000000101010000000000100110101000000001010110100000000001000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100101100000001010011101011000000000000010000000000000000000001000000000010000111101010010000000011010001000000001101000100000000000000000000000000000000000100000000001010100000000001001101010000000010101101000000000010001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001011000000010100111010110000000000000100000000000000000000010000000000100001111011100000000000110100000000000011010000000000000000000000000000000000000001000000000010101000000000010011010100000000101011010000000000100010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100110000000101011110101100000000000001000000000000000000000100000000001000011110101000000000101101000000000010110100010000000000000000000000000000000000010000000010111010000000000110110101000000001110110100000000001000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101001100000001010111101011000000000000010000000000000000000001000000000010000111101110010000001011010001000000101101000000000000000000000000000000000000000100000000101110100000000001101101010000000011101101000000000010001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010011000000010100111010110010000000000100000000000000000000010000000000100001111010100100000010110100010000001011010001000000000000000000000000000000000001000000001011101000000000011011010100000000111011010000000000100010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100110000000101001110101100100000000001000000000000000000000100000000001000011110111000000000101101000000000010110100000000000000000000000000000000000000010000000010111010000000000110110101000000001110110100000000001000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100001100000001010111101011001000000000010000000000000000000001000000000010000111101010000000000111010000000000011101000100000000000000000000000000000000000100000000011010100000001001011101010000000010111101000000000010001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000011000000010101111010110010000000000100000000000000000000010000000000100001111011100100000001110100010000000111010000000000000000000000000000000000000001000000000110101000000010010111010100000000101111010000000000100010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000110000000101001110101100000000000000000000000010000000000100000000001000011110101001000000011101000100000001110100010000000000000000000000000000000000010000000001101010000000100101110101000000001011110100000000001000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100001100000001010011101011000000000000000000000000100000000001000000000010000111101110000000000111010000000000011101000000000000000000000000000000000000000100000000011010100000001001011101010000000010111101000000000010001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011101000000010101111010110000000000000000000000001000000000010000000000100001111010100000000011110100000000001111010001000000000000000000000000000000000001000000001111101000000010011111010100000000111111010000000000100010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111010000000101011110101100000000000000000000000010000000000100000000001000011110111001000000111101000100000011110100000000000000000000000000000000000000010000000011111010000000100111110101000000001111110100000000001000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101110100000001010011101011001000000000000000000000100000000001000000000010000111101010010000001111010001000000111101000100000000000000000000000000000000000100000000111110100000001001111101010000000011111101000000000010001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011101000000010100111010110010000000000000000000001000000000010000000000100001111011100000000011110100000000001111010000000000000000000000000000000000000001000000001111101000000010011111010100000000111111010000000000100010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011010000000101011110101100100000000000000000000010000000000100000000001000011110101000000000000011000000000000001100010000000000000000000000000000000000010000000000000110000000000100001100000000001000001100000100001000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110100000001010111101011001000000000000000000000100000000001000000000010000111101110010000000000110001000000000011000000000000000000000000000000000000000100000000000001100000000001000011000000000010000011000001000010001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001101000000010100111010110000000000000100000000001000000000010000000000100001111010100100000000001100010000000000110001000000000000000000000000000000000001000000000000011000000000010000110000000000100000110000010000100010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011010000000101001110101100000000000001000000000010000000000100000000001000011110111000000000000011000000000000001100000000000000000000000000000000000000010000000000000110000000000100001100000000001000001100000100001000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101010100000001010111101011000000000000010000000000100000000001000000000010000111101010000000001000110000000000100011000100000000000000000000000000000000000100000000100101100000000001100011000000000011000011000001000010001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010101000000010101111010110000000000000100000000001000000000010000000000100001111011100100000010001100010000001000110000000000000000000000000000000000000001000000001001011000000000011000110000000000110000110000010000100010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101010000000101001110101100100000000001000000000010000000000100000000001000011110101001000000100011000100000010001100010000000000000000000000000000000000010000000010010110000000000110001100000000001100001100000100001000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101010100000001010011101011001000000000010000000000100000000001000000000010000111101110000000001000110000000000100011000000000000000000000000000000000000000100000000100101100000000001100011000000000011000011000001000010001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000101000000010101111010110010000000000100000000001000000000010000000000100001111010100000000001001100000000000100110001000000000000000000000000000000000001000000000100011000000010010100110000000000100100110000010000100010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001010000000101011110101100100000000001000000000010000000000100000000001000011110111001000000010011000100000001001100000000000000000000000000000000000000010000000001000110000000100101001100000000001001001100000100001000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100010100000001010000011011000000000000000000000000000000000000000000000000000000001010010000000100110001000000010011000100000000000000000000000000000000000100000000010001100000001001010011000000000010010011000001000010001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000101000000010100000110110000000000000000000000000000000000000000000000000000000011100000000001001100000000000100110000000000000000000000000000000000000001000000000100011000000010010100110000000000100100110000010000100010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110010000000101010001101100000000000000000000000000000000000000000000000000000000101000000000110011000000000011001100010000000000000000000000000000000000010000000011010110000000100111001100000000001101001100000100001000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101100100000001010100011011000000000000000000000000000000000000000000000000000000001110010000001100110001000000110011000000000000000000000000000000000000000100000000110101100000001001110011000000000011010011000001000010001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011001000000010100000110110010000000000000000000000000000000000000000000000000000010100100000011001100010000001100110001000000000000000000000000000000000001000000001101011000000010011100110000000000110100110000010000100010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110010000000101000001101100100000000000000000000000000000000000000000000000000000111000000000110011000000000011001100000000000000000000000000000000000000010000000011010110000000100111001100000000001101001100000100001000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100100100000001010100011011001000000000000000000000000000000000000000000000000000001010000000000010110000000000001011000100000000000000000000000000000000000100000000001001100000000001001011010000000010001011000001000010001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001001000000010101000110110010000000000000000000000000000000000000000000000000000011100100000000101100010000000010110000000000000000000000000000000000000001000000000010011000000000010010110100000000100010110000010000100010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010010000000101000001101100000000000001000000000000000000000000000000000000000000101001000000001011000100000000101100010000000000000000000000000000000000010000000000100110000000000100101101000000001000101100000100001000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100100100000001010000011011000000000000010000000000000000000000000000000000000000001110000000000010110000000000001011000000000000000000000000000000000000000100000000001001100000000001001011010000000010001011000001000010001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010001000000010101000110110000000000000100000000000000000000000000000000000000000010100000000010101100000000001010110001000000000000000000000000000000000001000000001011011000000000011010110100000000110010110000010000100010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100010000000101010001101100000000000001000000000000000000000000000000000000000000111001000000101011000100000010101100000000000000000000000000000000000000010000000010110110000000000110101101000000001100101100000100001000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000100000001010000011011001000000000010000000000000000000000000000000000000000001010010000001010110001000000101011000100000000000000000000000000000000000100000000101101100000000001101011010000000011001011000001000010001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010001000000010100000110110010000000000100000000000000000000000000000000000000000011100000000010101100000000001010110000000000000000000000000000000000000001000000001011011000000000011010110100000000110010110000010000100010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000010000000101010001101100100000000001000000000000000000000000000000000000000000101000000000011011000000000001101100010000000000000000000000000000000000010000000001100110000000100101101101000000001001101100000100001000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000100000001010100011011001000000000010000000000000000000000000000000000000000001110010000000110110001000000011011000000000000000000000000000000000000000100000000011001100000001001011011010000000010011011000001000010001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000001000000010100000110110000000000000000000000001000000000000000000000000000000010100100000001101100010000000110110001000000000000000000000000000000000001000000000110011000000010010110110100000000100110110000010000100010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000010000000101000001101100000000000000000000000010000000000000000000000000000000111000000000011011000000000001101100000000000000000000000000000000000000010000000001100110000000100101101101000000001001101100000100001000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101111000000001010100011011000000000000000000000000100000000000000000000000000000001010000000001110110000000000111011000100000000000000000000000000000000000100000000111101100000001001111011010000000011011011000001000010001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011110000000010101000110110000000000000000000000001000000000000000000000000000000011100100000011101100010000001110110000000000000000000000000000000000000001000000001111011000000010011110110100000000110110110000010000100010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111100000000101000001101100100000000000000000000010000000000000000000000000000000101001000000111011000100000011101100010000000000000000000000000000000000010000000011110110000000100111101101000000001101101100000100001000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101111000000001010000011011001000000000000000000000100000000000000000000000000000001110000000001110110000000000111011000000000000000000000000000000000000000100000000111101100000001001111011010000000011011011000001000010001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001110000000010101000110110010000000000000000000001000000000000000000000000000000010100000000000011100000000000001110001000000000000000000000000000000000001000000000000111000000000010001110000000000101001110000010000100010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011100000000101010001101100100000000000000000000010000000000000000000000000000000111001000000000111000100000000011100000000000000000000000000000000000000010000000000001110000000000100011100000000001010011100000100001000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100111000000001010000011011000000000000010000000000100000000000000000000000000000001010010000000001110001000000000111000100000000000000000000000000000000000100000000000011100000000001000111000000000010100111000001000010001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001110000000010100000110110000000000000100000000001000000000000000000000000000000011100000000000011100000000000001110000000000000000000000000000000000000001000000000000111000000000010001110000000000101001110000010000100010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101100000000101010001101100000000000001000000000010000000000000000000000000000000101000000000100111000000000010011100010000000000000000000000000000000000010000000010011110000000000110011100000000001110011100000100001000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101011000000001010100011011000000000000010000000000100000000000000000000000000000001110010000001001110001000000100111000000000000000000000000000000000000000100000000100111100000000001100111000000000011100111000001000010001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010110000000010100000110110010000000000100000000001000000000000000000000000000000010100100000010011100010000001001110001000000000000000000000000000000000001000000001001111000000000011001110000000000111001110000010000100010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101100000000101000001101100100000000001000000000010000000000000000000000000000000111000000000100111000000000010011100000000000000000000000000000000000000010000000010011110000000000110011100000000001110011100000100001000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100011000000001010100011011001000000000010000000000100000000000000000000000000000001010000000000101110000000000010111000100000000000000000000000000000000000100000000010011100000001001010111000000000010110111000001000010001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000110000000010101000110110010000000000100000000001000000000000000000000000000000011100100000001011100010000000101110000000000000000000000000000000000000001000000000100111000000010010101110000000000101101110000010000100010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001100000000101000001101100000000000000000000000000000000000100000000000000000000101001000000010111000100000001011100010000000000000000000000000000000000010000000001001110000000100101011100000000001011011100000100001000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100011000000001010000011011000000000000000000000000000000000001000000000000000000001110000000000101110000000000010111000000000000000000000000000000000000000100000000010011100000001001010111000000000010110111000001000010001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011010000000010101000110110000000000000000000000000000000000010000000000000000000010100000000011011100000000001101110001000000000000000000000000000000000001000000001101111000000010011101110000000000111101110000010000100010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110100000000101010001101100000000000000000000000000000000000100000000000000000000111001000000110111000100000011011100000000000000000000000000000000000000010000000011011110000000100111011100000000001111011100000100001000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101101000000001010000011011001000000000000000000000000000000001000000000000000000001010010000001101110001000000110111000100000000000000000000000000000000000100000000110111100000001001110111000000000011110111000001000010001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011010000000010100000110110010000000000000000000000000000000010000000000000000000011100000000011011100000000001101110000000000000000000000000000000000000001000000001101111000000010011101110000000000111101110000010000100010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010100000000101010001101100100000000000000000000000000000000100000000000000000000101000000000001111000000000000111100010000000000000000000000000000000000010000000000101110000000000100111101000000001010111100000100001000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100101000000001010100011011001000000000000000000000000000000001000000000000000000001110010000000011110001000000001111000000000000000000000000000000000000000100000000001011100000000001001111010000000010101111000001000010001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001010000000010100000110110000000000000100000000000000000000010000000000000000000010100100000000111100010000000011110001000000000000000000000000000000000001000000000010111000000000010011110100000000101011110000010000100010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010100000000101000001101100000000000001000000000000000000000100000000000000000000111000000000001111000000000000111100000000000000000000000000000000000000010000000000101110000000000100111101000000001010111100000100001000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101001000000001010100011011000000000000010000000000000000000001000000000000000000001010000000001011110000000000101111000100000000000000000000000000000000000100000000101111100000000001101111010000000011101111000001000010001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010010000000010101000110110000000000000100000000000000000000010000000000000000000011100100000010111100010000001011110000000000000000000000000000000000000001000000001011111000000000011011110100000000111011110000010000100010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100100000000101000001101100100000000001000000000000000000000100000000000000000000101001000000101111000100000010111100010000000000000000000000000000000000010000000010111110000000000110111101000000001110111100000100001000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101001000000001010000011011001000000000010000000000000000000001000000000000000000001110000000001011110000000000101111000000000000000000000000000000000000000100000000101111100000000001101111010000000011101111000001000010001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000010000000010101000110110010000000000100000000000000000000010000000000000000000010100000000001111100000000000111110001000000000000000000000000000000000001000000000110111000000010010111110100000000101111110000010000100010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000100000000101010001101100100000000001000000000000000000000100000000000000000000111001000000011111000100000001111100000000000000000000000000000000000000010000000001101110000000100101111101000000001011111100000100001000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100001000000001010000011011000000000000000000000000100000000001000000000000000000001010010000000111110001000000011111000100000000000000000000000000000000000100000000011011100000001001011111010000000010111111000001000010001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000010000000010100000110110000000000000000000000001000000000010000000000000000000011100000000001111100000000000111110000000000000000000000000000000000000001000000000110111000000010010111110100000000101111110000010000100010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111000000000101010001101100000000000000000000000010000000000100000000000000000000101000000000111111000000000011111100010000000000000000000000000000000000010000000011111110000000100111111101000000001111111100000100001000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101110000000001010100011011000000000000000000000000100000000001000000000000000000001110010000001111110001000000111111000000000000000000000000000000000000000100000000111111100000001001111111010000000011111111000001000010001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011100000000010100000110110010000000000000000000001000000000010000000000000000000010100100000011111100010000001111110001000000000000000000000000000000000001000000001111111000000010011111110100000000111111110000010000100010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111000000000101000001101100100000000000000000000010000000000100000000000000000000111000000000111111000000000011111100000000000000000000000000000000000000010000000011111110000000100111111101000000001111111100000100001000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110000000001010100011011001000000000000000000000100000000001000000000000000000001010000000000000001000000000000000100100000000000000000000000000000000000100000000000000010000000001000000100000000010000000100000000001001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100000000010101000110110010000000000000000000001000000000010000000000000000000011100100000000000010010000000000001000000000000000000000000000000000000001000000000000000100000000010000001000000000100000001000000000010010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000000000101000001101100000000000001000000000010000000000100000000000000000000101001000000000000100100000000000010010000000000000000000000000000000000010000000000000001000000000100000010000000001000000010000000000100100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110000000001010000011011000000000000010000000000100000000001000000000000000000001110000000000000001000000000000000100000000000000000000000000000000000000100000000000000010000000001000000100000000010000000100000000001001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010100000000010101000110110000000000000100000000001000000000010000000000000000000010100000000010000010000000001000001001000000000000000000000000000000000001000000001001000100000000011000001000000000110000001000000000010010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101000000000101010001101100000000000001000000000010000000000100000000000000000000111001000000100000100100000010000010000000000000000000000000000000000000010000000010010001000000000110000010000000001100000010000000000100100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101010000000001010000011011001000000000010000000000100000000001000000000000000000001010010000001000001001000000100000100100000000000000000000000000000000000100000000100100010000000001100000100000000011000000100000000001001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010100000000010100000110110010000000000100000000001000000000010000000000000000000011100000000010000010000000001000001000000000000000000000000000000000000001000000001001000100000000011000001000000000110000001000000000010010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001000000000101010001101100100000000001000000000010000000000100000000000000000000101000000000010000100000000001000010010000000000000000000000000000000000010000000001000001000000100101000010000000001001000010000000000100100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100010000000001010100011011001000000000010000000000100000000001000000000000000000001110010000000100001001000000010000100000000000000000000000000000000000000100000000010000010000001001010000100000000010010000100000000001001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000100000000010100000110110000000000000000000000000000000000000000000000100000000010100100000001000010010000000100001001000000000000000000000000000000000001000000000100000100000010010100001000000000100100001000000000010010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001000000000101000001101100000000000000000000000000000000000000000000001000000000111000000000010000100000000001000010000000000000000000000000000000000000010000000001000001000000100101000010000000001001000010000000000100100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101100000000001010100011011000000000000000000000000000000000000000000000010000000001010000000001100001000000000110000100100000000000000000000000000000000000100000000110100010000001001110000100000000011010000100000000001001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011000000000010101000110110000000000000000000000000000000000000000000000100000000011100100000011000010010000001100001000000000000000000000000000000000000001000000001101000100000010011100001000000000110100001000000000010010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110000000000101000001101100100000000000000000000000000000000000000000001000000000101001000000110000100100000011000010010000000000000000000000000000000000010000000011010001000000100111000010000000001101000010000000000100100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101100000000001010000011011001000000000000000000000000000000000000000000010000000001110000000001100001000000000110000100000000000000000000000000000000000000100000000110100010000001001110000100000000011010000100000000001001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001000000000010101000110110010000000000000000000000000000000000000000000100000000010100000000000100010000000000010001001000000000000000000000000000000000001000000000010000100000000010010001100000000100010001000000000010010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010000000000101010001101100100000000000000000000000000000000000000000001000000000111001000000001000100100000000100010000000000000000000000000000000000000010000000000100001000000000100100011000000001000100010000000000100100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100100000000001010000011011000000000000010000000000000000000000000000000010000000001010010000000010001001000000001000100100000000000000000000000000000000000100000000001000010000000001001000110000000010001000100000000001001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001000000000010100000110110000000000000100000000000000000000000000000000100000000011100000000000100010000000000010001000000000000000000000000000000000000001000000000010000100000000010010001100000000100010001000000000010010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100000000000101010001101100000000000001000000000000000000000000000000001000000000101000000000101000100000000010100010010000000000000000000000000000000000010000000010110001000000000110100011000000001100100010000000000100100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000000000001010100011011000000000000010000000000000000000000000000000010000000001110010000001010001001000000101000100000000000000000000000000000000000000100000000101100010000000001101000110000000011001000100000000001001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010000000000010100000110110010000000000100000000000000000000000000000000100000000010100100000010100010010000001010001001000000000000000000000000000000000001000000001011000100000000011010001100000000110010001000000000010010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100000000000101000001101100100000000001000000000000000000000000000000001000000000111000000000101000100000000010100010000000000000000000000000000000000000010000000010110001000000000110100011000000001100100010000000000100100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000000000001010100011011001000000000010000000000000000000000000000000010000000001010000000000110001000000000011000100100000000000000000000000000000000000100000000011000010000001001011000110000000010011000100000000001001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000000000000010101000110110010000000000100000000000000000000000000000000100000000011100100000001100010010000000110001000000000000000000000000000000000000001000000000110000100000010010110001100000000100110001000000000010010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000000000000101000001101100000000000000000000000010000000000000000000001000000000101001000000011000100100000001100010010000000000000000000000000000000000010000000001100001000000100101100011000000001001100010000000000100100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000000000001010000011011000000000000000000000000100000000000000000000010000000001110000000000110001000000000011000100000000000000000000000000000000000000100000000011000010000001001011000110000000010011000100000000001001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000010111010110000000010101000110110000000000000000000000001000000000000000000000100000000010100000000011100010000000001110001001000000000000000000000000000000000001000000001111000100000010011110001100000000110110001000000000010010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000101110101001000000101010001101100000000000000000000000010000000000000000000001000000000111001000000111000100100000011100010000000000000000000000000000000000000010000000011110001000000100111100011000000001101100010000000000100100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000001011101011110000001010000011011001000000000000000000000100000000000000000000010000000001010010000001110001001000000111000100100000000000000000000000000000000000100000000111100010000001001111000110000000011011000100000000001001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000010111010101010000010100000110110010000000000000000000001000000000000000000000100000000011100000000011100010000000001110001000000000000000000000000000000000000001000000001111000100000010011110001100000000110110001000000000010010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000101110001101100000101010001101100100000000000000000000010000000000000000000001000000000101000000000000100100000000000010010010000000000000000000000000000000000010000000000001001000000000100010010000000001010010010000000000100100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100011111000001010100011011001000000000000000000000100000000000000000000010000000001110010000000001001001000000000100100000000000000000000000000000000000000100000000000010010000000001000100100000000010100100100000000001001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000111110000010100000110110000000000000100000000001000000000000000000000100000000010100100000000010010010000000001001001000000000000000000000000000000000001000000000000100100000000010001001000000000101001001000000000010010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001111100000101000001101100000000000001000000000010000000000000000000001000000000111000000000000100100000000000010010000000000000000000000000000000000000010000000000001001000000000100010010000000001010010010000000000100100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101101111000001010100011011000000000000010000000000100000000000000000000010000000001010000000001001001000000000100100100100000000000000000000000000000000000100000000100110010000000001100100100000000011100100100000000001001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011011110000010101000110110000000000000100000000001000000000000000000000100000000011100100000010010010010000001001001000000000000000000000000000000000000001000000001001100100000000011001001000000000111001001000000000010010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110111100000101000001101100100000000001000000000010000000000000000000001000000000101001000000100100100100000010010010010000000000000000000000000000000000010000000010011001000000000110010010000000001110010010000000000100100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101101111000001010000011011001000000000010000000000100000000000000000000010000000001110000000001001001000000000100100100000000000000000000000000000000000000100000000100110010000000001100100100000000011100100100000000001001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001011110000010101000110110010000000000100000000001000000000000000000000100000000010100000000001010010000000000101001001000000000000000000000000000000000001000000000100100100000010010101001000000000101101001000000000010010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010111100000101010001101100100000000001000000000010000000000000000000001000000000111001000000010100100100000001010010000000000000000000000000000000000000010000000001001001000000100101010010000000001011010010000000000100100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100101111000001010000011011000000000000000000000000000000000001000000000010000000001010010000000101001001000000010100100100000000000000000000000000000000000100000000010010010000001001010100100000000010110100100000000001001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001011110000010100000110110000000000000000000000000000000000010000000000100000000011100000000001010010000000000101001000000000000000000000000000000000000001000000000100100100000010010101001000000000101101001000000000010010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110100111100000101010001101100000000000000000000000000000000000100000000001000000000101000000000110100100000000011010010010000000000000000000000000000000000010000000011011001000000100111010010000000001111010010000000000100100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101001111000001010100011011000000000000000000000000000000000001000000000010000000001110010000001101001001000000110100100000000000000000000000000000000000000100000000110110010000001001110100100000000011110100100000000001001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010011110000010100000110110010000000000000000000000000000000010000000000100000000010100100000011010010010000001101001001000000000000000000000000000000000001000000001101100100000010011101001000000000111101001000000000010010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100111100000101000001101100100000000000000000000000000000000100000000001000000000111000000000110100100000000011010010000000000000000000000000000000000000010000000011011001000000100111010010000000001111010010000000000100100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100001111000001010100011011001000000000000000000000000000000001000000000010000000001010000000000011001000000000001100100100000000000000000000000000000000000100000000001010010000000001001100110000000010101100100000000001001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000011110000010101000110110010000000000000000000000000000000010000000000100000000011100100000000110010010000000011001000000000000000000000000000000000000001000000000010100100000000010011001100000000101011001000000000010010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000111100000101000001101100000000000001000000000000000000000100000000001000000000101001000000001100100100000000110010010000000000000000000000000000000000010000000000101001000000000100110011000000001010110010000000000100100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100001111000001010000011011000000000000010000000000000000000001000000000010000000001110000000000011001000000000001100100000000000000000000000000000000000000100000000001010010000000001001100110000000010101100100000000001001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011101110000010101000110110000000000000100000000000000000000010000000000100000000010100000000010110010000000001011001001000000000000000000000000000000000001000000001011100100000000011011001100000000111011001000000000010010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110111011100000101010001101100000000000001000000000000000000000100000000001000000000111001000000101100100100000010110010000000000000000000000000000000000000010000000010111001000000000110110011000000001110110010000000000100100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101110111000001010000011011001000000000010000000000000000000001000000000010000000001010010000001011001001000000101100100100000000000000000000000000000000000100000000101110010000000001101100110000000011101100100000000001001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011101110000010100000110110010000000000100000000000000000000010000000000100000000011100000000010110010000000001011001000000000000000000000000000000000000001000000001011100100000000011011001100000000111011001000000000010010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110011011100000101010001101100100000000001000000000000000000000100000000001000000000101000000000011100100000000001110010010000000000000000000000000000000000010000000001101001000000100101110011000000001011110010000000000100100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100110111000001010100011011001000000000010000000000000000000001000000000010000000001110010000000111001001000000011100100000000000000000000000000000000000000100000000011010010000001001011100110000000010111100100000000001001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001101110000010100000110110000000000000000000000001000000000010000000000100000000010100100000001110010010000000111001001000000000000000000000000000000000001000000000110100100000010010111001100000000101111001000000000010010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011011100000101000001101100000000000000000000000010000000000100000000001000000000111000000000011100100000000001110010000000000000000000000000000000000000010000000001101001000000100101110011000000001011110010000000000100100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101010111000001010100011011000000000000000000000000100000000001000000000010000000001010000000001111001000000000111100100100000000000000000000000000000000000100000000111110010000001001111100110000000011111100100000000001001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010101110000010101000110110000000000000000000000001000000000010000000000100000000011100100000011110010010000001111001000000000000000000000000000000000000001000000001111100100000010011111001100000000111111001000000000010010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110101011100000101000001101100100000000000000000000010000000000100000000001000000000101001000000111100100100000011110010010000000000000000000000000000000000010000000011111001000000100111110011000000001111110010000000000100100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101010111000001010000011011001000000000000000000000100000000001000000000010000000001110000000001111001000000000111100100000000000000000000000000000000000000100000000111110010000001001111100110000000011111100100000000001001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000101110000010101000110110010000000000000000000001000000000010000000000100000000010100000000000001010000000000000101001000000000000000000000000000000000001000000000000010100000000010000101000000000100000101000010000010010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001011100000101010001101100100000000000000000000010000000000100000000001000000000111001000000000010100100000000001010000000000000000000000000000000000000010000000000000101000000000100001010000000001000001010000100000100100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100010111000001010000011011000000000000010000000000100000000001000000000010000000001010010000000000101001000000000010100100000000000000000000000000000000000100000000000001010000000001000010100000000010000010100001000001001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000101110000010100000110110000000000000100000000001000000000010000000000100000000011100000000000001010000000000000101000000000000000000000000000000000000001000000000000010100000000010000101000000000100000101000010000010010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110011100000101010001101100000000000001000000000010000000000100000000001000000000101000000000100010100000000010001010010000000000000000000000000000000000010000000010010101000000000110001010000000001100001010000100000100100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101100111000001010100011011000000000000010000000000100000000001000000000010000000001110010000001000101001000000100010100000000000000000000000000000000000000100000000100101010000000001100010100000000011000010100001000001001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011001110000010100000110110010000000000100000000001000000000010000000000100000000010100100000010001010010000001000101001000000000000000000000000000000000001000000001001010100000000011000101000000000110000101000010000010010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110011100000101000001101100100000000001000000000010000000000100000000001000000000111000000000100010100000000010001010000000000000000000000000000000000000010000000010010101000000000110001010000000001100001010000100000100100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100100111000001010100011011001000000000010000000000100000000001000000000010000000001010000000000100101000000000010010100100000000000000000000000000000000000100000000010001010000001001010010100000000010010010100001000001001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001001110000010101000110110010000000000100000000001000000000010000000000100000000011100100000001001010010000000100101000000000000000000000000000000000000001000000000100010100000010010100101000000000100100101000010000010010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010011100000101000001101100000000000000000000000000000000000000000000000000010000101001000000010010100100000001001010010000000000000000000000000000000000010000000001000101000000100101001010000000001001001010000100000100100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100100111000001010000011011000000000000000000000000000000000000000000000000000100001110000000000100101000000000010010100000000000000000000000000000000000000100000000010001010000001001010010100000000010010010100001000001001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010001110000010101000110110000000000000000000000000000000000000000000000000001000010100000000011001010000000001100101001000000000000000000000000000000000001000000001101010100000010011100101000000000110100101000010000010010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110100011100000101010001101100000000000000000000000000000000000000000000000000010000111001000000110010100100000011001010000000000000000000000000000000000000010000000011010101000000100111001010000000001101001010000100000100100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101000111000001010000011011001000000000000000000000000000000000000000000000000100001010010000001100101001000000110010100100000000000000000000000000000000000100000000110101010000001001110010100000000011010010100001000001001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010001110000010100000110110010000000000000000000000000000000000000000000000001000011100000000011001010000000001100101000000000000000000000000000000000000001000000001101010100000010011100101000000000110100101000010000010010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000011100000101010001101100100000000000000000000000000000000000000000000000010000101000000000001010100000000000101010010000000000000000000000000000000000010000000000100101000000000100101011000000001000101010000100000100100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100000111000001010100011011001000000000000000000000000000000000000000000000000100001110010000000010101001000000001010100000000000000000000000000000000000000100000000001001010000000001001010110000000010001010100001000001001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000001110000010100000110110000000000000100000000000000000000000000000000000001000010100100000000101010010000000010101001000000000000000000000000000000000001000000000010010100000000010010101100000000100010101000010000010010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000011100000101000001101100000000000001000000000000000000000000000000000000010000111000000000001010100000000000101010000000000000000000000000000000000000010000000000100101000000000100101011000000001000101010000100000100100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101111011000001010100011011000000000000010000000000000000000000000000000000000100001010000000001010101000000000101010100100000000000000000000000000000000000100000000101101010000000001101010110000000011001010100001000001001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011110110000010101000110110000000000000100000000000000000000000000000000000001000011100100000010101010010000001010101000000000000000000000000000000000000001000000001011010100000000011010101100000000110010101000010000010010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111101100000101000001101100100000000001000000000000000000000000000000000000010000101001000000101010100100000010101010010000000000000000000000000000000000010000000010110101000000000110101011000000001100101010000100000100100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101111011000001010000011011001000000000010000000000000000000000000000000000000100001110000000001010101000000000101010100000000000000000000000000000000000000100000000101101010000000001101010110000000011001010100001000001001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001110110000010101000110110010000000000100000000000000000000000000000000000001000010100000000001101010000000000110101001000000000000000000000000000000000001000000000110010100000010010110101100000000100110101000010000010010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011101100000101010001101100100000000001000000000000000000000000000000000000010000111001000000011010100100000001101010000000000000000000000000000000000000010000000001100101000000100101101011000000001001101010000100000100100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100111011000001010000011011000000000000000000000000100000000000000000000000000100001010010000000110101001000000011010100100000000000000000000000000000000000100000000011001010000001001011010110000000010011010100001000001001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001110110000010100000110110000000000000000000000001000000000000000000000000001000011100000000001101010000000000110101000000000000000000000000000000000000001000000000110010100000010010110101100000000100110101000010000010010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110101101100000101010001101100000000000000000000000010000000000000000000000000010000101000000000111010100000000011101010010000000000000000000000000000000000010000000011110101000000100111101011000000001101101010000100000100100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101011011000001010100011011000000000000000000000000100000000000000000000000000100001110010000001110101001000000111010100000000000000000000000000000000000000100000000111101010000001001111010110000000011011010100001000001001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010110110000010100000110110010000000000000000000001000000000000000000000000001000010100100000011101010010000001110101001000000000000000000000000000000000001000000001111010100000010011110101100000000110110101000010000010010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110101101100000101000001101100100000000000000000000010000000000000000000000000010000111000000000111010100000000011101010000000000000000000000000000000000000010000000011110101000000100111101011000000001101101010000100000100100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100011011000001010100011011001000000000000000000000100000000000000000000000000100001010000000000001101000000000000110100100000000000000000000000000000000000100000000000011010000000001000110100000000010100110100001000001001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000110110000010101000110110010000000000000000000001000000000000000000000000001000011100100000000011010010000000001101000000000000000000000000000000000000001000000000000110100000000010001101000000000101001101000010000010010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001101100000101000001101100000000000001000000000010000000000000000000000000010000101001000000000110100100000000011010010000000000000000000000000000000000010000000000001101000000000100011010000000001010011010000100000100100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100011011000001010000011011000000000000010000000000100000000000000000000000000100001110000000000001101000000000000110100000000000000000000000000000000000000100000000000011010000000001000110100000000010100110100001000001001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011010110000010101000110110000000000000100000000001000000000000000000000000001000010100000000010011010000000001001101001000000000000000000000000000000000001000000001001110100000000011001101000000000111001101000010000010010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110101100000101010001101100000000000001000000000010000000000000000000000000010000111001000000100110100100000010011010000000000000000000000000000000000000010000000010011101000000000110011010000000001110011010000100000100100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101101011000001010000011011001000000000010000000000100000000000000000000000000100001010010000001001101001000000100110100100000000000000000000000000000000000100000000100111010000000001100110100000000011100110100001000001001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011010110000010100000110110010000000000100000000001000000000000000000000000001000011100000000010011010000000001001101000000000000000000000000000000000000001000000001001110100000000011001101000000000111001101000010000010010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010101100000101010001101100100000000001000000000010000000000000000000000000010000101000000000010110100000000001011010010000000000000000000000000000000000010000000001001101000000100101011010000000001011011010000100000100100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100101011000001010100011011001000000000010000000000100000000000000000000000000100001110010000000101101001000000010110100000000000000000000000000000000000000100000000010011010000001001010110100000000010110110100001000001001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001010110000010100000110110000000000000000000000000000000000010000000000000001000010100100000001011010010000000101101001000000000000000000000000000000000001000000000100110100000010010101101000000000101101101000010000010010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010101100000101000001101100000000000000000000000000000000000100000000000000010000111000000000010110100000000001011010000000000000000000000000000000000000010000000001001101000000100101011010000000001011011010000100000100100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101001011000001010100011011000000000000000000000000000000000001000000000000000100001010000000001101101000000000110110100100000000000000000000000000000000000100000000110111010000001001110110100000000011110110100001000001001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010010110000010101000110110000000000000000000000000000000000010000000000000001000011100100000011011010010000001101101000000000000000000000000000000000000001000000001101110100000010011101101000000000111101101000010000010010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110100101100000101000001101100100000000000000000000000000000000100000000000000010000101001000000110110100100000011011010010000000000000000000000000000000000010000000011011101000000100111011010000000001111011010000100000100100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101001011000001010000011011001000000000000000000000000000000001000000000000000100001110000000001101101000000000110110100000000000000000000000000000000000000100000000110111010000001001110110100000000011110110100001000001001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000010110000010101000110110010000000000000000000000000000000010000000000000001000010100000000000111010000000000011101001000000000000000000000000000000000001000000000010110100000000010011101100000000101011101000010000010010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000101100000101010001101100100000000000000000000000000000000100000000000000010000111001000000001110100100000000111010000000000000000000000000000000000000010000000000101101000000000100111011000000001010111010000100000100100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100001011000001010000011011000000000000010000000000000000000001000000000000000100001010010000000011101001000000001110100100000000000000000000000000000000000100000000001011010000000001001110110000000010101110100001000001001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000010110000010100000110110000000000000100000000000000000000010000000000000001000011100000000000111010000000000011101000000000000000000000000000000000000001000000000010110100000000010011101100000000101011101000010000010010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111001100000101010001101100000000000001000000000000000000000100000000000000010000101000000000101110100000000010111010010000000000000000000000000000000000010000000010111101000000000110111011000000001110111010000100000100100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101110011000001010100011011000000000000010000000000000000000001000000000000000100001110010000001011101001000000101110100000000000000000000000000000000000000100000000101111010000000001101110110000000011101110100001000001001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011100110000010100000110110010000000000100000000000000000000010000000000000001000010100100000010111010010000001011101001000000000000000000000000000000000001000000001011110100000000011011101100000000111011101000010000010010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111001100000101000001101100100000000001000000000000000000000100000000000000010000111000000000101110100000000010111010000000000000000000000000000000000000010000000010111101000000000110111011000000001110111010000100000100100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100110011000001010100011011001000000000010000000000000000000001000000000000000100001010000000000111101000000000011110100100000000000000000000000000000000000100000000011011010000001001011110110000000010111110100001000001001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001100110000010101000110110010000000000100000000000000000000010000000000000001000011100100000001111010010000000111101000000000000000000000000000000000000001000000000110110100000010010111101100000000101111101000010000010010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110011001100000101000001101100000000000000000000000010000000000100000000000000010000101001000000011110100100000001111010010000000000000000000000000000000000010000000001101101000000100101111011000000001011111010000100000100100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100110011000001010000011011000000000000000000000000100000000001000000000000000100001110000000000111101000000000011110100000000000000000000000000000000000000100000000011011010000001001011110110000000010111110100001000001001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010100110000010101000110110000000000000000000000001000000000010000000000000001000010100000000011111010000000001111101001000000000000000000000000000000000001000000001111110100000010011111101100000000111111101000010000010010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110101001100000101010001101100000000000000000000000010000000000100000000000000010000111001000000111110100100000011111010000000000000000000000000000000000000010000000011111101000000100111111011000000001111111010000100000100100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101010011000001010000011011001000000000000000000000100000000001000000000000000100001010010000001111101001000000111110100100000000000000000000000000000000000100000000111111010000001001111110110000000011111110100001000001001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010100110000010100000110110010000000000000000000001000000000010000000000000001000011100000000011111010000000001111101000000000000000000000000000000000000001000000001111110100000010011111101100000000111111101000010000010010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001001100000101010001101100100000000000000000000010000000000100000000000000010000101000000000000001100000000000000110010000000000000000000000000000000000010000000000000011000000000100000110000000001000000110000000001100100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100010011000001010100011011001000000000000000000000100000000001000000000000000100001110010000000000011001000000000001100000000000000000000000000000000000000100000000000000110000000001000001100000000010000001100000000011001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000100110000010100000110110000000000000100000000001000000000010000000000000001000010100100000000000110010000000000011001000000000000000000000000000000000001000000000000001100000000010000011000000000100000011000000000110010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110001001100000101000001101100000000000001000000000010000000000100000000000000010000111000000000000001100000000000000110000000000000000000000000000000000000010000000000000011000000000100000110000000001000000110000000001100100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101100011000001010100011011000000000000010000000000100000000001000000000000000100001010000000001000011000000000100001100100000000000000000000000000000000000100000000100100110000000001100001100000000011000001100000000011001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011000110000010101000110110000000000000100000000001000000000010000000000000001000011100100000010000110010000001000011000000000000000000000000000000000000001000000001001001100000000011000011000000000110000011000000000110010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110001100000101000001101100100000000001000000000010000000000100000000000000010000101001000000100001100100000010000110010000000000000000000000000000000000010000000010010011000000000110000110000000001100000110000000001100100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101100011000001010000011011001000000000010000000000100000000001000000000000000100001110000000001000011000000000100001100000000000000000000000000000000000000100000000100100110000000001100001100000000011000001100000000011001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001000110000010101000110110010000000000100000000001000000000010000000000000001000010100000000001000110000000000100011001000000000000000000000000000000000001000000000100001100000010010100011000000000100100011000000000110010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010001100000101010001101100100000000001000000000010000000000100000000000000010000111001000000010001100100000001000110000000000000000000000000000000000000010000000001000011000000100101000110000000001001000110000000001100100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100100011000001010000011011000000000000000000000000000000000000000000000010000100001010010000000100011001000000010001100100000000000000000000000000000000000100000000010000110000001001010001100000000010010001100000000011001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001000110000010100000110110000000000000000000000000000000000000000000000100001000011100000000001000110000000000100011000000000000000000000000000000000000001000000000100001100000010010100011000000000100100011000000000110010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100001100000101010001101100000000000000000000000000000000000000000000001000010000101000000000110001100000000011000110010000000000000000000000000000000000010000000011010011000000100111000110000000001101000110000000001100100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101000011000001010100011011000000000000000000000000000000000000000000000010000100001110010000001100011001000000110001100000000000000000000000000000000000000100000000110100110000001001110001100000000011010001100000000011001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010000110000010100000110110010000000000000000000000000000000000000000000100001000010100100000011000110010000001100011001000000000000000000000000000000000001000000001101001100000010011100011000000000110100011000000000110010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100001100000101000001101100100000000000000000000000000000000000000000001000010000111000000000110001100000000011000110000000000000000000000000000000000000010000000011010011000000100111000110000000001101000110000000001100100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100000011000001010100011011001000000000000000000000000000000000000000000010000100001010000000000010011000000000001001100100000000000000000000000000000000000100000000001000110000000001001001110000000010001001100000000011001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000000110000010101000110110010000000000000000000000000000000000000000000100001000011100100000000100110010000000010011000000000000000000000000000000000000001000000000010001100000000010010011100000000100010011000000000110010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000001100000101000001101100000000000001000000000000000000000000000000001000010000101001000000001001100100000000100110010000000000000000000000000000000000010000000000100011000000000100100111000000001000100110000000001100100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100000011000001010000011011000000000000010000000000000000000000000000000010000100001110000000000010011000000000001001100000000000000000000000000000000000000100000000001000110000000001001001110000000010001001100000000011001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011111010000010101000110110000000000000100000000000000000000000000000000100001000010100000000010100110000000001010011001000000000000000000000000000000000001000000001011001100000000011010011100000000110010011000000000110010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111110100000101010001101100000000000001000000000000000000000000000000001000010000111001000000101001100100000010100110000000000000000000000000000000000000010000000010110011000000000110100111000000001100100110000000001100100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101111101000001010000011011001000000000010000000000000000000000000000000010000100001010010000001010011001000000101001100100000000000000000000000000000000000100000000101100110000000001101001110000000011001001100000000011001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011111010000010100000110110010000000000100000000000000000000000000000000100001000011100000000010100110000000001010011000000000000000000000000000000000000001000000001011001100000000011010011100000000110010011000000000110010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110011110100000101010001101100100000000001000000000000000000000000000000001000010000101000000000011001100000000001100110010000000000000000000000000000000000010000000001100011000000100101100111000000001001100110000000001100100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100111101000001010100011011001000000000010000000000000000000000000000000010000100001110010000000110011001000000011001100000000000000000000000000000000000000100000000011000110000001001011001110000000010011001100000000011001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001111010000010100000110110000000000000000000000001000000000000000000000100001000010100100000001100110010000000110011001000000000000000000000000000000000001000000000110001100000010010110011100000000100110011000000000110010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011110100000101000001101100000000000000000000000010000000000000000000001000010000111000000000011001100000000001100110000000000000000000000000000000000000010000000001100011000000100101100111000000001001100110000000001100100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101011101000001010100011011000000000000000000000000100000000000000000000010000100001010000000001110011000000000111001100100000000000000000000000000000000000100000000111100110000001001111001110000000011011001100000000011001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010111010000010101000110110000000000000000000000001000000000000000000000100001000011100100000011100110010000001110011000000000000000000000000000000000000001000000001111001100000010011110011100000000110110011000000000110010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110101110100000101000001101100100000000000000000000010000000000000000000001000010000101001000000111001100100000011100110010000000000000000000000000000000000010000000011110011000000100111100111000000001101100110000000001100100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101011101000001010000011011001000000000000000000000100000000000000000000010000100001110000000001110011000000000111001100000000000000000000000000000000000000100000000111100110000001001111001110000000011011001100000000011001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000111010000010101000110110010000000000000000000001000000000000000000000100001000010100000000000010110000000000001011001000000000000000000000000000000000001000000000000101100000000010001011000000000101001011000000000110010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001110100000101010001101100100000000000000000000010000000000000000000001000010000111001000000000101100100000000010110000000000000000000000000000000000000010000000000001011000000000100010110000000001010010110000000001100100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100011101000001010000011011000000000000010000000000100000000000000000000010000100001010010000000001011001000000000101100100000000000000000000000000000000000100000000000010110000000001000101100000000010100101100000000011001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000111010000010100000110110000000000000100000000001000000000000000000000100001000011100000000000010110000000000001011000000000000000000000000000000000000001000000000000101100000000010001011000000000101001011000000000110010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110110100000101010001101100000000000001000000000010000000000000000000001000010000101000000000100101100000000010010110010000000000000000000000000000000000010000000010011011000000000110010110000000001110010110000000001100100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101101101000001010100011011000000000000010000000000100000000000000000000010000100001110010000001001011001000000100101100000000000000000000000000000000000000100000000100110110000000001100101100000000011100101100000000011001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011011010000010100000110110010000000000100000000001000000000000000000000100001000010100100000010010110010000001001011001000000000000000000000000000000000001000000001001101100000000011001011000000000111001011000000000110010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110110100000101000001101100100000000001000000000010000000000000000000001000010000111000000000100101100000000010010110000000000000000000000000000000000000010000000010011011000000000110010110000000001110010110000000001100100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100101101000001010100011011001000000000010000000000100000000000000000000010000100001010000000000101011000000000010101100100000000000000000000000000000000000100000000010010110000001001010101100000000010110101100000000011001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001011010000010101000110110010000000000100000000001000000000000000000000100001000011100100000001010110010000000101011000000000000000000000000000000000000001000000000100101100000010010101011000000000101101011000000000110010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010110100000101000001101100000000000000000000000000000000000100000000001000010000101001000000010101100100000001010110010000000000000000000000000000000000010000000001001011000000100101010110000000001011010110000000001100100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100101101000001010000011011000000000000000000000000000000000001000000000010000100001110000000000101011000000000010101100000000000000000000000000000000000000100000000010010110000001001010101100000000010110101100000000011001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010011010000010101000110110000000000000000000000000000000000010000000000100001000010100000000011010110000000001101011001000000000000000000000000000000000001000000001101101100000010011101011000000000111101011000000000110010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100110100000101010001101100000000000000000000000000000000000100000000001000010000111001000000110101100100000011010110000000000000000000000000000000000000010000000011011011000000100111010110000000001111010110000000001100100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101001101000001010000011011001000000000000000000000000000000001000000000010000100001010010000001101011001000000110101100100000000000000000000000000000000000100000000110110110000001001110101100000000011110101100000000011001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010011010000010100000110110010000000000000000000000000000000010000000000100001000011100000000011010110000000001101011000000000000000000000000000000000000001000000001101101100000010011101011000000000111101011000000000110010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000110100000101010001101100100000000000000000000000000000000100000000001000010000101000000000001101100000000000110110010000000000000000000000000000000000010000000000101011000000000100110111000000001010110110000000001100100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100001101000001010100011011001000000000000000000000000000000001000000000010000100001110010000000011011001000000001101100000000000000000000000000000000000000100000000001010110000000001001101110000000010101101100000000011001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000011010000010100000110110000000000000100000000000000000000010000000000100001000010100100000000110110010000000011011001000000000000000000000000000000000001000000000010101100000000010011011100000000101011011000000000110010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000110100000101000001101100000000000001000000000000000000000100000000001000010000111000000000001101100000000000110110000000000000000000000000000000000000010000000000101011000000000100110111000000001010110110000000001100100000000000101000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100010000000000000000000000000000000000011101110101000001010100011011000000000000010000000000000000000001000000000010000100001010000000001011011000000000101101100100000000000000000000000000000000000100000000101110110000000001101101110000000011101101100000000011001000000000001010000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000100000000000000000000000000000000000111011101010000010101000110110000000000000100000000000000000000010000000000100001000011100100000010110110010000001011011000000000000000000000000000000000000001000000001011101100000000011011011100000000111011011000000000110010000000000011100000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010011000000000000000000000000000000000001110111010100000101000001101100100000000001000000000000000000000100000000001000010000101001000000101101100100000010110110010000000000000000000000000000000000010000000010111011000000000110110111000000001110110110000000001100100000000000111000000000010000000000000000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000000000000000000011101110101000001010000011011001000000000010000000000000000000001000000000010000100001110000000001011011000000000101101100000000000000000000000000000000000000100000000101110110000000001101101110000000011101101100000000011001000000000001110000000000100000000000000000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000000000000000000111001101010000010101000110110010000000000100000000000000000000010000000000100001000010100000000001110110000000000111011001000000000000000000000000000000000001000000000110101100000010010111011100000000101111011000000000110010000000000011100000000001000000000000000000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000000000000000001110011010100000101010001101100100000000001000000000000000000000100000000001000010000111001000000011101100100000001110110000000000000000000000000000000000000010000000001101011000000100101110111000000001011110110000000001100100000000000111000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001000000000000011100110101000001010000011011000000000000000000000000100000000001000000000010000100001010010000000111011001000000011101100100000000000000000000000000000000000100000000011010110000001001011101110000000010111101100000000011001000000000001010000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010000000000000111001101010000010100000110110000000000000000000000001000000000010000000000100001000011100000000001110110000000000111011000000000000000000000000000000000000001000000000110101100000010010111011100000000101111011000000000110010000000000010100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100000000000001110101010100000101010001101100000000000000000000000010000000000100000000001000010000101000000000111101100000000011110110010000000000000000000000000000000000010000000011111011000000100111110111000000001111110110000000001100100000000000101000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001000000000000011101010101000001010100011011000000000000000000000000100000000001000000000010000100001110010000001111011001000000111101100000000000000000000000000000000000000100000000111110110000001001111101110000000011111101100000000011001000000000001010000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010000000000000111010101010000010100000110110010000000000000000000001000000000010000000000100001000010100100000011110110010000001111011001000000000000000000000000000000000001000000001111101100000010011111011100000000111111011000000000110010000000000010100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100000000000001110101010100000101000001101100100000000000000000000010000000000100000000001000010000111000000000111101100000000011110110000000000000000000000000000000000000010000000011111011000000100111110111000000001111110110000000001100100000000000111000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001000000000000011100010101000001010100011011001000000000000000000000100000000001000000000010000100001010000000000000111000000000000011100100000000000000000000000000000000000100000000000001110000000001000011100000000010000011100001000011001000000000001110000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010000000000000111000101010000010101000110110010000000000000000000001000000000010000000000100001000011100100000000001110010000000000111000000000000000000000000000000000000001000000000000011100000000010000111000000000100000111000010000110010000000000011100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100000000000001110001010100000101000001101100000000000001000000000010000000000100000000001000010000101001000000000011100100000000001110010000000000000000000000000000000000010000000000000111000000000100001110000000001000001110000100001100100000000000111000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001000000000000011100010101000001010000011011000000000000010000000000100000000001000000000010000100001110000000000000111000000000000011100000000000000000000000000000000000000100000000000001110000000001000011100000000010000011100001000011001000000000001110000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010000000000000111011001010000010101000110110000000000000100000000001000000000010000000000100001000010100000000010001110000000001000111001000000000000000000000000000000000001000000001001011100000000011000111000000000110000111000010000110010000000000011100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100000000000001110110010100000101010001101100000000000001000000000010000000000100000000001000010000111001000000100011100100000010001110000000000000000000000000000000000000010000000010010111000000000110001110000000001100001110000100001100100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011101100101000001010000011011001000000000010000000000100000000001000000000010000100001010010000001000111001000000100011100100000000000000000000000000000000000100000000100101110000000001100011100000000011000011100001000011001000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111011001010000010100000110110010000000000100000000001000000000010000000000100001000011100000000010001110000000001000111000000000000000000000000000000000000001000000001001011100000000011000111000000000110000111000010000110010000000000010100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100100000000001110010010100000101010001101100100000000001000000000010000000000100000000001000010000101000000000010011100000000001001110010000000000000000000000000000000000010000000001000111000000100101001110000000001001001110000100001100100000000000101000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001000000000011100100101000001010100011011001000000000010000000000100000000001000000000010000100001110010000000100111001000000010011100000000000000000000000000000000000000100000000010001110000001001010011100000000010010011100001000011001000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111001001010000010100000110110000000000000000000000000000000000000000000000000000100010100100000001001110010000000100111001000000000000000000000000000000000001000000000100011100000010010100111000000000100100111000010000110010000000000010100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100100000000001110010010100000101000001101100000000000000000000000000000000000000000000000000001000111000000000010011100000000001001110000000000000000000000000000000000000010000000001000111000000100101001110000000001001001110000100001100100000000000101000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001000000000011101000101000001010100011011000000000000000000000000000000000000000000000000000010001010000000001100111000000000110011100100000000000000000000000000000000000100000000110101110000001001110011100000000011010011100001000011001000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111010001010000010101000110110000000000000000000000000000000000000000000000000000100011100100000011001110010000001100111000000000000000000000000000000000000001000000001101011100000010011100111000000000110100111000010000110010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110100010100000101000001101100100000000000000000000000000000000000000000000000001000101001000000110011100100000011001110010000000000000000000000000000000000010000000011010111000000100111001110000000001101001110000100001100100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011101000101000001010000011011001000000000000000000000000000000000000000000000000010001110000000001100111000000000110011100000000000000000000000000000000000000100000000110101110000001001110011100000000011010011100001000011001000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111000001010000010101000110110010000000000000000000000000000000000000000000000000100010100000000000101110000000000010111001000000000000000000000000000000000001000000000010011100000000010010111100000000100010111000010000110010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110000010100000101010001101100100000000000000000000000000000000000000000000000001000111001000000001011100100000000101110000000000000000000000000000000000000010000000000100111000000000100101111000000001000101110000100001100100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011100000101000001010000011011000000000000010000000000000000000000000000000000000010001010010000000010111001000000001011100100000000000000000000000000000000000100000000001001110000000001001011110000000010001011100001000011001000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111000001010000010100000110110000000000000100000000000000000000000000000000000000100011100000000000101110000000000010111000000000000000000000000000000000000001000000000010011100000000010010111100000000100010111000010000110010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110111100100000101010001101100000000000001000000000000000000000000000000000000001000101000000000101011100000000010101110010000000000000000000000000000000000010000000010110111000000000110101111000000001100101110000100001100100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011101111001000001010100011011000000000000010000000000000000000000000000000000000010001110010000001010111001000000101011100000000000000000000000000000000000000100000000101101110000000001101011110000000011001011100001000011001000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111011110010000010100000110110010000000000100000000000000000000000000000000000000100010100100000010101110010000001010111001000000000000000000000000000000000001000000001011011100000000011010111100000000110010111000010000110010000000000010100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100100000000001110111100100000101000001101100100000000001000000000000000000000000000000000000001000111000000000101011100000000010101110000000000000000000000000000000000000010000000010110111000000000110101111000000001100101110000100001100100000000000101000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001000000000011100111001000001010100011011001000000000010000000000000000000000000000000000000010001010000000000110111000000000011011100100000000000000000000000000000000000100000000011001110000001001011011110000000010011011100001000011001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111001110010000010101000110110010000000000100000000000000000000000000000000000000100011100100000001101110010000000110111000000000000000000000000000000000000001000000000110011100000010010110111100000000100110111000010000110010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110011100100000101000001101100000000000000000000000010000000000000000000000000001000101001000000011011100100000001101110010000000000000000000000000000000000010000000001100111000000100101101111000000001001101110000100001100100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011100111001000001010000011011000000000000000000000000100000000000000000000000000010001110000000000110111000000000011011100000000000000000000000000000000000000100000000011001110000001001011011110000000010011011100001000011001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111010110010000010101000110110000000000000000000000001000000000000000000000000000100010100000000011101110000000001110111001000000000000000000000000000000000001000000001111011100000010011110111100000000110110111000010000110010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110101100100000101010001101100000000000000000000000010000000000000000000000000001000111001000000111011100100000011101110000000000000000000000000000000000000010000000011110111000000100111101111000000001101101110000100001100100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011101011001000001010000011011001000000000000000000000100000000000000000000000000010001010010000001110111001000000111011100100000000000000000000000000000000000100000000111101110000001001111011110000000011011011100001000011001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111010110010000010100000110110010000000000000000000001000000000000000000000000000100011100000000011101110000000001110111000000000000000000000000000000000000001000000001111011100000010011110111100000000110110111000010000110010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110001100100000101010001101100100000000000000000000010000000000000000000000000001000101000000000000111100000000000011110010000000000000000000000000000000000010000000000001111000000000100011110000000001010011110000100001100100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011100011001000001010100011011001000000000000000000000100000000000000000000000000010001110010000000001111001000000000111100000000000000000000000000000000000000100000000000011110000000001000111100000000010100111100001000011001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111000110010000010100000110110000000000000100000000001000000000000000000000000000100010100100000000011110010000000001111001000000000000000000000000000000000001000000000000111100000000010001111000000000101001111000010000110010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110001100100000101000001101100000000000001000000000010000000000000000000000000001000111000000000000111100000000000011110000000000000000000000000000000000000010000000000001111000000000100011110000000001010011110000100001100100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011101101001000001010100011011000000000000010000000000100000000000000000000000000010001010000000001001111000000000100111100100000000000000000000000000000000000100000000100111110000000001100111100000000011100111100001000011001000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111011010010000010101000110110000000000000100000000001000000000000000000000000000100011100100000010011110010000001001111000000000000000000000000000000000000001000000001001111100000000011001111000000000111001111000010000110010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110110100100000101000001101100100000000001000000000010000000000000000000000000001000101001000000100111100100000010011110010000000000000000000000000000000000010000000010011111000000000110011110000000001110011110000100001100100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011101101001000001010000011011001000000000010000000000100000000000000000000000000010001110000000001001111000000000100111100000000000000000000000000000000000000100000000100111110000000001100111100000000011100111100001000011001000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111001010010000010101000110110010000000000100000000001000000000000000000000000000100010100000000001011110000000000101111001000000000000000000000000000000000001000000000100111100000010010101111000000000101101111000010000110010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110010100100000101010001101100100000000001000000000010000000000000000000000000001000111001000000010111100100000001011110000000000000000000000000000000000000010000000001001111000000100101011110000000001011011110000100001100100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011100101001000001010000011011000000000000000000000000000000000001000000000000000010001010010000000101111001000000010111100100000000000000000000000000000000000100000000010011110000001001010111100000000010110111100001000011001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111001010010000010100000110110000000000000000000000000000000000010000000000000000100011100000000001011110000000000101111000000000000000000000000000000000000001000000000100111100000010010101111000000000101101111000010000110010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110100100100000101010001101100000000000000000000000000000000000100000000000000001000101000000000110111100000000011011110010000000000000000000000000000000000010000000011011111000000100111011110000000001111011110000100001100100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011101001001000001010100011011000000000000000000000000000000000001000000000000000010001110010000001101111001000000110111100000000000000000000000000000000000000100000000110111110000001001110111100000000011110111100001000011001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111010010010000010100000110110010000000000000000000000000000000010000000000000000100010100100000011011110010000001101111001000000000000000000000000000000000001000000001101111100000010011101111000000000111101111000010000110010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110100100100000101000001101100100000000000000000000000000000000100000000000000001000111000000000110111100000000011011110000000000000000000000000000000000000010000000011011111000000100111011110000000001111011110000100001100100000000000111000000000010010000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100100000001001100000000011100001001000001010100011011001000000000000000000000000000000001000000000000000010001010000000000011111000000000001111100100000000000000000000000000000000000100000000001011110000000001001111110000000010101111100001000011001000000000001110000000000100100000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001001000000010011000000000111000010010000010101000110110010000000000000000000000000000000010000000000000000100011100100000000111110010000000011111000000000000000000000000000000000000001000000000010111100000000010011111100000000101011111000010000110010000000000011100000000001001000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010010000000100110000000001110000100100000101000001101100000000000001000000000000000000000100000000000000001000101001000000001111100100000000111110010000000000000000000000000000000000010000000000101111000000000100111111000000001010111110000100001100100000000000101000000000010010000000100111000000000101110000000000000000000000000000000000000000000000000000000100010000000000100100000001001110000000011100001001000001010000011011000000000000010000000000000000000001000000000000000010001110000000000011111000000000001111100000000000000000000000000000000000000100000000001011110000000001001111110000000010101111100001000011001000000000001010000100000100100000001001110000000001011100000000000000000000000000000000000000000000000000000001000100001000001001000000010011100000000111011100010000010101000110110000000000000100000000000000000000010000000000000000100010100000000010111110000000001011111001000000000000000000000000000000000001000000001011111100000000011011111100000000111011111000010000110010000000000010100001000001001000000010011100000000010111000000000000000000000000000000000000000000000000000000010001000010000010010000000100111000000001110111000100000101010001101100000000000001000000000000000000000100000000000000001000111001000000101111100100000010111110000000000000000000000000000000000000010000000010111111000000000110111111000000001110111110000100001100100000000000101010010000010010000000100111000100000101110000000000000000000000000000000000000000000000000000000100010100100000100100000001001110001000011101110001000001010000011011001000000000010000000000000000000001000000000000000010001010010000001011111001000000101111100100000000000000000000000000000000000100000000101111110000000001101111110000000011101111100001000011001000000000001010100100000100100000001001110001000001011100000000000000000000000000000000000000000000000000000001000101001000001001000000010011100010000111011100010000010100000110110010000000000100000000000000000000010000000000000000100011100000000010111110000000001011111000000000000000000000000000000000000001000000001011111100000000011011111100000000111011111000010000110010000000000010101001000001001000000010011100010000010111000000000000000000000000000000000000000000000000000000010001010010000010010000000100111000100001110011000100000101010001101100100000000001000000000000000000000100000000000000001000101000000000011111100000000001111110010000000000000000000000000000000000010000000001101111000000100101111111000000001011111110000100001100100000000000101010010000010010000000100111000100000001110000000000000000000000000000000000000000000000000000000100010100100000100100000001001110001000011100110001000001010100011011001000000000010000000000000000000001000000000000000010001110010000000111111001000000011111100000000000000000000000000000000000000100000000011011110000001001011111110000000010111111100001000011001000000000001110100100000100100000001001110101000000011100000000000000000000000000000000000000000000000000001001001101001000001001000000010011101010000111001100010000010100000110110000000000000000000000001000000000010000000000000000100010100100000001111110010000000111111001000000000000000000000000000000000001000000000110111100000010010111111100000000101111111000010000110010000000000011101001000001001000000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000010010000000100111010100001110011000100000101000001101100000000000000000000000010000000000100000000000000001000111000000000011111100000000001111110000000000000000000000000000000000000010000000001101111000000100101111111000000001011111110000100001100100000000000101010010000010010000000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000100100000001001110101000011101010001000001010100011011000000000000000000000000100000000001000000000000000010001010000000001111111000000000111111100100000000000000000000000000000000000100000000111111110000001001111111110000000011111111100001000011001000000000001010100100000100100000001001110101000000011100000000000000000000000000000000000000000000000000000001000101001000001001000000010011101010000111010100010000010101000110110000000000000000000000001000000000010000000000000000100011100100000011111110010000001111111000000000000000000000000000000000000001000000001111111100000010011111111100000000111111111000010000110010000000000011101001000001001000000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000010010000000100111010100001110101000100000101000001101100100000000000000000000010000000000100000000000000001000101001000000111111100100000011111110010000000000000000000000000000000000010000000011111111000000100111111111000000001111111110000100001100100000000000111010010000010010000000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000100100000001001110101000011101010001000001010000011011001000000000000000000000100000000001000000000000000010001110000000001111111000000000111111100000000000000000000000000000000000000100000000111111110000001001111111110000000011111111100001000011001000000000001110100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001101000010011101010000111000100010000010101000110110010000000000000000000001000000000010000000000000000100010100000000000000001000000000000000101000000000000000000000000000000000001000000000000000010000000010000000010000000100000000100000000001010000000000011101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000010011010000100111010100001110001000100000101010001101100100000000000000000000010000000000100000000000000001000111001000000000000010100000000000001000000000000000000000000000000000000010000000000000000100000000100000000100000001000000001000000000010100000000000111010010000010011010000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000100110100001001110101000011100010001000001010000011011000000000000010000000000100000000001000000000000000010001010010000000000000101000000000000010100000000000000000000000000000000000100000000000000001000000001000000001000000010000000010000000000101000000000001110100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001101000010011101010000111000100010000010100000110110000000000000100000000001000000000010000000000000000100011100000000000000001000000000000000100000000000000000000000000000000000001000000000000000010000000010000000010000000100000000100000000001010000000000011101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000010011010000100111010100001110110000100000101010001101100000000000001000000000010000000000100000000000000001000101000000000100000010000000010000001010000000000000000000000000000000000010000000010010000100000000110000000100000001100000001000000000010100000000000101010010000010011010000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000100110100001001110101000011101100001000001010100011011000000000000010000000000100000000001000000000000000010001110010000001000000101000000100000010000000000000000000000000000000000000100000000100100001000000001100000001000000011000000010000000000101000000000001110100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001101000010011101010000111011000010000010100000110110010000000000100000000001000000000010000000000000000100010100100000010000001010000001000000101000000000000000000000000000000000001000000001001000010000000011000000010000000110000000100000000001010000000000010101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010000010011010000100111010100001110110000100000101000001101100100000000001000000000010000000000100000000000000001000111000000000100000010000000010000001000000000000000000000000000000000000010000000010010000100000000110000000100000001100000001000000000010100000000000101010010000011011010000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000110110100001001110101000011100100001000001010100011011001000000000010000000000100000000001000000000000000010001010000000000100000100000000010000010100000000000000000000000000000000000100000000010000001000001001010000001000000010010000010000000000101000000000001010100100000110110100001001110101000000011100000000000000000000000000000000000000000000000000000001000101001000001101101000010011101010000111001000010000010101000110110010000000000100000000001000000000010000000000000000100011100100000001000001010000000100000100000000000000000000000000000000000001000000000100000010000010010100000010000000100100000100000000001010000000000010101001000001101101000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010000011011010000100111010100001110010000100000101000001101100000000000000000000000000000000000000000000001000001000101001000000010000010100000001000001010000000000000000000000000000000000010000000001000000100000100101000000100000001001000001000000000010100000000000111010010000011011010000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000110110100001001110101000011100100001000001010000011011000000000000000000000000000000000000000000000010000010001110000000000100000100000000010000010000000000000000000000000000000000000100000000010000001000001001010000001000000010010000010000000000101000000000001110100100000110110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001101101000010011101010000111010000010000010101000110110000000000000000000000000000000000000000000000100000100010100000000011000001000000001100000101000000000000000000000000000000000001000000001101000010000010011100000010000000110100000100000000001010000000000010101001010001101101000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010100011011010000100111010100001110100000100000101010001101100000000000000000000000000000000000000000000001000001000111001000000110000010100000011000001000000000000000000000000000000000000010000000011010000100000100111000000100000001101000001000000000010100000000000111010010100011011011000100111010100000001110000000000000000000000000000000000000000000000000000000100110100101000110110110001001110101000011101000001000001010000011011001000000000000000000000000000000000000000000010000010001010010000001100000101000000110000010100000000000000000000000000000000000100000000110100001000001001110000001000000011010000010000000000101000000000001110100101000110110110001001110101000000011100000000000000000000000000000000000000000000000000000001001101001010001101101100010011101010000111010000010000010100000110110010000000000000000000000000000000000000000000100000100011100000000011000001000000001100000100000000000000000000000000000000000001000000001101000010000010011100000010000000110100000100000000001010000000000011101001010001101111100010011101010000000111000000000000000000000000000000000000000000000000000000010011010010100011011111000100111010100001110000000100000101010001101100100000000000000000000000000000000000000000001000001000101000000000001000010000000000100001010000000000000000000000000000000000010000000000100000100000000100100001100000001000100001000000000010100000000000101011010100011011111000100111010100000001110000000000000000000000000000000000000000000000000000000100010110101000110111110001001110101000011100000001000001010100011011001000000000000000000000000000000000000000000010000010001110010000000010000101000000001000010000000000000000000000000000000000000100000000001000001000000001001000011000000010001000010000000000101000000000001010110101001110111110001001110101000000011100000000000000000000000000000000000000000000000000000001000101101010011101111100010011101010000111000000010000010100000110110000000000000100000000000000000000000000000000100000100010100100000000100001010000000010000101000000000000000000000000000000000001000000000010000010000000010010000110000000100010000100000000001010000000000011101101010111101111100010011101010000000111000000000000000000000000000000000000000000000000000000010011011010101111011111000100111010100001110000000100000101000001101100000000000001000000000000000000000000000000001000001000111000000000001000010000000000100001000000000000000000000000000000000000010000000000100000100000000100100001100000001000100001000000000010100000000000111011011101111011111000100111110100000001110000000000000000000000000000000000000000000000000000000100110110111011110111110001001111101000011101111110000001010100011011000000000000010000000000000000000000000000000010000010001010000000001010000100000000101000010100000000000000000000000000000000000100000000101100001000000001101000011000000011001000010000000000101000000000001010110111011110111110001001111101000000011100000000000000000000000000000000000000000000000000000001000101101110111101111100010011111010000111011111100000010101000110110000000000000100000000000000000000000000000000100000100011100100000010100001010000001010000100000000000000000000000000000000000001000000001011000010000000011010000110000000110010000100000000001010000000000011101101110111101111100010011111010000000111000000000000000000000000000000000000000000000000000000010011011011101111011111000100111110100001110111111000000101000001101100100000000001000000000000000000000000000000001000001000101001000000101000010100000010100001010000000000000000000000000000000000010000000010110000100000000110100001100000001100100001000000000010100000000000101011111101111011111100100111111100000001110000000000000000000000000000000000000000000000000000000100010111111011110111111001001111111000011101111110000001010000011011001000000000010000000000000000000000000000000010000010001110000000001010000100000000101000010000000000000000000000000000000000000100000000101100001000000001101000011000000011001000010000000000101000000000001111111111011110111111001001111111000000011100000000000000000000000000000000000000000000000000000001001111111110111101111110010011111110000111001111100000010101000110110010000000000100000000000000000000000000000000100000100010100000000001100001000000000110000101000000000000000000000000000000000001000000000110000010000010010110000110000000100110000100000000001010000000000011111111110111101111110010011111110000000111000000000000000000000000000000000000000000000000000000010011111111101111011111100100111111100001110011111000000101010001101100100000000001000000000000000000000000000000001000001000111001000000011000010100000001100001000000000000000000000000000000000000010000000001100000100000100101100001100000001001100001000000000010100000000000111111111101111011111100100111111100000001110000000000000000000000000000000000000000000000000000000100111111111011110111111001001111111000011100111110000001010000011011000000000000000000000000100000000000000000000010000010001010010000000110000101000000011000010100000000000000000000000000000000000100000000011000001000001001011000011000000010011000010000000000101000000000001111111111011110111111001001111111000000011100000000000000000000000000000000000000000000000000000001001111111110111101111110010011111110000111001111100000010100000110110000000000000000000000001000000000000000000000100000100011100000000001100001000000000110000100000000000000000000000000000000000001000000000110000010000010010110000110000000100110000100000000001010000000000011111111110111101111110010011111110000000111000000000000000000000000000000000000000000000000000000010011111111101111011111100100111111100001110101111000000101010001101100000000000000000000000010000000000000000000001000001000101000000000111000010000000011100001010000000000000000000000000000000000010000000011110000100000100111100001100000001101100001000000000010100000000000111111111101111011111100100111111100000001110000000000000000000000000000000000000000000000000000000100111111111011110111111001001111111000011101011110000001010100011011000000000000000000000000100000000000000000000010000010001110010000001110000101000000111000010000000000000000000000000000000000000100000000111100001000001001111000011000000011011000010000000000101000000000001111111111011110111111001001111111000000011100000000000000000000000000000000000000000000000000000001001111111110111101111110010011111110000111010111100000010100000110110010000000000000000000001000000000000000000000100000100010100100000011100001010000001110000101000000000000000000000000000000000001000000001111000010000010011110000110000000110110000100000000001010000000000011111111110111101111110010011111110000000111000000000000000000000000000000000000000000000000000000010011111111101111011111100100111111100001110101111000000101000001101100100000000000000000000010000000000000000000001000001000111000000000111000010000000011100001000000000000000000000000000000000000010000000011110000100000100111100001100000001101100001000000000010100000000000101111111101111011111100110111111100000001110000000000000000000000000000000000000000000000000000000100011111111011110111111001101111111000011100011110000001010100011011001000000000000000000000100000000000000000000010000010001010000000000001000100000000000100010100000000000000000000000000000000000100000000000010001000000001000100001000000010100100010000000000101000000000001011111111011110111111001101111111000000011100000000000000000000000000000000000000000000000000000001000111111110111101111110011011111110000111000111100000010101000110110010000000000000000000001000000000000000000000100000100011100100000000010001010000000001000100000000000000000000000000000000000001000000000000100010000000010001000010000000101001000100000000001010000000000011111111110111101111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111101111011111100110111111100001110001111000000101000001101100000000000001000000000010000000000000000000001000001000101001000000000100010100000000010001010000000000000000000000000000000000010000000000001000100000000100010000100000001010010001000000000010100000000000111111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111001101111111000011100011110000001010000011011000000000000010000000000100000000000000000000010000010001110000000000001000100000000000100010000000000000000000000000000000000000100000000000010001000000001000100001000000010100100010000000000101000000000001011111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111110011011111110000111011011100000010101000110110000000000000100000000001000000000000000000000100000100010100000000010010001000000001001000101000000000000000000000000000000000001000000001001100010000000011001000010000000111001000100000000001010000000000010111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111100110111111100001110110111000000101010001101100000000000001000000000010000000000000000000001000001000111001000000100100010100000010010001000000000000000000000000000000000000010000000010011000100000000110010000100000001110010001000000000010100000000000101111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111001101111111000011101101110000001010000011011001000000000010000000000100000000000000000000010000010001010010000001001000101000000100100010100000000000000000000000000000000000100000000100110001000000001100100001000000011100100010000000000101000000000001011111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111110011011111110000111011011100000010100000110110010000000000100000000001000000000000000000000100000100011100000000010010001000000001001000100000000000000000000000000000000000001000000001001100010000000011001000010000000111001000100000000001010000000000010111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111100110111111100001110010111000000101010001101100100000000001000000000010000000000000000000001000001000101000000000010100010000000001010001010000000000000000000000000000000000010000000001001000100000100101010000100000001011010001000000000010100000000000101111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111001101111111000011100101110000001010100011011001000000000010000000000100000000000000000000010000010001110010000000101000101000000010100010000000000000000000000000000000000000100000000010010001000001001010100001000000010110100010000000000101000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111001011100000010100000110110000000000000000000000000000000000010000000000100000100010100100000001010001010000000101000101000000000000000000000000000000000001000000000100100010000010010101000010000000101101000100000000001010000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110010111000000101000001101100000000000000000000000000000000000100000000001000001000111000000000010100010000000001010001000000000000000000000000000000000000010000000001001000100000100101010000100000001011010001000000000010100000000000111111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111001101111111000011101001110000001010100011011000000000000000000000000000000000001000000000010000010001010000000001101000100000000110100010100000000000000000000000000000000000100000000110110001000001001110100001000000011110100010000000000101000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111010011100000010101000110110000000000000000000000000000000000010000000000100000100011100100000011010001010000001101000100000000000000000000000000000000000001000000001101100010000010011101000010000000111101000100000000001010000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110100111000000101000001101100100000000000000000000000000000000100000000001000001000101001000000110100010100000011010001010000000000000000000000000000000000010000000011011000100000100111010000100000001111010001000000000010100000000000111111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111001101111111000011101001110000001010000011011001000000000000000000000000000000001000000000010000010001110000000001101000100000000110100010000000000000000000000000000000000000100000000110110001000001001110100001000000011110100010000000000101000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111000011100000010101000110110010000000000000000000000000000000010000000000100000100010100000000000110001000000000011000101000000000000000000000000000000000001000000000010100010000000010011000110000000101011000100000000001010000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110000111000000101010001101100100000000000000000000000000000000100000000001000001000111001000000001100010100000000110001000000000000000000000000000000000000010000000000101000100000000100110001100000001010110001000000000010100000000000111111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111001101111111000011100001110000001010000011011000000000000010000000000000000000001000000000010000010001010010000000011000101000000001100010100000000000000000000000000000000000100000000001010001000000001001100011000000010101100010000000000101000000000001011111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111110011011111110000111000011100000010100000110110000000000000100000000000000000000010000000000100000100011100000000000110001000000000011000100000000000000000000000000000000000001000000000010100010000000010011000110000000101011000100000000001010000000000010111111111111111111111011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111110110111111100001110111011000000101010001101100000000000001000000000000000000000100000000001000001000101000000000101100010000000010110001010000000000000000000000000000000000010000000010111000100000000110110001100000001110110001000000000010100000000000101111111111111111111110110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111101101111111000011101110110000001010100011011000000000000010000000000000000000001000000000010000010001110010000001011000101000000101100010000000000000000000000000000000000000100000000101110001000000001101100011000000011101100010000000000101000000000001011111111111111111111101101111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111011011111110000111011101100000010100000110110010000000000100000000000000000000010000000000100000100010100100000010110001010000001011000101000000000000000000000000000000000001000000001011100010000000011011000110000000111011000100000000001010000000000010111111111111111111111011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111110110111111100001110111011000000101000001101100100000000001000000000000000000000100000000001000001000111000000000101100010000000010110001000000000000000000000000000000000000010000000010111000100000000110110001100000001110110001000000000010100000000000111111111111111111111110110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101101111111000011100110110000001010100011011001000000000010000000000000000000001000000000010000010001010000000000111000100000000011100010100000000000000000000000000000000000100000000011010001000001001011100011000000010111100010000000000101000000000001111111111111111111111101101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011011111110000111001101100000010101000110110010000000000100000000000000000000010000000000100000100011100100000001110001010000000111000100000000000000000000000000000000000001000000000110100010000010010111000110000000101111000100000000001010000000000011111111111111111111111011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110110111111100001110011011000000101000001101100000000000000000000000010000000000100000000001000001000101001000000011100010100000001110001010000000000000000000000000000000000010000000001101000100000100101110001100000001011110001000000000010100000000000111111111111111111111110110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101101111111000011100110110000001010000011011000000000000000000000000100000000001000000000010000010001110000000000111000100000000011100010000000000000000000000000000000000000100000000011010001000001001011100011000000010111100010000000000101000000000001111111111111111111111101111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011111111110000111010101100000010101000110110000000000000000000000001000000000010000000000100000100010100000000011110001000000001111000101000000000000000000000000000000000001000000001111100010000010011111000110000000111111000100000000001010000000000011111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110111111111100001110101011000000101010001101100000000000000000000000010000000000100000000001000001000111001000000111100010100000011110001000000000000000000000000000000000000010000000011111000100000100111110001100000001111110001000000000010100000000000111111111111111111111110111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101111111111000011101010110000001010000011011001000000000000000000000100000000001000000000010000010001010010000001111000101000000111100010100000000000000000000000000000000000100000000111110001000001001111100011000000011111100010000000000101000000000001111111111111111111111101111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011111111110000111010101100000010100000110110010000000000000000000001000000000010000000000100000100011100000000011110001000000001111000100000000000000000000000000000000000001000000001111100010000010011111000110000000111111000100000000001010000000000010111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111110111111111100001110001011000000101010001101100100000000000000000000010000000000100000000001000001000101000000000000010010000000000001001010000000000000000000000000000000000010000000000000100100000000100001000100000001000001001000100000010100000000000101111111111111111111110111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111101111111111000011100010110000001010100011011001000000000000000000000100000000001000000000010000010001110010000000000100101000000000010010000000000000000000000000000000000000100000000000001001000000001000010001000000010000010010001000000101000000000001011111111111111111111101111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111011111111110000111000101100000010100000110110000000000000100000000001000000000010000000000100000100010100100000000001001010000000000100101000000000000000000000000000000000001000000000000010010000000010000100010000000100000100100010000001010000000000010111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111110111111111100001110001011000000101000001101100000000000001000000000010000000000100000000001000001000111000000000000010010000000000001001000000000000000000000000000000000000010000000000000100100000000100001000100000001000001001000100000010100000000000101111111111111111111110111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111101111111111000011101100110000001010100011011000000000000010000000000100000000001000000000010000010001010000000001000100100000000100010010100000000000000000000000000000000000100000000100101001000000001100010001000000011000010010001000000101000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011001100000010101000110110000000000000100000000001000000000010000000000100000100011100100000010001001010000001000100100000000000000000000000000000000000001000000001001010010000000011000100010000000110000100100010000001010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110011000000101000001101100100000000001000000000010000000000100000000001000001000101001000000100010010100000010001001010000000000000000000000000000000000010000000010010100100000000110001000100000001100001001000100000010100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101100110000001010000011011001000000000010000000000100000000001000000000010000010001110000000001000100100000000100010010000000000000000000000000000000000000100000000100101001000000001100010001000000011000010010001000000101000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001001100000010101000110110010000000000100000000001000000000010000000000100000100010100000000001001001000000000100100101000000000000000000000000000000000001000000000100010010000010010100100010000000100100100100010000001010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010011000000101010001101100100000000001000000000010000000000100000000001000001000111001000000010010010100000001001001000000000000000000000000000000000000010000000001000100100000100101001000100000001001001001000100000010100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100100110000001010000011011000000000000000000000000000000000000000000000000000110001010010000000100100101000000010010010100000000000000000000000000000000000100000000010001001000001001010010001000000010010010010001000000101000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001001100000010100000110110000000000000000000000000000000000000000000000000001100011100000000001001001000000000100100100000000000000000000000000000000000001000000000100010010000010010100100010000000100100100100010000001010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100011000000101010001101100000000000000000000000000000000000000000000000000011000101000000000110010010000000011001001010000000000000000000000000000000000010000000011010100100000100111001000100000001101001001000100000010100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000110000001010100011011000000000000000000000000000000000000000000000000000110001110010000001100100101000000110010010000000000000000000000000000000000000100000000110101001000001001110010001000000011010010010001000000101000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010001100000010100000110110010000000000000000000000000000000000000000000000001100010100100000011001001010000001100100101000000000000000000000000000000000001000000001101010010000010011100100010000000110100100100010000001010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100011000000101000001101100100000000000000000000000000000000000000000000000011000111000000000110010010000000011001001000000000000000000000000000000000000010000000011010100100000100111001000100000001101001001000100000010100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000110000001010100011011001000000000000000000000000000000000000000000000000110001010000000000010100100000000001010010100000000000000000000000000000000000100000000001001001000000001001010011000000010001010010001000000101000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000001100000010101000110110010000000000000000000000000000000000000000000000001100011100100000000101001010000000010100100000000000000000000000000000000000001000000000010010010000000010010100110000000100010100100010000001010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000011000000101000001101100000000000001000000000000000000000000000000000000011000101001000000001010010100000000101001010000000000000000000000000000000000010000000000100100100000000100101001100000001000101001000100000010100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000110000001010000011011000000000000010000000000000000000000000000000000000110001110000000000010100100000000001010010000000000000000000000000000000000000100000000001001001000000001001010011000000010001010010001000000101000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011110100000010101000110110000000000000100000000000000000000000000000000000001100010100000000010101001000000001010100101000000000000000000000000000000000001000000001011010010000000011010100110000000110010100100010000001010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111101000000101010001101100000000000001000000000000000000000000000000000000011000111001000000101010010100000010101001000000000000000000000000000000000000010000000010110100100000000110101001100000001100101001000100000010100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101111010000001010000011011001000000000010000000000000000000000000000000000000110001010010000001010100101000000101010010100000000000000000000000000000000000100000000101101001000000001101010011000000011001010010001000000101000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011110100000010100000110110010000000000100000000000000000000000000000000000001100011100000000010101001000000001010100100000000000000000000000000000000000001000000001011010010000000011010100110000000110010100100010000001010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011101000000101010001101100100000000001000000000000000000000000000000000000011000101000000000011010010000000001101001010000000000000000000000000000000000010000000001100100100000100101101001100000001001101001000100000010100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100111010000001010100011011001000000000010000000000000000000000000000000000000110001110010000000110100101000000011010010000000000000000000000000000000000000100000000011001001000001001011010011000000010011010010001000000101000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001110100000010100000110110000000000000000000000001000000000000000000000000001100010100100000001101001010000000110100101000000000000000000000000000000000001000000000110010010000010010110100110000000100110100100010000001010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011101000000101000001101100000000000000000000000010000000000000000000000000011000111000000000011010010000000001101001000000000000000000000000000000000000010000000001100100100000100101101001100000001001101001000100000010100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101011010000001010100011011000000000000000000000000100000000000000000000000000110001010000000001110100100000000111010010100000000000000000000000000000000000100000000111101001000001001111010011000000011011010010001000000101000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010110100000010101000110110000000000000000000000001000000000000000000000000001100011100100000011101001010000001110100100000000000000000000000000000000000001000000001111010010000010011110100110000000110110100100010000001010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101101000000101000001101100100000000000000000000010000000000000000000000000011000101001000000111010010100000011101001010000000000000000000000000000000000010000000011110100100000100111101001100000001101101001000100000010100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101011010000001010000011011001000000000000000000000100000000000000000000000000110001110000000001110100100000000111010010000000000000000000000000000000000000100000000111101001000001001111010011000000011011010010001000000101000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000110100000010101000110110010000000000000000000001000000000000000000000000001100010100000000000011001000000000001100101000000000000000000000000000000000001000000000000110010000000010001100010000000101001100100010000001010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001101000000101010001101100100000000000000000000010000000000000000000000000011000111001000000000110010100000000011001000000000000000000000000000000000000010000000000001100100000000100011000100000001010011001000100000010100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100011010000001010000011011000000000000010000000000100000000000000000000000000110001010010000000001100101000000000110010100000000000000000000000000000000000100000000000011001000000001000110001000000010100110010001000000101000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000110100000010100000110110000000000000100000000001000000000000000000000000001100011100000000000011001000000000001100100000000000000000000000000000000000001000000000000110010000000010001100010000000101001100100010000001010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110101000000101010001101100000000000001000000000010000000000000000000000000011000101000000000100110010000000010011001010000000000000000000000000000000000010000000010011100100000000110011000100000001110011001000100000010100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101101010000001010100011011000000000000010000000000100000000000000000000000000110001110010000001001100101000000100110010000000000000000000000000000000000000100000000100111001000000001100110001000000011100110010001000000101000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011010100000010100000110110010000000000100000000001000000000000000000000000001100010100100000010011001010000001001100101000000000000000000000000000000000001000000001001110010000000011001100010000000111001100100010000001010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110101000000101000001101100100000000001000000000010000000000000000000000000011000111000000000100110010000000010011001000000000000000000000000000000000000010000000010011100100000000110011000100000001110011001000100000010100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100101010000001010100011011001000000000010000000000100000000000000000000000000110001010000000000101100100000000010110010100000000000000000000000000000000000100000000010011001000001001010110001000000010110110010001000000101000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001010100000010101000110110010000000000100000000001000000000000000000000000001100011100100000001011001010000000101100100000000000000000000000000000000000001000000000100110010000010010101100010000000101101100100010000001010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010101000000101000001101100000000000000000000000000000000000100000000000000011000101001000000010110010100000001011001010000000000000000000000000000000000010000000001001100100000100101011000100000001011011001000100000010100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100101010000001010000011011000000000000000000000000000000000001000000000000000110001110000000000101100100000000010110010000000000000000000000000000000000000100000000010011001000001001010110001000000010110110010001000000101000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010010100000010101000110110000000000000000000000000000000000010000000000000001100010100000000011011001000000001101100101000000000000000000000000000000000001000000001101110010000010011101100010000000111101100100010000001010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100101000000101010001101100000000000000000000000000000000000100000000000000011000111001000000110110010100000011011001000000000000000000000000000000000000010000000011011100100000100111011000100000001111011001000100000010100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101001010000001010000011011001000000000000000000000000000000001000000000000000110001010010000001101100101000000110110010100000000000000000000000000000000000100000000110111001000001001110110001000000011110110010001000000101000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010010100000010100000110110010000000000000000000000000000000010000000000000001100011100000000011011001000000001101100100000000000000000000000000000000000001000000001101110010000010011101100010000000111101100100010000001010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000101000000101010001101100100000000000000000000000000000000100000000000000011000101000000000001110010000000000111001010000000000000000000000000000000000010000000000101100100000000100111001100000001010111001000100000010100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100001010000001010100011011001000000000000000000000000000000001000000000000000110001110010000000011100101000000001110010000000000000000000000000000000000000100000000001011001000000001001110011000000010101110010001000000101000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000010100000010100000110110000000000000100000000000000000000010000000000000001100010100100000000111001010000000011100101000000000000000000000000000000000001000000000010110010000000010011100110000000101011100100010000001010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000101000000101000001101100000000000001000000000000000000000100000000000000011000111000000000001110010000000000111001000000000000000000000000000000000000010000000000101100100000000100111001100000001010111001000100000010100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101110010000001010100011011000000000000010000000000000000000001000000000000000110001010000000001011100100000000101110010100000000000000000000000000000000000100000000101111001000000001101110011000000011101110010001000000101000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011100100000010101000110110000000000000100000000000000000000010000000000000001100011100100000010111001010000001011100100000000000000000000000000000000000001000000001011110010000000011011100110000000111011100100010000001010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111001000000101000001101100100000000001000000000000000000000100000000000000011000101001000000101110010100000010111001010000000000000000000000000000000000010000000010111100100000000110111001100000001110111001000100000010100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101110010000001010000011011001000000000010000000000000000000001000000000000000110001110000000001011100100000000101110010000000000000000000000000000000000000100000000101111001000000001101110011000000011101110010001000000101000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100100000010101000110110010000000000100000000000000000000010000000000000001100010100000000001111001000000000111100101000000000000000000000000000000000001000000000110110010000010010111100110000000101111100100010000001010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011001000000101010001101100100000000001000000000000000000000100000000000000011000111001000000011110010100000001111001000000000000000000000000000000000000010000000001101100100000100101111001100000001011111001000100000010100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110010000001010000011011000000000000000000000000100000000001000000000000000110001010010000000111100101000000011110010100000000000000000000000000000000000100000000011011001000001001011110011000000010111110010001000000101000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100100000010100000110110000000000000000000000001000000000010000000000000001100011100000000001111001000000000111100100000000000000000000000000000000000001000000000110110010000010010111100110000000101111100100010000001010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101001000000101010001101100000000000000000000000010000000000100000000000000011000101000000000111110010000000011111001010000000000000000000000000000000000010000000011111100100000100111111001100000001111111001000100000010100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101010010000001010100011011000000000000000000000000100000000001000000000000000110001110010000001111100101000000111110010000000000000000000000000000000000000100000000111111001000001001111110011000000011111110010001000000101000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010100100000010100000110110010000000000000000000001000000000010000000000000001100010100100000011111001010000001111100101000000000000000000000000000000000001000000001111110010000010011111100110000000111111100100010000001010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101001000000101000001101100100000000000000000000010000000000100000000000000011000111000000000111110010000000011111001000000000000000000000000000000000000010000000011111100100000100111111001100000001111111001000100000010100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100010010000001010100011011001000000000000000000000100000000001000000000000000110001010000000000000010100000000000001010100000000000000000000000000000000000100000000000000101000000001000001001000000010000001010000000010101000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000100100000010101000110110010000000000000000000001000000000010000000000000001100011100100000000000101010000000000010100000000000000000000000000000000000001000000000000001010000000010000010010000000100000010100000000101010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001001000000101000001101100000000000001000000000010000000000100000000000000011000101001000000000001010100000000000101010000000000000000000000000000000000010000000000000010100000000100000100100000001000000101000000001010100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100010010000001010000011011000000000000010000000000100000000001000000000000000110001110000000000000010100000000000001010000000000000000000000000000000000000100000000000000101000000001000001001000000010000001010000000010101000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011000100000010101000110110000000000000100000000001000000000010000000000000001100010100000000010000101000000001000010101000000000000000000000000000000000001000000001001001010000000011000010010000000110000010100000000101010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110001000000101010001101100000000000001000000000010000000000100000000000000011000111001000000100001010100000010000101000000000000000000000000000000000000010000000010010010100000000110000100100000001100000101000000001010100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101100010000001010000011011001000000000010000000000100000000001000000000000000110001010010000001000010101000000100001010100000000000000000000000000000000000100000000100100101000000001100001001000000011000001010000000010101000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011000100000010100000110110010000000000100000000001000000000010000000000000001100011100000000010000101000000001000010100000000000000000000000000000000000001000000001001001010000000011000010010000000110000010100000000101010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010001000000101010001101100100000000001000000000010000000000100000000000000011000101000000000010001010000000001000101010000000000000000000000000000000000010000000001000010100000100101000100100000001001000101000000001010100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100100010000001010100011011001000000000010000000000100000000001000000000000000110001110010000000100010101000000010001010000000000000000000000000000000000000100000000010000101000001001010001001000000010010001010000000010101000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001000100000010100000110110000000000000000000000000000000000000000000000100001100010100100000001000101010000000100010101000000000000000000000000000000000001000000000100001010000010010100010010000000100100010100000000101010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010001000000101000001101100000000000000000000000000000000000000000000001000011000111000000000010001010000000001000101000000000000000000000000000000000000010000000001000010100000100101000100100000001001000101000000001010100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101000010000001010100011011000000000000000000000000000000000000000000000010000110001010000000001100010100000000110001010100000000000000000000000000000000000100000000110100101000001001110001001000000011010001010000000010101000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010000100000010101000110110000000000000000000000000000000000000000000000100001100011100100000011000101010000001100010100000000000000000000000000000000000001000000001101001010000010011100010010000000110100010100000000101010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100001000000101000001101100100000000000000000000000000000000000000000001000011000101001000000110001010100000011000101010000000000000000000000000000000000010000000011010010100000100111000100100000001101000101000000001010100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000010000001010000011011001000000000000000000000000000000000000000000010000110001110000000001100010100000000110001010000000000000000000000000000000000000100000000110100101000001001110001001000000011010001010000000010101000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000000100000010101000110110010000000000000000000000000000000000000000000100001100010100000000000100101000000000010010101000000000000000000000000000000000001000000000010001010000000010010010110000000100010010100000000101010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000001000000101010001101100100000000000000000000000000000000000000000001000011000111001000000001001010100000000100101000000000000000000000000000000000000010000000000100010100000000100100101100000001000100101000000001010100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000010000001010000011011000000000000010000000000000000000000000000000010000110001010010000000010010101000000001001010100000000000000000000000000000000000100000000001000101000000001001001011000000010001001010000000010101000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000000100000010100000110110000000000000100000000000000000000000000000000100001100011100000000000100101000000000010010100000000000000000000000000000000000001000000000010001010000000010010010110000000100010010100000000101010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111110000000101010001101100000000000001000000000000000000000000000000001000011000101000000000101001010000000010100101010000000000000000000000000000000000010000000010110010100000000110100101100000001100100101000000001010100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101111100000001010100011011000000000000010000000000000000000000000000000010000110001110010000001010010101000000101001010000000000000000000000000000000000000100000000101100101000000001101001011000000011001001010000000010101000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011111000000010100000110110010000000000100000000000000000000000000000000100001100010100100000010100101010000001010010101000000000000000000000000000000000001000000001011001010000000011010010110000000110010010100000000101010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111110000000101000001101100100000000001000000000000000000000000000000001000011000111000000000101001010000000010100101000000000000000000000000000000000000010000000010110010100000000110100101100000001100100101000000001010100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100111100000001010100011011001000000000010000000000000000000000000000000010000110001010000000000110010100000000011001010100000000000000000000000000000000000100000000011000101000001001011001011000000010011001010000000010101000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001111000000010101000110110010000000000100000000000000000000000000000000100001100011100100000001100101010000000110010100000000000000000000000000000000000001000000000110001010000010010110010110000000100110010100000000101010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011110000000101000001101100000000000000000000000010000000000000000000001000011000101001000000011001010100000001100101010000000000000000000000000000000000010000000001100010100000100101100101100000001001100101000000001010100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100111100000001010000011011000000000000000000000000100000000000000000000010000110001110000000000110010100000000011001010000000000000000000000000000000000000100000000011000101000001001011001011000000010011001010000000010101000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010111000000010101000110110000000000000000000000001000000000000000000000100001100010100000000011100101000000001110010101000000000000000000000000000000000001000000001111001010000010011110010110000000110110010100000000101010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101110000000101010001101100000000000000000000000010000000000000000000001000011000111001000000111001010100000011100101000000000000000000000000000000000000010000000011110010100000100111100101100000001101100101000000001010100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101011100000001010000011011001000000000000000000000100000000000000000000010000110001010010000001110010101000000111001010100000000000000000000000000000000000100000000111100101000001001111001011000000011011001010000000010101000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010111000000010100000110110010000000000000000000001000000000000000000000100001100011100000000011100101000000001110010100000000000000000000000000000000000001000000001111001010000010011110010110000000110110010100000000101010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001110000000101010001101100100000000000000000000010000000000000000000001000011000101000000000000101010000000000010101010000000000000000000000000000000000010000000000001010100000000100010100100000001010010101000000001010100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100011100000001010100011011001000000000000000000000100000000000000000000010000110001110010000000001010101000000000101010000000000000000000000000000000000000100000000000010101000000001000101001000000010100101010000000010101000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000111000000010100000110110000000000000100000000001000000000000000000000100001100010100100000000010101010000000001010101000000000000000000000000000000000001000000000000101010000000010001010010000000101001010100000000101010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001110000000101000001101100000000000001000000000010000000000000000000001000011000111000000000000101010000000000010101000000000000000000000000000000000000010000000000001010100000000100010100100000001010010101000000001010100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101101100000001010100011011000000000000010000000000100000000000000000000010000110001010000000001001010100000000100101010100000000000000000000000000000000000100000000100110101000000001100101001000000011100101010000000010101000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011011000000010101000110110000000000000100000000001000000000000000000000100001100011100100000010010101010000001001010100000000000000000000000000000000000001000000001001101010000000011001010010000000111001010100000000101010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110110000000101000001101100100000000001000000000010000000000000000000001000011000101001000000100101010100000010010101010000000000000000000000000000000000010000000010011010100000000110010100100000001110010101000000001010100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101101100000001010000011011001000000000010000000000100000000000000000000010000110001110000000001001010100000000100101010000000000000000000000000000000000000100000000100110101000000001100101001000000011100101010000000010101000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001011000000010101000110110010000000000100000000001000000000000000000000100001100010100000000001010101000000000101010101000000000000000000000000000000000001000000000100101010000010010101010010000000101101010100000000101010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010110000000101010001101100100000000001000000000010000000000000000000001000011000111001000000010101010100000001010101000000000000000000000000000000000000010000000001001010100000100101010100100000001011010101000000001010100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100101100000001010000011011000000000000000000000000000000000001000000000010000110001010010000000101010101000000010101010100000000000000000000000000000000000100000000010010101000001001010101001000000010110101010000000010101000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001011000000010100000110110000000000000000000000000000000000010000000000100001100011100000000001010101000000000101010100000000000000000000000000000000000001000000000100101010000010010101010010000000101101010100000000101010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100110000000101010001101100000000000000000000000000000000000100000000001000011000101000000000110101010000000011010101010000000000000000000000000000000000010000000011011010100000100111010100100000001111010101000000001010100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101001100000001010100011011000000000000000000000000000000000001000000000010000110001110010000001101010101000000110101010000000000000000000000000000000000000100000000110110101000001001110101001000000011110101010000000010101000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010011000000010100000110110010000000000000000000000000000000010000000000100001100010100100000011010101010000001101010101000000000000000000000000000000000001000000001101101010000010011101010010000000111101010100000000101010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100110000000101000001101100100000000000000000000000000000000100000000001000011000111000000000110101010000000011010101000000000000000000000000000000000000010000000011011010100000100111010100100000001111010101000000001010100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100001100000001010100011011001000000000000000000000000000000001000000000010000110001010000000000011010100000000001101010100000000000000000000000000000000000100000000001010101000000001001101011000000010101101010000000010101000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000011000000010101000110110010000000000000000000000000000000010000000000100001100011100100000000110101010000000011010100000000000000000000000000000000000001000000000010101010000000010011010110000000101011010100000000101010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000110000000101000001101100000000000001000000000000000000000100000000001000011000101001000000001101010100000000110101010000000000000000000000000000000000010000000000101010100000000100110101100000001010110101000000001010100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100001100000001010000011011000000000000010000000000000000000001000000000010000110001110000000000011010100000000001101010000000000000000000000000000000000000100000000001010101000000001001101011000000010101101010000000010101000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011101000000010101000110110000000000000100000000000000000000010000000000100001100010100000000010110101000000001011010101000000000000000000000000000000000001000000001011101010000000011011010110000000111011010100000000101010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111010000000101010001101100000000000001000000000000000000000100000000001000011000111001000000101101010100000010110101000000000000000000000000000000000000010000000010111010100000000110110101100000001110110101000000001010100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101110100000001010000011011001000000000010000000000000000000001000000000010000110001010010000001011010101000000101101010100000000000000000000000000000000000100000000101110101000000001101101011000000011101101010000000010101000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011101000000010100000110110010000000000100000000000000000000010000000000100001100011100000000010110101000000001011010100000000000000000000000000000000000001000000001011101010000000011011010110000000111011010100000000101010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011010000000101010001101100100000000001000000000000000000000100000000001000011000101000000000011101010000000001110101010000000000000000000000000000000000010000000001101010100000100101110101100000001011110101000000001010100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110100000001010100011011001000000000010000000000000000000001000000000010000110001110010000000111010101000000011101010000000000000000000000000000000000000100000000011010101000001001011101011000000010111101010000000010101000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001101000000010100000110110000000000000000000000001000000000010000000000100001100010100100000001110101010000000111010101000000000000000000000000000000000001000000000110101010000010010111010110000000101111010100000000101010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011010000000101000001101100000000000000000000000010000000000100000000001000011000111000000000011101010000000001110101000000000000000000000000000000000000010000000001101010100000100101110101100000001011110101000000001010100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101010100000001010100011011000000000000000000000000100000000001000000000010000110001010000000001111010100000000111101010100000000000000000000000000000000000100000000111110101000001001111101011000000011111101010000000010101000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010101000000010101000110110000000000000000000000001000000000010000000000100001100011100100000011110101010000001111010100000000000000000000000000000000000001000000001111101010000010011111010110000000111111010100000000101010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101010000000101000001101100100000000000000000000010000000000100000000001000011000101001000000111101010100000011110101010000000000000000000000000000000000010000000011111010100000100111110101100000001111110101000000001010100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101010100000001010000011011001000000000000000000000100000000001000000000010000110001110000000001111010100000000111101010000000000000000000000000000000000000100000000111110101000001001111101011000000011111101010000000010101000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000101000000010101000110110010000000000000000000001000000000010000000000100001100010100000000000001101000000000000110101000000000000000000000000000000000001000000000000011010000000010000110010000000100000110100010000101010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001010000000101010001101100100000000000000000000010000000000100000000001000011000111001000000000011010100000000001101000000000000000000000000000000000000010000000000000110100000000100001100100000001000001101000100001010100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100010100000001010000011011000000000000010000000000100000000001000000000010000110001010010000000000110101000000000011010100000000000000000000000000000000000100000000000001101000000001000011001000000010000011010001000010101000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000101000000010100000110110000000000000100000000001000000000010000000000100001100011100000000000001101000000000000110100000000000000000000000000000000000001000000000000011010000000010000110010000000100000110100010000101010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110010000000101010001101100000000000001000000000010000000000100000000001000011000101000000000100011010000000010001101010000000000000000000000000000000000010000000010010110100000000110001100100000001100001101000100001010100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101100100000001010100011011000000000000010000000000100000000001000000000010000110001110010000001000110101000000100011010000000000000000000000000000000000000100000000100101101000000001100011001000000011000011010001000010101000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011001000000010100000110110010000000000100000000001000000000010000000000100001100010100100000010001101010000001000110101000000000000000000000000000000000001000000001001011010000000011000110010000000110000110100010000101010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110010000000101000001101100100000000001000000000010000000000100000000001000011000111000000000100011010000000010001101000000000000000000000000000000000000010000000010010110100000000110001100100000001100001101000100001010100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100100100000001010100011011001000000000010000000000100000000001000000000010000110001010000000000100110100000000010011010100000000000000000000000000000000000100000000010001101000001001010011001000000010010011010001000010101000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001001000000010101000110110010000000000100000000001000000000010000000000100001100011100100000001001101010000000100110100000000000000000000000000000000000001000000000100011010000010010100110010000000100100110100010000101010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010010000000101000001101100000000000000000000000000000000000000000000000000000100101001000000010011010100000001001101010000000000000000000000000000000000010000000001000110100000100101001100100000001001001101000100001010100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100100100000001010000011011000000000000000000000000000000000000000000000000000001001110000000000100110100000000010011010000000000000000000000000000000000000100000000010001101000001001010011001000000010010011010001000010101000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010001000000010101000110110000000000000000000000000000000000000000000000000000010010100000000011001101000000001100110101000000000000000000000000000000000001000000001101011010000010011100110010000000110100110100010000101010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100010000000101010001101100000000000000000000000000000000000000000000000000000100111001000000110011010100000011001101000000000000000000000000000000000000010000000011010110100000100111001100100000001101001101000100001010100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000100000001010000011011001000000000000000000000000000000000000000000000000001001010010000001100110101000000110011010100000000000000000000000000000000000100000000110101101000001001110011001000000011010011010001000010101000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010001000000010100000110110010000000000000000000000000000000000000000000000000010011100000000011001101000000001100110100000000000000000000000000000000000001000000001101011010000010011100110010000000110100110100010000101010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000010000000101010001101100100000000000000000000000000000000000000000000000000100101000000000001011010000000000101101010000000000000000000000000000000000010000000000100110100000000100101101100000001000101101000100001010100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000100000001010100011011001000000000000000000000000000000000000000000000000001001110010000000010110101000000001011010000000000000000000000000000000000000100000000001001101000000001001011011000000010001011010001000010101000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000001000000010100000110110000000000000100000000000000000000000000000000000000010010100100000000101101010000000010110101000000000000000000000000000000000001000000000010011010000000010010110110000000100010110100010000101010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000010000000101000001101100000000000001000000000000000000000000000000000000000100111000000000001011010000000000101101000000000000000000000000000000000000010000000000100110100000000100101101100000001000101101000100001010100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101111000000001010100011011000000000000010000000000000000000000000000000000000001001010000000001010110100000000101011010100000000000000000000000000000000000100000000101101101000000001101011011000000011001011010001000010101000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011110000000010101000110110000000000000100000000000000000000000000000000000000010011100100000010101101010000001010110100000000000000000000000000000000000001000000001011011010000000011010110110000000110010110100010000101010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111100000000101000001101100100000000001000000000000000000000000000000000000000100101001000000101011010100000010101101010000000000000000000000000000000000010000000010110110100000000110101101100000001100101101000100001010100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101111000000001010000011011001000000000010000000000000000000000000000000000000001001110000000001010110100000000101011010000000000000000000000000000000000000100000000101101101000000001101011011000000011001011010001000010101000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001110000000010101000110110010000000000100000000000000000000000000000000000000010010100000000001101101000000000110110101000000000000000000000000000000000001000000000110011010000010010110110110000000100110110100010000101010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011100000000101010001101100100000000001000000000000000000000000000000000000000100111001000000011011010100000001101101000000000000000000000000000000000000010000000001100110100000100101101101100000001001101101000100001010100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100111000000001010000011011000000000000000000000000100000000000000000000000000001001010010000000110110101000000011011010100000000000000000000000000000000000100000000011001101000001001011011011000000010011011010001000010101000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001110000000010100000110110000000000000000000000001000000000000000000000000000010011100000000001101101000000000110110100000000000000000000000000000000000001000000000110011010000010010110110110000000100110110100010000101010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101100000000101010001101100000000000000000000000010000000000000000000000000000100101000000000111011010000000011101101010000000000000000000000000000000000010000000011110110100000100111101101100000001101101101000100001010100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101011000000001010100011011000000000000000000000000100000000000000000000000000001001110010000001110110101000000111011010000000000000000000000000000000000000100000000111101101000001001111011011000000011011011010001000010101000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010110000000010100000110110010000000000000000000001000000000000000000000000000010010100100000011101101010000001110110101000000000000000000000000000000000001000000001111011010000010011110110110000000110110110100010000101010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101100000000101000001101100100000000000000000000010000000000000000000000000000100111000000000111011010000000011101101000000000000000000000000000000000000010000000011110110100000100111101101100000001101101101000100001010100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100011000000001010100011011001000000000000000000000100000000000000000000000000001001010000000000001110100000000000111010100000000000000000000000000000000000100000000000011101000000001000111001000000010100111010001000010101000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000110000000010101000110110010000000000000000000001000000000000000000000000000010011100100000000011101010000000001110100000000000000000000000000000000000001000000000000111010000000010001110010000000101001110100010000101010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001100000000101000001101100000000000001000000000010000000000000000000000000000100101001000000000111010100000000011101010000000000000000000000000000000000010000000000001110100000000100011100100000001010011101000100001010100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100011000000001010000011011000000000000010000000000100000000000000000000000000001001110000000000001110100000000000111010000000000000000000000000000000000000100000000000011101000000001000111001000000010100111010001000010101000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011010000000010101000110110000000000000100000000001000000000000000000000000000010010100000000010011101000000001001110101000000000000000000000000000000000001000000001001111010000000011001110010000000111001110100010000101010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110100000000101010001101100000000000001000000000010000000000000000000000000000100111001000000100111010100000010011101000000000000000000000000000000000000010000000010011110100000000110011100100000001110011101000100001010100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101101000000001010000011011001000000000010000000000100000000000000000000000000001001010010000001001110101000000100111010100000000000000000000000000000000000100000000100111101000000001100111001000000011100111010001000010101000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011010000000010100000110110010000000000100000000001000000000000000000000000000010011100000000010011101000000001001110100000000000000000000000000000000000001000000001001111010000000011001110010000000111001110100010000101010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010100000000101010001101100100000000001000000000010000000000000000000000000000100101000000000010111010000000001011101010000000000000000000000000000000000010000000001001110100000100101011100100000001011011101000100001010100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100101000000001010100011011001000000000010000000000100000000000000000000000000001001110010000000101110101000000010111010000000000000000000000000000000000000100000000010011101000001001010111001000000010110111010001000010101000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001010000000010100000110110000000000000000000000000000000000010000000000000000010010100100000001011101010000000101110101000000000000000000000000000000000001000000000100111010000010010101110010000000101101110100010000101010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010100000000101000001101100000000000000000000000000000000000100000000000000000100111000000000010111010000000001011101000000000000000000000000000000000000010000000001001110100000100101011100100000001011011101000100001010100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101001000000001010100011011000000000000000000000000000000000001000000000000000001001010000000001101110100000000110111010100000000000000000000000000000000000100000000110111101000001001110111001000000011110111010001000010101000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010010000000010101000110110000000000000000000000000000000000010000000000000000010011100100000011011101010000001101110100000000000000000000000000000000000001000000001101111010000010011101110010000000111101110100010000101010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100100000000101000001101100100000000000000000000000000000000100000000000000000100101001000000110111010100000011011101010000000000000000000000000000000000010000000011011110100000100111011100100000001111011101000100001010100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101001000000001010000011011001000000000000000000000000000000001000000000000000001001110000000001101110100000000110111010000000000000000000000000000000000000100000000110111101000001001110111001000000011110111010001000010101000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000010000000010101000110110010000000000000000000000000000000010000000000000000010010100000000000111101000000000011110101000000000000000000000000000000000001000000000010111010000000010011110110000000101011110100010000101010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000100000000101010001101100100000000000000000000000000000000100000000000000000100111001000000001111010100000000111101000000000000000000000000000000000000010000000000101110100000000100111101100000001010111101000100001010100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100001000000001010000011011000000000000010000000000000000000001000000000000000001001010010000000011110101000000001111010100000000000000000000000000000000000100000000001011101000000001001111011000000010101111010001000010101000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000010000000010100000110110000000000000100000000000000000000010000000000000000010011100000000000111101000000000011110100000000000000000000000000000000000001000000000010111010000000010011110110000000101011110100010000101010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111000000000101010001101100000000000001000000000000000000000100000000000000000100101000000000101111010000000010111101010000000000000000000000000000000000010000000010111110100000000110111101100000001110111101000100001010100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101110000000001010100011011000000000000010000000000000000000001000000000000000001001110010000001011110101000000101111010000000000000000000000000000000000000100000000101111101000000001101111011000000011101111010001000010101000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011100000000010100000110110010000000000100000000000000000000010000000000000000010010100100000010111101010000001011110101000000000000000000000000000000000001000000001011111010000000011011110110000000111011110100010000101010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111000000000101000001101100100000000001000000000000000000000100000000000000000100111000000000101111010000000010111101000000000000000000000000000000000000010000000010111110100000000110111101100000001110111101000100001010100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110000000001010100011011001000000000010000000000000000000001000000000000000001001010000000000111110100000000011111010100000000000000000000000000000000000100000000011011101000001001011111011000000010111111010001000010101000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100000000010101000110110010000000000100000000000000000000010000000000000000010011100100000001111101010000000111110100000000000000000000000000000000000001000000000110111010000010010111110110000000101111110100010000101010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000000000101000001101100000000000000000000000010000000000100000000000000000100101001000000011111010100000001111101010000000000000000000000000000000000010000000001101110100000100101111101100000001011111101000100001010100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110000000001010000011011000000000000000000000000100000000001000000000000000001001110000000000111110100000000011111010000000000000000000000000000000000000100000000011011101000001001011111011000000010111111010001000010101000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010100000000010101000110110000000000000000000000001000000000010000000000000000010010100000000011111101000000001111110101000000000000000000000000000000000001000000001111111010000010011111110110000000111111110100010000101010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101000000000101010001101100000000000000000000000010000000000100000000000000000100111001000000111111010100000011111101000000000000000000000000000000000000010000000011111110100000100111111101100000001111111101000100001010100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101010000000001010000011011001000000000000000000000100000000001000000000000000001001010010000001111110101000000111111010100000000000000000000000000000000000100000000111111101000001001111111011000000011111111010001000010101000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010100000000010100000110110010000000000000000000001000000000010000000000000000010011100000000011111101000000001111110100000000000000000000000000000000000001000000001111111010000010011111110110000000111111110100010000101010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001000000000101010001101100100000000000000000000010000000000100000000000000000100101000000000000000110000000000000011010000000000000000000000000000000000010000000000000001100000000100000010100000001000000011000000000110100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100010000000001010100011011001000000000000000000000100000000001000000000000000001001110010000000000001101000000000000110000000000000000000000000000000000000100000000000000011000000001000000101000000010000000110000000001101000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000100000000010100000110110000000000000100000000001000000000010000000000000000010010100100000000000011010000000000001101000000000000000000000000000000000001000000000000000110000000010000001010000000100000001100000000011010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001000000000101000001101100000000000001000000000010000000000100000000000000000100111000000000000000110000000000000011000000000000000000000000000000000000010000000000000001100000000100000010100000001000000011000000000110100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101100000000001010100011011000000000000010000000000100000000001000000000000000001001010000000001000001100000000100000110100000000000000000000000000000000000100000000100100011000000001100000101000000011000000110000000001101000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011000000000010101000110110000000000000100000000001000000000010000000000000000010011100100000010000011010000001000001100000000000000000000000000000000000001000000001001000110000000011000001010000000110000001100000000011010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110000000000101000001101100100000000001000000000010000000000100000000000000000100101001000000100000110100000010000011010000000000000000000000000000000000010000000010010001100000000110000010100000001100000011000000000110100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101100000000001010000011011001000000000010000000000100000000001000000000000000001001110000000001000001100000000100000110000000000000000000000000000000000000100000000100100011000000001100000101000000011000000110000000001101000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001000000000010101000110110010000000000100000000001000000000010000000000000000010010100000000001000011000000000100001101000000000000000000000000000000000001000000000100000110000010010100001010000000100100001100000000011010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010000000000101010001101100100000000001000000000010000000000100000000000000000100111001000000010000110100000001000011000000000000000000000000000000000000010000000001000001100000100101000010100000001001000011000000000110100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100100000000001010000011011000000000000000000000000000000000000000000000010000001001010010000000100001101000000010000110100000000000000000000000000000000000100000000010000011000001001010000101000000010010000110000000001101000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001000000000010100000110110000000000000000000000000000000000000000000000100000010011100000000001000011000000000100001100000000000000000000000000000000000001000000000100000110000010010100001010000000100100001100000000011010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100000000000101010001101100000000000000000000000000000000000000000000001000000100101000000000110000110000000011000011010000000000000000000000000000000000010000000011010001100000100111000010100000001101000011000000000110100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000000000001010100011011000000000000000000000000000000000000000000000010000001001110010000001100001101000000110000110000000000000000000000000000000000000100000000110100011000001001110000101000000011010000110000000001101000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010000000000010100000110110010000000000000000000000000000000000000000000100000010010100100000011000011010000001100001101000000000000000000000000000000000001000000001101000110000010011100001010000000110100001100000000011010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100000000000101000001101100100000000000000000000000000000000000000000001000000100111000000000110000110000000011000011000000000000000000000000000000000000010000000011010001100000100111000010100000001101000011000000000110100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000000000001010100011011001000000000000000000000000000000000000000000010000001001010000000000010001100000000001000110100000000000000000000000000000000000100000000001000011000000001001000111000000010001000110000000001101000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000000000000010101000110110010000000000000000000000000000000000000000000100000010011100100000000100011010000000010001100000000000000000000000000000000000001000000000010000110000000010010001110000000100010001100000000011010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000000000000101000001101100000000000001000000000000000000000000000000001000000100101001000000001000110100000000100011010000000000000000000000000000000000010000000000100001100000000100100011100000001000100011000000000110100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000000000001010000011011000000000000010000000000000000000000000000000010000001001110000000000010001100000000001000110000000000000000000000000000000000000100000000001000011000000001001000111000000010001000110000000001101000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000010111010110000000010101000110110000000000000100000000000000000000000000000000100000010010100000000010100011000000001010001101000000000000000000000000000000000001000000001011000110000000011010001110000000110010001100000000011010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000101110101001000000101010001101100000000000001000000000000000000000000000000001000000100111001000000101000110100000010100011000000000000000000000000000000000000010000000010110001100000000110100011100000001100100011000000000110100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000001011101011110000001010000011011001000000000010000000000000000000000000000000010000001001010010000001010001101000000101000110100000000000000000000000000000000000100000000101100011000000001101000111000000011001000110000000001101000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000010111010101010000010100000110110010000000000100000000000000000000000000000000100000010011100000000010100011000000001010001100000000000000000000000000000000000001000000001011000110000000011010001110000000110010001100000000011010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000101110001101100000101010001101100100000000001000000000000000000000000000000001000000100101000000000011000110000000001100011010000000000000000000000000000000000010000000001100001100000100101100011100000001001100011000000000110100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100011111000001010100011011001000000000010000000000000000000000000000000010000001001110010000000110001101000000011000110000000000000000000000000000000000000100000000011000011000001001011000111000000010011000110000000001101000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000111110000010100000110110000000000000000000000001000000000000000000000100000010010100100000001100011010000000110001101000000000000000000000000000000000001000000000110000110000010010110001110000000100110001100000000011010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001111100000101000001101100000000000000000000000010000000000000000000001000000100111000000000011000110000000001100011000000000000000000000000000000000000010000000001100001100000100101100011100000001001100011000000000110100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101101111000001010100011011000000000000000000000000100000000000000000000010000001001010000000001110001100000000111000110100000000000000000000000000000000000100000000111100011000001001111000111000000011011000110000000001101000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011011110000010101000110110000000000000000000000001000000000000000000000100000010011100100000011100011010000001110001100000000000000000000000000000000000001000000001111000110000010011110001110000000110110001100000000011010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110111100000101000001101100100000000000000000000010000000000000000000001000000100101001000000111000110100000011100011010000000000000000000000000000000000010000000011110001100000100111100011100000001101100011000000000110100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101101111000001010000011011001000000000000000000000100000000000000000000010000001001110000000001110001100000000111000110000000000000000000000000000000000000100000000111100011000001001111000111000000011011000110000000001101000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001011110000010101000110110010000000000000000000001000000000000000000000100000010010100000000000010011000000000001001101000000000000000000000000000000000001000000000000100110000000010001001010000000101001001100000000011010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110010111100000101010001101100100000000000000000000010000000000000000000001000000100111001000000000100110100000000010011000000000000000000000000000000000000010000000000001001100000000100010010100000001010010011000000000110100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100101111000001010000011011000000000000010000000000100000000000000000000010000001001010010000000001001101000000000100110100000000000000000000000000000000000100000000000010011000000001000100101000000010100100110000000001101000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001011110000010100000110110000000000000100000000001000000000000000000000100000010011100000000000010011000000000001001100000000000000000000000000000000000001000000000000100110000000010001001010000000101001001100000000011010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100111100000101010001101100000000000001000000000010000000000000000000001000000100101000000000100100110000000010010011010000000000000000000000000000000000010000000010011001100000000110010010100000001110010011000000000110100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101001111000001010100011011000000000000010000000000100000000000000000000010000001001110010000001001001101000000100100110000000000000000000000000000000000000100000000100110011000000001100100101000000011100100110000000001101000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010011110000010100000110110010000000000100000000001000000000000000000000100000010010100100000010010011010000001001001101000000000000000000000000000000000001000000001001100110000000011001001010000000111001001100000000011010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100111100000101000001101100100000000001000000000010000000000000000000001000000100111000000000100100110000000010010011000000000000000000000000000000000000010000000010011001100000000110010010100000001110010011000000000110100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100001111000001010100011011001000000000010000000000100000000000000000000010000001001010000000000101001100000000010100110100000000000000000000000000000000000100000000010010011000001001010100101000000010110100110000000001101000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000011110000010101000110110010000000000100000000001000000000000000000000100000010011100100000001010011010000000101001100000000000000000000000000000000000001000000000100100110000010010101001010000000101101001100000000011010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000111100000101000001101100000000000000000000000000000000000100000000001000000100101001000000010100110100000001010011010000000000000000000000000000000000010000000001001001100000100101010010100000001011010011000000000110100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100001111000001010000011011000000000000000000000000000000000001000000000010000001001110000000000101001100000000010100110000000000000000000000000000000000000100000000010010011000001001010100101000000010110100110000000001101000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011101110000010101000110110000000000000000000000000000000000010000000000100000010010100000000011010011000000001101001101000000000000000000000000000000000001000000001101100110000010011101001010000000111101001100000000011010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111011100000101010001101100000000000000000000000000000000000100000000001000000100111001000000110100110100000011010011000000000000000000000000000000000000010000000011011001100000100111010010100000001111010011000000000110100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101110111000001010000011011001000000000000000000000000000000001000000000010000001001010010000001101001101000000110100110100000000000000000000000000000000000100000000110110011000001001110100101000000011110100110000000001101000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011101110000010100000110110010000000000000000000000000000000010000000000100000010011100000000011010011000000001101001100000000000000000000000000000000000001000000001101100110000010011101001010000000111101001100000000011010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011011100000101010001101100100000000000000000000000000000000100000000001000000100101000000000001100110000000000110011010000000000000000000000000000000000010000000000101001100000000100110011100000001010110011000000000110100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100110111000001010100011011001000000000000000000000000000000001000000000010000001001110010000000011001101000000001100110000000000000000000000000000000000000100000000001010011000000001001100111000000010101100110000000001101000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001101110000010100000110110000000000000100000000000000000000010000000000100000010010100100000000110011010000000011001101000000000000000000000000000000000001000000000010100110000000010011001110000000101011001100000000011010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110011011100000101000001101100000000000001000000000000000000000100000000001000000100111000000000001100110000000000110011000000000000000000000000000000000000010000000000101001100000000100110011100000001010110011000000000110100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101010111000001010100011011000000000000010000000000000000000001000000000010000001001010000000001011001100000000101100110100000000000000000000000000000000000100000000101110011000000001101100111000000011101100110000000001101000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010101110000010101000110110000000000000100000000000000000000010000000000100000010011100100000010110011010000001011001100000000000000000000000000000000000001000000001011100110000000011011001110000000111011001100000000011010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110101011100000101000001101100100000000001000000000000000000000100000000001000000100101001000000101100110100000010110011010000000000000000000000000000000000010000000010111001100000000110110011100000001110110011000000000110100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101010111000001010000011011001000000000010000000000000000000001000000000010000001001110000000001011001100000000101100110000000000000000000000000000000000000100000000101110011000000001101100111000000011101100110000000001101000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000101110000010101000110110010000000000100000000000000000000010000000000100000010010100000000001110011000000000111001101000000000000000000000000000000000001000000000110100110000010010111001110000000101111001100000000011010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001011100000101010001101100100000000001000000000000000000000100000000001000000100111001000000011100110100000001110011000000000000000000000000000000000000010000000001101001100000100101110011100000001011110011000000000110100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100010111000001010000011011000000000000000000000000100000000001000000000010000001001010010000000111001101000000011100110100000000000000000000000000000000000100000000011010011000001001011100111000000010111100110000000001101000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000101110000010100000110110000000000000000000000001000000000010000000000100000010011100000000001110011000000000111001100000000000000000000000000000000000001000000000110100110000010010111001110000000101111001100000000011010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110011100000101010001101100000000000000000000000010000000000100000000001000000100101000000000111100110000000011110011010000000000000000000000000000000000010000000011111001100000100111110011100000001111110011000000000110100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101100111000001010100011011000000000000000000000000100000000001000000000010000001001110010000001111001101000000111100110000000000000000000000000000000000000100000000111110011000001001111100111000000011111100110000000001101000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011001110000010100000110110010000000000000000000001000000000010000000000100000010010100100000011110011010000001111001101000000000000000000000000000000000001000000001111100110000010011111001110000000111111001100000000011010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110011100000101000001101100100000000000000000000010000000000100000000001000000100111000000000111100110000000011110011000000000000000000000000000000000000010000000011111001100000100111110011100000001111110011000000000110100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100100111000001010100011011001000000000000000000000100000000001000000000010000001001010000000000000101100000000000010110100000000000000000000000000000000000100000000000001011000000001000010101000000010000010110001000001101000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001001110000010101000110110010000000000000000000001000000000010000000000100000010011100100000000001011010000000000101100000000000000000000000000000000000001000000000000010110000000010000101010000000100000101100010000011010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110010011100000101000001101100000000000001000000000010000000000100000000001000000100101001000000000010110100000000001011010000000000000000000000000000000000010000000000000101100000000100001010100000001000001011000100000110100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100100111000001010000011011000000000000010000000000100000000001000000000010000001001110000000000000101100000000000010110000000000000000000000000000000000000100000000000001011000000001000010101000000010000010110001000001101000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010001110000010101000110110000000000000100000000001000000000010000000000100000010010100000000010001011000000001000101101000000000000000000000000000000000001000000001001010110000000011000101010000000110000101100010000011010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100011100000101010001101100000000000001000000000010000000000100000000001000000100111001000000100010110100000010001011000000000000000000000000000000000000010000000010010101100000000110001010100000001100001011000100000110100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101000111000001010000011011001000000000010000000000100000000001000000000010000001001010010000001000101101000000100010110100000000000000000000000000000000000100000000100101011000000001100010101000000011000010110001000001101000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010001110000010100000110110010000000000100000000001000000000010000000000100000010011100000000010001011000000001000101100000000000000000000000000000000000001000000001001010110000000011000101010000000110000101100010000011010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000011100000101010001101100100000000001000000000010000000000100000000001000000100101000000000010010110000000001001011010000000000000000000000000000000000010000000001000101100000100101001010100000001001001011000100000110100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100000111000001010100011011001000000000010000000000100000000001000000000010000001001110010000000100101101000000010010110000000000000000000000000000000000000100000000010001011000001001010010101000000010010010110001000001101000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000001110000010100000110110000000000000000000000000000000000000000000000000001010010100100000001001011010000000100101101000000000000000000000000000000000001000000000100010110000010010100101010000000100100101100010000011010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000011100000101000001101100000000000000000000000000000000000000000000000000010100111000000000010010110000000001001011000000000000000000000000000000000000010000000001000101100000100101001010100000001001001011000100000110100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101111011000001010100011011000000000000000000000000000000000000000000000000000101001010000000001100101100000000110010110100000000000000000000000000000000000100000000110101011000001001110010101000000011010010110001000001101000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011110110000010101000110110000000000000000000000000000000000000000000000000001010011100100000011001011010000001100101100000000000000000000000000000000000001000000001101010110000010011100101010000000110100101100010000011010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111101100000101000001101100100000000000000000000000000000000000000000000000010100101001000000110010110100000011001011010000000000000000000000000000000000010000000011010101100000100111001010100000001101001011000100000110100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101111011000001010000011011001000000000000000000000000000000000000000000000000101001110000000001100101100000000110010110000000000000000000000000000000000000100000000110101011000001001110010101000000011010010110001000001101000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001110110000010101000110110010000000000000000000000000000000000000000000000001010010100000000000101011000000000010101101000000000000000000000000000000000001000000000010010110000000010010101110000000100010101100010000011010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011101100000101010001101100100000000000000000000000000000000000000000000000010100111001000000001010110100000000101011000000000000000000000000000000000000010000000000100101100000000100101011100000001000101011000100000110100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100111011000001010000011011000000000000010000000000000000000000000000000000000101001010010000000010101101000000001010110100000000000000000000000000000000000100000000001001011000000001001010111000000010001010110001000001101000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001110110000010100000110110000000000000100000000000000000000000000000000000001010011100000000000101011000000000010101100000000000000000000000000000000000001000000000010010110000000010010101110000000100010101100010000011010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110101101100000101010001101100000000000001000000000000000000000000000000000000010100101000000000101010110000000010101011010000000000000000000000000000000000010000000010110101100000000110101011100000001100101011000100000110100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101011011000001010100011011000000000000010000000000000000000000000000000000000101001110010000001010101101000000101010110000000000000000000000000000000000000100000000101101011000000001101010111000000011001010110001000001101000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010110110000010100000110110010000000000100000000000000000000000000000000000001010010100100000010101011010000001010101101000000000000000000000000000000000001000000001011010110000000011010101110000000110010101100010000011010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110101101100000101000001101100100000000001000000000000000000000000000000000000010100111000000000101010110000000010101011000000000000000000000000000000000000010000000010110101100000000110101011100000001100101011000100000110100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100011011000001010100011011001000000000010000000000000000000000000000000000000101001010000000000110101100000000011010110100000000000000000000000000000000000100000000011001011000001001011010111000000010011010110001000001101000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000110110000010101000110110010000000000100000000000000000000000000000000000001010011100100000001101011010000000110101100000000000000000000000000000000000001000000000110010110000010010110101110000000100110101100010000011010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110001101100000101000001101100000000000000000000000010000000000000000000000000010100101001000000011010110100000001101011010000000000000000000000000000000000010000000001100101100000100101101011100000001001101011000100000110100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100011011000001010000011011000000000000000000000000100000000000000000000000000101001110000000000110101100000000011010110000000000000000000000000000000000000100000000011001011000001001011010111000000010011010110001000001101000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011010110000010101000110110000000000000000000000001000000000000000000000000001010010100000000011101011000000001110101101000000000000000000000000000000000001000000001111010110000010011110101110000000110110101100010000011010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110101100000101010001101100000000000000000000000010000000000000000000000000010100111001000000111010110100000011101011000000000000000000000000000000000000010000000011110101100000100111101011100000001101101011000100000110100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101101011000001010000011011001000000000000000000000100000000000000000000000000101001010010000001110101101000000111010110100000000000000000000000000000000000100000000111101011000001001111010111000000011011010110001000001101000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011010110000010100000110110010000000000000000000001000000000000000000000000001010011100000000011101011000000001110101100000000000000000000000000000000000001000000001111010110000010011110101110000000110110101100010000011010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010101100000101010001101100100000000000000000000010000000000000000000000000010100101000000000000110110000000000011011010000000000000000000000000000000000010000000000001101100000000100011010100000001010011011000100000110100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100101011000001010100011011001000000000000000000000100000000000000000000000000101001110010000000001101101000000000110110000000000000000000000000000000000000100000000000011011000000001000110101000000010100110110001000001101000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001010110000010100000110110000000000000100000000001000000000000000000000000001010010100100000000011011010000000001101101000000000000000000000000000000000001000000000000110110000000010001101010000000101001101100010000011010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010101100000101000001101100000000000001000000000010000000000000000000000000010100111000000000000110110000000000011011000000000000000000000000000000000000010000000000001101100000000100011010100000001010011011000100000110100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101001011000001010100011011000000000000010000000000100000000000000000000000000101001010000000001001101100000000100110110100000000000000000000000000000000000100000000100111011000000001100110101000000011100110110001000001101000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010010110000010101000110110000000000000100000000001000000000000000000000000001010011100100000010011011010000001001101100000000000000000000000000000000000001000000001001110110000000011001101010000000111001101100010000011010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110100101100000101000001101100100000000001000000000010000000000000000000000000010100101001000000100110110100000010011011010000000000000000000000000000000000010000000010011101100000000110011010100000001110011011000100000110100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101001011000001010000011011001000000000010000000000100000000000000000000000000101001110000000001001101100000000100110110000000000000000000000000000000000000100000000100111011000000001100110101000000011100110110001000001101000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000010110000010101000110110010000000000100000000001000000000000000000000000001010010100000000001011011000000000101101101000000000000000000000000000000000001000000000100110110000010010101101010000000101101101100010000011010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000101100000101010001101100100000000001000000000010000000000000000000000000010100111001000000010110110100000001011011000000000000000000000000000000000000010000000001001101100000100101011010100000001011011011000100000110100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100001011000001010000011011000000000000000000000000000000000001000000000000000101001010010000000101101101000000010110110100000000000000000000000000000000000100000000010011011000001001010110101000000010110110110001000001101000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000010110000010100000110110000000000000000000000000000000000010000000000000001010011100000000001011011000000000101101100000000000000000000000000000000000001000000000100110110000010010101101010000000101101101100010000011010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111001100000101010001101100000000000000000000000000000000000100000000000000010100101000000000110110110000000011011011010000000000000000000000000000000000010000000011011101100000100111011010100000001111011011000100000110100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101110011000001010100011011000000000000000000000000000000000001000000000000000101001110010000001101101101000000110110110000000000000000000000000000000000000100000000110111011000001001110110101000000011110110110001000001101000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011100110000010100000110110010000000000000000000000000000000010000000000000001010010100100000011011011010000001101101101000000000000000000000000000000000001000000001101110110000010011101101010000000111101101100010000011010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111001100000101000001101100100000000000000000000000000000000100000000000000010100111000000000110110110000000011011011000000000000000000000000000000000000010000000011011101100000100111011010100000001111011011000100000110100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100110011000001010100011011001000000000000000000000000000000001000000000000000101001010000000000011101100000000001110110100000000000000000000000000000000000100000000001011011000000001001110111000000010101110110001000001101000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001100110000010101000110110010000000000000000000000000000000010000000000000001010011100100000000111011010000000011101100000000000000000000000000000000000001000000000010110110000000010011101110000000101011101100010000011010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110011001100000101000001101100000000000001000000000000000000000100000000000000010100101001000000001110110100000000111011010000000000000000000000000000000000010000000000101101100000000100111011100000001010111011000100000110100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100110011000001010000011011000000000000010000000000000000000001000000000000000101001110000000000011101100000000001110110000000000000000000000000000000000000100000000001011011000000001001110111000000010101110110001000001101000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010100110000010101000110110000000000000100000000000000000000010000000000000001010010100000000010111011000000001011101101000000000000000000000000000000000001000000001011110110000000011011101110000000111011101100010000011010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110101001100000101010001101100000000000001000000000000000000000100000000000000010100111001000000101110110100000010111011000000000000000000000000000000000000010000000010111101100000000110111011100000001110111011000100000110100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101010011000001010000011011001000000000010000000000000000000001000000000000000101001010010000001011101101000000101110110100000000000000000000000000000000000100000000101111011000000001101110111000000011101110110001000001101000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010100110000010100000110110010000000000100000000000000000000010000000000000001010011100000000010111011000000001011101100000000000000000000000000000000000001000000001011110110000000011011101110000000111011101100010000011010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001001100000101010001101100100000000001000000000000000000000100000000000000010100101000000000011110110000000001111011010000000000000000000000000000000000010000000001101101100000100101111011100000001011111011000100000110100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100010011000001010100011011001000000000010000000000000000000001000000000000000101001110010000000111101101000000011110110000000000000000000000000000000000000100000000011011011000001001011110111000000010111110110001000001101000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000100110000010100000110110000000000000000000000001000000000010000000000000001010010100100000001111011010000000111101101000000000000000000000000000000000001000000000110110110000010010111101110000000101111101100010000011010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001001100000101000001101100000000000000000000000010000000000100000000000000010100111000000000011110110000000001111011000000000000000000000000000000000000010000000001101101100000100101111011100000001011111011000100000110100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101100011000001010100011011000000000000000000000000100000000001000000000000000101001010000000001111101100000000111110110100000000000000000000000000000000000100000000111111011000001001111110111000000011111110110001000001101000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011000110000010101000110110000000000000000000000001000000000010000000000000001010011100100000011111011010000001111101100000000000000000000000000000000000001000000001111110110000010011111101110000000111111101100010000011010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110001100000101000001101100100000000000000000000010000000000100000000000000010100101001000000111110110100000011111011010000000000000000000000000000000000010000000011111101100000100111111011100000001111111011000100000110100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101100011000001010000011011001000000000000000000000100000000001000000000000000101001110000000001111101100000000111110110000000000000000000000000000000000000100000000111111011000001001111110111000000011111110110001000001101000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001000110000010101000110110010000000000000000000001000000000010000000000000001010010100000000000000111000000000000011101000000000000000000000000000000000001000000000000001110000000010000011010000000100000011100000000111010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010001100000101010001101100100000000000000000000010000000000100000000000000010100111001000000000001110100000000000111000000000000000000000000000000000000010000000000000011100000000100000110100000001000000111000000001110100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100100011000001010000011011000000000000010000000000100000000001000000000000000101001010010000000000011101000000000001110100000000000000000000000000000000000100000000000000111000000001000001101000000010000001110000000011101000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001000110000010100000110110000000000000100000000001000000000010000000000000001010011100000000000000111000000000000011100000000000000000000000000000000000001000000000000001110000000010000011010000000100000011100000000111010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110100001100000101010001101100000000000001000000000010000000000100000000000000010100101000000000100001110000000010000111010000000000000000000000000000000000010000000010010011100000000110000110100000001100000111000000001110100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101000011000001010100011011000000000000010000000000100000000001000000000000000101001110010000001000011101000000100001110000000000000000000000000000000000000100000000100100111000000001100001101000000011000001110000000011101000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010000110000010100000110110010000000000100000000001000000000010000000000000001010010100100000010000111010000001000011101000000000000000000000000000000000001000000001001001110000000011000011010000000110000011100000000111010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100001100000101000001101100100000000001000000000010000000000100000000000000010100111000000000100001110000000010000111000000000000000000000000000000000000010000000010010011100000000110000110100000001100000111000000001110100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100000011000001010100011011001000000000010000000000100000000001000000000000000101001010000000000100011100000000010001110100000000000000000000000000000000000100000000010000111000001001010001101000000010010001110000000011101000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000000110000010101000110110010000000000100000000001000000000010000000000000001010011100100000001000111010000000100011100000000000000000000000000000000000001000000000100001110000010010100011010000000100100011100000000111010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000001100000101000001101100000000000000000000000000000000000000000000001000010100101001000000010001110100000001000111010000000000000000000000000000000000010000000001000011100000100101000110100000001001000111000000001110100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100000011000001010000011011000000000000000000000000000000000000000000000010000101001110000000000100011100000000010001110000000000000000000000000000000000000100000000010000111000001001010001101000000010010001110000000011101000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011111010000010101000110110000000000000000000000000000000000000000000000100001010010100000000011000111000000001100011101000000000000000000000000000000000001000000001101001110000010011100011010000000110100011100000000111010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110111110100000101010001101100000000000000000000000000000000000000000000001000010100111001000000110001110100000011000111000000000000000000000000000000000000010000000011010011100000100111000110100000001101000111000000001110100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101111101000001010000011011001000000000000000000000000000000000000000000010000101001010010000001100011101000000110001110100000000000000000000000000000000000100000000110100111000001001110001101000000011010001110000000011101000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011111010000010100000110110010000000000000000000000000000000000000000000100001010011100000000011000111000000001100011100000000000000000000000000000000000001000000001101001110000010011100011010000000110100011100000000111010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110011110100000101010001101100100000000000000000000000000000000000000000001000010100101000000000001001110000000000100111010000000000000000000000000000000000010000000000100011100000000100100111100000001000100111000000001110100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100111101000001010100011011001000000000000000000000000000000000000000000010000101001110010000000010011101000000001001110000000000000000000000000000000000000100000000001000111000000001001001111000000010001001110000000011101000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001111010000010100000110110000000000000100000000000000000000000000000000100001010010100100000000100111010000000010011101000000000000000000000000000000000001000000000010001110000000010010011110000000100010011100000000111010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011110100000101000001101100000000000001000000000000000000000000000000001000010100111000000000001001110000000000100111000000000000000000000000000000000000010000000000100011100000000100100111100000001000100111000000001110100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101011101000001010100011011000000000000010000000000000000000000000000000010000101001010000000001010011100000000101001110100000000000000000000000000000000000100000000101100111000000001101001111000000011001001110000000011101000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010111010000010101000110110000000000000100000000000000000000000000000000100001010011100100000010100111010000001010011100000000000000000000000000000000000001000000001011001110000000011010011110000000110010011100000000111010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110101110100000101000001101100100000000001000000000000000000000000000000001000010100101001000000101001110100000010100111010000000000000000000000000000000000010000000010110011100000000110100111100000001100100111000000001110100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101011101000001010000011011001000000000010000000000000000000000000000000010000101001110000000001010011100000000101001110000000000000000000000000000000000000100000000101100111000000001101001111000000011001001110000000011101000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000111010000010101000110110010000000000100000000000000000000000000000000100001010010100000000001100111000000000110011101000000000000000000000000000000000001000000000110001110000010010110011110000000100110011100000000111010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001110100000101010001101100100000000001000000000000000000000000000000001000010100111001000000011001110100000001100111000000000000000000000000000000000000010000000001100011100000100101100111100000001001100111000000001110100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100011101000001010000011011000000000000000000000000100000000000000000000010000101001010010000000110011101000000011001110100000000000000000000000000000000000100000000011000111000001001011001111000000010011001110000000011101000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000111010000010100000110110000000000000000000000001000000000000000000000100001010011100000000001100111000000000110011100000000000000000000000000000000000001000000000110001110000010010110011110000000100110011100000000111010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110110100000101010001101100000000000000000000000010000000000000000000001000010100101000000000111001110000000011100111010000000000000000000000000000000000010000000011110011100000100111100111100000001101100111000000001110100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101101101000001010100011011000000000000000000000000100000000000000000000010000101001110010000001110011101000000111001110000000000000000000000000000000000000100000000111100111000001001111001111000000011011001110000000011101000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011011010000010100000110110010000000000000000000001000000000000000000000100001010010100100000011100111010000001110011101000000000000000000000000000000000001000000001111001110000010011110011110000000110110011100000000111010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110110100000101000001101100100000000000000000000010000000000000000000001000010100111000000000111001110000000011100111000000000000000000000000000000000000010000000011110011100000100111100111100000001101100111000000001110100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100101101000001010100011011001000000000000000000000100000000000000000000010000101001010000000000001011100000000000101110100000000000000000000000000000000000100000000000010111000000001000101101000000010100101110000000011101000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001011010000010101000110110010000000000000000000001000000000000000000000100001010011100100000000010111010000000001011100000000000000000000000000000000000001000000000000101110000000010001011010000000101001011100000000111010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010110100000101000001101100000000000001000000000010000000000000000000001000010100101001000000000101110100000000010111010000000000000000000000000000000000010000000000001011100000000100010110100000001010010111000000001110100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100101101000001010000011011000000000000010000000000100000000000000000000010000101001110000000000001011100000000000101110000000000000000000000000000000000000100000000000010111000000001000101101000000010100101110000000011101000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010011010000010101000110110000000000000100000000001000000000000000000000100001010010100000000010010111000000001001011101000000000000000000000000000000000001000000001001101110000000011001011010000000111001011100000000111010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100110100000101010001101100000000000001000000000010000000000000000000001000010100111001000000100101110100000010010111000000000000000000000000000000000000010000000010011011100000000110010110100000001110010111000000001110100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101001101000001010000011011001000000000010000000000100000000000000000000010000101001010010000001001011101000000100101110100000000000000000000000000000000000100000000100110111000000001100101101000000011100101110000000011101000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010011010000010100000110110010000000000100000000001000000000000000000000100001010011100000000010010111000000001001011100000000000000000000000000000000000001000000001001101110000000011001011010000000111001011100000000111010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000110100000101010001101100100000000001000000000010000000000000000000001000010100101000000000010101110000000001010111010000000000000000000000000000000000010000000001001011100000100101010110100000001011010111000000001110100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100001101000001010100011011001000000000010000000000100000000000000000000010000101001110010000000101011101000000010101110000000000000000000000000000000000000100000000010010111000001001010101101000000010110101110000000011101000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000011010000010100000110110000000000000000000000000000000000010000000000100001010010100100000001010111010000000101011101000000000000000000000000000000000001000000000100101110000010010101011010000000101101011100000000111010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000110100000101000001101100000000000000000000000000000000000100000000001000010100111000000000010101110000000001010111000000000000000000000000000000000000010000000001001011100000100101010110100000001011010111000000001110100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101110101000001010100011011000000000000000000000000000000000001000000000010000101001010000000001101011100000000110101110100000000000000000000000000000000000100000000110110111000001001110101101000000011110101110000000011101000000000001110000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001100000000000000000000000000000000000111011101010000010101000110110000000000000000000000000000000000010000000000100001010011100100000011010111010000001101011100000000000000000000000000000000000001000000001101101110000010011101011010000000111101011100000000111010000000000011100000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010011000000000000000000000000000000000001110111010100000101000001101100100000000000000000000000000000000100000000001000010100101001000000110101110100000011010111010000000000000000000000000000000000010000000011011011100000100111010110100000001111010111000000001110100000000000101000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100110000000000000000000000000000000000011101110101000001010000011011001000000000000000000000000000000001000000000010000101001110000000001101011100000000110101110000000000000000000000000000000000000100000000110110111000001001110101101000000011110101110000000011101000000000001010000000000100000000000000000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000000000000000000111001101010000010101000110110010000000000000000000000000000000010000000000100001010010100000000000110111000000000011011101000000000000000000000000000000000001000000000010101110000000010011011110000000101011011100000000111010000000000011100000000001000000000000000000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000000000000000001110011010100000101010001101100100000000000000000000000000000000100000000001000010100111001000000001101110100000000110111000000000000000000000000000000000000010000000000101011100000000100110111100000001010110111000000001110100000000000101000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001000000000000011100110101000001010000011011000000000000010000000000000000000001000000000010000101001010010000000011011101000000001101110100000000000000000000000000000000000100000000001010111000000001001101111000000010101101110000000011101000000000001010000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010000000000000111001101010000010100000110110000000000000100000000000000000000010000000000100001010011100000000000110111000000000011011100000000000000000000000000000000000001000000000010101110000000010011011110000000101011011100000000111010000000000010100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100000000000001110101010100000101010001101100000000000001000000000000000000000100000000001000010100101000000000101101110000000010110111010000000000000000000000000000000000010000000010111011100000000110110111100000001110110111000000001110100000000000101000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001000000000000011101010101000001010100011011000000000000010000000000000000000001000000000010000101001110010000001011011101000000101101110000000000000000000000000000000000000100000000101110111000000001101101111000000011101101110000000011101000000000001110000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010000000000000111010101010000010100000110110010000000000100000000000000000000010000000000100001010010100100000010110111010000001011011101000000000000000000000000000000000001000000001011101110000000011011011110000000111011011100000000111010000000000011100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100000000000001110101010100000101000001101100100000000001000000000000000000000100000000001000010100111000000000101101110000000010110111000000000000000000000000000000000000010000000010111011100000000110110111100000001110110111000000001110100000000000111000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001000000000000011100010101000001010100011011001000000000010000000000000000000001000000000010000101001010000000000111011100000000011101110100000000000000000000000000000000000100000000011010111000001001011101111000000010111101110000000011101000000000001110000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010000000000000111000101010000010101000110110010000000000100000000000000000000010000000000100001010011100100000001110111010000000111011100000000000000000000000000000000000001000000000110101110000010010111011110000000101111011100000000111010000000000011100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100000000000001110001010100000101000001101100000000000000000000000010000000000100000000001000010100101001000000011101110100000001110111010000000000000000000000000000000000010000000001101011100000100101110111100000001011110111000000001110100000000000111000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001000000000000011100010101000001010000011011000000000000000000000000100000000001000000000010000101001110000000000111011100000000011101110000000000000000000000000000000000000100000000011010111000001001011101111000000010111101110000000011101000000000001110000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010000000000000111011001010000010101000110110000000000000000000000001000000000010000000000100001010010100000000011110111000000001111011101000000000000000000000000000000000001000000001111101110000010011111011110000000111111011100000000111010000000000011100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100000000000001110110010100000101010001101100000000000000000000000010000000000100000000001000010100111001000000111101110100000011110111000000000000000000000000000000000000010000000011111011100000100111110111100000001111110111000000001110100000000000101000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001000000000000011101100101000001010000011011001000000000000000000000100000000001000000000010000101001010010000001111011101000000111101110100000000000000000000000000000000000100000000111110111000001001111101111000000011111101110000000011101000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111011001010000010100000110110010000000000000000000001000000000010000000000100001010011100000000011110111000000001111011100000000000000000000000000000000000001000000001111101110000010011111011110000000111111011100000000111010000000000010100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100100000000001110010010100000101010001101100100000000000000000000010000000000100000000001000010100101000000000000011110000000000001111010000000000000000000000000000000000010000000000000111100000000100001110100000001000001111000100001110100000000000101000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001000000000011100100101000001010100011011001000000000000000000000100000000001000000000010000101001110010000000000111101000000000011110000000000000000000000000000000000000100000000000001111000000001000011101000000010000011110001000011101000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111001001010000010100000110110000000000000100000000001000000000010000000000100001010010100100000000001111010000000000111101000000000000000000000000000000000001000000000000011110000000010000111010000000100000111100010000111010000000000010100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100100000000001110010010100000101000001101100000000000001000000000010000000000100000000001000010100111000000000000011110000000000001111000000000000000000000000000000000000010000000000000111100000000100001110100000001000001111000100001110100000000000101000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001000000000011101000101000001010100011011000000000000010000000000100000000001000000000010000101001010000000001000111100000000100011110100000000000000000000000000000000000100000000100101111000000001100011101000000011000011110001000011101000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111010001010000010101000110110000000000000100000000001000000000010000000000100001010011100100000010001111010000001000111100000000000000000000000000000000000001000000001001011110000000011000111010000000110000111100010000111010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110100010100000101000001101100100000000001000000000010000000000100000000001000010100101001000000100011110100000010001111010000000000000000000000000000000000010000000010010111100000000110001110100000001100001111000100001110100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011101000101000001010000011011001000000000010000000000100000000001000000000010000101001110000000001000111100000000100011110000000000000000000000000000000000000100000000100101111000000001100011101000000011000011110001000011101000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111000001010000010101000110110010000000000100000000001000000000010000000000100001010010100000000001001111000000000100111101000000000000000000000000000000000001000000000100011110000010010100111010000000100100111100010000111010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110000010100000101010001101100100000000001000000000010000000000100000000001000010100111001000000010011110100000001001111000000000000000000000000000000000000010000000001000111100000100101001110100000001001001111000100001110100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011100000101000001010000011011000000000000000000000000000000000000000000000000000011001010010000000100111101000000010011110100000000000000000000000000000000000100000000010001111000001001010011101000000010010011110001000011101000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111000001010000010100000110110000000000000000000000000000000000000000000000000000110011100000000001001111000000000100111100000000000000000000000000000000000001000000000100011110000010010100111010000000100100111100010000111010000000000010100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100100000000001110111100100000101010001101100000000000000000000000000000000000000000000000000001100101000000000110011110000000011001111010000000000000000000000000000000000010000000011010111100000100111001110100000001101001111000100001110100000000000101000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001000000000011101111001000001010100011011000000000000000000000000000000000000000000000000000011001110010000001100111101000000110011110000000000000000000000000000000000000100000000110101111000001001110011101000000011010011110001000011101000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111011110010000010100000110110010000000000000000000000000000000000000000000000000110010100100000011001111010000001100111101000000000000000000000000000000000001000000001101011110000010011100111010000000110100111100010000111010000000000010100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100100000000001110111100100000101000001101100100000000000000000000000000000000000000000000000001100111000000000110011110000000011001111000000000000000000000000000000000000010000000011010111100000100111001110100000001101001111000100001110100000000000101000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001000000000011100111001000001010100011011001000000000000000000000000000000000000000000000000011001010000000000010111100000000001011110100000000000000000000000000000000000100000000001001111000000001001011111000000010001011110001000011101000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111001110010000010101000110110010000000000000000000000000000000000000000000000000110011100100000000101111010000000010111100000000000000000000000000000000000001000000000010011110000000010010111110000000100010111100010000111010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110011100100000101000001101100000000000001000000000000000000000000000000000000001100101001000000001011110100000000101111010000000000000000000000000000000000010000000000100111100000000100101111100000001000101111000100001110100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011100111001000001010000011011000000000000010000000000000000000000000000000000000011001110000000000010111100000000001011110000000000000000000000000000000000000100000000001001111000000001001011111000000010001011110001000011101000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111010110010000010101000110110000000000000100000000000000000000000000000000000000110010100000000010101111000000001010111101000000000000000000000000000000000001000000001011011110000000011010111110000000110010111100010000111010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110101100100000101010001101100000000000001000000000000000000000000000000000000001100111001000000101011110100000010101111000000000000000000000000000000000000010000000010110111100000000110101111100000001100101111000100001110100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011101011001000001010000011011001000000000010000000000000000000000000000000000000011001010010000001010111101000000101011110100000000000000000000000000000000000100000000101101111000000001101011111000000011001011110001000011101000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111010110010000010100000110110010000000000100000000000000000000000000000000000000110011100000000010101111000000001010111100000000000000000000000000000000000001000000001011011110000000011010111110000000110010111100010000111010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110001100100000101010001101100100000000001000000000000000000000000000000000000001100101000000000011011110000000001101111010000000000000000000000000000000000010000000001100111100000100101101111100000001001101111000100001110100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011100011001000001010100011011001000000000010000000000000000000000000000000000000011001110010000000110111101000000011011110000000000000000000000000000000000000100000000011001111000001001011011111000000010011011110001000011101000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111000110010000010100000110110000000000000000000000001000000000000000000000000000110010100100000001101111010000000110111101000000000000000000000000000000000001000000000110011110000010010110111110000000100110111100010000111010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110001100100000101000001101100000000000000000000000010000000000000000000000000001100111000000000011011110000000001101111000000000000000000000000000000000000010000000001100111100000100101101111100000001001101111000100001110100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011101101001000001010100011011000000000000000000000000100000000000000000000000000011001010000000001110111100000000111011110100000000000000000000000000000000000100000000111101111000001001111011111000000011011011110001000011101000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111011010010000010101000110110000000000000000000000001000000000000000000000000000110011100100000011101111010000001110111100000000000000000000000000000000000001000000001111011110000010011110111110000000110110111100010000111010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110110100100000101000001101100100000000000000000000010000000000000000000000000001100101001000000111011110100000011101111010000000000000000000000000000000000010000000011110111100000100111101111100000001101101111000100001110100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011101101001000001010000011011001000000000000000000000100000000000000000000000000011001110000000001110111100000000111011110000000000000000000000000000000000000100000000111101111000001001111011111000000011011011110001000011101000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111001010010000010101000110110010000000000000000000001000000000000000000000000000110010100000000000011111000000000001111101000000000000000000000000000000000001000000000000111110000000010001111010000000101001111100010000111010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110010100100000101010001101100100000000000000000000010000000000000000000000000001100111001000000000111110100000000011111000000000000000000000000000000000000010000000000001111100000000100011110100000001010011111000100001110100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011100101001000001010000011011000000000000010000000000100000000000000000000000000011001010010000000001111101000000000111110100000000000000000000000000000000000100000000000011111000000001000111101000000010100111110001000011101000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111001010010000010100000110110000000000000100000000001000000000000000000000000000110011100000000000011111000000000001111100000000000000000000000000000000000001000000000000111110000000010001111010000000101001111100010000111010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110100100100000101010001101100000000000001000000000010000000000000000000000000001100101000000000100111110000000010011111010000000000000000000000000000000000010000000010011111100000000110011110100000001110011111000100001110100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011101001001000001010100011011000000000000010000000000100000000000000000000000000011001110010000001001111101000000100111110000000000000000000000000000000000000100000000100111111000000001100111101000000011100111110001000011101000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111010010010000010100000110110010000000000100000000001000000000000000000000000000110010100100000010011111010000001001111101000000000000000000000000000000000001000000001001111110000000011001111010000000111001111100010000111010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110100100100000101000001101100100000000001000000000010000000000000000000000000001100111000000000100111110000000010011111000000000000000000000000000000000000010000000010011111100000000110011110100000001110011111000100001110100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011100001001000001010100011011001000000000010000000000100000000000000000000000000011001010000000000101111100000000010111110100000000000000000000000000000000000100000000010011111000001001010111101000000010110111110001000011101000000000001010000000000100100000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001001000000010011000000000111000010010000010101000110110010000000000100000000001000000000000000000000000000110011100100000001011111010000000101111100000000000000000000000000000000000001000000000100111110000010010101111010000000101101111100010000111010000000000010100000000001001000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010010000000100110000000001110000100100000101000001101100000000000000000000000000000000000100000000000000001100101001000000010111110100000001011111010000000000000000000000000000000000010000000001001111100000100101011110100000001011011111000100001110100000000000101000000000010010000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100100000001001100000000011100001001000001010000011011000000000000000000000000000000000001000000000000000011001110000000000101111100000000010111110000000000000000000000000000000000000100000000010011111000001001010111101000000010110111110001000011101000000000001010000000000100100000001001110000000001011100000000000000000000000000000000000000000000000000000001000100000000001001000000010011100000000111011100010000010101000110110000000000000000000000000000000000010000000000000000110010100000000011011111000000001101111101000000000000000000000000000000000001000000001101111110000010011101111010000000111101111100010000111010000000000010100000000001001000000010011100000000010111000000000000000000000000000000000000000000000000000000010001000000000010010000000100111000000001110111000100000101010001101100000000000000000000000000000000000100000000000000001100111001000000110111110100000011011111000000000000000000000000000000000000010000000011011111100000100111011110100000001111011111000100001110100000000000101000010000010010000000100111000000000101110000000000000000000000000000000000000000000000000000000100010000100000100100000001001110000000011101110001000001010000011011001000000000000000000000000000000001000000000000000011001010010000001101111101000000110111110100000000000000000000000000000000000100000000110111111000001001110111101000000011110111110001000011101000000000001010100100000100100000001001110001000001011100000000000000000000000000000000000000000000000000000001000101001000001001000000010011100010000111011100010000010100000110110010000000000000000000000000000000010000000000000000110011100000000011011111000000001101111100000000000000000000000000000000000001000000001101111110000010011101111010000000111101111100010000111010000000000011101001000001001000000010011100010000010111000000000000000000000000000000000000000000000000000000010011010010000010010000000100111000100001110011000100000101010001101100100000000000000000000000000000000100000000000000001100101000000000001111110000000000111111010000000000000000000000000000000000010000000000101111100000000100111111100000001010111111000100001110100000000000111010010000010010000000100111000100000001110000000000000000000000000000000000000000000000000000000100110100100000100100000001001110001000011100110001000001010100011011001000000000000000000000000000000001000000000000000011001110010000000011111101000000001111110000000000000000000000000000000000000100000000001011111000000001001111111000000010101111110001000011101000000000001110100100000100100000001001110001000000011100000000000000000000000000000000000000000000000000001001001101001000001001000000010011100010000111001100010000010100000110110000000000000100000000000000000000010000000000000000110010100100000000111111010000000011111101000000000000000000000000000000000001000000000010111110000000010011111110000000101011111100010000111010000000000011101001000001001000000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000010010000000100111010100001110011000100000101000001101100000000000001000000000000000000000100000000000000001100111000000000001111110000000000111111000000000000000000000000000000000000010000000000101111100000000100111111100000001010111111000100001110100000000000101010010000010010000000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000100100000001001110101000011101010001000001010100011011000000000000010000000000000000000001000000000000000011001010000000001011111100000000101111110100000000000000000000000000000000000100000000101111111000000001101111111000000011101111110001000011101000000000001010100100000100100000001001110101000000011100000000000000000000000000000000000000000000000000000001000101001000001001000000010011101010000111010100010000010101000110110000000000000100000000000000000000010000000000000000110011100100000010111111010000001011111100000000000000000000000000000000000001000000001011111110000000011011111110000000111011111100010000111010000000000010101001000001001000000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010000010010000000100111010100001110101000100000101000001101100100000000001000000000000000000000100000000000000001100101001000000101111110100000010111111010000000000000000000000000000000000010000000010111111100000000110111111100000001110111111000100001110100000000000101010010000010010000000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000100100000001001110101000011101010001000001010000011011001000000000010000000000000000000001000000000000000011001110000000001011111100000000101111110000000000000000000000000000000000000100000000101111111000000001101111111000000011101111110001000011101000000000001110100100000100100000001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001000000010011101010000111000100010000010101000110110010000000000100000000000000000000010000000000000000110010100000000001111111000000000111111101000000000000000000000000000000000001000000000110111110000010010111111110000000101111111100010000111010000000000011101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000010011010000100111010100001110001000100000101010001101100100000000001000000000000000000000100000000000000001100111001000000011111110100000001111111000000000000000000000000000000000000010000000001101111100000100101111111100000001011111111000100001110100000000000101010010000010011010000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000100110100001001110101000011100010001000001010000011011000000000000000000000000100000000001000000000000000011001010010000000111111101000000011111110100000000000000000000000000000000000100000000011011111000001001011111111000000010111111110001000011101000000000001110100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001101000010011101010000111000100010000010100000110110000000000000000000000001000000000010000000000000000110011100000000001111111000000000111111100000000000000000000000000000000000001000000000110111110000010010111111110000000101111111100010000111010000000000011101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000010011010000100111010100001110110000100000101010001101100000000000000000000000010000000000100000000000000001100101000000000111111110000000011111111010000000000000000000000000000000000010000000011111111100000100111111111100000001111111111000100001110100000000000111010010000010011010000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000100110100001001110101000011101100001000001010100011011000000000000000000000000100000000001000000000000000011001110010000001111111101000000111111110000000000000000000000000000000000000100000000111111111000001001111111111000000011111111110001000011101000000000001110100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001101000010011101010000111011000010000010100000110110010000000000000000000001000000000010000000000000000110010100100000011111111010000001111111101000000000000000000000000000000000001000000001111111110000010011111111110000000111111111100010000111010000000000011101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000010011010000100111010100001110110000100000101000001101100100000000000000000000010000000000100000000000000001100111000000000111111110000000011111111000000000000000000000000000000000000010000000011111111100000100111111111100000001111111111000100001110100000000000111010010000010011010000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000100110100001001110101000011100100001000001010100011011001000000000000000000000100000000001000000000000000011001010000000000000000010000000000000001100000000000000000000000000000000000100000000000000000100000001000000000100000010000000001000000000011000000000001110100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001101000010011101010000111001000010000010101000110110010000000000000000000001000000000010000000000000000110011100100000000000000110000000000000010000000000000000000000000000000000001000000000000000001000000010000000001000000100000000010000000000110000000000010101001000001101101000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010000011011010000100111010100001110010000100000101000001101100000000000001000000000010000000000100000000000000001100101001000000000000001100000000000000110000000000000000000000000000000000010000000000000000010000000100000000010000001000000000100000000001100000000000101010010000011011010000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000110110100001001110101000011100100001000001010000011011000000000000010000000000100000000001000000000000000011001110000000000000000010000000000000001000000000000000000000000000000000000100000000000000000100000001000000000100000010000000001000000000011000000000001010100100000110110100001001110101000000011100000000000000000000000000000000000000000000000000000001000101001000001101101000010011101010000111010000010000010101000110110000000000000100000000001000000000010000000000000000110010100000000010000000100000001000000011000000000000000000000000000000000001000000001001000001000000011000000001000000110000000010000000000110000000000010101001000001101101000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010000011011010000100111010100001110100000100000101010001101100000000000001000000000010000000000100000000000000001100111001000000100000001100000010000000100000000000000000000000000000000000010000000010010000010000000110000000010000001100000000100000000001100000000000101010010100011011010000100111010100000001110000000000000000000000000000000000000000000000000000000100010100101000110110100001001110101000011101000001000001010000011011001000000000010000000000100000000001000000000000000011001010010000001000000011000000100000001100000000000000000000000000000000000100000000100100000100000001100000000100000011000000001000000000011000000000001110100101000110110110001001110101000000011100000000000000000000000000000000000000000000000000000001001101001010001101101100010011101010000111010000010000010100000110110010000000000100000000001000000000010000000000000000110011100000000010000000100000001000000010000000000000000000000000000000000001000000001001000001000000011000000001000000110000000010000000000110000000000011101001010001101101100010011101010000000111000000000000000000000000000000000000000000000000000000010011010010100011011011000100111010100001110000000100000101010001101100100000000001000000000010000000000100000000000000001100101000000000010000001000000001000000110000000000000000000000000000000000010000000001000000010000100101000000010000001001000000100000000001100000000000111010010100011011011000100111010100000001110000000000000000000000000000000000000000000000000000000100110100101000110110110001001110101000011100000001000001010100011011001000000000010000000000100000000001000000000000000011001110010000000100000011000000010000001000000000000000000000000000000000000100000000010000000100001001010000000100000010010000001000000000011000000000001110100101000110111110001001110101000000011100000000000000000000000000000000000000000000000000000001001101001010001101111100010011101010000111000000010000010100000110110000000000000000000000000000000000000000000000100000110010100100000001000000110000000100000011000000000000000000000000000000000001000000000100000001000010010100000001000000100100000010000000000110000000000011101101010001101111100010011101010000000111000000000000000000000000000000000000000000000000000000010011011010100011011111000100111010100001110000000100000101000001101100000000000000000000000000000000000000000000001000001100111000000000010000001000000001000000100000000000000000000000000000000000010000000001000000010000100101000000010000001001000000100000000001100000000000111011010100111011111000100111010100000001110000000000000000000000000000000000000000000000000000000100110110101001110111110001001110101000011101111110000001010100011011000000000000000000000000000000000000000000000010000011001010000000001100000010000000110000001100000000000000000000000000000000000100000000110100000100001001110000000100000011010000001000000000011000000000001010110111011110111110001001110101000000011100000000000000000000000000000000000000000000000000000001000101101110111101111100010011101010000111011111100000010101000110110000000000000000000000000000000000000000000000100000110011100100000011000000110000001100000010000000000000000000000000000000000001000000001101000001000010011100000001000000110100000010000000000110000000000010101101110111101111100010011111010000000111000000000000000000000000000000000000000000000000000000010001011011101111011111000100111110100001110111111000000101000001101100100000000000000000000000000000000000000000001000001100101001000000110000001100000011000000110000000000000000000000000000000000010000000011010000010000100111000000010000001101000000100000000001100000000000101011011101111011111000100111110100000001110000000000000000000000000000000000000000000000000000000100010110111011110111110001001111101000011101111110000001010000011011001000000000000000000000000000000000000000000010000011001110000000001100000010000000110000001000000000000000000000000000000000000100000000110100000100001001110000000100000011010000001000000000011000000000001010111111011110111110001001111111000000011100000000000000000000000000000000000000000000000000000001000101111110111101111100010011111110000111001111100000010101000110110010000000000000000000000000000000000000000000100000110010100000000000100000100000000010000011000000000000000000000000000000000001000000000010000001000000010010000101000000100010000010000000000110000000000011101111110111101111110010011111110000000111000000000000000000000000000000000000000000000000000000010011011111101111011111100100111111100001110011111000000101010001101100100000000000000000000000000000000000000000001000001100111001000000001000001100000000100000100000000000000000000000000000000000010000000000100000010000000100100001010000001000100000100000000001100000000000101111111101111011111100100111111100000001110000000000000000000000000000000000000000000000000000000100011111111011110111111001001111111000011100111110000001010000011011000000000000010000000000000000000000000000000010000011001010010000000010000011000000001000001100000000000000000000000000000000000100000000001000000100000001001000010100000010001000001000000000011000000000001011111111011110111111001001111111000000011100000000000000000000000000000000000000000000000000000001000111111110111101111110010011111110000111001111100000010100000110110000000000000100000000000000000000000000000000100000110011100000000000100000100000000010000010000000000000000000000000000000000001000000000010000001000000010010000101000000100010000010000000000110000000000010111111110111101111110010011111110000000111000000000000000000000000000000000000000000000000000000010001111111101111011111100100111111100001110101111000000101010001101100000000000001000000000000000000000000000000001000001100101000000000101000001000000010100000110000000000000000000000000000000000010000000010110000010000000110100001010000001100100000100000000001100000000000111111111101111011111100100111111100000001110000000000000000000000000000000000000000000000000000000100111111111011110111111001001111111000011101011110000001010100011011000000000000010000000000000000000000000000000010000011001110010000001010000011000000101000001000000000000000000000000000000000000100000000101100000100000001101000010100000011001000001000000000011000000000001011111111011110111111001001111111000000011100000000000000000000000000000000000000000000000000000001000111111110111101111110010011111110000111010111100000010100000110110010000000000100000000000000000000000000000000100000110010100100000010100000110000001010000011000000000000000000000000000000000001000000001011000001000000011010000101000000110010000010000000000110000000000011111111110111101111110010011111110000000111000000000000000000000000000000000000000000000000000000010011111111101111011111100100111111100001110101111000000101000001101100100000000001000000000000000000000000000000001000001100111000000000101000001000000010100000100000000000000000000000000000000000010000000010110000010000000110100001010000001100100000100000000001100000000000111111111101111011111100100111111100000001110000000000000000000000000000000000000000000000000000000100111111111011110111111001001111111000011100011110000001010100011011001000000000010000000000000000000000000000000010000011001010000000000110000010000000011000001100000000000000000000000000000000000100000000011000000100001001011000010100000010011000001000000000011000000000001111111111011110111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111110111101111110011011111110000111000111100000010101000110110010000000000100000000000000000000000000000000100000110011100100000001100000110000000110000010000000000000000000000000000000000001000000000110000001000010010110000101000000100110000010000000000110000000000011111111110111101111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111101111011111100110111111100001110001111000000101000001101100000000000000000000000010000000000000000000001000001100101001000000011000001100000001100000110000000000000000000000000000000000010000000001100000010000100101100001010000001001100000100000000001100000000000111111111101111011111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111011110111111001101111111000011100011110000001010000011011000000000000000000000000100000000000000000000010000011001110000000000110000010000000011000001000000000000000000000000000000000000100000000011000000100001001011000010100000010011000001000000000011000000000001011111111011110111111001101111111000000011100000000000000000000000000000000000000000000000000000001000111111110111101111110011011111110000111011011100000010101000110110000000000000000000000001000000000000000000000100000110010100000000011100000100000001110000011000000000000000000000000000000000001000000001111000001000010011110000101000000110110000010000000000110000000000010111111110111101111110011011111110000000111000000000000000000000000000000000000000000000000000000010001111111101111011111100110111111100001110110111000000101010001101100000000000000000000000010000000000000000000001000001100111001000000111000001100000011100000100000000000000000000000000000000000010000000011110000010000100111100001010000001101100000100000000001100000000000101111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111001101111111000011101101110000001010000011011001000000000000000000000100000000000000000000010000011001010010000001110000011000000111000001100000000000000000000000000000000000100000000111100000100001001111000010100000011011000001000000000011000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111011011100000010100000110110010000000000000000000001000000000000000000000100000110011100000000011100000100000001110000010000000000000000000000000000000000001000000001111000001000010011110000101000000110110000010000000000110000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110010111000000101010001101100100000000000000000000010000000000000000000001000001100101000000000000100001000000000010000110000000000000000000000000000000000010000000000001000010000000100010000010000001010010000100000000001100000000000101111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111001101111111000011100101110000001010100011011001000000000000000000000100000000000000000000010000011001110010000000001000011000000000100001000000000000000000000000000000000000100000000000010000100000001000100000100000010100100001000000000011000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111001011100000010100000110110000000000000100000000001000000000000000000000100000110010100100000000010000110000000001000011000000000000000000000000000000000001000000000000100001000000010001000001000000101001000010000000000110000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110010111000000101000001101100000000000001000000000010000000000000000000001000001100111000000000000100001000000000010000100000000000000000000000000000000000010000000000001000010000000100010000010000001010010000100000000001100000000000111111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111001101111111000011101001110000001010100011011000000000000010000000000100000000000000000000010000011001010000000001001000010000000100100001100000000000000000000000000000000000100000000100110000100000001100100000100000011100100001000000000011000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111010011100000010101000110110000000000000100000000001000000000000000000000100000110011100100000010010000110000001001000010000000000000000000000000000000000001000000001001100001000000011001000001000000111001000010000000000110000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110100111000000101000001101100100000000001000000000010000000000000000000001000001100101001000000100100001100000010010000110000000000000000000000000000000000010000000010011000010000000110010000010000001110010000100000000001100000000000101111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111001101111111000011101001110000001010000011011001000000000010000000000100000000000000000000010000011001110000000001001000010000000100100001000000000000000000000000000000000000100000000100110000100000001100100000100000011100100001000000000011000000000001011111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111110011011111110000111000011100000010101000110110010000000000100000000001000000000000000000000100000110010100000000001010000100000000101000011000000000000000000000000000000000001000000000100100001000010010101000001000000101101000010000000000110000000000010111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111100110111111100001110000111000000101010001101100100000000001000000000010000000000000000000001000001100111001000000010100001100000001010000100000000000000000000000000000000000010000000001001000010000100101010000010000001011010000100000000001100000000000111111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111001101111111000011100001110000001010000011011000000000000000000000000000000000001000000000010000011001010010000000101000011000000010100001100000000000000000000000000000000000100000000010010000100001001010100000100000010110100001000000000011000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111000011100000010100000110110000000000000000000000000000000000010000000000100000110011100000000001010000100000000101000010000000000000000000000000000000000001000000000100100001000010010101000001000000101101000010000000000110000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110111011000000101010001101100000000000000000000000000000000000100000000001000001100101000000000110100001000000011010000110000000000000000000000000000000000010000000011011000010000100111010000010000001111010000100000000001100000000000111111111111111111111110110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101101111111000011101110110000001010100011011000000000000000000000000000000000001000000000010000011001110010000001101000011000000110100001000000000000000000000000000000000000100000000110110000100001001110100000100000011110100001000000000011000000000001111111111111111111111101101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011011111110000111011101100000010100000110110010000000000000000000000000000000010000000000100000110010100100000011010000110000001101000011000000000000000000000000000000000001000000001101100001000010011101000001000000111101000010000000000110000000000011111111111111111111111011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110110111111100001110111011000000101000001101100100000000000000000000000000000000100000000001000001100111000000000110100001000000011010000100000000000000000000000000000000000010000000011011000010000100111010000010000001111010000100000000001100000000000101111111111111111111110110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111101101111111000011100110110000001010100011011001000000000000000000000000000000001000000000010000011001010000000000011000010000000001100001100000000000000000000000000000000000100000000001010000100000001001100010100000010101100001000000000011000000000001011111111111111111111101101111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111011011111110000111001101100000010101000110110010000000000000000000000000000000010000000000100000110011100100000000110000110000000011000010000000000000000000000000000000000001000000000010100001000000010011000101000000101011000010000000000110000000000010111111111111111111111011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111110110111111100001110011011000000101000001101100000000000001000000000000000000000100000000001000001100101001000000001100001100000000110000110000000000000000000000000000000000010000000000101000010000000100110001010000001010110000100000000001100000000000101111111111111111111110110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111101101111111000011100110110000001010000011011000000000000010000000000000000000001000000000010000011001110000000000011000010000000001100001000000000000000000000000000000000000100000000001010000100000001001100010100000010101100001000000000011000000000001011111111111111111111101101111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111011011111110000111010101100000010101000110110000000000000100000000000000000000010000000000100000110010100000000010110000100000001011000011000000000000000000000000000000000001000000001011100001000000011011000101000000111011000010000000000110000000000010111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111110111111111100001110101011000000101010001101100000000000001000000000000000000000100000000001000001100111001000000101100001100000010110000100000000000000000000000000000000000010000000010111000010000000110110001010000001110110000100000000001100000000000101111111111111111111110111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111101111111111000011101010110000001010000011011001000000000010000000000000000000001000000000010000011001010010000001011000011000000101100001100000000000000000000000000000000000100000000101110000100000001101100010100000011101100001000000000011000000000001111111111111111111111101111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011111111110000111010101100000010100000110110010000000000100000000000000000000010000000000100000110011100000000010110000100000001011000010000000000000000000000000000000000001000000001011100001000000011011000101000000111011000010000000000110000000000011111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110111111111100001110001011000000101010001101100100000000001000000000000000000000100000000001000001100101000000000011100001000000001110000110000000000000000000000000000000000010000000001101000010000100101110001010000001011110000100000000001100000000000111111111111111111111110111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101111111111000011100010110000001010100011011001000000000010000000000000000000001000000000010000011001110010000000111000011000000011100001000000000000000000000000000000000000100000000011010000100001001011100010100000010111100001000000000011000000000001111111111111111111111101111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011111111110000111000101100000010100000110110000000000000000000000001000000000010000000000100000110010100100000001110000110000000111000011000000000000000000000000000000000001000000000110100001000010010111000101000000101111000010000000000110000000000011111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110111111111100001110001011000000101000001101100000000000000000000000010000000000100000000001000001100111000000000011100001000000001110000100000000000000000000000000000000000010000000001101000010000100101110001010000001011110000100000000001100000000000111111111111111111111110111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101111111111000011101100110000001010100011011000000000000000000000000100000000001000000000010000011001010000000001111000010000000111100001100000000000000000000000000000000000100000000111110000100001001111100010100000011111100001000000000011000000000001111111111111111111111101111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011111111110000111011001100000010101000110110000000000000000000000001000000000010000000000100000110011100100000011110000110000001111000010000000000000000000000000000000000001000000001111100001000010011111000101000000111111000010000000000110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110011000000101000001101100100000000000000000000010000000000100000000001000001100101001000000111100001100000011110000110000000000000000000000000000000000010000000011111000010000100111110001010000001111110000100000000001100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101100110000001010000011011001000000000000000000000100000000001000000000010000011001110000000001111000010000000111100001000000000000000000000000000000000000100000000111110000100001001111100010100000011111100001000000000011000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001001100000010101000110110010000000000000000000001000000000010000000000100000110010100000000000001000100000000000100011000000000000000000000000000000000001000000000000010001000000010000100001000000100000100010010000000110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010011000000101010001101100100000000000000000000010000000000100000000001000001100111001000000000010001100000000001000100000000000000000000000000000000000010000000000000100010000000100001000010000001000001000100100000001100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100100110000001010000011011000000000000010000000000100000000001000000000010000011001010010000000000100011000000000010001100000000000000000000000000000000000100000000000001000100000001000010000100000010000010001001000000011000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001001100000010100000110110000000000000100000000001000000000010000000000100000110011100000000000001000100000000000100010000000000000000000000000000000000001000000000000010001000000010000100001000000100000100010010000000110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100011000000101010001101100000000000001000000000010000000000100000000001000001100101000000000100010001000000010001000110000000000000000000000000000000000010000000010010100010000000110001000010000001100001000100100000001100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000110000001010100011011000000000000010000000000100000000001000000000010000011001110010000001000100011000000100010001000000000000000000000000000000000000100000000100101000100000001100010000100000011000010001001000000011000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010001100000010100000110110010000000000100000000001000000000010000000000100000110010100100000010001000110000001000100011000000000000000000000000000000000001000000001001010001000000011000100001000000110000100010010000000110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100011000000101000001101100100000000001000000000010000000000100000000001000001100111000000000100010001000000010001000100000000000000000000000000000000000010000000010010100010000000110001000010000001100001000100100000001100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000110000001010100011011001000000000010000000000100000000001000000000010000011001010000000000100100010000000010010001100000000000000000000000000000000000100000000010001000100001001010010000100000010010010001001000000011000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000001100000010101000110110010000000000100000000001000000000010000000000100000110011100100000001001000110000000100100010000000000000000000000000000000000001000000000100010001000010010100100001000000100100100010010000000110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000011000000101000001101100000000000000000000000000000000000000000000000000011100101001000000010010001100000001001000110000000000000000000000000000000000010000000001000100010000100101001000010000001001001000100100000001100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000110000001010000011011000000000000000000000000000000000000000000000000000111001110000000000100100010000000010010001000000000000000000000000000000000000100000000010001000100001001010010000100000010010010001001000000011000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011110100000010101000110110000000000000000000000000000000000000000000000000001110010100000000011001000100000001100100011000000000000000000000000000000000001000000001101010001000010011100100001000000110100100010010000000110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111101000000101010001101100000000000000000000000000000000000000000000000000011100111001000000110010001100000011001000100000000000000000000000000000000000010000000011010100010000100111001000010000001101001000100100000001100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101111010000001010000011011001000000000000000000000000000000000000000000000000111001010010000001100100011000000110010001100000000000000000000000000000000000100000000110101000100001001110010000100000011010010001001000000011000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011110100000010100000110110010000000000000000000000000000000000000000000000001110011100000000011001000100000001100100010000000000000000000000000000000000001000000001101010001000010011100100001000000110100100010010000000110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011101000000101010001101100100000000000000000000000000000000000000000000000011100101000000000001010001000000000101000110000000000000000000000000000000000010000000000100100010000000100101001010000001000101000100100000001100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100111010000001010100011011001000000000000000000000000000000000000000000000000111001110010000000010100011000000001010001000000000000000000000000000000000000100000000001001000100000001001010010100000010001010001001000000011000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001110100000010100000110110000000000000100000000000000000000000000000000000001110010100100000000101000110000000010100011000000000000000000000000000000000001000000000010010001000000010010100101000000100010100010010000000110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011101000000101000001101100000000000001000000000000000000000000000000000000011100111000000000001010001000000000101000100000000000000000000000000000000000010000000000100100010000000100101001010000001000101000100100000001100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101011010000001010100011011000000000000010000000000000000000000000000000000000111001010000000001010100010000000101010001100000000000000000000000000000000000100000000101101000100000001101010010100000011001010001001000000011000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010110100000010101000110110000000000000100000000000000000000000000000000000001110011100100000010101000110000001010100010000000000000000000000000000000000001000000001011010001000000011010100101000000110010100010010000000110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101101000000101000001101100100000000001000000000000000000000000000000000000011100101001000000101010001100000010101000110000000000000000000000000000000000010000000010110100010000000110101001010000001100101000100100000001100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101011010000001010000011011001000000000010000000000000000000000000000000000000111001110000000001010100010000000101010001000000000000000000000000000000000000100000000101101000100000001101010010100000011001010001001000000011000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000110100000010101000110110010000000000100000000000000000000000000000000000001110010100000000001101000100000000110100011000000000000000000000000000000000001000000000110010001000010010110100101000000100110100010010000000110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001101000000101010001101100100000000001000000000000000000000000000000000000011100111001000000011010001100000001101000100000000000000000000000000000000000010000000001100100010000100101101001010000001001101000100100000001100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100011010000001010000011011000000000000000000000000100000000000000000000000000111001010010000000110100011000000011010001100000000000000000000000000000000000100000000011001000100001001011010010100000010011010001001000000011000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000110100000010100000110110000000000000000000000001000000000000000000000000001110011100000000001101000100000000110100010000000000000000000000000000000000001000000000110010001000010010110100101000000100110100010010000000110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110101000000101010001101100000000000000000000000010000000000000000000000000011100101000000000111010001000000011101000110000000000000000000000000000000000010000000011110100010000100111101001010000001101101000100100000001100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101101010000001010100011011000000000000000000000000100000000000000000000000000111001110010000001110100011000000111010001000000000000000000000000000000000000100000000111101000100001001111010010100000011011010001001000000011000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011010100000010100000110110010000000000000000000001000000000000000000000000001110010100100000011101000110000001110100011000000000000000000000000000000000001000000001111010001000010011110100101000000110110100010010000000110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110101000000101000001101100100000000000000000000010000000000000000000000000011100111000000000111010001000000011101000100000000000000000000000000000000000010000000011110100010000100111101001010000001101101000100100000001100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100101010000001010100011011001000000000000000000000100000000000000000000000000111001010000000000001100010000000000110001100000000000000000000000000000000000100000000000011000100000001000110000100000010100110001001000000011000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001010100000010101000110110010000000000000000000001000000000000000000000000001110011100100000000011000110000000001100010000000000000000000000000000000000001000000000000110001000000010001100001000000101001100010010000000110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010101000000101000001101100000000000001000000000010000000000000000000000000011100101001000000000110001100000000011000110000000000000000000000000000000000010000000000001100010000000100011000010000001010011000100100000001100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100101010000001010000011011000000000000010000000000100000000000000000000000000111001110000000000001100010000000000110001000000000000000000000000000000000000100000000000011000100000001000110000100000010100110001001000000011000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010010100000010101000110110000000000000100000000001000000000000000000000000001110010100000000010011000100000001001100011000000000000000000000000000000000001000000001001110001000000011001100001000000111001100010010000000110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100101000000101010001101100000000000001000000000010000000000000000000000000011100111001000000100110001100000010011000100000000000000000000000000000000000010000000010011100010000000110011000010000001110011000100100000001100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101001010000001010000011011001000000000010000000000100000000000000000000000000111001010010000001001100011000000100110001100000000000000000000000000000000000100000000100111000100000001100110000100000011100110001001000000011000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010010100000010100000110110010000000000100000000001000000000000000000000000001110011100000000010011000100000001001100010000000000000000000000000000000000001000000001001110001000000011001100001000000111001100010010000000110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000101000000101010001101100100000000001000000000010000000000000000000000000011100101000000000010110001000000001011000110000000000000000000000000000000000010000000001001100010000100101011000010000001011011000100100000001100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100001010000001010100011011001000000000010000000000100000000000000000000000000111001110010000000101100011000000010110001000000000000000000000000000000000000100000000010011000100001001010110000100000010110110001001000000011000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000010100000010100000110110000000000000000000000000000000000010000000000000001110010100100000001011000110000000101100011000000000000000000000000000000000001000000000100110001000010010101100001000000101101100010010000000110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000101000000101000001101100000000000000000000000000000000000100000000000000011100111000000000010110001000000001011000100000000000000000000000000000000000010000000001001100010000100101011000010000001011011000100100000001100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101110010000001010100011011000000000000000000000000000000000001000000000000000111001010000000001101100010000000110110001100000000000000000000000000000000000100000000110111000100001001110110000100000011110110001001000000011000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011100100000010101000110110000000000000000000000000000000000010000000000000001110011100100000011011000110000001101100010000000000000000000000000000000000001000000001101110001000010011101100001000000111101100010010000000110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111001000000101000001101100100000000000000000000000000000000100000000000000011100101001000000110110001100000011011000110000000000000000000000000000000000010000000011011100010000100111011000010000001111011000100100000001100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101110010000001010000011011001000000000000000000000000000000001000000000000000111001110000000001101100010000000110110001000000000000000000000000000000000000100000000110111000100001001110110000100000011110110001001000000011000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100100000010101000110110010000000000000000000000000000000010000000000000001110010100000000000111000100000000011100011000000000000000000000000000000000001000000000010110001000000010011100101000000101011100010010000000110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011001000000101010001101100100000000000000000000000000000000100000000000000011100111001000000001110001100000000111000100000000000000000000000000000000000010000000000101100010000000100111001010000001010111000100100000001100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110010000001010000011011000000000000010000000000000000000001000000000000000111001010010000000011100011000000001110001100000000000000000000000000000000000100000000001011000100000001001110010100000010101110001001000000011000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100100000010100000110110000000000000100000000000000000000010000000000000001110011100000000000111000100000000011100010000000000000000000000000000000000001000000000010110001000000010011100101000000101011100010010000000110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101001000000101010001101100000000000001000000000000000000000100000000000000011100101000000000101110001000000010111000110000000000000000000000000000000000010000000010111100010000000110111001010000001110111000100100000001100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101010010000001010100011011000000000000010000000000000000000001000000000000000111001110010000001011100011000000101110001000000000000000000000000000000000000100000000101111000100000001101110010100000011101110001001000000011000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010100100000010100000110110010000000000100000000000000000000010000000000000001110010100100000010111000110000001011100011000000000000000000000000000000000001000000001011110001000000011011100101000000111011100010010000000110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101001000000101000001101100100000000001000000000000000000000100000000000000011100111000000000101110001000000010111000100000000000000000000000000000000000010000000010111100010000000110111001010000001110111000100100000001100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100010010000001010100011011001000000000010000000000000000000001000000000000000111001010000000000111100010000000011110001100000000000000000000000000000000000100000000011011000100001001011110010100000010111110001001000000011000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000100100000010101000110110010000000000100000000000000000000010000000000000001110011100100000001111000110000000111100010000000000000000000000000000000000001000000000110110001000010010111100101000000101111100010010000000110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001001000000101000001101100000000000000000000000010000000000100000000000000011100101001000000011110001100000001111000110000000000000000000000000000000000010000000001101100010000100101111001010000001011111000100100000001100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100010010000001010000011011000000000000000000000000100000000001000000000000000111001110000000000111100010000000011110001000000000000000000000000000000000000100000000011011000100001001011110010100000010111110001001000000011000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011000100000010101000110110000000000000000000000001000000000010000000000000001110010100000000011111000100000001111100011000000000000000000000000000000000001000000001111110001000010011111100101000000111111100010010000000110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110001000000101010001101100000000000000000000000010000000000100000000000000011100111001000000111110001100000011111000100000000000000000000000000000000000010000000011111100010000100111111001010000001111111000100100000001100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101100010000001010000011011001000000000000000000000100000000001000000000000000111001010010000001111100011000000111110001100000000000000000000000000000000000100000000111111000100001001111110010100000011111110001001000000011000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011000100000010100000110110010000000000000000000001000000000010000000000000001110011100000000011111000100000001111100010000000000000000000000000000000000001000000001111110001000010011111100101000000111111100010010000000110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010001000000101010001101100100000000000000000000010000000000100000000000000011100101000000000000001001000000000000100110000000000000000000000000000000000010000000000000010010000000100000100010000001000000100100000001001100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100100010000001010100011011001000000000000000000000100000000001000000000000000111001110010000000000010011000000000001001000000000000000000000000000000000000100000000000000100100000001000001000100000010000001001000000010011000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001000100000010100000110110000000000000100000000001000000000010000000000000001110010100100000000000100110000000000010011000000000000000000000000000000000001000000000000001001000000010000010001000000100000010010000000100110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010001000000101000001101100000000000001000000000010000000000100000000000000011100111000000000000001001000000000000100100000000000000000000000000000000000010000000000000010010000000100000100010000001000000100100000001001100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000010000001010100011011000000000000010000000000100000000001000000000000000111001010000000001000010010000000100001001100000000000000000000000000000000000100000000100100100100000001100001000100000011000001001000000010011000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010000100000010101000110110000000000000100000000001000000000010000000000000001110011100100000010000100110000001000010010000000000000000000000000000000000001000000001001001001000000011000010001000000110000010010000000100110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100001000000101000001101100100000000001000000000010000000000100000000000000011100101001000000100001001100000010000100110000000000000000000000000000000000010000000010010010010000000110000100010000001100000100100000001001100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000010000001010000011011001000000000010000000000100000000001000000000000000111001110000000001000010010000000100001001000000000000000000000000000000000000100000000100100100100000001100001000100000011000001001000000010011000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000000100000010101000110110010000000000100000000001000000000010000000000000001110010100000000001000100100000000100010011000000000000000000000000000000000001000000000100001001000010010100010001000000100100010010000000100110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000001000000101010001101100100000000001000000000010000000000100000000000000011100111001000000010001001100000001000100100000000000000000000000000000000000010000000001000010010000100101000100010000001001000100100000001001100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000010000001010000011011000000000000000000000000000000000000000000000010000111001010010000000100010011000000010001001100000000000000000000000000000000000100000000010000100100001001010001000100000010010001001000000010011000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000000100000010100000110110000000000000000000000000000000000000000000000100001110011100000000001000100100000000100010010000000000000000000000000000000000001000000000100001001000010010100010001000000100100010010000000100110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111110000000101010001101100000000000000000000000000000000000000000000001000011100101000000000110001001000000011000100110000000000000000000000000000000000010000000011010010010000100111000100010000001101000100100000001001100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101111100000001010100011011000000000000000000000000000000000000000000000010000111001110010000001100010011000000110001001000000000000000000000000000000000000100000000110100100100001001110001000100000011010001001000000010011000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011111000000010100000110110010000000000000000000000000000000000000000000100001110010100100000011000100110000001100010011000000000000000000000000000000000001000000001101001001000010011100010001000000110100010010000000100110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111110000000101000001101100100000000000000000000000000000000000000000001000011100111000000000110001001000000011000100100000000000000000000000000000000000010000000011010010010000100111000100010000001101000100100000001001100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100111100000001010100011011001000000000000000000000000000000000000000000010000111001010000000000010010010000000001001001100000000000000000000000000000000000100000000001000100100000001001001010100000010001001001000000010011000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001111000000010101000110110010000000000000000000000000000000000000000000100001110011100100000000100100110000000010010010000000000000000000000000000000000001000000000010001001000000010010010101000000100010010010000000100110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011110000000101000001101100000000000001000000000000000000000000000000001000011100101001000000001001001100000000100100110000000000000000000000000000000000010000000000100010010000000100100101010000001000100100100000001001100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100111100000001010000011011000000000000010000000000000000000000000000000010000111001110000000000010010010000000001001001000000000000000000000000000000000000100000000001000100100000001001001010100000010001001001000000010011000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010111000000010101000110110000000000000100000000000000000000000000000000100001110010100000000010100100100000001010010011000000000000000000000000000000000001000000001011001001000000011010010101000000110010010010000000100110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101110000000101010001101100000000000001000000000000000000000000000000001000011100111001000000101001001100000010100100100000000000000000000000000000000000010000000010110010010000000110100101010000001100100100100000001001100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101011100000001010000011011001000000000010000000000000000000000000000000010000111001010010000001010010011000000101001001100000000000000000000000000000000000100000000101100100100000001101001010100000011001001001000000010011000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010111000000010100000110110010000000000100000000000000000000000000000000100001110011100000000010100100100000001010010010000000000000000000000000000000000001000000001011001001000000011010010101000000110010010010000000100110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001110000000101010001101100100000000001000000000000000000000000000000001000011100101000000000011001001000000001100100110000000000000000000000000000000000010000000001100010010000100101100101010000001001100100100000001001100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100011100000001010100011011001000000000010000000000000000000000000000000010000111001110010000000110010011000000011001001000000000000000000000000000000000000100000000011000100100001001011001010100000010011001001000000010011000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000111000000010100000110110000000000000000000000001000000000000000000000100001110010100100000001100100110000000110010011000000000000000000000000000000000001000000000110001001000010010110010101000000100110010010000000100110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001110000000101000001101100000000000000000000000010000000000000000000001000011100111000000000011001001000000001100100100000000000000000000000000000000000010000000001100010010000100101100101010000001001100100100000001001100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101101100000001010100011011000000000000000000000000100000000000000000000010000111001010000000001110010010000000111001001100000000000000000000000000000000000100000000111100100100001001111001010100000011011001001000000010011000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011011000000010101000110110000000000000000000000001000000000000000000000100001110011100100000011100100110000001110010010000000000000000000000000000000000001000000001111001001000010011110010101000000110110010010000000100110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110110000000101000001101100100000000000000000000010000000000000000000001000011100101001000000111001001100000011100100110000000000000000000000000000000000010000000011110010010000100111100101010000001101100100100000001001100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101101100000001010000011011001000000000000000000000100000000000000000000010000111001110000000001110010010000000111001001000000000000000000000000000000000000100000000111100100100001001111001010100000011011001001000000010011000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001011000000010101000110110010000000000000000000001000000000000000000000100001110010100000000000010100100000000001010011000000000000000000000000000000000001000000000000101001000000010001010001000000101001010010000000100110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010110000000101010001101100100000000000000000000010000000000000000000001000011100111001000000000101001100000000010100100000000000000000000000000000000000010000000000001010010000000100010100010000001010010100100000001001100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100101100000001010000011011000000000000010000000000100000000000000000000010000111001010010000000001010011000000000101001100000000000000000000000000000000000100000000000010100100000001000101000100000010100101001000000010011000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001011000000010100000110110000000000000100000000001000000000000000000000100001110011100000000000010100100000000001010010000000000000000000000000000000000001000000000000101001000000010001010001000000101001010010000000100110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100110000000101010001101100000000000001000000000010000000000000000000001000011100101000000000100101001000000010010100110000000000000000000000000000000000010000000010011010010000000110010100010000001110010100100000001001100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101001100000001010100011011000000000000010000000000100000000000000000000010000111001110010000001001010011000000100101001000000000000000000000000000000000000100000000100110100100000001100101000100000011100101001000000010011000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010011000000010100000110110010000000000100000000001000000000000000000000100001110010100100000010010100110000001001010011000000000000000000000000000000000001000000001001101001000000011001010001000000111001010010000000100110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100110000000101000001101100100000000001000000000010000000000000000000001000011100111000000000100101001000000010010100100000000000000000000000000000000000010000000010011010010000000110010100010000001110010100100000001001100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100001100000001010100011011001000000000010000000000100000000000000000000010000111001010000000000101010010000000010101001100000000000000000000000000000000000100000000010010100100001001010101000100000010110101001000000010011000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000011000000010101000110110010000000000100000000001000000000000000000000100001110011100100000001010100110000000101010010000000000000000000000000000000000001000000000100101001000010010101010001000000101101010010000000100110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000110000000101000001101100000000000000000000000000000000000100000000001000011100101001000000010101001100000001010100110000000000000000000000000000000000010000000001001010010000100101010100010000001011010100100000001001100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100001100000001010000011011000000000000000000000000000000000001000000000010000111001110000000000101010010000000010101001000000000000000000000000000000000000100000000010010100100001001010101000100000010110101001000000010011000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011101000000010101000110110000000000000000000000000000000000010000000000100001110010100000000011010100100000001101010011000000000000000000000000000000000001000000001101101001000010011101010001000000111101010010000000100110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111010000000101010001101100000000000000000000000000000000000100000000001000011100111001000000110101001100000011010100100000000000000000000000000000000000010000000011011010010000100111010100010000001111010100100000001001100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101110100000001010000011011001000000000000000000000000000000001000000000010000111001010010000001101010011000000110101001100000000000000000000000000000000000100000000110110100100001001110101000100000011110101001000000010011000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011101000000010100000110110010000000000000000000000000000000010000000000100001110011100000000011010100100000001101010010000000000000000000000000000000000001000000001101101001000010011101010001000000111101010010000000100110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011010000000101010001101100100000000000000000000000000000000100000000001000011100101000000000001101001000000000110100110000000000000000000000000000000000010000000000101010010000000100110101010000001010110100100000001001100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110100000001010100011011001000000000000000000000000000000001000000000010000111001110010000000011010011000000001101001000000000000000000000000000000000000100000000001010100100000001001101010100000010101101001000000010011000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001101000000010100000110110000000000000100000000000000000000010000000000100001110010100100000000110100110000000011010011000000000000000000000000000000000001000000000010101001000000010011010101000000101011010010000000100110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011010000000101000001101100000000000001000000000000000000000100000000001000011100111000000000001101001000000000110100100000000000000000000000000000000000010000000000101010010000000100110101010000001010110100100000001001100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101010100000001010100011011000000000000010000000000000000000001000000000010000111001010000000001011010010000000101101001100000000000000000000000000000000000100000000101110100100000001101101010100000011101101001000000010011000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010101000000010101000110110000000000000100000000000000000000010000000000100001110011100100000010110100110000001011010010000000000000000000000000000000000001000000001011101001000000011011010101000000111011010010000000100110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101010000000101000001101100100000000001000000000000000000000100000000001000011100101001000000101101001100000010110100110000000000000000000000000000000000010000000010111010010000000110110101010000001110110100100000001001100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101010100000001010000011011001000000000010000000000000000000001000000000010000111001110000000001011010010000000101101001000000000000000000000000000000000000100000000101110100100000001101101010100000011101101001000000010011000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000101000000010101000110110010000000000100000000000000000000010000000000100001110010100000000001110100100000000111010011000000000000000000000000000000000001000000000110101001000010010111010101000000101111010010000000100110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001010000000101010001101100100000000001000000000000000000000100000000001000011100111001000000011101001100000001110100100000000000000000000000000000000000010000000001101010010000100101110101010000001011110100100000001001100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100010100000001010000011011000000000000000000000000100000000001000000000010000111001010010000000111010011000000011101001100000000000000000000000000000000000100000000011010100100001001011101010100000010111101001000000010011000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000101000000010100000110110000000000000000000000001000000000010000000000100001110011100000000001110100100000000111010010000000000000000000000000000000000001000000000110101001000010010111010101000000101111010010000000100110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110010000000101010001101100000000000000000000000010000000000100000000001000011100101000000000111101001000000011110100110000000000000000000000000000000000010000000011111010010000100111110101010000001111110100100000001001100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101100100000001010100011011000000000000000000000000100000000001000000000010000111001110010000001111010011000000111101001000000000000000000000000000000000000100000000111110100100001001111101010100000011111101001000000010011000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011001000000010100000110110010000000000000000000001000000000010000000000100001110010100100000011110100110000001111010011000000000000000000000000000000000001000000001111101001000010011111010101000000111111010010000000100110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110010000000101000001101100100000000000000000000010000000000100000000001000011100111000000000111101001000000011110100100000000000000000000000000000000000010000000011111010010000100111110101010000001111110100100000001001100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100100100000001010100011011001000000000000000000000100000000001000000000010000111001010000000000000110010000000000011001100000000000000000000000000000000000100000000000001100100000001000011000100000010000011001001000010011000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001001000000010101000110110010000000000000000000001000000000010000000000100001110011100100000000001100110000000000110010000000000000000000000000000000000001000000000000011001000000010000110001000000100000110010010000100110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010010000000101000001101100000000000001000000000010000000000100000000001000011100101001000000000011001100000000001100110000000000000000000000000000000000010000000000000110010000000100001100010000001000001100100100001001100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100100100000001010000011011000000000000010000000000100000000001000000000010000111001110000000000000110010000000000011001000000000000000000000000000000000000100000000000001100100000001000011000100000010000011001001000010011000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010001000000010101000110110000000000000100000000001000000000010000000000100001110010100000000010001100100000001000110011000000000000000000000000000000000001000000001001011001000000011000110001000000110000110010010000100110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100010000000101010001101100000000000001000000000010000000000100000000001000011100111001000000100011001100000010001100100000000000000000000000000000000000010000000010010110010000000110001100010000001100001100100100001001100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000100000001010000011011001000000000010000000000100000000001000000000010000111001010010000001000110011000000100011001100000000000000000000000000000000000100000000100101100100000001100011000100000011000011001001000010011000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010001000000010100000110110010000000000100000000001000000000010000000000100001110011100000000010001100100000001000110010000000000000000000000000000000000001000000001001011001000000011000110001000000110000110010010000100110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000010000000101010001101100100000000001000000000010000000000100000000001000011100101000000000010011001000000001001100110000000000000000000000000000000000010000000001000110010000100101001100010000001001001100100100001001100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000100000001010100011011001000000000010000000000100000000001000000000010000111001110010000000100110011000000010011001000000000000000000000000000000000000100000000010001100100001001010011000100000010010011001001000010011000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000001000000010100000110110000000000000000000000000000000000000000000000000000001010100100000001001100110000000100110011000000000000000000000000000000000001000000000100011001000010010100110001000000100100110010010000100110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000010000000101000001101100000000000000000000000000000000000000000000000000000010111000000000010011001000000001001100100000000000000000000000000000000000010000000001000110010000100101001100010000001001001100100100001001100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101111000000001010100011011000000000000000000000000000000000000000000000000000000101010000000001100110010000000110011001100000000000000000000000000000000000100000000110101100100001001110011000100000011010011001001000010011000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011110000000010101000110110000000000000000000000000000000000000000000000000000001011100100000011001100110000001100110010000000000000000000000000000000000001000000001101011001000010011100110001000000110100110010010000100110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111100000000101000001101100100000000000000000000000000000000000000000000000000010101001000000110011001100000011001100110000000000000000000000000000000000010000000011010110010000100111001100010000001101001100100100001001100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101111000000001010000011011001000000000000000000000000000000000000000000000000000101110000000001100110010000000110011001000000000000000000000000000000000000100000000110101100100001001110011000100000011010011001001000010011000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001110000000010101000110110010000000000000000000000000000000000000000000000000001010100000000000101100100000000010110011000000000000000000000000000000000001000000000010011001000000010010110101000000100010110010010000100110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011100000000101010001101100100000000000000000000000000000000000000000000000000010111001000000001011001100000000101100100000000000000000000000000000000000010000000000100110010000000100101101010000001000101100100100001001100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100111000000001010000011011000000000000010000000000000000000000000000000000000000101010010000000010110011000000001011001100000000000000000000000000000000000100000000001001100100000001001011010100000010001011001001000010011000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001110000000010100000110110000000000000100000000000000000000000000000000000000001011100000000000101100100000000010110010000000000000000000000000000000000001000000000010011001000000010010110101000000100010110010010000100110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101100000000101010001101100000000000001000000000000000000000000000000000000000010101000000000101011001000000010101100110000000000000000000000000000000000010000000010110110010000000110101101010000001100101100100100001001100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101011000000001010100011011000000000000010000000000000000000000000000000000000000101110010000001010110011000000101011001000000000000000000000000000000000000100000000101101100100000001101011010100000011001011001001000010011000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010110000000010100000110110010000000000100000000000000000000000000000000000000001010100100000010101100110000001010110011000000000000000000000000000000000001000000001011011001000000011010110101000000110010110010010000100110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101100000000101000001101100100000000001000000000000000000000000000000000000000010111000000000101011001000000010101100100000000000000000000000000000000000010000000010110110010000000110101101010000001100101100100100001001100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100011000000001010100011011001000000000010000000000000000000000000000000000000000101010000000000110110010000000011011001100000000000000000000000000000000000100000000011001100100001001011011010100000010011011001001000010011000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000110000000010101000110110010000000000100000000000000000000000000000000000000001011100100000001101100110000000110110010000000000000000000000000000000000001000000000110011001000010010110110101000000100110110010010000100110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001100000000101000001101100000000000000000000000010000000000000000000000000000010101001000000011011001100000001101100110000000000000000000000000000000000010000000001100110010000100101101101010000001001101100100100001001100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100011000000001010000011011000000000000000000000000100000000000000000000000000000101110000000000110110010000000011011001000000000000000000000000000000000000100000000011001100100001001011011010100000010011011001001000010011000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011010000000010101000110110000000000000000000000001000000000000000000000000000001010100000000011101100100000001110110011000000000000000000000000000000000001000000001111011001000010011110110101000000110110110010010000100110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110100000000101010001101100000000000000000000000010000000000000000000000000000010111001000000111011001100000011101100100000000000000000000000000000000000010000000011110110010000100111101101010000001101101100100100001001100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101101000000001010000011011001000000000000000000000100000000000000000000000000000101010010000001110110011000000111011001100000000000000000000000000000000000100000000111101100100001001111011010100000011011011001001000010011000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011010000000010100000110110010000000000000000000001000000000000000000000000000001011100000000011101100100000001110110010000000000000000000000000000000000001000000001111011001000010011110110101000000110110110010010000100110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010100000000101010001101100100000000000000000000010000000000000000000000000000010101000000000000111001000000000011100110000000000000000000000000000000000010000000000001110010000000100011100010000001010011100100100001001100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100101000000001010100011011001000000000000000000000100000000000000000000000000000101110010000000001110011000000000111001000000000000000000000000000000000000100000000000011100100000001000111000100000010100111001001000010011000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001010000000010100000110110000000000000100000000001000000000000000000000000000001010100100000000011100110000000001110011000000000000000000000000000000000001000000000000111001000000010001110001000000101001110010010000100110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010100000000101000001101100000000000001000000000010000000000000000000000000000010111000000000000111001000000000011100100000000000000000000000000000000000010000000000001110010000000100011100010000001010011100100100001001100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101001000000001010100011011000000000000010000000000100000000000000000000000000000101010000000001001110010000000100111001100000000000000000000000000000000000100000000100111100100000001100111000100000011100111001001000010011000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010010000000010101000110110000000000000100000000001000000000000000000000000000001011100100000010011100110000001001110010000000000000000000000000000000000001000000001001111001000000011001110001000000111001110010010000100110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100100000000101000001101100100000000001000000000010000000000000000000000000000010101001000000100111001100000010011100110000000000000000000000000000000000010000000010011110010000000110011100010000001110011100100100001001100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101001000000001010000011011001000000000010000000000100000000000000000000000000000101110000000001001110010000000100111001000000000000000000000000000000000000100000000100111100100000001100111000100000011100111001001000010011000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000010000000010101000110110010000000000100000000001000000000000000000000000000001010100000000001011100100000000101110011000000000000000000000000000000000001000000000100111001000010010101110001000000101101110010010000100110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000100000000101010001101100100000000001000000000010000000000000000000000000000010111001000000010111001100000001011100100000000000000000000000000000000000010000000001001110010000100101011100010000001011011100100100001001100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100001000000001010000011011000000000000000000000000000000000001000000000000000000101010010000000101110011000000010111001100000000000000000000000000000000000100000000010011100100001001010111000100000010110111001001000010011000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000010000000010100000110110000000000000000000000000000000000010000000000000000001011100000000001011100100000000101110010000000000000000000000000000000000001000000000100111001000010010101110001000000101101110010010000100110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111000000000101010001101100000000000000000000000000000000000100000000000000000010101000000000110111001000000011011100110000000000000000000000000000000000010000000011011110010000100111011100010000001111011100100100001001100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101110000000001010100011011000000000000000000000000000000000001000000000000000000101110010000001101110011000000110111001000000000000000000000000000000000000100000000110111100100001001110111000100000011110111001001000010011000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011100000000010100000110110010000000000000000000000000000000010000000000000000001010100100000011011100110000001101110011000000000000000000000000000000000001000000001101111001000010011101110001000000111101110010010000100110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111000000000101000001101100100000000000000000000000000000000100000000000000000010111000000000110111001000000011011100100000000000000000000000000000000000010000000011011110010000100111011100010000001111011100100100001001100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110000000001010100011011001000000000000000000000000000000001000000000000000000101010000000000011110010000000001111001100000000000000000000000000000000000100000000001011100100000001001111010100000010101111001001000010011000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100000000010101000110110010000000000000000000000000000000010000000000000000001011100100000000111100110000000011110010000000000000000000000000000000000001000000000010111001000000010011110101000000101011110010010000100110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000000000101000001101100000000000001000000000000000000000100000000000000000010101001000000001111001100000000111100110000000000000000000000000000000000010000000000101110010000000100111101010000001010111100100100001001100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110000000001010000011011000000000000010000000000000000000001000000000000000000101110000000000011110010000000001111001000000000000000000000000000000000000100000000001011100100000001001111010100000010101111001001000010011000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010100000000010101000110110000000000000100000000000000000000010000000000000000001010100000000010111100100000001011110011000000000000000000000000000000000001000000001011111001000000011011110101000000111011110010010000100110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101000000000101010001101100000000000001000000000000000000000100000000000000000010111001000000101111001100000010111100100000000000000000000000000000000000010000000010111110010000000110111101010000001110111100100100001001100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101010000000001010000011011001000000000010000000000000000000001000000000000000000101010010000001011110011000000101111001100000000000000000000000000000000000100000000101111100100000001101111010100000011101111001001000010011000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010100000000010100000110110010000000000100000000000000000000010000000000000000001011100000000010111100100000001011110010000000000000000000000000000000000001000000001011111001000000011011110101000000111011110010010000100110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001000000000101010001101100100000000001000000000000000000000100000000000000000010101000000000011111001000000001111100110000000000000000000000000000000000010000000001101110010000100101111101010000001011111100100100001001100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100010000000001010100011011001000000000010000000000000000000001000000000000000000101110010000000111110011000000011111001000000000000000000000000000000000000100000000011011100100001001011111010100000010111111001001000010011000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000100000000010100000110110000000000000000000000001000000000010000000000000000001010100100000001111100110000000111110011000000000000000000000000000000000001000000000110111001000010010111110101000000101111110010010000100110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001000000000101000001101100000000000000000000000010000000000100000000000000000010111000000000011111001000000001111100100000000000000000000000000000000000010000000001101110010000100101111101010000001011111100100100001001100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101100000000001010100011011000000000000000000000000100000000001000000000000000000101010000000001111110010000000111111001100000000000000000000000000000000000100000000111111100100001001111111010100000011111111001001000010011000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011000000000010101000110110000000000000000000000001000000000010000000000000000001011100100000011111100110000001111110010000000000000000000000000000000000001000000001111111001000010011111110101000000111111110010010000100110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110000000000101000001101100100000000000000000000010000000000100000000000000000010101001000000111111001100000011111100110000000000000000000000000000000000010000000011111110010000100111111101010000001111111100100100001001100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101100000000001010000011011001000000000000000000000100000000001000000000000000000101110000000001111110010000000111111001000000000000000000000000000000000000100000000111111100100001001111111010100000011111111001001000010011000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001000000000010101000110110010000000000000000000001000000000010000000000000000001010100000000000000010100000000000001011000000000000000000000000000000000001000000000000000101000000010000001001000000100000001010000000010110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010000000000101010001101100100000000000000000000010000000000100000000000000000010111001000000000000101100000000000010100000000000000000000000000000000000010000000000000001010000000100000010010000001000000010100000000101100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100100000000001010000011011000000000000010000000000100000000001000000000000000000101010010000000000001011000000000000101100000000000000000000000000000000000100000000000000010100000001000000100100000010000000101000000001011000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001000000000010100000110110000000000000100000000001000000000010000000000000000001011100000000000000010100000000000001010000000000000000000000000000000000001000000000000000101000000010000001001000000100000001010000000010110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100000000000101010001101100000000000001000000000010000000000100000000000000000010101000000000100000101000000010000010110000000000000000000000000000000000010000000010010001010000000110000010010000001100000010100000000101100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000000000001010100011011000000000000010000000000100000000001000000000000000000101110010000001000001011000000100000101000000000000000000000000000000000000100000000100100010100000001100000100100000011000000101000000001011000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010000000000010100000110110010000000000100000000001000000000010000000000000000001010100100000010000010110000001000001011000000000000000000000000000000000001000000001001000101000000011000001001000000110000001010000000010110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100000000000101000001101100100000000001000000000010000000000100000000000000000010111000000000100000101000000010000010100000000000000000000000000000000000010000000010010001010000000110000010010000001100000010100000000101100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000000000001010100011011001000000000010000000000100000000001000000000000000000101010000000000100001010000000010000101100000000000000000000000000000000000100000000010000010100001001010000100100000010010000101000000001011000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000000000000010101000110110010000000000100000000001000000000010000000000000000001011100100000001000010110000000100001010000000000000000000000000000000000001000000000100000101000010010100001001000000100100001010000000010110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000000000000101000001101100000000000000000000000000000000000000000000001000000010101001000000010000101100000001000010110000000000000000000000000000000000010000000001000001010000100101000010010000001001000010100000000101100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000000000001010000011011000000000000000000000000000000000000000000000010000000101110000000000100001010000000010000101000000000000000000000000000000000000100000000010000010100001001010000100100000010010000101000000001011000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000010111010110000000010101000110110000000000000000000000000000000000000000000000100000001010100000000011000010100000001100001011000000000000000000000000000000000001000000001101000101000010011100001001000000110100001010000000010110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000101110101001000000101010001101100000000000000000000000000000000000000000000001000000010111001000000110000101100000011000010100000000000000000000000000000000000010000000011010001010000100111000010010000001101000010100000000101100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000001011101011110000001010000011011001000000000000000000000000000000000000000000010000000101010010000001100001011000000110000101100000000000000000000000000000000000100000000110100010100001001110000100100000011010000101000000001011000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000010111010101010000010100000110110010000000000000000000000000000000000000000000100000001011100000000011000010100000001100001010000000000000000000000000000000000001000000001101000101000010011100001001000000110100001010000000010110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000101110001101100000101010001101100100000000000000000000000000000000000000000001000000010101000000000001000101000000000100010110000000000000000000000000000000000010000000000100001010000000100100011010000001000100010100000000101100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100011111000001010100011011001000000000000000000000000000000000000000000010000000101110010000000010001011000000001000101000000000000000000000000000000000000100000000001000010100000001001000110100000010001000101000000001011000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000111110000010100000110110000000000000100000000000000000000000000000000100000001010100100000000100010110000000010001011000000000000000000000000000000000001000000000010000101000000010010001101000000100010001010000000010110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001111100000101000001101100000000000001000000000000000000000000000000001000000010111000000000001000101000000000100010100000000000000000000000000000000000010000000000100001010000000100100011010000001000100010100000000101100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101101111000001010100011011000000000000010000000000000000000000000000000010000000101010000000001010001010000000101000101100000000000000000000000000000000000100000000101100010100000001101000110100000011001000101000000001011000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011011110000010101000110110000000000000100000000000000000000000000000000100000001011100100000010100010110000001010001010000000000000000000000000000000000001000000001011000101000000011010001101000000110010001010000000010110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110111100000101000001101100100000000001000000000000000000000000000000001000000010101001000000101000101100000010100010110000000000000000000000000000000000010000000010110001010000000110100011010000001100100010100000000101100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101101111000001010000011011001000000000010000000000000000000000000000000010000000101110000000001010001010000000101000101000000000000000000000000000000000000100000000101100010100000001101000110100000011001000101000000001011000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001011110000010101000110110010000000000100000000000000000000000000000000100000001010100000000001100010100000000110001011000000000000000000000000000000000001000000000110000101000010010110001101000000100110001010000000010110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110010111100000101010001101100100000000001000000000000000000000000000000001000000010111001000000011000101100000001100010100000000000000000000000000000000000010000000001100001010000100101100011010000001001100010100000000101100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100101111000001010000011011000000000000000000000000100000000000000000000010000000101010010000000110001011000000011000101100000000000000000000000000000000000100000000011000010100001001011000110100000010011000101000000001011000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001011110000010100000110110000000000000000000000001000000000000000000000100000001011100000000001100010100000000110001010000000000000000000000000000000000001000000000110000101000010010110001101000000100110001010000000010110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110100111100000101010001101100000000000000000000000010000000000000000000001000000010101000000000111000101000000011100010110000000000000000000000000000000000010000000011110001010000100111100011010000001101100010100000000101100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101001111000001010100011011000000000000000000000000100000000000000000000010000000101110010000001110001011000000111000101000000000000000000000000000000000000100000000111100010100001001111000110100000011011000101000000001011000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010011110000010100000110110010000000000000000000001000000000000000000000100000001010100100000011100010110000001110001011000000000000000000000000000000000001000000001111000101000010011110001101000000110110001010000000010110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100111100000101000001101100100000000000000000000010000000000000000000001000000010111000000000111000101000000011100010100000000000000000000000000000000000010000000011110001010000100111100011010000001101100010100000000101100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100001111000001010100011011001000000000000000000000100000000000000000000010000000101010000000000001001010000000000100101100000000000000000000000000000000000100000000000010010100000001000100100100000010100100101000000001011000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000011110000010101000110110010000000000000000000001000000000000000000000100000001011100100000000010010110000000001001010000000000000000000000000000000000001000000000000100101000000010001001001000000101001001010000000010110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000111100000101000001101100000000000001000000000010000000000000000000001000000010101001000000000100101100000000010010110000000000000000000000000000000000010000000000001001010000000100010010010000001010010010100000000101100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100001111000001010000011011000000000000010000000000100000000000000000000010000000101110000000000001001010000000000100101000000000000000000000000000000000000100000000000010010100000001000100100100000010100100101000000001011000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011101110000010101000110110000000000000100000000001000000000000000000000100000001010100000000010010010100000001001001011000000000000000000000000000000000001000000001001100101000000011001001001000000111001001010000000010110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110111011100000101010001101100000000000001000000000010000000000000000000001000000010111001000000100100101100000010010010100000000000000000000000000000000000010000000010011001010000000110010010010000001110010010100000000101100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101110111000001010000011011001000000000010000000000100000000000000000000010000000101010010000001001001011000000100100101100000000000000000000000000000000000100000000100110010100000001100100100100000011100100101000000001011000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011101110000010100000110110010000000000100000000001000000000000000000000100000001011100000000010010010100000001001001010000000000000000000000000000000000001000000001001100101000000011001001001000000111001001010000000010110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110011011100000101010001101100100000000001000000000010000000000000000000001000000010101000000000010100101000000001010010110000000000000000000000000000000000010000000001001001010000100101010010010000001011010010100000000101100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100110111000001010100011011001000000000010000000000100000000000000000000010000000101110010000000101001011000000010100101000000000000000000000000000000000000100000000010010010100001001010100100100000010110100101000000001011000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001101110000010100000110110000000000000000000000000000000000010000000000100000001010100100000001010010110000000101001011000000000000000000000000000000000001000000000100100101000010010101001001000000101101001010000000010110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011011100000101000001101100000000000000000000000000000000000100000000001000000010111000000000010100101000000001010010100000000000000000000000000000000000010000000001001001010000100101010010010000001011010010100000000101100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101010111000001010100011011000000000000000000000000000000000001000000000010000000101010000000001101001010000000110100101100000000000000000000000000000000000100000000110110010100001001110100100100000011110100101000000001011000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010101110000010101000110110000000000000000000000000000000000010000000000100000001011100100000011010010110000001101001010000000000000000000000000000000000001000000001101100101000010011101001001000000111101001010000000010110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110101011100000101000001101100100000000000000000000000000000000100000000001000000010101001000000110100101100000011010010110000000000000000000000000000000000010000000011011001010000100111010010010000001111010010100000000101100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101010111000001010000011011001000000000000000000000000000000001000000000010000000101110000000001101001010000000110100101000000000000000000000000000000000000100000000110110010100001001110100100100000011110100101000000001011000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000101110000010101000110110010000000000000000000000000000000010000000000100000001010100000000000110010100000000011001011000000000000000000000000000000000001000000000010100101000000010011001101000000101011001010000000010110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001011100000101010001101100100000000000000000000000000000000100000000001000000010111001000000001100101100000000110010100000000000000000000000000000000000010000000000101001010000000100110011010000001010110010100000000101100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100010111000001010000011011000000000000010000000000000000000001000000000010000000101010010000000011001011000000001100101100000000000000000000000000000000000100000000001010010100000001001100110100000010101100101000000001011000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000101110000010100000110110000000000000100000000000000000000010000000000100000001011100000000000110010100000000011001010000000000000000000000000000000000001000000000010100101000000010011001101000000101011001010000000010110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110011100000101010001101100000000000001000000000000000000000100000000001000000010101000000000101100101000000010110010110000000000000000000000000000000000010000000010111001010000000110110011010000001110110010100000000101100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101100111000001010100011011000000000000010000000000000000000001000000000010000000101110010000001011001011000000101100101000000000000000000000000000000000000100000000101110010100000001101100110100000011101100101000000001011000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011001110000010100000110110010000000000100000000000000000000010000000000100000001010100100000010110010110000001011001011000000000000000000000000000000000001000000001011100101000000011011001101000000111011001010000000010110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110011100000101000001101100100000000001000000000000000000000100000000001000000010111000000000101100101000000010110010100000000000000000000000000000000000010000000010111001010000000110110011010000001110110010100000000101100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100100111000001010100011011001000000000010000000000000000000001000000000010000000101010000000000111001010000000011100101100000000000000000000000000000000000100000000011010010100001001011100110100000010111100101000000001011000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001001110000010101000110110010000000000100000000000000000000010000000000100000001011100100000001110010110000000111001010000000000000000000000000000000000001000000000110100101000010010111001101000000101111001010000000010110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110010011100000101000001101100000000000000000000000010000000000100000000001000000010101001000000011100101100000001110010110000000000000000000000000000000000010000000001101001010000100101110011010000001011110010100000000101100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100100111000001010000011011000000000000000000000000100000000001000000000010000000101110000000000111001010000000011100101000000000000000000000000000000000000100000000011010010100001001011100110100000010111100101000000001011000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010001110000010101000110110000000000000000000000001000000000010000000000100000001010100000000011110010100000001111001011000000000000000000000000000000000001000000001111100101000010011111001101000000111111001010000000010110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100011100000101010001101100000000000000000000000010000000000100000000001000000010111001000000111100101100000011110010100000000000000000000000000000000000010000000011111001010000100111110011010000001111110010100000000101100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101000111000001010000011011001000000000000000000000100000000001000000000010000000101010010000001111001011000000111100101100000000000000000000000000000000000100000000111110010100001001111100110100000011111100101000000001011000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010001110000010100000110110010000000000000000000001000000000010000000000100000001011100000000011110010100000001111001010000000000000000000000000000000000001000000001111100101000010011111001101000000111111001010000000010110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000011100000101010001101100100000000000000000000010000000000100000000001000000010101000000000000010101000000000001010110000000000000000000000000000000000010000000000000101010000000100001010010000001000001010100100000101100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100000111000001010100011011001000000000000000000000100000000001000000000010000000101110010000000000101011000000000010101000000000000000000000000000000000000100000000000001010100000001000010100100000010000010101001000001011000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000001110000010100000110110000000000000100000000001000000000010000000000100000001010100100000000001010110000000000101011000000000000000000000000000000000001000000000000010101000000010000101001000000100000101010010000010110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000011100000101000001101100000000000001000000000010000000000100000000001000000010111000000000000010101000000000001010100000000000000000000000000000000000010000000000000101010000000100001010010000001000001010100100000101100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101111011000001010100011011000000000000010000000000100000000001000000000010000000101010000000001000101010000000100010101100000000000000000000000000000000000100000000100101010100000001100010100100000011000010101001000001011000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011110110000010101000110110000000000000100000000001000000000010000000000100000001011100100000010001010110000001000101010000000000000000000000000000000000001000000001001010101000000011000101001000000110000101010010000010110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110111101100000101000001101100100000000001000000000010000000000100000000001000000010101001000000100010101100000010001010110000000000000000000000000000000000010000000010010101010000000110001010010000001100001010100100000101100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101111011000001010000011011001000000000010000000000100000000001000000000010000000101110000000001000101010000000100010101000000000000000000000000000000000000100000000100101010100000001100010100100000011000010101001000001011000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001110110000010101000110110010000000000100000000001000000000010000000000100000001010100000000001001010100000000100101011000000000000000000000000000000000001000000000100010101000010010100101001000000100100101010010000010110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011101100000101010001101100100000000001000000000010000000000100000000001000000010111001000000010010101100000001001010100000000000000000000000000000000000010000000001000101010000100101001010010000001001001010100100000101100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100111011000001010000011011000000000000000000000000000000000000000000000000000100101010010000000100101011000000010010101100000000000000000000000000000000000100000000010001010100001001010010100100000010010010101001000001011000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001110110000010100000110110000000000000000000000000000000000000000000000000001001011100000000001001010100000000100101010000000000000000000000000000000000001000000000100010101000010010100101001000000100100101010010000010110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110101101100000101010001101100000000000000000000000000000000000000000000000000010010101000000000110010101000000011001010110000000000000000000000000000000000010000000011010101010000100111001010010000001101001010100100000101100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101011011000001010100011011000000000000000000000000000000000000000000000000000100101110010000001100101011000000110010101000000000000000000000000000000000000100000000110101010100001001110010100100000011010010101001000001011000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010110110000010100000110110010000000000000000000000000000000000000000000000001001010100100000011001010110000001100101011000000000000000000000000000000000001000000001101010101000010011100101001000000110100101010010000010110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110101101100000101000001101100100000000000000000000000000000000000000000000000010010111000000000110010101000000011001010100000000000000000000000000000000000010000000011010101010000100111001010010000001101001010100100000101100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100011011000001010100011011001000000000000000000000000000000000000000000000000100101010000000000010101010000000001010101100000000000000000000000000000000000100000000001001010100000001001010110100000010001010101001000001011000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000110110000010101000110110010000000000000000000000000000000000000000000000001001011100100000000101010110000000010101010000000000000000000000000000000000001000000000010010101000000010010101101000000100010101010010000010110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110001101100000101000001101100000000000001000000000000000000000000000000000000010010101001000000001010101100000000101010110000000000000000000000000000000000010000000000100101010000000100101011010000001000101010100100000101100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100011011000001010000011011000000000000010000000000000000000000000000000000000100101110000000000010101010000000001010101000000000000000000000000000000000000100000000001001010100000001001010110100000010001010101001000001011000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011010110000010101000110110000000000000100000000000000000000000000000000000001001010100000000010101010100000001010101011000000000000000000000000000000000001000000001011010101000000011010101101000000110010101010010000010110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110101100000101010001101100000000000001000000000000000000000000000000000000010010111001000000101010101100000010101010100000000000000000000000000000000000010000000010110101010000000110101011010000001100101010100100000101100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101101011000001010000011011001000000000010000000000000000000000000000000000000100101010010000001010101011000000101010101100000000000000000000000000000000000100000000101101010100000001101010110100000011001010101001000001011000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011010110000010100000110110010000000000100000000000000000000000000000000000001001011100000000010101010100000001010101010000000000000000000000000000000000001000000001011010101000000011010101101000000110010101010010000010110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010101100000101010001101100100000000001000000000000000000000000000000000000010010101000000000011010101000000001101010110000000000000000000000000000000000010000000001100101010000100101101011010000001001101010100100000101100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100101011000001010100011011001000000000010000000000000000000000000000000000000100101110010000000110101011000000011010101000000000000000000000000000000000000100000000011001010100001001011010110100000010011010101001000001011000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001010110000010100000110110000000000000000000000001000000000000000000000000001001010100100000001101010110000000110101011000000000000000000000000000000000001000000000110010101000010010110101101000000100110101010010000010110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110010101100000101000001101100000000000000000000000010000000000000000000000000010010111000000000011010101000000001101010100000000000000000000000000000000000010000000001100101010000100101101011010000001001101010100100000101100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101001011000001010100011011000000000000000000000000100000000000000000000000000100101010000000001110101010000000111010101100000000000000000000000000000000000100000000111101010100001001111010110100000011011010101001000001011000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010010110000010101000110110000000000000000000000001000000000000000000000000001001011100100000011101010110000001110101010000000000000000000000000000000000001000000001111010101000010011110101101000000110110101010010000010110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110100101100000101000001101100100000000000000000000010000000000000000000000000010010101001000000111010101100000011101010110000000000000000000000000000000000010000000011110101010000100111101011010000001101101010100100000101100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101001011000001010000011011001000000000000000000000100000000000000000000000000100101110000000001110101010000000111010101000000000000000000000000000000000000100000000111101010100001001111010110100000011011010101001000001011000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000010110000010101000110110010000000000000000000001000000000000000000000000001001010100000000000011010100000000001101011000000000000000000000000000000000001000000000000110101000000010001101001000000101001101010010000010110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000101100000101010001101100100000000000000000000010000000000000000000000000010010111001000000000110101100000000011010100000000000000000000000000000000000010000000000001101010000000100011010010000001010011010100100000101100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100001011000001010000011011000000000000010000000000100000000000000000000000000100101010010000000001101011000000000110101100000000000000000000000000000000000100000000000011010100000001000110100100000010100110101001000001011000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000010110000010100000110110000000000000100000000001000000000000000000000000001001011100000000000011010100000000001101010000000000000000000000000000000000001000000000000110101000000010001101001000000101001101010010000010110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111001100000101010001101100000000000001000000000010000000000000000000000000010010101000000000100110101000000010011010110000000000000000000000000000000000010000000010011101010000000110011010010000001110011010100100000101100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101110011000001010100011011000000000000010000000000100000000000000000000000000100101110010000001001101011000000100110101000000000000000000000000000000000000100000000100111010100000001100110100100000011100110101001000001011000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011100110000010100000110110010000000000100000000001000000000000000000000000001001010100100000010011010110000001001101011000000000000000000000000000000000001000000001001110101000000011001101001000000111001101010010000010110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111001100000101000001101100100000000001000000000010000000000000000000000000010010111000000000100110101000000010011010100000000000000000000000000000000000010000000010011101010000000110011010010000001110011010100100000101100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100110011000001010100011011001000000000010000000000100000000000000000000000000100101010000000000101101010000000010110101100000000000000000000000000000000000100000000010011010100001001010110100100000010110110101001000001011000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001100110000010101000110110010000000000100000000001000000000000000000000000001001011100100000001011010110000000101101010000000000000000000000000000000000001000000000100110101000010010101101001000000101101101010010000010110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011001100000101000001101100000000000000000000000000000000000100000000000000010010101001000000010110101100000001011010110000000000000000000000000000000000010000000001001101010000100101011010010000001011011010100100000101100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100110011000001010000011011000000000000000000000000000000000001000000000000000100101110000000000101101010000000010110101000000000000000000000000000000000000100000000010011010100001001010110100100000010110110101001000001011000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010100110000010101000110110000000000000000000000000000000000010000000000000001001010100000000011011010100000001101101011000000000000000000000000000000000001000000001101110101000010011101101001000000111101101010010000010110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110101001100000101010001101100000000000000000000000000000000000100000000000000010010111001000000110110101100000011011010100000000000000000000000000000000000010000000011011101010000100111011010010000001111011010100100000101100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101010011000001010000011011001000000000000000000000000000000001000000000000000100101010010000001101101011000000110110101100000000000000000000000000000000000100000000110111010100001001110110100100000011110110101001000001011000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010100110000010100000110110010000000000000000000000000000000010000000000000001001011100000000011011010100000001101101010000000000000000000000000000000000001000000001101110101000010011101101001000000111101101010010000010110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001001100000101010001101100100000000000000000000000000000000100000000000000010010101000000000001110101000000000111010110000000000000000000000000000000000010000000000101101010000000100111011010000001010111010100100000101100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100010011000001010100011011001000000000000000000000000000000001000000000000000100101110010000000011101011000000001110101000000000000000000000000000000000000100000000001011010100000001001110110100000010101110101001000001011000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000100110000010100000110110000000000000100000000000000000000010000000000000001001010100100000000111010110000000011101011000000000000000000000000000000000001000000000010110101000000010011101101000000101011101010010000010110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001001100000101000001101100000000000001000000000000000000000100000000000000010010111000000000001110101000000000111010100000000000000000000000000000000000010000000000101101010000000100111011010000001010111010100100000101100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101100011000001010100011011000000000000010000000000000000000001000000000000000100101010000000001011101010000000101110101100000000000000000000000000000000000100000000101111010100000001101110110100000011101110101001000001011000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011000110000010101000110110000000000000100000000000000000000010000000000000001001011100100000010111010110000001011101010000000000000000000000000000000000001000000001011110101000000011011101101000000111011101010010000010110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110001100000101000001101100100000000001000000000000000000000100000000000000010010101001000000101110101100000010111010110000000000000000000000000000000000010000000010111101010000000110111011010000001110111010100100000101100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101100011000001010000011011001000000000010000000000000000000001000000000000000100101110000000001011101010000000101110101000000000000000000000000000000000000100000000101111010100000001101110110100000011101110101001000001011000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001000110000010101000110110010000000000100000000000000000000010000000000000001001010100000000001111010100000000111101011000000000000000000000000000000000001000000000110110101000010010111101101000000101111101010010000010110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010001100000101010001101100100000000001000000000000000000000100000000000000010010111001000000011110101100000001111010100000000000000000000000000000000000010000000001101101010000100101111011010000001011111010100100000101100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100100011000001010000011011000000000000000000000000100000000001000000000000000100101010010000000111101011000000011110101100000000000000000000000000000000000100000000011011010100001001011110110100000010111110101001000001011000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001000110000010100000110110000000000000000000000001000000000010000000000000001001011100000000001111010100000000111101010000000000000000000000000000000000001000000000110110101000010010111101101000000101111101010010000010110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100001100000101010001101100000000000000000000000010000000000100000000000000010010101000000000111110101000000011111010110000000000000000000000000000000000010000000011111101010000100111111011010000001111111010100100000101100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101000011000001010100011011000000000000000000000000100000000001000000000000000100101110010000001111101011000000111110101000000000000000000000000000000000000100000000111111010100001001111110110100000011111110101001000001011000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010000110000010100000110110010000000000000000000001000000000010000000000000001001010100100000011111010110000001111101011000000000000000000000000000000000001000000001111110101000010011111101101000000111111101010010000010110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100001100000101000001101100100000000000000000000010000000000100000000000000010010111000000000111110101000000011111010100000000000000000000000000000000000010000000011111101010000100111111011010000001111111010100100000101100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100000011000001010100011011001000000000000000000000100000000001000000000000000100101010000000000000011010000000000001101100000000000000000000000000000000000100000000000000110100000001000001100100000010000001101000000011011000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000000110000010101000110110010000000000000000000001000000000010000000000000001001011100100000000000110110000000000011010000000000000000000000000000000000001000000000000001101000000010000011001000000100000011010000000110110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000001100000101000001101100000000000001000000000010000000000100000000000000010010101001000000000001101100000000000110110000000000000000000000000000000000010000000000000011010000000100000110010000001000000110100000001101100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100000011000001010000011011000000000000010000000000100000000001000000000000000100101110000000000000011010000000000001101000000000000000000000000000000000000100000000000000110100000001000001100100000010000001101000000011011000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011111010000010101000110110000000000000100000000001000000000010000000000000001001010100000000010000110100000001000011011000000000000000000000000000000000001000000001001001101000000011000011001000000110000011010000000110110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111110100000101010001101100000000000001000000000010000000000100000000000000010010111001000000100001101100000010000110100000000000000000000000000000000000010000000010010011010000000110000110010000001100000110100000001101100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101111101000001010000011011001000000000010000000000100000000001000000000000000100101010010000001000011011000000100001101100000000000000000000000000000000000100000000100100110100000001100001100100000011000001101000000011011000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011111010000010100000110110010000000000100000000001000000000010000000000000001001011100000000010000110100000001000011010000000000000000000000000000000000001000000001001001101000000011000011001000000110000011010000000110110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011110100000101010001101100100000000001000000000010000000000100000000000000010010101000000000010001101000000001000110110000000000000000000000000000000000010000000001000011010000100101000110010000001001000110100000001101100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100111101000001010100011011001000000000010000000000100000000001000000000000000100101110010000000100011011000000010001101000000000000000000000000000000000000100000000010000110100001001010001100100000010010001101000000011011000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001111010000010100000110110000000000000000000000000000000000000000000000100001001010100100000001000110110000000100011011000000000000000000000000000000000001000000000100001101000010010100011001000000100100011010000000110110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110011110100000101000001101100000000000000000000000000000000000000000000001000010010111000000000010001101000000001000110100000000000000000000000000000000000010000000001000011010000100101000110010000001001000110100000001101100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101011101000001010100011011000000000000000000000000000000000000000000000010000100101010000000001100011010000000110001101100000000000000000000000000000000000100000000110100110100001001110001100100000011010001101000000011011000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010111010000010101000110110000000000000000000000000000000000000000000000100001001011100100000011000110110000001100011010000000000000000000000000000000000001000000001101001101000010011100011001000000110100011010000000110110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110101110100000101000001101100100000000000000000000000000000000000000000001000010010101001000000110001101100000011000110110000000000000000000000000000000000010000000011010011010000100111000110010000001101000110100000001101100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101011101000001010000011011001000000000000000000000000000000000000000000010000100101110000000001100011010000000110001101000000000000000000000000000000000000100000000110100110100001001110001100100000011010001101000000011011000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000111010000010101000110110010000000000000000000000000000000000000000000100001001010100000000000100110100000000010011011000000000000000000000000000000000001000000000010001101000000010010011101000000100010011010000000110110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001110100000101010001101100100000000000000000000000000000000000000000001000010010111001000000001001101100000000100110100000000000000000000000000000000000010000000000100011010000000100100111010000001000100110100000001101100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100011101000001010000011011000000000000010000000000000000000000000000000010000100101010010000000010011011000000001001101100000000000000000000000000000000000100000000001000110100000001001001110100000010001001101000000011011000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000111010000010100000110110000000000000100000000000000000000000000000000100001001011100000000000100110100000000010011010000000000000000000000000000000000001000000000010001101000000010010011101000000100010011010000000110110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110110100000101010001101100000000000001000000000000000000000000000000001000010010101000000000101001101000000010100110110000000000000000000000000000000000010000000010110011010000000110100111010000001100100110100000001101100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101101101000001010100011011000000000000010000000000000000000000000000000010000100101110010000001010011011000000101001101000000000000000000000000000000000000100000000101100110100000001101001110100000011001001101000000011011000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011011010000010100000110110010000000000100000000000000000000000000000000100001001010100100000010100110110000001010011011000000000000000000000000000000000001000000001011001101000000011010011101000000110010011010000000110110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110110100000101000001101100100000000001000000000000000000000000000000001000010010111000000000101001101000000010100110100000000000000000000000000000000000010000000010110011010000000110100111010000001100100110100000001101100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100101101000001010100011011001000000000010000000000000000000000000000000010000100101010000000000110011010000000011001101100000000000000000000000000000000000100000000011000110100001001011001110100000010011001101000000011011000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001011010000010101000110110010000000000100000000000000000000000000000000100001001011100100000001100110110000000110011010000000000000000000000000000000000001000000000110001101000010010110011101000000100110011010000000110110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110010110100000101000001101100000000000000000000000010000000000000000000001000010010101001000000011001101100000001100110110000000000000000000000000000000000010000000001100011010000100101100111010000001001100110100000001101100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100101101000001010000011011000000000000000000000000100000000000000000000010000100101110000000000110011010000000011001101000000000000000000000000000000000000100000000011000110100001001011001110100000010011001101000000011011000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010011010000010101000110110000000000000000000000001000000000000000000000100001001010100000000011100110100000001110011011000000000000000000000000000000000001000000001111001101000010011110011101000000110110011010000000110110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110100110100000101010001101100000000000000000000000010000000000000000000001000010010111001000000111001101100000011100110100000000000000000000000000000000000010000000011110011010000100111100111010000001101100110100000001101100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101001101000001010000011011001000000000000000000000100000000000000000000010000100101010010000001110011011000000111001101100000000000000000000000000000000000100000000111100110100001001111001110100000011011001101000000011011000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010011010000010100000110110010000000000000000000001000000000000000000000100001001011100000000011100110100000001110011010000000000000000000000000000000000001000000001111001101000010011110011101000000110110011010000000110110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000110100000101010001101100100000000000000000000010000000000000000000001000010010101000000000000101101000000000010110110000000000000000000000000000000000010000000000001011010000000100010110010000001010010110100000001101100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100001101000001010100011011001000000000000000000000100000000000000000000010000100101110010000000001011011000000000101101000000000000000000000000000000000000100000000000010110100000001000101100100000010100101101000000011011000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000011010000010100000110110000000000000100000000001000000000000000000000100001001010100100000000010110110000000001011011000000000000000000000000000000000001000000000000101101000000010001011001000000101001011010000000110110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000110100000101000001101100000000000001000000000010000000000000000000001000010010111000000000000101101000000000010110100000000000000000000000000000000000010000000000001011010000000100010110010000001010010110100000001101100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101110101000001010100011011000000000000010000000000100000000000000000000010000100101010000000001001011010000000100101101100000000000000000000000000000000000100000000100110110100000001100101100100000011100101101000000011011000000000001110000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001100000000000000000000000000000000000111011101010000010101000110110000000000000100000000001000000000000000000000100001001011100100000010010110110000001001011010000000000000000000000000000000000001000000001001101101000000011001011001000000111001011010000000110110000000000010100000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010001000000000000000000000000000000000001110111010100000101000001101100100000000001000000000010000000000000000000001000010010101001000000100101101100000010010110110000000000000000000000000000000000010000000010011011010000000110010110010000001110010110100000001101100000000000101000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100010000000000000000000000000000000000011101110101000001010000011011001000000000010000000000100000000000000000000010000100101110000000001001011010000000100101101000000000000000000000000000000000000100000000100110110100000001100101100100000011100101101000000011011000000000001110000000000100000000000000000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000000000000000000111001101010000010101000110110010000000000100000000001000000000000000000000100001001010100000000001010110100000000101011011000000000000000000000000000000000001000000000100101101000010010101011001000000101101011010000000110110000000000011100000000001000000000000000000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000000000000000001110011010100000101010001101100100000000001000000000010000000000000000000001000010010111001000000010101101100000001010110100000000000000000000000000000000000010000000001001011010000100101010110010000001011010110100000001101100000000000111000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001000000000000011100110101000001010000011011000000000000000000000000000000000001000000000010000100101010010000000101011011000000010101101100000000000000000000000000000000000100000000010010110100001001010101100100000010110101101000000011011000000000001110000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010000000000000111001101010000010100000110110000000000000000000000000000000000010000000000100001001011100000000001010110100000000101011010000000000000000000000000000000000001000000000100101101000010010101011001000000101101011010000000110110000000000011100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100000000000001110101010100000101010001101100000000000000000000000000000000000100000000001000010010101000000000110101101000000011010110110000000000000000000000000000000000010000000011011011010000100111010110010000001111010110100000001101100000000000101000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001000000000000011101010101000001010100011011000000000000000000000000000000000001000000000010000100101110010000001101011011000000110101101000000000000000000000000000000000000100000000110110110100001001110101100100000011110101101000000011011000000000001010000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010000000000000111010101010000010100000110110010000000000000000000000000000000010000000000100001001010100100000011010110110000001101011011000000000000000000000000000000000001000000001101101101000010011101011001000000111101011010000000110110000000000010100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100000000000001110101010100000101000001101100100000000000000000000000000000000100000000001000010010111000000000110101101000000011010110100000000000000000000000000000000000010000000011011011010000100111010110010000001111010110100000001101100000000000101000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001000000000000011100010101000001010100011011001000000000000000000000000000000001000000000010000100101010000000000011011010000000001101101100000000000000000000000000000000000100000000001010110100000001001101110100000010101101101000000011011000000000001110000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010000000000000111000101010000010101000110110010000000000000000000000000000000010000000000100001001011100100000000110110110000000011011010000000000000000000000000000000000001000000000010101101000000010011011101000000101011011010000000110110000000000011100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100000000000001110001010100000101000001101100000000000001000000000000000000000100000000001000010010101001000000001101101100000000110110110000000000000000000000000000000000010000000000101011010000000100110111010000001010110110100000001101100000000000111000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001000000000000011100010101000001010000011011000000000000010000000000000000000001000000000010000100101110000000000011011010000000001101101000000000000000000000000000000000000100000000001010110100000001001101110100000010101101101000000011011000000000001110000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010000000000000111011001010000010101000110110000000000000100000000000000000000010000000000100001001010100000000010110110100000001011011011000000000000000000000000000000000001000000001011101101000000011011011101000000111011011010000000110110000000000011100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100000000000001110110010100000101010001101100000000000001000000000000000000000100000000001000010010111001000000101101101100000010110110100000000000000000000000000000000000010000000010111011010000000110110111010000001110110110100000001101100000000000111000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001000000000000011101100101000001010000011011001000000000010000000000000000000001000000000010000100101010010000001011011011000000101101101100000000000000000000000000000000000100000000101110110100000001101101110100000011101101101000000011011000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111011001010000010100000110110010000000000100000000000000000000010000000000100001001011100000000010110110100000001011011010000000000000000000000000000000000001000000001011101101000000011011011101000000111011011010000000110110000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110010010100000101010001101100100000000001000000000000000000000100000000001000010010101000000000011101101000000001110110110000000000000000000000000000000000010000000001101011010000100101110111010000001011110110100000001101100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011100100101000001010100011011001000000000010000000000000000000001000000000010000100101110010000000111011011000000011101101000000000000000000000000000000000000100000000011010110100001001011101110100000010111101101000000011011000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111001001010000010100000110110000000000000000000000001000000000010000000000100001001010100100000001110110110000000111011011000000000000000000000000000000000001000000000110101101000010010111011101000000101111011010000000110110000000000010100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100100000000001110010010100000101000001101100000000000000000000000010000000000100000000001000010010111000000000011101101000000001110110100000000000000000000000000000000000010000000001101011010000100101110111010000001011110110100000001101100000000000101000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001000000000011101000101000001010100011011000000000000000000000000100000000001000000000010000100101010000000001111011010000000111101101100000000000000000000000000000000000100000000111110110100001001111101110100000011111101101000000011011000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111010001010000010101000110110000000000000000000000001000000000010000000000100001001011100100000011110110110000001111011010000000000000000000000000000000000001000000001111101101000010011111011101000000111111011010000000110110000000000010100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100100000000001110100010100000101000001101100100000000000000000000010000000000100000000001000010010101001000000111101101100000011110110110000000000000000000000000000000000010000000011111011010000100111110111010000001111110110100000001101100000000000101000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001000000000011101000101000001010000011011001000000000000000000000100000000001000000000010000100101110000000001111011010000000111101101000000000000000000000000000000000000100000000111110110100001001111101110100000011111101101000000011011000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111000001010000010101000110110010000000000000000000001000000000010000000000100001001010100000000000001110100000000000111011000000000000000000000000000000000001000000000000011101000000010000111001000000100000111010010000110110000000000010100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100100000000001110000010100000101010001101100100000000000000000000010000000000100000000001000010010111001000000000011101100000000001110100000000000000000000000000000000000010000000000000111010000000100001110010000001000001110100100001101100000000000101000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001000000000011100000101000001010000011011000000000000010000000000100000000001000000000010000100101010010000000000111011000000000011101100000000000000000000000000000000000100000000000001110100000001000011100100000010000011101001000011011000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111000001010000010100000110110000000000000100000000001000000000010000000000100001001011100000000000001110100000000000111010000000000000000000000000000000000001000000000000011101000000010000111001000000100000111010010000110110000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110111100100000101010001101100000000000001000000000010000000000100000000001000010010101000000000100011101000000010001110110000000000000000000000000000000000010000000010010111010000000110001110010000001100001110100100001101100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011101111001000001010100011011000000000000010000000000100000000001000000000010000100101110010000001000111011000000100011101000000000000000000000000000000000000100000000100101110100000001100011100100000011000011101001000011011000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111011110010000010100000110110010000000000100000000001000000000010000000000100001001010100100000010001110110000001000111011000000000000000000000000000000000001000000001001011101000000011000111001000000110000111010010000110110000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110111100100000101000001101100100000000001000000000010000000000100000000001000010010111000000000100011101000000010001110100000000000000000000000000000000000010000000010010111010000000110001110010000001100001110100100001101100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011100111001000001010100011011001000000000010000000000100000000001000000000010000100101010000000000100111010000000010011101100000000000000000000000000000000000100000000010001110100001001010011100100000010010011101001000011011000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111001110010000010101000110110010000000000100000000001000000000010000000000100001001011100100000001001110110000000100111010000000000000000000000000000000000001000000000100011101000010010100111001000000100100111010010000110110000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110011100100000101000001101100000000000000000000000000000000000000000000000000001010101001000000010011101100000001001110110000000000000000000000000000000000010000000001000111010000100101001110010000001001001110100100001101100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011100111001000001010000011011000000000000000000000000000000000000000000000000000010101110000000000100111010000000010011101000000000000000000000000000000000000100000000010001110100001001010011100100000010010011101001000011011000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111010110010000010101000110110000000000000000000000000000000000000000000000000000101010100000000011001110100000001100111011000000000000000000000000000000000001000000001101011101000010011100111001000000110100111010010000110110000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110101100100000101010001101100000000000000000000000000000000000000000000000000001010111001000000110011101100000011001110100000000000000000000000000000000000010000000011010111010000100111001110010000001101001110100100001101100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011101011001000001010000011011001000000000000000000000000000000000000000000000000010101010010000001100111011000000110011101100000000000000000000000000000000000100000000110101110100001001110011100100000011010011101001000011011000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111010110010000010100000110110010000000000000000000000000000000000000000000000000101011100000000011001110100000001100111010000000000000000000000000000000000001000000001101011101000010011100111001000000110100111010010000110110000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110001100100000101010001101100100000000000000000000000000000000000000000000000001010101000000000001011101000000000101110110000000000000000000000000000000000010000000000100111010000000100101111010000001000101110100100001101100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011100011001000001010100011011001000000000000000000000000000000000000000000000000010101110010000000010111011000000001011101000000000000000000000000000000000000100000000001001110100000001001011110100000010001011101001000011011000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111000110010000010100000110110000000000000100000000000000000000000000000000000000101010100100000000101110110000000010111011000000000000000000000000000000000001000000000010011101000000010010111101000000100010111010010000110110000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110001100100000101000001101100000000000001000000000000000000000000000000000000001010111000000000001011101000000000101110100000000000000000000000000000000000010000000000100111010000000100101111010000001000101110100100001101100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011101101001000001010100011011000000000000010000000000000000000000000000000000000010101010000000001010111010000000101011101100000000000000000000000000000000000100000000101101110100000001101011110100000011001011101001000011011000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111011010010000010101000110110000000000000100000000000000000000000000000000000000101011100100000010101110110000001010111010000000000000000000000000000000000001000000001011011101000000011010111101000000110010111010010000110110000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110110100100000101000001101100100000000001000000000000000000000000000000000000001010101001000000101011101100000010101110110000000000000000000000000000000000010000000010110111010000000110101111010000001100101110100100001101100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011101101001000001010000011011001000000000010000000000000000000000000000000000000010101110000000001010111010000000101011101000000000000000000000000000000000000100000000101101110100000001101011110100000011001011101001000011011000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111001010010000010101000110110010000000000100000000000000000000000000000000000000101010100000000001101110100000000110111011000000000000000000000000000000000001000000000110011101000010010110111101000000100110111010010000110110000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110010100100000101010001101100100000000001000000000000000000000000000000000000001010111001000000011011101100000001101110100000000000000000000000000000000000010000000001100111010000100101101111010000001001101110100100001101100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011100101001000001010000011011000000000000000000000000100000000000000000000000000010101010010000000110111011000000011011101100000000000000000000000000000000000100000000011001110100001001011011110100000010011011101001000011011000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111001010010000010100000110110000000000000000000000001000000000000000000000000000101011100000000001101110100000000110111010000000000000000000000000000000000001000000000110011101000010010110111101000000100110111010010000110110000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110100100100000101010001101100000000000000000000000010000000000000000000000000001010101000000000111011101000000011101110110000000000000000000000000000000000010000000011110111010000100111101111010000001101101110100100001101100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011101001001000001010100011011000000000000000000000000100000000000000000000000000010101110010000001110111011000000111011101000000000000000000000000000000000000100000000111101110100001001111011110100000011011011101001000011011000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111010010010000010100000110110010000000000000000000001000000000000000000000000000101010100100000011101110110000001110111011000000000000000000000000000000000001000000001111011101000010011110111101000000110110111010010000110110000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110100100100000101000001101100100000000000000000000010000000000000000000000000001010111000000000111011101000000011101110100000000000000000000000000000000000010000000011110111010000100111101111010000001101101110100100001101100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011100001001000001010100011011001000000000000000000000100000000000000000000000000010101010000000000001111010000000000111101100000000000000000000000000000000000100000000000011110100000001000111100100000010100111101001000011011000000000001110000000000100100000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001001000000010011000000000111000010010000010101000110110010000000000000000000001000000000000000000000000000101011100100000000011110110000000001111010000000000000000000000000000000000001000000000000111101000000010001111001000000101001111010010000110110000000000011100000000001001000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010010000000100110000000001110000100100000101000001101100000000000001000000000010000000000000000000000000001010101001000000000111101100000000011110110000000000000000000000000000000000010000000000001111010000000100011110010000001010011110100100001101100000000000111000000000010010000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100100000001001100000000011100001001000001010000011011000000000000010000000000100000000000000000000000000010101110000000000001111010000000000111101000000000000000000000000000000000000100000000000011110100000001000111100100000010100111101001000011011000000000001010000000000100100000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001001000000010011000000000111011100010000010101000110110000000000000100000000001000000000000000000000000000101010100000000010011110100000001001111011000000000000000000000000000000000001000000001001111101000000011001111001000000111001111010010000110110000000000010100000000001001000000010011100000000010111000000000000000000000000000000000000000000000000000000010001000000000010010000000100111000000001110111000100000101010001101100000000000001000000000010000000000000000000000000001010111001000000100111101100000010011110100000000000000000000000000000000000010000000010011111010000000110011110010000001110011110100100001101100000000000101000000000010010000000100111000000000101110000000000000000000000000000000000000000000000000000000100010000000000100100000001001110000000011101110001000001010000011011001000000000010000000000100000000000000000000000000010101010010000001001111011000000100111101100000000000000000000000000000000000100000000100111110100000001100111100100000011100111101001000011011000000000001010100100000100100000001001110001000001011100000000000000000000000000000000000000000000000000000001000101001000001001000000010011100010000111011100010000010100000110110010000000000100000000001000000000000000000000000000101011100000000010011110100000001001111010000000000000000000000000000000000001000000001001111101000000011001111001000000111001111010010000110110000000000011101001000001001000000010011100010000010111000000000000000000000000000000000000000000000000000000010011010010000010010000000100111000100001110011000100000101010001101100100000000001000000000010000000000000000000000000001010101000000000010111101000000001011110110000000000000000000000000000000000010000000001001111010000100101011110010000001011011110100100001101100000000000111010010000010010000000100111000100000001110000000000000000000000000000000000000000000000000000000100110100100000100100000001001110001000011100110001000001010100011011001000000000010000000000100000000000000000000000000010101110010000000101111011000000010111101000000000000000000000000000000000000100000000010011110100001001010111100100000010110111101001000011011000000000001110100100000100100000001001110001000000011100000000000000000000000000000000000000000000000000001001001101001000001001000000010011100010000111001100010000010100000110110000000000000000000000000000000000010000000000000000101010100100000001011110110000000101111011000000000000000000000000000000000001000000000100111101000010010101111001000000101101111010010000110110000000000011101001000001001000000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000010010000000100111010100001110011000100000101000001101100000000000000000000000000000000000100000000000000001010111000000000010111101000000001011110100000000000000000000000000000000000010000000001001111010000100101011110010000001011011110100100001101100000000000101010010000010010000000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000100100000001001110101000011101010001000001010100011011000000000000000000000000000000000001000000000000000010101010000000001101111010000000110111101100000000000000000000000000000000000100000000110111110100001001110111100100000011110111101001000011011000000000001110100100000100100000001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001000000010011101010000111010100010000010101000110110000000000000000000000000000000000010000000000000000101011100100000011011110110000001101111010000000000000000000000000000000000001000000001101111101000010011101111001000000111101111010010000110110000000000011101001000001001000000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000010010000000100111010100001110101000100000101000001101100100000000000000000000000000000000100000000000000001010101001000000110111101100000011011110110000000000000000000000000000000000010000000011011111010000100111011110010000001111011110100100001101100000000000111010010000010010000000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000100100000001001110101000011101010001000001010000011011001000000000000000000000000000000001000000000000000010101110000000001101111010000000110111101000000000000000000000000000000000000100000000110111110100001001110111100100000011110111101001000011011000000000001010100100000100100000001001110101000000011100000000000000000000000000000000000000000000000000000001000101001000001001000000010011101010000111000100010000010101000110110010000000000000000000000000000000010000000000000000101010100000000000111110100000000011111011000000000000000000000000000000000001000000000010111101000000010011111101000000101011111010010000110110000000000011101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000010011010000100111010100001110001000100000101010001101100100000000000000000000000000000000100000000000000001010111001000000001111101100000000111110100000000000000000000000000000000000010000000000101111010000000100111111010000001010111110100100001101100000000000111010010000010011010000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000100110100001001110101000011100010001000001010000011011000000000000010000000000000000000001000000000000000010101010010000000011111011000000001111101100000000000000000000000000000000000100000000001011110100000001001111110100000010101111101001000011011000000000001110100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001101000010011101010000111000100010000010100000110110000000000000100000000000000000000010000000000000000101011100000000000111110100000000011111010000000000000000000000000000000000001000000000010111101000000010011111101000000101011111010010000110110000000000010101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010000010011010000100111010100001110110000100000101010001101100000000000001000000000000000000000100000000000000001010101000000000101111101000000010111110110000000000000000000000000000000000010000000010111111010000000110111111010000001110111110100100001101100000000000101010010000010011010000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000100110100001001110101000011101100001000001010100011011000000000000010000000000000000000001000000000000000010101110010000001011111011000000101111101000000000000000000000000000000000000100000000101111110100000001101111110100000011101111101001000011011000000000001010100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001000101001000001001101000010011101010000111011000010000010100000110110010000000000100000000000000000000010000000000000000101010100100000010111110110000001011111011000000000000000000000000000000000001000000001011111101000000011011111101000000111011111010010000110110000000000011101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000010011010000100111010100001110110000100000101000001101100100000000001000000000000000000000100000000000000001010111000000000101111101000000010111110100000000000000000000000000000000000010000000010111111010000000110111111010000001110111110100100001101100000000000111010010000010011010000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000100110100001001110101000011100100001000001010100011011001000000000010000000000000000000001000000000000000010101010000000000111111010000000011111101100000000000000000000000000000000000100000000011011110100001001011111110100000010111111101001000011011000000000001110100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001101000010011101010000111001000010000010101000110110010000000000100000000000000000000010000000000000000101011100100000001111110110000000111111010000000000000000000000000000000000001000000000110111101000010010111111101000000101111111010010000110110000000000011101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000010011010000100111010100001110010000100000101000001101100000000000000000000000010000000000100000000000000001010101001000000011111101100000001111110110000000000000000000000000000000000010000000001101111010000100101111111010000001011111110100100001101100000000000111010010000011011010000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000110110100001001110101000011100100001000001010000011011000000000000000000000000100000000001000000000000000010101110000000000111111010000000011111101000000000000000000000000000000000000100000000011011110100001001011111110100000010111111101001000011011000000000001110100100000110110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001101101000010011101010000111010000010000010101000110110000000000000000000000001000000000010000000000000000101010100000000011111110100000001111111011000000000000000000000000000000000001000000001111111101000010011111111101000000111111111010010000110110000000000011101001000001101101000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000011011010000100111010100001110100000100000101010001101100000000000000000000000010000000000100000000000000001010111001000000111111101100000011111110100000000000000000000000000000000000010000000011111111010000100111111111010000001111111110100100001101100000000000111010010100011011010000100111010100000001110000000000000000000000000000000000000000000000000000000100110100101000110110100001001110101000011101000001000001010000011011001000000000000000000000100000000001000000000000000010101010010000001111111011000000111111101100000000000000000000000000000000000100000000111111110100001001111111110100000011111111101001000011011000000000001110100101000110110110001001110101000000011100000000000000000000000000000000000000000000000000000001001101001010001101101100010011101010000111010000010000010100000110110010000000000000000000001000000000010000000000000000101011100000000011111110100000001111111010000000000000000000000000000000000001000000001111111101000010011111111101000000111111111010010000110110000000000011101001010001101101100010011101010000000111000000000000000000000000000000000000000000000000000000010011010010100011011011000100111010100001110000000100000101010001101100100000000000000000000010000000000100000000000000001010101000000000000000011000000000000001110000000000000000000000000000000000010000000000000000110000000100000000110000001000000001100000000011100000000000111010010100011011011000100111010100000001110000000000000000000000000000000000000000000000000000000100110100101000110110110001001110101000011100000001000001010100011011001000000000000000000000100000000001000000000000000010101110010000000000000111000000000000011000000000000000000000000000000000000100000000000000001100000001000000001100000010000000011000000000111000000000001110100101000110111110001001110101000000011100000000000000000000000000000000000000000000000000000001001101001010001101111100010011101010000111000000010000010100000110110000000000000100000000001000000000010000000000000000101010100100000000000001110000000000000111000000000000000000000000000000000001000000000000000011000000010000000011000000100000000110000000001110000000000010101101010001101111100010011101010000000111000000000000000000000000000000000000000000000000000000010001011010100011011111000100111010100001110000000100000101000001101100000000000001000000000010000000000100000000000000001010111000000000000000011000000000000001100000000000000000000000000000000000010000000000000000110000000100000000110000001000000001100000000011100000000000101011010100111011111000100111010100000001110000000000000000000000000000000000000000000000000000000100010110101001110111110001001110101000011101111110000001010100011011000000000000010000000000100000000001000000000000000010101010000000001000000110000000100000011100000000000000000000000000000000000100000000100100001100000001100000001100000011000000011000000000111000000000001010110101011110111110001001110101000000011100000000000000000000000000000000000000000000000000000001000101101010111101111100010011101010000111011111100000010101000110110000000000000100000000001000000000010000000000000000101011100100000010000001110000001000000110000000000000000000000000000000000001000000001001000011000000011000000011000000110000000110000000001110000000000010101101110111101111100010011111010000000111000000000000000000000000000000000000000000000000000000010001011011101111011111000100111110100001110111111000000101000001101100100000000001000000000010000000000100000000000000001010101001000000100000011100000010000001110000000000000000000000000000000000010000000010010000110000000110000000110000001100000001100000000011100000000000101011011101111011111000100111110100000001110000000000000000000000000000000000000000000000000000000100010110111011110111110001001111101000011101111110000001010000011011001000000000010000000000100000000001000000000000000010101110000000001000000110000000100000011000000000000000000000000000000000000100000000100100001100000001100000001100000011000000011000000000111000000000001010111111011110111110001001111111000000011100000000000000000000000000000000000000000000000000000001000101111110111101111100010011111110000111001111100000010101000110110010000000000100000000001000000000010000000000000000101010100000000001000001100000000100000111000000000000000000000000000000000001000000000100000011000010010100000011000000100100000110000000001110000000000011101111110111101111110010011111110000000111000000000000000000000000000000000000000000000000000000010011011111101111011111100100111111100001110011111000000101010001101100100000000001000000000010000000000100000000000000001010111001000000010000011100000001000001100000000000000000000000000000000000010000000001000000110000100101000000110000001001000001100000000011100000000000111011111101111011111100100111111100000001110000000000000000000000000000000000000000000000000000000100110111111011110111111001001111111000011100111110000001010000011011000000000000000000000000000000000000000000000010000010101010010000000100000111000000010000011100000000000000000000000000000000000100000000010000001100001001010000001100000010010000011000000000111000000000001110111111011110111111001001111111000000011100000000000000000000000000000000000000000000000000000001001101111110111101111110010011111110000111001111100000010100000110110000000000000000000000000000000000000000000000100000101011100000000001000001100000000100000110000000000000000000000000000000000001000000000100000011000010010100000011000000100100000110000000001110000000000011111111110111101111110010011111110000000111000000000000000000000000000000000000000000000000000000010011111111101111011111100100111111100001110101111000000101010001101100000000000000000000000000000000000000000000001000001010101000000000110000011000000011000001110000000000000000000000000000000000010000000011010000110000100111000000110000001101000001100000000011100000000000111111111101111011111100100111111100000001110000000000000000000000000000000000000000000000000000000100111111111011110111111001001111111000011101011110000001010100011011000000000000000000000000000000000000000000000010000010101110010000001100000111000000110000011000000000000000000000000000000000000100000000110100001100001001110000001100000011010000011000000000111000000000001111111111011110111111001001111111000000011100000000000000000000000000000000000000000000000000000001001111111110111101111110010011111110000111010111100000010100000110110010000000000000000000000000000000000000000000100000101010100100000011000001110000001100000111000000000000000000000000000000000001000000001101000011000010011100000011000000110100000110000000001110000000000011111111110111101111110010011111110000000111000000000000000000000000000000000000000000000000000000010011111111101111011111100100111111100001110101111000000101000001101100100000000000000000000000000000000000000000001000001010111000000000110000011000000011000001100000000000000000000000000000000000010000000011010000110000100111000000110000001101000001100000000011100000000000101111111101111011111100100111111100000001110000000000000000000000000000000000000000000000000000000100011111111011110111111001001111111000011100011110000001010100011011001000000000000000000000000000000000000000000010000010101010000000000010000110000000001000011100000000000000000000000000000000000100000000001000001100000001001000011100000010001000011000000000111000000000001011111111011110111111001101111111000000011100000000000000000000000000000000000000000000000000000001000111111110111101111110011011111110000111000111100000010101000110110010000000000000000000000000000000000000000000100000101011100100000000100001110000000010000110000000000000000000000000000000000001000000000010000011000000010010000111000000100010000110000000001110000000000010111111110111101111110011011111110000000111000000000000000000000000000000000000000000000000000000010001111111101111011111100110111111100001110001111000000101000001101100000000000001000000000000000000000000000000001000001010101001000000001000011100000000100001110000000000000000000000000000000000010000000000100000110000000100100001110000001000100001100000000011100000000000101111111101111011111100110111111100000001110000000000000000000000000000000000000000000000000000000100011111111011110111111001101111111000011100011110000001010000011011000000000000010000000000000000000000000000000010000010101110000000000010000110000000001000011000000000000000000000000000000000000100000000001000001100000001001000011100000010001000011000000000111000000000001011111111011110111111001101111111000000011100000000000000000000000000000000000000000000000000000001000111111110111101111110011011111110000111011011100000010101000110110000000000000100000000000000000000000000000000100000101010100000000010100001100000001010000111000000000000000000000000000000000001000000001011000011000000011010000111000000110010000110000000001110000000000010111111110111101111110011011111110000000111000000000000000000000000000000000000000000000000000000010001111111101111011111100110111111100001110110111000000101010001101100000000000001000000000000000000000000000000001000001010111001000000101000011100000010100001100000000000000000000000000000000000010000000010110000110000000110100001110000001100100001100000000011100000000000111111111101111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111011111111111001101111111000011101101110000001010000011011001000000000010000000000000000000000000000000010000010101010010000001010000111000000101000011100000000000000000000000000000000000100000000101100001100000001101000011100000011001000011000000000111000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111011011100000010100000110110010000000000100000000000000000000000000000000100000101011100000000010100001100000001010000110000000000000000000000000000000000001000000001011000011000000011010000111000000110010000110000000001110000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110010111000000101010001101100100000000001000000000000000000000000000000001000001010101000000000011000011000000001100001110000000000000000000000000000000000010000000001100000110000100101100001110000001001100001100000000011100000000000111111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111001101111111000011100101110000001010100011011001000000000010000000000000000000000000000000010000010101110010000000110000111000000011000011000000000000000000000000000000000000100000000011000001100001001011000011100000010011000011000000000111000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111001011100000010100000110110000000000000000000000001000000000000000000000100000101010100100000001100001110000000110000111000000000000000000000000000000000001000000000110000011000010010110000111000000100110000110000000001110000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110010111000000101000001101100000000000000000000000010000000000000000000001000001010111000000000011000011000000001100001100000000000000000000000000000000000010000000001100000110000100101100001110000001001100001100000000011100000000000111111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111001101111111000011101001110000001010100011011000000000000000000000000100000000000000000000010000010101010000000001110000110000000111000011100000000000000000000000000000000000100000000111100001100001001111000011100000011011000011000000000111000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111010011100000010101000110110000000000000000000000001000000000000000000000100000101011100100000011100001110000001110000110000000000000000000000000000000000001000000001111000011000010011110000111000000110110000110000000001110000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110100111000000101000001101100100000000000000000000010000000000000000000001000001010101001000000111000011100000011100001110000000000000000000000000000000000010000000011110000110000100111100001110000001101100001100000000011100000000000111111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111001101111111000011101001110000001010000011011001000000000000000000000100000000000000000000010000010101110000000001110000110000000111000011000000000000000000000000000000000000100000000111100001100001001111000011100000011011000011000000000111000000000001011111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111110011011111110000111000011100000010101000110110010000000000000000000001000000000000000000000100000101010100000000000010001100000000001000111000000000000000000000000000000000001000000000000100011000000010001000011000000101001000110000000001110000000000010111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111100110111111100001110000111000000101010001101100100000000000000000000010000000000000000000001000001010111001000000000100011100000000010001100000000000000000000000000000000000010000000000001000110000000100010000110000001010010001100000000011100000000000101111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111001101111111000011100001110000001010000011011000000000000010000000000100000000000000000000010000010101010010000000001000111000000000100011100000000000000000000000000000000000100000000000010001100000001000100001100000010100100011000000000111000000000001011111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111110011011111110000111000011100000010100000110110000000000000100000000001000000000000000000000100000101011100000000000010001100000000001000110000000000000000000000000000000000001000000000000100011000000010001000011000000101001000110000000001110000000000010111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111100110111111100001110111011000000101010001101100000000000001000000000010000000000000000000001000001010101000000000100100011000000010010001110000000000000000000000000000000000010000000010011000110000000110010000110000001110010001100000000011100000000000111111111111111111111110110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101101111111000011101110110000001010100011011000000000000010000000000100000000000000000000010000010101110010000001001000111000000100100011000000000000000000000000000000000000100000000100110001100000001100100001100000011100100011000000000111000000000001111111111111111111111101101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011011111110000111011101100000010100000110110010000000000100000000001000000000000000000000100000101010100100000010010001110000001001000111000000000000000000000000000000000001000000001001100011000000011001000011000000111001000110000000001110000000000011111111111111111111111011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110110111111100001110111011000000101000001101100100000000001000000000010000000000000000000001000001010111000000000100100011000000010010001100000000000000000000000000000000000010000000010011000110000000110010000110000001110010001100000000011100000000000111111111111111111111110110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101101111111000011100110110000001010100011011001000000000010000000000100000000000000000000010000010101010000000000101000110000000010100011100000000000000000000000000000000000100000000010010001100001001010100001100000010110100011000000000111000000000001011111111111111111111101101111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111011011111110000111001101100000010101000110110010000000000100000000001000000000000000000000100000101011100100000001010001110000000101000110000000000000000000000000000000000001000000000100100011000010010101000011000000101101000110000000001110000000000010111111111111111111111011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111110110111111100001110011011000000101000001101100000000000000000000000000000000000100000000001000001010101001000000010100011100000001010001110000000000000000000000000000000000010000000001001000110000100101010000110000001011010001100000000011100000000000101111111111111111111110110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111101101111111000011100110110000001010000011011000000000000000000000000000000000001000000000010000010101110000000000101000110000000010100011000000000000000000000000000000000000100000000010010001100001001010100001100000010110100011000000000111000000000001011111111111111111111101101111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111011011111110000111010101100000010101000110110000000000000000000000000000000000010000000000100000101010100000000011010001100000001101000111000000000000000000000000000000000001000000001101100011000010011101000011000000111101000110000000001110000000000011111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110111111111100001110101011000000101010001101100000000000000000000000000000000000100000000001000001010111001000000110100011100000011010001100000000000000000000000000000000000010000000011011000110000100111010000110000001111010001100000000011100000000000111111111111111111111110111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101111111111000011101010110000001010000011011001000000000000000000000000000000001000000000010000010101010010000001101000111000000110100011100000000000000000000000000000000000100000000110110001100001001110100001100000011110100011000000000111000000000001111111111111111111111101111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011111111110000111010101100000010100000110110010000000000000000000000000000000010000000000100000101011100000000011010001100000001101000110000000000000000000000000000000000001000000001101100011000010011101000011000000111101000110000000001110000000000011111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110111111111100001110001011000000101010001101100100000000000000000000000000000000100000000001000001010101000000000001100011000000000110001110000000000000000000000000000000000010000000000101000110000000100110001110000001010110001100000000011100000000000111111111111111111111110111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101111111111000011100010110000001010100011011001000000000000000000000000000000001000000000010000010101110010000000011000111000000001100011000000000000000000000000000000000000100000000001010001100000001001100011100000010101100011000000000111000000000001011111111111111111111101111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111011111111110000111000101100000010100000110110000000000000100000000000000000000010000000000100000101010100100000000110001110000000011000111000000000000000000000000000000000001000000000010100011000000010011000111000000101011000110000000001110000000000010111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111110111111111100001110001011000000101000001101100000000000001000000000000000000000100000000001000001010111000000000001100011000000000110001100000000000000000000000000000000000010000000000101000110000000100110001110000001010110001100000000011100000000000101111111111111111111110111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111101111111111000011101100110000001010100011011000000000000010000000000000000000001000000000010000010101010000000001011000110000000101100011100000000000000000000000000000000000100000000101110001100000001101100011100000011101100011000000000111000000000001011111111111111111111101111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111011111111110000111011001100000010101000110110000000000000100000000000000000000010000000000100000101011100100000010110001110000001011000110000000000000000000000000000000000001000000001011100011000000011011000111000000111011000110000000001110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110011000000101000001101100100000000001000000000000000000000100000000001000001010101001000000101100011100000010110001110000000000000000000000000000000000010000000010111000110000000110110001110000001110110001100000000011100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101100110000001010000011011001000000000010000000000000000000001000000000010000010101110000000001011000110000000101100011000000000000000000000000000000000000100000000101110001100000001101100011100000011101100011000000000111000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001001100000010101000110110010000000000100000000000000000000010000000000100000101010100000000001110001100000000111000111000000000000000000000000000000000001000000000110100011000010010111000111000000101111000110000000001110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010011000000101010001101100100000000001000000000000000000000100000000001000001010111001000000011100011100000001110001100000000000000000000000000000000000010000000001101000110000100101110001110000001011110001100000000011100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100100110000001010000011011000000000000000000000000100000000001000000000010000010101010010000000111000111000000011100011100000000000000000000000000000000000100000000011010001100001001011100011100000010111100011000000000111000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001001100000010100000110110000000000000000000000001000000000010000000000100000101011100000000001110001100000000111000110000000000000000000000000000000000001000000000110100011000010010111000111000000101111000110000000001110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100011000000101010001101100000000000000000000000010000000000100000000001000001010101000000000111100011000000011110001110000000000000000000000000000000000010000000011111000110000100111110001110000001111110001100000000011100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000110000001010100011011000000000000000000000000100000000001000000000010000010101110010000001111000111000000111100011000000000000000000000000000000000000100000000111110001100001001111100011100000011111100011000000000111000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010001100000010100000110110010000000000000000000001000000000010000000000100000101010100100000011110001110000001111000111000000000000000000000000000000000001000000001111100011000010011111000111000000111111000110000000001110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100011000000101000001101100100000000000000000000010000000000100000000001000001010111000000000111100011000000011110001100000000000000000000000000000000000010000000011111000110000100111110001110000001111110001100000000011100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000110000001010100011011001000000000000000000000100000000001000000000010000010101010000000000000100110000000000010011100000000000000000000000000000000000100000000000001001100000001000010001100000010000010011001000000111000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000001100000010101000110110010000000000000000000001000000000010000000000100000101011100100000000001001110000000000100110000000000000000000000000000000000001000000000000010011000000010000100011000000100000100110010000001110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000011000000101000001101100000000000001000000000010000000000100000000001000001010101001000000000010011100000000001001110000000000000000000000000000000000010000000000000100110000000100001000110000001000001001100100000011100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000110000001010000011011000000000000010000000000100000000001000000000010000010101110000000000000100110000000000010011000000000000000000000000000000000000100000000000001001100000001000010001100000010000010011001000000111000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011110100000010101000110110000000000000100000000001000000000010000000000100000101010100000000010001001100000001000100111000000000000000000000000000000000001000000001001010011000000011000100011000000110000100110010000001110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111101000000101010001101100000000000001000000000010000000000100000000001000001010111001000000100010011100000010001001100000000000000000000000000000000000010000000010010100110000000110001000110000001100001001100100000011100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101111010000001010000011011001000000000010000000000100000000001000000000010000010101010010000001000100111000000100010011100000000000000000000000000000000000100000000100101001100000001100010001100000011000010011001000000111000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011110100000010100000110110010000000000100000000001000000000010000000000100000101011100000000010001001100000001000100110000000000000000000000000000000000001000000001001010011000000011000100011000000110000100110010000001110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011101000000101010001101100100000000001000000000010000000000100000000001000001010101000000000010010011000000001001001110000000000000000000000000000000000010000000001000100110000100101001000110000001001001001100100000011100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100111010000001010100011011001000000000010000000000100000000001000000000010000010101110010000000100100111000000010010011000000000000000000000000000000000000100000000010001001100001001010010001100000010010010011001000000111000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001110100000010100000110110000000000000000000000000000000000000000000000000001101010100100000001001001110000000100100111000000000000000000000000000000000001000000000100010011000010010100100011000000100100100110010000001110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011101000000101000001101100000000000000000000000000000000000000000000000000011010111000000000010010011000000001001001100000000000000000000000000000000000010000000001000100110000100101001000110000001001001001100100000011100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101011010000001010100011011000000000000000000000000000000000000000000000000000110101010000000001100100110000000110010011100000000000000000000000000000000000100000000110101001100001001110010001100000011010010011001000000111000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010110100000010101000110110000000000000000000000000000000000000000000000000001101011100100000011001001110000001100100110000000000000000000000000000000000001000000001101010011000010011100100011000000110100100110010000001110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101101000000101000001101100100000000000000000000000000000000000000000000000011010101001000000110010011100000011001001110000000000000000000000000000000000010000000011010100110000100111001000110000001101001001100100000011100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101011010000001010000011011001000000000000000000000000000000000000000000000000110101110000000001100100110000000110010011000000000000000000000000000000000000100000000110101001100001001110010001100000011010010011001000000111000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000110100000010101000110110010000000000000000000000000000000000000000000000001101010100000000000101001100000000010100111000000000000000000000000000000000001000000000010010011000000010010100111000000100010100110010000001110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001101000000101010001101100100000000000000000000000000000000000000000000000011010111001000000001010011100000000101001100000000000000000000000000000000000010000000000100100110000000100101001110000001000101001100100000011100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100011010000001010000011011000000000000010000000000000000000000000000000000000110101010010000000010100111000000001010011100000000000000000000000000000000000100000000001001001100000001001010011100000010001010011001000000111000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000110100000010100000110110000000000000100000000000000000000000000000000000001101011100000000000101001100000000010100110000000000000000000000000000000000001000000000010010011000000010010100111000000100010100110010000001110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110101000000101010001101100000000000001000000000000000000000000000000000000011010101000000000101010011000000010101001110000000000000000000000000000000000010000000010110100110000000110101001110000001100101001100100000011100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101101010000001010100011011000000000000010000000000000000000000000000000000000110101110010000001010100111000000101010011000000000000000000000000000000000000100000000101101001100000001101010011100000011001010011001000000111000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011010100000010100000110110010000000000100000000000000000000000000000000000001101010100100000010101001110000001010100111000000000000000000000000000000000001000000001011010011000000011010100111000000110010100110010000001110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110101000000101000001101100100000000001000000000000000000000000000000000000011010111000000000101010011000000010101001100000000000000000000000000000000000010000000010110100110000000110101001110000001100101001100100000011100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100101010000001010100011011001000000000010000000000000000000000000000000000000110101010000000000110100110000000011010011100000000000000000000000000000000000100000000011001001100001001011010011100000010011010011001000000111000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001010100000010101000110110010000000000100000000000000000000000000000000000001101011100100000001101001110000000110100110000000000000000000000000000000000001000000000110010011000010010110100111000000100110100110010000001110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010101000000101000001101100000000000000000000000010000000000000000000000000011010101001000000011010011100000001101001110000000000000000000000000000000000010000000001100100110000100101101001110000001001101001100100000011100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100101010000001010000011011000000000000000000000000100000000000000000000000000110101110000000000110100110000000011010011000000000000000000000000000000000000100000000011001001100001001011010011100000010011010011001000000111000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010010100000010101000110110000000000000000000000001000000000000000000000000001101010100000000011101001100000001110100111000000000000000000000000000000000001000000001111010011000010011110100111000000110110100110010000001110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100101000000101010001101100000000000000000000000010000000000000000000000000011010111001000000111010011100000011101001100000000000000000000000000000000000010000000011110100110000100111101001110000001101101001100100000011100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101001010000001010000011011001000000000000000000000100000000000000000000000000110101010010000001110100111000000111010011100000000000000000000000000000000000100000000111101001100001001111010011100000011011010011001000000111000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010010100000010100000110110010000000000000000000001000000000000000000000000001101011100000000011101001100000001110100110000000000000000000000000000000000001000000001111010011000010011110100111000000110110100110010000001110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000101000000101010001101100100000000000000000000010000000000000000000000000011010101000000000000110011000000000011001110000000000000000000000000000000000010000000000001100110000000100011000110000001010011001100100000011100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100001010000001010100011011001000000000000000000000100000000000000000000000000110101110010000000001100111000000000110011000000000000000000000000000000000000100000000000011001100000001000110001100000010100110011001000000111000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000010100000010100000110110000000000000100000000001000000000000000000000000001101010100100000000011001110000000001100111000000000000000000000000000000000001000000000000110011000000010001100011000000101001100110010000001110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000101000000101000001101100000000000001000000000010000000000000000000000000011010111000000000000110011000000000011001100000000000000000000000000000000000010000000000001100110000000100011000110000001010011001100100000011100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101110010000001010100011011000000000000010000000000100000000000000000000000000110101010000000001001100110000000100110011100000000000000000000000000000000000100000000100111001100000001100110001100000011100110011001000000111000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011100100000010101000110110000000000000100000000001000000000000000000000000001101011100100000010011001110000001001100110000000000000000000000000000000000001000000001001110011000000011001100011000000111001100110010000001110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111001000000101000001101100100000000001000000000010000000000000000000000000011010101001000000100110011100000010011001110000000000000000000000000000000000010000000010011100110000000110011000110000001110011001100100000011100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101110010000001010000011011001000000000010000000000100000000000000000000000000110101110000000001001100110000000100110011000000000000000000000000000000000000100000000100111001100000001100110001100000011100110011001000000111000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100100000010101000110110010000000000100000000001000000000000000000000000001101010100000000001011001100000000101100111000000000000000000000000000000000001000000000100110011000010010101100011000000101101100110010000001110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011001000000101010001101100100000000001000000000010000000000000000000000000011010111001000000010110011100000001011001100000000000000000000000000000000000010000000001001100110000100101011000110000001011011001100100000011100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110010000001010000011011000000000000000000000000000000000001000000000000000110101010010000000101100111000000010110011100000000000000000000000000000000000100000000010011001100001001010110001100000010110110011001000000111000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100100000010100000110110000000000000000000000000000000000010000000000000001101011100000000001011001100000000101100110000000000000000000000000000000000001000000000100110011000010010101100011000000101101100110010000001110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101001000000101010001101100000000000000000000000000000000000100000000000000011010101000000000110110011000000011011001110000000000000000000000000000000000010000000011011100110000100111011000110000001111011001100100000011100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101010010000001010100011011000000000000000000000000000000000001000000000000000110101110010000001101100111000000110110011000000000000000000000000000000000000100000000110111001100001001110110001100000011110110011001000000111000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010100100000010100000110110010000000000000000000000000000000010000000000000001101010100100000011011001110000001101100111000000000000000000000000000000000001000000001101110011000010011101100011000000111101100110010000001110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101001000000101000001101100100000000000000000000000000000000100000000000000011010111000000000110110011000000011011001100000000000000000000000000000000000010000000011011100110000100111011000110000001111011001100100000011100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100010010000001010100011011001000000000000000000000000000000001000000000000000110101010000000000011100110000000001110011100000000000000000000000000000000000100000000001011001100000001001110011100000010101110011001000000111000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000100100000010101000110110010000000000000000000000000000000010000000000000001101011100100000000111001110000000011100110000000000000000000000000000000000001000000000010110011000000010011100111000000101011100110010000001110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001001000000101000001101100000000000001000000000000000000000100000000000000011010101001000000001110011100000000111001110000000000000000000000000000000000010000000000101100110000000100111001110000001010111001100100000011100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100010010000001010000011011000000000000010000000000000000000001000000000000000110101110000000000011100110000000001110011000000000000000000000000000000000000100000000001011001100000001001110011100000010101110011001000000111000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011000100000010101000110110000000000000100000000000000000000010000000000000001101010100000000010111001100000001011100111000000000000000000000000000000000001000000001011110011000000011011100111000000111011100110010000001110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110001000000101010001101100000000000001000000000000000000000100000000000000011010111001000000101110011100000010111001100000000000000000000000000000000000010000000010111100110000000110111001110000001110111001100100000011100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101100010000001010000011011001000000000010000000000000000000001000000000000000110101010010000001011100111000000101110011100000000000000000000000000000000000100000000101111001100000001101110011100000011101110011001000000111000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011000100000010100000110110010000000000100000000000000000000010000000000000001101011100000000010111001100000001011100110000000000000000000000000000000000001000000001011110011000000011011100111000000111011100110010000001110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010001000000101010001101100100000000001000000000000000000000100000000000000011010101000000000011110011000000001111001110000000000000000000000000000000000010000000001101100110000100101111001110000001011111001100100000011100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100100010000001010100011011001000000000010000000000000000000001000000000000000110101110010000000111100111000000011110011000000000000000000000000000000000000100000000011011001100001001011110011100000010111110011001000000111000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001000100000010100000110110000000000000000000000001000000000010000000000000001101010100100000001111001110000000111100111000000000000000000000000000000000001000000000110110011000010010111100111000000101111100110010000001110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010001000000101000001101100000000000000000000000010000000000100000000000000011010111000000000011110011000000001111001100000000000000000000000000000000000010000000001101100110000100101111001110000001011111001100100000011100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000010000001010100011011000000000000000000000000100000000001000000000000000110101010000000001111100110000000111110011100000000000000000000000000000000000100000000111111001100001001111110011100000011111110011001000000111000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010000100000010101000110110000000000000000000000001000000000010000000000000001101011100100000011111001110000001111100110000000000000000000000000000000000001000000001111110011000010011111100111000000111111100110010000001110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100001000000101000001101100100000000000000000000010000000000100000000000000011010101001000000111110011100000011111001110000000000000000000000000000000000010000000011111100110000100111111001110000001111111001100100000011100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000010000001010000011011001000000000000000000000100000000001000000000000000110101110000000001111100110000000111110011000000000000000000000000000000000000100000000111111001100001001111110011100000011111110011001000000111000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000000100000010101000110110010000000000000000000001000000000010000000000000001101010100000000000000101100000000000010111000000000000000000000000000000000001000000000000001011000000010000010011000000100000010110000000101110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000001000000101010001101100100000000000000000000010000000000100000000000000011010111001000000000001011100000000000101100000000000000000000000000000000000010000000000000010110000000100000100110000001000000101100000001011100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000010000001010000011011000000000000010000000000100000000001000000000000000110101010010000000000010111000000000001011100000000000000000000000000000000000100000000000000101100000001000001001100000010000001011000000010111000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000000100000010100000110110000000000000100000000001000000000010000000000000001101011100000000000000101100000000000010110000000000000000000000000000000000001000000000000001011000000010000010011000000100000010110000000101110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111110000000101010001101100000000000001000000000010000000000100000000000000011010101000000000100001011000000010000101110000000000000000000000000000000000010000000010010010110000000110000100110000001100000101100000001011100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101111100000001010100011011000000000000010000000000100000000001000000000000000110101110010000001000010111000000100001011000000000000000000000000000000000000100000000100100101100000001100001001100000011000001011000000010111000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011111000000010100000110110010000000000100000000001000000000010000000000000001101010100100000010000101110000001000010111000000000000000000000000000000000001000000001001001011000000011000010011000000110000010110000000101110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111110000000101000001101100100000000001000000000010000000000100000000000000011010111000000000100001011000000010000101100000000000000000000000000000000000010000000010010010110000000110000100110000001100000101100000001011100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100111100000001010100011011001000000000010000000000100000000001000000000000000110101010000000000100010110000000010001011100000000000000000000000000000000000100000000010000101100001001010001001100000010010001011000000010111000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001111000000010101000110110010000000000100000000001000000000010000000000000001101011100100000001000101110000000100010110000000000000000000000000000000000001000000000100001011000010010100010011000000100100010110000000101110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011110000000101000001101100000000000000000000000000000000000000000000001000011010101001000000010001011100000001000101110000000000000000000000000000000000010000000001000010110000100101000100110000001001000101100000001011100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100111100000001010000011011000000000000000000000000000000000000000000000010000110101110000000000100010110000000010001011000000000000000000000000000000000000100000000010000101100001001010001001100000010010001011000000010111000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010111000000010101000110110000000000000000000000000000000000000000000000100001101010100000000011000101100000001100010111000000000000000000000000000000000001000000001101001011000010011100010011000000110100010110000000101110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101110000000101010001101100000000000000000000000000000000000000000000001000011010111001000000110001011100000011000101100000000000000000000000000000000000010000000011010010110000100111000100110000001101000101100000001011100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101011100000001010000011011001000000000000000000000000000000000000000000010000110101010010000001100010111000000110001011100000000000000000000000000000000000100000000110100101100001001110001001100000011010001011000000010111000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010111000000010100000110110010000000000000000000000000000000000000000000100001101011100000000011000101100000001100010110000000000000000000000000000000000001000000001101001011000010011100010011000000110100010110000000101110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001110000000101010001101100100000000000000000000000000000000000000000001000011010101000000000001001011000000000100101110000000000000000000000000000000000010000000000100010110000000100100101110000001000100101100000001011100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100011100000001010100011011001000000000000000000000000000000000000000000010000110101110010000000010010111000000001001011000000000000000000000000000000000000100000000001000101100000001001001011100000010001001011000000010111000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000111000000010100000110110000000000000100000000000000000000000000000000100001101010100100000000100101110000000010010111000000000000000000000000000000000001000000000010001011000000010010010111000000100010010110000000101110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001110000000101000001101100000000000001000000000000000000000000000000001000011010111000000000001001011000000000100101100000000000000000000000000000000000010000000000100010110000000100100101110000001000100101100000001011100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101101100000001010100011011000000000000010000000000000000000000000000000010000110101010000000001010010110000000101001011100000000000000000000000000000000000100000000101100101100000001101001011100000011001001011000000010111000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011011000000010101000110110000000000000100000000000000000000000000000000100001101011100100000010100101110000001010010110000000000000000000000000000000000001000000001011001011000000011010010111000000110010010110000000101110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110110000000101000001101100100000000001000000000000000000000000000000001000011010101001000000101001011100000010100101110000000000000000000000000000000000010000000010110010110000000110100101110000001100100101100000001011100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101101100000001010000011011001000000000010000000000000000000000000000000010000110101110000000001010010110000000101001011000000000000000000000000000000000000100000000101100101100000001101001011100000011001001011000000010111000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001011000000010101000110110010000000000100000000000000000000000000000000100001101010100000000001100101100000000110010111000000000000000000000000000000000001000000000110001011000010010110010111000000100110010110000000101110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010110000000101010001101100100000000001000000000000000000000000000000001000011010111001000000011001011100000001100101100000000000000000000000000000000000010000000001100010110000100101100101110000001001100101100000001011100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100101100000001010000011011000000000000000000000000100000000000000000000010000110101010010000000110010111000000011001011100000000000000000000000000000000000100000000011000101100001001011001011100000010011001011000000010111000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001011000000010100000110110000000000000000000000001000000000000000000000100001101011100000000001100101100000000110010110000000000000000000000000000000000001000000000110001011000010010110010111000000100110010110000000101110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100110000000101010001101100000000000000000000000010000000000000000000001000011010101000000000111001011000000011100101110000000000000000000000000000000000010000000011110010110000100111100101110000001101100101100000001011100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101001100000001010100011011000000000000000000000000100000000000000000000010000110101110010000001110010111000000111001011000000000000000000000000000000000000100000000111100101100001001111001011100000011011001011000000010111000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010011000000010100000110110010000000000000000000001000000000000000000000100001101010100100000011100101110000001110010111000000000000000000000000000000000001000000001111001011000010011110010111000000110110010110000000101110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100110000000101000001101100100000000000000000000010000000000000000000001000011010111000000000111001011000000011100101100000000000000000000000000000000000010000000011110010110000100111100101110000001101100101100000001011100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100001100000001010100011011001000000000000000000000100000000000000000000010000110101010000000000001010110000000000101011100000000000000000000000000000000000100000000000010101100000001000101001100000010100101011000000010111000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000011000000010101000110110010000000000000000000001000000000000000000000100001101011100100000000010101110000000001010110000000000000000000000000000000000001000000000000101011000000010001010011000000101001010110000000101110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000110000000101000001101100000000000001000000000010000000000000000000001000011010101001000000000101011100000000010101110000000000000000000000000000000000010000000000001010110000000100010100110000001010010101100000001011100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100001100000001010000011011000000000000010000000000100000000000000000000010000110101110000000000001010110000000000101011000000000000000000000000000000000000100000000000010101100000001000101001100000010100101011000000010111000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011101000000010101000110110000000000000100000000001000000000000000000000100001101010100000000010010101100000001001010111000000000000000000000000000000000001000000001001101011000000011001010011000000111001010110000000101110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111010000000101010001101100000000000001000000000010000000000000000000001000011010111001000000100101011100000010010101100000000000000000000000000000000000010000000010011010110000000110010100110000001110010101100000001011100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101110100000001010000011011001000000000010000000000100000000000000000000010000110101010010000001001010111000000100101011100000000000000000000000000000000000100000000100110101100000001100101001100000011100101011000000010111000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011101000000010100000110110010000000000100000000001000000000000000000000100001101011100000000010010101100000001001010110000000000000000000000000000000000001000000001001101011000000011001010011000000111001010110000000101110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011010000000101010001101100100000000001000000000010000000000000000000001000011010101000000000010101011000000001010101110000000000000000000000000000000000010000000001001010110000100101010100110000001011010101100000001011100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110100000001010100011011001000000000010000000000100000000000000000000010000110101110010000000101010111000000010101011000000000000000000000000000000000000100000000010010101100001001010101001100000010110101011000000010111000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001101000000010100000110110000000000000000000000000000000000010000000000100001101010100100000001010101110000000101010111000000000000000000000000000000000001000000000100101011000010010101010011000000101101010110000000101110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011010000000101000001101100000000000000000000000000000000000100000000001000011010111000000000010101011000000001010101100000000000000000000000000000000000010000000001001010110000100101010100110000001011010101100000001011100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101010100000001010100011011000000000000000000000000000000000001000000000010000110101010000000001101010110000000110101011100000000000000000000000000000000000100000000110110101100001001110101001100000011110101011000000010111000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010101000000010101000110110000000000000000000000000000000000010000000000100001101011100100000011010101110000001101010110000000000000000000000000000000000001000000001101101011000010011101010011000000111101010110000000101110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101010000000101000001101100100000000000000000000000000000000100000000001000011010101001000000110101011100000011010101110000000000000000000000000000000000010000000011011010110000100111010100110000001111010101100000001011100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101010100000001010000011011001000000000000000000000000000000001000000000010000110101110000000001101010110000000110101011000000000000000000000000000000000000100000000110110101100001001110101001100000011110101011000000010111000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000101000000010101000110110010000000000000000000000000000000010000000000100001101010100000000000110101100000000011010111000000000000000000000000000000000001000000000010101011000000010011010111000000101011010110000000101110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001010000000101010001101100100000000000000000000000000000000100000000001000011010111001000000001101011100000000110101100000000000000000000000000000000000010000000000101010110000000100110101110000001010110101100000001011100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100010100000001010000011011000000000000010000000000000000000001000000000010000110101010010000000011010111000000001101011100000000000000000000000000000000000100000000001010101100000001001101011100000010101101011000000010111000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000101000000010100000110110000000000000100000000000000000000010000000000100001101011100000000000110101100000000011010110000000000000000000000000000000000001000000000010101011000000010011010111000000101011010110000000101110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110010000000101010001101100000000000001000000000000000000000100000000001000011010101000000000101101011000000010110101110000000000000000000000000000000000010000000010111010110000000110110101110000001110110101100000001011100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101100100000001010100011011000000000000010000000000000000000001000000000010000110101110010000001011010111000000101101011000000000000000000000000000000000000100000000101110101100000001101101011100000011101101011000000010111000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011001000000010100000110110010000000000100000000000000000000010000000000100001101010100100000010110101110000001011010111000000000000000000000000000000000001000000001011101011000000011011010111000000111011010110000000101110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110010000000101000001101100100000000001000000000000000000000100000000001000011010111000000000101101011000000010110101100000000000000000000000000000000000010000000010111010110000000110110101110000001110110101100000001011100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100100100000001010100011011001000000000010000000000000000000001000000000010000110101010000000000111010110000000011101011100000000000000000000000000000000000100000000011010101100001001011101011100000010111101011000000010111000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001001000000010101000110110010000000000100000000000000000000010000000000100001101011100100000001110101110000000111010110000000000000000000000000000000000001000000000110101011000010010111010111000000101111010110000000101110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010010000000101000001101100000000000000000000000010000000000100000000001000011010101001000000011101011100000001110101110000000000000000000000000000000000010000000001101010110000100101110101110000001011110101100000001011100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100100100000001010000011011000000000000000000000000100000000001000000000010000110101110000000000111010110000000011101011000000000000000000000000000000000000100000000011010101100001001011101011100000010111101011000000010111000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010001000000010101000110110000000000000000000000001000000000010000000000100001101010100000000011110101100000001111010111000000000000000000000000000000000001000000001111101011000010011111010111000000111111010110000000101110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100010000000101010001101100000000000000000000000010000000000100000000001000011010111001000000111101011100000011110101100000000000000000000000000000000000010000000011111010110000100111110101110000001111110101100000001011100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101000100000001010000011011001000000000000000000000100000000001000000000010000110101010010000001111010111000000111101011100000000000000000000000000000000000100000000111110101100001001111101011100000011111101011000000010111000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010001000000010100000110110010000000000000000000001000000000010000000000100001101011100000000011110101100000001111010110000000000000000000000000000000000001000000001111101011000010011111010111000000111111010110000000101110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000010000000101010001101100100000000000000000000010000000000100000000001000011010101000000000000011011000000000001101110000000000000000000000000000000000010000000000000110110000000100001100110000001000001101100100001011100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000100000001010100011011001000000000000000000000100000000001000000000010000110101110010000000000110111000000000011011000000000000000000000000000000000000100000000000001101100000001000011001100000010000011011001000010111000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000001000000010100000110110000000000000100000000001000000000010000000000100001101010100100000000001101110000000000110111000000000000000000000000000000000001000000000000011011000000010000110011000000100000110110010000101110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000010000000101000001101100000000000001000000000010000000000100000000001000011010111000000000000011011000000000001101100000000000000000000000000000000000010000000000000110110000000100001100110000001000001101100100001011100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101111000000001010100011011000000000000010000000000100000000001000000000010000110101010000000001000110110000000100011011100000000000000000000000000000000000100000000100101101100000001100011001100000011000011011001000010111000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011110000000010101000110110000000000000100000000001000000000010000000000100001101011100100000010001101110000001000110110000000000000000000000000000000000001000000001001011011000000011000110011000000110000110110010000101110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111100000000101000001101100100000000001000000000010000000000100000000001000011010101001000000100011011100000010001101110000000000000000000000000000000000010000000010010110110000000110001100110000001100001101100100001011100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101111000000001010000011011001000000000010000000000100000000001000000000010000110101110000000001000110110000000100011011000000000000000000000000000000000000100000000100101101100000001100011001100000011000011011001000010111000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001110000000010101000110110010000000000100000000001000000000010000000000100001101010100000000001001101100000000100110111000000000000000000000000000000000001000000000100011011000010010100110011000000100100110110010000101110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011100000000101010001101100100000000001000000000010000000000100000000001000011010111001000000010011011100000001001101100000000000000000000000000000000000010000000001000110110000100101001100110000001001001101100100001011100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100111000000001010000011011000000000000000000000000000000000000000000000000000001101010010000000100110111000000010011011100000000000000000000000000000000000100000000010001101100001001010011001100000010010011011001000010111000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001110000000010100000110110000000000000000000000000000000000000000000000000000011011100000000001001101100000000100110110000000000000000000000000000000000001000000000100011011000010010100110011000000100100110110010000101110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101100000000101010001101100000000000000000000000000000000000000000000000000000110101000000000110011011000000011001101110000000000000000000000000000000000010000000011010110110000100111001100110000001101001101100100001011100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101011000000001010100011011000000000000000000000000000000000000000000000000000001101110010000001100110111000000110011011000000000000000000000000000000000000100000000110101101100001001110011001100000011010011011001000010111000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010110000000010100000110110010000000000000000000000000000000000000000000000000011010100100000011001101110000001100110111000000000000000000000000000000000001000000001101011011000010011100110011000000110100110110010000101110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101100000000101000001101100100000000000000000000000000000000000000000000000000110111000000000110011011000000011001101100000000000000000000000000000000000010000000011010110110000100111001100110000001101001101100100001011100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100011000000001010100011011001000000000000000000000000000000000000000000000000001101010000000000010110110000000001011011100000000000000000000000000000000000100000000001001101100000001001011011100000010001011011001000010111000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000110000000010101000110110010000000000000000000000000000000000000000000000000011011100100000000101101110000000010110110000000000000000000000000000000000001000000000010011011000000010010110111000000100010110110010000101110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001100000000101000001101100000000000001000000000000000000000000000000000000000110101001000000001011011100000000101101110000000000000000000000000000000000010000000000100110110000000100101101110000001000101101100100001011100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100011000000001010000011011000000000000010000000000000000000000000000000000000001101110000000000010110110000000001011011000000000000000000000000000000000000100000000001001101100000001001011011100000010001011011001000010111000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011010000000010101000110110000000000000100000000000000000000000000000000000000011010100000000010101101100000001010110111000000000000000000000000000000000001000000001011011011000000011010110111000000110010110110010000101110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110100000000101010001101100000000000001000000000000000000000000000000000000000110111001000000101011011100000010101101100000000000000000000000000000000000010000000010110110110000000110101101110000001100101101100100001011100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101101000000001010000011011001000000000010000000000000000000000000000000000000001101010010000001010110111000000101011011100000000000000000000000000000000000100000000101101101100000001101011011100000011001011011001000010111000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011010000000010100000110110010000000000100000000000000000000000000000000000000011011100000000010101101100000001010110110000000000000000000000000000000000001000000001011011011000000011010110111000000110010110110010000101110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010100000000101010001101100100000000001000000000000000000000000000000000000000110101000000000011011011000000001101101110000000000000000000000000000000000010000000001100110110000100101101101110000001001101101100100001011100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100101000000001010100011011001000000000010000000000000000000000000000000000000001101110010000000110110111000000011011011000000000000000000000000000000000000100000000011001101100001001011011011100000010011011011001000010111000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001010000000010100000110110000000000000000000000001000000000000000000000000000011010100100000001101101110000000110110111000000000000000000000000000000000001000000000110011011000010010110110111000000100110110110010000101110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010100000000101000001101100000000000000000000000010000000000000000000000000000110111000000000011011011000000001101101100000000000000000000000000000000000010000000001100110110000100101101101110000001001101101100100001011100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101001000000001010100011011000000000000000000000000100000000000000000000000000001101010000000001110110110000000111011011100000000000000000000000000000000000100000000111101101100001001111011011100000011011011011001000010111000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010010000000010101000110110000000000000000000000001000000000000000000000000000011011100100000011101101110000001110110110000000000000000000000000000000000001000000001111011011000010011110110111000000110110110110010000101110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100100000000101000001101100100000000000000000000010000000000000000000000000000110101001000000111011011100000011101101110000000000000000000000000000000000010000000011110110110000100111101101110000001101101101100100001011100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101001000000001010000011011001000000000000000000000100000000000000000000000000001101110000000001110110110000000111011011000000000000000000000000000000000000100000000111101101100001001111011011100000011011011011001000010111000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000010000000010101000110110010000000000000000000001000000000000000000000000000011010100000000000011101100000000001110111000000000000000000000000000000000001000000000000111011000000010001110011000000101001110110010000101110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000100000000101010001101100100000000000000000000010000000000000000000000000000110111001000000000111011100000000011101100000000000000000000000000000000000010000000000001110110000000100011100110000001010011101100100001011100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100001000000001010000011011000000000000010000000000100000000000000000000000000001101010010000000001110111000000000111011100000000000000000000000000000000000100000000000011101100000001000111001100000010100111011001000010111000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000010000000010100000110110000000000000100000000001000000000000000000000000000011011100000000000011101100000000001110110000000000000000000000000000000000001000000000000111011000000010001110011000000101001110110010000101110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111000000000101010001101100000000000001000000000010000000000000000000000000000110101000000000100111011000000010011101110000000000000000000000000000000000010000000010011110110000000110011100110000001110011101100100001011100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101110000000001010100011011000000000000010000000000100000000000000000000000000001101110010000001001110111000000100111011000000000000000000000000000000000000100000000100111101100000001100111001100000011100111011001000010111000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011100000000010100000110110010000000000100000000001000000000000000000000000000011010100100000010011101110000001001110111000000000000000000000000000000000001000000001001111011000000011001110011000000111001110110010000101110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111000000000101000001101100100000000001000000000010000000000000000000000000000110111000000000100111011000000010011101100000000000000000000000000000000000010000000010011110110000000110011100110000001110011101100100001011100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110000000001010100011011001000000000010000000000100000000000000000000000000001101010000000000101110110000000010111011100000000000000000000000000000000000100000000010011101100001001010111001100000010110111011001000010111000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100000000010101000110110010000000000100000000001000000000000000000000000000011011100100000001011101110000000101110110000000000000000000000000000000000001000000000100111011000010010101110011000000101101110110010000101110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000000000101000001101100000000000000000000000000000000000100000000000000000110101001000000010111011100000001011101110000000000000000000000000000000000010000000001001110110000100101011100110000001011011101100100001011100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110000000001010000011011000000000000000000000000000000000001000000000000000001101110000000000101110110000000010111011000000000000000000000000000000000000100000000010011101100001001010111001100000010110111011001000010111000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010100000000010101000110110000000000000000000000000000000000010000000000000000011010100000000011011101100000001101110111000000000000000000000000000000000001000000001101111011000010011101110011000000111101110110010000101110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101000000000101010001101100000000000000000000000000000000000100000000000000000110111001000000110111011100000011011101100000000000000000000000000000000000010000000011011110110000100111011100110000001111011101100100001011100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101010000000001010000011011001000000000000000000000000000000001000000000000000001101010010000001101110111000000110111011100000000000000000000000000000000000100000000110111101100001001110111001100000011110111011001000010111000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010100000000010100000110110010000000000000000000000000000000010000000000000000011011100000000011011101100000001101110110000000000000000000000000000000000001000000001101111011000010011101110011000000111101110110010000101110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001000000000101010001101100100000000000000000000000000000000100000000000000000110101000000000001111011000000000111101110000000000000000000000000000000000010000000000101110110000000100111101110000001010111101100100001011100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100010000000001010100011011001000000000000000000000000000000001000000000000000001101110010000000011110111000000001111011000000000000000000000000000000000000100000000001011101100000001001111011100000010101111011001000010111000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000100000000010100000110110000000000000100000000000000000000010000000000000000011010100100000000111101110000000011110111000000000000000000000000000000000001000000000010111011000000010011110111000000101011110110010000101110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001000000000101000001101100000000000001000000000000000000000100000000000000000110111000000000001111011000000000111101100000000000000000000000000000000000010000000000101110110000000100111101110000001010111101100100001011100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101100000000001010100011011000000000000010000000000000000000001000000000000000001101010000000001011110110000000101111011100000000000000000000000000000000000100000000101111101100000001101111011100000011101111011001000010111000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011000000000010101000110110000000000000100000000000000000000010000000000000000011011100100000010111101110000001011110110000000000000000000000000000000000001000000001011111011000000011011110111000000111011110110010000101110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110000000000101000001101100100000000001000000000000000000000100000000000000000110101001000000101111011100000010111101110000000000000000000000000000000000010000000010111110110000000110111101110000001110111101100100001011100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101100000000001010000011011001000000000010000000000000000000001000000000000000001101110000000001011110110000000101111011000000000000000000000000000000000000100000000101111101100000001101111011100000011101111011001000010111000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001000000000010101000110110010000000000100000000000000000000010000000000000000011010100000000001111101100000000111110111000000000000000000000000000000000001000000000110111011000010010111110111000000101111110110010000101110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010000000000101010001101100100000000001000000000000000000000100000000000000000110111001000000011111011100000001111101100000000000000000000000000000000000010000000001101110110000100101111101110000001011111101100100001011100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100100000000001010000011011000000000000000000000000100000000001000000000000000001101010010000000111110111000000011111011100000000000000000000000000000000000100000000011011101100001001011111011100000010111111011001000010111000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001000000000010100000110110000000000000000000000001000000000010000000000000000011011100000000001111101100000000111110110000000000000000000000000000000000001000000000110111011000010010111110111000000101111110110010000101110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100000000000101010001101100000000000000000000000010000000000100000000000000000110101000000000111111011000000011111101110000000000000000000000000000000000010000000011111110110000100111111101110000001111111101100100001011100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000000000001010100011011000000000000000000000000100000000001000000000000000001101110010000001111110111000000111111011000000000000000000000000000000000000100000000111111101100001001111111011100000011111111011001000010111000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010000000000010100000110110010000000000000000000001000000000010000000000000000011010100100000011111101110000001111110111000000000000000000000000000000000001000000001111111011000010011111110111000000111111110110010000101110000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100000000000101000001101100100000000000000000000010000000000100000000000000000110111000000000111111011000000011111101100000000000000000000000000000000000010000000011111110110000100111111101110000001111111101100100001011100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000000000001010100011011001000000000000000000000100000000001000000000000000001101010000000000000001110000000000000111100000000000000000000000000000000000100000000000000011100000001000000101100000010000000111000000001111000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000000000000010101000110110010000000000000000000001000000000010000000000000000011011100100000000000011110000000000001110000000000000000000000000000000000001000000000000000111000000010000001011000000100000001110000000011110000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000000000000101000001101100000000000001000000000010000000000100000000000000000110101001000000000000111100000000000011110000000000000000000000000000000000010000000000000001110000000100000010110000001000000011100000000111100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000000000001010000011011000000000000010000000000100000000001000000000000000001101110000000000000001110000000000000111000000000000000000000000000000000000100000000000000011100000001000000101100000010000000111000000001111000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000010111010110000000010101000110110000000000000100000000001000000000010000000000000000011010100000000010000011100000001000001111000000000000000000000000000000000001000000001001000111000000011000001011000000110000001110000000011110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000101110101001000000101010001101100000000000001000000000010000000000100000000000000000110111001000000100000111100000010000011100000000000000000000000000000000000010000000010010001110000000110000010110000001100000011100000000111100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000001011101011110000001010000011011001000000000010000000000100000000001000000000000000001101010010000001000001111000000100000111100000000000000000000000000000000000100000000100100011100000001100000101100000011000000111000000001111000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000010111010101010000010100000110110010000000000100000000001000000000010000000000000000011011100000000010000011100000001000001110000000000000000000000000000000000001000000001001000111000000011000001011000000110000001110000000011110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000101110001101100000101010001101100100000000001000000000010000000000100000000000000000110101000000000010000111000000001000011110000000000000000000000000000000000010000000001000001110000100101000010110000001001000011100000000111100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100011111000001010100011011001000000000010000000000100000000001000000000000000001101110010000000100001111000000010000111000000000000000000000000000000000000100000000010000011100001001010000101100000010010000111000000001111000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000111110000010100000110110000000000000000000000000000000000000000000000100000011010100100000001000011110000000100001111000000000000000000000000000000000001000000000100000111000010010100001011000000100100001110000000011110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001111100000101000001101100000000000000000000000000000000000000000000001000000110111000000000010000111000000001000011100000000000000000000000000000000000010000000001000001110000100101000010110000001001000011100000000111100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101101111000001010100011011000000000000000000000000000000000000000000000010000001101010000000001100001110000000110000111100000000000000000000000000000000000100000000110100011100001001110000101100000011010000111000000001111000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011011110000010101000110110000000000000000000000000000000000000000000000100000011011100100000011000011110000001100001110000000000000000000000000000000000001000000001101000111000010011100001011000000110100001110000000011110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110111100000101000001101100100000000000000000000000000000000000000000001000000110101001000000110000111100000011000011110000000000000000000000000000000000010000000011010001110000100111000010110000001101000011100000000111100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101101111000001010000011011001000000000000000000000000000000000000000000010000001101110000000001100001110000000110000111000000000000000000000000000000000000100000000110100011100001001110000101100000011010000111000000001111000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001011110000010101000110110010000000000000000000000000000000000000000000100000011010100000000000100011100000000010001111000000000000000000000000000000000001000000000010000111000000010010001111000000100010001110000000011110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110010111100000101010001101100100000000000000000000000000000000000000000001000000110111001000000001000111100000000100011100000000000000000000000000000000000010000000000100001110000000100100011110000001000100011100000000111100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100101111000001010000011011000000000000010000000000000000000000000000000010000001101010010000000010001111000000001000111100000000000000000000000000000000000100000000001000011100000001001000111100000010001000111000000001111000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001011110000010100000110110000000000000100000000000000000000000000000000100000011011100000000000100011100000000010001110000000000000000000000000000000000001000000000010000111000000010010001111000000100010001110000000011110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110100111100000101010001101100000000000001000000000000000000000000000000001000000110101000000000101000111000000010100011110000000000000000000000000000000000010000000010110001110000000110100011110000001100100011100000000111100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101001111000001010100011011000000000000010000000000000000000000000000000010000001101110010000001010001111000000101000111000000000000000000000000000000000000100000000101100011100000001101000111100000011001000111000000001111000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010011110000010100000110110010000000000100000000000000000000000000000000100000011010100100000010100011110000001010001111000000000000000000000000000000000001000000001011000111000000011010001111000000110010001110000000011110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100111100000101000001101100100000000001000000000000000000000000000000001000000110111000000000101000111000000010100011100000000000000000000000000000000000010000000010110001110000000110100011110000001100100011100000000111100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100001111000001010100011011001000000000010000000000000000000000000000000010000001101010000000000110001110000000011000111100000000000000000000000000000000000100000000011000011100001001011000111100000010011000111000000001111000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000011110000010101000110110010000000000100000000000000000000000000000000100000011011100100000001100011110000000110001110000000000000000000000000000000000001000000000110000111000010010110001111000000100110001110000000011110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000111100000101000001101100000000000000000000000010000000000000000000001000000110101001000000011000111100000001100011110000000000000000000000000000000000010000000001100001110000100101100011110000001001100011100000000111100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100001111000001010000011011000000000000000000000000100000000000000000000010000001101110000000000110001110000000011000111000000000000000000000000000000000000100000000011000011100001001011000111100000010011000111000000001111000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011101110000010101000110110000000000000000000000001000000000000000000000100000011010100000000011100011100000001110001111000000000000000000000000000000000001000000001111000111000010011110001111000000110110001110000000011110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110111011100000101010001101100000000000000000000000010000000000000000000001000000110111001000000111000111100000011100011100000000000000000000000000000000000010000000011110001110000100111100011110000001101100011100000000111100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101110111000001010000011011001000000000000000000000100000000000000000000010000001101010010000001110001111000000111000111100000000000000000000000000000000000100000000111100011100001001111000111100000011011000111000000001111000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011101110000010100000110110010000000000000000000001000000000000000000000100000011011100000000011100011100000001110001110000000000000000000000000000000000001000000001111000111000010011110001111000000110110001110000000011110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110011011100000101010001101100100000000000000000000010000000000000000000001000000110101000000000000100111000000000010011110000000000000000000000000000000000010000000000001001110000000100010010110000001010010011100000000111100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100110111000001010100011011001000000000000000000000100000000000000000000010000001101110010000000001001111000000000100111000000000000000000000000000000000000100000000000010011100000001000100101100000010100100111000000001111000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001101110000010100000110110000000000000100000000001000000000000000000000100000011010100100000000010011110000000001001111000000000000000000000000000000000001000000000000100111000000010001001011000000101001001110000000011110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110011011100000101000001101100000000000001000000000010000000000000000000001000000110111000000000000100111000000000010011100000000000000000000000000000000000010000000000001001110000000100010010110000001010010011100000000111100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101010111000001010100011011000000000000010000000000100000000000000000000010000001101010000000001001001110000000100100111100000000000000000000000000000000000100000000100110011100000001100100101100000011100100111000000001111000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010101110000010101000110110000000000000100000000001000000000000000000000100000011011100100000010010011110000001001001110000000000000000000000000000000000001000000001001100111000000011001001011000000111001001110000000011110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110101011100000101000001101100100000000001000000000010000000000000000000001000000110101001000000100100111100000010010011110000000000000000000000000000000000010000000010011001110000000110010010110000001110010011100000000111100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101010111000001010000011011001000000000010000000000100000000000000000000010000001101110000000001001001110000000100100111000000000000000000000000000000000000100000000100110011100000001100100101100000011100100111000000001111000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000101110000010101000110110010000000000100000000001000000000000000000000100000011010100000000001010011100000000101001111000000000000000000000000000000000001000000000100100111000010010101001011000000101101001110000000011110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001011100000101010001101100100000000001000000000010000000000000000000001000000110111001000000010100111100000001010011100000000000000000000000000000000000010000000001001001110000100101010010110000001011010011100000000111100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100010111000001010000011011000000000000000000000000000000000001000000000010000001101010010000000101001111000000010100111100000000000000000000000000000000000100000000010010011100001001010100101100000010110100111000000001111000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000101110000010100000110110000000000000000000000000000000000010000000000100000011011100000000001010011100000000101001110000000000000000000000000000000000001000000000100100111000010010101001011000000101101001110000000011110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110011100000101010001101100000000000000000000000000000000000100000000001000000110101000000000110100111000000011010011110000000000000000000000000000000000010000000011011001110000100111010010110000001111010011100000000111100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101100111000001010100011011000000000000000000000000000000000001000000000010000001101110010000001101001111000000110100111000000000000000000000000000000000000100000000110110011100001001110100101100000011110100111000000001111000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011001110000010100000110110010000000000000000000000000000000010000000000100000011010100100000011010011110000001101001111000000000000000000000000000000000001000000001101100111000010011101001011000000111101001110000000011110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110011100000101000001101100100000000000000000000000000000000100000000001000000110111000000000110100111000000011010011100000000000000000000000000000000000010000000011011001110000100111010010110000001111010011100000000111100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100100111000001010100011011001000000000000000000000000000000001000000000010000001101010000000000011001110000000001100111100000000000000000000000000000000000100000000001010011100000001001100111100000010101100111000000001111000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001001110000010101000110110010000000000000000000000000000000010000000000100000011011100100000000110011110000000011001110000000000000000000000000000000000001000000000010100111000000010011001111000000101011001110000000011110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110010011100000101000001101100000000000001000000000000000000000100000000001000000110101001000000001100111100000000110011110000000000000000000000000000000000010000000000101001110000000100110011110000001010110011100000000111100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100100111000001010000011011000000000000010000000000000000000001000000000010000001101110000000000011001110000000001100111000000000000000000000000000000000000100000000001010011100000001001100111100000010101100111000000001111000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010001110000010101000110110000000000000100000000000000000000010000000000100000011010100000000010110011100000001011001111000000000000000000000000000000000001000000001011100111000000011011001111000000111011001110000000011110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100011100000101010001101100000000000001000000000000000000000100000000001000000110111001000000101100111100000010110011100000000000000000000000000000000000010000000010111001110000000110110011110000001110110011100000000111100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101000111000001010000011011001000000000010000000000000000000001000000000010000001101010010000001011001111000000101100111100000000000000000000000000000000000100000000101110011100000001101100111100000011101100111000000001111000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010001110000010100000110110010000000000100000000000000000000010000000000100000011011100000000010110011100000001011001110000000000000000000000000000000000001000000001011100111000000011011001111000000111011001110000000011110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000011100000101010001101100100000000001000000000000000000000100000000001000000110101000000000011100111000000001110011110000000000000000000000000000000000010000000001101001110000100101110011110000001011110011100000000111100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100000111000001010100011011001000000000010000000000000000000001000000000010000001101110010000000111001111000000011100111000000000000000000000000000000000000100000000011010011100001001011100111100000010111100111000000001111000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000001110000010100000110110000000000000000000000001000000000010000000000100000011010100100000001110011110000000111001111000000000000000000000000000000000001000000000110100111000010010111001111000000101111001110000000011110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000011100000101000001101100000000000000000000000010000000000100000000001000000110111000000000011100111000000001110011100000000000000000000000000000000000010000000001101001110000100101110011110000001011110011100000000111100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101111011000001010100011011000000000000000000000000100000000001000000000010000001101010000000001111001110000000111100111100000000000000000000000000000000000100000000111110011100001001111100111100000011111100111000000001111000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011110110000010101000110110000000000000000000000001000000000010000000000100000011011100100000011110011110000001111001110000000000000000000000000000000000001000000001111100111000010011111001111000000111111001110000000011110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110111101100000101000001101100100000000000000000000010000000000100000000001000000110101001000000111100111100000011110011110000000000000000000000000000000000010000000011111001110000100111110011110000001111110011100000000111100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101111011000001010000011011001000000000000000000000100000000001000000000010000001101110000000001111001110000000111100111000000000000000000000000000000000000100000000111110011100001001111100111100000011111100111000000001111000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001110110000010101000110110010000000000000000000001000000000010000000000100000011010100000000000001011100000000000101111000000000000000000000000000000000001000000000000010111000000010000101011000000100000101110010000011110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011101100000101010001101100100000000000000000000010000000000100000000001000000110111001000000000010111100000000001011100000000000000000000000000000000000010000000000000101110000000100001010110000001000001011100100000111100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100111011000001010000011011000000000000010000000000100000000001000000000010000001101010010000000000101111000000000010111100000000000000000000000000000000000100000000000001011100000001000010101100000010000010111001000001111000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001110110000010100000110110000000000000100000000001000000000010000000000100000011011100000000000001011100000000000101110000000000000000000000000000000000001000000000000010111000000010000101011000000100000101110010000011110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110101101100000101010001101100000000000001000000000010000000000100000000001000000110101000000000100010111000000010001011110000000000000000000000000000000000010000000010010101110000000110001010110000001100001011100100000111100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101011011000001010100011011000000000000010000000000100000000001000000000010000001101110010000001000101111000000100010111000000000000000000000000000000000000100000000100101011100000001100010101100000011000010111001000001111000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010110110000010100000110110010000000000100000000001000000000010000000000100000011010100100000010001011110000001000101111000000000000000000000000000000000001000000001001010111000000011000101011000000110000101110010000011110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110101101100000101000001101100100000000001000000000010000000000100000000001000000110111000000000100010111000000010001011100000000000000000000000000000000000010000000010010101110000000110001010110000001100001011100100000111100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100011011000001010100011011001000000000010000000000100000000001000000000010000001101010000000000100101110000000010010111100000000000000000000000000000000000100000000010001011100001001010010101100000010010010111001000001111000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000110110000010101000110110010000000000100000000001000000000010000000000100000011011100100000001001011110000000100101110000000000000000000000000000000000001000000000100010111000010010100101011000000100100101110010000011110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110001101100000101000001101100000000000000000000000000000000000000000000000000010110101001000000010010111100000001001011110000000000000000000000000000000000010000000001000101110000100101001010110000001001001011100100000111100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100011011000001010000011011000000000000000000000000000000000000000000000000000101101110000000000100101110000000010010111000000000000000000000000000000000000100000000010001011100001001010010101100000010010010111001000001111000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011010110000010101000110110000000000000000000000000000000000000000000000000001011010100000000011001011100000001100101111000000000000000000000000000000000001000000001101010111000010011100101011000000110100101110010000011110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110101100000101010001101100000000000000000000000000000000000000000000000000010110111001000000110010111100000011001011100000000000000000000000000000000000010000000011010101110000100111001010110000001101001011100100000111100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101101011000001010000011011001000000000000000000000000000000000000000000000000101101010010000001100101111000000110010111100000000000000000000000000000000000100000000110101011100001001110010101100000011010010111001000001111000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011010110000010100000110110010000000000000000000000000000000000000000000000001011011100000000011001011100000001100101110000000000000000000000000000000000001000000001101010111000010011100101011000000110100101110010000011110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010101100000101010001101100100000000000000000000000000000000000000000000000010110101000000000001010111000000000101011110000000000000000000000000000000000010000000000100101110000000100101011110000001000101011100100000111100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100101011000001010100011011001000000000000000000000000000000000000000000000000101101110010000000010101111000000001010111000000000000000000000000000000000000100000000001001011100000001001010111100000010001010111001000001111000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001010110000010100000110110000000000000100000000000000000000000000000000000001011010100100000000101011110000000010101111000000000000000000000000000000000001000000000010010111000000010010101111000000100010101110010000011110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010101100000101000001101100000000000001000000000000000000000000000000000000010110111000000000001010111000000000101011100000000000000000000000000000000000010000000000100101110000000100101011110000001000101011100100000111100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101001011000001010100011011000000000000010000000000000000000000000000000000000101101010000000001010101110000000101010111100000000000000000000000000000000000100000000101101011100000001101010111100000011001010111001000001111000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010010110000010101000110110000000000000100000000000000000000000000000000000001011011100100000010101011110000001010101110000000000000000000000000000000000001000000001011010111000000011010101111000000110010101110010000011110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110100101100000101000001101100100000000001000000000000000000000000000000000000010110101001000000101010111100000010101011110000000000000000000000000000000000010000000010110101110000000110101011110000001100101011100100000111100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101001011000001010000011011001000000000010000000000000000000000000000000000000101101110000000001010101110000000101010111000000000000000000000000000000000000100000000101101011100000001101010111100000011001010111001000001111000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000010110000010101000110110010000000000100000000000000000000000000000000000001011010100000000001101011100000000110101111000000000000000000000000000000000001000000000110010111000010010110101111000000100110101110010000011110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000101100000101010001101100100000000001000000000000000000000000000000000000010110111001000000011010111100000001101011100000000000000000000000000000000000010000000001100101110000100101101011110000001001101011100100000111100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100001011000001010000011011000000000000000000000000100000000000000000000000000101101010010000000110101111000000011010111100000000000000000000000000000000000100000000011001011100001001011010111100000010011010111001000001111000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000010110000010100000110110000000000000000000000001000000000000000000000000001011011100000000001101011100000000110101110000000000000000000000000000000000001000000000110010111000010010110101111000000100110101110010000011110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111001100000101010001101100000000000000000000000010000000000000000000000000010110101000000000111010111000000011101011110000000000000000000000000000000000010000000011110101110000100111101011110000001101101011100100000111100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101110011000001010100011011000000000000000000000000100000000000000000000000000101101110010000001110101111000000111010111000000000000000000000000000000000000100000000111101011100001001111010111100000011011010111001000001111000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011100110000010100000110110010000000000000000000001000000000000000000000000001011010100100000011101011110000001110101111000000000000000000000000000000000001000000001111010111000010011110101111000000110110101110010000011110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111001100000101000001101100100000000000000000000010000000000000000000000000010110111000000000111010111000000011101011100000000000000000000000000000000000010000000011110101110000100111101011110000001101101011100100000111100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100110011000001010100011011001000000000000000000000100000000000000000000000000101101010000000000001101110000000000110111100000000000000000000000000000000000100000000000011011100000001000110101100000010100110111001000001111000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001100110000010101000110110010000000000000000000001000000000000000000000000001011011100100000000011011110000000001101110000000000000000000000000000000000001000000000000110111000000010001101011000000101001101110010000011110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011001100000101000001101100000000000001000000000010000000000000000000000000010110101001000000000110111100000000011011110000000000000000000000000000000000010000000000001101110000000100011010110000001010011011100100000111100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100110011000001010000011011000000000000010000000000100000000000000000000000000101101110000000000001101110000000000110111000000000000000000000000000000000000100000000000011011100000001000110101100000010100110111001000001111000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010100110000010101000110110000000000000100000000001000000000000000000000000001011010100000000010011011100000001001101111000000000000000000000000000000000001000000001001110111000000011001101011000000111001101110010000011110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110101001100000101010001101100000000000001000000000010000000000000000000000000010110111001000000100110111100000010011011100000000000000000000000000000000000010000000010011101110000000110011010110000001110011011100100000111100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101010011000001010000011011001000000000010000000000100000000000000000000000000101101010010000001001101111000000100110111100000000000000000000000000000000000100000000100111011100000001100110101100000011100110111001000001111000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010100110000010100000110110010000000000100000000001000000000000000000000000001011011100000000010011011100000001001101110000000000000000000000000000000000001000000001001110111000000011001101011000000111001101110010000011110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110001001100000101010001101100100000000001000000000010000000000000000000000000010110101000000000010110111000000001011011110000000000000000000000000000000000010000000001001101110000100101011010110000001011011011100100000111100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100010011000001010100011011001000000000010000000000100000000000000000000000000101101110010000000101101111000000010110111000000000000000000000000000000000000100000000010011011100001001010110101100000010110110111001000001111000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000100110000010100000110110000000000000000000000000000000000010000000000000001011010100100000001011011110000000101101111000000000000000000000000000000000001000000000100110111000010010101101011000000101101101110010000011110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110001001100000101000001101100000000000000000000000000000000000100000000000000010110111000000000010110111000000001011011100000000000000000000000000000000000010000000001001101110000100101011010110000001011011011100100000111100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101100011000001010100011011000000000000000000000000000000000001000000000000000101101010000000001101101110000000110110111100000000000000000000000000000000000100000000110111011100001001110110101100000011110110111001000001111000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011000110000010101000110110000000000000000000000000000000000010000000000000001011011100100000011011011110000001101101110000000000000000000000000000000000001000000001101110111000010011101101011000000111101101110010000011110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110001100000101000001101100100000000000000000000000000000000100000000000000010110101001000000110110111100000011011011110000000000000000000000000000000000010000000011011101110000100111011010110000001111011011100100000111100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101100011000001010000011011001000000000000000000000000000000001000000000000000101101110000000001101101110000000110110111000000000000000000000000000000000000100000000110111011100001001110110101100000011110110111001000001111000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001000110000010101000110110010000000000000000000000000000000010000000000000001011010100000000000111011100000000011101111000000000000000000000000000000000001000000000010110111000000010011101111000000101011101110010000011110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010001100000101010001101100100000000000000000000000000000000100000000000000010110111001000000001110111100000000111011100000000000000000000000000000000000010000000000101101110000000100111011110000001010111011100100000111100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100100011000001010000011011000000000000010000000000000000000001000000000000000101101010010000000011101111000000001110111100000000000000000000000000000000000100000000001011011100000001001110111100000010101110111001000001111000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001000110000010100000110110000000000000100000000000000000000010000000000000001011011100000000000111011100000000011101110000000000000000000000000000000000001000000000010110111000000010011101111000000101011101110010000011110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110100001100000101010001101100000000000001000000000000000000000100000000000000010110101000000000101110111000000010111011110000000000000000000000000000000000010000000010111101110000000110111011110000001110111011100100000111100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101000011000001010100011011000000000000010000000000000000000001000000000000000101101110010000001011101111000000101110111000000000000000000000000000000000000100000000101111011100000001101110111100000011101110111001000001111000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010000110000010100000110110010000000000100000000000000000000010000000000000001011010100100000010111011110000001011101111000000000000000000000000000000000001000000001011110111000000011011101111000000111011101110010000011110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110100001100000101000001101100100000000001000000000000000000000100000000000000010110111000000000101110111000000010111011100000000000000000000000000000000000010000000010111101110000000110111011110000001110111011100100000111100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100000011000001010100011011001000000000010000000000000000000001000000000000000101101010000000000111101110000000011110111100000000000000000000000000000000000100000000011011011100001001011110111100000010111110111001000001111000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000000110000010101000110110010000000000100000000000000000000010000000000000001011011100100000001111011110000000111101110000000000000000000000000000000000001000000000110110111000010010111101111000000101111101110010000011110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000001100000101000001101100000000000000000000000010000000000100000000000000010110101001000000011110111100000001111011110000000000000000000000000000000000010000000001101101110000100101111011110000001011111011100100000111100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100000011000001010000011011000000000000000000000000100000000001000000000000000101101110000000000111101110000000011110111000000000000000000000000000000000000100000000011011011100001001011110111100000010111110111001000001111000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011111010000010101000110110000000000000000000000001000000000010000000000000001011010100000000011111011100000001111101111000000000000000000000000000000000001000000001111110111000010011111101111000000111111101110010000011110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111110100000101010001101100000000000000000000000010000000000100000000000000010110111001000000111110111100000011111011100000000000000000000000000000000000010000000011111101110000100111111011110000001111111011100100000111100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101111101000001010000011011001000000000000000000000100000000001000000000000000101101010010000001111101111000000111110111100000000000000000000000000000000000100000000111111011100001001111110111100000011111110111001000001111000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011111010000010100000110110010000000000000000000001000000000010000000000000001011011100000000011111011100000001111101110000000000000000000000000000000000001000000001111110111000010011111101111000000111111101110010000011110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011110100000101010001101100100000000000000000000010000000000100000000000000010110101000000000000001111000000000000111110000000000000000000000000000000000010000000000000011110000000100000110110000001000000111100000001111100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100111101000001010100011011001000000000000000000000100000000001000000000000000101101110010000000000011111000000000001111000000000000000000000000000000000000100000000000000111100000001000001101100000010000001111000000011111000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001111010000010100000110110000000000000100000000001000000000010000000000000001011010100100000000000111110000000000011111000000000000000000000000000000000001000000000000001111000000010000011011000000100000011110000000111110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011110100000101000001101100000000000001000000000010000000000100000000000000010110111000000000000001111000000000000111100000000000000000000000000000000000010000000000000011110000000100000110110000001000000111100000001111100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101011101000001010100011011000000000000010000000000100000000001000000000000000101101010000000001000011110000000100001111100000000000000000000000000000000000100000000100100111100000001100001101100000011000001111000000011111000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010111010000010101000110110000000000000100000000001000000000010000000000000001011011100100000010000111110000001000011110000000000000000000000000000000000001000000001001001111000000011000011011000000110000011110000000111110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110101110100000101000001101100100000000001000000000010000000000100000000000000010110101001000000100001111100000010000111110000000000000000000000000000000000010000000010010011110000000110000110110000001100000111100000001111100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101011101000001010000011011001000000000010000000000100000000001000000000000000101101110000000001000011110000000100001111000000000000000000000000000000000000100000000100100111100000001100001101100000011000001111000000011111000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000111010000010101000110110010000000000100000000001000000000010000000000000001011010100000000001000111100000000100011111000000000000000000000000000000000001000000000100001111000010010100011011000000100100011110000000111110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110001110100000101010001101100100000000001000000000010000000000100000000000000010110111001000000010001111100000001000111100000000000000000000000000000000000010000000001000011110000100101000110110000001001000111100000001111100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100011101000001010000011011000000000000000000000000000000000000000000000010000101101010010000000100011111000000010001111100000000000000000000000000000000000100000000010000111100001001010001101100000010010001111000000011111000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000111010000010100000110110000000000000000000000000000000000000000000000100001011011100000000001000111100000000100011110000000000000000000000000000000000001000000000100001111000010010100011011000000100100011110000000111110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110110100000101010001101100000000000000000000000000000000000000000000001000010110101000000000110001111000000011000111110000000000000000000000000000000000010000000011010011110000100111000110110000001101000111100000001111100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101101101000001010100011011000000000000000000000000000000000000000000000010000101101110010000001100011111000000110001111000000000000000000000000000000000000100000000110100111100001001110001101100000011010001111000000011111000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011011010000010100000110110010000000000000000000000000000000000000000000100001011010100100000011000111110000001100011111000000000000000000000000000000000001000000001101001111000010011100011011000000110100011110000000111110000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110110100000101000001101100100000000000000000000000000000000000000000001000010110111000000000110001111000000011000111100000000000000000000000000000000000010000000011010011110000100111000110110000001101000111100000001111100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100101101000001010100011011001000000000000000000000000000000000000000000010000101101010000000000010011110000000001001111100000000000000000000000000000000000100000000001000111100000001001001111100000010001001111000000011111000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001011010000010101000110110010000000000000000000000000000000000000000000100001011011100100000000100111110000000010011110000000000000000000000000000000000001000000000010001111000000010010011111000000100010011110000000111110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110010110100000101000001101100000000000001000000000000000000000000000000001000010110101001000000001001111100000000100111110000000000000000000000000000000000010000000000100011110000000100100111110000001000100111100000001111100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100101101000001010000011011000000000000010000000000000000000000000000000010000101101110000000000010011110000000001001111000000000000000000000000000000000000100000000001000111100000001001001111100000010001001111000000011111000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010011010000010101000110110000000000000100000000000000000000000000000000100001011010100000000010100111100000001010011111000000000000000000000000000000000001000000001011001111000000011010011111000000110010011110000000111110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110100110100000101010001101100000000000001000000000000000000000000000000001000010110111001000000101001111100000010100111100000000000000000000000000000000000010000000010110011110000000110100111110000001100100111100000001111100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101001101000001010000011011001000000000010000000000000000000000000000000010000101101010010000001010011111000000101001111100000000000000000000000000000000000100000000101100111100000001101001111100000011001001111000000011111000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010011010000010100000110110010000000000100000000000000000000000000000000100001011011100000000010100111100000001010011110000000000000000000000000000000000001000000001011001111000000011010011111000000110010011110000000111110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000110100000101010001101100100000000001000000000000000000000000000000001000010110101000000000011001111000000001100111110000000000000000000000000000000000010000000001100011110000100101100111110000001001100111100000001111100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100001101000001010100011011001000000000010000000000000000000000000000000010000101101110010000000110011111000000011001111000000000000000000000000000000000000100000000011000111100001001011001111100000010011001111000000011111000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000011010000010100000110110000000000000000000000001000000000000000000000100001011010100100000001100111110000000110011111000000000000000000000000000000000001000000000110001111000010010110011111000000100110011110000000111110000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000110100000101000001101100000000000000000000000010000000000000000000001000010110111000000000011001111000000001100111100000000000000000000000000000000000010000000001100011110000100101100111110000001001100111100000001111100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101110101000001010100011011000000000000000000000000100000000000000000000010000101101010000000001110011110000000111001111100000000000000000000000000000000000100000000111100111100001001111001111100000011011001111000000011111000000000001010000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000100000000000000000000000000000000000111011101010000010101000110110000000000000000000000001000000000000000000000100001011011100100000011100111110000001110011110000000000000000000000000000000000001000000001111001111000010011110011111000000110110011110000000111110000000000011100000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010011000000000000000000000000000000000001110111010100000101000001101100100000000000000000000010000000000000000000001000010110101001000000111001111100000011100111110000000000000000000000000000000000010000000011110011110000100111100111110000001101100111100000001111100000000000101000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100010000000000000000000000000000000000011101110101000001010000011011001000000000000000000000100000000000000000000010000101101110000000001110011110000000111001111000000000000000000000000000000000000100000000111100111100001001111001111100000011011001111000000011111000000000001010000000000100000000000000000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000000000000000000111001101010000010101000110110010000000000000000000001000000000000000000000100001011010100000000000010111100000000001011111000000000000000000000000000000000001000000000000101111000000010001011011000000101001011110000000111110000000000010100000000001000000000000000000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000000000000000001110011010100000101010001101100100000000000000000000010000000000000000000001000010110111001000000000101111100000000010111100000000000000000000000000000000000010000000000001011110000000100010110110000001010010111100000001111100000000000111000000000010000000000000000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000000000000000000011100110101000001010000011011000000000000010000000000100000000000000000000010000101101010010000000001011111000000000101111100000000000000000000000000000000000100000000000010111100000001000101101100000010100101111000000011111000000000001110000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010000000000000111001101010000010100000110110000000000000100000000001000000000000000000000100001011011100000000000010111100000000001011110000000000000000000000000000000000001000000000000101111000000010001011011000000101001011110000000111110000000000011100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100000000000001110101010100000101010001101100000000000001000000000010000000000000000000001000010110101000000000100101111000000010010111110000000000000000000000000000000000010000000010011011110000000110010110110000001110010111100000001111100000000000111000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001000000000000011101010101000001010100011011000000000000010000000000100000000000000000000010000101101110010000001001011111000000100101111000000000000000000000000000000000000100000000100110111100000001100101101100000011100101111000000011111000000000001110000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010000000000000111010101010000010100000110110010000000000100000000001000000000000000000000100001011010100100000010010111110000001001011111000000000000000000000000000000000001000000001001101111000000011001011011000000111001011110000000111110000000000011100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100000000000001110101010100000101000001101100100000000001000000000010000000000000000000001000010110111000000000100101111000000010010111100000000000000000000000000000000000010000000010011011110000000110010110110000001110010111100000001111100000000000111000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001000000000000011100010101000001010100011011001000000000010000000000100000000000000000000010000101101010000000000101011110000000010101111100000000000000000000000000000000000100000000010010111100001001010101101100000010110101111000000011111000000000001010000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010000000000000111000101010000010101000110110010000000000100000000001000000000000000000000100001011011100100000001010111110000000101011110000000000000000000000000000000000001000000000100101111000010010101011011000000101101011110000000111110000000000010100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100000000000001110001010100000101000001101100000000000000000000000000000000000100000000001000010110101001000000010101111100000001010111110000000000000000000000000000000000010000000001001011110000100101010110110000001011010111100000001111100000000000101000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001000000000000011100010101000001010000011011000000000000000000000000000000000001000000000010000101101110000000000101011110000000010101111000000000000000000000000000000000000100000000010010111100001001010101101100000010110101111000000011111000000000001010000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010000000000000111011001010000010101000110110000000000000000000000000000000000010000000000100001011010100000000011010111100000001101011111000000000000000000000000000000000001000000001101101111000010011101011011000000111101011110000000111110000000000011100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100000000000001110110010100000101010001101100000000000000000000000000000000000100000000001000010110111001000000110101111100000011010111100000000000000000000000000000000000010000000011011011110000100111010110110000001111010111100000001111100000000000111000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001000000000000011101100101000001010000011011001000000000000000000000000000000001000000000010000101101010010000001101011111000000110101111100000000000000000000000000000000000100000000110110111100001001110101101100000011110101111000000011111000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111011001010000010100000110110010000000000000000000000000000000010000000000100001011011100000000011010111100000001101011110000000000000000000000000000000000001000000001101101111000010011101011011000000111101011110000000111110000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110010010100000101010001101100100000000000000000000000000000000100000000001000010110101000000000001101111000000000110111110000000000000000000000000000000000010000000000101011110000000100110111110000001010110111100000001111100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011100100101000001010100011011001000000000000000000000000000000001000000000010000101101110010000000011011111000000001101111000000000000000000000000000000000000100000000001010111100000001001101111100000010101101111000000011111000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111001001010000010100000110110000000000000100000000000000000000010000000000100001011010100100000000110111110000000011011111000000000000000000000000000000000001000000000010101111000000010011011111000000101011011110000000111110000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110010010100000101000001101100000000000001000000000000000000000100000000001000010110111000000000001101111000000000110111100000000000000000000000000000000000010000000000101011110000000100110111110000001010110111100000001111100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011101000101000001010100011011000000000000010000000000000000000001000000000010000101101010000000001011011110000000101101111100000000000000000000000000000000000100000000101110111100000001101101111100000011101101111000000011111000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111010001010000010101000110110000000000000100000000000000000000010000000000100001011011100100000010110111110000001011011110000000000000000000000000000000000001000000001011101111000000011011011111000000111011011110000000111110000000000010100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100100000000001110100010100000101000001101100100000000001000000000000000000000100000000001000010110101001000000101101111100000010110111110000000000000000000000000000000000010000000010111011110000000110110111110000001110110111100000001111100000000000101000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001000000000011101000101000001010000011011001000000000010000000000000000000001000000000010000101101110000000001011011110000000101101111000000000000000000000000000000000000100000000101110111100000001101101111100000011101101111000000011111000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111000001010000010101000110110010000000000100000000000000000000010000000000100001011010100000000001110111100000000111011111000000000000000000000000000000000001000000000110101111000010010111011111000000101111011110000000111110000000000010100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100100000000001110000010100000101010001101100100000000001000000000000000000000100000000001000010110111001000000011101111100000001110111100000000000000000000000000000000000010000000001101011110000100101110111110000001011110111100000001111100000000000101000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001000000000011100000101000001010000011011000000000000000000000000100000000001000000000010000101101010010000000111011111000000011101111100000000000000000000000000000000000100000000011010111100001001011101111100000010111101111000000011111000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111000001010000010100000110110000000000000000000000001000000000010000000000100001011011100000000001110111100000000111011110000000000000000000000000000000000001000000000110101111000010010111011111000000101111011110000000111110000000000010100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100100000000001110111100100000101010001101100000000000000000000000010000000000100000000001000010110101000000000111101111000000011110111110000000000000000000000000000000000010000000011111011110000100111110111110000001111110111100000001111100000000000101000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001000000000011101111001000001010100011011000000000000000000000000100000000001000000000010000101101110010000001111011111000000111101111000000000000000000000000000000000000100000000111110111100001001111101111100000011111101111000000011111000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111011110010000010100000110110010000000000000000000001000000000010000000000100001011010100100000011110111110000001111011111000000000000000000000000000000000001000000001111101111000010011111011111000000111111011110000000111110000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110111100100000101000001101100100000000000000000000010000000000100000000001000010110111000000000111101111000000011110111100000000000000000000000000000000000010000000011111011110000100111110111110000001111110111100000001111100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011100111001000001010100011011001000000000000000000000100000000001000000000010000101101010000000000000111110000000000011111100000000000000000000000000000000000100000000000001111100000001000011101100000010000011111001000011111000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111001110010000010101000110110010000000000000000000001000000000010000000000100001011011100100000000001111110000000000111110000000000000000000000000000000000001000000000000011111000000010000111011000000100000111110010000111110000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110011100100000101000001101100000000000001000000000010000000000100000000001000010110101001000000000011111100000000001111110000000000000000000000000000000000010000000000000111110000000100001110110000001000001111100100001111100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011100111001000001010000011011000000000000010000000000100000000001000000000010000101101110000000000000111110000000000011111000000000000000000000000000000000000100000000000001111100000001000011101100000010000011111001000011111000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111010110010000010101000110110000000000000100000000001000000000010000000000100001011010100000000010001111100000001000111111000000000000000000000000000000000001000000001001011111000000011000111011000000110000111110010000111110000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110101100100000101010001101100000000000001000000000010000000000100000000001000010110111001000000100011111100000010001111100000000000000000000000000000000000010000000010010111110000000110001110110000001100001111100100001111100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011101011001000001010000011011001000000000010000000000100000000001000000000010000101101010010000001000111111000000100011111100000000000000000000000000000000000100000000100101111100000001100011101100000011000011111001000011111000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111010110010000010100000110110010000000000100000000001000000000010000000000100001011011100000000010001111100000001000111110000000000000000000000000000000000001000000001001011111000000011000111011000000110000111110010000111110000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110001100100000101010001101100100000000001000000000010000000000100000000001000010110101000000000010011111000000001001111110000000000000000000000000000000000010000000001000111110000100101001110110000001001001111100100001111100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011100011001000001010100011011001000000000010000000000100000000001000000000010000101101110010000000100111111000000010011111000000000000000000000000000000000000100000000010001111100001001010011101100000010010011111001000011111000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111000110010000010100000110110000000000000000000000000000000000000000000000000000111010100100000001001111110000000100111111000000000000000000000000000000000001000000000100011111000010010100111011000000100100111110010000111110000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110001100100000101000001101100000000000000000000000000000000000000000000000000001110111000000000010011111000000001001111100000000000000000000000000000000000010000000001000111110000100101001110110000001001001111100100001111100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011101101001000001010100011011000000000000000000000000000000000000000000000000000011101010000000001100111110000000110011111100000000000000000000000000000000000100000000110101111100001001110011101100000011010011111001000011111000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111011010010000010101000110110000000000000000000000000000000000000000000000000000111011100100000011001111110000001100111110000000000000000000000000000000000001000000001101011111000010011100111011000000110100111110010000111110000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110110100100000101000001101100100000000000000000000000000000000000000000000000001110101001000000110011111100000011001111110000000000000000000000000000000000010000000011010111110000100111001110110000001101001111100100001111100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011101101001000001010000011011001000000000000000000000000000000000000000000000000011101110000000001100111110000000110011111000000000000000000000000000000000000100000000110101111100001001110011101100000011010011111001000011111000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111001010010000010101000110110010000000000000000000000000000000000000000000000000111010100000000000101111100000000010111111000000000000000000000000000000000001000000000010011111000000010010111111000000100010111110010000111110000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110010100100000101010001101100100000000000000000000000000000000000000000000000001110111001000000001011111100000000101111100000000000000000000000000000000000010000000000100111110000000100101111110000001000101111100100001111100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011100101001000001010000011011000000000000010000000000000000000000000000000000000011101010010000000010111111000000001011111100000000000000000000000000000000000100000000001001111100000001001011111100000010001011111001000011111000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111001010010000010100000110110000000000000100000000000000000000000000000000000000111011100000000000101111100000000010111110000000000000000000000000000000000001000000000010011111000000010010111111000000100010111110010000111110000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110100100100000101010001101100000000000001000000000000000000000000000000000000001110101000000000101011111000000010101111110000000000000000000000000000000000010000000010110111110000000110101111110000001100101111100100001111100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011101001001000001010100011011000000000000010000000000000000000000000000000000000011101110010000001010111111000000101011111000000000000000000000000000000000000100000000101101111100000001101011111100000011001011111001000011111000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111010010010000010100000110110010000000000100000000000000000000000000000000000000111010100100000010101111110000001010111111000000000000000000000000000000000001000000001011011111000000011010111111000000110010111110010000111110000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110100100100000101000001101100100000000001000000000000000000000000000000000000001110111000000000101011111000000010101111100000000000000000000000000000000000010000000010110111110000000110101111110000001100101111100100001111100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011100001001000001010100011011001000000000010000000000000000000000000000000000000011101010000000000110111110000000011011111100000000000000000000000000000000000100000000011001111100001001011011111100000010011011111001000011111000000000001010000000000100100000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001001000000010011000000000111000010010000010101000110110010000000000100000000000000000000000000000000000000111011100100000001101111110000000110111110000000000000000000000000000000000001000000000110011111000010010110111111000000100110111110010000111110000000000011100000000001001000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010010000000100110000000001110000100100000101000001101100000000000000000000000010000000000000000000000000001110101001000000011011111100000001101111110000000000000000000000000000000000010000000001100111110000100101101111110000001001101111100100001111100000000000111000000000010010000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100100000001001100000000011100001001000001010000011011000000000000000000000000100000000000000000000000000011101110000000000110111110000000011011111000000000000000000000000000000000000100000000011001111100001001011011111100000010011011111001000011111000000000001110000000000100100000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001001000000010011000000000111011100010000010101000110110000000000000000000000001000000000000000000000000000111010100000000011101111100000001110111111000000000000000000000000000000000001000000001111011111000010011110111111000000110110111110010000111110000000000011100000000001001000000010011100000000010111000000000000000000000000000000000000000000000000000000010011000000000010010000000100111000000001110111000100000101010001101100000000000000000000000010000000000000000000000000001110111001000000111011111100000011101111100000000000000000000000000000000000010000000011110111110000100111101111110000001101101111100100001111100000000000111000000000010010000000100111000000000101110000000000000000000000000000000000000000000000000000000100110000000000100100000001001110000000011101110001000001010000011011001000000000000000000000100000000000000000000000000011101010010000001110111111000000111011111100000000000000000000000000000000000100000000111101111100001001111011111100000011011011111001000011111000000000001110100100000100100000001001110001000001011100000000000000000000000000000000000000000000000000000001001101001000001001000000010011100010000111011100010000010100000110110010000000000000000000001000000000000000000000000000111011100000000011101111100000001110111110000000000000000000000000000000000001000000001111011111000010011110111111000000110110111110010000111110000000000011101001000001001000000010011100010000010111000000000000000000000000000000000000000000000000000000010011010010000010010000000100111000100001110011000100000101010001101100100000000000000000000010000000000000000000000000001110101000000000000111111000000000011111110000000000000000000000000000000000010000000000001111110000000000000000000000000010000000000100001111100000000000101010010000010010000000100111000100000001110000000000000000000000000000000000000000000000000000000100010100100000100100000001001110001000011100110001000001010100011011001000000000000000000000100000000000000000000000000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000011111100000000000000000000000000100000000001000011111000000000001110100100000100100000001001110001000000011100000000000000000000000000000000000000000000000000001001001101001000001001000000010011100010000111001100010000010100000110110000000000000100000000001000000000000000000000000000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000111111000000000000000000000000001000000000010000111110000000000010101001000001001000000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010000010010000000100111010100001110011000100000101000001101100000000000001000000000010000000000000000000000000001110111000000000000111111000000000011111100000000000000000000000000000000000010000000000001111110000000000000000000000000010000000000100001111100000000000101010010000010010000000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000100100000001001110101000011101010001000001010100011011000000000000010000000000100000000000000000000000000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100100000100100000001001110101000000011100000000000000000000000000000000000000000000000000000001000101001000001001000000010011101010000111010100010000010101000110110000000000000100000000001000000000000000000000000000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001000001001000000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010000010010000000100111010100001110101000100000101000001101100100000000001000000000010000000000000000000000000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000010010000000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000100100000001001110101000011101010001000001010000011011001000000000010000000000100000000000000000000000000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000100100000001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001000000010011101010000111000100010000010101000110110010000000000100000000001000000000000000000000000000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000010011010000100111010100001110001000100000101010001101100100000000001000000000010000000000000000000000000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000010011010000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000100110100001001110101000011100010001000001010000011011000000000000000000000000000000000001000000000000000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001101000010011101010000111000100010000010100000110110000000000000000000000000000000000010000000000000000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000010011010000100111010100001110110000100000101010001101100000000000000000000000000000000000100000000000000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000010011010000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000100110100001001110101000011101100001000001010100011011000000000000000000000000000000000001000000000000000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001101000010011101010000111011000010000010100000110110010000000000000000000000000000000010000000000000000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010000010011010000100111010100001110110000100000101000001101100100000000000000000000000000000000100000000000000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000010011010000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000100110100001001110101000011100100001000001010100011011001000000000000000000000000000000001000000000000000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001000101001000001001101000010011101010000111001000010000010101000110110010000000000000000000000000000000010000000000000000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010000010011010000100111010100001110010000100000101000001101100000000000001000000000000000000000100000000000000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000011011010000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000110110100001001110101000011100100001000001010000011011000000000000010000000000000000000001000000000000000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000110110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001101101000010011101010000111010000010000010101000110110000000000000100000000000000000000010000000000000000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001101101000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000011011010000100111010100001110100000100000101010001101100000000000001000000000000000000000100000000000000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010100011011010000100111010100000001110000000000000000000000000000000000000000000000000000000100110100101000110110100001001110101000011101000001000001010000011011001000000000010000000000000000000001000000000000000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100101000110110110001001110101000000011100000000000000000000000000000000000000000000000000000001001101001010001101101100010011101010000111010000010000010100000110110010000000000100000000000000000000010000000000000000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001010001101101100010011101010000000111000000000000000000000000000000000000000000000000000000010011010010100011011011000100111010100001110000000100000101010001101100100000000001000000000000000000000100000000000000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010100011011011000100111010100000001110000000000000000000000000000000000000000000000000000000100110100101000110110110001001110101000011100000001000001010100011011001000000000010000000000000000000001000000000000000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100101000110111110001001110101000000011100000000000000000000000000000000000000000000000000000001000101001010001101111100010011101010000111000000010000010100000110110000000000000000000000001000000000010000000000000000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001010001101111100010011101010000000111000000000000000000000000000000000000000000000000000000010001010010100011011111000100111010100001110000000100000101000001101100000000000000000000000010000000000100000000000000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101011010100111011111000100111010100000001110000000000000000000000000000000000000000000000000000000100010110101001110111110001001110101000011101111110000001010100011011000000000000000000000000100000000001000000000000000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010110101011110111110001001110101000000011100000000000000000000000000000000000000000000000000000001000101101010111101111100010011101010000111011111100000010101000110110000000000000000000000001000000000010000000000000000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101101110111101111100010011111010000000111000000000000000000000000000000000000000000000000000000010001011011101111011111000100111110100001110111111000000101000001101100100000000000000000000010000000000100000000000000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101011011101111011111000100111110100000001110000000000000000000000000000000000000000000000000000000100010110111011110111110001001111101000011101111110000001010000011011001000000000000000000000100000000001000000000000000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110111111011110111110001001111111000000011100000000000000000000000000000000000000000000000000000001001101111110111101111100010011111110000111001111100000010101000110110010000000000000000000001000000000010000000000000000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101111110111101111100010011111110000000111000000000000000000000000000000000000000000000000000000010011011111101111011111000100111111100001110011111000000101010001101100100000000000000000000010000000000100000000000000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111011111101111011111100100111111100000001110000000000000000000000000000000000000000000000000000000100110111111011110111111001001111111000011100111110000001010000011011000000000000010000000000100000000001000000000000000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110111111011110111111001001111111000000011100000000000000000000000000000000000000000000000000000001001101111110111101111110010011111110000111001111100000010100000110110000000000000100000000001000000000010000000000000000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111110111101111110010011111110000000111000000000000000000000000000000000000000000000000000000010011111111101111011111100100111111100001110101111000000101010001101100000000000001000000000010000000000100000000000000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111101111011111100100111111100000001110000000000000000000000000000000000000000000000000000000100011111111011110111111001001111111000011101011110000001010100011011000000000000010000000000100000000001000000000000000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111011110111111001001111111000000011100000000000000000000000000000000000000000000000000000001000111111110111101111110010011111110000111010111100000010100000110110010000000000100000000001000000000010000000000000000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111110111101111110010011111110000000111000000000000000000000000000000000000000000000000000000010001111111101111011111100100111111100001110101111000000101000001101100100000000001000000000010000000000100000000000000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111101111011111100100111111100000001110000000000000000000000000000000000000000000000000000000100011111111011110111111001001111111000011100011110000001010100011011001000000000010000000000100000000001000000000000000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111011110111111001101111111000000011100000000000000000000000000000000000000000000000000000001000111111110111101111110011011111110000111000111100000010101000110110010000000000100000000001000000000010000000000000000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111110111101111110011011111110000000111000000000000000000000000000000000000000000000000000000010001111111101111011111100110111111100001110001111000000101000001101100000000000000000000000000000000000000000000001000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111101111011111100110111111100000001110000000000000000000000000000000000000000000000000000000100011111111011110111111001101111111000011100011110000001010000011011000000000000000000000000000000000000000000000010000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111011110111111001101111111000000011100000000000000000000000000000000000000000000000000000001000111111110111101111110011011111110000111011011100000010101000110110000000000000000000000000000000000000000000000100000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111110111101111110011011111110000000111000000000000000000000000000000000000000000000000000000010001111111101111011111100110111111100001110110111000000101010001101100000000000000000000000000000000000000000000001000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111101111011111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111011110111111001101111111000011101101110000001010000011011001000000000000000000000000000000000000000000010000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111011011100000010100000110110010000000000000000000000000000000000000000000100000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110010111000000101010001101100100000000000000000000000000000000000000000001000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111001101111111000011100101110000001010100011011001000000000000000000000000000000000000000000010000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111001011100000010100000110110000000000000100000000000000000000000000000000100000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110010111000000101000001101100000000000001000000000000000000000000000000001000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111001101111111000011101001110000001010100011011000000000000010000000000000000000000000000000010000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111010011100000010101000110110000000000000100000000000000000000000000000000100000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111100110111111100001110100111000000101000001101100100000000001000000000000000000000000000000001000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111001101111111000011101001110000001010000011011001000000000010000000000000000000000000000000010000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111000011100000010101000110110010000000000100000000000000000000000000000000100000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111100110111111100001110000111000000101010001101100100000000001000000000000000000000000000000001000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111001101111111000011100001110000001010000011011000000000000000000000000100000000000000000000010000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111000011100000010100000110110000000000000000000000001000000000000000000000100000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110111011000000101010001101100000000000000000000000010000000000000000000001000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111001101111111000011101110110000001010100011011000000000000000000000000100000000000000000000010000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111101101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011011111110000111011101100000010100000110110010000000000000000000001000000000000000000000100000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110110111111100001110111011000000101000001101100100000000000000000000010000000000000000000001000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111110110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101101111111000011100110110000001010100011011001000000000000000000000100000000000000000000010000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111101101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011011111110000111001101100000010101000110110010000000000000000000001000000000000000000000100000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110110111111100001110011011000000101000001101100000000000001000000000010000000000000000000001000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111110110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101101111111000011100110110000001010000011011000000000000010000000000100000000000000000000010000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111101101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011011111110000111010101100000010101000110110000000000000100000000001000000000000000000000100000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110111111111100001110101011000000101010001101100000000000001000000000010000000000000000000001000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111110111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101111111111000011101010110000001010000011011001000000000010000000000100000000000000000000010000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111101111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011111111110000111010101100000010100000110110010000000000100000000001000000000000000000000100000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110111111111100001110001011000000101010001101100100000000001000000000010000000000000000000001000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111110111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111101111111111000011100010110000001010100011011001000000000010000000000100000000000000000000010000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111101111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111011111111110000111000101100000010100000110110000000000000000000000000000000000010000000000100000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111110111111111100001110001011000000101000001101100000000000000000000000000000000000100000000001000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111110111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111101111111111000011101100110000001010100011011000000000000000000000000000000000001000000000010000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111101111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011111111110000111011001100000010101000110110000000000000000000000000000000000010000000000100000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110011000000101000001101100100000000000000000000000000000000100000000001000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101100110000001010000011011001000000000000000000000000000000001000000000010000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001001100000010101000110110010000000000000000000000000000000010000000000100000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010011000000101010001101100100000000000000000000000000000000100000000001000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100100110000001010000011011000000000000010000000000000000000001000000000010000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001001100000010100000110110000000000000100000000000000000000010000000000100000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100011000000101010001101100000000000001000000000000000000000100000000001000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101000110000001010100011011000000000000010000000000000000000001000000000010000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010001100000010100000110110010000000000100000000000000000000010000000000100000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100011000000101000001101100100000000001000000000000000000000100000000001000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000110000001010100011011001000000000010000000000000000000001000000000010000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000001100000010101000110110010000000000100000000000000000000010000000000100000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000011000000101000001101100000000000000000000000010000000000100000000001000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000110000001010000011011000000000000000000000000100000000001000000000010000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011110100000010101000110110000000000000000000000001000000000010000000000100000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111101000000101010001101100000000000000000000000010000000000100000000001000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101111010000001010000011011001000000000000000000000100000000001000000000010000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011110100000010100000110110010000000000000000000001000000000010000000000100000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011101000000101010001101100100000000000000000000010000000000100000000001000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100111010000001010100011011001000000000000000000000100000000001000000000010000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001110100000010100000110110000000000000100000000001000000000010000000000100000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011101000000101000001101100000000000001000000000010000000000100000000001000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101011010000001010100011011000000000000010000000000100000000001000000000010000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010110100000010101000110110000000000000100000000001000000000010000000000100000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101101000000101000001101100100000000001000000000010000000000100000000001000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101011010000001010000011011001000000000010000000000100000000001000000000010000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000110100000010101000110110010000000000100000000001000000000010000000000100000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001101000000101010001101100100000000001000000000010000000000100000000001000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100011010000001010000011011000000000000000000000000000000000000000000000000000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000110100000010100000110110000000000000000000000000000000000000000000000000001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110101000000101010001101100000000000000000000000000000000000000000000000000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101101010000001010100011011000000000000000000000000000000000000000000000000000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011010100000010100000110110010000000000000000000000000000000000000000000000001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110101000000101000001101100100000000000000000000000000000000000000000000000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100101010000001010100011011001000000000000000000000000000000000000000000000000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001010100000010101000110110010000000000000000000000000000000000000000000000001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010101000000101000001101100000000000001000000000000000000000000000000000000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100101010000001010000011011000000000000010000000000000000000000000000000000000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010010100000010101000110110000000000000100000000000000000000000000000000000001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100101000000101010001101100000000000001000000000000000000000000000000000000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101001010000001010000011011001000000000010000000000000000000000000000000000000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010010100000010100000110110010000000000100000000000000000000000000000000000001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000101000000101010001101100100000000001000000000000000000000000000000000000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100001010000001010100011011001000000000010000000000000000000000000000000000000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000010100000010100000110110000000000000000000000001000000000000000000000000001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000101000000101000001101100000000000000000000000010000000000000000000000000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101110010000001010100011011000000000000000000000000100000000000000000000000000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011100100000010101000110110000000000000000000000001000000000000000000000000001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111001000000101000001101100100000000000000000000010000000000000000000000000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101110010000001010000011011001000000000000000000000100000000000000000000000000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100100000010101000110110010000000000000000000001000000000000000000000000001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011001000000101010001101100100000000000000000000010000000000000000000000000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110010000001010000011011000000000000010000000000100000000000000000000000000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100100000010100000110110000000000000100000000001000000000000000000000000001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101001000000101010001101100000000000001000000000010000000000000000000000000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101010010000001010100011011000000000000010000000000100000000000000000000000000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010100100000010100000110110010000000000100000000001000000000000000000000000001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101001000000101000001101100100000000001000000000010000000000000000000000000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100010010000001010100011011001000000000010000000000100000000000000000000000000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000100100000010101000110110010000000000100000000001000000000000000000000000001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001001000000101000001101100000000000000000000000000000000000100000000000000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100010010000001010000011011000000000000000000000000000000000001000000000000000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011000100000010101000110110000000000000000000000000000000000010000000000000001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110001000000101010001101100000000000000000000000000000000000100000000000000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101100010000001010000011011001000000000000000000000000000000001000000000000000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011000100000010100000110110010000000000000000000000000000000010000000000000001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010001000000101010001101100100000000000000000000000000000000100000000000000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100100010000001010100011011001000000000000000000000000000000001000000000000000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001000100000010100000110110000000000000100000000000000000000010000000000000001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010001000000101000001101100000000000001000000000000000000000100000000000000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000010000001010100011011000000000000010000000000000000000001000000000000000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010000100000010101000110110000000000000100000000000000000000010000000000000001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100001000000101000001101100100000000001000000000000000000000100000000000000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000010000001010000011011001000000000010000000000000000000001000000000000000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000000100000010101000110110010000000000100000000000000000000010000000000000001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000001000000101010001101100100000000001000000000000000000000100000000000000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000010000001010000011011000000000000000000000000100000000001000000000000000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000000100000010100000110110000000000000000000000001000000000010000000000000001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111110000000101010001101100000000000000000000000010000000000100000000000000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101111100000001010100011011000000000000000000000000100000000001000000000000000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011111000000010100000110110010000000000000000000001000000000010000000000000001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111110000000101000001101100100000000000000000000010000000000100000000000000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100111100000001010100011011001000000000000000000000100000000001000000000000000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001111000000010101000110110010000000000000000000001000000000010000000000000001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011110000000101000001101100000000000001000000000010000000000100000000000000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100111100000001010000011011000000000000010000000000100000000001000000000000000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010111000000010101000110110000000000000100000000001000000000010000000000000001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101110000000101010001101100000000000001000000000010000000000100000000000000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101011100000001010000011011001000000000010000000000100000000001000000000000000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010111000000010100000110110010000000000100000000001000000000010000000000000001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001110000000101010001101100100000000001000000000010000000000100000000000000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100011100000001010100011011001000000000010000000000100000000001000000000000000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000111000000010100000110110000000000000000000000000000000000000000000000100001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001110000000101000001101100000000000000000000000000000000000000000000001000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101101100000001010100011011000000000000000000000000000000000000000000000010000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011011000000010101000110110000000000000000000000000000000000000000000000100001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110110000000101000001101100100000000000000000000000000000000000000000001000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101101100000001010000011011001000000000000000000000000000000000000000000010000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001011000000010101000110110010000000000000000000000000000000000000000000100001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010110000000101010001101100100000000000000000000000000000000000000000001000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100101100000001010000011011000000000000010000000000000000000000000000000010000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001011000000010100000110110000000000000100000000000000000000000000000000100001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100110000000101010001101100000000000001000000000000000000000000000000001000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101001100000001010100011011000000000000010000000000000000000000000000000010000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010011000000010100000110110010000000000100000000000000000000000000000000100001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100110000000101000001101100100000000001000000000000000000000000000000001000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100001100000001010100011011001000000000010000000000000000000000000000000010000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000011000000010101000110110010000000000100000000000000000000000000000000100001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000110000000101000001101100000000000000000000000010000000000000000000001000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100001100000001010000011011000000000000000000000000100000000000000000000010000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011101000000010101000110110000000000000000000000001000000000000000000000100001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111010000000101010001101100000000000000000000000010000000000000000000001000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101110100000001010000011011001000000000000000000000100000000000000000000010000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011101000000010100000110110010000000000000000000001000000000000000000000100001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011010000000101010001101100100000000000000000000010000000000000000000001000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110100000001010100011011001000000000000000000000100000000000000000000010000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001101000000010100000110110000000000000100000000001000000000000000000000100001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011010000000101000001101100000000000001000000000010000000000000000000001000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101010100000001010100011011000000000000010000000000100000000000000000000010000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010101000000010101000110110000000000000100000000001000000000000000000000100001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101010000000101000001101100100000000001000000000010000000000000000000001000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101010100000001010000011011001000000000010000000000100000000000000000000010000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000101000000010101000110110010000000000100000000001000000000000000000000100001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001010000000101010001101100100000000001000000000010000000000000000000001000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100010100000001010000011011000000000000000000000000000000000001000000000010000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000101000000010100000110110000000000000000000000000000000000010000000000100001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110010000000101010001101100000000000000000000000000000000000100000000001000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101100100000001010100011011000000000000000000000000000000000001000000000010000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011001000000010100000110110010000000000000000000000000000000010000000000100001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110010000000101000001101100100000000000000000000000000000000100000000001000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100100100000001010100011011001000000000000000000000000000000001000000000010000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001001000000010101000110110010000000000000000000000000000000010000000000100001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010010000000101000001101100000000000001000000000000000000000100000000001000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100100100000001010000011011000000000000010000000000000000000001000000000010000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010001000000010101000110110000000000000100000000000000000000010000000000100001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100010000000101010001101100000000000001000000000000000000000100000000001000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000100000001010000011011001000000000010000000000000000000001000000000010000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010001000000010100000110110010000000000100000000000000000000010000000000100001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000010000000101010001101100100000000001000000000000000000000100000000001000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000100000001010100011011001000000000010000000000000000000001000000000010000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000001000000010100000110110000000000000000000000001000000000010000000000100001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000010000000101000001101100000000000000000000000010000000000100000000001000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101111000000001010100011011000000000000000000000000100000000001000000000010000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011110000000010101000110110000000000000000000000001000000000010000000000100001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111100000000101000001101100100000000000000000000010000000000100000000001000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101111000000001010000011011001000000000000000000000100000000001000000000010000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001110000000010101000110110010000000000000000000001000000000010000000000100001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011100000000101010001101100100000000000000000000010000000000100000000001000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100111000000001010000011011000000000000010000000000100000000001000000000010000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001110000000010100000110110000000000000100000000001000000000010000000000100001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101100000000101010001101100000000000001000000000010000000000100000000001000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101011000000001010100011011000000000000010000000000100000000001000000000010000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010110000000010100000110110010000000000100000000001000000000010000000000100001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101100000000101000001101100100000000001000000000010000000000100000000001000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100011000000001010100011011001000000000010000000000100000000001000000000010000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000110000000010101000110110010000000000100000000001000000000010000000000100001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001100000000101001001101100000000000000000000000000000000000000000000000000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100011000000001010010011011000000000000000000000000000000000000000000000000000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011010000000010101100110110000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110100000000101011001101100000000000000000000000000000000000000000000000000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101101000000001010010011011001000000000000000000000000000000000000000000000000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011010000000010100100110110010000000000000000000000000000000000000000000000000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010100000000101011001101100100000000000000000000000000000000000000000000000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100101000000001010110011011001000000000000000000000000000000000000000000000000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001010000000010100100110110000000000000100000000000000000000000000000000000000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010100000000101001001101100000000000001000000000000000000000000000000000000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101001000000001010110011011000000000000010000000000000000000000000000000000000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010010000000010101100110110000000000000100000000000000000000000000000000000000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100100000000101001001101100100000000001000000000000000000000000000000000000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101001000000001010010011011001000000000010000000000000000000000000000000000000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000010000000010101100110110010000000000100000000000000000000000000000000000000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000100000000101011001101100100000000001000000000000000000000000000000000000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100001000000001010010011011000000000000000000000000100000000000000000000000000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000010000000010100100110110000000000000000000000001000000000000000000000000000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111000000000101011001101100000000000000000000000010000000000000000000000000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101110000000001010110011011000000000000000000000000100000000000000000000000000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011100000000010100100110110010000000000000000000001000000000000000000000000000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111000000000101001001101100100000000000000000000010000000000000000000000000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110000000001010110011011001000000000000000000000100000000000000000000000000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100000000010101100110110010000000000000000000001000000000000000000000000000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000000000101001001101100000000000001000000000010000000000000000000000000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110000000001010010011011000000000000010000000000100000000000000000000000000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010100000000010101100110110000000000000100000000001000000000000000000000000000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101000000000101011001101100000000000001000000000010000000000000000000000000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101010000000001010010011011001000000000010000000000100000000000000000000000000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010100000000010100100110110010000000000100000000001000000000000000000000000000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001000000000101011001101100100000000001000000000010000000000000000000000000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100010000000001010110011011001000000000010000000000100000000000000000000000000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000100000000010100100110110000000000000000000000000000000000010000000000000000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001000000000101001001101100000000000000000000000000000000000100000000000000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101100000000001010110011011000000000000000000000000000000000001000000000000000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011000000000010101100110110000000000000000000000000000000000010000000000000000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110000000000101001001101100100000000000000000000000000000000100000000000000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101100000000001010010011011001000000000000000000000000000000001000000000000000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001000000000010101100110110010000000000000000000000000000000010000000000000000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010000000000101011001101100100000000000000000000000000000000100000000000000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100100000000001010010011011000000000000010000000000000000000001000000000000000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001000000000010100100110110000000000000100000000000000000000010000000000000000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100000000000101011001101100000000000001000000000000000000000100000000000000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101000000000001010110011011000000000000010000000000000000000001000000000000000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010000000000010100100110110010000000000100000000000000000000010000000000000000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100000000000101001001101100100000000001000000000000000000000100000000000000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000000000001010110011011001000000000010000000000000000000001000000000000000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000000000000010101100110110010000000000100000000000000000000010000000000000000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000000000000101001001101100000000000000000000000010000000000100000000000000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000000000001010010011011000000000000000000000000100000000001000000000000000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000010111010110000000010101100110110000000000000000000000001000000000010000000000000000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000101110101001000000101011001101100000000000000000000000010000000000100000000000000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000001011101011110000001010010011011001000000000000000000000100000000001000000000000000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000010111010101010000010100100110110010000000000000000000001000000000010000000000000000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000101110001101100000101011001101100100000000000000000000010000000000100000000000000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100011111000001010110011011001000000000000000000000100000000001000000000000000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000111110000010100100110110000000000000100000000001000000000010000000000000000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110001111100000101001001101100000000000001000000000010000000000100000000000000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101101111000001010110011011000000000000010000000000100000000001000000000000000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011011110000010101100110110000000000000100000000001000000000010000000000000000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110111100000101001001101100100000000001000000000010000000000100000000000000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101101111000001010010011011001000000000010000000000100000000001000000000000000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001011110000010101100110110010000000000100000000001000000000010000000000000000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010111100000101011001101100100000000001000000000010000000000100000000000000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100101111000001010010011011000000000000000000000000000000000000000000000010000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001011110000010100100110110000000000000000000000000000000000000000000000100000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110100111100000101011001101100000000000000000000000000000000000000000000001000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101001111000001010110011011000000000000000000000000000000000000000000000010000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010011110000010100100110110010000000000000000000000000000000000000000000100000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110100111100000101001001101100100000000000000000000000000000000000000000001000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100001111000001010110011011001000000000000000000000000000000000000000000010000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000011110000010101100110110010000000000000000000000000000000000000000000100000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000111100000101001001101100000000000001000000000000000000000000000000001000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100001111000001010010011011000000000000010000000000000000000000000000000010000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011101110000010101100110110000000000000100000000000000000000000000000000100000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111011100000101011001101100000000000001000000000000000000000000000000001000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101110111000001010010011011001000000000010000000000000000000000000000000010000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011101110000010100100110110010000000000100000000000000000000000000000000100000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110011011100000101011001101100100000000001000000000000000000000000000000001000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100110111000001010110011011001000000000010000000000000000000000000000000010000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001101110000010100100110110000000000000000000000001000000000000000000000100000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011011100000101001001101100000000000000000000000010000000000000000000001000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101010111000001010110011011000000000000000000000000100000000000000000000010000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010101110000010101100110110000000000000000000000001000000000000000000000100000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110101011100000101001001101100100000000000000000000010000000000000000000001000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101010111000001010010011011001000000000000000000000100000000000000000000010000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000101110000010101100110110010000000000000000000001000000000000000000000100000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001011100000101011001101100100000000000000000000010000000000000000000001000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100010111000001010010011011000000000000010000000000100000000000000000000010000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000101110000010100100110110000000000000100000000001000000000000000000000100000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110011100000101011001101100000000000001000000000010000000000000000000001000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101100111000001010110011011000000000000010000000000100000000000000000000010000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011001110000010100100110110010000000000100000000001000000000000000000000100000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110011100000101001001101100100000000001000000000010000000000000000000001000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100100111000001010110011011001000000000010000000000100000000000000000000010000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001001110000010101100110110010000000000100000000001000000000000000000000100000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010011100000101001001101100000000000000000000000000000000000100000000001000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100100111000001010010011011000000000000000000000000000000000001000000000010000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010001110000010101100110110000000000000000000000000000000000010000000000100000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100011100000101011001101100000000000000000000000000000000000100000000001000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101000111000001010010011011001000000000000000000000000000000001000000000010000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010001110000010100100110110010000000000000000000000000000000010000000000100000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000011100000101011001101100100000000000000000000000000000000100000000001000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100000111000001010110011011001000000000000000000000000000000001000000000010000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000001110000010100100110110000000000000100000000000000000000010000000000100000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000011100000101001001101100000000000001000000000000000000000100000000001000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101111011000001010110011011000000000000010000000000000000000001000000000010000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011110110000010101100110110000000000000100000000000000000000010000000000100000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110111101100000101001001101100100000000001000000000000000000000100000000001000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101111011000001010010011011001000000000010000000000000000000001000000000010000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001110110000010101100110110010000000000100000000000000000000010000000000100000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011101100000101011001101100100000000001000000000000000000000100000000001000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100111011000001010010011011000000000000000000000000100000000001000000000010000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001110110000010100100110110000000000000000000000001000000000010000000000100000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110101101100000101011001101100000000000000000000000010000000000100000000001000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101011011000001010110011011000000000000000000000000100000000001000000000010000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010110110000010100100110110010000000000000000000001000000000010000000000100000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110101101100000101001001101100100000000000000000000010000000000100000000001000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100011011000001010110011011001000000000000000000000100000000001000000000010000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000110110000010101100110110010000000000000000000001000000000010000000000100000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001101100000101001001101100000000000001000000000010000000000100000000001000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100011011000001010010011011000000000000010000000000100000000001000000000010000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011010110000010101100110110000000000000100000000001000000000010000000000100000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110101100000101011001101100000000000001000000000010000000000100000000001000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101101011000001010010011011001000000000010000000000100000000001000000000010000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011010110000010100100110110010000000000100000000001000000000010000000000100000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010101100000101011001101100100000000001000000000010000000000100000000001000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100101011000001010110011011001000000000010000000000100000000001000000000010000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001010110000010100100110110000000000000000000000000000000000000000000000000001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010101100000101001001101100000000000000000000000000000000000000000000000000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101001011000001010110011011000000000000000000000000000000000000000000000000000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010010110000010101100110110000000000000000000000000000000000000000000000000001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100101100000101001001101100100000000000000000000000000000000000000000000000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101001011000001010010011011001000000000000000000000000000000000000000000000000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000010110000010101100110110010000000000000000000000000000000000000000000000001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000101100000101011001101100100000000000000000000000000000000000000000000000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100001011000001010010011011000000000000010000000000000000000000000000000000000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000010110000010100100110110000000000000100000000000000000000000000000000000001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110111001100000101011001101100000000000001000000000000000000000000000000000000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101110011000001010110011011000000000000010000000000000000000000000000000000000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011100110000010100100110110010000000000100000000000000000000000000000000000001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110111001100000101001001101100100000000001000000000000000000000000000000000000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100110011000001010110011011001000000000010000000000000000000000000000000000000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001100110000010101100110110010000000000100000000000000000000000000000000000001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011001100000101001001101100000000000000000000000010000000000000000000000000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100110011000001010010011011000000000000000000000000100000000000000000000000000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010100110000010101100110110000000000000000000000001000000000000000000000000001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110101001100000101011001101100000000000000000000000010000000000000000000000000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101010011000001010010011011001000000000000000000000100000000000000000000000000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010100110000010100100110110010000000000000000000001000000000000000000000000001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110001001100000101011001101100100000000000000000000010000000000000000000000000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100010011000001010110011011001000000000000000000000100000000000000000000000000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000100110000010100100110110000000000000100000000001000000000000000000000000001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110001001100000101001001101100000000000001000000000010000000000000000000000000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101100011000001010110011011000000000000010000000000100000000000000000000000000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011000110000010101100110110000000000000100000000001000000000000000000000000001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110001100000101001001101100100000000001000000000010000000000000000000000000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101100011000001010010011011001000000000010000000000100000000000000000000000000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001000110000010101100110110010000000000100000000001000000000000000000000000001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010001100000101011001101100100000000001000000000010000000000000000000000000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100100011000001010010011011000000000000000000000000000000000001000000000000000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001000110000010100100110110000000000000000000000000000000000010000000000000001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110100001100000101011001101100000000000000000000000000000000000100000000000000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101000011000001010110011011000000000000000000000000000000000001000000000000000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010000110000010100100110110010000000000000000000000000000000010000000000000001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110100001100000101001001101100100000000000000000000000000000000100000000000000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100000011000001010110011011001000000000000000000000000000000001000000000000000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000000110000010101100110110010000000000000000000000000000000010000000000000001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000001100000101001001101100000000000001000000000000000000000100000000000000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100000011000001010010011011000000000000010000000000000000000001000000000000000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011111010000010101100110110000000000000100000000000000000000010000000000000001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110111110100000101011001101100000000000001000000000000000000000100000000000000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101111101000001010010011011001000000000010000000000000000000001000000000000000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011111010000010100100110110010000000000100000000000000000000010000000000000001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011110100000101011001101100100000000001000000000000000000000100000000000000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100111101000001010110011011001000000000010000000000000000000001000000000000000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001111010000010100100110110000000000000000000000001000000000010000000000000001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011110100000101001001101100000000000000000000000010000000000100000000000000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101011101000001010110011011000000000000000000000000100000000001000000000000000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010111010000010101100110110000000000000000000000001000000000010000000000000001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110101110100000101001001101100100000000000000000000010000000000100000000000000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101011101000001010010011011001000000000000000000000100000000001000000000000000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000111010000010101100110110010000000000000000000001000000000010000000000000001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001110100000101011001101100100000000000000000000010000000000100000000000000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100011101000001010010011011000000000000010000000000100000000001000000000000000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000111010000010100100110110000000000000100000000001000000000010000000000000001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110110100000101011001101100000000000001000000000010000000000100000000000000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101101101000001010110011011000000000000010000000000100000000001000000000000000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011011010000010100100110110010000000000100000000001000000000010000000000000001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110110100000101001001101100100000000001000000000010000000000100000000000000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100101101000001010110011011001000000000010000000000100000000001000000000000000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001011010000010101100110110010000000000100000000001000000000010000000000000001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110010110100000101001001101100000000000000000000000000000000000000000000001000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100101101000001010010011011000000000000000000000000000000000000000000000010000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010011010000010101100110110000000000000000000000000000000000000000000000100001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100110100000101011001101100000000000000000000000000000000000000000000001000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101001101000001010010011011001000000000000000000000000000000000000000000010000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010011010000010100100110110010000000000000000000000000000000000000000000100001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000110100000101011001101100100000000000000000000000000000000000000000001000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100001101000001010110011011001000000000000000000000000000000000000000000010000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000011010000010100100110110000000000000100000000000000000000000000000000100001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000110100000101001001101100000000000001000000000000000000000000000000001000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100010000000000000000000000000000000000011101110101000001010110011011000000000000010000000000000000000000000000000010000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000100000000000000000000000000000000000111011101010000010101100110110000000000000100000000000000000000000000000000100001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010001000000000000000000000000000000000001110111010100000101001001101100100000000001000000000000000000000000000000001000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100010000000000000000000000000000000000011101110101000001010010011011001000000000010000000000000000000000000000000010000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000000000000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000000000000000000111001101010000010101100110110010000000000100000000000000000000000000000000100001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000000000000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000000000000000001110011010100000101011001101100100000000001000000000000000000000000000000001000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000000000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000000000000000000011100110101000001010010011011000000000000000000000000100000000000000000000010000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010000000000000111001101010000010100100110110000000000000000000000001000000000000000000000100001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100000000000001110101010100000101011001101100000000000000000000000010000000000000000000001000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001000000000000011101010101000001010110011011000000000000000000000000100000000000000000000010000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010000000000000111010101010000010100100110110010000000000000000000001000000000000000000000100001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100000000000001110101010100000101001001101100100000000000000000000010000000000000000000001000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001000000000000011100010101000001010110011011001000000000000000000000100000000000000000000010000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010000000000000111000101010000010101100110110010000000000000000000001000000000000000000000100001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100000000000001110001010100000101001001101100000000000001000000000010000000000000000000001000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001000000000000011100010101000001010010011011000000000000010000000000100000000000000000000010000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010000000000000111011001010000010101100110110000000000000100000000001000000000000000000000100001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100000000000001110110010100000101011001101100000000000001000000000010000000000000000000001000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001000000000000011101100101000001010010011011001000000000010000000000100000000000000000000010000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111011001010000010100100110110010000000000100000000001000000000000000000000100001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110010010100000101011001101100100000000001000000000010000000000000000000001000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011100100101000001010110011011001000000000010000000000100000000000000000000010000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111001001010000010100100110110000000000000000000000000000000000010000000000100001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110010010100000101001001101100000000000000000000000000000000000100000000001000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001000000000011101000101000001010110011011000000000000000000000000000000000001000000000010000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111010001010000010101100110110000000000000000000000000000000000010000000000100001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100100000000001110100010100000101001001101100100000000000000000000000000000000100000000001000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011101000101000001010010011011001000000000000000000000000000000001000000000010000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111000001010000010101100110110010000000000000000000000000000000010000000000100001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110000010100000101011001101100100000000000000000000000000000000100000000001000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011100000101000001010010011011000000000000010000000000000000000001000000000010000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111000001010000010100100110110000000000000100000000000000000000010000000000100001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110111100100000101011001101100000000000001000000000000000000000100000000001000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011101111001000001010110011011000000000000010000000000000000000001000000000010000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111011110010000010100100110110010000000000100000000000000000000010000000000100001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110111100100000101001001101100100000000001000000000000000000000100000000001000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001000000000011100111001000001010110011011001000000000010000000000000000000001000000000010000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111001110010000010101100110110010000000000100000000000000000000010000000000100001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110011100100000101001001101100000000000000000000000010000000000100000000001000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011100111001000001010010011011000000000000000000000000100000000001000000000010000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111010110010000010101100110110000000000000000000000001000000000010000000000100001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110101100100000101011001101100000000000000000000000010000000000100000000001000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011101011001000001010010011011001000000000000000000000100000000001000000000010000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111010110010000010100100110110010000000000000000000001000000000010000000000100001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110001100100000101011001101100100000000000000000000010000000000100000000001000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011100011001000001010110011011001000000000000000000000100000000001000000000010000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111000110010000010100100110110000000000000100000000001000000000010000000000100001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110001100100000101001001101100000000000001000000000010000000000100000000001000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011101101001000001010110011011000000000000010000000000100000000001000000000010000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111011010010000010101100110110000000000000100000000001000000000010000000000100001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110110100100000101001001101100100000000001000000000010000000000100000000001000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011101101001000001010010011011001000000000010000000000100000000001000000000010000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111001010010000010101100110110010000000000100000000001000000000010000000000100001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110010100100000101011001101100100000000001000000000010000000000100000000001000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011100101001000001010010011011000000000000000000000000000000000000000000000000000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111001010010000010100100110110000000000000000000000000000000000000000000000000000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110100100100000101011001101100000000000000000000000000000000000000000000000000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011101001001000001010110011011000000000000000000000000000000000000000000000000000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111010010010000010100100110110010000000000000000000000000000000000000000000000000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110100100100000101001001101100100000000000000000000000000000000000000000000000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011100001001000001010110011011001000000000000000000000000000000000000000000000000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100100000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001001000000010011000000000111000010010000010101100110110010000000000000000000000000000000000000000000000000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001001000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010010000000100110000000001110000100100000101001001101100000000000001000000000000000000000000000000000000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010010000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100100000001001100000000011100001001000001010010011011000000000000010000000000000000000000000000000000000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100100000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001001000000010011000000000111011100010000010101100110110000000000000100000000000000000000000000000000000000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001001000000010011100000000010111000000000000000000000000000000000000000000000000000000010001000000000010010000000100111000000001110111000100000101011001101100000000000001000000000000000000000000000000000000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010010000000100111000000000101110000000000000000000000000000000000000000000000000000000100010000000000100100000001001110000000011101110001000001010010011011001000000000010000000000000000000000000000000000000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000100100000001001110001000001011100000000000000000000000000000000000000000000000000000001001101001000001001000000010011100010000111011100010000010100100110110010000000000100000000000000000000000000000000000000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001001000000010011100010000010111000000000000000000000000000000000000000000000000000000010011010010000010010000000100111000100001110011000100000101011001101100100000000001000000000000000000000000000000000000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000010010000000100111000100000001110000000000000000000000000000000000000000000000000000000100110100100000100100000001001110001000011100110001000001010110011011001000000000010000000000000000000000000000000000000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000100100000001001110001000000011100000000000000000000000000000000000000000000000000001001001101001000001001000000010011100010000111001100010000010100100110110000000000000000000000001000000000000000000000000000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001001000000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000010010000000100111010100001110011000100000101001001101100000000000000000000000010000000000000000000000000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000010010000000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000100100000001001110101000011101010001000001010110011011000000000000000000000000100000000000000000000000000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000100100000001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001000000010011101010000111010100010000010101100110110000000000000000000000001000000000000000000000000000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001001000000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000010010000000100111010100001110101000100000101001001101100100000000000000000000010000000000000000000000000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000010010000000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000100100000001001110101000011101010001000001010010011011001000000000000000000000100000000000000000000000000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100100000100100000001001110101000000011100000000000000000000000000000000000000000000000000000001000101001000001001000000010011101010000111000100010000010101100110110010000000000000000000001000000000000000000000000000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010000010011010000100111010100001110001000100000101011001101100100000000000000000000010000000000000000000000000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000010011010000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000100110100001001110101000011100010001000001010010011011000000000000010000000000100000000000000000000000000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001101000010011101010000111000100010000010100100110110000000000000100000000001000000000000000000000000000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010000010011010000100111010100001110110000100000101011001101100000000000001000000000010000000000000000000000000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000010011010000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000100110100001001110101000011101100001000001010110011011000000000000010000000000100000000000000000000000000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001101000010011101010000111011000010000010100100110110010000000000100000000001000000000000000000000000000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000010011010000100111010100001110110000100000101001001101100100000000001000000000010000000000000000000000000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000010011010000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000100110100001001110101000011100100001000001010110011011001000000000010000000000100000000000000000000000000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001101000010011101010000111001000010000010101100110110010000000000100000000001000000000000000000000000000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010000010011010000100111010100001110010000100000101001001101100000000000000000000000000000000000100000000000000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000011011010000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000110110100001001110101000011100100001000001010010011011000000000000000000000000000000000001000000000000000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000110110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001101101000010011101010000111010000010000010101100110110000000000000000000000000000000000010000000000000000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001101101000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000011011010000100111010100001110100000100000101011001101100000000000000000000000000000000000100000000000000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000011011010000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000110110100001001110101000011101000001000001010010011011001000000000000000000000000000000001000000000000000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100101000110110110001001110101000000011100000000000000000000000000000000000000000000000000000001000101001010001101101100010011101010000111010000010000010100100110110010000000000000000000000000000000010000000000000000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001010001101101100010011101010000000111000000000000000000000000000000000000000000000000000000010001010010100011011011000100111010100001110000000100000101011001101100100000000000000000000000000000000100000000000000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010100011011011000100111010100000001110000000000000000000000000000000000000000000000000000000100110100101000110110110001001110101000011100000001000001010110011011001000000000000000000000000000000001000000000000000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100101000110111110001001110101000000011100000000000000000000000000000000000000000000000000000001000101001010001101111100010011101010000111000000010000010100100110110000000000000100000000000000000000010000000000000000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001010001101111100010011101010000000111000000000000000000000000000000000000000000000000000000010001010010100011011111000100111010100001110000000100000101001001101100000000000001000000000000000000000100000000000000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111011010100111011111000100111010100000001110000000000000000000000000000000000000000000000000000000100110110101001110111110001001110101000011101111110000001010110011011000000000000010000000000000000000001000000000000000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110110101011110111110001001110101000000011100000000000000000000000000000000000000000000000000000001001101101010111101111100010011101010000111011111100000010101100110110000000000000100000000000000000000010000000000000000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101101110111101111100010011111010000000111000000000000000000000000000000000000000000000000000000010011011011101111011111000100111110100001110111111000000101001001101100100000000001000000000000000000000100000000000000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111011011101111011111000100111110100000001110000000000000000000000000000000000000000000000000000000100110110111011110111110001001111101000011101111110000001010010011011001000000000010000000000000000000001000000000000000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110111111011110111110001001111111000000011100000000000000000000000000000000000000000000000000000001001101111110111101111100010011111110000111001111100000010101100110110010000000000100000000000000000000010000000000000000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101111110111101111100010011111110000000111000000000000000000000000000000000000000000000000000000010011011111101111011111000100111111100001110011111000000101011001101100100000000001000000000000000000000100000000000000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101011111101111011111100100111111100000001110000000000000000000000000000000000000000000000000000000100010111111011110111111001001111111000011100111110000001010010011011000000000000000000000000100000000001000000000000000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010111111011110111111001001111111000000011100000000000000000000000000000000000000000000000000000001000101111110111101111110010011111110000111001111100000010100100110110000000000000000000000001000000000010000000000000000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111110111101111110010011111110000000111000000000000000000000000000000000000000000000000000000010001111111101111011111100100111111100001110101111000000101011001101100000000000000000000000010000000000100000000000000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111101111011111100100111111100000001110000000000000000000000000000000000000000000000000000000100011111111011110111111001001111111000011101011110000001010110011011000000000000000000000000100000000001000000000000000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111011110111111001001111111000000011100000000000000000000000000000000000000000000000000000001000111111110111101111110010011111110000111010111100000010100100110110010000000000000000000001000000000010000000000000000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111110111101111110010011111110000000111000000000000000000000000000000000000000000000000000000010001111111101111011111100100111111100001110101111000000101001001101100100000000000000000000010000000000100000000000000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111101111011111100100111111100000001110000000000000000000000000000000000000000000000000000000100111111111011110111111001001111111000011100011110000001010110011011001000000000000000000000100000000001000000000000000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111011110111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111110111101111110011011111110000111000111100000010101100110110010000000000000000000001000000000010000000000000000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111110111101111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111101111011111100110111111100001110001111000000101001001101100000000000001000000000010000000000100000000000000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111101111011111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111011110111111001101111111000011100011110000001010010011011000000000000010000000000100000000001000000000000000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111011110111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111110111101111110011011111110000111011011100000010101100110110000000000000100000000001000000000010000000000000000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111110111101111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111101111011111100110111111100001110110111000000101011001101100000000000001000000000010000000000100000000000000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111101111011111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111011110111111001101111111000011101101110000001010010011011001000000000010000000000100000000001000000000000000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111011011100000010100100110110010000000000100000000001000000000010000000000000000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110010111000000101011001101100100000000001000000000010000000000100000000000000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111001101111111000011100101110000001010110011011001000000000010000000000100000000001000000000000000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111001011100000010100100110110000000000000000000000000000000000000000000000100000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110010111000000101001001101100000000000000000000000000000000000000000000001000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111001101111111000011101001110000001010110011011000000000000000000000000000000000000000000000010000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111010011100000010101100110110000000000000000000000000000000000000000000000100000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111100110111111100001110100111000000101001001101100100000000000000000000000000000000000000000001000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111001101111111000011101001110000001010010011011001000000000000000000000000000000000000000000010000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111110011011111110000111000011100000010101100110110010000000000000000000000000000000000000000000100000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111100110111111100001110000111000000101011001101100100000000000000000000000000000000000000000001000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111001101111111000011100001110000001010010011011000000000000010000000000000000000000000000000010000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111110011011111110000111000011100000010100100110110000000000000100000000000000000000000000000000100000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111100110111111100001110111011000000101011001101100000000000001000000000000000000000000000000001000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111001101111111000011101110110000001010110011011000000000000010000000000000000000000000000000010000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111101101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011011111110000111011101100000010100100110110010000000000100000000000000000000000000000000100000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110110111111100001110111011000000101001001101100100000000001000000000000000000000000000000001000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111110110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101101111111000011100110110000001010110011011001000000000010000000000000000000000000000000010000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111101101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011011111110000111001101100000010101100110110010000000000100000000000000000000000000000000100000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111110110111111100001110011011000000101001001101100000000000000000000000010000000000000000000001000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111110110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111101101111111000011100110110000001010010011011000000000000000000000000100000000000000000000010000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111101101111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111011011111110000111010101100000010101100110110000000000000000000000001000000000000000000000100000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111110111111111100001110101011000000101011001101100000000000000000000000010000000000000000000001000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111110111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101111111111000011101010110000001010010011011001000000000000000000000100000000000000000000010000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111101111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111011111111110000111010101100000010100100110110010000000000000000000001000000000000000000000100000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111110111111111100001110001011000000101011001101100100000000000000000000010000000000000000000001000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111110111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111101111111111000011100010110000001010110011011001000000000000000000000100000000000000000000010000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111101111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111011111111110000111000101100000010100100110110000000000000100000000001000000000000000000000100000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111110111111111100001110001011000000101001001101100000000000001000000000010000000000000000000001000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111110111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111101111111111000011101100110000001010110011011000000000000010000000000100000000000000000000010000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111101111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111011111111110000111011001100000010101100110110000000000000100000000001000000000000000000000100000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110011000000101001001101100100000000001000000000010000000000000000000001000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101100110000001010010011011001000000000010000000000100000000000000000000010000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001001100000010101100110110010000000000100000000001000000000000000000000100000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010011000000101011001101100100000000001000000000010000000000000000000001000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100100110000001010010011011000000000000000000000000000000000001000000000010000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001001100000010100100110110000000000000000000000000000000000010000000000100000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100011000000101011001101100000000000000000000000000000000000100000000001000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101000110000001010110011011000000000000000000000000000000000001000000000010000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010001100000010100100110110010000000000000000000000000000000010000000000100000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100011000000101001001101100100000000000000000000000000000000100000000001000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000110000001010110011011001000000000000000000000000000000001000000000010000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000001100000010101100110110010000000000000000000000000000000010000000000100000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000011000000101001001101100000000000001000000000000000000000100000000001000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000110000001010010011011000000000000010000000000000000000001000000000010000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011110100000010101100110110000000000000100000000000000000000010000000000100000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111101000000101011001101100000000000001000000000000000000000100000000001000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101111010000001010010011011001000000000010000000000000000000001000000000010000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011110100000010100100110110010000000000100000000000000000000010000000000100000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011101000000101011001101100100000000001000000000000000000000100000000001000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100111010000001010110011011001000000000010000000000000000000001000000000010000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001110100000010100100110110000000000000000000000001000000000010000000000100000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011101000000101001001101100000000000000000000000010000000000100000000001000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101011010000001010110011011000000000000000000000000100000000001000000000010000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010110100000010101100110110000000000000000000000001000000000010000000000100000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101101000000101001001101100100000000000000000000010000000000100000000001000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101011010000001010010011011001000000000000000000000100000000001000000000010000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000110100000010101100110110010000000000000000000001000000000010000000000100000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001101000000101011001101100100000000000000000000010000000000100000000001000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100011010000001010010011011000000000000010000000000100000000001000000000010000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000110100000010100100110110000000000000100000000001000000000010000000000100000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110101000000101011001101100000000000001000000000010000000000100000000001000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101101010000001010110011011000000000000010000000000100000000001000000000010000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011010100000010100100110110010000000000100000000001000000000010000000000100000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110101000000101001001101100100000000001000000000010000000000100000000001000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100101010000001010110011011001000000000010000000000100000000001000000000010000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001010100000010101100110110010000000000100000000001000000000010000000000100000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010101000000101001001101100000000000000000000000000000000000000000000000000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100101010000001010010011011000000000000000000000000000000000000000000000000000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010010100000010101100110110000000000000000000000000000000000000000000000000001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100101000000101011001101100000000000000000000000000000000000000000000000000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101001010000001010010011011001000000000000000000000000000000000000000000000000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010010100000010100100110110010000000000000000000000000000000000000000000000001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000101000000101011001101100100000000000000000000000000000000000000000000000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100001010000001010110011011001000000000000000000000000000000000000000000000000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000010100000010100100110110000000000000100000000000000000000000000000000000001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000101000000101001001101100000000000001000000000000000000000000000000000000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101110010000001010110011011000000000000010000000000000000000000000000000000000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011100100000010101100110110000000000000100000000000000000000000000000000000001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111001000000101001001101100100000000001000000000000000000000000000000000000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101110010000001010010011011001000000000010000000000000000000000000000000000000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100100000010101100110110010000000000100000000000000000000000000000000000001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011001000000101011001101100100000000001000000000000000000000000000000000000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110010000001010010011011000000000000000000000000100000000000000000000000000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100100000010100100110110000000000000000000000001000000000000000000000000001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101001000000101011001101100000000000000000000000010000000000000000000000000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101010010000001010110011011000000000000000000000000100000000000000000000000000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010100100000010100100110110010000000000000000000001000000000000000000000000001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101001000000101001001101100100000000000000000000010000000000000000000000000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100010010000001010110011011001000000000000000000000100000000000000000000000000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000100100000010101100110110010000000000000000000001000000000000000000000000001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001001000000101001001101100000000000001000000000010000000000000000000000000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100010010000001010010011011000000000000010000000000100000000000000000000000000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011000100000010101100110110000000000000100000000001000000000000000000000000001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110001000000101011001101100000000000001000000000010000000000000000000000000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101100010000001010010011011001000000000010000000000100000000000000000000000000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011000100000010100100110110010000000000100000000001000000000000000000000000001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010001000000101011001101100100000000001000000000010000000000000000000000000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100100010000001010110011011001000000000010000000000100000000000000000000000000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001000100000010100100110110000000000000000000000000000000000010000000000000001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010001000000101001001101100000000000000000000000000000000000100000000000000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000010000001010110011011000000000000000000000000000000000001000000000000000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010000100000010101100110110000000000000000000000000000000000010000000000000001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100001000000101001001101100100000000000000000000000000000000100000000000000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101000010000001010010011011001000000000000000000000000000000001000000000000000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000000100000010101100110110010000000000000000000000000000000010000000000000001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000001000000101011001101100100000000000000000000000000000000100000000000000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000010000001010010011011000000000000010000000000000000000001000000000000000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000000100000010100100110110000000000000100000000000000000000010000000000000001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111110000000101011001101100000000000001000000000000000000000100000000000000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101111100000001010110011011000000000000010000000000000000000001000000000000000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011111000000010100100110110010000000000100000000000000000000010000000000000001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111110000000101001001101100100000000001000000000000000000000100000000000000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100111100000001010110011011001000000000010000000000000000000001000000000000000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001111000000010101100110110010000000000100000000000000000000010000000000000001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011110000000101001001101100000000000000000000000010000000000100000000000000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100111100000001010010011011000000000000000000000000100000000001000000000000000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010111000000010101100110110000000000000000000000001000000000010000000000000001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101110000000101011001101100000000000000000000000010000000000100000000000000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101011100000001010010011011001000000000000000000000100000000001000000000000000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010111000000010100100110110010000000000000000000001000000000010000000000000001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001110000000101011001101100100000000000000000000010000000000100000000000000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100011100000001010110011011001000000000000000000000100000000001000000000000000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000111000000010100100110110000000000000100000000001000000000010000000000000001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001110000000101001001101100000000000001000000000010000000000100000000000000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101101100000001010110011011000000000000010000000000100000000001000000000000000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011011000000010101100110110000000000000100000000001000000000010000000000000001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110110000000101001001101100100000000001000000000010000000000100000000000000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101101100000001010010011011001000000000010000000000100000000001000000000000000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001011000000010101100110110010000000000100000000001000000000010000000000000001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010110000000101011001101100100000000001000000000010000000000100000000000000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100101100000001010010011011000000000000000000000000000000000000000000000010000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001011000000010100100110110000000000000000000000000000000000000000000000100001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100110000000101011001101100000000000000000000000000000000000000000000001000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101001100000001010110011011000000000000000000000000000000000000000000000010000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010011000000010100100110110010000000000000000000000000000000000000000000100001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100110000000101001001101100100000000000000000000000000000000000000000001000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100001100000001010110011011001000000000000000000000000000000000000000000010000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000011000000010101100110110010000000000000000000000000000000000000000000100001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000110000000101001001101100000000000001000000000000000000000000000000001000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100001100000001010010011011000000000000010000000000000000000000000000000010000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011101000000010101100110110000000000000100000000000000000000000000000000100001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111010000000101011001101100000000000001000000000000000000000000000000001000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101110100000001010010011011001000000000010000000000000000000000000000000010000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011101000000010100100110110010000000000100000000000000000000000000000000100001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011010000000101011001101100100000000001000000000000000000000000000000001000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110100000001010110011011001000000000010000000000000000000000000000000010000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001101000000010100100110110000000000000000000000001000000000000000000000100001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011010000000101001001101100000000000000000000000010000000000000000000001000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101010100000001010110011011000000000000000000000000100000000000000000000010000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010101000000010101100110110000000000000000000000001000000000000000000000100001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101010000000101001001101100100000000000000000000010000000000000000000001000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101010100000001010010011011001000000000000000000000100000000000000000000010000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000101000000010101100110110010000000000000000000001000000000000000000000100001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001010000000101011001101100100000000000000000000010000000000000000000001000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100010100000001010010011011000000000000010000000000100000000000000000000010000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000101000000010100100110110000000000000100000000001000000000000000000000100001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110010000000101011001101100000000000001000000000010000000000000000000001000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101100100000001010110011011000000000000010000000000100000000000000000000010000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011001000000010100100110110010000000000100000000001000000000000000000000100001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110010000000101001001101100100000000001000000000010000000000000000000001000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100100100000001010110011011001000000000010000000000100000000000000000000010000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001001000000010101100110110010000000000100000000001000000000000000000000100001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010010000000101001001101100000000000000000000000000000000000100000000001000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100100100000001010010011011000000000000000000000000000000000001000000000010000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010001000000010101100110110000000000000000000000000000000000010000000000100001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100010000000101011001101100000000000000000000000000000000000100000000001000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000100000001010010011011001000000000000000000000000000000001000000000010000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010001000000010100100110110010000000000000000000000000000000010000000000100001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000010000000101011001101100100000000000000000000000000000000100000000001000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000100000001010110011011001000000000000000000000000000000001000000000010000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000001000000010100100110110000000000000100000000000000000000010000000000100001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000010000000101001001101100000000000001000000000000000000000100000000001000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101111000000001010110011011000000000000010000000000000000000001000000000010000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011110000000010101100110110000000000000100000000000000000000010000000000100001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111100000000101001001101100100000000001000000000000000000000100000000001000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101111000000001010010011011001000000000010000000000000000000001000000000010000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001110000000010101100110110010000000000100000000000000000000010000000000100001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011100000000101011001101100100000000001000000000000000000000100000000001000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100111000000001010010011011000000000000000000000000100000000001000000000010000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001110000000010100100110110000000000000000000000001000000000010000000000100001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101100000000101011001101100000000000000000000000010000000000100000000001000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101011000000001010110011011000000000000000000000000100000000001000000000010000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010110000000010100100110110010000000000000000000001000000000010000000000100001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101100000000101001001101100100000000000000000000010000000000100000000001000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100011000000001010110011011001000000000000000000000100000000001000000000010000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000110000000010101100110110010000000000000000000001000000000010000000000100001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001100000000101001001101100000000000001000000000010000000000100000000001000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100011000000001010010011011000000000000010000000000100000000001000000000010000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011010000000010101100110110000000000000100000000001000000000010000000000100001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110100000000101011001101100000000000001000000000010000000000100000000001000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101101000000001010010011011001000000000010000000000100000000001000000000010000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011010000000010100100110110010000000000100000000001000000000010000000000100001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010100000000101011001101100100000000001000000000010000000000100000000001000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100101000000001010110011011001000000000010000000000100000000001000000000010000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001010000000010100100110110000000000000000000000000000000000000000000000000000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010100000000101001001101100000000000000000000000000000000000000000000000000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101001000000001010110011011000000000000000000000000000000000000000000000000000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010010000000010101100110110000000000000000000000000000000000000000000000000000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100100000000101001001101100100000000000000000000000000000000000000000000000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101001000000001010010011011001000000000000000000000000000000000000000000000000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000010000000010101100110110010000000000000000000000000000000000000000000000000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000100000000101011001101100100000000000000000000000000000000000000000000000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100001000000001010010011011000000000000010000000000000000000000000000000000000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000010000000010100100110110000000000000100000000000000000000000000000000000000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111000000000101011001101100000000000001000000000000000000000000000000000000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101110000000001010110011011000000000000010000000000000000000000000000000000000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011100000000010100100110110010000000000100000000000000000000000000000000000000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111000000000101001001101100100000000001000000000000000000000000000000000000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110000000001010110011011001000000000010000000000000000000000000000000000000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100000000010101100110110010000000000100000000000000000000000000000000000000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000000000101001001101100000000000000000000000010000000000000000000000000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110000000001010010011011000000000000000000000000100000000000000000000000000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010100000000010101100110110000000000000000000000001000000000000000000000000000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101000000000101011001101100000000000000000000000010000000000000000000000000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101010000000001010010011011001000000000000000000000100000000000000000000000000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010100000000010100100110110010000000000000000000001000000000000000000000000000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001000000000101011001101100100000000000000000000010000000000000000000000000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100010000000001010110011011001000000000000000000000100000000000000000000000000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000100000000010100100110110000000000000100000000001000000000000000000000000000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001000000000101001001101100000000000001000000000010000000000000000000000000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101100000000001010110011011000000000000010000000000100000000000000000000000000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011000000000010101100110110000000000000100000000001000000000000000000000000000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110000000000101001001101100100000000001000000000010000000000000000000000000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101100000000001010010011011001000000000010000000000100000000000000000000000000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001000000000010101100110110010000000000100000000001000000000000000000000000000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010000000000101011001101100100000000001000000000010000000000000000000000000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100100000000001010010011011000000000000000000000000000000000001000000000000000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001000000000010100100110110000000000000000000000000000000000010000000000000000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100000000000101011001101100000000000000000000000000000000000100000000000000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000000000001010110011011000000000000000000000000000000000001000000000000000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010000000000010100100110110010000000000000000000000000000000010000000000000000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100000000000101001001101100100000000000000000000000000000000100000000000000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000000000001010110011011001000000000000000000000000000000001000000000000000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000000000000010101100110110010000000000000000000000000000000010000000000000000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000000000000101001001101100000000000001000000000000000000000100000000000000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000000000001010010011011000000000000010000000000000000000001000000000000000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000010111010110000000010101100110110000000000000100000000000000000000010000000000000000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000101110101001000000101011001101100000000000001000000000000000000000100000000000000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000001011101011110000001010010011011001000000000010000000000000000000001000000000000000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000010111010101010000010100100110110010000000000100000000000000000000010000000000000000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000101110001101100000101011001101100100000000001000000000000000000000100000000000000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100011111000001010110011011001000000000010000000000000000000001000000000000000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000111110000010100100110110000000000000000000000001000000000010000000000000000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001111100000101001001101100000000000000000000000010000000000100000000000000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101101111000001010110011011000000000000000000000000100000000001000000000000000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011011110000010101100110110000000000000000000000001000000000010000000000000000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110111100000101001001101100100000000000000000000010000000000100000000000000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101101111000001010010011011001000000000000000000000100000000001000000000000000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001011110000010101100110110010000000000000000000001000000000010000000000000000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110010111100000101011001101100100000000000000000000010000000000100000000000000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100101111000001010010011011000000000000010000000000100000000001000000000000000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001011110000010100100110110000000000000100000000001000000000010000000000000000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100111100000101011001101100000000000001000000000010000000000100000000000000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101001111000001010110011011000000000000010000000000100000000001000000000000000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010011110000010100100110110010000000000100000000001000000000010000000000000000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100111100000101001001101100100000000001000000000010000000000100000000000000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100001111000001010110011011001000000000010000000000100000000001000000000000000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000011110000010101100110110010000000000100000000001000000000010000000000000000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000111100000101001001101100000000000000000000000000000000000000000000001000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100001111000001010010011011000000000000000000000000000000000000000000000010000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011101110000010101100110110000000000000000000000000000000000000000000000100000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110111011100000101011001101100000000000000000000000000000000000000000000001000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101110111000001010010011011001000000000000000000000000000000000000000000010000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011101110000010100100110110010000000000000000000000000000000000000000000100000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011011100000101011001101100100000000000000000000000000000000000000000001000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100110111000001010110011011001000000000000000000000000000000000000000000010000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001101110000010100100110110000000000000100000000000000000000000000000000100000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011011100000101001001101100000000000001000000000000000000000000000000001000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101010111000001010110011011000000000000010000000000000000000000000000000010000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010101110000010101100110110000000000000100000000000000000000000000000000100000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110101011100000101001001101100100000000001000000000000000000000000000000001000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101010111000001010010011011001000000000010000000000000000000000000000000010000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000101110000010101100110110010000000000100000000000000000000000000000000100000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001011100000101011001101100100000000001000000000000000000000000000000001000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100010111000001010010011011000000000000000000000000100000000000000000000010000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000101110000010100100110110000000000000000000000001000000000000000000000100000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110011100000101011001101100000000000000000000000010000000000000000000001000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101100111000001010110011011000000000000000000000000100000000000000000000010000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011001110000010100100110110010000000000000000000001000000000000000000000100000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110011100000101001001101100100000000000000000000010000000000000000000001000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100100111000001010110011011001000000000000000000000100000000000000000000010000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001001110000010101100110110010000000000000000000001000000000000000000000100000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010011100000101001001101100000000000001000000000010000000000000000000001000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100100111000001010010011011000000000000010000000000100000000000000000000010000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010001110000010101100110110000000000000100000000001000000000000000000000100000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100011100000101011001101100000000000001000000000010000000000000000000001000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101000111000001010010011011001000000000010000000000100000000000000000000010000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010001110000010100100110110010000000000100000000001000000000000000000000100000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000011100000101011001101100100000000001000000000010000000000000000000001000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100000111000001010110011011001000000000010000000000100000000000000000000010000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000001110000010100100110110000000000000000000000000000000000010000000000100000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000011100000101001001101100000000000000000000000000000000000100000000001000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101111011000001010110011011000000000000000000000000000000000001000000000010000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011110110000010101100110110000000000000000000000000000000000010000000000100000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111101100000101001001101100100000000000000000000000000000000100000000001000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101111011000001010010011011001000000000000000000000000000000001000000000010000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001110110000010101100110110010000000000000000000000000000000010000000000100000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011101100000101011001101100100000000000000000000000000000000100000000001000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100111011000001010010011011000000000000010000000000000000000001000000000010000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001110110000010100100110110000000000000100000000000000000000010000000000100000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110101101100000101011001101100000000000001000000000000000000000100000000001000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101011011000001010110011011000000000000010000000000000000000001000000000010000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010110110000010100100110110010000000000100000000000000000000010000000000100000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110101101100000101001001101100100000000001000000000000000000000100000000001000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100011011000001010110011011001000000000010000000000000000000001000000000010000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000110110000010101100110110010000000000100000000000000000000010000000000100000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110001101100000101001001101100000000000000000000000010000000000100000000001000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100011011000001010010011011000000000000000000000000100000000001000000000010000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011010110000010101100110110000000000000000000000001000000000010000000000100000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110101100000101011001101100000000000000000000000010000000000100000000001000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101101011000001010010011011001000000000000000000000100000000001000000000010000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011010110000010100100110110010000000000000000000001000000000010000000000100000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010101100000101011001101100100000000000000000000010000000000100000000001000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100101011000001010110011011001000000000000000000000100000000001000000000010000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001010110000010100100110110000000000000100000000001000000000010000000000100000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010101100000101001001101100000000000001000000000010000000000100000000001000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101001011000001010110011011000000000000010000000000100000000001000000000010000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010010110000010101100110110000000000000100000000001000000000010000000000100000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100101100000101001001101100100000000001000000000010000000000100000000001000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101001011000001010010011011001000000000010000000000100000000001000000000010000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000010110000010101100110110010000000000100000000001000000000010000000000100000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000101100000101011001101100100000000001000000000010000000000100000000001000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100001011000001010010011011000000000000000000000000000000000000000000000000000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000010110000010100100110110000000000000000000000000000000000000000000000000001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110111001100000101011001101100000000000000000000000000000000000000000000000000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101110011000001010110011011000000000000000000000000000000000000000000000000000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011100110000010100100110110010000000000000000000000000000000000000000000000001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111001100000101001001101100100000000000000000000000000000000000000000000000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100110011000001010110011011001000000000000000000000000000000000000000000000000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001100110000010101100110110010000000000000000000000000000000000000000000000001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011001100000101001001101100000000000001000000000000000000000000000000000000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100110011000001010010011011000000000000010000000000000000000000000000000000000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010100110000010101100110110000000000000100000000000000000000000000000000000001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110101001100000101011001101100000000000001000000000000000000000000000000000000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101010011000001010010011011001000000000010000000000000000000000000000000000000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010100110000010100100110110010000000000100000000000000000000000000000000000001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001001100000101011001101100100000000001000000000000000000000000000000000000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100010011000001010110011011001000000000010000000000000000000000000000000000000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000100110000010100100110110000000000000000000000001000000000000000000000000001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001001100000101001001101100000000000000000000000010000000000000000000000000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101100011000001010110011011000000000000000000000000100000000000000000000000000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011000110000010101100110110000000000000000000000001000000000000000000000000001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110001100000101001001101100100000000000000000000010000000000000000000000000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101100011000001010010011011001000000000000000000000100000000000000000000000000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001000110000010101100110110010000000000000000000001000000000000000000000000001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110010001100000101011001101100100000000000000000000010000000000000000000000000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100100011000001010010011011000000000000010000000000100000000000000000000000000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001000110000010100100110110000000000000100000000001000000000000000000000000001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110100001100000101011001101100000000000001000000000010000000000000000000000000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101000011000001010110011011000000000000010000000000100000000000000000000000000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010000110000010100100110110010000000000100000000001000000000000000000000000001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100001100000101001001101100100000000001000000000010000000000000000000000000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100000011000001010110011011001000000000010000000000100000000000000000000000000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000000110000010101100110110010000000000100000000001000000000000000000000000001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000001100000101001001101100000000000000000000000000000000000100000000000000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100000011000001010010011011000000000000000000000000000000000001000000000000000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011111010000010101100110110000000000000000000000000000000000010000000000000001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110111110100000101011001101100000000000000000000000000000000000100000000000000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101111101000001010010011011001000000000000000000000000000000001000000000000000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011111010000010100100110110010000000000000000000000000000000010000000000000001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110011110100000101011001101100100000000000000000000000000000000100000000000000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100111101000001010110011011001000000000000000000000000000000001000000000000000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001111010000010100100110110000000000000100000000000000000000010000000000000001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011110100000101001001101100000000000001000000000000000000000100000000000000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101011101000001010110011011000000000000010000000000000000000001000000000000000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010111010000010101100110110000000000000100000000000000000000010000000000000001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110101110100000101001001101100100000000001000000000000000000000100000000000000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101011101000001010010011011001000000000010000000000000000000001000000000000000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000111010000010101100110110010000000000100000000000000000000010000000000000001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110001110100000101011001101100100000000001000000000000000000000100000000000000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100011101000001010010011011000000000000000000000000100000000001000000000000000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000111010000010100100110110000000000000000000000001000000000010000000000000001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110110100000101011001101100000000000000000000000010000000000100000000000000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101101101000001010110011011000000000000000000000000100000000001000000000000000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011011010000010100100110110010000000000000000000001000000000010000000000000001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110110100000101001001101100100000000000000000000010000000000100000000000000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100101101000001010110011011001000000000000000000000100000000001000000000000000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001011010000010101100110110010000000000000000000001000000000010000000000000001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010110100000101001001101100000000000001000000000010000000000100000000000000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100101101000001010010011011000000000000010000000000100000000001000000000000000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010011010000010101100110110000000000000100000000001000000000010000000000000001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100110100000101011001101100000000000001000000000010000000000100000000000000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101001101000001010010011011001000000000010000000000100000000001000000000000000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010011010000010100100110110010000000000100000000001000000000010000000000000001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000110100000101011001101100100000000001000000000010000000000100000000000000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100001101000001010110011011001000000000010000000000100000000001000000000000000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000011010000010100100110110000000000000000000000000000000000000000000000100001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000110100000101001001101100000000000000000000000000000000000000000000001000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100110000000000000000000000000000000000011101110101000001010110011011000000000000000000000000000000000000000000000010000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001100000000000000000000000000000000000111011101010000010101100110110000000000000000000000000000000000000000000000100001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010011000000000000000000000000000000000001110111010100000101001001101100100000000000000000000000000000000000000000001000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100010000000000000000000000000000000000011101110101000001010010011011001000000000000000000000000000000000000000000010000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000000000000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000000000000000000111001101010000010101100110110010000000000000000000000000000000000000000000100001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000000000000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000000000000000001110011010100000101011001101100100000000000000000000000000000000000000000001000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000000000000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000000000000000000011100110101000001010010011011000000000000010000000000000000000000000000000010000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010000000000000111001101010000010100100110110000000000000100000000000000000000000000000000100001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100000000000001110101010100000101011001101100000000000001000000000000000000000000000000001000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001000000000000011101010101000001010110011011000000000000010000000000000000000000000000000010000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010000000000000111010101010000010100100110110010000000000100000000000000000000000000000000100001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100000000000001110101010100000101001001101100100000000001000000000000000000000000000000001000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001000000000000011100010101000001010110011011001000000000010000000000000000000000000000000010000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010000000000000111000101010000010101100110110010000000000100000000000000000000000000000000100001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100000000000001110001010100000101001001101100000000000000000000000010000000000000000000001000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001000000000000011100010101000001010010011011000000000000000000000000100000000000000000000010000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010000000000000111011001010000010101100110110000000000000000000000001000000000000000000000100001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100000000000001110110010100000101011001101100000000000000000000000010000000000000000000001000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001000000000000011101100101000001010010011011001000000000000000000000100000000000000000000010000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111011001010000010100100110110010000000000000000000001000000000000000000000100001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100100000000001110010010100000101011001101100100000000000000000000010000000000000000000001000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001000000000011100100101000001010110011011001000000000000000000000100000000000000000000010000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111001001010000010100100110110000000000000100000000001000000000000000000000100001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110010010100000101001001101100000000000001000000000010000000000000000000001000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011101000101000001010110011011000000000000010000000000100000000000000000000010000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111010001010000010101100110110000000000000100000000001000000000000000000000100001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110100010100000101001001101100100000000001000000000010000000000000000000001000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011101000101000001010010011011001000000000010000000000100000000000000000000010000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111000001010000010101100110110010000000000100000000001000000000000000000000100001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110000010100000101011001101100100000000001000000000010000000000000000000001000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001000000000011100000101000001010010011011000000000000000000000000000000000001000000000010000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111000001010000010100100110110000000000000000000000000000000000010000000000100001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110111100100000101011001101100000000000000000000000000000000000100000000001000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001000000000011101111001000001010110011011000000000000000000000000000000000001000000000010000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111011110010000010100100110110010000000000000000000000000000000010000000000100001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110111100100000101001001101100100000000000000000000000000000000100000000001000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011100111001000001010110011011001000000000000000000000000000000001000000000010000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111001110010000010101100110110010000000000000000000000000000000010000000000100001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110011100100000101001001101100000000000001000000000000000000000100000000001000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011100111001000001010010011011000000000000010000000000000000000001000000000010000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111010110010000010101100110110000000000000100000000000000000000010000000000100001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110101100100000101011001101100000000000001000000000000000000000100000000001000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011101011001000001010010011011001000000000010000000000000000000001000000000010000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111010110010000010100100110110010000000000100000000000000000000010000000000100001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110001100100000101011001101100100000000001000000000000000000000100000000001000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011100011001000001010110011011001000000000010000000000000000000001000000000010000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111000110010000010100100110110000000000000000000000001000000000010000000000100001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110001100100000101001001101100000000000000000000000010000000000100000000001000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011101101001000001010110011011000000000000000000000000100000000001000000000010000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111011010010000010101100110110000000000000000000000001000000000010000000000100001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110110100100000101001001101100100000000000000000000010000000000100000000001000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011101101001000001010010011011001000000000000000000000100000000001000000000010000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111001010010000010101100110110010000000000000000000001000000000010000000000100001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110010100100000101011001101100100000000000000000000010000000000100000000001000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011100101001000001010010011011000000000000010000000000100000000001000000000010000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111001010010000010100100110110000000000000100000000001000000000010000000000100001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110100100100000101011001101100000000000001000000000010000000000100000000001000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011101001001000001010110011011000000000000010000000000100000000001000000000010000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111010010010000010100100110110010000000000100000000001000000000010000000000100001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110100100100000101001001101100100000000001000000000010000000000100000000001000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011100001001000001010110011011001000000000010000000000100000000001000000000010000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100100000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001001000000010011000000000111000010010000010101100110110010000000000100000000001000000000010000000000100001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001001000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010010000000100110000000001110000100100000101001001101100000000000000000000000000000000000000000000000000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010010000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100100000001001100000000011100001001000001010010011011000000000000000000000000000000000000000000000000000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100100000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001001000000010011000000000111011100010000010101100110110000000000000000000000000000000000000000000000000000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001001000000010011100000000010111000000000000000000000000000000000000000000000000000000010011000000000010010000000100111000000001110111000100000101011001101100000000000000000000000000000000000000000000000000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010010000000100111000000000101110000000000000000000000000000000000000000000000000000000100010000000000100100000001001110000000011101110001000001010010011011001000000000000000000000000000000000000000000000000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100100000100100000001001110001000001011100000000000000000000000000000000000000000000000000000001000101001000001001000000010011100010000111011100010000010100100110110010000000000000000000000000000000000000000000000000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001001000000010011100010000010111000000000000000000000000000000000000000000000000000000010011010010000010010000000100111000100001110011000100000101011001101100100000000000000000000000000000000000000000000000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000010010000000100111000100000001110000000000000000000000000000000000000000000000000000000100110100100000100100000001001110001000011100110001000001010110011011001000000000000000000000000000000000000000000000000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100100000100100000001001110001000000011100000000000000000000000000000000000000000000000000001001001101001000001001000000010011100010000111001100010000010100100110110000000000000100000000000000000000000000000000000000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001000001001000000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010000010010000000100111010100001110011000100000101001001101100000000000001000000000000000000000000000000000000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000010010000000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000100100000001001110101000011101010001000001010110011011000000000000010000000000000000000000000000000000000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100100000100100000001001110101000000011100000000000000000000000000000000000000000000000000000001000101001000001001000000010011101010000111010100010000010101100110110000000000000100000000000000000000000000000000000000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001000001001000000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010000010010000000100111010100001110101000100000101001001101100100000000001000000000000000000000000000000000000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000010010000000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000100100000001001110101000011101010001000001010010011011001000000000010000000000000000000000000000000000000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000100100000001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001000000010011101010000111000100010000010101100110110010000000000100000000000000000000000000000000000000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010000010011010000100111010100001110001000100000101011001101100100000000001000000000000000000000000000000000000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000010011010000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000100110100001001110101000011100010001000001010010011011000000000000000000000000100000000000000000000000000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001101000010011101010000111000100010000010100100110110000000000000000000000001000000000000000000000000000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000010011010000100111010100001110110000100000101011001101100000000000000000000000010000000000000000000000000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000010011010000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000100110100001001110101000011101100001000001010110011011000000000000000000000000100000000000000000000000000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001101000010011101010000111011000010000010100100110110010000000000000000000001000000000000000000000000000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000010011010000100111010100001110110000100000101001001101100100000000000000000000010000000000000000000000000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000010011010000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000100110100001001110101000011100100001000001010110011011001000000000000000000000100000000000000000000000000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001000101001000001001101000010011101010000111001000010000010101100110110010000000000000000000001000000000000000000000000000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001000001101101000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010000011011010000100111010100001110010000100000101001001101100000000000001000000000010000000000000000000000000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000011011010000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000110110100001001110101000011100100001000001010010011011000000000000010000000000100000000000000000000000000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100100000110110100001001110101000000011100000000000000000000000000000000000000000000000000000001000101001000001101101000010011101010000111010000010000010101100110110000000000000100000000001000000000000000000000000000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001000001101101000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010000011011010000100111010100001110100000100000101011001101100000000000001000000000010000000000000000000000000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000011011010000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000110110100001001110101000011101000001000001010010011011001000000000010000000000100000000000000000000000000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100101000110110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001010001101101000010011101010000111010000010000010100100110110010000000000100000000001000000000000000000000000000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001010001101101100010011101010000000111000000000000000000000000000000000000000000000000000000010011010010100011011011000100111010100001110000000100000101011001101100100000000001000000000010000000000000000000000000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010100011011011000100111010100000001110000000000000000000000000000000000000000000000000000000100110100101000110110110001001110101000011100000001000001010110011011001000000000010000000000100000000000000000000000000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100101000110110110001001110101000000011100000000000000000000000000000000000000000000000000000001001101001010001101101100010011101010000111000000010000010100100110110000000000000000000000000000000000010000000000000000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001010001101111100010011101010000000111000000000000000000000000000000000000000000000000000000010011010010100011011111000100111010100001110000000100000101001001101100000000000000000000000000000000000100000000000000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111011010100111011111000100111010100000001110000000000000000000000000000000000000000000000000000000100110110101001110111110001001110101000011101111110000001010110011011000000000000000000000000000000000001000000000000000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110110111011110111110001001110101000000011100000000000000000000000000000000000000000000000000000001001101101110111101111100010011101010000111011111100000010101100110110000000000000000000000000000000000010000000000000000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101101110111101111100010011111010000000111000000000000000000000000000000000000000000000000000000010011011011101111011111000100111110100001110111111000000101001001101100100000000000000000000000000000000100000000000000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111011011101111011111000100111110100000001110000000000000000000000000000000000000000000000000000000100110110111011110111110001001111101000011101111110000001010010011011001000000000000000000000000000000001000000000000000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010110111011110111110001001111101000000011100000000000000000000000000000000000000000000000000000001000101101110111101111100010011111010000111001111100000010101100110110010000000000000000000000000000000010000000000000000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101111110111101111100010011111110000000111000000000000000000000000000000000000000000000000000000010001011111101111011111000100111111100001110011111000000101011001101100100000000000000000000000000000000100000000000000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101011111101111011111000100111111100000001110000000000000000000000000000000000000000000000000000000100010111111011110111110001001111111000011100111110000001010010011011000000000000010000000000000000000001000000000000000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010111111011110111111001001111111000000011100000000000000000000000000000000000000000000000000000001000101111110111101111110010011111110000111001111100000010100100110110000000000000100000000000000000000010000000000000000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111110111101111110010011111110000000111000000000000000000000000000000000000000000000000000000010001111111101111011111100100111111100001110101111000000101011001101100000000000001000000000000000000000100000000000000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111101111011111100100111111100000001110000000000000000000000000000000000000000000000000000000100111111111011110111111001001111111000011101011110000001010110011011000000000000010000000000000000000001000000000000000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111011110111111001001111111000000011100000000000000000000000000000000000000000000000000000001000111111110111101111110010011111110000111010111100000010100100110110010000000000100000000000000000000010000000000000000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111110111101111110010011111110000000111000000000000000000000000000000000000000000000000000000010001111111101111011111100100111111100001110101111000000101001001101100100000000001000000000000000000000100000000000000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111101111011111100110111111100000001110000000000000000000000000000000000000000000000000000000100011111111011110111111001101111111000011100011110000001010110011011001000000000010000000000000000000001000000000000000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111011110111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111110111101111110011011111110000111000111100000010101100110110010000000000100000000000000000000010000000000000000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111110111101111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111101111011111100110111111100001110001111000000101001001101100000000000000000000000010000000000100000000000000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111101111011111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111011110111111001101111111000011100011110000001010010011011000000000000000000000000100000000001000000000000000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111011110111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111110111101111110011011111110000111011011100000010101100110110000000000000000000000001000000000010000000000000000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111110111101111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111101111011111100110111111100001110110111000000101011001101100000000000000000000000010000000000100000000000000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111101111011111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111011110111111001101111111000011101101110000001010010011011001000000000000000000000100000000001000000000000000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111011011100000010100100110110010000000000000000000001000000000010000000000000000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110010111000000101011001101100100000000000000000000010000000000100000000000000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111001101111111000011100101110000001010110011011001000000000000000000000100000000001000000000000000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111110011011111110000111001011100000010100100110110000000000000100000000001000000000010000000000000000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111100110111111100001110010111000000101001001101100000000000001000000000010000000000100000000000000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111001101111111000011101001110000001010110011011000000000000010000000000100000000001000000000000000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111110011011111110000111010011100000010101100110110000000000000100000000001000000000010000000000000000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111100110111111100001110100111000000101001001101100100000000001000000000010000000000100000000000000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111001101111111000011101001110000001010010011011001000000000010000000000100000000001000000000000000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111000011100000010101100110110010000000000100000000001000000000010000000000000000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110000111000000101011001101100100000000001000000000010000000000100000000000000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111001101111111000011100001110000001010010011011000000000000000000000000000000000000000000000010000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111000011100000010100100110110000000000000000000000000000000000000000000000100000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110111011000000101011001101100000000000000000000000000000000000000000000001000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111001101111111000011101110110000001010110011011000000000000000000000000000000000000000000000010000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111110011011111110000111011101100000010100100110110010000000000000000000000000000000000000000000100000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110110111111100001110111011000000101001001101100100000000000000000000000000000000000000000001000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111110110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101101111111000011100110110000001010110011011001000000000000000000000000000000000000000000010000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111101101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011011111110000111001101100000010101100110110010000000000000000000000000000000000000000000100000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110110111111100001110011011000000101001001101100000000000001000000000000000000000000000000001000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111110110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101101111111000011100110110000001010010011011000000000000010000000000000000000000000000000010000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111101101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011011111110000111010101100000010101100110110000000000000100000000000000000000000000000000100000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110111111111100001110101011000000101011001101100000000000001000000000000000000000000000000001000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111110111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111101111111111000011101010110000001010010011011001000000000010000000000000000000000000000000010000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111101111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111011111111110000111010101100000010100100110110010000000000100000000000000000000000000000000100000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111110111111111100001110001011000000101011001101100100000000001000000000000000000000000000000001000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111110111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111101111111111000011100010110000001010110011011001000000000010000000000000000000000000000000010000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111101111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111011111111110000111000101100000010100100110110000000000000000000000001000000000000000000000100000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111110111111111100001110001011000000101001001101100000000000000000000000010000000000000000000001000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111110111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111101111111111000011101100110000001010110011011000000000000000000000000100000000000000000000010000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111101111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111011111111110000111011001100000010101100110110000000000000000000000001000000000000000000000100000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110011000000101001001101100100000000000000000000010000000000000000000001000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101100110000001010010011011001000000000000000000000100000000000000000000010000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001001100000010101100110110010000000000000000000001000000000000000000000100000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010011000000101011001101100100000000000000000000010000000000000000000001000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100100110000001010010011011000000000000010000000000100000000000000000000010000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001001100000010100100110110000000000000100000000001000000000000000000000100000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100011000000101011001101100000000000001000000000010000000000000000000001000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000110000001010110011011000000000000010000000000100000000000000000000010000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010001100000010100100110110010000000000100000000001000000000000000000000100000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100011000000101001001101100100000000001000000000010000000000000000000001000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000110000001010110011011001000000000010000000000100000000000000000000010000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000001100000010101100110110010000000000100000000001000000000000000000000100000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000011000000101001001101100000000000000000000000000000000000100000000001000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000110000001010010011011000000000000000000000000000000000001000000000010000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011110100000010101100110110000000000000000000000000000000000010000000000100000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111101000000101011001101100000000000000000000000000000000000100000000001000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101111010000001010010011011001000000000000000000000000000000001000000000010000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011110100000010100100110110010000000000000000000000000000000010000000000100000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011101000000101011001101100100000000000000000000000000000000100000000001000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100111010000001010110011011001000000000000000000000000000000001000000000010000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001110100000010100100110110000000000000100000000000000000000010000000000100000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011101000000101001001101100000000000001000000000000000000000100000000001000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101011010000001010110011011000000000000010000000000000000000001000000000010000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010110100000010101100110110000000000000100000000000000000000010000000000100000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101101000000101001001101100100000000001000000000000000000000100000000001000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101011010000001010010011011001000000000010000000000000000000001000000000010000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000110100000010101100110110010000000000100000000000000000000010000000000100000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001101000000101011001101100100000000001000000000000000000000100000000001000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100011010000001010010011011000000000000000000000000100000000001000000000010000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000110100000010100100110110000000000000000000000001000000000010000000000100000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110101000000101011001101100000000000000000000000010000000000100000000001000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101101010000001010110011011000000000000000000000000100000000001000000000010000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011010100000010100100110110010000000000000000000001000000000010000000000100000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110101000000101001001101100100000000000000000000010000000000100000000001000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100101010000001010110011011001000000000000000000000100000000001000000000010000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001010100000010101100110110010000000000000000000001000000000010000000000100000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010101000000101001001101100000000000001000000000010000000000100000000001000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100101010000001010010011011000000000000010000000000100000000001000000000010000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010010100000010101100110110000000000000100000000001000000000010000000000100000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100101000000101011001101100000000000001000000000010000000000100000000001000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101001010000001010010011011001000000000010000000000100000000001000000000010000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010010100000010100100110110010000000000100000000001000000000010000000000100000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000101000000101011001101100100000000001000000000010000000000100000000001000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100001010000001010110011011001000000000010000000000100000000001000000000010000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000010100000010100100110110000000000000000000000000000000000000000000000000001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000101000000101001001101100000000000000000000000000000000000000000000000000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101110010000001010110011011000000000000000000000000000000000000000000000000000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011100100000010101100110110000000000000000000000000000000000000000000000000001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111001000000101001001101100100000000000000000000000000000000000000000000000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101110010000001010010011011001000000000000000000000000000000000000000000000000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100100000010101100110110010000000000000000000000000000000000000000000000001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011001000000101011001101100100000000000000000000000000000000000000000000000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110010000001010010011011000000000000010000000000000000000000000000000000000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100100000010100100110110000000000000100000000000000000000000000000000000001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101001000000101011001101100000000000001000000000000000000000000000000000000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101010010000001010110011011000000000000010000000000000000000000000000000000000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010100100000010100100110110010000000000100000000000000000000000000000000000001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101001000000101001001101100100000000001000000000000000000000000000000000000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100010010000001010110011011001000000000010000000000000000000000000000000000000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000100100000010101100110110010000000000100000000000000000000000000000000000001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001001000000101001001101100000000000000000000000010000000000000000000000000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100010010000001010010011011000000000000000000000000100000000000000000000000000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011000100000010101100110110000000000000000000000001000000000000000000000000001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110001000000101011001101100000000000000000000000010000000000000000000000000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101100010000001010010011011001000000000000000000000100000000000000000000000000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011000100000010100100110110010000000000000000000001000000000000000000000000001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010001000000101011001101100100000000000000000000010000000000000000000000000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100100010000001010110011011001000000000000000000000100000000000000000000000000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001000100000010100100110110000000000000100000000001000000000000000000000000001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010001000000101001001101100000000000001000000000010000000000000000000000000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101000010000001010110011011000000000000010000000000100000000000000000000000000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010000100000010101100110110000000000000100000000001000000000000000000000000001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100001000000101001001101100100000000001000000000010000000000000000000000000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101000010000001010010011011001000000000010000000000100000000000000000000000000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000000100000010101100110110010000000000100000000001000000000000000000000000001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000001000000101011001101100100000000001000000000010000000000000000000000000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000010000001010010011011000000000000000000000000000000000001000000000000000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000000100000010100100110110000000000000000000000000000000000010000000000000001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111110000000101011001101100000000000000000000000000000000000100000000000000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101111100000001010110011011000000000000000000000000000000000001000000000000000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011111000000010100100110110010000000000000000000000000000000010000000000000001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111110000000101001001101100100000000000000000000000000000000100000000000000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100111100000001010110011011001000000000000000000000000000000001000000000000000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001111000000010101100110110010000000000000000000000000000000010000000000000001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011110000000101001001101100000000000001000000000000000000000100000000000000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100111100000001010010011011000000000000010000000000000000000001000000000000000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010111000000010101100110110000000000000100000000000000000000010000000000000001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101110000000101011001101100000000000001000000000000000000000100000000000000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101011100000001010010011011001000000000010000000000000000000001000000000000000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010111000000010100100110110010000000000100000000000000000000010000000000000001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001110000000101011001101100100000000001000000000000000000000100000000000000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100011100000001010110011011001000000000010000000000000000000001000000000000000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000111000000010100100110110000000000000000000000001000000000010000000000000001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001110000000101001001101100000000000000000000000010000000000100000000000000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101101100000001010110011011000000000000000000000000100000000001000000000000000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011011000000010101100110110000000000000000000000001000000000010000000000000001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110110000000101001001101100100000000000000000000010000000000100000000000000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101101100000001010010011011001000000000000000000000100000000001000000000000000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001011000000010101100110110010000000000000000000001000000000010000000000000001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010110000000101011001101100100000000000000000000010000000000100000000000000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100101100000001010010011011000000000000010000000000100000000001000000000000000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001011000000010100100110110000000000000100000000001000000000010000000000000001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100110000000101011001101100000000000001000000000010000000000100000000000000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101001100000001010110011011000000000000010000000000100000000001000000000000000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010011000000010100100110110010000000000100000000001000000000010000000000000001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100110000000101001001101100100000000001000000000010000000000100000000000000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100001100000001010110011011001000000000010000000000100000000001000000000000000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000011000000010101100110110010000000000100000000001000000000010000000000000001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000110000000101001001101100000000000000000000000000000000000000000000001000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100001100000001010010011011000000000000000000000000000000000000000000000010000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011101000000010101100110110000000000000000000000000000000000000000000000100001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111010000000101011001101100000000000000000000000000000000000000000000001000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101110100000001010010011011001000000000000000000000000000000000000000000010000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011101000000010100100110110010000000000000000000000000000000000000000000100001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011010000000101011001101100100000000000000000000000000000000000000000001000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110100000001010110011011001000000000000000000000000000000000000000000010000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001101000000010100100110110000000000000100000000000000000000000000000000100001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011010000000101001001101100000000000001000000000000000000000000000000001000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101010100000001010110011011000000000000010000000000000000000000000000000010000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010101000000010101100110110000000000000100000000000000000000000000000000100001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101010000000101001001101100100000000001000000000000000000000000000000001000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101010100000001010010011011001000000000010000000000000000000000000000000010000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000101000000010101100110110010000000000100000000000000000000000000000000100001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001010000000101011001101100100000000001000000000000000000000000000000001000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100010100000001010010011011000000000000000000000000100000000000000000000010000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000101000000010100100110110000000000000000000000001000000000000000000000100001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110010000000101011001101100000000000000000000000010000000000000000000001000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101100100000001010110011011000000000000000000000000100000000000000000000010000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011001000000010100100110110010000000000000000000001000000000000000000000100001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110010000000101001001101100100000000000000000000010000000000000000000001000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100100100000001010110011011001000000000000000000000100000000000000000000010000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001001000000010101100110110010000000000000000000001000000000000000000000100001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010010000000101001001101100000000000001000000000010000000000000000000001000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100100100000001010010011011000000000000010000000000100000000000000000000010000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010001000000010101100110110000000000000100000000001000000000000000000000100001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100010000000101011001101100000000000001000000000010000000000000000000001000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000100000001010010011011001000000000010000000000100000000000000000000010000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010001000000010100100110110010000000000100000000001000000000000000000000100001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000010000000101011001101100100000000001000000000010000000000000000000001000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000100000001010110011011001000000000010000000000100000000000000000000010000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000001000000010100100110110000000000000000000000000000000000010000000000100001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000010000000101001001101100000000000000000000000000000000000100000000001000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101111000000001010110011011000000000000000000000000000000000001000000000010000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011110000000010101100110110000000000000000000000000000000000010000000000100001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111100000000101001001101100100000000000000000000000000000000100000000001000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101111000000001010010011011001000000000000000000000000000000001000000000010000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001110000000010101100110110010000000000000000000000000000000010000000000100001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011100000000101011001101100100000000000000000000000000000000100000000001000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100111000000001010010011011000000000000010000000000000000000001000000000010000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001110000000010100100110110000000000000100000000000000000000010000000000100001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101100000000101011001101100000000000001000000000000000000000100000000001000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101011000000001010110011011000000000000010000000000000000000001000000000010000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010110000000010100100110110010000000000100000000000000000000010000000000100001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101100000000101001001101100100000000001000000000000000000000100000000001000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100011000000001010110011011001000000000010000000000000000000001000000000010000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000110000000010101100110110010000000000100000000000000000000010000000000100001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001100000000101001001101100000000000000000000000010000000000100000000001000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100011000000001010010011011000000000000000000000000100000000001000000000010000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011010000000010101100110110000000000000000000000001000000000010000000000100001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110100000000101011001101100000000000000000000000010000000000100000000001000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101101000000001010010011011001000000000000000000000100000000001000000000010000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011010000000010100100110110010000000000000000000001000000000010000000000100001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010100000000101011001101100100000000000000000000010000000000100000000001000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100101000000001010110011011001000000000000000000000100000000001000000000010000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001010000000010100100110110000000000000100000000001000000000010000000000100001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010100000000101001001101100000000000001000000000010000000000100000000001000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101001000000001010110011011000000000000010000000000100000000001000000000010000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010010000000010101100110110000000000000100000000001000000000010000000000100001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100100000000101001001101100100000000001000000000010000000000100000000001000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101001000000001010010011011001000000000010000000000100000000001000000000010000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000010000000010101100110110010000000000100000000001000000000010000000000100001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000100000000101011001101100100000000001000000000010000000000100000000001000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100001000000001010010011011000000000000000000000000000000000000000000000000000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000010000000010100100110110000000000000000000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111000000000101011001101100000000000000000000000000000000000000000000000000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101110000000001010110011011000000000000000000000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011100000000010100100110110010000000000000000000000000000000000000000000000000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111000000000101001001101100100000000000000000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110000000001010110011011001000000000000000000000000000000000000000000000000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100000000010101100110110010000000000000000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000000000101001001101100000000000001000000000000000000000000000000000000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110000000001010010011011000000000000010000000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010100000000010101100110110000000000000100000000000000000000000000000000000000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101000000000101011001101100000000000001000000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101010000000001010010011011001000000000010000000000000000000000000000000000000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010100000000010100100110110010000000000100000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001000000000101011001101100100000000001000000000000000000000000000000000000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100010000000001010110011011001000000000010000000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000100000000010100100110110000000000000000000000001000000000000000000000000000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001000000000101001001101100000000000000000000000010000000000000000000000000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101100000000001010110011011000000000000000000000000100000000000000000000000000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011000000000010101100110110000000000000000000000001000000000000000000000000000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110000000000101001001101100100000000000000000000010000000000000000000000000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101100000000001010010011011001000000000000000000000100000000000000000000000000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001000000000010101100110110010000000000000000000001000000000000000000000000000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010000000000101011001101100100000000000000000000010000000000000000000000000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100100000000001010010011011000000000000010000000000100000000000000000000000000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001000000000010100100110110000000000000100000000001000000000000000000000000000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100000000000101011001101100000000000001000000000010000000000000000000000000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000000000001010110011011000000000000010000000000100000000000000000000000000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010000000000010100100110110010000000000100000000001000000000000000000000000000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100000000000101001001101100100000000001000000000010000000000000000000000000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000000000001010110011011001000000000010000000000100000000000000000000000000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000000000000010101100110110010000000000100000000001000000000000000000000000000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000000000000101001001101100000000000000000000000000000000000100000000000000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000000000001010010011011000000000000000000000000000000000001000000000000000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000010111010110000000010101100110110000000000000000000000000000000000010000000000000000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000101110101001000000101011001101100000000000000000000000000000000000100000000000000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000001011101011110000001010010011011001000000000000000000000000000000001000000000000000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000010111010101010000010100100110110010000000000000000000000000000000010000000000000000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000101110001101100000101011001101100100000000000000000000000000000000100000000000000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100011111000001010110011011001000000000000000000000000000000001000000000000000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000111110000010100100110110000000000000100000000000000000000010000000000000000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001111100000101001001101100000000000001000000000000000000000100000000000000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101101111000001010110011011000000000000010000000000000000000001000000000000000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011011110000010101100110110000000000000100000000000000000000010000000000000000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110111100000101001001101100100000000001000000000000000000000100000000000000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101101111000001010010011011001000000000010000000000000000000001000000000000000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001011110000010101100110110010000000000100000000000000000000010000000000000000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110010111100000101011001101100100000000001000000000000000000000100000000000000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100101111000001010010011011000000000000000000000000100000000001000000000000000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001011110000010100100110110000000000000000000000001000000000010000000000000000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100111100000101011001101100000000000000000000000010000000000100000000000000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101001111000001010110011011000000000000000000000000100000000001000000000000000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010011110000010100100110110010000000000000000000001000000000010000000000000000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100111100000101001001101100100000000000000000000010000000000100000000000000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100001111000001010110011011001000000000000000000000100000000001000000000000000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000011110000010101100110110010000000000000000000001000000000010000000000000000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000111100000101001001101100000000000001000000000010000000000100000000000000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100001111000001010010011011000000000000010000000000100000000001000000000000000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011101110000010101100110110000000000000100000000001000000000010000000000000000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110111011100000101011001101100000000000001000000000010000000000100000000000000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101110111000001010010011011001000000000010000000000100000000001000000000000000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011101110000010100100110110010000000000100000000001000000000010000000000000000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110011011100000101011001101100100000000001000000000010000000000100000000000000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100110111000001010110011011001000000000010000000000100000000001000000000000000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001101110000010100100110110000000000000000000000000000000000000000000000100000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011011100000101001001101100000000000000000000000000000000000000000000001000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101010111000001010110011011000000000000000000000000000000000000000000000010000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010101110000010101100110110000000000000000000000000000000000000000000000100000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110101011100000101001001101100100000000000000000000000000000000000000000001000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101010111000001010010011011001000000000000000000000000000000000000000000010000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000101110000010101100110110010000000000000000000000000000000000000000000100000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110001011100000101011001101100100000000000000000000000000000000000000000001000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100010111000001010010011011000000000000010000000000000000000000000000000010000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000101110000010100100110110000000000000100000000000000000000000000000000100000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110011100000101011001101100000000000001000000000000000000000000000000001000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101100111000001010110011011000000000000010000000000000000000000000000000010000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011001110000010100100110110010000000000100000000000000000000000000000000100000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110011100000101001001101100100000000001000000000000000000000000000000001000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100100111000001010110011011001000000000010000000000000000000000000000000010000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001001110000010101100110110010000000000100000000000000000000000000000000100000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110010011100000101001001101100000000000000000000000010000000000000000000001000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100100111000001010010011011000000000000000000000000100000000000000000000010000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010001110000010101100110110000000000000000000000001000000000000000000000100000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100011100000101011001101100000000000000000000000010000000000000000000001000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101000111000001010010011011001000000000000000000000100000000000000000000010000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010001110000010100100110110010000000000000000000001000000000000000000000100000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000011100000101011001101100100000000000000000000010000000000000000000001000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100000111000001010110011011001000000000000000000000100000000000000000000010000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000001110000010100100110110000000000000100000000001000000000000000000000100000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000011100000101001001101100000000000001000000000010000000000000000000001000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101111011000001010110011011000000000000010000000000100000000000000000000010000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011110110000010101100110110000000000000100000000001000000000000000000000100000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111101100000101001001101100100000000001000000000010000000000000000000001000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101111011000001010010011011001000000000010000000000100000000000000000000010000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001110110000010101100110110010000000000100000000001000000000000000000000100000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011101100000101011001101100100000000001000000000010000000000000000000001000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100111011000001010010011011000000000000000000000000000000000001000000000010000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001110110000010100100110110000000000000000000000000000000000010000000000100000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110101101100000101011001101100000000000000000000000000000000000100000000001000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101011011000001010110011011000000000000000000000000000000000001000000000010000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010110110000010100100110110010000000000000000000000000000000010000000000100000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110101101100000101001001101100100000000000000000000000000000000100000000001000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100011011000001010110011011001000000000000000000000000000000001000000000010000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000110110000010101100110110010000000000000000000000000000000010000000000100000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001101100000101001001101100000000000001000000000000000000000100000000001000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100011011000001010010011011000000000000010000000000000000000001000000000010000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011010110000010101100110110000000000000100000000000000000000010000000000100000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110101100000101011001101100000000000001000000000000000000000100000000001000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101101011000001010010011011001000000000010000000000000000000001000000000010000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011010110000010100100110110010000000000100000000000000000000010000000000100000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010101100000101011001101100100000000001000000000000000000000100000000001000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100101011000001010110011011001000000000010000000000000000000001000000000010000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001010110000010100100110110000000000000000000000001000000000010000000000100000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110010101100000101001001101100000000000000000000000010000000000100000000001000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101001011000001010110011011000000000000000000000000100000000001000000000010000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010010110000010101100110110000000000000000000000001000000000010000000000100000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100101100000101001001101100100000000000000000000010000000000100000000001000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101001011000001010010011011001000000000000000000000100000000001000000000010000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000010110000010101100110110010000000000000000000001000000000010000000000100000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000101100000101011001101100100000000000000000000010000000000100000000001000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100001011000001010010011011000000000000010000000000100000000001000000000010000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000010110000010100100110110000000000000100000000001000000000010000000000100000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111001100000101011001101100000000000001000000000010000000000100000000001000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101110011000001010110011011000000000000010000000000100000000001000000000010000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011100110000010100100110110010000000000100000000001000000000010000000000100000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111001100000101001001101100100000000001000000000010000000000100000000001000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100110011000001010110011011001000000000010000000000100000000001000000000010000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001100110000010101100110110010000000000100000000001000000000010000000000100000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110011001100000101001001101100000000000000000000000000000000000000000000000000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100110011000001010010011011000000000000000000000000000000000000000000000000000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010100110000010101100110110000000000000000000000000000000000000000000000000001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110101001100000101011001101100000000000000000000000000000000000000000000000000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101010011000001010010011011001000000000000000000000000000000000000000000000000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010100110000010100100110110010000000000000000000000000000000000000000000000001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110001001100000101011001101100100000000000000000000000000000000000000000000000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100010011000001010110011011001000000000000000000000000000000000000000000000000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000100110000010100100110110000000000000100000000000000000000000000000000000001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001001100000101001001101100000000000001000000000000000000000000000000000000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101100011000001010110011011000000000000010000000000000000000000000000000000000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011000110000010101100110110000000000000100000000000000000000000000000000000001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110001100000101001001101100100000000001000000000000000000000000000000000000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101100011000001010010011011001000000000010000000000000000000000000000000000000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001000110000010101100110110010000000000100000000000000000000000000000000000001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010001100000101011001101100100000000001000000000000000000000000000000000000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100100011000001010010011011000000000000000000000000100000000000000000000000000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001000110000010100100110110000000000000000000000001000000000000000000000000001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110100001100000101011001101100000000000000000000000010000000000000000000000000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101000011000001010110011011000000000000000000000000100000000000000000000000000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010000110000010100100110110010000000000000000000001000000000000000000000000001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100001100000101001001101100100000000000000000000010000000000000000000000000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100000011000001010110011011001000000000000000000000100000000000000000000000000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000000110000010101100110110010000000000000000000001000000000000000000000000001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000001100000101001001101100000000000001000000000010000000000000000000000000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100000011000001010010011011000000000000010000000000100000000000000000000000000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011111010000010101100110110000000000000100000000001000000000000000000000000001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110111110100000101011001101100000000000001000000000010000000000000000000000000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101111101000001010010011011001000000000010000000000100000000000000000000000000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011111010000010100100110110010000000000100000000001000000000000000000000000001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110011110100000101011001101100100000000001000000000010000000000000000000000000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100111101000001010110011011001000000000010000000000100000000000000000000000000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001111010000010100100110110000000000000000000000000000000000010000000000000001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011110100000101001001101100000000000000000000000000000000000100000000000000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101011101000001010110011011000000000000000000000000000000000001000000000000000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010111010000010101100110110000000000000000000000000000000000010000000000000001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110101110100000101001001101100100000000000000000000000000000000100000000000000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101011101000001010010011011001000000000000000000000000000000001000000000000000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000111010000010101100110110010000000000000000000000000000000010000000000000001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110001110100000101011001101100100000000000000000000000000000000100000000000000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100011101000001010010011011000000000000010000000000000000000001000000000000000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000111010000010100100110110000000000000100000000000000000000010000000000000001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110110100000101011001101100000000000001000000000000000000000100000000000000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101101101000001010110011011000000000000010000000000000000000001000000000000000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011011010000010100100110110010000000000100000000000000000000010000000000000001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110110100000101001001101100100000000001000000000000000000000100000000000000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100101101000001010110011011001000000000010000000000000000000001000000000000000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001011010000010101100110110010000000000100000000000000000000010000000000000001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010110100000101001001101100000000000000000000000010000000000100000000000000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100101101000001010010011011000000000000000000000000100000000001000000000000000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010011010000010101100110110000000000000000000000001000000000010000000000000001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100110100000101011001101100000000000000000000000010000000000100000000000000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101001101000001010010011011001000000000000000000000100000000001000000000000000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010011010000010100100110110010000000000000000000001000000000010000000000000001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000110100000101011001101100100000000000000000000010000000000100000000000000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100001101000001010110011011001000000000000000000000100000000001000000000000000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000011010000010100100110110000000000000100000000001000000000010000000000000001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000110100000101001001101100000000000001000000000010000000000100000000000000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101110101000001010110011011000000000000010000000000100000000001000000000000000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001100000000000000000000000000000000000111011101010000010101100110110000000000000100000000001000000000010000000000000001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010011000000000000000000000000000000000001110111010100000101001001101100100000000001000000000010000000000100000000000000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100110000000000000000000000000000000000011101110101000001010010011011001000000000010000000000100000000001000000000000000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000000000000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000000000000000000111001101010000010101100110110010000000000100000000001000000000010000000000000001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000000000000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000000000000000001110011010100000101011001101100100000000001000000000010000000000100000000000000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000000000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000000000000000000011100110101000001010010011011000000000000000000000000000000000000000000000010000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010000000000000111001101010000010100100110110000000000000000000000000000000000000000000000100001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100000000000001110101010100000101011001101100000000000000000000000000000000000000000000001000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001000000000000011101010101000001010110011011000000000000000000000000000000000000000000000010000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010000000000000111010101010000010100100110110010000000000000000000000000000000000000000000100001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100000000000001110101010100000101001001101100100000000000000000000000000000000000000000001000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001000000000000011100010101000001010110011011001000000000000000000000000000000000000000000010000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010000000000000111000101010000010101100110110010000000000000000000000000000000000000000000100001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100000000000001110001010100000101001001101100000000000001000000000000000000000000000000001000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001000000000000011100010101000001010010011011000000000000010000000000000000000000000000000010000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010000000000000111011001010000010101100110110000000000000100000000000000000000000000000000100001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100000000000001110110010100000101011001101100000000000001000000000000000000000000000000001000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001000000000000011101100101000001010010011011001000000000010000000000000000000000000000000010000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111011001010000010100100110110010000000000100000000000000000000000000000000100001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100100000000001110010010100000101011001101100100000000001000000000000000000000000000000001000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001000000000011100100101000001010110011011001000000000010000000000000000000000000000000010000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111001001010000010100100110110000000000000000000000001000000000000000000000100001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100100000000001110010010100000101001001101100000000000000000000000010000000000000000000001000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001000000000011101000101000001010110011011000000000000000000000000100000000000000000000010000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111010001010000010101100110110000000000000000000000001000000000000000000000100001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110100010100000101001001101100100000000000000000000010000000000000000000001000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011101000101000001010010011011001000000000000000000000100000000000000000000010000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111000001010000010101100110110010000000000000000000001000000000000000000000100001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110000010100000101011001101100100000000000000000000010000000000000000000001000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011100000101000001010010011011000000000000010000000000100000000000000000000010000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111000001010000010100100110110000000000000100000000001000000000000000000000100001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100100000000001110111100100000101011001101100000000000001000000000010000000000000000000001000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001000000000011101111001000001010110011011000000000000010000000000100000000000000000000010000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111011110010000010100100110110010000000000100000000001000000000000000000000100001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100100000000001110111100100000101001001101100100000000001000000000010000000000000000000001000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001000000000011100111001000001010110011011001000000000010000000000100000000000000000000010000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111001110010000010101100110110010000000000100000000001000000000000000000000100001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110011100100000101001001101100000000000000000000000000000000000100000000001000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011100111001000001010010011011000000000000000000000000000000000001000000000010000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111010110010000010101100110110000000000000000000000000000000000010000000000100001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110101100100000101011001101100000000000000000000000000000000000100000000001000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011101011001000001010010011011001000000000000000000000000000000001000000000010000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111010110010000010100100110110010000000000000000000000000000000010000000000100001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110001100100000101011001101100100000000000000000000000000000000100000000001000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011100011001000001010110011011001000000000000000000000000000000001000000000010000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111000110010000010100100110110000000000000100000000000000000000010000000000100001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110001100100000101001001101100000000000001000000000000000000000100000000001000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011101101001000001010110011011000000000000010000000000000000000001000000000010000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111011010010000010101100110110000000000000100000000000000000000010000000000100001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110110100100000101001001101100100000000001000000000000000000000100000000001000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011101101001000001010010011011001000000000010000000000000000000001000000000010000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111001010010000010101100110110010000000000100000000000000000000010000000000100001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110010100100000101011001101100100000000001000000000000000000000100000000001000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011100101001000001010010011011000000000000000000000000100000000001000000000010000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111001010010000010100100110110000000000000000000000001000000000010000000000100001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110100100100000101011001101100000000000000000000000010000000000100000000001000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011101001001000001010110011011000000000000000000000000100000000001000000000010000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111010010010000010100100110110010000000000000000000001000000000010000000000100001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110100100100000101001001101100100000000000000000000010000000000100000000001000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011100001001000001010110011011001000000000000000000000100000000001000000000010000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100100000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001001000000010011000000000111000010010000010101100110110010000000000000000000001000000000010000000000100001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001001000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010010000000100110000000001110000100100000101001001101100000000000001000000000010000000000100000000001000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010010000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100100000001001100000000011100001001000001010010011011000000000000010000000000100000000001000000000010000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100100000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001001000000010011000000000111011100010000010101100110110000000000000100000000001000000000010000000000100001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001001000000010011100000000010111000000000000000000000000000000000000000000000000000000010011000000000010010000000100111000000001110111000100000101011001101100000000000001000000000010000000000100000000001000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010010000000100111000000000101110000000000000000000000000000000000000000000000000000000100110000000000100100000001001110000000011101110001000001010010011011001000000000010000000000100000000001000000000010000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000100100000001001110001000001011100000000000000000000000000000000000000000000000000000001001101001000001001000000010011100010000111011100010000010100100110110010000000000100000000001000000000010000000000100001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001001000000010011100010000010111000000000000000000000000000000000000000000000000000000010011010010000010010000000100111000100001110011000100000101011001101100100000000001000000000010000000000100000000001000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000010010000000100111000100000001110000000000000000000000000000000000000000000000000000000100010100100000100100000001001110001000011100110001000001010110011011001000000000010000000000100000000001000000000010000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100100000100100000001001110001000000011100000000000000000000000000000000000000000000000000001001000101001000001001000000010011100010000111001100010000010100100110110000000000000000000000000000000000000000000000000000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001000001001000000010011100010000000111000000000000000000000000000000000000000000000000000000010001010010000010010000000100111000100001110011000100000101001001101100000000000000000000000000000000000000000000000000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000010010000000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000100100000001001110101000011101010001000001010110011011000000000000000000000000000000000000000000000000000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100100000100100000001001110101000000011100000000000000000000000000000000000000000000000000000001000101001000001001000000010011101010000111010100010000010101100110110000000000000000000000000000000000000000000000000000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001000001001000000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010000010010000000100111010100001110101000100000101001001101100100000000000000000000000000000000000000000000000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000010010000000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000100100000001001110101000011101010001000001010010011011001000000000000000000000000000000000000000000000000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100100000100100000001001110101000000011100000000000000000000000000000000000000000000000000000001000101001000001001000000010011101010000111000100010000010101100110110010000000000000000000000000000000000000000000000000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000010011010000100111010100001110001000100000101011001101100100000000000000000000000000000000000000000000000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000010011010000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000100110100001001110101000011100010001000001010010011011000000000000010000000000000000000000000000000000000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001101000010011101010000111000100010000010100100110110000000000000100000000000000000000000000000000000000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000010011010000100111010100001110110000100000101011001101100000000000001000000000000000000000000000000000000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000010011010000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000100110100001001110101000011101100001000001010110011011000000000000010000000000000000000000000000000000000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001101000010011101010000111011000010000010100100110110010000000000100000000000000000000000000000000000000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000010011010000100111010100001110110000100000101001001101100100000000001000000000000000000000000000000000000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000010011010000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000100110100001001110101000011100100001000001010110011011001000000000010000000000000000000000000000000000000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001101000010011101010000111001000010000010101100110110010000000000100000000000000000000000000000000000000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001101101000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000011011010000100111010100001110010000100000101001001101100000000000000000000000010000000000000000000000000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000011011010000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000110110100001001110101000011100100001000001010010011011000000000000000000000000100000000000000000000000000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100100000110110100001001110101000000011100000000000000000000000000000000000000000000000000000001000101001000001101101000010011101010000111010000010000010101100110110000000000000000000000001000000000000000000000000000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001101101000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000011011010000100111010100001110100000100000101011001101100000000000000000000000010000000000000000000000000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000011011010000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000110110100001001110101000011101000001000001010010011011001000000000000000000000100000000000000000000000000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100100000110110100001001110101000000011100000000000000000000000000000000000000000000000000000001000101001000001101101000010011101010000111010000010000010100100110110010000000000000000000001000000000000000000000000000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001010001101101000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010100011011010000100111010100001110000000100000101011001101100100000000000000000000010000000000000000000000000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010100011011011000100111010100000001110000000000000000000000000000000000000000000000000000000100010100101000110110110001001110101000011100000001000001010110011011001000000000000000000000100000000000000000000000000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100101000110111110001001110101000000011100000000000000000000000000000000000000000000000000000001000101001010001101111100010011101010000111000000010000010100100110110000000000000100000000001000000000000000000000000000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101101010001101111100010011101010000000111000000000000000000000000000000000000000000000000000000010001011010100011011111000100111010100001110000000100000101001001101100000000000001000000000010000000000000000000000000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111011010100111011111000100111010100000001110000000000000000000000000000000000000000000000000000000100110110101001110111110001001110101000011101111110000001010110011011000000000000010000000000100000000000000000000000000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110110111011110111110001001110101000000011100000000000000000000000000000000000000000000000000000001001101101110111101111100010011101010000111011111100000010101100110110000000000000100000000001000000000000000000000000000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101101110111101111100010011111010000000111000000000000000000000000000000000000000000000000000000010011011011101111011111000100111110100001110111111000000101001001101100100000000001000000000010000000000000000000000000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111011011101111011111000100111110100000001110000000000000000000000000000000000000000000000000000000100110110111011110111110001001111101000011101111110000001010010011011001000000000010000000000100000000000000000000000000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110110111011110111110001001111101000000011100000000000000000000000000000000000000000000000000000001001101101110111101111100010011111010000111001111100000010101100110110010000000000100000000001000000000000000000000000000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101101110111101111100010011111010000000111000000000000000000000000000000000000000000000000000000010001011011101111011111000100111110100001110011111000000101011001101100100000000001000000000010000000000000000000000000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111011111101111011111000100111111100000001110000000000000000000000000000000000000000000000000000000100110111111011110111110001001111111000011100111110000001010010011011000000000000000000000000000000000001000000000000000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110111111011110111111001001111111000000011100000000000000000000000000000000000000000000000000000001001101111110111101111110010011111110000111001111100000010100100110110000000000000000000000000000000000010000000000000000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111110111101111110010011111110000000111000000000000000000000000000000000000000000000000000000010001111111101111011111100100111111100001110101111000000101011001101100000000000000000000000000000000000100000000000000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111101111011111100100111111100000001110000000000000000000000000000000000000000000000000000000100011111111011110111111001001111111000011101011110000001010110011011000000000000000000000000000000000001000000000000000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111011110111111001001111111000000011100000000000000000000000000000000000000000000000000000001000111111110111101111110010011111110000111010111100000010100100110110010000000000000000000000000000000010000000000000000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111110111101111110010011111110000000111000000000000000000000000000000000000000000000000000000010001111111101111011111100100111111100001110101111000000101001001101100100000000000000000000000000000000100000000000000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111101111011111100100111111100000001110000000000000000000000000000000000000000000000000000000100011111111011110111111001001111111000011100011110000001010110011011001000000000000000000000000000000001000000000000000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111011110111111001001111111000000011100000000000000000000000000000000000000000000000000000001001111111110111101111110010011111110000111000111100000010101100110110010000000000000000000000000000000010000000000000000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111110111101111110010011111110000000111000000000000000000000000000000000000000000000000000000010001111111101111011111100100111111100001110001111000000101001001101100000000000001000000000000000000000100000000000000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111101111011111100110111111100000001110000000000000000000000000000000000000000000000000000000100011111111011110111111001101111111000011100011110000001010010011011000000000000010000000000000000000001000000000000000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111011110111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111110111101111110011011111110000111011011100000010101100110110000000000000100000000000000000000010000000000000000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111110111101111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111101111011111100110111111100001110110111000000101011001101100000000000001000000000000000000000100000000000000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111101111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111011111111111001101111111000011101101110000001010010011011001000000000010000000000000000000001000000000000000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111011011100000010100100110110010000000000100000000000000000000010000000000000000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111100110111111100001110010111000000101011001101100100000000001000000000000000000000100000000000000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111001101111111000011100101110000001010110011011001000000000010000000000000000000001000000000000000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111110011011111110000111001011100000010100100110110000000000000000000000001000000000010000000000000000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110010111000000101001001101100000000000000000000000010000000000100000000000000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111001101111111000011101001110000001010110011011000000000000000000000000100000000001000000000000000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111010011100000010101100110110000000000000000000000001000000000010000000000000000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111100110111111100001110100111000000101001001101100100000000000000000000010000000000100000000000000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111001101111111000011101001110000001010010011011001000000000000000000000100000000001000000000000000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111000011100000010101100110110010000000000000000000001000000000010000000000000000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110000111000000101011001101100100000000000000000000010000000000100000000000000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111001101111111000011100001110000001010010011011000000000000010000000000100000000001000000000000000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111000011100000010100100110110000000000000100000000001000000000010000000000000000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110111011000000101011001101100000000000001000000000010000000000100000000000000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111001101111111000011101110110000001010110011011000000000000010000000000100000000001000000000000000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111110011011111110000111011101100000010100100110110010000000000100000000001000000000010000000000000000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111100110111111100001110111011000000101001001101100100000000001000000000010000000000100000000000000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111110110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101101111111000011100110110000001010110011011001000000000010000000000100000000001000000000000000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111101101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011011111110000111001101100000010101100110110010000000000100000000001000000000010000000000000000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110110111111100001110011011000000101001001101100000000000000000000000000000000000000000000001000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111110110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101101111111000011100110110000001010010011011000000000000000000000000000000000000000000000010000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111101101111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111011011111110000111010101100000010101100110110000000000000000000000000000000000000000000000100000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111110110111111100001110101011000000101011001101100000000000000000000000000000000000000000000001000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111110110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101101111111000011101010110000001010010011011001000000000000000000000000000000000000000000010000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111101111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111011111111110000111010101100000010100100110110010000000000000000000000000000000000000000000100000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111110111111111100001110001011000000101011001101100100000000000000000000000000000000000000000001000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111110111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111101111111111000011100010110000001010110011011001000000000000000000000000000000000000000000010000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111101111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111011111111110000111000101100000010100100110110000000000000100000000000000000000000000000000100000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111110111111111100001110001011000000101001001101100000000000001000000000000000000000000000000001000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111110111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101111111111000011101100110000001010110011011000000000000010000000000000000000000000000000010000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111101111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011111111110000111011001100000010101100110110000000000000100000000000000000000000000000000100000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110111111111100001110110011000000101001001101100100000000001000000000000000000000000000000001000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111110111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101111111111000011101100110000001010010011011001000000000010000000000000000000000000000000010000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001001100000010101100110110010000000000100000000000000000000000000000000100000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010011000000101011001101100100000000001000000000000000000000000000000001000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100100110000001010010011011000000000000000000000000100000000000000000000010000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001001100000010100100110110000000000000000000000001000000000000000000000100000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100011000000101011001101100000000000000000000000010000000000000000000001000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000110000001010110011011000000000000000000000000100000000000000000000010000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010001100000010100100110110010000000000000000000001000000000000000000000100000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100011000000101001001101100100000000000000000000010000000000000000000001000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000110000001010110011011001000000000000000000000100000000000000000000010000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000001100000010101100110110010000000000000000000001000000000000000000000100000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000011000000101001001101100000000000001000000000010000000000000000000001000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000110000001010010011011000000000000010000000000100000000000000000000010000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011110100000010101100110110000000000000100000000001000000000000000000000100000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111101000000101011001101100000000000001000000000010000000000000000000001000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101111010000001010010011011001000000000010000000000100000000000000000000010000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011110100000010100100110110010000000000100000000001000000000000000000000100000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011101000000101011001101100100000000001000000000010000000000000000000001000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100111010000001010110011011001000000000010000000000100000000000000000000010000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001110100000010100100110110000000000000000000000000000000000010000000000100000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011101000000101001001101100000000000000000000000000000000000100000000001000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101011010000001010110011011000000000000000000000000000000000001000000000010000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010110100000010101100110110000000000000000000000000000000000010000000000100000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101101000000101001001101100100000000000000000000000000000000100000000001000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101011010000001010010011011001000000000000000000000000000000001000000000010000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000110100000010101100110110010000000000000000000000000000000010000000000100000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001101000000101011001101100100000000000000000000000000000000100000000001000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100011010000001010010011011000000000000010000000000000000000001000000000010000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000110100000010100100110110000000000000100000000000000000000010000000000100000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110101000000101011001101100000000000001000000000000000000000100000000001000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101101010000001010110011011000000000000010000000000000000000001000000000010000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011010100000010100100110110010000000000100000000000000000000010000000000100000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110101000000101001001101100100000000001000000000000000000000100000000001000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100101010000001010110011011001000000000010000000000000000000001000000000010000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001010100000010101100110110010000000000100000000000000000000010000000000100000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010101000000101001001101100000000000000000000000010000000000100000000001000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100101010000001010010011011000000000000000000000000100000000001000000000010000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010010100000010101100110110000000000000000000000001000000000010000000000100000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100101000000101011001101100000000000000000000000010000000000100000000001000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101001010000001010010011011001000000000000000000000100000000001000000000010000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010010100000010100100110110010000000000000000000001000000000010000000000100000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000101000000101011001101100100000000000000000000010000000000100000000001000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100001010000001010110011011001000000000000000000000100000000001000000000010000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000010100000010100100110110000000000000100000000001000000000010000000000100000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000101000000101001001101100000000000001000000000010000000000100000000001000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101110010000001010110011011000000000000010000000000100000000001000000000010000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011100100000010101100110110000000000000100000000001000000000010000000000100000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111001000000101001001101100100000000001000000000010000000000100000000001000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101110010000001010010011011001000000000010000000000100000000001000000000010000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100100000010101100110110010000000000100000000001000000000010000000000100000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011001000000101011001101100100000000001000000000010000000000100000000001000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110010000001010010011011000000000000000000000000000000000000000000000000000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100100000010100100110110000000000000000000000000000000000000000000000000001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101001000000101011001101100000000000000000000000000000000000000000000000000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101010010000001010110011011000000000000000000000000000000000000000000000000000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010100100000010100100110110010000000000000000000000000000000000000000000000001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101001000000101001001101100100000000000000000000000000000000000000000000000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100010010000001010110011011001000000000000000000000000000000000000000000000000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000100100000010101100110110010000000000000000000000000000000000000000000000001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001001000000101001001101100000000000001000000000000000000000000000000000000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100010010000001010010011011000000000000010000000000000000000000000000000000000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011000100000010101100110110000000000000100000000000000000000000000000000000001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110001000000101011001101100000000000001000000000000000000000000000000000000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101100010000001010010011011001000000000010000000000000000000000000000000000000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011000100000010100100110110010000000000100000000000000000000000000000000000001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010001000000101011001101100100000000001000000000000000000000000000000000000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100100010000001010110011011001000000000010000000000000000000000000000000000000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001000100000010100100110110000000000000000000000001000000000000000000000000001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010001000000101001001101100000000000000000000000010000000000000000000000000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101000010000001010110011011000000000000000000000000100000000000000000000000000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010000100000010101100110110000000000000000000000001000000000000000000000000001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100001000000101001001101100100000000000000000000010000000000000000000000000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000010000001010010011011001000000000000000000000100000000000000000000000000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000000100000010101100110110010000000000000000000001000000000000000000000000001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000001000000101011001101100100000000000000000000010000000000000000000000000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000010000001010010011011000000000000010000000000100000000000000000000000000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000000100000010100100110110000000000000100000000001000000000000000000000000001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111110000000101011001101100000000000001000000000010000000000000000000000000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101111100000001010110011011000000000000010000000000100000000000000000000000000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011111000000010100100110110010000000000100000000001000000000000000000000000001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111110000000101001001101100100000000001000000000010000000000000000000000000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100111100000001010110011011001000000000010000000000100000000000000000000000000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001111000000010101100110110010000000000100000000001000000000000000000000000001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011110000000101001001101100000000000000000000000000000000000100000000000000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100111100000001010010011011000000000000000000000000000000000001000000000000000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010111000000010101100110110000000000000000000000000000000000010000000000000001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101110000000101011001101100000000000000000000000000000000000100000000000000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101011100000001010010011011001000000000000000000000000000000001000000000000000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010111000000010100100110110010000000000000000000000000000000010000000000000001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001110000000101011001101100100000000000000000000000000000000100000000000000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100011100000001010110011011001000000000000000000000000000000001000000000000000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000111000000010100100110110000000000000100000000000000000000010000000000000001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001110000000101001001101100000000000001000000000000000000000100000000000000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101101100000001010110011011000000000000010000000000000000000001000000000000000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011011000000010101100110110000000000000100000000000000000000010000000000000001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110110000000101001001101100100000000001000000000000000000000100000000000000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101101100000001010010011011001000000000010000000000000000000001000000000000000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001011000000010101100110110010000000000100000000000000000000010000000000000001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010110000000101011001101100100000000001000000000000000000000100000000000000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100101100000001010010011011000000000000000000000000100000000001000000000000000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001011000000010100100110110000000000000000000000001000000000010000000000000001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100110000000101011001101100000000000000000000000010000000000100000000000000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101001100000001010110011011000000000000000000000000100000000001000000000000000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010011000000010100100110110010000000000000000000001000000000010000000000000001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100110000000101001001101100100000000000000000000010000000000100000000000000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100001100000001010110011011001000000000000000000000100000000001000000000000000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000011000000010101100110110010000000000000000000001000000000010000000000000001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000110000000101001001101100000000000001000000000010000000000100000000000000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100001100000001010010011011000000000000010000000000100000000001000000000000000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011101000000010101100110110000000000000100000000001000000000010000000000000001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111010000000101011001101100000000000001000000000010000000000100000000000000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101110100000001010010011011001000000000010000000000100000000001000000000000000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011101000000010100100110110010000000000100000000001000000000010000000000000001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011010000000101011001101100100000000001000000000010000000000100000000000000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110100000001010110011011001000000000010000000000100000000001000000000000000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001101000000010100100110110000000000000000000000000000000000000000000000100001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011010000000101001001101100000000000000000000000000000000000000000000001000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101010100000001010110011011000000000000000000000000000000000000000000000010000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010101000000010101100110110000000000000000000000000000000000000000000000100001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101010000000101001001101100100000000000000000000000000000000000000000001000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101010100000001010010011011001000000000000000000000000000000000000000000010000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000101000000010101100110110010000000000000000000000000000000000000000000100001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001010000000101011001101100100000000000000000000000000000000000000000001000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100010100000001010010011011000000000000010000000000000000000000000000000010000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000101000000010100100110110000000000000100000000000000000000000000000000100001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110010000000101011001101100000000000001000000000000000000000000000000001000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101100100000001010110011011000000000000010000000000000000000000000000000010000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011001000000010100100110110010000000000100000000000000000000000000000000100001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110010000000101001001101100100000000001000000000000000000000000000000001000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100100100000001010110011011001000000000010000000000000000000000000000000010000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001001000000010101100110110010000000000100000000000000000000000000000000100001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010010000000101001001101100000000000000000000000010000000000000000000001000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100100100000001010010011011000000000000000000000000100000000000000000000010000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010001000000010101100110110000000000000000000000001000000000000000000000100001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100010000000101011001101100000000000000000000000010000000000000000000001000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000100000001010010011011001000000000000000000000100000000000000000000010000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010001000000010100100110110010000000000000000000001000000000000000000000100001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000010000000101011001101100100000000000000000000010000000000000000000001000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000100000001010110011011001000000000000000000000100000000000000000000010000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000001000000010100100110110000000000000100000000001000000000000000000000100001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000010000000101001001101100000000000001000000000010000000000000000000001000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101111000000001010110011011000000000000010000000000100000000000000000000010000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011110000000010101100110110000000000000100000000001000000000000000000000100001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111100000000101001001101100100000000001000000000010000000000000000000001000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101111000000001010010011011001000000000010000000000100000000000000000000010000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001110000000010101100110110010000000000100000000001000000000000000000000100001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011100000000101011001101100100000000001000000000010000000000000000000001000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100111000000001010010011011000000000000000000000000000000000001000000000010000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001110000000010100100110110000000000000000000000000000000000010000000000100001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101100000000101011001101100000000000000000000000000000000000100000000001000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101011000000001010110011011000000000000000000000000000000000001000000000010000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010110000000010100100110110010000000000000000000000000000000010000000000100001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101100000000101001001101100100000000000000000000000000000000100000000001000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100011000000001010110011011001000000000000000000000000000000001000000000010000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000110000000010101100110110010000000000000000000000000000000010000000000100001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001100000000101001001101100000000000001000000000000000000000100000000001000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100011000000001010010011011000000000000010000000000000000000001000000000010000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011010000000010101100110110000000000000100000000000000000000010000000000100001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110100000000101011001101100000000000001000000000000000000000100000000001000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101101000000001010010011011001000000000010000000000000000000001000000000010000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011010000000010100100110110010000000000100000000000000000000010000000000100001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010100000000101011001101100100000000001000000000000000000000100000000001000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100101000000001010110011011001000000000010000000000000000000001000000000010000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001010000000010100100110110000000000000000000000001000000000010000000000100001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010100000000101001001101100000000000000000000000010000000000100000000001000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101001000000001010110011011000000000000000000000000100000000001000000000010000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010010000000010101100110110000000000000000000000001000000000010000000000100001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100100000000101001001101100100000000000000000000010000000000100000000001000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101001000000001010010011011001000000000000000000000100000000001000000000010000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000010000000010101100110110010000000000000000000001000000000010000000000100001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000100000000101011001101100100000000000000000000010000000000100000000001000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100001000000001010010011011000000000000010000000000100000000001000000000010000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000010000000010100100110110000000000000100000000001000000000010000000000100001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111000000000101011001101100000000000001000000000010000000000100000000001000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101110000000001010110011011000000000000010000000000100000000001000000000010000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011100000000010100100110110010000000000100000000001000000000010000000000100001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111000000000101001001101100100000000001000000000010000000000100000000001000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110000000001010110011011001000000000010000000000100000000001000000000010000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100000000010101100110110010000000000100000000001000000000010000000000100001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000000000101001001101100000000000000000000000000000000000000000000000000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110000000001010010011011000000000000000000000000000000000000000000000000000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010100000000010101100110110000000000000000000000000000000000000000000000000000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101000000000101011001101100000000000000000000000000000000000000000000000000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101010000000001010010011011001000000000000000000000000000000000000000000000000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010100000000010100100110110010000000000000000000000000000000000000000000000000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001000000000101011001101100100000000000000000000000000000000000000000000000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100010000000001010110011011001000000000000000000000000000000000000000000000000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000100000000010100100110110000000000000100000000000000000000000000000000000000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001000000000101001001101100000000000001000000000000000000000000000000000000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101100000000001010110011011000000000000010000000000000000000000000000000000000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011000000000010101100110110000000000000100000000000000000000000000000000000000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110000000000101001001101100100000000001000000000000000000000000000000000000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101100000000001010010011011001000000000010000000000000000000000000000000000000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001000000000010101100110110010000000000100000000000000000000000000000000000000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010000000000101011001101100100000000001000000000000000000000000000000000000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100100000000001010010011011000000000000000000000000100000000000000000000000000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001000000000010100100110110000000000000000000000001000000000000000000000000000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100000000000101011001101100000000000000000000000010000000000000000000000000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000000000001010110011011000000000000000000000000100000000000000000000000000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010000000000010100100110110010000000000000000000001000000000000000000000000000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100000000000101001001101100100000000000000000000010000000000000000000000000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000000000001010110011011001000000000000000000000100000000000000000000000000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000000000000010101100110110010000000000000000000001000000000000000000000000000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000000000000101001001101100000000000001000000000010000000000000000000000000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000000000001010010011011000000000000010000000000100000000000000000000000000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000010111010110000000010101100110110000000000000100000000001000000000000000000000000000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000101110101001000000101011001101100000000000001000000000010000000000000000000000000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000001011101011110000001010010011011001000000000010000000000100000000000000000000000000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000010111010101010000010100100110110010000000000100000000001000000000000000000000000000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000101110001101100000101011001101100100000000001000000000010000000000000000000000000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100011111000001010110011011001000000000010000000000100000000000000000000000000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000111110000010100100110110000000000000000000000000000000000010000000000000000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001111100000101001001101100000000000000000000000000000000000100000000000000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101101111000001010110011011000000000000000000000000000000000001000000000000000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011011110000010101100110110000000000000000000000000000000000010000000000000000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110111100000101001001101100100000000000000000000000000000000100000000000000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101101111000001010010011011001000000000000000000000000000000001000000000000000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001011110000010101100110110010000000000000000000000000000000010000000000000000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010111100000101011001101100100000000000000000000000000000000100000000000000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100101111000001010010011011000000000000010000000000000000000001000000000000000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001011110000010100100110110000000000000100000000000000000000010000000000000000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100111100000101011001101100000000000001000000000000000000000100000000000000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101001111000001010110011011000000000000010000000000000000000001000000000000000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010011110000010100100110110010000000000100000000000000000000010000000000000000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110100111100000101001001101100100000000001000000000000000000000100000000000000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100001111000001010110011011001000000000010000000000000000000001000000000000000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000011110000010101100110110010000000000100000000000000000000010000000000000000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000111100000101001001101100000000000000000000000010000000000100000000000000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100001111000001010010011011000000000000000000000000100000000001000000000000000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011101110000010101100110110000000000000000000000001000000000010000000000000000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111011100000101011001101100000000000000000000000010000000000100000000000000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101110111000001010010011011001000000000000000000000100000000001000000000000000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011101110000010100100110110010000000000000000000001000000000010000000000000000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011011100000101011001101100100000000000000000000010000000000100000000000000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100110111000001010110011011001000000000000000000000100000000001000000000000000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001101110000010100100110110000000000000100000000001000000000010000000000000000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011011100000101001001101100000000000001000000000010000000000100000000000000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101010111000001010110011011000000000000010000000000100000000001000000000000000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010101110000010101100110110000000000000100000000001000000000010000000000000000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110101011100000101001001101100100000000001000000000010000000000100000000000000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101010111000001010010011011001000000000010000000000100000000001000000000000000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000101110000010101100110110010000000000100000000001000000000010000000000000000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001011100000101011001101100100000000001000000000010000000000100000000000000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100010111000001010010011011000000000000000000000000000000000000000000000010000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000101110000010100100110110000000000000000000000000000000000000000000000100000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110011100000101011001101100000000000000000000000000000000000000000000001000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101100111000001010110011011000000000000000000000000000000000000000000000010000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011001110000010100100110110010000000000000000000000000000000000000000000100000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110011100000101001001101100100000000000000000000000000000000000000000001000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100100111000001010110011011001000000000000000000000000000000000000000000010000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001001110000010101100110110010000000000000000000000000000000000000000000100000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110010011100000101001001101100000000000001000000000000000000000000000000001000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100100111000001010010011011000000000000010000000000000000000000000000000010000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010001110000010101100110110000000000000100000000000000000000000000000000100000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100011100000101011001101100000000000001000000000000000000000000000000001000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101000111000001010010011011001000000000010000000000000000000000000000000010000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010001110000010100100110110010000000000100000000000000000000000000000000100000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000011100000101011001101100100000000001000000000000000000000000000000001000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100000111000001010110011011001000000000010000000000000000000000000000000010000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000001110000010100100110110000000000000000000000001000000000000000000000100000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000011100000101001001101100000000000000000000000010000000000000000000001000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101111011000001010110011011000000000000000000000000100000000000000000000010000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011110110000010101100110110000000000000000000000001000000000000000000000100000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111101100000101001001101100100000000000000000000010000000000000000000001000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101111011000001010010011011001000000000000000000000100000000000000000000010000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001110110000010101100110110010000000000000000000001000000000000000000000100000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011101100000101011001101100100000000000000000000010000000000000000000001000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100111011000001010010011011000000000000010000000000100000000000000000000010000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001110110000010100100110110000000000000100000000001000000000000000000000100000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110101101100000101011001101100000000000001000000000010000000000000000000001000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101011011000001010110011011000000000000010000000000100000000000000000000010000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010110110000010100100110110010000000000100000000001000000000000000000000100000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110101101100000101001001101100100000000001000000000010000000000000000000001000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100011011000001010110011011001000000000010000000000100000000000000000000010000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000110110000010101100110110010000000000100000000001000000000000000000000100000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001101100000101001001101100000000000000000000000000000000000100000000001000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100011011000001010010011011000000000000000000000000000000000001000000000010000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011010110000010101100110110000000000000000000000000000000000010000000000100000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110101100000101011001101100000000000000000000000000000000000100000000001000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101101011000001010010011011001000000000000000000000000000000001000000000010000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011010110000010100100110110010000000000000000000000000000000010000000000100000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110010101100000101011001101100100000000000000000000000000000000100000000001000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100101011000001010110011011001000000000000000000000000000000001000000000010000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001010110000010100100110110000000000000100000000000000000000010000000000100000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010101100000101001001101100000000000001000000000000000000000100000000001000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101001011000001010110011011000000000000010000000000000000000001000000000010000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010010110000010101100110110000000000000100000000000000000000010000000000100000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110100101100000101001001101100100000000001000000000000000000000100000000001000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101001011000001010010011011001000000000010000000000000000000001000000000010000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000010110000010101100110110010000000000100000000000000000000010000000000100000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000101100000101011001101100100000000001000000000000000000000100000000001000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100001011000001010010011011000000000000000000000000100000000001000000000010000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000010110000010100100110110000000000000000000000001000000000010000000000100000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111001100000101011001101100000000000000000000000010000000000100000000001000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101110011000001010110011011000000000000000000000000100000000001000000000010000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011100110000010100100110110010000000000000000000001000000000010000000000100000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110111001100000101001001101100100000000000000000000010000000000100000000001000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100110011000001010110011011001000000000000000000000100000000001000000000010000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001100110000010101100110110010000000000000000000001000000000010000000000100000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110011001100000101001001101100000000000001000000000010000000000100000000001000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100110011000001010010011011000000000000010000000000100000000001000000000010000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010100110000010101100110110000000000000100000000001000000000010000000000100000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110101001100000101011001101100000000000001000000000010000000000100000000001000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101010011000001010010011011001000000000010000000000100000000001000000000010000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010100110000010100100110110010000000000100000000001000000000010000000000100000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001001100000101011001101100100000000001000000000010000000000100000000001000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100010011000001010110011011001000000000010000000000100000000001000000000010000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000100110000010100100110110000000000000000000000000000000000000000000000000001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110001001100000101001001101100000000000000000000000000000000000000000000000000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101100011000001010110011011000000000000000000000000000000000000000000000000000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011000110000010101100110110000000000000000000000000000000000000000000000000001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110001100000101001001101100100000000000000000000000000000000000000000000000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101100011000001010010011011001000000000000000000000000000000000000000000000000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001000110000010101100110110010000000000000000000000000000000000000000000000001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010001100000101011001101100100000000000000000000000000000000000000000000000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100100011000001010010011011000000000000010000000000000000000000000000000000000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001000110000010100100110110000000000000100000000000000000000000000000000000001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110100001100000101011001101100000000000001000000000000000000000000000000000000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101000011000001010110011011000000000000010000000000000000000000000000000000000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010000110000010100100110110010000000000100000000000000000000000000000000000001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110100001100000101001001101100100000000001000000000000000000000000000000000000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100000011000001010110011011001000000000010000000000000000000000000000000000000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000000110000010101100110110010000000000100000000000000000000000000000000000001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000001100000101001001101100000000000000000000000010000000000000000000000000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100000011000001010010011011000000000000000000000000100000000000000000000000000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011111010000010101100110110000000000000000000000001000000000000000000000000001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111110100000101011001101100000000000000000000000010000000000000000000000000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101111101000001010010011011001000000000000000000000100000000000000000000000000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011111010000010100100110110010000000000000000000001000000000000000000000000001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011110100000101011001101100100000000000000000000010000000000000000000000000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100111101000001010110011011001000000000000000000000100000000000000000000000000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001111010000010100100110110000000000000100000000001000000000000000000000000001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011110100000101001001101100000000000001000000000010000000000000000000000000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101011101000001010110011011000000000000010000000000100000000000000000000000000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010111010000010101100110110000000000000100000000001000000000000000000000000001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110101110100000101001001101100100000000001000000000010000000000000000000000000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101011101000001010010011011001000000000010000000000100000000000000000000000000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000111010000010101100110110010000000000100000000001000000000000000000000000001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110001110100000101011001101100100000000001000000000010000000000000000000000000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100011101000001010010011011000000000000000000000000000000000001000000000000000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000111010000010100100110110000000000000000000000000000000000010000000000000001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110110100000101011001101100000000000000000000000000000000000100000000000000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101101101000001010110011011000000000000000000000000000000000001000000000000000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011011010000010100100110110010000000000000000000000000000000010000000000000001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110110100000101001001101100100000000000000000000000000000000100000000000000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100101101000001010110011011001000000000000000000000000000000001000000000000000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001011010000010101100110110010000000000000000000000000000000010000000000000001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010110100000101001001101100000000000001000000000000000000000100000000000000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100101101000001010010011011000000000000010000000000000000000001000000000000000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010011010000010101100110110000000000000100000000000000000000010000000000000001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100110100000101011001101100000000000001000000000000000000000100000000000000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101001101000001010010011011001000000000010000000000000000000001000000000000000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010011010000010100100110110010000000000100000000000000000000010000000000000001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000110100000101011001101100100000000001000000000000000000000100000000000000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100001101000001010110011011001000000000010000000000000000000001000000000000000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000011010000010100100110110000000000000000000000001000000000010000000000000001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000110100000101001001101100000000000000000000000010000000000100000000000000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100010000000000000000000000000000000000011101110101000001010110011011000000000000000000000000100000000001000000000000000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000100000000000000000000000000000000000111011101010000010101100110110000000000000000000000001000000000010000000000000001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010001000000000000000000000000000000000001110111010100000101001001101100100000000000000000000010000000000100000000000000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100110000000000000000000000000000000000011101110101000001010010011011001000000000000000000000100000000001000000000000000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000000000000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000000000000000000111001101010000010101100110110010000000000000000000001000000000010000000000000001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000000000000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000000000000000001110011010100000101011001101100100000000000000000000010000000000100000000000000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000000000000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000000000000000000011100110101000001010010011011000000000000010000000000100000000001000000000000000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010000000000000111001101010000010100100110110000000000000100000000001000000000010000000000000001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100000000000001110101010100000101011001101100000000000001000000000010000000000100000000000000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001000000000000011101010101000001010110011011000000000000010000000000100000000001000000000000000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010000000000000111010101010000010100100110110010000000000100000000001000000000010000000000000001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100000000000001110101010100000101001001101100100000000001000000000010000000000100000000000000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001000000000000011100010101000001010110011011001000000000010000000000100000000001000000000000000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010000000000000111000101010000010101100110110010000000000100000000001000000000010000000000000001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100000000000001110001010100000101001001101100000000000000000000000000000000000000000000001000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001000000000000011100010101000001010010011011000000000000000000000000000000000000000000000010000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010000000000000111011001010000010101100110110000000000000000000000000000000000000000000000100001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100000000000001110110010100000101011001101100000000000000000000000000000000000000000000001000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001000000000000011101100101000001010010011011001000000000000000000000000000000000000000000010000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111011001010000010100100110110010000000000000000000000000000000000000000000100001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110010010100000101011001101100100000000000000000000000000000000000000000001000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011100100101000001010110011011001000000000000000000000000000000000000000000010000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111001001010000010100100110110000000000000100000000000000000000000000000000100001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110010010100000101001001101100000000000001000000000000000000000000000000001000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001000000000011101000101000001010110011011000000000000010000000000000000000000000000000010000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111010001010000010101100110110000000000000100000000000000000000000000000000100001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110100010100000101001001101100100000000001000000000000000000000000000000001000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011101000101000001010010011011001000000000010000000000000000000000000000000010000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111000001010000010101100110110010000000000100000000000000000000000000000000100001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110000010100000101011001101100100000000001000000000000000000000000000000001000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011100000101000001010010011011000000000000000000000000100000000000000000000010000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111000001010000010100100110110000000000000000000000001000000000000000000000100001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100100000000001110111100100000101011001101100000000000000000000000010000000000000000000001000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011101111001000001010110011011000000000000000000000000100000000000000000000010000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111011110010000010100100110110010000000000000000000001000000000000000000000100001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110111100100000101001001101100100000000000000000000010000000000000000000001000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011100111001000001010110011011001000000000000000000000100000000000000000000010000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111001110010000010101100110110010000000000000000000001000000000000000000000100001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110011100100000101001001101100000000000001000000000010000000000000000000001000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011100111001000001010010011011000000000000010000000000100000000000000000000010000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111010110010000010101100110110000000000000100000000001000000000000000000000100001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110101100100000101011001101100000000000001000000000010000000000000000000001000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011101011001000001010010011011001000000000010000000000100000000000000000000010000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111010110010000010100100110110010000000000100000000001000000000000000000000100001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110001100100000101011001101100100000000001000000000010000000000000000000001000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011100011001000001010110011011001000000000010000000000100000000000000000000010000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111000110010000010100100110110000000000000000000000000000000000010000000000100001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110001100100000101001001101100000000000000000000000000000000000100000000001000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011101101001000001010110011011000000000000000000000000000000000001000000000010000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111011010010000010101100110110000000000000000000000000000000000010000000000100001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110110100100000101001001101100100000000000000000000000000000000100000000001000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011101101001000001010010011011001000000000000000000000000000000001000000000010000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111001010010000010101100110110010000000000000000000000000000000010000000000100001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110010100100000101011001101100100000000000000000000000000000000100000000001000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011100101001000001010010011011000000000000010000000000000000000001000000000010000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111001010010000010100100110110000000000000100000000000000000000010000000000100001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110100100100000101011001101100000000000001000000000000000000000100000000001000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011101001001000001010110011011000000000000010000000000000000000001000000000010000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111010010010000010100100110110010000000000100000000000000000000010000000000100001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110100100100000101001001101100100000000001000000000000000000000100000000001000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011100001001000001010110011011001000000000010000000000000000000001000000000010000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100100000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001001000000010011000000000111000010010000010101100110110010000000000100000000000000000000010000000000100001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001001000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010010000000100110000000001110000100100000101001001101100000000000000000000000010000000000100000000001000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010010000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100100000001001100000000011100001001000001010010011011000000000000000000000000100000000001000000000010000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100100000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001001000000010011000000000111011100010000010101100110110000000000000000000000001000000000010000000000100001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001001000000010011100000000010111000000000000000000000000000000000000000000000000000000010011000000000010010000000100111000000001110111000100000101011001101100000000000000000000000010000000000100000000001000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000010000010010000000100111000000000101110000000000000000000000000000000000000000000000000000000100110000100000100100000001001110000000011101110001000001010010011011001000000000000000000000100000000001000000000010000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000100100000001001110001000001011100000000000000000000000000000000000000000000000000000001001101001000001001000000010011100010000111011100010000010100100110110010000000000000000000001000000000010000000000100001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001001000000010011100010000010111000000000000000000000000000000000000000000000000000000010011010010000010010000000100111000100001110011000100000101011001101100100000000000000000000010000000000100000000001000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000010010000000100111000100000001110000000000000000000000000000000000000000000000000000000100110100100000100100000001001110001000011100110001000001010110011011001000000000000000000000100000000001000000000010000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000100100000001001110001000000011100000000000000000000000000000000000000000000000000001001001101001000001001000000010011100010000111001100010000010100100110110000000000000100000000001000000000010000000000100001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001001000000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000010010000000100111010100001110011000100000101001001101100000000000001000000000010000000000100000000001000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000010010000000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000100100000001001110101000011101010001000001010110011011000000000000010000000000100000000001000000000010000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000100100000001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001000000010011101010000111010100010000010101100110110000000000000100000000001000000000010000000000100001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001000001001000000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010000010010000000100111010100001110101000100000101001001101100100000000001000000000010000000000100000000001000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000010010000000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000100100000001001110101000011101010001000001010010011011001000000000010000000000100000000001000000000010000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100100000100100000001001110101000000011100000000000000000000000000000000000000000000000000000001000101001000001001000000010011101010000111000100010000010101100110110010000000000100000000001000000000010000000000100001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010000010011010000100111010100001110001000100000101011001101100100000000001000000000010000000000100000000001000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000010011010000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000100110100001001110101000011100010001000001010010011011000000000000000000000000000000000000000000000000000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001000101001000001001101000010011101010000111000100010000010100100110110000000000000000000000000000000000000000000000000000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010000010011010000100111010100001110110000100000101011001101100000000000000000000000000000000000000000000000000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000010011010000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000100110100001001110101000011101100001000001010110011011000000000000000000000000000000000000000000000000000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001101000010011101010000111011000010000010100100110110010000000000000000000000000000000000000000000000000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000010011010000100111010100001110110000100000101001001101100100000000000000000000000000000000000000000000000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000010011010000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000100110100001001110101000011100100001000001010110011011001000000000000000000000000000000000000000000000000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001101000010011101010000111001000010000010101100110110010000000000000000000000000000000000000000000000000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001101101000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000011011010000100111010100001110010000100000101001001101100000000000001000000000000000000000000000000000000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000011011010000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000110110100001001110101000011100100001000001010010011011000000000000010000000000000000000000000000000000000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100100000110110100001001110101000000011100000000000000000000000000000000000000000000000000000001000101001000001101101000010011101010000111010000010000010101100110110000000000000100000000000000000000000000000000000000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001000001101101000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010000011011010000100111010100001110100000100000101011001101100000000000001000000000000000000000000000000000000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000011011010000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000110110100001001110101000011101000001000001010010011011001000000000010000000000000000000000000000000000000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100101000110110100001001110101000000011100000000000000000000000000000000000000000000000000000001000101001010001101101000010011101010000111010000010000010100100110110010000000000100000000000000000000000000000000000000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001010001101101100010011101010000000111000000000000000000000000000000000000000000000000000000010001010010100011011011000100111010100001110000000100000101011001101100100000000001000000000000000000000000000000000000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010100011011011000100111010100000001110000000000000000000000000000000000000000000000000000000100110100101000110110110001001110101000011100000001000001010110011011001000000000010000000000000000000000000000000000000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100101000110111110001001110101000000011100000000000000000000000000000000000000000000000000000001001101001010001101111100010011101010000111000000010000010100100110110000000000000000000000001000000000000000000000000000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001010001101111100010011101010000000111000000000000000000000000000000000000000000000000000000010011010010100011011111000100111010100001110000000100000101001001101100000000000000000000000010000000000000000000000000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111011010100111011111000100111010100000001110000000000000000000000000000000000000000000000000000000100110110101001110111110001001110101000011101111110000001010110011011000000000000000000000000100000000000000000000000000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110110101011110111110001001110101000000011100000000000000000000000000000000000000000000000000000001001101101010111101111100010011101010000111011111100000010101100110110000000000000000000000001000000000000000000000000000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101101110111101111100010011111010000000111000000000000000000000000000000000000000000000000000000010011011011101111011111000100111110100001110111111000000101001001101100100000000000000000000010000000000000000000000000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111011011101111011111000100111110100000001110000000000000000000000000000000000000000000000000000000100110110111011110111110001001111101000011101111110000001010010011011001000000000000000000000100000000000000000000000000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110110111011110111110001001111101000000011100000000000000000000000000000000000000000000000000000001001101101110111101111100010011111010000111001111100000010101100110110010000000000000000000001000000000000000000000000000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101111110111101111100010011111110000000111000000000000000000000000000000000000000000000000000000010001011111101111011111000100111111100001110011111000000101011001101100100000000000000000000010000000000000000000000000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101011111101111011111000100111111100000001110000000000000000000000000000000000000000000000000000000100010111111011110111110001001111111000011100111110000001010010011011000000000000010000000000100000000000000000000000000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010111111011110111111001001111111000000011100000000000000000000000000000000000000000000000000000001000101111110111101111110010011111110000111001111100000010100100110110000000000000100000000001000000000000000000000000000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111110111101111110010011111110000000111000000000000000000000000000000000000000000000000000000010001111111101111011111100100111111100001110101111000000101011001101100000000000001000000000010000000000000000000000000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111101111011111100100111111100000001110000000000000000000000000000000000000000000000000000000100011111111011110111111001001111111000011101011110000001010110011011000000000000010000000000100000000000000000000000000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111011110111111001001111111000000011100000000000000000000000000000000000000000000000000000001000111111110111101111110010011111110000111010111100000010100100110110010000000000100000000001000000000000000000000000000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111110111101111110010011111110000000111000000000000000000000000000000000000000000000000000000010001111111101111011111100100111111100001110101111000000101001001101100100000000001000000000010000000000000000000000000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111101111011111100100111111100000001110000000000000000000000000000000000000000000000000000000100011111111011110111111001001111111000011100011110000001010110011011001000000000010000000000100000000000000000000000000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111011110111111001101111111000000011100000000000000000000000000000000000000000000000000000001000111111110111101111110011011111110000111000111100000010101100110110010000000000100000000001000000000000000000000000000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111110111101111110011011111110000000111000000000000000000000000000000000000000000000000000000010001111111101111011111100110111111100001110001111000000101001001101100000000000000000000000000000000000100000000000000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111101111011111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111011110111111001101111111000011100011110000001010010011011000000000000000000000000000000000001000000000000000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111011110111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111110111101111110011011111110000111011011100000010101100110110000000000000000000000000000000000010000000000000000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111110111101111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111101111011111100110111111100001110110111000000101011001101100000000000000000000000000000000000100000000000000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111101111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111011111111111001101111111000011101101110000001010010011011001000000000000000000000000000000001000000000000000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111011011100000010100100110110010000000000000000000000000000000010000000000000000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110010111000000101011001101100100000000000000000000000000000000100000000000000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111001101111111000011100101110000001010110011011001000000000000000000000000000000001000000000000000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111110011011111110000111001011100000010100100110110000000000000100000000000000000000010000000000000000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111100110111111100001110010111000000101001001101100000000000001000000000000000000000100000000000000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111001101111111000011101001110000001010110011011000000000000010000000000000000000001000000000000000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111110011011111110000111010011100000010101100110110000000000000100000000000000000000010000000000000000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110100111000000101001001101100100000000001000000000000000000000100000000000000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111001101111111000011101001110000001010010011011001000000000010000000000000000000001000000000000000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111000011100000010101100110110010000000000100000000000000000000010000000000000000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110000111000000101011001101100100000000001000000000000000000000100000000000000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111001101111111000011100001110000001010010011011000000000000000000000000100000000001000000000000000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111000011100000010100100110110000000000000000000000001000000000010000000000000000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110111011000000101011001101100000000000000000000000010000000000100000000000000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111001101111111000011101110110000001010110011011000000000000000000000000100000000001000000000000000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111101101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011011111110000111011101100000010100100110110010000000000000000000001000000000010000000000000000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111110110111111100001110111011000000101001001101100100000000000000000000010000000000100000000000000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111110110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111101101111111000011100110110000001010110011011001000000000000000000000100000000001000000000000000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111101101111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111011011111110000111001101100000010101100110110010000000000000000000001000000000010000000000000000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111110110111111100001110011011000000101001001101100000000000001000000000010000000000100000000000000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111110110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111101101111111000011100110110000001010010011011000000000000010000000000100000000001000000000000000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111101101111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111011011111110000111010101100000010101100110110000000000000100000000001000000000010000000000000000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110110111111100001110101011000000101011001101100000000000001000000000010000000000100000000000000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111110111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101111111111000011101010110000001010010011011001000000000010000000000100000000001000000000000000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111101111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011111111110000111010101100000010100100110110010000000000100000000001000000000010000000000000000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110111111111100001110001011000000101011001101100100000000001000000000010000000000100000000000000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111110111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101111111111000011100010110000001010110011011001000000000010000000000100000000001000000000000000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111101111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011111111110000111000101100000010100100110110000000000000000000000000000000000000000000000100000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111110111111111100001110001011000000101001001101100000000000000000000000000000000000000000000001000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111110111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111101111111111000011101100110000001010110011011000000000000000000000000000000000000000000000010000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111101111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111011111111110000111011001100000010101100110110000000000000000000000000000000000000000000000100000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110111111111100001110110011000000101001001101100100000000000000000000000000000000000000000001000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101100110000001010010011011001000000000000000000000000000000000000000000010000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001001100000010101100110110010000000000000000000000000000000000000000000100000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010011000000101011001101100100000000000000000000000000000000000000000001000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100100110000001010010011011000000000000010000000000000000000000000000000010000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001001100000010100100110110000000000000100000000000000000000000000000000100000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100011000000101011001101100000000000001000000000000000000000000000000001000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000110000001010110011011000000000000010000000000000000000000000000000010000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010001100000010100100110110010000000000100000000000000000000000000000000100000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100011000000101001001101100100000000001000000000000000000000000000000001000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000110000001010110011011001000000000010000000000000000000000000000000010000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000001100000010101100110110010000000000100000000000000000000000000000000100000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000011000000101001001101100000000000000000000000010000000000000000000001000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000110000001010010011011000000000000000000000000100000000000000000000010000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011110100000010101100110110000000000000000000000001000000000000000000000100000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111101000000101011001101100000000000000000000000010000000000000000000001000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101111010000001010010011011001000000000000000000000100000000000000000000010000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011110100000010100100110110010000000000000000000001000000000000000000000100000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011101000000101011001101100100000000000000000000010000000000000000000001000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100111010000001010110011011001000000000000000000000100000000000000000000010000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001110100000010100100110110000000000000100000000001000000000000000000000100000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011101000000101001001101100000000000001000000000010000000000000000000001000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101011010000001010110011011000000000000010000000000100000000000000000000010000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010110100000010101100110110000000000000100000000001000000000000000000000100000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101101000000101001001101100100000000001000000000010000000000000000000001000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101011010000001010010011011001000000000010000000000100000000000000000000010000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000110100000010101100110110010000000000100000000001000000000000000000000100000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001101000000101011001101100100000000001000000000010000000000000000000001000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100011010000001010010011011000000000000000000000000000000000001000000000010000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000110100000010100100110110000000000000000000000000000000000010000000000100000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110101000000101011001101100000000000000000000000000000000000100000000001000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101101010000001010110011011000000000000000000000000000000000001000000000010000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011010100000010100100110110010000000000000000000000000000000010000000000100000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110101000000101001001101100100000000000000000000000000000000100000000001000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100101010000001010110011011001000000000000000000000000000000001000000000010000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001010100000010101100110110010000000000000000000000000000000010000000000100000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010101000000101001001101100000000000001000000000000000000000100000000001000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100101010000001010010011011000000000000010000000000000000000001000000000010000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010010100000010101100110110000000000000100000000000000000000010000000000100000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100101000000101011001101100000000000001000000000000000000000100000000001000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101001010000001010010011011001000000000010000000000000000000001000000000010000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010010100000010100100110110010000000000100000000000000000000010000000000100000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000101000000101011001101100100000000001000000000000000000000100000000001000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100001010000001010110011011001000000000010000000000000000000001000000000010000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000010100000010100100110110000000000000000000000001000000000010000000000100000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000101000000101001001101100000000000000000000000010000000000100000000001000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101110010000001010110011011000000000000000000000000100000000001000000000010000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011100100000010101100110110000000000000000000000001000000000010000000000100000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111001000000101001001101100100000000000000000000010000000000100000000001000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101110010000001010010011011001000000000000000000000100000000001000000000010000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100100000010101100110110010000000000000000000001000000000010000000000100000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011001000000101011001101100100000000000000000000010000000000100000000001000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110010000001010010011011000000000000010000000000100000000001000000000010000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100100000010100100110110000000000000100000000001000000000010000000000100000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101001000000101011001101100000000000001000000000010000000000100000000001000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101010010000001010110011011000000000000010000000000100000000001000000000010000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010100100000010100100110110010000000000100000000001000000000010000000000100000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101001000000101001001101100100000000001000000000010000000000100000000001000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100010010000001010110011011001000000000010000000000100000000001000000000010000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000100100000010101100110110010000000000100000000001000000000010000000000100000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001001000000101001001101100000000000000000000000000000000000000000000000000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100010010000001010010011011000000000000000000000000000000000000000000000000000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011000100000010101100110110000000000000000000000000000000000000000000000000001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110001000000101011001101100000000000000000000000000000000000000000000000000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101100010000001010010011011001000000000000000000000000000000000000000000000000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011000100000010100100110110010000000000000000000000000000000000000000000000001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010001000000101011001101100100000000000000000000000000000000000000000000000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100100010000001010110011011001000000000000000000000000000000000000000000000000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001000100000010100100110110000000000000100000000000000000000000000000000000001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010001000000101001001101100000000000001000000000000000000000000000000000000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101000010000001010110011011000000000000010000000000000000000000000000000000000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010000100000010101100110110000000000000100000000000000000000000000000000000001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100001000000101001001101100100000000001000000000000000000000000000000000000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101000010000001010010011011001000000000010000000000000000000000000000000000000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000000100000010101100110110010000000000100000000000000000000000000000000000001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000001000000101011001101100100000000001000000000000000000000000000000000000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000010000001010010011011000000000000000000000000100000000000000000000000000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000000100000010100100110110000000000000000000000001000000000000000000000000001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111110000000101011001101100000000000000000000000010000000000000000000000000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101111100000001010110011011000000000000000000000000100000000000000000000000000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011111000000010100100110110010000000000000000000001000000000000000000000000001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111110000000101001001101100100000000000000000000010000000000000000000000000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100111100000001010110011011001000000000000000000000100000000000000000000000000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001111000000010101100110110010000000000000000000001000000000000000000000000001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011110000000101001001101100000000000001000000000010000000000000000000000000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100111100000001010010011011000000000000010000000000100000000000000000000000000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010111000000010101100110110000000000000100000000001000000000000000000000000001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101110000000101011001101100000000000001000000000010000000000000000000000000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101011100000001010010011011001000000000010000000000100000000000000000000000000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010111000000010100100110110010000000000100000000001000000000000000000000000001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001110000000101011001101100100000000001000000000010000000000000000000000000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100011100000001010110011011001000000000010000000000100000000000000000000000000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000111000000010100100110110000000000000000000000000000000000010000000000000001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001110000000101001001101100000000000000000000000000000000000100000000000000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101101100000001010110011011000000000000000000000000000000000001000000000000000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011011000000010101100110110000000000000000000000000000000000010000000000000001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110110000000101001001101100100000000000000000000000000000000100000000000000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101101100000001010010011011001000000000000000000000000000000001000000000000000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001011000000010101100110110010000000000000000000000000000000010000000000000001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010110000000101011001101100100000000000000000000000000000000100000000000000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100101100000001010010011011000000000000010000000000000000000001000000000000000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001011000000010100100110110000000000000100000000000000000000010000000000000001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100110000000101011001101100000000000001000000000000000000000100000000000000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101001100000001010110011011000000000000010000000000000000000001000000000000000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010011000000010100100110110010000000000100000000000000000000010000000000000001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100110000000101001001101100100000000001000000000000000000000100000000000000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100001100000001010110011011001000000000010000000000000000000001000000000000000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000011000000010101100110110010000000000100000000000000000000010000000000000001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000110000000101001001101100000000000000000000000010000000000100000000000000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100001100000001010010011011000000000000000000000000100000000001000000000000000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011101000000010101100110110000000000000000000000001000000000010000000000000001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111010000000101011001101100000000000000000000000010000000000100000000000000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101110100000001010010011011001000000000000000000000100000000001000000000000000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011101000000010100100110110010000000000000000000001000000000010000000000000001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011010000000101011001101100100000000000000000000010000000000100000000000000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110100000001010110011011001000000000000000000000100000000001000000000000000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001101000000010100100110110000000000000100000000001000000000010000000000000001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011010000000101001001101100000000000001000000000010000000000100000000000000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101010100000001010110011011000000000000010000000000100000000001000000000000000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010101000000010101100110110000000000000100000000001000000000010000000000000001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101010000000101001001101100100000000001000000000010000000000100000000000000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101010100000001010010011011001000000000010000000000100000000001000000000000000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000101000000010101100110110010000000000100000000001000000000010000000000000001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001010000000101011001101100100000000001000000000010000000000100000000000000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100010100000001010010011011000000000000000000000000000000000000000000000010000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000101000000010100100110110000000000000000000000000000000000000000000000100001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110010000000101011001101100000000000000000000000000000000000000000000001000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101100100000001010110011011000000000000000000000000000000000000000000000010000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011001000000010100100110110010000000000000000000000000000000000000000000100001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110010000000101001001101100100000000000000000000000000000000000000000001000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100100100000001010110011011001000000000000000000000000000000000000000000010000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001001000000010101100110110010000000000000000000000000000000000000000000100001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010010000000101001001101100000000000001000000000000000000000000000000001000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100100100000001010010011011000000000000010000000000000000000000000000000010000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010001000000010101100110110000000000000100000000000000000000000000000000100001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100010000000101011001101100000000000001000000000000000000000000000000001000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101000100000001010010011011001000000000010000000000000000000000000000000010000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010001000000010100100110110010000000000100000000000000000000000000000000100001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000010000000101011001101100100000000001000000000000000000000000000000001000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000100000001010110011011001000000000010000000000000000000000000000000010000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000001000000010100100110110000000000000000000000001000000000000000000000100001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000010000000101001001101100000000000000000000000010000000000000000000001000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101111000000001010110011011000000000000000000000000100000000000000000000010000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011110000000010101100110110000000000000000000000001000000000000000000000100001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111100000000101001001101100100000000000000000000010000000000000000000001000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101111000000001010010011011001000000000000000000000100000000000000000000010000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001110000000010101100110110010000000000000000000001000000000000000000000100001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011100000000101011001101100100000000000000000000010000000000000000000001000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100111000000001010010011011000000000000010000000000100000000000000000000010000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001110000000010100100110110000000000000100000000001000000000000000000000100001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101100000000101011001101100000000000001000000000010000000000000000000001000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101011000000001010110011011000000000000010000000000100000000000000000000010000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010110000000010100100110110010000000000100000000001000000000000000000000100001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101100000000101001001101100100000000001000000000010000000000000000000001000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100011000000001010110011011001000000000010000000000100000000000000000000010000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000110000000010101100110110010000000000100000000001000000000000000000000100001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001100000000101001001101100000000000000000000000000000000000100000000001000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100011000000001010010011011000000000000000000000000000000000001000000000010000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011010000000010101100110110000000000000000000000000000000000010000000000100001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110100000000101011001101100000000000000000000000000000000000100000000001000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101101000000001010010011011001000000000000000000000000000000001000000000010000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011010000000010100100110110010000000000000000000000000000000010000000000100001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010100000000101011001101100100000000000000000000000000000000100000000001000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100101000000001010110011011001000000000000000000000000000000001000000000010000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001010000000010100100110110000000000000100000000000000000000010000000000100001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010100000000101001001101100000000000001000000000000000000000100000000001000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101001000000001010110011011000000000000010000000000000000000001000000000010000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010010000000010101100110110000000000000100000000000000000000010000000000100001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100100000000101001001101100100000000001000000000000000000000100000000001000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101001000000001010010011011001000000000010000000000000000000001000000000010000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000010000000010101100110110010000000000100000000000000000000010000000000100001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000100000000101011001101100100000000001000000000000000000000100000000001000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100001000000001010010011011000000000000000000000000100000000001000000000010000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000010000000010100100110110000000000000000000000001000000000010000000000100001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111000000000101011001101100000000000000000000000010000000000100000000001000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101110000000001010110011011000000000000000000000000100000000001000000000010000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011100000000010100100110110010000000000000000000001000000000010000000000100001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111000000000101001001101100100000000000000000000010000000000100000000001000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110000000001010110011011001000000000000000000000100000000001000000000010000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100000000010101100110110010000000000000000000001000000000010000000000100001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000000000101001001101100000000000001000000000010000000000100000000001000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110000000001010010011011000000000000010000000000100000000001000000000010000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010100000000010101100110110000000000000100000000001000000000010000000000100001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101000000000101011001101100000000000001000000000010000000000100000000001000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101010000000001010010011011001000000000010000000000100000000001000000000010000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010100000000010100100110110010000000000100000000001000000000010000000000100001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001000000000101011001101100100000000001000000000010000000000100000000001000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100010000000001010110011011001000000000010000000000100000000001000000000010000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000100000000010100010110110000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001000000000101000101101100000000000000000000000000000000000000000000000000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101100000000001010101011011000000000000000000000000000000000000000000000000000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011000000000010101010110110000000000000000000000000000000000000000000000000000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110000000000101000101101100100000000000000000000000000000000000000000000000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101100000000001010001011011001000000000000000000000000000000000000000000000000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001000000000010101010110110010000000000000000000000000000000000000000000000000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010000000000101010101101100100000000000000000000000000000000000000000000000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100100000000001010001011011000000000000010000000000000000000000000000000000000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001000000000010100010110110000000000000100000000000000000000000000000000000000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100000000000101010101101100000000000001000000000000000000000000000000000000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101000000000001010101011011000000000000010000000000000000000000000000000000000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010000000000010100010110110010000000000100000000000000000000000000000000000000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100000000000101000101101100100000000001000000000000000000000000000000000000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000000000001010101011011001000000000010000000000000000000000000000000000000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000000000000010101010110110010000000000100000000000000000000000000000000000000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000000000000101000101101100000000000000000000000010000000000000000000000000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000000000001010001011011000000000000000000000000100000000000000000000000000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000010111010110000000010101010110110000000000000000000000001000000000000000000000000000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000101110101001000000101010101101100000000000000000000000010000000000000000000000000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000001011101011110000001010001011011001000000000000000000000100000000000000000000000000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000010111010101010000010100010110110010000000000000000000001000000000000000000000000000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000101110001101100000101010101101100100000000000000000000010000000000000000000000000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100011111000001010101011011001000000000000000000000100000000000000000000000000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000111110000010100010110110000000000000100000000001000000000000000000000000000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110001111100000101000101101100000000000001000000000010000000000000000000000000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101101111000001010101011011000000000000010000000000100000000000000000000000000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011011110000010101010110110000000000000100000000001000000000000000000000000000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110111100000101000101101100100000000001000000000010000000000000000000000000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101101111000001010001011011001000000000010000000000100000000000000000000000000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001011110000010101010110110010000000000100000000001000000000000000000000000000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010111100000101010101101100100000000001000000000010000000000000000000000000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100101111000001010001011011000000000000000000000000000000000001000000000000000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001011110000010100010110110000000000000000000000000000000000010000000000000000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100111100000101010101101100000000000000000000000000000000000100000000000000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101001111000001010101011011000000000000000000000000000000000001000000000000000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010011110000010100010110110010000000000000000000000000000000010000000000000000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110100111100000101000101101100100000000000000000000000000000000100000000000000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100001111000001010101011011001000000000000000000000000000000001000000000000000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000011110000010101010110110010000000000000000000000000000000010000000000000000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000111100000101000101101100000000000001000000000000000000000100000000000000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100001111000001010001011011000000000000010000000000000000000001000000000000000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011101110000010101010110110000000000000100000000000000000000010000000000000000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110111011100000101010101101100000000000001000000000000000000000100000000000000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101110111000001010001011011001000000000010000000000000000000001000000000000000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011101110000010100010110110010000000000100000000000000000000010000000000000000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011011100000101010101101100100000000001000000000000000000000100000000000000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100110111000001010101011011001000000000010000000000000000000001000000000000000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001101110000010100010110110000000000000000000000001000000000010000000000000000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011011100000101000101101100000000000000000000000010000000000100000000000000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101010111000001010101011011000000000000000000000000100000000001000000000000000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010101110000010101010110110000000000000000000000001000000000010000000000000000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110101011100000101000101101100100000000000000000000010000000000100000000000000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101010111000001010001011011001000000000000000000000100000000001000000000000000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000101110000010101010110110010000000000000000000001000000000010000000000000000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110001011100000101010101101100100000000000000000000010000000000100000000000000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100010111000001010001011011000000000000010000000000100000000001000000000000000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000101110000010100010110110000000000000100000000001000000000010000000000000000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110011100000101010101101100000000000001000000000010000000000100000000000000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101100111000001010101011011000000000000010000000000100000000001000000000000000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011001110000010100010110110010000000000100000000001000000000010000000000000000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110011100000101000101101100100000000001000000000010000000000100000000000000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100100111000001010101011011001000000000010000000000100000000001000000000000000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001001110000010101010110110010000000000100000000001000000000010000000000000000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110010011100000101000101101100000000000000000000000000000000000000000000001000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100100111000001010001011011000000000000000000000000000000000000000000000010000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010001110000010101010110110000000000000000000000000000000000000000000000100000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100011100000101010101101100000000000000000000000000000000000000000000001000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101000111000001010001011011001000000000000000000000000000000000000000000010000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010001110000010100010110110010000000000000000000000000000000000000000000100000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000011100000101010101101100100000000000000000000000000000000000000000001000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100000111000001010101011011001000000000000000000000000000000000000000000010000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000001110000010100010110110000000000000100000000000000000000000000000000100000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000011100000101000101101100000000000001000000000000000000000000000000001000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101111011000001010101011011000000000000010000000000000000000000000000000010000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011110110000010101010110110000000000000100000000000000000000000000000000100000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110111101100000101000101101100100000000001000000000000000000000000000000001000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101111011000001010001011011001000000000010000000000000000000000000000000010000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001110110000010101010110110010000000000100000000000000000000000000000000100000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011101100000101010101101100100000000001000000000000000000000000000000001000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100111011000001010001011011000000000000000000000000100000000000000000000010000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001110110000010100010110110000000000000000000000001000000000000000000000100000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110101101100000101010101101100000000000000000000000010000000000000000000001000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101011011000001010101011011000000000000000000000000100000000000000000000010000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010110110000010100010110110010000000000000000000001000000000000000000000100000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110101101100000101000101101100100000000000000000000010000000000000000000001000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100011011000001010101011011001000000000000000000000100000000000000000000010000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000110110000010101010110110010000000000000000000001000000000000000000000100000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110001101100000101000101101100000000000001000000000010000000000000000000001000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100011011000001010001011011000000000000010000000000100000000000000000000010000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011010110000010101010110110000000000000100000000001000000000000000000000100000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110101100000101010101101100000000000001000000000010000000000000000000001000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101101011000001010001011011001000000000010000000000100000000000000000000010000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011010110000010100010110110010000000000100000000001000000000000000000000100000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010101100000101010101101100100000000001000000000010000000000000000000001000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100101011000001010101011011001000000000010000000000100000000000000000000010000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001010110000010100010110110000000000000000000000000000000000010000000000100000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110010101100000101000101101100000000000000000000000000000000000100000000001000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101001011000001010101011011000000000000000000000000000000000001000000000010000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010010110000010101010110110000000000000000000000000000000000010000000000100000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110100101100000101000101101100100000000000000000000000000000000100000000001000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101001011000001010001011011001000000000000000000000000000000001000000000010000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000010110000010101010110110010000000000000000000000000000000010000000000100000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000101100000101010101101100100000000000000000000000000000000100000000001000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100001011000001010001011011000000000000010000000000000000000001000000000010000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000010110000010100010110110000000000000100000000000000000000010000000000100000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111001100000101010101101100000000000001000000000000000000000100000000001000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101110011000001010101011011000000000000010000000000000000000001000000000010000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011100110000010100010110110010000000000100000000000000000000010000000000100000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111001100000101000101101100100000000001000000000000000000000100000000001000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100110011000001010101011011001000000000010000000000000000000001000000000010000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001100110000010101010110110010000000000100000000000000000000010000000000100000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110011001100000101000101101100000000000000000000000010000000000100000000001000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100110011000001010001011011000000000000000000000000100000000001000000000010000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010100110000010101010110110000000000000000000000001000000000010000000000100000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110101001100000101010101101100000000000000000000000010000000000100000000001000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101010011000001010001011011001000000000000000000000100000000001000000000010000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010100110000010100010110110010000000000000000000001000000000010000000000100000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001001100000101010101101100100000000000000000000010000000000100000000001000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100010011000001010101011011001000000000000000000000100000000001000000000010000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000100110000010100010110110000000000000100000000001000000000010000000000100000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001001100000101000101101100000000000001000000000010000000000100000000001000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101100011000001010101011011000000000000010000000000100000000001000000000010000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011000110000010101010110110000000000000100000000001000000000010000000000100000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110001100000101000101101100100000000001000000000010000000000100000000001000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101100011000001010001011011001000000000010000000000100000000001000000000010000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001000110000010101010110110010000000000100000000001000000000010000000000100000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110010001100000101010101101100100000000001000000000010000000000100000000001000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100100011000001010001011011000000000000000000000000000000000000000000000000000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001000110000010100010110110000000000000000000000000000000000000000000000000001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110100001100000101010101101100000000000000000000000000000000000000000000000000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101000011000001010101011011000000000000000000000000000000000000000000000000000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010000110000010100010110110010000000000000000000000000000000000000000000000001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100001100000101000101101100100000000000000000000000000000000000000000000000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100000011000001010101011011001000000000000000000000000000000000000000000000000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000000110000010101010110110010000000000000000000000000000000000000000000000001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000001100000101000101101100000000000001000000000000000000000000000000000000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100000011000001010001011011000000000000010000000000000000000000000000000000000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011111010000010101010110110000000000000100000000000000000000000000000000000001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110111110100000101010101101100000000000001000000000000000000000000000000000000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101111101000001010001011011001000000000010000000000000000000000000000000000000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011111010000010100010110110010000000000100000000000000000000000000000000000001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011110100000101010101101100100000000001000000000000000000000000000000000000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100111101000001010101011011001000000000010000000000000000000000000000000000000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001111010000010100010110110000000000000000000000001000000000000000000000000001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011110100000101000101101100000000000000000000000010000000000000000000000000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101011101000001010101011011000000000000000000000000100000000000000000000000000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010111010000010101010110110000000000000000000000001000000000000000000000000001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110101110100000101000101101100100000000000000000000010000000000000000000000000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101011101000001010001011011001000000000000000000000100000000000000000000000000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000111010000010101010110110010000000000000000000001000000000000000000000000001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110001110100000101010101101100100000000000000000000010000000000000000000000000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100011101000001010001011011000000000000010000000000100000000000000000000000000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000111010000010100010110110000000000000100000000001000000000000000000000000001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110110100000101010101101100000000000001000000000010000000000000000000000000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101101101000001010101011011000000000000010000000000100000000000000000000000000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011011010000010100010110110010000000000100000000001000000000000000000000000001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110110100000101000101101100100000000001000000000010000000000000000000000000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100101101000001010101011011001000000000010000000000100000000000000000000000000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001011010000010101010110110010000000000100000000001000000000000000000000000001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010110100000101000101101100000000000000000000000000000000000100000000000000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100101101000001010001011011000000000000000000000000000000000001000000000000000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010011010000010101010110110000000000000000000000000000000000010000000000000001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100110100000101010101101100000000000000000000000000000000000100000000000000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101001101000001010001011011001000000000000000000000000000000001000000000000000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010011010000010100010110110010000000000000000000000000000000010000000000000001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000110100000101010101101100100000000000000000000000000000000100000000000000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100001101000001010101011011001000000000000000000000000000000001000000000000000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000011010000010100010110110000000000000100000000000000000000010000000000000001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000110100000101000101101100000000000001000000000000000000000100000000000000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101110101000001010101011011000000000000010000000000000000000001000000000000000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000100000000000000000000000000000000000111011101010000010101010110110000000000000100000000000000000000010000000000000001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010001000000000000000000000000000000000001110111010100000101000101101100100000000001000000000000000000000100000000000000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100010000000000000000000000000000000000011101110101000001010001011011001000000000010000000000000000000001000000000000000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000000000000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000000000000000000111001101010000010101010110110010000000000100000000000000000000010000000000000001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000000000000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000000000000000001110011010100000101010101101100100000000001000000000000000000000100000000000000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001000000000000011100110101000001010001011011000000000000000000000000100000000001000000000000000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010000000000000111001101010000010100010110110000000000000000000000001000000000010000000000000001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100000000000001110101010100000101010101101100000000000000000000000010000000000100000000000000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001000000000000011101010101000001010101011011000000000000000000000000100000000001000000000000000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010000000000000111010101010000010100010110110010000000000000000000001000000000010000000000000001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100000000000001110101010100000101000101101100100000000000000000000010000000000100000000000000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001000000000000011100010101000001010101011011001000000000000000000000100000000001000000000000000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010000000000000111000101010000010101010110110010000000000000000000001000000000010000000000000001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100000000000001110001010100000101000101101100000000000001000000000010000000000100000000000000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001000000000000011100010101000001010001011011000000000000010000000000100000000001000000000000000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010000000000000111011001010000010101010110110000000000000100000000001000000000010000000000000001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100000000000001110110010100000101010101101100000000000001000000000010000000000100000000000000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001000000000000011101100101000001010001011011001000000000010000000000100000000001000000000000000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111011001010000010100010110110010000000000100000000001000000000010000000000000001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100100000000001110010010100000101010101101100100000000001000000000010000000000100000000000000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001000000000011100100101000001010101011011001000000000010000000000100000000001000000000000000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111001001010000010100010110110000000000000000000000000000000000000000000000100001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110010010100000101000101101100000000000000000000000000000000000000000000001000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011101000101000001010101011011000000000000000000000000000000000000000000000010000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111010001010000010101010110110000000000000000000000000000000000000000000000100001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110100010100000101000101101100100000000000000000000000000000000000000000001000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011101000101000001010001011011001000000000000000000000000000000000000000000010000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111000001010000010101010110110010000000000000000000000000000000000000000000100001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100100000000001110000010100000101010101101100100000000000000000000000000000000000000000001000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001000000000011100000101000001010001011011000000000000010000000000000000000000000000000010000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111000001010000010100010110110000000000000100000000000000000000000000000000100001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100100000000001110111100100000101010101101100000000000001000000000000000000000000000000001000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001000000000011101111001000001010101011011000000000000010000000000000000000000000000000010000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111011110010000010100010110110010000000000100000000000000000000000000000000100001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110111100100000101000101101100100000000001000000000000000000000000000000001000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011100111001000001010101011011001000000000010000000000000000000000000000000010000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111001110010000010101010110110010000000000100000000000000000000000000000000100001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110011100100000101000101101100000000000000000000000010000000000000000000001000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011100111001000001010001011011000000000000000000000000100000000000000000000010000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111010110010000010101010110110000000000000000000000001000000000000000000000100001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110101100100000101010101101100000000000000000000000010000000000000000000001000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011101011001000001010001011011001000000000000000000000100000000000000000000010000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111010110010000010100010110110010000000000000000000001000000000000000000000100001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110001100100000101010101101100100000000000000000000010000000000000000000001000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011100011001000001010101011011001000000000000000000000100000000000000000000010000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111000110010000010100010110110000000000000100000000001000000000000000000000100001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110001100100000101000101101100000000000001000000000010000000000000000000001000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011101101001000001010101011011000000000000010000000000100000000000000000000010000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111011010010000010101010110110000000000000100000000001000000000000000000000100001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110110100100000101000101101100100000000001000000000010000000000000000000001000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011101101001000001010001011011001000000000010000000000100000000000000000000010000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111001010010000010101010110110010000000000100000000001000000000000000000000100001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110010100100000101010101101100100000000001000000000010000000000000000000001000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011100101001000001010001011011000000000000000000000000000000000001000000000010000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111001010010000010100010110110000000000000000000000000000000000010000000000100001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110100100100000101010101101100000000000000000000000000000000000100000000001000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011101001001000001010101011011000000000000000000000000000000000001000000000010000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111010010010000010100010110110010000000000000000000000000000000010000000000100001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110100100100000101000101101100100000000000000000000000000000000100000000001000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011100001001000001010101011011001000000000000000000000000000000001000000000010000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111000010010000010101010110110010000000000000000000000000000000010000000000100001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001001000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010010000000100110000000001110000100100000101000101101100000000000001000000000000000000000100000000001000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010010000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100100000001001100000000011100001001000001010001011011000000000000010000000000000000000001000000000010000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100100000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001001000000010011000000000111011100010000010101010110110000000000000100000000000000000000010000000000100001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001001000000010011100000000010111000000000000000000000000000000000000000000000000000000010011000000000010010000000100111000000001110111000100000101010101101100000000000001000000000000000000000100000000001000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000010010000000100111000100000101110000000000000000000000000000000000000000000000000000000100010100100000100100000001001110001000011101110001000001010001011011001000000000010000000000000000000001000000000010000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100100000100100000001001110001000001011100000000000000000000000000000000000000000000000000000001000101001000001001000000010011100010000111011100010000010100010110110010000000000100000000000000000000010000000000100001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001000001001000000010011100010000010111000000000000000000000000000000000000000000000000000000010001010010000010010000000100111000100001110011000100000101010101101100100000000001000000000000000000000100000000001000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000010010000000100111000100000001110000000000000000000000000000000000000000000000000000000100010100100000100100000001001110001000011100110001000001010101011011001000000000010000000000000000000001000000000010000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100100000100100000001001110001000000011100000000000000000000000000000000000000000000000000001001000101001000001001000000010011100010000111001100010000010100010110110000000000000000000000001000000000010000000000100001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001000001001000000010011100010000000111000000000000000000000000000000000000000000000000000000010001010010000010010000000100111000100001110011000100000101000101101100000000000000000000000010000000000100000000001000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000010010000000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000100100000001001110101000011101010001000001010101011011000000000000000000000000100000000001000000000010000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000100100000001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001000000010011101010000111010100010000010101010110110000000000000000000000001000000000010000000000100001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001001000000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000010010000000100111010100001110101000100000101000101101100100000000000000000000010000000000100000000001000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000010010000000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000100100000001001110101000011101010001000001010001011011001000000000000000000000100000000001000000000010000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000100110000001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001100000010011101010000111000100010000010101010110110010000000000000000000001000000000010000000000100001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000010011010000100111010100001110001000100000101010101101100100000000000000000000010000000000100000000001000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000010011010000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000100110100001001110101000011100010001000001010001011011000000000000010000000000100000000001000000000010000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001000101001000001001101000010011101010000111000100010000010100010110110000000000000100000000001000000000010000000000100001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010000010011010000100111010100001110110000100000101010101101100000000000001000000000010000000000100000000001000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000010011010000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000100110100001001110101000011101100001000001010101011011000000000000010000000000100000000001000000000010000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001000101001000001001101000010011101010000111011000010000010100010110110010000000000100000000001000000000010000000000100001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010000010011010000100111010100001110110000100000101000101101100100000000001000000000010000000000100000000001000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000010011010000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000100110100001001110101000011100100001000001010101011011001000000000010000000000100000000001000000000010000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001101000010011101010000111001000010000010101010110110010000000000100000000001000000000010000000000100001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001101101000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000011011010000100111010100001110010000100000101000101101100000000000000000000000000000000000000000000000000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000011011010000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000110110100001001110101000011100100001000001010001011011000000000000000000000000000000000000000000000000000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000110110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001101101000010011101010000111010000010000010101010110110000000000000000000000000000000000000000000000000000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001101101000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000011011010000100111010100001110100000100000101010101101100000000000000000000000000000000000000000000000000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000011011010000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000110110100001001110101000011101000001000001010001011011001000000000000000000000000000000000000000000000000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000110110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001101101000010011101010000111010000010000010100010110110010000000000000000000000000000000000000000000000000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001010001101101100010011101010000000111000000000000000000000000000000000000000000000000000000010011010010100011011011000100111010100001110000000100000101010101101100100000000000000000000000000000000000000000000000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010100011011011000100111010100000001110000000000000000000000000000000000000000000000000000000100110100101000110110110001001110101000011100000001000001010101011011001000000000000000000000000000000000000000000000000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100101000110111110001001110101000000011100000000000000000000000000000000000000000000000000000001000101001010001101111100010011101010000111000000010000010100010110110000000000000100000000000000000000000000000000000000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101101010011101111100010011101010000000111000000000000000000000000000000000000000000000000000000010001011010100111011111000100111010100001110000000100000101000101101100000000000001000000000000000000000000000000000000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101011010100111011111000100111010100000001110000000000000000000000000000000000000000000000000000000100010110101001110111110001001110101000011101111110000001010101011011000000000000010000000000000000000000000000000000000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010110101011110111110001001110101000000011100000000000000000000000000000000000000000000000000000001000101101010111101111100010011101010000111011111100000010101010110110000000000000100000000000000000000000000000000000000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101101110111101111100010011101010000000111000000000000000000000000000000000000000000000000000000010001011011101111011111000100111010100001110111111000000101000101101100100000000001000000000000000000000000000000000000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111011011101111011111000100111110100000001110000000000000000000000000000000000000000000000000000000100110110111011110111110001001111101000011101111110000001010001011011001000000000010000000000000000000000000000000000000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110110111011110111110001001111101000000011100000000000000000000000000000000000000000000000000000001001101101110111101111100010011111010000111001111100000010101010110110010000000000100000000000000000000000000000000000000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101101110111101111100010011111010000000111000000000000000000000000000000000000000000000000000000010011011011101111011111000100111110100001110011111000000101010101101100100000000001000000000000000000000000000000000000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111011111101111011111000100111111100000001110000000000000000000000000000000000000000000000000000000100110111111011110111110001001111111000011100111110000001010001011011000000000000000000000000100000000000000000000000000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110111111011110111111001001111111000000011100000000000000000000000000000000000000000000000000000001001101111110111101111110010011111110000111001111100000010100010110110000000000000000000000001000000000000000000000000000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111110111101111110010011111110000000111000000000000000000000000000000000000000000000000000000010011111111101111011111100100111111100001110101111000000101010101101100000000000000000000000010000000000000000000000000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111101111011111100100111111100000001110000000000000000000000000000000000000000000000000000000100111111111011110111111001001111111000011101011110000001010101011011000000000000000000000000100000000000000000000000000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111011110111111001001111111000000011100000000000000000000000000000000000000000000000000000001000111111110111101111110010011111110000111010111100000010100010110110010000000000000000000001000000000000000000000000000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111110111101111110010011111110000000111000000000000000000000000000000000000000000000000000000010001111111101111011111100100111111100001110101111000000101000101101100100000000000000000000010000000000000000000000000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111101111011111100100111111100000001110000000000000000000000000000000000000000000000000000000100011111111011110111111001001111111000011100011110000001010101011011001000000000000000000000100000000000000000000000000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111011110111111001001111111000000011100000000000000000000000000000000000000000000000000000001000111111110111101111110010011111110000111000111100000010101010110110010000000000000000000001000000000000000000000000000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111110111101111110010011111110000000111000000000000000000000000000000000000000000000000000000010001111111101111011111100100111111100001110001111000000101000101101100000000000001000000000010000000000000000000000000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111101111011111100110111111100000001110000000000000000000000000000000000000000000000000000000100011111111011110111111001101111111000011100011110000001010001011011000000000000010000000000100000000000000000000000000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111011110111111001101111111000000011100000000000000000000000000000000000000000000000000000001000111111110111101111110011011111110000111011011100000010101010110110000000000000100000000001000000000000000000000000000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111110111101111110011011111110000000111000000000000000000000000000000000000000000000000000000010001111111101111011111100110111111100001110110111000000101010101101100000000000001000000000010000000000000000000000000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111001101111111000011101101110000001010001011011001000000000010000000000100000000000000000000000000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111011011100000010100010110110010000000000100000000001000000000000000000000000000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110010111000000101010101101100100000000001000000000010000000000000000000000000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111001101111111000011100101110000001010101011011001000000000010000000000100000000000000000000000000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111001011100000010100010110110000000000000000000000000000000000010000000000000000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110010111000000101000101101100000000000000000000000000000000000100000000000000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111001101111111000011101001110000001010101011011000000000000000000000000000000000001000000000000000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111010011100000010101010110110000000000000000000000000000000000010000000000000000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111100110111111100001110100111000000101000101101100100000000000000000000000000000000100000000000000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111001101111111000011101001110000001010001011011001000000000000000000000000000000001000000000000000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111000011100000010101010110110010000000000000000000000000000000010000000000000000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111100110111111100001110000111000000101010101101100100000000000000000000000000000000100000000000000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111001101111111000011100001110000001010001011011000000000000010000000000000000000001000000000000000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111000011100000010100010110110000000000000100000000000000000000010000000000000000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110111011000000101010101101100000000000001000000000000000000000100000000000000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111001101111111000011101110110000001010101011011000000000000010000000000000000000001000000000000000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111110011011111110000111011101100000010100010110110010000000000100000000000000000000010000000000000000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110111011000000101000101101100100000000001000000000000000000000100000000000000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111110110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101101111111000011100110110000001010101011011001000000000010000000000000000000001000000000000000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111101101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011011111110000111001101100000010101010110110010000000000100000000000000000000010000000000000000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111110110111111100001110011011000000101000101101100000000000000000000000010000000000100000000000000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111110110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111101101111111000011100110110000001010001011011000000000000000000000000100000000001000000000000000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111101101111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111011011111110000111010101100000010101010110110000000000000000000000001000000000010000000000000000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110110111111100001110101011000000101010101101100000000000000000000000010000000000100000000000000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111110110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101101111111000011101010110000001010001011011001000000000000000000000100000000001000000000000000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111101111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011111111110000111010101100000010100010110110010000000000000000000001000000000010000000000000000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110111111111100001110001011000000101010101101100100000000000000000000010000000000100000000000000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111110111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101111111111000011100010110000001010101011011001000000000000000000000100000000001000000000000000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111101111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011111111110000111000101100000010100010110110000000000000100000000001000000000010000000000000000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110111111111100001110001011000000101000101101100000000000001000000000010000000000100000000000000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111110111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101111111111000011101100110000001010101011011000000000000010000000000100000000001000000000000000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111101111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111011111111110000111011001100000010101010110110000000000000100000000001000000000010000000000000000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111110111111111100001110110011000000101000101101100100000000001000000000010000000000100000000000000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101100110000001010001011011001000000000010000000000100000000001000000000000000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001001100000010101010110110010000000000100000000001000000000010000000000000000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010011000000101010101101100100000000001000000000010000000000100000000000000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100100110000001010001011011000000000000000000000000000000000000000000000010000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001001100000010100010110110000000000000000000000000000000000000000000000100000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100011000000101010101101100000000000000000000000000000000000000000000001000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000110000001010101011011000000000000000000000000000000000000000000000010000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010001100000010100010110110010000000000000000000000000000000000000000000100000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100011000000101000101101100100000000000000000000000000000000000000000001000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000110000001010101011011001000000000000000000000000000000000000000000010000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000001100000010101010110110010000000000000000000000000000000000000000000100000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000011000000101000101101100000000000001000000000000000000000000000000001000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000110000001010001011011000000000000010000000000000000000000000000000010000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011110100000010101010110110000000000000100000000000000000000000000000000100000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111101000000101010101101100000000000001000000000000000000000000000000001000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101111010000001010001011011001000000000010000000000000000000000000000000010000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011110100000010100010110110010000000000100000000000000000000000000000000100000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011101000000101010101101100100000000001000000000000000000000000000000001000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100111010000001010101011011001000000000010000000000000000000000000000000010000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001110100000010100010110110000000000000000000000001000000000000000000000100000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011101000000101000101101100000000000000000000000010000000000000000000001000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101011010000001010101011011000000000000000000000000100000000000000000000010000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010110100000010101010110110000000000000000000000001000000000000000000000100000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101101000000101000101101100100000000000000000000010000000000000000000001000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101011010000001010001011011001000000000000000000000100000000000000000000010000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000110100000010101010110110010000000000000000000001000000000000000000000100000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001101000000101010101101100100000000000000000000010000000000000000000001000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100011010000001010001011011000000000000010000000000100000000000000000000010000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000110100000010100010110110000000000000100000000001000000000000000000000100000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110101000000101010101101100000000000001000000000010000000000000000000001000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101101010000001010101011011000000000000010000000000100000000000000000000010000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011010100000010100010110110010000000000100000000001000000000000000000000100000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110101000000101000101101100100000000001000000000010000000000000000000001000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100101010000001010101011011001000000000010000000000100000000000000000000010000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001010100000010101010110110010000000000100000000001000000000000000000000100000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010101000000101000101101100000000000000000000000000000000000100000000001000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100101010000001010001011011000000000000000000000000000000000001000000000010000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010010100000010101010110110000000000000000000000000000000000010000000000100000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100101000000101010101101100000000000000000000000000000000000100000000001000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101001010000001010001011011001000000000000000000000000000000001000000000010000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010010100000010100010110110010000000000000000000000000000000010000000000100000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000101000000101010101101100100000000000000000000000000000000100000000001000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100001010000001010101011011001000000000000000000000000000000001000000000010000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000010100000010100010110110000000000000100000000000000000000010000000000100000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000101000000101000101101100000000000001000000000000000000000100000000001000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101110010000001010101011011000000000000010000000000000000000001000000000010000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011100100000010101010110110000000000000100000000000000000000010000000000100000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111001000000101000101101100100000000001000000000000000000000100000000001000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101110010000001010001011011001000000000010000000000000000000001000000000010000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100100000010101010110110010000000000100000000000000000000010000000000100000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011001000000101010101101100100000000001000000000000000000000100000000001000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110010000001010001011011000000000000000000000000100000000001000000000010000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100100000010100010110110000000000000000000000001000000000010000000000100000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101001000000101010101101100000000000000000000000010000000000100000000001000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101010010000001010101011011000000000000000000000000100000000001000000000010000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010100100000010100010110110010000000000000000000001000000000010000000000100000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101001000000101000101101100100000000000000000000010000000000100000000001000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100010010000001010101011011001000000000000000000000100000000001000000000010000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000100100000010101010110110010000000000000000000001000000000010000000000100000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001001000000101000101101100000000000001000000000010000000000100000000001000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100010010000001010001011011000000000000010000000000100000000001000000000010000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011000100000010101010110110000000000000100000000001000000000010000000000100000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110001000000101010101101100000000000001000000000010000000000100000000001000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101100010000001010001011011001000000000010000000000100000000001000000000010000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011000100000010100010110110010000000000100000000001000000000010000000000100000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010001000000101010101101100100000000001000000000010000000000100000000001000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100100010000001010101011011001000000000010000000000100000000001000000000010000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001000100000010100010110110000000000000000000000000000000000000000000000000001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010001000000101000101101100000000000000000000000000000000000000000000000000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101000010000001010101011011000000000000000000000000000000000000000000000000000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010000100000010101010110110000000000000000000000000000000000000000000000000001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100001000000101000101101100100000000000000000000000000000000000000000000000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000010000001010001011011001000000000000000000000000000000000000000000000000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000000100000010101010110110010000000000000000000000000000000000000000000000001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000001000000101010101101100100000000000000000000000000000000000000000000000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000010000001010001011011000000000000010000000000000000000000000000000000000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000000100000010100010110110000000000000100000000000000000000000000000000000001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111110000000101010101101100000000000001000000000000000000000000000000000000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101111100000001010101011011000000000000010000000000000000000000000000000000000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011111000000010100010110110010000000000100000000000000000000000000000000000001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111110000000101000101101100100000000001000000000000000000000000000000000000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100111100000001010101011011001000000000010000000000000000000000000000000000000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001111000000010101010110110010000000000100000000000000000000000000000000000001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011110000000101000101101100000000000000000000000010000000000000000000000000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100111100000001010001011011000000000000000000000000100000000000000000000000000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010111000000010101010110110000000000000000000000001000000000000000000000000001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101110000000101010101101100000000000000000000000010000000000000000000000000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101011100000001010001011011001000000000000000000000100000000000000000000000000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010111000000010100010110110010000000000000000000001000000000000000000000000001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001110000000101010101101100100000000000000000000010000000000000000000000000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100011100000001010101011011001000000000000000000000100000000000000000000000000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000111000000010100010110110000000000000100000000001000000000000000000000000001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001110000000101000101101100000000000001000000000010000000000000000000000000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101101100000001010101011011000000000000010000000000100000000000000000000000000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011011000000010101010110110000000000000100000000001000000000000000000000000001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110110000000101000101101100100000000001000000000010000000000000000000000000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101101100000001010001011011001000000000010000000000100000000000000000000000000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001011000000010101010110110010000000000100000000001000000000000000000000000001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010110000000101010101101100100000000001000000000010000000000000000000000000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100101100000001010001011011000000000000000000000000000000000001000000000000000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001011000000010100010110110000000000000000000000000000000000010000000000000001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100110000000101010101101100000000000000000000000000000000000100000000000000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101001100000001010101011011000000000000000000000000000000000001000000000000000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010011000000010100010110110010000000000000000000000000000000010000000000000001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100110000000101000101101100100000000000000000000000000000000100000000000000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100001100000001010101011011001000000000000000000000000000000001000000000000000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000011000000010101010110110010000000000000000000000000000000010000000000000001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000110000000101000101101100000000000001000000000000000000000100000000000000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100001100000001010001011011000000000000010000000000000000000001000000000000000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011101000000010101010110110000000000000100000000000000000000010000000000000001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111010000000101010101101100000000000001000000000000000000000100000000000000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101110100000001010001011011001000000000010000000000000000000001000000000000000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011101000000010100010110110010000000000100000000000000000000010000000000000001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011010000000101010101101100100000000001000000000000000000000100000000000000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110100000001010101011011001000000000010000000000000000000001000000000000000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001101000000010100010110110000000000000000000000001000000000010000000000000001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011010000000101000101101100000000000000000000000010000000000100000000000000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101010100000001010101011011000000000000000000000000100000000001000000000000000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010101000000010101010110110000000000000000000000001000000000010000000000000001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101010000000101000101101100100000000000000000000010000000000100000000000000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101010100000001010001011011001000000000000000000000100000000001000000000000000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000101000000010101010110110010000000000000000000001000000000010000000000000001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001010000000101010101101100100000000000000000000010000000000100000000000000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100010100000001010001011011000000000000010000000000100000000001000000000000000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000101000000010100010110110000000000000100000000001000000000010000000000000001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110010000000101010101101100000000000001000000000010000000000100000000000000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101100100000001010101011011000000000000010000000000100000000001000000000000000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011001000000010100010110110010000000000100000000001000000000010000000000000001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110010000000101000101101100100000000001000000000010000000000100000000000000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100100100000001010101011011001000000000010000000000100000000001000000000000000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001001000000010101010110110010000000000100000000001000000000010000000000000001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010010000000101000101101100000000000000000000000000000000000000000000001000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100100100000001010001011011000000000000000000000000000000000000000000000010000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010001000000010101010110110000000000000000000000000000000000000000000000100001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100010000000101010101101100000000000000000000000000000000000000000000001000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000100000001010001011011001000000000000000000000000000000000000000000010000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010001000000010100010110110010000000000000000000000000000000000000000000100001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000010000000101010101101100100000000000000000000000000000000000000000001000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000100000001010101011011001000000000000000000000000000000000000000000010000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000001000000010100010110110000000000000100000000000000000000000000000000100001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000010000000101000101101100000000000001000000000000000000000000000000001000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101111000000001010101011011000000000000010000000000000000000000000000000010000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011110000000010101010110110000000000000100000000000000000000000000000000100001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111100000000101000101101100100000000001000000000000000000000000000000001000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101111000000001010001011011001000000000010000000000000000000000000000000010000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001110000000010101010110110010000000000100000000000000000000000000000000100001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011100000000101010101101100100000000001000000000000000000000000000000001000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100111000000001010001011011000000000000000000000000100000000000000000000010000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001110000000010100010110110000000000000000000000001000000000000000000000100001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101100000000101010101101100000000000000000000000010000000000000000000001000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101011000000001010101011011000000000000000000000000100000000000000000000010000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010110000000010100010110110010000000000000000000001000000000000000000000100001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101100000000101000101101100100000000000000000000010000000000000000000001000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100011000000001010101011011001000000000000000000000100000000000000000000010000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000110000000010101010110110010000000000000000000001000000000000000000000100001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001100000000101000101101100000000000001000000000010000000000000000000001000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100011000000001010001011011000000000000010000000000100000000000000000000010000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011010000000010101010110110000000000000100000000001000000000000000000000100001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110100000000101010101101100000000000001000000000010000000000000000000001000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101101000000001010001011011001000000000010000000000100000000000000000000010000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011010000000010100010110110010000000000100000000001000000000000000000000100001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010100000000101010101101100100000000001000000000010000000000000000000001000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100101000000001010101011011001000000000010000000000100000000000000000000010000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001010000000010100010110110000000000000000000000000000000000010000000000100001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010100000000101000101101100000000000000000000000000000000000100000000001000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101001000000001010101011011000000000000000000000000000000000001000000000010000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010010000000010101010110110000000000000000000000000000000000010000000000100001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100100000000101000101101100100000000000000000000000000000000100000000001000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101001000000001010001011011001000000000000000000000000000000001000000000010000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000010000000010101010110110010000000000000000000000000000000010000000000100001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000100000000101010101101100100000000000000000000000000000000100000000001000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100001000000001010001011011000000000000010000000000000000000001000000000010000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000010000000010100010110110000000000000100000000000000000000010000000000100001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111000000000101010101101100000000000001000000000000000000000100000000001000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101110000000001010101011011000000000000010000000000000000000001000000000010000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011100000000010100010110110010000000000100000000000000000000010000000000100001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111000000000101000101101100100000000001000000000000000000000100000000001000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110000000001010101011011001000000000010000000000000000000001000000000010000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100000000010101010110110010000000000100000000000000000000010000000000100001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000000000101000101101100000000000000000000000010000000000100000000001000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110000000001010001011011000000000000000000000000100000000001000000000010000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010100000000010101010110110000000000000000000000001000000000010000000000100001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101000000000101010101101100000000000000000000000010000000000100000000001000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101010000000001010001011011001000000000000000000000100000000001000000000010000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010100000000010100010110110010000000000000000000001000000000010000000000100001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001000000000101010101101100100000000000000000000010000000000100000000001000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100010000000001010101011011001000000000000000000000100000000001000000000010000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000100000000010100010110110000000000000100000000001000000000010000000000100001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001000000000101000101101100000000000001000000000010000000000100000000001000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101100000000001010101011011000000000000010000000000100000000001000000000010000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011000000000010101010110110000000000000100000000001000000000010000000000100001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110000000000101000101101100100000000001000000000010000000000100000000001000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101100000000001010001011011001000000000010000000000100000000001000000000010000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001000000000010101010110110010000000000100000000001000000000010000000000100001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010000000000101010101101100100000000001000000000010000000000100000000001000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100100000000001010001011011000000000000000000000000000000000000000000000000000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001000000000010100010110110000000000000000000000000000000000000000000000000000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100000000000101010101101100000000000000000000000000000000000000000000000000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000000000001010101011011000000000000000000000000000000000000000000000000000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010000000000010100010110110010000000000000000000000000000000000000000000000000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100000000000101000101101100100000000000000000000000000000000000000000000000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000000000001010101011011001000000000000000000000000000000000000000000000000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000000000000010101010110110010000000000000000000000000000000000000000000000000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000000000000101000101101100000000000001000000000000000000000000000000000000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000000000001010001011011000000000000010000000000000000000000000000000000000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000010111010110000000010101010110110000000000000100000000000000000000000000000000000000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000101110101001000000101010101101100000000000001000000000000000000000000000000000000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000001011101011110000001010001011011001000000000010000000000000000000000000000000000000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000010111010101010000010100010110110010000000000100000000000000000000000000000000000000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000101110001101100000101010101101100100000000001000000000000000000000000000000000000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100011111000001010101011011001000000000010000000000000000000000000000000000000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000111110000010100010110110000000000000000000000001000000000000000000000000000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110001111100000101000101101100000000000000000000000010000000000000000000000000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101101111000001010101011011000000000000000000000000100000000000000000000000000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011011110000010101010110110000000000000000000000001000000000000000000000000000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110111100000101000101101100100000000000000000000010000000000000000000000000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101101111000001010001011011001000000000000000000000100000000000000000000000000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001011110000010101010110110010000000000000000000001000000000000000000000000000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110010111100000101010101101100100000000000000000000010000000000000000000000000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100101111000001010001011011000000000000010000000000100000000000000000000000000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001011110000010100010110110000000000000100000000001000000000000000000000000000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100111100000101010101101100000000000001000000000010000000000000000000000000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101001111000001010101011011000000000000010000000000100000000000000000000000000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010011110000010100010110110010000000000100000000001000000000000000000000000000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100111100000101000101101100100000000001000000000010000000000000000000000000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100001111000001010101011011001000000000010000000000100000000000000000000000000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000011110000010101010110110010000000000100000000001000000000000000000000000000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000111100000101000101101100000000000000000000000000000000000100000000000000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100001111000001010001011011000000000000000000000000000000000001000000000000000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011101110000010101010110110000000000000000000000000000000000010000000000000000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111011100000101010101101100000000000000000000000000000000000100000000000000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101110111000001010001011011001000000000000000000000000000000001000000000000000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011101110000010100010110110010000000000000000000000000000000010000000000000000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011011100000101010101101100100000000000000000000000000000000100000000000000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100110111000001010101011011001000000000000000000000000000000001000000000000000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001101110000010100010110110000000000000100000000000000000000010000000000000000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011011100000101000101101100000000000001000000000000000000000100000000000000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101010111000001010101011011000000000000010000000000000000000001000000000000000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010101110000010101010110110000000000000100000000000000000000010000000000000000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110101011100000101000101101100100000000001000000000000000000000100000000000000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101010111000001010001011011001000000000010000000000000000000001000000000000000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000101110000010101010110110010000000000100000000000000000000010000000000000000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110001011100000101010101101100100000000001000000000000000000000100000000000000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100010111000001010001011011000000000000000000000000100000000001000000000000000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000101110000010100010110110000000000000000000000001000000000010000000000000000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110011100000101010101101100000000000000000000000010000000000100000000000000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101100111000001010101011011000000000000000000000000100000000001000000000000000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011001110000010100010110110010000000000000000000001000000000010000000000000000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110011100000101000101101100100000000000000000000010000000000100000000000000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100100111000001010101011011001000000000000000000000100000000001000000000000000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001001110000010101010110110010000000000000000000001000000000010000000000000000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110010011100000101000101101100000000000001000000000010000000000100000000000000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100100111000001010001011011000000000000010000000000100000000001000000000000000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010001110000010101010110110000000000000100000000001000000000010000000000000000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100011100000101010101101100000000000001000000000010000000000100000000000000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101000111000001010001011011001000000000010000000000100000000001000000000000000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010001110000010100010110110010000000000100000000001000000000010000000000000000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000011100000101010101101100100000000001000000000010000000000100000000000000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100000111000001010101011011001000000000010000000000100000000001000000000000000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000001110000010100010110110000000000000000000000000000000000000000000000100000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000011100000101000101101100000000000000000000000000000000000000000000001000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101111011000001010101011011000000000000000000000000000000000000000000000010000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011110110000010101010110110000000000000000000000000000000000000000000000100000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110111101100000101000101101100100000000000000000000000000000000000000000001000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101111011000001010001011011001000000000000000000000000000000000000000000010000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001110110000010101010110110010000000000000000000000000000000000000000000100000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011101100000101010101101100100000000000000000000000000000000000000000001000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100111011000001010001011011000000000000010000000000000000000000000000000010000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001110110000010100010110110000000000000100000000000000000000000000000000100000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110101101100000101010101101100000000000001000000000000000000000000000000001000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101011011000001010101011011000000000000010000000000000000000000000000000010000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010110110000010100010110110010000000000100000000000000000000000000000000100000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110101101100000101000101101100100000000001000000000000000000000000000000001000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100011011000001010101011011001000000000010000000000000000000000000000000010000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000110110000010101010110110010000000000100000000000000000000000000000000100000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110001101100000101000101101100000000000000000000000010000000000000000000001000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100011011000001010001011011000000000000000000000000100000000000000000000010000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011010110000010101010110110000000000000000000000001000000000000000000000100000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110101100000101010101101100000000000000000000000010000000000000000000001000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101101011000001010001011011001000000000000000000000100000000000000000000010000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011010110000010100010110110010000000000000000000001000000000000000000000100000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010101100000101010101101100100000000000000000000010000000000000000000001000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100101011000001010101011011001000000000000000000000100000000000000000000010000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001010110000010100010110110000000000000100000000001000000000000000000000100000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110010101100000101000101101100000000000001000000000010000000000000000000001000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101001011000001010101011011000000000000010000000000100000000000000000000010000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010010110000010101010110110000000000000100000000001000000000000000000000100000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110100101100000101000101101100100000000001000000000010000000000000000000001000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101001011000001010001011011001000000000010000000000100000000000000000000010000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000010110000010101010110110010000000000100000000001000000000000000000000100000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000101100000101010101101100100000000001000000000010000000000000000000001000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100001011000001010001011011000000000000000000000000000000000001000000000010000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000010110000010100010110110000000000000000000000000000000000010000000000100000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111001100000101010101101100000000000000000000000000000000000100000000001000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101110011000001010101011011000000000000000000000000000000000001000000000010000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011100110000010100010110110010000000000000000000000000000000010000000000100000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110111001100000101000101101100100000000000000000000000000000000100000000001000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100110011000001010101011011001000000000000000000000000000000001000000000010000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001100110000010101010110110010000000000000000000000000000000010000000000100000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110011001100000101000101101100000000000001000000000000000000000100000000001000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100110011000001010001011011000000000000010000000000000000000001000000000010000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010100110000010101010110110000000000000100000000000000000000010000000000100000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110101001100000101010101101100000000000001000000000000000000000100000000001000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101010011000001010001011011001000000000010000000000000000000001000000000010000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010100110000010100010110110010000000000100000000000000000000010000000000100000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001001100000101010101101100100000000001000000000000000000000100000000001000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100010011000001010101011011001000000000010000000000000000000001000000000010000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000100110000010100010110110000000000000000000000001000000000010000000000100000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110001001100000101000101101100000000000000000000000010000000000100000000001000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101100011000001010101011011000000000000000000000000100000000001000000000010000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011000110000010101010110110000000000000000000000001000000000010000000000100000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110001100000101000101101100100000000000000000000010000000000100000000001000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101100011000001010001011011001000000000000000000000100000000001000000000010000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001000110000010101010110110010000000000000000000001000000000010000000000100000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010001100000101010101101100100000000000000000000010000000000100000000001000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100100011000001010001011011000000000000010000000000100000000001000000000010000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001000110000010100010110110000000000000100000000001000000000010000000000100000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100001100000101010101101100000000000001000000000010000000000100000000001000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101000011000001010101011011000000000000010000000000100000000001000000000010000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010000110000010100010110110010000000000100000000001000000000010000000000100000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100001100000101000101101100100000000001000000000010000000000100000000001000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100000011000001010101011011001000000000010000000000100000000001000000000010000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000000110000010101010110110010000000000100000000001000000000010000000000100000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000001100000101000101101100000000000000000000000000000000000000000000000000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100000011000001010001011011000000000000000000000000000000000000000000000000000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011111010000010101010110110000000000000000000000000000000000000000000000000001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111110100000101010101101100000000000000000000000000000000000000000000000000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101111101000001010001011011001000000000000000000000000000000000000000000000000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011111010000010100010110110010000000000000000000000000000000000000000000000001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110011110100000101010101101100100000000000000000000000000000000000000000000000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100111101000001010101011011001000000000000000000000000000000000000000000000000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001111010000010100010110110000000000000100000000000000000000000000000000000001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011110100000101000101101100000000000001000000000000000000000000000000000000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101011101000001010101011011000000000000010000000000000000000000000000000000000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010111010000010101010110110000000000000100000000000000000000000000000000000001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110101110100000101000101101100100000000001000000000000000000000000000000000000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101011101000001010001011011001000000000010000000000000000000000000000000000000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000111010000010101010110110010000000000100000000000000000000000000000000000001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001110100000101010101101100100000000001000000000000000000000000000000000000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100011101000001010001011011000000000000000000000000100000000000000000000000000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000111010000010100010110110000000000000000000000001000000000000000000000000001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110110100000101010101101100000000000000000000000010000000000000000000000000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101101101000001010101011011000000000000000000000000100000000000000000000000000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011011010000010100010110110010000000000000000000001000000000000000000000000001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110110100000101000101101100100000000000000000000010000000000000000000000000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100101101000001010101011011001000000000000000000000100000000000000000000000000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001011010000010101010110110010000000000000000000001000000000000000000000000001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010110100000101000101101100000000000001000000000010000000000000000000000000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100101101000001010001011011000000000000010000000000100000000000000000000000000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010011010000010101010110110000000000000100000000001000000000000000000000000001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110100110100000101010101101100000000000001000000000010000000000000000000000000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101001101000001010001011011001000000000010000000000100000000000000000000000000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010011010000010100010110110010000000000100000000001000000000000000000000000001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000110100000101010101101100100000000001000000000010000000000000000000000000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100001101000001010101011011001000000000010000000000100000000000000000000000000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000011010000010100010110110000000000000000000000000000000000010000000000000001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000110100000101000101101100000000000000000000000000000000000100000000000000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100110000000000000000000000000000000000011101110101000001010101011011000000000000000000000000000000000001000000000000000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001100000000000000000000000000000000000111011101010000010101010110110000000000000000000000000000000000010000000000000001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010011000000000000000000000000000000000001110111010100000101000101101100100000000000000000000000000000000100000000000000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100110000000000000000000000000000000000011101110101000001010001011011001000000000000000000000000000000001000000000000000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000000000000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000000000000000000111001101010000010101010110110010000000000000000000000000000000010000000000000001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000000000000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000000000000000001110011010100000101010101101100100000000000000000000000000000000100000000000000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000000000000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000000000000000000011100110101000001010001011011000000000000010000000000000000000001000000000000000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010000000000000111001101010000010100010110110000000000000100000000000000000000010000000000000001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100000000000001110101010100000101010101101100000000000001000000000000000000000100000000000000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001000000000000011101010101000001010101011011000000000000010000000000000000000001000000000000000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010000000000000111010101010000010100010110110010000000000100000000000000000000010000000000000001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100000000000001110101010100000101000101101100100000000001000000000000000000000100000000000000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001000000000000011100010101000001010101011011001000000000010000000000000000000001000000000000000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010000000000000111000101010000010101010110110010000000000100000000000000000000010000000000000001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100000000000001110001010100000101000101101100000000000000000000000010000000000100000000000000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001000000000000011100010101000001010001011011000000000000000000000000100000000001000000000000000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010000000000000111011001010000010101010110110000000000000000000000001000000000010000000000000001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100000000000001110110010100000101010101101100000000000000000000000010000000000100000000000000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001000000000000011101100101000001010001011011001000000000000000000000100000000001000000000000000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111011001010000010100010110110010000000000000000000001000000000010000000000000001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100100000000001110010010100000101010101101100100000000000000000000010000000000100000000000000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001000000000011100100101000001010101011011001000000000000000000000100000000001000000000000000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111001001010000010100010110110000000000000100000000001000000000010000000000000001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110010010100000101000101101100000000000001000000000010000000000100000000000000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011101000101000001010101011011000000000000010000000000100000000001000000000000000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111010001010000010101010110110000000000000100000000001000000000010000000000000001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110100010100000101000101101100100000000001000000000010000000000100000000000000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011101000101000001010001011011001000000000010000000000100000000001000000000000000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111000001010000010101010110110010000000000100000000001000000000010000000000000001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110000010100000101010101101100100000000001000000000010000000000100000000000000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011100000101000001010001011011000000000000000000000000000000000000000000000010000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111000001010000010100010110110000000000000000000000000000000000000000000000100001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100100000000001110111100100000101010101101100000000000000000000000000000000000000000000001000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011101111001000001010101011011000000000000000000000000000000000000000000000010000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111011110010000010100010110110010000000000000000000000000000000000000000000100001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100100000000001110111100100000101000101101100100000000000000000000000000000000000000000001000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001000000000011100111001000001010101011011001000000000000000000000000000000000000000000010000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111001110010000010101010110110010000000000000000000000000000000000000000000100001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110011100100000101000101101100000000000001000000000000000000000000000000001000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011100111001000001010001011011000000000000010000000000000000000000000000000010000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111010110010000010101010110110000000000000100000000000000000000000000000000100001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110101100100000101010101101100000000000001000000000000000000000000000000001000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011101011001000001010001011011001000000000010000000000000000000000000000000010000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111010110010000010100010110110010000000000100000000000000000000000000000000100001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110001100100000101010101101100100000000001000000000000000000000000000000001000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011100011001000001010101011011001000000000010000000000000000000000000000000010000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111000110010000010100010110110000000000000000000000001000000000000000000000100001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110001100100000101000101101100000000000000000000000010000000000000000000001000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011101101001000001010101011011000000000000000000000000100000000000000000000010000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111011010010000010101010110110000000000000000000000001000000000000000000000100001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110110100100000101000101101100100000000000000000000010000000000000000000001000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011101101001000001010001011011001000000000000000000000100000000000000000000010000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111001010010000010101010110110010000000000000000000001000000000000000000000100001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110010100100000101010101101100100000000000000000000010000000000000000000001000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011100101001000001010001011011000000000000010000000000100000000000000000000010000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111001010010000010100010110110000000000000100000000001000000000000000000000100001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110100100100000101010101101100000000000001000000000010000000000000000000001000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011101001001000001010101011011000000000000010000000000100000000000000000000010000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111010010010000010100010110110010000000000100000000001000000000000000000000100001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110100100100000101000101101100100000000001000000000010000000000000000000001000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011100001001000001010101011011001000000000010000000000100000000000000000000010000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111000010010000010101010110110010000000000100000000001000000000000000000000100001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001001000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010010000000100110000000001110000100100000101000101101100000000000000000000000000000000000100000000001000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010010000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100100000001001100000000011100001001000001010001011011000000000000000000000000000000000001000000000010000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100100000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001001000000010011000000000111011100010000010101010110110000000000000000000000000000000000010000000000100001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001001000000010011100000000010111000000000000000000000000000000000000000000000000000000010011000000000010010000000100111000000001110111000100000101010101101100000000000000000000000000000000000100000000001000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000010010000000100111000100000101110000000000000000000000000000000000000000000000000000000100110100100000100100000001001110001000011101110001000001010001011011001000000000000000000000000000000001000000000010000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100100000100100000001001110001000001011100000000000000000000000000000000000000000000000000000001000101001000001001000000010011100010000111011100010000010100010110110010000000000000000000000000000000010000000000100001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001001000000010011100010000010111000000000000000000000000000000000000000000000000000000010011010010000010010000000100111000100001110011000100000101010101101100100000000000000000000000000000000100000000001000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000010010000000100111000100000001110000000000000000000000000000000000000000000000000000000100010100100000100100000001001110001000011100110001000001010101011011001000000000000000000000000000000001000000000010000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000100100000001001110001000000011100000000000000000000000000000000000000000000000000001001001101001000001001000000010011100010000111001100010000010100010110110000000000000100000000000000000000010000000000100001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001000001001000000010011100010000000111000000000000000000000000000000000000000000000000000000010001010010000010010000000100111000100001110011000100000101000101101100000000000001000000000000000000000100000000001000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000010010000000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000100100000001001110101000011101010001000001010101011011000000000000010000000000000000000001000000000010000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100100000100100000001001110101000000011100000000000000000000000000000000000000000000000000000001000101001000001001000000010011101010000111010100010000010101010110110000000000000100000000000000000000010000000000100001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001001000000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000010010000000100111010100001110101000100000101000101101100100000000001000000000000000000000100000000001000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000010010000000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000100100000001001110101000011101010001000001010001011011001000000000010000000000000000000001000000000010000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000100110000001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001100000010011101010000111000100010000010101010110110010000000000100000000000000000000010000000000100001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000010011010000100111010100001110001000100000101010101101100100000000001000000000000000000000100000000001000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000010011010000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000100110100001001110101000011100010001000001010001011011000000000000000000000000100000000001000000000010000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001101000010011101010000111000100010000010100010110110000000000000000000000001000000000010000000000100001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000010011010000100111010100001110110000100000101010101101100000000000000000000000010000000000100000000001000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000010011010000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000100110100001001110101000011101100001000001010101011011000000000000000000000000100000000001000000000010000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001000101001000001001101000010011101010000111011000010000010100010110110010000000000000000000001000000000010000000000100001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010000010011010000100111010100001110110000100000101000101101100100000000000000000000010000000000100000000001000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000010011010000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000100110100001001110101000011100100001000001010101011011001000000000000000000000100000000001000000000010000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001000101001000001001101000010011101010000111001000010000010101010110110010000000000000000000001000000000010000000000100001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001000001101101000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010000011011010000100111010100001110010000100000101000101101100000000000001000000000010000000000100000000001000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000011011010000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000110110100001001110101000011100100001000001010001011011000000000000010000000000100000000001000000000010000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100100000110110100001001110101000000011100000000000000000000000000000000000000000000000000000001000101001000001101101000010011101010000111010000010000010101010110110000000000000100000000001000000000010000000000100001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001101101000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000011011010000100111010100001110100000100000101010101101100000000000001000000000010000000000100000000001000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000011011010000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000110110100001001110101000011101000001000001010001011011001000000000010000000000100000000001000000000010000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000110110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001101101000010011101010000111010000010000010100010110110010000000000100000000001000000000010000000000100001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001010001101101000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010100011011010000100111010100001110000000100000101010101101100100000000001000000000010000000000100000000001000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010100011011011000100111010100000001110000000000000000000000000000000000000000000000000000000100110100101000110110110001001110101000011100000001000001010101011011001000000000010000000000100000000001000000000010000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100101000110111110001001110101000000011100000000000000000000000000000000000000000000000000000001001101001010001101111100010011101010000111000000010000010100010110110000000000000000000000000000000000000000000000000000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101101010001101111100010011101010000000111000000000000000000000000000000000000000000000000000000010001011010100011011111000100111010100001110000000100000101000101101100000000000000000000000000000000000000000000000000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101011010101111011111000100111010100000001110000000000000000000000000000000000000000000000000000000100010110101011110111110001001110101000011101111110000001010101011011000000000000000000000000000000000000000000000000000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010110101011110111110001001110101000000011100000000000000000000000000000000000000000000000000000001000101101010111101111100010011101010000111011111100000010101010110110000000000000000000000000000000000000000000000000000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101101110111101111100010011111010000000111000000000000000000000000000000000000000000000000000000010001011011101111011111000100111110100001110111111000000101000101101100100000000000000000000000000000000000000000000000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101011011101111011111000100111110100000001110000000000000000000000000000000000000000000000000000000100010110111011110111110001001111101000011101111110000001010001011011001000000000000000000000000000000000000000000000000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010110111011110111110001001111101000000011100000000000000000000000000000000000000000000000000000001000101101110111101111100010011111010000111001111100000010101010110110010000000000000000000000000000000000000000000000000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101101110111101111100010011111010000000111000000000000000000000000000000000000000000000000000000010011011011101111011111000100111110100001110011111000000101010101101100100000000000000000000000000000000000000000000000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111011111101111011111000100111111100000001110000000000000000000000000000000000000000000000000000000100110111111011110111110001001111111000011100111110000001010001011011000000000000010000000000000000000000000000000000000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110111111011110111111001001111111000000011100000000000000000000000000000000000000000000000000000001001101111110111101111110010011111110000111001111100000010100010110110000000000000100000000000000000000000000000000000000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111110111101111110010011111110000000111000000000000000000000000000000000000000000000000000000010011111111101111011111100100111111100001110101111000000101010101101100000000000001000000000000000000000000000000000000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111101111011111100100111111100000001110000000000000000000000000000000000000000000000000000000100111111111011110111111001001111111000011101011110000001010101011011000000000000010000000000000000000000000000000000000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111011110111111001001111111000000011100000000000000000000000000000000000000000000000000000001001111111110111101111110010011111110000111010111100000010100010110110010000000000100000000000000000000000000000000000000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111110111101111110010011111110000000111000000000000000000000000000000000000000000000000000000010001111111101111011111100100111111100001110101111000000101000101101100100000000001000000000000000000000000000000000000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111101111011111100100111111100000001110000000000000000000000000000000000000000000000000000000100011111111011110111111001001111111000011100011110000001010101011011001000000000010000000000000000000000000000000000000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111011110111111001001111111000000011100000000000000000000000000000000000000000000000000000001000111111110111101111110010011111110000111000111100000010101010110110010000000000100000000000000000000000000000000000000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111110111101111110010011111110000000111000000000000000000000000000000000000000000000000000000010001111111101111011111100100111111100001110001111000000101000101101100000000000000000000000010000000000000000000000000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111101111011111100110111111100000001110000000000000000000000000000000000000000000000000000000100011111111011110111111001101111111000011100011110000001010001011011000000000000000000000000100000000000000000000000000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111011110111111001101111111000000011100000000000000000000000000000000000000000000000000000001000111111110111101111110011011111110000111011011100000010101010110110000000000000000000000001000000000000000000000000000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111110111101111110011011111110000000111000000000000000000000000000000000000000000000000000000010001111111101111011111100110111111100001110110111000000101010101101100000000000000000000000010000000000000000000000000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111001101111111000011101101110000001010001011011001000000000000000000000100000000000000000000000000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111011011100000010100010110110010000000000000000000001000000000000000000000000000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110010111000000101010101101100100000000000000000000010000000000000000000000000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111001101111111000011100101110000001010101011011001000000000000000000000100000000000000000000000000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111001011100000010100010110110000000000000100000000001000000000000000000000000000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110010111000000101000101101100000000000001000000000010000000000000000000000000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111001101111111000011101001110000001010101011011000000000000010000000000100000000000000000000000000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111010011100000010101010110110000000000000100000000001000000000000000000000000000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110100111000000101000101101100100000000001000000000010000000000000000000000000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111001101111111000011101001110000001010001011011001000000000010000000000100000000000000000000000000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111110011011111110000111000011100000010101010110110010000000000100000000001000000000000000000000000000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111100110111111100001110000111000000101010101101100100000000001000000000010000000000000000000000000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111001101111111000011100001110000001010001011011000000000000000000000000000000000001000000000000000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111110011011111110000111000011100000010100010110110000000000000000000000000000000000010000000000000000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111100110111111100001110111011000000101010101101100000000000000000000000000000000000100000000000000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111001101111111000011101110110000001010101011011000000000000000000000000000000000001000000000000000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111011101100000010100010110110010000000000000000000000000000000010000000000000000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110110111111100001110111011000000101000101101100100000000000000000000000000000000100000000000000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111110110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101101111111000011100110110000001010101011011001000000000000000000000000000000001000000000000000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111101101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011011111110000111001101100000010101010110110010000000000000000000000000000000010000000000000000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110110111111100001110011011000000101000101101100000000000001000000000000000000000100000000000000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111110110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111101101111111000011100110110000001010001011011000000000000010000000000000000000001000000000000000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111101101111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111011011111110000111010101100000010101010110110000000000000100000000000000000000010000000000000000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111110110111111100001110101011000000101010101101100000000000001000000000000000000000100000000000000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111110110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111101101111111000011101010110000001010001011011001000000000010000000000000000000001000000000000000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111101111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111011111111110000111010101100000010100010110110010000000000100000000000000000000010000000000000000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110111111111100001110001011000000101010101101100100000000001000000000000000000000100000000000000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111110111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101111111111000011100010110000001010101011011001000000000010000000000000000000001000000000000000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111101111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011111111110000111000101100000010100010110110000000000000000000000001000000000010000000000000000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110111111111100001110001011000000101000101101100000000000000000000000010000000000100000000000000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111110111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101111111111000011101100110000001010101011011000000000000000000000000100000000001000000000000000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111101111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011111111110000111011001100000010101010110110000000000000000000000001000000000010000000000000000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110111111111100001110110011000000101000101101100100000000000000000000010000000000100000000000000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111110111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101111111111000011101100110000001010001011011001000000000000000000000100000000001000000000000000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001001100000010101010110110010000000000000000000001000000000010000000000000000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010011000000101010101101100100000000000000000000010000000000100000000000000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100100110000001010001011011000000000000010000000000100000000001000000000000000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001001100000010100010110110000000000000100000000001000000000010000000000000000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100011000000101010101101100000000000001000000000010000000000100000000000000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101000110000001010101011011000000000000010000000000100000000001000000000000000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010001100000010100010110110010000000000100000000001000000000010000000000000000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100011000000101000101101100100000000001000000000010000000000100000000000000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000110000001010101011011001000000000010000000000100000000001000000000000000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000001100000010101010110110010000000000100000000001000000000010000000000000000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000011000000101000101101100000000000000000000000000000000000000000000001000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000110000001010001011011000000000000000000000000000000000000000000000010000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011110100000010101010110110000000000000000000000000000000000000000000000100000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111101000000101010101101100000000000000000000000000000000000000000000001000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101111010000001010001011011001000000000000000000000000000000000000000000010000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011110100000010100010110110010000000000000000000000000000000000000000000100000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011101000000101010101101100100000000000000000000000000000000000000000001000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100111010000001010101011011001000000000000000000000000000000000000000000010000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001110100000010100010110110000000000000100000000000000000000000000000000100000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011101000000101000101101100000000000001000000000000000000000000000000001000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101011010000001010101011011000000000000010000000000000000000000000000000010000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010110100000010101010110110000000000000100000000000000000000000000000000100000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101101000000101000101101100100000000001000000000000000000000000000000001000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101011010000001010001011011001000000000010000000000000000000000000000000010000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000110100000010101010110110010000000000100000000000000000000000000000000100000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001101000000101010101101100100000000001000000000000000000000000000000001000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100011010000001010001011011000000000000000000000000100000000000000000000010000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000110100000010100010110110000000000000000000000001000000000000000000000100000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110101000000101010101101100000000000000000000000010000000000000000000001000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101101010000001010101011011000000000000000000000000100000000000000000000010000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011010100000010100010110110010000000000000000000001000000000000000000000100000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110101000000101000101101100100000000000000000000010000000000000000000001000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100101010000001010101011011001000000000000000000000100000000000000000000010000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001010100000010101010110110010000000000000000000001000000000000000000000100000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010101000000101000101101100000000000001000000000010000000000000000000001000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100101010000001010001011011000000000000010000000000100000000000000000000010000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010010100000010101010110110000000000000100000000001000000000000000000000100000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100101000000101010101101100000000000001000000000010000000000000000000001000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101001010000001010001011011001000000000010000000000100000000000000000000010000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010010100000010100010110110010000000000100000000001000000000000000000000100000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000101000000101010101101100100000000001000000000010000000000000000000001000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100001010000001010101011011001000000000010000000000100000000000000000000010000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000010100000010100010110110000000000000000000000000000000000010000000000100000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000101000000101000101101100000000000000000000000000000000000100000000001000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101110010000001010101011011000000000000000000000000000000000001000000000010000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011100100000010101010110110000000000000000000000000000000000010000000000100000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111001000000101000101101100100000000000000000000000000000000100000000001000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101110010000001010001011011001000000000000000000000000000000001000000000010000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100100000010101010110110010000000000000000000000000000000010000000000100000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011001000000101010101101100100000000000000000000000000000000100000000001000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110010000001010001011011000000000000010000000000000000000001000000000010000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100100000010100010110110000000000000100000000000000000000010000000000100000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101001000000101010101101100000000000001000000000000000000000100000000001000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101010010000001010101011011000000000000010000000000000000000001000000000010000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010100100000010100010110110010000000000100000000000000000000010000000000100000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101001000000101000101101100100000000001000000000000000000000100000000001000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100010010000001010101011011001000000000010000000000000000000001000000000010000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000100100000010101010110110010000000000100000000000000000000010000000000100000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001001000000101000101101100000000000000000000000010000000000100000000001000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100010010000001010001011011000000000000000000000000100000000001000000000010000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011000100000010101010110110000000000000000000000001000000000010000000000100000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110001000000101010101101100000000000000000000000010000000000100000000001000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101100010000001010001011011001000000000000000000000100000000001000000000010000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011000100000010100010110110010000000000000000000001000000000010000000000100000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010001000000101010101101100100000000000000000000010000000000100000000001000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100100010000001010101011011001000000000000000000000100000000001000000000010000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001000100000010100010110110000000000000100000000001000000000010000000000100000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010001000000101000101101100000000000001000000000010000000000100000000001000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000010000001010101011011000000000000010000000000100000000001000000000010000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010000100000010101010110110000000000000100000000001000000000010000000000100000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100001000000101000101101100100000000001000000000010000000000100000000001000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101000010000001010001011011001000000000010000000000100000000001000000000010000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000000100000010101010110110010000000000100000000001000000000010000000000100000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000001000000101010101101100100000000001000000000010000000000100000000001000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000010000001010001011011000000000000000000000000000000000000000000000000000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000000100000010100010110110000000000000000000000000000000000000000000000000001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111110000000101010101101100000000000000000000000000000000000000000000000000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101111100000001010101011011000000000000000000000000000000000000000000000000000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011111000000010100010110110010000000000000000000000000000000000000000000000001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111110000000101000101101100100000000000000000000000000000000000000000000000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100111100000001010101011011001000000000000000000000000000000000000000000000000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001111000000010101010110110010000000000000000000000000000000000000000000000001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011110000000101000101101100000000000001000000000000000000000000000000000000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100111100000001010001011011000000000000010000000000000000000000000000000000000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010111000000010101010110110000000000000100000000000000000000000000000000000001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101110000000101010101101100000000000001000000000000000000000000000000000000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101011100000001010001011011001000000000010000000000000000000000000000000000000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010111000000010100010110110010000000000100000000000000000000000000000000000001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001110000000101010101101100100000000001000000000000000000000000000000000000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100011100000001010101011011001000000000010000000000000000000000000000000000000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000111000000010100010110110000000000000000000000001000000000000000000000000001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001110000000101000101101100000000000000000000000010000000000000000000000000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101101100000001010101011011000000000000000000000000100000000000000000000000000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011011000000010101010110110000000000000000000000001000000000000000000000000001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110110000000101000101101100100000000000000000000010000000000000000000000000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101101100000001010001011011001000000000000000000000100000000000000000000000000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001011000000010101010110110010000000000000000000001000000000000000000000000001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010110000000101010101101100100000000000000000000010000000000000000000000000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100101100000001010001011011000000000000010000000000100000000000000000000000000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001011000000010100010110110000000000000100000000001000000000000000000000000001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100110000000101010101101100000000000001000000000010000000000000000000000000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101001100000001010101011011000000000000010000000000100000000000000000000000000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010011000000010100010110110010000000000100000000001000000000000000000000000001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100110000000101000101101100100000000001000000000010000000000000000000000000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100001100000001010101011011001000000000010000000000100000000000000000000000000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000011000000010101010110110010000000000100000000001000000000000000000000000001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000110000000101000101101100000000000000000000000000000000000100000000000000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100001100000001010001011011000000000000000000000000000000000001000000000000000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011101000000010101010110110000000000000000000000000000000000010000000000000001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111010000000101010101101100000000000000000000000000000000000100000000000000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101110100000001010001011011001000000000000000000000000000000001000000000000000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011101000000010100010110110010000000000000000000000000000000010000000000000001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011010000000101010101101100100000000000000000000000000000000100000000000000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110100000001010101011011001000000000000000000000000000000001000000000000000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001101000000010100010110110000000000000100000000000000000000010000000000000001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011010000000101000101101100000000000001000000000000000000000100000000000000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101010100000001010101011011000000000000010000000000000000000001000000000000000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010101000000010101010110110000000000000100000000000000000000010000000000000001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101010000000101000101101100100000000001000000000000000000000100000000000000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101010100000001010001011011001000000000010000000000000000000001000000000000000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000101000000010101010110110010000000000100000000000000000000010000000000000001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001010000000101010101101100100000000001000000000000000000000100000000000000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100010100000001010001011011000000000000000000000000100000000001000000000000000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000101000000010100010110110000000000000000000000001000000000010000000000000001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110010000000101010101101100000000000000000000000010000000000100000000000000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101100100000001010101011011000000000000000000000000100000000001000000000000000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011001000000010100010110110010000000000000000000001000000000010000000000000001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110010000000101000101101100100000000000000000000010000000000100000000000000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100100100000001010101011011001000000000000000000000100000000001000000000000000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001001000000010101010110110010000000000000000000001000000000010000000000000001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010010000000101000101101100000000000001000000000010000000000100000000000000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100100100000001010001011011000000000000010000000000100000000001000000000000000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010001000000010101010110110000000000000100000000001000000000010000000000000001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100010000000101010101101100000000000001000000000010000000000100000000000000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000100000001010001011011001000000000010000000000100000000001000000000000000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010001000000010100010110110010000000000100000000001000000000010000000000000001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000010000000101010101101100100000000001000000000010000000000100000000000000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000100000001010101011011001000000000010000000000100000000001000000000000000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000001000000010100010110110000000000000000000000000000000000000000000000100001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000010000000101000101101100000000000000000000000000000000000000000000001000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101111000000001010101011011000000000000000000000000000000000000000000000010000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011110000000010101010110110000000000000000000000000000000000000000000000100001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111100000000101000101101100100000000000000000000000000000000000000000001000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101111000000001010001011011001000000000000000000000000000000000000000000010000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001110000000010101010110110010000000000000000000000000000000000000000000100001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011100000000101010101101100100000000000000000000000000000000000000000001000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100111000000001010001011011000000000000010000000000000000000000000000000010000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001110000000010100010110110000000000000100000000000000000000000000000000100001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101100000000101010101101100000000000001000000000000000000000000000000001000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101011000000001010101011011000000000000010000000000000000000000000000000010000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010110000000010100010110110010000000000100000000000000000000000000000000100001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101100000000101000101101100100000000001000000000000000000000000000000001000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100011000000001010101011011001000000000010000000000000000000000000000000010000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000110000000010101010110110010000000000100000000000000000000000000000000100001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001100000000101000101101100000000000000000000000010000000000000000000001000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100011000000001010001011011000000000000000000000000100000000000000000000010000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011010000000010101010110110000000000000000000000001000000000000000000000100001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110100000000101010101101100000000000000000000000010000000000000000000001000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101101000000001010001011011001000000000000000000000100000000000000000000010000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011010000000010100010110110010000000000000000000001000000000000000000000100001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010100000000101010101101100100000000000000000000010000000000000000000001000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100101000000001010101011011001000000000000000000000100000000000000000000010000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001010000000010100010110110000000000000100000000001000000000000000000000100001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010100000000101000101101100000000000001000000000010000000000000000000001000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101001000000001010101011011000000000000010000000000100000000000000000000010000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010010000000010101010110110000000000000100000000001000000000000000000000100001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100100000000101000101101100100000000001000000000010000000000000000000001000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101001000000001010001011011001000000000010000000000100000000000000000000010000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000010000000010101010110110010000000000100000000001000000000000000000000100001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000100000000101010101101100100000000001000000000010000000000000000000001000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100001000000001010001011011000000000000000000000000000000000001000000000010000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000010000000010100010110110000000000000000000000000000000000010000000000100001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111000000000101010101101100000000000000000000000000000000000100000000001000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101110000000001010101011011000000000000000000000000000000000001000000000010000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011100000000010100010110110010000000000000000000000000000000010000000000100001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111000000000101000101101100100000000000000000000000000000000100000000001000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110000000001010101011011001000000000000000000000000000000001000000000010000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100000000010101010110110010000000000000000000000000000000010000000000100001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000000000101000101101100000000000001000000000000000000000100000000001000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110000000001010001011011000000000000010000000000000000000001000000000010000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010100000000010101010110110000000000000100000000000000000000010000000000100001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101000000000101010101101100000000000001000000000000000000000100000000001000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101010000000001010001011011001000000000010000000000000000000001000000000010000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010100000000010100010110110010000000000100000000000000000000010000000000100001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001000000000101010101101100100000000001000000000000000000000100000000001000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100010000000001010101011011001000000000010000000000000000000001000000000010000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000100000000010100010110110000000000000000000000001000000000010000000000100001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001000000000101000101101100000000000000000000000010000000000100000000001000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101100000000001010101011011000000000000000000000000100000000001000000000010000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011000000000010101010110110000000000000000000000001000000000010000000000100001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110000000000101000101101100100000000000000000000010000000000100000000001000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101100000000001010001011011001000000000000000000000100000000001000000000010000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001000000000010101010110110010000000000000000000001000000000010000000000100001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010000000000101010101101100100000000000000000000010000000000100000000001000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100100000000001010001011011000000000000010000000000100000000001000000000010000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001000000000010100010110110000000000000100000000001000000000010000000000100001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100000000000101010101101100000000000001000000000010000000000100000000001000011100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101000000000001010101011011000000000000010000000000100000000001000000000010000111001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010000000000010100010110110010000000000100000000001000000000010000000000100001110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100000000000101000101101100100000000001000000000010000000000100000000001000011100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000000000001010101011011001000000000010000000000100000000001000000000010000111001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000000000000010101010110110010000000000100000000001000000000010000000000100001110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000000000000101000101101100000000000000000000000000000000000000000000000000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000000000001010001011011000000000000000000000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000010111010110000000010101010110110000000000000000000000000000000000000000000000000000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000101110101001000000101010101101100000000000000000000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000001011101011110000001010001011011001000000000000000000000000000000000000000000000000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000010111010101010000010100010110110010000000000000000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000101110001101100000101010101101100100000000000000000000000000000000000000000000000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100011111000001010101011011001000000000000000000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000111110000010100010110110000000000000100000000000000000000000000000000000000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110001111100000101000101101100000000000001000000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101101111000001010101011011000000000000010000000000000000000000000000000000000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011011110000010101010110110000000000000100000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110111100000101000101101100100000000001000000000000000000000000000000000000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101101111000001010001011011001000000000010000000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001011110000010101010110110010000000000100000000000000000000000000000000000000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010111100000101010101101100100000000001000000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100101111000001010001011011000000000000000000000000100000000000000000000000000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001011110000010100010110110000000000000000000000001000000000000000000000000000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100111100000101010101101100000000000000000000000010000000000000000000000000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101001111000001010101011011000000000000000000000000100000000000000000000000000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010011110000010100010110110010000000000000000000001000000000000000000000000000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110100111100000101000101101100100000000000000000000010000000000000000000000000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100001111000001010101011011001000000000000000000000100000000000000000000000000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000011110000010101010110110010000000000000000000001000000000000000000000000000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000111100000101000101101100000000000001000000000010000000000000000000000000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100001111000001010001011011000000000000010000000000100000000000000000000000000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011101110000010101010110110000000000000100000000001000000000000000000000000000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111011100000101010101101100000000000001000000000010000000000000000000000000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101110111000001010001011011001000000000010000000000100000000000000000000000000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011101110000010100010110110010000000000100000000001000000000000000000000000000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011011100000101010101101100100000000001000000000010000000000000000000000000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100110111000001010101011011001000000000010000000000100000000000000000000000000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001101110000010100010110110000000000000000000000000000000000010000000000000000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011011100000101000101101100000000000000000000000000000000000100000000000000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101010111000001010101011011000000000000000000000000000000000001000000000000000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010101110000010101010110110000000000000000000000000000000000010000000000000000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110101011100000101000101101100100000000000000000000000000000000100000000000000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101010111000001010001011011001000000000000000000000000000000001000000000000000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000101110000010101010110110010000000000000000000000000000000010000000000000000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110001011100000101010101101100100000000000000000000000000000000100000000000000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100010111000001010001011011000000000000010000000000000000000001000000000000000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000101110000010100010110110000000000000100000000000000000000010000000000000000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110011100000101010101101100000000000001000000000000000000000100000000000000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101100111000001010101011011000000000000010000000000000000000001000000000000000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011001110000010100010110110010000000000100000000000000000000010000000000000000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110011100000101000101101100100000000001000000000000000000000100000000000000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100100111000001010101011011001000000000010000000000000000000001000000000000000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001001110000010101010110110010000000000100000000000000000000010000000000000000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010011100000101000101101100000000000000000000000010000000000100000000000000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100100111000001010001011011000000000000000000000000100000000001000000000000000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010001110000010101010110110000000000000000000000001000000000010000000000000000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100011100000101010101101100000000000000000000000010000000000100000000000000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101000111000001010001011011001000000000000000000000100000000001000000000000000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010001110000010100010110110010000000000000000000001000000000010000000000000000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000011100000101010101101100100000000000000000000010000000000100000000000000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100000111000001010101011011001000000000000000000000100000000001000000000000000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000001110000010100010110110000000000000100000000001000000000010000000000000000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000011100000101000101101100000000000001000000000010000000000100000000000000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101111011000001010101011011000000000000010000000000100000000001000000000000000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011110110000010101010110110000000000000100000000001000000000010000000000000000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110111101100000101000101101100100000000001000000000010000000000100000000000000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101111011000001010001011011001000000000010000000000100000000001000000000000000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001110110000010101010110110010000000000100000000001000000000010000000000000000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011101100000101010101101100100000000001000000000010000000000100000000000000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100111011000001010001011011000000000000000000000000000000000000000000000010000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001110110000010100010110110000000000000000000000000000000000000000000000100000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110101101100000101010101101100000000000000000000000000000000000000000000001000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101011011000001010101011011000000000000000000000000000000000000000000000010000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010110110000010100010110110010000000000000000000000000000000000000000000100000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110101101100000101000101101100100000000000000000000000000000000000000000001000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100011011000001010101011011001000000000000000000000000000000000000000000010000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000110110000010101010110110010000000000000000000000000000000000000000000100000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001101100000101000101101100000000000001000000000000000000000000000000001000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100011011000001010001011011000000000000010000000000000000000000000000000010000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011010110000010101010110110000000000000100000000000000000000000000000000100000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110101100000101010101101100000000000001000000000000000000000000000000001000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101101011000001010001011011001000000000010000000000000000000000000000000010000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011010110000010100010110110010000000000100000000000000000000000000000000100000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010101100000101010101101100100000000001000000000000000000000000000000001000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100101011000001010101011011001000000000010000000000000000000000000000000010000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001010110000010100010110110000000000000000000000001000000000000000000000100000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010101100000101000101101100000000000000000000000010000000000000000000001000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101001011000001010101011011000000000000000000000000100000000000000000000010000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010010110000010101010110110000000000000000000000001000000000000000000000100000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100101100000101000101101100100000000000000000000010000000000000000000001000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101001011000001010001011011001000000000000000000000100000000000000000000010000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000010110000010101010110110010000000000000000000001000000000000000000000100000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000101100000101010101101100100000000000000000000010000000000000000000001000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100001011000001010001011011000000000000010000000000100000000000000000000010000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000010110000010100010110110000000000000100000000001000000000000000000000100000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111001100000101010101101100000000000001000000000010000000000000000000001000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101110011000001010101011011000000000000010000000000100000000000000000000010000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011100110000010100010110110010000000000100000000001000000000000000000000100000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111001100000101000101101100100000000001000000000010000000000000000000001000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100110011000001010101011011001000000000010000000000100000000000000000000010000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001100110000010101010110110010000000000100000000001000000000000000000000100000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011001100000101000101101100000000000000000000000000000000000100000000001000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100110011000001010001011011000000000000000000000000000000000001000000000010000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010100110000010101010110110000000000000000000000000000000000010000000000100000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110101001100000101010101101100000000000000000000000000000000000100000000001000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101010011000001010001011011001000000000000000000000000000000001000000000010000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010100110000010100010110110010000000000000000000000000000000010000000000100000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001001100000101010101101100100000000000000000000000000000000100000000001000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100010011000001010101011011001000000000000000000000000000000001000000000010000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000100110000010100010110110000000000000100000000000000000000010000000000100000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001001100000101000101101100000000000001000000000000000000000100000000001000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101100011000001010101011011000000000000010000000000000000000001000000000010000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011000110000010101010110110000000000000100000000000000000000010000000000100000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110001100000101000101101100100000000001000000000000000000000100000000001000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101100011000001010001011011001000000000010000000000000000000001000000000010000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001000110000010101010110110010000000000100000000000000000000010000000000100000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110010001100000101010101101100100000000001000000000000000000000100000000001000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100100011000001010001011011000000000000000000000000100000000001000000000010000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001000110000010100010110110000000000000000000000001000000000010000000000100000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100001100000101010101101100000000000000000000000010000000000100000000001000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101000011000001010101011011000000000000000000000000100000000001000000000010000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010000110000010100010110110010000000000000000000001000000000010000000000100000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100001100000101000101101100100000000000000000000010000000000100000000001000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100000011000001010101011011001000000000000000000000100000000001000000000010000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000000110000010101010110110010000000000000000000001000000000010000000000100000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000001100000101000101101100000000000001000000000010000000000100000000001000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100000011000001010001011011000000000000010000000000100000000001000000000010000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011111010000010101010110110000000000000100000000001000000000010000000000100000001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111110100000101010101101100000000000001000000000010000000000100000000001000000010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101111101000001010001011011001000000000010000000000100000000001000000000010000000101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011111010000010100010110110010000000000100000000001000000000010000000000100000001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110011110100000101010101101100100000000001000000000010000000000100000000001000000010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100111101000001010101011011001000000000010000000000100000000001000000000010000000101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001111010000010100010110110000000000000000000000000000000000000000000000000001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110011110100000101000101101100000000000000000000000000000000000000000000000000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101011101000001010101011011000000000000000000000000000000000000000000000000000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010111010000010101010110110000000000000000000000000000000000000000000000000001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110101110100000101000101101100100000000000000000000000000000000000000000000000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101011101000001010001011011001000000000000000000000000000000000000000000000000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000111010000010101010110110010000000000000000000000000000000000000000000000001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001110100000101010101101100100000000000000000000000000000000000000000000000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100011101000001010001011011000000000000010000000000000000000000000000000000000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000111010000010100010110110000000000000100000000000000000000000000000000000001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110110100000101010101101100000000000001000000000000000000000000000000000000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101101101000001010101011011000000000000010000000000000000000000000000000000000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011011010000010100010110110010000000000100000000000000000000000000000000000001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110110100000101000101101100100000000001000000000000000000000000000000000000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100101101000001010101011011001000000000010000000000000000000000000000000000000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001011010000010101010110110010000000000100000000000000000000000000000000000001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110010110100000101000101101100000000000000000000000010000000000000000000000000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100101101000001010001011011000000000000000000000000100000000000000000000000000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010011010000010101010110110000000000000000000000001000000000000000000000000001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100110100000101010101101100000000000000000000000010000000000000000000000000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101001101000001010001011011001000000000000000000000100000000000000000000000000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010011010000010100010110110010000000000000000000001000000000000000000000000001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000110100000101010101101100100000000000000000000010000000000000000000000000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100001101000001010101011011001000000000000000000000100000000000000000000000000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000011010000010100010110110000000000000100000000001000000000000000000000000001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000110100000101000101101100000000000001000000000010000000000000000000000000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101110101000001010101011011000000000000010000000000100000000000000000000000000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000100000000000000000000000000000000000111011101010000010101010110110000000000000100000000001000000000000000000000000001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010001000000000000000000000000000000000001110111010100000101000101101100100000000001000000000010000000000000000000000000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100010000000000000000000000000000000000011101110101000001010001011011001000000000010000000000100000000000000000000000000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000000000000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000000000000000000111001101010000010101010110110010000000000100000000001000000000000000000000000001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000000000000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000000000000000001110011010100000101010101101100100000000001000000000010000000000000000000000000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001000000000000011100110101000001010001011011000000000000000000000000000000000001000000000000000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010000000000000111001101010000010100010110110000000000000000000000000000000000010000000000000001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100000000000001110101010100000101010101101100000000000000000000000000000000000100000000000000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001000000000000011101010101000001010101011011000000000000000000000000000000000001000000000000000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010000000000000111010101010000010100010110110010000000000000000000000000000000010000000000000001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100000000000001110101010100000101000101101100100000000000000000000000000000000100000000000000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001000000000000011100010101000001010101011011001000000000000000000000000000000001000000000000000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010000000000000111000101010000010101010110110010000000000000000000000000000000010000000000000001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100000000000001110001010100000101000101101100000000000001000000000000000000000100000000000000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001000000000000011100010101000001010001011011000000000000010000000000000000000001000000000000000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010000000000000111011001010000010101010110110000000000000100000000000000000000010000000000000001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100000000000001110110010100000101010101101100000000000001000000000000000000000100000000000000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001000000000000011101100101000001010001011011001000000000010000000000000000000001000000000000000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111011001010000010100010110110010000000000100000000000000000000010000000000000001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100100000000001110010010100000101010101101100100000000001000000000000000000000100000000000000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001000000000011100100101000001010101011011001000000000010000000000000000000001000000000000000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111001001010000010100010110110000000000000000000000001000000000010000000000000001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110010010100000101000101101100000000000000000000000010000000000100000000000000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011101000101000001010101011011000000000000000000000000100000000001000000000000000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111010001010000010101010110110000000000000000000000001000000000010000000000000001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110100010100000101000101101100100000000000000000000010000000000100000000000000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011101000101000001010001011011001000000000000000000000100000000001000000000000000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111000001010000010101010110110010000000000000000000001000000000010000000000000001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100100000000001110000010100000101010101101100100000000000000000000010000000000100000000000000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001000000000011100000101000001010001011011000000000000010000000000100000000001000000000000000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111000001010000010100010110110000000000000100000000001000000000010000000000000001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100100000000001110111100100000101010101101100000000000001000000000010000000000100000000000000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001000000000011101111001000001010101011011000000000000010000000000100000000001000000000000000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111011110010000010100010110110010000000000100000000001000000000010000000000000001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110111100100000101000101101100100000000001000000000010000000000100000000000000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011100111001000001010101011011001000000000010000000000100000000001000000000000000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111001110010000010101010110110010000000000100000000001000000000010000000000000001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110011100100000101000101101100000000000000000000000000000000000000000000001000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011100111001000001010001011011000000000000000000000000000000000000000000000010000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111010110010000010101010110110000000000000000000000000000000000000000000000100001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110101100100000101010101101100000000000000000000000000000000000000000000001000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011101011001000001010001011011001000000000000000000000000000000000000000000010000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111010110010000010100010110110010000000000000000000000000000000000000000000100001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110001100100000101010101101100100000000000000000000000000000000000000000001000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011100011001000001010101011011001000000000000000000000000000000000000000000010000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111000110010000010100010110110000000000000100000000000000000000000000000000100001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110001100100000101000101101100000000000001000000000000000000000000000000001000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011101101001000001010101011011000000000000010000000000000000000000000000000010000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111011010010000010101010110110000000000000100000000000000000000000000000000100001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110110100100000101000101101100100000000001000000000000000000000000000000001000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011101101001000001010001011011001000000000010000000000000000000000000000000010000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111001010010000010101010110110010000000000100000000000000000000000000000000100001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110010100100000101010101101100100000000001000000000000000000000000000000001000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011100101001000001010001011011000000000000000000000000100000000000000000000010000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111001010010000010100010110110000000000000000000000001000000000000000000000100001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110100100100000101010101101100000000000000000000000010000000000000000000001000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011101001001000001010101011011000000000000000000000000100000000000000000000010000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111010010010000010100010110110010000000000000000000001000000000000000000000100001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110100100100000101000101101100100000000000000000000010000000000000000000001000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011100001001000001010101011011001000000000000000000000100000000000000000000010000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100100000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001001000000010011000000000111000010010000010101010110110010000000000000000000001000000000000000000000100001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001001000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010010000000100110000000001110000100100000101000101101100000000000001000000000010000000000000000000001000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010010000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100100000001001100000000011100001001000001010001011011000000000000010000000000100000000000000000000010000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100100000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001001000000010011000000000111011100010000010101010110110000000000000100000000001000000000000000000000100001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001001000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010010000000100110000000001110111000100000101010101101100000000000001000000000010000000000000000000001000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010010000000100111000000000101110000000000000000000000000000000000000000000000000000000100010000000000100100000001001110000000011101110001000001010001011011001000000000010000000000100000000000000000000010000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100100000100100000001001110001000001011100000000000000000000000000000000000000000000000000000001000101001000001001000000010011100010000111011100010000010100010110110010000000000100000000001000000000000000000000100001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001000001001000000010011100010000010111000000000000000000000000000000000000000000000000000000010001010010000010010000000100111000100001110011000100000101010101101100100000000001000000000010000000000000000000001000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000010010000000100111000100000001110000000000000000000000000000000000000000000000000000000100010100100000100100000001001110001000011100110001000001010101011011001000000000010000000000100000000000000000000010000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100100000100100000001001110001000000011100000000000000000000000000000000000000000000000000001001000101001000001001000000010011100010000111001100010000010100010110110000000000000000000000000000000000010000000000100001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001001000000010011100010000000111000000000000000000000000000000000000000000000000000000010011010010000010010000000100111000100001110011000100000101000101101100000000000000000000000000000000000100000000001000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000010010000000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000100100000001001110101000011101010001000001010101011011000000000000000000000000000000000001000000000010000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000100100000001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001000000010011101010000111010100010000010101010110110000000000000000000000000000000000010000000000100001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001001000000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000010010000000100111010100001110101000100000101000101101100100000000000000000000000000000000100000000001000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000010010000000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000100100000001001110101000011101010001000001010001011011001000000000000000000000000000000001000000000010000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100100000100100000001001110101000000011100000000000000000000000000000000000000000000000000000001000101001000001001000000010011101010000111000100010000010101010110110010000000000000000000000000000000010000000000100001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001000001001100000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010000010011000000100111010100001110001000100000101010101101100100000000000000000000000000000000100000000001000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000010011010000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000100110100001001110101000011100010001000001010001011011000000000000010000000000000000000001000000000010000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001101000010011101010000111000100010000010100010110110000000000000100000000000000000000010000000000100001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000010011010000100111010100001110110000100000101010101101100000000000001000000000000000000000100000000001000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000010011010000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000100110100001001110101000011101100001000001010101011011000000000000010000000000000000000001000000000010000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001101000010011101010000111011000010000010100010110110010000000000100000000000000000000010000000000100001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000010011010000100111010100001110110000100000101000101101100100000000001000000000000000000000100000000001000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000010011010000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000100110100001001110101000011100100001000001010101011011001000000000010000000000000000000001000000000010000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001101000010011101010000111001000010000010101010110110010000000000100000000000000000000010000000000100001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000010011010000100111010100001110010000100000101000101101100000000000000000000000010000000000100000000001000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000011011010000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000110110100001001110101000011100100001000001010001011011000000000000000000000000100000000001000000000010000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100100000110110100001001110101000000011100000000000000000000000000000000000000000000000000000001000101001000001101101000010011101010000111010000010000010101010110110000000000000000000000001000000000010000000000100001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001000001101101000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010000011011010000100111010100001110100000100000101010101101100000000000000000000000010000000000100000000001000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000011011010000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000110110100001001110101000011101000001000001010001011011001000000000000000000000100000000001000000000010000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100100000110110100001001110101000000011100000000000000000000000000000000000000000000000000000001000101001000001101101000010011101010000111010000010000010100010110110010000000000000000000001000000000010000000000100001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001010001101101000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010100011011010000100111010100001110000000100000101010101101100100000000000000000000010000000000100000000001000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010100011011011000100111010100000001110000000000000000000000000000000000000000000000000000000100010100101000110110110001001110101000011100000001000001010101011011001000000000000000000000100000000001000000000010000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100101000110110110001001110101000000011100000000000000000000000000000000000000000000000000000001001101001010001101101100010011101010000111000000010000010100010110110000000000000100000000001000000000010000000000100001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001010001101111100010011101010000000111000000000000000000000000000000000000000000000000000000010011010010100011011111000100111010100001110000000100000101000101101100000000000001000000000010000000000100000000001000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111011010100111011111000100111010100000001110000000000000000000000000000000000000000000000000000000100110110101001110111110001001110101000011101111110000001010101011011000000000000010000000000100000000001000000000010000100101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110110101011110111110001001110101000000011100000000000000000000000000000000000000000000000000000001001101101010111101111100010011101010000111011111100000010101010110110000000000000100000000001000000000010000000000100001001011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101101110111101111100010011111010000000111000000000000000000000000000000000000000000000000000000010011011011101111011111000100111110100001110111111000000101000101101100100000000001000000000010000000000100000000001000010010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111011011101111011111000100111110100000001110000000000000000000000000000000000000000000000000000000100110110111011110111110001001111101000011101111110000001010001011011001000000000010000000000100000000001000000000010000100101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110110111011110111110001001111101000000011100000000000000000000000000000000000000000000000000000001001101101110111101111100010011111010000111001111100000010101010110110010000000000100000000001000000000010000000000100001001010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101101110111101111100010011111010000000111000000000000000000000000000000000000000000000000000000010001011011101111011111000100111110100001110011111000000101010101101100100000000001000000000010000000000100000000001000010010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101011111101111011111000100111111100000001110000000000000000000000000000000000000000000000000000000100010111111011110111110001001111111000011100111110000001010001011011000000000000000000000000000000000000000000000000000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010111111011110111111001001111111000000011100000000000000000000000000000000000000000000000000000001000101111110111101111110010011111110000111001111100000010100010110110000000000000000000000000000000000000000000000000000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111110111101111110010011111110000000111000000000000000000000000000000000000000000000000000000010001111111101111011111100100111111100001110101111000000101010101101100000000000000000000000000000000000000000000000000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111101111011111100100111111100000001110000000000000000000000000000000000000000000000000000000100111111111011110111111001001111111000011101011110000001010101011011000000000000000000000000000000000000000000000000000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111011110111111001001111111000000011100000000000000000000000000000000000000000000000000000001001111111110111101111110010011111110000111010111100000010100010110110010000000000000000000000000000000000000000000000000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111110111101111110010011111110000000111000000000000000000000000000000000000000000000000000000010011111111101111011111100100111111100001110101111000000101000101101100100000000000000000000000000000000000000000000000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111101111011111100100111111100000001110000000000000000000000000000000000000000000000000000000100011111111011110111111001001111111000011100011110000001010101011011001000000000000000000000000000000000000000000000000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111011110111111001001111111000000011100000000000000000000000000000000000000000000000000000001000111111110111101111110010011111110000111000111100000010101010110110010000000000000000000000000000000000000000000000000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111110111101111110011011111110000000111000000000000000000000000000000000000000000000000000000010001111111101111011111100110111111100001110001111000000101000101101100000000000001000000000000000000000000000000000000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111101111011111100110111111100000001110000000000000000000000000000000000000000000000000000000100011111111011110111111001101111111000011100011110000001010001011011000000000000010000000000000000000000000000000000000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111011110111111001101111111000000011100000000000000000000000000000000000000000000000000000001000111111110111101111110011011111110000111011011100000010101010110110000000000000100000000000000000000000000000000000000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111110111101111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111101111011111100110111111100001110110111000000101010101101100000000000001000000000000000000000000000000000000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111101111011111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111011110111111001101111111000011101101110000001010001011011001000000000010000000000000000000000000000000000000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111011011100000010100010110110010000000000100000000000000000000000000000000000000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110010111000000101010101101100100000000001000000000000000000000000000000000000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111001101111111000011100101110000001010101011011001000000000010000000000000000000000000000000000000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111001011100000010100010110110000000000000000000000001000000000000000000000000000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110010111000000101000101101100000000000000000000000010000000000000000000000000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111001101111111000011101001110000001010101011011000000000000000000000000100000000000000000000000000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111110011011111110000111010011100000010101010110110000000000000000000000001000000000000000000000000000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111100110111111100001110100111000000101000101101100100000000000000000000010000000000000000000000000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111001101111111000011101001110000001010001011011001000000000000000000000100000000000000000000000000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111110011011111110000111000011100000010101010110110010000000000000000000001000000000000000000000000000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110000111000000101010101101100100000000000000000000010000000000000000000000000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111001101111111000011100001110000001010001011011000000000000010000000000100000000000000000000000000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111000011100000010100010110110000000000000100000000001000000000000000000000000000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110111011000000101010101101100000000000001000000000010000000000000000000000000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111001101111111000011101110110000001010101011011000000000000010000000000100000000000000000000000000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111011101100000010100010110110010000000000100000000001000000000000000000000000000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110111011000000101000101101100100000000001000000000010000000000000000000000000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111110110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101101111111000011100110110000001010101011011001000000000010000000000100000000000000000000000000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111101101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011011111110000111001101100000010101010110110010000000000100000000001000000000000000000000000000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111110110111111100001110011011000000101000101101100000000000000000000000000000000000100000000000000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111110110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111101101111111000011100110110000001010001011011000000000000000000000000000000000001000000000000000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111101101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011011111110000111010101100000010101010110110000000000000000000000000000000000010000000000000000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110110111111100001110101011000000101010101101100000000000000000000000000000000000100000000000000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111110111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111101111111111000011101010110000001010001011011001000000000000000000000000000000001000000000000000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111101111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111011111111110000111010101100000010100010110110010000000000000000000000000000000010000000000000000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111110111111111100001110001011000000101010101101100100000000000000000000000000000000100000000000000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111110111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101111111111000011100010110000001010101011011001000000000000000000000000000000001000000000000000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111101111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111011111111110000111000101100000010100010110110000000000000100000000000000000000010000000000000000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110111111111100001110001011000000101000101101100000000000001000000000000000000000100000000000000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111110111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101111111111000011101100110000001010101011011000000000000010000000000000000000001000000000000000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111101111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011111111110000111011001100000010101010110110000000000000100000000000000000000010000000000000000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110111111111100001110110011000000101000101101100100000000001000000000000000000000100000000000000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101100110000001010001011011001000000000010000000000000000000001000000000000000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001001100000010101010110110010000000000100000000000000000000010000000000000000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010011000000101010101101100100000000001000000000000000000000100000000000000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100100110000001010001011011000000000000000000000000100000000001000000000000000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001001100000010100010110110000000000000000000000001000000000010000000000000000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100011000000101010101101100000000000000000000000010000000000100000000000000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101000110000001010101011011000000000000000000000000100000000001000000000000000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010001100000010100010110110010000000000000000000001000000000010000000000000000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100011000000101000101101100100000000000000000000010000000000100000000000000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000110000001010101011011001000000000000000000000100000000001000000000000000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000001100000010101010110110010000000000000000000001000000000010000000000000000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000011000000101000101101100000000000001000000000010000000000100000000000000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000110000001010001011011000000000000010000000000100000000001000000000000000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011110100000010101010110110000000000000100000000001000000000010000000000000000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111101000000101010101101100000000000001000000000010000000000100000000000000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101111010000001010001011011001000000000010000000000100000000001000000000000000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011110100000010100010110110010000000000100000000001000000000010000000000000000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011101000000101010101101100100000000001000000000010000000000100000000000000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100111010000001010101011011001000000000010000000000100000000001000000000000000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001110100000010100010110110000000000000000000000000000000000000000000000100000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011101000000101000101101100000000000000000000000000000000000000000000001000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101011010000001010101011011000000000000000000000000000000000000000000000010000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010110100000010101010110110000000000000000000000000000000000000000000000100000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101101000000101000101101100100000000000000000000000000000000000000000001000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101011010000001010001011011001000000000000000000000000000000000000000000010000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000110100000010101010110110010000000000000000000000000000000000000000000100000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001101000000101010101101100100000000000000000000000000000000000000000001000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100011010000001010001011011000000000000010000000000000000000000000000000010000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000110100000010100010110110000000000000100000000000000000000000000000000100000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110101000000101010101101100000000000001000000000000000000000000000000001000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101101010000001010101011011000000000000010000000000000000000000000000000010000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011010100000010100010110110010000000000100000000000000000000000000000000100000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110101000000101000101101100100000000001000000000000000000000000000000001000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100101010000001010101011011001000000000010000000000000000000000000000000010000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001010100000010101010110110010000000000100000000000000000000000000000000100000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010101000000101000101101100000000000000000000000010000000000000000000001000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100101010000001010001011011000000000000000000000000100000000000000000000010000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010010100000010101010110110000000000000000000000001000000000000000000000100000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100101000000101010101101100000000000000000000000010000000000000000000001000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101001010000001010001011011001000000000000000000000100000000000000000000010000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010010100000010100010110110010000000000000000000001000000000000000000000100000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000101000000101010101101100100000000000000000000010000000000000000000001000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100001010000001010101011011001000000000000000000000100000000000000000000010000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000010100000010100010110110000000000000100000000001000000000000000000000100000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000101000000101000101101100000000000001000000000010000000000000000000001000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101110010000001010101011011000000000000010000000000100000000000000000000010000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011100100000010101010110110000000000000100000000001000000000000000000000100000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111001000000101000101101100100000000001000000000010000000000000000000001000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101110010000001010001011011001000000000010000000000100000000000000000000010000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100100000010101010110110010000000000100000000001000000000000000000000100000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011001000000101010101101100100000000001000000000010000000000000000000001000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110010000001010001011011000000000000000000000000000000000001000000000010000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100100000010100010110110000000000000000000000000000000000010000000000100000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101001000000101010101101100000000000000000000000000000000000100000000001000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101010010000001010101011011000000000000000000000000000000000001000000000010000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010100100000010100010110110010000000000000000000000000000000010000000000100000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101001000000101000101101100100000000000000000000000000000000100000000001000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100010010000001010101011011001000000000000000000000000000000001000000000010000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000100100000010101010110110010000000000000000000000000000000010000000000100000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001001000000101000101101100000000000001000000000000000000000100000000001000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100010010000001010001011011000000000000010000000000000000000001000000000010000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011000100000010101010110110000000000000100000000000000000000010000000000100000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110001000000101010101101100000000000001000000000000000000000100000000001000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101100010000001010001011011001000000000010000000000000000000001000000000010000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011000100000010100010110110010000000000100000000000000000000010000000000100000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010001000000101010101101100100000000001000000000000000000000100000000001000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100100010000001010101011011001000000000010000000000000000000001000000000010000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001000100000010100010110110000000000000000000000001000000000010000000000100000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010001000000101000101101100000000000000000000000010000000000100000000001000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000010000001010101011011000000000000000000000000100000000001000000000010000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010000100000010101010110110000000000000000000000001000000000010000000000100000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100001000000101000101101100100000000000000000000010000000000100000000001000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000010000001010001011011001000000000000000000000100000000001000000000010000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000000100000010101010110110010000000000000000000001000000000010000000000100000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000001000000101010101101100100000000000000000000010000000000100000000001000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000010000001010001011011000000000000010000000000100000000001000000000010000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000000100000010100010110110000000000000100000000001000000000010000000000100000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111110000000101010101101100000000000001000000000010000000000100000000001000001010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101111100000001010101011011000000000000010000000000100000000001000000000010000010101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011111000000010100010110110010000000000100000000001000000000010000000000100000101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111110000000101000101101100100000000001000000000010000000000100000000001000001010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100111100000001010101011011001000000000010000000000100000000001000000000010000010101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001111000000010101010110110010000000000100000000001000000000010000000000100000101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011110000000101000101101100000000000000000000000000000000000000000000000000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100111100000001010001011011000000000000000000000000000000000000000000000000000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010111000000010101010110110000000000000000000000000000000000000000000000000001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101110000000101010101101100000000000000000000000000000000000000000000000000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101011100000001010001011011001000000000000000000000000000000000000000000000000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010111000000010100010110110010000000000000000000000000000000000000000000000001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001110000000101010101101100100000000000000000000000000000000000000000000000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100011100000001010101011011001000000000000000000000000000000000000000000000000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000111000000010100010110110000000000000100000000000000000000000000000000000001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001110000000101000101101100000000000001000000000000000000000000000000000000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101101100000001010101011011000000000000010000000000000000000000000000000000000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011011000000010101010110110000000000000100000000000000000000000000000000000001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110110000000101000101101100100000000001000000000000000000000000000000000000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101101100000001010001011011001000000000010000000000000000000000000000000000000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001011000000010101010110110010000000000100000000000000000000000000000000000001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010110000000101010101101100100000000001000000000000000000000000000000000000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100101100000001010001011011000000000000000000000000100000000000000000000000000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001011000000010100010110110000000000000000000000001000000000000000000000000001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100110000000101010101101100000000000000000000000010000000000000000000000000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101001100000001010101011011000000000000000000000000100000000000000000000000000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010011000000010100010110110010000000000000000000001000000000000000000000000001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100110000000101000101101100100000000000000000000010000000000000000000000000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100001100000001010101011011001000000000000000000000100000000000000000000000000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000011000000010101010110110010000000000000000000001000000000000000000000000001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000110000000101000101101100000000000001000000000010000000000000000000000000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100001100000001010001011011000000000000010000000000100000000000000000000000000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011101000000010101010110110000000000000100000000001000000000000000000000000001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111010000000101010101101100000000000001000000000010000000000000000000000000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101110100000001010001011011001000000000010000000000100000000000000000000000000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011101000000010100010110110010000000000100000000001000000000000000000000000001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011010000000101010101101100100000000001000000000010000000000000000000000000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110100000001010101011011001000000000010000000000100000000000000000000000000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001101000000010100010110110000000000000000000000000000000000010000000000000001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011010000000101000101101100000000000000000000000000000000000100000000000000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101010100000001010101011011000000000000000000000000000000000001000000000000000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010101000000010101010110110000000000000000000000000000000000010000000000000001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101010000000101000101101100100000000000000000000000000000000100000000000000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101010100000001010001011011001000000000000000000000000000000001000000000000000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000101000000010101010110110010000000000000000000000000000000010000000000000001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001010000000101010101101100100000000000000000000000000000000100000000000000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100010100000001010001011011000000000000010000000000000000000001000000000000000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000101000000010100010110110000000000000100000000000000000000010000000000000001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110010000000101010101101100000000000001000000000000000000000100000000000000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101100100000001010101011011000000000000010000000000000000000001000000000000000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011001000000010100010110110010000000000100000000000000000000010000000000000001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110010000000101000101101100100000000001000000000000000000000100000000000000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100100100000001010101011011001000000000010000000000000000000001000000000000000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001001000000010101010110110010000000000100000000000000000000010000000000000001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010010000000101000101101100000000000000000000000010000000000100000000000000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100100100000001010001011011000000000000000000000000100000000001000000000000000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010001000000010101010110110000000000000000000000001000000000010000000000000001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100010000000101010101101100000000000000000000000010000000000100000000000000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101000100000001010001011011001000000000000000000000100000000001000000000000000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010001000000010100010110110010000000000000000000001000000000010000000000000001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000010000000101010101101100100000000000000000000010000000000100000000000000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000100000001010101011011001000000000000000000000100000000001000000000000000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000001000000010100010110110000000000000100000000001000000000010000000000000001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000010000000101000101101100000000000001000000000010000000000100000000000000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101111000000001010101011011000000000000010000000000100000000001000000000000000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011110000000010101010110110000000000000100000000001000000000010000000000000001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111100000000101000101101100100000000001000000000010000000000100000000000000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101111000000001010001011011001000000000010000000000100000000001000000000000000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001110000000010101010110110010000000000100000000001000000000010000000000000001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011100000000101010101101100100000000001000000000010000000000100000000000000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100111000000001010001011011000000000000000000000000000000000000000000000010000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001110000000010100010110110000000000000000000000000000000000000000000000100001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101100000000101010101101100000000000000000000000000000000000000000000001000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101011000000001010101011011000000000000000000000000000000000000000000000010000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010110000000010100010110110010000000000000000000000000000000000000000000100001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101100000000101000101101100100000000000000000000000000000000000000000001000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100011000000001010101011011001000000000000000000000000000000000000000000010000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000110000000010101010110110010000000000000000000000000000000000000000000100001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001100000000101000101101100000000000001000000000000000000000000000000001000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100011000000001010001011011000000000000010000000000000000000000000000000010000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011010000000010101010110110000000000000100000000000000000000000000000000100001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110100000000101010101101100000000000001000000000000000000000000000000001000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101101000000001010001011011001000000000010000000000000000000000000000000010000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011010000000010100010110110010000000000100000000000000000000000000000000100001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010100000000101010101101100100000000001000000000000000000000000000000001000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100101000000001010101011011001000000000010000000000000000000000000000000010000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001010000000010100010110110000000000000000000000001000000000000000000000100001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010100000000101000101101100000000000000000000000010000000000000000000001000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101001000000001010101011011000000000000000000000000100000000000000000000010000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010010000000010101010110110000000000000000000000001000000000000000000000100001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100100000000101000101101100100000000000000000000010000000000000000000001000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101001000000001010001011011001000000000000000000000100000000000000000000010000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000010000000010101010110110010000000000000000000001000000000000000000000100001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000100000000101010101101100100000000000000000000010000000000000000000001000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100001000000001010001011011000000000000010000000000100000000000000000000010000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000010000000010100010110110000000000000100000000001000000000000000000000100001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111000000000101010101101100000000000001000000000010000000000000000000001000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101110000000001010101011011000000000000010000000000100000000000000000000010000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011100000000010100010110110010000000000100000000001000000000000000000000100001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111000000000101000101101100100000000001000000000010000000000000000000001000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110000000001010101011011001000000000010000000000100000000000000000000010000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100000000010101010110110010000000000100000000001000000000000000000000100001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000000000101000101101100000000000000000000000000000000000100000000001000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110000000001010001011011000000000000000000000000000000000001000000000010000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010100000000010101010110110000000000000000000000000000000000010000000000100001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101000000000101010101101100000000000000000000000000000000000100000000001000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101010000000001010001011011001000000000000000000000000000000001000000000010000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010100000000010100010110110010000000000000000000000000000000010000000000100001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001000000000101010101101100100000000000000000000000000000000100000000001000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100010000000001010101011011001000000000000000000000000000000001000000000010000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000100000000010100010110110000000000000100000000000000000000010000000000100001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001000000000101000101101100000000000001000000000000000000000100000000001000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101100000000001010101011011000000000000010000000000000000000001000000000010000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011000000000010101010110110000000000000100000000000000000000010000000000100001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110000000000101000101101100100000000001000000000000000000000100000000001000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101100000000001010001011011001000000000010000000000000000000001000000000010000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001000000000010101010110110010000000000100000000000000000000010000000000100001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010000000000101010101101100100000000001000000000000000000000100000000001000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100100000000001010001011011000000000000000000000000100000000001000000000010000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001000000000010100010110110000000000000000000000001000000000010000000000100001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100000000000101010101101100000000000000000000000010000000000100000000001000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000000000001010101011011000000000000000000000000100000000001000000000010000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010000000000010100010110110010000000000000000000001000000000010000000000100001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100000000000101000101101100100000000000000000000010000000000100000000001000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000000000001010101011011001000000000000000000000100000000001000000000010000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000000000000010101010110110010000000000000000000001000000000010000000000100001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000000000000101000101101100000000000001000000000010000000000100000000001000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000000000001010001011011000000000000010000000000100000000001000000000010000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000010111010110000000010101010110110000000000000100000000001000000000010000000000100001101010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000101110101001000000101010101101100000000000001000000000010000000000100000000001000011010111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000001011101011110000001010001011011001000000000010000000000100000000001000000000010000110101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000010111010101010000010100010110110010000000000100000000001000000000010000000000100001101011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000101110001101100000101010101101100100000000001000000000010000000000100000000001000011010101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100011111000001010101011011001000000000010000000000100000000001000000000010000110101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000111110000010100010110110000000000000000000000000000000000000000000000000000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001111100000101000101101100000000000000000000000000000000000000000000000000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101101111000001010101011011000000000000000000000000000000000000000000000000000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011011110000010101010110110000000000000000000000000000000000000000000000000000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110111100000101000101101100100000000000000000000000000000000000000000000000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101101111000001010001011011001000000000000000000000000000000000000000000000000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001011110000010101010110110010000000000000000000000000000000000000000000000000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110010111100000101010101101100100000000000000000000000000000000000000000000000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100101111000001010001011011000000000000010000000000000000000000000000000000000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001011110000010100010110110000000000000100000000000000000000000000000000000000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100111100000101010101101100000000000001000000000000000000000000000000000000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101001111000001010101011011000000000000010000000000000000000000000000000000000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010011110000010100010110110010000000000100000000000000000000000000000000000000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100111100000101000101101100100000000001000000000000000000000000000000000000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100001111000001010101011011001000000000010000000000000000000000000000000000000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000011110000010101010110110010000000000100000000000000000000000000000000000000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000111100000101000101101100000000000000000000000010000000000000000000000000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100001111000001010001011011000000000000000000000000100000000000000000000000000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011101110000010101010110110000000000000000000000001000000000000000000000000000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110111011100000101010101101100000000000000000000000010000000000000000000000000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101110111000001010001011011001000000000000000000000100000000000000000000000000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011101110000010100010110110010000000000000000000001000000000000000000000000000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011011100000101010101101100100000000000000000000010000000000000000000000000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100110111000001010101011011001000000000000000000000100000000000000000000000000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001101110000010100010110110000000000000100000000001000000000000000000000000000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011011100000101000101101100000000000001000000000010000000000000000000000000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101010111000001010101011011000000000000010000000000100000000000000000000000000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010101110000010101010110110000000000000100000000001000000000000000000000000000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110101011100000101000101101100100000000001000000000010000000000000000000000000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101010111000001010001011011001000000000010000000000100000000000000000000000000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000101110000010101010110110010000000000100000000001000000000000000000000000000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110001011100000101010101101100100000000001000000000010000000000000000000000000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100010111000001010001011011000000000000000000000000000000000001000000000000000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000101110000010100010110110000000000000000000000000000000000010000000000000000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110011100000101010101101100000000000000000000000000000000000100000000000000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101100111000001010101011011000000000000000000000000000000000001000000000000000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011001110000010100010110110010000000000000000000000000000000010000000000000000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110011100000101000101101100100000000000000000000000000000000100000000000000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100100111000001010101011011001000000000000000000000000000000001000000000000000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001001110000010101010110110010000000000000000000000000000000010000000000000000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010011100000101000101101100000000000001000000000000000000000100000000000000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100100111000001010001011011000000000000010000000000000000000001000000000000000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010001110000010101010110110000000000000100000000000000000000010000000000000000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100011100000101010101101100000000000001000000000000000000000100000000000000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101000111000001010001011011001000000000010000000000000000000001000000000000000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010001110000010100010110110010000000000100000000000000000000010000000000000000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000011100000101010101101100100000000001000000000000000000000100000000000000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100000111000001010101011011001000000000010000000000000000000001000000000000000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000001110000010100010110110000000000000000000000001000000000010000000000000000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000011100000101000101101100000000000000000000000010000000000100000000000000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101111011000001010101011011000000000000000000000000100000000001000000000000000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011110110000010101010110110000000000000000000000001000000000010000000000000000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111101100000101000101101100100000000000000000000010000000000100000000000000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101111011000001010001011011001000000000000000000000100000000001000000000000000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001110110000010101010110110010000000000000000000001000000000010000000000000000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011101100000101010101101100100000000000000000000010000000000100000000000000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100111011000001010001011011000000000000010000000000100000000001000000000000000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001110110000010100010110110000000000000100000000001000000000010000000000000000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110101101100000101010101101100000000000001000000000010000000000100000000000000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101011011000001010101011011000000000000010000000000100000000001000000000000000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010110110000010100010110110010000000000100000000001000000000010000000000000000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110101101100000101000101101100100000000001000000000010000000000100000000000000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100011011000001010101011011001000000000010000000000100000000001000000000000000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000110110000010101010110110010000000000100000000001000000000010000000000000000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110001101100000101000101101100000000000000000000000000000000000000000000001000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100011011000001010001011011000000000000000000000000000000000000000000000010000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011010110000010101010110110000000000000000000000000000000000000000000000100000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110101100000101010101101100000000000000000000000000000000000000000000001000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101101011000001010001011011001000000000000000000000000000000000000000000010000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011010110000010100010110110010000000000000000000000000000000000000000000100000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010101100000101010101101100100000000000000000000000000000000000000000001000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100101011000001010101011011001000000000000000000000000000000000000000000010000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001010110000010100010110110000000000000100000000000000000000000000000000100000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110010101100000101000101101100000000000001000000000000000000000000000000001000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101001011000001010101011011000000000000010000000000000000000000000000000010000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010010110000010101010110110000000000000100000000000000000000000000000000100000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100101100000101000101101100100000000001000000000000000000000000000000001000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101001011000001010001011011001000000000010000000000000000000000000000000010000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000010110000010101010110110010000000000100000000000000000000000000000000100000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000101100000101010101101100100000000001000000000000000000000000000000001000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100001011000001010001011011000000000000000000000000100000000000000000000010000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000010110000010100010110110000000000000000000000001000000000000000000000100000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111001100000101010101101100000000000000000000000010000000000000000000001000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101110011000001010101011011000000000000000000000000100000000000000000000010000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011100110000010100010110110010000000000000000000001000000000000000000000100000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110111001100000101000101101100100000000000000000000010000000000000000000001000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100110011000001010101011011001000000000000000000000100000000000000000000010000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001100110000010101010110110010000000000000000000001000000000000000000000100000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110011001100000101000101101100000000000001000000000010000000000000000000001000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100110011000001010001011011000000000000010000000000100000000000000000000010000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010100110000010101010110110000000000000100000000001000000000000000000000100000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110101001100000101010101101100000000000001000000000010000000000000000000001000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101010011000001010001011011001000000000010000000000100000000000000000000010000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010100110000010100010110110010000000000100000000001000000000000000000000100000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001001100000101010101101100100000000001000000000010000000000000000000001000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100010011000001010101011011001000000000010000000000100000000000000000000010000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000100110000010100010110110000000000000000000000000000000000010000000000100000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110001001100000101000101101100000000000000000000000000000000000100000000001000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101100011000001010101011011000000000000000000000000000000000001000000000010000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011000110000010101010110110000000000000000000000000000000000010000000000100000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110001100000101000101101100100000000000000000000000000000000100000000001000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101100011000001010001011011001000000000000000000000000000000001000000000010000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001000110000010101010110110010000000000000000000000000000000010000000000100000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010001100000101010101101100100000000000000000000000000000000100000000001000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100100011000001010001011011000000000000010000000000000000000001000000000010000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001000110000010100010110110000000000000100000000000000000000010000000000100000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100001100000101010101101100000000000001000000000000000000000100000000001000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101000011000001010101011011000000000000010000000000000000000001000000000010000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010000110000010100010110110010000000000100000000000000000000010000000000100000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110100001100000101000101101100100000000001000000000000000000000100000000001000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100000011000001010101011011001000000000010000000000000000000001000000000010000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000000110000010101010110110010000000000100000000000000000000010000000000100000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000001100000101000101101100000000000000000000000010000000000100000000001000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100000011000001010001011011000000000000000000000000100000000001000000000010000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011111010000010101010110110000000000000000000000001000000000010000000000100000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110111110100000101010101101100000000000000000000000010000000000100000000001000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101111101000001010001011011001000000000000000000000100000000001000000000010000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011111010000010100010110110010000000000000000000001000000000010000000000100000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110011110100000101010101101100100000000000000000000010000000000100000000001000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100111101000001010101011011001000000000000000000000100000000001000000000010000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001111010000010100010110110000000000000100000000001000000000010000000000100000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011110100000101000101101100000000000001000000000010000000000100000000001000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101011101000001010101011011000000000000010000000000100000000001000000000010000001101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010111010000010101010110110000000000000100000000001000000000010000000000100000011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110101110100000101000101101100100000000001000000000010000000000100000000001000000110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101011101000001010001011011001000000000010000000000100000000001000000000010000001101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000111010000010101010110110010000000000100000000001000000000010000000000100000011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110001110100000101010101101100100000000001000000000010000000000100000000001000000110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100011101000001010001011011000000000000000000000000000000000000000000000000000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000111010000010100010110110000000000000000000000000000000000000000000000000001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110110100000101010101101100000000000000000000000000000000000000000000000000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101101101000001010101011011000000000000000000000000000000000000000000000000000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011011010000010100010110110010000000000000000000000000000000000000000000000001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110110100000101000101101100100000000000000000000000000000000000000000000000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100101101000001010101011011001000000000000000000000000000000000000000000000000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001011010000010101010110110010000000000000000000000000000000000000000000000001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010110100000101000101101100000000000001000000000000000000000000000000000000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100101101000001010001011011000000000000010000000000000000000000000000000000000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010011010000010101010110110000000000000100000000000000000000000000000000000001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110100110100000101010101101100000000000001000000000000000000000000000000000000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101001101000001010001011011001000000000010000000000000000000000000000000000000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010011010000010100010110110010000000000100000000000000000000000000000000000001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000110100000101010101101100100000000001000000000000000000000000000000000000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100001101000001010101011011001000000000010000000000000000000000000000000000000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000011010000010100010110110000000000000000000000001000000000000000000000000001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000110100000101000101101100000000000000000000000010000000000000000000000000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101110101000001010101011011000000000000000000000000100000000000000000000000000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001100000000000000000000000000000000000111011101010000010101010110110000000000000000000000001000000000000000000000000001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010001000000000000000000000000000000000001110111010100000101000101101100100000000000000000000010000000000000000000000000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100110000000000000000000000000000000000011101110101000001010001011011001000000000000000000000100000000000000000000000000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000100000000000000000000000000000000000111001101010000010101010110110010000000000000000000001000000000000000000000000001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000000000000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000000000000000001110011010100000101010101101100100000000000000000000010000000000000000000000000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001000000000000011100110101000001010001011011000000000000010000000000100000000000000000000000000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010000000000000111001101010000010100010110110000000000000100000000001000000000000000000000000001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100000000000001110101010100000101010101101100000000000001000000000010000000000000000000000000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001000000000000011101010101000001010101011011000000000000010000000000100000000000000000000000000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010000000000000111010101010000010100010110110010000000000100000000001000000000000000000000000001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100000000000001110101010100000101000101101100100000000001000000000010000000000000000000000000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001000000000000011100010101000001010101011011001000000000010000000000100000000000000000000000000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010000000000000111000101010000010101010110110010000000000100000000001000000000000000000000000001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100000000000001110001010100000101000101101100000000000000000000000000000000000100000000000000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001000000000000011100010101000001010001011011000000000000000000000000000000000001000000000000000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010000000000000111011001010000010101010110110000000000000000000000000000000000010000000000000001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100000000000001110110010100000101010101101100000000000000000000000000000000000100000000000000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001000000000000011101100101000001010001011011001000000000000000000000000000000001000000000000000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111011001010000010100010110110010000000000000000000000000000000010000000000000001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110010010100000101010101101100100000000000000000000000000000000100000000000000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011100100101000001010101011011001000000000000000000000000000000001000000000000000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111001001010000010100010110110000000000000100000000000000000000010000000000000001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110010010100000101000101101100000000000001000000000000000000000100000000000000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011101000101000001010101011011000000000000010000000000000000000001000000000000000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111010001010000010101010110110000000000000100000000000000000000010000000000000001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100100000000001110100010100000101000101101100100000000001000000000000000000000100000000000000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011101000101000001010001011011001000000000010000000000000000000001000000000000000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111000001010000010101010110110010000000000100000000000000000000010000000000000001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100100000000001110000010100000101010101101100100000000001000000000000000000000100000000000000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011100000101000001010001011011000000000000000000000000100000000001000000000000000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111000001010000010100010110110000000000000000000000001000000000010000000000000001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100100000000001110111100100000101010101101100000000000000000000000010000000000100000000000000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001000000000011101111001000001010101011011000000000000000000000000100000000001000000000000000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111011110010000010100010110110010000000000000000000001000000000010000000000000001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100100000000001110111100100000101000101101100100000000000000000000010000000000100000000000000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001000000000011100111001000001010101011011001000000000000000000000100000000001000000000000000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111001110010000010101010110110010000000000000000000001000000000010000000000000001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110011100100000101000101101100000000000001000000000010000000000100000000000000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011100111001000001010001011011000000000000010000000000100000000001000000000000000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111010110010000010101010110110000000000000100000000001000000000010000000000000001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110101100100000101010101101100000000000001000000000010000000000100000000000000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011101011001000001010001011011001000000000010000000000100000000001000000000000000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111010110010000010100010110110010000000000100000000001000000000010000000000000001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110001100100000101010101101100100000000001000000000010000000000100000000000000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011100011001000001010101011011001000000000010000000000100000000001000000000000000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111000110010000010100010110110000000000000000000000000000000000000000000000100001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110001100100000101000101101100000000000000000000000000000000000000000000001000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011101101001000001010101011011000000000000000000000000000000000000000000000010000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111011010010000010101010110110000000000000000000000000000000000000000000000100001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110110100100000101000101101100100000000000000000000000000000000000000000001000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011101101001000001010001011011001000000000000000000000000000000000000000000010000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111001010010000010101010110110010000000000000000000000000000000000000000000100001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110010100100000101010101101100100000000000000000000000000000000000000000001000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011100101001000001010001011011000000000000010000000000000000000000000000000010000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111001010010000010100010110110000000000000100000000000000000000000000000000100001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110100100100000101010101101100000000000001000000000000000000000000000000001000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011101001001000001010101011011000000000000010000000000000000000000000000000010000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111010010010000010100010110110010000000000100000000000000000000000000000000100001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110100100100000101000101101100100000000001000000000000000000000000000000001000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011100001001000001010101011011001000000000010000000000000000000000000000000010000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111000010010000010101010110110010000000000100000000000000000000000000000000100001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001001000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010010000000100110000000001110000100100000101000101101100000000000000000000000010000000000000000000001000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010010000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100100000001001100000000011100001001000001010001011011000000000000000000000000100000000000000000000010000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100100000001001110000000001011100000000000000000000000000000000000000000000000000000001000100000000001001000000010011100000000111011100010000010101010110110000000000000000000000001000000000000000000000100001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001001000000010011100000000010111000000000000000000000000000000000000000000000000000000010011000000000010010000000100111000000001110111000100000101010101101100000000000000000000000010000000000000000000001000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000010010000000100111000100000101110000000000000000000000000000000000000000000000000000000100110100100000100100000001001110001000011101110001000001010001011011001000000000000000000000100000000000000000000010000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000100100000001001110001000001011100000000000000000000000000000000000000000000000000000001001101001000001001000000010011100010000111011100010000010100010110110010000000000000000000001000000000000000000000100001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001001000000010011100010000010111000000000000000000000000000000000000000000000000000000010011010010000010010000000100111000100001110011000100000101010101101100100000000000000000000010000000000000000000001000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000010010000000100111000100000001110000000000000000000000000000000000000000000000000000000100110100100000100100000001001110001000011100110001000001010101011011001000000000000000000000100000000000000000000010000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000100100000001001110001000000011100000000000000000000000000000000000000000000000000001001001101001000001001000000010011100010000111001100010000010100010110110000000000000100000000001000000000000000000000100001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001001000000010011100010000000111000000000000000000000000000000000000000000000000000000010011010010000010010000000100111000100001110011000100000101000101101100000000000001000000000010000000000000000000001000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000010010000000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000100100000001001110101000011101010001000001010101011011000000000000010000000000100000000000000000000010000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100100000100100000001001110101000000011100000000000000000000000000000000000000000000000000000001000101001000001001000000010011101010000111010100010000010101010110110000000000000100000000001000000000000000000000100001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001000001001000000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010000010010000000100111010100001110101000100000101000101101100100000000001000000000010000000000000000000001000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000010010000000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000100100000001001110101000011101010001000001010001011011001000000000010000000000100000000000000000000010000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000100110000001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001100000010011101010000111000100010000010101010110110010000000000100000000001000000000000000000000100001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000010011010000100111010100001110001000100000101010101101100100000000001000000000010000000000000000000001000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000010011010000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000100110100001001110101000011100010001000001010001011011000000000000000000000000000000000001000000000010000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001101000010011101010000111000100010000010100010110110000000000000000000000000000000000010000000000100001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000010011010000100111010100001110110000100000101010101101100000000000000000000000000000000000100000000001000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000010011010000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000100110100001001110101000011101100001000001010101011011000000000000000000000000000000000001000000000010000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001000101001000001001101000010011101010000111011000010000010100010110110010000000000000000000000000000000010000000000100001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010000010011010000100111010100001110110000100000101000101101100100000000000000000000000000000000100000000001000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000010011010000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000100110100001001110101000011100100001000001010101011011001000000000000000000000000000000001000000000010000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001101000010011101010000111001000010000010101010110110010000000000000000000000000000000010000000000100001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001101101000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000011011010000100111010100001110010000100000101000101101100000000000001000000000000000000000100000000001000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000011011010000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000110110100001001110101000011100100001000001010001011011000000000000010000000000000000000001000000000010000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000110110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001101101000010011101010000111010000010000010101010110110000000000000100000000000000000000010000000000100001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001101101000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000011011010000100111010100001110100000100000101010101101100000000000001000000000000000000000100000000001000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000011011010000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000110110100001001110101000011101000001000001010001011011001000000000010000000000000000000001000000000010000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000110110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001101101000010011101010000111010000010000010100010110110010000000000100000000000000000000010000000000100001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001010001101101100010011101010000000111000000000000000000000000000000000000000000000000000000010011010010100011011011000100111010100001110000000100000101010101101100100000000001000000000000000000000100000000001000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010100011011111000100111010100000001110000000000000000000000000000000000000000000000000000000100010100101000110111110001001110101000011100000001000001010101011011001000000000010000000000000000000001000000000010000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100101000110111110001001110101000000011100000000000000000000000000000000000000000000000000000001000101001010001101111100010011101010000111000000010000010100010110110000000000000000000000001000000000010000000000100001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101101010001101111100010011101010000000111000000000000000000000000000000000000000000000000000000010001011010100011011111000100111010100001110000000100000101000101101100000000000000000000000010000000000100000000001000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101011010100111011111000100111010100000001110000000000000000000000000000000000000000000000000000000100010110101001110111110001001110101000011101111110000001010101011011000000000000000000000000100000000001000000000010000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010110101001110111110001001110101000000011100000000000000000000000000000000000000000000000000000001000101101010011101111100010011101010000111011111100000010101010110110000000000000000000000001000000000010000000000100001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101101010111101111100010011101010000000111000000000000000000000000000000000000000000000000000000010001011010101111011111000100111010100001110111111000000101000101101100100000000000000000000010000000000100000000001000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101011011101111011111000100111110100000001110000000000000000000000000000000000000000000000000000000100010110111011110111110001001111101000011101111110000001010001011011001000000000000000000000100000000001000000000010000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010110111011110111110001001111101000000011100000000000000000000000000000000000000000000000000000001000101101110111101111100010011111010000111001111100000010101010110110010000000000000000000001000000000010000000000100001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101111110111101111100010011111110000000111000000000000000000000000000000000000000000000000000000010011011111101111011111000100111111100001110011111000000101010101101100100000000000000000000010000000000100000000001000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111011111101111011111100100111111100000001110000000000000000000000000000000000000000000000000000000100110111111011110111111001001111111000011100111110000001010001011011000000000000010000000000100000000001000000000010000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111011110111111001001111111000000011100000000000000000000000000000000000000000000000000000001001111111110111101111110010011111110000111001111100000010100010110110000000000000100000000001000000000010000000000100001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111110111101111110010011111110000000111000000000000000000000000000000000000000000000000000000010011111111101111011111100100111111100001110101111000000101010101101100000000000001000000000010000000000100000000001000010110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111101111011111100100111111100000001110000000000000000000000000000000000000000000000000000000100111111111011110111111001001111111000011101011110000001010101011011000000000000010000000000100000000001000000000010000101101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111011110111111001001111111000000011100000000000000000000000000000000000000000000000000000001000111111110111101111110010011111110000111010111100000010100010110110010000000000100000000001000000000010000000000100001011010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111110111101111110010011111110000000111000000000000000000000000000000000000000000000000000000010001111111101111011111100100111111100001110101111000000101000101101100100000000001000000000010000000000100000000001000010110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111101111011111100100111111100000001110000000000000000000000000000000000000000000000000000000100011111111011110111111001001111111000011100011110000001010101011011001000000000010000000000100000000001000000000010000101101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111011110111111001001111111000000011100000000000000000000000000000000000000000000000000000001001111111110111101111110010011111110000111000111100000010101010110110010000000000100000000001000000000010000000000100001011011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111110111101111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111101111011111100110111111100001110001111000000101000101101100000000000000000000000000000000000000000000000000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111101111011111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111011110111111001101111111000011100011110000001010001011011000000000000000000000000000000000000000000000000000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111011110111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111110111101111110011011111110000111011011100000010101010110110000000000000000000000000000000000000000000000000000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111110111101111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111101111011111100110111111100001110110111000000101010101101100000000000000000000000000000000000000000000000000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111101111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111011111111111001101111111000011101101110000001010001011011001000000000000000000000000000000000000000000000000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111011011100000010100010110110010000000000000000000000000000000000000000000000000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111100110111111100001110010111000000101010101101100100000000000000000000000000000000000000000000000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111001101111111000011100101110000001010101011011001000000000000000000000000000000000000000000000000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111001011100000010100010110110000000000000100000000000000000000000000000000000000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111100110111111100001110010111000000101000101101100000000000001000000000000000000000000000000000000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111001101111111000011101001110000001010101011011000000000000010000000000000000000000000000000000000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111110011011111110000111010011100000010101010110110000000000000100000000000000000000000000000000000000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111100110111111100001110100111000000101000101101100100000000001000000000000000000000000000000000000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111001101111111000011101001110000001010001011011001000000000010000000000000000000000000000000000000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111110011011111110000111000011100000010101010110110010000000000100000000000000000000000000000000000000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111100110111111100001110000111000000101010101101100100000000001000000000000000000000000000000000000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111001101111111000011100001110000001010001011011000000000000000000000000100000000000000000000000000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111000011100000010100010110110000000000000000000000001000000000000000000000000000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110111011000000101010101101100000000000000000000000010000000000000000000000000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111001101111111000011101110110000001010101011011000000000000000000000000100000000000000000000000000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111101101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011011111110000111011101100000010100010110110010000000000000000000001000000000000000000000000000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110110111111100001110111011000000101000101101100100000000000000000000010000000000000000000000000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111110110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101101111111000011100110110000001010101011011001000000000000000000000100000000000000000000000000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111101101111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111011011111110000111001101100000010101010110110010000000000000000000001000000000000000000000000000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111110110111111100001110011011000000101000101101100000000000001000000000010000000000000000000000000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111110110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111101101111111000011100110110000001010001011011000000000000010000000000100000000000000000000000000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111101101111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111011011111110000111010101100000010101010110110000000000000100000000001000000000000000000000000000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111110110111111100001110101011000000101010101101100000000000001000000000010000000000000000000000000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111110111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111101111111111000011101010110000001010001011011001000000000010000000000100000000000000000000000000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111101111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111011111111110000111010101100000010100010110110010000000000100000000001000000000000000000000000000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110111111111100001110001011000000101010101101100100000000001000000000010000000000000000000000000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111110111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101111111111000011100010110000001010101011011001000000000010000000000100000000000000000000000000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111101111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011111111110000111000101100000010100010110110000000000000000000000000000000000010000000000000000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110111111111100001110001011000000101000101101100000000000000000000000000000000000100000000000000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111110111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101111111111000011101100110000001010101011011000000000000000000000000000000000001000000000000000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111101111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011111111110000111011001100000010101010110110000000000000000000000000000000000010000000000000000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110111111111100001110110011000000101000101101100100000000000000000000000000000000100000000000000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111110111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101111111111000011101100110000001010001011011001000000000000000000000000000000001000000000000000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001001100000010101010110110010000000000000000000000000000000010000000000000000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010011000000101010101101100100000000000000000000000000000000100000000000000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100100110000001010001011011000000000000010000000000000000000001000000000000000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001001100000010100010110110000000000000100000000000000000000010000000000000000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100011000000101010101101100000000000001000000000000000000000100000000000000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101000110000001010101011011000000000000010000000000000000000001000000000000000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010001100000010100010110110010000000000100000000000000000000010000000000000000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100011000000101000101101100100000000001000000000000000000000100000000000000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000110000001010101011011001000000000010000000000000000000001000000000000000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000001100000010101010110110010000000000100000000000000000000010000000000000000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000011000000101000101101100000000000000000000000010000000000100000000000000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000110000001010001011011000000000000000000000000100000000001000000000000000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011110100000010101010110110000000000000000000000001000000000010000000000000000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111101000000101010101101100000000000000000000000010000000000100000000000000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101111010000001010001011011001000000000000000000000100000000001000000000000000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011110100000010100010110110010000000000000000000001000000000010000000000000000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011101000000101010101101100100000000000000000000010000000000100000000000000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100111010000001010101011011001000000000000000000000100000000001000000000000000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001110100000010100010110110000000000000100000000001000000000010000000000000000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011101000000101000101101100000000000001000000000010000000000100000000000000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101011010000001010101011011000000000000010000000000100000000001000000000000000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010110100000010101010110110000000000000100000000001000000000010000000000000000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101101000000101000101101100100000000001000000000010000000000100000000000000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101011010000001010001011011001000000000010000000000100000000001000000000000000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000110100000010101010110110010000000000100000000001000000000010000000000000000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001101000000101010101101100100000000001000000000010000000000100000000000000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100011010000001010001011011000000000000000000000000000000000000000000000010000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000110100000010100010110110000000000000000000000000000000000000000000000100000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110101000000101010101101100000000000000000000000000000000000000000000001000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101101010000001010101011011000000000000000000000000000000000000000000000010000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011010100000010100010110110010000000000000000000000000000000000000000000100000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110101000000101000101101100100000000000000000000000000000000000000000001000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100101010000001010101011011001000000000000000000000000000000000000000000010000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001010100000010101010110110010000000000000000000000000000000000000000000100000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010101000000101000101101100000000000001000000000000000000000000000000001000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100101010000001010001011011000000000000010000000000000000000000000000000010000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010010100000010101010110110000000000000100000000000000000000000000000000100000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100101000000101010101101100000000000001000000000000000000000000000000001000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101001010000001010001011011001000000000010000000000000000000000000000000010000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010010100000010100010110110010000000000100000000000000000000000000000000100000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000101000000101010101101100100000000001000000000000000000000000000000001000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100001010000001010101011011001000000000010000000000000000000000000000000010000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000010100000010100010110110000000000000000000000001000000000000000000000100000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000101000000101000101101100000000000000000000000010000000000000000000001000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101110010000001010101011011000000000000000000000000100000000000000000000010000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011100100000010101010110110000000000000000000000001000000000000000000000100000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111001000000101000101101100100000000000000000000010000000000000000000001000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101110010000001010001011011001000000000000000000000100000000000000000000010000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100100000010101010110110010000000000000000000001000000000000000000000100000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011001000000101010101101100100000000000000000000010000000000000000000001000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110010000001010001011011000000000000010000000000100000000000000000000010000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100100000010100010110110000000000000100000000001000000000000000000000100000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101001000000101010101101100000000000001000000000010000000000000000000001000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101010010000001010101011011000000000000010000000000100000000000000000000010000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010100100000010100010110110010000000000100000000001000000000000000000000100000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101001000000101000101101100100000000001000000000010000000000000000000001000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100010010000001010101011011001000000000010000000000100000000000000000000010000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000100100000010101010110110010000000000100000000001000000000000000000000100000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001001000000101000101101100000000000000000000000000000000000100000000001000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100010010000001010001011011000000000000000000000000000000000001000000000010000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011000100000010101010110110000000000000000000000000000000000010000000000100000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110001000000101010101101100000000000000000000000000000000000100000000001000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101100010000001010001011011001000000000000000000000000000000001000000000010000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011000100000010100010110110010000000000000000000000000000000010000000000100000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010001000000101010101101100100000000000000000000000000000000100000000001000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100100010000001010101011011001000000000000000000000000000000001000000000010000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001000100000010100010110110000000000000100000000000000000000010000000000100000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010001000000101000101101100000000000001000000000000000000000100000000001000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000010000001010101011011000000000000010000000000000000000001000000000010000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010000100000010101010110110000000000000100000000000000000000010000000000100000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100001000000101000101101100100000000001000000000000000000000100000000001000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000010000001010001011011001000000000010000000000000000000001000000000010000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000000100000010101010110110010000000000100000000000000000000010000000000100000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000001000000101010101101100100000000001000000000000000000000100000000001000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000010000001010001011011000000000000000000000000100000000001000000000010000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000000100000010100010110110000000000000000000000001000000000010000000000100000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111110000000101010101101100000000000000000000000010000000000100000000001000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101111100000001010101011011000000000000000000000000100000000001000000000010000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011111000000010100010110110010000000000000000000001000000000010000000000100000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111110000000101000101101100100000000000000000000010000000000100000000001000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100111100000001010101011011001000000000000000000000100000000001000000000010000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001111000000010101010110110010000000000000000000001000000000010000000000100000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011110000000101000101101100000000000001000000000010000000000100000000001000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100111100000001010001011011000000000000010000000000100000000001000000000010000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010111000000010101010110110000000000000100000000001000000000010000000000100000111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101110000000101010101101100000000000001000000000010000000000100000000001000001110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101011100000001010001011011001000000000010000000000100000000001000000000010000011101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010111000000010100010110110010000000000100000000001000000000010000000000100000111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001110000000101010101101100100000000001000000000010000000000100000000001000001110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100011100000001010101011011001000000000010000000000100000000001000000000010000011101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000111000000010100010110110000000000000000000000000000000000000000000000000001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001110000000101000101101100000000000000000000000000000000000000000000000000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101101100000001010101011011000000000000000000000000000000000000000000000000000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011011000000010101010110110000000000000000000000000000000000000000000000000001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110110000000101000101101100100000000000000000000000000000000000000000000000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101101100000001010001011011001000000000000000000000000000000000000000000000000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001011000000010101010110110010000000000000000000000000000000000000000000000001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010110000000101010101101100100000000000000000000000000000000000000000000000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100101100000001010001011011000000000000010000000000000000000000000000000000000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001011000000010100010110110000000000000100000000000000000000000000000000000001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100110000000101010101101100000000000001000000000000000000000000000000000000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101001100000001010101011011000000000000010000000000000000000000000000000000000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010011000000010100010110110010000000000100000000000000000000000000000000000001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100110000000101000101101100100000000001000000000000000000000000000000000000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100001100000001010101011011001000000000010000000000000000000000000000000000000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000011000000010101010110110010000000000100000000000000000000000000000000000001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000110000000101000101101100000000000000000000000010000000000000000000000000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100001100000001010001011011000000000000000000000000100000000000000000000000000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011101000000010101010110110000000000000000000000001000000000000000000000000001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111010000000101010101101100000000000000000000000010000000000000000000000000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101110100000001010001011011001000000000000000000000100000000000000000000000000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011101000000010100010110110010000000000000000000001000000000000000000000000001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011010000000101010101101100100000000000000000000010000000000000000000000000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110100000001010101011011001000000000000000000000100000000000000000000000000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001101000000010100010110110000000000000100000000001000000000000000000000000001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011010000000101000101101100000000000001000000000010000000000000000000000000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101010100000001010101011011000000000000010000000000100000000000000000000000000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010101000000010101010110110000000000000100000000001000000000000000000000000001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101010000000101000101101100100000000001000000000010000000000000000000000000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101010100000001010001011011001000000000010000000000100000000000000000000000000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000101000000010101010110110010000000000100000000001000000000000000000000000001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001010000000101010101101100100000000001000000000010000000000000000000000000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100010100000001010001011011000000000000000000000000000000000001000000000000000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000101000000010100010110110000000000000000000000000000000000010000000000000001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110010000000101010101101100000000000000000000000000000000000100000000000000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101100100000001010101011011000000000000000000000000000000000001000000000000000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011001000000010100010110110010000000000000000000000000000000010000000000000001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110010000000101000101101100100000000000000000000000000000000100000000000000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100100100000001010101011011001000000000000000000000000000000001000000000000000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001001000000010101010110110010000000000000000000000000000000010000000000000001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010010000000101000101101100000000000001000000000000000000000100000000000000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100100100000001010001011011000000000000010000000000000000000001000000000000000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010001000000010101010110110000000000000100000000000000000000010000000000000001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100010000000101010101101100000000000001000000000000000000000100000000000000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101000100000001010001011011001000000000010000000000000000000001000000000000000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010001000000010100010110110010000000000100000000000000000000010000000000000001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000010000000101010101101100100000000001000000000000000000000100000000000000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000100000001010101011011001000000000010000000000000000000001000000000000000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000001000000010100010110110000000000000000000000001000000000010000000000000001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000010000000101000101101100000000000000000000000010000000000100000000000000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101111000000001010101011011000000000000000000000000100000000001000000000000000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011110000000010101010110110000000000000000000000001000000000010000000000000001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111100000000101000101101100100000000000000000000010000000000100000000000000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101111000000001010001011011001000000000000000000000100000000001000000000000000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001110000000010101010110110010000000000000000000001000000000010000000000000001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011100000000101010101101100100000000000000000000010000000000100000000000000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100111000000001010001011011000000000000010000000000100000000001000000000000000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001110000000010100010110110000000000000100000000001000000000010000000000000001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101100000000101010101101100000000000001000000000010000000000100000000000000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101011000000001010101011011000000000000010000000000100000000001000000000000000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010110000000010100010110110010000000000100000000001000000000010000000000000001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101100000000101000101101100100000000001000000000010000000000100000000000000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100011000000001010101011011001000000000010000000000100000000001000000000000000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000110000000010101010110110010000000000100000000001000000000010000000000000001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001100000000101000101101100000000000000000000000000000000000000000000001000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100011000000001010001011011000000000000000000000000000000000000000000000010000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011010000000010101010110110000000000000000000000000000000000000000000000100001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110100000000101010101101100000000000000000000000000000000000000000000001000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101101000000001010001011011001000000000000000000000000000000000000000000010000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011010000000010100010110110010000000000000000000000000000000000000000000100001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010100000000101010101101100100000000000000000000000000000000000000000001000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100101000000001010101011011001000000000000000000000000000000000000000000010000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001010000000010100010110110000000000000100000000000000000000000000000000100001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010100000000101000101101100000000000001000000000000000000000000000000001000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101001000000001010101011011000000000000010000000000000000000000000000000010000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010010000000010101010110110000000000000100000000000000000000000000000000100001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100100000000101000101101100100000000001000000000000000000000000000000001000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101001000000001010001011011001000000000010000000000000000000000000000000010000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000010000000010101010110110010000000000100000000000000000000000000000000100001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000100000000101010101101100100000000001000000000000000000000000000000001000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100001000000001010001011011000000000000000000000000100000000000000000000010000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000010000000010100010110110000000000000000000000001000000000000000000000100001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111000000000101010101101100000000000000000000000010000000000000000000001000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101110000000001010101011011000000000000000000000000100000000000000000000010000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011100000000010100010110110010000000000000000000001000000000000000000000100001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111000000000101000101101100100000000000000000000010000000000000000000001000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110000000001010101011011001000000000000000000000100000000000000000000010000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100000000010101010110110010000000000000000000001000000000000000000000100001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011000000000101000101101100000000000001000000000010000000000000000000001000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110000000001010001011011000000000000010000000000100000000000000000000010000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010100000000010101010110110000000000000100000000001000000000000000000000100001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101000000000101010101101100000000000001000000000010000000000000000000001000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101010000000001010001011011001000000000010000000000100000000000000000000010000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010100000000010100010110110010000000000100000000001000000000000000000000100001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001000000000101010101101100100000000001000000000010000000000000000000001000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100010000000001010101011011001000000000010000000000100000000000000000000010000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000100000000010100010110110000000000000000000000000000000000010000000000100001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001000000000101000101101100000000000000000000000000000000000100000000001000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101100000000001010101011011000000000000000000000000000000000001000000000010000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011000000000010101010110110000000000000000000000000000000000010000000000100001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110000000000101000101101100100000000000000000000000000000000100000000001000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101100000000001010001011011001000000000000000000000000000000001000000000010000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001000000000010101010110110010000000000000000000000000000000010000000000100001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010000000000101010101101100100000000000000000000000000000000100000000001000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100100000000001010001011011000000000000010000000000000000000001000000000010000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001000000000010100010110110000000000000100000000000000000000010000000000100001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100000000000101010101101100000000000001000000000000000000000100000000001000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000000000001010101011011000000000000010000000000000000000001000000000010000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010000000000010100010110110010000000000100000000000000000000010000000000100001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100000000000101000101101100100000000001000000000000000000000100000000001000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000000000001010101011011001000000000010000000000000000000001000000000010000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000000000000010101010110110010000000000100000000000000000000010000000000100001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000000000000101000101101100000000000000000000000010000000000100000000001000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000000000001010001011011000000000000000000000000100000000001000000000010000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000010111010110000000010101010110110000000000000000000000001000000000010000000000100001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000101110101001000000101010101101100000000000000000000000010000000000100000000001000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000001011101011110000001010001011011001000000000000000000000100000000001000000000010000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000010111010101010000010100010110110010000000000000000000001000000000010000000000100001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000101110001101100000101010101101100100000000000000000000010000000000100000000001000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100011111000001010101011011001000000000000000000000100000000001000000000010000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000111110000010100010110110000000000000100000000001000000000010000000000100001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001111100000101000101101100000000000001000000000010000000000100000000001000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101101111000001010101011011000000000000010000000000100000000001000000000010000111101010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011011110000010101010110110000000000000100000000001000000000010000000000100001111011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110111100000101000101101100100000000001000000000010000000000100000000001000011110101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101101111000001010001011011001000000000010000000000100000000001000000000010000111101110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001011110000010101010110110010000000000100000000001000000000010000000000100001111010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010111100000101010101101100100000000001000000000010000000000100000000001000011110111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100101111000001010011011011000000000000000000000000000000000000000000000000000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001011110000010100110110110000000000000000000000000000000000000000000000000000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110100111100000101011101101100000000000000000000000000000000000000000000000000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101001111000001010111011011000000000000000000000000000000000000000000000000000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010011110000010100110110110010000000000000000000000000000000000000000000000000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110100111100000101001101101100100000000000000000000000000000000000000000000000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100001111000001010111011011001000000000000000000000000000000000000000000000000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000011110000010101110110110010000000000000000000000000000000000000000000000000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000111100000101001101101100000000000001000000000000000000000000000000000000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100001111000001010011011011000000000000010000000000000000000000000000000000000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011101110000010101110110110000000000000100000000000000000000000000000000000000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111011100000101011101101100000000000001000000000000000000000000000000000000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101110111000001010011011011001000000000010000000000000000000000000000000000000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011101110000010100110110110010000000000100000000000000000000000000000000000000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110011011100000101011101101100100000000001000000000000000000000000000000000000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100110111000001010111011011001000000000010000000000000000000000000000000000000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001101110000010100110110110000000000000000000000001000000000000000000000000000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110011011100000101001101101100000000000000000000000010000000000000000000000000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101010111000001010111011011000000000000000000000000100000000000000000000000000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010101110000010101110110110000000000000000000000001000000000000000000000000000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110101011100000101001101101100100000000000000000000010000000000000000000000000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101010111000001010011011011001000000000000000000000100000000000000000000000000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000101110000010101110110110010000000000000000000001000000000000000000000000000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001011100000101011101101100100000000000000000000010000000000000000000000000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100010111000001010011011011000000000000010000000000100000000000000000000000000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000101110000010100110110110000000000000100000000001000000000000000000000000000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110011100000101011101101100000000000001000000000010000000000000000000000000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101100111000001010111011011000000000000010000000000100000000000000000000000000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011001110000010100110110110010000000000100000000001000000000000000000000000000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110011100000101001101101100100000000001000000000010000000000000000000000000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100100111000001010111011011001000000000010000000000100000000000000000000000000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001001110000010101110110110010000000000100000000001000000000000000000000000000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010011100000101001101101100000000000000000000000000000000000100000000000000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100100111000001010011011011000000000000000000000000000000000001000000000000000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010001110000010101110110110000000000000000000000000000000000010000000000000000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110100011100000101011101101100000000000000000000000000000000000100000000000000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101000111000001010011011011001000000000000000000000000000000001000000000000000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010001110000010100110110110010000000000000000000000000000000010000000000000000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000011100000101011101101100100000000000000000000000000000000100000000000000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100000111000001010111011011001000000000000000000000000000000001000000000000000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000001110000010100110110110000000000000100000000000000000000010000000000000000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000011100000101001101101100000000000001000000000000000000000100000000000000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101111011000001010111011011000000000000010000000000000000000001000000000000000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011110110000010101110110110000000000000100000000000000000000010000000000000000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111101100000101001101101100100000000001000000000000000000000100000000000000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101111011000001010011011011001000000000010000000000000000000001000000000000000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001110110000010101110110110010000000000100000000000000000000010000000000000000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011101100000101011101101100100000000001000000000000000000000100000000000000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100111011000001010011011011000000000000000000000000100000000001000000000000000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001110110000010100110110110000000000000000000000001000000000010000000000000000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110101101100000101011101101100000000000000000000000010000000000100000000000000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101011011000001010111011011000000000000000000000000100000000001000000000000000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010110110000010100110110110010000000000000000000001000000000010000000000000000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110101101100000101001101101100100000000000000000000010000000000100000000000000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100011011000001010111011011001000000000000000000000100000000001000000000000000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000110110000010101110110110010000000000000000000001000000000010000000000000000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001101100000101001101101100000000000001000000000010000000000100000000000000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100011011000001010011011011000000000000010000000000100000000001000000000000000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011010110000010101110110110000000000000100000000001000000000010000000000000000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110101100000101011101101100000000000001000000000010000000000100000000000000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101101011000001010011011011001000000000010000000000100000000001000000000000000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011010110000010100110110110010000000000100000000001000000000010000000000000000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110010101100000101011101101100100000000001000000000010000000000100000000000000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100101011000001010111011011001000000000010000000000100000000001000000000000000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001010110000010100110110110000000000000000000000000000000000000000000000100000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010101100000101001101101100000000000000000000000000000000000000000000001000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101001011000001010111011011000000000000000000000000000000000000000000000010000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010010110000010101110110110000000000000000000000000000000000000000000000100000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100101100000101001101101100100000000000000000000000000000000000000000001000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101001011000001010011011011001000000000000000000000000000000000000000000010000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000010110000010101110110110010000000000000000000000000000000000000000000100000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000101100000101011101101100100000000000000000000000000000000000000000001000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100001011000001010011011011000000000000010000000000000000000000000000000010000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000010110000010100110110110000000000000100000000000000000000000000000000100000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111001100000101011101101100000000000001000000000000000000000000000000001000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101110011000001010111011011000000000000010000000000000000000000000000000010000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011100110000010100110110110010000000000100000000000000000000000000000000100000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111001100000101001101101100100000000001000000000000000000000000000000001000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100110011000001010111011011001000000000010000000000000000000000000000000010000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001100110000010101110110110010000000000100000000000000000000000000000000100000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110011001100000101001101101100000000000000000000000010000000000000000000001000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100110011000001010011011011000000000000000000000000100000000000000000000010000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010100110000010101110110110000000000000000000000001000000000000000000000100000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110101001100000101011101101100000000000000000000000010000000000000000000001000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101010011000001010011011011001000000000000000000000100000000000000000000010000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010100110000010100110110110010000000000000000000001000000000000000000000100000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001001100000101011101101100100000000000000000000010000000000000000000001000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100010011000001010111011011001000000000000000000000100000000000000000000010000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000100110000010100110110110000000000000100000000001000000000000000000000100000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001001100000101001101101100000000000001000000000010000000000000000000001000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101100011000001010111011011000000000000010000000000100000000000000000000010000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011000110000010101110110110000000000000100000000001000000000000000000000100000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110001100000101001101101100100000000001000000000010000000000000000000001000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101100011000001010011011011001000000000010000000000100000000000000000000010000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001000110000010101110110110010000000000100000000001000000000000000000000100000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110010001100000101011101101100100000000001000000000010000000000000000000001000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100100011000001010011011011000000000000000000000000000000000001000000000010000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001000110000010100110110110000000000000000000000000000000000010000000000100000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100001100000101011101101100000000000000000000000000000000000100000000001000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101000011000001010111011011000000000000000000000000000000000001000000000010000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010000110000010100110110110010000000000000000000000000000000010000000000100000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100001100000101001101101100100000000000000000000000000000000100000000001000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100000011000001010111011011001000000000000000000000000000000001000000000010000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000000110000010101110110110010000000000000000000000000000000010000000000100000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000001100000101001101101100000000000001000000000000000000000100000000001000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100000011000001010011011011000000000000010000000000000000000001000000000010000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011111010000010101110110110000000000000100000000000000000000010000000000100000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110111110100000101011101101100000000000001000000000000000000000100000000001000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101111101000001010011011011001000000000010000000000000000000001000000000010000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011111010000010100110110110010000000000100000000000000000000010000000000100000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110011110100000101011101101100100000000001000000000000000000000100000000001000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100111101000001010111011011001000000000010000000000000000000001000000000010000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001111010000010100110110110000000000000000000000001000000000010000000000100000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011110100000101001101101100000000000000000000000010000000000100000000001000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101011101000001010111011011000000000000000000000000100000000001000000000010000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010111010000010101110110110000000000000000000000001000000000010000000000100000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110101110100000101001101101100100000000000000000000010000000000100000000001000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101011101000001010011011011001000000000000000000000100000000001000000000010000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000111010000010101110110110010000000000000000000001000000000010000000000100000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110001110100000101011101101100100000000000000000000010000000000100000000001000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100011101000001010011011011000000000000010000000000100000000001000000000010000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000111010000010100110110110000000000000100000000001000000000010000000000100000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110110100000101011101101100000000000001000000000010000000000100000000001000000000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101101101000001010111011011000000000000010000000000100000000001000000000010000000001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011011010000010100110110110010000000000100000000001000000000010000000000100000000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110110100000101001101101100100000000001000000000010000000000100000000001000000000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100101101000001010111011011001000000000010000000000100000000001000000000010000000001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001011010000010101110110110010000000000100000000001000000000010000000000100000000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010110100000101001101101100000000000000000000000000000000000000000000000000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100101101000001010011011011000000000000000000000000000000000000000000000000000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010011010000010101110110110000000000000000000000000000000000000000000000000001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100110100000101011101101100000000000000000000000000000000000000000000000000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101001101000001010011011011001000000000000000000000000000000000000000000000000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010011010000010100110110110010000000000000000000000000000000000000000000000001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000110100000101011101101100100000000000000000000000000000000000000000000000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100001101000001010111011011001000000000000000000000000000000000000000000000000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000011010000010100110110110000000000000100000000000000000000000000000000000001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000110100000101001101101100000000000001000000000000000000000000000000000000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101110101000001010111011011000000000000010000000000000000000000000000000000000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001100000000000000000000000000000000000111011101010000010101110110110000000000000100000000000000000000000000000000000001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010011000000000000000000000000000000000001110111010100000101001101101100100000000001000000000000000000000000000000000000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100110000000000000000000000000000000000011101110101000001010011011011001000000000010000000000000000000000000000000000000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000000000000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000000000000000000111001101010000010101110110110010000000000100000000000000000000000000000000000001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000000000000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000000000000000001110011010100000101011101101100100000000001000000000000000000000000000000000000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001000000000000011100110101000001010011011011000000000000000000000000100000000000000000000000000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010000000000000111001101010000010100110110110000000000000000000000001000000000000000000000000001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100000000000001110101010100000101011101101100000000000000000000000010000000000000000000000000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001000000000000011101010101000001010111011011000000000000000000000000100000000000000000000000000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010000000000000111010101010000010100110110110010000000000000000000001000000000000000000000000001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100000000000001110101010100000101001101101100100000000000000000000010000000000000000000000000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001000000000000011100010101000001010111011011001000000000000000000000100000000000000000000000000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010000000000000111000101010000010101110110110010000000000000000000001000000000000000000000000001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100000000000001110001010100000101001101101100000000000001000000000010000000000000000000000000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001000000000000011100010101000001010011011011000000000000010000000000100000000000000000000000000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010000000000000111011001010000010101110110110000000000000100000000001000000000000000000000000001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100000000000001110110010100000101011101101100000000000001000000000010000000000000000000000000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001000000000000011101100101000001010011011011001000000000010000000000100000000000000000000000000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111011001010000010100110110110010000000000100000000001000000000000000000000000001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110010010100000101011101101100100000000001000000000010000000000000000000000000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011100100101000001010111011011001000000000010000000000100000000000000000000000000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111001001010000010100110110110000000000000000000000000000000000010000000000000001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110010010100000101001101101100000000000000000000000000000000000100000000000000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001000000000011101000101000001010111011011000000000000000000000000000000000001000000000000000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111010001010000010101110110110000000000000000000000000000000000010000000000000001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100100000000001110100010100000101001101101100100000000000000000000000000000000100000000000000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001000000000011101000101000001010011011011001000000000000000000000000000000001000000000000000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111000001010000010101110110110010000000000000000000000000000000010000000000000001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100100000000001110000010100000101011101101100100000000000000000000000000000000100000000000000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011100000101000001010011011011000000000000010000000000000000000001000000000000000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111000001010000010100110110110000000000000100000000000000000000010000000000000001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110111100100000101011101101100000000000001000000000000000000000100000000000000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011101111001000001010111011011000000000000010000000000000000000001000000000000000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111011110010000010100110110110010000000000100000000000000000000010000000000000001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100100000000001110111100100000101001101101100100000000001000000000000000000000100000000000000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001000000000011100111001000001010111011011001000000000010000000000000000000001000000000000000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111001110010000010101110110110010000000000100000000000000000000010000000000000001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100100000000001110011100100000101001101101100000000000000000000000010000000000100000000000000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011100111001000001010011011011000000000000000000000000100000000001000000000000000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111010110010000010101110110110000000000000000000000001000000000010000000000000001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110101100100000101011101101100000000000000000000000010000000000100000000000000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011101011001000001010011011011001000000000000000000000100000000001000000000000000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111010110010000010100110110110010000000000000000000001000000000010000000000000001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110001100100000101011101101100100000000000000000000010000000000100000000000000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011100011001000001010111011011001000000000000000000000100000000001000000000000000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111000110010000010100110110110000000000000100000000001000000000010000000000000001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110001100100000101001101101100000000000001000000000010000000000100000000000000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011101101001000001010111011011000000000000010000000000100000000001000000000000000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111011010010000010101110110110000000000000100000000001000000000010000000000000001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110110100100000101001101101100100000000001000000000010000000000100000000000000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011101101001000001010011011011001000000000010000000000100000000001000000000000000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111001010010000010101110110110010000000000100000000001000000000010000000000000001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110010100100000101011101101100100000000001000000000010000000000100000000000000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011100101001000001010011011011000000000000000000000000000000000000000000000010000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111001010010000010100110110110000000000000000000000000000000000000000000000100001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110100100100000101011101101100000000000000000000000000000000000000000000001000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011101001001000001010111011011000000000000000000000000000000000000000000000010000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111010010010000010100110110110010000000000000000000000000000000000000000000100001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110100100100000101001101101100100000000000000000000000000000000000000000001000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011100001001000001010111011011001000000000000000000000000000000000000000000010000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111000010010000010101110110110010000000000000000000000000000000000000000000100001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001001000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010010000000100110000000001110000100100000101001101101100000000000001000000000000000000000000000000001000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010010000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100100000001001100000000011100001001000001010011011011000000000000010000000000000000000000000000000010000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100100000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001001000000010011000000000111011100010000010101110110110000000000000100000000000000000000000000000000100001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001001000000010011100000000010111000000000000000000000000000000000000000000000000000000010001000000000010010000000100111000000001110111000100000101011101101100000000000001000000000000000000000000000000001000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010010000000100111000000000101110000000000000000000000000000000000000000000000000000000100010000000000100100000001001110000000011101110001000001010011011011001000000000010000000000000000000000000000000010000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000100000100100000001001110000000001011100000000000000000000000000000000000000000000000000000001000100001000001001000000010011100000000111011100010000010100110110110010000000000100000000000000000000000000000000100001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001000001001000000010011100010000010111000000000000000000000000000000000000000000000000000000010001010010000010010000000100111000100001110011000100000101011101101100100000000001000000000000000000000000000000001000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000010010000000100111000100000001110000000000000000000000000000000000000000000000000000000100010100100000100100000001001110001000011100110001000001010111011011001000000000010000000000000000000000000000000010000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100100000100100000001001110001000000011100000000000000000000000000000000000000000000000000001001000101001000001001000000010011100010000111001100010000010100110110110000000000000000000000001000000000000000000000100001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001000001001000000010011100010000000111000000000000000000000000000000000000000000000000000000010001010010000010010000000100111000100001110011000100000101001101101100000000000000000000000010000000000000000000001000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000010010000000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000100100000001001110101000011101010001000001010111011011000000000000000000000000100000000000000000000010000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100100000100100000001001110101000000011100000000000000000000000000000000000000000000000000000001000101001000001001000000010011101010000111010100010000010101110110110000000000000000000000001000000000000000000000100001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001000001001000000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010000010010000000100111010100001110101000100000101001101101100100000000000000000000010000000000000000000001000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000010010000000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000100100000001001110101000011101010001000001010011011011001000000000000000000000100000000000000000000010000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000100100000001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001000000010011101010000111000100010000010101110110110010000000000000000000001000000000000000000000100001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001001000000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000010010000000100111010100001110001000100000101011101101100100000000000000000000010000000000000000000001000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000010011010000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000100110100001001110101000011100010001000001010011011011000000000000010000000000100000000000000000000010000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001101000010011101010000111000100010000010100110110110000000000000100000000001000000000000000000000100001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010000010011010000100111010100001110110000100000101011101101100000000000001000000000010000000000000000000001000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000010011010000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000100110100001001110101000011101100001000001010111011011000000000000010000000000100000000000000000000010000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001000101001000001001101000010011101010000111011000010000010100110110110010000000000100000000001000000000000000000000100001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010000010011010000100111010100001110110000100000101001101101100100000000001000000000010000000000000000000001000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000010011010000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000100110100001001110101000011100100001000001010111011011001000000000010000000000100000000000000000000010000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001000101001000001001101000010011101010000111001000010000010101110110110010000000000100000000001000000000000000000000100001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010000010011010000100111010100001110010000100000101001101101100000000000000000000000000000000000100000000001000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000011011010000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000110110100001001110101000011100100001000001010011011011000000000000000000000000000000000001000000000010000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000110110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001101101000010011101010000111010000010000010101110110110000000000000000000000000000000000010000000000100001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001000001101101000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010000011011010000100111010100001110100000100000101011101101100000000000000000000000000000000000100000000001000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000011011010000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000110110100001001110101000011101000001000001010011011011001000000000000000000000000000000001000000000010000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100101000110110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001010001101101000010011101010000111010000010000010100110110110010000000000000000000000000000000010000000000100001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001010001101101100010011101010000000111000000000000000000000000000000000000000000000000000000010001010010100011011011000100111010100001110000000100000101011101101100100000000000000000000000000000000100000000001000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010100011011011000100111010100000001110000000000000000000000000000000000000000000000000000000100010100101000110110110001001110101000011100000001000001010111011011001000000000000000000000000000000001000000000010000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100101000110111110001001110101000000011100000000000000000000000000000000000000000000000000000001001101001010001101111100010011101010000111000000010000010100110110110000000000000100000000000000000000010000000000100001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001010001101111100010011101010000000111000000000000000000000000000000000000000000000000000000010011010010100011011111000100111010100001110000000100000101001101101100000000000001000000000000000000000100000000001000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111011010100011011111000100111010100000001110000000000000000000000000000000000000000000000000000000100110110101000110111110001001110101000011101111110000001010111011011000000000000010000000000000000000001000000000010000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010110101001110111110001001110101000000011100000000000000000000000000000000000000000000000000000001000101101010011101111100010011101010000111011111100000010101110110110000000000000100000000000000000000010000000000100001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101101010111101111100010011101010000000111000000000000000000000000000000000000000000000000000000010001011010101111011111000100111010100001110111111000000101001101101100100000000001000000000000000000000100000000001000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111011011101111011111000100111110100000001110000000000000000000000000000000000000000000000000000000100110110111011110111110001001111101000011101111110000001010011011011001000000000010000000000000000000001000000000010000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110110111011110111110001001111101000000011100000000000000000000000000000000000000000000000000000001001101101110111101111100010011111010000111001111100000010101110110110010000000000100000000000000000000010000000000100001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101111110111101111100010011111110000000111000000000000000000000000000000000000000000000000000000010011011111101111011111000100111111100001110011111000000101011101101100100000000001000000000000000000000100000000001000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111011111101111011111100100111111100000001110000000000000000000000000000000000000000000000000000000100110111111011110111111001001111111000011100111110000001010011011011000000000000000000000000100000000001000000000010000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110111111011110111111001001111111000000011100000000000000000000000000000000000000000000000000000001001101111110111101111110010011111110000111001111100000010100110110110000000000000000000000001000000000010000000000100001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101111110111101111110010011111110000000111000000000000000000000000000000000000000000000000000000010011011111101111011111100100111111100001110101111000000101011101101100000000000000000000000010000000000100000000001000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111101111011111100100111111100000001110000000000000000000000000000000000000000000000000000000100011111111011110111111001001111111000011101011110000001010111011011000000000000000000000000100000000001000000000010000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111011110111111001001111111000000011100000000000000000000000000000000000000000000000000000001000111111110111101111110010011111110000111010111100000010100110110110010000000000000000000001000000000010000000000100001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111110111101111110010011111110000000111000000000000000000000000000000000000000000000000000000010001111111101111011111100100111111100001110101111000000101001101101100100000000000000000000010000000000100000000001000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111101111011111100100111111100000001110000000000000000000000000000000000000000000000000000000100011111111011110111111001001111111000011100011110000001010111011011001000000000000000000000100000000001000000000010000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111011110111111001001111111000000011100000000000000000000000000000000000000000000000000000001000111111110111101111110010011111110000111000111100000010101110110110010000000000000000000001000000000010000000000100001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111110111101111110011011111110000000111000000000000000000000000000000000000000000000000000000010001111111101111011111100110111111100001110001111000000101001101101100000000000001000000000010000000000100000000001000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111101111011111100110111111100000001110000000000000000000000000000000000000000000000000000000100011111111011110111111001101111111000011100011110000001010011011011000000000000010000000000100000000001000000000010000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111011110111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111110111101111110011011111110000111011011100000010101110110110000000000000100000000001000000000010000000000100001000010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111110111101111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111101111011111100110111111100001110110111000000101011101101100000000000001000000000010000000000100000000001000010000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111101111011111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111011110111111001101111111000011101101110000001010011011011001000000000010000000000100000000001000000000010000100001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111011111111111001101111111000000011100000000000000000000000000000000000000000000000000000001000111111110111111111110011011111110000111011011100000010100110110110010000000000100000000001000000000010000000000100001000011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110010111000000101011101101100100000000001000000000010000000000100000000001000010000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111001101111111000011100101110000001010111011011001000000000010000000000100000000001000000000010000100001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111001011100000010100110110110000000000000000000000000000000000000000000000000000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110010111000000101001101101100000000000000000000000000000000000000000000000000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111001101111111000011101001110000001010111011011000000000000000000000000000000000000000000000000000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111010011100000010101110110110000000000000000000000000000000000000000000000000000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110100111000000101001101101100100000000000000000000000000000000000000000000000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111001101111111000011101001110000001010011011011001000000000000000000000000000000000000000000000000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111110011011111110000111000011100000010101110110110010000000000000000000000000000000000000000000000000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111100110111111100001110000111000000101011101101100100000000000000000000000000000000000000000000000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111001101111111000011100001110000001010011011011000000000000010000000000000000000000000000000000000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111000011100000010100110110110000000000000100000000000000000000000000000000000000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110111011000000101011101101100000000000001000000000000000000000000000000000000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111001101111111000011101110110000001010111011011000000000000010000000000000000000000000000000000000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111110011011111110000111011101100000010100110110110010000000000100000000000000000000000000000000000000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111110110111111100001110111011000000101001101101100100000000001000000000000000000000000000000000000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111110110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101101111111000011100110110000001010111011011001000000000010000000000000000000000000000000000000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111101101111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111011011111110000111001101100000010101110110110010000000000100000000000000000000000000000000000000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110110111111100001110011011000000101001101101100000000000000000000000010000000000000000000000000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111110110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111101101111111000011100110110000001010011011011000000000000000000000000100000000000000000000000000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111101101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011011111110000111010101100000010101110110110000000000000000000000001000000000000000000000000000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110110111111100001110101011000000101011101101100000000000000000000000010000000000000000000000000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111110111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111101111111111000011101010110000001010011011011001000000000000000000000100000000000000000000000000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111101111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011111111110000111010101100000010100110110110010000000000000000000001000000000000000000000000000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110111111111100001110001011000000101011101101100100000000000000000000010000000000000000000000000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111110111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101111111111000011100010110000001010111011011001000000000000000000000100000000000000000000000000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111101111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011111111110000111000101100000010100110110110000000000000100000000001000000000000000000000000000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110111111111100001110001011000000101001101101100000000000001000000000010000000000000000000000000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111110111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101111111111000011101100110000001010111011011000000000000010000000000100000000000000000000000000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111101111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011111111110000111011001100000010101110110110000000000000100000000001000000000000000000000000000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111110111111111100001110110011000000101001101101100100000000001000000000010000000000000000000000000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101100110000001010011011011001000000000010000000000100000000000000000000000000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001001100000010101110110110010000000000100000000001000000000000000000000000000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010011000000101011101101100100000000001000000000010000000000000000000000000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100100110000001010011011011000000000000000000000000000000000001000000000000000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001001100000010100110110110000000000000000000000000000000000010000000000000000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100011000000101011101101100000000000000000000000000000000000100000000000000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101000110000001010111011011000000000000000000000000000000000001000000000000000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010001100000010100110110110010000000000000000000000000000000010000000000000000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100011000000101001101101100100000000000000000000000000000000100000000000000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000110000001010111011011001000000000000000000000000000000001000000000000000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000001100000010101110110110010000000000000000000000000000000010000000000000000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000011000000101001101101100000000000001000000000000000000000100000000000000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000110000001010011011011000000000000010000000000000000000001000000000000000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011110100000010101110110110000000000000100000000000000000000010000000000000000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111101000000101011101101100000000000001000000000000000000000100000000000000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101111010000001010011011011001000000000010000000000000000000001000000000000000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011110100000010100110110110010000000000100000000000000000000010000000000000000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011101000000101011101101100100000000001000000000000000000000100000000000000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100111010000001010111011011001000000000010000000000000000000001000000000000000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001110100000010100110110110000000000000000000000001000000000010000000000000000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011101000000101001101101100000000000000000000000010000000000100000000000000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101011010000001010111011011000000000000000000000000100000000001000000000000000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010110100000010101110110110000000000000000000000001000000000010000000000000000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101101000000101001101101100100000000000000000000010000000000100000000000000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101011010000001010011011011001000000000000000000000100000000001000000000000000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000110100000010101110110110010000000000000000000001000000000010000000000000000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001101000000101011101101100100000000000000000000010000000000100000000000000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100011010000001010011011011000000000000010000000000100000000001000000000000000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000110100000010100110110110000000000000100000000001000000000010000000000000000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110101000000101011101101100000000000001000000000010000000000100000000000000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101101010000001010111011011000000000000010000000000100000000001000000000000000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011010100000010100110110110010000000000100000000001000000000010000000000000000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110101000000101001101101100100000000001000000000010000000000100000000000000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100101010000001010111011011001000000000010000000000100000000001000000000000000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001010100000010101110110110010000000000100000000001000000000010000000000000000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010101000000101001101101100000000000000000000000000000000000000000000001000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100101010000001010011011011000000000000000000000000000000000000000000000010000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010010100000010101110110110000000000000000000000000000000000000000000000100000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100101000000101011101101100000000000000000000000000000000000000000000001000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101001010000001010011011011001000000000000000000000000000000000000000000010000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010010100000010100110110110010000000000000000000000000000000000000000000100000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000101000000101011101101100100000000000000000000000000000000000000000001000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100001010000001010111011011001000000000000000000000000000000000000000000010000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000010100000010100110110110000000000000100000000000000000000000000000000100000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000101000000101001101101100000000000001000000000000000000000000000000001000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101110010000001010111011011000000000000010000000000000000000000000000000010000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011100100000010101110110110000000000000100000000000000000000000000000000100000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111001000000101001101101100100000000001000000000000000000000000000000001000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101110010000001010011011011001000000000010000000000000000000000000000000010000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100100000010101110110110010000000000100000000000000000000000000000000100000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011001000000101011101101100100000000001000000000000000000000000000000001000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110010000001010011011011000000000000000000000000100000000000000000000010000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001100100000010100110110110000000000000000000000001000000000000000000000100000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101001000000101011101101100000000000000000000000010000000000000000000001000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101010010000001010111011011000000000000000000000000100000000000000000000010000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010100100000010100110110110010000000000000000000001000000000000000000000100000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101001000000101001101101100100000000000000000000010000000000000000000001000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100010010000001010111011011001000000000000000000000100000000000000000000010000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000100100000010101110110110010000000000000000000001000000000000000000000100000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001001000000101001101101100000000000001000000000010000000000000000000001000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100010010000001010011011011000000000000010000000000100000000000000000000010000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011000100000010101110110110000000000000100000000001000000000000000000000100000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110001000000101011101101100000000000001000000000010000000000000000000001000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101100010000001010011011011001000000000010000000000100000000000000000000010000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011000100000010100110110110010000000000100000000001000000000000000000000100000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010001000000101011101101100100000000001000000000010000000000000000000001000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100100010000001010111011011001000000000010000000000100000000000000000000010000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001000100000010100110110110000000000000000000000000000000000010000000000100000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010001000000101001101101100000000000000000000000000000000000100000000001000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000010000001010111011011000000000000000000000000000000000001000000000010000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010000100000010101110110110000000000000000000000000000000000010000000000100000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100001000000101001101101100100000000000000000000000000000000100000000001000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101000010000001010011011011001000000000000000000000000000000001000000000010000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000000100000010101110110110010000000000000000000000000000000010000000000100000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000001000000101011101101100100000000000000000000000000000000100000000001000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000010000001010011011011000000000000010000000000000000000001000000000010000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000000100000010100110110110000000000000100000000000000000000010000000000100000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111110000000101011101101100000000000001000000000000000000000100000000001000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101111100000001010111011011000000000000010000000000000000000001000000000010000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011111000000010100110110110010000000000100000000000000000000010000000000100000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111110000000101001101101100100000000001000000000000000000000100000000001000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100111100000001010111011011001000000000010000000000000000000001000000000010000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001111000000010101110110110010000000000100000000000000000000010000000000100000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011110000000101001101101100000000000000000000000010000000000100000000001000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100111100000001010011011011000000000000000000000000100000000001000000000010000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010111000000010101110110110000000000000000000000001000000000010000000000100000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101110000000101011101101100000000000000000000000010000000000100000000001000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101011100000001010011011011001000000000000000000000100000000001000000000010000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010111000000010100110110110010000000000000000000001000000000010000000000100000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001110000000101011101101100100000000000000000000010000000000100000000001000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100011100000001010111011011001000000000000000000000100000000001000000000010000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000111000000010100110110110000000000000100000000001000000000010000000000100000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001110000000101001101101100000000000001000000000010000000000100000000001000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101101100000001010111011011000000000000010000000000100000000001000000000010000010001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011011000000010101110110110000000000000100000000001000000000010000000000100000100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110110000000101001101101100100000000001000000000010000000000100000000001000001000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101101100000001010011011011001000000000010000000000100000000001000000000010000010001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001011000000010101110110110010000000000100000000001000000000010000000000100000100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010110000000101011101101100100000000001000000000010000000000100000000001000001000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100101100000001010011011011000000000000000000000000000000000000000000000000000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001011000000010100110110110000000000000000000000000000000000000000000000000001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100110000000101011101101100000000000000000000000000000000000000000000000000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101001100000001010111011011000000000000000000000000000000000000000000000000000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010011000000010100110110110010000000000000000000000000000000000000000000000001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100110000000101001101101100100000000000000000000000000000000000000000000000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100001100000001010111011011001000000000000000000000000000000000000000000000000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000011000000010101110110110010000000000000000000000000000000000000000000000001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000110000000101001101101100000000000001000000000000000000000000000000000000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100001100000001010011011011000000000000010000000000000000000000000000000000000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011101000000010101110110110000000000000100000000000000000000000000000000000001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111010000000101011101101100000000000001000000000000000000000000000000000000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101110100000001010011011011001000000000010000000000000000000000000000000000000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011101000000010100110110110010000000000100000000000000000000000000000000000001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011010000000101011101101100100000000001000000000000000000000000000000000000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110100000001010111011011001000000000010000000000000000000000000000000000000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001101000000010100110110110000000000000000000000001000000000000000000000000001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011010000000101001101101100000000000000000000000010000000000000000000000000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101010100000001010111011011000000000000000000000000100000000000000000000000000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010101000000010101110110110000000000000000000000001000000000000000000000000001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101010000000101001101101100100000000000000000000010000000000000000000000000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101010100000001010011011011001000000000000000000000100000000000000000000000000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000101000000010101110110110010000000000000000000001000000000000000000000000001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001010000000101011101101100100000000000000000000010000000000000000000000000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100010100000001010011011011000000000000010000000000100000000000000000000000000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000101000000010100110110110000000000000100000000001000000000000000000000000001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110010000000101011101101100000000000001000000000010000000000000000000000000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101100100000001010111011011000000000000010000000000100000000000000000000000000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011001000000010100110110110010000000000100000000001000000000000000000000000001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110010000000101001101101100100000000001000000000010000000000000000000000000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100100100000001010111011011001000000000010000000000100000000000000000000000000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001001000000010101110110110010000000000100000000001000000000000000000000000001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010010000000101001101101100000000000000000000000000000000000100000000000000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100100100000001010011011011000000000000000000000000000000000001000000000000000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010001000000010101110110110000000000000000000000000000000000010000000000000001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100010000000101011101101100000000000000000000000000000000000100000000000000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101000100000001010011011011001000000000000000000000000000000001000000000000000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010001000000010100110110110010000000000000000000000000000000010000000000000001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000010000000101011101101100100000000000000000000000000000000100000000000000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000100000001010111011011001000000000000000000000000000000001000000000000000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000001000000010100110110110000000000000100000000000000000000010000000000000001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000010000000101001101101100000000000001000000000000000000000100000000000000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101111000000001010111011011000000000000010000000000000000000001000000000000000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011110000000010101110110110000000000000100000000000000000000010000000000000001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111100000000101001101101100100000000001000000000000000000000100000000000000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101111000000001010011011011001000000000010000000000000000000001000000000000000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001110000000010101110110110010000000000100000000000000000000010000000000000001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011100000000101011101101100100000000001000000000000000000000100000000000000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100111000000001010011011011000000000000000000000000100000000001000000000000000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001110000000010100110110110000000000000000000000001000000000010000000000000001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101100000000101011101101100000000000000000000000010000000000100000000000000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101011000000001010111011011000000000000000000000000100000000001000000000000000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010110000000010100110110110010000000000000000000001000000000010000000000000001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101100000000101001101101100100000000000000000000010000000000100000000000000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100011000000001010111011011001000000000000000000000100000000001000000000000000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000110000000010101110110110010000000000000000000001000000000010000000000000001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001100000000101001101101100000000000001000000000010000000000100000000000000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100011000000001010011011011000000000000010000000000100000000001000000000000000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011010000000010101110110110000000000000100000000001000000000010000000000000001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110100000000101011101101100000000000001000000000010000000000100000000000000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101101000000001010011011011001000000000010000000000100000000001000000000000000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011010000000010100110110110010000000000100000000001000000000010000000000000001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010100000000101011101101100100000000001000000000010000000000100000000000000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100101000000001010111011011001000000000010000000000100000000001000000000000000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001010000000010100110110110000000000000000000000000000000000000000000000100001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110010100000000101001101101100000000000000000000000000000000000000000000001000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101001000000001010111011011000000000000000000000000000000000000000000000010000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010010000000010101110110110000000000000000000000000000000000000000000000100001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100100000000101001101101100100000000000000000000000000000000000000000001000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101001000000001010011011011001000000000000000000000000000000000000000000010000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000010000000010101110110110010000000000000000000000000000000000000000000100001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110000100000000101011101101100100000000000000000000000000000000000000000001000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100001000000001010011011011000000000000010000000000000000000000000000000010000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000010000000010100110110110000000000000100000000000000000000000000000000100001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111000000000101011101101100000000000001000000000000000000000000000000001000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101110000000001010111011011000000000000010000000000000000000000000000000010000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011100000000010100110110110010000000000100000000000000000000000000000000100001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110111000000000101001101101100100000000001000000000000000000000000000000001000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100110000000001010111011011001000000000010000000000000000000000000000000010000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001100000000010101110110110010000000000100000000000000000000000000000000100001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011000000000101001101101100000000000000000000000010000000000000000000001000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100110000000001010011011011000000000000000000000000100000000000000000000010000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010100000000010101110110110000000000000000000000001000000000000000000000100001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110101000000000101011101101100000000000000000000000010000000000000000000001000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101010000000001010011011011001000000000000000000000100000000000000000000010000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010100000000010100110110110010000000000000000000001000000000000000000000100001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110001000000000101011101101100100000000000000000000010000000000000000000001000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100010000000001010111011011001000000000000000000000100000000000000000000010000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000100000000010100110110110000000000000100000000001000000000000000000000100001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001000000000101001101101100000000000001000000000010000000000000000000001000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101100000000001010111011011000000000000010000000000100000000000000000000010000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011000000000010101110110110000000000000100000000001000000000000000000000100001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110110000000000101001101101100100000000001000000000010000000000000000000001000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101100000000001010011011011001000000000010000000000100000000000000000000010000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001000000000010101110110110010000000000100000000001000000000000000000000100001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010000000000101011101101100100000000001000000000010000000000000000000001000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100100000000001010011011011000000000000000000000000000000000001000000000010000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001000000000010100110110110000000000000000000000000000000000010000000000100001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100000000000101011101101100000000000000000000000000000000000100000000001000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101000000000001010111011011000000000000000000000000000000000001000000000010000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010000000000010100110110110010000000000000000000000000000000010000000000100001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100000000000101001101101100100000000000000000000000000000000100000000001000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100000000000001010111011011001000000000000000000000000000000001000000000010000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000000000000010101110110110010000000000000000000000000000000010000000000100001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000000000000101001101101100000000000001000000000000000000000100000000001000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000000000001010011011011000000000000010000000000000000000001000000000010000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000010111010110000000010101110110110000000000000100000000000000000000010000000000100001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000101110101001000000101011101101100000000000001000000000000000000000100000000001000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000001011101011110000001010011011011001000000000010000000000000000000001000000000010000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000010111010101010000010100110110110010000000000100000000000000000000010000000000100001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000101110001101100000101011101101100100000000001000000000000000000000100000000001000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100011111000001010111011011001000000000010000000000000000000001000000000010000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000111110000010100110110110000000000000000000000001000000000010000000000100001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110001111100000101001101101100000000000000000000000010000000000100000000001000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101101111000001010111011011000000000000000000000000100000000001000000000010000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011011110000010101110110110000000000000000000000001000000000010000000000100001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110111100000101001101101100100000000000000000000010000000000100000000001000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101101111000001010011011011001000000000000000000000100000000001000000000010000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001011110000010101110110110010000000000000000000001000000000010000000000100001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010111100000101011101101100100000000000000000000010000000000100000000001000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100101111000001010011011011000000000000010000000000100000000001000000000010000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001011110000010100110110110000000000000100000000001000000000010000000000100001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100111100000101011101101100000000000001000000000010000000000100000000001000011000101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101001111000001010111011011000000000000010000000000100000000001000000000010000110001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010011110000010100110110110010000000000100000000001000000000010000000000100001100010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100111100000101001101101100100000000001000000000010000000000100000000001000011000111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100001111000001010111011011001000000000010000000000100000000001000000000010000110001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000011110000010101110110110010000000000100000000001000000000010000000000100001100011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000111100000101001101101100000000000000000000000000000000000000000000000000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100001111000001010011011011000000000000000000000000000000000000000000000000000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011101110000010101110110110000000000000000000000000000000000000000000000000000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111011100000101011101101100000000000000000000000000000000000000000000000000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101110111000001010011011011001000000000000000000000000000000000000000000000000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011101110000010100110110110010000000000000000000000000000000000000000000000000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011011100000101011101101100100000000000000000000000000000000000000000000000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100110111000001010111011011001000000000000000000000000000000000000000000000000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001101110000010100110110110000000000000100000000000000000000000000000000000000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110011011100000101001101101100000000000001000000000000000000000000000000000000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101010111000001010111011011000000000000010000000000000000000000000000000000000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010101110000010101110110110000000000000100000000000000000000000000000000000000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110101011100000101001101101100100000000001000000000000000000000000000000000000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101010111000001010011011011001000000000010000000000000000000000000000000000000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000101110000010101110110110010000000000100000000000000000000000000000000000000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110001011100000101011101101100100000000001000000000000000000000000000000000000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100010111000001010011011011000000000000000000000000100000000000000000000000000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000101110000010100110110110000000000000000000000001000000000000000000000000000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110011100000101011101101100000000000000000000000010000000000000000000000000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101100111000001010111011011000000000000000000000000100000000000000000000000000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011001110000010100110110110010000000000000000000001000000000000000000000000000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110011100000101001101101100100000000000000000000010000000000000000000000000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100100111000001010111011011001000000000000000000000100000000000000000000000000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001001110000010101110110110010000000000000000000001000000000000000000000000000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010011100000101001101101100000000000001000000000010000000000000000000000000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100100111000001010011011011000000000000010000000000100000000000000000000000000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010001110000010101110110110000000000000100000000001000000000000000000000000000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100011100000101011101101100000000000001000000000010000000000000000000000000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101000111000001010011011011001000000000010000000000100000000000000000000000000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010001110000010100110110110010000000000100000000001000000000000000000000000000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000011100000101011101101100100000000001000000000010000000000000000000000000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100000111000001010111011011001000000000010000000000100000000000000000000000000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000001110000010100110110110000000000000000000000000000000000010000000000000000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000011100000101001101101100000000000000000000000000000000000100000000000000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101111011000001010111011011000000000000000000000000000000000001000000000000000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011110110000010101110110110000000000000000000000000000000000010000000000000000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110111101100000101001101101100100000000000000000000000000000000100000000000000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101111011000001010011011011001000000000000000000000000000000001000000000000000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001110110000010101110110110010000000000000000000000000000000010000000000000000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011101100000101011101101100100000000000000000000000000000000100000000000000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100111011000001010011011011000000000000010000000000000000000001000000000000000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001110110000010100110110110000000000000100000000000000000000010000000000000000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110101101100000101011101101100000000000001000000000000000000000100000000000000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101011011000001010111011011000000000000010000000000000000000001000000000000000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010110110000010100110110110010000000000100000000000000000000010000000000000000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110101101100000101001101101100100000000001000000000000000000000100000000000000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100011011000001010111011011001000000000010000000000000000000001000000000000000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000110110000010101110110110010000000000100000000000000000000010000000000000000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110001101100000101001101101100000000000000000000000010000000000100000000000000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100011011000001010011011011000000000000000000000000100000000001000000000000000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011010110000010101110110110000000000000000000000001000000000010000000000000000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110110101100000101011101101100000000000000000000000010000000000100000000000000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101101011000001010011011011001000000000000000000000100000000001000000000000000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111011010110000010100110110110010000000000000000000001000000000010000000000000000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110010101100000101011101101100100000000000000000000010000000000100000000000000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100101011000001010111011011001000000000000000000000100000000001000000000000000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111001010110000010100110110110000000000000100000000001000000000010000000000000000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010101100000101001101101100000000000001000000000010000000000100000000000000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101001011000001010111011011000000000000010000000000100000000001000000000000000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010010110000010101110110110000000000000100000000001000000000010000000000000000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110100101100000101001101101100100000000001000000000010000000000100000000000000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101001011000001010011011011001000000000010000000000100000000001000000000000000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000010110000010101110110110010000000000100000000001000000000010000000000000000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000101100000101011101101100100000000001000000000010000000000100000000000000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100001011000001010011011011000000000000000000000000000000000000000000000010000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000010110000010100110110110000000000000000000000000000000000000000000000100000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110111001100000101011101101100000000000000000000000000000000000000000000001000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101110011000001010111011011000000000000000000000000000000000000000000000010000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011100110000010100110110110010000000000000000000000000000000000000000000100000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111001100000101001101101100100000000000000000000000000000000000000000001000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100110011000001010111011011001000000000000000000000000000000000000000000010000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001100110000010101110110110010000000000000000000000000000000000000000000100000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011001100000101001101101100000000000001000000000000000000000000000000001000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100110011000001010011011011000000000000010000000000000000000000000000000010000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111010100110000010101110110110000000000000100000000000000000000000000000000100000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110101001100000101011101101100000000000001000000000000000000000000000000001000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101010011000001010011011011001000000000010000000000000000000000000000000010000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010100110000010100110110110010000000000100000000000000000000000000000000100000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110001001100000101011101101100100000000001000000000000000000000000000000001000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100010011000001010111011011001000000000010000000000000000000000000000000010000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000100110000010100110110110000000000000000000000001000000000000000000000100000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110001001100000101001101101100000000000000000000000010000000000000000000001000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101100011000001010111011011000000000000000000000000100000000000000000000010000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011000110000010101110110110000000000000000000000001000000000000000000000100000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110001100000101001101101100100000000000000000000010000000000000000000001000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101100011000001010011011011001000000000000000000000100000000000000000000010000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001000110000010101110110110010000000000000000000001000000000000000000000100000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110010001100000101011101101100100000000000000000000010000000000000000000001000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100100011000001010011011011000000000000010000000000100000000000000000000010000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001000110000010100110110110000000000000100000000001000000000000000000000100000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110100001100000101011101101100000000000001000000000010000000000000000000001000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101000011000001010111011011000000000000010000000000100000000000000000000010000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010000110000010100110110110010000000000100000000001000000000000000000000100000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110100001100000101001101101100100000000001000000000010000000000000000000001000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100000011000001010111011011001000000000010000000000100000000000000000000010000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000000110000010101110110110010000000000100000000001000000000000000000000100000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000001100000101001101101100000000000000000000000000000000000100000000001000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100000011000001010011011011000000000000000000000000000000000001000000000010000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011111010000010101110110110000000000000000000000000000000000010000000000100000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110111110100000101011101101100000000000000000000000000000000000100000000001000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101111101000001010011011011001000000000000000000000000000000001000000000010000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011111010000010100110110110010000000000000000000000000000000010000000000100000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110011110100000101011101101100100000000000000000000000000000000100000000001000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100111101000001010111011011001000000000000000000000000000000001000000000010000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001111010000010100110110110000000000000100000000000000000000010000000000100000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110011110100000101001101101100000000000001000000000000000000000100000000001000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101011101000001010111011011000000000000010000000000000000000001000000000010000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010111010000010101110110110000000000000100000000000000000000010000000000100000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110101110100000101001101101100100000000001000000000000000000000100000000001000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101011101000001010011011011001000000000010000000000000000000001000000000010000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111000111010000010101110110110010000000000100000000000000000000010000000000100000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110001110100000101011101101100100000000001000000000000000000000100000000001000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100011101000001010011011011000000000000000000000000100000000001000000000010000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000111010000010100110110110000000000000000000000001000000000010000000000100000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110110100000101011101101100000000000000000000000010000000000100000000001000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101101101000001010111011011000000000000000000000000100000000001000000000010000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111011011010000010100110110110010000000000000000000001000000000010000000000100000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110110110100000101001101101100100000000000000000000010000000000100000000001000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100101101000001010111011011001000000000000000000000100000000001000000000010000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111001011010000010101110110110010000000000000000000001000000000010000000000100000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110010110100000101001101101100000000000001000000000010000000000100000000001000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011100101101000001010011011011000000000000010000000000100000000001000000000010000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010011010000010101110110110000000000000100000000001000000000010000000000100000010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110100110100000101011101101100000000000001000000000010000000000100000000001000000100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000011101001101000001010011011011001000000000010000000000100000000001000000000010000001001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000111010011010000010100110110110010000000000100000000001000000000010000000000100000010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001110000110100000101011101101100100000000001000000000010000000000100000000001000000100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011100001101000001010111011011001000000000010000000000100000000001000000000010000001001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001100000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000111000011010000010100110110110000000000000000000000000000000000000000000000000001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011000000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000001110000110100000101001101101100000000000000000000000000000000000000000000000000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000110000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000011101110101000001010111011011000000000000000000000000000000000000000000000000000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001100000000000000000000000000000000000111011101010000010101110110110000000000000000000000000000000000000000000000000001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000000000000000000000000000000010111000000000000000000000000000000000000000000000000000000010011000000000000000000000000000000000001110111010100000101001101101100100000000000000000000000000000000000000000000000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000100110000000000000000000000000000000000011101110101000001010011011011001000000000000000000000000000000000000000000000000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000000000000000000000000000001011100000000000000000000000000000000000000000000000000000001001100000000000000000000000000000000000111001101010000010101110110110010000000000000000000000000000000000000000000000001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000000000000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000000000000000001110011010100000101011101101100100000000000000000000000000000000000000000000000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000000000000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000000000000000000011100110101000001010011011011000000000000010000000000000000000000000000000000000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010000000000000111001101010000010100110110110000000000000100000000000000000000000000000000000001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100000000000001110101010100000101011101101100000000000001000000000000000000000000000000000000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001000000000000011101010101000001010111011011000000000000010000000000000000000000000000000000000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010000000000000111010101010000010100110110110010000000000100000000000000000000000000000000000001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100000000000001110101010100000101001101101100100000000001000000000000000000000000000000000000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001000000000000011100010101000001010111011011001000000000010000000000000000000000000000000000000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010000000000000111000101010000010101110110110010000000000100000000000000000000000000000000000001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100000000000001110001010100000101001101101100000000000000000000000010000000000000000000000000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001000000000000011100010101000001010011011011000000000000000000000000100000000000000000000000000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001000000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010000000000000111011001010000010101110110110000000000000000000000001000000000000000000000000001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010000000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100000000000001110110010100000101011101101100000000000000000000000010000000000000000000000000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100000000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001000000000000011101100101000001010011011011001000000000000000000000100000000000000000000000000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111011001010000010100110110110010000000000000000000001000000000000000000000000001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100100000000001110010010100000101011101101100100000000000000000000010000000000000000000000000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001000000000011100100101000001010111011011001000000000000000000000100000000000000000000000000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010010000000000111001001010000010100110110110000000000000100000000001000000000000000000000000001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100100000000001110010010100000101001101101100000000000001000000000010000000000000000000000000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011101000101000001010111011011000000000000010000000000100000000000000000000000000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111010001010000010101110110110000000000000100000000001000000000000000000000000001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110100010100000101001101101100100000000001000000000010000000000000000000000000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011101000101000001010011011011001000000000010000000000100000000000000000000000000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111000001010000010101110110110010000000000100000000001000000000000000000000000001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110000010100000101011101101100100000000001000000000010000000000000000000000000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011100000101000001010011011011000000000000000000000000000000000001000000000000000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111000001010000010100110110110000000000000000000000000000000000010000000000000001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110111100100000101011101101100000000000000000000000000000000000100000000000000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001000000000011101111001000001010111011011000000000000000000000000000000000001000000000000000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111011110010000010100110110110010000000000000000000000000000000010000000000000001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010010000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100100000000001110111100100000101001101101100100000000000000000000000000000000100000000000000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100100000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001000000000011100111001000001010111011011001000000000000000000000000000000001000000000000000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001000000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010010000000000111001110010000010101110110110010000000000000000000000000000000010000000000000001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110011100100000101001101101100000000000001000000000000000000000100000000000000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011100111001000001010011011011000000000000010000000000000000000001000000000000000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111010110010000010101110110110000000000000100000000000000000000010000000000000001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110101100100000101011101101100000000000001000000000000000000000100000000000000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011101011001000001010011011011001000000000010000000000000000000001000000000000000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111010110010000010100110110110010000000000100000000000000000000010000000000000001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110001100100000101011101101100100000000001000000000000000000000100000000000000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011100011001000001010111011011001000000000010000000000000000000001000000000000000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111000110010000010100110110110000000000000000000000001000000000010000000000000001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110001100100000101001101101100000000000000000000000010000000000100000000000000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011101101001000001010111011011000000000000000000000000100000000001000000000000000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111011010010000010101110110110000000000000000000000001000000000010000000000000001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110110100100000101001101101100100000000000000000000010000000000100000000000000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011101101001000001010011011011001000000000000000000000100000000001000000000000000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111001010010000010101110110110010000000000000000000001000000000010000000000000001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110010100100000101011101101100100000000000000000000010000000000100000000000000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011100101001000001010011011011000000000000010000000000100000000001000000000000000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111001010010000010100110110110000000000000100000000001000000000010000000000000001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110100100100000101011101101100000000000001000000000010000000000100000000000000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100000000001001100000000011101001001000001010111011011000000000000010000000000100000000001000000000000000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001001100000000001000000000010011000000000111010010010000010100110110110010000000000100000000001000000000010000000000000001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010011000000000010000000000100110000000001110100100100000101001101101100100000000001000000000010000000000100000000000000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111000000000010000000000100110000000000101110000000000000000000000000000000000000000000000000000000100110000000000100000000001001100000000011100001001000001010111011011001000000000010000000000100000000001000000000000000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100000000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001000000000010011000000000111000010010000010101110110110010000000000100000000001000000000010000000000000001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001000000000010011000000000010111000000000000000000000000000000000000000000000000000000010001000000000010000000000100110000000001110000100100000101001101101100000000000000000000000000000000000000000000001000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101000000000010010000000100110000000000101110000000000000000000000000000000000000000000000000000000100010000000000100100000001001100000000011100001001000001010011011011000000000000000000000000000000000000000000000010000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010000000000100100000001001100000000001011100000000000000000000000000000000000000000000000000000001000100000000001001000000010011000000000111011100010000010101110110110000000000000000000000000000000000000000000000100001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010100000000001001000000010011100000000010111000000000000000000000000000000000000000000000000000000010001000000000010010000000100111000000001110111000100000101011101101100000000000000000000000000000000000000000000001000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000010010000000100111000100000101110000000000000000000000000000000000000000000000000000000100010100100000100100000001001110001000011101110001000001010011011011001000000000000000000000000000000000000000000010000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100100000100100000001001110001000001011100000000000000000000000000000000000000000000000000000001000101001000001001000000010011100010000111011100010000010100110110110010000000000000000000000000000000000000000000100001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001001000000010011100010000010111000000000000000000000000000000000000000000000000000000010011010010000010010000000100111000100001110011000100000101011101101100100000000000000000000000000000000000000000001000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000010010000000100111000100000001110000000000000000000000000000000000000000000000000000000100110100100000100100000001001110001000011100110001000001010111011011001000000000000000000000000000000000000000000010000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000100100000001001110001000000011100000000000000000000000000000000000000000000000000001001001101001000001001000000010011100010000111001100010000010100110110110000000000000100000000000000000000000000000000100001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001001000000010011100010000000111000000000000000000000000000000000000000000000000000000010011010010000010010000000100111000100001110011000100000101001101101100000000000001000000000000000000000000000000001000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000010010000000100111000100000001110000000000000000000000000000000000000000000000000000000100110100100000100100000001001110001000011101010001000001010111011011000000000000010000000000000000000000000000000010000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000100100000001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001000000010011101010000111010100010000010101110110110000000000000100000000000000000000000000000000100001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001001000000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000010010000000100111010100001110101000100000101001101101100100000000001000000000000000000000000000000001000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000010010000000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000100100000001001110101000011101010001000001010011011011001000000000010000000000000000000000000000000010000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100100000100110000001001110101000000011100000000000000000000000000000000000000000000000000000001000101001000001001100000010011101010000111000100010000010101110110110010000000000100000000000000000000000000000000100001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010000010011010000100111010100001110001000100000101011101101100100000000001000000000000000000000000000000001000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000010011010000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000100110100001001110101000011100010001000001010011011011000000000000000000000000100000000000000000000010000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001000101001000001001101000010011101010000111000100010000010100110110110000000000000000000000001000000000000000000000100001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010000010011010000100111010100001110110000100000101011101101100000000000000000000000010000000000000000000001000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000010011010000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000100110100001001110101000011101100001000001010111011011000000000000000000000000100000000000000000000010000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001101000010011101010000111011000010000010100110110110010000000000000000000001000000000000000000000100001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001001101000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000010011010000100111010100001110110000100000101001101101100100000000000000000000010000000000000000000001000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000010011010000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000100110100001001110101000011100100001000001010111011011001000000000000000000000100000000000000000000010000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000100110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001001101000010011101010000111001000010000010101110110110010000000000000000000001000000000000000000000100001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101001000001101101000010011101010000000111000000000000000000000000000000000000000000000000000000010011010010000011011010000100111010100001110010000100000101001101101100000000000001000000000010000000000000000000001000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111010010000011011010000100111010100000001110000000000000000000000000000000000000000000000000000000100110100100000110110100001001110101000011100100001000001010011011011000000000000010000000000100000000000000000000010000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110100100000110110100001001110101000000011100000000000000000000000000000000000000000000000000000001001101001000001101101000010011101010000111010000010000010101110110110000000000000100000000001000000000000000000000100001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001000001101101000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010000011011010000100111010100001110100000100000101011101101100000000000001000000000010000000000000000000001000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010000011011010000100111010100000001110000000000000000000000000000000000000000000000000000000100010100100000110110100001001110101000011101000001000001010011011011001000000000010000000000100000000000000000000010000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100100000110110100001001110101000000011100000000000000000000000000000000000000000000000000000001000101001000001101101000010011101010000111010000010000010100110110110010000000000100000000001000000000000000000000100001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101001010001101101000010011101010000000111000000000000000000000000000000000000000000000000000000010001010010100011011010000100111010100001110000000100000101011101101100100000000001000000000010000000000000000000001000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101010010100011011011000100111010100000001110000000000000000000000000000000000000000000000000000000100010100101000110110110001001110101000011100000001000001010111011011001000000000010000000000100000000000000000000010000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010100101000110111110001001110101000000011100000000000000000000000000000000000000000000000000000001000101001010001101111100010011101010000111000000010000010100110110110000000000000000000000000000000000010000000000100001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011101101010001101111100010011101010000000111000000000000000000000000000000000000000000000000000000010011011010100011011111000100111010100001110000000100000101001101101100000000000000000000000000000000000100000000001000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111011010100111011111000100111010100000001110000000000000000000000000000000000000000000000000000000100110110101001110111110001001110101000011101111110000001010111011011000000000000000000000000000000000001000000000010000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001110110101011110111110001001110101000000011100000000000000000000000000000000000000000000000000000001001101101010111101111100010011101010000111011111100000010101110110110000000000000000000000000000000000010000000000100001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101101110111101111100010011111010000000111000000000000000000000000000000000000000000000000000000010001011011101111011111000100111110100001110111111000000101001101101100100000000000000000000000000000000100000000001000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101011011101111011111000100111110100000001110000000000000000000000000000000000000000000000000000000100010110111011110111110001001111101000011101111110000001010011011011001000000000000000000000000000000001000000000010000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010110111011110111110001001111101000000011100000000000000000000000000000000000000000000000000000001000101101110111101111100010011111010000111001111100000010101110110110010000000000000000000000000000000010000000000100001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010101101110111101111100010011111010000000111000000000000000000000000000000000000000000000000000000010001011011101111011111000100111110100001110011111000000101011101101100100000000000000000000000000000000100000000001000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101011011101111011111000100111111100000001110000000000000000000000000000000000000000000000000000000100010110111011110111110001001111111000011100111110000001010011011011000000000000010000000000000000000001000000000010000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001010111111011110111111001001111111000000011100000000000000000000000000000000000000000000000000000001000101111110111101111110010011111110000111001111100000010100110110110000000000000100000000000000000000010000000000100001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111110111101111110010011111110000000111000000000000000000000000000000000000000000000000000000010001111111101111011111100100111111100001110101111000000101011101101100000000000001000000000000000000000100000000001000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111101111011111100100111111100000001110000000000000000000000000000000000000000000000000000000100011111111011110111111001001111111000011101011110000001010111011011000000000000010000000000000000000001000000000010000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111011110111111001001111111000000011100000000000000000000000000000000000000000000000000000001001111111110111101111110010011111110000111010111100000010100110110110010000000000100000000000000000000010000000000100001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111110111101111110010011111110000000111000000000000000000000000000000000000000000000000000000010001111111101111011111100100111111100001110101111000000101001101101100100000000001000000000000000000000100000000001000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111101111011111100100111111100000001110000000000000000000000000000000000000000000000000000000100111111111011110111111001001111111000011100011110000001010111011011001000000000010000000000000000000001000000000010000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111011110111111001001111111000000011100000000000000000000000000000000000000000000000000000001001111111110111101111110010011111110000111000111100000010101110110110010000000000100000000000000000000010000000000100001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111110111101111110010011111110000000111000000000000000000000000000000000000000000000000000000010011111111101111011111100100111111100001110001111000000101001101101100000000000000000000000010000000000100000000001000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111101111011111100100111111100000001110000000000000000000000000000000000000000000000000000000100111111111011110111111001001111111000011100011110000001010011011011000000000000000000000000100000000001000000000010000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111011110111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111110111101111110011011111110000111011011100000010101110110110000000000000000000000001000000000010000000000100001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111110111101111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111101111011111100110111111100001110110111000000101011101101100000000000000000000000010000000000100000000001000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111101111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111011111111111001101111111000011101101110000001010011011011001000000000000000000000100000000001000000000010000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111011011100000010100110110110010000000000000000000001000000000010000000000100001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110010111000000101011101101100100000000000000000000010000000000100000000001000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111001101111111000011100101110000001010111011011001000000000000000000000100000000001000000000010000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111110011011111110000111001011100000010100110110110000000000000100000000001000000000010000000000100001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111100110111111100001110010111000000101001101101100000000000001000000000010000000000100000000001000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111001101111111000011101001110000001010111011011000000000000010000000000100000000001000000000010000101001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111110011011111110000111010011100000010101110110110000000000000100000000001000000000010000000000100001010011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111100110111111100001110100111000000101001101101100100000000001000000000010000000000100000000001000010100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111001101111111000011101001110000001010011011011001000000000010000000000100000000001000000000010000101001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111110011011111110000111000011100000010101110110110010000000000100000000001000000000010000000000100001010010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110000111000000101011101101100100000000001000000000010000000000100000000001000010100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111001101111111000011100001110000001010011011011000000000000000000000000000000000000000000000000000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111000011100000010100110110110000000000000000000000000000000000000000000000000000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110111011000000101011101101100000000000000000000000000000000000000000000000000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111100110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111001101111111000011101110110000001010111011011000000000000000000000000000000000000000000000000000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111001101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111110011011111110000111011101100000010100110110110010000000000000000000000000000000000000000000000000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111110011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111100110111111100001110111011000000101001101101100100000000000000000000000000000000000000000000000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111110110111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101101111111000011100110110000001010111011011001000000000000000000000000000000000000000000000000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111101101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011011111110000111001101100000010101110110110010000000000000000000000000000000000000000000000000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110110111111100001110011011000000101001101101100000000000001000000000000000000000000000000000000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111110110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111101101111111000011100110110000001010011011011000000000000010000000000000000000000000000000000000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111101101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011011111110000111010101100000010101110110110000000000000100000000000000000000000000000000000000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111011011111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110110111111100001110101011000000101011101101100000000000001000000000000000000000000000000000000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111110110111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111101101111111000011101010110000001010011011011001000000000010000000000000000000000000000000000000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111101101111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011011111110000111010101100000010100110110110010000000000100000000000000000000000000000000000000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111110111111111100001110001011000000101011101101100100000000001000000000000000000000000000000000000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111110111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111101111111111000011100010110000001010111011011001000000000010000000000000000000000000000000000000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111101111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111011111111110000111000101100000010100110110110000000000000000000000001000000000000000000000000000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111110111111111100001110001011000000101001101101100000000000000000000000010000000000000000000000000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111110111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111101111111111000011101100110000001010111011011000000000000000000000000100000000000000000000000000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111101111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111011111111110000111011001100000010101110110110000000000000000000000001000000000000000000000000000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111011111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111110111111111100001110110011000000101001101101100100000000000000000000010000000000000000000000000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101100110000001010011011011001000000000000000000000100000000000000000000000000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001001100000010101110110110010000000000000000000001000000000000000000000000000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110010011000000101011101101100100000000000000000000010000000000000000000000000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100100110000001010011011011000000000000010000000000100000000000000000000000000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111001001100000010100110110110000000000000100000000001000000000000000000000000000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110100011000000101011101101100000000000001000000000010000000000000000000000000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101000110000001010111011011000000000000010000000000100000000000000000000000000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111010001100000010100110110110010000000000100000000001000000000000000000000000000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110100011000000101001101101100100000000001000000000010000000000000000000000000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000110000001010111011011001000000000010000000000100000000000000000000000000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000001100000010101110110110010000000000100000000001000000000000000000000000000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110000011000000101001101101100000000000000000000000000000000000100000000000000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100000110000001010011011011000000000000000000000000000000000001000000000000000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011110100000010101110110110000000000000000000000000000000000010000000000000000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110111101000000101011101101100000000000000000000000000000000000100000000000000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101111010000001010011011011001000000000000000000000000000000001000000000000000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111011110100000010100110110110010000000000000000000000000000000010000000000000000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110011101000000101011101101100100000000000000000000000000000000100000000000000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100111010000001010111011011001000000000000000000000000000000001000000000000000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111001110100000010100110110110000000000000100000000000000000000010000000000000000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110011101000000101001101101100000000000001000000000000000000000100000000000000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101011010000001010111011011000000000000010000000000000000000001000000000000000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111010110100000010101110110110000000000000100000000000000000000010000000000000000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110101101000000101001101101100100000000001000000000000000000000100000000000000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011101011010000001010011011011001000000000010000000000000000000001000000000000000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001111111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001001111111111111111111111111111111110000111000110100000010101110110110010000000000100000000000000000000010000000000000000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000011111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010011111111111111111111111111111111100001110001101000000101011101101100100000000001000000000000000000000100000000000000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000111111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100111111111111111111111111111111111000011100011010000001010011011011000000000000000000000000100000000001000000000000000011001010000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111000110100000010100110110110000000000000000000000001000000000010000000000000000110011100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110101000000101011101101100000000000000000000000010000000000100000000000000001100101000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011101101010000001010111011011000000000000000000000000100000000001000000000000000011001110000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000001011111111111111111111111111111111000000011100000000000000000000000000000000000000000000000000000001000111111111111111111111111111111110000111011010100000010100110110110010000000000000000000001000000000010000000000000000110010100000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000010111111111111111111111111111111110000000111000000000000000000000000000000000000000000000000000000010001111111111111111111111111111111100001110110101000000101001101101100100000000000000000000010000000000100000000000000001100111000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000101111111111111111111111111111111100000001110000000000000000000000000000000000000000000000000000000100011111111111111111111111111111111000011100101010000001010111011011001000000000000000000000100000000001000000000000000011001 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 'tx:U_tx|fifo_reader:U_fifo_reader|meta_current.state.META_DOWNCOUNT' == rising edge 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/software/000077500000000000000000000000001457144405000232245ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/software/bladeRF_nios/000077500000000000000000000000001457144405000255535ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/software/bladeRF_nios/.cproject000066400000000000000000001106311457144405000273670ustar00rootroot00000000000000 make mem_init_install true false false make mem_init_generate true false false make help true false false bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/software/bladeRF_nios/.project000066400000000000000000000055421457144405000272300ustar00rootroot00000000000000 bladeRF_nios com.altera.sbtgui.project.makefileBuilder com.altera.sbtgui.project.makefileBuilder org.eclipse.cdt.managedbuilder.core.genmakebuilder clean,full,incremental, ?name? org.eclipse.cdt.make.core.append_environment true org.eclipse.cdt.make.core.autoBuildTarget all org.eclipse.cdt.make.core.buildArguments org.eclipse.cdt.make.core.buildCommand make org.eclipse.cdt.make.core.buildLocation ${workspace_loc://bladeRF_nios} org.eclipse.cdt.make.core.cleanBuildTarget clean org.eclipse.cdt.make.core.contents org.eclipse.cdt.make.core.activeConfigSettings org.eclipse.cdt.make.core.enableAutoBuild false org.eclipse.cdt.make.core.enableCleanBuild true org.eclipse.cdt.make.core.enableFullBuild true org.eclipse.cdt.make.core.fullBuildTarget all org.eclipse.cdt.make.core.stopOnError true org.eclipse.cdt.make.core.useDefaultBuildCmd true org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder full,incremental, org.eclipse.cdt.core.cnature org.eclipse.cdt.managedbuilder.core.managedBuildNature org.eclipse.cdt.managedbuilder.core.ScannerConfigNature org.eclipse.cdt.core.ccnature com.altera.sbtgui.project.SBTGUINature com.altera.sbtgui.project.SBTGUIAppNature com.altera.sbtgui.project.SBTGUIManagedNature bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/software/bladeRF_nios/.settings/000077500000000000000000000000001457144405000274715ustar00rootroot00000000000000language.settings.xml000066400000000000000000000020731457144405000335600ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/software/bladeRF_nios/.settings bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/software/bladeRF_nios/Makefile000066400000000000000000000072001457144405000272120ustar00rootroot00000000000000#------------------------------------------------------------------------------ # VARIABLES TO BE DEFINED BY PLATFORM MAKEFILE #------------------------------------------------------------------------------ # paths are relative to hdl/fpga/platforms/bladerf-micro/software/bladeRF_nios FPGA_COMMON_DIR := ../../../../../../fpga_common LIBBLADERF_DIR := ../../../../../../host/libraries/libbladeRF BLADERF_COMMON_DIR := ../../../common/bladerf/software/bladeRF_nios HOST_COMMON_DIR := ../../../../../../host/common FIRMWARE_COMMON_DIR := ../../../../../../firmware_common QUARTUS_WORKDIR := ../../../../../quartus/${WORKDIR} NIOS_BUILD_OUTDIR := $(QUARTUS_WORKDIR)/bladeRF_nios MEM_INIT_DIR := $(NIOS_BUILD_OUTDIR)/mem_init BSP_BUILD_OUTDIR := $(QUARTUS_WORKDIR)/bladeRF_nios_bsp QUARTUS_OUTDIR := $(QUARTUS_WORKDIR)/output_files ALT_INCLUDE_DIRS += ./src C_SRCS += ./src/bladeRF_nios.c C_SRCS += $(FPGA_COMMON_DIR)/src/ad936x_helpers.c C_SRCS += $(FPGA_COMMON_DIR)/src/bladerf2_common.c C_SRCS += $(BLADERF_COMMON_DIR)/src/devices_rfic.c C_SRCS += $(BLADERF_COMMON_DIR)/src/devices_rfic_cmds.c C_SRCS += $(BLADERF_COMMON_DIR)/src/devices_rfic_queue.c C_SRCS += $(BLADERF_COMMON_DIR)/src/pkt_retune2.c C_SRCS += $(HOST_COMMON_DIR)/src/range.c CFLAGS += -DBOARD_BLADERF_MICRO # libad936x build configuration and lib inclusion # These variables need to be set before including the common Makefile. LIBAD936X_BUILDDIR := $(QUARTUS_WORKDIR)/libad936x LIBAD936X_DIR := ../../../../fpga/ip/analogdevicesinc/no_OS INC_DIRS += $(LIBAD936X_BUILDDIR) \ ../$(LIBAD936X_DIR)/include \ ../../../../../../host/common/include LIB_DIRS += $(LIBAD936X_BUILDDIR) LDDEPS += $(LIBAD936X_BUILDDIR)/libad936x.a LIBS += ad936x #------------------------------------------------------------------------------ # INCLUDE THE COMMON MAKEFILE #------------------------------------------------------------------------------ include $(BLADERF_COMMON_DIR)/Makefile #------------------------------------------------------------------------------ # AD936X LIBRARY #------------------------------------------------------------------------------ # Two-stage build: # - cmake: shuffle files, apply patches, generate Makefile # - make: do the actual compile, generate libad936x.a # if any source file changes, re-run cmake so that patching, etc, occurs LIBAD936X_MAKE_DEP := ../../../../ip/analogdevicesinc/no_OS/CMakeLists.txt \ ../../../../../../thirdparty/analogdevicesinc/no-OS/ad9361/sw/* \ ../../../../../../thirdparty/analogdevicesinc/no-OS_local/patches/* \ ../../../../../../thirdparty/analogdevicesinc/no-OS_local/platform_bladerf2_headless/* LIBAD936X_BUILD_DEP := $(LIBAD936X_BUILDDIR)/Makefile # override clean_libs to ensure libad936x gets cleaned clean_libs: $(LIB_CLEAN_TARGETS) clean_libad936x clean_libad936x: @$(ECHO) Info: Cleaning libad936x @$(MAKE) --no-print-directory -C $(LIBAD936X_BUILDDIR) clean $(LIBAD936X_BUILDDIR)/Makefile: $(LIBAD936X_MAKE_DEP) @$(ECHO) Info: Generating libad936x Makefile @mkdir -p $(LIBAD936X_BUILDDIR) @cd $(LIBAD936X_BUILDDIR) && \ cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=$(LIBAD936X_DIR)/cmake/nios-toolchain.cmake $(LIBAD936X_DIR) $(LIBAD936X_BUILDDIR)/libad936x.a: $(LIBAD936X_BUILD_DEP) @$(ECHO) Info: Building libad936x @$(MAKE) --no-print-directory -C $(LIBAD936X_BUILDDIR) ad936x bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/software/bladeRF_nios/pcsim.mk000066400000000000000000000013001457144405000272110ustar00rootroot00000000000000#------------------------------------------------------------------------------ # VARIABLES TO BE DEFINED BY PLATFORM MAKEFILE #------------------------------------------------------------------------------ FPGA_COMMON_DIR := ../../../../../../fpga_common BLADERF_COMMON_DIR := ../../../common/bladerf/software/bladeRF_nios QUARTUS_WORKDIR := ../../../../../quartus/work/bladerf-micro NIOS_BUILD_OUTDIR := $(QUARTUS_WORKDIR)/bladeRF_nios #------------------------------------------------------------------------------ # INCLUDE THE COMMON MAKEFILE #------------------------------------------------------------------------------ include $(BLADERF_COMMON_DIR)/pcsim.mk bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/software/bladeRF_nios/src/000077500000000000000000000000001457144405000263425ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/software/bladeRF_nios/src/bladeRF_nios.c000066400000000000000000000351511457144405000310420ustar00rootroot00000000000000/* This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ /* Define this to run this code on a PC instead of the NIOS II */ //#define BLADERF_NULL_HARDWARE /* Will send debug alt_printf info to JTAG console while running on NIOS. * This can slow performance and cause timing issues... be careful. */ //#define BLADERF_NIOS_DEBUG #include #include #include #include #include #include "devices.h" #include "pkt_handler.h" #include "pkt_8x8.h" #include "pkt_8x16.h" #include "pkt_8x32.h" #include "pkt_8x64.h" #include "pkt_16x64.h" #include "pkt_32x32.h" #include "pkt_retune2.h" #include "pkt_legacy.h" #include "debug.h" #define BLADERF_DEVICE_NAME "Nuand bladeRF 2.0 Micro" #ifdef BLADERF_NIOS_PC_SIMULATION extern bool run_nios; # define HAVE_REQUEST() ({ \ have_request = !have_request; \ if (have_request) { \ command_uart_read_request( (uint8_t*) pkt.req); \ } \ have_request; \ }) /* We need to reset the response buffer to known values so we can * compare against expected test case responses */ # define RESET_RESPONSE_BUF #else # define run_nios true # define HAVE_REQUEST() (pkt.ready == true) #endif #ifdef RESET_RESPONSE_BUF # undef RESET_RESPONSE_BUF # define RESET_RESPONSE_BUF() do { \ memset(pkt.resp, 0xff, NIOS_PKT_LEN); \ } while (0) #else # define RESET_RESPONSE_BUF() do {} while (0) #endif /* When adding packet handlers here, you must also ensure that you update * the bladeRF/hdl/fpga/ip/nuand/command_uart/vhdl/command_uart.vhd * to include the magic header byte value in the `magics` array. */ static const struct pkt_handler pkt_handlers[] = { PKT_RETUNE2, PKT_8x8, PKT_8x16, PKT_8x32, PKT_8x64, PKT_16x64, PKT_32x32, PKT_LEGACY, }; /* A structure that represents a point on a line. Used for calibrating * the VCTCXO */ typedef struct point { int32_t x; // Error counts uint16_t y; // DAC count } point_t; typedef struct line { point_t point[2]; int32_t slope; uint16_t y_intercept; // in DAC counts } line_t; /* State machine for VCTCXO tuning */ typedef enum state { COARSE_TUNE_MIN, COARSE_TUNE_MAX, COARSE_TUNE_DONE, FINE_TUNE, DO_NOTHING } state_t; int main(void) { DBG(BLADERF_DEVICE_NAME " FPGA v%x.%x.%x\n", FPGA_VERSION_MAJOR, FPGA_VERSION_MINOR, FPGA_VERSION_PATCH); DBG("Built " __DATE__ " " __TIME__ " with love <3\n"); #ifdef BLADERF_NIOS_LIBAD936X DBG("libad936x found: This FPGA image has magic transgirl powers\n"); #endif // BLADERF_NIOS_LIBAD936X uint8_t i; /* Pointer to currently active packet handler */ const struct pkt_handler *handler; struct pkt_buf pkt; struct vctcxo_tamer_pkt_buf vctcxo_tamer_pkt; /* Marked volatile to ensure we actually read the byte populated by * the UART ISR */ const volatile uint8_t *magic = &pkt.req[PKT_MAGIC_IDX]; volatile bool have_request = false; #ifdef BLADERF_NIOS_DEBUG // Twiddler: gratuitous screen placebo size_t const TWIDDLE_DELAY_CONSTANT = 100000; size_t twiddle_count = 0; enum { TWIDDLE_STATE_PIPE = '|', TWIDDLE_STATE_FWD_SLASH = '/', TWIDDLE_STATE_HYPHEN = '-', TWIDDLE_STATE_BACKSLASH = '\\', } twiddle_state = TWIDDLE_STATE_PIPE; #endif // Trim DAC constants const uint16_t trimdac_min = 0x28F5; const uint16_t trimdac_max = 0xF5C3; // Trim DAC calibration line line_t trimdac_cal_line; // VCTCXO Tune State machine state_t tune_state = COARSE_TUNE_MIN; // Set the known/default values of the trim DAC cal line trimdac_cal_line.point[0].x = 0; trimdac_cal_line.point[0].y = trimdac_min; trimdac_cal_line.point[1].x = 0; trimdac_cal_line.point[1].y = trimdac_max; trimdac_cal_line.slope = 0; trimdac_cal_line.y_intercept = 0; /* Sanity check */ ASSERT(PKT_MAGIC_IDX == 0); memset(&pkt, 0, sizeof(pkt)); pkt.ready = false; bladerf_nios_init(&pkt, &vctcxo_tamer_pkt); /* Initialize packet handlers */ for (i = 0; i < ARRAY_SIZE(pkt_handlers); i++) { if (pkt_handlers[i].init != NULL) { pkt_handlers[i].init(); } } /* ==================== * AD9361 SPI TESTS * ==================== */ #ifdef BLADERF_NIOS_AD9361_SPI_TESTS uint16_t adi_spi_addr; uint64_t adi_spi_data; while ( 1 ) { // W/Rb | NB2:0 | A[9:0] adi_spi_addr = (0x0 << 15) | (0x0 << 12) | (0x000 << 0); adi_spi_data = UINT64_C(0x0); // Read AD9361 registers 0x045-0x04c for( i=0x45; i < 0x4d; i++ ) { adi_spi_addr = (adi_spi_addr & 0xfc00) | i; adi_spi_data = adi_spi_read(adi_spi_addr); } // Read 0x028 adi_spi_addr = (adi_spi_addr & 0xfc00) | 0x28; adi_spi_data = adi_spi_read(adi_spi_addr); // Write 0x5a to 0x028 adi_spi_addr = (adi_spi_addr & 0xfc00) | 0x28; adi_spi_data = (UINT64_C(0x5a) << (64-8)); adi_spi_write((adi_spi_addr | 0x8000), adi_spi_data); // Read 0x028 adi_spi_addr = (adi_spi_addr & 0xfc00) | 0x28; adi_spi_data = adi_spi_read(adi_spi_addr); // Write 0x5a to 0x028 adi_spi_addr = (adi_spi_addr & 0xfc00) | 0x28; adi_spi_data = (UINT64_C(0x0) << (64-8)); adi_spi_write((adi_spi_addr | 0x8000), adi_spi_data); usleep(100); } #endif /* ==================== * AD5621 SPI TESTS * ==================== */ #ifdef BLADERF_NIOS_AD5621_SPI_TESTS uint16_t dac_val; // Disable the ADF400x control_reg_write( 0x0 ); usleep(2000000); while( 1 ) { for( i = 0; i < 6; i++ ) { // Calculate DAC value dac_val = ((((uint16_t)i) * 0x333) << 2) & 0x3fff; // Write DAC value ad56x1_vctcxo_trim_dac_write(dac_val); usleep(2000000); // Tristate the DAC, keeping same DAC value in register ad56x1_vctcxo_trim_dac_write(dac_val | 0xc000 ); usleep(2000000); } } #endif /* ==================== * ADF4001 SPI TESTS * ==================== */ #ifdef BLADERF_NIOS_ADF4001_SPI_TESTS // Tristate the DAC ad56x1_vctcxo_trim_dac_write( 0xc000 ); while( 1 ) { // Enable the ADF400x control_reg_write( 0x1 << 11 ); usleep(2000000); // 0x000003 -- MUXOUT = 'Z'; CP = Normal adf400x_spi_write(0x3); usleep(2000000); // 0x000137 -- MUXOUT = AVDD (3.3 V); CP = 'Z' adf400x_spi_write(0x137); usleep(2000000); // 0x000177 -- MUXOUT = DGND; CP = 'Z' adf400x_spi_write(0x177); usleep(2000000); // 0x000167 -- MUXOUT = SDO; CP = 'Z' //adf400x_spi_write(0x167); //usleep(2000000); for( i = 0; i < 4; i++ ) { // Read all the registers adf400x_spi_read((uint32_t)i); usleep(100); } // Disable the ADF400x control_reg_write( 0x0 ); usleep(2000000); } #endif DBG("=== System Ready ===\n"); while (run_nios) { have_request = HAVE_REQUEST(); #ifdef BLADERF_NIOS_DEBUG if (have_request) { twiddle_count = 0; } else if (TWIDDLE_DELAY_CONSTANT == ++twiddle_count) { DBG("%c\b", twiddle_state); switch (twiddle_state) { case TWIDDLE_STATE_PIPE: twiddle_state = TWIDDLE_STATE_FWD_SLASH; break; case TWIDDLE_STATE_FWD_SLASH: twiddle_state = TWIDDLE_STATE_HYPHEN; break; case TWIDDLE_STATE_HYPHEN: twiddle_state = TWIDDLE_STATE_BACKSLASH; break; case TWIDDLE_STATE_BACKSLASH: twiddle_state = TWIDDLE_STATE_PIPE; break; } twiddle_count = 0; } #endif /* We have a command in the UART */ if (have_request) { pkt.ready = false; handler = NULL; /* Determine which packet handler should receive this message */ for (i = 0; i < ARRAY_SIZE(pkt_handlers); i++) { if (pkt_handlers[i].magic == *magic) { handler = &pkt_handlers[i]; } } if (handler == NULL) { /* We somehow got out of sync. Throw away request data until * we hit a magic value */ DBG("Got invalid magic value: 0x%x\n", pkt.req[PKT_MAGIC_IDX]); continue; } print_bytes("Request data:", pkt.req, NIOS_PKT_LEN); /* If building with RESET_RESPONSE_BUF defined, reset response buffer * contents to ensure unused values are known values. */ RESET_RESPONSE_BUF(); /* Process data and execute requested actions */ handler->exec(&pkt); /* Write response to host */ command_uart_write_response(pkt.resp); } else { /* Temporarily putting the VCTCXO Calibration stuff here. */ if( vctcxo_tamer_pkt.ready ) { vctcxo_tamer_pkt.ready = false; switch(tune_state) { case COARSE_TUNE_MIN: /* Tune to the minimum DAC value */ vctcxo_trim_dac_write( 0x08, trimdac_min ); /* State to enter upon the next interrupt */ tune_state = COARSE_TUNE_MAX; break; case COARSE_TUNE_MAX: /* We have the error from the minimum DAC setting, store it * as the 'x' coordinate for the first point */ trimdac_cal_line.point[0].x = vctcxo_tamer_pkt.pps_1s_error; /* Tune to the maximum DAC value */ vctcxo_trim_dac_write( 0x08, trimdac_max ); /* State to enter upon the next interrupt */ tune_state = COARSE_TUNE_DONE; break; case COARSE_TUNE_DONE: /* We have the error from the maximum DAC setting, store it * as the 'x' coordinate for the second point */ trimdac_cal_line.point[1].x = vctcxo_tamer_pkt.pps_1s_error; /* We now have two points, so we can calculate the equation * for a line plotted with DAC counts on the Y axis and * error on the X axis. We want a PPM of zero, which ideally * corresponds to the y-intercept of the line. */ trimdac_cal_line.slope = ( (trimdac_cal_line.point[1].y - trimdac_cal_line.point[0].y) / (trimdac_cal_line.point[1].x - trimdac_cal_line.point[0].x) ); trimdac_cal_line.y_intercept = ( trimdac_cal_line.point[0].y - (trimdac_cal_line.slope * trimdac_cal_line.point[0].x) ); /* Set the trim DAC count to the y-intercept */ vctcxo_trim_dac_write( 0x08, trimdac_cal_line.y_intercept ); /* State to enter upon the next interrupt */ tune_state = FINE_TUNE; break; case FINE_TUNE: /* We should be extremely close to a perfectly tuned * VCTCXO, but some minor adjustments need to be made */ /* Check the magnitude of the errors starting with the * one second count. If an error is greater than the maxium * tolerated error, adjust the trim DAC by the error (Hz) * multiplied by the slope (in counts/Hz) and scale the * result by the precision interval (e.g. 1s, 10s, 100s). */ if( vctcxo_tamer_pkt.pps_1s_error_flag ) { vctcxo_trim_dac_write( 0x08, (vctcxo_trim_dac_value - ((vctcxo_tamer_pkt.pps_1s_error * trimdac_cal_line.slope)/1)) ); } else if( vctcxo_tamer_pkt.pps_10s_error_flag ) { vctcxo_trim_dac_write( 0x08, (vctcxo_trim_dac_value - ((vctcxo_tamer_pkt.pps_10s_error * trimdac_cal_line.slope)/10)) ); } else if( vctcxo_tamer_pkt.pps_100s_error_flag ) { vctcxo_trim_dac_write( 0x08, (vctcxo_trim_dac_value - ((vctcxo_tamer_pkt.pps_100s_error * trimdac_cal_line.slope)/100)) ); } break; default: break; } /* switch */ /* Take PPS counters out of reset */ vctcxo_tamer_reset_counters( false ); /* Enable interrupts */ vctcxo_tamer_enable_isr( true ); } /* VCTCXO Tamer interrupt */ for (i = 0; i < ARRAY_SIZE(pkt_handlers); i++) { if (pkt_handlers[i].do_work != NULL) { pkt_handlers[i].do_work(); } } } } return 0; } bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/software/bladeRF_nios/src/fpga_version.h000066400000000000000000000010251457144405000311730ustar00rootroot00000000000000/* This file defines the FPGA version number. * In the future, this could/should moved to a QSYS port */ #ifndef BLADERF_FPGA_VERSION_H_ #define BLADERF_FPGA_VERSION_H_ #include #define FPGA_VERSION_ID 0x7777 #define FPGA_VERSION_MAJOR 0 #define FPGA_VERSION_MINOR 15 #define FPGA_VERSION_PATCH 3 #define FPGA_VERSION ((uint32_t)( FPGA_VERSION_MAJOR | \ (FPGA_VERSION_MINOR << 8) | \ (FPGA_VERSION_PATCH << 16) ) ) #endif bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/software/foxhunt/000077500000000000000000000000001457144405000247175ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/software/foxhunt/Makefile000066400000000000000000000072531457144405000263660ustar00rootroot00000000000000#------------------------------------------------------------------------------ # VARIABLES TO BE DEFINED BY PLATFORM MAKEFILE #------------------------------------------------------------------------------ # paths are relative to hdl/fpga/platforms/bladerf-micro/software/foxhunt FPGA_COMMON_DIR := ../../../../../../fpga_common LIBBLADERF_DIR := ../../../../../../host/libraries/libbladeRF BLADERF_COMMON_DIR := ../../../common/bladerf/software/bladeRF_nios HOST_COMMON_DIR := ../../../../../../host/common FIRMWARE_COMMON_DIR := ../../../../../../firmware_common NIOS_MAIN_DIR := ../bladeRF_nios QUARTUS_WORKDIR := ../../../../../quartus/${WORKDIR} NIOS_BUILD_OUTDIR := $(QUARTUS_WORKDIR)/foxhunt MEM_INIT_DIR := $(NIOS_BUILD_OUTDIR)/mem_init BSP_BUILD_OUTDIR := $(QUARTUS_WORKDIR)/bladeRF_nios_bsp QUARTUS_OUTDIR := $(QUARTUS_WORKDIR)/output_files ALT_INCLUDE_DIRS += ./src ALT_INCLUDE_DIRS += $(NIOS_MAIN_DIR)/src C_SRCS += ./src/main.c C_SRCS += ./src/morse.c C_SRCS += $(FPGA_COMMON_DIR)/src/ad936x_helpers.c C_SRCS += $(FPGA_COMMON_DIR)/src/bladerf2_common.c C_SRCS += $(BLADERF_COMMON_DIR)/src/devices_rfic.c C_SRCS += $(BLADERF_COMMON_DIR)/src/devices_rfic_cmds.c C_SRCS += $(BLADERF_COMMON_DIR)/src/devices_rfic_queue.c C_SRCS += $(HOST_COMMON_DIR)/src/range.c CFLAGS += -DBOARD_BLADERF_MICRO # -DBLADERF_NIOS_DEBUG # libad936x build configuration and lib inclusion # These variables need to be set before including the common Makefile. LIBAD936X_BUILDDIR := $(QUARTUS_WORKDIR)/libad936x LIBAD936X_DIR := ../../../../fpga/ip/analogdevicesinc/no_OS INC_DIRS += $(LIBAD936X_BUILDDIR) \ ../$(LIBAD936X_DIR)/include \ ../../../../../../host/common/include LIB_DIRS += $(LIBAD936X_BUILDDIR) LDDEPS += $(LIBAD936X_BUILDDIR)/libad936x.a LIBS += ad936x #------------------------------------------------------------------------------ # INCLUDE THE COMMON MAKEFILE #------------------------------------------------------------------------------ include $(BLADERF_COMMON_DIR)/Makefile #------------------------------------------------------------------------------ # AD936X LIBRARY #------------------------------------------------------------------------------ # Two-stage build: # - cmake: shuffle files, apply patches, generate Makefile # - make: do the actual compile, generate libad936x.a # if any source file changes, re-run cmake so that patching, etc, occurs LIBAD936X_MAKE_DEP := ../../../../ip/analogdevicesinc/no_OS/CMakeLists.txt \ ../../../../../../thirdparty/analogdevicesinc/no-OS/ad9361/sw/* \ ../../../../../../thirdparty/analogdevicesinc/no-OS_local/patches/* \ ../../../../../../thirdparty/analogdevicesinc/no-OS_local/platform_bladerf2_headless/* LIBAD936X_BUILD_DEP := $(LIBAD936X_BUILDDIR)/Makefile # override clean_libs to ensure libad936x gets cleaned clean_libs: $(LIB_CLEAN_TARGETS) clean_libad936x clean_libad936x: @$(ECHO) Info: Cleaning libad936x @$(MAKE) --no-print-directory -C $(LIBAD936X_BUILDDIR) clean $(LIBAD936X_BUILDDIR)/Makefile: $(LIBAD936X_MAKE_DEP) @$(ECHO) Info: Generating libad936x Makefile @mkdir -p $(LIBAD936X_BUILDDIR) @cd $(LIBAD936X_BUILDDIR) && \ cmake -DCMAKE_TOOLCHAIN_FILE=$(LIBAD936X_DIR)/cmake/nios-toolchain.cmake $(LIBAD936X_DIR) $(LIBAD936X_BUILDDIR)/libad936x.a: $(LIBAD936X_BUILD_DEP) @$(ECHO) Info: Building libad936x @$(MAKE) --no-print-directory -C $(LIBAD936X_BUILDDIR) ad936x bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/software/foxhunt/README.md000066400000000000000000000003321457144405000261740ustar00rootroot00000000000000Fox Hunt Demo Application ========================= This application implements a simple, standalone OOK transmitter. TODO: - Implement tone generator HDL - Control it from the Nios - Pipe it into the TX sample flow bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/software/foxhunt/src/000077500000000000000000000000001457144405000255065ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/software/foxhunt/src/foxhunt.h000066400000000000000000000040411457144405000273510ustar00rootroot00000000000000/* This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2018 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef FOXHUNT_H_ #define FOXHUNT_H_ #include "libbladeRF_nios_compat.h" /** * @brief A tone, of a given frequency and length */ struct tone { unsigned int frequency; /**< Tone frequency, Hz (0 = silence) */ float duration; /**< Length of tone, seconds */ }; /** * @brief Message contents */ struct message { char const *text; /**< Message text, null-terminated */ float wpm; /**< Code speed, words per minute */ unsigned int tone; /**< Tone frequency, Hz */ bladerf_frequency carrier; /**< Carrier frequency, Hz */ bladerf_gain backoff_dB; /**< Backoff from full power, dB */ }; #define TONE_GEN_OFFSET_STATUS 0x0 #define TONE_GEN_OFFSET_DPHASE 0x4 #define TONE_GEN_OFFSET_DURATION 0x8 #define TONE_GEN_OFFSET_CTRL_APPEND 0x1 #define TONE_GEN_OFFSET_CTRL_CLEAR 0x1 #endif // FOXHUNT_H_ bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/software/foxhunt/src/main.c000066400000000000000000000236701457144405000266060ustar00rootroot00000000000000/* This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2018 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include #include #include #include "foxhunt.h" #include "morse.h" #include "debug.h" #include "devices.h" #include "devices_rfic.h" #define BLADERF_DEVICE_NAME "Foxhunt for the Nuand bladeRF 2.0 Micro" #define SAMPLERATE 768000 #define MAX_MESSAGE_LENGTH 128 #define MAX_TONE_COUNT 128 // uncomment to enable bias tee power (e.g. for BT-100) #define BIASTEE 1 // Check for buildability #ifndef TONE_GENERATOR_0_BASE #error tone generator not present #endif /** * @brief Error-catching wrapper * * @param _fn The function to wrap * * @return returns 1 on failure, continues if successful */ #define CALL(_fn) \ do { \ if (!_fn) { \ DBG("*** FAILED: %s() @ %s:0x%x\n", __FUNCTION__, __FILE__, \ __LINE__); \ return 1; \ } \ } while (0) bool const REPEAT_MODE = true; uint32_t const INTER_MESSAGE_GAP = 10; /* seconds */ struct message const MESSAGES[] = { { /* This should be exactly 100 dot lengths */ .text = "PARIS PARIS", .wpm = 5, .tone = 1000, .carrier = 915000000, .backoff_dB = 10, }, // { // /* This should be exactly 100 dot lengths */ // .text = "PARIS PARIS", // .wpm = 5, // .tone = 1000, // .carrier = 433920000, // .backoff_dB = 10, // }, // { // .text = "cq foxhunt de w2xh", // .wpm = 5, // .tone = 1000, // .carrier = 147555000, // .backoff_dB = 0, // }, }; size_t queue_status() { return IORD_32DIRECT(TONE_GENERATOR_0_BASE, TONE_GEN_OFFSET_STATUS); } size_t queue_len() { return (queue_status() >> 8) & 0xFF; } bool queue_full() { return (queue_status() & 0x2); } bool queue_running() { return (queue_status() & 0x1); } /* dphase is 4096 / (f_clock / f_tone) */ float const DPHASE_COEFF = 4096.0 / (float)SAMPLERATE; void queue_tone(unsigned int frequency, float duration) { uint32_t dur_clks; int32_t dphase; dur_clks = __round_int((float)SAMPLERATE * duration); dphase = __round_int((float)frequency * DPHASE_COEFF); /* Spin until queue has room */ while (queue_full()) { usleep(1000); } IOWR_32DIRECT(TONE_GENERATOR_0_BASE, TONE_GEN_OFFSET_DPHASE, dphase); IOWR_32DIRECT(TONE_GENERATOR_0_BASE, TONE_GEN_OFFSET_DURATION, dur_clks); DBG("%s: read dphase=0x%x\n", __FUNCTION__, IORD_32DIRECT(TONE_GENERATOR_0_BASE, TONE_GEN_OFFSET_DPHASE)); DBG("%s: read dur_clks=0x%x\n", __FUNCTION__, IORD_32DIRECT(TONE_GENERATOR_0_BASE, TONE_GEN_OFFSET_DURATION)); IOWR_32DIRECT(TONE_GENERATOR_0_BASE, TONE_GEN_OFFSET_STATUS, TONE_GEN_OFFSET_CTRL_APPEND); DBG("%s: running=%x dphase=0x%x dur_clks=0x%x qlen=0x%x\n", __FUNCTION__, queue_running(), dphase, dur_clks, queue_len()); } /* Generate morse code signal */ void morse_tx(struct message msg) { size_t count; element elements[MAX_MESSAGE_LENGTH]; struct tone tones[MAX_TONE_COUNT]; /** Dot length calculation: * * "PARIS" is 50 dot lengths, a "typical" word * If it can be sent n times in a minute, speed is n WPM * * 1 WPM => 60 seconds / 50 dots * n WPM => 60 seconds / (n*50) dots */ float const base = 60.0 / 50.0; float dot_time = base / msg.wpm; int total_dots = 0; count = to_morse(msg.text, elements, MAX_MESSAGE_LENGTH); if (0 == count || count >= MAX_MESSAGE_LENGTH) { DBG("%s: to_morse ret 0x%x\n", __FUNCTION__, count); return; } count = to_tones(elements, tones, msg.tone, dot_time, MAX_TONE_COUNT); if (0 == count || count >= MAX_TONE_COUNT) { DBG("%s: to_tones ret 0x%x\n", __FUNCTION__, count); return; } for (size_t i = 0; i < count; ++i) { int dots = (int)(tones[i].duration / dot_time); // DBG("play len=%x freq=%x\n", dots, tones[i].frequency); queue_tone(tones[i].frequency, tones[i].duration); total_dots += dots; } DBG("%s: total count=%x len=%x\n", __FUNCTION__, count, total_dots); } int main(void) { /* Standard output text */ DBG(BLADERF_DEVICE_NAME " FPGA v%x.%x.%x\n", FPGA_VERSION_MAJOR, FPGA_VERSION_MINOR, FPGA_VERSION_PATCH); DBG("Built " __DATE__ " " __TIME__ " with love <3\n"); #ifdef BLADERF_NIOS_LIBAD936X DBG("libad936x found: This FPGA image has magic transgirl powers\n"); #else DBG("FATAL ERROR: libad936x is required for this application.\n"); while (true) { }; #endif // BLADERF_NIOS_LIBAD936X /* Hardcoded channel */ bladerf_channel channel = BLADERF_CHANNEL_TX(0); /* State */ bool run_nios = true; /* Set 'false' to drop out of the loop */ size_t msg_index = 0; /* Counter for message index */ bladerf_frequency prev_freq = 0; bladerf_gain prev_gain = 0; /* Using a guestimate here... */ ad56x1_vctcxo_trim_dac_write(0x1ec1); usleep(1000000); IOWR_32DIRECT(TONE_GENERATOR_0_BASE, TONE_GEN_OFFSET_STATUS, TONE_GEN_OFFSET_CTRL_CLEAR); DBG("=== Initializing RFIC ===\n"); /* Initialize RFIC. * * The CALL() macro will print an error and return 1 if the function returns * false. */ CALL(rfic_command_write_immed(BLADERF_RFIC_COMMAND_INIT, RFIC_SYSTEM_CHANNEL, BLADERF_RFIC_INIT_STATE_ON)); /* Set up filters */ for (size_t i = 0; i < 2; ++i) { CALL(rfic_command_write_immed(BLADERF_RFIC_COMMAND_FILTER, BLADERF_CHANNEL_RX(i), BLADERF_RFIC_RXFIR_DEC4)); CALL(rfic_command_write_immed(BLADERF_RFIC_COMMAND_FILTER, BLADERF_CHANNEL_TX(i), BLADERF_RFIC_TXFIR_INT4)); } /* Set Sample Rate */ CALL(rfic_command_write_immed(BLADERF_RFIC_COMMAND_SAMPLERATE, channel, SAMPLERATE)); DBG("=== System Ready ===\n"); /** * Main program loop. */ while (run_nios) { struct message msg = MESSAGES[msg_index]; DBG("--> Message %x ('%s')\n", msg_index, msg.text); /* BEGIN TRANSMITTING MESSAGE */ /* Set Frequency */ if (msg.carrier != prev_freq) { CALL(rfic_command_write_immed(BLADERF_RFIC_COMMAND_FREQUENCY, channel, msg.carrier)); prev_freq = msg.carrier; } /* Set Gain */ if (msg.backoff_dB != prev_gain) { CALL(rfic_command_write_immed(BLADERF_RFIC_COMMAND_GAIN, channel, msg.backoff_dB * 1000)); prev_gain = msg.backoff_dB; } /* Begin TX on this channel if required */ CALL(rfic_command_write_immed(BLADERF_RFIC_COMMAND_ENABLE, channel, true)); #ifdef BIASTEE /* Enable bias tee on TX side */ uint32_t rffe_reg; rffe_reg = rffe_csr_read(); rffe_reg |= (1 << 10); // tx_bias_en rffe_csr_write(rffe_reg); #endif // BIASTEE /* Pause 1 second */ queue_tone(0, 1); /* Do signal transmission */ morse_tx(msg); /* If we have more messages, transmit them */ if ((msg_index + 1) < ARRAY_SIZE(MESSAGES)) { ++msg_index; } else { msg_index = 0; run_nios = REPEAT_MODE; } if (run_nios) { /* Pause 1 second */ queue_tone(0, 1); /* Wait for completion */ while (queue_running()) { usleep(1000); } /* Stop transmitting */ CALL(rfic_command_write_immed(BLADERF_RFIC_COMMAND_ENABLE, channel, false)); #ifdef BIASTEE /* Disable bias tee on TX side */ rffe_reg = rffe_csr_read(); rffe_reg &= ~(1 << 10); // tx_bias_en rffe_csr_write(rffe_reg); #endif // BIASTEE usleep(INTER_MESSAGE_GAP * 1e6); } } DBG("=== RFIC standby ===\n"); CALL(rfic_command_write_immed(BLADERF_RFIC_COMMAND_INIT, RFIC_SYSTEM_CHANNEL, BLADERF_RFIC_INIT_STATE_STANDBY)); DBG("=== Time to die... ===\n"); return 0; } bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/software/foxhunt/src/morse.c000066400000000000000000000240251457144405000270020ustar00rootroot00000000000000/* This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2018 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include "debug.h" #include "morse.h" // clang-format off struct character const MORSE_MAP[] = { { .letter = 0x18, /* Error (ASCII "CAN"): mash out 8 dots */ .sequence = { T_DOT, T_DOT, T_DOT, T_DOT, T_DOT, T_DOT, T_DOT, T_DOT, T_END } }, { .letter = 'A', .sequence = { T_DOT, T_DASH, T_END } }, { .letter = 'B', .sequence = { T_DASH, T_DOT, T_DOT, T_DOT, T_END } }, { .letter = 'C', .sequence = { T_DASH, T_DOT, T_DASH, T_DOT, T_END } }, { .letter = 'D', .sequence = { T_DASH, T_DOT, T_DOT, T_END } }, { .letter = 'E', .sequence = { T_DOT, T_END } }, { .letter = 'F', .sequence = { T_DOT, T_DOT, T_DASH, T_DOT, T_END } }, { .letter = 'G', .sequence = { T_DASH, T_DASH, T_DOT, T_END } }, { .letter = 'H', .sequence = { T_DOT, T_DOT, T_DOT, T_DOT, T_END } }, { .letter = 'I', .sequence = { T_DOT, T_DOT, T_END } }, { .letter = 'J', .sequence = { T_DOT, T_DASH, T_DASH, T_DASH, T_END } }, { .letter = 'K', .sequence = { T_DASH, T_DOT, T_DASH, T_END } }, { .letter = 'L', .sequence = { T_DOT, T_DASH, T_DOT, T_DOT, T_END } }, { .letter = 'M', .sequence = { T_DASH, T_DASH, T_END } }, { .letter = 'N', .sequence = { T_DASH, T_DOT, T_END } }, { .letter = 'O', .sequence = { T_DASH, T_DASH, T_DASH, T_END } }, { .letter = 'P', .sequence = { T_DOT, T_DASH, T_DASH, T_DOT, T_END } }, { .letter = 'Q', .sequence = { T_DASH, T_DASH, T_DOT, T_DASH, T_END } }, { .letter = 'R', .sequence = { T_DOT, T_DASH, T_DOT, T_END } }, { .letter = 'S', .sequence = { T_DOT, T_DOT, T_DOT, T_END } }, { .letter = 'T', .sequence = { T_DASH, T_END } }, { .letter = 'U', .sequence = { T_DOT, T_DOT, T_DASH, T_END } }, { .letter = 'V', .sequence = { T_DOT, T_DOT, T_DOT, T_DASH, T_END } }, { .letter = 'W', .sequence = { T_DOT, T_DASH, T_DASH, T_END } }, { .letter = 'X', .sequence = { T_DASH, T_DOT, T_DOT, T_DASH, T_END } }, { .letter = 'Y', .sequence = { T_DASH, T_DOT, T_DASH, T_DASH, T_END } }, { .letter = 'Z', .sequence = { T_DASH, T_DASH, T_DOT, T_DOT, T_END } }, { .letter = '"', .sequence = { T_DOT, T_DASH, T_DOT, T_DOT, T_DASH, T_DOT, T_END } }, { .letter = '\'', .sequence = { T_DOT, T_DASH, T_DASH, T_DASH, T_DASH, T_DOT, T_END } }, { .letter = '(', .sequence = { T_DASH, T_DOT, T_DASH, T_DASH, T_DOT, T_END } }, { .letter = ')', .sequence = { T_DASH, T_DOT, T_DASH, T_DASH, T_DOT, T_DASH, T_END } }, { .letter = '*', .sequence = { T_DASH, T_DOT, T_DOT, T_DASH, T_END } }, { .letter = '+', .sequence = { T_DOT, T_DASH, T_DOT, T_DASH, T_DOT, T_END } }, { .letter = ',', .sequence = { T_DASH, T_DASH, T_DOT, T_DOT, T_DASH, T_DASH, T_END } }, { .letter = '-', .sequence = { T_DASH, T_DOT, T_DOT, T_DOT, T_DOT, T_DASH, T_END } }, { .letter = '.', .sequence = { T_DOT, T_DASH, T_DOT, T_DASH, T_DOT, T_DASH, T_END } }, { .letter = '/', .sequence = { T_DASH, T_DOT, T_DOT, T_DASH, T_DOT, T_END } }, { .letter = '0', .sequence = { T_DASH, T_DASH, T_DASH, T_DASH, T_DASH, T_END } }, { .letter = '1', .sequence = { T_DOT, T_DASH, T_DASH, T_DASH, T_DASH, T_END } }, { .letter = '2', .sequence = { T_DOT, T_DOT, T_DASH, T_DASH, T_DASH, T_END } }, { .letter = '3', .sequence = { T_DOT, T_DOT, T_DOT, T_DASH, T_DASH, T_END } }, { .letter = '4', .sequence = { T_DOT, T_DOT, T_DOT, T_DOT, T_DASH, T_END } }, { .letter = '5', .sequence = { T_DOT, T_DOT, T_DOT, T_DOT, T_DOT, T_END } }, { .letter = '6', .sequence = { T_DASH, T_DOT, T_DOT, T_DOT, T_DOT, T_END } }, { .letter = '7', .sequence = { T_DASH, T_DASH, T_DOT, T_DOT, T_DOT, T_END } }, { .letter = '8', .sequence = { T_DASH, T_DASH, T_DASH, T_DOT, T_DOT, T_END } }, { .letter = '9', .sequence = { T_DASH, T_DASH, T_DASH, T_DASH, T_DOT, T_END } }, { .letter = ':', .sequence = { T_DASH, T_DASH, T_DASH, T_DOT, T_DOT, T_DOT, T_END } }, { .letter = ';', .sequence = { T_DASH, T_DOT, T_DASH, T_DOT, T_DASH, T_DOT, T_END } }, { .letter = '=', .sequence = { T_DASH, T_DOT, T_DOT, T_DOT, T_DASH, T_END } }, { .letter = '?', .sequence = { T_DOT, T_DOT, T_DASH, T_DASH, T_DOT, T_DOT, T_END } }, { .letter = '@', .sequence = { T_DOT, T_DASH, T_DASH, T_DOT, T_DASH, T_DOT, T_END } }, { .letter = '_', .sequence = { T_DOT, T_DOT, T_DASH, T_DASH, T_DOT, T_DASH, T_END } }, { .letter = ' ', /* inter-word gap */ .sequence = { T_WORD_GAP, T_END } }, { .letter = 0x00, /* End of string */ .sequence = { T_DONE, T_END } }, { .letter = 0x03, /* End of Message (ASCII "ETX") */ .sequence = { T_DOT, T_DASH, T_DOT, T_DASH, T_DOT, T_END } }, { .letter = 0xFF, /* End of array placeholder */ .sequence = { T_END } }, }; // clang-format on struct character get_letter(char letter) { /* Convert to upper case */ if (letter >= 'a' && letter <= 'z') { letter += 'A' - 'a'; } for (size_t i = 0; i < ARRAY_SIZE(MORSE_MAP); ++i) { if (MORSE_MAP[i].letter == letter) { return MORSE_MAP[i]; } }; /* Couldn't find it, error pattern */ // DBG("%s: Letter not found: '%c'\n", __FUNCTION__, letter); return MORSE_MAP[0]; }; size_t to_morse(char const *str, element *out, size_t maxlen) { size_t count = 0; for (size_t i = 0; str[i] != 0x00; ++i) { struct character ltr = get_letter(str[i]); for (size_t j = 0; j < MAX_SEQ_LEN; ++j) { if (count < maxlen) { out[count] = ltr.sequence[j]; ++count; } if (T_END == ltr.sequence[j]) { break; } } } if (count >= maxlen) { count = maxlen; out[maxlen - 1] = T_INVALID; } else { out[count++] = T_DONE; } return count; } size_t to_tones(element const *elements, struct tone *tones, unsigned int frequency, float dot_length, size_t maxlen) { size_t count = 0; size_t next_gap = 0; for (size_t i = 0;; ++i) { size_t tone = 0; size_t gap = 0; /* Map Morse element to tone and gap length */ switch (elements[i]) { case T_INVALID: /* Error case: just ditch out */ // DBG("%s: T_INVALID encountered at i=%x\n", __FUNCTION__, i); return 0; case T_DOT: /* Dot */ tone = 1; gap = 1; break; case T_DASH: /* Dash (3 dot length) */ tone = 3; gap = 1; break; case T_END: /* End of a character */ tone = 0; gap = 3; break; case T_DONE: /* ensure this gets done this round */ tone = 1; next_gap = 7; break; case T_WORD_GAP: /* Space between words */ tone = 0; gap = 7; if (T_END == elements[i + 1]) { ++i; /* skip the T_END */ } break; } /* We apply the gap from the last iteration here, so that we only end up * with one gap when there's a space, etc */ if (count < maxlen && next_gap && tone) { tones[count].frequency = 0; tones[count].duration = next_gap * dot_length; ++count; } /* Done flag? Out of space? We're done. */ if (T_DONE == elements[i] || count >= maxlen) { break; } /* Apply the tone here. */ if (count < maxlen && tone) { tones[count].frequency = frequency; tones[count].duration = tone * dot_length; ++count; } next_gap = gap; } return count; } bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/software/foxhunt/src/morse.h000066400000000000000000000036531457144405000270130ustar00rootroot00000000000000/* This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2018 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef MORSE_H_ #define MORSE_H_ #include "foxhunt.h" #define ARRAY_SIZE(n) (sizeof(n) / sizeof(n[0])) #define MAX_SEQ_LEN 10 typedef enum { T_DONE = 0, /**< End of transmission */ T_DOT, /**< Dot */ T_DASH, /**< Dash (3 dot lengths) */ T_WORD_GAP, /**< Gap of 7 dot lengths */ T_END, /**< End of character */ T_INVALID, /**< Error condition (overflow?) */ } element; struct character { char const letter; /**< A letter, in ASCII */ element const sequence[MAX_SEQ_LEN]; /**< A sequence of elements */ }; struct character get_letter(char); size_t to_morse(char const *, element *, size_t); size_t to_tones(element const *, struct tone *, unsigned int, float, size_t); #endif // MORSE_H_ bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/vhdl/000077500000000000000000000000001457144405000223275ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/vhdl/bladerf-adsb.vhd000066400000000000000000001216421457144405000253460ustar00rootroot00000000000000-- Copyright (c) 2017 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.math_real.all; use ieee.math_complex.all; library work; use work.bladerf; use work.bladerf_p.all; use work.fifo_readwrite_p.all; use work.adsb_decoder_p.all ; library altera_mf ; use altera_mf.altera_mf_components.all ; architecture adsb_bladerf of bladerf is attribute noprune : boolean; attribute keep : boolean; alias sys_reset_async : std_logic is fx3_ctl(7); signal sys_reset_pclk : std_logic; signal sys_reset : std_logic; signal sys_clock : std_logic; signal sys_pll_locked : std_logic; signal sys_pll_reset : std_logic; signal fx3_pclk_pll : std_logic; signal fx3_pclk_pll_locked : std_logic; signal fx3_pclk_pll_reset : std_logic; signal rx_mux_sel : unsigned(2 downto 0); signal nios_xb_gpio_in : std_logic_vector(31 downto 0) := (others => '0'); signal nios_xb_gpio_out : std_logic_vector(31 downto 0) := (others => '0'); signal nios_xb_gpio_oe : std_logic_vector(31 downto 0) := (others => '0'); signal nios_gpio : nios_gpio_t; signal nios_gpo_slv : std_logic_vector(31 downto 0); signal i2c_scl_in : std_logic; signal i2c_scl_out : std_logic; signal i2c_scl_oen : std_logic; signal i2c_sda_in : std_logic; signal i2c_sda_out : std_logic; signal i2c_sda_oen : std_logic; signal tx_sample_fifo : tx_fifo_t := TX_FIFO_T_DEFAULT; signal rx_sample_fifo : adsb_fifo_t := ADSB_FIFO_T_DEFAULT; signal tx_loopback_fifo : loopback_fifo_t := LOOPBACK_FIFO_T_DEFAULT; signal tx_meta_fifo : meta_fifo_tx_t := META_FIFO_TX_T_DEFAULT; signal rx_meta_fifo : meta_fifo_rx_t := META_FIFO_RX_T_DEFAULT; signal usb_speed_pclk : std_logic; signal usb_speed_rx : std_logic; signal usb_speed_tx : std_logic; signal tx_reset : std_logic; signal rx_reset : std_logic; signal tx_enable_pclk : std_logic; signal rx_enable_pclk : std_logic; signal tx_enable : std_logic; signal rx_enable : std_logic; signal meta_en_pclk : std_logic; signal meta_en_tx : std_logic; signal meta_en_rx : std_logic; signal packet_en_pclk : std_logic; signal packet_en_tx : std_logic; signal packet_en_rx : std_logic; signal tx_timestamp : unsigned(63 downto 0); signal rx_timestamp : unsigned(63 downto 0); signal timestamp_sync : std_logic; signal tx_loopback_enabled : std_logic := '0'; signal fx3_gpif_in : std_logic_vector(31 downto 0); signal fx3_gpif_out : std_logic_vector(31 downto 0); signal fx3_gpif_oe : std_logic; signal fx3_ctl_in : std_logic_vector(12 downto 0); signal fx3_ctl_out : std_logic_vector(12 downto 0); signal fx3_ctl_oe : std_logic_vector(12 downto 0); signal tx_underflow_led : std_logic := '1'; signal rx_overflow_led : std_logic := '1'; signal led1_blink : std_logic; signal nios_sdo : std_logic; signal nios_sdio : std_logic; signal nios_sclk : std_logic; signal nios_ss_n : std_logic_vector(1 downto 0); signal command_serial_in : std_logic; signal command_serial_out : std_logic; signal timestamp_req : std_logic; signal timestamp_ack : std_logic; signal fx3_timestamp : unsigned(63 downto 0); signal rx_ts_reset : std_logic; signal tx_ts_reset : std_logic; -- ADSB specific signals constant NUM_DECODERS : positive := 8 ; signal adsb_init : std_logic ; signal adsb_power : signed(INPUT_POWER_WIDTH-1 downto 0) ; signal adsb_valid : std_logic ; signal msgs : messages_t(NUM_DECODERS-1 downto 0) ; signal msgs_valid : std_logic_vector(NUM_DECODERS-1 downto 0) ; signal fifo_data : std_logic_vector(127 downto 0) ; signal fifo_valid : std_logic ; signal rx_trigger_ctl_i : std_logic_vector(7 downto 0); signal rx_trigger_ctl : trigger_t := TRIGGER_T_DEFAULT; alias rx_trigger_line : std_logic is mini_exp1; signal tx_trigger_ctl_i : std_logic_vector(7 downto 0); signal tx_trigger_ctl : trigger_t := TRIGGER_T_DEFAULT; alias tx_trigger_line : std_logic is mini_exp1; signal rffe_gpio : rffe_gpio_t := ( i => RFFE_GPI_DEFAULT, o => pack(RFFE_GPO_DEFAULT) ); signal ad9361 : mimo_2r2t_t := MIMO_2R2T_T_DEFAULT; alias tx_clock is ad9361.clock; alias rx_clock is ad9361.clock; signal mimo_rx_enables : std_logic_vector(RFFE_GPO_DEFAULT.mimo_rx_en'range) := RFFE_GPO_DEFAULT.mimo_rx_en; signal mimo_tx_enables : std_logic_vector(RFFE_GPO_DEFAULT.mimo_tx_en'range) := RFFE_GPO_DEFAULT.mimo_tx_en; signal dac_controls : sample_controls_t(ad9361.ch'range) := (others => SAMPLE_CONTROL_DISABLE); signal dac_streams : sample_streams_t(dac_controls'range) := (others => ZERO_SAMPLE); signal adc_controls : sample_controls_t(ad9361.ch'range) := (others => SAMPLE_CONTROL_DISABLE); signal adc_streams : sample_streams_t(adc_controls'range) := (others => ZERO_SAMPLE); signal adc_streams_last_v : std_logic_vector(adc_controls'range) := (others => '0'); signal ps_sync : std_logic_vector(0 downto 0) := (others => '0'); signal tx_packet_control : packet_control_t ; signal rx_packet_control : packet_control_t := PACKET_CONTROL_DEFAULT ; signal rx_packet_ready : std_logic; signal tx_packet_ready : std_logic; signal tx_packet_empty : std_logic; signal wbm_wb_clk_i : std_logic; signal wbm_wb_rst_i : std_logic; signal wbm_wb_adr_o : std_logic_vector(31 downto 0); signal wbm_wb_dat_o : std_logic_vector(31 downto 0); signal wbm_wb_dat_i : std_logic_vector(31 downto 0); signal wbm_wb_we_o : std_logic; signal wbm_wb_sel_o : std_logic; signal wbm_wb_stb_o : std_logic; signal wbm_wb_ack_i : std_logic; signal wbm_wb_cyc_o : std_logic; begin -- ======================================================================== -- PLLs -- ======================================================================== -- Create 80 MHz system clock from 38.4 MHz U_system_pll : component system_pll port map ( refclk => c5_clock2, rst => sys_pll_reset, outclk_0 => sys_clock, locked => sys_pll_locked ); U_pll_reset_pll : entity work.pll_reset generic map ( SYS_CLOCK_FREQ_HZ => 38_400_000, DEVICE_FAMILY => "Cyclone V" ) port map ( sys_clock => c5_clock2, pll_locked => sys_pll_locked, pll_reset => sys_pll_reset ); -- Use PLL to adjust the phase of the FX3 PCLK to -- retime the FX3 GPIF interface for timing closure. U_fx3_pll : component fx3_pll port map ( refclk => fx3_pclk, rst => fx3_pclk_pll_reset, outclk_0 => fx3_pclk_pll, locked => fx3_pclk_pll_locked ); U_pll_reset_fx3_pll : entity work.pll_reset generic map ( SYS_CLOCK_FREQ_HZ => 100_000_000, DEVICE_FAMILY => "Cyclone V" ) port map ( sys_clock => fx3_pclk, pll_locked => fx3_pclk_pll_locked, pll_reset => fx3_pclk_pll_reset ); -- ======================================================================== -- POWER SUPPLY SYNCHRONIZATION -- ======================================================================== U_ps_sync : entity work.ps_sync generic map ( OUTPUTS => 1, USE_LFSR => true, HOP_LIST => adp2384_sync_divisors( REFCLK_HZ => 38.4e6, n_divisors => 7 ), HOP_RATE => 100 ) port map ( refclk => c5_clock2, sync => ps_sync ); ps_sync_1p1 <= ps_sync(0); ps_sync_1p8 <= ps_sync(0); -- ======================================================================== -- FX3 GPIF -- ======================================================================== -- FX3 GPIF U_fx3_gpif : entity work.fx3_gpif port map ( pclk => fx3_pclk_pll, reset => sys_reset_pclk, usb_speed => usb_speed_pclk, meta_enable => meta_en_pclk, packet_enable => packet_en_pclk, rx_enable => rx_enable_pclk, tx_enable => tx_enable_pclk, gpif_in => fx3_gpif_in, gpif_out => fx3_gpif_out, gpif_oe => fx3_gpif_oe, ctl_in => fx3_ctl_in, ctl_out => fx3_ctl_out, ctl_oe => fx3_ctl_oe, tx_fifo_write => tx_sample_fifo.wreq, tx_fifo_full => tx_sample_fifo.wfull, tx_fifo_empty => tx_sample_fifo.wempty, tx_fifo_usedw => tx_sample_fifo.wused, tx_fifo_data => tx_sample_fifo.wdata, tx_timestamp => fx3_timestamp, tx_meta_fifo_write => tx_meta_fifo.wreq, tx_meta_fifo_full => tx_meta_fifo.wfull, tx_meta_fifo_empty => tx_meta_fifo.wempty, tx_meta_fifo_usedw => tx_meta_fifo.wused, tx_meta_fifo_data => tx_meta_fifo.wdata, rx_fifo_read => rx_sample_fifo.rreq, rx_fifo_full => rx_sample_fifo.rfull, rx_fifo_empty => rx_sample_fifo.rempty, rx_fifo_usedw => rx_sample_fifo.rused, rx_fifo_data => rx_sample_fifo.rdata, rx_meta_fifo_read => rx_meta_fifo.rreq, rx_meta_fifo_full => rx_meta_fifo.rfull, rx_meta_fifo_empty => rx_meta_fifo.rempty, rx_meta_fifo_usedr => rx_meta_fifo.rused, rx_meta_fifo_data => rx_meta_fifo.rdata ); -- FX3 GPIF bidirectional signal control register_gpif : process(sys_reset_pclk, fx3_pclk_pll) begin if( sys_reset_pclk = '1' ) then fx3_gpif <= (others =>'Z'); fx3_gpif_in <= (others =>'0'); elsif( rising_edge(fx3_pclk_pll) ) then fx3_gpif_in <= fx3_gpif; if( fx3_gpif_oe = '1' ) then fx3_gpif <= fx3_gpif_out; else fx3_gpif <= (others =>'Z'); end if; end if; end process; -- FX3 CTL bidirectional signal control generate_ctl : for i in fx3_ctl'range generate fx3_ctl(i) <= fx3_ctl_out(i) when fx3_ctl_oe(i) = '1' else 'Z'; end generate; fx3_ctl_in <= fx3_ctl; toggle_led1 : process(fx3_pclk_pll) variable count : natural range 0 to 10_000_000 := 10_000_000; begin if( rising_edge(fx3_pclk_pll) ) then count := count - 1; if( count = 0 ) then count := 10_000_000; led1_blink <= not led1_blink; end if; end if; end process; -- ======================================================================== -- NIOS SYSTEM -- ======================================================================== U_nios_system : component nios_system port map ( clk_clk => sys_clock, reset_reset_n => '1', dac_MISO => nios_sdo, dac_MOSI => nios_sdio, dac_SCLK => nios_sclk, dac_SS_n => nios_ss_n, spi_MISO => adi_spi_sdo, spi_MOSI => adi_spi_sdi, spi_SCLK => adi_spi_sclk, spi_SS_n => adi_spi_csn, gpio_in_port => pack(nios_gpio.i, '0'), gpio_out_port => nios_gpo_slv, gpio_rffe_0_in_port => pack(rffe_gpio), gpio_rffe_0_out_port => rffe_gpio.o, ad9361_dac_sync_in_sync => '0', ad9361_dac_sync_out_sync => adi_sync_in, ad9361_data_clock_clk => ad9361.clock, -- out std_logic; ad9361_data_reset_reset => ad9361.reset, -- out std_logic; ad9361_device_if_rx_clk_in_p => adi_rx_clock, ad9361_device_if_rx_clk_in_n => '0', ad9361_device_if_rx_frame_in_p => adi_rx_frame, ad9361_device_if_rx_frame_in_n => '0', ad9361_device_if_rx_data_in_p => adi_rx_data, ad9361_device_if_rx_data_in_n => (others => '0'), ad9361_device_if_tx_clk_out_p => adi_tx_clock, ad9361_device_if_tx_clk_out_n => open, ad9361_device_if_tx_frame_out_p => adi_tx_frame, ad9361_device_if_tx_frame_out_n => open, ad9361_device_if_tx_data_out_p => adi_tx_data, ad9361_device_if_tx_data_out_n => open, ad9361_adc_i0_enable => ad9361.ch(0).adc.i.enable, -- out sl ad9361_adc_i0_valid => ad9361.ch(0).adc.i.valid, -- out sl ad9361_adc_i0_data => ad9361.ch(0).adc.i.data, -- out slv(15:0) ad9361_adc_i1_enable => ad9361.ch(1).adc.i.enable, -- out sl ad9361_adc_i1_valid => ad9361.ch(1).adc.i.valid, -- out sl ad9361_adc_i1_data => ad9361.ch(1).adc.i.data, -- out slv(15:0) ad9361_adc_overflow_ovf => ad9361.adc_overflow, -- in sl ad9361_adc_q0_enable => ad9361.ch(0).adc.q.enable, -- out sl ad9361_adc_q0_valid => ad9361.ch(0).adc.q.valid, -- out sl ad9361_adc_q0_data => ad9361.ch(0).adc.q.data, -- out slv(15:0) ad9361_adc_q1_enable => ad9361.ch(1).adc.q.enable, -- out sl ad9361_adc_q1_valid => ad9361.ch(1).adc.q.valid, -- out sl ad9361_adc_q1_data => ad9361.ch(1).adc.q.data, -- out slv(15:0) ad9361_adc_underflow_unf => ad9361.adc_underflow, -- in sl ad9361_dac_i0_enable => ad9361.ch(0).dac.i.enable, -- out sl ad9361_dac_i0_valid => ad9361.ch(0).dac.i.valid, -- out sl ad9361_dac_i0_data => ad9361.ch(0).dac.i.data, -- in slv(15:0) ad9361_dac_i1_enable => ad9361.ch(1).dac.i.enable, -- out sl ad9361_dac_i1_valid => ad9361.ch(1).dac.i.valid, -- out sl ad9361_dac_i1_data => ad9361.ch(1).dac.i.data, -- in slv(15:0) ad9361_dac_overflow_ovf => ad9361.dac_overflow, -- in sl ad9361_dac_q0_enable => ad9361.ch(0).dac.q.enable, -- out sl ad9361_dac_q0_valid => ad9361.ch(0).dac.q.valid, -- out sl ad9361_dac_q0_data => ad9361.ch(0).dac.q.data, -- in slv(15:0) ad9361_dac_q1_enable => ad9361.ch(1).dac.q.enable, -- out sl ad9361_dac_q1_valid => ad9361.ch(1).dac.q.valid, -- out sl ad9361_dac_q1_data => ad9361.ch(1).dac.q.data, -- in slv(15:0) ad9361_dac_underflow_unf => ad9361.dac_underflow, -- in sl xb_gpio_in_port => nios_xb_gpio_in, xb_gpio_out_port => nios_xb_gpio_out, xb_gpio_dir_export => nios_xb_gpio_oe, command_serial_in => command_serial_in, command_serial_out => command_serial_out, oc_i2c_arst_i => '0', oc_i2c_scl_pad_i => i2c_scl_in, oc_i2c_scl_pad_o => i2c_scl_out, oc_i2c_scl_padoen_o => i2c_scl_oen, oc_i2c_sda_pad_i => i2c_sda_in, oc_i2c_sda_pad_o => i2c_sda_out, oc_i2c_sda_padoen_o => i2c_sda_oen, rx_tamer_ts_sync_in => '0', rx_tamer_ts_sync_out => open, rx_tamer_ts_pps => '0', rx_tamer_ts_clock => rx_clock, rx_tamer_ts_reset => rx_ts_reset, unsigned(rx_tamer_ts_time) => rx_timestamp, tx_tamer_ts_sync_in => '0', tx_tamer_ts_sync_out => open, tx_tamer_ts_pps => '0', tx_tamer_ts_clock => tx_clock, tx_tamer_ts_reset => tx_ts_reset, unsigned(tx_tamer_ts_time) => tx_timestamp, rx_trigger_ctl_out_port => rx_trigger_ctl_i, tx_trigger_ctl_out_port => tx_trigger_ctl_i, rx_trigger_ctl_in_port => pack(rx_trigger_ctl), tx_trigger_ctl_in_port => pack(tx_trigger_ctl), wbm_wb_clk_i => wbm_wb_clk_i, wbm_wb_rst_i => wbm_wb_rst_i, wbm_wb_adr_o => wbm_wb_adr_o, wbm_wb_dat_o => wbm_wb_dat_o, wbm_wb_dat_i => wbm_wb_dat_i, wbm_wb_we_o => wbm_wb_we_o, wbm_wb_sel_o => wbm_wb_sel_o, wbm_wb_stb_o => wbm_wb_stb_o, wbm_wb_ack_i => wbm_wb_ack_i, wbm_wb_cyc_o => wbm_wb_cyc_o ); -- FX3 UART command_serial_in <= fx3_uart_txd when sys_reset = '0' else '1'; fx3_uart_rxd <= command_serial_out when sys_reset = '0' else 'Z'; -- FX3 UART CTS and Flash SPI CSx are tied to the same signal. -- Allow SPI accesses when FPGA is in reset fx3_uart_cts <= '1' when sys_reset_pclk = '0' else 'Z'; -- Unpack the Nios general-purpose outputs into a record nios_gpio.o <= unpack(nios_gpo_slv); -- Readback of Nios general-purpose outputs nios_gpio.i.gpo_readback <= nios_gpio.o; -- RFFE GPIO outputs adi_ctrl_in <= unpack(rffe_gpio.o).ctrl_in; adi_tx_spdt2_v <= unpack(rffe_gpio.o).tx_spdt2; adi_tx_spdt1_v <= unpack(rffe_gpio.o).tx_spdt1; tx_bias_en <= unpack(rffe_gpio.o).tx_bias_en; adi_rx_spdt2_v <= unpack(rffe_gpio.o).rx_spdt2; adi_rx_spdt1_v <= unpack(rffe_gpio.o).rx_spdt1; rx_bias_en <= unpack(rffe_gpio.o).rx_bias_en; --adi_sync_in <= unpack(rffe_gpio.o).sync_in; adi_en_agc <= unpack(rffe_gpio.o).en_agc; adi_txnrx <= unpack(rffe_gpio.o).txnrx; adi_enable <= unpack(rffe_gpio.o).enable; adi_reset_n <= unpack(rffe_gpio.o).reset_n; -- Unpack trigger GPIO bits into records rx_trigger_ctl <= unpack(rx_trigger_ctl_i, rx_trigger_line); tx_trigger_ctl <= unpack(tx_trigger_ctl_i, tx_trigger_line); -- LEDs led(1) <= led1_blink when nios_gpio.o.led_mode = '0' else not nios_gpio.o.leds(1); led(2) <= tx_underflow_led when nios_gpio.o.led_mode = '0' else not nios_gpio.o.leds(2); led(3) <= rx_overflow_led when nios_gpio.o.led_mode = '0' else not nios_gpio.o.leds(3); -- DAC SPI (data latched on falling edge) dac_sclk <= not nios_sclk when nios_gpio.o.adf_chip_enable = '0' else '0'; dac_sdi <= nios_sdio when nios_gpio.o.adf_chip_enable = '0' else '0'; dac_csn <= nios_ss_n(0) when nios_gpio.o.adf_chip_enable = '0' else '1'; -- ADF SPI (data latched on rising edge) adf_sclk <= nios_sclk when nios_gpio.o.adf_chip_enable = '1' else '0'; adf_sdi <= nios_sdio when nios_gpio.o.adf_chip_enable = '1' else '0'; adf_csn <= nios_ss_n(1) when nios_gpio.o.adf_chip_enable = '1' else '1'; adf_ce <= nios_gpio.o.adf_chip_enable; nios_sdo <= adf_muxout when ((nios_ss_n(1) = '0') and (nios_gpio.o.adf_chip_enable = '1')) else '0'; -- Power monitor I2C pwr_scl <= i2c_scl_out when i2c_scl_oen = '0' else 'Z'; pwr_sda <= i2c_sda_out when i2c_sda_oen = '0' else 'Z'; i2c_scl_in <= pwr_scl; i2c_sda_in <= pwr_sda; -- TPS2115A status nios_gpio.i.pwr_status <= pwr_status; -- SI53304 controls / clock output enables si_clock_sel <= nios_gpio.o.si_clock_sel; c5_clock2_oe <= '1'; exp_clock_oe <= exp_present and exp_clock_req; ufl_clock_oe <= nios_gpio.o.ufl_clock_oe; -- Expansion I2C exp_i2c_scl <= 'Z'; exp_i2c_sda <= 'Z'; -- Expansion GPIO outputs generate_xb_gpio_out : for i in exp_gpio'range generate exp_gpio(i) <= nios_xb_gpio_out(i) when nios_xb_gpio_oe(i) = '1' else 'Z'; end generate; tx_packet_ready <= '1'; -- TX Submodule U_tx : entity work.tx generic map ( NUM_STREAMS => dac_controls'length ) port map ( tx_reset => tx_reset, tx_clock => tx_clock, tx_enable => tx_enable, meta_en => meta_en_tx, timestamp_reset => tx_ts_reset, usb_speed => usb_speed_tx, tx_underflow_led => tx_underflow_led, tx_timestamp => tx_timestamp, -- Triggering trigger_arm => tx_trigger_ctl.arm, trigger_fire => tx_trigger_ctl.fire, trigger_master => tx_trigger_ctl.master, trigger_line => tx_trigger_line, -- Packet FIFO packet_en => packet_en_tx, packet_empty => tx_packet_empty, packet_control => tx_packet_control, packet_ready => tx_packet_ready, -- Samples from host via FX3 sample_fifo_wclock => fx3_pclk_pll, sample_fifo_wreq => tx_sample_fifo.wreq, sample_fifo_wdata => tx_sample_fifo.wdata, sample_fifo_wempty => tx_sample_fifo.wempty, sample_fifo_wfull => tx_sample_fifo.wfull, sample_fifo_wused => tx_sample_fifo.wused, -- Metadata from host via FX3 meta_fifo_wclock => fx3_pclk_pll, meta_fifo_wreq => tx_meta_fifo.wreq, meta_fifo_wdata => tx_meta_fifo.wdata, meta_fifo_wempty => tx_meta_fifo.wempty, meta_fifo_wfull => tx_meta_fifo.wfull, meta_fifo_wused => tx_meta_fifo.wused, -- Digital Loopback Interface loopback_enabled => tx_loopback_enabled, loopback_fifo_wclock => tx_loopback_fifo.wclock, loopback_fifo_wdata => tx_loopback_fifo.wdata, loopback_fifo_wreq => tx_loopback_fifo.wreq, loopback_fifo_wfull => tx_loopback_fifo.wfull, loopback_fifo_wused => tx_loopback_fifo.wused, -- RFFE Interface dac_controls => dac_controls, dac_streams => dac_streams ); dac_assignment_proc : process( all ) begin for i in dac_controls'range loop dac_controls(i).enable <= (ad9361.ch(i).dac.i.enable or ad9361.ch(i).dac.q.enable or tx_loopback_enabled) and mimo_tx_enables(i); dac_controls(i).data_req <= (ad9361.ch(i).dac.i.valid or ad9361.ch(i).dac.q.valid or tx_loopback_enabled) and mimo_tx_enables(i); if (rising_edge(tx_clock) and dac_streams(i).data_v = '1') then ad9361.ch(i).dac.i.data <= std_logic_vector(dac_streams(i).data_i(11 downto 0)) & "0000"; ad9361.ch(i).dac.q.data <= std_logic_vector(dac_streams(i).data_q(11 downto 0)) & "0000"; end if; end loop; end process; -- RX Submodule U_rx : entity work.rx generic map ( NUM_STREAMS => adc_controls'length ) port map ( rx_reset => rx_reset, rx_clock => rx_clock, rx_enable => rx_enable, meta_en => meta_en_rx, timestamp_reset => rx_ts_reset, usb_speed => usb_speed_rx, rx_mux_sel => rx_mux_sel, rx_overflow_led => rx_overflow_led, rx_timestamp => rx_timestamp, -- Triggering trigger_arm => rx_trigger_ctl.arm, trigger_fire => rx_trigger_ctl.fire, trigger_master => rx_trigger_ctl.master, trigger_line => rx_trigger_line, -- Packet FIFO packet_en => packet_en_rx, packet_control => rx_packet_control, packet_ready => rx_packet_ready, -- Samples to host via FX3 sample_fifo_rclock => fx3_pclk_pll, sample_fifo_raclr => not rx_enable_pclk, sample_fifo_rreq => rx_sample_fifo.rreq, sample_fifo_rdata => rx_sample_fifo.rdata, sample_fifo_rempty => rx_sample_fifo.rempty, sample_fifo_rfull => rx_sample_fifo.rfull, sample_fifo_rused => rx_sample_fifo.rused, -- Mini expansion signals mini_exp => mini_exp2 & mini_exp1, -- Metadata to host via FX3 meta_fifo_rclock => fx3_pclk_pll, meta_fifo_raclr => not rx_enable_pclk, meta_fifo_rreq => rx_meta_fifo.rreq, meta_fifo_rdata => rx_meta_fifo.rdata, meta_fifo_rempty => rx_meta_fifo.rempty, meta_fifo_rfull => rx_meta_fifo.rfull, meta_fifo_rused => rx_meta_fifo.rused, -- Digital Loopback Interface loopback_fifo_wenabled => tx_loopback_enabled, loopback_fifo_wreset => tx_reset, loopback_fifo_wclock => tx_loopback_fifo.wclock, loopback_fifo_wdata => tx_loopback_fifo.wdata, loopback_fifo_wreq => tx_loopback_fifo.wreq, loopback_fifo_wfull => tx_loopback_fifo.wfull, loopback_fifo_wused => tx_loopback_fifo.wused, -- ADSB interface adsb_data => fifo_data, adsb_valid => fifo_valid, -- RFFE Interface adc_controls => adc_controls, adc_streams => adc_streams ); adc_assignment_proc : process( all ) begin for i in adc_controls'range loop adc_controls(i).enable <= (ad9361.ch(i).adc.i.enable or ad9361.ch(i).adc.q.enable) and mimo_rx_enables(i); adc_controls(i).data_req <= '1'; adc_streams(i).data_i <= signed(ad9361.ch(i).adc.i.data); adc_streams(i).data_q <= signed(ad9361.ch(i).adc.q.data); adc_streams(i).data_v <= (ad9361.ch(i).adc.i.valid or ad9361.ch(i).adc.q.valid) and not adc_streams_last_v(i); end loop; end process; process(rx_clock) begin if( rx_reset = '1' ) then adc_streams_last_v <= ( others => '0' ) ; elsif( rising_edge( rx_clock ) ) then for i in adc_controls'range loop adc_streams_last_v(i) <= ad9361.ch(i).adc.i.valid or ad9361.ch(i).adc.q.valid; end loop; end if; end process; -- ======================================================================== -- RESET SYNCHRONIZERS -- ======================================================================== U_reset_sync_pclk : entity work.reset_synchronizer generic map ( INPUT_LEVEL => '1', OUTPUT_LEVEL => '1' ) port map ( clock => fx3_pclk_pll, async => sys_reset_async, sync => sys_reset_pclk ); U_reset_sync_sys : entity work.reset_synchronizer generic map ( INPUT_LEVEL => '1', OUTPUT_LEVEL => '1' ) port map ( clock => sys_clock, async => sys_reset_async, sync => sys_reset ); U_reset_sync_rx : entity work.reset_synchronizer generic map ( INPUT_LEVEL => '1', OUTPUT_LEVEL => '1' ) port map ( clock => rx_clock, async => sys_reset_pclk, sync => rx_reset ); U_reset_sync_tx : entity work.reset_synchronizer generic map ( INPUT_LEVEL => '1', OUTPUT_LEVEL => '1' ) port map ( clock => tx_clock, async => sys_reset_pclk, sync => tx_reset ); -- ======================================================================== -- SYNCHRONIZERS -- ======================================================================== U_sync_usb_speed_pclk : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => fx3_pclk_pll, async => nios_gpio.o.usb_speed, sync => usb_speed_pclk ); U_sync_usb_speed_rx : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => rx_clock, async => nios_gpio.o.usb_speed, sync => usb_speed_rx ); U_sync_usb_speed_tx : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => tx_clock, async => nios_gpio.o.usb_speed, sync => usb_speed_tx ); U_sync_meta_en_pclk : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => fx3_pclk_pll, async => nios_gpio.o.meta_sync, sync => meta_en_pclk ); U_sync_meta_en_rx : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => rx_clock, async => nios_gpio.o.meta_sync, sync => meta_en_rx ); U_sync_meta_en_tx : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => tx_clock, async => nios_gpio.o.meta_sync, sync => meta_en_tx ); U_sync_packet_en_pclk : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => fx3_pclk_pll, async => nios_gpio.o.packet_en, sync => packet_en_pclk ); U_sync_packet_en_rx : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => rx_clock, async => nios_gpio.o.packet_en, sync => packet_en_rx ); U_sync_packet_en_tx : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => tx_clock, async => nios_gpio.o.packet_en, sync => packet_en_tx ); generate_sync_rx_mux_sel : for i in rx_mux_sel'range generate U_sync_rx_mux_sel : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => rx_clock, async => nios_gpio.o.rx_mux_sel(i), sync => rx_mux_sel(i) ); end generate; generate_sync_mimo_rx_en : for i in mimo_rx_enables'range generate U_sync_mimo_rx_en : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => rx_clock, async => unpack(rffe_gpio.o).mimo_rx_en(i), sync => mimo_rx_enables(i) ); end generate; generate_sync_mimo_tx_en : for i in mimo_tx_enables'range generate U_sync_mimo_tx_en : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => tx_clock, async => unpack(rffe_gpio.o).mimo_tx_en(i), sync => mimo_tx_enables(i) ); end generate; generate_sync_adi_ctrl_out : for i in adi_ctrl_out'range generate U_sync_adi_ctrl_out : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => sys_clock, async => adi_ctrl_out(i), sync => rffe_gpio.i.ctrl_out(i) ); end generate; U_sync_adf_muxout : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => sys_clock, async => adf_muxout, sync => rffe_gpio.i.adf_muxout ); generate_sync_xb_gpio_in : for i in exp_gpio'range generate U_sync_xb_gpio_in : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => sys_clock, async => exp_gpio(i), sync => nios_xb_gpio_in(i) ); end generate; U_sync_rx_enable : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => rx_reset, clock => rx_clock, async => rx_enable_pclk, sync => rx_enable ); U_sync_tx_enable : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => tx_reset, clock => tx_clock, async => tx_enable_pclk, sync => tx_enable ); -- ======================================================================== -- ADSB -- ======================================================================== -- Front end mixing by -Fs/4, filtering and power calculation U_adsb_fe : entity work.adsb_fe port map ( clock => rx_clock, reset => rx_reset, in_i => adc_streams(0).data_i, --ad9361.ch(0).adc.i.data, in_q => adc_streams(0).data_q, --ad9361.ch(0).adc.q.data, in_valid => adc_streams(0).data_v, --ad9361.ch(0).adc.i.valid, out_power => adsb_power, out_valid => adsb_valid ) ; make_init : process(rx_clock, rx_reset) variable downcount : natural range 0 to 5 := 5 ; begin if( rx_reset = '1' ) then adsb_init <= '1' ; downcount := 5 ; elsif( rising_edge(rx_clock) ) then if( downcount > 0 ) then downcount := downcount - 1 ; adsb_init <= '1' ; else adsb_init <= '0' ; end if ; end if ; end process ; -- Message preamble detector and multiple decoders U_adsb_decoder : entity work.adsb_decoder generic map ( NUM_DECODERS => NUM_DECODERS ) port map ( clock => rx_clock, reset => rx_reset, init => adsb_init, in_power => adsb_power, in_valid => adsb_valid, debug_rpl => open, out_messages => msgs, out_valid => msgs_valid ) ; -- Aggregate into a single stream U_message_aggregator : entity work.message_aggregator generic map ( MSGS_PER_TIMEOUT => 128, PACKET_TIMEOUT => 32000000/100, NUM_DECODERS => NUM_DECODERS ) port map ( clock => rx_clock, reset => rx_reset, in_messages => msgs, in_valid => msgs_valid, out_message => fifo_data, out_valid => fifo_valid ) ; -- ======================================================================== -- HANDSHAKES -- ======================================================================== drive_handshake_timestamp : process( fx3_pclk_pll, sys_reset_pclk ) begin if( sys_reset_pclk = '1' ) then timestamp_req <= '0'; elsif( rising_edge(fx3_pclk_pll) ) then if( meta_en_pclk = '0' ) then timestamp_req <= '0'; else if( timestamp_ack = '0' ) then timestamp_req <= '1'; elsif( timestamp_ack = '1' ) then timestamp_req <= '0'; end if; end if; end if; end process; U_handshake_timestamp : entity work.handshake generic map ( DATA_WIDTH => tx_timestamp'length ) port map ( source_clock => tx_clock, source_reset => tx_reset, source_data => std_logic_vector(tx_timestamp), dest_clock => fx3_pclk_pll, dest_reset => sys_reset_pclk, unsigned(dest_data) => fx3_timestamp, dest_req => timestamp_req, dest_ack => timestamp_ack ); end architecture; bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/vhdl/bladerf-foxhunt.vhd000066400000000000000000001230131457144405000261220ustar00rootroot00000000000000-- Copyright (c) 2017 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.math_real.all; use ieee.math_complex.all; library work; use work.bladerf; use work.bladerf_p.all; use work.fifo_readwrite_p.all; architecture foxhunt_bladerf of bladerf is attribute noprune : boolean; attribute keep : boolean; alias sys_reset_async : std_logic is fx3_ctl(7); signal sys_reset_pclk : std_logic; signal sys_reset : std_logic; signal sys_clock : std_logic; signal sys_pll_locked : std_logic; signal sys_pll_reset : std_logic; signal fx3_pclk_pll : std_logic; signal fx3_pclk_pll_locked : std_logic; signal fx3_pclk_pll_reset : std_logic; signal rx_mux_sel : unsigned(2 downto 0); signal nios_xb_gpio_in : std_logic_vector(31 downto 0) := (others => '0'); signal nios_xb_gpio_out : std_logic_vector(31 downto 0) := (others => '0'); signal nios_xb_gpio_oe : std_logic_vector(31 downto 0) := (others => '0'); signal nios_gpio : nios_gpio_t; signal nios_gpo_slv : std_logic_vector(31 downto 0); signal i2c_scl_in : std_logic; signal i2c_scl_out : std_logic; signal i2c_scl_oen : std_logic; signal i2c_sda_in : std_logic; signal i2c_sda_out : std_logic; signal i2c_sda_oen : std_logic; signal tx_sample_fifo : tx_fifo_t := TX_FIFO_T_DEFAULT; signal rx_sample_fifo : rx_fifo_t := RX_FIFO_T_DEFAULT; signal tx_loopback_fifo : loopback_fifo_t := LOOPBACK_FIFO_T_DEFAULT; signal tx_meta_fifo : meta_fifo_tx_t := META_FIFO_TX_T_DEFAULT; signal rx_meta_fifo : meta_fifo_rx_t := META_FIFO_RX_T_DEFAULT; signal usb_speed_pclk : std_logic; signal usb_speed_rx : std_logic; signal usb_speed_tx : std_logic; signal tx_reset : std_logic; signal rx_reset : std_logic; signal tx_enable_pclk : std_logic; signal rx_enable_pclk : std_logic; signal tx_enable : std_logic; signal rx_enable : std_logic; signal meta_en_pclk : std_logic; signal meta_en_tx : std_logic; signal meta_en_rx : std_logic; signal tx_timestamp : unsigned(63 downto 0); signal rx_timestamp : unsigned(63 downto 0); signal timestamp_sync : std_logic; signal tx_loopback_enabled : std_logic := '0'; signal fx3_gpif_in : std_logic_vector(31 downto 0); signal fx3_gpif_out : std_logic_vector(31 downto 0); signal fx3_gpif_oe : std_logic; signal fx3_ctl_in : std_logic_vector(12 downto 0); signal fx3_ctl_out : std_logic_vector(12 downto 0); signal fx3_ctl_oe : std_logic_vector(12 downto 0); signal rx_overflow_led : std_logic := '1'; signal led1_blink : std_logic; signal nios_sdo : std_logic; signal nios_sdio : std_logic; signal nios_sclk : std_logic; signal nios_ss_n : std_logic_vector(1 downto 0); signal command_serial_in : std_logic; signal command_serial_out : std_logic; signal timestamp_req : std_logic; signal timestamp_ack : std_logic; signal fx3_timestamp : unsigned(63 downto 0); signal rx_ts_reset : std_logic; signal tx_ts_reset : std_logic; signal rx_trigger_ctl_i : std_logic_vector(7 downto 0); signal rx_trigger_ctl : trigger_t := TRIGGER_T_DEFAULT; alias rx_trigger_line : std_logic is mini_exp1; signal tx_trigger_ctl_i : std_logic_vector(7 downto 0); signal tx_trigger_ctl : trigger_t := TRIGGER_T_DEFAULT; alias tx_trigger_line : std_logic is mini_exp1; signal rffe_gpio : rffe_gpio_t := ( i => RFFE_GPI_DEFAULT, o => pack(RFFE_GPO_DEFAULT) ); signal ad9361 : mimo_2r2t_t := MIMO_2R2T_T_DEFAULT; alias tx_clock is ad9361.clock; alias rx_clock is ad9361.clock; signal mimo_rx_enables : std_logic_vector(RFFE_GPO_DEFAULT.mimo_rx_en'range) := RFFE_GPO_DEFAULT.mimo_rx_en; signal mimo_tx_enables : std_logic_vector(RFFE_GPO_DEFAULT.mimo_tx_en'range) := RFFE_GPO_DEFAULT.mimo_tx_en; signal dac_controls : sample_controls_t(ad9361.ch'range) := (others => SAMPLE_CONTROL_DISABLE); signal dac_streams : sample_streams_t(dac_controls'range) := (others => ZERO_SAMPLE); signal adc_controls : sample_controls_t(ad9361.ch'range) := (others => SAMPLE_CONTROL_DISABLE); signal adc_streams : sample_streams_t(adc_controls'range) := (others => ZERO_SAMPLE); signal ps_sync : std_logic_vector(0 downto 0) := (others => '0'); signal tonegen_streams : sample_streams_t(dac_controls'range) := (others => ZERO_SAMPLE); signal tonegen_sample_i : std_logic_vector(15 downto 0); signal tonegen_sample_q : std_logic_vector(15 downto 0); signal tonegen_sample_v : std_logic; signal tonegen_running : std_logic; -- override nios_system from bladerf_p component nios_system is port ( clk_clk : in std_logic := 'X'; reset_reset_n : in std_logic := 'X'; dac_MISO : in std_logic := 'X'; dac_MOSI : out std_logic; dac_SCLK : out std_logic; dac_SS_n : out std_logic_vector(1 downto 0); spi_MISO : in std_logic := 'X'; spi_MOSI : out std_logic; spi_SCLK : out std_logic; spi_SS_n : out std_logic; gpio_in_port : in std_logic_vector(31 downto 0); gpio_out_port : out std_logic_vector(31 downto 0); gpio_rffe_0_in_port : in std_logic_vector(31 downto 0); gpio_rffe_0_out_port : out std_logic_vector(31 downto 0); ad9361_dac_sync_in_sync : in std_logic; ad9361_dac_sync_out_sync : out std_logic; ad9361_data_clock_clk : out std_logic; ad9361_data_reset_reset : out std_logic; ad9361_device_if_rx_clk_in_p : in std_logic; ad9361_device_if_rx_clk_in_n : in std_logic; ad9361_device_if_rx_frame_in_p : in std_logic; ad9361_device_if_rx_frame_in_n : in std_logic; ad9361_device_if_rx_data_in_p : in std_logic_vector(5 downto 0); ad9361_device_if_rx_data_in_n : in std_logic_vector(5 downto 0); ad9361_device_if_tx_clk_out_p : out std_logic; ad9361_device_if_tx_clk_out_n : out std_logic; ad9361_device_if_tx_frame_out_p : out std_logic; ad9361_device_if_tx_frame_out_n : out std_logic; ad9361_device_if_tx_data_out_p : out std_logic_vector(5 downto 0); ad9361_device_if_tx_data_out_n : out std_logic_vector(5 downto 0); ad9361_adc_i0_enable : out std_logic; ad9361_adc_i0_valid : out std_logic; ad9361_adc_i0_data : out std_logic_vector(15 downto 0); ad9361_adc_i1_enable : out std_logic; ad9361_adc_i1_valid : out std_logic; ad9361_adc_i1_data : out std_logic_vector(15 downto 0); ad9361_adc_overflow_ovf : in std_logic; ad9361_adc_q0_enable : out std_logic; ad9361_adc_q0_valid : out std_logic; ad9361_adc_q0_data : out std_logic_vector(15 downto 0); ad9361_adc_q1_enable : out std_logic; ad9361_adc_q1_valid : out std_logic; ad9361_adc_q1_data : out std_logic_vector(15 downto 0); ad9361_adc_underflow_unf : in std_logic; ad9361_dac_i0_enable : out std_logic; ad9361_dac_i0_valid : out std_logic; ad9361_dac_i0_data : in std_logic_vector(15 downto 0); ad9361_dac_i1_enable : out std_logic; ad9361_dac_i1_valid : out std_logic; ad9361_dac_i1_data : in std_logic_vector(15 downto 0); ad9361_dac_overflow_ovf : in std_logic; ad9361_dac_q0_enable : out std_logic; ad9361_dac_q0_valid : out std_logic; ad9361_dac_q0_data : in std_logic_vector(15 downto 0); ad9361_dac_q1_enable : out std_logic; ad9361_dac_q1_valid : out std_logic; ad9361_dac_q1_data : in std_logic_vector(15 downto 0); ad9361_dac_underflow_unf : in std_logic; oc_i2c_arst_i : in std_logic; oc_i2c_scl_pad_i : in std_logic; oc_i2c_scl_pad_o : out std_logic; oc_i2c_scl_padoen_o : out std_logic; oc_i2c_sda_pad_i : in std_logic; oc_i2c_sda_pad_o : out std_logic; oc_i2c_sda_padoen_o : out std_logic; xb_gpio_in_port : in std_logic_vector(31 downto 0) := (others => 'X'); xb_gpio_out_port : out std_logic_vector(31 downto 0); xb_gpio_dir_export : out std_logic_vector(31 downto 0); command_serial_in : in std_logic; command_serial_out : out std_logic; rx_tamer_ts_sync_in : in std_logic; rx_tamer_ts_sync_out : out std_logic; rx_tamer_ts_pps : in std_logic; rx_tamer_ts_clock : in std_logic; rx_tamer_ts_reset : in std_logic; rx_tamer_ts_time : out std_logic_vector(63 downto 0); tx_tamer_ts_sync_in : in std_logic; tx_tamer_ts_sync_out : out std_logic; tx_tamer_ts_pps : in std_logic; tx_tamer_ts_clock : in std_logic; tx_tamer_ts_reset : in std_logic; tx_tamer_ts_time : out std_logic_vector(63 downto 0); tx_trigger_ctl_in_port : in std_logic_vector(7 downto 0); tx_trigger_ctl_out_port : out std_logic_vector(7 downto 0); rx_trigger_ctl_in_port : in std_logic_vector(7 downto 0); rx_trigger_ctl_out_port : out std_logic_vector(7 downto 0); tonegen_sample_valid : out std_logic; tonegen_sample_i : out std_logic_vector(15 downto 0); tonegen_sample_q : out std_logic_vector(15 downto 0); tonegen_sample_clk : in std_logic := 'X'; tonegen_status_empty : out std_logic; tonegen_status_full : out std_logic; tonegen_status_running : out std_logic ); end component; signal tx_packet_control : packet_control_t ; signal rx_packet_control : packet_control_t := PACKET_CONTROL_DEFAULT ; signal rx_packet_ready : std_logic; signal tx_packet_ready : std_logic; signal tx_packet_empty : std_logic; begin -- ======================================================================== -- PLLs -- ======================================================================== -- Create 80 MHz system clock from 38.4 MHz U_system_pll : component system_pll port map ( refclk => c5_clock2, rst => sys_pll_reset, outclk_0 => sys_clock, locked => sys_pll_locked ); U_pll_reset_pll : entity work.pll_reset generic map ( SYS_CLOCK_FREQ_HZ => 38_400_000, DEVICE_FAMILY => "Cyclone V" ) port map ( sys_clock => c5_clock2, pll_locked => sys_pll_locked, pll_reset => sys_pll_reset ); -- Use PLL to adjust the phase of the FX3 PCLK to -- retime the FX3 GPIF interface for timing closure. U_fx3_pll : component fx3_pll port map ( refclk => fx3_pclk, rst => fx3_pclk_pll_reset, outclk_0 => fx3_pclk_pll, locked => fx3_pclk_pll_locked ); U_pll_reset_fx3_pll : entity work.pll_reset generic map ( SYS_CLOCK_FREQ_HZ => 100_000_000, DEVICE_FAMILY => "Cyclone V" ) port map ( sys_clock => fx3_pclk, pll_locked => fx3_pclk_pll_locked, pll_reset => fx3_pclk_pll_reset ); -- ======================================================================== -- POWER SUPPLY SYNCHRONIZATION -- ======================================================================== U_ps_sync : entity work.ps_sync generic map ( OUTPUTS => 1, USE_LFSR => true, HOP_LIST => adp2384_sync_divisors( REFCLK_HZ => 38.4e6, n_divisors => 7 ), HOP_RATE => 100 ) port map ( refclk => c5_clock2, sync => ps_sync ); ps_sync_1p1 <= ps_sync(0); ps_sync_1p8 <= ps_sync(0); -- ======================================================================== -- FX3 GPIF -- ======================================================================== -- FX3 GPIF U_fx3_gpif : entity work.fx3_gpif port map ( pclk => fx3_pclk_pll, reset => sys_reset_pclk, usb_speed => usb_speed_pclk, meta_enable => meta_en_pclk, packet_enable => '0', rx_enable => rx_enable_pclk, tx_enable => tx_enable_pclk, gpif_in => fx3_gpif_in, gpif_out => fx3_gpif_out, gpif_oe => fx3_gpif_oe, ctl_in => fx3_ctl_in, ctl_out => fx3_ctl_out, ctl_oe => fx3_ctl_oe, tx_fifo_write => open, tx_fifo_full => '0', tx_fifo_empty => '0', tx_fifo_usedw => tx_sample_fifo.wused, tx_fifo_data => open, tx_timestamp => fx3_timestamp, tx_meta_fifo_write => open, tx_meta_fifo_full => '0', tx_meta_fifo_empty => '0', tx_meta_fifo_usedw => tx_meta_fifo.wused, tx_meta_fifo_data => open, rx_fifo_read => open, rx_fifo_full => '0', rx_fifo_empty => '0', rx_fifo_usedw => rx_sample_fifo.rused, rx_fifo_data => (others => '0'), rx_meta_fifo_read => open, rx_meta_fifo_full => '0', rx_meta_fifo_empty => '0', rx_meta_fifo_usedr => rx_meta_fifo.rused, rx_meta_fifo_data => (others => '0') ); -- FX3 GPIF bidirectional signal control register_gpif : process(sys_reset_pclk, fx3_pclk_pll) begin if( sys_reset_pclk = '1' ) then fx3_gpif <= (others =>'Z'); fx3_gpif_in <= (others =>'0'); elsif( rising_edge(fx3_pclk_pll) ) then fx3_gpif_in <= fx3_gpif; if( fx3_gpif_oe = '1' ) then fx3_gpif <= fx3_gpif_out; else fx3_gpif <= (others =>'Z'); end if; end if; end process; -- FX3 CTL bidirectional signal control generate_ctl : for i in fx3_ctl'range generate fx3_ctl(i) <= fx3_ctl_out(i) when fx3_ctl_oe(i) = '1' else 'Z'; end generate; fx3_ctl_in <= fx3_ctl; toggle_led1 : process(fx3_pclk_pll) variable count : natural range 0 to 10_000_000 := 10_000_000; begin if( rising_edge(fx3_pclk_pll) ) then count := count - 1; if( count = 0 ) then count := 10_000_000; led1_blink <= not led1_blink; end if; end if; end process; -- ======================================================================== -- NIOS SYSTEM -- ======================================================================== U_nios_system : component nios_system port map ( clk_clk => sys_clock, reset_reset_n => '1', dac_MISO => nios_sdo, dac_MOSI => nios_sdio, dac_SCLK => nios_sclk, dac_SS_n => nios_ss_n, spi_MISO => adi_spi_sdo, spi_MOSI => adi_spi_sdi, spi_SCLK => adi_spi_sclk, spi_SS_n => adi_spi_csn, gpio_in_port => pack(nios_gpio.i, '0'), gpio_out_port => nios_gpo_slv, gpio_rffe_0_in_port => pack(rffe_gpio), gpio_rffe_0_out_port => rffe_gpio.o, ad9361_dac_sync_in_sync => '0', ad9361_dac_sync_out_sync => adi_sync_in, ad9361_data_clock_clk => ad9361.clock, -- out std_logic; ad9361_data_reset_reset => ad9361.reset, -- out std_logic; ad9361_device_if_rx_clk_in_p => adi_rx_clock, ad9361_device_if_rx_clk_in_n => '0', ad9361_device_if_rx_frame_in_p => adi_rx_frame, ad9361_device_if_rx_frame_in_n => '0', ad9361_device_if_rx_data_in_p => adi_rx_data, ad9361_device_if_rx_data_in_n => (others => '0'), ad9361_device_if_tx_clk_out_p => adi_tx_clock, ad9361_device_if_tx_clk_out_n => open, ad9361_device_if_tx_frame_out_p => adi_tx_frame, ad9361_device_if_tx_frame_out_n => open, ad9361_device_if_tx_data_out_p => adi_tx_data, ad9361_device_if_tx_data_out_n => open, ad9361_adc_i0_enable => ad9361.ch(0).adc.i.enable, -- out sl ad9361_adc_i0_valid => ad9361.ch(0).adc.i.valid, -- out sl ad9361_adc_i0_data => ad9361.ch(0).adc.i.data, -- out slv(15:0) ad9361_adc_i1_enable => ad9361.ch(1).adc.i.enable, -- out sl ad9361_adc_i1_valid => ad9361.ch(1).adc.i.valid, -- out sl ad9361_adc_i1_data => ad9361.ch(1).adc.i.data, -- out slv(15:0) ad9361_adc_overflow_ovf => ad9361.adc_overflow, -- in sl ad9361_adc_q0_enable => ad9361.ch(0).adc.q.enable, -- out sl ad9361_adc_q0_valid => ad9361.ch(0).adc.q.valid, -- out sl ad9361_adc_q0_data => ad9361.ch(0).adc.q.data, -- out slv(15:0) ad9361_adc_q1_enable => ad9361.ch(1).adc.q.enable, -- out sl ad9361_adc_q1_valid => ad9361.ch(1).adc.q.valid, -- out sl ad9361_adc_q1_data => ad9361.ch(1).adc.q.data, -- out slv(15:0) ad9361_adc_underflow_unf => ad9361.adc_underflow, -- in sl ad9361_dac_i0_enable => ad9361.ch(0).dac.i.enable, -- out sl ad9361_dac_i0_valid => ad9361.ch(0).dac.i.valid, -- out sl ad9361_dac_i0_data => ad9361.ch(0).dac.i.data, -- in slv(15:0) ad9361_dac_i1_enable => ad9361.ch(1).dac.i.enable, -- out sl ad9361_dac_i1_valid => ad9361.ch(1).dac.i.valid, -- out sl ad9361_dac_i1_data => ad9361.ch(1).dac.i.data, -- in slv(15:0) ad9361_dac_overflow_ovf => ad9361.dac_overflow, -- in sl ad9361_dac_q0_enable => ad9361.ch(0).dac.q.enable, -- out sl ad9361_dac_q0_valid => ad9361.ch(0).dac.q.valid, -- out sl ad9361_dac_q0_data => ad9361.ch(0).dac.q.data, -- in slv(15:0) ad9361_dac_q1_enable => ad9361.ch(1).dac.q.enable, -- out sl ad9361_dac_q1_valid => ad9361.ch(1).dac.q.valid, -- out sl ad9361_dac_q1_data => ad9361.ch(1).dac.q.data, -- in slv(15:0) ad9361_dac_underflow_unf => ad9361.dac_underflow, -- in sl xb_gpio_in_port => nios_xb_gpio_in, xb_gpio_out_port => nios_xb_gpio_out, xb_gpio_dir_export => nios_xb_gpio_oe, command_serial_in => command_serial_in, command_serial_out => command_serial_out, oc_i2c_arst_i => '0', oc_i2c_scl_pad_i => i2c_scl_in, oc_i2c_scl_pad_o => i2c_scl_out, oc_i2c_scl_padoen_o => i2c_scl_oen, oc_i2c_sda_pad_i => i2c_sda_in, oc_i2c_sda_pad_o => i2c_sda_out, oc_i2c_sda_padoen_o => i2c_sda_oen, rx_tamer_ts_sync_in => '0', rx_tamer_ts_sync_out => open, rx_tamer_ts_pps => '0', rx_tamer_ts_clock => rx_clock, rx_tamer_ts_reset => rx_ts_reset, unsigned(rx_tamer_ts_time) => rx_timestamp, tx_tamer_ts_sync_in => '0', tx_tamer_ts_sync_out => open, tx_tamer_ts_pps => '0', tx_tamer_ts_clock => tx_clock, tx_tamer_ts_reset => tx_ts_reset, unsigned(tx_tamer_ts_time) => tx_timestamp, rx_trigger_ctl_out_port => rx_trigger_ctl_i, tx_trigger_ctl_out_port => tx_trigger_ctl_i, rx_trigger_ctl_in_port => pack(rx_trigger_ctl), tx_trigger_ctl_in_port => pack(tx_trigger_ctl), tonegen_sample_clk => tx_clock, tonegen_sample_valid => tonegen_sample_v, tonegen_sample_i => tonegen_sample_i, tonegen_sample_q => tonegen_sample_q, tonegen_status_empty => open, tonegen_status_full => open, tonegen_status_running => tonegen_running ); tonegen_streams(0).data_i <= signed(tonegen_sample_i); tonegen_streams(0).data_q <= signed(tonegen_sample_q); tonegen_streams(0).data_v <= tonegen_sample_v; -- FX3 UART command_serial_in <= fx3_uart_txd when sys_reset = '0' else '1'; fx3_uart_rxd <= command_serial_out when sys_reset = '0' else 'Z'; -- FX3 UART CTS and Flash SPI CSx are tied to the same signal. -- Allow SPI accesses when FPGA is in reset fx3_uart_cts <= '1' when sys_reset_pclk = '0' else 'Z'; -- Unpack the Nios general-purpose outputs into a record nios_gpio.o <= unpack(nios_gpo_slv); -- Readback of Nios general-purpose outputs nios_gpio.i.gpo_readback <= nios_gpio.o; -- RFFE GPIO outputs adi_ctrl_in <= unpack(rffe_gpio.o).ctrl_in; adi_tx_spdt2_v <= unpack(rffe_gpio.o).tx_spdt2; adi_tx_spdt1_v <= unpack(rffe_gpio.o).tx_spdt1; tx_bias_en <= unpack(rffe_gpio.o).tx_bias_en; adi_rx_spdt2_v <= unpack(rffe_gpio.o).rx_spdt2; adi_rx_spdt1_v <= unpack(rffe_gpio.o).rx_spdt1; rx_bias_en <= unpack(rffe_gpio.o).rx_bias_en; --adi_sync_in <= unpack(rffe_gpio.o).sync_in; adi_en_agc <= unpack(rffe_gpio.o).en_agc; adi_txnrx <= unpack(rffe_gpio.o).txnrx; adi_enable <= unpack(rffe_gpio.o).enable; adi_reset_n <= unpack(rffe_gpio.o).reset_n; -- Unpack trigger GPIO bits into records rx_trigger_ctl <= unpack(rx_trigger_ctl_i, rx_trigger_line); tx_trigger_ctl <= unpack(tx_trigger_ctl_i, tx_trigger_line); -- LEDs led(1) <= led1_blink when nios_gpio.o.led_mode = '0' else not nios_gpio.o.leds(1); led(2) <= not tonegen_running when nios_gpio.o.led_mode = '0' else not nios_gpio.o.leds(2); led(3) <= rx_overflow_led when nios_gpio.o.led_mode = '0' else not nios_gpio.o.leds(3); -- DAC SPI (data latched on falling edge) dac_sclk <= not nios_sclk when nios_gpio.o.adf_chip_enable = '0' else '0'; dac_sdi <= nios_sdio when nios_gpio.o.adf_chip_enable = '0' else '0'; dac_csn <= nios_ss_n(0) when nios_gpio.o.adf_chip_enable = '0' else '1'; -- ADF SPI (data latched on rising edge) adf_sclk <= nios_sclk when nios_gpio.o.adf_chip_enable = '1' else '0'; adf_sdi <= nios_sdio when nios_gpio.o.adf_chip_enable = '1' else '0'; adf_csn <= nios_ss_n(1) when nios_gpio.o.adf_chip_enable = '1' else '1'; adf_ce <= nios_gpio.o.adf_chip_enable; nios_sdo <= adf_muxout when ((nios_ss_n(1) = '0') and (nios_gpio.o.adf_chip_enable = '1')) else '0'; -- Power monitor I2C pwr_scl <= i2c_scl_out when i2c_scl_oen = '0' else 'Z'; pwr_sda <= i2c_sda_out when i2c_sda_oen = '0' else 'Z'; i2c_scl_in <= pwr_scl; i2c_sda_in <= pwr_sda; -- TPS2115A status nios_gpio.i.pwr_status <= pwr_status; -- SI53304 controls / clock output enables si_clock_sel <= nios_gpio.o.si_clock_sel; c5_clock2_oe <= '1'; exp_clock_oe <= exp_present and exp_clock_req; ufl_clock_oe <= nios_gpio.o.ufl_clock_oe; -- Expansion I2C exp_i2c_scl <= 'Z'; exp_i2c_sda <= 'Z'; -- Expansion GPIO outputs generate_xb_gpio_out : for i in exp_gpio'range generate exp_gpio(i) <= nios_xb_gpio_out(i) when nios_xb_gpio_oe(i) = '1' else 'Z'; end generate; -- TX Submodule U_tx : entity work.tx generic map ( NUM_STREAMS => dac_controls'length ) port map ( tx_reset => tx_reset, tx_clock => tx_clock, tx_enable => tx_enable, meta_en => meta_en_tx, timestamp_reset => tx_ts_reset, usb_speed => usb_speed_tx, tx_underflow_led => open, tx_timestamp => tx_timestamp, -- Triggering trigger_arm => tx_trigger_ctl.arm, trigger_fire => tx_trigger_ctl.fire, trigger_master => tx_trigger_ctl.master, trigger_line => tx_trigger_line, -- Eightbit mode eight_bit_mode_en => '0', -- Packet FIFO packet_en => '0', packet_empty => tx_packet_empty, packet_control => tx_packet_control, packet_ready => tx_packet_ready, -- Samples from host via FX3 sample_fifo_wclock => fx3_pclk_pll, sample_fifo_wreq => '0', sample_fifo_wdata => (others => '0'), sample_fifo_wempty => open, sample_fifo_wfull => open, sample_fifo_wused => open, -- Metadata from host via FX3 meta_fifo_wclock => fx3_pclk_pll, meta_fifo_wreq => '0', meta_fifo_wdata => (others => '0'), meta_fifo_wempty => open, meta_fifo_wfull => open, meta_fifo_wused => open, -- Digital Loopback Interface loopback_enabled => '0', loopback_fifo_wclock => tx_loopback_fifo.wclock, loopback_fifo_wdata => open, loopback_fifo_wreq => open, loopback_fifo_wfull => '0', loopback_fifo_wused => (others => '0'), -- RFFE Interface dac_controls => dac_controls, dac_streams => open ); dac_streams(0) <= tonegen_streams(0); dac_streams(1) <= tonegen_streams(0); dac_assignment_proc : process( all ) begin for i in dac_controls'range loop dac_controls(i).enable <= (ad9361.ch(i).dac.i.enable or ad9361.ch(i).dac.q.enable or tx_loopback_enabled) and mimo_tx_enables(i); dac_controls(i).data_req <= (ad9361.ch(i).dac.i.valid or ad9361.ch(i).dac.q.valid or tx_loopback_enabled) and mimo_tx_enables(i); if (rising_edge(tx_clock) and dac_streams(i).data_v = '1') then ad9361.ch(i).dac.i.data <= std_logic_vector(dac_streams(i).data_i(11 downto 0)) & "0000"; ad9361.ch(i).dac.q.data <= std_logic_vector(dac_streams(i).data_q(11 downto 0)) & "0000"; end if; end loop; end process; -- RX Submodule U_rx : entity work.rx generic map ( NUM_STREAMS => adc_controls'length ) port map ( rx_reset => rx_reset, rx_clock => rx_clock, rx_enable => rx_enable, meta_en => meta_en_rx, timestamp_reset => rx_ts_reset, usb_speed => usb_speed_rx, rx_mux_sel => rx_mux_sel, rx_overflow_led => rx_overflow_led, rx_timestamp => rx_timestamp, -- Triggering trigger_arm => rx_trigger_ctl.arm, trigger_fire => rx_trigger_ctl.fire, trigger_master => rx_trigger_ctl.master, trigger_line => rx_trigger_line, -- Eightbit mode eight_bit_mode_en => '0', -- Packet FIFO packet_en => '0', packet_control => rx_packet_control, packet_ready => rx_packet_ready, -- Samples to host via FX3 sample_fifo_rclock => fx3_pclk_pll, sample_fifo_raclr => '1', sample_fifo_rreq => '0', sample_fifo_rdata => open, sample_fifo_rempty => open, sample_fifo_rfull => open, sample_fifo_rused => open, -- Mini expansion signals mini_exp => mini_exp2 & mini_exp1, -- Metadata to host via FX3 meta_fifo_rclock => fx3_pclk_pll, meta_fifo_raclr => '1', meta_fifo_rreq => '0', meta_fifo_rdata => open, meta_fifo_rempty => open, meta_fifo_rfull => open, meta_fifo_rused => open, -- Digital Loopback Interface loopback_fifo_wenabled => tx_loopback_enabled, loopback_fifo_wreset => tx_reset, loopback_fifo_wclock => tx_loopback_fifo.wclock, loopback_fifo_wdata => (others => '0'), loopback_fifo_wreq => '0', loopback_fifo_wfull => open, loopback_fifo_wused => open, -- RFFE Interface adc_controls => adc_controls, adc_streams => adc_streams ); adc_assignment_proc : process( all ) begin for i in adc_controls'range loop adc_controls(i).enable <= '0'; adc_controls(i).data_req <= '0'; adc_streams(i).data_i <= (others => '0'); adc_streams(i).data_q <= (others => '0'); adc_streams(i).data_v <= '0'; end loop; end process; -- ======================================================================== -- RESET SYNCHRONIZERS -- ======================================================================== U_reset_sync_pclk : entity work.reset_synchronizer generic map ( INPUT_LEVEL => '1', OUTPUT_LEVEL => '1' ) port map ( clock => fx3_pclk_pll, async => sys_reset_async, sync => sys_reset_pclk ); U_reset_sync_sys : entity work.reset_synchronizer generic map ( INPUT_LEVEL => '1', OUTPUT_LEVEL => '1' ) port map ( clock => sys_clock, async => sys_reset_async, sync => sys_reset ); U_reset_sync_rx : entity work.reset_synchronizer generic map ( INPUT_LEVEL => '1', OUTPUT_LEVEL => '1' ) port map ( clock => rx_clock, async => sys_reset_pclk, sync => rx_reset ); U_reset_sync_tx : entity work.reset_synchronizer generic map ( INPUT_LEVEL => '1', OUTPUT_LEVEL => '1' ) port map ( clock => tx_clock, async => sys_reset_pclk, sync => tx_reset ); -- ======================================================================== -- SYNCHRONIZERS -- ======================================================================== U_sync_usb_speed_pclk : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => fx3_pclk_pll, async => nios_gpio.o.usb_speed, sync => usb_speed_pclk ); U_sync_usb_speed_rx : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => rx_clock, async => nios_gpio.o.usb_speed, sync => usb_speed_rx ); U_sync_usb_speed_tx : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => tx_clock, async => nios_gpio.o.usb_speed, sync => usb_speed_tx ); U_sync_meta_en_pclk : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => fx3_pclk_pll, async => nios_gpio.o.meta_sync, sync => meta_en_pclk ); U_sync_meta_en_rx : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => rx_clock, async => nios_gpio.o.meta_sync, sync => meta_en_rx ); U_sync_meta_en_tx : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => tx_clock, async => nios_gpio.o.meta_sync, sync => meta_en_tx ); generate_sync_rx_mux_sel : for i in rx_mux_sel'range generate U_sync_rx_mux_sel : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => rx_clock, async => nios_gpio.o.rx_mux_sel(i), sync => rx_mux_sel(i) ); end generate; --generate_sync_mimo_rx_en : for i in mimo_rx_enables'range generate -- U_sync_mimo_rx_en : entity work.synchronizer -- generic map ( -- RESET_LEVEL => '0' -- ) -- port map ( -- reset => '0', -- clock => rx_clock, -- async => unpack(rffe_gpio.o).mimo_rx_en(i), -- sync => mimo_rx_enables(i) -- ); --end generate; generate_sync_mimo_tx_en : for i in mimo_tx_enables'range generate U_sync_mimo_tx_en : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => tx_clock, async => unpack(rffe_gpio.o).mimo_tx_en(i), sync => mimo_tx_enables(i) ); end generate; generate_sync_adi_ctrl_out : for i in adi_ctrl_out'range generate U_sync_adi_ctrl_out : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => sys_clock, async => adi_ctrl_out(i), sync => rffe_gpio.i.ctrl_out(i) ); end generate; U_sync_adf_muxout : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => sys_clock, async => adf_muxout, sync => rffe_gpio.i.adf_muxout ); generate_sync_xb_gpio_in : for i in exp_gpio'range generate U_sync_xb_gpio_in : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => sys_clock, async => exp_gpio(i), sync => nios_xb_gpio_in(i) ); end generate; U_sync_rx_enable : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => rx_reset, clock => rx_clock, async => rx_enable_pclk, sync => rx_enable ); U_sync_tx_enable : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => tx_reset, clock => tx_clock, async => tx_enable_pclk, sync => tx_enable ); -- ======================================================================== -- HANDSHAKES -- ======================================================================== drive_handshake_timestamp : process( fx3_pclk_pll, sys_reset_pclk ) begin if( sys_reset_pclk = '1' ) then timestamp_req <= '0'; elsif( rising_edge(fx3_pclk_pll) ) then if( meta_en_pclk = '0' ) then timestamp_req <= '0'; else if( timestamp_ack = '0' ) then timestamp_req <= '1'; elsif( timestamp_ack = '1' ) then timestamp_req <= '0'; end if; end if; end if; end process; U_handshake_timestamp : entity work.handshake generic map ( DATA_WIDTH => tx_timestamp'length ) port map ( source_clock => tx_clock, source_reset => tx_reset, source_data => std_logic_vector(tx_timestamp), dest_clock => fx3_pclk_pll, dest_reset => sys_reset_pclk, unsigned(dest_data) => fx3_timestamp, dest_req => timestamp_req, dest_ack => timestamp_ack ); end architecture; bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/vhdl/bladerf-hosted.vhd000066400000000000000000001173511457144405000257250ustar00rootroot00000000000000-- Copyright (c) 2017 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.math_real.all; use ieee.math_complex.all; library work; use work.bladerf; use work.bladerf_p.all; use work.fifo_readwrite_p.all; architecture hosted_bladerf of bladerf is attribute noprune : boolean; attribute keep : boolean; alias sys_reset_async : std_logic is fx3_ctl(7); signal sys_reset_pclk : std_logic; signal sys_reset : std_logic; signal sys_clock : std_logic; signal sys_pll_locked : std_logic; signal sys_pll_reset : std_logic; signal fx3_pclk_pll : std_logic; signal fx3_pclk_pll_locked : std_logic; signal fx3_pclk_pll_reset : std_logic; signal rx_mux_sel : unsigned(2 downto 0); signal nios_xb_gpio_in : std_logic_vector(31 downto 0) := (others => '0'); signal nios_xb_gpio_out : std_logic_vector(31 downto 0) := (others => '0'); signal nios_xb_gpio_oe : std_logic_vector(31 downto 0) := (others => '0'); signal nios_gpio : nios_gpio_t; signal nios_gpo_slv : std_logic_vector(31 downto 0); signal i2c_scl_in : std_logic; signal i2c_scl_out : std_logic; signal i2c_scl_oen : std_logic; signal i2c_sda_in : std_logic; signal i2c_sda_out : std_logic; signal i2c_sda_oen : std_logic; signal tx_sample_fifo : tx_fifo_t := TX_FIFO_T_DEFAULT; signal rx_sample_fifo : rx_fifo_t := RX_FIFO_T_DEFAULT; signal tx_loopback_fifo : loopback_fifo_t := LOOPBACK_FIFO_T_DEFAULT; signal tx_meta_fifo : meta_fifo_tx_t := META_FIFO_TX_T_DEFAULT; signal rx_meta_fifo : meta_fifo_rx_t := META_FIFO_RX_T_DEFAULT; signal usb_speed_pclk : std_logic; signal usb_speed_rx : std_logic; signal usb_speed_tx : std_logic; signal tx_reset : std_logic; signal rx_reset : std_logic; signal tx_enable_pclk : std_logic; signal rx_enable_pclk : std_logic; signal tx_enable : std_logic; signal rx_enable : std_logic; signal meta_en_pclk : std_logic; signal meta_en_tx : std_logic; signal meta_en_rx : std_logic; signal eightbit_en_pclk : std_logic; signal eightbit_en_tx : std_logic; signal eightbit_en_rx : std_logic; signal packet_en_pclk : std_logic; signal packet_en_tx : std_logic; signal packet_en_rx : std_logic; signal tx_timestamp : unsigned(63 downto 0); signal rx_timestamp : unsigned(63 downto 0); signal timestamp_sync : std_logic; signal tx_loopback_enabled : std_logic := '0'; signal fx3_gpif_in : std_logic_vector(31 downto 0); signal fx3_gpif_out : std_logic_vector(31 downto 0); signal fx3_gpif_oe : std_logic; signal fx3_ctl_in : std_logic_vector(12 downto 0); signal fx3_ctl_out : std_logic_vector(12 downto 0); signal fx3_ctl_oe : std_logic_vector(12 downto 0); signal tx_underflow_led : std_logic := '1'; signal rx_overflow_led : std_logic := '1'; signal led1_blink : std_logic; signal nios_sdo : std_logic; signal nios_sdio : std_logic; signal nios_sclk : std_logic; signal nios_ss_n : std_logic_vector(1 downto 0); signal command_serial_in : std_logic; signal command_serial_out : std_logic; signal timestamp_req : std_logic; signal timestamp_ack : std_logic; signal fx3_timestamp : unsigned(63 downto 0); signal rx_ts_reset : std_logic; signal tx_ts_reset : std_logic; signal rx_trigger_ctl_i : std_logic_vector(7 downto 0); signal rx_trigger_ctl : trigger_t := TRIGGER_T_DEFAULT; alias rx_trigger_line : std_logic is mini_exp1; signal tx_trigger_ctl_i : std_logic_vector(7 downto 0); signal tx_trigger_ctl : trigger_t := TRIGGER_T_DEFAULT; alias tx_trigger_line : std_logic is mini_exp1; signal rffe_gpio : rffe_gpio_t := ( i => RFFE_GPI_DEFAULT, o => pack(RFFE_GPO_DEFAULT) ); signal ad9361 : mimo_2r2t_t := MIMO_2R2T_T_DEFAULT; alias tx_clock is ad9361.clock; alias rx_clock is ad9361.clock; signal mimo_rx_enables : std_logic_vector(RFFE_GPO_DEFAULT.mimo_rx_en'range) := RFFE_GPO_DEFAULT.mimo_rx_en; signal mimo_tx_enables : std_logic_vector(RFFE_GPO_DEFAULT.mimo_tx_en'range) := RFFE_GPO_DEFAULT.mimo_tx_en; signal dac_controls : sample_controls_t(ad9361.ch'range) := (others => SAMPLE_CONTROL_DISABLE); signal dac_streams : sample_streams_t(dac_controls'range) := (others => ZERO_SAMPLE); signal adc_controls : sample_controls_t(ad9361.ch'range) := (others => SAMPLE_CONTROL_DISABLE); signal adc_streams : sample_streams_t(adc_controls'range) := (others => ZERO_SAMPLE); signal adc_streams_last_v : std_logic_vector(adc_controls'range) := (others => '0'); signal ps_sync : std_logic_vector(0 downto 0) := (others => '0'); signal tx_packet_control : packet_control_t ; signal rx_packet_control : packet_control_t := PACKET_CONTROL_DEFAULT ; signal rx_packet_ready : std_logic; signal tx_packet_ready : std_logic; signal tx_packet_empty : std_logic; signal wbm_wb_clk_i : std_logic; signal wbm_wb_rst_i : std_logic; signal wbm_wb_adr_o : std_logic_vector(31 downto 0); signal wbm_wb_dat_o : std_logic_vector(31 downto 0); signal wbm_wb_dat_i : std_logic_vector(31 downto 0); signal wbm_wb_we_o : std_logic; signal wbm_wb_sel_o : std_logic; signal wbm_wb_stb_o : std_logic; signal wbm_wb_ack_i : std_logic; signal wbm_wb_cyc_o : std_logic; begin U_rx_pkt_gen : entity work.rx_packet_generator port map( rx_clock => rx_clock, rx_reset => rx_reset, rx_packet_ready => rx_packet_ready, rx_enable => rx_enable, rx_packet_enable => packet_en_rx, rx_packet_control => rx_packet_control ) ; -- ======================================================================== -- PLLs -- ======================================================================== -- Create 80 MHz system clock from 38.4 MHz U_system_pll : component system_pll port map ( refclk => c5_clock2, rst => sys_pll_reset, outclk_0 => sys_clock, locked => sys_pll_locked ); U_pll_reset_pll : entity work.pll_reset generic map ( SYS_CLOCK_FREQ_HZ => 38_400_000, DEVICE_FAMILY => "Cyclone V" ) port map ( sys_clock => c5_clock2, pll_locked => sys_pll_locked, pll_reset => sys_pll_reset ); -- Use PLL to adjust the phase of the FX3 PCLK to -- retime the FX3 GPIF interface for timing closure. U_fx3_pll : component fx3_pll port map ( refclk => fx3_pclk, rst => fx3_pclk_pll_reset, outclk_0 => fx3_pclk_pll, locked => fx3_pclk_pll_locked ); U_pll_reset_fx3_pll : entity work.pll_reset generic map ( SYS_CLOCK_FREQ_HZ => 100_000_000, DEVICE_FAMILY => "Cyclone V" ) port map ( sys_clock => fx3_pclk, pll_locked => fx3_pclk_pll_locked, pll_reset => fx3_pclk_pll_reset ); -- ======================================================================== -- POWER SUPPLY SYNCHRONIZATION -- ======================================================================== U_ps_sync : entity work.ps_sync generic map ( OUTPUTS => 1, USE_LFSR => true, HOP_LIST => adp2384_sync_divisors( REFCLK_HZ => 38.4e6, n_divisors => 7 ), HOP_RATE => 100 ) port map ( refclk => c5_clock2, sync => ps_sync ); ps_sync_1p1 <= ps_sync(0); ps_sync_1p8 <= ps_sync(0); -- ======================================================================== -- FX3 GPIF -- ======================================================================== -- FX3 GPIF U_fx3_gpif : entity work.fx3_gpif port map ( pclk => fx3_pclk_pll, reset => sys_reset_pclk, usb_speed => usb_speed_pclk, meta_enable => meta_en_pclk, packet_enable => packet_en_pclk, rx_enable => rx_enable_pclk, tx_enable => tx_enable_pclk, gpif_in => fx3_gpif_in, gpif_out => fx3_gpif_out, gpif_oe => fx3_gpif_oe, ctl_in => fx3_ctl_in, ctl_out => fx3_ctl_out, ctl_oe => fx3_ctl_oe, tx_fifo_write => tx_sample_fifo.wreq, tx_fifo_full => tx_sample_fifo.wfull, tx_fifo_empty => tx_sample_fifo.wempty, tx_fifo_usedw => tx_sample_fifo.wused, tx_fifo_data => tx_sample_fifo.wdata, tx_timestamp => fx3_timestamp, tx_meta_fifo_write => tx_meta_fifo.wreq, tx_meta_fifo_full => tx_meta_fifo.wfull, tx_meta_fifo_empty => tx_meta_fifo.wempty, tx_meta_fifo_usedw => tx_meta_fifo.wused, tx_meta_fifo_data => tx_meta_fifo.wdata, rx_fifo_read => rx_sample_fifo.rreq, rx_fifo_full => rx_sample_fifo.rfull, rx_fifo_empty => rx_sample_fifo.rempty, rx_fifo_usedw => rx_sample_fifo.rused, rx_fifo_data => rx_sample_fifo.rdata, rx_meta_fifo_read => rx_meta_fifo.rreq, rx_meta_fifo_full => rx_meta_fifo.rfull, rx_meta_fifo_empty => rx_meta_fifo.rempty, rx_meta_fifo_usedr => rx_meta_fifo.rused, rx_meta_fifo_data => rx_meta_fifo.rdata ); -- FX3 GPIF bidirectional signal control register_gpif : process(sys_reset_pclk, fx3_pclk_pll) begin if( sys_reset_pclk = '1' ) then fx3_gpif <= (others =>'Z'); fx3_gpif_in <= (others =>'0'); elsif( rising_edge(fx3_pclk_pll) ) then fx3_gpif_in <= fx3_gpif; if( fx3_gpif_oe = '1' ) then fx3_gpif <= fx3_gpif_out; else fx3_gpif <= (others =>'Z'); end if; end if; end process; -- FX3 CTL bidirectional signal control generate_ctl : for i in fx3_ctl'range generate fx3_ctl(i) <= fx3_ctl_out(i) when fx3_ctl_oe(i) = '1' else 'Z'; end generate; fx3_ctl_in <= fx3_ctl; toggle_led1 : process(fx3_pclk_pll) variable count : natural range 0 to 10_000_000 := 10_000_000; begin if( rising_edge(fx3_pclk_pll) ) then count := count - 1; if( count = 0 ) then count := 10_000_000; led1_blink <= not led1_blink; end if; end if; end process; -- ======================================================================== -- NIOS SYSTEM -- ======================================================================== U_nios_system : component nios_system port map ( clk_clk => sys_clock, reset_reset_n => '1', dac_MISO => nios_sdo, dac_MOSI => nios_sdio, dac_SCLK => nios_sclk, dac_SS_n => nios_ss_n, spi_MISO => adi_spi_sdo, spi_MOSI => adi_spi_sdi, spi_SCLK => adi_spi_sclk, spi_SS_n => adi_spi_csn, gpio_in_port => pack(nios_gpio.i, '0'), gpio_out_port => nios_gpo_slv, gpio_rffe_0_in_port => pack(rffe_gpio), gpio_rffe_0_out_port => rffe_gpio.o, ad9361_dac_sync_in_sync => '0', ad9361_dac_sync_out_sync => adi_sync_in, ad9361_data_clock_clk => ad9361.clock, -- out std_logic; ad9361_data_reset_reset => ad9361.reset, -- out std_logic; ad9361_device_if_rx_clk_in_p => adi_rx_clock, ad9361_device_if_rx_clk_in_n => '0', ad9361_device_if_rx_frame_in_p => adi_rx_frame, ad9361_device_if_rx_frame_in_n => '0', ad9361_device_if_rx_data_in_p => adi_rx_data, ad9361_device_if_rx_data_in_n => (others => '0'), ad9361_device_if_tx_clk_out_p => adi_tx_clock, ad9361_device_if_tx_clk_out_n => open, ad9361_device_if_tx_frame_out_p => adi_tx_frame, ad9361_device_if_tx_frame_out_n => open, ad9361_device_if_tx_data_out_p => adi_tx_data, ad9361_device_if_tx_data_out_n => open, ad9361_adc_i0_enable => ad9361.ch(0).adc.i.enable, -- out sl ad9361_adc_i0_valid => ad9361.ch(0).adc.i.valid, -- out sl ad9361_adc_i0_data => ad9361.ch(0).adc.i.data, -- out slv(15:0) ad9361_adc_i1_enable => ad9361.ch(1).adc.i.enable, -- out sl ad9361_adc_i1_valid => ad9361.ch(1).adc.i.valid, -- out sl ad9361_adc_i1_data => ad9361.ch(1).adc.i.data, -- out slv(15:0) ad9361_adc_overflow_ovf => ad9361.adc_overflow, -- in sl ad9361_adc_q0_enable => ad9361.ch(0).adc.q.enable, -- out sl ad9361_adc_q0_valid => ad9361.ch(0).adc.q.valid, -- out sl ad9361_adc_q0_data => ad9361.ch(0).adc.q.data, -- out slv(15:0) ad9361_adc_q1_enable => ad9361.ch(1).adc.q.enable, -- out sl ad9361_adc_q1_valid => ad9361.ch(1).adc.q.valid, -- out sl ad9361_adc_q1_data => ad9361.ch(1).adc.q.data, -- out slv(15:0) ad9361_adc_underflow_unf => ad9361.adc_underflow, -- in sl ad9361_dac_i0_enable => ad9361.ch(0).dac.i.enable, -- out sl ad9361_dac_i0_valid => ad9361.ch(0).dac.i.valid, -- out sl ad9361_dac_i0_data => ad9361.ch(0).dac.i.data, -- in slv(15:0) ad9361_dac_i1_enable => ad9361.ch(1).dac.i.enable, -- out sl ad9361_dac_i1_valid => ad9361.ch(1).dac.i.valid, -- out sl ad9361_dac_i1_data => ad9361.ch(1).dac.i.data, -- in slv(15:0) ad9361_dac_overflow_ovf => ad9361.dac_overflow, -- in sl ad9361_dac_q0_enable => ad9361.ch(0).dac.q.enable, -- out sl ad9361_dac_q0_valid => ad9361.ch(0).dac.q.valid, -- out sl ad9361_dac_q0_data => ad9361.ch(0).dac.q.data, -- in slv(15:0) ad9361_dac_q1_enable => ad9361.ch(1).dac.q.enable, -- out sl ad9361_dac_q1_valid => ad9361.ch(1).dac.q.valid, -- out sl ad9361_dac_q1_data => ad9361.ch(1).dac.q.data, -- in slv(15:0) ad9361_dac_underflow_unf => ad9361.dac_underflow, -- in sl xb_gpio_in_port => nios_xb_gpio_in, xb_gpio_out_port => nios_xb_gpio_out, xb_gpio_dir_export => nios_xb_gpio_oe, command_serial_in => command_serial_in, command_serial_out => command_serial_out, oc_i2c_arst_i => '0', oc_i2c_scl_pad_i => i2c_scl_in, oc_i2c_scl_pad_o => i2c_scl_out, oc_i2c_scl_padoen_o => i2c_scl_oen, oc_i2c_sda_pad_i => i2c_sda_in, oc_i2c_sda_pad_o => i2c_sda_out, oc_i2c_sda_padoen_o => i2c_sda_oen, rx_tamer_ts_sync_in => '0', rx_tamer_ts_sync_out => open, rx_tamer_ts_pps => '0', rx_tamer_ts_clock => rx_clock, rx_tamer_ts_reset => rx_ts_reset, unsigned(rx_tamer_ts_time) => rx_timestamp, tx_tamer_ts_sync_in => '0', tx_tamer_ts_sync_out => open, tx_tamer_ts_pps => '0', tx_tamer_ts_clock => tx_clock, tx_tamer_ts_reset => tx_ts_reset, unsigned(tx_tamer_ts_time) => tx_timestamp, rx_trigger_ctl_out_port => rx_trigger_ctl_i, tx_trigger_ctl_out_port => tx_trigger_ctl_i, rx_trigger_ctl_in_port => pack(rx_trigger_ctl), tx_trigger_ctl_in_port => pack(tx_trigger_ctl), wbm_wb_clk_i => wbm_wb_clk_i, wbm_wb_rst_i => wbm_wb_rst_i, wbm_wb_adr_o => wbm_wb_adr_o, wbm_wb_dat_o => wbm_wb_dat_o, wbm_wb_dat_i => wbm_wb_dat_i, wbm_wb_we_o => wbm_wb_we_o, wbm_wb_sel_o => wbm_wb_sel_o, wbm_wb_stb_o => wbm_wb_stb_o, wbm_wb_ack_i => wbm_wb_ack_i, wbm_wb_cyc_o => wbm_wb_cyc_o ); -- FX3 UART command_serial_in <= fx3_uart_txd when sys_reset = '0' else '1'; fx3_uart_rxd <= command_serial_out when sys_reset = '0' else 'Z'; -- FX3 UART CTS and Flash SPI CSx are tied to the same signal. -- Allow SPI accesses when FPGA is in reset fx3_uart_cts <= '1' when sys_reset_pclk = '0' else 'Z'; -- Unpack the Nios general-purpose outputs into a record nios_gpio.o <= unpack(nios_gpo_slv); -- Readback of Nios general-purpose outputs nios_gpio.i.gpo_readback <= nios_gpio.o; -- RFFE GPIO outputs adi_ctrl_in <= unpack(rffe_gpio.o).ctrl_in; adi_tx_spdt2_v <= unpack(rffe_gpio.o).tx_spdt2; adi_tx_spdt1_v <= unpack(rffe_gpio.o).tx_spdt1; tx_bias_en <= unpack(rffe_gpio.o).tx_bias_en; adi_rx_spdt2_v <= unpack(rffe_gpio.o).rx_spdt2; adi_rx_spdt1_v <= unpack(rffe_gpio.o).rx_spdt1; rx_bias_en <= unpack(rffe_gpio.o).rx_bias_en; --adi_sync_in <= unpack(rffe_gpio.o).sync_in; adi_en_agc <= unpack(rffe_gpio.o).en_agc; adi_txnrx <= unpack(rffe_gpio.o).txnrx; adi_enable <= unpack(rffe_gpio.o).enable; adi_reset_n <= unpack(rffe_gpio.o).reset_n; -- Unpack trigger GPIO bits into records rx_trigger_ctl <= unpack(rx_trigger_ctl_i, rx_trigger_line); tx_trigger_ctl <= unpack(tx_trigger_ctl_i, tx_trigger_line); -- LEDs led(1) <= led1_blink when nios_gpio.o.led_mode = '0' else not nios_gpio.o.leds(1); led(2) <= tx_underflow_led when nios_gpio.o.led_mode = '0' else not nios_gpio.o.leds(2); led(3) <= rx_overflow_led when nios_gpio.o.led_mode = '0' else not nios_gpio.o.leds(3); -- DAC SPI (data latched on falling edge) dac_sclk <= not nios_sclk when nios_gpio.o.adf_chip_enable = '0' else '0'; dac_sdi <= nios_sdio when nios_gpio.o.adf_chip_enable = '0' else '0'; dac_csn <= nios_ss_n(0) when nios_gpio.o.adf_chip_enable = '0' else '1'; -- ADF SPI (data latched on rising edge) adf_sclk <= nios_sclk when nios_gpio.o.adf_chip_enable = '1' else '0'; adf_sdi <= nios_sdio when nios_gpio.o.adf_chip_enable = '1' else '0'; adf_csn <= nios_ss_n(1) when nios_gpio.o.adf_chip_enable = '1' else '1'; adf_ce <= nios_gpio.o.adf_chip_enable; nios_sdo <= adf_muxout when ((nios_ss_n(1) = '0') and (nios_gpio.o.adf_chip_enable = '1')) else '0'; -- Power monitor I2C pwr_scl <= i2c_scl_out when i2c_scl_oen = '0' else 'Z'; pwr_sda <= i2c_sda_out when i2c_sda_oen = '0' else 'Z'; i2c_scl_in <= pwr_scl; i2c_sda_in <= pwr_sda; -- TPS2115A status nios_gpio.i.pwr_status <= pwr_status; -- SI53304 controls / clock output enables si_clock_sel <= nios_gpio.o.si_clock_sel; c5_clock2_oe <= '1'; exp_clock_oe <= exp_present and exp_clock_req; ufl_clock_oe <= nios_gpio.o.ufl_clock_oe; -- Expansion I2C exp_i2c_scl <= 'Z'; exp_i2c_sda <= 'Z'; -- Expansion GPIO outputs generate_xb_gpio_out : for i in exp_gpio'range generate exp_gpio(i) <= nios_xb_gpio_out(i) when nios_xb_gpio_oe(i) = '1' else 'Z'; end generate; tx_packet_ready <= '1'; -- TX Submodule U_tx : entity work.tx generic map ( NUM_STREAMS => dac_controls'length ) port map ( tx_reset => tx_reset, tx_clock => tx_clock, tx_enable => tx_enable, meta_en => meta_en_tx, timestamp_reset => tx_ts_reset, usb_speed => usb_speed_tx, tx_underflow_led => tx_underflow_led, tx_timestamp => tx_timestamp, -- Triggering trigger_arm => tx_trigger_ctl.arm, trigger_fire => tx_trigger_ctl.fire, trigger_master => tx_trigger_ctl.master, trigger_line => tx_trigger_line, -- Eightbit mode eight_bit_mode_en => eightbit_en_tx, -- Packet FIFO packet_en => packet_en_tx, packet_empty => tx_packet_empty, packet_control => tx_packet_control, packet_ready => tx_packet_ready, -- Samples from host via FX3 sample_fifo_wclock => fx3_pclk_pll, sample_fifo_wreq => tx_sample_fifo.wreq, sample_fifo_wdata => tx_sample_fifo.wdata, sample_fifo_wempty => tx_sample_fifo.wempty, sample_fifo_wfull => tx_sample_fifo.wfull, sample_fifo_wused => tx_sample_fifo.wused, -- Metadata from host via FX3 meta_fifo_wclock => fx3_pclk_pll, meta_fifo_wreq => tx_meta_fifo.wreq, meta_fifo_wdata => tx_meta_fifo.wdata, meta_fifo_wempty => tx_meta_fifo.wempty, meta_fifo_wfull => tx_meta_fifo.wfull, meta_fifo_wused => tx_meta_fifo.wused, -- Digital Loopback Interface loopback_enabled => tx_loopback_enabled, loopback_fifo_wclock => tx_loopback_fifo.wclock, loopback_fifo_wdata => tx_loopback_fifo.wdata, loopback_fifo_wreq => tx_loopback_fifo.wreq, loopback_fifo_wfull => tx_loopback_fifo.wfull, loopback_fifo_wused => tx_loopback_fifo.wused, -- RFFE Interface dac_controls => dac_controls, dac_streams => dac_streams ); dac_assignment_proc : process( all ) begin for i in dac_controls'range loop dac_controls(i).enable <= (ad9361.ch(i).dac.i.enable or ad9361.ch(i).dac.q.enable or tx_loopback_enabled) and mimo_tx_enables(i); dac_controls(i).data_req <= (ad9361.ch(i).dac.i.valid or ad9361.ch(i).dac.q.valid or tx_loopback_enabled) and mimo_tx_enables(i); if (rising_edge(tx_clock) and dac_streams(i).data_v = '1') then ad9361.ch(i).dac.i.data <= std_logic_vector(dac_streams(i).data_i(11 downto 0)) & "0000"; ad9361.ch(i).dac.q.data <= std_logic_vector(dac_streams(i).data_q(11 downto 0)) & "0000"; end if; end loop; end process; -- RX Submodule U_rx : entity work.rx generic map ( NUM_STREAMS => adc_controls'length ) port map ( rx_reset => rx_reset, rx_clock => rx_clock, rx_enable => rx_enable, meta_en => meta_en_rx, timestamp_reset => rx_ts_reset, usb_speed => usb_speed_rx, rx_mux_sel => rx_mux_sel, rx_overflow_led => rx_overflow_led, rx_timestamp => rx_timestamp, -- Triggering trigger_arm => rx_trigger_ctl.arm, trigger_fire => rx_trigger_ctl.fire, trigger_master => rx_trigger_ctl.master, trigger_line => rx_trigger_line, -- Eightbit mode eight_bit_mode_en => eightbit_en_rx, -- Packet FIFO packet_en => packet_en_rx, packet_control => rx_packet_control, packet_ready => rx_packet_ready, -- Samples to host via FX3 sample_fifo_rclock => fx3_pclk_pll, sample_fifo_raclr => not rx_enable_pclk, sample_fifo_rreq => rx_sample_fifo.rreq, sample_fifo_rdata => rx_sample_fifo.rdata, sample_fifo_rempty => rx_sample_fifo.rempty, sample_fifo_rfull => rx_sample_fifo.rfull, sample_fifo_rused => rx_sample_fifo.rused, -- Mini expansion signals mini_exp => mini_exp2 & mini_exp1, -- Metadata to host via FX3 meta_fifo_rclock => fx3_pclk_pll, meta_fifo_raclr => not rx_enable_pclk, meta_fifo_rreq => rx_meta_fifo.rreq, meta_fifo_rdata => rx_meta_fifo.rdata, meta_fifo_rempty => rx_meta_fifo.rempty, meta_fifo_rfull => rx_meta_fifo.rfull, meta_fifo_rused => rx_meta_fifo.rused, -- Digital Loopback Interface loopback_fifo_wenabled => tx_loopback_enabled, loopback_fifo_wreset => tx_reset, loopback_fifo_wclock => tx_loopback_fifo.wclock, loopback_fifo_wdata => tx_loopback_fifo.wdata, loopback_fifo_wreq => tx_loopback_fifo.wreq, loopback_fifo_wfull => tx_loopback_fifo.wfull, loopback_fifo_wused => tx_loopback_fifo.wused, -- RFFE Interface adc_controls => adc_controls, adc_streams => adc_streams ); adc_assignment_proc : process( all ) begin for i in adc_controls'range loop adc_controls(i).enable <= (ad9361.ch(i).adc.i.enable or ad9361.ch(i).adc.q.enable) and mimo_rx_enables(i); adc_controls(i).data_req <= '1'; adc_streams(i).data_i <= signed(ad9361.ch(i).adc.i.data); adc_streams(i).data_q <= signed(ad9361.ch(i).adc.q.data); adc_streams(i).data_v <= (ad9361.ch(i).adc.i.valid or ad9361.ch(i).adc.q.valid) and not adc_streams_last_v(i); end loop; end process; process(rx_clock) begin if( rx_reset = '1' ) then adc_streams_last_v <= ( others => '0' ) ; elsif( rising_edge( rx_clock ) ) then for i in adc_controls'range loop adc_streams_last_v(i) <= ad9361.ch(i).adc.i.valid or ad9361.ch(i).adc.q.valid; end loop; end if; end process; -- ======================================================================== -- RESET SYNCHRONIZERS -- ======================================================================== U_reset_sync_pclk : entity work.reset_synchronizer generic map ( INPUT_LEVEL => '1', OUTPUT_LEVEL => '1' ) port map ( clock => fx3_pclk_pll, async => sys_reset_async, sync => sys_reset_pclk ); U_reset_sync_sys : entity work.reset_synchronizer generic map ( INPUT_LEVEL => '1', OUTPUT_LEVEL => '1' ) port map ( clock => sys_clock, async => sys_reset_async, sync => sys_reset ); U_reset_sync_rx : entity work.reset_synchronizer generic map ( INPUT_LEVEL => '1', OUTPUT_LEVEL => '1' ) port map ( clock => rx_clock, async => sys_reset_pclk, sync => rx_reset ); U_reset_sync_tx : entity work.reset_synchronizer generic map ( INPUT_LEVEL => '1', OUTPUT_LEVEL => '1' ) port map ( clock => tx_clock, async => sys_reset_pclk, sync => tx_reset ); -- ======================================================================== -- SYNCHRONIZERS -- ======================================================================== U_sync_usb_speed_pclk : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => fx3_pclk_pll, async => nios_gpio.o.usb_speed, sync => usb_speed_pclk ); U_sync_usb_speed_rx : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => rx_clock, async => nios_gpio.o.usb_speed, sync => usb_speed_rx ); U_sync_usb_speed_tx : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => tx_clock, async => nios_gpio.o.usb_speed, sync => usb_speed_tx ); U_sync_meta_en_pclk : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => fx3_pclk_pll, async => nios_gpio.o.meta_sync, sync => meta_en_pclk ); U_sync_meta_en_rx : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => rx_clock, async => nios_gpio.o.meta_sync, sync => meta_en_rx ); U_sync_meta_en_tx : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => tx_clock, async => nios_gpio.o.meta_sync, sync => meta_en_tx ); U_sync_eightbit_en_pclk : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => fx3_pclk_pll, async => nios_gpio.o.eightbit_en, sync => eightbit_en_pclk ); U_sync_eightbit_en_rx : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => rx_clock, async => nios_gpio.o.eightbit_en, sync => eightbit_en_rx ); U_sync_eightbit_en_tx : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => tx_clock, async => nios_gpio.o.eightbit_en, sync => eightbit_en_tx ); U_sync_packet_en_pclk : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => fx3_pclk_pll, async => nios_gpio.o.packet_en, sync => packet_en_pclk ); U_sync_packet_en_rx : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => rx_clock, async => nios_gpio.o.packet_en, sync => packet_en_rx ); U_sync_packet_en_tx : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => tx_clock, async => nios_gpio.o.packet_en, sync => packet_en_tx ); generate_sync_rx_mux_sel : for i in rx_mux_sel'range generate U_sync_rx_mux_sel : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => rx_clock, async => nios_gpio.o.rx_mux_sel(i), sync => rx_mux_sel(i) ); end generate; generate_sync_mimo_rx_en : for i in mimo_rx_enables'range generate U_sync_mimo_rx_en : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => rx_clock, async => unpack(rffe_gpio.o).mimo_rx_en(i), sync => mimo_rx_enables(i) ); end generate; generate_sync_mimo_tx_en : for i in mimo_tx_enables'range generate U_sync_mimo_tx_en : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => tx_clock, async => unpack(rffe_gpio.o).mimo_tx_en(i), sync => mimo_tx_enables(i) ); end generate; generate_sync_adi_ctrl_out : for i in adi_ctrl_out'range generate U_sync_adi_ctrl_out : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => sys_clock, async => adi_ctrl_out(i), sync => rffe_gpio.i.ctrl_out(i) ); end generate; U_sync_adf_muxout : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => sys_clock, async => adf_muxout, sync => rffe_gpio.i.adf_muxout ); generate_sync_xb_gpio_in : for i in exp_gpio'range generate U_sync_xb_gpio_in : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => sys_clock, async => exp_gpio(i), sync => nios_xb_gpio_in(i) ); end generate; U_sync_rx_enable : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => rx_reset, clock => rx_clock, async => rx_enable_pclk, sync => rx_enable ); U_sync_tx_enable : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => tx_reset, clock => tx_clock, async => tx_enable_pclk, sync => tx_enable ); -- ======================================================================== -- HANDSHAKES -- ======================================================================== drive_handshake_timestamp : process( fx3_pclk_pll, sys_reset_pclk ) begin if( sys_reset_pclk = '1' ) then timestamp_req <= '0'; elsif( rising_edge(fx3_pclk_pll) ) then if( meta_en_pclk = '0' ) then timestamp_req <= '0'; else if( timestamp_ack = '0' ) then timestamp_req <= '1'; elsif( timestamp_ack = '1' ) then timestamp_req <= '0'; end if; end if; end if; end process; U_handshake_timestamp : entity work.handshake generic map ( DATA_WIDTH => tx_timestamp'length ) port map ( source_clock => tx_clock, source_reset => tx_reset, source_data => std_logic_vector(tx_timestamp), dest_clock => fx3_pclk_pll, dest_reset => sys_reset_pclk, unsigned(dest_data) => fx3_timestamp, dest_req => timestamp_req, dest_ack => timestamp_ack ); end architecture; bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/vhdl/bladerf-wlan.vhd000066400000000000000000001264141457144405000254000ustar00rootroot00000000000000-- Copyright (c) 2017 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.math_real.all; use ieee.math_complex.all; library work; use work.bladerf; use work.bladerf_p.all; use work.fifo_readwrite_p.all; library wlan; use wlan.all; architecture hosted_bladerf of bladerf is attribute noprune : boolean; attribute keep : boolean; alias sys_reset_async : std_logic is fx3_ctl(7); signal sys_reset_pclk : std_logic; signal sys_reset : std_logic; signal sys_clock : std_logic; signal sys_pll_locked : std_logic; signal sys_pll_reset : std_logic; signal fx3_pclk_pll : std_logic; signal fx3_pclk_pll_locked : std_logic; signal fx3_pclk_pll_reset : std_logic; signal rx_mux_sel : unsigned(2 downto 0); signal nios_xb_gpio_in : std_logic_vector(31 downto 0) := (others => '0'); signal nios_xb_gpio_out : std_logic_vector(31 downto 0) := (others => '0'); signal nios_xb_gpio_oe : std_logic_vector(31 downto 0) := (others => '0'); signal nios_gpio : nios_gpio_t; signal nios_gpo_slv : std_logic_vector(31 downto 0); signal i2c_scl_in : std_logic; signal i2c_scl_out : std_logic; signal i2c_scl_oen : std_logic; signal i2c_sda_in : std_logic; signal i2c_sda_out : std_logic; signal i2c_sda_oen : std_logic; signal tx_sample_fifo : tx_fifo_t := TX_FIFO_T_DEFAULT; signal rx_sample_fifo : rx_fifo_t := RX_FIFO_T_DEFAULT; signal tx_loopback_fifo : loopback_fifo_t := LOOPBACK_FIFO_T_DEFAULT; signal tx_meta_fifo : meta_fifo_tx_t := META_FIFO_TX_T_DEFAULT; signal rx_meta_fifo : meta_fifo_rx_t := META_FIFO_RX_T_DEFAULT; signal usb_speed_pclk : std_logic; signal usb_speed_rx : std_logic; signal usb_speed_tx : std_logic; signal tx_reset : std_logic; signal rx_reset : std_logic; signal tx_enable_pclk : std_logic; signal rx_enable_pclk : std_logic; signal tx_enable : std_logic; signal rx_enable : std_logic; signal meta_en_pclk : std_logic; signal meta_en_tx : std_logic; signal meta_en_rx : std_logic; signal packet_en_pclk : std_logic; signal packet_en_tx : std_logic; signal packet_en_rx : std_logic; signal tx_timestamp : unsigned(63 downto 0); signal rx_timestamp : unsigned(63 downto 0); signal timestamp_sync : std_logic; signal tx_loopback_enabled : std_logic := '0'; signal fx3_gpif_in : std_logic_vector(31 downto 0); signal fx3_gpif_out : std_logic_vector(31 downto 0); signal fx3_gpif_oe : std_logic; signal fx3_ctl_in : std_logic_vector(12 downto 0); signal fx3_ctl_out : std_logic_vector(12 downto 0); signal fx3_ctl_oe : std_logic_vector(12 downto 0); signal tx_underflow_led : std_logic := '1'; signal rx_overflow_led : std_logic := '1'; signal led1_blink : std_logic; signal nios_sdo : std_logic; signal nios_sdio : std_logic; signal nios_sclk : std_logic; signal nios_ss_n : std_logic_vector(1 downto 0); signal command_serial_in : std_logic; signal command_serial_out : std_logic; signal timestamp_req : std_logic; signal timestamp_ack : std_logic; signal fx3_timestamp : unsigned(63 downto 0); signal rx_ts_reset : std_logic; signal tx_ts_reset : std_logic; signal rx_trigger_ctl_i : std_logic_vector(7 downto 0); signal rx_trigger_ctl : trigger_t := TRIGGER_T_DEFAULT; alias rx_trigger_line : std_logic is mini_exp1; signal tx_trigger_ctl_i : std_logic_vector(7 downto 0); signal tx_trigger_ctl : trigger_t := TRIGGER_T_DEFAULT; alias tx_trigger_line : std_logic is mini_exp1; signal rffe_gpio : rffe_gpio_t := ( i => RFFE_GPI_DEFAULT, o => pack(RFFE_GPO_DEFAULT) ); signal ad9361 : mimo_2r2t_t := MIMO_2R2T_T_DEFAULT; alias tx_clock is ad9361.clock; alias rx_clock is ad9361.clock; signal mimo_rx_enables : std_logic_vector(RFFE_GPO_DEFAULT.mimo_rx_en'range) := RFFE_GPO_DEFAULT.mimo_rx_en; signal mimo_tx_enables : std_logic_vector(RFFE_GPO_DEFAULT.mimo_tx_en'range) := RFFE_GPO_DEFAULT.mimo_tx_en; signal dac_controls : sample_controls_t(ad9361.ch'range) := (others => SAMPLE_CONTROL_DISABLE); signal dac_streams : sample_streams_t(dac_controls'range) := (others => ZERO_SAMPLE); signal adc_controls : sample_controls_t(ad9361.ch'range) := (others => SAMPLE_CONTROL_DISABLE); signal adc_streams : sample_streams_t(adc_controls'range) := (others => ZERO_SAMPLE); signal ps_sync : std_logic_vector(0 downto 0) := (others => '0'); signal tx_packet_control : packet_control_t ; signal rx_packet_control : packet_control_t := PACKET_CONTROL_DEFAULT ; signal rx_packet_ready : std_logic; signal tx_packet_ready : std_logic; signal tx_packet_empty : std_logic; signal out_wlan_i : signed(15 downto 0); signal out_wlan_q : signed(15 downto 0); signal out_wlan_valid : std_logic; signal in_wlan_i : signed(15 downto 0); signal in_wlan_q : signed(15 downto 0); signal in_wlan_valid : std_logic; signal gain_inc_req : std_logic ; signal gain_dec_req : std_logic ; signal gain_rst_req : std_logic ; signal gain_ack : std_logic ; signal gain_nack : std_logic ; signal gain_lock : std_logic ; signal ctrl_out_0_r : std_logic ; signal gain_max : std_logic ; -- Arbiter signal signal arbiter_request : std_logic_vector(1 downto 0) := (others => '0'); signal arbiter_granted : std_logic_vector(1 downto 0) := (others => '0'); signal arbiter_ack : std_logic_vector(1 downto 0) := (others => '0'); signal ctrl_gain_inc : std_logic ; signal ctrl_gain_dec : std_logic ; signal adi_ctrl_out_mux : std_logic_vector(adi_ctrl_out'range); signal tx_ota_req : std_logic ; signal tx_ota_req_r : std_logic ; signal rfic_spi_ctrl_sdi : std_logic ; signal rfic_spi_ctrl_csn : std_logic ; signal rfic_spi_ctrl_sclk : std_logic ; signal nios_adi_spi_sdi : std_logic ; signal nios_adi_spi_csn : std_logic ; signal nios_adi_spi_sclk : std_logic ; begin U_wlan_top : entity wlan.wlan_top port map ( rx_clock => rx_clock, rx_reset => rx_reset, rx_enable => rx_enable, tx_clock => tx_clock, tx_reset => tx_reset, tx_enable => tx_enable, config_reg => x"00000000", packet_en => packet_en_rx, tx_packet_control => tx_packet_control, tx_packet_empty => tx_packet_empty, tx_packet_ready => tx_packet_ready, rx_packet_control => rx_packet_control, rx_packet_ready => rx_packet_ready, tx_fifo_usedw => (others => '0' ), tx_fifo_read => open, tx_fifo_empty => '1', tx_fifo_data => (others => '0' ), rx_fifo_usedw => (others => '0' ), rx_fifo_write => open, rx_fifo_full => '0', rx_fifo_data => open, gain_inc_req => gain_inc_req, gain_dec_req => gain_dec_req, gain_rst_req => gain_rst_req, gain_ack => '0', gain_nack => '1', gain_lock => gain_lock, gain_max => '1', tx_ota_req => tx_ota_req, tx_ota_ack => '1', out_i => out_wlan_i, out_q => out_wlan_q, out_valid => out_wlan_valid, in_i => in_wlan_i, in_q => in_wlan_q, in_valid => in_wlan_valid ) ; U_agc : entity work.bladerf_agc_adi_drv port map ( clock => rx_clock, reset => rx_reset, enable => packet_en_rx, gain_inc_req => gain_inc_req, gain_dec_req => gain_dec_req, gain_rst_req => gain_rst_req, gain_ack => gain_ack, gain_nack => gain_nack, gain_max => gain_max, ctrl_gain_inc => ctrl_gain_inc, ctrl_gain_dec => ctrl_gain_dec ); -- ======================================================================== -- PLLs -- ======================================================================== -- Create 80 MHz system clock from 38.4 MHz U_system_pll : component system_pll port map ( refclk => c5_clock2, rst => sys_pll_reset, outclk_0 => sys_clock, locked => sys_pll_locked ); U_pll_reset_pll : entity work.pll_reset generic map ( SYS_CLOCK_FREQ_HZ => 38_400_000, DEVICE_FAMILY => "Cyclone V" ) port map ( sys_clock => c5_clock2, pll_locked => sys_pll_locked, pll_reset => sys_pll_reset ); -- Use PLL to adjust the phase of the FX3 PCLK to -- retime the FX3 GPIF interface for timing closure. U_fx3_pll : component fx3_pll port map ( refclk => fx3_pclk, rst => fx3_pclk_pll_reset, outclk_0 => fx3_pclk_pll, locked => fx3_pclk_pll_locked ); U_pll_reset_fx3_pll : entity work.pll_reset generic map ( SYS_CLOCK_FREQ_HZ => 100_000_000, DEVICE_FAMILY => "Cyclone V" ) port map ( sys_clock => fx3_pclk, pll_locked => fx3_pclk_pll_locked, pll_reset => fx3_pclk_pll_reset ); -- ======================================================================== -- POWER SUPPLY SYNCHRONIZATION -- ======================================================================== U_ps_sync : entity work.ps_sync generic map ( OUTPUTS => 1, USE_LFSR => true, HOP_LIST => adp2384_sync_divisors( REFCLK_HZ => 38.4e6, n_divisors => 7 ), HOP_RATE => 100 ) port map ( refclk => c5_clock2, sync => ps_sync ); ps_sync_1p1 <= ps_sync(0); ps_sync_1p8 <= ps_sync(0); -- ======================================================================== -- FX3 GPIF -- ======================================================================== -- FX3 GPIF U_fx3_gpif : entity work.fx3_gpif port map ( pclk => fx3_pclk_pll, reset => sys_reset_pclk, usb_speed => usb_speed_pclk, meta_enable => meta_en_pclk, packet_enable => packet_en_pclk, rx_enable => rx_enable_pclk, tx_enable => tx_enable_pclk, gpif_in => fx3_gpif_in, gpif_out => fx3_gpif_out, gpif_oe => fx3_gpif_oe, ctl_in => fx3_ctl_in, ctl_out => fx3_ctl_out, ctl_oe => fx3_ctl_oe, tx_fifo_write => tx_sample_fifo.wreq, tx_fifo_full => tx_sample_fifo.wfull, tx_fifo_empty => tx_sample_fifo.wempty, tx_fifo_usedw => tx_sample_fifo.wused, tx_fifo_data => tx_sample_fifo.wdata, tx_timestamp => fx3_timestamp, tx_meta_fifo_write => tx_meta_fifo.wreq, tx_meta_fifo_full => tx_meta_fifo.wfull, tx_meta_fifo_empty => tx_meta_fifo.wempty, tx_meta_fifo_usedw => tx_meta_fifo.wused, tx_meta_fifo_data => tx_meta_fifo.wdata, rx_fifo_read => rx_sample_fifo.rreq, rx_fifo_full => rx_sample_fifo.rfull, rx_fifo_empty => rx_sample_fifo.rempty, rx_fifo_usedw => rx_sample_fifo.rused, rx_fifo_data => rx_sample_fifo.rdata, rx_meta_fifo_read => rx_meta_fifo.rreq, rx_meta_fifo_full => rx_meta_fifo.rfull, rx_meta_fifo_empty => rx_meta_fifo.rempty, rx_meta_fifo_usedr => rx_meta_fifo.rused, rx_meta_fifo_data => rx_meta_fifo.rdata ); -- FX3 GPIF bidirectional signal control register_gpif : process(sys_reset_pclk, fx3_pclk_pll) begin if( sys_reset_pclk = '1' ) then fx3_gpif <= (others =>'Z'); fx3_gpif_in <= (others =>'0'); elsif( rising_edge(fx3_pclk_pll) ) then fx3_gpif_in <= fx3_gpif; if( fx3_gpif_oe = '1' ) then fx3_gpif <= fx3_gpif_out; else fx3_gpif <= (others =>'Z'); end if; end if; end process; -- FX3 CTL bidirectional signal control generate_ctl : for i in fx3_ctl'range generate fx3_ctl(i) <= fx3_ctl_out(i) when fx3_ctl_oe(i) = '1' else 'Z'; end generate; fx3_ctl_in <= fx3_ctl; toggle_led1 : process(fx3_pclk_pll) variable count : natural range 0 to 10_000_000 := 10_000_000; begin if( rising_edge(fx3_pclk_pll) ) then count := count - 1; if( count = 0 ) then count := 10_000_000; led1_blink <= not led1_blink; end if; end if; end process; U_rfic_spi: entity work.bladerf_rfic_spi_ctrl port map( sclk => rfic_spi_ctrl_sclk, miso => adi_spi_sdo, mosi => rfic_spi_ctrl_sdi, cs_n => rfic_spi_ctrl_csn, arbiter_req => arbiter_request(1), arbiter_grant => arbiter_granted(1), arbiter_done => arbiter_ack(1), clock => sys_clock, reset => sys_reset, tx_ota_req => tx_ota_req_r ); U_rfic_mux: process(all) begin if( arbiter_granted(1) = '1' ) then adi_spi_sdi <= rfic_spi_ctrl_sdi; adi_spi_csn <= rfic_spi_ctrl_csn; adi_spi_sclk <= rfic_spi_ctrl_sclk; else adi_spi_sdi <= nios_adi_spi_sdi; adi_spi_csn <= nios_adi_spi_csn; adi_spi_sclk <= nios_adi_spi_sclk; end if; end process; -- ======================================================================== -- NIOS SYSTEM -- ======================================================================== U_nios_system : component nios_system port map ( clk_clk => sys_clock, reset_reset_n => '1', dac_MISO => nios_sdo, dac_MOSI => nios_sdio, dac_SCLK => nios_sclk, dac_SS_n => nios_ss_n, spi_MISO => adi_spi_sdo, spi_MOSI => nios_adi_spi_sdi, spi_SCLK => nios_adi_spi_sclk, spi_SS_n => nios_adi_spi_csn, gpio_in_port => pack(nios_gpio.i, '1'), gpio_out_port => nios_gpo_slv, gpio_rffe_0_in_port => pack(rffe_gpio), gpio_rffe_0_out_port => rffe_gpio.o, ad9361_dac_sync_in_sync => '0', ad9361_dac_sync_out_sync => adi_sync_in, ad9361_data_clock_clk => ad9361.clock, -- out std_logic; ad9361_data_reset_reset => ad9361.reset, -- out std_logic; ad9361_device_if_rx_clk_in_p => adi_rx_clock, ad9361_device_if_rx_clk_in_n => '0', ad9361_device_if_rx_frame_in_p => adi_rx_frame, ad9361_device_if_rx_frame_in_n => '0', ad9361_device_if_rx_data_in_p => adi_rx_data, ad9361_device_if_rx_data_in_n => (others => '0'), ad9361_device_if_tx_clk_out_p => adi_tx_clock, ad9361_device_if_tx_clk_out_n => open, ad9361_device_if_tx_frame_out_p => adi_tx_frame, ad9361_device_if_tx_frame_out_n => open, ad9361_device_if_tx_data_out_p => adi_tx_data, ad9361_device_if_tx_data_out_n => open, ad9361_adc_i0_enable => ad9361.ch(0).adc.i.enable, -- out sl ad9361_adc_i0_valid => ad9361.ch(0).adc.i.valid, -- out sl ad9361_adc_i0_data => ad9361.ch(0).adc.i.data, -- out slv(15:0) ad9361_adc_i1_enable => ad9361.ch(1).adc.i.enable, -- out sl ad9361_adc_i1_valid => ad9361.ch(1).adc.i.valid, -- out sl ad9361_adc_i1_data => ad9361.ch(1).adc.i.data, -- out slv(15:0) ad9361_adc_overflow_ovf => ad9361.adc_overflow, -- in sl ad9361_adc_q0_enable => ad9361.ch(0).adc.q.enable, -- out sl ad9361_adc_q0_valid => ad9361.ch(0).adc.q.valid, -- out sl ad9361_adc_q0_data => ad9361.ch(0).adc.q.data, -- out slv(15:0) ad9361_adc_q1_enable => ad9361.ch(1).adc.q.enable, -- out sl ad9361_adc_q1_valid => ad9361.ch(1).adc.q.valid, -- out sl ad9361_adc_q1_data => ad9361.ch(1).adc.q.data, -- out slv(15:0) ad9361_adc_underflow_unf => ad9361.adc_underflow, -- in sl ad9361_dac_i0_enable => ad9361.ch(0).dac.i.enable, -- out sl ad9361_dac_i0_valid => ad9361.ch(0).dac.i.valid, -- out sl ad9361_dac_i0_data => ad9361.ch(0).dac.i.data, -- in slv(15:0) ad9361_dac_i1_enable => ad9361.ch(1).dac.i.enable, -- out sl ad9361_dac_i1_valid => ad9361.ch(1).dac.i.valid, -- out sl ad9361_dac_i1_data => ad9361.ch(1).dac.i.data, -- in slv(15:0) ad9361_dac_overflow_ovf => ad9361.dac_overflow, -- in sl ad9361_dac_q0_enable => ad9361.ch(0).dac.q.enable, -- out sl ad9361_dac_q0_valid => ad9361.ch(0).dac.q.valid, -- out sl ad9361_dac_q0_data => ad9361.ch(0).dac.q.data, -- in slv(15:0) ad9361_dac_q1_enable => ad9361.ch(1).dac.q.enable, -- out sl ad9361_dac_q1_valid => ad9361.ch(1).dac.q.valid, -- out sl ad9361_dac_q1_data => ad9361.ch(1).dac.q.data, -- in slv(15:0) ad9361_dac_underflow_unf => ad9361.dac_underflow, -- in sl xb_gpio_in_port => nios_xb_gpio_in, xb_gpio_out_port => nios_xb_gpio_out, xb_gpio_dir_export => nios_xb_gpio_oe, command_serial_in => command_serial_in, command_serial_out => command_serial_out, oc_i2c_arst_i => '0', oc_i2c_scl_pad_i => i2c_scl_in, oc_i2c_scl_pad_o => i2c_scl_out, oc_i2c_scl_padoen_o => i2c_scl_oen, oc_i2c_sda_pad_i => i2c_sda_in, oc_i2c_sda_pad_o => i2c_sda_out, oc_i2c_sda_padoen_o => i2c_sda_oen, rx_tamer_ts_sync_in => '0', rx_tamer_ts_sync_out => open, rx_tamer_ts_pps => '0', rx_tamer_ts_clock => rx_clock, rx_tamer_ts_reset => rx_ts_reset, unsigned(rx_tamer_ts_time) => rx_timestamp, tx_tamer_ts_sync_in => '0', tx_tamer_ts_sync_out => open, tx_tamer_ts_pps => '0', tx_tamer_ts_clock => tx_clock, tx_tamer_ts_reset => tx_ts_reset, unsigned(tx_tamer_ts_time) => tx_timestamp, rx_trigger_ctl_out_port => rx_trigger_ctl_i, tx_trigger_ctl_out_port => tx_trigger_ctl_i, rx_trigger_ctl_in_port => pack(rx_trigger_ctl), tx_trigger_ctl_in_port => pack(tx_trigger_ctl), arbiter_request => arbiter_request, arbiter_granted => arbiter_granted, arbiter_ack => arbiter_ack ); -- FX3 UART command_serial_in <= fx3_uart_txd when sys_reset = '0' else '1'; fx3_uart_rxd <= command_serial_out when sys_reset = '0' else 'Z'; -- FX3 UART CTS and Flash SPI CSx are tied to the same signal. -- Allow SPI accesses when FPGA is in reset fx3_uart_cts <= '1' when sys_reset_pclk = '0' else 'Z'; -- Unpack the Nios general-purpose outputs into a record nios_gpio.o <= unpack(nios_gpo_slv); -- Readback of Nios general-purpose outputs nios_gpio.i.gpo_readback <= nios_gpio.o; -- RFFE GPIO outputs adi_ctrl_in <= unpack(rffe_gpio.o).ctrl_in; adi_tx_spdt2_v <= unpack(rffe_gpio.o).tx_spdt2; adi_tx_spdt1_v <= unpack(rffe_gpio.o).tx_spdt1; tx_bias_en <= unpack(rffe_gpio.o).tx_bias_en; adi_rx_spdt2_v <= unpack(rffe_gpio.o).rx_spdt2; adi_rx_spdt1_v <= unpack(rffe_gpio.o).rx_spdt1; rx_bias_en <= unpack(rffe_gpio.o).rx_bias_en; --adi_sync_in <= unpack(rffe_gpio.o).sync_in; adi_en_agc <= unpack(rffe_gpio.o).en_agc; adi_txnrx <= unpack(rffe_gpio.o).txnrx; -- when nios_gpio.o.packet_en = '0' else tx_ota_req; adi_enable <= unpack(rffe_gpio.o).enable; adi_reset_n <= unpack(rffe_gpio.o).reset_n; -- Unpack trigger GPIO bits into records rx_trigger_ctl <= unpack(rx_trigger_ctl_i, rx_trigger_line); tx_trigger_ctl <= unpack(tx_trigger_ctl_i, tx_trigger_line); -- LEDs led(1) <= led1_blink when nios_gpio.o.led_mode = '0' else not nios_gpio.o.leds(1); led(2) <= tx_underflow_led when nios_gpio.o.led_mode = '0' else not nios_gpio.o.leds(2); led(3) <= rx_overflow_led when nios_gpio.o.led_mode = '0' else not nios_gpio.o.leds(3); -- DAC SPI (data latched on falling edge) dac_sclk <= not nios_sclk when nios_gpio.o.adf_chip_enable = '0' else '0'; dac_sdi <= nios_sdio when nios_gpio.o.adf_chip_enable = '0' else '0'; dac_csn <= nios_ss_n(0) when nios_gpio.o.adf_chip_enable = '0' else '1'; -- ADF SPI (data latched on rising edge) adf_sclk <= nios_sclk when nios_gpio.o.adf_chip_enable = '1' else '0'; adf_sdi <= nios_sdio when nios_gpio.o.adf_chip_enable = '1' else '0'; adf_csn <= nios_ss_n(1) when nios_gpio.o.adf_chip_enable = '1' else '1'; adf_ce <= nios_gpio.o.adf_chip_enable; nios_sdo <= adf_muxout when ((nios_ss_n(1) = '0') and (nios_gpio.o.adf_chip_enable = '1')) else '0'; -- Power monitor I2C pwr_scl <= i2c_scl_out when i2c_scl_oen = '0' else 'Z'; pwr_sda <= i2c_sda_out when i2c_sda_oen = '0' else 'Z'; i2c_scl_in <= pwr_scl; i2c_sda_in <= pwr_sda; -- TPS2115A status nios_gpio.i.pwr_status <= pwr_status; -- SI53304 controls / clock output enables si_clock_sel <= nios_gpio.o.si_clock_sel; c5_clock2_oe <= '1'; exp_clock_oe <= exp_present and exp_clock_req; ufl_clock_oe <= nios_gpio.o.ufl_clock_oe; -- Expansion I2C exp_i2c_scl <= 'Z'; exp_i2c_sda <= 'Z'; -- Expansion GPIO outputs generate_xb_gpio_out : for i in exp_gpio'range generate exp_gpio(i) <= nios_xb_gpio_out(i) when nios_xb_gpio_oe(i) = '1' else 'Z'; end generate; -- TX Submodule U_tx : entity work.tx generic map ( NUM_STREAMS => dac_controls'length ) port map ( tx_reset => tx_reset, tx_clock => tx_clock, tx_enable => tx_enable, meta_en => meta_en_tx, timestamp_reset => tx_ts_reset, usb_speed => usb_speed_tx, tx_underflow_led => tx_underflow_led, tx_timestamp => tx_timestamp, -- Triggering trigger_arm => tx_trigger_ctl.arm, trigger_fire => tx_trigger_ctl.fire, trigger_master => tx_trigger_ctl.master, trigger_line => tx_trigger_line, -- Packet FIFO packet_en => packet_en_tx, packet_empty => tx_packet_empty, packet_control => tx_packet_control, packet_ready => tx_packet_ready, -- Samples from host via FX3 sample_fifo_wclock => fx3_pclk_pll, sample_fifo_wreq => tx_sample_fifo.wreq, sample_fifo_wdata => tx_sample_fifo.wdata, sample_fifo_wempty => tx_sample_fifo.wempty, sample_fifo_wfull => tx_sample_fifo.wfull, sample_fifo_wused => tx_sample_fifo.wused, -- Metadata from host via FX3 meta_fifo_wclock => fx3_pclk_pll, meta_fifo_wreq => tx_meta_fifo.wreq, meta_fifo_wdata => tx_meta_fifo.wdata, meta_fifo_wempty => tx_meta_fifo.wempty, meta_fifo_wfull => tx_meta_fifo.wfull, meta_fifo_wused => tx_meta_fifo.wused, -- Digital Loopback Interface loopback_enabled => tx_loopback_enabled, loopback_fifo_wclock => tx_loopback_fifo.wclock, loopback_fifo_wdata => tx_loopback_fifo.wdata, loopback_fifo_wreq => tx_loopback_fifo.wreq, loopback_fifo_wfull => tx_loopback_fifo.wfull, loopback_fifo_wused => tx_loopback_fifo.wused, -- RFFE Interface dac_controls => dac_controls, dac_streams => dac_streams ); dac_assignment_proc : process( all ) begin for i in dac_controls'range loop dac_controls(i).enable <= (ad9361.ch(i).dac.i.enable or ad9361.ch(i).dac.q.enable or tx_loopback_enabled) and mimo_tx_enables(i); dac_controls(i).data_req <= (ad9361.ch(i).dac.i.valid or ad9361.ch(i).dac.q.valid or tx_loopback_enabled) and mimo_tx_enables(i); if( rising_edge(tx_clock) ) then if( packet_en_tx = '1' and out_wlan_valid = '1' ) then ad9361.ch(i).dac.i.data <= std_logic_vector(out_wlan_i(11 downto 0)) & "0000"; ad9361.ch(i).dac.q.data <= std_logic_vector(out_wlan_q(11 downto 0)) & "0000"; elsif( packet_en_tx = '0' and dac_streams(i).data_v = '1') then ad9361.ch(i).dac.i.data <= std_logic_vector(dac_streams(i).data_i(11 downto 0)) & "0000"; ad9361.ch(i).dac.q.data <= std_logic_vector(dac_streams(i).data_q(11 downto 0)) & "0000"; end if; end if; end loop; end process; -- RX Submodule U_rx : entity work.rx generic map ( NUM_STREAMS => adc_controls'length ) port map ( rx_reset => rx_reset, rx_clock => rx_clock, rx_enable => rx_enable, meta_en => meta_en_rx, timestamp_reset => rx_ts_reset, usb_speed => usb_speed_rx, rx_mux_sel => rx_mux_sel, rx_overflow_led => rx_overflow_led, rx_timestamp => rx_timestamp, -- Triggering trigger_arm => rx_trigger_ctl.arm, trigger_fire => rx_trigger_ctl.fire, trigger_master => rx_trigger_ctl.master, trigger_line => rx_trigger_line, -- Packet FIFO packet_en => packet_en_rx, packet_control => rx_packet_control, packet_ready => rx_packet_ready, -- Samples to host via FX3 sample_fifo_rclock => fx3_pclk_pll, sample_fifo_raclr => not rx_enable_pclk, sample_fifo_rreq => rx_sample_fifo.rreq, sample_fifo_rdata => rx_sample_fifo.rdata, sample_fifo_rempty => rx_sample_fifo.rempty, sample_fifo_rfull => rx_sample_fifo.rfull, sample_fifo_rused => rx_sample_fifo.rused, -- Mini expansion signals mini_exp => mini_exp2 & mini_exp1, -- Metadata to host via FX3 meta_fifo_rclock => fx3_pclk_pll, meta_fifo_raclr => not rx_enable_pclk, meta_fifo_rreq => rx_meta_fifo.rreq, meta_fifo_rdata => rx_meta_fifo.rdata, meta_fifo_rempty => rx_meta_fifo.rempty, meta_fifo_rfull => rx_meta_fifo.rfull, meta_fifo_rused => rx_meta_fifo.rused, -- Digital Loopback Interface loopback_fifo_wenabled => tx_loopback_enabled, loopback_fifo_wreset => tx_reset, loopback_fifo_wclock => tx_loopback_fifo.wclock, loopback_fifo_wdata => tx_loopback_fifo.wdata, loopback_fifo_wreq => tx_loopback_fifo.wreq, loopback_fifo_wfull => tx_loopback_fifo.wfull, loopback_fifo_wused => tx_loopback_fifo.wused, -- RFFE Interface adc_controls => adc_controls, adc_streams => adc_streams ); adc_assignment_proc : process( all ) begin for i in adc_controls'range loop adc_controls(i).enable <= (ad9361.ch(i).adc.i.enable or ad9361.ch(i).adc.q.enable) and mimo_rx_enables(i); adc_controls(i).data_req <= '1'; adc_streams(i).data_i <= signed(ad9361.ch(i).adc.i.data); adc_streams(i).data_q <= signed(ad9361.ch(i).adc.q.data); adc_streams(i).data_v <= ad9361.ch(i).adc.i.valid or ad9361.ch(i).adc.q.valid; end loop; end process; in_wlan_i <= adc_streams(0).data_i(in_wlan_i'range); in_wlan_q <= adc_streams(0).data_q(in_wlan_i'range); in_wlan_valid <= adc_streams(0).data_v; -- ======================================================================== -- RESET SYNCHRONIZERS -- ======================================================================== U_reset_sync_pclk : entity work.reset_synchronizer generic map ( INPUT_LEVEL => '1', OUTPUT_LEVEL => '1' ) port map ( clock => fx3_pclk_pll, async => sys_reset_async, sync => sys_reset_pclk ); U_reset_sync_sys : entity work.reset_synchronizer generic map ( INPUT_LEVEL => '1', OUTPUT_LEVEL => '1' ) port map ( clock => sys_clock, async => sys_reset_async, sync => sys_reset ); U_reset_sync_rx : entity work.reset_synchronizer generic map ( INPUT_LEVEL => '1', OUTPUT_LEVEL => '1' ) port map ( clock => rx_clock, async => sys_reset_pclk, sync => rx_reset ); U_reset_sync_tx : entity work.reset_synchronizer generic map ( INPUT_LEVEL => '1', OUTPUT_LEVEL => '1' ) port map ( clock => tx_clock, async => sys_reset_pclk, sync => tx_reset ); -- ======================================================================== -- SYNCHRONIZERS -- ======================================================================== U_sync_usb_speed_pclk : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => fx3_pclk_pll, async => nios_gpio.o.usb_speed, sync => usb_speed_pclk ); U_sync_usb_speed_rx : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => rx_clock, async => nios_gpio.o.usb_speed, sync => usb_speed_rx ); U_sync_usb_speed_tx : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => tx_clock, async => nios_gpio.o.usb_speed, sync => usb_speed_tx ); U_sync_meta_en_pclk : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => fx3_pclk_pll, async => nios_gpio.o.meta_sync, sync => meta_en_pclk ); U_sync_meta_en_rx : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => rx_clock, async => nios_gpio.o.meta_sync, sync => meta_en_rx ); U_sync_meta_en_tx : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => tx_clock, async => nios_gpio.o.meta_sync, sync => meta_en_tx ); U_sync_packet_en_pclk : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => fx3_pclk_pll, async => nios_gpio.o.packet_en, sync => packet_en_pclk ); U_sync_packet_en_rx : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => rx_clock, async => nios_gpio.o.packet_en, sync => packet_en_rx ); U_sync_packet_en_tx : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => tx_clock, async => nios_gpio.o.packet_en, sync => packet_en_tx ); U_tx_ota_sys : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => sys_clock, async => tx_ota_req, sync => tx_ota_req_r ); generate_sync_rx_mux_sel : for i in rx_mux_sel'range generate U_sync_rx_mux_sel : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => rx_clock, async => nios_gpio.o.rx_mux_sel(i), sync => rx_mux_sel(i) ); end generate; generate_sync_mimo_rx_en : for i in mimo_rx_enables'range generate U_sync_mimo_rx_en : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => rx_clock, async => unpack(rffe_gpio.o).mimo_rx_en(i), sync => mimo_rx_enables(i) ); end generate; generate_sync_mimo_tx_en : for i in mimo_tx_enables'range generate U_sync_mimo_tx_en : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => tx_clock, async => unpack(rffe_gpio.o).mimo_tx_en(i), sync => mimo_tx_enables(i) ); end generate; mux_adi_ctrl_out: process(all) begin for i in adi_ctrl_out'range loop if( packet_en_rx = '0' ) then adi_ctrl_out_mux(i) <= adi_ctrl_out(i); else if( i = 0 or i = 2 ) then adi_ctrl_out_mux(i) <= ctrl_gain_dec; elsif( i = 1 or i = 3 ) then adi_ctrl_out_mux(i) <= ctrl_gain_inc; else adi_ctrl_out_mux(i) <= adi_ctrl_out(i); end if; end if; end loop; end process; U_ctrl_out_sync : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => rx_clock, async => adi_ctrl_out(0), sync => ctrl_out_0_r ); U_agc_lock : entity work.edge_detector generic map ( EDGE_RISE => '1', EDGE_FALL => '0' ) port map ( clock => rx_clock, reset => '0', sync_in => ctrl_out_0_r, pulse_out => gain_lock ) ; generate_sync_adi_ctrl_out : for i in adi_ctrl_out'range generate U_sync_adi_ctrl_out : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => sys_clock, async => adi_ctrl_out_mux(i), sync => rffe_gpio.i.ctrl_out(i) ); end generate; U_sync_adf_muxout : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => sys_clock, async => adf_muxout, sync => rffe_gpio.i.adf_muxout ); generate_sync_xb_gpio_in : for i in exp_gpio'range generate U_sync_xb_gpio_in : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => sys_clock, async => exp_gpio(i), sync => nios_xb_gpio_in(i) ); end generate; U_sync_rx_enable : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => rx_reset, clock => rx_clock, async => rx_enable_pclk, sync => rx_enable ); U_sync_tx_enable : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => tx_reset, clock => tx_clock, async => tx_enable_pclk, sync => tx_enable ); -- ======================================================================== -- HANDSHAKES -- ======================================================================== drive_handshake_timestamp : process( fx3_pclk_pll, sys_reset_pclk ) begin if( sys_reset_pclk = '1' ) then timestamp_req <= '0'; elsif( rising_edge(fx3_pclk_pll) ) then if( meta_en_pclk = '0' ) then timestamp_req <= '0'; else if( timestamp_ack = '0' ) then timestamp_req <= '1'; elsif( timestamp_ack = '1' ) then timestamp_req <= '0'; end if; end if; end if; end process; U_handshake_timestamp : entity work.handshake generic map ( DATA_WIDTH => tx_timestamp'length ) port map ( source_clock => tx_clock, source_reset => tx_reset, source_data => std_logic_vector(tx_timestamp), dest_clock => fx3_pclk_pll, dest_reset => sys_reset_pclk, unsigned(dest_data) => fx3_timestamp, dest_req => timestamp_req, dest_ack => timestamp_ack ); end architecture; bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/vhdl/bladerf.vhd000066400000000000000000000122311457144405000244300ustar00rootroot00000000000000-- Copyright (c) 2013 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; use ieee.math_real.all ; use ieee.math_complex.all ; entity bladerf is port ( -- Main 38.4MHz system clock (3.3 V) c5_clock2 : in std_logic ; -- SI53304 clock controls (3.3 V) si_clock_sel : out std_logic := '0'; c5_clock2_oe : out std_logic := '0'; ufl_clock_oe : out std_logic := '0'; exp_clock_oe : out std_logic := '0'; -- VCTCXO DAC (3.3 V) dac_sclk : out std_logic := '0' ; dac_sdi : out std_logic := '0' ; dac_csn : out std_logic := '1' ; -- LEDs (3.3 V) led : buffer std_logic_vector(3 downto 1) := (others =>'0') ; -- Power supply sync (2.5 V) ps_sync_1p1 : out std_logic := '0'; ps_sync_1p8 : out std_logic := '0'; -- INA219 power monitor (3.3 V) pwr_sda : inout std_logic := 'Z'; pwr_scl : out std_logic := 'Z'; -- TPS2115A power mux status pwr_status : in std_logic; -- AD9361 RX Interface (2.5 V, LVDS) adi_rx_clock : in std_logic ; adi_rx_data : in std_logic_vector(5 downto 0) ; adi_rx_frame : in std_logic ; -- RX RF Switching (3.3 V) adi_rx_spdt1_v : out std_logic_vector(2 downto 1) ; adi_rx_spdt2_v : out std_logic_vector(2 downto 1) ; -- RX Bias-T Enable rx_bias_en : out std_logic := '0'; -- AD9361 TX Interface (2.5 V, LVDS) adi_tx_clock : out std_logic ; adi_tx_data : out std_logic_vector(5 downto 0) ; adi_tx_frame : out std_logic ; -- TX RF Switching (3.3 V) adi_tx_spdt1_v : out std_logic_vector(2 downto 1) ; adi_tx_spdt2_v : out std_logic_vector(2 downto 1) ; -- TX Bias-T Enable tx_bias_en : out std_logic := '0'; -- AD9361 SPI Interface (2.5 V) adi_spi_sclk : buffer std_logic := '0' ; adi_spi_csn : out std_logic := '1' ; adi_spi_sdi : out std_logic := '0' ; adi_spi_sdo : in std_logic := '0' ; -- AD9361 Control Interface (2.5 V) adi_reset_n : buffer std_logic ; adi_enable : out std_logic; adi_txnrx : out std_logic := '0'; adi_en_agc : out std_logic := '0'; adi_ctrl_in : out std_logic_vector(3 downto 0) := (others => '0'); adi_ctrl_out : in std_logic_vector(7 downto 0); adi_sync_in : out std_logic := '0'; -- ADF4002 SPI Interface (3.3 V) adf_sclk : out std_logic := '0' ; adf_csn : out std_logic := '1' ; adf_sdi : out std_logic := '0' ; adf_ce : out std_logic := '0'; adf_muxout : in std_logic; -- FX3 GPIF Interface - VIO1/2/3 (1.8 V) fx3_pclk : in std_logic ; fx3_gpif : inout std_logic_vector(31 downto 0) ; fx3_ctl : inout std_logic_vector(12 downto 0) ; -- FX3 UART/Flash Interface - VIO4 (3.3 V) fx3_uart_rxd : out std_logic ; fx3_uart_txd : in std_logic ; fx3_uart_cts : out std_logic ; -- Expansion Interface (3.3 V / 2.5 V / 1.8 V) exp_present : in std_logic; exp_clock_req : in std_logic; exp_i2c_sda : inout std_logic; exp_i2c_scl : inout std_logic; exp_gpio : inout std_logic_vector(31 downto 0); -- Mini expansion interface (3.3 V / 2.5 V / 1.8 V) mini_exp1 : inout std_logic := 'Z'; mini_exp2 : inout std_logic := 'Z'; -- Hardware revision resistors (3.3 V / 2.5 V / 1.8 V) hw_rev : in std_logic_vector(1 downto 0) ) ; end entity ; -- bladerf --TODO: explain revisions bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/vhdl/bladerf_debug_p.vhd000066400000000000000000000024421457144405000261200ustar00rootroot00000000000000-- Copyright (c) 2013 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; use ieee.math_real.all ; use ieee.math_complex.all ; package bladerf_debug_p is -- Debug signals end package ; bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/vhdl/bladerf_p.vhd000066400000000000000000001042551457144405000247570ustar00rootroot00000000000000-- Copyright (c) 2017 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.math_real.all; library work; use work.common_dcfifo_p.all; package bladerf_p is -- ======================================================================== -- Component declarations for Verilog files -- ======================================================================== component system_pll is port ( refclk : in std_logic; rst : in std_logic; outclk_0 : out std_logic; locked : out std_logic ); end component; component fx3_pll is port ( refclk : in std_logic; rst : in std_logic; outclk_0 : out std_logic; locked : out std_logic ); end component; component nios_system is port ( clk_clk : in std_logic := 'X'; reset_reset_n : in std_logic := 'X'; dac_MISO : in std_logic := 'X'; dac_MOSI : out std_logic; dac_SCLK : out std_logic; dac_SS_n : out std_logic_vector(1 downto 0); spi_MISO : in std_logic := 'X'; spi_MOSI : out std_logic; spi_SCLK : out std_logic; spi_SS_n : out std_logic; gpio_in_port : in std_logic_vector(31 downto 0); gpio_out_port : out std_logic_vector(31 downto 0); gpio_rffe_0_in_port : in std_logic_vector(31 downto 0); gpio_rffe_0_out_port : out std_logic_vector(31 downto 0); ad9361_dac_sync_in_sync : in std_logic; ad9361_dac_sync_out_sync : out std_logic; ad9361_data_clock_clk : out std_logic; ad9361_data_reset_reset : out std_logic; ad9361_device_if_rx_clk_in_p : in std_logic; ad9361_device_if_rx_clk_in_n : in std_logic; ad9361_device_if_rx_frame_in_p : in std_logic; ad9361_device_if_rx_frame_in_n : in std_logic; ad9361_device_if_rx_data_in_p : in std_logic_vector(5 downto 0); ad9361_device_if_rx_data_in_n : in std_logic_vector(5 downto 0); ad9361_device_if_tx_clk_out_p : out std_logic; ad9361_device_if_tx_clk_out_n : out std_logic; ad9361_device_if_tx_frame_out_p : out std_logic; ad9361_device_if_tx_frame_out_n : out std_logic; ad9361_device_if_tx_data_out_p : out std_logic_vector(5 downto 0); ad9361_device_if_tx_data_out_n : out std_logic_vector(5 downto 0); ad9361_adc_i0_enable : out std_logic; ad9361_adc_i0_valid : out std_logic; ad9361_adc_i0_data : out std_logic_vector(15 downto 0); ad9361_adc_i1_enable : out std_logic; ad9361_adc_i1_valid : out std_logic; ad9361_adc_i1_data : out std_logic_vector(15 downto 0); ad9361_adc_overflow_ovf : in std_logic; ad9361_adc_q0_enable : out std_logic; ad9361_adc_q0_valid : out std_logic; ad9361_adc_q0_data : out std_logic_vector(15 downto 0); ad9361_adc_q1_enable : out std_logic; ad9361_adc_q1_valid : out std_logic; ad9361_adc_q1_data : out std_logic_vector(15 downto 0); ad9361_adc_underflow_unf : in std_logic; ad9361_dac_i0_enable : out std_logic; ad9361_dac_i0_valid : out std_logic; ad9361_dac_i0_data : in std_logic_vector(15 downto 0); ad9361_dac_i1_enable : out std_logic; ad9361_dac_i1_valid : out std_logic; ad9361_dac_i1_data : in std_logic_vector(15 downto 0); ad9361_dac_overflow_ovf : in std_logic; ad9361_dac_q0_enable : out std_logic; ad9361_dac_q0_valid : out std_logic; ad9361_dac_q0_data : in std_logic_vector(15 downto 0); ad9361_dac_q1_enable : out std_logic; ad9361_dac_q1_valid : out std_logic; ad9361_dac_q1_data : in std_logic_vector(15 downto 0); ad9361_dac_underflow_unf : in std_logic; oc_i2c_arst_i : in std_logic; oc_i2c_scl_pad_i : in std_logic; oc_i2c_scl_pad_o : out std_logic; oc_i2c_scl_padoen_o : out std_logic; oc_i2c_sda_pad_i : in std_logic; oc_i2c_sda_pad_o : out std_logic; oc_i2c_sda_padoen_o : out std_logic; xb_gpio_in_port : in std_logic_vector(31 downto 0) := (others => 'X'); xb_gpio_out_port : out std_logic_vector(31 downto 0); xb_gpio_dir_export : out std_logic_vector(31 downto 0); command_serial_in : in std_logic; command_serial_out : out std_logic; rx_tamer_ts_sync_in : in std_logic; rx_tamer_ts_sync_out : out std_logic; rx_tamer_ts_pps : in std_logic; rx_tamer_ts_clock : in std_logic; rx_tamer_ts_reset : in std_logic; rx_tamer_ts_time : out std_logic_vector(63 downto 0); tx_tamer_ts_sync_in : in std_logic; tx_tamer_ts_sync_out : out std_logic; tx_tamer_ts_pps : in std_logic; tx_tamer_ts_clock : in std_logic; tx_tamer_ts_reset : in std_logic; tx_tamer_ts_time : out std_logic_vector(63 downto 0); tx_trigger_ctl_in_port : in std_logic_vector(7 downto 0); tx_trigger_ctl_out_port : out std_logic_vector(7 downto 0); rx_trigger_ctl_in_port : in std_logic_vector(7 downto 0); rx_trigger_ctl_out_port : out std_logic_vector(7 downto 0); arbiter_request : in std_logic_vector(1 downto 0) := (others => 'X'); arbiter_granted : out std_logic_vector(1 downto 0); arbiter_ack : in std_logic_vector(1 downto 0) := (others => 'X'); wbm_wb_clk_i : in std_logic := 'X'; wbm_wb_rst_i : in std_logic := 'X'; wbm_wb_adr_o : out std_logic_vector(31 downto 0); wbm_wb_dat_o : out std_logic_vector(31 downto 0); wbm_wb_dat_i : in std_logic_vector(31 downto 0) := (others => 'X'); wbm_wb_we_o : out std_logic; wbm_wb_sel_o : out std_logic; wbm_wb_stb_o : out std_logic; wbm_wb_ack_i : in std_logic := 'X'; wbm_wb_cyc_o : out std_logic ); end component; -- ======================================================================== -- TYPEDEFS -- ======================================================================== constant TX_FIFO_WWIDTH : natural := 32; -- write side data width constant TX_FIFO_RWIDTH : natural := 64; -- read side data width constant TX_FIFO_LENGTH : natural := 16384; -- samples constant RX_FIFO_WWIDTH : natural := 64; -- write side data width constant RX_FIFO_RWIDTH : natural := 32; -- read side data width constant RX_FIFO_LENGTH : natural := 4096; -- samples constant ADSB_FIFO_WWIDTH : natural := 128; -- write side data width constant ADSB_FIFO_RWIDTH : natural := 32; -- read side data width constant ADSB_FIFO_LENGTH : natural := 1024; -- samples constant LOOPBACK_FIFO_WWIDTH : natural := 64; -- write side data width constant LOOPBACK_FIFO_RWIDTH : natural := 64; -- read side data width constant LOOPBACK_FIFO_LENGTH : natural := 512; -- samples constant META_FIFO_TX_WWIDTH : natural := 32; -- write side data width constant META_FIFO_TX_RWIDTH : natural := 128; -- read side data width constant META_FIFO_TX_LENGTH : natural := 512; -- 32-bit words constant META_FIFO_RX_WWIDTH : natural := 128; -- write side data width constant META_FIFO_RX_RWIDTH : natural := 32; -- read side data width constant META_FIFO_RX_LENGTH : natural := 512; -- 32-bit words type tx_fifo_t is record aclr : std_logic; wclock : std_logic; wdata : std_logic_vector(TX_FIFO_WWIDTH-1 downto 0); wreq : std_logic; wempty : std_logic; wfull : std_logic; wused : std_logic_vector(compute_wrusedw_high(TX_FIFO_LENGTH, "OFF") downto 0); rclock : std_logic; rdata : std_logic_vector(TX_FIFO_RWIDTH-1 downto 0); rreq : std_logic; rempty : std_logic; rfull : std_logic; rused : std_logic_vector(compute_rdusedw_high(TX_FIFO_LENGTH, TX_FIFO_WWIDTH, TX_FIFO_RWIDTH, "OFF") downto 0); end record; type rx_fifo_t is record aclr : std_logic; wclock : std_logic; wdata : std_logic_vector(RX_FIFO_WWIDTH-1 downto 0); wreq : std_logic; wempty : std_logic; wfull : std_logic; wused : std_logic_vector(compute_wrusedw_high(RX_FIFO_LENGTH, "OFF") downto 0); rclock : std_logic; rdata : std_logic_vector(RX_FIFO_RWIDTH-1 downto 0); rreq : std_logic; rempty : std_logic; rfull : std_logic; rused : std_logic_vector(compute_rdusedw_high(RX_FIFO_LENGTH, RX_FIFO_WWIDTH, RX_FIFO_RWIDTH, "OFF") downto 0); end record; type adsb_fifo_t is record aclr : std_logic; wclock : std_logic; wdata : std_logic_vector(ADSB_FIFO_WWIDTH-1 downto 0); wreq : std_logic; wempty : std_logic; wfull : std_logic; wused : std_logic_vector(compute_wrusedw_high(ADSB_FIFO_LENGTH, "OFF") downto 0); rclock : std_logic; rdata : std_logic_vector(ADSB_FIFO_RWIDTH-1 downto 0); rreq : std_logic; rempty : std_logic; rfull : std_logic; rused : std_logic_vector(compute_rdusedw_high(ADSB_FIFO_LENGTH, ADSB_FIFO_WWIDTH, ADSB_FIFO_RWIDTH, "OFF") downto 0); end record; type loopback_fifo_t is record aclr : std_logic; wclock : std_logic; wdata : std_logic_vector(LOOPBACK_FIFO_WWIDTH-1 downto 0); wreq : std_logic; wempty : std_logic; wfull : std_logic; wused : std_logic_vector(compute_wrusedw_high(LOOPBACK_FIFO_LENGTH, "OFF") downto 0); rclock : std_logic; rdata : std_logic_vector(LOOPBACK_FIFO_RWIDTH-1 downto 0); rreq : std_logic; rempty : std_logic; rfull : std_logic; rused : std_logic_vector(compute_rdusedw_high(LOOPBACK_FIFO_LENGTH, LOOPBACK_FIFO_WWIDTH, LOOPBACK_FIFO_RWIDTH, "OFF") downto 0); end record; type meta_fifo_tx_t is record aclr : std_logic; wclock : std_logic; wdata : std_logic_vector(META_FIFO_TX_WWIDTH-1 downto 0); wreq : std_logic; wempty : std_logic; wfull : std_logic; wused : std_logic_vector(compute_wrusedw_high(META_FIFO_TX_LENGTH, "OFF") downto 0); rclock : std_logic; rdata : std_logic_vector(META_FIFO_TX_RWIDTH-1 downto 0); rreq : std_logic; rempty : std_logic; rfull : std_logic; rused : std_logic_vector(compute_rdusedw_high(META_FIFO_TX_LENGTH, META_FIFO_TX_WWIDTH, META_FIFO_TX_RWIDTH, "OFF") downto 0); end record; type meta_fifo_rx_t is record aclr : std_logic; wclock : std_logic; wdata : std_logic_vector(META_FIFO_RX_WWIDTH-1 downto 0); wreq : std_logic; wempty : std_logic; wfull : std_logic; wused : std_logic_vector(compute_wrusedw_high(META_FIFO_RX_LENGTH, "OFF") downto 0); rclock : std_logic; rdata : std_logic_vector(META_FIFO_RX_RWIDTH-1 downto 0); rreq : std_logic; rempty : std_logic; rfull : std_logic; rused : std_logic_vector(compute_rdusedw_high(META_FIFO_RX_LENGTH, META_FIFO_RX_WWIDTH, META_FIFO_RX_RWIDTH, "OFF") downto 0); end record; type nios_gpo_t is record xb_mode : std_logic_vector(1 downto 0); eightbit_en : std_logic; packet_en : std_logic; si_clock_sel : std_logic; ufl_clock_oe : std_logic; meta_sync : std_logic; led_mode : std_logic; leds : std_logic_vector(3 downto 1); adf_chip_enable : std_logic; rx_mux_sel : std_logic_vector(2 downto 0); usb_speed : std_logic; end record; type nios_gpi_t is record -- Actual inputs pwr_status : std_logic; -- Readback of Nios GPIO outputs gpo_readback : nios_gpo_t; end record; type nios_gpio_t is record i : nios_gpi_t; o : nios_gpo_t; end record; type sky13374_397lf_t is ( DISABLED, RF1_TO_RF2, RF1_TO_RF3, UNDEFINED ); type rffe_gpo_t is record reset_n : std_logic; enable : std_logic; txnrx : std_logic; en_agc : std_logic; sync_in : std_logic; rx_bias_en : std_logic; rx_spdt1 : std_logic_vector(2 downto 1); rx_spdt2 : std_logic_vector(2 downto 1); tx_bias_en : std_logic; tx_spdt1 : std_logic_vector(2 downto 1); tx_spdt2 : std_logic_vector(2 downto 1); mimo_rx_en : std_logic_vector(1 downto 0); mimo_tx_en : std_logic_vector(1 downto 0); ctrl_in : std_logic_vector(3 downto 0); end record; type rffe_gpi_t is record ctrl_out : std_logic_vector(7 downto 0); adf_muxout : std_logic; end record; type rffe_gpio_t is record i : rffe_gpi_t; o : std_logic_vector(31 downto 0); end record; type datastream_t is record enable : std_logic; valid : std_logic; data : std_logic_vector(15 downto 0); end record; type sample_t is record i : datastream_t; q : datastream_t; end record; type channel_t is record dac : sample_t; adc : sample_t; end record; type channels_t is array( natural range <> ) of channel_t; type mimo_2r2t_t is record clock : std_logic; reset : std_logic; adc_overflow : std_logic; adc_underflow : std_logic; dac_overflow : std_logic; dac_underflow : std_logic; ch : channels_t(0 to 1); end record; type trigger_t is record arm : std_logic; fire : std_logic; master : std_logic; trig_line : std_logic; end record; -- ======================================================================== -- PACK FUNCTIONS -- pack a human-readable record/type into bits -- ======================================================================== function pack( x : sky13374_397lf_t ) return std_logic_vector; function pack( x : rffe_gpo_t ) return std_logic_vector; function pack( x : rffe_gpio_t ) return std_logic_vector; function pack( x : trigger_t ) return std_logic_vector; function pack( x : nios_gpo_t ) return std_logic_vector; function pack( x : nios_gpi_t; core_present : std_logic) return std_logic_vector; -- ======================================================================== -- UNPACK FUNCTIONS -- unpack bits into a human-readable record/type -- ======================================================================== function unpack( x : std_logic_vector(1 downto 0) ) return sky13374_397lf_t; function unpack( x : std_logic_vector(31 downto 0) ) return rffe_gpo_t; function unpack( trig_gpo : std_logic_vector(7 downto 0); trig_line : std_logic ) return trigger_t; function unpack( x : std_logic_vector(31 downto 0) ) return nios_gpo_t; -- ======================================================================== -- Utility functions -- ======================================================================== function adp2384_sync_divisors( constant REFCLK_HZ : real := 38.4e6; n_divisors : natural ) return integer_vector; -- ======================================================================== -- TYPEDEF RESET CONSTANTS -- deferred to permit use of pack/unpack -- ======================================================================== constant RFFE_GPO_DEFAULT : rffe_gpo_t; constant RFFE_GPI_DEFAULT : rffe_gpi_t; constant TX_FIFO_T_DEFAULT : tx_fifo_t; constant RX_FIFO_T_DEFAULT : rx_fifo_t; constant ADSB_FIFO_T_DEFAULT : adsb_fifo_t; constant LOOPBACK_FIFO_T_DEFAULT : loopback_fifo_t; constant META_FIFO_TX_T_DEFAULT : meta_fifo_tx_t; constant META_FIFO_RX_T_DEFAULT : meta_fifo_rx_t; constant MIMO_2R2T_T_DEFAULT : mimo_2r2t_t; constant TRIGGER_T_DEFAULT : trigger_t; end package; package body bladerf_p is -- ======================================================================== -- PACK FUNCTIONS -- ======================================================================== function pack( x : sky13374_397lf_t ) return std_logic_vector is variable rv : unsigned(2 downto 1) := (others => '0'); begin case x is when DISABLED => rv := "00"; when RF1_TO_RF2 => rv := "01"; when RF1_TO_RF3 => rv := "10"; when others => rv := "00"; end case; return std_logic_vector(rv); end function; function pack( x : rffe_gpo_t ) return std_logic_vector is variable rv : std_logic_vector(31 downto 0) := (others => '0'); begin --rv(31 downto 24) := x.ctrl_out; -- Reserved as inputs rv(23 downto 20) := x.ctrl_in; --rv(19) := x.adf_muxout; -- Reserved as input rv(18) := x.mimo_tx_en(1); rv(17) := x.mimo_rx_en(1); rv(16) := x.mimo_tx_en(0); rv(15) := x.mimo_rx_en(0); rv(14 downto 13) := x.tx_spdt2; rv(12 downto 11) := x.tx_spdt1; rv(10) := x.tx_bias_en; rv(9 downto 8) := x.rx_spdt2; rv(7 downto 6) := x.rx_spdt1; rv(5) := x.rx_bias_en; rv(4) := x.sync_in; rv(3) := x.en_agc; rv(2) := x.txnrx; rv(1) := x.enable; rv(0) := x.reset_n; return rv; end function; function pack( x : rffe_gpio_t ) return std_logic_vector is variable rv : std_logic_vector(31 downto 0); begin -- Physical inputs rv(31 downto 24) := x.i.ctrl_out; rv(19) := x.i.adf_muxout; -- Output readback rv(23 downto 20) := x.o(23 downto 20); rv(18 downto 0) := x.o(18 downto 0); return rv; end function; function pack( x : trigger_t ) return std_logic_vector is variable rv : std_logic_vector(7 downto 0); begin rv(7 downto 4) := (others => '0'); rv(3) := x.trig_line; rv(2) := x.master; rv(1) := x.fire; rv(0) := x.arm; return rv; end function; function pack( x : nios_gpo_t ) return std_logic_vector is variable rv : std_logic_vector(31 downto 0) := (others => 'U'); begin rv(31 downto 30) := x.xb_mode; rv(20) := x.eightbit_en; rv(19) := x.packet_en; rv(18) := x.si_clock_sel; rv(17) := x.ufl_clock_oe; rv(16) := x.meta_sync; rv(15) := x.led_mode; rv(14 downto 12) := x.leds; rv(11) := x.adf_chip_enable; rv(10 downto 8) := x.rx_mux_sel; rv(7) := x.usb_speed; --rv(0) := x.pwr_status; -- Reserved as input return rv; end function; function pack( x : nios_gpi_t; core_present : std_logic ) return std_logic_vector is variable rv : std_logic_vector(31 downto 0) := (others => 'U'); begin -- Readback of outputs rv := pack(x.gpo_readback); -- Physical inputs rv(0) := x.pwr_status; rv(28) := core_present; return rv; end function; -- ======================================================================== -- UNPACK FUNCTIONS -- ======================================================================== function unpack( x : std_logic_vector(1 downto 0) ) return sky13374_397lf_t is variable rv : sky13374_397lf_t; begin case x is when "00" => rv := DISABLED; when "01" => rv := RF1_TO_RF2; when "10" => rv := RF1_TO_RF3; when others => rv := UNDEFINED; end case; return rv; end function; function unpack( x : std_logic_vector(31 downto 0) ) return rffe_gpo_t is variable rv : rffe_gpo_t := RFFE_GPO_DEFAULT; begin --rv.ctrl_out := x(31 downto 24); -- Reserved as input rv.ctrl_in := x(23 downto 20); --rv.adf_muxout := x(19); -- Reserved as input rv.mimo_tx_en := x(18) & x(16); -- channel 1 & channel 0 rv.mimo_rx_en := x(17) & x(15); -- channel 1 & channel 0 rv.tx_spdt2 := x(14 downto 13); rv.tx_spdt1 := x(12 downto 11); rv.tx_bias_en := x(10); rv.rx_spdt2 := x(9 downto 8); rv.rx_spdt1 := x(7 downto 6); rv.rx_bias_en := x(5); rv.sync_in := x(4); rv.en_agc := x(3); rv.txnrx := x(2); rv.enable := x(1); rv.reset_n := x(0); return rv; end function; function unpack( trig_gpo : std_logic_vector(7 downto 0); trig_line : std_logic ) return trigger_t is variable rv : trigger_t := TRIGGER_T_DEFAULT; begin rv.trig_line := trig_line; rv.master := trig_gpo(2); rv.fire := trig_gpo(1); rv.arm := trig_gpo(0); return rv; end function; function unpack( x : std_logic_vector(31 downto 0) ) return nios_gpo_t is variable rv : nios_gpo_t; begin rv.xb_mode := x(31 downto 30); rv.eightbit_en := x(20); rv.packet_en := x(19); rv.si_clock_sel := x(18); rv.ufl_clock_oe := x(17); rv.meta_sync := x(16); rv.led_mode := x(15); rv.leds := x(14 downto 12); rv.adf_chip_enable := x(11); rv.rx_mux_sel := x(10 downto 8); rv.usb_speed := x(7); --rv.pwr_status := x(0); -- Reserved as input return rv; end function; -- ======================================================================== -- Utility functions -- ======================================================================== -- ADP2384 SYNC divisor calculator -- The ADP2384 supports a synchronization frequency within +/-10% of the -- switching frequency set by the RT resistor. Given the frequency of the --- reference clock (the clock that will be divided down), and the number -- of divisors requested, this function will compute and return an array -- of equally-spaced divisors producing valid SYNC frequencies. -- -- Parameters: -- refclk_hz: Frequency of the reference clock to be divided down -- n_sync_freqs: Number of divisors to compute function adp2384_sync_divisors( constant REFCLK_HZ : real := 38.4e6; n_divisors : natural ) return integer_vector is -- Because Quartus 16.0 doesn't support this function from VHDL 2008 function minimum( x : real; y : real ) return real is variable rv : real; begin if( x < y ) then rv := x; else rv := y; end if; return rv; end function; -- Because Quartus 16.0 doesn't support this function from VHDL 2008 function maximum( x : real; y : real ) return real is variable rv : real; begin if( x > y ) then rv := x; else rv := y; end if; return rv; end function; -- Convert to kHz for ease of calculations constant REFCLK_KHZ : real := REFCLK_HZ / 1.0e3; -- Min/max switching frequency of ADP2384 constant FSW_KHZ_MIN : real := 200.0; constant FSW_KHZ_MAX : real := 1400.0; -- RT resistor value and tolerance constant RT_KOHM : real := 332.0; constant RT_TOL : real := 0.01; -- Given the RT resistor value and tolerance, compute the min/max -- and convert to kohm. constant RT_KOHM_MIN : real := RT_KOHM * (1.0 - RT_TOL); constant RT_KOHM_MAX : real := RT_KOHM * (1.0 + RT_TOL); -- Compute the min/max switching frequencies (kHz) dictated by RT constant RT_FSW_KHZ_MIN : real := 69120.0 / (RT_KOHM_MAX + 15.0); constant RT_FSW_KHZ_MAX : real := 69120.0 / (RT_KOHM_MIN + 15.0); -- The SYNC pin frequency can be +/- 10% of the frequency set by RT. -- Due to tolerances, use -10% of fsw_max, and +10% of fsw_min. This -- will guarantee a compatible fsync across all board variations. constant FSYNC_TOL : real := 0.10; constant FSYNC_KHZ_MIN : real := (1.0 - FSYNC_TOL) * RT_FSW_KHZ_MAX; constant FSYNC_KHZ_MAX : real := (1.0 + FSYNC_TOL) * RT_FSW_KHZ_MIN; -- Compute the max/min divisors, keeping the sync frequency within the valid -- window of the ADP2384. Divide by two due to the 50% duty cycle. constant DIVISOR_MIN : real := ceil( (REFCLK_KHZ / minimum(FSYNC_KHZ_MAX, FSW_KHZ_MAX)) / 2.0 ); constant DIVISOR_MAX : real := floor( (REFCLK_KHZ / maximum(FSYNC_KHZ_MIN, FSW_KHZ_MIN)) / 2.0 ); -- Compute the number of cycles between divisors to create an equally -- spaced array of divisors of the requested length. constant DIVISOR_INCR : real := (DIVISOR_MAX - DIVISOR_MIN) / real(n_divisors - 1); variable rv : integer_vector(0 to n_divisors-1); variable fsync_khz : real; begin assert (DIVISOR_INCR >= 1.0) report "ERROR: Too many divisors requested for range " & real'image(DIVISOR_MIN) & " to " & real'image(DIVISOR_MAX) & "." severity failure; for i in 0 to (n_divisors - 1) loop rv(i) := integer(floor(DIVISOR_MAX - (real(i) * DIVISOR_INCR))); fsync_khz := REFCLK_KHZ / real( rv(i) * 2 ); report "ADP2384 SYNC frequency " & integer'image(i) & " = " & real'image(fsync_khz) & " kHz." severity note; assert ( fsync_khz >= FSW_KHZ_MIN ) and ( fsync_khz <= FSW_KHZ_MAX ) report "ERROR: ADP2384 SYNC frequency " & real'image(fsync_khz) & " is outside of valid range (" & real'image(FSW_KHZ_MIN) & " kHz to " & real'image(FSW_KHZ_MAX) & "kHz." severity failure; end loop; return rv; end function; -- ======================================================================== -- TYPEDEF RESET CONSTANTS -- ======================================================================== constant RFFE_GPO_DEFAULT : rffe_gpo_t := ( reset_n => '0', enable => '0', txnrx => '0', en_agc => '0', sync_in => '0', rx_bias_en => '0', rx_spdt1 => pack(DISABLED), rx_spdt2 => pack(DISABLED), tx_bias_en => '0', tx_spdt1 => pack(DISABLED), tx_spdt2 => pack(DISABLED), mimo_rx_en => (others => '0'), mimo_tx_en => (others => '0'), ctrl_in => (others => '0') ); constant RFFE_GPI_DEFAULT : rffe_gpi_t := ( ctrl_out => (others => '0'), adf_muxout => '0' ); constant TX_FIFO_T_DEFAULT : tx_fifo_t := ( aclr => '1', wclock => '0', wdata => (others => '0'), wreq => '0', wempty => '1', wfull => '0', wused => (others => '0'), rclock => '0', rdata => (others => '0'), rreq => '0', rempty => '1', rfull => '0', rused => (others => '0') ); constant RX_FIFO_T_DEFAULT : rx_fifo_t := ( aclr => '1', wclock => '0', wdata => (others => '0'), wreq => '0', wempty => '1', wfull => '0', wused => (others => '0'), rclock => '0', rdata => (others => '0'), rreq => '0', rempty => '1', rfull => '0', rused => (others => '0') ); constant ADSB_FIFO_T_DEFAULT : adsb_fifo_t := ( aclr => '1', wclock => '0', wdata => (others => '0'), wreq => '0', wempty => '1', wfull => '0', wused => (others => '0'), rclock => '0', rdata => (others => '0'), rreq => '0', rempty => '1', rfull => '0', rused => (others => '0') ); constant LOOPBACK_FIFO_T_DEFAULT : loopback_fifo_t := ( aclr => '1', wclock => '0', wdata => (others => '0'), wreq => '0', wempty => '1', wfull => '0', wused => (others => '0'), rclock => '0', rdata => (others => '0'), rreq => '0', rempty => '1', rfull => '0', rused => (others => '0') ); constant META_FIFO_TX_T_DEFAULT : meta_fifo_tx_t := ( aclr => '1', wclock => '0', wdata => (others => '0'), wreq => '0', wempty => '1', wfull => '0', wused => (others => '0'), rclock => '0', rdata => (others => '0'), rreq => '0', rempty => '1', rfull => '0', rused => (others => '0') ); constant META_FIFO_RX_T_DEFAULT : meta_fifo_rx_t := ( aclr => '1', wclock => '0', wdata => (others => '0'), wreq => '0', wempty => '1', wfull => '0', wused => (others => '0'), rclock => '0', rdata => (others => '0'), rreq => '0', rempty => '1', rfull => '0', rused => (others => '0') ); constant MIMO_2R2T_T_DEFAULT : mimo_2r2t_t := ( clock => '0', reset => '1', adc_overflow => '0', adc_underflow => '0', dac_overflow => '0', dac_underflow => '0', ch => (others => ( dac => (i => (enable => '0', valid => '0', data => (others => '0')), q => (enable => '0', valid => '0', data => (others => '0'))), adc => (i => (enable => '0', valid => '0', data => (others => '0')), q => (enable => '0', valid => '0', data => (others => '0'))) )) ); constant TRIGGER_T_DEFAULT : trigger_t := ( arm => '0', fire => '0', master => '0', trig_line => '0' ); end package body; bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/vhdl/rx-adsb.vhd000066400000000000000000000374751457144405000244120ustar00rootroot00000000000000-- Copyright (c) 2017 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; library work; use work.bladerf_p.all; use work.fifo_readwrite_p.all; entity rx is generic ( NUM_STREAMS : natural := 2 ); port ( rx_reset : in std_logic; rx_clock : in std_logic; rx_enable : in std_logic; meta_en : in std_logic := '0'; timestamp_reset : out std_logic := '1'; usb_speed : in std_logic; rx_mux_sel : in unsigned; rx_overflow_led : out std_logic := '1'; rx_timestamp : in unsigned(63 downto 0); -- Triggering trigger_arm : in std_logic; trigger_fire : in std_logic; trigger_master : in std_logic; trigger_line : inout std_logic; -- this is not good, should be in/out/oe -- Packet to host via FX3 packet_en : in std_logic; packet_control : in packet_control_t; packet_ready : out std_logic; -- Samples to host via FX3 sample_fifo_rclock : in std_logic; sample_fifo_raclr : in std_logic; sample_fifo_rreq : in std_logic; sample_fifo_rdata : out std_logic_vector(ADSB_FIFO_T_DEFAULT.rdata'range); sample_fifo_rempty : out std_logic; sample_fifo_rfull : out std_logic; sample_fifo_rused : out std_logic_vector(ADSB_FIFO_T_DEFAULT.rused'range); -- Mini expansion signals mini_exp : in std_logic_vector(1 downto 0); -- Metadata to host via FX3 meta_fifo_rclock : in std_logic; meta_fifo_raclr : in std_logic; meta_fifo_rreq : in std_logic; meta_fifo_rdata : out std_logic_vector(META_FIFO_RX_T_DEFAULT.rdata'range); meta_fifo_rempty : out std_logic; meta_fifo_rfull : out std_logic; meta_fifo_rused : out std_logic_vector(META_FIFO_RX_T_DEFAULT.rused'range); -- Digital Loopback Interface loopback_fifo_wenabled : out std_logic; loopback_fifo_wreset : in std_logic; loopback_fifo_wclock : in std_logic; loopback_fifo_wdata : in std_logic_vector(LOOPBACK_FIFO_T_DEFAULT.wdata'range); loopback_fifo_wreq : in std_logic; loopback_fifo_wfull : out std_logic; loopback_fifo_wused : out std_logic_vector(LOOPBACK_FIFO_T_DEFAULT.wused'range); -- ADSB adsb_data : in std_logic_vector(127 downto 0); adsb_valid : in std_logic; -- RFFE Interface adc_controls : in sample_controls_t(0 to NUM_STREAMS-1) := (others => SAMPLE_CONTROL_DISABLE); adc_streams : in sample_streams_t(0 to NUM_STREAMS-1) := (others => ZERO_SAMPLE) ); end entity; architecture arch of rx is signal rx_packet : packet_control_t; -- Can be set from libbladeRF using bladerf_set_rx_mux() type rx_mux_mode_t is ( RX_MUX_NORMAL, RX_MUX_12BIT_COUNTER, RX_MUX_32BIT_COUNTER, RX_MUX_ENTROPY, RX_MUX_DIGITAL_LOOPBACK ); signal rx_mux_mode : rx_mux_mode_t := RX_MUX_NORMAL; signal sample_fifo : adsb_fifo_t := ADSB_FIFO_T_DEFAULT; signal loopback_fifo : loopback_fifo_t := LOOPBACK_FIFO_T_DEFAULT; signal meta_fifo : meta_fifo_rx_t := META_FIFO_RX_T_DEFAULT; signal loopback_streams : sample_streams_t(adc_streams'range) := (others => ZERO_SAMPLE); signal loopback_enabled : std_logic := '0'; signal loopback_fifo_wenabled_i : std_logic := '0'; signal rx_gen_mode : std_logic; signal rx_gen_i : signed(15 downto 0); signal rx_gen_q : signed(15 downto 0); signal rx_gen_valid : std_logic; signal mux_streams : sample_streams_t(adc_streams'range) := (others => ZERO_SAMPLE); signal trigger_signal_out : std_logic; signal trigger_signal_out_sync : std_logic; begin rx_mux_mode <= rx_mux_mode_t'val(to_integer(rx_mux_sel)); loopback_fifo_wenabled <= loopback_fifo_wenabled_i; set_timestamp_reset : process(rx_clock, rx_reset) begin if( rx_reset = '1' ) then timestamp_reset <= '1'; elsif( rising_edge(rx_clock) ) then if( meta_en = '1' ) then timestamp_reset <= '0'; else timestamp_reset <= '1'; end if; end if; end process; sample_fifo.wdata <= adsb_data; sample_fifo.wreq <= adsb_valid; -- RX sample FIFO sample_fifo.aclr <= sample_fifo_raclr; sample_fifo.wclock <= rx_clock; U_rx_sample_fifo : entity work.adsbfifo port map ( aclr => sample_fifo.aclr, wrclk => sample_fifo.wclock, wrreq => sample_fifo.wreq, data => sample_fifo.wdata, wrempty => sample_fifo.wempty, wrfull => sample_fifo.wfull, wrusedw => sample_fifo.wused, rdclk => sample_fifo_rclock, rdreq => sample_fifo_rreq, q => sample_fifo_rdata, rdempty => sample_fifo_rempty, rdfull => sample_fifo_rfull, rdusedw => sample_fifo_rused ); -- RX meta FIFO meta_fifo.aclr <= meta_fifo_raclr; meta_fifo.wclock <= rx_clock; U_rx_meta_fifo : entity work.rx_meta_fifo generic map ( LPM_NUMWORDS => 2**(meta_fifo.wused'length) ) port map ( aclr => meta_fifo.aclr, wrclk => meta_fifo.wclock, wrreq => meta_fifo.wreq, data => meta_fifo.wdata, wrempty => meta_fifo.wempty, wrfull => meta_fifo.wfull, wrusedw => meta_fifo.wused, rdclk => meta_fifo_rclock, rdreq => meta_fifo_rreq, q => meta_fifo_rdata, rdempty => meta_fifo_rempty, rdfull => meta_fifo_rfull, rdusedw => meta_fifo_rused ); -- RX loopback FIFO loopback_fifo.aclr <= '1' when ( (loopback_fifo_wreset = '1') or (loopback_fifo_wenabled_i = '0') ) else '0'; loopback_fifo.rclock <= rx_clock; U_rx_loopback_fifo : entity work.lb_fifo generic map ( LPM_NUMWORDS => 2**(loopback_fifo.rused'length) ) port map ( aclr => loopback_fifo.aclr, wrclk => loopback_fifo_wclock, wrreq => loopback_fifo_wreq, data => loopback_fifo_wdata, wrempty => open, wrfull => loopback_fifo_wfull, wrusedw => loopback_fifo_wused, rdclk => loopback_fifo.rclock, rdreq => loopback_fifo.rreq, q => loopback_fifo.rdata, rdempty => loopback_fifo.rempty, rdfull => loopback_fifo.rfull, rdusedw => loopback_fifo.rused ); -- Sample bridge U_fifo_writer : entity work.fifo_writer generic map ( NUM_STREAMS => NUM_STREAMS, FIFO_USEDW_WIDTH => sample_fifo.wused'length, FIFO_DATA_WIDTH => sample_fifo.wdata'length, META_FIFO_USEDW_WIDTH => meta_fifo.wused'length, META_FIFO_DATA_WIDTH => meta_fifo.wdata'length ) port map ( clock => rx_clock, reset => rx_reset, enable => rx_enable, usb_speed => usb_speed, meta_en => meta_en, packet_en => packet_en, timestamp => rx_timestamp, mini_exp => mini_exp, fifo_full => sample_fifo.wfull, fifo_usedw => sample_fifo.wused, fifo_data => open, fifo_write => open, packet_control => packet_control, packet_ready => packet_ready, meta_fifo_full => meta_fifo.wfull, meta_fifo_usedw => meta_fifo.wused, meta_fifo_data => meta_fifo.wdata, meta_fifo_write => meta_fifo.wreq, in_sample_controls => adc_controls, in_samples => mux_streams, overflow_led => rx_overflow_led, overflow_count => open, overflow_duration => x"ffff" ); loopback_fifo_control : process( rx_reset, loopback_fifo.rclock ) variable offset : natural range 0 to loopback_fifo.rdata'length; variable remaining : natural range 0 to loopback_fifo.rdata'length/32; variable loopdata : std_logic_vector(loopback_fifo.rdata'range); begin if( rx_reset = '1' ) then loopback_enabled <= '0'; loopback_fifo.rreq <= '0'; loopback_streams <= (others => ZERO_SAMPLE); remaining := 0; elsif( rising_edge(loopback_fifo.rclock) ) then -- Is loopback enabled? if( rx_mux_mode = RX_MUX_DIGITAL_LOOPBACK and rx_enable = '1' ) then loopback_enabled <= '1'; else loopback_enabled <= '0'; loopback_fifo.rreq <= '0'; remaining := 0; end if; -- Clear data valids for i in loopback_streams'range loop loopback_streams(i).data_v <= '0'; end loop; -- Handle loopback FIFO if( loopback_fifo.rreq = '1' ) then -- We have fresh data! loopback_fifo.rreq <= '0'; loopdata := loopback_fifo.rdata; remaining := loopback_fifo.rdata'length/32; elsif( remaining = 0 and sample_fifo.wfull = '0' and loopback_fifo.rempty = '0' ) then -- Read more from the FIFO if we can loopback_fifo.rreq <= '1'; end if; -- Do the loopback for i in loopback_streams'range loop offset := loopdata'length - (remaining*32); if( adc_controls(i).enable = '1' and remaining > 0 ) then loopback_streams(i).data_i <= resize(signed(loopdata(offset+11 downto offset+0)), loopback_streams(i).data_i'length); loopback_streams(i).data_q <= resize(signed(loopdata(offset+27 downto offset+16)), loopback_streams(i).data_q'length); loopback_streams(i).data_v <= '1'; -- Shift our loopdata index if( remaining > 0 ) then remaining := remaining - 1; end if; end if; end loop; end if; end process; U_rx_siggen : entity work.signal_generator port map ( clock => rx_clock, reset => rx_reset, enable => rx_enable, mode => rx_gen_mode, sample_i => rx_gen_i, sample_q => rx_gen_q, sample_valid => rx_gen_valid ); rx_mux : process(rx_reset, rx_clock) begin if( rx_reset = '1' ) then mux_streams <= (others => ZERO_SAMPLE); rx_gen_mode <= '0'; elsif( rising_edge(rx_clock) ) then case rx_mux_mode is when RX_MUX_NORMAL => mux_streams <= adc_streams; if( trigger_signal_out_sync = '0' ) then for i in mux_streams'range loop mux_streams(i).data_v <= '0'; end loop; end if; when RX_MUX_12BIT_COUNTER | RX_MUX_32BIT_COUNTER => for i in mux_streams'range loop mux_streams(i).data_i <= rx_gen_i; mux_streams(i).data_q <= rx_gen_q; mux_streams(i).data_v <= rx_gen_valid; end loop; if( rx_mux_mode = RX_MUX_32BIT_COUNTER ) then rx_gen_mode <= '1'; else rx_gen_mode <= '0'; end if; when RX_MUX_ENTROPY => -- Not yet implemented mux_streams <= (others => ZERO_SAMPLE); when RX_MUX_DIGITAL_LOOPBACK => mux_streams <= loopback_streams; when others => mux_streams <= (others => ZERO_SAMPLE); end case; end if; end process; -- RX Trigger rxtrig : entity work.trigger(async) generic map ( DEFAULT_OUTPUT => '0' ) port map ( armed => trigger_arm, -- in sl fired => trigger_fire, -- in sl master => trigger_master, -- in sl trigger_in => trigger_line, -- in sl trigger_out => trigger_line, -- out sl signal_in => rx_enable, -- in sl signal_out => trigger_signal_out -- out sl ); U_reset_sync_loopback : entity work.reset_synchronizer generic map ( INPUT_LEVEL => '0', OUTPUT_LEVEL => '0' ) port map ( clock => loopback_fifo_wclock, async => loopback_enabled, sync => loopback_fifo_wenabled_i ); U_sync_rxtrig_signal_out : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => rx_reset, clock => rx_clock, async => trigger_signal_out, sync => trigger_signal_out_sync ); end architecture; bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/vhdl/rx.vhd000066400000000000000000000415711457144405000234730ustar00rootroot00000000000000-- Copyright (c) 2017 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; library work; use work.bladerf_p.all; use work.fifo_readwrite_p.all; entity rx is generic ( NUM_STREAMS : natural := 2 ); port ( rx_reset : in std_logic; rx_clock : in std_logic; rx_enable : in std_logic; meta_en : in std_logic := '0'; timestamp_reset : out std_logic := '1'; usb_speed : in std_logic; rx_mux_sel : in unsigned; rx_overflow_led : out std_logic := '1'; rx_timestamp : in unsigned(63 downto 0); -- Triggering trigger_arm : in std_logic; trigger_fire : in std_logic; trigger_master : in std_logic; trigger_line : inout std_logic; -- this is not good, should be in/out/oe trigger_signal_sync_tb : out std_logic; -- 8-bit mode eight_bit_mode_en : in std_logic := '0'; -- Packet to host via FX3 packet_en : in std_logic; packet_control : in packet_control_t; packet_ready : out std_logic; -- Samples to host via FX3 sample_fifo_rclock : in std_logic; sample_fifo_raclr : in std_logic; sample_fifo_rreq : in std_logic; sample_fifo_rdata : out std_logic_vector(RX_FIFO_T_DEFAULT.rdata'range); sample_fifo_rempty : out std_logic; sample_fifo_rfull : out std_logic; sample_fifo_rused : out std_logic_vector(RX_FIFO_T_DEFAULT.rused'range); -- Mini expansion signals mini_exp : in std_logic_vector(1 downto 0); -- Metadata to host via FX3 meta_fifo_rclock : in std_logic; meta_fifo_raclr : in std_logic; meta_fifo_rreq : in std_logic; meta_fifo_rdata : out std_logic_vector(META_FIFO_RX_T_DEFAULT.rdata'range); meta_fifo_rempty : out std_logic; meta_fifo_rfull : out std_logic; meta_fifo_rused : out std_logic_vector(META_FIFO_RX_T_DEFAULT.rused'range); -- Digital Loopback Interface loopback_fifo_wenabled : out std_logic; loopback_fifo_wreset : in std_logic; loopback_fifo_wclock : in std_logic; loopback_fifo_wdata : in std_logic_vector(LOOPBACK_FIFO_T_DEFAULT.wdata'range); loopback_fifo_wreq : in std_logic; loopback_fifo_wfull : out std_logic; loopback_fifo_wused : out std_logic_vector(LOOPBACK_FIFO_T_DEFAULT.wused'range); -- RFFE Interface adc_controls : in sample_controls_t(0 to NUM_STREAMS-1) := (others => SAMPLE_CONTROL_DISABLE); adc_streams : in sample_streams_t(0 to NUM_STREAMS-1) := (others => ZERO_SAMPLE) ); end entity; architecture arch of rx is signal rx_packet : packet_control_t; -- Can be set from libbladeRF using bladerf_set_rx_mux() type rx_mux_mode_t is ( RX_MUX_NORMAL, RX_MUX_12BIT_COUNTER, RX_MUX_32BIT_COUNTER, RX_MUX_ENTROPY, RX_MUX_DIGITAL_LOOPBACK ); signal rx_mux_mode : rx_mux_mode_t := RX_MUX_NORMAL; signal sample_fifo : rx_fifo_t := RX_FIFO_T_DEFAULT; signal loopback_fifo : loopback_fifo_t := LOOPBACK_FIFO_T_DEFAULT; signal meta_fifo : meta_fifo_rx_t := META_FIFO_RX_T_DEFAULT; signal loopback_streams : sample_streams_t(adc_streams'range) := (others => ZERO_SAMPLE); signal loopback_enabled : std_logic := '0'; signal loopback_fifo_wenabled_i : std_logic := '0'; signal rx_gen_mode : std_logic; signal rx_gen_i : signed(15 downto 0); signal rx_gen_q : signed(15 downto 0); signal rx_gen_valid : std_logic; signal mux_streams : sample_streams_t(adc_streams'range) := (others => ZERO_SAMPLE); signal trigger_signal_out : std_logic; signal trigger_signal_out_sync : std_logic; begin rx_mux_mode <= rx_mux_mode_t'val(to_integer(rx_mux_sel)); loopback_fifo_wenabled <= loopback_fifo_wenabled_i; set_timestamp_reset : process(rx_clock, rx_reset) begin if( rx_reset = '1' ) then timestamp_reset <= '1'; elsif( rising_edge(rx_clock) ) then if( meta_en = '1' ) then timestamp_reset <= '0'; else timestamp_reset <= '1'; end if; end if; end process; -- RX sample FIFO sample_fifo.aclr <= sample_fifo_raclr; sample_fifo.wclock <= rx_clock; U_rx_sample_fifo : entity work.rx_fifo generic map ( LPM_NUMWORDS => 2**(sample_fifo.wused'length) ) port map ( aclr => sample_fifo.aclr, wrclk => sample_fifo.wclock, wrreq => sample_fifo.wreq, data => sample_fifo.wdata, wrempty => sample_fifo.wempty, wrfull => sample_fifo.wfull, wrusedw => sample_fifo.wused, rdclk => sample_fifo_rclock, rdreq => sample_fifo_rreq, q => sample_fifo_rdata, rdempty => sample_fifo_rempty, rdfull => sample_fifo_rfull, rdusedw => sample_fifo_rused ); -- RX meta FIFO meta_fifo.aclr <= meta_fifo_raclr; meta_fifo.wclock <= rx_clock; U_rx_meta_fifo : entity work.rx_meta_fifo generic map ( LPM_NUMWORDS => 2**(meta_fifo.wused'length) ) port map ( aclr => meta_fifo.aclr, wrclk => meta_fifo.wclock, wrreq => meta_fifo.wreq, data => meta_fifo.wdata, wrempty => meta_fifo.wempty, wrfull => meta_fifo.wfull, wrusedw => meta_fifo.wused, rdclk => meta_fifo_rclock, rdreq => meta_fifo_rreq, q => meta_fifo_rdata, rdempty => meta_fifo_rempty, rdfull => meta_fifo_rfull, rdusedw => meta_fifo_rused ); -- RX loopback FIFO loopback_fifo.aclr <= '1' when ( (loopback_fifo_wreset = '1') or (loopback_fifo_wenabled_i = '0') ) else '0'; loopback_fifo.rclock <= rx_clock; U_rx_loopback_fifo : entity work.lb_fifo generic map ( LPM_NUMWORDS => 2**(loopback_fifo.rused'length) ) port map ( aclr => loopback_fifo.aclr, wrclk => loopback_fifo_wclock, wrreq => loopback_fifo_wreq, data => loopback_fifo_wdata, wrempty => open, wrfull => loopback_fifo_wfull, wrusedw => loopback_fifo_wused, rdclk => loopback_fifo.rclock, rdreq => loopback_fifo.rreq, q => loopback_fifo.rdata, rdempty => loopback_fifo.rempty, rdfull => loopback_fifo.rfull, rdusedw => loopback_fifo.rused ); -- Sample bridge U_fifo_writer : entity work.fifo_writer generic map ( NUM_STREAMS => NUM_STREAMS, FIFO_USEDW_WIDTH => sample_fifo.wused'length, FIFO_DATA_WIDTH => sample_fifo.wdata'length, META_FIFO_USEDW_WIDTH => meta_fifo.wused'length, META_FIFO_DATA_WIDTH => meta_fifo.wdata'length ) port map ( clock => rx_clock, reset => rx_reset, enable => rx_enable, usb_speed => usb_speed, meta_en => meta_en, packet_en => packet_en, timestamp => rx_timestamp, mini_exp => mini_exp, fifo_full => sample_fifo.wfull, fifo_usedw => sample_fifo.wused, fifo_data => sample_fifo.wdata, fifo_write => sample_fifo.wreq, packet_control => packet_control, packet_ready => packet_ready, eight_bit_mode_en => eight_bit_mode_en, meta_fifo_full => meta_fifo.wfull, meta_fifo_usedw => meta_fifo.wused, meta_fifo_data => meta_fifo.wdata, meta_fifo_write => meta_fifo.wreq, in_sample_controls => adc_controls, in_samples => mux_streams, overflow_led => rx_overflow_led, overflow_count => open, overflow_duration => x"ffff" ); loopback_fifo_control : process( rx_reset, loopback_fifo.rclock ) variable offset : natural range 0 to loopback_fifo.rdata'length; variable remaining : natural range 0 to loopback_fifo.rdata'length/16; variable loopdata : std_logic_vector(loopback_fifo.rdata'range); begin if( rx_reset = '1' ) then loopback_enabled <= '0'; loopback_fifo.rreq <= '0'; loopback_streams <= (others => ZERO_SAMPLE); remaining := 0; elsif( rising_edge(loopback_fifo.rclock) ) then -- Is loopback enabled? if( rx_mux_mode = RX_MUX_DIGITAL_LOOPBACK and rx_enable = '1' ) then loopback_enabled <= '1'; else loopback_enabled <= '0'; loopback_fifo.rreq <= '0'; remaining := 0; end if; -- Clear data valids for i in loopback_streams'range loop loopback_streams(i).data_v <= '0'; end loop; -- Handle loopback FIFO if( loopback_fifo.rreq = '1' ) then -- We have fresh data! loopback_fifo.rreq <= '0'; loopdata := loopback_fifo.rdata; if( eight_bit_mode_en = '0' ) then remaining := loopback_fifo.rdata'length/32; else remaining := loopback_fifo.rdata'length/16; end if; elsif( remaining = 0 and sample_fifo.wfull = '0' and loopback_fifo.rempty = '0' ) then -- Read more from the FIFO if we can loopback_fifo.rreq <= '1'; end if; -- Do the loopback for i in loopback_streams'range loop if( eight_bit_mode_en = '0' ) then offset := loopdata'length - (remaining*32); else offset := loopdata'length - (remaining*16); end if; if( adc_controls(i).enable = '1' and remaining > 0 ) then if( eight_bit_mode_en = '0' ) then loopback_streams(i).data_i <= resize(signed(loopdata(offset+11 downto offset+0)), loopback_streams(i).data_i'length); loopback_streams(i).data_q <= resize(signed(loopdata(offset+27 downto offset+16)), loopback_streams(i).data_q'length); else loopback_streams(i).data_i <= shift_left(resize(signed(loopdata(offset+7 downto offset+0)), loopback_streams(i).data_i'length), 4); loopback_streams(i).data_q <= shift_left(resize(signed(loopdata(offset+15 downto offset+8)), loopback_streams(i).data_q'length), 4); end if; loopback_streams(i).data_v <= '1'; -- Shift our loopdata index if( remaining > 0 ) then remaining := remaining - 1; end if; end if; end loop; end if; end process; U_rx_siggen : entity work.signal_generator port map ( clock => rx_clock, reset => rx_reset, enable => rx_enable, mode => rx_gen_mode, eightbit_en => eight_bit_mode_en, sample_i => rx_gen_i, sample_q => rx_gen_q, sample_valid => rx_gen_valid ); rx_mux : process(rx_reset, rx_clock) begin if( rx_reset = '1' ) then mux_streams <= (others => ZERO_SAMPLE); rx_gen_mode <= '0'; elsif( rising_edge(rx_clock) ) then case rx_mux_mode is when RX_MUX_NORMAL => mux_streams <= adc_streams; if( trigger_signal_out_sync = '0' ) then for i in mux_streams'range loop mux_streams(i).data_v <= '0'; end loop; end if; when RX_MUX_12BIT_COUNTER | RX_MUX_32BIT_COUNTER => for i in mux_streams'range loop mux_streams(i).data_i <= rx_gen_i; mux_streams(i).data_q <= rx_gen_q; mux_streams(i).data_v <= rx_gen_valid; end loop; if( rx_mux_mode = RX_MUX_32BIT_COUNTER ) then rx_gen_mode <= '1'; else rx_gen_mode <= '0'; end if; when RX_MUX_ENTROPY => -- Not yet implemented mux_streams <= (others => ZERO_SAMPLE); when RX_MUX_DIGITAL_LOOPBACK => mux_streams <= loopback_streams; when others => mux_streams <= (others => ZERO_SAMPLE); end case; end if; end process; -- RX Trigger rxtrig : entity work.trigger(async) generic map ( DEFAULT_OUTPUT => '0' ) port map ( armed => trigger_arm, -- in sl fired => trigger_fire, -- in sl master => trigger_master, -- in sl trigger_in => trigger_line, -- in sl trigger_out => trigger_line, -- out sl signal_in => rx_enable, -- in sl signal_out => trigger_signal_out -- out sl ); U_reset_sync_loopback : entity work.reset_synchronizer generic map ( INPUT_LEVEL => '0', OUTPUT_LEVEL => '0' ) port map ( clock => loopback_fifo_wclock, async => loopback_enabled, sync => loopback_fifo_wenabled_i ); U_sync_rxtrig_signal_out : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => rx_reset, clock => rx_clock, async => trigger_signal_out, sync => trigger_signal_out_sync ); trigger_signal_sync_tb <= trigger_signal_out_sync; end architecture; bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/vhdl/tb/000077500000000000000000000000001457144405000227345ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/vhdl/tb/bladerf_tb.vhd000066400000000000000000000135731457144405000255340ustar00rootroot00000000000000-- Copyright (c) 2013-2017 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; use ieee.math_real.all ; use ieee.math_complex.all ; library nuand ; entity bladerf_tb is end entity ; -- bladerf_tb architecture arch of bladerf_tb is constant C5_CLOCK_HALF_PERIOD : time := 1 sec * (1.0/38.4e6/2.0) ; constant ADI_RX_CLOCK_HALF_PERIOD : time := 1 sec * (1.0/61.44e6/2.0); type fx3_gpif_t is record pclk : std_logic ; gpif : std_logic_vector(31 downto 0) ; ctl : std_logic_vector(12 downto 0) ; end record ; type fx3_uart_t is record rxd : std_logic ; txd : std_logic ; cts : std_logic ; end record ; procedure nop( signal clock : in std_logic ; count : in natural ) is begin for i in 1 to count loop wait until rising_edge(clock) ; end loop ; end procedure ; signal c5_clock2 : std_logic := '1'; signal adi_rx_clock : std_logic := '1'; signal fx3_gpif : fx3_gpif_t; signal fx3_uart : fx3_uart_t; begin -- Main 38.4MHz clock input c5_clock2 <= not c5_clock2 after C5_CLOCK_HALF_PERIOD ; -- AD9361 clock input adi_rx_clock <= not adi_rx_clock after ADI_RX_CLOCK_HALF_PERIOD; -- Top level of the FPGA U_bladerf : entity nuand.bladerf port map ( -- Main system clock c5_clock2 => c5_clock2, -- Si53304 clock controls si_clock_sel => open, c5_clock2_oe => open, ufl_clock_oe => open, exp_clock_oe => open, -- VCTCXO DAC dac_sclk => open, dac_sdi => open, dac_csn => open, -- LEDs led => open, -- Power supply sync ps_sync_1p1 => open, ps_sync_1p8 => open, -- Power monitor pwr_sda => open, pwr_scl => open, pwr_status => '0', -- AD9361 RX interface adi_rx_clock => adi_rx_clock, adi_rx_data => (others => '0'), adi_rx_frame => '0', -- RX RF switching adi_rx_spdt1_v => open, adi_rx_spdt2_v => open, -- RX bias-tee enable rx_bias_en => open, -- AD9361 TX interface adi_tx_clock => open, adi_tx_data => open, adi_tx_frame => open, -- TX RF switching adi_tx_spdt1_v => open, adi_tx_spdt2_v => open, -- TX bias-tee enable tx_bias_en => open, -- AD9361 SPI interface adi_spi_sclk => open, adi_spi_csn => open, adi_spi_sdi => open, adi_spi_sdo => '0', -- AD9361 control interface adi_reset_n => open, adi_enable => open, adi_txnrx => open, adi_en_agc => open, adi_ctrl_in => open, adi_ctrl_out => (others => '0'), adi_sync_in => open, -- ADF4002 SPI interface adf_sclk => open, adf_csn => open, adf_sdi => open, adf_ce => open, adf_muxout => '0', -- FX3 GPIF Interface fx3_pclk => fx3_gpif.pclk, fx3_gpif => fx3_gpif.gpif, fx3_ctl => fx3_gpif.ctl, -- FX3 UART interface fx3_uart_rxd => fx3_uart.rxd, fx3_uart_txd => fx3_uart.txd, fx3_uart_cts => fx3_uart.cts, -- Expansion Interface exp_present => '0', exp_clock_req => '0', exp_i2c_sda => open, exp_i2c_scl => open, exp_gpio => open, -- Mini expansion mini_exp1 => open, mini_exp2 => open, -- HW rev hw_rev => (others => '0') ) ; -- FX3 Model U_fx3 : entity nuand.fx3_model(dma) port map ( -- GPIF fx3_pclk => fx3_gpif.pclk, fx3_gpif => fx3_gpif.gpif, fx3_ctl => fx3_gpif.ctl, -- UART fx3_uart_rxd => fx3_uart.rxd, fx3_uart_txd => fx3_uart.txd, fx3_uart_cts => fx3_uart.cts, fx3_rx_en => '1', fx3_rx_meta_en => '1', fx3_tx_en => '1', fx3_tx_meta_en => '1' ) ; -- Stimulus tb : process begin wait for 10 ms ; report "-- End of simulation --" severity failure ; end process ; end architecture ; -- arch bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/vhdl/tb/fx3_gpif_iq_8bit_tb.vhd000066400000000000000000001064501457144405000272560ustar00rootroot00000000000000-- Copyright (c) 2022 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; library rtl_work; library altera_lnsim; use altera_lnsim.altera_pll; library nuand; use nuand.util.all ; use nuand.fifo_readwrite_p.all; use nuand.common_dcfifo_p.all; use nuand.bladerf_p.all; entity fx3_gpif_iq_8bit_tb is generic ( -- For bladeRF2 (2x2 MIMO): NUM_MIMO_STREAMS : natural := 2; FIFO_READER_READ_THROTTLE : natural := 0; ENABLE_CHANNEL_0 : std_logic := '1'; ENABLE_CHANNEL_1 : std_logic := '1'; EIGHT_BIT_MODE_EN : std_logic := '1' ); end entity; architecture arch of fx3_gpif_iq_8bit_tb is -- bladerf-hosted uses ad9361.clock (125 MHz) for rx_clock and tx_clock constant SYSCLK_HALF_PERIOD : time := 1 sec * (1.0/125.0e6/2.0); -- For reasons unknown, simulation of this system in ModelSim requires that -- wrreq and data be asserted shortly before the rising clock edge. Sigh... constant FIFO_WORKAROUND : time := 1 ps; type fx3_control_t is record usb_speed : std_logic; tx_enable : std_logic; rx_enable : std_logic; meta_enable : std_logic; packet : std_logic; end record; type fx3_gpif_t is record gpif_in : std_logic_vector(31 downto 0); gpif_out : std_logic_vector(31 downto 0); gpif_oe : std_logic; ctl_in : std_logic_vector(12 downto 0); ctl_out : std_logic_vector(12 downto 0); ctl_oe : std_logic_vector(12 downto 0); end record; signal sys_rst : std_logic := '1'; signal done : boolean := false; signal fx3_pclk : std_logic := '1'; signal fx3_pclk_pll : std_logic := '1'; signal sys_clk : std_logic := '1'; signal pll_reset : std_logic := '0'; signal pll_locked : std_logic := '0'; signal fx3_control : fx3_control_t; signal fx3_gpif : fx3_gpif_t; signal fx3_gpif_i : std_logic_vector(31 downto 0); signal fx3_ctl_i : std_logic_vector(12 downto 0); -- Control mapping alias dma0_rx_ack is fx3_ctl_i( 0); alias dma1_rx_ack is fx3_ctl_i( 1); alias dma2_tx_ack is fx3_ctl_i( 2); alias dma3_tx_ack is fx3_ctl_i( 3); alias dma_rx_enable is fx3_ctl_i( 4); alias dma_tx_enable is fx3_ctl_i( 5); alias dma_idle is fx3_ctl_i( 6); alias system_reset is fx3_ctl_i( 7); alias dma0_rx_reqx is fx3_ctl_i( 8); alias dma1_rx_reqx is fx3_ctl_i(12); -- due to 9 being connected to dclk alias dma2_tx_reqx is fx3_ctl_i(10); alias dma3_tx_reqx is fx3_ctl_i(11); signal loopback_i : signed(15 downto 0) := (others =>'0'); signal loopback_q : signed(15 downto 0) := (others =>'0'); signal loopback_valid : std_logic := '0'; signal loopback_enabled : std_logic := '0'; signal tx_clock : std_logic := '1' ; signal rx_clock : std_logic := '1' ; signal rx_sample_fifo : rx_fifo_t := RX_FIFO_T_DEFAULT; signal tx_sample_fifo : tx_fifo_t := TX_FIFO_T_DEFAULT; signal loopback_fifo : loopback_fifo_t := LOOPBACK_FIFO_T_DEFAULT; signal rx_meta_fifo : meta_fifo_rx_t := META_FIFO_RX_T_DEFAULT; signal tx_meta_fifo : meta_fifo_tx_t := META_FIFO_TX_T_DEFAULT; signal rx_mux_i : signed(15 downto 0); signal rx_mux_q : signed(15 downto 0); signal rx_mux_valid : std_logic; signal tx_timestamp : unsigned(63 downto 0) := ( others => '0' ); signal rx_timestamp : unsigned(63 downto 0) := ( others => '0' ); constant FX3_HALF_PERIOD : time := 1.0/(100.0e6)/2.0*1 sec ; constant TX_HALF_PERIOD : time := 1.0/(9.0e6)/2.0*1 sec ; constant RX_HALF_PERIOD : time := 1.0/(9.0e6)/2.0*1 sec ; signal dac_controls : sample_controls_t(0 to NUM_MIMO_STREAMS-1) := (others => SAMPLE_CONTROL_DISABLE); signal dac_streams : sample_streams_t(dac_controls'range) := (others => ZERO_SAMPLE); signal adc_controls : sample_controls_t(0 to NUM_MIMO_STREAMS-1) := (others => SAMPLE_CONTROL_DISABLE); signal adc_streams : sample_streams_t(adc_controls'range) := (others => ZERO_SAMPLE); signal tx_reset : std_logic := '0'; signal tx_ts_reset : std_logic := '0'; signal rx_reset : std_logic := '0'; signal rx_ts_reset : std_logic := '0'; signal meta_en_tx : std_logic := '0'; signal meta_en_rx : std_logic := '0'; signal rx_packet_control : packet_control_t := PACKET_CONTROL_DEFAULT; signal tx_packet_control : packet_control_t; signal trigger_signal_sync_tb : std_logic; signal adc_stream_val_at_rx_enable : signed(15 downto 0) := ( others => '0' ); function data_gen (count : natural) return std_logic_vector is variable msw, lsw : std_logic_vector(15 downto 0); begin msw := std_logic_vector(to_signed(count, 16)); lsw := std_logic_vector(to_signed(-count, 16)); return (msw & lsw); end function data_gen; signal rx_packet_ready : std_logic; begin -- ======================================================================== -- Brief summary of data flow -- ======================================================================== -- -- Simulated samples flow from fx3_model's TX side to its RX side. The -- validity of the data is checked there. -- -- entity U_fx3_model FX3 model, TX process -- signal fx3_gpif_i fx3_gpif.gpif_oe is '0' -- process register_gpif -- signal fx3_gpif.gpif_in Demuxed GPIF interface (FX3 -> FPGA) -- entity U_fx3_gpif GPIF implementation, write side -- signal tx_sample_fifo.w* TX fifo, write side -- entity U_tx_sample_fifo -- signal tx_sample_fifo.r* TX fifo, read side -- process tx_mux -- signal loopback_fifo.w* Loopback fifo, write side -- entity U_rx_loopback_fifo -- signal loopback_fifo.r* Loopback fifo, read side -- process loopback_fifo_control -- signal loopback_{i,q,valid} -- process rx_mux -- signal rx_mux_{i,q,valid} -- entity U_fifo_writer -- signal rx_sample_fifo.w* RX fifo, write side -- entity U_rx_sample_fifo -- signal rx_sample_fifo.r* RX fifo, read side -- entity U_fx3_gpif GPIF implementation, read side -- signal fx3_gpif.gpif_out Demuxed GPIF interface (FPGA -> FX3) -- process register_gpif -- signal fx3_gpif_i fx3_gpif.gpif_oe is '1' -- entity U_fx3_model FX3 model, RX process -- ======================================================================== -- Instantiations -- ======================================================================== -- Unit under test -- Clock domain: fx3_pclk_pll U_fx3_gpif : entity nuand.fx3_gpif port map ( pclk => fx3_pclk_pll, reset => sys_rst, usb_speed => fx3_control.usb_speed, gpif_in => fx3_gpif.gpif_in, gpif_out => fx3_gpif.gpif_out, gpif_oe => fx3_gpif.gpif_oe, ctl_in => fx3_gpif.ctl_in, ctl_out => fx3_gpif.ctl_out, ctl_oe => fx3_gpif.ctl_oe, tx_enable => fx3_control.tx_enable, rx_enable => fx3_control.rx_enable, meta_enable => fx3_control.meta_enable, packet_enable => fx3_control.packet, tx_fifo_write => tx_sample_fifo.wreq, tx_fifo_full => tx_sample_fifo.wfull, tx_fifo_empty => tx_sample_fifo.wempty, tx_fifo_usedw => tx_sample_fifo.wused, tx_fifo_data => tx_sample_fifo.wdata, tx_timestamp => tx_timestamp, tx_meta_fifo_write => tx_meta_fifo.wreq, tx_meta_fifo_full => tx_meta_fifo.wfull, tx_meta_fifo_empty => tx_meta_fifo.wempty, tx_meta_fifo_usedw => tx_meta_fifo.wused, tx_meta_fifo_data => tx_meta_fifo.wdata, rx_fifo_read => rx_sample_fifo.rreq, rx_fifo_full => rx_sample_fifo.rfull, rx_fifo_empty => rx_sample_fifo.rempty, rx_fifo_usedw => rx_sample_fifo.rused, rx_fifo_data => rx_sample_fifo.rdata, rx_meta_fifo_read => rx_meta_fifo.rreq, rx_meta_fifo_full => rx_meta_fifo.rfull, rx_meta_fifo_empty => rx_meta_fifo.rempty, rx_meta_fifo_usedr => rx_meta_fifo.rused, rx_meta_fifo_data => rx_meta_fifo.rdata ); -- Discrete control signals for fx3_gpif fx3_control.usb_speed <= '0'; fx3_control.meta_enable <= '0'; fx3_control.packet <= '0'; U_pkt_gen : entity nuand.rx_packet_generator port map( rx_clock => rx_clock, rx_reset => rx_reset, rx_enable => fx3_control.rx_enable, rx_packet_enable => fx3_control.packet, rx_packet_ready => rx_packet_ready, rx_packet_control => rx_packet_control ); meta_en_tx <= fx3_control.meta_enable; meta_en_rx <= fx3_control.meta_enable; increment_tx_ts : process(tx_clock) variable ping : boolean := true ; begin if( rising_edge(tx_clock) ) then ping := not ping ; if( ping = true ) then tx_timestamp <= tx_timestamp + 1 ; end if ; end if ; end process ; increment_rx_ts : process(rx_clock) variable ping : boolean := true ; begin if( rising_edge(rx_clock) ) then ping := not ping ; if( ping = true ) then rx_timestamp <= rx_timestamp + 1 ; end if ; end if ; end process ; -- Model of FX3's GPIF interface -- Clock domain: fx3_pclk (source) U_fx3_model : entity nuand.fx3_model(micro_dma) port map ( fx3_pclk => fx3_pclk, fx3_gpif => fx3_gpif_i, fx3_ctl => fx3_ctl_i, fx3_uart_rxd => '0', fx3_uart_txd => open, fx3_uart_cts => open, fx3_rx_en => '1', fx3_rx_meta_en => meta_en_rx, fx3_tx_en => '1', fx3_tx_meta_en => meta_en_tx, eight_bit_mode_en => EIGHT_BIT_MODE_EN, done => done ); -- Generate phase-shifted PLL clock U_fx3_pll : entity rtl_work.fx3_pll port map ( inclk0 => fx3_pclk, areset => pll_reset, c0 => fx3_pclk_pll, locked => pll_locked ); tx_clock <= not tx_clock after TX_HALF_PERIOD ; rx_clock <= not rx_clock after RX_HALF_PERIOD ; -- Reset handler sys_rst <= '0' after 100 ns; -- Generate system clock sys_clk <= not sys_clk after SYSCLK_HALF_PERIOD when not done else '0'; tx_reset <= sys_rst; tx_ts_reset <= sys_rst; rx_reset <= sys_rst; rx_ts_reset <= sys_rst; meta_en_tx <= fx3_control.meta_enable; meta_en_rx <= fx3_control.meta_enable; -- TX Submodule U_tx : entity work.tx generic map ( NUM_STREAMS => dac_controls'length ) port map ( tx_reset => tx_reset, tx_clock => tx_clock, tx_enable => fx3_control.tx_enable, meta_en => meta_en_tx, timestamp_reset => tx_ts_reset, usb_speed => fx3_control.usb_speed, tx_underflow_led => open, tx_timestamp => tx_timestamp, -- Triggering trigger_arm => '0', trigger_fire => '0', trigger_master => '0', trigger_line => open, -- Packet FIFO packet_en => fx3_control.packet, packet_empty => open, packet_control => tx_packet_control, packet_ready => '1', -- 8-bit mode eight_bit_mode_en => EIGHT_BIT_MODE_EN, -- Samples from host via FX3 sample_fifo_wclock => fx3_pclk_pll, sample_fifo_wreq => tx_sample_fifo.wreq, sample_fifo_wdata => tx_sample_fifo.wdata, sample_fifo_wempty => tx_sample_fifo.wempty, sample_fifo_wfull => tx_sample_fifo.wfull, sample_fifo_wused => tx_sample_fifo.wused, -- Metadata from host via FX3 meta_fifo_wclock => fx3_pclk_pll, meta_fifo_wreq => tx_meta_fifo.wreq, meta_fifo_wdata => tx_meta_fifo.wdata, meta_fifo_wempty => tx_meta_fifo.wempty, meta_fifo_wfull => tx_meta_fifo.wfull, meta_fifo_wused => tx_meta_fifo.wused, -- Digital Loopback Interface loopback_enabled => '0', loopback_fifo_wdata => loopback_fifo.wdata, loopback_fifo_wreq => loopback_fifo.wreq, loopback_fifo_wfull => loopback_fifo.wfull, loopback_fifo_wused => loopback_fifo.wused, -- RFFE Interface dac_controls => dac_controls, dac_streams => dac_streams ); -- RX Submodule U_rx : entity work.rx generic map ( NUM_STREAMS => adc_controls'length ) port map ( rx_reset => rx_reset, rx_clock => rx_clock, rx_enable => fx3_control.rx_enable, meta_en => meta_en_rx, timestamp_reset => rx_ts_reset, usb_speed => fx3_control.usb_speed, rx_mux_sel => to_unsigned(0, 3), rx_overflow_led => open, rx_timestamp => rx_timestamp, -- Triggering trigger_arm => '0', trigger_fire => '0', trigger_master => '0', trigger_line => open, trigger_signal_sync_tb => trigger_signal_sync_tb, -- Packet FIFO packet_en => fx3_control.packet, packet_control => rx_packet_control, packet_ready => rx_packet_ready, -- 8-bit mode eight_bit_mode_en => EIGHT_BIT_MODE_EN, -- Samples to host via FX3 sample_fifo_rclock => fx3_pclk_pll, sample_fifo_raclr => not fx3_control.rx_enable, sample_fifo_rreq => rx_sample_fifo.rreq, sample_fifo_rdata => rx_sample_fifo.rdata, sample_fifo_rempty => rx_sample_fifo.rempty, sample_fifo_rfull => rx_sample_fifo.rfull, sample_fifo_rused => rx_sample_fifo.rused, -- Mini expansion signals mini_exp => "00", -- Metadata to host via FX3 meta_fifo_rclock => fx3_pclk_pll, meta_fifo_raclr => not fx3_control.rx_enable, meta_fifo_rreq => rx_meta_fifo.rreq, meta_fifo_rdata => rx_meta_fifo.rdata, meta_fifo_rempty => rx_meta_fifo.rempty, meta_fifo_rfull => rx_meta_fifo.rfull, meta_fifo_rused => rx_meta_fifo.rused, -- Digital Loopback Interface loopback_fifo_wenabled => open, loopback_fifo_wreset => tx_reset, loopback_fifo_wclock => tx_clock, loopback_fifo_wdata => loopback_fifo.wdata, loopback_fifo_wreq => loopback_fifo.wreq, loopback_fifo_wfull => loopback_fifo.wfull, loopback_fifo_wused => loopback_fifo.wused, -- RFFE Interface adc_controls => adc_controls, adc_streams => adc_streams ); -- ======================================================================== -- Data converters -- ======================================================================== gen_dac_controls : if( NUM_MIMO_STREAMS > 1 ) generate -- The TX side of the AD9361 HDL is a FIFO pull interface -- that expects a readahead FIFO. It toggles the data request -- signal every other cycle. This behavior is mimicked here. process( tx_clock, sys_rst ) begin if( sys_rst = '1' ) then dac_controls <= ( 0 => (enable => ENABLE_CHANNEL_0, data_req => '1'), 1 => (enable => ENABLE_CHANNEL_1, data_req => '1') ); elsif( rising_edge(tx_clock) ) then for i in dac_controls'range loop dac_controls(i) <= ( enable => dac_controls(i).enable, data_req => not dac_controls(i).data_req ); end loop; end if; end process; else generate dac_controls <= (others => SAMPLE_CONTROL_ENABLE); end generate; gen_adc_controls : if( NUM_MIMO_STREAMS > 1 ) generate process( rx_clock, sys_rst ) constant SIGMA_DELTA_BITS : signed (3 downto 0) := "0000"; constant COUNT_RESET : integer := 0; variable count : integer range -2047 to 2047 := COUNT_RESET; begin if( sys_rst = '1' ) then count := COUNT_RESET; adc_controls <= ( 0 => (enable => ENABLE_CHANNEL_0, data_req => '1'), 1 => (enable => ENABLE_CHANNEL_1, data_req => '1') ); elsif( rising_edge(rx_clock) ) then for i in adc_controls'range loop adc_controls(i) <= ( enable => adc_controls(i).enable, data_req => not adc_controls(i).data_req ); if( adc_controls(i).enable = '1') then if( adc_streams(i).data_v = '1' ) then if( EIGHT_BIT_MODE_EN = '1' ) then adc_streams(i).data_i <= "0000" & to_signed(count, 8) & SIGMA_DELTA_BITS; adc_streams(i).data_q <= "0000" & to_signed(-count, 8) & SIGMA_DELTA_BITS; count := (count + 1) mod 128; else adc_streams(i).data_i <= to_signed(count, 16); adc_streams(i).data_q <= to_signed(-count, 16); count := (count + 1) mod 2048; end if; end if; adc_streams(i).data_v <= not adc_streams(i).data_v; end if; end loop; end if; end process; else generate adc_controls <= (others => SAMPLE_CONTROL_ENABLE); end generate; -- ======================================================================== -- Processes -- ======================================================================== -- FX3 GPIF bidirectional signal control -- Adapted from same process in bladerf-hosted.vhd register_gpif : process(sys_rst, fx3_pclk_pll) begin if( sys_rst = '1' ) then fx3_gpif_i <= (others => 'Z'); fx3_gpif.gpif_in <= (others => 'Z'); elsif( rising_edge(fx3_pclk_pll) ) then fx3_gpif.gpif_in <= fx3_gpif_i; if( fx3_gpif.gpif_oe = '1' ) then fx3_gpif_i <= fx3_gpif.gpif_out; else fx3_gpif_i <= (others =>'Z'); end if; end if; end process; -- FX3 CTL bidirectional signals -- Adapted from same generator in bladerf-hosted.vhd generate_ctl : for i in fx3_ctl_i'range generate fx3_ctl_i(i) <= fx3_gpif.ctl_out(i) when fx3_gpif.ctl_oe(i) = '1' else 'Z'; end generate; fx3_gpif.ctl_in <= fx3_ctl_i; -- Controller for loopback FIFO -- Stripped-down version of same process from rx.vhd loopback_fifo_control : process( sys_rst, loopback_fifo.rclock ) begin if( sys_rst = '1' ) then loopback_enabled <= '0'; loopback_fifo.rreq <= '0'; loopback_i <= (others => '0'); loopback_q <= (others => '0'); loopback_valid <= '0'; elsif( rising_edge(loopback_fifo.rclock) ) then loopback_enabled <= '0'; loopback_fifo.rreq <= '0'; loopback_i <= loopback_i; loopback_q <= loopback_q; loopback_valid <= '0'; -- Is loopback enabled? loopback_enabled <= fx3_control.rx_enable; -- Do the loopback loopback_i <= resize(signed(loopback_fifo.rdata(15 downto 0)), loopback_i'length); loopback_q <= resize(signed(loopback_fifo.rdata(31 downto 16)), loopback_q'length); loopback_valid <= loopback_fifo.rreq and not loopback_fifo.rempty; -- Read from the FIFO if req'd loopback_fifo.rreq <= loopback_enabled and (not loopback_fifo.rempty); end if; end process; -- RX multiplexer -- Stripped-down version of same process from rx.vhd rx_mux : process(sys_rst, sys_clk) begin if( sys_rst = '1' ) then rx_mux_i <= (others =>'0'); rx_mux_q <= (others =>'0'); rx_mux_valid <= '0'; elsif( rising_edge(sys_clk) ) then rx_mux_i <= loopback_i; rx_mux_q <= loopback_q; rx_mux_valid <= loopback_valid; end if; end process; -- TX multiplexer -- Stripped-down version of mimo_channel_sel_mux from tx.vhd --tx_mux : process( sys_clk ) --begin -- if( rising_edge(sys_clk) ) then -- tx_sample_fifo.rreq <= not tx_sample_fifo.rempty; -- loopback_fifo.wdata <= tx_sample_fifo.rdata; -- loopback_fifo.wreq <= tx_sample_fifo.rreq and not tx_sample_fifo.rempty; -- end if; --end process; -- ======================================================================== -- Verification -- ======================================================================== print_config: process begin wait until rising_edge(fx3_control.tx_enable); report lf& "[CONFIG] EIGHT_BIT_MODE_EN: " & std_logic'image(EIGHT_BIT_MODE_EN) &lf& "[CONFIG] ENABLE_CHANNEL_0: " & std_logic'image(ENABLE_CHANNEL_0) &lf& "[CONFIG] ENABLE_CHANNEL_1: " & std_logic'image(ENABLE_CHANNEL_1); end process print_config; -- -- Check for metavalues -- We should never see metavalues written to the FIFOs -- check_fifo_write : process(fx3_pclk_pll) is begin if( rising_edge(fx3_pclk_pll) ) then if( tx_sample_fifo.wreq = '1' and fx3_control.meta_enable = '0' ) then for i in tx_sample_fifo.wdata'range loop assert tx_sample_fifo.wdata(i) = '0' or tx_sample_fifo.wdata(i) = '1' severity failure; end loop; end if; end if; end process; check_fifo_read : process(fx3_pclk_pll) is begin if( rising_edge(fx3_pclk_pll) ) then if( rx_sample_fifo.rreq = '1' ) then for i in rx_sample_fifo.rdata'range loop assert rx_sample_fifo.rdata(i) = '0' or rx_sample_fifo.rdata(i) = '1' severity failure; end loop; end if; end if; end process check_fifo_read; -- -- Check for fullness on FIFOs -- assert(rx_sample_fifo.wfull = '0') report "rx_sample_fifo full (write)" severity warning; assert(tx_sample_fifo.wfull = '0') report "tx_sample_fifo full (write)" severity warning; assert(loopback_fifo.wfull = '0') report "loopback_fifo full (write)" severity warning; -- -- Tx Sample Check -- look_for_dropped_tx_samples : process(tx_clock) is constant MESSAGES_PER_ITERATION : natural := 3; --Provided in fx3_model constant SIGMA_DELTA_BITS : signed (3 downto 0) := "0000"; variable current_message_count : natural := 1; variable iq_value : signed (15 downto 0) := x"0000"; variable expected_sample_i : signed (15 downto 0); variable expected_sample_q : signed (15 downto 0); variable failure_count : natural := 0; begin for i in dac_controls'range loop if( rising_edge(tx_clock) and dac_controls(i).enable = '1' and dac_streams(i).data_v = '1' and fx3_control.tx_enable = '1' ) then if( EIGHT_BIT_MODE_EN = '1' ) then expected_sample_i := iq_value (11 downto 0) & SIGMA_DELTA_BITS; expected_sample_q := iq_value (11 downto 0) + 1 & SIGMA_DELTA_BITS; assert ( dac_streams(i).data_i = expected_sample_i ) report "dac_streams("&to_string(i)&").data_i: " & to_hstring(dac_streams(i).data_i) & " | " & "expected_sample_i: " & to_hstring(expected_sample_i) severity warning; assert ( dac_streams(i).data_q = expected_sample_q ) report "dac_streams("&to_string(i)&").data_q: " & to_hstring(dac_streams(i).data_q) & " | " & "expected_sample_q: " & to_hstring(expected_sample_q) severity warning; if ( dac_streams(i).data_i /= expected_sample_i or dac_streams(i).data_q /= expected_sample_q ) then failure_count := failure_count + 1; if ( failure_count >= 6 ) then report "tx fail count tolerance exceeded" severity failure; end if; end if; iq_value := (iq_value + 2) mod 128; else expected_sample_i := iq_value; expected_sample_q := to_signed(current_message_count, 8) & (iq_value(7 downto 0) + 1); assert(dac_streams(i).data_i = expected_sample_i) report "dac_streams("&to_string(i)&").data_i: " & to_hstring(dac_streams(i).data_i) & " | " & "expected_sample_i: " & to_hstring(expected_sample_i) severity failure; assert(dac_streams(i).data_q = expected_sample_q) report "dac_streams("&to_string(i)&").data_q: " & to_hstring(dac_streams(i).data_q) & " | " & "expected_sample_q: " & to_hstring(expected_sample_q) severity failure; -- Set iq values based on blocks received -- See tx_sample_stream's encoding scheme in fx3_model.vhd if( iq_value = x"03FE" ) then iq_value := x"0000"; if( current_message_count < MESSAGES_PER_ITERATION ) then current_message_count := current_message_count + 1; else current_message_count := 1; end if; else iq_value := (iq_value + 2) mod 2048; end if; end if; end if; end loop; end process look_for_dropped_tx_samples; -- -- Rx Sample Check -- first_rx_val_at_mux: process -- Catches and saves the first sample of -- each rx enabled burst seen by the mux begin for i in adc_controls'range loop if( adc_controls(i).enable = '1') then if( ENABLE_CHANNEL_0 = '1' and ENABLE_CHANNEL_1 = '1' ) then adc_stream_val_at_rx_enable <= adc_streams(i).data_i - 1; else adc_stream_val_at_rx_enable <= adc_streams(i).data_i; end if; end if; end loop; wait until rising_edge(trigger_signal_sync_tb); end process first_rx_val_at_mux; look_for_dropped_rx_samples: process(fx3_pclk_pll) variable rx_val : integer := 0; variable q_expected : std_logic_vector (15 downto 0); variable i_expected : std_logic_vector (15 downto 0); variable q_out : std_logic_vector (15 downto 0); variable i_out : std_logic_vector (15 downto 0); variable q0_expected_eight_bit_mode : std_logic_vector (7 downto 0); variable i0_expected_eight_bit_mode : std_logic_vector (7 downto 0); variable q1_expected_eight_bit_mode : std_logic_vector (7 downto 0); variable i1_expected_eight_bit_mode : std_logic_vector (7 downto 0); variable q0_out_eight_bit_mode : std_logic_vector (7 downto 0); variable i0_out_eight_bit_mode : std_logic_vector (7 downto 0); variable q1_out_eight_bit_mode : std_logic_vector (7 downto 0); variable i1_out_eight_bit_mode : std_logic_vector (7 downto 0); variable previous_adc_stream_val_at_rx_enable : signed (15 downto 0) := ( others => '0'); variable fail_count: natural := 0; variable both_channels_en : std_logic; begin if( previous_adc_stream_val_at_rx_enable /= adc_stream_val_at_rx_enable ) then rx_val := to_integer(adc_stream_val_at_rx_enable (15 downto 4)) when EIGHT_BIT_MODE_EN else to_integer(adc_stream_val_at_rx_enable); previous_adc_stream_val_at_rx_enable := adc_stream_val_at_rx_enable; end if; if( rising_edge(fx3_pclk_pll) and fx3_gpif.gpif_oe = '1' and fx3_control.rx_enable = '1' ) then if( EIGHT_BIT_MODE_EN = '1') then -- The +-1 ch1 offset in SISO mode will not reach 128 both_channels_en := ENABLE_CHANNEL_0 and ENABLE_CHANNEL_1; q1_expected_eight_bit_mode := std_logic_vector(to_signed(-rx_val - 1, 8)) when both_channels_en else std_logic_vector(to_signed(-((rx_val + 1) mod 128), 8)); i1_expected_eight_bit_mode := std_logic_vector(to_signed(rx_val + 1, 8)) when both_channels_en else std_logic_vector(to_signed((rx_val + 1) mod 128, 8)); q0_expected_eight_bit_mode := std_logic_vector(to_signed(-rx_val, 8)); i0_expected_eight_bit_mode := std_logic_vector(to_signed(rx_val, 8)); q1_out_eight_bit_mode := fx3_gpif.gpif_out(31 downto 24); i1_out_eight_bit_mode := fx3_gpif.gpif_out(23 downto 16); q0_out_eight_bit_mode := fx3_gpif.gpif_out(15 downto 8); i0_out_eight_bit_mode := fx3_gpif.gpif_out(7 downto 0); if( q1_out_eight_bit_mode /= q1_expected_eight_bit_mode or i1_out_eight_bit_mode /= i1_expected_eight_bit_mode or q0_out_eight_bit_mode /= q0_expected_eight_bit_mode or i0_out_eight_bit_mode /= i0_expected_eight_bit_mode) then fail_count := fail_count + 1; report "-----------------------------"; if( fail_count > 3 ) then report "rx fail count tolerance exceeded" severity failure; end if; end if; assert ( q1_out_eight_bit_mode = q1_expected_eight_bit_mode ) report "data_q1: " & to_hstring(q1_out_eight_bit_mode) & " | " & "expected: " & to_hstring(q1_expected_eight_bit_mode) severity warning; assert ( i1_out_eight_bit_mode = i1_expected_eight_bit_mode ) report "data_i1: " & to_hstring(i1_out_eight_bit_mode) & " | " & "expected: " & to_hstring(i1_expected_eight_bit_mode) severity warning; assert ( q0_out_eight_bit_mode = q0_expected_eight_bit_mode ) report "data_q0: " & to_hstring(q0_out_eight_bit_mode) & " | " & "expected: " & to_hstring(q0_expected_eight_bit_mode) severity warning; assert ( i0_out_eight_bit_mode = i0_expected_eight_bit_mode ) report "data_i0: " & to_hstring(i0_out_eight_bit_mode) & " | " & "expected: " & to_hstring(i0_expected_eight_bit_mode) severity warning; -- 128 limit set by gen_adc_controls above rx_val := (rx_val + 2) mod 128; else q_expected := std_logic_vector(to_signed(-rx_val, 16)); i_expected := std_logic_vector(to_signed(rx_val, 16)); q_out := fx3_gpif.gpif_out(31 downto 16); i_out := fx3_gpif.gpif_out(15 downto 0); assert(q_out = q_expected) report "data_q: " & to_hstring(q_out) & " | " & "expected: " & to_hstring(q_expected) severity failure; assert(i_out = i_expected) report "data_i: " & to_hstring(i_out) & " | " & "expected: " & to_hstring(i_expected) severity failure; -- 2047 limit set by gen_adc_controls above rx_val := (rx_val + 1) mod 2048; end if; end if; end process look_for_dropped_rx_samples; end architecture; bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/vhdl/tb/fx3_gpif_iq_tb.vhd000066400000000000000000000724561457144405000263400ustar00rootroot00000000000000-- Copyright (c) 2022 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; library rtl_work; library altera_lnsim; use altera_lnsim.altera_pll; library nuand; use nuand.util.all ; use nuand.fifo_readwrite_p.all; use nuand.common_dcfifo_p.all; use nuand.bladerf_p.all; entity fx3_gpif_iq_tb is generic ( -- For bladeRF2 (2x2 MIMO): NUM_MIMO_STREAMS : natural := 2; FIFO_READER_READ_THROTTLE : natural := 0; ENABLE_CHANNEL_0 : std_logic := '1'; ENABLE_CHANNEL_1 : std_logic := '1' ); end entity; architecture arch of fx3_gpif_iq_tb is -- bladerf-hosted uses ad9361.clock (125 MHz) for rx_clock and tx_clock constant SYSCLK_HALF_PERIOD : time := 1 sec * (1.0/125.0e6/2.0); -- For reasons unknown, simulation of this system in ModelSim requires that -- wrreq and data be asserted shortly before the rising clock edge. Sigh... constant FIFO_WORKAROUND : time := 1 ps; type fx3_control_t is record usb_speed : std_logic; tx_enable : std_logic; rx_enable : std_logic; meta_enable : std_logic; packet : std_logic; end record; type fx3_gpif_t is record gpif_in : std_logic_vector(31 downto 0); gpif_out : std_logic_vector(31 downto 0); gpif_oe : std_logic; ctl_in : std_logic_vector(12 downto 0); ctl_out : std_logic_vector(12 downto 0); ctl_oe : std_logic_vector(12 downto 0); end record; signal sys_rst : std_logic := '1'; signal done : boolean := false; signal fx3_pclk : std_logic := '1'; signal fx3_pclk_pll : std_logic := '1'; signal sys_clk : std_logic := '1'; signal pll_reset : std_logic := '0'; signal pll_locked : std_logic := '0'; signal fx3_control : fx3_control_t; signal fx3_gpif : fx3_gpif_t; signal fx3_gpif_i : std_logic_vector(31 downto 0); signal fx3_ctl_i : std_logic_vector(12 downto 0); -- Control mapping alias dma0_rx_ack is fx3_ctl_i( 0); alias dma1_rx_ack is fx3_ctl_i( 1); alias dma2_tx_ack is fx3_ctl_i( 2); alias dma3_tx_ack is fx3_ctl_i( 3); alias dma_rx_enable is fx3_ctl_i( 4); alias dma_tx_enable is fx3_ctl_i( 5); alias dma_idle is fx3_ctl_i( 6); alias system_reset is fx3_ctl_i( 7); alias dma0_rx_reqx is fx3_ctl_i( 8); alias dma1_rx_reqx is fx3_ctl_i(12); -- due to 9 being connected to dclk alias dma2_tx_reqx is fx3_ctl_i(10); alias dma3_tx_reqx is fx3_ctl_i(11); signal loopback_i : signed(15 downto 0) := (others =>'0'); signal loopback_q : signed(15 downto 0) := (others =>'0'); signal loopback_valid : std_logic := '0'; signal loopback_enabled : std_logic := '0'; signal tx_clock : std_logic := '1' ; signal rx_clock : std_logic := '1' ; signal rx_sample_fifo : rx_fifo_t := RX_FIFO_T_DEFAULT; signal tx_sample_fifo : tx_fifo_t := TX_FIFO_T_DEFAULT; signal loopback_fifo : loopback_fifo_t := LOOPBACK_FIFO_T_DEFAULT; signal rx_meta_fifo : meta_fifo_rx_t := META_FIFO_RX_T_DEFAULT; signal tx_meta_fifo : meta_fifo_tx_t := META_FIFO_TX_T_DEFAULT; signal rx_mux_i : signed(15 downto 0); signal rx_mux_q : signed(15 downto 0); signal rx_mux_valid : std_logic; signal tx_timestamp : unsigned(63 downto 0) := ( others => '0' ); signal rx_timestamp : unsigned(63 downto 0) := ( others => '0' ); constant FX3_HALF_PERIOD : time := 1.0/(100.0e6)/2.0*1 sec ; constant TX_HALF_PERIOD : time := 1.0/(9.0e6)/2.0*1 sec ; constant RX_HALF_PERIOD : time := 1.0/(9.0e6)/2.0*1 sec ; signal dac_controls : sample_controls_t(0 to NUM_MIMO_STREAMS-1) := (others => SAMPLE_CONTROL_DISABLE); signal dac_streams : sample_streams_t(dac_controls'range) := (others => ZERO_SAMPLE); signal adc_controls : sample_controls_t(0 to NUM_MIMO_STREAMS-1) := (others => SAMPLE_CONTROL_DISABLE); signal adc_streams : sample_streams_t(adc_controls'range) := (others => ZERO_SAMPLE); signal tx_reset : std_logic := '0'; signal tx_ts_reset : std_logic := '0'; signal rx_reset : std_logic := '0'; signal rx_ts_reset : std_logic := '0'; signal meta_en_tx : std_logic := '0'; signal meta_en_rx : std_logic := '0'; signal rx_packet_control : packet_control_t := PACKET_CONTROL_DEFAULT; signal tx_packet_control : packet_control_t; signal trigger_signal_sync_tb : std_logic; signal dac_stream_val_at_rx_enable : signed(15 downto 0) := ( others => '0' ); function data_gen (count : natural) return std_logic_vector is variable msw, lsw : std_logic_vector(15 downto 0); begin msw := std_logic_vector(to_signed(count, 16)); lsw := std_logic_vector(to_signed(-count, 16)); return (msw & lsw); end function data_gen; signal rx_packet_ready : std_logic; begin -- ======================================================================== -- Brief summary of data flow -- ======================================================================== -- -- Simulated samples flow from fx3_model's TX side to its RX side. The -- validity of the data is checked there. -- -- entity U_fx3_model FX3 model, TX process -- signal fx3_gpif_i fx3_gpif.gpif_oe is '0' -- process register_gpif -- signal fx3_gpif.gpif_in Demuxed GPIF interface (FX3 -> FPGA) -- entity U_fx3_gpif GPIF implementation, write side -- signal tx_sample_fifo.w* TX fifo, write side -- entity U_tx_sample_fifo -- signal tx_sample_fifo.r* TX fifo, read side -- process tx_mux -- signal loopback_fifo.w* Loopback fifo, write side -- entity U_rx_loopback_fifo -- signal loopback_fifo.r* Loopback fifo, read side -- process loopback_fifo_control -- signal loopback_{i,q,valid} -- process rx_mux -- signal rx_mux_{i,q,valid} -- entity U_fifo_writer -- signal rx_sample_fifo.w* RX fifo, write side -- entity U_rx_sample_fifo -- signal rx_sample_fifo.r* RX fifo, read side -- entity U_fx3_gpif GPIF implementation, read side -- signal fx3_gpif.gpif_out Demuxed GPIF interface (FPGA -> FX3) -- process register_gpif -- signal fx3_gpif_i fx3_gpif.gpif_oe is '1' -- entity U_fx3_model FX3 model, RX process -- ======================================================================== -- Instantiations -- ======================================================================== -- Unit under test -- Clock domain: fx3_pclk_pll U_fx3_gpif : entity nuand.fx3_gpif port map ( pclk => fx3_pclk_pll, reset => sys_rst, usb_speed => fx3_control.usb_speed, gpif_in => fx3_gpif.gpif_in, gpif_out => fx3_gpif.gpif_out, gpif_oe => fx3_gpif.gpif_oe, ctl_in => fx3_gpif.ctl_in, ctl_out => fx3_gpif.ctl_out, ctl_oe => fx3_gpif.ctl_oe, tx_enable => fx3_control.tx_enable, rx_enable => fx3_control.rx_enable, meta_enable => fx3_control.meta_enable, packet_enable => fx3_control.packet, tx_fifo_write => tx_sample_fifo.wreq, tx_fifo_full => tx_sample_fifo.wfull, tx_fifo_empty => tx_sample_fifo.wempty, tx_fifo_usedw => tx_sample_fifo.wused, tx_fifo_data => tx_sample_fifo.wdata, tx_timestamp => tx_timestamp, tx_meta_fifo_write => tx_meta_fifo.wreq, tx_meta_fifo_full => tx_meta_fifo.wfull, tx_meta_fifo_empty => tx_meta_fifo.wempty, tx_meta_fifo_usedw => tx_meta_fifo.wused, tx_meta_fifo_data => tx_meta_fifo.wdata, rx_fifo_read => rx_sample_fifo.rreq, rx_fifo_full => rx_sample_fifo.rfull, rx_fifo_empty => rx_sample_fifo.rempty, rx_fifo_usedw => rx_sample_fifo.rused, rx_fifo_data => rx_sample_fifo.rdata, rx_meta_fifo_read => rx_meta_fifo.rreq, rx_meta_fifo_full => rx_meta_fifo.rfull, rx_meta_fifo_empty => rx_meta_fifo.rempty, rx_meta_fifo_usedr => rx_meta_fifo.rused, rx_meta_fifo_data => rx_meta_fifo.rdata ); -- Discrete control signals for fx3_gpif fx3_control.usb_speed <= '0'; fx3_control.meta_enable <= '0'; fx3_control.packet <= '0'; U_pkt_gen : entity nuand.rx_packet_generator port map( rx_clock => rx_clock, rx_reset => rx_reset, rx_enable => fx3_control.rx_enable, rx_packet_enable => fx3_control.packet, rx_packet_ready => rx_packet_ready, rx_packet_control => rx_packet_control ); meta_en_tx <= fx3_control.meta_enable; meta_en_rx <= fx3_control.meta_enable; increment_tx_ts : process(tx_clock) variable ping : boolean := true ; begin if( rising_edge(tx_clock) ) then ping := not ping ; if( ping = true ) then tx_timestamp <= tx_timestamp + 1 ; end if ; end if ; end process ; increment_rx_ts : process(rx_clock) variable ping : boolean := true ; begin if( rising_edge(rx_clock) ) then ping := not ping ; if( ping = true ) then rx_timestamp <= rx_timestamp + 1 ; end if ; end if ; end process ; -- Model of FX3's GPIF interface -- Clock domain: fx3_pclk (source) U_fx3_model : entity nuand.fx3_model(micro_dma) port map ( fx3_pclk => fx3_pclk, fx3_gpif => fx3_gpif_i, fx3_ctl => fx3_ctl_i, fx3_uart_rxd => '0', fx3_uart_txd => open, fx3_uart_cts => open, fx3_rx_en => '1', fx3_rx_meta_en => meta_en_rx, fx3_tx_en => '1', fx3_tx_meta_en => meta_en_tx, done => done ); -- Generate phase-shifted PLL clock U_fx3_pll : entity rtl_work.fx3_pll port map ( inclk0 => fx3_pclk, areset => pll_reset, c0 => fx3_pclk_pll, locked => pll_locked ); tx_clock <= not tx_clock after TX_HALF_PERIOD ; rx_clock <= not rx_clock after RX_HALF_PERIOD ; -- Reset handler sys_rst <= '0' after 100 ns; -- Generate system clock sys_clk <= not sys_clk after SYSCLK_HALF_PERIOD when not done else '0'; tx_reset <= sys_rst; tx_ts_reset <= sys_rst; rx_reset <= sys_rst; rx_ts_reset <= sys_rst; meta_en_tx <= fx3_control.meta_enable; meta_en_rx <= fx3_control.meta_enable; -- TX Submodule U_tx : entity work.tx generic map ( NUM_STREAMS => dac_controls'length ) port map ( tx_reset => tx_reset, tx_clock => tx_clock, tx_enable => fx3_control.tx_enable, meta_en => meta_en_tx, timestamp_reset => tx_ts_reset, usb_speed => fx3_control.usb_speed, tx_underflow_led => open, tx_timestamp => tx_timestamp, -- Triggering trigger_arm => '0', trigger_fire => '0', trigger_master => '0', trigger_line => open, -- Packet FIFO packet_en => fx3_control.packet, packet_empty => open, packet_control => tx_packet_control, packet_ready => '1', -- Samples from host via FX3 sample_fifo_wclock => fx3_pclk_pll, sample_fifo_wreq => tx_sample_fifo.wreq, sample_fifo_wdata => tx_sample_fifo.wdata, sample_fifo_wempty => tx_sample_fifo.wempty, sample_fifo_wfull => tx_sample_fifo.wfull, sample_fifo_wused => tx_sample_fifo.wused, -- Metadata from host via FX3 meta_fifo_wclock => fx3_pclk_pll, meta_fifo_wreq => tx_meta_fifo.wreq, meta_fifo_wdata => tx_meta_fifo.wdata, meta_fifo_wempty => tx_meta_fifo.wempty, meta_fifo_wfull => tx_meta_fifo.wfull, meta_fifo_wused => tx_meta_fifo.wused, -- Digital Loopback Interface loopback_enabled => '0', loopback_fifo_wdata => loopback_fifo.wdata, loopback_fifo_wreq => loopback_fifo.wreq, loopback_fifo_wfull => loopback_fifo.wfull, loopback_fifo_wused => loopback_fifo.wused, -- RFFE Interface dac_controls => dac_controls, dac_streams => dac_streams ); -- RX Submodule U_rx : entity work.rx generic map ( NUM_STREAMS => adc_controls'length ) port map ( rx_reset => rx_reset, rx_clock => rx_clock, rx_enable => fx3_control.rx_enable, meta_en => meta_en_rx, timestamp_reset => rx_ts_reset, usb_speed => fx3_control.usb_speed, rx_mux_sel => to_unsigned(0, 3), rx_overflow_led => open, rx_timestamp => rx_timestamp, -- Triggering trigger_arm => '0', trigger_fire => '0', trigger_master => '0', trigger_line => open, trigger_signal_sync_tb => trigger_signal_sync_tb, -- Packet FIFO packet_en => fx3_control.packet, packet_control => rx_packet_control, packet_ready => rx_packet_ready, -- Samples to host via FX3 sample_fifo_rclock => fx3_pclk_pll, sample_fifo_raclr => not fx3_control.rx_enable, sample_fifo_rreq => rx_sample_fifo.rreq, sample_fifo_rdata => rx_sample_fifo.rdata, sample_fifo_rempty => rx_sample_fifo.rempty, sample_fifo_rfull => rx_sample_fifo.rfull, sample_fifo_rused => rx_sample_fifo.rused, -- Mini expansion signals mini_exp => "00", -- Metadata to host via FX3 meta_fifo_rclock => fx3_pclk_pll, meta_fifo_raclr => not fx3_control.rx_enable, meta_fifo_rreq => rx_meta_fifo.rreq, meta_fifo_rdata => rx_meta_fifo.rdata, meta_fifo_rempty => rx_meta_fifo.rempty, meta_fifo_rfull => rx_meta_fifo.rfull, meta_fifo_rused => rx_meta_fifo.rused, -- Digital Loopback Interface loopback_fifo_wenabled => open, loopback_fifo_wreset => tx_reset, loopback_fifo_wclock => tx_clock, loopback_fifo_wdata => loopback_fifo.wdata, loopback_fifo_wreq => loopback_fifo.wreq, loopback_fifo_wfull => loopback_fifo.wfull, loopback_fifo_wused => loopback_fifo.wused, -- RFFE Interface adc_controls => adc_controls, adc_streams => adc_streams ); -- ======================================================================== -- Data converters -- ======================================================================== gen_dac_controls : if( NUM_MIMO_STREAMS > 1 ) generate -- The TX side of the AD9361 HDL is a FIFO pull interface -- that expects a readahead FIFO. It toggles the data request -- signal every other cycle. This behavior is mimicked here. process( tx_clock, sys_rst ) begin if( sys_rst = '1' ) then dac_controls <= ( 0 => (enable => ENABLE_CHANNEL_0, data_req => '1'), 1 => (enable => ENABLE_CHANNEL_1, data_req => '1') ); elsif( rising_edge(tx_clock) ) then for i in dac_controls'range loop dac_controls(i) <= ( enable => dac_controls(i).enable, data_req => not dac_controls(i).data_req ); end loop; end if; end process; else generate dac_controls <= (others => SAMPLE_CONTROL_ENABLE); end generate; gen_adc_controls : if( NUM_MIMO_STREAMS > 1 ) generate process( rx_clock, sys_rst ) constant COUNT_RESET : integer := 0; variable count : integer range -2047 to 2047 := COUNT_RESET; begin if( sys_rst = '1' ) then count := COUNT_RESET; adc_controls <= ( 0 => (enable => ENABLE_CHANNEL_0, data_req => '1'), 1 => (enable => ENABLE_CHANNEL_1, data_req => '1') ); elsif( rising_edge(rx_clock) ) then for i in adc_controls'range loop adc_controls(i) <= ( enable => adc_controls(i).enable, data_req => not adc_controls(i).data_req ); if( adc_controls(i).enable = '1') then if( adc_streams(i).data_v = '1' ) then adc_streams(i).data_i <= to_signed(count, 16); adc_streams(i).data_q <= to_signed(-count, 16); if( count < 2047 ) then count := count + 1; else count := COUNT_RESET; end if; end if; adc_streams(i).data_v <= not adc_streams(i).data_v; end if; end loop; end if; end process; else generate adc_controls <= (others => SAMPLE_CONTROL_ENABLE); end generate; -- ======================================================================== -- Processes -- ======================================================================== -- FX3 GPIF bidirectional signal control -- Adapted from same process in bladerf-hosted.vhd register_gpif : process(sys_rst, fx3_pclk_pll) begin if( sys_rst = '1' ) then fx3_gpif_i <= (others => 'Z'); fx3_gpif.gpif_in <= (others => 'Z'); elsif( rising_edge(fx3_pclk_pll) ) then fx3_gpif.gpif_in <= fx3_gpif_i; if( fx3_gpif.gpif_oe = '1' ) then fx3_gpif_i <= fx3_gpif.gpif_out; else fx3_gpif_i <= (others =>'Z'); end if; end if; end process; -- FX3 CTL bidirectional signals -- Adapted from same generator in bladerf-hosted.vhd generate_ctl : for i in fx3_ctl_i'range generate fx3_ctl_i(i) <= fx3_gpif.ctl_out(i) when fx3_gpif.ctl_oe(i) = '1' else 'Z'; end generate; fx3_gpif.ctl_in <= fx3_ctl_i; -- Controller for loopback FIFO -- Stripped-down version of same process from rx.vhd loopback_fifo_control : process( sys_rst, loopback_fifo.rclock ) begin if( sys_rst = '1' ) then loopback_enabled <= '0'; loopback_fifo.rreq <= '0'; loopback_i <= (others => '0'); loopback_q <= (others => '0'); loopback_valid <= '0'; elsif( rising_edge(loopback_fifo.rclock) ) then loopback_enabled <= '0'; loopback_fifo.rreq <= '0'; loopback_i <= loopback_i; loopback_q <= loopback_q; loopback_valid <= '0'; -- Is loopback enabled? loopback_enabled <= fx3_control.rx_enable; -- Do the loopback loopback_i <= resize(signed(loopback_fifo.rdata(15 downto 0)), loopback_i'length); loopback_q <= resize(signed(loopback_fifo.rdata(31 downto 16)), loopback_q'length); loopback_valid <= loopback_fifo.rreq and not loopback_fifo.rempty; -- Read from the FIFO if req'd loopback_fifo.rreq <= loopback_enabled and (not loopback_fifo.rempty); end if; end process; -- RX multiplexer -- Stripped-down version of same process from rx.vhd rx_mux : process(sys_rst, sys_clk) begin if( sys_rst = '1' ) then rx_mux_i <= (others =>'0'); rx_mux_q <= (others =>'0'); rx_mux_valid <= '0'; elsif( rising_edge(sys_clk) ) then rx_mux_i <= loopback_i; rx_mux_q <= loopback_q; rx_mux_valid <= loopback_valid; end if; end process; -- TX multiplexer -- Stripped-down version of mimo_channel_sel_mux from tx.vhd --tx_mux : process( sys_clk ) --begin -- if( rising_edge(sys_clk) ) then -- tx_sample_fifo.rreq <= not tx_sample_fifo.rempty; -- loopback_fifo.wdata <= tx_sample_fifo.rdata; -- loopback_fifo.wreq <= tx_sample_fifo.rreq and not tx_sample_fifo.rempty; -- end if; --end process; -- ======================================================================== -- Verification -- ======================================================================== -- -- Check for metavalues -- We should never see metavalues written to the FIFOs -- check_fifo_write : process(fx3_pclk_pll) is begin if (rising_edge(fx3_pclk_pll)) then if (tx_sample_fifo.wreq = '1' and fx3_control.meta_enable = '0') then for i in tx_sample_fifo.wdata'range loop assert tx_sample_fifo.wdata(i) = '0' or tx_sample_fifo.wdata(i) = '1' severity failure; end loop; end if; end if; end process; check_fifo_read : process(fx3_pclk_pll) is begin if (rising_edge(fx3_pclk_pll)) then if (rx_sample_fifo.rreq = '1') then for i in rx_sample_fifo.rdata'range loop assert rx_sample_fifo.rdata(i) = '0' or rx_sample_fifo.rdata(i) = '1' severity failure; end loop; end if; end if; end process check_fifo_read; -- -- Check for fullness on FIFOs -- assert (rx_sample_fifo.wfull = '0') report "rx_sample_fifo full (write)" severity warning; assert (tx_sample_fifo.wfull = '0') report "tx_sample_fifo full (write)" severity warning; assert (loopback_fifo.wfull = '0') report "loopback_fifo full (write)" severity warning; -- -- Tx Sample Check -- look_for_dropped_tx_samples : process(tx_clock) is constant MESSAGES_PER_ITERATION : natural := 3; --Provided in fx3_model variable current_message_count : natural := 1; variable iq_value : signed (15 downto 0) := x"0000"; variable expected_sample_q : signed (15 downto 0); variable expected_sample_i : signed (15 downto 0); begin for i in dac_controls'range loop if ( rising_edge(tx_clock) and dac_controls(i).enable = '1' and dac_streams(i).data_v = '1' and fx3_control.tx_enable = '1' ) then expected_sample_i := iq_value; expected_sample_q := to_signed(current_message_count, 8) & (iq_value(7 downto 0) + 1); assert ( dac_streams(i).data_i = expected_sample_i ) report "dac_streams("&to_string(i)&").data_i: " & to_hstring(dac_streams(i).data_i) & " | " & "expected_sample_i: " & to_hstring(expected_sample_i) severity failure; assert ( dac_streams(i).data_q = expected_sample_q ) report "dac_streams("&to_string(i)&").data_q: " & to_hstring(dac_streams(i).data_q) & " | " & "expected_sample_q: " & to_hstring(expected_sample_q) severity failure; -- Set iq values based on blocks received -- See tx_sample_stream's encoding scheme in fx3_model.vhd if( iq_value = x"03FE" ) then iq_value := x"0000"; if( current_message_count < MESSAGES_PER_ITERATION ) then current_message_count := current_message_count + 1; else current_message_count := 1; end if; else iq_value := (iq_value + 2) mod 2048; end if; end if; end loop; end process look_for_dropped_tx_samples; -- -- Rx Sample Check -- first_rx_val_at_mux: process -- Catches and saves the first sample of -- each rx enabled burst seen by the mux begin for i in adc_controls'range loop if( adc_controls(i).enable = '1') then if ( ENABLE_CHANNEL_0 = '1' and ENABLE_CHANNEL_1 = '1' ) then dac_stream_val_at_rx_enable <= adc_streams(i).data_i - 1; else dac_stream_val_at_rx_enable <= adc_streams(i).data_i; end if; end if; end loop; wait until rising_edge(trigger_signal_sync_tb); end process first_rx_val_at_mux; look_for_dropped_rx_samples: process(fx3_pclk_pll) variable rx_val : integer := 0; variable q_expected : std_logic_vector (15 downto 0); variable i_expected : std_logic_vector (15 downto 0); variable q_out : std_logic_vector (15 downto 0); variable i_out : std_logic_vector (15 downto 0); variable previous_dac_stream_val_at_rx_enable : signed (15 downto 0) := ( others => '0'); begin if ( previous_dac_stream_val_at_rx_enable /= dac_stream_val_at_rx_enable ) then rx_val := to_integer(dac_stream_val_at_rx_enable); previous_dac_stream_val_at_rx_enable := dac_stream_val_at_rx_enable; end if; if ( rising_edge(fx3_pclk_pll) and fx3_gpif.gpif_oe = '1' and fx3_control.rx_enable = '1' ) then q_expected := std_logic_vector(to_signed(-rx_val, 16)); i_expected := std_logic_vector(to_signed(rx_val, 16)); q_out := fx3_gpif.gpif_out(31 downto 16); i_out := fx3_gpif.gpif_out(15 downto 0); assert ( q_out = q_expected ) report "data_q: " & to_hstring(q_out) & " | " & "expected: " & to_hstring(q_expected) severity failure; assert ( i_out = i_expected ) report "data_i: " & to_hstring(i_out) & " | " & "expected: " & to_hstring(i_expected) severity failure; -- 2047 limit set by gen_adc_controls above if ( rx_val < 2047 ) then rx_val := rx_val + 1; else rx_val := 0; end if; end if; end process look_for_dropped_rx_samples; end architecture; bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/vhdl/tb/fx3_gpif_meta_8bit_tb.vhd000066400000000000000000001163221457144405000275720ustar00rootroot00000000000000-- Copyright (c) 2022 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; library rtl_work; library altera_lnsim; use altera_lnsim.altera_pll; library nuand; use nuand.util.all ; use nuand.fifo_readwrite_p.all; use nuand.common_dcfifo_p.all; use nuand.bladerf_p.all; entity fx3_gpif_meta_8bit_tb is generic ( -- For bladeRF2 (2x2 MIMO): NUM_MIMO_STREAMS : natural := 2; FIFO_READER_READ_THROTTLE : natural := 0; ENABLE_CHANNEL_0 : std_logic := '1'; ENABLE_CHANNEL_1 : std_logic := '1'; EIGHT_BIT_MODE_EN : std_logic := '1' ); end entity; architecture arch of fx3_gpif_meta_8bit_tb is -- bladerf-hosted uses ad9361.clock (125 MHz) for rx_clock and tx_clock constant SYSCLK_HALF_PERIOD : time := 1 sec * (1.0/125.0e6/2.0); -- For reasons unknown, simulation of this system in ModelSim requires that -- wrreq and data be asserted shortly before the rising clock edge. Sigh... constant FIFO_WORKAROUND : time := 1 ps; type fx3_control_t is record usb_speed : std_logic; tx_enable : std_logic; rx_enable : std_logic; meta_enable : std_logic; packet : std_logic; end record; type fx3_gpif_t is record gpif_in : std_logic_vector(31 downto 0); gpif_out : std_logic_vector(31 downto 0); gpif_oe : std_logic; ctl_in : std_logic_vector(12 downto 0); ctl_out : std_logic_vector(12 downto 0); ctl_oe : std_logic_vector(12 downto 0); end record; signal sys_rst : std_logic := '1'; signal done : boolean := false; signal fx3_pclk : std_logic := '1'; signal fx3_pclk_pll : std_logic := '1'; signal sys_clk : std_logic := '1'; signal pll_reset : std_logic := '0'; signal pll_locked : std_logic := '0'; signal fx3_control : fx3_control_t; signal fx3_gpif : fx3_gpif_t; signal fx3_gpif_i : std_logic_vector(31 downto 0); signal fx3_ctl_i : std_logic_vector(12 downto 0); -- Control mapping alias dma0_rx_ack is fx3_ctl_i( 0); alias dma1_rx_ack is fx3_ctl_i( 1); alias dma2_tx_ack is fx3_ctl_i( 2); alias dma3_tx_ack is fx3_ctl_i( 3); alias dma_rx_enable is fx3_ctl_i( 4); alias dma_tx_enable is fx3_ctl_i( 5); alias dma_idle is fx3_ctl_i( 6); alias system_reset is fx3_ctl_i( 7); alias dma0_rx_reqx is fx3_ctl_i( 8); alias dma1_rx_reqx is fx3_ctl_i(12); -- due to 9 being connected to dclk alias dma2_tx_reqx is fx3_ctl_i(10); alias dma3_tx_reqx is fx3_ctl_i(11); signal loopback_i : signed(15 downto 0) := (others =>'0'); signal loopback_q : signed(15 downto 0) := (others =>'0'); signal loopback_valid : std_logic := '0'; signal loopback_enabled : std_logic := '0'; signal tx_clock : std_logic := '1' ; signal rx_clock : std_logic := '1' ; signal rx_sample_fifo : rx_fifo_t := RX_FIFO_T_DEFAULT; signal tx_sample_fifo : tx_fifo_t := TX_FIFO_T_DEFAULT; signal loopback_fifo : loopback_fifo_t := LOOPBACK_FIFO_T_DEFAULT; signal rx_meta_fifo : meta_fifo_rx_t := META_FIFO_RX_T_DEFAULT; signal tx_meta_fifo : meta_fifo_tx_t := META_FIFO_TX_T_DEFAULT; signal rx_mux_i : signed(15 downto 0); signal rx_mux_q : signed(15 downto 0); signal rx_mux_valid : std_logic; signal tx_timestamp : unsigned(63 downto 0) := ( others => '0' ); signal rx_timestamp : unsigned(63 downto 0) := ( others => '0' ); constant FX3_HALF_PERIOD : time := 1.0/(100.0e6)/2.0*1 sec ; constant TX_HALF_PERIOD : time := 1.0/(9.0e6)/2.0*1 sec ; constant RX_HALF_PERIOD : time := 1.0/(9.0e6)/2.0*1 sec ; signal dac_controls : sample_controls_t(0 to NUM_MIMO_STREAMS-1) := (others => SAMPLE_CONTROL_DISABLE); signal dac_streams : sample_streams_t(dac_controls'range) := (others => ZERO_SAMPLE); signal adc_controls : sample_controls_t(0 to NUM_MIMO_STREAMS-1) := (others => SAMPLE_CONTROL_DISABLE); signal adc_streams : sample_streams_t(adc_controls'range) := (others => ZERO_SAMPLE); signal tx_reset : std_logic := '0'; signal tx_ts_reset : std_logic := '0'; signal rx_reset : std_logic := '0'; signal rx_ts_reset : std_logic := '0'; signal meta_en_tx : std_logic := '0'; signal meta_en_rx : std_logic := '0'; signal rx_packet_control : packet_control_t := PACKET_CONTROL_DEFAULT; signal tx_packet_control : packet_control_t; signal trigger_signal_sync_tb : std_logic; signal adc_stream_val_at_rx_enable : signed(15 downto 0) := ( others => '0' ); function data_gen (count : natural) return std_logic_vector is variable msw, lsw : std_logic_vector(15 downto 0); begin msw := std_logic_vector(to_signed(count, 16)); lsw := std_logic_vector(to_signed(-count, 16)); return (msw & lsw); end function data_gen; signal rx_packet_ready : std_logic; begin -- ======================================================================== -- Brief summary of data flow -- ======================================================================== -- -- Simulated samples flow from fx3_model's TX side to its RX side. The -- validity of the data is checked there. -- -- entity U_fx3_model FX3 model, TX process -- signal fx3_gpif_i fx3_gpif.gpif_oe is '0' -- process register_gpif -- signal fx3_gpif.gpif_in Demuxed GPIF interface (FX3 -> FPGA) -- entity U_fx3_gpif GPIF implementation, write side -- signal tx_sample_fifo.w* TX fifo, write side -- entity U_tx_sample_fifo -- signal tx_sample_fifo.r* TX fifo, read side -- process tx_mux -- signal loopback_fifo.w* Loopback fifo, write side -- entity U_rx_loopback_fifo -- signal loopback_fifo.r* Loopback fifo, read side -- process loopback_fifo_control -- signal loopback_{i,q,valid} -- process rx_mux -- signal rx_mux_{i,q,valid} -- entity U_fifo_writer -- signal rx_sample_fifo.w* RX fifo, write side -- entity U_rx_sample_fifo -- signal rx_sample_fifo.r* RX fifo, read side -- entity U_fx3_gpif GPIF implementation, read side -- signal fx3_gpif.gpif_out Demuxed GPIF interface (FPGA -> FX3) -- process register_gpif -- signal fx3_gpif_i fx3_gpif.gpif_oe is '1' -- entity U_fx3_model FX3 model, RX process -- ======================================================================== -- Instantiations -- ======================================================================== -- Unit under test -- Clock domain: fx3_pclk_pll U_fx3_gpif : entity nuand.fx3_gpif port map ( pclk => fx3_pclk_pll, reset => sys_rst, usb_speed => fx3_control.usb_speed, gpif_in => fx3_gpif.gpif_in, gpif_out => fx3_gpif.gpif_out, gpif_oe => fx3_gpif.gpif_oe, ctl_in => fx3_gpif.ctl_in, ctl_out => fx3_gpif.ctl_out, ctl_oe => fx3_gpif.ctl_oe, tx_enable => fx3_control.tx_enable, rx_enable => fx3_control.rx_enable, meta_enable => fx3_control.meta_enable, packet_enable => fx3_control.packet, tx_fifo_write => tx_sample_fifo.wreq, tx_fifo_full => tx_sample_fifo.wfull, tx_fifo_empty => tx_sample_fifo.wempty, tx_fifo_usedw => tx_sample_fifo.wused, tx_fifo_data => tx_sample_fifo.wdata, tx_timestamp => tx_timestamp, tx_meta_fifo_write => tx_meta_fifo.wreq, tx_meta_fifo_full => tx_meta_fifo.wfull, tx_meta_fifo_empty => tx_meta_fifo.wempty, tx_meta_fifo_usedw => tx_meta_fifo.wused, tx_meta_fifo_data => tx_meta_fifo.wdata, rx_fifo_read => rx_sample_fifo.rreq, rx_fifo_full => rx_sample_fifo.rfull, rx_fifo_empty => rx_sample_fifo.rempty, rx_fifo_usedw => rx_sample_fifo.rused, rx_fifo_data => rx_sample_fifo.rdata, rx_meta_fifo_read => rx_meta_fifo.rreq, rx_meta_fifo_full => rx_meta_fifo.rfull, rx_meta_fifo_empty => rx_meta_fifo.rempty, rx_meta_fifo_usedr => rx_meta_fifo.rused, rx_meta_fifo_data => rx_meta_fifo.rdata ); -- Discrete control signals for fx3_gpif fx3_control.usb_speed <= '0'; fx3_control.meta_enable <= '1'; fx3_control.packet <= '0'; U_pkt_gen : entity nuand.rx_packet_generator port map( rx_clock => rx_clock, rx_reset => rx_reset, rx_enable => fx3_control.rx_enable, rx_packet_enable => fx3_control.packet, rx_packet_ready => rx_packet_ready, rx_packet_control => rx_packet_control ); meta_en_tx <= fx3_control.meta_enable; meta_en_rx <= fx3_control.meta_enable; increment_tx_ts : process(tx_clock) variable ping : boolean := true ; begin if( rising_edge(tx_clock) ) then ping := not ping ; if( ping = true ) then tx_timestamp <= tx_timestamp + 1 ; end if ; end if ; end process ; increment_rx_ts : process(rx_clock) variable ping : boolean := true ; begin if( rising_edge(rx_clock) ) then ping := not ping ; if( ping = true ) then rx_timestamp <= rx_timestamp + 1 ; end if ; end if ; end process ; -- Model of FX3's GPIF interface -- Clock domain: fx3_pclk (source) U_fx3_model : entity nuand.fx3_model(micro_dma) port map ( fx3_pclk => fx3_pclk, fx3_gpif => fx3_gpif_i, fx3_ctl => fx3_ctl_i, fx3_uart_rxd => '0', fx3_uart_txd => open, fx3_uart_cts => open, fx3_rx_en => '1', fx3_rx_meta_en => meta_en_rx, fx3_tx_en => '1', fx3_tx_meta_en => meta_en_tx, EIGHT_BIT_MODE_EN => EIGHT_BIT_MODE_EN, done => done ); -- Generate phase-shifted PLL clock U_fx3_pll : entity rtl_work.fx3_pll port map ( inclk0 => fx3_pclk, areset => pll_reset, c0 => fx3_pclk_pll, locked => pll_locked ); tx_clock <= not tx_clock after TX_HALF_PERIOD ; rx_clock <= not rx_clock after RX_HALF_PERIOD ; -- Reset handler sys_rst <= '0' after 100 ns; -- Generate system clock sys_clk <= not sys_clk after SYSCLK_HALF_PERIOD when not done else '0'; tx_reset <= sys_rst; tx_ts_reset <= sys_rst; rx_reset <= sys_rst; rx_ts_reset <= sys_rst; meta_en_tx <= fx3_control.meta_enable; meta_en_rx <= fx3_control.meta_enable; -- TX Submodule U_tx : entity work.tx generic map ( NUM_STREAMS => dac_controls'length ) port map ( tx_reset => tx_reset, tx_clock => tx_clock, tx_enable => fx3_control.tx_enable, meta_en => meta_en_tx, timestamp_reset => tx_ts_reset, usb_speed => fx3_control.usb_speed, tx_underflow_led => open, tx_timestamp => tx_timestamp, -- Triggering trigger_arm => '0', trigger_fire => '0', trigger_master => '0', trigger_line => open, -- Packet FIFO packet_en => fx3_control.packet, packet_empty => open, packet_control => tx_packet_control, packet_ready => '1', -- 8-bit mode EIGHT_BIT_MODE_EN => EIGHT_BIT_MODE_EN, -- Samples from host via FX3 sample_fifo_wclock => fx3_pclk_pll, sample_fifo_wreq => tx_sample_fifo.wreq, sample_fifo_wdata => tx_sample_fifo.wdata, sample_fifo_wempty => tx_sample_fifo.wempty, sample_fifo_wfull => tx_sample_fifo.wfull, sample_fifo_wused => tx_sample_fifo.wused, -- Metadata from host via FX3 meta_fifo_wclock => fx3_pclk_pll, meta_fifo_wreq => tx_meta_fifo.wreq, meta_fifo_wdata => tx_meta_fifo.wdata, meta_fifo_wempty => tx_meta_fifo.wempty, meta_fifo_wfull => tx_meta_fifo.wfull, meta_fifo_wused => tx_meta_fifo.wused, -- Digital Loopback Interface loopback_enabled => '0', loopback_fifo_wdata => loopback_fifo.wdata, loopback_fifo_wreq => loopback_fifo.wreq, loopback_fifo_wfull => loopback_fifo.wfull, loopback_fifo_wused => loopback_fifo.wused, -- RFFE Interface dac_controls => dac_controls, dac_streams => dac_streams ); -- RX Submodule U_rx : entity work.rx generic map ( NUM_STREAMS => adc_controls'length ) port map ( rx_reset => rx_reset, rx_clock => rx_clock, rx_enable => fx3_control.rx_enable, meta_en => meta_en_rx, timestamp_reset => rx_ts_reset, usb_speed => fx3_control.usb_speed, rx_mux_sel => to_unsigned(0, 3), rx_overflow_led => open, rx_timestamp => rx_timestamp, -- Triggering trigger_arm => '0', trigger_fire => '0', trigger_master => '0', trigger_line => open, trigger_signal_sync_tb => trigger_signal_sync_tb, -- Packet FIFO packet_en => fx3_control.packet, packet_control => rx_packet_control, packet_ready => rx_packet_ready, -- 8-bit mode EIGHT_BIT_MODE_EN => EIGHT_BIT_MODE_EN, -- Samples to host via FX3 sample_fifo_rclock => fx3_pclk_pll, sample_fifo_raclr => not fx3_control.rx_enable, sample_fifo_rreq => rx_sample_fifo.rreq, sample_fifo_rdata => rx_sample_fifo.rdata, sample_fifo_rempty => rx_sample_fifo.rempty, sample_fifo_rfull => rx_sample_fifo.rfull, sample_fifo_rused => rx_sample_fifo.rused, -- Mini expansion signals mini_exp => "00", -- Metadata to host via FX3 meta_fifo_rclock => fx3_pclk_pll, meta_fifo_raclr => not fx3_control.rx_enable, meta_fifo_rreq => rx_meta_fifo.rreq, meta_fifo_rdata => rx_meta_fifo.rdata, meta_fifo_rempty => rx_meta_fifo.rempty, meta_fifo_rfull => rx_meta_fifo.rfull, meta_fifo_rused => rx_meta_fifo.rused, -- Digital Loopback Interface loopback_fifo_wenabled => open, loopback_fifo_wreset => tx_reset, loopback_fifo_wclock => tx_clock, loopback_fifo_wdata => loopback_fifo.wdata, loopback_fifo_wreq => loopback_fifo.wreq, loopback_fifo_wfull => loopback_fifo.wfull, loopback_fifo_wused => loopback_fifo.wused, -- RFFE Interface adc_controls => adc_controls, adc_streams => adc_streams ); -- ======================================================================== -- Data converters -- ======================================================================== gen_dac_controls : if( NUM_MIMO_STREAMS > 1 ) generate -- The TX side of the AD9361 HDL is a FIFO pull interface -- that expects a readahead FIFO. It toggles the data request -- signal every other cycle. This behavior is mimicked here. process( tx_clock, sys_rst ) begin if( sys_rst = '1' ) then dac_controls <= ( 0 => (enable => ENABLE_CHANNEL_0, data_req => '1'), 1 => (enable => ENABLE_CHANNEL_1, data_req => '1') ); elsif( rising_edge(tx_clock) ) then for i in dac_controls'range loop dac_controls(i) <= ( enable => dac_controls(i).enable, data_req => not dac_controls(i).data_req ); end loop; end if; end process; else generate dac_controls <= (others => SAMPLE_CONTROL_ENABLE); end generate; gen_adc_controls : if( NUM_MIMO_STREAMS > 1 ) generate process( rx_clock, sys_rst ) constant SIGMA_DELTA_BITS : signed (3 downto 0) := "0000"; constant COUNT_RESET : integer := 0; variable count : integer range -2047 to 2047 := COUNT_RESET; begin if( sys_rst = '1' ) then count := COUNT_RESET; adc_controls <= ( 0 => (enable => ENABLE_CHANNEL_0, data_req => '1'), 1 => (enable => ENABLE_CHANNEL_1, data_req => '1') ); elsif( rising_edge(rx_clock) ) then for i in adc_controls'range loop adc_controls(i) <= ( enable => adc_controls(i).enable, data_req => not adc_controls(i).data_req ); if( adc_controls(i).enable = '1') then if( adc_streams(i).data_v = '1' ) then if( EIGHT_BIT_MODE_EN = '1' ) then adc_streams(i).data_i <= "0000" & to_signed(count, 8) & SIGMA_DELTA_BITS; adc_streams(i).data_q <= "0000" & to_signed(-count, 8) & SIGMA_DELTA_BITS; count := (count + 1) mod 128; else adc_streams(i).data_i <= to_signed(count, 16); adc_streams(i).data_q <= to_signed(-count, 16); count := (count + 1) mod 2048; end if; end if; end if; adc_streams(i).data_v <= not adc_streams(i).data_v; end loop; end if; end process; else generate adc_controls <= (others => SAMPLE_CONTROL_ENABLE); end generate; -- ======================================================================== -- Processes -- ======================================================================== -- FX3 GPIF bidirectional signal control -- Adapted from same process in bladerf-hosted.vhd register_gpif : process(sys_rst, fx3_pclk_pll) begin if( sys_rst = '1' ) then fx3_gpif_i <= (others => 'Z'); fx3_gpif.gpif_in <= (others => 'Z'); elsif( rising_edge(fx3_pclk_pll) ) then fx3_gpif.gpif_in <= fx3_gpif_i; if( fx3_gpif.gpif_oe = '1' ) then fx3_gpif_i <= fx3_gpif.gpif_out; else fx3_gpif_i <= (others =>'Z'); end if; end if; end process; -- FX3 CTL bidirectional signals -- Adapted from same generator in bladerf-hosted.vhd generate_ctl : for i in fx3_ctl_i'range generate fx3_ctl_i(i) <= fx3_gpif.ctl_out(i) when fx3_gpif.ctl_oe(i) = '1' else 'Z'; end generate; fx3_gpif.ctl_in <= fx3_ctl_i; -- Controller for loopback FIFO -- Stripped-down version of same process from rx.vhd loopback_fifo_control : process( sys_rst, loopback_fifo.rclock ) begin if( sys_rst = '1' ) then loopback_enabled <= '0'; loopback_fifo.rreq <= '0'; loopback_i <= (others => '0'); loopback_q <= (others => '0'); loopback_valid <= '0'; elsif( rising_edge(loopback_fifo.rclock) ) then loopback_enabled <= '0'; loopback_fifo.rreq <= '0'; loopback_i <= loopback_i; loopback_q <= loopback_q; loopback_valid <= '0'; -- Is loopback enabled? loopback_enabled <= fx3_control.rx_enable; -- Do the loopback loopback_i <= resize(signed(loopback_fifo.rdata(15 downto 0)), loopback_i'length); loopback_q <= resize(signed(loopback_fifo.rdata(31 downto 16)), loopback_q'length); loopback_valid <= loopback_fifo.rreq and not loopback_fifo.rempty; -- Read from the FIFO if req'd loopback_fifo.rreq <= loopback_enabled and (not loopback_fifo.rempty); end if; end process; -- RX multiplexer -- Stripped-down version of same process from rx.vhd rx_mux : process(sys_rst, sys_clk) begin if( sys_rst = '1' ) then rx_mux_i <= (others =>'0'); rx_mux_q <= (others =>'0'); rx_mux_valid <= '0'; elsif( rising_edge(sys_clk) ) then rx_mux_i <= loopback_i; rx_mux_q <= loopback_q; rx_mux_valid <= loopback_valid; end if; end process; -- TX multiplexer -- Stripped-down version of mimo_channel_sel_mux from tx.vhd --tx_mux : process( sys_clk ) --begin -- if( rising_edge(sys_clk) ) then -- tx_sample_fifo.rreq <= not tx_sample_fifo.rempty; -- loopback_fifo.wdata <= tx_sample_fifo.rdata; -- loopback_fifo.wreq <= tx_sample_fifo.rreq and not tx_sample_fifo.rempty; -- end if; --end process; -- ======================================================================== -- Verification -- ======================================================================== -- -- Check for metavalues -- We should never see metavalues written to the FIFOs -- check_fifo_write : process(fx3_pclk_pll) is begin if( rising_edge(fx3_pclk_pll) ) then if( tx_sample_fifo.wreq = '1' and fx3_control.meta_enable = '0' ) then for i in tx_sample_fifo.wdata'range loop assert tx_sample_fifo.wdata(i) = '0' or tx_sample_fifo.wdata(i) = '1' severity failure; end loop; end if; end if; end process; check_fifo_read : process(fx3_pclk_pll) is begin if( rising_edge(fx3_pclk_pll) ) then if( rx_sample_fifo.rreq = '1' ) then for i in rx_sample_fifo.rdata'range loop assert rx_sample_fifo.rdata(i) = '0' or rx_sample_fifo.rdata(i) = '1' severity failure; end loop; end if; end if; end process check_fifo_read; -- -- Check for fullness on FIFOs -- assert(rx_sample_fifo.wfull = '0') report "rx_sample_fifo full (write)" severity warning; assert(tx_sample_fifo.wfull = '0') report "tx_sample_fifo full (write)" severity warning; assert(loopback_fifo.wfull = '0') report "loopback_fifo full (write)" severity warning; -- -- Tx Sample Check -- tx_sample_start_check: process type time_state_t is ( WAIT_FOR_HEADER_TIMESTAMP, WAIT_FOR_SAMPLE ); variable state : time_state_t := WAIT_FOR_HEADER_TIMESTAMP; variable timestamp_in_header : unsigned (31 downto 0) := (others => '0'); begin case state is when WAIT_FOR_HEADER_TIMESTAMP => wait until rising_edge(dma3_tx_reqx); if( fx3_control.meta_enable = '1' ) then wait until rising_edge(fx3_pclk); wait until rising_edge(fx3_pclk); report "Timestamp: 0x" & to_hstring(fx3_gpif_i); timestamp_in_header := unsigned(fx3_gpif_i); report "Timestamp Saved: " & to_string(to_integer(timestamp_in_header)); end if; state := WAIT_FOR_SAMPLE; when WAIT_FOR_SAMPLE => while( timestamp_in_header /= tx_timestamp ) loop assert(tx_timestamp < timestamp_in_header) report "Header timestamp is in the past. Samples " & "usually ignored but considered a failure in tb." severity failure; for i in dac_controls'range loop assert(dac_streams(i).data_v = '0') report "Dac_stream("&to_string(i)&") data being transmitted before expected tx_timestamp." severity failure; end loop; wait until rising_edge(tx_clock); end loop; report "TX TIMESTAMP = META TIMESTAMP"; wait until rising_edge(tx_clock); for i in dac_controls'range loop if( dac_controls(i).enable = '1') then assert(dac_streams(i).data_v = '1') report "Dac_stream("&to_string(i)&") sample not seen at expected tx_timestamp." severity failure; end if; end loop; state := WAIT_FOR_HEADER_TIMESTAMP; end case; end process tx_sample_start_check; look_for_dropped_tx_samples : process(tx_clock) is constant MESSAGES_PER_ITERATION : natural := 3; --Provided in fx3_model constant SIGMA_DELTA_BITS : signed (3 downto 0) := "0000"; variable dac_stream_back_to_0 : natural := 0; variable current_message_count : natural := 1; variable iq_value : signed (15 downto 0) := x"0000"; variable expected_sample_i : signed (15 downto 0); variable expected_sample_q : signed (15 downto 0); variable failure_count : natural := 0; begin for i in dac_controls'range loop if( rising_edge(tx_clock) and dac_controls(i).enable = '1' and dac_streams(i).data_v = '1' and fx3_control.tx_enable = '1' ) then if( EIGHT_BIT_MODE_EN = '1' ) then expected_sample_i := iq_value (11 downto 0) & SIGMA_DELTA_BITS; expected_sample_q := iq_value (11 downto 0) + 1 & SIGMA_DELTA_BITS; assert ( dac_streams(i).data_i = expected_sample_i ) report "dac_streams("&to_string(i)&").data_i: " & to_hstring(dac_streams(i).data_i) & " | " & "expected_sample_i: " & to_hstring(expected_sample_i) severity warning; assert ( dac_streams(i).data_q = expected_sample_q ) report "dac_streams("&to_string(i)&").data_q: " & to_hstring(dac_streams(i).data_q) & " | " & "expected_sample_q: " & to_hstring(expected_sample_q) severity warning; if ( dac_streams(i).data_i /= expected_sample_i or dac_streams(i).data_q /= expected_sample_q ) then failure_count := failure_count + 1; if ( failure_count >= 6 ) then report "tx fail count tolerance exceeded" severity failure; end if; end if; dac_stream_back_to_0 := dac_stream_back_to_0 + 1 when iq_value = 0; iq_value := (iq_value + 2) mod 128 when dac_stream_back_to_0 mod 16 /= 0 else (iq_value + 2) mod 112; else expected_sample_i := iq_value; expected_sample_q := to_signed(current_message_count, 8) & (iq_value(7 downto 0) + 1); assert(dac_streams(i).data_i = expected_sample_i) report "dac_streams("&to_string(i)&").data_i: " & to_hstring(dac_streams(i).data_i) & " | " & "expected_sample_i: " & to_hstring(expected_sample_i) severity failure; assert(dac_streams(i).data_q = expected_sample_q) report "dac_streams("&to_string(i)&").data_q: " & to_hstring(dac_streams(i).data_q) & " | " & "expected_sample_q: " & to_hstring(expected_sample_q) severity failure; -- Set iq values based on blocks received -- See tx_sample_stream's encoding scheme in fx3_model.vhd if( iq_value = x"03F6" ) then iq_value := x"0000"; if( current_message_count < MESSAGES_PER_ITERATION ) then current_message_count := current_message_count + 1; else current_message_count := 1; end if; else iq_value := (iq_value + 2) mod 2048; end if; end if; end if; end loop; end process look_for_dropped_tx_samples; -- -- Rx Sample Check -- first_rx_val_at_mux: process -- Catches and saves the first sample of -- each rx enabled burst seen by the mux begin for i in adc_controls'range loop if( adc_controls(i).enable = '1') then if( ENABLE_CHANNEL_0 = '1' and ENABLE_CHANNEL_1 = '1' ) then adc_stream_val_at_rx_enable <= adc_streams(i).data_i - 1; else adc_stream_val_at_rx_enable <= adc_streams(i).data_i; end if; end if; end loop; wait until rising_edge(trigger_signal_sync_tb); end process first_rx_val_at_mux; look_for_dropped_rx_samples: process(fx3_pclk_pll) constant HEADER_LEN : integer := 4; -- In clk cycles variable header_downcount : integer := HEADER_LEN; variable rx_val : integer := 0; variable q_expected : std_logic_vector (15 downto 0); variable i_expected : std_logic_vector (15 downto 0); variable q_out : std_logic_vector (15 downto 0); variable i_out : std_logic_vector (15 downto 0); variable q0_expected_eight_bit_mode : std_logic_vector (7 downto 0); variable i0_expected_eight_bit_mode : std_logic_vector (7 downto 0); variable q1_expected_eight_bit_mode : std_logic_vector (7 downto 0); variable i1_expected_eight_bit_mode : std_logic_vector (7 downto 0); variable q0_out_eight_bit_mode : std_logic_vector (7 downto 0); variable i0_out_eight_bit_mode : std_logic_vector (7 downto 0); variable q1_out_eight_bit_mode : std_logic_vector (7 downto 0); variable i1_out_eight_bit_mode : std_logic_vector (7 downto 0); variable previous_adc_stream_val_at_rx_enable : signed (15 downto 0) := ( others => '0'); variable fail_count: natural := 0; variable both_channels_en : std_logic; begin if( previous_adc_stream_val_at_rx_enable /= adc_stream_val_at_rx_enable ) then rx_val := to_integer(adc_stream_val_at_rx_enable (15 downto 4)); previous_adc_stream_val_at_rx_enable := adc_stream_val_at_rx_enable; end if; if( rising_edge(fx3_pclk_pll) and fx3_gpif.gpif_oe = '1' and fx3_control.rx_enable = '1' ) then if( fx3_control.meta_enable = '1' and header_downcount /= 0 ) then header_downcount := header_downcount - 1; else if( EIGHT_BIT_MODE_EN = '1' ) then -- The +-1 ch1 offset in SISO mode will not reach 128 both_channels_en := ENABLE_CHANNEL_0 and ENABLE_CHANNEL_1; q1_expected_eight_bit_mode := std_logic_vector(to_signed(-rx_val - 1, 8)) when both_channels_en else std_logic_vector(to_signed(-((rx_val + 1) mod 128), 8)); i1_expected_eight_bit_mode := std_logic_vector(to_signed(rx_val + 1, 8)) when both_channels_en else std_logic_vector(to_signed((rx_val + 1) mod 128, 8)); q0_expected_eight_bit_mode := std_logic_vector(to_signed(-rx_val, 8)); i0_expected_eight_bit_mode := std_logic_vector(to_signed(rx_val, 8)); q1_out_eight_bit_mode := fx3_gpif.gpif_out(31 downto 24); i1_out_eight_bit_mode := fx3_gpif.gpif_out(23 downto 16); q0_out_eight_bit_mode := fx3_gpif.gpif_out(15 downto 8); i0_out_eight_bit_mode := fx3_gpif.gpif_out(7 downto 0); if( q1_out_eight_bit_mode /= q1_expected_eight_bit_mode or i1_out_eight_bit_mode /= i1_expected_eight_bit_mode or q0_out_eight_bit_mode /= q0_expected_eight_bit_mode or i0_out_eight_bit_mode /= i0_expected_eight_bit_mode) then fail_count := fail_count + 1; report "-----------------------------"; if( fail_count > 3 ) then report "rx fail count tolerance exceeded" severity failure; end if; end if; assert ( q1_out_eight_bit_mode = q1_expected_eight_bit_mode ) report "data_q1: " & to_hstring(q1_out_eight_bit_mode) & " | " & "expected: " & to_hstring(q1_expected_eight_bit_mode) severity warning; assert ( i1_out_eight_bit_mode = i1_expected_eight_bit_mode ) report "data_i1: " & to_hstring(i1_out_eight_bit_mode) & " | " & "expected: " & to_hstring(i1_expected_eight_bit_mode) severity warning; assert ( q0_out_eight_bit_mode = q0_expected_eight_bit_mode ) report "data_q0: " & to_hstring(q0_out_eight_bit_mode) & " | " & "expected: " & to_hstring(q0_expected_eight_bit_mode) severity warning; assert ( i0_out_eight_bit_mode = i0_expected_eight_bit_mode ) report "data_i0: " & to_hstring(i0_out_eight_bit_mode) & " | " & "expected: " & to_hstring(i0_expected_eight_bit_mode) severity warning; -- 128 limit set by gen_adc_controls above rx_val := (rx_val + 2) mod 128; else q_expected := std_logic_vector(to_signed(-rx_val, 16)); i_expected := std_logic_vector(to_signed(rx_val, 16)); q_out := fx3_gpif.gpif_out(31 downto 16); i_out := fx3_gpif.gpif_out(15 downto 0); assert(q_out = q_expected) report "data_q: " & to_hstring(q_out) & " | " & "expected: " & to_hstring(q_expected) severity failure; assert(i_out = i_expected) report "data_i: " & to_hstring(i_out) & " | " & "expected: " & to_hstring(i_expected) severity failure; -- 2047 limit set by gen_adc_controls above rx_val := (rx_val + 1) mod 2048; end if; end if; header_downcount := HEADER_LEN; end if; end process look_for_dropped_rx_samples; meta_spacing: process procedure wait_for_gpif_ts( signal clk: in std_logic; signal en: in std_logic ) is begin wait until rising_edge(en); wait until rising_edge(clk); wait until rising_edge(clk); end; variable ts_increment : integer := 0; variable last_ts : unsigned (31 downto 0) := 32x"BB"; -- First timestamp variable iteration : natural := 1; begin wait_for_gpif_ts(fx3_pclk, fx3_gpif.gpif_oe); assert fx3_gpif.gpif_out = std_logic_vector(last_ts + ts_increment) report LF& "Unexpected ts: " & to_hstring(fx3_gpif.gpif_out) &LF& "Expected ts: " & to_hstring(last_ts + ts_increment) severity failure; last_ts := unsigned(fx3_gpif.gpif_out); -- Allows a 0 increment for the first ts assertion if( ENABLE_CHANNEL_0 = '1' and ENABLE_CHANNEL_1 = '1') then ts_increment := 254 when EIGHT_BIT_MODE_EN = '0' else 508; else ts_increment := 508 when EIGHT_BIT_MODE_EN = '0' else 1016; end if; iteration := iteration + 1; if (iteration > 3) then wait_for_gpif_ts(fx3_pclk, fx3_gpif.gpif_oe); last_ts := unsigned(fx3_gpif.gpif_out); iteration := 2; end if; end process meta_spacing; end architecture; bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/vhdl/tb/fx3_gpif_meta_tb.vhd000066400000000000000000000775631457144405000266610ustar00rootroot00000000000000-- Copyright (c) 2022 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; library rtl_work; library altera_lnsim; use altera_lnsim.altera_pll; library nuand; use nuand.util.all ; use nuand.fifo_readwrite_p.all; use nuand.common_dcfifo_p.all; use nuand.bladerf_p.all; entity fx3_gpif_meta_tb is generic ( -- For bladeRF2 (2x2 MIMO): NUM_MIMO_STREAMS : natural := 2; FIFO_READER_READ_THROTTLE : natural := 0; ENABLE_CHANNEL_0 : std_logic := '1'; ENABLE_CHANNEL_1 : std_logic := '0' ); end entity; architecture arch of fx3_gpif_meta_tb is -- bladerf-hosted uses ad9361.clock (125 MHz) for rx_clock and tx_clock constant SYSCLK_HALF_PERIOD : time := 1 sec * (1.0/125.0e6/2.0); -- For reasons unknown, simulation of this system in ModelSim requires that -- wrreq and data be asserted shortly before the rising clock edge. Sigh... constant FIFO_WORKAROUND : time := 1 ps; type fx3_control_t is record usb_speed : std_logic; tx_enable : std_logic; rx_enable : std_logic; meta_enable : std_logic; packet : std_logic; end record; type fx3_gpif_t is record gpif_in : std_logic_vector(31 downto 0); gpif_out : std_logic_vector(31 downto 0); gpif_oe : std_logic; ctl_in : std_logic_vector(12 downto 0); ctl_out : std_logic_vector(12 downto 0); ctl_oe : std_logic_vector(12 downto 0); end record; signal sys_rst : std_logic := '1'; signal done : boolean := false; signal fx3_pclk : std_logic := '1'; signal fx3_pclk_pll : std_logic := '1'; signal sys_clk : std_logic := '1'; signal pll_reset : std_logic := '0'; signal pll_locked : std_logic := '0'; signal fx3_control : fx3_control_t; signal fx3_gpif : fx3_gpif_t; signal fx3_gpif_i : std_logic_vector(31 downto 0); signal fx3_ctl_i : std_logic_vector(12 downto 0); -- Control mapping alias dma0_rx_ack is fx3_ctl_i( 0); alias dma1_rx_ack is fx3_ctl_i( 1); alias dma2_tx_ack is fx3_ctl_i( 2); alias dma3_tx_ack is fx3_ctl_i( 3); alias dma_rx_enable is fx3_ctl_i( 4); alias dma_tx_enable is fx3_ctl_i( 5); alias dma_idle is fx3_ctl_i( 6); alias system_reset is fx3_ctl_i( 7); alias dma0_rx_reqx is fx3_ctl_i( 8); alias dma1_rx_reqx is fx3_ctl_i(12); -- due to 9 being connected to dclk alias dma2_tx_reqx is fx3_ctl_i(10); alias dma3_tx_reqx is fx3_ctl_i(11); signal loopback_i : signed(15 downto 0) := (others =>'0'); signal loopback_q : signed(15 downto 0) := (others =>'0'); signal loopback_valid : std_logic := '0'; signal loopback_enabled : std_logic := '0'; signal tx_clock : std_logic := '1' ; signal rx_clock : std_logic := '1' ; signal rx_sample_fifo : rx_fifo_t := RX_FIFO_T_DEFAULT; signal tx_sample_fifo : tx_fifo_t := TX_FIFO_T_DEFAULT; signal loopback_fifo : loopback_fifo_t := LOOPBACK_FIFO_T_DEFAULT; signal rx_meta_fifo : meta_fifo_rx_t := META_FIFO_RX_T_DEFAULT; signal tx_meta_fifo : meta_fifo_tx_t := META_FIFO_TX_T_DEFAULT; signal rx_mux_i : signed(15 downto 0); signal rx_mux_q : signed(15 downto 0); signal rx_mux_valid : std_logic; signal tx_timestamp : unsigned(63 downto 0) := ( others => '0' ); signal rx_timestamp : unsigned(63 downto 0) := ( others => '0' ); constant FX3_HALF_PERIOD : time := 1.0/(100.0e6)/2.0*1 sec ; constant TX_HALF_PERIOD : time := 1.0/(9.0e6)/2.0*1 sec ; constant RX_HALF_PERIOD : time := 1.0/(9.0e6)/2.0*1 sec ; signal dac_controls : sample_controls_t(0 to NUM_MIMO_STREAMS-1) := (others => SAMPLE_CONTROL_DISABLE); signal dac_streams : sample_streams_t(dac_controls'range) := (others => ZERO_SAMPLE); signal adc_controls : sample_controls_t(0 to NUM_MIMO_STREAMS-1) := (others => SAMPLE_CONTROL_DISABLE); signal adc_streams : sample_streams_t(adc_controls'range) := (others => ZERO_SAMPLE); signal tx_reset : std_logic := '0'; signal tx_ts_reset : std_logic := '0'; signal rx_reset : std_logic := '0'; signal rx_ts_reset : std_logic := '0'; signal meta_en_tx : std_logic := '0'; signal meta_en_rx : std_logic := '0'; signal rx_packet_control : packet_control_t := PACKET_CONTROL_DEFAULT; signal tx_packet_control : packet_control_t; signal trigger_signal_sync_tb : std_logic; signal adc_stream_val_at_rx_enable : signed(15 downto 0) := ( others => '0' ); function data_gen (count : natural) return std_logic_vector is variable msw, lsw : std_logic_vector(15 downto 0); begin msw := std_logic_vector(to_signed(count, 16)); lsw := std_logic_vector(to_signed(-count, 16)); return (msw & lsw); end function data_gen; signal rx_packet_ready : std_logic; begin -- ======================================================================== -- Brief summary of data flow -- ======================================================================== -- -- Simulated samples flow from fx3_model's TX side to its RX side. The -- validity of the data is checked there. -- -- entity U_fx3_model FX3 model, TX process -- signal fx3_gpif_i fx3_gpif.gpif_oe is '0' -- process register_gpif -- signal fx3_gpif.gpif_in Demuxed GPIF interface (FX3 -> FPGA) -- entity U_fx3_gpif GPIF implementation, write side -- signal tx_sample_fifo.w* TX fifo, write side -- entity U_tx_sample_fifo -- signal tx_sample_fifo.r* TX fifo, read side -- process tx_mux -- signal loopback_fifo.w* Loopback fifo, write side -- entity U_rx_loopback_fifo -- signal loopback_fifo.r* Loopback fifo, read side -- process loopback_fifo_control -- signal loopback_{i,q,valid} -- process rx_mux -- signal rx_mux_{i,q,valid} -- entity U_fifo_writer -- signal rx_sample_fifo.w* RX fifo, write side -- entity U_rx_sample_fifo -- signal rx_sample_fifo.r* RX fifo, read side -- entity U_fx3_gpif GPIF implementation, read side -- signal fx3_gpif.gpif_out Demuxed GPIF interface (FPGA -> FX3) -- process register_gpif -- signal fx3_gpif_i fx3_gpif.gpif_oe is '1' -- entity U_fx3_model FX3 model, RX process -- ======================================================================== -- Instantiations -- ======================================================================== -- Unit under test -- Clock domain: fx3_pclk_pll U_fx3_gpif : entity nuand.fx3_gpif port map ( pclk => fx3_pclk_pll, reset => sys_rst, usb_speed => fx3_control.usb_speed, gpif_in => fx3_gpif.gpif_in, gpif_out => fx3_gpif.gpif_out, gpif_oe => fx3_gpif.gpif_oe, ctl_in => fx3_gpif.ctl_in, ctl_out => fx3_gpif.ctl_out, ctl_oe => fx3_gpif.ctl_oe, tx_enable => fx3_control.tx_enable, rx_enable => fx3_control.rx_enable, meta_enable => fx3_control.meta_enable, packet_enable => fx3_control.packet, tx_fifo_write => tx_sample_fifo.wreq, tx_fifo_full => tx_sample_fifo.wfull, tx_fifo_empty => tx_sample_fifo.wempty, tx_fifo_usedw => tx_sample_fifo.wused, tx_fifo_data => tx_sample_fifo.wdata, tx_timestamp => tx_timestamp, tx_meta_fifo_write => tx_meta_fifo.wreq, tx_meta_fifo_full => tx_meta_fifo.wfull, tx_meta_fifo_empty => tx_meta_fifo.wempty, tx_meta_fifo_usedw => tx_meta_fifo.wused, tx_meta_fifo_data => tx_meta_fifo.wdata, rx_fifo_read => rx_sample_fifo.rreq, rx_fifo_full => rx_sample_fifo.rfull, rx_fifo_empty => rx_sample_fifo.rempty, rx_fifo_usedw => rx_sample_fifo.rused, rx_fifo_data => rx_sample_fifo.rdata, rx_meta_fifo_read => rx_meta_fifo.rreq, rx_meta_fifo_full => rx_meta_fifo.rfull, rx_meta_fifo_empty => rx_meta_fifo.rempty, rx_meta_fifo_usedr => rx_meta_fifo.rused, rx_meta_fifo_data => rx_meta_fifo.rdata ); -- Discrete control signals for fx3_gpif fx3_control.usb_speed <= '0'; fx3_control.meta_enable <= '1'; fx3_control.packet <= '0'; U_pkt_gen : entity nuand.rx_packet_generator port map( rx_clock => rx_clock, rx_reset => rx_reset, rx_enable => fx3_control.rx_enable, rx_packet_enable => fx3_control.packet, rx_packet_ready => rx_packet_ready, rx_packet_control => rx_packet_control ); meta_en_tx <= fx3_control.meta_enable; meta_en_rx <= fx3_control.meta_enable; increment_tx_ts : process(tx_clock) variable ping : boolean := true ; begin if( rising_edge(tx_clock) ) then ping := not ping ; if( ping = true ) then tx_timestamp <= tx_timestamp + 1 ; end if ; end if ; end process ; increment_rx_ts : process(rx_clock) variable ping : boolean := true ; begin if( rising_edge(rx_clock) ) then ping := not ping ; if( ping = true ) then rx_timestamp <= rx_timestamp + 1 ; end if ; end if ; end process ; -- Model of FX3's GPIF interface -- Clock domain: fx3_pclk (source) U_fx3_model : entity nuand.fx3_model(micro_dma) port map ( fx3_pclk => fx3_pclk, fx3_gpif => fx3_gpif_i, fx3_ctl => fx3_ctl_i, fx3_uart_rxd => '0', fx3_uart_txd => open, fx3_uart_cts => open, fx3_rx_en => '1', fx3_rx_meta_en => meta_en_rx, fx3_tx_en => '1', fx3_tx_meta_en => meta_en_tx, done => done ); -- Generate phase-shifted PLL clock U_fx3_pll : entity rtl_work.fx3_pll port map ( inclk0 => fx3_pclk, areset => pll_reset, c0 => fx3_pclk_pll, locked => pll_locked ); tx_clock <= not tx_clock after TX_HALF_PERIOD ; rx_clock <= not rx_clock after RX_HALF_PERIOD ; -- Reset handler sys_rst <= '0' after 100 ns; -- Generate system clock sys_clk <= not sys_clk after SYSCLK_HALF_PERIOD when not done else '0'; tx_reset <= sys_rst; tx_ts_reset <= sys_rst; rx_reset <= sys_rst; rx_ts_reset <= sys_rst; meta_en_tx <= fx3_control.meta_enable; meta_en_rx <= fx3_control.meta_enable; -- TX Submodule U_tx : entity work.tx generic map ( NUM_STREAMS => dac_controls'length ) port map ( tx_reset => tx_reset, tx_clock => tx_clock, tx_enable => fx3_control.tx_enable, meta_en => meta_en_tx, timestamp_reset => tx_ts_reset, usb_speed => fx3_control.usb_speed, tx_underflow_led => open, tx_timestamp => tx_timestamp, -- Triggering trigger_arm => '0', trigger_fire => '0', trigger_master => '0', trigger_line => open, -- Packet FIFO packet_en => fx3_control.packet, packet_empty => open, packet_control => tx_packet_control, packet_ready => '1', -- Samples from host via FX3 sample_fifo_wclock => fx3_pclk_pll, sample_fifo_wreq => tx_sample_fifo.wreq, sample_fifo_wdata => tx_sample_fifo.wdata, sample_fifo_wempty => tx_sample_fifo.wempty, sample_fifo_wfull => tx_sample_fifo.wfull, sample_fifo_wused => tx_sample_fifo.wused, -- Metadata from host via FX3 meta_fifo_wclock => fx3_pclk_pll, meta_fifo_wreq => tx_meta_fifo.wreq, meta_fifo_wdata => tx_meta_fifo.wdata, meta_fifo_wempty => tx_meta_fifo.wempty, meta_fifo_wfull => tx_meta_fifo.wfull, meta_fifo_wused => tx_meta_fifo.wused, -- Digital Loopback Interface loopback_enabled => '0', loopback_fifo_wdata => loopback_fifo.wdata, loopback_fifo_wreq => loopback_fifo.wreq, loopback_fifo_wfull => loopback_fifo.wfull, loopback_fifo_wused => loopback_fifo.wused, -- RFFE Interface dac_controls => dac_controls, dac_streams => dac_streams ); -- RX Submodule U_rx : entity work.rx generic map ( NUM_STREAMS => adc_controls'length ) port map ( rx_reset => rx_reset, rx_clock => rx_clock, rx_enable => fx3_control.rx_enable, meta_en => meta_en_rx, timestamp_reset => rx_ts_reset, usb_speed => fx3_control.usb_speed, rx_mux_sel => to_unsigned(0, 3), rx_overflow_led => open, rx_timestamp => rx_timestamp, -- Triggering trigger_arm => '0', trigger_fire => '0', trigger_master => '0', trigger_line => open, trigger_signal_sync_tb => trigger_signal_sync_tb, -- Packet FIFO packet_en => fx3_control.packet, packet_control => rx_packet_control, packet_ready => rx_packet_ready, -- Samples to host via FX3 sample_fifo_rclock => fx3_pclk_pll, sample_fifo_raclr => not fx3_control.rx_enable, sample_fifo_rreq => rx_sample_fifo.rreq, sample_fifo_rdata => rx_sample_fifo.rdata, sample_fifo_rempty => rx_sample_fifo.rempty, sample_fifo_rfull => rx_sample_fifo.rfull, sample_fifo_rused => rx_sample_fifo.rused, -- Mini expansion signals mini_exp => "00", -- Metadata to host via FX3 meta_fifo_rclock => fx3_pclk_pll, meta_fifo_raclr => not fx3_control.rx_enable, meta_fifo_rreq => rx_meta_fifo.rreq, meta_fifo_rdata => rx_meta_fifo.rdata, meta_fifo_rempty => rx_meta_fifo.rempty, meta_fifo_rfull => rx_meta_fifo.rfull, meta_fifo_rused => rx_meta_fifo.rused, -- Digital Loopback Interface loopback_fifo_wenabled => open, loopback_fifo_wreset => tx_reset, loopback_fifo_wclock => tx_clock, loopback_fifo_wdata => loopback_fifo.wdata, loopback_fifo_wreq => loopback_fifo.wreq, loopback_fifo_wfull => loopback_fifo.wfull, loopback_fifo_wused => loopback_fifo.wused, -- RFFE Interface adc_controls => adc_controls, adc_streams => adc_streams ); -- ======================================================================== -- Data converters -- ======================================================================== gen_dac_controls : if( NUM_MIMO_STREAMS > 1 ) generate -- The TX side of the AD9361 HDL is a FIFO pull interface -- that expects a readahead FIFO. It toggles the data request -- signal every other cycle. This behavior is mimicked here. process( tx_clock, sys_rst ) begin if( sys_rst = '1' ) then dac_controls <= ( 0 => (enable => ENABLE_CHANNEL_0, data_req => '1'), 1 => (enable => ENABLE_CHANNEL_1, data_req => '1') ); elsif( rising_edge(tx_clock) ) then for i in dac_controls'range loop dac_controls(i) <= ( enable => dac_controls(i).enable, data_req => not dac_controls(i).data_req ); end loop; end if; end process; else generate dac_controls <= (others => SAMPLE_CONTROL_ENABLE); end generate; gen_adc_controls : if( NUM_MIMO_STREAMS > 1 ) generate process( rx_clock, sys_rst ) constant COUNT_RESET : integer := 0; variable count : integer range -2047 to 2047 := COUNT_RESET; begin if( sys_rst = '1' ) then count := COUNT_RESET; adc_controls <= ( 0 => (enable => ENABLE_CHANNEL_0, data_req => '1'), 1 => (enable => ENABLE_CHANNEL_1, data_req => '1') ); elsif( rising_edge(rx_clock) ) then for i in adc_controls'range loop adc_controls(i) <= ( enable => adc_controls(i).enable, data_req => not adc_controls(i).data_req ); if( adc_controls(i).enable = '1') then if( adc_streams(i).data_v = '1' ) then adc_streams(i).data_i <= to_signed(count, 16); adc_streams(i).data_q <= to_signed(-count, 16); if( count < 2047 ) then count := count + 1; else count := COUNT_RESET; end if; end if; adc_streams(i).data_v <= not adc_streams(i).data_v; end if; end loop; end if; end process; else generate adc_controls <= (others => SAMPLE_CONTROL_ENABLE); end generate; -- ======================================================================== -- Processes -- ======================================================================== -- FX3 GPIF bidirectional signal control -- Adapted from same process in bladerf-hosted.vhd register_gpif : process(sys_rst, fx3_pclk_pll) begin if( sys_rst = '1' ) then fx3_gpif_i <= (others => 'Z'); fx3_gpif.gpif_in <= (others => 'Z'); elsif( rising_edge(fx3_pclk_pll) ) then fx3_gpif.gpif_in <= fx3_gpif_i; if( fx3_gpif.gpif_oe = '1' ) then fx3_gpif_i <= fx3_gpif.gpif_out; else fx3_gpif_i <= (others =>'Z'); end if; end if; end process; -- FX3 CTL bidirectional signals -- Adapted from same generator in bladerf-hosted.vhd generate_ctl : for i in fx3_ctl_i'range generate fx3_ctl_i(i) <= fx3_gpif.ctl_out(i) when fx3_gpif.ctl_oe(i) = '1' else 'Z'; end generate; fx3_gpif.ctl_in <= fx3_ctl_i; -- Controller for loopback FIFO -- Stripped-down version of same process from rx.vhd loopback_fifo_control : process( sys_rst, loopback_fifo.rclock ) begin if( sys_rst = '1' ) then loopback_enabled <= '0'; loopback_fifo.rreq <= '0'; loopback_i <= (others => '0'); loopback_q <= (others => '0'); loopback_valid <= '0'; elsif( rising_edge(loopback_fifo.rclock) ) then loopback_enabled <= '0'; loopback_fifo.rreq <= '0'; loopback_i <= loopback_i; loopback_q <= loopback_q; loopback_valid <= '0'; -- Is loopback enabled? loopback_enabled <= fx3_control.rx_enable; -- Do the loopback loopback_i <= resize(signed(loopback_fifo.rdata(15 downto 0)), loopback_i'length); loopback_q <= resize(signed(loopback_fifo.rdata(31 downto 16)), loopback_q'length); loopback_valid <= loopback_fifo.rreq and not loopback_fifo.rempty; -- Read from the FIFO if req'd loopback_fifo.rreq <= loopback_enabled and (not loopback_fifo.rempty); end if; end process; -- RX multiplexer -- Stripped-down version of same process from rx.vhd rx_mux : process(sys_rst, sys_clk) begin if( sys_rst = '1' ) then rx_mux_i <= (others =>'0'); rx_mux_q <= (others =>'0'); rx_mux_valid <= '0'; elsif( rising_edge(sys_clk) ) then rx_mux_i <= loopback_i; rx_mux_q <= loopback_q; rx_mux_valid <= loopback_valid; end if; end process; -- TX multiplexer -- Stripped-down version of mimo_channel_sel_mux from tx.vhd --tx_mux : process( sys_clk ) --begin -- if( rising_edge(sys_clk) ) then -- tx_sample_fifo.rreq <= not tx_sample_fifo.rempty; -- loopback_fifo.wdata <= tx_sample_fifo.rdata; -- loopback_fifo.wreq <= tx_sample_fifo.rreq and not tx_sample_fifo.rempty; -- end if; --end process; -- ======================================================================== -- Verification -- ======================================================================== -- -- Check for metavalues -- We should never see metavalues written to the FIFOs -- check_fifo_write : process(fx3_pclk_pll) is begin if( rising_edge(fx3_pclk_pll) ) then if( tx_sample_fifo.wreq = '1' and fx3_control.meta_enable = '0' ) then for i in tx_sample_fifo.wdata'range loop assert tx_sample_fifo.wdata(i) = '0' or tx_sample_fifo.wdata(i) = '1' severity failure; end loop; end if; end if; end process; check_fifo_read : process(fx3_pclk_pll) is begin if( rising_edge(fx3_pclk_pll) ) then if( rx_sample_fifo.rreq = '1' ) then for i in rx_sample_fifo.rdata'range loop assert rx_sample_fifo.rdata(i) = '0' or rx_sample_fifo.rdata(i) = '1' severity failure; end loop; end if; end if; end process check_fifo_read; -- -- Check for fullness on FIFOs -- assert(rx_sample_fifo.wfull = '0') report "rx_sample_fifo full (write)" severity warning; assert(tx_sample_fifo.wfull = '0') report "tx_sample_fifo full (write)" severity warning; assert(loopback_fifo.wfull = '0') report "loopback_fifo full (write)" severity warning; -- -- Tx Sample Check -- tx_sample_start_check: process type time_state_t is ( WAIT_FOR_HEADER_TIMESTAMP, WAIT_FOR_SAMPLE ); variable state : time_state_t := WAIT_FOR_HEADER_TIMESTAMP; variable timestamp_in_header : unsigned (31 downto 0) := (others => '0'); begin case state is when WAIT_FOR_HEADER_TIMESTAMP => wait until rising_edge(dma3_tx_reqx); if( fx3_control.meta_enable = '1' ) then wait until rising_edge(fx3_pclk); wait until rising_edge(fx3_pclk); report "Timestamp: 0x" & to_hstring(fx3_gpif_i); timestamp_in_header := unsigned(fx3_gpif_i); report "Timestamp Saved: " & to_string(to_integer(timestamp_in_header)); end if; state := WAIT_FOR_SAMPLE; when WAIT_FOR_SAMPLE => while( timestamp_in_header /= tx_timestamp ) loop assert(tx_timestamp < timestamp_in_header) report "Header timestamp is in the past. Samples " & "usually ignored but considered a failure in tb." severity failure; for i in dac_controls'range loop assert(dac_streams(i).data_v = '0') report "Dac_stream("&to_string(i)&") data being transmitted before expected tx_timestamp." severity failure; end loop; wait until rising_edge(tx_clock); end loop; report "TX TIMESTAMP = META TIMESTAMP"; wait until rising_edge(tx_clock); for i in dac_controls'range loop if( dac_controls(i).enable = '1') then assert(dac_streams(i).data_v = '1') report "Dac_stream("&to_string(i)&") sample not seen at expected tx_timestamp." severity failure; end if; end loop; state := WAIT_FOR_HEADER_TIMESTAMP; end case; end process tx_sample_start_check; look_for_dropped_tx_samples : process(tx_clock) is constant MESSAGES_PER_ITERATION : natural := 3; --Provided in fx3_model variable current_message_count : natural := 1; variable iq_value : signed (15 downto 0) := x"0000"; variable expected_sample_q : signed (15 downto 0); variable expected_sample_i : signed (15 downto 0); begin for i in dac_controls'range loop if( rising_edge(tx_clock) and dac_controls(i).enable = '1' and dac_streams(i).data_v = '1' and fx3_control.tx_enable = '1' ) then expected_sample_i := iq_value; expected_sample_q := to_signed(current_message_count, 8) & (iq_value(7 downto 0) + 1); assert(dac_streams(i).data_i = expected_sample_i) report "dac_streams("&to_string(i)&").data_i: " & to_hstring(dac_streams(i).data_i) & " | " & "expected_sample_i: " & to_hstring(expected_sample_i) severity failure; assert(dac_streams(i).data_q = expected_sample_q) report "dac_streams("&to_string(i)&").data_q: " & to_hstring(dac_streams(i).data_q) & " | " & "expected_sample_q: " & to_hstring(expected_sample_q) severity failure; -- Set iq values based on blocks received -- See tx_sample_stream's encoding scheme in fx3_model.vhd if( iq_value = x"03F6" ) then iq_value := x"0000"; if( current_message_count < MESSAGES_PER_ITERATION ) then current_message_count := current_message_count + 1; else current_message_count := 1; end if; else iq_value := (iq_value + 2) mod 2048; end if; end if; end loop; end process look_for_dropped_tx_samples; -- -- Rx Sample Check -- first_rx_val_at_mux: process -- Catches and saves the first sample of -- each rx enabled burst seen by the mux begin for i in adc_controls'range loop if( adc_controls(i).enable = '1') then if( ENABLE_CHANNEL_0 = '1' and ENABLE_CHANNEL_1 = '1' ) then adc_stream_val_at_rx_enable <= adc_streams(i).data_i - 1; else adc_stream_val_at_rx_enable <= adc_streams(i).data_i; end if; end if; end loop; wait until rising_edge(trigger_signal_sync_tb); end process first_rx_val_at_mux; look_for_dropped_rx_samples: process(fx3_pclk_pll) constant HEADER_LEN : integer := 4; -- In clk cycles variable header_downcount : integer := HEADER_LEN; variable rx_val : integer := 0; variable q_expected : std_logic_vector (15 downto 0); variable i_expected : std_logic_vector (15 downto 0); variable q_out : std_logic_vector (15 downto 0); variable i_out : std_logic_vector (15 downto 0); variable prev_adc_stream_val_at_rx_enable : signed (15 downto 0) := ( others => '0'); begin if( prev_adc_stream_val_at_rx_enable /= adc_stream_val_at_rx_enable ) then rx_val := to_integer(adc_stream_val_at_rx_enable + 2); prev_adc_stream_val_at_rx_enable := adc_stream_val_at_rx_enable; end if; if( rising_edge(fx3_pclk_pll) and fx3_gpif.gpif_oe = '1' and fx3_control.rx_enable = '1' ) then q_expected := std_logic_vector(to_signed(-rx_val, 16)); i_expected := std_logic_vector(to_signed(rx_val, 16)); q_out := fx3_gpif.gpif_out(31 downto 16); i_out := fx3_gpif.gpif_out(15 downto 0); if( fx3_control.meta_enable = '1' and header_downcount /= 0 ) then header_downcount := header_downcount - 1; else assert(q_out = q_expected) report "data_q: " & to_hstring(q_out) & " | " & "expected: " & to_hstring(q_expected) severity failure; assert(i_out = i_expected) report "data_i: " & to_hstring(i_out) & " | " & "expected: " & to_hstring(i_expected) severity failure; -- 2047 limit set by gen_adc_controls above if( rx_val < 2047 ) then rx_val := rx_val + 1; else rx_val := 0; end if; end if; header_downcount := HEADER_LEN; end if; end process look_for_dropped_rx_samples; end architecture; bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/vhdl/tb/fx3_gpif_packet_tb.vhd000066400000000000000000000761501457144405000271710ustar00rootroot00000000000000-- Copyright (c) 2022 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; library rtl_work; library altera_lnsim; use altera_lnsim.altera_pll; library nuand; use nuand.util.all ; use nuand.fifo_readwrite_p.all; use nuand.common_dcfifo_p.all; use nuand.bladerf_p.all; entity fx3_gpif_packet_tb is generic ( -- For bladeRF2 (2x2 MIMO): NUM_MIMO_STREAMS : natural := 2; FIFO_READER_READ_THROTTLE : natural := 0; ENABLE_CHANNEL_0 : std_logic := '1'; ENABLE_CHANNEL_1 : std_logic := '0' ); end entity; architecture arch of fx3_gpif_packet_tb is -- bladerf-hosted uses ad9361.clock (125 MHz) for rx_clock and tx_clock constant SYSCLK_HALF_PERIOD : time := 1 sec * (1.0/125.0e6/2.0); -- For reasons unknown, simulation of this system in ModelSim requires that -- wrreq and data be asserted shortly before the rising clock edge. Sigh... constant FIFO_WORKAROUND : time := 1 ps; type fx3_control_t is record usb_speed : std_logic; tx_enable : std_logic; rx_enable : std_logic; meta_enable : std_logic; packet : std_logic; end record; type fx3_gpif_t is record gpif_in : std_logic_vector(31 downto 0); gpif_out : std_logic_vector(31 downto 0); gpif_oe : std_logic; ctl_in : std_logic_vector(12 downto 0); ctl_out : std_logic_vector(12 downto 0); ctl_oe : std_logic_vector(12 downto 0); end record; signal sys_rst : std_logic := '1'; signal done : boolean := false; signal fx3_pclk : std_logic := '1'; signal fx3_pclk_pll : std_logic := '1'; signal sys_clk : std_logic := '1'; signal pll_reset : std_logic := '0'; signal pll_locked : std_logic := '0'; signal fx3_control : fx3_control_t; signal fx3_gpif : fx3_gpif_t; signal fx3_gpif_i : std_logic_vector(31 downto 0); signal fx3_ctl_i : std_logic_vector(12 downto 0); -- Control mapping alias dma0_rx_ack is fx3_ctl_i( 0); alias dma1_rx_ack is fx3_ctl_i( 1); alias dma2_tx_ack is fx3_ctl_i( 2); alias dma3_tx_ack is fx3_ctl_i( 3); alias dma_rx_enable is fx3_ctl_i( 4); alias dma_tx_enable is fx3_ctl_i( 5); alias dma_idle is fx3_ctl_i( 6); alias system_reset is fx3_ctl_i( 7); alias dma0_rx_reqx is fx3_ctl_i( 8); alias dma1_rx_reqx is fx3_ctl_i(12); -- due to 9 being connected to dclk alias dma2_tx_reqx is fx3_ctl_i(10); alias dma3_tx_reqx is fx3_ctl_i(11); signal loopback_i : signed(15 downto 0) := (others =>'0'); signal loopback_q : signed(15 downto 0) := (others =>'0'); signal loopback_valid : std_logic := '0'; signal loopback_enabled : std_logic := '0'; signal tx_clock : std_logic := '1' ; signal rx_clock : std_logic := '1' ; signal rx_sample_fifo : rx_fifo_t := RX_FIFO_T_DEFAULT; signal tx_sample_fifo : tx_fifo_t := TX_FIFO_T_DEFAULT; signal loopback_fifo : loopback_fifo_t := LOOPBACK_FIFO_T_DEFAULT; signal rx_meta_fifo : meta_fifo_rx_t := META_FIFO_RX_T_DEFAULT; signal tx_meta_fifo : meta_fifo_tx_t := META_FIFO_TX_T_DEFAULT; signal rx_mux_i : signed(15 downto 0); signal rx_mux_q : signed(15 downto 0); signal rx_mux_valid : std_logic; signal tx_timestamp : unsigned(63 downto 0) := ( others => '0' ); signal rx_timestamp : unsigned(63 downto 0) := ( others => '0' ); constant FX3_HALF_PERIOD : time := 1.0/(100.0e6)/2.0*1 sec ; constant TX_HALF_PERIOD : time := 1.0/(9.0e6)/2.0*1 sec ; constant RX_HALF_PERIOD : time := 1.0/(9.0e6)/2.0*1 sec ; signal dac_controls : sample_controls_t(0 to NUM_MIMO_STREAMS-1) := (others => SAMPLE_CONTROL_DISABLE); signal dac_streams : sample_streams_t(dac_controls'range) := (others => ZERO_SAMPLE); signal adc_controls : sample_controls_t(0 to NUM_MIMO_STREAMS-1) := (others => SAMPLE_CONTROL_DISABLE); signal adc_streams : sample_streams_t(adc_controls'range) := (others => ZERO_SAMPLE); signal tx_reset : std_logic := '0'; signal tx_ts_reset : std_logic := '0'; signal rx_reset : std_logic := '0'; signal rx_ts_reset : std_logic := '0'; signal meta_en_tx : std_logic := '0'; signal meta_en_rx : std_logic := '0'; signal rx_packet_control : packet_control_t := PACKET_CONTROL_DEFAULT; signal tx_packet_control : packet_control_t; signal tx_packet_len : signed(7 downto 0); signal rx_packet_len : signed(7 downto 0); signal trigger_signal_sync_tb : std_logic; signal adc_stream_val_at_rx_enable : signed(15 downto 0) := ( others => '0' ); function data_gen (count : natural) return std_logic_vector is variable msw, lsw : std_logic_vector(15 downto 0); begin msw := std_logic_vector(to_signed(count, 16)); lsw := std_logic_vector(to_signed(-count, 16)); return (msw & lsw); end function data_gen; signal rx_packet_ready : std_logic; begin -- ======================================================================== -- Brief summary of data flow -- ======================================================================== -- -- Simulated samples flow from fx3_model's TX side to its RX side. The -- validity of the data is checked there. -- -- entity U_fx3_model FX3 model, TX process -- signal fx3_gpif_i fx3_gpif.gpif_oe is '0' -- process register_gpif -- signal fx3_gpif.gpif_in Demuxed GPIF interface (FX3 -> FPGA) -- entity U_fx3_gpif GPIF implementation, write side -- signal tx_sample_fifo.w* TX fifo, write side -- entity U_tx_sample_fifo -- signal tx_sample_fifo.r* TX fifo, read side -- process tx_mux -- signal loopback_fifo.w* Loopback fifo, write side -- entity U_rx_loopback_fifo -- signal loopback_fifo.r* Loopback fifo, read side -- process loopback_fifo_control -- signal loopback_{i,q,valid} -- process rx_mux -- signal rx_mux_{i,q,valid} -- entity U_fifo_writer -- signal rx_sample_fifo.w* RX fifo, write side -- entity U_rx_sample_fifo -- signal rx_sample_fifo.r* RX fifo, read side -- entity U_fx3_gpif GPIF implementation, read side -- signal fx3_gpif.gpif_out Demuxed GPIF interface (FPGA -> FX3) -- process register_gpif -- signal fx3_gpif_i fx3_gpif.gpif_oe is '1' -- entity U_fx3_model FX3 model, RX process -- ======================================================================== -- Instantiations -- ======================================================================== -- Unit under test -- Clock domain: fx3_pclk_pll U_fx3_gpif : entity nuand.fx3_gpif port map ( pclk => fx3_pclk_pll, reset => sys_rst, usb_speed => fx3_control.usb_speed, gpif_in => fx3_gpif.gpif_in, gpif_out => fx3_gpif.gpif_out, gpif_oe => fx3_gpif.gpif_oe, ctl_in => fx3_gpif.ctl_in, ctl_out => fx3_gpif.ctl_out, ctl_oe => fx3_gpif.ctl_oe, tx_enable => fx3_control.tx_enable, rx_enable => fx3_control.rx_enable, meta_enable => fx3_control.meta_enable, packet_enable => fx3_control.packet, tx_fifo_write => tx_sample_fifo.wreq, tx_fifo_full => tx_sample_fifo.wfull, tx_fifo_empty => tx_sample_fifo.wempty, tx_fifo_usedw => tx_sample_fifo.wused, tx_fifo_data => tx_sample_fifo.wdata, tx_timestamp => tx_timestamp, tx_meta_fifo_write => tx_meta_fifo.wreq, tx_meta_fifo_full => tx_meta_fifo.wfull, tx_meta_fifo_empty => tx_meta_fifo.wempty, tx_meta_fifo_usedw => tx_meta_fifo.wused, tx_meta_fifo_data => tx_meta_fifo.wdata, rx_fifo_read => rx_sample_fifo.rreq, rx_fifo_full => rx_sample_fifo.rfull, rx_fifo_empty => rx_sample_fifo.rempty, rx_fifo_usedw => rx_sample_fifo.rused, rx_fifo_data => rx_sample_fifo.rdata, rx_meta_fifo_read => rx_meta_fifo.rreq, rx_meta_fifo_full => rx_meta_fifo.rfull, rx_meta_fifo_empty => rx_meta_fifo.rempty, rx_meta_fifo_usedr => rx_meta_fifo.rused, rx_meta_fifo_data => rx_meta_fifo.rdata ); -- Discrete control signals for fx3_gpif fx3_control.usb_speed <= '0'; fx3_control.meta_enable <= '1'; fx3_control.packet <= '1'; U_pkt_gen : entity nuand.rx_packet_generator port map( rx_clock => rx_clock, rx_reset => rx_reset, rx_enable => fx3_control.rx_enable, rx_packet_enable => fx3_control.packet, rx_packet_ready => rx_packet_ready, rx_packet_control => rx_packet_control ); meta_en_tx <= fx3_control.meta_enable; meta_en_rx <= fx3_control.meta_enable; increment_tx_ts : process(tx_clock) variable ping : boolean := true ; begin if( rising_edge(tx_clock) ) then ping := not ping ; if( ping = true ) then tx_timestamp <= tx_timestamp + 1 ; end if ; end if ; end process ; increment_rx_ts : process(rx_clock) variable ping : boolean := true ; begin if( rising_edge(rx_clock) ) then ping := not ping ; if( ping = true ) then rx_timestamp <= rx_timestamp + 1 ; end if ; end if ; end process ; -- Model of FX3's GPIF interface -- Clock domain: fx3_pclk (source) U_fx3_model : entity nuand.fx3_model(micro_packet_dma) port map ( fx3_pclk => fx3_pclk, fx3_gpif => fx3_gpif_i, fx3_ctl => fx3_ctl_i, fx3_uart_rxd => '0', fx3_uart_txd => open, fx3_uart_cts => open, fx3_rx_en => '1', fx3_rx_meta_en => meta_en_rx, fx3_tx_en => '1', fx3_tx_meta_en => meta_en_tx, done => done ); -- Generate phase-shifted PLL clock U_fx3_pll : entity rtl_work.fx3_pll port map ( inclk0 => fx3_pclk, areset => pll_reset, c0 => fx3_pclk_pll, locked => pll_locked ); tx_clock <= not tx_clock after TX_HALF_PERIOD ; rx_clock <= not rx_clock after RX_HALF_PERIOD ; -- Reset handler sys_rst <= '0' after 100 ns; -- Generate system clock sys_clk <= not sys_clk after SYSCLK_HALF_PERIOD when not done else '0'; tx_reset <= sys_rst; tx_ts_reset <= sys_rst; rx_reset <= sys_rst; rx_ts_reset <= sys_rst; meta_en_tx <= fx3_control.meta_enable; meta_en_rx <= fx3_control.meta_enable; -- TX Submodule U_tx : entity work.tx generic map ( NUM_STREAMS => dac_controls'length ) port map ( tx_reset => tx_reset, tx_clock => tx_clock, tx_enable => fx3_control.tx_enable, meta_en => meta_en_tx, timestamp_reset => tx_ts_reset, usb_speed => fx3_control.usb_speed, tx_underflow_led => open, tx_timestamp => tx_timestamp, -- Triggering trigger_arm => '0', trigger_fire => '0', trigger_master => '0', trigger_line => open, -- Packet FIFO packet_en => fx3_control.packet, packet_empty => open, packet_control => tx_packet_control, packet_ready => '1', -- Samples from host via FX3 sample_fifo_wclock => fx3_pclk_pll, sample_fifo_wreq => tx_sample_fifo.wreq, sample_fifo_wdata => tx_sample_fifo.wdata, sample_fifo_wempty => tx_sample_fifo.wempty, sample_fifo_wfull => tx_sample_fifo.wfull, sample_fifo_wused => tx_sample_fifo.wused, -- Metadata from host via FX3 meta_fifo_wclock => fx3_pclk_pll, meta_fifo_wreq => tx_meta_fifo.wreq, meta_fifo_wdata => tx_meta_fifo.wdata, meta_fifo_wempty => tx_meta_fifo.wempty, meta_fifo_wfull => tx_meta_fifo.wfull, meta_fifo_wused => tx_meta_fifo.wused, -- Digital Loopback Interface loopback_enabled => '0', loopback_fifo_wdata => loopback_fifo.wdata, loopback_fifo_wreq => loopback_fifo.wreq, loopback_fifo_wfull => loopback_fifo.wfull, loopback_fifo_wused => loopback_fifo.wused, -- RFFE Interface dac_controls => dac_controls, dac_streams => dac_streams ); -- RX Submodule U_rx : entity work.rx generic map ( NUM_STREAMS => adc_controls'length ) port map ( rx_reset => rx_reset, rx_clock => rx_clock, rx_enable => fx3_control.rx_enable, meta_en => meta_en_rx, timestamp_reset => rx_ts_reset, usb_speed => fx3_control.usb_speed, rx_mux_sel => to_unsigned(0, 3), rx_overflow_led => open, rx_timestamp => rx_timestamp, -- Triggering trigger_arm => '0', trigger_fire => '0', trigger_master => '0', trigger_line => open, trigger_signal_sync_tb => trigger_signal_sync_tb, -- Packet FIFO packet_en => fx3_control.packet, packet_control => rx_packet_control, packet_ready => rx_packet_ready, -- Samples to host via FX3 sample_fifo_rclock => fx3_pclk_pll, sample_fifo_raclr => not fx3_control.rx_enable, sample_fifo_rreq => rx_sample_fifo.rreq, sample_fifo_rdata => rx_sample_fifo.rdata, sample_fifo_rempty => rx_sample_fifo.rempty, sample_fifo_rfull => rx_sample_fifo.rfull, sample_fifo_rused => rx_sample_fifo.rused, -- Mini expansion signals mini_exp => "00", -- Metadata to host via FX3 meta_fifo_rclock => fx3_pclk_pll, meta_fifo_raclr => not fx3_control.rx_enable, meta_fifo_rreq => rx_meta_fifo.rreq, meta_fifo_rdata => rx_meta_fifo.rdata, meta_fifo_rempty => rx_meta_fifo.rempty, meta_fifo_rfull => rx_meta_fifo.rfull, meta_fifo_rused => rx_meta_fifo.rused, -- Digital Loopback Interface loopback_fifo_wenabled => open, loopback_fifo_wreset => tx_reset, loopback_fifo_wclock => tx_clock, loopback_fifo_wdata => loopback_fifo.wdata, loopback_fifo_wreq => loopback_fifo.wreq, loopback_fifo_wfull => loopback_fifo.wfull, loopback_fifo_wused => loopback_fifo.wused, -- RFFE Interface adc_controls => adc_controls, adc_streams => adc_streams ); -- ======================================================================== -- Data converters -- ======================================================================== gen_dac_controls : if( NUM_MIMO_STREAMS > 1 ) generate -- The TX side of the AD9361 HDL is a FIFO pull interface -- that expects a readahead FIFO. It toggles the data request -- signal every other cycle. This behavior is mimicked here. process( tx_clock, sys_rst ) begin if( sys_rst = '1' ) then dac_controls <= ( 0 => (enable => ENABLE_CHANNEL_0, data_req => '1'), 1 => (enable => ENABLE_CHANNEL_1, data_req => '1') ); elsif( rising_edge(tx_clock) ) then for i in dac_controls'range loop dac_controls(i) <= ( enable => dac_controls(i).enable, data_req => not dac_controls(i).data_req ); end loop; end if; end process; else generate dac_controls <= (others => SAMPLE_CONTROL_ENABLE); end generate; gen_adc_controls : if( NUM_MIMO_STREAMS > 1 ) generate process( rx_clock, sys_rst ) constant COUNT_RESET : integer := 0; variable count : integer range -2047 to 2047 := COUNT_RESET; begin if( sys_rst = '1' ) then count := COUNT_RESET; adc_controls <= ( 0 => (enable => ENABLE_CHANNEL_0, data_req => '1'), 1 => (enable => ENABLE_CHANNEL_1, data_req => '1') ); elsif( rising_edge(rx_clock) ) then for i in adc_controls'range loop adc_controls(i) <= ( enable => adc_controls(i).enable, data_req => not adc_controls(i).data_req ); if( adc_controls(i).enable = '1') then if( adc_streams(i).data_v = '1' ) then adc_streams(i).data_i <= to_signed(count, 16); adc_streams(i).data_q <= to_signed(-count, 16); if( count < 2047 ) then count := count + 1; else count := COUNT_RESET; end if; end if; adc_streams(i).data_v <= not adc_streams(i).data_v; end if; end loop; end if; end process; else generate adc_controls <= (others => SAMPLE_CONTROL_ENABLE); end generate; -- ======================================================================== -- Processes -- ======================================================================== -- FX3 GPIF bidirectional signal control -- Adapted from same process in bladerf-hosted.vhd register_gpif : process(sys_rst, fx3_pclk_pll) begin if( sys_rst = '1' ) then fx3_gpif_i <= (others => 'Z'); fx3_gpif.gpif_in <= (others => 'Z'); elsif( rising_edge(fx3_pclk_pll) ) then fx3_gpif.gpif_in <= fx3_gpif_i; if( fx3_gpif.gpif_oe = '1' ) then fx3_gpif_i <= fx3_gpif.gpif_out; else fx3_gpif_i <= (others =>'Z'); end if; end if; end process; -- FX3 CTL bidirectional signals -- Adapted from same generator in bladerf-hosted.vhd generate_ctl : for i in fx3_ctl_i'range generate fx3_ctl_i(i) <= fx3_gpif.ctl_out(i) when fx3_gpif.ctl_oe(i) = '1' else 'Z'; end generate; fx3_gpif.ctl_in <= fx3_ctl_i; -- Controller for loopback FIFO -- Stripped-down version of same process from rx.vhd loopback_fifo_control : process( sys_rst, loopback_fifo.rclock ) begin if( sys_rst = '1' ) then loopback_enabled <= '0'; loopback_fifo.rreq <= '0'; loopback_i <= (others => '0'); loopback_q <= (others => '0'); loopback_valid <= '0'; elsif( rising_edge(loopback_fifo.rclock) ) then loopback_enabled <= '0'; loopback_fifo.rreq <= '0'; loopback_i <= loopback_i; loopback_q <= loopback_q; loopback_valid <= '0'; -- Is loopback enabled? loopback_enabled <= fx3_control.rx_enable; -- Do the loopback loopback_i <= resize(signed(loopback_fifo.rdata(15 downto 0)), loopback_i'length); loopback_q <= resize(signed(loopback_fifo.rdata(31 downto 16)), loopback_q'length); loopback_valid <= loopback_fifo.rreq and not loopback_fifo.rempty; -- Read from the FIFO if req'd loopback_fifo.rreq <= loopback_enabled and (not loopback_fifo.rempty); end if; end process; -- RX multiplexer -- Stripped-down version of same process from rx.vhd rx_mux : process(sys_rst, sys_clk) begin if( sys_rst = '1' ) then rx_mux_i <= (others =>'0'); rx_mux_q <= (others =>'0'); rx_mux_valid <= '0'; elsif( rising_edge(sys_clk) ) then rx_mux_i <= loopback_i; rx_mux_q <= loopback_q; rx_mux_valid <= loopback_valid; end if; end process; -- TX multiplexer -- Stripped-down version of mimo_channel_sel_mux from tx.vhd --tx_mux : process( sys_clk ) --begin -- if( rising_edge(sys_clk) ) then -- tx_sample_fifo.rreq <= not tx_sample_fifo.rempty; -- loopback_fifo.wdata <= tx_sample_fifo.rdata; -- loopback_fifo.wreq <= tx_sample_fifo.rreq and not tx_sample_fifo.rempty; -- end if; --end process; -- ======================================================================== -- Verification -- ======================================================================== -- Check for metavalues -- We should never see metavalues written to the FIFOs check_fifo_write: process(fx3_pclk_pll) is begin if( rising_edge(fx3_pclk_pll) ) then if( tx_sample_fifo.wreq = '1' and fx3_control.meta_enable = '0' ) then for i in tx_sample_fifo.wdata'range loop assert tx_sample_fifo.wdata(i) = '0' or tx_sample_fifo.wdata(i) = '1' severity failure; end loop; end if; end if; end process; check_fifo_read: process(fx3_pclk_pll) is begin if( rising_edge(fx3_pclk_pll) ) then if( rx_sample_fifo.rreq = '1' ) then for i in rx_sample_fifo.rdata'range loop assert rx_sample_fifo.rdata(i) = '0' or rx_sample_fifo.rdata(i) = '1' severity failure; end loop; end if; end if; end process check_fifo_read; -- Check for fullness on FIFOs assert(rx_sample_fifo.wfull = '0') report "rx_sample_fifo full (write)" severity warning; assert(tx_sample_fifo.wfull = '0') report "tx_sample_fifo full (write)" severity warning; assert(loopback_fifo.wfull = '0') report "loopback_fifo full (write)" severity warning; tx_header_check: process type time_state_t is ( WAIT_FOR_TIMESTAMP, WAIT_FOR_SAMPLE ); variable state : time_state_t := WAIT_FOR_TIMESTAMP; variable timestamp_cntr : unsigned (31 downto 0) := (others => '0'); variable min_time_for_save : integer := 350; begin case state is when WAIT_FOR_TIMESTAMP => wait until rising_edge(dma3_tx_reqx); if fx3_control.meta_enable = '1' then wait until rising_edge(fx3_pclk); tx_packet_len <= signed(fx3_gpif_i(7 downto 0)); report "Tx Packet Length: 0x" & to_hstring(fx3_gpif_i(7 downto 0)); wait until rising_edge(fx3_pclk); report "Tx Packet Length Saved: " & to_string(to_integer(tx_packet_len)); report "Tx Timestamp: 0x" & to_hstring(fx3_gpif_i); timestamp_cntr := unsigned(fx3_gpif_i); report "Tx Timestamp Saved: " & to_string(to_integer(timestamp_cntr)); end if; state := WAIT_FOR_SAMPLE; when WAIT_FOR_SAMPLE => while ( timestamp_cntr /= tx_timestamp ) loop assert(tx_timestamp < timestamp_cntr) report "Tx Header timestamp is in the past. Samples " & "usually ignored but considered a failure in tb." severity failure; assert(tx_packet_control.data_valid = '0') report "Tx data being transmitted before expected tx_timestamp." severity failure; wait until rising_edge(tx_clock); end loop; report "TX TIMESTAMP = META TIMESTAMP"; if( tx_packet_control.data_valid = '1' ) then assert(tx_packet_control.pkt_sop = '1') report "Tx data not seen at expected tx_timestamp." severity failure; end if; state := WAIT_FOR_TIMESTAMP; wait until rising_edge(tx_clock); end case; end process tx_header_check; look_for_dropped_tx_packets: process(tx_clock) is constant BLOCKS_PER_ITERATION : natural := 3; --Provided in fx3_model variable current_block_count : natural := 1; variable num_samples_generated : integer := 0; variable num_samples_outstanding : integer := 0; variable iq_value : signed (15 downto 0) := x"0000"; variable expected_sample_q : signed (15 downto 0); variable expected_sample_i : signed (15 downto 0); variable expected_data : signed (31 downto 0); begin if( rising_edge(tx_clock) and tx_packet_control.data_valid = '1' ) then expected_sample_i := iq_value; expected_sample_q := to_signed(current_block_count, 8) & to_signed(0, 8); expected_data := expected_sample_q & expected_sample_i; assert(tx_packet_control.data = std_logic_vector(expected_data)) report "tx_packet_control.data: " & to_hstring(tx_packet_control.data) & " | " & "expected_data: " & to_hstring(expected_data) severity failure; -- Change the iq values based on blocks received -- See tx_sample_stream's encoding scheme in fx3_model.vhd if( iq_value(7 downto 0) = tx_packet_len ) then iq_value := x"0000"; if( current_block_count <= BLOCKS_PER_ITERATION ) then current_block_count := current_block_count + 1; else current_block_count := 1; end if; else iq_value := (iq_value + 1) mod 2048; end if; end if; end process look_for_dropped_tx_packets; look_for_dropped_rx_packets: process(fx3_pclk_pll) constant RX_PACKET_LEN : natural := 500; -- Provided in rx_packet_generator.vhd constant HEADER_LEN : natural := 4; -- In clk cycles variable rx_fifo_clear_detected : boolean := false; variable current_block_count : natural := 0; variable header_downcount : natural := HEADER_LEN; variable rx_val : integer := RX_PACKET_LEN; -- variable data_expected : std_logic_vector (31 downto 0); variable msw_expected : std_logic_vector (15 downto 0); variable lsw_expected : std_logic_vector (15 downto 0); variable rx_en_flip_flop : std_logic := '0'; begin if( rising_edge(fx3_pclk_pll) and fx3_gpif.gpif_oe = '1' and fx3_control.rx_enable = '1' ) then rx_en_flip_flop := '1'; msw_expected := std_logic_vector(to_unsigned(current_block_count, 16)); lsw_expected := std_logic_vector(to_unsigned(rx_val, 16)); data_expected := msw_expected & lsw_expected; if( header_downcount /= 0 ) then header_downcount := header_downcount - 1; else assert(fx3_gpif.gpif_out = data_expected) report "gpif_out: " & to_hstring(fx3_gpif.gpif_out) & " | " & "expected: " & to_hstring(data_expected) severity failure; if( rx_val > 1 ) then rx_val := rx_val - 1; else current_block_count := current_block_count + 1; rx_val := RX_PACKET_LEN; end if; end if; end if; if( fx3_gpif.gpif_oe = '0' ) then header_downcount := HEADER_LEN; end if; -- Increments block count given a purposely disregarded block by a clear signal rx_fifo_clear_detected := fx3_control.rx_enable = '0' and rx_en_flip_flop = '1'; if( rx_fifo_clear_detected ) then rx_en_flip_flop := '0'; current_block_count := current_block_count + 1; end if; end process look_for_dropped_rx_packets; end architecture; bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/vhdl/tb/fx3_gpif_tb.vhd000066400000000000000000000624331457144405000256410ustar00rootroot00000000000000-- Copyright (c) 2019 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; library rtl_work; library altera_lnsim; use altera_lnsim.altera_pll; library nuand; use nuand.util.all ; use nuand.fifo_readwrite_p.all; use nuand.common_dcfifo_p.all; use nuand.bladerf_p.all; entity fx3_gpif_tb is generic ( -- For bladeRF2 (2x2 MIMO): NUM_MIMO_STREAMS : natural := 2; FIFO_READER_READ_THROTTLE : natural := 0; ENABLE_CHANNEL_0 : std_logic := '1'; ENABLE_CHANNEL_1 : std_logic := '0' ); end entity; architecture arch of fx3_gpif_tb is -- bladerf-hosted uses ad9361.clock (125 MHz) for rx_clock and tx_clock constant SYSCLK_HALF_PERIOD : time := 1 sec * (1.0/125.0e6/2.0); -- For reasons unknown, simulation of this system in ModelSim requires that -- wrreq and data be asserted shortly before the rising clock edge. Sigh... constant FIFO_WORKAROUND : time := 1 ps; type fx3_control_t is record usb_speed : std_logic; tx_enable : std_logic; rx_enable : std_logic; meta_enable : std_logic; packet : std_logic; end record; type fx3_gpif_t is record gpif_in : std_logic_vector(31 downto 0); gpif_out : std_logic_vector(31 downto 0); gpif_oe : std_logic; ctl_in : std_logic_vector(12 downto 0); ctl_out : std_logic_vector(12 downto 0); ctl_oe : std_logic_vector(12 downto 0); end record; signal sys_rst : std_logic := '1'; signal done : boolean := false; signal fx3_pclk : std_logic := '1'; signal fx3_pclk_pll : std_logic := '1'; signal sys_clk : std_logic := '1'; signal pll_reset : std_logic := '0'; signal pll_locked : std_logic := '0'; signal fx3_control : fx3_control_t; signal fx3_gpif : fx3_gpif_t; signal fx3_gpif_i : std_logic_vector(31 downto 0); signal fx3_ctl_i : std_logic_vector(12 downto 0); signal loopback_i : signed(15 downto 0) := (others =>'0'); signal loopback_q : signed(15 downto 0) := (others =>'0'); signal loopback_valid : std_logic := '0'; signal loopback_enabled : std_logic := '0'; signal tx_clock : std_logic := '1' ; signal rx_clock : std_logic := '1' ; signal rx_sample_fifo : rx_fifo_t := RX_FIFO_T_DEFAULT; signal tx_sample_fifo : tx_fifo_t := TX_FIFO_T_DEFAULT; signal loopback_fifo : loopback_fifo_t := LOOPBACK_FIFO_T_DEFAULT; signal rx_meta_fifo : meta_fifo_rx_t := META_FIFO_RX_T_DEFAULT; signal tx_meta_fifo : meta_fifo_tx_t := META_FIFO_TX_T_DEFAULT; signal rx_mux_i : signed(15 downto 0); signal rx_mux_q : signed(15 downto 0); signal rx_mux_valid : std_logic; signal tx_timestamp : unsigned(63 downto 0) := ( others => '0' ); signal rx_timestamp : unsigned(63 downto 0) := ( others => '0' ); constant FX3_HALF_PERIOD : time := 1.0/(100.0e6)/2.0*1 sec ; constant TX_HALF_PERIOD : time := 1.0/(9.0e6)/2.0*1 sec ; constant RX_HALF_PERIOD : time := 1.0/(9.0e6)/2.0*1 sec ; signal dac_controls : sample_controls_t(0 to NUM_MIMO_STREAMS-1) := (others => SAMPLE_CONTROL_DISABLE); signal dac_streams : sample_streams_t(dac_controls'range) := (others => ZERO_SAMPLE); signal adc_controls : sample_controls_t(0 to NUM_MIMO_STREAMS-1) := (others => SAMPLE_CONTROL_DISABLE); signal adc_streams : sample_streams_t(adc_controls'range) := (others => ZERO_SAMPLE); signal tx_reset : std_logic := '0'; signal tx_ts_reset : std_logic := '0'; signal rx_reset : std_logic := '0'; signal rx_ts_reset : std_logic := '0'; signal meta_en_tx : std_logic := '0'; signal meta_en_rx : std_logic := '0'; signal rx_packet_control : packet_control_t := PACKET_CONTROL_DEFAULT; signal tx_packet_control : packet_control_t; function data_gen (count : natural) return std_logic_vector is variable msw, lsw : std_logic_vector(15 downto 0); begin msw := std_logic_vector(to_signed(count, 16)); lsw := std_logic_vector(to_signed(-count, 16)); return (msw & lsw); end function data_gen; signal rx_packet_ready : std_logic; begin -- ======================================================================== -- Brief summary of data flow -- ======================================================================== -- -- Simulated samples flow from fx3_model's TX side to its RX side. The -- validity of the data is checked there. -- -- entity U_fx3_model FX3 model, TX process -- signal fx3_gpif_i fx3_gpif.gpif_oe is '0' -- process register_gpif -- signal fx3_gpif.gpif_in Demuxed GPIF interface (FX3 -> FPGA) -- entity U_fx3_gpif GPIF implementation, write side -- signal tx_sample_fifo.w* TX fifo, write side -- entity U_tx_sample_fifo -- signal tx_sample_fifo.r* TX fifo, read side -- process tx_mux -- signal loopback_fifo.w* Loopback fifo, write side -- entity U_rx_loopback_fifo -- signal loopback_fifo.r* Loopback fifo, read side -- process loopback_fifo_control -- signal loopback_{i,q,valid} -- process rx_mux -- signal rx_mux_{i,q,valid} -- entity U_fifo_writer -- signal rx_sample_fifo.w* RX fifo, write side -- entity U_rx_sample_fifo -- signal rx_sample_fifo.r* RX fifo, read side -- entity U_fx3_gpif GPIF implementation, read side -- signal fx3_gpif.gpif_out Demuxed GPIF interface (FPGA -> FX3) -- process register_gpif -- signal fx3_gpif_i fx3_gpif.gpif_oe is '1' -- entity U_fx3_model FX3 model, RX process -- ======================================================================== -- Instantiations -- ======================================================================== -- Unit under test -- Clock domain: fx3_pclk_pll U_fx3_gpif : entity nuand.fx3_gpif port map ( pclk => fx3_pclk_pll, reset => sys_rst, usb_speed => fx3_control.usb_speed, gpif_in => fx3_gpif.gpif_in, gpif_out => fx3_gpif.gpif_out, gpif_oe => fx3_gpif.gpif_oe, ctl_in => fx3_gpif.ctl_in, ctl_out => fx3_gpif.ctl_out, ctl_oe => fx3_gpif.ctl_oe, tx_enable => fx3_control.tx_enable, rx_enable => fx3_control.rx_enable, meta_enable => fx3_control.meta_enable, packet_enable => fx3_control.packet, tx_fifo_write => tx_sample_fifo.wreq, tx_fifo_full => tx_sample_fifo.wfull, tx_fifo_empty => tx_sample_fifo.wempty, tx_fifo_usedw => tx_sample_fifo.wused, tx_fifo_data => tx_sample_fifo.wdata, tx_timestamp => tx_timestamp, tx_meta_fifo_write => tx_meta_fifo.wreq, tx_meta_fifo_full => tx_meta_fifo.wfull, tx_meta_fifo_empty => tx_meta_fifo.wempty, tx_meta_fifo_usedw => tx_meta_fifo.wused, tx_meta_fifo_data => tx_meta_fifo.wdata, rx_fifo_read => rx_sample_fifo.rreq, rx_fifo_full => rx_sample_fifo.rfull, rx_fifo_empty => rx_sample_fifo.rempty, rx_fifo_usedw => rx_sample_fifo.rused, rx_fifo_data => rx_sample_fifo.rdata, rx_meta_fifo_read => rx_meta_fifo.rreq, rx_meta_fifo_full => rx_meta_fifo.rfull, rx_meta_fifo_empty => rx_meta_fifo.rempty, rx_meta_fifo_usedr => rx_meta_fifo.rused, rx_meta_fifo_data => rx_meta_fifo.rdata ); -- Discrete control signals for fx3_gpif fx3_control.usb_speed <= '0'; fx3_control.meta_enable <= '1'; fx3_control.packet <= '1'; U_pkt_gen : entity nuand.rx_packet_generator port map( rx_clock => rx_clock, rx_reset => rx_reset, rx_enable => fx3_control.rx_enable, rx_packet_enable => fx3_control.packet, rx_packet_ready => rx_packet_ready, rx_packet_control => rx_packet_control ); -- manual way of creating packets, rx_packet_generator is more realistic --packet_process: process --begin -- wait for 60 us; -- wait until falling_edge(rx_clock); -- rx_packet_control.data <= x"12344321"; -- rx_packet_control.data_valid <= '1'; -- rx_packet_control.pkt_sop <= '1'; -- wait until falling_edge(rx_clock); -- rx_packet_control.data_valid <= '0'; -- rx_packet_control.pkt_sop <= '0'; -- wait until falling_edge(rx_clock); -- for j in 2 to 8 loop -- wait until falling_edge(rx_clock); -- rx_packet_control.data <= x"cafe10" & std_logic_vector(to_unsigned(j, 8)); -- rx_packet_control.data_valid <= '1'; -- end loop; -- wait until falling_edge(rx_clock); -- rx_packet_control.data <= x"cafef0ff"; -- rx_packet_control.data_valid <= '1'; -- rx_packet_control.pkt_eop <= '1'; -- wait until falling_edge(rx_clock); -- rx_packet_control.data_valid <= '0'; -- rx_packet_control.pkt_eop <= '0'; -- wait for 70 us; --end process; meta_en_tx <= fx3_control.meta_enable; meta_en_rx <= fx3_control.meta_enable; increment_tx_ts : process(tx_clock) variable ping : boolean := true ; begin if( rising_edge(tx_clock) ) then ping := not ping ; if( ping = true ) then tx_timestamp <= tx_timestamp + 1 ; end if ; end if ; end process ; increment_rx_ts : process(rx_clock) variable ping : boolean := true ; begin if( rising_edge(rx_clock) ) then ping := not ping ; if( ping = true ) then rx_timestamp <= rx_timestamp + 1 ; end if ; end if ; end process ; -- Model of FX3's GPIF interface -- Clock domain: fx3_pclk (source) U_fx3_model : entity nuand.fx3_model(micro_packet_dma) port map ( fx3_pclk => fx3_pclk, fx3_gpif => fx3_gpif_i, fx3_ctl => fx3_ctl_i, fx3_uart_rxd => '0', fx3_uart_txd => open, fx3_uart_cts => open, fx3_rx_en => '1', fx3_rx_meta_en => meta_en_rx, fx3_tx_en => '1', fx3_tx_meta_en => meta_en_tx, done => done ); -- Generate phase-shifted PLL clock U_fx3_pll : entity rtl_work.fx3_pll port map ( inclk0 => fx3_pclk, areset => pll_reset, c0 => fx3_pclk_pll, locked => pll_locked ); tx_clock <= not tx_clock after TX_HALF_PERIOD ; rx_clock <= not rx_clock after RX_HALF_PERIOD ; -- Reset handler sys_rst <= '0' after 100 ns; -- Generate system clock sys_clk <= not sys_clk after SYSCLK_HALF_PERIOD when not done else '0'; tx_reset <= sys_rst; tx_ts_reset <= sys_rst; rx_reset <= sys_rst; rx_ts_reset <= sys_rst; meta_en_tx <= fx3_control.meta_enable; meta_en_rx <= fx3_control.meta_enable; -- TX Submodule U_tx : entity work.tx generic map ( NUM_STREAMS => dac_controls'length ) port map ( tx_reset => tx_reset, tx_clock => tx_clock, tx_enable => fx3_control.tx_enable, meta_en => meta_en_tx, timestamp_reset => tx_ts_reset, usb_speed => fx3_control.usb_speed, tx_underflow_led => open, tx_timestamp => tx_timestamp, -- Triggering trigger_arm => '0', trigger_fire => '0', trigger_master => '0', trigger_line => open, -- Packet FIFO packet_en => fx3_control.packet, packet_empty => open, packet_control => tx_packet_control, packet_ready => '1', -- Samples from host via FX3 sample_fifo_wclock => fx3_pclk_pll, sample_fifo_wreq => tx_sample_fifo.wreq, sample_fifo_wdata => tx_sample_fifo.wdata, sample_fifo_wempty => tx_sample_fifo.wempty, sample_fifo_wfull => tx_sample_fifo.wfull, sample_fifo_wused => tx_sample_fifo.wused, -- Metadata from host via FX3 meta_fifo_wclock => fx3_pclk_pll, meta_fifo_wreq => tx_meta_fifo.wreq, meta_fifo_wdata => tx_meta_fifo.wdata, meta_fifo_wempty => tx_meta_fifo.wempty, meta_fifo_wfull => tx_meta_fifo.wfull, meta_fifo_wused => tx_meta_fifo.wused, -- Digital Loopback Interface loopback_enabled => '0', loopback_fifo_wdata => loopback_fifo.wdata, loopback_fifo_wreq => loopback_fifo.wreq, loopback_fifo_wfull => loopback_fifo.wfull, loopback_fifo_wused => loopback_fifo.wused, -- RFFE Interface dac_controls => dac_controls, dac_streams => dac_streams ); -- RX Submodule U_rx : entity work.rx generic map ( NUM_STREAMS => adc_controls'length ) port map ( rx_reset => rx_reset, rx_clock => rx_clock, rx_enable => fx3_control.rx_enable, meta_en => meta_en_rx, timestamp_reset => rx_ts_reset, usb_speed => fx3_control.usb_speed, rx_mux_sel => to_unsigned(0, 3), rx_overflow_led => open, rx_timestamp => rx_timestamp, -- Triggering trigger_arm => '0', trigger_fire => '0', trigger_master => '0', trigger_line => open, -- Packet FIFO packet_en => fx3_control.packet, packet_control => rx_packet_control, packet_ready => rx_packet_ready, -- Samples to host via FX3 sample_fifo_rclock => fx3_pclk_pll, sample_fifo_raclr => not fx3_control.rx_enable, sample_fifo_rreq => rx_sample_fifo.rreq, sample_fifo_rdata => rx_sample_fifo.rdata, sample_fifo_rempty => rx_sample_fifo.rempty, sample_fifo_rfull => rx_sample_fifo.rfull, sample_fifo_rused => rx_sample_fifo.rused, -- Mini expansion signals mini_exp => "00", -- Metadata to host via FX3 meta_fifo_rclock => fx3_pclk_pll, meta_fifo_raclr => not fx3_control.rx_enable, meta_fifo_rreq => rx_meta_fifo.rreq, meta_fifo_rdata => rx_meta_fifo.rdata, meta_fifo_rempty => rx_meta_fifo.rempty, meta_fifo_rfull => rx_meta_fifo.rfull, meta_fifo_rused => rx_meta_fifo.rused, -- Digital Loopback Interface loopback_fifo_wenabled => open, loopback_fifo_wreset => tx_reset, loopback_fifo_wclock => tx_clock, loopback_fifo_wdata => loopback_fifo.wdata, loopback_fifo_wreq => loopback_fifo.wreq, loopback_fifo_wfull => loopback_fifo.wfull, loopback_fifo_wused => loopback_fifo.wused, -- RFFE Interface adc_controls => adc_controls, adc_streams => adc_streams ); -- ======================================================================== -- Data converters -- ======================================================================== gen_dac_controls : if( NUM_MIMO_STREAMS > 1 ) generate -- The TX side of the AD9361 HDL is a FIFO pull interface -- that expects a readahead FIFO. It toggles the data request -- signal every other cycle. This behavior is mimicked here. process( tx_clock, sys_rst ) begin if( sys_rst = '1' ) then dac_controls <= ( 0 => (enable => ENABLE_CHANNEL_0, data_req => '1'), 1 => (enable => ENABLE_CHANNEL_1, data_req => '1') ); elsif( rising_edge(tx_clock) ) then for i in dac_controls'range loop dac_controls(i) <= ( enable => dac_controls(i).enable, data_req => not dac_controls(i).data_req ); end loop; end if; end process; else generate dac_controls <= (others => SAMPLE_CONTROL_ENABLE); end generate; gen_adc_controls : if( NUM_MIMO_STREAMS > 1 ) generate process( rx_clock, sys_rst ) variable count : natural range 0 to 10000; variable rv : std_logic_vector(31 downto 0); begin if( sys_rst = '1' ) then count := 0; adc_controls <= ( 0 => (enable => ENABLE_CHANNEL_0, data_req => '1'), 1 => (enable => ENABLE_CHANNEL_1, data_req => '1') ); elsif( rising_edge(rx_clock) ) then for i in adc_controls'range loop adc_controls(i) <= ( enable => adc_controls(i).enable, data_req => not adc_controls(i).data_req ); if( adc_controls(i).enable = '1') then if( adc_streams(i).data_v = '1' ) then if( count < 10000 ) then count := count + 1; else count := 0; end if; rv := std_logic_vector(to_unsigned(count, 32)); adc_streams(i).data_i <= signed(rv(15 downto 0)); adc_streams(i).data_q <= signed(rv(31 downto 16)); end if; adc_streams(i).data_v <= not adc_streams(i).data_v; end if; end loop; end if; end process; else generate adc_controls <= (others => SAMPLE_CONTROL_ENABLE); end generate; -- ======================================================================== -- Processes -- ======================================================================== -- FX3 GPIF bidirectional signal control -- Adapted from same process in bladerf-hosted.vhd register_gpif : process(sys_rst, fx3_pclk_pll) begin if( sys_rst = '1' ) then fx3_gpif_i <= (others => 'Z'); fx3_gpif.gpif_in <= (others => 'Z'); elsif( rising_edge(fx3_pclk_pll) ) then fx3_gpif.gpif_in <= fx3_gpif_i; if( fx3_gpif.gpif_oe = '1' ) then fx3_gpif_i <= fx3_gpif.gpif_out; else fx3_gpif_i <= (others =>'Z'); end if; end if; end process; -- FX3 CTL bidirectional signals -- Adapted from same generator in bladerf-hosted.vhd generate_ctl : for i in fx3_ctl_i'range generate fx3_ctl_i(i) <= fx3_gpif.ctl_out(i) when fx3_gpif.ctl_oe(i) = '1' else 'Z'; end generate; fx3_gpif.ctl_in <= fx3_ctl_i; -- Controller for loopback FIFO -- Stripped-down version of same process from rx.vhd loopback_fifo_control : process( sys_rst, loopback_fifo.rclock ) begin if( sys_rst = '1' ) then loopback_enabled <= '0'; loopback_fifo.rreq <= '0'; loopback_i <= (others => '0'); loopback_q <= (others => '0'); loopback_valid <= '0'; elsif( rising_edge(loopback_fifo.rclock) ) then loopback_enabled <= '0'; loopback_fifo.rreq <= '0'; loopback_i <= loopback_i; loopback_q <= loopback_q; loopback_valid <= '0'; -- Is loopback enabled? loopback_enabled <= fx3_control.rx_enable; -- Do the loopback loopback_i <= resize(signed(loopback_fifo.rdata(15 downto 0)), loopback_i'length); loopback_q <= resize(signed(loopback_fifo.rdata(31 downto 16)), loopback_q'length); loopback_valid <= loopback_fifo.rreq and not loopback_fifo.rempty; -- Read from the FIFO if req'd loopback_fifo.rreq <= loopback_enabled and (not loopback_fifo.rempty); end if; end process; -- RX multiplexer -- Stripped-down version of same process from rx.vhd rx_mux : process(sys_rst, sys_clk) begin if( sys_rst = '1' ) then rx_mux_i <= (others =>'0'); rx_mux_q <= (others =>'0'); rx_mux_valid <= '0'; elsif( rising_edge(sys_clk) ) then rx_mux_i <= loopback_i; rx_mux_q <= loopback_q; rx_mux_valid <= loopback_valid; end if; end process; -- TX multiplexer -- Stripped-down version of mimo_channel_sel_mux from tx.vhd --tx_mux : process( sys_clk ) --begin -- if( rising_edge(sys_clk) ) then -- tx_sample_fifo.rreq <= not tx_sample_fifo.rempty; -- loopback_fifo.wdata <= tx_sample_fifo.rdata; -- loopback_fifo.wreq <= tx_sample_fifo.rreq and not tx_sample_fifo.rempty; -- end if; --end process; -- ======================================================================== -- Validation -- ======================================================================== -- Check for metavalues -- We should never see metavalues written to the FIFOs check_fifo_write : process (fx3_pclk_pll) is begin if (rising_edge(fx3_pclk_pll)) then if (tx_sample_fifo.wreq = '1' and fx3_control.meta_enable = '0') then for i in tx_sample_fifo.wdata'range loop assert tx_sample_fifo.wdata(i) = '0' or tx_sample_fifo.wdata(i) = '1' severity failure; end loop; end if; end if; end process check_fifo_write; check_fifo_read : process (fx3_pclk_pll) is begin if (rising_edge(fx3_pclk_pll)) then if (rx_sample_fifo.rreq = '1') then for i in rx_sample_fifo.rdata'range loop assert rx_sample_fifo.rdata(i) = '0' or rx_sample_fifo.rdata(i) = '1' severity failure; end loop; end if; end if; end process check_fifo_read; -- Check for fullness on FIFOs assert (rx_sample_fifo.wfull = '0') report "rx_sample_fifo full (write)" severity warning; assert (tx_sample_fifo.wfull = '0') report "tx_sample_fifo full (write)" severity warning; assert (loopback_fifo.wfull = '0') report "loopback_fifo full (write)" severity warning; end architecture; bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/vhdl/tb/fx3_model.vhd000066400000000000000000000435751457144405000253350ustar00rootroot00000000000000-- Copyright (c) 2019 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.math_real.all; use ieee.math_complex.all; library work; use work.util.all; architecture micro_dma of fx3_model is constant PCLK_HALF_PERIOD : time := 1 sec * (1.0/100.0e6/2.0); constant START_COUNT : natural := 32; constant BLOCKS_PER_ITERATION : natural := 3; constant ITERATIONS : natural := 4; -- Control mapping alias dma0_rx_ack is fx3_ctl( 0); alias dma1_rx_ack is fx3_ctl( 1); alias dma2_tx_ack is fx3_ctl( 2); alias dma3_tx_ack is fx3_ctl( 3); alias dma_rx_enable is fx3_ctl( 4); alias dma_tx_enable is fx3_ctl( 5); alias dma_idle is fx3_ctl( 6); alias system_reset is fx3_ctl( 7); alias dma0_rx_reqx is fx3_ctl( 8); alias dma1_rx_reqx is fx3_ctl(12); -- due to 9 being connected to dclk alias dma2_tx_reqx is fx3_ctl(10); alias dma3_tx_reqx is fx3_ctl(11); type gpif_state_t is (IDLE, TX_META, TX_SAMPLES, RX_SAMPLES); signal gpif_state_rx, gpif_state_tx : gpif_state_t; signal rx_done : boolean := false; signal tx_done : boolean := false; signal rx_data : std_logic_vector(31 downto 0); signal tx_data : std_logic_vector(31 downto 0); impure function data_gen (count : natural) return std_logic_vector is variable eight_bit_msw_i : std_logic_vector(7 downto 0); variable eight_bit_msw_q : std_logic_vector(7 downto 0); variable eight_bit_lsw_i : std_logic_vector(7 downto 0); variable eight_bit_lsw_q : std_logic_vector(7 downto 0); variable msw, lsw : std_logic_vector(15 downto 0); begin if( eight_bit_mode_en = '1' ) then eight_bit_lsw_i := std_logic_vector(to_unsigned(count, 8)); eight_bit_lsw_q := std_logic_vector(to_unsigned(count+1, 8)); eight_bit_msw_i := std_logic_vector(to_unsigned(count+2, 8)); eight_bit_msw_q := std_logic_vector(to_unsigned(count+3, 8)); lsw := eight_bit_lsw_q & eight_bit_lsw_i; msw := eight_bit_msw_q & eight_bit_msw_i; else msw := std_logic_vector(to_signed(count+1, 16)); lsw := std_logic_vector(to_signed(count, 16)); end if; return (msw & lsw); end function data_gen; impure function data_check (count : natural ; rxdata : std_logic_vector(31 downto 0)) return boolean is begin return (rxdata = data_gen(count)); end function data_check; begin -- DCLK which isn't used fx3_ctl(9) <= '0'; fx3_ctl(3 downto 0) <= (others => 'Z'); -- Create a 100MHz clock output fx3_pclk <= not fx3_pclk after PCLK_HALF_PERIOD when (not rx_done or not tx_done) else '0'; -- Doneness done <= rx_done and tx_done; rx_sample_stream : process constant BLOCK_SIZE : natural := 512; variable count : natural := START_COUNT; variable req_time : time; begin gpif_state_rx <= IDLE; dma0_rx_reqx <= '1'; dma1_rx_reqx <= '1'; dma_rx_enable <= '0'; rx_data <= (others => 'U'); wait until rising_edge(fx3_pclk) and system_reset = '0'; nop(fx3_pclk, 1000); wait until rising_edge(fx3_pclk) and fx3_rx_en = '1'; wait for 30 us; for j in 1 to ITERATIONS loop dma_rx_enable <= '1'; for i in 1 to BLOCKS_PER_ITERATION loop dma0_rx_reqx <= '0'; req_time := now; wait until rising_edge( fx3_pclk ) and dma0_rx_ack = '1'; wait until rising_edge( fx3_pclk ); dma0_rx_reqx <= '1'; report "RX iteration " & to_string(j) & " block " & to_string(i) & " delay " & to_string(now - req_time); for i in 1 to BLOCK_SIZE loop gpif_state_rx <= RX_SAMPLES; rx_data <= fx3_gpif; wait until rising_edge( fx3_pclk ); --assert data_check(count, rx_data) severity failure; count := (count + 1) mod 2048; gpif_state_rx <= IDLE; rx_data <= (others => 'X'); end loop; end loop; dma_rx_enable <= '0'; wait for 10 us; end loop; report "Done with RX sample stream"; rx_done <= true; wait; end process; tx_sample_stream : process constant TIME_BETWEEN_ITERATIONS : natural := 4593; constant BLOCK_SIZE : natural := 512; variable count : natural := START_COUNT; variable timestamp_cntr : natural := 400; variable header_len : natural := 0; variable data_out : std_logic_vector(31 downto 0); variable req_time : time; begin gpif_state_tx <= IDLE; dma2_tx_reqx <= '1'; dma3_tx_reqx <= '1'; dma_tx_enable <= '0'; fx3_gpif <= (others =>'Z'); wait until rising_edge(fx3_pclk) and system_reset = '0'; nop(fx3_pclk, 1000); wait until rising_edge(fx3_pclk) and fx3_tx_en = '1'; wait for 30 us; for k in 1 to ITERATIONS loop dma_tx_enable <= '1'; for j in 1 to BLOCKS_PER_ITERATION loop header_len := 0; dma3_tx_reqx <= '0'; req_time := now; wait until rising_edge( fx3_pclk ) and dma3_tx_ack = '1'; wait until rising_edge( fx3_pclk ); wait until rising_edge( fx3_pclk ); wait until rising_edge( fx3_pclk ); dma3_tx_reqx <= '1'; report "TX iteration " & to_string(k) & " block " & to_string(j) & " delay " & to_string(now - req_time); if( fx3_tx_meta_en = '1') then header_len := 4; for i in 1 to 4 loop case (i) is when 1 => data_out := x"00000000"; when 2 => data_out(31 downto 0) := std_logic_vector(to_signed(timestamp_cntr, 32)); if (j = BLOCKS_PER_ITERATION) then timestamp_cntr := timestamp_cntr + TIME_BETWEEN_ITERATIONS; else timestamp_cntr := timestamp_cntr + 254; end if; when 3 => data_out := (others => '0'); when 4 => data_out := (others => '1'); end case; gpif_state_tx <= TX_META; fx3_gpif <= data_out; tx_data <= data_out; wait until rising_edge( fx3_pclk ); gpif_state_tx <= IDLE; tx_data <= (others => 'X'); end loop; end if; count := 0; for i in 1 to (BLOCK_SIZE - header_len) loop gpif_state_tx <= TX_SAMPLES; data_out := data_gen(count); if( eight_bit_mode_en = '1' ) then fx3_gpif <= data_out; tx_data <= data_out; else fx3_gpif <= std_logic_vector(to_unsigned(j, 8)) & data_out(23 downto 0); tx_data <= std_logic_vector(to_unsigned(j, 8)) & data_out(23 downto 0); end if; wait until rising_edge( fx3_pclk ); count := (count + 4) mod 128 when eight_bit_mode_en = '1' else (count + 2) mod 2048; gpif_state_tx <= IDLE; tx_data <= (others => 'X'); end loop; fx3_gpif <= (others =>'Z'); nop(fx3_pclk, 10); end loop; wait for 1 ms; dma_tx_enable <= '0'; wait for 10 us; end loop; report "Done with TX sample stream"; tx_done <= true; wait; end process; reset_system : process begin system_reset <= '1'; dma_idle <= '0'; nop( fx3_pclk, 100 ); system_reset <= '0'; nop( fx3_pclk, 10 ); dma_idle <= '1'; wait; end process; -- TODO: UART Interface fx3_uart_txd <= '1'; fx3_uart_cts <= '1'; assert (gpif_state_tx = IDLE and gpif_state_rx /= IDLE) or (gpif_state_rx = IDLE and gpif_state_tx /= IDLE) or (gpif_state_rx = IDLE and gpif_state_tx = IDLE) report "gpif_state_rx and gpif_state_tx cannot both be non-idle" severity failure; end architecture micro_dma; architecture micro_packet_dma of fx3_model is constant PCLK_HALF_PERIOD : time := 1 sec * (1.0/100.0e6/2.0); constant START_COUNT : natural := 32; constant BLOCKS_PER_ITERATION : natural := 4; constant ITERATIONS : natural := 4; -- Control mapping alias dma0_rx_ack is fx3_ctl( 0); alias dma1_rx_ack is fx3_ctl( 1); alias dma2_tx_ack is fx3_ctl( 2); alias dma3_tx_ack is fx3_ctl( 3); alias dma_rx_enable is fx3_ctl( 4); alias dma_tx_enable is fx3_ctl( 5); alias dma_idle is fx3_ctl( 6); alias system_reset is fx3_ctl( 7); alias dma0_rx_reqx is fx3_ctl( 8); alias dma1_rx_reqx is fx3_ctl(12); -- due to 9 being connected to dclk alias dma2_tx_reqx is fx3_ctl(10); alias dma3_tx_reqx is fx3_ctl(11); type gpif_state_t is (IDLE, TX_META, TX_SAMPLES, RX_SAMPLES); signal gpif_state_rx, gpif_state_tx : gpif_state_t; signal rx_done : boolean := false; signal tx_done : boolean := false; signal rx_data : std_logic_vector(31 downto 0); signal tx_data : std_logic_vector(31 downto 0); function data_gen (count : natural) return std_logic_vector is variable msw, lsw : std_logic_vector(15 downto 0); begin msw := (others =>'0');--std_logic_vector(to_signed(count+1, 16)); lsw := std_logic_vector(to_signed(count, 16)); return (msw & lsw); end function data_gen; function data_check (count : natural ; rxdata : std_logic_vector(31 downto 0)) return boolean is begin return (rxdata = data_gen(count)); end function data_check; begin -- DCLK which isn't used fx3_ctl(9) <= '0'; fx3_ctl(3 downto 0) <= (others => 'Z'); -- Create a 100MHz clock output fx3_pclk <= not fx3_pclk after PCLK_HALF_PERIOD when (not rx_done or not tx_done) else '0'; -- Doneness done <= rx_done and tx_done; rx_sample_stream : process constant BLOCK_SIZE : natural := 512; variable count : natural := START_COUNT; variable req_time : time; begin gpif_state_rx <= IDLE; dma0_rx_reqx <= '1'; dma1_rx_reqx <= '1'; dma_rx_enable <= '0'; rx_data <= (others => 'U'); wait until rising_edge(fx3_pclk) and system_reset = '0'; nop(fx3_pclk, 1000); wait until rising_edge(fx3_pclk) and fx3_rx_en = '1'; wait for 30 us; for j in 1 to ITERATIONS loop dma_rx_enable <= '1'; for i in 1 to BLOCKS_PER_ITERATION loop dma0_rx_reqx <= '0'; req_time := now; wait until rising_edge( fx3_pclk ) and dma0_rx_ack = '1'; wait until rising_edge( fx3_pclk ); dma0_rx_reqx <= '1'; report "RX iteration " & to_string(j) & " block " & to_string(i) & " delay " & to_string(now - req_time); for i in 1 to BLOCK_SIZE loop gpif_state_rx <= RX_SAMPLES; rx_data <= fx3_gpif; wait until rising_edge( fx3_pclk ); --assert data_check(count, rx_data) severity failure; count := (count + 1) mod 2048; gpif_state_rx <= IDLE; rx_data <= (others => 'X'); end loop; end loop; dma_rx_enable <= '0'; wait for 10 us; end loop; report "Done with RX sample stream"; rx_done <= true; wait; end process; tx_sample_stream : process constant TIME_BETWEEN_ITERATIONS : natural := 4556; constant BLOCK_SIZE : natural := 512; variable count : natural := START_COUNT; variable timestamp_cntr : natural := 250; variable header_len : natural := 0; variable packet_len : natural := 0; variable data_out : std_logic_vector(31 downto 0); variable req_time : time; begin gpif_state_tx <= IDLE; dma2_tx_reqx <= '1'; dma3_tx_reqx <= '1'; dma_tx_enable <= '0'; fx3_gpif <= (others =>'Z'); wait until rising_edge(fx3_pclk) and system_reset = '0'; nop(fx3_pclk, 1000); wait until rising_edge(fx3_pclk) and fx3_tx_en = '1'; wait for 30 us; for k in 1 to ITERATIONS loop dma_tx_enable <= '1'; for j in 1 to BLOCKS_PER_ITERATION loop header_len := 0; dma3_tx_reqx <= '0'; req_time := now; wait until rising_edge( fx3_pclk ) and dma3_tx_ack = '1'; wait until rising_edge( fx3_pclk ); wait until rising_edge( fx3_pclk ); wait until rising_edge( fx3_pclk ); dma3_tx_reqx <= '1'; report "TX iteration " & to_string(k) & " block " & to_string(j) & " delay " & to_string(now - req_time); packet_len := 36; if( fx3_tx_meta_en = '1') then header_len := 4; for i in 1 to 4 loop case (i) is when 1 => data_out := x"100000" & std_logic_vector(to_unsigned(packet_len-1, 8)); when 2 => data_out(31 downto 0) := std_logic_vector(to_signed(timestamp_cntr, 32)); if (j = BLOCKS_PER_ITERATION) then timestamp_cntr := timestamp_cntr + TIME_BETWEEN_ITERATIONS; else timestamp_cntr := timestamp_cntr + 50; end if; when 3 => data_out := (others => '0'); when 4 => data_out := (others => '1'); end case; gpif_state_tx <= TX_META; fx3_gpif <= data_out; tx_data <= data_out; wait until rising_edge( fx3_pclk ); gpif_state_tx <= IDLE; tx_data <= (others => 'X'); end loop; end if; count := 0; for i in 1 to packet_len loop gpif_state_tx <= TX_SAMPLES; data_out := data_gen(count); fx3_gpif <= std_logic_vector(to_unsigned(j, 8)) & data_out(23 downto 0); tx_data <= std_logic_vector(to_unsigned(j, 8)) & data_out(23 downto 0); wait until rising_edge( fx3_pclk ); count := (count + 1) mod 2048; gpif_state_tx <= IDLE; tx_data <= (others => 'X'); end loop; fx3_gpif <= (others =>'Z'); nop(fx3_pclk, 10); end loop; wait for 1 ms; dma_tx_enable <= '0'; wait for 10 us; end loop; report "Done with TX sample stream"; tx_done <= true; wait; end process; reset_system : process begin system_reset <= '1'; dma_idle <= '0'; nop( fx3_pclk, 100 ); system_reset <= '0'; nop( fx3_pclk, 10 ); dma_idle <= '1'; wait; end process; -- TODO: UART Interface fx3_uart_txd <= '1'; fx3_uart_cts <= '1'; assert (gpif_state_tx = IDLE and gpif_state_rx /= IDLE) or (gpif_state_rx = IDLE and gpif_state_tx /= IDLE) or (gpif_state_rx = IDLE and gpif_state_tx = IDLE) report "gpif_state_rx and gpif_state_tx cannot both be non-idle" severity failure; end architecture micro_packet_dma; bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/vhdl/tb/fx3_pll.vhd000066400000000000000000000035601457144405000250120ustar00rootroot00000000000000-- Copyright (c) 2017 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee ; use ieee.std_logic_1164.all ; entity fx3_pll is port ( refclk : in std_logic; rst : in std_logic; outclk_0 : out std_logic; locked : out std_logic ); end entity ; -- fx3_pll architecture simulation of fx3_pll is constant PHASE_OFFSET : time := 1 sec * (1.0/100.0e6) - 500 ps; signal outclk : std_logic := '1'; begin -- Generate 80 MHz clock outclk <= refclk after PHASE_OFFSET; -- Send it out... simulate_pll : process(rst, outclk) is begin if (rst = '1') then outclk_0 <= '0'; locked <= '0'; else outclk_0 <= outclk; locked <= '1'; end if; end process ; end architecture ; -- simulation bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/vhdl/tb/loopback_tb.vhd000066400000000000000000000031531457144405000257200ustar00rootroot00000000000000-- Copyright (c) 2017 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; use ieee.math_real.all ; use ieee.math_complex.all ; library nuand ; entity loopback_tb is end entity ; -- loopback_tb architecture arch of loopback_tb is begin U_sample_stream_tb : entity work.sample_stream_tb generic map ( NUM_MIMO_STREAMS => 2, FIFO_READER_READ_THROTTLE => 0, ENABLE_CHANNEL_0 => '1', ENABLE_CHANNEL_1 => '0' ); end architecture ; -- arch bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/vhdl/tb/nios_system.vhd000066400000000000000000000255041457144405000260210ustar00rootroot00000000000000-- Copyright (c) 2013-2017 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee ; use ieee.std_logic_1164.all ; entity nios_system is port ( ad9361_adc_i0_enable : out std_logic; -- enable ad9361_adc_i0_valid : out std_logic; -- valid ad9361_adc_i0_data : out std_logic_vector(15 downto 0); -- data ad9361_adc_i1_enable : out std_logic; -- enable ad9361_adc_i1_valid : out std_logic; -- valid ad9361_adc_i1_data : out std_logic_vector(15 downto 0); -- data ad9361_adc_overflow_ovf : in std_logic := 'X'; -- ovf ad9361_adc_q0_enable : out std_logic; -- enable ad9361_adc_q0_valid : out std_logic; -- valid ad9361_adc_q0_data : out std_logic_vector(15 downto 0); -- data ad9361_adc_q1_enable : out std_logic; -- enable ad9361_adc_q1_valid : out std_logic; -- valid ad9361_adc_q1_data : out std_logic_vector(15 downto 0); -- data ad9361_adc_underflow_unf : in std_logic := 'X'; -- unf ad9361_dac_i0_enable : out std_logic; -- enable ad9361_dac_i0_valid : out std_logic; -- valid ad9361_dac_i0_data : in std_logic_vector(15 downto 0) := (others => 'X'); -- data ad9361_dac_i1_enable : out std_logic; -- enable ad9361_dac_i1_valid : out std_logic; -- valid ad9361_dac_i1_data : in std_logic_vector(15 downto 0) := (others => 'X'); -- data ad9361_dac_overflow_ovf : in std_logic := 'X'; -- ovf ad9361_dac_q0_enable : out std_logic; -- enable ad9361_dac_q0_valid : out std_logic; -- valid ad9361_dac_q0_data : in std_logic_vector(15 downto 0) := (others => 'X'); -- data ad9361_dac_q1_enable : out std_logic; -- enable ad9361_dac_q1_valid : out std_logic; -- valid ad9361_dac_q1_data : in std_logic_vector(15 downto 0) := (others => 'X'); -- data ad9361_dac_sync_in_sync : in std_logic := 'X'; -- sync ad9361_dac_sync_out_sync : out std_logic; -- sync ad9361_dac_underflow_unf : in std_logic := 'X'; -- unf ad9361_data_clock_clk : out std_logic; -- clk ad9361_data_reset_reset : out std_logic; -- reset ad9361_device_if_rx_clk_in_p : in std_logic := 'X'; -- rx_clk_in_p ad9361_device_if_rx_clk_in_n : in std_logic := 'X'; -- rx_clk_in_n ad9361_device_if_rx_frame_in_p : in std_logic := 'X'; -- rx_frame_in_p ad9361_device_if_rx_frame_in_n : in std_logic := 'X'; -- rx_frame_in_n ad9361_device_if_rx_data_in_p : in std_logic_vector(5 downto 0) := (others => 'X'); -- rx_data_in_p ad9361_device_if_rx_data_in_n : in std_logic_vector(5 downto 0) := (others => 'X'); -- rx_data_in_n ad9361_device_if_tx_clk_out_p : out std_logic; -- tx_clk_out_p ad9361_device_if_tx_clk_out_n : out std_logic; -- tx_clk_out_n ad9361_device_if_tx_frame_out_p : out std_logic; -- tx_frame_out_p ad9361_device_if_tx_frame_out_n : out std_logic; -- tx_frame_out_n ad9361_device_if_tx_data_out_p : out std_logic_vector(5 downto 0); -- tx_data_out_p ad9361_device_if_tx_data_out_n : out std_logic_vector(5 downto 0); -- tx_data_out_n clk_clk : in std_logic := 'X'; -- clk command_serial_in : in std_logic := 'X'; -- serial_in command_serial_out : out std_logic; -- serial_out dac_MISO : in std_logic := 'X'; -- MISO dac_MOSI : out std_logic; -- MOSI dac_SCLK : out std_logic; -- SCLK dac_SS_n : out std_logic_vector(1 downto 0); -- SS_n gpio_in_port : in std_logic_vector(31 downto 0); -- in_port gpio_out_port : out std_logic_vector(31 downto 0); -- out_port gpio_rffe_0_in_port : in std_logic_vector(31 downto 0) := (others => 'X'); -- in_port gpio_rffe_0_out_port : out std_logic_vector(31 downto 0); -- out_port oc_i2c_scl_pad_o : out std_logic; -- scl_pad_o oc_i2c_scl_padoen_o : out std_logic; -- scl_padoen_o oc_i2c_sda_pad_i : in std_logic := 'X'; -- sda_pad_i oc_i2c_sda_pad_o : out std_logic; -- sda_pad_o oc_i2c_sda_padoen_o : out std_logic; -- sda_padoen_o oc_i2c_arst_i : in std_logic := 'X'; -- arst_i oc_i2c_scl_pad_i : in std_logic := 'X'; -- scl_pad_i reset_reset_n : in std_logic := 'X'; -- reset_n rx_tamer_ts_sync_in : in std_logic := 'X'; -- ts_sync_in rx_tamer_ts_sync_out : out std_logic; -- ts_sync_out rx_tamer_ts_pps : in std_logic := 'X'; -- ts_pps rx_tamer_ts_clock : in std_logic := 'X'; -- ts_clock rx_tamer_ts_reset : in std_logic := 'X'; -- ts_reset rx_tamer_ts_time : out std_logic_vector(63 downto 0); -- ts_time rx_trigger_ctl_in_port : in std_logic_vector(7 downto 0) := (others => 'X'); -- in_port rx_trigger_ctl_out_port : out std_logic_vector(7 downto 0); -- out_port spi_MISO : in std_logic := 'X'; -- MISO spi_MOSI : out std_logic; -- MOSI spi_SCLK : out std_logic; -- SCLK spi_SS_n : out std_logic; -- SS_n tx_tamer_ts_sync_in : in std_logic := 'X'; -- ts_sync_in tx_tamer_ts_sync_out : out std_logic; -- ts_sync_out tx_tamer_ts_pps : in std_logic := 'X'; -- ts_pps tx_tamer_ts_clock : in std_logic := 'X'; -- ts_clock tx_tamer_ts_reset : in std_logic := 'X'; -- ts_reset tx_tamer_ts_time : out std_logic_vector(63 downto 0); -- ts_time tx_trigger_ctl_in_port : in std_logic_vector(7 downto 0) := (others => 'X'); -- in_port tx_trigger_ctl_out_port : out std_logic_vector(7 downto 0); -- out_port xb_gpio_in_port : in std_logic_vector(31 downto 0) := (others => 'X'); -- in_port xb_gpio_out_port : out std_logic_vector(31 downto 0); -- out_port xb_gpio_dir_export : out std_logic_vector(31 downto 0) -- export ); end entity ; architecture sim of nios_system is begin command_serial_out <= '1' ; dac_MOSI <= '0' ; dac_SCLK <= '0' ; dac_SS_n <= (others =>'1') ; gpio_out_port <= x"0001_0157" after 1 us ; oc_i2c_scl_pad_o <= '0' ; oc_i2c_scl_padoen_o <= '1' ; oc_i2c_sda_pad_o <= '0' ; oc_i2c_sda_padoen_o <= '1' ; rx_tamer_ts_sync_out <= '0' ; rx_tamer_ts_time <= (others =>'0') ; spi_MOSI <= '0' ; spi_SCLK <= '0' ; spi_SS_n <= '1' ; tx_tamer_ts_sync_out <= '0' ; tx_tamer_ts_time <= (others =>'0') ; xb_gpio_out_port <= (others =>'0') ; xb_gpio_dir_export <= (others =>'0') ; end architecture ; bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/vhdl/tb/rx_counter_8bit_tb.vhd000066400000000000000000000675461457144405000272640ustar00rootroot00000000000000-- Copyright (c) 2022 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; library rtl_work; library altera_lnsim; use altera_lnsim.altera_pll; library nuand; use nuand.util.all ; use nuand.fifo_readwrite_p.all; use nuand.common_dcfifo_p.all; use nuand.bladerf_p.all; entity rx_counter_8bit_tb is generic ( -- For bladeRF2 (2x2 MIMO): NUM_MIMO_STREAMS : natural := 2; FIFO_READER_READ_THROTTLE : natural := 0; ENABLE_CHANNEL_0 : std_logic := '1'; ENABLE_CHANNEL_1 : std_logic := '0'; EIGHT_BIT_MODE_EN : std_logic := '1' ); end entity; architecture arch of rx_counter_8bit_tb is -- bladerf-hosted uses ad9361.clock (125 MHz) for rx_clock and tx_clock constant SYSCLK_HALF_PERIOD : time := 1 sec * (1.0/125.0e6/2.0); -- For reasons unknown, simulation of this system in ModelSim requires that -- wrreq and data be asserted shortly before the rising clock edge. Sigh... constant FIFO_WORKAROUND : time := 1 ps; type fx3_control_t is record usb_speed : std_logic; tx_enable : std_logic; rx_enable : std_logic; meta_enable : std_logic; packet : std_logic; end record; type fx3_gpif_t is record gpif_in : std_logic_vector(31 downto 0); gpif_out : std_logic_vector(31 downto 0); gpif_oe : std_logic; ctl_in : std_logic_vector(12 downto 0); ctl_out : std_logic_vector(12 downto 0); ctl_oe : std_logic_vector(12 downto 0); end record; type rx_mux_mode_t is ( RX_MUX_NORMAL, RX_MUX_12BIT_COUNTER, RX_MUX_32BIT_COUNTER, RX_MUX_ENTROPY, RX_MUX_DIGITAL_LOOPBACK ); signal sys_rst : std_logic := '1'; signal done : boolean := false; signal fx3_pclk : std_logic := '1'; signal fx3_pclk_pll : std_logic := '1'; signal sys_clk : std_logic := '1'; signal pll_reset : std_logic := '0'; signal pll_locked : std_logic := '0'; signal fx3_control : fx3_control_t; signal fx3_gpif : fx3_gpif_t; signal fx3_gpif_i : std_logic_vector(31 downto 0); signal fx3_ctl_i : std_logic_vector(12 downto 0); -- Control mapping alias dma0_rx_ack is fx3_ctl_i( 0); alias dma1_rx_ack is fx3_ctl_i( 1); alias dma2_tx_ack is fx3_ctl_i( 2); alias dma3_tx_ack is fx3_ctl_i( 3); alias dma_rx_enable is fx3_ctl_i( 4); alias dma_tx_enable is fx3_ctl_i( 5); alias dma_idle is fx3_ctl_i( 6); alias system_reset is fx3_ctl_i( 7); alias dma0_rx_reqx is fx3_ctl_i( 8); alias dma1_rx_reqx is fx3_ctl_i(12); -- due to 9 being connected to dclk alias dma2_tx_reqx is fx3_ctl_i(10); alias dma3_tx_reqx is fx3_ctl_i(11); signal loopback_i : signed(15 downto 0) := (others =>'0'); signal loopback_q : signed(15 downto 0) := (others =>'0'); signal loopback_valid : std_logic := '0'; signal loopback_enabled : std_logic := '0'; signal tx_clock : std_logic := '1' ; signal rx_clock : std_logic := '1' ; signal rx_sample_fifo : rx_fifo_t := RX_FIFO_T_DEFAULT; signal tx_sample_fifo : tx_fifo_t := TX_FIFO_T_DEFAULT; signal loopback_fifo : loopback_fifo_t := LOOPBACK_FIFO_T_DEFAULT; signal rx_meta_fifo : meta_fifo_rx_t := META_FIFO_RX_T_DEFAULT; signal tx_meta_fifo : meta_fifo_tx_t := META_FIFO_TX_T_DEFAULT; signal rx_mux_i : signed(15 downto 0); signal rx_mux_q : signed(15 downto 0); signal rx_mux_valid : std_logic; signal rx_mux_mode : rx_mux_mode_t := RX_MUX_32BIT_COUNTER; signal tx_timestamp : unsigned(63 downto 0) := ( others => '0' ); signal rx_timestamp : unsigned(63 downto 0) := ( others => '0' ); constant FX3_HALF_PERIOD : time := 1.0/(100.0e6)/2.0*1 sec ; constant TX_HALF_PERIOD : time := 1.0/(9.0e6)/2.0*1 sec ; constant RX_HALF_PERIOD : time := 1.0/(9.0e6)/2.0*1 sec ; signal dac_controls : sample_controls_t(0 to NUM_MIMO_STREAMS-1) := (others => SAMPLE_CONTROL_DISABLE); signal dac_streams : sample_streams_t(dac_controls'range) := (others => ZERO_SAMPLE); signal adc_controls : sample_controls_t(0 to NUM_MIMO_STREAMS-1) := (others => SAMPLE_CONTROL_DISABLE); signal adc_streams : sample_streams_t(adc_controls'range) := (others => ZERO_SAMPLE); signal tx_reset : std_logic := '0'; signal tx_ts_reset : std_logic := '0'; signal rx_reset : std_logic := '0'; signal rx_ts_reset : std_logic := '0'; signal meta_en_tx : std_logic := '0'; signal meta_en_rx : std_logic := '0'; signal rx_packet_control : packet_control_t := PACKET_CONTROL_DEFAULT; signal tx_packet_control : packet_control_t; signal rx_packet_ready : std_logic; signal trigger_signal_sync_tb : std_logic; signal adc_stream_val_at_rx_enable : signed(15 downto 0) := ( others => '0' ); function data_gen (count : natural) return std_logic_vector is variable msw, lsw : std_logic_vector(15 downto 0); begin msw := std_logic_vector(to_signed(count, 16)); lsw := std_logic_vector(to_signed(-count, 16)); return (msw & lsw); end function data_gen; begin -- ======================================================================== -- Brief summary of data flow -- ======================================================================== -- -- Simulated samples flow from fx3_model's TX side to its RX side. The -- validity of the data is checked there. -- -- entity U_fx3_model FX3 model, TX process -- signal fx3_gpif_i fx3_gpif.gpif_oe is '0' -- process register_gpif -- signal fx3_gpif.gpif_in Demuxed GPIF interface (FX3 -> FPGA) -- entity U_fx3_gpif GPIF implementation, write side -- signal tx_sample_fifo.w* TX fifo, write side -- entity U_tx_sample_fifo -- signal tx_sample_fifo.r* TX fifo, read side -- process tx_mux -- signal loopback_fifo.w* Loopback fifo, write side -- entity U_rx_loopback_fifo -- signal loopback_fifo.r* Loopback fifo, read side -- process loopback_fifo_control -- signal loopback_{i,q,valid} -- process rx_mux -- signal rx_mux_{i,q,valid} -- entity U_fifo_writer -- signal rx_sample_fifo.w* RX fifo, write side -- entity U_rx_sample_fifo -- signal rx_sample_fifo.r* RX fifo, read side -- entity U_fx3_gpif GPIF implementation, read side -- signal fx3_gpif.gpif_out Demuxed GPIF interface (FPGA -> FX3) -- process register_gpif -- signal fx3_gpif_i fx3_gpif.gpif_oe is '1' -- entity U_fx3_model FX3 model, RX process -- ======================================================================== -- Instantiations -- ======================================================================== -- Unit under test -- Clock domain: fx3_pclk_pll U_fx3_gpif : entity nuand.fx3_gpif port map ( pclk => fx3_pclk_pll, reset => sys_rst, usb_speed => fx3_control.usb_speed, gpif_in => fx3_gpif.gpif_in, gpif_out => fx3_gpif.gpif_out, gpif_oe => fx3_gpif.gpif_oe, ctl_in => fx3_gpif.ctl_in, ctl_out => fx3_gpif.ctl_out, ctl_oe => fx3_gpif.ctl_oe, tx_enable => fx3_control.tx_enable, rx_enable => fx3_control.rx_enable, meta_enable => fx3_control.meta_enable, packet_enable => fx3_control.packet, tx_fifo_write => tx_sample_fifo.wreq, tx_fifo_full => tx_sample_fifo.wfull, tx_fifo_empty => tx_sample_fifo.wempty, tx_fifo_usedw => tx_sample_fifo.wused, tx_fifo_data => tx_sample_fifo.wdata, tx_timestamp => tx_timestamp, tx_meta_fifo_write => tx_meta_fifo.wreq, tx_meta_fifo_full => tx_meta_fifo.wfull, tx_meta_fifo_empty => tx_meta_fifo.wempty, tx_meta_fifo_usedw => tx_meta_fifo.wused, tx_meta_fifo_data => tx_meta_fifo.wdata, rx_fifo_read => rx_sample_fifo.rreq, rx_fifo_full => rx_sample_fifo.rfull, rx_fifo_empty => rx_sample_fifo.rempty, rx_fifo_usedw => rx_sample_fifo.rused, rx_fifo_data => rx_sample_fifo.rdata, rx_meta_fifo_read => rx_meta_fifo.rreq, rx_meta_fifo_full => rx_meta_fifo.rfull, rx_meta_fifo_empty => rx_meta_fifo.rempty, rx_meta_fifo_usedr => rx_meta_fifo.rused, rx_meta_fifo_data => rx_meta_fifo.rdata ); -- Discrete control signals for fx3_gpif fx3_control.usb_speed <= '0'; fx3_control.meta_enable <= '0'; fx3_control.packet <= '0'; U_pkt_gen : entity nuand.rx_packet_generator port map( rx_clock => rx_clock, rx_reset => rx_reset, rx_enable => fx3_control.rx_enable, rx_packet_enable => fx3_control.packet, rx_packet_ready => rx_packet_ready, rx_packet_control => rx_packet_control ); meta_en_tx <= fx3_control.meta_enable; meta_en_rx <= fx3_control.meta_enable; increment_tx_ts : process(tx_clock) variable ping : boolean := true ; begin if( rising_edge(tx_clock) ) then ping := not ping ; if( ping = true ) then tx_timestamp <= tx_timestamp + 1 ; end if ; end if ; end process ; increment_rx_ts : process(rx_clock) variable ping : boolean := true ; begin if( rising_edge(rx_clock) ) then ping := not ping ; if( ping = true ) then rx_timestamp <= rx_timestamp + 1 ; end if ; end if ; end process ; -- Model of FX3's GPIF interface -- Clock domain: fx3_pclk (source) U_fx3_model : entity nuand.fx3_model(micro_dma) port map ( fx3_pclk => fx3_pclk, fx3_gpif => fx3_gpif_i, fx3_ctl => fx3_ctl_i, fx3_uart_rxd => '0', fx3_uart_txd => open, fx3_uart_cts => open, fx3_rx_en => '1', fx3_rx_meta_en => meta_en_rx, fx3_tx_en => '1', fx3_tx_meta_en => meta_en_tx, eight_bit_mode_en => EIGHT_BIT_MODE_EN, done => done ); -- Generate phase-shifted PLL clock U_fx3_pll : entity rtl_work.fx3_pll port map ( inclk0 => fx3_pclk, areset => pll_reset, c0 => fx3_pclk_pll, locked => pll_locked ); tx_clock <= not tx_clock after TX_HALF_PERIOD ; rx_clock <= not rx_clock after RX_HALF_PERIOD ; -- Reset handler sys_rst <= '0' after 100 ns; -- Generate system clock sys_clk <= not sys_clk after SYSCLK_HALF_PERIOD when not done else '0'; tx_reset <= sys_rst; tx_ts_reset <= sys_rst; rx_reset <= sys_rst; rx_ts_reset <= sys_rst; meta_en_tx <= fx3_control.meta_enable; meta_en_rx <= fx3_control.meta_enable; -- TX Submodule U_tx : entity work.tx generic map ( NUM_STREAMS => dac_controls'length ) port map ( tx_reset => tx_reset, tx_clock => tx_clock, tx_enable => fx3_control.tx_enable, meta_en => meta_en_tx, timestamp_reset => tx_ts_reset, usb_speed => fx3_control.usb_speed, tx_underflow_led => open, tx_timestamp => tx_timestamp, -- Triggering trigger_arm => '0', trigger_fire => '0', trigger_master => '0', trigger_line => open, -- Packet FIFO packet_en => fx3_control.packet, packet_empty => open, packet_control => tx_packet_control, packet_ready => '1', -- 8-bit mode eight_bit_mode_en => EIGHT_BIT_MODE_EN, -- Samples from host via FX3 sample_fifo_wclock => fx3_pclk_pll, sample_fifo_wreq => tx_sample_fifo.wreq, sample_fifo_wdata => tx_sample_fifo.wdata, sample_fifo_wempty => tx_sample_fifo.wempty, sample_fifo_wfull => tx_sample_fifo.wfull, sample_fifo_wused => tx_sample_fifo.wused, -- Metadata from host via FX3 meta_fifo_wclock => fx3_pclk_pll, meta_fifo_wreq => tx_meta_fifo.wreq, meta_fifo_wdata => tx_meta_fifo.wdata, meta_fifo_wempty => tx_meta_fifo.wempty, meta_fifo_wfull => tx_meta_fifo.wfull, meta_fifo_wused => tx_meta_fifo.wused, -- Digital Loopback Interface loopback_enabled => '0', loopback_fifo_wdata => loopback_fifo.wdata, loopback_fifo_wreq => loopback_fifo.wreq, loopback_fifo_wfull => loopback_fifo.wfull, loopback_fifo_wused => loopback_fifo.wused, -- RFFE Interface dac_controls => dac_controls, dac_streams => dac_streams ); -- RX Submodule U_rx : entity work.rx generic map ( NUM_STREAMS => adc_controls'length ) port map ( rx_reset => rx_reset, rx_clock => rx_clock, rx_enable => fx3_control.rx_enable, meta_en => meta_en_rx, timestamp_reset => rx_ts_reset, usb_speed => fx3_control.usb_speed, rx_mux_sel => to_unsigned(2, 3), rx_overflow_led => open, rx_timestamp => rx_timestamp, -- Triggering trigger_arm => '0', trigger_fire => '0', trigger_master => '0', trigger_line => open, trigger_signal_sync_tb => trigger_signal_sync_tb, -- Packet FIFO packet_en => fx3_control.packet, packet_control => rx_packet_control, packet_ready => rx_packet_ready, -- 8-bit mode eight_bit_mode_en => EIGHT_BIT_MODE_EN, -- Samples to host via FX3 sample_fifo_rclock => fx3_pclk_pll, sample_fifo_raclr => not fx3_control.rx_enable, sample_fifo_rreq => rx_sample_fifo.rreq, sample_fifo_rdata => rx_sample_fifo.rdata, sample_fifo_rempty => rx_sample_fifo.rempty, sample_fifo_rfull => rx_sample_fifo.rfull, sample_fifo_rused => rx_sample_fifo.rused, -- Mini expansion signals mini_exp => "00", -- Metadata to host via FX3 meta_fifo_rclock => fx3_pclk_pll, meta_fifo_raclr => not fx3_control.rx_enable, meta_fifo_rreq => rx_meta_fifo.rreq, meta_fifo_rdata => rx_meta_fifo.rdata, meta_fifo_rempty => rx_meta_fifo.rempty, meta_fifo_rfull => rx_meta_fifo.rfull, meta_fifo_rused => rx_meta_fifo.rused, -- Digital Loopback Interface loopback_fifo_wenabled => open, loopback_fifo_wreset => tx_reset, loopback_fifo_wclock => tx_clock, loopback_fifo_wdata => loopback_fifo.wdata, loopback_fifo_wreq => loopback_fifo.wreq, loopback_fifo_wfull => loopback_fifo.wfull, loopback_fifo_wused => loopback_fifo.wused, -- RFFE Interface adc_controls => adc_controls, adc_streams => adc_streams ); -- ======================================================================== -- Data converters -- ======================================================================== gen_dac_controls : if( NUM_MIMO_STREAMS > 1 ) generate -- The TX side of the AD9361 HDL is a FIFO pull interface -- that expects a readahead FIFO. It toggles the data request -- signal every other cycle. This behavior is mimicked here. process( tx_clock, sys_rst ) begin if( sys_rst = '1' ) then dac_controls <= ( 0 => (enable => ENABLE_CHANNEL_0, data_req => '1'), 1 => (enable => ENABLE_CHANNEL_1, data_req => '1') ); elsif( rising_edge(tx_clock) ) then for i in dac_controls'range loop dac_controls(i) <= ( enable => dac_controls(i).enable, data_req => not dac_controls(i).data_req ); end loop; end if; end process; else generate dac_controls <= (others => SAMPLE_CONTROL_ENABLE); end generate; gen_adc_controls : if( NUM_MIMO_STREAMS > 1 ) generate process( rx_clock, sys_rst ) constant SIGMA_DELTA_BITS : signed (3 downto 0) := "0000"; constant COUNT_RESET : integer := 0; variable count : integer range -2047 to 2047 := COUNT_RESET; begin if( sys_rst = '1' ) then count := COUNT_RESET; adc_controls <= ( 0 => (enable => ENABLE_CHANNEL_0, data_req => '1'), 1 => (enable => ENABLE_CHANNEL_1, data_req => '1') ); elsif( rising_edge(rx_clock) ) then for i in adc_controls'range loop adc_controls(i) <= ( enable => adc_controls(i).enable, data_req => not adc_controls(i).data_req ); if( adc_controls(i).enable = '1') then if( adc_streams(i).data_v = '1' ) then if( EIGHT_BIT_MODE_EN = '1' ) then adc_streams(i).data_i <= "0000" & to_signed(count, 8) & SIGMA_DELTA_BITS; adc_streams(i).data_q <= "0000" & to_signed(-count, 8) & SIGMA_DELTA_BITS; count := (count + 1) mod 128; else adc_streams(i).data_i <= to_signed(count, 16); adc_streams(i).data_q <= to_signed(-count, 16); count := (count + 1) mod 2048; end if; end if; adc_streams(i).data_v <= not adc_streams(i).data_v; end if; end loop; end if; end process; else generate adc_controls <= (others => SAMPLE_CONTROL_ENABLE); end generate; -- ======================================================================== -- Processes -- ======================================================================== -- FX3 GPIF bidirectional signal control -- Adapted from same process in bladerf-hosted.vhd register_gpif : process(sys_rst, fx3_pclk_pll) begin if( sys_rst = '1' ) then fx3_gpif_i <= (others => 'Z'); fx3_gpif.gpif_in <= (others => 'Z'); elsif( rising_edge(fx3_pclk_pll) ) then fx3_gpif.gpif_in <= fx3_gpif_i; if( fx3_gpif.gpif_oe = '1' ) then fx3_gpif_i <= fx3_gpif.gpif_out; else fx3_gpif_i <= (others =>'Z'); end if; end if; end process; -- FX3 CTL bidirectional signals -- Adapted from same generator in bladerf-hosted.vhd generate_ctl : for i in fx3_ctl_i'range generate fx3_ctl_i(i) <= fx3_gpif.ctl_out(i) when fx3_gpif.ctl_oe(i) = '1' else 'Z'; end generate; fx3_gpif.ctl_in <= fx3_ctl_i; -- Controller for loopback FIFO -- Stripped-down version of same process from rx.vhd loopback_fifo_control : process( sys_rst, loopback_fifo.rclock ) begin if( sys_rst = '1' ) then loopback_enabled <= '0'; loopback_fifo.rreq <= '0'; loopback_i <= (others => '0'); loopback_q <= (others => '0'); loopback_valid <= '0'; elsif( rising_edge(loopback_fifo.rclock) ) then loopback_enabled <= '0'; loopback_fifo.rreq <= '0'; loopback_i <= loopback_i; loopback_q <= loopback_q; loopback_valid <= '0'; -- Is loopback enabled? loopback_enabled <= fx3_control.rx_enable; -- Do the loopback loopback_i <= resize(signed(loopback_fifo.rdata(15 downto 0)), loopback_i'length); loopback_q <= resize(signed(loopback_fifo.rdata(31 downto 16)), loopback_q'length); loopback_valid <= loopback_fifo.rreq and not loopback_fifo.rempty; -- Read from the FIFO if req'd loopback_fifo.rreq <= loopback_enabled and (not loopback_fifo.rempty); end if; end process; -- RX multiplexer -- Stripped-down version of same process from rx.vhd rx_mux : process(sys_rst, sys_clk) begin if( sys_rst = '1' ) then rx_mux_i <= (others =>'0'); rx_mux_q <= (others =>'0'); rx_mux_valid <= '0'; elsif( rising_edge(sys_clk) ) then rx_mux_i <= loopback_i; rx_mux_q <= loopback_q; rx_mux_valid <= loopback_valid; end if; end process; -- TX multiplexer -- Stripped-down version of mimo_channel_sel_mux from tx.vhd --tx_mux : process( sys_clk ) --begin -- if( rising_edge(sys_clk) ) then -- tx_sample_fifo.rreq <= not tx_sample_fifo.rempty; -- loopback_fifo.wdata <= tx_sample_fifo.rdata; -- loopback_fifo.wreq <= tx_sample_fifo.rreq and not tx_sample_fifo.rempty; -- end if; --end process; -- ======================================================================== -- Verification -- ======================================================================== -- -- Check for metavalues -- We should never see metavalues written to the FIFOs -- check_fifo_write : process(fx3_pclk_pll) is begin if( rising_edge(fx3_pclk_pll) ) then if( tx_sample_fifo.wreq = '1' and fx3_control.meta_enable = '0' ) then for i in tx_sample_fifo.wdata'range loop assert tx_sample_fifo.wdata(i) = '0' or tx_sample_fifo.wdata(i) = '1' severity failure; end loop; end if; end if; end process; check_fifo_read : process(fx3_pclk_pll) is begin if( rising_edge(fx3_pclk_pll) ) then if( rx_sample_fifo.rreq = '1' ) then for i in rx_sample_fifo.rdata'range loop assert rx_sample_fifo.rdata(i) = '0' or rx_sample_fifo.rdata(i) = '1' severity failure; end loop; end if; end if; end process check_fifo_read; -- -- Check for fullness on FIFOs -- assert(rx_sample_fifo.wfull = '0') report "rx_sample_fifo full (write)" severity warning; assert(tx_sample_fifo.wfull = '0') report "tx_sample_fifo full (write)" severity warning; assert(loopback_fifo.wfull = '0') report "loopback_fifo full (write)" severity warning; -- -- Rx Sample Check -- look_for_dropped_rx_samples: process(fx3_pclk_pll) variable rx_val : unsigned (15 downto 0) := to_unsigned(1, 16); variable sample1_expected : std_logic_vector (15 downto 0); variable sample0_expected : std_logic_vector (15 downto 0); variable sample1 : std_logic_vector (15 downto 0); variable sample0 : std_logic_vector (15 downto 0); variable fail_count : natural := 0; variable both_channels_en : std_logic := ENABLE_CHANNEL_0 and ENABLE_CHANNEL_1; variable delay : std_logic := '0'; begin if (rising_edge(fx3_pclk_pll) and fx3_gpif.gpif_oe = '1' and fx3_control.rx_enable = '1') then sample1_expected := std_logic_vector(rx_val + 1) when not both_channels_en else std_logic_vector(rx_val); sample0_expected := std_logic_vector(rx_val); sample1 := fx3_gpif.gpif_out(31 downto 16); sample0 := fx3_gpif.gpif_out(15 downto 0); if (EIGHT_BIT_MODE_EN = '1') then assert(sample1 = sample1_expected and sample0 = sample0_expected) report lf&"sample0 " & to_hstring(sample0) &lf& "sample0_expected " & to_hstring(sample0_expected) &lf& "sample1 " & to_hstring(sample1) &lf& "sample1_expected " & to_hstring(sample1_expected) severity failure; rx_val := rx_val + 1 when both_channels_en else rx_val + 2; else -- the count doesn't spill over 16 bits assert(sample0 = std_logic_vector(rx_val)) report lf& "sample " & to_hstring(sample0) &lf& "sample_expected " & to_hstring(rx_val) severity failure; delay := not delay when both_channels_en else '0'; rx_val := rx_val + 1 when delay = '0' else rx_val; end if; end if; if (fx3_control.rx_enable = '0') then rx_val := to_unsigned(1, rx_val'length); delay := '0'; end if; end process look_for_dropped_rx_samples; end architecture; bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/vhdl/tb/rx_timestamp_tb.vhd000066400000000000000000000641751457144405000266550ustar00rootroot00000000000000-- Copyright (c) 2022 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; library rtl_work; library altera_lnsim; use altera_lnsim.altera_pll; library nuand; use nuand.util.all ; use nuand.fifo_readwrite_p.all; use nuand.common_dcfifo_p.all; use nuand.bladerf_p.all; entity rx_timestamp_tb is generic ( -- For bladeRF2 (2x2 MIMO): NUM_MIMO_STREAMS : natural := 2; FIFO_READER_READ_THROTTLE : natural := 0; ENABLE_CHANNEL_0 : std_logic := '1'; ENABLE_CHANNEL_1 : std_logic := '0'; EIGHT_BIT_MODE_EN : std_logic := '1' ); end entity; architecture arch of rx_timestamp_tb is -- bladerf-hosted uses ad9361.clock (125 MHz) for rx_clock and tx_clock constant SYSCLK_HALF_PERIOD : time := 1 sec * (1.0/125.0e6/2.0); -- For reasons unknown, simulation of this system in ModelSim requires that -- wrreq and data be asserted shortly before the rising clock edge. Sigh... constant FIFO_WORKAROUND : time := 1 ps; type fx3_control_t is record usb_speed : std_logic; tx_enable : std_logic; rx_enable : std_logic; meta_enable : std_logic; packet : std_logic; end record; type fx3_gpif_t is record gpif_in : std_logic_vector(31 downto 0); gpif_out : std_logic_vector(31 downto 0); gpif_oe : std_logic; ctl_in : std_logic_vector(12 downto 0); ctl_out : std_logic_vector(12 downto 0); ctl_oe : std_logic_vector(12 downto 0); end record; signal sys_rst : std_logic := '1'; signal done : boolean := false; signal fx3_pclk : std_logic := '1'; signal fx3_pclk_pll : std_logic := '1'; signal sys_clk : std_logic := '1'; signal pll_reset : std_logic := '0'; signal pll_locked : std_logic := '0'; signal fx3_control : fx3_control_t; signal fx3_gpif : fx3_gpif_t; signal fx3_gpif_i : std_logic_vector(31 downto 0); signal fx3_ctl_i : std_logic_vector(12 downto 0); -- Control mapping alias dma0_rx_ack is fx3_ctl_i( 0); alias dma1_rx_ack is fx3_ctl_i( 1); alias dma2_tx_ack is fx3_ctl_i( 2); alias dma3_tx_ack is fx3_ctl_i( 3); alias dma_rx_enable is fx3_ctl_i( 4); alias dma_tx_enable is fx3_ctl_i( 5); alias dma_idle is fx3_ctl_i( 6); alias system_reset is fx3_ctl_i( 7); alias dma0_rx_reqx is fx3_ctl_i( 8); alias dma1_rx_reqx is fx3_ctl_i(12); -- due to 9 being connected to dclk alias dma2_tx_reqx is fx3_ctl_i(10); alias dma3_tx_reqx is fx3_ctl_i(11); signal loopback_i : signed(15 downto 0) := (others =>'0'); signal loopback_q : signed(15 downto 0) := (others =>'0'); signal loopback_valid : std_logic := '0'; signal loopback_enabled : std_logic := '0'; signal tx_clock : std_logic := '1' ; signal rx_clock : std_logic := '1' ; signal rx_sample_fifo : rx_fifo_t := RX_FIFO_T_DEFAULT; signal tx_sample_fifo : tx_fifo_t := TX_FIFO_T_DEFAULT; signal loopback_fifo : loopback_fifo_t := LOOPBACK_FIFO_T_DEFAULT; signal rx_meta_fifo : meta_fifo_rx_t := META_FIFO_RX_T_DEFAULT; signal tx_meta_fifo : meta_fifo_tx_t := META_FIFO_TX_T_DEFAULT; signal rx_mux_i : signed(15 downto 0); signal rx_mux_q : signed(15 downto 0); signal rx_mux_valid : std_logic; signal tx_timestamp : unsigned(63 downto 0) := ( others => '0' ); signal rx_timestamp : unsigned(63 downto 0) := ( others => '0' ); constant FX3_HALF_PERIOD : time := 1.0/(100.0e6)/2.0*1 sec ; constant TX_HALF_PERIOD : time := 1.0/(9.0e6)/2.0*1 sec ; constant RX_HALF_PERIOD : time := 1.0/(9.0e6)/2.0*1 sec ; signal dac_controls : sample_controls_t(0 to NUM_MIMO_STREAMS-1) := (others => SAMPLE_CONTROL_DISABLE); signal dac_streams : sample_streams_t(dac_controls'range) := (others => ZERO_SAMPLE); signal adc_controls : sample_controls_t(0 to NUM_MIMO_STREAMS-1) := (others => SAMPLE_CONTROL_DISABLE); signal adc_streams : sample_streams_t(adc_controls'range) := (others => ZERO_SAMPLE); signal tx_reset : std_logic := '0'; signal tx_ts_reset : std_logic := '0'; signal rx_reset : std_logic := '0'; signal rx_ts_reset : std_logic := '0'; signal meta_en_tx : std_logic := '0'; signal meta_en_rx : std_logic := '0'; signal rx_packet_control : packet_control_t := PACKET_CONTROL_DEFAULT; signal tx_packet_control : packet_control_t; signal trigger_signal_sync_tb : std_logic; signal adc_stream_val_at_rx_enable : signed(15 downto 0) := ( others => '0' ); function data_gen (count : natural) return std_logic_vector is variable msw, lsw : std_logic_vector(15 downto 0); begin msw := std_logic_vector(to_signed(count, 16)); lsw := std_logic_vector(to_signed(-count, 16)); return (msw & lsw); end function data_gen; signal rx_packet_ready : std_logic; begin -- ======================================================================== -- Brief summary of data flow -- ======================================================================== -- -- Simulated samples flow from fx3_model's TX side to its RX side. The -- validity of the data is checked there. -- -- entity U_fx3_model FX3 model, TX process -- signal fx3_gpif_i fx3_gpif.gpif_oe is '0' -- process register_gpif -- signal fx3_gpif.gpif_in Demuxed GPIF interface (FX3 -> FPGA) -- entity U_fx3_gpif GPIF implementation, write side -- signal tx_sample_fifo.w* TX fifo, write side -- entity U_tx_sample_fifo -- signal tx_sample_fifo.r* TX fifo, read side -- process tx_mux -- signal loopback_fifo.w* Loopback fifo, write side -- entity U_rx_loopback_fifo -- signal loopback_fifo.r* Loopback fifo, read side -- process loopback_fifo_control -- signal loopback_{i,q,valid} -- process rx_mux -- signal rx_mux_{i,q,valid} -- entity U_fifo_writer -- signal rx_sample_fifo.w* RX fifo, write side -- entity U_rx_sample_fifo -- signal rx_sample_fifo.r* RX fifo, read side -- entity U_fx3_gpif GPIF implementation, read side -- signal fx3_gpif.gpif_out Demuxed GPIF interface (FPGA -> FX3) -- process register_gpif -- signal fx3_gpif_i fx3_gpif.gpif_oe is '1' -- entity U_fx3_model FX3 model, RX process -- ======================================================================== -- Instantiations -- ======================================================================== -- Unit under test -- Clock domain: fx3_pclk_pll U_fx3_gpif : entity nuand.fx3_gpif port map ( pclk => fx3_pclk_pll, reset => sys_rst, usb_speed => fx3_control.usb_speed, gpif_in => fx3_gpif.gpif_in, gpif_out => fx3_gpif.gpif_out, gpif_oe => fx3_gpif.gpif_oe, ctl_in => fx3_gpif.ctl_in, ctl_out => fx3_gpif.ctl_out, ctl_oe => fx3_gpif.ctl_oe, tx_enable => fx3_control.tx_enable, rx_enable => fx3_control.rx_enable, meta_enable => fx3_control.meta_enable, packet_enable => fx3_control.packet, tx_fifo_write => tx_sample_fifo.wreq, tx_fifo_full => tx_sample_fifo.wfull, tx_fifo_empty => tx_sample_fifo.wempty, tx_fifo_usedw => tx_sample_fifo.wused, tx_fifo_data => tx_sample_fifo.wdata, tx_timestamp => tx_timestamp, tx_meta_fifo_write => tx_meta_fifo.wreq, tx_meta_fifo_full => tx_meta_fifo.wfull, tx_meta_fifo_empty => tx_meta_fifo.wempty, tx_meta_fifo_usedw => tx_meta_fifo.wused, tx_meta_fifo_data => tx_meta_fifo.wdata, rx_fifo_read => rx_sample_fifo.rreq, rx_fifo_full => rx_sample_fifo.rfull, rx_fifo_empty => rx_sample_fifo.rempty, rx_fifo_usedw => rx_sample_fifo.rused, rx_fifo_data => rx_sample_fifo.rdata, rx_meta_fifo_read => rx_meta_fifo.rreq, rx_meta_fifo_full => rx_meta_fifo.rfull, rx_meta_fifo_empty => rx_meta_fifo.rempty, rx_meta_fifo_usedr => rx_meta_fifo.rused, rx_meta_fifo_data => rx_meta_fifo.rdata ); -- Discrete control signals for fx3_gpif fx3_control.usb_speed <= '0'; fx3_control.meta_enable <= '1'; fx3_control.packet <= '0'; U_pkt_gen : entity nuand.rx_packet_generator port map( rx_clock => rx_clock, rx_reset => rx_reset, rx_enable => fx3_control.rx_enable, rx_packet_enable => fx3_control.packet, rx_packet_ready => rx_packet_ready, rx_packet_control => rx_packet_control ); meta_en_tx <= fx3_control.meta_enable; meta_en_rx <= fx3_control.meta_enable; increment_tx_ts : process(tx_clock) variable ping : boolean := true ; begin if( rising_edge(tx_clock) ) then ping := not ping ; if( ping = true ) then tx_timestamp <= tx_timestamp + 1 ; end if ; end if ; end process ; increment_rx_ts : process(rx_clock) variable ping : boolean := true ; begin if( rising_edge(rx_clock) ) then ping := not ping ; if( ping = true ) then rx_timestamp <= rx_timestamp + 1 ; end if ; end if ; end process ; -- Model of FX3's GPIF interface -- Clock domain: fx3_pclk (source) U_fx3_model : entity nuand.fx3_model(micro_dma) port map ( fx3_pclk => fx3_pclk, fx3_gpif => fx3_gpif_i, fx3_ctl => fx3_ctl_i, fx3_uart_rxd => '0', fx3_uart_txd => open, fx3_uart_cts => open, fx3_rx_en => '1', fx3_rx_meta_en => meta_en_rx, fx3_tx_en => '1', fx3_tx_meta_en => meta_en_tx, eight_bit_mode_en => EIGHT_BIT_MODE_EN, done => done ); -- Generate phase-shifted PLL clock U_fx3_pll : entity rtl_work.fx3_pll port map ( inclk0 => fx3_pclk, areset => pll_reset, c0 => fx3_pclk_pll, locked => pll_locked ); tx_clock <= not tx_clock after TX_HALF_PERIOD ; rx_clock <= not rx_clock after RX_HALF_PERIOD ; -- Reset handler sys_rst <= '0' after 100 ns; -- Generate system clock sys_clk <= not sys_clk after SYSCLK_HALF_PERIOD when not done else '0'; tx_reset <= sys_rst; tx_ts_reset <= sys_rst; rx_reset <= sys_rst; rx_ts_reset <= sys_rst; meta_en_tx <= fx3_control.meta_enable; meta_en_rx <= fx3_control.meta_enable; -- TX Submodule U_tx : entity work.tx generic map ( NUM_STREAMS => dac_controls'length ) port map ( tx_reset => tx_reset, tx_clock => tx_clock, tx_enable => fx3_control.tx_enable, meta_en => meta_en_tx, timestamp_reset => tx_ts_reset, usb_speed => fx3_control.usb_speed, tx_underflow_led => open, tx_timestamp => tx_timestamp, -- Triggering trigger_arm => '0', trigger_fire => '0', trigger_master => '0', trigger_line => open, -- Packet FIFO packet_en => fx3_control.packet, packet_empty => open, packet_control => tx_packet_control, packet_ready => '1', -- 8-bit mode eight_bit_mode_en => EIGHT_BIT_MODE_EN, -- Samples from host via FX3 sample_fifo_wclock => fx3_pclk_pll, sample_fifo_wreq => tx_sample_fifo.wreq, sample_fifo_wdata => tx_sample_fifo.wdata, sample_fifo_wempty => tx_sample_fifo.wempty, sample_fifo_wfull => tx_sample_fifo.wfull, sample_fifo_wused => tx_sample_fifo.wused, -- Metadata from host via FX3 meta_fifo_wclock => fx3_pclk_pll, meta_fifo_wreq => tx_meta_fifo.wreq, meta_fifo_wdata => tx_meta_fifo.wdata, meta_fifo_wempty => tx_meta_fifo.wempty, meta_fifo_wfull => tx_meta_fifo.wfull, meta_fifo_wused => tx_meta_fifo.wused, -- Digital Loopback Interface loopback_enabled => '0', loopback_fifo_wdata => loopback_fifo.wdata, loopback_fifo_wreq => loopback_fifo.wreq, loopback_fifo_wfull => loopback_fifo.wfull, loopback_fifo_wused => loopback_fifo.wused, -- RFFE Interface dac_controls => dac_controls, dac_streams => dac_streams ); -- RX Submodule U_rx : entity work.rx generic map ( NUM_STREAMS => adc_controls'length ) port map ( rx_reset => rx_reset, rx_clock => rx_clock, rx_enable => fx3_control.rx_enable, meta_en => meta_en_rx, timestamp_reset => rx_ts_reset, usb_speed => fx3_control.usb_speed, rx_mux_sel => to_unsigned(0, 3), rx_overflow_led => open, rx_timestamp => rx_timestamp, -- Triggering trigger_arm => '0', trigger_fire => '0', trigger_master => '0', trigger_line => open, trigger_signal_sync_tb => trigger_signal_sync_tb, -- Packet FIFO packet_en => fx3_control.packet, packet_control => rx_packet_control, packet_ready => rx_packet_ready, -- 8-bit mode eight_bit_mode_en => EIGHT_BIT_MODE_EN, -- Samples to host via FX3 sample_fifo_rclock => fx3_pclk_pll, sample_fifo_raclr => not fx3_control.rx_enable, sample_fifo_rreq => rx_sample_fifo.rreq, sample_fifo_rdata => rx_sample_fifo.rdata, sample_fifo_rempty => rx_sample_fifo.rempty, sample_fifo_rfull => rx_sample_fifo.rfull, sample_fifo_rused => rx_sample_fifo.rused, -- Mini expansion signals mini_exp => "00", -- Metadata to host via FX3 meta_fifo_rclock => fx3_pclk_pll, meta_fifo_raclr => not fx3_control.rx_enable, meta_fifo_rreq => rx_meta_fifo.rreq, meta_fifo_rdata => rx_meta_fifo.rdata, meta_fifo_rempty => rx_meta_fifo.rempty, meta_fifo_rfull => rx_meta_fifo.rfull, meta_fifo_rused => rx_meta_fifo.rused, -- Digital Loopback Interface loopback_fifo_wenabled => open, loopback_fifo_wreset => tx_reset, loopback_fifo_wclock => tx_clock, loopback_fifo_wdata => loopback_fifo.wdata, loopback_fifo_wreq => loopback_fifo.wreq, loopback_fifo_wfull => loopback_fifo.wfull, loopback_fifo_wused => loopback_fifo.wused, -- RFFE Interface adc_controls => adc_controls, adc_streams => adc_streams ); -- ======================================================================== -- Data converters -- ======================================================================== gen_dac_controls : if( NUM_MIMO_STREAMS > 1 ) generate -- The TX side of the AD9361 HDL is a FIFO pull interface -- that expects a readahead FIFO. It toggles the data request -- signal every other cycle. This behavior is mimicked here. process( tx_clock, sys_rst ) begin if( sys_rst = '1' ) then dac_controls <= ( 0 => (enable => ENABLE_CHANNEL_0, data_req => '1'), 1 => (enable => ENABLE_CHANNEL_1, data_req => '1') ); elsif( rising_edge(tx_clock) ) then for i in dac_controls'range loop dac_controls(i) <= ( enable => dac_controls(i).enable, data_req => not dac_controls(i).data_req ); end loop; end if; end process; else generate dac_controls <= (others => SAMPLE_CONTROL_ENABLE); end generate; gen_adc_controls : if( NUM_MIMO_STREAMS > 1 ) generate process( rx_clock, sys_rst ) constant SIGMA_DELTA_BITS : signed (3 downto 0) := "0000"; constant COUNT_RESET : integer := 0; variable count : integer range -2047 to 2047 := COUNT_RESET; begin if( sys_rst = '1' ) then count := COUNT_RESET; adc_controls <= ( 0 => (enable => ENABLE_CHANNEL_0, data_req => '1'), 1 => (enable => ENABLE_CHANNEL_1, data_req => '1') ); elsif( rising_edge(rx_clock) ) then for i in adc_controls'range loop adc_controls(i) <= ( enable => adc_controls(i).enable, data_req => not adc_controls(i).data_req ); if( adc_controls(i).enable = '1') then if( adc_streams(i).data_v = '1' ) then if( EIGHT_BIT_MODE_EN = '1' ) then adc_streams(i).data_i <= "0000" & to_signed(count, 8) & SIGMA_DELTA_BITS; adc_streams(i).data_q <= "0000" & to_signed(-count, 8) & SIGMA_DELTA_BITS; count := (count + 1) mod 128; else adc_streams(i).data_i <= to_signed(count, 16); adc_streams(i).data_q <= to_signed(-count, 16); count := (count + 1) mod 2048; end if; end if; adc_streams(i).data_v <= not adc_streams(i).data_v; end if; end loop; end if; end process; else generate adc_controls <= (others => SAMPLE_CONTROL_ENABLE); end generate; -- ======================================================================== -- Processes -- ======================================================================== -- FX3 GPIF bidirectional signal control -- Adapted from same process in bladerf-hosted.vhd register_gpif : process(sys_rst, fx3_pclk_pll) begin if( sys_rst = '1' ) then fx3_gpif_i <= (others => 'Z'); fx3_gpif.gpif_in <= (others => 'Z'); elsif( rising_edge(fx3_pclk_pll) ) then fx3_gpif.gpif_in <= fx3_gpif_i; if( fx3_gpif.gpif_oe = '1' ) then fx3_gpif_i <= fx3_gpif.gpif_out; else fx3_gpif_i <= (others =>'Z'); end if; end if; end process; -- FX3 CTL bidirectional signals -- Adapted from same generator in bladerf-hosted.vhd generate_ctl : for i in fx3_ctl_i'range generate fx3_ctl_i(i) <= fx3_gpif.ctl_out(i) when fx3_gpif.ctl_oe(i) = '1' else 'Z'; end generate; fx3_gpif.ctl_in <= fx3_ctl_i; -- Controller for loopback FIFO -- Stripped-down version of same process from rx.vhd loopback_fifo_control : process( sys_rst, loopback_fifo.rclock ) begin if( sys_rst = '1' ) then loopback_enabled <= '0'; loopback_fifo.rreq <= '0'; loopback_i <= (others => '0'); loopback_q <= (others => '0'); loopback_valid <= '0'; elsif( rising_edge(loopback_fifo.rclock) ) then loopback_enabled <= '0'; loopback_fifo.rreq <= '0'; loopback_i <= loopback_i; loopback_q <= loopback_q; loopback_valid <= '0'; -- Is loopback enabled? loopback_enabled <= fx3_control.rx_enable; -- Do the loopback loopback_i <= resize(signed(loopback_fifo.rdata(15 downto 0)), loopback_i'length); loopback_q <= resize(signed(loopback_fifo.rdata(31 downto 16)), loopback_q'length); loopback_valid <= loopback_fifo.rreq and not loopback_fifo.rempty; -- Read from the FIFO if req'd loopback_fifo.rreq <= loopback_enabled and (not loopback_fifo.rempty); end if; end process; -- RX multiplexer -- Stripped-down version of same process from rx.vhd rx_mux : process(sys_rst, sys_clk) begin if( sys_rst = '1' ) then rx_mux_i <= (others =>'0'); rx_mux_q <= (others =>'0'); rx_mux_valid <= '0'; elsif( rising_edge(sys_clk) ) then rx_mux_i <= loopback_i; rx_mux_q <= loopback_q; rx_mux_valid <= loopback_valid; end if; end process; -- TX multiplexer -- Stripped-down version of mimo_channel_sel_mux from tx.vhd --tx_mux : process( sys_clk ) --begin -- if( rising_edge(sys_clk) ) then -- tx_sample_fifo.rreq <= not tx_sample_fifo.rempty; -- loopback_fifo.wdata <= tx_sample_fifo.rdata; -- loopback_fifo.wreq <= tx_sample_fifo.rreq and not tx_sample_fifo.rempty; -- end if; --end process; -- ======================================================================== -- Verification -- ======================================================================== meta_verify: process type timestamp_arr is array (natural range <>) of unsigned(63 downto 0); constant HEADER_LEN : integer := 4; variable timestamp : timestamp_arr(1 downto 0); variable delta : unsigned(63 downto 0) := (others => '0'); variable delta_expected : unsigned(63 downto 0); variable iteration : natural := 1; -- variable timestamp : unsigned(63 downto 0) := (others => '0'); begin wait for 1 ns; delta_expected := to_unsigned(508, 64) when not EIGHT_BIT_MODE_EN else to_unsigned(1016, 64); if (ENABLE_CHANNEL_0 and ENABLE_CHANNEL_1) then delta_expected := delta_expected/2; end if; for j in 0 to 1 loop wait until rising_edge(fx3_gpif.gpif_oe); for i in 0 to HEADER_LEN-1 loop wait until rising_edge(fx3_pclk_pll); if (i = 1) then timestamp(j)(31 downto 0) := unsigned(fx3_gpif.gpif_out); end if; if (i = 2) then timestamp(j)(63 downto 32) := unsigned(fx3_gpif.gpif_out); end if; -- report "Header ["& integer'image(i) &"] "& to_hstring(fx3_gpif.gpif_out); end loop; report "Timestamp: " & integer'image(to_integer(timestamp(j))); end loop; delta := timestamp(1) - timestamp(0); report "Timestamp Delta: " & integer'image(to_integer(delta)); iteration := iteration + 1; if (iteration mod 3 /= 0) then assert (delta = delta_expected) report lf&"Unexpected Timestamp Delta"&lf& "Expected " & integer'image(to_integer(delta_expected)) &" ("& integer'image(to_integer(timestamp(0)) + to_integer(delta_expected)) &")"&lf& "Actual " & integer'image(to_integer(delta)) &" ("& integer'image(to_integer(timestamp(1))) &")" severity failure; else report "rst timestamp ignored"; end if; end process meta_verify; end architecture; bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/vhdl/tb/system_pll.vhd000066400000000000000000000036251457144405000256400ustar00rootroot00000000000000-- Copyright (c) 2017 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee ; use ieee.std_logic_1164.all ; entity system_pll is port ( refclk : in std_logic; rst : in std_logic; outclk_0 : out std_logic; locked : out std_logic ); end entity ; -- system_pll architecture simulation of system_pll is constant SYSTEM_PLL_HALF_PERIOD : time := 1 sec * (1.0/80.0e6/2.0) ; signal outclk : std_logic := '1' ; begin -- Generate 80 MHz clock outclk <= not outclk after SYSTEM_PLL_HALF_PERIOD; -- Send it out... simulate_pll : process(rst, outclk) is begin if (rst = '1') then outclk_0 <= '0'; locked <= '0'; else outclk_0 <= outclk; locked <= '1'; end if; end process ; end architecture ; -- simulation bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/vhdl/tb/wlan_fx3_gpif_tb.vhd000066400000000000000000000676641457144405000266750ustar00rootroot00000000000000-- Copyright (c) 2019 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; library rtl_work; library altera_lnsim; use altera_lnsim.altera_pll; library wlan; library nuand; use nuand.util.all ; use nuand.fifo_readwrite_p.all; use nuand.common_dcfifo_p.all; use nuand.bladerf_p.all; library wlan ; use wlan.wlan_p.all ; use wlan.wlan_tables_p.all ; use wlan.wlan_tx_p.all ; entity wlan_fx3_gpif_tb is generic ( -- For bladeRF2 (2x2 MIMO): NUM_MIMO_STREAMS : natural := 2; FIFO_READER_READ_THROTTLE : natural := 0; ENABLE_CHANNEL_0 : std_logic := '1'; ENABLE_CHANNEL_1 : std_logic := '0' ); end entity; architecture arch of wlan_fx3_gpif_tb is -- bladerf-hosted uses ad9361.clock (125 MHz) for rx_clock and tx_clock constant SYSCLK_HALF_PERIOD : time := 1 sec * (1.0/125.0e6/2.0); -- For reasons unknown, simulation of this system in ModelSim requires that -- wrreq and data be asserted shortly before the rising clock edge. Sigh... constant FIFO_WORKAROUND : time := 1 ps; type fx3_control_t is record usb_speed : std_logic; tx_enable : std_logic; rx_enable : std_logic; meta_enable : std_logic; packet : std_logic; end record; type fx3_gpif_t is record gpif_in : std_logic_vector(31 downto 0); gpif_out : std_logic_vector(31 downto 0); gpif_oe : std_logic; ctl_in : std_logic_vector(12 downto 0); ctl_out : std_logic_vector(12 downto 0); ctl_oe : std_logic_vector(12 downto 0); end record; signal sys_rst : std_logic := '1'; signal done : boolean := false; signal fx3_pclk : std_logic := '1'; signal fx3_pclk_pll : std_logic := '1'; signal sys_clk : std_logic := '1'; signal pll_reset : std_logic := '0'; signal pll_locked : std_logic := '0'; signal fx3_control : fx3_control_t; signal fx3_gpif : fx3_gpif_t; signal fx3_gpif_i : std_logic_vector(31 downto 0); signal fx3_ctl_i : std_logic_vector(12 downto 0); signal loopback_i : signed(15 downto 0) := (others =>'0'); signal loopback_q : signed(15 downto 0) := (others =>'0'); signal loopback_valid : std_logic := '0'; signal loopback_enabled : std_logic := '0'; signal tx_clock : std_logic := '1' ; signal rx_clock : std_logic := '1' ; signal rx_sample_fifo : rx_fifo_t := RX_FIFO_T_DEFAULT; signal tx_sample_fifo : tx_fifo_t := TX_FIFO_T_DEFAULT; signal loopback_fifo : loopback_fifo_t := LOOPBACK_FIFO_T_DEFAULT; signal rx_meta_fifo : meta_fifo_rx_t := META_FIFO_RX_T_DEFAULT; signal tx_meta_fifo : meta_fifo_tx_t := META_FIFO_TX_T_DEFAULT; signal rx_mux_i : signed(15 downto 0); signal rx_mux_q : signed(15 downto 0); signal rx_mux_valid : std_logic; signal tx_timestamp : unsigned(63 downto 0) := ( others => '0' ); signal rx_timestamp : unsigned(63 downto 0) := ( others => '0' ); constant FX3_HALF_PERIOD : time := 1.0/(100.0e6)/2.0*1 sec ; constant TX_HALF_PERIOD : time := 1.0/(40.0e6)/2.0*1 sec ; constant RX_HALF_PERIOD : time := 1.0/(40.0e6)/2.0*1 sec ; signal dac_controls : sample_controls_t(0 to NUM_MIMO_STREAMS-1) := (others => SAMPLE_CONTROL_DISABLE); signal dac_streams : sample_streams_t(dac_controls'range) := (others => ZERO_SAMPLE); signal adc_controls : sample_controls_t(0 to NUM_MIMO_STREAMS-1) := (others => SAMPLE_CONTROL_DISABLE); signal adc_streams : sample_streams_t(adc_controls'range) := (others => ZERO_SAMPLE); signal tx_reset : std_logic := '0'; signal tx_ts_reset : std_logic := '0'; signal rx_reset : std_logic := '0'; signal rx_ts_reset : std_logic := '0'; signal meta_en_tx : std_logic := '0'; signal meta_en_rx : std_logic := '0'; signal rx_packet_control : packet_control_t := PACKET_CONTROL_DEFAULT; signal tx_packet_control : packet_control_t; signal gain_lock : std_logic := '0'; function data_gen (count : natural) return std_logic_vector is variable msw, lsw : std_logic_vector(15 downto 0); begin msw := std_logic_vector(to_signed(count, 16)); lsw := std_logic_vector(to_signed(-count, 16)); return (msw & lsw); end function data_gen; signal rx_packet_ready : std_logic; signal tx_packet_ready : std_logic; signal tx_packet_empty : std_logic; type channel_history_t is record i : signed(15 downto 0); q : signed(15 downto 0); valid : std_logic ; end record; type array_channel_history_t is array(natural range <>) of channel_history_t; --signal chan_history : array_channel_history_t( 0 to 20000); signal out_i : signed(15 downto 0); signal out_q : signed(15 downto 0); signal out_valid : std_logic ; signal bb : wlan_sample_t ; signal sample : wlan_sample_t ; signal rx_fopen : std_logic ; signal ad_ctrl : std_logic_vector(7 downto 0); begin gain_lock <= '0'; -- ======================================================================== -- Brief summary of data flow -- ======================================================================== -- -- Simulated samples flow from fx3_model's TX side to its RX side. The -- validity of the data is checked there. -- -- entity U_fx3_model FX3 model, TX process -- signal fx3_gpif_i fx3_gpif.gpif_oe is '0' -- process register_gpif -- signal fx3_gpif.gpif_in Demuxed GPIF interface (FX3 -> FPGA) -- entity U_fx3_gpif GPIF implementation, write side -- signal tx_sample_fifo.w* TX fifo, write side -- entity U_tx_sample_fifo -- signal tx_sample_fifo.r* TX fifo, read side -- process tx_mux -- signal loopback_fifo.w* Loopback fifo, write side -- entity U_rx_loopback_fifo -- signal loopback_fifo.r* Loopback fifo, read side -- process loopback_fifo_control -- signal loopback_{i,q,valid} -- process rx_mux -- signal rx_mux_{i,q,valid} -- entity U_fifo_writer -- signal rx_sample_fifo.w* RX fifo, write side -- entity U_rx_sample_fifo -- signal rx_sample_fifo.r* RX fifo, read side -- entity U_fx3_gpif GPIF implementation, read side -- signal fx3_gpif.gpif_out Demuxed GPIF interface (FPGA -> FX3) -- process register_gpif -- signal fx3_gpif_i fx3_gpif.gpif_oe is '1' -- entity U_fx3_model FX3 model, RX process -- ======================================================================== -- Instantiations -- ======================================================================== -- Unit under test -- Clock domain: fx3_pclk_pll U_fx3_gpif : entity nuand.fx3_gpif port map ( pclk => fx3_pclk_pll, reset => sys_rst, usb_speed => fx3_control.usb_speed, gpif_in => fx3_gpif.gpif_in, gpif_out => fx3_gpif.gpif_out, gpif_oe => fx3_gpif.gpif_oe, ctl_in => fx3_gpif.ctl_in, ctl_out => fx3_gpif.ctl_out, ctl_oe => fx3_gpif.ctl_oe, tx_enable => fx3_control.tx_enable, rx_enable => fx3_control.rx_enable, meta_enable => fx3_control.meta_enable, packet_enable => fx3_control.packet, tx_fifo_write => tx_sample_fifo.wreq, tx_fifo_full => tx_sample_fifo.wfull, tx_fifo_empty => tx_sample_fifo.wempty, tx_fifo_usedw => tx_sample_fifo.wused, tx_fifo_data => tx_sample_fifo.wdata, tx_timestamp => tx_timestamp, tx_meta_fifo_write => tx_meta_fifo.wreq, tx_meta_fifo_full => tx_meta_fifo.wfull, tx_meta_fifo_empty => tx_meta_fifo.wempty, tx_meta_fifo_usedw => tx_meta_fifo.wused, tx_meta_fifo_data => tx_meta_fifo.wdata, rx_fifo_read => rx_sample_fifo.rreq, rx_fifo_full => rx_sample_fifo.rfull, rx_fifo_empty => rx_sample_fifo.rempty, rx_fifo_usedw => rx_sample_fifo.rused, rx_fifo_data => rx_sample_fifo.rdata, rx_meta_fifo_read => rx_meta_fifo.rreq, rx_meta_fifo_full => rx_meta_fifo.rfull, rx_meta_fifo_empty => rx_meta_fifo.rempty, rx_meta_fifo_usedr => rx_meta_fifo.rused, rx_meta_fifo_data => rx_meta_fifo.rdata ); -- Discrete control signals for fx3_gpif fx3_control.usb_speed <= '0'; fx3_control.meta_enable <= '1'; fx3_control.packet <= '1'; meta_en_tx <= fx3_control.meta_enable; meta_en_rx <= fx3_control.meta_enable; increment_tx_ts : process(tx_clock) variable ping : boolean := true ; begin if( rising_edge(tx_clock) ) then ping := not ping ; if( ping = true ) then tx_timestamp <= tx_timestamp + 1 ; end if ; end if ; end process ; increment_rx_ts : process(rx_clock) variable ping : boolean := true ; begin if( rising_edge(rx_clock) ) then ping := not ping ; if( ping = true ) then rx_timestamp <= rx_timestamp + 1 ; end if ; end if ; end process ; -- Model of FX3's GPIF interface -- Clock domain: fx3_pclk (source) U_fx3_model : entity nuand.fx3_model(wlan_micro_packet_dma) port map ( fx3_pclk => fx3_pclk, fx3_gpif => fx3_gpif_i, fx3_ctl => fx3_ctl_i, fx3_uart_rxd => '0', fx3_uart_txd => open, fx3_uart_cts => open, fx3_rx_en => '1', fx3_rx_meta_en => meta_en_rx, fx3_tx_en => '1', fx3_tx_meta_en => meta_en_tx, done => done ); -- Generate phase-shifted PLL clock U_fx3_pll : entity rtl_work.fx3_pll port map ( inclk0 => fx3_pclk, areset => pll_reset, c0 => fx3_pclk_pll, locked => pll_locked ); tx_clock <= not tx_clock after TX_HALF_PERIOD ; rx_clock <= not rx_clock after RX_HALF_PERIOD ; -- Reset handler sys_rst <= '0' after 200 ns; -- Generate system clock sys_clk <= not sys_clk after SYSCLK_HALF_PERIOD when not done else '0'; tx_reset <= sys_rst; tx_ts_reset <= sys_rst; rx_reset <= sys_rst; rx_ts_reset <= sys_rst; meta_en_tx <= fx3_control.meta_enable; meta_en_rx <= fx3_control.meta_enable; -- TX Submodule U_tx : entity work.tx generic map ( NUM_STREAMS => dac_controls'length ) port map ( tx_reset => tx_reset, tx_clock => tx_clock, tx_enable => fx3_control.tx_enable, meta_en => meta_en_tx, timestamp_reset => tx_ts_reset, usb_speed => fx3_control.usb_speed, tx_underflow_led => open, tx_timestamp => tx_timestamp, -- Triggering trigger_arm => '0', trigger_fire => '0', trigger_master => '0', trigger_line => open, -- Packet FIFO packet_en => fx3_control.packet, packet_empty => tx_packet_empty, packet_control => tx_packet_control, packet_ready => tx_packet_ready, -- Samples from host via FX3 sample_fifo_wclock => fx3_pclk_pll, sample_fifo_wreq => tx_sample_fifo.wreq, sample_fifo_wdata => tx_sample_fifo.wdata, sample_fifo_wempty => tx_sample_fifo.wempty, sample_fifo_wfull => tx_sample_fifo.wfull, sample_fifo_wused => tx_sample_fifo.wused, -- Metadata from host via FX3 meta_fifo_wclock => fx3_pclk_pll, meta_fifo_wreq => tx_meta_fifo.wreq, meta_fifo_wdata => tx_meta_fifo.wdata, meta_fifo_wempty => tx_meta_fifo.wempty, meta_fifo_wfull => tx_meta_fifo.wfull, meta_fifo_wused => tx_meta_fifo.wused, -- Digital Loopback Interface loopback_enabled => '0', loopback_fifo_wdata => loopback_fifo.wdata, loopback_fifo_wreq => loopback_fifo.wreq, loopback_fifo_wfull => loopback_fifo.wfull, loopback_fifo_wused => loopback_fifo.wused, -- RFFE Interface dac_controls => dac_controls, dac_streams => dac_streams ); -- RX Submodule U_rx : entity work.rx generic map ( NUM_STREAMS => adc_controls'length ) port map ( rx_reset => rx_reset, rx_clock => rx_clock, rx_enable => fx3_control.rx_enable, meta_en => meta_en_rx, timestamp_reset => rx_ts_reset, usb_speed => fx3_control.usb_speed, rx_mux_sel => to_unsigned(0, 3), rx_overflow_led => open, rx_timestamp => rx_timestamp, -- Triggering trigger_arm => '0', trigger_fire => '0', trigger_master => '0', trigger_line => open, -- Packet FIFO packet_en => fx3_control.packet, packet_control => rx_packet_control, packet_ready => rx_packet_ready, -- Samples to host via FX3 sample_fifo_rclock => fx3_pclk_pll, sample_fifo_raclr => not fx3_control.rx_enable, sample_fifo_rreq => rx_sample_fifo.rreq, sample_fifo_rdata => rx_sample_fifo.rdata, sample_fifo_rempty => rx_sample_fifo.rempty, sample_fifo_rfull => rx_sample_fifo.rfull, sample_fifo_rused => rx_sample_fifo.rused, -- Mini expansion signals mini_exp => "00", -- Metadata to host via FX3 meta_fifo_rclock => fx3_pclk_pll, meta_fifo_raclr => not fx3_control.rx_enable, meta_fifo_rreq => rx_meta_fifo.rreq, meta_fifo_rdata => rx_meta_fifo.rdata, meta_fifo_rempty => rx_meta_fifo.rempty, meta_fifo_rfull => rx_meta_fifo.rfull, meta_fifo_rused => rx_meta_fifo.rused, -- Digital Loopback Interface loopback_fifo_wenabled => open, loopback_fifo_wreset => tx_reset, loopback_fifo_wclock => tx_clock, loopback_fifo_wdata => loopback_fifo.wdata, loopback_fifo_wreq => loopback_fifo.wreq, loopback_fifo_wfull => loopback_fifo.wfull, loopback_fifo_wused => loopback_fifo.wused, -- RFFE Interface adc_controls => adc_controls, adc_streams => adc_streams ); -- ======================================================================== -- Data converters -- ======================================================================== gen_dac_controls : if( NUM_MIMO_STREAMS > 1 ) generate -- The TX side of the AD9361 HDL is a FIFO pull interface -- that expects a readahead FIFO. It toggles the data request -- signal every other cycle. This behavior is mimicked here. process( tx_clock, sys_rst ) begin if( sys_rst = '1' ) then dac_controls <= ( 0 => (enable => ENABLE_CHANNEL_0, data_req => '1'), 1 => (enable => ENABLE_CHANNEL_1, data_req => '1') ); elsif( rising_edge(tx_clock) ) then for i in dac_controls'range loop dac_controls(i) <= ( enable => dac_controls(i).enable, data_req => not dac_controls(i).data_req ); end loop; end if; end process; else generate dac_controls <= (others => SAMPLE_CONTROL_ENABLE); end generate; gen_adc_controls : if( NUM_MIMO_STREAMS > 1 ) generate process( rx_clock, sys_rst ) variable count : natural range 0 to 10000; variable rv : std_logic_vector(31 downto 0); begin if( sys_rst = '1' ) then count := 0; adc_controls <= ( 0 => (enable => ENABLE_CHANNEL_0, data_req => '1'), 1 => (enable => ENABLE_CHANNEL_1, data_req => '1') ); elsif( rising_edge(rx_clock) ) then for i in adc_controls'range loop adc_controls(i) <= ( enable => adc_controls(i).enable, data_req => not adc_controls(i).data_req ); if( adc_controls(i).enable = '1') then if( adc_streams(i).data_v = '1' ) then if( count < 10000 ) then count := count + 1; else count := 0; end if; rv := std_logic_vector(to_unsigned(count, 32)); adc_streams(i).data_i <= signed(rv(15 downto 0)); adc_streams(i).data_q <= signed(rv(31 downto 16)); end if; adc_streams(i).data_v <= not adc_streams(i).data_v; end if; end loop; end if; end process; else generate adc_controls <= (others => SAMPLE_CONTROL_ENABLE); end generate; -- ======================================================================== -- Processes -- ======================================================================== -- FX3 GPIF bidirectional signal control -- Adapted from same process in bladerf-hosted.vhd register_gpif : process(sys_rst, fx3_pclk_pll) begin if( sys_rst = '1' ) then fx3_gpif_i <= (others => 'Z'); fx3_gpif.gpif_in <= (others => 'Z'); elsif( rising_edge(fx3_pclk_pll) ) then fx3_gpif.gpif_in <= fx3_gpif_i; if( fx3_gpif.gpif_oe = '1' ) then fx3_gpif_i <= fx3_gpif.gpif_out; else fx3_gpif_i <= (others =>'Z'); end if; end if; end process; -- FX3 CTL bidirectional signals -- Adapted from same generator in bladerf-hosted.vhd generate_ctl : for i in fx3_ctl_i'range generate fx3_ctl_i(i) <= fx3_gpif.ctl_out(i) when fx3_gpif.ctl_oe(i) = '1' else 'Z'; end generate; fx3_gpif.ctl_in <= fx3_ctl_i; -- Controller for loopback FIFO -- Stripped-down version of same process from rx.vhd loopback_fifo_control : process( sys_rst, loopback_fifo.rclock ) begin if( sys_rst = '1' ) then loopback_enabled <= '0'; loopback_fifo.rreq <= '0'; loopback_i <= (others => '0'); loopback_q <= (others => '0'); loopback_valid <= '0'; elsif( rising_edge(loopback_fifo.rclock) ) then loopback_enabled <= '0'; loopback_fifo.rreq <= '0'; loopback_i <= loopback_i; loopback_q <= loopback_q; loopback_valid <= '0'; -- Is loopback enabled? loopback_enabled <= fx3_control.rx_enable; -- Do the loopback loopback_i <= resize(signed(loopback_fifo.rdata(15 downto 0)), loopback_i'length); loopback_q <= resize(signed(loopback_fifo.rdata(31 downto 16)), loopback_q'length); loopback_valid <= loopback_fifo.rreq and not loopback_fifo.rempty; -- Read from the FIFO if req'd loopback_fifo.rreq <= loopback_enabled and (not loopback_fifo.rempty); end if; end process; -- RX multiplexer -- Stripped-down version of same process from rx.vhd rx_mux : process(sys_rst, sys_clk) begin if( sys_rst = '1' ) then rx_mux_i <= (others =>'0'); rx_mux_q <= (others =>'0'); rx_mux_valid <= '0'; elsif( rising_edge(sys_clk) ) then rx_mux_i <= loopback_i; rx_mux_q <= loopback_q; rx_mux_valid <= loopback_valid; end if; end process; -- TX multiplexer -- Stripped-down version of mimo_channel_sel_mux from tx.vhd --tx_mux : process( sys_clk ) --begin -- if( rising_edge(sys_clk) ) then -- tx_sample_fifo.rreq <= not tx_sample_fifo.rempty; -- loopback_fifo.wdata <= tx_sample_fifo.rdata; -- loopback_fifo.wreq <= tx_sample_fifo.rreq and not tx_sample_fifo.rempty; -- end if; --end process; -- ======================================================================== -- Validation -- ======================================================================== -- Check for metavalues -- We should never see metavalues written to the FIFOs check_fifo_write : process (fx3_pclk_pll) is begin if (rising_edge(fx3_pclk_pll)) then if (tx_sample_fifo.wreq = '1' and fx3_control.meta_enable = '0') then for i in tx_sample_fifo.wdata'range loop assert tx_sample_fifo.wdata(i) = '0' or tx_sample_fifo.wdata(i) = '1' severity failure; end loop; end if; end if; end process check_fifo_write; check_fifo_read : process (fx3_pclk_pll) is begin if (rising_edge(fx3_pclk_pll)) then if (rx_sample_fifo.rreq = '1') then for i in rx_sample_fifo.rdata'range loop assert rx_sample_fifo.rdata(i) = '0' or rx_sample_fifo.rdata(i) = '1' severity failure; end loop; end if; end if; end process check_fifo_read; -- Check for fullness on FIFOs assert (rx_sample_fifo.wfull = '0') report "rx_sample_fifo full (write)" severity warning; assert (tx_sample_fifo.wfull = '0') report "tx_sample_fifo full (write)" severity warning; assert (loopback_fifo.wfull = '0') report "loopback_fifo full (write)" severity warning; U_wlan_top : entity wlan.wlan_top port map ( rx_clock => rx_clock, rx_reset => rx_reset, rx_enable => fx3_control.rx_enable, tx_clock => tx_clock, tx_reset => tx_reset, tx_enable => fx3_control.tx_enable, config_reg => x"00000000", packet_en => fx3_control.packet, tx_packet_control => tx_packet_control, tx_packet_empty => tx_packet_empty, tx_packet_ready => tx_packet_ready, rx_packet_control => rx_packet_control, rx_packet_ready => rx_packet_ready, tx_fifo_usedw => (others => '0' ), tx_fifo_read => open, tx_fifo_empty => '1', tx_fifo_data => (others => '0' ), rx_fifo_usedw => (others => '0' ), rx_fifo_write => open, rx_fifo_full => '0', rx_fifo_data => open, gain_inc_req => open, gain_dec_req => open, gain_rst_req => open, gain_ack => '0', gain_nack => '0', gain_lock => gain_lock, gain_max => '1', tx_ota_req => open, tx_ota_ack => '1', out_i => out_i, out_q => out_q, out_valid => out_valid, in_i => sample.i, in_q => sample.q, in_valid => sample.valid ) ; bb.i <= out_i; bb.q <= out_q; process(rx_clock) begin if(rx_reset = '1') then bb.valid <= '0'; elsif(rising_edge(rx_clock)) then bb.valid <= not bb.valid; end if; end process; U_sample_saver : entity wlan.wlan_sample_saver generic map ( FILENAME => "out" ) port map ( clock => tx_clock, fopen => '1', sample => bb, done => '0' ) ; U_sample_loader: entity wlan.wlan_sample_loader generic map ( FILENAME => "rx" ) port map ( clock => rx_clock, fopen => rx_fopen, sample => sample ); rx_fopen <= '0', '1' after 100 ns; --process(sys_rst, rx_clock) --begin -- if( sys_rst = '1' ) then -- for i in chan_history'range loop -- chan_history(i).i <= ( others => '0' ); -- chan_history(i).q <= ( others => '0' ); -- chan_history(i).valid <= '0' ; -- end loop; -- elsif( rising_edge( rx_clock ) ) then -- for i in chan_history'range loop -- if( i = 0 ) then -- chan_history(i).i <= out_i; -- chan_history(i).q <= out_q; -- chan_history(i).valid <= out_valid; -- else -- chan_history(i) <= chan_history(i - 1); -- end if; -- end loop; -- end if; --end process; end architecture; bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/vhdl/tb/wlan_fx3_model.vhd000066400000000000000000000256761457144405000263600ustar00rootroot00000000000000-- Copyright (c) 2019 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.math_real.all; use ieee.math_complex.all; library work; use work.util.all; architecture wlan_micro_packet_dma of fx3_model is constant PCLK_HALF_PERIOD : time := 1 sec * (1.0/100.0e6/2.0); constant START_COUNT : natural := 32; constant BLOCKS_PER_ITERATION : natural := 4; constant ITERATIONS : natural := 4; -- Control mapping alias dma0_rx_ack is fx3_ctl( 0); alias dma1_rx_ack is fx3_ctl( 1); alias dma2_tx_ack is fx3_ctl( 2); alias dma3_tx_ack is fx3_ctl( 3); alias dma_rx_enable is fx3_ctl( 4); alias dma_tx_enable is fx3_ctl( 5); alias dma_idle is fx3_ctl( 6); alias system_reset is fx3_ctl( 7); alias dma0_rx_reqx is fx3_ctl( 8); alias dma1_rx_reqx is fx3_ctl(12); -- due to 9 being connected to dclk alias dma2_tx_reqx is fx3_ctl(10); alias dma3_tx_reqx is fx3_ctl(11); type gpif_state_t is (IDLE, TX_META, TX_SAMPLES, RX_SAMPLES); signal gpif_state_rx, gpif_state_tx : gpif_state_t; signal rx_done : boolean := false; signal tx_done : boolean := false; signal rx_data : std_logic_vector(31 downto 0); signal tx_data : std_logic_vector(31 downto 0); function data_gen (count : natural) return std_logic_vector is variable msw, lsw : std_logic_vector(15 downto 0); begin msw := (others =>'0');--std_logic_vector(to_signed(count+1, 16)); lsw := std_logic_vector(to_signed(count, 16)); return (msw & lsw); end function data_gen; function data_check (count : natural ; rxdata : std_logic_vector(31 downto 0)) return boolean is begin return (rxdata = data_gen(count)); end function data_check; type integer_array_t is array(natural range <>) of std_logic_vector(31 downto 0); constant TX_PACKET_54_ONE : integer_array_t := ( x"00000000", x"00020000", x"009a000a", x"00000000", x"000000D4", x"e110b470", x"000012e5"); constant TX_PACKET_54_TWO : integer_array_t := ( x"00000240", x"00020001", x"009a0036", x"00000000", x"02000207", x"04000300", x"06000500", x"08000700", x"0a000900", x"0c000b00", x"0e000d00", x"0f010f00", x"02010101", x"04010301", x"06010501", x"08010701", x"0a010901", x"0c010b01"); constant TX_PACKET_54_THREE : integer_array_t := ( x"00000340", x"00020002", x"009a0036", x"00000000", x"02000207", x"04000300", x"06000500", x"08000700", x"0a000900", x"0c000b00", x"0e000d00", x"0f010f00", x"02010101", x"04010301", x"06010501", x"08010701" , x"0a010901" , x"0c010b01"); constant TX_PACKET_54_FOUR : integer_array_t := ( x"00000340", x"00020001", x"009a0036", x"00000000", x"02000207", x"04000300", x"06000500", x"08000700", x"0a000900", x"0c000b00", x"0e000d00", x"0f010f00", x"02010101", x"04010301", x"06010501", x"08010701", x"0a010901", x"0c010b01"); begin -- DCLK which isn't used fx3_ctl(9) <= '0'; fx3_ctl(3 downto 0) <= (others => 'Z'); -- Create a 100MHz clock output fx3_pclk <= not fx3_pclk after PCLK_HALF_PERIOD when (not rx_done or not tx_done) else '0'; -- Doneness done <= rx_done and tx_done; rx_sample_stream : process constant BLOCK_SIZE : natural := 512; variable count : natural := START_COUNT; variable req_time : time; begin gpif_state_rx <= IDLE; dma0_rx_reqx <= '1'; dma1_rx_reqx <= '1'; dma_rx_enable <= '0'; rx_data <= (others => 'U'); wait until rising_edge(fx3_pclk) and system_reset = '0'; nop(fx3_pclk, 1000); wait until rising_edge(fx3_pclk) and fx3_rx_en = '1'; wait for 30 us; for j in 1 to ITERATIONS loop dma_rx_enable <= '1'; for i in 1 to BLOCKS_PER_ITERATION loop dma0_rx_reqx <= '0'; req_time := now; wait until rising_edge( fx3_pclk ) and dma0_rx_ack = '1'; wait until rising_edge( fx3_pclk ); dma0_rx_reqx <= '1'; report "RX iteration " & to_string(j) & " block " & to_string(i) & " delay " & to_string(now - req_time); for i in 1 to BLOCK_SIZE loop gpif_state_rx <= RX_SAMPLES; rx_data <= fx3_gpif; wait until rising_edge( fx3_pclk ); --assert data_check(count, rx_data) severity failure; count := (count + 1) mod 2048; gpif_state_rx <= IDLE; rx_data <= (others => 'X'); end loop; end loop; dma_rx_enable <= '0'; wait for 10 us; end loop; report "Done with RX sample stream"; rx_done <= true; wait; end process; tx_sample_stream : process constant BLOCK_SIZE : natural := 512; variable count : natural := START_COUNT; variable timestamp_cntr : natural := 100; variable header_len : natural := 0; variable packet_len : natural := 0; variable data_out : std_logic_vector(31 downto 0); variable req_time : time; begin gpif_state_tx <= IDLE; dma2_tx_reqx <= '1'; dma3_tx_reqx <= '1'; dma_tx_enable <= '0'; fx3_gpif <= (others =>'Z'); wait until rising_edge(fx3_pclk) and system_reset = '0'; nop(fx3_pclk, 1000); wait until rising_edge(fx3_pclk) and fx3_tx_en = '1'; wait for 10 us; for k in 1 to ITERATIONS loop dma_tx_enable <= '1'; for j in 1 to BLOCKS_PER_ITERATION loop header_len := 0; dma3_tx_reqx <= '0'; req_time := now; wait until rising_edge( fx3_pclk ) and dma3_tx_ack = '1'; wait until rising_edge( fx3_pclk ); wait until rising_edge( fx3_pclk ); wait until rising_edge( fx3_pclk ); dma3_tx_reqx <= '1'; report "TX iteration " & to_string(k) & " block " & to_string(j) & " delay " & to_string(now - req_time); if( fx3_tx_meta_en = '1') then header_len := 4; for i in 1 to 4 loop case (i) is when 1 => if( j = 1) then packet_len := TX_PACKET_54_ONE'length; elsif( j = 2 ) then packet_len := TX_PACKET_54_TWO'length; elsif( j = 3 ) then packet_len := TX_PACKET_54_THREE'length; else packet_len := TX_PACKET_54_FOUR'length; end if; data_out := x"1000" & std_logic_vector(to_unsigned(packet_len, 16)); when 2 => --data_out(31 downto 0) := std_logic_vector(to_signed(timestamp_cntr, 32)); --timestamp_cntr := timestamp_cntr + 300; data_out := (others => '0'); when 3 => data_out := (others => '0'); when 4 => data_out := (others => '1'); end case; gpif_state_tx <= TX_META; fx3_gpif <= data_out; tx_data <= data_out; wait until rising_edge( fx3_pclk ); gpif_state_tx <= IDLE; tx_data <= (others => 'X'); end loop; end if; count := 0; for i in 0 to packet_len-1 loop gpif_state_tx <= TX_SAMPLES; if( j = 1 ) then data_out := std_logic_vector(TX_PACKET_54_ONE(i)); elsif( j = 2 ) then data_out := std_logic_vector(TX_PACKET_54_TWO(i)); elsif( j = 3 ) then data_out := std_logic_vector(TX_PACKET_54_THREE(i)); else data_out := std_logic_vector(TX_PACKET_54_FOUR(i)); end if; fx3_gpif <= data_out(31 downto 0); tx_data <= data_out(31 downto 0); wait until rising_edge( fx3_pclk ); count := (count + 1) mod 2048; gpif_state_tx <= IDLE; tx_data <= (others => 'X'); end loop; fx3_gpif <= (others =>'Z'); nop(fx3_pclk, 10); end loop; wait for 8 ms; dma_tx_enable <= '0'; wait for 10 us; end loop; report "Done with TX sample stream"; tx_done <= true; wait; end process; reset_system : process begin system_reset <= '1'; dma_idle <= '0'; nop( fx3_pclk, 100 ); system_reset <= '0'; nop( fx3_pclk, 10 ); dma_idle <= '1'; wait; end process; -- TODO: UART Interface fx3_uart_txd <= '1'; fx3_uart_cts <= '1'; assert (gpif_state_tx = IDLE and gpif_state_rx /= IDLE) or (gpif_state_rx = IDLE and gpif_state_tx /= IDLE) or (gpif_state_rx = IDLE and gpif_state_tx = IDLE) report "gpif_state_rx and gpif_state_tx cannot both be non-idle" severity failure; end architecture wlan_micro_packet_dma; bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/vhdl/tx.vhd000066400000000000000000000251701457144405000234720ustar00rootroot00000000000000-- Copyright (c) 2017 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; library work; use work.bladerf_p.all; use work.fifo_readwrite_p.all; entity tx is generic ( NUM_STREAMS : natural := 2 ); port ( tx_reset : in std_logic; tx_clock : in std_logic; tx_enable : in std_logic; meta_en : in std_logic := '0'; timestamp_reset : out std_logic := '1'; usb_speed : in std_logic; tx_underflow_led : out std_logic := '1'; tx_timestamp : in unsigned(63 downto 0); -- Triggering trigger_arm : in std_logic; trigger_fire : in std_logic; trigger_master : in std_logic; trigger_line : inout std_logic; -- this is not good, should be in/out/oe -- 8-bit mode eight_bit_mode_en : in std_logic := '0'; -- Packet from host via FX3 packet_en : in std_logic; packet_empty : out std_logic; packet_control : out packet_control_t; packet_ready : in std_logic; -- Samples from host via FX3 sample_fifo_wclock : in std_logic; sample_fifo_wreq : in std_logic; sample_fifo_wdata : in std_logic_vector(TX_FIFO_T_DEFAULT.wdata'range); sample_fifo_wempty : out std_logic; sample_fifo_wfull : out std_logic; sample_fifo_wused : out std_logic_vector(TX_FIFO_T_DEFAULT.wused'range); -- Metadata from host via FX3 meta_fifo_wclock : in std_logic; meta_fifo_wreq : in std_logic; meta_fifo_wdata : in std_logic_vector(META_FIFO_TX_T_DEFAULT.wdata'range); meta_fifo_wempty : out std_logic; meta_fifo_wfull : out std_logic; meta_fifo_wused : out std_logic_vector(META_FIFO_TX_T_DEFAULT.wused'range); -- Digital Loopback Interface loopback_enabled : in std_logic; loopback_fifo_wclock : out std_logic; loopback_fifo_wreq : out std_logic; loopback_fifo_wdata : out std_logic_vector(LOOPBACK_FIFO_T_DEFAULT.wdata'range); loopback_fifo_wfull : in std_logic; loopback_fifo_wused : in std_logic_vector(LOOPBACK_FIFO_T_DEFAULT.wused'range); -- RFFE Interface dac_controls : in sample_controls_t(0 to NUM_STREAMS-1) := (others => SAMPLE_CONTROL_DISABLE); dac_streams : out sample_streams_t(0 to NUM_STREAMS-1) := (others => ZERO_SAMPLE) ); end entity; architecture arch of tx is signal sample_fifo : tx_fifo_t := TX_FIFO_T_DEFAULT; signal meta_fifo : meta_fifo_tx_t := META_FIFO_TX_T_DEFAULT; signal trigger_arm_sync : std_logic; signal trigger_line_sync : std_logic; signal sample_fifo_rempty_untriggered : std_logic; signal sample_fifo_holdoff : std_logic; signal sample_fifo_holdoff_i : std_logic; begin set_timestamp_reset : process(tx_clock, tx_reset) begin if( tx_reset = '1' ) then timestamp_reset <= '1'; elsif( rising_edge(tx_clock) ) then if( meta_en = '1' ) then timestamp_reset <= '0'; else timestamp_reset <= '1'; end if; end if; end process; -- TX sample fifo sample_fifo.aclr <= tx_reset; sample_fifo.rclock <= tx_clock; U_tx_sample_fifo : entity work.tx_fifo generic map ( LPM_NUMWORDS => 2**(sample_fifo.wused'length) ) port map ( aclr => sample_fifo.aclr, wrclk => sample_fifo_wclock, wrreq => sample_fifo_wreq, data => sample_fifo_wdata, wrempty => sample_fifo_wempty, wrfull => sample_fifo_wfull, wrusedw => sample_fifo_wused, rdclk => sample_fifo.rclock, rdreq => sample_fifo.rreq, q => sample_fifo.rdata, rdempty => sample_fifo_rempty_untriggered, rdfull => sample_fifo.rfull, rdusedw => sample_fifo.rused ); -- TX metadata fifo meta_fifo.aclr <= tx_reset; meta_fifo.rclock <= tx_clock; U_tx_meta_fifo : entity work.tx_meta_fifo generic map ( LPM_NUMWORDS => 2**(meta_fifo.wused'length) ) port map ( aclr => meta_fifo.aclr, wrclk => meta_fifo_wclock, wrreq => meta_fifo_wreq, data => meta_fifo_wdata, wrempty => meta_fifo_wempty, wrfull => meta_fifo_wfull, wrusedw => meta_fifo_wused, rdclk => meta_fifo.rclock, rdreq => meta_fifo.rreq, q => meta_fifo.rdata, rdempty => meta_fifo.rempty, rdfull => meta_fifo.rfull, rdusedw => meta_fifo.rused ); loopback_fifo_wclock <= tx_clock; loopback_proc : process( tx_clock ) begin if( rising_edge(tx_clock) ) then loopback_fifo_wdata <= sample_fifo.rdata; loopback_fifo_wreq <= sample_fifo.rreq and loopback_enabled; end if; end process; -- Pass through loopback_fifo_wfull immediately sample_fifo_holdoff <= sample_fifo_holdoff_i or (loopback_enabled and loopback_fifo_wfull); -- Persist sample fifo holdoff for a number of clocks, to give time for -- the FIFO to drain properly sample_fifo_holdoff_proc : process( tx_clock ) variable backoff_downcount : natural range 0 to 3; begin if( rising_edge(tx_clock) ) then sample_fifo_holdoff_i <= '0'; if( loopback_enabled = '1' ) then if( backoff_downcount /= 0 ) then backoff_downcount := backoff_downcount - 1; sample_fifo_holdoff_i <= '1'; end if; if( loopback_fifo_wfull = '1' ) then backoff_downcount := 3; sample_fifo_holdoff_i <= '1'; end if; end if; end if; end process; U_fifo_reader : entity work.fifo_reader generic map ( NUM_STREAMS => NUM_STREAMS, FIFO_READ_THROTTLE => 0, FIFO_USEDW_WIDTH => sample_fifo.rused'length, FIFO_DATA_WIDTH => sample_fifo.rdata'length, META_FIFO_USEDW_WIDTH => meta_fifo.rused'length, META_FIFO_DATA_WIDTH => meta_fifo.rdata'length ) port map ( clock => tx_clock, reset => tx_reset, enable => tx_enable, usb_speed => usb_speed, meta_en => meta_en, packet_en => packet_en, timestamp => tx_timestamp, eight_bit_mode_en => eight_bit_mode_en, fifo_empty => sample_fifo.rempty, fifo_usedw => sample_fifo.rused, fifo_data => sample_fifo.rdata, fifo_read => sample_fifo.rreq, fifo_holdoff => sample_fifo_holdoff, packet_control => packet_control, packet_empty => packet_empty, packet_ready => packet_ready, meta_fifo_empty => meta_fifo.rempty, meta_fifo_usedw => meta_fifo.rused, meta_fifo_data => meta_fifo.rdata, meta_fifo_read => meta_fifo.rreq, in_sample_controls => dac_controls, out_samples => dac_streams, underflow_led => tx_underflow_led, underflow_count => open, underflow_duration => x"ffff" ); txtrig : entity work.trigger(async) generic map ( DEFAULT_OUTPUT => '1' ) port map ( armed => trigger_arm_sync, -- in sl fired => trigger_fire, -- in sl master => trigger_master, -- in sl trigger_in => trigger_line_sync, -- in sl trigger_out => trigger_line, -- out sl signal_in => sample_fifo_rempty_untriggered, -- in sl signal_out => sample_fifo.rempty -- out sl ); U_reset_sync_txtrig_arm : entity work.reset_synchronizer generic map ( INPUT_LEVEL => '0', OUTPUT_LEVEL => '0' ) port map ( clock => tx_clock, async => trigger_arm, sync => trigger_arm_sync ); U_sync_txtrig_trigger : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => tx_reset, clock => tx_clock, async => trigger_line, sync => trigger_line_sync ); end architecture; bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/vhdl/wrappers/000077500000000000000000000000001457144405000241725ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/vhdl/wrappers/adsbfifo.vhd000066400000000000000000000073521457144405000264610ustar00rootroot00000000000000-- The only purpose for this wrapper is to set sane defaults for the -- common_dcfifo generics. These defaults may be overridden as needed. library ieee; use ieee.std_logic_1164.all; library work; use work.common_dcfifo_p.all; entity adsbfifo is generic ( ADD_RAM_OUTPUT_REGISTER : string := "OFF"; ADD_USEDW_MSB_BIT : string := "ON"; CLOCKS_ARE_SYNCHRONIZED : string := "FALSE"; DELAY_RDUSEDW : natural := 1; DELAY_WRUSEDW : natural := 1; INTENDED_DEVICE_FAMILY : string := "Cyclone IV E"; LPM_NUMWORDS : natural := 512; LPM_SHOWAHEAD : string := "ON"; LPM_WIDTH : natural := 128; LPM_WIDTH_R : natural := 32; OVERFLOW_CHECKING : string := "ON"; RDSYNC_DELAYPIPE : natural := 5; READ_ACLR_SYNCH : string := "OFF"; UNDERFLOW_CHECKING : string := "ON"; USE_EAB : string := "ON"; WRITE_ACLR_SYNCH : string := "ON"; WRSYNC_DELAYPIPE : natural := 5 ); port ( aclr : in std_logic := '0'; data : in std_logic_vector(LPM_WIDTH-1 downto 0); rdclk : in std_logic; rdreq : in std_logic; wrclk : in std_logic; wrreq : in std_logic; q : out std_logic_vector(LPM_WIDTH_R-1 downto 0); rdempty : out std_logic; rdfull : out std_logic; rdusedw : out std_logic_vector(compute_rdusedw_high(LPM_NUMWORDS, LPM_WIDTH, LPM_WIDTH_R, ADD_USEDW_MSB_BIT) downto 0); wrempty : out std_logic; wrfull : out std_logic; wrusedw : out std_logic_vector(compute_wrusedw_high(LPM_NUMWORDS, ADD_USEDW_MSB_BIT) downto 0) --eccstatus : out std_logic_vector(1 downto 0) ); end entity; architecture arch of adsbfifo is begin U_common_dcfifo : entity work.common_dcfifo generic map ( ADD_RAM_OUTPUT_REGISTER => ADD_RAM_OUTPUT_REGISTER, ADD_USEDW_MSB_BIT => ADD_USEDW_MSB_BIT, CLOCKS_ARE_SYNCHRONIZED => CLOCKS_ARE_SYNCHRONIZED, DELAY_RDUSEDW => DELAY_RDUSEDW, DELAY_WRUSEDW => DELAY_WRUSEDW, INTENDED_DEVICE_FAMILY => INTENDED_DEVICE_FAMILY, --ENABLE_ECC => ENABLE_ECC, LPM_NUMWORDS => LPM_NUMWORDS, LPM_SHOWAHEAD => LPM_SHOWAHEAD, LPM_WIDTH => LPM_WIDTH, LPM_WIDTH_R => LPM_WIDTH_R, OVERFLOW_CHECKING => OVERFLOW_CHECKING, RDSYNC_DELAYPIPE => RDSYNC_DELAYPIPE, READ_ACLR_SYNCH => READ_ACLR_SYNCH, UNDERFLOW_CHECKING => UNDERFLOW_CHECKING, USE_EAB => USE_EAB, WRITE_ACLR_SYNCH => WRITE_ACLR_SYNCH, WRSYNC_DELAYPIPE => WRSYNC_DELAYPIPE ) port map ( aclr => aclr, data => data, rdclk => rdclk, rdreq => rdreq, wrclk => wrclk, wrreq => wrreq, q => q, rdempty => rdempty, rdfull => rdfull, rdusedw => rdusedw, wrempty => wrempty, wrfull => wrfull, wrusedw => wrusedw --eccstatus => eccstatus ); end architecture; bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/vhdl/wrappers/lb_fifo.vhd000066400000000000000000000073451457144405000263060ustar00rootroot00000000000000-- The only purpose for this wrapper is to set sane defaults for the -- common_dcfifo generics. These defaults may be overridden as needed. library ieee; use ieee.std_logic_1164.all; library work; use work.common_dcfifo_p.all; entity lb_fifo is generic ( ADD_RAM_OUTPUT_REGISTER : string := "OFF"; ADD_USEDW_MSB_BIT : string := "OFF"; CLOCKS_ARE_SYNCHRONIZED : string := "FALSE"; DELAY_RDUSEDW : natural := 1; DELAY_WRUSEDW : natural := 1; INTENDED_DEVICE_FAMILY : string := "Cyclone V"; LPM_NUMWORDS : natural := 2048; LPM_SHOWAHEAD : string := "ON"; LPM_WIDTH : natural := 64; LPM_WIDTH_R : natural := 64; OVERFLOW_CHECKING : string := "ON"; RDSYNC_DELAYPIPE : natural := 5; READ_ACLR_SYNCH : string := "ON"; UNDERFLOW_CHECKING : string := "ON"; USE_EAB : string := "ON"; WRITE_ACLR_SYNCH : string := "ON"; WRSYNC_DELAYPIPE : natural := 5 ); port ( aclr : in std_logic := '0'; data : in std_logic_vector(LPM_WIDTH-1 downto 0); rdclk : in std_logic; rdreq : in std_logic; wrclk : in std_logic; wrreq : in std_logic; q : out std_logic_vector(LPM_WIDTH_R-1 downto 0); rdempty : out std_logic; rdfull : out std_logic; rdusedw : out std_logic_vector(compute_rdusedw_high(LPM_NUMWORDS, LPM_WIDTH, LPM_WIDTH_R, ADD_USEDW_MSB_BIT) downto 0); wrempty : out std_logic; wrfull : out std_logic; wrusedw : out std_logic_vector(compute_wrusedw_high(LPM_NUMWORDS, ADD_USEDW_MSB_BIT) downto 0) --eccstatus : out std_logic_vector(1 downto 0) ); end entity; architecture arch of lb_fifo is begin U_common_dcfifo : entity work.common_dcfifo generic map ( ADD_RAM_OUTPUT_REGISTER => ADD_RAM_OUTPUT_REGISTER, ADD_USEDW_MSB_BIT => ADD_USEDW_MSB_BIT, CLOCKS_ARE_SYNCHRONIZED => CLOCKS_ARE_SYNCHRONIZED, DELAY_RDUSEDW => DELAY_RDUSEDW, DELAY_WRUSEDW => DELAY_WRUSEDW, INTENDED_DEVICE_FAMILY => INTENDED_DEVICE_FAMILY, --ENABLE_ECC => ENABLE_ECC, LPM_NUMWORDS => LPM_NUMWORDS, LPM_SHOWAHEAD => LPM_SHOWAHEAD, LPM_WIDTH => LPM_WIDTH, LPM_WIDTH_R => LPM_WIDTH_R, OVERFLOW_CHECKING => OVERFLOW_CHECKING, RDSYNC_DELAYPIPE => RDSYNC_DELAYPIPE, READ_ACLR_SYNCH => READ_ACLR_SYNCH, UNDERFLOW_CHECKING => UNDERFLOW_CHECKING, USE_EAB => USE_EAB, WRITE_ACLR_SYNCH => WRITE_ACLR_SYNCH, WRSYNC_DELAYPIPE => WRSYNC_DELAYPIPE ) port map ( aclr => aclr, data => data, rdclk => rdclk, rdreq => rdreq, wrclk => wrclk, wrreq => wrreq, q => q, rdempty => rdempty, rdfull => rdfull, rdusedw => rdusedw, wrempty => wrempty, wrfull => wrfull, wrusedw => wrusedw --eccstatus => eccstatus ); end architecture; bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/vhdl/wrappers/rx_fifo.vhd000066400000000000000000000073451457144405000263420ustar00rootroot00000000000000-- The only purpose for this wrapper is to set sane defaults for the -- common_dcfifo generics. These defaults may be overridden as needed. library ieee; use ieee.std_logic_1164.all; library work; use work.common_dcfifo_p.all; entity rx_fifo is generic ( ADD_RAM_OUTPUT_REGISTER : string := "OFF"; ADD_USEDW_MSB_BIT : string := "OFF"; CLOCKS_ARE_SYNCHRONIZED : string := "FALSE"; DELAY_RDUSEDW : natural := 1; DELAY_WRUSEDW : natural := 1; INTENDED_DEVICE_FAMILY : string := "Cyclone V"; LPM_NUMWORDS : natural := 4096; LPM_SHOWAHEAD : string := "ON"; LPM_WIDTH : natural := 64; LPM_WIDTH_R : natural := 32; OVERFLOW_CHECKING : string := "ON"; RDSYNC_DELAYPIPE : natural := 5; READ_ACLR_SYNCH : string := "ON"; UNDERFLOW_CHECKING : string := "ON"; USE_EAB : string := "ON"; WRITE_ACLR_SYNCH : string := "ON"; WRSYNC_DELAYPIPE : natural := 5 ); port ( aclr : in std_logic := '0'; data : in std_logic_vector(LPM_WIDTH-1 downto 0); rdclk : in std_logic; rdreq : in std_logic; wrclk : in std_logic; wrreq : in std_logic; q : out std_logic_vector(LPM_WIDTH_R-1 downto 0); rdempty : out std_logic; rdfull : out std_logic; rdusedw : out std_logic_vector(compute_rdusedw_high(LPM_NUMWORDS, LPM_WIDTH, LPM_WIDTH_R, ADD_USEDW_MSB_BIT) downto 0); wrempty : out std_logic; wrfull : out std_logic; wrusedw : out std_logic_vector(compute_wrusedw_high(LPM_NUMWORDS, ADD_USEDW_MSB_BIT) downto 0) --eccstatus : out std_logic_vector(1 downto 0) ); end entity; architecture arch of rx_fifo is begin U_common_dcfifo : entity work.common_dcfifo generic map ( ADD_RAM_OUTPUT_REGISTER => ADD_RAM_OUTPUT_REGISTER, ADD_USEDW_MSB_BIT => ADD_USEDW_MSB_BIT, CLOCKS_ARE_SYNCHRONIZED => CLOCKS_ARE_SYNCHRONIZED, DELAY_RDUSEDW => DELAY_RDUSEDW, DELAY_WRUSEDW => DELAY_WRUSEDW, INTENDED_DEVICE_FAMILY => INTENDED_DEVICE_FAMILY, --ENABLE_ECC => ENABLE_ECC, LPM_NUMWORDS => LPM_NUMWORDS, LPM_SHOWAHEAD => LPM_SHOWAHEAD, LPM_WIDTH => LPM_WIDTH, LPM_WIDTH_R => LPM_WIDTH_R, OVERFLOW_CHECKING => OVERFLOW_CHECKING, RDSYNC_DELAYPIPE => RDSYNC_DELAYPIPE, READ_ACLR_SYNCH => READ_ACLR_SYNCH, UNDERFLOW_CHECKING => UNDERFLOW_CHECKING, USE_EAB => USE_EAB, WRITE_ACLR_SYNCH => WRITE_ACLR_SYNCH, WRSYNC_DELAYPIPE => WRSYNC_DELAYPIPE ) port map ( aclr => aclr, data => data, rdclk => rdclk, rdreq => rdreq, wrclk => wrclk, wrreq => wrreq, q => q, rdempty => rdempty, rdfull => rdfull, rdusedw => rdusedw, wrempty => wrempty, wrfull => wrfull, wrusedw => wrusedw --eccstatus => eccstatus ); end architecture; bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/vhdl/wrappers/rx_meta_fifo.vhd000066400000000000000000000073561457144405000273520ustar00rootroot00000000000000-- The only purpose for this wrapper is to set sane defaults for the -- common_dcfifo generics. These defaults may be overridden as needed. library ieee; use ieee.std_logic_1164.all; library work; use work.common_dcfifo_p.all; entity rx_meta_fifo is generic ( ADD_RAM_OUTPUT_REGISTER : string := "OFF"; ADD_USEDW_MSB_BIT : string := "OFF"; CLOCKS_ARE_SYNCHRONIZED : string := "FALSE"; DELAY_RDUSEDW : natural := 1; DELAY_WRUSEDW : natural := 1; INTENDED_DEVICE_FAMILY : string := "Cyclone V"; LPM_NUMWORDS : natural := 32; LPM_SHOWAHEAD : string := "ON"; LPM_WIDTH : natural := 128; LPM_WIDTH_R : natural := 32; OVERFLOW_CHECKING : string := "ON"; RDSYNC_DELAYPIPE : natural := 5; READ_ACLR_SYNCH : string := "ON"; UNDERFLOW_CHECKING : string := "ON"; USE_EAB : string := "ON"; WRITE_ACLR_SYNCH : string := "ON"; WRSYNC_DELAYPIPE : natural := 5 ); port ( aclr : in std_logic := '0'; data : in std_logic_vector(LPM_WIDTH-1 downto 0); rdclk : in std_logic; rdreq : in std_logic; wrclk : in std_logic; wrreq : in std_logic; q : out std_logic_vector(LPM_WIDTH_R-1 downto 0); rdempty : out std_logic; rdfull : out std_logic; rdusedw : out std_logic_vector(compute_rdusedw_high(LPM_NUMWORDS, LPM_WIDTH, LPM_WIDTH_R, ADD_USEDW_MSB_BIT) downto 0); wrempty : out std_logic; wrfull : out std_logic; wrusedw : out std_logic_vector(compute_wrusedw_high(LPM_NUMWORDS, ADD_USEDW_MSB_BIT) downto 0) --eccstatus : out std_logic_vector(1 downto 0) ); end entity; architecture arch of rx_meta_fifo is begin U_common_dcfifo : entity work.common_dcfifo generic map ( ADD_RAM_OUTPUT_REGISTER => ADD_RAM_OUTPUT_REGISTER, ADD_USEDW_MSB_BIT => ADD_USEDW_MSB_BIT, CLOCKS_ARE_SYNCHRONIZED => CLOCKS_ARE_SYNCHRONIZED, DELAY_RDUSEDW => DELAY_RDUSEDW, DELAY_WRUSEDW => DELAY_WRUSEDW, INTENDED_DEVICE_FAMILY => INTENDED_DEVICE_FAMILY, --ENABLE_ECC => ENABLE_ECC, LPM_NUMWORDS => LPM_NUMWORDS, LPM_SHOWAHEAD => LPM_SHOWAHEAD, LPM_WIDTH => LPM_WIDTH, LPM_WIDTH_R => LPM_WIDTH_R, OVERFLOW_CHECKING => OVERFLOW_CHECKING, RDSYNC_DELAYPIPE => RDSYNC_DELAYPIPE, READ_ACLR_SYNCH => READ_ACLR_SYNCH, UNDERFLOW_CHECKING => UNDERFLOW_CHECKING, USE_EAB => USE_EAB, WRITE_ACLR_SYNCH => WRITE_ACLR_SYNCH, WRSYNC_DELAYPIPE => WRSYNC_DELAYPIPE ) port map ( aclr => aclr, data => data, rdclk => rdclk, rdreq => rdreq, wrclk => wrclk, wrreq => wrreq, q => q, rdempty => rdempty, rdfull => rdfull, rdusedw => rdusedw, wrempty => wrempty, wrfull => wrfull, wrusedw => wrusedw --eccstatus => eccstatus ); end architecture; bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/vhdl/wrappers/tx_fifo.vhd000066400000000000000000000073451457144405000263440ustar00rootroot00000000000000-- The only purpose for this wrapper is to set sane defaults for the -- common_dcfifo generics. These defaults may be overridden as needed. library ieee; use ieee.std_logic_1164.all; library work; use work.common_dcfifo_p.all; entity tx_fifo is generic ( ADD_RAM_OUTPUT_REGISTER : string := "OFF"; ADD_USEDW_MSB_BIT : string := "OFF"; CLOCKS_ARE_SYNCHRONIZED : string := "FALSE"; DELAY_RDUSEDW : natural := 1; DELAY_WRUSEDW : natural := 1; INTENDED_DEVICE_FAMILY : string := "Cyclone V"; LPM_NUMWORDS : natural := 4096; LPM_SHOWAHEAD : string := "ON"; LPM_WIDTH : natural := 32; LPM_WIDTH_R : natural := 64; OVERFLOW_CHECKING : string := "ON"; RDSYNC_DELAYPIPE : natural := 5; READ_ACLR_SYNCH : string := "ON"; UNDERFLOW_CHECKING : string := "ON"; USE_EAB : string := "ON"; WRITE_ACLR_SYNCH : string := "ON"; WRSYNC_DELAYPIPE : natural := 5 ); port ( aclr : in std_logic := '0'; data : in std_logic_vector(LPM_WIDTH-1 downto 0); rdclk : in std_logic; rdreq : in std_logic; wrclk : in std_logic; wrreq : in std_logic; q : out std_logic_vector(LPM_WIDTH_R-1 downto 0); rdempty : out std_logic; rdfull : out std_logic; rdusedw : out std_logic_vector(compute_rdusedw_high(LPM_NUMWORDS, LPM_WIDTH, LPM_WIDTH_R, ADD_USEDW_MSB_BIT) downto 0); wrempty : out std_logic; wrfull : out std_logic; wrusedw : out std_logic_vector(compute_wrusedw_high(LPM_NUMWORDS, ADD_USEDW_MSB_BIT) downto 0) --eccstatus : out std_logic_vector(1 downto 0) ); end entity; architecture arch of tx_fifo is begin U_common_dcfifo : entity work.common_dcfifo generic map ( ADD_RAM_OUTPUT_REGISTER => ADD_RAM_OUTPUT_REGISTER, ADD_USEDW_MSB_BIT => ADD_USEDW_MSB_BIT, CLOCKS_ARE_SYNCHRONIZED => CLOCKS_ARE_SYNCHRONIZED, DELAY_RDUSEDW => DELAY_RDUSEDW, DELAY_WRUSEDW => DELAY_WRUSEDW, INTENDED_DEVICE_FAMILY => INTENDED_DEVICE_FAMILY, --ENABLE_ECC => ENABLE_ECC, LPM_NUMWORDS => LPM_NUMWORDS, LPM_SHOWAHEAD => LPM_SHOWAHEAD, LPM_WIDTH => LPM_WIDTH, LPM_WIDTH_R => LPM_WIDTH_R, OVERFLOW_CHECKING => OVERFLOW_CHECKING, RDSYNC_DELAYPIPE => RDSYNC_DELAYPIPE, READ_ACLR_SYNCH => READ_ACLR_SYNCH, UNDERFLOW_CHECKING => UNDERFLOW_CHECKING, USE_EAB => USE_EAB, WRITE_ACLR_SYNCH => WRITE_ACLR_SYNCH, WRSYNC_DELAYPIPE => WRSYNC_DELAYPIPE ) port map ( aclr => aclr, data => data, rdclk => rdclk, rdreq => rdreq, wrclk => wrclk, wrreq => wrreq, q => q, rdempty => rdempty, rdfull => rdfull, rdusedw => rdusedw, wrempty => wrempty, wrfull => wrfull, wrusedw => wrusedw --eccstatus => eccstatus ); end architecture; bladeRF-2024.05/hdl/fpga/platforms/bladerf-micro/vhdl/wrappers/tx_meta_fifo.vhd000066400000000000000000000073561457144405000273540ustar00rootroot00000000000000-- The only purpose for this wrapper is to set sane defaults for the -- common_dcfifo generics. These defaults may be overridden as needed. library ieee; use ieee.std_logic_1164.all; library work; use work.common_dcfifo_p.all; entity tx_meta_fifo is generic ( ADD_RAM_OUTPUT_REGISTER : string := "OFF"; ADD_USEDW_MSB_BIT : string := "OFF"; CLOCKS_ARE_SYNCHRONIZED : string := "FALSE"; DELAY_RDUSEDW : natural := 1; DELAY_WRUSEDW : natural := 1; INTENDED_DEVICE_FAMILY : string := "Cyclone V"; LPM_NUMWORDS : natural := 32; LPM_SHOWAHEAD : string := "ON"; LPM_WIDTH : natural := 32; LPM_WIDTH_R : natural := 128; OVERFLOW_CHECKING : string := "ON"; RDSYNC_DELAYPIPE : natural := 5; READ_ACLR_SYNCH : string := "ON"; UNDERFLOW_CHECKING : string := "ON"; USE_EAB : string := "ON"; WRITE_ACLR_SYNCH : string := "ON"; WRSYNC_DELAYPIPE : natural := 5 ); port ( aclr : in std_logic := '0'; data : in std_logic_vector(LPM_WIDTH-1 downto 0); rdclk : in std_logic; rdreq : in std_logic; wrclk : in std_logic; wrreq : in std_logic; q : out std_logic_vector(LPM_WIDTH_R-1 downto 0); rdempty : out std_logic; rdfull : out std_logic; rdusedw : out std_logic_vector(compute_rdusedw_high(LPM_NUMWORDS, LPM_WIDTH, LPM_WIDTH_R, ADD_USEDW_MSB_BIT) downto 0); wrempty : out std_logic; wrfull : out std_logic; wrusedw : out std_logic_vector(compute_wrusedw_high(LPM_NUMWORDS, ADD_USEDW_MSB_BIT) downto 0) --eccstatus : out std_logic_vector(1 downto 0) ); end entity; architecture arch of tx_meta_fifo is begin U_common_dcfifo : entity work.common_dcfifo generic map ( ADD_RAM_OUTPUT_REGISTER => ADD_RAM_OUTPUT_REGISTER, ADD_USEDW_MSB_BIT => ADD_USEDW_MSB_BIT, CLOCKS_ARE_SYNCHRONIZED => CLOCKS_ARE_SYNCHRONIZED, DELAY_RDUSEDW => DELAY_RDUSEDW, DELAY_WRUSEDW => DELAY_WRUSEDW, INTENDED_DEVICE_FAMILY => INTENDED_DEVICE_FAMILY, --ENABLE_ECC => ENABLE_ECC, LPM_NUMWORDS => LPM_NUMWORDS, LPM_SHOWAHEAD => LPM_SHOWAHEAD, LPM_WIDTH => LPM_WIDTH, LPM_WIDTH_R => LPM_WIDTH_R, OVERFLOW_CHECKING => OVERFLOW_CHECKING, RDSYNC_DELAYPIPE => RDSYNC_DELAYPIPE, READ_ACLR_SYNCH => READ_ACLR_SYNCH, UNDERFLOW_CHECKING => UNDERFLOW_CHECKING, USE_EAB => USE_EAB, WRITE_ACLR_SYNCH => WRITE_ACLR_SYNCH, WRSYNC_DELAYPIPE => WRSYNC_DELAYPIPE ) port map ( aclr => aclr, data => data, rdclk => rdclk, rdreq => rdreq, wrclk => wrclk, wrreq => wrreq, q => q, rdempty => rdempty, rdfull => rdfull, rdusedw => rdusedw, wrempty => wrempty, wrfull => wrfull, wrusedw => wrusedw --eccstatus => eccstatus ); end architecture; bladeRF-2024.05/hdl/fpga/platforms/bladerf/000077500000000000000000000000001457144405000202635ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/platforms/bladerf/bladerf-adsb.qip000066400000000000000000000063641457144405000233150ustar00rootroot00000000000000# Convenience variable set here $::quartus(qip_path) set common_dir [file normalize [file join $here ../common/bladerf]] set altera_ip [file normalize [file join $here ../../ip/altera]] set adi_ip [file normalize [file join $here ../../ip/analogdevicesinc]] set nuand_ip [file normalize [file join $here ../../ip/nuand]] # Altera IP set_global_assignment -name QIP_FILE [file normalize [file join $altera_ip pll/pll.qip]] set_global_assignment -name QIP_FILE [file normalize [file join $altera_ip fx3_pll/fx3_pll.qip]] set_global_assignment -name VHDL_FILE [file normalize [file join $altera_ip common_dcfifo/common_dcfifo.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $here vhdl/wrappers/rx_fifo.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $here vhdl/wrappers/tx_fifo.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $here vhdl/wrappers/rx_meta_fifo.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $here vhdl/wrappers/tx_meta_fifo.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $here vhdl/wrappers/adsbfifo.vhd]] # Explicitly include Nios mem_init set_global_assignment -name QIP_FILE [file normalize bladeRF_nios/mem_init/meminit.qip] # Implementation details set_global_assignment -name QIP_FILE [file normalize nios_system/synthesis/nios_system.qip] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/constellation_mapper.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/fir_filter.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/tan_table.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/iq_correction.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/signal_generator.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/synchronizer.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/handshake.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/reset_synchronizer.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/fifo_readwrite_p.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/fifo_reader.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/fifo_writer.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/lms6002d/vhdl/lms6002d.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/set_clear_ff.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $common_dir vhdl/fx3_gpif.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $here vhdl/bladerf-adsb.vhd]] # SDC Constraints set_global_assignment -name SDC_FILE [file normalize [file join $here constraints/bladerf.sdc]] set_global_assignment -name QIP_FILE [file normalize [file join $nuand_ip adsb/quartus/adsb_decoder.qip]] bladeRF-2024.05/hdl/fpga/platforms/bladerf/bladerf-atsc_tx.qip000066400000000000000000000063551457144405000240510ustar00rootroot00000000000000# Convenience variable set here $::quartus(qip_path) set common_dir [file normalize [file join $here ../common/bladerf]] set altera_ip [file normalize [file join $here ../../ip/altera]] set adi_ip [file normalize [file join $here ../../ip/analogdevicesinc]] set nuand_ip [file normalize [file join $here ../../ip/nuand]] # Altera IP set_global_assignment -name QIP_FILE [file normalize [file join $altera_ip pll/pll.qip]] set_global_assignment -name QIP_FILE [file normalize [file join $altera_ip fx3_pll/fx3_pll.qip]] set_global_assignment -name VHDL_FILE [file normalize [file join $altera_ip common_dcfifo/common_dcfifo.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $here vhdl/wrappers/rx_fifo.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $here vhdl/wrappers/tx_fifo.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $here vhdl/wrappers/rx_meta_fifo.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $here vhdl/wrappers/tx_meta_fifo.vhd]] # Explicitly include Nios mem_init set_global_assignment -name QIP_FILE [file normalize bladeRF_nios/mem_init/meminit.qip] # Implementation details set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/fir_filter.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/bit_stripper.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/constellation_mapper.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/atsc_tx.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/tan_table.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/iq_correction.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/signal_generator.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/synchronizer.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/handshake.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/reset_synchronizer.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/fifo_readwrite_p.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/fifo_reader.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/fifo_writer.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/lms6002d/vhdl/lms6002d.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/set_clear_ff.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $common_dir vhdl/fx3_gpif.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $here vhdl/bladerf-atsc_tx.vhd]] set_global_assignment -name QIP_FILE [file normalize nios_system/synthesis/nios_system.qip] # SDC Constraints set_global_assignment -name SDC_FILE [file normalize [file join $here constraints/bladerf.sdc]] bladeRF-2024.05/hdl/fpga/platforms/bladerf/bladerf-fsk_bridge.qip000066400000000000000000000036771457144405000245070ustar00rootroot00000000000000# Convenience variable set here $::quartus(qip_path) set common_dir [file normalize [file join $here ../common/bladerf]] set altera_ip [file normalize [file join $here ../../ip/altera]] set adi_ip [file normalize [file join $here ../../ip/analogdevicesinc]] set nuand_ip [file normalize [file join $here ../../ip/nuand]] # Altera IP set_global_assignment -name QIP_FILE [file normalize [file join $altera_ip pll/pll.qip]] set_global_assignment -name VHDL_FILE [file normalize [file join $altera_ip common_dcfifo/common_dcfifo.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $here vhdl/wrappers/rx_fifo.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $here vhdl/wrappers/tx_fifo.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $here vhdl/wrappers/rx_meta_fifo.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $here vhdl/wrappers/tx_meta_fifo.vhd]] set_global_assignment -name QIP_FILE [file normalize [file join $altera_ip serial_pll/serial_pll.qip]] # Nuand IP set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/fsk_demodulator.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/fsk_modulator.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/nco.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/cordic.vhd]] # Implementation details set_global_assignment -name VHDL_FILE [file normalize [file join $common_dir vhdl/ramp.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $here vhdl/bladerf-fsk_bridge.vhd]] set_global_assignment -name QIP_FILE [file normalize nios_system/synthesis/nios_system.qip] # SDC Constraints set_global_assignment -name SDC_FILE [file normalize [file join $here constraints/bladerf.sdc]] bladeRF-2024.05/hdl/fpga/platforms/bladerf/bladerf-headless.qip000066400000000000000000000000001457144405000241510ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/platforms/bladerf/bladerf-hosted.qip000066400000000000000000000067661457144405000237000ustar00rootroot00000000000000# Convenience variable set here $::quartus(qip_path) set common_dir [file normalize [file join $here ../common/bladerf]] set altera_ip [file normalize [file join $here ../../ip/altera]] set adi_ip [file normalize [file join $here ../../ip/analogdevicesinc]] set nuand_ip [file normalize [file join $here ../../ip/nuand]] # Altera IP set_global_assignment -name QIP_FILE [file normalize [file join $altera_ip pll/pll.qip]] set_global_assignment -name QIP_FILE [file normalize [file join $altera_ip fx3_pll/fx3_pll.qip]] set_global_assignment -name VHDL_FILE [file normalize [file join $altera_ip common_dcfifo/common_dcfifo.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $here vhdl/wrappers/lb_fifo.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $here vhdl/wrappers/rx_fifo.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $here vhdl/wrappers/tx_fifo.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $here vhdl/wrappers/rx_meta_fifo.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $here vhdl/wrappers/tx_meta_fifo.vhd]] # Explicitly include Nios mem_init set_global_assignment -name QIP_FILE [file normalize bladeRF_nios/mem_init/meminit.qip] # Implementation details set_global_assignment -name QIP_FILE [file normalize nios_system/synthesis/nios_system.qip] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/tan_table.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/iq_correction.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/signal_generator.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/synchronizer.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/handshake.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/reset_synchronizer.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/fifo_readwrite_p.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/fifo_reader.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/fifo_writer.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/lms6002d/vhdl/lms6002d.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip lms6_spi_controller/vhdl/lms6_spi_controller.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/lms6002d/vhdl/bladerf_agc_lms_drv.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/lms6002d/vhdl/bladerf_agc.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip trigger/trigger.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/set_clear_ff.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $common_dir vhdl/fx3_gpif.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/rx_packet_generator.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $here vhdl/bladerf-hosted.vhd]] # SDC Constraints set_global_assignment -name SDC_FILE [file normalize [file join $here constraints/bladerf.sdc]] bladeRF-2024.05/hdl/fpga/platforms/bladerf/bladerf-qpsk_tx.qip000066400000000000000000000033411457144405000240650ustar00rootroot00000000000000# Convenience variable set here $::quartus(qip_path) set common_dir [file normalize [file join $here ../common/bladerf]] set altera_ip [file normalize [file join $here ../../ip/altera]] set adi_ip [file normalize [file join $here ../../ip/analogdevicesinc]] set nuand_ip [file normalize [file join $here ../../ip/nuand]] # Altera IP set_global_assignment -name QIP_FILE [file normalize [file join $altera_ip pll/pll.qip]] set_global_assignment -name VHDL_FILE [file normalize [file join $altera_ip common_dcfifo/common_dcfifo.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $here vhdl/wrappers/rx_fifo.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $here vhdl/wrappers/tx_fifo.vhd]] set_global_assignment -name QIP_FILE [file normalize [file join $altera_ip serial_pll/serial_pll.qip]] # Nuand IP set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/fsk_demodulator.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/fsk_modulator.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/nco.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $nuand_ip synthesis/cordic.vhd]] # Implementation details set_global_assignment -name QIP_FILE [file normalize nios_system/synthesis/nios_system.qip]] set_global_assignment -name VHDL_FILE [file normalize [file join $common_dir vhdl/ramp.vhd]] set_global_assignment -name VHDL_FILE [file normalize [file join $here vhdl/bladerf-qpsk_tx.vhd]] # SDC Constraints set_global_assignment -name SDC_FILE [file normalize [file join $here constraints/bladerf.sdc]] bladeRF-2024.05/hdl/fpga/platforms/bladerf/bladerf.do000066400000000000000000000011531457144405000222060ustar00rootroot00000000000000proc compile_bladerf { root } { vlib pll vcom -work pll [file join $root ../../ip/altera/pll/pll.vhd] vlib serial_pll vcom -work serial_pll [file join $root ../../ip/altera/serial_pll/serial_pll.vhd] vlib nuand vcom -work nuand -2008 [file join $root ./vhdl/fx3.vhd] vcom -work nuand -2008 [file join $root ./vhdl/bladerf_debug_p.vhd] vcom -work nuand -2008 [file join $root ./vhdl/ramp.vhd] vcom -work nuand -2008 [file join $root ./vhdl/bladerf_p.vhd] vcom -work nuand -2008 [file join $root ./vhdl/bladerf.vhd] vcom -work nuand -2008 [file join $root ./vhdl/tb/bladerf_tb.vhd] } bladeRF-2024.05/hdl/fpga/platforms/bladerf/bladerf.qip000066400000000000000000000011651457144405000224000ustar00rootroot00000000000000# Convenience variable set here $::quartus(qip_path) set altera_ip [file normalize [file join $here ../../ip/altera]] set adi_ip [file normalize [file join $here ../../ip/analogdevicesinc]] set nuand_ip [file normalize [file join $here ../../ip/nuand]] # Platform packages set_global_assignment -name VHDL_FILE [file normalize [file join $here vhdl/bladerf_p.vhd]] # Top level entity and pin constraints set_global_assignment -name VHDL_FILE [file normalize [file join $here vhdl/bladerf.vhd]] # Basic timing constraints set_global_assignment -name SDC_FILE [file normalize [file join $here constraints/bladerf.sdc]] bladeRF-2024.05/hdl/fpga/platforms/bladerf/build/000077500000000000000000000000001457144405000213625ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/platforms/bladerf/build/bladerf.tcl000066400000000000000000000120201457144405000234600ustar00rootroot00000000000000load_package flow package require cmdline # Define the command argument structure as specified here: # https://www.altera.com/support/support-resources/design-examples/design-software/tcl/open_project.html set options { \ { "projname.arg" "bladerf" "Project name" } \ { "part.arg" "" "FPGA part number" } \ { "platdir.arg" "0" "Platform directory" } \ { "outdir.arg" "output_files" "Directory to place generated outputs (.sof, .rbf, .rpt, etc.)" } \ } # Parse the command arguments, store them into 'opts' array set opts [::cmdline::getoptions quartus(args) $options] set PROJECT_NAME $opts(projname) set TOP_LEVEL "bladerf" set BASE_REV "base" # Make a revision of the bladeRF FPGA based on a qip file in the platforms directory proc make_revision { rev } { global PROJECT_NAME global BASE_REV global opts if [revision_exists ${rev}] { project_open -revision ${rev} ${PROJECT_NAME} } else { create_revision -based_on ${BASE_REV} -set_current ${rev} } set_global_assignment -name QIP_FILE [file normalize $opts(platdir)/${PROJECT_NAME}-$rev.qip] export_assignments } # Create the base project revision if [project_exists ${PROJECT_NAME}] { project_open -revision ${BASE_REV} ${PROJECT_NAME} } else { project_new -part $opts(part) -revision ${BASE_REV} ${PROJECT_NAME} } set_global_assignment -name DEVICE $opts(part) set_global_assignment -name VHDL_INPUT_VERSION VHDL_2008 set_global_assignment -name TOP_LEVEL_ENTITY ${TOP_LEVEL} set_global_assignment -name PROJECT_OUTPUT_DIRECTORY $opts(outdir) set_global_assignment -name NUM_PARALLEL_PROCESSORS ALL # Configuration settings set_global_assignment -name CYCLONEIII_CONFIGURATION_SCHEME "FAST PASSIVE PARALLEL" set_global_assignment -name USE_CONFIGURATION_DEVICE OFF set_global_assignment -name GENERATE_TTF_FILE ON set_global_assignment -name GENERATE_RBF_FILE ON set_global_assignment -name CRC_ERROR_OPEN_DRAIN OFF set_global_assignment -name ON_CHIP_BITSTREAM_DECOMPRESSION OFF set_global_assignment -name RESERVE_DATA0_AFTER_CONFIGURATION "USE AS REGULAR IO" set_global_assignment -name RESERVE_DATA1_AFTER_CONFIGURATION "USE AS REGULAR IO" set_global_assignment -name RESERVE_DATA7_THROUGH_DATA2_AFTER_CONFIGURATION "USE AS REGULAR IO" set_global_assignment -name RESERVE_FLASH_NCE_AFTER_CONFIGURATION "USE AS REGULAR IO" set_global_assignment -name RESERVE_OTHER_AP_PINS_AFTER_CONFIGURATION "USE AS REGULAR IO" set_global_assignment -name CYCLONEII_RESERVE_NCEO_AFTER_CONFIGURATION "USE AS REGULAR IO" set_global_assignment -name RESERVE_DCLK_AFTER_CONFIGURATION "USE AS REGULAR IO" set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -rise set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -fall set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -rise set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -fall set_global_assignment -name CYCLONEII_OPTIMIZATION_TECHNIQUE SPEED set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC ON set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_DUPLICATION ON set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_RETIMING ON set_global_assignment -name ROUTER_LCELL_INSERTION_AND_LOGIC_DUPLICATION ON set_global_assignment -name ROUTER_TIMING_OPTIMIZATION_LEVEL MAXIMUM set_global_assignment -name AUTO_PACKED_REGISTERS_STRATIXII NORMAL set_global_assignment -name FITTER_EFFORT "STANDARD FIT" set_global_assignment -name ADV_NETLIST_OPT_SYNTH_WYSIWYG_REMAP ON set_global_assignment -name ROUTER_CLOCKING_TOPOLOGY_ANALYSIS ON set_global_assignment -name ENABLE_DRC_SETTINGS ON set_instance_assignment -name FAST_INPUT_REGISTER ON -to lms_rx_data[*] set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to fx3_gpif[*] set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to lms_tx_data[*] set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to fx3_ctl[*] set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to fx3_gpif[*] set_global_assignment -name OPTIMIZE_POWER_DURING_FITTING "EXTRA EFFORT" set_global_assignment -name FITTER_AUTO_EFFORT_DESIRED_SLACK_MARGIN "1 ns" #set_global_assignment -name RESERVE_ALL_UNUSED_PINS_WEAK_PULLUP "AS OUTPUT DRIVING GROUND" # Add IP files and pin assignments set_global_assignment -name QIP_FILE [file normalize $opts(platdir)/${PROJECT_NAME}.qip] source [file normalize $opts(platdir)/constraints/pins.tcl] file copy -force $opts(platdir)/build/ip.ipx ./ip.ipx export_assignments # At this point, we can add custom revisions # Create the hosted make_revision hosted # Create headless make_revision headless # Create fsk_bridge make_revision fsk_bridge # Create QPSK transmitter make_revision qpsk_tx # Create ATSC transmitter make_revision atsc_tx # Create ADSB receiver make_revision adsb # Projects created! puts "${PROJECT_NAME} projects created!" puts "Please use the build.tcl script to build images.\n" puts "Revisions:" foreach rev [get_project_revisions] { puts " $rev" } project_close bladeRF-2024.05/hdl/fpga/platforms/bladerf/build/ip.ipx000066400000000000000000000006201457144405000225120ustar00rootroot00000000000000 bladeRF-2024.05/hdl/fpga/platforms/bladerf/build/nios_system.tcl000066400000000000000000001136201457144405000244450ustar00rootroot00000000000000# qsys scripting (.tcl) file for nios_system package require -exact qsys 16.0 create_system {nios_system} set_project_property HIDE_FROM_IP_CATALOG {false} if { [info exists device_family] == 0 } { error "Device family variable not set." } else { set_project_property DEVICE_FAMILY $device_family } if { [info exists device] == 0 } { error "Device variable not set." } else { set_project_property DEVICE $device } if { [info exists nios_impl] == 0 } { error "Nios implementation variable not set." } else { switch -regexp $nios_impl { "[Tt][Ii][Nn][Yy]" { puts "using tiny"; set nios_impl Tiny } "[Ff][Aa][Ss][Tt]" { puts "using fast"; set nios_impl Fast } default { error "Invalid NIOS implementation: ${nios_impl}." } } } # Instances and instance parameters # (disabled instances are intentionally culled) add_instance agc_dc_i_max altera_avalon_pio set_instance_parameter_value agc_dc_i_max {bitClearingEdgeCapReg} {0} set_instance_parameter_value agc_dc_i_max {bitModifyingOutReg} {0} set_instance_parameter_value agc_dc_i_max {captureEdge} {0} set_instance_parameter_value agc_dc_i_max {direction} {Output} set_instance_parameter_value agc_dc_i_max {edgeType} {RISING} set_instance_parameter_value agc_dc_i_max {generateIRQ} {0} set_instance_parameter_value agc_dc_i_max {irqType} {LEVEL} set_instance_parameter_value agc_dc_i_max {resetValue} {0.0} set_instance_parameter_value agc_dc_i_max {simDoTestBenchWiring} {0} set_instance_parameter_value agc_dc_i_max {simDrivenValue} {0.0} set_instance_parameter_value agc_dc_i_max {width} {16} add_instance agc_dc_i_mid altera_avalon_pio set_instance_parameter_value agc_dc_i_mid {bitClearingEdgeCapReg} {0} set_instance_parameter_value agc_dc_i_mid {bitModifyingOutReg} {0} set_instance_parameter_value agc_dc_i_mid {captureEdge} {0} set_instance_parameter_value agc_dc_i_mid {direction} {Output} set_instance_parameter_value agc_dc_i_mid {edgeType} {RISING} set_instance_parameter_value agc_dc_i_mid {generateIRQ} {0} set_instance_parameter_value agc_dc_i_mid {irqType} {LEVEL} set_instance_parameter_value agc_dc_i_mid {resetValue} {0.0} set_instance_parameter_value agc_dc_i_mid {simDoTestBenchWiring} {0} set_instance_parameter_value agc_dc_i_mid {simDrivenValue} {0.0} set_instance_parameter_value agc_dc_i_mid {width} {16} add_instance agc_dc_i_min altera_avalon_pio set_instance_parameter_value agc_dc_i_min {bitClearingEdgeCapReg} {0} set_instance_parameter_value agc_dc_i_min {bitModifyingOutReg} {0} set_instance_parameter_value agc_dc_i_min {captureEdge} {0} set_instance_parameter_value agc_dc_i_min {direction} {Output} set_instance_parameter_value agc_dc_i_min {edgeType} {RISING} set_instance_parameter_value agc_dc_i_min {generateIRQ} {0} set_instance_parameter_value agc_dc_i_min {irqType} {LEVEL} set_instance_parameter_value agc_dc_i_min {resetValue} {0.0} set_instance_parameter_value agc_dc_i_min {simDoTestBenchWiring} {0} set_instance_parameter_value agc_dc_i_min {simDrivenValue} {0.0} set_instance_parameter_value agc_dc_i_min {width} {16} add_instance agc_dc_q_max altera_avalon_pio set_instance_parameter_value agc_dc_q_max {bitClearingEdgeCapReg} {0} set_instance_parameter_value agc_dc_q_max {bitModifyingOutReg} {0} set_instance_parameter_value agc_dc_q_max {captureEdge} {0} set_instance_parameter_value agc_dc_q_max {direction} {Output} set_instance_parameter_value agc_dc_q_max {edgeType} {RISING} set_instance_parameter_value agc_dc_q_max {generateIRQ} {0} set_instance_parameter_value agc_dc_q_max {irqType} {LEVEL} set_instance_parameter_value agc_dc_q_max {resetValue} {0.0} set_instance_parameter_value agc_dc_q_max {simDoTestBenchWiring} {0} set_instance_parameter_value agc_dc_q_max {simDrivenValue} {0.0} set_instance_parameter_value agc_dc_q_max {width} {16} add_instance agc_dc_q_mid altera_avalon_pio set_instance_parameter_value agc_dc_q_mid {bitClearingEdgeCapReg} {0} set_instance_parameter_value agc_dc_q_mid {bitModifyingOutReg} {0} set_instance_parameter_value agc_dc_q_mid {captureEdge} {0} set_instance_parameter_value agc_dc_q_mid {direction} {Output} set_instance_parameter_value agc_dc_q_mid {edgeType} {RISING} set_instance_parameter_value agc_dc_q_mid {generateIRQ} {0} set_instance_parameter_value agc_dc_q_mid {irqType} {LEVEL} set_instance_parameter_value agc_dc_q_mid {resetValue} {0.0} set_instance_parameter_value agc_dc_q_mid {simDoTestBenchWiring} {0} set_instance_parameter_value agc_dc_q_mid {simDrivenValue} {0.0} set_instance_parameter_value agc_dc_q_mid {width} {16} add_instance agc_dc_q_min altera_avalon_pio set_instance_parameter_value agc_dc_q_min {bitClearingEdgeCapReg} {0} set_instance_parameter_value agc_dc_q_min {bitModifyingOutReg} {0} set_instance_parameter_value agc_dc_q_min {captureEdge} {0} set_instance_parameter_value agc_dc_q_min {direction} {Output} set_instance_parameter_value agc_dc_q_min {edgeType} {RISING} set_instance_parameter_value agc_dc_q_min {generateIRQ} {0} set_instance_parameter_value agc_dc_q_min {irqType} {LEVEL} set_instance_parameter_value agc_dc_q_min {resetValue} {0.0} set_instance_parameter_value agc_dc_q_min {simDoTestBenchWiring} {0} set_instance_parameter_value agc_dc_q_min {simDrivenValue} {0.0} set_instance_parameter_value agc_dc_q_min {width} {16} add_instance arbiter_0 arbiter 1.0 set_instance_parameter_value arbiter_0 {N} {2} add_instance command_uart command_uart 1.0 add_instance control altera_avalon_pio set_instance_parameter_value control {bitClearingEdgeCapReg} {0} set_instance_parameter_value control {bitModifyingOutReg} {1} set_instance_parameter_value control {captureEdge} {0} set_instance_parameter_value control {direction} {InOut} set_instance_parameter_value control {edgeType} {RISING} set_instance_parameter_value control {generateIRQ} {0} set_instance_parameter_value control {irqType} {LEVEL} set_instance_parameter_value control {resetValue} {0.0} set_instance_parameter_value control {simDoTestBenchWiring} {0} set_instance_parameter_value control {simDrivenValue} {0.0} set_instance_parameter_value control {width} {32} add_instance iq_corr_rx_phase_gain altera_avalon_pio set_instance_parameter_value iq_corr_rx_phase_gain {bitClearingEdgeCapReg} {0} set_instance_parameter_value iq_corr_rx_phase_gain {bitModifyingOutReg} {0} set_instance_parameter_value iq_corr_rx_phase_gain {captureEdge} {0} set_instance_parameter_value iq_corr_rx_phase_gain {direction} {Output} set_instance_parameter_value iq_corr_rx_phase_gain {edgeType} {RISING} set_instance_parameter_value iq_corr_rx_phase_gain {generateIRQ} {0} set_instance_parameter_value iq_corr_rx_phase_gain {irqType} {LEVEL} set_instance_parameter_value iq_corr_rx_phase_gain {resetValue} {0.0} set_instance_parameter_value iq_corr_rx_phase_gain {simDoTestBenchWiring} {0} set_instance_parameter_value iq_corr_rx_phase_gain {simDrivenValue} {0.0} set_instance_parameter_value iq_corr_rx_phase_gain {width} {32} add_instance iq_corr_tx_phase_gain altera_avalon_pio set_instance_parameter_value iq_corr_tx_phase_gain {bitClearingEdgeCapReg} {0} set_instance_parameter_value iq_corr_tx_phase_gain {bitModifyingOutReg} {0} set_instance_parameter_value iq_corr_tx_phase_gain {captureEdge} {0} set_instance_parameter_value iq_corr_tx_phase_gain {direction} {Output} set_instance_parameter_value iq_corr_tx_phase_gain {edgeType} {RISING} set_instance_parameter_value iq_corr_tx_phase_gain {generateIRQ} {0} set_instance_parameter_value iq_corr_tx_phase_gain {irqType} {LEVEL} set_instance_parameter_value iq_corr_tx_phase_gain {resetValue} {0.0} set_instance_parameter_value iq_corr_tx_phase_gain {simDoTestBenchWiring} {0} set_instance_parameter_value iq_corr_tx_phase_gain {simDrivenValue} {0.0} set_instance_parameter_value iq_corr_tx_phase_gain {width} {32} add_instance jtag_uart altera_avalon_jtag_uart set_instance_parameter_value jtag_uart {allowMultipleConnections} {0} set_instance_parameter_value jtag_uart {hubInstanceID} {0} set_instance_parameter_value jtag_uart {readBufferDepth} {64} set_instance_parameter_value jtag_uart {readIRQThreshold} {8} set_instance_parameter_value jtag_uart {simInputCharacterStream} {} set_instance_parameter_value jtag_uart {simInteractiveOptions} {INTERACTIVE_INPUT_OUTPUT} set_instance_parameter_value jtag_uart {useRegistersForReadBuffer} {0} set_instance_parameter_value jtag_uart {useRegistersForWriteBuffer} {0} set_instance_parameter_value jtag_uart {useRelativePathForSimFile} {0} set_instance_parameter_value jtag_uart {writeBufferDepth} {64} set_instance_parameter_value jtag_uart {writeIRQThreshold} {8} add_instance nios2 altera_nios2_gen2 set_instance_parameter_value nios2 {tmr_enabled} {0} set_instance_parameter_value nios2 {setting_disable_tmr_inj} {0} set_instance_parameter_value nios2 {setting_showUnpublishedSettings} {0} set_instance_parameter_value nios2 {setting_showInternalSettings} {0} set_instance_parameter_value nios2 {setting_preciseIllegalMemAccessException} {0} set_instance_parameter_value nios2 {setting_exportPCB} {0} set_instance_parameter_value nios2 {setting_exportdebuginfo} {0} set_instance_parameter_value nios2 {setting_clearXBitsLDNonBypass} {1} set_instance_parameter_value nios2 {setting_bigEndian} {0} set_instance_parameter_value nios2 {setting_export_large_RAMs} {0} set_instance_parameter_value nios2 {setting_asic_enabled} {0} set_instance_parameter_value nios2 {setting_asic_synopsys_translate_on_off} {0} set_instance_parameter_value nios2 {setting_asic_third_party_synthesis} {0} set_instance_parameter_value nios2 {setting_asic_add_scan_mode_input} {0} set_instance_parameter_value nios2 {setting_oci_version} {1} set_instance_parameter_value nios2 {setting_fast_register_read} {0} set_instance_parameter_value nios2 {setting_exportHostDebugPort} {0} set_instance_parameter_value nios2 {setting_oci_export_jtag_signals} {0} set_instance_parameter_value nios2 {setting_avalonDebugPortPresent} {0} set_instance_parameter_value nios2 {setting_alwaysEncrypt} {1} set_instance_parameter_value nios2 {io_regionbase} {0} set_instance_parameter_value nios2 {io_regionsize} {0} set_instance_parameter_value nios2 {setting_support31bitdcachebypass} {1} set_instance_parameter_value nios2 {setting_activateTrace} {1} set_instance_parameter_value nios2 {setting_allow_break_inst} {0} set_instance_parameter_value nios2 {setting_activateTestEndChecker} {0} set_instance_parameter_value nios2 {setting_ecc_sim_test_ports} {0} set_instance_parameter_value nios2 {setting_disableocitrace} {0} set_instance_parameter_value nios2 {setting_activateMonitors} {1} set_instance_parameter_value nios2 {setting_HDLSimCachesCleared} {1} set_instance_parameter_value nios2 {setting_HBreakTest} {0} set_instance_parameter_value nios2 {setting_breakslaveoveride} {0} set_instance_parameter_value nios2 {mpu_useLimit} {0} set_instance_parameter_value nios2 {mpu_enabled} {0} set_instance_parameter_value nios2 {mmu_enabled} {0} set_instance_parameter_value nios2 {mmu_autoAssignTlbPtrSz} {1} set_instance_parameter_value nios2 {cpuReset} {0} set_instance_parameter_value nios2 {resetrequest_enabled} {1} set_instance_parameter_value nios2 {setting_removeRAMinit} {0} set_instance_parameter_value nios2 {setting_tmr_output_disable} {0} set_instance_parameter_value nios2 {setting_shadowRegisterSets} {0} set_instance_parameter_value nios2 {mpu_numOfInstRegion} {8} set_instance_parameter_value nios2 {mpu_numOfDataRegion} {8} set_instance_parameter_value nios2 {mmu_TLBMissExcOffset} {0} set_instance_parameter_value nios2 {resetOffset} {0} set_instance_parameter_value nios2 {exceptionOffset} {32} set_instance_parameter_value nios2 {cpuID} {0} set_instance_parameter_value nios2 {breakOffset} {32} set_instance_parameter_value nios2 {userDefinedSettings} {} set_instance_parameter_value nios2 {tracefilename} {} set_instance_parameter_value nios2 {resetSlave} {ram.s1} set_instance_parameter_value nios2 {mmu_TLBMissExcSlave} {} set_instance_parameter_value nios2 {exceptionSlave} {ram.s1} set_instance_parameter_value nios2 {breakSlave} {nios2_qsys_0.jtag_debug_module} set_instance_parameter_value nios2 {setting_interruptControllerType} {Internal} set_instance_parameter_value nios2 {setting_branchpredictiontype} {Dynamic} set_instance_parameter_value nios2 {setting_bhtPtrSz} {8} set_instance_parameter_value nios2 {cpuArchRev} {1} set_instance_parameter_value nios2 {mul_shift_choice} {1} set_instance_parameter_value nios2 {mul_32_impl} {2} set_instance_parameter_value nios2 {mul_64_impl} {1} set_instance_parameter_value nios2 {shift_rot_impl} {1} set_instance_parameter_value nios2 {dividerType} {srt2} set_instance_parameter_value nios2 {mpu_minInstRegionSize} {12} set_instance_parameter_value nios2 {mpu_minDataRegionSize} {12} set_instance_parameter_value nios2 {mmu_uitlbNumEntries} {4} set_instance_parameter_value nios2 {mmu_udtlbNumEntries} {6} set_instance_parameter_value nios2 {mmu_tlbPtrSz} {7} set_instance_parameter_value nios2 {mmu_tlbNumWays} {16} set_instance_parameter_value nios2 {mmu_processIDNumBits} {8} set_instance_parameter_value nios2 {impl} ${nios_impl} set_instance_parameter_value nios2 {icache_size} {2048} set_instance_parameter_value nios2 {fa_cache_line} {2} set_instance_parameter_value nios2 {fa_cache_linesize} {0} set_instance_parameter_value nios2 {icache_tagramBlockType} {Automatic} set_instance_parameter_value nios2 {icache_ramBlockType} {Automatic} set_instance_parameter_value nios2 {icache_numTCIM} {0} set_instance_parameter_value nios2 {icache_burstType} {None} set_instance_parameter_value nios2 {dcache_bursts} {false} set_instance_parameter_value nios2 {dcache_victim_buf_impl} {ram} set_instance_parameter_value nios2 {dcache_size} {2048} set_instance_parameter_value nios2 {dcache_tagramBlockType} {Automatic} set_instance_parameter_value nios2 {dcache_ramBlockType} {Automatic} set_instance_parameter_value nios2 {dcache_numTCDM} {0} set_instance_parameter_value nios2 {setting_exportvectors} {0} set_instance_parameter_value nios2 {setting_usedesignware} {0} set_instance_parameter_value nios2 {setting_ecc_present} {0} set_instance_parameter_value nios2 {setting_ic_ecc_present} {1} set_instance_parameter_value nios2 {setting_rf_ecc_present} {1} set_instance_parameter_value nios2 {setting_mmu_ecc_present} {1} set_instance_parameter_value nios2 {setting_dc_ecc_present} {0} set_instance_parameter_value nios2 {setting_itcm_ecc_present} {0} set_instance_parameter_value nios2 {setting_dtcm_ecc_present} {0} set_instance_parameter_value nios2 {regfile_ramBlockType} {Automatic} set_instance_parameter_value nios2 {ocimem_ramBlockType} {Automatic} set_instance_parameter_value nios2 {ocimem_ramInit} {0} set_instance_parameter_value nios2 {mmu_ramBlockType} {Automatic} set_instance_parameter_value nios2 {bht_ramBlockType} {Automatic} set_instance_parameter_value nios2 {cdx_enabled} {0} set_instance_parameter_value nios2 {mpx_enabled} {0} set_instance_parameter_value nios2 {debug_enabled} {1} set_instance_parameter_value nios2 {debug_triggerArming} {1} set_instance_parameter_value nios2 {debug_debugReqSignals} {0} set_instance_parameter_value nios2 {debug_assignJtagInstanceID} {0} set_instance_parameter_value nios2 {debug_jtagInstanceID} {0} set_instance_parameter_value nios2 {debug_OCIOnchipTrace} {_128} set_instance_parameter_value nios2 {debug_hwbreakpoint} {0} set_instance_parameter_value nios2 {debug_datatrigger} {0} set_instance_parameter_value nios2 {debug_traceType} {none} set_instance_parameter_value nios2 {debug_traceStorage} {onchip_trace} set_instance_parameter_value nios2 {master_addr_map} {0} set_instance_parameter_value nios2 {instruction_master_paddr_base} {0} set_instance_parameter_value nios2 {instruction_master_paddr_size} {0.0} set_instance_parameter_value nios2 {flash_instruction_master_paddr_base} {0} set_instance_parameter_value nios2 {flash_instruction_master_paddr_size} {0.0} set_instance_parameter_value nios2 {data_master_paddr_base} {0} set_instance_parameter_value nios2 {data_master_paddr_size} {0.0} set_instance_parameter_value nios2 {tightly_coupled_instruction_master_0_paddr_base} {0} set_instance_parameter_value nios2 {tightly_coupled_instruction_master_0_paddr_size} {0.0} set_instance_parameter_value nios2 {tightly_coupled_instruction_master_1_paddr_base} {0} set_instance_parameter_value nios2 {tightly_coupled_instruction_master_1_paddr_size} {0.0} set_instance_parameter_value nios2 {tightly_coupled_instruction_master_2_paddr_base} {0} set_instance_parameter_value nios2 {tightly_coupled_instruction_master_2_paddr_size} {0.0} set_instance_parameter_value nios2 {tightly_coupled_instruction_master_3_paddr_base} {0} set_instance_parameter_value nios2 {tightly_coupled_instruction_master_3_paddr_size} {0.0} set_instance_parameter_value nios2 {tightly_coupled_data_master_0_paddr_base} {0} set_instance_parameter_value nios2 {tightly_coupled_data_master_0_paddr_size} {0.0} set_instance_parameter_value nios2 {tightly_coupled_data_master_1_paddr_base} {0} set_instance_parameter_value nios2 {tightly_coupled_data_master_1_paddr_size} {0.0} set_instance_parameter_value nios2 {tightly_coupled_data_master_2_paddr_base} {0} set_instance_parameter_value nios2 {tightly_coupled_data_master_2_paddr_size} {0.0} set_instance_parameter_value nios2 {tightly_coupled_data_master_3_paddr_base} {0} set_instance_parameter_value nios2 {tightly_coupled_data_master_3_paddr_size} {0.0} set_instance_parameter_value nios2 {instruction_master_high_performance_paddr_base} {0} set_instance_parameter_value nios2 {instruction_master_high_performance_paddr_size} {0.0} set_instance_parameter_value nios2 {data_master_high_performance_paddr_base} {0} set_instance_parameter_value nios2 {data_master_high_performance_paddr_size} {0.0} add_instance opencores_i2c bladerf_oc_i2c_master 1.0 set_instance_parameter_value opencores_i2c {ARST_LVL} {1} add_instance peripheral_spi altera_avalon_spi set_instance_parameter_value peripheral_spi {clockPhase} {1} set_instance_parameter_value peripheral_spi {clockPolarity} {1} set_instance_parameter_value peripheral_spi {dataWidth} {8} set_instance_parameter_value peripheral_spi {disableAvalonFlowControl} {0} set_instance_parameter_value peripheral_spi {insertDelayBetweenSlaveSelectAndSClk} {0} set_instance_parameter_value peripheral_spi {insertSync} {0} set_instance_parameter_value peripheral_spi {lsbOrderedFirst} {0} set_instance_parameter_value peripheral_spi {masterSPI} {1} set_instance_parameter_value peripheral_spi {numberOfSlaves} {2} set_instance_parameter_value peripheral_spi {syncRegDepth} {2} set_instance_parameter_value peripheral_spi {targetClockRate} {9600000.0} set_instance_parameter_value peripheral_spi {targetSlaveSelectToSClkDelay} {0.0} add_instance ram altera_avalon_onchip_memory2 set_instance_parameter_value ram {allowInSystemMemoryContentEditor} {1} set_instance_parameter_value ram {blockType} {AUTO} set_instance_parameter_value ram {dataWidth} {32} set_instance_parameter_value ram {dataWidth2} {32} set_instance_parameter_value ram {dualPort} {0} set_instance_parameter_value ram {enableDiffWidth} {0} set_instance_parameter_value ram {initMemContent} {1} set_instance_parameter_value ram {initializationFileName} {onchip_memory2_0} set_instance_parameter_value ram {instanceID} {MED} set_instance_parameter_value ram {memorySize} ${ram_size} set_instance_parameter_value ram {readDuringWriteMode} {DONT_CARE} set_instance_parameter_value ram {simAllowMRAMContentsFile} {0} set_instance_parameter_value ram {simMemInitOnlyFilename} {0} set_instance_parameter_value ram {singleClockOperation} {0} set_instance_parameter_value ram {slave1Latency} {1} set_instance_parameter_value ram {slave2Latency} {1} set_instance_parameter_value ram {useNonDefaultInitFile} {0} set_instance_parameter_value ram {copyInitFile} {0} set_instance_parameter_value ram {useShallowMemBlocks} {0} set_instance_parameter_value ram {writable} {1} set_instance_parameter_value ram {ecc_enabled} {0} set_instance_parameter_value ram {resetrequest_enabled} {1} add_instance rffe_spi lms6_spi_controller 1.0 set_instance_parameter_value rffe_spi {CLOCK_DIV} {4} set_instance_parameter_value rffe_spi {ADDR_WIDTH} {8} set_instance_parameter_value rffe_spi {DATA_WIDTH} {8} add_instance rx_tamer time_tamer 1.0 add_instance rx_trigger_ctl altera_avalon_pio set_instance_parameter_value rx_trigger_ctl {bitClearingEdgeCapReg} {0} set_instance_parameter_value rx_trigger_ctl {bitModifyingOutReg} {1} set_instance_parameter_value rx_trigger_ctl {captureEdge} {0} set_instance_parameter_value rx_trigger_ctl {direction} {InOut} set_instance_parameter_value rx_trigger_ctl {edgeType} {RISING} set_instance_parameter_value rx_trigger_ctl {generateIRQ} {0} set_instance_parameter_value rx_trigger_ctl {irqType} {LEVEL} set_instance_parameter_value rx_trigger_ctl {resetValue} {0.0} set_instance_parameter_value rx_trigger_ctl {simDoTestBenchWiring} {0} set_instance_parameter_value rx_trigger_ctl {simDrivenValue} {0.0} set_instance_parameter_value rx_trigger_ctl {width} {8} add_instance system_clock clock_source set_instance_parameter_value system_clock {clockFrequency} {80000000.0} set_instance_parameter_value system_clock {clockFrequencyKnown} {1} set_instance_parameter_value system_clock {resetSynchronousEdges} {DEASSERT} add_instance tx_tamer time_tamer 1.0 add_instance tx_trigger_ctl altera_avalon_pio set_instance_parameter_value tx_trigger_ctl {bitClearingEdgeCapReg} {0} set_instance_parameter_value tx_trigger_ctl {bitModifyingOutReg} {1} set_instance_parameter_value tx_trigger_ctl {captureEdge} {0} set_instance_parameter_value tx_trigger_ctl {direction} {InOut} set_instance_parameter_value tx_trigger_ctl {edgeType} {RISING} set_instance_parameter_value tx_trigger_ctl {generateIRQ} {0} set_instance_parameter_value tx_trigger_ctl {irqType} {LEVEL} set_instance_parameter_value tx_trigger_ctl {resetValue} {0.0} set_instance_parameter_value tx_trigger_ctl {simDoTestBenchWiring} {0} set_instance_parameter_value tx_trigger_ctl {simDrivenValue} {0.0} set_instance_parameter_value tx_trigger_ctl {width} {8} add_instance vctcxo_tamer_0 vctcxo_tamer 1.0 add_instance xb_gpio altera_avalon_pio set_instance_parameter_value xb_gpio {bitClearingEdgeCapReg} {0} set_instance_parameter_value xb_gpio {bitModifyingOutReg} {0} set_instance_parameter_value xb_gpio {captureEdge} {0} set_instance_parameter_value xb_gpio {direction} {InOut} set_instance_parameter_value xb_gpio {edgeType} {RISING} set_instance_parameter_value xb_gpio {generateIRQ} {0} set_instance_parameter_value xb_gpio {irqType} {LEVEL} set_instance_parameter_value xb_gpio {resetValue} {0.0} set_instance_parameter_value xb_gpio {simDoTestBenchWiring} {0} set_instance_parameter_value xb_gpio {simDrivenValue} {0.0} set_instance_parameter_value xb_gpio {width} {32} add_instance xb_gpio_dir altera_avalon_pio set_instance_parameter_value xb_gpio_dir {bitClearingEdgeCapReg} {0} set_instance_parameter_value xb_gpio_dir {bitModifyingOutReg} {0} set_instance_parameter_value xb_gpio_dir {captureEdge} {0} set_instance_parameter_value xb_gpio_dir {direction} {Output} set_instance_parameter_value xb_gpio_dir {edgeType} {RISING} set_instance_parameter_value xb_gpio_dir {generateIRQ} {0} set_instance_parameter_value xb_gpio_dir {irqType} {LEVEL} set_instance_parameter_value xb_gpio_dir {resetValue} {0.0} set_instance_parameter_value xb_gpio_dir {simDoTestBenchWiring} {0} set_instance_parameter_value xb_gpio_dir {simDrivenValue} {0.0} set_instance_parameter_value xb_gpio_dir {width} {32} # exported interfaces add_interface agc_dc_i_max conduit end set_interface_property agc_dc_i_max EXPORT_OF agc_dc_i_max.external_connection add_interface agc_dc_i_mid conduit end set_interface_property agc_dc_i_mid EXPORT_OF agc_dc_i_mid.external_connection add_interface agc_dc_i_min conduit end set_interface_property agc_dc_i_min EXPORT_OF agc_dc_i_min.external_connection add_interface agc_dc_q_max conduit end set_interface_property agc_dc_q_max EXPORT_OF agc_dc_q_max.external_connection add_interface agc_dc_q_mid conduit end set_interface_property agc_dc_q_mid EXPORT_OF agc_dc_q_mid.external_connection add_interface agc_dc_q_min conduit end set_interface_property agc_dc_q_min EXPORT_OF agc_dc_q_min.external_connection add_interface arbiter conduit end set_interface_property arbiter EXPORT_OF arbiter_0.conduit_end add_interface clk clock sink set_interface_property clk EXPORT_OF system_clock.clk_in add_interface command conduit end set_interface_property command EXPORT_OF command_uart.rs232 add_interface correction_rx_phase_gain conduit end set_interface_property correction_rx_phase_gain EXPORT_OF iq_corr_rx_phase_gain.external_connection add_interface correction_tx_phase_gain conduit end set_interface_property correction_tx_phase_gain EXPORT_OF iq_corr_tx_phase_gain.external_connection add_interface dac conduit end set_interface_property dac EXPORT_OF peripheral_spi.external add_interface gpio conduit end set_interface_property gpio EXPORT_OF control.external_connection add_interface oc_i2c conduit end set_interface_property oc_i2c EXPORT_OF opencores_i2c.conduit_end add_interface reset reset sink set_interface_property reset EXPORT_OF system_clock.clk_in_reset add_interface rx_tamer conduit end set_interface_property rx_tamer EXPORT_OF rx_tamer.conduit_end add_interface rx_trigger_ctl conduit end set_interface_property rx_trigger_ctl EXPORT_OF rx_trigger_ctl.external_connection add_interface spi conduit end set_interface_property spi EXPORT_OF rffe_spi.conduit_end add_interface tx_tamer conduit end set_interface_property tx_tamer EXPORT_OF tx_tamer.conduit_end add_interface tx_trigger_ctl conduit end set_interface_property tx_trigger_ctl EXPORT_OF tx_trigger_ctl.external_connection add_interface vctcxo_tamer conduit end set_interface_property vctcxo_tamer EXPORT_OF vctcxo_tamer_0.conduit_end add_interface xb_gpio conduit end set_interface_property xb_gpio EXPORT_OF xb_gpio.external_connection add_interface xb_gpio_dir conduit end set_interface_property xb_gpio_dir EXPORT_OF xb_gpio_dir.external_connection # connections and connection parameters add_connection nios2.data_master agc_dc_i_max.s1 set_connection_parameter_value nios2.data_master/agc_dc_i_max.s1 arbitrationPriority {1} set_connection_parameter_value nios2.data_master/agc_dc_i_max.s1 baseAddress {0x00010300} set_connection_parameter_value nios2.data_master/agc_dc_i_max.s1 defaultConnection {0} add_connection nios2.data_master agc_dc_i_mid.s1 set_connection_parameter_value nios2.data_master/agc_dc_i_mid.s1 arbitrationPriority {1} set_connection_parameter_value nios2.data_master/agc_dc_i_mid.s1 baseAddress {0x00010320} set_connection_parameter_value nios2.data_master/agc_dc_i_mid.s1 defaultConnection {0} add_connection nios2.data_master agc_dc_i_min.s1 set_connection_parameter_value nios2.data_master/agc_dc_i_min.s1 arbitrationPriority {1} set_connection_parameter_value nios2.data_master/agc_dc_i_min.s1 baseAddress {0x00010340} set_connection_parameter_value nios2.data_master/agc_dc_i_min.s1 defaultConnection {0} add_connection nios2.data_master agc_dc_q_max.s1 set_connection_parameter_value nios2.data_master/agc_dc_q_max.s1 arbitrationPriority {1} set_connection_parameter_value nios2.data_master/agc_dc_q_max.s1 baseAddress {0x00010310} set_connection_parameter_value nios2.data_master/agc_dc_q_max.s1 defaultConnection {0} add_connection nios2.data_master agc_dc_q_mid.s1 set_connection_parameter_value nios2.data_master/agc_dc_q_mid.s1 arbitrationPriority {1} set_connection_parameter_value nios2.data_master/agc_dc_q_mid.s1 baseAddress {0x00010330} set_connection_parameter_value nios2.data_master/agc_dc_q_mid.s1 defaultConnection {0} add_connection nios2.data_master agc_dc_q_min.s1 set_connection_parameter_value nios2.data_master/agc_dc_q_min.s1 arbitrationPriority {1} set_connection_parameter_value nios2.data_master/agc_dc_q_min.s1 baseAddress {0x00010350} set_connection_parameter_value nios2.data_master/agc_dc_q_min.s1 defaultConnection {0} add_connection nios2.data_master arbiter_0.avalon_slave_0 set_connection_parameter_value nios2.data_master/arbiter_0.avalon_slave_0 arbitrationPriority {1} set_connection_parameter_value nios2.data_master/arbiter_0.avalon_slave_0 baseAddress {0x00010200} set_connection_parameter_value nios2.data_master/arbiter_0.avalon_slave_0 defaultConnection {0} add_connection nios2.data_master command_uart.avalon_slave set_connection_parameter_value nios2.data_master/command_uart.avalon_slave arbitrationPriority {1} set_connection_parameter_value nios2.data_master/command_uart.avalon_slave baseAddress {0x9120} set_connection_parameter_value nios2.data_master/command_uart.avalon_slave defaultConnection {0} add_connection nios2.data_master control.s1 set_connection_parameter_value nios2.data_master/control.s1 arbitrationPriority {1} set_connection_parameter_value nios2.data_master/control.s1 baseAddress {0x9040} set_connection_parameter_value nios2.data_master/control.s1 defaultConnection {0} add_connection nios2.data_master iq_corr_rx_phase_gain.s1 set_connection_parameter_value nios2.data_master/iq_corr_rx_phase_gain.s1 arbitrationPriority {1} set_connection_parameter_value nios2.data_master/iq_corr_rx_phase_gain.s1 baseAddress {0x9440} set_connection_parameter_value nios2.data_master/iq_corr_rx_phase_gain.s1 defaultConnection {0} add_connection nios2.data_master iq_corr_tx_phase_gain.s1 set_connection_parameter_value nios2.data_master/iq_corr_tx_phase_gain.s1 arbitrationPriority {1} set_connection_parameter_value nios2.data_master/iq_corr_tx_phase_gain.s1 baseAddress {0x9450} set_connection_parameter_value nios2.data_master/iq_corr_tx_phase_gain.s1 defaultConnection {0} add_connection nios2.data_master jtag_uart.avalon_jtag_slave set_connection_parameter_value nios2.data_master/jtag_uart.avalon_jtag_slave arbitrationPriority {1} set_connection_parameter_value nios2.data_master/jtag_uart.avalon_jtag_slave baseAddress {0x9100} set_connection_parameter_value nios2.data_master/jtag_uart.avalon_jtag_slave defaultConnection {0} add_connection nios2.data_master nios2.debug_mem_slave set_connection_parameter_value nios2.data_master/nios2.debug_mem_slave arbitrationPriority {1} set_connection_parameter_value nios2.data_master/nios2.debug_mem_slave baseAddress {0x8800} set_connection_parameter_value nios2.data_master/nios2.debug_mem_slave defaultConnection {0} add_connection nios2.data_master opencores_i2c.bladerf_oc_i2c_master set_connection_parameter_value nios2.data_master/opencores_i2c.bladerf_oc_i2c_master arbitrationPriority {1} set_connection_parameter_value nios2.data_master/opencores_i2c.bladerf_oc_i2c_master baseAddress {0x90f0} set_connection_parameter_value nios2.data_master/opencores_i2c.bladerf_oc_i2c_master defaultConnection {0} add_connection nios2.data_master peripheral_spi.spi_control_port set_connection_parameter_value nios2.data_master/peripheral_spi.spi_control_port arbitrationPriority {1} set_connection_parameter_value nios2.data_master/peripheral_spi.spi_control_port baseAddress {0x9060} set_connection_parameter_value nios2.data_master/peripheral_spi.spi_control_port defaultConnection {0} add_connection nios2.data_master ram.s1 set_connection_parameter_value nios2.data_master/ram.s1 arbitrationPriority {1} set_connection_parameter_value nios2.data_master/ram.s1 baseAddress {0x4000} set_connection_parameter_value nios2.data_master/ram.s1 defaultConnection {0} add_connection nios2.data_master rffe_spi.avalon_slave_0 set_connection_parameter_value nios2.data_master/rffe_spi.avalon_slave_0 arbitrationPriority {1} set_connection_parameter_value nios2.data_master/rffe_spi.avalon_slave_0 baseAddress {0x9200} set_connection_parameter_value nios2.data_master/rffe_spi.avalon_slave_0 defaultConnection {0} add_connection nios2.data_master rx_tamer.avalon_slave_0 set_connection_parameter_value nios2.data_master/rx_tamer.avalon_slave_0 arbitrationPriority {1} set_connection_parameter_value nios2.data_master/rx_tamer.avalon_slave_0 baseAddress {0x9160} set_connection_parameter_value nios2.data_master/rx_tamer.avalon_slave_0 defaultConnection {0} add_connection nios2.data_master rx_trigger_ctl.s1 set_connection_parameter_value nios2.data_master/rx_trigger_ctl.s1 arbitrationPriority {1} set_connection_parameter_value nios2.data_master/rx_trigger_ctl.s1 baseAddress {0x9400} set_connection_parameter_value nios2.data_master/rx_trigger_ctl.s1 defaultConnection {0} add_connection nios2.data_master tx_tamer.avalon_slave_0 set_connection_parameter_value nios2.data_master/tx_tamer.avalon_slave_0 arbitrationPriority {1} set_connection_parameter_value nios2.data_master/tx_tamer.avalon_slave_0 baseAddress {0x9140} set_connection_parameter_value nios2.data_master/tx_tamer.avalon_slave_0 defaultConnection {0} add_connection nios2.data_master tx_trigger_ctl.s1 set_connection_parameter_value nios2.data_master/tx_trigger_ctl.s1 arbitrationPriority {1} set_connection_parameter_value nios2.data_master/tx_trigger_ctl.s1 baseAddress {0x9420} set_connection_parameter_value nios2.data_master/tx_trigger_ctl.s1 defaultConnection {0} add_connection nios2.data_master vctcxo_tamer_0.avalon_slave_0 set_connection_parameter_value nios2.data_master/vctcxo_tamer_0.avalon_slave_0 arbitrationPriority {1} set_connection_parameter_value nios2.data_master/vctcxo_tamer_0.avalon_slave_0 baseAddress {0x9300} set_connection_parameter_value nios2.data_master/vctcxo_tamer_0.avalon_slave_0 defaultConnection {0} add_connection nios2.data_master xb_gpio.s1 set_connection_parameter_value nios2.data_master/xb_gpio.s1 arbitrationPriority {1} set_connection_parameter_value nios2.data_master/xb_gpio.s1 baseAddress {0x90b0} set_connection_parameter_value nios2.data_master/xb_gpio.s1 defaultConnection {0} add_connection nios2.data_master xb_gpio_dir.s1 set_connection_parameter_value nios2.data_master/xb_gpio_dir.s1 arbitrationPriority {1} set_connection_parameter_value nios2.data_master/xb_gpio_dir.s1 baseAddress {0x90a0} set_connection_parameter_value nios2.data_master/xb_gpio_dir.s1 defaultConnection {0} add_connection nios2.instruction_master nios2.debug_mem_slave set_connection_parameter_value nios2.instruction_master/nios2.debug_mem_slave arbitrationPriority {1} set_connection_parameter_value nios2.instruction_master/nios2.debug_mem_slave baseAddress {0x8800} set_connection_parameter_value nios2.instruction_master/nios2.debug_mem_slave defaultConnection {0} add_connection nios2.instruction_master ram.s1 set_connection_parameter_value nios2.instruction_master/ram.s1 arbitrationPriority {1} set_connection_parameter_value nios2.instruction_master/ram.s1 baseAddress {0x4000} set_connection_parameter_value nios2.instruction_master/ram.s1 defaultConnection {0} add_connection nios2.irq arbiter_0.interrupt_sender set_connection_parameter_value nios2.irq/arbiter_0.interrupt_sender irqNumber {6} add_connection nios2.irq command_uart.interrupt set_connection_parameter_value nios2.irq/command_uart.interrupt irqNumber {7} add_connection nios2.irq jtag_uart.irq set_connection_parameter_value nios2.irq/jtag_uart.irq irqNumber {1} add_connection nios2.irq opencores_i2c.interrupt_sender set_connection_parameter_value nios2.irq/opencores_i2c.interrupt_sender irqNumber {5} add_connection nios2.irq peripheral_spi.irq set_connection_parameter_value nios2.irq/peripheral_spi.irq irqNumber {4} add_connection nios2.irq rx_tamer.interrupt_sender set_connection_parameter_value nios2.irq/rx_tamer.interrupt_sender irqNumber {3} add_connection nios2.irq tx_tamer.interrupt_sender set_connection_parameter_value nios2.irq/tx_tamer.interrupt_sender irqNumber {2} add_connection nios2.irq vctcxo_tamer_0.interrupt_sender set_connection_parameter_value nios2.irq/vctcxo_tamer_0.interrupt_sender irqNumber {0} add_connection system_clock.clk agc_dc_i_max.clk add_connection system_clock.clk agc_dc_i_mid.clk add_connection system_clock.clk agc_dc_i_min.clk add_connection system_clock.clk agc_dc_q_max.clk add_connection system_clock.clk agc_dc_q_mid.clk add_connection system_clock.clk agc_dc_q_min.clk add_connection system_clock.clk arbiter_0.clock_sink add_connection system_clock.clk command_uart.clock add_connection system_clock.clk control.clk add_connection system_clock.clk iq_corr_rx_phase_gain.clk add_connection system_clock.clk iq_corr_tx_phase_gain.clk add_connection system_clock.clk jtag_uart.clk add_connection system_clock.clk nios2.clk add_connection system_clock.clk opencores_i2c.clock_sink add_connection system_clock.clk peripheral_spi.clk add_connection system_clock.clk ram.clk1 add_connection system_clock.clk rffe_spi.clock_sink add_connection system_clock.clk rx_tamer.clock_sink add_connection system_clock.clk rx_trigger_ctl.clk add_connection system_clock.clk tx_tamer.clock_sink add_connection system_clock.clk tx_trigger_ctl.clk add_connection system_clock.clk vctcxo_tamer_0.clock_sink add_connection system_clock.clk xb_gpio.clk add_connection system_clock.clk xb_gpio_dir.clk add_connection system_clock.clk_reset agc_dc_i_max.reset add_connection system_clock.clk_reset agc_dc_i_mid.reset add_connection system_clock.clk_reset agc_dc_i_min.reset add_connection system_clock.clk_reset agc_dc_q_max.reset add_connection system_clock.clk_reset agc_dc_q_mid.reset add_connection system_clock.clk_reset agc_dc_q_min.reset add_connection system_clock.clk_reset arbiter_0.reset add_connection system_clock.clk_reset command_uart.reset add_connection system_clock.clk_reset control.reset add_connection system_clock.clk_reset iq_corr_rx_phase_gain.reset add_connection system_clock.clk_reset iq_corr_tx_phase_gain.reset add_connection system_clock.clk_reset jtag_uart.reset add_connection system_clock.clk_reset nios2.reset add_connection system_clock.clk_reset opencores_i2c.reset_sink add_connection system_clock.clk_reset peripheral_spi.reset add_connection system_clock.clk_reset ram.reset1 add_connection system_clock.clk_reset rffe_spi.reset_sink add_connection system_clock.clk_reset rx_tamer.reset add_connection system_clock.clk_reset rx_trigger_ctl.reset add_connection system_clock.clk_reset tx_tamer.reset add_connection system_clock.clk_reset tx_trigger_ctl.reset add_connection system_clock.clk_reset vctcxo_tamer_0.reset_sink add_connection system_clock.clk_reset xb_gpio.reset add_connection system_clock.clk_reset xb_gpio_dir.reset # interconnect requirements set_interconnect_requirement {$system} {qsys_mm.clockCrossingAdapter} {HANDSHAKE} set_interconnect_requirement {$system} {qsys_mm.maxAdditionalLatency} {1} set_interconnect_requirement {$system} {qsys_mm.enableEccProtection} {FALSE} set_interconnect_requirement {$system} {qsys_mm.insertDefaultSlave} {FALSE} save_system {nios_system.qsys} bladeRF-2024.05/hdl/fpga/platforms/bladerf/build/platform.conf000066400000000000000000000020101457144405000240460ustar00rootroot00000000000000#!/usr/bin/env bash # Load some platform-specific options by setting bash variables. # This file will be sourced by the main build script. PROJECT_NAME="bladerf" # Board / product name BOARD_NAME="bladeRF" # Minimum Quartus version for this platform declare -A PLATFORM_QUARTUS_VER # associative array PLATFORM_QUARTUS_VER[major]=16 PLATFORM_QUARTUS_VER[minor]=0 # Project revisions available for this platform PLATFORM_REVISIONS=("hosted" "adsb" "atsc_tx" "fsk_bridge" "headless" "qpsk_tx") # Valid FPGA sizes for this platform PLATFORM_FPGA_SIZES=("40" "115") # Parameters: # $1 FPGA size # Prints string containing full device part number function get_device() { echo -n "EP4CE${1}F23C8" } # Parameters: # $1 FPGA size # Prints string containing the device family function get_device_family() { echo -n "Cyclone IV E" } # Parameters: # $1 FPGA size # Prints string containing the amount of RAM to allocate to the common_system # RAM during Qsys generation function get_qsys_ram() { echo -n "16384.0" } bladeRF-2024.05/hdl/fpga/platforms/bladerf/build/suppressed_messages.srf000066400000000000000000000041221457144405000261610ustar00rootroot00000000000000{ "" "" "" "VHDL Subtype or Type Declaration warning at fifo_writer.vhd(280): subtype or type has null range" { } { } 0 10445 "" 0 0 "Design Software" 0 -1 0 ""} { "" "" "" "Unrecognized synthesis attribute \"enum_state\" at ../../../fpga/ip/opencores/i2c/rtl/verilog/i2c_master_byte_ctrl.v(199)" { } { } 0 10335 "" 0 0 "Design Software" 0 -1 0 ""} { "" "" "" "Unrecognized synthesis attribute \"enum_state\" at ../../../fpga/ip/opencores/i2c/rtl/verilog/i2c_master_bit_ctrl.v(185)" { } { } 0 10335 "" 0 0 "Design Software" 0 -1 0 ""} { "" "" "" "VHDL Subtype or Type Declaration warning at fifo_reader.vhd(314): subtype or type has null range" { } { } 0 10445 "" 0 0 "Design Software" 0 -1 0 ""} { "" "" "" "Verilog HDL Synthesis Attribute warning at i2c_master_bit_ctrl.v(410): ignoring full_case attribute on case statement with explicit default case item" { } { } 0 10766 "" 0 0 "Design Software" 0 -1 0 ""} { "" "" "" "Verilog HDL Case Statement warning at i2c_master_bit_ctrl.v(406): honored full_case synthesis attribute - differences between design synthesis and simulation may occur" { } { } 0 10208 "" 0 0 "Design Software" 0 -1 0 ""} { "" "" "" "Verilog HDL or VHDL warning at altera_merlin_width_adapter.sv(283): object \"in_write\" assigned a value but never read" { } { } 0 10036 "" 0 0 "Design Software" 0 -1 0 ""} { "" "" "" "Verilog HDL or VHDL warning at altera_merlin_width_adapter.sv(742): object \"aligned_addr\" assigned a value but never read" { } { } 0 10036 "" 0 0 "Design Software" 0 -1 0 ""} { "" "" "" "Verilog HDL or VHDL warning at altera_merlin_width_adapter.sv(743): object \"aligned_byte_cnt\" assigned a value but never read" { } { } 0 10036 "" 0 0 "Design Software" 0 -1 0 ""} { "" "" "" "VHDL Subtype or Type Declaration warning at fifo_reader.vhd(316): subtype or type has null range" { } { } 0 10445 "" 0 0 "Design Software" 0 -1 0 ""} { "" "" "" "Verilog HDL or VHDL warning at atsc_tx.vhd(71): object \"tx_pilot\" assigned a value but never read" { } { } 0 10036 "" 0 0 "Design Software" 0 -1 0 ""} { "" "" "" "*" { } { } 0 10542 "" 0 0 "Design Software" 0 -1 0 ""} bladeRF-2024.05/hdl/fpga/platforms/bladerf/constraints/000077500000000000000000000000001457144405000226325ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/platforms/bladerf/constraints/bladerf.sdc000066400000000000000000000150161457144405000247270ustar00rootroot00000000000000# Clock inputs create_clock -period "100.0 MHz" -waveform {0.6 5.6} [get_ports fx3_pclk] create_clock -period "38.4 MHz" [get_ports c4_clock] create_clock -period "38.4 MHz" [get_ports lms_pll_out] create_clock -period "32.0 MHz" [get_ports lms_rx_clock_out] create_clock -period "80.0 MHz" -waveform {0.34 6.59} [get_ports c4_tx_clock] # Virtual clocks create_clock -period "100.0 MHz" -name fx3_virtual create_clock -period "80 MHz" -name c4_tx_virtual create_clock -period "32 MHz" -name lms_rx_virtual # Generate the appropriate PLL clocks derive_pll_clocks derive_clock_uncertainty # Create a clock for the VCTCXO Tuning Reference, which can be # either 10 MHz or 1PPS. Could use multifrequency analysis, # but shouldn't need to if the 1PPS pulse is active for >100ns. create_clock -period "10 MHz" [get_ports ref_vctcxo_tune] # First flop synchronizer false path set_false_path -from [get_registers {*source_holding[*]}] -to * ### Fast Interfaces ### # FX3 GPIF/CTL interface set_input_delay -clock [get_clocks fx3_virtual] -max 8.225 [get_ports {fx3_gpif* fx3_ctl*}] set_input_delay -clock [get_clocks fx3_virtual] -min 0.225 [get_ports {fx3_gpif* fx3_ctl*}] -add_delay set_output_delay -clock [get_clocks fx3_virtual] -max 2.5 [get_ports {fx3_gpif* fx3_ctl*}] set_output_delay -clock [get_clocks fx3_virtual] -min 0.75 [get_ports {fx3_gpif* fx3_ctl*}] -add_delay set_multicycle_path -from [get_clocks {fx3_virtual}] -to [get_clocks {U_fx3_pll|altpll_component|auto_generated|pll1|clk[0]}] -setup -start 2 set_multicycle_path -from [get_clocks {fx3_virtual}] -to [get_clocks {U_fx3_pll|altpll_component|auto_generated|pll1|clk[0]}] -hold -start 2 # LMS sample interface set_input_delay -clock [get_clocks lms_rx_virtual] -max 5.832 [get_ports {lms_rx_data* lms_rx_iq_select}] set_input_delay -clock [get_clocks lms_rx_virtual] -min -0.168 [get_ports {lms_rx_data* lms_rx_iq_select}] -add_delay set_output_delay -clock [get_clocks c4_tx_virtual] -min -0.014 [get_ports {lms_tx_data* lms_tx_iq_select}] set_output_delay -clock [get_clocks c4_tx_virtual] -max 1.185 [get_ports {lms_tx_data* lms_tx_iq_select}] -add_delay ### Slow Interfaces ### # FX3 UART interface #set_false_path -from * -to [get_ports fx3_uart_rxd] #set_false_path -from [get_ports fx3_uart_txd] -to * #set_false_path -from * -to [get_ports fx3_uart_cts] set_output_delay -clock [get_clocks {U_pll|altpll_component|auto_generated|pll1|clk[0]}] -max 1.0 [get_ports {fx3_uart_rxd}] set_output_delay -clock [get_clocks {U_pll|altpll_component|auto_generated|pll1|clk[0]}] -min 0.0 [get_ports {fx3_uart_rxd}] -add_delay set_output_delay -clock [get_clocks {U_fx3_pll|altpll_component|auto_generated|pll1|clk[0]}] -max 1.0 [get_ports {fx3_uart_cts}] set_output_delay -clock [get_clocks {U_fx3_pll|altpll_component|auto_generated|pll1|clk[0]}] -min 0.0 [get_ports {fx3_uart_cts}] -add_delay set_input_delay -clock [get_clocks {U_pll|altpll_component|auto_generated|pll1|clk[0]}] -max 1.0 [get_ports {fx3_uart_txd}] set_input_delay -clock [get_clocks {U_pll|altpll_component|auto_generated|pll1|clk[0]}] -min 0.0 [get_ports {fx3_uart_txd}] -add_delay # LMS SPI interface # Create SPI generated clock create_generated_clock -name lms_sclk_reg -source [get_pins {U_pll|altpll_component|auto_generated|pll1|clk[0]}] -divide_by 4 [get_registers {*rffe_spi*current.sclk}] create_generated_clock -name lms_sclk_pin -source [get_registers -no_duplicates {*rffe_spi*current.sclk}] [get_ports {lms_sclk}] set_input_delay -clock_fall -clock lms_sclk_pin -min 1.0 [get_ports {lms_sdo}] set_input_delay -clock_fall -clock lms_sclk_pin -max 9.0 [get_ports {lms_sdo}] -add_delay set_output_delay -clock lms_sclk_pin -min 1.0 [get_ports {lms_sen lms_sdio lms_sclk}] set_output_delay -clock lms_sclk_pin -max 2.0 [get_ports {lms_sen lms_sdio lms_sclk}] -add_delay set_multicycle_path -setup -start -from [get_clocks {U_pll*clk[0]}] -to [get_clocks lms_sclk_pin] 4 set_multicycle_path -hold -start -from [get_clocks {U_pll*clk[0]}] -to [get_clocks lms_sclk_pin] 4 set_multicycle_path -setup -end -from [get_clocks lms_sclk_pin] -to [get_clocks {U_pll*clk[0]}] 4 set_multicycle_path -hold -end -from [get_clocks lms_sclk_pin] -to [get_clocks {U_pll*clk[0]}] 4 # Si5338 interface set_input_delay -clock [get_clocks U_pll*0*] -min 1.0 [get_ports {si_scl si_sda}] set_input_delay -clock [get_clocks U_pll*0*] -max 1.0 [get_ports {si_scl si_sda}] -add_delay set_output_delay -clock [get_clocks U_pll*0*] -min 0.0 [get_ports {si_scl si_sda}] set_output_delay -clock [get_clocks U_pll*0*] -max 1.0 [get_ports {si_scl si_sda}] -add_delay # VCTCXO trimdac set_output_delay -clock [get_clocks U_pll*0*] -min 0.0 [get_ports {dac_csx dac_sclk dac_sdi}] set_output_delay -clock [get_clocks U_pll*0*] -max 0.2 [get_ports {dac_csx dac_sclk dac_sdi}] -add_delay set_input_delay -clock [get_clocks U_pll*0*] -min 1.0 [get_ports dac_sdo] set_input_delay -clock [get_clocks U_pll*0*] -max 1.0 [get_ports dac_sdo] -add_delay # LED's set_false_path -from * -to [get_ports led*] # LMS long lived GPIO and RF Switches set_false_path -from * -to [get_ports {lms_*x_v* lms_*x_enable lms_reset}] # Long lived correction parameters set_false_path -from * -to [get_keepers {iq_correction:*} ] # JTAG settings set_clock_groups -exclusive -group [get_clocks altera_reserved_tck] set_input_delay -clock [get_clocks altera_reserved_tck] 20 [get_ports altera_reserved_tdi] set_input_delay -clock [get_clocks altera_reserved_tck] 20 [get_ports altera_reserved_tms] set_output_delay -clock [get_clocks altera_reserved_tck] 20 [get_ports altera_reserved_tdo] # Exceptions # The dcfifo which goes from the C4 TX domain to the PCLK domain seems to have an issue with the clear signal. It isn't generally a issue so ignore it? set_false_path -from {reset_synchronizer:U_tx_reset|sync} -to {tx_*fifo:U_tx_*_fifo|common_dcfifo:U_common_dcfifo|dcfifo*:auto_generated|dffpipe_3dc:wraclr|dffe12a[0]} set_false_path -from {reset_synchronizer:U_tx_reset|sync} -to {tx_*fifo:U_tx_*_fifo|common_dcfifo:U_common_dcfifo|dcfifo*:auto_generated|dffpipe_3dc:wraclr|dffe13a[0]} # False path between hold_time and compare_time due to the way the FSM is setup set_false_path -from {*x_tamer|hold_time[*]} -to {*x_tamer|compare_time[*]} # Asynchronous clear on the RX FIFO when disabling RX set_false_path -from {fx3_gpif*rx_enable} -to {rx_meta_fifo*:wraclr|*} set_false_path -from {fx3_gpif*rx_enable} -to {rx_fifo*:wraclr|*} # Expansion ports set_false_path -from * -to [get_ports {exp_spi_clock exp_spi_mosi exp_gpio[*] mini_exp1 mini_exp2}] set_false_path -from [get_ports {exp_gpio[*] exp_clock_in mini_exp1 mini_exp2}] bladeRF-2024.05/hdl/fpga/platforms/bladerf/constraints/pins.tcl000066400000000000000000000434701457144405000243170ustar00rootroot00000000000000# Top level pins for bladeRF package require ::quartus::project # IO Standard set_instance_assignment -name IO_STANDARD "1.8 V" -to c4_clock set_instance_assignment -name IO_STANDARD "1.8 V" -to dac_csx set_instance_assignment -name IO_STANDARD "1.8 V" -to dac_sclk set_instance_assignment -name IO_STANDARD "1.8 V" -to dac_sdi set_instance_assignment -name IO_STANDARD "1.8 V" -to dac_sdo set_instance_assignment -name IO_STANDARD "1.8 V" -to exp_gpio[16] set_instance_assignment -name IO_STANDARD "1.8 V" -to exp_gpio[15] set_instance_assignment -name IO_STANDARD "1.8 V" -to exp_gpio[14] set_instance_assignment -name IO_STANDARD "1.8 V" -to exp_gpio[13] set_instance_assignment -name IO_STANDARD "1.8 V" -to exp_gpio[12] set_instance_assignment -name IO_STANDARD "1.8 V" -to exp_gpio[11] set_instance_assignment -name IO_STANDARD "1.8 V" -to exp_gpio[10] set_instance_assignment -name IO_STANDARD "1.8 V" -to exp_gpio[9] set_instance_assignment -name IO_STANDARD "1.8 V" -to exp_gpio[8] set_instance_assignment -name IO_STANDARD "1.8 V" -to exp_gpio[7] set_instance_assignment -name IO_STANDARD "1.8 V" -to exp_gpio[6] set_instance_assignment -name IO_STANDARD "1.8 V" -to exp_gpio[5] set_instance_assignment -name IO_STANDARD "1.8 V" -to exp_gpio[4] set_instance_assignment -name IO_STANDARD "1.8 V" -to exp_gpio[3] set_instance_assignment -name IO_STANDARD "1.8 V" -to exp_gpio[2] set_instance_assignment -name IO_STANDARD "1.8 V" -to exp_present set_instance_assignment -name IO_STANDARD "1.8 V" -to exp_spi_clock set_instance_assignment -name IO_STANDARD "1.8 V" -to exp_spi_miso set_instance_assignment -name IO_STANDARD "1.8 V" -to exp_spi_mosi set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_ctl[12] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_ctl[11] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_ctl[10] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_ctl[9] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_ctl[8] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_ctl[7] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_ctl[6] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_ctl[5] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_ctl[4] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_ctl[3] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_ctl[2] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_ctl[1] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_ctl[0] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_gpif[31] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_gpif[30] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_gpif[29] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_gpif[28] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_gpif[27] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_gpif[26] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_gpif[25] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_gpif[24] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_gpif[23] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_gpif[22] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_gpif[21] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_gpif[20] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_gpif[19] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_gpif[18] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_gpif[17] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_gpif[16] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_gpif[15] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_gpif[14] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_gpif[13] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_gpif[12] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_gpif[11] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_gpif[10] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_gpif[9] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_gpif[8] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_gpif[7] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_gpif[6] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_gpif[5] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_gpif[4] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_gpif[3] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_gpif[2] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_gpif[1] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_gpif[0] set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_uart_cts set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_uart_rxd set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_uart_txd set_instance_assignment -name IO_STANDARD "1.8 V" -to lms_pll_out set_instance_assignment -name IO_STANDARD "1.8 V" -to lms_reset set_instance_assignment -name IO_STANDARD "1.8 V" -to lms_rx_clock_out set_instance_assignment -name IO_STANDARD "1.8 V" -to lms_rx_data[11] set_instance_assignment -name IO_STANDARD "1.8 V" -to lms_rx_data[10] set_instance_assignment -name IO_STANDARD "1.8 V" -to lms_rx_data[9] set_instance_assignment -name IO_STANDARD "1.8 V" -to lms_rx_data[8] set_instance_assignment -name IO_STANDARD "1.8 V" -to lms_rx_data[7] set_instance_assignment -name IO_STANDARD "1.8 V" -to lms_rx_data[6] set_instance_assignment -name IO_STANDARD "1.8 V" -to lms_rx_data[5] set_instance_assignment -name IO_STANDARD "1.8 V" -to lms_rx_data[4] set_instance_assignment -name IO_STANDARD "1.8 V" -to lms_rx_data[3] set_instance_assignment -name IO_STANDARD "1.8 V" -to lms_rx_data[2] set_instance_assignment -name IO_STANDARD "1.8 V" -to lms_rx_data[1] set_instance_assignment -name IO_STANDARD "1.8 V" -to lms_rx_data[0] set_instance_assignment -name IO_STANDARD "1.8 V" -to lms_rx_enable set_instance_assignment -name IO_STANDARD "1.8 V" -to lms_rx_iq_select set_instance_assignment -name IO_STANDARD "1.8 V" -to lms_sclk set_instance_assignment -name IO_STANDARD "1.8 V" -to lms_sdio set_instance_assignment -name IO_STANDARD "1.8 V" -to lms_sdo set_instance_assignment -name IO_STANDARD "1.8 V" -to lms_sen set_instance_assignment -name IO_STANDARD "1.8 V" -to lms_tx_data[11] set_instance_assignment -name IO_STANDARD "1.8 V" -to lms_tx_data[10] set_instance_assignment -name IO_STANDARD "1.8 V" -to lms_tx_data[9] set_instance_assignment -name IO_STANDARD "1.8 V" -to lms_tx_data[8] set_instance_assignment -name IO_STANDARD "1.8 V" -to lms_tx_data[7] set_instance_assignment -name IO_STANDARD "1.8 V" -to lms_tx_data[6] set_instance_assignment -name IO_STANDARD "1.8 V" -to lms_tx_data[5] set_instance_assignment -name IO_STANDARD "1.8 V" -to lms_tx_data[4] set_instance_assignment -name IO_STANDARD "1.8 V" -to lms_tx_data[3] set_instance_assignment -name IO_STANDARD "1.8 V" -to lms_tx_data[2] set_instance_assignment -name IO_STANDARD "1.8 V" -to lms_tx_data[1] set_instance_assignment -name IO_STANDARD "1.8 V" -to lms_tx_data[0] set_instance_assignment -name IO_STANDARD "1.8 V" -to lms_tx_enable set_instance_assignment -name IO_STANDARD "1.8 V" -to lms_tx_iq_select set_instance_assignment -name IO_STANDARD "1.8 V" -to led[3] set_instance_assignment -name IO_STANDARD "1.8 V" -to altera_reserved_tdi set_instance_assignment -name IO_STANDARD "1.8 V" -to altera_reserved_tck set_instance_assignment -name IO_STANDARD "1.8 V" -to altera_reserved_tdo set_instance_assignment -name IO_STANDARD "1.8 V" -to altera_reserved_tms set_instance_assignment -name IO_STANDARD "1.8 V" -to c4_tx_clock set_instance_assignment -name IO_STANDARD "1.8 V" -to exp_clock_in set_instance_assignment -name IO_STANDARD "1.8 V" -to exp_gpio[31] set_instance_assignment -name IO_STANDARD "1.8 V" -to exp_gpio[32] set_instance_assignment -name IO_STANDARD "1.8 V" -to exp_gpio[28] set_instance_assignment -name IO_STANDARD "1.8 V" -to exp_gpio[27] set_instance_assignment -name IO_STANDARD "1.8 V" -to exp_gpio[26] set_instance_assignment -name IO_STANDARD "1.8 V" -to exp_gpio[25] set_instance_assignment -name IO_STANDARD "1.8 V" -to exp_gpio[24] set_instance_assignment -name IO_STANDARD "1.8 V" -to exp_gpio[30] set_instance_assignment -name IO_STANDARD "1.8 V" -to exp_gpio[29] set_instance_assignment -name IO_STANDARD "1.8 V" -to exp_gpio[23] set_instance_assignment -name IO_STANDARD "1.8 V" -to exp_gpio[22] set_instance_assignment -name IO_STANDARD "1.8 V" -to exp_gpio[21] set_instance_assignment -name IO_STANDARD "1.8 V" -to exp_gpio[20] set_instance_assignment -name IO_STANDARD "1.8 V" -to exp_gpio[19] set_instance_assignment -name IO_STANDARD "1.8 V" -to exp_gpio[18] set_instance_assignment -name IO_STANDARD "1.8 V" -to exp_gpio[17] set_instance_assignment -name IO_STANDARD "1.8 V" -to si_sda set_instance_assignment -name IO_STANDARD "1.8 V" -to mini_exp1 set_instance_assignment -name IO_STANDARD "1.8 V" -to mini_exp2 set_instance_assignment -name IO_STANDARD "1.8 V" -to ref_vctcxo_tune set_instance_assignment -name IO_STANDARD "1.8 V" -to ref_sma_clock set_instance_assignment -name IO_STANDARD "1.8 V" -to si_scl set_instance_assignment -name IO_STANDARD "1.8 V" -to fx3_pclk set_instance_assignment -name IO_STANDARD "1.8 V" -to led[1] set_instance_assignment -name IO_STANDARD "1.8 V" -to led[2] set_instance_assignment -name IO_STANDARD "1.8 V" -to lms_rx_v[2] set_instance_assignment -name IO_STANDARD "1.8 V" -to lms_rx_v[1] set_instance_assignment -name IO_STANDARD "1.8 V" -to lms_tx_v[2] set_instance_assignment -name IO_STANDARD "1.8 V" -to lms_tx_v[1] # Location Assignments set_location_assignment PIN_A11 -to c4_clock set_location_assignment PIN_B10 -to dac_csx set_location_assignment PIN_B9 -to dac_sclk set_location_assignment PIN_A10 -to dac_sdi set_location_assignment PIN_A9 -to dac_sdo set_location_assignment PIN_M1 -to fx3_ctl[12] set_location_assignment PIN_J4 -to fx3_ctl[11] set_location_assignment PIN_J6 -to fx3_ctl[10] set_location_assignment PIN_N1 -to fx3_ctl[8] set_location_assignment PIN_G3 -to fx3_ctl[7] set_location_assignment PIN_F7 -to fx3_ctl[6] set_location_assignment PIN_B1 -to fx3_ctl[5] set_location_assignment PIN_C1 -to fx3_ctl[4] set_location_assignment PIN_H1 -to fx3_ctl[3] set_location_assignment PIN_H6 -to fx3_ctl[2] set_location_assignment PIN_F2 -to fx3_ctl[1] set_location_assignment PIN_F1 -to fx3_ctl[0] set_location_assignment PIN_AA1 -to fx3_gpif[31] set_location_assignment PIN_Y1 -to fx3_gpif[30] set_location_assignment PIN_AB3 -to fx3_gpif[29] set_location_assignment PIN_P1 -to fx3_gpif[28] set_location_assignment PIN_W7 -to fx3_gpif[27] set_location_assignment PIN_R2 -to fx3_gpif[26] set_location_assignment PIN_W6 -to fx3_gpif[25] set_location_assignment PIN_W1 -to fx3_gpif[24] set_location_assignment PIN_R1 -to fx3_gpif[23] set_location_assignment PIN_V5 -to fx3_gpif[22] set_location_assignment PIN_T4 -to fx3_gpif[21] set_location_assignment PIN_M4 -to fx3_gpif[20] set_location_assignment PIN_T5 -to fx3_gpif[19] set_location_assignment PIN_P4 -to fx3_gpif[18] set_location_assignment PIN_M6 -to fx3_gpif[17] set_location_assignment PIN_N6 -to fx3_gpif[16] set_location_assignment PIN_D1 -to fx3_gpif[15] set_location_assignment PIN_C8 -to fx3_gpif[14] set_location_assignment PIN_C7 -to fx3_gpif[13] set_location_assignment PIN_C4 -to fx3_gpif[12] set_location_assignment PIN_C6 -to fx3_gpif[11] set_location_assignment PIN_B3 -to fx3_gpif[10] set_location_assignment PIN_F10 -to fx3_gpif[9] set_location_assignment PIN_B4 -to fx3_gpif[8] set_location_assignment PIN_K1 -to fx3_gpif[7] set_location_assignment PIN_A8 -to fx3_gpif[6] set_location_assignment PIN_A3 -to fx3_gpif[5] set_location_assignment PIN_F8 -to fx3_gpif[4] set_location_assignment PIN_A5 -to fx3_gpif[3] set_location_assignment PIN_B8 -to fx3_gpif[2] set_location_assignment PIN_B7 -to fx3_gpif[1] set_location_assignment PIN_B6 -to fx3_gpif[0] set_location_assignment PIN_AA4 -to fx3_uart_cts set_location_assignment PIN_AA5 -to fx3_uart_rxd set_location_assignment PIN_AA3 -to fx3_uart_txd set_location_assignment PIN_T21 -to lms_pll_out set_location_assignment PIN_T22 -to lms_rx_clock_out set_location_assignment PIN_B22 -to lms_rx_data[11] set_location_assignment PIN_B21 -to lms_rx_data[10] set_location_assignment PIN_C22 -to lms_rx_data[9] set_location_assignment PIN_C21 -to lms_rx_data[8] set_location_assignment PIN_D22 -to lms_rx_data[7] set_location_assignment PIN_E21 -to lms_rx_data[6] set_location_assignment PIN_D21 -to lms_rx_data[5] set_location_assignment PIN_F21 -to lms_rx_data[4] set_location_assignment PIN_E22 -to lms_rx_data[3] set_location_assignment PIN_H21 -to lms_rx_data[2] set_location_assignment PIN_F22 -to lms_rx_data[1] set_location_assignment PIN_J21 -to lms_rx_data[0] set_location_assignment PIN_H22 -to lms_rx_iq_select set_location_assignment PIN_U21 -to lms_tx_data[11] set_location_assignment PIN_P22 -to lms_tx_data[10] set_location_assignment PIN_U22 -to lms_tx_data[9] set_location_assignment PIN_R21 -to lms_tx_data[8] set_location_assignment PIN_N22 -to lms_tx_data[7] set_location_assignment PIN_R22 -to lms_tx_data[6] set_location_assignment PIN_M22 -to lms_tx_data[5] set_location_assignment PIN_P21 -to lms_tx_data[4] set_location_assignment PIN_L22 -to lms_tx_data[3] set_location_assignment PIN_N21 -to lms_tx_data[2] set_location_assignment PIN_K22 -to lms_tx_data[1] set_location_assignment PIN_M21 -to lms_tx_data[0] set_location_assignment PIN_AA13 -to lms_reset set_location_assignment PIN_AA14 -to lms_rx_enable set_location_assignment PIN_AA20 -to lms_tx_v[2] set_location_assignment PIN_AB13 -to lms_sdio set_location_assignment PIN_AB14 -to lms_sdo set_location_assignment PIN_AB15 -to lms_tx_enable set_location_assignment PIN_AB16 -to lms_sen set_location_assignment PIN_AB19 -to lms_rx_v[2] set_location_assignment PIN_AB20 -to lms_rx_v[1] set_location_assignment PIN_J22 -to lms_tx_iq_select set_location_assignment PIN_F11 -to exp_spi_mosi set_location_assignment PIN_D13 -to exp_gpio[2] set_location_assignment PIN_E13 -to exp_gpio[3] set_location_assignment PIN_E14 -to exp_gpio[4] set_location_assignment PIN_E15 -to exp_gpio[5] set_location_assignment PIN_E16 -to exp_gpio[6] set_location_assignment PIN_D17 -to exp_gpio[7] set_location_assignment PIN_D19 -to exp_gpio[8] set_location_assignment PIN_C19 -to exp_gpio[9] set_location_assignment PIN_D20 -to exp_gpio[10] set_location_assignment PIN_C20 -to exp_gpio[11] set_location_assignment PIN_F13 -to exp_gpio[12] set_location_assignment PIN_F14 -to exp_gpio[13] set_location_assignment PIN_F15 -to exp_gpio[14] set_location_assignment PIN_D15 -to exp_gpio[15] set_location_assignment PIN_A13 -to exp_gpio[16] set_location_assignment PIN_C13 -to exp_present set_location_assignment PIN_G1 -to fx3_pclk set_location_assignment PIN_AA15 -to lms_sclk set_location_assignment PIN_B13 -to exp_spi_miso set_location_assignment PIN_E11 -to exp_spi_clock set_location_assignment PIN_AA7 -to led[1] set_location_assignment PIN_AB7 -to led[2] set_location_assignment PIN_AA21 -to lms_tx_v[1] set_location_assignment PIN_J3 -to fx3_ctl[9] set_location_assignment PIN_G22 -to c4_tx_clock set_location_assignment PIN_A12 -to exp_clock_in set_location_assignment PIN_A14 -to exp_gpio[25] set_location_assignment PIN_A15 -to exp_gpio[26] set_location_assignment PIN_A16 -to exp_gpio[27] set_location_assignment PIN_A17 -to exp_gpio[28] set_location_assignment PIN_A18 -to exp_gpio[32] set_location_assignment PIN_A19 -to exp_gpio[31] set_location_assignment PIN_A20 -to exp_gpio[30] set_location_assignment PIN_B20 -to exp_gpio[29] set_location_assignment PIN_B14 -to exp_gpio[17] set_location_assignment PIN_B15 -to exp_gpio[18] set_location_assignment PIN_B16 -to exp_gpio[20] set_location_assignment PIN_B17 -to exp_gpio[21] set_location_assignment PIN_B18 -to exp_gpio[23] set_location_assignment PIN_B19 -to exp_gpio[24] set_location_assignment PIN_C15 -to exp_gpio[19] set_location_assignment PIN_C17 -to exp_gpio[22] set_location_assignment PIN_AB10 -to led[3] set_location_assignment PIN_AB8 -to mini_exp1 set_location_assignment PIN_AB9 -to mini_exp2 set_location_assignment PIN_AB11 -to ref_vctcxo_tune set_location_assignment PIN_AB12 -to ref_sma_clock set_location_assignment PIN_A6 -to si_scl set_location_assignment PIN_A7 -to si_sda # Configuration information set_global_assignment -name CYCLONEIII_CONFIGURATION_SCHEME "FAST PASSIVE PARALLEL" set_global_assignment -name USE_CONFIGURATION_DEVICE OFF set_global_assignment -name GENERATE_TTF_FILE ON set_global_assignment -name GENERATE_RBF_FILE ON set_global_assignment -name CRC_ERROR_OPEN_DRAIN OFF set_global_assignment -name ON_CHIP_BITSTREAM_DECOMPRESSION OFF set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -rise set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -fall set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -rise set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -fall set_global_assignment -name RESERVE_DATA0_AFTER_CONFIGURATION "USE AS REGULAR IO" set_global_assignment -name RESERVE_DATA1_AFTER_CONFIGURATION "USE AS REGULAR IO" set_global_assignment -name RESERVE_DATA7_THROUGH_DATA2_AFTER_CONFIGURATION "USE AS REGULAR IO" set_global_assignment -name RESERVE_FLASH_NCE_AFTER_CONFIGURATION "USE AS REGULAR IO" set_global_assignment -name RESERVE_OTHER_AP_PINS_AFTER_CONFIGURATION "USE AS REGULAR IO" set_global_assignment -name CYCLONEII_RESERVE_NCEO_AFTER_CONFIGURATION "USE AS REGULAR IO" set_global_assignment -name RESERVE_DCLK_AFTER_CONFIGURATION "USE AS REGULAR IO" # Drive Strength and Slew Rate set_instance_assignment -name SLEW_RATE 0 -to fx3_gpif[*] #set_instance_assignment -name CURRENT_STRENGTH_NEW 16MA -to fx3_gpif[*] set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to fx3_uart_rxd bladeRF-2024.05/hdl/fpga/platforms/bladerf/modelsim/000077500000000000000000000000001457144405000220745ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/platforms/bladerf/modelsim/compile.do000066400000000000000000000013771457144405000240600ustar00rootroot00000000000000source ../../../ip/nuand/nuand.do compile_nuand ../../../ip/nuand vcom -work nuand -2008 ../../../ip/altera/pll/pll.vhd vcom -work nuand -2008 ../../../ip/altera/fx3_pll/fx3_pll.vhd vcom -work nuand -2008 ../../../ip/altera/rx_fifo/rx_fifo.vhd vcom -work nuand -2008 ../../../ip/altera/tx_fifo/tx_fifo.vhd vcom -work nuand -2008 ../../../ip/altera/tx_meta_fifo/tx_meta_fifo.vhd vcom -work nuand -2008 ../../../ip/altera/rx_meta_fifo/rx_meta_fifo.vhd vcom -work nuand -2008 ../vhdl/tb/nios_system.vhd vcom -work nuand -2008 ../vhdl/fx3_gpif.vhd vcom -work nuand -2008 ../vhdl/bladerf.vhd vcom -work nuand -2008 ../vhdl/bladerf_p.vhd vcom -work nuand -2008 ../vhdl/bladerf-hosted.vhd vcom -work nuand -2008 ../vhdl/tb/bladerf_tb.vhd vsim -t 1ps nuand.bladerf_tb bladeRF-2024.05/hdl/fpga/platforms/bladerf/signaltap/000077500000000000000000000000001457144405000222455ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/platforms/bladerf/signaltap/rx_signals.stp000066400000000000000000000405651457144405000251600ustar00rootroot00000000000000 0000000000000000000000000000000000 0000000000000000000000000000000000 bladeRF-2024.05/hdl/fpga/platforms/bladerf/signaltap/spi_debugging.stp000066400000000000000000003530131457144405000256100ustar00rootroot00000000000000 'dac_csx' == low && 'fsk_demodulator:U_fsk_demodulator|unwrapped_z[10]' == low 0000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000 11110000000100101000111001111000001001001000001111000000010010100011100111100000100100100000111100000000000000001100000001000010010010000011110000000000000000110000000100001000001000001111011111111101011111100111100000100000100000111101111111110101111110011110000010011010000011110000000000000000110000111000001001101000001111000000000000000011000011100000100000100000111100000001001010001100000001000010000010000011110000000100101000110000000100001001001000001111000000010001010011100111100000100100100000111100000001000101001110011110000010010010000011110111111011110101111000111000001001001000001111011111101111010111100011100000100111000000111100000001000101001100010001000010011100000011110000000100010100110001000100000000101000001111000000000000000011000111100000000010100000111100000000000000001100011110000010000010000011110111111111010111110000000100001000001000001111011111111101011111000000010000000010100000111100000000101111001100010001000000001010000011110000000010111100110001000100000001001000001111011111111110101111000011100000000100100000111101111111111010111100001110000010010010000011110000000000000000111001111000001001001000001111000000000000000011100111100000000010100000111100000000000000001100000001000000001010000011110000000000000000110000000100001000001000001111011111111101011111000100010000100000100000111101111111110101111100010001000010000010000011110000000011010000111001111000001000001000001111000000001101000011100111100000100001100000111100000001100100001100000001000010000110000011110000000110010000110000000100001001110000001111000000010000000011000100010000100111000000111100000001000000001100010001000000001010000011110111111110000111110000000100000000101000001111011111111000011111000000010000100100100000111100000001011110001100000001000010010010000011110000000101111000110000000100001000001000001111000000000000000011100111100000100000100000111100000000000000001110011110000000001010000011110111111011010111110001000100000000101000001111011111101101011111000100010000100000100000111101111111001101111100000001000010000010000011110111111100110111110000000100001000001000001111000000001000101010000000010000100000100000111100000000100010101000000001000010000010000011110111111101110101100001000100001000001000001111011111110111010110000100010000100100100000111100000000111110001010001110000010010010000011110000000011111000101000111000001001001000001111000000011001000010000000010000100100100000111100000001100100001000000001000010011100000011110111111111010111100001000100001001110000001111011111111101011110000100010000100000100000111100000000101010001010011110000010000010000011110000000010101000101001111000001001001000001111011111111110101110000100010000100100100000111101111111111010111000010001000010011100000011110000000111001000101001111000001001110000001111000000011100100010100111100000100111000000111100000000000000001010011110000010011100000011110000000000000000101001111000000000101000001111000000000000000010100100010000000010100000111100000000000000001010010001000010010010000011110000000010101000101000111000001001001000001111000000001010100010100011100000100100100000111101111110111010111000000001000010010010000011110111111011101011100000000100001001001000001111000000010000000010100011100000100100100000111100000001000000001010001110000010010010000011110000000000010100100001000100001001001000001111000000000001010010000100010000100100100000111101111111111010111000000001000010010010000011110111111111101011100000000100001000001000001111000000010000000010000000010000100000100000111100000001000000001000000001000000001010000011110000000100010100100001000100000000101000001111000000010001010010000100010000100000100000111101111110001101111000010001000010000010000011110111111000110111100001000100001001110000001111000000000010100010000100010000100111000000111100000000001010001000010001000000001010000011110111111111111111101001111000000000101000001111011111111111111110100111100000100100100000111100000001000000001000000001000010010010000011110000000100000000100000000100000001001000001111011111101101011110100111100000000100100000111101111110110101111010011110000000001010000011110000000000000000100000000100000000101000001111000000000000000010000000010000100111000000111100000000101010001000000001000010011100000011110000000010101000100000000100001001001000001111011111111110101110000000010000100100100000111101111111111010111000000001000010011100000011110111111111111111101001111000001001110000001111011111111111111110100111100000000010100000111100000000111110001000000001000000001010000011110000000011111000100000000100001001001000001111000000011001000010000000010000100100100000111100000001100100001000000001000010000010000011110000000000000000101000111000001000001000001111000000000000000010100011100000100100100000111100000001000000001000010001000010010010000011110000000100000000100001000100001000001000001111011111101110101110100011100000100000100000111101111110111010111010001110000010011010000011110000000100010100100001000100001001101000001111000000010001010010000100010000100111000000111101111111111010111110011110000010011100000011110111111111101011111001111000001001110000001111000000001001010011100111100000100111000000111100000000100101001110011110000000001010000011110111111111111111110001000100000000101000001111011111111111111111000100010000100111000000111101111111110101111110001110000010011100000011110111111111010111111000111000000000101000001111000000001010100011100011100000000010100000111100000000101010001110001110000010010010000011110111111111101011110000000100001001001000001111011111111110101111000000010000100000100000111100000000100010101100010001000010000010000011110000000010001010110001000100000000101000001111011111110111010111100111100000000010100000111101111111011101011110011110000010000010000011110000000100000000111001111000001000001000001111000000010000000011100111100000100000100000111100000001000101001110011110000010000010000011110000000100010100111001111000000000101000001111011111101110101111000100010000000010100000111101111110111010111100010001000010000010000011110000000010010100110001000100001000001000001111000000001001010011000100010000000100100000111100000000000000001110011110000000010010000011110000000000000000111001111000001000001000001111011111101101011111000100010000100000100000111101111110110101111100010001000010010010000011110000000011010000110000111000001001001000001111000000001101000011000011100000100111000000111100000001100100001100000001000010011100000011110000000110010000110000000100000000101000001111000000000000000011000100010000000010100000111100000000000000001100010001000000001100000011110000000100000000111001111000000000110000001111000000010000000011100111100000000010100000111101111111111010111110011110000000001010000011110111111111101011111001111000001001001000001111000000000101000011000000010000100100100000111100000000010100001100000001000000001010000011110000000001111000111001111000000000101000001111000000000111100011100111100000100100100000111101111111110101111100000001000010010010000011110111111111010111110000000100001000001000001111000000000000000011100111100000100000100000111100000000000000001110011110000000001010000011110000000010101000111001111000000000101000001111000000001010100011100111100000100000100000111101111110111101011100010001000010000010000011110111111011110101110001000100001001110000001111000000001000101011000101100000100111000000111100000000100010101100010110000010000010000011110111111111111111110001000100001000001000001111011111111111111111000100010000100000100000111100000001000000001110001110000010000010000011110000000100000000111000111000001000001000001111011111111111111111000100010000100000100000111101111111111111111100010001000010010010000011110111111111010111110001000100001001001000001111011111111101011111000100010000100000100000111100000000101010001110011110000010000010000011110000000010101000111001111000000000101000001111011111111111111111000000010000000010100000111101111111111111111100000001000010011100000011110111111111101011101000111000001001110000001111011111111110101110100011100000000010100000111100000000100101001010010001000000001010000011110000000010010100101001000100001000001000001111011111111110101110000000010000100000100000111101111111111010111000000001000010000010000011110000000000010100100001111000001000001000001111000000000001010010000111100000100000100000111101111111110101111000010001000010000010000011110111111111010111100001000100001000001000001111011111110011011110100111100000100000100000111101111111001101111010011110000010000010000011110000000100010100101001111000001000001000001111000000010001010010100111100000100100100000111101111110111010111000010001000010010010000011110111111011101011100001000100001000001000001111000000001001010010000000010000100000100000111100000000100101001000000001000010011100000011110111111111101011100000000100001001110000001111011111111110101110000000010000000100100000111100000001110010001000010001000000010010000011110000000111001000100001000100001001001000001111000000010010100010000000010000100100100000111100000001001010001000000001000010000010000011110111111000011011100000000100001000001000001111011111100001101110000000010000000010100000111100000000000101001000000001000000001010000011110000000000010100100000000100001000001000001111000000000000000010000000010000100000100000111100000000000000001000000001000000001010000011110111111000011011100000000100000000101000001111011111100001101110000000010000100000100000111101111111111111111000000001000010000010000011110111111111111111100000000100001000001000001111000000010001010010000100010000100000100000111100000001000101001000010001000000001010000011110111111111010111101001111000000000101000001111011111111101011110100111100000100111000000111100000000000000001000010001000010011100000011110000000000000000100001000100000000101000001111000000001010100010100111100000000010100000111100000000101010001010011110000010000010000011110111111011010111100000000100001000001000001111011111101101011110000000010000100000100000111100000000101010001010011110000010000010000011110000000010101000101001111000001001001000001111011111101101011110000000010000100100100000111101111110110101111000000001000010011100000011110000000000000000100000000100001001110000001111000000000000000010000000010000100000100000111100000000110100001000000001000010000010000011110000000011010000100000000100001001001000001111011111111000011110100011100000100100100000111101111111100001111010001110000010011100000011110000000101111000101001000100001001110000001111000000010111100010100100010000000010100000111100000001100100001000001110000000001010000011110000000110010000100000111000000000101000001111011111111101011110100100010000000010100000111101111111110101111010010001000010011100000011110000000100101000100000111000001001110000001111000000010010100010000011100000100000100000111101111111111010111000000001000010000010000011110111111111101011100000000100001001001000001111000000000010100011100100010000100100100000111100000000001010001110010001000010000010000011110000000100101000110001111000001000001000001111000000010010100011000111100000000010100000111101111111110101111100000001000000001010000011110111111111010111110000000100001000001000001111000000010101000011100111100000100000100000111100000001010100001110011110000010011100000011110000000001111000111001111000001001110000001111000000000111100011100111100000000010100000111101111110000011011100010001000000001010000011110111111000001101110001000100000001101000001111000000000011110011000000010000000110100000111100000000001111001100000001000010000010000011110000000000000000111001111000001000001000001111000000000000000011100111100000100000100000011101111110000110111110011110000010000010000001110111111000011011111001111000001000001000000111000000010001010011000000010000100000100000011100000001000101001100000001000010000010000001110111111011010111110001000100001000001000000111011111101101011111000100010000000010100000011101111111001101111110001110000000001010000001110111111100110111111000111000001001001000000111000000010001010011000100010000100100100000011100000001000101001100010001000010010010000001110000000110010000111001000100001001001000000111000000011001000011100100010000100100100000011101111111100001111100011110000010010010000001110111111110000111110001111000001001001000000111000000010010100011000000010000100100100000011100000001001010001100000001000010000010000001110000000000000000110000000100001000001000000111000000000000000011000000010000000100100000011101111111110101111110011110000000010010000001110111111111010111111001111000001001110000000111000000001101000011000100010000100111000000011100000000110100001100010001000010000010000001110000000001010000111001111000001000001000000111000000000101000011100111100000100100100000011101111110110101111100000001000010010010000001110111111011010111110000000100001000001000000111000000001000000011000000010000100000100000011100000000100000001100000001000010011100000001110000000000101000110000000100001001110000000111000000000010100011000000010000100100100000011101111110110101111100000001000010010010000001110111111011010111110000000100001000001000000111000000010010100011000000010000100000100000011100000001001010001100000001000010000010000001110111111000011011110001111000001000001000000111011111100001101111000111100000000010100000011100000000000000001100011110000000001010000001110000000000000000110001111000000000101000000111000000000001010011000000010000000010100000011100000000000101001100000001000010000010000001110111111111010111111001111000001000001000000111011111111101011111100111100000000100100000011101111110001101111100011110000000010010000001110111111000110111110001111000000000101000000111000000010001010011000000010000000010100000011100000001000101001100000001000010010010000001110111111111010111110001000100001001001000000111011111111101011111000100010000100100100000011100000000000000001000000001000010010010000001110000000000000000100000000100000000101000000111000000001010100010000000010000000010100000011100000000101010001000000001000010000010000001110000000000000000100000000100001000001000000111000000000000000010000000010000100100100000011101111110110101111000001110000010010010000001110111111011010111100000111000001000001000000111000000010010100010000100010000100000100000011100000001001010001000010001000010000010000001110000000100000000100001000100001000001000000111000000010000000010000100010000000100100000011101111111111111111010001110000000010010000001110111111111111111101000111000001000001000000111011111111101011110000100010000100000100000011101111111110101111000010001000000001010000001110000000010101000100000000100000000101000000111000000001010100010000000010000100000100000011101111110110101111000000001000010000010000001110111111011010111100000000100001000001000000111000000010010100010100111100000100000100000011100000001001010001010011110000000010010000001110000000000000000101001111000000001001000000111000000000000000010100111100000100000100000011101111110000110111000010001000010000010000001110111111000011011100001000100001001001000000111000000000101000010000101100000100100100000011100000000010100001000010110000010000010000001110000000001111000101001111000001000001000000111000000000111100010100111100000100100100000011101111111011011111000011110000010010010000001110111111101101111100001111000001001001000000111011111101010111110100111100000100100100000011101111110101011111010011110000010000010000001110000000000000000101001000100001000001000000111000000000000000010100100010000000010100000011100000001001010001010011110000000001010000001110000000100101000101001111000001000001000000111000000000000000010100111100000100000100000011100000000000000001010011110000010000010000001110111111111010111100001000100001000001000000111011111111101011110000100010000000010100000011100000000101010001000010001000000001010000001110000000010101000100001000100001001001000000111011111111111111110000100010000100100100000011101111111111111111000010001000000001010000001110000000100000000101001111000000000101000000111000000010000000010100111100000000010100000011101111111111111111000010001000000001010000001110111111111111111100001000100001001110000000111011111100110111110100111100000100111000000011101111110011011111010011110000010000010000001110000000001010000100000000100001000001000000111000000000101000010000000010000100000100000011100000000000000001000000001000010000010000001110000000000000000100000000100000000101000000111011111110110111110000000010000000010100000011101111111011011111000000001000010011100000001110111111010101111100000000100001001110000000111011111101010111110000000010000100000100000011100000000110100001000000001000010000010000001110000000011010000100000000100001000001000000111000000000101000010100111100000100000100000011100000000010100001010011110000000001010000001110111111011101011110000100100000000101000000111011111101110101111000010010000100100100000011100000001000101001110001110000010010010000001110000000100010100111000111000001000001000000111011111111101011111000100010000100000100000011101111111110101111100010001000010010010000001110000000010101000110001000100001001001000000111000000001010100011000100010000100110100000011101111110111010111100000001000010011010000001110111111011101011110000000100001001110000000111000000000010100011000011100000100111000000011100000000001010001100001110000010010010000001110000000000000000110001111000001001001000000111000000000000000011000111100000100100100000011100000000101010001100000001000010010010000001110000000010101000110000000100001001001000000111011111111000011111000100010000100100100000011101111111100001111100010001000000001010000001110000000001111000111001111000000000101000000111000000000111100011100111100000100000100000011101111111110101111100010001000010000010000001110111111111010111110001000100001000001000000111000000001111100011000000010000100000100000011100000000111110001100000001000000011010000001110111111010110011110000000100000001101000000111011111101011001111000000010000100100100000011100000000100101001100000001000010010010000001110000000010010100110000000100001001001000000111000000000000000011000111100000100100100000011100000000000000001100011110000000001010000001110111111111111111110000000100000000101000000111011111111111111111000000010000000010100000011101111111011011111100010001000000001010000001110111111101101111110001000100000000101000000111000000011001000011100100010000000010100000011100000001100100001110010001000010011100000001110111111000011011110001011000001001110000000111011111100001101111000101100000000010100000011100000000001111001100010001000000001010000001110000000000111100110001000100000000101000000111011111100011011111000000010000000010100000011101111110001101111100000001000010000010000001110000000000000000110000000100001000001000000111000000000000000011000000010000000010100000011100000001000000001100010001000000001010000001110000000100000000110001000100001000001000000111000000000000000011100011100000100000100000011100000000000000001110001110000010000010000001110111111001101111110001000100001000001000000111011111100110111111000100010000000110100000011101111111101100111100000001000000011010000001110111111110110011110000000100001001110000000111000000010010011011100111100000100111000000011100000001001001101110011110000000001010000001110111111001110011110000000100000000101000000111011111100111001111000000010000000111000000011101111110101011111110011110000000011100000001110111111010101111111001111000000000101000000111000000001010100011000000010000000010100000011100000000101010001100000001000010011100000001110111111111101011111001111000001001110000000111011111111110101111100111100000100000100000011100000000000101001100010001000010000010000001110000000000010100110001000100000000101000000111000000000101000010100011100000000010100000011100000000010100001010001110000000001100000001110111111110110011100001000100000000110000000111011111111011001110000100010000100100100000011100000000100101001000000001000010010010000001110000000010010100100000000100001001001000000111011111101110101110000000010000100100100000011101111110111010111000000001000010000010000001110000000010010100101001111000001000001000000111000000001001010010100111100000000100100000011101111110111010111010011110000000010010000001110111111011101011101001111000001001001000000111000000010001010010100011100000100100100000011100000001000101001010001110000010000010000001110111111101101111101001111000001000001000000111011111110110111110100111100000100000100000011101111111101100111010010001000010000010000001110111111110110011101001000100000000101000000111000000011110010010000011100000000010100000011100000001111001001000001110000010000010000001110000000100101000100000000100001000001000000111000000010010100010000000010000100100100000011101111111110101111000000001000010010010000001110111111111010111100000000100001000001000000111000000010010100010100111100000100000100000011100000001001010001010011110000000001010000001110000000000000000101001000100000000101000000111000000000000000010100100010000000111000000011100000000000000001000000001000000011100000001110000000000000000100000000100001001001000000111000000000000000010100111100000100100100000011100000000000000001010011110000000001010000001110111111001101111100000000100000000101000000111011111100110111110000000010000100000100000011100000000010100001000000001000010000010000001110000000001010000100000000100000000101000000111000000000000000010100011100000000010100000011100000000000000001010001110000010011100000001110111111111010111100000000100001001110000000111011111111101011110000000010000100000100000011100000000101010001000001110000010000010000001110000000010101000100000111000000001110000000111011111110001110110000100010000000111000000011101111111000111011000010001000010011010000001110000000011100010100000000100001001101000000111000000001110001010000000010000100000100000011100000001000000001010011110000010000010000001110000000100000000101001111000001001001000000111011111101101011110000000010000100100100000011101111110110101111000000001000010010010000001110000000010101000101000111000001001001000000111000000001010100010100011100000100000100000011101111110110101111000010001000010000010000001110111111011010111100001000100000000101000000111000000000000000010100111100000000010100000011100000000000000001010011110000010011100000001110111111100110111100000000100001001110000000111011111110011011110000000010000100000100000011100000001010011001000000001000010000010000001110000000101001100100000000100001001001000000111011111101000011110000000010000100100100000011101111110100001111000000001000010000010000001110000000100101000100001000100001000001000000111000000010010100010000100010000000010100000011100000000000000001100010001000000001010000001110000000000000000110001000100001000001000000111000000000000000011000000010000100000100000011100000000000000001100000001000000011010000001110111111101101111110000000100000001101000000111011111110110111111000000010000000010100000011101111111100001111110011110000000001010000001110111111110000111111001111000001001001000000111000000011100100011000100010000100100100000011100000001110010001100010001000000001010000001110000000100101000111001111000000000101000000111000000010010100011100111100000100111000000011101111111110101111100000001000010011100000001110111111111010111110000000100000000101000000111000000001101000011000000010000000010100000011100000000110100001100000001000000001010000001100111111110000111110001000100000000101000000110011111111000011111000100010000000010100000011000000000001111001100000001000000001010000001100000000000111100110000000100000000101000000110011111110011011111000100010000000010100000011001111111001101111100010001000010011100000001100111111111111111110000000100001001110000000110011111111111111111000000010000000110100000001001111111011011111100000001000000011010000000100111111101101111110000000100001001001000000010011111111000011111000100010000100100100000001001111111100001111100010001000000001010000001100000000100010100111000111000000000101000000110000000010001010011100011100000100000100000011000000000000000001100000001000010000010000001100000000000000000110000000100001001110000000010011111100110111111000000010000100111000000001001111110011011111100000001000010011100000000100000000001010000110000000100001001110000000010000000000101000011000000010000000010100000011001111110111010111110010001000000001010000001100111111011101011111001000100001001001000000110000000010011110011100111100000100100100000011000000001001111001110011110000010000010000000110111111000110111110000000100001000001000000011011111100011011111000000010000000010100000001101111111011011111100010001000000001010000000110111111101101111110001000100000000101000000111000000011001000011100111100000000010100000011100000001100100001110011110000000001010000001110111111111101011110000000100000000101000000111011111111110101111000000010000100100100000001000000000000000001100010001000010010010000000100000000000000000110001000100000001001000000010000000001001010011100100010000000100100000001000000000100101001110010001000010010010000001100111111000110111111001111000001001001000000110011111100011011111100111100000100100100000011000000001110010001100000001000010010010000001100000000111001000110000000100001000001000000011000000010000000011000000010000100000100000001100000001000000001100000001000000001010000000110111111001101111110000000100000000101000000011011111100110111111000000010000100100100000011100000000010100001110011110000010010010000001110000000001010000111001111000001000001000000111011111111111111111000100010000100000100000011101111111111111111100010001000010010010000000100111111001000111100001000100001001001000000010011111100100011110000100010000100000100000001000000001010100001000010001000010000010000000100000000101010000100001000100001000001000000110000000011100100010000000010000100000100000011000000001110010001000000001000010010010000001100111111111010111101001111000001001001000000110011111111101011110100111100000100000100000001000000000101010001000000001000010000010000000100000000010101000100000000100000001101000000010011111111111111110100011100000000110100000001001111111111111111010001110000010010010000001100000000000000000101001111000001001001000000110000000000000000010100111100000000010100000011001111111110101111010010001000000001010000001100111111111010111101001000100001001001000000010011111110011011110100011100000100100100000001001111111001101111010001110000000010010000000100000000000000000100001000100000001001000000010000000000000000010000100010000000010100000011000000000000101001000010001000000001010000001100000000000010100100001000100001001001000000110000000000000000010100111100000100100100000011000000000000000001010011110000010011100000001110000000000101000100000000100001001110000000111000000000010100010000000010000100100100000011101111111001101111000000001000010010010000001110111111100110111100000000100001000001000000111000000000000000010000000010000100000100000011100000000000000001000000001000000001010000001110111111000110111100000000100000000101000000111011111100011011110000000010000100000100000011100000001110010001010001110000010000010000001110000000111001000101000111000001001001000000111011111110110111110100100010000100100100000011101111111011011111010010001000010000010000001110111111010101111101001111000001000001000000111011111101010111110100111100000100000100000011101111111001101111000000001000010000010000001110111111100110111100000000100000001110000000111000000000001010010100011100000000111000000011100000000000101001010001110000000001010000001110111111111010111101001111000000000101000000111011111111101011110100111100000000010100000011100000000101010001000010001000000001010000001110000000010101000100001000100001001110000000111011111101101011110100011100000100111000000011101111110110101111010001110000010011100000001110000000010101000100000000100001001110000000111000000001010100010000000010000100000100000011101111111111010111010001110000010000010000001110111111111101011101000111000001000001000000111000000000001010010000000010000100000100000011100000000000101001000000001000010010010000001110111111111101011100000000100001001001000000111011111111110101110000000010000100100100000011100000000100101001010011110000010010010000001110000000010010100101001111000001001110000000111000000000000000010000000010000100111000000011100000000000000001000000001000010000010000001110111111011101011100000000100001000001000000111011111101110101110000000010000000010100000011100000000001010001000010110000000001010000001110000000000101000100001011000001000001000000111000000000000000011000000010000100000100000011100000000000000001100000001000010000010000001110000000100101000110000000100001000001000000111000000010010100011000000010000100111000000011100000000000000001100000001000010011100000001110000000000000000110000000100001001001000000111000000000000000011100111100000100100100000011100000000000000001110011110000010000010000001110111111000011011111001111000001000001000000111011111100001101111100111100000100111000000011100000001110010001100010001000010011100000001110000000111001000110001000100000000101000000111000000001010100011100111100000000010100000011100000000101010001110011110000010011100000001110000000000000000111001000100001001110000000111000000000000000011100100010000100000100000011101111110110101111110011110000010000010000001110111111011010111111001111000001000001000000111011111100011011111100111100000100000100000011101111110001101111110011110000000010010000001110000000100010100110000000100000001001000000111000000010001010011000000010000000010100000011100000000000000001100000001000000001010000001110000000000000000110000000100001000001000000111011111100001101111000000010000100000100000011101111110000110111100000001000010011100000001110000000101111000111001111000001001110000000111000000010111100011100111100000100100100000011101111111100001111100000001000010010010000001110111111110000111110000000100001001110000000111000000000000000011100011100000100111000000011100000000000000001110001110000000001010000001110000000000010100110001000100000000101000000111000000000001010011000100010000000010100000011100000000000000001100010001000000001010000001110000000000000000110001000100001001001000000111000000010000000011000000010000100100100000011100000001000000001100000001000010000010000001110111111011010111110001000100001000001000000111011111101101011111000100010000100111000000011101111110001101111110011110000010011100000001110111111000110111111001111000000000101000000111000000010001010011000100010000000010100000011100000001000101001100010001000010010010000001110111111111101011111001111000001001001000000111011111111110101111100111100000100111000000011100000000100101001100010001000010011100000001110000000010010100110001000100000001101000000111011111100110111111000000010000000110100000011101111110011011111100000001000010000010000001110111111010101111110000000100001000001000000111011111101010111111000000010000100100100000011100000000000000001110011110000010010010000001110000000000000000111001111000001000001000000111011111100011011111100011100000100000100000011101111110001101111110001110000010010010000001110000000010010100110000000100001001001000000111000000001001010011000000010000100000100000011101111110110101111110001110000010000010000001110111111011010111111000111000000000101000000111011111110011011111100011100000000010100000011101111111001101111110001110000000001010000001110000000001001100111001000100000000101000000111000000000100110011100100010000000010100000011101111111100001111010001110000000001010000001110111111110000111101000111000001000001000000111000000010010100010000100010000100000100000011100000001001010001000010001000010011010000001110000000000000000100001000100001001101000000111000000000000000010000100010000100000100000011100000001000000001010001110000010000010000001110000000100000000101000111000001001001000000111011111101101011110000100010000100100100000011101111110110101111000010001000010010010000001110000000010101000100000000100001001001000000111000000001010100010000000010000100000100000011100000000000000001000010001000010000010000001110000000000000000100001000100000000101000000111011111111010111110000000010000000010100000011101111111101011111000000001000010011100000001110000000001010000100000000100001001110000000111000000000101000010000000010000000100100000011100000001010100001000000001000000010010000001110000000101010000100000000100000000101000000111011111111011001110000100010000000010100000011101111111101100111000010001000010000010000001110000000100010100100001000100001000001000000111000000010001010010000100010000100100100000011101111110110101111010011110000010010010000001110111111011010111101001111000001001001000000111000000000000000010000100010000100100100000011100000000000000001000010001000010011100000001110000000011010000100000000100001001110000000111000000001101000010000000010000000111000000011101111110100001111000001110000000011100000001110111111010000111100000111000000000101000000111000000010001010010000100010000000010100000011100000001000101001000010001000000001010000001110000000100000000101001111000000000101000000111000000010000000010100111100000100100100000011101111111111010111000010001000010010010000001110111111111101011100001000100001000001000000111000000011100100010100111100000100000100000011100000001110010001010011110000010000010000001110000000100101000100001000100001000001000000111000000010010100010000100010000000111000000011101111111111010111000010001000000011100000001110111111111101011100001000100001001001000000111000000000000000010100011100000100100100000011100000000000000001010001110000010010010000001110000000100111100100001000100001001001000000111000000010011110010000100010000100000100000011101111111010001111010011110000010000010000001110111111101000111101001111000001001110000000111000000011001000010000000010000100111000000011100000001100100001000000001000000001010000001110111111000011011100001000100000000101000000111011111100001101110000100010000100111000000011100000000000101001000000001000010011100000001110000000000010100100000000100001001001000000111011111100010001110000100010000100100100000011101111110001000111000010001000010010010000001110000000111100100100001000100001001001000000111000000011110010010000100010000000010100000011100000000101010001010001110000000001010000001110000000010101000101000111000001001110000000111011111111110101110100111100000100111000000011101111111111010111010011110000000001010000001110000000000000000110000000100000000101000000111000000000000000011000000010000100100100000011100000001000101001100010001000010010010000001110000000100010100110001000100001001001000000111011111101110101111100011100000100100100000011101111110111010111110001110000010010010000001110000000100010100111000111000001001001000000111000000010001010011100011100000100111000000011101111111110101111100010001000010011100000001110111111111010111110001000100000000101000000111000000001101000011100111100000000010100000011100000000110100001110011110000000001010000001110111111010101111111001111000000000101000000111011111101010111111100111100000100000100000011100000000101010001110011110000010000010000001110000000010101000111001111000000000101000000111011111111111111111100111100000000010100000011101111111111111111110011110000010010010000001110111111111010111110000000100001001001000000111011111111101011111000000010000100100100000011100000000101010001100000001000010010010000001110000000010101000110000000100001000001000000111011111101101011111000100010000100000100000011101111110110101111100010001000000010010000001110000000011010000110000000100000001001000000111000000001101000011000000010000100111000000011100000000010100001110001110000010011100000001110000000001010000111000111000001000001000000111011111111111111111100111100000100000100000011101111111111111111110011110000000001010000001110000000100000000110000000100000000101000000111000000010000000011000000010000000110100000011101111111111111111110010001000000011010000001110111111111111111111001000100000001001000000111000000000000000011100011100000000100100000011100000000000000001110001110000010000010000001110111111111010111111000111000001000001000000111011111111101011111100011100000100000100000011101111111011011111100010001000010000010000001110111111101101111110001000100001000001000000111011111111010111111100011100000100000100000011101111111101011111110001110000000001010000001110000000100010100111001000100000000101000000111000000010001010011100100010000100111000000011100000001000000001110001110000010011100000001110000000100000000111000111000001000001000000111000000011100100011000000010000100000100000011100000001110010001100000001000000001010000001110111111001110011110001000100000000101000000111011111100111001111000100010000100111000000011100000000011110001100000001000010011100000001110000000001111000110000000100001001001000000111000000000000000011000100010000100100100000011100000000000000001100010001000010010010000001110111111000011011111001111000001001001000000111011111100001101111100111100000100000100000011100000001000101001100010001000010000010000001110000000100010100110001000100000000101000000111011111111100001111100111100000000010100000011101111111110000111110011110000010010010000001110000000000111100110000000100001001001000000111000000000011110011000000010000000110100000011100000001000000001100000001000000011010000001110000000100000000110000000100001001110000000111011111101110101110000111100000100111000000011101111110111010111000011110000000010010000001110000000100010100101001111000000001001000000111000000010001010010100111100000100111000000011101111111110101111010011110000010011100000001110111111111010111101001111000001000001000000111000000010010100010000000010000100000100000011100000001001010001000000001000010011100000001110111111101101111101001111000001001110000000111011111110110111110100111100000100000100000011100000001100100001000010001000010000010000001110000000110010000100001000100001001001000000111000000000010100010000111100000100100100000011100000000001010001000011110000000001010000001110111111111000011101000111000000000101000000111011111111100001110100011100000100000100000011100000001000101001010010001000010000010000001110000000100010100101001000100001000001000000111011111100001101110100111100000100000100000011101111110000110111010011110000000011010000001110000000000010100100001011000000001101000000111000000000001010010000101100000100000100000011101111111111010111000001001000010000010000001110111111111101011100000100100000001001000000111000000010001010010100111100000000100100000011100000001000101001010011110000010010010000001110111111111010111100000000100001001001000000111011111111101011110000000010000000011000000011100000000101010001000000001000000001100000001110000000010101000100000000100000000101000000111011111111111111110100111100000000010100000011101111111111111111010011110000010000010000001110111111000011011101001000100001000001000000111011111100001101110100100010000100100100000011100000001010011001010001110000010010010000001110000000101001100101000111000000001101000000111011111100110111110100111100000000110100000011101111110011011111010011110000010011100000001110111111110000111100001000100001001110000000111011111111000011110000100010000100100100000011100000000011110001010001110000010010010000001110000000001111000101000111000001000001000000111011111111111010110100100010000100000100000011101111111111101011010010001000010000010000001110000000010001010100000000100001000001000000111000000001000101010000000010000100100100000011101111111111111111000000001000010010010000001110111111111111111100000000100001001001000000111011111110011011110100111100000100100100000011101111111001101111010011110000010000010000001110000000000111100101001111000001000001000000111000000000011110010100111100000100000100000011101111111111101011000000001000010000010000001110111111111110101100000000100001000001000000111000000011100100010100011100000100000100000011100000001110010001010001110000010000010000001110000000100101000101000111000001000001000000111000000010010100010100011100000100111000000011101111110000110111000010001000010011100000001110111111000011011100001000100001001001000000111000000000001010010100011100000100100100000011100000000000101001010001110000010011100000001110000000000000000100001000100001001110000000111000000000000000010000100010000100000100000011100000000000000001100010001000010000010000001110000000000000000110001000100000000101000000111000000000000000011000111100000000010100000011100000000000000001100011110000010010010000001110111111111010111110000000100001001001000000111011111111101011111000000010000100000100000011100000001001010001100010001000010000010000001110000000100101000110001000100000001101000000111011111111101011111000000010000000110100000011101111111110101111100000001000010010010000001110000000000000000110000000100001001001000000111000000000000000011000000010000000100100000011100000000000000001100001110000000010010000001110000000000000000110000111000001001001000000111011111110011011111000000010000100100100000011101111111001101111100000001000010000010000001110000000101111000110001000100001000001000000111000000010111100011000100010000000010100000011100000000010100001100000001000000001010000001110000000001010000110000000100001000001000000111011111101101011111100011100000100000100000011101111110110101111110001110000000001010000001110000000101111000110001000100000000101000000111000000010111100011000100010000100111000000011101111110011011111100010001000010011100000001110111111001101111110001000100000000101000000111000000000000000011100011100000000010100000011100000000000000001110001110000010000010000001110000000100000000110001000100001000001000000111000000010000000011000100010000100000100000011101111110110101111100000001000010000010000001110111111011010111110000000100001001110000000111000000001101000011100011100000100111000000011100000000110100001110001110000000001010000001110111111010101111110001000100000000101000000111011111101010111111000100010000100100100000011100000000101010001100000001000010010010000001110000000010101000110000000100001000001000000111011111101110101111000000010000100000100000011101111110111010111100000001000010010010000001110000000011111000110001000100001001001000000111000000001111100011000100010000100100100000011100000001100100001110001110000010010010000001110000000110010000111000111000000001001000000111011111100001101111000000010000000100100000011101111110000110111100000001000010000010000001110111111111111111110001000100001000001000000111011111111111111111000100010000000010100000011100000000100101001110011110000000001010000001110000000010010100111001111000001001001000000111011111101101011111000100010000100100100000011101111110110101111100010001000010010010000001110000000000000000110000000100001001001000000111000000000000000011000000010000100100100000011100000001001010001110011110000010010010000001110000000100101000111001111000001001001000000111011111111101011111100100010000100100100000011101111111110101111110010001000010000010000001110000000100101000110000111000001000001000000111000000010010100011000011100000000010100000011101111111110101111100010001000000001010000001110111111111010111110001000100000001001000000111000000001101000011000000010000000100100000011100000000110100001100000001000000001010000001110000000110010000100000000100000000101000000111000000011001000010000000010000100000100000011101111111110101111000010001000010000010000001110111111111010111100001000100000000101000000111000000010010100010000100010000000010100000011100000001001010001000010001000010011100000001110000000000000000100000000100001001110000000111000000000000000010000000010000000010100000011101111110000110111000010001000000001010000001110111111000011011100001000100001000001000000111000000000011110010000100010000100000100000011100000000001111001000010001000010011100000001110111111001110011100001000100001001110000000111011111100111001110000100010000000010100000011100000001011110001000000001000000001010000001110000000101111000100000000100001001110000000111011111101101011110000111100000100111000000011101111110110101111000011110000010010010000001110000000011010000100000000100001001001000000111000000001101000010000000010000100100100000011101111110100001111000000001000010010010000001110111111010000111100000000100000000101000000111000000001001010010100111100000000010100000011100000000100101001010011110000010000010000001110111111111101011100000000100001000001000000111011111111110101110000000010000100000100000011101111111111111111000001110000010000010000001110111111111111111100000111000001000001000000111000000001111100010100100010000100000100000011100000000111110001010010001000010000010000001110111111010000111100001000100001000001000000111011111101000011110000100010000000100100000011100000000100101001010011110000000010010000001110000000010010100101001111000000001110000000111011111111111111110000000010000000111000000011101111111111111111000000001000010000010000001110000000100000000101001111000001000001000000111000000010000000010100111100000100100100000011101111111111111111000000001000010010010000001110111111111111111100000000100001000001000000111011111111101011110000100010000100000100000011101111111110101111000010001000000001010000001110000000100101000100001111000000000101000000111000000010010100010000111100000100111000000011101111110000110111000010001000010011100000001110111111000011011100001000100000000101000000111000000000101000010100011100000000010100000011100000000010100001010001110000010011100000001110111111110101111100001111000001001110000000111011111111010111110000111100000000010100000011100000000001010001000010001000000001010000001110000000000101000100001000100001001001000000111000000010010100010100111100000100100100000011100000001001010001010011110000010000010000001110111111111010111100001000100001000001000000111011111111101011110000100010000100000100000011100000000110100001000010001000010000010000001110000000011010000100001000100000000101000000111011111111000011110100111100000000010100000011101111111100001111010011110000000001010000001110000000101111000100000000100000000101000000111000000010111100010000000010000100111000000011101111110101011111000001110000010011100000001110111111010101111100000111000000000101000000111000000001010100011000000010000000010100000011100000000101010001100000001000010000010000001110111111011010111110000000100001000001000000111011111101101011111000000010000100111000000011100000001001010001100010001000010011100000001110000000100101000110001000100001001001000000111011111100001101111000100010000100100100000011101111110000110111100010001000010011100000001110000000101111000111001111000001001110000000111000000010111100011100111100000100100100000011100000000010100001100000001000010010010000001110000000001010000110000000100000000101000000111011111101110101111000000010000000010100000011101111110111010111100000001000000001010000001110000000100111100111001111000000000101000000111000000010011110011100111100000000110100000011101111111111010111100010001000000011010000001110111111111101011110001000100001000001000000111011111100011011111100111100000100000100000011101111110001101111110011110000000001010000001110000000000101000111001111000000000101000000111000000000010100011100111100000100000100000011101111110001101111100010001000010000010000001110111111000110111110001000100000001001000000111000000010001010011000000010000000100100000011100000001000101001100000001000010010010000001110000000100000000111001111000001001001000000111000000010000000011100111100000100000100000011100000000000000001100000001000010000010000001110000000000000000110000000100001000001000000111000000000101000011000100010000100000100000011100000000010100001100010001000010011100000001110111111110110011110001000100001001110000000111011111111011001111000100010000100100100000011100000001000101001110011110000010010010000001110000000100010100111001111000001000001000000111011111111111111111100011100000100000100000011101111111111111111110001110000010011100000001110111111001000111111001000100001001110000000111011111100100011111100100010000100111000000011100000000011110001110011110000010011100000001110000000001111000111001111000000000101000000111000000000000000011100100010000000010100000011100000000000000001110010001000010000010000001110111111111010111110001000100001000001000000111011111111101011111000100010000100100100000011101111110001101111100000001000010010010000001110111111000110111110000000100000000101000000111000000000010100011000100010000000010100000011100000000001010001100010001000010000010000001110000000100101000110000000100001000001000000111000000010010100011000000010000100100100000011101111111110101111110011110000010010010000001110111111111010111111001111000000001101000000111011111110001101111100100010000000110100000011101111111000110111110010001000010010010000001110000000100111100110000000100001001001000000111000000010011110011000000010000000010100000011101111111111010111110011110000000001010000001110111111111101011111001111000000000101000000111000000011100100011000000010000000010100000011100000001110010001100000001000010000010000001110000000010101000111001111000001000001000000111000000001010100011100111100000100000100000011101111111111010111000010001000010000010000001110111111111101011100001000100001001001000000111000000000001010010000000010000100100100000011100000000000101001000000001000010010010000001110000000101010000100001000100001001001000000111000000010101000010000100010000100100100000011101111110010001111000010001000010010010000001110111111001000111100001000100001001001000000111000000000010100010000011100000100100100000011100000000001010001000001110000010000010000001110000000000000000101000111000001000001000000111000000000000000010100011100000100000100000011101111110110101111000000001000010000010000001110111111011010111100000000100001000001000000110000000010010100010100111100000100000100000011000000001001010001010011110000010011100000001100111111111010111101000111000001001110000000110011111111101011110100011100000100100100000011000000001001010001000010001000010010010000001100000000100101000100001000100000000101000000110011111111101011110000011100000000010100000011001111111110101111000001110000010000010000000100000000000000000100001000100001000001000000010000000000000000010000100010000000010100000001000000001001010001000010001000000001010000000100000000100101000100001000100001000001000000110000000000000000010000000010000100000100000011000000000000000001000000001000000011010000001100111111111010111100001000100000001101000000110011111111101011110000100010000100000100000001001111111001101111000000001000010000010000000100111111100110111100000000100000000101000000010000000010001010010100111100000000010100000001000000001000101001010011110000010010010000001100111111001101111100001000100001001001000000110011111100110111110000100010000100111000000011000000001100100001010011110000010011100000001100000000110010000101001111000001001001000000010011111110110111110000000010000100100100000001001111111011011111000000001000010010010000000100111111110000111101000111000001001001000000010011111111000011110100011100000100111000000011000000000001111001010011110000010011100000001100000000000111100101001111000001001110000000110011111100010001110000101100000100111000000011001111110001000111000010110000010000010000000100000000100010100100001000100001000001000000010000000010001010010000100010000100100100000001001111111111111111000000001000010010010000000100111111111111111100000000100001001001000000110011111111110101110100011100000100100100000011001111111111010111010001110000000011100000001100000000100010100101001000100000001110000000110000000010001010010100100010000100100100000001000000000000000001000011110000010010010000000100000000000000000100001111000001000001000000010011111111101011110000100010000100000100000001001111111110101111000010001000010000010000001100111111100110111100000000100001000001000000110011111110011011110000000010000000110100000011000000001000101001010001110000000011010000001100000000100010100101000111000001001110000000010011111101101011110000100010000100111000000001001111110110101111000010001000010011100000000100000000100101000110000000100001001110000000010000000010010100011000000010000000010100000011001111110000110111110011110000000001010000001100111111000011011111001111000000001001000000110000000010010100011000100010000000100100000011000000001001010001100010001000010011100000000100000000111001000111000111000001001110000000010000000011100100011100011100000100000100000001001111110000110111100010001000010000010000000100111111000011011110001000100001001110000000110000000000011110011100111100000100111000000011000000000001111001110011110000000001010000001100111111111101011110000000100000000101000000110011111111110101111000000010000000010100000001001111110001101111110011110000000001010000000100111111000110111111001111000001001110000000010000000001001010011000101100000100111000000001000000000100101001100010110000000001010000001100111111111111111110000000100000000101000000110011111111111111111000000010000100111000000011001111111111010111100000001000010011100000001100111111111101011110000000100001000001000000111000000010001010011000000010000100000100000011100000001000101001100000001000010010010000001110111111111101011110001000100001001001000000111011111111110101111000100010000100000100000011100000000100101001110011110000010000010000001110000000010010100111001111000000000101000000111000000000000000011100111100000000010100000011100000000000000001110011110000010011100000001110111111111101011111000111000001001110000000111011111111110101111100011100000000010100000011100000001000010101110011110000000001010000001110000000100001010111001111000000001110000000111011111101111010111100111100000000111000000011101111110111101011110011110000000001010000001110000000000101000111001111000000000101000000111000000000010100011100111100000100000100000011100000001001010001100010001000010000010000001110000000100101000110001000100001000001000000111011111100001101111100011100000100000100000011101111110000110111110001110000010011010000001110000000100010100110001000100001001101000000111000000010001010011000100010000100000100000011101111111111010111110011110000010000010000001110111111111101011111001111000001000001000000111000000010001010011100100010000100000100000011100000001000101001110010001000000001010000001110111111011101011111001111000000000101000000111011111101110101111100111100000100100100000011100000000100101001100010001000010010010000001110000000010010100110001000100001000001000000111011111111111111111000000010000100000100000011101111111111111111100000001000000011010000001110111111000011011110000000100000001101000000111011111100001101111000000010000000100100000011100000000100010101110001110000000010010000001110000000010001010111000111000000000101000000111011111101111010111000000010000000010100000011101111110111101011100000001000010011100000001110000000000010100111001111000001001110000000111000000000001010011100111100000000010100000011101111110011011111110011110000000001010000001110111111001101111111001111000001001110000000111000000000101000010000000010000100111000000011100000000010100001000000001000010000010000001110111111000011011100000000100001000001000000111011111100001101110000000010000100111000000011100000000001111001010011110000010011100000001110000000000111100101001111000001001001000000111011111100011011110100111100000100100100000011101111110001101111010011110000000001010000001110000000100000000101001111000000000101000000111000000010000000010100111100000100100100000011101111110111010111000000001000010010010000001110111111011101011100000000100001000001000000111000000001001010010000000010000100000100000011100000000100101001000000001000000001010000001110111111111101011101001111000000000101000000111011111111110101110100111100000100100100000011100000001110010001000000001000010010010000001110000000111001000100000000100001000001000000111011111100011011110000011100000100000100000011101111110001101111000001110000010010010000001110000000100010100101001111000001001001000000111000000010001010010100111100000100111000000011100000001000000001010011110000010011100000001110000000100000000101001111000001001001000000111011111111111111110000100010000100100100000011101111111111111111000010001000010011010000001110111111111010111100000000100001001101000000111011111111101011110000000010000100000100000011100000000101010001010001110000010000010000001110000000010101000101000111000001001110000000111011111111111111110000000010000100111000000011101111111111111111000000001000000001010000001110111111111010111100000000100000000101000000111011111111101011110000000010000100100100000011100000000101010001000001110000010010010000001110000000010101000100000111000000000101000000111011111111110101110000000010000000010100000011101111111111010111000000001000000001100000001110000000000010100100000000100000000110000000111000000000001010010000000010000000010100000011100000001010100001000000001000000001010000001110000000101010000100000000100001000001000000111011111101000011110100111100000100000100000011101111110100001111010011110000010011100000001110000000000000000100000000100001001110000000111000000000000000010000000010000100000100000011100000000101010001010001110000010000010000001110000000010101000101000111000001000001000000111011111111111111110000100010000100000100000011101111111111111111000010001000010010010000001110000000000101000100001000100001001001000000111000000000010100010000100010000100000100000011101111111110110011000010001000010000010000001110111111111011001100001000100000000101000000111000000001000101010000000010000000010100000011100000000100010101000000001000010010010000001110111111011010111100001011000001001001000000111011111101101011110000101100000100000100000011101111111001101111000000001000010000010000001110111111100110111100000000100001000001000000111000000011100100010100011100000100000100000011100000001110010001010001110000010011100000001110000000100101000100000111000001001110000000111000000010010100010000011100000000010100000011101111111110101111110010001000000001010000001110111111111010111111001000100001001110000000111011111110011011111100011100000100111000000011101111111001101111110001110000010010010000001110000000101111000110001000100001001001000000111000000010111100011000100010000100100100000011100000001100100001100010001000010010010000001110000000110010000110001000100001001110000000111000000010000000011100111100000100111000000011100000001000000001110011110000010010010000001110111111011010111111001000100001001001000000111011111101101011111100100010000100111000000011100000000000000001110001110000010011100000001110000000000000000111000111000001001001000000111000000010001010011000111100000100100100000011100000001000101001100011110000000001010000001110111111000001101111001000100000000101000000111011111100000110111100100010000100111000000011100000001001111001100000001000010011100000001110000000100111100110000000100001000001000000111011111101101011111000100010000100000100000011101111110110101111100010001000000001010000001110111111000110111110000000100000000101000000111011111100011011111000000010000100111000000011100000001000101001110011110000010011100000001110000000100010100111001111000000001001000000111011111100010001111000000010000000100100000011101111110001000111100000001000010011010000001110000000100111100110000000100001001101000000111000000010011110011000000010000100111000000011100000000000000001110001110000010011100000001110000000000000000111000111000001000001000000111011111111100001111000100010000100000100000011101111111110000111100010001000000001010000001110000000111100100111001111000000000101000000111000000011110010011100111100000100111000000011100000000110100001110011110000010011100000001110000000011010000111001111000001001110000000111011111101000011111000100010000100111000000011101111110100001111100010001000010000010000001110000000100010100111000111000001000001000000111000000010001010011100011100000100111000000011100000000001010001110011110000010011100000001110000000000101000111001111000001001001000000111011111111100001111100111100000100100100000011101111111110000111110011110000010000010000001110000000100010100111001111000001000001000000111000000010001010011100111100000100100100000011101111111011011111110011110000010010010000001110111111101101111111001111000001000001000000111011111111000011111100111100000100000100000011101111111100001111110011110000010000010000001110000000000000000110000000100001000001000000111000000000000000011000000010000000100100000011100000000000000001110001110000000010010000001110000000000000000111000111000001001110000000111000000011100100011000000010000100111000000011100000001110010001100000001000010000010000001110000000100101000111001000100001000001000000111000000010010100011100100010000100000100000011100000000000000001100011110000010000010000001110000000000000000110001111000000000101000000111000000000000000011000000010000000010100000011100000000000000001100000001000010000010000001110000000000000000101000111000001000001000000111000000000000000010100011100000100111000000011100000000000000001000010001000010011100000001110000000000000000100001000100000000101000000111000000000000000010100111100000000010100000011100000000000000001010011110000010000010000001110111111111010111100001111000001000001000000111011111111101011110000111100000100000100000011100000000000000001010011110000010000010000001110000000000000000101001111000001001110000000111011111110011011110000100010000100111000000011101111111001101111000010001000010000010000001110000000100010100100000000100001000001000000111000000010001010010000000010000100100100000011101111110110101111000000001000010010010000001110111111011010111100000000100001000001000000111000000000000000010000100010000100000100000011100000000000000001000010001000000001010000001110000000011010000100001000100000000101000000111000000001101000010000100010000100111000000011100000001100100001010011110000010011100000001110000000110010000101001111000001000001000000111000000000000000010100011100000100000100000011100000000000000001010001110000010010010000001110111111000011011100001000100001001001000000111011111100001101110000100010000100111000000011100000000000000001000010001000010011100000001110000000000000000100001000100001001001000000111000000000001010010000011100000100100100000011100000000000101001000001110000010000010000001110111111111010111101000111000001000001000000111011111111101011110100011100000000110100000011100000000110100001000000001000000011010000001110000000011010000100000000100001000001000000111011111101000011110000000010000100000100000011101111110100001111000000001000010011100000001110000000100010100100000111000001001110000000111000000010001010010000011100000100111000000011100000001000000001000000001000010011100000001110000000100000000100000000100000000101000000111011111101110101110000000010000000010100000011101111110111010111000000001000010000010000001110000000000101000101001111000001000001000000111000000000010100010100111100000000010100000011100000001001010001010011110000000001010000001110000000100101000101001111000001000001000000111000000010001010010100011100000100000100000011100000001000101001010001110000000011010000001110111111011000011101001111000000001101000000111011111101100001110100111100000000010100000011101111110001101111000000001000000001010000001110111111000110111100000000100001001001000000111000000000010100010100111100000100100100000011100000000001010001010011110000000010010000001110000000010101000100001000100000001001000000111000000001010100010000100010000100100100000011101111110110101111000010110000010010010000001110111111011010111100001011000001001001000000111000000001010100010100111100000100100100000011100000000101010001010011110000010000010000001110111111111111111101001111000001000001000000111011111111111111110100111100000100100100000011100000001000101001000010001000010010010000001110000000100010100100001000100001000001000000111011111100001101111000000010000100000100000011101111110000110111100000001000010011100000001110111111111111111111000111000001001110000000111011111111111111111100011100000100100100000011100000000000000001110011110000010010010000001110000000000000000111001111000001000001000000111011111111101011111000000010000100000100000011101111111110101111100000001000010000010000001110000000110010100110000000100001000001000000111000000011001010011000000010000100100100000011101111110110101111100010001000010010010000001110111111011010111110001000100001000001000000111000000000000000011100011100000100000100000011100000000000000001110001110000010010010000001110111111000011011110000000100001001001000000111011111100001101111000000010000000010100000011101111111111111111100000001000000001010000001110111111111111111110000000100001001001000000111000000001001010011100111100000100100100000011100000000100101001110011110000010011010000001110111111111111111110001000100001001101000000111011111111111111111000100010000100111000000011101111111110101111100000001000010011100000001110111111111010111110000000100000000101000000111000000010010100011100111100000000010100000011100000001001010001110011110000000001010000001110111111000011011110000000100000000101000000111011111100001101111000000010000100000100000011100000001000101001110011110000010000010000001110000000100010100111001111000000000101000000111000000000000000011100111100000000010100000011100000000000000001110011110000010011100000001110111111111111111110000000100001001110000000111011111111111111111000000010000100100100000011100000001000101001110011110000010010010000001110000000100010100111001111000000000101000000111011111101111010111100111100000000010100000011101111110111101011110011110000010011100000001110000000010010100110000000100001001110000000111000000001001010011000000010000000110100000011100000000000000001110011110000000011010000001110000000000000000111001111000001000001000000111011111101101011111000000010000100000100000011101111110110101111100000001000010010010000001110000000010101000110001111000001001001000000111000000001010100011000111100000000010100000011101111111111010111110011110000000001010000001110111111111101011111001111000001000001000000111000000000001010011100011100000100000100000011100000000000101001110001110000010010010000001110000000100000000111001111000001001001000000111000000010000000011100111100000000010100000011101111111111010111110011110000000001010000001110111111111101011111001111000000000101000000111000000000011110011000000010000000010100000011100000000001111001100000001000000001010000001110111111000110111111001000100000000101000000111011111100011011111100100010000100000100000011100000000000000001110011110000010000010000001110000000000000000111001111000000000101000000111000000010000000011100011100000000010100000011100000001000000001110001110000010000010000001110111111111111111111001111000001000001000000111011111111111111111100111100000100000100000011100000001000000001010011110000010000010000001110000000100000000101001111000001001001000000111000000000000000010000111100000100100100000011100000000000000001000011110000010010010000001110000000000000000100000000100001001001000000111000000000000000010000000010000100100100000011100000000000000001000010001000010010010000001110000000000000000100001000100000000101000000111011111111110101110100111100000000010100000011101111111111010111010011110000010000010000001110000000100010100100000111000001000001000000111000000010001010010000011100000100111000000011101111111111111111000010001000010011100000001110111111111111111100001000100000000101000000111000000000000000010000000010000000010100000011100000000000000001000000001000010010010000001110000000000000000101000111000001001001000000111000000000000000010100011100000100000100000011100000001000000001010001110000010000010000001110000000100000000101000111000000000101000000111011111111111111110000000010000000010100000011101111111111111111000000001000010011100000001110111111101101111101001111000001001110000000111011111110110111110100111100000000110100000011100000001100100001000010001000000011010000001110000000110010000100001000100000000101000000111011111111101011110000011100000000010100000011101111111110101111000001110000010011100000001110000000011010000100000000100001001110000000111000000001101000010000000010000000010100000011100000001100100001000010001000000001010000001110000000110010000100001000100001001001000000111000000000000000010100011100000100100100000011100000000000000001010001110000010010010000001110000000100000000101001000100001001001000000111000000010000000010100100010000100111000000011101111110111010111010011110000010011100000001110111111011101011101001111000001001001000000111000000001100110010000000010000100100100000011100000000110011001000000001000000001010000001110111111000110111100001111000000000101000000111011111100011011110000111100000100000100000011101111110101011111000000001000010000010000001110111111010101111100000000100000001101000000111000000001010100010100111100000000110100000011100000000101010001010011110000000001010000001110111111011010111100000000100000000101000000111011111101101011110000000010000000010100000011100000000101010001000010001000000001010000001110000000010101000100001000100001000001000000111011111111100001110100011100000100000100000011101111111110000111010001110000010011100000001110000000000111100100000000100001001110000000111000000000011110010000000010000100000100000011100000001000000001000000001000010000010000001110000000100000000100000000100001000001000000111011111111111111110100111100000100000100000011101111111111111111010011110000000001010000001110000000000101000101001000100000000101000000111000000000010100010100100010000100111000000011101111111001101111010011110000010011100000001110111111100110111101001111000001001001000000111000000000000000010000011100000100100100000011100000000000000001000001110000010000010000001110111111111101011110001000100001000001000000111011111111110101111000100010000000010100000011100000001110010001110011110000000001010000001110000000111001000111001111000000000101000000111000000000000000011100100010000000010100000011100000000000000001110010001000010011100000001110000000000000000111000111000001001110000000111000000000000000011100011100000100100100000011100000000101010001100011110000010010010000001110000000010101000110001111000001000001000000111011111111100001111000000010000100000100000011101111111110000111100000001000010010010000001110000000000111100110000000100001001001000000111000000000011110011000000010000000010100000011100000000000000001110001110000000001010000001110000000000000000111000111000001000001000000111011111110110111111100111100000100000100000011101111111011011111110011110000010000010000001110000000001010000110000000100001000001000000111000000000101000011000000010000000010100000011101111111110000111110011110000000001010000001110111111111000011111001111000001000001000000111000000010011110011000100010000100000100000011100000001001111001100010001000000001010000001110111111111111111111000111000000000101000000111011111111111111111100011100000000100100000011100000000000000001100010001000000010010000001110000000000000000110001000100000000101000000111000000010000000011100011100000000010100000011100000001000000001110001110000010000010000001110111111111111111110000000100001000001000000111011111111111111111000000010000100100100000011100000000000000001100000001000010010010000001110000000000000000110000000100001001001000000111000000010000000011000100010000100100100000011100000001000000001100010001000000001010000001110111111111111111110000000100000000101000000111011111111111111111000000010000100000100000011101111111011011111100010001000010000010000001110111111101101111110001000100001000001000000111000000011001000011100111100000100000100000011100000001100100001110011110000000001010000001110111111101101111110001000100000000101000000111011111110110111111000100010000100111000000011100000001100100001100010001000010011100000001110000000110010000110001000100001000001000000111000000000000000011000100010000100000100000011100000000000000001100010001000000001010000001110000000000000000111001000100000000101000000111000000000000000011100100010000100100100000011101111111011011111100001110000010010010000001110111111101101111110000111000000000101000000111011111101010111111000000010000000010100000011101111110101011111100000001000010010010000001110111111100110111110000000100001001001000000111011111110011011111000000010000000010100000011100000001000101001100000001000000001010000001110000000100010100110000000100001000001000000111011111101110101111000100010000100000100000011101111110111010111100010001000010010010000001110000000100000000111000111000001001001000000111000000010000000011100011100000100111000000011100000001011110001100010001000010011100000001110000000101111000110001000100001001110000000111011111100110111110100011100000100111000000011101111110011011111010001110000000001010000001110000000111100100100001000100000000101000000111000000011110010010000100010000100000100000011101111110001101111000010001000010000010000001110111111000110111100001000100000000101000000111000000010000000010000101100000000010100000011100000001000000001000010110000010000010000001110111111011010111100001000100001000001000000111011111101101011110000100010000000010100000011100000000000000001000001110000000001010000001110000000000000000100000111000001000001000000111000000000000000010000100010000100000100000011100000000000000001000010001000010000010000001110111111000110111101000111000001000001000000111011111100011011110100011100000000010100000011100000000100101001000000001000000001010000001110000000010010100100000000100001001110000000111011111111110101110100111100000100111000000011101111111111010111010011110000000001010000001110000000101111000101000111000000000101000000111000000010111100010100011100000000010100000011100000000010100001000010001000000001010000001110000000001010000100001000100001000001000000111011111100110111110100111100000100000100000011101111110011011111010011110000000001010000001110000000110010000100001111000000000101000000111000000011001000010000111100000100000100000011101111110000110111000010001000010000010000001110111111000011011100001000100000000101000000111000000010001010010000000010000000010100000011100000001000101001000000001000010000010000001110111111011101011100000000100001000001000000111011111101110101110000000010000100111000000011100000000100101001010011110000010011100000001110000000010010100101001111000001000001000000111000000000000000010100111100000100000100000011100000000000000001010011110000000010010000001110111111111101011100001000100000001001000000111011111111110101110000100010000100000100000011100000001000101001000000001000010000010000001110000000100010100100000000100001000001000000111011111111111111110100111100000100000100000011101111111111111111010011110000000011010000001110111111101101111100001000100000001101000000111011111110110111110000100010000100111000000011101111110101011111010011110000010011100000001110111111010101111101001111000000000101000000111011111100011011110000000010000000010100000011101111110001101111000000001000000001010000001110000000100010100100001000100000000101000000111000000010001010010000100010000100000100000011100000000000000001010001110000010000010000001110000000000000000101000111000001000001000000111011111100001101110000100010000100000100000011101111110000110111000010001000010010010000001110000000111001000100000000100001001001000000111000000011100100010000000010000100000100000011100000000111110001000010001000010000010000001110000000011111000100001000100001001001000000111011111101011001110100111100000100100100000011101111110101100111010011110000000010010000001110000000010010100100000000100000001001000000111000000001001010010000000010000100000100000011100000000000000001100000001000010000010000001110000000000000000110000000100001001001000000111011111111110101111100111100000100100100000011101111111111010111110011110000010000010000001110000000000010100110001000100001000001000000111000000000001010011000100010000100000100000011101111111110101111100000001000010000010000001110111111111010111110000000100001001110000000111000000000000000011100011100000100111000000011100000000000000001110001110000010010010000001110000000000000000110000000100001001001000000111000000000000000011000000010000100111000000011000000001001010001100001110000010011100000001100000000100101000110000111000001000001000000110011111111101011111000100010000100000100000011001111111110101111100010001000000001010000001100000000100101000111001111000000000101000000110000000010010100011100111100000000010100000011000000000000000001110011110000000001010000001100000000000000000111001111000001001001000000010011111100001101111000100010000100100100000001001111110000110111100010001000000001010000000100111111111111111111000111000000000101000000010011111111111111111100011100000100111000000011000000000100101001100000001000010011100000001100000000010010100110000000100000000101000000110011111101110101111000000010000000010100000011001111110111010111100000001000010010010000000100000000100010100110000000100001001001000000010000000010001010011000000010000000010100000001001111111011011111100010001000000001010000000100111111101101111110001000100001000001000000110000000000101000011000000010000100000100000011000000000010100001100000001000010011100000001100111111111111111111001000100001001110000000110011111111111111111100100010000100100100000001001111111011011111100000001000010010010000000100111111101101111110000000100001000001000000010011111101010111111100111100000100000100000001001111110101011111110011110000010010010000001100000000010101000110001111000001001001000000110000000001010100011000111100000100000100000011001111111111111111110001110000010000010000001100111111111111111111000111000001000001000000010000000010000000011000100010000100000100000001000000001000000001100010001000010000010000000100111111111101011111001111000001000001000000010011111111110101111100111100000100110100000011001111111111111111100011110000010011010000001100111111111111111110001111000001001001000000110000000001010100011100100010000100100100000011000000000101010001110010001000000011010000000100111111011111111111000111000000001101000000010011111101111111111100011100000100100100000001000000001001010001100000001000010010010000000100000000100101000110000000100001000001000000110000000000000000011000000010000100000100000011000000000000000001100000001000000001010000001100000000000000000110000000100000000101000000110000000000000000011000000010000100100100000001001111110000110111110010001000010010010000000100111111000011011111001000100001001110000000010000000010000101011000011100000100111000000001000000001000010101100001110000000001010000001100111111000011011101001111000000000101000000110011111100001101110100111100000100100100000011001111111111111111000000001000010010010000001100111111111111111100000000100000000101000000010000000010000000010000011100000000010100000001000000001000000001000001110000010011100000000100111111011010111100001000100001001110000000010011111101101011110000100010000100000100000011000000000101010001000000001000010000010000001100000000010101000100000000100001001001000000110011111111111111110000000010000100100100000011001111111111111111000000001000010010010000000100111111000100011100001000100001001001000000010011111100010001110000100010000100000100000001000000000000010101000011110000010000010000000100000000000001010100001111000000000101000000110011111100011011110000100010000000010100000011001111110001101111000010001000010000010000001100000000100000000100000000100001000001000000110000000010000000010000000010000100000100000011101111110110101111010011110000010000010000001110111111011010111101001111000001000001000000111011111110011011110000100010000100000100000011101111111001101111000010001000010011100000001110000000000010100100000111000001001110000000111000000000001010010000011100000100000100000011100000000000000001010010001000010000010000001110000000000000000101001000100001001110000000111011111100001101110000000010000100111000000011101111110000110111000000001000010010010000001110000000100010100101001111000001001001000000111000000010001010010100111100000000010100000011101111111111010111000000001000000001010000001110111111111101011100000000100001001110000000111000000011100100010100111100000100111000000011100000001110010001010011110000010000010000001110000000100101000100000000100001000001000000111000000010010100010000000010000000110100000011101111111111010111000010001000000011010000001110111111111101011100001000100001000001000000111000000010001010010100011100000100000100000011100000001000101001010001110000010011010000001110111111000100011100001000100001001101000000111011111100010001110000100010000000010100000011100000000001111001000000001000000001010000001110000000000111100100000000100001001001000000111000000010000000010000000010000100100100000011100000001000000001000000001000000001010000001110111111011101011100000000100000000101000000111011111101110101110000000010000100100100000011100000001000101001000000001000010010010000001110000000100010100100000000100000000101000000111000000000010100010000111100000000010100000011100000000001010001000011110000010010010000001110111111000100011100001000100001001001000000111011111100010001110000100010000100111000000011100000000100010101010011110000010011100000001110000000010001010101001111000001001001000000111011111111011001110000111100000100100100000011101111111101100111000011110000010011100000001110000000110010000100000000100001001110000000111000000011001000010000000010000000010100000011100000001000000001000000001000000001010000001110000000100000000100000000100000000101000000111011111111111111111100111100000000010100000011101111111111111111110011110000010011100000001110000000100000000111001111000001001110000000111000000010000000011100111100000000010100000011100000000000000001110011110000000001010000001110000000000000000111001111000001001001000000111011111101110101111000000010000100100100000011101111110111010111100000001000010010010000001110000000100010100111001111000001001001000000111000000010001010011100111100000100000100000011101111110000110111100010001000010000010000001110111111000011011110001000100000000101000000111000000010001010011100011100000000010100000011100000001000101001110001110000010000010000001110000000000000000110000000100001000001000000111000000000000000011000000010000100100100000011101111111111010111100000001000010010010000001110111111111101011110000000100001001001000000111000000010001010011000000010000100100100000011100000001000101001100000001000010011100000001110111111111111111110000000100001001110000000111011111111111111111000000010000100000100000011100000000000000001110011110000010000010000001110000000000000000111001111000001001110000000111000000000000000011000010010000100111000000011100000000000000001100001001000010010010000001110111111101101111110000000100001001001000000111011111110110111111000000010000100100100000011100000001100100001100000001000010010010000001110000000110010000110000000100001001110000000111000000000000000011100111100000100111000000011100000000000000001110011110000010010010000001110000000000000000111001111000001001001000000111000000000000000011100111100000100000100000011101111111111010111100000001000010000010000001110111111111101011110000000100001000001000000111000000000010100011000000010000100000100000011100000000001010001100000001000000001010000001110111111100110111110001111000000000101000000111011111110011011111000111100000100000100000011100000000010100001100010001000010000010000001110000000001010000110001000100000000101000000111000000000111100011000100010000000010100000011100000000011110001100010001000000011100000001110111111111101011110000000100000001110000000111011111111110101111000000010000100000100000011100000001000101001100010001000010000010000001110000000100010100110001000100000000101000000111000000000000000011000000010000000010100000011100000000000000001100000001000010010010000001110111111111010111110000000100001001001000000111011111111101011111000000010000100000100000011100000000101010001110011110000010000010000001110000000010101000111001111000001000001000000111011111111111111111000000010000100000100000011101111111111111111100000001000010011100000001110111111101101111110000000100001001110000000111011111110110111111000000010000000010100000011101111111101100111110001110000000001010000001110111111110110011111000111000001000001000000111000000011110010011000111100000100000100000011100000001111001001100011110000010000010000001110000000011010000110000000100001000001000000111000000001101000011000000010000000010100000011100000001100100001010011110000000001010000001110000000110010000101001111000001001110000000111011111111101011110000100010000100111000000011101111111110101111000010001000000001010000001110000000100101000101001111000000000101000000111000000010010100010100111100000100000100000011101111111111010111010011110000010000010000001110111111111101011101001111000001000001000000111000000001001010010000000010000100000100000011100000000100101001000000001000010000010000001110111111111111111101000111000001000001000000111011111111111111110100011100000000010100000011100000000000000001000010001000000001010000001110000000000000000100001000100001000001000000111000000010000000010000000010000100000100000011100000001000000001000000001000010000010000001110111111111101011101001111000001000001000000111011111111110101110100111100000000010100000011100000001011110001010011110000000001010000001110000000101111000101001111000001000001000000111000000011001000010000000010000100000100000011100000001100100001000000001000010010010000001110000000000000000100001000100001001001000000111000000000000000010000100010000100100100000011101111111110101111000010001000010010010000001110111111111010111100001000100001001001000000111000000001010100010000100010000100100100000011100000000101010001000010001000010000010000001110111111111101011100001000100001000001000000111011111111110101110000100010000000010100000011100000001110010001010011110000000001010000001110000000111001000101001111000001001110000000111000000001010100010000000010000100111000000011100000000101010001000000001000010010010000001110111111111111111100001111000001001001000000111011111111111111110000111100000100100100000011100000000000000001010001110000010010010000001110000000000000000101000111000000001001000000111011111111101011110100100010000000100100000011101111111110101111010010001000010010010000001110000000000000000101001111000001001001000000111000000000000000010100111100000100000100000011101111111001101111000000001000010000010000001110111111100110111100000000100000000101000000111000000010111100010000000010000000010100000011100000001011110001000000001000000001010000001110111111110000111101001111000000000101000000111011111111000011110100111100000100000100000011100000000000101001010010001000010000010000001110000000000010100101001000100000000101000000111000000010000000010000000010000000010100000011100000001000000001000000001000000001100000001110111111111111111101001111000000000110000000111011111111111111110100111100000100100100000011101111111001101111010001110000010010010000001110111111100110111101000111000001000001000000111000000011100100010000000010000100000100000011100000001110010001000000001000010010010000001110000000100000000100000000100001001001000000111000000010000000010000000010000000010100000011100000000000000001000000001000000001010000001110000000000000000100000000100001001110000000111011111111111111110100011100000100111000000011101111111111111111010001110000010010010000001110111111001101111111001111000001001001000000111011111100110111111100111100000100111000000011101111111100111011100000001000010011100000001110111111110011101110000000100001000001000000111000000010000101011000100010000100000100000011100000001000010101100010001000000001010000001110000000000000000111001111000000000101000000111000000000000000011100111100000100000100000011100000000000000001100001110000010000010000001110000000000000000110000111000001000001000000111000000010000000011000100010000100000100000011100000001000000001100010001000000010010000001110111111011101011110001011000000001001000000111011111101110101111000101100000000110100000011100000000100101001110011110000000011010000001110000000010010100111001111000001001110000000111011111111110101111000000010000100111000000011101111111111010111100000001000000001010000001110000000111001000111000111000000000101000000111000000011100100011100011100000100000100000011100000000110100001100010001000010000010000001110000000011010000110001000100000000101000000111000000011001000011000000010000000010100000011100000001100100001100000001000010011100000001110000000000000000111001111000001001110000000111000000000000000011100111100000100000100000011101111110010001111100000001000010000010000001110111111001000111110000000100001001001000000111000000010101101011000111100000100100100000011100000001010110101100011110000010000010000001110111111111011001110000000100001000001000000111011111111101100111000000010000000010100000011100000001000101001100010001000000001010000001110000000100010100110001000100001001001000000111011111111111111111100111100000100100100000011101111111111111111110011110000010000010000001110111111101101111111001111000001000001000000111011111110110111111100111100000000010100000011101111110100001111100010001000000001010000001110111111010000111110001000100001000001000000111000000010001010011000000010000100000100000011100000001000101001100000001000010010010000001110000000000000000111001111000001001001000000111000000000000000011100111100000000010100000011100000000000000001100010001000000001010000001110000000000000000110001000100001000001000000111000000010000000011000100010000100000100000011100000001000000001100010001000010010010000001110111111011010111110001000100001001001000000111011111101101011111000100010000100000100000011100000001001010001110011110000010000010000001110000000100101000111001111000000000101000000111000000010000000011000100010000000010100000011100000001000000001100010001000010000010000001110111111111101011111001111000001000001000000111011111111110101111100111100000100100100000011100000000000101001110001110000010010010000001110000000000010100111000111000001001110000000111000000010000000011000000010000100111000000011100000001000000001100000001000010000010000001110111111111101011111001111000001000001000000111011111111110101111100111100000100100100000011100000001110010001100010001000010010010000001110000000111001000110001000100001001110000000111011111110011011110000100010000100111000000011101111111001101111000010001000000001010000001110000000100010100101001111000000000101000000111000000010001010010100111100000000010100000011101111111111010111000000001000000001010000001110111111111101011100000000100001001110000000111000000000001010010000000010000100111000000011100000000000101001000000001000010000010000001110111111111010111100001000100001000001000000111011111111101011110000100010000100000100000011100000000000000001000000001000010000010000001110000000000000000100000000100001000001000000111000000010010100010000000010000100000100000011100000001001010001000000001000010000010000001110111111111101011100001000100001000001000000111011111111110101110000100010000000110100000011100000000111110001000011110000000011010000001110000000011111000100001111000000000101000000111000000000101000010000000010000000010100000011100000000010100001000000001000010000010000001110111111011101011101001111000001000001000000111011111101110101110100111100000100000100000011100000000001010001010011110000010000010000001110000000000101000101001111000001001001000000111011111110011011110000100010000100100100000011101111111001101111000010001000010010010000001110000000111001000100000111000001001001000000111000000011100100010000011100000100100100000011100000000000000001000000001000010010010000001110000000000000000100000000100000000101000000111000000010111100010000000010000000010100000011100000001011110001000000001000010000010000001110111111101101111101001111000001000001000000111011111110110111110100111100000100000100000011101111110110101111000010001000010000010000001110111111011010111100001000100000000101000000111000000010010100010000101100000000010100000011100000001001010001000010110000010010010000001110000000000000000100001000100001001001000000111000000000000000010000100010000100100100000011101111111110101111010011110000010010010000001110111111111010111101001111000001001001000000111000000001010100010000100010000100100100000011100000000101010001000010001000000001010000001110000000000000000100001000100000000101000000111000000000000000010000100010000000010100000011101111110110101111000000001000000001010000001110111111011010111100000000100001001110000000111000000010010100010000100010000100111000000011100000001001010001000010001000000001010000001110111111101101111101001111000000000101000000111011111110110111110100111100000100100100000011100000001011110001010011110000010010010000001110000000101111000101001111000001000001000000111011111110110101110000100010000100000100000011101111111011010111000010001000000001010000001110000000100101000101001111000000000101000000111000000010010100010100111100000100100100000011101111111011011111000000001000010010010000001110111111101101111100000000100001001001000000111000000000000000010100111100000100100100000011100000000000000001010011110000010010010000001110111111010000111100000000100001001001000000111011111101000011110000000010000000100100000011100000000111110001100010001000000010010000001110000000011111000110001000100001000001000000111000000011001000011000000010000100000100000011100000001100100001100000001000010011100000001110000000000000000111001000100001001110000000111000000000000000011100100010000100000100000011101111111011011111100000001000010000010000001110111111101101111110000000100001001001000000111000000011001000011100100010000100100100000011100000001100100001110010001000010010010000001110000000000000000111001000100001001001000000111000000000000000011100100010000100000100000011100000000000000001110011110000010000010000001110000000000000000111001111000000000101000000111000000000000000011000100010000000010100000011100000000000000001100010001000010000010000001110111111000011011111001111000001000001000000111011111100001101111100111100000100100100000 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111T111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 bladeRF-2024.05/hdl/fpga/platforms/bladerf/signaltap/tcxopps.stp000066400000000000000000022173401457144405000245060ustar00rootroot00000000000000 'nios_system:U_nios_system|vctcxo_tamer:vctcxo_tamer_0|mm_irq' == rising edge 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 bladeRF-2024.05/hdl/fpga/platforms/bladerf/software/000077500000000000000000000000001457144405000221155ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/platforms/bladerf/software/bladeRF_nios/000077500000000000000000000000001457144405000244445ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/platforms/bladerf/software/bladeRF_nios/.cproject000066400000000000000000001106311457144405000262600ustar00rootroot00000000000000 make mem_init_install true false false make mem_init_generate true false false make help true false false bladeRF-2024.05/hdl/fpga/platforms/bladerf/software/bladeRF_nios/.project000066400000000000000000000055421457144405000261210ustar00rootroot00000000000000 bladeRF_nios com.altera.sbtgui.project.makefileBuilder com.altera.sbtgui.project.makefileBuilder org.eclipse.cdt.managedbuilder.core.genmakebuilder clean,full,incremental, ?name? org.eclipse.cdt.make.core.append_environment true org.eclipse.cdt.make.core.autoBuildTarget all org.eclipse.cdt.make.core.buildArguments org.eclipse.cdt.make.core.buildCommand make org.eclipse.cdt.make.core.buildLocation ${workspace_loc://bladeRF_nios} org.eclipse.cdt.make.core.cleanBuildTarget clean org.eclipse.cdt.make.core.contents org.eclipse.cdt.make.core.activeConfigSettings org.eclipse.cdt.make.core.enableAutoBuild false org.eclipse.cdt.make.core.enableCleanBuild true org.eclipse.cdt.make.core.enableFullBuild true org.eclipse.cdt.make.core.fullBuildTarget all org.eclipse.cdt.make.core.stopOnError true org.eclipse.cdt.make.core.useDefaultBuildCmd true org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder full,incremental, org.eclipse.cdt.core.cnature org.eclipse.cdt.managedbuilder.core.managedBuildNature org.eclipse.cdt.managedbuilder.core.ScannerConfigNature org.eclipse.cdt.core.ccnature com.altera.sbtgui.project.SBTGUINature com.altera.sbtgui.project.SBTGUIAppNature com.altera.sbtgui.project.SBTGUIManagedNature bladeRF-2024.05/hdl/fpga/platforms/bladerf/software/bladeRF_nios/.settings/000077500000000000000000000000001457144405000263625ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/platforms/bladerf/software/bladeRF_nios/.settings/language.settings.xml000066400000000000000000000020731457144405000325300ustar00rootroot00000000000000 bladeRF-2024.05/hdl/fpga/platforms/bladerf/software/bladeRF_nios/Makefile000066400000000000000000000024651457144405000261130ustar00rootroot00000000000000#------------------------------------------------------------------------------ # VARIABLES TO BE DEFINED BY PLATFORM MAKEFILE #------------------------------------------------------------------------------ FPGA_COMMON_DIR := ../../../../../../fpga_common LIBBLADERF_DIR := ../../../../../../host/libraries/libbladeRF BLADERF_COMMON_DIR := ../../../common/bladerf/software/bladeRF_nios HOST_COMMON_DIR := ../../../../../../host/common FIRMWARE_COMMON_DIR := ../../../../../../firmware_common QUARTUS_WORKDIR := ../../../../../quartus/${WORKDIR} NIOS_BUILD_OUTDIR := $(QUARTUS_WORKDIR)/bladeRF_nios MEM_INIT_DIR := $(NIOS_BUILD_OUTDIR)/mem_init BSP_BUILD_OUTDIR := $(QUARTUS_WORKDIR)/bladeRF_nios_bsp QUARTUS_OUTDIR := $(QUARTUS_WORKDIR)/output_files ALT_INCLUDE_DIRS += ./src C_SRCS += ./src/bladeRF_nios.c C_SRCS += $(FPGA_COMMON_DIR)/src/lms.c C_SRCS += $(FPGA_COMMON_DIR)/src/band_select.c C_SRCS += $(BLADERF_COMMON_DIR)/src/pkt_retune.c CFLAGS += -DBOARD_BLADERF #------------------------------------------------------------------------------ # INCLUDE THE COMMON MAKEFILE #------------------------------------------------------------------------------ include $(BLADERF_COMMON_DIR)/Makefile bladeRF-2024.05/hdl/fpga/platforms/bladerf/software/bladeRF_nios/pcsim.mk000066400000000000000000000012721457144405000261120ustar00rootroot00000000000000#------------------------------------------------------------------------------ # VARIABLES TO BE DEFINED BY PLATFORM MAKEFILE #------------------------------------------------------------------------------ FPGA_COMMON_DIR := ../../../../../../fpga_common BLADERF_COMMON_DIR := ../../../common/bladerf/software/bladeRF_nios QUARTUS_WORKDIR := ../../../../../quartus/work/bladerf NIOS_BUILD_OUTDIR := $(QUARTUS_WORKDIR)/bladeRF_nios #------------------------------------------------------------------------------ # INCLUDE THE COMMON MAKEFILE #------------------------------------------------------------------------------ include $(BLADERF_COMMON_DIR)/pcsim.mk bladeRF-2024.05/hdl/fpga/platforms/bladerf/software/bladeRF_nios/src/000077500000000000000000000000001457144405000252335ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/platforms/bladerf/software/bladeRF_nios/src/bladeRF_nios.c000066400000000000000000000235561457144405000277410ustar00rootroot00000000000000/* This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ /* Define this to run this code on a PC instead of the NIOS II */ //#define BLADERF_NULL_HARDWARE /* Will send debug alt_printf info to JTAG console while running on NIOS. * This can slow performance and cause timing issues... be careful. */ //#define BLADERF_NIOS_DEBUG #include #include #include #include #include "devices.h" #include "pkt_handler.h" #include "pkt_8x8.h" #include "pkt_8x16.h" #include "pkt_8x32.h" #include "pkt_8x64.h" #include "pkt_32x32.h" #include "pkt_retune.h" #include "pkt_legacy.h" #include "debug.h" #ifdef BLADERF_NIOS_PC_SIMULATION extern bool run_nios; # define HAVE_REQUEST() ({ \ have_request = !have_request; \ if (have_request) { \ command_uart_read_request( (uint8_t*) pkt.req); \ } \ have_request; \ }) /* We need to reset the response buffer to known values so we can * compare against expected test case responses */ # define RESET_RESPONSE_BUF #else # define run_nios true # define HAVE_REQUEST() (pkt.ready == true) #endif #ifdef RESET_RESPONSE_BUF # undef RESET_RESPONSE_BUF # define RESET_RESPONSE_BUF() do { \ memset(pkt.resp, 0xff, NIOS_PKT_LEN); \ } while (0) #else # define RESET_RESPONSE_BUF() do {} while (0) #endif /* When adding packet handlers here, you must also ensure that you update * the bladeRF/hdl/fpga/ip/nuand/command_uart/vhdl/command_uart.vhd * to include the magic header byte value in the `magics` array. */ static const struct pkt_handler pkt_handlers[] = { PKT_RETUNE, PKT_8x8, PKT_8x16, PKT_8x32, PKT_8x64, PKT_32x32, PKT_LEGACY, }; /* A structure that represents a point on a line. Used for calibrating * the VCTCXO */ typedef struct point { int32_t x; // Error counts uint16_t y; // DAC count } point_t; typedef struct line { point_t point[2]; int32_t slope; uint16_t y_intercept; // in DAC counts } line_t; /* State machine for VCTCXO tuning */ typedef enum state { COARSE_TUNE_MIN, COARSE_TUNE_MAX, COARSE_TUNE_DONE, FINE_TUNE, DO_NOTHING } state_t; int main(void) { uint8_t i; /* Pointer to currently active packet handler */ const struct pkt_handler *handler; struct pkt_buf pkt; struct vctcxo_tamer_pkt_buf vctcxo_tamer_pkt; /* Marked volatile to ensure we actually read the byte populated by * the UART ISR */ const volatile uint8_t *magic = &pkt.req[PKT_MAGIC_IDX]; volatile bool have_request = false; // Trim DAC constants const uint16_t trimdac_min = 0x28F5; const uint16_t trimdac_max = 0xF5C3; // Trim DAC calibration line line_t trimdac_cal_line; // VCTCXO Tune State machine state_t tune_state = COARSE_TUNE_MIN; // Set the known/default values of the trim DAC cal line trimdac_cal_line.point[0].x = 0; trimdac_cal_line.point[0].y = trimdac_min; trimdac_cal_line.point[1].x = 0; trimdac_cal_line.point[1].y = trimdac_max; trimdac_cal_line.slope = 0; trimdac_cal_line.y_intercept = 0; /* Sanity check */ ASSERT(PKT_MAGIC_IDX == 0); memset(&pkt, 0, sizeof(pkt)); pkt.ready = false; bladerf_nios_init(&pkt, &vctcxo_tamer_pkt); /* Initialize packet handlers */ for (i = 0; i < ARRAY_SIZE(pkt_handlers); i++) { if (pkt_handlers[i].init != NULL) { pkt_handlers[i].init(); } } while (run_nios) { have_request = HAVE_REQUEST(); /* We have a command in the UART */ if (have_request) { pkt.ready = false; handler = NULL; /* Determine which packet handler should receive this message */ for (i = 0; i < ARRAY_SIZE(pkt_handlers); i++) { if (pkt_handlers[i].magic == *magic) { handler = &pkt_handlers[i]; } } if (handler == NULL) { /* We somehow got out of sync. Throw away request data until * we hit a magic value */ DBG("Got invalid magic value: 0x%x\n", pkt.req[PKT_MAGIC_IDX]); continue; } print_bytes("Request data:", pkt.req, NIOS_PKT_LEN); /* If building with RESET_RESPONSE_BUF defined, reset response buffer * contents to ensure unused values are known values. */ RESET_RESPONSE_BUF(); /* Process data and execute requested actions */ handler->exec(&pkt); /* Write response to host */ command_uart_write_response(pkt.resp); } else { /* Temporarily putting the VCTCXO Calibration stuff here. */ if( vctcxo_tamer_pkt.ready ) { vctcxo_tamer_pkt.ready = false; switch(tune_state) { case COARSE_TUNE_MIN: /* Tune to the minimum DAC value */ vctcxo_trim_dac_write( 0x08, trimdac_min ); /* State to enter upon the next interrupt */ tune_state = COARSE_TUNE_MAX; break; case COARSE_TUNE_MAX: /* We have the error from the minimum DAC setting, store it * as the 'x' coordinate for the first point */ trimdac_cal_line.point[0].x = vctcxo_tamer_pkt.pps_1s_error; /* Tune to the maximum DAC value */ vctcxo_trim_dac_write( 0x08, trimdac_max ); /* State to enter upon the next interrupt */ tune_state = COARSE_TUNE_DONE; break; case COARSE_TUNE_DONE: /* We have the error from the maximum DAC setting, store it * as the 'x' coordinate for the second point */ trimdac_cal_line.point[1].x = vctcxo_tamer_pkt.pps_1s_error; /* We now have two points, so we can calculate the equation * for a line plotted with DAC counts on the Y axis and * error on the X axis. We want a PPM of zero, which ideally * corresponds to the y-intercept of the line. */ trimdac_cal_line.slope = ( (trimdac_cal_line.point[1].y - trimdac_cal_line.point[0].y) / (trimdac_cal_line.point[1].x - trimdac_cal_line.point[0].x) ); trimdac_cal_line.y_intercept = ( trimdac_cal_line.point[0].y - (trimdac_cal_line.slope * trimdac_cal_line.point[0].x) ); /* Set the trim DAC count to the y-intercept */ vctcxo_trim_dac_write( 0x08, trimdac_cal_line.y_intercept ); /* State to enter upon the next interrupt */ tune_state = FINE_TUNE; break; case FINE_TUNE: /* We should be extremely close to a perfectly tuned * VCTCXO, but some minor adjustments need to be made */ /* Check the magnitude of the errors starting with the * one second count. If an error is greater than the maxium * tolerated error, adjust the trim DAC by the error (Hz) * multiplied by the slope (in counts/Hz) and scale the * result by the precision interval (e.g. 1s, 10s, 100s). */ if( vctcxo_tamer_pkt.pps_1s_error_flag ) { vctcxo_trim_dac_write( 0x08, (vctcxo_trim_dac_value - ((vctcxo_tamer_pkt.pps_1s_error * trimdac_cal_line.slope)/1)) ); } else if( vctcxo_tamer_pkt.pps_10s_error_flag ) { vctcxo_trim_dac_write( 0x08, (vctcxo_trim_dac_value - ((vctcxo_tamer_pkt.pps_10s_error * trimdac_cal_line.slope)/10)) ); } else if( vctcxo_tamer_pkt.pps_100s_error_flag ) { vctcxo_trim_dac_write( 0x08, (vctcxo_trim_dac_value - ((vctcxo_tamer_pkt.pps_100s_error * trimdac_cal_line.slope)/100)) ); } break; default: break; } /* switch */ /* Take PPS counters out of reset */ vctcxo_tamer_reset_counters( false ); /* Enable interrupts */ vctcxo_tamer_enable_isr( true ); } /* VCTCXO Tamer interrupt */ for (i = 0; i < ARRAY_SIZE(pkt_handlers); i++) { if (pkt_handlers[i].do_work != NULL) { pkt_handlers[i].do_work(); } } } } return 0; } bladeRF-2024.05/hdl/fpga/platforms/bladerf/software/bladeRF_nios/src/fpga_version.h000066400000000000000000000010251457144405000300640ustar00rootroot00000000000000/* This file defines the FPGA version number. * In the future, this could/should moved to a QSYS port */ #ifndef BLADERF_FPGA_VERSION_H_ #define BLADERF_FPGA_VERSION_H_ #include #define FPGA_VERSION_ID 0x7777 #define FPGA_VERSION_MAJOR 0 #define FPGA_VERSION_MINOR 14 #define FPGA_VERSION_PATCH 0 #define FPGA_VERSION ((uint32_t)( FPGA_VERSION_MAJOR | \ (FPGA_VERSION_MINOR << 8) | \ (FPGA_VERSION_PATCH << 16) ) ) #endif bladeRF-2024.05/hdl/fpga/platforms/bladerf/vhdl/000077500000000000000000000000001457144405000212205ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/platforms/bladerf/vhdl/bladerf-adsb.vhd000066400000000000000000000671311457144405000242410ustar00rootroot00000000000000-- Copyright (c) 2013 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; use ieee.math_real.all ; use ieee.math_complex.all ; library altera_mf ; use altera_mf.altera_mf_components.all ; library work ; use work.bladerf_p.all; use work.fifo_readwrite_p.all; use work.adsb_decoder_p.all ; architecture adsb_bladerf of bladerf is attribute noprune : boolean ; attribute keep : boolean ; alias sys_rst is fx3_ctl(7) ; alias tx_clock is c4_tx_clock ; alias rx_clock is lms_rx_clock_out ; constant NUM_MIMO_STREAMS : natural := 1; -- Can be set from libbladeRF using bladerf_set_rx_mux() type rx_mux_mode_t is (RX_MUX_NORMAL, RX_MUX_12BIT_COUNTER, RX_MUX_32BIT_COUNTER, RX_MUX_ENTROPY, RX_MUX_DIGITAL_LOOPBACK) ; signal rx_mux_sel : unsigned(2 downto 0) ; signal rx_mux_mode : rx_mux_mode_t ; signal \80MHz\ : std_logic ; signal nios_gpio : nios_gpio_t; signal nios_gpo_slv : std_logic_vector(31 downto 0); signal nios_xb_gpio_in : std_logic_vector(31 downto 0) ; signal nios_xb_gpio_out : std_logic_vector(31 downto 0) ; signal nios_xb_gpio_dir : std_logic_vector(31 downto 0) ; signal xb_gpio_dir : std_logic_vector(31 downto 0) ; signal correction_rx_phase_gain : std_logic_vector(31 downto 0); signal correction_tx_phase_gain : std_logic_vector(31 downto 0); signal i2c_scl_in : std_logic ; signal i2c_scl_out : std_logic ; signal i2c_scl_oen : std_logic ; signal i2c_sda_in : std_logic ; signal i2c_sda_out : std_logic ; signal i2c_sda_oen : std_logic ; signal rx_sample_fifo : adsb_fifo_t := ADSB_FIFO_T_DEFAULT; signal tx_sample_fifo : tx_fifo_t := TX_FIFO_T_DEFAULT; signal rx_meta_fifo : meta_fifo_rx_t := META_FIFO_RX_T_DEFAULT; signal tx_meta_fifo : meta_fifo_tx_t := META_FIFO_TX_T_DEFAULT; signal rx_loopback_fifo : loopback_fifo_t := LOOPBACK_FIFO_T_DEFAULT; signal sys_rst_sync : std_logic ; signal sys_rst_80M : std_logic ; signal usb_speed : std_logic ; signal usb_speed_rx : std_logic ; signal tx_reset : std_logic ; signal rx_reset : std_logic ; signal pclk_rx_enable : std_logic ; signal rx_enable : std_logic ; signal meta_en_rx : std_logic ; signal meta_en_fx3 : std_logic ; signal tx_timestamp : unsigned(63 downto 0) ; signal rx_timestamp : unsigned(63 downto 0) ; signal timestamp_sync : std_logic ; signal rx_sample_i : signed(15 downto 0) ; signal rx_sample_q : signed(15 downto 0) ; signal rx_sample_valid : std_logic ; signal rx_gen_mode : std_logic ; signal rx_gen_i : signed(15 downto 0) ; signal rx_gen_q : signed(15 downto 0) ; signal rx_gen_valid : std_logic ; signal fx3_gpif_in : std_logic_vector(31 downto 0) ; signal fx3_gpif_out : std_logic_vector(31 downto 0) ; signal fx3_gpif_oe : std_logic ; signal fx3_ctl_in : std_logic_vector(12 downto 0) ; signal fx3_ctl_out : std_logic_vector(12 downto 0) ; signal fx3_ctl_oe : std_logic_vector(12 downto 0) ; signal rx_overflow_led : std_logic ; signal lms_rx_data_reg : signed(11 downto 0) ; signal lms_rx_iq_select_reg : std_logic ; signal rx_mux_i : signed(15 downto 0) ; signal rx_mux_q : signed(15 downto 0) ; signal rx_mux_valid : std_logic ; signal rx_sample_corrected_i : signed(15 downto 0); signal rx_sample_corrected_q : signed(15 downto 0); signal rx_sample_corrected_valid : std_logic; signal led1_blink : std_logic; signal nios_sdo : std_logic; signal nios_sdio : std_logic; signal nios_sclk : std_logic; signal nios_ss_n : std_logic_vector(1 downto 0); signal correction_valid : std_logic; signal correction_rx_phase : signed(15 downto 0);--to_signed(integer(round(real(2**Q_SCALE) * PHASE_OFFSET)),DC_WIDTH); signal correction_rx_gain : signed(15 downto 0);--to_signed(integer(round(real(2**Q_SCALE) * DC_OFFSET_REAL)),DC_WIDTH); signal command_serial_in : std_logic ; signal command_serial_out : std_logic ; constant FPGA_DC_CORRECTION : signed(15 downto 0) := to_signed(integer(0), 16); signal fx3_pclk_pll : std_logic ; signal timestamp_req : std_logic ; signal timestamp_ack : std_logic ; signal fx3_timestamp : unsigned(63 downto 0) ; signal rx_ts_reset : std_logic ; -- ADSB specific signals constant NUM_DECODERS : positive := 8 ; signal adsb_init : std_logic ; signal adsb_power : signed(INPUT_POWER_WIDTH-1 downto 0) ; signal adsb_valid : std_logic ; signal msgs : messages_t(NUM_DECODERS-1 downto 0) ; signal msgs_valid : std_logic_vector(NUM_DECODERS-1 downto 0) ; signal fifo_data : std_logic_vector(127 downto 0) ; signal fifo_valid : std_logic ; begin correction_rx_phase <= signed(correction_rx_phase_gain(31 downto 16)); correction_rx_gain <= signed(correction_rx_phase_gain(15 downto 0)); correction_valid <= '1'; -- Create 80MHz from 38.4MHz coming from the c4_clock source U_pll : entity work.pll port map ( inclk0 => c4_clock, c0 => \80MHz\, locked => open ) ; U_fx3_pll : entity work.fx3_pll port map ( inclk0 => fx3_pclk, c0 => fx3_pclk_pll, locked => open ) ; -- Cross domain synchronizer chains U_usb_speed : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => fx3_pclk_pll, async => nios_gpio.o.usb_speed, sync => usb_speed ) ; U_usb_speed_rx : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => rx_clock, async => nios_gpio.o.usb_speed, sync => usb_speed_rx ) ; generate_mux_sel : for i in rx_mux_sel'range generate U_rx_source : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => rx_clock, async => nios_gpio.o.rx_mux_sel(i), sync => rx_mux_sel(i) ) ; end generate ; U_meta_sync_fx3 : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => fx3_pclk_pll, async => nios_gpio.o.meta_en, sync => meta_en_fx3 ) ; U_meta_sync_rx : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => rx_clock, async => nios_gpio.o.meta_en, sync => meta_en_rx ) ; U_sys_reset_sync : entity work.reset_synchronizer generic map ( INPUT_LEVEL => '1', OUTPUT_LEVEL => '1' ) port map ( clock => fx3_pclk_pll, async => sys_rst, sync => sys_rst_sync ) ; U_80M_reset_sync : entity work.reset_synchronizer generic map ( INPUT_LEVEL => '1', OUTPUT_LEVEL => '1' ) port map ( clock => \80MHz\, async => sys_rst, sync => sys_rst_80M ) ; U_rx_clock_reset : entity work.reset_synchronizer generic map ( INPUT_LEVEL => '1', OUTPUT_LEVEL => '1' ) port map ( clock => rx_clock, async => sys_rst_sync, sync => rx_reset ) ; U_rx_enable_sync : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => rx_reset, clock => rx_clock, async => pclk_rx_enable, sync => rx_enable ) ; -- RX sample fifo rx_sample_fifo.wclock <= rx_clock ; rx_sample_fifo.rclock <= fx3_pclk_pll ; rx_sample_fifo.wdata <= fifo_data ; rx_sample_fifo.wreq <= fifo_valid ; U_rx_sample_fifo : entity work.adsbfifo port map ( aclr => rx_sample_fifo.aclr, data => rx_sample_fifo.wdata, rdclk => rx_sample_fifo.rclock, rdreq => rx_sample_fifo.rreq, wrclk => rx_sample_fifo.wclock, wrreq => rx_sample_fifo.wreq, q => rx_sample_fifo.rdata, rdempty => rx_sample_fifo.rempty, rdfull => rx_sample_fifo.rfull, rdusedw => rx_sample_fifo.rused, wrempty => rx_sample_fifo.wempty, wrfull => rx_sample_fifo.wfull, wrusedw => rx_sample_fifo.wused ); -- RX meta fifo rx_meta_fifo.aclr <= rx_reset ; rx_meta_fifo.wclock <= rx_clock ; rx_meta_fifo.rclock <= fx3_pclk_pll ; U_rx_meta_fifo : entity work.rx_meta_fifo generic map ( LPM_NUMWORDS => META_FIFO_RX_LENGTH ) port map ( aclr => rx_meta_fifo.aclr, data => rx_meta_fifo.wdata, rdclk => rx_meta_fifo.rclock, rdreq => rx_meta_fifo.rreq, wrclk => rx_meta_fifo.wclock, wrreq => rx_meta_fifo.wreq, q => rx_meta_fifo.rdata, rdempty => rx_meta_fifo.rempty, rdfull => rx_meta_fifo.rfull, rdusedw => rx_meta_fifo.rused, wrempty => rx_meta_fifo.wempty, wrfull => rx_meta_fifo.wfull, wrusedw => rx_meta_fifo.wused ); -- FX3 GPIF U_fx3_gpif : entity work.fx3_gpif port map ( pclk => fx3_pclk_pll, reset => sys_rst_sync, usb_speed => usb_speed, meta_enable => meta_en_fx3, rx_enable => pclk_rx_enable, tx_enable => open, gpif_in => fx3_gpif_in, gpif_out => fx3_gpif_out, gpif_oe => fx3_gpif_oe, ctl_in => fx3_ctl_in, ctl_out => fx3_ctl_out, ctl_oe => fx3_ctl_oe, tx_fifo_write => open, tx_fifo_full => '0', tx_fifo_empty => '0', tx_fifo_usedw => "000000000000", tx_fifo_data => open, tx_timestamp => fx3_timestamp, tx_meta_fifo_write => open, tx_meta_fifo_full => '0', tx_meta_fifo_empty => '0', tx_meta_fifo_usedw => "000000000000", tx_meta_fifo_data => open, rx_fifo_read => rx_sample_fifo.rreq, rx_fifo_full => rx_sample_fifo.rfull, rx_fifo_empty => rx_sample_fifo.rempty, rx_fifo_usedw => rx_sample_fifo.rused, rx_fifo_data => rx_sample_fifo.rdata, rx_meta_fifo_read => rx_meta_fifo.rreq, rx_meta_fifo_full => rx_meta_fifo.rfull, rx_meta_fifo_empty => rx_meta_fifo.rempty, rx_meta_fifo_usedr => rx_meta_fifo.rused, rx_meta_fifo_data => rx_meta_fifo.rdata ) ; -- -- Sample bridges -- U_fifo_writer : entity work.fifo_writer -- port map ( -- clock => rx_clock, -- reset => rx_reset, -- enable => rx_enable, -- -- usb_speed => usb_speed_rx, -- meta_en => meta_en_rx, -- timestamp => rx_timestamp, -- -- fifo_clear => rx_sample_fifo.aclr, -- fifo_full => rx_sample_fifo.wfull, -- fifo_usedw => rx_sample_fifo.wused, -- fifo_data => open, --rx_sample_fifo.wdata, -- fifo_write => open, --rx_sample_fifo.wreq, -- -- meta_fifo_full => rx_meta_fifo.wfull, -- meta_fifo_usedw => rx_meta_fifo.wused, -- meta_fifo_data => rx_meta_fifo.wdata, -- meta_fifo_write => rx_meta_fifo.wreq, -- -- in_i => rx_sample_corrected_i, -- in_q => rx_sample_corrected_q, -- in_valid => rx_sample_corrected_valid, -- -- overflow_led => rx_overflow_led, -- overflow_count => rx_overflow_count, -- overflow_duration => x"ffff" -- ) ; U_rx_iq_correction : entity work.iq_correction(rx) generic map( INPUT_WIDTH => rx_sample_corrected_i'length ) port map( reset => rx_reset, clock => rx_clock, in_real => resize(rx_mux_i,16), in_imag => resize(rx_mux_q,16), in_valid => rx_mux_valid, out_real => rx_sample_corrected_i, out_imag => rx_sample_corrected_q, out_valid => rx_sample_corrected_valid, dc_real => FPGA_DC_CORRECTION, dc_imag => FPGA_DC_CORRECTION, gain => correction_rx_gain, phase => correction_rx_phase, correction_valid => correction_valid ); -- LMS6002D IQ interface rx_sample_i(15 downto 12) <= (others => rx_sample_i(11)) ; rx_sample_q(15 downto 12) <= (others => rx_sample_q(11)) ; U_lms6002d : entity work.lms6002d port map ( rx_clock => rx_clock, rx_reset => rx_reset, rx_enable => rx_enable, rx_lms_data => lms_rx_data_reg, rx_lms_iq_sel => lms_rx_iq_select_reg, rx_lms_enable => open, rx_sample_i => rx_sample_i(11 downto 0), rx_sample_q => rx_sample_q(11 downto 0), rx_sample_valid => rx_sample_valid, tx_clock => tx_clock, tx_reset => tx_reset, tx_enable => '0', tx_sample_i => (others =>'0'), tx_sample_q => (others =>'0'), tx_sample_valid => '0', tx_lms_data => lms_tx_data, tx_lms_iq_sel => lms_tx_iq_select, tx_lms_enable => open ) ; -- Front end mixing by -Fs/4, filtering and power calculation U_adsb_fe : entity work.adsb_fe port map ( clock => rx_clock, reset => rx_reset, in_i => rx_sample_corrected_i, in_q => rx_sample_corrected_q, in_valid => rx_sample_corrected_valid, out_power => adsb_power, out_valid => adsb_valid ) ; make_init : process(rx_clock, rx_reset) variable downcount : natural range 0 to 5 := 5 ; begin if( rx_reset = '1' ) then adsb_init <= '1' ; downcount := 5 ; elsif( rising_edge(rx_clock) ) then if( downcount > 0 ) then downcount := downcount - 1 ; adsb_init <= '1' ; else adsb_init <= '0' ; end if ; end if ; end process ; -- Message preamble detector and multiple decoders U_adsb_decoder : entity work.adsb_decoder generic map ( NUM_DECODERS => NUM_DECODERS ) port map ( clock => rx_clock, reset => rx_reset, init => adsb_init, in_power => adsb_power, in_valid => adsb_valid, debug_rpl => open, out_messages => msgs, out_valid => msgs_valid ) ; -- Aggregate into a single stream U_message_aggregator : entity work.message_aggregator generic map ( MSGS_PER_TIMEOUT => 128, PACKET_TIMEOUT => 32000000/100, NUM_DECODERS => NUM_DECODERS ) port map ( clock => rx_clock, reset => rx_reset, in_messages => msgs, in_valid => msgs_valid, out_message => fifo_data, out_valid => fifo_valid ) ; U_rx_siggen : entity work.signal_generator port map ( clock => rx_clock, reset => rx_reset, enable => rx_enable, mode => rx_gen_mode, sample_i => rx_gen_i, sample_q => rx_gen_q, sample_valid => rx_gen_valid ) ; rx_mux_mode <= rx_mux_mode_t'val(to_integer(rx_mux_sel)) ; rx_mux : process(rx_reset, rx_clock) begin if( rx_reset = '1' ) then rx_mux_i <= (others =>'0') ; rx_mux_q <= (others =>'0') ; rx_mux_valid <= '0' ; rx_gen_mode <= '0' ; elsif( rising_edge(rx_clock) ) then case rx_mux_mode is when RX_MUX_NORMAL => rx_mux_i <= rx_sample_i ; rx_mux_q <= rx_sample_q ; rx_mux_valid <= rx_sample_valid ; when RX_MUX_12BIT_COUNTER | RX_MUX_32BIT_COUNTER => rx_mux_i <= rx_gen_i ; rx_mux_q <= rx_gen_q ; rx_mux_valid <= rx_gen_valid ; if( rx_mux_mode = RX_MUX_32BIT_COUNTER ) then rx_gen_mode <= '1' ; else rx_gen_mode <= '0' ; end if ; when RX_MUX_ENTROPY => rx_mux_i <= (others => '0'); rx_mux_q <= (others => '0'); rx_mux_valid <= '0'; when others => rx_mux_i <= (others =>'0') ; rx_mux_q <= (others =>'0') ; rx_mux_valid <= '0' ; end case ; end if ; end process ; -- Register the inputs immediately lms_rx_data_reg <= lms_rx_data when rising_edge(rx_clock) ; lms_rx_iq_select_reg <= lms_rx_iq_select when rising_edge(rx_clock) ; -- FX3 GPIF bidirectional signals register_gpif : process(sys_rst_sync, fx3_pclk_pll) begin if( sys_rst_sync = '1' ) then fx3_gpif <= (others =>'Z') ; fx3_gpif_in <= (others =>'0') ; elsif( rising_edge(fx3_pclk_pll) ) then fx3_gpif_in <= fx3_gpif ; if( fx3_gpif_oe = '1' ) then fx3_gpif <= fx3_gpif_out ; else fx3_gpif <= (others =>'Z') ; end if ; end if ; end process ; generate_ctl : for i in fx3_ctl'range generate fx3_ctl(i) <= fx3_ctl_out(i) when fx3_ctl_oe(i) = '1' else 'Z'; end generate ; fx3_ctl_in <= fx3_ctl ; command_serial_in <= fx3_uart_txd when sys_rst_80M = '0' else '1' ; fx3_uart_rxd <= command_serial_out when sys_rst_80M = '0' else 'Z' ; -- NIOS control system for si5338, vctcxo trim and lms control U_nios_system : component nios_system port map ( clk_clk => \80MHz\, reset_reset_n => '1', dac_MISO => nios_sdo, dac_MOSI => nios_sdio, dac_SCLK => nios_sclk, dac_SS_n => nios_ss_n, spi_MISO => lms_sdo, spi_MOSI => lms_sdio, spi_SCLK => lms_sclk, spi_SS_n => lms_sen, gpio_in_port => pack(nios_gpio.i, '0'), gpio_out_port => nios_gpo_slv, xb_gpio_in_port => nios_xb_gpio_in, xb_gpio_out_port => nios_xb_gpio_out, xb_gpio_dir_export => nios_xb_gpio_dir, command_serial_in => command_serial_in, command_serial_out => command_serial_out, correction_tx_phase_gain_export => correction_tx_phase_gain, correction_rx_phase_gain_export => correction_rx_phase_gain, oc_i2c_scl_pad_o => i2c_scl_out, oc_i2c_scl_padoen_o => i2c_scl_oen, oc_i2c_sda_pad_i => i2c_sda_in, oc_i2c_sda_pad_o => i2c_sda_out, oc_i2c_sda_padoen_o => i2c_sda_oen, oc_i2c_arst_i => '0', oc_i2c_scl_pad_i => i2c_scl_in, rx_tamer_ts_sync_in => '0', rx_tamer_ts_sync_out => open, rx_tamer_ts_pps => '0', rx_tamer_ts_clock => rx_clock, rx_tamer_ts_reset => rx_ts_reset, unsigned(rx_tamer_ts_time) => rx_timestamp, tx_tamer_ts_sync_in => '0', tx_tamer_ts_sync_out => open, tx_tamer_ts_pps => '0', tx_tamer_ts_clock => tx_clock, tx_tamer_ts_reset => '1', unsigned(tx_tamer_ts_time) => tx_timestamp, vctcxo_tamer_tune_ref => ref_vctcxo_tune, vctcxo_tamer_vctcxo_clock => c4_clock ) ; -- Unpack the Nios general-purpose outputs into a record nios_gpio.o <= unpack(nios_gpo_slv); -- Readback of Nios general-purpose outputs nios_gpio.i.gpo_readback <= nios_gpio.o; xb_gpio_direction : process(all) begin for i in 0 to 31 loop if (xb_gpio_dir(i) = '1') then nios_xb_gpio_in(i) <= nios_xb_gpio_out(i); if (nios_gpio.o.xb_mode = "10" and i + 1 = 2) then exp_gpio(i+1) <= nios_ss_n(1); elsif (i + 1 /= 1) then exp_gpio(i+1) <= nios_xb_gpio_out(i); end if; else if (i + 1 = 1) then nios_xb_gpio_in(i) <= exp_clock_in; else nios_xb_gpio_in(i) <= exp_gpio(i + 1); exp_gpio(i + 1) <= 'Z'; end if; end if; end loop ; end process ; nios_gpio.i.nios_ss_n <= nios_ss_n; nios_gpio.i.xb_mode2 <= nios_gpio.o.xb_mode; dac_cs_selection : process(all) begin dac_sclk <= nios_sclk ; dac_sdi <= nios_sdio ; nios_sdo <= dac_sdo ; if( nios_gpio.o.xb_mode = "00" ) then xb_gpio_dir <= nios_xb_gpio_dir(31 downto 0); dac_csx <= nios_ss_n(0); elsif( nios_gpio.o.xb_mode = "10" ) then xb_gpio_dir <= nios_xb_gpio_dir(31 downto 0); if (nios_ss_n(1 downto 0) = "10") then -- dac_csx <= '0'; elsif (nios_ss_n(1 downto 0) = "01") then dac_csx <= '1'; else dac_csx <= '1'; end if; else xb_gpio_dir <= nios_xb_gpio_dir(31 downto 0) ; dac_csx <= nios_ss_n(0) ; end if; end process; -- IO for NIOS si_scl <= i2c_scl_out when i2c_scl_oen = '0' else 'Z' ; si_sda <= i2c_sda_out when i2c_sda_oen = '0' else 'Z' ; i2c_scl_in <= si_scl ; i2c_sda_in <= si_sda ; toggle_led1 : process(fx3_pclk_pll) variable count : natural range 0 to 100_000_000 := 100_000_000 ; begin if( rising_edge(fx3_pclk_pll) ) then count := count - 1 ; if( count = 0 ) then count := 100_000_00 ; led1_blink <= not led1_blink; end if ; end if ; end process ; led(1) <= led1_blink when nios_gpio.o.led_mode = '0' else not nios_gpio.o.leds(1); led(2) <= '1' ; led(3) <= rx_overflow_led when nios_gpio.o.led_mode = '0' else not nios_gpio.o.leds(3); lms_reset <= nios_gpio.o.lms_reset; lms_rx_enable <= nios_gpio.o.lms_rx_enable; lms_tx_enable <= nios_gpio.o.lms_tx_enable; lms_tx_v <= nios_gpio.o.lms_tx_v; lms_rx_v <= nios_gpio.o.lms_rx_v; -- CTS and the SPI CSx are tied to the same signal. When we are in reset, allow for SPI accesses fx3_uart_cts <= '1' when sys_rst_sync = '0' else 'Z' ; exp_spi_clock <= nios_sclk when ( nios_ss_n(1 downto 0) = "01" ) else '0' ; exp_spi_mosi <= nios_sdio when ( nios_ss_n(1 downto 0) = "01" ) else '0' ; mini_exp1 <= 'Z'; mini_exp2 <= 'Z'; set_rx_ts_reset : process(rx_clock, rx_reset) begin if( rx_reset = '1' ) then rx_ts_reset <= '1' ; elsif( rising_edge(rx_clock) ) then if( meta_en_rx = '1' ) then rx_ts_reset <= '0' ; else rx_ts_reset <= '1' ; end if ; end if ; end process ; drive_handshake : process(fx3_pclk_pll, sys_rst_sync) begin if( sys_rst_sync = '1' ) then timestamp_req <= '0' ; elsif( rising_edge(fx3_pclk_pll) ) then if( meta_en_fx3 = '0' ) then timestamp_req <= '0' ; else if( timestamp_ack = '0' ) then timestamp_req <= '1' ; elsif( timestamp_ack = '1' ) then timestamp_req <= '0' ; end if ; end if ; end if ; end process ; U_timestamp_handshake : entity work.handshake generic map ( DATA_WIDTH => tx_timestamp'length ) port map ( source_clock => tx_clock, source_reset => tx_reset, source_data => std_logic_vector(tx_timestamp), dest_clock => fx3_pclk_pll, dest_reset => sys_rst_sync, unsigned(dest_data) => fx3_timestamp, dest_req => timestamp_req, dest_ack => timestamp_ack ) ; end architecture ; -- arch bladeRF-2024.05/hdl/fpga/platforms/bladerf/vhdl/bladerf-atsc_tx.vhd000066400000000000000000001024641457144405000247740ustar00rootroot00000000000000-- Copyright (c) 2013 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; use ieee.math_real.all ; use ieee.math_complex.all ; library work; use work.bladerf_p.all; use work.fifo_readwrite_p.all; architecture atsc_tx of bladerf is attribute noprune : boolean ; attribute keep : boolean ; alias sys_rst is fx3_ctl(7) ; alias tx_clock is c4_tx_clock ; alias rx_clock is lms_rx_clock_out ; constant NUM_MIMO_STREAMS : natural := 1; -- Can be set from libbladeRF using bladerf_set_rx_mux() type rx_mux_mode_t is (RX_MUX_NORMAL, RX_MUX_12BIT_COUNTER, RX_MUX_32BIT_COUNTER, RX_MUX_ENTROPY, RX_MUX_DIGITAL_LOOPBACK) ; signal rx_mux_sel : unsigned(2 downto 0) ; signal rx_mux_mode : rx_mux_mode_t ; signal \80MHz\ : std_logic ; signal nios_gpio : nios_gpio_t; signal nios_gpo_slv : std_logic_vector(31 downto 0) := x"0000_00d7"; signal nios_xb_gpio_in : std_logic_vector(31 downto 0) ; signal nios_xb_gpio_out : std_logic_vector(31 downto 0) ; signal nios_xb_gpio_dir : std_logic_vector(31 downto 0) ; signal xb_gpio_dir : std_logic_vector(31 downto 0) ; signal correction_rx_phase_gain : std_logic_vector(31 downto 0); signal correction_tx_phase_gain : std_logic_vector(31 downto 0); signal i2c_scl_in : std_logic ; signal i2c_scl_out : std_logic ; signal i2c_scl_oen : std_logic ; signal i2c_sda_in : std_logic ; signal i2c_sda_out : std_logic ; signal i2c_sda_oen : std_logic ; signal rx_sample_fifo : rx_fifo_t := RX_FIFO_T_DEFAULT; signal tx_sample_fifo : tx_fifo_t := TX_FIFO_T_DEFAULT; signal rx_meta_fifo : meta_fifo_rx_t := META_FIFO_RX_T_DEFAULT; signal tx_meta_fifo : meta_fifo_tx_t := META_FIFO_TX_T_DEFAULT; signal rx_loopback_fifo : loopback_fifo_t := LOOPBACK_FIFO_T_DEFAULT; signal sys_rst_sync : std_logic ; signal sys_rst_80M : std_logic ; signal usb_speed : std_logic ; signal usb_speed_rx : std_logic ; signal usb_speed_tx : std_logic ; signal tx_reset : std_logic ; signal rx_reset : std_logic ; signal pclk_tx_enable : std_logic ; signal pclk_rx_enable : std_logic ; signal tx_enable : std_logic ; signal rx_enable : std_logic ; signal meta_en_tx : std_logic ; signal meta_en_rx : std_logic ; signal meta_en_fx3 : std_logic ; signal tx_timestamp : unsigned(63 downto 0) ; signal timestamp_sync : std_logic ; signal rx_sample_i : signed(15 downto 0) ; signal rx_sample_q : signed(15 downto 0) ; signal rx_sample_valid : std_logic ; signal rx_samples : sample_streams_t(0 to NUM_MIMO_STREAMS-1) := (others => ZERO_SAMPLE); signal rx_gen_mode : std_logic ; signal rx_gen_i : signed(15 downto 0) ; signal rx_gen_q : signed(15 downto 0) ; signal rx_gen_valid : std_logic ; signal tx_sample_raw_i : signed(15 downto 0); signal tx_sample_raw_q : signed(15 downto 0); signal tx_sample_raw_valid : std_logic; signal tx_sample_i : signed(15 downto 0) ; signal tx_sample_q : signed(15 downto 0) ; signal tx_sample_valid : std_logic ; signal fx3_gpif_in : std_logic_vector(31 downto 0) ; signal fx3_gpif_out : std_logic_vector(31 downto 0) ; signal fx3_gpif_oe : std_logic ; signal fx3_ctl_in : std_logic_vector(12 downto 0) ; signal fx3_ctl_out : std_logic_vector(12 downto 0) ; signal fx3_ctl_oe : std_logic_vector(12 downto 0) ; signal tx_underflow_led : std_logic ; signal rx_overflow_led : std_logic ; signal lms_rx_data_reg : signed(11 downto 0) ; signal lms_rx_iq_select_reg : std_logic ; signal rx_mux_i : signed(15 downto 0) ; signal rx_mux_q : signed(15 downto 0) ; signal rx_mux_valid : std_logic ; signal rx_sample_corrected_i : signed(15 downto 0); signal rx_sample_corrected_q : signed(15 downto 0); signal rx_sample_corrected_valid : std_logic; signal led1_blink : std_logic; signal nios_sdo : std_logic; signal nios_sdio : std_logic; signal nios_sclk : std_logic; signal nios_ss_n : std_logic_vector(1 downto 0); signal correction_valid : std_logic; signal correction_tx_phase : signed(15 downto 0);--to_signed(integer(round(real(2**Q_SCALE) * PHASE_OFFSET)),DC_WIDTH); signal correction_tx_gain : signed(15 downto 0);--to_signed(integer(round(real(2**Q_SCALE) * DC_OFFSET_REAL)),DC_WIDTH); signal correction_rx_phase : signed(15 downto 0);--to_signed(integer(round(real(2**Q_SCALE) * PHASE_OFFSET)),DC_WIDTH); signal correction_rx_gain : signed(15 downto 0);--to_signed(integer(round(real(2**Q_SCALE) * DC_OFFSET_REAL)),DC_WIDTH); signal command_serial_in : std_logic ; signal command_serial_out : std_logic ; constant FPGA_DC_CORRECTION : signed(15 downto 0) := to_signed(integer(0), 16); signal fx3_pclk_pll : std_logic ; signal timestamp_req : std_logic ; signal timestamp_ack : std_logic ; signal fx3_timestamp : unsigned(63 downto 0) ; signal rx_ts_reset : std_logic ; signal tx_ts_reset : std_logic ; --atsc signals signal tx_data : std_logic_vector(31 downto 0); signal tx_valid : std_logic; signal tx_request : std_logic; begin correction_tx_phase <= signed(correction_tx_phase_gain(31 downto 16)); correction_tx_gain <= signed(correction_tx_phase_gain(15 downto 0)); correction_rx_phase <= signed(correction_rx_phase_gain(31 downto 16)); correction_rx_gain <= signed(correction_rx_phase_gain(15 downto 0)); correction_valid <= '1'; -- Create 80MHz from 38.4MHz coming from the c4_clock source U_pll : entity work.pll port map ( inclk0 => c4_clock, c0 => \80MHz\, locked => open ) ; U_fx3_pll : entity work.fx3_pll port map ( inclk0 => fx3_pclk, c0 => fx3_pclk_pll, locked => open ) ; -- Cross domain synchronizer chains U_usb_speed : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => fx3_pclk_pll, async => nios_gpio.o.usb_speed, sync => usb_speed ) ; U_usb_speed_rx : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => rx_clock, async => nios_gpio.o.usb_speed, sync => usb_speed_rx ) ; U_usb_speed_tx : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => tx_clock, async => nios_gpio.o.usb_speed, sync => usb_speed_tx ) ; generate_mux_sel : for i in rx_mux_sel'range generate U_rx_source : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => rx_clock, async => nios_gpio.o.rx_mux_sel(i), sync => rx_mux_sel(i) ) ; end generate ; U_meta_sync_fx3 : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => fx3_pclk_pll, async => nios_gpio.o.meta_en, sync => meta_en_fx3 ) ; U_meta_sync_tx : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => tx_clock, async => nios_gpio.o.meta_en, sync => meta_en_tx ) ; U_meta_sync_rx : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => rx_clock, async => nios_gpio.o.meta_en, sync => meta_en_rx ) ; U_sys_reset_sync : entity work.reset_synchronizer generic map ( INPUT_LEVEL => '1', OUTPUT_LEVEL => '1' ) port map ( clock => fx3_pclk_pll, async => sys_rst, sync => sys_rst_sync ) ; U_80M_reset_sync : entity work.reset_synchronizer generic map ( INPUT_LEVEL => '1', OUTPUT_LEVEL => '1' ) port map ( clock => \80MHz\, async => sys_rst, sync => sys_rst_80M ) ; U_tx_reset : entity work.reset_synchronizer generic map ( INPUT_LEVEL => '1', OUTPUT_LEVEL => '1' ) port map ( clock => c4_tx_clock, async => sys_rst_sync, sync => tx_reset ) ; U_rx_clock_reset : entity work.reset_synchronizer generic map ( INPUT_LEVEL => '1', OUTPUT_LEVEL => '1' ) port map ( clock => rx_clock, async => sys_rst_sync, sync => rx_reset ) ; U_rx_enable_sync : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => rx_reset, clock => rx_clock, async => pclk_rx_enable, sync => rx_enable ) ; U_tx_enable_sync : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => tx_reset, clock => tx_clock, async => pclk_tx_enable, sync => tx_enable ) ; -- TX sample fifo tx_sample_fifo.aclr <= tx_reset ; tx_sample_fifo.wclock <= fx3_pclk_pll ; tx_sample_fifo.rclock <= tx_clock ; U_tx_sample_fifo : entity work.tx_fifo generic map ( LPM_NUMWORDS => TX_FIFO_LENGTH ) port map ( aclr => tx_sample_fifo.aclr, data => tx_sample_fifo.wdata, rdclk => tx_sample_fifo.rclock, rdreq => tx_sample_fifo.rreq, wrclk => tx_sample_fifo.wclock, wrreq => tx_sample_fifo.wreq, q => tx_sample_fifo.rdata, rdempty => tx_sample_fifo.rempty, rdfull => tx_sample_fifo.rfull, rdusedw => tx_sample_fifo.rused, wrempty => tx_sample_fifo.wempty, wrfull => tx_sample_fifo.wfull, wrusedw => tx_sample_fifo.wused ); -- TX meta fifo tx_meta_fifo.aclr <= tx_reset ; tx_meta_fifo.wclock <= fx3_pclk_pll ; tx_meta_fifo.rclock <= tx_clock ; U_tx_meta_fifo : entity work.tx_meta_fifo generic map ( LPM_NUMWORDS => META_FIFO_TX_LENGTH ) port map ( aclr => tx_meta_fifo.aclr, data => tx_meta_fifo.wdata, rdclk => tx_meta_fifo.rclock, rdreq => tx_meta_fifo.rreq, wrclk => tx_meta_fifo.wclock, wrreq => tx_meta_fifo.wreq, q => tx_meta_fifo.rdata, rdempty => tx_meta_fifo.rempty, rdfull => tx_meta_fifo.rfull, rdusedw => tx_meta_fifo.rused, wrempty => tx_meta_fifo.wempty, wrfull => tx_meta_fifo.wfull, wrusedw => tx_meta_fifo.wused ); -- RX sample fifo rx_sample_fifo.wclock <= rx_clock ; rx_sample_fifo.rclock <= fx3_pclk_pll ; U_rx_sample_fifo : entity work.rx_fifo generic map ( LPM_NUMWORDS => RX_FIFO_LENGTH ) port map ( aclr => rx_sample_fifo.aclr, data => rx_sample_fifo.wdata, rdclk => rx_sample_fifo.rclock, rdreq => rx_sample_fifo.rreq, wrclk => rx_sample_fifo.wclock, wrreq => rx_sample_fifo.wreq, q => rx_sample_fifo.rdata, rdempty => rx_sample_fifo.rempty, rdfull => rx_sample_fifo.rfull, rdusedw => rx_sample_fifo.rused, wrempty => rx_sample_fifo.wempty, wrfull => rx_sample_fifo.wfull, wrusedw => rx_sample_fifo.wused ); -- RX meta fifo rx_meta_fifo.aclr <= rx_reset ; rx_meta_fifo.wclock <= rx_clock ; rx_meta_fifo.rclock <= fx3_pclk_pll ; U_rx_meta_fifo : entity work.rx_meta_fifo generic map ( LPM_NUMWORDS => META_FIFO_RX_LENGTH ) port map ( aclr => rx_meta_fifo.aclr, data => rx_meta_fifo.wdata, rdclk => rx_meta_fifo.rclock, rdreq => rx_meta_fifo.rreq, wrclk => rx_meta_fifo.wclock, wrreq => rx_meta_fifo.wreq, q => rx_meta_fifo.rdata, rdempty => rx_meta_fifo.rempty, rdfull => rx_meta_fifo.rfull, rdusedw => rx_meta_fifo.rused, wrempty => rx_meta_fifo.wempty, wrfull => rx_meta_fifo.wfull, wrusedw => rx_meta_fifo.wused ); -- FX3 GPIF U_fx3_gpif : entity work.fx3_gpif port map ( pclk => fx3_pclk_pll, reset => sys_rst_sync, usb_speed => usb_speed, meta_enable => meta_en_fx3, rx_enable => pclk_rx_enable, tx_enable => pclk_tx_enable, gpif_in => fx3_gpif_in, gpif_out => fx3_gpif_out, gpif_oe => fx3_gpif_oe, ctl_in => fx3_ctl_in, ctl_out => fx3_ctl_out, ctl_oe => fx3_ctl_oe, tx_fifo_write => tx_sample_fifo.wreq, tx_fifo_full => tx_sample_fifo.wfull, tx_fifo_empty => tx_sample_fifo.wempty, tx_fifo_usedw => tx_sample_fifo.wused, tx_fifo_data => tx_sample_fifo.wdata, tx_timestamp => fx3_timestamp, tx_meta_fifo_write => tx_meta_fifo.wreq, tx_meta_fifo_full => tx_meta_fifo.wfull, tx_meta_fifo_empty => tx_meta_fifo.wempty, tx_meta_fifo_usedw => tx_meta_fifo.wused, tx_meta_fifo_data => tx_meta_fifo.wdata, rx_fifo_read => rx_sample_fifo.rreq, rx_fifo_full => rx_sample_fifo.rfull, rx_fifo_empty => rx_sample_fifo.rempty, rx_fifo_usedw => rx_sample_fifo.rused, rx_fifo_data => rx_sample_fifo.rdata, rx_meta_fifo_read => rx_meta_fifo.rreq, rx_meta_fifo_full => rx_meta_fifo.rfull, rx_meta_fifo_empty => rx_meta_fifo.rempty, rx_meta_fifo_usedr => rx_meta_fifo.rused, rx_meta_fifo_data => rx_meta_fifo.rdata ) ; -- Sample bridges U_fifo_writer : entity work.fifo_writer generic map ( NUM_STREAMS => NUM_MIMO_STREAMS, FIFO_USEDW_WIDTH => rx_sample_fifo.wused'length, FIFO_DATA_WIDTH => rx_sample_fifo.wdata'length, META_FIFO_USEDW_WIDTH => rx_meta_fifo.wused'length, META_FIFO_DATA_WIDTH => rx_meta_fifo.wdata'length ) port map ( clock => rx_clock, reset => rx_reset, enable => rx_enable, usb_speed => usb_speed_rx, meta_en => '0', timestamp => (others => '0'), mini_exp => mini_exp2 & mini_exp1, fifo_clear => rx_sample_fifo.aclr, fifo_full => rx_sample_fifo.wfull, fifo_usedw => rx_sample_fifo.wused, fifo_data => rx_sample_fifo.wdata, fifo_write => rx_sample_fifo.wreq, meta_fifo_full => '0', meta_fifo_usedw => (others => '0'), meta_fifo_data => open, meta_fifo_write => open, in_sample_controls => (others => SAMPLE_CONTROL_ENABLE), in_samples => rx_samples, overflow_led => rx_overflow_led, overflow_count => open, overflow_duration => x"ffff" ) ; rx_samples(0).data_i <= rx_sample_corrected_i; rx_samples(0).data_q <= rx_sample_corrected_q; rx_samples(0).data_v <= rx_sample_corrected_valid; U_rx_iq_correction : entity work.iq_correction(rx) generic map( INPUT_WIDTH => rx_sample_corrected_i'length ) port map( reset => rx_reset, clock => rx_clock, in_real => resize(rx_mux_i,16), in_imag => resize(rx_mux_q,16), in_valid => rx_mux_valid, out_real => rx_sample_corrected_i, out_imag => rx_sample_corrected_q, out_valid => rx_sample_corrected_valid, dc_real => FPGA_DC_CORRECTION, dc_imag => FPGA_DC_CORRECTION, gain => correction_rx_gain, phase => correction_rx_phase, correction_valid => correction_valid ); U_fifo_reader : entity work.fifo_reader generic map ( NUM_STREAMS => NUM_MIMO_STREAMS, FIFO_READ_THROTTLE => 1, -- TODO: can this be 0 ? FIFO_USEDW_WIDTH => tx_sample_fifo.rused'length, FIFO_DATA_WIDTH => tx_sample_fifo.rdata'length, META_FIFO_USEDW_WIDTH => tx_meta_fifo.rused'length, META_FIFO_DATA_WIDTH => tx_meta_fifo.rdata'length ) port map ( clock => tx_clock, reset => tx_reset, enable => tx_enable, usb_speed => usb_speed_tx, meta_en => '0', timestamp => (others => '0'), fifo_empty => tx_sample_fifo.rempty, fifo_usedw => tx_sample_fifo.rused, fifo_data => tx_sample_fifo.rdata, fifo_read => open, meta_fifo_empty => '0', meta_fifo_usedw => (others => '0'), meta_fifo_data => (others => '0'), meta_fifo_read => open, in_sample_controls => (others => SAMPLE_CONTROL_ENABLE), out_samples => open, underflow_led => tx_underflow_led, underflow_count => open, underflow_duration => x"ffff" ) ; --delay the valid by one clock from the request tx_valid_register : process(tx_reset, tx_clock) begin if (tx_reset = '1') then tx_valid <= '0'; elsif rising_edge(tx_clock) then tx_valid <= tx_sample_fifo.rreq; end if; end process; U_atsc_transmitter : entity work.atsc_tx(arch) generic map( INPUT_WIDTH => tx_sample_fifo.rdata'length, OUTPUT_WIDTH => tx_sample_i'length ) port map ( reset => tx_reset, clock => tx_clock, tx_enable => tx_enable, data_in => tx_sample_fifo.rdata, data_in_request => tx_sample_fifo.rreq, data_in_valid => tx_valid, sample_out_i => tx_sample_raw_i, sample_out_q => tx_sample_raw_q, sample_out_valid => tx_sample_raw_valid ); U_tx_iq_correction : entity work.iq_correction(tx) generic map ( INPUT_WIDTH => tx_sample_raw_i'length ) port map ( reset => tx_reset, clock => tx_clock, in_real => tx_sample_raw_i, in_imag => tx_sample_raw_q, in_valid => tx_sample_raw_valid, out_real => tx_sample_i, out_imag => tx_sample_q, out_valid => tx_sample_valid, dc_real => FPGA_DC_CORRECTION, dc_imag => FPGA_DC_CORRECTION, gain => correction_tx_gain, phase => correction_tx_phase, correction_valid => correction_valid ); -- LMS6002D IQ interface rx_sample_i(15 downto 12) <= (others => rx_sample_i(11)) ; rx_sample_q(15 downto 12) <= (others => rx_sample_q(11)) ; U_lms6002d : entity work.lms6002d port map ( rx_clock => rx_clock, rx_reset => rx_reset, rx_enable => rx_enable, rx_lms_data => lms_rx_data_reg, rx_lms_iq_sel => lms_rx_iq_select_reg, rx_lms_enable => open, rx_sample_i => rx_sample_i(11 downto 0), rx_sample_q => rx_sample_q(11 downto 0), rx_sample_valid => rx_sample_valid, tx_clock => tx_clock, tx_reset => tx_reset, tx_enable => tx_enable, tx_sample_i => tx_sample_i(11 downto 0), tx_sample_q => tx_sample_q(11 downto 0), tx_sample_valid => tx_sample_valid, tx_lms_data => lms_tx_data, tx_lms_iq_sel => lms_tx_iq_select, tx_lms_enable => open ) ; U_rx_siggen : entity work.signal_generator port map ( clock => rx_clock, reset => rx_reset, enable => rx_enable, mode => rx_gen_mode, sample_i => rx_gen_i, sample_q => rx_gen_q, sample_valid => rx_gen_valid ) ; rx_mux_mode <= rx_mux_mode_t'val(to_integer(rx_mux_sel)) ; rx_mux : process(rx_reset, rx_clock) begin if( rx_reset = '1' ) then rx_mux_i <= (others =>'0') ; rx_mux_q <= (others =>'0') ; rx_mux_valid <= '0' ; rx_gen_mode <= '0' ; elsif( rising_edge(rx_clock) ) then case rx_mux_mode is when RX_MUX_NORMAL => rx_mux_i <= rx_sample_i ; rx_mux_q <= rx_sample_q ; rx_mux_valid <= rx_sample_valid ; when RX_MUX_12BIT_COUNTER | RX_MUX_32BIT_COUNTER => rx_mux_i <= rx_gen_i ; rx_mux_q <= rx_gen_q ; rx_mux_valid <= rx_gen_valid ; if( rx_mux_mode = RX_MUX_32BIT_COUNTER ) then rx_gen_mode <= '1' ; else rx_gen_mode <= '0' ; end if ; when RX_MUX_ENTROPY => rx_mux_i <= (others => '0'); rx_mux_q <= (others => '0'); rx_mux_valid <= '0'; when RX_MUX_DIGITAL_LOOPBACK => rx_mux_i <= tx_sample_raw_i ; rx_mux_q <= tx_sample_raw_q ; rx_mux_valid <= tx_sample_raw_valid ; when others => rx_mux_i <= (others =>'0') ; rx_mux_q <= (others =>'0') ; rx_mux_valid <= '0' ; end case ; end if ; end process ; -- Register the inputs immediately lms_rx_data_reg <= lms_rx_data when rising_edge(rx_clock) ; lms_rx_iq_select_reg <= lms_rx_iq_select when rising_edge(rx_clock) ; -- FX3 GPIF bidirectional signals register_gpif : process(sys_rst_sync, fx3_pclk_pll) begin if( sys_rst_sync = '1' ) then fx3_gpif <= (others =>'Z') ; fx3_gpif_in <= (others =>'0') ; elsif( rising_edge(fx3_pclk_pll) ) then fx3_gpif_in <= fx3_gpif ; if( fx3_gpif_oe = '1' ) then fx3_gpif <= fx3_gpif_out ; else fx3_gpif <= (others =>'Z') ; end if ; end if ; end process ; generate_ctl : for i in fx3_ctl'range generate fx3_ctl(i) <= fx3_ctl_out(i) when fx3_ctl_oe(i) = '1' else 'Z'; end generate ; fx3_ctl_in <= fx3_ctl ; command_serial_in <= fx3_uart_txd when sys_rst_80M = '0' else '1' ; fx3_uart_rxd <= command_serial_out when sys_rst_80M = '0' else 'Z' ; -- NIOS control system for si5338, vctcxo trim and lms control U_nios_system : component nios_system port map ( clk_clk => \80MHz\, reset_reset_n => '1', dac_MISO => nios_sdo, dac_MOSI => nios_sdio, dac_SCLK => nios_sclk, dac_SS_n => nios_ss_n, spi_MISO => lms_sdo, spi_MOSI => lms_sdio, spi_SCLK => lms_sclk, spi_SS_n => lms_sen, gpio_in_port => pack(nios_gpio.i, '0'), gpio_out_port => nios_gpo_slv, xb_gpio_in_port => nios_xb_gpio_in, xb_gpio_out_port => nios_xb_gpio_out, xb_gpio_dir_export => nios_xb_gpio_dir, command_serial_in => command_serial_in, command_serial_out => command_serial_out, correction_tx_phase_gain_export => correction_tx_phase_gain, correction_rx_phase_gain_export => correction_rx_phase_gain, oc_i2c_scl_pad_o => i2c_scl_out, oc_i2c_scl_padoen_o => i2c_scl_oen, oc_i2c_sda_pad_i => i2c_sda_in, oc_i2c_sda_pad_o => i2c_sda_out, oc_i2c_sda_padoen_o => i2c_sda_oen, oc_i2c_arst_i => '0', oc_i2c_scl_pad_i => i2c_scl_in, rx_tamer_ts_sync_in => '0', rx_tamer_ts_sync_out => open, rx_tamer_ts_pps => '0', rx_tamer_ts_clock => rx_clock, rx_tamer_ts_reset => rx_ts_reset, unsigned(rx_tamer_ts_time) => open, tx_tamer_ts_sync_in => '0', tx_tamer_ts_sync_out => open, tx_tamer_ts_pps => '0', tx_tamer_ts_clock => tx_clock, tx_tamer_ts_reset => tx_ts_reset, unsigned(tx_tamer_ts_time) => tx_timestamp, vctcxo_tamer_tune_ref => ref_vctcxo_tune, vctcxo_tamer_vctcxo_clock => c4_clock ) ; -- Unpack the Nios general-purpose outputs into a record nios_gpio.o <= unpack(nios_gpo_slv); -- Readback of Nios general-purpose outputs nios_gpio.i.gpo_readback <= nios_gpio.o; xb_gpio_direction : process(all) begin for i in 0 to 31 loop if (xb_gpio_dir(i) = '1') then nios_xb_gpio_in(i) <= nios_xb_gpio_out(i); if (nios_gpio.o.xb_mode = "10" and i + 1 = 2) then exp_gpio(i+1) <= nios_ss_n(1); elsif (i + 1 /= 1) then exp_gpio(i+1) <= nios_xb_gpio_out(i); end if; else if (i + 1 = 1) then nios_xb_gpio_in(i) <= exp_clock_in; else nios_xb_gpio_in(i) <= exp_gpio(i + 1); exp_gpio(i + 1) <= 'Z'; end if; end if; end loop ; end process; nios_gpio.i.nios_ss_n <= nios_ss_n; nios_gpio.i.xb_mode2 <= nios_gpio.o.xb_mode; dac_cs_selection : process(all) begin dac_sclk <= nios_sclk ; dac_sdi <= nios_sdio ; nios_sdo <= dac_sdo ; if( nios_gpio.o.xb_mode = "00" ) then xb_gpio_dir <= nios_xb_gpio_dir(31 downto 0); dac_csx <= nios_ss_n(0); elsif( nios_gpio.o.xb_mode = "10" ) then xb_gpio_dir <= nios_xb_gpio_dir(31 downto 0); if (nios_ss_n(1 downto 0) = "10") then -- dac_csx <= '0'; elsif (nios_ss_n(1 downto 0) = "01") then dac_csx <= '1'; else dac_csx <= '1'; end if; else xb_gpio_dir <= nios_xb_gpio_dir(31 downto 0) ; dac_csx <= nios_ss_n(0) ; end if; end process; -- IO for NIOS si_scl <= i2c_scl_out when i2c_scl_oen = '0' else 'Z' ; si_sda <= i2c_sda_out when i2c_sda_oen = '0' else 'Z' ; i2c_scl_in <= si_scl ; i2c_sda_in <= si_sda ; toggle_led1 : process(fx3_pclk_pll) variable count : natural range 0 to 100_000_000 := 100_000_000 ; begin if( rising_edge(fx3_pclk_pll) ) then count := count - 1 ; if( count = 0 ) then count := 100_000_00 ; led1_blink <= not led1_blink; end if ; end if ; end process ; led(1) <= led1_blink when nios_gpio.o.led_mode = '0' else not nios_gpio.o.leds(1); led(2) <= tx_underflow_led when nios_gpio.o.led_mode = '0' else not nios_gpio.o.leds(2); led(3) <= rx_overflow_led when nios_gpio.o.led_mode = '0' else not nios_gpio.o.leds(3); lms_reset <= nios_gpio.o.lms_reset; lms_rx_enable <= nios_gpio.o.lms_rx_enable; lms_tx_enable <= nios_gpio.o.lms_tx_enable; lms_tx_v <= nios_gpio.o.lms_tx_v; lms_rx_v <= nios_gpio.o.lms_rx_v; -- CTS and the SPI CSx are tied to the same signal. When we are in reset, allow for SPI accesses fx3_uart_cts <= '1' when sys_rst_sync = '0' else 'Z' ; exp_spi_clock <= nios_sclk when ( nios_ss_n(1 downto 0) = "01" ) else '0' ; exp_spi_mosi <= nios_sdio when ( nios_ss_n(1 downto 0) = "01" ) else '0' ; mini_exp1 <= 'Z'; mini_exp2 <= 'Z'; set_tx_ts_reset : process(tx_clock, tx_reset) begin if( tx_reset = '1' ) then tx_ts_reset <= '1' ; elsif( rising_edge(tx_clock) ) then if( meta_en_tx = '1' ) then tx_ts_reset <= '0' ; else tx_ts_reset <= '1' ; end if ; end if ; end process ; set_rx_ts_reset : process(rx_clock, rx_reset) begin if( rx_reset = '1' ) then rx_ts_reset <= '1' ; elsif( rising_edge(rx_clock) ) then if( meta_en_rx = '1' ) then rx_ts_reset <= '0' ; else rx_ts_reset <= '1' ; end if ; end if ; end process ; drive_handshake : process(fx3_pclk_pll, sys_rst_sync) begin if( sys_rst_sync = '1' ) then timestamp_req <= '0' ; elsif( rising_edge(fx3_pclk_pll) ) then if( meta_en_fx3 = '0' ) then timestamp_req <= '0' ; else if( timestamp_ack = '0' ) then timestamp_req <= '1' ; elsif( timestamp_ack = '1' ) then timestamp_req <= '0' ; end if ; end if ; end if ; end process ; U_timestamp_handshake : entity work.handshake generic map ( DATA_WIDTH => tx_timestamp'length ) port map ( source_clock => tx_clock, source_reset => tx_reset, source_data => std_logic_vector(tx_timestamp), dest_clock => fx3_pclk_pll, dest_reset => sys_rst_sync, unsigned(dest_data) => fx3_timestamp, dest_req => timestamp_req, dest_ack => timestamp_ack ) ; end architecture ; -- arch bladeRF-2024.05/hdl/fpga/platforms/bladerf/vhdl/bladerf-base.vhd000066400000000000000000000046021457144405000242340ustar00rootroot00000000000000-- Copyright (c) 2013 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; architecture base of blader is begin -- This file is the basic skeleton of what the bladeRF FPGA -- should drive for outputs. All of the outputs are defined -- here. -- -- Use this file as a template for new targets. -- VCTCXO DAC dac_sclk <= '1' ; dac_sdi <= '1' ; dac_csx <= '1' ; -- LEDs led <= (others =>'0') ; -- LMS RX Interface lms_rx_enable <= '0' ; lms_rx_v <= (others =>'0') ; -- LMS TX Interface lms_tx_data <= (others =>'0') ; lms_iq_select <= '0' ; lms_tx_v <= (others =>'0') ; -- LMS SPI Interface lms_sclk <= '1' ; lms_sen <= '1' ; lms_sdio <= '0' ; -- LMS Control Interface lms_reset <= '0' ; -- Si5338 I2C Interface si_scl <= '1' ; si_sda <= '1' ; -- FX3 Interface fx3_gpif <= (others =>'Z') ; fx3_ctl <= (others =>'Z') ; fx3_uart_rxd <= '1' ; -- Mini expansion mini_exp1 <= '0' ; mini_exp2 <= '0' ; -- Expansion Interface exp_spi_clock <= '1' ; exp_spi_mosi <= '0' ; exp_gpio <= (others =>'0') ; end architecture ; bladeRF-2024.05/hdl/fpga/platforms/bladerf/vhdl/bladerf-fsk_bridge.vhd000066400000000000000000000024511457144405000254210ustar00rootroot00000000000000-- Copyright (c) 2013 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; use ieee.math_real.all ; use ieee.math_complex.all ; architecture fsk_bridge of bladerf is begin end architecture ; -- arch bladeRF-2024.05/hdl/fpga/platforms/bladerf/vhdl/bladerf-hosted.vhd000066400000000000000000001443331457144405000246160ustar00rootroot00000000000000-- Copyright (c) 2013 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; use ieee.math_real.all ; use ieee.math_complex.all ; library work; use work.bladerf_p.all; use work.fifo_readwrite_p.all; architecture hosted_bladerf of bladerf is attribute noprune : boolean ; attribute keep : boolean ; alias sys_rst is fx3_ctl(7) ; alias tx_clock is c4_tx_clock ; alias rx_clock is lms_rx_clock_out ; constant NUM_MIMO_STREAMS : natural := 1; -- Can be set from libbladeRF using bladerf_set_rx_mux() type rx_mux_mode_t is (RX_MUX_NORMAL, RX_MUX_12BIT_COUNTER, RX_MUX_32BIT_COUNTER, RX_MUX_ENTROPY, RX_MUX_DIGITAL_LOOPBACK) ; signal rx_mux_sel : unsigned(2 downto 0) ; signal rx_mux_mode : rx_mux_mode_t ; signal \80MHz\ : std_logic ; signal nios_gpio : nios_gpio_t; signal nios_gpo_slv : std_logic_vector(31 downto 0); signal nios_xb_gpio_in : std_logic_vector(31 downto 0) ; signal nios_xb_gpio_out : std_logic_vector(31 downto 0) ; signal nios_xb_gpio_dir : std_logic_vector(31 downto 0) ; signal xb_gpio_dir : std_logic_vector(31 downto 0) ; signal correction_rx_phase_gain : std_logic_vector(31 downto 0); signal correction_tx_phase_gain : std_logic_vector(31 downto 0); signal i2c_scl_in : std_logic ; signal i2c_scl_out : std_logic ; signal i2c_scl_oen : std_logic ; signal i2c_sda_in : std_logic ; signal i2c_sda_out : std_logic ; signal i2c_sda_oen : std_logic ; signal rx_sample_fifo : rx_fifo_t := RX_FIFO_T_DEFAULT; signal tx_sample_fifo : tx_fifo_t := TX_FIFO_T_DEFAULT; signal rx_meta_fifo : meta_fifo_rx_t := META_FIFO_RX_T_DEFAULT; signal tx_meta_fifo : meta_fifo_tx_t := META_FIFO_TX_T_DEFAULT; signal rx_loopback_fifo : loopback_fifo_t := LOOPBACK_FIFO_T_DEFAULT; signal sys_rst_sync : std_logic ; signal sys_rst_80M : std_logic ; signal usb_speed : std_logic ; signal usb_speed_rx : std_logic ; signal usb_speed_tx : std_logic ; signal tx_reset : std_logic ; signal rx_reset : std_logic ; signal pclk_tx_enable : std_logic ; signal pclk_rx_enable : std_logic ; signal tx_enable : std_logic ; signal rx_enable : std_logic ; signal meta_en_tx : std_logic ; signal meta_en_rx : std_logic ; signal meta_en_fx3 : std_logic ; signal packet_en_pclk : std_logic; signal packet_en_tx : std_logic; signal packet_en_rx : std_logic; signal tx_timestamp : unsigned(63 downto 0) ; signal rx_timestamp : unsigned(63 downto 0) ; signal timestamp_sync : std_logic ; signal rx_sample_i : signed(15 downto 0) ; signal rx_sample_q : signed(15 downto 0) ; signal rx_sample_valid : std_logic ; signal rx_samples : sample_streams_t(0 to NUM_MIMO_STREAMS-1) := (others => ZERO_SAMPLE); signal rx_gen_mode : std_logic ; signal rx_gen_i : signed(15 downto 0) ; signal rx_gen_q : signed(15 downto 0) ; signal rx_gen_valid : std_logic ; signal rx_loopback_i : signed(15 downto 0) := (others =>'0') ; signal rx_loopback_q : signed(15 downto 0) := (others =>'0') ; signal rx_loopback_valid : std_logic := '0' ; signal rx_loopback_enabled : std_logic := '0' ; signal tx_loopback_enabled : std_logic := '0' ; signal tx_sample_raw_i : signed(15 downto 0); signal tx_sample_raw_q : signed(15 downto 0); signal tx_sample_raw_valid : std_logic; signal tx_sample_i : signed(15 downto 0) ; signal tx_sample_q : signed(15 downto 0) ; signal tx_sample_valid : std_logic ; signal tx_samples : sample_streams_t(0 to NUM_MIMO_STREAMS-1) := (others => ZERO_SAMPLE); signal fx3_gpif_in : std_logic_vector(31 downto 0) ; signal fx3_gpif_out : std_logic_vector(31 downto 0) ; signal fx3_gpif_oe : std_logic ; signal fx3_ctl_in : std_logic_vector(12 downto 0) ; signal fx3_ctl_out : std_logic_vector(12 downto 0) ; signal fx3_ctl_oe : std_logic_vector(12 downto 0) ; signal tx_underflow_led : std_logic ; signal rx_overflow_led : std_logic ; signal lms_rx_data_reg : signed(11 downto 0) ; signal lms_rx_iq_select_reg : std_logic ; signal rx_mux_i : signed(15 downto 0) ; signal rx_mux_q : signed(15 downto 0) ; signal rx_mux_valid : std_logic ; signal rx_sample_corrected_i : signed(15 downto 0); signal rx_sample_corrected_q : signed(15 downto 0); signal rx_sample_corrected_valid : std_logic; signal led1_blink : std_logic; signal nios_sdo : std_logic; signal nios_sdio : std_logic; signal nios_sclk : std_logic; signal nios_ss_n : std_logic_vector(1 downto 0); signal correction_valid : std_logic; signal correction_tx_phase : signed(15 downto 0);--to_signed(integer(round(real(2**Q_SCALE) * PHASE_OFFSET)),DC_WIDTH); signal correction_tx_gain : signed(15 downto 0);--to_signed(integer(round(real(2**Q_SCALE) * DC_OFFSET_REAL)),DC_WIDTH); signal correction_rx_phase : signed(15 downto 0);--to_signed(integer(round(real(2**Q_SCALE) * PHASE_OFFSET)),DC_WIDTH); signal correction_rx_gain : signed(15 downto 0);--to_signed(integer(round(real(2**Q_SCALE) * DC_OFFSET_REAL)),DC_WIDTH); signal command_serial_in : std_logic ; signal command_serial_out : std_logic ; constant FPGA_DC_CORRECTION : signed(15 downto 0) := to_signed(integer(0), 16); signal fx3_pclk_pll : std_logic ; signal timestamp_req : std_logic ; signal timestamp_ack : std_logic ; signal fx3_timestamp : unsigned(63 downto 0) ; signal rx_ts_reset : std_logic ; signal tx_ts_reset : std_logic ; -- Trigger Control interfaces signal rx_trigger_ctl : std_logic_vector(7 downto 0); signal tx_trigger_ctl : std_logic_vector(7 downto 0); -- Trigger Control breakdown alias rx_trigger_arm : std_logic is rx_trigger_ctl(0); alias rx_trigger_fire : std_logic is rx_trigger_ctl(1); alias rx_trigger_master : std_logic is rx_trigger_ctl(2); alias rx_trigger_line : std_logic is mini_exp1; alias tx_trigger_arm : std_logic is tx_trigger_ctl(0); alias tx_trigger_fire : std_logic is tx_trigger_ctl(1); alias tx_trigger_master : std_logic is tx_trigger_ctl(2); alias tx_trigger_line : std_logic is mini_exp1; signal tx_trigger_arm_sync : std_logic ; -- Trigger Control readback interfaces signal rx_trigger_ctl_rb : std_logic_vector(7 downto 0); signal tx_trigger_ctl_rb : std_logic_vector(7 downto 0); -- Arbiter signal signal arbiter_request : std_logic_vector(1 downto 0) := (others => '0'); signal arbiter_granted : std_logic_vector(1 downto 0) := (others => '0'); signal arbiter_ack : std_logic_vector(1 downto 0) := (others => '0'); -- AGC control signal alias agc_en is nios_gpio.o.agc_en ; signal gain_inc_req : std_logic ; signal gain_dec_req : std_logic ; signal gain_rst_req : std_logic ; signal gain_ack : std_logic ; signal gain_nack : std_logic ; signal agc_lms_sdio : std_logic ; signal agc_lms_sclk : std_logic ; signal agc_lms_sen : std_logic ; signal nios_lms_sdio : std_logic ; signal nios_lms_sclk : std_logic ; signal nios_lms_sen : std_logic ; -- Trigger Control readback breakdown alias rx_trigger_arm_rb : std_logic is rx_trigger_ctl_rb(0); alias rx_trigger_fire_rb : std_logic is rx_trigger_ctl_rb(1); alias rx_trigger_master_rb : std_logic is rx_trigger_ctl_rb(2); alias rx_trigger_line_rb : std_logic is rx_trigger_ctl_rb(3); alias tx_trigger_arm_rb : std_logic is tx_trigger_ctl_rb(0); alias tx_trigger_fire_rb : std_logic is tx_trigger_ctl_rb(1); alias tx_trigger_master_rb : std_logic is tx_trigger_ctl_rb(2); alias tx_trigger_line_rb : std_logic is tx_trigger_ctl_rb(3); -- Trigger Outputs signal lms_rx_enable_sig : std_logic; signal lms_rx_enable_qualified : std_logic; signal lms_rx_enable_qualified_rxclk : std_logic; signal tx_sample_fifo_rempty_untriggered : std_logic; -- AGC signals alias agc_band_sel is nios_gpio.o.agc_band_sel ; signal gain_inc_req_80M : std_logic; signal gain_dec_req_80M : std_logic; signal gain_rst_req_80M : std_logic; signal gain_ack_rxclk : std_logic; signal gain_nack_rxclk : std_logic; signal agc_gain_high : std_logic; signal agc_gain_mid : std_logic; signal agc_gain_low : std_logic; signal agc_gain_high_rxclk : std_logic; signal agc_gain_mid_rxclk : std_logic; signal agc_gain_low_rxclk : std_logic; signal fpga_dc_i_correction : signed(15 downto 0); signal fpga_dc_q_correction : signed(15 downto 0); signal corr_dc_i_max : std_logic_vector(15 downto 0); signal corr_dc_i_mid : std_logic_vector(15 downto 0); signal corr_dc_i_min : std_logic_vector(15 downto 0); signal corr_dc_q_max : std_logic_vector(15 downto 0); signal corr_dc_q_mid : std_logic_vector(15 downto 0); signal corr_dc_q_min : std_logic_vector(15 downto 0); signal tx_packet_control : packet_control_t ; signal rx_packet_control : packet_control_t := PACKET_CONTROL_DEFAULT ; signal rx_packet_ready : std_logic; begin correction_tx_phase <= signed(correction_tx_phase_gain(31 downto 16)); correction_tx_gain <= signed(correction_tx_phase_gain(15 downto 0)); correction_rx_phase <= signed(correction_rx_phase_gain(31 downto 16)); correction_rx_gain <= signed(correction_rx_phase_gain(15 downto 0)); correction_valid <= '1'; -- Create 80MHz from 38.4MHz coming from the c4_clock source U_pll : entity work.pll port map ( inclk0 => c4_clock, c0 => \80MHz\, locked => open ) ; U_fx3_pll : entity work.fx3_pll port map ( inclk0 => fx3_pclk, c0 => fx3_pclk_pll, locked => open ) ; -- Cross domain synchronizer chains U_usb_speed : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => fx3_pclk_pll, async => nios_gpio.o.usb_speed, sync => usb_speed ) ; U_usb_speed_rx : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => rx_clock, async => nios_gpio.o.usb_speed, sync => usb_speed_rx ) ; U_usb_speed_tx : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => tx_clock, async => nios_gpio.o.usb_speed, sync => usb_speed_tx ) ; generate_mux_sel : for i in rx_mux_sel'range generate U_rx_source : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => rx_clock, async => nios_gpio.o.rx_mux_sel(i), sync => rx_mux_sel(i) ) ; end generate ; U_meta_sync_fx3 : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => fx3_pclk_pll, async => nios_gpio.o.meta_en, sync => meta_en_fx3 ) ; U_meta_sync_tx : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => tx_clock, async => nios_gpio.o.meta_en, sync => meta_en_tx ) ; U_meta_sync_rx : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => rx_clock, async => nios_gpio.o.meta_en, sync => meta_en_rx ) ; U_sync_packet_en_pclk : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => fx3_pclk_pll, async => nios_gpio.o.packet_en, sync => packet_en_pclk ); U_sync_packet_en_rx : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => rx_clock, async => nios_gpio.o.packet_en, sync => packet_en_rx ); U_sync_packet_en_tx : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => '0', clock => tx_clock, async => nios_gpio.o.packet_en, sync => packet_en_tx ); U_sys_reset_sync : entity work.reset_synchronizer generic map ( INPUT_LEVEL => '1', OUTPUT_LEVEL => '1' ) port map ( clock => fx3_pclk_pll, async => sys_rst, sync => sys_rst_sync ) ; U_80M_reset_sync : entity work.reset_synchronizer generic map ( INPUT_LEVEL => '1', OUTPUT_LEVEL => '1' ) port map ( clock => \80MHz\, async => sys_rst, sync => sys_rst_80M ) ; U_tx_reset : entity work.reset_synchronizer generic map ( INPUT_LEVEL => '1', OUTPUT_LEVEL => '1' ) port map ( clock => c4_tx_clock, async => sys_rst_sync, sync => tx_reset ) ; U_rx_clock_reset : entity work.reset_synchronizer generic map ( INPUT_LEVEL => '1', OUTPUT_LEVEL => '1' ) port map ( clock => rx_clock, async => sys_rst_sync, sync => rx_reset ) ; U_rx_enable_sync : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => rx_reset, clock => rx_clock, async => pclk_rx_enable, sync => rx_enable ) ; U_tx_enable_sync : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => tx_reset, clock => tx_clock, async => pclk_tx_enable, sync => tx_enable ) ; U_gain_inc_req_80M_sync : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => sys_rst_80M, clock => \80MHz\, async => gain_inc_req, sync => gain_inc_req_80M ); U_gain_dec_req_80M_sync : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => sys_rst_80M, clock => \80MHz\, async => gain_dec_req, sync => gain_dec_req_80M ); U_gain_rst_req_80M_sync : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => sys_rst_80M, clock => \80MHz\, async => gain_rst_req, sync => gain_rst_req_80M ); U_gain_ack_rxclk_sync : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => rx_reset, clock => rx_clock, async => gain_ack, sync => gain_ack_rxclk ); U_gain_nack_rxclk_sync : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => rx_reset, clock => rx_clock, async => gain_nack, sync => gain_nack_rxclk ); U_agc_gain_high_rxclk_sync : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => rx_reset, clock => rx_clock, async => agc_gain_high, sync => agc_gain_high_rxclk ); U_agc_gain_mid_rxclk_sync : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => rx_reset, clock => rx_clock, async => agc_gain_mid, sync => agc_gain_mid_rxclk ); U_agc_gain_low_rxclk_sync : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => rx_reset, clock => rx_clock, async => agc_gain_low, sync => agc_gain_low_rxclk ); U_lms_rx_enable_qualified_rxclk_sync : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => rx_reset, clock => rx_clock, async => lms_rx_enable_qualified, sync => lms_rx_enable_qualified_rxclk ); -- TX sample fifo tx_sample_fifo.aclr <= tx_reset ; tx_sample_fifo.wclock <= fx3_pclk_pll ; tx_sample_fifo.rclock <= tx_clock ; U_tx_sample_fifo : entity work.tx_fifo generic map ( LPM_NUMWORDS => TX_FIFO_LENGTH ) port map ( aclr => tx_sample_fifo.aclr, data => tx_sample_fifo.wdata, rdclk => tx_sample_fifo.rclock, rdreq => tx_sample_fifo.rreq, wrclk => tx_sample_fifo.wclock, wrreq => tx_sample_fifo.wreq, q => tx_sample_fifo.rdata, --rdempty => tx_sample_fifo.rempty, rdempty => tx_sample_fifo_rempty_untriggered, rdfull => tx_sample_fifo.rfull, rdusedw => tx_sample_fifo.rused, wrempty => tx_sample_fifo.wempty, wrfull => tx_sample_fifo.wfull, wrusedw => tx_sample_fifo.wused ); -- TX meta fifo tx_meta_fifo.aclr <= tx_reset ; tx_meta_fifo.wclock <= fx3_pclk_pll ; tx_meta_fifo.rclock <= tx_clock ; U_tx_meta_fifo : entity work.tx_meta_fifo generic map ( LPM_NUMWORDS => META_FIFO_TX_LENGTH ) port map ( aclr => tx_meta_fifo.aclr, data => tx_meta_fifo.wdata, rdclk => tx_meta_fifo.rclock, rdreq => tx_meta_fifo.rreq, wrclk => tx_meta_fifo.wclock, wrreq => tx_meta_fifo.wreq, q => tx_meta_fifo.rdata, rdempty => tx_meta_fifo.rempty, rdfull => tx_meta_fifo.rfull, rdusedw => tx_meta_fifo.rused, wrempty => tx_meta_fifo.wempty, wrfull => tx_meta_fifo.wfull, wrusedw => tx_meta_fifo.wused ); -- RX sample fifo rx_sample_fifo.wclock <= rx_clock ; rx_sample_fifo.rclock <= fx3_pclk_pll ; U_rx_sample_fifo : entity work.rx_fifo generic map ( LPM_NUMWORDS => RX_FIFO_LENGTH ) port map ( aclr => "not"(pclk_rx_enable), data => rx_sample_fifo.wdata, rdclk => rx_sample_fifo.rclock, rdreq => rx_sample_fifo.rreq, wrclk => rx_sample_fifo.wclock, wrreq => rx_sample_fifo.wreq, q => rx_sample_fifo.rdata, rdempty => rx_sample_fifo.rempty, rdfull => rx_sample_fifo.rfull, rdusedw => rx_sample_fifo.rused, wrempty => rx_sample_fifo.wempty, wrfull => rx_sample_fifo.wfull, wrusedw => rx_sample_fifo.wused ); -- RX meta fifo rx_meta_fifo.aclr <= rx_reset ; rx_meta_fifo.wclock <= rx_clock ; rx_meta_fifo.rclock <= fx3_pclk_pll ; U_rx_meta_fifo : entity work.rx_meta_fifo generic map ( LPM_NUMWORDS => META_FIFO_RX_LENGTH ) port map ( aclr => "not"(pclk_rx_enable), data => rx_meta_fifo.wdata, rdclk => rx_meta_fifo.rclock, rdreq => rx_meta_fifo.rreq, wrclk => rx_meta_fifo.wclock, wrreq => rx_meta_fifo.wreq, q => rx_meta_fifo.rdata, rdempty => rx_meta_fifo.rempty, rdfull => rx_meta_fifo.rfull, rdusedw => rx_meta_fifo.rused, wrempty => rx_meta_fifo.wempty, wrfull => rx_meta_fifo.wfull, wrusedw => rx_meta_fifo.wused ); -- RX loopback fifo rx_loopback_fifo.aclr <= '1' when tx_reset = '1' or tx_loopback_enabled = '0' else '0' ; rx_loopback_fifo.wclock <= tx_clock ; rx_loopback_fifo.wdata <= std_logic_vector(tx_sample_i & tx_sample_q) when tx_loopback_enabled = '1' else (others => '0') ; rx_loopback_fifo.wreq <= tx_sample_valid when tx_loopback_enabled = '1' else '0'; rx_loopback_fifo.rclock <= rx_clock ; rx_loopback_fifo.rreq <= '1' when rx_loopback_enabled = '1' and rx_loopback_fifo.rempty = '0' else '0' ; U_rx_loopack_fifo : entity work.lb_fifo generic map ( LPM_NUMWORDS => LOOPBACK_FIFO_LENGTH ) port map ( aclr => rx_loopback_fifo.aclr, data => rx_loopback_fifo.wdata, rdclk => rx_loopback_fifo.rclock, rdreq => rx_loopback_fifo.rreq, wrclk => rx_loopback_fifo.wclock, wrreq => rx_loopback_fifo.wreq, q => rx_loopback_fifo.rdata, rdempty => rx_loopback_fifo.rempty, rdfull => rx_loopback_fifo.rfull, rdusedw => rx_loopback_fifo.rused, wrempty => rx_loopback_fifo.wempty, wrfull => rx_loopback_fifo.wfull, wrusedw => rx_loopback_fifo.wused ); U_loopback_sync : entity work.reset_synchronizer generic map ( INPUT_LEVEL => '0', OUTPUT_LEVEL => '0' ) port map ( clock => tx_clock, async => rx_loopback_enabled, sync => tx_loopback_enabled ) ; rx_loopback_enabled <= '1' when rx_enable = '1' and rx_mux_mode = RX_MUX_DIGITAL_LOOPBACK else '0' ; rx_loopback_i <= resize(signed(rx_loopback_fifo.rdata(31 downto 16)), rx_loopback_i'length) ; rx_loopback_q <= resize(signed(rx_loopback_fifo.rdata(15 downto 0)), rx_loopback_q'length) ; loopback_valid : process(rx_reset, rx_clock) begin if (rx_reset = '1') then rx_loopback_valid <= '0'; elsif rising_edge(rx_clock) then if (rx_loopback_fifo.rempty = '0') then -- Delay fifo read request by one clock to indicate sample validity rx_loopback_valid <= rx_loopback_fifo.rreq ; else rx_loopback_valid <= '0' ; end if; end if; end process loopback_valid; -- FX3 GPIF U_fx3_gpif : entity work.fx3_gpif port map ( pclk => fx3_pclk_pll, reset => sys_rst_sync, usb_speed => usb_speed, meta_enable => meta_en_fx3, packet_enable => packet_en_pclk, rx_enable => pclk_rx_enable, tx_enable => pclk_tx_enable, gpif_in => fx3_gpif_in, gpif_out => fx3_gpif_out, gpif_oe => fx3_gpif_oe, ctl_in => fx3_ctl_in, ctl_out => fx3_ctl_out, ctl_oe => fx3_ctl_oe, tx_fifo_write => tx_sample_fifo.wreq, tx_fifo_full => tx_sample_fifo.wfull, tx_fifo_empty => tx_sample_fifo.wempty, tx_fifo_usedw => tx_sample_fifo.wused, tx_fifo_data => tx_sample_fifo.wdata, tx_timestamp => fx3_timestamp, tx_meta_fifo_write => tx_meta_fifo.wreq, tx_meta_fifo_full => tx_meta_fifo.wfull, tx_meta_fifo_empty => tx_meta_fifo.wempty, tx_meta_fifo_usedw => tx_meta_fifo.wused, tx_meta_fifo_data => tx_meta_fifo.wdata, rx_fifo_read => rx_sample_fifo.rreq, rx_fifo_full => rx_sample_fifo.rfull, rx_fifo_empty => rx_sample_fifo.rempty, rx_fifo_usedw => rx_sample_fifo.rused, rx_fifo_data => rx_sample_fifo.rdata, rx_meta_fifo_read => rx_meta_fifo.rreq, rx_meta_fifo_full => rx_meta_fifo.rfull, rx_meta_fifo_empty => rx_meta_fifo.rempty, rx_meta_fifo_usedr => rx_meta_fifo.rused, rx_meta_fifo_data => rx_meta_fifo.rdata ) ; -- Sample bridges U_fifo_writer : entity work.fifo_writer generic map ( NUM_STREAMS => NUM_MIMO_STREAMS, FIFO_USEDW_WIDTH => rx_sample_fifo.wused'length, FIFO_DATA_WIDTH => rx_sample_fifo.wdata'length, META_FIFO_USEDW_WIDTH => rx_meta_fifo.wused'length, META_FIFO_DATA_WIDTH => rx_meta_fifo.wdata'length ) port map ( clock => rx_clock, reset => rx_reset, enable => rx_enable, usb_speed => usb_speed_rx, meta_en => meta_en_rx, packet_en => packet_en_rx, eight_bit_mode_en => '0', timestamp => rx_timestamp, mini_exp => mini_exp2 & mini_exp1, fifo_clear => rx_sample_fifo.aclr, fifo_full => rx_sample_fifo.wfull, fifo_usedw => rx_sample_fifo.wused, fifo_data => rx_sample_fifo.wdata, fifo_write => rx_sample_fifo.wreq, packet_control => rx_packet_control, packet_ready => rx_packet_ready, meta_fifo_full => rx_meta_fifo.wfull, meta_fifo_usedw => rx_meta_fifo.wused, meta_fifo_data => rx_meta_fifo.wdata, meta_fifo_write => rx_meta_fifo.wreq, in_sample_controls => (others => SAMPLE_CONTROL_ENABLE), in_samples => rx_samples, overflow_led => rx_overflow_led, overflow_count => open, overflow_duration => x"ffff" ) ; process(all) begin if( agc_gain_high_rxclk = '1' ) then fpga_dc_i_correction <= signed( corr_dc_i_max ) ; fpga_dc_q_correction <= signed( corr_dc_q_max ) ; elsif( agc_gain_mid_rxclk = '1' ) then fpga_dc_i_correction <= signed( corr_dc_i_mid ) ; fpga_dc_q_correction <= signed( corr_dc_q_mid ) ; elsif( agc_gain_low_rxclk = '1' ) then fpga_dc_i_correction <= signed( corr_dc_i_min ) ; fpga_dc_q_correction <= signed( corr_dc_q_min ) ; else fpga_dc_i_correction <= ( others => '0' ) ; fpga_dc_q_correction <= ( others => '0' ) ; end if; end process ; rx_samples(0).data_i <= rx_sample_corrected_i; rx_samples(0).data_q <= rx_sample_corrected_q; rx_samples(0).data_v <= rx_sample_corrected_valid; U_rx_iq_correction : entity work.iq_correction(rx) generic map( INPUT_WIDTH => rx_sample_corrected_i'length ) port map( reset => rx_reset, clock => rx_clock, in_real => resize(rx_mux_i,16), in_imag => resize(rx_mux_q,16), in_valid => rx_mux_valid, out_real => rx_sample_corrected_i, out_imag => rx_sample_corrected_q, out_valid => rx_sample_corrected_valid, dc_real => fpga_dc_i_correction, dc_imag => fpga_dc_q_correction, gain => correction_rx_gain, phase => correction_rx_phase, correction_valid => correction_valid ); U_agc : entity work.bladerf_agc port map ( clock => rx_clock, reset => rx_reset, agc_hold_req => '0', gain_inc_req => gain_inc_req, gain_dec_req => gain_dec_req, gain_rst_req => gain_rst_req, gain_ack => gain_ack_rxclk, gain_nack => gain_nack_rxclk, gain_max => '0', rst_gains => open, burst => open, sample_i => rx_sample_corrected_i, sample_q => rx_sample_corrected_q, sample_valid => rx_sample_corrected_valid ) ; U_agc_lms : entity work.bladerf_agc_lms_drv port map ( clock => \80MHz\, reset => sys_rst_80M, enable => agc_en, gain_inc_req => gain_inc_req_80M, gain_dec_req => gain_dec_req_80M, gain_rst_req => gain_rst_req_80M, gain_ack => gain_ack, gain_nack => gain_nack, gain_high => agc_gain_high, gain_mid => agc_gain_mid, gain_low => agc_gain_low, arbiter_req => arbiter_request(1), arbiter_grant => arbiter_granted(1), arbiter_done => arbiter_ack(1), band_sel => agc_band_sel, sclk => agc_lms_sclk, miso => lms_sdo, mosi => agc_lms_sdio, cs_n => agc_lms_sen ) ; U_agc_mux : process(all) begin if( arbiter_granted(1) = '1' ) then lms_sdio <= agc_lms_sdio ; lms_sclk <= agc_lms_sclk ; lms_sen <= agc_lms_sen ; else lms_sdio <= nios_lms_sdio ; lms_sclk <= nios_lms_sclk ; lms_sen <= nios_lms_sen ; end if ; end process ; U_fifo_reader : entity work.fifo_reader generic map ( NUM_STREAMS => NUM_MIMO_STREAMS, FIFO_READ_THROTTLE => 1, -- TODO: can this be 0 ? FIFO_USEDW_WIDTH => tx_sample_fifo.rused'length, FIFO_DATA_WIDTH => tx_sample_fifo.rdata'length, META_FIFO_USEDW_WIDTH => tx_meta_fifo.rused'length, META_FIFO_DATA_WIDTH => tx_meta_fifo.rdata'length ) port map ( clock => tx_clock, reset => tx_reset, enable => tx_enable, usb_speed => usb_speed_tx, meta_en => meta_en_tx, packet_en => packet_en_tx, eight_bit_mode_en => '0', timestamp => tx_timestamp, fifo_empty => tx_sample_fifo.rempty, fifo_usedw => tx_sample_fifo.rused, fifo_data => tx_sample_fifo.rdata, fifo_read => tx_sample_fifo.rreq, packet_control => tx_packet_control, packet_ready => '1', meta_fifo_empty => tx_meta_fifo.rempty, meta_fifo_usedw => tx_meta_fifo.rused, meta_fifo_data => tx_meta_fifo.rdata, meta_fifo_read => tx_meta_fifo.rreq, in_sample_controls => (others => SAMPLE_CONTROL_ENABLE), out_samples => tx_samples, underflow_led => tx_underflow_led, underflow_count => open, underflow_duration => x"ffff" ) ; tx_sample_raw_i <= tx_samples(0).data_i; tx_sample_raw_q <= tx_samples(0).data_q; tx_sample_raw_valid <= tx_samples(0).data_v; U_tx_iq_correction : entity work.iq_correction(tx) generic map ( INPUT_WIDTH => tx_sample_raw_i'length ) port map ( reset => tx_reset, clock => tx_clock, in_real => tx_sample_raw_i, in_imag => tx_sample_raw_q, in_valid => tx_sample_raw_valid, out_real => tx_sample_i, out_imag => tx_sample_q, out_valid => tx_sample_valid, dc_real => FPGA_DC_CORRECTION, dc_imag => FPGA_DC_CORRECTION, gain => correction_tx_gain, phase => correction_tx_phase, correction_valid => correction_valid ); -- RX Trigger rxtrig : entity work.trigger(async) generic map ( DEFAULT_OUTPUT => '0' ) port map ( armed => rx_trigger_arm, fired => rx_trigger_fire, master => rx_trigger_master, trigger_in => rx_trigger_line, trigger_out => rx_trigger_line, signal_in => lms_rx_enable_sig, signal_out => lms_rx_enable_qualified ); rx_trigger_arm_rb <= rx_trigger_arm; rx_trigger_fire_rb <= rx_trigger_fire; rx_trigger_master_rb <= rx_trigger_master; rx_trigger_line_rb <= rx_trigger_line; rx_trigger_ctl_rb(7 downto 4) <= rx_trigger_ctl(7 downto 4); -- TX Trigger U_tx_arm_sync : entity work.reset_synchronizer generic map ( INPUT_LEVEL => '0', OUTPUT_LEVEL => '0' ) port map ( clock => tx_clock, async => tx_trigger_arm, sync => tx_trigger_arm_sync ) ; txtrig : entity work.trigger(async) generic map ( DEFAULT_OUTPUT => '1' ) port map ( armed => tx_trigger_arm_sync, fired => tx_trigger_fire, master => tx_trigger_master, trigger_in => tx_trigger_line, trigger_out => tx_trigger_line, signal_in => tx_sample_fifo_rempty_untriggered, signal_out => tx_sample_fifo.rempty ); tx_trigger_arm_rb <= tx_trigger_arm; tx_trigger_fire_rb <= tx_trigger_fire; tx_trigger_master_rb <= tx_trigger_master; tx_trigger_line_rb <= tx_trigger_line; tx_trigger_ctl_rb(7 downto 4) <= tx_trigger_ctl(7 downto 4); -- LMS6002D IQ interface rx_sample_i(15 downto 12) <= (others => rx_sample_i(11)) ; rx_sample_q(15 downto 12) <= (others => rx_sample_q(11)) ; U_lms6002d : entity work.lms6002d port map ( rx_clock => rx_clock, rx_reset => rx_reset, rx_enable => rx_enable, rx_lms_data => lms_rx_data_reg, rx_lms_iq_sel => lms_rx_iq_select_reg, rx_lms_enable => open, rx_sample_i => rx_sample_i(11 downto 0), rx_sample_q => rx_sample_q(11 downto 0), rx_sample_valid => rx_sample_valid, tx_clock => tx_clock, tx_reset => tx_reset, tx_enable => tx_enable, tx_sample_i => tx_sample_i(11 downto 0), tx_sample_q => tx_sample_q(11 downto 0), tx_sample_valid => tx_sample_valid, tx_lms_data => lms_tx_data, tx_lms_iq_sel => lms_tx_iq_select, tx_lms_enable => open ) ; U_rx_siggen : entity work.signal_generator port map ( clock => rx_clock, reset => rx_reset, enable => rx_enable, mode => rx_gen_mode, sample_i => rx_gen_i, sample_q => rx_gen_q, sample_valid => rx_gen_valid ) ; rx_mux_mode <= rx_mux_mode_t'val(to_integer(rx_mux_sel)) ; rx_mux : process(rx_reset, rx_clock) begin if( rx_reset = '1' ) then rx_mux_i <= (others =>'0') ; rx_mux_q <= (others =>'0') ; rx_mux_valid <= '0' ; rx_gen_mode <= '0' ; elsif( rising_edge(rx_clock) ) then case rx_mux_mode is when RX_MUX_NORMAL => rx_mux_i <= rx_sample_i ; rx_mux_q <= rx_sample_q ; if( lms_rx_enable_qualified_rxclk = '1' ) then rx_mux_valid <= rx_sample_valid ; else rx_mux_valid <= '0' ; end if ; when RX_MUX_12BIT_COUNTER | RX_MUX_32BIT_COUNTER => rx_mux_i <= rx_gen_i ; rx_mux_q <= rx_gen_q ; rx_mux_valid <= rx_gen_valid ; if( rx_mux_mode = RX_MUX_32BIT_COUNTER ) then rx_gen_mode <= '1' ; else rx_gen_mode <= '0' ; end if ; when RX_MUX_ENTROPY => rx_mux_i <= (others => '0'); rx_mux_q <= (others => '0'); rx_mux_valid <= '0'; when RX_MUX_DIGITAL_LOOPBACK => rx_mux_i <= rx_loopback_i ; rx_mux_q <= rx_loopback_q ; rx_mux_valid <= rx_loopback_valid ; when others => rx_mux_i <= (others =>'0') ; rx_mux_q <= (others =>'0') ; rx_mux_valid <= '0' ; end case ; end if ; end process ; -- Register the inputs immediately lms_rx_data_reg <= lms_rx_data when rising_edge(rx_clock) ; lms_rx_iq_select_reg <= lms_rx_iq_select when rising_edge(rx_clock) ; -- FX3 GPIF bidirectional signals register_gpif : process(sys_rst_sync, fx3_pclk_pll) begin if( sys_rst_sync = '1' ) then fx3_gpif <= (others =>'Z') ; fx3_gpif_in <= (others =>'0') ; elsif( rising_edge(fx3_pclk_pll) ) then fx3_gpif_in <= fx3_gpif ; if( fx3_gpif_oe = '1' ) then fx3_gpif <= fx3_gpif_out ; else fx3_gpif <= (others =>'Z') ; end if ; end if ; end process ; generate_ctl : for i in fx3_ctl'range generate fx3_ctl(i) <= fx3_ctl_out(i) when fx3_ctl_oe(i) = '1' else 'Z'; end generate ; -- synchronize fx3_ctl_in to the fx3_pclk_pll domain generate_fx3_ctl_in_synch: for i in fx3_ctl'range generate U_fx3_ctl_in_sync : entity work.synchronizer generic map ( RESET_LEVEL => '0' ) port map ( reset => sys_rst_sync, clock => fx3_pclk_pll, async => fx3_ctl(i), sync => fx3_ctl_in(i) ); end generate generate_fx3_ctl_in_synch; register_uart : process(sys_rst_80M, \80MHz\) is begin if (sys_rst_80M = '1') then command_serial_in <= '1'; fx3_uart_rxd <= 'Z'; elsif (rising_edge(\80MHz\)) then command_serial_in <= fx3_uart_txd; fx3_uart_rxd <= command_serial_out; end if; end process register_uart; -- NIOS control system for si5338, vctcxo trim and lms control U_nios_system : component nios_system port map ( clk_clk => \80MHz\, reset_reset_n => '1', dac_MISO => nios_sdo, dac_MOSI => nios_sdio, dac_SCLK => nios_sclk, dac_SS_n => nios_ss_n, spi_MISO => lms_sdo, spi_MOSI => nios_lms_sdio, spi_SCLK => nios_lms_sclk, spi_SS_n => nios_lms_sen, gpio_in_port => pack(nios_gpio.i, '0'), gpio_out_port => nios_gpo_slv, xb_gpio_in_port => nios_xb_gpio_in, xb_gpio_out_port => nios_xb_gpio_out, xb_gpio_dir_export => nios_xb_gpio_dir, command_serial_in => command_serial_in, command_serial_out => command_serial_out, correction_tx_phase_gain_export => correction_tx_phase_gain, correction_rx_phase_gain_export => correction_rx_phase_gain, oc_i2c_scl_pad_o => i2c_scl_out, oc_i2c_scl_padoen_o => i2c_scl_oen, oc_i2c_sda_pad_i => i2c_sda_in, oc_i2c_sda_pad_o => i2c_sda_out, oc_i2c_sda_padoen_o => i2c_sda_oen, oc_i2c_arst_i => '0', oc_i2c_scl_pad_i => i2c_scl_in, rx_tamer_ts_sync_in => '0', rx_tamer_ts_sync_out => open, rx_tamer_ts_pps => '0', rx_tamer_ts_clock => rx_clock, rx_tamer_ts_reset => rx_ts_reset, unsigned(rx_tamer_ts_time) => rx_timestamp, tx_tamer_ts_sync_in => '0', tx_tamer_ts_sync_out => open, tx_tamer_ts_pps => '0', tx_tamer_ts_clock => tx_clock, tx_tamer_ts_reset => tx_ts_reset, unsigned(tx_tamer_ts_time) => tx_timestamp, vctcxo_tamer_tune_ref => ref_vctcxo_tune, vctcxo_tamer_vctcxo_clock => c4_clock, rx_trigger_ctl_out_port => rx_trigger_ctl, tx_trigger_ctl_out_port => tx_trigger_ctl, rx_trigger_ctl_in_port => rx_trigger_ctl_rb, tx_trigger_ctl_in_port => tx_trigger_ctl_rb, arbiter_request => arbiter_request, arbiter_granted => arbiter_granted, arbiter_ack => arbiter_ack, agc_dc_i_max_export => corr_dc_i_max, agc_dc_q_max_export => corr_dc_q_max, agc_dc_i_mid_export => corr_dc_i_mid, agc_dc_q_mid_export => corr_dc_q_mid, agc_dc_i_min_export => corr_dc_i_min, agc_dc_q_min_export => corr_dc_q_min ) ; -- Unpack the Nios general-purpose outputs into a record nios_gpio.o <= unpack(nios_gpo_slv); -- Readback of Nios general-purpose outputs nios_gpio.i.gpo_readback <= nios_gpio.o; xb_gpio_direction : process(all) begin for i in 0 to 31 loop if (xb_gpio_dir(i) = '1') then nios_xb_gpio_in(i) <= nios_xb_gpio_out(i); if (nios_gpio.o.xb_mode = "10" and i + 1 = 2) then exp_gpio(i+1) <= nios_ss_n(1); elsif (i + 1 /= 1) then exp_gpio(i+1) <= nios_xb_gpio_out(i); end if; else if (i + 1 = 1) then nios_xb_gpio_in(i) <= exp_clock_in; else nios_xb_gpio_in(i) <= exp_gpio(i + 1); exp_gpio(i + 1) <= 'Z'; end if; end if; end loop ; end process ; nios_gpio.i.nios_ss_n <= nios_ss_n; nios_gpio.i.xb_mode2 <= nios_gpio.o.xb_mode; dac_sclk <= nios_sclk; dac_sdi <= nios_sdio; nios_sdo <= dac_sdo; dac_cs_selection : process(sys_rst_80M, \80MHz\) is begin if (sys_rst_80M = '1') then xb_gpio_dir <= (others => '0'); dac_csx <= '1'; elsif (rising_edge(\80MHz\)) then case nios_gpio.o.xb_mode is when "00" => xb_gpio_dir <= nios_xb_gpio_dir(31 downto 0); dac_csx <= nios_ss_n(0); when "10" => xb_gpio_dir <= nios_xb_gpio_dir(31 downto 0); case nios_ss_n(1 downto 0) is when "10" => dac_csx <= '0'; when "01" => dac_csx <= '1'; when others => dac_csx <= '1'; end case; when others => xb_gpio_dir <= nios_xb_gpio_dir(31 downto 0); dac_csx <= nios_ss_n(0); end case; end if; end process dac_cs_selection; -- IO for NIOS si_scl <= i2c_scl_out when i2c_scl_oen = '0' else 'Z' ; si_sda <= i2c_sda_out when i2c_sda_oen = '0' else 'Z' ; i2c_scl_in <= si_scl ; i2c_sda_in <= si_sda ; toggle_led1 : process(fx3_pclk_pll) variable count : natural range 0 to 100_000_000 := 100_000_000 ; begin if( rising_edge(fx3_pclk_pll) ) then count := count - 1 ; if( count = 0 ) then count := 100_000_000 ; led1_blink <= not led1_blink; end if ; end if ; end process ; led(1) <= led1_blink when nios_gpio.o.led_mode = '0' else not nios_gpio.o.leds(1); led(2) <= tx_underflow_led when nios_gpio.o.led_mode = '0' else not nios_gpio.o.leds(2); led(3) <= rx_overflow_led when nios_gpio.o.led_mode = '0' else not nios_gpio.o.leds(3); lms_reset <= nios_gpio.o.lms_reset; lms_rx_enable_sig <= nios_gpio.o.lms_rx_enable; lms_rx_enable <= nios_gpio.o.lms_rx_enable; lms_tx_enable <= nios_gpio.o.lms_tx_enable; lms_tx_v <= nios_gpio.o.lms_tx_v; lms_rx_v <= nios_gpio.o.lms_rx_v; -- CTS and the SPI CSx are tied to the same signal. When we are in reset, -- allow for SPI accesses. set_fx3_uart_cts : process(sys_rst_sync, fx3_pclk_pll) is begin if (sys_rst_sync = '1') then fx3_uart_cts <= 'Z'; elsif (rising_edge(fx3_pclk_pll)) then fx3_uart_cts <= '1'; end if; end process set_fx3_uart_cts; exp_spi_clock <= nios_sclk when ( nios_ss_n(1 downto 0) = "01" ) else '0' ; exp_spi_mosi <= nios_sdio when ( nios_ss_n(1 downto 0) = "01" ) else '0' ; --mini_exp1 <= 'Z'; mini_exp2 <= 'Z'; set_tx_ts_reset : process(tx_clock, tx_reset) begin if( tx_reset = '1' ) then tx_ts_reset <= '1' ; elsif( rising_edge(tx_clock) ) then if( meta_en_tx = '1' ) then tx_ts_reset <= '0' ; else tx_ts_reset <= '1' ; end if ; end if ; end process ; set_rx_ts_reset : process(rx_clock, rx_reset) begin if( rx_reset = '1' ) then rx_ts_reset <= '1' ; elsif( rising_edge(rx_clock) ) then if( meta_en_rx = '1' ) then rx_ts_reset <= '0' ; else rx_ts_reset <= '1' ; end if ; end if ; end process ; drive_handshake : process(fx3_pclk_pll, sys_rst_sync) begin if( sys_rst_sync = '1' ) then timestamp_req <= '0' ; elsif( rising_edge(fx3_pclk_pll) ) then if( meta_en_fx3 = '0' ) then timestamp_req <= '0' ; else if( timestamp_ack = '0' ) then timestamp_req <= '1' ; elsif( timestamp_ack = '1' ) then timestamp_req <= '0' ; end if ; end if ; end if ; end process ; U_timestamp_handshake : entity work.handshake generic map ( DATA_WIDTH => tx_timestamp'length ) port map ( source_clock => tx_clock, source_reset => tx_reset, source_data => std_logic_vector(tx_timestamp), dest_clock => fx3_pclk_pll, dest_reset => sys_rst_sync, unsigned(dest_data) => fx3_timestamp, dest_req => timestamp_req, dest_ack => timestamp_ack ) ; U_rx_pkt_gen : entity work.rx_packet_generator port map( rx_clock => rx_clock, rx_reset => rx_reset, rx_packet_ready => rx_packet_ready, rx_enable => rx_enable, rx_packet_enable => packet_en_rx, rx_packet_control => rx_packet_control ) ; end architecture ; -- arch bladeRF-2024.05/hdl/fpga/platforms/bladerf/vhdl/bladerf-qpsk_tx.vhd000066400000000000000000000024461457144405000250170ustar00rootroot00000000000000-- Copyright (c) 2013 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; use ieee.math_real.all ; use ieee.math_complex.all ; architecture qpsk_tx of bladerf is begin end architecture ; -- arch bladeRF-2024.05/hdl/fpga/platforms/bladerf/vhdl/bladerf.vhd000066400000000000000000000072611457144405000233300ustar00rootroot00000000000000-- Copyright (c) 2013 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; use ieee.math_real.all ; use ieee.math_complex.all ; entity bladerf is port ( -- Main 38.4MHz system clock c4_clock : in std_logic ; -- VCTCXO DAC dac_sclk : out std_logic := '0' ; dac_sdi : out std_logic := '0' ; dac_sdo : in std_logic ; dac_csx : out std_logic := '1' ; -- LEDs led : buffer std_logic_vector(3 downto 1) := (others =>'0') ; -- LMS RX Interface lms_rx_clock_out : in std_logic ; lms_rx_data : in signed(11 downto 0) ; lms_rx_enable : out std_logic ; lms_rx_iq_select : in std_logic ; lms_rx_v : out std_logic_vector(2 downto 1) ; -- LMS TX Interface c4_tx_clock : in std_logic ; lms_tx_data : out signed(11 downto 0) ; lms_tx_enable : out std_logic ; lms_tx_iq_select : buffer std_logic := '0' ; lms_tx_v : out std_logic_vector(2 downto 1) ; -- LMS SPI Interface lms_sclk : buffer std_logic := '0' ; lms_sen : out std_logic := '1' ; lms_sdio : out std_logic := '0' ; lms_sdo : in std_logic := '0' ; -- LMS Control Interface lms_pll_out : in std_logic ; lms_reset : buffer std_logic ; -- Si5338 I2C Interface si_scl : inout std_logic ; si_sda : inout std_logic ; -- FX3 Interface fx3_pclk : in std_logic ; fx3_gpif : inout std_logic_vector(31 downto 0) ; fx3_ctl : inout std_logic_vector(12 downto 0) ; fx3_uart_rxd : out std_logic ; fx3_uart_txd : in std_logic ; fx3_uart_cts : out std_logic ; -- Reference signals ref_vctcxo_tune : in std_logic ; ref_sma_clock : in std_logic ; -- Mini expansion mini_exp1 : inout std_logic ; mini_exp2 : inout std_logic ; -- Expansion Interface exp_present : in std_logic ; exp_spi_clock : out std_logic ; exp_spi_miso : in std_logic ; exp_spi_mosi : out std_logic ; exp_clock_in : in std_logic ; exp_gpio : inout std_logic_vector(32 downto 2) ) ; end entity ; -- bladerf --TODO: explain revisions bladeRF-2024.05/hdl/fpga/platforms/bladerf/vhdl/bladerf_debug_p.vhd000066400000000000000000000024421457144405000250110ustar00rootroot00000000000000-- Copyright (c) 2013 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; use ieee.math_real.all ; use ieee.math_complex.all ; package bladerf_debug_p is -- Debug signals end package ; bladeRF-2024.05/hdl/fpga/platforms/bladerf/vhdl/bladerf_p.vhd000066400000000000000000000472071457144405000236530ustar00rootroot00000000000000-- Copyright (c) 2017 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.math_real.all; library work; use work.common_dcfifo_p.all; package bladerf_p is -- ======================================================================== -- Component declarations for Verilog files -- ======================================================================== --component system_pll is -- port ( -- refclk : in std_logic; -- rst : in std_logic; -- outclk_0 : out std_logic; -- locked : out std_logic -- ); --end component; -- --component fx3_pll is -- port ( -- refclk : in std_logic; -- rst : in std_logic; -- outclk_0 : out std_logic; -- locked : out std_logic -- ); --end component; component nios_system is port ( clk_clk : in std_logic := 'X'; -- clk reset_reset_n : in std_logic := 'X'; -- reset_n dac_MISO : in std_logic := 'X'; -- MISO dac_MOSI : out std_logic; -- MOSI dac_SCLK : out std_logic; -- SCLK dac_SS_n : out std_logic_vector(1 downto 0); -- SS_n spi_MISO : in std_logic := 'X'; -- MISO spi_MOSI : out std_logic; -- MOSI spi_SCLK : out std_logic; -- SCLK spi_SS_n : out std_logic; -- SS_n oc_i2c_scl_pad_o : out std_logic; oc_i2c_scl_padoen_o : out std_logic; oc_i2c_sda_pad_i : in std_logic; oc_i2c_sda_pad_o : out std_logic; oc_i2c_sda_padoen_o : out std_logic; oc_i2c_arst_i : in std_logic; oc_i2c_scl_pad_i : in std_logic; gpio_in_port : in std_logic_vector(31 downto 0); gpio_out_port : out std_logic_vector(31 downto 0); xb_gpio_in_port : in std_logic_vector(31 downto 0) := (others => 'X'); xb_gpio_out_port : out std_logic_vector(31 downto 0); xb_gpio_dir_export : out std_logic_vector(31 downto 0); command_serial_in : in std_logic ; command_serial_out : out std_logic ; correction_rx_phase_gain_export : out std_logic_vector(31 downto 0); correction_tx_phase_gain_export : out std_logic_vector(31 downto 0); rx_tamer_ts_sync_in : in std_logic; rx_tamer_ts_sync_out : out std_logic ; rx_tamer_ts_pps : in std_logic ; rx_tamer_ts_clock : in std_logic ; rx_tamer_ts_reset : in std_logic; rx_tamer_ts_time : out std_logic_vector(63 downto 0) ; tx_tamer_ts_sync_in : in std_logic; tx_tamer_ts_sync_out : out std_logic ; tx_tamer_ts_pps : in std_logic ; tx_tamer_ts_clock : in std_logic ; tx_tamer_ts_reset : in std_logic; tx_tamer_ts_time : out std_logic_vector(63 downto 0); vctcxo_tamer_tune_ref : in std_logic; vctcxo_tamer_vctcxo_clock : in std_logic; tx_trigger_ctl_in_port : in std_logic_vector(7 downto 0) := (others => '0'); tx_trigger_ctl_out_port : out std_logic_vector(7 downto 0); rx_trigger_ctl_in_port : in std_logic_vector(7 downto 0) := (others => '0'); rx_trigger_ctl_out_port : out std_logic_vector(7 downto 0); arbiter_request : in std_logic_vector(1 downto 0) := (others => '0'); arbiter_granted : out std_logic_vector(1 downto 0) := (others => '0'); arbiter_ack : in std_logic_vector(1 downto 0) := (others => '0'); agc_dc_i_max_export : out std_logic_vector(15 downto 0); agc_dc_i_mid_export : out std_logic_vector(15 downto 0); agc_dc_i_min_export : out std_logic_vector(15 downto 0); agc_dc_q_max_export : out std_logic_vector(15 downto 0); agc_dc_q_mid_export : out std_logic_vector(15 downto 0); agc_dc_q_min_export : out std_logic_vector(15 downto 0) ); end component; -- ======================================================================== -- TYPEDEFS -- ======================================================================== constant TX_FIFO_WWIDTH : natural := 32; -- write side data width constant TX_FIFO_RWIDTH : natural := 32; -- read side data width constant TX_FIFO_LENGTH : natural := 16384; -- samples constant RX_FIFO_WWIDTH : natural := 32; -- write side data width constant RX_FIFO_RWIDTH : natural := 32; -- read side data width constant RX_FIFO_LENGTH : natural := 4096; -- samples constant ADSB_FIFO_WWIDTH : natural := 128; -- write side data width constant ADSB_FIFO_RWIDTH : natural := 32; -- read side data width constant ADSB_FIFO_LENGTH : natural := 1024; -- samples constant LOOPBACK_FIFO_WWIDTH : natural := 32; -- write side data width constant LOOPBACK_FIFO_RWIDTH : natural := 32; -- read side data width constant LOOPBACK_FIFO_LENGTH : natural := 512; -- samples constant META_FIFO_TX_WWIDTH : natural := 32; -- write side data width constant META_FIFO_TX_RWIDTH : natural := 128; -- read side data width constant META_FIFO_TX_LENGTH : natural := 32; -- 32-bit words constant META_FIFO_RX_WWIDTH : natural := 128; -- write side data width constant META_FIFO_RX_RWIDTH : natural := 32; -- read side data width constant META_FIFO_RX_LENGTH : natural := 32; -- 32-bit words type tx_fifo_t is record aclr : std_logic; wclock : std_logic; wdata : std_logic_vector(TX_FIFO_WWIDTH-1 downto 0); wreq : std_logic; wempty : std_logic; wfull : std_logic; wused : std_logic_vector(compute_wrusedw_high(TX_FIFO_LENGTH, "OFF") downto 0); rclock : std_logic; rdata : std_logic_vector(TX_FIFO_RWIDTH-1 downto 0); rreq : std_logic; rempty : std_logic; rfull : std_logic; rused : std_logic_vector(compute_rdusedw_high(TX_FIFO_LENGTH, TX_FIFO_WWIDTH, TX_FIFO_RWIDTH, "OFF") downto 0); end record; type rx_fifo_t is record aclr : std_logic; wclock : std_logic; wdata : std_logic_vector(RX_FIFO_WWIDTH-1 downto 0); wreq : std_logic; wempty : std_logic; wfull : std_logic; wused : std_logic_vector(compute_wrusedw_high(RX_FIFO_LENGTH, "OFF") downto 0); rclock : std_logic; rdata : std_logic_vector(RX_FIFO_RWIDTH-1 downto 0); rreq : std_logic; rempty : std_logic; rfull : std_logic; rused : std_logic_vector(compute_rdusedw_high(RX_FIFO_LENGTH, RX_FIFO_WWIDTH, RX_FIFO_RWIDTH, "OFF") downto 0); end record; type adsb_fifo_t is record aclr : std_logic; wclock : std_logic; wdata : std_logic_vector(ADSB_FIFO_WWIDTH-1 downto 0); wreq : std_logic; wempty : std_logic; wfull : std_logic; wused : std_logic_vector(compute_wrusedw_high(ADSB_FIFO_LENGTH, "OFF") downto 0); rclock : std_logic; rdata : std_logic_vector(ADSB_FIFO_RWIDTH-1 downto 0); rreq : std_logic; rempty : std_logic; rfull : std_logic; rused : std_logic_vector(compute_rdusedw_high(ADSB_FIFO_LENGTH, ADSB_FIFO_WWIDTH, ADSB_FIFO_RWIDTH, "OFF") downto 0); end record; type loopback_fifo_t is record aclr : std_logic; wclock : std_logic; wdata : std_logic_vector(LOOPBACK_FIFO_WWIDTH-1 downto 0); wreq : std_logic; wempty : std_logic; wfull : std_logic; wused : std_logic_vector(compute_wrusedw_high(LOOPBACK_FIFO_LENGTH, "OFF") downto 0); rclock : std_logic; rdata : std_logic_vector(LOOPBACK_FIFO_RWIDTH-1 downto 0); rreq : std_logic; rempty : std_logic; rfull : std_logic; rused : std_logic_vector(compute_rdusedw_high(LOOPBACK_FIFO_LENGTH, LOOPBACK_FIFO_WWIDTH, LOOPBACK_FIFO_RWIDTH, "OFF") downto 0); end record; type meta_fifo_tx_t is record aclr : std_logic; wclock : std_logic; wdata : std_logic_vector(META_FIFO_TX_WWIDTH-1 downto 0); wreq : std_logic; wempty : std_logic; wfull : std_logic; wused : std_logic_vector(compute_wrusedw_high(META_FIFO_TX_LENGTH, "OFF") downto 0); rclock : std_logic; rdata : std_logic_vector(META_FIFO_TX_RWIDTH-1 downto 0); rreq : std_logic; rempty : std_logic; rfull : std_logic; rused : std_logic_vector(compute_rdusedw_high(META_FIFO_TX_LENGTH, META_FIFO_TX_WWIDTH, META_FIFO_TX_RWIDTH, "OFF") downto 0); end record; type meta_fifo_rx_t is record aclr : std_logic; wclock : std_logic; wdata : std_logic_vector(META_FIFO_RX_WWIDTH-1 downto 0); wreq : std_logic; wempty : std_logic; wfull : std_logic; wused : std_logic_vector(compute_wrusedw_high(META_FIFO_RX_LENGTH, "OFF") downto 0); rclock : std_logic; rdata : std_logic_vector(META_FIFO_RX_RWIDTH-1 downto 0); rreq : std_logic; rempty : std_logic; rfull : std_logic; rused : std_logic_vector(compute_rdusedw_high(META_FIFO_RX_LENGTH, META_FIFO_RX_WWIDTH, META_FIFO_RX_RWIDTH, "OFF") downto 0); end record; type nios_gpo_t is record xb_mode : std_logic_vector(1 downto 0); packet_en : std_logic; agc_en : std_logic; agc_band_sel : std_logic; ts_div2 : std_logic; -- Not used in FPGA versions >= 0.3.0 meta_en : std_logic; led_mode : std_logic; leds : std_logic_vector(3 downto 1); rx_mux_sel : std_logic_vector(2 downto 0); usb_speed : std_logic; lms_rx_v : std_logic_vector(2 downto 1); lms_tx_v : std_logic_vector(2 downto 1); lms_tx_enable : std_logic; lms_rx_enable : std_logic; lms_reset : std_logic; end record; type nios_gpi_t is record -- Why? Are these used by host at all? nios_ss_n : std_logic_vector(1 downto 0); xb_mode2 : std_logic_vector(1 downto 0); -- Normal readback of Nios general-purpose outputs gpo_readback : nios_gpo_t; end record; type nios_gpio_t is record i : nios_gpi_t; o : nios_gpo_t; end record; -- ======================================================================== -- PACK FUNCTIONS -- pack a human-readable record/type into bits -- ======================================================================== function pack( x : nios_gpo_t ) return std_logic_vector; function pack( x : nios_gpi_t; core_present : std_logic) return std_logic_vector; -- ======================================================================== -- UNPACK FUNCTIONS -- unpack bits into a human-readable record/type -- ======================================================================== function unpack( x : std_logic_vector(31 downto 0) ) return nios_gpo_t; -- ======================================================================== -- TYPEDEF RESET CONSTANTS -- deferred to permit use of pack/unpack -- ======================================================================== constant TX_FIFO_T_DEFAULT : tx_fifo_t; constant RX_FIFO_T_DEFAULT : rx_fifo_t; constant ADSB_FIFO_T_DEFAULT : adsb_fifo_t; constant LOOPBACK_FIFO_T_DEFAULT : loopback_fifo_t; constant META_FIFO_TX_T_DEFAULT : meta_fifo_tx_t; constant META_FIFO_RX_T_DEFAULT : meta_fifo_rx_t; end package; package body bladerf_p is -- ======================================================================== -- PACK FUNCTIONS -- ======================================================================== function pack( x : nios_gpo_t ) return std_logic_vector is variable rv : std_logic_vector(31 downto 0) := (others => '0'); begin rv(31 downto 30) := x.xb_mode; -- AVAILABLE: x(29 downto 23); -- RESERVED: rv(22 downto 21) := x.xb_mode2; -- Why? Is this even needed? -- RESERVED: rv(20 downto 19) := x.nios_ss_n; -- Why? Is this even needed? rv(19) := x.packet_en; rv(18) := x.agc_en; rv(17) := x.ts_div2; -- Not used in FPGA versions >= 0.3.0 rv(16) := x.meta_en; rv(15) := x.led_mode; rv(14 downto 12) := x.leds; -- AVAILABLE: rv(11) rv(10 downto 8) := x.rx_mux_sel; rv(7) := x.usb_speed; rv(6 downto 5) := x.lms_rx_v; rv(4 downto 3) := x.lms_tx_v; rv(2) := x.lms_tx_enable; rv(1) := x.lms_rx_enable; rv(0) := x.lms_reset; return rv; end function; function pack( x : nios_gpi_t; core_present : std_logic ) return std_logic_vector is variable rv : std_logic_vector(31 downto 0) := (others => '0'); begin -- Readback of outputs rv := pack(x.gpo_readback); -- Inputs rv(28) := core_present; rv(22 downto 21) := x.xb_mode2; -- Why? Is this even needed? -- RESERVERD: rv(20 downto 19) := x.nios_ss_n; -- Why? Is this even needed? return rv; end function; -- ======================================================================== -- UNPACK FUNCTIONS -- ======================================================================== function unpack( x : std_logic_vector(31 downto 0) ) return nios_gpo_t is variable rv : nios_gpo_t; begin rv.xb_mode := x(31 downto 30); -- AVAILABLE: x(29 downto 23); --rv.xb_mode2 := x(22 downto 21); -- Why? Is this even needed? --rv.nios_ss_n := x(20 downto 19); -- Why? Is this even needed? rv.packet_en := x(19); rv.agc_en := x(18); rv.ts_div2 := x(17); -- Not used in FPGA versions >= 0.3.0 rv.meta_en := x(16); rv.led_mode := x(15); rv.leds := x(14 downto 12); -- Available: x(11) rv.rx_mux_sel := x(10 downto 8); rv.usb_speed := x(7); rv.lms_rx_v := x(6 downto 5); rv.agc_band_sel := rv.lms_rx_v(rv.lms_rx_v'low); rv.lms_tx_v := x(4 downto 3); rv.lms_tx_enable := x(2); rv.lms_rx_enable := x(1); rv.lms_reset := x(0); return rv; end function; -- ======================================================================== -- TYPEDEF RESET CONSTANTS -- ======================================================================== constant TX_FIFO_T_DEFAULT : tx_fifo_t := ( aclr => '1', wclock => '0', wdata => (others => '0'), wreq => '0', wempty => '1', wfull => '0', wused => (others => '0'), rclock => '0', rdata => (others => '0'), rreq => '0', rempty => '1', rfull => '0', rused => (others => '0') ); constant RX_FIFO_T_DEFAULT : rx_fifo_t := ( aclr => '1', wclock => '0', wdata => (others => '0'), wreq => '0', wempty => '1', wfull => '0', wused => (others => '0'), rclock => '0', rdata => (others => '0'), rreq => '0', rempty => '1', rfull => '0', rused => (others => '0') ); constant ADSB_FIFO_T_DEFAULT : adsb_fifo_t := ( aclr => '1', wclock => '0', wdata => (others => '0'), wreq => '0', wempty => '1', wfull => '0', wused => (others => '0'), rclock => '0', rdata => (others => '0'), rreq => '0', rempty => '1', rfull => '0', rused => (others => '0') ); constant LOOPBACK_FIFO_T_DEFAULT : loopback_fifo_t := ( aclr => '1', wclock => '0', wdata => (others => '0'), wreq => '0', wempty => '1', wfull => '0', wused => (others => '0'), rclock => '0', rdata => (others => '0'), rreq => '0', rempty => '1', rfull => '0', rused => (others => '0') ); constant META_FIFO_TX_T_DEFAULT : meta_fifo_tx_t := ( aclr => '1', wclock => '0', wdata => (others => '0'), wreq => '0', wempty => '1', wfull => '0', wused => (others => '0'), rclock => '0', rdata => (others => '0'), rreq => '0', rempty => '1', rfull => '0', rused => (others => '0') ); constant META_FIFO_RX_T_DEFAULT : meta_fifo_rx_t := ( aclr => '1', wclock => '0', wdata => (others => '0'), wreq => '0', wempty => '1', wfull => '0', wused => (others => '0'), rclock => '0', rdata => (others => '0'), rreq => '0', rempty => '1', rfull => '0', rused => (others => '0') ); end package body; bladeRF-2024.05/hdl/fpga/platforms/bladerf/vhdl/tb/000077500000000000000000000000001457144405000216255ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/platforms/bladerf/vhdl/tb/bladerf_tb.vhd000066400000000000000000000164361457144405000244260ustar00rootroot00000000000000-- Copyright (c) 2013 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; use ieee.math_real.all ; use ieee.math_complex.all ; library nuand ; entity bladerf_tb is end entity ; -- bladerf_tb architecture arch of bladerf_tb is constant C4_CLOCK_HALF_PERIOD : time := 1 sec * (1.0/38.4e6/2.0) ; type lms_rx_t is record clock : std_logic ; clock_out : std_logic ; data : signed(11 downto 0) ; enable : std_logic ; iq_select : std_logic ; end record ; type lms_tx_t is record clock : std_logic ; data : signed(11 downto 0) ; enable : std_logic ; iq_select : std_logic ; end record ; type lms_spi_t is record sclk : std_logic ; sen : std_logic ; sdio : std_logic ; sdo : std_logic ; end record ; type fx3_gpif_t is record pclk : std_logic ; gpif : std_logic_vector(31 downto 0) ; ctl : std_logic_vector(12 downto 0) ; end record ; type fx3_uart_t is record rxd : std_logic ; txd : std_logic ; cts : std_logic ; end record ; procedure nop( signal clock : in std_logic ; count : in natural ) is begin for i in 1 to count loop wait until rising_edge(clock) ; end loop ; end procedure ; signal c4_clock : std_logic := '1' ; signal lms_rx : lms_rx_t := ( clock => '1', data => (others =>'0'), clock_out => '1', iq_select => '1', enable => '0' ) ; signal lms_tx : lms_tx_t := ( clock => '1', data => (others =>'0'), enable => '1', iq_select => '1' ) ; signal lms_spi : lms_spi_t ; signal lms_pll_out : std_logic ; signal lms_reset : std_logic ; signal fx3_gpif : fx3_gpif_t ; signal fx3_uart : fx3_uart_t ; signal refexp_1pps : std_logic ; begin -- Main 38.4MHz clock input c4_clock <= not c4_clock after C4_CLOCK_HALF_PERIOD ; -- LMS 80MHz RX and TX clocks lms_tx.clock <= not lms_tx.clock after (1.0/80.0e6) * 1 sec ; lms_rx.clock <= not lms_rx.clock after (1.0/80.0e6) * 1 sec ; -- Top level of the FPGA U_bladerf : entity nuand.bladerf port map ( -- Main system clock c4_clock => c4_clock, -- VCTCXO DAC dac_sclk => open, dac_sdi => open, dac_sdo => '0', dac_csx => open, -- LEDs led => open, -- LMS RX Interface lms_rx_clock_out => lms_rx.clock_out, lms_rx_data => lms_rx.data, lms_rx_enable => lms_rx.enable, lms_rx_iq_select => lms_rx.iq_select, lms_rx_v => open, -- LMS TX Interface c4_tx_clock => lms_tx.clock, lms_tx_data => lms_tx.data, lms_tx_enable => lms_tx.enable, lms_tx_iq_select => lms_tx.iq_select, lms_tx_v => open, -- LMS SPI Interface lms_sclk => lms_spi.sclk, lms_sen => lms_spi.sen, lms_sdio => lms_spi.sdio, lms_sdo => lms_spi.sdo, -- LMS Control Interface lms_pll_out => lms_pll_out, lms_reset => lms_reset, -- FX3 Interface fx3_pclk => fx3_gpif.pclk, fx3_gpif => fx3_gpif.gpif, fx3_ctl => fx3_gpif.ctl, fx3_uart_rxd => fx3_uart.rxd, fx3_uart_txd => fx3_uart.txd, fx3_uart_cts => fx3_uart.cts, -- Reference signals ref_vctcxo_tune => refexp_1pps, ref_sma_clock => '0', -- Mini expansion mini_exp1 => open, mini_exp2 => open, -- Expansion Interface exp_present => '0', exp_spi_clock => open, exp_spi_miso => '0', exp_spi_mosi => open, exp_clock_in => '0', exp_gpio => open ) ; -- LMS6002D Model U_lms6002d : entity nuand.lms6002d_model port map ( -- LMS RX Interface rx_clock => lms_rx.clock, rx_clock_out => lms_rx.clock_out, rx_data => lms_rx.data, rx_enable => lms_rx.enable, rx_iq_select => lms_rx.iq_select, -- LMS TX Interface tx_clock => lms_tx.clock, tx_data => lms_tx.data, tx_enable => lms_tx.enable, tx_iq_select => lms_tx.iq_select, -- LMS SPI Interface sclk => lms_spi.sclk, sen => lms_spi.sen, sdio => lms_spi.sdio, sdo => lms_spi.sdo, -- LMS Control Interface pll_out => lms_pll_out, resetx => lms_reset ) ; -- FX3 Model U_fx3 : entity nuand.fx3_model(dma) port map ( -- GPIF fx3_pclk => fx3_gpif.pclk, fx3_gpif => fx3_gpif.gpif, fx3_ctl => fx3_gpif.ctl, -- UART fx3_uart_rxd => fx3_uart.rxd, fx3_uart_txd => fx3_uart.txd, fx3_uart_cts => fx3_uart.cts, fx3_rx_en => '1', fx3_rx_meta_en => '1', fx3_tx_en => '1', fx3_tx_meta_en => '1' ) ; -- Create an accurate 1pps signal that is 1 ms wide create_1pps : process constant PULSE_PERIOD : time := 1 sec ; constant PULSE_WIDTH : time := 1 ms ; begin if( now = 0 ps ) then refexp_1pps <= '0' ; else refexp_1pps <= '1' ; end if ; wait for PULSE_WIDTH ; refexp_1pps <= '0' ; wait for PULSE_PERIOD - PULSE_WIDTH ; end process ; -- Stimulus tb : process begin wait for 10 ms ; report "-- End of simulation --" severity failure ; end process ; end architecture ; -- arch bladeRF-2024.05/hdl/fpga/platforms/bladerf/vhdl/tb/nios_system.vhd000066400000000000000000000135771457144405000247210ustar00rootroot00000000000000library ieee ; use ieee.std_logic_1164.all ; entity nios_system is port ( clk_clk : in std_logic := '0'; -- clk.clk command_serial_in : in std_logic := '0'; -- command.serial_in command_serial_out : out std_logic; -- .serial_out correction_rx_phase_gain_export : out std_logic_vector(31 downto 0); -- correction_rx_phase_gain.export correction_tx_phase_gain_export : out std_logic_vector(31 downto 0); -- correction_tx_phase_gain.export dac_MISO : in std_logic := '0'; -- dac.MISO dac_MOSI : out std_logic; -- .MOSI dac_SCLK : out std_logic; -- .SCLK dac_SS_n : out std_logic_vector(1 downto 0); -- .SS_n gpio_in_port : in std_logic_vector(31 downto 0); gpio_out_port : out std_logic_vector(31 downto 0); oc_i2c_scl_pad_o : out std_logic; -- oc_i2c.scl_pad_o oc_i2c_scl_padoen_o : out std_logic; -- .scl_padoen_o oc_i2c_sda_pad_i : in std_logic := '0'; -- .sda_pad_i oc_i2c_sda_pad_o : out std_logic; -- .sda_pad_o oc_i2c_sda_padoen_o : out std_logic; -- .sda_padoen_o oc_i2c_arst_i : in std_logic := '0'; -- .arst_i oc_i2c_scl_pad_i : in std_logic := '0'; -- .scl_pad_i reset_reset_n : in std_logic := '0'; -- reset.reset_n rx_tamer_ts_sync_in : in std_logic := '0'; -- rx_tamer.ts_sync_in rx_tamer_ts_sync_out : out std_logic; -- .ts_sync_out rx_tamer_ts_pps : in std_logic := '0'; -- .ts_pps rx_tamer_ts_clock : in std_logic := '0'; -- .ts_clock rx_tamer_ts_reset : in std_logic := '0'; -- .ts_reset rx_tamer_ts_time : out std_logic_vector(63 downto 0); -- .ts_time spi_MISO : in std_logic := '0'; -- spi.MISO spi_MOSI : out std_logic; -- .MOSI spi_SCLK : out std_logic; -- .SCLK spi_SS_n : out std_logic; -- .SS_n tx_tamer_ts_sync_in : in std_logic := '0'; -- tx_tamer.ts_sync_in tx_tamer_ts_sync_out : out std_logic; -- .ts_sync_out tx_tamer_ts_pps : in std_logic := '0'; -- .ts_pps tx_tamer_ts_clock : in std_logic := '0'; -- .ts_clock tx_tamer_ts_reset : in std_logic := '0'; -- .ts_reset tx_tamer_ts_time : out std_logic_vector(63 downto 0); -- .ts_time xb_gpio_in_port : in std_logic_vector(31 downto 0) := (others => '0'); -- xb_gpio.in_port xb_gpio_out_port : out std_logic_vector(31 downto 0); -- .out_port xb_gpio_dir_export : out std_logic_vector(31 downto 0); -- xb_gpio_dir.export vctcxo_tamer_tune_ref : in std_logic; vctcxo_tamer_vctcxo_clock : in std_logic; tx_trigger_ctl_in_port : in std_logic_vector(7 downto 0); tx_trigger_ctl_out_port : out std_logic_vector(7 downto 0); rx_trigger_ctl_in_port : in std_logic_vector(7 downto 0); rx_trigger_ctl_out_port : out std_logic_vector(7 downto 0) ); end entity ; architecture sim of nios_system is begin command_serial_out <= '1' ; correction_rx_phase_gain_export <= x"00001000" ; correction_tx_phase_gain_export <= x"00001000" ; dac_MOSI <= '0' ; dac_SCLK <= '0' ; dac_SS_n <= (others =>'1') ; gpio_out_port <= x"0001_0157" after 1 us ; oc_i2c_scl_pad_o <= '0' ; oc_i2c_scl_padoen_o <= '1' ; oc_i2c_sda_pad_o <= '0' ; oc_i2c_sda_padoen_o <= '1' ; rx_tamer_ts_sync_out <= '0' ; rx_tamer_ts_time <= (others =>'0') ; spi_MOSI <= '0' ; spi_SCLK <= '0' ; spi_SS_n <= '1' ; tx_tamer_ts_sync_out <= '0' ; tx_tamer_ts_time <= (others =>'0') ; xb_gpio_out_port <= (others =>'0') ; xb_gpio_dir_export <= (others =>'0') ; end architecture ; bladeRF-2024.05/hdl/fpga/platforms/bladerf/vhdl/wrappers/000077500000000000000000000000001457144405000230635ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/platforms/bladerf/vhdl/wrappers/adsbfifo.vhd000066400000000000000000000073521457144405000253520ustar00rootroot00000000000000-- The only purpose for this wrapper is to set sane defaults for the -- common_dcfifo generics. These defaults may be overridden as needed. library ieee; use ieee.std_logic_1164.all; library work; use work.common_dcfifo_p.all; entity adsbfifo is generic ( ADD_RAM_OUTPUT_REGISTER : string := "OFF"; ADD_USEDW_MSB_BIT : string := "ON"; CLOCKS_ARE_SYNCHRONIZED : string := "FALSE"; DELAY_RDUSEDW : natural := 1; DELAY_WRUSEDW : natural := 1; INTENDED_DEVICE_FAMILY : string := "Cyclone IV E"; LPM_NUMWORDS : natural := 512; LPM_SHOWAHEAD : string := "ON"; LPM_WIDTH : natural := 128; LPM_WIDTH_R : natural := 32; OVERFLOW_CHECKING : string := "ON"; RDSYNC_DELAYPIPE : natural := 5; READ_ACLR_SYNCH : string := "OFF"; UNDERFLOW_CHECKING : string := "ON"; USE_EAB : string := "ON"; WRITE_ACLR_SYNCH : string := "ON"; WRSYNC_DELAYPIPE : natural := 5 ); port ( aclr : in std_logic := '0'; data : in std_logic_vector(LPM_WIDTH-1 downto 0); rdclk : in std_logic; rdreq : in std_logic; wrclk : in std_logic; wrreq : in std_logic; q : out std_logic_vector(LPM_WIDTH_R-1 downto 0); rdempty : out std_logic; rdfull : out std_logic; rdusedw : out std_logic_vector(compute_rdusedw_high(LPM_NUMWORDS, LPM_WIDTH, LPM_WIDTH_R, ADD_USEDW_MSB_BIT) downto 0); wrempty : out std_logic; wrfull : out std_logic; wrusedw : out std_logic_vector(compute_wrusedw_high(LPM_NUMWORDS, ADD_USEDW_MSB_BIT) downto 0) --eccstatus : out std_logic_vector(1 downto 0) ); end entity; architecture arch of adsbfifo is begin U_common_dcfifo : entity work.common_dcfifo generic map ( ADD_RAM_OUTPUT_REGISTER => ADD_RAM_OUTPUT_REGISTER, ADD_USEDW_MSB_BIT => ADD_USEDW_MSB_BIT, CLOCKS_ARE_SYNCHRONIZED => CLOCKS_ARE_SYNCHRONIZED, DELAY_RDUSEDW => DELAY_RDUSEDW, DELAY_WRUSEDW => DELAY_WRUSEDW, INTENDED_DEVICE_FAMILY => INTENDED_DEVICE_FAMILY, --ENABLE_ECC => ENABLE_ECC, LPM_NUMWORDS => LPM_NUMWORDS, LPM_SHOWAHEAD => LPM_SHOWAHEAD, LPM_WIDTH => LPM_WIDTH, LPM_WIDTH_R => LPM_WIDTH_R, OVERFLOW_CHECKING => OVERFLOW_CHECKING, RDSYNC_DELAYPIPE => RDSYNC_DELAYPIPE, READ_ACLR_SYNCH => READ_ACLR_SYNCH, UNDERFLOW_CHECKING => UNDERFLOW_CHECKING, USE_EAB => USE_EAB, WRITE_ACLR_SYNCH => WRITE_ACLR_SYNCH, WRSYNC_DELAYPIPE => WRSYNC_DELAYPIPE ) port map ( aclr => aclr, data => data, rdclk => rdclk, rdreq => rdreq, wrclk => wrclk, wrreq => wrreq, q => q, rdempty => rdempty, rdfull => rdfull, rdusedw => rdusedw, wrempty => wrempty, wrfull => wrfull, wrusedw => wrusedw --eccstatus => eccstatus ); end architecture; bladeRF-2024.05/hdl/fpga/platforms/bladerf/vhdl/wrappers/lb_fifo.vhd000066400000000000000000000073501457144405000251730ustar00rootroot00000000000000-- The only purpose for this wrapper is to set sane defaults for the -- common_dcfifo generics. These defaults may be overridden as needed. library ieee; use ieee.std_logic_1164.all; library work; use work.common_dcfifo_p.all; entity lb_fifo is generic ( ADD_RAM_OUTPUT_REGISTER : string := "OFF"; ADD_USEDW_MSB_BIT : string := "OFF"; CLOCKS_ARE_SYNCHRONIZED : string := "FALSE"; DELAY_RDUSEDW : natural := 1; DELAY_WRUSEDW : natural := 1; INTENDED_DEVICE_FAMILY : string := "Cyclone IV E"; LPM_NUMWORDS : natural := 4096; LPM_SHOWAHEAD : string := "ON"; LPM_WIDTH : natural := 32; LPM_WIDTH_R : natural := 32; OVERFLOW_CHECKING : string := "ON"; RDSYNC_DELAYPIPE : natural := 5; READ_ACLR_SYNCH : string := "ON"; UNDERFLOW_CHECKING : string := "ON"; USE_EAB : string := "ON"; WRITE_ACLR_SYNCH : string := "ON"; WRSYNC_DELAYPIPE : natural := 5 ); port ( aclr : in std_logic := '0'; data : in std_logic_vector(LPM_WIDTH-1 downto 0); rdclk : in std_logic; rdreq : in std_logic; wrclk : in std_logic; wrreq : in std_logic; q : out std_logic_vector(LPM_WIDTH_R-1 downto 0); rdempty : out std_logic; rdfull : out std_logic; rdusedw : out std_logic_vector(compute_rdusedw_high(LPM_NUMWORDS, LPM_WIDTH, LPM_WIDTH_R, ADD_USEDW_MSB_BIT) downto 0); wrempty : out std_logic; wrfull : out std_logic; wrusedw : out std_logic_vector(compute_wrusedw_high(LPM_NUMWORDS, ADD_USEDW_MSB_BIT) downto 0) --eccstatus : out std_logic_vector(1 downto 0) ); end entity; architecture arch of lb_fifo is begin U_common_dcfifo : entity work.common_dcfifo generic map ( ADD_RAM_OUTPUT_REGISTER => ADD_RAM_OUTPUT_REGISTER, ADD_USEDW_MSB_BIT => ADD_USEDW_MSB_BIT, CLOCKS_ARE_SYNCHRONIZED => CLOCKS_ARE_SYNCHRONIZED, DELAY_RDUSEDW => DELAY_RDUSEDW, DELAY_WRUSEDW => DELAY_WRUSEDW, INTENDED_DEVICE_FAMILY => INTENDED_DEVICE_FAMILY, --ENABLE_ECC => ENABLE_ECC, LPM_NUMWORDS => LPM_NUMWORDS, LPM_SHOWAHEAD => LPM_SHOWAHEAD, LPM_WIDTH => LPM_WIDTH, LPM_WIDTH_R => LPM_WIDTH_R, OVERFLOW_CHECKING => OVERFLOW_CHECKING, RDSYNC_DELAYPIPE => RDSYNC_DELAYPIPE, READ_ACLR_SYNCH => READ_ACLR_SYNCH, UNDERFLOW_CHECKING => UNDERFLOW_CHECKING, USE_EAB => USE_EAB, WRITE_ACLR_SYNCH => WRITE_ACLR_SYNCH, WRSYNC_DELAYPIPE => WRSYNC_DELAYPIPE ) port map ( aclr => aclr, data => data, rdclk => rdclk, rdreq => rdreq, wrclk => wrclk, wrreq => wrreq, q => q, rdempty => rdempty, rdfull => rdfull, rdusedw => rdusedw, wrempty => wrempty, wrfull => wrfull, wrusedw => wrusedw --eccstatus => eccstatus ); end architecture; bladeRF-2024.05/hdl/fpga/platforms/bladerf/vhdl/wrappers/rx_fifo.vhd000066400000000000000000000073501457144405000252270ustar00rootroot00000000000000-- The only purpose for this wrapper is to set sane defaults for the -- common_dcfifo generics. These defaults may be overridden as needed. library ieee; use ieee.std_logic_1164.all; library work; use work.common_dcfifo_p.all; entity rx_fifo is generic ( ADD_RAM_OUTPUT_REGISTER : string := "OFF"; ADD_USEDW_MSB_BIT : string := "OFF"; CLOCKS_ARE_SYNCHRONIZED : string := "FALSE"; DELAY_RDUSEDW : natural := 1; DELAY_WRUSEDW : natural := 1; INTENDED_DEVICE_FAMILY : string := "Cyclone IV E"; LPM_NUMWORDS : natural := 4096; LPM_SHOWAHEAD : string := "ON"; LPM_WIDTH : natural := 32; LPM_WIDTH_R : natural := 32; OVERFLOW_CHECKING : string := "ON"; RDSYNC_DELAYPIPE : natural := 5; READ_ACLR_SYNCH : string := "ON"; UNDERFLOW_CHECKING : string := "ON"; USE_EAB : string := "ON"; WRITE_ACLR_SYNCH : string := "ON"; WRSYNC_DELAYPIPE : natural := 5 ); port ( aclr : in std_logic := '0'; data : in std_logic_vector(LPM_WIDTH-1 downto 0); rdclk : in std_logic; rdreq : in std_logic; wrclk : in std_logic; wrreq : in std_logic; q : out std_logic_vector(LPM_WIDTH_R-1 downto 0); rdempty : out std_logic; rdfull : out std_logic; rdusedw : out std_logic_vector(compute_rdusedw_high(LPM_NUMWORDS, LPM_WIDTH, LPM_WIDTH_R, ADD_USEDW_MSB_BIT) downto 0); wrempty : out std_logic; wrfull : out std_logic; wrusedw : out std_logic_vector(compute_wrusedw_high(LPM_NUMWORDS, ADD_USEDW_MSB_BIT) downto 0) --eccstatus : out std_logic_vector(1 downto 0) ); end entity; architecture arch of rx_fifo is begin U_common_dcfifo : entity work.common_dcfifo generic map ( ADD_RAM_OUTPUT_REGISTER => ADD_RAM_OUTPUT_REGISTER, ADD_USEDW_MSB_BIT => ADD_USEDW_MSB_BIT, CLOCKS_ARE_SYNCHRONIZED => CLOCKS_ARE_SYNCHRONIZED, DELAY_RDUSEDW => DELAY_RDUSEDW, DELAY_WRUSEDW => DELAY_WRUSEDW, INTENDED_DEVICE_FAMILY => INTENDED_DEVICE_FAMILY, --ENABLE_ECC => ENABLE_ECC, LPM_NUMWORDS => LPM_NUMWORDS, LPM_SHOWAHEAD => LPM_SHOWAHEAD, LPM_WIDTH => LPM_WIDTH, LPM_WIDTH_R => LPM_WIDTH_R, OVERFLOW_CHECKING => OVERFLOW_CHECKING, RDSYNC_DELAYPIPE => RDSYNC_DELAYPIPE, READ_ACLR_SYNCH => READ_ACLR_SYNCH, UNDERFLOW_CHECKING => UNDERFLOW_CHECKING, USE_EAB => USE_EAB, WRITE_ACLR_SYNCH => WRITE_ACLR_SYNCH, WRSYNC_DELAYPIPE => WRSYNC_DELAYPIPE ) port map ( aclr => aclr, data => data, rdclk => rdclk, rdreq => rdreq, wrclk => wrclk, wrreq => wrreq, q => q, rdempty => rdempty, rdfull => rdfull, rdusedw => rdusedw, wrempty => wrempty, wrfull => wrfull, wrusedw => wrusedw --eccstatus => eccstatus ); end architecture; bladeRF-2024.05/hdl/fpga/platforms/bladerf/vhdl/wrappers/rx_meta_fifo.vhd000066400000000000000000000073611457144405000262370ustar00rootroot00000000000000-- The only purpose for this wrapper is to set sane defaults for the -- common_dcfifo generics. These defaults may be overridden as needed. library ieee; use ieee.std_logic_1164.all; library work; use work.common_dcfifo_p.all; entity rx_meta_fifo is generic ( ADD_RAM_OUTPUT_REGISTER : string := "OFF"; ADD_USEDW_MSB_BIT : string := "OFF"; CLOCKS_ARE_SYNCHRONIZED : string := "FALSE"; DELAY_RDUSEDW : natural := 1; DELAY_WRUSEDW : natural := 1; INTENDED_DEVICE_FAMILY : string := "Cyclone IV E"; LPM_NUMWORDS : natural := 32; LPM_SHOWAHEAD : string := "ON"; LPM_WIDTH : natural := 128; LPM_WIDTH_R : natural := 32; OVERFLOW_CHECKING : string := "ON"; RDSYNC_DELAYPIPE : natural := 5; READ_ACLR_SYNCH : string := "ON"; UNDERFLOW_CHECKING : string := "ON"; USE_EAB : string := "ON"; WRITE_ACLR_SYNCH : string := "ON"; WRSYNC_DELAYPIPE : natural := 5 ); port ( aclr : in std_logic := '0'; data : in std_logic_vector(LPM_WIDTH-1 downto 0); rdclk : in std_logic; rdreq : in std_logic; wrclk : in std_logic; wrreq : in std_logic; q : out std_logic_vector(LPM_WIDTH_R-1 downto 0); rdempty : out std_logic; rdfull : out std_logic; rdusedw : out std_logic_vector(compute_rdusedw_high(LPM_NUMWORDS, LPM_WIDTH, LPM_WIDTH_R, ADD_USEDW_MSB_BIT) downto 0); wrempty : out std_logic; wrfull : out std_logic; wrusedw : out std_logic_vector(compute_wrusedw_high(LPM_NUMWORDS, ADD_USEDW_MSB_BIT) downto 0) --eccstatus : out std_logic_vector(1 downto 0) ); end entity; architecture arch of rx_meta_fifo is begin U_common_dcfifo : entity work.common_dcfifo generic map ( ADD_RAM_OUTPUT_REGISTER => ADD_RAM_OUTPUT_REGISTER, ADD_USEDW_MSB_BIT => ADD_USEDW_MSB_BIT, CLOCKS_ARE_SYNCHRONIZED => CLOCKS_ARE_SYNCHRONIZED, DELAY_RDUSEDW => DELAY_RDUSEDW, DELAY_WRUSEDW => DELAY_WRUSEDW, INTENDED_DEVICE_FAMILY => INTENDED_DEVICE_FAMILY, --ENABLE_ECC => ENABLE_ECC, LPM_NUMWORDS => LPM_NUMWORDS, LPM_SHOWAHEAD => LPM_SHOWAHEAD, LPM_WIDTH => LPM_WIDTH, LPM_WIDTH_R => LPM_WIDTH_R, OVERFLOW_CHECKING => OVERFLOW_CHECKING, RDSYNC_DELAYPIPE => RDSYNC_DELAYPIPE, READ_ACLR_SYNCH => READ_ACLR_SYNCH, UNDERFLOW_CHECKING => UNDERFLOW_CHECKING, USE_EAB => USE_EAB, WRITE_ACLR_SYNCH => WRITE_ACLR_SYNCH, WRSYNC_DELAYPIPE => WRSYNC_DELAYPIPE ) port map ( aclr => aclr, data => data, rdclk => rdclk, rdreq => rdreq, wrclk => wrclk, wrreq => wrreq, q => q, rdempty => rdempty, rdfull => rdfull, rdusedw => rdusedw, wrempty => wrempty, wrfull => wrfull, wrusedw => wrusedw --eccstatus => eccstatus ); end architecture; bladeRF-2024.05/hdl/fpga/platforms/bladerf/vhdl/wrappers/tx_fifo.vhd000066400000000000000000000073501457144405000252310ustar00rootroot00000000000000-- The only purpose for this wrapper is to set sane defaults for the -- common_dcfifo generics. These defaults may be overridden as needed. library ieee; use ieee.std_logic_1164.all; library work; use work.common_dcfifo_p.all; entity tx_fifo is generic ( ADD_RAM_OUTPUT_REGISTER : string := "OFF"; ADD_USEDW_MSB_BIT : string := "OFF"; CLOCKS_ARE_SYNCHRONIZED : string := "FALSE"; DELAY_RDUSEDW : natural := 1; DELAY_WRUSEDW : natural := 1; INTENDED_DEVICE_FAMILY : string := "Cyclone IV E"; LPM_NUMWORDS : natural := 4096; LPM_SHOWAHEAD : string := "ON"; LPM_WIDTH : natural := 32; LPM_WIDTH_R : natural := 32; OVERFLOW_CHECKING : string := "ON"; RDSYNC_DELAYPIPE : natural := 5; READ_ACLR_SYNCH : string := "ON"; UNDERFLOW_CHECKING : string := "ON"; USE_EAB : string := "ON"; WRITE_ACLR_SYNCH : string := "ON"; WRSYNC_DELAYPIPE : natural := 5 ); port ( aclr : in std_logic := '0'; data : in std_logic_vector(LPM_WIDTH-1 downto 0); rdclk : in std_logic; rdreq : in std_logic; wrclk : in std_logic; wrreq : in std_logic; q : out std_logic_vector(LPM_WIDTH_R-1 downto 0); rdempty : out std_logic; rdfull : out std_logic; rdusedw : out std_logic_vector(compute_rdusedw_high(LPM_NUMWORDS, LPM_WIDTH, LPM_WIDTH_R, ADD_USEDW_MSB_BIT) downto 0); wrempty : out std_logic; wrfull : out std_logic; wrusedw : out std_logic_vector(compute_wrusedw_high(LPM_NUMWORDS, ADD_USEDW_MSB_BIT) downto 0) --eccstatus : out std_logic_vector(1 downto 0) ); end entity; architecture arch of tx_fifo is begin U_common_dcfifo : entity work.common_dcfifo generic map ( ADD_RAM_OUTPUT_REGISTER => ADD_RAM_OUTPUT_REGISTER, ADD_USEDW_MSB_BIT => ADD_USEDW_MSB_BIT, CLOCKS_ARE_SYNCHRONIZED => CLOCKS_ARE_SYNCHRONIZED, DELAY_RDUSEDW => DELAY_RDUSEDW, DELAY_WRUSEDW => DELAY_WRUSEDW, INTENDED_DEVICE_FAMILY => INTENDED_DEVICE_FAMILY, --ENABLE_ECC => ENABLE_ECC, LPM_NUMWORDS => LPM_NUMWORDS, LPM_SHOWAHEAD => LPM_SHOWAHEAD, LPM_WIDTH => LPM_WIDTH, LPM_WIDTH_R => LPM_WIDTH_R, OVERFLOW_CHECKING => OVERFLOW_CHECKING, RDSYNC_DELAYPIPE => RDSYNC_DELAYPIPE, READ_ACLR_SYNCH => READ_ACLR_SYNCH, UNDERFLOW_CHECKING => UNDERFLOW_CHECKING, USE_EAB => USE_EAB, WRITE_ACLR_SYNCH => WRITE_ACLR_SYNCH, WRSYNC_DELAYPIPE => WRSYNC_DELAYPIPE ) port map ( aclr => aclr, data => data, rdclk => rdclk, rdreq => rdreq, wrclk => wrclk, wrreq => wrreq, q => q, rdempty => rdempty, rdfull => rdfull, rdusedw => rdusedw, wrempty => wrempty, wrfull => wrfull, wrusedw => wrusedw --eccstatus => eccstatus ); end architecture; bladeRF-2024.05/hdl/fpga/platforms/bladerf/vhdl/wrappers/tx_meta_fifo.vhd000066400000000000000000000073611457144405000262410ustar00rootroot00000000000000-- The only purpose for this wrapper is to set sane defaults for the -- common_dcfifo generics. These defaults may be overridden as needed. library ieee; use ieee.std_logic_1164.all; library work; use work.common_dcfifo_p.all; entity tx_meta_fifo is generic ( ADD_RAM_OUTPUT_REGISTER : string := "OFF"; ADD_USEDW_MSB_BIT : string := "OFF"; CLOCKS_ARE_SYNCHRONIZED : string := "FALSE"; DELAY_RDUSEDW : natural := 1; DELAY_WRUSEDW : natural := 1; INTENDED_DEVICE_FAMILY : string := "Cyclone IV E"; LPM_NUMWORDS : natural := 32; LPM_SHOWAHEAD : string := "ON"; LPM_WIDTH : natural := 32; LPM_WIDTH_R : natural := 128; OVERFLOW_CHECKING : string := "ON"; RDSYNC_DELAYPIPE : natural := 5; READ_ACLR_SYNCH : string := "ON"; UNDERFLOW_CHECKING : string := "ON"; USE_EAB : string := "ON"; WRITE_ACLR_SYNCH : string := "ON"; WRSYNC_DELAYPIPE : natural := 5 ); port ( aclr : in std_logic := '0'; data : in std_logic_vector(LPM_WIDTH-1 downto 0); rdclk : in std_logic; rdreq : in std_logic; wrclk : in std_logic; wrreq : in std_logic; q : out std_logic_vector(LPM_WIDTH_R-1 downto 0); rdempty : out std_logic; rdfull : out std_logic; rdusedw : out std_logic_vector(compute_rdusedw_high(LPM_NUMWORDS, LPM_WIDTH, LPM_WIDTH_R, ADD_USEDW_MSB_BIT) downto 0); wrempty : out std_logic; wrfull : out std_logic; wrusedw : out std_logic_vector(compute_wrusedw_high(LPM_NUMWORDS, ADD_USEDW_MSB_BIT) downto 0) --eccstatus : out std_logic_vector(1 downto 0) ); end entity; architecture arch of tx_meta_fifo is begin U_common_dcfifo : entity work.common_dcfifo generic map ( ADD_RAM_OUTPUT_REGISTER => ADD_RAM_OUTPUT_REGISTER, ADD_USEDW_MSB_BIT => ADD_USEDW_MSB_BIT, CLOCKS_ARE_SYNCHRONIZED => CLOCKS_ARE_SYNCHRONIZED, DELAY_RDUSEDW => DELAY_RDUSEDW, DELAY_WRUSEDW => DELAY_WRUSEDW, INTENDED_DEVICE_FAMILY => INTENDED_DEVICE_FAMILY, --ENABLE_ECC => ENABLE_ECC, LPM_NUMWORDS => LPM_NUMWORDS, LPM_SHOWAHEAD => LPM_SHOWAHEAD, LPM_WIDTH => LPM_WIDTH, LPM_WIDTH_R => LPM_WIDTH_R, OVERFLOW_CHECKING => OVERFLOW_CHECKING, RDSYNC_DELAYPIPE => RDSYNC_DELAYPIPE, READ_ACLR_SYNCH => READ_ACLR_SYNCH, UNDERFLOW_CHECKING => UNDERFLOW_CHECKING, USE_EAB => USE_EAB, WRITE_ACLR_SYNCH => WRITE_ACLR_SYNCH, WRSYNC_DELAYPIPE => WRSYNC_DELAYPIPE ) port map ( aclr => aclr, data => data, rdclk => rdclk, rdreq => rdreq, wrclk => wrclk, wrreq => wrreq, q => q, rdempty => rdempty, rdfull => rdfull, rdusedw => rdusedw, wrempty => wrempty, wrfull => wrfull, wrusedw => wrusedw --eccstatus => eccstatus ); end architecture; bladeRF-2024.05/hdl/fpga/platforms/common/000077500000000000000000000000001457144405000201545ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/000077500000000000000000000000001457144405000215535ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/constraints/000077500000000000000000000000001457144405000241225ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/constraints/ad9361.sdc000066400000000000000000000112411457144405000255230ustar00rootroot00000000000000# bladeRF Design Constraints File for Analog Devices AD9361 discretes/SPI # # Copyright (c) 2017 Nuand LLC # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # References: # * AD9361 Reference Manual UG-570 # * Intel LVDS SERDES Transmitter/Receiver IP Cores User Guide UG-MF9504 ### AD9361 LVDS ### # Per Altera's documentation, the ALTLVDS_RX and ALTLVDS_TX IP cores are # guaranteed to function correctly, and timing constraints are not required. # (Exception: if they do not function correctly, then timing constraints are # required.) ### AD9361 SPI ### # NOTE: This relies on the Qsys SPI component having synchronizer stages # enabled (timing verified w/ depth of 2). This creates a false path for # the adi_spi_sdo port. # Create generated clocks. Input clock to the SPI block in the nios_system # is 80 MHz, output clock is 40 MHz, so it's a division by 2. set adi_sclk_divisor 2 create_generated_clock -name adi_sclk_reg -source [get_pins $system_clock] -divide_by $adi_sclk_divisor [get_registers {*rffe_spi|SCLK_reg}] create_generated_clock -name adi_sclk_pin -source [get_registers -no_duplicates {*rffe_spi|SCLK_reg}] [get_ports {adi_spi_sclk}] set_max_skew -from [get_clocks {adi_sclk_pin}] -to [get_ports {adi_spi_sclk}] 0.2 # Clock to Data-out times set adi_spi_data_tco_min 3.0 set adi_spi_data_tco_max 8.0 # Data-in to Clock setup and hold times set adi_spi_data_ts 2.0 set adi_spi_data_th 1.0 # Enable to Clock setup and hold times set adi_spi_enb_ts 1.0 set adi_spi_enb_th 0.0 # Constraints for adi_spi_do (AD9361 -> FPGA) # Max input delay = tco_max + (data_trace_delay + src_clock_trace_delay) set v [expr {$adi_spi_data_tco_max + ($adi_spi_do_trace_delay + $adi_spi_clk_trace_delay)}] set_input_delay -clock [get_clocks adi_sclk_pin] -max $v [get_ports adi_spi_sdo] # Min input delay = tco_min + (data_trace_delay + src_clock_trace_delay) set v [expr {$adi_spi_data_tco_min + ($adi_spi_do_trace_delay + $adi_spi_clk_trace_delay)}] set_input_delay -clock [get_clocks adi_sclk_pin] -min 3.119 [get_ports adi_spi_sdo] # Multicycle constraints set_multicycle_path -setup -start -from [get_clocks {adi_sclk_pin}] -to [get_clocks $system_clock] [expr {$adi_sclk_divisor}] set_multicycle_path -hold -start -from [get_clocks {adi_sclk_pin}] -to [get_clocks $system_clock] [expr {$adi_sclk_divisor}] # Constraints for adi_spi_di/enb (FPGA -> AD9361) # Max output delay = setup + (data_trace_delay + src_clock_trace_delay) set v [expr {$adi_spi_data_ts + ($adi_spi_di_trace_delay + $adi_spi_clk_trace_delay)}] set_output_delay -clock [get_clocks adi_sclk_pin] -max $v [get_ports {adi_spi_sdi}] set v [expr {$adi_spi_enb_ts + ($adi_spi_enb_trace_delay + $adi_spi_clk_trace_delay)}] set_output_delay -clock [get_clocks adi_sclk_pin] -max $v [get_ports {adi_spi_csn}] # Min output delay = -1 * hold + (data_trace_delay + src_clock_trace_delay) set v [expr {(-1 * $adi_spi_data_th) + ($adi_spi_di_trace_delay + $adi_spi_clk_trace_delay)}] set_output_delay -clock [get_clocks adi_sclk_pin] -min $v [get_ports {adi_spi_sdi}] set v [expr {(-1 * $adi_spi_enb_th) + ($adi_spi_enb_trace_delay + $adi_spi_clk_trace_delay)}] set_output_delay -clock [get_clocks adi_sclk_pin] -min $v [get_ports {adi_spi_csn}] ### AD9361 Discretes ### # adi_ctrl_in is asynchronous, but must be held for at least two ClkRF cycles set_false_path -from * -to [get_ports {adi_ctrl_in[*]}] # adi_sync_in does have timing requirements, but we do not use it at this time set_false_path -from * -to [get_ports {adi_sync_in}] # Long-lived control lines set_false_path -from * -to [get_ports {adi_en_agc}] set_false_path -from * -to [get_ports {adi_enable}] set_false_path -from * -to [get_ports {adi_txnrx}] set_false_path -from * -to [get_ports {adi_reset_n}] bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/constraints/fx3.sdc000066400000000000000000000103321457144405000253140ustar00rootroot00000000000000# bladeRF Design Constraints File for Cypress FX3 Interface # # Copyright (c) 2017 Nuand LLC # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # References: # * EZ-USB FX3 SuperSpeed USB Controller datasheet # * EZ-USB FX3 Technical Reference Manual # * Altera AN 433 (Constraining and Analyzing Source-Synchronous Interfaces) # * I/O Timing Constrainer (quartus_sta --ssc hosted) ### FX3 PCLK ### # Clock frequency set clock_frequency "100.0 MHz" # Virtual clock for the FX3's PCLK output pin create_clock -period $clock_frequency -name fx3_virtual # Clock input for the FPGA end of the FX3 PCLK create_clock -period $clock_frequency [get_ports fx3_pclk] ### FX3 GPIF and CTL Interfaces ### # Clock to data-out propagation delays set fx3_data_tco_max 9.0 set fx3_data_tco_min 7.0 # Data-in to Clock setup and hold times set fx3_data_ts 2.0 set fx3_data_th 0.5 # Constraints for fx3_gpif_in (FX3 -> FPGA) # Max input delay = tco_max + (data_trace_delay - dest_clock_trace_delay) set v [expr {$fx3_data_tco_max + ($fx3_data_trace_delay - $fx3_dclk_trace_delay)}] set_input_delay -clock [get_clocks fx3_virtual] -max $v [get_ports {fx3_gpif[*]}] set_input_delay -clock [get_clocks fx3_virtual] -max $v [get_ports {fx3_ctl[*]}] # Min input delay = tco_min + (data_trace_delay - dest_clock_trace_delay) set v [expr {$fx3_data_tco_min + ($fx3_data_trace_delay - $fx3_dclk_trace_delay)}] set_input_delay -clock [get_clocks fx3_virtual] -min $v [get_ports {fx3_gpif[*]}] set_input_delay -clock [get_clocks fx3_virtual] -min $v [get_ports {fx3_ctl[*]}] # Constraints for fx3_gpif_out (FPGA -> FX3) # Max output delay = setup + (data_trace_delay + src_clock_trace_delay) set v [expr {$fx3_data_ts + ($fx3_data_trace_delay + $fx3_sclk_trace_delay)}] set_output_delay -clock [get_clocks fx3_virtual] -max $v [get_ports {fx3_gpif[*]}] set_output_delay -clock [get_clocks fx3_virtual] -max $v [get_ports {fx3_ctl[*]}] # Min output delay = -1 * hold + (data_trace_delay + src_clock_trace_delay) set v [expr {(-1 * $fx3_data_th) + ($fx3_data_trace_delay + $fx3_sclk_trace_delay)}] set_output_delay -clock [get_clocks fx3_virtual] -min $v [get_ports {fx3_gpif[*]}] set_output_delay -clock [get_clocks fx3_virtual] -min $v [get_ports {fx3_ctl[*]}] # Multicycle exceptions set_multicycle_path -setup -start -from [get_clocks fx3_pclk] -to [get_clocks fx3_virtual] 1 set_multicycle_path -hold -start -from [get_clocks fx3_pclk] -to [get_clocks fx3_virtual] 1 set_multicycle_path -setup -start -from [get_clocks $fx3_clock] -to [get_clocks {fx3_virtual}] 2 set_multicycle_path -hold -start -from [get_clocks $fx3_clock] -to [get_clocks {fx3_virtual}] 2 set_multicycle_path -setup -start -from [get_clocks {fx3_virtual}] -to [get_clocks $fx3_clock] 2 set_multicycle_path -hold -start -from [get_clocks {fx3_virtual}] -to [get_clocks $fx3_clock] 2 ### FX3 UART interface ### # This is an asynchronous serial interface that runs at 4 MHz. set_false_path -from [get_ports {fx3_uart_*}] -to * set_false_path -from * -to [get_ports {fx3_uart_*}] ### FX3 signalling ### # Asynchronous clear on the RX FIFO when disabling RX set_false_path -from {fx3_gpif*rx_enable} -to {*rx_meta_fifo*:wraclr|*} set_false_path -from {fx3_gpif*rx_enable} -to {*rx_fifo*:wraclr|*} bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/software/000077500000000000000000000000001457144405000234055ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/software/README.md000066400000000000000000000372551457144405000247000ustar00rootroot00000000000000bladeRF NIOS II software ========================== The [bladeRF_nios](./bladeRF_nios) directory contains the bladeRF program that executes on a NIOS II soft processor in the FPGA. This program is responsible for performing control and configuration operations requests from the host, as received via the FX3 UART. Based upon the request information, the operation is applied to a physical device attached to the FPGA, or a module in the FPGA's programmable fabric. Packet Formats ======================== Requests and responses are sent/received in 16-byte packets. The first byte in the p is a "magic" value that denotes the packet format type. The following bytes are specific to the packet format. See the pkt_*.h files in the [fpga_common/include/](../../../../../../fpga_common/include) directory for complete descriptions of these formats. IDs and "Magic" header byte values are reserved for user customization; official releases will not use these IDs. The below tables briefly describe the IDs used for each of the packet formats. Magic Byte | Packet format -------------|---------------------- 0x00 | Do not use 0x01-0x40 | Reserved for offical bladeRF packet formats 0x41 | pkt_8x8 0x42 | pkt_8x16 0x43 | pkt_8x32 0x44 | pkt_8x64 0x45-0x4a | Reserved for offical bladeRF packet formats 0x4b | pkt_32x32 0x4c-0x4d | Reserved for offical bladeRF packet formats 0x4e | pkt_legacy 0x4f-53 | Reserved for offical bladeRF packet formats 0x54 | pkt_retune 0x55-0x7f | Reserved for offical bladeRF packet formats 0x80-0xff | Reserved for user customization **pkt_8x8** : 8-bit address, 8-bit address accesses ID | Peripheral/Device/Block ------------ | ------------- 0x00 | LMS6002D register access 0x01 | SI5338 register access 0x02 | VCTCXO tamer module. Subaddress 0xff accesses mode selection. 0x03 | TX synchronization trigger 0x04 | RX synchronization trigger 0x80-0xff | Reserved for user customization **pkt_8x16**: 8-bit address, 16-bit data accesses ID | Peripheral/Device/Block ------------ | ------------- 0x00 | VCTCXO Trim DAC register access 0x01 | IQ Correction 0x80-0xff | Reserved for user customization **pkt_8x32**: 8-bit address, 32-bit data access ID | Peripheral/Device/Block ------------ | ------------- 0x00 | FPGA Control Register 0x01 | FPGA Version (Read only) 0x02 | XB200 ADF4351 register access 0x80-0xff | Reserved for user customization **pkt_8x64**: 8-bit address, 64-bit data access ID | Peripheral/Device/Block ------------ | ------------- 0x00 | RX Timestamp (read-only) 0x01 | TX Timestamp (read-only) 0x80-0xff | Reserved for user customization **pkt_32x32**: 32-bit address (or mask), 32-bit data access ID | Peripheral/Device/Block ------------ | ------------- 0x00 | Expansion I/O 0x01 | Expansion I/O direction 0x80-0xff | Reserved for user customization **pkt_retune**: Does not have ID fields available for use **pkt_legacy**: Does not have ID fields available for use Build and Debug ======================== The Nios software is built and embedded into the FPGA when running the **build_bladeRF.sh** script, per the [README.md](../../../../../../README.md) in the [bladeRF/hdl/](../../../../../../hdl) directory. It is possible to build, load, and debug the Nios software over JTAG using the Intel/Terasic USB Blaster using either `make` and `gdb`, or Eclipse. The former is quicker to setup, but the latter offers the Eclipse GUI that some may find easier. Both methods are discussed below. (***Linux Users: Ensure you've installed udev rules for your JTAG debugger***) Command-Line Debugging with GDB ============================ - Connect the USB Blaster JTAG debugger - It may be helpful to open several terminal windows/splits for the next few steps. - Terminal 1, for: - (Re)building the FPGA image - Loading the FPGA image - Terminal 2, for: - (Re)building the Nios - Downloading the resulting ELF to the FPGA via the USB Blaster debugger - Starting the `nios2-gdb-server` (may use another terminal window for this if desired) - Terminal 3, for: - Performing the Nios debugging with `nios2-elf-gdb` - Terminal 4 (optional), for: - Running the host application exercising the bladeRF - Terminal 5 (optional), for: - Viewing/editing Nios code (helpful for figuring out where to place breakpoints) - In Terminal 1: - Start *NIOS II command shell*. This is a bash shell that has environment variables required by Quartus already defined. - `$QUARTUS_INSTALL_DIR/nios2eds/nios2_command_shell.sh` - cd into `$BLADERF_DIR/hdl/quartus` - Build the FPGA ``` # Replace , , and according to the platform you are building. $ build_bladerf.sh -b -s -r ``` - Load the FPGA image into the bladeRF device ``` $ bladeRF-cli -l /path/to/hosted.rbf ``` - In Terminal 2: - Start *NIOS II command shell*. - `$QUARTUS_INSTALL_DIR/nios2eds/nios2_command_shell.sh` - cd into `$BLADERF_DIR/hdl/fpga/platforms//software/bladeRF_nios` - For something to do, let's rebuild the Nios. To do this, we must define the `WORKDIR` variable for the make script. This path is relative to the `$BLADERF_DIR/hdl/quartus` directory. Substitute \ with the bladeRF platform (e.g. bladerf or bladerf-micro), \ with the FPGA size (e.g. 40, 115, A4, A9), and \ with the revision (e.g. hosted). - `make WORKDIR=work/-- clean` - `make WORKDIR=work/-- all` - Download the new ELF into the FPGA. Because the FPGA has already been loaded in a previous step, all this does is re-write the appropriate memory space within the FPGA with the new Nios program. - `make WORKDIR=work/-- download-elf` - Finally, start the gdb server - `nios2-gdb-server --tcpport 8888 --tcppersist` - This may return the error, "Unable to bind (98)". This happens when the previous step still has a use lock on the debugger pod. Give it a minute or two and try again. If it still fails, unplugging the debugger and plugging it back in should do the trick. - In Terminal 3: - Start *NIOS II command shell*. - `$QUARTUS_INSTALL_DIR/nios2eds/nios2_command_shell.sh` - cd into `$BLADERF_DIR/hdl/quartus/work/--/bladeRF_nios` - Start the Nios gdb client: - `nios2-elf-gdb -ex "target remote localhost:8888" bladeRF_nios.elf` - The Nios processor will now be in a paused state. This lets us setup breakpoints and whatnot as needed for debug. When ready to begin the debug process, issue the `continue` command. This will unpause the Nios. - If a breakpoint is hit, gdb will pause the Nios again until you issue another `continue` command. This may cause a timeout and break the user application. Breakpoints can have [commands associated with them](https://ftp.gnu.org/old-gnu/Manuals/gdb/html_node/gdb_34.html), so when one is hit, gdb can immediately print a value and continue. The print operation is slow enough that if more than a few characters are printed, it will trigger a timeout in libbladeRF. Refer to the *Debugging Tips* section for how to increase the timeout. - In Terminal 4: - Run the host software (e.g. bladeRF-cli or some custom program). The general idea is that this software is interacting with the bladeRF/Nios in some way that you want to monitor in gdb in the previous step. At this point, the Nios code can be edited, recompiled, and downloaded to the FPGA without rebuilding the entire FPGA image. The exception to this is if you are finished debugging and want to embed the changes into the FPGA image, or if the Nios codebase increases such that it no longer fits in the RAM allocated. To rebuild the Nios, quit out of gdb in Terminal 3 and return to Terminal 2. Ctrl-C the `nios2-gdb-server`, rebuild/download the ELF using `make`, and restart `nios2-gdb-server` as described above. Repeat the steps listed in Terminal 3 and 4, above. Debugging Tips ============================ **Timeouts** When debugging with gdb, it is often desirable to print the values of variables for any number of reasons. The problem is, the print operation is slow and will cause the host/bladeRF interface to timeout. To make debugging easier, this timeout can be increased. - Open [host/libraries/libbladeRF/src/backend/usb/usb.h](../../../../../../host/libraries/libbladeRF/src/backend/usb/usb.h) - Find the line that defines `PERIPHERAL_TIMEOUT_MS` and change it from `250` to a higher value such as `2500` for 2.5 seconds, or `10000` for 10 seconds. - Save the file and rebuild/install libbladeRF. **Variable has been optimized out** Another common occurence when debugging is finding out that a variable has been optimized out and its value is not printable. The best way to get around this is to reduce the level of compiler optimization. This can be done as follows: - Open [hdl/fpga/platforms/common/bladerf/software/bladeRF_nios/Makefile](../../../../../../hdl/fpga/platforms/common/bladerf/software/bladeRF_nios/Makefile) - Find the line `APP_CFLAGS_OPTIMIZATION` - It will have the default optimization for size (`-Os`). Change it to no optimization: `-O0`. - Save the file. - Try to rebuild the Nios. It will likely fail due to lack of memory. Somewhere in the output, it should print how much memory is required. Make a note of this. To increase the Nios RAM size: - Open `$BLADERF_DIR/hdl/fpga/platforms//build/platform.conf` - Find the `get_qsys_ram` function, and change the return value to be the nearest power of 2 larger than the required memory size from the above. Sometimes simply doubling the existing return value is good enough. - Rebuild the FPGA in its entirety. This is required because the FPGA needs to instantiate more block RAMs to fit the larger Nios, and it will need to re-fit the surrounding logic. Eclipse GUI Debugging ===================== - Connect the USB Blaster JTAG debugger - Enter the *NIOS II command shell*. This is a bash shell that has environment variables required by Quartus already defined. This is located in: `$QUARTUS_INSTALL_DIR/nios2eds/nios2_command_shell.sh` - Perform an initial FPGA build to generate the contents of the bladeRF_nios_bsp directory. ``` $ cd $BLADERF_DIR/hdl/quartus # Replace , , and according to the platform you are building. $ build_bladerf.sh -b -s -r ``` - Load the FPGA with the resulting image using the bladeRF-cli. The NIOS II will be loaded and reset in a following step. This is required to ensure the PCLK from the FX3 is provided to the NIOS II core. - Launch the Eclipse version provided with Quartus II 15.0, contained located at: `$QUARTUS_INSTALL_DIR/nios2eds/bin/eclipse-nios2`. Create a workspace wherever you see fit. - Import the bladeRF_nios_bsp project: - From the project explorer, right click and select *Import...* - Select *General --> Existing projects into Workspace* - Select *Root Directory* - Select this directory. You should see a project labeled `bladeRF_nios_bsp` checked in the *Projects* pane. - Click Finish - Import the bladeRF_nios projects: - Repeat the previous import steps again, but this time select the software directory for the target platform. For example: - `hdl/fpga/platforms/bladerf-micro/software` for bladeRF-micro - `hdl/fpga/platforms/bladerf/software` for bladeRF - You should now have both projects in your Eclipse workspace. If the C/C++ indexer reports syntax issues due to unknown macro definitions or types, click *Project* -> *C/C++ Index* -> *Rebuild*. - This doesn't always work and you may have to manually add linked source directories: - Right-click the bladeRF_nios project and select *Properties* - Under *C/C++ General --> Paths and Symbols*, click the *Source Location* tab - Click *Link Folder* - Check the box *Link to folder in the file system* and click *Browse...* - Navigate to the `bladeRF_nios` folder in this directory - If Eclipse complains about the folder name (the field at the top of the window), just change it to `bladeRF_nios_common` - Click *OK* - Repeat this for the `fpga_common` directory in the bladeRF root. - Click *OK* to get back to Eclipse - Now Rebuild the C/C++ indexer. You may also have to right-click the project and select *Index --> Search for unresolved includes* or *Index --> Re-resolve unresolved includes* - Eclipse may continue to complain about some Altera-specific includes missing, but these can simply be ignored. - Building the `bladeRF_nios` project will fail stating that the BSP directory could not be found. This is because the environment variable `WORKDIR` has not been set. To set this: - Right-click the `bladeRF_nios` project and select *Properties* - Under *C/C++ Build --> Environment*, click *Add* to create a new environment variable - For *Name*, type `WORKDIR` - For *Value*, type `work/--` where: - `` is the name of the platform (e.g. bladerf or bladerf-micro) - `` is the FPGA size (e.g. 40, 115, A4, A9) - `` is the project revision (typically 'hosted') - Click *OK* - The `bladeRF_nios` project should now build successfully. - **Remember to update this variable if targeting a different platform later!** - Create a debug target: - Click *Debug Configurations...* - Create a new *NIOS II Hardware v2 (beta)* target - For *Project*, select bladeRF_nios - For *ELF:*, select bladeRF_nios.elf - Under *Connections* -> *Processor*, click *Browse...*. It should detect the NIOS II via the JTAG device and display a string describing its location in the scan chain. - *Optional* Repeat the above for the *JTAG UART* field, if you wish to use have a console over JTAG. Be careful when using this, as it will significantly affect execution time. - Uncheck *Check Unique ID* and *Check timestamp*. - If you wish to download code to the device, reset, and run it... - Check *Download ELF*, *Reset Processor*, and *Start Processor* - If you only wish to inspect the state of the NIOS after observing an issue on the host side... - Ensure all of the aforementioned items are unchecked - At this point, you may apply the settings and start a debug session. **Note:** You may have to repeat the step(s) where you browse for the device after unplugging and re-connecting the JTAG debugger. **Note:** Breaking and stepping though the code will cause libbladeRF to timeout. To avoid this, configure libbladeRF (via CMake) with -DLIBBLADERF_DISABLE_USB_TIMEOUTS=ON and rebuild libbladeRF. Host "Simulation" Test Cases ========================= A substantial portion of the code in this program can be tested on a host machine, using a pre-defined set of test cases. Run `make -f pcsim.mk` in the [bladeRF_nios/](./bladeRF_nios) directory to build the *bladeRF_nios.sim* program. Running this program should yield output that prints a test case's description, its request data, its response data, and "pass." The test program will abort when it encounters an invalid response, or if read/write to a simulated device/module contains unexpected information. NIOS II Core Implementation ========================= By default, the FPGA build is configured for use with a NIOS II/e implementation, which can be built with the Quartus II Web Edition. Users with licenses for the NIOS II/s or II/f implementations can pass `-n Small` or `-n Fast` (respectively) to `build_bladerf.sh` to configure the build for the associated NIOS II core. Otherwise, `-n Tiny` is assumed. For more information, see Altera's [Nios II Core Implementation Details](https://www.altera.com/en_US/pdfs/literature/hb/nios2/n2cpu_nii51015.pdf) document. bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/software/bladeRF_nios/000077500000000000000000000000001457144405000257345ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/software/bladeRF_nios/Makefile000066400000000000000000001060451457144405000274020ustar00rootroot00000000000000#------------------------------------------------------------------------------ # VARIABLES TO BE DEFINED BY PLATFORM MAKEFILE #------------------------------------------------------------------------------ # - FPGA_COMMON_DIR : Path to fpga_common # - FIRMWARE_COMMON_DIR : Path to firmware_common # - LIBBLADERF_DIR : Path to libbladeRF # - BLADERF_COMMON_DIR : Path to common bladeRF_nios dir # - HOST_COMMON_DIR : Path to host common directory # - NIOS_BUILD_OUTDIR : Path to place the Nios build products # - MEM_INIT_DIR : Path to place the mem_init build products # - BSP_BUILD_OUTDIR : Path where BSP build products are located # - QUARTUS_OUTDIR : Path where Quartus build products are located # # Can opionally define these other variables # - ALT_INCLUDE_DIRS # - C_SRCS #------------------------------------------------------------------------------ # VARIABLES APPENDED TO BY INCLUDED MAKEFILE FRAGMENTS #------------------------------------------------------------------------------ # List of include directories for -I compiler option (-I added when used). # Includes the BSP. ALT_INCLUDE_DIRS += $(BLADERF_COMMON_DIR)/src \ $(FIRMWARE_COMMON_DIR) \ $(FPGA_COMMON_DIR)/include \ $(LIBBLADERF_DIR)/include # List of library directories for -L linker option (-L added when used). # Includes the BSP. ALT_LIBRARY_DIRS := # List of library names for -l linker option (-l added when used). # Includes the BSP. ALT_LIBRARY_NAMES := # List of library names for -msys-lib linker option (-msys-lib added when used). # These are libraries that might be located in the BSP and depend on the BSP # library, or vice versa ALT_BSP_DEP_LIBRARY_NAMES := # List of dependencies for the linker. This is usually the full pathname # of each library (*.a) file. # Includes the BSP. ALT_LDDEPS := # List of root library directories that support running make to build them. # Includes the BSP and any ALT libraries. MAKEABLE_LIBRARY_ROOT_DIRS := # Generic flags passed to the compiler for different types of input files. ALT_CFLAGS := -DBLADERF_NIOS_BUILD ALT_CXXFLAGS := ALT_CPPFLAGS := ALT_ASFLAGS := ALT_LDFLAGS := #------------------------------------------------------------------------------ # The adjust-path macro # # If COMSPEC/ComSpec is defined, Make is launched from Windows through # Cygwin. The adjust-path macro converts absolute windows paths into # unix style paths (Example: c:/dir -> /c/dir). This will ensture # paths are readable by GNU Make. # # If COMSPEC/ComSpec is not defined, Make is launched from linux, and no # adjustment is necessary # #------------------------------------------------------------------------------ ifndef COMSPEC ifdef ComSpec COMSPEC = $(ComSpec) endif # ComSpec endif # COMSPEC ifdef COMSPEC # if Windows OS ifeq ($(MAKE_VERSION),3.81) # # adjust-path/adjust-path-mixed for Mingw Gnu Make on Windows # # Example Usage: # $(call adjust-path,c:/aaa/bbb) => /c/aaa/bbb # $(call adjust-path-mixed,/c/aaa/bbb) => c:/aaa/bbb # $(call adjust-path-mixed,/cygdrive/c/aaa/bbb) => c:/aaa/bbb # # # adjust-path # - converts back slash characters into forward slashes # - if input arg ($1) is an empty string then return the empty string # - if input arg ($1) does not contain the string ":/", then return input arg # - using sed, convert mixed path [c:/...] into mingw path [/c/...] define adjust-path $(strip \ $(if $1,\ $(if $(findstring :/,$(subst \,/,$1)),\ $(shell echo $(subst \,/,$1) | sed -e 's,^\([a-zA-Z]\):/,/\1/,'),\ $(subst \,/,$1)))) endef # # adjust-path-mixed # - converts back slash characters into forward slashes # - if input arg ($1) is an empty string then return the empty string # - if input arg ($1) does not begin with a forward slash '/' char, then # return input arg # - using sed, convert mingw path [/c/...] or cygwin path [/c/cygdrive/...] # into a mixed path [c:/...] define adjust-path-mixed $(strip \ $(if $1,\ $(if $(findstring $(subst \,/,$1),$(patsubst /%,%,$(subst \,/,$1))),\ $(subst \,/,$1),\ $(shell echo $(subst \,/,$1) | sed -e 's,^/cygdrive/\([a-zA-Z]\)/,\1:/,' -e 's,^/\([a-zA-Z]\)/,\1:/,')))) endef else # MAKE_VERSION != 3.81 (MAKE_VERSION == 3.80 or MAKE_VERSION == 3.79) # # adjust-path for Cygwin Gnu Make # $(call adjust-path,c:/aaa/bbb) = /cygdrive/c/aaa/bbb # $(call adjust-path-mixed,/cygdrive/c/aaa/bbb) = c:/aaa/bbb # adjust-path = $(if $1,$(shell cygpath -u "$1"),) adjust-path-mixed = $(if $1,$(shell cygpath -m "$1"),) endif else # !COMSPEC adjust-path = $1 adjust-path-mixed = $1 endif # COMSPEC #vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv # GENERATED SETTINGS START v #vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv #START GENERATED ACTIVE_BUILD_CONFIG := default BUILD_CONFIGS := default # The following TYPE comment allows tools to identify the 'type' of target this # makefile is associated with. # TYPE: APP_MAKEFILE # This following VERSION comment indicates the version of the tool used to # generate this makefile. A makefile variable is provided for VERSION as well. # ACDS_VERSION: 12.1sp1 ACDS_VERSION := 12.1sp1 # This following BUILD_NUMBER comment indicates the build number of the tool # used to generate this makefile. # BUILD_NUMBER: 243 # Define path to the application ELF. # It may be used by the makefile fragments so is defined before including them. # ELF := $(NIOS_BUILD_OUTDIR)/bladeRF_nios.elf # Paths to C, C++, and assembly source files. C_SRCS += $(BLADERF_COMMON_DIR)/src/devices.c C_SRCS += $(BLADERF_COMMON_DIR)/src/pkt_8x8.c C_SRCS += $(BLADERF_COMMON_DIR)/src/pkt_8x16.c C_SRCS += $(BLADERF_COMMON_DIR)/src/pkt_8x32.c C_SRCS += $(BLADERF_COMMON_DIR)/src/pkt_8x64.c C_SRCS += $(BLADERF_COMMON_DIR)/src/pkt_16x64.c C_SRCS += $(BLADERF_COMMON_DIR)/src/pkt_32x32.c C_SRCS += $(BLADERF_COMMON_DIR)/src/pkt_legacy.c C_SRCS += $(BLADERF_COMMON_DIR)/src/devices_sim.c CXX_SRCS := ASM_SRCS := # Path to root of object file tree. OBJ_ROOT_DIR := $(NIOS_BUILD_OUTDIR)/obj # Options to control objdump. CREATE_OBJDUMP := 1 OBJDUMP_INCLUDE_SOURCE := 1 OBJDUMP_FULL_CONTENTS := 0 # Options to enable/disable optional files. CREATE_ELF_DERIVED_FILES := 0 CREATE_LINKER_MAP := 1 # Common arguments for ALT_CFLAGSs APP_CFLAGS_DEFINED_SYMBOLS := -DNUAND_MODIFICATIONS APP_CFLAGS_UNDEFINED_SYMBOLS := APP_CFLAGS_OPTIMIZATION := -Os -fshort-enums APP_CFLAGS_DEBUG_LEVEL := -g APP_CFLAGS_WARNINGS := -Wall -Wextra -Wno-unused-parameter -Werror APP_CFLAGS_USER_FLAGS := APP_ASFLAGS_USER := APP_LDFLAGS_USER := # Linker options that have default values assigned later if not # assigned here. LINKER_SCRIPT := CRT0 := SYS_LIB := # Define path to the root of the BSP. BSP_ROOT_DIR := $(BSP_BUILD_OUTDIR) # List of application specific include directories, library directories and library names APP_INCLUDE_DIRS := APP_LIBRARY_DIRS := APP_LIBRARY_NAMES := # Pre- and post- processor settings. BUILD_PRE_PROCESS := BUILD_POST_PROCESS := QUARTUS_PROJECT_DIR := $(QUARTUS_OUTDIR) #END GENERATED #^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ # GENERATED SETTINGS END ^ #^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #------------------------------------------------------------------------------ # DEFAULT TARGET #------------------------------------------------------------------------------ # Define the variable used to echo output if not already defined. ifeq ($(ECHO),) ECHO := echo endif # Put "all" rule before included makefile fragments because they may # define rules and we don't want one of those to become the default rule. .PHONY : all all: @$(ECHO) [$(APP_NAME) build complete] all : build_pre_process libs app build_post_process #------------------------------------------------------------------------------ # VARIABLES DEPENDENT ON GENERATED CONTENT #------------------------------------------------------------------------------ # Define object file directory per build configuration CONFIG_OBJ_DIR := $(OBJ_ROOT_DIR)/$(ACTIVE_BUILD_CONFIG) ifeq ($(BSP_ROOT_DIR),) $(error Edit Makefile and provide a value for BSP_ROOT_DIR) endif ifeq ($(wildcard $(BSP_ROOT_DIR)),) $(error BSP directory does not exist: $(BSP_ROOT_DIR)) endif # Define absolute path to the root of the BSP. ABS_BSP_ROOT_DIR := $(call adjust-path-mixed,$(shell cd "$(BSP_ROOT_DIR)"; pwd)) # Include makefile fragments. Define variable ALT_LIBRARY_ROOT_DIR before # including each makefile fragment so that it knows the path to itself. BSP_INCLUDE_FILE := $(BSP_ROOT_DIR)/public.mk ALT_LIBRARY_ROOT_DIR := $(BSP_ROOT_DIR) include $(BSP_INCLUDE_FILE) # C2H will need this to touch the BSP public.mk and avoid the sopc file # out-of-date error during a BSP make ABS_BSP_INCLUDE_FILE := $(ABS_BSP_ROOT_DIR)/public.mk ifneq ($(WARNING.SMALL_STACK_SIZE),) # This WARNING is here to protect you from unknowingly using a very small stack # If the warning is set, increase your stack size or enable the BSP small stack # setting to eliminate the warning $(warning WARNING: $(WARNING.SMALL_STACK_SIZE)) endif # If the BSP public.mk indicates that ALT_SIM_OPTIMIZE is set, rename the ELF # by prefixing it with RUN_ON_HDL_SIMULATOR_ONLY_. ifneq ($(filter -DALT_SIM_OPTIMIZE,$(ALT_CPPFLAGS)),) ELF := RUN_ON_HDL_SIMULATOR_ONLY_$(ELF) endif # If the BSP public.mk indicates that ALT_PROVIDE_GMON is set, add option to # download_elf target ifneq ($(filter -DALT_PROVIDE_GMON,$(ALT_CPPFLAGS)),) GMON_OUT_FILENAME := gmon.out WRITE_GMON_OPTION := --write-gmon $(GMON_OUT_FILENAME) endif # Name of ELF application. APP_NAME := $(basename $(ELF)) # Set to defaults if variables not already defined in settings. ifeq ($(LINKER_SCRIPT),) LINKER_SCRIPT := $(BSP_LINKER_SCRIPT) endif ifeq ($(CRT0),) CRT0 := $(BSP_CRT0) endif ifeq ($(SYS_LIB),) SYS_LIB := $(BSP_SYS_LIB) endif OBJDUMP_NAME := $(APP_NAME).objdump OBJDUMP_FLAGS := --disassemble --syms --all-header ifeq ($(OBJDUMP_INCLUDE_SOURCE),1) OBJDUMP_FLAGS += --source endif ifeq ($(OBJDUMP_FULL_CONTENTS),1) OBJDUMP_FLAGS += --full-contents endif # Create list of linker dependencies (*.a files). APP_LDDEPS := $(ALT_LDDEPS) $(LDDEPS) # Take lists and add required prefixes. APP_INC_DIRS := $(addprefix -I, $(ALT_INCLUDE_DIRS) $(APP_INCLUDE_DIRS) $(INC_DIRS)) ASM_INC_PREFIX := -Wa,-I APP_ASM_INC_DIRS := $(addprefix $(ASM_INC_PREFIX), $(ALT_INCLUDE_DIRS) $(APP_INCLUDE_DIRS) $(INC_DIRS)) APP_LIB_DIRS := $(addprefix -L, $(ALT_LIBRARY_DIRS) $(APP_LIBRARY_DIRS) $(LIB_DIRS)) APP_LIBS := $(addprefix -l, $(ALT_LIBRARY_NAMES) $(APP_LIBRARY_NAMES) $(LIBS)) ifneq ($(AVOID_NIOS2_GCC3_OPTIONS),) # # Avoid Nios II GCC 3.X options. # # Detect if small newlib C library is requested. # If yes, remove the -msmallc option because it is # now handled by other means. ifneq ($(filter -msmallc,$(ALT_LDFLAGS)),) ALT_LDFLAGS := $(filter-out -msmallc,$(ALT_LDFLAGS)) ALT_C_LIBRARY := smallc else ALT_C_LIBRARY := c endif # Put each BSP dependent library in a group to avoid circular dependencies. APP_BSP_DEP_LIBS := $(foreach l,$(ALT_BSP_DEP_LIBRARY_NAMES),-Wl,--start-group -l$(ALT_C_LIBRARY) -lgcc -l$(l) -Wl,--end-group) else # !AVOID_NIOS2_GCC3_OPTIONS # # Use Nios II GCC 3.X options. # APP_BSP_DEP_LIBS := $(addprefix -msys-lib=, $(ALT_BSP_DEP_LIBRARY_NAMES)) endif # !AVOID_NIOS2_GCC3_OPTIONS # Arguments for the C preprocessor, C/C++ compiler, assembler, and linker. APP_CFLAGS := $(APP_CFLAGS_DEFINED_SYMBOLS) \ $(APP_CFLAGS_UNDEFINED_SYMBOLS) \ $(APP_CFLAGS_OPTIMIZATION) \ $(APP_CFLAGS_DEBUG_LEVEL) \ $(APP_CFLAGS_WARNINGS) \ $(APP_CFLAGS_USER_FLAGS) \ $(ALT_CFLAGS) \ $(CFLAGS) # Arguments only for the C++ compiler. APP_CXXFLAGS := $(ALT_CXXFLAGS) $(CXXFLAGS) # Arguments only for the C preprocessor. # Prefix each include directory with -I. APP_CPPFLAGS := $(APP_INC_DIRS) \ $(ALT_CPPFLAGS) \ $(CPPFLAGS) # Arguments only for the assembler. APP_ASFLAGS := $(APP_ASM_INC_DIRS) \ $(ALT_ASFLAGS) \ $(APP_ASFLAGS_USER) \ $(ASFLAGS) # Arguments only for the linker. APP_LDFLAGS := $(APP_LDFLAGS_USER) ifneq ($(LINKER_SCRIPT),) APP_LDFLAGS += -T'$(LINKER_SCRIPT)' endif ifneq ($(AVOID_NIOS2_GCC3_OPTIONS),) # Avoid Nios II GCC 3.x options. ifneq ($(CRT0),) APP_LDFLAGS += $(CRT0) endif # The equivalent of the -msys-lib option is provided # by the GROUP() command in the linker script. # Note this means the SYS_LIB variable is now ignored. else # !AVOID_NIOS2_GCC3_OPTIONS # Use Nios II GCC 3.x options. ifneq ($(CRT0),) APP_LDFLAGS += -msys-crt0='$(CRT0)' endif ifneq ($(SYS_LIB),) APP_LDFLAGS += -msys-lib=$(SYS_LIB) endif endif # !AVOID_NIOS2_GCC3_OPTIONS APP_LDFLAGS += \ $(APP_LIB_DIRS) \ $(ALT_LDFLAGS) \ $(LDFLAGS) LINKER_MAP_NAME := $(APP_NAME).map ifeq ($(CREATE_LINKER_MAP), 1) APP_LDFLAGS += -Wl,-Map=$(LINKER_MAP_NAME) endif # QUARTUS_PROJECT_DIR and SOPC_NAME need to be defined if you want the # mem_init_install target of the mem_init.mk (located in the associated BSP) # to know how to copy memory initialization files (e.g. .dat, .hex) into # directories required for Quartus compilation or RTL simulation. # Defining QUARTUS_PROJECT_DIR causes mem_init_install to copy memory # initialization files into your Quartus project directory. This is required # to provide the initial memory contents of FPGA memories that can be # initialized by the programming file (.sof) or Hardcopy ROMs. It is also used # for VHDL simulation of on-chip memories. # Defining SOPC_NAME causes the mem_init_install target to copy memory # initialization files into your RTL simulation directory. This is required # to provide the initial memory contents of all memories that can be # initialized by RTL simulation. This variable should be set to the same name # as your SOPC Builder system name. For example, if you have a system called # "foo.sopc", this variable should be set to "foo". # If SOPC_NAME is not set and QUARTUS_PROJECT_DIR is set, then derive SOPC_NAME. ifeq ($(SOPC_NAME),) ifneq ($(QUARTUS_PROJECT_DIR),) SOPC_NAME := $(basename $(notdir $(wildcard $(QUARTUS_PROJECT_DIR)/*.sopcinfo))) endif endif # Defining JDI_FILE is required to specify the JTAG Debug Information File # path. This file is generated by Quartus, and is needed along with the # .sopcinfo file to resolve processor instance ID's from names in a multi-CPU # systems. For multi-CPU systems, the processor instance ID is used to select # from multiple CPU's during ELF download. # Both JDI_FILE and SOPCINFO_FILE are provided by the BSP if they found during # BSP creation. If JDI_FILE is not set and QUARTUS_PROJECT_DIR is set, then # derive JDI_FILE. We do not attempt to derive SOPCINFO_FILE since there may be # multiple .sopcinfo files in a Quartus project. ifeq ($(JDI_FILE),) ifneq ($(QUARTUS_PROJECT_DIR),) JDI_FILE := $(wildcard $(QUARTUS_PROJECT_DIR)/*.jdi) endif endif # Path to root runtime directory used for hdl simulation RUNTIME_ROOT_DIR := $(CONFIG_OBJ_DIR)/runtime #------------------------------------------------------------------------------ # MAKEFILE INCLUDES DEPENDENT ON GENERATED CONTENT #------------------------------------------------------------------------------ # mem_init.mk is a generated makefile fragment. This file defines all targets # used to generate HDL initialization simulation files and pre-initialized # onchip memory files. MEM_INIT_FILE := $(BSP_ROOT_DIR)/mem_init.mk include $(MEM_INIT_FILE) # Create list of object files to be built using the list of source files. # The source file hierarchy is preserved in the object tree. # The supported file extensions are: # # .c - for C files # .cxx .cc .cpp - for C++ files # .S .s - for assembler files # # Handle source files specified by --src-dir & --src-rdir differently, to # save some processing time in calling the adjust-path macro. OBJ_LIST_C := $(patsubst %.c,%.o,$(filter %.c,$(C_SRCS))) OBJ_LIST_CPP := $(patsubst %.cpp,%.o,$(filter %.cpp,$(CXX_SRCS))) OBJ_LIST_CXX := $(patsubst %.cxx,%.o,$(filter %.cxx,$(CXX_SRCS))) OBJ_LIST_CC := $(patsubst %.cc,%.o,$(filter %.cc,$(CXX_SRCS))) OBJ_LIST_S := $(patsubst %.S,%.o,$(filter %.S,$(ASM_SRCS))) OBJ_LIST_SS := $(patsubst %.s,%.o,$(filter %.s,$(ASM_SRCS))) OBJ_LIST := $(sort $(OBJ_LIST_C) $(OBJ_LIST_CPP) $(OBJ_LIST_CXX) \ $(OBJ_LIST_CC) $(OBJ_LIST_S) $(OBJ_LIST_SS)) SDIR_OBJ_LIST_C := $(patsubst %.c,%.o,$(filter %.c,$(SDIR_C_SRCS))) SDIR_OBJ_LIST_CPP := $(patsubst %.cpp,%.o,$(filter %.cpp,$(SDIR_CXX_SRCS))) SDIR_OBJ_LIST_CXX := $(patsubst %.cxx,%.o,$(filter %.cxx,$(SDIR_CXX_SRCS))) SDIR_OBJ_LIST_CC := $(patsubst %.cc,%.o,$(filter %.cc,$(SDIR_CXX_SRCS))) SDIR_OBJ_LIST_S := $(patsubst %.S,%.o,$(filter %.S,$(SDIR_ASM_SRCS))) SDIR_OBJ_LIST_SS := $(patsubst %.s,%.o,$(filter %.s,$(SDIR_ASM_SRCS))) SDIR_OBJ_LIST := $(sort $(SDIR_OBJ_LIST_C) $(SDIR_OBJ_LIST_CPP) \ $(SDIR_OBJ_LIST_CXX) $(SDIR_OBJ_LIST_CC) $(SDIR_OBJ_LIST_S) \ $(SDIR_OBJ_LIST_SS)) # Relative-pathed objects that being with "../" are handled differently. # # Regular objects are created as # $(CONFIG_OBJ_DIR)//.o # where the path structure is maintained under the obj directory. This # applies for both absolute and relative paths; in the absolute path # case this means the entire source path will be recreated under the obj # directory. This is done to allow two source files with the same name # to be included as part of the project. # # Note: On Cygwin, the path recreated under the obj directory will be # the cygpath -u output path. # # Relative-path objects that begin with "../" cause problems under this # scheme, as $(CONFIG_OBJ_DIR)/..// can potentially put the object # files anywhere in the system, creating clutter and polluting the source tree. # As such, their paths are flattened - the object file created will be # $(CONFIG_OBJ_DIR)/.o. Due to this, two files specified with # "../" in the beginning cannot have the same name in the project. VPATH # will be set for these sources to allow make to relocate the source file # via %.o rules. # # The following lines separate the object list into the flatten and regular # lists, and then handles them as appropriate. FLATTEN_OBJ_LIST := $(filter ../%,$(OBJ_LIST)) FLATTEN_APP_OBJS := $(addprefix $(CONFIG_OBJ_DIR)/,$(notdir $(FLATTEN_OBJ_LIST))) REGULAR_OBJ_LIST := $(filter-out $(FLATTEN_OBJ_LIST),$(OBJ_LIST)) REGULAR_OBJ_LIST_C := $(filter $(OBJ_LIST_C),$(REGULAR_OBJ_LIST)) REGULAR_OBJ_LIST_CPP := $(filter $(OBJ_LIST_CPP),$(REGULAR_OBJ_LIST)) REGULAR_OBJ_LIST_CXX := $(filter $(OBJ_LIST_CXX),$(REGULAR_OBJ_LIST)) REGULAR_OBJ_LIST_CC := $(filter $(OBJ_LIST_CC),$(REGULAR_OBJ_LIST)) REGULAR_OBJ_LIST_S := $(filter $(OBJ_LIST_S),$(REGULAR_OBJ_LIST)) REGULAR_OBJ_LIST_SS := $(filter $(OBJ_LIST_SS),$(REGULAR_OBJ_LIST)) FLATTEN_SDIR_OBJ_LIST := $(filter ../%,$(SDIR_OBJ_LIST)) FLATTEN_SDIR_APP_OBJS := $(addprefix $(CONFIG_OBJ_DIR)/,$(notdir $(FLATTEN_SDIR_OBJ_LIST))) REGULAR_SDIR_OBJ_LIST := $(filter-out $(FLATTEN_SDIR_OBJ_LIST),$(SDIR_OBJ_LIST)) REGULAR_SDIR_OBJ_LIST_C := $(filter $(SDIR_OBJ_LIST_C),$(REGULAR_SDIR_OBJ_LIST)) REGULAR_SDIR_OBJ_LIST_CPP := $(filter $(SDIR_OBJ_LIST_CPP),$(REGULAR_SDIR_OBJ_LIST)) REGULAR_SDIR_OBJ_LIST_CXX := $(filter $(SDIR_OBJ_LIST_CXX),$(REGULAR_SDIR_OBJ_LIST)) REGULAR_SDIR_OBJ_LIST_CC := $(filter $(SDIR_OBJ_LIST_CC),$(REGULAR_SDIR_OBJ_LIST)) REGULAR_SDIR_OBJ_LIST_S := $(filter $(SDIR_OBJ_LIST_S),$(REGULAR_SDIR_OBJ_LIST)) REGULAR_SDIR_OBJ_LIST_SS := $(filter $(SDIR_OBJ_LIST_SS),$(REGULAR_SDIR_OBJ_LIST)) VPATH := $(sort $(dir $(FLATTEN_OBJ_LIST)) $(dir $(FLATTEN_SDIR_OBJ_LIST))) APP_OBJS_C := $(addprefix $(CONFIG_OBJ_DIR)/,\ $(REGULAR_SDIR_OBJ_LIST_C) \ $(foreach s,$(REGULAR_OBJ_LIST_C),$(call adjust-path,$s))) APP_OBJS_CPP := $(addprefix $(CONFIG_OBJ_DIR)/,\ $(REGULAR_SDIR_OBJ_LIST_CPP) \ $(foreach s,$(REGULAR_OBJ_LIST_CPP),$(call adjust-path,$s))) APP_OBJS_CXX := $(addprefix $(CONFIG_OBJ_DIR)/,\ $(REGULAR_SDIR_OBJ_LIST_CXX) \ $(foreach s,$(REGULAR_OBJ_LIST_CXX),$(call adjust-path,$s))) APP_OBJS_CC := $(addprefix $(CONFIG_OBJ_DIR)/,\ $(REGULAR_SDIR_OBJ_LIST_CC) \ $(foreach s,$(REGULAR_OBJ_LIST_CC),$(call adjust-path,$s))) APP_OBJS_S := $(addprefix $(CONFIG_OBJ_DIR)/,\ $(REGULAR_SDIR_OBJ_LIST_S) \ $(foreach s,$(REGULAR_OBJ_LIST_S),$(call adjust-path,$s))) APP_OBJS_SS := $(addprefix $(CONFIG_OBJ_DIR)/,\ $(REGULAR_SDIR_OBJ_LIST_SS) \ $(foreach s,$(REGULAR_OBJ_LIST_SS),$(call adjust-path,$s))) APP_OBJS := $(APP_OBJS_C) $(APP_OBJS_CPP) $(APP_OBJS_CXX) $(APP_OBJS_CC) \ $(APP_OBJS_S) $(APP_OBJS_SS) \ $(FLATTEN_APP_OBJS) $(FLATTEN_SDIR_APP_OBJS) # Add any extra user-provided object files. APP_OBJS += $(OBJS) # Create list of dependancy files for each object file. APP_DEPS := $(APP_OBJS:.o=.d) # Patch the Elf file with system specific information # Patch the Elf with the name of the sopc system ifneq ($(SOPC_NAME),) ELF_PATCH_FLAG += --sopc_system_name $(SOPC_NAME) endif # Patch the Elf with the absolute path to the Quartus Project Directory ifneq ($(QUARTUS_PROJECT_DIR),) ABS_QUARTUS_PROJECT_DIR := $(call adjust-path-mixed,$(shell cd "$(QUARTUS_PROJECT_DIR)"; pwd)) ELF_PATCH_FLAG += --quartus_project_dir "$(ABS_QUARTUS_PROJECT_DIR)" endif # Patch the Elf and download args with the JDI_FILE if specified ifneq ($(wildcard $(JDI_FILE)),) ELF_PATCH_FLAG += --jdi $(JDI_FILE) DOWNLOAD_JDI_FLAG := --jdi $(JDI_FILE) endif # Patch the Elf with the SOPCINFO_FILE if specified ifneq ($(wildcard $(SOPCINFO_FILE)),) ELF_PATCH_FLAG += --sopcinfo $(SOPCINFO_FILE) endif # Use the DOWNLOAD_CABLE variable to specify which JTAG cable to use. # This is not needed if you only have one cable. ifneq ($(DOWNLOAD_CABLE),) DOWNLOAD_CABLE_FLAG := --cable '$(DOWNLOAD_CABLE)' endif #------------------------------------------------------------------------------ # BUILD PRE/POST PROCESS #------------------------------------------------------------------------------ build_pre_process : $(BUILD_PRE_PROCESS) build_post_process : $(BUILD_POST_PROCESS) .PHONY: build_pre_process build_post_process #------------------------------------------------------------------------------ # TOOLS #------------------------------------------------------------------------------ # # Set tool default variables if not already defined. # If these are defined, they would typically be defined in an # included makefile fragment. # ifeq ($(DEFAULT_CROSS_COMPILE),) DEFAULT_CROSS_COMPILE := nios2-elf- endif ifeq ($(DEFAULT_STACK_REPORT),) DEFAULT_STACKREPORT := nios2-stackreport endif ifeq ($(DEFAULT_DOWNLOAD),) DEFAULT_DOWNLOAD := nios2-download endif ifeq ($(DEFAULT_FLASHPROG),) DEFAULT_FLASHPROG := nios2-flash-programmer endif ifeq ($(DEFAULT_ELFPATCH),) DEFAULT_ELFPATCH := nios2-elf-insert endif ifeq ($(DEFAULT_RM),) DEFAULT_RM := rm -f endif ifeq ($(DEFAULT_CP),) DEFAULT_CP := cp -f endif ifeq ($(DEFAULT_MKDIR),) DEFAULT_MKDIR := mkdir -p endif # # Set tool variables to defaults if not already defined. # If these are defined, they would typically be defined by a # setting in the generated portion of this makefile. # ifeq ($(CROSS_COMPILE),) CROSS_COMPILE := $(DEFAULT_CROSS_COMPILE) endif ifeq ($(origin CC),default) CC := $(CROSS_COMPILE)gcc -xc endif ifeq ($(origin CXX),default) CXX := $(CROSS_COMPILE)gcc -xc++ endif ifeq ($(origin AS),default) AS := $(CROSS_COMPILE)gcc endif ifeq ($(origin AR),default) AR := $(CROSS_COMPILE)ar endif ifeq ($(origin LD),default) LD := $(CROSS_COMPILE)g++ endif ifeq ($(origin NM),default) NM := $(CROSS_COMPILE)nm endif ifeq ($(origin RM),default) RM := $(DEFAULT_RM) endif ifeq ($(origin CP),default) CP := $(DEFAULT_CP) endif ifeq ($(OBJDUMP),) OBJDUMP := $(CROSS_COMPILE)objdump endif ifeq ($(OBJCOPY),) OBJCOPY := $(CROSS_COMPILE)objcopy endif ifeq ($(STACKREPORT),) ifeq ($(CROSS_COMPILE),nios2-elf-) STACKREPORT := $(DEFAULT_STACKREPORT) else DISABLE_STACKREPORT := 1 endif endif ifeq ($(DOWNLOAD),) DOWNLOAD := $(DEFAULT_DOWNLOAD) endif ifeq ($(FLASHPROG),) FLASHPROG := $(DEFAULT_FLASHPROG) endif ifeq ($(ELFPATCH),) ELFPATCH := $(DEFAULT_ELFPATCH) endif ifeq ($(MKDIR),) MKDIR := $(DEFAULT_MKDIR) endif #------------------------------------------------------------------------------ # PATTERN RULES TO BUILD OBJECTS #------------------------------------------------------------------------------ define compile.c @$(ECHO) Info: Compiling $< to $@ @$(MKDIR) $(@D) $(CC) -MP -MMD -c $(APP_CPPFLAGS) $(APP_CFLAGS) -o $@ $< $(CC_POST_PROCESS) endef define compile.cpp @$(ECHO) Info: Compiling $< to $@ @$(MKDIR) $(@D) $(CXX) -MP -MMD -c $(APP_CPPFLAGS) $(APP_CXXFLAGS) $(APP_CFLAGS) -o $@ $< $(CXX_POST_PROCESS) endef # If assembling with the compiler, ensure "-Wa," is prepended to all APP_ASFLAGS ifeq ($(AS),$(patsubst %as,%,$(AS))) COMMA := , APP_ASFLAGS := $(filter-out $(APP_CFLAGS),$(addprefix -Wa$(COMMA),$(patsubst -Wa$(COMMA)%,%,$(APP_ASFLAGS)))) endif define compile.s @$(ECHO) Info: Assembling $< to $@ @$(MKDIR) $(@D) $(AS) -MP -MMD -c $(APP_CPPFLAGS) $(APP_CFLAGS) $(APP_ASFLAGS) -o $@ $< $(AS_POST_PROCESS) endef ifeq ($(MAKE_VERSION),3.81) .SECONDEXPANSION: $(APP_OBJS_C): $(CONFIG_OBJ_DIR)/%.o: $$(call adjust-path-mixed,%.c) $(compile.c) $(APP_OBJS_CPP): $(CONFIG_OBJ_DIR)/%.o: $$(call adjust-path-mixed,%.cpp) $(compile.cpp) $(APP_OBJS_CC): $(CONFIG_OBJ_DIR)/%.o: $$(call adjust-path-mixed,%.cc) $(compile.cpp) $(APP_OBJS_CXX): $(CONFIG_OBJ_DIR)/%.o: $$(call adjust-path-mixed,%.cxx) $(compile.cpp) $(APP_OBJS_S): $(CONFIG_OBJ_DIR)/%.o: $$(call adjust-path-mixed,%.S) $(compile.s) $(APP_OBJS_SS): $(CONFIG_OBJ_DIR)/%.o: $$(call adjust-path-mixed,%.s) $(compile.s) endif # MAKE_VERSION != 3.81 $(CONFIG_OBJ_DIR)/%.o: %.c $(compile.c) $(CONFIG_OBJ_DIR)/%.o: %.cpp $(compile.cpp) $(CONFIG_OBJ_DIR)/%.o: %.cc $(compile.cpp) $(CONFIG_OBJ_DIR)/%.o: %.cxx $(compile.cpp) $(CONFIG_OBJ_DIR)/%.o: %.S $(compile.s) $(CONFIG_OBJ_DIR)/%.o: %.s $(compile.s) #------------------------------------------------------------------------------ # PATTERN RULES TO INTERMEDIATE FILES #------------------------------------------------------------------------------ $(CONFIG_OBJ_DIR)/%.s: %.c @$(ECHO) Info: Compiling $< to $@ @$(MKDIR) $(@D) $(CC) -S $(APP_CPPFLAGS) $(APP_CFLAGS) -o $@ $< $(CONFIG_OBJ_DIR)/%.s: %.cpp @$(ECHO) Info: Compiling $< to $@ @$(MKDIR) $(@D) $(CXX) -S $(APP_CPPFLAGS) $(APP_CXXFLAGS) $(APP_CFLAGS) -o $@ $< $(CONFIG_OBJ_DIR)/%.s: %.cc @$(ECHO) Info: Compiling $< to $@ @$(MKDIR) $(@D) $(CXX) -S $(APP_CPPFLAGS) $(APP_CXXFLAGS) $(APP_CFLAGS) -o $@ $< $(CONFIG_OBJ_DIR)/%.s: %.cxx @$(ECHO) Info: Compiling $< to $@ @$(MKDIR) $(@D) $(CXX) -S $(APP_CPPFLAGS) $(APP_CXXFLAGS) $(APP_CFLAGS) -o $@ $< $(CONFIG_OBJ_DIR)/%.i: %.c @$(ECHO) Info: Compiling $< to $@ @$(MKDIR) $(@D) $(CC) -E $(APP_CPPFLAGS) $(APP_CFLAGS) -o $@ $< $(CONFIG_OBJ_DIR)/%.i: %.cpp @$(ECHO) Info: Compiling $< to $@ @$(MKDIR) $(@D) $(CXX) -E $(APP_CPPFLAGS) $(APP_CXXFLAGS) $(APP_CFLAGS) -o $@ $< $(CONFIG_OBJ_DIR)/%.i: %.cc @$(ECHO) Info: Compiling $< to $@ @$(MKDIR) $(@D) $(CXX) -E $(APP_CPPFLAGS) $(APP_CXXFLAGS) $(APP_CFLAGS) -o $@ $< $(CONFIG_OBJ_DIR)/%.i: %.cxx @$(ECHO) Info: Compiling $< to $@ @$(MKDIR) $(@D) $(CXX) -E $(APP_CPPFLAGS) $(APP_CXXFLAGS) $(APP_CFLAGS) -o $@ $< #------------------------------------------------------------------------------ # TARGET RULES #------------------------------------------------------------------------------ .PHONY : help help : @$(ECHO) "Summary of Makefile targets" @$(ECHO) " Build targets:" @$(ECHO) " all (default) - Application and all libraries (including BSP)" @$(ECHO) " bsp - Just the BSP" @$(ECHO) " libs - All libraries (including BSP)" @$(ECHO) " flash - All flash files" @$(ECHO) " mem_init_generate - All memory initialization files" ifeq ($(QSYS),1) @$(ECHO) " mem_init_install - This target is deprecated for QSys Systems" @$(ECHO) " --> Use the mem_init_generate target and then" @$(ECHO) " add the generated meminit.qip file to your" @$(ECHO) " Quartus II Project." else # if QSYS != 1 @$(ECHO) " mem_init_install - Copy memory initialization files to Quartus II project" endif # QSYS == 1 @$(ECHO) @$(ECHO) " Clean targets:" @$(ECHO) " clean_all - Application and all libraries (including BSP)" @$(ECHO) " clean - Just the application" @$(ECHO) " clean_bsp - Just the BSP" @$(ECHO) " clean_libs - All libraries (including BSP)" @$(ECHO) @$(ECHO) " Run targets:" @$(ECHO) " download-elf - Download and run your elf executable" @$(ECHO) " program-flash - Program flash contents to the board" # Handy rule to skip making libraries and just make application. .PHONY : app app : $(ELF) ifeq ($(CREATE_OBJDUMP), 1) app : $(OBJDUMP_NAME) endif ifeq ($(CREATE_ELF_DERIVED_FILES),1) app : elf_derived_files endif .PHONY: elf_derived_files elf_derived_files: default_mem_init # Handy rule for making just the BSP. .PHONY : bsp bsp : @$(ECHO) Info: Building $(BSP_ROOT_DIR) @$(MAKE) --no-print-directory -C $(BSP_ROOT_DIR) # Make sure all makeable libraries (including the BSP) are up-to-date. LIB_TARGETS := $(patsubst %,%-recurs-make-lib,$(MAKEABLE_LIBRARY_ROOT_DIRS)) .PHONY : libs libs : $(LIB_TARGETS) ifneq ($(strip $(LIB_TARGETS)),) $(LIB_TARGETS): %-recurs-make-lib: @$(ECHO) Info: Building $* $(MAKE) --no-print-directory -C $* endif ifneq ($(strip $(APP_LDDEPS)),) $(APP_LDDEPS): libs @true endif # Rules to force your project to rebuild or relink # .force_relink file will cause any application that depends on this project to relink # .force_rebuild file will cause this project to rebuild object files # .force_rebuild_all file will cause this project and any project that depends on this project to rebuild object files FORCE_RELINK_DEP := .force_relink FORCE_REBUILD_DEP := .force_rebuild FORCE_REBUILD_ALL_DEP := .force_rebuild_all FORCE_REBUILD_DEP_LIST := $(CONFIG_OBJ_DIR)/$(FORCE_RELINK_DEP) $(CONFIG_OBJ_DIR)/$(FORCE_REBUILD_DEP) $(FORCE_REBUILD_ALL_DEP) $(FORCE_REBUILD_DEP_LIST): $(APP_OBJS): $(wildcard $(CONFIG_OBJ_DIR)/$(FORCE_REBUILD_DEP)) $(wildcard $(addsuffix /$(FORCE_REBUILD_ALL_DEP), . $(ALT_LIBRARY_DIRS))) $(ELF): $(wildcard $(addsuffix /$(FORCE_RELINK_DEP), $(CONFIG_OBJ_DIR) $(ALT_LIBRARY_DIRS))) # Clean just the application. .PHONY : clean ifeq ($(CREATE_ELF_DERIVED_FILES),1) clean : clean_elf_derived_files endif clean : @$(RM) -r $(ELF) $(OBJDUMP_NAME) $(LINKER_MAP_NAME) $(OBJ_ROOT_DIR) $(RUNTIME_ROOT_DIR) $(FORCE_REBUILD_DEP_LIST) @$(ECHO) [$(APP_NAME) clean complete] # Clean just the BSP. .PHONY : clean_bsp clean_bsp : @$(ECHO) Info: Cleaning $(BSP_ROOT_DIR) @$(MAKE) --no-print-directory -C $(BSP_ROOT_DIR) clean # Clean all makeable libraries including the BSP. LIB_CLEAN_TARGETS := $(patsubst %,%-recurs-make-clean-lib,$(MAKEABLE_LIBRARY_ROOT_DIRS)) .PHONY : clean_libs clean_libs : $(LIB_CLEAN_TARGETS) ifneq ($(strip $(LIB_CLEAN_TARGETS)),) $(LIB_CLEAN_TARGETS): %-recurs-make-clean-lib: @$(ECHO) Info: Cleaning $* $(MAKE) --no-print-directory -C $* clean endif .PHONY: clean_elf_derived_files clean_elf_derived_files: mem_init_clean # Clean application and all makeable libraries including the BSP. .PHONY : clean_all clean_all : clean mem_init_clean clean_libs # Include the dependency files unless the make goal is performing a clean # of the application. ifneq ($(firstword $(MAKECMDGOALS)),clean) ifneq ($(firstword $(MAKECMDGOALS)),clean_all) -include $(APP_DEPS) endif endif .PHONY : download-elf download-elf : $(ELF) @if [ "$(DOWNLOAD)" = "none" ]; \ then \ $(ECHO) Downloading $(ELF) not supported; \ else \ $(ECHO) Info: Downloading $(ELF); \ $(DOWNLOAD) --go --cpu_name=$(CPU_NAME) $(DOWNLOAD_CABLE_FLAG) $(SOPC_SYSID_FLAG) $(DOWNLOAD_JDI_FLAG) $(WRITE_GMON_OPTION) $(ELF); \ fi # Delete the target of a rule if it has changed and its commands exit # with a nonzero exit status. .DELETE_ON_ERROR: # Rules for flash programming commands PROGRAM_FLASH_SUFFIX := -program PROGRAM_FLASH_TARGET := $(addsuffix $(PROGRAM_FLASH_SUFFIX), $(FLASH_FILES)) .PHONY : program-flash program-flash : $(PROGRAM_FLASH_TARGET) .PHONY : $(PROGRAM_FLASH_TARGET) $(PROGRAM_FLASH_TARGET) : flash @if [ "$(FLASHPROG)" = "none" ]; \ then \ $(ECHO) Programming flash not supported; \ else \ $(ECHO) Info: Programming $(basename $@).flash; \ if [ -z "$($(basename $@)_EPCS_FLAGS)" ]; \ then \ $(ECHO) $(FLASHPROG) $(SOPC_SYSID_FLAG) --base=$($(basename $@)_START) $(basename $@).flash; \ $(FLASHPROG) $(DOWNLOAD_CABLE_FLAG) $(SOPC_SYSID_FLAG) --base=$($(basename $@)_START) $(basename $@).flash; \ else \ $(ECHO) $(FLASHPROG) $(SOPC_SYSID_FLAG) --epcs --base=$($(basename $@)_START) $(basename $@).flash; \ $(FLASHPROG) $(DOWNLOAD_CABLE_FLAG) $(SOPC_SYSID_FLAG) --epcs --base=$($(basename $@)_START) $(basename $@).flash; \ fi \ fi # Rules for simulating with an HDL Simulator [QSYS only] ifeq ($(QSYS),1) IP_MAKE_SIMSCRIPT := ip-make-simscript ifeq ($(VSIM),) VSIM_EXE := $(if $(VSIM_DIR),$(VSIM_DIR)/,)vsim ifeq ($(ENABLE_VSIM_GUI),1) VSIM := $(VSIM_EXE) -gui else VSIM := $(VSIM_EXE) -c endif # ENABLE_VSIM_GUI == 1 endif # VSIM not set ifeq ($(SPD),) ifneq ($(ABS_QUARTUS_PROJECT_DIR),) ifneq ($(SOPC_NAME),) SPD := $(ABS_QUARTUS_PROJECT_DIR)/$(SOPC_NAME)_tb.spd endif # SOPC_NAME set endif # ABS_QUARTUS_PROJECT_DIR set endif # SPD == empty string ifeq ($(MSIM_SCRIPT),) SIM_SCRIPT_DIR := $(RUNTIME_ROOT_DIR)/sim MSIM_SCRIPT := $(SIM_SCRIPT_DIR)/mentor/msim_setup.tcl endif # MSIM_SCRIPT == empty string ifeq ($(MAKE_VERSION),3.81) ABS_MEM_INIT_DESCRIPTOR_FILE := $(abspath $(MEM_INIT_DESCRIPTOR_FILE)) else ABS_MEM_INIT_DESCRIPTOR_FILE := $(call adjust-path-mixed,$(shell pwd))/$(MEM_INIT_DESCRIPTOR_FILE) endif $(MSIM_SCRIPT): $(SPD) $(MEM_INIT_DESCRIPTOR_FILE) ifeq ($(SPD),) $(error No SPD file specified. Ensure QUARTUS_PROJECT_DIR variable is set) endif @$(MKDIR) $(SIM_SCRIPT_DIR) $(IP_MAKE_SIMSCRIPT) --spd=$(SPD) --spd=$(MEM_INIT_DESCRIPTOR_FILE) --output-directory=$(SIM_SCRIPT_DIR) VSIM_COMMAND = \ cd $(dir $(MSIM_SCRIPT)) && \ $(VSIM) -do "do $(notdir $(MSIM_SCRIPT)); ld; $(if $(VSIM_RUN_TIME),run ${VSIM_RUN_TIME};quit;)" .PHONY: sim sim: $(MSIM_SCRIPT) mem_init_generate ifeq ($(MSIM_SCRIPT),) $(error MSIM_SCRIPT not set) endif $(VSIM_COMMAND) endif # QSYS == 1 #------------------------------------------------------------------------------ # ELF TARGET RULE #------------------------------------------------------------------------------ # Rule for constructing the executable elf file. $(ELF) : $(APP_OBJS) $(LINKER_SCRIPT) $(APP_LDDEPS) @$(ECHO) Info: Linking $@ $(LD) $(APP_LDFLAGS) $(APP_CFLAGS) -o $@ $(filter-out $(CRT0),$(APP_OBJS)) $(APP_LIBS) $(APP_BSP_DEP_LIBS) ifneq ($(DISABLE_ELFPATCH),1) $(ELFPATCH) $@ $(ELF_PATCH_FLAG) endif ifneq ($(DISABLE_STACKREPORT),1) @bash -c "$(STACKREPORT) $@" endif $(OBJDUMP_NAME) : $(ELF) @$(ECHO) Info: Creating $@ $(OBJDUMP) $(OBJDUMP_FLAGS) $< >$@ # Rule for printing the name of the elf file .PHONY: print-elf-name print-elf-name: @$(ECHO) $(ELF) bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/software/bladeRF_nios/pcsim.mk000066400000000000000000000020041457144405000273740ustar00rootroot00000000000000#------------------------------------------------------------------------------ # VARIABLES TO BE DEFINED BY PLATFORM MAKEFILE #------------------------------------------------------------------------------ # - FPGA_COMMON_DIR : Path to fpga_common # - BLADERF_COMMON_DIR : Path to common bladeRF_nios dir # - NIOS_BUILD_OUTDIR : Path to place the Nios build products #------------------------------------------------------------------------------ # MAKEFILE TARGETS #------------------------------------------------------------------------------ INCLUDES := -I $(FPGA_COMMON_DIR)/include -I $(BLADERF_COMMON_DIR)/src CFLAGS := -Wall -Wextra -Wno-unused-parameter \ -O0 -ggdb3 -DBLADERF_NIOS_PC_SIMULATION \ $(INCLUDES) SRC := $(wildcard $(BLADERF_COMMON_DIR)/src/*.c) $(FPGA_COMMON_DIR)/src/band_select.c all: $(NIOS_BUILD_OUTDIR)/bladeRF_nios.sim bladeRF_nios.sim: $(SRC) $(CC) $(CFLAGS) $^ -o $@ clean: rm -f $(NIOS_BUILD_OUTDIR)/bladeRF_nios.sim .PHONY: clean bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/software/bladeRF_nios/src/000077500000000000000000000000001457144405000265235ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/software/bladeRF_nios/src/debug.h000066400000000000000000000044031457144405000277630ustar00rootroot00000000000000/* This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef BLADERF_NIOS_DEBUG_H_ #define BLADERF_NIOS_DEBUG_H_ //#define BLADERF_NIOS_DEBUG #ifdef BLADERF_NIOS_PC_SIMULATION # include # define DBG(...) fprintf(stderr, __VA_ARGS__) /* Always keep assert() enabled for PC simulation */ # ifdef NDEBUG # define NDEBUG_UNDEF # endif # undef NDEBUG # include # ifdef NDEBUG_UNDEF # define NDEBUG # undef NDEBUG_UNDEF # endif # define ASSERT assert static inline void print_bytes(const char *msg, const uint8_t *bytes, size_t n) { size_t i; if (msg != NULL) { puts(msg); } for (i = 0; i < n; i++) { if (i == 0) { printf(" 0x%02x", bytes[i]); } else if ((i + 1) % 8 == 0) { printf(" 0x%02x\n ", bytes[i]); } else { printf(" 0x%02x", bytes[i]); } } putchar('\n'); } #else # ifdef BLADERF_NIOS_DEBUG # include "sys/alt_stdio.h" # define DBG(...) alt_printf(__VA_ARGS__) # else # define DBG(...) # endif # define ASSERT(x) # define print_bytes(m, b, n) #endif #endif bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/software/bladeRF_nios/src/devices.c000066400000000000000000000657231457144405000303260ustar00rootroot00000000000000/* This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef BLADERF_NIOS_PC_SIMULATION #include "devices.h" #include "debug.h" #include "devices_inline.h" #include "fpga_version.h" #include #include #include /* Define a global variable containing the current VCTCXO DAC setting. * This is a 'cached' value of what is written to the DAC and is used * by the VCTCXO calibration algorithm to avoid constant read requests * going out to the DAC. Initial power-up state of the DAC is mid-scale. */ uint16_t vctcxo_trim_dac_value = 0x7FFF; /* Define a cached version of the VCTCXO tamer control register */ uint8_t vctcxo_tamer_ctrl_reg = 0x00; #ifdef BOARD_BLADERF_MICRO /* Common bladeRF2 header */ #include "bladerf2_common.h" /* Cached version of ADF400x registers */ uint32_t adf400x_reg[4] = { 0 }; /* Define the fast lock profile storage arrays */ fastlock_profile fastlocks_rx[NUM_BBP_FASTLOCK_PROFILES]; fastlock_profile fastlocks_tx[NUM_BBP_FASTLOCK_PROFILES]; #endif // BOARD_BLADERF_MICRO static void command_uart_enable_isr(bool enable) { uint32_t val = enable ? 1 : 0; IOWR_32DIRECT(COMMAND_UART_BASE, 16, val); return; } static void command_uart_isr(void *context) { struct pkt_buf *pkt = (struct pkt_buf *)context; /* Reading the request should clear the interrupt */ command_uart_read_request((uint8_t *)pkt->req); /* Tell the main loop that there is a request pending */ pkt->ready = true; return; } static void vctcxo_tamer_isr(void *context) { struct vctcxo_tamer_pkt_buf *pkt = (struct vctcxo_tamer_pkt_buf *)context; uint8_t error_status = 0x00; /* Disable interrupts */ vctcxo_tamer_enable_isr(false); /* Reset (stop) the counters */ vctcxo_tamer_reset_counters(true); /* Read the current count values */ pkt->pps_1s_error = vctcxo_tamer_read_count(VT_ERR_1S_ADDR); pkt->pps_10s_error = vctcxo_tamer_read_count(VT_ERR_10S_ADDR); pkt->pps_100s_error = vctcxo_tamer_read_count(VT_ERR_100S_ADDR); /* Read the error status register */ error_status = vctcxo_tamer_read(VT_STAT_ADDR); /* Set the appropriate flags in the packet buffer */ pkt->pps_1s_error_flag = (error_status & VT_STAT_ERR_1S) ? true : false; pkt->pps_10s_error_flag = (error_status & VT_STAT_ERR_10S) ? true : false; pkt->pps_100s_error_flag = (error_status & VT_STAT_ERR_100S) ? true : false; /* Clear interrupt */ vctcxo_tamer_clear_isr(); /* Tell the main loop that there is a request pending */ pkt->ready = true; return; } void vctcxo_tamer_enable_isr(bool enable) { if (enable) { vctcxo_tamer_ctrl_reg |= VT_CTRL_IRQ_EN; } else { vctcxo_tamer_ctrl_reg &= ~VT_CTRL_IRQ_EN; } vctcxo_tamer_write(VT_CTRL_ADDR, vctcxo_tamer_ctrl_reg); return; } void vctcxo_tamer_clear_isr() { vctcxo_tamer_write(VT_CTRL_ADDR, vctcxo_tamer_ctrl_reg | VT_CTRL_IRQ_CLR); return; } void vctcxo_tamer_reset_counters(bool reset) { if (reset) { vctcxo_tamer_ctrl_reg |= VT_CTRL_RESET; } else { vctcxo_tamer_ctrl_reg &= ~VT_CTRL_RESET; } vctcxo_tamer_write(VT_CTRL_ADDR, vctcxo_tamer_ctrl_reg); return; } void vctcxo_tamer_set_tune_mode(bladerf_vctcxo_tamer_mode mode) { switch (mode) { case BLADERF_VCTCXO_TAMER_DISABLED: case BLADERF_VCTCXO_TAMER_1_PPS: case BLADERF_VCTCXO_TAMER_10_MHZ: vctcxo_tamer_enable_isr(false); break; default: /* Erroneous value */ return; } /* Set tuning mode */ vctcxo_tamer_ctrl_reg &= ~VT_CTRL_TUNE_MODE; vctcxo_tamer_ctrl_reg |= (((uint8_t)mode) << 6); vctcxo_tamer_write(VT_CTRL_ADDR, vctcxo_tamer_ctrl_reg); /* Reset the counters */ vctcxo_tamer_reset_counters(true); /* Take counters out of reset if tuning mode is not DISABLED */ if (mode != 0x00) { vctcxo_tamer_reset_counters(false); } switch (mode) { case BLADERF_VCTCXO_TAMER_1_PPS: case BLADERF_VCTCXO_TAMER_10_MHZ: vctcxo_tamer_enable_isr(true); break; default: /* Leave ISR disabled otherwise */ break; } return; } bladerf_vctcxo_tamer_mode vctcxo_tamer_get_tune_mode() { uint8_t tmp = vctcxo_tamer_read(VT_CTRL_ADDR); tmp = (tmp & VT_CTRL_TUNE_MODE) >> 6; switch (tmp) { case BLADERF_VCTCXO_TAMER_DISABLED: case BLADERF_VCTCXO_TAMER_1_PPS: case BLADERF_VCTCXO_TAMER_10_MHZ: return (bladerf_vctcxo_tamer_mode)tmp; default: return BLADERF_VCTCXO_TAMER_INVALID; } } int32_t vctcxo_tamer_read_count(uint8_t addr) { uint32_t base = VCTCXO_TAMER_0_BASE; uint8_t offset = addr; int32_t value = 0; value = IORD_8DIRECT(base, offset++); value |= ((int32_t)IORD_8DIRECT(base, offset++)) << 8; value |= ((int32_t)IORD_8DIRECT(base, offset++)) << 16; value |= ((int32_t)IORD_8DIRECT(base, offset++)) << 24; return value; } uint8_t vctcxo_tamer_read(uint8_t addr) { return (uint8_t)IORD_8DIRECT(VCTCXO_TAMER_0_BASE, addr); } void vctcxo_tamer_write(uint8_t addr, uint8_t data) { IOWR_8DIRECT(VCTCXO_TAMER_0_BASE, addr, data); } void tamer_schedule(bladerf_module m, uint64_t time) { uint32_t base = (m == BLADERF_MODULE_RX) ? RX_TAMER_BASE : TX_TAMER_BASE; /* Set the holding time */ IOWR_8DIRECT(base, 0, (time >> 0) & 0xff); IOWR_8DIRECT(base, 1, (time >> 8) & 0xff); IOWR_8DIRECT(base, 2, (time >> 16) & 0xff); IOWR_8DIRECT(base, 3, (time >> 24) & 0xff); IOWR_8DIRECT(base, 4, (time >> 32) & 0xff); IOWR_8DIRECT(base, 5, (time >> 40) & 0xff); IOWR_8DIRECT(base, 6, (time >> 48) & 0xff); IOWR_8DIRECT(base, 7, (time >> 54) & 0xff); /* Commit it and arm the comparison */ IOWR_8DIRECT(base, 8, 0); return; } void bladerf_nios_init(struct pkt_buf *pkt, struct vctcxo_tamer_pkt_buf *vctcxo_tamer_pkt) { /* Set the prescaler for 400kHz with an 80MHz clock: * (prescaler = clock / (5*desired) - 1) */ IOWR_16DIRECT(I2C, OC_I2C_PRESCALER, 39); IOWR_8DIRECT(I2C, OC_I2C_CTRL, OC_I2C_ENABLE); #ifdef IQ_CORR_RX_PHASE_GAIN_BASE #ifdef IQ_CORR_TX_PHASE_GAIN_BASE /* Set the IQ Correction parameters to 0 */ IOWR_ALTERA_AVALON_PIO_DATA(IQ_CORR_RX_PHASE_GAIN_BASE, DEFAULT_CORRECTION); IOWR_ALTERA_AVALON_PIO_DATA(IQ_CORR_TX_PHASE_GAIN_BASE, DEFAULT_CORRECTION); #endif #endif /* Disable all triggering */ IOWR_ALTERA_AVALON_PIO_DATA(TX_TRIGGER_CTL_BASE, 0x00); IOWR_ALTERA_AVALON_PIO_DATA(RX_TRIGGER_CTL_BASE, 0x00); /* Register Command UART ISR */ alt_ic_isr_register(COMMAND_UART_IRQ_INTERRUPT_CONTROLLER_ID, COMMAND_UART_IRQ, command_uart_isr, pkt, NULL); /* Register the VCTCXO Tamer ISR */ alt_ic_isr_register(VCTCXO_TAMER_0_IRQ_INTERRUPT_CONTROLLER_ID, VCTCXO_TAMER_0_IRQ, vctcxo_tamer_isr, vctcxo_tamer_pkt, NULL); /* Default VCTCXO Tamer and its interrupts to be disabled. */ vctcxo_tamer_set_tune_mode(BLADERF_VCTCXO_TAMER_DISABLED); /* Enable interrupts */ command_uart_enable_isr(true); alt_ic_irq_enable(COMMAND_UART_IRQ_INTERRUPT_CONTROLLER_ID, COMMAND_UART_IRQ); alt_ic_irq_enable(VCTCXO_TAMER_0_IRQ_INTERRUPT_CONTROLLER_ID, VCTCXO_TAMER_0_IRQ); } static void i2c_complete_transfer(uint8_t check_rxack) { if ((IORD_8DIRECT(I2C, OC_I2C_CMD_STATUS) & OC_I2C_TIP) == 0) { while ((IORD_8DIRECT(I2C, OC_I2C_CMD_STATUS) & OC_I2C_TIP) == 0) ; } while (IORD_8DIRECT(I2C, OC_I2C_CMD_STATUS) & OC_I2C_TIP) ; while (check_rxack && (IORD_8DIRECT(I2C, OC_I2C_CMD_STATUS) & OC_I2C_RXACK)) ; } void spi_arbiter_lock() { // Applies only to bladeRF1 #ifdef ARBITER_0_BASE uint8_t data; IOWR_32DIRECT(ARBITER_0_BASE, 0, 1); do { data = IORD_8DIRECT(ARBITER_0_BASE, 1); } while ((data & 1) == 0); #endif // ARBITER_0_BASE } void spi_arbiter_unlock() { // Applies only to bladeRF1 #ifdef ARBITER_0_BASE IOWR_32DIRECT(ARBITER_0_BASE, 0, 2); #endif // ARBITER_0_BASE } uint8_t lms6_read(uint8_t addr) { uint8_t data; spi_arbiter_lock(); data = IORD_8DIRECT(RFFE_SPI_BASE, addr); spi_arbiter_unlock(); return data; } void lms6_write(uint8_t addr, uint8_t data) { spi_arbiter_lock(); IOWR_8DIRECT(RFFE_SPI_BASE, addr, data); spi_arbiter_unlock(); } #ifdef BOARD_BLADERF_MICRO uint64_t adi_spi_read(uint16_t addr) { alt_u8 addr8[2]; alt_u8 data8[8]; alt_u8 bytes; uint8_t i; uint64_t rv; spi_arbiter_lock(); // The alt_avalon_spi_command expects parameters to be arrays of bytes // Convert the uint16_t address into array of 2 uint8_t addr8[0] = (addr >> 8); addr8[1] = (addr & 0xff); // Calculate number of data bytes in this command bytes = (((addr >> 12) & 0x7) + 1); // Send down the command, read the response into data8 alt_avalon_spi_command(RFFE_SPI_BASE, 0, 2, &addr8[0], bytes, &data8[0], 0); // Build the uint64_t return value rv = UINT64_C(0x0); for (i = 0; i < 8; i++) { rv |= (((uint64_t)data8[i]) << 8 * (7 - i)); } spi_arbiter_unlock(); return rv; } #endif // BOARD_BLADERF_MICRO #ifdef BOARD_BLADERF_MICRO void adi_spi_write(uint16_t addr, uint64_t data) { alt_u8 data8[10]; alt_u8 bytes; uint8_t i; spi_arbiter_lock(); // The alt_avalon_spi_command expects parameters to be arrays of bytes // Convert the uint16_t address into array of 2 uint8_t data8[0] = (addr >> 8) | 0x80; /* Make sure write bit is set */ data8[1] = (addr & 0xff); // Convert the uint64_t data into an array of 8 uint8_t for (i = 0; i < 8; i++) { data8[i + 2] = (data >> 8 * (7 - i)) & 0xff; } // Calculate number of command and data bytes in this command bytes = (((addr >> 12) & 0x7) + 1) + 2; // Send down the command and the data alt_avalon_spi_command(RFFE_SPI_BASE, 0, bytes, &data8[0], 0, 0, 0); spi_arbiter_unlock(); } #endif // BOARD_BLADERF_MICRO #ifdef BOARD_BLADERF_MICRO uint32_t adi_axi_read(uint16_t addr) { uint32_t data = 0; #ifdef AXI_AD9361_0_BASE // Temporary hack for bladeRF1 compat data = IORD_32DIRECT(AXI_AD9361_0_BASE, addr); #endif return data; } #endif // BOARD_BLADERF_MICRO #ifdef BOARD_BLADERF_MICRO void adi_axi_write(uint16_t addr, uint32_t data) { #ifdef AXI_AD9361_0_BASE // Temporary hack for bladeRF1 compat IOWR_32DIRECT(AXI_AD9361_0_BASE, addr, data); #endif } #endif // BOARD_BLADERF_MICRO #ifdef BOARD_BLADERF_MICRO uint32_t wishbone_master_read(uint32_t addr) { uint32_t data = 0; #ifdef WISHBONE_MASTER_0_BASE // Temporary hack for bladeRF1 compat data = IORD_32DIRECT(WISHBONE_MASTER_0_BASE, addr); #endif return data; } #endif // BOARD_BLADERF_MICRO #ifdef BOARD_BLADERF_MICRO void wishbone_master_write(uint32_t addr, uint32_t data) { #ifdef WISHBONE_MASTER_0_BASE // Temporary hack for bladeRF1 compat IOWR_32DIRECT(WISHBONE_MASTER_0_BASE, addr, data); #endif } #endif // BOARD_BLADERF_MICRO #ifdef BOARD_BLADERF_MICRO void adi_fastlock_save(bool is_tx, uint8_t rffe_profile, uint16_t nios_profile) { uint16_t fl_prog_addr_reg; uint16_t fl_prog_rddata_reg; uint16_t addr; uint64_t data; uint32_t i; fastlock_profile *fastlocks; if (is_tx) { fl_prog_addr_reg = 0x29c; fl_prog_rddata_reg = 0x29e; fastlocks = fastlocks_tx; } else { fl_prog_addr_reg = 0x25c; fl_prog_rddata_reg = 0x25e; fastlocks = fastlocks_rx; } /* Read out the profile data and save to Nios memory */ for (i = 0; i < 16; i++) { addr = (0x1 << 15) | (0x0 << 12) | (fl_prog_addr_reg & 0x3ff); data = (uint64_t)(((rffe_profile & 0x7) << 4) | (i & 0xf)) << 8 * 7; adi_spi_write(addr, data); addr = (0x0 << 15) | (0x0 << 12) | (fl_prog_rddata_reg & 0x3ff); fastlocks[nios_profile].profile_data[i] = adi_spi_read(addr) >> 56; } /* Kick out any other profile stored in the Nios that was in this slot */ for (i = 0; i < NUM_BBP_FASTLOCK_PROFILES; i++) { if ((fastlocks[i].profile_num == rffe_profile) && (fastlocks[i].state == FASTLOCK_STATE_BBP_RFFE)) { fastlocks[i].state = FASTLOCK_STATE_BBP; } } /* Update profile state */ fastlocks[nios_profile].state = FASTLOCK_STATE_BBP_RFFE; } #endif // BOARD_BLADERF_MICRO #ifdef BOARD_BLADERF_MICRO void adi_fastlock_load(bladerf_module m, fastlock_profile *p) { static const uint8_t fl_prog_write = 1 << 1; static const uint8_t fl_prog_clken = 1 << 0; static const uint8_t fl_prog_bytes = 16; uint16_t fl_prog_data_reg; uint16_t fl_prog_ctrl_reg; uint32_t i; uint16_t addr; uint64_t data; fastlock_profile *fastlocks; if (BLADERF_CHANNEL_IS_TX(m)) { fl_prog_data_reg = 0x29d; fl_prog_ctrl_reg = 0x29f; fastlocks = fastlocks_tx; } else { fl_prog_data_reg = 0x25d; fl_prog_ctrl_reg = 0x25f; fastlocks = fastlocks_rx; } if ((p->state == FASTLOCK_STATE_RFFE) || (p->state == FASTLOCK_STATE_BBP_RFFE)) { /* Already loaded! */ return; } else { /* Kick out any other loaded profile that's in this slot */ for (i = 0; i < NUM_BBP_FASTLOCK_PROFILES; i++) { if ((fastlocks[i].profile_num == p->profile_num) && (fastlocks[i].state == FASTLOCK_STATE_BBP_RFFE)) { fastlocks[i].state = FASTLOCK_STATE_BBP; } } /* Write 2 bytes to fast lock program data register */ addr = (0x1 << 15) | (0x1 << 12) | (fl_prog_data_reg & 0x3ff); data = (uint64_t)(p->profile_data[0]) << 8 * 7; data |= (uint64_t)(((p->profile_num & 0x7) << 4) | (i & 0xf)) << 8 * 6; adi_spi_write(addr, data); for (i = 1; i < fl_prog_bytes; i++) { /* Write 4 bytes to fast lock program control register */ addr = (0x1 << 15) | (0x3 << 12) | (fl_prog_ctrl_reg & 0x3ff); data = (uint64_t)(fl_prog_write | fl_prog_clken) << 8 * 7; data |= UINT64_C(0x0) << 8 * 6; data |= (uint64_t)(p->profile_data[i]) << 8 * 5; data |= ((uint64_t)(((p->profile_num & 0x7) << 4) | (i & 0xf)) << 8 * 4); adi_spi_write(addr, data); } /* Write 1 byte to fast lock program control register */ addr = (0x1 << 15) | (0x0 << 12) | (fl_prog_ctrl_reg & 0x3ff); data = (uint64_t)(fl_prog_write | fl_prog_clken) << 8 * 7; adi_spi_write(addr, data); /* Write 1 byte to fast lock program control register */ addr = (0x1 << 15) | (0x0 << 12) | (fl_prog_ctrl_reg & 0x3ff); adi_spi_write(addr, 0); /* Update profile state */ p->state = FASTLOCK_STATE_BBP_RFFE; } } #endif // BOARD_BLADERF_MICRO #ifdef BOARD_BLADERF_MICRO void adi_fastlock_recall(bladerf_module m, fastlock_profile *p) { uint16_t fl_setup_reg = BLADERF_CHANNEL_IS_TX(m) ? 0x29a : 0x25a; uint16_t addr; uint64_t data = 0; addr = (0x1 << 15) | (0x0 << 12) | (fl_setup_reg & 0x3ff); data = (uint64_t)(((p->profile_num & 0x7) << 5) | (0x1)) << 8 * 7; adi_spi_write(addr, data); } #endif // BOARD_BLADERF_MICRO #ifdef BOARD_BLADERF_MICRO void adi_rfport_select(fastlock_profile *p) { static const uint16_t input_sel_reg = 0x4; static const uint8_t rx_port_mask = 0x3f; static const uint8_t tx_port_mask = 0x40; uint16_t addr; uint64_t data; /* Get current port selection */ addr = (0x0 << 15) | (0x0 << 12) | (input_sel_reg & 0x3ff); data = adi_spi_read(addr) >> 56; if (p->port >> 7) { /* RX bit is set, only modify RX port selection */ data = (data & ~rx_port_mask) | (p->port & rx_port_mask); } else { /* RX bit is clear, only modify TX port selection */ data = (data & ~tx_port_mask) | (p->port & tx_port_mask); } /* Write the new port selection to AD9361 */ addr = (0x1 << 15) | (0x0 << 12) | (input_sel_reg & 0x3ff); data = data << 56; adi_spi_write(addr, data); } #endif // BOARD_BLADERF_MICRO #ifdef BOARD_BLADERF_MICRO void adi_rfspdt_select(bladerf_module m, fastlock_profile *p) { static const uint32_t tx_spdt_shift = RFFE_CONTROL_TX_SPDT_1; static const uint32_t tx_spdt_mask = (0xF << tx_spdt_shift); static const uint32_t rx_spdt_shift = RFFE_CONTROL_RX_SPDT_1; static const uint32_t rx_spdt_mask = (0xF << rx_spdt_shift); uint32_t rffe_gpio; rffe_gpio = rffe_csr_read(); if (BLADERF_CHANNEL_IS_TX(m)) { rffe_gpio &= (~tx_spdt_mask); rffe_gpio |= ((p->spdt >> 4) << tx_spdt_shift); } else { rffe_gpio &= (~rx_spdt_mask); rffe_gpio |= ((p->spdt & 0xf) << rx_spdt_shift); } rffe_csr_write(rffe_gpio); } #endif // BOARD_BLADERF_MICRO uint8_t si5338_read(uint8_t addr) { uint8_t data; /* Set the address to the Si5338 */ IOWR_8DIRECT(I2C, OC_I2C_DATA, SI5338_I2C); IOWR_8DIRECT(I2C, OC_I2C_CMD_STATUS, OC_I2C_STA | OC_I2C_WR); i2c_complete_transfer(1); IOWR_8DIRECT(I2C, OC_I2C_DATA, addr); IOWR_8DIRECT(I2C, OC_I2C_CMD_STATUS, OC_I2C_WR | OC_I2C_STO); i2c_complete_transfer(1); /* Next transfer is a read operation, so '1' in the read/write bit */ IOWR_8DIRECT(I2C, OC_I2C_DATA, SI5338_I2C | 1); IOWR_8DIRECT(I2C, OC_I2C_CMD_STATUS, OC_I2C_STA | OC_I2C_WR); i2c_complete_transfer(1); IOWR_8DIRECT(I2C, OC_I2C_CMD_STATUS, OC_I2C_RD | OC_I2C_NACK | OC_I2C_STO); i2c_complete_transfer(0); data = IORD_8DIRECT(I2C, OC_I2C_DATA); return data; } void si5338_write(uint8_t addr, uint8_t data) { /* Set the address to the Si5338 */ IOWR_8DIRECT(I2C, OC_I2C_DATA, SI5338_I2C); IOWR_8DIRECT(I2C, OC_I2C_CMD_STATUS, OC_I2C_STA | OC_I2C_WR); i2c_complete_transfer(1); IOWR_8DIRECT(I2C, OC_I2C_DATA, addr); IOWR_8DIRECT(I2C, OC_I2C_CMD_STATUS, OC_I2C_WR); i2c_complete_transfer(1); IOWR_8DIRECT(I2C, OC_I2C_DATA, data); IOWR_8DIRECT(I2C, OC_I2C_CMD_STATUS, OC_I2C_WR | OC_I2C_STO); i2c_complete_transfer(0); } #ifdef BOARD_BLADERF_MICRO uint16_t ina219_read(uint8_t addr) { uint16_t data; /* Set the address to the INA219 */ IOWR_8DIRECT(I2C, OC_I2C_DATA, INA219_I2C); IOWR_8DIRECT(I2C, OC_I2C_CMD_STATUS, OC_I2C_STA | OC_I2C_WR); i2c_complete_transfer(1); IOWR_8DIRECT(I2C, OC_I2C_DATA, addr); IOWR_8DIRECT(I2C, OC_I2C_CMD_STATUS, OC_I2C_WR | OC_I2C_STO); i2c_complete_transfer(1); /* Next transfer is a read operation, so '1' in the read/write bit */ IOWR_8DIRECT(I2C, OC_I2C_DATA, INA219_I2C | 1); IOWR_8DIRECT(I2C, OC_I2C_CMD_STATUS, OC_I2C_STA | OC_I2C_WR); i2c_complete_transfer(1); IOWR_8DIRECT(I2C, OC_I2C_CMD_STATUS, OC_I2C_RD); i2c_complete_transfer(1); data = IORD_8DIRECT(I2C, OC_I2C_DATA) << 8; IOWR_8DIRECT(I2C, OC_I2C_CMD_STATUS, OC_I2C_RD | OC_I2C_NACK | OC_I2C_STO); i2c_complete_transfer(0); data |= IORD_8DIRECT(I2C, OC_I2C_DATA); return data; } #endif // BOARD_BLADERF_MICRO #ifdef BOARD_BLADERF_MICRO void ina219_write(uint8_t addr, uint16_t data) { /* Set the address to the INA219 */ IOWR_8DIRECT(I2C, OC_I2C_DATA, INA219_I2C); IOWR_8DIRECT(I2C, OC_I2C_CMD_STATUS, OC_I2C_STA | OC_I2C_WR); i2c_complete_transfer(1); IOWR_8DIRECT(I2C, OC_I2C_DATA, addr); IOWR_8DIRECT(I2C, OC_I2C_CMD_STATUS, OC_I2C_CMD_STATUS | OC_I2C_WR); i2c_complete_transfer(1); IOWR_8DIRECT(I2C, OC_I2C_DATA, data >> 8); IOWR_8DIRECT(I2C, OC_I2C_CMD_STATUS, OC_I2C_WR); i2c_complete_transfer(1); IOWR_8DIRECT(I2C, OC_I2C_DATA, data); IOWR_8DIRECT(I2C, OC_I2C_CMD_STATUS, OC_I2C_WR | OC_I2C_STO); i2c_complete_transfer(0); } #endif // BOARD_BLADERF_MICRO void vctcxo_trim_dac_write(uint8_t cmd, uint16_t val) { uint8_t data[3] = { cmd, (val >> 8) & 0xff, val & 0xff, }; /* Update cached value of trim DAC setting */ vctcxo_trim_dac_value = val; alt_avalon_spi_command(PERIPHERAL_SPI_BASE, 0, 3, data, 0, 0, 0); } void vctcxo_trim_dac_read(uint8_t cmd, uint16_t *val) { alt_u8 data[2]; alt_avalon_spi_command(PERIPHERAL_SPI_BASE, 0, 1, &cmd, 0, 0, ALT_AVALON_SPI_COMMAND_MERGE); alt_avalon_spi_command(PERIPHERAL_SPI_BASE, 0, 0, 0, 2, &data[0], 0); *val = ((uint8_t)data[0] << 8) | (uint8_t)data[1]; } #ifdef BOARD_BLADERF_MICRO void ad56x1_vctcxo_trim_dac_write(uint16_t val) { uint8_t data[2] = { (val >> 8) & 0xff, val & 0xff, }; /* Update cached value of trim DAC setting */ vctcxo_trim_dac_value = val; alt_avalon_spi_command(PERIPHERAL_SPI_BASE, 0, 2, data, 0, 0, 0); } #endif // BOARD_BLADERF_MICRO #ifdef BOARD_BLADERF_MICRO void ad56x1_vctcxo_trim_dac_read(uint16_t *val) { /* The AD56x1 DAC does not have readback functionality. * Return the cached DAC value */ *val = vctcxo_trim_dac_value; } #endif // BOARD_BLADERF_MICRO #ifdef BOARD_BLADERF_MICRO void adf400x_spi_write(uint32_t val) { uint8_t data[3] = { (val >> 16) & 0xff, (val >> 8) & 0xff, (val >> 0) & 0xff }; /* Update cached value of ADF400x setting */ adf400x_reg[val & 0x3] = val; alt_avalon_spi_command(PERIPHERAL_SPI_BASE, 1, 3, data, 0, 0, 0); } #endif // BOARD_BLADERF_MICRO #ifdef BOARD_BLADERF_MICRO uint32_t adf400x_spi_read(uint8_t addr) { /* This assumes the AD400x MUXOUT is set to SDO/MISO, * but the behavior of this output is unclear. */ /* uint8_t sdo_data[3] = { 0 }; uint8_t sdi_data[3] = { (adf400x_reg[addr & 0x3] >> 16) & 0xff, (adf400x_reg[addr & 0x3] >> 8) & 0xff, (adf400x_reg[addr & 0x3] >> 0) & 0xff }; */ /* Perform the SPI operation so we can take a look on SignalTap */ // alt_avalon_spi_command(PERIPHERAL_SPI_BASE, 1, 3, sdi_data, 3, sdo_data, // 0); /* Just return the cached value */ return adf400x_reg[addr & 0x3]; } #endif // BOARD_BLADERF_MICRO void adf4351_write(uint32_t val) { union { uint32_t val; uint8_t byte[4]; } sval; uint8_t t; sval.val = val; t = sval.byte[0]; sval.byte[0] = sval.byte[3]; sval.byte[3] = t; t = sval.byte[1]; sval.byte[1] = sval.byte[2]; sval.byte[2] = t; alt_avalon_spi_command(PERIPHERAL_SPI_BASE, 1, 4, (uint8_t *)&sval.val, 0, 0, 0); } // Temporary for bladeRF2 compat #ifdef IQ_CORR_RX_PHASE_GAIN_BASE #ifdef IQ_CORR_TX_PHASE_GAIN_BASE static inline uint32_t module_to_iqcorr_base(bladerf_module m) { if (m == BLADERF_MODULE_RX) { return IQ_CORR_RX_PHASE_GAIN_BASE; } else { return IQ_CORR_TX_PHASE_GAIN_BASE; } } uint16_t iqbal_get_gain(bladerf_module m) { const uint32_t base = module_to_iqcorr_base(m); const uint32_t regval = IORD_ALTERA_AVALON_PIO_DATA(base); return (uint16_t)regval; } void iqbal_set_gain(bladerf_module m, uint16_t value) { const uint32_t base = module_to_iqcorr_base(m); uint32_t regval = IORD_ALTERA_AVALON_PIO_DATA(base); regval &= 0xffff0000; regval |= value; IOWR_ALTERA_AVALON_PIO_DATA(base, regval); } uint16_t iqbal_get_phase(bladerf_module m) { uint32_t regval; if (m == BLADERF_MODULE_RX) { regval = IORD_ALTERA_AVALON_PIO_DATA(IQ_CORR_RX_PHASE_GAIN_BASE); } else { regval = IORD_ALTERA_AVALON_PIO_DATA(IQ_CORR_TX_PHASE_GAIN_BASE); } return (uint16_t)(regval >> 16); } void iqbal_set_phase(bladerf_module m, uint16_t value) { const uint32_t base = module_to_iqcorr_base(m); uint32_t regval = IORD_ALTERA_AVALON_PIO_DATA(base); regval &= 0x0000ffff; regval |= ((uint32_t)value) << 16; IOWR_ALTERA_AVALON_PIO_DATA(base, regval); } #endif #else uint16_t iqbal_get_gain(bladerf_module m) { return 0; } void iqbal_set_gain(bladerf_module m, uint16_t value) {} uint16_t iqbal_get_phase(bladerf_module m) { return 0; } void iqbal_set_phase(bladerf_module m, uint16_t value) {} #endif void tx_trigger_ctl_write(uint8_t data) { IOWR_ALTERA_AVALON_PIO_DATA(TX_TRIGGER_CTL_BASE, data); } uint8_t tx_trigger_ctl_read(void) { return IORD_ALTERA_AVALON_PIO_DATA(TX_TRIGGER_CTL_BASE); } void rx_trigger_ctl_write(uint8_t data) { IOWR_ALTERA_AVALON_PIO_DATA(RX_TRIGGER_CTL_BASE, data); } uint8_t rx_trigger_ctl_read(void) { return IORD_ALTERA_AVALON_PIO_DATA(RX_TRIGGER_CTL_BASE); } void agc_dc_corr_write(uint16_t addr, uint16_t value) { // Applies only to bladeRF1 #ifdef AGC_DC_I_MIN_BASE if (addr == NIOS_PKT_8x16_ADDR_AGC_DC_Q_MAX) IOWR_ALTERA_AVALON_PIO_DATA(AGC_DC_Q_MAX_BASE, value); else if (addr == NIOS_PKT_8x16_ADDR_AGC_DC_I_MAX) IOWR_ALTERA_AVALON_PIO_DATA(AGC_DC_I_MAX_BASE, value); else if (addr == NIOS_PKT_8x16_ADDR_AGC_DC_Q_MID) IOWR_ALTERA_AVALON_PIO_DATA(AGC_DC_Q_MID_BASE, value); else if (addr == NIOS_PKT_8x16_ADDR_AGC_DC_I_MID) IOWR_ALTERA_AVALON_PIO_DATA(AGC_DC_I_MID_BASE, value); else if (addr == NIOS_PKT_8x16_ADDR_AGC_DC_Q_MIN) IOWR_ALTERA_AVALON_PIO_DATA(AGC_DC_Q_MIN_BASE, value); else if (addr == NIOS_PKT_8x16_ADDR_AGC_DC_I_MIN) IOWR_ALTERA_AVALON_PIO_DATA(AGC_DC_I_MIN_BASE, value); #endif // AGC_DC_I_MIN_BASE } uint64_t time_tamer_read(bladerf_module m) { uint32_t base = (m == BLADERF_MODULE_RX) ? RX_TAMER_BASE : TX_TAMER_BASE; uint8_t offset = 0; uint64_t value = 0; value = IORD_8DIRECT(base, offset++); value |= ((uint64_t)IORD_8DIRECT(base, offset++)) << 8; value |= ((uint64_t)IORD_8DIRECT(base, offset++)) << 16; value |= ((uint64_t)IORD_8DIRECT(base, offset++)) << 24; value |= ((uint64_t)IORD_8DIRECT(base, offset++)) << 32; value |= ((uint64_t)IORD_8DIRECT(base, offset++)) << 40; value |= ((uint64_t)IORD_8DIRECT(base, offset++)) << 48; value |= ((uint64_t)IORD_8DIRECT(base, offset++)) << 56; return value; } #endif bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/software/bladeRF_nios/src/devices.h000066400000000000000000000374621457144405000303320ustar00rootroot00000000000000/* This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef DEVICES_H_ #define DEVICES_H_ #include #include #include "libbladeRF_nios_compat.h" #include "fpga_version.h" #include "pkt_handler.h" /* Detect if we are in NIOS Build tools */ #ifdef BLADERF_NIOS_BUILD # ifdef BLADERF_NIOS_PC_SIMULATION # error "When compiling for the NIOS II, you cannot define BLADERF_NIOS_PC_SIMULATION." # endif #else # ifndef BLADERF_NIOS_PC_SIMULATION # error "When compiling for PC simulation, you must define BLADERF_NIOS_PC_SIMULATION." # endif #endif #ifndef BLADERF_NIOS_PC_SIMULATION # include "system.h" # include "altera_avalon_spi.h" # include "altera_avalon_jtag_uart_regs.h" # include "altera_avalon_pio_regs.h" # include "sys/alt_irq.h" # define INLINE static inline # define SIMULATION_FLUSH_UART() # define I2C OPENCORES_I2C_BASE /* Time tamer register offsets from the base */ # define OC_I2C_PRESCALER 0 # define OC_I2C_CTRL 2 # define OC_I2C_DATA 3 # define OC_I2C_CMD_STATUS 4 /* I2C interface */ # define SI5338_I2C (0xE0) # define INA219_I2C (0x88) # define OC_I2C_ENABLE (1<<7) # define OC_I2C_STA (1<<7) # define OC_I2C_STO (1<<6) # define OC_I2C_WR (1<<4) # define OC_I2C_RD (1<<5) # define OC_I2C_TIP (1<<1) # define OC_I2C_RXACK (1<<7) # define OC_I2C_NACK (1<<3) /* IQ balance correction */ # define DEFAULT_GAIN_CORRECTION 0x1000 # define GAIN_OFFSET 0 # define DEFAULT_PHASE_CORRECTION 0x0000 # define PHASE_OFFSET 16 # define DEFAULT_CORRECTION ( (DEFAULT_PHASE_CORRECTION << PHASE_OFFSET) | \ (DEFAULT_GAIN_CORRECTION << GAIN_OFFSET) ) /* LMS6002D SPI interface */ #define LMS6002D_WRITE_BIT (1 << 7) /* VCTCXO tamer register offsets */ # define VT_CTRL_ADDR (0x00) # define VT_STAT_ADDR (0x01) # define VT_ERR_1S_ADDR (0x04) # define VT_ERR_10S_ADDR (0x0C) # define VT_ERR_100S_ADDR (0x14) /* VCTCXO tamer control/status bits */ # define VT_CTRL_RESET (0x01) # define VT_CTRL_IRQ_EN (1<<4) # define VT_CTRL_IRQ_CLR (1<<5) # define VT_CTRL_TUNE_MODE (0xC0) # define VT_STAT_ERR_1S (0x01) # define VT_STAT_ERR_10S (1<<1) # define VT_STAT_ERR_100S (1<<2) /* Number of RFFE fast lock profiles to store in the Nios. * Make sure this matches what is defined in bladerf2.c. */ #define NUM_BBP_FASTLOCK_PROFILES 256 /* Number of fast lock profiles that can be stored in the RFFE */ #define NUM_RFFE_FASTLOCK_PROFILES 8 /* Enable libad936x if we have enough RAM. Note that it is very important * that all calls to ad9361_* be ifdef-wrapped! */ # if RAM_SPAN >= 131072 # define BLADERF_NIOS_LIBAD936X # endif #else # define INLINE void SIMULATION_FLUSH_UART(); #endif /* Define a global variable containing the current VCTCXO DAC setting. * This is a 'cached' value of what is written to the DAC and is used * for the calibration algorithm to avoid unnecessary read requests * going out to the DAC. */ extern uint16_t vctcxo_trim_dac_value; /* Define a cached version of the VCTCXO tamer control register */ extern uint8_t vctcxo_tamer_ctrl_reg; /* Cached ADF400x registers */ extern uint32_t adf400x_reg[4]; /* Fast lock profile states */ enum fastlock_state { FASTLOCK_STATE_INVALID = 0, /* Marks the profile as not used */ FASTLOCK_STATE_BBP, /* Profile is saved in BBP */ FASTLOCK_STATE_RFFE, /* Profile is loaded in RFFE */ FASTLOCK_STATE_BBP_RFFE /* Profile is saved in BBP & loaded in RFFE */ }; /* Fastlock profile data */ typedef struct { uint8_t profile_num; /* RFFE profile number */ uint8_t profile_data[16]; uint8_t port; uint8_t spdt; volatile enum fastlock_state state; } fastlock_profile; /* Define the fast lock profile storage arrays */ extern fastlock_profile fastlocks_rx[NUM_BBP_FASTLOCK_PROFILES]; extern fastlock_profile fastlocks_tx[NUM_BBP_FASTLOCK_PROFILES]; /** * Initialize NIOS II device interfaces. * * This should be called prior to any other device access function. */ void bladerf_nios_init(struct pkt_buf *pkt, struct vctcxo_tamer_pkt_buf *vctcxo_tamer_pkt); /** * Read from an LMS6002D register * * @param addr Address to read from * * @return Register data */ uint8_t lms6_read(uint8_t addr); /** * Write to an LMS6002D register * * @param addr Register address to write to * @param data Data to write */ void lms6_write(uint8_t addr, uint8_t data); /** * Read from AD9361 SPI register(s) * * @param addr Address to read from * * @return Register data */ uint64_t adi_spi_read(uint16_t addr); /** * Write to AD9361 SPI register(s) * * @param addr Register address to write to * @param data Data to write */ void adi_spi_write(uint16_t addr, uint64_t data); /** * Read from ADI AXI space * * @param addr Address to read from * * @return Register data */ uint32_t adi_axi_read(uint16_t addr); /** * Write to ADI AXI space * * @param addr Register address to write to * @param data Data to write */ void adi_axi_write(uint16_t addr, uint32_t data); /** * Read from Wishbone Master space * * @param addr Address to read from * * @return Register data */ uint32_t wishbone_master_read(uint32_t addr); /** * Write to Wishbone Master space * * @param addr Register address to write to * @param data Data to write */ void wishbone_master_write(uint32_t addr, uint32_t data); /** * Save AD9361 fast lock profile data to Nios memory. * * @param is_tx True if TX profile; false if RX. * @param rffe_profile AD9361 profile number (0-::NUM_RFFE_FASTLOCK_PROFILES) * @param nios_profile Nios profile number (0-::NUM_BBP_FASTLOCK_PROFILES) */ void adi_fastlock_save(bool is_tx, uint8_t rffe_profile, uint16_t nios_profile); /** * Load fast lock profile from Nios memory into AD9361 RFIC. * * @param m Which module to load. * @param *p Fast lock profile structure */ void adi_fastlock_load(bladerf_module m, fastlock_profile *p); /** * Recall a stored fast lock profile. * * @param m Which module to recall. * @param *p Fast lock profile structure */ void adi_fastlock_recall(bladerf_module m, fastlock_profile *p); /** * Set the AD9361 port. * * @param *p Fast lock profile structure */ void adi_rfport_select(fastlock_profile *p); /** * Set the RF switches. * * @param m Which module's switches to control. * @param *p Fast lock profile structure */ void adi_rfspdt_select(bladerf_module m, fastlock_profile *p); /** * Read from Si5338 clock generator register * * @param addr Address to read from * * @return Register data */ uint8_t si5338_read(uint8_t addr); /** * Write to Si5338 clock generator register * * @param addr Register address * @param data Data to write */ void si5338_write(uint8_t addr, uint8_t data); /** * Read from INA219 power IC * * @param addr Address to read from * * @return Register data */ uint16_t ina219_read(uint8_t addr); /** * Write to INA219 power IC * * @param addr Register address * @param data Data to write */ void ina219_write(uint8_t addr, uint16_t data); /** * Write a command to the VCTCXO trim DAC * * @param cmd DAC command * @param data command data to write */ void vctcxo_trim_dac_write(uint8_t cmd, uint16_t val); /** * Read from the VCTCXO trim DAC * * @param cmd DAC command * @param data Read data */ void vctcxo_trim_dac_read(uint8_t cmd, uint16_t *val); /** * Write a command to the AD56x1 VCTCXO trim DAC * * @param data command data to write */ void ad56x1_vctcxo_trim_dac_write(uint16_t val); /** * Read from the AD56x1 VCTCXO trim DAC * * @param data Read data */ void ad56x1_vctcxo_trim_dac_read(uint16_t *val); /** * Write a command to the ADF400x * * @param data Data to shift into latch */ void adf400x_spi_write(uint32_t val); /** * Read from ADF400x * * @param addr Register to read * * @return Register data */ uint32_t adf400x_spi_read(uint8_t addr); /** * Write a value to the ADF4351 synthesizer (on the XB-200) * * @param val Value to write */ void adf4351_write(uint32_t val); /** * Read bladeRF device control register * * TODO: Annotate bit<->config relationship * * @return Device control bit map */ INLINE uint32_t control_reg_read(void); /** * Write bladeRF device configuration register * * TODO: Annotate bit<->config relationship * * @param value Device configuration bit map */ INLINE void control_reg_write(uint32_t value); /** * Get IQ balance gain value * * @param m Which module to query * @return RX IQ gain correction value */ uint16_t iqbal_get_gain(bladerf_module m); /** * Set IQ balance gain correction value * * @param m Which module to configure * @param value Gain correction value */ void iqbal_set_gain(bladerf_module m, uint16_t value); /** * Get IQ balance phase value * * @param m Which module to query * @return IQ phase correction value */ uint16_t iqbal_get_phase(bladerf_module m); /** * Set IQ balance phase correction value * * @param m Which module to configure * @param value Phase correction value */ void iqbal_set_phase(bladerf_module m, uint16_t value); /** * Read from GPIO expansion port * * TODO: Annotate the bit <-> pin relationship * * @return GPIO port values. Outputs pins read back as '0'. */ INLINE uint32_t expansion_port_read(void); /** * Write to GPIO expansion port * * TODO: Annotate the bit <-> pin relationship * * @param value Port value to write. Writing to pins configured as input * does not affect their state. */ INLINE void expansion_port_write(uint32_t value); /** * Get the direction settings of the expansion port GPIOs * * TODO: Annotate the bit <-> pin relationship * TODO: Annotate bit <-> direction * * @return Direction bit map */ INLINE uint32_t expansion_port_get_direction(); /** * Configure GPIO expansion port pin directions * * TODO: Annotate the bit <-> pin relationship * TODO: Annotate bit <-> direction * * @param dir Bit map of pin directions */ INLINE void expansion_port_set_direction(uint32_t dir); /** * Read timestamp from time tamer */ uint64_t time_tamer_read(bladerf_module m); /** * Reset one of the time tamer's timestamp counters to 0 */ INLINE void time_tamer_reset(bladerf_module m); /** * Clear the interrupt for the specified timer tamer module */ INLINE void timer_tamer_clear_interrupt(bladerf_module m); /** * Schedule a timer interrupt on the specified module * * @param m Module to schedule interrupt for * @param time Timestamp to schedule interrupt to occur at. * If this is in the past, the interrupt will file immediately. */ void tamer_schedule(bladerf_module m, uint64_t time); /** * Read the command UART request buffer */ INLINE void command_uart_read_request(uint8_t *command); /** * Write the command UART response buffer */ INLINE void command_uart_write_response(uint8_t *command); /** * Enable interrupts from the VCTCXO Tamer module * * @param enable true or false */ void vctcxo_tamer_enable_isr(bool enable); /** * Clear interrupts from the VCTCXO Tamer module */ void vctcxo_tamer_clear_isr(); /** * Reset the counters in the VCTCXO Tamer module. Setting is sticky, * so counters must be explicitly taken out of reset. * * @param reset true or false */ void vctcxo_tamer_reset_counters( bool reset ); /** * Sets the VCTCXO Tamer mode * * @param mode One of the BLADERF_VCTCXO_TAMER_* values. * */ void vctcxo_tamer_set_tune_mode(bladerf_vctcxo_tamer_mode mode); /** * Gets the current VCTCXO Tamer mode * * @return Current mode or BLADERF_VCTCXO_TAMER_MODE_INVALID on failure. */ bladerf_vctcxo_tamer_mode vctcxo_tamer_get_tune_mode(); /** * Read VCTCXO tamer count error registers * * @param addr Address of byte 0 of error count register * @return VCTCXO count error */ int32_t vctcxo_tamer_read_count(uint8_t addr); /** * Read single VCTCXO tamer register (e.g. control/status) * * @param addr Address of register to read * @return data Register contents */ uint8_t vctcxo_tamer_read(uint8_t addr); /** * Write single VCTCXO tamer register * * @param addr Address of register to write * @param data Value to write at the specified address */ void vctcxo_tamer_write(uint8_t addr, uint8_t data); /** * @return FPGA version */ static inline uint32_t fpga_version(void) { return FPGA_VERSION; }; /* Trigger Control Functions */ /** * Write the Tx trigger control register * * @param data Data to write */ void tx_trigger_ctl_write(uint8_t data); /** * Read the Tx trigger control register * * @return Value of Tx trigger control register */ uint8_t tx_trigger_ctl_read(void); /** * Write the Rx trigger control register * * @param data Data to write */ void rx_trigger_ctl_write(uint8_t data); /** * Read the Rx trigger control register * * @return Value of Rx trigger control register */ uint8_t rx_trigger_ctl_read(void); /** * Write to bladeRF1 AGC DC correction * * @param addr Address * @param value Value to write */ void agc_dc_corr_write(uint16_t addr, uint16_t value); #ifdef BLADERF_NIOS_LIBAD936X /** * Initialize the RFIC command handler. Run once at startup. */ void rfic_command_init(void); /** * Do background RFIC command processing. */ void rfic_command_work(void); /** * RFIC command write (queuing) * * @param[in] addr The address value from the packet * @param[in] data The data value from the packet * * @see rfic_command_write_immed() * * @return bool (true = success) */ bool rfic_command_write(uint16_t addr, uint64_t data); /** * RFIC command read * * @param[in] addr The address value from the packet * @param[out] data Return payload * * @see rfic_command_read_immed() * * @return bool (true = success) */ bool rfic_command_read(uint16_t addr, uint64_t *data); #endif // BLADERF_NIOS_LIBAD936X /* A number of rountines define here are implemented as just a register * access, where incurring function call overhead is wasteful. Therefore, * these have been implemented as static inline functions. * * To allow us to switch between the NIOS II implementation and some simulation * code on a host PC, these are tucked away in the below header. */ #ifndef BLADERF_NIOS_PC_SIMULATION # include "devices_inline.h" #endif /* The LMS6002 header contains a few inline functions which contain * macros that utilize lms6_read/write, so we need thes declared before * including this header */ #include "lms.h" #endif bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/software/bladeRF_nios/src/devices_inline.h000066400000000000000000000066601457144405000316640ustar00rootroot00000000000000/* This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef DEVICES_INLINE_H_ #define DEVICES_INLINE_H_ #include #include #include "system.h" #include "altera_avalon_spi.h" #include "altera_avalon_jtag_uart_regs.h" #include "altera_avalon_pio_regs.h" static inline uint32_t control_reg_read(void) { return IORD_ALTERA_AVALON_PIO_DATA(CONTROL_BASE); } static inline void control_reg_write(uint32_t value) { IOWR_ALTERA_AVALON_PIO_DATA(CONTROL_BASE, value); } static inline uint32_t rffe_csr_read(void) { #ifdef GPIO_RFFE_0_BASE return IORD_ALTERA_AVALON_PIO_DATA(GPIO_RFFE_0_BASE); #else return 0; #endif } static inline void rffe_csr_write(uint32_t value) { #ifdef GPIO_RFFE_0_BASE IOWR_ALTERA_AVALON_PIO_DATA(GPIO_RFFE_0_BASE, value); #endif } static inline uint32_t expansion_port_read(void) { return IORD_ALTERA_AVALON_PIO_DATA(XB_GPIO_BASE); } INLINE void expansion_port_write(uint32_t value) { IOWR_ALTERA_AVALON_PIO_DATA(XB_GPIO_BASE, value); } INLINE uint32_t expansion_port_get_direction() { return IORD_ALTERA_AVALON_PIO_DATA(XB_GPIO_DIR_BASE); } INLINE void expansion_port_set_direction(uint32_t dir) { IOWR_ALTERA_AVALON_PIO_DATA(XB_GPIO_DIR_BASE, dir); } INLINE void time_tamer_reset(bladerf_module m) { /* A single write is sufficient to clear the timestamp counter */ if (m == BLADERF_MODULE_RX) { IOWR_8DIRECT(RX_TAMER_BASE, 0, 0); } else { IOWR_8DIRECT(TX_TAMER_BASE, 0, 0); } } INLINE void timer_tamer_clear_interrupt(bladerf_module m) { if (m == BLADERF_MODULE_RX) { IOWR_8DIRECT(RX_TAMER_BASE, 8, 1) ; } else { IOWR_8DIRECT(TX_TAMER_BASE, 8, 1) ; } } INLINE void command_uart_read_request(uint8_t *req) { int i, x ; uint32_t val ; for( x = 0 ; x < 16 ; x+=4 ) { val = IORD_32DIRECT(COMMAND_UART_BASE, x) ; for( i = 0 ; i < 4 ; i++ ) { req[x+i] = val&0xff ; val >>= 8 ; } } return ; } INLINE void command_uart_write_response(uint8_t *resp) { int i ; uint32_t val ; for( i = 0 ; i < 16 ; i+=4 ) { val = ((uint32_t)resp[i+0]) | (((uint32_t)resp[i+1])<<8) | (((uint32_t)resp[i+2])<<16) | (((uint32_t)resp[i+3])<<24) ; IOWR_32DIRECT(COMMAND_UART_BASE, i, val) ; } return ; } #endif bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/software/bladeRF_nios/src/devices_rfic.c000066400000000000000000000263101457144405000313160ustar00rootroot00000000000000/* This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2018 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include "devices.h" #if defined(BOARD_BLADERF_MICRO) && defined(BLADERF_NIOS_LIBAD936X) #include "devices_rfic.h" /******************************************************************************/ /* Global state */ /******************************************************************************/ static struct rfic_state state; /******************************************************************************/ /* Helpers */ /******************************************************************************/ void rfic_invalidate_frequency(bladerf_module module) { state.frequency_invalid[module] = true; } /******************************************************************************/ /* Dispatching */ /******************************************************************************/ /** * @brief Function pointers for RFIC command dispatching */ struct rfic_command_fns { bool (*write64)(struct rfic_state *, bladerf_channel, uint64_t); bool (*write32)(struct rfic_state *, bladerf_channel, uint32_t); bool (*read64)(struct rfic_state *, bladerf_channel, uint64_t *); bool (*read32)(struct rfic_state *, bladerf_channel, uint32_t *); command_bitmask bitmask; uint8_t command; }; /** * Function pointers for command dispatching */ struct rfic_command_fns const funcs[] = { // clang-format off { FIELD_INIT(.command, BLADERF_RFIC_COMMAND_STATUS), FIELD_INIT(.read64, _rfic_cmd_rd_status), FIELD_INIT(.bitmask, RFIC_CMD_CHAN_SYSTEM), }, { FIELD_INIT(.command, BLADERF_RFIC_COMMAND_INIT), FIELD_INIT(.write32, _rfic_cmd_wr_init), FIELD_INIT(.read32, _rfic_cmd_rd_init), FIELD_INIT(.bitmask, RFIC_CMD_CHAN_SYSTEM), }, { FIELD_INIT(.command, BLADERF_RFIC_COMMAND_ENABLE), FIELD_INIT(.write32, _rfic_cmd_wr_enable), FIELD_INIT(.read32, _rfic_cmd_rd_enable), FIELD_INIT(.bitmask, RFIC_CMD_INIT_REQD | RFIC_CMD_CHAN_TX | RFIC_CMD_CHAN_RX), }, { FIELD_INIT(.command, BLADERF_RFIC_COMMAND_SAMPLERATE), FIELD_INIT(.write32, _rfic_cmd_wr_samplerate), FIELD_INIT(.read32, _rfic_cmd_rd_samplerate), FIELD_INIT(.bitmask, RFIC_CMD_INIT_REQD | RFIC_CMD_CHAN_TX | RFIC_CMD_CHAN_RX), }, { FIELD_INIT(.command, BLADERF_RFIC_COMMAND_FREQUENCY), FIELD_INIT(.write64, _rfic_cmd_wr_frequency), FIELD_INIT(.read64, _rfic_cmd_rd_frequency), FIELD_INIT(.bitmask, RFIC_CMD_INIT_REQD | RFIC_CMD_CHAN_TX | RFIC_CMD_CHAN_RX), }, { FIELD_INIT(.command, BLADERF_RFIC_COMMAND_BANDWIDTH), FIELD_INIT(.write32, _rfic_cmd_wr_bandwidth), FIELD_INIT(.read32, _rfic_cmd_rd_bandwidth), FIELD_INIT(.bitmask, RFIC_CMD_INIT_REQD | RFIC_CMD_CHAN_TX | RFIC_CMD_CHAN_RX), }, { FIELD_INIT(.command, BLADERF_RFIC_COMMAND_GAINMODE), FIELD_INIT(.write32, _rfic_cmd_wr_gainmode), FIELD_INIT(.read32, _rfic_cmd_rd_gainmode), FIELD_INIT(.bitmask, RFIC_CMD_INIT_REQD | RFIC_CMD_CHAN_RX), }, { FIELD_INIT(.command, BLADERF_RFIC_COMMAND_GAIN), FIELD_INIT(.write32, _rfic_cmd_wr_gain), FIELD_INIT(.read32, _rfic_cmd_rd_gain), FIELD_INIT(.bitmask, RFIC_CMD_INIT_REQD | RFIC_CMD_CHAN_TX | RFIC_CMD_CHAN_RX), }, { FIELD_INIT(.command, BLADERF_RFIC_COMMAND_RSSI), FIELD_INIT(.read64, _rfic_cmd_rd_rssi), FIELD_INIT(.bitmask, RFIC_CMD_INIT_REQD | RFIC_CMD_CHAN_TX | RFIC_CMD_CHAN_RX), }, { FIELD_INIT(.command, BLADERF_RFIC_COMMAND_FILTER), FIELD_INIT(.write32, _rfic_cmd_wr_filter), FIELD_INIT(.read32, _rfic_cmd_rd_filter), FIELD_INIT(.bitmask, RFIC_CMD_INIT_REQD | RFIC_CMD_CHAN_TX | RFIC_CMD_CHAN_RX), }, { FIELD_INIT(.command, BLADERF_RFIC_COMMAND_TXMUTE), FIELD_INIT(.write32, _rfic_cmd_wr_txmute), FIELD_INIT(.read32, _rfic_cmd_rd_txmute), FIELD_INIT(.bitmask, RFIC_CMD_INIT_REQD | RFIC_CMD_CHAN_TX), }, { FIELD_INIT(.command, BLADERF_RFIC_COMMAND_FASTLOCK), FIELD_INIT(.write32, _rfic_cmd_wr_fastlock), FIELD_INIT(.bitmask, RFIC_CMD_INIT_REQD | RFIC_CMD_CHAN_TX | RFIC_CMD_CHAN_RX), }, // clang-format on }; /** * @brief Retrieve command pointer for a given command * * @param[in] command The command * * @return The command pointer. */ static struct rfic_command_fns const *_get_cmd_ptr(uint8_t command) { for (size_t i = 0; i < ARRAY_SIZE(funcs); ++i) { if (command == funcs[i].command) { return &funcs[i]; } } return NULL; } /** * @brief Determines if bitmask contains a given bit. * * @param[in] bitmask The bitmask * @param[in] bit The bit * * @return True if bitmask has bit, False otherwise. */ static bool _has_bit(command_bitmask bitmask, command_bitmask bit) { return ((bitmask & bit) > 0); } /** * @brief Check validity of command pointer in current state * * @param cmd_ptr The command pointer * @param[in] channel The channel * * @return True if the current state is valid, False otherwise. */ static bool _check_validity(struct rfic_command_fns const *cmd_ptr, bladerf_channel channel) { bool is_system = _rfic_chan_is_system(channel); bool is_tx = !is_system && BLADERF_CHANNEL_IS_TX(channel); bool is_rx = !is_system && !BLADERF_CHANNEL_IS_TX(channel); /* System channel check */ if (is_system && !_has_bit(cmd_ptr->bitmask, RFIC_CMD_CHAN_SYSTEM)) { DBG("%s: operation not valid for wildcard channel\n", __FUNCTION__); return false; } /* Initialization check */ if (!_rfic_is_initialized(&state) && _has_bit(cmd_ptr->bitmask, RFIC_CMD_INIT_REQD)) { DBG("%s: operation not valid in uninitialized state\n", __FUNCTION__); return false; } /* TX channel check */ if (is_tx && !_has_bit(cmd_ptr->bitmask, RFIC_CMD_CHAN_TX)) { DBG("%s: operation not valid for TX channels\n", __FUNCTION__); return false; } /* RX channel check */ if (is_rx && !_has_bit(cmd_ptr->bitmask, RFIC_CMD_CHAN_RX)) { DBG("%s: operation not valid for RX channels\n", __FUNCTION__); return false; } /* All tests passed */ return true; } /** * @brief Write queue worker * * Sets e->rv to 0xFE if there is no write handler for the command. * * @param q rfic_queue pointer */ static void rfic_command_work_wq(struct rfic_queue *q) { struct rfic_queue_entry *e = rfic_queue_peek(q); if (NULL == e) { return; } #if 0 if (ENTRY_STATE_COMPLETE == e->state) #endif { RFIC_DBG("WRW", _rfic_cmdstr(e->cmd), _rfic_chanstr(e->ch), _rfic_statestr(e->state), -1, e->value); } switch (e->state) { case ENTRY_STATE_NEW: { e->state = ENTRY_STATE_RUNNING; break; } case ENTRY_STATE_RUNNING: { struct rfic_command_fns const *f = _get_cmd_ptr(e->cmd); e->rv = 0xFE; e->state = ENTRY_STATE_COMPLETE; if (NULL != f->write64) { e->rv = f->write64(&state, e->ch, e->value); } else if (NULL != f->write32) { e->rv = f->write32(&state, e->ch, e->value); } break; } case ENTRY_STATE_COMPLETE: { /* Drop the item from the queue */ q->last_rv = e->rv; rfic_dequeue(q, NULL); break; } default: break; } } bool rfic_command_write(uint16_t addr, uint64_t data) { uint8_t cmd = _rfic_unpack_cmd(addr); uint8_t const ch = _rfic_unpack_chan(addr); struct rfic_command_fns const *f = _get_cmd_ptr(cmd); bool rv = false; if (NULL != f && (NULL != f->write64 || NULL != f->write32) && _check_validity(f, ch)) { rv = rfic_enqueue(&state.write_queue, ch, cmd, data) != COMMAND_QUEUE_FULL; } RFIC_DBG("WR ", _rfic_cmdstr(cmd), _rfic_chanstr(ch), rv ? "ENQ" : "BAD", addr, data); return rv; } bool rfic_command_write_immed(bladerf_rfic_command cmd, bladerf_channel ch, uint64_t data) { struct rfic_command_fns const *f = _get_cmd_ptr(cmd); bool rv = false; if (NULL == f || !_check_validity(f, ch)) { rv = false; } else if (NULL != f->write64) { rv = f->write64(&state, ch, data); } else if (NULL != f->write32) { rv = f->write32(&state, ch, (uint32_t)data); } RFIC_DBG("WR!", _rfic_cmdstr(cmd), _rfic_chanstr(ch), rv ? "OK " : "BAD", 0x0, data); return rv; } bool rfic_command_read(uint16_t addr, uint64_t *data) { return rfic_command_read_immed(_rfic_unpack_cmd(addr), _rfic_unpack_chan(addr), data); } bool rfic_command_read_immed(bladerf_rfic_command cmd, bladerf_channel ch, uint64_t *data) { struct rfic_command_fns const *f = _get_cmd_ptr(cmd); bool rv = false; // Canary *data = 0xDEADBEEF0B4DF00D; if (NULL == f || !_check_validity(f, ch)) { rv = false; } else if (NULL != f->read64) { rv = f->read64(&state, ch, data); } else if (NULL != f->read32) { uint32_t data32; rv = f->read32(&state, ch, &data32); if (rv) { *data = (uint64_t)data32; } } RFIC_DBG("RD!", _rfic_cmdstr(cmd), _rfic_chanstr(ch), rv ? "OK " : "BAD", 0x0, *data); return rv; } /** * @brief Startup initialization for RFIC command */ void rfic_command_init(void) { rfic_queue_reset(&state.write_queue); } /** * @brief Worker wrapper for RFIC command */ void rfic_command_work(void) { rfic_command_work_wq(&state.write_queue); } #endif // defined(BOARD_BLADERF_MICRO) && defined(BLADERF_NIOS_LIBAD936X) bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/software/bladeRF_nios/src/devices_rfic.h000066400000000000000000000202431457144405000313220ustar00rootroot00000000000000/* This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2018 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef BLADERF_NIOS_DEVICES_RFIC_H_ #define BLADERF_NIOS_DEVICES_RFIC_H_ #include #include #include "bladerf2_common.h" #include "debug.h" #include "devices.h" #include "devices_rfic_cmds.h" #include "devices_rfic_queue.h" /******************************************************************************/ /* Types */ /******************************************************************************/ typedef uint8_t command_bitmask; #define RFIC_CMD_INIT_REQD 1 /**< Command requires initialized state */ #define RFIC_CMD_CHAN_SYSTEM 2 /**< Command valid for wildcard channels */ #define RFIC_CMD_CHAN_TX 4 /**< Command valid for TX channels */ #define RFIC_CMD_CHAN_RX 8 /**< Command valid for RX channels */ /** * RFIC command handler state structure */ struct rfic_state { /* Initialization state */ bladerf_rfic_init_state init_state; /* AD9361 state structure */ struct ad9361_rf_phy *phy; /* Queue for handling long-running write operations */ struct rfic_queue write_queue; /* RX and TX FIR filter memory */ bladerf_rfic_rxfir rxfir; bladerf_rfic_txfir txfir; /* Frequency retrieval is invalid due to fastlock shenanigans */ bool frequency_invalid[NUM_MODULES]; /* TX mute state at standby */ bool tx_mute_state[2]; }; /******************************************************************************/ /* Function declarations */ /******************************************************************************/ /** * RFIC command read (immediate) * * @param command Command to execute * @param channel Channel to apply command to * @param data Response from command * * @return bool (true = success) */ bool rfic_command_read_immed(bladerf_rfic_command command, bladerf_channel channel, uint64_t *data); /** * RFIC command write (immediate) * * @param command Command to execute * @param channel Channel to apply command to * @param data Argument for command * * @return bool (true = success) */ bool rfic_command_write_immed(bladerf_rfic_command command, bladerf_channel channel, uint64_t data); /** * Invalidate the LO frequency state for a given module * * If anything affecting the tuning frequency of the RFIC is performed * without using the ad9361_* functions, call this function to indicate * that the state is invalid. Attempts to get the LO frequency will fail, * until the LO frequency is set with a BLADERF_RFIC_COMMAND_FREQUENCY * command. * * @param[in] module The module */ void rfic_invalidate_frequency(bladerf_module module); /******************************************************************************/ /* Helpers */ /******************************************************************************/ /** * @brief Translate a bladerf_direction and channel number to a * bladerf_channel * * @param _dir Direction * @param _idx Channel number * * @return BLADERF_CHANNEL_TX(_idx) or BLADERF_CHANNEL_RX(_idx) */ #define CHANNEL_IDX(_dir, _idx) \ (BLADERF_TX == _dir) ? BLADERF_CHANNEL_TX(_idx) : BLADERF_CHANNEL_RX(_idx) /** * @brief Iterate over all bladerf_directions * * @param _dir Direction */ #define FOR_EACH_DIRECTION(_dir) \ for (_dir = BLADERF_RX; _dir <= BLADERF_TX; ++_dir) /** * @brief Iterate over all channels in a given direction * * @param _dir Direction * @param _count Number of channels * @param[out] _index Index variable (size_t) * @param[out] _channel Channel variable (bladerf_channel) * * @return { description_of_the_return_value } */ #define FOR_EACH_CHANNEL(_dir, _count, _index, _channel) \ for (_index = 0, _channel = CHANNEL_IDX(_dir, _index); _index < _count; \ ++_index, _channel = CHANNEL_IDX(_dir, _index)) /* Packet decoding debugging output */ static char const RFIC_DBG_FMT[] = "%s: cmd=%s ch=%s state=%s [%x]=%x(-%x)\n"; #define RFIC_DBG(prefix, cmd, ch, state, addr, data) \ DBG(RFIC_DBG_FMT, prefix, cmd, ch, state, addr, data, -data) /* Error message output */ static char const RFIC_ERR_FMT[] = "%s: error: %s returned %x (-%x)\n"; #define RFIC_ERR(thing, retval) \ DBG(RFIC_ERR_FMT, __FUNCTION__, thing, retval, -retval) /** * @brief Error-catching wrapper * * @param _fn The function to wrap * * @return false on error (_fn() < 0), continues otherwise */ #define CHECK_BOOL(_fn) \ do { \ int _s = _fn; \ if (_s < 0) { \ RFIC_ERR(#_fn, _s); \ return false; \ } \ } while (0) #define RFIC_SYSTEM_CHANNEL 0xF static inline bool _rfic_is_initialized(struct rfic_state *state) { return BLADERF_RFIC_INIT_STATE_ON == state->init_state; } static inline bool _rfic_chan_is_system(uint8_t ch) { return RFIC_SYSTEM_CHANNEL == ch; } static inline uint8_t _rfic_unpack_chan(uint16_t addr) { return (addr >> 8) & 0xF; } static inline uint8_t _rfic_unpack_cmd(uint16_t addr) { return addr & 0xF; } static inline char const *_rfic_cmdstr(uint8_t cmd) { switch (cmd) { case BLADERF_RFIC_COMMAND_STATUS: return "STATUS "; case BLADERF_RFIC_COMMAND_INIT: return "INIT "; case BLADERF_RFIC_COMMAND_ENABLE: return "ENABLE "; case BLADERF_RFIC_COMMAND_SAMPLERATE: return "SAMPRATE"; case BLADERF_RFIC_COMMAND_FREQUENCY: return "FREQ "; case BLADERF_RFIC_COMMAND_BANDWIDTH: return "BNDWDTH "; case BLADERF_RFIC_COMMAND_GAINMODE: return "GAINMD "; case BLADERF_RFIC_COMMAND_GAIN: return "GAIN "; case BLADERF_RFIC_COMMAND_RSSI: return "RSSI "; case BLADERF_RFIC_COMMAND_FILTER: return "FILTER "; case BLADERF_RFIC_COMMAND_TXMUTE: return "TXMUTE "; case BLADERF_RFIC_COMMAND_FASTLOCK: return "FASTLOCK"; default: return " "; } } static inline char const *_rfic_chanstr(uint8_t ch) { switch (ch) { case BLADERF_CHANNEL_TX(0): return "TX1"; case BLADERF_CHANNEL_TX(1): return "TX2"; case BLADERF_CHANNEL_RX(0): return "RX1"; case BLADERF_CHANNEL_RX(1): return "RX2"; case RFIC_SYSTEM_CHANNEL: return "SYS"; default: return " "; } } static inline char const *_rfic_statestr(enum rfic_entry_state state) { switch (state) { case ENTRY_STATE_INVALID: return "BAD"; case ENTRY_STATE_NEW: return "NEW"; case ENTRY_STATE_RUNNING: return "RUN"; case ENTRY_STATE_COMPLETE: return "OK "; default: return " "; } } #endif // BLADERF_NIOS_DEVICES_RFIC_H_ bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/software/bladeRF_nios/src/devices_rfic_cmds.c000066400000000000000000000712101457144405000323230ustar00rootroot00000000000000/* This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2018 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include "devices.h" #if defined(BOARD_BLADERF_MICRO) && defined(BLADERF_NIOS_LIBAD936X) #include #include #include "ad936x_helpers.h" #include "devices_rfic.h" extern AD9361_InitParam bladerf2_rfic_init_params; extern AD9361_RXFIRConfig bladerf2_rfic_rx_fir_config; extern AD9361_TXFIRConfig bladerf2_rfic_tx_fir_config; extern AD9361_RXFIRConfig bladerf2_rfic_rx_fir_config_dec2; extern AD9361_TXFIRConfig bladerf2_rfic_tx_fir_config_int2; extern AD9361_RXFIRConfig bladerf2_rfic_rx_fir_config_dec4; extern AD9361_TXFIRConfig bladerf2_rfic_tx_fir_config_int4; /******************************************************************************/ /* Helpers */ /******************************************************************************/ /** * @brief Clear RFFE control bits */ static void _clear_rffe_ctrl() { uint32_t reg; reg = rffe_csr_read(); reg &= ~(1 << RFFE_CONTROL_TXNRX); reg &= ~(1 << RFFE_CONTROL_ENABLE); reg &= ~(1 << RFFE_CONTROL_RX_SPDT_1); reg &= ~(1 << RFFE_CONTROL_RX_SPDT_2); reg &= ~(1 << RFFE_CONTROL_TX_SPDT_1); reg &= ~(1 << RFFE_CONTROL_TX_SPDT_2); reg &= ~(1 << RFFE_CONTROL_MIMO_RX_EN_0); reg &= ~(1 << RFFE_CONTROL_MIMO_TX_EN_0); reg &= ~(1 << RFFE_CONTROL_MIMO_RX_EN_1); reg &= ~(1 << RFFE_CONTROL_MIMO_TX_EN_1); rffe_csr_write(reg); } /** * @brief Controls the RFIC hard reset bit * * @param[in] state true to reset the device, false to un-reset device */ static void _reset_rfic(bool state) { uint32_t reg; reg = rffe_csr_read(); if (state) { reg &= ~(1 << RFFE_CONTROL_RESET_N); } else { reg |= 1 << RFFE_CONTROL_RESET_N; } rffe_csr_write(reg); } /******************************************************************************/ /* Initialization state changers */ /******************************************************************************/ /** * @brief Deinitializes RFIC and RFFE * * @return true if successful, false if not */ static bool _rfic_deinitialize(struct rfic_state *state) { /* Unset RFFE bits controlling RFIC */ _clear_rffe_ctrl(); /* Deinitialize AD9361 */ if (NULL != state->phy) { CHECK_BOOL(ad9361_deinit(state->phy)); state->phy = NULL; } /* Put RFIC into hardware reset */ _reset_rfic(true); /* Update state */ state->init_state = BLADERF_RFIC_INIT_STATE_OFF; DBG("*** RFIC Control Deinitialized ***\n"); return true; } /** * @brief Initializes RFIC and RFFE * * @return true if successful, false if not */ static bool _rfic_initialize(struct rfic_state *state) { AD9361_InitParam *init_param = &bladerf2_rfic_init_params; bladerf_direction dir; bladerf_channel ch; bladerf_frequency init_freq; bladerf_sample_rate init_samprate; size_t i; /* Unset RFFE bits controlling RFIC */ _clear_rffe_ctrl(); /* Initialize AD9361 if it isn't initialized */ if (NULL == state->phy) { state->init_state = BLADERF_RFIC_INIT_STATE_OFF; DBG("--- Initializing AD9361 ---\n"); /* Hard-reset the RFIC */ _reset_rfic(true); usleep(1000); _reset_rfic(false); CHECK_BOOL(ad9361_init(&state->phy, init_param, NULL)); if (NULL == state->phy || NULL == state->phy->pdata) { /* Oh no */ DBG("%s: ad9361_init failed silently\n", __FUNCTION__); ad9361_deinit(state->phy); state->phy = NULL; return false; } } /* Per-module initialization */ FOR_EACH_DIRECTION(dir) { if (BLADERF_RFIC_INIT_STATE_OFF == state->init_state) { ch = CHANNEL_IDX(dir, 0); if (BLADERF_CHANNEL_IS_TX(ch)) { init_freq = init_param->tx_synthesizer_frequency_hz; init_samprate = init_param->tx_path_clock_frequencies[5]; } else { init_freq = init_param->rx_synthesizer_frequency_hz; init_samprate = init_param->rx_path_clock_frequencies[5]; } /* Switching the frequency twice seems essential for calibration * to be successful. */ CHECK_BOOL(_rfic_cmd_wr_frequency(state, ch, RESET_FREQUENCY)); CHECK_BOOL(_rfic_cmd_wr_filter(state, ch, (BLADERF_TX == dir) ? BLADERF_RFIC_TXFIR_DEFAULT : BLADERF_RFIC_RXFIR_DEFAULT)); CHECK_BOOL(_rfic_cmd_wr_samplerate(state, ch, init_samprate)); CHECK_BOOL(_rfic_cmd_wr_frequency(state, ch, init_freq)); } } /* Per-channel initialization */ FOR_EACH_CHANNEL(BLADERF_TX, 2, i, ch) { switch (state->init_state) { case BLADERF_RFIC_INIT_STATE_OFF: /* Initialize TX Mute */ CHECK_BOOL(txmute_set_cached(state->phy, ch, init_param->tx_attenuation_mdB)); CHECK_BOOL(txmute_set(state->phy, ch, false)); break; case BLADERF_RFIC_INIT_STATE_STANDBY: /* Restore saved TX Mute state */ CHECK_BOOL( txmute_set(state->phy, ch, (state->tx_mute_state[i]))); break; default: break; } } /* Update state */ state->init_state = BLADERF_RFIC_INIT_STATE_ON; DBG("*** RFIC Control Initialized ***\n"); return true; } /** * @brief Puts RFIC and RFFE into standby ("warm de-initialization") * * @return true if successful, false if not */ static bool _rfic_standby(struct rfic_state *state) { AD9361_InitParam *init_param = &bladerf2_rfic_init_params; bladerf_channel ch; size_t i; /* If we aren't initialized, just go directly to deinitialization */ if (NULL == state->phy) { return _rfic_deinitialize(state); } /* Unset RFFE bits controlling RFIC */ _clear_rffe_ctrl(); /* Cache current txmute state and put it aside */ FOR_EACH_CHANNEL(BLADERF_TX, 2, i, ch) { CHECK_BOOL(txmute_get(state->phy, ch, &state->tx_mute_state[i])); CHECK_BOOL(txmute_set(state->phy, ch, true)); } /* Reset frequencies if they're invalid */ if (state->frequency_invalid[BLADERF_TX]) { CHECK_BOOL( _rfic_cmd_wr_frequency(state, BLADERF_CHANNEL_TX(0), init_param->tx_synthesizer_frequency_hz)); } if (state->frequency_invalid[BLADERF_RX]) { CHECK_BOOL( _rfic_cmd_wr_frequency(state, BLADERF_CHANNEL_RX(0), init_param->rx_synthesizer_frequency_hz)); } /* Update state */ state->init_state = BLADERF_RFIC_INIT_STATE_STANDBY; DBG("*** RFIC Control Standby ***\n"); return true; } /******************************************************************************/ /* Command implementations */ /******************************************************************************/ /** * @brief Read system status register * * @param[out] status Status register value * * @return true if successful, false if not */ bool _rfic_cmd_rd_status(struct rfic_state *state, bladerf_channel channel, uint64_t *status) { *status = ((_rfic_is_initialized(state) & BLADERF_RFIC_STATUS_INIT_MASK) << BLADERF_RFIC_STATUS_INIT_SHIFT) | ((state->write_queue.count & BLADERF_RFIC_STATUS_WQLEN_MASK) << BLADERF_RFIC_STATUS_WQLEN_SHIFT) | ((state->write_queue.last_rv & BLADERF_RFIC_STATUS_WQSUCCESS_MASK) << BLADERF_RFIC_STATUS_WQSUCCESS_SHIFT); return true; } /** * @brief Initialize the RFIC * * @param[in] init_state bladerf_rfic_init_state * * @return true if successful, false if not */ bool _rfic_cmd_wr_init(struct rfic_state *state, bladerf_channel channel, uint32_t init_state) { bladerf_rfic_init_state new_state = (bladerf_rfic_init_state)init_state; if (state->init_state == new_state) { DBG("%s: already in state %x\n", __FUNCTION__, state->init_state); return true; } switch (new_state) { case BLADERF_RFIC_INIT_STATE_OFF: return _rfic_deinitialize(state); case BLADERF_RFIC_INIT_STATE_ON: return _rfic_initialize(state); case BLADERF_RFIC_INIT_STATE_STANDBY: return _rfic_standby(state); } return false; } /** * @brief Query RFIC initialization state * * @param[out] init_state bladerf_rfic_init_state value, casted to uint32_t * * @return true if successful, false if not */ bool _rfic_cmd_rd_init(struct rfic_state *state, bladerf_channel channel, uint32_t *init_state) { *init_state = (uint32_t)state->init_state; return true; } /** * @brief Set the enabled status for a given channel * * @param[in] channel Channel * @param[in] enable 0 to disable, >= 1 to enable * * @return true if successful, false otherwise */ bool _rfic_cmd_wr_enable(struct rfic_state *state, bladerf_channel channel, uint32_t enable) { bladerf_direction direction = BLADERF_CHANNEL_IS_TX(channel) ? BLADERF_TX : BLADERF_RX; uint32_t reg; /* RFFE register value */ bool ch_enabled; /* Channel: initial state */ bool ch_enable; /* Channel: target state */ bool ch_pending; /* Channel: target state is not initial state */ bool dir_enabled; /* Direction: initial state */ bool dir_enable; /* Direction: target state */ bool dir_pending; /* Direction: target state is not initial state */ struct band_port_map const *port_map; bladerf_channel subch; bladerf_frequency freq = 0; size_t i; /* Read RFFE control register */ reg = rffe_csr_read(); #if 0 uint32_t reg_old = reg; #endif /* Pre-compute useful values */ /* Calculate initial and target states */ ch_enabled = _rffe_ch_enabled(reg, channel); dir_enabled = _rffe_dir_enabled(reg, direction); ch_enable = (enable > 0); dir_enable = ch_enable || _rffe_dir_otherwise_enabled(reg, channel); ch_pending = ch_enabled != ch_enable; dir_pending = dir_enabled != dir_enable; if (!ch_pending && !dir_pending) { DBG("%s: nothing to do?\n", __FUNCTION__); return true; } /* Query the current frequency if we'll need it */ if (ch_enable) { if (BLADERF_CHANNEL_IS_TX(channel)) { CHECK_BOOL(ad9361_get_tx_lo_freq(state->phy, &freq)); } else { CHECK_BOOL(ad9361_get_rx_lo_freq(state->phy, &freq)); } } /* Channel Setup/Teardown */ if (ch_pending) { /* Modify SPDT bits */ CHECK_BOOL(_modify_spdt_bits_by_freq(®, channel, ch_enable, freq)); /* Modify MIMO channel enable bits */ if (ch_enable) { reg |= (1 << _get_rffe_control_bit_for_ch(channel)); } else { reg &= ~(1 << _get_rffe_control_bit_for_ch(channel)); } } /* Direction Setup/Teardown */ if (dir_pending) { /* Modify ENABLE/TXNRX bits */ if (dir_enable) { reg |= (1 << _get_rffe_control_bit_for_dir(direction)); } else { FOR_EACH_CHANNEL(direction, 2, i, subch) { CHECK_BOOL(_modify_spdt_bits_by_freq(®, subch, false, 0)); } reg &= ~(1 << _get_rffe_control_bit_for_dir(direction)); } /* Select RFIC port */ /* Look up the port configuration for this frequency */ port_map = _get_band_port_map_by_freq(channel, ch_enable ? freq : 0); if (NULL == port_map) { return false; } /* Set the AD9361 port accordingly */ if (BLADERF_CHANNEL_IS_TX(channel)) { CHECK_BOOL( ad9361_set_tx_rf_port_output(state->phy, port_map->rfic_port)); } else { CHECK_BOOL( ad9361_set_rx_rf_port_input(state->phy, port_map->rfic_port)); } } #if 0 DBG("%s: ch=%x dir=%x ch_en=%x ch_pend=%x dir_en=%x dir_pend=%x " "reg=%x->%x\n", __FUNCTION__, channel, direction, ch_enable, ch_pending, dir_enable, dir_pending, reg_old, reg); #endif /* Write RFFE control register */ rffe_csr_write(reg); return true; } /** * @brief Get the enabled status for a given channel * * @param[in] channel The channel * @param[out] enabled 0 if disabled, 1 if enabled * * @return true if successful, false otherwise */ bool _rfic_cmd_rd_enable(struct rfic_state *state, bladerf_channel channel, uint32_t *enabled) { *enabled = _rffe_ch_enabled(rffe_csr_read(), channel) ? 1 : 0; return true; } /** * @brief Set sample rate for a given channel * * @param[in] channel The channel * @param[in] rate The rate * * @return true if successful, false if not */ bool _rfic_cmd_wr_samplerate(struct rfic_state *state, bladerf_channel channel, uint32_t rate) { if (BLADERF_CHANNEL_IS_TX(channel)) { CHECK_BOOL(ad9361_set_tx_sampling_freq(state->phy, rate)); } else { CHECK_BOOL(ad9361_set_rx_sampling_freq(state->phy, rate)); } return true; } /** * @brief Get sample rate for a given channel * * @param[in] channel The channel * @param[out] rate The sample rate * * @return true if successful, false if not */ bool _rfic_cmd_rd_samplerate(struct rfic_state *state, bladerf_channel channel, uint32_t *rate) { if (BLADERF_CHANNEL_IS_TX(channel)) { CHECK_BOOL(ad9361_get_tx_sampling_freq(state->phy, rate)); } else { CHECK_BOOL(ad9361_get_rx_sampling_freq(state->phy, rate)); } return true; } /** * @brief Set LO frequency for a given channel * * @param[in] channel The channel * @param[in] frequency The frequency * * @return true if successful, false if not */ bool _rfic_cmd_wr_frequency(struct rfic_state *state, bladerf_channel channel, uint64_t frequency) { bladerf_direction dir = BLADERF_CHANNEL_IS_TX(channel) ? BLADERF_TX : BLADERF_RX; bladerf_channel other_ch; uint32_t reg; size_t i; reg = rffe_csr_read(); /* We have to do this for all the channels sharing the same LO. */ FOR_EACH_CHANNEL(dir, 2, i, other_ch) { /* Is this channel enabled? */ bool enable = _rffe_ch_enabled(reg, other_ch); /* Update SPDT bits accordingly */ CHECK_BOOL( _modify_spdt_bits_by_freq(®, other_ch, enable, frequency)); } rffe_csr_write(reg); CHECK_BOOL(set_ad9361_port_by_freq( state->phy, channel, _rffe_ch_enabled(reg, channel), frequency)); if (BLADERF_CHANNEL_IS_TX(channel)) { CHECK_BOOL(ad9361_set_tx_lo_freq(state->phy, frequency)); state->frequency_invalid[BLADERF_TX] = false; } else { CHECK_BOOL(ad9361_set_rx_lo_freq(state->phy, frequency)); state->frequency_invalid[BLADERF_RX] = false; } return true; } /** * @brief Get LO frequency for a given channel * * @param[in] channel The channel * @param[out] frequency The frequency * * @return true if successful, false if not */ bool _rfic_cmd_rd_frequency(struct rfic_state *state, bladerf_channel channel, uint64_t *frequency) { if (BLADERF_CHANNEL_IS_TX(channel)) { if (state->frequency_invalid[BLADERF_TX]) { return false; } CHECK_BOOL(ad9361_get_tx_lo_freq(state->phy, frequency)); } else { if (state->frequency_invalid[BLADERF_RX]) { return false; } CHECK_BOOL(ad9361_get_rx_lo_freq(state->phy, frequency)); } return true; } /** * @brief Set bandwidth * * @param[in] channel The channel * @param[in] bandwidth The bandwidth * * @return true if successful, false if not */ bool _rfic_cmd_wr_bandwidth(struct rfic_state *state, bladerf_channel channel, uint32_t bandwidth) { if (BLADERF_CHANNEL_IS_TX(channel)) { CHECK_BOOL(ad9361_set_tx_rf_bandwidth(state->phy, bandwidth)); } else { CHECK_BOOL(ad9361_set_rx_rf_bandwidth(state->phy, bandwidth)); } return true; } /** * @brief Get bandwidth * * @param[in] channel The channel * @param[out] bandwidth The bandwidth * * @return true if successful, false if not */ bool _rfic_cmd_rd_bandwidth(struct rfic_state *state, bladerf_channel channel, uint32_t *bandwidth) { if (BLADERF_CHANNEL_IS_TX(channel)) { CHECK_BOOL(ad9361_get_tx_rf_bandwidth(state->phy, bandwidth)); } else { CHECK_BOOL(ad9361_get_rx_rf_bandwidth(state->phy, bandwidth)); } return true; } /** * @brief Set gainmode * * @param[in] channel The channel * @param[in] gainmode The gainmode * * @return true if successful, false if not */ bool _rfic_cmd_wr_gainmode(struct rfic_state *state, bladerf_channel channel, uint32_t gainmode) { uint8_t const rfic_ch = channel >> 1; enum rf_gain_ctrl_mode gc_mode; /* Mode conversion */ switch (gainmode) { case BLADERF_GAIN_DEFAULT: switch (channel) { case BLADERF_CHANNEL_RX(0): gc_mode = bladerf2_rx_gain_mode_default[0]; break; case BLADERF_CHANNEL_RX(1): gc_mode = bladerf2_rx_gain_mode_default[1]; break; default: return false; } break; case BLADERF_GAIN_MGC: gc_mode = RF_GAIN_MGC; break; case BLADERF_GAIN_FASTATTACK_AGC: gc_mode = RF_GAIN_FASTATTACK_AGC; break; case BLADERF_GAIN_SLOWATTACK_AGC: gc_mode = RF_GAIN_SLOWATTACK_AGC; break; case BLADERF_GAIN_HYBRID_AGC: gc_mode = RF_GAIN_HYBRID_AGC; break; default: return false; } /* Set the mode! */ CHECK_BOOL(ad9361_set_rx_gain_control_mode(state->phy, rfic_ch, gc_mode)); return true; } /** * @brief Get gainmode * * @param[in] channel The channel * @param[out] gainmode The gainmode * * @return true if successful, false if not */ bool _rfic_cmd_rd_gainmode(struct rfic_state *state, bladerf_channel channel, uint32_t *gainmode) { uint8_t const rfic_ch = channel >> 1; uint8_t gc_mode; /* Get the gain mode */ CHECK_BOOL(ad9361_get_rx_gain_control_mode(state->phy, rfic_ch, &gc_mode)); /* Mode conversion */ switch (gc_mode) { case RF_GAIN_MGC: *gainmode = BLADERF_GAIN_MGC; break; case RF_GAIN_FASTATTACK_AGC: *gainmode = BLADERF_GAIN_FASTATTACK_AGC; break; case RF_GAIN_SLOWATTACK_AGC: *gainmode = BLADERF_GAIN_SLOWATTACK_AGC; break; case RF_GAIN_HYBRID_AGC: *gainmode = BLADERF_GAIN_HYBRID_AGC; break; default: return false; } return true; } /** * @brief Set gain * * expects values that are ready to be passed down to the device. * e.g.: * TX: mdB attenuation (-10 dB gain -> gain = 10000) * RX: dB gain (10 dB gain -> gain = 10) * Values may be negative, and the uint32_t will be casted appropriately * * @param[in] channel The channel * @param[in] gain The gain * * @return true if successful, false if not */ bool _rfic_cmd_wr_gain(struct rfic_state *state, bladerf_channel channel, uint32_t gain) { uint8_t const rfic_ch = channel >> 1; if (BLADERF_CHANNEL_IS_TX(channel)) { bool muted; CHECK_BOOL(txmute_get(state->phy, channel, &muted)); if (muted) { CHECK_BOOL(txmute_set_cached(state->phy, channel, gain)); } else { CHECK_BOOL(ad9361_set_tx_attenuation(state->phy, rfic_ch, gain)); } } else { CHECK_BOOL(ad9361_set_rx_rf_gain(state->phy, rfic_ch, (int32_t)gain)); } return true; } /** * @brief Get gain * * returns values that are direct from the device. * e.g.: * TX: mdB attenuation (data = 10000 -> -10 dB gain) * RX: dB gain (data = 10 -> 10 dB gain) * Values may be negative, and will be casted to uint32_t * * * @param[in] channel The channel * @param[out] gain The gain * * @return true if successful, false if not */ bool _rfic_cmd_rd_gain(struct rfic_state *state, bladerf_channel channel, uint32_t *gain) { uint8_t const rfic_ch = channel >> 1; if (BLADERF_CHANNEL_IS_TX(channel)) { bool muted; CHECK_BOOL(txmute_get(state->phy, channel, &muted)); if (muted) { *gain = txmute_get_cached(state->phy, channel); } else { CHECK_BOOL(ad9361_get_tx_attenuation(state->phy, rfic_ch, gain)); } } else { struct rf_rx_gain rx_gain; CHECK_BOOL(ad9361_get_rx_gain(state->phy, rfic_ch + 1, &rx_gain)); *gain = (uint32_t)rx_gain.gain_db; } return true; } /** * @brief Get RSSI reading * * @param[in] channel The channel * @param[out] rssi_val RSSI, packed * * @return true if successful, false if not */ bool _rfic_cmd_rd_rssi(struct rfic_state *state, bladerf_channel channel, uint64_t *rssi_val) { uint8_t const rfic_ch = channel >> 1; int16_t pre, sym, mul; if (BLADERF_CHANNEL_IS_TX(channel)) { uint32_t rssi = 0; CHECK_BOOL(ad9361_get_tx_rssi(state->phy, rfic_ch, &rssi)); mul = -1000; pre = rssi; sym = rssi; } else { struct rf_rssi rssi; CHECK_BOOL(ad9361_get_rx_rssi(state->phy, rfic_ch, &rssi)); mul = -rssi.multiplier; pre = rssi.preamble; sym = rssi.symbol; } *rssi_val = ((uint64_t)((uint16_t)mul & BLADERF_RFIC_RSSI_MULT_MASK) << BLADERF_RFIC_RSSI_MULT_SHIFT) | ((uint64_t)((uint16_t)pre & BLADERF_RFIC_RSSI_PRE_MASK) << BLADERF_RFIC_RSSI_PRE_SHIFT) | ((uint64_t)((uint16_t)sym & BLADERF_RFIC_RSSI_SYM_MASK) << BLADERF_RFIC_RSSI_SYM_SHIFT); return true; } /** * @brief Set RFIC FIR filter * * @param[in] channel The channel * @param[in] filter The filter enum value * * @return true if successful, false if not */ bool _rfic_cmd_wr_filter(struct rfic_state *state, bladerf_channel channel, uint32_t filter) { if (BLADERF_CHANNEL_IS_TX(channel)) { bladerf_rfic_txfir txfir = (bladerf_rfic_txfir)filter; AD9361_TXFIRConfig *fir_config = NULL; uint8_t enable; if (BLADERF_RFIC_TXFIR_CUSTOM == txfir) { // custom FIR not implemented, assuming default txfir = BLADERF_RFIC_TXFIR_DEFAULT; } switch (txfir) { case BLADERF_RFIC_TXFIR_BYPASS: fir_config = &bladerf2_rfic_tx_fir_config; enable = 0; break; case BLADERF_RFIC_TXFIR_INT1: fir_config = &bladerf2_rfic_tx_fir_config; enable = 1; break; case BLADERF_RFIC_TXFIR_INT2: fir_config = &bladerf2_rfic_tx_fir_config_int2; enable = 1; break; case BLADERF_RFIC_TXFIR_INT4: fir_config = &bladerf2_rfic_tx_fir_config_int4; enable = 1; break; default: return false; } CHECK_BOOL(ad9361_set_tx_fir_config(state->phy, *fir_config)); CHECK_BOOL(ad9361_set_tx_fir_en_dis(state->phy, enable)); state->txfir = txfir; return true; } else { bladerf_rfic_rxfir rxfir = (bladerf_rfic_rxfir)filter; AD9361_RXFIRConfig *fir_config = NULL; uint8_t enable; if (BLADERF_RFIC_RXFIR_CUSTOM == rxfir) { // custom FIR not implemented, assuming default rxfir = BLADERF_RFIC_RXFIR_DEFAULT; } switch (rxfir) { case BLADERF_RFIC_RXFIR_BYPASS: fir_config = &bladerf2_rfic_rx_fir_config; enable = 0; break; case BLADERF_RFIC_RXFIR_DEC1: fir_config = &bladerf2_rfic_rx_fir_config; enable = 1; break; case BLADERF_RFIC_RXFIR_DEC2: fir_config = &bladerf2_rfic_rx_fir_config_dec2; enable = 1; break; case BLADERF_RFIC_RXFIR_DEC4: fir_config = &bladerf2_rfic_rx_fir_config_dec4; enable = 1; break; default: return false; } CHECK_BOOL(ad9361_set_rx_fir_config(state->phy, *fir_config)); CHECK_BOOL(ad9361_set_rx_fir_en_dis(state->phy, enable)); state->rxfir = rxfir; return true; } return false; } /** * @brief Get current FIR filter setting * * @param[in] channel The channel * @param[out] filter The filter state * * @return true if successful, false if not */ bool _rfic_cmd_rd_filter(struct rfic_state *state, bladerf_channel channel, uint32_t *filter) { if (BLADERF_CHANNEL_IS_TX(channel)) { *filter = (uint32_t)state->txfir; } else { *filter = (uint32_t)state->rxfir; } return true; } /** * @brief Set/unset TX mute * * @param[in] channel The channel * @param[in] mute Requested mute status * * @return true if successful, false if not */ bool _rfic_cmd_wr_txmute(struct rfic_state *state, bladerf_channel channel, uint32_t mute) { bool val = (mute > 0); CHECK_BOOL(txmute_set(state->phy, channel, val)); return true; } /** * @brief Get current TX mute status * * @param[in] channel The channel * @param[out] mute Current mute status * * @return true if successful, false if not */ bool _rfic_cmd_rd_txmute(struct rfic_state *state, bladerf_channel channel, uint32_t *mute) { bool val; CHECK_BOOL(txmute_get(state->phy, channel, &val)); *mute = val ? 1 : 0; return true; } /** * @brief Store current fastlock parameters into profile * * @param[in] channel The channel * @param[in] profile The profile number * * @return true if successful, false if not */ bool _rfic_cmd_wr_fastlock(struct rfic_state *state, bladerf_channel channel, uint32_t profile) { if (BLADERF_CHANNEL_IS_TX(channel)) { CHECK_BOOL(ad9361_tx_fastlock_store(state->phy, profile)); } else { CHECK_BOOL(ad9361_rx_fastlock_store(state->phy, profile)); } return true; } #endif // defined(BOARD_BLADERF_MICRO) && defined(BLADERF_NIOS_LIBAD936X) bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/software/bladeRF_nios/src/devices_rfic_cmds.h000066400000000000000000000061171457144405000323340ustar00rootroot00000000000000/* This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2018 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef BLADERF_NIOS_DEVICES_RFIC_CMDS_H_ #define BLADERF_NIOS_DEVICES_RFIC_CMDS_H_ /******************************************************************************/ /* Command handlers */ /******************************************************************************/ struct rfic_state; bool _rfic_cmd_rd_status(struct rfic_state *, bladerf_channel, uint64_t *); bool _rfic_cmd_wr_init(struct rfic_state *, bladerf_channel, uint32_t); bool _rfic_cmd_rd_init(struct rfic_state *, bladerf_channel, uint32_t *); bool _rfic_cmd_wr_enable(struct rfic_state *, bladerf_channel, uint32_t); bool _rfic_cmd_rd_enable(struct rfic_state *, bladerf_channel, uint32_t *); bool _rfic_cmd_wr_samplerate(struct rfic_state *, bladerf_channel, uint32_t); bool _rfic_cmd_rd_samplerate(struct rfic_state *, bladerf_channel, uint32_t *); bool _rfic_cmd_wr_frequency(struct rfic_state *, bladerf_channel, uint64_t); bool _rfic_cmd_rd_frequency(struct rfic_state *, bladerf_channel, uint64_t *); bool _rfic_cmd_wr_bandwidth(struct rfic_state *, bladerf_channel, uint32_t); bool _rfic_cmd_rd_bandwidth(struct rfic_state *, bladerf_channel, uint32_t *); bool _rfic_cmd_wr_gainmode(struct rfic_state *, bladerf_channel, uint32_t); bool _rfic_cmd_rd_gainmode(struct rfic_state *, bladerf_channel, uint32_t *); bool _rfic_cmd_wr_gain(struct rfic_state *, bladerf_channel, uint32_t); bool _rfic_cmd_rd_gain(struct rfic_state *, bladerf_channel, uint32_t *); bool _rfic_cmd_rd_rssi(struct rfic_state *, bladerf_channel, uint64_t *); bool _rfic_cmd_wr_filter(struct rfic_state *, bladerf_channel, uint32_t); bool _rfic_cmd_rd_filter(struct rfic_state *, bladerf_channel, uint32_t *); bool _rfic_cmd_wr_txmute(struct rfic_state *, bladerf_channel, uint32_t); bool _rfic_cmd_rd_txmute(struct rfic_state *, bladerf_channel, uint32_t *); bool _rfic_cmd_wr_fastlock(struct rfic_state *, bladerf_channel, uint32_t); #endif // BLADERF_NIOS_DEVICES_RFIC_CMDS_H_ bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/software/bladeRF_nios/src/devices_rfic_queue.c000066400000000000000000000051721457144405000325250ustar00rootroot00000000000000/* This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2018 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include "devices.h" #if defined(BOARD_BLADERF_MICRO) && defined(BLADERF_NIOS_LIBAD936X) #include #include "devices_rfic.h" uint8_t rfic_enqueue(struct rfic_queue *q, uint8_t ch, uint8_t cmd, uint64_t value) { if (q->count >= COMMAND_QUEUE_MAX) { return COMMAND_QUEUE_FULL; } q->entries[q->ins_idx].ch = ch; q->entries[q->ins_idx].cmd = cmd; q->entries[q->ins_idx].value = value; q->entries[q->ins_idx].state = ENTRY_STATE_NEW; q->entries[q->ins_idx].rv = 0xFF; q->ins_idx = (q->ins_idx + 1) & (COMMAND_QUEUE_MAX - 1); return ++q->count; } uint8_t rfic_dequeue(struct rfic_queue *q, struct rfic_queue_entry *e) { if (0 == q->count) { return COMMAND_QUEUE_EMPTY; } if (e != NULL) { memcpy(&e, &q->entries[q->rem_idx], sizeof(e[0])); } q->rem_idx = (q->rem_idx + 1) & (COMMAND_QUEUE_MAX - 1); return --q->count; } struct rfic_queue_entry *rfic_queue_peek(struct rfic_queue *q) { if (0 == q->count) { return NULL; } else { return &q->entries[q->rem_idx]; } } void rfic_queue_reset(struct rfic_queue *q) { q->count = 0; for (size_t i = 0; i < COMMAND_QUEUE_MAX; i++) { q->entries[i].state = ENTRY_STATE_INVALID; } q->last_rv = 0xFF; q->rem_idx = 0; q->ins_idx = 0; } #endif // defined(BOARD_BLADERF_MICRO) && defined(BLADERF_NIOS_LIBAD936X) bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/software/bladeRF_nios/src/devices_rfic_queue.h000066400000000000000000000076101457144405000325310ustar00rootroot00000000000000/* This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2018 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef BLADERF_NIOS_DEVICES_RFIC_QUEUE_H_ #define BLADERF_NIOS_DEVICES_RFIC_QUEUE_H_ #define COMMAND_QUEUE_MAX 16 #define COMMAND_QUEUE_FULL 0xff #define COMMAND_QUEUE_EMPTY 0xfe /******************************************************************************/ /* Structures */ /******************************************************************************/ /* State of items in the command queue */ enum rfic_entry_state { ENTRY_STATE_INVALID = 0, /* Marks entry invalid and not in use */ ENTRY_STATE_NEW, /* We have a new command request to satisfy */ ENTRY_STATE_RUNNING, /* Currently executing a job */ ENTRY_STATE_COMPLETE, /* The job is complete */ }; /* An entry in the command queue */ struct rfic_queue_entry { volatile enum rfic_entry_state state; /* State of this queue entry */ uint8_t rv; /* Return value */ uint8_t ch; /* Channel */ uint8_t cmd; /* Command */ uint64_t value; /* Value to pass to command */ }; /* A queue itself */ struct rfic_queue { uint8_t count; /* Total number of items in the queue */ uint8_t ins_idx; /* Insertion index */ uint8_t rem_idx; /* Removal index */ uint8_t last_rv; /* Returned value from executing last command */ struct rfic_queue_entry entries[COMMAND_QUEUE_MAX]; }; /******************************************************************************/ /* Functions */ /******************************************************************************/ /** * @brief Enqueue a command * * @param q Queue * @param[in] ch Channel * @param[in] cmd Command * @param[in] value Value to pass to command * * @return queue size after the enqueue operation, or COMMAND_QUEUE_FULL if * the queue was full. */ uint8_t rfic_enqueue(struct rfic_queue *q, uint8_t ch, uint8_t cmd, uint64_t value); /** * @brief Dequeue a command * * @param q Queue * @param[out] e Pointer to a queue entry struct * * @return queue size after the dequeue operation, or COMMAND_QUEUE_EMPTY if * the queue was empty. */ uint8_t rfic_dequeue(struct rfic_queue *q, struct rfic_queue_entry *e); /** * @brief Get the state of the next item in the queue * * @param[in] q Queue * * @return pointer to the next item in the queue, or NULL if the * queue is empty */ struct rfic_queue_entry *rfic_queue_peek(struct rfic_queue *q); /** * @brief Reset/initialize the queue * * @param q Queue */ void rfic_queue_reset(struct rfic_queue *q); #endif // BLADERF_NIOS_DEVICES_RFIC_QUEUE_H_ bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/software/bladeRF_nios/src/devices_sim.c000066400000000000000000000221001457144405000311540ustar00rootroot00000000000000/* This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifdef BLADERF_NIOS_PC_SIMULATION #include #include #include #include #include "pkt_handler.h" #include "devices.h" #include "fpga_version.h" #include "debug.h" #include "sim_test_cases.h" /* This global is used to flag the end of a simulation */ bool run_nios = true; static size_t test_case_idx = 0; const char *module2str(bladerf_module m) { switch (m) { case BLADERF_MODULE_RX: return "RX"; case BLADERF_MODULE_TX: return "TX"; default: return "Invalid"; } } void bladerf_nios_init(struct pkt_buf *pkt) { DBG("%s()\n", __FUNCTION__); } uint8_t lms6_read(uint8_t addr) { const uint8_t ret = 0x17; DBG("%s: addr=0x%02x, returning 0x%02x\n", __FUNCTION__, addr, ret); ASSERT(addr == 0x2f); return ret; } void lms6_write(uint8_t addr, uint8_t data) { DBG("%s: addr=0x%02x, data=0x%02x\n", __FUNCTION__, addr, data); ASSERT(addr == 0x07); ASSERT(data == 0x09); } uint64_t adi_spi_read(uint16_t addr) { const uint64_t ret = 0x17; DBG("%s: addr=0x%04x, returning 0x%04x\n", __FUNCTION__, addr, ret); ASSERT(addr == 0x2f2f); return ret; } void adi_spi_write(uint16_t addr, uint64_t data) { DBG("%s: addr=0x%04x, data=0x%04x\n", __FUNCTION__, addr, data); ASSERT(addr == 0x0707); ASSERT(data == 0x09); } uint8_t si5338_read(uint8_t addr) { const uint8_t ret = 0x88; DBG("%s: addr=0x%02x, returning 0x%02x\n", __FUNCTION__, addr, ret); ASSERT(addr == 0x3); return ret; } void si5338_write(uint8_t addr, uint8_t data) { DBG("%s: addr=0x%02x, data=0x%02x\n", __FUNCTION__, addr, data); ASSERT(addr == 0x05); ASSERT(data == 0xab); } void vctcxo_trim_dac_write(uint8_t cmd, uint16_t val) { DBG("%s: cmd=0x%02x, val=0x%04x\n", __FUNCTION__, cmd, val); ASSERT(cmd == 0x28 || cmd == 0x08); ASSERT(val == 0x0000 || val == 0x8012); } void vctcxo_trim_dac_read(uint8_t cmd, uint16_t *val) { *val = 0x1234; DBG("%s: cmd=0x%02x, val=0x%04x\n", __FUNCTION__, cmd, *val); ASSERT(cmd == 0x98); } void adf4351_write(uint32_t val) { DBG("%s: val=0x%08x\n", __FUNCTION__, val); ASSERT(0x580005); } uint32_t control_reg_read(void) { uint32_t ret = 0x8abcde57; DBG("%s: returning 0x%08x\n", __FUNCTION__, ret); return ret; } void control_reg_write(uint32_t value) { DBG("%s: value=0x%08x\n", __FUNCTION__, value); ASSERT(value == 0x80402057); } uint16_t iqbal_get_gain(bladerf_module m) { uint16_t ret = 0xffff; switch (m) { case BLADERF_MODULE_RX: ret = 0x14d2; break; case BLADERF_MODULE_TX: ret = 0x0812; break; default: DBG("%s: Invalid module %u\n", __FUNCTION__, m); ASSERT(0); } DBG("%s: module=%s, returning 0x%04x\n", __FUNCTION__, module2str(m), ret); return ret; } void iqbal_set_gain(bladerf_module m, uint16_t value) { switch (m) { case BLADERF_MODULE_RX: ASSERT(value == 0x14d2); break; case BLADERF_MODULE_TX: ASSERT(value == 0x0812); break; default: DBG("%s: Invalid module %u\n", __FUNCTION__, m); ASSERT(0); } DBG("%s: module=%s, value=0x%04x\n", __FUNCTION__, module2str(m), value); } uint16_t iqbal_get_phase(bladerf_module m) { uint16_t ret = 0xffff; switch (m) { case BLADERF_MODULE_RX: ret = 0x101c; break; case BLADERF_MODULE_TX: ret = 0x021f; break; default: DBG("%s: Invalid module %u\n", __FUNCTION__, m); ASSERT(0); } DBG("%s: module=%s, returning 0x%04x\n", __FUNCTION__, module2str(m), ret); return ret; } void iqbal_set_phase(bladerf_module m, uint16_t value) { switch (m) { case BLADERF_MODULE_RX: ASSERT(value == 0x101c); break; case BLADERF_MODULE_TX: ASSERT(value == 0x021f); break; default: DBG("%s: Invalid module %u\n", __FUNCTION__, m); ASSERT(0); } DBG("%s: module=%s, value=0x%04x\n", __FUNCTION__, module2str(m), value); } uint32_t expansion_port_read(void) { uint32_t ret = 0xffffc7ff; DBG("%s: returning 0x%08x\n", __FUNCTION__, ret); return ret; } void expansion_port_write(uint32_t value) { DBG("%s: value=0x%08x\n", __FUNCTION__, value); ASSERT(value == 0x3c000800); } uint32_t expansion_port_get_direction() { uint32_t ret = 0x0a1b2c3d; DBG("%s: returning 0x%08x\n", __FUNCTION__, ret); return ret; } void expansion_port_set_direction(uint32_t dir) { DBG("%s: dir=0x%08x\n", __FUNCTION__, dir); } uint64_t time_tamer_read(bladerf_module m) { uint64_t ret = (uint64_t) -1; switch (m) { case BLADERF_MODULE_RX: ret = 0x123456780a1b2c3d; break; case BLADERF_MODULE_TX: ret = 0x87654321a1b2c3d4; break; default: DBG("%s: Invalid module %u\n", __FUNCTION__, m); ASSERT(0); break; } DBG("%s: module=%s, returning 0x%016"PRIx64"\n", __FUNCTION__, module2str(m), ret); return ret; } void time_tamer_reset(bladerf_module m) { switch (m) { case BLADERF_MODULE_RX: case BLADERF_MODULE_TX: break; default: DBG("%s: Invalid module %u\n", __FUNCTION__, m); ASSERT(0); break; } DBG("%s: module=%s\n", __FUNCTION__, module2str(m)); } void time_tamer_clear_interrupt(bladerf_module m) { switch (m) { case BLADERF_MODULE_RX: case BLADERF_MODULE_TX: break; default: DBG("%s: Invalid module %u\n", __FUNCTION__, m); ASSERT(0); break; } DBG("%s: module=%s\n", __FUNCTION__, module2str(m)); } void tamer_schedule(bladerf_module m, uint64_t time) { DBG("%s: module=%s, time=%"PRIu64"\n", __FUNCTION__, module2str(m), time); } int lms_set_precalculated_frequency(struct bladerf *dev, bladerf_module mod, struct lms_freq *f) { DBG("%s: module=%s, nint=0x%04x, nfrac=0x%08x, freqsel=0x%02x, flags=0x%02x\n", __FUNCTION__, module2str(mod), f->nint, f->nfrac, f->freqsel, f->flags); return 0; } int lms_select_band(struct bladerf *dev, bladerf_module module, bool low_band) { DBG("%s: module=%s, low_band=%s\n", __FUNCTION__, module2str(module), low_band ? "true" : "false"); return 0; } void command_uart_read_request(uint8_t *req) { printf("\nTest case %-2zd: %s\n", test_case_idx + 1, test_cases[test_case_idx].desc); printf("--------------------------------------------------------\n"); if (test_case_idx < ARRAY_SIZE(test_cases)) { memcpy(req, &test_cases[test_case_idx].req, NIOS_PKT_LEN); test_case_idx++; if (test_case_idx == ARRAY_SIZE(test_cases)) { run_nios = false; } } else { memset(req, 0xff, NIOS_PKT_LEN); DBG("Read past test case array.\n"); return; } } void command_uart_write_response(uint8_t *resp) { print_bytes("Response data:", resp, NIOS_PKT_LEN); /* At this point, we'll already have incremented the test_case_idx past * this test. */ ASSERT(test_case_idx > 0); if (memcmp(resp, test_cases[test_case_idx - 1].resp, NIOS_PKT_LEN)) { printf("Failed.\n"); if (!getenv("CONTINUE_ON_FAIL")) { ASSERT(!"Aborting due to failed test case.\n"); } } else { printf("Pass.\n\n"); } } bool rfic_command_write(uint16_t addr, uint64_t data) { DBG("%s: addr=%02x data=%08" PRIx64 "\n", __FUNCTION__, addr, data); return true; } bool rfic_command_read(uint16_t addr, uint64_t *data) { DBG("%s: addr=%02x *data=%08" PRIx64 "\n", __FUNCTION__, addr, *data); return true; } #endif bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/software/bladeRF_nios/src/libbladeRF_nios_compat.h000066400000000000000000000056231457144405000332630ustar00rootroot00000000000000/* * Copyright (C) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ /* This file provides some compatibility items to ease porting code from * libbladeRF to the bladeRF NIO II code */ #ifndef LIBBLADERF_COMPAT_H_ #define LIBBLADERF_COMPAT_H_ #include "libbladeRF.h" #include "debug.h" /* Use our debug assert */ #ifndef BLADERF_NIOS_PC_SIMULATION # define assert ASSERT #else # define ASSERT assert #endif /* libbladeRF code uses a FIELD_INIT macro as an MSVC workaround */ #define FIELD_INIT(param, ...) param = __VA_ARGS__ #define ARRAY_SIZE(n) (sizeof(n) / sizeof(n[0])) /* For >= 1.5 GHz uses the high band should be used. Otherwise, the low * band should be selected */ #define BLADERF_BAND_HIGH (1500000000) /* Replace log_* functions with existing DBG macro */ #define log_verbose(...) DBG(__VA_ARGS__) #define log_debug(...) DBG(__VA_ARGS__) #define log_info(...) DBG(__VA_ARGS__) #define log_warning(...) DBG(__VA_ARGS__) #define log_error(...) DBG(__VA_ARGS__) #define log_fatal(...) DBG(__VA_ARGS__) /* Output formats... "x" is what alt_printf supports */ #ifdef PRIi64 #undef PRIi64 #endif #ifdef PRIu64 #undef PRIu64 #endif #define PRIi64 "x" #define PRIu64 "x" /* NIOS II builds don't need a device handle. Just forward-declare it to avoid * complaints from unused functions */ struct bladerf; /* Associate macros with our NIO II implementations */ # define LMS_WRITE(dev, addr, data) ({ \ lms6_write(addr, data); \ 0; /* "Return" 0 */ \ }) # define LMS_READ(dev, addr, data_ptr) ({ \ *(data_ptr) = lms6_read(addr); \ 0; /* "Return" 0 */ \ }) # define CONFIG_GPIO_READ(dev, data_ptr) ({ \ *(data_ptr) = control_reg_read(); \ 0; /* "Return" 0 */ \ }) # define CONFIG_GPIO_WRITE(dev, data) ({ \ control_reg_write(data); \ 0; /* "Return" 0 */ \ }) /* Stub out pthread type */ #endif bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/software/bladeRF_nios/src/pkt_16x64.c000066400000000000000000000065731457144405000303500ustar00rootroot00000000000000/* This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2017-2018 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include "pkt_handler.h" #include "pkt_16x64.h" #include "devices.h" #include "debug.h" static inline bool perform_write(uint8_t id, uint16_t addr, uint64_t data) { bool success = true; switch (id) { #ifdef BOARD_BLADERF_MICRO case NIOS_PKT_16x64_TARGET_AD9361: adi_spi_write(addr, data); break; #endif // BOARD_BLADERF_MICRO #ifdef BLADERF_NIOS_LIBAD936X case NIOS_PKT_16x64_TARGET_RFIC: success = rfic_command_write(addr, data); break; #endif // BLADERF_NIOS_LIBAD936X /* Add user customizations here case NIOS_PKT_16x64_TARGET_USR1: ... case NIOS_PKT_16x64_TARGET_USR128: */ default: DBG("Unknown ID: 0x%x\n", id); success = false; } return success; } static inline bool perform_read(uint8_t id, uint16_t addr, uint64_t *data) { bool success = true; switch (id) { #ifdef BOARD_BLADERF_MICRO case NIOS_PKT_16x64_TARGET_AD9361: *data = adi_spi_read(addr); break; #endif // BOARD_BLADERF_MICRO #ifdef BLADERF_NIOS_LIBAD936X case NIOS_PKT_16x64_TARGET_RFIC: success = rfic_command_read(addr, data); break; #endif // BLADERF_NIOS_LIBAD936X /* Add user customizations here case NIOS_PKT_16x64_TARGET_USR1: ... case NIOS_PKT_16x64_TARGET_USR128: */ default: DBG("Invalid ID: 0x%x\n", id); success = false; } return success; } void pkt_16x64(struct pkt_buf *b) { uint8_t id; uint16_t addr; uint64_t data; bool is_write; bool success; nios_pkt_16x64_unpack(b->req, &id, &is_write, &addr, &data); if (is_write) { success = perform_write(id, addr, data); } else { success = perform_read(id, addr, &data); } nios_pkt_16x64_resp_pack(b->resp, id, is_write, addr, data, success); } void pkt_16x64_init(void) { #ifdef BLADERF_NIOS_LIBAD936X rfic_command_init(); #endif // BLADERF_NIOS_LIBAD936X } void pkt_16x64_work(void) { #ifdef BLADERF_NIOS_LIBAD936X rfic_command_work(); #endif // BLADERF_NIOS_LIBAD936X } bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/software/bladeRF_nios/src/pkt_16x64.h000066400000000000000000000034601457144405000303450ustar00rootroot00000000000000/* This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2017 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef PKT_16x64_H_ #define PKT_16x64_H_ #include #include "pkt_handler.h" #include "nios_pkt_16x64.h" void pkt_16x64_init(void); void pkt_16x64(struct pkt_buf *b); void pkt_16x64_work(void); #ifdef BLADERF_NIOS_LIBAD936X #define PKT_16x64 { \ .magic = NIOS_PKT_16x64_MAGIC, \ .init = pkt_16x64_init, \ .exec = pkt_16x64, \ .do_work = pkt_16x64_work, \ } #else #define PKT_16x64 { \ .magic = NIOS_PKT_16x64_MAGIC, \ .init = NULL, \ .exec = pkt_16x64, \ .do_work = NULL, \ } #endif // BLADERF_NIOS_LIBAD936X #endif bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/software/bladeRF_nios/src/pkt_32x32.c000066400000000000000000000100741457144405000303300ustar00rootroot00000000000000/* This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include "pkt_handler.h" #include "pkt_32x32.h" #include "devices.h" #include "debug.h" static inline bool perform_write(uint8_t id, uint32_t addr, uint32_t data) { switch (id) { /* The address is used as a bitmask for the expansion IO registers. * We'll skip RMWs if all bits are being written */ case NIOS_PKT_32x32_TARGET_EXP: if (addr != 0xffffffff) { uint32_t tmp = expansion_port_read(); tmp &= ~(addr); tmp |= (data & addr); expansion_port_write(tmp); } else { expansion_port_write(data); } break; case NIOS_PKT_32x32_TARGET_EXP_DIR: if (addr != 0xffffffff) { uint32_t tmp = expansion_port_get_direction(); tmp &= ~(addr); tmp |= (data & addr); expansion_port_set_direction(tmp); } else { expansion_port_set_direction(data); } break; #ifdef BOARD_BLADERF_MICRO case NIOS_PKT_32x32_TARGET_ADI_AXI: adi_axi_write(addr, data); break; case NIOS_PKT_32x32_TARGET_WB_MSTR: wishbone_master_write(addr, data); break; #endif // BOARD_BLADERF_MICRO /* Add user customizations here case NIOS_PKT_8x8_TARGET_USR1: ... case NIOS_PKT_8x8_TARGET_USR128: */ default: DBG("Invalid ID: 0x%x\n", id); return false; } return true; } static inline bool perform_read(uint8_t id, uint32_t addr, uint32_t *data) { switch (id) { /* The address is used as a bitmask for the expansion IO registers */ case NIOS_PKT_32x32_TARGET_EXP: *data = expansion_port_read() & addr; break; case NIOS_PKT_32x32_TARGET_EXP_DIR: *data = expansion_port_get_direction() & addr; break; #ifdef BOARD_BLADERF_MICRO case NIOS_PKT_32x32_TARGET_ADI_AXI: *data = adi_axi_read(addr); break; case NIOS_PKT_32x32_TARGET_WB_MSTR: *data = wishbone_master_read(addr); break; #endif // BOARD_BLADERF_MICRO /* Add user customizations here case NIOS_PKT_8x8_TARGET_USR1: ... case NIOS_PKT_8x8_TARGET_USR128: */ default: DBG("Invalid ID: 0x%x\n", id); return false; } return true; } void pkt_32x32(struct pkt_buf *b) { uint8_t id; uint32_t addr; uint32_t data; bool is_write; bool success; nios_pkt_32x32_unpack(b->req, &id, &is_write, &addr, &data); if (is_write) { success = perform_write(id, addr, data); } else { success = perform_read(id, addr, &data); } nios_pkt_32x32_resp_pack(b->resp, id, is_write, addr, data, success); } bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/software/bladeRF_nios/src/pkt_32x32.h000066400000000000000000000027461457144405000303440ustar00rootroot00000000000000/* This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef PKT_32x32_H_ #define PKT_32x32_H_ #include #include "pkt_handler.h" #include "nios_pkt_32x32.h" void pkt_32x32(struct pkt_buf *b); #define PKT_32x32 { \ .magic = NIOS_PKT_32x32_MAGIC, \ .init = NULL, \ .exec = pkt_32x32, \ .do_work = NULL, \ } #endif bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/software/bladeRF_nios/src/pkt_8x16.c000066400000000000000000000120321457144405000302510ustar00rootroot00000000000000/* This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include "pkt_handler.h" #include "pkt_8x16.h" #include "devices.h" #include "debug.h" static inline bool iq_corr_read(uint8_t addr, uint16_t *data) { switch (addr) { case NIOS_PKT_8x16_ADDR_IQ_CORR_RX_GAIN: *data = iqbal_get_gain(BLADERF_MODULE_RX); break; case NIOS_PKT_8x16_ADDR_IQ_CORR_RX_PHASE: *data = iqbal_get_phase(BLADERF_MODULE_RX); break; case NIOS_PKT_8x16_ADDR_IQ_CORR_TX_GAIN: *data = iqbal_get_gain(BLADERF_MODULE_TX); break; case NIOS_PKT_8x16_ADDR_IQ_CORR_TX_PHASE: *data = iqbal_get_phase(BLADERF_MODULE_TX); break; default: DBG("%s: Invalid IQ corr addr: 0x%x\n", __FUNCTION__, addr); return false; } return true; } static inline bool iq_corr_write(uint8_t addr, uint16_t data) { switch (addr) { case NIOS_PKT_8x16_ADDR_IQ_CORR_RX_GAIN: iqbal_set_gain(BLADERF_MODULE_RX, data); break; case NIOS_PKT_8x16_ADDR_IQ_CORR_RX_PHASE: iqbal_set_phase(BLADERF_MODULE_RX, data); break; case NIOS_PKT_8x16_ADDR_IQ_CORR_TX_GAIN: iqbal_set_gain(BLADERF_MODULE_TX, data); break; case NIOS_PKT_8x16_ADDR_IQ_CORR_TX_PHASE: iqbal_set_phase(BLADERF_MODULE_TX, data); break; default: DBG("%s: Invalid IQ corr addr: 0x%x\n", __FUNCTION__, addr); return false; } return true; } static inline bool perform_read(uint8_t id, uint8_t addr, uint16_t *data) { bool success = true; switch (id) { case NIOS_PKT_8x16_TARGET_VCTCXO_DAC: vctcxo_trim_dac_read(addr, data); break; case NIOS_PKT_8x16_TARGET_IQ_CORR: iq_corr_read(addr, data); break; #ifdef BOARD_BLADERF_MICRO case NIOS_PKT_8x16_TARGET_AD56X1_DAC: ad56x1_vctcxo_trim_dac_read(data); break; #endif // BOARD_BLADERF_MICRO #ifdef BOARD_BLADERF_MICRO case NIOS_PKT_8x16_TARGET_INA219: *data = ina219_read(addr); break; #endif // BOARD_BLADERF_MICRO /* Add user customizations here case NIOS_PKT_8x8_TARGET_USR1: ... case NIOS_PKT_8x8_TARGET_USR128: */ default: DBG("%s: Invalid ID: 0x%x\n", __FUNCTION__, id); return false; } return success; } static inline bool perform_write(uint8_t id, uint8_t addr, uint16_t data) { switch (id) { case NIOS_PKT_8x16_TARGET_VCTCXO_DAC: vctcxo_trim_dac_write(addr, data); break; case NIOS_PKT_8x16_TARGET_IQ_CORR: iq_corr_write(addr, data); break; case NIOS_PKT_8x16_TARGET_AGC_CORR: agc_dc_corr_write(addr, data); break; #ifdef BOARD_BLADERF_MICRO case NIOS_PKT_8x16_TARGET_AD56X1_DAC: ad56x1_vctcxo_trim_dac_write(data); break; #endif // BOARD_BLADERF_MICRO #ifdef BOARD_BLADERF_MICRO case NIOS_PKT_8x16_TARGET_INA219: ina219_write(addr, data); break; #endif // BOARD_BLADERF_MICRO /* Add user customizations here case NIOS_PKT_8x8_TARGET_USR1: ... case NIOS_PKT_8x8_TARGET_USR128: */ default: DBG("%s: Invalid ID: 0x%x\n", __FUNCTION__, id); return false; } return true; } void pkt_8x16(struct pkt_buf *b) { uint8_t id; uint8_t addr; uint16_t data; bool is_write; bool success; nios_pkt_8x16_unpack(b->req, &id, &is_write, &addr, &data); if (is_write) { success = perform_write(id, addr, data); } else { success = perform_read(id, addr, &data); } nios_pkt_8x16_resp_pack(b->resp, id, is_write, addr, data, success); } bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/software/bladeRF_nios/src/pkt_8x16.h000066400000000000000000000027571457144405000302730ustar00rootroot00000000000000/* This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef PKT_8x16_H_ #define PKT_8x16_H_ #include #include "pkt_handler.h" #include "nios_pkt_8x16.h" void pkt_8x16(struct pkt_buf *b); #define PKT_8x16 { \ .magic = NIOS_PKT_8x16_MAGIC, \ .init = NULL, \ .exec = pkt_8x16, \ .do_work = NULL, \ } #endif bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/software/bladeRF_nios/src/pkt_8x32.c000066400000000000000000000073371457144405000302630ustar00rootroot00000000000000/* This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include "pkt_handler.h" #include "nios_pkt_8x32.h" #include "pkt_8x32.h" #include "devices.h" #include "debug.h" static inline bool perform_read(uint8_t id, uint8_t addr, uint32_t *data) { switch (id) { case NIOS_PKT_8x32_TARGET_VERSION: *data = fpga_version(); break; case NIOS_PKT_8x32_TARGET_CONTROL: *data = control_reg_read(); break; case NIOS_PKT_8x32_TARGET_ADF4351: DBG("Illegal read from ADF4351.\n"); *data = 0x00; return false; case NIOS_PKT_8x32_TARGET_RFFE_CSR: *data = rffe_csr_read(); break; #ifdef BOARD_BLADERF_MICRO case NIOS_PKT_8x32_TARGET_ADF400X: *data = adf400x_spi_read(addr); break; #endif // BOARD_BLADERF_MICRO #ifdef BOARD_BLADERF_MICRO case NIOS_PKT_8x32_TARGET_FASTLOCK: DBG("Read from AD9361 fast lock not supported.\n"); *data = 0x00; return false; #endif // BOARD_BLADERF_MICRO default: DBG("Invalid id: 0x%x\n", id); *data = 0x00; return false; } return true; } static inline bool perform_write(uint8_t id, uint8_t addr, uint32_t data) { switch (id) { case NIOS_PKT_8x32_TARGET_VERSION: DBG("Invalid write to version register.\n"); return false; case NIOS_PKT_8x32_TARGET_CONTROL: control_reg_write(data); break; case NIOS_PKT_8x32_TARGET_ADF4351: adf4351_write(data); break; case NIOS_PKT_8x32_TARGET_RFFE_CSR: rffe_csr_write(data); break; #ifdef BOARD_BLADERF_MICRO case NIOS_PKT_8x32_TARGET_ADF400X: adf400x_spi_write(data); break; #endif // BOARD_BLADERF_MICRO #ifdef BOARD_BLADERF_MICRO case NIOS_PKT_8x32_TARGET_FASTLOCK: adi_fastlock_save( (addr == 1), (data >> 16), (data & 0xff)); break; #endif // BOARD_BLADERF_MICRO default: DBG("Invalid id: 0x%x\n", id); return false; } return true; } void pkt_8x32(struct pkt_buf *b) { uint8_t id; uint8_t addr; uint32_t data; bool is_write; bool success; nios_pkt_8x32_unpack(b->req, &id, &is_write, &addr, &data); if (is_write) { success = perform_write(id, addr, data); } else { success = perform_read(id, addr, &data); } nios_pkt_8x32_resp_pack(b->resp, id, is_write, addr, data, success); } bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/software/bladeRF_nios/src/pkt_8x32.h000066400000000000000000000027571457144405000302710ustar00rootroot00000000000000/* This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef PKT_8x32_H_ #define PKT_8x32_H_ #include #include "pkt_handler.h" #include "nios_pkt_8x32.h" void pkt_8x32(struct pkt_buf *b); #define PKT_8x32 { \ .magic = NIOS_PKT_8x32_MAGIC, \ .init = NULL, \ .exec = pkt_8x32, \ .do_work = NULL, \ } #endif bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/software/bladeRF_nios/src/pkt_8x64.c000066400000000000000000000061151457144405000302610ustar00rootroot00000000000000/* This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include "pkt_handler.h" #include "pkt_8x64.h" #include "devices.h" #include "debug.h" static inline bool perform_write(uint8_t id, uint8_t addr, uint64_t data) { switch (id) { case NIOS_PKT_8x64_TARGET_TIMESTAMP: DBG("Invalid write access to timestamp: 0x%x\n", addr); return false; /* Add user customizations here case NIOS_PKT_8x64_TARGET_USR1: ... case NIOS_PKT_8x64_TARGET_USR128: */ default: DBG("Unknown ID: 0x%x\n", id); return false; } } static inline bool read_timestamp(uint8_t addr, uint64_t *data) { switch (addr) { case NIOS_PKT_8x64_TIMESTAMP_RX: *data = time_tamer_read(BLADERF_MODULE_RX); break; case NIOS_PKT_8x64_TIMESTAMP_TX: *data = time_tamer_read(BLADERF_MODULE_TX); break; default: DBG("Invalid addr: 0x%x\n", addr); return false; } return true; } static inline bool perform_read(uint8_t id, uint8_t addr, uint64_t *data) { bool success; switch (id) { case NIOS_PKT_8x64_TARGET_TIMESTAMP: success = read_timestamp(addr, data); break; /* Add user customizations here case NIOS_PKT_8x64_TARGET_USR1: ... case NIOS_PKT_8x64_TARGET_USR128: */ default: DBG("Invalid ID: 0x%x\n", id); success = false; } return success; } void pkt_8x64(struct pkt_buf *b) { uint8_t id; uint8_t addr; uint64_t data; bool is_write; bool success; nios_pkt_8x64_unpack(b->req, &id, &is_write, &addr, &data); if (is_write) { success = perform_write(id, addr, data); } else { success = perform_read(id, addr, &data); } nios_pkt_8x64_resp_pack(b->resp, id, is_write, addr, data, success); } bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/software/bladeRF_nios/src/pkt_8x64.h000066400000000000000000000027571457144405000302760ustar00rootroot00000000000000/* This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef PKT_8x64_H_ #define PKT_8x64_H_ #include #include "pkt_handler.h" #include "nios_pkt_8x64.h" void pkt_8x64(struct pkt_buf *b); #define PKT_8x64 { \ .magic = NIOS_PKT_8x64_MAGIC, \ .init = NULL, \ .exec = pkt_8x64, \ .do_work = NULL, \ } #endif bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/software/bladeRF_nios/src/pkt_8x8.c000066400000000000000000000102321457144405000301720ustar00rootroot00000000000000/* This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include "pkt_handler.h" #include "pkt_8x8.h" #include "devices.h" #include "debug.h" static inline bool perform_read(uint8_t id, uint8_t addr, uint8_t *data) { switch (id) { case NIOS_PKT_8x8_TARGET_LMS6: *data = lms6_read(addr); break; case NIOS_PKT_8x8_TARGET_SI5338: *data = si5338_read(addr); break; case NIOS_PKT_8x8_TARGET_VCTCXO_TAMER: switch (addr) { /* Using 0xff for mode selection operation so that we can * reserve lower values for register-level access */ case 0xff: *data = (uint8_t) vctcxo_tamer_get_tune_mode(); break; default: *data = 0x00; } break; case NIOS_PKT_8x8_TX_TRIGGER_CTL: *data = tx_trigger_ctl_read(); break; case NIOS_PKT_8x8_RX_TRIGGER_CTL: *data = rx_trigger_ctl_read(); break; /* Add user customizations here case NIOS_PKT_8x8_TARGET_USR1: ... case NIOS_PKT_8x8_TARGET_USR128: */ default: DBG("%s: Invalid ID: 0x%x\n", __FUNCTION__, id); *data = 0xff; return false; } return true; } static inline bool perform_write(uint8_t id, uint8_t addr, uint8_t data) { switch (id) { case NIOS_PKT_8x8_TARGET_LMS6: lms6_write(addr, data); break; case NIOS_PKT_8x8_TARGET_SI5338: si5338_write(addr, data); break; case NIOS_PKT_8x8_TARGET_VCTCXO_TAMER: switch (addr) { /* Using 0xff for mode selection operation so that we can * reserve lower values for register-level access */ case 0xff: vctcxo_tamer_set_tune_mode((bladerf_vctcxo_tamer_mode) data); break; default: /* Throw away data for unused subaddress values */ break; } break; case NIOS_PKT_8x8_TX_TRIGGER_CTL: tx_trigger_ctl_write(data); break; case NIOS_PKT_8x8_RX_TRIGGER_CTL: rx_trigger_ctl_write(data); break; /* Add user customizations here case NIOS_PKT_8x8_TARGET_USR1: ... case NIOS_PKT_8x8_TARGET_USR128: */ default: DBG("%s: Invalid ID: 0x%x\n", __FUNCTION__, id); return false; } return true; } void pkt_8x8(struct pkt_buf *b) { uint8_t id; uint8_t addr; uint8_t data; bool is_write; bool success; nios_pkt_8x8_unpack(b->req, &id, &is_write, &addr, &data); if (is_write) { success = perform_write(id, addr, data); } else { success = perform_read(id, addr, &data); } nios_pkt_8x8_resp_pack(b->resp, id, is_write, addr, data, success); } bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/software/bladeRF_nios/src/pkt_8x8.h000066400000000000000000000027501457144405000302050ustar00rootroot00000000000000/* This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef PKT_8x8_H_ #define PKT_8x8_H_ #include #include "pkt_handler.h" #include "nios_pkt_8x8.h" void pkt_8x8(struct pkt_buf *b); #define PKT_8x8 { \ .magic = NIOS_PKT_8x8_MAGIC, \ .init = NULL, \ .exec = pkt_8x8, \ .do_work = NULL, \ } #endif bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/software/bladeRF_nios/src/pkt_handler.h000066400000000000000000000050771457144405000312000ustar00rootroot00000000000000/* This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef PKT_HANDLER_H_ #define PKT_HANDLER_H_ #include #include #include "nios_pkt_formats.h" #ifndef ARRAY_SIZE # define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0])) #endif #define PKT_MAGIC_IDX 0 #define PKT_CFG_IDX 1 struct pkt_buf { const uint8_t req[NIOS_PKT_LEN]; /* Request */ uint8_t resp[NIOS_PKT_LEN]; /* Response */ volatile bool ready; /* Ready flag */ }; // This is temporary until we figure out where to put it struct vctcxo_tamer_pkt_buf { volatile bool ready; volatile int32_t pps_1s_error; volatile bool pps_1s_error_flag; volatile int32_t pps_10s_error; volatile bool pps_10s_error_flag; volatile int32_t pps_100s_error; volatile bool pps_100s_error_flag; }; struct pkt_handler { /** * Associates a message from the host with a particular packet handler * This may encode information that's meaningful to the packet handler. */ const uint8_t magic; /** * Perform any required initializations */ void (*init)(void); /** * Execute packet handler actions, provided a buffer containing the request * data. The packet handler is to fill out the entirety of the response * data. */ void (*exec)(struct pkt_buf *b); /** * Perform any deferred work from a previous request */ void (*do_work)(void); }; #endif bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/software/bladeRF_nios/src/pkt_legacy.c000066400000000000000000000361341457144405000310200ustar00rootroot00000000000000/* This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include "pkt_handler.h" #include "pkt_legacy.h" #include "devices.h" #include "fpga_version.h" #include "debug.h" #define PAYLOAD_IDX 2 #define ADDR_IDX PAYLOAD_IDX #define DATA_IDX (ADDR_IDX + 1) /* Omit debug output from this file. */ #ifdef BLADERF_NIOS_DEBUG #undef DBG #define DBG(...) #endif /** * Configuration options * * Programmable blocks attached via NIOS II GPIOs are grouped under a single * "device address" since they don't have many sub-addresses, and the device * address bits in the FX3 UART packet format structure are limited. * * Historically, this was just for GPIO-based interfaces. Over time, * this has been overloaded with additional functionality. */ enum config_param { CONFIG_CONTROL_REG, /* bladeRF FPGA control register */ CONFIG_IQ_CORR_RX_GAIN, /* IQ Balance corrections */ CONFIG_IQ_CORR_RX_PHASE, CONFIG_IQ_CORR_TX_GAIN, CONFIG_IQ_CORR_TX_PHASE, CONFIG_FPGA_VERSION, /* FPGA version number */ CONFIG_RX_TIMESTAMP, /* RX timestamp counter read/clear */ CONFIG_TX_TIMESTAMP, /* RX timestamp counter read/clear */ CONFIG_VCTXCO, /* VCTCXO Trim DAC */ CONFIG_XB200_SYNTH, /* Control of XB-200 Synthesizer */ CONFIG_EXPANSION, /* Expansion port I/Os */ CONFIG_EXPANSION_DIR, /* Direction control of these I/Os */ CONFIG_UNKNOWN, /* Reserved for invalid entry */ }; struct config_param_info { uint8_t start; uint8_t len; }; /* Lookup-table for the legacy config parameters' address ranges */ static const struct config_param_info config_params[] = { [CONFIG_CONTROL_REG] = { NIOS_PKT_LEGACY_PIO_ADDR_CONTROL, NIOS_PKT_LEGACY_PIO_LEN_CONTROL }, [CONFIG_IQ_CORR_RX_GAIN] = { NIOS_PKT_LEGACY_PIO_ADDR_IQ_RX_GAIN, NIOS_PKT_LEGACY_PIO_LEN_IQ_RX_PHASE }, [CONFIG_IQ_CORR_RX_PHASE] = { NIOS_PKT_LEGACY_PIO_ADDR_IQ_RX_PHASE, NIOS_PKT_LEGACY_PIO_LEN_IQ_RX_PHASE }, [CONFIG_IQ_CORR_TX_GAIN] = { NIOS_PKT_LEGACY_PIO_ADDR_IQ_TX_GAIN, NIOS_PKT_LEGACY_PIO_LEN_IQ_TX_GAIN }, [CONFIG_IQ_CORR_TX_PHASE] = { NIOS_PKT_LEGACY_PIO_ADDR_IQ_TX_PHASE, NIOS_PKT_LEGACY_PIO_LEN_IQ_TX_GAIN }, [CONFIG_FPGA_VERSION] = { NIOS_PKT_LEGACY_PIO_ADDR_FPGA_VERSION, NIOS_PKT_LEGACY_PIO_LEN_FPGA_VERSION }, [CONFIG_RX_TIMESTAMP] = { NIOS_PKT_LEGACY_PIO_ADDR_RX_TIMESTAMP, NIOS_PKT_LEGACY_PIO_LEN_RX_TIMESTAMP }, [CONFIG_TX_TIMESTAMP] = { NIOS_PKT_LEGACY_PIO_ADDR_TX_TIMESTAMP, NIOS_PKT_LEGACY_PIO_LEN_TX_TIMESTAMP }, [CONFIG_VCTXCO] = { NIOS_PKT_LEGACY_PIO_ADDR_VCTCXO, NIOS_PKT_LEGACY_PIO_LEN_VCTCXO }, [CONFIG_XB200_SYNTH] = { NIOS_PKT_LEGACY_PIO_ADDR_XB200_SYNTH, NIOS_PKT_LEGACY_PIO_LEN_XB200_SYNTH }, [CONFIG_EXPANSION] = { NIOS_PKT_LEGACY_PIO_ADDR_EXP, NIOS_PKT_LEGACY_PIO_LEN_EXP }, [CONFIG_EXPANSION_DIR] = { NIOS_PKT_LEGACY_PIO_ADDR_EXP_DIR, NIOS_PKT_LEGACY_PIO_LEN_EXP_DIR }, [CONFIG_UNKNOWN] = { 255, 0 }, }; static inline enum config_param lookup_param(uint8_t addr) { uint8_t i; DBG("Perip lookup for addr=0x%x\n", addr); for (i = 0; i < ARRAY_SIZE(config_params); i++) { if (config_params[i].start <= addr && (config_params[i].start + config_params[i].len) > addr) { DBG("Found match at entry 0x%x\n", i); return (enum config_param) i; } } DBG("UNKNOWN PARAM.\n"); return CONFIG_UNKNOWN; } static uint64_t perform_config_read(enum config_param param) { uint64_t payload; switch (param) { case CONFIG_CONTROL_REG: DBG("%s: Performing control reg read.\n", __FUNCTION__); payload = control_reg_read(); break; case CONFIG_IQ_CORR_RX_GAIN: DBG("%s: Performing RX IQ gain read.\n", __FUNCTION__); payload = iqbal_get_gain(BLADERF_MODULE_RX); break; case CONFIG_IQ_CORR_RX_PHASE: DBG("%s: Performing RX IQ phase read.\n", __FUNCTION__); payload = iqbal_get_phase(BLADERF_MODULE_RX); break; case CONFIG_IQ_CORR_TX_GAIN: DBG("%s: Performing TX IQ gain read.\n", __FUNCTION__); payload = iqbal_get_gain(BLADERF_MODULE_TX); break; case CONFIG_IQ_CORR_TX_PHASE: DBG("%s: Performing TX IQ phase read.\n", __FUNCTION__); payload = iqbal_get_phase(BLADERF_MODULE_TX); break; case CONFIG_FPGA_VERSION: DBG("%s: Performing FPGA version read.\n", __FUNCTION__); payload = fpga_version(); break; case CONFIG_RX_TIMESTAMP: DBG("%s: Performing RX timestamp read.\n", __FUNCTION__); payload = time_tamer_read(BLADERF_MODULE_RX); break; case CONFIG_TX_TIMESTAMP: DBG("%s: Performing TX timestamp read.\n", __FUNCTION__); payload = time_tamer_read(BLADERF_MODULE_TX); break; case CONFIG_VCTXCO: /* TODO Implement VCTCXO trim DAC read */ DBG("%s: Attempted VCTCXO read.\n", __FUNCTION__); payload = 0x00; break; case CONFIG_XB200_SYNTH: DBG("%s: Attempted XB-200 synth read from write-only device.\n", __FUNCTION__); payload = 0x00; break; case CONFIG_EXPANSION: DBG("%s: Performing expansion port read.\n", __FUNCTION__); payload = expansion_port_read(); break; case CONFIG_EXPANSION_DIR: DBG("%s: Performing expansion port direction read.\n", __FUNCTION__); payload = expansion_port_get_direction(); break; default: DBG("Invalid config read parameter: 0x%x\n", param); payload = (uint64_t) -1; } return payload; } /* Perform read on first request and return a byte from the payload * on each successive request. * * Although this legacy format includes a (addr, data) tuple per request, we * always request data "in order" from the host, from LSB to MSB, so we won't * bother checking the successive addresses, which should just be incrementing. */ static inline void legacy_config_read(uint8_t count, struct pkt_buf *b) { uint8_t i; static uint8_t n = 0; static uint64_t payload = 0; static enum config_param param = CONFIG_UNKNOWN; static enum config_param last_param = CONFIG_UNKNOWN; const uint8_t *req_data = &b->req[PAYLOAD_IDX]; uint8_t *resp_data = &b->resp[PAYLOAD_IDX]; param = lookup_param(b->req[PAYLOAD_IDX]); for (i = 0; i < count; i++) { /* Reset if we're at the beggining of a requst, or if it appears * that we got a different request while in the middle of the previous * series of accesses. */ if (n == 0 || (param != last_param)) { DBG("Resetting read state for param=0x%x with n=0x%x\n", param, n); n = 0; payload = perform_config_read(param); last_param = param; } /* Copy address offset from request to response buffer */ *resp_data++ = *req_data++ - config_params[param].start; /* Write read data into response buffer */ *resp_data++ = (uint8_t) (payload >> (n * 8)); req_data++; n++; /* We've finished returning data for this request - reset and quit . */ if (n >= config_params[param].len) { n = 0; param = CONFIG_UNKNOWN; break; } } } static inline void legacy_pkt_read(uint8_t dev_id, uint8_t count, struct pkt_buf *b) { switch (dev_id) { case NIOS_PKT_LEGACY_DEV_LMS: DBG("%s: Performing LMS6 read.\n", __FUNCTION__); b->resp[ADDR_IDX] = b->req[ADDR_IDX]; b->resp[DATA_IDX] = lms6_read(b->req[ADDR_IDX]); break; case NIOS_PKT_LEGACY_DEV_SI5338: DBG("%s: Performing SI5338 read.\n", __FUNCTION__); b->resp[ADDR_IDX] = b->req[ADDR_IDX]; b->resp[DATA_IDX] = si5338_read(b->req[ADDR_IDX]); break; case NIOS_PKT_LEGACY_DEV_CONFIG: DBG("%s: Performing config read.\n", __FUNCTION__); legacy_config_read(count, b); break; default: DBG("Got invalid device ID: 0x%x\n", dev_id); break; } } static inline void perform_config_write(enum config_param p, uint64_t payload) { switch (p) { case CONFIG_CONTROL_REG: control_reg_write((uint32_t) payload); break; case CONFIG_IQ_CORR_RX_GAIN: iqbal_set_gain(BLADERF_MODULE_RX, (uint16_t) payload); break; case CONFIG_IQ_CORR_RX_PHASE: iqbal_set_phase(BLADERF_MODULE_RX, (uint16_t) payload); break; case CONFIG_IQ_CORR_TX_GAIN: iqbal_set_gain(BLADERF_MODULE_TX, (uint16_t) payload); break; case CONFIG_IQ_CORR_TX_PHASE: iqbal_set_phase(BLADERF_MODULE_TX, (uint16_t) payload); break; case CONFIG_FPGA_VERSION: DBG("Error: attempted to write to FPGA version parameter.\n"); break; case CONFIG_RX_TIMESTAMP: time_tamer_reset(BLADERF_MODULE_RX); break; case CONFIG_TX_TIMESTAMP: time_tamer_reset(BLADERF_MODULE_TX); break; case CONFIG_VCTXCO: /* The legacy packet format only supported writing a value, * yielding writes for these specific commands: * * Command 0x28: Set device to write-through mode * Command 0x08: Write value to channel 0 */ vctcxo_trim_dac_write(0x28, 0); vctcxo_trim_dac_write(0x08, (uint16_t) payload); break; case CONFIG_XB200_SYNTH: adf4351_write((uint32_t) payload); break; case CONFIG_EXPANSION: expansion_port_write(payload); break; case CONFIG_EXPANSION_DIR: expansion_port_set_direction(payload); break; default: DBG("Invalid config param write: 0x%x\n", p); break; } } /* In the legacy format, we receive write data as (addr, data) tuples, * where addr just advances by one in each successive tuple. * * Since we know we don't do any weird ordering with these from the * host side, we're just assuming that we write these from LSB to MSB. * * Therefore, we'll just use the address from the first request. */ static inline void legacy_config_write(uint8_t count, struct pkt_buf *b) { uint8_t i; static uint64_t payload = 0; static uint8_t n = 0; static enum config_param param = CONFIG_UNKNOWN; static enum config_param last_param = CONFIG_UNKNOWN; const uint8_t *req_data = &b->req[PAYLOAD_IDX]; uint8_t *resp_data = &b->resp[PAYLOAD_IDX]; param = lookup_param(b->req[PAYLOAD_IDX]); /* Reset if we're at the beggining of a requst, or if it appears * that we got a different request while in the middle of the previous * series of accesses. */ if (n == 0 || (param != last_param)) { DBG("Resetting write state for param=0x%x with n=0x%x\n", param, n); payload = 0; n = 0; } for (i = 0; i < count && n < config_params[param].len; i++) { /* Copy over address offset into response, and zero out data*/ *resp_data++ = *req_data++ - config_params[param].start; *resp_data++ = 0; /* Shift data into our aggregated payload word */ payload |= (*req_data) << (n * 8); req_data++; n++; } /* We aggregated all the data we need - perform the write and reset */ if (n >= config_params[param].len) { perform_config_write(param, payload); n = 0; param = CONFIG_UNKNOWN; } last_param = param; } static inline void legacy_pkt_write(uint8_t dev_id, uint8_t count, struct pkt_buf *b) { switch (dev_id) { case NIOS_PKT_LEGACY_DEV_LMS: lms6_write(b->req[ADDR_IDX], b->req[DATA_IDX]); b->resp[ADDR_IDX] = b->req[ADDR_IDX]; b->resp[DATA_IDX] = 0; break; case NIOS_PKT_LEGACY_DEV_SI5338: si5338_write(b->req[ADDR_IDX], b->req[DATA_IDX]); b->resp[ADDR_IDX] = b->req[ADDR_IDX]; b->resp[DATA_IDX] = 0; break; case NIOS_PKT_LEGACY_DEV_CONFIG: legacy_config_write(count, b); break; default: DBG("Got invalid device ID: 0x%x\n", dev_id); break; } } void pkt_legacy(struct pkt_buf *b) { /* Parse configuration word */ const uint8_t cfg = b->req[PKT_CFG_IDX]; const bool is_read = (cfg & (NIOS_PKT_LEGACY_MODE_DIR_READ)) != 0; const bool is_write = (cfg & (NIOS_PKT_LEGACY_MODE_DIR_WRITE)) != 0; const uint8_t dev_id = (cfg & NIOS_PKT_LEGACY_MODE_DEV_MASK); const uint8_t count = (cfg & NIOS_PKT_LEGACY_MODE_CNT_MASK); /* Response must start with same magic value and config word */ b->resp[PKT_MAGIC_IDX] = b->req[PKT_MAGIC_IDX]; b->resp[PKT_CFG_IDX] = b->req[PKT_CFG_IDX]; DBG("%s: read=%s, write=%s, dev_id=0x%x, cfg=0x%x, count=0x%x\n", __FUNCTION__, is_read ? "true" : "false", is_write ? "true" : "false", dev_id, cfg, count); if (is_read) { legacy_pkt_read(dev_id, count, b); } else if (is_write) { legacy_pkt_write(dev_id, count, b); } else { DBG("Config word did not have R/W: 0x%x\n", cfg); } } bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/software/bladeRF_nios/src/pkt_legacy.h000066400000000000000000000030051457144405000310140ustar00rootroot00000000000000/* This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef PKT_LEGACY_PKT_H_ #define PKT_LEGACY_PKT_H_ #include #include "pkt_handler.h" #include "nios_pkt_legacy.h" void pkt_legacy(struct pkt_buf *b); #define PKT_LEGACY { \ .magic = NIOS_PKT_LEGACY_MAGIC, \ .init = NULL, \ .exec = pkt_legacy, \ .do_work = NULL, \ } #endif bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/software/bladeRF_nios/src/pkt_retune.c000066400000000000000000000257171457144405000310630ustar00rootroot00000000000000/* This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include "pkt_handler.h" #include "pkt_retune.h" #include "nios_pkt_retune.h" /* Packet format definition */ #include "devices.h" #include "band_select.h" #include "debug.h" #ifdef BLADERF_NIOS_DEBUG volatile uint32_t pkt_retune_error_count = 0; # define INCREMENT_ERROR_COUNT() do { pkt_retune_error_count++; } while (0) #else # define INCREMENT_ERROR_COUNT() do {} while (0) #endif /* The enqueue/dequeue routines require that this be a power of two */ #define RETUNE_QUEUE_MAX 16 #define QUEUE_FULL 0xff #define QUEUE_EMPTY 0xfe /* State of items in the retune queue */ enum entry_state { ENTRY_STATE_INVALID = 0, /* Marks entry invalid and not in use */ ENTRY_STATE_NEW, /* We have a new retune request to satisfy */ ENTRY_STATE_SCHEDULED, /* We've scheduled the timer interrupt for * this entry and are awaiting the ISR */ ENTRY_STATE_READY, /* The timer interrupt has fired - we should * handle this retune */ }; struct queue_entry { volatile enum entry_state state; struct lms_freq freq; uint64_t timestamp; }; static struct queue { uint8_t count; /* Total number of items in the queue */ uint8_t ins_idx; /* Insertion index */ uint8_t rem_idx; /* Removal index */ struct queue_entry entries[RETUNE_QUEUE_MAX]; } rx_queue, tx_queue; /* Returns queue size after enqueue operation, or QUEUE_FULL if we could * not enqueue the requested item */ static inline uint8_t enqueue_retune(struct queue *q, const struct lms_freq *f, uint64_t timestamp) { uint8_t ret; if (q->count >= RETUNE_QUEUE_MAX) { return QUEUE_FULL; } memcpy(&q->entries[q->ins_idx].freq, f, sizeof(f[0])); q->entries[q->ins_idx].state = ENTRY_STATE_NEW; q->entries[q->ins_idx].timestamp = timestamp; q->ins_idx = (q->ins_idx + 1) & (RETUNE_QUEUE_MAX - 1); q->count++; ret = q->count; return ret; } /* Retune number of items left in the queue after the dequeue operation, * or QUEUE_EMPTY if there was nothing to dequeue */ static inline uint8_t dequeue_retune(struct queue *q, struct queue_entry *e) { uint8_t ret; if (q->count == 0) { return QUEUE_EMPTY; } if (e != NULL) { memcpy(&e, &q->entries[q->rem_idx], sizeof(e[0])); } q->rem_idx = (q->rem_idx + 1) & (RETUNE_QUEUE_MAX - 1); q->count--; ret = q->count; return ret; } /* Get the state of the next item in the retune queue */ static inline struct queue_entry * peek_next_retune(struct queue *q) { if (q->count == 0) { return NULL; } else { return &q->entries[q->rem_idx]; } } /* The retune interrupt may fire while this call is occuring, so we should * perform these operations in an order that minimizes the race window, and * does not cause the race to be problematic. It's fine if the last retune * occurs before we can cancel it. */ static void reset_queue(struct queue *q) { unsigned int i; q->count = 0; for (i = 0; i < RETUNE_QUEUE_MAX; i++) { q->entries[i].state = ENTRY_STATE_INVALID; } q->rem_idx = q->ins_idx = 0; } static inline void retune_isr(struct queue *q) { struct queue_entry *e = peek_next_retune(q); if (e != NULL) { if (e->state == ENTRY_STATE_SCHEDULED) { e->state = ENTRY_STATE_READY; } else { INCREMENT_ERROR_COUNT(); } } } #ifndef BLADERF_NIOS_PC_SIMULATION static void retune_rx(void *context) { /* Handle the ISR */ retune_isr(&rx_queue); /* Clear the interrupt */ timer_tamer_clear_interrupt(BLADERF_MODULE_RX); } static void retune_tx(void *context) { /* Handle the ISR */ retune_isr(&tx_queue); /* Clear the interrupt */ timer_tamer_clear_interrupt(BLADERF_MODULE_TX); } #endif void pkt_retune_init() { reset_queue(&rx_queue); reset_queue(&tx_queue); #ifndef BLADERF_NIOS_PC_SIMULATION /* Register RX Time Tamer ISR */ alt_ic_isr_register( RX_TAMER_IRQ_INTERRUPT_CONTROLLER_ID, RX_TAMER_IRQ, retune_rx, NULL, NULL ) ; /* Register TX Time Tamer ISR */ alt_ic_isr_register( TX_TAMER_IRQ_INTERRUPT_CONTROLLER_ID, TX_TAMER_IRQ, retune_tx, NULL, NULL ) ; #endif } #ifndef BLADERF_XB_TX_ENABLE #define BLADERF_XB_TX_ENABLE 0x1000 #endif #ifndef BLADERF_XB_RX_ENABLE #define BLADERF_XB_RX_ENABLE 0x2000 #endif static void xb_config_write(uint8_t xb_gpio) { uint32_t val; val = expansion_port_read(); if (!(xb_gpio & LMS_FREQ_XB_200_ENABLE)) { return; } if (xb_gpio & LMS_FREQ_XB_200_MODULE_RX) { val &= ~(0x30000000 | 0x30); val |= (((xb_gpio & LMS_FREQ_XB_200_FILTER_SW) >> LMS_FREQ_XB_200_FILTER_SW_SHIFT) & 3 ) << 28; val |= (((xb_gpio & LMS_FREQ_XB_200_PATH) >> LMS_FREQ_XB_200_PATH_SHIFT) & 3 ) << 4; val |= BLADERF_XB_RX_ENABLE; } else { val &= ~(0x0C000000 | 0x0C); val |= (((xb_gpio & LMS_FREQ_XB_200_FILTER_SW) >> LMS_FREQ_XB_200_FILTER_SW_SHIFT) & 3 ) << 26; val |= (((xb_gpio & LMS_FREQ_XB_200_PATH) >> LMS_FREQ_XB_200_PATH_SHIFT) & 3 ) << 2; val |= BLADERF_XB_TX_ENABLE; } expansion_port_write(val); uint8_t reg; uint8_t lreg; LMS_READ(NULL, 0x5A, ®); #define LMS_RX_SWAP 0x40 #define LMS_TX_SWAP 0x08 lreg = reg; if (((xb_gpio & LMS_FREQ_XB_200_PATH) >> LMS_FREQ_XB_200_PATH_SHIFT) & 1) { lreg |= (xb_gpio & LMS_FREQ_XB_200_MODULE_RX) ? LMS_RX_SWAP : LMS_TX_SWAP; } else { lreg &= ~((xb_gpio & LMS_FREQ_XB_200_MODULE_RX) ? LMS_RX_SWAP : LMS_TX_SWAP); } LMS_WRITE(NULL, 0x5A, lreg); } static inline void perform_work(struct queue *q, bladerf_module module) { struct queue_entry *e = peek_next_retune(q); if (e == NULL) { return; } switch (e->state) { case ENTRY_STATE_NEW: e->state = ENTRY_STATE_SCHEDULED; tamer_schedule(module, e->timestamp); break; case ENTRY_STATE_SCHEDULED: /* Nothing to do. * We're just waiting for this entry to become */ break; case ENTRY_STATE_READY: /* Perform our retune */ if (lms_set_precalculated_frequency(NULL, module, &e->freq)) { INCREMENT_ERROR_COUNT(); } else { bool low_band = (e->freq.flags & LMS_FREQ_FLAGS_LOW_BAND) != 0; if (band_select(NULL, module, low_band)) { INCREMENT_ERROR_COUNT(); } xb_config_write(e->freq.xb_gpio); } /* Drop the item from the queue */ dequeue_retune(q, NULL); break; default: INCREMENT_ERROR_COUNT(); break; } } void pkt_retune_work(void) { perform_work(&rx_queue, BLADERF_MODULE_RX); perform_work(&tx_queue, BLADERF_MODULE_TX); } void pkt_retune(struct pkt_buf *b) { int status = -1; bladerf_module module; uint8_t flags; struct lms_freq f; uint64_t timestamp; uint64_t start_time; uint64_t end_time; uint64_t duration = 0; bool low_band; uint8_t xb_gpio; bool quick_tune; flags = NIOS_PKT_RETUNERESP_FLAG_SUCCESS; nios_pkt_retune_unpack(b->req, &module, ×tamp, &f.nint, &f.nfrac, &f.freqsel, &f.vcocap, &low_band, &xb_gpio, &quick_tune); f.vcocap_result = 0xff; if (low_band) { f.flags = LMS_FREQ_FLAGS_LOW_BAND; } else { f.flags = 0; } if (quick_tune) { f.flags |= LMS_FREQ_FLAGS_FORCE_VCOCAP; } start_time = time_tamer_read(module); if (timestamp == NIOS_PKT_RETUNE_NOW) { /* Fire off this retune operation now */ switch (module) { case BLADERF_MODULE_RX: case BLADERF_MODULE_TX: status = lms_set_precalculated_frequency(NULL, module, &f); if (status != 0) { goto out; } flags |= NIOS_PKT_RETUNERESP_FLAG_TSVTUNE_VALID; status = band_select(NULL, module, low_band); if (status != 0) { goto out; } xb_config_write(xb_gpio); status = 0; break; default: INCREMENT_ERROR_COUNT(); status = -1; } } else if (timestamp == NIOS_PKT_RETUNE_CLEAR_QUEUE) { switch (module) { case BLADERF_MODULE_RX: reset_queue(&rx_queue); status = 0; break; case BLADERF_MODULE_TX: reset_queue(&tx_queue); status = 0; break; default: INCREMENT_ERROR_COUNT(); status = -1; } } else { uint8_t queue_size; switch (module) { case BLADERF_MODULE_RX: queue_size = enqueue_retune(&rx_queue, &f, timestamp); break; case BLADERF_MODULE_TX: queue_size = enqueue_retune(&tx_queue, &f, timestamp); break; default: INCREMENT_ERROR_COUNT(); queue_size = QUEUE_FULL; } if (queue_size == QUEUE_FULL) { status = -1; } else { status = 0; } } end_time = time_tamer_read(module); duration = end_time - start_time; out: if (status != 0) { flags &= ~(NIOS_PKT_RETUNERESP_FLAG_SUCCESS); } nios_pkt_retune_resp_pack(b->resp, duration, f.vcocap_result, flags); } bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/software/bladeRF_nios/src/pkt_retune.h000066400000000000000000000031231457144405000310530ustar00rootroot00000000000000/* This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef SM_PKT_RETUNE_H_ #define SM_PKT_RETUNE_H_ #include #include "pkt_handler.h" #include "nios_pkt_retune.h" void pkt_retune_init(void); void pkt_retune(struct pkt_buf *b); void pkt_retune_work(void); #define PKT_RETUNE { \ .magic = NIOS_PKT_RETUNE_MAGIC, \ .init = pkt_retune_init, \ .exec = pkt_retune, \ .do_work = pkt_retune_work, \ } #endif bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/software/bladeRF_nios/src/pkt_retune2.c000066400000000000000000000277271457144405000311500ustar00rootroot00000000000000/* This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2018 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include "pkt_handler.h" #include "pkt_retune2.h" #include "nios_pkt_retune2.h" /* Packet format definition */ #include "devices.h" #include "debug.h" #ifdef BLADERF_NIOS_LIBAD936X void rfic_invalidate_frequency(bladerf_module module); #endif // BLADERF_NIOS_LIBAD936X #ifdef BLADERF_NIOS_DEBUG volatile uint32_t pkt_retune2_error_count = 0; # define INCREMENT_ERROR_COUNT() do { pkt_retune2_error_count++; } while (0) #else # define INCREMENT_ERROR_COUNT() do {} while (0) #endif /* The enqueue/dequeue routines require that this be a power of two */ #define RETUNE2_QUEUE_MAX 16 #define QUEUE_FULL 0xff #define QUEUE_EMPTY 0xfe /* State of items in the retune queue */ enum entry_state { ENTRY_STATE_INVALID = 0, /* Marks entry invalid and not in use */ ENTRY_STATE_NEW, /* We have a new retune request to satisfy */ ENTRY_STATE_SCHEDULED, /* We've scheduled the timer interrupt for * this entry and are awaiting the ISR */ ENTRY_STATE_READY, /* The timer interrupt has fired - we should * handle this retune */ ENTRY_STATE_DONE, /* Retune is complete */ }; struct queue_entry { volatile enum entry_state state; fastlock_profile *profile; uint64_t timestamp; }; static struct queue { uint8_t count; /* Total number of items in the queue */ uint8_t ins_idx; /* Insertion index */ uint8_t rem_idx; /* Removal index */ struct queue_entry entries[RETUNE2_QUEUE_MAX]; } rx_queue, tx_queue; /* Returns queue size after enqueue operation, or QUEUE_FULL if we could * not enqueue the requested item */ static inline uint8_t enqueue_retune(struct queue *q, fastlock_profile *p, uint64_t timestamp) { uint8_t ret; if (q->count >= RETUNE2_QUEUE_MAX) { return QUEUE_FULL; } q->entries[q->ins_idx].profile = p; q->entries[q->ins_idx].state = ENTRY_STATE_NEW; q->entries[q->ins_idx].timestamp = timestamp; q->ins_idx = (q->ins_idx + 1) & (RETUNE2_QUEUE_MAX - 1); q->count++; ret = q->count; return ret; } /* Retune number of items left in the queue after the dequeue operation, * or QUEUE_EMPTY if there was nothing to dequeue */ static inline uint8_t dequeue_retune(struct queue *q, struct queue_entry *e) { uint8_t ret; if (q->count == 0) { return QUEUE_EMPTY; } if (e != NULL) { memcpy(&e, &q->entries[q->rem_idx], sizeof(e[0])); } q->entries[q->rem_idx].state = ENTRY_STATE_DONE; q->rem_idx = (q->rem_idx + 1) & (RETUNE2_QUEUE_MAX - 1); q->count--; ret = q->count; return ret; } /* Get the state of the next item in the retune queue */ static inline struct queue_entry* peek_next_retune(struct queue *q) { if (q == NULL) { return NULL; } else if (q->count == 0) { return NULL; } else { return &q->entries[q->rem_idx]; } } /* Get the queue element at the given offset relative to the removal index */ static inline struct queue_entry* peek_next_retune_offset(struct queue *q, uint8_t offset) { if (q == NULL) { return NULL; } else if (q->count == 0) { return NULL; } else { return &q->entries[(q->rem_idx + offset) & (RETUNE2_QUEUE_MAX - 1)]; } } /* The retune interrupt may fire while this call is occuring, so we should * perform these operations in an order that minimizes the race window, and * does not cause the race to be problematic. It's fine if the last retune * occurs before we can cancel it. */ static void reset_queue(struct queue *q) { unsigned int i; q->count = 0; for (i = 0; i < RETUNE2_QUEUE_MAX; i++) { q->entries[i].state = ENTRY_STATE_INVALID; } q->rem_idx = q->ins_idx = 0; } static inline void profile_load(bladerf_module module, fastlock_profile *p) { if (p == NULL) { return; } adi_fastlock_load(module, p); } static inline void profile_load_scheduled(struct queue *q, bladerf_module module) { struct queue_entry *e; uint32_t i; uint8_t used = 0; if ((q == NULL) || (q->count == 0)) { return; } /* Check the contents of the retune queue and load all the profiles we can * without causing them to step on each other. This should reduce retune * times in most scenarios because the profile will have already been * loaded into the RFFE when it becomes time to retune. */ for (i = 0; i < q->count; i++) { e = peek_next_retune_offset(q, i); if( e != NULL ) { if (e->state == ENTRY_STATE_NEW) { if ( !(used & (1 << e->profile->profile_num)) ) { /* Profile slot is available in RFFE, fill it */ profile_load(module, e->profile); /* Mark profile slot used */ used |= 1 << e->profile->profile_num; } } } } } static inline void profile_activate(bladerf_module module, fastlock_profile *p) { if (p == NULL) { return; } #ifdef BLADERF_NIOS_LIBAD936X /* Invalidate current frequency knowledge */ rfic_invalidate_frequency(module); #endif // BLADERF_NIOS_LIBAD936X /* Activate the RFFE fast lock profile */ adi_fastlock_recall(module, p); /* Adjust the RFFE port */ adi_rfport_select(p); /* Adjust the RF switches */ adi_rfspdt_select(module, p); } static inline void retune_isr(struct queue *q) { struct queue_entry *e = peek_next_retune(q); if (e != NULL) { if (e->state == ENTRY_STATE_SCHEDULED) { e->state = ENTRY_STATE_READY; } else { INCREMENT_ERROR_COUNT(); } } } #ifndef BLADERF_NIOS_PC_SIMULATION static void retune_rx(void *context) { /* Handle the ISR */ retune_isr(&rx_queue); /* Clear the interrupt */ timer_tamer_clear_interrupt(BLADERF_MODULE_RX); } static void retune_tx(void *context) { /* Handle the ISR */ retune_isr(&tx_queue); /* Clear the interrupt */ timer_tamer_clear_interrupt(BLADERF_MODULE_TX); } #endif void pkt_retune2_init() { reset_queue(&rx_queue); reset_queue(&tx_queue); #ifndef BLADERF_NIOS_PC_SIMULATION /* Register RX Time Tamer ISR */ alt_ic_isr_register( RX_TAMER_IRQ_INTERRUPT_CONTROLLER_ID, RX_TAMER_IRQ, retune_rx, NULL, NULL ) ; /* Register TX Time Tamer ISR */ alt_ic_isr_register( TX_TAMER_IRQ_INTERRUPT_CONTROLLER_ID, TX_TAMER_IRQ, retune_tx, NULL, NULL ) ; #endif } static inline void perform_work(struct queue *q, bladerf_module module) { struct queue_entry *e = peek_next_retune(q); if (e == NULL) { return; } switch (e->state) { case ENTRY_STATE_NEW: /* Load the fast lock profile into the RFFE */ profile_load(module, e->profile); /* Schedule the retune */ e->state = ENTRY_STATE_SCHEDULED; tamer_schedule(module, e->timestamp); break; case ENTRY_STATE_SCHEDULED: /* Nothing to do. * Waiting for this entry to become ready */ break; case ENTRY_STATE_READY: /* Activate the fast lock profile for this retune */ profile_activate(module, e->profile); /* Drop the item from the queue */ dequeue_retune(q, NULL); break; default: INCREMENT_ERROR_COUNT(); break; } } void pkt_retune2_work(void) { perform_work(&rx_queue, BLADERF_MODULE_RX); perform_work(&tx_queue, BLADERF_MODULE_TX); } void pkt_retune2(struct pkt_buf *b) { int status = -1; bladerf_module module; uint8_t flags; uint64_t timestamp; uint64_t start_time; uint64_t end_time; uint64_t duration = 0; uint16_t nios_profile; uint8_t rffe_profile; uint8_t port; uint8_t spdt; fastlock_profile *profile; flags = NIOS_PKT_RETUNE2_RESP_FLAG_SUCCESS; nios_pkt_retune2_unpack(b->req, &module, ×tamp, &nios_profile, &rffe_profile, &port, &spdt); switch (module) { case BLADERF_MODULE_RX: profile = &fastlocks_rx[nios_profile]; break; case BLADERF_MODULE_TX: profile = &fastlocks_tx[nios_profile]; break; default: profile = NULL; } if (profile == NULL) { INCREMENT_ERROR_COUNT(); status = -1; } else { /* Update the fastlock profile data */ profile->profile_num = rffe_profile; profile->port = port; profile->spdt = spdt; } start_time = time_tamer_read(module); if (timestamp == NIOS_PKT_RETUNE2_NOW) { /* Fire off this retune operation now */ switch (module) { case BLADERF_MODULE_RX: case BLADERF_MODULE_TX: /* Load the profile data into RFFE memory */ profile_load(module, profile); /* Activate the fast lock profile for this retune */ profile_activate(module, profile); flags |= NIOS_PKT_RETUNE2_RESP_FLAG_TSVTUNE_VALID; status = 0; break; default: INCREMENT_ERROR_COUNT(); status = -1; } } else if (timestamp == NIOS_PKT_RETUNE2_CLEAR_QUEUE) { switch (module) { case BLADERF_MODULE_RX: reset_queue(&rx_queue); status = 0; break; case BLADERF_MODULE_TX: reset_queue(&tx_queue); status = 0; break; default: INCREMENT_ERROR_COUNT(); status = -1; } } else { uint8_t queue_size; switch (module) { case BLADERF_MODULE_RX: queue_size = enqueue_retune(&rx_queue, profile, timestamp); profile_load_scheduled(&rx_queue, module); break; case BLADERF_MODULE_TX: queue_size = enqueue_retune(&tx_queue, profile, timestamp); profile_load_scheduled(&tx_queue, module); break; default: INCREMENT_ERROR_COUNT(); queue_size = QUEUE_FULL; } if (queue_size == QUEUE_FULL) { status = -1; } else { status = 0; } } end_time = time_tamer_read(module); duration = end_time - start_time; if (status != 0) { flags &= ~(NIOS_PKT_RETUNE2_RESP_FLAG_SUCCESS); } nios_pkt_retune2_resp_pack(b->resp, duration, flags); } bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/software/bladeRF_nios/src/pkt_retune2.h000066400000000000000000000031361457144405000311410ustar00rootroot00000000000000/* This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2018 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef SM_PKT_RETUNE2_H_ #define SM_PKT_RETUNE2_H_ #include #include "pkt_handler.h" #include "nios_pkt_retune2.h" void pkt_retune2_init(void); void pkt_retune2(struct pkt_buf *b); void pkt_retune2_work(void); #define PKT_RETUNE2 { \ .magic = NIOS_PKT_RETUNE2_MAGIC, \ .init = pkt_retune2_init, \ .exec = pkt_retune2, \ .do_work = pkt_retune2_work, \ } #endif bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/software/bladeRF_nios/src/sim_test_cases.h000066400000000000000000000760431457144405000317130ustar00rootroot00000000000000/* This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef SIM_TEST_CASES_H_ #define SIM_TEST_CASES_H_ #ifdef BLADERF_NIOS_PC_SIMULATION struct test_case { const char *desc; const uint8_t req[NIOS_PKT_LEN]; const uint8_t resp[NIOS_PKT_LEN]; }; static const struct test_case test_cases[] = { { .desc = "Garbage input. Should yield no output.", .req = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, }, /* Legacy format accesses */ { .desc = "Legacy read from LMS6[0x2f]", .req = { 0x4e, 0x91, 0x2f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x91, 0x2f, 0x17, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy write to LMS6[0x07] <- 0x09", .req = { 0x4e, 0x51, 0x07, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x51, 0x07, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy read from Si5338[0x03]", .req = { 0x4e, 0xb1, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0xb1, 0x03, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy write to Si5338[0x05] <- 0xab", .req = { 0x4e, 0x71, 0x05, 0xab, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x71, 0x05, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy config register read, access 1/4", .req = { 0x4e, 0x81, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x81, 0x00, 0x57, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy config register read, access 2/4", .req = { 0x4e, 0x81, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x81, 0x01, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy config register read, access 3/4", .req = { 0x4e, 0x81, 0x02, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x81, 0x02, 0xbc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy config register read, access 4/4", .req = { 0x4e, 0x81, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x81, 0x03, 0x8a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy config register write, access 1/4", .req = { 0x4e, 0x41, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x41, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy config register write, access 2/4", .req = { 0x4e, 0x41, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x41, 0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy config register write, access 3/4", .req = { 0x4e, 0x41, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x41, 0x02, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy config register write, access 4/4", .req = { 0x4e, 0x41, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x41, 0x03, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, /* Partial read to execericse code to detect this and reset * when the next request occurs in the middle of the other */ { .desc = "Partial read of RX IQ phase correction", .req = { 0x4e, 0x81, 0x06, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x81, 0x00, 0x1c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy read of RX IQ gain correction 1/2", .req = { 0x4e, 0x81, 0x04, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x81, 0x00, 0xd2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy read of RX IQ gain correction 2/2", .req = { 0x4e, 0x81, 0x05, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x81, 0x01, 0x14, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy write of RX IQ gain correction 1/2", .req = { 0x4e, 0x41, 0x04, 0xd2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x41, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy write of RX IQ gain correction 2/2", .req = { 0x4e, 0x41, 0x05, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x41, 0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy read of RX IQ phase correction 1/2", .req = { 0x4e, 0x81, 0x06, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x81, 0x00, 0x1c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy read of RX IQ phase correction 2/2", .req = { 0x4e, 0x81, 0x07, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x81, 0x01, 0x10, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy write of RX IQ phase correction 1/2", .req = { 0x4e, 0x41, 0x06, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x41, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy write of RX IQ phase correction 2/2", .req = { 0x4e, 0x41, 0x07, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x41, 0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy read of TX IQ gain correction 1/2", .req = { 0x4e, 0x81, 0x08, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x81, 0x00, 0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy read of TX IQ gain correction 2/2", .req = { 0x4e, 0x81, 0x09, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x81, 0x01, 0x08, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy write of TX IQ gain correction 1/2", .req = { 0x4e, 0x41, 0x08, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x41, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy write of TX IQ gain correction 2/2", .req = { 0x4e, 0x41, 0x09, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x41, 0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy read of TX IQ phase correction 1/2", .req = { 0x4e, 0x81, 0x0a, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x81, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy read of TX IQ phase correction 2/2", .req = { 0x4e, 0x81, 0x0b, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x81, 0x01, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy write of TX IQ phase correction 1/2", .req = { 0x4e, 0x41, 0x0a, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x41, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy write of TX IQ phase correction 2/2", .req = { 0x4e, 0x41, 0x0b, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x41, 0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy read of FPGA version 1/4", .req = { 0x4e, 0x81, 0x0c, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x81, 0x00, FPGA_VERSION_MAJOR & 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy read of FPGA version 2/4", .req = { 0x4e, 0x81, 0x0d, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x81, 0x01, FPGA_VERSION_MINOR & 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy read of FPGA version 3/4", .req = { 0x4e, 0x81, 0x0e, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x81, 0x02, FPGA_VERSION_PATCH & 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy read of FPGA version 4/4", .req = { 0x4e, 0x81, 0x0f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x81, 0x03, (FPGA_VERSION_PATCH >> 8) & 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, /* Invalid, Partial Legacy FPGA version # write attempt 1/4. * A write to this address has no effect, but would required 4 writes to * complete. Only 1 of 4 writes is done to exercise the config * state machine resetting on a partial read. */ { .desc = "Legacy FPGA version (illegal) write attempt 1/4", .req = { 0x4e, 0x41, 0x0c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x41, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "RX Timestamp read 1/2", .req = { 0x4e, 0x84, 0x10, 0xff, 0x11, 0xff, 0x12, 0xff, 0x13, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .resp = { 0x4e, 0x84, 0x00, 0x3d, 0x01, 0x2c, 0x02, 0x1b, 0x03, 0x0a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "RX Timestamp read 2/2", .req = { 0x4e, 0x84, 0x14, 0xff, 0x15, 0xff, 0x16, 0xff, 0x17, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .resp = { 0x4e, 0x84, 0x04, 0x78, 0x05, 0x56, 0x06, 0x34, 0x07, 0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "TX Timestamp read 1/2", .req = { 0x4e, 0x84, 0x18, 0xff, 0x19, 0xff, 0x1a, 0xff, 0x1b, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .resp = { 0x4e, 0x84, 0x00, 0xd4, 0x01, 0xc3, 0x02, 0xb2, 0x03, 0xa1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "TX Timestamp read 2/2", .req = { 0x4e, 0x84, 0x1c, 0xff, 0x1d, 0xff, 0x1e, 0xff, 0x1f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .resp = { 0x4e, 0x84, 0x04, 0x21, 0x05, 0x43, 0x06, 0x65, 0x07, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "VCTCXO trim dac write 1/2", .req = { 0x4e, 0x41, 0x22, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x41, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "VCTCXO trim dac write 2/2", .req = { 0x4e, 0x41, 0x23, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x41, 0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy XB-200 synth write 1/4", .req = { 0x4e, 0x41, 0x24, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x41, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy XB-200 synth write 2/4", .req = { 0x4e, 0x41, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x41, 0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy XB-200 synth write 3/4", .req = { 0x4e, 0x41, 0x26, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x41, 0x02, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy XB-200 synth write 4/4", .req = { 0x4e, 0x41, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x41, 0x03, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy expansion port read 1/4", .req = { 0x4e, 0x81, 0x28, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x81, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy expansion port read 2/4", .req = { 0x4e, 0x81, 0x29, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x81, 0x01, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy expansion port read 3/4", .req = { 0x4e, 0x81, 0x2a, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x81, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy expansion port read 4/4", .req = { 0x4e, 0x81, 0x2b, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x81, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy expansion port write 1/4", .req = { 0x4e, 0x41, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x41, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy expansion port write 2/4", .req = { 0x4e, 0x41, 0x29, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x41, 0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy expansion port write 3/4", .req = { 0x4e, 0x41, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x41, 0x02, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy expansion port write 4/4", .req = { 0x4e, 0x41, 0x2b, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x41, 0x03, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy expansion port direction write 1/4", .req = { 0x4e, 0x41, 0x2c, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x41, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy expansion port direction write 2/4", .req = { 0x4e, 0x41, 0x2d, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x41, 0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy expansion port direction write 3/4", .req = { 0x4e, 0x41, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x41, 0x02, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy expansion port direction write 4/4", .req = { 0x4e, 0x41, 0x2f, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x41, 0x03, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy expansion port direction read 1/4", .req = { 0x4e, 0x81, 0x2c, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x81, 0x00, 0x3d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy expansion port direction read 2/4", .req = { 0x4e, 0x81, 0x2d, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x81, 0x01, 0x2c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy expansion port direction read 3/4", .req = { 0x4e, 0x81, 0x2e, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x81, 0x02, 0x1b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, { .desc = "Legacy expansion port direction read 4/4", .req = { 0x4e, 0x81, 0x2f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4e, 0x81, 0x03, 0x0a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, /* 8x8 packet accesses */ { .desc = "8x8 Access: read from LMS6", .req = { 0x41, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x41, 0x00, 0x02, 0x00, 0x2f, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, }, { .desc = "8x8 Access: write to LMS6", .req = { 0x41, 0x00, 0x01, 0x00, 0x07, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x41, 0x00, 0x03, 0x00, 0x07, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, }, /* 8x16 packet accesses */ { .desc = "8x16 Access: read from VCTCXO DAC", .req = { 0x42, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x42, 0x00, 0x02, 0x00, 0x98, 0x34, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, }, { .desc = "8x16 Access: write to VCTCXO DAC", .req = { 0x42, 0x00, 0x01, 0x00, 0x28, 0x12, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x42, 0x00, 0x03, 0x00, 0x28, 0x12, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, }, { .desc = "8x16 Access: read from RX IQ gain correction", .req = { 0x42, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x42, 0x01, 0x02, 0x00, 0x00, 0xd2, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, }, { .desc = "8x16 Access: write to RX IQ gain correction", .req = { 0x42, 0x01, 0x01, 0x00, 0x00, 0xd2, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x42, 0x01, 0x03, 0x00, 0x00, 0xd2, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, }, { .desc = "8x16 Access: read from RX IQ phase correction", .req = { 0x42, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x42, 0x01, 0x02, 0x00, 0x01, 0x1c, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, }, { .desc = "8x16 Access: write to RX IQ phase correction", .req = { 0x42, 0x01, 0x01, 0x00, 0x01, 0x1c, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x42, 0x01, 0x03, 0x00, 0x01, 0x1c, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, }, { .desc = "8x16 Access: read from TX IQ gain correction", .req = { 0x42, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x42, 0x01, 0x02, 0x00, 0x02, 0x12, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, }, { .desc = "8x16 Access: write to TX IQ gain correction", .req = { 0x42, 0x01, 0x01, 0x00, 0x02, 0x12, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x42, 0x01, 0x03, 0x00, 0x02, 0x12, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, }, { .desc = "8x16 Access: read from TX IQ phase correction", .req = { 0x42, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x42, 0x01, 0x02, 0x00, 0x03, 0x1f, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, }, { .desc = "8x16 Access: write to TX IQ phase correction", .req = { 0x42, 0x01, 0x01, 0x00, 0x03, 0x1f, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x42, 0x01, 0x03, 0x00, 0x03, 0x1f, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, }, { .desc = "8x32 Access: read from FPGA version register", .req = { 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x43, 0x00, 0x02, 0x00, 0x00, FPGA_VERSION_MAJOR, FPGA_VERSION_MINOR, (FPGA_VERSION_PATCH & 0xff), (FPGA_VERSION_PATCH >> 8), 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, }, { .desc = "8x32 Access: illegal write to FPGA version register", .req = { 0x43, 0x00, 0x01, 0x00, 0x00, 0x01, 0x23, 0x45, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x43, 0x00, 0x01, 0x00, 0x00, 0x01, 0x23, 0x45, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, }, { .desc = "8x32 Access: read from FPGA control/config register", .req = { 0x43, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x43, 0x01, 0x02, 0x00, 0x00, 0x57, 0xde, 0xbc, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, }, { .desc = "8x32 Access: write to FPGA control/config register", .req = { 0x43, 0x01, 0x01, 0x00, 0x00, 0x57, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x43, 0x01, 0x03, 0x00, 0x00, 0x57, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, }, { .desc = "8x32 Access: illegal read from XB-200 ADF4351", .req = { 0x43, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x43, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, }, { .desc = "8x32 Access: write to XB-200 ADF4351", .req = { 0x43, 0x02, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x43, 0x02, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, }, /* 8x64 Accesses */ { .desc = "8x64 Access: read from RX timestamp", .req = { 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x44, 0x00, 0x02, 0x00, 0x00, 0x3d, 0x2c, 0x1b, 0x0a, 0x78, 0x56, 0x34, 0x12, 0x00, 0x00, 0x00 }, }, { .desc = "8x64 Access: illegal write to RX timestamp", .req = { 0x44, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x07, 0x00, 0x00, 0x00 }, .resp = { 0x44, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x07, 0x00, 0x00, 0x00 }, }, { .desc = "8x64 Access: read from TX timestamp", .req = { 0x44, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x44, 0x00, 0x02, 0x00, 0x01, 0xd4, 0xc3, 0xb2, 0xa1, 0x21, 0x43, 0x65, 0x87, 0x00, 0x00, 0x00 }, }, { .desc = "8x64 Access: illegal write to TX timestamp", .req = { 0x44, 0x00, 0x01, 0x00, 0x01, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x07, 0x00, 0x00, 0x00 }, .resp = { 0x44, 0x00, 0x01, 0x00, 0x01, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x07, 0x00, 0x00, 0x00 }, }, /* 32x32 Accesses */ { .desc = "32x32 Access: read from expansion port", .req = { 0x4b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4b, 0x00, 0x02, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }, }, { .desc = "32x32 Access: write to expansion port", .req = { 0x4b, 0x00, 0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x08, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4b, 0x00, 0x03, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x08, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00 }, }, { .desc = "32x32 Access: read from expansion port direction register", .req = { 0x4b, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4b, 0x01, 0x02, 0x00, 0xff, 0xff, 0xff, 0xff, 0x3d, 0x2c, 0x1b, 0x0a, 0x00, 0x00, 0x00, 0x00 }, }, { .desc = "32x32 Access: write to expansion port direction register", .req = { 0x4b, 0x01, 0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0x3d, 0x2c, 0x1b, 0x0a, 0x00, 0x00, 0x00, 0x00 }, .resp = { 0x4b, 0x01, 0x03, 0x00, 0xff, 0xff, 0xff, 0xff, 0x3d, 0x2c, 0x1b, 0x0a, 0x00, 0x00, 0x00, 0x00 }, }, }; #endif #endif bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/software/bladeRF_nios_bsp/000077500000000000000000000000001457144405000266005ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/software/bladeRF_nios_bsp/.cproject000066400000000000000000001034631457144405000304210ustar00rootroot00000000000000 bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/software/bladeRF_nios_bsp/.project000066400000000000000000000050611457144405000302510ustar00rootroot00000000000000 bladeRF_nios_bsp org.eclipse.cdt.managedbuilder.core.genmakebuilder clean,full,incremental, ?name? org.eclipse.cdt.make.core.append_environment true org.eclipse.cdt.make.core.autoBuildTarget all org.eclipse.cdt.make.core.buildArguments org.eclipse.cdt.make.core.buildCommand make org.eclipse.cdt.make.core.buildLocation ${workspace_loc://bladeRF_nios_bsp} org.eclipse.cdt.make.core.cleanBuildTarget clean org.eclipse.cdt.make.core.contents org.eclipse.cdt.make.core.activeConfigSettings org.eclipse.cdt.make.core.enableAutoBuild false org.eclipse.cdt.make.core.enableCleanBuild true org.eclipse.cdt.make.core.enableFullBuild true org.eclipse.cdt.make.core.fullBuildTarget all org.eclipse.cdt.make.core.stopOnError true org.eclipse.cdt.make.core.useDefaultBuildCmd true org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder full,incremental, org.eclipse.cdt.core.cnature org.eclipse.cdt.managedbuilder.core.managedBuildNature org.eclipse.cdt.managedbuilder.core.ScannerConfigNature org.eclipse.cdt.core.ccnature com.altera.sbtgui.project.SBTGUINature com.altera.sbtgui.project.SBTGUIBspNature bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/vhdl/000077500000000000000000000000001457144405000225105ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/vhdl/fx3.vhd000066400000000000000000000123311457144405000237130ustar00rootroot00000000000000-- Copyright (c) 2013 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; library nuand ; entity fx3 is port ( -- FX3 GPIF pclk : in std_logic ; gpif : inout std_logic_vector(31 downto 0) ; ctl : inout std_logic_vector(12 downto 0) ; -- FX3 UART rxd : out std_logic ; txd : in std_logic ; cts : in std_logic ; -- USB RX'd data output side usb_data_rx : out std_logic_vector(31 downto 0) ; usb_data_rx_we : out std_logic ; usb_data_rx_clear : out std_logic ; -- USB TX data input usb_data_tx : in std_logic_vector(31 downto 0) := (others =>'0') ; usb_data_tx_empty : in std_logic := '1' ; usb_data_tx_re : out std_logic ; usb_data_tx_clear : out std_logic ; -- UART RX'd data output side uart_data_rx : out std_logic_vector(7 downto 0) ; uart_data_rx_we : out std_logic ; -- UART TX data input uart_data_tx : in std_logic_vector(7 downto 0) := (others =>'0') ; uart_data_tx_re : out std_logic ; uart_data_tx_empty : in std_logic := '1' ) ; end entity ; -- fx3 architecture digital_loopback of fx3 is alias rxd_samples_request is ctl(0) ; alias rxd_samples_acknowledge is ctl(1) ; alias rxd_samples_we is ctl(2) ; alias txd_samples_we is ctl(3) ; alias gpif_reset is ctl(4) ; alias unused_ctl is ctl(12 downto 5) ; constant FIFO_DEPTH : positive := 1024 ; signal rxd_samples : std_logic_vector(gpif'range) ; signal fifo_used : natural range 0 to FIFO_DEPTH ; signal fifo_full : std_logic ; signal fifo_empty : std_logic ; signal fifo_read_en : std_logic ; begin -- USB data goes nowhere usb_data_rx <= (others =>'0') ; usb_data_rx_we <= '0' ; usb_data_rx_clear <= '1' ; usb_data_tx_re <= '0' ; usb_data_tx_clear <= '1' ; -- UART loopback rxd <= txd when cts = '1' else '0' ; uart_data_rx <= (others =>'0') ; uart_data_rx_we <= '0' ; uart_data_tx_re <= '0' ; -- Set the unused control lines to something unused_ctl <= (others =>'0') ; -- Only drive the GPIF when we've gotten an acknowledgement from the FX3 saying we have the bus gpif <= rxd_samples when rxd_samples_acknowledge = '1' else (others =>'Z') ; -- Control signals that the FX3 drives rxd_samples_acknowledge <= 'Z' ; txd_samples_we <= 'Z' ; rxd_samples_we <= '0' when gpif_reset = '1' else rxd_samples_acknowledge when rising_edge(pclk) ; fifo_read_en <= '0' ; request_generator : process(all) begin if( fifo_used = 0 ) then rxd_samples_request <= '0' ; elsif( fifo_used > 128 ) then if( rxd_samples_request = '0' ) then rxd_samples_request <= '1' ; else if( fifo_used = 1 ) then rxd_samples_request <= '0' ; else rxd_samples_request <= '1' ; end if ; end if ; else if( rxd_samples_request = '1' ) then if( fifo_used = 0 ) then rxd_samples_request <= '0' ; end if ; end if ; end if ; end process ; -- Synchronous FIFO for loopback U_fifo : entity nuand.sync_fifo generic map ( DEPTH => FIFO_DEPTH, WIDTH => gpif'length, READ_AHEAD => true ) port map ( areset => gpif_reset, clock => pclk, used_words => fifo_used, full => fifo_full, empty => fifo_empty, data_in => gpif, write_en => txd_samples_we, data_out => rxd_samples, read_en => rxd_samples_acknowledge ) ; end architecture ; -- digital_loopback architecture inband_scheduler of fx3 is begin end architecture ; -- inband_scheduler bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/vhdl/fx3_gpif.vhd000066400000000000000000000641411457144405000247260ustar00rootroot00000000000000-- Copyright (c) 2017 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity fx3_gpif is port ( -- FX3 control signals pclk : in std_logic; reset : in std_logic; -- USB Speed 0 = SS, 1 = HS usb_speed : in std_logic; -- FX3 GPIF interface gpif_in : in std_logic_vector(31 downto 0); gpif_out : out std_logic_vector(31 downto 0); gpif_oe : out std_logic; ctl_in : in std_logic_vector(12 downto 0); ctl_out : out std_logic_vector(12 downto 0); ctl_oe : out std_logic_vector(12 downto 0); -- Enables tx_enable : out std_logic; rx_enable : out std_logic; meta_enable : in std_logic; packet_enable : in std_logic; -- TX FIFO tx_fifo_write : out std_logic; tx_fifo_full : in std_logic; tx_fifo_empty : in std_logic; tx_fifo_usedw : in std_logic_vector; tx_fifo_data : out std_logic_vector(31 downto 0); -- TX meta FIFO tx_timestamp : in unsigned(63 downto 0); tx_meta_fifo_write : out std_logic; tx_meta_fifo_full : in std_logic; tx_meta_fifo_empty : in std_logic; tx_meta_fifo_usedw : in std_logic_vector; tx_meta_fifo_data : out std_logic_vector(31 downto 0); -- RX FIFO rx_fifo_read : out std_logic; rx_fifo_full : in std_logic; rx_fifo_empty : in std_logic; rx_fifo_usedw : in std_logic_vector; rx_fifo_data : in std_logic_vector(31 downto 0); -- RX meta FIFO rx_meta_fifo_read : out std_logic; rx_meta_fifo_full : in std_logic; rx_meta_fifo_empty : in std_logic; rx_meta_fifo_usedr : in std_logic_vector; rx_meta_fifo_data : in std_logic_vector(31 downto 0) ); end entity; architecture sample_shuffler of fx3_gpif is -- max(a, b) returns the greater of a or b function max( a : integer ; b : integer ) return integer is begin if (a > b) then return a; else return b; end if; end function; type state_t is (IDLE, SETUP_RD, META_READ, SAMPLE_READ, SETUP_WR, META_WRITE, SAMPLE_WRITE, SAMPLE_WRITE_IGNORE, FINISHED); type gpif_mode_t is (IDLE, RX, RX_META, RX_IGNORE, TX, TX_META, TX_IGNORE); type dma_channel_t is (RX0, RX1, TX2, TX3); -- Control mapping alias dma0_rx_ack is ctl_out(0); alias dma1_rx_ack is ctl_out(1); alias dma2_tx_ack is ctl_out(2); alias dma3_tx_ack is ctl_out(3); alias dma_rx_enable is ctl_in(4); alias dma_tx_enable is ctl_in(5); alias dma_idle is ctl_in(6); alias dma0_rx_reqx is ctl_in(8); alias dma1_rx_reqx is ctl_in(12); -- due to 9 being connected to dclk alias dma2_tx_reqx is ctl_in(10); alias dma3_tx_reqx is ctl_in(11); -- Control OE (12 downto 0) constant CONTROL_OE : std_logic_vector := "0000000001111"; -- State machine downcounter values constant ACK_DOWNCOUNT_READ : natural := 2; constant ACK_DOWNCOUNT_WRITE : natural := 4; constant META_DOWNCOUNT_RESET : natural := 4; constant FINI_DOWNCOUNT_RESET : natural := 10; -- GPIF buf sizes for USB high-speed and super-speed constant GPIF_BUF_SIZE_HS : natural := 256; constant GPIF_BUF_SIZE_SS : natural := 512; type dma_handshake_t is record rx0 : std_logic; rx1 : std_logic; tx2 : std_logic; tx3 : std_logic; end record; type fsm_t is record state : state_t; gpif_mode : gpif_mode_t; dma_idle : std_logic; rx_meta_en : std_logic; tx_meta_en : std_logic; rx_fifo_rd : std_logic; tx_fifo_wr : std_logic; rxm_fifo_rd : std_logic; txm_fifo_wr : std_logic; underrun_set : std_logic; underrun_clr : std_logic; finishing_rx : std_logic; meta_dword : std_logic_vector(31 downto 0); ack_downcount : integer range 0 to max(ACK_DOWNCOUNT_READ, ACK_DOWNCOUNT_WRITE); dma_downcount : integer range -1 to 65536; meta_downcount : integer range -1 to META_DOWNCOUNT_RESET; fini_downcount : integer range 0 to FINI_DOWNCOUNT_RESET; tx_ts_plus32 : unsigned(63 downto 0); meta_buf : std_logic_vector(127 downto 0); dma_acks : dma_handshake_t; rx_current_dma : dma_channel_t; tx_current_dma : dma_channel_t; end record; constant FSM_RESET_VALUE : fsm_t := ( state => IDLE, gpif_mode => IDLE, dma_idle => '0', rx_meta_en => '0', tx_meta_en => '0', rx_fifo_rd => '0', tx_fifo_wr => '0', rxm_fifo_rd => '0', txm_fifo_wr => '0', underrun_set => '0', underrun_clr => '1', finishing_rx => '0', meta_dword => (others => '0'), ack_downcount => 0, dma_downcount => 0, meta_downcount => 0, fini_downcount => 0, tx_ts_plus32 => (others => '0'), meta_buf => (others => '0'), dma_acks => (others => '0'), rx_current_dma => RX0, tx_current_dma => TX3 ); signal current, future : fsm_t := FSM_RESET_VALUE; signal can_rx, should_rx : boolean; signal can_tx, should_tx : boolean; signal rx_fifo_enough : boolean; signal tx_fifo_enough : boolean; signal rx_fifo_critical : boolean; signal underrun : std_logic; signal dma_req : dma_handshake_t; signal gpif_buf_size : natural range GPIF_BUF_SIZE_HS to GPIF_BUF_SIZE_SS := GPIF_BUF_SIZE_SS; attribute preserve : boolean; attribute preserve of can_rx : signal is true; attribute preserve of can_tx : signal is true; attribute preserve of should_rx : signal is true; attribute preserve of should_tx : signal is true; attribute keep : boolean; attribute keep of can_rx : signal is true; attribute keep of can_tx : signal is true; attribute keep of should_rx : signal is true; attribute keep of should_tx : signal is true; -- acknowledge(dma_channel) returns a dma_handshake_t with all bits 0 -- except the bit corresponding to dma_channel function acknowledge( chan : dma_channel_t ) return dma_handshake_t is variable retval : dma_handshake_t := (others => '0'); begin case (chan) is when RX0 => retval.rx0 := '1'; when RX1 => retval.rx1 := '1'; when TX2 => retval.tx2 := '1'; when TX3 => retval.tx3 := '1'; end case; return retval; end function; begin -- DMA handshake signals (active-low, so inverting for clarity) dma_req.rx0 <= not dma0_rx_reqx; dma_req.rx1 <= not dma1_rx_reqx; dma_req.tx2 <= not dma2_tx_reqx; dma_req.tx3 <= not dma3_tx_reqx; -- Set FX3 control OEs and default the unused outputs ctl_oe <= CONTROL_OE; ctl_out(12 downto 4) <= (others => '0'); -- Set/clear flipflop for underrun indication U_underrun_ff : entity work.set_clear_ff port map ( clock => pclk, reset => reset, set => current.underrun_set, clear => current.underrun_clr, q => underrun ); -- RX and TX enable signals for enables : process(reset, pclk) begin if (reset = '1') then rx_enable <= '0'; tx_enable <= '0'; elsif (rising_edge(pclk)) then rx_enable <= dma_rx_enable; tx_enable <= dma_tx_enable; end if; end process enables; -- Transfer size for DMAs depends on USB speed calculate_conditionals : process(reset, pclk) begin if (reset = '1') then gpif_buf_size <= GPIF_BUF_SIZE_SS; elsif (rising_edge(pclk)) then if (usb_speed = '0') then gpif_buf_size <= GPIF_BUF_SIZE_SS; else gpif_buf_size <= GPIF_BUF_SIZE_HS; end if; end if; end process calculate_conditionals; -- Manage FIFO capacity to avoid underruns/overruns calculate_fifo_waterlines : process(reset, pclk) begin if (reset = '1') then rx_fifo_enough <= false; rx_fifo_critical <= false; tx_fifo_enough <= false; elsif (rising_edge(pclk)) then if( packet_enable = '1' ) then rx_fifo_enough <= rx_meta_fifo_empty = '0'; else rx_fifo_enough <= (unsigned(rx_fifo_full&rx_fifo_usedw) >= gpif_buf_size); end if; -- Can we not fit one more block of data in RX buffer? rx_fifo_critical <= (unsigned(rx_fifo_usedw) >= ((2**(rx_fifo_usedw'length-1) - gpif_buf_size))); -- Do we have room for one more block of data in the TX buffer? tx_fifo_enough <= (unsigned(tx_fifo_usedw) < ((2**(tx_fifo_usedw'length-1) - gpif_buf_size * 4))) and (unsigned(tx_meta_fifo_usedw) < ((2**(tx_meta_fifo_usedw'length-1) - 4))); end if; end process calculate_fifo_waterlines; -- Handle gpif_oe and moving data to/from the gpif bus gpif_mux : process(reset, pclk) begin if (reset = '1') then gpif_oe <= '1'; gpif_out <= (others => '0'); tx_fifo_data <= (others => '0'); tx_meta_fifo_data <= (others => '0'); elsif (rising_edge(pclk)) then gpif_oe <= '0'; gpif_out <= (others => '1'); tx_fifo_data <= gpif_in; tx_meta_fifo_data <= gpif_in; case (current.gpif_mode) is when IDLE => gpif_oe <= '0'; when RX => gpif_oe <= '1'; gpif_out <= rx_fifo_data; when RX_META => gpif_oe <= '1'; if (current.meta_downcount = 0) then -- this overrites 16 LBSs in the flags field stored in fifo_writer gpif_out <= rx_meta_fifo_data(31 downto 16) & x"000" & -- LSB nibble of the last word "00" & (not underrun) & underrun; else gpif_out <= rx_meta_fifo_data; end if; when RX_IGNORE => gpif_oe <= '1'; gpif_out <= (others => '0'); when TX => gpif_oe <= '0'; tx_fifo_data <= gpif_in; when TX_META => gpif_oe <= '0'; tx_meta_fifo_data <= current.meta_buf(127 downto 96); when TX_IGNORE => gpif_oe <= '0'; tx_meta_fifo_data <= current.meta_buf(127 downto 96); end case; end if; end process gpif_mux; -- Arbitrate RX and TX requests -- In the event the FX3 simultaneously requests RX and TX, we generally -- prioritize the TX first; this helps avoid discontinuities on the TX -- signal. However, if RX is about to overflow, we'll choose that. can_and_should : process(pclk, reset) begin if (reset = '1') then can_rx <= false; can_tx <= false; should_rx <= false; should_tx <= false; elsif (rising_edge(pclk)) then can_rx <= dma_rx_enable = '1' and rx_fifo_enough and (dma_req.rx0 = '1' or dma_req.rx1 = '1'); can_tx <= dma_tx_enable = '1' and tx_fifo_enough and (dma_req.tx2 = '1' or dma_req.tx3 = '1'); should_rx <= can_rx and (not can_tx or rx_fifo_critical); should_tx <= can_tx and not rx_fifo_critical; end if; end process; -- Synchronous process for FSM fsm_sync_proc : process(reset, pclk) is begin if (reset = '1') then current <= FSM_RESET_VALUE; elsif (rising_edge(pclk)) then current <= future; end if; end process fsm_sync_proc; -- Combinatorial process for FSM fsm_comb_proc : process(all) is variable next_state : state_t := IDLE; begin -- Maintain current state unless otherwise specified future <= current; -- Prevents inferred latch by making sure this variable always gets an -- assignment. (It is used as a temporary variable during SETUP_RD.) next_state := IDLE; -- Deassert fifo reads/writes future.rx_fifo_rd <= '0'; future.tx_fifo_wr <= '0'; future.rxm_fifo_rd <= '0'; future.txm_fifo_wr <= '0'; -- Deassert underrun set/clear future.underrun_set <= '0'; future.underrun_clr <= '0'; -- Deassert DMA acknowledgements future.dma_acks <= (others => '0'); -- Register incoming signals future.dma_idle <= dma_idle; future.tx_ts_plus32 <= tx_timestamp + 32; future.rx_meta_en <= meta_enable; future.tx_meta_en <= meta_enable; case (current.state) is -- ================================================================= -- Idle State -- ================================================================= when IDLE => -- Set up initial conditions future.gpif_mode <= IDLE; future.meta_buf <= (others => '0'); future.meta_downcount <= META_DOWNCOUNT_RESET; future.fini_downcount <= FINI_DOWNCOUNT_RESET; future.finishing_rx <= '0'; if (current.dma_idle = '1') then if (should_rx and ( (rx_meta_fifo_empty = '0' and current.rx_meta_en = '1') or (current.rx_meta_en = '0') ) ) then -- There is an RX to perform (sending data to FX3). future.ack_downcount <= ACK_DOWNCOUNT_READ; future.dma_downcount <= gpif_buf_size-1; future.rx_current_dma <= RX0; future.state <= SETUP_RD; elsif (should_tx) then -- There is a TX to perform (getting data from FX3). future.ack_downcount <= ACK_DOWNCOUNT_WRITE; future.dma_downcount <= gpif_buf_size-1; future.tx_current_dma <= TX3; future.state <= SETUP_WR; end if; end if; -- ================================================================= -- Read Handling (moving data to FX3) -- ================================================================= when SETUP_RD => -- SETUP_RD starts moving data from the FIFO to GPIF, while -- acknowledging the DMA request for ACK_DOWNCOUNT_READ -- clocks. -- GPIF, FIFO, next state depend on rx_meta_en if (current.rx_meta_en = '0') then future.gpif_mode <= RX; future.rx_fifo_rd <= '1'; next_state := SAMPLE_READ; else future.gpif_mode <= RX_META; future.rxm_fifo_rd <= '1'; next_state := META_READ; end if; -- After the first iteration (which gives time for the FIFO -- to produce valid data), assert the proper ack. if (current.ack_downcount /= ACK_DOWNCOUNT_READ) then future.dma_acks <= acknowledge(current.rx_current_dma); end if; if (packet_enable = '1' and current.ack_downcount = 1) then future.meta_dword <= rx_meta_fifo_data; end if; -- Remain in this state until we're done acking if (current.ack_downcount = 0) then future.state <= next_state; else future.state <= current.state; end if; future.ack_downcount <= max(current.ack_downcount-1, 0); future.dma_downcount <= max(current.dma_downcount-1, -1); future.meta_downcount <= max(current.meta_downcount-1, -1); when META_READ => -- Service the metadata FIFO. future.gpif_mode <= RX_META; future.rxm_fifo_rd <= '1'; -- After the meta is done, move on to the sample FIFO. if (current.meta_downcount = 1) then future.state <= SAMPLE_READ; if (packet_enable = '1') then future.dma_downcount <= to_integer(unsigned(current.meta_dword(15 downto 0))) - 1 + to_integer(unsigned(std_logic_vector(current.meta_dword(0 downto 0)))); -- dma_downcount is the length of the payload + the header, however by the time -- meta_downcount is 1, the header is partly read end if; end if; if (packet_enable = '0') then future.dma_downcount <= max(current.dma_downcount-1, -1); end if; future.meta_downcount <= max(current.meta_downcount-1, -1); when SAMPLE_READ => -- Service the sample FIFO. future.gpif_mode <= RX; future.rx_fifo_rd <= '1'; future.finishing_rx <= '1'; -- Clear the underrun indicator. This is set in the event -- of a TX underrun condition, and is sent back to the host -- as part of RX metadata. future.underrun_clr <= '1'; if (packet_enable = '1' and current.dma_downcount = 0 and current.meta_dword(0) = '1') then future.gpif_mode <= IDLE; end if; -- Once the DMA countdown is done, conclude this transaction if (current.dma_downcount = 0) then future.state <= FINISHED; end if; future.dma_downcount <= max(current.dma_downcount-1, -1); -- ================================================================= -- Write Handling (moving data from FX3) -- ================================================================= when SETUP_WR => -- SETUP_WR acknowledges the DMA request, and waits for -- ACK_DOWNCOUNT_WRITE clocks before moving onto servicing -- the FIFOs. -- Acknowledge DMA request future.dma_acks <= acknowledge(current.tx_current_dma); -- Set GPIF mode (but not on first iteration) if (current.ack_downcount /= ACK_DOWNCOUNT_WRITE) then future.gpif_mode <= TX_IGNORE; end if; -- When we're done in this state, check tx_meta_en to decide -- where to go from here if (current.ack_downcount = 0) then if (current.tx_meta_en = '0') then future.state <= SAMPLE_WRITE; future.gpif_mode <= TX; else future.state <= META_WRITE; future.gpif_mode <= TX_META; end if; end if; future.ack_downcount <= max(current.ack_downcount-1, 0); when META_WRITE => -- Fills meta_buf from GPIF future.gpif_mode <= TX_IGNORE; future.meta_buf(127 downto 0) <= current.meta_buf(95 downto 0) & gpif_in(31 downto 0); future.dma_downcount <= max(current.dma_downcount-1, -1); future.meta_downcount <= max(current.meta_downcount-1, -1); if( current.meta_downcount = 4 and packet_enable = '1' ) then future.meta_dword <= gpif_in; end if; -- Check meta_buf validity and determine next action if (current.meta_downcount = 1) then if( packet_enable = '1' ) then future.dma_downcount <= to_integer(unsigned(current.meta_dword(15 downto 0))) - to_integer(unsigned(std_logic_vector(not(current.meta_dword(0 downto 0))))); end if; if (unsigned(current.meta_buf(63 downto 0)) = 0 or unsigned(current.meta_buf(31 downto 0) & current.meta_buf(63 downto 32)) > current.tx_ts_plus32) then future.meta_downcount <= META_DOWNCOUNT_RESET; future.state <= SAMPLE_WRITE; else future.state <= SAMPLE_WRITE_IGNORE; end if; end if; when SAMPLE_WRITE => -- Move data from GPIF to the TX sample FIFO future.tx_fifo_wr <= '1'; -- Set target FIFO depending on tx_meta_en if (current.tx_meta_en = '0') then future.gpif_mode <= TX; else future.gpif_mode <= TX_META; end if; -- If meta_downcount is nonzero, flush meta_buf into meta FIFO if (meta_enable = '1' and current.meta_downcount > 0 and (packet_enable = '0' or (packet_enable = '1' and current.dma_downcount < 6)) ) then future.meta_downcount <= max(current.meta_downcount-1, -1); future.txm_fifo_wr <= current.tx_meta_en; future.meta_buf(127 downto 0) <= current.meta_buf(95 downto 0) & x"00000000"; end if; -- Determine when we are finished with the DMA transaction if (current.dma_downcount = 0) then future.state <= FINISHED; end if; future.dma_downcount <= max(current.dma_downcount-1, -1); when SAMPLE_WRITE_IGNORE => -- This state is used to assert that an error situation -- occurred, and to clean out the sample buffer. The underrun -- will be passed to the host in META_READ. future.gpif_mode <= TX_IGNORE; future.underrun_set <= '1'; if (current.dma_downcount = 0) then future.state <= FINISHED; end if; future.dma_downcount <= max(current.dma_downcount-1, -1); -- ================================================================= -- End state -- ================================================================= when FINISHED => -- This provides a pause between adjacent transactions. future.gpif_mode <= IDLE; future.fini_downcount <= max(current.fini_downcount-1, 0); if (packet_enable = '1' and current.finishing_rx = '1' and current.fini_downcount = 8) then future.dma_acks <= acknowledge(current.rx_current_dma); end if; if (current.fini_downcount = 0) then future.state <= IDLE; end if; end case; end process fsm_comb_proc; -- Output process for FSM fsm_output_proc : process(current) is begin -- DMA acknowledgements dma0_rx_ack <= current.dma_acks.rx0; dma1_rx_ack <= current.dma_acks.rx1; dma2_tx_ack <= current.dma_acks.tx2; dma3_tx_ack <= current.dma_acks.tx3; -- FIFO control rx_fifo_read <= current.rx_fifo_rd; tx_fifo_write <= current.tx_fifo_wr; tx_meta_fifo_write <= current.txm_fifo_wr; rx_meta_fifo_read <= current.rxm_fifo_rd; end process fsm_output_proc; end architecture sample_shuffler; bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/vhdl/ramp.vhd000066400000000000000000000031401457144405000241500ustar00rootroot00000000000000-- Copyright (c) 2013 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; entity ramp is port ( clock : in std_logic ; reset : in std_logic ; ramp_out : buffer signed(11 downto 0) ) ; end entity ; architecture arch of ramp is begin count : process(clock, reset) begin if( reset = '1' ) then ramp_out <= (others =>'0') ; elsif( rising_edge(clock) ) then ramp_out <= ramp_out + 1 ; end if ; end process ; end architecture ; bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/vhdl/spi_reader.vhd000066400000000000000000000121341457144405000253310ustar00rootroot00000000000000-- Copyright (c) 2013 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; entity spi_reader is port ( clock : in std_logic ; sclk : out std_logic ; miso : in std_logic ; mosi : out std_logic ; enx : out std_logic ; reset_out : out std_logic ) ; end entity ; architecture arch of spi_reader is constant RESET_CYCLES : natural := 1000 ; constant ENX_WAIT_CYCLES : natural := 10 ; constant WRITE_BIT_COUNT : natural := 7 ; constant READ_BIT_COUNT : natural := 8 ; constant TOTAL_BIT_COUNT : natural := WRITE_BIT_COUNT + READ_BIT_COUNT ; type command_t is (COMMAND_READ, COMMAND_WRITE) ; type fsm_t is (RESET, WAITING, FALLING_SCLK, RISING_SCLK) ; signal fsm : fsm_t ; constant command : command_t := COMMAND_READ ; signal spi_address : unsigned(6 downto 0) := (others =>'0') ; begin reader : process(all) variable count : natural range 0 to 1000 := 0 ; variable address : unsigned(6 downto 0) := (others =>'0') ; variable wdata : unsigned(7 downto 0) ; variable rdata : unsigned(7 downto 0) ; begin if( rising_edge(clock) ) then enx <= '0' ; reset_out <= '1' ; case fsm is when RESET => reset_out <= '0' ; spi_address <= (others =>'0') ; if( count = 0 ) then fsm <= WAITING ; count := ENX_WAIT_CYCLES ; else count := count - 1 ; end if ; when WAITING => sclk <= '1' ; enx <= '1' ; if( spi_address = 127 ) then spi_address <= (others =>'0') ; fsm <= RESET ; count := RESET_CYCLES ; end if ; if( count = 0 ) then count := TOTAL_BIT_COUNT ; fsm <= FALLING_SCLK ; address := spi_address ; spi_address <= spi_address + 1; else count := count - 1 ; end if ; when FALLING_SCLK => sclk <= '0' ; fsm <= RISING_SCLK ; if( command = COMMAND_READ ) then if( count = TOTAL_BIT_COUNT ) then mosi <= '0' ; elsif( count < TOTAL_BIT_COUNT - WRITE_BIT_COUNT ) then mosi <= '0' ; else mosi <= address(address'high) ; address := shift_left(address,1) ; end if ; else if( count = TOTAL_BIT_COUNT ) then mosi <= '1' ; elsif( count < TOTAL_BIT_COUNT - WRITE_BIT_COUNT ) then mosi <= wdata(wdata'high) ; wdata := shift_left(wdata,1) ; else mosi <= address(address'high) ; address := shift_left(address,1) ; end if ; end if ; when RISING_SCLK => sclk <= '1' ; if( command = COMMAND_READ ) then if( count < TOTAL_BIT_COUNT - WRITE_BIT_COUNT ) then rdata := rdata(rdata'high-1 downto 0) & miso ; end if ; end if ; if( count = 0 ) then fsm <= WAITING ; count := ENX_WAIT_CYCLES ; else count := count - 1 ; fsm <= FALLING_SCLK ; end if ; end case ; end if ; end process ; end architecture ; bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/vhdl/tb/000077500000000000000000000000001457144405000231155ustar00rootroot00000000000000bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/vhdl/tb/fx3_gpif_tb.vhd000066400000000000000000000470361457144405000260240ustar00rootroot00000000000000-- Copyright (c) 2017 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; library rtl_work; library altera_lnsim; use altera_lnsim.altera_pll; library nuand; use nuand.bladerf_p.all; entity fx3_gpif_tb is end entity; architecture arch of fx3_gpif_tb is -- bladerf-hosted uses ad9361.clock (125 MHz) for rx_clock and tx_clock constant SYSCLK_HALF_PERIOD : time := 1 sec * (1.0/125.0e6/2.0); -- For reasons unknown, simulation of this system in ModelSim requires that -- wrreq and data be asserted shortly before the rising clock edge. Sigh... constant FIFO_WORKAROUND : time := 1 ps; type fx3_control_t is record usb_speed : std_logic; tx_enable : std_logic; rx_enable : std_logic; meta_enable : std_logic; end record; type fx3_gpif_t is record gpif_in : std_logic_vector(31 downto 0); gpif_out : std_logic_vector(31 downto 0); gpif_oe : std_logic; ctl_in : std_logic_vector(12 downto 0); ctl_out : std_logic_vector(12 downto 0); ctl_oe : std_logic_vector(12 downto 0); end record; signal sys_rst : std_logic := '1'; signal done : boolean := false; signal fx3_pclk : std_logic := '1'; signal fx3_pclk_pll : std_logic := '1'; signal sys_clk : std_logic := '1'; signal pll_reset : std_logic := '0'; signal pll_locked : std_logic := '0'; signal fx3_control : fx3_control_t; signal fx3_gpif : fx3_gpif_t; signal fx3_gpif_i : std_logic_vector(31 downto 0); signal fx3_ctl_i : std_logic_vector(12 downto 0); signal loopback_i : signed(15 downto 0) := (others =>'0'); signal loopback_q : signed(15 downto 0) := (others =>'0'); signal loopback_valid : std_logic := '0'; signal loopback_enabled : std_logic := '0'; signal rx_sample_fifo : rx_fifo_t := RX_FIFO_T_DEFAULT; signal tx_sample_fifo : tx_fifo_t := TX_FIFO_T_DEFAULT; signal loopback_fifo : loopback_fifo_t := LOOPBACK_FIFO_T_DEFAULT; signal rx_meta_fifo : meta_fifo_rx_t := META_FIFO_RX_T_DEFAULT; signal tx_meta_fifo : meta_fifo_tx_t := META_FIFO_TX_T_DEFAULT; signal rx_mux_i : signed(15 downto 0); signal rx_mux_q : signed(15 downto 0); signal rx_mux_valid : std_logic; signal tx_timestamp : unsigned(63 downto 0); signal rx_timestamp : unsigned(63 downto 0); begin -- ======================================================================== -- Brief summary of data flow -- ======================================================================== -- -- Simulated samples flow from fx3_model's TX side to its RX side. The -- validity of the data is checked there. -- -- entity U_fx3_model FX3 model, TX process -- signal fx3_gpif_i fx3_gpif.gpif_oe is '0' -- process register_gpif -- signal fx3_gpif.gpif_in Demuxed GPIF interface (FX3 -> FPGA) -- entity U_fx3_gpif GPIF implementation, write side -- signal tx_sample_fifo.w* TX fifo, write side -- entity U_tx_sample_fifo -- signal tx_sample_fifo.r* TX fifo, read side -- process tx_mux -- signal loopback_fifo.w* Loopback fifo, write side -- entity U_rx_loopback_fifo -- signal loopback_fifo.r* Loopback fifo, read side -- process loopback_fifo_control -- signal loopback_{i,q,valid} -- process rx_mux -- signal rx_mux_{i,q,valid} -- entity U_fifo_writer -- signal rx_sample_fifo.w* RX fifo, write side -- entity U_rx_sample_fifo -- signal rx_sample_fifo.r* RX fifo, read side -- entity U_fx3_gpif GPIF implementation, read side -- signal fx3_gpif.gpif_out Demuxed GPIF interface (FPGA -> FX3) -- process register_gpif -- signal fx3_gpif_i fx3_gpif.gpif_oe is '1' -- entity U_fx3_model FX3 model, RX process -- ======================================================================== -- Instantiations -- ======================================================================== -- Unit under test -- Clock domain: fx3_pclk_pll U_fx3_gpif : entity nuand.fx3_gpif port map ( pclk => fx3_pclk_pll, reset => sys_rst, usb_speed => fx3_control.usb_speed, gpif_in => fx3_gpif.gpif_in, gpif_out => fx3_gpif.gpif_out, gpif_oe => fx3_gpif.gpif_oe, ctl_in => fx3_gpif.ctl_in, ctl_out => fx3_gpif.ctl_out, ctl_oe => fx3_gpif.ctl_oe, tx_enable => fx3_control.tx_enable, rx_enable => fx3_control.rx_enable, meta_enable => fx3_control.meta_enable, tx_fifo_write => tx_sample_fifo.wreq, tx_fifo_full => tx_sample_fifo.wfull, tx_fifo_empty => tx_sample_fifo.wempty, tx_fifo_usedw => tx_sample_fifo.wused, tx_fifo_data => tx_sample_fifo.wdata, tx_timestamp => tx_timestamp, tx_meta_fifo_write => tx_meta_fifo.wreq, tx_meta_fifo_full => tx_meta_fifo.wfull, tx_meta_fifo_empty => tx_meta_fifo.wempty, tx_meta_fifo_usedw => tx_meta_fifo.wused, tx_meta_fifo_data => tx_meta_fifo.wdata, rx_fifo_read => rx_sample_fifo.rreq, rx_fifo_full => rx_sample_fifo.rfull, rx_fifo_empty => rx_sample_fifo.rempty, rx_fifo_usedw => rx_sample_fifo.rused, rx_fifo_data => rx_sample_fifo.rdata, rx_meta_fifo_read => rx_meta_fifo.rreq, rx_meta_fifo_full => rx_meta_fifo.rfull, rx_meta_fifo_empty => rx_meta_fifo.rempty, rx_meta_fifo_usedr => rx_meta_fifo.rused, rx_meta_fifo_data => rx_meta_fifo.rdata ); -- Discrete control signals for fx3_gpif fx3_control.usb_speed <= '0'; fx3_control.meta_enable <= '0'; tx_timestamp <= (others => '0'); rx_timestamp <= (others => '0'); -- Model of FX3's GPIF interface -- Clock domain: fx3_pclk (source) U_fx3_model : entity nuand.fx3_model(dma) port map ( fx3_pclk => fx3_pclk, fx3_gpif => fx3_gpif_i, fx3_ctl => fx3_ctl_i, fx3_uart_rxd => '0', fx3_uart_txd => open, fx3_uart_cts => open, fx3_rx_en => '1', fx3_rx_meta_en => '0', fx3_tx_en => '1', fx3_tx_meta_en => '0', done => done ); -- Generate phase-shifted PLL clock U_fx3_pll : entity rtl_work.fx3_pll port map ( inclk0 => fx3_pclk, areset => pll_reset, c0 => fx3_pclk_pll, locked => pll_locked ); -- Reset handler sys_rst <= '0' after 100 ns; -- Generate system clock sys_clk <= not sys_clk after SYSCLK_HALF_PERIOD when not done else '0'; -- TX fifos -- Data from fx3_model to fx3_gpif -- Clock domain: fx3_pclk_pll in, sys_clk out tx_sample_fifo.aclr <= sys_rst; tx_sample_fifo.wclock <= fx3_pclk_pll after FIFO_WORKAROUND; -- simulation workaround tx_sample_fifo.rclock <= sys_clk; U_tx_sample_fifo : entity nuand.tx_fifo port map ( aclr => tx_sample_fifo.aclr, wrclk => tx_sample_fifo.wclock, wrreq => tx_sample_fifo.wreq, data => tx_sample_fifo.wdata, wrempty => tx_sample_fifo.wempty, wrfull => tx_sample_fifo.wfull, wrusedw => tx_sample_fifo.wused, rdclk => tx_sample_fifo.rclock, rdreq => tx_sample_fifo.rreq, q => tx_sample_fifo.rdata, rdempty => tx_sample_fifo.rempty, rdfull => tx_sample_fifo.rfull, rdusedw => tx_sample_fifo.rused ); tx_meta_fifo.aclr <= sys_rst; tx_meta_fifo.wclock <= fx3_pclk_pll after FIFO_WORKAROUND; -- simulation workaround tx_meta_fifo.rclock <= sys_clk; U_tx_meta_fifo : entity nuand.tx_meta_fifo port map ( aclr => tx_meta_fifo.aclr, wrclk => tx_meta_fifo.wclock, wrreq => tx_meta_fifo.wreq, data => tx_meta_fifo.wdata, wrempty => tx_meta_fifo.wempty, wrfull => tx_meta_fifo.wfull, wrusedw => tx_meta_fifo.wused, rdclk => tx_meta_fifo.rclock, rdreq => tx_meta_fifo.rreq, q => tx_meta_fifo.rdata, rdempty => tx_meta_fifo.rempty, rdfull => tx_meta_fifo.rfull, rdusedw => tx_meta_fifo.rused ); -- Loopback FIFO -- Data from TX (fx3_model->fx3_gpif) to RX (fx3_gpif->fx3_model) -- Clock domain: sys_clk loopback_fifo.aclr <= sys_rst; loopback_fifo.wclock <= sys_clk after FIFO_WORKAROUND; -- simulation workaround loopback_fifo.rclock <= sys_clk; U_rx_loopback_fifo : entity nuand.rx_fifo port map ( aclr => loopback_fifo.aclr, wrclk => loopback_fifo.wclock, wrreq => loopback_fifo.wreq, data => loopback_fifo.wdata, wrempty => open, wrfull => open, wrusedw => open, rdclk => loopback_fifo.rclock, rdreq => loopback_fifo.rreq, q => loopback_fifo.rdata, rdempty => loopback_fifo.rempty, rdfull => loopback_fifo.rfull, rdusedw => loopback_fifo.rused ); -- Sample bridge -- Clock domain: sys_clk U_fifo_writer : entity nuand.fifo_writer port map ( clock => sys_clk, reset => sys_rst, enable => fx3_control.rx_enable, usb_speed => fx3_control.usb_speed, meta_en => fx3_control.meta_enable, timestamp => rx_timestamp, fifo_full => rx_sample_fifo.wfull, fifo_usedw => rx_sample_fifo.wused, fifo_data => rx_sample_fifo.wdata, fifo_write => rx_sample_fifo.wreq, meta_fifo_full => rx_meta_fifo.wfull, meta_fifo_usedw => rx_meta_fifo.wused, meta_fifo_data => rx_meta_fifo.wdata, meta_fifo_write => rx_meta_fifo.wreq, in_i => resize(rx_mux_i, 16), in_q => resize(rx_mux_q, 16), in_valid => rx_mux_valid, overflow_led => open, overflow_count => open, overflow_duration => x"ffff" ); -- RX FIFOs -- Data from fx3_gpif to fx3_model -- Clock domain: sys_clk in, fx3_pclk_pll out rx_sample_fifo.aclr <= sys_rst; rx_sample_fifo.wclock <= sys_clk after FIFO_WORKAROUND; -- simulation workaround rx_sample_fifo.rclock <= fx3_pclk_pll; U_rx_sample_fifo : entity nuand.rx_fifo port map ( aclr => rx_sample_fifo.aclr, wrclk => rx_sample_fifo.wclock, wrreq => rx_sample_fifo.wreq, data => rx_sample_fifo.wdata, wrempty => rx_sample_fifo.wempty, wrfull => rx_sample_fifo.wfull, wrusedw => rx_sample_fifo.wused, rdclk => rx_sample_fifo.rclock, rdreq => rx_sample_fifo.rreq, q => rx_sample_fifo.rdata, rdempty => rx_sample_fifo.rempty, rdfull => rx_sample_fifo.rfull, rdusedw => rx_sample_fifo.rused ); rx_meta_fifo.aclr <= sys_rst; rx_meta_fifo.wclock <= sys_clk after FIFO_WORKAROUND; -- simulation workaround rx_meta_fifo.rclock <= fx3_pclk_pll; U_rx_meta_fifo : entity nuand.rx_meta_fifo port map ( aclr => rx_meta_fifo.aclr, wrclk => rx_meta_fifo.wclock, wrreq => rx_meta_fifo.wreq, data => rx_meta_fifo.wdata, wrempty => rx_meta_fifo.wempty, wrfull => rx_meta_fifo.wfull, wrusedw => rx_meta_fifo.wused, rdclk => fx3_pclk_pll, rdreq => rx_meta_fifo.rreq, q => rx_meta_fifo.rdata, rdempty => rx_meta_fifo.rempty, rdfull => rx_meta_fifo.rfull, rdusedw => rx_meta_fifo.rused ); -- ======================================================================== -- Processes -- ======================================================================== -- FX3 GPIF bidirectional signal control -- Adapted from same process in bladerf-hosted.vhd register_gpif : process(sys_rst, fx3_pclk_pll) begin if( sys_rst = '1' ) then fx3_gpif_i <= (others => 'Z'); fx3_gpif.gpif_in <= (others => 'Z'); elsif( rising_edge(fx3_pclk_pll) ) then fx3_gpif.gpif_in <= fx3_gpif_i; if( fx3_gpif.gpif_oe = '1' ) then fx3_gpif_i <= fx3_gpif.gpif_out; else fx3_gpif_i <= (others =>'Z'); end if; end if; end process; -- FX3 CTL bidirectional signals -- Adapted from same generator in bladerf-hosted.vhd generate_ctl : for i in fx3_ctl_i'range generate fx3_ctl_i(i) <= fx3_gpif.ctl_out(i) when fx3_gpif.ctl_oe(i) = '1' else 'Z'; end generate; fx3_gpif.ctl_in <= fx3_ctl_i; -- Controller for loopback FIFO -- Stripped-down version of same process from rx.vhd loopback_fifo_control : process( sys_rst, loopback_fifo.rclock ) begin if( sys_rst = '1' ) then loopback_enabled <= '0'; loopback_fifo.rreq <= '0'; loopback_i <= (others => '0'); loopback_q <= (others => '0'); loopback_valid <= '0'; elsif( rising_edge(loopback_fifo.rclock) ) then loopback_enabled <= '0'; loopback_fifo.rreq <= '0'; loopback_i <= loopback_i; loopback_q <= loopback_q; loopback_valid <= '0'; -- Is loopback enabled? loopback_enabled <= fx3_control.rx_enable; -- Do the loopback loopback_i <= resize(signed(loopback_fifo.rdata(15 downto 0)), loopback_i'length); loopback_q <= resize(signed(loopback_fifo.rdata(31 downto 16)), loopback_q'length); loopback_valid <= loopback_fifo.rreq and not loopback_fifo.rempty; -- Read from the FIFO if req'd loopback_fifo.rreq <= loopback_enabled and (not loopback_fifo.rempty); end if; end process; -- RX multiplexer -- Stripped-down version of same process from rx.vhd rx_mux : process(sys_rst, sys_clk) begin if( sys_rst = '1' ) then rx_mux_i <= (others =>'0'); rx_mux_q <= (others =>'0'); rx_mux_valid <= '0'; elsif( rising_edge(sys_clk) ) then rx_mux_i <= loopback_i; rx_mux_q <= loopback_q; rx_mux_valid <= loopback_valid; end if; end process; -- TX multiplexer -- Stripped-down version of mimo_channel_sel_mux from tx.vhd tx_mux : process( sys_clk ) begin if( rising_edge(sys_clk) ) then tx_sample_fifo.rreq <= not tx_sample_fifo.rempty; loopback_fifo.wdata <= tx_sample_fifo.rdata; loopback_fifo.wreq <= tx_sample_fifo.rreq and not tx_sample_fifo.rempty; end if; end process; -- ======================================================================== -- Validation -- ======================================================================== -- Check for metavalues -- We should never see metavalues written to the FIFOs check_fifo_write : process (fx3_pclk_pll) is begin if (rising_edge(fx3_pclk_pll)) then if (tx_sample_fifo.wreq = '1') then for i in tx_sample_fifo.wdata'range loop assert tx_sample_fifo.wdata(i) = '0' or tx_sample_fifo.wdata(i) = '1' severity failure; end loop; end if; end if; end process check_fifo_write; check_fifo_read : process (fx3_pclk_pll) is begin if (rising_edge(fx3_pclk_pll)) then if (rx_sample_fifo.rreq = '1') then for i in rx_sample_fifo.rdata'range loop assert rx_sample_fifo.rdata(i) = '0' or rx_sample_fifo.rdata(i) = '1' severity failure; end loop; end if; end if; end process check_fifo_read; -- Check for fullness on FIFOs assert (rx_sample_fifo.wfull = '0') report "rx_sample_fifo full (write)" severity warning; assert (tx_sample_fifo.wfull = '0') report "tx_sample_fifo full (write)" severity warning; assert (loopback_fifo.wfull = '0') report "loopback_fifo full (write)" severity warning; end architecture; bladeRF-2024.05/hdl/fpga/platforms/common/bladerf/vhdl/tb/spi_reader_tb.vhd000066400000000000000000000034011457144405000264200ustar00rootroot00000000000000-- Copyright (c) 2013 Nuand LLC -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and associated documentation files (the "Software"), to deal -- in the Software without restriction, including without limitation the rights -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -- copies of the Software, and to permit persons to whom the Software is -- furnished to do so, subject to the following conditions: -- -- The above copyright notice and this permission notice shall be included in -- all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -- THE SOFTWARE. library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; entity spi_reader_tb is end entity ; architecture arch of spi_reader_tb is signal clock : std_logic := '1' ; signal sclk : std_logic ; signal miso : std_logic := '0' ; signal mosi : std_logic ; signal enx : std_logic ; signal reset_out : std_logic ; begin clock <= not clock after 1 ns ; U_spi_reader : entity work.spi_reader port map ( clock => clock, sclk => sclk, miso => miso, mosi => mosi, enx => enx, reset_out => reset_out ) ; end architecture ; bladeRF-2024.05/hdl/quartus/000077500000000000000000000000001457144405000154445ustar00rootroot00000000000000bladeRF-2024.05/hdl/quartus/build.tcl000066400000000000000000000131411457144405000172470ustar00rootroot00000000000000load_package flow package require cmdline # Define the command argument structure as specified here: # https://www.altera.com/support/support-resources/design-examples/design-software/tcl/open_project.html set options { \ { "projname.arg" "" "Name of Quartus project" } \ { "rev.arg" "" "Name of revision within the project" } \ { "flow.arg" "gen" "Quartus flow: gen, synth, full" } \ { "stp.arg" "" "SignalTap II file to use" } \ { "force.arg" "" "Force enable TalkBack to use SignalTapII" } \ { "seed.arg" "" "Specify fitter seed" } \ } # Parse the command arguments, store them into 'opts' array set opts [::cmdline::getoptions quartus(args) $options] set BASE_REVISION "base" proc print_revisions { } { global opts global BASE_REVISION project_open -force $opts(projname) -revision ${BASE_REVISION} puts stderr "Revisions" puts stderr "---------" foreach $rev [get_project_revisions] { if { $rev == "${BASE_REVISION}" } { continue } puts stderr " ${rev}" } project_close } # Check to make sure the project exists if { ![project_exists $opts(projname)] } { puts stderr "ERROR: $opts(projname) project does not exist. Please run:" puts stderr " $ quartus_sh -t /path/to/bladerf.tcl -opt1 val1 -opt2 val2 ..." exit 1 } # Check to make sure the revison was specified on the commandline. # If it wasn't, print out the revisions available. if { $opts(rev) == "" } { puts stderr "ERROR: Revision required to build\n" print_revisions exit 1 } # Check to make sure the revision exists if { ![revision_exists -project $opts(projname) $opts(rev)] } { puts stderr "ERROR: No revision named $opts(rev) in $opts(projname) project\n" print_revisions exit 1 } # Check the flow if { $opts(flow) != "gen" && $opts(flow) != "synth" && $opts(flow) != "full" } { puts stderr "ERROR: Invalid Quartus flow. Valid option are:" puts stderr " gen - generate project files only" puts stderr " synth - generate project files and run synthesis only" puts stderr " full - generate project, synth, fit, timing, assemble" exit 1 } # Open the project with the specific revision project_open -revision $opts(rev) $opts(projname) # Add signaltap file set forced_talkback 0 set enable_stp 0 if { $opts(stp) != "" } { # Check if we need to force if { ([get_user_option -name TALKBACK_ENABLED] == off || [get_user_option -name TALKBACK_ENABLED] == "") && ($opts(force) == "1") } { puts "Enabling TalkBack to include SignalTap file" set_user_option -name TALKBACK_ENABLED on set forced_talkback 1 } # SignalTap requires either TalkBack to be enabled or a non-Web Edition of Quartus (e.g. Standard, Pro) if { ([get_user_option -name TALKBACK_ENABLED] == on) || (![string match "*Web Edition*" $quartus(version)]) } { puts "Adding SignalTap file: [file normalize $opts(stp)]" set_global_assignment -name ENABLE_SIGNALTAP on set_global_assignment -name USE_SIGNALTAP_FILE [file normalize "$opts(stp)"] set_global_assignment -name SIGNALTAP_FILE [file normalize "$opts(stp)"] set enable_stp 1 } else { puts stderr "\nERROR: Cannot add $opts(stp) to project without enabling TalkBack." puts stderr " Use -force to enable and add SignalTap to project." project_close exit 1 } } else { set_global_assignment -name ENABLE_SIGNALTAP off } # Configure seed if { $opts(seed) != "" } { set_global_assignment -name SEED "$opts(seed)" } # Save all the options export_assignments project_close set failed 0 # The quartus_stp executable creates/edits a Quartus Setting File (.qsf) # based on the SignalTap II File specified if enabled. It must be run # successfully before running Analysis & Synthesis. if { $enable_stp == 1 } { if { $failed == 0 && [catch {qexec "quartus_stp --stp_file [file normalize $opts(stp)] --enable $opts(projname) --rev $opts(rev)"} result] } { puts "Result: $result" puts stderr "ERROR: Adding SignalTap settings to QSF failed." set failed 1 } } # Open the project with the specific revision project_open -revision $opts(rev) $opts(projname) if { ($opts(flow) == "synth") || ($opts(flow) == "full") } { # Run Analysis and Synthesis if { $failed == 0 && [catch {execute_module -tool map} result] } { puts "Result: $result" puts stderr "ERROR: Analysis & Synthesis Failed" set failed 1 } } if { $opts(flow) == "full" } { # Run Fitter if { $failed == 0 && [catch {execute_module -tool fit} result ] } { puts "Result: $result" puts stderr "ERROR: Fitter failed" set failed 1 } # Run Static Timing Analysis if { $failed == 0 && [catch {execute_module -tool sta} result] } { puts "Result: $result" puts stderr "ERROR: Timing Analysis Failed!" set failed 1 } # Run Assembler if { $failed == 0 && [catch {execute_module -tool asm} result] } { puts "Result: $result" puts stderr "ERROR: Assembler Failed!" set failed 1 } # Run EDA Output #if { $failed == 0 && [catch {execute_module -tool eda} result] } { # puts "Result: $result" # puts stderr "ERROR: EDA failed!" # set failed 1 #} elseif { $failed == 0 } { # puts "INFO: EDA OK!" #} } # If we were forced to turn on TALKBACK .. turn it back off if { $forced_talkback == 1 } { puts "Disabling TalkBack back to original state" set_user_option -name TALKBACK_ENABLED off } project_close bladeRF-2024.05/hdl/quartus/build_bladerf.sh000077500000000000000000000323211457144405000205620ustar00rootroot00000000000000#!/usr/bin/env bash # # Build a bladeRF fpga image ################################################################################ function print_boards() { echo "Supported boards:" for i in ../fpga/platforms/*/build/platform.conf ; do source $i echo " [*] $BOARD_NAME"; echo " Supported revisions:" for rev in ${PLATFORM_REVISIONS[@]} ; do echo " ${rev}" done echo " Supported sizes (kLE):" for size in ${PLATFORM_FPGA_SIZES[@]} ; do echo " ${size}" done echo "" done } function usage() { echo "" echo "bladeRF FPGA build script" echo "" echo "Usage: `basename $0` -b -r -s " echo "" echo "Options:" echo " -c Clear working directory" echo " -b Target board name" echo " -r Quartus project revision" echo " -s FPGA size" echo " -a SignalTap STP file" echo " -f Force SignalTap STP insertion by temporarily enabling" echo " the TalkBack feature of Quartus (required for Web Edition)." echo " The previous setting will be restored afterward." echo " -n Select Nios II Gen 2 core implementation." echo " Tiny (default) Nios II/e; Compatible with Quartus Web Edition" echo " Fast Nios II/f; Requires Quartus Standard or Pro Edition" echo " -l Quartus build steps to complete. Valid options:" echo " gen Only generate the project files" echo " synth Synthesize the design" echo " full (default) Fit the design and create programming files" echo " -S Fitter seed setting (default: 1)" echo " -h Show this text" echo "" print_boards } pushd () { command pushd "$@" >/dev/null } popd () { command popd "$@" >/dev/null } # Current Quartus version declare -A QUARTUS_VER # associative array QUARTUS_VER[major]=0 QUARTUS_VER[minor]=0 # Parameters: # $1 Expected major Quartus version # $2 Expected minor Quartus version # Returns: # 0 on compatible version # 1 on incompatible version or unable to detemine version check_quartus_version() { local readonly exp_major_ver="$1" local readonly exp_minor_ver="$2" local readonly exp_ver="${exp_major_ver}.${exp_minor_ver}" local readonly VERSION_FILE="${QUARTUS_ROOTDIR}/version.txt" if [ ! -f "${VERSION_FILE}" ]; then echo "Could not find Quartus version file." >&2 return 1 fi local readonly VERSION=$( \ grep -m 1 Version "${QUARTUS_ROOTDIR}/version.txt" | \ sed -e 's/Version=//' \ ) echo "Detected Quartus II ${VERSION}" QUARTUS_VER[major]=$( \ echo "${VERSION}" | \ sed -e 's/\([[:digit:]]\+\).*/\1/g' \ ) QUARTUS_VER[minor]=$( \ echo "${VERSION}" | \ sed -e 's/^16\.//g' | \ sed -e 's/\([[:digit:]]\+\).*/\1/g' \ ) if [ -z "${QUARTUS_VER[major]}" ] || [ -z "${QUARTUS_VER[minor]}" ]; then echo "Failed to retrieve Quartus version number." >&2 return 1 fi if [ $(expr ${QUARTUS_VER[major]}\.${QUARTUS_VER[minor]} \< ${exp_ver}) -eq 1 ]; then echo "The bladeRF FPGA design requires Quartus II version ${exp_ver}" >&2 echo "The installed version is: $VERSION" >&2 return 1 fi return 0 } if [ $# -eq 0 ]; then usage exit 0 fi # Set default options nios_rev="Tiny" flow="full" seed="1" while getopts ":cb:r:s:a:fn:l:S:h" opt; do case $opt in c) clear_work_dir=1 ;; b) board=$OPTARG ;; r) rev=$OPTARG ;; s) size=$OPTARG ;; a) echo "STP: $OPTARG" stp=$(readlink -f $OPTARG) ;; f) echo "Forcing STP insertion" force="-force" ;; n) nios_rev=$OPTARG ;; l) flow=$OPTARG ;; S) seed=$OPTARG ;; h) usage exit 0 ;; \?) echo -e "\nUnrecognized option: -$OPTARG\n" >&2 exit 1 ;; :) echo -e "\nArgument required for argument -${OPTARG}.\n" >&2 exit 1 ;; esac done if [ "$board" == "" ]; then echo -e "\nError: board (-b) is required\n" >&2 print_boards exit 1 fi if [ "$size" == "" ]; then echo -e "\nError: FPGA size (-s) is required\n" >&2 print_boards exit 1 fi if [ "$rev" == "" ]; then echo -e "\nError: Quartus project revision (-r) is required\n" >&2 print_boards exit 1 fi for plat in ../fpga/platforms/*/build/platform.conf ; do source $plat if [ $board == "$BOARD_NAME" ]; then platform=$(basename $(dirname $(dirname $plat))) break fi done if [ "$platform" == "" ]; then echo -e "\nError: Invalid board (\"$board\")\n" >&2 exit 1 fi for plat_size in ${PLATFORM_FPGA_SIZES[@]} ; do if [ "$size" == "$plat_size" ]; then size_valid="yes" break fi done if [ "$size_valid" == "" ]; then echo -e "\nError: Invalid FPGA size (\"$size\")\n" >&2 print_boards exit 1 fi for plat_rev in ${PLATFORM_REVISIONS[@]} ; do if [ "$rev" == "$plat_rev" ]; then rev_valid="yes" break fi done if [ "$rev_valid" == "" ]; then echo -e "\nError: Invalid Quartus project revision (\"$rev\")\n" >&2 print_boards exit 1 fi if [ "$stp" != "" ] && [ ! -f "$stp" ]; then echo -e "\nCould not find STP file: $stp\n" >&2 exit 1 fi nios_rev=$(echo "$nios_rev" | tr "[:upper:]" "[:lower:]") if [ "$nios_rev" != "tiny" ] && [ "$nios_rev" != "fast" ]; then echo -e "\nInvalid Nios II revision: $nios_rev\n" >&2 exit 1 fi if [[ ${flow} != "gen" ]] && [[ ${flow} != "synth" ]] && [[ ${flow} != "full" ]]; then echo -e "\nERROR: Invalid flow option: ${flow}.\n" >&2 exit 1 fi DEVICE_FAMILY=$(get_device_family $size) DEVICE=$(get_device $size) # Check for quartus_sh quartus_check="`which quartus_sh`" if [ $? -ne 0 ] || [ ! -f "$quartus_check" ]; then echo -e "\nError: quartus_sh (Quartus 'bin' directory) does not appear to be in your PATH\n" >&2 exit 1 fi # Check for Qsys qsys_check="`which qsys-generate`" if [ $? -ne 0 ] || [ ! -f "$qsys_check" ]; then echo -e "\nError: Qsys (SOPC builder 'bin' directory) does not appear to be in your PATH.\n" >&2 exit 1 fi # Check for Nios II SDK nios2_check="`which nios2-bsp-create-settings`" if [ $? -ne 0 ] || [ ! -f "$nios2_check" ]; then echo -e "\nError: Nios II SDK (nios2eds 'bin' directory) does not appear to be in your PATH.\n" >&2 exit 1 fi # Complain early about an unsupported version. Otherwise, the user # may get some unintuitive error messages. check_quartus_version ${PLATFORM_QUARTUS_VER[major]} ${PLATFORM_QUARTUS_VER[minor]} if [ $? -ne 0 ]; then exit 1 fi if [ $(expr ${QUARTUS_VER[major]} \>= 19 ) -eq 1 ]; then export PERL5LIB=$(echo ${QUARTUS_ROOTDIR}/linux64/perl/lib/*.*/) fi nios_system=../fpga/ip/altera/nios_system # 9a484b436: Windows-specific workaround for Quartus bug if [ "x$(uname)" != "xLinux" ]; then QUARTUS_BINDIR=$QUARTUS_ROOTDIR/bin export QUARTUS_BINDIR echo "## Non-Linux OS Detected (Windows?)" echo "## Forcing QUARTUS_BINDIR to ${QUARTUS_BINDIR}" fi # Error out at the first sign of trouble set -e work_dir="work/${platform}-${size}-${rev}" if [ "$clear_work_dir" == "1" ]; then echo -e "\nClearing ${work_dir} directory\n" >&2 rm -rf "${work_dir}" fi mkdir -p ${work_dir} pushd ${work_dir} # These paths are relative to $work_dir common_dir=../../../fpga/platforms/common/bladerf build_dir=../../../fpga/platforms/${platform}/build cp -au ${build_dir}/ip.ipx . if [ -f ${build_dir}/suppressed_messages.srf ]; then cp -au ${build_dir}/suppressed_messages.srf ./${rev}.srf fi echo "" echo "##########################################################################" echo " Generating Nios II Qsys for ${board} ..." echo "##########################################################################" echo "" if [ -f nios_system.qsys ]; then echo "Skipping building platform Qsys" else echo "Building platform Qsys" cmd="set nios_impl ${nios_rev}" cmd="${cmd}; set device_family {${DEVICE_FAMILY}}" cmd="${cmd}; set device ${DEVICE}" cmd="${cmd}; set nios_impl ${nios_rev}" cmd="${cmd}; set ram_size $(get_qsys_ram $size)" cmd="${cmd}; set platform_revision ${rev}" qsys-script \ --script=${build_dir}/nios_system.tcl \ --cmd="${cmd}" fi if [ -f ${build_dir}/platform.sh ]; then source ${build_dir}/platform.sh fi if [ -f nios_system.sopcinfo ]; then echo "Skipping qsys-generate, nios_system.sopcinfo already exists" else qsys-generate --synthesis=Verilog nios_system.qsys fi echo "" echo "##########################################################################" echo " Building BSP and ${board} application..." echo "##########################################################################" echo "" mkdir -p bladeRF_nios_bsp if [ -f settings.bsp ]; then echo "Skipping creating Nios BSP, settings.bsp already exists" else nios2-bsp-create-settings \ --settings settings.bsp \ --type hal \ --bsp-dir bladeRF_nios_bsp \ --cpu-name nios2 \ --script $(readlink -f $QUARTUS_ROOTDIR/..)/nios2eds/sdk2/bin/bsp-set-defaults.tcl \ --sopc nios_system.sopcinfo \ --set hal.max_file_descriptors 4 \ --set hal.enable_instruction_related_exceptions_api false \ --set hal.make.bsp_cflags_optimization "-Os" \ --set hal.enable_exit 0 \ --set hal.enable_small_c_library 1 \ --set hal.enable_clean_exit 0 \ --set hal.enable_c_plus_plus 0 \ --set hal.enable_reduced_device_drivers 1 \ --set hal.enable_lightweight_device_driver_api 1 fi pushd bladeRF_nios_bsp # Fix warnings about a memory width mismatch between the Nios and the memory initialization file sed -i.bak 's/\($(ELF2HEX).*--width=$(mem_hex_width)\)/\1 --record=$(shell expr ${mem_hex_width} \/ 8)/g' mem_init.mk make popd pushd ${build_dir}/../software/bladeRF_nios/ # Encountered issues on Ubuntu 13.04 with the SDK's scripts not resolving # paths properly. In the end, some items wind up being defined as .jar's that # should be in our PATH at this point, so we set these up here... #ELF2HEX=elf2hex.jar ELF2DAT=.jar make mem_init_generate make WORKDIR=${work_dir} \ mem_init_clean \ mem_init_generate popd if [ "$rev" == "foxhunt" ]; then pushd ${build_dir}/../software/foxhunt/ make WORKDIR=${work_dir} \ mem_init_clean \ mem_init_generate popd fi echo "" echo "##########################################################################" echo " Building ${board} FPGA Image: $rev, $size kLE" echo "##########################################################################" echo "" # Generate Quartus project quartus_sh --64bit \ -t "${build_dir}/bladerf.tcl" \ -projname "${PROJECT_NAME}" \ -part "${DEVICE}" \ -platdir "${build_dir}/.." # Run Quartus flow quartus_sh --64bit \ -t "../../build.tcl" \ -projname "${PROJECT_NAME}" \ -rev "${rev}" \ -flow "${flow}" \ -stp "${stp}" \ -force "${force}" \ -seed "${seed}" popd if [[ ${flow} == "full" ]]; then BUILD_TIME_DONE="$(cat ${work_dir}/output_files/$rev.done)" BUILD_TIME_DONE=$(date -d"$BUILD_TIME_DONE" '+%F_%H.%M.%S') BUILD_NAME="$rev"x"$size" BUILD_OUTPUT_DIR="$BUILD_NAME"-"$BUILD_TIME_DONE" RBF=$BUILD_NAME.rbf mkdir -p "$BUILD_OUTPUT_DIR" cp "${work_dir}/output_files/$rev.rbf" "$BUILD_OUTPUT_DIR/$RBF" for file in ${work_dir}/output_files/*rpt ${work_dir}/output_files/*summary; do new_file=$(basename $file | sed -e s/$rev/"$BUILD_NAME"/) cp $file "$BUILD_OUTPUT_DIR/$new_file" done pushd $BUILD_OUTPUT_DIR md5sum $RBF > $RBF.md5sum sha256sum $RBF > $RBF.sha256sum MD5SUM=$(cat $RBF.md5sum | awk '{ print $1 }') SHA256SUM=$(cat $RBF.sha256sum | awk '{ print $1 }') popd echo "" echo "##########################################################################" echo " Done! Image, reports, and checksums copied to:" echo " $BUILD_OUTPUT_DIR" echo "" echo " $RBF checksums:" echo " MD5: $MD5SUM" echo " SHA256: $SHA256SUM" echo "" cat "$BUILD_OUTPUT_DIR/$BUILD_NAME.fit.summary" | sed -e 's/^\(.\)/ \1/g' echo "##########################################################################" fi echo "" printf "%s %02d:%02d:%02d\n" "Total Build Time:" "$(($SECONDS / 3600))" "$((($SECONDS / 60) % 60))" "$(($SECONDS % 60))" echo "" # Delete empty SOPC directories in the user's home directory #find ~ -maxdepth 1 -type d -empty -iname "sopc_altera_pll*" -delete bladeRF-2024.05/hdl/quartus/launch_eclipse.sh000077500000000000000000000073701457144405000207700ustar00rootroot00000000000000#!/bin/bash cat << EOF To be able to run NiOS's Eclipse the following steps must be taken: #1) ./build_bladerf.sh must finish successfully #2) Ensure eclipse-nios2 is installed. Read Intel's guide at: https://www.intel.com/content/altera-www/global/en_us/index/support/support-resources/knowledge-base/tools/2019/why-does-the-nios--ii-not-installed-after-full-installation-of-t.html #3) ./launch_eclipse.sh must be called from hdl/quartus and provided with a path to the build directory, see ./launch_eclipse.sh for example #4) Once Eclipse is launched, go to File -> Import -> General -> Existing Projects into Workspace. #5) Click "Select root directory" and supply the path to the bladeRF git repository. #6) Select and import 2 projects: the bladeRF_nios_bsp project and the corresponding bladeRF project for the target bladeRF: a) bladeRF_nios_bsp should be in hdl/fpga/platforms/common/bladerf/software/bladeRF_nios_bsp/ b) bladeRF (select hdl/fpga/platforms/bladerf for bladeRF 1.0 targets, select hdl/fpga/platforms/bladerf-micro for bladeRF 2.0 targets) #7) Once imported and available on the Project Explorer pane, right click "bladeRF_nios_bsp" and select "Nios II" -> "Generate BSP" #8) Right click "bladeRF" in the Project Explorer pane, and select "Build Project" Optionally to debug, #1) Right click "bladeRF" in the Project Explorer pane, and select "Debug As" -> "Debug Configurations..." #2) Right click "Nios II Hardware" and select "New", select "New_configuation" #3) Under the "Project" tab, fill in the path to the recently generated Nios II ELF file #4) Under the "Target connection" tab, check "Ignore mismatched system ID" and "Ignore mismatched system timestamp" #5) Find USB-Blaster in "Connections", click "Refresh Connections" if it does not show up #6) "Debug" button should be clickable If on Linux, consider adding a udev rule to grant access to the USB-Blaster to the plugdev group by adding two lines to /etc/udev/rules.d/91-usb.rules: # Altera ATTR{idVendor}=="21a9", ATTR{idProduct}=="1004", MODE="660", GROUP="plugdev" NOTE: The current user should be in 'plugdev' group. EOF if [[ -z ${QUARTUS_ROOTDIR+x} ]] ; then echo "Could not find Quartus root directory. Is $0 being called from a nios2_command_shell.sh ?" exit 1 fi if [[ ! `which eclipse-nios2` ]] ; then echo "elcipse-nios2 cannot be found. It may have to be manually installed"; echo "Please try: https://www.intel.com/content/altera-www/global/en_us/index/support/support-resources/knowledge-base/tools/2019/why-does-the-nios--ii-not-installed-after-full-installation-of-t.html"; exit 1 fi if [[ "$#" -ne 1 ]] ; then echo "Usage: $0 " echo " NOTE: ./build_bladerf.sh must complete successfully before running this script." echo "" echo "Example: $0 work/bladerf-micro-A4-hosted/" echo "" if [[ -d work/ ]] ; then echo "Found the following potential build directories:" for i in `find work/ -maxdepth 1 -type d | grep -v '^work/$'`; do echo " $i"; done echo "" fi exit 1 fi if [[ ! -f $1/settings.bsp ]] ; then echo "Error could not find settings.bsp in '$1'. '$1' may not be a correct build directory."; echo " ./build_bladerf.sh may have to be run again." exit 1 fi if [[ ! -f $1/nios_system.sopcinfo ]] ; then echo "Error could not find nios_system.sopcinfo in '$1'. '$1' may not be a correct build directory."; echo " ./build_bladerf.sh may have to be run again." exit 1 fi export WORKDIR=$1 cp $1/settings.bsp $1/nios_system.sopcinfo ../fpga/platforms/common/bladerf/software/bladeRF_nios_bsp/ sed -i 's/# CMAKE generated file: DO NOT EDIT!/unexport LD_LIBRARY_PATH/g' $1/libad936x/Makefile eclipse-nios2 bladeRF-2024.05/host/000077500000000000000000000000001457144405000141465ustar00rootroot00000000000000bladeRF-2024.05/host/CMakeLists.txt000066400000000000000000000425311457144405000167130ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.5) project(bladeRF C) ################################################################################ # Project configuration ################################################################################ # All build output lands in this directory: set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/output) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/output) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/output) set(CMAKE_HELPERS_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/cmake/helpers) set(CMAKE_HELPERS_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/cmake/helpers) if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Release") message(STATUS "Build type not specified: defaulting to a release build.") endif() set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "Build type") list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake/modules) # Firmware <--> Host common files set(BLADERF_FW_COMMON_INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR}/../firmware_common) # FPGA NIOS II <--> Host common files set(BLADERF_FPGA_COMMON_DIR ${CMAKE_CURRENT_LIST_DIR}/../fpga_common) set(BLADERF_FPGA_COMMON_INCLUDE_DIR ${BLADERF_FPGA_COMMON_DIR}/include) set(BLADERF_FPGA_COMMON_SOURCE_DIR ${BLADERF_FPGA_COMMON_DIR}/src) # Source and headers common amongst host software set(BLADERF_HOST_COMMON_INCLUDE_DIRS ${CMAKE_CURRENT_LIST_DIR}/common/include ${CMAKE_CURRENT_BINARY_DIR}/common/include ) set(BLADERF_HOST_COMMON_SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/common/src) # CMake >= 2.8.4 no longer defines WIN32. Acknowledge this change. set(CMAKE_LEGACY_CYGWIN_WIN32 0) ############################### # Misc. options ############################### option(ENABLE_LOG_FILE_INFO "Enable source file and line number information in log messages." ON) option(BUILD_DOCUMENTATION "Enable build and install of manpages and other documentation." OFF) option(TREAT_WARNINGS_AS_ERRORS "Treat compiler warnings as errors." ON) if(ENABLE_LOG_FILE_INFO) add_definitions(-DLOG_INCLUDE_FILE_INFO) endif() ################################################################################ # Configure host-specific items ################################################################################ include(TestBigEndian) TEST_BIG_ENDIAN(BLADERF_BIG_ENDIAN) # Search for libraries and drivers include(FindLibUSB) if(WIN32) include(FindCyAPI) endif() include(CheckLibraryExists) check_library_exists(c clock_gettime "time.h" HAVE_CLOCK_GETTIME) ################################################################################ # Build third-party libraries ################################################################################ # TODO: the build will fail unless this is enabled. option(BUILD_AD936X "Include support for the Analog Devices AD936x RFIC." ON) option(BUILD_AD936X_DEBUG "Enable debugging output for the AD936x library." OFF) # We do this prior to the rest of host/common, as the compile options are # going to be different. add_subdirectory(common/thirdparty/ad936x) ################################################################################ # Compiler configuration ################################################################################ ############################### # GCC and Clang ############################### option(ENABLE_GDB_EXTENSIONS "Build with -ggdb3 instead of -g" OFF) if(${CMAKE_C_COMPILER_ID} STREQUAL "GNU" OR ${CMAKE_C_COMPILER_ID} STREQUAL "Clang") # Personal preference - as much debug info as possible with GDB if(${ENABLE_GDB_EXTENSIONS}) string(REGEX REPLACE "^-g$" "-ggdb3" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}") endif(${ENABLE_GDB_EXTENSIONS}) add_definitions(-Wall) add_definitions(-Wextra) add_definitions(-Wno-unused-parameter) if(TREAT_WARNINGS_AS_ERRORS) add_definitions(-Werror) endif() if(${CMAKE_BUILD_TYPE} STREQUAL "Debug") add_definitions(-DDEBUG=1) add_definitions(-O0) endif(${CMAKE_BUILD_TYPE} STREQUAL "Debug") endif(${CMAKE_C_COMPILER_ID} STREQUAL "GNU" OR ${CMAKE_C_COMPILER_ID} STREQUAL "Clang") ############################### # MS Visual Studio ############################### if(MSVC) if(TREAT_WARNINGS_AS_ERRORS) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /WX") endif() # Prior to V12.0 2013, certain C99 headers we use were not supported. # We have to supply our own. if(MSVC_VERSION LESS 1800) set(MSVC_C99_INCLUDES ${CMAKE_CURRENT_SOURCE_DIR}/common/include/windows/c99) endif() # MSVC ships with its own timespec add_definitions(-DHAVE_STRUCT_TIMESPEC) endif(MSVC) ################################################################################ # System configuration ################################################################################ if(${CMAKE_SYSTEM_NAME} MATCHES "Linux" OR CYGWIN) set(BLADERF_OS_LINUX 1) if(NOT CMAKE_CROSSCOMPILING AND NOT CYGWIN) message(STATUS "Checking libc version...") try_run(LIBC_VERSION_RUN_RESULT LIBC_VERSION_COMPILE_RESULT ${CMAKE_HELPERS_BINARY_DIR} ${CMAKE_HELPERS_SOURCE_DIR}/libc_version.c RUN_OUTPUT_VARIABLE LIBC_VERSION) if(LIBC_VERSION) message(STATUS "libc version: ${LIBC_VERSION}") else() message(WARNING "Unable to determine libc version") endif() endif(NOT CMAKE_CROSSCOMPILING AND NOT CYGWIN) elseif(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") set(BLADERF_OS_FREEBSD 1) elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") set(BLADERF_OS_OSX 1) # We also need to add some headers that the system will not provide set(BLADERF_HOST_COMMON_INCLUDE_DIRS ${BLADERF_HOST_COMMON_INCLUDE_DIRS} ${CMAKE_CURRENT_LIST_DIR}/common/include/osx ) elseif(${CMAKE_SYSTEM_NAME} MATCHES "Windows") set(BLADERF_OS_WINDOWS 1) # We also need to add some headers that the system will not provide set(BLADERF_HOST_COMMON_INCLUDE_DIRS ${BLADERF_HOST_COMMON_INCLUDE_DIRS} ${CMAKE_CURRENT_LIST_DIR}/common/include/windows ) add_definitions(-D_CRT_SECURE_NO_WARNINGS) else() message(FATAL_ERROR "Unsupported host operating system: ${CMAKE_SYSTEM_NAME}") endif() configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/common/include/host_config.h.in ${CMAKE_CURRENT_BINARY_DIR}/common/include/host_config.h @ONLY ) # OSX if(APPLE) set(CMAKE_MACOSX_RPATH ON) set(CMAKE_SKIP_BUILD_RPATH FALSE) set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir) if(${isSystemDir} STREQUAL "-1") set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") endif() endif() ################################################################################ # Process subdirectories ################################################################################ add_subdirectory(libraries) add_subdirectory(misc) add_subdirectory(utilities) add_subdirectory(common) ################################################################################ # Create uninstall target ################################################################################ configure_file( "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY) add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake ) ################################################################################ # Windows-only, Post build: Copy libraries to our build output directory ################################################################################ if(WIN32 AND NOT CMAKE_CROSSCOMPILING) find_package(LibPThreadsWin32) if(LIBPTHREADSWIN32_FOUND) set(WIN_RUNTIME_ITEMS ${WIN_RUNTIME_ITEMS} "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/licenses/pthreads-win32/COPYING.LIB.txt" "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/pthreadVC2.dll") add_custom_command( OUTPUT "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/licenses/pthreads-win32/COPYING.LIB.txt" COMMAND ${CMAKE_COMMAND} -E copy_if_different "${LIBPTHREADSWIN32_LIB_COPYING}" "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/licenses/pthreads-win32/COPYING.LIB.txt" COMMENT "Copying pthreads-win32 license to output directory..." ) add_custom_command( OUTPUT "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/pthreadVC2.dll" COMMAND ${CMAKE_COMMAND} -E copy_if_different "${LIBPTHREADSWIN32_DLL}" "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/" COMMENT "Copying pthreadVC2.dll to output directory..." ) endif(LIBPTHREADSWIN32_FOUND) if(LIBUSB_FOUND) set(WIN_RUNTIME_ITEMS ${WIN_RUNTIME_ITEMS} "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/licenses/libusb/COPYING" "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/libusb-1.0.dll") # The libusb Windows release does not appear to include a COPYING file. # Since it's LGPLv2.1, we'll copy the equivalent license from our # license directory add_custom_command( OUTPUT "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/licenses/libusb/COPYING" COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/../legal/licenses/LICENSE.LGPLv2.1" "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/licenses/libusb/COPYING" COMMENT "Copying libusb license to output directory..." ) add_custom_command( OUTPUT "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/libusb-1.0.dll" COMMAND ${CMAKE_COMMAND} -E copy_if_different "${LIBUSB_PATH}/${LIBUSB_LIBRARY_PATH_SUFFIX}/libusb-1.0.dll" "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/" COMMENT "Copying libusb-1.0.dll to output directory..." ) endif(LIBUSB_FOUND) if(CYAPI_FOUND) set(WIN_RUNTIME_ITEMS ${WIN_RUNTIME_ITEMS} "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/licenses/Cypress/license.txt" "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/drivers/CyUSB3/cyusb3.inf" "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/drivers/CyUSB3/cyusb3.sys" "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/drivers/CyUSB3/cyusb3.cat" "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/drivers/CyUSB3/${CYUSB3_WDF_COINSTALLER}" ) add_custom_command( OUTPUT "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/licenses/Cypress/license.txt" COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CYPRESS_LICENSE}" "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/licenses/Cypress/license.txt" COMMENT "Copying Cypress License to output directory..." ) add_custom_command( OUTPUT "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/drivers/CyUSB3/cyusb3.inf" COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/${CYUSB3_INF}" "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/drivers/CyUSB3/" COMMENT "Copying cyusb3.inf to output directory..." ) add_custom_command( OUTPUT "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/drivers/CyUSB3/cyusb3.sys" COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CYUSB3_DRIVER_DIR}/cyusb3.sys" "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/drivers/CyUSB3/" COMMENT "Copying cyusb3.sys to output directory..." ) add_custom_command( OUTPUT "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/drivers/CyUSB3/cyusb3.cat" COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CYUSB3_DRIVER_DIR}/cyusb3.cat" "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/drivers/CyUSB3/" COMMENT "Copying cyusb3.cat to output directory..." ) add_custom_command( OUTPUT "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/drivers/CyUSB3/${CYUSB3_WDF_COINSTALLER}" COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CYUSB3_DRIVER_DIR}/${CYUSB3_WDF_COINSTALLER}" "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/drivers/CyUSB3/" COMMENT "Copying ${CYUSB3_WDF_COINSTALLER} to output directory..." ) endif() set(WIN_RUNTIME_ITEMS ${WIN_RUNTIME_ITEMS} "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/licenses/bladeRF/COPYING" "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/licenses/bladeRF/LICENSE.MIT.nuand" "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/licenses/bladeRF/LICENSE.MIT.msc_stdbool" "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/licenses/bladeRF/LICENSE.BSD.nuand" "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/licenses/bladeRF/LICENSE.LGPLv2.1" "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/licenses/bladeRF/LICENSE.GPLv2" "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/licenses/bladeRF/LICENSE.BSD.vlfeat" "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/licenses/bladeRF/LICENSE.BSD.msc_inttypes" ) add_custom_command( OUTPUT "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/licenses/bladeRF/COPYING" COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/../COPYING" "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/licenses/bladeRF/COPYING" COMMENT "Copying bladeRF COPYING file to output directory..." ) add_custom_command( OUTPUT "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/licenses/bladeRF/LICENSE.MIT.nuand" COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/../legal/licenses/LICENSE.MIT.nuand" "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/licenses/bladeRF/LICENSE.MIT.nuand" COMMENT "Copying bladeRF LICENSE.MIT.nuand files to output directory..." ) add_custom_command( OUTPUT "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/licenses/bladeRF/LICENSE.MIT.msc_stdbool" COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/../legal/licenses/LICENSE.MIT.msc_stdbool" "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/licenses/bladeRF/LICENSE.MIT.msc_stdbool" COMMENT "Copying bladeRF LICENSE.MIT.msc_stdbool file to output directory..." ) add_custom_command( OUTPUT "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/licenses/bladeRF/LICENSE.BSD.nuand" COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/../legal/licenses/LICENSE.BSD.nuand" "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/licenses/bladeRF/LICENSE.BSD.nuand" COMMENT "Copying bladeRF LICENSE.BSD.nuand file to output directory..." ) add_custom_command( OUTPUT "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/licenses/bladeRF/LICENSE.LGPLv2.1" COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/../legal/licenses/LICENSE.LGPLv2.1" "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/licenses/bladeRF/LICENSE.LGPLv2.1" COMMENT "Copying bladeRF LICENSE.LGPLv2.1 file to output directory..." ) add_custom_command( OUTPUT "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/licenses/bladeRF/LICENSE.GPLv2" COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/../legal/licenses/LICENSE.GPLv2" "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/licenses/bladeRF/LICENSE.GPLv2" COMMENT "Copying bladeRF LICENSE.GPLv2 file to output directory..." ) add_custom_command( OUTPUT "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/licenses/bladeRF/LICENSE.BSD.vlfeat" COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/../legal/licenses/LICENSE.BSD.vlfeat" "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/licenses/bladeRF/LICENSE.BSD.vlfeat" COMMENT "Copying bladeRF LICENSE.BSD.vlfeat file to output directory..." ) add_custom_command( OUTPUT "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/licenses/bladeRF/LICENSE.BSD.msc_inttypes" COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/../legal/licenses/LICENSE.BSD.msc_inttypes" "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/licenses/bladeRF/LICENSE.BSD.msc_inttypes" COMMENT "Copying bladeRF LICENSE.BSD.msc_inttypes file to output directory..." ) add_custom_target(win_runtime ALL DEPENDS ${WIN_RUNTIME_ITEMS}) endif(WIN32 AND NOT CMAKE_CROSSCOMPILING) bladeRF-2024.05/host/README.md000066400000000000000000000207601457144405000154320ustar00rootroot00000000000000# bladeRF Host Source # This directory contains the items outlined in the following table. Note that this structure includes some items planned for future development. | Directory | Description | | ----------------------------- |:--------------------------------------------------------------------------------------------------| | [cmake][cmake] | CMake scripts and modules | | [drivers][drivers] | Device drivers for supported operating systems | | [libraries][libraries] | The main bladeRF support library and supplemental libraries | | [misc][misc] | Miscellaneous files | | [utilities][utilities] | Applications and tools ## Dependencies ## ### libusb ### [libusb] and its development headers are required. \>= v1.0.16 is recommended for Linux, and \>= v1.0.19 is recommended for Windows. Ideally, the latest released version is always recommended. Please see the [libusb ChangeLog] for more information. ### (Optional) FX3 SDK - Windows-only ### Windows users that wish to use a Cypress driver/library based libbladeRF backend will need to download and install the [Cypress FX3 SDK]. ### CMake ### [CMake][CMake.org] is used to build the items in this directory. \>= v2.8.5 is required, but the latest available version is recommended. ### pthreads-win32 - Windows-only ### Windows users will need to get [pthreads-win32], and may (with newer Windows versions) need to build it from scratch. ## Build ## ### Linux and OSX ### From this directory, create a ```build``` directory. This is personal preference, of course. It allows for all build files to be cleaned up via a single ```rm -r build/``` command. Next, run cmake to configure the build, followed by ```make``` and ```sudo make install``` to build and install libraries and applications. ``` mkdir -p build cd build cmake [options] ../ make sudo make install sudo ldconfig ``` **Fedora Note:** By default, libbladeRF will install to /usr/local/{lib,lib64}, which is [not listed in /etc/ld.so.conf][redhat144967]. On these systems, it is recommended to create a ```/etc/ld.so.conf.d/local.conf``` specifying these directories: ``` sudo tee /etc/ld.so.conf.d/local.conf <``` - `````` may refer to Debug or Release, for example #### pthreads-win32 #### If you are using a newer version of Windows / Visual Studio and are getting ```error C0211: 'timespec': 'struct' type redefinition``` when trying to build bladeRF, you will need to rebuild pthreads-win32. The below process seems to work with pthreads-w32 2.9.1. - Get full source tree from [pthreads-win32] website, and unpack someplace convenient - In Visual Studio, open `pthreads-w32-2-9-1-release\pthreads.2\pthread.dsw` (one-way upgrade is OK) - Right-click the solution, select "Retarget solution", hit OK. - Change "Solution Configurations" dropdown to "Release" ("Debug" doesn't work, but that's OK) - Edit pthread.h to add `#define HAVE_STRUCT_TIMESPEC` and `#define PTW32_ARCHx64` near the top, just below the include guard - Build the solution - Back over in the bladeRF CMake: - File -> Delete Cache - Redo the "Configure" dance as before - Point `LIBPTHREADSWIN32_PATH` to the `pthreads-w32-2-9-1-release\pthreads.2` directory you were just working in ## CMake Options and Flags ## Below is a list of useful and project-specific CMake options. Please see the [CMake documentation] for more information. | Option | Description | ----------------------------------------- |:-----------------------------------------------------------------------------------------------------------------------------------| | -DCMAKE_INSTALL_PREFIX=\ | Override system-specific path to install output files. Default depends on system; see ```cmake -L``` | | -DCMAKE_BUILD_TYPE=\ | Set to "Debug" to enable a debug build. Default: "Release" | | -DBUILD_DOCUMENTATION=\ | Build libbladeRF API documentation and manpages for utilities. Default: OFF | | -DCMAKE_C_COMPILER=\ | Specify the compiler to use. Otherwise, CMake will determine a default. | | -DENABLE_GDB_EXTENSIONS=\ | GCC & GDB users may want to set this to use -ggdb3 instead of -g. Default: OFF | | -DENABLE_BACKEND_LIBUSB=\ | Enables libusb backend in libbladeRF. Default: ON if libusb is available, OFF otherwise. | | -DENABLE_BACKEND_CYAPI=\a | Enables (Windows-only) Cypress driver/library based backend in libbladeRF. Default: ON if the FX3 SDK is available, OFF otherwise. | | -DENABLE_BACKEND_DUMMY=\ | Enables dummy backend support in libbladeRF. Only useful for some developers. Default: OFF | | -DENABLE_LIBTECLA=\ | Enable libtecla support in the bladeRF-cli program. Default: ON if libtecla is detected, OFF otherwise. | | -DINSTALL_UDEV_RULES=\ | Install udev rules to /etc/udev/rules.d/. Default: ON for Linux, OFF default otherwise. | | -DUDEV_RULES_PATH=\ | Override the path for installing udev rules. Default: /etc/udev/rules.d | | -DBLADERF_GROUP=\ | Sets the group associated with the bladeRF in the installed udev rules. Default: ```plugdev``` | | -DTREAT_WARNINGS_AS_ERRORS=\ | Treat compiler warnings as errors. Contributors should keep this enabled. Default: ON | | -DENABLE_LOG_FILE_INFO=\ | Enable source file and line number information in log messages. Default: ON | [cmake]: ./cmake (CMake scripts) [drivers]: ./drivers (Drivers) [libraries]: ./libraries (Libraries) [misc]: ./misc (Miscellaneous) [utilities]: ./utilities (Utilites) [libusb]: http://libusb.info/ (libusb project site) [libusb ChangeLog]: http://log.libusb.info (libusb ChangeLog) [CMake.org]: http://www.cmake.org/ (CMake) [variable list]: http://www.cmake.org/cmake/help/v2.8.11/cmake.html#section_Variables (CMake variables) [CMake documentation]: http://www.cmake.org/cmake/help/documentation.html (Cmake documentation) [Cypress FX3 SDK]: http://www.cypress.com/?rID=57990 (Cypress FX3 SDK) [redhat144967]: https://bugzilla.redhat.com/show_bug.cgi?id=144967 (Red Hat Bugzilla - Bug 144967) [pthreads-win32]: https://sourceware.org/pthreads-win32/ (POSIX Threads for Win32) bladeRF-2024.05/host/cmake/000077500000000000000000000000001457144405000152265ustar00rootroot00000000000000bladeRF-2024.05/host/cmake/cmake_uninstall.cmake.in000066400000000000000000000027521457144405000220140ustar00rootroot00000000000000# This file is a modified version of the one from the www.vtk.org wiki: # http://www.vtk.org/Wiki/CMake_FAQ#Can_I_do_.22make_uninstall.22_with_CMake.3F if (NOT EXISTS "@CMAKE_BINARY_DIR@/install_manifest.txt") message(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_BINARY_DIR@/install_manifest.txt\".\nPossible reasons for this include: 'make install' has not yet been run, the build failed and the manifest was not generated, or the manifest has been removed.") endif(NOT EXISTS "@CMAKE_BINARY_DIR@/install_manifest.txt") file(READ "@CMAKE_BINARY_DIR@/install_manifest.txt" files) string(REGEX REPLACE "\n" ";" files "${files}") # Remove trailing semi-colon to remove empty list item. This is intended to avoid # violating Policy CMP0007 which results in a scary, albeit harmless, warning to the user string(REGEX REPLACE ";$" "" files "${files}") list(REVERSE files) foreach (file ${files}) message(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"") if (EXISTS "$ENV{DESTDIR}${file}") execute_process( COMMAND @CMAKE_COMMAND@ -E remove "$ENV{DESTDIR}${file}" OUTPUT_VARIABLE rm_out RESULT_VARIABLE rm_retval ) if(NOT ${rm_retval} EQUAL 0) message(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"") endif (NOT ${rm_retval} EQUAL 0) else (EXISTS "$ENV{DESTDIR}${file}") message(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.") endif (EXISTS "$ENV{DESTDIR}${file}") endforeach(file) bladeRF-2024.05/host/cmake/helpers/000077500000000000000000000000001457144405000166705ustar00rootroot00000000000000bladeRF-2024.05/host/cmake/helpers/libc_version.c000066400000000000000000000002071457144405000215110ustar00rootroot00000000000000#include #include int main(int argc, char *argv[]) { puts(gnu_get_libc_version()); return 0; } bladeRF-2024.05/host/cmake/helpers/libusb_version.c000066400000000000000000000022451457144405000220640ustar00rootroot00000000000000#include #include #include #include #if defined(WIN32) && !defined(__CYGWIN__) #include typedef const struct libusb_version * (__stdcall * version_fn)(void); #endif int main(int argc, char *argv[]) { int status = 0; const struct libusb_version *ver; #if defined(WIN32) && !defined(__CYGWIN__) if (argc > 1) { HINSTANCE dll; version_fn get_version; dll = LoadLibraryA(argv[1]); if (!dll) { fprintf(stderr, "Failed to load %s\n", argv[1]); return -1; } get_version = (version_fn) GetProcAddress(dll, "libusb_get_version"); if (get_version) { ver = get_version(); printf("%u.%u.%u\n", ver->major, ver->minor, ver->micro); } else{ fprintf(stderr, "Failed to get address of libusb_get_version()\n"); status = -1; } FreeLibrary(dll); } else { fprintf(stderr, "Windows usage: %s \n", argv[0]); return -1; } #else ver = libusb_get_version(); printf("%u.%u.%u\n", ver->major, ver->minor, ver->micro); #endif return status; } bladeRF-2024.05/host/cmake/modules/000077500000000000000000000000001457144405000166765ustar00rootroot00000000000000bladeRF-2024.05/host/cmake/modules/FindCyAPI.cmake000066400000000000000000000112701457144405000214070ustar00rootroot00000000000000# Locate the Cypress API for # # This module defines the following variables: # CYAPI_FOUND TRUE if the Cypress API was found # CYAPI_HEADER_FILE The location of the API header # CYAPI_INCLUDE_DIRS The location of header files # CYAPI_LIBRARIES The Cypress library files # CYUSB3_DRIVER_DIR Directory containing CyUSB3 driver files # CYPRESS_LICENSE Path to Cypress license shipped with FX3 SDK if(DEFINED __INCLUDED_BLADERF_FIND_CYAPI_CMAKE) return() endif() set(__INCLUDED_BLADERF_FIND_CYAPI_CMAKE TRUE) if(NOT WIN32) return() endif() set(FX3_SDK_PATH "$ENV{FX3_INSTALL_PATH}" CACHE PATH "Path to the Cypress FX3 SDK" ) if(NOT EXISTS ${FX3_SDK_PATH}) message(STATUS "Cypress backend not available. The following location does not exist: FX3_SDK_PATH=${FX3_SDK_PATH}") return() endif() find_file(CYAPI_HEADER_FILE NAMES CyAPI.h PATHS "${FX3_SDK_PATH}/library/cpp" PATH_SUFFIXES include inc ) mark_as_advanced(CYAPI_HEADER_FILE) get_filename_component(CYAPI_INCLUDE_DIRS "${CYAPI_HEADER_FILE}" PATH) if(MSVC) if(CMAKE_CL_64) set(CYAPI_ARCH x64) else(CMAKE_CL_64) set(CYAPI_ARCH x86) endif(CMAKE_CL_64) elseif(CMAKE_COMPILER_IS_GNUCC) if(CMAKE_SIZEOF_VOID_P EQUAL 8) set(CYAPI_ARCH x64) else(CMAKE_SIZEOF_VOID_P EQUAL 8) set(CYAPI_ARCH x86) endif(CMAKE_SIZEOF_VOID_P EQUAL 8) endif() if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "AMD64") set(CYUSB_ARCH "x64") elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "i386") set(CYUSB_ARCH "x86") else() # We shouldn't see PPC here, as CyAPI/CYUSB3 is Windows-only message(FATAL_ERROR "Unexpected CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}") endif() find_library(CYAPI_LIBRARY NAMES CyAPI PATHS "${FX3_SDK_PATH}/library/cpp" PATH_SUFFIXES lib/${CYAPI_ARCH} ) mark_as_advanced(CYAPI_LIBRARY) if(CYAPI_LIBRARY) set(CYAPI_LIBRARIES "${CYAPI_LIBRARY}" SetupAPI.lib) endif() # Choose driver directory and INF directory (in our repo) based upon detected system if (${CMAKE_SYSTEM_VERSION} EQUAL VERSION_5.1 OR ${CMAKE_SYSTEM_VERSION} EQUAL VERSION_5.2) set(CYUSB3_DRIVER_DIR "${FX3_SDK_PATH}/driver/bin/wxp/${CYUSB_ARCH}") set(CYUSB3_INF "drivers/windows/CyUSB3/winxp_vista/cyusb3.inf") elseif(${CMAKE_SYSTEM_VERSION} EQUAL 6.0) set(CYUSB3_DRIVER_DIR "${FX3_SDK_PATH}/driver/bin/vista/${CYUSB_ARCH}") set(CYUSB3_INF "drivers/windows/CyUSB3/winxp_vista/cyusb3.inf") elseif(${CMAKE_SYSTEM_VERSION} EQUAL 6.1) set(CYUSB3_DRIVER_DIR "${FX3_SDK_PATH}/driver/bin/win7/${CYUSB_ARCH}") set(CYUSB3_INF "drivers/windows/CyUSB3/win7_8_10/cyusb3.inf") elseif(${CMAKE_SYSTEM_VERSION} EQUAL 6.2) set(CYUSB3_DRIVER_DIR "${FX3_SDK_PATH}/driver/bin/win8/${CYUSB_ARCH}") set(CYUSB3_INF "drivers/windows/CyUSB3/win7_8_10/cyusb3.inf") elseif(${CMAKE_SYSTEM_VERSION} EQUAL 6.3) set(CYUSB3_DRIVER_DIR "${FX3_SDK_PATH}/driver/bin/win81/${CYUSB_ARCH}") set(CYUSB3_INF "drivers/windows/CyUSB3/win7_8_10/cyusb3.inf") elseif(${CMAKE_SYSTEM_VERSION} EQUAL 10.0) set(CYUSB3_DRIVER_DIR "${FX3_SDK_PATH}/driver/bin/win10/${CYUSB_ARCH}") set(CYUSB3_INF "drivers/windows/CyUSB3/win7_8_10/cyusb3.inf") if(NOT EXISTS ${CYUSB3_DRIVER_DIR}) message(WARNING "Windows 10 drivers not found. Marking CYAPI as not found. Please see Cypress KBA94413: " "http://www.cypress.com/knowledge-base-article/drivers-ez-usb-fx1-fx2lp-and-fx3-kba94413") set(CYAPI_FOUND false) return() endif() else() message(WARNING "CyAPI found, but CMAKE_SYSTEM_VERSION=${CMAKE_SYSTEM_VERSION} is not supported by CyAPI SDK. Marking CYAPI as not found.") set(CYAPI_FOUND false) return() endif() # CyUSB3 ships 01009 for <= Vista, and 01011 for >= Win 7 if(${CMAKE_SYSTEM_VERSION} LESS 6.1) set(CYUSB3_WDF_COINSTALLER "WdfCoInstaller01009.dll") else() set(CYUSB3_WDF_COINSTALLER "WdfCoInstaller01011.dll") endif() set(CYPRESS_LICENSE "${FX3_SDK_PATH}/license/license.txt") if(EXISTS ${CYUSB3_DRIVER_DIR}) if(CYAPI_INCLUDE_DIRS AND CYAPI_LIBRARIES) set(CYAPI_FOUND TRUE) endif() endif() if(CYAPI_FOUND) set(CMAKE_REQUIRED_INCLUDES "${CYAPI_INCLUDE_DIRS}") check_include_file("${CYAPI_HEADER_FILE}" CYAPI_FOUND) message(STATUS "CyAPI includes: ${CYAPI_INCLUDE_DIRS}") message(STATUS "CyAPI libs: ${CYAPI_LIBRARIES}") message(STATUS "CYUSB3 driver directory: ${CYUSB3_DRIVER_DIR}") endif() if(NOT CYAPI_FOUND AND REQUIRED) message(FATAL_ERROR "Cypress API not found. Double-check your FX3_SDK_PATH value.") endif() bladeRF-2024.05/host/cmake/modules/FindLibEdit.cmake000066400000000000000000000017221457144405000220170ustar00rootroot00000000000000if(DEFINED __INCLUDED_BLADERF_FINDLIBEDIT_CMAKE) return() endif() set(__INCLUDED_BLADERF_FINDLIBEDIT_CMAKE TRUE) find_package(PkgConfig) if(PKG_CONFIG_FOUND) pkg_check_modules(LIBEDIT_PKG libedit QUIET) endif(PKG_CONFIG_FOUND) if(NOT LIBEDIT_FOUND) find_path(LIBEDIT_INCLUDE_DIR NAMES histedit.h PATHS ${LIBEDIT_PKG_INCLUDE_DIRS} /usr/include /usr/local/include ) find_library(LIBEDIT_LIBRARIES NAMES edit PATHS ${LIBEDIT_PKG_LIBRARY_DIRS} /usr/lib /usr/local/lib ) if(LIBEDIT_INCLUDE_DIR AND LIBEDIT_LIBRARIES) set(LIBEDIT_FOUND TRUE CACHE INTERNAL "libedit found") message(STATUS "Found libedit: ${LIBEDIT_INCLUDE_DIR}, ${LIBEDIT_LIBRARIES}") else(LIBEDIT_INCLUDE_DIR AND LIBEDIT_LIBRARIES) set(LIBEDIT_FOUND FALSE CACHE INTERNAL "libedit found") message(STATUS "libedit not found.") endif(LIBEDIT_INCLUDE_DIR AND LIBEDIT_LIBRARIES) mark_as_advanced(LIBEDIT_INCLUDE_DIR LIBEDIT_LIBRARIES) endif(NOT LIBEDIT_FOUND) bladeRF-2024.05/host/cmake/modules/FindLibPThreadsWin32.cmake000066400000000000000000000076551457144405000235020ustar00rootroot00000000000000# This is file is based off of the FindLibUSB.cmake file written by Hendrik Sattler, # from the OpenOBEX project (licensed GPLv2/LGPL). (If this is not correct, # please contact us so we can attribute the author appropriately.) # # https://github.com/zuckschwerdt/openobex/blob/master/CMakeModules/FindLibUSB.cmake # http://dev.zuckschwerdt.org/openobex/ # # Find pthreads-win32 # # This requires the LIBPTHREADSWIN32_PATH variable to be set to the path to the # a pthreads-win32 release, such as the Pre-built.2 directory from the 2.9.1 release: # ftp://sourceware.org/pub/pthreads-win32/pthreads-w32-2-9-1-release.zip # # The following standard variables get defined: # LIBPTHREADSWIN32_FOUND: true if LibUSB was found # LIBPTHREADSWIN32_HEADER_FILE: the location of the C header file # LIBPTHREADSWIN32_INCLUDE_DIRS: the directories that contain headers # LIBPTHREADSWIN32_LIBRARIES: the library files # LIBPTHREADSWIN32_LIB_COPYING: the license associated with the library # LIBPTHREADSWIN32_DLL: the pthreadVC2.dll file if(DEFINED __INCLUDED_BLADERF_FINDLIBPTHREADSWIN32_CMAKE) return() endif() set(__INCLUDED_BLADERF_FINDLIBPTHREADSWIN32_CMAKE TRUE) include ( CheckLibraryExists ) include ( CheckIncludeFile ) set(LIBPTHREADSWIN32_PATH "C:/Program Files (x86)/pthreads-win32" CACHE PATH "Path to win-pthreads files. (This is generally only needed for Windows users who downloaded binary distributions.)" ) find_file ( LIBPTHREADSWIN32_HEADER_FILE NAMES pthread.h PATHS ${LIBPTHREADSWIN32_PATH} PATH_SUFFIXES include include ) mark_as_advanced ( LIBPTHREADSWIN32_HEADER_FILE ) get_filename_component ( LIBPTHREADSWIN32_INCLUDE_DIRS "${LIBPTHREADSWIN32_HEADER_FILE}" PATH ) if ( WIN32 ) if ( MSVC ) if ( CMAKE_CL_64 ) set ( LIBPTHREADSWIN32_LIBRARY_PATH_SUFFIX x64 ) else ( CMAKE_CL_64 ) set ( LIBPTHREADSWIN32_LIBRARY_PATH_SUFFIX x86 ) endif ( CMAKE_CL_64 ) elseif ( CMAKE_COMPILER_IS_GNUCC ) if ( CMAKE_SIZEOF_VOID_P EQUAL 8 ) set ( LIBPTHREADSWIN32_LIBRARY_PATH_SUFFIX x64 ) else ( CMAKE_SIZEOF_VOID_P EQUAL 8 ) set ( LIBPTHREADSWIN32_LIBRARY_PATH_SUFFIX x86 ) endif ( CMAKE_SIZEOF_VOID_P EQUAL 8 ) endif ( MSVC ) find_library ( PTHREAD_LIBRARY NAMES pthreadVC2 PATHS ${LIBPTHREADSWIN32_PATH} PATH_SUFFIXES lib/${LIBPTHREADSWIN32_LIBRARY_PATH_SUFFIX} ) mark_as_advanced ( PTHREAD_LIBRARY ) if ( PTHREAD_LIBRARY ) set ( LIBPTHREADSWIN32_LIBRARIES ${PTHREAD_LIBRARY} ) endif ( PTHREAD_LIBRARY ) find_file ( PTHREAD_DLL NAMES pthreadVC2.dll PATHS ${LIBPTHREADSWIN32_PATH} PATH_SUFFIXES dll/${LIBPTHREADSWIN32_LIBRARY_PATH_SUFFIX} . ) mark_as_advanced ( PTHREAD_DLL ) if ( PTHREAD_DLL ) set ( LIBPTHREADSWIN32_DLL ${PTHREAD_DLL} ) endif ( PTHREAD_DLL ) else ( WIN32 ) message(FATAL_ERROR "This file only supports Windows") endif ( WIN32 ) set ( LIBPTHREADSWIN32_LIB_COPYING "${LIBPTHREADSWIN32_PATH}/COPYING.LIB" ) if ( NOT EXISTS ${LIBPTHREADSWIN32_LIB_COPYING} ) message(FATAL_ERROR "Unable to find pthread-win32 COPYING.LIB file") endif () if ( LIBPTHREADSWIN32_INCLUDE_DIRS AND LIBPTHREADSWIN32_LIBRARIES AND LIBPTHREADSWIN32_DLL ) set ( LIBPTHREADSWIN32_FOUND true ) endif ( LIBPTHREADSWIN32_INCLUDE_DIRS AND LIBPTHREADSWIN32_LIBRARIES AND LIBPTHREADSWIN32_DLL ) if ( LIBPTHREADSWIN32_FOUND ) set ( CMAKE_REQUIRED_INCLUDES "${LIBPTHREADSWIN32_INCLUDE_DIRS}" ) check_include_file ( "{LIBPTHREADSWIN32_HEADER_FILE}" LIBPTHREADSWIN32_FOUND ) endif ( LIBPTHREADSWIN32_FOUND ) if ( NOT LIBPTHREADSWIN32_FOUND ) message ( FATAL_ERROR "pthreads-win32 not found. If you're using a binary distribution, try setting -DLIBPTHREADSWIN32_PATH=." ) endif ( NOT LIBPTHREADSWIN32_FOUND ) bladeRF-2024.05/host/cmake/modules/FindLibTecla.cmake000066400000000000000000000017561457144405000221710ustar00rootroot00000000000000if(DEFINED __INCLUDED_BLADERF_FINDLIBTECLA_CMAKE) return() endif() set(__INCLUDED_BLADERF_FINDLIBTECLA_CMAKE TRUE) find_package(PkgConfig) if(PKG_CONFIG_FOUND) pkg_check_modules(LIBTECLA_PKG libtecla QUIET) endif(PKG_CONFIG_FOUND) if(NOT LIBTECLA_FOUND) find_path(LIBTECLA_INCLUDE_DIR NAMES libtecla.h PATHS ${LIBTECLA_PKG_INCLUDE_DIRS} /usr/include /usr/local/include ) find_library(LIBTECLA_LIBRARIES NAMES tecla PATHS ${LIBTECLA_PKG_LIBRARY_DIRS} /usr/lib /usr/local/lib ) if(LIBTECLA_INCLUDE_DIR AND LIBTECLA_LIBRARIES) set(LIBTECLA_FOUND TRUE CACHE INTERNAL "libtecla found") message(STATUS "Found libtecla: ${LIBTECLA_INCLUDE_DIR}, ${LIBTECLA_LIBRARIES}") else(LIBTECLA_INCLUDE_DIR AND LIBTECLA_LIBRARIES) set(LIBTECLA_FOUND FALSE CACHE INTERNAL "libtecla found") message(STATUS "libtecla not found.") endif(LIBTECLA_INCLUDE_DIR AND LIBTECLA_LIBRARIES) mark_as_advanced(LIBTECLA_INCLUDE_DIR LIBTECLA_LIBRARIES) endif(NOT LIBTECLA_FOUND) bladeRF-2024.05/host/cmake/modules/FindLibUSB.cmake000066400000000000000000000153621457144405000215700ustar00rootroot00000000000000# This is a modified version of the file written by Hedrik Sattler, # from the OpenOBEX project (licensed GPLv2/LGPL). (If this is not correct, # please contact us so we can attribute the author appropriately.) # # https://github.com/zuckschwerdt/openobex/blob/master/CMakeModules/FindLibUSB.cmake # http://dev.zuckschwerdt.org/openobex/ # # Find libusb-1.0 # # It will use PkgConfig if present and supported, otherwise this # script searches for binary distribution in the path defined by # the LIBUSB_PATH variable. # # Define LIBUSB_SKIP_VERSION_CHECK=Yes to skip the execution of a program to fetch # libusb's version number. LIBUSB_VERSION will not be set if this if this is used. # To check the version number, this script expects CMAKE_HELPERS_SOURCE_DIR to # be defined with the path to libusb_version.c. # # The following standard variables get defined: # LIBUSB_FOUND: true if LibUSB was found # LIBUSB_HEADER_FILE: the location of the C header file # LIBUSB_INCLUDE_DIRS: the directorys that contain headers # LIBUSB_LIBRARIES: the library files # LIBUSB_VERSION the detected libusb version # LIBUSB_HAVE_GET_VERSION True if libusb has libusb_get_version() if(DEFINED __INCLUDED_BLADERF_FINDLIBUSB_CMAKE) return() endif() set(__INCLUDED_BLADERF_FINDLIBUSB_CMAKE TRUE) include(CheckLibraryExists) include(CheckIncludeFile) # In Linux, folks should generally be able to simply fetch the libusb library and # development packages from their distros package repository. Windows users will # likely want to fetch a binary distribution, hence the Windows-oriented default. # # See http://www.libusb.org/wiki/windows_backend#LatestBinarySnapshots if(WIN32) set(LIBUSB_PATH "C:/Program Files (x86)/libusb-1.0.20" CACHE PATH "Path to libusb files. (This is generally only needed for Windows users who downloaded binary distributions.)" ) endif() # FreeBSD has built-in libusb since 800069 if(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") exec_program(sysctl ARGS -n kern.osreldate OUTPUT_VARIABLE FREEBSD_VERSION) set(MIN_FREEBSD_VERSION 800068) if(FREEBSD_VERSION GREATER ${MIN_FREEBSD_VERSION}) set(LIBUSB_FOUND TRUE) set(LIBUSB_SKIP_VERSION_CHECK TRUE) set(LIBUSB_INCLUDE_DIRS "/usr/include") set(LIBUSB_HEADER_FILE "${LIBUSB_INCLUDE_DIRS}/libusb.h") set(LIBUSB_LIBRARIES "usb") set(LIBUSB_LIBRARY_DIRS "/usr/lib/") endif(FREEBSD_VERSION GREATER ${MIN_FREEBSD_VERSION}) endif(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") find_package(PkgConfig) if(PKG_CONFIG_FOUND) pkg_check_modules(PKGCONFIG_LIBUSB libusb-1.0 QUIET) endif(PKG_CONFIG_FOUND) if(PKGCONFIG_LIBUSB_FOUND AND NOT LIBUSB_FOUND) set(LIBUSB_INCLUDE_DIRS ${PKGCONFIG_LIBUSB_INCLUDE_DIRS}) foreach(i ${PKGCONFIG_LIBUSB_LIBRARIES}) string(REGEX MATCH "[^-]*" ibase "${i}") find_library(${ibase}_LIBRARY NAMES ${i} PATHS ${PKGCONFIG_LIBUSB_LIBRARY_DIRS} ) if(${ibase}_LIBRARY) list(APPEND LIBUSB_LIBRARIES ${${ibase}_LIBRARY}) endif(${ibase}_LIBRARY) mark_as_advanced(${ibase}_LIBRARY) endforeach(i) else(PKGCONFIG_LIBUSB_FOUND) if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows") # The libusbx binary distribution contains several libs. # Use the lib that got compiled with the same compiler. if(MSVC) if(CMAKE_CL_64) set(LIBUSB_LIBRARY_PATH_SUFFIX MS64/dll) else(CMAKE_CL_64) set(LIBUSB_LIBRARY_PATH_SUFFIX MS32/dll) endif(CMAKE_CL_64) elseif(CMAKE_COMPILER_IS_GNUCC) if(CMAKE_SIZEOF_VOID_P EQUAL 8) set(LIBUSB_LIBRARY_PATH_SUFFIX MinGW32/dll) else(CMAKE_SIZEOF_VOID_P EQUAL 8) set(LIBUSB_LIBRARY_PATH_SUFFIX MinGW64/dll) endif(CMAKE_SIZEOF_VOID_P EQUAL 8) endif(MSVC) else() set(LIBUSB_LIBRARY_PATH_SUFFIX lib) set(LIBUSB_EXTRA_PATHS /usr /usr/local /opt/local) endif(${CMAKE_SYSTEM_NAME} STREQUAL "Windows") find_file(LIBUSB_HEADER_FILE NAMES libusb.h PATHS ${LIBUSB_PATH} ${LIBUSB_EXTRA_PATHS} PATH_SUFFIXES include include/libusbx-1.0 include/libusb-1.0 ) mark_as_advanced(LIBUSB_HEADER_FILE) get_filename_component(LIBUSB_INCLUDE_DIRS "${LIBUSB_HEADER_FILE}" PATH) find_library(usb_LIBRARY NAMES libusb-1.0 usb-1.0 PATHS ${LIBUSB_PATH} ${LIBUSB_EXTRA_PATHS} PATH_SUFFIXES ${LIBUSB_LIBRARY_PATH_SUFFIX} ) mark_as_advanced(usb_LIBRARY) if(usb_LIBRARY) set(LIBUSB_LIBRARIES ${usb_LIBRARY}) endif(usb_LIBRARY) endif(PKGCONFIG_LIBUSB_FOUND AND NOT LIBUSB_FOUND) if(LIBUSB_INCLUDE_DIRS AND LIBUSB_LIBRARIES) set(LIBUSB_FOUND TRUE) endif(LIBUSB_INCLUDE_DIRS AND LIBUSB_LIBRARIES) if(LIBUSB_FOUND) set(CMAKE_REQUIRED_INCLUDES "${LIBUSB_INCLUDE_DIRS}") check_include_file("{LIBUSB_HEADER_FILE}" LIBUSB_FOUND) endif(LIBUSB_FOUND) if(LIBUSB_FOUND AND NOT CMAKE_CROSSCOMPILING) if(LIBUSB_SKIP_VERSION_CHECK) message(STATUS "Skipping libusb version number check.") unset(LIBUSB_VERSION) else() message(STATUS "Checking libusb version...") if(WIN32) string(REPLACE ".lib" ".dll" LIBUSB_DLL "${LIBUSB_LIBRARIES}") try_run(LIBUSB_VERCHECK_RUN_RESULT LIBUSB_VERCHECK_COMPILED ${CMAKE_HELPERS_BINARY_DIR} ${CMAKE_HELPERS_SOURCE_DIR}/libusb_version.c CMAKE_FLAGS "-DINCLUDE_DIRECTORIES=${LIBUSB_INCLUDE_DIRS}" RUN_OUTPUT_VARIABLE LIBUSB_VERSION ARGS "\"${LIBUSB_DLL}\"" ) else() try_run(LIBUSB_VERCHECK_RUN_RESULT LIBUSB_VERCHECK_COMPILED ${CMAKE_HELPERS_BINARY_DIR} ${CMAKE_HELPERS_SOURCE_DIR}/libusb_version.c CMAKE_FLAGS "-DINCLUDE_DIRECTORIES=${LIBUSB_INCLUDE_DIRS}" "-DLINK_LIBRARIES=${LIBUSB_LIBRARIES}" RUN_OUTPUT_VARIABLE LIBUSB_VERSION ) endif() if (NOT LIBUSB_VERCHECK_COMPILED OR NOT LIBUSB_VERCHECK_RUN_RESULT EQUAL 0 ) message(STATUS "${LIBUSB_VERSION}") set(LIBUSB_VERSION "0.0.0") message(WARNING "\nFailed to compile (compiled=${LIBUSB_VERCHECK_COMPILED}) or run (retval=${LIBUSB_VERCHECK_RUN_RESULT}) libusb version check.\n" "This may occur if libusb is earlier than v1.0.10.\n" "Setting LIBUSB_VERSION to ${LIBUSB_VERSION}.\n") return() endif() message(STATUS "libusb version: ${LIBUSB_VERSION}") endif() endif(LIBUSB_FOUND AND NOT CMAKE_CROSSCOMPILING) bladeRF-2024.05/host/cmake/modules/FindPatcher.cmake000066400000000000000000000020671457144405000220740ustar00rootroot00000000000000if(DEFINED __INCLUDED_BLADERF_FIND_PATCHER) return() endif() set(__INCLUDED_BLADERF_FIND_PATCHER TRUE) # Look for the packages we want find_package(Patch QUIET) find_package(Git QUIET) # Work around cross-platform case sensitivity issues if(PATCH_FOUND) set(Patch_FOUND ${PATCH_FOUND}) if (PATCH_EXECUTABLE) set(Patch_EXECUTABLE ${PATCH_EXECUTABLE}) endif() endif() if(GIT_FOUND) set(Git_FOUND ${GIT_FOUND}) if (GIT_EXECUTABLE) set(Git_EXECUTABLE ${GIT_EXECUTABLE}) endif() endif() # patch is preferred, but git-apply is also okay. if(Patch_FOUND) set(Patcher_FOUND TRUE) set(Patcher_EXECUTABLE ${Patch_EXECUTABLE}) elseif(Git_FOUND) set(Patcher_FOUND TRUE) set(Patcher_EXECUTABLE ${Git_EXECUTABLE};--bare;apply;-) else() set(Patcher_FOUND FALSE) endif() if(NOT Patcher_FOUND AND Patcher_FIND_REQUIRED) message(FATAL_ERROR "FindPatcher: Could not find either 'patch' or 'git'!") endif() if(Patcher_FOUND AND NOT Patcher_FIND_QUIETLY) message(STATUS "FindPatcher: found ${Patcher_EXECUTABLE}") endif() bladeRF-2024.05/host/cmake/modules/Shortfile.cmake000066400000000000000000000024771457144405000216510ustar00rootroot00000000000000if(DEFINED __INCLUDED_BLADERF_SHORTFILE_CMAKE) return() endif() set(__INCLUDED_BLADERF_SHORTFILE_CMAKE TRUE) # Based on: # https://stackoverflow.com/questions/1706346/file-macro-manipulation-handling-at-compile-time/27990434#27990434 function(define_file_basename_for_sources targetname) # Trim /host from the end of CMAKE_HOME_DIRECTORY if required string(REGEX REPLACE "/host$" "" rootpath "${CMAKE_HOME_DIRECTORY}") # Get the list of files to set the SHORT_FILE_ definition for get_target_property(source_files "${targetname}" SOURCES) foreach(sourcefile ${source_files}) # Get source file's current list of compile definitions. get_property(defs SOURCE "${sourcefile}" PROPERTY COMPILE_DEFINITIONS) # Resolve the filename to an absolute pathname with symlinks resolved get_filename_component(absname "${sourcefile}" REALPATH) # Trim the rootpath from the filename string(REPLACE "${rootpath}/" "" basename "${absname}") # Add the SHORT_FILE_=filename compile definition to the list. list(APPEND defs "SHORT_FILE_=${basename}") # Set the updated compile definitions on the source file. set_property( SOURCE "${sourcefile}" PROPERTY COMPILE_DEFINITIONS ${defs}) endforeach() endfunction() bladeRF-2024.05/host/cmake/modules/Version.cmake000066400000000000000000000073371457144405000213370ustar00rootroot00000000000000# Portions of this file have been borrowed from and/or inspired by # the Version.cmake from the rtl-sdr project. # http://sdr.osmocom.org/trac/wiki/rtl-sdr # # Provides: # ${VERSION_INFO_BASE} - Major.Minor.Patch # ${VERSION_INFO} - Major.minor.Patch[-git_info] # # Requires values for: # ${VERSION_INFO_MAJOR} - Increment on API compatibility changes. # ${VERSION_INFO_MINOR} - Increment when adding features. # ${VERSION_INFO_PATCH} - Increment for bug and documentation changes. # # Optional: # ${VERSION_INFO_EXTRA} - Set to "git" to append git info. This is # intended only for non-versioned development # builds # ${VERSION_INFO_OVERRIDE} - Set to a non-null value to override the # VERSION_INFO_EXTRA logic. This is intended # for automated snapshot builds from exported # trees, to pass in the git revision info. # if(DEFINED __INCLUDED_BLADERF_VERSION_CMAKE) return() endif() set(__INCLUDED_BLADERF_VERSION_CMAKE TRUE) ################################################################################ # Gather up variables provided by parent script ################################################################################ if(NOT DEFINED VERSION_INFO_MAJOR) message(FATAL_ERROR "VERSION_INFO_MAJOR is not defined") else() set(VER_MAJ ${VERSION_INFO_MAJOR}) endif() if(NOT DEFINED VERSION_INFO_MINOR) message(FATAL_ERROR "VERSION_INFO_MINOR is not defined") else() set(VER_MIN ${VERSION_INFO_MINOR}) endif() if(NOT DEFINED VERSION_INFO_PATCH) message(FATAL_ERROR "VERSION_INFO_PATCH is not defined") else() set(VER_PAT ${VERSION_INFO_PATCH}) endif() ################################################################################ # Craft version number, using git, if needed ################################################################################ find_package(Git QUIET) if(GIT_FOUND) execute_process( COMMAND ${GIT_EXECUTABLE} rev-parse -- ERROR_QUIET RESULT_VARIABLE NOT_GIT_REPOSITORY WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} ) if(NOT_GIT_REPOSITORY) set(GIT_INFO "-unknown") else() execute_process( COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD -- OUTPUT_VARIABLE GIT_REV OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} ) execute_process( COMMAND ${GIT_EXECUTABLE} diff-index --quiet HEAD -- RESULT_VARIABLE GIT_DIRTY WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} ) if(GIT_DIRTY) set(GIT_INFO "-${GIT_REV}-dirty") else() set(GIT_INFO "-${GIT_REV}") endif() endif() else() message(WARNING "git missing -- unable to check libladeRF version.") unset(NOT_GIT_REPOSITORY) unset(GIT_REV) unset(GIT_DIRTY) endif() ################################################################################ # Provide ################################################################################ set(VERSION_INFO_BASE "${VER_MAJ}.${VER_MIN}.${VER_PAT}") # Force the version suffix. Used for automated export builds. if(VERSION_INFO_OVERRIDE) set(VERSION_INFO "${VERSION_INFO_BASE}-${VERSION_INFO_OVERRIDE}") # Intra-release builds elseif("${VERSION_INFO_EXTRA}" STREQUAL "git") set(VERSION_INFO "${VERSION_INFO_BASE}-git${GIT_INFO}") # Versioned releases elseif("${VERSION_INFO_EXTRA}" STREQUAL "") set(VERSION_INFO "${VERSION_INFO_BASE}") # Invalid else() message(FATAL_ERROR "Unexpected definition of VERSION_INFO_EXTRA: ${VERSION_INFO_EXTRA}") endif() bladeRF-2024.05/host/common/000077500000000000000000000000001457144405000154365ustar00rootroot00000000000000bladeRF-2024.05/host/common/CMakeLists.txt000066400000000000000000000000271457144405000201750ustar00rootroot00000000000000add_subdirectory(test) bladeRF-2024.05/host/common/include/000077500000000000000000000000001457144405000170615ustar00rootroot00000000000000bladeRF-2024.05/host/common/include/conversions.h000066400000000000000000000311201457144405000215770ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014-2018 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef CONVERSIONS_H_ #define CONVERSIONS_H_ #include #include #include #include #include #include #include #include "host_config.h" #include "rel_assert.h" #ifdef __cplusplus extern "C" { #endif /** * Convert a string to a bladerf_version * * Accepted inputs are in the form: X.Y.Z or X.Y.Z- * * @param[in] string Version string to convert * @param[out] version Version structure to populate. For a valid string, * the describe member will point to the provided * string argument. The contents of this structure * are undefined when this function returns -1. * * @return 0 on success, -1 if provided string is invalid */ int str2version(const char *str, struct bladerf_version *version); /** * Convert a bladerf_dev_speed to a string suitable for printing * * @note The caller should not attempt to modify or free() the returned string. * * @param speed Device speed * @return Const string describing the provided speed */ const char *devspeed2str(bladerf_dev_speed speed); /** * Convert a string to libbladeRF log verbosity level * * @param[in] str Input string * @param[out] ok Value is updated to true if the input string was valid * * @return Log level if ok is true, undefined otherwise */ bladerf_log_level str2loglevel(const char *str, bool *ok); /** * Convert a module enumeration to a string * * @note The caller should not attempt to modify or free() the returned string. * * @param module Module to convert to string * @return String representation of module */ const char *module2str(bladerf_module m); /** * Convert a string to a module enumeration value. * * This is case-insensitive. * * @param str Module as a string. Should be "rx" or "tx". * * @return BLADERF_MODULE_RX, BLADERF_MODULE_TX, or BLADERF_MODULE_INVALID */ bladerf_module str2module(const char *str); /** * Convert a channel index to a string * * @note The caller should not attempt to modify or free() the returned string. * * @param ch Channel * @return String representation of channel */ const char *channel2str(bladerf_channel ch); /** * Convert a string to a channel index * * This is case-insensitive. * * @param str Channel as a string. * @return BLADERF_CHANNEL_RX(n) or BLADERF_CHANNEL_TX(n), * or BLADERF_CHANNEL_INVALID if not recognized */ bladerf_channel str2channel(char const *str); /** * Convert a direction enumeration to a string * * @note The caller should not attempt to modify or free() the returned string. * * @param dir direction * @return String representation of direction */ const char *direction2str(bladerf_direction dir); /** * Convert a channel enumeration to a direction * * @param ch channel * @return Direction of the channel */ bladerf_direction channel2direction(bladerf_channel ch); /** * Convert a trigger signal enumeration value to a string * * @param trigger Trigger item * * @return String representation or "Unknown" */ const char *trigger2str(bladerf_trigger_signal trigger); /** * Conver a string to a trigger signal enumeration value. * * This is case-insensitive. * * @param str Trigger as a string. Valid values include `Miniexp-1`, * `J51-1`, `J71-4`, or `User-0` through `User-7`. * * @return valid bladerf_trigger_signal value, or BLADERF_TRIGGER_INVALID */ bladerf_trigger_signal str2trigger(const char *str); /** * Convert a trigger role enumeration value to a string * * @param role Role value * * @return String representation or "Unknown" */ const char *triggerrole2str(bladerf_trigger_role role); /** * Convert a string to a trigger role enumeration value * * @param role Role value * * @return String representation or "Unknown" */ bladerf_trigger_role str2triggerrole(const char *str); /** * Convert a string to a loopback mode * * @param[in] str String to convert * @param[out] loopback Corresponding loopback mode. Only valid when * this function returns successfully * * @return 0 on success, -1 on invalid string */ int str2loopback(const char *str, bladerf_loopback *loopback); /** * @brief Convert a loopback mode to a string const * * @param[in] loopback The loopback mode * * @return NUL-terminated string */ char const *loopback2str(bladerf_loopback loopback); /** * Convert RX LNA gain strings to their associated enum values * * @param[in] str Gain string to convert * @param[out] gain Associated LNA gain string. Set to * BLADERF_LNA_GAIN_UNKNOWN on error. * * @return 0 on success, -1 on invalid string */ int str2lnagain(const char *str, bladerf_lna_gain *gain); /** * @brief Convert a tuning mode to a string const * * @param[in] mode The tuning mode * * @return NUL-terminated string */ char const *tuningmode2str(bladerf_tuning_mode mode); /** * Get a string description of the specified bladeRF backend * * @param b Backend to get a string for * * @return NUL-terminated string */ const char *backend_description(bladerf_backend b); /** * Convert bladeRF SC16Q11 DAC/ADC samples to floats * * Note that the both the input and output buffers contain interleaved, where * 1 sample is associated with two array elements: * [I, Q, I, Q, ... I, Q] * * Therefore, the caller must ensure the output buffer large enough to contain * 2*n floats (or 2*n*sizeof(float) bytes). * * @param[in] in Input buffer containing SC16Q11 samples * @param[out] out Output buffer of float values * @param[in] n Number of samples to convert */ void sc16q11_to_float(const int16_t *in, float *out, unsigned int n); /** * Convert float samples to bladeRF SC16Q11 DAC/ADC format * * Note that the both the input and output buffers contain interleaved, where * 1 sample is associated with two array elements: * [I, Q, I, Q, ... I, Q] * * Therefore, the caller must ensure the output buffer large enough to contain * 2*n int16_t's (or 2*n*sizeof(int16_t) bytes). * * @param[in] in Input buffer containing float samples * @param[out] out Output buffer of int16_t values * @param[in] n Number of samples to convert */ void float_to_sc16q11(const float *in, int16_t *out, unsigned int n); /** * Convert a string to a bladerf_cal_module value * * @param[in] str String to convert * * @return A bladerf_cal_module value. This will be set to * BLADERF_DC_CAL_INVALID if the provided string is invalid. */ bladerf_cal_module str_to_bladerf_cal_module(const char *str); /** * Convert a bladerf_smb_mode enumeration value to a string * * @param[in] mode Mode enum value * * @return String representation of enumeration, or "Unknown" for an * invalid value. */ const char *smb_mode_to_str(bladerf_smb_mode mode); /** * Convert a string to bladerf_smb_mode value * * @param[in] str String to convert * * @return A BLADERF_SMB_MODE_* value. BLADERF_SMB_MODE_INVALID will * returned for an invalid string. */ bladerf_smb_mode str_to_smb_mode(const char *str); /** * Convert a string to bladerf_tuning_mode value * * @param[in] str String to convert * * @return A BLADERF_TUNING_MODE_* value. BLADERF_TUNING_MODE_INVALID will * returned for an invalid string. */ bladerf_tuning_mode str_to_tuning_mode(const char *str); /** * Convert an ASCII char string to an unsigned integer and check its bounds * * @param[in] str String to convert * @param[in] min Value below this is bad * @param[in] max Value above this is bad * @param[out] ok True if conversion and bounds check did not fail * * @return An unsigned integer converted from an ASCII string */ unsigned int str2uint(const char *str, unsigned int min, unsigned int max, bool *ok); /** * Convert an ASCII char string to an integer and check its bounds * * @param[in] str String to convert * @param[in] min Value below this is bad * @param[in] max Value above this is bad * @param[out] ok True if conversion and bounds check did not fail * * @return A signed integer converted from an ASCII string */ int str2int(const char *str, int min, int max, bool *ok); /** * Convert an ASCII char string to a 64bit unsigned long long integer and check * its bounds * * @param[in] str String to convert * @param[in] min Value below this is bad * @param[in] max Value above this is bad * @param[out] ok True if conversion and bounds check did not fail * * @return An unsigned long long integer converted from an ASCII string */ uint64_t str2uint64(const char *str, uint64_t min, uint64_t max, bool *ok); /** * Convert an ASCII char string to a double and check its bounds * * @param[in] str String to convert * @param[in] min Value below this is bad * @param[in] max Value above this is bad * @param[out] ok True if conversion and bounds check did not fail * * @return A double converted from an ASCII string */ double str2double(const char *str, double min, double max, bool *ok); struct numeric_suffix { const char *suffix; uint64_t multiplier; }; typedef struct numeric_suffix numeric_suffix; /** * Convert an ASCII char string that has a suffix multipler to an unsigned * integer and check its bounds * * @param[in] str String to convert * @param[in] min Value below this is bad * @param[in] max Value above this is bad * @param[in] suffixes Array of numeric_suffix * @param[in] num_suff Total number of numeric_suffix in suffixes array * @param[out] ok True if conversion and bounds check did not fail * * @return An unsigned integer converted from an ASCII string */ unsigned int str2uint_suffix(const char *str, unsigned int min, unsigned int max, const struct numeric_suffix *suffixes, const size_t num_suff, bool *ok); /** * Convert an ASCII char string that has a suffix multipler to an unsigned * integer and check its bounds * * @param[in] str String to convert * @param[in] min Value below this is bad * @param[in] max Value above this is bad * @param[in] suffixes Array of numeric_suffix * @param[in] num_suff Total number of numeric_suffix in suffixes array * @param[out] ok True if conversion and bounds check did not fail * * @return An unsigned long long integer converted from an ASCII string */ uint64_t str2uint64_suffix(const char *str, uint64_t min, uint64_t max, const struct numeric_suffix *suffixes, const size_t num_suff, bool *ok); /** * Convert a string to a boolean * * @param[in] str String to convert * @param[out] val Boolean value * * @return 0 on success, value from \ref RETCODES list on failure */ int str2bool(const char *str, bool *val); #ifdef __cplusplus } /* extern "C" */ #endif #endif bladeRF-2024.05/host/common/include/dc_calibration.h000066400000000000000000000126521457144405000221750ustar00rootroot00000000000000/** * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ /* This file provides DC calibration routines that utilize libbladeRF */ #ifndef DC_CALIBRATION_H_ #define DC_CALIBRATION_H_ #include #ifdef __cplusplus extern "C" { #endif struct dc_calibration_params { uint64_t frequency; int16_t corr_i; int16_t corr_q; float error_i; float error_q; int16_t max_dc_i; int16_t max_dc_q; int16_t mid_dc_i; int16_t mid_dc_q; int16_t min_dc_i; int16_t min_dc_q; }; /** * Calibrate the specified LMS6002D module. * * Generally, one should run all of these calibrations prior to executing the RX * and TX auto calibration routines. * * Streams should not be running when attempting to call this function. * * Below are the case-insensitive options for the LMS6002D `module` string: * - LPF Tuning: "lpf_tuning", "lpftuning", "tuning" * - TX LPF: "tx_lpf", "txlpf" * - RX LPF: "rx_lpf", "rxlpf" * - RX VGA2 "rx_vga2", "rxvga2" * - All of the above: "all" * * @param dev bladeRF device handle * @param module LMS6002D module to calibrate. Passing NULL is synonymous * with specifying "ALL". * * @return 0 on success or libbladeRF return value on failure. * BLADERF_ERR_INVAL is returned if `module` is invalid. */ int dc_calibration_lms6(struct bladerf *dev, const char *module); /** * Perform DC offset calbration of the RX path. Neither RX or TX should be * used during this procedure, as the TX frequency may be adjusted to ensure * good results are obtained. * * The RX input should be disconected from any input sources or antennas when * performing this calibration. * * @pre dc_calibration_lms6() should have been called for all modules prior to * using this function. * * @param[in] dev bladeRF device handle * * @param[inout] params DC calibration input and output parameters. This * list should be populated to describe the * frequencies over which to calibrate. The * `corr_i` and `corr_q` fields will be filled in * for each entry. * * @param[in] num_params Number of entries in the `params` list. * * @param[in] show_status Print status information to stdout * * @return 0 on success or libbladeRF return value on failure. */ int dc_calibration_rx(struct bladerf *dev, struct dc_calibration_params *params, size_t num_params, bool show_status); /** * Perform DC offset calbration of the TX path. * * This requires use of both RX and TX modules in an internal loopback mode; * neither should be in use when this function is called. It should not * be neccessary to disconnect the RX and TX ports, but it is still recommended, * just to err on the side of caution. * * @pre dc_calibration_lms6() should have been called for all modules prior to * using this function. * * @param dev bladeRF device handle * * @return 0 on success or libbladeRF return value on failure. */ int dc_calibration_tx(struct bladerf *dev, struct dc_calibration_params *params, size_t num_params, bool show_status); /** * Convenience wrapper around dc_cal_rx() and dc_cal_tx() * * @pre dc_calibration_lms6() should have been called for all modules prior to * using this function. * * @param[in] dev Device handle * @param[in] module BLADERF_MODULE_RX or BLADERF_MODULE_TX * @param[inout] params DC calibration input and output parameters. This * list should be populated to describe the * frequencies over which to calibrate. The * `corr_i` and `corr_q` fields will be filled in * for each entry. * * @param[in] num_params Number of entries in the `params` list. * @param[in] show_status Print status information to stdout * * @return 0 on success or libbladeRF return value on failure. */ int dc_calibration(struct bladerf *dev, bladerf_module module, struct dc_calibration_params *params, size_t num_params, bool show_status); #ifdef __cplusplus } /* extern "C" */ #endif #endif bladeRF-2024.05/host/common/include/devcfg.h000066400000000000000000000107031457144405000204710ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014-2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef DEVCFG_H_ #define DEVCFG_H_ #include #include #include "rel_assert.h" #include "host_config.h" #ifdef __cplusplus extern "C" { #endif #define DEVCFG_OPTIONS_BASE "hd:l:v:s:b:f:" /** * Device configuration parameters */ struct devcfg { char *device_specifier; unsigned int tx_frequency; unsigned int tx_bandwidth; unsigned int tx_samplerate; int txvga1; int txvga2; unsigned int rx_frequency; unsigned int rx_bandwidth; unsigned int rx_samplerate; bladerf_lna_gain lnagain; int rxvga1; int rxvga2; bladerf_loopback loopback; bladerf_log_level verbosity; bool enable_xb200; unsigned int samples_per_buffer; unsigned int num_buffers; unsigned int num_transfers; unsigned int stream_timeout_ms; unsigned int sync_timeout_ms; }; /** * Initialize the specified device_config structure to default values * * @param c Configuration to initialize */ void devcfg_init(struct devcfg *c); /** * Deinitialize any items allocated in the provided device configuration * * @param c Configuration to deinitialize */ void devcfg_deinit(struct devcfg *c); /** * Creates an option array with the app-specific options appended to the common * devcfg options. The app_options should be 0-terminated. * * The caller is responsible for freeing the resturned structure. * * @return Heap-allocated array on success, NULL on failure */ struct option *devcfg_get_long_options(const struct option *app_options); /** * Handle command line arguments and update the specified device configuration * accordingly. * * @param argc # of arguments in argv * @param argv Array of arguments * * @param option_str Options string to pass to getopt_long(). This should * include DEVCFG_OPTIONS_BASE, with any * application-handled options appended. * * @param long_options List of long options created by caller * * @param c Device configuration to update. It should have * already been initialized via devcfg_init() * * @return 0 on success, -1 on failure, 1 if help is requested */ int devcfg_handle_args(int argc, char **argv, const char *options, const struct option *long_options, struct devcfg *c); /** * Wrapper around bladerf_sync_config, using parameters in the specified * devcfg. Optionally, enable the associated module. */ int devcfg_perform_sync_config(struct bladerf *dev, bladerf_module module, bladerf_format format, const struct devcfg *config, bool enable_module); /** * Apply the provided device_config to the specified device * * @param dev Device to configure * @param c Configuration parameters * * @return 0 on succes, -1 on failure */ int devcfg_apply(struct bladerf *dev, const struct devcfg *c); /** * Print help info about arguments handled by devcfg_handle_args() * * @param title Optional title to print before usage information */ void devcfg_print_common_help(const char *title); #ifdef __cplusplus } /* extern "C" */ #endif #endif bladeRF-2024.05/host/common/include/host_config.h.in000066400000000000000000000271621457144405000221510ustar00rootroot00000000000000/** * @file host_config.h.in * * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2013-2018 Nuand LLC. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef HOST_CONFIG_H__ #define HOST_CONFIG_H__ #cmakedefine01 BLADERF_OS_LINUX #cmakedefine01 BLADERF_OS_FREEBSD #cmakedefine01 BLADERF_OS_OSX #cmakedefine01 BLADERF_OS_WINDOWS #cmakedefine01 BLADERF_BIG_ENDIAN #if !(BLADERF_OS_LINUX || BLADERF_OS_OSX || BLADERF_OS_WINDOWS || BLADERF_OS_FREEBSD) # error "Build not configured for any supported operating systems" #endif #if 1 < (BLADERF_OS_LINUX + BLADERF_OS_OSX + BLADERF_OS_WINDOWS + BLADERF_OS_FREEBSD) #error "Build configured for multiple operating systems" #endif #cmakedefine01 HAVE_CLOCK_GETTIME /******************************************************************************* * Endianness conversions * * HOST_TO_LE16 16-bit host endianness to little endian conversion * LE16_TO_HOST 16-bit little endian to host endianness conversion * HOST_TO_BE16 16-bit host endianness to big endian conversion * BE16_TO_HOST 16-bit big endian to host endianness conversion * HOST_TO_LE32 32-bit host endianness to little endian conversion * LE32_TO_HOST 32-bit little endian to host endianness conversion * HOST_TO_BE32 32-bit host endianness to big endian conversion * BE32_TO_HOST 32-bit big endian to host endianness conversion * HOST_TO_BE64 64-bit host endianness to big endian conversion * BE64_TO_HOST 64-bit big endian to host endianness conversion ******************************************************************************/ /*----------------------- * Linux *---------------------*/ #if BLADERF_OS_LINUX #include #define HOST_TO_LE16(val) htole16(val) #define LE16_TO_HOST(val) le16toh(val) #define HOST_TO_BE16(val) htobe16(val) #define BE16_TO_HOST(val) be16toh(val) #define HOST_TO_LE32(val) htole32(val) #define LE32_TO_HOST(val) le32toh(val) #define HOST_TO_BE32(val) htobe32(val) #define BE32_TO_HOST(val) be32toh(val) #define HOST_TO_LE64(val) htole64(val) #define LE64_TO_HOST(val) le64toh(val) #define HOST_TO_BE64(val) be64toh(val) #define BE64_TO_HOST(val) be64toh(val) /*----------------------- * FREEBSD *---------------------*/ #elif BLADERF_OS_FREEBSD #include #define HOST_TO_LE16(val) htole16(val) #define LE16_TO_HOST(val) le16toh(val) #define HOST_TO_BE16(val) htobe16(val) #define BE16_TO_HOST(val) be16toh(val) #define HOST_TO_LE32(val) htole32(val) #define LE32_TO_HOST(val) le32toh(val) #define HOST_TO_BE32(val) htobe32(val) #define BE32_TO_HOST(val) be32toh(val) #define HOST_TO_LE64(val) htole64(val) #define LE64_TO_HOST(val) le64toh(val) #define HOST_TO_BE64(val) be64toh(val) #define BE64_TO_HOST(val) be64toh(val) /*----------------------- * Apple OSX *---------------------*/ #elif BLADERF_OS_OSX #include #define HOST_TO_LE16(val) OSSwapHostToLittleInt16(val) #define LE16_TO_HOST(val) OSSwapLittleToHostInt16(val) #define HOST_TO_BE16(val) OSSwapHostToBigInt16(val) #define BE16_TO_HOST(val) OSSwapBigToHostInt16(val) #define HOST_TO_LE32(val) OSSwapHostToLittleInt32(val) #define LE32_TO_HOST(val) OSSwapLittleToHostInt32(val) #define HOST_TO_BE32(val) OSSwapHostToBigInt32(val) #define BE32_TO_HOST(val) OSSwapBigToHostInt32(val) #define HOST_TO_LE64(val) OSSwapHostToLittleInt64(val) #define LE64_TO_HOST(val) OSSwapLittleToHostInt64(val) #define HOST_TO_BE64(val) OSSwapHostToBigInt64(val) #define BE64_TO_HOST(val) OSSwapBigToHostInt64(val) /*----------------------- * Windows *---------------------*/ #elif BLADERF_OS_WINDOWS #include /* We'll assume little endian for Windows platforms: * http://blogs.msdn.com/b/larryosterman/archive/2005/06/07/426334.aspx */ #define HOST_TO_LE16(val) (val) #define LE16_TO_HOST(val) (val) #define HOST_TO_BE16(val) _byteswap_ushort(val) #define BE16_TO_HOST(val) _byteswap_ushort(val) #define HOST_TO_LE32(val) (val) #define LE32_TO_HOST(val) (val) #define HOST_TO_BE32(val) _byteswap_ulong(val) #define BE32_TO_HOST(val) _byteswap_ulong(val) #define HOST_TO_LE64(val) (val) #define LE64_TO_HOST(val) (val) #define HOST_TO_BE64(val) _byteswap_uint64(val) #define BE64_TO_HOST(val) _byteswap_uint64(val) /*----------------------- * Unsupported or bug *---------------------*/ #else #error "Encountered an OS that we do not have endian wrappers for?" #endif /******************************************************************************* * Endianness conversions for constants * * We shouldn't be using the above items for assigning constants because the * implementations may be functions [1]. * * [1] https://sourceware.org/bugzilla/show_bug.cgi?id=17679#c7 ******************************************************************************/ #define BLADERF_BYTESWAP16(x) ((((x) & 0xff00) >> 8) | (((x) & 0x00ff) << 8)) #define BLADERF_BYTESWAP32(x) ((((x) & 0xff000000) >> 24) | \ (((x) & 0x00ff0000) >> 8) | \ (((x) & 0x0000ff00) << 8) | \ (((x) & 0x000000ff) << 24) ) #define BLADERF_BYTESWAP64(x) ((((x) & 0xff00000000000000llu) >> 56) | \ (((x) & 0x00ff000000000000llu) >> 40) | \ (((x) & 0x0000ff0000000000llu) >> 24) | \ (((x) & 0x000000ff00000000llu) >> 8) | \ (((x) & 0x00000000ff000000llu) << 8) | \ (((x) & 0x0000000000ff0000llu) << 24) | \ (((x) & 0x000000000000ff00llu) << 40) | \ (((x) & 0x00000000000000ffllu) << 56) | \ #if BLADERF_BIG_ENDIAN # define HOST_TO_LE16_CONST(x) (BLADERF_BYTESWAP16(x)) # define LE16_TO_HOST_CONST(x) (BLADERF_BYTESWAP16(x)) # define HOST_TO_BE16_CONST(x) (x) # define BE16_TO_HOST_CONST(x) (x) # define HOST_TO_LE32_CONST(x) (BLADERF_BYTESWAP32(x)) # define LE32_TO_HOST_CONST(x) (BLADERF_BYTESWAP32(x)) # define HOST_TO_BE32_CONST(x) (x) # define BE32_TO_HOST_CONST(x) (x) # define HOST_TO_LE64_CONST(x) (BLADERF_BYTESWAP64(x)) # define LE64_TO_HOST_CONST(x) (BLADERF_BYTESWAP64(x)) # define HOST_TO_BE64_CONST(x) (x) # define BE64_TO_HOST_CONST(x) (x) #else # define HOST_TO_LE16_CONST(x) (x) # define LE16_TO_HOST_CONST(x) (x) # define HOST_TO_BE16_CONST(x) (BLADERF_BYTESWAP16(x)) # define BE16_TO_HOST_CONST(x) (BLADERF_BYTESWAP16(x)) # define HOST_TO_LE32_CONST(x) (x) # define LE32_TO_HOST_CONST(x) (x) # define HOST_TO_BE32_CONST(x) (BLADERF_BYTESWAP32(x)) # define BE32_TO_HOST_CONST(x) (BLADERF_BYTESWAP32(x)) # define HOST_TO_LE64_CONST(x) (x) # define LE64_TO_HOST_CONST(x) (x) # define HOST_TO_BE64_CONST(x) (BLADERF_BYTESWAP64(x)) # define BE64_TO_HOST_CONST(x) (BLADERF_BYTESWAP64(x)) #endif /******************************************************************************* * Miscellaneous Linux fixups ******************************************************************************/ #if BLADERF_OS_LINUX /* Added here just to keep this out of the other source files. We'll have * a few Windows replacements for unistd.h items. */ #include #include /******************************************************************************* * Miscellaneous FREEBSD fixups ******************************************************************************/ #elif BLADERF_OS_FREEBSD #include #include #include /******************************************************************************* * Miscellaneous OSX fixups ******************************************************************************/ #elif BLADERF_OS_OSX #include #include /******************************************************************************* * Miscellaneous Windows fixups ******************************************************************************/ #elif BLADERF_OS_WINDOWS /* Rename a few functions and types */ #include #include #include #define usleep(x) Sleep((x+999)/1000) /* Changes specific to Microsoft Visual Studio and its C89-compliant ways */ #if _MSC_VER # define strtok_r strtok_s # define strtoull _strtoui64 #if _MSC_VER < 1900 # define snprintf _snprintf # define vsnprintf _vsnprintf #else #define STDC99 #endif # define strcasecmp _stricmp # define strncasecmp _strnicmp # define fileno _fileno # define strdup _strdup # define access _access # define chdir _chdir # define getcwd _getcwd # define rmdir _rmdir # define unlink _unlink # define mkdir(n, m) _mkdir(n) /* ssize_t lives elsewhere */ # include # define ssize_t SSIZE_T /* With msvc, inline is only available for C++. Otherwise we need to use __inline: * http://msdn.microsoft.com/en-us/library/z8y1yy88.aspx */ # if !defined(__cplusplus) # define inline __inline # endif /* Visual studio 2012 compiler (v17.00.XX) doesn't have round functions */ # if _MSC_VER <= 1700 # include static inline float roundf(float x) { return x >= 0.0f ? floorf(x + 0.5f) : ceilf(x - 0.5f); } static inline double round(double x) { return x >= 0.0 ? floor(x + 0.5) : ceil(x - 0.5); } # endif #endif // _MSC_VER #endif /* Windows (msvc) does not support C99 designated initializers. * * Therefore, the following macro should be used. However, note that you'll * need to be sure to keep your elements in order to avoid breaking Windows * portability! * * http://stackoverflow.com/questions/5440611/how-to-rewrite-c-struct-designated-initializers-to-c89-resp-msvc-c-compiler * * Here's a sample regexep you could use in vim to clean these up in your code: * @\(\s\+\)\(\.[a-zA-Z0-9_]\+\)\s*=\s*\([a-zA-Z0-9_]\+\)\(,\)\?@\1FIELD_INIT(\2,\3)\4@gc */ #if _MSC_VER # define FIELD_INIT(field, ...) __VA_ARGS__ #else # define FIELD_INIT(field, ...) field = __VA_ARGS__ #endif // _MSC_VER /******************************************************************************* * Miscellaneous utility macros ******************************************************************************/ #define ARRAY_SIZE(n) (sizeof(n) / sizeof(n[0])) /** * GCC 7+ warns on implicit fallthroughs in switch statements * (-Wimplicit-fallthrough), which we use in a couple places for simplicity. * The statement attribute syntax used to suppress this warning is not * supported by anything else. */ #if __GNUC__ >= 7 #define EXPLICIT_FALLTHROUGH __attribute__((fallthrough)) #else #define EXPLICIT_FALLTHROUGH #endif // __GNUC__ >= 7 #endif bladeRF-2024.05/host/common/include/iterators.h000066400000000000000000000043501457144405000212500ustar00rootroot00000000000000/** * @file iterators.h * * @brief Useful iterators for working with channels, etc * * Copyright (c) 2018 Nuand LLC. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ /** * @brief Translate a bladerf_direction and channel number to a * bladerf_channel * * @param _dir Direction * @param _idx Channel number * * @return BLADERF_CHANNEL_TX(_idx) or BLADERF_CHANNEL_RX(_idx) */ #define CHANNEL_IDX(_dir, _idx) \ (BLADERF_TX == _dir) ? BLADERF_CHANNEL_TX(_idx) : BLADERF_CHANNEL_RX(_idx) /** * @brief Iterate over all bladerf_directions * * @param _dir Direction */ #define FOR_EACH_DIRECTION(_dir) \ for (_dir = BLADERF_RX; _dir <= BLADERF_TX; ++_dir) /** * @brief Iterate over all channels in a given direction * * @param _dir Direction * @param _count Number of channels * @param[out] _index Index variable (size_t) * @param[out] _channel Channel variable (bladerf_channel) * * @return { description_of_the_return_value } */ #define FOR_EACH_CHANNEL(_dir, _count, _index, _channel) \ for (_index = 0, _channel = CHANNEL_IDX(_dir, _index); _index < _count; \ ++_index, _channel = CHANNEL_IDX(_dir, _index)) bladeRF-2024.05/host/common/include/log.h000066400000000000000000000106421457144405000200160ustar00rootroot00000000000000/** * @file log.h * * @brief Simple log message * * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2013 Nuand LLC. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef LOG_H__ #define LOG_H__ #include #include #include "libbladeRF.h" #ifdef __cplusplus extern "C" { #endif #ifdef SHORT_FILE_ # define THIS_FILE SHORT_FILE_ #else #if 0 # warning "SHORT_FILE_ was not defined. Using __FILE__ instead." #endif # define THIS_FILE __FILE__ #endif #define LOG_STRINGIFY__(x) #x #define LOG_STRINGIFY_(x) LOG_STRINGIFY__(x) #define LOG_EXPAND__(x) #x #define LOG_EXPAND_(x) LOG_EXPAND__(x) /** * @defgroup LOG_MACROS Logging macros * @{ */ /** Logs a verbose message. Does not include function/line information */ #define log_verbose(...) \ LOG_WRITE(BLADERF_LOG_LEVEL_VERBOSE, "[VERBOSE", __VA_ARGS__) /** Logs a debug message. Does not include function/line information */ #define log_debug(...) \ LOG_WRITE(BLADERF_LOG_LEVEL_DEBUG, "[DEBUG", __VA_ARGS__) /** Logs an info message. Does not include function/line information*/ #define log_info(...) \ LOG_WRITE(BLADERF_LOG_LEVEL_INFO, "[INFO", __VA_ARGS__) /** Logs a warning message. Includes function/line information */ #define log_warning(...) \ LOG_WRITE(BLADERF_LOG_LEVEL_WARNING, "[WARNING", __VA_ARGS__) /** Logs an error message. Includes function/line information */ #define log_error(...) \ LOG_WRITE(BLADERF_LOG_LEVEL_ERROR, "[ERROR", __VA_ARGS__) /** Logs a critical error message. Includes function/line information */ #define log_critical(...) \ LOG_WRITE(BLADERF_LOG_LEVEL_CRITICAL, "[CRITICAL", __VA_ARGS__) /** @} */ #ifdef LOG_INCLUDE_FILE_INFO # define LOG_WRITE(LEVEL, LEVEL_STRING, ...) \ do { log_write(LEVEL, LEVEL_STRING \ " @ " LOG_EXPAND_(THIS_FILE) \ ":" LOG_STRINGIFY_(__LINE__) "] " \ __VA_ARGS__); \ } while (0) #else # define LOG_WRITE(LEVEL, LEVEL_STRING, ...) \ do { log_write(LEVEL, LEVEL_STRING "] " __VA_ARGS__); } while (0) #endif /** * Writes a message to the logger with the specified log level. This function * should only be invoked indirectly through one of the log_* * convenience macros above to ensure consistent formatting of log messages. * * @param level The severity level of the message * @param format The printf-style format string * @param ... Optional values for format specifier substitution */ #ifdef LOGGING_ENABLED void log_write(bladerf_log_level level, const char *format, ...); #else #define log_write(level, format, ...) do {} while(0) #endif /** * Sets the filter level for displayed log messages. Messages that are at * or above the specified log level will be written to the log output, while * messages with a lower log level will be suppressed. This function returns * the previous log level. * * @param level The new log level filter value */ #ifdef LOGGING_ENABLED void log_set_verbosity(bladerf_log_level level); #else #define log_set_verbosity(level) do {} while (0) #endif /** * @brief Gets the current filter level for displayed log messages. * * @return bladerf_log_level */ #ifdef LOGGING_ENABLED bladerf_log_level log_get_verbosity(); #else #define log_get_verbosity(...) BLADERF_LOG_LEVEL_SILENT #endif #ifdef __cplusplus } /* extern "C" */ #endif #endif bladeRF-2024.05/host/common/include/minmax.h000066400000000000000000000021441457144405000205240ustar00rootroot00000000000000/** * @file minmax.h * * @brief These static inline routines are preferred over the use of macros, * as they provide type safety. */ #ifndef MINMAX_H__ #define MINMAX_H__ #include #include #include "host_config.h" static inline size_t min_sz(size_t x, size_t y) { return x < y ? x : y; } static inline size_t max_sz(size_t x, size_t y) { return x > y ? x : y; } static inline unsigned int uint_min(unsigned int x, unsigned int y) { return x < y ? x : y; } static inline unsigned int uint_max(unsigned int x, unsigned int y) { return x > y ? x : y; } static inline uint32_t u32_min(uint32_t x, uint32_t y) { return x < y ? x : y; } static inline uint32_t u32_max(uint32_t x, uint32_t y) { return x > y ? x : y; } static inline int64_t i64_min(int64_t x, int64_t y) { return x < y ? x : y; } static inline uint64_t u64_min(uint64_t x, uint64_t y) { return x < y ? x : y; } static inline int64_t i64_max(int64_t x, int64_t y) { return x > y ? x : y; } static inline uint64_t u64_max(uint64_t x, uint64_t y) { return x > y ? x : y; } #endif bladeRF-2024.05/host/common/include/osx/000077500000000000000000000000001457144405000176725ustar00rootroot00000000000000bladeRF-2024.05/host/common/include/osx/clock_gettime.h000066400000000000000000000032771457144405000226650ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2013-2017 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef OSX_CLOCK_GETTIME_H_ #define OSX_CLOCK_GETTIME_H_ #include "host_config.h" #include #if HAVE_CLOCK_GETTIME == 0 #ifdef __cplusplus extern "C" { #endif // __cplusplus #ifndef __MACH__ # error "This file is intended for use with OSX systems only." #endif // __MACH__ typedef int clockid_t; #define CLOCK_REALTIME 0 int clock_gettime(clockid_t clk_id, struct timespec *tp); #ifdef __cplusplus } /* extern "C" */ #endif // __cplusplus #endif // !HAVE_CLOCK_GETTIME #endif // OSX_CLOCK_GETTIME_H bladeRF-2024.05/host/common/include/parse.h000066400000000000000000000066221457144405000203520ustar00rootroot00000000000000/** * @file parse.h * * @brief String and file parsing functions * * Copyright (c) 2017 Nuand LLC. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef PARSE_H_ #define PARSE_H_ #include "libbladeRF.h" #include #include #ifdef __cplusplus extern "C" { #endif /** * Convert ASCII string into arguments * * @param[in] line Command line string * @param[in] comment_char Everything after this charater is discarded * @param[out] argv A pointer to a double pointer of successfully * extracted arguments * * @return -2 on unterminated quote, -1 on error, otherwise number of arguments */ int str2args(const char *line, char comment_char, char ***argv); /** * Free arguments returned by str2args() * * @param[in] argc Number of arguments * @param[in] argv Pointer to table of pointers to arguments */ void free_args(int argc, char **argv); struct config_options { char *key; char *value; int lineno; }; /** * Convert a bladeRF options file to an array of strings * * @param[in] dev Pointer to bladerf device * @param[in] buf String buffer containing entire file * @param[in] buf_sz String buffer containing entire file * @param[out] opts A pointer to an array of strings containing options for * this device * * @return number of options on success, BLADERF_ERR_* values on other failures */ int str2options(struct bladerf *dev, const char *buf, size_t buf_sz, struct config_options **opts); /** * Free an array of previously returned options * * @param[in] optv Pointer to array of config_options * @param[in] optc Number of config_options */ void free_opts(struct config_options *optv, int optc); /** * Convert comma-delimited string into integer arguments * * @param[in] line Line to split * @param[out] args Pointer to double-pointer of successfully extracted * integers * * @see free_csv2int() * * @return -1 on error, otherwise number of arguments */ int csv2int(const char *line, int ***args); /** * Free array of previously-returned csv2int arguments * * @param[in] argc Number of arguments * @param[in] args Pointer to array of pointers to ints */ void free_csv2int(int argc, int **args); #ifdef __cplusplus } /* extern "C" */ #endif #endif bladeRF-2024.05/host/common/include/range.h000066400000000000000000000040711457144405000203300ustar00rootroot00000000000000/* This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2018 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef RANGE_H_ #define RANGE_H_ #if !defined(BLADERF_NIOS_BUILD) && !defined(BLADERF_NIOS_PC_SIMULATION) #include #else #include "libbladeRF_nios_compat.h" #endif #include "bladerf2_common.h" #ifdef BLADERF_NIOS_BUILD // don't do scaling on the Nios, since multiplication and division suck #define __scale(r, v) (v) #define __unscale(r, v) (v) #else #define __scale(r, v) ((float)(v) / (r)->scale) #define __unscale(r, v) ((float)(v) * (r)->scale) #endif // BLADERF_NIOS_BUILD #define __scale_int(r, v) (__round_int(__scale(r, v))) #define __scale_int64(r, v) (__round_int64(__scale(r, v))) #define __unscale_int(r, v) (__round_int(__unscale(r, v))) #define __unscale_int64(r, v) (__round_int64(__unscale(r, v))) bool is_within_range(struct bladerf_range const *range, int64_t value); int64_t clamp_to_range(struct bladerf_range const *range, int64_t value); #endif // RANGE_H_ bladeRF-2024.05/host/common/include/rel_assert.h000066400000000000000000000003251457144405000213750ustar00rootroot00000000000000#ifndef _REL_ASSERT_H_ #define _REL_ASSERT_H_ #ifdef NDEBUG #define NDEBUG_UNDEF #endif #undef NDEBUG #include #ifdef NDEBUG_UNDEF #define NDEBUG #undef NDEBUG_UNDEF #endif #endif /* _REL_ASSERT_H_ */bladeRF-2024.05/host/common/include/sha256.h000066400000000000000000000040711457144405000202440ustar00rootroot00000000000000/*- * Copyright 2005 Colin Percival * Copyright 2013 Daniel Gröber * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * $FreeBSD$ */ #ifndef _SHA256_H_ #define _SHA256_H_ #include #include #ifdef __cplusplus extern "C" { #endif #define SHA256_DIGEST_SIZE 32 typedef struct SHA256Context { uint32_t state[8]; uint32_t count[2]; unsigned char buf[64]; } SHA256_CTX; void SHA256_Init(SHA256_CTX *); void SHA256_Update(SHA256_CTX *, const void *, size_t); void SHA256_Final(unsigned char [32], SHA256_CTX *); /* char *SHA256_End(SHA256_CTX *, char *); */ /* char *SHA256_File(const char *, char *); */ /* char *SHA256_FileChunk(const char *, char *, off_t, off_t); */ /* char *SHA256_Data(const void *, unsigned int, char *); */ #ifdef __cplusplus } /* extern "C" */ #endif #endif /* !_SHA256_H_ */ bladeRF-2024.05/host/common/include/str_queue.h000066400000000000000000000052331457144405000212510ustar00rootroot00000000000000/** * @file str_queue.h * * @brief Simple string queue * * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2014 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef STR_QUEUE_H_ #define STR_QUEUE_H_ #include #ifdef __cplusplus extern "C" { #endif struct str_queue_entry; struct str_queue { struct str_queue_entry *head; struct str_queue_entry *tail; }; /** * Allocate and initialize a string queue * * @param[in] q Queue to initialize */ void str_queue_init(struct str_queue *q); /** * Deallocate all resources used by the specified string queue * * @param[in] q Queue to deinitialize */ void str_queue_deinit(struct str_queue *q); /** Deinitialization simply clears out the queue - same operation */ #define str_queue_clear str_queue_deinit /** * Add a string to the end of the provided string queue * * @param q String queue to append to * @param cmd_str String to append. This string will be copied * to a heap-allocated buffer. * * @return 0 on success, -1 on memory allocation failure */ int str_queue_enq(struct str_queue *q, const char *str); /** * Remove a string from the front of the specified string queue. * * @param[in] q Queue to remove from * * @return Heap-allocated string removed from queue, or NULL if the queue is * empty. The caller is responsible for free()-ing the returned string. */ char * str_queue_deq(struct str_queue *q); /** * @return true if the queue is empty */ bool str_queue_empty(struct str_queue *q); #ifdef __cplusplus } /* extern "C" */ #endif #endif bladeRF-2024.05/host/common/include/thread.h000066400000000000000000000054001457144405000205000ustar00rootroot00000000000000/** * @file thread.h * * @brief Threading portability and debug wrappers * * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2014 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef BLADERF_THREAD_H_ #define BLADERF_THREAD_H_ /* Currently, only pthreads is supported. In the future, native windows threads * may be used; one of the objectives of this file is to ease that transistion. */ #include #include "rel_assert.h" #define MUTEX pthread_mutex_t #ifdef ENABLE_LOCK_CHECKS # define MUTEX_INIT(m) do { \ int status; \ pthread_mutexattr_t mutex_attr; \ status = pthread_mutexattr_init(&mutex_attr); \ assert(status == 0 && "Mutex attr init failure"); \ status = pthread_mutexattr_settype(&mutex_attr, \ PTHREAD_MUTEX_ERRORCHECK); \ assert(status == 0 && "Mutex attr setype failure"); \ status = pthread_mutex_init(m, &mutex_attr); \ assert(status == 0 && "Mutex init failure"); \ } while (0) # define MUTEX_LOCK(m) do { \ int status = pthread_mutex_lock(m); \ assert(status == 0 && "Mutex lock failure");\ } while (0) # define MUTEX_UNLOCK(m) do { \ int status = pthread_mutex_unlock(m); \ assert(status == 0 && "Mutex unlock failure");\ } while (0) # define MUTEX_DESTROY(m) do { \ int status = pthread_mutex_destroy(m); \ assert(status == 0 && "Mutex destroy failure");\ } while (0) #else # define MUTEX_INIT(m) pthread_mutex_init(m, NULL) # define MUTEX_LOCK(m) pthread_mutex_lock(m) # define MUTEX_UNLOCK(m) pthread_mutex_unlock(m) # define MUTEX_DESTROY(m) pthread_mutex_destroy(m) #endif #endif bladeRF-2024.05/host/common/include/windows/000077500000000000000000000000001457144405000205535ustar00rootroot00000000000000bladeRF-2024.05/host/common/include/windows/c99/000077500000000000000000000000001457144405000211575ustar00rootroot00000000000000bladeRF-2024.05/host/common/include/windows/c99/inttypes.h000066400000000000000000000177231457144405000232210ustar00rootroot00000000000000// ISO C9x compliant inttypes.h for Microsoft Visual Studio // Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 // // The following BSD license is included under: // legal/licenses/LICENSE.BSD.msc_inttypes // // Copyright (c) 2006-2013 Alexander Chemeris // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // // 2. Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // // 3. Neither the name of the product nor the names of its contributors may // be used to endorse or promote products derived from this software // without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // /////////////////////////////////////////////////////////////////////////////// #ifndef _MSC_VER // [ #error "Use this header only with Microsoft Visual C++ compilers!" #endif // _MSC_VER ] #ifndef _MSC_INTTYPES_H_ // [ #define _MSC_INTTYPES_H_ #if _MSC_VER > 1000 #pragma once #endif #include "stdint.h" // 7.8 Format conversion of integer types typedef struct { intmax_t quot; intmax_t rem; } imaxdiv_t; // 7.8.1 Macros for format specifiers #if !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS) // [ See footnote 185 at page 198 // The fprintf macros for signed integers are: #define PRId8 "d" #define PRIi8 "i" #define PRIdLEAST8 "d" #define PRIiLEAST8 "i" #define PRIdFAST8 "d" #define PRIiFAST8 "i" #define PRId16 "hd" #define PRIi16 "hi" #define PRIdLEAST16 "hd" #define PRIiLEAST16 "hi" #define PRIdFAST16 "hd" #define PRIiFAST16 "hi" #define PRId32 "I32d" #define PRIi32 "I32i" #define PRIdLEAST32 "I32d" #define PRIiLEAST32 "I32i" #define PRIdFAST32 "I32d" #define PRIiFAST32 "I32i" #define PRId64 "I64d" #define PRIi64 "I64i" #define PRIdLEAST64 "I64d" #define PRIiLEAST64 "I64i" #define PRIdFAST64 "I64d" #define PRIiFAST64 "I64i" #define PRIdMAX "I64d" #define PRIiMAX "I64i" #define PRIdPTR "Id" #define PRIiPTR "Ii" // The fprintf macros for unsigned integers are: #define PRIo8 "o" #define PRIu8 "u" #define PRIx8 "x" #define PRIX8 "X" #define PRIoLEAST8 "o" #define PRIuLEAST8 "u" #define PRIxLEAST8 "x" #define PRIXLEAST8 "X" #define PRIoFAST8 "o" #define PRIuFAST8 "u" #define PRIxFAST8 "x" #define PRIXFAST8 "X" #define PRIo16 "ho" #define PRIu16 "hu" #define PRIx16 "hx" #define PRIX16 "hX" #define PRIoLEAST16 "ho" #define PRIuLEAST16 "hu" #define PRIxLEAST16 "hx" #define PRIXLEAST16 "hX" #define PRIoFAST16 "ho" #define PRIuFAST16 "hu" #define PRIxFAST16 "hx" #define PRIXFAST16 "hX" #define PRIo32 "I32o" #define PRIu32 "I32u" #define PRIx32 "I32x" #define PRIX32 "I32X" #define PRIoLEAST32 "I32o" #define PRIuLEAST32 "I32u" #define PRIxLEAST32 "I32x" #define PRIXLEAST32 "I32X" #define PRIoFAST32 "I32o" #define PRIuFAST32 "I32u" #define PRIxFAST32 "I32x" #define PRIXFAST32 "I32X" #define PRIo64 "I64o" #define PRIu64 "I64u" #define PRIx64 "I64x" #define PRIX64 "I64X" #define PRIoLEAST64 "I64o" #define PRIuLEAST64 "I64u" #define PRIxLEAST64 "I64x" #define PRIXLEAST64 "I64X" #define PRIoFAST64 "I64o" #define PRIuFAST64 "I64u" #define PRIxFAST64 "I64x" #define PRIXFAST64 "I64X" #define PRIoMAX "I64o" #define PRIuMAX "I64u" #define PRIxMAX "I64x" #define PRIXMAX "I64X" #define PRIoPTR "Io" #define PRIuPTR "Iu" #define PRIxPTR "Ix" #define PRIXPTR "IX" // The fscanf macros for signed integers are: #define SCNd8 "d" #define SCNi8 "i" #define SCNdLEAST8 "d" #define SCNiLEAST8 "i" #define SCNdFAST8 "d" #define SCNiFAST8 "i" #define SCNd16 "hd" #define SCNi16 "hi" #define SCNdLEAST16 "hd" #define SCNiLEAST16 "hi" #define SCNdFAST16 "hd" #define SCNiFAST16 "hi" #define SCNd32 "ld" #define SCNi32 "li" #define SCNdLEAST32 "ld" #define SCNiLEAST32 "li" #define SCNdFAST32 "ld" #define SCNiFAST32 "li" #define SCNd64 "I64d" #define SCNi64 "I64i" #define SCNdLEAST64 "I64d" #define SCNiLEAST64 "I64i" #define SCNdFAST64 "I64d" #define SCNiFAST64 "I64i" #define SCNdMAX "I64d" #define SCNiMAX "I64i" #ifdef _WIN64 // [ # define SCNdPTR "I64d" # define SCNiPTR "I64i" #else // _WIN64 ][ # define SCNdPTR "ld" # define SCNiPTR "li" #endif // _WIN64 ] // The fscanf macros for unsigned integers are: #define SCNo8 "o" #define SCNu8 "u" #define SCNx8 "x" #define SCNX8 "X" #define SCNoLEAST8 "o" #define SCNuLEAST8 "u" #define SCNxLEAST8 "x" #define SCNXLEAST8 "X" #define SCNoFAST8 "o" #define SCNuFAST8 "u" #define SCNxFAST8 "x" #define SCNXFAST8 "X" #define SCNo16 "ho" #define SCNu16 "hu" #define SCNx16 "hx" #define SCNX16 "hX" #define SCNoLEAST16 "ho" #define SCNuLEAST16 "hu" #define SCNxLEAST16 "hx" #define SCNXLEAST16 "hX" #define SCNoFAST16 "ho" #define SCNuFAST16 "hu" #define SCNxFAST16 "hx" #define SCNXFAST16 "hX" #define SCNo32 "lo" #define SCNu32 "lu" #define SCNx32 "lx" #define SCNX32 "lX" #define SCNoLEAST32 "lo" #define SCNuLEAST32 "lu" #define SCNxLEAST32 "lx" #define SCNXLEAST32 "lX" #define SCNoFAST32 "lo" #define SCNuFAST32 "lu" #define SCNxFAST32 "lx" #define SCNXFAST32 "lX" #define SCNo64 "I64o" #define SCNu64 "I64u" #define SCNx64 "I64x" #define SCNX64 "I64X" #define SCNoLEAST64 "I64o" #define SCNuLEAST64 "I64u" #define SCNxLEAST64 "I64x" #define SCNXLEAST64 "I64X" #define SCNoFAST64 "I64o" #define SCNuFAST64 "I64u" #define SCNxFAST64 "I64x" #define SCNXFAST64 "I64X" #define SCNoMAX "I64o" #define SCNuMAX "I64u" #define SCNxMAX "I64x" #define SCNXMAX "I64X" #ifdef _WIN64 // [ # define SCNoPTR "I64o" # define SCNuPTR "I64u" # define SCNxPTR "I64x" # define SCNXPTR "I64X" #else // _WIN64 ][ # define SCNoPTR "lo" # define SCNuPTR "lu" # define SCNxPTR "lx" # define SCNXPTR "lX" #endif // _WIN64 ] #endif // __STDC_FORMAT_MACROS ] // 7.8.2 Functions for greatest-width integer types // 7.8.2.1 The imaxabs function #define imaxabs _abs64 // 7.8.2.2 The imaxdiv function // This is modified version of div() function from Microsoft's div.c found // in %MSVC.NET%\crt\src\div.c #ifdef STATIC_IMAXDIV // [ static #else // STATIC_IMAXDIV ][ _inline #endif // STATIC_IMAXDIV ] imaxdiv_t __cdecl imaxdiv(intmax_t numer, intmax_t denom) { imaxdiv_t result; result.quot = numer / denom; result.rem = numer % denom; if (numer < 0 && result.rem > 0) { // did division wrong; must fix up ++result.quot; result.rem -= denom; } return result; } // 7.8.2.3 The strtoimax and strtoumax functions #define strtoimax _strtoi64 #define strtoumax _strtoui64 // 7.8.2.4 The wcstoimax and wcstoumax functions #define wcstoimax _wcstoi64 #define wcstoumax _wcstoui64 #endif // _MSC_INTTYPES_H_ ] bladeRF-2024.05/host/common/include/windows/c99/stdbool.h000066400000000000000000000033671457144405000230070ustar00rootroot00000000000000/************************************************************************** * * Copyright 2007-2010 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sub license, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * USE OR OTHER DEALINGS IN THE SOFTWARE. * * The above copyright notice and this permission notice (including the * next paragraph) shall be included in all copies or substantial portions * of the Software. * **************************************************************************/ #ifndef _STDBOOL_H_ #define _STDBOOL_H_ #ifndef __cplusplus #define false 0 #define true 1 #define bool _Bool /* For compilers that don't have the builtin _Bool type. */ #if (defined(_MSC_VER) && _MSC_VER < 1800) || \ (defined __GNUC__&& __STDC_VERSION__ < 199901L && __GNUC__ < 3) typedef unsigned char _Bool; #endif #endif /* !__cplusplus */ #define __bool_true_false_are_defined 1 #endif /* !_STDBOOL_H_ */ bladeRF-2024.05/host/common/include/windows/clock_gettime.h000066400000000000000000000030461457144405000235400ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2013 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef WIN_CLOCK_GETTIME_H_ #define WIN_CLOCK_GETTIME_H_ #include #ifdef __cplusplus extern "C" { #endif #ifndef WIN32 # error "This file is intended for use with WIN32 systems only." #endif typedef int clockid_t; #define CLOCK_REALTIME 0 int clock_gettime(clockid_t clk_id, struct timespec *tp); #ifdef __cplusplus } /* extern "C" */ #endif #endif bladeRF-2024.05/host/common/include/windows/getopt.h000066400000000000000000000031711457144405000222300ustar00rootroot00000000000000/** @file getopt_long.h ** @brief getopt_long ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see legal/licenses/LICENSE.BSD.vlfeat) */ #ifndef VL_GETOPT_LONG_H #define VL_GETOPT_LONG_H #ifdef __cplusplus extern "C" { #endif /* #include "generic.h" */ /* Added to avoid further modifying this source */ #define VL_EXPORT VL_EXPORT int opterr ; /**< code of the last error occured while parsing an option */ VL_EXPORT int optind ; /**< index of the next option to process in @c argv */ VL_EXPORT int optopt ; /**< current option */ VL_EXPORT char * optarg ; /**< argument of the current option */ VL_EXPORT int optreset ; /**< reset flag */ /** @brief ::getopt_long option */ struct option { const char *name ; /**< option long name */ int has_arg ; /**< flag indicating whether the option has no, required or optional argument */ int *flag ; /**< pointer to a variable to set (if @c NULL, the value is returned instead) */ int val ; /**< value to set or to return */ } ; #define no_argument 0 /**< ::option with no argument */ #define required_argument 1 /**< ::option with required argument */ #define optional_argument 2 /**< ::option with optional argument */ VL_EXPORT int getopt_long(int argc, char * const argv[], const char * optstring, const struct option * longopts, int * longindex); #ifdef __cplusplus } /* extern "C" */ #endif /* VL_GETOPT_LONG_H */ #endif bladeRF-2024.05/host/common/include/windows/gettimeofday.h000066400000000000000000000027621457144405000234140ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2023 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef WIN_GETTIMEOFDAY_H_ #define WIN_GETTIMEOFDAY_H_ #include #ifdef __cplusplus extern "C" { #endif #ifndef WIN32 #error "This file is intended for use with WIN32 systems only." #endif int gettimeofday(struct timeval *tp, struct timezone *tzp); #ifdef __cplusplus } /* extern "C" */ #endif #endif bladeRF-2024.05/host/common/include/windows/mkdtemp.h000066400000000000000000000040501457144405000223640ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/Nuand/bladeRF * * Copyright (c) 2018 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef WIN_MKDTEMP_H_ #define WIN_MKDTEMP_H_ #ifdef __cplusplus extern "C" { #endif #ifndef WIN32 #error "This file is intended for use with WIN32 systems only." #endif /** * Create a unique temporary directory * * Functionally equivalent to glibc's mkdtemp. * * The last six characters of template must be XXXXXX, and these are replaced * with a string that makes the directory name unique. The directory is then * created with 0700 permissions. * * The `template` parameter is modified in-place, and thus it should be * declared as a character array and not a string constant. * * @param template filename template, ending in "XXXXXX" * * @returns pointer to modified `template` string on success, NULL on failure, * in which case `errno` is set appropriately. */ char *mkdtemp(char *template); #ifdef __cplusplus } /* extern "C" */ #endif #endif bladeRF-2024.05/host/common/include/windows/nanosleep.h000066400000000000000000000027611457144405000227160ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2018 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef WIN_NANOSLEEP_H_ #define WIN_NANOSLEEP_H_ #include #ifdef __cplusplus extern "C" { #endif #ifndef WIN32 #error "This file is intended for use with WIN32 systems only." #endif int nanosleep(const struct timespec *req, struct timespec *rem); #ifdef __cplusplus } /* extern "C" */ #endif #endif bladeRF-2024.05/host/common/include/windows/ptw32_timespec.h000066400000000000000000000072001457144405000235730ustar00rootroot00000000000000/* * This is a slightly modified version of the file described below, * borrowed from PThreads-Win32: * ftp://sourceware.org/pub/pthreads-win32/sources/pthreads-w32-2-9-1-release/ptw32_timespec.c * * -------------------------------------------------------------------------- * * ptw32_timespec.c * * Description: * This translation unit implements routines which are private to * the implementation and may be used throughout it. * * -------------------------------------------------------------------------- * * Pthreads-win32 - POSIX Threads Library for Win32 * Copyright(C) 1998 John E. Bossom * Copyright(C) 1999,2005 Pthreads-win32 contributors * * Contact Email: rpj@callisto.canberra.edu.au * * The current list of contributors is contained * in the file CONTRIBUTORS included with the source * code distribution. The list can also be seen at the * following World Wide Web location: * http://sources.redhat.com/pthreads-win32/contributors.html * * 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 2 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 in the file COPYING.LIB; * if not, write to the Free Software Foundation, Inc., * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #ifndef PTW32_TIMESPEC_H__ #define PTW32_TIMESPEC_H__ #ifndef WIN32 # error "This file is intended for use with WIN32 systems." #endif #include #include #include "host_config.h" #include "pthread.h" #ifdef __cplusplus extern "C" { #endif /* * time between jan 1, 1601 and jan 1, 1970 in units of 100 nanoseconds */ #define PTW32_TIMESPEC_TO_FILETIME_OFFSET \ ( ((int64_t) 27111902 << 32) + (int64_t) 3577643008 ) static inline void ptw32_timespec_to_filetime (const struct timespec *ts, FILETIME * ft) /* * ------------------------------------------------------------------- * converts struct timespec * where the time is expressed in seconds and nanoseconds from Jan 1, 1970. * into FILETIME (as set by GetSystemTimeAsFileTime), where the time is * expressed in 100 nanoseconds from Jan 1, 1601, * ------------------------------------------------------------------- */ { *(int64_t *) ft = ts->tv_sec * 10000000 + (ts->tv_nsec + 50) / 100 + PTW32_TIMESPEC_TO_FILETIME_OFFSET; } static inline void ptw32_filetime_to_timespec (const FILETIME * ft, struct timespec *ts) /* * ------------------------------------------------------------------- * converts FILETIME (as set by GetSystemTimeAsFileTime), where the time is * expressed in 100 nanoseconds from Jan 1, 1601, * into struct timespec * where the time is expressed in seconds and nanoseconds from Jan 1, 1970. * ------------------------------------------------------------------- */ { ts->tv_sec = (int) ((*(int64_t *) ft - PTW32_TIMESPEC_TO_FILETIME_OFFSET) / 10000000); ts->tv_nsec = (int) ((*(int64_t *) ft - PTW32_TIMESPEC_TO_FILETIME_OFFSET - ((int64_t) ts->tv_sec * (int64_t) 10000000)) * 100); } #ifdef __cplusplus } /* extern "C" */ #endif #endif bladeRF-2024.05/host/common/include/windows/setenv.h000066400000000000000000000044141457144405000222330ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/Nuand/bladeRF * * Copyright (c) 2018 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef WIN_SETENV_H_ #define WIN_SETENV_H_ #ifdef __cplusplus extern "C" { #endif #ifndef WIN32 #error "This file is intended for use with WIN32 systems only." #endif /** * @brief Change or add an environment variable * * Functionally equivalent to glibc's setenv. * * @param[in] name The name of the environmental variable * @param[in] value The value to set it to * @param[in] overwrite If zero, do nothing if the environment variable is * already set (and return success); if non-zero, * replace its value. * * @return the return value of the _putenv_s() call (zero if successful) */ int setenv(const char *name, const char *value, int overwrite); /** * @brief Delete an environmental variable from the environment * * Functionally equivalent to glibc's setenv. * * @param[in] name The name of the environmental variable * * @return the return value of the _putenv_s() call (zero if successful) */ int unsetenv(const char *name); #ifdef __cplusplus } /* extern "C" */ #endif #endif // WIN_SETENV_H_ bladeRF-2024.05/host/common/src/000077500000000000000000000000001457144405000162255ustar00rootroot00000000000000bladeRF-2024.05/host/common/src/conversions.c000066400000000000000000000433401457144405000207450ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2017-2018 Nuand LLC. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include "conversions.h" int str2version(const char *str, struct bladerf_version *version) { unsigned long tmp; const char *start = str; char *end; /* Major version */ errno = 0; tmp = strtoul(start, &end, 10); if (errno != 0 || tmp > UINT16_MAX || end == start || *end != '.') { return -1; } version->major = (uint16_t)tmp; /* Minor version */ if (end[0] == '\0' || end[1] == '\0') { return -1; } errno = 0; start = &end[1]; tmp = strtoul(start, &end, 10); if (errno != 0 || tmp > UINT16_MAX || end == start || *end != '.') { return -1; } version->minor = (uint16_t)tmp; /* Patch version */ if (end[0] == '\0' || end[1] == '\0') { return -1; } errno = 0; start = &end[1]; tmp = strtoul(start, &end, 10); if (errno != 0 || tmp > UINT16_MAX || end == start || (*end != '-' && *end != '\0')) { return -1; } version->patch = (uint16_t)tmp; version->describe = str; return 0; } const char *devspeed2str(bladerf_dev_speed speed) { switch (speed) { case BLADERF_DEVICE_SPEED_HIGH: /* Yeah, the USB IF actually spelled it "Hi" instead of "High". * I know. It hurts me too. */ return "Hi-Speed"; case BLADERF_DEVICE_SPEED_SUPER: /* ...and no hyphen :( */ return "SuperSpeed"; default: return "Unknown"; } } bladerf_log_level str2loglevel(const char *str, bool *ok) { bladerf_log_level level = BLADERF_LOG_LEVEL_ERROR; bool valid = true; if (!strcasecmp(str, "critical")) { level = BLADERF_LOG_LEVEL_CRITICAL; } else if (!strcasecmp(str, "error")) { level = BLADERF_LOG_LEVEL_ERROR; } else if (!strcasecmp(str, "warning")) { level = BLADERF_LOG_LEVEL_WARNING; } else if (!strcasecmp(str, "info")) { level = BLADERF_LOG_LEVEL_INFO; } else if (!strcasecmp(str, "debug")) { level = BLADERF_LOG_LEVEL_DEBUG; } else if (!strcasecmp(str, "verbose")) { level = BLADERF_LOG_LEVEL_VERBOSE; } else { valid = false; } *ok = valid; return level; } const char *module2str(bladerf_module m) { switch (m) { case BLADERF_MODULE_RX: return "RX"; case BLADERF_MODULE_TX: return "TX"; default: return "Unknown"; } } bladerf_module str2module(const char *str) { if (!strcasecmp(str, "RX")) { return BLADERF_MODULE_RX; } else if (!strcasecmp(str, "TX")) { return BLADERF_MODULE_TX; } else { return BLADERF_MODULE_INVALID; } } const char *channel2str(bladerf_channel ch) { switch (ch) { case BLADERF_CHANNEL_RX(0): return "RX1"; case BLADERF_CHANNEL_TX(0): return "TX1"; case BLADERF_CHANNEL_RX(1): return "RX2"; case BLADERF_CHANNEL_TX(1): return "TX2"; default: return "Unknown"; } } bladerf_channel str2channel(char const *str) { bladerf_channel rv; if (strcasecmp(str, "rx") == 0 || strcasecmp(str, "rx1") == 0) { rv = BLADERF_CHANNEL_RX(0); } else if (strcasecmp(str, "rx2") == 0) { rv = BLADERF_CHANNEL_RX(1); } else if (strcasecmp(str, "tx") == 0 || strcasecmp(str, "tx1") == 0) { rv = BLADERF_CHANNEL_TX(0); } else if (strcasecmp(str, "tx2") == 0) { rv = BLADERF_CHANNEL_TX(1); } else { rv = BLADERF_CHANNEL_INVALID; } return rv; } bladerf_direction channel2direction (bladerf_channel ch) { if (ch == BLADERF_CHANNEL_RX(0) || ch == BLADERF_CHANNEL_RX(1)) { return BLADERF_RX; } else { return BLADERF_TX; } } const char *direction2str(bladerf_direction dir) { switch (dir) { case BLADERF_RX: return "RX"; case BLADERF_TX: return "TX"; default: return "Unknown"; } } const char *trigger2str(bladerf_trigger_signal trigger) { switch (trigger) { case BLADERF_TRIGGER_J71_4: return "J71-4"; case BLADERF_TRIGGER_J51_1: return "J51-1"; case BLADERF_TRIGGER_MINI_EXP_1: return "MiniExp-1"; case BLADERF_TRIGGER_USER_0: return "User-0"; case BLADERF_TRIGGER_USER_1: return "User-1"; case BLADERF_TRIGGER_USER_2: return "User-2"; case BLADERF_TRIGGER_USER_3: return "User-3"; case BLADERF_TRIGGER_USER_4: return "User-4"; case BLADERF_TRIGGER_USER_5: return "User-5"; case BLADERF_TRIGGER_USER_6: return "User-6"; case BLADERF_TRIGGER_USER_7: return "User-7"; default: return "Unknown"; } } bladerf_trigger_signal str2trigger(const char *str) { if (!strcasecmp("J71-4", str)) { return BLADERF_TRIGGER_J71_4; } else if (!strcasecmp("J51-1", str)) { return BLADERF_TRIGGER_J51_1; } else if (!strcasecmp("Miniexp-1", str)) { return BLADERF_TRIGGER_MINI_EXP_1; } else if (!strcasecmp("User-0", str)) { return BLADERF_TRIGGER_USER_0; } else if (!strcasecmp("User-1", str)) { return BLADERF_TRIGGER_USER_1; } else if (!strcasecmp("User-2", str)) { return BLADERF_TRIGGER_USER_2; } else if (!strcasecmp("User-3", str)) { return BLADERF_TRIGGER_USER_3; } else if (!strcasecmp("User-4", str)) { return BLADERF_TRIGGER_USER_4; } else if (!strcasecmp("User-5", str)) { return BLADERF_TRIGGER_USER_5; } else if (!strcasecmp("User-6", str)) { return BLADERF_TRIGGER_USER_6; } else if (!strcasecmp("User-7", str)) { return BLADERF_TRIGGER_USER_7; } else { return BLADERF_TRIGGER_INVALID; } } const char *triggerrole2str(bladerf_trigger_role role) { switch (role) { case BLADERF_TRIGGER_ROLE_MASTER: return "Master"; case BLADERF_TRIGGER_ROLE_SLAVE: return "Slave"; case BLADERF_TRIGGER_ROLE_DISABLED: return "Disabled"; default: return "Unknown"; } } bladerf_trigger_role str2triggerrole(const char *str) { if (!strcasecmp("Master", str)) { return BLADERF_TRIGGER_ROLE_MASTER; } else if (!strcasecmp("Slave", str)) { return BLADERF_TRIGGER_ROLE_SLAVE; } else if (!strcasecmp("Disabled", str) || !strcasecmp("Off", str)) { return BLADERF_TRIGGER_ROLE_DISABLED; } else { return BLADERF_TRIGGER_ROLE_INVALID; } } int str2loopback(const char *str, bladerf_loopback *loopback) { int status = 0; if (!strcasecmp("firmware", str)) { *loopback = BLADERF_LB_FIRMWARE; } else if (!strcasecmp("bb_txlpf_rxvga2", str)) { *loopback = BLADERF_LB_BB_TXLPF_RXVGA2; } else if (!strcasecmp("bb_txlpf_rxlpf", str)) { *loopback = BLADERF_LB_BB_TXLPF_RXLPF; } else if (!strcasecmp("bb_txvga1_rxvga2", str)) { *loopback = BLADERF_LB_BB_TXVGA1_RXVGA2; } else if (!strcasecmp("bb_txvga1_rxlpf", str)) { *loopback = BLADERF_LB_BB_TXVGA1_RXLPF; } else if (!strcasecmp("rf_lna1", str)) { *loopback = BLADERF_LB_RF_LNA1; } else if (!strcasecmp("rf_lna2", str)) { *loopback = BLADERF_LB_RF_LNA2; } else if (!strcasecmp("rf_lna3", str)) { *loopback = BLADERF_LB_RF_LNA3; } else if (!strcasecmp("rfic_bist", str)) { *loopback = BLADERF_LB_RFIC_BIST; } else if (!strcasecmp("none", str)) { *loopback = BLADERF_LB_NONE; } else { status = -1; } return status; } char const *loopback2str(bladerf_loopback loopback) { switch (loopback) { case BLADERF_LB_BB_TXLPF_RXVGA2: return "bb_txlpf_rxvga2"; case BLADERF_LB_BB_TXLPF_RXLPF: return "bb_txlpf_rxlpf"; case BLADERF_LB_BB_TXVGA1_RXVGA2: return "bb_txvga1_rxvga2"; case BLADERF_LB_BB_TXVGA1_RXLPF: return "bb_txvga1_rxlpf"; case BLADERF_LB_RF_LNA1: return "rf_lna1"; case BLADERF_LB_RF_LNA2: return "rf_lna2"; case BLADERF_LB_RF_LNA3: return "rf_lna3"; case BLADERF_LB_FIRMWARE: return "firmware"; case BLADERF_LB_NONE: return "none"; case BLADERF_LB_RFIC_BIST: return "rfic_bist"; default: return "unknown"; } } int str2lnagain(const char *str, bladerf_lna_gain *gain) { *gain = BLADERF_LNA_GAIN_MAX; if (!strcasecmp("max", str) || !strcasecmp("BLADERF_LNA_GAIN_MAX", str)) { *gain = BLADERF_LNA_GAIN_MAX; return 0; } else if (!strcasecmp("mid", str) || !strcasecmp("BLADERF_LNA_GAIN_MID", str)) { *gain = BLADERF_LNA_GAIN_MID; return 0; } else if (!strcasecmp("bypass", str) || !strcasecmp("BLADERF_LNA_GAIN_BYPASS", str)) { *gain = BLADERF_LNA_GAIN_BYPASS; return 0; } else { *gain = BLADERF_LNA_GAIN_UNKNOWN; return -1; } } char const *tuningmode2str(bladerf_tuning_mode mode) { switch (mode) { case BLADERF_TUNING_MODE_HOST: return "Host"; case BLADERF_TUNING_MODE_FPGA: return "FPGA"; default: return "Unknown"; } } const char *backend_description(bladerf_backend b) { switch (b) { case BLADERF_BACKEND_ANY: return "Any"; case BLADERF_BACKEND_LINUX: return "Linux kernel driver"; case BLADERF_BACKEND_LIBUSB: return "libusb"; case BLADERF_BACKEND_CYPRESS: return "Cypress driver"; case BLADERF_BACKEND_DUMMY: return "Dummy"; default: return "Unknown"; } } void sc16q11_to_float(const int16_t *in, float *out, unsigned int n) { unsigned int i; for (i = 0; i < (2 * n); i += 2) { out[i] = (float)in[i] * (1.0f / 2048.0f); out[i + 1] = (float)in[i + 1] * (1.0f / 2048.0f); } } void float_to_sc16q11(const float *in, int16_t *out, unsigned int n) { unsigned int i; for (i = 0; i < (2 * n); i += 2) { out[i] = (int16_t)(in[i] * 2048.0f); out[i + 1] = (int16_t)(in[i + 1] * 2048.0f); } } bladerf_cal_module str_to_bladerf_cal_module(const char *str) { bladerf_cal_module module = BLADERF_DC_CAL_INVALID; if (!strcasecmp(str, "lpf_tuning") || !strcasecmp(str, "lpftuning") || !strcasecmp(str, "tuning")) { module = BLADERF_DC_CAL_LPF_TUNING; } else if (!strcasecmp(str, "tx_lpf") || !strcasecmp(str, "txlpf")) { module = BLADERF_DC_CAL_TX_LPF; } else if (!strcasecmp(str, "rx_lpf") || !strcasecmp(str, "rxlpf")) { module = BLADERF_DC_CAL_RX_LPF; } else if (!strcasecmp(str, "rx_vga2") || !strcasecmp(str, "rxvga2")) { module = BLADERF_DC_CAL_RXVGA2; } return module; } const char *smb_mode_to_str(bladerf_smb_mode mode) { switch (mode) { case BLADERF_SMB_MODE_DISABLED: return "Disabled"; case BLADERF_SMB_MODE_OUTPUT: return "Output"; case BLADERF_SMB_MODE_INPUT: return "Input"; case BLADERF_SMB_MODE_UNAVAILBLE: return "Unavailable"; default: return "Unknown"; } }; bladerf_smb_mode str_to_smb_mode(const char *str) { if (!strcasecmp(str, "disabled") || !strcasecmp(str, "off")) { return BLADERF_SMB_MODE_DISABLED; } else if (!strcasecmp(str, "output")) { return BLADERF_SMB_MODE_OUTPUT; } else if (!strcasecmp(str, "input")) { return BLADERF_SMB_MODE_INPUT; } else if (!strcasecmp(str, "unavailable")) { return BLADERF_SMB_MODE_UNAVAILBLE; } else { return BLADERF_SMB_MODE_INVALID; } } bladerf_tuning_mode str_to_tuning_mode(const char *str) { if (!strcasecmp(str, "fpga")) { return BLADERF_TUNING_MODE_FPGA; } else if (!strcasecmp(str, "host")) { return BLADERF_TUNING_MODE_HOST; } else { return BLADERF_TUNING_MODE_INVALID; } } unsigned int str2uint(const char *str, unsigned int min, unsigned int max, bool *ok) { unsigned int ret; char *optr; errno = 0; ret = strtoul(str, &optr, 0); if (errno == ERANGE || (errno != 0 && ret == 0)) { *ok = false; return 0; } if (str == optr) { *ok = false; return 0; } if (ret >= min && ret <= max) { *ok = true; return (unsigned int)ret; } *ok = false; return 0; } int str2int(const char *str, int min, int max, bool *ok) { long int ret; char *optr; errno = 0; ret = strtol(str, &optr, 0); if ((errno == ERANGE && (ret == LONG_MAX || ret == LONG_MIN)) || (errno != 0 && ret == 0)) { *ok = false; return 0; } if (str == optr) { *ok = false; return 0; } if (ret >= min && ret <= max) { *ok = true; return (int)ret; } *ok = false; return 0; } uint64_t str2uint64(const char *str, uint64_t min, uint64_t max, bool *ok) { uint64_t ret; char *optr; errno = 0; ret = (uint64_t)strtod(str, &optr); if ((errno == ERANGE && ret == ULONG_MAX) || (errno != 0 && ret == 0)) { *ok = false; return 0; } if (str == optr) { *ok = false; return 0; } if (ret >= min && ret <= max) { *ok = true; return ret; } *ok = false; return 0; } double str2double(const char *str, double min, double max, bool *ok) { double ret; char *optr; errno = 0; ret = strtod(str, &optr); if (errno == ERANGE || (errno != 0 && ret == 0)) { *ok = false; return NAN; } if (str == optr) { *ok = false; return NAN; } if (ret >= min && ret <= max) { *ok = true; return ret; } *ok = false; return NAN; } static uint64_t suffix_multiplier(const char *str, const struct numeric_suffix *suffixes, const size_t num_suff, bool *ok) { unsigned i; *ok = true; if (!strlen(str)) return 1; for (i = 0; i < num_suff; i++) { if (!strcasecmp(suffixes[i].suffix, str)) { return suffixes[i].multiplier; } } *ok = false; return 0; } unsigned int str2uint_suffix(const char *str, unsigned int min, unsigned int max, const struct numeric_suffix *suffixes, const size_t num_suff, bool *ok) { uint64_t mult; unsigned int rv; double val; char *optr; errno = 0; val = strtod(str, &optr); if (errno == ERANGE || (errno != 0 && val == 0)) { *ok = false; return 0; } if (str == optr) { *ok = false; return 0; } mult = suffix_multiplier(optr, suffixes, num_suff, ok); if (!*ok) return false; rv = (unsigned int)(val * mult); if (rv >= min && rv <= max) { return rv; } *ok = false; return 0; } uint64_t str2uint64_suffix(const char *str, uint64_t min, uint64_t max, const struct numeric_suffix *suffixes, const size_t num_suff, bool *ok) { uint64_t mult, rv; long double val; char *optr; errno = 0; val = strtold(str, &optr); if (errno == ERANGE && (errno != 0 && val == 0)) { *ok = false; return 0; } if (str == optr) { *ok = false; return 0; } mult = suffix_multiplier(optr, suffixes, num_suff, ok); if (!*ok) return false; rv = (uint64_t)(val * mult); if (rv >= min && rv <= max) { return rv; } *ok = false; return 0; } int str2bool(const char *str, bool *val) { unsigned int i; char *str_true[] = { "true", "t", "one", "1", "enable", "en", "on" }; char *str_false[] = { "false", "f", "zero", "0", "disable", "dis", "off" }; for (i = 0; i < ARRAY_SIZE(str_true); i++) { if (!strcasecmp(str_true[i], str)) { *val = true; return 0; } } for (i = 0; i < ARRAY_SIZE(str_false); i++) { if (!strcasecmp(str_false[i], str)) { *val = false; return 0; } } return BLADERF_ERR_INVAL; } bladeRF-2024.05/host/common/src/dc_calibration.c000066400000000000000000001324061457144405000213340ustar00rootroot00000000000000/** * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2015 Nuand LLC * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #define _USE_MATH_DEFINES /* Required for MSVC */ #include #include #include "dc_calibration.h" #include "conversions.h" struct complexf { float i; float q; }; struct gain_mode { bladerf_lna_gain lna_gain; int rxvga1, rxvga2; }; /******************************************************************************* * Debug items ******************************************************************************/ /* Enable this to print diagnostic and debug information */ //#define ENABLE_DC_CALIBRATION_DEBUG //#define ENABLE_DC_CALIBRATION_VERBOSE #ifndef PR_DBG # ifdef ENABLE_DC_CALIBRATION_DEBUG # define PR_DBG(...) fprintf(stderr, " " __VA_ARGS__) # else # define PR_DBG(...) do {} while (0) # endif #endif #ifndef PR_VERBOSE # ifdef ENABLE_DC_CALIBRATION_VERBOSE # define PR_VERBOSE(...) fprintf(stderr, " " __VA_ARGS__) # else # define PR_VERBOSE(...) do {} while (0) # endif #endif /******************************************************************************* * Debug routines for saving samples ******************************************************************************/ //#define ENABLE_SAVE_SC16Q11 #ifdef ENABLE_SAVE_SC16Q11 static void save_sc16q11(const char *name, int16_t *samples, unsigned int count) { FILE *out = fopen(name, "wb"); if (!out) { return; } fwrite(samples, 2 * sizeof(samples[0]), count, out); fclose(out); } #else # define save_sc16q11(name, samples, count) do {} while (0) #endif //#define ENABLE_SAVE_COMPLEXF #ifdef ENABLE_SAVE_COMPLEXF static void save_complexf(const char *name, struct complexf *samples, unsigned int count) { unsigned int n; FILE *out = fopen(name, "wb"); if (!out) { return; } for (n = 0; n < count; n++) { fwrite(&samples[n].i, sizeof(samples[n].i), 1, out); fwrite(&samples[n].q, sizeof(samples[n].q), 1, out); } fclose(out); } #else # define save_complexf(name, samples, count) do {} while (0) #endif /******************************************************************************* * LMS6002D DC offset calibration ******************************************************************************/ /* We've found that running samples through the LMS6 tends to be required * for the TX LPF calibration to converge */ static inline int tx_lpf_dummy_tx(struct bladerf *dev) { int status; int retval = 0; struct bladerf_metadata meta; int16_t zero_sample[] = { 0, 0 }; bladerf_loopback loopback_backup; struct bladerf_rational_rate sample_rate_backup; memset(&meta, 0, sizeof(meta)); status = bladerf_get_loopback(dev, &loopback_backup); if (status != 0) { return status; } status = bladerf_get_rational_sample_rate(dev, BLADERF_MODULE_TX, &sample_rate_backup); if (status != 0) { return status; } status = bladerf_set_loopback(dev, BLADERF_LB_BB_TXVGA1_RXVGA2); if (status != 0) { goto out; } status = bladerf_set_sample_rate(dev, BLADERF_MODULE_TX, 3000000, NULL); if (status != 0) { goto out; } status = bladerf_sync_config(dev, BLADERF_MODULE_TX, BLADERF_FORMAT_SC16_Q11_META, 64, 16384, 16, 1000); if (status != 0) { goto out; } status = bladerf_enable_module(dev, BLADERF_MODULE_TX, true); if (status != 0) { goto out; } meta.flags = BLADERF_META_FLAG_TX_BURST_START | BLADERF_META_FLAG_TX_BURST_END | BLADERF_META_FLAG_TX_NOW; status = bladerf_sync_tx(dev, zero_sample, 1, &meta, 2000); if (status != 0) { goto out; } out: status = bladerf_enable_module(dev, BLADERF_MODULE_TX, false); if (status != 0 && retval == 0) { retval = status; } status = bladerf_set_rational_sample_rate(dev, BLADERF_MODULE_TX, &sample_rate_backup, NULL); if (status != 0 && retval == 0) { retval = status; } status = bladerf_set_loopback(dev, loopback_backup); if (status != 0 && retval == 0) { retval = status; } return retval; } static int cal_tx_lpf(struct bladerf *dev) { int status; status = tx_lpf_dummy_tx(dev); if (status == 0) { status = bladerf_calibrate_dc(dev, BLADERF_DC_CAL_TX_LPF); } return status; } int dc_calibration_lms6(struct bladerf *dev, const char *module_str) { int status; bladerf_cal_module module; if (!strcasecmp(module_str, "all")) { status = bladerf_calibrate_dc(dev, BLADERF_DC_CAL_LPF_TUNING); if (status != 0) { return status; } status = cal_tx_lpf(dev); if (status != 0) { return status; } status = bladerf_calibrate_dc(dev, BLADERF_DC_CAL_RX_LPF); if (status != 0) { return status; } status = bladerf_calibrate_dc(dev, BLADERF_DC_CAL_RXVGA2); } else { module = str_to_bladerf_cal_module(module_str); if (module == BLADERF_DC_CAL_INVALID) { return BLADERF_ERR_INVAL; } if (module == BLADERF_DC_CAL_TX_LPF) { status = cal_tx_lpf(dev); } else { status = bladerf_calibrate_dc(dev, module); } } return status; } /******************************************************************************* * Shared utility routines ******************************************************************************/ /* Round float to int16_t */ static inline int16_t float_to_int16(float val) { if ((val - 0.5) <= INT16_MIN) { return INT16_MIN; } if ((val + 0.5) >= INT16_MAX) { return INT16_MAX; } return val >= 0 ? (int16_t)(val + 0.5) : (int16_t)(val - 0.5); } /* Convert ms to samples */ #define MS_TO_SAMPLES(ms_, rate_) (\ (unsigned int) (ms_ * ((uint64_t) rate_) / 1000) \ ) /* RX samples, retrying if the machine is struggling to keep up. */ static int rx_samples(struct bladerf *dev, int16_t *samples, unsigned int count, uint64_t *ts, uint64_t ts_inc) { int status = 0; struct bladerf_metadata meta; int retry = 0; const int max_retries = 10; bool overrun = true; memset(&meta, 0, sizeof(meta)); meta.timestamp = *ts; while (status == 0 && overrun && retry < max_retries) { meta.timestamp = *ts; status = bladerf_sync_rx(dev, samples, count, &meta, 2000); if (status == BLADERF_ERR_TIME_PAST) { status = bladerf_get_timestamp(dev, BLADERF_MODULE_RX, ts); if (status != 0) { return status; } else { *ts += 20 * ts_inc; retry++; status = 0; } } else if (status == 0) { overrun = (meta.flags & BLADERF_META_STATUS_OVERRUN) != 0; if (overrun) { *ts += count + ts_inc; retry++; } } else { return status; } } if (retry >= max_retries) { status = BLADERF_ERR_IO; } else if (status == 0) { *ts += count + ts_inc; } return status; } /******************************************************************************* * RX DC offset calibration ******************************************************************************/ #define RX_CAL_RATE (3000000) #define RX_CAL_BW (1500000) #define RX_CAL_TS_INC (MS_TO_SAMPLES(15, RX_CAL_RATE)) #define RX_CAL_COUNT (MS_TO_SAMPLES(5, RX_CAL_RATE)) #define RX_CAL_MAX_SWEEP_LEN (2 * 2048 / 32) /* -2048 : 32 : 2048 */ struct rx_cal { struct bladerf *dev; int16_t *samples; unsigned int num_samples; int16_t *corr_sweep; uint64_t ts; uint64_t tx_freq; }; struct rx_cal_backup { struct bladerf_rational_rate rational_sample_rate; unsigned int bandwidth; uint64_t tx_freq; }; static int get_rx_cal_backup(struct bladerf *dev, struct rx_cal_backup *b) { int status; status = bladerf_get_rational_sample_rate(dev, BLADERF_MODULE_RX, &b->rational_sample_rate); if (status != 0) { return status; } status = bladerf_get_bandwidth(dev, BLADERF_MODULE_RX, &b->bandwidth); if (status != 0) { return status; } status = bladerf_get_frequency(dev, BLADERF_MODULE_TX, &b->tx_freq); if (status != 0) { return status; } return status; } static int set_rx_cal_backup(struct bladerf *dev, struct rx_cal_backup *b) { int status; int retval = 0; status = bladerf_set_rational_sample_rate(dev, BLADERF_MODULE_RX, &b->rational_sample_rate, NULL); if (status != 0 && retval == 0) { retval = status; } status = bladerf_set_bandwidth(dev, BLADERF_MODULE_RX, b->bandwidth, NULL); if (status != 0 && retval == 0) { retval = status; } status = bladerf_set_frequency(dev, BLADERF_MODULE_TX, b->tx_freq); if (status != 0 && retval == 0) { retval = status; } return retval; } /* Ensure TX >= 1 MHz away from the RX frequency to avoid any potential * artifacts from the PLLs interfering with one another */ static int rx_cal_update_frequency(struct rx_cal *cal, uint64_t rx_freq) { int status = 0; uint64_t f_diff; if (rx_freq < cal->tx_freq) { f_diff = cal->tx_freq - rx_freq; } else { f_diff = rx_freq - cal->tx_freq; } PR_DBG("Set F_RX = %u\n", rx_freq); PR_DBG("F_diff(RX, TX) = %u\n", f_diff); if (f_diff < 1000000) { if (rx_freq >= (BLADERF_FREQUENCY_MIN + 1000000)) { cal->tx_freq = rx_freq - 1000000; } else { cal->tx_freq = rx_freq + 1000000; } status = bladerf_set_frequency(cal->dev, BLADERF_MODULE_TX, cal->tx_freq); if (status != 0) { return status; } PR_DBG("Adjusted TX frequency: %u\n", cal->tx_freq); } status = bladerf_set_frequency(cal->dev, BLADERF_MODULE_RX, rx_freq); if (status != 0) { return status; } cal->ts += RX_CAL_TS_INC; return status; } static inline void sample_mean(int16_t *samples, size_t count, float *mean_i, float *mean_q) { int64_t accum_i = 0; int64_t accum_q = 0; size_t n; if (count == 0) { assert(!"Invalid count (0) provided to sample_mean()"); *mean_i = 0; *mean_q = 0; return; } for (n = 0; n < (2 * count); n += 2) { accum_i += samples[n]; accum_q += samples[n + 1]; } *mean_i = ((float) accum_i) / count; *mean_q = ((float) accum_q) / count; } static inline int set_rx_dc_corr(struct bladerf *dev, int16_t i, int16_t q) { int status; status = bladerf_set_correction(dev, BLADERF_MODULE_RX, BLADERF_CORR_LMS_DCOFF_I, i); if (status != 0) { return status; } status = bladerf_set_correction(dev, BLADERF_MODULE_RX, BLADERF_CORR_LMS_DCOFF_Q, q); return status; } /* Get the mean for one of the coarse estimate points. If it seems that this * value might be (or close) causing us to clamp, adjust it and retry */ static int rx_cal_coarse_means(struct rx_cal *cal, int16_t *corr_value, float *mean_i, float *mean_q) { int status; const int16_t mean_limit_high = 2000; const int16_t mean_limit_low = -mean_limit_high; const int16_t corr_limit = 128; bool retry = false; do { status = set_rx_dc_corr(cal->dev, *corr_value, *corr_value); if (status != 0) { return status; } status = rx_samples(cal->dev, cal->samples, cal->num_samples, &cal->ts, RX_CAL_TS_INC); if (status != 0) { return status; } sample_mean(cal->samples, cal->num_samples, mean_i, mean_q); if (*mean_i > mean_limit_high || *mean_q > mean_limit_high || *mean_i < mean_limit_low || *mean_q < mean_limit_low ) { if (*corr_value < 0) { retry = (*corr_value <= -corr_limit); } else { retry = (*corr_value >= corr_limit); } if (retry) { PR_DBG("Coarse estimate point Corr=%4d yields extreme means: " "(%4f, %4f). Retrying...\n", *corr_value, *mean_i, *mean_q); *corr_value = *corr_value / 2; } } else { retry = false; } } while (retry); if (retry) { PR_DBG("Non-ideal values are being used.\n"); } return 0; } /* Estimate the DC correction values that yield zero DC offset via a linear * approximation */ static int rx_cal_coarse_estimate(struct rx_cal *cal, int16_t *i_est, int16_t *q_est) { int status; int16_t x1 = -2048; int16_t x2 = 2048; float y1i, y1q, y2i, y2q; float mi, mq; float bi, bq; float i_guess, q_guess; status = rx_cal_coarse_means(cal, &x1, &y1i, &y1q); if (status != 0) { *i_est = 0; *q_est = 0; return status; } PR_VERBOSE("Means for x1=%d: y1i=%f, y1q=%f\n", x1, y1i, y1q); status = rx_cal_coarse_means(cal, &x2, &y2i, &y2q); if (status != 0) { *i_est = 0; *q_est = 0; return status; } PR_VERBOSE("Means for x2: y2i=%f, y2q=%f\n", y2i, y2q); mi = (y2i - y1i) / (x2 - x1); mq = (y2q - y1q) / (x2 - x1); bi = y1i - mi * x1; bq = y1q - mq * x1; PR_VERBOSE("mi=%f, bi=%f, mq=%f, bq=%f\n", mi, bi, mq, bq); i_guess = -bi/mi + 0.5f; if (i_guess < -2048) { i_guess = -2048; } else if (i_guess > 2048) { i_guess = 2048; } q_guess = -bq/mq + 0.5f; if (q_guess < -2048) { q_guess = -2048; } else if (q_guess > 2048) { q_guess = 2048; } *i_est = (int16_t) i_guess; *q_est = (int16_t) q_guess; PR_DBG("Coarse estimate: I=%d, Q=%d\n", *i_est, *q_est); return 0; } static void init_rx_cal_sweep(int16_t *corr, unsigned int *sweep_len, int16_t i_est, int16_t q_est) { unsigned int actual_len = 0; unsigned int i; int16_t sweep_min, sweep_max, sweep_val; /* LMS6002D RX DC calibrations have a limited range. libbladeRF throws away * the lower 5 bits. */ const int16_t sweep_inc = 32; const int16_t min_est = (i_est < q_est) ? i_est : q_est; const int16_t max_est = (i_est > q_est) ? i_est : q_est; sweep_min = min_est - 12 * 32; if (sweep_min < -2048) { sweep_min = -2048; } sweep_max = max_est + 12 * 32; if (sweep_max > 2048) { sweep_max = 2048; } /* Given that these lower bits are thrown away, it can be confusing to * see that values change in their LSBs that don't matter. Therefore, * we'll adjust to muliples of sweep_inc */ sweep_min = (sweep_min / 32) * 32; sweep_max = (sweep_max / 32) * 32; PR_DBG("Sweeping [%d : %d : %d]\n", sweep_min, sweep_inc, sweep_max); sweep_val = sweep_min; for (i = 0; sweep_val < sweep_max && i < RX_CAL_MAX_SWEEP_LEN; i++) { corr[i] = sweep_val; sweep_val += sweep_inc; actual_len++; } *sweep_len = actual_len; } static int save_gains(struct rx_cal *cal, struct gain_mode *gain) { int status; status = bladerf_get_lna_gain(cal->dev, &gain->lna_gain); if (status != 0) { return status; } status = bladerf_get_rxvga1(cal->dev, &gain->rxvga1); if (status != 0) { return status; } status = bladerf_get_rxvga2(cal->dev, &gain->rxvga2); if (status != 0) { return status; } return status; } static int load_gains(struct rx_cal *cal, struct gain_mode *gain) { int status; status = bladerf_set_lna_gain(cal->dev, gain->lna_gain); if (status != 0) { return status; } status = bladerf_set_rxvga1(cal->dev, gain->rxvga1); if (status != 0) { return status; } status = bladerf_set_rxvga2(cal->dev, gain->rxvga2); if (status != 0) { return status; } return status; } static int rx_cal_dc_off(struct rx_cal *cal, struct gain_mode *gains, int16_t *dc_i, int16_t *dc_q) { int status = BLADERF_ERR_UNEXPECTED; float mean_i, mean_q; status = load_gains(cal, gains); if (status != 0) { return status; } status = rx_samples(cal->dev, cal->samples, cal->num_samples, &cal->ts, RX_CAL_TS_INC); if (status != 0) { return status; } sample_mean(cal->samples, cal->num_samples, &mean_i, &mean_q); *dc_i = float_to_int16(mean_i); *dc_q = float_to_int16(mean_q); return 0; } static int rx_cal_sweep(struct rx_cal *cal, int16_t *corr, unsigned int sweep_len, int16_t *result_i, int16_t *result_q, float *error_i, float *error_q) { int status = BLADERF_ERR_UNEXPECTED; unsigned int n; int16_t min_corr_i = 0; int16_t min_corr_q = 0; float mean_i, mean_q; float min_val_i, min_val_q; min_val_i = min_val_q = 2048; for (n = 0; n < sweep_len; n++) { status = set_rx_dc_corr(cal->dev, corr[n], corr[n]); if (status != 0) { return status; } status = rx_samples(cal->dev, cal->samples, cal->num_samples, &cal->ts, RX_CAL_TS_INC); if (status != 0) { return status; } sample_mean(cal->samples, cal->num_samples, &mean_i, &mean_q); PR_VERBOSE(" Corr=%4d, Mean_I=%4.2f, Mean_Q=%4.2f\n", corr[n], mean_i, mean_q); /* Not using fabs() to avoid adding a -lm dependency */ if (mean_i < 0) { mean_i = -mean_i; } if (mean_q < 0) { mean_q = -mean_q; } if (mean_i < min_val_i) { min_val_i = mean_i; min_corr_i = corr[n]; } if (mean_q < min_val_q) { min_val_q = mean_q; min_corr_q = corr[n]; } } *result_i = min_corr_i; *result_q = min_corr_q; *error_i = min_val_i; *error_q = min_val_q; return 0; } static int perform_rx_cal(struct rx_cal *cal, struct dc_calibration_params *p) { int status; int16_t i_est, q_est; unsigned int sweep_len = RX_CAL_MAX_SWEEP_LEN; struct gain_mode saved_gains; struct gain_mode agc_gains[] = { { .lna_gain = BLADERF_LNA_GAIN_MAX, .rxvga1 = 30, .rxvga2 = 15 }, /* AGC Max Gain */ { .lna_gain = BLADERF_LNA_GAIN_MID, .rxvga1 = 30, .rxvga2 = 0 }, /* AGC Mid Gain */ { .lna_gain = BLADERF_LNA_GAIN_MID, .rxvga1 = 12, .rxvga2 = 0 } /* AGC Min Gain */ }; status = rx_cal_update_frequency(cal, p->frequency); if (status != 0) { return status; } /* Get an initial guess at our correction values */ status = rx_cal_coarse_estimate(cal, &i_est, &q_est); if (status != 0) { return status; } /* Perform a finer sweep of correction values */ init_rx_cal_sweep(cal->corr_sweep, &sweep_len, i_est, q_est); /* Advance our timestmap just to account for any time we may have lost */ cal->ts += RX_CAL_TS_INC; status = rx_cal_sweep(cal, cal->corr_sweep, sweep_len, &p->corr_i, &p->corr_q, &p->error_i, &p->error_q); if (status != 0) { return status; } /* Apply the nominal correction values */ status = set_rx_dc_corr(cal->dev, p->corr_i, p->corr_q); if (status != 0) { return status; } bladerf_fpga_size fpga_size; status = bladerf_get_fpga_size(cal->dev, &fpga_size); if (status != 0) { return status; } if (fpga_size != BLADERF_FPGA_40KLE && fpga_size != BLADERF_FPGA_115KLE) { return 0; } /* Measure DC correction for AGC */ status = save_gains(cal, &saved_gains); if (status != 0) { return status; } status = rx_cal_dc_off(cal, &agc_gains[2], &p->min_dc_i, &p->min_dc_q); if (status != 0) { return status; } status = rx_cal_dc_off(cal, &agc_gains[1], &p->mid_dc_i, &p->mid_dc_q); if (status != 0) { return status; } status = rx_cal_dc_off(cal, &agc_gains[0], &p->max_dc_i, &p->max_dc_q); if (status != 0) { return status; } status = load_gains(cal, &saved_gains); return status; } static int rx_cal_init_state(struct bladerf *dev, const struct rx_cal_backup *backup, struct rx_cal *state) { int status; state->dev = dev; state->num_samples = RX_CAL_COUNT; state->samples = malloc(2 * sizeof(state->samples[0]) * RX_CAL_COUNT); if (state->samples == NULL) { return BLADERF_ERR_MEM; } state->corr_sweep = malloc(sizeof(state->corr_sweep[0]) * RX_CAL_MAX_SWEEP_LEN); if (state->corr_sweep == NULL) { return BLADERF_ERR_MEM; } state->tx_freq = backup->tx_freq; status = bladerf_get_timestamp(dev, BLADERF_MODULE_RX, &state->ts); if (status != 0) { return status; } /* Schedule first RX well into the future */ state->ts += 20 * RX_CAL_TS_INC; return status; } static int rx_cal_init(struct bladerf *dev) { int status; status = bladerf_set_sample_rate(dev, BLADERF_MODULE_RX, RX_CAL_RATE, NULL); if (status != 0) { return status; } status = bladerf_set_bandwidth(dev, BLADERF_MODULE_RX, RX_CAL_BW, NULL); if (status != 0) { return status; } status = bladerf_sync_config(dev, BLADERF_MODULE_RX, BLADERF_FORMAT_SC16_Q11_META, 64, 16384, 16, 1000); if (status != 0) { return status; } status = bladerf_enable_module(dev, BLADERF_MODULE_RX, true); if (status != 0) { return status; } return status; } int dc_calibration_rx(struct bladerf *dev, struct dc_calibration_params *params, size_t params_count, bool print_status) { int status = 0; int retval = 0; struct rx_cal state; struct rx_cal_backup backup; size_t i; memset(&state, 0, sizeof(state)); status = get_rx_cal_backup(dev, &backup); if (status != 0) { return status; } status = rx_cal_init(dev); if (status != 0) { goto out; } status = rx_cal_init_state(dev, &backup, &state); if (status != 0) { goto out; } for (i = 0; i < params_count && status == 0; i++) { status = perform_rx_cal(&state, ¶ms[i]); if (status == 0 && print_status) { # ifdef DEBUG_DC_CALIBRATION const char sol = '\n'; const char eol = '\n'; # else const char sol = '\r'; const char eol = '\0'; # endif printf("%cCalibrated @ %10" PRIu64 " Hz: I=%4d (Error: %4.2f), " "Q=%4d (Error: %4.2f) ", sol, params[i].frequency, params[i].corr_i, params[i].error_i, params[i].corr_q, params[i].error_q); printf("DC-LUT: Max (I=%3d, Q=%3d) Mid (I=%3d, Q=%3d)" " Min (I=%3d, Q=%3d)%c", params[i].max_dc_i, params[i].max_dc_q, params[i].mid_dc_i, params[i].mid_dc_q, params[i].min_dc_i, params[i].min_dc_q, eol); fflush(stdout); } } if (print_status) { putchar('\n'); } out: free(state.samples); free(state.corr_sweep); retval = status; status = bladerf_enable_module(dev, BLADERF_MODULE_RX, false); if (status != 0 && retval == 0) { retval = status; } status = set_rx_cal_backup(dev, &backup); if (status != 0 && retval == 0) { retval = status; } return retval; } /******************************************************************************* * TX DC offset calibration ******************************************************************************/ #define TX_CAL_RATE (4000000) #define TX_CAL_RX_BW (3000000) #define TX_CAL_RX_LNA (BLADERF_LNA_GAIN_MAX) #define TX_CAL_RX_VGA1 (25) #define TX_CAL_RX_VGA2 (0) #define TX_CAL_TX_BW (1500000) #define TX_CAL_TS_INC (MS_TO_SAMPLES(15, TX_CAL_RATE)) #define TX_CAL_COUNT (MS_TO_SAMPLES(5, TX_CAL_RATE)) #define TX_CAL_CORR_SWEEP_LEN (4096 / 16) /* -2048:16:2048 */ #define TX_CAL_DEFAULT_LB (BLADERF_LB_RF_LNA1) struct tx_cal_backup { uint64_t rx_freq; struct bladerf_rational_rate rx_sample_rate; unsigned int rx_bandwidth; bladerf_lna_gain rx_lna; int rx_vga1; int rx_vga2; struct bladerf_rational_rate tx_sample_rate; unsigned int tx_bandwidth; bladerf_loopback loopback; }; struct tx_cal { struct bladerf *dev; int16_t *samples; /* Raw samples */ unsigned int num_samples; /* Number of raw samples */ struct complexf *filt; /* Filter state */ struct complexf *filt_out; /* Filter output */ struct complexf *post_mix; /* Post-filter, mixed to baseband */ int16_t *sweep; /* Correction sweep */ float *mag; /* Magnitude results from sweep */ uint64_t ts; /* Timestamp */ bladerf_loopback loopback; /* Current loopback mode */ bool rx_low; /* RX tuned lower than TX */ }; /* Filter used to isolate contribution of TX LO leakage in received * signal. 15th order Equiripple FIR with Fs=4e6, Fpass=1, Fstop=1e6 */ static const float tx_cal_filt[] = { 0.000327949366768f, 0.002460188536582f, 0.009842382390924f, 0.027274728394777f, 0.057835200476419f, 0.098632713294830f, 0.139062540460741f, 0.164562494987592f, 0.164562494987592f, 0.139062540460741f, 0.098632713294830f, 0.057835200476419f, 0.027274728394777f, 0.009842382390924f, 0.002460188536582f, 0.000327949366768f, }; static const unsigned int tx_cal_filt_num_taps = (sizeof(tx_cal_filt) / sizeof(tx_cal_filt[0])); static inline int set_tx_dc_corr(struct bladerf *dev, int16_t i, int16_t q) { int status; status = bladerf_set_correction(dev, BLADERF_MODULE_TX, BLADERF_CORR_LMS_DCOFF_I, i); if (status != 0) { return status; } status = bladerf_set_correction(dev, BLADERF_MODULE_TX, BLADERF_CORR_LMS_DCOFF_Q, q); return status; } static int get_tx_cal_backup(struct bladerf *dev, struct tx_cal_backup *b) { int status; status = bladerf_get_frequency(dev, BLADERF_MODULE_RX, &b->rx_freq); if (status != 0) { return status; } status = bladerf_get_rational_sample_rate(dev, BLADERF_MODULE_RX, &b->rx_sample_rate); if (status != 0) { return status; } status = bladerf_get_bandwidth(dev, BLADERF_MODULE_RX, &b->rx_bandwidth); if (status != 0) { return status; } status = bladerf_get_lna_gain(dev, &b->rx_lna); if (status != 0) { return status; } status = bladerf_get_rxvga1(dev, &b->rx_vga1); if (status != 0) { return status; } status = bladerf_get_rxvga2(dev, &b->rx_vga2); if (status != 0) { return status; } status = bladerf_get_rational_sample_rate(dev, BLADERF_MODULE_TX, &b->tx_sample_rate); if (status != 0) { return status; } status = bladerf_get_loopback(dev, &b->loopback); return status; } static int set_tx_cal_backup(struct bladerf *dev, struct tx_cal_backup *b) { int status; int retval = 0; status = bladerf_set_loopback(dev, b->loopback); if (status != 0 && retval == 0) { retval = status; } status = bladerf_set_frequency(dev, BLADERF_MODULE_RX, b->rx_freq); if (status != 0 && retval == 0) { retval = status; } status = bladerf_set_rational_sample_rate(dev, BLADERF_MODULE_RX, &b->rx_sample_rate, NULL); if (status != 0 && retval == 0) { retval = status; } status = bladerf_set_bandwidth(dev, BLADERF_MODULE_RX, b->rx_bandwidth, NULL); if (status != 0 && retval == 0) { retval = status; } status = bladerf_set_lna_gain(dev, b->rx_lna); if (status != 0 && retval == 0) { retval = status; } status = bladerf_set_rxvga1(dev, b->rx_vga1); if (status != 0 && retval == 0) { retval = status; } status = bladerf_set_rxvga2(dev, b->rx_vga2); if (status != 0 && retval == 0) { retval = status; } status = bladerf_set_rational_sample_rate(dev, BLADERF_MODULE_TX, &b->tx_sample_rate, NULL); if (status != 0 && retval == 0) { retval = status; } return retval; } static int tx_cal_update_frequency(struct tx_cal *state, uint64_t freq) { int status; bladerf_loopback lb; uint64_t rx_freq; status = bladerf_set_frequency(state->dev, BLADERF_MODULE_TX, freq); if (status != 0) { return status; } rx_freq = freq - 1000000; if (rx_freq < BLADERF_FREQUENCY_MIN) { rx_freq = freq + 1000000; state->rx_low = false; } else { state->rx_low = true; } status = bladerf_set_frequency(state->dev, BLADERF_MODULE_RX, rx_freq); if (status != 0) { return status; } if (freq < 1500000000) { lb = BLADERF_LB_RF_LNA1; PR_DBG("Switching to RF LNA1 loopback.\n"); } else { lb = BLADERF_LB_RF_LNA2; PR_DBG("Switching to RF LNA2 loopback.\n"); } if (state->loopback != lb) { status = bladerf_set_loopback(state->dev, lb); if (status == 0) { state->loopback = lb; } } return status; } static int apply_tx_cal_settings(struct bladerf *dev) { int status; status = bladerf_set_sample_rate(dev, BLADERF_MODULE_RX, TX_CAL_RATE, NULL); if (status != 0) { return status; } status = bladerf_set_bandwidth(dev, BLADERF_MODULE_RX, TX_CAL_RX_BW, NULL); if (status != 0) { return status; } status = bladerf_set_lna_gain(dev, TX_CAL_RX_LNA); if (status != 0) { return status; } status = bladerf_set_rxvga1(dev, TX_CAL_RX_VGA1); if (status != 0) { return status; } status = bladerf_set_rxvga2(dev, TX_CAL_RX_VGA2); if (status != 0) { return status; } status = bladerf_set_sample_rate(dev, BLADERF_MODULE_TX, TX_CAL_RATE, NULL); if (status != 0) { return status; } status = bladerf_set_loopback(dev, TX_CAL_DEFAULT_LB); if (status != 0) { return status; } return status; } /* We just need to flush some zeros through the system to hole the DAC at * 0+0j and remain there while letting it underrun. This alleviates the * need to worry about continuously TX'ing zeros. */ static int tx_cal_tx_init(struct bladerf *dev) { int status; int16_t zero_sample[] = { 0, 0 }; struct bladerf_metadata meta; memset(&meta, 0, sizeof(meta)); status = bladerf_sync_config(dev, BLADERF_MODULE_TX, BLADERF_FORMAT_SC16_Q11_META, 4, 16384, 2, 1000); if (status != 0) { return status; } status = bladerf_enable_module(dev, BLADERF_MODULE_TX, true); if (status != 0) { return status; } meta.flags = BLADERF_META_FLAG_TX_BURST_START | BLADERF_META_FLAG_TX_BURST_END | BLADERF_META_FLAG_TX_NOW; status = bladerf_sync_tx(dev, &zero_sample, 1, &meta, 2000); return status; } static int tx_cal_rx_init(struct bladerf *dev) { int status; status = bladerf_sync_config(dev, BLADERF_MODULE_RX, BLADERF_FORMAT_SC16_Q11_META, 64, 16384, 32, 1000); if (status != 0) { return status; } status = bladerf_enable_module(dev, BLADERF_MODULE_RX, true); return status; } static void tx_cal_state_deinit(struct tx_cal *cal) { free(cal->sweep); free(cal->mag); free(cal->samples); free(cal->filt); free(cal->filt_out); free(cal->post_mix); } /* This should be called immediately preceding the cal routines */ static int tx_cal_state_init(struct bladerf *dev, struct tx_cal *cal) { int status; cal->dev = dev; cal->num_samples = TX_CAL_COUNT; cal->loopback = TX_CAL_DEFAULT_LB; /* Interleaved SC16 Q11 samples */ cal->samples = malloc(2 * sizeof(cal->samples[0]) * cal->num_samples); if (cal->samples == NULL) { return BLADERF_ERR_MEM; } /* Filter state */ cal->filt = malloc(2 * sizeof(cal->filt[0]) * tx_cal_filt_num_taps); if (cal->filt == NULL) { return BLADERF_ERR_MEM; } /* Filter output */ cal->filt_out = malloc(sizeof(cal->filt_out[0]) * cal->num_samples); if (cal->filt_out == NULL) { return BLADERF_ERR_MEM; } /* Post-mix */ cal->post_mix = malloc(sizeof(cal->post_mix[0]) * cal->num_samples); if (cal->post_mix == NULL) { return BLADERF_ERR_MEM; } /* Correction sweep and results */ cal->sweep = malloc(sizeof(cal->sweep[0]) * TX_CAL_CORR_SWEEP_LEN); if (cal->sweep == NULL) { return BLADERF_ERR_MEM; } cal->mag = malloc(sizeof(cal->mag[0]) * TX_CAL_CORR_SWEEP_LEN); if (cal->mag == NULL) { return BLADERF_ERR_MEM; } /* Set initial RX in the future */ status = bladerf_get_timestamp(cal->dev, BLADERF_MODULE_RX, &cal->ts); if (status == 0) { cal->ts += 20 * TX_CAL_TS_INC; } return status; } /* Filter samples * Input: state->post_mix * Output: state->filt_out */ static void tx_cal_filter(struct tx_cal *state) { unsigned int n, m; struct complexf *ins1, *ins2; struct complexf *curr; /* Current filter state */ const struct complexf *filt_end = &state->filt[2 * tx_cal_filt_num_taps]; /* Reset filter state */ ins1 = &state->filt[0]; ins2 = &state->filt[tx_cal_filt_num_taps]; memset(state->filt, 0, 2 * sizeof(state->filt[0]) * tx_cal_filt_num_taps); for (n = 0; n < state->num_samples; n++) { /* Insert sample */ *ins1 = *ins2 = state->post_mix[n]; /* Convolve */ state->filt_out[n].i = 0; state->filt_out[n].q = 0; curr = ins2; for (m = 0; m < tx_cal_filt_num_taps; m++, curr--) { state->filt_out[n].i += tx_cal_filt[m] * curr->i; state->filt_out[n].q += tx_cal_filt[m] * curr->q; } /* Update insertion points */ ins2++; if (ins2 == filt_end) { ins1 = &state->filt[0]; ins2 = &state->filt[tx_cal_filt_num_taps]; } else { ins1++; } } } /* Deinterleave, scale, and mix with an -Fs/4 tone to shift TX DC offset out at * Fs/4 to baseband. * Input: state->samples * Output: state->post_mix */ static void tx_cal_mix(struct tx_cal *state) { unsigned int n, m; int mix_state; float scaled_i, scaled_q; /* Mix with -Fs/4 if RX is tuned "lower" than TX, and Fs/4 otherwise */ const int mix_state_inc = state->rx_low ? 1 : -1; mix_state = 0; for (n = 0, m = 0; n < (2 * state->num_samples); n += 2, m++) { scaled_i = state->samples[n] / 2048.0f; scaled_q = state->samples[n+1] / 2048.0f; switch (mix_state) { case 0: state->post_mix[m].i = scaled_i; state->post_mix[m].q = scaled_q; break; case 1: state->post_mix[m].i = scaled_q; state->post_mix[m].q = -scaled_i; break; case 2: state->post_mix[m].i = -scaled_i; state->post_mix[m].q = -scaled_q; break; case 3: state->post_mix[m].i = -scaled_q; state->post_mix[m].q = scaled_i; break; } mix_state = (mix_state + mix_state_inc) & 0x3; } } static int tx_cal_avg_magnitude(struct tx_cal *state, float *avg_mag) { int status; const unsigned int start = (tx_cal_filt_num_taps + 1) / 2; unsigned int n; float accum; /* Fetch samples at the current settings */ status = rx_samples(state->dev, state->samples, state->num_samples, &state->ts, TX_CAL_TS_INC); if (status != 0) { return status; } /* Deinterleave & mix TX's DC offset contribution to baseband */ tx_cal_mix(state); /* Filter out everything other than the TX DC offset's contribution */ tx_cal_filter(state); /* Compute the power (magnitude^2 to alleviate need for square root). * We skip samples here to account for the group delay of the filter; * the initial samples will be ramping up. */ accum = 0; for (n = start; n < state->num_samples; n++) { const struct complexf *s = &state->filt_out[n]; const float m = (float) sqrt(s->i * s->i + s->q * s->q); accum += m; } *avg_mag = (accum / (state->num_samples - start)); /* Scale this back up to DAC/ADC counts, just for convenience */ *avg_mag *= 2048.0; return status; } /* Apply the correction value and read the TX DC offset magnitude */ static int tx_cal_measure_correction(struct tx_cal *state, bladerf_correction c, int16_t value, float *mag) { int status; status = bladerf_set_correction(state->dev, BLADERF_MODULE_TX, c, value); if (status != 0) { return status; } state->ts += TX_CAL_TS_INC; status = tx_cal_avg_magnitude(state, mag); if (status == 0) { PR_VERBOSE(" Corr=%5d, Avg_magnitude=%f\n", value, *mag); } return status; } static int tx_cal_get_corr(struct tx_cal *state, bool i_ch, int16_t *corr_value, float *error_value) { int status; unsigned int n; int16_t corr; float mag[4]; float m1, m2, b1, b2; int16_t range_min, range_max; int16_t min_corr; float min_mag; const int16_t x[4] = { -1800, -1000, 1000, 1800 }; const bladerf_correction corr_module = i_ch ? BLADERF_CORR_LMS_DCOFF_I : BLADERF_CORR_LMS_DCOFF_Q; PR_DBG("Getting coarse estimate for %c\n", i_ch ? 'I' : 'Q'); for (n = 0; n < 4; n++) { status = tx_cal_measure_correction(state, corr_module, x[n], &mag[n]); if (status != 0) { return status; } } m1 = (mag[1] - mag[0]) / (x[1] - x[0]); b1 = mag[0] - m1 * x[0]; m2 = (mag[3] - mag[2]) / (x[3] - x[2]); b2 = mag[2] - m2 * x[2]; PR_VERBOSE(" m1=%3.8f, b1=%3.8f, m2=%3.8f, b=%3.8f\n", m1, b1, m2, b2); if (m1 < 0 && m2 > 0) { const int16_t tmp = (int16_t)((b2 - b1) / (m1 - m2) + 0.5); const int16_t corr_est = (tmp / 16) * 16; /* Number of points to sweep on either side of our estimate */ const unsigned int n_sweep = 10; PR_VERBOSE(" corr_est=%d\n", corr_est); range_min = corr_est - 16 * n_sweep; if (range_min < -2048) { range_min = -2048; } range_max = corr_est + 16 * n_sweep; if (range_max > 2048) { range_max = 2048; } } else { /* The frequency and gain combination have yielded a set of * points that do not form intersecting lines. This may be indicative * of a case where the LMS6 DC bias settings can't pull the DC offset * to a zero-crossing. We'll just do a slow, full scan to find * a minimum */ PR_VERBOSE(" Could not compute estimate. Performing full sweep.\n"); range_min = -2048; range_max = 2048; } PR_DBG("Performing correction value sweep: [%-5d : 16 :%5d]\n", range_min, range_max); min_corr = 0; min_mag = 2048; for (n = 0, corr = range_min; corr <= range_max && n < TX_CAL_CORR_SWEEP_LEN; n++, corr += 16) { float tmp; status = tx_cal_measure_correction(state, corr_module, corr, &tmp); if (status != 0) { return status; } if (tmp < 0) { tmp = -tmp; } if (tmp < min_mag) { min_corr = corr; min_mag = tmp; } } /* Leave the device set to the minimum */ status = bladerf_set_correction(state->dev, BLADERF_MODULE_TX, corr_module, min_corr); if (status == 0) { *corr_value = min_corr; *error_value = min_mag; } return status; } static int perform_tx_cal(struct tx_cal *state, struct dc_calibration_params *p) { int status = 0; status = tx_cal_update_frequency(state, p->frequency); if (status != 0) { return status; } state->ts += TX_CAL_TS_INC; /* Perform I calibration */ status = tx_cal_get_corr(state, true, &p->corr_i, &p->error_i); if (status != 0) { return status; } /* Perform Q calibration */ status = tx_cal_get_corr(state, false, &p->corr_q, &p->error_q); if (status != 0) { return status; } /* Re-do I calibration to try to further fine-tune result */ status = tx_cal_get_corr(state, true, &p->corr_i, &p->error_i); if (status != 0) { return status; } /* Apply the resulting nominal values */ status = set_tx_dc_corr(state->dev, p->corr_i, p->corr_q); return status; } int dc_calibration_tx(struct bladerf *dev, struct dc_calibration_params *params, size_t num_params, bool print_status) { int status = 0; int retval = 0; struct tx_cal_backup backup; struct tx_cal state; size_t i; memset(&state, 0, sizeof(state)); /* Backup the device state prior to making changes */ status = get_tx_cal_backup(dev, &backup); if (status != 0) { return status; } /* Configure the device for our TX cal operation */ status = apply_tx_cal_settings(dev); if (status != 0) { goto out; } /* Enable TX and run zero samples through the device */ status = tx_cal_tx_init(dev); if (status != 0) { goto out; } /* Enable RX */ status = tx_cal_rx_init(dev); if (status != 0) { goto out; } /* Initialize calibration state information and resources */ status = tx_cal_state_init(dev, &state); if (status != 0) { goto out; } for (i = 0; i < num_params && status == 0; i++) { status = perform_tx_cal(&state, ¶ms[i]); if (status == 0 && print_status) { # ifdef DEBUG_DC_CALIBRATION const char sol = '\n'; const char eol = '\n'; # else const char sol = '\r'; const char eol = '\0'; # endif printf("%cCalibrated @ %10" PRIu64 " Hz: " "I=%4d (Error: %4.2f), " "Q=%4d (Error: %4.2f) %c", sol, params[i].frequency, params[i].corr_i, params[i].error_i, params[i].corr_q, params[i].error_q, eol); fflush(stdout); } } if (print_status) { putchar('\n'); } out: retval = status; status = bladerf_enable_module(dev, BLADERF_MODULE_RX, false); if (status != 0 && retval == 0) { retval = status; } status = bladerf_enable_module(dev, BLADERF_MODULE_TX, false); if (status != 0 && retval == 0) { retval = status; } tx_cal_state_deinit(&state); status = set_tx_cal_backup(dev, &backup); if (status != 0 && retval == 0) { retval = status; } return retval; } int dc_calibration(struct bladerf *dev, bladerf_module module, struct dc_calibration_params *params, size_t num_params, bool show_status) { int status; switch (module) { case BLADERF_MODULE_RX: status = dc_calibration_rx(dev, params, num_params, show_status); break; case BLADERF_MODULE_TX: status = dc_calibration_tx(dev, params, num_params, show_status); break; default: status = BLADERF_ERR_INVAL; } return status; } bladeRF-2024.05/host/common/src/devcfg.c000066400000000000000000000555461457144405000176460ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014-2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include #include #include #include #include #include "devcfg.h" #include "conversions.h" #define DEVCFG_DFLT_TX_FREQ 1000000000 #define DEVCFG_DFLT_TXVGA1 (-14) #define DEVCFG_DFLT_TXVGA2 0 #define DEVCFG_DFLT_RX_FREQ 1000000000 #define DEVCFG_DFLT_LNAGAIN BLADERF_LNA_GAIN_MAX #define DEVCFG_DFLT_RXVGA1 30 #define DEVCFG_DFLT_RXVGA2 0 #define DEVCFG_DFLT_SAMPLERATE 2000000 #define DEVCFG_DFLT_BANDWIDTH 1500000 #define DEVCFG_DFLT_SAMPLES_PER_BUF 8192 #define DEVCFG_DFLT_NUM_BUFFERS 64 #define DEVCFG_DFLT_NUM_TRANSFERS 16 #define DEVCFG_DFLT_STREAM_TIMEMOUT_MS 5000 #define DEVCFG_DFLT_SYNC_TIMEOUT_MS (2 * DEVCFG_DFLT_STREAM_TIMEMOUT_MS) #define OPTION_HELP 'h' #define OPTION_DEVICE 'd' #define OPTION_LOOPBACK 'l' #define OPTION_VERBOSITY 'v' #define OPTION_SAMPLERATE 's' #define OPTION_RX_SAMPLERATE 0x80 #define OPTION_TX_SAMPLERATE 0x81 #define OPTION_BANDWIDTH 'b' #define OPTION_RX_BANDWIDTH 0x82 #define OPTION_TX_BANDWIDTH 0x83 #define OPTION_FREQUENCY 'f' #define OPTION_RX_FREQUENCY 0x84 #define OPTION_TX_FREQUENCY 0x85 #define OPTION_LNAGAIN 0x86 #define OPTION_RXVGA1 0x87 #define OPTION_RXVGA2 0x88 #define OPTION_TXVGA1 0x89 #define OPTION_TXVGA2 0x8a #define OPTION_SAMPLES_PER_BUF 0x91 #define OPTION_NUM_BUFFERS 0x92 #define OPTION_NUM_TRANSFERS 0x93 #define OPTION_STREAM_TIMEOUT 0x94 #define OPTION_SYNC_TIMEOUT 0x95 #define OPTION_ENABLE_XB200 0x96 static const numeric_suffix hz_suffixes[] = { { "K", 1000 }, { "KHz", 1000 }, { "M", 1000000 }, { "MHz", 1000000 }, { "G", 1000000000 }, { "GHz", 1000000000 }, }; static const struct option devcfg_long_options[] = { { "help", no_argument, 0, OPTION_HELP }, { "device", required_argument, 0, OPTION_DEVICE }, { "verbosity", required_argument, 0, OPTION_VERBOSITY }, { "samplerate", required_argument, 0, OPTION_SAMPLERATE }, { "rx-samplerate", required_argument, 0, OPTION_RX_SAMPLERATE }, { "tx-samplerate", required_argument, 0, OPTION_TX_SAMPLERATE }, { "bandwidth", required_argument, 0, OPTION_BANDWIDTH }, { "rx-bandwidth", required_argument, 0, OPTION_RX_BANDWIDTH }, { "tx-bandwidth", required_argument, 0, OPTION_TX_BANDWIDTH }, { "frequency", required_argument, 0, OPTION_FREQUENCY }, { "rx-frequency", required_argument, 0, OPTION_RX_FREQUENCY }, { "tx-frequency", required_argument, 0, OPTION_TX_FREQUENCY }, { "lna-gain", required_argument, 0, OPTION_LNAGAIN }, { "rxvga1-gain", required_argument, 0, OPTION_RXVGA1 }, { "rxvga2-gain", required_argument, 0, OPTION_RXVGA2 }, { "txvga1-gain", required_argument, 0, OPTION_TXVGA1 }, { "txvga2-gain", required_argument, 0, OPTION_TXVGA2 }, { "loopback", required_argument, 0, OPTION_LOOPBACK }, { "xb200", no_argument, 0, OPTION_ENABLE_XB200 }, { "samples-per-buffer", required_argument, 0, OPTION_SAMPLES_PER_BUF }, { "num-buffers", required_argument, 0, OPTION_NUM_BUFFERS }, { "num-transfers", required_argument, 0, OPTION_NUM_TRANSFERS }, { "stream-timeout", required_argument, 0, OPTION_STREAM_TIMEOUT }, { "sync-timeout", required_argument, 0, OPTION_SYNC_TIMEOUT }, }; void devcfg_init(struct devcfg *c) { c->device_specifier = NULL; c->tx_frequency = DEVCFG_DFLT_TX_FREQ; c->tx_bandwidth = DEVCFG_DFLT_BANDWIDTH; c->tx_samplerate = DEVCFG_DFLT_SAMPLERATE; c->txvga1 = DEVCFG_DFLT_TXVGA1; c->txvga2 = DEVCFG_DFLT_TXVGA2; c->rx_frequency = DEVCFG_DFLT_TX_FREQ; c->rx_bandwidth = DEVCFG_DFLT_BANDWIDTH; c->rx_samplerate = DEVCFG_DFLT_SAMPLERATE; c->lnagain = DEVCFG_DFLT_LNAGAIN; c->rxvga1 = DEVCFG_DFLT_RXVGA1; c->rxvga2 = DEVCFG_DFLT_RXVGA2; c->loopback = BLADERF_LB_NONE; c->verbosity = BLADERF_LOG_LEVEL_INFO; c->enable_xb200 = false; c->samples_per_buffer = DEVCFG_DFLT_SAMPLES_PER_BUF; c->num_buffers = DEVCFG_DFLT_NUM_BUFFERS; c->num_transfers = DEVCFG_DFLT_NUM_TRANSFERS; c->stream_timeout_ms = DEVCFG_DFLT_STREAM_TIMEMOUT_MS; c->sync_timeout_ms = DEVCFG_DFLT_SYNC_TIMEOUT_MS; } void devcfg_deinit(struct devcfg *c) { free(c->device_specifier); } void devcfg_print_common_help(const char *title) { if (title != NULL) { printf("%s", title); } printf(" -h, --help Show this help text.\n"); printf(" -d, --device Open the specified device.\n"); printf(" -v, --verbosity Set the libbladeRF verbosity level.\n"); printf(" --xb200 Enable the XB-200. This will remain enabled\n"); printf(" until the device is power-cycled.\n"); printf("\n"); printf(" -f, --frequency Set RX and TX to the specified frequency.\n"); printf(" --rx-frequency Set RX to the specified frequency.\n"); printf(" --tx-frequency Set TX to the specified frequency.\n"); printf("\n"); printf(" -s, --samplerate Set RX and TX to the specified sample rate.\n"); printf(" --rx-samplerate Set RX to the specified sample rate.\n"); printf(" --tx-samplerate Set RX to the specified sample rate.\n"); printf("\n"); printf(" -b, --bandwidth Set RX and TX to the specified bandwidth.\n"); printf(" --rx-bandwidth Set RX to the specified bandwidth.\n"); printf(" --tx-bandwidth Set TX to the specified bandwidth.\n"); printf("\n"); printf(" --lna-gain Set the RX LNA to the specified gain.\n"); printf(" Options are: bypass, mid, max\n"); printf(" --rxvga1-gain Set RX VGA1 to the specified gain.\n"); printf(" --rxvga2-gain Set RX VGA2 to the specified gain.\n"); printf(" --txvga1-gain Set TX VGA1 to the specified gain.\n"); printf(" --txvga2-gain Set TX VGA2 to the specified gain.\n"); printf("\n"); printf(" --num-buffers Allocate sample buffers.\n"); printf(" --samples-per-buffer Allocate samples in each sample buffer.\n"); printf(" --num-transfers Utilize up to simultaneous USB transfers.\n"); printf(" --stream-timeout Set stream timeout to milliseconds.\n"); printf(" --sync-timeout Set sync function timeout to milliseconds.\n"); } struct option * devcfg_get_long_options(const struct option *app_options) { struct option *ret; size_t app_size = 0; const size_t devcfg_size = sizeof(devcfg_long_options); while (app_options[app_size].name != NULL) { app_size++; } /* Account for 0-entry */ app_size = (app_size + 1) * sizeof(app_options[0]); ret = malloc(devcfg_size + app_size); if (ret != NULL) { memcpy(ret, &devcfg_long_options, devcfg_size); memcpy(ret + ARRAY_SIZE(devcfg_long_options) , app_options, app_size); } return ret; } int devcfg_handle_args(int argc, char **argv, const char *option_str, const struct option *long_options, struct devcfg *config) { int c; bool ok; int status; unsigned int freq_min; while ((c = getopt_long(argc, argv, option_str, long_options, NULL)) >= 0) { if (config->enable_xb200) { freq_min = BLADERF_FREQUENCY_MIN_XB200; } else { freq_min = BLADERF_FREQUENCY_MIN; } switch (c) { case OPTION_HELP: return 1; break; case OPTION_DEVICE: if (config->device_specifier == NULL) { config->device_specifier = strdup(optarg); if (config->device_specifier == NULL) { perror("strdup"); return -1; } } break; case OPTION_LOOPBACK: status = str2loopback(optarg, &config->loopback); if (status != 0) { fprintf(stderr, "Invalid loopback mode: %s\n", optarg); return -1; } break; case OPTION_VERBOSITY: config->verbosity = str2loglevel(optarg, &ok); if (!ok) { fprintf(stderr, "Invalid verbosity level: %s\n", optarg); return -1; } break; case OPTION_ENABLE_XB200: config->enable_xb200 = true; break; case OPTION_FREQUENCY: config->rx_frequency = str2uint_suffix(optarg, freq_min, BLADERF_FREQUENCY_MAX, hz_suffixes, ARRAY_SIZE(hz_suffixes), &ok); if (!ok) { fprintf(stderr, "Invalid frequency: %s\n", optarg); return -1; } else { config->tx_frequency = config->rx_frequency; } break; case OPTION_RX_FREQUENCY: config->rx_frequency = str2uint_suffix(optarg, freq_min, BLADERF_FREQUENCY_MAX, hz_suffixes, ARRAY_SIZE(hz_suffixes), &ok); if (!ok) { fprintf(stderr, "Invalid RX frequency: %s\n", optarg); return -1; } break; case OPTION_TX_FREQUENCY: config->tx_frequency = str2uint_suffix(optarg, freq_min, BLADERF_FREQUENCY_MAX, hz_suffixes, ARRAY_SIZE(hz_suffixes), &ok); if (!ok) { fprintf(stderr, "Invalid TX frequency: %s\n", optarg); return -1; } break; case OPTION_SAMPLERATE: config->rx_samplerate = str2uint_suffix(optarg, BLADERF_SAMPLERATE_MIN, BLADERF_SAMPLERATE_REC_MAX, hz_suffixes, ARRAY_SIZE(hz_suffixes), &ok); if (!ok) { fprintf(stderr, "Invalid sample rate: %s\n", optarg); return -1; } else { config->tx_samplerate = config->rx_samplerate; } break; case OPTION_RX_SAMPLERATE: config->rx_samplerate = str2uint_suffix(optarg, BLADERF_SAMPLERATE_MIN, BLADERF_SAMPLERATE_REC_MAX, hz_suffixes, ARRAY_SIZE(hz_suffixes), &ok); if (!ok) { fprintf(stderr, "Invalid RX sample rate: %s\n", optarg); return -1; } break; case OPTION_TX_SAMPLERATE: config->tx_samplerate = str2uint_suffix(optarg, BLADERF_SAMPLERATE_MIN, BLADERF_SAMPLERATE_REC_MAX, hz_suffixes, ARRAY_SIZE(hz_suffixes), &ok); if (!ok) { fprintf(stderr, "Invalid TX sample rate: %s\n", optarg); return -1; } break; case OPTION_BANDWIDTH: config->rx_bandwidth = str2uint_suffix(optarg, BLADERF_BANDWIDTH_MIN, BLADERF_BANDWIDTH_MAX, hz_suffixes, ARRAY_SIZE(hz_suffixes), &ok); if (!ok) { fprintf(stderr, "Invalid bandwidth: %s\n", optarg); return -1; } else { config->tx_bandwidth = config->rx_bandwidth; } break; case OPTION_RX_BANDWIDTH: config->rx_bandwidth = str2uint_suffix(optarg, BLADERF_BANDWIDTH_MIN, BLADERF_BANDWIDTH_MAX, hz_suffixes, ARRAY_SIZE(hz_suffixes), &ok); if (!ok) { fprintf(stderr, "Invalid RX bandwidth: %s\n", optarg); return -1; } break; case OPTION_TX_BANDWIDTH: config->tx_bandwidth = str2uint_suffix(optarg, BLADERF_BANDWIDTH_MIN, BLADERF_BANDWIDTH_MAX, hz_suffixes, ARRAY_SIZE(hz_suffixes), &ok); if (!ok) { fprintf(stderr, "Invalid TX bandwidth: %s\n", optarg); return -1; } break; case OPTION_LNAGAIN: status = str2lnagain(optarg, &config->lnagain); if (status != 0) { fprintf(stderr, "Invalid RX LNA gain: %s\n", optarg); return -1; } break; case OPTION_RXVGA1: config->rxvga1 = str2int(optarg, BLADERF_RXVGA1_GAIN_MIN, BLADERF_RXVGA1_GAIN_MAX, &ok); if (!ok) { fprintf(stderr, "Invalid RXVGA1 gain: %s\n", optarg); return -1; } break; case OPTION_RXVGA2: config->rxvga2 = str2int(optarg, BLADERF_RXVGA2_GAIN_MIN, BLADERF_RXVGA2_GAIN_MAX, &ok); if (!ok) { fprintf(stderr, "Invalid RXVGA1 gain: %s\n", optarg); return -1; } break; case OPTION_TXVGA1: config->txvga1 = str2int(optarg, BLADERF_TXVGA1_GAIN_MIN, BLADERF_TXVGA1_GAIN_MAX, &ok); if (!ok) { fprintf(stderr, "Invalid TXVGA1 gain: %s\n", optarg); return -1; } break; case OPTION_TXVGA2: config->txvga2 = str2int(optarg, BLADERF_TXVGA2_GAIN_MIN, BLADERF_TXVGA2_GAIN_MAX, &ok); if (!ok) { fprintf(stderr, "Invalid TXVGA2 gain: %s\n", optarg); return -1; } break; case OPTION_NUM_BUFFERS: config->num_buffers = str2uint(optarg, 1, UINT_MAX, &ok); if (!ok) { fprintf(stderr, "Invalid buffer count: %s\n", optarg); return -1; } break; case OPTION_SAMPLES_PER_BUF: config->samples_per_buffer = str2uint(optarg, 1024, UINT_MAX, &ok); if (!ok) { fprintf(stderr, "Invalid buffer size (in samples): %s\n", optarg); return -1; } break; case OPTION_NUM_TRANSFERS: config->num_transfers = str2uint(optarg, 1, UINT_MAX, &ok); if (!ok) { fprintf(stderr, "Invalid transfer count: %s\n", optarg); return -1; } break; case OPTION_STREAM_TIMEOUT: config->stream_timeout_ms = str2uint(optarg, 0, UINT_MAX, &ok); if (!ok) { fprintf(stderr, "Invalid stream timeout: %s\n", optarg); return -1; } break; case OPTION_SYNC_TIMEOUT: config->sync_timeout_ms = str2uint(optarg, 0, UINT_MAX, &ok); if (!ok) { fprintf(stderr, "Invalid sync function timeout: %s\n", optarg); return -1; } break; } } return 0; } int devcfg_apply(struct bladerf *dev, const struct devcfg *c) { int status; const char *board_name; board_name = bladerf_get_board_name(dev); bladerf_log_set_verbosity(c->verbosity); status = bladerf_set_loopback(dev, c->loopback); if (status != 0) { fprintf(stderr, "Failed to set loopback: %s\n", bladerf_strerror(status)); return -1; } if (c->enable_xb200) { status = bladerf_expansion_attach(dev, BLADERF_XB_200); if (status != 0) { fprintf(stderr, "Failed to attach XB-200.\n"); return -1; } } status = bladerf_set_frequency(dev, BLADERF_MODULE_RX, c->rx_frequency); if (status != 0) { fprintf(stderr, "Failed to set RX frequency: %s\n", bladerf_strerror(status)); return -1; } status = bladerf_set_frequency(dev, BLADERF_MODULE_TX, c->tx_frequency); if (status != 0) { fprintf(stderr, "Failed to set TX frequency: %s\n", bladerf_strerror(status)); return -1; } status = bladerf_set_sample_rate(dev, BLADERF_MODULE_RX, c->rx_samplerate, NULL); if (status != 0) { fprintf(stderr, "Failed to set RX sample rate:%s\n", bladerf_strerror(status)); return -1; } status = bladerf_set_sample_rate(dev, BLADERF_MODULE_TX, c->tx_samplerate, NULL); if (status != 0) { fprintf(stderr, "Failed to set TX sample rate: %s\n", bladerf_strerror(status)); return -1; } status = bladerf_set_bandwidth(dev, BLADERF_MODULE_RX, c->rx_bandwidth, NULL); if (status != 0) { fprintf(stderr, "Failed to set RX bandwidth: %s\n", bladerf_strerror(status)); return -1; } status = bladerf_set_bandwidth(dev, BLADERF_MODULE_TX, c->tx_bandwidth, NULL); if (status != 0) { fprintf(stderr, "Failed to set RX bandwidth: %s\n", bladerf_strerror(status)); return -1; } if (strcasecmp(board_name, "bladerf1") == 0) { status = bladerf_set_lna_gain(dev, c->lnagain); if (status != 0) { fprintf(stderr, "Failed to set RX LNA gain: %s\n", bladerf_strerror(status)); return -1; } status = bladerf_set_rxvga1(dev, c->rxvga1); if (status != 0) { fprintf(stderr, "Failed to set RX VGA1 gain: %s\n", bladerf_strerror(status)); return -1; } status = bladerf_set_rxvga2(dev, c->rxvga2); if (status != 0) { fprintf(stderr, "Failed to set RX VGA2 gain: %s\n", bladerf_strerror(status)); return -1; } status = bladerf_set_txvga1(dev, c->txvga1); if (status != 0) { fprintf(stderr, "Failed to set TX VGA1 gain: %s\n", bladerf_strerror(status)); return -1; } status = bladerf_set_txvga2(dev, c->txvga2); if (status != 0) { fprintf(stderr, "Failed to set TX VGA2 gain: %s\n", bladerf_strerror(status)); return -1; } } return 0; } int devcfg_perform_sync_config(struct bladerf *dev, bladerf_module module, bladerf_format format, const struct devcfg *config, bool enable_module) { int status = bladerf_sync_config(dev, module, format, config->num_buffers, config->samples_per_buffer, config->num_transfers, config->stream_timeout_ms); if (status != 0) { fprintf(stderr, "Failed to configure %s: %s\n", module == BLADERF_MODULE_RX ? "RX" : "TX", bladerf_strerror(status)); return -1; } if (enable_module) { status = bladerf_enable_module(dev, module, true); if (status != 0) { fprintf(stderr, "Failed to enable %s module: %s\n", module == BLADERF_MODULE_RX ? "RX" : "TX", bladerf_strerror(status)); } } return 0; } bladeRF-2024.05/host/common/src/log.c000066400000000000000000000060041457144405000171520ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2013 Nuand LLC. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifdef LOGGING_ENABLED #include #if !defined(WIN32) && !defined(__CYGWIN__) && defined(LOG_SYSLOG_ENABLED) #include #endif #include #include static bladerf_log_level filter_level = BLADERF_LOG_LEVEL_INFO; void log_write(bladerf_log_level level, const char *format, ...) { /* Only process this message if its level exceeds the current threshold */ if (level >= filter_level) { va_list args; /* Write the log message */ va_start(args, format); #if defined(WIN32) || defined(__CYGWIN__) vfprintf(stderr, format, args); #else # if defined (LOG_SYSLOG_ENABLED) { int syslog_level; switch (level) { case BLADERF_LOG_LEVEL_VERBOSE: case BLADERF_LOG_LEVEL_DEBUG: syslog_level = LOG_DEBUG; break; case BLADERF_LOG_LEVEL_INFO: syslog_level = LOG_INFO; break; case BLADERF_LOG_LEVEL_WARNING: syslog_level = LOG_WARNING; break; case BLADERF_LOG_LEVEL_ERROR: syslog_level = LOG_ERR; break; case BLADERF_LOG_LEVEL_CRITICAL: syslog_level = LOG_CRIT; break; default: /* Shouldn't be used, so just route it to a low level */ syslog_level = LOG_DEBUG; break; } vsyslog(syslog_level | LOG_USER, format, args); } # else vfprintf(stderr, format, args); # endif #endif va_end(args); } } void log_set_verbosity(bladerf_log_level level) { filter_level = level; } bladerf_log_level log_get_verbosity() { return filter_level; } #endif bladeRF-2024.05/host/common/src/osx/000077500000000000000000000000001457144405000170365ustar00rootroot00000000000000bladeRF-2024.05/host/common/src/osx/clock_gettime.c000066400000000000000000000037361457144405000220240ustar00rootroot00000000000000/* * clock_gettime() wrapper for OSX based upon jbenet's github "gist": * https://gist.github.com/jbenet/1087739 * * Copyright (c) 2011 Juan Batiz-Benet (https://github.com/jbenet) * Copyright (c) 2013-2017 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include "clock_gettime.h" #include #include #include int clock_gettime(clockid_t clk_id, struct timespec *tp) { kern_return_t ret; clock_serv_t cclock; mach_timespec_t mts; ret = host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &cclock); if (ret != 0) { errno = EINVAL; return -1; } ret = clock_get_time(cclock, &mts); if (ret != 0) { goto clock_gettime_out; } tp->tv_sec = mts.tv_sec; tp->tv_nsec = mts.tv_nsec; clock_gettime_out: if (mach_port_deallocate(mach_task_self(), cclock) != 0 || ret != 0) { errno = EINVAL; return -1; } else { return 0; } } bladeRF-2024.05/host/common/src/parse.c000066400000000000000000000257551457144405000175210ustar00rootroot00000000000000/* * Copyright (c) 2017 Nuand LLC. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include "parse.h" #include "conversions.h" #include "log.h" #include #include static char **add_arg( char **argv, int argc, const char *buf, int start, int end, int quote_count) { char **rv; char *d_ptr; int i; int len; char c; char quote_char; quote_char = 0; rv = (char **)realloc(argv, sizeof(char *) * (argc + 1)); if (rv == NULL) { return NULL; } rv[argc] = NULL; len = end - start + 1; d_ptr = (char *)malloc(len + 1 - quote_count * 2); if (d_ptr == NULL) { free(rv); return NULL; } rv[argc - 1] = d_ptr; for (i = 0; i < len; i++) { c = buf[start + i]; if (!quote_char) { /* We are not in a quote, copy everything but quote chars */ if (c == '"' || c == '\'') { quote_char = c; } else { *d_ptr++ = c; } } else { /* We are in a quote, copy everything but the current quote char */ if (c == quote_char) { quote_char = 0; } else { *d_ptr++ = c; } } } *d_ptr = '\0'; return rv; } int str2args(const char *line, char comment_char, char ***argv) { char **rv; int argc; unsigned i; size_t len; bool in_arg; char c; char quote_char; int arg_start; int quote_count; rv = NULL; argc = 0; quote_char = 0; arg_start = 0; quote_count = 0; len = strlen(line); in_arg = false; for (i = 0; i < len; i++) { c = line[i]; if (in_arg) { /* Found the end of a quote! */ if (quote_char) { if (quote_char == c) { quote_char = 0; } continue; } /* Found the beginning of a quote! */ if (c == '\'' || c == '"') { quote_count++; quote_char = c; continue; } /* Found whitespace outside of quote */ if (c == ' ' || c == '\t' || c == '\r' || c == '\n') { in_arg = false; argc++; rv = add_arg(rv, argc, line, arg_start, i - 1, quote_count); if (rv == NULL) return -1; } } else { if (c == comment_char) { break; } /* Enter a new argument */ if (c != ' ' && c != '\t' && c != '\r' && c != '\n') { /* If first argument is a tick it means we're in a quote */ if (c == '\'' || c == '"') { quote_char = c; } else { quote_char = 0; } quote_count = 0; arg_start = i; in_arg = true; } /* else this is still whitespace */ } } /* reached the end of the line, check to see if current arg needs to * be closed */ if (in_arg) { if (quote_char) { free_args(argc, rv); return -2; } else { argc++; rv = add_arg(rv, argc, line, arg_start, i - 1, quote_count); if (rv == NULL) { return -1; } } } *argv = rv; return argc; } void free_args(int argc, char **argv) { int i; for (i = 0; i < argc; i++) { free(argv[i]); } free(argv); } static struct config_options *add_opt( struct config_options *optv, int optc, char *key, char *val, int lineno) { struct config_options *rv; char *ptr1, *ptr2; rv = (struct config_options *)realloc(optv, sizeof(struct config_options) * optc); if (rv == NULL) { return NULL; } ptr1 = (char *)malloc(strlen(key) + 1); if (ptr1 == NULL) { free(rv); return NULL; } strcpy(ptr1, key); rv[optc - 1].key = ptr1; ptr2 = (char *)malloc(strlen(val) + 1); if (ptr2 == NULL) { free(ptr1); free(rv); return NULL; } strcpy(ptr2, val); rv[optc - 1].value = ptr2; rv[optc - 1].lineno = lineno; return rv; } bool update_match(struct bladerf *dev, char *str) { size_t len; int status; struct bladerf_devinfo info; bladerf_fpga_size fpga_size; status = bladerf_get_devinfo(dev, &info); if (status < 0) return false; bladerf_get_fpga_size(dev, &fpga_size); if (status < 0) return false; str++; len = strlen(str); if (str[len - 1] == ']') str[len - 1] = '\0'; if (!strcmp(str, "x40")) { return fpga_size == BLADERF_FPGA_40KLE; } else if (!strcmp(str, "x115")) { return fpga_size == BLADERF_FPGA_115KLE; } status = bladerf_devstr_matches(str, &info); return status == 1; } int str2options(struct bladerf *dev, const char *buf, size_t buf_sz, struct config_options **opts) { char *line; char *d_ptr; int line_num; char c; unsigned i; struct config_options *optv; int optc; char **line_argv; int line_argc; bool match; match = true; optv = NULL; optc = 0; line_num = 1; line = malloc(buf_sz + 1); if (!line) return BLADERF_ERR_MEM; d_ptr = line; for (i = 0; i < buf_sz; i++) { c = buf[i]; if (c == '\n') { /* deal with the old line */ *d_ptr = 0; line_argc = str2args(line, '#', &line_argv); if (line_argc < 0) goto out; /* handle line */ if (line_argc > 3) { log_error("Too many arguments in bladeRF.conf on line %d\n", line_num); goto out; } else if (match && line_argc == 2) { optc++; optv = add_opt(optv, optc, line_argv[0], line_argv[1], line_num); if (!optv) { optc = -1; goto out; } } else if (line_argc == 1) { if (*line_argv[0] != '[') { log_error("Expecting scoping line (requires [ and ]) on " "line %d\n", line_num); } match = update_match(dev, line_argv[0]); } /* free line */ free_args(line_argc, line_argv); /* setup to capture the next line */ line_num++; d_ptr = line; } else { *d_ptr++ = c; } } if (opts) *opts = optv; out: free(line); return optc; } void free_opts(struct config_options *optv, int optc) { int i; for (i = 0; i < optc; i++) { free(optv[i].key); free(optv[i].value); } free(optv); } int csv2int(const char *line, int ***args) { const char delim[] = " \r\n\t,.:"; /* supported delimiters */ const size_t MAXLEN = 128; /* max line length (with newline and null) */ static size_t arglen = 2; /* tunable: initial expected column count */ char *myline = NULL; /* local copy of 'line' */ char *parsestr = NULL; /* ptr to 'myline' on first strtok_r */ char *saveptr = NULL; /* strtok_r state pointer */ int **argout = NULL; /* array of output values */ size_t count = 0; /* count of tokens extracted */ size_t i; // Validity check if (NULL == line) { log_debug("line is null\n"); return 0; } if (NULL == args) { log_error("args is null\n"); goto fail; } // strtok_r doesn't respect const, so make a copy of 'line' myline = calloc(MAXLEN, 1); if (NULL == myline) { log_error("could not calloc myline\n"); goto fail; } myline = strncpy(myline, line, MAXLEN - 1); // Initial allocation of argout argout = malloc(arglen * sizeof(int *)); if (NULL == argout) { log_error("could not malloc argout\n"); goto fail; } // Loop over input until strtok_r returns a NULL for (i = 0, parsestr = myline; true; ++i, parsestr = NULL) { char *token = NULL; /* return token from strtok_r */ bool ok; token = strtok_r(parsestr, delim, &saveptr); if (NULL == token) { break; } // Expand argout if necessary if (i >= arglen) { arglen *= 2; log_verbose("expanding allocation to %zu column(s)\n", arglen); int **newargout = realloc(argout, arglen * sizeof(int *)); if (NULL == newargout) { log_error("could not realloc(argout,%zu)\n", arglen); goto fail; } argout = newargout; } // Allocate memory for this value argout[i] = malloc(sizeof(int)); if (NULL == argout[i]) { log_error("could not malloc argout[%zu]\n", i); goto fail; } // Update the count now, in case str2int fails and we need to dealloc ++count; // Parse token into an integer value *argout[i] = str2int(token, INT32_MIN, INT32_MAX, &ok); if (!ok) { log_error("str2int failed on '%s'\n", token); goto fail; } } // Success! *args = argout; free(myline); // If arglen is too big, cut it in half next time... if (count <= (arglen / 2)) { arglen /= 2; log_verbose("decreasing future arglen to %zu\n", arglen); } return (int)count; fail: // Deallocate everything... free(myline); free_csv2int((int)count, argout); return -1; } void free_csv2int(int argc, int **args) { int i; if (NULL == args) { return; } for (i = 0; i < argc; ++i) { free(args[i]); } free(args); } bladeRF-2024.05/host/common/src/range.c000066400000000000000000000047671457144405000175030ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2018 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef BLADERF_NIOS_BUILD #include "devices.h" #endif // BLADERF_NIOS_BUILD /* Avoid building this in low-memory situations */ #if !defined(BLADERF_NIOS_BUILD) || defined(BLADERF_NIOS_LIBAD936X) #include "range.h" #if !defined(BLADERF_NIOS_BUILD) && !defined(BLADERF_NIOS_PC_SIMULATION) #include "log.h" #endif bool is_within_range(struct bladerf_range const *range, int64_t value) { if (NULL == range) { log_error("%s: range is null\n", __FUNCTION__); return false; } return (__scale(range, value) >= range->min && __scale(range, value) <= range->max); } int64_t clamp_to_range(struct bladerf_range const *range, int64_t value) { if (NULL == range) { log_error("%s: range is null\n", __FUNCTION__); return value; } if (__scale(range, value) < range->min) { log_debug("%s: Requested value %" PRIi64 " is below range [%g,%g], clamping to %" PRIi64 "\n", __FUNCTION__, value, __unscale(range, range->min), __unscale(range, range->max), __unscale_int64(range, range->min)); value = __unscale_int64(range, range->min); } if (__scale(range, value) > range->max) { log_debug("%s: Requested value %" PRIi64 " is above range [%g,%g], clamping to %" PRIi64 "\n", __FUNCTION__, value, __unscale(range, range->min), __unscale(range, range->max), __unscale_int64(range, range->max)); value = __unscale_int64(range, range->max); } return value; } #endif // !defined(BLADERF_NIOS_BUILD) || defined(BLADERF_NIOS_LIBAD936X) bladeRF-2024.05/host/common/src/sha256.c000066400000000000000000000237121457144405000174060ustar00rootroot00000000000000/*- * Copyright 2005 Colin Percival * Copyright 2013 Daniel Gröber * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include #include #include "sha256.h" #if BLADERF_BIG_ENDIAN == 1 /* Copy a vector of big-endian uint32_t into a vector of bytes */ #define be32enc_vect(dst, src, len) \ memcpy((void *)dst, (const void *)src, (size_t)len) /* Copy a vector of bytes into a vector of big-endian uint32_t */ #define be32dec_vect(dst, src, len) \ memcpy((void *)dst, (const void *)src, (size_t)len) #else /* From libbsd/include/bsd/sys/endian.h */ /* * Copyright © 2011 Guillem Jover * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ static __inline uint32_t be32dec(const void *pp) { uint8_t const *p = (uint8_t const *)pp; return (((unsigned)p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3]); } static __inline void be32enc(void *pp, uint32_t u) { uint8_t *p = (uint8_t *)pp; p[0] = (u >> 24) & 0xff; p[1] = (u >> 16) & 0xff; p[2] = (u >> 8) & 0xff; p[3] = u & 0xff; } /* END from libbsd/include/bsd/sys/endian.h */ /* * Encode a length len/4 vector of (uint32_t) into a length len vector of * (unsigned char) in big-endian form. Assumes len is a multiple of 4. */ static void be32enc_vect(unsigned char *dst, const uint32_t *src, size_t len) { size_t i; for (i = 0; i < len / 4; i++) be32enc(dst + i * 4, src[i]); } /* * Decode a big-endian length len vector of (unsigned char) into a length * len/4 vector of (uint32_t). Assumes len is a multiple of 4. */ static void be32dec_vect(uint32_t *dst, const unsigned char *src, size_t len) { size_t i; for (i = 0; i < len / 4; i++) dst[i] = be32dec(src + i * 4); } #endif /* Elementary functions used by SHA256 */ #define Ch(x, y, z) ((x & (y ^ z)) ^ z) #define Maj(x, y, z) ((x & (y | z)) | (y & z)) #define SHR(x, n) (x >> n) #define ROTR(x, n) ((x >> n) | (x << (32 - n))) #define S0(x) (ROTR(x, 2) ^ ROTR(x, 13) ^ ROTR(x, 22)) #define S1(x) (ROTR(x, 6) ^ ROTR(x, 11) ^ ROTR(x, 25)) #define s0(x) (ROTR(x, 7) ^ ROTR(x, 18) ^ SHR(x, 3)) #define s1(x) (ROTR(x, 17) ^ ROTR(x, 19) ^ SHR(x, 10)) /* SHA256 round function */ #define RND(a, b, c, d, e, f, g, h, k) \ t0 = h + S1(e) + Ch(e, f, g) + k; \ t1 = S0(a) + Maj(a, b, c); \ d += t0; \ h = t0 + t1; /* Adjusted round function for rotating state */ #define RNDr(S, W, i, k) \ RND(S[(64 - i) % 8], S[(65 - i) % 8], \ S[(66 - i) % 8], S[(67 - i) % 8], \ S[(68 - i) % 8], S[(69 - i) % 8], \ S[(70 - i) % 8], S[(71 - i) % 8], \ W[i] + k) /* * SHA256 block compression function. The 256-bit state is transformed via * the 512-bit input block to produce a new state. */ static void SHA256_Transform(uint32_t * state, const unsigned char block[64]) { uint32_t W[64]; uint32_t S[8]; uint32_t t0, t1; int i; /* 1. Prepare message schedule W. */ be32dec_vect(W, block, 64); for (i = 16; i < 64; i++) W[i] = s1(W[i - 2]) + W[i - 7] + s0(W[i - 15]) + W[i - 16]; /* 2. Initialize working variables. */ memcpy(S, state, 32); /* 3. Mix. */ RNDr(S, W, 0, 0x428a2f98); RNDr(S, W, 1, 0x71374491); RNDr(S, W, 2, 0xb5c0fbcf); RNDr(S, W, 3, 0xe9b5dba5); RNDr(S, W, 4, 0x3956c25b); RNDr(S, W, 5, 0x59f111f1); RNDr(S, W, 6, 0x923f82a4); RNDr(S, W, 7, 0xab1c5ed5); RNDr(S, W, 8, 0xd807aa98); RNDr(S, W, 9, 0x12835b01); RNDr(S, W, 10, 0x243185be); RNDr(S, W, 11, 0x550c7dc3); RNDr(S, W, 12, 0x72be5d74); RNDr(S, W, 13, 0x80deb1fe); RNDr(S, W, 14, 0x9bdc06a7); RNDr(S, W, 15, 0xc19bf174); RNDr(S, W, 16, 0xe49b69c1); RNDr(S, W, 17, 0xefbe4786); RNDr(S, W, 18, 0x0fc19dc6); RNDr(S, W, 19, 0x240ca1cc); RNDr(S, W, 20, 0x2de92c6f); RNDr(S, W, 21, 0x4a7484aa); RNDr(S, W, 22, 0x5cb0a9dc); RNDr(S, W, 23, 0x76f988da); RNDr(S, W, 24, 0x983e5152); RNDr(S, W, 25, 0xa831c66d); RNDr(S, W, 26, 0xb00327c8); RNDr(S, W, 27, 0xbf597fc7); RNDr(S, W, 28, 0xc6e00bf3); RNDr(S, W, 29, 0xd5a79147); RNDr(S, W, 30, 0x06ca6351); RNDr(S, W, 31, 0x14292967); RNDr(S, W, 32, 0x27b70a85); RNDr(S, W, 33, 0x2e1b2138); RNDr(S, W, 34, 0x4d2c6dfc); RNDr(S, W, 35, 0x53380d13); RNDr(S, W, 36, 0x650a7354); RNDr(S, W, 37, 0x766a0abb); RNDr(S, W, 38, 0x81c2c92e); RNDr(S, W, 39, 0x92722c85); RNDr(S, W, 40, 0xa2bfe8a1); RNDr(S, W, 41, 0xa81a664b); RNDr(S, W, 42, 0xc24b8b70); RNDr(S, W, 43, 0xc76c51a3); RNDr(S, W, 44, 0xd192e819); RNDr(S, W, 45, 0xd6990624); RNDr(S, W, 46, 0xf40e3585); RNDr(S, W, 47, 0x106aa070); RNDr(S, W, 48, 0x19a4c116); RNDr(S, W, 49, 0x1e376c08); RNDr(S, W, 50, 0x2748774c); RNDr(S, W, 51, 0x34b0bcb5); RNDr(S, W, 52, 0x391c0cb3); RNDr(S, W, 53, 0x4ed8aa4a); RNDr(S, W, 54, 0x5b9cca4f); RNDr(S, W, 55, 0x682e6ff3); RNDr(S, W, 56, 0x748f82ee); RNDr(S, W, 57, 0x78a5636f); RNDr(S, W, 58, 0x84c87814); RNDr(S, W, 59, 0x8cc70208); RNDr(S, W, 60, 0x90befffa); RNDr(S, W, 61, 0xa4506ceb); RNDr(S, W, 62, 0xbef9a3f7); RNDr(S, W, 63, 0xc67178f2); /* 4. Mix local working variables into global state */ for (i = 0; i < 8; i++) state[i] += S[i]; } static unsigned char PAD[64] = { 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; /* Add padding and terminating bit-count. */ static void SHA256_Pad(SHA256_CTX * ctx) { unsigned char len[8]; uint32_t r, plen; /* * Convert length to a vector of bytes -- we do this now rather * than later because the length will change after we pad. */ be32enc_vect(len, ctx->count, 8); /* Add 1--64 bytes so that the resulting length is 56 mod 64 */ r = (ctx->count[1] >> 3) & 0x3f; plen = (r < 56) ? (56 - r) : (120 - r); SHA256_Update(ctx, PAD, (size_t)plen); /* Add the terminating bit-count */ SHA256_Update(ctx, len, 8); } /* SHA-256 initialization. Begins a SHA-256 operation. */ void SHA256_Init(SHA256_CTX * ctx) { /* Zero bits processed so far */ ctx->count[0] = ctx->count[1] = 0; /* Magic initialization constants */ ctx->state[0] = 0x6A09E667; ctx->state[1] = 0xBB67AE85; ctx->state[2] = 0x3C6EF372; ctx->state[3] = 0xA54FF53A; ctx->state[4] = 0x510E527F; ctx->state[5] = 0x9B05688C; ctx->state[6] = 0x1F83D9AB; ctx->state[7] = 0x5BE0CD19; } /* Add bytes into the hash */ void SHA256_Update(SHA256_CTX * ctx, const void *in, size_t len) { uint32_t bitlen[2]; uint32_t r; const unsigned char *src = in; /* Number of bytes left in the buffer from previous updates */ r = (ctx->count[1] >> 3) & 0x3f; /* Convert the length into a number of bits */ bitlen[1] = ((uint32_t)len) << 3; bitlen[0] = (uint32_t)(len >> 29); /* Update number of bits */ if ((ctx->count[1] += bitlen[1]) < bitlen[1]) ctx->count[0]++; ctx->count[0] += bitlen[0]; /* Handle the case where we don't need to perform any transforms */ if (len < 64 - r) { memcpy(&ctx->buf[r], src, len); return; } /* Finish the current block */ memcpy(&ctx->buf[r], src, 64 - r); SHA256_Transform(ctx->state, ctx->buf); src += 64 - r; len -= 64 - r; /* Perform complete blocks */ while (len >= 64) { SHA256_Transform(ctx->state, src); src += 64; len -= 64; } /* Copy left over data into buffer */ memcpy(ctx->buf, src, len); } /* * SHA-256 finalization. Pads the input data, exports the hash value, * and clears the context state. */ void SHA256_Final(unsigned char digest[32], SHA256_CTX * ctx) { /* Add padding */ SHA256_Pad(ctx); /* Write the hash */ be32enc_vect(digest, ctx->state, 32); /* Clear the context state */ memset((void *)ctx, 0, sizeof(*ctx)); } bladeRF-2024.05/host/common/src/str_queue.c000066400000000000000000000110141457144405000204020ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2014 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include "str_queue.h" #include "host_config.h" struct str_queue_entry { char *str; struct str_queue_entry *next; }; void str_queue_init(struct str_queue *q) { memset(q, 0, sizeof(q[0])); } void str_queue_deinit(struct str_queue *q) { char *str; do { str = str_queue_deq(q); free(str); } while (str != NULL); q->head = NULL; q->tail = NULL; } int str_queue_enq(struct str_queue *q, const char *str) { struct str_queue_entry *entry = malloc(sizeof(entry[0])); if (entry == NULL) { return -1; } entry->str = strdup(str); if (entry->str == NULL) { free(entry); return -1; } entry->next = NULL; if (q->head == NULL) { q->head = entry; } if (q->tail != NULL) { q->tail->next = entry; } q->tail = entry; return 0; } char * str_queue_deq(struct str_queue *q) { char *ret; struct str_queue_entry *entry; entry = q->head; if (entry == NULL) { ret = NULL; } else { q->head = entry->next; if (q->head == NULL) { q->tail = NULL; } ret = entry->str; free(entry); } return ret; } bool str_queue_empty(struct str_queue *q) { return q->head == NULL || q->tail == NULL; } #if TEST_STR_QUEUE #include #define STR_NULL "(null)" #define STR_1 "This is test string one." #define STR_2 "A second string queue test string" #define STR_3 "String thr33, this be" #define CHECK_EMPTY(q) do { \ if (str_queue_empty(q) != true) { \ fprintf(stderr, "Queue not empty!\n"); \ return EXIT_FAILURE; \ } \ } while (0) #define CHECK_NONEMPTY(q) do { \ if (str_queue_empty(q) != false) { \ fprintf(stderr, "Queue unexpectedly empty!\n"); \ return EXIT_FAILURE; \ } \ } while (0) #define ENQ(q, str) do { \ int status_ = str_queue_enq(q, str); \ if (status_ != 0) { \ fprintf(stderr, "Failed to enqueue %s\n", str); \ return EXIT_FAILURE; \ } else { \ printf("Enqueued: %s\n", str); \ } \ } while (0) #define DEQ(q, exp) do { \ char * str_; \ bool failed_; \ if (!strcmp(exp, STR_NULL)) { \ CHECK_EMPTY(q); \ } else { \ CHECK_NONEMPTY(q); \ } \ str_ = str_queue_deq(q); \ printf("Dequeued: %s\n", str_); \ if (str_ == NULL) { \ failed_ = strcmp(exp, STR_NULL) != 0; \ } else { \ failed_ = strcmp(str_, exp) != 0; \ } \ if (failed_) { \ fprintf(stderr, "Dequeue failed.\n"); \ return EXIT_FAILURE; \ } \ } while (0) int main(void) { char *str; struct str_queue q; str_queue_init(&q); str = str_queue_deq(&q); DEQ(&q, STR_NULL); ENQ(&q, STR_1); DEQ(&q, STR_1); DEQ(&q, STR_NULL); DEQ(&q, STR_NULL); ENQ(&q, STR_1); ENQ(&q, STR_2); DEQ(&q, STR_1); DEQ(&q, STR_2); DEQ(&q, STR_NULL); ENQ(&q, STR_1); ENQ(&q, STR_2); DEQ(&q, STR_1); ENQ(&q, STR_3); DEQ(&q, STR_2); ENQ(&q, STR_1); DEQ(&q, STR_3); DEQ(&q, STR_1); DEQ(&q, STR_NULL); DEQ(&q, STR_NULL); str_queue_deinit(&q); return 0; } #endif bladeRF-2024.05/host/common/src/windows/000077500000000000000000000000001457144405000177175ustar00rootroot00000000000000bladeRF-2024.05/host/common/src/windows/clock_gettime.c000066400000000000000000000035611457144405000227010ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2013 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef WIN32 # error "This file is intended for use with WIN32 systems only." #endif #include #include #include "clock_gettime.h" #include "ptw32_timespec.h" int clock_gettime(clockid_t clk_id, struct timespec *tp) { BOOL success; FILETIME file_time; SYSTEMTIME system_time; if (clk_id != CLOCK_REALTIME) { errno = EINVAL; return -1; } GetSystemTime(&system_time); success = SystemTimeToFileTime(&system_time, &file_time); if (!success) { /* For lack of a better or more compliant return value... */ errno = EINVAL; return -1; } ptw32_filetime_to_timespec(&file_time, tp); return 0; } bladeRF-2024.05/host/common/src/windows/getopt_long.c000066400000000000000000000217311457144405000224100ustar00rootroot00000000000000/** @file getopt_long.c ** @brief getopt_long - Definition ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see legal/licenses/LICENSE.BSD.vlfeat). */ /** @file getopt_long.h @brief getopt_long @author Andrea Vedaldi This is a drop-in replacament of GNU getopt_long meant to be used on platforms that do not support such functionality. **/ #include #include #include #include "getopt.h" int opterr = 1 ; int optind = 1 ; int optopt ; char * optarg ; int optreset ; #define BADCH '?' #define BADARG ':' #define EEND -1 #define EMSG "" /** @brief Parse long options (BSD style) ** @param argc number of arguments. ** @param argv pointer to the vector of arguments. ** @param optstring list of abbreviated options ** @param longopts list of long options. ** @param longindex index of current option in @a longopts. ** @return the code of the next option. ** ** This function extract long and short options from the argument ** list @a argv of @a argc entries. ** ** A short options sequence is introduced by a single dash character ** @c -. Each short option is described by a single character in the ** string @a optstring, possibly followed by a @c : character to ** denote a (mandatory) argument of the short option. A short option ** with an argument cannot appear in the middle of a short option ** sequence, but only at the end. ** ** A long option is introduced by a double dash @c --. Each long ** option is described by an instance of the ::option structure in ** the @a longopts table (the last entry must be filled with zeroes ** to denote the end). ** ** Illegal options and missing arguments cause the function to skip ** the option and return '?'. If ::opterr is @c true (default), the ** function prints an error message to @a stderr. Finally, if @a ** optstring has a leading @c :, then error messages are suppressed ** and a missing argument causes @a : to be returned. ** ** @remark The function is currently not thread safe. **/ VL_EXPORT int getopt_long(int argc, char *const argv[], const char *optstring, const struct option * longopts, int *longindex) { static char *place = EMSG; /* option letter processing */ static int optbegin = 0 ; static int optend = 0 ; const char *oli; /* option letter list index */ int has_colon = 0 ; int ret_val = 0 ; /* A semicolon at the beginning of optstring has a special meaning. If we find one, we annote and remove it. */ has_colon = optstring && optstring[0] == ':' ; if (has_colon) ++ optstring ; /* Here we are either processing a short option sequence or we start processing a new option. This is indicated by optreset. */ if (optreset || *place == '\0') { /* --------------------------------------------------------------- * Look for next short/long option * ------------------------------------------------------------ */ optreset = 0 ; /* no more arguments ? */ if (optind >= argc) { place = EMSG ; return -1 ; } /* next argument that may hold an option */ optbegin = optind ; /* --------------------------------------------------------------- * Look for an option to parse * ------------------------------------------------------------ */ parse_option_at_optbegin : /* place points to the candidate option */ place = argv [optbegin] ; /* an option is introduced by '-' */ if (place [0] != '-') { /* this argument is not an option: try next argument */ ++ optbegin ; if (optbegin >= argc) { /* no more arguments to look for options */ place = EMSG ; return -1 ; } goto parse_option_at_optbegin ; } /* consume leading `-' */ ++ place ; /* assume the option is composed of one argument only */ optend = optbegin + 1 ; /* assume no argument */ optarg = 0 ; /* --------------------------------------------------------------- * option `--' * ------------------------------------------------------------ */ /* this special option (void long option) ends the option processing */ if (place[0] && place[0] == '-' && place[1] == '\0') { optind = optend ; place = EMSG ; ret_val = -1 ; goto done_option ; } /* --------------------------------------------------------------- * long option * ------------------------------------------------------------ */ if (place[0] && place[0] == '-' && place[1] ) { size_t namelen ; int i ; /* consume second `-' */ ++ place ; /* count characters before `=' */ namelen = strcspn(place, "=") ; /* scan longopts for this option */ for (i = 0 ; longopts[i].name != NULL ; ++ i) { if (strlen ( longopts[i].name) == namelen && strncmp (place, longopts[i].name, namelen) == 0 ) { /* save back long option index */ if (longindex) *longindex = i ; /* process long option argument */ if (longopts[i].has_arg == required_argument || longopts[i].has_arg == optional_argument) { /* --option=value style */ if (place[namelen] == '=') { optarg = place + namelen + 1 ; } /* --option value style (only required_argument) */ else if (longopts[i].has_arg == required_argument) { /* missing argument ? */ if (optbegin >= argc - 1) { if (! has_colon && opterr) fprintf(stderr, "%s: option requires an argument -- %s\n", argv[0], place); place = EMSG ; ret_val = has_colon ? BADARG : BADCH ; goto done_option ; } optarg = argv [optend] ; ++ optend ; } } /* determine return value */ if (longopts[i].flag == NULL) { ret_val = longopts[i].val ; } else { *longopts[i].flag = longopts[i].val; ret_val = 0 ; } /* mark sequence closed */ place = EMSG ; goto done_option ; } /* if match */ } /* scan longoptions */ /* no matching option found */ if (! has_colon && opterr) fprintf(stderr, "%s: illegal option -- %s\n", argv[0], place) ; place = EMSG ; ret_val = BADCH ; goto done_option ; } } /* end new option */ /* ----------------------------------------------------------------- * Finish short option sequence * -------------------------------------------------------------- */ optopt = (int) *place++ ; /* search charcater in option list */ oli = strchr(optstring, optopt); /* short option not found */ if (!oli) { if (! has_colon && opterr) fprintf(stderr, "%s: illegal option -- %c\n", argv[0], optopt); if (*place) { /* more short options in the list */ return BADCH ; } else { /* error occured as last option in the list */ place = EMSG ; ret_val = BADCH ; goto done_option ; } } /* end short option not found */ if (oli[1] != ':') { /* short option with no argument */ if (*place) { /* more short options in the list */ return optopt ; } else { /* last option in the list */ place = EMSG ; ret_val = optopt ; goto done_option ; } } else { /* short option with argument */ /* -ovalue style */ if (*place) { optarg = place ; place = EMSG ; ret_val = optopt ; goto done_option ; } /* -o value style: missing argument */ else if (optbegin >= argc - 1) { if (! has_colon && opterr) fprintf(stderr, "%s: option requires an argument -- %c\n", argv[0], optopt); place = EMSG ; ret_val = has_colon ? BADARG : BADCH ; goto done_option ; } /* -o value style: process argument */ optarg = argv [optend] ; ++ optend ; place = EMSG ; ret_val = optopt ; goto done_option ; } /* short with argument */ done_option : { int pos = optend - optbegin ; /* n of circular shifts */ int c = pos ; while (c --) { int i ; char *tmp = argv [optend - 1] ; for (i = optend - 1 ; i > optind ; -- i) { ((char**)argv) [i] = argv [i-1] ; } ((char**)argv) [optind] = tmp ; } optind += pos ; } return ret_val ; } bladeRF-2024.05/host/common/src/windows/gettimeofday.c000066400000000000000000000036531457144405000225530ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2023 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef WIN32 #error "This file is intended for use with WIN32 systems only." #endif #include #include int gettimeofday(struct timeval *tp, struct timezone *tzp) { // Note: some broken versions only have 8 trailing zero's, the correct epoch // has 9 trailing zero's static const uint64_t EPOCH = ((uint64_t)116444736000000000ULL); SYSTEMTIME system_time; FILETIME file_time; uint64_t time; GetSystemTime(&system_time); SystemTimeToFileTime(&system_time, &file_time); time = ((uint64_t)file_time.dwLowDateTime); time += ((uint64_t)file_time.dwHighDateTime) << 32; tp->tv_sec = (long)((time - EPOCH) / 10000000L); tp->tv_usec = (long)(system_time.wMilliseconds * 1000); return 0; } bladeRF-2024.05/host/common/src/windows/mkdtemp.c000066400000000000000000000156271457144405000215370ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/Nuand/bladeRF * * Copyright (c) 2018 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ // _CRT_RAND_S must be defined before including stdlib.h, to enable rand_s #define _CRT_RAND_S #include #ifdef WINDOWS_MKDTEMP_TEST_SUITE // Running in standalone test mode #include #include #define __debug(...) fprintf(stderr, __VA_ARGS__) #ifndef WIN32 // Running standalone test on non-Windows OS #include #include #define errno_t int errno_t rand_s(unsigned int *randomValue) { *randomValue = rand(); return 0; } #endif // WIN32 #else // Building as part of a library #ifndef WIN32 #error "This file is intended for use with WIN32 systems only." #endif // WIN32 #define __debug(...) #endif // WINDOWS_MKDTEMP_TEST_SUITE #include #include #include #include "host_config.h" // The concepts of F_OK and S_IRWXU do not exist on Win32 #ifndef F_OK #define F_OK 0 #endif #ifndef S_IRWXU #define S_IRWXU 00700 #endif /* h/t https://stackoverflow.com/a/14598879 */ static int random_number(int min_num, int max_num) { int result = 0, low_num = 0, hi_num = 0; unsigned int randomValue; if (min_num < max_num) { low_num = min_num; hi_num = max_num + 1; // include max_num in output } else { low_num = max_num + 1; // include max_num in output hi_num = min_num; } // Use rand_s() on Windows, so that we don't have to deal with srand() errno_t err = rand_s(&randomValue); if (0 != err) { return -1; } result = (randomValue % (hi_num - low_num)) + low_num; return result; } char *mkdtemp(char *template) { size_t const TEMPL_LEN = 6; char const TEMPL_CHAR = 'X'; if (strlen(template) <= TEMPL_LEN) { // template is too short errno = EINVAL; goto error; } // Loop through the end of the template, replacing 'X' with random char for (size_t i = strlen(template) - TEMPL_LEN; i < strlen(template); ++i) { // The last TEMPL_LEN characters MUST be 'X' if (template[i] != TEMPL_CHAR) { errno = EINVAL; goto error; } // Pick a random letter if (random_number(0, 1)) { template[i] = (char)random_number('A', 'Z'); } else { template[i] = (char)random_number('a', 'z'); } } // Error out if the file already exists if (access(template, F_OK) != -1) { __debug("%s: failed: %s exists\n", __FUNCTION__, template); errno = EEXIST; goto error; } // Try to create the directory... if (0 != mkdir(template, S_IRWXU)) { int errsv = errno; __debug("%s: mkdir() failed: %s\n", __FUNCTION__, strerror(errsv)); goto error; } // Success! errno = 0; return template; error: return NULL; } #ifdef WINDOWS_MKDTEMP_TEST_SUITE /** * These functions are intended to verify proper operation of the test suite. */ static bool test(char *template, bool expect_success) { char *rv = mkdtemp(template); if (NULL == rv) { int errsv = errno; printf("%s: mkdtemp failed: %s\n", __FUNCTION__, strerror(errsv)); return (false == expect_success); } else { printf("%s: mkdtemp created: %s\n", __FUNCTION__, rv); if (0 != rmdir(rv)) { int errsv = errno; printf("%s: rmdir failed: %s\n", __FUNCTION__, strerror(errsv)); } return (true == expect_success); } } int main(int argc, char *argv[]) { #ifndef WIN32 srand(time(NULL)); #endif // WIN32 int success = 0, failure = 0; // Normal: should pass char template1[] = "/tmp/asdf.XXXXXX"; if (test(template1, true)) { printf("*** Test case 1: PASS\n"); ++success; } else { printf("*** Test case 1: FAIL\n"); ++failure; } // Too short: should fail char template2[] = "XXXXXX"; if (test(template2, false)) { printf("*** Test case 2: PASS\n"); ++success; } else { printf("*** Test case 2: FAIL\n"); ++failure; } // Not enough replacement Xs: should fail char template3[] = "/tmp/asdf.XXXXX"; if (test(template3, false)) { printf("*** Test case 3: PASS\n"); ++success; } else { printf("*** Test case 3: FAIL\n"); ++failure; } // Make sure it only replaces the end: should pass char template4[] = "/tmp/asdfXXXXXX.XXXXXX"; if (test(template4, true)) { printf("*** Test case 4: PASS\n"); ++success; } else { printf("*** Test case 4: FAIL\n"); ++failure; } // Really long: should fail char template5[] = "/tmp/asdfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaXXXXXX"; if (test(template5, false)) { printf("*** Test case 5: PASS\n"); ++success; } else { printf("*** Test case 5: FAIL\n"); ++failure; } // Unwriteable path: should fail char template6[] = "/asdfkjavblkjadv/asdf.XXXX"; if (test(template6, false)) { printf("*** Test case 6: PASS\n"); ++success; } else { printf("*** Test case 6: FAIL\n"); ++failure; } printf("TEST SUMMARY: Success=%d, Failure=%d\n", success, failure); return failure; } #endif // WINDOWS_MKDTEMP_TEST_SUITE bladeRF-2024.05/host/common/src/windows/nanosleep.c000066400000000000000000000030021457144405000220420ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2018 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef WIN32 #error "This file is intended for use with WIN32 systems only." #endif #include "nanosleep.h" #include int nanosleep(const struct timespec *req, struct timespec *rem) { DWORD sleep_ms; sleep_ms = ((DWORD)req->tv_sec * 1000) + ((DWORD)req->tv_nsec / 1000000); Sleep(sleep_ms); return 0; } bladeRF-2024.05/host/common/src/windows/setenv.c000066400000000000000000000032661457144405000213760ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/Nuand/bladeRF * * Copyright (c) 2018 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef WIN32 #error "This file is intended for use with WIN32 systems only." #endif // WIN32 #include int setenv(const char *name, const char *value, int overwrite) { errno_t rv = 0; size_t envsize = 0; if (!overwrite) { // Test for existence rv = getenv_s(&envsize, NULL, 0, name); if (rv != 0 || envsize != 0) { return rv; } } return _putenv_s(name, value); } int unsetenv(const char *name) { return _putenv_s(name, ""); } bladeRF-2024.05/host/common/test/000077500000000000000000000000001457144405000164155ustar00rootroot00000000000000bladeRF-2024.05/host/common/test/CMakeLists.txt000066400000000000000000000000411457144405000211500ustar00rootroot00000000000000add_subdirectory(dc_calibration) bladeRF-2024.05/host/common/test/dc_calibration/000077500000000000000000000000001457144405000213525ustar00rootroot00000000000000bladeRF-2024.05/host/common/test/dc_calibration/CMakeLists.txt000066400000000000000000000010461457144405000241130ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.5) project(test_dc_calibration C) set(INCLUDES ${libbladeRF_SOURCE_DIR}/include ${BLADERF_HOST_COMMON_INCLUDE_DIRS} ) set(LIBS libbladerf_shared) if(MSVC) set(INCLUDES ${INCLUDES} ${MSVC_C99_INCLUDES}) else() set(LIBS ${LIBS} m) endif() set(SRC src/main.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/conversions.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/dc_calibration.c ) include_directories(${INCLUDES}) add_executable(test_dc_calibration ${SRC}) target_link_libraries(test_dc_calibration ${LIBS}) bladeRF-2024.05/host/common/test/dc_calibration/src/000077500000000000000000000000001457144405000221415ustar00rootroot00000000000000bladeRF-2024.05/host/common/test/dc_calibration/src/main.c000066400000000000000000000157251457144405000232430ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include #include #include #include #include "dc_calibration.h" #include "conversions.h" const struct numeric_suffix freq_suffixes[] = { { "G", 1000 * 1000 * 1000 }, { "GHz", 1000 * 1000 * 1000 }, { "M", 1000 * 1000 }, { "MHz", 1000 * 1000 }, { "k", 1000 } , { "kHz", 1000 } }; #define NUM_FREQ_SUFFIXES (sizeof(freq_suffixes) / sizeof(freq_suffixes[0])) void usage(const char *argv0) { printf("Usage: %s \n", argv0); printf("Usage: %s [ ]\n", argv0); printf("\n"); printf("To perform LMS6 calibrations, provide a single argument that is\n"); printf("one of the following:\n"); printf(" lpf_tuning, tx_lpf, rx_lpf, rx_vga2, all\n"); printf("\n"); printf("Otherwise, specify either 'rx' or 'tx' and the desired frequency.\n"); printf("A step size and count may be specified to calibrate over a range.\n"); printf("The results will be printed to stdout.\n"); printf("\n"); } int main(int argc, char *argv[]) { int status = 0; struct bladerf *dev = NULL; bladerf_module module; if (argc < 2 || !strcmp(argv[1], "-h") || !strcmp(argv[1], "--help")) { usage(argv[0]); return 0; } status = bladerf_open(&dev, NULL); if (status != 0) { fprintf(stderr, "Unable to open device: %s\n", bladerf_strerror(status)); return EXIT_FAILURE; } if (argc == 2) { struct bladerf_lms_dc_cals cals; status = dc_calibration_lms6(dev, argv[1]); if (status == BLADERF_ERR_INVAL) { fprintf(stderr, "Invalid LMS6 module: %s\n", argv[1]); goto out; } else if (status != 0) { fprintf(stderr, "Calibration failed: %s\n", bladerf_strerror(status)); goto out; } status = bladerf_lms_get_dc_cals(dev, &cals); if (status != 0) { fprintf(stderr, "Failed to read LMS6 DC cals: %s\n", bladerf_strerror(status)); goto out; } printf("LPF Tuning: %d\n", cals.lpf_tuning); printf("TX LPF I: %d\n", cals.tx_lpf_i); printf("TX LPF Q: %d\n", cals.tx_lpf_q); printf("RX LPF I: %d\n", cals.rx_lpf_i); printf("RX LPF Q: %d\n", cals.rx_lpf_q); printf("RXVGA2 DC REF: %d\n", cals.dc_ref); printf("RXVGA2 AI: %d\n", cals.rxvga2a_i); printf("RXVGA2 AQ: %d\n", cals.rxvga2a_q); printf("RXVGA2 BI: %d\n", cals.rxvga2b_i); printf("RXVGA2 BQ: %d\n", cals.rxvga2b_q); } else if (argc == 3 || argc == 5) { bool ok; unsigned int f_start; module = str2module(argv[1]); if (module == BLADERF_MODULE_INVALID) { fprintf(stderr, "Invalid module: %s\n", argv[1]); status = EXIT_FAILURE; goto out; } f_start = str2uint_suffix(argv[2], BLADERF_FREQUENCY_MIN, BLADERF_FREQUENCY_MAX, freq_suffixes, NUM_FREQ_SUFFIXES, &ok); if (!ok) { fprintf(stderr, "Invalid frequency: %s\n", argv[2]); status = EXIT_FAILURE; goto out; } if (argc == 3) { struct dc_calibration_params p; p.frequency = f_start; p.corr_i = p.corr_q = 0; p.error_i = p.error_q = 0; status = dc_calibration(dev, module, &p, 1, false); if (status == 0) { printf("F=%10" PRIu64 ", Corr_I=%4d, Corr_Q=%4d, Error_I=%4.2f, Error_Q=%4.2f\n", p.frequency, p.corr_i, p.corr_q, p.error_i, p.error_q); } else { fprintf(stderr, "Calibration failed: %s\n", bladerf_strerror(status)); } } else { unsigned int f_inc, count, i; struct dc_calibration_params *p; f_inc = str2uint_suffix(argv[3], 1, UINT_MAX, freq_suffixes, NUM_FREQ_SUFFIXES, &ok); if (!ok) { fprintf(stderr, "Invalid frequency increment: %s\n", argv[3]); status = EXIT_FAILURE; goto out; } count = str2uint(argv[4], 1, UINT_MAX, &ok); if (!ok) { fprintf(stderr, "Invalid count: %s\n", argv[4]); status = EXIT_FAILURE; goto out; } p = calloc(count, sizeof(p[0])); for (i = 0; i < count; i++) { p[i].frequency = f_start + i * f_inc; } if (p[count - 1].frequency <= BLADERF_FREQUENCY_MAX) { status = dc_calibration(dev, module, p, count, true); if (status == 0) { for (i = 0; i < count; i++) { printf("F=%10" PRIu64 ", Corr_I=%4d, Corr_Q=%4d, Error_I=%4.2f, Error_Q=%4.2f\n", p[i].frequency, p[i].corr_i, p[i].corr_q, p[i].error_i, p[i].error_q); } } else { fprintf(stderr, "Calibration failed: %s\n", bladerf_strerror(status)); } } else { fprintf(stderr, "Error: Provided parameters yield out of range frequency.\n"); status = EXIT_FAILURE; } free(p); } } else { fprintf(stderr, "Error: Invalid usage. Run with --help for more information.\n"); status = EXIT_FAILURE; } out: bladerf_close(dev); if (status != 0) { status = EXIT_FAILURE; } return status; } bladeRF-2024.05/host/common/thirdparty/000077500000000000000000000000001457144405000176305ustar00rootroot00000000000000bladeRF-2024.05/host/common/thirdparty/ad936x/000077500000000000000000000000001457144405000206465ustar00rootroot00000000000000bladeRF-2024.05/host/common/thirdparty/ad936x/CMakeLists.txt000066400000000000000000000137751457144405000234230ustar00rootroot00000000000000message(STATUS "libad936x: Configuring build...") ################################################################################ # Paths ################################################################################ # Repository root set(LIBAD936X_BLADERF_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/../../../..") # Source directory for local files (patches, platform_bladerf2, etc) set(LIBAD936X_LOCAL_DIR "${LIBAD936X_BLADERF_ROOT}/thirdparty/analogdevicesinc/no-OS_local") # libbladeRF relative path set(LIBAD936X_LIBBLADERF_DIR "${LIBAD936X_BLADERF_ROOT}/host/libraries/libbladeRF") # fpga_common relative path set(LIBAD936X_FPGACOMMON_DIR "${LIBAD936X_BLADERF_ROOT}/fpga_common") # Patch files live here set(LIBAD936X_PATCH_DIR "${LIBAD936X_LOCAL_DIR}/patches") # Platform files set(LIBAD936X_PLATFORM_DIR "${LIBAD936X_LOCAL_DIR}/platform_bladerf2") # Upstream source (clean) set(LIBAD936X_UPSTREAM_DIR "${LIBAD936X_LOCAL_DIR}/../no-OS/ad9361/sw") # Upstream source (patched) set(LIBAD936X_UPSTREAM_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}") ################################################################################ # Configure build ################################################################################ add_library(ad936x STATIC ${LIBAD936X_UPSTREAM_BUILD_DIR}/ad9361.c ${LIBAD936X_UPSTREAM_BUILD_DIR}/ad9361_api.c ${LIBAD936X_UPSTREAM_BUILD_DIR}/ad9361_conv.c ${LIBAD936X_UPSTREAM_BUILD_DIR}/util.c ${LIBAD936X_PLATFORM_DIR}/platform.c ${LIBAD936X_PLATFORM_DIR}/adc_core.c ${LIBAD936X_PLATFORM_DIR}/dac_core.c ${LIBAD936X_FPGACOMMON_DIR}/src/ad936x_params.c ) target_compile_options(ad936x PRIVATE -DNUAND_MODIFICATIONS -Wall -Os ) if(NOT MSVC) target_compile_options(ad936x PRIVATE -ffunction-sections -fdata-sections -fPIC -std=gnu11 ) endif(NOT MSVC) if(NOT MSVC AND NOT APPLE) target_compile_options(ad936x PRIVATE -Wno-unused-but-set-variable ) endif(NOT MSVC AND NOT APPLE) if(APPLE) target_compile_options(ad936x PRIVATE -Wno-absolute-value ) endif(APPLE) if(BUILD_AD936X_DEBUG) message(STATUS "libad936x: Enabling debugging output") target_compile_options(ad936x PRIVATE -D_DEBUG) endif(BUILD_AD936X_DEBUG) target_include_directories(ad936x PUBLIC ${LIBAD936X_PLATFORM_DIR} ${LIBAD936X_UPSTREAM_BUILD_DIR} ${LIBAD936X_LIBBLADERF_DIR}/src ${LIBAD936X_LIBBLADERF_DIR}/include ${LIBAD936X_BLADERF_ROOT}/host/common/include ${LIBAD936X_BLADERF_ROOT}/firmware_common # host_config.h: two possible paths # we can't use find_file to find this, as it hasn't been generated yet ${CMAKE_CURRENT_BINARY_DIR}/../../../host/common/include ${CMAKE_CURRENT_BINARY_DIR}/../../../common/include ) ################################################################################ # Dependencies ################################################################################ if(MSVC) add_definitions(-DHAVE_STRUCT_TIMESPEC) target_include_directories(ad936x PUBLIC ${MSVC_C99_INCLUDES}) find_package(LibPThreadsWin32 REQUIRED) if(LIBPTHREADSWIN32_FOUND) set(HAVE_THREADS true) target_include_directories(ad936x PUBLIC ${LIBPTHREADSWIN32_INCLUDE_DIRS}) set(LIBAD936X_LIBS ${LIBAD936X_LIBS} ${LIBPTHREADSWIN32_LIBRARIES}) else() set(HAVE_THREADS false) endif() else(MSVC) find_package(Threads REQUIRED) if(Threads_FOUND) set(HAVE_THREADS true) else() set(HAVE_THREADS false) endif() target_link_libraries(ad936x ${CMAKE_THREAD_LIBS_INIT}) endif(MSVC) if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") target_include_directories(ad936x PUBLIC /usr/include/malloc) endif() # If the submodule hasn't been initialized/updated, do so if(NOT IS_DIRECTORY ${LIBAD936X_UPSTREAM_DIR}) message(STATUS "libad936x: Attempting to initialize missing submodule") find_package(Git) if(GIT_FOUND) execute_process( COMMAND ${GIT_EXECUTABLE} submodule init WORKING_DIRECTORY ${LIBAD936X_BLADERF_ROOT} ) execute_process( COMMAND ${GIT_EXECUTABLE} submodule update WORKING_DIRECTORY ${LIBAD936X_BLADERF_ROOT} ) endif() endif() # Then, re-check for submodule... if(NOT IS_DIRECTORY ${LIBAD936X_UPSTREAM_DIR}) message(FATAL_ERROR "Directory ${LIBAD936X_UPSTREAM_DIR} was not found. " "It appears that this submodule has not been properly " "initialized. Please run 'git submodule init' and " "'git submodule update', and then re-run cmake.") endif() ################################################################################ # Copy files and apply patches ################################################################################ # Copy needed files from the upstream repository set(LIBAD936X_UPSTREAM_FILES ad9361.c ad9361.h ad9361_api.c ad9361_api.h ad9361_conv.c common.h util.c util.h ) foreach(cpfile IN ITEMS ${LIBAD936X_UPSTREAM_FILES}) configure_file( "${LIBAD936X_UPSTREAM_DIR}/${cpfile}" "${LIBAD936X_UPSTREAM_BUILD_DIR}/" COPYONLY ) endforeach(cpfile) # Patch the upstream files set(LIBAD936X_PATCHES 0001-0bba46e-nuand-modifications.patch 0002-0bba46e-pr-561.patch 0003-0bba46e-pr-573.patch 0004-0bba46e-pr-598.patch 0005-0bba46e-rm-ad9361_parse_fir.patch 0006-0bba46e-compilefix.patch ) find_package(Patcher REQUIRED) foreach(patchfile IN ITEMS ${LIBAD936X_PATCHES}) message(STATUS "libad936x: Applying patch: ${patchfile}") execute_process( COMMAND ${Patcher_EXECUTABLE} -p3 INPUT_FILE ${LIBAD936X_PATCH_DIR}/${patchfile} WORKING_DIRECTORY "${LIBAD936X_UPSTREAM_BUILD_DIR}" OUTPUT_QUIET RESULT_VARIABLE resultcode ERROR_VARIABLE errvar ) if(resultcode) message(FATAL_ERROR "Failed to apply ${patchfile}: ${errvar}") endif(resultcode) endforeach(patchfile) message(STATUS "libad936x: Build configured") bladeRF-2024.05/host/drivers/000077500000000000000000000000001457144405000156245ustar00rootroot00000000000000bladeRF-2024.05/host/drivers/linux/000077500000000000000000000000001457144405000167635ustar00rootroot00000000000000bladeRF-2024.05/host/drivers/linux/Makefile000066400000000000000000000002531457144405000204230ustar00rootroot00000000000000obj-m = bladeRF.o KVERSION = $(shell uname -r) all: make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules clean: make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean bladeRF-2024.05/host/drivers/linux/README.md000066400000000000000000000026561457144405000202530ustar00rootroot00000000000000# bladeRF Linux Kernel Driver # ***Important note:*** This kernel module is very much out of date and should not be used in its current form. libbladeRF now utilizes libusb is now used to interface to the bladeRF. In the future, this module will be revisited, with high-performance applications in mind. The linux kernel driver implements a USB device and has some buffering to be able to place multiple packets in flight at a time achieve the high datarates associated with USB 3.0 Superspeed. ## Requirements ## Even though we build a module for the kernel, your kernels source code is required to build against. We've tested with kernels as old as 3.5.0, but we mostly use Ubuntu for testing and development. ## Building ## 1. `make` 1. See that `bladeRF.ko` has been made. 1. `sudo insmod bladeRF.ko` The kernel module should now be installed and ready to be used. ## bladeRF udev Rule ## Usually the udev rules associated with USB devices use the VID and PID to determine the matching for the rule and change the mode to be accessible to users of that group. In our testing, it's been seen that the particular udev rule changes the mode of `/dev/bus/usb/...` but not the preferred dev entry we create of `/dev/bladerf#`. Due to this, we have a relatively broad udev rule: ``` KERNEL=="bladerf*", MODE="0660", GROUP="plugdev" ``` Please feel free to suggest a tighter rule that applies the appropriate mode to the `/dev/bladerf#` entry. bladeRF-2024.05/host/drivers/linux/bladeRF.c000066400000000000000000001152251457144405000204340ustar00rootroot00000000000000/* * bladeRF USB driver * Copyright (C) 2013 Nuand LLC * Copyright (C) 2013 Robert Ghilduta * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include #include #include #include "../../../firmware_common/bladeRF.h" struct data_buffer { struct urb *urb; void *addr; dma_addr_t dma; int valid; }; typedef struct { struct usb_device *udev; struct usb_interface *interface; int intnum; int disconnecting; // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 // | | | | X | X | X | X | X | S | S | S | S | | | | | // ^ ^ ^ producer index // consumer index receive index // Key: S=submitted X=unsubmitted, queued buffers int rx_en; spinlock_t data_in_lock; unsigned int data_in_consumer_idx; unsigned int data_in_receiver_idx; unsigned int data_in_producer_idx; atomic_t data_in_queued; // number of buffers with data unread by the usermode application [transmit index - transmit index] atomic_t data_in_used; // number of buffers that may be inflight or have unread data [transmit index - consumer index] atomic_t data_in_inflight; // number of buffers currently in the USB stack [transmit index - consumer index] struct data_buffer data_in_bufs[NUM_DATA_URB]; struct usb_anchor data_in_anchor; wait_queue_head_t data_in_wait; // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 // | | | | S | S | S | S | X | X | X | X | X | | | | | // ^ ^ consumer index ^ producer index // | transmit index // Key: S=submitted X=unsubmitted, queued buffers int tx_en; spinlock_t data_out_lock; unsigned int data_out_consumer_idx; unsigned int data_out_tranmit_idx; unsigned int data_out_producer_idx; atomic_t data_out_queued; atomic_t data_out_used; atomic_t data_out_inflight; struct data_buffer data_out_bufs[NUM_DATA_URB]; struct usb_anchor data_out_anchor; wait_queue_head_t data_out_wait; // allow only one reader and writer struct file *reader, *writer; int bytes; int debug; } bladerf_device_t; static struct usb_driver bladerf_driver; // USB PID-VID table static struct usb_device_id bladerf_table[] = { { USB_DEVICE(USB_NUAND_VENDOR_ID, USB_NUAND_BLADERF_PRODUCT_ID) }, { } /* Terminate entry */ }; MODULE_DEVICE_TABLE(usb, bladerf_table); static int __submit_rx_urb(bladerf_device_t *dev, unsigned int flags) { struct urb *urb; unsigned long irq_flags; int ret = 0; do { spin_lock_irqsave(&dev->data_in_lock, irq_flags); if (atomic_read(&dev->data_in_inflight) < NUM_CONCURRENT && atomic_read(&dev->data_in_used) < NUM_DATA_URB) { urb = dev->data_in_bufs[dev->data_in_producer_idx].urb; if (!dev->data_in_bufs[dev->data_in_producer_idx].valid) { printk("data_in error\n"); break; } dev->data_in_bufs[dev->data_in_producer_idx].valid = 0; // mark this RX packet as being in use atomic_inc(&dev->data_in_used); usb_anchor_urb(urb, &dev->data_in_anchor); spin_unlock_irqrestore(&dev->data_in_lock, irq_flags); atomic_inc(&dev->data_in_inflight); ret = usb_submit_urb(urb, GFP_ATOMIC); if (ret) { atomic_dec(&dev->data_in_inflight); goto leave_rx; } } } while(1); spin_unlock_irqrestore(&dev->data_in_lock, irq_flags); leave_rx: return ret; } static void __bladeRF_write_cb(struct urb *urb); static void __bladeRF_read_cb(struct urb *urb) { bladerf_device_t *dev; unsigned char *buf; unsigned long flags; usb_unanchor_urb(urb); spin_lock_irqsave(&dev->data_in_lock, flags); buf = (unsigned char *)urb->transfer_buffer; dev = (bladerf_device_t *)urb->context; atomic_dec(&dev->data_in_inflight); dev->bytes += DATA_BUF_SZ; atomic_inc(&dev->data_in_queued); spin_unlock_irqrestore(&dev->data_in_lock, flags); if (dev->rx_en) __submit_rx_urb(dev, GFP_ATOMIC); wake_up_interruptible(&dev->data_in_wait); } static int bladerf_start(bladerf_device_t *dev) { int i; void *buf; struct urb *urb; dev->rx_en = 0; atomic_set(&dev->data_in_queued, 0); atomic_set(&dev->data_in_used, 0); dev->data_in_consumer_idx = 0; dev->data_in_producer_idx = 0; for (i = 0; i < NUM_DATA_URB; i++) { buf = usb_alloc_coherent(dev->udev, DATA_BUF_SZ, GFP_KERNEL, &dev->data_in_bufs[i].dma); memset(buf, 0, DATA_BUF_SZ); if (!buf) { dev_err(&dev->interface->dev, "Could not allocate data IN buffer\n"); return -1; } dev->data_in_bufs[i].addr = buf; urb = usb_alloc_urb(0, GFP_KERNEL); if (!buf) { dev_err(&dev->interface->dev, "Could not allocate data IN URB\n"); return -1; } dev->data_in_bufs[i].urb = urb; dev->data_in_bufs[i].valid = 1; usb_fill_bulk_urb(urb, dev->udev, usb_rcvbulkpipe(dev->udev, 1), dev->data_in_bufs[i].addr, DATA_BUF_SZ, __bladeRF_read_cb, dev); urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; urb->transfer_dma = dev->data_in_bufs[i].dma; } dev->tx_en = 0; atomic_set(&dev->data_out_queued, 0); atomic_set(&dev->data_out_used, 0); dev->data_out_consumer_idx = 0; dev->data_out_producer_idx = 0; for (i = 0; i < NUM_DATA_URB; i++) { buf = usb_alloc_coherent(dev->udev, DATA_BUF_SZ, GFP_KERNEL, &dev->data_out_bufs[i].dma); memset(buf, 0, DATA_BUF_SZ); if (!buf) { dev_err(&dev->interface->dev, "Could not allocate data OUT buffer\n"); return -1; } dev->data_out_bufs[i].addr = buf; urb = usb_alloc_urb(0, GFP_KERNEL); if (!buf) { dev_err(&dev->interface->dev, "Could not allocate data OUT URB\n"); return -1; } dev->data_out_bufs[i].urb = urb; dev->data_out_bufs[i].valid = 0; usb_fill_bulk_urb(urb, dev->udev, usb_sndbulkpipe(dev->udev, 1), dev->data_out_bufs[i].addr, DATA_BUF_SZ, __bladeRF_write_cb, dev); urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; urb->transfer_dma = dev->data_out_bufs[i].dma; } return 0; } static void bladerf_stop(bladerf_device_t *dev) { int i; for (i = 0; i < NUM_DATA_URB; i++) { usb_free_coherent(dev->udev, DATA_BUF_SZ, dev->data_in_bufs[i].addr, dev->data_in_bufs[i].dma); usb_free_urb(dev->data_in_bufs[i].urb); usb_free_coherent(dev->udev, DATA_BUF_SZ, dev->data_out_bufs[i].addr, dev->data_out_bufs[i].dma); usb_free_urb(dev->data_out_bufs[i].urb); } } int __bladerf_snd_cmd(bladerf_device_t *dev, int cmd, void *ptr, __u16 len); static int disable_tx(bladerf_device_t *dev) { int ret; unsigned int val; val = 0; if (dev->intnum != 1) return -1; dev->tx_en = 0; usb_kill_anchored_urbs(&dev->data_out_anchor); ret = __bladerf_snd_cmd(dev, BLADE_USB_CMD_RF_TX, &val, sizeof(val)); if (ret < 0) goto err_out; ret = 0; err_out: return ret; } static int enable_tx(bladerf_device_t *dev) { int ret; unsigned int val; val = 1; if (dev->intnum != 1) return -1; ret = __bladerf_snd_cmd(dev, BLADE_USB_CMD_RF_TX, &val, sizeof(val)); if (ret < 0) goto err_out; ret = 0; dev->tx_en = 1; err_out: return ret; } static int disable_rx(bladerf_device_t *dev) { int ret; unsigned int val; val = 0; if (dev->intnum != 1) return -1; dev->rx_en = 0; usb_kill_anchored_urbs(&dev->data_in_anchor); ret = __bladerf_snd_cmd(dev, BLADE_USB_CMD_RF_RX, &val, sizeof(val)); if (ret < 0) goto err_out; ret = 0; atomic_set(&dev->data_in_queued, 0); atomic_set(&dev->data_in_used, 0); dev->data_in_consumer_idx = 0; dev->data_in_producer_idx = 0; err_out: return ret; } static int enable_rx(bladerf_device_t *dev) { int ret; int i; unsigned int val; val = 1; if (dev->intnum != 1) return -1; if (dev->disconnecting) return -ENODEV; for (i = 0; i < NUM_DATA_URB; i++) dev->data_in_bufs[i].valid = 1; ret = __bladerf_snd_cmd(dev, BLADE_USB_CMD_RF_RX, &val, sizeof(val)); if (ret < 0) goto err_out; ret = 0; dev->rx_en = 1; for (i = 0; i < NUM_CONCURRENT; i++) { if ((ret = __submit_rx_urb(dev, 0)) < 0) { dev_err(&dev->interface->dev, "Error submitting initial RX URBs (%d/%d), error=%d\n", i, NUM_CONCURRENT, ret); break; } } err_out: return ret; } static ssize_t bladerf_read(struct file *file, char __user *buf, size_t count, loff_t *ppos) { ssize_t ret = 0; bladerf_device_t *dev; unsigned long flags; dev = (bladerf_device_t *)file->private_data; if (dev->intnum != 1) { return -1; } if (dev->reader) { if (file != dev->reader) { return -EPERM; } } else dev->reader = file; if (dev->disconnecting) return -ENODEV; if (!dev->rx_en) { if (enable_rx(dev)) { return -EINVAL; } } do { spin_lock_irqsave(&dev->data_in_lock, flags); if (atomic_read(&dev->data_in_queued)) { unsigned int idx; atomic_dec(&dev->data_in_queued); atomic_dec(&dev->data_in_used); idx = dev->data_in_consumer_idx++; dev->data_in_consumer_idx &= (NUM_DATA_URB - 1); spin_unlock_irqrestore(&dev->data_in_lock, flags); if (copy_to_user(buf, dev->data_in_bufs[idx].addr, DATA_BUF_SZ)) { ret = -EFAULT; } else { ret = 0; } dev->data_in_bufs[idx].valid = 1; // mark this RX packet as free // in case all of the buffers were full, rx needs to be restarted // samples may have also been dropped if this happens because the user-mode // application is not reading samples fast enough if (atomic_read(&dev->data_in_inflight) == 0) __submit_rx_urb(dev, 0); if (!ret) ret = DATA_BUF_SZ; break; } else { spin_unlock_irqrestore(&dev->data_in_lock, flags); ret = wait_event_interruptible(dev->data_in_wait, atomic_read(&dev->data_in_queued)); spin_lock_irqsave(&dev->data_in_lock, flags); if (ret < 0) { break; } else if (ret == 0) { ret = -ETIMEDOUT; break; } else { ret = 0; } } } while (1); spin_unlock_irqrestore(&dev->data_in_lock, flags); return ret; } static int __submit_tx_urb(bladerf_device_t *dev) { struct urb *urb; struct data_buffer *db; unsigned long flags; int ret = 0; do { spin_lock_irqsave(&dev->data_out_lock, flags); if (atomic_read(&dev->data_out_inflight) < NUM_CONCURRENT && atomic_read(&dev->data_out_queued)) { db = &dev->data_out_bufs[dev->data_out_consumer_idx]; urb = db->urb; if (!db->valid) { // if it is not yet valid, it will be when bladerf_write calls __submit_tx_urb break; } // clear this packet's valid flag so it is not submitted until the next time it // is used and copy_from_user() has copied data into the buffer db->valid = 0; dev->data_out_consumer_idx++; dev->data_out_consumer_idx &= (NUM_DATA_URB - 1); atomic_dec(&dev->data_out_queued); usb_anchor_urb(urb, &dev->data_out_anchor); atomic_inc(&dev->data_out_inflight); spin_unlock_irqrestore(&dev->data_out_lock, flags); ret = usb_submit_urb(urb, GFP_ATOMIC); if (ret) { atomic_dec(&dev->data_out_inflight); goto leave_tx; } } else break; } while (1); spin_unlock_irqrestore(&dev->data_out_lock, flags); leave_tx: return ret; } static void __bladeRF_write_cb(struct urb *urb) { bladerf_device_t *dev; unsigned long flags; dev = (bladerf_device_t *)urb->context; usb_unanchor_urb(urb); spin_lock_irqsave(&dev->data_out_lock, flags); atomic_dec(&dev->data_out_inflight); atomic_dec(&dev->data_out_used); spin_unlock_irqrestore(&dev->data_out_lock, flags); if (dev->tx_en) __submit_tx_urb(dev); dev->bytes += DATA_BUF_SZ; wake_up_interruptible(&dev->data_out_wait); } static ssize_t bladerf_write(struct file *file, const char *user_buf, size_t count, loff_t *ppos) { bladerf_device_t *dev; unsigned long flags; char *buf = NULL; struct data_buffer *db = NULL; unsigned int idx; int reread; int status = 0; /* TODO truncate count to be within range of ssize_t here? */ dev = (bladerf_device_t *)file->private_data; // special exception for loading FPGA if (dev->intnum == 0) { int llen; buf = (char *)kmalloc(count, GFP_KERNEL); if (buf) { if (copy_from_user(buf, user_buf, count)) { status = -EFAULT; } else { status = usb_bulk_msg(dev->udev, usb_sndbulkpipe(dev->udev, 2), buf, count, &llen, BLADE_USB_TIMEOUT_MS); } kfree(buf); } else { dev_err(&dev->interface->dev, "Failed to allocate write buffer\n"); status = -ENOMEM; } if (status < 0) return status; else return llen; } if (dev->writer) { if (file != dev->writer) { return -EPERM; } } else dev->writer = file; reread = atomic_read(&dev->data_out_used); if (reread >= NUM_DATA_URB) { status = wait_event_interruptible(dev->data_out_wait, atomic_read(&dev->data_out_used) < NUM_DATA_URB); if (status < 0) { return status; } else if (status == 0) { return -ETIMEDOUT; } } spin_lock_irqsave(&dev->data_out_lock, flags); idx = dev->data_out_producer_idx++; dev->data_out_producer_idx &= (NUM_DATA_URB - 1); db = &dev->data_out_bufs[idx]; atomic_inc(&dev->data_out_queued); atomic_inc(&dev->data_out_used); spin_unlock_irqrestore(&dev->data_out_lock, flags); if (copy_from_user(db->addr, user_buf, count)) { return -EFAULT; } db->valid = 1; // mark this TX packet as having valid data __submit_tx_urb(dev); if (!dev->tx_en) enable_tx(dev); return count; } int __bladerf_rcv_cmd(bladerf_device_t *dev, int cmd, void *ptr, __u16 len) { int tries = 3; int retval; do { retval = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0), cmd, BLADE_USB_TYPE_IN, 0, 0, ptr, len, BLADE_USB_TIMEOUT_MS); if (retval < 0) { dev_err(&dev->interface->dev, "Error in %s calling usb_control_msg()" " with error %d, %d tries left\n", __func__, retval, tries); } } while ((retval < 0) && --tries); return retval; } int __bladerf_rcv_one_word(bladerf_device_t *dev, int cmd, void __user *arg) { unsigned int buf; int retval = -EINVAL; if (!arg) { retval = -EFAULT; goto err_out; } retval = __bladerf_rcv_cmd(dev, cmd, &buf, sizeof(buf)); if (retval >= 0) { buf = le32_to_cpu(buf); if (copy_to_user(arg, &buf, sizeof(buf))) { retval = -EFAULT; } else { retval = 0; } } if (retval >= 0) { retval = 0; } err_out: return retval; } int __bladerf_snd_cmd(bladerf_device_t *dev, int cmd, void *ptr, __u16 len) { int tries = 3; int retval; do { printk("usb_control_msg(ptr=%p) len=%d\n", ptr, len); retval = usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0), cmd, BLADE_USB_TYPE_OUT, 0, 0, ptr, len, BLADE_USB_TIMEOUT_MS); printk("done usb_control_msg() = %d\n", retval); if (retval < 0) { dev_err(&dev->interface->dev, "Error in %s calling usb_control_msg()" " with error %d, %d tries left\n", __func__, retval, tries); } } while ((retval < 0) && --tries); return retval; } int __bladerf_snd_one_word(bladerf_device_t *dev, int cmd, void __user *arg) { unsigned int buf; int retval = -EINVAL; if (!arg) { retval = -EFAULT; goto err_out; } if ((retval = copy_from_user(&buf, arg, sizeof(buf)))) goto err_out; buf = cpu_to_le32(buf); retval = __bladerf_snd_cmd(dev, cmd, &buf, sizeof(buf)); err_out: return retval; } long bladerf_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { bladerf_device_t *dev; void __user *data; struct bladerf_fx3_version ver; int ret; int retval = -EINVAL; int sz, nread, nwrite; struct uart_cmd spi_reg; int sectors_to_wipe, sector_idx; int pages_to_write, page_idx; int pages_to_read; int check_idx; int count, tries; int targetdev; /* FIXME this large buffer should be kmalloc'd and kept with the dev, no? */ unsigned char buf[1024]; struct bladeRF_firmware brf_fw; struct bladeRF_sector brf_sector; unsigned char *fw_buf; dev = file->private_data; data = (void __user *)arg; switch (cmd) { case BLADE_QUERY_VERSION: retval = __bladerf_rcv_cmd(dev, BLADE_USB_CMD_QUERY_VERSION, &ver, sizeof(ver)); if (retval >= 0) { ver.major = le16_to_cpu(ver.major); ver.minor = le16_to_cpu(ver.minor); if (copy_to_user(data, &ver, sizeof(struct bladerf_fx3_version))) { retval = -EFAULT; } else { retval = 0; } } break; case BLADE_QUERY_FPGA_STATUS: retval = __bladerf_rcv_one_word(dev, BLADE_USB_CMD_QUERY_FPGA_STATUS, data); break; case BLADE_BEGIN_PROG: if (dev->intnum != 0) { ret = usb_set_interface(dev->udev, 0,0); dev->intnum = 0; } retval = __bladerf_rcv_one_word(dev, BLADE_USB_CMD_BEGIN_PROG, data); break; case BLADE_END_PROG: // TODO: send another 2 DCLK cycles to ensure compliance with C4's boot procedure retval = __bladerf_rcv_one_word(dev, BLADE_USB_CMD_QUERY_FPGA_STATUS, data); if (!retval) { ret = usb_set_interface(dev->udev, 0,1); dev->intnum = 1; } break; case BLADE_CAL: if (dev->intnum != 2) { retval = usb_set_interface(dev->udev, 0,2); if (retval) break; dev->intnum = 2; } if (copy_from_user(&brf_fw, data, sizeof(struct bladeRF_firmware))) { return -EFAULT; } fw_buf = kzalloc(256, GFP_KERNEL); if (!fw_buf) return -EINVAL; memset(fw_buf, 0xff, 256); if (copy_from_user(fw_buf, brf_fw.ptr, brf_fw.len)) { retval = -EFAULT; break; } retval = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0), BLADE_USB_CMD_FLASH_ERASE, BLADE_USB_TYPE_IN, 0x0000, 3, &ret, 4, BLADE_USB_TIMEOUT_MS * 100); if (!retval) { dev_err(&dev->interface->dev, "Could not erase NAND cal sector 3.\n"); break; } retval = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0), BLADE_USB_CMD_FLASH_WRITE, BLADE_USB_TYPE_OUT, 0x0000, 768, fw_buf, 256, BLADE_USB_TIMEOUT_MS); if (!retval) { dev_err(&dev->interface->dev, "Could not write NAND cal sector 768.\n"); break; } memset(buf, 0, 256); retval = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0), BLADE_USB_CMD_FLASH_READ, BLADE_USB_TYPE_IN, 0x0000, 768, buf, 256, BLADE_USB_TIMEOUT_MS); if (!retval) { dev_err(&dev->interface->dev, "Could not read NAND cal sector 768.\n"); break; } retval = memcmp(fw_buf, buf, 256); break; case BLADE_FLASH_ERASE: retval = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0), BLADE_USB_CMD_FLASH_ERASE, BLADE_USB_TYPE_IN, 0x0000, arg, &ret, 4, BLADE_USB_TIMEOUT_MS * 100); if (!retval) { dev_err(&dev->interface->dev, "Could not read NAND cal sector 768.\n"); break; } retval = !ret; break; case BLADE_OTP: if (dev->intnum != 2) { retval = usb_set_interface(dev->udev, 0,2); if (retval) break; dev->intnum = 2; } if (copy_from_user(&brf_fw, data, sizeof(struct bladeRF_firmware))) { return -EFAULT; } fw_buf = kzalloc(256, GFP_KERNEL); if (!fw_buf) return -EINVAL; memset(fw_buf, 0xff, 256); if (copy_from_user(fw_buf, brf_fw.ptr, brf_fw.len)) { retval = -EFAULT; kfree(fw_buf); break; } memcpy(buf, fw_buf, brf_fw.len); retval = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0), BLADE_USB_CMD_WRITE_OTP, BLADE_USB_TYPE_OUT, 0x0000, 0, fw_buf, 256, BLADE_USB_TIMEOUT_MS); if (!retval) { dev_err(&dev->interface->dev, "Could not write OTP.\n"); break; } memset(buf, 0, 256); retval = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0), BLADE_USB_CMD_READ_OTP, BLADE_USB_TYPE_IN, 0x0000, 0, buf, 256, BLADE_USB_TIMEOUT_MS); if (!retval) { dev_err(&dev->interface->dev, "Could not read OTP.\n"); break; } retval = memcmp(fw_buf, buf, 256); break; case BLADE_OTP_READ: case BLADE_FLASH_READ: case BLADE_FLASH_WRITE: if (dev->intnum != 2) { retval = usb_set_interface(dev->udev, 0,2); if (retval) break; dev->intnum = 2; } if (copy_from_user(&brf_sector, data, sizeof(struct bladeRF_sector))) { return -EFAULT; } if (cmd == BLADE_OTP_READ) { if (brf_sector.idx != 0 || brf_sector.len != 0x100) dev_err(&dev->interface->dev, "Invalid OTP settings, expecting idx=0, len=256\n"); } sz = 0; if (dev->udev->speed == USB_SPEED_HIGH) { sz = 64; } else if (dev->udev->speed == USB_SPEED_SUPER) { sz = 256; } count = brf_sector.len + (sz - (brf_sector.len % sz)); fw_buf = kzalloc(count, GFP_KERNEL); if (!fw_buf) return -EFAULT; memset(fw_buf, 0xff, count); if (cmd == BLADE_FLASH_READ || cmd == BLADE_OTP_READ) { pages_to_read = (brf_sector.len + 255) / 0x100; nread = 0; for (page_idx = 0; page_idx < pages_to_read; page_idx++) { do { retval = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0), (cmd == BLADE_FLASH_READ) ? BLADE_USB_CMD_FLASH_READ : BLADE_USB_CMD_READ_OTP, BLADE_USB_TYPE_IN, 0x0000, brf_sector.idx + page_idx, &fw_buf[nread], sz, BLADE_USB_TIMEOUT_MS); printk("%d read %d bytes %x %x %x %x\n", retval, sz, fw_buf[nread], fw_buf[nread+1], fw_buf[nread+2], fw_buf[nread+3]); nread += sz; if (retval != sz) break; } while (nread != 256); if (retval != sz) break; } if (!retval) { dev_err(&dev->interface->dev, "Could not read NAND cal page idx %d.\n", page_idx); break; } if (copy_to_user((void __user *)brf_sector.ptr, fw_buf, brf_sector.len)) { retval = -EFAULT; break; } } else if (cmd == BLADE_FLASH_WRITE) { if (copy_from_user(fw_buf, brf_sector.ptr, brf_sector.len)) { retval = -EFAULT; break; } pages_to_write = (brf_sector.len + 255) / 0x100; nwrite = 0; for (page_idx = 0; page_idx < pages_to_write; page_idx++) { do { retval = usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0), BLADE_USB_CMD_FLASH_WRITE, BLADE_USB_TYPE_OUT, 0x0000, brf_sector.idx + page_idx, &fw_buf[page_idx * 256 + nwrite], sz, BLADE_USB_TIMEOUT_MS); nwrite += sz; if (retval != sz) break; } while (nwrite != 256); if (retval != sz) break; } if (!retval) { dev_err(&dev->interface->dev, "Could not write NAND cal page idx %d.\n", page_idx); break; } } break; case BLADE_UPGRADE_FW: if (dev->intnum != 2) { retval = usb_set_interface(dev->udev, 0,2); if (retval) break; dev->intnum = 2; } if (copy_from_user(&brf_fw, data, sizeof(struct bladeRF_firmware))) { return -EFAULT; } brf_fw.len = ((brf_fw.len + 255) / 256) * 256; fw_buf = kzalloc(brf_fw.len, GFP_KERNEL); if (!fw_buf) goto leave_fw; if (copy_from_user(fw_buf, brf_fw.ptr, brf_fw.len)) { retval = -EFAULT; goto leave_fw; } retval = -ENODEV; sectors_to_wipe = (brf_fw.len + 0xffff) / 0x10000; printk("Going to wipe %d sectors\n", sectors_to_wipe); for (sector_idx = 0; sector_idx < sectors_to_wipe; sector_idx++) { printk("Erasing sector %d... ", sector_idx); retval = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0), BLADE_USB_CMD_FLASH_ERASE, BLADE_USB_TYPE_IN, 0x0000, sector_idx, &ret, 4, BLADE_USB_TIMEOUT_MS * 100); printk("- erased\n"); if (retval != 4) { goto leave_fw; } ret = le32_to_cpu(ret); if (ret != 1) { printk("Unable to erase previous sector, quitting\n"); goto leave_fw; } } sz = 0; if (dev->udev->speed == USB_SPEED_HIGH) { sz = 64; } else if (dev->udev->speed == USB_SPEED_SUPER) { sz = 256; } pages_to_write = (brf_fw.len + 255) / 0x100; for (page_idx = pages_to_write - 1; page_idx >= 0; page_idx--) { nwrite = 0; do { retval = usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0), BLADE_USB_CMD_FLASH_WRITE, BLADE_USB_TYPE_OUT, 0x0000, page_idx, &fw_buf[page_idx * 256 + nwrite], sz, BLADE_USB_TIMEOUT_MS); nwrite += sz; } while (nwrite != 256); } pages_to_read = (brf_fw.len + 255) / 0x100; for (page_idx = 0; page_idx < pages_to_read; page_idx++) { nread = 0; do { retval = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0), BLADE_USB_CMD_FLASH_READ, BLADE_USB_TYPE_IN, 0x0000, page_idx, &buf[nread], sz, BLADE_USB_TIMEOUT_MS); nread += sz; } while (nread != 256); for (check_idx = 0; check_idx < 256; check_idx++) { if (buf[check_idx] != fw_buf[page_idx * 256 + check_idx]) { printk("ERROR: bladeRF firmware verification detected a mismatch at byte offset 0x%.8x\n", page_idx * 256 + check_idx); printk("ERROR: expected byte 0x%.2X, got 0x%.2X\n", fw_buf[page_idx * 256 + check_idx], buf[check_idx]); retval = -EINVAL; goto leave_fw; } } } retval = 0; printk("SUCCESSFULLY VERIFIED\n"); leave_fw: kfree(fw_buf); break; case BLADE_DEVICE_RESET: ret = 1; retval = __bladerf_snd_cmd(dev, BLADE_USB_CMD_RESET, &ret, sizeof(ret)); break; case BLADE_CHECK_PROG: retval = 0; printk("ok %d\n", dev->intnum); if (dev->intnum == 0) { retval = __bladerf_rcv_cmd(dev, BLADE_USB_CMD_QUERY_FPGA_STATUS, &ret, sizeof(ret)); printk("retval =%d ret=%d\n", retval, ret); if (retval >= 0 && ret) { retval = 0; ret = usb_set_interface(dev->udev, 0,1); dev->intnum = 1; if (copy_to_user((void __user *)arg, &ret, sizeof(ret))){ retval = -EFAULT; } else { retval = 0; } } } break; case BLADE_RF_RX: if (dev->intnum != 1) { dev_err(&dev->interface->dev, "Cannot enable RX from config mode\n"); retval = -1; break; } printk("RF_RX!\n"); retval = __bladerf_snd_one_word(dev, BLADE_USB_CMD_RF_RX, data); break; case BLADE_RF_TX: if (dev->intnum != 1) { dev_err(&dev->interface->dev, "Cannot enable TX from config mode\n"); retval = -1; break; } printk("RF_TX!\n"); retval = __bladerf_snd_one_word(dev, BLADE_USB_CMD_RF_TX, data); break; case BLADE_LMS_WRITE: case BLADE_LMS_READ: case BLADE_SI5338_WRITE: case BLADE_SI5338_READ: case BLADE_GPIO_WRITE: case BLADE_GPIO_READ: case BLADE_VCTCXO_WRITE: if (copy_from_user(&spi_reg, (void __user *)arg, sizeof(struct uart_cmd))) { retval = -EFAULT; break; } nread = count = 16; memset(buf, 0, 20); buf[0] = 'N'; targetdev = UART_PKT_DEV_SI5338; if (cmd == BLADE_GPIO_WRITE || cmd == BLADE_GPIO_READ) targetdev = UART_PKT_DEV_GPIO; if (cmd == BLADE_LMS_WRITE || cmd == BLADE_LMS_READ) targetdev = UART_PKT_DEV_LMS; if (cmd == BLADE_VCTCXO_WRITE) targetdev = UART_PKT_DEV_VCTCXO; if (cmd == BLADE_LMS_WRITE || cmd == BLADE_GPIO_WRITE || cmd == BLADE_SI5338_WRITE || cmd == BLADE_VCTCXO_WRITE) { buf[1] = UART_PKT_MODE_DIR_WRITE | targetdev | 0x01; buf[2] = spi_reg.addr; buf[3] = spi_reg.data; } else if (cmd == BLADE_LMS_READ || cmd == BLADE_GPIO_READ || cmd == BLADE_SI5338_READ) { buf[1] = UART_PKT_MODE_DIR_READ | targetdev | 0x01; buf[2] = spi_reg.addr; buf[3] = 0xff; } retval = usb_bulk_msg(dev->udev, usb_sndbulkpipe(dev->udev, 2), buf, count, &nread, BLADE_USB_TIMEOUT_MS); if (!retval) { memset(buf, 0, 20); tries = 3; do { retval = usb_bulk_msg(dev->udev, usb_rcvbulkpipe(dev->udev, 0x82), buf, count, &nread, BLADE_USB_TIMEOUT_MS); } while(retval == -ETIMEDOUT && tries--); if (!retval) { spi_reg.addr = buf[2]; spi_reg.data = buf[3]; } if (copy_to_user((void __user *)arg, &spi_reg, sizeof(struct uart_cmd))) { retval = -EFAULT; } else { retval = 0; } } break; case BLADE_GET_SPEED: ret = dev->udev->speed == USB_SPEED_SUPER; if (copy_to_user((void __user *)arg, &ret, sizeof(ret))) { retval = -EFAULT; } else { retval = 0; } break; case BLADE_GET_ADDR: ret = dev->udev->devnum; if (copy_to_user((void __user *)arg, &ret, sizeof(ret))) { retval = -EFAULT; } else { retval = 0; } break; case BLADE_GET_BUS: ret = dev->udev->bus->busnum; if (copy_to_user((void __user *)arg, &ret, sizeof(ret))) { retval = -EFAULT; } else { retval = 0; } break; } return retval; } static int bladerf_open(struct inode *inode, struct file *file) { bladerf_device_t *dev; struct usb_interface *interface; int subminor; subminor = iminor(inode); interface = usb_find_interface(&bladerf_driver, subminor); if (interface == NULL) { pr_err("%s - error, cannot find device for minor %d\n", __func__, subminor); return -ENODEV; } dev = usb_get_intfdata(interface); if (dev == NULL) { return -ENODEV; } file->private_data = dev; return 0; } static int bladerf_release(struct inode *inode, struct file *file) { bladerf_device_t *dev; dev = (bladerf_device_t *)file->private_data; if (dev->writer && dev->writer == file) { if (dev->tx_en) { disable_tx(dev); } dev->writer = NULL; } if (dev->reader && dev->reader == file) { if (dev->rx_en) { disable_rx(dev); } dev->reader = NULL; } return 0; } static struct file_operations bladerf_fops = { .owner = THIS_MODULE, .read = bladerf_read, .write = bladerf_write, .unlocked_ioctl = bladerf_ioctl, .open = bladerf_open, .release = bladerf_release, }; static struct usb_class_driver bladerf_class = { .name = "bladerf%d", .fops = &bladerf_fops, .minor_base = USB_NUAND_BLADERF_MINOR_BASE, }; static int bladerf_probe(struct usb_interface *interface, const struct usb_device_id *id) { bladerf_device_t *dev; int retval; if (interface->cur_altsetting->desc.bInterfaceNumber != 0) return 0; dev = kzalloc(sizeof(bladerf_device_t), GFP_KERNEL); if (dev == NULL) { dev_err(&interface->dev, "Out of memory\n"); goto error_oom; } spin_lock_init(&dev->data_in_lock); spin_lock_init(&dev->data_out_lock); dev->udev = usb_get_dev(interface_to_usbdev(interface)); dev->interface = interface; dev->intnum = 0; dev->bytes = 0; dev->debug = 0; dev->disconnecting = 0; atomic_set(&dev->data_in_inflight, 0); atomic_set(&dev->data_out_inflight, 0); init_usb_anchor(&dev->data_in_anchor); init_waitqueue_head(&dev->data_in_wait); init_usb_anchor(&dev->data_out_anchor); init_waitqueue_head(&dev->data_out_wait); bladerf_start(dev); usb_set_intfdata(interface, dev); retval = usb_register_dev(interface, &bladerf_class); if (retval) { dev_err(&interface->dev, "Unable to get a minor device number for bladeRF device\n"); usb_set_intfdata(interface, NULL); return retval; } dev_info(&interface->dev, "Nuand bladeRF device is now attached\n"); return 0; error_oom: return -ENOMEM; } static void bladerf_disconnect(struct usb_interface *interface) { bladerf_device_t *dev; if (interface->cur_altsetting->desc.bInterfaceNumber != 0) return; dev = usb_get_intfdata(interface); dev->disconnecting = 1; dev->tx_en = 0; dev->rx_en = 0; usb_kill_anchored_urbs(&dev->data_out_anchor); usb_kill_anchored_urbs(&dev->data_in_anchor); bladerf_stop(dev); usb_deregister_dev(interface, &bladerf_class); usb_set_intfdata(interface, NULL); usb_put_dev(dev->udev); dev_info(&interface->dev, "Nuand bladeRF device has been disconnected\n"); kfree(dev); } static struct usb_driver bladerf_driver = { .name = "nuand_bladerf", .probe = bladerf_probe, .disconnect = bladerf_disconnect, .id_table = bladerf_table, }; module_usb_driver(bladerf_driver); MODULE_AUTHOR("Robert Ghilduta "); MODULE_DESCRIPTION("bladeRF USB driver"); MODULE_VERSION("v0.2"); MODULE_LICENSE("GPL"); bladeRF-2024.05/host/drivers/windows/000077500000000000000000000000001457144405000173165ustar00rootroot00000000000000bladeRF-2024.05/host/drivers/windows/cyusb3/000077500000000000000000000000001457144405000205265ustar00rootroot00000000000000bladeRF-2024.05/host/drivers/windows/cyusb3/win7_8_10/000077500000000000000000000000001457144405000221415ustar00rootroot00000000000000bladeRF-2024.05/host/drivers/windows/cyusb3/win7_8_10/cyusb3.inf000066400000000000000000000076761457144405000240670ustar00rootroot00000000000000; Installation INF for the Cypress Generic USB Driver, ; modified to associate the CYUSB3 driver to the Nuand bladeRF ; ; (c) Copyright 2014-2017 Nuand LLC ; (c) Copyright 2012, 2013 Cypress Semiconductor Corporation ; [Version] Signature="$WINDOWS NT$" Class=USB ClassGUID={36FC9E60-C465-11CF-8056-444553540000} provider=%CYUSB3_Provider% CatalogFile=CYUSB3.cat DriverVer=08/21/2014,1.2.3.10 [SourceDisksNames] 1=%CYUSB3_Install%,,, [SourceDisksFiles] CYUSB3.sys = 1 [DestinationDirs] CYUSB3.Files.Ext = 10,System32\Drivers [ControlFlags] ExcludeFromSelect = * [Manufacturer] %CYUSB3_Provider%=Device,NT,NTx86,NTamd64 ;for all platforms [Device.NT] %VID_2CF0&PID_5246.DeviceDesc%=CyUsb3, USB\VID_2CF0&PID_5246 %VID_2CF0&PID_5250.DeviceDesc%=CyUsb3, USB\VID_2CF0&PID_5250 %VID_1D50&PID_6066.DeviceDesc%=CyUsb3, USB\VID_1D50&PID_6066 %VID_04B4&PID_00F3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F3 ;for x86 platforms [Device.NTx86] %VID_2CF0&PID_5246.DeviceDesc%=CyUsb3, USB\VID_2CF0&PID_5246 %VID_2CF0&PID_5250.DeviceDesc%=CyUsb3, USB\VID_2CF0&PID_5250 %VID_1D50&PID_6066.DeviceDesc%=CyUsb3, USB\VID_1D50&PID_6066 %VID_04B4&PID_00F3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F3 ;for x64 platforms [Device.NTamd64] %VID_2CF0&PID_5246.DeviceDesc%=CyUsb3, USB\VID_2CF0&PID_5246 %VID_2CF0&PID_5250.DeviceDesc%=CyUsb3, USB\VID_2CF0&PID_5250 %VID_1D50&PID_6066.DeviceDesc%=CyUsb3, USB\VID_1D50&PID_6066 %VID_04B4&PID_00F3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F3 [CYUSB3.NT] CopyFiles=CYUSB3.Files.Ext AddReg=CyUsb3.AddReg [CYUSB3.NT.HW] AddReg=CYUSB3.AddReg.Guid [CYUSB3.NT.Services] Addservice = CYUSB3,2,CYUSB3.AddService [CYUSB3.NTx86] CopyFiles=CYUSB3.Files.Ext AddReg=CyUsb3.AddReg [CYUSB3.NTx86.HW] AddReg=CYUSB3.AddReg.Guid [CYUSB3.NTx86.Services] Addservice = CYUSB3,2,CYUSB3.AddService [CYUSB3.NTamd64] CopyFiles=CYUSB3.Files.Ext AddReg=CyUsb3.AddReg [CYUSB3.NTamd64.HW] AddReg=CYUSB3.AddReg.Guid [CYUSB3.NTamd64.Services] Addservice = CYUSB3,2,CYUSB3.AddService [CYUSB3.AddReg] ; Deprecating - do not use in new apps to identify a CYUSB3 driver HKR,,DevLoader,,*ntkern HKR,,NTMPDriver,,CYUSB3.sys ; You may optionally include a check for DriverBase in your application to check for a CYUSB3 driver HKR,,DriverBase,,CYUSB3.sys HKR,"Parameters","MaximumTransferSize",0x10001,4096 HKR,"Parameters","DebugLevel",0x10001,2 HKR,,FriendlyName,,%CYUSB3_Description% [CYUSB3.AddService] DisplayName = %CYUSB3_Description% ServiceType = 1 ; SERVICE_KERNEL_DRIVER StartType = 3 ; SERVICE_DEMAND_START ErrorControl = 1 ; SERVICE_ERROR_NORMAL ServiceBinary = %10%\System32\Drivers\CYUSB3.sys AddReg = CYUSB3.AddReg LoadOrderGroup = Base [CYUSB3.Files.Ext] CYUSB3.sys [CYUSB3.AddReg.Guid] HKR,,DriverGUID,,%CYUSB3.GUID% ;-------------- WDF Coinstaller installation [SourceDisksFiles] WdfCoInstaller01011.dll=1 ; make sure the number matches with SourceDisksNames [DestinationDirs] CoInstaller_CopyFiles = 11 [CYUSB3.NTamd64.CoInstallers] AddReg=CoInstaller_AddReg CopyFiles=CoInstaller_CopyFiles [CYUSB3.NTx86.CoInstallers] AddReg=CoInstaller_AddReg CopyFiles=CoInstaller_CopyFiles [CoInstaller_CopyFiles] WdfCoInstaller01011.dll [CoInstaller_AddReg] HKR,,CoInstallers32,0x00010000, "WdfCoInstaller01011.dll,WdfCoInstaller" [CYUSB3.NTamd64.Wdf] KmdfService = CYUSB3, CYUSB3_wdfsect [CYUSB3.NTx86.Wdf] KmdfService = CYUSB3, CYUSB3_wdfsect [CYUSB3_wdfsect] KmdfLibraryVersion = 1.11 [Strings] CYUSB3_Provider = "Cypress" CYUSB3_Company = "Cypress Semiconductor Corporation" CYUSB3_Description = "Cypress Generic USB3.0 Driver" CYUSB3_DisplayName = "Cypress USB3.0 Generic" CYUSB3_Install = "Cypress CYUSB3.0 Driver Installation Disk" VID_2CF0&PID_5246.DeviceDesc="Nuand bladeRF" VID_2CF0&PID_5250.DeviceDesc="Nuand bladeRF 2.0" VID_1D50&PID_6066.DeviceDesc="Nuand bladeRF (Legacy VID/PID)" VID_04B4&PID_00F3.DeviceDesc="Cypress USB BootLoader" CYUSB3.GUID="{35D5D3F1-9D0E-4F62-BCFB-B0D48EA63416}" CYUSB3_Unused = "." bladeRF-2024.05/host/drivers/windows/cyusb3/xp_vista/000077500000000000000000000000001457144405000223635ustar00rootroot00000000000000bladeRF-2024.05/host/drivers/windows/cyusb3/xp_vista/cyusb3.inf000066400000000000000000000076751457144405000243100ustar00rootroot00000000000000; Installation INF for the Cypress Generic USB Driver, ; modified to associate the CYUSB3 driver to the Nuand bladeRF ; ; (c) Copyright 2014-2017 Nuand LLC ; (c) Copyright 2012, 2013 Cypress Semiconductor Corporation ; [Version] Signature="$WINDOWS NT$" Class=USB ClassGUID={36FC9E60-C465-11CF-8056-444553540000} provider=%CYUSB3_Provider% CatalogFile=CYUSB3.cat DriverVer=08/21/2014,1.2.3.10 [SourceDisksNames] 1=%CYUSB3_Install%,,, [SourceDisksFiles] CYUSB3.sys = 1 [DestinationDirs] CYUSB3.Files.Ext = 10,System32\Drivers [ControlFlags] ExcludeFromSelect = * [Manufacturer] %CYUSB3_Provider%=Device,NT,NTx86,NTamd64 ;for all platforms [Device.NT] %VID_2CF0&PID_5246.DeviceDesc%=CyUsb3, USB\VID_2CF0&PID_5246 %VID_2CF0&PID_5250.DeviceDesc%=CyUsb3, USB\VID_2CF0&PID_5250 %VID_1D50&PID_6066.DeviceDesc%=CyUsb3, USB\VID_1D50&PID_6066 %VID_04B4&PID_00F3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F3 ;for x86 platforms [Device.NTx86] %VID_2CF0&PID_5246.DeviceDesc%=CyUsb3, USB\VID_2CF0&PID_5246 %VID_2CF0&PID_5250.DeviceDesc%=CyUsb3, USB\VID_2CF0&PID_5250 %VID_1D50&PID_6066.DeviceDesc%=CyUsb3, USB\VID_1D50&PID_6066 %VID_04B4&PID_00F3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F3 ;for x64 platforms [Device.NTamd64] %VID_2CF0&PID_5246.DeviceDesc%=CyUsb3, USB\VID_2CF0&PID_5246 %VID_2CF0&PID_5250.DeviceDesc%=CyUsb3, USB\VID_2CF0&PID_5250 %VID_1D50&PID_6066.DeviceDesc%=CyUsb3, USB\VID_1D50&PID_6066 %VID_04B4&PID_00F3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F3 [CYUSB3.NT] CopyFiles=CYUSB3.Files.Ext AddReg=CyUsb3.AddReg [CYUSB3.NT.HW] AddReg=CYUSB3.AddReg.Guid [CYUSB3.NT.Services] Addservice = CYUSB3,2,CYUSB3.AddService [CYUSB3.NTx86] CopyFiles=CYUSB3.Files.Ext AddReg=CyUsb3.AddReg [CYUSB3.NTx86.HW] AddReg=CYUSB3.AddReg.Guid [CYUSB3.NTx86.Services] Addservice = CYUSB3,2,CYUSB3.AddService [CYUSB3.NTamd64] CopyFiles=CYUSB3.Files.Ext AddReg=CyUsb3.AddReg [CYUSB3.NTamd64.HW] AddReg=CYUSB3.AddReg.Guid [CYUSB3.NTamd64.Services] Addservice = CYUSB3,2,CYUSB3.AddService [CYUSB3.AddReg] ; Deprecating - do not use in new apps to identify a CYUSB3 driver HKR,,DevLoader,,*ntkern HKR,,NTMPDriver,,CYUSB3.sys ; You may optionally include a check for DriverBase in your application to check for a CYUSB3 driver HKR,,DriverBase,,CYUSB3.sys HKR,"Parameters","MaximumTransferSize",0x10001,4096 HKR,"Parameters","DebugLevel",0x10001,2 HKR,,FriendlyName,,%CYUSB3_Description% [CYUSB3.AddService] DisplayName = %CYUSB3_Description% ServiceType = 1 ; SERVICE_KERNEL_DRIVER StartType = 3 ; SERVICE_DEMAND_START ErrorControl = 1 ; SERVICE_ERROR_NORMAL ServiceBinary = %10%\System32\Drivers\CYUSB3.sys AddReg = CYUSB3.AddReg LoadOrderGroup = Base [CYUSB3.Files.Ext] CYUSB3.sys [CYUSB3.AddReg.Guid] HKR,,DriverGUID,,%CYUSB3.GUID% ;-------------- WDF Coinstaller installation [SourceDisksFiles] WdfCoInstaller01009.dll=1 ; make sure the number matches with SourceDisksNames [DestinationDirs] CoInstaller_CopyFiles = 11 [CYUSB3.NTamd64.CoInstallers] AddReg=CoInstaller_AddReg CopyFiles=CoInstaller_CopyFiles [CYUSB3.NTx86.CoInstallers] AddReg=CoInstaller_AddReg CopyFiles=CoInstaller_CopyFiles [CoInstaller_CopyFiles] WdfCoInstaller01009.dll [CoInstaller_AddReg] HKR,,CoInstallers32,0x00010000, "WdfCoInstaller01009.dll,WdfCoInstaller" [CYUSB3.NTamd64.Wdf] KmdfService = CYUSB3, CYUSB3_wdfsect [CYUSB3.NTx86.Wdf] KmdfService = CYUSB3, CYUSB3_wdfsect [CYUSB3_wdfsect] KmdfLibraryVersion = 1.9 [Strings] CYUSB3_Provider = "Cypress" CYUSB3_Company = "Cypress Semiconductor Corporation" CYUSB3_Description = "Cypress Generic USB3.0 Driver" CYUSB3_DisplayName = "Cypress USB3.0 Generic" CYUSB3_Install = "Cypress CYUSB3.0 Driver Installation Disk" VID_2CF0&PID_5246.DeviceDesc="Nuand bladeRF" VID_2CF0&PID_5250.DeviceDesc="Nuand bladeRF 2.0" VID_1D50&PID_6066.DeviceDesc="Nuand bladeRF (Legacy VID/PID)" VID_04B4&PID_00F3.DeviceDesc="Cypress USB BootLoader" CYUSB3.GUID="{35D5D3F1-9D0E-4F62-BCFB-B0D48EA63416}" CYUSB3_Unused = "." bladeRF-2024.05/host/examples/000077500000000000000000000000001457144405000157645ustar00rootroot00000000000000bladeRF-2024.05/host/examples/bladeRF-cli/000077500000000000000000000000001457144405000200305ustar00rootroot00000000000000bladeRF-2024.05/host/examples/bladeRF-cli/sync_trx/000077500000000000000000000000001457144405000217015ustar00rootroot00000000000000bladeRF-2024.05/host/examples/bladeRF-cli/sync_trx/.gitignore000066400000000000000000000000141457144405000236640ustar00rootroot00000000000000*.csv *.bin bladeRF-2024.05/host/examples/bladeRF-cli/sync_trx/README.md000066400000000000000000000125001457144405000231560ustar00rootroot00000000000000# Synchronized TRX # This example illustrates how to synchronize RX and TX sampling on multiple devices, using the bladeRF-cli and the trigger functionality introduced in FPGA v0.6.0. This example assumes the use of an RF power splitter/combiner and two bladeRF devices, connected as follows: 1. The "master" bladeRF has both its TX and RX ports connected to the combiner. 2. The "slave" bladeRF has its RX port connected to the combiner. 3. `mini_exp[1]` on both devices is connected together. This connects the trigger signal on both devices. The "master" will output this signal, and the "slave" will receive it. 4. Connect both boards to GND using pin J71-2 or J51-3 for the bladeRF x40/x115 or xA4/xA5/xA9 respectively. 5. The J62 SMB clock connector of both devices are connected together. The "master" bladeRF will output its 38.4 MHz reference clock, and the "slave" bladeRF will utilize this reference instead of its own on-board clock. This ensures that both devices are sampling using the same clock. Note: `mini_exp[1]` is J71-4 on bladeRF x40/x115, and J51-1 on bladeRF xA4/xA5/xA9. When a trigger is "armed," the FPGA will gate both transmit and receive samples; the flow of samples to/from the host is blocked. The assertion ("firing") of the trigger signal unblocks samples, causing all devices to begin transmitting or receiving within +/- 1 sample clock period. In this example, the "master" will transmit a series of on-off pulses at a 1 MHz offset, and both the "master" and "slave" will receive these pulses. The transmission and reception are synchronized using the `mini_exp[1]` trigger signal. ## Creating Samples ## Scripts are provided to create a samples.csv file containing a single pulse. This files consists of 1,000 zeros, followed by 100 samples of a CW tone, followed by 1,000 more zeros. In Linux and OSX, run `create_samples.sh`. In Windows, run `create_samples.bat`. This script make take a few moments to complete. ## Executing the Example Scripts ## Two bladeRF-cli scripts, `master.txt` and `slave.txt`, are provided for this example. The `master.txt` script configures the "master" device to output its reference clock on the SMB connector (J62), arm a TX "master" trigger, and arm an RX "slave" trigger. Note that even though both the RX and TX paths are on the same device, one of these must assume the "master" trigger role that will output the trigger signal. Internally, the other path with receive this -- it is *very* important that both not be configured as "master", as this would cause contention over the trigger signal. In a multi-device configuration, especially for this master-slave setup, it is recommended to run the bladeRF-cli in a manner that specifies the device to open via serial number. Run `bladeRF-cli -p` to see a list of available devices. For example: ``` $ bladeRF-cli -p Backend: libusb Serial: e93f190c76e987cd7f462026f965a1a1 USB Bus: 1 USB Address: 13 Backend: libusb Serial: b74ed347390d35c29923e80f64c9d904 USB Bus: 12 USB Address: 8 ``` For this example, the "master" is the device with serial number `b57...` and the "slave" is the device with serial number `e93...`. In one terminal, run the `master.txt` script: ``` $ bladeRF -d '*:serial=b74' -s master.txt -i ``` In another terminal, run the `slave.txt` script: ``` $ bladeRF -d '*:serial=e93' -s slave.txt ``` At this point, both devices' sample streams are blocked and awaiting a trigger. In the "master" console, fire the trigger via: bladeRF x40/x115 ``` trigger j71-4 tx fire ``` bladeRF xA4/xA5/xA9 ``` trigger J51-1 tx fire ``` Wait for the RX and TX operations complete via the commands: ``` rx wait; tx wait ``` It will most likely be the case that these operations have finished before you can type these commands. They will return immediately if this is true. ## Viewing the Results ## The results may be viewed using [Octave] [1] or [MATLAB] [2]. Run one of these programs in this directory and execute the `plot_samples` function provided in this directory. This script will load and plot samples from the `master_tx.csv`, `master_rx.csv`, and `slave_rx.csv` files located in the current working directory. Note that in the resulting plot, the first pulse transmitted by the "master" will be red/orange. The signal received by the "master" device is blue. The signal received by the "slave" device is green. Zoom in to see the first few pulses in detail. The reception of the pulse by the "master" and "slave" devices should be synchronized within +/- 1 samples. Although the devices' sampling clocks are synchronized, they are not guaranteed to be phase-aligned; the mixers in each device operate using independent PLLs. However, the phase offset between the synchronized devices should remain fixed. This allows for opportunities to determine and compensate for phase offsets. Lastly, there is a fixed offset between the transmission of the signal by the "master" device, and its reception. This length of this offset is determined by the TX chain in the FPGA and LMS6002D, and should remain a constant value. Thus, one can make a priori assumptions about this value after quantifying it for a particular FPGA version. (Changes to the FPGA code could alter this value.) [1]: https://www.gnu.org/software/octave/ "GNU Octave" [2]: https://www.mathworks.com/products/matlab "MATLAB" bladeRF-2024.05/host/examples/bladeRF-cli/sync_trx/create_samples.bat000066400000000000000000000004751457144405000253660ustar00rootroot00000000000000@echo off set OUTFILE=master_tx.csv if exist %OUTFILE% del %OUTFILE% echo Creating %OUTFILE%. This window will close when this is done. for /L %%G in (1, 1, 1000) do echo "0, 0" >> %OUTFILE% for /L %%G in (1, 1, 100) do echo "1447, 1447" >> %OUTFILE% for /L %%G in (1, 1, 1000) do echo "0, 0" >> %OUTFILE% bladeRF-2024.05/host/examples/bladeRF-cli/sync_trx/create_samples.sh000077500000000000000000000007351457144405000252340ustar00rootroot00000000000000#!/bin/sh # # Creates a master_tx.csv file ################################################################################ OUTFILE=master_tx.csv rm -f ${OUTFILE} # Write zeros i=0 while [ $i -lt 1000 ]; do echo "0, 0" >> ${OUTFILE} i=$(expr $i + 1) done # Write a pulse (i = q = sqrt(2)/2) i=0 while [ $i -lt 100 ]; do echo "1447, 1447" >> ${OUTFILE} i=$(expr $i + 1) done # Write zeros i=0 while [ $i -lt 1000 ]; do echo "0, 0" >> ${OUTFILE} i=$(expr $i + 1) done bladeRF-2024.05/host/examples/bladeRF-cli/sync_trx/master.txt000066400000000000000000000014351457144405000237400ustar00rootroot00000000000000# Set up device parameters set frequency rx 922M set frequency tx 923M set samplerate 6M set bandwidth 3M set txvga1 -15 set txvga2 0 set lnagain 6 set rxvga1 10 set rxvga2 0 # Configure TX & RX operations tx config file=master_tx.csv format=csv repeat=25 timeout=60s rx config file=master_rx.csv format=csv n=60000 timeout=60s # Output reference clock set smb_mode output # Arm the triggers trigger j71-4 tx master trigger j71-4 rx slave # Start streaming sampling rx start tx start # Inform user how to fire trigger echo " ---------------------------------------------------------------" echo " Run the slave.txt script in another terminal." echo " Then, run 'trigger j71-4 tx fire' to fire trigger." echo " ---------------------------------------------------------------" echo "" bladeRF-2024.05/host/examples/bladeRF-cli/sync_trx/plot_samples.m000066400000000000000000000014521457144405000245630ustar00rootroot00000000000000% This script assumes it is being run from: % ${BLADERF}/host/examples/bladeRF-cli/sync_trx % % If this is not the case, change the following addpath() line to point to: % ${BLADERF}/host/misc/matlab % % This directory contains the load_csv() function. addpath('../../../misc/matlab') master_tx = load_csv('master_tx.csv'); master_rx = load_csv('master_rx.csv'); slave_rx = load_csv('slave_rx.csv'); master_tx_len = length(master_tx); master_rx_len = length(master_rx); slave_rx_len = length(slave_rx); % Scale the master_tx samples to the max RX'd amplitude % just to make the plot a bit easier to read. abs_master_tx = abs(master_tx) * max(abs(master_rx)); plot(1:master_tx_len, abs_master_tx, 'r', ... 1:master_rx_len, abs(master_rx), 'g', ... 1:slave_rx_len, abs(slave_rx), 'b'); bladeRF-2024.05/host/examples/bladeRF-cli/sync_trx/slave.txt000066400000000000000000000013461457144405000235600ustar00rootroot00000000000000# Set up device parameters set frequency rx 922M set frequency tx 922M set samplerate 6M set bandwidth 3M set lnagain 6 set rxvga1 10 set rxvga2 0 # Configure RX & TX operations rx config file=slave_rx.csv format=csv n=60000 timeout=60s # Use reference clock input from master. # This assumes the master is already outputting this reference. set smb_mode input # Arm the trigger trigger j71-4 rx slave # Start streaming sampling rx start # Inform user how to fire trigger echo " ---------------------------------------------------------------" echo " Ready. Fire the trigger on the master device." echo " ---------------------------------------------------------------" # Wait for the RX to complete and then finish up. rx wait bladeRF-2024.05/host/examples/gnuradio/000077500000000000000000000000001457144405000175745ustar00rootroot00000000000000bladeRF-2024.05/host/examples/gnuradio/frs/000077500000000000000000000000001457144405000203665ustar00rootroot00000000000000bladeRF-2024.05/host/examples/gnuradio/frs/README.md000066400000000000000000000006441457144405000216510ustar00rootroot00000000000000The `bladeRF_frs.grc` flowgraph implements a full-duplex FRS transceiver with CTCSS support and the ability to operate on any subset of the standard FRS channels. More information may be found in the paper, [An SDR-Based FRS Transceiver](https://www.nuand.com/bladeRF-doc/examples/bladeRF_frs.html). The source of this document may be found in the [nuand-papers](https://www.github.com/nuand/nuand-papers/) repository. bladeRF-2024.05/host/examples/gnuradio/frs/bladeRF_frs.grc000066400000000000000000011662561457144405000232550ustar00rootroot00000000000000 Fri Feb 20 13:31:26 2015 options id bladeRF_frs _enabled True title FRS Transceiver author Nuand, LLC <bladeRF@nuand.com> description Multi-channel FRS transceiver with CTCSS. A USB 3.0 connection is required for full-duplex operation. window_size 3600, 3400 generate_options qt_gui category Custom run_options prompt run True max_nouts 0 realtime_scheduling alias _coordinate (16, 13) _rotation 0 variable id rx_dec_fir_taps _enabled True value [-1.0662e-05,6.8043e-06,2.4381e-05,5.1631e-05,8.2064e-05,0.00010369,0.00010047,5.6519e-05,-3.757e-05,-0.00017776,-0.00034135,-0.00048602,-0.00055545,-0.00049196,-0.00025471,0.00016054,0.00070578,0.0012759,0.0017192,0.001866,0.001571,0.00076303,-0.00051222,-0.0020683,-0.0035871,-0.0046655,-0.0048987,-0.003985,-0.0018318,0.0013662,0.0051016,0.0086021,0.010954,0.011289,0.0090026,0.0039584,-0.0033701,-0.011863,-0.019851,-0.025341,-0.026348,-0.021276,-0.0092719,0.0095133,0.033821,0.061376,0.089168,0.11388,0.1324,0.14232,0.14232,0.1324,0.11388,0.089168,0.061376,0.033821,0.0095133,-0.0092719,-0.021276,-0.026348,-0.025341,-0.019851,-0.011863,-0.0033701,0.0039584,0.0090026,0.011289,0.010954,0.0086021,0.0051016,0.0013662,-0.0018318,-0.003985,-0.0048987,-0.0046655,-0.0035871,-0.0020683,-0.00051222,0.00076303,0.001571,0.001866,0.0017192,0.0012759,0.00070578,0.00016054,-0.00025471,-0.00049196,-0.00055545,-0.00048602,-0.00034135,-0.00017776,-3.757e-05,5.6519e-05,0.00010047,0.00010369,8.2064e-05,5.1631e-05,2.4381e-05,6.8043e-06,-1.0662e-05] alias _coordinate (568, 1124) _rotation 0 variable id rx_xlating_fir_taps _enabled True value [-4.7805e-05,-0.00019404,-0.00053601,-0.0011824,-0.0022208,-0.0036578,-0.0053495,-0.0069408,-0.0078402,-0.0072531,-0.0042895,0.001863,0.011725,0.025321,0.042041,0.060612,0.079218,0.095753,0.10816,0.11482,0.11482,0.10816,0.095753,0.079218,0.060612,0.042041,0.025321,0.011725,0.001863,-0.0042895,-0.0072531,-0.0078402,-0.0069408,-0.0053495,-0.0036578,-0.0022208,-0.0011824,-0.00053601,-0.00019404,-4.7805e-05] alias _coordinate (360, 1108) _rotation 0 variable id rx_pc_taps _enabled True value [-0.00045208,-4.474e-05,-4.0307e-05,-3.0817e-05,-1.6342e-05,3.4432e-06,2.8181e-05,5.7893e-05,9.1868e-05,0.00012974,0.0001704,0.00021304,0.00025609,0.00029836,0.00033796,0.00037353,0.00040315,0.00042547,0.00043837,0.00043955,0.00042895,0.00040433,0.0003649,0.00031024,0.00023988,0.00015429,5.3909e-05,-5.9804e-05,-0.00018539,-0.00032035,-0.00046214,-0.00060725,-0.00075225,-0.00089289,-0.0010252,-0.0011443,-0.0012459,-0.0013251,-0.0013782,-0.0014005,-0.001389,-0.0013403,-0.0012525,-0.0011239,-0.00095447,-0.0007445,-0.000496,-0.00021167,0.00010412,0.00044629,0.00080818,0.0011825,0.0015606,0.0019335,0.0022909,0.0026229,0.0029187,0.0031679,0.0033603,0.0034864,0.0035374,0.0035059,0.0033856,0.0031722,0.002863,0.0024579,0.0019586,0.0013694,0.00069708,-4.8959e-05,-0.00085709,-0.001713,-0.0026004,-0.0035007,-0.0043939,-0.005258,-0.0060704,-0.0068075,-0.0074456,-0.007961,-0.008331,-0.0085338,-0.0085494,-0.0083598,-0.0079499,-0.0073073,-0.0064233,-0.0052925,-0.0039139,-0.0022905,-0.00042946,0.0016577,0.0039549,0.0064425,0.0090964,0.011889,0.01479,0.017766,0.020781,0.023798,0.026777,0.029681,0.03247,0.035106,0.037553,0.039777,0.041747,0.043433,0.044813,0.045865,0.046576,0.046933,0.046933,0.046576,0.045865,0.044813,0.043433,0.041747,0.039777,0.037553,0.035106,0.03247,0.029681,0.026777,0.023798,0.020781,0.017766,0.01479,0.011889,0.0090964,0.0064425,0.0039549,0.0016577,-0.00042946,-0.0022905,-0.0039139,-0.0052925,-0.0064233,-0.0073073,-0.0079499,-0.0083598,-0.0085494,-0.0085338,-0.008331,-0.007961,-0.0074456,-0.0068075,-0.0060704,-0.005258,-0.0043939,-0.0035007,-0.0026004,-0.001713,-0.00085709,-4.8959e-05,0.00069708,0.0013694,0.0019586,0.0024579,0.002863,0.0031722,0.0033856,0.0035059,0.0035374,0.0034864,0.0033603,0.0031679,0.0029187,0.0026229,0.0022909,0.0019335,0.0015606,0.0011825,0.00080818,0.00044629,0.00010412,-0.00021167,-0.000496,-0.0007445,-0.00095447,-0.0011239,-0.0012525,-0.0013403,-0.001389,-0.0014005,-0.0013782,-0.0013251,-0.0012459,-0.0011443,-0.0010252,-0.00089289,-0.00075225,-0.00060725,-0.00046214,-0.00032035,-0.00018539,-5.9804e-05,5.3909e-05,0.00015429,0.00023988,0.00031024,0.0003649,0.00040433,0.00042895,0.00043955,0.00043837,0.00042547,0.00040315,0.00037353,0.00033796,0.00029836,0.00025609,0.00021304,0.0001704,0.00012974,9.1868e-05,5.7893e-05,2.8181e-05,3.4432e-06,-1.6342e-05,-3.0817e-05,-4.0307e-05,-4.474e-05,-0.00045208] alias _coordinate (616, 532) _rotation 0 variable id ctcss_hpf_fb_taps _enabled True value [1,-5.6992016578761877099168486893177032470703125,13.56101351514487163285593851469457149505615234375,-17.24510428469104539317413582466542720794677734375,12.3620564992096202416860251105390489101409912109375,-4.7368104535795811926845999551005661487579345703125,0.7580490211161876601408948772586882114410400390625] alias _coordinate (2152, 268) _rotation 0 variable id ctcss_hpf_ff_taps _enabled True value [0.77275029037678344412398701024358160793781280517578125,-4.62934886736234840753922981093637645244598388671875,11.562660778112377357729201321490108966827392578125,-15.4121243939073497841718562995083630084991455078125,11.562660778112377357729201321490108966827392578125,-4.62934886736234840753922981093637645244598388671875,0.77275029037678344412398701024358160793781280517578125] alias _coordinate (2152, 204) _rotation 0 variable id rx_audio_sample_rate _enabled True value int(25e3) alias _coordinate (2368, 284) _rotation 0 variable id tx_rf_freq _enabled True value 465.1375e6-200e3 alias _coordinate (3072, 2604) _rotation 0 variable id rf_rx_freq _enabled True value 465.1375e6 + 200e3 alias _coordinate (40, 1108) _rotation 0 variable id rx_ch4_offset _enabled True value 462.6375e6 - rf_rx_freq alias _coordinate (392, 1044) _rotation 0 variable id tx_ch11_offset _enabled True value 467.6375e6 - tx_rf_freq alias _coordinate (2568, 2996) _rotation 0 variable id ctcss_enable _enabled True value (ctcss_freq != 0) alias _coordinate (512, 36) _rotation 0 variable id tx_pfs_output_rate _enabled True value 16 * tx_audio_sample_rate alias _coordinate (1936, 2548) _rotation 0 variable id tx_audio_sample_rate _enabled True value 25000 alias _coordinate (40, 2700) _rotation 0 variable id rx_ch11_offset _enabled True value 467.6375e6 - rf_rx_freq alias _coordinate (384, 1420) _rotation 0 variable id tx_num_enabled_ch1_7 _enabled True value sum([tx_ch1_enable, tx_ch2_enable, tx_ch3_enable, tx_ch4_enable, tx_ch5_enable, tx_ch6_enable, tx_ch7_enable]) alias _coordinate (136, 2412) _rotation 0 variable id tx_num_enabled_ch8_14 _enabled True value sum([tx_ch8_enable, tx_ch9_enable, tx_ch10_enable, tx_ch11_enable, tx_ch12_enable, tx_ch13_enable, tx_ch14_enable]) alias _coordinate (288, 2412) _rotation 0 variable id tx_interp_fir1_taps _enabled True value [-4.8644e-05,-0.00016723,-0.00034107,-0.00044056,-0.00022109,0.00056199,0.0019097,0.0033168,0.0037097,0.0018038,-0.0030821,-0.01005,-0.016097,-0.01671,-0.0078332,0.011277,0.035683,0.054566,0.054373,0.025017,-0.032996,-0.10389,-0.1576,-0.15779,-0.074999,0.09961,0.34588,0.61616,0.84749,0.98091,0.98091,0.84749,0.61616,0.34588,0.09961,-0.074999,-0.15779,-0.1576,-0.10389,-0.032996,0.025017,0.054373,0.054566,0.035683,0.011277,-0.0078332,-0.01671,-0.016097,-0.01005,-0.0030821,0.0018038,0.0037097,0.0033168,0.0019097,0.00056199,-0.00022109,-0.00044056,-0.00034107,-0.00016723,-4.8644e-05] alias _coordinate (2320, 2524) _rotation 0 variable id tx_rf_sample_rate _enabled True value 20 * tx_pfs_output_rate alias _coordinate (3056, 2668) _rotation 0 variable id tx_ch4_offset _enabled True value 462.6375e6 - tx_rf_freq alias _coordinate (2560, 2444) _rotation 0 variable id rx_rf_sample_rate _enabled True value 8e6 alias _coordinate (32, 1172) _rotation 0 variable id tx_interp_fir2_taps _enabled True value [0.00047746,0.0021732,0.0050807,0.0064914,0.00028582,-0.019702,-0.051662,-0.077639,-0.063579,0.02661,0.20688,0.44923,0.68473,0.8306,0.8306,0.68473,0.44923,0.20688,0.02661,-0.063579,-0.077639,-0.051662,-0.019702,0.00028582,0.0064914,0.0050807,0.0021732,0.00047746] alias _coordinate (2528, 2620) _rotation 0 variable id rx_ctcss_len _enabled True value int(0.250 * rx_audio_sample_rate) alias _coordinate (1872, 268) _rotation 0 variable id rx_ctcss_squelch _enabled True value 0.010 alias _coordinate (1600, 268) _rotation 0 variable id rx_power_squelch_alpha _enabled True value 0.0125 alias _coordinate (1312, 268) _rotation 0 variable id nbfm_tau _enabled True value 5e-6 alias _coordinate (1512, 268) _rotation 0 variable id tx_pfs_taps _enabled True value [-6.3717e-06,-7.2608e-06,-1.0952e-05,-1.543e-05,-2.0595e-05,-2.6243e-05,-3.2061e-05,-3.7629e-05,-4.2397e-05,-4.5735e-05,-4.692e-05,-4.5194e-05,-3.9798e-05,-3.0033e-05,-1.5328e-05,4.699e-06,3.016e-05,6.0834e-05,9.6104e-05,0.00013491,0.00017572,0.00021655,0.00025495,0.00028812,0.00031298,0.00032628,0.00032482,0.00030564,0.00026619,0.0002046,0.00011989,1.2225e-05,-0.00011697,-0.00026482,-0.00042692,-0.00059735,-0.00076875,-0.00093247,-0.0010789,-0.0011976,-0.0012781,-0.0013103,-0.0012848,-0.0011939,-0.0010319,-0.00079582,-0.0004861,-0.00010676,0.00033419,0.00082457,0.0013481,0.0018847,0.002411,0.0029007,0.0033262,0.0036588,0.0038709,0.0039364,0.0038332,0.0035436,0.0030565,0.0023682,0.0014837,0.0004172,-0.00080714,-0.0021553,-0.0035838,-0.0050402,-0.0064646,-0.0077908,-0.0089487,-0.0098667,-0.010473,-0.010701,-0.010489,-0.0097848,-0.0085466,-0.0067476,-0.0043762,-0.0014378,0.0020442,0.0060285,0.010456,0.01525,0.02032,0.025563,0.030865,0.036105,0.04116,0.045909,0.050232,0.054021,0.057179,0.059623,0.061289,0.062133,0.062133,0.061289,0.059623,0.057179,0.054021,0.050232,0.045909,0.04116,0.036105,0.030865,0.025563,0.02032,0.01525,0.010456,0.0060285,0.0020442,-0.0014378,-0.0043762,-0.0067476,-0.0085466,-0.0097848,-0.010489,-0.010701,-0.010473,-0.0098667,-0.0089487,-0.0077908,-0.0064646,-0.0050402,-0.0035838,-0.0021553,-0.00080714,0.0004172,0.0014837,0.0023682,0.0030565,0.0035436,0.0038332,0.0039364,0.0038709,0.0036588,0.0033262,0.0029007,0.002411,0.0018847,0.0013481,0.00082457,0.00033419,-0.00010676,-0.0004861,-0.00079582,-0.0010319,-0.0011939,-0.0012848,-0.0013103,-0.0012781,-0.0011976,-0.0010789,-0.00093247,-0.00076875,-0.00059735,-0.00042692,-0.00026482,-0.00011697,1.2225e-05,0.00011989,0.0002046,0.00026619,0.00030564,0.00032482,0.00032628,0.00031298,0.00028812,0.00025495,0.00021655,0.00017572,0.00013491,9.6104e-05,6.0834e-05,3.016e-05,4.699e-06,-1.5328e-05,-3.0033e-05,-3.9798e-05,-4.5194e-05,-4.692e-05,-4.5735e-05,-4.2397e-05,-3.7629e-05,-3.2061e-05,-2.6243e-05,-2.0595e-05,-1.543e-05,-1.0952e-05,-7.2608e-06,-6.3717e-06] alias _coordinate (1912, 2484) _rotation 0 variable_qtgui_check_box id rx_ch1_enable _enabled True label 1 type int value False true True false False gui_hint tabs@0: 0, 1, 1, 1 alias _coordinate (144, 157) _rotation 0 variable_qtgui_check_box id rx_ch2_enable _enabled True label 2 type int value False true True false False gui_hint tabs@0: 0, 2, 1, 1 alias _coordinate (272, 157) _rotation 0 variable_qtgui_check_box id rx_ch3_enable _enabled True label 3 type int value False true True false False gui_hint tabs@0: 0, 3, 1, 1 alias _coordinate (400, 157) _rotation 0 variable_qtgui_check_box id rx_ch4_enable _enabled True label 4 type int value False true True false False gui_hint tabs@0: 0, 4, 1, 1 alias _coordinate (528, 157) _rotation 0 variable_qtgui_check_box id rx_ch5_enable _enabled True label 5 type int value False true True false False gui_hint tabs@0: 0, 5, 1, 1 alias _coordinate (656, 157) _rotation 0 variable_qtgui_check_box id rx_ch6_enable _enabled True label 6 type int value False true True false False gui_hint tabs@0: 0, 6, 1, 1 alias _coordinate (784, 157) _rotation 0 variable_qtgui_check_box id rx_ch7_enable _enabled True label 7 type bool value False true True false False gui_hint tabs@0: 0, 7, 1, 1 alias _coordinate (912, 157) _rotation 0 variable_qtgui_check_box id rx_ch8_enable _enabled True label 8 type int value True true True false False gui_hint tabs@0: 0, 8, 1, 1 alias _coordinate (1040, 157) _rotation 0 variable_qtgui_check_box id rx_ch9_enable _enabled True label 9 type int value False true True false False gui_hint tabs@0: 0, 9, 1, 1 alias _coordinate (1168, 157) _rotation 0 variable_qtgui_check_box id rx_ch10_enable _enabled True label 10 type int value False true True false False gui_hint tabs@0: 0, 10, 1, 1 alias _coordinate (1296, 157) _rotation 0 variable_qtgui_check_box id rx_ch11_enable _enabled True label 11 type int value False true True false False gui_hint tabs@0: 0, 11, 1, 1 alias _coordinate (1424, 157) _rotation 0 variable_qtgui_check_box id rx_ch12_enable _enabled True label 12 type int value False true True false False gui_hint tabs@0: 0, 12, 1, 1 alias _coordinate (1552, 157) _rotation 0 variable_qtgui_check_box id rx_ch13_enable _enabled True label 13 type int value False true True false False gui_hint tabs@0: 0, 13, 1, 1 alias _coordinate (1680, 157) _rotation 0 variable_qtgui_check_box id rx_ch14_enable _enabled True label 14 type int value False true True false False gui_hint tabs@0: 0, 14, 1, 1 alias _coordinate (1808, 157) _rotation 0 variable_qtgui_check_box id tx_ch9_enable _enabled True label 9 type int value True true True false False gui_hint tabs@1: 0, 9, 1, 1 alias _coordinate (1160, 2293) _rotation 0 variable_qtgui_check_box id tx_ch10_enable _enabled True label 10 type int value False true True false False gui_hint tabs@1: 0, 10, 1, 1 alias _coordinate (1288, 2293) _rotation 0 variable_qtgui_check_box id tx_ch11_enable _enabled True label 11 type int value False true True false False gui_hint tabs@1: 0, 11, 1, 1 alias _coordinate (1416, 2293) _rotation 0 variable_qtgui_check_box id tx_ch12_enable _enabled True label 12 type int value False true True false False gui_hint tabs@1: 0, 12, 1, 1 alias _coordinate (1544, 2293) _rotation 0 variable_qtgui_check_box id tx_ch13_enable _enabled True label 13 type int value False true True false False gui_hint tabs@1: 0, 13, 1, 1 alias _coordinate (1672, 2293) _rotation 0 blocks_mute_xx id tx_ch14_mute _enabled True type complex mute not tx_ch14_enable alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1712, 3264) _rotation 0 blocks_mute_xx id tx_ch13_mute _enabled True type complex mute not tx_ch13_enable alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1712, 3200) _rotation 0 blocks_mute_xx id tx_ch12_mute _enabled True type complex mute not tx_ch12_enable alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1712, 3136) _rotation 0 blocks_mute_xx id tx_ch10_mute _enabled True type complex mute not tx_ch10_enable alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1712, 3008) _rotation 0 blocks_mute_xx id tx_ch11_mute _enabled True type complex mute not tx_ch11_enable alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1712, 3072) _rotation 0 blocks_mute_xx id tx_ch9_mute _enabled True type complex mute not tx_ch9_enable alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1712, 2944) _rotation 0 blocks_mute_xx id tx_ch8_mute _enabled True type complex mute not tx_ch8_enable alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1712, 2880) _rotation 0 variable_qtgui_label id rx_ch_label _enabled True label Channel type string value formatter None gui_hint tabs@0: 0, 0, 1, 1 alias _coordinate (32, 172) _rotation 0 blks2_valve id tx_valve _enabled True type float open not (tx_ptt or tx_cont) vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (264, 2771) _rotation 0 audio_source id audio_source_0 _enabled True samp_rate tx_audio_sample_rate device_name pulse ok_to_block True num_outputs 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (48, 2764) _rotation 0 blks2_selector id tx_audio_src_sel _enabled True type float num_inputs 2 num_outputs 1 input_index 1 if ctcss_enable else 0 output_index 0 vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1160, 2776) _rotation 0 blocks_multiply_const_vxx id tx_audio_gain_mult _enabled True type float const tx_audio_gain vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (672, 2771) _rotation 0 blocks_mute_xx id tx_ch7_mute _enabled True type complex mute not tx_ch7_enable alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1712, 2816) _rotation 0 blocks_mute_xx id tx_ch6_mute _enabled True type complex mute not tx_ch6_enable alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1712, 2752) _rotation 0 blocks_mute_xx id tx_ch5_mute _enabled True type complex mute not tx_ch5_enable alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1712, 2688) _rotation 0 blocks_mute_xx id tx_ch4_mute _enabled True type complex mute not tx_ch4_enable alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1712, 2624) _rotation 0 blocks_mute_xx id tx_ch3_mute _enabled True type complex mute not tx_ch3_enable alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1712, 2560) _rotation 0 blocks_add_xx id tx_ctcss_add _enabled True type float num_inputs 2 vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1032, 2824) _rotation 0 blocks_multiply_const_vxx id tx_audio_gain_mult2 _enabled True type float const 0.625 vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (856, 2819) _rotation 0 variable_qtgui_check_box id tx_ch14_enable _enabled True label 14 type int value False true True false False gui_hint tabs@1: 0, 14, 1, 1 alias _coordinate (1800, 2293) _rotation 0 variable_qtgui_label id tx_ch_label _enabled True label Channel type string value formatter None gui_hint tabs@1: 0, 0, 1, 1 alias _coordinate (24, 2300) _rotation 0 variable_qtgui_check_box id tx_ch1_enable _enabled True label 1 type int value False true True false False gui_hint tabs@1: 0, 1, 1, 1 alias _coordinate (136, 2293) _rotation 0 variable_qtgui_check_box id tx_ch2_enable _enabled True label 2 type int value False true True false False gui_hint tabs@1: 0, 2, 1, 1 alias _coordinate (264, 2293) _rotation 0 variable_qtgui_check_box id tx_ch3_enable _enabled True label 3 type int value False true True false False gui_hint tabs@1: 0, 3, 1, 1 alias _coordinate (392, 2293) _rotation 0 variable_qtgui_check_box id tx_ch4_enable _enabled True label 4 type int value False true True false False gui_hint tabs@1: 0, 4, 1, 1 alias _coordinate (520, 2293) _rotation 0 variable_qtgui_check_box id tx_ch5_enable _enabled True label 5 type int value False true True false False gui_hint tabs@1: 0, 5, 1, 1 alias _coordinate (648, 2293) _rotation 0 variable_qtgui_check_box id tx_ch8_enable _enabled True label 8 type int value False true True false False gui_hint tabs@1: 0, 8, 1, 1 alias _coordinate (1032, 2293) _rotation 0 variable_qtgui_check_box id tx_ch7_enable _enabled True label 7 type bool value False true True false False gui_hint tabs@1: 0, 7, 1, 1 alias _coordinate (904, 2293) _rotation 0 blocks_mute_xx id tx_ch2_mute _enabled True type complex mute not tx_ch2_enable alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1712, 2496) _rotation 0 blocks_mute_xx id tx_ch1_mute _enabled True type complex mute not tx_ch1_enable alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1712, 2432) _rotation 0 variable_qtgui_check_box id tx_cont _enabled True label Continuous TX type bool value False true True false False gui_hint 0, 2 alias _coordinate (144, 2173) _rotation 0 variable_qtgui_check_box id tx_ch6_enable _enabled True label 6 type int value False true True false False gui_hint tabs@1: 0, 6, 1, 1 alias _coordinate (776, 2293) _rotation 0 variable_qtgui_range id tx_audio_gain _enabled True label Audio Gain value 1 start 0 stop 5 step 0.0125 widget counter_slider orient Qt.Horizontal min_len 200 gui_hint tabs@1: 1, 0, 1, 5 alias _coordinate (336, 2166) _rotation 0 variable_qtgui_range id tx_vga2_gain _enabled True label VGA2 Gain value 10 start 0 stop 20 step 1 widget counter_slider orient Qt.Horizontal min_len 200 gui_hint tabs@1: 1, 10, 1, 5 alias _coordinate (568, 2166) _rotation 0 variable_qtgui_range id tx_vga1_gain _enabled True label VGA1 Gain value -8 start -35 stop -4 step 1 widget counter_slider orient Qt.Horizontal min_len 200 gui_hint tabs@1: 1, 5, 1, 5 alias _coordinate (448, 2166) _rotation 0 variable_qtgui_push_button id tx_ptt _enabled True label Push to Talk type bool value False pressed True released False gui_hint 0, 3 alias _coordinate (16, 2173) _rotation 0 pfb_synthesizer_ccf id tx_ch8_14_pfs _enabled True numchans 16 connections 7 taps tx_pfs_taps twox False samp_delay 0 ch_map [13, 14, 15, 0, 1, 2, 3] bus_conns [[0,],] alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1920, 2840) _rotation 0 qtgui_waterfall_sink_x id tx_ch1_7_waterfall _enabled True type complex name "Channels 1-7" fftsize 1024 freqhalf True wintype firdes.WIN_BLACKMAN_hARRIS fc tx_rf_freq + tx_ch4_offset bw tx_pfs_output_rate int_min -140 int_max 10 grid False nconnections 1 update_time 0.10 gui_hint tabs@1:3,0,4,8 showports True label1 color1 0 alpha1 1.0 label2 color2 0 alpha2 1.0 label3 color3 0 alpha3 1.0 label4 color4 0 alpha4 1.0 label5 color5 0 alpha5 1.0 label6 color6 0 alpha6 1.0 label7 color7 0 alpha7 1.0 label8 color8 0 alpha8 1.0 label9 color9 0 alpha9 1.0 label10 color10 0 alpha10 1.0 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (2312, 2589) _rotation 0 analog_sig_source_x id analog_sig_source_x_0 _enabled True type complex samp_rate tx_rf_sample_rate waveform analog.GR_COS_WAVE freq tx_ch4_offset amp 0.5 offset 0 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (2552, 2509) _rotation 0 interp_fir_filter_xxx id tx_ch8_14_fir1 _enabled True type ccc interp 5 taps tx_interp_fir1_taps samp_delay 0 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (2312, 2924) _rotation 0 analog_sig_source_x id analog_sig_source_x_0_0 _enabled True type complex samp_rate tx_rf_sample_rate waveform analog.GR_COS_WAVE freq tx_ch11_offset amp 0.5 offset 0 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (2552, 2813) _rotation 0 interp_fir_filter_xxx id tx_ch8_14_fir2 _enabled True type ccc interp 4 taps tx_interp_fir2_taps samp_delay 0 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (2528, 2924) _rotation 0 blocks_add_xx id blocks_add_xx_1 _enabled True type complex num_inputs 2 vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (2920, 2768) _rotation 0 blocks_multiply_xx id blocks_multiply_xx_0 _enabled True type complex num_inputs 2 vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (2776, 2680) _rotation 0 blocks_multiply_xx id blocks_multiply_xx_0_0 _enabled True type complex num_inputs 2 vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (2776, 2880) _rotation 0 qtgui_waterfall_sink_x id tx_ch8_14_waterfall _enabled True type complex name "Channels 8-14" fftsize 1024 freqhalf True wintype firdes.WIN_BLACKMAN_hARRIS fc tx_rf_freq + tx_ch11_offset bw tx_pfs_output_rate int_min -140 int_max 10 grid False nconnections 1 update_time 0.10 gui_hint tabs@1:3,9,4,8 showports True label1 color1 0 alpha1 1.0 label2 color2 0 alpha2 1.0 label3 color3 0 alpha3 1.0 label4 color4 0 alpha4 1.0 label5 color5 0 alpha5 1.0 label6 color6 0 alpha6 1.0 label7 color7 0 alpha7 1.0 label8 color8 0 alpha8 1.0 label9 color9 0 alpha9 1.0 label10 color10 0 alpha10 1.0 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (2312, 2821) _rotation 0 blocks_multiply_const_vxx id tx_post_ps_gain_ch1_7 _enabled True type complex const 1 if tx_num_enabled_ch1_7 == 0 else 16 * 0.95 / tx_num_enabled_ch1_7 vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (2128, 2699) _rotation 0 blocks_multiply_const_vxx id tx_post_ps_gain_ch8_14 _enabled True type complex const 1 if tx_num_enabled_ch8_14 == 0 else 16 * 0.95 / tx_num_enabled_ch8_14 vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (2136, 2931) _rotation 0 variable_qtgui_check_box id rx_enable _enabled True label Enable RX type bool value True true True false False gui_hint 0, 1 alias _coordinate (24, 269) _rotation 0 variable_qtgui_chooser id rx_lna_gain _enabled True label LNA Gain type int num_opts 3 value 6 options [0, 1, 2] labels [] option0 0 label0 0 dB option1 3 label1 3 dB option2 6 label2 6 dB option3 3 label3 option4 4 label4 widget combo_box orient Qt.QVBoxLayout gui_hint tabs@0: 1, 0, 1, 1 alias _coordinate (152, 272) _rotation 0 variable_qtgui_range id rx_squelch _enabled True label Power Squelch (dB) value -45 start -100 stop 0 step 1 widget counter_slider orient Qt.Horizontal min_len 200 gui_hint tabs@0: 1, 5, 1, 4 alias _coordinate (400, 270) _rotation 0 osmosdr_sink id osmosdr_sink_0 _enabled True type fc32 args bladerf=0,buffers=128,buflen=8192,transfers=32 sync num_mboards 1 clock_source0 time_source0 clock_source1 time_source1 clock_source2 time_source2 clock_source3 time_source3 clock_source4 time_source4 clock_source5 time_source5 clock_source6 time_source6 clock_source7 time_source7 nchan 1 sample_rate tx_rf_sample_rate freq0 tx_rf_freq corr0 0 gain0 tx_vga2_gain if_gain0 0 bb_gain0 tx_vga1_gain ant0 bw0 6e6 freq1 100e6 corr1 0 gain1 10 if_gain1 20 bb_gain1 20 ant1 bw1 0 freq2 100e6 corr2 0 gain2 10 if_gain2 20 bb_gain2 20 ant2 bw2 0 freq3 100e6 corr3 0 gain3 10 if_gain3 20 bb_gain3 20 ant3 bw3 0 freq4 100e6 corr4 0 gain4 10 if_gain4 20 bb_gain4 20 ant4 bw4 0 freq5 100e6 corr5 0 gain5 10 if_gain5 20 bb_gain5 20 ant5 bw5 0 freq6 100e6 corr6 0 gain6 10 if_gain6 20 bb_gain6 20 ant6 bw6 0 freq7 100e6 corr7 0 gain7 10 if_gain7 20 bb_gain7 20 ant7 bw7 0 freq8 100e6 corr8 0 gain8 10 if_gain8 20 bb_gain8 20 ant8 bw8 0 freq9 100e6 corr9 0 gain9 10 if_gain9 20 bb_gain9 20 ant9 bw9 0 freq10 100e6 corr10 0 gain10 10 if_gain10 20 bb_gain10 20 ant10 bw10 0 freq11 100e6 corr11 0 gain11 10 if_gain11 20 bb_gain11 20 ant11 bw11 0 freq12 100e6 corr12 0 gain12 10 if_gain12 20 bb_gain12 20 ant12 bw12 0 freq13 100e6 corr13 0 gain13 10 if_gain13 20 bb_gain13 20 ant13 bw13 0 freq14 100e6 corr14 0 gain14 10 if_gain14 20 bb_gain14 20 ant14 bw14 0 freq15 100e6 corr15 0 gain15 10 if_gain15 20 bb_gain15 20 ant15 bw15 0 freq16 100e6 corr16 0 gain16 10 if_gain16 20 bb_gain16 20 ant16 bw16 0 freq17 100e6 corr17 0 gain17 10 if_gain17 20 bb_gain17 20 ant17 bw17 0 freq18 100e6 corr18 0 gain18 10 if_gain18 20 bb_gain18 20 ant18 bw18 0 freq19 100e6 corr19 0 gain19 10 if_gain19 20 bb_gain19 20 ant19 bw19 0 freq20 100e6 corr20 0 gain20 10 if_gain20 20 bb_gain20 20 ant20 bw20 0 freq21 100e6 corr21 0 gain21 10 if_gain21 20 bb_gain21 20 ant21 bw21 0 freq22 100e6 corr22 0 gain22 10 if_gain22 20 bb_gain22 20 ant22 bw22 0 freq23 100e6 corr23 0 gain23 10 if_gain23 20 bb_gain23 20 ant23 bw23 0 freq24 100e6 corr24 0 gain24 10 if_gain24 20 bb_gain24 20 ant24 bw24 0 freq25 100e6 corr25 0 gain25 10 if_gain25 20 bb_gain25 20 ant25 bw25 0 freq26 100e6 corr26 0 gain26 10 if_gain26 20 bb_gain26 20 ant26 bw26 0 freq27 100e6 corr27 0 gain27 10 if_gain27 20 bb_gain27 20 ant27 bw27 0 freq28 100e6 corr28 0 gain28 10 if_gain28 20 bb_gain28 20 ant28 bw28 0 freq29 100e6 corr29 0 gain29 10 if_gain29 20 bb_gain29 20 ant29 bw29 0 freq30 100e6 corr30 0 gain30 10 if_gain30 20 bb_gain30 20 ant30 bw30 0 freq31 100e6 corr31 0 gain31 10 if_gain31 20 bb_gain31 20 ant31 bw31 0 alias affinity _coordinate (3024, 2734) _rotation 0 variable_qtgui_range id rx_vga_gain _enabled True label RX VGA1+VGA2 value 33 start 5 stop 60 step 1 widget counter_slider orient Qt.Horizontal min_len 200 gui_hint tabs@0: 1, 1, 1, 4 alias _coordinate (264, 270) _rotation 0 blks2_valve id rx_enable_valve _enabled True type complex open not rx_enable vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (224, 1315) _rotation 0 qtgui_tab_widget id tabs _enabled True num_tabs 2 label0 RX label1 TX label2 Tab 2 label3 Tab 3 label4 Tab 4 label5 Tab 5 label6 Tab 6 label7 Tab 7 label8 Tab 8 label9 Tab 9 label10 Tab 10 label11 Tab 11 label12 Tab 12 label13 Tab 13 label14 Tab 14 label15 Tab 15 label16 Tab 16 label17 Tab 17 label18 Tab 18 label19 Tab 19 gui_hint 1, 0, 6, 16 alias _coordinate (208, 12) _rotation 0 variable_qtgui_chooser id ctcss_freq _enabled True label CTCSS type real num_opts 0 value 0 options [0, 67.0, 71.9, 74.4, 77.0, 79.7, 82.5, 85.4, 88.5, 91.5, 94.8, 97.4, 100.0, 103.5, 107.2, 110.9, 114.8, 118.8, 123.0, 127.3, 131.8, 136.5, 141.3, 146.2, 151.4, 156.7, 162.2, 167.9, 173.8, 179.9, 186.2, 192.8, 203.5, 210.7, 218.1, 225.7, 233.6, 241.8, 250.3] labels ["None", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38"] option0 0 label0 option1 1 label1 option2 2 label2 option3 3 label3 option4 4 label4 widget combo_box orient Qt.QVBoxLayout gui_hint 0, 0 alias _coordinate (344, 14) _rotation 0 note id ch_8_14_note _enabled True note Channels 8 - 14 alias _coordinate (520, 1627) _rotation 0 osmosdr_source id osmosdr_source_0 _enabled True type fc32 args bladerf=0,buffers=128,buflen=16384,transfers=32 sync num_mboards 1 clock_source0 time_source0 clock_source1 time_source1 clock_source2 time_source2 clock_source3 time_source3 clock_source4 time_source4 clock_source5 time_source5 clock_source6 time_source6 clock_source7 time_source7 nchan 1 sample_rate rx_rf_sample_rate freq0 rf_rx_freq corr0 0 dc_offset_mode0 1 iq_balance_mode0 0 gain_mode0 False gain0 rx_lna_gain if_gain0 0 bb_gain0 rx_vga_gain ant0 bw0 6e6 freq1 100e6 corr1 0 dc_offset_mode1 0 iq_balance_mode1 0 gain_mode1 False gain1 10 if_gain1 20 bb_gain1 20 ant1 bw1 0 freq2 100e6 corr2 0 dc_offset_mode2 0 iq_balance_mode2 0 gain_mode2 False gain2 10 if_gain2 20 bb_gain2 20 ant2 bw2 0 freq3 100e6 corr3 0 dc_offset_mode3 0 iq_balance_mode3 0 gain_mode3 False gain3 10 if_gain3 20 bb_gain3 20 ant3 bw3 0 freq4 100e6 corr4 0 dc_offset_mode4 0 iq_balance_mode4 0 gain_mode4 False gain4 10 if_gain4 20 bb_gain4 20 ant4 bw4 0 freq5 100e6 corr5 0 dc_offset_mode5 0 iq_balance_mode5 0 gain_mode5 False gain5 10 if_gain5 20 bb_gain5 20 ant5 bw5 0 freq6 100e6 corr6 0 dc_offset_mode6 0 iq_balance_mode6 0 gain_mode6 False gain6 10 if_gain6 20 bb_gain6 20 ant6 bw6 0 freq7 100e6 corr7 0 dc_offset_mode7 0 iq_balance_mode7 0 gain_mode7 False gain7 10 if_gain7 20 bb_gain7 20 ant7 bw7 0 freq8 100e6 corr8 0 dc_offset_mode8 0 iq_balance_mode8 0 gain_mode8 False gain8 10 if_gain8 20 bb_gain8 20 ant8 bw8 0 freq9 100e6 corr9 0 dc_offset_mode9 0 iq_balance_mode9 0 gain_mode9 False gain9 10 if_gain9 20 bb_gain9 20 ant9 bw9 0 freq10 100e6 corr10 0 dc_offset_mode10 0 iq_balance_mode10 0 gain_mode10 False gain10 10 if_gain10 20 bb_gain10 20 ant10 bw10 0 freq11 100e6 corr11 0 dc_offset_mode11 0 iq_balance_mode11 0 gain_mode11 False gain11 10 if_gain11 20 bb_gain11 20 ant11 bw11 0 freq12 100e6 corr12 0 dc_offset_mode12 0 iq_balance_mode12 0 gain_mode12 False gain12 10 if_gain12 20 bb_gain12 20 ant12 bw12 0 freq13 100e6 corr13 0 dc_offset_mode13 0 iq_balance_mode13 0 gain_mode13 False gain13 10 if_gain13 20 bb_gain13 20 ant13 bw13 0 freq14 100e6 corr14 0 dc_offset_mode14 0 iq_balance_mode14 0 gain_mode14 False gain14 10 if_gain14 20 bb_gain14 20 ant14 bw14 0 freq15 100e6 corr15 0 dc_offset_mode15 0 iq_balance_mode15 0 gain_mode15 False gain15 10 if_gain15 20 bb_gain15 20 ant15 bw15 0 freq16 100e6 corr16 0 dc_offset_mode16 0 iq_balance_mode16 0 gain_mode16 False gain16 10 if_gain16 20 bb_gain16 20 ant16 bw16 0 freq17 100e6 corr17 0 dc_offset_mode17 0 iq_balance_mode17 0 gain_mode17 False gain17 10 if_gain17 20 bb_gain17 20 ant17 bw17 0 freq18 100e6 corr18 0 dc_offset_mode18 0 iq_balance_mode18 0 gain_mode18 False gain18 10 if_gain18 20 bb_gain18 20 ant18 bw18 0 freq19 100e6 corr19 0 dc_offset_mode19 0 iq_balance_mode19 0 gain_mode19 False gain19 10 if_gain19 20 bb_gain19 20 ant19 bw19 0 freq20 100e6 corr20 0 dc_offset_mode20 0 iq_balance_mode20 0 gain_mode20 False gain20 10 if_gain20 20 bb_gain20 20 ant20 bw20 0 freq21 100e6 corr21 0 dc_offset_mode21 0 iq_balance_mode21 0 gain_mode21 False gain21 10 if_gain21 20 bb_gain21 20 ant21 bw21 0 freq22 100e6 corr22 0 dc_offset_mode22 0 iq_balance_mode22 0 gain_mode22 False gain22 10 if_gain22 20 bb_gain22 20 ant22 bw22 0 freq23 100e6 corr23 0 dc_offset_mode23 0 iq_balance_mode23 0 gain_mode23 False gain23 10 if_gain23 20 bb_gain23 20 ant23 bw23 0 freq24 100e6 corr24 0 dc_offset_mode24 0 iq_balance_mode24 0 gain_mode24 False gain24 10 if_gain24 20 bb_gain24 20 ant24 bw24 0 freq25 100e6 corr25 0 dc_offset_mode25 0 iq_balance_mode25 0 gain_mode25 False gain25 10 if_gain25 20 bb_gain25 20 ant25 bw25 0 freq26 100e6 corr26 0 dc_offset_mode26 0 iq_balance_mode26 0 gain_mode26 False gain26 10 if_gain26 20 bb_gain26 20 ant26 bw26 0 freq27 100e6 corr27 0 dc_offset_mode27 0 iq_balance_mode27 0 gain_mode27 False gain27 10 if_gain27 20 bb_gain27 20 ant27 bw27 0 freq28 100e6 corr28 0 dc_offset_mode28 0 iq_balance_mode28 0 gain_mode28 False gain28 10 if_gain28 20 bb_gain28 20 ant28 bw28 0 freq29 100e6 corr29 0 dc_offset_mode29 0 iq_balance_mode29 0 gain_mode29 False gain29 10 if_gain29 20 bb_gain29 20 ant29 bw29 0 freq30 100e6 corr30 0 dc_offset_mode30 0 iq_balance_mode30 0 gain_mode30 False gain30 10 if_gain30 20 bb_gain30 20 ant30 bw30 0 freq31 100e6 corr31 0 dc_offset_mode31 0 iq_balance_mode31 0 gain_mode31 False gain31 10 if_gain31 20 bb_gain31 20 ant31 bw31 0 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (0, 1240) _rotation 0 freq_xlating_fir_filter_xxx id freq_xlating_fir_filter_xxx_0_0 _enabled True type ccc decim 4 taps rx_xlating_fir_taps center_freq 2.3e6 samp_rate rx_rf_sample_rate alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (360, 1485) _rotation 0 fir_filter_xxx id fir_filter_xxx_0_0 _enabled True type ccc decim 5 taps rx_dec_fir_taps samp_delay 0 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (576, 1500) _rotation 0 analog_nbfm_rx id rx_ch1_nbfm _enabled True audio_rate rx_audio_sample_rate quad_rate rx_audio_sample_rate tau nbfm_tau max_dev 2.5e3 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1512, 373) _rotation 0 analog_pwr_squelch_xx id rx_ch1_analog_pwr_squelch _enabled True type complex threshold rx_squelch alpha rx_power_squelch_alpha ramp 0 gate True alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1328, 373) _rotation 0 blks2_valve id rx_ch1_valve _enabled True type complex open not rx_ch1_enable vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1192, 373) _rotation 0 1 analog_nbfm_rx id rx_ch2_nbfm _enabled True audio_rate rx_audio_sample_rate quad_rate rx_audio_sample_rate tau nbfm_tau max_dev 2.5e3 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1512, 477) _rotation 0 analog_pwr_squelch_xx id rx_ch2_analog_pwr_squelch _enabled True type complex threshold rx_squelch alpha rx_power_squelch_alpha ramp 0 gate True alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1328, 477) _rotation 0 blks2_valve id rx_ch2_valve _enabled True type complex open not rx_ch2_enable vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1192, 477) _rotation 0 1 analog_ctcss_squelch_ff id rx_ch2_analog_ctcss_squelch_ff _enabled True rate rx_audio_sample_rate freq ctcss_freq level rx_ctcss_squelch len rx_ctcss_len ramp 0 gate False alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1720, 422) _rotation 0 analog_ctcss_squelch_ff id rx_ch3_analog_ctcss_squelch_ff _enabled True rate rx_audio_sample_rate freq ctcss_freq level rx_ctcss_squelch len rx_ctcss_len ramp 0 gate False alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1720, 542) _rotation 0 analog_ctcss_squelch_ff id rx_ch4_analog_ctcss_squelch_ff _enabled True rate rx_audio_sample_rate freq ctcss_freq level rx_ctcss_squelch len rx_ctcss_len ramp 0 gate False alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1720, 662) _rotation 0 analog_nbfm_rx id rx_ch4_nbfm _enabled True audio_rate rx_audio_sample_rate quad_rate rx_audio_sample_rate tau nbfm_tau max_dev 2.5e3 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1512, 709) _rotation 0 analog_pwr_squelch_xx id rx_ch4_analog_pwr_squelch _enabled True type complex threshold rx_squelch alpha rx_power_squelch_alpha ramp 0 gate True alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1328, 709) _rotation 0 analog_nbfm_rx id rx_ch3_nbfm _enabled True audio_rate rx_audio_sample_rate quad_rate rx_audio_sample_rate tau nbfm_tau max_dev 2.5e3 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1512, 589) _rotation 0 blks2_valve id rx_ch3_valve _enabled True type complex open not rx_ch3_enable vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1192, 589) _rotation 0 1 blks2_valve id rx_ch4_valve _enabled True type complex open not rx_ch4_enable vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1192, 709) _rotation 0 1 analog_nbfm_rx id rx_ch5_nbfm _enabled True audio_rate rx_audio_sample_rate quad_rate rx_audio_sample_rate tau nbfm_tau max_dev 2.5e3 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1512, 821) _rotation 0 analog_pwr_squelch_xx id rx_ch5_analog_pwr_squelch _enabled True type complex threshold rx_squelch alpha rx_power_squelch_alpha ramp 0 gate True alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1328, 821) _rotation 0 note id ch7_note _enabled True note Channel 7 alias _coordinate (2384, 1139) _rotation 0 analog_ctcss_squelch_ff id rx_ch5_analog_ctcss_squelch_ff _enabled True rate rx_audio_sample_rate freq ctcss_freq level rx_ctcss_squelch len rx_ctcss_len ramp 0 gate False alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1720, 782) _rotation 0 analog_ctcss_squelch_ff id rx_ch6_analog_ctcss_squelch_ff _enabled True rate rx_audio_sample_rate freq ctcss_freq level rx_ctcss_squelch len rx_ctcss_len ramp 0 gate False alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1720, 902) _rotation 0 analog_ctcss_squelch_ff id rx_ch7_analog_ctcss_squelch_ff _enabled True rate rx_audio_sample_rate freq ctcss_freq level rx_ctcss_squelch len rx_ctcss_len ramp 0 gate False alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1720, 1022) _rotation 0 blks2_valve id rx_ch5_valve _enabled True type complex open not rx_ch5_enable vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1192, 821) _rotation 0 1 analog_nbfm_rx id rx_ch6_nbfm _enabled True audio_rate rx_audio_sample_rate quad_rate rx_audio_sample_rate tau nbfm_tau max_dev 2.5e3 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1512, 941) _rotation 0 analog_pwr_squelch_xx id rx_ch6_analog_pwr_squelch _enabled True type complex threshold rx_squelch alpha rx_power_squelch_alpha ramp 0 gate True alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1328, 941) _rotation 0 blks2_valve id rx_ch6_valve _enabled True type complex open not rx_ch6_enable vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1192, 941) _rotation 0 1 blks2_valve id rx_ch7_valve _enabled True type complex open not rx_ch7_enable vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1192, 1061) _rotation 0 1 analog_pwr_squelch_xx id rx_ch7_analog_pwr_squelch _enabled True type complex threshold rx_squelch alpha rx_power_squelch_alpha ramp 0 gate True alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1328, 1061) _rotation 0 analog_nbfm_rx id rx_ch7_nbfm _enabled True audio_rate rx_audio_sample_rate quad_rate rx_audio_sample_rate tau nbfm_tau max_dev 2.5e3 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1512, 1061) _rotation 0 note id ch_1_7_note _enabled True note Channels 1 - 7 alias _coordinate (536, 963) _rotation 0 blocks_complex_to_mag_squared id blocks_complex_to_mag_squared_0 _enabled True vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (360, 1320) _rotation 0 single_pole_iir_filter_xx id single_pole_iir_filter_xx_0 _enabled True type float alpha 0.05 vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (528, 1315) _rotation 0 blocks_keep_one_in_n id blocks_keep_one_in_n_0 _enabled True type float n int(rx_rf_sample_rate / 30) vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (704, 1315) _rotation 0 blocks_nlog10_ff id blocks_nlog10_ff_0 _enabled True n 10 k 0 vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (832, 1308) _rotation 0 qtgui_number_sink id qtgui_number_sink_0 _enabled True name type float autoscale False avg 0 graph_type qtgui.NUM_GRAPH_VERT nconnections 1 min -50 max 3 update_time 1 / 30.0 gui_hint tabs@0:3,8,2,1 label1 " Input Power " unit1 dBFS color1 ("black", "black") factor1 1 label2 unit2 color2 ("black", "black") factor2 1 label3 unit3 color3 ("black", "black") factor3 1 label4 unit4 color4 ("black", "black") factor4 1 label5 unit5 color5 ("black", "black") factor5 1 label6 unit6 color6 ("black", "black") factor6 1 label7 unit7 color7 ("black", "black") factor7 1 label8 unit8 color8 ("black", "black") factor8 1 label9 unit9 color9 ("black", "black") factor9 1 label10 unit10 color10 ("black", "black") factor10 1 alias affinity _coordinate (928, 1300) _rotation 0 analog_pwr_squelch_xx id rx_ch8_analog_pwr_squelch _enabled True type complex threshold rx_squelch alpha rx_power_squelch_alpha ramp 0 gate True alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1328, 1333) _rotation 0 analog_pwr_squelch_xx id rx_ch9_analog_pwr_squelch _enabled True type complex threshold rx_squelch alpha rx_power_squelch_alpha ramp 0 gate True alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1328, 1445) _rotation 0 blks2_valve id rx_ch9_valve _enabled True type complex open not rx_ch9_enable vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1192, 1445) _rotation 0 1 analog_pwr_squelch_xx id rx_ch10_analog_pwr_squelch _enabled True type complex threshold rx_squelch alpha rx_power_squelch_alpha ramp 0 gate True alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1328, 1565) _rotation 0 blks2_valve id rx_ch10_valve _enabled True type complex open not rx_ch10_enable vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1192, 1565) _rotation 0 1 blks2_valve id rx_ch11_valve _enabled True type complex open not rx_ch11_enable vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1192, 1701) _rotation 0 1 analog_pwr_squelch_xx id rx_ch11_analog_pwr_squelch _enabled True type complex threshold rx_squelch alpha rx_power_squelch_alpha ramp 0 gate True alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1328, 1701) _rotation 0 blocks_null_sink id blocks_null_sink_0_1_0 _enabled True type complex vlen 1 num_inputs 9 bus_conns [[0,1,2,3,4,5,6,7,8,],] alias affinity _coordinate (965, 800) _rotation 270 1 blocks_null_sink id blocks_null_sink_0_1_0_0 _enabled True type complex vlen 1 num_inputs 9 bus_conns [[0,1,2,3,4,5,6,7,8,],] alias affinity _coordinate (973, 2144) _rotation 270 1 analog_pwr_squelch_xx id rx_ch12_analog_pwr_squelch _enabled True type complex threshold rx_squelch alpha rx_power_squelch_alpha ramp 0 gate True alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1328, 1813) _rotation 0 blks2_valve id rx_ch12_valve _enabled True type complex open not rx_ch12_enable vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1192, 1813) _rotation 0 1 blks2_valve id rx_ch13_valve _enabled True type complex open not rx_ch13_enable vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1192, 1925) _rotation 0 1 analog_pwr_squelch_xx id rx_ch13_analog_pwr_squelch _enabled True type complex threshold rx_squelch alpha rx_power_squelch_alpha ramp 0 gate True alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1328, 1925) _rotation 0 analog_pwr_squelch_xx id rx_ch14_analog_pwr_squelch _enabled True type complex threshold rx_squelch alpha rx_power_squelch_alpha ramp 0 gate True alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1328, 2045) _rotation 0 blks2_valve id rx_ch14_valve _enabled True type complex open not rx_ch14_enable vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1192, 2045) _rotation 0 1 blks2_valve id rx_ch8_valve _enabled True type complex open not rx_ch8_enable vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1192, 1333) _rotation 0 1 analog_nbfm_rx id rx_ch9_nbfm _enabled True audio_rate rx_audio_sample_rate quad_rate rx_audio_sample_rate tau nbfm_tau max_dev 2.5e3 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1512, 1445) _rotation 0 analog_nbfm_rx id rx_ch8_nbfm _enabled True audio_rate rx_audio_sample_rate quad_rate rx_audio_sample_rate tau nbfm_tau max_dev 2.5e3 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1512, 1333) _rotation 0 analog_nbfm_rx id rx_ch10_nbfm _enabled True audio_rate rx_audio_sample_rate quad_rate rx_audio_sample_rate tau nbfm_tau max_dev 2.5e3 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1512, 1565) _rotation 0 analog_ctcss_squelch_ff id rx_ch10_analog_ctcss_squelch_ff _enabled True rate rx_audio_sample_rate freq ctcss_freq level rx_ctcss_squelch len rx_ctcss_len ramp 0 gate False alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1720, 1518) _rotation 0 analog_ctcss_squelch_ff id rx_ch9_analog_ctcss_squelch_ff _enabled True rate rx_audio_sample_rate freq ctcss_freq level rx_ctcss_squelch len rx_ctcss_len ramp 0 gate False alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1720, 1398) _rotation 0 analog_nbfm_rx id rx_ch12_nbfm _enabled True audio_rate rx_audio_sample_rate quad_rate rx_audio_sample_rate tau nbfm_tau max_dev 2.5e3 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1512, 1813) _rotation 0 analog_ctcss_squelch_ff id rx_ch14_analog_ctcss_squelch_ff _enabled True rate rx_audio_sample_rate freq ctcss_freq level rx_ctcss_squelch len rx_ctcss_len ramp 0 gate False alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1720, 1998) _rotation 0 analog_ctcss_squelch_ff id rx_ch13_analog_ctcss_squelch_ff _enabled True rate rx_audio_sample_rate freq ctcss_freq level rx_ctcss_squelch len rx_ctcss_len ramp 0 gate False alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1720, 1878) _rotation 0 analog_ctcss_squelch_ff id rx_ch11_analog_ctcss_squelch_ff _enabled True rate rx_audio_sample_rate freq ctcss_freq level rx_ctcss_squelch len rx_ctcss_len ramp 0 gate False alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1720, 1638) _rotation 0 analog_ctcss_squelch_ff id rx_ch12_analog_ctcss_squelch_ff _enabled True rate rx_audio_sample_rate freq ctcss_freq level rx_ctcss_squelch len rx_ctcss_len ramp 0 gate False alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1720, 1758) _rotation 0 note id ch_8_note _enabled True note Channel 8 alias _coordinate (2392, 1275) _rotation 0 analog_nbfm_rx id rx_ch11_nbfm _enabled True audio_rate rx_audio_sample_rate quad_rate rx_audio_sample_rate tau nbfm_tau max_dev 2.5e3 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1512, 1701) _rotation 0 analog_nbfm_rx id rx_ch13_nbfm _enabled True audio_rate rx_audio_sample_rate quad_rate rx_audio_sample_rate tau nbfm_tau max_dev 2.5e3 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1512, 1925) _rotation 0 analog_nbfm_rx id rx_ch14_nbfm _enabled True audio_rate rx_audio_sample_rate quad_rate rx_audio_sample_rate tau nbfm_tau max_dev 2.5e3 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1512, 2045) _rotation 0 freq_xlating_fir_filter_xxx id freq_xlating_fir_filter_xxx_0 _enabled True type ccc decim 4 taps rx_xlating_fir_taps center_freq rx_ch4_offset samp_rate rx_rf_sample_rate alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (360, 1173) _rotation 0 fir_filter_xxx id fir_filter_xxx_0 _enabled True type ccc decim 5 taps rx_dec_fir_taps samp_delay 0 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (584, 1188) _rotation 0 qtgui_waterfall_sink_x id qtgui_waterfall_sink_x_0 _enabled True type complex name Channels 1-7 fftsize 1024 freqhalf True wintype firdes.WIN_BLACKMAN_hARRIS fc rf_rx_freq + rx_ch4_offset bw rx_rf_sample_rate / 20 int_min -140 int_max 10 grid False nconnections 1 update_time 0.10 gui_hint tabs@0: 3, 0, 2, 8 showports True label1 color1 0 alpha1 1.0 label2 color2 0 alpha2 1.0 label3 color3 0 alpha3 1.0 label4 color4 0 alpha4 1.0 label5 color5 0 alpha5 1.0 label6 color6 0 alpha6 1.0 label7 color7 0 alpha7 1.0 label8 color8 0 alpha8 1.0 label9 color9 0 alpha9 1.0 label10 color10 0 alpha10 1.0 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (800, 1173) _rotation 0 pfb_channelizer_ccf id pfb_channelizer_ch1_ch17 _enabled True nchans 16 taps rx_pc_taps osr 1.0 atten 100 samp_delay 0 ch_map [13, 14, 15, 0, 1, 2, 3] bus_conns [[0], [1], [2], [3], [4], [5], [6], [7, 8, 9, 10, 11, 12, 13, 14, 15]] alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (792, 290) _rotation 0 1 pfb_channelizer_ccf id pfb_channelizer_ch8_ch14 _enabled True nchans 16 taps rx_pc_taps osr 1.0 atten 100 samp_delay 0 ch_map [13, 14, 15, 0, 1, 2, 3] bus_conns [[0], [1], [2], [3], [4], [5], [6], [7, 8, 9, 10, 11, 12, 13, 14, 15]] alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (800, 1586) _rotation 0 1 qtgui_waterfall_sink_x id qtgui_waterfall_sink_x_0_0 _enabled True type complex name Channels 8-14 fftsize 1024 freqhalf True wintype firdes.WIN_BLACKMAN_hARRIS fc rf_rx_freq + rx_ch11_offset bw rx_rf_sample_rate / 20 int_min -140 int_max 10 grid False nconnections 1 update_time 0.10 gui_hint tabs@0: 3, 9, 2, 8 showports True label1 color1 0 alpha1 1.0 label2 color2 0 alpha2 1.0 label3 color3 0 alpha3 1.0 label4 color4 0 alpha4 1.0 label5 color5 0 alpha5 1.0 label6 color6 0 alpha6 1.0 label7 color7 0 alpha7 1.0 label8 color8 0 alpha8 1.0 label9 color9 0 alpha9 1.0 label10 color10 0 alpha10 1.0 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (784, 1485) _rotation 0 analog_pwr_squelch_xx id rx_ch3_analog_pwr_squelch _enabled True type complex threshold rx_squelch alpha rx_power_squelch_alpha ramp 0 gate True alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1328, 589) _rotation 0 analog_ctcss_squelch_ff id rx_ch1_analog_ctcss_squelch_ff _enabled True rate rx_audio_sample_rate freq ctcss_freq level rx_ctcss_squelch len rx_ctcss_len ramp 0 gate False alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1720, 302) _rotation 0 audio_sink id rx_ch1_audio_sink _enabled True samp_rate rx_audio_sample_rate device_name pulse ok_to_block True num_inputs 1 alias affinity _coordinate (2376, 348) _rotation 0 note id ch1_note _enabled True note Channel 1 alias _coordinate (2392, 235) _rotation 0 iir_filter_xxx id rx_ch1_hpf_iir _enabled True type ffd fftaps ctcss_hpf_ff_taps fbtaps ctcss_hpf_fb_taps oldstyle False alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (2144, 348) _rotation 0 blks2_selector id ch1_audio_sel _enabled True type float num_inputs 2 num_outputs 1 input_index 0 if ctcss_enable else 1 output_index 0 vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1984, 344) _rotation 0 audio_sink id rx_ch2_audio_sink _enabled True samp_rate rx_audio_sample_rate device_name pulse ok_to_block True num_inputs 1 alias affinity _coordinate (2376, 468) _rotation 0 audio_sink id rx_ch3_audio_sink _enabled True samp_rate rx_audio_sample_rate device_name pulse ok_to_block True num_inputs 1 alias affinity _coordinate (2376, 588) _rotation 0 iir_filter_xxx id rx_ch3_hpf_iir _enabled True type ffd fftaps ctcss_hpf_ff_taps fbtaps ctcss_hpf_fb_taps oldstyle False alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (2144, 588) _rotation 0 iir_filter_xxx id rx_ch2_hpf_iir _enabled True type ffd fftaps ctcss_hpf_ff_taps fbtaps ctcss_hpf_fb_taps oldstyle False alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (2144, 468) _rotation 0 blks2_selector id ch3_audio_sel _enabled True type float num_inputs 2 num_outputs 1 input_index 0 if ctcss_enable else 1 output_index 0 vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1984, 584) _rotation 0 blks2_selector id ch2_audio_sel _enabled True type float num_inputs 2 num_outputs 1 input_index 0 if ctcss_enable else 1 output_index 0 vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1984, 464) _rotation 0 blks2_selector id ch4_audio_sel _enabled True type float num_inputs 2 num_outputs 1 input_index 0 if ctcss_enable else 1 output_index 0 vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1984, 704) _rotation 0 audio_sink id rx_ch4_audio_sink _enabled True samp_rate rx_audio_sample_rate device_name pulse ok_to_block True num_inputs 1 alias affinity _coordinate (2376, 708) _rotation 0 iir_filter_xxx id rx_ch4_hpf_iir _enabled True type ffd fftaps ctcss_hpf_ff_taps fbtaps ctcss_hpf_fb_taps oldstyle False alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (2144, 708) _rotation 0 blks2_selector id ch5_audio_sel _enabled True type float num_inputs 2 num_outputs 1 input_index 0 if ctcss_enable else 1 output_index 0 vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1984, 832) _rotation 0 audio_sink id rx_ch5_audio_sink _enabled True samp_rate rx_audio_sample_rate device_name pulse ok_to_block True num_inputs 1 alias affinity _coordinate (2376, 836) _rotation 0 iir_filter_xxx id rx_ch5_hpf_iir _enabled True type ffd fftaps ctcss_hpf_ff_taps fbtaps ctcss_hpf_fb_taps oldstyle False alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (2144, 836) _rotation 0 blks2_selector id ch6_audio_sel _enabled True type float num_inputs 2 num_outputs 1 input_index 0 if ctcss_enable else 1 output_index 0 vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1984, 952) _rotation 0 audio_sink id rx_ch6_audio_sink _enabled True samp_rate rx_audio_sample_rate device_name pulse ok_to_block True num_inputs 1 alias affinity _coordinate (2376, 956) _rotation 0 iir_filter_xxx id rx_ch6_hpf_iir _enabled True type ffd fftaps ctcss_hpf_ff_taps fbtaps ctcss_hpf_fb_taps oldstyle False alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (2144, 956) _rotation 0 analog_ctcss_squelch_ff id rx_ch8_analog_ctcss_squelch_ff _enabled True rate rx_audio_sample_rate freq ctcss_freq level rx_ctcss_squelch len rx_ctcss_len ramp 0 gate False alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1720, 1278) _rotation 0 blks2_selector id ch8_audio_sel _enabled True type float num_inputs 2 num_outputs 1 input_index 0 if ctcss_enable else 1 output_index 0 vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1976, 1320) _rotation 0 iir_filter_xxx id rx_ch8_hpf_iir _enabled True type ffd fftaps ctcss_hpf_ff_taps fbtaps ctcss_hpf_fb_taps oldstyle False alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (2144, 1324) _rotation 0 audio_sink id rx_ch8_audio_sink _enabled True samp_rate rx_audio_sample_rate device_name pulse ok_to_block True num_inputs 1 alias affinity _coordinate (2376, 1324) _rotation 0 blks2_selector id ch14_audio_sel _enabled True type float num_inputs 2 num_outputs 1 input_index 0 if ctcss_enable else 1 output_index 0 vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1976, 2040) _rotation 0 blks2_selector id ch9_audio_sel _enabled True type float num_inputs 2 num_outputs 1 input_index 0 if ctcss_enable else 1 output_index 0 vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1976, 1440) _rotation 0 iir_filter_xxx id rx_ch9_hpf_iir _enabled True type ffd fftaps ctcss_hpf_ff_taps fbtaps ctcss_hpf_fb_taps oldstyle False alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (2144, 1444) _rotation 0 blks2_selector id ch10_audio_sel _enabled True type float num_inputs 2 num_outputs 1 input_index 0 if ctcss_enable else 1 output_index 0 vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1976, 1560) _rotation 0 iir_filter_xxx id rx_ch10_hpf_iir _enabled True type ffd fftaps ctcss_hpf_ff_taps fbtaps ctcss_hpf_fb_taps oldstyle False alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (2144, 1564) _rotation 0 audio_sink id rx_ch10_audio_sink _enabled True samp_rate rx_audio_sample_rate device_name pulse ok_to_block True num_inputs 1 alias affinity _coordinate (2376, 1564) _rotation 0 blks2_selector id ch11_audio_sel _enabled True type float num_inputs 2 num_outputs 1 input_index 0 if ctcss_enable else 1 output_index 0 vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1976, 1680) _rotation 0 iir_filter_xxx id rx_ch11_hpf_iir _enabled True type ffd fftaps ctcss_hpf_ff_taps fbtaps ctcss_hpf_fb_taps oldstyle False alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (2144, 1684) _rotation 0 blks2_selector id ch12_audio_sel _enabled True type float num_inputs 2 num_outputs 1 input_index 0 if ctcss_enable else 1 output_index 0 vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1976, 1800) _rotation 0 blks2_selector id ch13_audio_sel _enabled True type float num_inputs 2 num_outputs 1 input_index 0 if ctcss_enable else 1 output_index 0 vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1976, 1920) _rotation 0 iir_filter_xxx id rx_ch13_hpf_iir _enabled True type ffd fftaps ctcss_hpf_ff_taps fbtaps ctcss_hpf_fb_taps oldstyle False alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (2144, 1924) _rotation 0 iir_filter_xxx id rx_ch12_hpf_iir _enabled True type ffd fftaps ctcss_hpf_ff_taps fbtaps ctcss_hpf_fb_taps oldstyle False alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (2144, 1804) _rotation 0 iir_filter_xxx id rx_ch14_hpf_iir _enabled True type ffd fftaps ctcss_hpf_ff_taps fbtaps ctcss_hpf_fb_taps oldstyle False alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (2144, 2044) _rotation 0 audio_sink id rx_ch9_audio_sink _enabled True samp_rate rx_audio_sample_rate device_name pulse ok_to_block True num_inputs 1 alias affinity _coordinate (2376, 1444) _rotation 0 audio_sink id rx_ch11_audio_sink _enabled True samp_rate rx_audio_sample_rate device_name pulse ok_to_block True num_inputs 1 alias affinity _coordinate (2376, 1684) _rotation 0 audio_sink id rx_ch12_audio_sink _enabled True samp_rate rx_audio_sample_rate device_name pulse ok_to_block True num_inputs 1 alias affinity _coordinate (2376, 1804) _rotation 0 audio_sink id rx_ch13_audio_sink _enabled True samp_rate rx_audio_sample_rate device_name pulse ok_to_block True num_inputs 1 alias affinity _coordinate (2376, 1924) _rotation 0 audio_sink id rx_ch14_audio_sink _enabled True samp_rate rx_audio_sample_rate device_name pulse ok_to_block True num_inputs 1 alias affinity _coordinate (2376, 2044) _rotation 0 note id ch_14_note _enabled True note Channel 14 alias _coordinate (2384, 2107) _rotation 0 blks2_selector id ch7_audio_sel _enabled True type float num_inputs 2 num_outputs 1 input_index 0 if ctcss_enable else 1 output_index 0 vlen 1 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1976, 1064) _rotation 0 iir_filter_xxx id rx_ch7_hpf_iir _enabled True type ffd fftaps ctcss_hpf_ff_taps fbtaps ctcss_hpf_fb_taps oldstyle False alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (2144, 1068) _rotation 0 audio_sink id rx_ch7_audio_sink _enabled True samp_rate rx_audio_sample_rate device_name pulse ok_to_block True num_inputs 1 alias affinity _coordinate (2376, 1068) _rotation 0 analog_sig_source_x id tx_ctcss_tone _enabled True type float samp_rate tx_audio_sample_rate waveform analog.GR_COS_WAVE freq ctcss_freq amp 0.375 offset 0 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (832, 2885) _rotation 0 analog_nbfm_tx id tx_nbfm _enabled True audio_rate tx_audio_sample_rate quad_rate tx_audio_sample_rate tau nbfm_tau max_dev 2.5e3 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1344, 2765) _rotation 0 pfb_synthesizer_ccf id tx_ch1_7_pfs _enabled True numchans 16 connections 7 taps tx_pfs_taps twox False samp_delay 0 ch_map [13, 14, 15, 0, 1, 2, 3] bus_conns [[0,],] alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (1920, 2608) _rotation 0 interp_fir_filter_xxx id tx_ch1_7_fir1 _enabled True type ccc interp 5 taps tx_interp_fir1_taps samp_delay 0 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (2312, 2692) _rotation 0 interp_fir_filter_xxx id tx_ch1_7_fir2 _enabled True type ccc interp 4 taps tx_interp_fir2_taps samp_delay 0 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (2536, 2692) _rotation 0 interp_fir_filter_xxx id tx_audio_fir _enabled True type fff interp 1 taps [-0.00069908,-0.00055931,-0.00038956,0.00011415,0.00082514,0.0014371,0.0015678,0.00094654,-0.00039382,-0.0020255,-0.003217,-0.0032166,-0.0016345,0.001246,0.0044105,0.0064075,0.0059408,0.0025436,-0.002973,-0.008573,-0.011647,-0.010094,-0.0034268,0.006599,0.01623,0.020917,0.017149,0.0042609,-0.014542,-0.032524,-0.041201,-0.033136,-0.0047887,0.041595,0.097875,0.15189,0.19083,0.20501,0.19083,0.15189,0.097875,0.041595,-0.0047887,-0.033136,-0.041201,-0.032524,-0.014542,0.0042609,0.017149,0.020917,0.01623,0.006599,-0.0034268,-0.010094,-0.011647,-0.008573,-0.002973,0.0025436,0.0059408,0.0064075,0.0044105,0.001246,-0.0016345,-0.0032166,-0.003217,-0.0020255,-0.00039382,0.00094654,0.0015678,0.0014371,0.00082514,0.00011415,-0.00038956,-0.00055931,-0.00069908] samp_delay 0 alias affinity minoutbuf 0 maxoutbuf 0 _coordinate (424, 2764) _rotation 0 fir_filter_xxx_0_0 qtgui_waterfall_sink_x_0_0 0 0 fir_filter_xxx_0 qtgui_waterfall_sink_x_0 0 0 fir_filter_xxx_0_0 pfb_channelizer_ch8_ch14 0 0 fir_filter_xxx_0 pfb_channelizer_ch1_ch17 0 0 rx_ch4_analog_pwr_squelch rx_ch4_nbfm 0 0 rx_ch2_analog_pwr_squelch rx_ch2_nbfm 0 0 rx_ch3_analog_pwr_squelch rx_ch3_nbfm 0 0 rx_ch5_analog_pwr_squelch rx_ch5_nbfm 0 0 rx_ch6_analog_pwr_squelch rx_ch6_nbfm 0 0 rx_ch7_analog_pwr_squelch rx_ch7_nbfm 0 0 rx_ch1_analog_pwr_squelch rx_ch1_nbfm 0 0 rx_ch8_analog_pwr_squelch rx_ch8_nbfm 0 0 rx_ch9_analog_pwr_squelch rx_ch9_nbfm 0 0 rx_ch10_analog_pwr_squelch rx_ch10_nbfm 0 0 rx_ch11_analog_pwr_squelch rx_ch11_nbfm 0 0 rx_ch12_analog_pwr_squelch rx_ch12_nbfm 0 0 rx_ch13_analog_pwr_squelch rx_ch13_nbfm 0 0 rx_ch14_analog_pwr_squelch rx_ch14_nbfm 0 0 rx_ch1_nbfm rx_ch1_analog_ctcss_squelch_ff 0 0 rx_ch7_nbfm ch7_audio_sel 0 1 rx_ch7_nbfm rx_ch7_analog_ctcss_squelch_ff 0 0 rx_ch6_nbfm ch6_audio_sel 0 1 rx_ch6_nbfm rx_ch6_analog_ctcss_squelch_ff 0 0 rx_ch5_nbfm rx_ch5_analog_ctcss_squelch_ff 0 0 rx_ch4_nbfm ch4_audio_sel 0 1 rx_ch4_nbfm rx_ch4_analog_ctcss_squelch_ff 0 0 rx_ch3_nbfm rx_ch3_analog_ctcss_squelch_ff 0 0 rx_ch2_nbfm rx_ch2_analog_ctcss_squelch_ff 0 0 rx_ch14_valve rx_ch14_analog_pwr_squelch 0 0 rx_ch13_valve rx_ch13_analog_pwr_squelch 0 0 rx_ch12_valve rx_ch12_analog_pwr_squelch 0 0 rx_ch11_valve rx_ch11_analog_pwr_squelch 0 0 rx_ch10_valve rx_ch10_analog_pwr_squelch 0 0 rx_ch9_valve rx_ch9_analog_pwr_squelch 0 0 rx_ch8_valve rx_ch8_analog_pwr_squelch 0 0 rx_ch5_valve rx_ch5_analog_pwr_squelch 0 0 rx_ch6_valve rx_ch6_analog_pwr_squelch 0 0 rx_ch7_valve rx_ch7_analog_pwr_squelch 0 0 rx_ch4_valve rx_ch4_analog_pwr_squelch 0 0 rx_ch2_valve rx_ch2_analog_pwr_squelch 0 0 freq_xlating_fir_filter_xxx_0_0 fir_filter_xxx_0_0 0 0 freq_xlating_fir_filter_xxx_0 fir_filter_xxx_0 0 0 tx_ch14_mute tx_ch8_14_pfs 0 6 tx_ch13_mute tx_ch8_14_pfs 0 5 tx_ch12_mute tx_ch8_14_pfs 0 4 tx_ch11_mute tx_ch8_14_pfs 0 3 tx_ch10_mute tx_ch8_14_pfs 0 2 tx_ch9_mute tx_ch8_14_pfs 0 1 tx_ch8_mute tx_ch8_14_pfs 0 0 rx_enable_valve freq_xlating_fir_filter_xxx_0 0 0 rx_enable_valve freq_xlating_fir_filter_xxx_0_0 0 0 tx_ctcss_tone tx_ctcss_add 0 1 tx_audio_gain_mult2 tx_ctcss_add 0 0 tx_valve tx_audio_fir 0 0 audio_source_0 tx_valve 0 0 tx_audio_src_sel tx_nbfm 0 0 tx_audio_fir tx_audio_gain_mult 0 0 tx_audio_gain_mult tx_audio_gain_mult2 0 0 tx_ctcss_add tx_audio_src_sel 0 1 tx_audio_gain_mult tx_audio_src_sel 0 0 tx_ch1_mute tx_ch1_7_pfs 0 0 tx_ch2_mute tx_ch1_7_pfs 0 1 tx_ch3_mute tx_ch1_7_pfs 0 2 tx_ch4_mute tx_ch1_7_pfs 0 3 tx_ch5_mute tx_ch1_7_pfs 0 4 tx_ch6_mute tx_ch1_7_pfs 0 5 tx_ch7_mute tx_ch1_7_pfs 0 6 tx_nbfm tx_ch2_mute 0 0 tx_nbfm tx_ch1_mute 0 0 tx_nbfm tx_ch3_mute 0 0 tx_nbfm tx_ch4_mute 0 0 tx_nbfm tx_ch5_mute 0 0 tx_nbfm tx_ch6_mute 0 0 tx_nbfm tx_ch7_mute 0 0 tx_nbfm tx_ch8_mute 0 0 tx_nbfm tx_ch9_mute 0 0 tx_nbfm tx_ch10_mute 0 0 tx_nbfm tx_ch11_mute 0 0 tx_nbfm tx_ch12_mute 0 0 tx_nbfm tx_ch13_mute 0 0 tx_nbfm tx_ch14_mute 0 0 tx_ch8_14_pfs tx_post_ps_gain_ch8_14 0 0 tx_ch1_7_pfs tx_post_ps_gain_ch1_7 0 0 tx_post_ps_gain_ch1_7 tx_ch1_7_waterfall 0 0 tx_post_ps_gain_ch1_7 tx_ch1_7_fir1 0 0 tx_post_ps_gain_ch8_14 tx_ch8_14_waterfall 0 0 tx_post_ps_gain_ch8_14 tx_ch8_14_fir1 0 0 tx_ch8_14_fir1 tx_ch8_14_fir2 0 0 blocks_multiply_xx_0_0 blocks_add_xx_1 0 1 blocks_multiply_xx_0 blocks_add_xx_1 0 0 blocks_add_xx_1 osmosdr_sink_0 0 0 analog_sig_source_x_0_0 blocks_multiply_xx_0_0 0 0 tx_ch8_14_fir2 blocks_multiply_xx_0_0 0 1 analog_sig_source_x_0 blocks_multiply_xx_0 0 0 tx_ch1_7_fir2 blocks_multiply_xx_0 0 1 tx_ch1_7_fir1 tx_ch1_7_fir2 0 0 osmosdr_source_0 rx_enable_valve 0 0 single_pole_iir_filter_xx_0 blocks_keep_one_in_n_0 0 0 blocks_keep_one_in_n_0 blocks_nlog10_ff_0 0 0 blocks_nlog10_ff_0 qtgui_number_sink_0 0 0 rx_enable_valve blocks_complex_to_mag_squared_0 0 0 blocks_complex_to_mag_squared_0 single_pole_iir_filter_xx_0 0 0 rx_ch7_analog_ctcss_squelch_ff ch7_audio_sel 0 0 rx_ch6_analog_ctcss_squelch_ff ch6_audio_sel 0 0 rx_ch5_analog_ctcss_squelch_ff ch5_audio_sel 0 0 rx_ch1_valve rx_ch1_analog_pwr_squelch 0 0 rx_ch3_valve rx_ch3_analog_pwr_squelch 0 0 rx_ch5_nbfm ch5_audio_sel 0 1 rx_ch8_nbfm ch8_audio_sel 0 1 rx_ch8_analog_ctcss_squelch_ff ch8_audio_sel 0 0 rx_ch9_analog_ctcss_squelch_ff ch9_audio_sel 0 0 rx_ch10_analog_ctcss_squelch_ff ch10_audio_sel 0 0 rx_ch8_nbfm rx_ch8_analog_ctcss_squelch_ff 0 0 rx_ch9_nbfm rx_ch9_analog_ctcss_squelch_ff 0 0 rx_ch10_nbfm rx_ch10_analog_ctcss_squelch_ff 0 0 rx_ch9_nbfm ch9_audio_sel 0 1 rx_ch10_nbfm ch10_audio_sel 0 1 rx_ch11_analog_ctcss_squelch_ff ch11_audio_sel 0 0 rx_ch12_analog_ctcss_squelch_ff ch12_audio_sel 0 0 rx_ch13_analog_ctcss_squelch_ff ch13_audio_sel 0 0 rx_ch14_analog_ctcss_squelch_ff ch14_audio_sel 0 0 rx_ch11_nbfm rx_ch11_analog_ctcss_squelch_ff 0 0 rx_ch12_nbfm rx_ch12_analog_ctcss_squelch_ff 0 0 rx_ch13_nbfm rx_ch13_analog_ctcss_squelch_ff 0 0 rx_ch14_nbfm rx_ch14_analog_ctcss_squelch_ff 0 0 rx_ch12_nbfm ch12_audio_sel 0 1 rx_ch13_nbfm ch13_audio_sel 0 1 rx_ch14_nbfm ch14_audio_sel 0 1 rx_ch11_nbfm ch11_audio_sel 0 1 rx_ch1_hpf_iir rx_ch1_audio_sink 0 0 ch1_audio_sel rx_ch1_hpf_iir 0 0 rx_ch1_analog_ctcss_squelch_ff ch1_audio_sel 0 0 rx_ch2_analog_ctcss_squelch_ff ch2_audio_sel 0 0 rx_ch2_nbfm ch2_audio_sel 0 1 rx_ch1_nbfm ch1_audio_sel 0 1 ch2_audio_sel rx_ch2_hpf_iir 0 0 rx_ch2_hpf_iir rx_ch2_audio_sink 0 0 rx_ch3_hpf_iir rx_ch3_audio_sink 0 0 ch3_audio_sel rx_ch3_hpf_iir 0 0 rx_ch3_analog_ctcss_squelch_ff ch3_audio_sel 0 0 rx_ch3_nbfm ch3_audio_sel 0 1 ch4_audio_sel rx_ch4_hpf_iir 0 0 rx_ch4_hpf_iir rx_ch4_audio_sink 0 0 ch5_audio_sel rx_ch5_hpf_iir 0 0 rx_ch5_hpf_iir rx_ch5_audio_sink 0 0 ch6_audio_sel rx_ch6_hpf_iir 0 0 rx_ch6_hpf_iir rx_ch6_audio_sink 0 0 ch8_audio_sel rx_ch8_hpf_iir 0 0 rx_ch8_hpf_iir rx_ch8_audio_sink 0 0 ch14_audio_sel rx_ch14_hpf_iir 0 0 ch9_audio_sel rx_ch9_hpf_iir 0 0 rx_ch9_hpf_iir rx_ch9_audio_sink 0 0 ch10_audio_sel rx_ch10_hpf_iir 0 0 rx_ch10_hpf_iir rx_ch10_audio_sink 0 0 ch11_audio_sel rx_ch11_hpf_iir 0 0 rx_ch11_hpf_iir rx_ch11_audio_sink 0 0 ch12_audio_sel rx_ch12_hpf_iir 0 0 ch13_audio_sel rx_ch13_hpf_iir 0 0 rx_ch13_hpf_iir rx_ch13_audio_sink 0 0 rx_ch12_hpf_iir rx_ch12_audio_sink 0 0 rx_ch14_hpf_iir rx_ch14_audio_sink 0 0 ch7_audio_sel rx_ch7_hpf_iir 0 0 rx_ch7_hpf_iir rx_ch7_audio_sink 0 0 rx_ch4_analog_ctcss_squelch_ff ch4_audio_sel 0 0 pfb_channelizer_ch1_ch17 rx_ch1_valve 0 0 pfb_channelizer_ch1_ch17 rx_ch1_valve 16 1 pfb_channelizer_ch1_ch17 rx_ch2_valve 1 0 pfb_channelizer_ch1_ch17 rx_ch2_valve 17 1 pfb_channelizer_ch1_ch17 rx_ch3_valve 2 0 pfb_channelizer_ch1_ch17 rx_ch3_valve 18 1 pfb_channelizer_ch1_ch17 rx_ch4_valve 3 0 pfb_channelizer_ch1_ch17 rx_ch4_valve 19 1 pfb_channelizer_ch1_ch17 rx_ch5_valve 4 0 pfb_channelizer_ch1_ch17 rx_ch5_valve 20 1 pfb_channelizer_ch1_ch17 rx_ch6_valve 5 0 pfb_channelizer_ch1_ch17 rx_ch6_valve 21 1 pfb_channelizer_ch1_ch17 rx_ch7_valve 6 0 pfb_channelizer_ch1_ch17 rx_ch7_valve 22 1 pfb_channelizer_ch1_ch17 blocks_null_sink_0_1_0 7 0 pfb_channelizer_ch1_ch17 blocks_null_sink_0_1_0 8 1 pfb_channelizer_ch1_ch17 blocks_null_sink_0_1_0 9 2 pfb_channelizer_ch1_ch17 blocks_null_sink_0_1_0 10 3 pfb_channelizer_ch1_ch17 blocks_null_sink_0_1_0 11 4 pfb_channelizer_ch1_ch17 blocks_null_sink_0_1_0 12 5 pfb_channelizer_ch1_ch17 blocks_null_sink_0_1_0 13 6 pfb_channelizer_ch1_ch17 blocks_null_sink_0_1_0 14 7 pfb_channelizer_ch1_ch17 blocks_null_sink_0_1_0 15 8 pfb_channelizer_ch1_ch17 blocks_null_sink_0_1_0 23 9 pfb_channelizer_ch8_ch14 rx_ch8_valve 0 0 pfb_channelizer_ch8_ch14 rx_ch8_valve 16 1 pfb_channelizer_ch8_ch14 rx_ch9_valve 1 0 pfb_channelizer_ch8_ch14 rx_ch9_valve 17 1 pfb_channelizer_ch8_ch14 rx_ch10_valve 2 0 pfb_channelizer_ch8_ch14 rx_ch10_valve 18 1 pfb_channelizer_ch8_ch14 rx_ch11_valve 3 0 pfb_channelizer_ch8_ch14 rx_ch11_valve 19 1 pfb_channelizer_ch8_ch14 rx_ch12_valve 4 0 pfb_channelizer_ch8_ch14 rx_ch12_valve 20 1 pfb_channelizer_ch8_ch14 rx_ch13_valve 5 0 pfb_channelizer_ch8_ch14 rx_ch13_valve 21 1 pfb_channelizer_ch8_ch14 rx_ch14_valve 6 0 pfb_channelizer_ch8_ch14 rx_ch14_valve 22 1 pfb_channelizer_ch8_ch14 blocks_null_sink_0_1_0_0 7 0 pfb_channelizer_ch8_ch14 blocks_null_sink_0_1_0_0 8 1 pfb_channelizer_ch8_ch14 blocks_null_sink_0_1_0_0 9 2 pfb_channelizer_ch8_ch14 blocks_null_sink_0_1_0_0 10 3 pfb_channelizer_ch8_ch14 blocks_null_sink_0_1_0_0 11 4 pfb_channelizer_ch8_ch14 blocks_null_sink_0_1_0_0 12 5 pfb_channelizer_ch8_ch14 blocks_null_sink_0_1_0_0 13 6 pfb_channelizer_ch8_ch14 blocks_null_sink_0_1_0_0 14 7 pfb_channelizer_ch8_ch14 blocks_null_sink_0_1_0_0 15 8 pfb_channelizer_ch8_ch14 blocks_null_sink_0_1_0_0 23 9 bladeRF-2024.05/host/examples/gnuradio/loopback/000077500000000000000000000000001457144405000213665ustar00rootroot00000000000000bladeRF-2024.05/host/examples/gnuradio/loopback/README.md000066400000000000000000000017631457144405000226540ustar00rootroot00000000000000# GNU Radio Companion Loopback Example # This flowgraph illustrates the use of the `loopback=` parameter that may be provided to an `osmocom Source` block to internally connect a bladeRF's TX signal path to its RX path. This is intended to allow users to experiment with the effect of various parameters for different loopback modes. For example, The TX VGA1 gain has no effect when a loopback mode that selects the output of the TXLPF is selected. It is *highly* recommended that users refer to the LMS6002D block diagram in the [LMS6002D data sheet](http://www.limemicro.com/products/field-programmable-rf-ics-lms6002d/#resources) to better understand the available loopback paths. The available loopback mode settings are listed on the [gr-osmosdr wiki page](http://sdr.osmocom.org/trac/wiki/GrOsmoSDR#bladeRFSourceSink). One may also reference the descriptions of the associated `bladerf_loopback` enumeration values in the [libbladeRF API documentation](https://nuand.com/bladeRF-doc/libbladeRF). bladeRF-2024.05/host/examples/gnuradio/loopback/bladeRF_loopback.grc000066400000000000000000003552471457144405000252540ustar00rootroot00000000000000 Sun Jan 17 20:28:19 2016 options author Nuand, LLC <bladeRF@nuand.com> alias window_size 2048, 1024 category Custom comment description A simple flowgraph that demonstrates the usage of loopback modes. _enabled True _coordinate (8, 8) _rotation 0 generate_options qt_gui id bladeRF_loopback max_nouts 0 realtime_scheduling run_options prompt run True thread_safe_setters title "bladeRF loopback example" variable comment _enabled True _coordinate (8, 211) _rotation 0 id bladerf_rx_args value "bladerf=" + bladerf_selection + ",loopback=" + loopback + ",buffers=" + str(rx_num_buffers) + ",buflen=" + str(rx_buflen) + ",num_xfers=" + str(rx_num_xfers) + ",verbosity="+verbosity variable comment _enabled True _coordinate (32, 139) _rotation 0 id bladerf_selection value str(instance) if serial == "" else serial variable comment _enabled True _coordinate (8, 283) _rotation 0 id bladerf_tx_args value "bladerf=" + bladerf_selection + ",buffers=" + str(tx_num_buffers) + ",buflen=" + str(tx_buflen) + ",num_xfers=" + str(tx_num_xfers) + ",verbosity="+verbosity variable_qtgui_label comment value bladerf_rx_args _enabled True formatter None _coordinate (1096, 491) gui_hint tabs@0 : 11, 0, 1, 10 _rotation 0 id gui_bladerf_rx_args label "bladeRF RX arguments" type string variable_qtgui_label comment value bladerf_tx_args _enabled True formatter None _coordinate (1048, 355) gui_hint tabs@1: 11, 0, 1, 10 _rotation 0 id gui_bladerf_tx_args label "bladeRF TX arguments" type string variable_qtgui_range comment value rx_bandwidth _enabled True _coordinate (968, 491) gui_hint tabs@0 : 1, 2, 1, 2 _rotation 0 id gui_rx_bandwidth label Bandwidth min_len 200 orient Qt.Horizontal start 1.5e6 step 0.5e6 stop 28e6 rangeType float widget counter_slider variable_qtgui_range comment value rx_frequency _enabled True _coordinate (424, 491) gui_hint tabs@0 : 0, 0, 1, 5 _rotation 0 id gui_rx_frequency label Frequency min_len 200 orient Qt.Horizontal start 0 step 1e6 stop 3.8e9 rangeType float widget counter_slider variable_qtgui_chooser comment value rx_lna_gain _enabled True _coordinate (720, 491) gui_hint tabs@0 : 0, 9, 1, 1 _rotation 0 id gui_rx_lna_gain label0 0 dB label1 3 dB label2 6 dB label3 label4 label LNA Gain labels [] num_opts 3 option0 0 option1 3 option2 6 option3 3 option4 4 options [0, 1, 2] orient Qt.QVBoxLayout type int widget combo_box variable_qtgui_range comment value rx_sample_rate _enabled True _coordinate (832, 491) gui_hint tabs@0 : 1, 0, 1, 2 _rotation 0 id gui_rx_sample_rate label Sample Rate min_len 200 orient Qt.Horizontal start 1.5e6 step 500e3 stop 40e6 rangeType float widget counter_slider variable_qtgui_range comment value rx_vga_gain _enabled True _coordinate (552, 491) gui_hint tabs@0 : 0, 5, 1, 4 _rotation 0 id gui_rx_vga_gain label RX VGA1 + VGA2 Gain min_len 200 orient Qt.Horizontal start 5 step 1 stop 60 rangeType float widget counter_slider variable_qtgui_range comment value tx_bandwidth _enabled True _coordinate (920, 355) gui_hint tabs@1 : 1, 2, 1, 2 _rotation 0 id gui_tx_bandwidth label Bandwidth min_len 200 orient Qt.Horizontal start 1.5e6 step 0.5e6 stop 28e6 rangeType float widget counter_slider variable_qtgui_range comment value tx_frequency _enabled True _coordinate (424, 355) gui_hint tabs@1 : 0, 0, 1, 5 _rotation 0 id gui_tx_frequency label Frequency min_len 200 orient Qt.Horizontal start 0 step 1e6 stop 3.8e9 rangeType float widget counter_slider variable_qtgui_range comment value tx_sample_rate _enabled True _coordinate (784, 355) gui_hint tabs@1 : 1, 0, 1, 2 _rotation 0 id gui_tx_sample_rate label Sample Rate min_len 200 orient Qt.Horizontal start 1.5e6 step 500e3 stop 40e6 rangeType float widget counter_slider variable_qtgui_range comment value tx_vga1 _enabled True _coordinate (552, 355) gui_hint tabs@1 : 0, 5, 1, 2 _rotation 0 id gui_tx_vga1 label VGA1 Gain min_len 200 orient Qt.Horizontal start -35 step 1 stop -4 rangeType float widget counter_slider variable_qtgui_range comment value tx_vga2 _enabled True _coordinate (672, 355) gui_hint tabs@1 : 0, 7, 1, 2 _rotation 0 id gui_tx_vga2 label VGA2 Gain min_len 200 orient Qt.Horizontal start 0 step 1 stop 25 rangeType float widget counter_slider analog_random_source_x alias comment affinity _enabled True _coordinate (40, 851) _rotation 0 id analog_random_source_x_0 maxoutbuf 0 max 255 minoutbuf 0 min 0 num_samps 1000 type byte repeat True blocks_multiply_const_vxx alias comment const 0.3 affinity _enabled True _coordinate (464, 875) _rotation 0 id blocks_multiply_const_vxx_0 type complex maxoutbuf 0 minoutbuf 0 vlen 1 digital_psk_mod alias comment affinity differential True _enabled True excess_bw 0.35 _coordinate (208, 843) _rotation 0 mod_code "none" id digital_psk_mod_0 log False maxoutbuf 0 minoutbuf 0 constellation_points 4 samples_per_symbol 8 verbose False parameter alias comment _enabled True _coordinate (736, 11) _rotation 0 id instance label 0-indexed device instance describing device to use. Ignored if a serial-number is provided. short_id type intx value 0 parameter alias comment _enabled True _coordinate (592, 11) _rotation 0 id loopback label Loopback mode short_id l type string value "bb_txvga1_rxlpf" note alias comment _enabled True _coordinate (256, 11) _rotation 0 id note_0 note Command line params note alias comment _enabled True _coordinate (288, 355) _rotation 0 id note_0_0 note GUI Controls osmosdr_sink alias ant0 bb_gain0 gui_tx_vga1 bw0 gui_tx_bandwidth corr0 0 freq0 gui_tx_frequency if_gain0 0 gain0 gui_tx_vga2 ant10 bb_gain10 20 bw10 0 corr10 0 freq10 100e6 if_gain10 20 gain10 10 ant11 bb_gain11 20 bw11 0 corr11 0 freq11 100e6 if_gain11 20 gain11 10 ant12 bb_gain12 20 bw12 0 corr12 0 freq12 100e6 if_gain12 20 gain12 10 ant13 bb_gain13 20 bw13 0 corr13 0 freq13 100e6 if_gain13 20 gain13 10 ant14 bb_gain14 20 bw14 0 corr14 0 freq14 100e6 if_gain14 20 gain14 10 ant15 bb_gain15 20 bw15 0 corr15 0 freq15 100e6 if_gain15 20 gain15 10 ant16 bb_gain16 20 bw16 0 corr16 0 freq16 100e6 if_gain16 20 gain16 10 ant17 bb_gain17 20 bw17 0 corr17 0 freq17 100e6 if_gain17 20 gain17 10 ant18 bb_gain18 20 bw18 0 corr18 0 freq18 100e6 if_gain18 20 gain18 10 ant19 bb_gain19 20 bw19 0 corr19 0 freq19 100e6 if_gain19 20 gain19 10 ant1 bb_gain1 20 bw1 0 corr1 0 freq1 100e6 if_gain1 20 gain1 10 ant20 bb_gain20 20 bw20 0 corr20 0 freq20 100e6 if_gain20 20 gain20 10 ant21 bb_gain21 20 bw21 0 corr21 0 freq21 100e6 if_gain21 20 gain21 10 ant22 bb_gain22 20 bw22 0 corr22 0 freq22 100e6 if_gain22 20 gain22 10 ant23 bb_gain23 20 bw23 0 corr23 0 freq23 100e6 if_gain23 20 gain23 10 ant24 bb_gain24 20 bw24 0 corr24 0 freq24 100e6 if_gain24 20 gain24 10 ant25 bb_gain25 20 bw25 0 corr25 0 freq25 100e6 if_gain25 20 gain25 10 ant26 bb_gain26 20 bw26 0 corr26 0 freq26 100e6 if_gain26 20 gain26 10 ant27 bb_gain27 20 bw27 0 corr27 0 freq27 100e6 if_gain27 20 gain27 10 ant28 bb_gain28 20 bw28 0 corr28 0 freq28 100e6 if_gain28 20 gain28 10 ant29 bb_gain29 20 bw29 0 corr29 0 freq29 100e6 if_gain29 20 gain29 10 ant2 bb_gain2 20 bw2 0 corr2 0 freq2 100e6 if_gain2 20 gain2 10 ant30 bb_gain30 20 bw30 0 corr30 0 freq30 100e6 if_gain30 20 gain30 10 ant31 bb_gain31 20 bw31 0 corr31 0 freq31 100e6 if_gain31 20 gain31 10 ant3 bb_gain3 20 bw3 0 corr3 0 freq3 100e6 if_gain3 20 gain3 10 ant4 bb_gain4 20 bw4 0 corr4 0 freq4 100e6 if_gain4 20 gain4 10 ant5 bb_gain5 20 bw5 0 corr5 0 freq5 100e6 if_gain5 20 gain5 10 ant6 bb_gain6 20 bw6 0 corr6 0 freq6 100e6 if_gain6 20 gain6 10 ant7 bb_gain7 20 bw7 0 corr7 0 freq7 100e6 if_gain7 20 gain7 10 ant8 bb_gain8 20 bw8 0 corr8 0 freq8 100e6 if_gain8 20 gain8 10 ant9 bb_gain9 20 bw9 0 corr9 0 freq9 100e6 if_gain9 20 gain9 10 comment affinity args bladerf_tx_args _enabled True _coordinate (784, 819) _rotation 0 id osmosdr_sink_0 type fc32 clock_source0 time_source0 clock_source1 time_source1 clock_source2 time_source2 clock_source3 time_source3 clock_source4 time_source4 clock_source5 time_source5 clock_source6 time_source6 clock_source7 time_source7 nchan 1 num_mboards 1 sample_rate gui_tx_sample_rate sync osmosdr_source alias ant0 bb_gain0 gui_rx_vga_gain bw0 gui_rx_bandwidth dc_offset_mode0 1 corr0 0 freq0 gui_rx_frequency gain_mode0 False if_gain0 0 iq_balance_mode0 1 gain0 gui_rx_lna_gain ant10 bb_gain10 20 bw10 0 dc_offset_mode10 0 corr10 0 freq10 100e6 gain_mode10 False if_gain10 20 iq_balance_mode10 0 gain10 10 ant11 bb_gain11 20 bw11 0 dc_offset_mode11 0 corr11 0 freq11 100e6 gain_mode11 False if_gain11 20 iq_balance_mode11 0 gain11 10 ant12 bb_gain12 20 bw12 0 dc_offset_mode12 0 corr12 0 freq12 100e6 gain_mode12 False if_gain12 20 iq_balance_mode12 0 gain12 10 ant13 bb_gain13 20 bw13 0 dc_offset_mode13 0 corr13 0 freq13 100e6 gain_mode13 False if_gain13 20 iq_balance_mode13 0 gain13 10 ant14 bb_gain14 20 bw14 0 dc_offset_mode14 0 corr14 0 freq14 100e6 gain_mode14 False if_gain14 20 iq_balance_mode14 0 gain14 10 ant15 bb_gain15 20 bw15 0 dc_offset_mode15 0 corr15 0 freq15 100e6 gain_mode15 False if_gain15 20 iq_balance_mode15 0 gain15 10 ant16 bb_gain16 20 bw16 0 dc_offset_mode16 0 corr16 0 freq16 100e6 gain_mode16 False if_gain16 20 iq_balance_mode16 0 gain16 10 ant17 bb_gain17 20 bw17 0 dc_offset_mode17 0 corr17 0 freq17 100e6 gain_mode17 False if_gain17 20 iq_balance_mode17 0 gain17 10 ant18 bb_gain18 20 bw18 0 dc_offset_mode18 0 corr18 0 freq18 100e6 gain_mode18 False if_gain18 20 iq_balance_mode18 0 gain18 10 ant19 bb_gain19 20 bw19 0 dc_offset_mode19 0 corr19 0 freq19 100e6 gain_mode19 False if_gain19 20 iq_balance_mode19 0 gain19 10 ant1 bb_gain1 20 bw1 0 dc_offset_mode1 0 corr1 0 freq1 100e6 gain_mode1 False if_gain1 20 iq_balance_mode1 0 gain1 10 ant20 bb_gain20 20 bw20 0 dc_offset_mode20 0 corr20 0 freq20 100e6 gain_mode20 False if_gain20 20 iq_balance_mode20 0 gain20 10 ant21 bb_gain21 20 bw21 0 dc_offset_mode21 0 corr21 0 freq21 100e6 gain_mode21 False if_gain21 20 iq_balance_mode21 0 gain21 10 ant22 bb_gain22 20 bw22 0 dc_offset_mode22 0 corr22 0 freq22 100e6 gain_mode22 False if_gain22 20 iq_balance_mode22 0 gain22 10 ant23 bb_gain23 20 bw23 0 dc_offset_mode23 0 corr23 0 freq23 100e6 gain_mode23 False if_gain23 20 iq_balance_mode23 0 gain23 10 ant24 bb_gain24 20 bw24 0 dc_offset_mode24 0 corr24 0 freq24 100e6 gain_mode24 False if_gain24 20 iq_balance_mode24 0 gain24 10 ant25 bb_gain25 20 bw25 0 dc_offset_mode25 0 corr25 0 freq25 100e6 gain_mode25 False if_gain25 20 iq_balance_mode25 0 gain25 10 ant26 bb_gain26 20 bw26 0 dc_offset_mode26 0 corr26 0 freq26 100e6 gain_mode26 False if_gain26 20 iq_balance_mode26 0 gain26 10 ant27 bb_gain27 20 bw27 0 dc_offset_mode27 0 corr27 0 freq27 100e6 gain_mode27 False if_gain27 20 iq_balance_mode27 0 gain27 10 ant28 bb_gain28 20 bw28 0 dc_offset_mode28 0 corr28 0 freq28 100e6 gain_mode28 False if_gain28 20 iq_balance_mode28 0 gain28 10 ant29 bb_gain29 20 bw29 0 dc_offset_mode29 0 corr29 0 freq29 100e6 gain_mode29 False if_gain29 20 iq_balance_mode29 0 gain29 10 ant2 bb_gain2 20 bw2 0 dc_offset_mode2 0 corr2 0 freq2 100e6 gain_mode2 False if_gain2 20 iq_balance_mode2 0 gain2 10 ant30 bb_gain30 20 bw30 0 dc_offset_mode30 0 corr30 0 freq30 100e6 gain_mode30 False if_gain30 20 iq_balance_mode30 0 gain30 10 ant31 bb_gain31 20 bw31 0 dc_offset_mode31 0 corr31 0 freq31 100e6 gain_mode31 False if_gain31 20 iq_balance_mode31 0 gain31 10 ant3 bb_gain3 20 bw3 0 dc_offset_mode3 0 corr3 0 freq3 100e6 gain_mode3 False if_gain3 20 iq_balance_mode3 0 gain3 10 ant4 bb_gain4 20 bw4 0 dc_offset_mode4 0 corr4 0 freq4 100e6 gain_mode4 False if_gain4 20 iq_balance_mode4 0 gain4 10 ant5 bb_gain5 20 bw5 0 dc_offset_mode5 0 corr5 0 freq5 100e6 gain_mode5 False if_gain5 20 iq_balance_mode5 0 gain5 10 ant6 bb_gain6 20 bw6 0 dc_offset_mode6 0 corr6 0 freq6 100e6 gain_mode6 False if_gain6 20 iq_balance_mode6 0 gain6 10 ant7 bb_gain7 20 bw7 0 dc_offset_mode7 0 corr7 0 freq7 100e6 gain_mode7 False if_gain7 20 iq_balance_mode7 0 gain7 10 ant8 bb_gain8 20 bw8 0 dc_offset_mode8 0 corr8 0 freq8 100e6 gain_mode8 False if_gain8 20 iq_balance_mode8 0 gain8 10 ant9 bb_gain9 20 bw9 0 dc_offset_mode9 0 corr9 0 freq9 100e6 gain_mode9 False if_gain9 20 iq_balance_mode9 0 gain9 10 comment affinity args bladerf_rx_args _enabled True _coordinate (1048, 779) _rotation 0 id osmosdr_source_0 maxoutbuf 0 clock_source0 time_source0 clock_source1 time_source1 clock_source2 time_source2 clock_source3 time_source3 clock_source4 time_source4 clock_source5 time_source5 clock_source6 time_source6 clock_source7 time_source7 minoutbuf 0 nchan 1 num_mboards 1 type fc32 sample_rate gui_rx_sample_rate sync qtgui_freq_sink_x autoscale False average 0.1 bw gui_rx_sample_rate alias fc gui_rx_frequency comment ctrlpanel False affinity _enabled 1 fftsize 8192 _coordinate (1320, 747) gui_hint tabs@0 : 2, 0, 5, 5 _rotation 0 grid False id qtgui_freq_sink_x_0 legend True alpha1 1.0 color1 "blue" label1 width1 1 alpha10 1.0 color10 "dark blue" label10 width10 1 alpha2 1.0 color2 "red" label2 width2 1 alpha3 1.0 color3 "green" label3 width3 1 alpha4 1.0 color4 "black" label4 width4 1 alpha5 1.0 color5 "cyan" label5 width5 1 alpha6 1.0 color6 "magenta" label6 width6 1 alpha7 1.0 color7 "yellow" label7 width7 1 alpha8 1.0 color8 "dark red" label8 width8 1 alpha9 1.0 color9 "dark green" label9 width9 1 maxoutbuf 0 minoutbuf 0 name "" nconnections 1 showports True freqhalf True tr_chan 0 tr_level 0.0 tr_mode qtgui.TRIG_MODE_FREE tr_tag "" type complex update_time 0.10 wintype firdes.WIN_BLACKMAN_hARRIS ymax 10 ymin -140 qtgui_freq_sink_x autoscale False average 0.1 bw gui_tx_sample_rate alias fc gui_tx_frequency comment ctrlpanel False affinity _enabled 1 fftsize 8192 _coordinate (432, 683) gui_hint tabs@1 : 2, 0, 5, 5 _rotation 180 grid False id qtgui_freq_sink_x_0_0 legend True alpha1 1.0 color1 "blue" label1 width1 1 alpha10 1.0 color10 "dark blue" label10 width10 1 alpha2 1.0 color2 "red" label2 width2 1 alpha3 1.0 color3 "green" label3 width3 1 alpha4 1.0 color4 "black" label4 width4 1 alpha5 1.0 color5 "cyan" label5 width5 1 alpha6 1.0 color6 "magenta" label6 width6 1 alpha7 1.0 color7 "yellow" label7 width7 1 alpha8 1.0 color8 "dark red" label8 width8 1 alpha9 1.0 color9 "dark green" label9 width9 1 maxoutbuf 0 minoutbuf 0 name "" nconnections 1 showports True freqhalf True tr_chan 0 tr_level 0.0 tr_mode qtgui.TRIG_MODE_FREE tr_tag "" type complex update_time 0.10 wintype firdes.WIN_BLACKMAN_hARRIS ymax 10 ymin -140 qtgui_time_sink_x autoscale False alias comment ctrlpanel False affinity entags True _enabled True _coordinate (1320, 931) gui_hint tabs@0 : 7, 0, 3, 10 _rotation 0 grid False id qtgui_time_sink_x_0 legend True alpha1 1.0 color1 "blue" label1 marker1 -1 style1 1 width1 1 alpha10 1.0 color10 "blue" label10 marker10 -1 style10 1 width10 1 alpha2 1.0 color2 "red" label2 marker2 -1 style2 1 width2 1 alpha3 1.0 color3 "green" label3 marker3 -1 style3 1 width3 1 alpha4 1.0 color4 "black" label4 marker4 -1 style4 1 width4 1 alpha5 1.0 color5 "cyan" label5 marker5 -1 style5 1 width5 1 alpha6 1.0 color6 "magenta" label6 marker6 -1 style6 1 width6 1 alpha7 1.0 color7 "yellow" label7 marker7 -1 style7 1 width7 1 alpha8 1.0 color8 "dark red" label8 marker8 -1 style8 1 width8 1 alpha9 1.0 color9 "dark green" label9 marker9 -1 style9 1 width9 1 name "" nconnections 1 size 8192 srate rx_sample_rate tr_chan 0 tr_delay 0 tr_level 0.0 tr_mode qtgui.TRIG_MODE_FREE tr_slope qtgui.TRIG_SLOPE_POS tr_tag "" type complex update_time 0.10 ylabel Amplitude yunit "" ymax 1 ymin -1 qtgui_time_sink_x autoscale False alias comment ctrlpanel False affinity entags True _enabled True _coordinate (456, 939) gui_hint tabs@1 : 7, 0, 3, 10 _rotation 180 grid False id qtgui_time_sink_x_0_0 legend True alpha1 1.0 color1 "blue" label1 marker1 -1 style1 1 width1 1 alpha10 1.0 color10 "blue" label10 marker10 -1 style10 1 width10 1 alpha2 1.0 color2 "red" label2 marker2 -1 style2 1 width2 1 alpha3 1.0 color3 "green" label3 marker3 -1 style3 1 width3 1 alpha4 1.0 color4 "black" label4 marker4 -1 style4 1 width4 1 alpha5 1.0 color5 "cyan" label5 marker5 -1 style5 1 width5 1 alpha6 1.0 color6 "magenta" label6 marker6 -1 style6 1 width6 1 alpha7 1.0 color7 "yellow" label7 marker7 -1 style7 1 width7 1 alpha8 1.0 color8 "dark red" label8 marker8 -1 style8 1 width8 1 alpha9 1.0 color9 "dark green" label9 marker9 -1 style9 1 width9 1 name "" nconnections 1 size 8192 srate tx_sample_rate tr_chan 0 tr_delay 0 tr_level 0.0 tr_mode qtgui.TRIG_MODE_FREE tr_slope qtgui.TRIG_SLOPE_POS tr_tag "" type complex update_time 0.10 ylabel Amplitude yunit "" ymax 1 ymin -1 qtgui_waterfall_sink_x bw gui_rx_sample_rate alias fc gui_rx_frequency comment affinity _enabled 1 fftsize 8192 _coordinate (1320, 843) gui_hint tabs@0 : 2, 5, 5, 5 _rotation 0 grid False id qtgui_waterfall_sink_x_0 int_max 10 int_min -140 legend True alpha1 1.0 color1 0 label1 alpha10 1.0 color10 0 label10 alpha2 1.0 color2 0 label2 alpha3 1.0 color3 0 label3 alpha4 1.0 color4 0 label4 alpha5 1.0 color5 0 label5 alpha6 1.0 color6 0 label6 alpha7 1.0 color7 0 label7 alpha8 1.0 color8 0 label8 alpha9 1.0 color9 0 label9 maxoutbuf 0 minoutbuf 0 name "" nconnections 1 showports True freqhalf True type complex update_time 0.10 wintype firdes.WIN_BLACKMAN_hARRIS qtgui_waterfall_sink_x bw gui_tx_sample_rate alias fc gui_tx_frequency comment affinity _enabled 1 fftsize 8192 _coordinate (432, 779) gui_hint tabs@1 : 2, 5, 5, 5 _rotation 180 grid False id qtgui_waterfall_sink_x_0_0 int_max 10 int_min -140 legend True alpha1 1.0 color1 0 label1 alpha10 1.0 color10 0 label10 alpha2 1.0 color2 0 label2 alpha3 1.0 color3 0 label3 alpha4 1.0 color4 0 label4 alpha5 1.0 color5 0 label5 alpha6 1.0 color6 0 label6 alpha7 1.0 color7 0 label7 alpha8 1.0 color8 0 label8 alpha9 1.0 color9 0 label9 maxoutbuf 0 minoutbuf 0 name "" nconnections 1 showports True freqhalf True type complex update_time 0.10 wintype firdes.WIN_BLACKMAN_hARRIS parameter alias comment _enabled True _coordinate (552, 227) _rotation 0 id rx_bandwidth label Bandwidth short_id type eng_float value 1.5e6 parameter alias comment _enabled True _coordinate (1408, 227) _rotation 0 id rx_buflen label Length of RX buffers, in samples. Should be a multiple of 1024. short_id type value 4096 parameter alias comment _enabled True _coordinate (664, 227) _rotation 0 id rx_frequency label Frequency short_id type eng_float value 915e6 parameter alias comment _enabled True _coordinate (776, 227) _rotation 0 id rx_lna_gain label RX LNA Gain short_id type intx value 6 parameter alias comment _enabled True _coordinate (1080, 227) _rotation 0 id rx_num_buffers label Number of RX buffers to use short_id type intx value 16 parameter alias comment _enabled True _coordinate (1248, 227) _rotation 0 id rx_num_xfers label Number of maximum in-flight RX USB transfers. Should be <= (num-buffers / 2). short_id type intx value 8 parameter alias comment _enabled True _coordinate (424, 227) _rotation 0 id rx_sample_rate label Sample Rate short_id type eng_float value 3e6 parameter alias comment _enabled True _coordinate (904, 227) _rotation 0 id rx_vga_gain label RX VGA1 + VGA2 Gain short_id type intx value 20 parameter alias comment _enabled True _coordinate (424, 11) _rotation 0 id serial label bladeRF serial number short_id type string value "" qtgui_tab_widget alias comment _enabled True _coordinate (280, 443) gui_hint _rotation 0 id tabs label0 RX label1 TX label10 Tab 10 label11 Tab 11 label12 Tab 12 label13 Tab 13 label14 Tab 14 label15 Tab 15 label16 Tab 16 label17 Tab 17 label18 Tab 18 label19 Tab 19 label2 Tab 2 label3 Tab 3 label4 Tab 4 label5 Tab 5 label6 Tab 6 label7 Tab 7 label8 Tab 8 label9 Tab 9 num_tabs 2 parameter alias comment _enabled True _coordinate (552, 123) _rotation 0 id tx_bandwidth label Bandwidth short_id type eng_float value 1.5e6 parameter alias comment _enabled True _coordinate (1360, 123) _rotation 0 id tx_buflen label Length of TX buffers, in samples. Should be a multiple of 1024. short_id type value 4096 parameter alias comment _enabled True _coordinate (664, 123) _rotation 0 id tx_frequency label Frequency short_id type eng_float value 915e6 parameter alias comment _enabled True _coordinate (1032, 123) _rotation 0 id tx_num_buffers label Number of TX buffers to use short_id type intx value 16 parameter alias comment _enabled True _coordinate (1200, 123) _rotation 0 id tx_num_xfers label Number of maximum in-flight TX USB transfers. Should be <= (num-buffers / 2). short_id type intx value 8 parameter alias comment _enabled True _coordinate (424, 123) _rotation 0 id tx_sample_rate label Sample Rate short_id type eng_float value 3e6 parameter alias comment _enabled True _coordinate (776, 123) _rotation 0 id tx_vga1 label TX VGA1 Gain short_id type intx value -18 parameter alias comment _enabled True _coordinate (904, 123) _rotation 0 id tx_vga2 label TX VGA2 Gain short_id type intx value 0 parameter alias comment _enabled True _coordinate (904, 11) _rotation 0 id verbosity label libbladeRF log verbosity. Options are: verbose, debug, info, warning, error, critical, silent short_id type string value "info" analog_random_source_x_0 digital_psk_mod_0 0 0 blocks_multiply_const_vxx_0 osmosdr_sink_0 0 0 blocks_multiply_const_vxx_0 qtgui_freq_sink_x_0_0 0 0 blocks_multiply_const_vxx_0 qtgui_time_sink_x_0_0 0 0 blocks_multiply_const_vxx_0 qtgui_waterfall_sink_x_0_0 0 0 digital_psk_mod_0 blocks_multiply_const_vxx_0 0 0 osmosdr_source_0 qtgui_freq_sink_x_0 0 0 osmosdr_source_0 qtgui_time_sink_x_0 0 0 osmosdr_source_0 qtgui_waterfall_sink_x_0 0 0 bladeRF-2024.05/host/examples/gnuradio/loopback/bladeRF_loopback.py000077500000000000000000001160771457144405000251300ustar00rootroot00000000000000#!/usr/bin/env python2 ################################################## # GNU Radio Python Flow Graph # Title: bladeRF loopback example # Author: Nuand, LLC # Description: A simple flowgraph that demonstrates the usage of loopback modes. # Generated: Sun Jan 17 21:26:48 2016 ################################################## if __name__ == '__main__': import ctypes import sys if sys.platform.startswith('linux'): try: x11 = ctypes.cdll.LoadLibrary('libX11.so') x11.XInitThreads() except: print "Warning: failed to XInitThreads()" from PyQt4 import Qt from PyQt4.QtCore import QObject, pyqtSlot from gnuradio import blocks from gnuradio import digital from gnuradio import eng_notation from gnuradio import gr from gnuradio import qtgui from gnuradio.eng_option import eng_option from gnuradio.filter import firdes from gnuradio.qtgui import Range, RangeWidget from optparse import OptionParser import numpy import osmosdr import sip import sys import time class bladeRF_loopback(gr.top_block, Qt.QWidget): def __init__(self, instance=0, loopback="bb_txvga1_rxlpf", rx_bandwidth=1.5e6, rx_buflen=4096, rx_frequency=915e6, rx_lna_gain=6, rx_num_buffers=16, rx_num_xfers=8, rx_sample_rate=3e6, rx_vga_gain=20, serial="", tx_bandwidth=1.5e6, tx_buflen=4096, tx_frequency=915e6, tx_num_buffers=16, tx_num_xfers=8, tx_sample_rate=3e6, tx_vga1=-18, tx_vga2=0, verbosity="info"): gr.top_block.__init__(self, "bladeRF loopback example") Qt.QWidget.__init__(self) self.setWindowTitle("bladeRF loopback example") try: self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc')) except: pass self.top_scroll_layout = Qt.QVBoxLayout() self.setLayout(self.top_scroll_layout) self.top_scroll = Qt.QScrollArea() self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame) self.top_scroll_layout.addWidget(self.top_scroll) self.top_scroll.setWidgetResizable(True) self.top_widget = Qt.QWidget() self.top_scroll.setWidget(self.top_widget) self.top_layout = Qt.QVBoxLayout(self.top_widget) self.top_grid_layout = Qt.QGridLayout() self.top_layout.addLayout(self.top_grid_layout) self.settings = Qt.QSettings("GNU Radio", "bladeRF_loopback") self.restoreGeometry(self.settings.value("geometry").toByteArray()) ################################################## # Parameters ################################################## self.instance = instance self.loopback = loopback self.rx_bandwidth = rx_bandwidth self.rx_buflen = rx_buflen self.rx_frequency = rx_frequency self.rx_lna_gain = rx_lna_gain self.rx_num_buffers = rx_num_buffers self.rx_num_xfers = rx_num_xfers self.rx_sample_rate = rx_sample_rate self.rx_vga_gain = rx_vga_gain self.serial = serial self.tx_bandwidth = tx_bandwidth self.tx_buflen = tx_buflen self.tx_frequency = tx_frequency self.tx_num_buffers = tx_num_buffers self.tx_num_xfers = tx_num_xfers self.tx_sample_rate = tx_sample_rate self.tx_vga1 = tx_vga1 self.tx_vga2 = tx_vga2 self.verbosity = verbosity ################################################## # Variables ################################################## self.bladerf_selection = bladerf_selection = str(instance) if serial == "" else serial self.bladerf_tx_args = bladerf_tx_args = "bladerf=" + bladerf_selection + ",buffers=" + str(tx_num_buffers) + ",buflen=" + str(tx_buflen) + ",num_xfers=" + str(tx_num_xfers) + ",verbosity="+verbosity self.bladerf_rx_args = bladerf_rx_args = "bladerf=" + bladerf_selection + ",loopback=" + loopback + ",buffers=" + str(rx_num_buffers) + ",buflen=" + str(rx_buflen) + ",num_xfers=" + str(rx_num_xfers) + ",verbosity="+verbosity self.gui_tx_vga2 = gui_tx_vga2 = tx_vga2 self.gui_tx_vga1 = gui_tx_vga1 = tx_vga1 self.gui_tx_sample_rate = gui_tx_sample_rate = tx_sample_rate self.gui_tx_frequency = gui_tx_frequency = tx_frequency self.gui_tx_bandwidth = gui_tx_bandwidth = tx_bandwidth self.gui_rx_vga_gain = gui_rx_vga_gain = rx_vga_gain self.gui_rx_sample_rate = gui_rx_sample_rate = rx_sample_rate self.gui_rx_lna_gain = gui_rx_lna_gain = rx_lna_gain self.gui_rx_frequency = gui_rx_frequency = rx_frequency self.gui_rx_bandwidth = gui_rx_bandwidth = rx_bandwidth self.gui_bladerf_tx_args = gui_bladerf_tx_args = bladerf_tx_args self.gui_bladerf_rx_args = gui_bladerf_rx_args = bladerf_rx_args ################################################## # Blocks ################################################## self.tabs = Qt.QTabWidget() self.tabs_widget_0 = Qt.QWidget() self.tabs_layout_0 = Qt.QBoxLayout(Qt.QBoxLayout.TopToBottom, self.tabs_widget_0) self.tabs_grid_layout_0 = Qt.QGridLayout() self.tabs_layout_0.addLayout(self.tabs_grid_layout_0) self.tabs.addTab(self.tabs_widget_0, "RX") self.tabs_widget_1 = Qt.QWidget() self.tabs_layout_1 = Qt.QBoxLayout(Qt.QBoxLayout.TopToBottom, self.tabs_widget_1) self.tabs_grid_layout_1 = Qt.QGridLayout() self.tabs_layout_1.addLayout(self.tabs_grid_layout_1) self.tabs.addTab(self.tabs_widget_1, "TX") self.top_layout.addWidget(self.tabs) self._gui_tx_vga2_range = Range(0, 25, 1, tx_vga2, 200) self._gui_tx_vga2_win = RangeWidget(self._gui_tx_vga2_range, self.set_gui_tx_vga2, "VGA2 Gain", "counter_slider", float) self.tabs_grid_layout_1 .addWidget(self._gui_tx_vga2_win, 0, 7, 1, 2) self._gui_tx_vga1_range = Range(-35, -4, 1, tx_vga1, 200) self._gui_tx_vga1_win = RangeWidget(self._gui_tx_vga1_range, self.set_gui_tx_vga1, "VGA1 Gain", "counter_slider", float) self.tabs_grid_layout_1 .addWidget(self._gui_tx_vga1_win, 0, 5, 1, 2) self._gui_tx_sample_rate_range = Range(1.5e6, 40e6, 500e3, tx_sample_rate, 200) self._gui_tx_sample_rate_win = RangeWidget(self._gui_tx_sample_rate_range, self.set_gui_tx_sample_rate, "Sample Rate", "counter_slider", float) self.tabs_grid_layout_1 .addWidget(self._gui_tx_sample_rate_win, 1, 0, 1, 2) self._gui_tx_frequency_range = Range(0, 3.8e9, 1e6, tx_frequency, 200) self._gui_tx_frequency_win = RangeWidget(self._gui_tx_frequency_range, self.set_gui_tx_frequency, "Frequency", "counter_slider", float) self.tabs_grid_layout_1 .addWidget(self._gui_tx_frequency_win, 0, 0, 1, 5) self._gui_tx_bandwidth_range = Range(1.5e6, 28e6, 0.5e6, tx_bandwidth, 200) self._gui_tx_bandwidth_win = RangeWidget(self._gui_tx_bandwidth_range, self.set_gui_tx_bandwidth, "Bandwidth", "counter_slider", float) self.tabs_grid_layout_1 .addWidget(self._gui_tx_bandwidth_win, 1, 2, 1, 2) self._gui_rx_vga_gain_range = Range(5, 60, 1, rx_vga_gain, 200) self._gui_rx_vga_gain_win = RangeWidget(self._gui_rx_vga_gain_range, self.set_gui_rx_vga_gain, "RX VGA1 + VGA2 Gain", "counter_slider", float) self.tabs_grid_layout_0 .addWidget(self._gui_rx_vga_gain_win, 0, 5, 1, 4) self._gui_rx_sample_rate_range = Range(1.5e6, 40e6, 500e3, rx_sample_rate, 200) self._gui_rx_sample_rate_win = RangeWidget(self._gui_rx_sample_rate_range, self.set_gui_rx_sample_rate, "Sample Rate", "counter_slider", float) self.tabs_grid_layout_0 .addWidget(self._gui_rx_sample_rate_win, 1, 0, 1, 2) self._gui_rx_lna_gain_options = (0, 3, 6, ) self._gui_rx_lna_gain_labels = ("0 dB", "3 dB", "6 dB", ) self._gui_rx_lna_gain_tool_bar = Qt.QToolBar(self) self._gui_rx_lna_gain_tool_bar.addWidget(Qt.QLabel("LNA Gain"+": ")) self._gui_rx_lna_gain_combo_box = Qt.QComboBox() self._gui_rx_lna_gain_tool_bar.addWidget(self._gui_rx_lna_gain_combo_box) for label in self._gui_rx_lna_gain_labels: self._gui_rx_lna_gain_combo_box.addItem(label) self._gui_rx_lna_gain_callback = lambda i: Qt.QMetaObject.invokeMethod(self._gui_rx_lna_gain_combo_box, "setCurrentIndex", Qt.Q_ARG("int", self._gui_rx_lna_gain_options.index(i))) self._gui_rx_lna_gain_callback(self.gui_rx_lna_gain) self._gui_rx_lna_gain_combo_box.currentIndexChanged.connect( lambda i: self.set_gui_rx_lna_gain(self._gui_rx_lna_gain_options[i])) self.tabs_grid_layout_0 .addWidget(self._gui_rx_lna_gain_tool_bar, 0, 9, 1, 1) self._gui_rx_frequency_range = Range(0, 3.8e9, 1e6, rx_frequency, 200) self._gui_rx_frequency_win = RangeWidget(self._gui_rx_frequency_range, self.set_gui_rx_frequency, "Frequency", "counter_slider", float) self.tabs_grid_layout_0 .addWidget(self._gui_rx_frequency_win, 0, 0, 1, 5) self._gui_rx_bandwidth_range = Range(1.5e6, 28e6, 0.5e6, rx_bandwidth, 200) self._gui_rx_bandwidth_win = RangeWidget(self._gui_rx_bandwidth_range, self.set_gui_rx_bandwidth, "Bandwidth", "counter_slider", float) self.tabs_grid_layout_0 .addWidget(self._gui_rx_bandwidth_win, 1, 2, 1, 2) self.qtgui_waterfall_sink_x_0_0 = qtgui.waterfall_sink_c( 8192, #size firdes.WIN_BLACKMAN_hARRIS, #wintype gui_tx_frequency, #fc gui_tx_sample_rate, #bw "", #name 1 #number of inputs ) self.qtgui_waterfall_sink_x_0_0.set_update_time(0.10) self.qtgui_waterfall_sink_x_0_0.enable_grid(False) if not True: self.qtgui_waterfall_sink_x_0_0.disable_legend() if complex == type(float()): self.qtgui_waterfall_sink_x_0_0.set_plot_pos_half(not True) labels = ["", "", "", "", "", "", "", "", "", ""] colors = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] for i in xrange(1): if len(labels[i]) == 0: self.qtgui_waterfall_sink_x_0_0.set_line_label(i, "Data {0}".format(i)) else: self.qtgui_waterfall_sink_x_0_0.set_line_label(i, labels[i]) self.qtgui_waterfall_sink_x_0_0.set_color_map(i, colors[i]) self.qtgui_waterfall_sink_x_0_0.set_line_alpha(i, alphas[i]) self.qtgui_waterfall_sink_x_0_0.set_intensity_range(-140, 10) self._qtgui_waterfall_sink_x_0_0_win = sip.wrapinstance(self.qtgui_waterfall_sink_x_0_0.pyqwidget(), Qt.QWidget) self.tabs_grid_layout_1 .addWidget(self._qtgui_waterfall_sink_x_0_0_win, 2, 5, 5, 5) self.qtgui_waterfall_sink_x_0 = qtgui.waterfall_sink_c( 8192, #size firdes.WIN_BLACKMAN_hARRIS, #wintype gui_rx_frequency, #fc gui_rx_sample_rate, #bw "", #name 1 #number of inputs ) self.qtgui_waterfall_sink_x_0.set_update_time(0.10) self.qtgui_waterfall_sink_x_0.enable_grid(False) if not True: self.qtgui_waterfall_sink_x_0.disable_legend() if complex == type(float()): self.qtgui_waterfall_sink_x_0.set_plot_pos_half(not True) labels = ["", "", "", "", "", "", "", "", "", ""] colors = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] for i in xrange(1): if len(labels[i]) == 0: self.qtgui_waterfall_sink_x_0.set_line_label(i, "Data {0}".format(i)) else: self.qtgui_waterfall_sink_x_0.set_line_label(i, labels[i]) self.qtgui_waterfall_sink_x_0.set_color_map(i, colors[i]) self.qtgui_waterfall_sink_x_0.set_line_alpha(i, alphas[i]) self.qtgui_waterfall_sink_x_0.set_intensity_range(-140, 10) self._qtgui_waterfall_sink_x_0_win = sip.wrapinstance(self.qtgui_waterfall_sink_x_0.pyqwidget(), Qt.QWidget) self.tabs_grid_layout_0 .addWidget(self._qtgui_waterfall_sink_x_0_win, 2, 5, 5, 5) self.qtgui_time_sink_x_0_0 = qtgui.time_sink_c( 8192, #size tx_sample_rate, #samp_rate "", #name 1 #number of inputs ) self.qtgui_time_sink_x_0_0.set_update_time(0.10) self.qtgui_time_sink_x_0_0.set_y_axis(-1, 1) self.qtgui_time_sink_x_0_0.set_y_label("Amplitude", "") self.qtgui_time_sink_x_0_0.enable_tags(-1, True) self.qtgui_time_sink_x_0_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, qtgui.TRIG_SLOPE_POS, 0.0, 0, 0, "") self.qtgui_time_sink_x_0_0.enable_autoscale(False) self.qtgui_time_sink_x_0_0.enable_grid(False) self.qtgui_time_sink_x_0_0.enable_control_panel(False) if not True: self.qtgui_time_sink_x_0_0.disable_legend() labels = ["", "", "", "", "", "", "", "", "", ""] widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] colors = ["blue", "red", "green", "black", "cyan", "magenta", "yellow", "dark red", "dark green", "blue"] styles = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] markers = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1] alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] for i in xrange(2*1): if len(labels[i]) == 0: if(i % 2 == 0): self.qtgui_time_sink_x_0_0.set_line_label(i, "Re{{Data {0}}}".format(i/2)) else: self.qtgui_time_sink_x_0_0.set_line_label(i, "Im{{Data {0}}}".format(i/2)) else: self.qtgui_time_sink_x_0_0.set_line_label(i, labels[i]) self.qtgui_time_sink_x_0_0.set_line_width(i, widths[i]) self.qtgui_time_sink_x_0_0.set_line_color(i, colors[i]) self.qtgui_time_sink_x_0_0.set_line_style(i, styles[i]) self.qtgui_time_sink_x_0_0.set_line_marker(i, markers[i]) self.qtgui_time_sink_x_0_0.set_line_alpha(i, alphas[i]) self._qtgui_time_sink_x_0_0_win = sip.wrapinstance(self.qtgui_time_sink_x_0_0.pyqwidget(), Qt.QWidget) self.tabs_grid_layout_1 .addWidget(self._qtgui_time_sink_x_0_0_win, 7, 0, 3, 10) self.qtgui_time_sink_x_0 = qtgui.time_sink_c( 8192, #size rx_sample_rate, #samp_rate "", #name 1 #number of inputs ) self.qtgui_time_sink_x_0.set_update_time(0.10) self.qtgui_time_sink_x_0.set_y_axis(-1, 1) self.qtgui_time_sink_x_0.set_y_label("Amplitude", "") self.qtgui_time_sink_x_0.enable_tags(-1, True) self.qtgui_time_sink_x_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, qtgui.TRIG_SLOPE_POS, 0.0, 0, 0, "") self.qtgui_time_sink_x_0.enable_autoscale(False) self.qtgui_time_sink_x_0.enable_grid(False) self.qtgui_time_sink_x_0.enable_control_panel(False) if not True: self.qtgui_time_sink_x_0.disable_legend() labels = ["", "", "", "", "", "", "", "", "", ""] widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] colors = ["blue", "red", "green", "black", "cyan", "magenta", "yellow", "dark red", "dark green", "blue"] styles = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] markers = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1] alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] for i in xrange(2*1): if len(labels[i]) == 0: if(i % 2 == 0): self.qtgui_time_sink_x_0.set_line_label(i, "Re{{Data {0}}}".format(i/2)) else: self.qtgui_time_sink_x_0.set_line_label(i, "Im{{Data {0}}}".format(i/2)) else: self.qtgui_time_sink_x_0.set_line_label(i, labels[i]) self.qtgui_time_sink_x_0.set_line_width(i, widths[i]) self.qtgui_time_sink_x_0.set_line_color(i, colors[i]) self.qtgui_time_sink_x_0.set_line_style(i, styles[i]) self.qtgui_time_sink_x_0.set_line_marker(i, markers[i]) self.qtgui_time_sink_x_0.set_line_alpha(i, alphas[i]) self._qtgui_time_sink_x_0_win = sip.wrapinstance(self.qtgui_time_sink_x_0.pyqwidget(), Qt.QWidget) self.tabs_grid_layout_0 .addWidget(self._qtgui_time_sink_x_0_win, 7, 0, 3, 10) self.qtgui_freq_sink_x_0_0 = qtgui.freq_sink_c( 8192, #size firdes.WIN_BLACKMAN_hARRIS, #wintype gui_tx_frequency, #fc gui_tx_sample_rate, #bw "", #name 1 #number of inputs ) self.qtgui_freq_sink_x_0_0.set_update_time(0.10) self.qtgui_freq_sink_x_0_0.set_y_axis(-140, 10) self.qtgui_freq_sink_x_0_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, 0.0, 0, "") self.qtgui_freq_sink_x_0_0.enable_autoscale(False) self.qtgui_freq_sink_x_0_0.enable_grid(False) self.qtgui_freq_sink_x_0_0.set_fft_average(0.1) self.qtgui_freq_sink_x_0_0.enable_control_panel(False) if not True: self.qtgui_freq_sink_x_0_0.disable_legend() if complex == type(float()): self.qtgui_freq_sink_x_0_0.set_plot_pos_half(not True) labels = ["", "", "", "", "", "", "", "", "", ""] widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] colors = ["blue", "red", "green", "black", "cyan", "magenta", "yellow", "dark red", "dark green", "dark blue"] alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] for i in xrange(1): if len(labels[i]) == 0: self.qtgui_freq_sink_x_0_0.set_line_label(i, "Data {0}".format(i)) else: self.qtgui_freq_sink_x_0_0.set_line_label(i, labels[i]) self.qtgui_freq_sink_x_0_0.set_line_width(i, widths[i]) self.qtgui_freq_sink_x_0_0.set_line_color(i, colors[i]) self.qtgui_freq_sink_x_0_0.set_line_alpha(i, alphas[i]) self._qtgui_freq_sink_x_0_0_win = sip.wrapinstance(self.qtgui_freq_sink_x_0_0.pyqwidget(), Qt.QWidget) self.tabs_grid_layout_1 .addWidget(self._qtgui_freq_sink_x_0_0_win, 2, 0, 5, 5) self.qtgui_freq_sink_x_0 = qtgui.freq_sink_c( 8192, #size firdes.WIN_BLACKMAN_hARRIS, #wintype gui_rx_frequency, #fc gui_rx_sample_rate, #bw "", #name 1 #number of inputs ) self.qtgui_freq_sink_x_0.set_update_time(0.10) self.qtgui_freq_sink_x_0.set_y_axis(-140, 10) self.qtgui_freq_sink_x_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, 0.0, 0, "") self.qtgui_freq_sink_x_0.enable_autoscale(False) self.qtgui_freq_sink_x_0.enable_grid(False) self.qtgui_freq_sink_x_0.set_fft_average(0.1) self.qtgui_freq_sink_x_0.enable_control_panel(False) if not True: self.qtgui_freq_sink_x_0.disable_legend() if complex == type(float()): self.qtgui_freq_sink_x_0.set_plot_pos_half(not True) labels = ["", "", "", "", "", "", "", "", "", ""] widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] colors = ["blue", "red", "green", "black", "cyan", "magenta", "yellow", "dark red", "dark green", "dark blue"] alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] for i in xrange(1): if len(labels[i]) == 0: self.qtgui_freq_sink_x_0.set_line_label(i, "Data {0}".format(i)) else: self.qtgui_freq_sink_x_0.set_line_label(i, labels[i]) self.qtgui_freq_sink_x_0.set_line_width(i, widths[i]) self.qtgui_freq_sink_x_0.set_line_color(i, colors[i]) self.qtgui_freq_sink_x_0.set_line_alpha(i, alphas[i]) self._qtgui_freq_sink_x_0_win = sip.wrapinstance(self.qtgui_freq_sink_x_0.pyqwidget(), Qt.QWidget) self.tabs_grid_layout_0 .addWidget(self._qtgui_freq_sink_x_0_win, 2, 0, 5, 5) self.osmosdr_source_0 = osmosdr.source( args="numchan=" + str(1) + " " + bladerf_rx_args ) self.osmosdr_source_0.set_sample_rate(gui_rx_sample_rate) self.osmosdr_source_0.set_center_freq(gui_rx_frequency, 0) self.osmosdr_source_0.set_freq_corr(0, 0) self.osmosdr_source_0.set_dc_offset_mode(1, 0) self.osmosdr_source_0.set_iq_balance_mode(1, 0) self.osmosdr_source_0.set_gain_mode(False, 0) self.osmosdr_source_0.set_gain(gui_rx_lna_gain, 0) self.osmosdr_source_0.set_if_gain(0, 0) self.osmosdr_source_0.set_bb_gain(gui_rx_vga_gain, 0) self.osmosdr_source_0.set_antenna("", 0) self.osmosdr_source_0.set_bandwidth(gui_rx_bandwidth, 0) self.osmosdr_sink_0 = osmosdr.sink( args="numchan=" + str(1) + " " + bladerf_tx_args ) self.osmosdr_sink_0.set_sample_rate(gui_tx_sample_rate) self.osmosdr_sink_0.set_center_freq(gui_tx_frequency, 0) self.osmosdr_sink_0.set_freq_corr(0, 0) self.osmosdr_sink_0.set_gain(gui_tx_vga2, 0) self.osmosdr_sink_0.set_if_gain(0, 0) self.osmosdr_sink_0.set_bb_gain(gui_tx_vga1, 0) self.osmosdr_sink_0.set_antenna("", 0) self.osmosdr_sink_0.set_bandwidth(gui_tx_bandwidth, 0) self._gui_bladerf_tx_args_tool_bar = Qt.QToolBar(self) if None: self._gui_bladerf_tx_args_formatter = None else: self._gui_bladerf_tx_args_formatter = lambda x: x self._gui_bladerf_tx_args_tool_bar.addWidget(Qt.QLabel("bladeRF TX arguments"+": ")) self._gui_bladerf_tx_args_label = Qt.QLabel(str(self._gui_bladerf_tx_args_formatter(self.gui_bladerf_tx_args))) self._gui_bladerf_tx_args_tool_bar.addWidget(self._gui_bladerf_tx_args_label) self.tabs_grid_layout_1.addWidget(self._gui_bladerf_tx_args_tool_bar, 11, 0, 1, 10) self._gui_bladerf_rx_args_tool_bar = Qt.QToolBar(self) if None: self._gui_bladerf_rx_args_formatter = None else: self._gui_bladerf_rx_args_formatter = lambda x: x self._gui_bladerf_rx_args_tool_bar.addWidget(Qt.QLabel("bladeRF RX arguments"+": ")) self._gui_bladerf_rx_args_label = Qt.QLabel(str(self._gui_bladerf_rx_args_formatter(self.gui_bladerf_rx_args))) self._gui_bladerf_rx_args_tool_bar.addWidget(self._gui_bladerf_rx_args_label) self.tabs_grid_layout_0 .addWidget(self._gui_bladerf_rx_args_tool_bar, 11, 0, 1, 10) self.digital_psk_mod_0 = digital.psk.psk_mod( constellation_points=4, mod_code="none", differential=True, samples_per_symbol=8, excess_bw=0.35, verbose=False, log=False, ) self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.3, )) self.analog_random_source_x_0 = blocks.vector_source_b(map(int, numpy.random.randint(0, 255, 1000)), True) ################################################## # Connections ################################################## self.connect((self.analog_random_source_x_0, 0), (self.digital_psk_mod_0, 0)) self.connect((self.blocks_multiply_const_vxx_0, 0), (self.osmosdr_sink_0, 0)) self.connect((self.blocks_multiply_const_vxx_0, 0), (self.qtgui_freq_sink_x_0_0, 0)) self.connect((self.blocks_multiply_const_vxx_0, 0), (self.qtgui_time_sink_x_0_0, 0)) self.connect((self.blocks_multiply_const_vxx_0, 0), (self.qtgui_waterfall_sink_x_0_0, 0)) self.connect((self.digital_psk_mod_0, 0), (self.blocks_multiply_const_vxx_0, 0)) self.connect((self.osmosdr_source_0, 0), (self.qtgui_freq_sink_x_0, 0)) self.connect((self.osmosdr_source_0, 0), (self.qtgui_time_sink_x_0, 0)) self.connect((self.osmosdr_source_0, 0), (self.qtgui_waterfall_sink_x_0, 0)) def closeEvent(self, event): self.settings = Qt.QSettings("GNU Radio", "bladeRF_loopback") self.settings.setValue("geometry", self.saveGeometry()) event.accept() def get_instance(self): return self.instance def set_instance(self, instance): self.instance = instance self.set_bladerf_selection(str(self.instance) if self.serial == "" else self.serial) def get_loopback(self): return self.loopback def set_loopback(self, loopback): self.loopback = loopback self.set_bladerf_rx_args("bladerf=" + self.bladerf_selection + ",loopback=" + self.loopback + ",buffers=" + str(self.rx_num_buffers) + ",buflen=" + str(self.rx_buflen) + ",num_xfers=" + str(self.rx_num_xfers) + ",verbosity="+self.verbosity) def get_rx_bandwidth(self): return self.rx_bandwidth def set_rx_bandwidth(self, rx_bandwidth): self.rx_bandwidth = rx_bandwidth self.set_gui_rx_bandwidth(self.rx_bandwidth) def get_rx_buflen(self): return self.rx_buflen def set_rx_buflen(self, rx_buflen): self.rx_buflen = rx_buflen self.set_bladerf_rx_args("bladerf=" + self.bladerf_selection + ",loopback=" + self.loopback + ",buffers=" + str(self.rx_num_buffers) + ",buflen=" + str(self.rx_buflen) + ",num_xfers=" + str(self.rx_num_xfers) + ",verbosity="+self.verbosity) def get_rx_frequency(self): return self.rx_frequency def set_rx_frequency(self, rx_frequency): self.rx_frequency = rx_frequency self.set_gui_rx_frequency(self.rx_frequency) def get_rx_lna_gain(self): return self.rx_lna_gain def set_rx_lna_gain(self, rx_lna_gain): self.rx_lna_gain = rx_lna_gain self.set_gui_rx_lna_gain(self.rx_lna_gain) def get_rx_num_buffers(self): return self.rx_num_buffers def set_rx_num_buffers(self, rx_num_buffers): self.rx_num_buffers = rx_num_buffers self.set_bladerf_rx_args("bladerf=" + self.bladerf_selection + ",loopback=" + self.loopback + ",buffers=" + str(self.rx_num_buffers) + ",buflen=" + str(self.rx_buflen) + ",num_xfers=" + str(self.rx_num_xfers) + ",verbosity="+self.verbosity) def get_rx_num_xfers(self): return self.rx_num_xfers def set_rx_num_xfers(self, rx_num_xfers): self.rx_num_xfers = rx_num_xfers self.set_bladerf_rx_args("bladerf=" + self.bladerf_selection + ",loopback=" + self.loopback + ",buffers=" + str(self.rx_num_buffers) + ",buflen=" + str(self.rx_buflen) + ",num_xfers=" + str(self.rx_num_xfers) + ",verbosity="+self.verbosity) def get_rx_sample_rate(self): return self.rx_sample_rate def set_rx_sample_rate(self, rx_sample_rate): self.rx_sample_rate = rx_sample_rate self.set_gui_rx_sample_rate(self.rx_sample_rate) self.qtgui_time_sink_x_0.set_samp_rate(self.rx_sample_rate) def get_rx_vga_gain(self): return self.rx_vga_gain def set_rx_vga_gain(self, rx_vga_gain): self.rx_vga_gain = rx_vga_gain self.set_gui_rx_vga_gain(self.rx_vga_gain) def get_serial(self): return self.serial def set_serial(self, serial): self.serial = serial self.set_bladerf_selection(str(self.instance) if self.serial == "" else self.serial) def get_tx_bandwidth(self): return self.tx_bandwidth def set_tx_bandwidth(self, tx_bandwidth): self.tx_bandwidth = tx_bandwidth self.set_gui_tx_bandwidth(self.tx_bandwidth) def get_tx_buflen(self): return self.tx_buflen def set_tx_buflen(self, tx_buflen): self.tx_buflen = tx_buflen self.set_bladerf_tx_args("bladerf=" + self.bladerf_selection + ",buffers=" + str(self.tx_num_buffers) + ",buflen=" + str(self.tx_buflen) + ",num_xfers=" + str(self.tx_num_xfers) + ",verbosity="+self.verbosity) def get_tx_frequency(self): return self.tx_frequency def set_tx_frequency(self, tx_frequency): self.tx_frequency = tx_frequency self.set_gui_tx_frequency(self.tx_frequency) def get_tx_num_buffers(self): return self.tx_num_buffers def set_tx_num_buffers(self, tx_num_buffers): self.tx_num_buffers = tx_num_buffers self.set_bladerf_tx_args("bladerf=" + self.bladerf_selection + ",buffers=" + str(self.tx_num_buffers) + ",buflen=" + str(self.tx_buflen) + ",num_xfers=" + str(self.tx_num_xfers) + ",verbosity="+self.verbosity) def get_tx_num_xfers(self): return self.tx_num_xfers def set_tx_num_xfers(self, tx_num_xfers): self.tx_num_xfers = tx_num_xfers self.set_bladerf_tx_args("bladerf=" + self.bladerf_selection + ",buffers=" + str(self.tx_num_buffers) + ",buflen=" + str(self.tx_buflen) + ",num_xfers=" + str(self.tx_num_xfers) + ",verbosity="+self.verbosity) def get_tx_sample_rate(self): return self.tx_sample_rate def set_tx_sample_rate(self, tx_sample_rate): self.tx_sample_rate = tx_sample_rate self.set_gui_tx_sample_rate(self.tx_sample_rate) self.qtgui_time_sink_x_0_0.set_samp_rate(self.tx_sample_rate) def get_tx_vga1(self): return self.tx_vga1 def set_tx_vga1(self, tx_vga1): self.tx_vga1 = tx_vga1 self.set_gui_tx_vga1(self.tx_vga1) def get_tx_vga2(self): return self.tx_vga2 def set_tx_vga2(self, tx_vga2): self.tx_vga2 = tx_vga2 self.set_gui_tx_vga2(self.tx_vga2) def get_verbosity(self): return self.verbosity def set_verbosity(self, verbosity): self.verbosity = verbosity self.set_bladerf_rx_args("bladerf=" + self.bladerf_selection + ",loopback=" + self.loopback + ",buffers=" + str(self.rx_num_buffers) + ",buflen=" + str(self.rx_buflen) + ",num_xfers=" + str(self.rx_num_xfers) + ",verbosity="+self.verbosity) self.set_bladerf_tx_args("bladerf=" + self.bladerf_selection + ",buffers=" + str(self.tx_num_buffers) + ",buflen=" + str(self.tx_buflen) + ",num_xfers=" + str(self.tx_num_xfers) + ",verbosity="+self.verbosity) def get_bladerf_selection(self): return self.bladerf_selection def set_bladerf_selection(self, bladerf_selection): self.bladerf_selection = bladerf_selection self.set_bladerf_rx_args("bladerf=" + self.bladerf_selection + ",loopback=" + self.loopback + ",buffers=" + str(self.rx_num_buffers) + ",buflen=" + str(self.rx_buflen) + ",num_xfers=" + str(self.rx_num_xfers) + ",verbosity="+self.verbosity) self.set_bladerf_tx_args("bladerf=" + self.bladerf_selection + ",buffers=" + str(self.tx_num_buffers) + ",buflen=" + str(self.tx_buflen) + ",num_xfers=" + str(self.tx_num_xfers) + ",verbosity="+self.verbosity) def get_bladerf_tx_args(self): return self.bladerf_tx_args def set_bladerf_tx_args(self, bladerf_tx_args): self.bladerf_tx_args = bladerf_tx_args self.set_gui_bladerf_tx_args(self._gui_bladerf_tx_args_formatter(self.bladerf_tx_args)) def get_bladerf_rx_args(self): return self.bladerf_rx_args def set_bladerf_rx_args(self, bladerf_rx_args): self.bladerf_rx_args = bladerf_rx_args self.set_gui_bladerf_rx_args(self._gui_bladerf_rx_args_formatter(self.bladerf_rx_args)) def get_gui_tx_vga2(self): return self.gui_tx_vga2 def set_gui_tx_vga2(self, gui_tx_vga2): self.gui_tx_vga2 = gui_tx_vga2 self.osmosdr_sink_0.set_gain(self.gui_tx_vga2, 0) def get_gui_tx_vga1(self): return self.gui_tx_vga1 def set_gui_tx_vga1(self, gui_tx_vga1): self.gui_tx_vga1 = gui_tx_vga1 self.osmosdr_sink_0.set_bb_gain(self.gui_tx_vga1, 0) def get_gui_tx_sample_rate(self): return self.gui_tx_sample_rate def set_gui_tx_sample_rate(self, gui_tx_sample_rate): self.gui_tx_sample_rate = gui_tx_sample_rate self.osmosdr_sink_0.set_sample_rate(self.gui_tx_sample_rate) self.qtgui_freq_sink_x_0_0.set_frequency_range(self.gui_tx_frequency, self.gui_tx_sample_rate) self.qtgui_waterfall_sink_x_0_0.set_frequency_range(self.gui_tx_frequency, self.gui_tx_sample_rate) def get_gui_tx_frequency(self): return self.gui_tx_frequency def set_gui_tx_frequency(self, gui_tx_frequency): self.gui_tx_frequency = gui_tx_frequency self.osmosdr_sink_0.set_center_freq(self.gui_tx_frequency, 0) self.qtgui_freq_sink_x_0_0.set_frequency_range(self.gui_tx_frequency, self.gui_tx_sample_rate) self.qtgui_waterfall_sink_x_0_0.set_frequency_range(self.gui_tx_frequency, self.gui_tx_sample_rate) def get_gui_tx_bandwidth(self): return self.gui_tx_bandwidth def set_gui_tx_bandwidth(self, gui_tx_bandwidth): self.gui_tx_bandwidth = gui_tx_bandwidth self.osmosdr_sink_0.set_bandwidth(self.gui_tx_bandwidth, 0) def get_gui_rx_vga_gain(self): return self.gui_rx_vga_gain def set_gui_rx_vga_gain(self, gui_rx_vga_gain): self.gui_rx_vga_gain = gui_rx_vga_gain self.osmosdr_source_0.set_bb_gain(self.gui_rx_vga_gain, 0) def get_gui_rx_sample_rate(self): return self.gui_rx_sample_rate def set_gui_rx_sample_rate(self, gui_rx_sample_rate): self.gui_rx_sample_rate = gui_rx_sample_rate self.osmosdr_source_0.set_sample_rate(self.gui_rx_sample_rate) self.qtgui_freq_sink_x_0.set_frequency_range(self.gui_rx_frequency, self.gui_rx_sample_rate) self.qtgui_waterfall_sink_x_0.set_frequency_range(self.gui_rx_frequency, self.gui_rx_sample_rate) def get_gui_rx_lna_gain(self): return self.gui_rx_lna_gain def set_gui_rx_lna_gain(self, gui_rx_lna_gain): self.gui_rx_lna_gain = gui_rx_lna_gain self._gui_rx_lna_gain_callback(self.gui_rx_lna_gain) self.osmosdr_source_0.set_gain(self.gui_rx_lna_gain, 0) def get_gui_rx_frequency(self): return self.gui_rx_frequency def set_gui_rx_frequency(self, gui_rx_frequency): self.gui_rx_frequency = gui_rx_frequency self.osmosdr_source_0.set_center_freq(self.gui_rx_frequency, 0) self.qtgui_freq_sink_x_0.set_frequency_range(self.gui_rx_frequency, self.gui_rx_sample_rate) self.qtgui_waterfall_sink_x_0.set_frequency_range(self.gui_rx_frequency, self.gui_rx_sample_rate) def get_gui_rx_bandwidth(self): return self.gui_rx_bandwidth def set_gui_rx_bandwidth(self, gui_rx_bandwidth): self.gui_rx_bandwidth = gui_rx_bandwidth self.osmosdr_source_0.set_bandwidth(self.gui_rx_bandwidth, 0) def get_gui_bladerf_tx_args(self): return self.gui_bladerf_tx_args def set_gui_bladerf_tx_args(self, gui_bladerf_tx_args): self.gui_bladerf_tx_args = gui_bladerf_tx_args Qt.QMetaObject.invokeMethod(self._gui_bladerf_tx_args_label, "setText", Qt.Q_ARG("QString", str(self.gui_bladerf_tx_args))) def get_gui_bladerf_rx_args(self): return self.gui_bladerf_rx_args def set_gui_bladerf_rx_args(self, gui_bladerf_rx_args): self.gui_bladerf_rx_args = gui_bladerf_rx_args Qt.QMetaObject.invokeMethod(self._gui_bladerf_rx_args_label, "setText", Qt.Q_ARG("QString", str(self.gui_bladerf_rx_args))) if __name__ == '__main__': parser = OptionParser(option_class=eng_option, usage="%prog: [options]") parser.add_option("", "--instance", dest="instance", type="intx", default=0, help="Set 0-indexed device instance describing device to use. Ignored if a serial-number is provided. [default=%default]") parser.add_option("-l", "--loopback", dest="loopback", type="string", default="bb_txvga1_rxlpf", help="Set Loopback mode [default=%default]") parser.add_option("", "--rx-bandwidth", dest="rx_bandwidth", type="eng_float", default=eng_notation.num_to_str(1.5e6), help="Set Bandwidth [default=%default]") parser.add_option("", "--rx-frequency", dest="rx_frequency", type="eng_float", default=eng_notation.num_to_str(915e6), help="Set Frequency [default=%default]") parser.add_option("", "--rx-lna-gain", dest="rx_lna_gain", type="intx", default=6, help="Set RX LNA Gain [default=%default]") parser.add_option("", "--rx-num-buffers", dest="rx_num_buffers", type="intx", default=16, help="Set Number of RX buffers to use [default=%default]") parser.add_option("", "--rx-num-xfers", dest="rx_num_xfers", type="intx", default=8, help="Set Number of maximum in-flight RX USB transfers. Should be <= (num-buffers / 2). [default=%default]") parser.add_option("", "--rx-sample-rate", dest="rx_sample_rate", type="eng_float", default=eng_notation.num_to_str(3e6), help="Set Sample Rate [default=%default]") parser.add_option("", "--rx-vga-gain", dest="rx_vga_gain", type="intx", default=20, help="Set RX VGA1 + VGA2 Gain [default=%default]") parser.add_option("", "--serial", dest="serial", type="string", default="", help="Set bladeRF serial number [default=%default]") parser.add_option("", "--tx-bandwidth", dest="tx_bandwidth", type="eng_float", default=eng_notation.num_to_str(1.5e6), help="Set Bandwidth [default=%default]") parser.add_option("", "--tx-frequency", dest="tx_frequency", type="eng_float", default=eng_notation.num_to_str(915e6), help="Set Frequency [default=%default]") parser.add_option("", "--tx-num-buffers", dest="tx_num_buffers", type="intx", default=16, help="Set Number of TX buffers to use [default=%default]") parser.add_option("", "--tx-num-xfers", dest="tx_num_xfers", type="intx", default=8, help="Set Number of maximum in-flight TX USB transfers. Should be <= (num-buffers / 2). [default=%default]") parser.add_option("", "--tx-sample-rate", dest="tx_sample_rate", type="eng_float", default=eng_notation.num_to_str(3e6), help="Set Sample Rate [default=%default]") parser.add_option("", "--tx-vga1", dest="tx_vga1", type="intx", default=-18, help="Set TX VGA1 Gain [default=%default]") parser.add_option("", "--tx-vga2", dest="tx_vga2", type="intx", default=0, help="Set TX VGA2 Gain [default=%default]") parser.add_option("", "--verbosity", dest="verbosity", type="string", default="info", help="Set libbladeRF log verbosity. Options are: verbose, debug, info, warning, error, critical, silent [default=%default]") (options, args) = parser.parse_args() from distutils.version import StrictVersion if StrictVersion(Qt.qVersion()) >= StrictVersion("4.5.0"): Qt.QApplication.setGraphicsSystem(gr.prefs().get_string('qtgui','style','raster')) qapp = Qt.QApplication(sys.argv) tb = bladeRF_loopback(instance=options.instance, loopback=options.loopback, rx_bandwidth=options.rx_bandwidth, rx_frequency=options.rx_frequency, rx_lna_gain=options.rx_lna_gain, rx_num_buffers=options.rx_num_buffers, rx_num_xfers=options.rx_num_xfers, rx_sample_rate=options.rx_sample_rate, rx_vga_gain=options.rx_vga_gain, serial=options.serial, tx_bandwidth=options.tx_bandwidth, tx_frequency=options.tx_frequency, tx_num_buffers=options.tx_num_buffers, tx_num_xfers=options.tx_num_xfers, tx_sample_rate=options.tx_sample_rate, tx_vga1=options.tx_vga1, tx_vga2=options.tx_vga2, verbosity=options.verbosity) tb.start() tb.show() def quitting(): tb.stop() tb.wait() qapp.connect(qapp, Qt.SIGNAL("aboutToQuit()"), quitting) qapp.exec_() tb = None # to clean up Qt widgets bladeRF-2024.05/host/examples/gnuradio/rx_gui/000077500000000000000000000000001457144405000210715ustar00rootroot00000000000000bladeRF-2024.05/host/examples/gnuradio/rx_gui/README.md000066400000000000000000000010511457144405000223450ustar00rootroot00000000000000# GNU Radio Companion RX GUI Example # This flowgraph is intended to serve as a simple RX template for bladeRF-based GRC projects. It exemplifies a number of the features provided by the `osmocom Source` block, and how these features map to functionality provided by the underlying libbladeRF library. The various parameters are exposed to the command-line via `Parameter` blocks. The values of these blocks are used to: * Set initial values in each of the GUI widgets. * Construct the `Device Arguments` string provided to the `osmocom Source` bladeRF-2024.05/host/examples/gnuradio/rx_gui/bladeRF_rx.grc000066400000000000000000002237131457144405000236060ustar00rootroot00000000000000 Fri Nov 6 12:20:43 2015 options author Nuand, LLC <bladeRF@nuand.com> alias window_size 2048, 1024 category Custom comment description A simple RX-only GUI that demonstrates the usage of various RX controls. _enabled True _coordinate (16, 19) _rotation 0 generate_options qt_gui id bladeRF_rx max_nouts 0 realtime_scheduling run_options prompt run True thread_safe_setters title "Simple bladeRF RX GUI" variable comment _enabled True _coordinate (40, 235) _rotation 0 id bladerf_args value "bladerf=" + bladerf_selection + ",buffers=" + str(num_buffers) + ",buflen=" + str(buflen) + ",num_xfers=" + str(num_xfers) + ",verbosity="+verbosity variable comment _enabled True _coordinate (48, 163) _rotation 0 id bladerf_selection value str(instance) if serial == "" else serial variable_qtgui_label comment value bladerf_args _enabled True formatter None _coordinate (448, 419) gui_hint 11, 0, 1, 10 _rotation 0 id gui_bladerf_args label "bladeRF arguments" type string variable_qtgui_range comment value dc_offset_i _enabled True _coordinate (1184, 283) gui_hint 1, 4, 1, 2 _rotation 0 id gui_dc_offset_i label I DC Offset min_len 200 orient Qt.Horizontal start -1.0 step (1.0 / 2048.0) stop 1.0 rangeType float widget counter_slider variable_qtgui_range comment value dc_offset_q _enabled True _coordinate (1296, 283) gui_hint 1, 6, 1, 2 _rotation 0 id gui_dc_offset_q label Q DC Offset min_len 200 orient Qt.Horizontal start -1.0 step (1.0 / 2048.0) stop 1.0 rangeType float widget counter_slider variable_qtgui_range comment value rx_bandwidth _enabled True _coordinate (1048, 283) gui_hint 1, 2, 1, 2 _rotation 0 id gui_rx_bandwidth label Bandwidth min_len 200 orient Qt.Horizontal start 1.5e6 step 0.5e6 stop 28e6 rangeType float widget counter_slider variable_qtgui_range comment value rx_frequency _enabled True _coordinate (448, 283) gui_hint 0, 0, 1, 5 _rotation 0 id gui_rx_frequency label Frequency min_len 200 orient Qt.Horizontal start 0 step 1e6 stop 3.8e9 rangeType float widget counter_slider variable_qtgui_chooser comment value rx_lna_gain _enabled True _coordinate (776, 283) gui_hint 0, 9, 1, 1 _rotation 0 id gui_rx_lna_gain label0 0 dB label1 3 dB label2 6 dB label3 label4 label LNA Gain labels [] num_opts 3 option0 0 option1 3 option2 6 option3 3 option4 4 options [0, 1, 2] orient Qt.QVBoxLayout type int widget combo_box variable_qtgui_range comment value rx_sample_rate _enabled True _coordinate (904, 283) gui_hint 1, 0, 1, 2 _rotation 0 id gui_rx_sample_rate label Sample Rate min_len 200 orient Qt.Horizontal start 1.5e6 step 500e3 stop 40e6 rangeType float widget counter_slider variable_qtgui_range comment value rx_vga_gain _enabled True _coordinate (592, 283) gui_hint 0, 5, 1, 4 _rotation 0 id gui_rx_vga_gain label RX VGA1 + VGA2 Gain min_len 200 orient Qt.Horizontal start 5 step 1 stop 60 rangeType float widget counter_slider blocks_add_const_vxx alias comment const gui_dc_offset_i affinity _enabled True _coordinate (456, 707) _rotation 0 id blocks_add_const_vxx_0 type float maxoutbuf 0 minoutbuf 0 vlen 1 blocks_add_const_vxx alias comment const gui_dc_offset_q affinity _enabled True _coordinate (456, 811) _rotation 0 id blocks_add_const_vxx_0_0 type float maxoutbuf 0 minoutbuf 0 vlen 1 blocks_complex_to_float alias comment affinity _enabled True _coordinate (264, 753) _rotation 0 id blocks_complex_to_float_0 maxoutbuf 0 minoutbuf 0 vlen 1 blocks_float_to_complex alias comment affinity _enabled True _coordinate (616, 753) _rotation 0 id blocks_float_to_complex_0 maxoutbuf 0 minoutbuf 0 vlen 1 parameter alias comment _enabled True _coordinate (960, 147) _rotation 0 id buflen label Length of buffers, in samples. Should be a multiple of 1024. short_id type value 4096 parameter alias comment _enabled True _coordinate (1104, 19) _rotation 0 id dc_offset_i label DC offset compensation for I channel short_id type eng_float value 0 parameter alias comment _enabled True _coordinate (1264, 19) _rotation 0 id dc_offset_q label DC offset compensation for Q channel short_id type eng_float value 0 fosphor_qt_sink_c alias freq_center gui_rx_frequency comment affinity _enabled 0 _coordinate (896, 555) gui_hint 2, 0, 5, 10 _rotation 0 id fosphor_qt_sink_c_0 freq_span gui_rx_sample_rate wintype window.WIN_BLACKMAN_hARRIS parameter alias comment _enabled True _coordinate (1128, 147) _rotation 0 id instance label 0-indexed device instance describing device to use. Ignored if a serial-number is provided. short_id type intx value 0 note alias comment _enabled True _coordinate (280, 19) _rotation 0 id note_0 note Command line params note alias comment _enabled True _coordinate (320, 283) _rotation 0 id note_0_0 note GUI Controls note alias comment _enabled True _coordinate (904, 507) _rotation 0 id note_1 note When enabling the fosphor sink, disable the Qt Frequency and Waterfall sinks. note alias comment _enabled True _coordinate (416, 643) _rotation 0 id note_2 note TO DO: Expose bladeRF's internal DC offset compensation in the gr-osmosdr block and use this instead. parameter alias comment _enabled True _coordinate (624, 139) _rotation 0 id num_buffers label Number of buffers to use short_id type intx value 16 parameter alias comment _enabled True _coordinate (792, 139) _rotation 0 id num_xfers label Number of maximum in-flight USB transfers. Should be <= (num-buffers / 2). short_id type intx value 8 osmosdr_source alias ant0 bb_gain0 gui_rx_vga_gain bw0 gui_rx_bandwidth dc_offset_mode0 1 corr0 0 freq0 gui_rx_frequency gain_mode0 False if_gain0 0 iq_balance_mode0 1 gain0 gui_rx_lna_gain ant10 bb_gain10 20 bw10 0 dc_offset_mode10 0 corr10 0 freq10 100e6 gain_mode10 False if_gain10 20 iq_balance_mode10 0 gain10 10 ant11 bb_gain11 20 bw11 0 dc_offset_mode11 0 corr11 0 freq11 100e6 gain_mode11 False if_gain11 20 iq_balance_mode11 0 gain11 10 ant12 bb_gain12 20 bw12 0 dc_offset_mode12 0 corr12 0 freq12 100e6 gain_mode12 False if_gain12 20 iq_balance_mode12 0 gain12 10 ant13 bb_gain13 20 bw13 0 dc_offset_mode13 0 corr13 0 freq13 100e6 gain_mode13 False if_gain13 20 iq_balance_mode13 0 gain13 10 ant14 bb_gain14 20 bw14 0 dc_offset_mode14 0 corr14 0 freq14 100e6 gain_mode14 False if_gain14 20 iq_balance_mode14 0 gain14 10 ant15 bb_gain15 20 bw15 0 dc_offset_mode15 0 corr15 0 freq15 100e6 gain_mode15 False if_gain15 20 iq_balance_mode15 0 gain15 10 ant16 bb_gain16 20 bw16 0 dc_offset_mode16 0 corr16 0 freq16 100e6 gain_mode16 False if_gain16 20 iq_balance_mode16 0 gain16 10 ant17 bb_gain17 20 bw17 0 dc_offset_mode17 0 corr17 0 freq17 100e6 gain_mode17 False if_gain17 20 iq_balance_mode17 0 gain17 10 ant18 bb_gain18 20 bw18 0 dc_offset_mode18 0 corr18 0 freq18 100e6 gain_mode18 False if_gain18 20 iq_balance_mode18 0 gain18 10 ant19 bb_gain19 20 bw19 0 dc_offset_mode19 0 corr19 0 freq19 100e6 gain_mode19 False if_gain19 20 iq_balance_mode19 0 gain19 10 ant1 bb_gain1 20 bw1 0 dc_offset_mode1 0 corr1 0 freq1 100e6 gain_mode1 False if_gain1 20 iq_balance_mode1 0 gain1 10 ant20 bb_gain20 20 bw20 0 dc_offset_mode20 0 corr20 0 freq20 100e6 gain_mode20 False if_gain20 20 iq_balance_mode20 0 gain20 10 ant21 bb_gain21 20 bw21 0 dc_offset_mode21 0 corr21 0 freq21 100e6 gain_mode21 False if_gain21 20 iq_balance_mode21 0 gain21 10 ant22 bb_gain22 20 bw22 0 dc_offset_mode22 0 corr22 0 freq22 100e6 gain_mode22 False if_gain22 20 iq_balance_mode22 0 gain22 10 ant23 bb_gain23 20 bw23 0 dc_offset_mode23 0 corr23 0 freq23 100e6 gain_mode23 False if_gain23 20 iq_balance_mode23 0 gain23 10 ant24 bb_gain24 20 bw24 0 dc_offset_mode24 0 corr24 0 freq24 100e6 gain_mode24 False if_gain24 20 iq_balance_mode24 0 gain24 10 ant25 bb_gain25 20 bw25 0 dc_offset_mode25 0 corr25 0 freq25 100e6 gain_mode25 False if_gain25 20 iq_balance_mode25 0 gain25 10 ant26 bb_gain26 20 bw26 0 dc_offset_mode26 0 corr26 0 freq26 100e6 gain_mode26 False if_gain26 20 iq_balance_mode26 0 gain26 10 ant27 bb_gain27 20 bw27 0 dc_offset_mode27 0 corr27 0 freq27 100e6 gain_mode27 False if_gain27 20 iq_balance_mode27 0 gain27 10 ant28 bb_gain28 20 bw28 0 dc_offset_mode28 0 corr28 0 freq28 100e6 gain_mode28 False if_gain28 20 iq_balance_mode28 0 gain28 10 ant29 bb_gain29 20 bw29 0 dc_offset_mode29 0 corr29 0 freq29 100e6 gain_mode29 False if_gain29 20 iq_balance_mode29 0 gain29 10 ant2 bb_gain2 20 bw2 0 dc_offset_mode2 0 corr2 0 freq2 100e6 gain_mode2 False if_gain2 20 iq_balance_mode2 0 gain2 10 ant30 bb_gain30 20 bw30 0 dc_offset_mode30 0 corr30 0 freq30 100e6 gain_mode30 False if_gain30 20 iq_balance_mode30 0 gain30 10 ant31 bb_gain31 20 bw31 0 dc_offset_mode31 0 corr31 0 freq31 100e6 gain_mode31 False if_gain31 20 iq_balance_mode31 0 gain31 10 ant3 bb_gain3 20 bw3 0 dc_offset_mode3 0 corr3 0 freq3 100e6 gain_mode3 False if_gain3 20 iq_balance_mode3 0 gain3 10 ant4 bb_gain4 20 bw4 0 dc_offset_mode4 0 corr4 0 freq4 100e6 gain_mode4 False if_gain4 20 iq_balance_mode4 0 gain4 10 ant5 bb_gain5 20 bw5 0 dc_offset_mode5 0 corr5 0 freq5 100e6 gain_mode5 False if_gain5 20 iq_balance_mode5 0 gain5 10 ant6 bb_gain6 20 bw6 0 dc_offset_mode6 0 corr6 0 freq6 100e6 gain_mode6 False if_gain6 20 iq_balance_mode6 0 gain6 10 ant7 bb_gain7 20 bw7 0 dc_offset_mode7 0 corr7 0 freq7 100e6 gain_mode7 False if_gain7 20 iq_balance_mode7 0 gain7 10 ant8 bb_gain8 20 bw8 0 dc_offset_mode8 0 corr8 0 freq8 100e6 gain_mode8 False if_gain8 20 iq_balance_mode8 0 gain8 10 ant9 bb_gain9 20 bw9 0 dc_offset_mode9 0 corr9 0 freq9 100e6 gain_mode9 False if_gain9 20 iq_balance_mode9 0 gain9 10 comment affinity args bladerf_args _enabled True _coordinate (16, 683) _rotation 0 id osmosdr_source_0 maxoutbuf 0 clock_source0 time_source0 clock_source1 time_source1 clock_source2 time_source2 clock_source3 time_source3 clock_source4 time_source4 clock_source5 time_source5 clock_source6 time_source6 clock_source7 time_source7 minoutbuf 0 nchan 1 num_mboards 1 type fc32 sample_rate gui_rx_sample_rate sync qtgui_freq_sink_x autoscale False average 0.1 bw gui_rx_sample_rate alias fc gui_rx_frequency comment ctrlpanel False affinity _enabled 1 fftsize 8192 _coordinate (896, 691) gui_hint 2, 0, 5, 5 _rotation 0 grid False id qtgui_freq_sink_x_0 legend True alpha1 1.0 color1 "blue" label1 width1 1 alpha10 1.0 color10 "dark blue" label10 width10 1 alpha2 1.0 color2 "red" label2 width2 1 alpha3 1.0 color3 "green" label3 width3 1 alpha4 1.0 color4 "black" label4 width4 1 alpha5 1.0 color5 "cyan" label5 width5 1 alpha6 1.0 color6 "magenta" label6 width6 1 alpha7 1.0 color7 "yellow" label7 width7 1 alpha8 1.0 color8 "dark red" label8 width8 1 alpha9 1.0 color9 "dark green" label9 width9 1 maxoutbuf 0 minoutbuf 0 name "" nconnections 1 showports True freqhalf True tr_chan 0 tr_level 0.0 tr_mode qtgui.TRIG_MODE_FREE tr_tag "" type complex update_time 0.10 wintype firdes.WIN_BLACKMAN_hARRIS ymax 10 ymin -140 qtgui_time_sink_x autoscale False alias comment ctrlpanel False affinity entags True _enabled True _coordinate (896, 923) gui_hint 7, 0, 3, 10 _rotation 0 grid False id qtgui_time_sink_x_0 legend True alpha1 1.0 color1 "blue" label1 marker1 -1 style1 1 width1 1 alpha10 1.0 color10 "blue" label10 marker10 -1 style10 1 width10 1 alpha2 1.0 color2 "red" label2 marker2 -1 style2 1 width2 1 alpha3 1.0 color3 "green" label3 marker3 -1 style3 1 width3 1 alpha4 1.0 color4 "black" label4 marker4 -1 style4 1 width4 1 alpha5 1.0 color5 "cyan" label5 marker5 -1 style5 1 width5 1 alpha6 1.0 color6 "magenta" label6 marker6 -1 style6 1 width6 1 alpha7 1.0 color7 "yellow" label7 marker7 -1 style7 1 width7 1 alpha8 1.0 color8 "dark red" label8 marker8 -1 style8 1 width8 1 alpha9 1.0 color9 "dark green" label9 marker9 -1 style9 1 width9 1 name "" nconnections 1 size 8192 srate rx_sample_rate tr_chan 0 tr_delay 0 tr_level 0.0 tr_mode qtgui.TRIG_MODE_FREE tr_slope qtgui.TRIG_SLOPE_POS tr_tag "" type complex update_time 0.10 ylabel Amplitude yunit "" ymax 1 ymin -1 qtgui_waterfall_sink_x bw gui_rx_sample_rate alias fc gui_rx_frequency comment affinity _enabled 1 fftsize 8192 _coordinate (896, 787) gui_hint 2, 5, 5, 5 _rotation 0 grid False id qtgui_waterfall_sink_x_0 int_max 10 int_min -140 legend True alpha1 1.0 color1 0 label1 alpha10 1.0 color10 0 label10 alpha2 1.0 color2 0 label2 alpha3 1.0 color3 0 label3 alpha4 1.0 color4 0 label4 alpha5 1.0 color5 0 label5 alpha6 1.0 color6 0 label6 alpha7 1.0 color7 0 label7 alpha8 1.0 color8 0 label8 alpha9 1.0 color9 0 label9 maxoutbuf 0 minoutbuf 0 name "" nconnections 1 showports True freqhalf True type complex update_time 0.10 wintype firdes.WIN_BLACKMAN_hARRIS parameter alias comment _enabled True _coordinate (576, 19) _rotation 0 id rx_bandwidth label Bandwidth short_id b type eng_float value 1.5e6 parameter alias comment _enabled True _coordinate (688, 19) _rotation 0 id rx_frequency label Frequency short_id f type eng_float value 915e6 parameter alias comment _enabled True _coordinate (800, 19) _rotation 0 id rx_lna_gain label RX LNA Gain short_id l type intx value 6 parameter alias comment _enabled True _coordinate (448, 19) _rotation 0 id rx_sample_rate label Sample Rate short_id s type eng_float value 3e6 parameter alias comment _enabled True _coordinate (928, 19) _rotation 0 id rx_vga_gain label RX VGA1 + VGA2 Gain short_id g type intx value 20 parameter alias comment _enabled True _coordinate (448, 139) _rotation 0 id serial label bladeRF serial number short_id type string value "" parameter alias comment _enabled True _coordinate (1296, 147) _rotation 0 id verbosity label libbladeRF log verbosity. Options are: verbose, debug, info, warning, error, critical, silent short_id type string value "info" blocks_add_const_vxx_0 blocks_float_to_complex_0 0 0 blocks_add_const_vxx_0_0 blocks_float_to_complex_0 0 1 blocks_complex_to_float_0 blocks_add_const_vxx_0_0 1 0 blocks_complex_to_float_0 blocks_add_const_vxx_0 0 0 blocks_float_to_complex_0 fosphor_qt_sink_c_0 0 0 blocks_float_to_complex_0 qtgui_freq_sink_x_0 0 0 blocks_float_to_complex_0 qtgui_time_sink_x_0 0 0 blocks_float_to_complex_0 qtgui_waterfall_sink_x_0 0 0 osmosdr_source_0 blocks_complex_to_float_0 0 0 bladeRF-2024.05/host/examples/gnuradio/rx_gui/bladeRF_rx.py000077500000000000000000000576641457144405000235000ustar00rootroot00000000000000#!/usr/bin/env python2 ################################################## # GNU Radio Python Flow Graph # Title: Simple bladeRF RX GUI # Author: Nuand, LLC # Description: A simple RX-only GUI that demonstrates the usage of various RX controls. # Generated: Sun Jan 17 21:00:48 2016 ################################################## if __name__ == '__main__': import ctypes import sys if sys.platform.startswith('linux'): try: x11 = ctypes.cdll.LoadLibrary('libX11.so') x11.XInitThreads() except: print "Warning: failed to XInitThreads()" from PyQt4 import Qt from PyQt4.QtCore import QObject, pyqtSlot from gnuradio import blocks from gnuradio import eng_notation from gnuradio import gr from gnuradio import qtgui from gnuradio.eng_option import eng_option from gnuradio.filter import firdes from gnuradio.qtgui import Range, RangeWidget from optparse import OptionParser import osmosdr import sip import sys import time class bladeRF_rx(gr.top_block, Qt.QWidget): def __init__(self, buflen=4096, dc_offset_i=0, dc_offset_q=0, instance=0, num_buffers=16, num_xfers=8, rx_bandwidth=1.5e6, rx_frequency=915e6, rx_lna_gain=6, rx_sample_rate=3e6, rx_vga_gain=20, serial="", verbosity="info"): gr.top_block.__init__(self, "Simple bladeRF RX GUI") Qt.QWidget.__init__(self) self.setWindowTitle("Simple bladeRF RX GUI") try: self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc')) except: pass self.top_scroll_layout = Qt.QVBoxLayout() self.setLayout(self.top_scroll_layout) self.top_scroll = Qt.QScrollArea() self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame) self.top_scroll_layout.addWidget(self.top_scroll) self.top_scroll.setWidgetResizable(True) self.top_widget = Qt.QWidget() self.top_scroll.setWidget(self.top_widget) self.top_layout = Qt.QVBoxLayout(self.top_widget) self.top_grid_layout = Qt.QGridLayout() self.top_layout.addLayout(self.top_grid_layout) self.settings = Qt.QSettings("GNU Radio", "bladeRF_rx") self.restoreGeometry(self.settings.value("geometry").toByteArray()) ################################################## # Parameters ################################################## self.buflen = buflen self.dc_offset_i = dc_offset_i self.dc_offset_q = dc_offset_q self.instance = instance self.num_buffers = num_buffers self.num_xfers = num_xfers self.rx_bandwidth = rx_bandwidth self.rx_frequency = rx_frequency self.rx_lna_gain = rx_lna_gain self.rx_sample_rate = rx_sample_rate self.rx_vga_gain = rx_vga_gain self.serial = serial self.verbosity = verbosity ################################################## # Variables ################################################## self.bladerf_selection = bladerf_selection = str(instance) if serial == "" else serial self.bladerf_args = bladerf_args = "bladerf=" + bladerf_selection + ",buffers=" + str(num_buffers) + ",buflen=" + str(buflen) + ",num_xfers=" + str(num_xfers) + ",verbosity="+verbosity self.gui_rx_vga_gain = gui_rx_vga_gain = rx_vga_gain self.gui_rx_sample_rate = gui_rx_sample_rate = rx_sample_rate self.gui_rx_lna_gain = gui_rx_lna_gain = rx_lna_gain self.gui_rx_frequency = gui_rx_frequency = rx_frequency self.gui_rx_bandwidth = gui_rx_bandwidth = rx_bandwidth self.gui_dc_offset_q = gui_dc_offset_q = dc_offset_q self.gui_dc_offset_i = gui_dc_offset_i = dc_offset_i self.gui_bladerf_args = gui_bladerf_args = bladerf_args ################################################## # Blocks ################################################## self._gui_rx_vga_gain_range = Range(5, 60, 1, rx_vga_gain, 200) self._gui_rx_vga_gain_win = RangeWidget(self._gui_rx_vga_gain_range, self.set_gui_rx_vga_gain, "RX VGA1 + VGA2 Gain", "counter_slider", float) self.top_grid_layout.addWidget(self._gui_rx_vga_gain_win, 0, 5, 1, 4) self._gui_rx_sample_rate_range = Range(1.5e6, 40e6, 500e3, rx_sample_rate, 200) self._gui_rx_sample_rate_win = RangeWidget(self._gui_rx_sample_rate_range, self.set_gui_rx_sample_rate, "Sample Rate", "counter_slider", float) self.top_grid_layout.addWidget(self._gui_rx_sample_rate_win, 1, 0, 1, 2) self._gui_rx_lna_gain_options = (0, 3, 6, ) self._gui_rx_lna_gain_labels = ("0 dB", "3 dB", "6 dB", ) self._gui_rx_lna_gain_tool_bar = Qt.QToolBar(self) self._gui_rx_lna_gain_tool_bar.addWidget(Qt.QLabel("LNA Gain"+": ")) self._gui_rx_lna_gain_combo_box = Qt.QComboBox() self._gui_rx_lna_gain_tool_bar.addWidget(self._gui_rx_lna_gain_combo_box) for label in self._gui_rx_lna_gain_labels: self._gui_rx_lna_gain_combo_box.addItem(label) self._gui_rx_lna_gain_callback = lambda i: Qt.QMetaObject.invokeMethod(self._gui_rx_lna_gain_combo_box, "setCurrentIndex", Qt.Q_ARG("int", self._gui_rx_lna_gain_options.index(i))) self._gui_rx_lna_gain_callback(self.gui_rx_lna_gain) self._gui_rx_lna_gain_combo_box.currentIndexChanged.connect( lambda i: self.set_gui_rx_lna_gain(self._gui_rx_lna_gain_options[i])) self.top_grid_layout.addWidget(self._gui_rx_lna_gain_tool_bar, 0, 9, 1, 1) self._gui_rx_frequency_range = Range(0, 3.8e9, 1e6, rx_frequency, 200) self._gui_rx_frequency_win = RangeWidget(self._gui_rx_frequency_range, self.set_gui_rx_frequency, "Frequency", "counter_slider", float) self.top_grid_layout.addWidget(self._gui_rx_frequency_win, 0, 0, 1, 5) self._gui_rx_bandwidth_range = Range(1.5e6, 28e6, 0.5e6, rx_bandwidth, 200) self._gui_rx_bandwidth_win = RangeWidget(self._gui_rx_bandwidth_range, self.set_gui_rx_bandwidth, "Bandwidth", "counter_slider", float) self.top_grid_layout.addWidget(self._gui_rx_bandwidth_win, 1, 2, 1, 2) self._gui_dc_offset_q_range = Range(-1.0, 1.0, (1.0 / 2048.0), dc_offset_q, 200) self._gui_dc_offset_q_win = RangeWidget(self._gui_dc_offset_q_range, self.set_gui_dc_offset_q, "Q DC Offset", "counter_slider", float) self.top_grid_layout.addWidget(self._gui_dc_offset_q_win, 1, 6, 1, 2) self._gui_dc_offset_i_range = Range(-1.0, 1.0, (1.0 / 2048.0), dc_offset_i, 200) self._gui_dc_offset_i_win = RangeWidget(self._gui_dc_offset_i_range, self.set_gui_dc_offset_i, "I DC Offset", "counter_slider", float) self.top_grid_layout.addWidget(self._gui_dc_offset_i_win, 1, 4, 1, 2) self.qtgui_waterfall_sink_x_0 = qtgui.waterfall_sink_c( 8192, #size firdes.WIN_BLACKMAN_hARRIS, #wintype gui_rx_frequency, #fc gui_rx_sample_rate, #bw "", #name 1 #number of inputs ) self.qtgui_waterfall_sink_x_0.set_update_time(0.10) self.qtgui_waterfall_sink_x_0.enable_grid(False) if not True: self.qtgui_waterfall_sink_x_0.disable_legend() if complex == type(float()): self.qtgui_waterfall_sink_x_0.set_plot_pos_half(not True) labels = ["", "", "", "", "", "", "", "", "", ""] colors = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] for i in xrange(1): if len(labels[i]) == 0: self.qtgui_waterfall_sink_x_0.set_line_label(i, "Data {0}".format(i)) else: self.qtgui_waterfall_sink_x_0.set_line_label(i, labels[i]) self.qtgui_waterfall_sink_x_0.set_color_map(i, colors[i]) self.qtgui_waterfall_sink_x_0.set_line_alpha(i, alphas[i]) self.qtgui_waterfall_sink_x_0.set_intensity_range(-140, 10) self._qtgui_waterfall_sink_x_0_win = sip.wrapinstance(self.qtgui_waterfall_sink_x_0.pyqwidget(), Qt.QWidget) self.top_grid_layout.addWidget(self._qtgui_waterfall_sink_x_0_win, 2, 5, 5, 5) self.qtgui_time_sink_x_0 = qtgui.time_sink_c( 8192, #size rx_sample_rate, #samp_rate "", #name 1 #number of inputs ) self.qtgui_time_sink_x_0.set_update_time(0.10) self.qtgui_time_sink_x_0.set_y_axis(-1, 1) self.qtgui_time_sink_x_0.set_y_label("Amplitude", "") self.qtgui_time_sink_x_0.enable_tags(-1, True) self.qtgui_time_sink_x_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, qtgui.TRIG_SLOPE_POS, 0.0, 0, 0, "") self.qtgui_time_sink_x_0.enable_autoscale(False) self.qtgui_time_sink_x_0.enable_grid(False) self.qtgui_time_sink_x_0.enable_control_panel(False) if not True: self.qtgui_time_sink_x_0.disable_legend() labels = ["", "", "", "", "", "", "", "", "", ""] widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] colors = ["blue", "red", "green", "black", "cyan", "magenta", "yellow", "dark red", "dark green", "blue"] styles = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] markers = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1] alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] for i in xrange(2*1): if len(labels[i]) == 0: if(i % 2 == 0): self.qtgui_time_sink_x_0.set_line_label(i, "Re{{Data {0}}}".format(i/2)) else: self.qtgui_time_sink_x_0.set_line_label(i, "Im{{Data {0}}}".format(i/2)) else: self.qtgui_time_sink_x_0.set_line_label(i, labels[i]) self.qtgui_time_sink_x_0.set_line_width(i, widths[i]) self.qtgui_time_sink_x_0.set_line_color(i, colors[i]) self.qtgui_time_sink_x_0.set_line_style(i, styles[i]) self.qtgui_time_sink_x_0.set_line_marker(i, markers[i]) self.qtgui_time_sink_x_0.set_line_alpha(i, alphas[i]) self._qtgui_time_sink_x_0_win = sip.wrapinstance(self.qtgui_time_sink_x_0.pyqwidget(), Qt.QWidget) self.top_grid_layout.addWidget(self._qtgui_time_sink_x_0_win, 7, 0, 3, 10) self.qtgui_freq_sink_x_0 = qtgui.freq_sink_c( 8192, #size firdes.WIN_BLACKMAN_hARRIS, #wintype gui_rx_frequency, #fc gui_rx_sample_rate, #bw "", #name 1 #number of inputs ) self.qtgui_freq_sink_x_0.set_update_time(0.10) self.qtgui_freq_sink_x_0.set_y_axis(-140, 10) self.qtgui_freq_sink_x_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, 0.0, 0, "") self.qtgui_freq_sink_x_0.enable_autoscale(False) self.qtgui_freq_sink_x_0.enable_grid(False) self.qtgui_freq_sink_x_0.set_fft_average(0.1) self.qtgui_freq_sink_x_0.enable_control_panel(False) if not True: self.qtgui_freq_sink_x_0.disable_legend() if complex == type(float()): self.qtgui_freq_sink_x_0.set_plot_pos_half(not True) labels = ["", "", "", "", "", "", "", "", "", ""] widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] colors = ["blue", "red", "green", "black", "cyan", "magenta", "yellow", "dark red", "dark green", "dark blue"] alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] for i in xrange(1): if len(labels[i]) == 0: self.qtgui_freq_sink_x_0.set_line_label(i, "Data {0}".format(i)) else: self.qtgui_freq_sink_x_0.set_line_label(i, labels[i]) self.qtgui_freq_sink_x_0.set_line_width(i, widths[i]) self.qtgui_freq_sink_x_0.set_line_color(i, colors[i]) self.qtgui_freq_sink_x_0.set_line_alpha(i, alphas[i]) self._qtgui_freq_sink_x_0_win = sip.wrapinstance(self.qtgui_freq_sink_x_0.pyqwidget(), Qt.QWidget) self.top_grid_layout.addWidget(self._qtgui_freq_sink_x_0_win, 2, 0, 5, 5) self.osmosdr_source_0 = osmosdr.source( args="numchan=" + str(1) + " " + bladerf_args ) self.osmosdr_source_0.set_sample_rate(gui_rx_sample_rate) self.osmosdr_source_0.set_center_freq(gui_rx_frequency, 0) self.osmosdr_source_0.set_freq_corr(0, 0) self.osmosdr_source_0.set_dc_offset_mode(1, 0) self.osmosdr_source_0.set_iq_balance_mode(1, 0) self.osmosdr_source_0.set_gain_mode(False, 0) self.osmosdr_source_0.set_gain(gui_rx_lna_gain, 0) self.osmosdr_source_0.set_if_gain(0, 0) self.osmosdr_source_0.set_bb_gain(gui_rx_vga_gain, 0) self.osmosdr_source_0.set_antenna("", 0) self.osmosdr_source_0.set_bandwidth(gui_rx_bandwidth, 0) self._gui_bladerf_args_tool_bar = Qt.QToolBar(self) if None: self._gui_bladerf_args_formatter = None else: self._gui_bladerf_args_formatter = lambda x: x self._gui_bladerf_args_tool_bar.addWidget(Qt.QLabel("bladeRF arguments"+": ")) self._gui_bladerf_args_label = Qt.QLabel(str(self._gui_bladerf_args_formatter(self.gui_bladerf_args))) self._gui_bladerf_args_tool_bar.addWidget(self._gui_bladerf_args_label) self.top_grid_layout.addWidget(self._gui_bladerf_args_tool_bar, 11, 0, 1, 10) self.blocks_float_to_complex_0 = blocks.float_to_complex(1) self.blocks_complex_to_float_0 = blocks.complex_to_float(1) self.blocks_add_const_vxx_0_0 = blocks.add_const_vff((gui_dc_offset_q, )) self.blocks_add_const_vxx_0 = blocks.add_const_vff((gui_dc_offset_i, )) ################################################## # Connections ################################################## self.connect((self.blocks_add_const_vxx_0, 0), (self.blocks_float_to_complex_0, 0)) self.connect((self.blocks_add_const_vxx_0_0, 0), (self.blocks_float_to_complex_0, 1)) self.connect((self.blocks_complex_to_float_0, 0), (self.blocks_add_const_vxx_0, 0)) self.connect((self.blocks_complex_to_float_0, 1), (self.blocks_add_const_vxx_0_0, 0)) self.connect((self.blocks_float_to_complex_0, 0), (self.qtgui_freq_sink_x_0, 0)) self.connect((self.blocks_float_to_complex_0, 0), (self.qtgui_time_sink_x_0, 0)) self.connect((self.blocks_float_to_complex_0, 0), (self.qtgui_waterfall_sink_x_0, 0)) self.connect((self.osmosdr_source_0, 0), (self.blocks_complex_to_float_0, 0)) def closeEvent(self, event): self.settings = Qt.QSettings("GNU Radio", "bladeRF_rx") self.settings.setValue("geometry", self.saveGeometry()) event.accept() def get_buflen(self): return self.buflen def set_buflen(self, buflen): self.buflen = buflen self.set_bladerf_args("bladerf=" + self.bladerf_selection + ",buffers=" + str(self.num_buffers) + ",buflen=" + str(self.buflen) + ",num_xfers=" + str(self.num_xfers) + ",verbosity="+self.verbosity) def get_dc_offset_i(self): return self.dc_offset_i def set_dc_offset_i(self, dc_offset_i): self.dc_offset_i = dc_offset_i self.set_gui_dc_offset_i(self.dc_offset_i) def get_dc_offset_q(self): return self.dc_offset_q def set_dc_offset_q(self, dc_offset_q): self.dc_offset_q = dc_offset_q self.set_gui_dc_offset_q(self.dc_offset_q) def get_instance(self): return self.instance def set_instance(self, instance): self.instance = instance self.set_bladerf_selection(str(self.instance) if self.serial == "" else self.serial) def get_num_buffers(self): return self.num_buffers def set_num_buffers(self, num_buffers): self.num_buffers = num_buffers self.set_bladerf_args("bladerf=" + self.bladerf_selection + ",buffers=" + str(self.num_buffers) + ",buflen=" + str(self.buflen) + ",num_xfers=" + str(self.num_xfers) + ",verbosity="+self.verbosity) def get_num_xfers(self): return self.num_xfers def set_num_xfers(self, num_xfers): self.num_xfers = num_xfers self.set_bladerf_args("bladerf=" + self.bladerf_selection + ",buffers=" + str(self.num_buffers) + ",buflen=" + str(self.buflen) + ",num_xfers=" + str(self.num_xfers) + ",verbosity="+self.verbosity) def get_rx_bandwidth(self): return self.rx_bandwidth def set_rx_bandwidth(self, rx_bandwidth): self.rx_bandwidth = rx_bandwidth self.set_gui_rx_bandwidth(self.rx_bandwidth) def get_rx_frequency(self): return self.rx_frequency def set_rx_frequency(self, rx_frequency): self.rx_frequency = rx_frequency self.set_gui_rx_frequency(self.rx_frequency) def get_rx_lna_gain(self): return self.rx_lna_gain def set_rx_lna_gain(self, rx_lna_gain): self.rx_lna_gain = rx_lna_gain self.set_gui_rx_lna_gain(self.rx_lna_gain) def get_rx_sample_rate(self): return self.rx_sample_rate def set_rx_sample_rate(self, rx_sample_rate): self.rx_sample_rate = rx_sample_rate self.set_gui_rx_sample_rate(self.rx_sample_rate) self.qtgui_time_sink_x_0.set_samp_rate(self.rx_sample_rate) def get_rx_vga_gain(self): return self.rx_vga_gain def set_rx_vga_gain(self, rx_vga_gain): self.rx_vga_gain = rx_vga_gain self.set_gui_rx_vga_gain(self.rx_vga_gain) def get_serial(self): return self.serial def set_serial(self, serial): self.serial = serial self.set_bladerf_selection(str(self.instance) if self.serial == "" else self.serial) def get_verbosity(self): return self.verbosity def set_verbosity(self, verbosity): self.verbosity = verbosity self.set_bladerf_args("bladerf=" + self.bladerf_selection + ",buffers=" + str(self.num_buffers) + ",buflen=" + str(self.buflen) + ",num_xfers=" + str(self.num_xfers) + ",verbosity="+self.verbosity) def get_bladerf_selection(self): return self.bladerf_selection def set_bladerf_selection(self, bladerf_selection): self.bladerf_selection = bladerf_selection self.set_bladerf_args("bladerf=" + self.bladerf_selection + ",buffers=" + str(self.num_buffers) + ",buflen=" + str(self.buflen) + ",num_xfers=" + str(self.num_xfers) + ",verbosity="+self.verbosity) def get_bladerf_args(self): return self.bladerf_args def set_bladerf_args(self, bladerf_args): self.bladerf_args = bladerf_args self.set_gui_bladerf_args(self._gui_bladerf_args_formatter(self.bladerf_args)) def get_gui_rx_vga_gain(self): return self.gui_rx_vga_gain def set_gui_rx_vga_gain(self, gui_rx_vga_gain): self.gui_rx_vga_gain = gui_rx_vga_gain self.osmosdr_source_0.set_bb_gain(self.gui_rx_vga_gain, 0) def get_gui_rx_sample_rate(self): return self.gui_rx_sample_rate def set_gui_rx_sample_rate(self, gui_rx_sample_rate): self.gui_rx_sample_rate = gui_rx_sample_rate self.osmosdr_source_0.set_sample_rate(self.gui_rx_sample_rate) self.qtgui_freq_sink_x_0.set_frequency_range(self.gui_rx_frequency, self.gui_rx_sample_rate) self.qtgui_waterfall_sink_x_0.set_frequency_range(self.gui_rx_frequency, self.gui_rx_sample_rate) def get_gui_rx_lna_gain(self): return self.gui_rx_lna_gain def set_gui_rx_lna_gain(self, gui_rx_lna_gain): self.gui_rx_lna_gain = gui_rx_lna_gain self._gui_rx_lna_gain_callback(self.gui_rx_lna_gain) self.osmosdr_source_0.set_gain(self.gui_rx_lna_gain, 0) def get_gui_rx_frequency(self): return self.gui_rx_frequency def set_gui_rx_frequency(self, gui_rx_frequency): self.gui_rx_frequency = gui_rx_frequency self.osmosdr_source_0.set_center_freq(self.gui_rx_frequency, 0) self.qtgui_freq_sink_x_0.set_frequency_range(self.gui_rx_frequency, self.gui_rx_sample_rate) self.qtgui_waterfall_sink_x_0.set_frequency_range(self.gui_rx_frequency, self.gui_rx_sample_rate) def get_gui_rx_bandwidth(self): return self.gui_rx_bandwidth def set_gui_rx_bandwidth(self, gui_rx_bandwidth): self.gui_rx_bandwidth = gui_rx_bandwidth self.osmosdr_source_0.set_bandwidth(self.gui_rx_bandwidth, 0) def get_gui_dc_offset_q(self): return self.gui_dc_offset_q def set_gui_dc_offset_q(self, gui_dc_offset_q): self.gui_dc_offset_q = gui_dc_offset_q self.blocks_add_const_vxx_0_0.set_k((self.gui_dc_offset_q, )) def get_gui_dc_offset_i(self): return self.gui_dc_offset_i def set_gui_dc_offset_i(self, gui_dc_offset_i): self.gui_dc_offset_i = gui_dc_offset_i self.blocks_add_const_vxx_0.set_k((self.gui_dc_offset_i, )) def get_gui_bladerf_args(self): return self.gui_bladerf_args def set_gui_bladerf_args(self, gui_bladerf_args): self.gui_bladerf_args = gui_bladerf_args Qt.QMetaObject.invokeMethod(self._gui_bladerf_args_label, "setText", Qt.Q_ARG("QString", str(self.gui_bladerf_args))) if __name__ == '__main__': parser = OptionParser(option_class=eng_option, usage="%prog: [options]") parser.add_option("", "--dc-offset-i", dest="dc_offset_i", type="eng_float", default=eng_notation.num_to_str(0), help="Set DC offset compensation for I channel [default=%default]") parser.add_option("", "--dc-offset-q", dest="dc_offset_q", type="eng_float", default=eng_notation.num_to_str(0), help="Set DC offset compensation for Q channel [default=%default]") parser.add_option("", "--instance", dest="instance", type="intx", default=0, help="Set 0-indexed device instance describing device to use. Ignored if a serial-number is provided. [default=%default]") parser.add_option("", "--num-buffers", dest="num_buffers", type="intx", default=16, help="Set Number of buffers to use [default=%default]") parser.add_option("", "--num-xfers", dest="num_xfers", type="intx", default=8, help="Set Number of maximum in-flight USB transfers. Should be <= (num-buffers / 2). [default=%default]") parser.add_option("-b", "--rx-bandwidth", dest="rx_bandwidth", type="eng_float", default=eng_notation.num_to_str(1.5e6), help="Set Bandwidth [default=%default]") parser.add_option("-f", "--rx-frequency", dest="rx_frequency", type="eng_float", default=eng_notation.num_to_str(915e6), help="Set Frequency [default=%default]") parser.add_option("-l", "--rx-lna-gain", dest="rx_lna_gain", type="intx", default=6, help="Set RX LNA Gain [default=%default]") parser.add_option("-s", "--rx-sample-rate", dest="rx_sample_rate", type="eng_float", default=eng_notation.num_to_str(3e6), help="Set Sample Rate [default=%default]") parser.add_option("-g", "--rx-vga-gain", dest="rx_vga_gain", type="intx", default=20, help="Set RX VGA1 + VGA2 Gain [default=%default]") parser.add_option("", "--serial", dest="serial", type="string", default="", help="Set bladeRF serial number [default=%default]") parser.add_option("", "--verbosity", dest="verbosity", type="string", default="info", help="Set libbladeRF log verbosity. Options are: verbose, debug, info, warning, error, critical, silent [default=%default]") (options, args) = parser.parse_args() from distutils.version import StrictVersion if StrictVersion(Qt.qVersion()) >= StrictVersion("4.5.0"): Qt.QApplication.setGraphicsSystem(gr.prefs().get_string('qtgui','style','raster')) qapp = Qt.QApplication(sys.argv) tb = bladeRF_rx(dc_offset_i=options.dc_offset_i, dc_offset_q=options.dc_offset_q, instance=options.instance, num_buffers=options.num_buffers, num_xfers=options.num_xfers, rx_bandwidth=options.rx_bandwidth, rx_frequency=options.rx_frequency, rx_lna_gain=options.rx_lna_gain, rx_sample_rate=options.rx_sample_rate, rx_vga_gain=options.rx_vga_gain, serial=options.serial, verbosity=options.verbosity) tb.start() tb.show() def quitting(): tb.stop() tb.wait() qapp.connect(qapp, Qt.SIGNAL("aboutToQuit()"), quitting) qapp.exec_() tb = None # to clean up Qt widgets bladeRF-2024.05/host/examples/python/000077500000000000000000000000001457144405000173055ustar00rootroot00000000000000bladeRF-2024.05/host/examples/python/txrx/000077500000000000000000000000001457144405000203125ustar00rootroot00000000000000bladeRF-2024.05/host/examples/python/txrx/.gitignore000066400000000000000000000000061457144405000222760ustar00rootroot00000000000000*.bin bladeRF-2024.05/host/examples/python/txrx/README.md000066400000000000000000000006261457144405000215750ustar00rootroot00000000000000# Python3 TX/RX Example # This example illustrates how to transmit and receive using the bladeRF Python3 bindings. The example can perform these operations in either full or half duplex and is configurable with the provided ConfigParser INI file. In order for this to work, libbladeRF and the [bladeRF Python3 bindings](../../../libraries/libbladeRF_bindings/python) must be installed on the host sytem. bladeRF-2024.05/host/examples/python/txrx/txrx.ini000066400000000000000000000052161457144405000220240ustar00rootroot00000000000000############################################################################### # Python ConfigParser (.ini) configuration file ############################################################################### # ----------------------------------------------------------------------------- # Common configuration options # ----------------------------------------------------------------------------- [common] # Verbosity levels: # silent, critical, error, warning, info, debug, verbose libbladerf_verbosity = WARNING # ----------------------------------------------------------------------------- # bladeRF1 FPGAs # ----------------------------------------------------------------------------- [bladerf1-load-fpga] enable = False image_40kle = ./hostedx40.rbf image_150kle = ./hostedx115.rbf # ----------------------------------------------------------------------------- # bladeRF2 FPGAs # ----------------------------------------------------------------------------- [bladerf2-load-fpga] enable = False image_49kle = ./hostedxA4.rbf image_301kle = ./hostedxA9.rbf [bladerf2-tx] enable = False tx_channel = 0 tx_frequency = 2.350e9 tx_bandwidth = 56.0e6 tx_samplerate = 61.44e6 tx_gain = 30 tx_repeats = 10e6 tx_file = ./tx.bin [bladerf2-rx] enable = False rx_channel = 0 rx_frequency = 2.325e9 rx_bandwidth = 56.0e6 rx_samplerate = 61.44e6 rx_gain = 0 rx_num_samples = 1e6 rx_file = ./rx.bin [bladerf2-txrx] enable = True # tx_channel and rx_channel lists must be equal lengths because each value # in tx_channel will be matched up with the value at the same index in # rx_channel. For example, let tx_channel = [x, y] and rx_channel = [p, q]. # During the first iteration, tx_channel will be 'x' and rx_channel will # be 'p'. On the next iteration, they will be 'y' and 'q', respectively. tx_channel = 0, 1 rx_channel = 0, 1 # Frequency list. TX and RX must be equal lengths and follows the # same pattern as above. tx_frequency = 1535e6, 4500e6 rx_frequency = 1537e6, 4502e6 # TX settings tx_bandwidth = 56.0e6 tx_samplerate = 61.44e6 tx_gain = 30 tx_repeats = 0 tx_file = /dev/urandom # RX settings rx_bandwidth = 56.0e6 rx_samplerate = 61.44e6 rx_gain = 0 rx_gainmode = manual rx_num_samples = 25e6 # Filename for receive samples may be either explicitly given, or 'auto'. If # explicitly given, all samples will be concatenated into the one file. If # 'auto', the filename will be generated automatically based on the enabled # channels and frequency (e.g. rx_r0t0_2500M.bin). rx_file = auto bladeRF-2024.05/host/examples/python/txrx/txrx.py000077500000000000000000000444331457144405000217040ustar00rootroot00000000000000#!/usr/bin/env python3 ############################################################################### # # Copyright (c) 2018-present Nuand LLC # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ############################################################################### # # Basic example of using bladeRF Python bindings for full duplex TX/RX. # Review the companion txrx.ini to adjust configuration options. # ############################################################################### import sys import os import threading from multiprocessing.pool import ThreadPool from configparser import ConfigParser from bladerf import _bladerf # ============================================================================= # Close the device and exit # ============================================================================= def shutdown( error = 0, board = None ): print( "Shutting down with error code: " + str(error) ) if( board != None ): board.close() sys.exit(error) # ============================================================================= # Version information # ============================================================================= def print_versions( device = None ): print( "libbladeRF version: " + str(_bladerf.version()) ) if( device != None ): try: print( "Firmware version: " + str(device.get_fw_version()) ) except: print( "Firmware version: " + "ERROR" ) raise try: print( "FPGA version: " + str(device.get_fpga_version()) ) except: print( "FPGA version: " + "ERROR" ) raise return 0 # ============================================================================= # Search for a bladeRF device attached to the host system # Returns a bladeRF device handle. # ============================================================================= def probe_bladerf(): device = None print( "Searching for bladeRF devices..." ) try: devinfos = _bladerf.get_device_list() if( len(devinfos) == 1 ): device = "{backend}:device={usb_bus}:{usb_addr}".format(**devinfos[0]._asdict()) print( "Found bladeRF device: " + str(device) ) if( len(devinfos) > 1 ): print( "Unsupported feature: more than one bladeRFs detected." ) print( "\n".join([str(devinfo) for devinfo in devinfos]) ) shutdown( error = -1, board = None ) except _bladerf.BladeRFError: print( "No bladeRF devices found." ) pass return device # ============================================================================= # Load FPGA # ============================================================================= def load_fpga( device, image ): image = os.path.abspath( image ) if( not os.path.exists(image) ): print( "FPGA image does not exist: " + str(image) ) return -1 try: print( "Loading FPGA image: " + str(image ) ) device.load_fpga( image ) fpga_loaded = device.is_fpga_configured() fpga_version = device.get_fpga_version() if( fpga_loaded ): print( "FPGA successfully loaded. Version: " + str(fpga_version) ) except _bladerf.BladeRFError: print( "Error loading FPGA." ) raise return 0 # ============================================================================= # TRANSMIT # ============================================================================= def transmit( device, channel : int, freq : int, rate : int, gain : int, tx_start = None, rx_done = None, txfile : str = '', repeat : int = 1, ): if( device == None ): print( "TX: Invalid device handle." ) return -1 if( channel == None ): print( "TX: Invalid channel." ) return -1 if( (rx_done == None) and (repeat < 1) ): print( "TX: Configuration settings indicate transmitting indefinitely?" ) return -1 if( tx_start != None ): print( "TX: waiting until receive thread is ready..." ) if( not tx_start.wait(60.0) ): print( "TX: Timeout occurred while waiting for receiver to " + "become ready." ) return -1 # Configure bladeRF ch = device.Channel(channel) ch.frequency = freq ch.sample_rate = rate ch.gain = gain # Setup stream device.sync_config(layout=_bladerf.ChannelLayout.TX_X1, fmt=_bladerf.Format.SC16_Q11, num_buffers=16, buffer_size=8192, num_transfers=8, stream_timeout=3500) # Enable module print( "TX: Start" ) ch.enable = True # Create buffer bytes_per_sample = 4 buf = bytearray(1024*bytes_per_sample) with open(txfile, 'rb') as infile: # Read samples from file into buf num = infile.readinto(buf) # Convert number of bytes read to samples num //= bytes_per_sample if( num > 0 ): repeats_remaining = repeat - 1 repeat_inf = (repeat < 1) while True: # Write to bladeRF device.sync_tx(buf, num) if( (rx_done != None) and rx_done.is_set() ): break if( not repeat_inf ): if( repeats_remaining > 0 ): repeats_remaining -= 1 else: break # Disable module print( "TX: Stop" ) ch.enable = False return 0 # ============================================================================= # RECEIVE # ============================================================================= def receive(device, channel : int, freq : int, rate : int, gain : int, tx_start = None, rx_done = None, rxfile : str = '', num_samples : int = 1024): status = 0 if( device == None ): print( "RX: Invalid device handle." ) return -1 if( channel == None ): print( "RX: Invalid channel." ) return -1 # Configure BladeRF ch = device.Channel(channel) ch.frequency = freq ch.sample_rate = rate ch.gain = gain # Setup synchronous stream device.sync_config(layout = _bladerf.ChannelLayout.RX_X1, fmt = _bladerf.Format.SC16_Q11, num_buffers = 16, buffer_size = 8192, num_transfers = 8, stream_timeout = 3500) # Enable module print( "RX: Start" ) ch.enable = True # Create receive buffer bytes_per_sample = 4 buf = bytearray(1024*bytes_per_sample) num_samples_read = 0 # Tell TX thread to begin if( tx_start != None ): tx_start.set() # Save the samples with open(rxfile, 'wb') as outfile: while True: if num_samples > 0 and num_samples_read == num_samples: break elif num_samples > 0: num = min(len(buf)//bytes_per_sample, num_samples-num_samples_read) else: num = len(buf)//bytes_per_sample # Read into buffer device.sync_rx(buf, num) num_samples_read += num # Write to file outfile.write(buf[:num*bytes_per_sample]) # Disable module print( "RX: Stop" ) ch.enable = False if( rx_done != None ): rx_done.set() print( "RX: Done" ) return 0 # ============================================================================= # Load Configuration # ============================================================================= config = ConfigParser() config.read('txrx.ini') # Set libbladeRF verbosity level verbosity = config.get('common', 'libbladerf_verbosity').upper() if ( verbosity == "VERBOSE" ): _bladerf.set_verbosity( 0 ) elif( verbosity == "DEBUG" ): _bladerf.set_verbosity( 1 ) elif( verbosity == "INFO" ): _bladerf.set_verbosity( 2 ) elif( verbosity == "WARNING" ): _bladerf.set_verbosity( 3 ) elif( verbosity == "ERROR" ): _bladerf.set_verbosity( 4 ) elif( verbosity == "CRITICAL" ): _bladerf.set_verbosity( 5 ) elif( verbosity == "SILENT" ): _bladerf.set_verbosity( 6 ) else: print( "Invalid libbladerf_verbosity specified in configuration file:", verbosity ) shutdown( error = -1, board = None ) # ============================================================================= # BEGIN !!! # ============================================================================= uut = probe_bladerf() if( uut == None ): print( "No bladeRFs detected. Exiting." ) shutdown( error = -1, board = None ) b = _bladerf.BladeRF( uut ) board_name = b.board_name fpga_size = b.fpga_size if( config.getboolean(board_name + '-load-fpga', 'enable') ): print( "Loading FPGA..." ) try: status = load_fpga( b, config.get(board_name + '-load-fpga', 'image_' + str(fpga_size) + 'kle' ) ) except: print( "ERROR loading FPGA." ) raise if( status < 0 ): print( "ERROR loading FPGA." ) shutdown( error = status, board = b ) else: print( "Skipping FPGA load due to configuration setting." ) status = print_versions( device = b ) # TODO: can we have >1 rx/tx pool workers because 2x2 MIMO? rx_pool = ThreadPool(processes=1) tx_pool = ThreadPool(processes=1) for s in [ss for ss in config.sections() if board_name + '-' in ss]: if( s == board_name + "-load-fpga" ): # Don't re-loading the FPGA! continue # Print the section name print( "{:<35s} : ".format(s), end='' ) if( config.getboolean(s, 'enable') ): print( "RUNNING" ) if( s == board_name + '-tx' ): tx_ch = _bladerf.CHANNEL_TX(config.getint(s, 'tx_channel')) tx_freq = int(config.getfloat(s, 'tx_frequency')) tx_rate = int(config.getfloat(s, 'tx_samplerate')) tx_gain = int(config.getfloat(s, 'tx_gain')) tx_rpt = int(config.getfloat(s, 'tx_repeats')) tx_file = config.get(s, 'tx_file') # Make this blocking for now ... status = tx_pool.apply_async(transmit, (), { 'device' : b, 'channel' : tx_ch, 'freq' : tx_freq, 'rate' : tx_rate, 'gain' : tx_gain, 'tx_start' : None, 'rx_done' : None, 'txfile' : tx_file, 'repeat' : tx_rpt }).get() if( status < 0 ): print( "Transmit operation failed with error " + str(status) ) elif( s == board_name + '-rx' ): rx_ch = _bladerf.CHANNEL_RX(config.getint(s, 'rx_channel')) rx_freq = int(config.getfloat(s, 'rx_frequency')) rx_rate = int(config.getfloat(s, 'rx_samplerate')) rx_gain = int(config.getfloat(s, 'rx_gain')) rx_ns = int(config.getfloat(s, 'rx_num_samples')) rx_file = config.get(s, 'rx_file') # Make this blocking for now ... status = rx_pool.apply_async(receive, (), { 'device' : b, 'channel' : rx_ch, 'freq' : rx_freq, 'rate' : rx_rate, 'gain' : rx_gain, 'tx_start' : None, 'rx_done' : None, 'rxfile' : rx_file, 'num_samples' : rx_ns }).get() if( status < 0 ): print( "Receive operation failed with error " + str(status) ) elif( s == board_name + '-txrx' ): rx_channels = [x.strip() for x in config.get(s, 'rx_channel').split(',')] tx_channels = [x.strip() for x in config.get(s, 'tx_channel').split(',')] rx_freqs = [x.strip() for x in config.get(s, 'rx_frequency').split(',')] tx_freqs = [x.strip() for x in config.get(s, 'tx_frequency').split(',')] if( len(rx_channels) != len(tx_channels) ): print( "Configuration error in section " + s + ": " "rx_channels and tx_channels must be the same length." ) shutdown( error = -1, board = b ) if( len(rx_freqs) != len(tx_freqs) ): print( "Configuration error in section " + s + ": " "rx_frequency and tx_frequency must be the same length." ) shutdown( error = -1, board = b ) # Create Events for signaling between RX/TX threads rx_done = threading.Event() tx_start = threading.Event() for ch in range(0, len(rx_channels), 1): for freq in range(0, len(rx_freqs), 1): rx_ch = _bladerf.CHANNEL_RX(int(rx_channels[ch])) rx_freq = int(float(rx_freqs[freq])) rx_rate = int(config.getfloat(s, 'rx_samplerate')) rx_gain = int(config.getfloat(s, 'rx_gain')) rx_ns = int(config.getfloat(s, 'rx_num_samples')) rx_file = config.get(s, 'rx_file') if( rx_file == "auto" ): rx_file = "rx_" + \ "r" + rx_channels[ch] + \ "t" + tx_channels[ch] + "_" + \ str(int(float(rx_freqs[freq])/(1e6))) + "M.bin" tx_ch = _bladerf.CHANNEL_TX(int(tx_channels[ch])) tx_freq = int(float(tx_freqs[freq])) tx_rate = int(config.getfloat(s, 'tx_samplerate')) tx_gain = int(config.getfloat(s, 'tx_gain')) tx_rpt = int(config.getfloat(s, 'tx_repeats')) tx_file = config.get(s, 'tx_file') print( "rx_ch = {:2d} ".format(int(rx_channels[ch])) + "tx_ch = {:2d} ".format(int(tx_channels[ch])) + "rx_freq = {:10d} ".format(rx_freq) + "tx_freq = {:10d} ".format(tx_freq) + "rx_file = " + rx_file ) # Start receiver thread rx_result = rx_pool.apply_async(receive, (), { 'device' : b, 'channel' : rx_ch, 'freq' : rx_freq, 'rate' : rx_rate, 'gain' : rx_gain, 'tx_start' : tx_start, 'rx_done' : rx_done, 'rxfile' : rx_file, 'num_samples' : rx_ns }) # Start transmitter thread tx_result = tx_pool.apply_async(transmit, (), { 'device' : b, 'channel' : tx_ch, 'freq' : tx_freq, 'rate' : tx_rate, 'gain' : tx_gain, 'tx_start' : tx_start, 'rx_done' : rx_done, 'txfile' : tx_file, 'repeat' : tx_rpt }) # Wait for RX thread to finish rx_result.wait() status = rx_result.get() if( status < 0 ): print( "Receive operation failed with error " + str(status) ) # Wait for TX thread to finish tx_result.wait() status = tx_result.get() if( status < 0 ): print( "Transmit operation failed with error " + str(status) ) tx_start.clear() rx_done.clear() else: print( "SKIPPED [ Disabled ]" ) b.close() print( "Done!" ) bladeRF-2024.05/host/libraries/000077500000000000000000000000001457144405000161225ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/CMakeLists.txt000066400000000000000000000005151457144405000206630ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.5) add_subdirectory(libbladeRF) # Conditionally add the test directory option(TEST_LIBBLADERF "Enables libbladeRF test output" ON) if(TEST_LIBBLADERF) message(STATUS "libbladeRF_test: enabled") add_subdirectory(libbladeRF_test) else() message(STATUS "libbladeRF_test: disabled") endif() bladeRF-2024.05/host/libraries/libbladeRF/000077500000000000000000000000001457144405000201105ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF/CHANGELOG000066400000000000000000000621061457144405000213270ustar00rootroot00000000000000================================================================================ libbladeRF Change Log Summary For more detailed information, please see the git change log and issue tracker hosted on GitHub: https://github.com/Nuand/bladeRF ================================================================================ v2.2.0 (2018-12-21) -------------------------------- This version of libbladeRF is intended for use with: FX3 Firmware v2.3.1 FPGA v0.10.2 New features include: * FPGA-based RFIC Control on the bladerf2 family: This version adds FPGA-based tuning for the bladeRF 2.0 micro family. This tuning mode has a number of advantages over host-based tuning: * Faster command processing: the Nios II processor on the FPGA handles the RFIC control directly, instead of relaying SPI commands between the host and RFIC. This improves turnaround time slightly. * State preservation: the device itself maintains the RFIC state, so closing and re-opening the device no longer requires reinitialization. In practice, this is about a 7.5x speedup when doing a "warm" open of an already-initialized device. * Headless operation: the Nios II processor on the FPGA is now able to control the RFIC (and the rest of the system) autonomously. The previous mode is still available by calling bladerf_set_tuning_mode() with `BLADERF_TUNING_MODE_HOST`, or by setting `BLADERF_DEFAULT_TUNING_MODE=host` in the environment. * Quick Tune is now supported on the bladerf2 family: The quick tune functionality permits rapid hopping between frequencies, by saving the state of the RFIC's tuning parameters to memory and then rapidly switching to them at a given time. Please refer to the documentation for bladerf_get_quick_tune(), bladerf_schedule_retune(), and bladerf_cancel_scheduled_retunes() for more information. * Configuration file: `biastee_rx` and `biastee_tx` options added API changes since v2.1.0: * Quick Tuning on bladerf2: - `struct bladerf_quick_tune` updated with parameters for bladeRF2 * Flash access: - These functions require a `struct bladerf *` as the first parameter: bladerf_alloc_image(), bladerf_alloc_cal_image(), bladerf_image_write() - Added: bladerf_read_flash_bytes(), bladerf_erase_flash_bytes(), bladerf_write_flash_bytes(), bladerf_get_fpga_bytes() - Deprecated: bladerf_read_flash(), bladerf_erase_flash(), bladerf_write_flash() Bug fixes: * libusb.c: fix unread status variable warning (#693) * bladerf2.c: fix typo in _check_total_sample_rate (#692) * bladerf1.c: fix null ptr dereference (#696) * bladerf1.c: improve AGC-unavailable messaging (#686) * bladerf{1,2}.c: bladerf_load_fpga: release mutex on error (#680) * bladerf1.c: fix apportioning of overall gain via bladerf_set_gain() * bladerf2.c: fix overeager FIR filter management in bladerf_set_sample_rate() * flash.c: FPGA images are now flashable on xA9 boards (#571) v2.1.0 (2018-10-30) -------------------------------- This version of libbladeRF is intended for use with: FX3 Firmware v2.3.1 FPGA v0.9.0 Note to bladerf1 (x40/x115) users: AGC will not work with FPGA versions older than v0.8.0, due to a change in the control register mapping. A warning will be printed during device initialization if you are using an affected FPGA version. API additions: * Add format macros for bladerf_frequency and bladerf_timestamp (#623) * Add 'manufacturer' and 'product' device description strings to bladerf_devinfo struct (#624) * Add bladerf_get_serial_struct() API function (#382) * Add bladerf_get_flash_size() API function (#634) * Add bladerf_trigger_signal values for J51-1 (bladerf2) and Miniexp-1 (generic) (#656) * Add bladerf_get_fpga_source() API function (#662) Changes: * bladerf2: Support TX frequencies down to 47 MHz (#598) * bladerf2: Support sample rates down to 0.521 MSps (#593) * docs: install the doxygen documentation (#597) * Adjust RX gain mode lists for clarity (#601) * bladerf1: Fix BLADERF_GPIO_AGC_ENABLE (#607) * Moved FN_RF_PORTS into the FN_LOW_LEVEL section of API docs * bladerf1: implemented bladerf_{get,set}_rf_port[s] (#600, #608, #625) * bladerf2: fix bladerf_trigger_arm implementation (#633) * backend/nios: reduce verbose logging spew (#647) * backend/libusb: return partial info if we can't open the device during lusb_probe() (#648) * bladerf1: skip initialization if BLADERF_FORCE_NO_FPGA_PRESENT is set (#651) * streaming: extend USB transfer timeout to match the configured stream timeout (#659) * backend/dummy, backend/cyapi: fix wrong get_flash_id fptrs (#670) * common: include pthread.h in nanosleep.h (#669) (#671) * thirdparty/adi: fix OSX and FreeBSD compilation issue * streaming: add meta RX hardware flags for underflow, miniexp{1,2} v2.0.2 (2018-08-30) -------------------------------- This version of libbladeRF is intended for use with: FX3 Firmware v2.2.0 FPGA v0.7.3 There are no functional changes since v2.0.1, although there are changes to the API documentation and the cmake build scripts. Changes: * Improve bladerf_gain_mode documentation (#595) * Don't warn about libusb version on FreeBSD (#594) v2.0.1 (2018-08-24) -------------------------------- This version of libbladeRF is intended for use with: FX3 Firmware v2.2.0 FPGA v0.7.3 This release contains minor fixes since v2.0.0. Note to bladeRF2 users: If you are using bladerf_{get,set}_clock_select(), please note that the enum for bladerf_clock_select has changed. CLOCK_SELECT_VCTCXO has been replaced with CLOCK_SELECT_ONBOARD. Changes: * FreeBSD build fixes (#561) * 32-bit architecture fixes (#573) * Detect and handle a bladeRF Micro that is running old firmware to allow re-flashing without recovery mode (#578) * bladeRF1: bladerf_set_gain_mode returning BLADERF_ERR_UNSUPPORTED is no longer fatal (#542) * bladeRF1: only check AGC DC LUT setting when enabling AGC * bladeRF1: typo fix in set_tx_gain (#580) * xb200: check for null xb_data before dereferencing it (#575) * bladeRF2: cache factory trimdac value at initialization; preserve trimdac disable state on bladerf2_trim_dac_write (#582) * bladeRF2: bladerf_clock_select: replace CLOCK_SELECT_VCTCXO with CLOCK_SELECT_ONBOARD for clarity (#585) * Improvements to the release notes (#583) * bladeRF-cli: Add 200 ms delay before probing PLL lock status (#587) * Windows: add a nanosleep() shim (#589) v2.0.0 (2018-08-13) -------------------------------- This version of libbladeRF is intended for use with: FX3 Firmware v2.2.0 FPGA v0.7.3 Initial release supporting the bladeRF 2.0 series, which currently features the bladeRF Micro A4 and the bladeRF Micro A9. Please see the changes for 1.9.x, as well as doc/doxygen/relnotes_2_0.dox, for a fuller summary of the changes since the last public release. Changes: * Add typedefs for common param types, such as bladerf_frequency -> uint64_t * Use a double-pointer on the bladerf_get_*_range calls * Omit unnecessary path elements on log printfs * Add log_get_verbosity function * Add detection of FPGA size for bladeRF Micro v1.9.2 (2018-05-22) -------------------------------- This version is part of development series of changes, not an official release. Changes: * Low level hardware control functions in bladeRF2.h have been renamed to be hardware-independent v1.9.1 (2018-03-26) -------------------------------- This version is part of development series of changes, not an official release. This version of libbladeRF is intended for use with: FX3 Firmware v2.1.0 (or v1.9.1) FPGA v0.7.2 Changes: * Refactor to support for multiple product lines * Add support for the bladeRF Micro product * API: replace bladerf_module with bladerf_channel, a reverse-compatible change to handle products with multiple independent RF paths in the same direction * API: BREAKING CHANGE - on bladerf_set_frequency, et al, the frequency parameter is now uint64_t instead of unsigned int * Significant code cleanup * Various other changes that will be listed in more detail during an official release v1.9.0 (2017-12-07) -------------------------------- This version of libbladeRF is intended for use with: FX3 Firmware v2.0.0 (or v1.9.1) FPGA v0.7.1 Changes: * Added bladeRF.conf config option file * Minor fix-ups v1.8.0 (2017-07-01) -------------------------------- This version of libbladeRF is intended for use with: FX3 Firmware v2.0.0 (or v1.9.1) FPGA v0.7.0 Changes: * Added support for Automatic Gain Control v1.7.2 (2016-06-29) -------------------------------- This version of libbladeRF is intended for use with: FX3 Firmware v2.0.0 (or v1.9.1) FPGA v0.6.0 Changes: * Fixed bladerf_open() BLADERF_ERR_IO issue that occured when autoloading from flash * Additional documentation fixes v1.7.1 (2016-05-28) -------------------------------- This version of libbladeRF is intended for use with: FX3 Firmware v2.0.0 (or v1.9.1) FPGA v0.6.0 Changes: * Non-functional API documentation (Doxygen) updates: - Re-organized and simplified documentation layout - Split "Control and Configuration" section into more cohesive sections - Added clarifications and corrections v1.7.0 (2016-05-22) -------------------------------- This version of libbladeRF is intended for use with: FX3 Firmware v2.0.0 (or v1.9.1) FPGA v0.6.0 Changes: * Added SMB clock control functionality * Added synchronization trigger functionality * Added XB-300 support * Fixed NIOS 8x32 reads * Cleaned up and reorganized API docs v1.6.1 (2016-04-11) -------------------------------- This version of libbladeRF is intended for use with: FX3 Firmware v2.0.0 (or v1.9.1) FPGA v0.5.0 Changes: * Fixes for issues #465 and #458 (TX timeouts and assert() failures) v1.6.0 (2016-04-07) -------------------------------- This version of libbladeRF is intended for use with: FX3 Firmware v2.0.0 (or v1.9.1) FPGA v0.5.0 Changes: * Updated to detect devices running firmware with new VID (2cf0) and PID (5246) v1.5.3 (2016-04-06) -------------------------------- This version of libbladeRF is intended for use with: FX3 Firmware v1.9.1 FPGA v0.5.0 Changes: * Corrected LIBBLADERF_API_VERSION mismatch from v1.5.2 v1.5.2 (2016-04-06) -------------------------------- This version of libbladeRF is intended for use with: FX3 Firmware v1.9.1 FPGA v0.5.0 Changes: * Added FX3 Firmware v1.9.1 to version compatibility table. v1.5.1 (2016-01-05) -------------------------------- This version of libbladeRF is intended for use with: FX3 Firmware v1.9.0 FPGA v0.5.0 Changes: * Addressed warnings that occur with GCC -Os flag. v1.5.0 (2015-12-31) -------------------------------- This version of libbladeRF is intended for use with: FX3 Firmware v1.9.0 FPGA v0.5.0 Changes: * Added LIBBLADERF_API_VERSION macro to libbladeRF.h - This is intended to assist with compile-time feature checks. * Added VCTCXO taming control via 1 PPS or 10 MHz source - bladerf_vctcxo_tamer_mode enumeration - bladerf_set_vctcxo_tamer_mode(), bladerf_get_vctcxo_tamer_mode() * Added API functions to set SMB clock to arbitrary frequency: - bladerf_set_rational_smb_frequency() - bladerf_get_rational_smb_frequency() - bladerf_set_smb_frequency() - bladerf_get_smb_frequency() * Added non-blocking async buffer submission API function: - bladerf_submit_stream_buffer_nb() * Added API call to retreive firmware log and write it to a file: - bladerf_get_fw_log() * Added XB-100 pin/button/LED macro definitions and support via bladerf_expansion_attach(). * Added BLADERF_ERR_PERMISSION. This is now returned in associated file and device access failures. * Added enumeration value entries: - BLADERF_MODULE_INVALID, BLADERF_DC_CAL_INVALID * Changed default frequencies - RX: 2.447 GHz - TX: 2.484 GHz * Removed function prototypes for si5338 functions that removed long ago * Fixed an issue where bladerf_sync_tx() was not using all available host-side buffers; host-side buffering was only limited to the number of requested transfers. This now uses all requested buffers. * Fixed #415, #416, #417 * Misc. API documentation and example fixes. v1.4.3 (2015-07-25) -------------------------------- This version of libbladeRF is intended for use with: FX3 Firmware v1.8.0 FPGA v0.3.4 Changes: * Fixed zero-padding on end of bursts (#413) * API documentation updates v1.4.2 (2015-07-22) -------------------------------- This version of libbladeRF is intended for use with: FX3 Firmware v1.8.0 FPGA v0.3.3 Changes: * Paths within the ${CMAKE_INSTALL_PREFIX} are now searched when looking for an FPGA bitstream to autoload. LIBBLADERF_SEARCH_PREFIX_OVERRIDE may be defined in the CMake invocation to override the ${CMAKE_INSTALL_PREFIX}, which may be needed during cross-builds. The previously hard-coded locations have been kept in the search list, but at a lower priority, to avoid breaking existing packaging scripts. v1.4.1 (2015-07-16) -------------------------------- This version of libbladeRF is intended for use with: FX3 Firmware v1.8.0 FPGA v0.3.3 Changes: * bladerf_open() and bladerf_open_with_devinfo() now support matching a subset of a serial number. * Fixed regression in XB-200 filter bank selection (#404) * Fixed regression in exiting loopback mode (#405) v1.4.0 (2015-06-30) -------------------------------- This version of libbladeRF is intended for use with: FX3 Firmware v1.8.0 FPGA v0.3.3 Changes: * Fix bug in read NIOS 8x16 packet value * Added API function for readback of current VCTCXO trim DAC value (as opposed to calibration data from flash). - bladerf_dac_read() v1.3.1 (2015-06-18) -------------------------------- This version of libbladeRF is intended for use with: FX3 Firmware v1.8.0 FPGA v0.3.1 Changes: * Added support for new NIOS II packet handlers introduced in FPGA v0.3.x v1.3.0 (2015-06-18) -------------------------------- This version of libbladeRF is intended for use with: FX3 Firmware v1.8.0 FPGA v0.3.1 Changes: * Added API calls for new frequency tuning support: - bladerf_schedule_retune() - bladerf_get_quick_tune() - bladerf_set_tuning_mode() * Added error code: BLADERF_ERR_FPGA_OP - Denotes failure in operation performed on FPGA * Logo included in repo for documentation build v1.2.1 (2015-02-28) -------------------------------- This version of libbladeRF is intended for use with: FX3 Firmware v1.8.0 FPGA v0.1.2 Changes: * Build fixes for MinGW (cross-compilation) and OSX v1.2.0 (2015-01-31) -------------------------------- This version of libbladeRF is intended for use with: FX3 Firmware v1.8.0 FPGA v0.1.2 Changes: * Added support for BLADERF_LOG_LEVEL environment variable. This controls the default verbosity of libbladeRF and may be set to one of the following strings: critical, error, warning, info, debug, verbose. * Syslog support has been introduced to aid in debugging of applications that suppress libbladeRF's stderr output. This can be enabled at compile-time via the ENABLE_LIBBLADERF_SYSLOG CMake option, which defaults to OFF. * Linux: A port reset is now performed when opening a device. This addresses an issue where the bladeRF could not be opened after an application crashes. (Fixes issue #95.) * Fixed signal quality issues caused by LPF DC calibration comparators being left on. Prior to the associated changes, significant images in the spectrum could be observed prior to performing DC calibration routines. * Fixed XB-200 signal attenuation issues that occurred when bypassing the XB-200 mixer (i.e., operating in the normal bladeRF tuning range with an XB-200 attached). * LMS DC cal registers are now loaded from tables at every device open() rather than just during the post-FPGA load initialization. This ensures that values from updated tables are used. * Fixed probe() implementation in Cypress backend to correctly report devices that are already opened. v1.1.0 (2014-12-23) -------------------------------- This version of libbladeRF is intended for use with: FX3 Firmware v1.8.0 FPGA v0.1.2 Changes: * Added bladerf_get_bootloader_list() API function to allow applications to detect devices in bootloader mode. * Added bladerf_load_fw_from_bootloader() API function to allow applications to download firmware to devices in bootloader mode. * File searching (e.g., for host-based FPGA loading) now searches the following, prior to the currently search paths: - The directory specified by the BLADERF_SEARCH_DIR environment variable - The current working directory - The directory containing the running executable * Removed library [INFO] message about detected devices in bootloader mode. This is now done in the bladeRF-cli program. * Fixed build issue that resulted in libusb version not being reported correctly in verbose log output. v1.0.0 (2014-11-29) -------------------------------- This version of libbladeRF is intended for use with: FX3 Firmware v1.8.0 FPGA v0.1.2 Changes: * Major version number bumped to indicate stable API. * Removed stdbool.h inclusion for C++ code in API header. * Fixed USB control transfer issue that caused SPI flash corruption in Windows when using libusb with the WinUSB driver. * When an FPGA is autoloading from SPI flash, the bladerf_open() and bladerf_open_with_devinfo() calls now wait for the autoload to complete. * This requires FW v1.8.0. v0.17.0 (2014-10-30) -------------------------------- This version of libbladeRF is intended for use with: FX3 Firmware v1.7.1 FPGA v0.1.1 Changes: * Added support for CyUSB3/CyAPI backend * Added timestamp metadata support to synchronous interface. This includes modifications to the bladerf_metadata structure and the introduction of the BLADERF_FORMAT_SC16_Q11_META format. * libbladeRF functions have been made thread-safe. * The Windows installation directory is now searched when performing host-based FPGA and DC calibration file auto-loading. * Improved log output; moved output to more appropriate levels and included filename and line number log messages. * Removed BLADERF_FORMAT_SC16Q12 reverse compatibility macro. * Added macro definitions for FPGA configuration bits: - BLADERF_GPIO_COUNTER_ENABLE - BLADERF_GPIO_TIMESTAMP - BLADERF_GPIO_TIMESTAMP_DIV2 * Fixed bugs that caused deadlocks and crashes. * Fixed device probe/open functions to continue searching for devices if a failing or busy device is encountered. * Improved API documentation and included more complete example usages of the synchronous interface. Snippets from programs in doc/examples are now included in the Doxygen output. v0.16.2 (2014-07-24) -------------------------------- This version of libbladeRF is intended for use with: FX3 Firmware v1.7.1 FPGA v0.0.6 Changes: * Minor changes build with respect to OSX RPATH. This should not affect Windows or Linux users. v0.16.1 (2014-07-20) -------------------------------- This version of libbladeRF is intended for use with: FX3 Firmware v1.7.1 FPGA v0.0.6 Changes: * Preliminary implementation of bladerf_set_gain() and XB-200 automatic filterbank selection functions. * Introduced FPGA and FX3 version compatibility checks and warnings messages when incompatible/unknown versions are detected * Fixed set/get loopback mode, with respect to firmware loopback functionality. Firmware loopback now requires FW v1.7.1+ * Bug fixes for: + Frequency readback (when XB-200 is attached) + Read back of XB-200 path + Samplerate-transfer relationship equation in API docs + Version comparison routines v0.16.0 (2014-07-04) -------------------------------- * Added XB-200 support * Added experimental DC calibration and DC calibration table support * Added "software autoload" of FPGAs and DC cal tables from config directories - In Linux & OSX the following directories are searched: ~/.config/Nuand/bladeRF/, ~/.Nuand/bladeRF/, /etc/Nuand/bladeRF/ - In Windows, %APPDATA%/Nuand/bladeRF is searched * Added "File not found" (BLADERF_ERR_NO_FILE) return code * Allow tuning up to 3.8GHz * Fixed incorrect version checks - This resolves issue where VCTCXO value stored in SPI Flash isn't loaded when using FPGA v0.0.3. * Fixed intermittent FPGA load failures v0.15.0 (2014-05-17) -------------------------------- * API changes: - Added functions: + FPGA timestamp access (requires FPGA v0.0.4+) + Expansion board GPIO and SPI accessors (requires FPGA v0.0.4+) - Added firmware loopback option (requires FX3 FW v1.7.0+) - Changed SPI flash access functions + Functions now operate in units of erase blocks and pages - Removed un-aligned accesses * Overhauled backend interface to decouple device logic from libusb code. - Moved code to a generic USB interface and libusb code under that interface. This should allow host-specific drivers to be more easily integrated. * Addressed race conditions in the async RX/TX interface. - pthreads is now a required dependency of libbladeRF. * Bug fixes for the sync RX/TX interface * Windows build and compatibility fixes v0.14.0 (2014-03-08) -------------------------------- * Added a new synchronous data transfer interface that operates atop the existing asynchronous interface. * Removed of bladerf_rx() and bladerf_tx() functions - These have been replaced by bladerf_sync_rx() and bladerf_synx_tx() * Renamed stream transfer timeout functions v0.13.1 (2014-02-27) -------------------------------- * Bug fixes for regressions introduced into LMS6002 code in v0.13.0 v0.13.0 (2014-02-13) -------------------------------- * Refactored LMS code and loopback support * Updated API calls to allow NULL for optional API parameters * Added dummy backend - This is intended for developers. It allows the library to build while other backend code is disabled. * Misc. minor bug fixes v0.12.1 (2014-01-19) -------------------------------- * Normalized DC offset functions to accept values in [-2048, 2048] - Additional range checking added v0.12.0 (2014-01-18) -------------------------------- * API changes: - Naming correction: BLADERF_IQ_CORR_* changed to BLADERF_CORR_* - Removed unused bladerf_stats structure - Fixed format misnomer: BLADERF_FORMAT_SC16_Q12 has been renamed to BLADERF_FORMAT_SC16_Q11. - Fixed names of transfer timeout functions: get/set_transfer_timeout() -> bladerf_get/set_transfer_timeout() * During initialization, the device is switched to USB_IF_NULL in order to ensure it is in a known state. v0.11.2 (2014-01-14) -------------------------------- * Switch to USB_IF_NULL when closing a device to avoid issues when attempting to reopen a device on OSX v0.11.1(.1) (2014-01-05) -------------------------------- * Fixed race conditions caused by use of bladerf_enable_module() in the implementation of bladerf_stream(). Users are now responsible for ensuring a module enabled before attempting to start a stream. v0.11.0 (2013-12-28) -------------------------------- * Added support for reading back an FPGA version number * Explicitly define calling conventions on API functions (Windows) * Fixed build for libusbx-1.0.9 - Misc build and code fixes for libusb detection and version checks * Sped up SPI flash writes * Decreased default library verbosity v0.10.0 (2013-11-28) -------------------------------- * Added API support for initializing, backing up, and restoring the calibration data stored in SPI flash * Fixed incorrect definition of FPGA region of SPI flash * Fixed RPATH issue in OSX * License changed to LGPLv2.1 v0.9.0 (2013-10-21) -------------------------------- * Added option to disable log output at compile-time * Added BLADERF_LOG_LEVEL_SILENT to disable log output at run-time v0.8.0 (2013-10-21) -------------------------------- * Added API functions to get/set stream transfer timeouts * Fixed Win64 build issues * Fixes for various bugs in LMS code v0.7.0 (2013-10-14) -------------------------------- * Added API function to flash FPGA image (to allow for autoloading) * Improved frequency tuning algorithm * Fixes for flash-related code v0.6.2 (2013-10-04) -------------------------------- * Fixed memory leaks v0.6.1 (2013-10-04) -------------------------------- * Corrected access of firmware version info v0.6.0 (2013-10-03) -------------------------------- * Added bladerf_version structure to API and modified version accessors to use this structure. * LMS bug fixes * Backwards compatibility and MSVC compatibility fixes v0.5.0 (2013-09-22) -------------------------------- * Internal changes to support major refactoring of FX3 code * Fixed sample count on initial TX callback v0.4.0 (2013-09-18) -------------------------------- * Added asynchronous data transfer interface to API * Added device identifier matching routines to API v0.3.0 (2013-08-13) -------------------------------- * Transitioned to CMake-based build * Introduced libusb support bladeRF-2024.05/host/libraries/libbladeRF/CMakeLists.txt000066400000000000000000000503011457144405000226470ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.5) project(libbladeRF C) ################################################################################ # Version information ################################################################################ set(VERSION_INFO_MAJOR 2) set(VERSION_INFO_MINOR 5) set(VERSION_INFO_PATCH 0) set(LIBBLADERF_VERSION ${VERSION_INFO_MAJOR}.${VERSION_INFO_MINOR}.${VERSION_INFO_PATCH}) if(NOT DEFINED VERSION_INFO_EXTRA) set(VERSION_INFO_EXTRA "git") endif() include(Version) set(VERSION "${VERSION_INFO}") set(LIBVER "${VERSION_INFO_BASE}") configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/src/version.h.in ${CMAKE_CURRENT_BINARY_DIR}/src/version.h @ONLY ) if(MSVC) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/bladerf.rc.in ${CMAKE_CURRENT_BINARY_DIR}/bladerf.rc @ONLY ) endif() if (NOT CMAKE_INSTALL_LIBDIR) include(GNUInstallDirs) endif (NOT CMAKE_INSTALL_LIBDIR) if (NOT CMAKE_INSTALL_DOCDIR) include(GNUInstallDirs) endif (NOT CMAKE_INSTALL_DOCDIR) # Fall back to just "lib" if the item provided by GNUInstallDirs doesn't exist # For example, on Ubuntu 13.10 with CMake 2.8.11.2, # /usr/lib/${CMAKE_LIBRARY_ARCHITECTURE} doesn't exist. if (NOT EXISTS "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}") message(STATUS "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR} does not exist. Defaulting libbladeRF install location to ${CMAKE_INSTALL_PREFIX}/lib.") set(CMAKE_INSTALL_LIBDIR lib) endif() ################################################################################ # Configuration options ################################################################################ option(ENABLE_LIBBLADERF_LOGGING "Enable log messages in libbladeRF." ON) option(ENABLE_LIBBLADERF_SYSLOG "Enable logging to syslog (Linux/OSX)" OFF) option(BUILD_LIBBLADERF_DOCUMENTATION "Build libbladeRF documentation. Requries Doxygen." ${BUILD_DOCUMENTATION}) if(NOT ${BUILD_DOCUMENTATION}) set(BUILD_LIBBLADERF_DOCUMENTATION OFF) endif() option(BUILD_LIBBLADERF_DOC_EXAMPLES "Compile examples that are included in Doxygen documentation (mainly for QA purposes)." ${BUILD_LIBBLADERF_DOCUMENTATION}) option(ENABLE_LIBBLADERF_SYNC_LOG_VERBOSE "Enable log_verbose() calls in the sync interface's data path. Note that this may harm performance." OFF ) option(ENABLE_LIBBLADERF_NIOS_ACCESS_LOG_VERBOSE "Enable log_verbose() calls on frequently-used functions in nios_access.c. Note that this may produce a lot of log output." OFF ) option(ENABLE_LOCK_CHECKS "Enable checks for lock acquisition failures (e.g., deadlock)" OFF ) option(ENABLE_USB_DEV_RESET_ON_OPEN "Perform a USB port reset when opening a device. This works around an issue on some Linux USB 3.0 setups that prevents a device from being opened after an application crash or unclean exit." ${BLADERF_OS_LINUX} ) option(ENABLE_RFIC_TIMING_CALIBRATION "Perform timing calibration on the RFIC digital interface during initialization. This is only implemented on AD936x-based hardware." OFF ) ############################## # Backend Support ############################## option(ENABLE_BACKEND_USB "Enable USB backends. Required when using the bladeRF with a host machine." ON ) option(ENABLE_BACKEND_LIBUSB "Enable libusb backend support." ${LIBUSB_FOUND} ) option(ENABLE_BACKEND_CYAPI "Enable CYAPI backend support." ${CYAPI_FOUND} ) option(ENABLE_BACKEND_DUMMY "Enable dummy backend support. This is only useful for some developers." OFF ) # Ensure we've got at least one backend enabled if(NOT ENABLE_BACKEND_LIBUSB AND NOT ENABLE_BACKEND_LINUX_DRIVER AND NOT ENABLE_BACKEND_CYAPI AND NOT ENABLE_BACKEND_DUMMY) message(FATAL_ERROR "Cannot enable any libbladeRF backends due to missing library support. " "Consider installing libusb dev package (libusb-1.0-0-dev on Ubuntu). " "No libbladeRF backends are enabled. " "Please enable one or more backends." ) endif() configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/src/backend/backend_config.h.in ${CMAKE_CURRENT_BINARY_DIR}/src/backend/backend_config.h @ONLY ) ################################################################################ # Additional compiler options ################################################################################ if(ENABLE_LIBBLADERF_LOGGING) add_definitions(-DLOGGING_ENABLED) endif() if(ENABLE_LIBBLADERF_SYSLOG) add_definitions(-DLOG_SYSLOG_ENABLED) endif() if(ENABLE_LOCK_CHECKS) add_definitions(-DENABLE_LOCK_CHECKS) endif() if(ENABLE_RFIC_TIMING_CALIBRATION) add_definitions(-DENABLE_AD9361_DIGITAL_INTERFACE_TIMING_VERIFICATION) endif() if(${CMAKE_C_COMPILER_ID} STREQUAL "GNU" OR ${CMAKE_C_COMPILER_ID} STREQUAL "Clang") # Doing this manually instead of via add_compiler_export_flags() since # the GenerateExportHeader module appears to break for C-only projects: # # http://www.cmake.org/pipermail/cmake-commits/2012-August/013142.html set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden") endif() # We define LIBBLADERF_SEARCH_PREFIX to specify where libbladeRF should look # for files, such as FPGA bitstreams to autoload. # # This defaults to the value of ${CMAKE_INSTALL_PREFIX}. However, # users may wish to override when cross compiling. if(LIBBLADERF_SEARCH_PREFIX_OVERRIDE) add_definitions(-DLIBBLADERF_SEARCH_PREFIX="${LIBBLADERF_SEARCH_PREFIX_OVERRIDE}") else() add_definitions(-DLIBBLADERF_SEARCH_PREFIX="${CMAKE_INSTALL_PREFIX}") endif() ################################################################################ # Include paths ################################################################################ set(LIBBLADERF_INCLUDES ${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR}/src ${BLADERF_HOST_COMMON_INCLUDE_DIRS} ${BLADERF_FW_COMMON_INCLUDE_DIR} ${BLADERF_FPGA_COMMON_INCLUDE_DIR} ${CMAKE_CURRENT_BINARY_DIR}/src ) ################################################################################ # Build dependencies ################################################################################ if(MSVC) set(LIBBLADERF_INCLUDES ${LIBBLADERF_INCLUDES} ${MSVC_C99_INCLUDES}) find_package(LibPThreadsWin32 REQUIRED) if(LIBPTHREADSWIN32_FOUND) set(HAVE_THREADS true) set(LIBBLADERF_INCLUDES ${LIBBLADERF_INCLUDES} ${LIBPTHREADSWIN32_INCLUDE_DIRS}) set(LIBBLADERF_LIBS ${LIBBLADERF_LIBS} ${LIBPTHREADSWIN32_LIBRARIES}) else() set(HAVE_THREADS false) endif() else(MSVC) find_package(Threads REQUIRED) if(Threads_FOUND) set(HAVE_THREADS true) else() set(HAVE_THREADS false) endif() endif(MSVC) if(BLADERF_OS_OSX) set(LIBBLADERF_INCLUDES ${LIBBLADERF_INCLUDES} /usr/include/malloc) endif() if (NOT HAVE_THREADS) message(FATAL_ERROR "pthreads not found. This is required to build libbladeRF.") endif() if(NOT ENABLE_BACKEND_USB) set(ENABLE_BACKEND_LIBUSB OFF) set(ENABLE_BACKEND_LINUX_DRIVER OFF) endif() if(ENABLE_BACKEND_LIBUSB) if(NOT LIBUSB_FOUND) message(FATAL_ERROR "libusb-1.0 not found. This is required to use the libbladeRF libusb backend. For binary releases, try setting LIBUSB_PATH.") else(NOT LIBUSB_FOUND) if(LIBUSB_VERSION) if(NOT LIBUSB_VERSION VERSION_LESS "1.0.10") add_definitions(-DHAVE_LIBUSB_GET_VERSION) endif() if(WIN32) # We require v1.0.19 because it provides Windows 8 USB 3.0 # speed detection fixes, additional AMD/Intel USB 3.0 root # hub support, and some fixes to issues reported on v1.0.18 # that yielded corrupted samples. if(${LIBUSB_VERSION} VERSION_LESS "1.0.19") message(FATAL_ERROR "libusb v1.0.19 is required in Windows.\n" "Please update libusb or consider using the Cypress backend if this is not possible.\n" "Detected version: ${LIBUSB_VERSION}\n") endif() elseif(APPLE) # A number of important changes were included in libusb # v1.0.16 hrough v1.0.18, including SuperSpeed support, 64-bit support, # and various build and crash fixes. if(${LIBUSB_VERSION} VERSION_LESS "1.0.18") message(FATAL_ERROR "libusb v1.0.18 is required in OS X. Please update libusb." "Detected version: ${LIBUSB_VERSION}\n") endif() elseif(UNIX) # A number of reported issues supposedly became resolved after # updating to >= 1.0.16. if(${LIBUSB_VERSION} VERSION_LESS "1.0.16") message(WARNING "\nlibusb >= 1.0.16 is HIGHLY recommended. " "If you experience issues or poor performance, please try updating libusb.\n" "Detected version: ${LIBUSB_VERSION}") endif() else() message(WARNING "Unexpected system type. Please report this warning to developers.") endif() elseif(BLADERF_OS_FREEBSD) message(STATUS "Using FreeBSD's built-in libusb implementation.") else() message(WARNING "Not checking libbladeRF/libusb compatibility because LIBUSB_VERSION is not defined.") endif() set(LIBBLADERF_INCLUDES ${LIBBLADERF_INCLUDES} ${LIBUSB_INCLUDE_DIRS}) endif(NOT LIBUSB_FOUND) endif(ENABLE_BACKEND_LIBUSB) if(ENABLE_BACKEND_CYAPI) find_package(CyAPI REQUIRED) set(LIBBLADERF_INCLUDES ${LIBBLADERF_INCLUDES} ${CYAPI_INCLUDE_DIRS}) endif(ENABLE_BACKEND_CYAPI) if(MSVC) set(LIBBLADERF_INCLUDES ${LIBBLADERF_INCLUDES} ${LIBPTHREADSWIN32_INCLUDE_DIRS}) endif() if(ENABLE_LIBBLADERF_SYNC_LOG_VERBOSE AND ENABLE_LIBBLADERF_LOGGING) add_definitions(-DENABLE_LIBBLADERF_SYNC_LOG_VERBOSE) endif() if(ENABLE_LIBBLADERF_NIOS_ACCESS_LOG_VERBOSE AND ENABLE_LIBBLADERF_LOGGING) add_definitions(-DENABLE_LIBBLADERF_NIOS_ACCESS_LOG_VERBOSE) endif() if(ENABLE_USB_DEV_RESET_ON_OPEN) add_definitions(-DENABLE_USB_DEV_RESET_ON_OPEN=1) endif() if(BUILD_AD936X) set(LIBBLADERF_LIBS ${LIBBLADERF_LIBS} ad936x) endif(BUILD_AD936X) include_directories(${LIBBLADERF_INCLUDES}) ################################################################################ # Configure source files ################################################################################ set(LIBBLADERF_SOURCE_BLADERF2 ${BLADERF_FPGA_COMMON_SOURCE_DIR}/ad936x_helpers.c ${BLADERF_FPGA_COMMON_SOURCE_DIR}/bladerf2_common.c src/board/bladerf2/bladerf2.c src/board/bladerf2/capabilities.c src/board/bladerf2/common.c src/board/bladerf2/compatibility.c src/board/bladerf2/rfic_fpga.c src/board/bladerf2/rfic_host.c ) set(LIBBLADERF_SOURCE src/backend/backend.c src/driver/spi_flash.c src/driver/fx3_fw.c src/driver/fpga_trigger.c src/driver/si5338.c src/driver/ina219.c src/driver/dac161s055.c src/driver/smb_clock.c src/board/bladerf1/bladerf1.c src/board/bladerf1/capabilities.c src/board/bladerf1/compatibility.c src/board/bladerf1/calibration.c src/board/bladerf1/flash.c src/board/bladerf1/image.c src/board/board.c src/expansion/xb100.c src/expansion/xb200.c src/expansion/xb300.c src/streaming/async.c src/streaming/sync.c src/streaming/sync_worker.c src/init_fini.c src/helpers/timeout.c src/helpers/file.c src/helpers/version.c src/helpers/wallclock.c src/helpers/interleave.c src/helpers/configfile.c src/version.h src/devinfo.c src/bladerf.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/sha256.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/conversions.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/log.c ${BLADERF_FPGA_COMMON_SOURCE_DIR}/lms.c ${BLADERF_FPGA_COMMON_SOURCE_DIR}/band_select.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/parse.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/range.c ) if(BUILD_AD936X) set(LIBBLADERF_SOURCE ${LIBBLADERF_SOURCE} ${LIBBLADERF_SOURCE_BLADERF2}) endif() if (MSVC) set(LIBBLADERF_SOURCE ${LIBBLADERF_SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/bladerf.rc) endif() if(ENABLE_BACKEND_USB) # Useful when doing FX3, NIOS-II, or FPGA debugging if(LIBBLADERF_DISABLE_USB_TIMEOUTS) add_definitions("-DPERIPHERAL_TIMEOUT_MS=0") add_definitions("-DCTRL_TIMEOUT_MS=0") add_definitions("-DBULK_TIMEOUT_MS=0") endif() set(LIBBLADERF_SOURCE ${LIBBLADERF_SOURCE} src/backend/usb/nios_access.c src/backend/usb/nios_legacy_access.c src/backend/usb/usb.c ) endif() if(LIBUSB_FOUND AND ENABLE_BACKEND_LIBUSB) set(LIBBLADERF_SOURCE ${LIBBLADERF_SOURCE} src/backend/usb/libusb.c) endif() if(ENABLE_BACKEND_CYAPI) if(CYAPI_FOUND) set(LIBBLADERF_SOURCE ${LIBBLADERF_SOURCE} src/backend/usb/cyapi.c) # CyAPI is C++ set_source_files_properties(src/backend/usb/cyapi.c PROPERTIES LANGUAGE CXX) else() message(FATAL_ERROR "CyAPI was not found or is not compatible with this system.") endif() endif() if(ENABLE_BACKEND_DUMMY) set(LIBBLADERF_SOURCE ${LIBBLADERF_SOURCE} src/backend/dummy/dummy.c) endif() if(ENABLE_BACKEND_LINUX_DRIVER) set(LIBBLADERF_SOURCE ${LIBBLADERF_SOURCE} src/backend/linux.c) endif() if(BLADERF_OS_OSX) if (NOT HAVE_CLOCK_GETTIME) message(STATUS "Including clock_gettime.c shim for macOS") set(LIBBLADERF_SOURCE ${LIBBLADERF_SOURCE} ${BLADERF_HOST_COMMON_SOURCE_DIR}/osx/clock_gettime.c ) endif() endif() if(MSVC) if (NOT HAVE_CLOCK_GETTIME) message(STATUS "Including clock_gettime.c shim for Windows") set(LIBBLADERF_SOURCE ${LIBBLADERF_SOURCE} ${BLADERF_HOST_COMMON_SOURCE_DIR}/windows/clock_gettime.c ) endif() message(STATUS "Including setenv.c shim for Windows") set(LIBBLADERF_SOURCE ${LIBBLADERF_SOURCE} ${BLADERF_HOST_COMMON_SOURCE_DIR}/windows/setenv.c ) endif() if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.20) cmake_policy(SET CMP0115 OLD) endif(CMAKE_VERSION VERSION_GREATER_EQUAL 3.20) add_library(libbladerf_shared SHARED ${LIBBLADERF_SOURCE}) ################################################################################ # Build configuration ################################################################################ if(MSVC) set(LIBBLADERF_LIBS ${LIBBLADERF_LIBS} ${LIBPTHREADSWIN32_LIBRARIES}) else() set(LIBBLADERF_LIBS ${LIBBLADERF_LIBS} ${CMAKE_THREAD_LIBS_INIT}) endif(MSVC) if(ENABLE_BACKEND_LIBUSB) set(LIBBLADERF_LIBS ${LIBBLADERF_LIBS} ${LIBUSB_LIBRARIES}) endif() if(ENABLE_BACKEND_CYAPI) set(LIBBLADERF_LIBS ${LIBBLADERF_LIBS} ${CYAPI_LIBRARIES}) endif(ENABLE_BACKEND_CYAPI) target_link_libraries(libbladerf_shared ${LIBBLADERF_LIBS}) # Adjust our output name set_target_properties(libbladerf_shared PROPERTIES OUTPUT_NAME bladeRF) # Set shared library version set_target_properties(libbladerf_shared PROPERTIES SOVERSION ${VERSION_INFO_MAJOR}) include(Shortfile) define_file_basename_for_sources(libbladerf_shared) ################################################################################ # Generate pkg-config file ################################################################################ add_subdirectory(include) foreach(inc ${LIBBLADERF_INCLUDE_DIR}) list(APPEND LIBBLADERF_PC_CFLAGS "-I${inc}") endforeach() foreach(lib ${LIBBLADERF_LIBRARY_DIRS}) list(APPEND LIBBLADERF_PC_PRIV_LIBS "-L${lib}") endforeach() set(LIBBLADERF_PC_PREFIX ${CMAKE_INSTALL_PREFIX}) set(LIBBLADERF_PC_EXEC_PREFIX \${prefix}) set(LIBBLADERF_PC_LIBDIR \${exec_prefix}/${CMAKE_INSTALL_LIBDIR}) set(LIBBLADERF_PC_INCLUDEDIR \${prefix}/include) set(LIBBLADERF_PC_VERSION ${VERSION}) set(LIBBLADERF_PC_LIBS "-lbladeRF") # Use space-delimiter in the .pc file, rather than CMake's semicolon separator string(REPLACE ";" " " LIBBLADERF_PC_CFLAGS "${LIBBLADERF_PC_CFLAGS}") string(REPLACE ";" " " LIBBLADERF_PC_LIBS "${LIBBLADERF_PC_LIBS}") # Unset these to avoid hard-coded paths in a cross-environment if(CMAKE_CROSSCOMPILING) unset(LIBBLADERF_PC_CFLAGS) unset(LIBBLADERF_PC_LIBS) endif() configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/libbladeRF.pc.in ${CMAKE_CURRENT_BINARY_DIR}/libbladeRF.pc @ONLY ) if(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") install( FILES ${CMAKE_CURRENT_BINARY_DIR}/libbladeRF.pc DESTINATION ${CMAKE_INSTALL_PREFIX}/libdata/pkgconfig ) else() install( FILES ${CMAKE_CURRENT_BINARY_DIR}/libbladeRF.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig/ ) endif(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") ################################################################################ # Library installation information ################################################################################ install(TARGETS libbladerf_shared LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} # .so/.dylib ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} # .a/.lib RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR} # .dll ) # ############################################################################### # CMake Config Files # ############################################################################### configure_file( ${PROJECT_SOURCE_DIR}/cmake/libbladeRFConfigVersion.cmake.in ${PROJECT_BINARY_DIR}/bladeRFConfigVersion.cmake @ONLY) configure_file( ${PROJECT_SOURCE_DIR}/cmake/libbladeRFConfig.cmake.in ${PROJECT_BINARY_DIR}/bladeRFConfig.cmake @ONLY) set(cmake_files ${PROJECT_BINARY_DIR}/bladeRFConfig.cmake ${PROJECT_BINARY_DIR}/bladeRFConfigVersion.cmake) if(UNIX) install(FILES ${cmake_files} DESTINATION share/cmake/bladeRF) elseif(WIN32) install(FILES ${cmake_files} DESTINATION cmake) endif() ################################################################################ # Informational output ################################################################################ message(STATUS "libbladeRF version: ${VERSION_INFO}") ################################################################################ # Doxygen documentation ################################################################################ if(BUILD_LIBBLADERF_DOC_EXAMPLES) add_subdirectory(doc/examples) endif() if(BUILD_LIBBLADERF_DOCUMENTATION) find_package(Doxygen) if(DOXYGEN_FOUND) message(STATUS "Configured to build libbladeRF API documentation.") set(LOGO_IMAGE "${CMAKE_CURRENT_SOURCE_DIR}/doc/images/logo.png") file(GLOB INCLUDE_H ${CMAKE_CURRENT_SOURCE_DIR}/include/*.h) file(GLOB DOC_DOX ${CMAKE_CURRENT_SOURCE_DIR}/doc/doxygen/*.dox) file(GLOB DOC_EXAMPLES ${CMAKE_CURRENT_SOURCE_DIR}/doc/examples/*) file(GLOB DOC_IMAGES ${CMAKE_CURRENT_SOURCE_DIR}/doc/images/*) set(DOXYGEN_SOURCE_FILES ${CMAKE_CURRENT_BINARY_DIR}/doc/doxygen/Doxyfile ${INCLUDE_H} ${DOC_DOX} ${CMAKE_CURRENT_SOURCE_DIR}/doc/doxygen/layout.xml ${DOC_EXAMPLES} ${DOC_IMAGES} ) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/doc/doxygen/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/doc/doxygen/Doxyfile @ONLY ) add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/doc/doxygen/html/index.html DEPENDS ${DOXYGEN_SOURCE_FILES} COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/doc/doxygen/Doxyfile WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc/doxygen COMMENT "Generating libbladeRF API documentation via Doxygen in: ${CMAKE_CURRENT_BINARY_DIR}/doc/doxygen" ) add_custom_target(libbladeRF-doxygen ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/doc/doxygen/html/index.html) install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc/doxygen/html/ DESTINATION ${CMAKE_INSTALL_DOCDIR}/html) else(DOXYGEN_FOUND) message(FATAL_ERROR "Could not find Doxygen. Unable to build libbladeRF API documentation.") endif(DOXYGEN_FOUND) endif(BUILD_LIBBLADERF_DOCUMENTATION) bladeRF-2024.05/host/libraries/libbladeRF/README.md000066400000000000000000000076551457144405000214040ustar00rootroot00000000000000# bladeRF Library (libbladeRF) # This is the source for the library which interacts with the bladeRF device. It is meant to be used as a simple and intuitive way to think about not just the bladeRF device itself, but most any radio hardware. Fundamental operations such as setting the tuning frequency, manipulating switches on the board for different paths, and changing the different transmit and receive gains are all parts of a radio system which need to be exposed at a library level. Functionality provided by this library includes: - Opening/closing devices and querying information about them - Tuning to various frequencies - Configuring the sample rate - Configuring the bandwidth and gain of the RF chain - Configuring RF gains - Transmitting and receiving complex baseband samples - Updating the device's firmware and FPGA - Low-level access to on-board devices, for testing and debugging Please see the [CHANGELOG](CHANGELOG) file for a summary of changes across libbladeRF versions. ## Documentation ## For more information, one can generate and view the API documentation. From your host/build directory, run: ``` cmake -DBUILD_DOCUMENTATION=ON ../ make libbladeRF-doxygen ``` The HTML documentation will be placed in **\/libraries/libbladerf/doc/doxygen/html**. The **index.html** file is the "main" documentation page. This API documentation is available online at: https://nuand.com/libbladeRF-doc ## Build Variables ## Below is a list of useful and project-specific CMake options. Please see the CMake [variable list] in CMake's documentation for more information. | Option | Description | ------------------------------------------------- |:---------------------------------------------------------------------------------------------------------------------| | -DBUILD_LIBBLADERF_DOCUMENTATION=\ | Builds API documentation using Doxygen. Default: equal to BUILD_DOCUMENTATION | | -DENABLE_BACKEND_USB=\ | Enables USB backends in libbladeRF. Default: ON | | -DENABLE_BACKEND_LIBUSB=\ | Enables libusb backend. Default: ON if libusb is available, OFF otherwise. | | -DENABLE_BACKEND_CYAPI=\a | Enables (Windows-only) Cypress driver/library based backend. Default: ON if the FX3 SDK is available, OFF otherwise. | | -DENABLE_BACKEND_DUMMY=\ | Enables dummy backend support. Only useful for some developers. Default: OFF | | -DENABLE_LIBBLADERF_LOGGING=\ | Enable log messages. Default: ON | | -DENABLE_LIBBLADERF_SYSLOG=\ | Enable log messages to syslog (Linux/OSX) if ENABLE_LIBBLADERF_LOGGING is enabled. Default: OFF | | -DENABLE_LIBBLADERF_SYNC_LOG_VERBOSE=\ | Enable log_verbose() calls in the sync interface's data path. Note that this may harm performance. Default: OFF | | -DENABLE_LOCK_CHECKS=\ | Enable checks for lock acquistion failures (e.g., deadlock). Default: OFF | | -DENABLE_USB_DEV_RESET_ON_OPEN=\ | Enable USB port reset when opening a device. Defaults to ON for Linux, OFF otherwise. | | -DLIBUSB_PATH=\
| Path to libusb files. This is generally only needed for Windows users who downloaded binary distributions. | | -DLIBBLADERF_SEARCH_PREFIX_OVERRIDE=\ | Override path prefix used by libbladeRF to search for files (e.g., FPGA bitstreams). If not specified, ${CMAKE_INSTALL_PREFIX} is used as the default search prefix. This may be required when cross-compiling. | bladeRF-2024.05/host/libraries/libbladeRF/bladerf.rc.in000066400000000000000000000016251457144405000224460ustar00rootroot00000000000000#define VER_FILEVERSION @VERSION_INFO_MAJOR@,@VERSION_INFO_MINOR@,@VERSION_INFO_PATCH@,0 #define VER_FILEVERSION_STR "@VERSION@\0" #define VER_PRODUCTVERSION @VERSION_INFO_MAJOR@,@VERSION_INFO_MINOR@,@VERSION_INFO_PATCH@,0 #define VER_PRODUCTVERSION_STR "@VERSION@\0" 1 VERSIONINFO #ifdef _DEBUG #include FILEFLAGS VS_FF_DEBUG #else FILEFLAGS 32 #endif FILEVERSION VER_FILEVERSION PRODUCTVERSION VER_PRODUCTVERSION FILEOS 4 FILETYPE 1 { BLOCK "StringFileInfo" { BLOCK "040904B0" { VALUE "FileDescription", "bladeRF" VALUE "OriginalFilename", "bladeRF.dll" VALUE "CompanyName", "Nuand LLC" VALUE "FileVersion", VER_FILEVERSION_STR VALUE "LegalCopyright", "Copyright (c) 2013-2015, Nuand LLC" VALUE "ProductName", "bladeRF" VALUE "ProductVersion", VER_PRODUCTVERSION_STR } } BLOCK "VarFileInfo" { VALUE "Translation", 0x0409, 0x04B0 } } } bladeRF-2024.05/host/libraries/libbladeRF/cmake/000077500000000000000000000000001457144405000211705ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF/cmake/libbladeRFConfig.cmake.in000066400000000000000000000034361457144405000257210ustar00rootroot00000000000000if(DEFINED INCLUDED_LIBBLADERF_CONFIG_CMAKE) return() endif() set(INCLUDED_LIBBLADERF_CONFIG_CMAKE TRUE) # ####################################################################### # libbladeRFConfig - cmake project configuration # # The following will be set after find_package(libbladeRF CONFIG): # libbladeRF_LIBRARIES - development libraries # libbladeRF_INCLUDE_DIRS - development includes # ####################################################################### # ####################################################################### # # installation root # ####################################################################### if(UNIX) get_filename_component(LIBBLADERF_ROOT "${CMAKE_CURRENT_LIST_DIR}/../../.." ABSOLUTE) elseif(WIN32) get_filename_component(LIBBLADERF_ROOT "${CMAKE_CURRENT_LIST_DIR}/.." ABSOLUTE) endif() # ####################################################################### # # locate the library # ####################################################################### find_library( LIBBLADERF_LIBRARY bladeRF PATHS ${LIBBLADERF_ROOT}/lib${LIB_SUFFIX} PATH_SUFFIXES ${CMAKE_LIBRARY_ARCHITECTURE} NO_DEFAULT_PATH ) if(NOT LIBBLADERF_LIBRARY) message(FATAL_ERROR "cannot find libbladeRF library in ${LIBBLADERF_ROOT}/lib${LIB_SUFFIX}") endif() set(libbladeRF_LIBRARIES ${LIBBLADERF_LIBRARY}) # ####################################################################### # # locate the includes # ####################################################################### find_path( LIBBLADERF_INCLUDE_DIR libbladeRF.h PATHS ${LIBBLADERF_ROOT}/include NO_DEFAULT_PATH ) if(NOT LIBBLADERF_INCLUDE_DIR) message(FATAL_ERROR "cannot find libbladeRF includes in ${LIBBLADERF_ROOT}/include/libbladeRF") endif() set(libbladeRF_INCLUDE_DIRS ${LIBBLADERF_INCLUDE_DIR}) bladeRF-2024.05/host/libraries/libbladeRF/cmake/libbladeRFConfigVersion.cmake.in000066400000000000000000000005761457144405000272710ustar00rootroot00000000000000set(PACKAGE_VERSION "@LIBBLADERF_VERSION@") # Check whether the requested PACKAGE_FIND_VERSION is compatible if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}") set(PACKAGE_VERSION_COMPATIBLE FALSE) else() set(PACKAGE_VERSION_COMPATIBLE TRUE) if ("${PACKAGE_VERSION}" VERSION_EQUAL "${PACKAGE_FIND_VERSION}") set(PACKAGE_VERSION_EXACT TRUE) endif() endif() bladeRF-2024.05/host/libraries/libbladeRF/doc/000077500000000000000000000000001457144405000206555ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF/doc/doxygen/000077500000000000000000000000001457144405000223325ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF/doc/doxygen/Doxyfile.in000066400000000000000000003141101457144405000244450ustar00rootroot00000000000000# Doxyfile 1.8.8 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. # # All text after a double hash (##) is considered a comment and is placed in # front of the TAG it is preceding. # # All text after a single hash (#) is considered a comment and will be ignored. # The format is: # TAG = value [value, ...] # For lists, items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (\" \"). #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all text # before the first occurrence of this tag. Doxygen uses libiconv (or the iconv # built into libc) for the transcoding. See http://www.gnu.org/software/libiconv # for the list of possible encodings. # The default value is: UTF-8. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded by # double-quotes, unless you are using Doxywizard) that should identify the # project for which the documentation is generated. This name is used in the # title of most generated pages and in a few other places. # The default value is: My Project. PROJECT_NAME = libbladeRF # The PROJECT_NUMBER tag can be used to enter a project or revision number. This # could be handy for archiving the generated documentation or if some version # control system is used. PROJECT_NUMBER = @VERSION@ # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a # quick idea about the purpose of the project. Keep the description short. PROJECT_BRIEF = "Nuand bladeRF library" # With the PROJECT_LOGO tag one can specify an logo or icon that is included in # the documentation. The maximum height of the logo should not exceed 55 pixels # and the maximum width should not exceed 200 pixels. Doxygen will copy the logo # to the output directory. PROJECT_LOGO = @LOGO_IMAGE@ # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path # into which the generated documentation will be written. If a relative path is # entered, it will be relative to the location where doxygen was started. If # left blank the current directory will be used. OUTPUT_DIRECTORY = . # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub- # directories (in 2 levels) under the output directory of each output format and # will distribute the generated files over these directories. Enabling this # option can be useful when feeding doxygen a huge amount of source files, where # putting all generated files in the same directory would otherwise causes # performance problems for the file system. # The default value is: NO. CREATE_SUBDIRS = NO # If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII # characters to appear in the names of generated files. If set to NO, non-ASCII # characters will be escaped, for example _xE3_x81_x84 will be used for Unicode # U+3044. # The default value is: NO. ALLOW_UNICODE_NAMES = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, # Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), # Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, # Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), # Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, # Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, # Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, # Ukrainian and Vietnamese. # The default value is: English. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member # descriptions after the members that are listed in the file and class # documentation (similar to Javadoc). Set to NO to disable this. # The default value is: YES. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief # description of a member or function before the detailed description # # Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. # The default value is: YES. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator that is # used to form the text in various listings. Each string in this list, if found # as the leading text of the brief description, will be stripped from the text # and the result, after processing the whole list, is used as the annotated # text. Otherwise, the brief description is used as-is. If left blank, the # following values are used ($name is automatically replaced with the name of # the entity):The $name class, The $name widget, The $name file, is, provides, # specifies, contains, represents, a, an and the. ABBREVIATE_BRIEF = "The $name class" \ "The $name widget" \ "The $name file" \ is \ provides \ specifies \ contains \ represents \ a \ an \ the # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # doxygen will generate a detailed section even if there is only a brief # description. # The default value is: NO. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. # The default value is: NO. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path # before files name in the file list and in the header files. If set to NO the # shortest path that makes the file name unique will be used # The default value is: YES. FULL_PATH_NAMES = NO # The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. # Stripping is only done if one of the specified strings matches the left-hand # part of the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the path to # strip. # # Note that you can specify absolute paths here, but also relative paths, which # will be relative from the directory where doxygen is started. # This tag requires that the tag FULL_PATH_NAMES is set to YES. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the # path mentioned in the documentation of a class, which tells the reader which # header file to include in order to use a class. If left blank only the name of # the header file containing the class definition is used. Otherwise one should # specify the list of include paths that are normally passed to the compiler # using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but # less readable) file names. This can be useful is your file systems doesn't # support long names like on DOS, Mac, or CD-ROM. # The default value is: NO. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the # first line (until the first dot) of a Javadoc-style comment as the brief # description. If set to NO, the Javadoc-style will behave just like regular Qt- # style comments (thus requiring an explicit @brief command for a brief # description.) # The default value is: NO. JAVADOC_AUTOBRIEF = NO # If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first # line (until the first dot) of a Qt-style comment as the brief description. If # set to NO, the Qt-style will behave just like regular Qt-style comments (thus # requiring an explicit \brief command for a brief description.) # The default value is: NO. QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a # multi-line C++ special comment block (i.e. a block of //! or /// comments) as # a brief description. This used to be the default behavior. The new default is # to treat a multi-line C++ comment block as a detailed description. Set this # tag to YES if you prefer the old behavior instead. # # Note that setting this tag to YES also means that rational rose comments are # not recognized any more. # The default value is: NO. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the # documentation from any documented member that it re-implements. # The default value is: YES. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a # new page for each member. If set to NO, the documentation of a member will be # part of the file/class/namespace that contains it. # The default value is: NO. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen # uses this value to replace tabs by spaces in code fragments. # Minimum value: 1, maximum value: 16, default value: 4. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that act as commands in # the documentation. An alias has the form: # name=value # For example adding # "sideeffect=@par Side Effects:\n" # will allow you to put the command \sideeffect (or @sideeffect) in the # documentation, which will result in a user-defined paragraph with heading # "Side Effects:". You can put \n's in the value part of an alias to insert # newlines. ALIASES = # This tag can be used to specify a number of word-keyword mappings (TCL only). # A mapping has the form "name=value". For example adding "class=itcl::class" # will allow you to use the command class in the itcl::class meaning. TCL_SUBST = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # only. Doxygen will then generate output that is more tailored for C. For # instance, some of the names that are used will be different. The list of all # members will be omitted, etc. # The default value is: NO. OPTIMIZE_OUTPUT_FOR_C = YES # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or # Python sources only. Doxygen will then generate output that is more tailored # for that language. For instance, namespaces will be presented as packages, # qualified scopes will look different, etc. # The default value is: NO. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources. Doxygen will then generate output that is tailored for Fortran. # The default value is: NO. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for VHDL. # The default value is: NO. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, and # language is one of the parsers supported by doxygen: IDL, Java, Javascript, # C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: # FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: # Fortran. In the later case the parser tries to guess whether the code is fixed # or free formatted code, this is the default for Fortran type files), VHDL. For # instance to make doxygen treat .inc files as Fortran files (default is PHP), # and .f files as C (default is Fortran), use: inc=Fortran f=C. # # Note For files without extension you can use no_extension as a placeholder. # # Note that for custom extensions you also need to set FILE_PATTERNS otherwise # the files are not read by doxygen. EXTENSION_MAPPING = # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments # according to the Markdown format, which allows for more readable # documentation. See http://daringfireball.net/projects/markdown/ for details. # The output of markdown processing is further processed by doxygen, so you can # mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in # case of backward compatibilities issues. # The default value is: YES. MARKDOWN_SUPPORT = YES # When enabled doxygen tries to link words that correspond to documented # classes, or namespaces to their corresponding documentation. Such a link can # be prevented in individual cases by by putting a % sign in front of the word # or globally by setting AUTOLINK_SUPPORT to NO. # The default value is: YES. AUTOLINK_SUPPORT = YES # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should set this # tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); # versus func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. # The default value is: NO. BUILTIN_STL_SUPPORT = NO # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. # The default value is: NO. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip (see: # http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen # will parse them like normal C++ but will assume all classes use public instead # of private inheritance when no explicit protection keyword is present. # The default value is: NO. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate # getter and setter methods for a property. Setting this option to YES will make # doxygen to replace the get and set methods by a property in the documentation. # This will only work if the methods are indeed getting or setting a simple # type. If this is not the case, or you want to show the methods anyway, you # should set this option to NO. # The default value is: YES. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. # The default value is: NO. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES to allow class member groups of the same type # (for instance a group of public functions) to be put as a subgroup of that # type (e.g. under the Public Functions section). Set it to NO to prevent # subgrouping. Alternatively, this can be done per class using the # \nosubgrouping command. # The default value is: YES. SUBGROUPING = YES # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions # are shown inside the group in which they are included (e.g. using \ingroup) # instead of on a separate page (for HTML and Man pages) or section (for LaTeX # and RTF). # # Note that this feature does not work in combination with # SEPARATE_MEMBER_PAGES. # The default value is: NO. INLINE_GROUPED_CLASSES = NO # When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions # with only public data fields or simple typedef fields will be shown inline in # the documentation of the scope in which they are defined (i.e. file, # namespace, or group documentation), provided this scope is documented. If set # to NO, structs, classes, and unions are shown on a separate page (for HTML and # Man pages) or section (for LaTeX and RTF). # The default value is: NO. INLINE_SIMPLE_STRUCTS = NO # When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or # enum is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically be # useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. # The default value is: NO. TYPEDEF_HIDES_STRUCT = NO # The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This # cache is used to resolve symbols given their name and scope. Since this can be # an expensive process and often the same symbol appears multiple times in the # code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small # doxygen will become slower. If the cache is too large, memory is wasted. The # cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range # is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 # symbols. At the end of a run doxygen will report the cache usage and suggest # the optimal cache size from a speed point of view. # Minimum value: 0, maximum value: 9, default value: 0. LOOKUP_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. Private # class members and static file members will be hidden unless the # EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. # Note: This will also disable the warnings about undocumented members that are # normally produced when WARNINGS is set to YES. # The default value is: NO. EXTRACT_ALL = NO # If the EXTRACT_PRIVATE tag is set to YES all private members of a class will # be included in the documentation. # The default value is: NO. EXTRACT_PRIVATE = NO # If the EXTRACT_PACKAGE tag is set to YES all members with package or internal # scope will be included in the documentation. # The default value is: NO. EXTRACT_PACKAGE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file will be # included in the documentation. # The default value is: NO. EXTRACT_STATIC = NO # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined # locally in source files will be included in the documentation. If set to NO # only classes defined in header files are included. Does not have any effect # for Java sources. # The default value is: YES. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local methods, # which are defined in the implementation section but not in the interface are # included in the documentation. If set to NO only methods in the interface are # included. # The default value is: NO. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base name of # the file that contains the anonymous namespace. By default anonymous namespace # are hidden. # The default value is: NO. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all # undocumented members inside documented classes or files. If set to NO these # members will be included in the various overviews, but no documentation # section is generated. This option has no effect if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. If set # to NO these classes will be included in the various overviews. This option has # no effect if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend # (class|struct|union) declarations. If set to NO these declarations will be # included in the documentation. # The default value is: NO. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any # documentation blocks found inside the body of a function. If set to NO these # blocks will be appended to the function's detailed documentation block. # The default value is: NO. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation that is typed after a # \internal command is included. If the tag is set to NO then the documentation # will be excluded. Set it to YES to include the internal documentation. # The default value is: NO. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file # names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. # The default value is: system dependent. CASE_SENSE_NAMES = NO # If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with # their full class and namespace scopes in the documentation. If set to YES the # scope will be hidden. # The default value is: NO. HIDE_SCOPE_NAMES = YES # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of # the files that are included by a file in the documentation of that file. # The default value is: YES. SHOW_INCLUDE_FILES = YES # If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each # grouped member an include statement to the documentation, telling the reader # which file to include in order to use the member. # The default value is: NO. SHOW_GROUPED_MEMB_INC = NO # If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include # files with double quotes in the documentation rather than with sharp brackets. # The default value is: NO. FORCE_LOCAL_INCLUDES = NO # If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the # documentation for inline members. # The default value is: YES. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the # (detailed) documentation of file and class members alphabetically by member # name. If set to NO the members will appear in declaration order. # The default value is: YES. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief # descriptions of file, namespace and class members alphabetically by member # name. If set to NO the members will appear in declaration order. Note that # this will also influence the order of the classes in the class list. # The default value is: NO. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the # (brief and detailed) documentation of class members so that constructors and # destructors are listed first. If set to NO the constructors will appear in the # respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. # Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief # member documentation. # Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting # detailed member documentation. # The default value is: NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy # of group names into alphabetical order. If set to NO the group names will # appear in their defined order. # The default value is: NO. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by # fully-qualified names, including namespaces. If set to NO, the class list will # be sorted only by class name, not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the alphabetical # list. # The default value is: NO. SORT_BY_SCOPE_NAME = NO # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper # type resolution of all parameters of a function it will reject a match between # the prototype and the implementation of a member function even if there is # only one candidate or it is obvious which candidate to choose by doing a # simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still # accept a match between prototype and implementation in such cases. # The default value is: NO. STRICT_PROTO_MATCHING = NO # The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the # todo list. This list is created by putting \todo commands in the # documentation. # The default value is: YES. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the # test list. This list is created by putting \test commands in the # documentation. # The default value is: YES. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug # list. This list is created by putting \bug commands in the documentation. # The default value is: YES. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO) # the deprecated list. This list is created by putting \deprecated commands in # the documentation. # The default value is: YES. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional documentation # sections, marked by \if ... \endif and \cond # ... \endcond blocks. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the # initial value of a variable or macro / define can have for it to appear in the # documentation. If the initializer consists of more lines than specified here # it will be hidden. Use a value of 0 to hide initializers completely. The # appearance of the value of individual variables and macros / defines can be # controlled using \showinitializer or \hideinitializer command in the # documentation regardless of this setting. # Minimum value: 0, maximum value: 10000, default value: 30. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated at # the bottom of the documentation of classes and structs. If set to YES the list # will mention the files that were used to generate the documentation. # The default value is: YES. SHOW_USED_FILES = YES # Set the SHOW_FILES tag to NO to disable the generation of the Files page. This # will remove the Files entry from the Quick Index and from the Folder Tree View # (if specified). # The default value is: YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces # page. This will remove the Namespaces entry from the Quick Index and from the # Folder Tree View (if specified). # The default value is: YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command command input-file, where command is the value of the # FILE_VERSION_FILTER tag, and input-file is the name of an input file provided # by doxygen. Whatever the program writes to standard output is used as the file # version. For an example see the documentation. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed # by doxygen. The layout file controls the global structure of the generated # output files in an output format independent way. To create the layout file # that represents doxygen's defaults, run doxygen with the -l option. You can # optionally specify a file name after the option, if omitted DoxygenLayout.xml # will be used as the name of the layout file. # # Note that if you run doxygen from a directory containing a file called # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE # tag is left empty. LAYOUT_FILE = @CMAKE_CURRENT_SOURCE_DIR@/doc/doxygen/layout.xml # The CITE_BIB_FILES tag can be used to specify one or more bib files containing # the reference definitions. This must be a list of .bib files. The .bib # extension is automatically appended if omitted. This requires the bibtex tool # to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. # For LaTeX the style of the bibliography can be controlled using # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the # search path. See also \cite for info how to create references. CITE_BIB_FILES = #--------------------------------------------------------------------------- # Configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated to # standard output by doxygen. If QUIET is set to YES this implies that the # messages are off. # The default value is: NO. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES # this implies that the warnings are on. # # Tip: Turn warnings on while writing the documentation. # The default value is: YES. WARNINGS = YES # If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate # warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag # will automatically be disabled. # The default value is: YES. WARN_IF_UNDOCUMENTED = YES # If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some parameters # in a documented function, or documenting parameters that don't exist or using # markup commands wrongly. # The default value is: YES. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that # are documented, but have no documentation for their parameters or return # value. If set to NO doxygen will only warn about wrong or incomplete parameter # documentation, but not about the absence of documentation. # The default value is: NO. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that doxygen # can produce. The string should contain the $file, $line, and $text tags, which # will be replaced by the file and line number from which the warning originated # and the warning text. Optionally the format may contain $version, which will # be replaced by the version of the file (if it could be obtained via # FILE_VERSION_FILTER) # The default value is: $file:$line: $text. WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning and error # messages should be written. If left blank the output is written to standard # error (stderr). WARN_LOGFILE = #--------------------------------------------------------------------------- # Configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag is used to specify the files and/or directories that contain # documented source files. You may enter file names like myfile.cpp or # directories like /usr/src/myproject. Separate the files or directories with # spaces. # Note: If this tag is empty the current directory is searched. INPUT = @CMAKE_CURRENT_SOURCE_DIR@/include/libbladeRF.h \ @CMAKE_CURRENT_SOURCE_DIR@/include/bladeRF1.h \ @CMAKE_CURRENT_SOURCE_DIR@/include/bladeRF2.h \ @CMAKE_CURRENT_SOURCE_DIR@/doc/doxygen # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses # libiconv (or the iconv built into libc) for the transcoding. See the libiconv # documentation (see: http://www.gnu.org/software/libiconv) for the list of # possible encodings. # The default value is: UTF-8. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and # *.h) to filter out the source-files in the directories. If left blank the # following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii, # *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, # *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, # *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, # *.qsf, *.as and *.js. FILE_PATTERNS = *.c \ *.cc \ *.cxx \ *.cpp \ *.c++ \ *.d \ *.java \ *.ii \ *.ixx \ *.ipp \ *.i++ \ *.inl \ *.h \ *.hh \ *.hxx \ *.hpp \ *.h++ \ *.idl \ *.odl \ *.cs \ *.php \ *.php3 \ *.inc \ *.m \ *.mm \ *.dox \ *.py \ *.f90 \ *.f \ *.for \ *.vhd \ *.vhdl # The RECURSIVE tag can be used to specify whether or not subdirectories should # be searched for input files as well. # The default value is: NO. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should be # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. # # Note that relative paths are relative to the directory from which doxygen is # run. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded # from the input. # The default value is: NO. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. # # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test # # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories use the pattern */test/* EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or directories # that contain example code fragments that are included (see the \include # command). EXAMPLE_PATH = @CMAKE_CURRENT_SOURCE_DIR@/doc/examples # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and # *.h) to filter out the source-files in the directories. If left blank all # files are included. EXAMPLE_PATTERNS = *.c # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude commands # irrespective of the value of the RECURSIVE tag. # The default value is: NO. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or directories # that contain images that are to be included in the documentation (see the # \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command: # # # # where is the value of the INPUT_FILTER tag, and is the # name of an input file. Doxygen will then use the output that the filter # program writes to standard output. If FILTER_PATTERNS is specified, this tag # will be ignored. # # Note that the filter must not add or remove lines; it is applied before the # code is scanned, but not when the output code is generated. If lines are added # or removed, the anchors will not be placed correctly. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the # filter if there is a match. The filters are a list of the form: pattern=filter # (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how # filters are used. If the FILTER_PATTERNS tag is empty or if none of the # patterns match the file name, INPUT_FILTER is applied. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER ) will also be used to filter the input files that are used for # producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). # The default value is: NO. FILTER_SOURCE_FILES = NO # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file # pattern. A pattern will override the setting for FILTER_PATTERN (if any) and # it is also possible to disable source filtering for a specific pattern using # *.ext= (so without naming a filter). # This tag requires that the tag FILTER_SOURCE_FILES is set to YES. FILTER_SOURCE_PATTERNS = # If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that # is part of the input, its contents will be placed on the main page # (index.html). This can be useful if you have a project on for instance GitHub # and want to reuse the introduction page also for the doxygen output. USE_MDFILE_AS_MAINPAGE = #--------------------------------------------------------------------------- # Configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will be # generated. Documented entities will be cross-referenced with these sources. # # Note: To get rid of all source code in the generated output, make sure that # also VERBATIM_HEADERS is set to NO. # The default value is: NO. SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body of functions, # classes and enums directly into the documentation. # The default value is: NO. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any # special comment blocks from generated source code fragments. Normal C, C++ and # Fortran comments will always remain visible. # The default value is: YES. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES then for each documented # function all documented functions referencing it will be listed. # The default value is: NO. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES then for each documented function # all documented entities called/used by that function will be listed. # The default value is: NO. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set # to YES, then the hyperlinks from functions in REFERENCES_RELATION and # REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will # link to the documentation. # The default value is: YES. REFERENCES_LINK_SOURCE = YES # If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the # source code will show a tooltip with additional information such as prototype, # brief description and links to the definition and documentation. Since this # will make the HTML file larger and loading of large files a bit slower, you # can opt to disable this feature. # The default value is: YES. # This tag requires that the tag SOURCE_BROWSER is set to YES. SOURCE_TOOLTIPS = YES # If the USE_HTAGS tag is set to YES then the references to source code will # point to the HTML generated by the htags(1) tool instead of doxygen built-in # source browser. The htags tool is part of GNU's global source tagging system # (see http://www.gnu.org/software/global/global.html). You will need version # 4.8.6 or higher. # # To use it do the following: # - Install the latest version of global # - Enable SOURCE_BROWSER and USE_HTAGS in the config file # - Make sure the INPUT points to the root of the source tree # - Run doxygen as normal # # Doxygen will invoke htags (and that will in turn invoke gtags), so these # tools must be available from the command line (i.e. in the search path). # # The result: instead of the source browser generated by doxygen, the links to # source code will now point to the output of htags. # The default value is: NO. # This tag requires that the tag SOURCE_BROWSER is set to YES. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a # verbatim copy of the header file for each class for which an include is # specified. Set to NO to disable this. # See also: Section \class. # The default value is: YES. VERBATIM_HEADERS = YES # If the CLANG_ASSISTED_PARSING tag is set to YES, then doxygen will use the # clang parser (see: http://clang.llvm.org/) for more accurate parsing at the # cost of reduced performance. This can be particularly helpful with template # rich C++ code for which doxygen's built-in parser lacks the necessary type # information. # Note: The availability of this option depends on whether or not doxygen was # compiled with the --with-libclang option. # The default value is: NO. #CLANG_ASSISTED_PARSING = NO # If clang assisted parsing is enabled you can provide the compiler with command # line options that you would normally use when invoking the compiler. Note that # the include paths will already be set by doxygen for the files and directories # specified with INPUT and INCLUDE_PATH. # This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. #CLANG_OPTIONS = #--------------------------------------------------------------------------- # Configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all # compounds will be generated. Enable this if the project contains a lot of # classes, structs, unions or interfaces. # The default value is: YES. ALPHABETICAL_INDEX = YES # The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in # which the alphabetical index list will be split. # Minimum value: 1, maximum value: 20, default value: 5. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all classes will # be put under the same header in the alphabetical index. The IGNORE_PREFIX tag # can be used to specify a prefix (or a list of prefixes) that should be ignored # while generating the index headers. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. IGNORE_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES doxygen will generate HTML output # The default value is: YES. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of # it. # The default directory is: html. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for each # generated HTML page (for example: .htm, .php, .asp). # The default value is: .html. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a user-defined HTML header file for # each generated HTML page. If the tag is left blank doxygen will generate a # standard header. # # To get valid HTML the header file that includes any scripts and style sheets # that doxygen needs, which is dependent on the configuration options used (e.g. # the setting GENERATE_TREEVIEW). It is highly recommended to start with a # default header using # doxygen -w html new_header.html new_footer.html new_stylesheet.css # YourConfigFile # and then modify the file new_header.html. See also section "Doxygen usage" # for information on how to generate the default header that doxygen normally # uses. # Note: The header is subject to change so you typically have to regenerate the # default header when upgrading to a newer version of doxygen. For a description # of the possible markers and block names see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each # generated HTML page. If the tag is left blank doxygen will generate a standard # footer. See HTML_HEADER for more information on how to generate a default # footer and what special commands can be used inside the footer. See also # section "Doxygen usage" for information on how to generate the default footer # that doxygen normally uses. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style # sheet that is used by each HTML page. It can be used to fine-tune the look of # the HTML output. If left blank doxygen will generate a default style sheet. # See also section "Doxygen usage" for information on how to generate the style # sheet that doxygen normally uses. # Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as # it is more robust and this tag (HTML_STYLESHEET) will in the future become # obsolete. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_STYLESHEET = # The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined # cascading style sheets that are included after the standard style sheets # created by doxygen. Using this option one can overrule certain style aspects. # This is preferred over using HTML_STYLESHEET since it does not replace the # standard style sheet and is therefor more robust against future updates. # Doxygen will copy the style sheet files to the output directory. # Note: The order of the extra stylesheet files is of importance (e.g. the last # stylesheet in the list overrules the setting of the previous ones in the # list). For an example see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_STYLESHEET = # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note # that these files will be copied to the base HTML output directory. Use the # $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these # files. In the HTML_STYLESHEET file, use the file name only. Also note that the # files will be copied as-is; there are no commands or markers available. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_FILES = # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen # will adjust the colors in the stylesheet and background images according to # this color. Hue is specified as an angle on a colorwheel, see # http://en.wikipedia.org/wiki/Hue for more information. For instance the value # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 # purple, and 360 is red again. # Minimum value: 0, maximum value: 359, default value: 220. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_HUE = 208 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors # in the HTML output. For a value of 0 the output will use grayscales only. A # value of 255 will produce the most vivid colors. # Minimum value: 0, maximum value: 255, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_SAT = 32 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the # luminance component of the colors in the HTML output. Values below 100 # gradually make the output lighter, whereas values above 100 make the output # darker. The value divided by 100 is the actual gamma applied, so 80 represents # a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not # change the gamma. # Minimum value: 40, maximum value: 240, default value: 80. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_GAMMA = 189 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML # page will contain the date and time when the page was generated. Setting this # to NO can help when comparing the output of multiple runs. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_TIMESTAMP = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_DYNAMIC_SECTIONS = NO # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries # shown in the various tree structured indices initially; the user can expand # and collapse entries dynamically later on. Doxygen will expand the tree to # such a level that at most the specified number of entries are visible (unless # a fully collapsed tree already exceeds this amount). So setting the number of # entries 1 will produce a full collapsed tree by default. 0 is a special value # representing an infinite number of entries and will result in a full expanded # tree by default. # Minimum value: 0, maximum value: 9999, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_INDEX_NUM_ENTRIES = 100 # If the GENERATE_DOCSET tag is set to YES, additional index files will be # generated that can be used as input for Apple's Xcode 3 integrated development # environment (see: http://developer.apple.com/tools/xcode/), introduced with # OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a # Makefile in the HTML output directory. Running make will produce the docset in # that directory and running make install will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at # startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html # for more information. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_DOCSET = NO # This tag determines the name of the docset feed. A documentation feed provides # an umbrella under which multiple documentation sets from a single provider # (such as a company or product suite) can be grouped. # The default value is: Doxygen generated docs. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_FEEDNAME = "Doxygen generated docs" # This tag specifies a string that should uniquely identify the documentation # set bundle. This should be a reverse domain-name style string, e.g. # com.mycompany.MyDocSet. Doxygen will append .docset to the name. # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_BUNDLE_ID = org.doxygen.Project # The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify # the documentation publisher. This should be a reverse domain-name style # string, e.g. com.mycompany.MyDocSet.documentation. # The default value is: org.doxygen.Publisher. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_PUBLISHER_ID = org.doxygen.Publisher # The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. # The default value is: Publisher. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three # additional HTML index files: index.hhp, index.hhc, and index.hhk. The # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop # (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on # Windows. # # The HTML Help Workshop contains a compiler that can convert all HTML output # generated by doxygen into a single compiled HTML file (.chm). Compiled HTML # files are now used as the Windows 98 help format, and will replace the old # Windows help format (.hlp) on all Windows platforms in the future. Compressed # HTML files also contain an index, a table of contents, and you can search for # words in the documentation. The HTML workshop also contains a viewer for # compressed HTML files. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_HTMLHELP = NO # The CHM_FILE tag can be used to specify the file name of the resulting .chm # file. You can add a path in front of the file if the result should not be # written to the html output directory. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_FILE = # The HHC_LOCATION tag can be used to specify the location (absolute path # including file name) of the HTML help compiler ( hhc.exe). If non-empty # doxygen will try to run the HTML help compiler on the generated index.hhp. # The file has to be specified with full path. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. HHC_LOCATION = # The GENERATE_CHI flag controls if a separate .chi index file is generated ( # YES) or that it should be included in the master .chm file ( NO). # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. GENERATE_CHI = NO # The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc) # and project file content. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_INDEX_ENCODING = # The BINARY_TOC flag controls whether a binary table of contents is generated ( # YES) or a normal table of contents ( NO) in the .chm file. Furthermore it # enables the Previous and Next buttons. # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members to # the table of contents of the HTML help documentation and to the tree view. # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that # can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help # (.qch) of the generated HTML documentation. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify # the file name of the resulting .qch file. The path specified is relative to # the HTML output folder. # This tag requires that the tag GENERATE_QHP is set to YES. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help # Project output. For more information please see Qt Help Project / Namespace # (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_QHP is set to YES. QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt # Help Project output. For more information please see Qt Help Project / Virtual # Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- # folders). # The default value is: doc. # This tag requires that the tag GENERATE_QHP is set to YES. QHP_VIRTUAL_FOLDER = doc # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom # filter to add. For more information please see Qt Help Project / Custom # Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- # filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_NAME = # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see Qt Help Project / Custom # Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- # filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's filter section matches. Qt Help Project / Filter Attributes (see: # http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_SECT_FILTER_ATTRS = # The QHG_LOCATION tag can be used to specify the location of Qt's # qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the # generated .qhp file. # This tag requires that the tag GENERATE_QHP is set to YES. QHG_LOCATION = # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be # generated, together with the HTML files, they form an Eclipse help plugin. To # install this plugin and make it available under the help contents menu in # Eclipse, the contents of the directory containing the HTML and XML files needs # to be copied into the plugins directory of eclipse. The name of the directory # within the plugins directory should be the same as the ECLIPSE_DOC_ID value. # After copying Eclipse needs to be restarted before the help appears. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_ECLIPSEHELP = NO # A unique identifier for the Eclipse help plugin. When installing the plugin # the directory name containing the HTML and XML files should also have this # name. Each documentation set should have its own identifier. # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ECLIPSE_DOC_ID = org.doxygen.Project # If you want full control over the layout of the generated HTML pages it might # be necessary to disable the index and replace it with your own. The # DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top # of each HTML page. A value of NO enables the index and the value YES disables # it. Since the tabs in the index contain the same information as the navigation # tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. DISABLE_INDEX = NO # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. If the tag # value is set to YES, a side panel will be generated containing a tree-like # index structure (just like the one that is generated for HTML Help). For this # to work a browser that supports JavaScript, DHTML, CSS and frames is required # (i.e. any modern browser). Windows users are probably better off using the # HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can # further fine-tune the look of the index. As an example, the default style # sheet generated by doxygen has an example that shows how to put an image at # the root of the tree instead of the PROJECT_NAME. Since the tree basically has # the same information as the tab index, you could consider setting # DISABLE_INDEX to YES when enabling this option. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_TREEVIEW = NO # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that # doxygen will group on one line in the generated HTML documentation. # # Note that a value of 0 will completely suppress the enum values from appearing # in the overview section. # Minimum value: 0, maximum value: 20, default value: 4. # This tag requires that the tag GENERATE_HTML is set to YES. ENUM_VALUES_PER_LINE = 4 # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used # to set the initial width (in pixels) of the frame in which the tree is shown. # Minimum value: 0, maximum value: 1500, default value: 250. # This tag requires that the tag GENERATE_HTML is set to YES. TREEVIEW_WIDTH = 250 # When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to # external symbols imported via tag files in a separate window. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. EXT_LINKS_IN_WINDOW = NO # Use this tag to change the font size of LaTeX formulas included as images in # the HTML documentation. When you change the font size after a successful # doxygen run you need to manually remove any form_*.png images from the HTML # output directory to force them to be regenerated. # Minimum value: 8, maximum value: 50, default value: 10. # This tag requires that the tag GENERATE_HTML is set to YES. FORMULA_FONTSIZE = 10 # Use the FORMULA_TRANPARENT tag to determine whether or not the images # generated for formulas are transparent PNGs. Transparent PNGs are not # supported properly for IE 6.0, but are supported on all modern browsers. # # Note that when changing this option you need to delete any form_*.png files in # the HTML output directory before the changes have effect. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. FORMULA_TRANSPARENT = YES # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see # http://www.mathjax.org) which uses client side Javascript for the rendering # instead of using prerendered bitmaps. Use this if you do not have LaTeX # installed or if you want to formulas look prettier in the HTML output. When # enabled you may also need to install MathJax separately and configure the path # to it using the MATHJAX_RELPATH option. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. USE_MATHJAX = YES # When MathJax is enabled you can set the default output format to be used for # the MathJax output. See the MathJax site (see: # http://docs.mathjax.org/en/latest/output.html) for more details. # Possible values are: HTML-CSS (which is slower, but has the best # compatibility), NativeMML (i.e. MathML) and SVG. # The default value is: HTML-CSS. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_FORMAT = HTML-CSS # When MathJax is enabled you need to specify the location relative to the HTML # output directory using the MATHJAX_RELPATH option. The destination directory # should contain the MathJax.js script. For instance, if the mathjax directory # is located at the same level as the HTML output directory, then # MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax # Content Delivery Network so you can quickly see the result without installing # MathJax. However, it is strongly recommended to install a local copy of # MathJax from http://www.mathjax.org before deployment. # The default value is: http://cdn.mathjax.org/mathjax/latest. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest # The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax # extension names that should be enabled during MathJax rendering. For example # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_EXTENSIONS = # The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces # of code that will be used on startup of the MathJax code. See the MathJax site # (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an # example see the documentation. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_CODEFILE = # When the SEARCHENGINE tag is enabled doxygen will generate a search box for # the HTML output. The underlying search engine uses javascript and DHTML and # should work on any modern browser. Note that when using HTML help # (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) # there is already a search function so this one should typically be disabled. # For large projects the javascript based search engine can be slow, then # enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to # search using the keyboard; to jump to the search box use + S # (what the is depends on the OS and browser, but it is typically # , /

Acquiring a device handle

First, one must acquire a handle to a bladeRF device. Four common approaches to this are:
  • Open the first available device.
  • Open a device with a specified serial number.
  • Open a device with the specified USB bus and address values.
  • Choose a device from a list of all available devices.
The first three approaches can be implemented via a call to bladerf_open() or bladerf_open_with_devinfo(). Both of these functions offer the same functionality, but through a slightly different interface. Note that per the documentation of each of these functions, NULL can be specified as one of the arguments to specify, "open any available bladeRF device." bladerf_open() takes a specially formatted "device identifier" string as an argument. This provides a simple means to give the user full control over how the desired device is specified, perhaps through a command-line argument or GUI text field. bladerf_open_with_devinfo() uses a ::bladerf_devinfo structure to identify the device to open. This is generally a better choice when programatically deciding which device to open, as it alleviates the need to craft a device identifier string. This approach is taken in the below snippet, where argv[1] may contain a serial number string. In the case when argc < 2, the `dev_info.serial` field is left as its wildcard ("any value") field from the bladerf_init_devinfo() call. \snippet boilerplate.c Opening a device The last approach in the beginning of this section is a good choice for programs that need to present a list of available devices to a user. A list of connected bladeRF devices may be retrieved via bladerf_get_device_list(). The contents of each ::bladerf_devinfo could then be presented to a user for selection, and the desired device's ::bladerf_devinfo can then be passed to bladerf_open_with_devinfo(). The device list can then be freed using bladerf_free_device_list().

Configuring Device parameters

After acquiring a handle to a bladeRF device, the following must be configured prior to transmitting or receiving samples.
  • Frequency
  • Gain
  • Sample Rate
  • Bandwidth
Note that all of the above are configured on a per-channel (i.e, RX0 or TX1) basis.

Channels

RX and TX channels are specified by the `BLADERF_CHANNEL_RX()` and `BLADERF_CHANNEL_TX()` macros. These channel macros are provided as arguments to various methods to control frequency, gain, sample rate, and bandwidth of the specified channel of the bladeRF device. The bladeRF1 is a SISO SDR with one receiver and transmiter (1x1). It supports the following channels: `BLADERF_CHANNEL_RX(0)`, `BLADERF_CHANNEL_TX(0)`. The bladeRF2 is a MIMO SDR with two receivers and two transmitters (2x2). It supports the following channels: `BLADERF_CHANNEL_RX(0)`, `BLADERF_CHANNEL_RX(1)`, `BLADERF_CHANNEL_TX(0)`, `BLADERF_CHANNEL_TX(1)`.

Selecting Appropriate Values

Gain can be controlled in a coarse or fine manner. With coarse control of gain, bladerf_set_gain() sets an overall gain for the specified channel, and the underlying gain stages are configured appropriately to distribute the overall gain. With fine control of gain, bladerf_set_gain_stage() sets an individual gain for the specified gain stage and channel. The device's supported range of overall and individual gains can be queried with bladerf_get_gain_range() and bladerf_get_gain_stage_range(), respectively. The selection of sample rate and bandwidth are tightly coupled. In general, the sample rate must be high enough to ensure that all desired signals can be sampled without aliasing. However, note that the RF transciever IC provides a discrete set of bandwidth options. This implies that one's sample rate selection will largely be influenced by the bandwidth option that most closely matches the desired value. The device's supported range of sample rates can be queried with bladerf_get_sample_rate_range(). The bandwidth parameter controls the RF front-end (RFFE) low-pass filter (LPF) setting. This should be configured to be less than the sample rate to ensure that the filter has reached maximum attenuation before reaching the desired sample rate value. Otherwise, noise and aliases may "fold" into the frequency range of interest. The device's supported range of bandwidths can be queried with bladerf_get_frequency_range().

bladeRF1 Details

  • RX Gain
    • Overall: 5 to 66 dB
    • LNA: 0 to 6 dB (step of 3 dB)
    • VGA1: 5 to 30 dB (step of 1 dB)
    • VGA2: 0 to 30 dB (step of 1 dB)
    • Stage names: `lna`, `rxvga1`, `rxvga2`
  • TX Gain
    • Overall: -35 to 21 dB
    • VGA1: -35 to -4 dB (step of 1 dB)
    • VGA2: 0 to 25 dB (step of 1 dB)
    • Stage names: `txvga1`, `txvga2`
  • Frequency: 237500000 to 3800000000 Hz
  • Bandwidth: 1500000 to 28000000 Hz
  • Sample Rate: 80000 to 40000000 Hz (recommended max)
To better understand each of the available gains controls, see Figures 1, 2, and 3 in the LMS6002D datasheet. In general, when configuring individual gain stages, one stage should be increased prior to increasing the following stage. For RX, increase the LNA gain, followed by RX VGA1, then RX VGA2. Similarly, increase TX VGA1 first, then TX VGA2. Consult the plots in Figure 5 of the LMS6002D datasheet for the RX/TX filter responses. Note that the filter ranges are listed in the datasheet are listed in terms of 0 to Fs/2, whereas bladerf_set_bandwidth() assumes the total bandwidth (-Fs/2 to Fs/2) is being specified. Consider the plot for the 0.75 MHz filter (which corresponds to 1.5 MHz of total BW). At 1 MHz (2 MHZ of total BW), this filter offers over -45 dB of rejection. At ~1.8 MHz (3.6 MHz of total BW), this filter offers over -60 dB of rejection. Therefore, when calling bladerf_set_bandwidth() with a value of 1.5 MHz, a sample rate 2 MHz would be a preferred minimum, and a sample rate >= 3.6 MHz would be an even better choice.

bladeRF2 Details

  • RX Gain
    • Overall: 0 to 77 dB (step of 1 dB)
  • TX Gain
    • Overall: -89.75 to 0 db (step of 0.25 db)
  • Frequency: 70000000 to 6000000000 Hz
  • Bandwidth: 200000 to 56000000 Hz
  • Sample Rate: 0 to 61440000 Hz

Applying a set of values

It is common for a program to apply all of these settings during its initialization. Therefore, the example in this page groups these parameters into a structure and then uses a `configure_channel()` helper function to apply them: \snippet boilerplate.c struct channel_config As shown in the below implementation of `configure_channel()`, the general procedure for applying a parameter involves calling the corresponding function and checking the return value. Note that some functions, such as bladerf_set_sample_rate() and bladerf_set_bandwidth(), have optional `actual` output parameters that are set to NULL in this example. These `actual` values are used to provide feedback about the differences between the requested value and the actual value applied. Some error may occur in converting the sample rate into a rational fraction, as required by the underlying hardware. As previously, mentioned, the RF transceiver provides a discrete set of bandwidth settings. bladerf_set_bandwidth() will choose the closest bandwidth setting, and report this via the optional `actual` parameter. \snippet boilerplate.c configure_channel

Complete listing

\snippet boilerplate.c Full listing */ bladeRF-2024.05/host/libraries/libbladeRF/doc/doxygen/configfile.dox000066400000000000000000000173471457144405000251670ustar00rootroot00000000000000/** \page configfile Configuration File libbladeRF supports an optional configuration file. This feature is useful for specifying preferred default settings, or for configuring options that aren't yet supported by a third-party application. If found, the configuration file is parsed immediately after a bladeRF is opened and initialized by libbladeRF. A configuration file may be named either `bladeRF.conf` (preferred) or `bladerf.conf`. libbladeRF uses the same search path it uses for finding FPGA images and calibration tables, defined by file_find() in file_ops.c: Linux and OSX directories:
  • The current working directory
  • The directory containing the program being executed
  • ~/.config/Nuand/bladeRF/
  • ~/.Nuand/bladeRF/
  • /etc/Nuand/bladeRF/
  • /usr/share/Nuand/bladeRF/
Windows:
  • The current working directory
  • The directory containing the program being executed
  • C:\\Users\\USERNAME\\AppData\\Roaming\\Nuand\\bladeRF (via FOLDERID_RoamingAppData)
  • The installation path, via HKEY_LOCAL_MACHINE\\Software\\Nuand LLC\\Path
Note: libbladeRF will only find and process the first configuration file it finds. Any other files appearing later in the search path will be ignored. A valid configuration file may contain:
  • Comments are lines starting with a `#`, and are ignored.
  • Restrictions are lines starting with a `[` and ending with a `]`, and are used to apply a scope to a subset of options.
  • Options themselves are specified by an option key, a space, and then a value.
The below example loads an FPGA image from `/home/user/hostedx40.rbf`, set the trim DAC value to 592, and set the frequency to 2.4 GHz, when any bladeRF is opened: \snippet example_bladeRF.conf basic_usage

Restrictions

Options may be restricted to bladeRFs that match a particular description. A restriction applies to all options following it, until the next restriction (or the end of the file). When iterating through the configuration file, a given option will be applied if the target bladeRF matches the most recent restriction (or if there are no restrictions). If it does not, the option will be silently ignored.

Matching by FPGA size

The following restrictions are based on the FPGA size on the bladeRF board:
  • `[x40]` - Only boards matching ::BLADERF_FPGA_40KLE
  • `[x115]` - Only boards matching ::BLADERF_FPGA_115KLE
The following example would program the FPGA with `/home/user/hostedx40.rbf` when initializing a bladeRF x40, but would program it with `/home/user/hostedx115.rbf` if the bladeRF is an x115 model. \snippet example_bladeRF.conf match_fpga

Matching by Device Identifier String

A restriction of `[]` will limit the following options to bladeRFs matching that string. Under the hood, any square-bracketed string that is not otherwise recognized gets passed to bladerf_devstr_matches() as a possible device identifier string. The general form of a device identifier string is: :[device=:] [instance=] [serial=] Note: Please see bladerf_open() for a complete description of device identifier strings. The below example is similar to the above examples. However, it will apply different trimdac values to two specific boards, which are identified by serial number. \snippet example_bladeRF.conf match_devstr

Matching any device

Finally, a wildcard (`[*]`) or empty (`[]`) restriction will match any device, and may be used to "cancel" a previous restriction.

Options

Options (unless ignored due to a restriction) will be applied sequentially, immediately following initialization of the bladeRF. Note: If the same option key is specified more than once, it will be applied more than once; e.g. specifying `frequency 2.4G` and then `frequency 400M` will first tune the frequency to 2.4 GHz, and then to 400 MHz.
  • `fpga `
  • Loads the specified FPGA image via bladerf_load_fpga().
  • `frequency `
  • Sets the bladeRF's RX and TX frequencies to a given frequency in Hz. Suffixes are supported. This option causes libbladeRF to call bladerf_set_frequency() on both ::BLADERF_RX and ::BLADERF_TX.
  • `samplerate `
  • Sets the sample rate for the RX ADC and TX to the given rate in samples per second. Suffixes are supported. This option causes libbladeRF to call bladerf_set_rational_sample_rate() on both ::BLADERF_RX and ::BLADERF_TX.
  • `bandwidth `
  • Sets the RF bandwidth to a given value in Hz. Suffixes are supported. This option causes libbladeRF to call bladerf_set_bandwidth() on both ::BLADERF_RX and ::BLADERF_TX.
  • `agc `
  • Enables or disables automatic gain control mode, via bladerf_set_gain_mode(). A true value (e.g. `on`) selects ::BLADERF_GAIN_AUTOMATIC, while a false value (e.g. `off`) selects ::BLADERF_GAIN_MANUAL.
  • `gpio `
  • Sets the GPIO register to a given value, using bladerf_config_gpio_write().
  • `sampling `
  • Sets the sampling source by calling bladerf_set_sampling(). Choices are `internal` or `external`. See ::bladerf_sampling for important information.
  • `trimdac `
  • Sets the trim DAC value via bladerf_dac_write().
  • `vctcxo_tamer `
  • Sets the VCTCXO tamer method using bladerf_set_vctcxo_tamer_mode(). Choices are `disabled`, `1PPS`, and `10MHz`. See ::bladerf_vctcxo_tamer_mode for important information.
  • `biastee_rx `, `biastee_tx `
  • Enables or disables the bias tee supply on the RX or TX ports respectively, via bladerf_set_bias_tee(). A true value (e.g. `on`) turns the DC bias on, while a false value (e.g. `off`) turns the DC bias off.
  • `clock_ref `
  • Enables or disables taming by an external clock reference for BladeRF 2.0 via bladerf_set_pll_enable(). A true value (e.g. `on`) turns the taming on, while a false value (e.g. `off`) turns the taming off.
  • `refin_freq `
  • Sets the frequency of the external clock reference for BladeRF 2.0 in Hz via bladerf_set_pll_refclk(). Suffixes are supported.
  • `clock_sel `
  • Selects the 38.4MHz clock source for BladeRF 2.0 via bladerf_set_clock_select(). Possible values are `onboard` for the internal clock or `external` for and external 38.4MHz clock supplied on the clk_in connector.
  • `clock_out `
  • Enables or disables 38.4MHz clock on the clk_out connector for BladeRF 2.0 via bladerf_set_clock_output(). A true value (e.g. `on`) turns the clock out on, while a false value (e.g. `off`) turns the clock out off.

Suffixes

Where noted above, the following suffixes are supported:
  • `G`, `GHz`: multiply by 1000*1000*1000
  • `M`, `MHz`: multiply by 1000*1000
  • `k`, `kHz`: multiply by 1000
*/ bladeRF-2024.05/host/libraries/libbladeRF/doc/doxygen/envvars.dox000066400000000000000000000102331457144405000245310ustar00rootroot00000000000000/** \page envvars Environment Variables libbladeRF uses a few environment variables to allow users and developers to modify behavior at runtime. These environment variables should be treated as diagnostic features, rather than part of the API. They may be modified or removed in future versions of the library.

BLADERF_LOG_LEVEL

This environment variable controls the default log level setting, which is usually ::BLADERF_LOG_LEVEL_INFO. This may be useful when a program using libbladeRF is encountering errors. Setting the log level to `debug` or `verbose` often yields information that allows the reason for failures to be identified. Note that this environment variable may not help if a program overrides the default log level by calling bladerf_log_set_verbosity(). The values supplied to this environment variable correspond directly with the ::bladerf_log_level values of the same name. The available values are listed below, and are handled in a case-insensitive manner.
  • critical
  • error
  • warning
  • info
  • debug
  • verbose

BLADERF_SEARCH_DIR

Usually, libbladeRF searches the following directories for files, such as FPGA bitstreams for software-based autoloading. Linux and OSX directories:
  • The current working directory
  • The directory containing the program being executed
  • ~/.config/Nuand/bladeRF/
  • ~/.Nuand/bladeRF/
  • /etc/Nuand/bladeRF/
  • /usr/share/Nuand/bladeRF/
Windows:
  • The current working directory
  • The directory containing the program being executed
  • C:\\Users\\USERNAME\\AppData\\Roaming\\Nuand\\bladeRF (via FOLDERID_RoamingAppData)
  • The installation path, via HKEY_LOCAL_MACHINE\\Software\\Nuand LLC\\Path
This environment variable may be used to specify a path to search prior to those listed above.

BLADERF_DEFAULT_TUNING_MODE

Normally, the default tuning mode is set per the conditions described in the documentation of the ::bladerf_tuning_mode enumeration. This environment variable allows this default to be overridden at runtime and is intended to facilitate debugging. Valid values are: host and fpga. Generally this environment variable is most useful when set to host and used in conjunction with setting the BLADERF_LOG_LEVEL environment variable to verbose. This allows low-level information about the frequency tuning operation to be observed, even though a program may not provide a means to change the log level or tuning mode. Attempting to force the tuning mode to fpga on FPGA versions that do not support this will yield unexpected (and likely undesirable) behavior.

BLADERF_FORCE_LEGACY_NIOS_PKT

If defined, this forces libbladeRF to use the legacy packet format when communicating with the FPGA. This is intended for development and debugging.

BLADERF_FORCE_NO_FPGA_PRESENT

Defining this forces libbladeRF to behave as if it does not detect that an FPGA is loaded. This prevents it from attempting to initialize the device. This was added as a means to allow users to remove an incompatible FPGA from flash, should they have forgotten to do so prior to updating libbladeRF and FX3 firmware.

BLADERF_SKIP_FPGA_SIZE_CHECK

Defining this overrides a check for the correct FPGA bitstream size when loading an FPGA bitstream from the host or writing it to flash for headless loading. Under normal circumstances, users should not need to use this. This is intended to allow developers and those making customizations (e.g., adding FPGA compression) to skip this check without needing to rebuild libbladeRF. If the size check is reporting an error, the most likely scenario is that an incorrect or corrupted FPGA bitstream is being provided. Check that the bitstream file is appropriate for the target device. */ bladeRF-2024.05/host/libraries/libbladeRF/doc/doxygen/layout.xml000066400000000000000000000143001457144405000243670ustar00rootroot00000000000000 bladeRF-2024.05/host/libraries/libbladeRF/doc/doxygen/mainpage.dox000066400000000000000000000077541457144405000246440ustar00rootroot00000000000000/** @mainpage

Introduction

This library supports the Nuand bladeRF and bladeRF Micro USB 3.0 Software Defined Radio (SDR). It is intended to support developers looking to:
  • Build both generic SDR software and domain-specific applications atop of the bladeRF.
  • Evaluate and experiment with the hardware, using routines that provide low-level access to device settings and registers.
The libbladeRF source code is hosted on our GitHub project page, and the latest release of this documentation may be found here. A few avenues for support are available, including the Nuand forums, the \#bladeRF IRC channel on Freenode, or email. The forums are generally preferred over email because they allow a publicly accessible knowledge base of common questions and answers to be developed. Bugs, both in libbladeRF and this documentation, may be reported on the GitHub issue tracker @attention libbladeRF 2.0 introduces breaking changes to the parameter lists for bladerf_get_frequency(), bladerf_stream(), and bladerf_sync_config(). @attention Existing code using these functions @b must be updated to be compatible with this version. See the \ref relnotes_2_0_api_freq_uint64 and \ref relnotes_2_0_api_stream sections of the \ref relnotes_2_0 document for guidance.

The libbladeRF API

libbladeRF provides the ability to:
  • Query and connect to bladeRF devices connected to a system
  • Configure device properties, such as:
    • Frequency tuning
    • Bandwidth
    • Sample rate
    • Gain stages
    • Expansion board settings
    • Synchronization trigger signals
    • SMB clock port mode (for MIMO applications on bladeRF1)
  • Read device attributes, including:
    • Serial number and calibration values
    • Firmware and FPGA version numbers
  • Steam sample data through either a simple synchronous interface, or a callback-based asynchronous interface.
  • Access and manipulate low-level parameters and device registers.
  • Load FPGA images
  • Update FX3 firmware
  • Recover from FX3 bootloader mode
The API Sections page presents a complete list of of the libbladeRF API sections, including the aforementioned items. The \ref relnotes_2_0 page summarizes the new features and changes in the second major release of libbladeRF. The following pages provide examples and more detailed usage information: */ bladeRF-2024.05/host/libraries/libbladeRF/doc/doxygen/relnotes_2_0.dox000066400000000000000000000705531457144405000253530ustar00rootroot00000000000000/** \page relnotes_2_0 libbladeRF 2.0 Release Notes @attention libbladeRF 2.0 introduces breaking changes to the parameter lists for bladerf_get_frequency(), bladerf_stream(), and bladerf_sync_config(). @attention Existing code using these functions @b must be updated to be compatible with this version. See the \ref relnotes_2_0_api_freq_uint64 and \ref relnotes_2_0_api_stream sections for guidance. @attention Additionally, if you use bladerf_get_gain() and/or bladerf_set_gain(), be aware that the gain range for these functions has shifted. See \ref relnotes_2_0_api_gain for guidance. This document describes many of the changes in libbladeRF 2.0, our latest major version increment that features significant changes. This release adds support for the bladeRF 2.0 Micro, and improves the API for all bladeRF products. This is also the first release with bindings for the Python programming language. We are very excited to release this library alongside the new bladeRF Micro. libbladeRF 2.0 began as a fork of the bladeRF codebase. Across the FPGA, firmware, and host software trees, we added 95,000+ lines (and deleted 18,000+) to the bladeRF codebase, in more than 600 commits. In case you experience any bugs or missing features, please use our issue tracker at https://github.com/Nuand/bladeRF/issues to report any problems you encounter with this release. Also, visit our forums at https://nuand.com/forums/ to discuss this release with other bladeRF users. \tableofcontents \section relnotes_2_0_api Significant changes to the libbladeRF API We attempted to minimize the changes required to make existing applications work with libbladeRF 2.0. However, the nature of this project required some changes to the API. Many of the changes can be transparently handled by compilers. However, applications will generally need to be recompiled and relinked to work with this version. Each topic has a table describing the affected functions, the importance of this change, and the recommended action. Please see \ref relnotes_2_0_ref_nomenclature for definitions of the words used in the "Importance" column. \subsection relnotes_2_0_api_freq_uint64 RF frequencies are now uint64_t In libbladeRF 1.x, RF frequencies were specified as 32-bit `unsigned int`. To support the wider frequency range of the bladeRF Micro, frequencies are now specified as `uint64_t`, which is typedef'd as ::bladerf_frequency.
Required actions
API ComponentImportanceAction
bladerf_get_frequency() Required The `frequency` parameter is now a pointer to a ::bladerf_frequency. \warning Applications using this function must be modified to pass in the correct type.
bladerf_set_frequency() Required for full compatibility \note This action is required to use RF frequencies above ~4 GHz. The `frequency` parameter is now of type ::bladerf_frequency. \note Compilers will generally implicitly cast `unsigned int` to ::bladerf_frequency, but frequencies above `UINT32_MAX` will not be available.
bladerf_select_band()
bladerf_schedule_retune()
\remarks \li Don't be alarmed if there is a small discrepancy (a few Hz) in the value returned by bladerf_get_frequency(), compared to what was requested by bladerf_set_frequency(). \li Do check bladerf_get_frequency_range() \em before using bladerf_set_frequency() on a given device/channel. \li Do check bladerf_get_frequency() \em after doing bladerf_set_frequency(), to verify that the expected frequency was achieved. \li Do expect bladerf_get_frequency() to return values larger than `UINT32_MAX`. \li Do use the ::bladerf_frequency type when possible. \subsection relnotes_2_0_api_stream Streaming API changes for MIMO The data transfer APIs were expanded to support MIMO (multiple-input, multiple-output). This capability is used to transmit or receive samples via multiple RF ports simultaneously.
Required actions
API ComponentImportanceAction
bladerf_sync_config() Required The `bladerf_module` argument has been replaced with \ref bladerf_channel_layout. Replace `BLADERF_MODULE_RX` with \ref BLADERF_RX_X1, and `BLADERF_MODULE_TX` with \ref BLADERF_TX_X1. \warning Applications using these functions must be modified to pass in the correct type. \note Existing `bladerf_module` values are valid for SISO applications, but an explicit cast is usually required: ``` void configure_module_sync(bladerf_module module) { // ... status = bladerf_sync_config(dev, (bladerf_channel_layout)module, format, num_buffers, buffer_size, num_transfers, stream_timeout); // ... } ```
bladerf_stream()
bladerf_get_timestamp() Optional The `bladerf_module` argument has been replaced with \ref bladerf_direction. Replace `BLADERF_MODULE_RX` with \ref BLADERF_RX, and `BLADERF_MODULE_TX` with \ref BLADERF_TX. \note Existing `bladerf_module` values are still valid, and a cast should not be necessary.
bladerf_set_stream_timeout()
bladerf_get_stream_timeout()
bladerf_sync_tx() Informational The `samples` parameter is now a pointer to a `const`, to enforce safety. This should not impact user code.
\remarks \li Don't use the `BLADERF_MODULE_RX` and `BLADERF_MODULE_TX` values. \li Do feel free to re-implement bladerf_interleave_stream_buffer() and/or bladerf_deinterleave_stream_buffer() in a more efficient fashion. These are convenience functions written for clarity and portability, not performance. \see \ref relnotes_2_0_ref_channels \see \ref BLADERF_FORMAT_SC16_Q11 describes the sample interleaving format. \see bladerf_interleave_stream_buffer() - Interleaves contiguous blocks of samples in preparation for MIMO TX. \see bladerf_deinterleave_stream_buffer() - Deinterleaves samples into contiguous blocks after MIMO RX. \see bladerf_get_channel_count() - Get the number of RX or TX channels supported by the given device. \subsection relnotes_2_0_api_channel bladerf_module replaced by bladerf_channel In libbladeRF 1.x, `bladerf_module` was an enum with two valid choices: `BLADERF_MODULE_RX` and `BLADERF_MODULE_TX`. To support MIMO, this enum has been replaced with \ref bladerf_channel, and a pair of convenience macros have been defined to specify channels: BLADERF_CHANNEL_RX(ch) and BLADERF_CHANNEL_TX(ch). For backwards compatibility, `bladerf_module` is a typedef of \ref bladerf_channel, and the `BLADERF_MODULE_RX` and `BLADERF_MODULE_TX` identifiers are now macros for BLADERF_CHANNEL_RX(0) and BLADERF_CHANNEL_TX(0) respectively. Note that some `bladerf_module` instances have been replaced with \ref bladerf_direction and \ref bladerf_channel_layout depending on context. See the \ref relnotes_2_0_api_stream section elsewhere in this document.
Required actions
API ComponentImportanceAction
bladerf_enable_module() Required for full compatibility \note This action is required to fully support devices with multiple channels. Without these changes, only the first channel will be available for use. Replace `bladerf_module` with \ref bladerf_channel. Replace `BLADERF_MODULE_RX` with BLADERF_CHANNEL_RX(0), or generally, BLADERF_CHANNEL_RX(channel_number) Replace `BLADERF_MODULE_TX` with BLADERF_CHANNEL_TX(0), or generally, BLADERF_CHANNEL_TX(channel_number)
bladerf_set_gain()
bladerf_set_gain_mode()
bladerf_get_gain_mode()
bladerf_set_sample_rate()
bladerf_set_rational_sample_rate()
bladerf_get_sample_rate()
bladerf_get_rational_sample_rate()
bladerf_set_bandwidth()
bladerf_get_bandwidth()
bladerf_set_lpf_mode()
bladerf_get_lpf_mode()
bladerf_select_band()
bladerf_set_frequency()
bladerf_schedule_retune()
bladerf_cancel_scheduled_retunes()
bladerf_get_frequency()
bladerf_get_quick_tune()
bladerf_trigger_init()
bladerf_set_correction()
bladerf_get_correction()
bladerf_xb200_set_filterbank()
bladerf_xb200_get_filterbank()
bladerf_xb200_set_path()
bladerf_xb200_get_path()
bladerf_read_trigger()
bladerf_write_trigger()
\remarks \li Don't use `BLADERF_MODULE_RX` or `BLADERF_MODULE_TX`. \li Don't assume the number of channels available. \li Do always check bladerf_get_channel_count() to determine how many channels are available in a given direction. \li Do use the BLADERF_CHANNEL_RX(channel) and BLADERF_CHANNEL_TX(channel) convenience macros. \see \ref relnotes_2_0_ref_channels \see bladerf_get_channel_count() - Get the number of RX or TX channels supported by the given device. \subsection relnotes_2_0_api_range Defined BLADERF_*_{MAX,MIN,etc} constants replaced by bladerf_get_*_range functions The precompiler constants for supported minimum/maximum values have been deprecated and replaced with a set of context-aware functions. The old constants will be removed in a later release.
Required actions
API ComponentImportanceAction
BLADERF_RXVGA1_GAIN_MIN Required for full compatibility \note This action is required for proper functioning of new bladeRF models. The old constants are only valid for the original bladeRF, and are not valid for other models. Use bladerf_get_gain_stage_range() to retrieve the range of allowable gains for a specific gain stage. \see bladerf_get_gain() and bladerf_set_gain()
BLADERF_RXVGA1_GAIN_MAX
BLADERF_RXVGA2_GAIN_MIN
BLADERF_RXVGA2_GAIN_MAX
BLADERF_TXVGA1_GAIN_MIN
BLADERF_TXVGA1_GAIN_MAX
BLADERF_TXVGA2_GAIN_MIN
BLADERF_TXVGA2_GAIN_MAX
BLADERF_LNA_GAIN_MID_DB
BLADERF_LNA_GAIN_MAX_DB
BLADERF_SAMPLERATE_MIN Use bladerf_get_sample_rate_range() to retrieve the range of allowable sample rates for a given channel.
BLADERF_SAMPLERATE_REC_MAX
BLADERF_BANDWIDTH_MIN Use bladerf_get_bandwidth_range() to retrieve the supported range of bandwidths for a given channel.
BLADERF_BANDWIDTH_MAX
BLADERF_FREQUENCY_MIN_XB200 Use bladerf_get_frequency_range() to retrieve the supported range of frequencies for a given channel. \note The range will vary depending on the particular hardware configuration, such as if a XB-200 is attached.
BLADERF_FREQUENCY_MIN
BLADERF_FREQUENCY_MAX
An example use of bladerf_get_frequency_range(): \code{.c} bool is_frequency_within_range(struct bladerf *dev, bladerf_channel channel, bladerf_frequency frequency) { int status; struct bladerf_range range; status = bladerf_get_frequency_range(dev, channel, &range); if (status < 0) { // error case } return ((frequency / range.scale) >= range.min && (frequency / range.scale) <= range.max); } \endcode \remarks \li Don't use the legacy `BLADERF_*_{MIN,MAX}` defines or any hardcoded values derived from them. \li Don't assume that the ranges will remain constant throughout operation, or that they are the same for all channels. \li Don't hardcode ranges, or guess them based on the board model. \li Do remember that the ranges can change depending on configuration, e.g. bladerf_get_gain_range() may return different values for an RX channel depending on the configured center frequency. \li Do call `bladerf_get_*_range()` every time you need to know -- don't cache it! \li Do test to ensure user-supplied values are valid before using them, when possible. \li Do handle \ref BLADERF_ERR_RANGE errors when setting values, especially if you don't check for validity first. The library will only return this if it is not sensible to clamp the value to be within range, e.g. with bladerf_set_sample_rate(). \see bladerf_get_gain_stages() - Get a list of available gain stages. \see bladerf_set_gain() - Set overall system gain. \see bladerf_get_gain() - Get overall system gain. \subsection relnotes_2_0_api_gain bladerf_{get,set}_gain range standardization Previously, the ranges used by bladerf_get_gain() and bladerf_set_gain() were somewhat arbitrary, with a value of 0 being the minimum possible gain, and the maximum possible gain being the sum of the max gain for all gain stages. To allow the same gain settings to produce similar results on all bladeRF models, we've adjusted the gain ranges for these two functions to define 60 dB as the maximum available gain on RX, and roughly +0 dBm output power on TX.
Required actions
API ComponentImportanceAction
bladerf_set_gain() Required for full compatibility \note This change affects the meaning of the values passed to/from these functions, and the impact should be reviewed to avoid unexpected results. 60 dB is now defined as: \li RX channels: Maximum RX Gain \li TX channels: +0 dBm TX power (CW, approximate)
bladerf_get_gain()
\note Individual gain stages (bladerf_set_gain_stage() and bladerf_get_gain_stage()) still expect raw hardware-specific values. \note The TX Gain is \em not calibrated, and the actual output power will vary from board to board, frequency to frequency, and even between different output ports on the same board. Applications requiring precise control of TX power should consider calibration. \see \ref relnotes_2_0_feats_gc_proportioning \subsection relnotes_2_0_api_typedefs Common parameter types now have typedefs For semantic clarity, common parameter types now have typedefs.
Required actions
API ComponentImportanceAction
bladerf_set_frequency() Required The declarations for these functions were changed to use defined types. No changes are immediately necessary, with the exception of ::bladerf_frequency. The new types are: \li ::bladerf_gain (gain value in dB; `int`) \li ::bladerf_sample_rate (sample rate in samples per second; `unsigned int`) \li ::bladerf_bandwidth (bandwidth in Hz; `unsigned int`) \li ::bladerf_frequency (center frequency in Hz; now `uint64_t`, was `uint32_t`) \li ::bladerf_timestamp (timestamp in ticks; `uint64_t`) \li ::bladerf_correction_value (correction value in arbitrary units; `int16_t`) \see \ref relnotes_2_0_api_freq_uint64
bladerf_get_frequency()
bladerf_schedule_retune()
bladerf_select_band()
bladerf_set_gain() Optional
bladerf_get_gain()
bladerf_set_gain_stage()
bladerf_get_gain_stage()
bladerf_set_sample_rate()
bladerf_get_sample_rate()
bladerf_set_bandwidth()
bladerf_get_bandwidth()
bladerf_set_correction()
bladerf_get_correction()
bladerf_get_timestamp()
struct bladerf_metadata
\todo Issue #577: Using `printf()` with a ::bladerf_frequency or ::bladerf_timestamp currently require knowing that they are actually `uint64_t`, e.g. `printf("the frequency is %" PRIu64 " Hz\n", freq);`. \section relnotes_2_0_feats New features \subsection relnotes_2_0_feats_platform Multiple platform support We reorganized libbladeRF to easily support multiple hardware platforms. You will find a new directory tree, `host/libraries/libbladeRF/src/board/`, containing subdirectories for each supported platform (currently `bladerf1/` for the LMS6002D-based bladeRF family, and `bladerf2/` for the AD9361-based bladeRF Micro family). Likewise, product-specific API calls have been moved into two new header files: bladeRF1.h and bladeRF2.h. Functions which apply to all boards remain in libbladeRF.h. \see Refer to bladeRF1.h and bladeRF2.h for a list of affected functions. \note Using API calls specified in bladeRF1.h or bladeRF2.h is not recommended for most use cases. They are provided for backwards compatibility and low-level hardware control, and are subject to change. We also rearranged a number of source files into subdirectories of `host/libraries/libbladeRF/src/`. In addition to the pre-existing `backend/`, you'll also find `board/` (product-specific code), `driver/` (device drivers), `expansion/` (expansion board drivers), `helpers/` (helpful utility functions), and `streaming/` (sample streaming code). \subsection relnotes_2_0_feats_gc Gain control improvements The original manual gain control functionality in libbladeRF was very low-level and hardware-specific, and requires significant knowledge of the underlying RF module to adjust. As such, new gain control methods have been introduced to the API, and the following functions are now deprecated: \li bladerf_set_lna_gain() and bladerf_get_lna_gain() \li bladerf_set_rxvga1() and bladerf_get_rxvga1() \li bladerf_set_rxvga2() and bladerf_get_rxvga2() \li bladerf_set_txvga1() and bladerf_get_txvga1() \li bladerf_set_txvga2() and bladerf_get_txvga2() Instead, applications should use one of approaches described below. \subsubsection relnotes_2_0_feats_gc_agc Automatic Gain Control (AGC) Automatic gain control is available for RX channels, starting with libbladeRF v1.9.0 and FPGA v0.7.0. AGC continually adjusts the system's gain to ensure the received signal has a high dynamic range, while avoiding clipping. \li bladerf_get_gain_modes() reports the available gain modes on a channel \li bladerf_get_gain_mode() reports the current gain mode for a channel \li bladerf_set_gain_mode() sets the gain mode for a channel As of this writing, the available gain modes are: \li bladeRF: \b ::BLADERF_GAIN_AUTOMATIC (default), ::BLADERF_GAIN_MANUAL \li bladeRF Micro: ::BLADERF_GAIN_MGC, ::BLADERF_GAIN_FASTATTACK_AGC, \b ::BLADERF_GAIN_SLOWATTACK_AGC (default), ::BLADERF_GAIN_HYBRID_AGC \note bladerf_get_gain_mode() and bladerf_set_gain_mode() will return ::BLADERF_ERR_UNSUPPORTED for TX channels. \code{.c} void agc_example(struct bladerf *dev, bladerf_channel channel) { int i, status; const struct bladerf_gain_modes *modes = NULL; bladerf_gain_mode mode; // What gain modes are available? status = bladerf_get_gain_modes(dev, channel, &modes); if (status < 0) { // error case } for (i = 0; i < status; ++i) { printf("enum %d is gain mode %s\n", modes[i]->mode, modes[i]->name); } // Get current gain mode status = bladerf_get_gain_mode(dev, channel, &mode); if (status < 0) { // error case } printf("current gain mode: %d\n", mode); // Enable AGC mode = BLADERF_GAIN_AUTOMATIC; status = bladerf_set_gain_mode(dev, channel, mode); if (status < 0) { // error case } } \endcode \subsubsection relnotes_2_0_feats_gc_proportioning System gain proportioning In previous versions, setting the gain required careful proportioning of gain between LNAs and VGAs. To reduce the implementation burden, an overall gain may now be specified, and the RFIC's gain stages will be set appropriately. \li bladerf_get_gain_range() reports the allowable values for a channel's gain \li bladerf_get_gain() reports the current overall gain for a channel \li bladerf_set_gain() sets the overall gain for a channel The gain scales are defined such that a 60 dB gain on a TX channel is \em approximately 0 dBm CW output, and a 60 dB gain on a RX channel is the maximum available amplification. \note bladerf_set_gain() may be unavailable or may not operate as expected if \ref relnotes_2_0_feats_gc_agc is enabled, or if the channel is not currently enabled. \note The range returned by bladerf_get_gain_range() may vary depending on the selected center frequency. \code{.c} void gain_example(struct bladerf *dev, bladerf_channel channel, int gain) { int old_gain, status; const struct bladerf_range *range = NULL; // What is the valid range? status = bladerf_get_gain_range(dev, channel, &range); if (status < 0) { // error case } // What is the current gain? status = bladerf_get_gain(dev, channel, &old_gain); if (status < 0) { // error case }; printf("Channel %d current gain: %4d dB (Range: [%g, %g])\n", channel, old_gain, range->min * range->scale, range->max * range->scale); // Set the new gain value status = bladerf_set_gain(dev, channel, gain); if (status < 0) { // error case }; } ... gain_example(dev, BLADERF_CHANNEL_TX(0), 60); // set 60 dB TX gain (~ 0 dBm) gain_example(dev, BLADERF_CHANNEL_RX(0), 60); // set 60 dB RX gain (max) \endcode \see bladerf_get_rfic_rssi() - query received signal strength from the RFIC. \subsubsection relnotes_2_0_feats_gc_manual Individual gain stage control Advanced implementations that need to directly configure the gain stages may use the following family of functions: \li bladerf_get_gain_stages() reports the gain stages on a given channel \li bladerf_get_gain_stage_range() reports the range of allowable values for a given gain stage \li bladerf_get_gain_stage() reports the current value for a gain stage \li bladerf_set_gain_stage() sets the gain for a given gain stage \note The values set here will be reflected in bladerf_get_gain(), but using bladerf_set_gain() will override any individual gain stage settings on a particular channel. \note bladerf_set_gain_stage() may be unavailable or may not operate as expected if \ref relnotes_2_0_feats_gc_agc is enabled, or if the channel is not currently enabled. \note The range returned by bladerf_get_gain_stage_range() may vary depending on the selected center frequency. \subsection relnotes_2_0_feats_hw New hardware features libbladeRF 2.0 includes support for new hardware features on the bladeRF Micro. \subsubsection relnotes_2_0_feats_hw_biastee Bias tees The bias tees apply a +5 VDC bias to the SMA connectors, which may be used for powering active antennas or inline amplifiers. \warning Enabling the bias tee on one channel enables it for all channels in that direction; e.g. enabling RX1 will enable both RX1 and RX2 simultaneously. Use caution if there are multiple devices attached to the bladeRF Micro. \see bladerf_get_bias_tee() and bladerf_set_bias_tee() \subsubsection relnotes_2_0_feats_hw_clock Clock references and controls An external frequency reference may be connected to the J95 U.FL connector ("REFIN") to discipline the onboard VCTCXO. By default, this port expects 10 MHz, but it can be configured for reference frequencies between 5 MHz and 300 MHz. \see bladerf_get_pll_enable(), bladerf_set_pll_enable() - enabling the PLL \see bladerf_get_pll_lock_state() - verifying PLL lock \see bladerf_get_pll_refclk_range(), bladerf_get_pll_refclk(), bladerf_set_pll_refclk() - configure reference clock frequency Alternatively, a 38.4 MHz clock may be provided into the CLKIN port. \see bladerf_get_clock_select(), bladerf_set_clock_select() - select between internal and external (J93) clock There is also a CLKOUT port, which can provide a buffered 38.4 MHz system clock output. \see bladerf_get_clock_output(), bladerf_set_clock_output() - enable or disable clock output (J92) \subsubsection relnotes_2_0_feats_hw_power Power status Functions are provided to determine how the board is currently being powered, what the bus voltage is, and what the system current and power draws are. \see bladerf_get_power_source() - query how the board is currently powered \see bladerf_get_pmic_register() - get bus voltage, load current, load power \subsubsection relnotes_2_0_feats_hw_temperature RFIC temperature The RFIC has an onboard temperature sensor, which may be useful for environmental monitoring, or for determining if the RFIC's synthesizers should be re-tuned after a significant temperature shift. \see bladerf_get_rfic_temperature() \section relnotes_2_0_ref Further information \subsection relnotes_2_0_ref_channels What is a channel? In the bladeRF architecture, a channel is a single, unidirectional RF path. There is a 1:1 mapping between a ::bladerf_channel and a physical RF port. On the original bladeRF, there are two channels available: \li BLADERF_CHANNEL_RX(0) == J53 "RX" \li BLADERF_CHANNEL_TX(0) == J54 "TX" On the bladeRF Micro, there are four channels available: \li BLADERF_CHANNEL_RX(0) == J1 "RX1" \li BLADERF_CHANNEL_RX(1) == J3 "RX2" \li BLADERF_CHANNEL_TX(0) == J2 "TX1" \li BLADERF_CHANNEL_TX(1) == J4 "TX2" Generally speaking, you will want to apply settings to a specific channel. Note that some groups of channels may share some settings on some hardware: for example, if you bladerf_set_frequency() on a bladeRF Micro's BLADERF_CHANNEL_RX(0), it will also change the frequency of BLADERF_CHANNEL_RX(1), because both RX ports share the same local oscillator. There are some functions which always apply to all the RX channels or all the TX channels. These accept a ::bladerf_direction argument: \li bladerf_get_channel_count() \li bladerf_get_timestamp() \li bladerf_set_stream_timeout() \li bladerf_get_stream_timeout() Finally, there are two functions which accept a ::bladerf_channel_layout. This specifies two things: the direction (RX vs TX), and the number of channels interleaved in the sample buffers (currently 1 or 2). \li bladerf_sync_config() \li bladerf_stream() \subsection relnotes_2_0_ref_nomenclature Definitions for "Importance"
WordMeaning
Required This change must be performed to build code against libbladeRF 2.0. Compile errors will result if you fail to do so.
Required for full compatibility This change is not required for building, but some functionality may be missing or unavailable with some devices. A Note will be included to describe the impact of not making this change.
Optional This change is optional, but recommended for clarity and/or future compatibility.
Informational This is an informational item, and no action is necessary or expected.
*/ bladeRF-2024.05/host/libraries/libbladeRF/doc/doxygen/sync_no_meta.dox000066400000000000000000000126531457144405000255330ustar00rootroot00000000000000/** \page sync_no_meta bladeRF Synchronous Interface: Basic Usage Without Metadata This page describes how to use the bladeRF Synchronous Interface to transmit and receive samples. The example listed here configures and uses both the RX and TX channels. To use just one or the other, simply remove the code for the unneeded channel.

Initialization and Configuration

User buffers

First, one must allocate any "working buffers" in which samples will be stored. These are the `rx_samples` and `tx_samples` buffers shown in the below snippet. The `samples_len` variable defines the length of these buffers, in units of samples. Remember, when using the SC16 Q11 format, one sample consists of two `int16_t` values: I and Q, and when using 2x2 MIMO, samples from two channels are interleaved. \snippet sync_rxtx.c user_buffers

Configuring the Synchronous Interface

libbladeRF's synchronous interface maintains its own set of internal buffers, which it uses to keep an underlying asynchronous data stream running. This alleviates the need for the user to handle asynchronous callbacks and managing buffer transfers. Instead, the synchronous interface simply copies data to/from the aforementioned "user" buffers, for arbitrary request lengths. It is important to note, however, that users of the synchronous interface should still be conscious of the workings of the underlying Asynchronous Interface. Before making calls to bladerf_sync_rx() and bladerf_sync_tx(), one must configure the underlying stream using the bladerf_sync_config() function, as shown in the following snippet. The second argument to bladerf_sync_config() specifies the channel direction and layout. In the case of SISO (1x1), we use BLADERF_RX_X1 and BLADERF_TX_X1 layouts for RX and TX, respectively. If one forgets to configure the synchronous interface before attempting to call bladerf_sync_rx() or bladerf_sync_tx(), a ::BLADERF_ERR_INVAL status will be returned. \snippet sync_rxtx.c sync_init The `buffer_size` parameter configures the size of the buffers, in units of samples, that are sent to/from the hardware via the USB interface. These must be a multiple of 1024. Smaller values will help minimize latency, but will require that the user can process samples quickly. If one does not have low-latency constraints, buffer sizes of 8192 or 16384 are generally good starting points. The `num_buffers` parameter defines how many internal samples buffers should be allocated and used by the interface. A large number of buffers ensures that the buffers can continue to be filled/consumed while the user operates on samples, with a potential trade-off of increased latency. If this number is too small one may risk overrunning RX buffers, or underrunning TX buffers. The `num_transfers` parameter defines how many of these buffers may be in-flight at any given point in time. As a rule of thumb, a value that is less than or equal to half the number of buffers is a good starting value. Note that the maximum value may be limited by the underlying (USB) layer. It is generally not necessary (or sometimes even possible) to exceed a value of 32 transfers. The `timeout_ms` parameter defines a maximum amount of time that is allowed between completion of the synchronous interface's underlying stream buffers. Take care to ensure that this value is sufficiently large, considering the sample rate being used and the desired size of stream buffers.

Enabling and Disabling Front Ends

After configuring the synchronous interface, one must also enable the RF front end of the associated stream direction(s), via bladerf_enable_module(): \snippet sync_rxtx.c enable_modules

Receiving and Transmitting Samples

The bladerf_sync_rx() and bladerf_sync_tx() functions are used to receive and transmit an arbitrary number of samples. Remember that when transmitting, the samples will only be sent to the hardware once an underlying stream buffer has been filled (whose size was defined by the `buffer_size` parameter provided to bladerf_sync_config()). Therefore, when transmitting a small number of samples, one may need to zero-pad or configure the interface to use small buffers. Below is an example loop that receives samples, processes them, and occasionally transmits a response. Since metadata is not being used, a `NULL` pointer is provided to the ::bladerf_metadata parameter of the bladerf_sync_rx and bladerf_sync_tx calls. The timeout (in ms) parameter defines how long bladerf_sync_rx() and bladerf_sync_tx() may block. This value should be greater than the timeout provided to bladerf_sync_config() to ensure these functions do not time out before the underlying data stream times out (or completes). \snippet sync_rxtx.c rxtx_loop At the end of this loop, a `usleep()` call is made to ensure buffers of transmitted samples finally reach the RF front end. Note that the lower bound this delay is determined by the number of buffers that may have been filled by bladerf_sync_tx() and the sample rate.

Deinitializing and De-allocating Resources

When finished using a stream, bladerf_enable_module() may be used to turn off the associated RF front end. This will also de-initialize and deallocate the underlying data associated with the stream. \snippet sync_rxtx.c disable_modules


Complete listing

\snippet sync_rxtx.c example_snippet */ bladeRF-2024.05/host/libraries/libbladeRF/doc/doxygen/sync_rx_meta.dox000066400000000000000000000074001457144405000255420ustar00rootroot00000000000000/** \page sync_rx_meta Synchronous Interface: RX with Metadata This page describes how to use the bladeRF Synchronous Interface to receive samples with their associated timestamp, and scheduling reception at a specific timestamp. The timestamp value is associated with free-running counter in the FPGA, incrementing at the sample rate specified by bladerf_set_sample_rate(), with each incoming sample.

Configuring the Synchronous Interface

When timestamps are desired, one must enable metadata support. This is done through the `format` parameter of the bladerf_sync_config() function: \snippet sync_rx_meta.c sync_config Descriptions of the other parameters may be found in the Synchronous Interface: Basic usage without metadata page. Remember to enable the front end via bladerf_enable_module() after calling bladerf_sync_config(), and before attempting to call bladerf_sync_rx(). Also ensure that bladerf_sync_config() has been called before attempting to read timestamps via bladerf_get_timestamp(). When using the ::BLADERF_FORMAT_SC16_Q11_META format, a ::bladerf_metadata structure must be passed to bladerf_sync_rx(). One should zero the contents of this structure prior to using it.

Receiving Samples Immediately with Timestamps

As shown in the following snippet, the ::bladerf_metadata structure (`meta`) is first zeroed out, and then the metadata flags (`meta.flags`) are set to ::BLADERF_META_FLAG_RX_NOW. This flag denotes that RX samples should returned immediately, rather than scheduled for a specific RX timestamp. Once bladerf_sync_rx() returns, the ::bladerf_metadata.timestamp field may be read (`meta.timestamp`). Under normal conditions, this timestamp is associated with the first sample in the provided buffer, with the remaining samples in the buffer being contiguous (i.e., there is no timestamp gap between them). The ::bladerf_metadata.actual_count field should indicate that the requested number of samples have been read into the supplied buffer. However, if an RX overrun has occurred, as indicated by the ::BLADERF_META_STATUS_OVERRUN bit being set in the ::bladerf_metadata.status field (`meta.status`), a sample discontinuity will have occurred. Generally, this overrun condition may occur if the time between calls to bladerf_sync_rx() is too long, or too few/small buffers were provided to bladerf_sync_config(). In the case of an overrun, the ::bladerf_metadata's `actual_count` value is set to the number of contiguous samples read into the supplied buffer. This value will be less than the requested number of samples, so be sure not to read past this number of samples. \snippet sync_rx_meta.c rx_meta_now_example

Receiving Samples at a Specified Timestamps

To schedule reception at a specific timestamp, set the ::bladerf_metadata.flags field to 0, and write the desired timestamp to the ::bladerf_metadata.timestamp field. A call to bladerf_sync_rx() may then be used to read the specified number of samples at the timestamp indicated in metadata structure. Ensure that the timeout provided to bladerf_sync_rx() is sufficiently large, such that the function call does not time out before the desired timestamp occurs. When scheduling the first RX, it is generally helpful to first read the stream's timestamp counter and advance it by a known duration. This is shown in the below example code. Note that the caller is responsible for advancing the timestamp field each time bladerf_sync_rx() is called. \snippet sync_rx_meta.c rx_meta_sched_example The description of the ::BLADERF_META_STATUS_OVERRUN flag and the the ::bladerf_metadata.actual_count field from the previous section applies here as well. */ bladeRF-2024.05/host/libraries/libbladeRF/doc/doxygen/sync_tx_meta.dox000066400000000000000000000140541457144405000255470ustar00rootroot00000000000000/** \page sync_tx_meta_bursts Synchronous Interface: Scheduled TX bursts This page describes how to use the bladeRF Synchronous Interface to transmit bursts of samples at a specified timestamp. The timestamp is a free-running counter in the FPGA, incrementing at the sample rate specified by bladerf_set_sample_rate(), with each outgoing sample.

Configuring the Synchronous Interface

When timestamps are desired, one must enable metadata support. This is done through the `format` parameter of the bladerf_sync_config() function: \snippet sync_tx_meta.c sync_config Descriptions of the other parameters may be found in the Synchronous Interface: Basic usage without metadata page. Remember to enable the front end via bladerf_enable_module() after calling bladerf_sync_config(), and before attempting to call bladerf_sync_tx(). Also ensure that bladerf_sync_config() has been called before attempting to read timestamps via bladerf_get_timestamp().

Burst Transmissions

The synchronous interface allows a burst of samples to be transmitted at a specified timestamp value. The hardware will output zeros after the burst. The general procedure for transmitting a burst is as follows
  • Call bladerf_sync_tx() with ::bladerf_metadata.flags set to ::BLADERF_META_FLAG_TX_BURST_START and ::bladerf_metadata.timestamp set to the timestamp at which samples should be transmitted.
  • Make successive bladerf_sync_tx() calls with ::bladerf_metadata.flags set to 0. These samples will be contiguously appended to the previous samples. The ::bladerf_metadata.timestamp field is not used at this point; the caller does not need to worry about advancing it.
  • Call bladerf_sync_tx() with the final samples in the burst and the ::bladerf_metadata.flags set to ::BLADERF_META_FLAG_TX_BURST_END. This will complete the burst, flush any remaining samples in the synchronous interface's current internal buffer, and write the buffer to the device. Similar to the previous step, any samples provided at this points will be contiguously appended to prior samples, and the ::bladerf_metadata.timestamp field will not be used.
The above procedure is useful when the samples for the burst are actively being produced. If all the samples for the burst are available ahead of time, all of the above steps can be performed with a single function call, with:
  • ::bladerf_metadata.flags set to: (BLADERF_META_FLAG_TX_BURST_START | BLADERF_META_FLAG_TX_BURST_END)
  • ::bladerf_metadata.timestamp set to the timestamp at which the samples should be transmitted.
Note that when completing a burst with ::BLADERF_META_FLAG_TX_BURST_END, up to one of the synchronous interface's buffers may be flushed. This is important to consider, since this defines the minimum value of the next timestamp can be provided. If small bursts need to be scheduled back to back, consider either manually zero-padding between them, or using the ::BLADERF_META_FLAG_TX_UPDATE_TIMESTAMP flag, as described in one of the following sections.

Waiting for TX to complete

When scheduling transmissions, one must ensure the samples have reached the RF front end before shutting the stream down and disabling TX. This can be achieved by polling the TX timestamp and waiting for it to exceed the value of the last sample. Generally, one should wait some additional time to account for some group delay in the signal path. Below is an example `wait_for_timestamp()` function that provides this functionality, with a simple timeout: \snippet sync_tx_meta.c wait_for_timestamp

Scheduled Burst Example

This example illustrates transmitting scheduled bursts, via a single function call. \snippet sync_tx_meta.c tx_meta_sched

Using the TX_NOW flag

In some cases, one may wish to transmit a burst immediately while using the ::BLADERF_FORMAT_SC16_Q11_META format. As shown in the below example, this is possible by setting the ::BLADERF_META_FLAG_TX_NOW flag. When using this flag the ::bladerf_metadata.timestamp field is not used. \snippet sync_tx_meta.c tx_meta_now

Using the UPDATE_TIMESTAMP flag

In some applications, flushing an entire buffer ::BLADERF_META_FLAG_TX_BURST_END may result in too long of a delay between bursts. As suggested earlier in this page, a user may instead manually zero pad their samples to achieve short discontinuities, or have libbladeRF do this for them using the ::BLADERF_META_FLAG_TX_UPDATE_TIMESTAMP flag. The general usage of this is:
  • Set ::bladerf_metadata.timestamp to the desired start of transmission, and ::bladerf_metadata.flags to ::BLADERF_META_FLAG_TX_BURST_START. Call bladerf_sync_tx() with the initial samples in the burst.
  • Optional: Call bladerf_sync_tx() with ::bladerf_metadata.flags as needed to transmit samples that are contiguous with the previous samples. ::bladerf_metadata.timestamp is not used in this state.
  • Call bladerf_sync_tx() with ::bladerf_metadata.flags set to ::BLADERF_META_FLAG_TX_UPDATE_TIMESTAMP and ::bladerf_metadata.timestamp set to the desired timestamp. libbladeRF will schedule the provided samples for the specified timestamp, manually zero-padding a buffer if needed.
  • Optional: Call bladerf_sync_tx() with ::bladerf_metadata.flags as needed to transmit samples that are contiguous with the newly scheduled samples. ::bladerf_metadata.timestamp is not used in this state.
  • When done transmitting, call bladerf_sync_tx() with ::bladerf_metadata.flags set to ::BLADERF_META_FLAG_TX_BURST_END and two or more zero samples. This will ensure the analog front end DACs are held at a zero value.
The above procedure is shown in the below example: \snippet sync_tx_meta.c tx_meta_update */ bladeRF-2024.05/host/libraries/libbladeRF/doc/doxygen/tuning.dox000066400000000000000000000222461457144405000243600ustar00rootroot00000000000000/** \page tuning Frequency tuning (bladeRF1) The simplest means of tuning the bladeRF's RX or TX module to a specified frequency is the bladerf_set_frequency() function. This page provides an overview of the underlying frequency tuning procedure and details the following functionality introduced in libbladeRF v1.3.0 and FPGA v0.3.1:
  • Execution of LMS6002D tuning algorithm on host or FPGA
  • Scheduling retunes using sample timestamp values
  • Quick retune via saved LMS6002D register states

Frequency Tuning on the bladeRF

At a high level, setting the frequency on the bladeRF consists of two major steps:
  • Tuning the LMS6002D transceiver
  • Switching between the bladeRF's low frequency band and high frequency band baluns, as needed.
libbladeRF performs the band selection step via a bit in a configuration word in the FPGA. The FPGA switches between the baluns via an I/O pin. Tuning the LMS6002D PLLs involves a few steps:
  • Selecting a VCO and divider setting
  • Calculating and applying integer and fractional parameters to yield the desired VCO frequency
  • Adjusting a "Vtune" voltage to be within 0.5V to 2.5V to guarantee PLL lock. To minimize phase noise, this is adjusted to be close to 1.5V. This is done by adjusting a "VCOCAP" code, and using a voltage comparator to determine when the Vtune high or low limit has been reached.
Empirical data indicates that the relationship between a frequency's offset in a VCO band and its nominal VCOCAP value could be approximated by a linear interpolation. Although this linear approximation does not hold true near the extremes of VCO ranges, the error is small enough to yield a sufficient starting point. From this staring point, the VCOCAP could be increased to find the Vtune upper limit, or decreased to find the Vtune lower limit. After establishing these limits, the VCOCAP value halfway between these limits should yield a Vtune voltage near 1.5V. See the LMS6002D Programming and Calibration Guide for more information on this procedure.

Tuning Mode

The combination of libbladeRF >= v0.3.0 and FPGA >= v0.2.0 introduces two options for how frequency tuning functions, such as bladerf_set_frequency(), operate. The tuning mode may be selected through the API, via bladerf_set_tuning_mode(). Additionally, a BLADERF_DEFAULT_TUNING_MODE enviromnent variable may be defined to change the default at runtime. The ::BLADERF_TUNING_MODE_HOST mode is the mode of operation used in previous versions of libbladeRF. The entire turning procedure, outlined above, is carried out on the host machine, using the USB interface to perform LMS6002D register accesses. With verbose log output enabled, the state of the LMS6002D and its registers can be easily observed throughout the tuning procedure. The Vtune/VCOCAP portion of the tuning procedure involves a fairly large number of LMS6002D register accesses. By carrying out this part of the procedure in the NIOS II core in the FPGA, the USB and FX3 UART overhead for every single LMS6002D register access can be removed, yielding a faster tuning operation. When using ::BLADERF_TUNING_MODE_FPGA, the host determines and writes the following to the device in a single request:
  • VCO selection and divider
  • VCOCAP starting point guess
  • Integer and fractional parameters used to derive desired frequency from selected VCO
The NIOS II running the FPGA then applies these values and then performs the VCOCAP search. To alleviate the need to perform additional USB (and FX3 UART) requests for the tuning operation, the band selection is also perfomed by the NIOS II. The tuning speedup acheived by using ::BLADERF_TUNING_MODE_FPGA can be quantified using the libbladeRF_test_tune_timing program included in the libbladeRF build. Below is sample output for two differen NIOS II core implementations.

Test machine:
 i7-4790K (4 GHz)
 Intel 9 Series XHCI

========================================
  NIOS II/f
========================================

Re-tuning with fixed frequency...
  Host tuning:    0.004224s
  FPGA tuning:    0.000449s
  Speedup factor: 9.401454

Re-tuning with random frequencies...
  Host tuning:    0.003781s
  FPGA tuning:    0.000440s
  Speedup factor: 8.586363

Performing quick-tune...
  Host tuning:    0.000135s
  FPGA tuning:    0.000125s
  Speedup factor: 1.079900

========================================
  NIOS II/e
========================================

Re-tuning with fixed frequency...
  Host tuning:    0.005490s
  FPGA tuning:    0.000671s
  Speedup factor: 8.178385

Re-tuning with random frequencies...
  Host tuning:    0.005320s
  FPGA tuning:    0.000667s
  Speedup factor: 7.973849

Performing quick-tune...
  Host tuning:    0.000225s
  FPGA tuning:    0.000219s
  Speedup factor: 1.027703

As shown above, performance significantly changes depending on which NIOS II core implementation is used. (More information about the NIOS II cores can be found in Altera's Nios II Core Implementation Details document. The NIOS II/e is the default implementation in bladeRF FPGA builds, as this can be built with the free Quartus II 15.0 Web Edition software.

Scheduled Retune

When using timestamps (i.e., the synchronous interface with the ::BLADERF_FORMAT_SC16_Q11_META format), one can schedule retune operations that are synchronized with the sample timestamp counter. The bladerf_schedule_retune() function writes the requested tuning parameters to the FPGA's NIOS II core, which enqueues the request and schedules an interrupt at the specified timestamp. When the timestamp occurs, the interrupt fires, and the NIOS II dequeues the requesting tuning configuration and applies it. If a non-zero frequency was supplied to the bladerf_schedule_retune() function, this implies that the the device will perform the algorithm to identify a nominal VCOCAP value. Note that this operation takes time, and should be accounted for when scheduling an RX (or TX) operation after the re-tune. Some tips for this are provided at the end of this page. If a quick_tune parameter is used, this will be applied directly, as described in the following section. One may wish to cancel scheduled retunes as the result of the user requesting a configuration change. This can be achieved via bladerf_cancel_scheduled_retunes(). bladerf_open(), bladerf_open_with_devinfo(), and bladerf_close() all cancel pending re-tunes. This is done to ensure that the device does not unexpectedly retune as the result of "stale" requests from previous usage.

Quick Re-tune

As shown by the tune timing results, the "quick tune" option provides even faster re-tuning. This functionality writes previously identified tuning parameters, including the nominal VCOCAP value, directly to the LMS6002D registers instead of searching for the VCOCAP value. It does, however, verify that the LMS6002D reports the Vtune voltage is within the required range for the associated PLL to maintain lock. As noted in the description of bladerf_get_quick_tune(), there is a trade-off for this quicker tuning. Since the PLL and tuning parameters (e.g., VCOCAP) are sensitive to changes in the environment, using this quick tune feature for an extended period of time can result in increased phase noise. This requires that a user "refresh" their quick tune parameters for long operations. The basic procedure for using the quick re-tune functionality is outlined in the below snippet. First, the bladeRF is tuned to each desired frequency, and the "quick tune" parameters are retrieved. \snippet quick_tune.c example When using the ::BLADERF_RETUNE_NOW flag, consider that samples from a previous frequency may already be in libbladeRF's buffers. It is often better to schedule the retune and then the reception/transmission at specific timestamps. For example, if a retune is scheduled at timestamp t, bladerf_sync_rx() can be called for t +delta. Samples that may be in libbladeRF's buffers prior to the retune will be dropped.

Measuring Settling Time

Users looking to achieve fast retuning times are encouraged to measure the amount of time it takes for the LMS6002D's Vtune pins to settle. By observing the upper bound on this time, one can establish the required time delta between scheduling a re-tune operation and scheduling to RX samples from the new frequency, for example. This can be done by measuring the voltages on the following resistors, and identifying how long it takes for Vtune to settle to approximately 1.5V.
  • RX: R263
  • TX: R265
These resistors may be found under the removable can that covers the LMS6002D. See the bladeRF schematic to further review how these are connected to the Vtune pins. */ bladeRF-2024.05/host/libraries/libbladeRF/doc/examples/000077500000000000000000000000001457144405000224735ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF/doc/examples/CMakeLists.txt000066400000000000000000000023241457144405000252340ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.5) project(libbladeRF_doc_examples C) set(INCLUDES ${libbladeRF_SOURCE_DIR}/include ${BLADERF_HOST_COMMON_SOURCE_DIR}/include ) set(LIBS libbladerf_shared) set(SRC ${BLADERF_HOST_COMMON_SOURCE_DIR}/conversions.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/log.c ) if(MSVC) set(INCLUDES ${INCLUDES} ${MSVC_C99_INCLUDES}) endif() include_directories(${INCLUDES}) add_executable(libbladeRF_example_sync_rxtx sync_rxtx.c example_common.c) target_link_libraries(libbladeRF_example_sync_rxtx ${LIBS}) add_executable(libbladeRF_example_sync_rx_meta sync_rx_meta.c example_common.c ${SRC}) target_link_libraries(libbladeRF_example_sync_rx_meta ${LIBS}) add_executable(libbladeRF_example_sync_tx_meta sync_tx_meta.c example_common.c) target_link_libraries(libbladeRF_example_sync_tx_meta ${LIBS}) add_executable(libbladeRF_example_open_via_serial open_via_serial.c example_common.c) target_link_libraries(libbladeRF_example_open_via_serial ${LIBS}) add_executable(libbladeRF_example_boilerplate boilerplate.c) target_link_libraries(libbladeRF_example_boilerplate ${LIBS}) add_executable(libbladeRF_example_quick_tune quick_tune.c) target_link_libraries(libbladeRF_example_quick_tune ${LIBS}) bladeRF-2024.05/host/libraries/libbladeRF/doc/examples/README000066400000000000000000000006061457144405000233550ustar00rootroot00000000000000This directory contains example snippets to be included in Doxygen-generated documents. These are built when the host system has Doxygen installed and the following CMake variables are set: BUILD_DOCUMENTATION=ON BUILD_LIBBLADERF_DOCUMENATION=ON BUILD_LIBBLADERF_DOC_EXAMPLES=ON For more involved programs, see the libbladeRF tests/ directory and the bladeRF-cli source code. bladeRF-2024.05/host/libraries/libbladeRF/doc/examples/boilerplate.c000066400000000000000000000071431457144405000251460ustar00rootroot00000000000000/** [Full listing] */ /* Save to a file, e.g. boilerplate.c, and then compile: * $ gcc boilerplate.c -o libbladeRF_example_boilerplate -lbladeRF */ #include #include #include #include /** [struct channel_config] */ /* The RX and TX channels are configured independently for these parameters */ struct channel_config { bladerf_channel channel; unsigned int frequency; unsigned int bandwidth; unsigned int samplerate; int gain; }; /** [struct channel_config] */ /** [configure_channel] */ int configure_channel(struct bladerf *dev, struct channel_config *c) { int status; status = bladerf_set_frequency(dev, c->channel, c->frequency); if (status != 0) { fprintf(stderr, "Failed to set frequency = %u: %s\n", c->frequency, bladerf_strerror(status)); return status; } status = bladerf_set_sample_rate(dev, c->channel, c->samplerate, NULL); if (status != 0) { fprintf(stderr, "Failed to set samplerate = %u: %s\n", c->samplerate, bladerf_strerror(status)); return status; } status = bladerf_set_bandwidth(dev, c->channel, c->bandwidth, NULL); if (status != 0) { fprintf(stderr, "Failed to set bandwidth = %u: %s\n", c->bandwidth, bladerf_strerror(status)); return status; } status = bladerf_set_gain(dev, c->channel, c->gain); if (status != 0) { fprintf(stderr, "Failed to set gain: %s\n", bladerf_strerror(status)); return status; } return status; } /** [configure_channel] */ /* Usage: * libbladeRF_example_boilerplate [serial #] * * If a serial number is supplied, the program will attempt to open the * device with the provided serial number. * * Otherwise, the first available device will be used. */ int main(int argc, char *argv[]) { int status; struct channel_config config; /** [Opening a device] */ struct bladerf *dev = NULL; struct bladerf_devinfo dev_info; /* Initialize the information used to identify the desired device * to all wildcard (i.e., "any device") values */ bladerf_init_devinfo(&dev_info); /* Request a device with the provided serial number. * Invalid strings should simply fail to match a device. */ if (argc >= 2) { strncpy(dev_info.serial, argv[1], sizeof(dev_info.serial) - 1); } status = bladerf_open_with_devinfo(&dev, &dev_info); if (status != 0) { fprintf(stderr, "Unable to open device: %s\n", bladerf_strerror(status)); return 1; } /** [Opening a device] */ /* Set up RX channel parameters */ config.channel = BLADERF_CHANNEL_RX(0); config.frequency = 910000000; config.bandwidth = 2000000; config.samplerate = 300000; config.gain = 39; status = configure_channel(dev, &config); if (status != 0) { fprintf(stderr, "Failed to configure RX channel. Exiting.\n"); goto out; } /* Set up TX channel parameters */ config.channel = BLADERF_CHANNEL_TX(0); config.frequency = 918000000; config.bandwidth = 1500000; config.samplerate = 250000; config.gain = -14; status = configure_channel(dev, &config); if (status != 0) { fprintf(stderr, "Failed to configure TX channel. Exiting.\n"); goto out; } /* Application code goes here. * * Don't forget to call bladerf_enable_module() before attempting to * transmit or receive samples! */ printf("Hello world\n"); out: bladerf_close(dev); return status; } /** [Full listing] */ bladeRF-2024.05/host/libraries/libbladeRF/doc/examples/example_bladeRF.conf000066400000000000000000000011001457144405000263440ustar00rootroot00000000000000# [basic_usage] # Load the hostedx40.rbf FPGA image, set the trim DAC, and # configure the frequency fpga /home/user/hostedx40.rbf trimdac 592 frequency 2.4G # [basic_usage] ### # [match_fpga] trimdac 592 frequency 2.4G [x40] fpga /home/user/hostedx40.rbf [x115] fpga /home/user/hostedx115.rbf # [match_fpga] ### # [match_devstr] trimdac 592 frequency 2.4G [x40] fpga /home/user/hostedx40.rbf [x115] fpga /home/user/hostedx115.rbf [*:serial=febe585efb9e3f36c87c3e4db1b2adee] trimdac 440 [*:serial=07dea50449172fcd63e711d7e5fe9bb4] trimdac 498 # [match_devstr] bladeRF-2024.05/host/libraries/libbladeRF/doc/examples/example_common.c000066400000000000000000000103571457144405000256500ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include #include "example_common.h" struct bladerf *example_init(const char *devstr) { int status; struct bladerf *dev; printf("Opening and initializing device...\n\n"); status = bladerf_open(&dev, devstr); if (status != 0) { fprintf(stderr, "Failed to open device: %s\n", bladerf_strerror(status)); goto out; } status = bladerf_set_frequency(dev, BLADERF_CHANNEL_RX(0), EXAMPLE_RX_FREQ); if (status != 0) { fprintf(stderr, "Failed to set RX frequency: %s\n", bladerf_strerror(status)); goto out; } else { printf("RX frequency: %u Hz\n", EXAMPLE_RX_FREQ); } status = bladerf_set_sample_rate(dev, BLADERF_CHANNEL_RX(0), EXAMPLE_SAMPLERATE, NULL); if (status != 0) { fprintf(stderr, "Failed to set RX sample rate: %s\n", bladerf_strerror(status)); goto out; } else { printf("RX samplerate: %u sps\n", EXAMPLE_SAMPLERATE); } status = bladerf_set_bandwidth(dev, BLADERF_CHANNEL_RX(0), EXAMPLE_BANDWIDTH, NULL); if (status != 0) { fprintf(stderr, "Failed to set RX bandwidth: %s\n", bladerf_strerror(status)); goto out; } else { printf("RX bandwidth: %u Hz\n", EXAMPLE_BANDWIDTH); } status = bladerf_set_gain(dev, BLADERF_CHANNEL_RX(0), EXAMPLE_RX_GAIN); if (status != 0) { fprintf(stderr, "Failed to set RX gain: %s\n", bladerf_strerror(status)); goto out; } else { printf("RX gain: %d\n", EXAMPLE_RX_GAIN); } status = bladerf_set_frequency(dev, BLADERF_CHANNEL_TX(0), EXAMPLE_TX_FREQ); if (status != 0) { fprintf(stderr, "Faield to set TX frequency: %s\n", bladerf_strerror(status)); goto out; } else { printf("TX frequency: %u Hz\n", EXAMPLE_TX_FREQ); } status = bladerf_set_sample_rate(dev, BLADERF_CHANNEL_TX(0), EXAMPLE_SAMPLERATE, NULL); if (status != 0) { fprintf(stderr, "Failed to set TX sample rate: %s\n", bladerf_strerror(status)); goto out; } else { printf("TX samplerate: %u sps\n", EXAMPLE_SAMPLERATE); } status = bladerf_set_bandwidth(dev, BLADERF_CHANNEL_TX(0), EXAMPLE_BANDWIDTH, NULL); if (status != 0) { fprintf(stderr, "Failed to set TX bandwidth: %s\n", bladerf_strerror(status)); goto out; } else { printf("TX bandwidth: %u\n", EXAMPLE_BANDWIDTH); } status = bladerf_set_gain(dev, BLADERF_CHANNEL_TX(0), EXAMPLE_TX_GAIN); if (status != 0) { fprintf(stderr, "Failed to set TX gain: %s\n", bladerf_strerror(status)); goto out; } else { printf("TX gain: %d\n", EXAMPLE_TX_GAIN); } out: if (status != 0) { bladerf_close(dev); return NULL; } else { return dev; } } bladeRF-2024.05/host/libraries/libbladeRF/doc/examples/example_common.h000066400000000000000000000036621457144405000256560ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef EXAMPLE_COMMON_H__ #define EXAMPLE_COMMON_H__ /* Some portability macros */ #include "host_config.h" /* assert() that is kept enabled in non-debug builds */ #include "rel_assert.h" /* Settings used in examples */ #define EXAMPLE_SAMPLERATE 2000000 #define EXAMPLE_BANDWIDTH BLADERF_BANDWIDTH_MIN #define EXAMPLE_RX_FREQ 910000000 #define EXAMPLE_RX_GAIN 26 #define EXAMPLE_TX_FREQ 920000000 #define EXAMPLE_TX_GAIN (-20) /** * Device initialization function for example snippets in this directory * * @param devstr Optional device specifier string. Use NULL to open * any available device. * * @return A bladeRF device handle on success, NULL on failure. */ struct bladerf *example_init(const char *devstr); #endif bladeRF-2024.05/host/libraries/libbladeRF/doc/examples/open_via_serial.c000066400000000000000000000105251457144405000260010ustar00rootroot00000000000000/* * Example of how to open a device with the specified serial number * * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include #include #include #include "example_common.h" /** [example_snippet] */ struct bladerf *open_bladerf_from_serial(const char *serial) { int status; struct bladerf *dev; struct bladerf_devinfo info; /* Initialize all fields to "don't care" wildcard values. * * Immediately passing this to bladerf_open_with_devinfo() would cause * libbladeRF to open any device on any available backend. */ bladerf_init_devinfo(&info); /* Specify the desired device's serial number, while leaving all other * fields in the info structure wildcard values */ strncpy(info.serial, serial, BLADERF_SERIAL_LENGTH - 1); info.serial[BLADERF_SERIAL_LENGTH - 1] = '\0'; status = bladerf_open_with_devinfo(&dev, &info); if (status == BLADERF_ERR_NODEV) { printf("No devices available with serial=%s\n", serial); return NULL; } else if (status != 0) { fprintf(stderr, "Failed to open device with serial=%s (%s)\n", serial, bladerf_strerror(status)); return NULL; } else { return dev; } } /** [example_snippet] */ static int print_device_state(struct bladerf *dev) { int status; uint64_t frequency; unsigned int bandwidth; struct bladerf_rational_rate rate; const bladerf_channel rx_ch = BLADERF_CHANNEL_RX(0); const bladerf_channel tx_ch = BLADERF_CHANNEL_TX(0); status = bladerf_get_frequency(dev, rx_ch, &frequency); if (status != 0) { return status; } printf(" RX frequency: %" PRIu64 " Hz\n", frequency); status = bladerf_get_frequency(dev, tx_ch, &frequency); if (status != 0) { return status; } printf(" TX frequency: %" PRIu64 " Hz\n", frequency); status = bladerf_get_bandwidth(dev, rx_ch, &bandwidth); if (status != 0) { return status; } printf(" RX bandwidth: %u Hz\n", bandwidth); status = bladerf_get_bandwidth(dev, tx_ch, &bandwidth); if (status != 0) { return status; } printf(" TX bandwidth: %u Hz\n", bandwidth); status = bladerf_get_rational_sample_rate(dev, rx_ch, &rate); if (status != 0) { return status; } printf(" RX sample rate: %" PRIu64 " %" PRIu64 "/%" PRIu64 " sps\n", rate.integer, rate.num, rate.den); status = bladerf_get_rational_sample_rate(dev, tx_ch, &rate); if (status != 0) { return status; } printf(" TX sample rate: %" PRIu64 " %" PRIu64 "/%" PRIu64 " sps\n", rate.integer, rate.num, rate.den); return 0; } int main(int argc, char *argv[]) { int status = 0; struct bladerf *dev; if (argc != 2) { fprintf(stderr, "Usage: %s \n", argv[0]); return 1; } dev = open_bladerf_from_serial(argv[1]); if (dev) { printf("Opened device successfully!\n"); status = print_device_state(dev); } if (status != 0) { fprintf(stderr, "Error: %s\n", bladerf_strerror(status)); } if (dev) { bladerf_close(dev); } return status; } bladeRF-2024.05/host/libraries/libbladeRF/doc/examples/quick_tune.c000066400000000000000000000057131457144405000250140ustar00rootroot00000000000000#include #include #include #include #define NUM_FREQUENCIES 6 #define ITERATIONS 10000 int example(struct bladerf *dev, bladerf_channel ch) { /** [example] */ int status; unsigned int i, j; // clang-format off const unsigned int frequencies[NUM_FREQUENCIES] = { 902000000, 903000000, 904000000, 925000000, 926000000, 927000000, }; // clang-format on struct bladerf_quick_tune quick_tunes[NUM_FREQUENCIES]; /* Get our quick tune parameters for each frequency we'll be using */ for (i = 0; i < NUM_FREQUENCIES; i++) { status = bladerf_set_frequency(dev, ch, frequencies[i]); if (status != 0) { fprintf(stderr, "Failed to set frequency to %u Hz: %s\n", frequencies[i], bladerf_strerror(status)); return status; } status = bladerf_get_quick_tune(dev, ch, &quick_tunes[i]); if (status != 0) { fprintf(stderr, "Failed to get quick tune for %u Hz: %s\n", frequencies[i], bladerf_strerror(status)); return status; } } for (i = j = 0; i < ITERATIONS; i++) { /* Tune to the specified frequency immediately via BLADERF_RETUNE_NOW. * * Alternatively, this re-tune could be scheduled by providing a * timestamp counter value */ status = bladerf_schedule_retune(dev, ch, BLADERF_RETUNE_NOW, 0, &quick_tunes[j]); if (status != 0) { fprintf(stderr, "Failed to apply quick tune: %s\n", bladerf_strerror(status)); return status; } j = (j + 1) % NUM_FREQUENCIES; /* ... Handle signals at current frequency ... */ } /** [example] */ return status; } int main(int argc, char *argv[]) { int status = 0; struct bladerf *dev = NULL; struct bladerf_devinfo dev_info; /* Initialize the information used to identify the desired device * to all wildcard (i.e., "any device") values */ bladerf_init_devinfo(&dev_info); /* Request a device with the provided serial number. * Invalid strings should simply fail to match a device. */ if (argc >= 2) { strncpy(dev_info.serial, argv[1], sizeof(dev_info.serial) - 1); } status = bladerf_open_with_devinfo(&dev, &dev_info); if (status != 0) { fprintf(stderr, "Unable to open device: %s\n", bladerf_strerror(status)); return 1; } /* A quick check that this works is to watch LO leakage on a VSA */ status = bladerf_enable_module(dev, BLADERF_TX, true); if (status != 0) { fprintf(stderr, "Failed to enable TX: %s\n", bladerf_strerror(status)); return status; } status = example(dev, BLADERF_CHANNEL_TX(0)); bladerf_enable_module(dev, BLADERF_TX, false); bladerf_close(dev); return status; } bladeRF-2024.05/host/libraries/libbladeRF/doc/examples/sync_rx_meta.c000066400000000000000000000313441457144405000253370ustar00rootroot00000000000000/* * Example of RX synchronous interface usage with metadata * * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include #include #include #include #include #include #include "example_common.h" #include "conversions.h" #include "log.h" /* Initialize sync interface for metadata and allocate our "working" * buffer that we'd use to process our RX'd samples. * * Return sample buffer on success, or NULL on failure. */ int16_t *init(struct bladerf *dev, int16_t num_samples, bladerf_format format, bladerf_channel_layout channel_layout, unsigned int buffer_size) { int status = -1; /* "User" buffer that we read samples into and do work on, and its * associated size, in units of samples. Recall that for the * SC16Q11 format (native to the ADCs), one sample = two int16_t values. * * When using the bladerf_sync_* functions, the buffer size isn't * restricted to multiples of any particular size. * * The value for `num_samples` has no major restrictions here, while the * `buffer_size` below must be a multiple of 1024. */ int16_t *samples; /* These items configure the underlying asynch stream used by the the sync * interface. The "buffer" here refers to those used internally by worker * threads, not the `samples` buffer above. */ const unsigned int num_buffers = 16; const unsigned int num_transfers = 8; const unsigned int timeout_ms = 1000; samples = malloc(num_samples * 2 * sizeof(int16_t)); if (samples == NULL) { perror("malloc"); goto error; } /** [sync_config] */ /* Configure the device's RX for use with the sync interface. * SC16 Q11 samples *with* metadata are used. */ status = bladerf_sync_config(dev, channel_layout, format, num_buffers, buffer_size, num_transfers, timeout_ms); if (status != 0) { fprintf(stderr, "Failed to configure RX sync interface: %s\n", bladerf_strerror(status)); goto error; } /** [sync_config] */ /* We must always enable the RX front end *after* calling * bladerf_sync_config(), and *before* attempting to RX samples via * bladerf_sync_rx(). */ status = bladerf_enable_module(dev, BLADERF_CHANNEL_RX(0), true); if (status != 0) { fprintf(stderr, "Failed to enable RX(0): %s\n", bladerf_strerror(status)); goto error; } if (channel_layout == BLADERF_RX_X2) { status = bladerf_enable_module(dev, BLADERF_CHANNEL_RX(1), true); if (status != 0) { fprintf(stderr, "Failed to enable RX(1): %s\n", bladerf_strerror(status)); goto error; } } status = 0; error: if (status != 0) { free(samples); samples = NULL; } return samples; } void deinit(struct bladerf *dev, int16_t *samples) { printf("\nDeinitalizing device.\n"); /* Disable RX, shutting down our underlying RX stream */ int status = bladerf_enable_module(dev, BLADERF_RX, false); if (status != 0) { fprintf(stderr, "Failed to disable RX: %s\n", bladerf_strerror(status)); } /* Deinitialize and free resources */ free(samples); bladerf_close(dev); } /** [rx_meta_now_example] */ int sync_rx_meta_now_example(struct bladerf *dev, int16_t *samples, unsigned int samples_len, unsigned int rx_count, unsigned int timeout_ms) { int status = 0; struct bladerf_metadata meta; unsigned int i; /* Perform a read immediately, and have the bladerf_sync_rx function * provide the timestamp of the read samples */ memset(&meta, 0, sizeof(meta)); meta.flags = BLADERF_META_FLAG_RX_NOW; /* Receive samples and do work on them */ for (i = 0; i < rx_count && status == 0; i++) { status = bladerf_sync_rx(dev, samples, samples_len, &meta, timeout_ms); if (status != 0) { fprintf(stderr, "RX \"now\" failed: %s\n\n", bladerf_strerror(status)); } else if (meta.status & BLADERF_META_STATUS_OVERRUN) { fprintf(stderr, "Overrun detected. %u valid samples were read.\n", meta.actual_count); } else { printf("RX'd %u samples at t=0x%016" PRIx64 "\n", meta.actual_count, meta.timestamp); fflush(stdout); /* ... Do work on samples here... * * status = process_samples(samples, samples_len); */ } } return status; } /** [rx_meta_now_example] */ /** [rx_meta_sched_example] */ int sync_rx_meta_sched_example(struct bladerf *dev, int16_t *samples, unsigned int samples_len, unsigned int rx_count, unsigned int samplerate, unsigned int timeout_ms) { int status; struct bladerf_metadata meta; unsigned int i; /* 150 ms timestamp increment */ const uint64_t ts_inc_150ms = ((uint64_t)samplerate) * 150 / 1000; /* 1 ms timestamp increment */ const uint64_t ts_inc_1ms = samplerate / 1000; memset(&meta, 0, sizeof(meta)); /* Perform scheduled RXs by having meta.timestamp set appropriately * and ensuring the BLADERF_META_FLAG_RX_NOW flag is cleared. */ meta.flags = 0; /* Retrieve the current timestamp */ status = bladerf_get_timestamp(dev, BLADERF_RX, &meta.timestamp); if (status != 0) { fprintf(stderr, "Failed to get current RX timestamp: %s\n", bladerf_strerror(status)); } else { printf("Current RX timestamp: 0x%016" PRIx64 "\n", meta.timestamp); } /* Schedule first RX to be 150 ms in the future */ meta.timestamp += ts_inc_150ms; /* Receive samples and do work on them */ for (i = 0; i < rx_count && status == 0; i++) { status = bladerf_sync_rx(dev, samples, samples_len, &meta, 2 * timeout_ms); if (status != 0) { fprintf(stderr, "Scheduled RX failed: %s\n\n", bladerf_strerror(status)); } else if (meta.status & BLADERF_META_STATUS_OVERRUN) { fprintf(stderr, "Overrun detected in scheduled RX. " "%u valid samples were read.\n\n", meta.actual_count); } else { printf("RX'd %u samples at t=0x%016" PRIx64 "\n", meta.actual_count, meta.timestamp); fflush(stdout); /* ... Process samples here ... */ /* Schedule the next RX to be 1 ms after the end of the samples we * just processed */ meta.timestamp += samples_len + ts_inc_1ms; } } return status; } /** [rx_meta_sched_example] */ static struct option const long_options[] = { { "device", required_argument, NULL, 'd' }, { "bitmode", required_argument, NULL, 'b' }, { "buflen", required_argument, NULL, 'l' }, { "mimo", no_argument, NULL, 'm' }, { "numsamples", required_argument, NULL, 'n' }, { "rxcount", required_argument, NULL, 'c' }, { "verbosity", required_argument, 0, 'v' }, { "help", no_argument, NULL, 'h' }, { NULL, 0, NULL, 0 }, }; static void usage(const char *argv0) { printf("Usage: %s [options]\n", argv0); printf(" -d, --device Specify device to open.\n"); printf(" -b, --bitmode Specify 16bit or 8bit mode\n"); printf(" <16bit|16> (default)\n"); printf(" <8bit|8>\n"); printf(" -l, --buflen Buffer Size\n"); printf(" -m, --mimo Enable MIMO\n"); printf(" -n, --numsamples Specify Number of samples\n"); printf(" -c, --rxcount Specify RX sync iterations\n"); printf(" -v, --verbosity Set test verbosity\n"); printf(" -h, --help Show this text.\n"); } int main(int argc, char *argv[]) { int status = -1; struct bladerf *dev = NULL; const char *devstr = NULL; int16_t *samples = NULL; bladerf_channel_layout channel_layout = BLADERF_RX_X1; bladerf_format fmt = BLADERF_FORMAT_SC16_Q11_META; unsigned int num_samples = 4096; unsigned int rx_count = 15; unsigned int buffer_size = 4096; const unsigned int timeout_ms = 2500; bladerf_log_level lvl = BLADERF_LOG_LEVEL_SILENT; bladerf_log_set_verbosity(lvl); bool ok; int opt = 0; int opt_ind = 0; while (opt != -1) { opt = getopt_long(argc, argv, "d:b:l:mn:c:v:h", long_options, &opt_ind); switch (opt) { case 'd': devstr = optarg; break; case 'b': if (strcmp(optarg, "16bit") == 0 || strcmp(optarg, "16") == 0) { fmt = BLADERF_FORMAT_SC16_Q11_META; } else if (strcmp(optarg, "8bit") == 0 || strcmp(optarg, "8") == 0) { fmt = BLADERF_FORMAT_SC8_Q7_META; } else { printf("Unknown bitmode: %s\n", optarg); return -1; } break; case 'l': buffer_size = str2int(optarg, 1, INT_MAX, &ok); if (!ok) { printf("Buffer size invalid: %s\n", optarg); return -1; } break; case 'm': channel_layout = BLADERF_RX_X2; break; case 'n': num_samples = str2int(optarg, 1, INT_MAX, &ok); if (!ok) { printf("Number of samples not valid: %s\n", optarg); return -1; } break; case 'c': rx_count = str2int(optarg, 1, INT_MAX, &ok); if (!ok) { printf("RX count not valid: %s\n", optarg); return -1; } break; case 'v': lvl = str2loglevel(optarg, &ok); if (!ok) { log_error("Invalid log level provided: %s\n", optarg); return -1; } else { bladerf_log_set_verbosity(lvl); } break; case 'h': usage(argv[0]); return 0; default: break; } } dev = example_init(devstr); printf("Format: "); if (fmt == BLADERF_FORMAT_SC16_Q11_META) printf("SC16_Q11_META\n"); else printf("SC8_Q7_META\n"); printf("RX Count: %i\n", rx_count); printf("Mimo: %s\n", (channel_layout == BLADERF_RX_X2) ? "Enabled" : "Disabled"); printf("Buffer Size: %i\n", buffer_size); if (dev) { samples = init(dev, num_samples, fmt, channel_layout, buffer_size); if (samples != NULL) { printf("\nRunning RX meta \"now\" example...\n"); status = sync_rx_meta_now_example(dev, samples, num_samples, rx_count, timeout_ms); if (status == 0) { printf("\nRunning RX meta \"scheduled\" example...\n"); status = sync_rx_meta_sched_example( dev, samples, num_samples, rx_count, EXAMPLE_SAMPLERATE, timeout_ms); } } deinit(dev, samples); } return status; } bladeRF-2024.05/host/libraries/libbladeRF/doc/examples/sync_rxtx.c000066400000000000000000000166251457144405000247120ustar00rootroot00000000000000/* * Example usage of synchronous interface for RX & TX, without metadata * * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include #include #include #include #include "example_common.h" /* Just retransmit the received samples */ bool do_work(int16_t *rx, unsigned int rx_len, bool *have_tx_data, int16_t *tx, unsigned int tx_len) { static unsigned int call_no = 0; assert(tx_len == rx_len); memcpy(tx, rx, rx_len * 2 * sizeof(int16_t)); *have_tx_data = true; return (++call_no >= 5000); } /** [example_snippet] */ /** [sync_init] */ static int init_sync(struct bladerf *dev) { int status; /* These items configure the underlying asynch stream used by the sync * interface. The "buffer" here refers to those used internally by worker * threads, not the user's sample buffers. * * It is important to remember that TX buffers will not be submitted to * the hardware until `buffer_size` samples are provided via the * bladerf_sync_tx call. Similarly, samples will not be available to * RX via bladerf_sync_rx() until a block of `buffer_size` samples has been * received. */ const unsigned int num_buffers = 16; const unsigned int buffer_size = 8192; /* Must be a multiple of 1024 */ const unsigned int num_transfers = 8; const unsigned int timeout_ms = 3500; /* Configure both the device's x1 RX and TX channels for use with the * synchronous * interface. SC16 Q11 samples *without* metadata are used. */ status = bladerf_sync_config(dev, BLADERF_RX_X1, BLADERF_FORMAT_SC16_Q11, num_buffers, buffer_size, num_transfers, timeout_ms); if (status != 0) { fprintf(stderr, "Failed to configure RX sync interface: %s\n", bladerf_strerror(status)); return status; } status = bladerf_sync_config(dev, BLADERF_TX_X1, BLADERF_FORMAT_SC16_Q11, num_buffers, buffer_size, num_transfers, timeout_ms); if (status != 0) { fprintf(stderr, "Failed to configure TX sync interface: %s\n", bladerf_strerror(status)); } return status; } /** [sync_init] */ int sync_rx_example(struct bladerf *dev) { int status, ret; bool done = false; bool have_tx_data = false; /** [user_buffers] */ /* "User" samples buffers and their associated sizes, in units of samples. * Recall that one sample = two int16_t values. */ int16_t *rx_samples = NULL; int16_t *tx_samples = NULL; const unsigned int samples_len = 10000; /* May be any (reasonable) size */ /* Allocate a buffer to store received samples in */ rx_samples = malloc(samples_len * 2 * 1 * sizeof(int16_t)); if (rx_samples == NULL) { perror("malloc"); return BLADERF_ERR_MEM; } /* Allocate a buffer to prepare transmit data in */ tx_samples = malloc(samples_len * 2 * 1 * sizeof(int16_t)); if (tx_samples == NULL) { perror("malloc"); free(rx_samples); return BLADERF_ERR_MEM; } /** [user_buffers] */ /* Initialize synch interface on RX and TX */ status = init_sync(dev); if (status != 0) { goto out; } /** [enable_modules] */ status = bladerf_enable_module(dev, BLADERF_RX, true); if (status != 0) { fprintf(stderr, "Failed to enable RX: %s\n", bladerf_strerror(status)); goto out; } status = bladerf_enable_module(dev, BLADERF_TX, true); if (status != 0) { fprintf(stderr, "Failed to enable TX: %s\n", bladerf_strerror(status)); goto out; } /** [enable_modules] */ /** [rxtx_loop] */ while (status == 0 && !done) { /* Receive samples */ status = bladerf_sync_rx(dev, rx_samples, samples_len, NULL, 5000); if (status == 0) { /* Process these samples, and potentially produce a response * to transmit */ done = do_work(rx_samples, samples_len, &have_tx_data, tx_samples, samples_len); if (!done && have_tx_data) { /* Transmit a response */ status = bladerf_sync_tx(dev, tx_samples, samples_len, NULL, 5000); if (status != 0) { fprintf(stderr, "Failed to TX samples: %s\n", bladerf_strerror(status)); } } } else { fprintf(stderr, "Failed to RX samples: %s\n", bladerf_strerror(status)); } } if (status == 0) { /* Wait a few seconds for any remaining TX samples to finish * reaching the RF front-end */ usleep(2000000); } /** [rxtx_loop] */ out: ret = status; /** [disable_modules] */ /* Disable RX, shutting down our underlying RX stream */ status = bladerf_enable_module(dev, BLADERF_RX, false); if (status != 0) { fprintf(stderr, "Failed to disable RX: %s\n", bladerf_strerror(status)); } /* Disable TX, shutting down our underlying TX stream */ status = bladerf_enable_module(dev, BLADERF_TX, false); if (status != 0) { fprintf(stderr, "Failed to disable TX: %s\n", bladerf_strerror(status)); } /* Free up our resources */ free(rx_samples); free(tx_samples); /** [disable_modules] */ return ret; } /** [example_snippet] */ static void usage(const char *argv0) { printf("Usage: %s [device specifier]\n\n", argv0); } int main(int argc, char *argv[]) { int status = -1; struct bladerf *dev = NULL; const char *devstr = NULL; if (argc == 2) { if (!strcasecmp("-h", argv[1]) || !strcasecmp("--help", argv[1])) { usage(argv[0]); return 0; } else { devstr = argv[1]; } } else if (argc > 1) { usage(argv[0]); return -1; } dev = example_init(devstr); if (dev) { printf("Running...\n"); status = sync_rx_example(dev); printf("Closing the device...\n"); bladerf_close(dev); } return status; } bladeRF-2024.05/host/libraries/libbladeRF/doc/examples/sync_tx_meta.c000066400000000000000000000344131457144405000253410ustar00rootroot00000000000000/* * Example of TX synchronous interface usage with metadata * * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include #include #include #include #include #include "example_common.h" /* Just a dummy routine to produce a tone at the carrier frequency */ static void produce_samples(int16_t *samples, unsigned int num_samples) { static bool data_populated = false; unsigned int i; if (data_populated) { return; } for (i = 0; i < 2 * num_samples; i += 2) { samples[i] = 2000; samples[i + 1] = 2000; } } /** [wait_for_timestamp] */ int wait_for_timestamp(struct bladerf *dev, bladerf_direction dir, uint64_t timestamp, unsigned int timeout_ms) { int status; uint64_t curr_ts = 0; unsigned int slept_ms = 0; bool done; do { status = bladerf_get_timestamp(dev, dir, &curr_ts); done = (status != 0) || curr_ts >= timestamp; if (!done) { if (slept_ms > timeout_ms) { done = true; status = BLADERF_ERR_TIMEOUT; } else { usleep(10000); slept_ms += 10; } } } while (!done); return status; } /** [wait_for_timestamp] */ /** [tx_meta_init] */ int16_t *init(struct bladerf *dev, int16_t num_samples) { int status = -1; /* "User" buffer that we store our modulated samples in, and its * associated size, in units of samples. Recall that for the * SC16Q11 format (native to the ADCs), one sample = two int16_t values. * * When using the bladerf_sync_* functions, the buffer size isn't * restricted to multiples of any particular size. * * The value for `num_samples` has no major restrictions here, while the * `buffer_size` below must be a multiple of 1024. */ int16_t *samples; /* These items configure the underlying asynch stream used by the the sync * interface. The "buffer" here refers to those used internally by worker * threads, not the `samples` buffer above. */ const unsigned int num_buffers = 32; const unsigned int buffer_size = 2048; const unsigned int num_transfers = 16; const unsigned int timeout_ms = 1000; samples = malloc(num_samples * 2 * sizeof(int16_t)); if (samples == NULL) { perror("malloc"); goto error; } /** [sync_config] */ /* Configure the device's TX for use with the sync interface. * SC16 Q11 samples *with* metadata are used. */ status = bladerf_sync_config(dev, BLADERF_TX_X1, BLADERF_FORMAT_SC16_Q11_META, num_buffers, buffer_size, num_transfers, timeout_ms); if (status != 0) { fprintf(stderr, "Failed to configure TX sync interface: %s\n", bladerf_strerror(status)); goto error; } /** [sync_config] */ /* We must always enable the TX front end *after* calling * bladerf_sync_config(), and *before* attempting to TX samples via * bladerf_sync_tx(). */ status = bladerf_enable_module(dev, BLADERF_TX, true); if (status != 0) { fprintf(stderr, "Failed to enable TX: %s\n", bladerf_strerror(status)); goto error; } status = 0; error: if (status != 0) { free(samples); samples = NULL; } return samples; } /** [tx_meta_deinit] */ void deinit(struct bladerf *dev, int16_t *samples) { printf("\nDeinitalizing device.\n"); /* Disable TX, shutting down our underlying TX stream */ int status = bladerf_enable_module(dev, BLADERF_TX, false); if (status != 0) { fprintf(stderr, "Failed to disable TX: %s\n", bladerf_strerror(status)); } /* Deinitialize and free resources */ free(samples); bladerf_close(dev); } /** [tx_meta_deinit] */ /** [tx_meta_now] */ int sync_tx_meta_now_example(struct bladerf *dev, int16_t *samples, unsigned int num_samples, unsigned int tx_count, unsigned int timeout_ms) { int status = 0; struct bladerf_metadata meta; unsigned int i; memset(&meta, 0, sizeof(meta)); /* Send entire burst worth of samples in one function call */ meta.flags = BLADERF_META_FLAG_TX_BURST_START | BLADERF_META_FLAG_TX_NOW | BLADERF_META_FLAG_TX_BURST_END; for (i = 0; i < tx_count && status == 0; i++) { /* Fetch or produce IQ samples...*/ produce_samples(samples, num_samples); status = bladerf_sync_tx(dev, samples, num_samples, &meta, timeout_ms); if (status != 0) { fprintf(stderr, "TX failed: %s\n", bladerf_strerror(status)); } else { uint64_t curr_ts; status = bladerf_get_timestamp(dev, BLADERF_TX, &curr_ts); if (status != 0) { fprintf(stderr, "Failed to get current TX timestamp: %s\n", bladerf_strerror(status)); } else { printf("TX'd at approximately t=%016" PRIu64 "\n", curr_ts); } /* Delay next transmission by approximately 5 ms * * This is a very imprecise, "quick and dirty" means to do so in * cases where no particular intra-burst time is required. */ usleep(5000); } } /* Wait for samples to be TX'd before completing. */ if (status == 0) { status = bladerf_get_timestamp(dev, BLADERF_TX, &meta.timestamp); if (status != 0) { fprintf(stderr, "Failed to get current TX timestamp: %s\n", bladerf_strerror(status)); return status; } else { status = wait_for_timestamp( dev, BLADERF_TX, meta.timestamp + 2 * num_samples, timeout_ms); if (status != 0) { fprintf(stderr, "Failed to wait for timestamp.\n"); } } } return status; } /** [tx_meta_now] */ /** [tx_meta_sched] */ int sync_tx_meta_sched_example(struct bladerf *dev, int16_t *samples, unsigned int num_samples, unsigned int tx_count, unsigned int samplerate, unsigned int timeout_ms) { int status = 0; unsigned int i; struct bladerf_metadata meta; /* 5 ms timestamp increment */ const uint64_t ts_inc_5ms = ((uint64_t)samplerate) * 5 / 1000; /* 150 ms timestamp increment */ const uint64_t ts_inc_150ms = ((uint64_t)samplerate) * 150 / 1000; memset(&meta, 0, sizeof(meta)); /* Send entire burst worth of samples in one function call */ meta.flags = BLADERF_META_FLAG_TX_BURST_START | BLADERF_META_FLAG_TX_BURST_END; /* Retrieve the current timestamp so we can schedule our transmission * in the future. */ status = bladerf_get_timestamp(dev, BLADERF_TX, &meta.timestamp); if (status != 0) { fprintf(stderr, "Failed to get current TX timestamp: %s\n", bladerf_strerror(status)); return status; } else { printf("Current TX timestamp: %016" PRIu64 "\n", meta.timestamp); } /* Set initial timestamp ~150 ms in the future */ meta.timestamp += ts_inc_150ms; for (i = 0; i < tx_count && status == 0; i++) { /* Get sample to transmit... */ produce_samples(samples, num_samples); status = bladerf_sync_tx(dev, samples, num_samples, &meta, timeout_ms); if (status != 0) { fprintf(stderr, "TX failed: %s\n", bladerf_strerror(status)); return status; } else { printf("TX'd @ t=%016" PRIu64 "\n", meta.timestamp); } /* Schedule next burst 5 ms into the future */ meta.timestamp += ts_inc_5ms; } /* Wait for samples to finish being transmitted. */ if (status == 0) { meta.timestamp += 2 * num_samples; status = wait_for_timestamp(dev, BLADERF_TX, meta.timestamp, timeout_ms); if (status != 0) { fprintf(stderr, "Failed to wait for timestamp.\n"); } } return status; } /** [tx_meta_sched] */ static void usage(const char *argv0) { printf("Usage: %s [device specifier]\n\n", argv0); } /** [tx_meta_update] */ int sync_tx_meta_update_example(struct bladerf *dev, int16_t *samples, unsigned int num_samples, unsigned int tx_count, unsigned int samplerate, unsigned int timeout_ms) { int status = 0; unsigned int i; struct bladerf_metadata meta; int16_t zero_sample[] = { 0, 0 }; /* A 0+0j sample */ /* 5 ms timestamp increment */ const uint64_t ts_inc_5ms = ((uint64_t)samplerate) * 5 / 1000; /* 1.25 ms timestmap increment */ const uint64_t ts_inc_1_25ms = ((uint64_t)samplerate) * 125 / 100000; memset(&meta, 0, sizeof(meta)); /* The first call to bladerf_sync_tx() will start our long "burst" at * a specific timestamp. * * In successive calls, we'll break this long "burst" up into shorter bursts * by using the BLADERF_META_FLAG_TX_UPDATE_TIMESTAMP flag with new * timestamps. libbladeRF will zero-pad discontinuities and/or schedule * timestamps for us, as needed. */ meta.flags = BLADERF_META_FLAG_TX_BURST_START; /* Retrieve the current timestamp so we can schedule our transmission * in the future. */ status = bladerf_get_timestamp(dev, BLADERF_TX, &meta.timestamp); if (status != 0) { fprintf(stderr, "Failed to get current TX timestamp: %s\n", bladerf_strerror(status)); return status; } else { printf("Current TX timestamp: %016" PRIu64 "\n", meta.timestamp); } /* Start 5 ms in the future */ meta.timestamp += ts_inc_5ms; for (i = 0; i < tx_count && status == 0; i++) { /* Get sample to transmit... */ produce_samples(samples, num_samples); status = bladerf_sync_tx(dev, samples, num_samples, &meta, timeout_ms); if (status != 0) { fprintf(stderr, "TX failed: %s\n", bladerf_strerror(status)); return status; } else { printf("TX'd @ t=%016" PRIu64 "\n", meta.timestamp); } /* Instruct bladerf_sync_tx() to position samples within this burst at * the specified timestamp. 0+0j will be transmitted up until that * point. */ meta.flags = BLADERF_META_FLAG_TX_UPDATE_TIMESTAMP; /* Schedule samples to be transmitted 1.25 ms after the completion of * the previous burst */ meta.timestamp += num_samples + ts_inc_1_25ms; } /* For simplicity, we use a single zero sample to end the burst and request * that all pending samples be flushed to the hardware. */ meta.flags = BLADERF_META_FLAG_TX_BURST_END; status = bladerf_sync_tx(dev, zero_sample, 1, &meta, timeout_ms); meta.timestamp++; /* Wait for samples to finish being transmitted. */ if (status == 0) { meta.timestamp += 2 * num_samples; status = wait_for_timestamp(dev, BLADERF_TX, meta.timestamp, timeout_ms); if (status != 0) { fprintf(stderr, "Failed to wait for timestamp.\n"); } } else { fprintf(stderr, "Failed to complete burst: %s\n", bladerf_strerror(status)); } return status; } /** [tx_meta_update] */ int main(int argc, char *argv[]) { int status = 0; struct bladerf *dev = NULL; const char *devstr = NULL; int16_t *samples = NULL; const unsigned int num_samples = 4096; const unsigned int tx_count = 15; const unsigned int timeout_ms = 2500; if (argc == 2) { if (!strcasecmp("-h", argv[1]) || !strcasecmp("--help", argv[1])) { usage(argv[0]); return 0; } else { devstr = argv[1]; } } else if (argc > 1) { usage(argv[0]); return -1; } dev = example_init(devstr); if (dev) { samples = init(dev, num_samples); if (samples != NULL) { printf("Running TX meta \"now\" example...\n"); status = sync_tx_meta_now_example(dev, samples, num_samples, tx_count, timeout_ms); if (status == 0) { printf("\nRunning TX meta \"scheduled\" example...\n"); status = sync_tx_meta_sched_example( dev, samples, num_samples, tx_count, EXAMPLE_SAMPLERATE, timeout_ms); } if (status == 0) { printf( "\nRunning TX meta \"scheduled with update\" example...\n"); status = sync_tx_meta_update_example( dev, samples, num_samples, tx_count, EXAMPLE_SAMPLERATE, timeout_ms); } } deinit(dev, samples); } return status; } bladeRF-2024.05/host/libraries/libbladeRF/doc/images/000077500000000000000000000000001457144405000221225ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF/doc/images/logo.png000066400000000000000000000145001457144405000235700ustar00rootroot00000000000000‰PNG  IHDRÈu ®5bKGDÿÿÿ ½§“ pHYs.#.#x¥?vàIDATxÚíyœ\U™þ¿ÏíÎ ’@v”]–tPpAQ™qEùɦ@º""²¨ˆŽÈÈtU‘ÅaqÔE6EÅÐUA–AÙ·HHºû>óÇ=ÅÜ\ª:t'éNÎóùô§«êÞ{î­Sç9ïrÞ÷=±Š@± "ÒÎcÃßúÀ’¶v°½¥¤ÉÀx`Œíí’jýÏ«z¿´Ç¡±zÃåÒ†¶×¶Þ·ØqIØÎfÔðZÒèÕ¡"AV_‰ñ¯Àž¶÷¦c¤×+Ïš ±JaÑ¡;¶5êhÛ{»“›‘¢(AšÄö¸HˆUI•úÀ·õ%jE†<lÿxRÒ£ÀC¶Ÿ’ô’¤^à/‘ «1¶ºm¯¿›#•ÔŽ] œ©JížØ{Ñ‹µ*ÛI:Áö‘AErþ÷ªÓË’þ \ü—*µ{û!Z›í1@»¤ÄöËIµÞ%HÄH$ǧ£l—r*“öðWà×ÀmªÔ.krý†ÀNÀI€qdîÝÉÀÛíÀ@w$HĈAÏa;­ÑÞÞ~pDA;hHùÀ¹’®(ªPigÇÀÞÀžÀ¦dnß ùv öÉ•‘ #ÉÖX¸x{Q•R6²¯“t¨í¹ªÔzr×½×öY’Ö „Xs@º¹Ôôˆ‘¢Rm üÔöVMܶsmï“Të·5ø °yN ˜Äuˆ"9¶®µý¦9‚­Ñ'éwJ’}ÔÕýb ÒÀ4I—ØÞ<·Ø9^^±½PÒ"Û½’Ò ®E‚D kɱ+™jÝ‚—j¡¤3T©”;·8VÒA@­¤Æ<ààïÀ¶ojÀƒªÔ^]Ýú8däJŽi¶ÿ Xw±ÏíW%í«Jí¹s¿ l‘3¶åŒ) ñUÎî—ôà+¯¼òÀøËïOW÷~ޙ䨏XÒ†y»xø°*µ:€gL[ÏizíµÐ¤ü øwàOIµþpá>ëïµ½+0 XKÒX ± ƒ ö€¾éS7J’ä*àm cI²ýðŤZ¿Ä3¦I]Ýío|\ÒÑÀÃQÎÖ7Î5ÙXˆ´íg€™À’jý¯‘ + }Ó§¶%IrpbaÐ?ìŸTë¿ 3ÿÀí¶×o"5zmW’jýÈ eä4'iWàRÛo|mpVß"ÜÈ-HJzø p Ò+ Ž$$qØ ÙLz¯í"9Ç7È‘vvlÜÈáÜy÷ÙþÈkä(—&`Üfû–9$½f§,Ë„›#åÚ¶ Ô±g¸\š%HÄrAïá;kkk{X# øTR¯JíÌ0àw..߯ìoÛ.‘ô-Uj ç`{?Iû X<Øó$½`{Ù:ÈÚ’&£€›\×xyƒ¤«U©}?$b¨ óßï,¨2&ÕúçÂñ ÈÖCòñW rœ­$9Q]Ý zßYI’œŒîþö}aPß<,^²ÔvŒ![y_x‡¤½‚™ÓŠ( ÈVüg$Õú«‘ Ca˜—%}Ïv{cä»cë¤ZŸëriàÃeØ=À¢¤ZïÀ3Ž’4*<ãGmWhA–;‚ÝôHˆÁæJ…¼›*µÙap\V&8Cmm_×Ì;{].müÜöŽM²SIÏ'¨R»h‰½¿¤oÛÞ(¨ƒÅûþxgR­?ôˆe5Ì¿f»Tøì{Àœ Zm'é²â —tíoiæ½igÇ›mÏv,’Èö ’fÒÖ¶þP’ ©Ö¯T¥¶)pzxÅgÜDÒ.—Þ ±,vÇú’ö.¦ÁÚ¾¸‘k»«É¥ Mo›5g®gLÛ ø%°¹µ‹0@ïP¥v¤.œ½ÜVÍ“jý߀OØþu.Ì¥ñ´í›].•"A"–†"+Á³GŽ}’®NªõzPaN" oÏÛ¤iúauuÏM;;Öršvoʹm¶Ç9À'’jý—+d Uë¿tRpäm õ€Jßô©D‚D Œ ™úó'ÛsÂëÌ$à#vSôXÙ.·Íšó@ïá;'ÀéÀžõKÀ™¶¿ªJm…ÈIµþ¤íÓ¯’4T-lw$Irfßô©ã#A"2˜œTëw'ÕzðYààGêêÎtù¾¾ÓÉœrãLwKº ­­í}Àg›Ø3‘¾‘Të VÒ÷Z¤$9CÒÉ{à@I{ +0Åá´³CIµîÂg[JºØ$/>€’jý—K“ÉÒa7-4w Ò~êê~a¥KÈÓÖtš^!é£ɹØ*©Öý£yG€$iòñz¶ç祃¤kþÞ~Æö¦…5‘ùiš×6kÎ -lžwÛ¨R»¥0˜×Áþ¤íç’jýê!™™»ºç§_Þn{RcyGÒÀ—€c¢‰Œ¿ð/ÀÑÀ¶?Të7¸\z£íG빜CU©ý …”úd0ÚמNHªõYk9Movú€®F,×IÈ?o„Æäjï˜Të+½6W´AF(BU’ïy¹>,éáÐIùE9e¸·9\.mœ,iý¤8 8>§é `×p¬MÒçÒÎŽ†PBþøI˜¬+”}NT±"K’>²ôØüJô!~}0ÔÛúiæ­ÀÖƒyKàÝÀ=d9!‹ú’æ åä*é²­|4ðÛ\.]Ùi¾Q‚¬ZýiÀ¨\¼@% ¾fç¿Ùö-b¥Î ¡óæÚjØ3r¹ô!SíE¶OÈÝÛ£s£Š1”øW ­0ø® ’¦N$ (t‹™ý+!+ðò¼ÊÚý‚gLÛdˆÔ¬TÒ-ùü•06÷p¹46$b(¤Ç›€µ ü÷’îiqþÀ!­£‚-pHÚÙ±7ðà‰Â)“œ¦_¯ðíë ÷Cȇ‰´¿»¤õ ÿD•ÚÓ-ο¤ Z¹ð¿‘YxaR­?œ—W±ýÓÎŽw ‘=õ¼¤› Ï8 Ø1$b(ôøò›ÚØžoû‘Òã(²ŠŠ¹Ó-ÛǰxA€Í].(ég—¤¶ÇH:¾ V ¸6©ÖÏq¹´pèbÌ‘ŽJÓtf¨’² 0:§íGóU)øYæb¾Ö×6igÇĤZŸ%HÄ’pÙÖÊÿIªIúPa°M¾Ü›;÷²”Éíòùðþßm¿\0Ê'%IòUUjçÚ¾«‰ö#—KƒÞÔ3MÓ§¹òoÝDuŒ‰(¨3¦­ œ¾¤=0K7SmºÒ4}@mmg6'¹\êôå\¸zÃfÙ (ö;¶Íš3/O΀ɊÖE‚Dô« nµ…Ú t~$Ý œß6kN€fÞÙ \ÜU8}]Û3žyæ™Û$ý4§¢5$ÑÉž1mʨY‹ ³½Ò\½Ñ!P¥öbÚÙñàmù}Ë[Hçó-– E®-–MªõGÒÎŽë%íT°UÊ“'O>ø”íW yækcÿø@¿¤,—Ʀiª&DWÛ¬9 BRØbÏj{¾éSÇЈœI©«{…T—ÁŠ#ÏP?\Ò‡l÷åÙdI{Û³ÃöcÀo•EšüóU©ý¦Ÿ{Õ%í\°Wþ"i[à‹yU,óÏQ¥öÇíýNÒ.ýŒ;Ûn+nζ\ðëf€¬pÅ]‘ ,aVÞ1aíܺ&©Ö÷d»û×äb»/÷®³ÝÈ’ÇõÀÇT©-,´õàÓK*2·”ê!iš®Õ6kÎËщè£E5jA’CªÔ~lûº|ÑêðòÊ žŸ”WõöÞS»ÛÞ»•“`m•Fá‰m£‘±¤ÙôeÛ/5r×Ãß—Kaó4àô" ÂûÿÉS¿-mû´´³c€gL|ž,×äµ&òmårîù+4;^øËrG’äžHˆ%ͦOHú!ppðŸ’~K¨ã;HçÀSÀô&N…8­oH*f)î,éýNÓ€Orã+ØÐø ÷(îλØ9¹mãî¶WW÷r ‡6Èê‡6š{/{É2›©[Slß,i‡‚ p•*µýÓÎŽÙÀ.,R’ŒÇ~Ðö&¹ý ÌIªõR#~Kà¿%m“kgfR­±²:+JÕeàÕ&_i5a†€ÇóšH‘¸\ú ’äý’ðJ‹Ï[«Ir¥¤ öÁxàKaݳsç4<^ÛçÕ¦°³Õ ªÔnxø:|gSü¢àK’¦L¿»º_.¶½ aH»aÏ´³càTà7DAíêl:“d3àS>ÇëWô#A"†)ƒ*µÿ”tG>ß=¼¼*TˆoUª§A¨/&Õús- [HÊ×ù˜«Jíþ`ŸÜéré\—KÛD‚D g ¤,*2 8évÛ7¶Nw—¶p´Ç>î‘tV8þ.IÛØþ¼í?§p¹´y$HÄp”"ÿ´}I1ÖKÒ;B|Ô™¶_jréYªÔžoJû=¶ß_4ÎU©]Ž¬Ù°m$½ø¨Ë¥$íìPÚÙ1%íì ±ÒJ¡F¶'{^ͺ@íí·Jº®P¡äFà†fí=»ïf’tÑâ|1„j*}Ó§®#ijc¬CÿYÛ¿R¥–JÜœ–vvìïriÍ¡ü¾«J4o³èЈæX8˜¾Ê•BÝÏöÑÀ€Ùa¡]8»7lËð,°½í‡$£J­©»vÒ¤I3 s›Ž xHcÇžŒ÷ý޼m"é§¶ÿÞDÒVÀVX×)Yø 0%o¬µÀ£ÀÍÀÓýà«ýWÀÃd±AͰ1°¹(×ðú¯…kvÞ¿”ý!2wéïÉv{Jû!jþóÝÈŠµ­ÑOˆ,¶êà×d‹xyž÷;“-6k»¬„è ³ÿ’jý÷ž1í§éXµ·?« g;wìAϘv‚Ót¼’d¾ºº_ia{dû3ÅÊ*’ŽÖy¿Oû¦OìÏ⥌zmßÛ7ñ¸B³Cº[Õò"țȢ:7[J5. ÆÜnM~`‘¹‹¹¥‚lA¶–ÏHk Ï–¿¦œD¶cëÒJ-¢Tššy/ÎçÂ=ÖÉÍ”™É{Âwø^øîÍžãà ’ŒàsI…ººçóZ[@‹‚uAU{7p–¤Ñ{ärI¿ ÒcGà][ç.Ujç…6Ö%·wc Ú)à “€_[Òd'ÕØD»„™ó-Cd7%…ˆ&Ïäç /u£³ÉñÉêèŽY†¶ÛÈêÔÎ.nrü3ÀEŒ ¸\z3p†íõr!(ÕÞ:C•Ú|—KkÛ¾¾ýÛTs„øe“@Ê[†»‘þU²e–a¦jœ¿=pøÔï?Âëëà¾llÌ Û¾¨É„6:?`F9JÀÉb·òÅú€ÿߨènûIíyÛxøÑG­†vÞj{»‚¾ZÒãÙ “톨­G A¦mIP´ƒö¢öß^xø ¤ÞÊ Ç~¶f{Ç&ÚÅIµ~aPŽ’t$…ê)À›\ÿtã³c%É-Zö¹’ gk-ûÏ«0K+MƧ+à·Œ[–ß¼É÷š2Dm7Ã;[sï?8"ˆqÄ®ãÜÛ{zPÇ7µ}ží9>œÒ$‹ñlUjµ@´“å¾ç7h¼^Ò_†úÙ‡š jѦȶ"þUðÈ4:§8 ئÅ`k§)·œP.[JÉ{0Í÷°h þ"ð#ào¹sS²íš ƒbŒk¢b5#í«áÙž,H˜ñÀ!Á‰²¢¤ÆÝÛ{vpŪ°ë•lϲ}lÛ¬9}¡šü©À„Å£YTNðŒik;M‘4>GŽy’®P¥6w¸¤nzø‹M޹Œf(±¨@Ą̬~$Çmƒ|î‹È 4ÃSÀÙƒ˜¤*Ál†gá0X"ÒÎŽvI£moüغEš­€s•$Ç%]Ý}.—6¶]Éç‚„ÁŸJ:^•Úóž1MNÓý€ÚºU•Ú•Ëãû¬(‚I’ì<çri!Yßį¾::Ô žjhm×DZäm $]-é"Uj¿ äøàI¥9u½Îîëë»ÀŸÝe‚ûú®Îy¶^;'©ÖoE&loÁ­m¿¹XŒº 9¾'i¦*µû|Ä®íôõýÐö'óµ´‚Úv’ä(]8{a$ÈÀÑ_,Òd·¾Ò· ¤.N‡Vèªgw¹´³íc$­g{b°+Ö»[µõgÄ »ZýV•Ú«ž1m÷ö^L+JàI‡ª«ûåáÒ‘#»G,ü(c€£€ ƒhû`àZ²Õ礉a?\qAxö¾Âs'À‡hž÷²Ô¤±½Y„Äè%¹}s±U €³5zôI:ÿŽ4§Žíë4½[,S*é2 \Tã"A†µÂ€Xô@R˜,çoK"j¢Þ¬(éòR‹gÚ*LKƒÇ—ö¹%½`{.‹oºÙŒ/Iš\®JíK¯uúô©íI’¼Áöù’ö+n’ÓÏïéé9fôÅw÷ 7Q<õêù,]Ö_+tÞ?L–«=n†û’ŒûV`Ÿü7°ïKÂýËpÍÓaÓœu›¨P=d…äfKº©¯¯ïgíß¿kQN=ÛÌöÁÀ1A5ób‘ŒY⩪ÔÎX™ƒn¤I;(ì=±ŒøYá}=ˆþÁM¾@–C¾¢pEžƒ §ÿ;ÍI—$Bžrš6Ôž'€»$Íž”ô´íZÞÝÔ©í$¼;T+iFì[€ï®(WîªD/1øý¸¯m¢6- Ëé>eIÒ¸æ6Z”·YNè%sCÏ$¹Ïþ± y‘¬¨ÂxI/Û~˜›Të½M úwŸ³½›í[¬…`ûLIßIªõaá%\ù  *²¤ãÍöæå3üpèš85¨pßYÆï} ¯ÃîÉ2Þ§ˆKÈò<¾»Œ}rpþ2ýØ3ïLû³Ñ\.M¾eûðÆÞƒ5*¯V=ì›T볇ӌ<Ôy% ”‡r†ï(àNúïþ¯/U3·…Ñx)YQˆO’•Ï™@ÿåsL¶žq-Y6^kÿ\<={哳„¶®äk–(57H–|]¨QÀ½K0˜¯'K|ZÒ5½dÉQ7‘%Ÿ-)Røe`6ð²rKËnvv¬!iÐf{à]’Þn{{`\Å÷¦—Ûž|3©Ö¿Ë0DÜ@gäaXÉK;;“T]‰Hsg˜T¾œTë ‡kgÇP“‘‡á¶@ùT›I‰BYžg€Û%Ýü8lï6¬ 18q&ý#¨‚_oV¼vζÏî—ôx«"Ö‘ «"ž vPcsΗlÿެHGÌ…ü¼í…m³æÄúÉËÿ Û$Y‡+‡ÉIEND®B`‚bladeRF-2024.05/host/libraries/libbladeRF/include/000077500000000000000000000000001457144405000215335ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF/include/CMakeLists.txt000066400000000000000000000005301457144405000242710ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.5) ################################################################################ # Install libbladeRF header files ################################################################################ install(FILES libbladeRF.h bladeRF1.h bladeRF2.h DESTINATION include ) bladeRF-2024.05/host/libraries/libbladeRF/include/bladeRF1.h000066400000000000000000001351411457144405000232710ustar00rootroot00000000000000/** * @file bladeRF1.h * * @brief bladeRF1-specific API * * Copyright (C) 2013-2017 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef BLADERF1_H_ #define BLADERF1_H_ /** * @defgroup BLADERF1 bladeRF1-specific API * * These functions are thread-safe. * * @{ */ /** * @defgroup BLADERF1_CONSTANTS Constants (deprecated) * * \deprecated These constants are deprecated, and only apply to the original * bladeRF (x40/x115). They are here for compatibility with legacy * applications. Alternatives are noted below. * * @{ */ /** Minimum sample rate, in Hz. * * \deprecated Use bladerf_get_sample_rate_range() */ #define BLADERF_SAMPLERATE_MIN 80000u /** * Maximum recommended sample rate, in Hz. * * \deprecated Use bladerf_get_sample_rate_range() */ #define BLADERF_SAMPLERATE_REC_MAX 40000000u /** Minimum bandwidth, in Hz * * \deprecated Use bladerf_get_bandwidth_range() */ #define BLADERF_BANDWIDTH_MIN 1500000u /** Maximum bandwidth, in Hz * * \deprecated Use bladerf_get_bandwidth_range() */ #define BLADERF_BANDWIDTH_MAX 28000000u /** * Minimum tunable frequency (with an XB-200 attached), in Hz. * * While this value is the lowest permitted, note that the components on the * XB-200 are only rated down to 50 MHz. Be aware that performance will likely * degrade as you tune to lower frequencies. * * \deprecated Call bladerf_expansion_attach(), then use * bladerf_get_frequency_range() to get the frequency range. */ #define BLADERF_FREQUENCY_MIN_XB200 0u /** Minimum tunable frequency (without an XB-200 attached), in Hz * * \deprecated Use bladerf_get_frequency_range() */ #define BLADERF_FREQUENCY_MIN 237500000u /** Maximum tunable frequency, in Hz * * \deprecated Use bladerf_get_frequency_range() */ #define BLADERF_FREQUENCY_MAX 3800000000u /** @} (End of BLADERF1_CONSTANTS) */ /** * @ingroup FN_IMAGE * @defgroup BLADERF_FLASH_CONSTANTS Flash image format constants * * \note These apply to both the bladeRF1 and bladeRF2, but they are still in * bladeRF1.h for the time being. * * @{ */ /** Byte address of FX3 firmware */ #define BLADERF_FLASH_ADDR_FIRMWARE 0x00000000 /** Length of firmware region of flash, in bytes */ #define BLADERF_FLASH_BYTE_LEN_FIRMWARE 0x00030000 /** Byte address of calibration data region */ #define BLADERF_FLASH_ADDR_CAL 0x00030000 /** Length of calibration data, in bytes */ #define BLADERF_FLASH_BYTE_LEN_CAL 0x100 /** * Byte address of of the autoloaded FPGA and associated metadata. * * The first page is allocated for metadata, and the FPGA bitstream resides * in the following pages. */ #define BLADERF_FLASH_ADDR_FPGA 0x00040000 /** @} (End of BLADERF_FLASH_CONSTANTS) */ /** * @defgroup FN_BLADERF1_GAIN Gain stages (deprecated) * * These functions provide control over the device's RX and TX gain stages. * * \deprecated Use bladerf_get_gain_range(), bladerf_set_gain(), and * bladerf_get_gain() to control total system gain. For direct * control of individual gain stages, use bladerf_get_gain_stages(), * bladerf_get_gain_stage_range(), bladerf_set_gain_stage(), and * bladerf_get_gain_stage(). * * @{ */ /** * In general, the gains should be incremented in the following order (and * decremented in the reverse order). * * TX: `TXVGA1`, `TXVGA2` * * RX: `LNA`, `RXVGA`, `RXVGA2` * */ /** Minimum RXVGA1 gain, in dB * * \deprecated Use bladerf_get_gain_stage_range() */ #define BLADERF_RXVGA1_GAIN_MIN 5 /** Maximum RXVGA1 gain, in dB * * \deprecated Use bladerf_get_gain_stage_range() */ #define BLADERF_RXVGA1_GAIN_MAX 30 /** Minimum RXVGA2 gain, in dB * * \deprecated Use bladerf_get_gain_stage_range() */ #define BLADERF_RXVGA2_GAIN_MIN 0 /** Maximum RXVGA2 gain, in dB * * \deprecated Use bladerf_get_gain_stage_range() */ #define BLADERF_RXVGA2_GAIN_MAX 30 /** Minimum TXVGA1 gain, in dB * * \deprecated Use bladerf_get_gain_stage_range() */ #define BLADERF_TXVGA1_GAIN_MIN (-35) /** Maximum TXVGA1 gain, in dB * * \deprecated Use bladerf_get_gain_stage_range() */ #define BLADERF_TXVGA1_GAIN_MAX (-4) /** Minimum TXVGA2 gain, in dB * * \deprecated Use bladerf_get_gain_stage_range() */ #define BLADERF_TXVGA2_GAIN_MIN 0 /** Maximum TXVGA2 gain, in dB * * \deprecated Use bladerf_get_gain_stage_range() */ #define BLADERF_TXVGA2_GAIN_MAX 25 /** * LNA gain options * * \deprecated Use bladerf_get_gain_stage_range() */ typedef enum { BLADERF_LNA_GAIN_UNKNOWN, /**< Invalid LNA gain */ BLADERF_LNA_GAIN_BYPASS, /**< LNA bypassed - 0dB gain */ BLADERF_LNA_GAIN_MID, /**< LNA Mid Gain (MAX-6dB) */ BLADERF_LNA_GAIN_MAX /**< LNA Max Gain */ } bladerf_lna_gain; /** * Gain in dB of the LNA at mid setting * * \deprecated Use bladerf_get_gain_stage_range() */ #define BLADERF_LNA_GAIN_MID_DB 3 /** * Gain in db of the LNA at max setting * * \deprecated Use bladerf_get_gain_stage_range() */ #define BLADERF_LNA_GAIN_MAX_DB 6 /** * Set the PA gain in dB * * \deprecated Use either bladerf_set_gain() or bladerf_set_gain_stage(). * * Values outside the range of * [ \ref BLADERF_TXVGA2_GAIN_MIN, \ref BLADERF_TXVGA2_GAIN_MAX ] * will be clamped. * * @param dev Device handle * @param[in] gain Desired gain * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_set_txvga2(struct bladerf *dev, int gain); /** * Get the PA gain in dB * * \deprecated Use either bladerf_get_gain() or bladerf_get_gain_stage(). * * @param dev Device handle * @param[out] gain Pointer to returned gain * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_txvga2(struct bladerf *dev, int *gain); /** * Set the post-LPF gain in dB * * \deprecated Use either bladerf_set_gain() or bladerf_set_gain_stage(). * * Values outside the range of * [ \ref BLADERF_TXVGA1_GAIN_MIN, \ref BLADERF_TXVGA1_GAIN_MAX ] * will be clamped. * * @param dev Device handle * @param[in] gain Desired gain * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_set_txvga1(struct bladerf *dev, int gain); /** * Get the post-LPF gain in dB * * \deprecated Use either bladerf_get_gain() or bladerf_get_gain_stage(). * * @param dev Device handle * @param[out] gain Pointer to returned gain * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_txvga1(struct bladerf *dev, int *gain); /** * Set the LNA gain * * \deprecated Use either bladerf_set_gain() or bladerf_set_gain_stage(). * * @param dev Device handle * @param[in] gain Desired gain level * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_set_lna_gain(struct bladerf *dev, bladerf_lna_gain gain); /** * Get the LNA gain * * \deprecated Use either bladerf_get_gain() or bladerf_get_gain_stage(). * * @param dev Device handle * @param[out] gain Pointer to the set gain level * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_lna_gain(struct bladerf *dev, bladerf_lna_gain *gain); /** * Set the pre-LPF VGA gain * * \deprecated Use either bladerf_set_gain() or bladerf_set_gain_stage(). * * Values outside the range of * [ \ref BLADERF_RXVGA1_GAIN_MIN, \ref BLADERF_RXVGA1_GAIN_MAX ] * will be clamped. * * @param dev Device handle * @param[in] gain Desired gain * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_set_rxvga1(struct bladerf *dev, int gain); /** * Get the pre-LPF VGA gain * * \deprecated Use either bladerf_get_gain() or bladerf_get_gain_stage(). * * @param dev Device handle * @param[out] gain Pointer to the set gain level * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_rxvga1(struct bladerf *dev, int *gain); /** * Set the post-LPF VGA gain * * \deprecated Use either bladerf_set_gain() or bladerf_set_gain_stage(). * * Values outside the range of * [ \ref BLADERF_RXVGA2_GAIN_MIN, \ref BLADERF_RXVGA2_GAIN_MAX ] * will be clamped. * * @param dev Device handle * @param[in] gain Desired gain * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_set_rxvga2(struct bladerf *dev, int gain); /** * Get the post-LPF VGA gain * * \deprecated Use either bladerf_get_gain() or bladerf_get_gain_stage(). * * @param dev Device handle * @param[out] gain Pointer to the set gain level */ API_EXPORT int CALL_CONV bladerf_get_rxvga2(struct bladerf *dev, int *gain); /** @} (End of FN_BLADERF1_GAIN) */ /** * @defgroup FN_BLADERF1_SAMPLING_MUX Sampling Mux * * These functions provide control over internal and direct sampling modes of * the LMS6002D. * * These functions are thread-safe. * * @{ */ /** * Sampling connection */ typedef enum { BLADERF_SAMPLING_UNKNOWN, /**< Unable to determine connection type */ BLADERF_SAMPLING_INTERNAL, /**< Sample from RX/TX connector */ BLADERF_SAMPLING_EXTERNAL /**< Sample from J60 or J61 */ } bladerf_sampling; /** * Configure the sampling of the LMS6002D to be either internal or external. * * Internal sampling will read from the RXVGA2 driver internal to the chip. * External sampling will connect the ADC inputs to the external inputs for * direct sampling. * * @param dev Device handle * @param[in] sampling Sampling connection * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_set_sampling(struct bladerf *dev, bladerf_sampling sampling); /** * Read the device's current state of RXVGA2 and ADC pin connection * to figure out which sampling mode it is currently configured in. * * @param dev Device handle * @param[out] sampling Sampling connection * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_sampling(struct bladerf *dev, bladerf_sampling *sampling); /** @} (End of FN_BLADERF1_SAMPLING_MUX) */ /** * @defgroup FN_BLADERF1_LPF_BYPASS LPF Bypass * * These functions provide control over the LPF bypass mode of the LMS6002D. * * These functions are thread-safe. * * @{ */ /** * Low-Pass Filter (LPF) mode */ typedef enum { BLADERF_LPF_NORMAL, /**< LPF connected and enabled */ BLADERF_LPF_BYPASSED, /**< LPF bypassed */ BLADERF_LPF_DISABLED /**< LPF disabled */ } bladerf_lpf_mode; /** * Set the LMS LPF mode to bypass or disable it * * @param dev Device handle * @param[in] ch Channel * @param[in] mode Mode to be set * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_set_lpf_mode(struct bladerf *dev, bladerf_channel ch, bladerf_lpf_mode mode); /** * Get the current mode of the LMS LPF * * @param dev Device handle * @param[in] ch Channel * @param[out] mode Current mode of the LPF * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_lpf_mode(struct bladerf *dev, bladerf_channel ch, bladerf_lpf_mode *mode); /** @} (End of FN_BLADERF1_LPF_BYPASS) */ /** * @defgroup FN_SMB_CLOCK SMB clock port control * * The SMB clock port (J62) may be used to synchronize sampling on multiple * devices, or to generate an arbitrary clock output for a different device. * * For MIMO configurations, one device is the clock "master" and outputs its * 38.4 MHz reference on this port. The clock "slave" devices configure the SMB * port as an input and expect to see this 38.4 MHz reference on this port. This * implies that the "master" must be configured first. * * Alternatively, this port may be used to generate an arbitrary clock signal * for use with other devices via the bladerf_set_smb_frequency() and * bladerf_set_rational_smb_frequency() functions. * * @warning Do not use these functions when operating an expansion board. * A different clock configuration is required for the XB devices which cannot * be used simultaneously with the SMB clock port. * * These functions are thread-safe. * * @{ */ /** * Maximum output frequency on SMB connector, if no expansion board attached. */ #define BLADERF_SMB_FREQUENCY_MAX 200000000u /** * Minimum output frequency on SMB connector, if no expansion board attached. */ #define BLADERF_SMB_FREQUENCY_MIN ((38400000u * 66u) / (32 * 567)) /** * SMB clock port mode of operation */ typedef enum { BLADERF_SMB_MODE_INVALID = -1, /**< Invalid selection */ BLADERF_SMB_MODE_DISABLED, /**< Not in use. Device operates from its onboard * clock and does not use J62. */ BLADERF_SMB_MODE_OUTPUT, /**< Device outputs a 38.4 MHz reference clock on * J62. This may be used to drive another device * that is configured with * ::BLADERF_SMB_MODE_INPUT. */ BLADERF_SMB_MODE_INPUT, /**< Device configures J62 as an input and expects a * 38.4 MHz reference to be available when this * setting is applied. */ BLADERF_SMB_MODE_UNAVAILBLE, /**< SMB port is unavailable for use due to the * underlying clock being used elsewhere (e.g., * for an expansion board). */ } bladerf_smb_mode; /** * Set the current mode of operation of the SMB clock port * * In a MIMO configuration, one "master" device should first be configured to * output its reference clock to the slave devices via * `bladerf_set_smb_mode(dev, BLADERF_SMB_MODE_OUTPUT)`. * * Next, all "slave" devices should be configured to use the reference clock * provided on the SMB clock port (instead of using their on-board reference) * via `bladerf_set_smb_mode(dev, BLADERF_SMB_MODE_INPUT)`. * * @param dev Device handle * @param[in] mode Desired mode * * @return 0 on success, or a value from \ref RETCODES list on failure. */ API_EXPORT int CALL_CONV bladerf_set_smb_mode(struct bladerf *dev, bladerf_smb_mode mode); /** * Get the current mode of operation of the SMB clock port * * @param dev Device handle * @param[out] mode Desired mode * * @return 0 on success, or a value from \ref RETCODES list on failure. */ API_EXPORT int CALL_CONV bladerf_get_smb_mode(struct bladerf *dev, bladerf_smb_mode *mode); /** * Set the SMB clock port frequency in rational Hz * * @param dev Device handle * @param[in] rate Rational frequency * @param[out] actual If non-NULL, this is written with the actual * * The frequency must be between \ref BLADERF_SMB_FREQUENCY_MIN and * \ref BLADERF_SMB_FREQUENCY_MAX. * * This function inherently configures the SMB clock port as an output. Do not * call bladerf_set_smb_mode() with ::BLADERF_SMB_MODE_OUTPUT, as this will * reset the output frequency to the 38.4 MHz reference. * * @warning This clock should not be set if an expansion board is connected. * * @return 0 on success, * BLADERF_ERR_INVAL for an invalid frequency, * or a value from \ref RETCODES list on failure. */ API_EXPORT int CALL_CONV bladerf_set_rational_smb_frequency(struct bladerf *dev, struct bladerf_rational_rate *rate, struct bladerf_rational_rate *actual); /** * Set the SMB connector output frequency in Hz. * Use bladerf_set_rational_smb_frequency() for more arbitrary values. * * @param dev Device handle * @param[in] rate Frequency * @param[out] actual If non-NULL. this is written with the actual * frequency achieved. * * This function inherently configures the SMB clock port as an output. Do not * call bladerf_set_smb_mode() with ::BLADERF_SMB_MODE_OUTPUT, as this will * reset the output frequency to the 38.4 MHz reference. * * The frequency must be between \ref BLADERF_SMB_FREQUENCY_MIN and * \ref BLADERF_SMB_FREQUENCY_MAX. * * @warning This clock should not be set if an expansion board is connected. * * @return 0 on success, * BLADERF_ERR_INVAL for an invalid frequency, * or a value from \ref RETCODES list on other failures */ API_EXPORT int CALL_CONV bladerf_set_smb_frequency(struct bladerf *dev, uint32_t rate, uint32_t *actual); /** * Read the SMB connector output frequency in rational Hz * * @param dev Device handle * @param[out] rate Pointer to returned rational frequency * * @return 0 on success, value from \ref RETCODES list upon failure */ API_EXPORT int CALL_CONV bladerf_get_rational_smb_frequency( struct bladerf *dev, struct bladerf_rational_rate *rate); /** * Read the SMB connector output frequency in Hz * * @param dev Device handle * @param[out] rate Pointer to returned frequency * * @return 0 on success, value from \ref RETCODES list upon failure */ API_EXPORT int CALL_CONV bladerf_get_smb_frequency(struct bladerf *dev, unsigned int *rate); /** @} (End of FN_SMB_CLOCK) */ /** * @defgroup FN_EXP_IO Expansion I/O * * These definitions and functions provide high-level functionality for * manipulating pins on the bladeRF1 U74 Expansion Header, and the associated * mappings on expansion boards. * * These functions are thread-safe. * * @{ */ /** Expansion pin GPIO number to bitmask */ #define BLADERF_XB_GPIO(n) (1 << (n - 1)) /** Specifies a pin to be an output */ #define BLADERF_XB_DIR_OUTPUT(pin) (pin) /** Specifies a pin to be an input */ #define BLADERF_XB_DIR_INPUT(pin) (0) /** Pin bitmask for Expansion GPIO 1 (U74 pin 11) */ #define BLADERF_XB_GPIO_01 BLADERF_XB_GPIO(1) /** Pin bitmask for Expansion GPIO 2 (U74 pin 13) */ #define BLADERF_XB_GPIO_02 BLADERF_XB_GPIO(2) /** Pin bitmask for Expansion GPIO 3 (U74 pin 17) */ #define BLADERF_XB_GPIO_03 BLADERF_XB_GPIO(3) /** Pin bitmask for Expansion GPIO 4 (U74 pin 19) */ #define BLADERF_XB_GPIO_04 BLADERF_XB_GPIO(4) /** Pin bitmask for Expansion GPIO 5 (U74 pin 23) */ #define BLADERF_XB_GPIO_05 BLADERF_XB_GPIO(5) /** Pin bitmask for Expansion GPIO 6 (U74 pin 25) */ #define BLADERF_XB_GPIO_06 BLADERF_XB_GPIO(6) /** Pin bitmask for Expansion GPIO 7 (U74 pin 29) */ #define BLADERF_XB_GPIO_07 BLADERF_XB_GPIO(7) /** Pin bitmask for Expansion GPIO 8 (U74 pin 31) */ #define BLADERF_XB_GPIO_08 BLADERF_XB_GPIO(8) /** Pin bitmask for Expansion GPIO 9 (U74 pin 35) */ #define BLADERF_XB_GPIO_09 BLADERF_XB_GPIO(9) /** Pin bitmask for Expansion GPIO 10 (U74 pin 37) */ #define BLADERF_XB_GPIO_10 BLADERF_XB_GPIO(10) /** Pin bitmask for Expansion GPIO 11 (U74 pin 41) */ #define BLADERF_XB_GPIO_11 BLADERF_XB_GPIO(11) /** Pin bitmask for Expansion GPIO 12 (U74 pin 43) */ #define BLADERF_XB_GPIO_12 BLADERF_XB_GPIO(12) /** Pin bitmask for Expansion GPIO 13 (U74 pin 47) */ #define BLADERF_XB_GPIO_13 BLADERF_XB_GPIO(13) /** Pin bitmask for Expansion GPIO 14 (U74 pin 49) */ #define BLADERF_XB_GPIO_14 BLADERF_XB_GPIO(14) /** Pin bitmask for Expansion GPIO 15 (U74 pin 53) */ #define BLADERF_XB_GPIO_15 BLADERF_XB_GPIO(15) /** Pin bitmask for Expansion GPIO 16 (U74 pin 55) */ #define BLADERF_XB_GPIO_16 BLADERF_XB_GPIO(16) /** Pin bitmask for Expansion GPIO 17 (U74 pin 12) */ #define BLADERF_XB_GPIO_17 BLADERF_XB_GPIO(17) /** Pin bitmask for Expansion GPIO 18 (U74 pin 14) */ #define BLADERF_XB_GPIO_18 BLADERF_XB_GPIO(18) /** Pin bitmask for Expansion GPIO 19 (U74 pin 18) */ #define BLADERF_XB_GPIO_19 BLADERF_XB_GPIO(19) /** Pin bitmask for Expansion GPIO 20 (U74 pin 20) */ #define BLADERF_XB_GPIO_20 BLADERF_XB_GPIO(20) /** Pin bitmask for Expansion GPIO 21 (U74 pin 24) */ #define BLADERF_XB_GPIO_21 BLADERF_XB_GPIO(21) /** Pin bitmask for Expansion GPIO 22 (U74 pin 26) */ #define BLADERF_XB_GPIO_22 BLADERF_XB_GPIO(22) /** Pin bitmask for Expansion GPIO 23 (U74 pin 30) */ #define BLADERF_XB_GPIO_23 BLADERF_XB_GPIO(23) /** Pin bitmask for Expansion GPIO 24 (U74 pin 32) */ #define BLADERF_XB_GPIO_24 BLADERF_XB_GPIO(24) /** Pin bitmask for Expansion GPIO 25 (U74 pin 36) */ #define BLADERF_XB_GPIO_25 BLADERF_XB_GPIO(25) /** Pin bitmask for Expansion GPIO 26 (U74 pin 38) */ #define BLADERF_XB_GPIO_26 BLADERF_XB_GPIO(26) /** Pin bitmask for Expansion GPIO 27 (U74 pin 42) */ #define BLADERF_XB_GPIO_27 BLADERF_XB_GPIO(27) /** Pin bitmask for Expansion GPIO 28 (U74 pin 44) */ #define BLADERF_XB_GPIO_28 BLADERF_XB_GPIO(28) /** Pin bitmask for Expansion GPIO 29 (U74 pin 48) */ #define BLADERF_XB_GPIO_29 BLADERF_XB_GPIO(29) /** Pin bitmask for Expansion GPIO 30 (U74 pin 50) */ #define BLADERF_XB_GPIO_30 BLADERF_XB_GPIO(30) /** Pin bitmask for Expansion GPIO 31 (U74 pin 54) */ #define BLADERF_XB_GPIO_31 BLADERF_XB_GPIO(31) /** Pin bitmask for Expansion GPIO 32 (U74 pin 56) */ #define BLADERF_XB_GPIO_32 BLADERF_XB_GPIO(32) /** Bitmask for XB-200 header J7, pin 1 */ #define BLADERF_XB200_PIN_J7_1 BLADERF_XB_GPIO_10 /** Bitmask for XB-200 header J7, pin 2 */ #define BLADERF_XB200_PIN_J7_2 BLADERF_XB_GPIO_11 /** Bitmask for XB-200 header J7, pin 5 */ #define BLADERF_XB200_PIN_J7_5 BLADERF_XB_GPIO_08 /** Bitmask for XB-200 header J7, pin 6 */ #define BLADERF_XB200_PIN_J7_6 BLADERF_XB_GPIO_09 /** Bitmask for XB-200 header J13, pin 1 */ #define BLADERF_XB200_PIN_J13_1 BLADERF_XB_GPIO_17 /** Bitmask for XB-200 header J13, pin 2 */ #define BLADERF_XB200_PIN_J13_2 BLADERF_XB_GPIO_18 /* XB-200 J13 Pin 6 is actually reserved for SPI */ /** Bitmask for XB-200 header J16, pin 1 */ #define BLADERF_XB200_PIN_J16_1 BLADERF_XB_GPIO_31 /** Bitmask for XB-200 header J16, pin 2 */ #define BLADERF_XB200_PIN_J16_2 BLADERF_XB_GPIO_32 /** Bitmask for XB-200 header J16, pin 3 */ #define BLADERF_XB200_PIN_J16_3 BLADERF_XB_GPIO_19 /** Bitmask for XB-200 header J16, pin 4 */ #define BLADERF_XB200_PIN_J16_4 BLADERF_XB_GPIO_20 /** Bitmask for XB-200 header J16, pin 5 */ #define BLADERF_XB200_PIN_J16_5 BLADERF_XB_GPIO_21 /** Bitmask for XB-200 header J16, pin 6 */ #define BLADERF_XB200_PIN_J16_6 BLADERF_XB_GPIO_24 /** Bitmask for XB-100 header J2, pin 3 */ #define BLADERF_XB100_PIN_J2_3 BLADERF_XB_GPIO_07 /** Bitmask for XB-100 header J2, pin 4 */ #define BLADERF_XB100_PIN_J2_4 BLADERF_XB_GPIO_08 /** Bitmask for XB-100 header J3, pin 3 */ #define BLADERF_XB100_PIN_J3_3 BLADERF_XB_GPIO_09 /** Bitmask for XB-100 header J3, pin 4 */ #define BLADERF_XB100_PIN_J3_4 BLADERF_XB_GPIO_10 /** Bitmask for XB-100 header J4, pin 3 */ #define BLADERF_XB100_PIN_J4_3 BLADERF_XB_GPIO_11 /** Bitmask for XB-100 header J4, pin 4 */ #define BLADERF_XB100_PIN_J4_4 BLADERF_XB_GPIO_12 /** Bitmask for XB-100 header J5, pin 3 */ #define BLADERF_XB100_PIN_J5_3 BLADERF_XB_GPIO_13 /** Bitmask for XB-100 header J5, pin 4 */ #define BLADERF_XB100_PIN_J5_4 BLADERF_XB_GPIO_14 /** Bitmask for XB-100 header J11, pin 2 */ #define BLADERF_XB100_PIN_J11_2 BLADERF_XB_GPIO_05 /** Bitmask for XB-100 header J11, pin 3 */ #define BLADERF_XB100_PIN_J11_3 BLADERF_XB_GPIO_04 /** Bitmask for XB-100 header J11, pin 4 */ #define BLADERF_XB100_PIN_J11_4 BLADERF_XB_GPIO_03 /** Bitmask for XB-100 header J11, pin 5 */ #define BLADERF_XB100_PIN_J11_5 BLADERF_XB_GPIO_06 /** Bitmask for XB-100 header J12, pin 2 */ #define BLADERF_XB100_PIN_J12_2 BLADERF_XB_GPIO_01 /* XB-100 header J12, pins 3 and 4 are reserved for SPI */ /** Bitmask for XB-100 header J12, pin 5 */ #define BLADERF_XB100_PIN_J12_5 BLADERF_XB_GPIO_02 /** Bitmask for XB-100 LED_D1 (blue) */ #define BLADERF_XB100_LED_D1 BLADERF_XB_GPIO_24 /** Bitmask for XB-100 LED_D2 (blue) */ #define BLADERF_XB100_LED_D2 BLADERF_XB_GPIO_32 /** Bitmask for XB-100 LED_D3 (blue) */ #define BLADERF_XB100_LED_D3 BLADERF_XB_GPIO_30 /** Bitmask for XB-100 LED_D4 (red) */ #define BLADERF_XB100_LED_D4 BLADERF_XB_GPIO_28 /** Bitmask for XB-100 LED_D5 (red) */ #define BLADERF_XB100_LED_D5 BLADERF_XB_GPIO_23 /** Bitmask for XB-100 LED_D6 (red) */ #define BLADERF_XB100_LED_D6 BLADERF_XB_GPIO_25 /** Bitmask for XB-100 LED_D7 (green) */ #define BLADERF_XB100_LED_D7 BLADERF_XB_GPIO_31 /** Bitmask for XB-100 LED_D8 (green) */ #define BLADERF_XB100_LED_D8 BLADERF_XB_GPIO_29 /** Bitmask for XB-100 tricolor LED, red cathode */ #define BLADERF_XB100_TLED_RED BLADERF_XB_GPIO_22 /** Bitmask for XB-100 tricolor LED, green cathode */ #define BLADERF_XB100_TLED_GREEN BLADERF_XB_GPIO_21 /** Bitmask for XB-100 tricolor LED, blue cathode */ #define BLADERF_XB100_TLED_BLUE BLADERF_XB_GPIO_20 /** Bitmask for XB-100 DIP switch 1 */ #define BLADERF_XB100_DIP_SW1 BLADERF_XB_GPIO_27 /** Bitmask for XB-100 DIP switch 2 */ #define BLADERF_XB100_DIP_SW2 BLADERF_XB_GPIO_26 /** Bitmask for XB-100 DIP switch 3 */ #define BLADERF_XB100_DIP_SW3 BLADERF_XB_GPIO_16 /** Bitmask for XB-100 DIP switch 4 */ #define BLADERF_XB100_DIP_SW4 BLADERF_XB_GPIO_15 /** Bitmask for XB-100 button J6 */ #define BLADERF_XB100_BTN_J6 BLADERF_XB_GPIO_19 /** Bitmask for XB-100 button J7 */ #define BLADERF_XB100_BTN_J7 BLADERF_XB_GPIO_18 /** Bitmask for XB-100 button J8 */ #define BLADERF_XB100_BTN_J8 BLADERF_XB_GPIO_17 /* XB-100 buttons J9 and J10 are not mapped to the GPIO register, * but instead to reserved SPI pins. FPGA modifications are needed to * use these. */ /** * Read the state of expansion GPIO values * * @param dev Device handle * @param[out] val Value of GPIO pins * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_expansion_gpio_read(struct bladerf *dev, uint32_t *val); /** * Write expansion GPIO pins. * * Callers should be sure to perform a read-modify-write sequence to avoid * accidentally clearing other GPIO bits that may be set by the library * internally. * * Consider using bladerf_expansion_gpio_masked_write() instead. * * @param dev Device handle * @param[in] val Data to write to GPIO pins * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_expansion_gpio_write(struct bladerf *dev, uint32_t val); /** * Write values to the specified GPIO pins * * This function alleviates the need for the caller to perform a * read-modify-write sequence. The supplied mask is used by the FPGA to perform * the required RMW operation. * * @param dev Device handle * @param[in] mask Mask of pins to write * @param[in] value Value to write. * * For example, to set XB200 pins J16-1 and J16-2, and clear J16-4 and J16-5: * * @code{.c} * const uint32_t pins_to_write = * BLADERF_XB200_PIN_J16_1 | * BLADERF_XB200_PIN_J16_2 | * BLADERF_XB200_PIN_J16_3 | * BLADERF_XB200_PIN_J16_4; * * const uint32_t values_to_write = * BLADERF_XB200_PIN_J16_1 | * BLADERF_XB200_PIN_J16_2; * * int status = bladerf_expansion_gpio_masked_write(dev, * pins_to_write, * values_to_write); * @endcode * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_expansion_gpio_masked_write(struct bladerf *dev, uint32_t mask, uint32_t value); /** * Read the expansion GPIO direction register * * @param dev Device handle * @param[out] outputs Pins configured as outputs will be set to '1'. * Pins configured as inputs will be set to '0'. * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_expansion_gpio_dir_read(struct bladerf *dev, uint32_t *outputs); /** * Write to the expansion GPIO direction register. * * Callers should be sure to perform a read-modify-write sequence to avoid * accidentally clearing other GPIO bits that may be set by the library * internally. * * Consider using bladerf_expansion_gpio_dir_masked_write() instead. * * @param dev Device handle * @param[in] outputs Pins set to '1' will be configured as outputs. * Pins set to '0' will be configured as inputs. * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_expansion_gpio_dir_write(struct bladerf *dev, uint32_t outputs); /** * Configure the direction of the specified expansion GPIO pins * * This function alleviates the need for the caller to perform a * read-modify-write sequence. The supplied mask is used by the FPGA to perform * the required RMW operation. * * @param dev Device handle * @param[in] mask Bitmask of pins to configure * @param[in] outputs Pins set to '1' will be configured as outputs. * Pins set to '0' will be configured as inputs. * * For example, to configure XB200 pins J16-1 and J16-2 and pins J16-4 and J16-5 * as inputs: * * @code{.c} * const uint32_t pins_to_config = * BLADERF_XB200_PIN_J16_1 | * BLADERF_XB200_PIN_J16_2 | * BLADERF_XB200_PIN_J16_3 | * BLADERF_XB200_PIN_J16_4; * * const uint32_t output_pins = * BLADERF_XB200_PIN_J16_1 | * BLADERF_XB200_PIN_J16_2; * * int status = bladerf_expansion_gpio_masked_write(dev, * pins_to_config, * output_pins); * @endcode * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_expansion_gpio_dir_masked_write(struct bladerf *dev, uint32_t mask, uint32_t outputs); /** @} (End of FN_EXP_IO) */ /** * @defgroup FN_BLADERF1_XB Expansion board support * * This group of functions provides the ability to control and configure * expansion boards such as the XB-100, XB-200, and XB-300. * * These functions are thread-safe. * * @{ */ /** * XB-200 filter selection options */ typedef enum { /** 50-54 MHz (6 meter band) filterbank */ BLADERF_XB200_50M = 0, /** 144-148 MHz (2 meter band) filterbank */ BLADERF_XB200_144M, /** * 222-225 MHz (1.25 meter band) filterbank. * * Note that this filter option is technically wider, covering 206-235 MHz. */ BLADERF_XB200_222M, /** * This option enables the RX/TX channel's custom filter bank path across * the associated FILT and FILT-ANT SMA connectors on the XB-200 board. * * For reception, it is often possible to simply connect the RXFILT and * RXFILT-ANT connectors with an SMA cable (effectively, "no filter"). This * allows for reception of signals outside of the frequency range of the * on-board filters, with some potential trade-off in signal quality. * * For transmission, always use an appropriate filter on the custom * filter path to avoid spurious emissions. * */ BLADERF_XB200_CUSTOM, /** * When this option is selected, the other filter options are automatically * selected depending on the RX or TX channel's current frequency, based * upon the 1dB points of the on-board filters. For frequencies outside * the range of the on-board filters, the custom path is selected. */ BLADERF_XB200_AUTO_1DB, /** * When this option is selected, the other filter options are automatically * selected depending on the RX or TX channel's current frequency, based * upon the 3dB points of the on-board filters. For frequencies outside the * range of the on-board filters, the custom path is selected. */ BLADERF_XB200_AUTO_3DB } bladerf_xb200_filter; /** * XB-200 signal paths */ typedef enum { BLADERF_XB200_BYPASS = 0, /**< Bypass the XB-200 mixer */ BLADERF_XB200_MIX /**< Pass signals through the XB-200 mixer */ } bladerf_xb200_path; /** * XB-300 TRX setting */ typedef enum { BLADERF_XB300_TRX_INVAL = -1, /**< Invalid TRX selection */ BLADERF_XB300_TRX_TX = 0, /**< TRX antenna operates as TX */ BLADERF_XB300_TRX_RX, /**< TRX antenna operates as RX */ BLADERF_XB300_TRX_UNSET /**< TRX antenna unset */ } bladerf_xb300_trx; /** * XB-300 Amplifier selection */ typedef enum { BLADERF_XB300_AMP_INVAL = -1, /**< Invalid amplifier selection */ BLADERF_XB300_AMP_PA = 0, /**< TX Power amplifier */ BLADERF_XB300_AMP_LNA, /**< RX LNA */ BLADERF_XB300_AMP_PA_AUX /**< Auxillary Power amplifier */ } bladerf_xb300_amplifier; /** * Set XB-200 filterbank * * @param dev Device handle * @param[in] ch Channel * @param[in] filter XB200 filterbank * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_xb200_set_filterbank(struct bladerf *dev, bladerf_channel ch, bladerf_xb200_filter filter); /** * Get current XB-200 filterbank * * @param dev Device handle * @param[in] ch Channel * @param[out] filter Pointer to filterbank, only updated if return * value is 0. * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_xb200_get_filterbank(struct bladerf *dev, bladerf_channel ch, bladerf_xb200_filter *filter); /** * Set XB-200 signal path * * @param dev Device handle * @param[in] ch Channel * @param[in] path Desired XB-200 signal path * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_xb200_set_path(struct bladerf *dev, bladerf_channel ch, bladerf_xb200_path path); /** * Get current XB-200 signal path * * @param dev Device handle * @param[in] ch Channel * @param[out] path Pointer to XB200 signal path * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_xb200_get_path(struct bladerf *dev, bladerf_channel ch, bladerf_xb200_path *path); /** * Configure the XB-300 TRX path * * @param dev Device handle * @param[in] trx Desired XB-300 TRX setting * * @return 0 on success, BLADERF_ERR_* on failure */ API_EXPORT int CALL_CONV bladerf_xb300_set_trx(struct bladerf *dev, bladerf_xb300_trx trx); /** * Get the current XB-300 signal path * * @param dev Device handle * @param[out] trx XB300 TRX antenna setting * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_xb300_get_trx(struct bladerf *dev, bladerf_xb300_trx *trx); /** * Enable or disable selected XB-300 amplifier * * @param dev Device handle * @param[in] amp XB-300 amplifier * @param[in] enable Set true to enable or false to disable * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_xb300_set_amplifier_enable(struct bladerf *dev, bladerf_xb300_amplifier amp, bool enable); /** * Get state of selected XB-300 amplifier * * @param dev Device handle * @param[in] amp XB-300 amplifier * @param[out] enable Set true to enable or false to disable * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_xb300_get_amplifier_enable(struct bladerf *dev, bladerf_xb300_amplifier amp, bool *enable); /** * Get current PA PDET output power in dBm * * @param dev Device handle * @param[out] val Output power in dBm * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_xb300_get_output_power(struct bladerf *dev, float *val); /** @} (End of FN_BLADERF1_XB) */ /** * @defgroup FN_BLADERF1_DC_CAL DC Calibration * * These functions are thread-safe. * * @{ */ /** * DC Calibration Modules */ typedef enum { BLADERF_DC_CAL_INVALID = -1, BLADERF_DC_CAL_LPF_TUNING, BLADERF_DC_CAL_TX_LPF, BLADERF_DC_CAL_RX_LPF, BLADERF_DC_CAL_RXVGA2 } bladerf_cal_module; /** * Perform DC calibration * * @param dev Device handle * @param[in] module Module to calibrate * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_calibrate_dc(struct bladerf *dev, bladerf_cal_module module); /** @} (End of FN_BLADERF1_DC_CAL) */ /** * @defgroup FN_BLADERF1_LOW_LEVEL Low-level accessors * * In a most cases, higher-level routines should be used. These routines are * only intended to support development and testing. * * Use these routines with great care, and be sure to reference the relevant * schematics, data sheets, and source code (i.e., firmware and hdl). * * Be careful when mixing these calls with higher-level routines that manipulate * the same registers/settings. * * These functions are thread-safe. * * @{ */ /** * Enable LMS receive * * @note This bit is set/cleared by bladerf_enable_module() */ #define BLADERF_GPIO_LMS_RX_ENABLE (1 << 1) /** * Enable LMS transmit * * @note This bit is set/cleared by bladerf_enable_module() */ #define BLADERF_GPIO_LMS_TX_ENABLE (1 << 2) /** * Switch to use TX low band (300MHz - 1.5GHz) * * @note This is set using bladerf_set_frequency(). */ #define BLADERF_GPIO_TX_LB_ENABLE (2 << 3) /** * Switch to use TX high band (1.5GHz - 3.8GHz) * * @note This is set using bladerf_set_frequency(). */ #define BLADERF_GPIO_TX_HB_ENABLE (1 << 3) /** * Counter mode enable * * Setting this bit to 1 instructs the FPGA to replace the (I, Q) pair in sample * data with an incrementing, little-endian, 32-bit counter value. A 0 in bit * specifies that sample data should be sent (as normally done). * * This feature is useful when debugging issues involving dropped samples. */ #define BLADERF_GPIO_COUNTER_ENABLE (1 << 9) /** * Bit mask representing the rx mux selection * * @note These bits are set using bladerf_set_rx_mux() */ #define BLADERF_GPIO_RX_MUX_MASK (0x7 << BLADERF_GPIO_RX_MUX_SHIFT) /** * Starting bit index of the RX mux values in FX3 <-> FPGA GPIO bank */ #define BLADERF_GPIO_RX_MUX_SHIFT 8 /** * Switch to use RX low band (300M - 1.5GHz) * * @note This is set using bladerf_set_frequency(). */ #define BLADERF_GPIO_RX_LB_ENABLE (2 << 5) /** * Switch to use RX high band (1.5GHz - 3.8GHz) * * @note This is set using bladerf_set_frequency(). */ #define BLADERF_GPIO_RX_HB_ENABLE (1 << 5) /** * This GPIO bit configures the FPGA to use smaller DMA transfers (256 cycles * instead of 512). This is required when the device is not connected at Super * Speed (i.e., when it is connected at High Speed). * * However, the caller need not set this in bladerf_config_gpio_write() calls. * The library will set this as needed; callers generally do not need to be * concerned with setting/clearing this bit. */ #define BLADERF_GPIO_FEATURE_SMALL_DMA_XFER (1 << 7) /** * Enable Packet mode */ #define BLADERF_GPIO_PACKET (1 << 19) /** * Enable 8bit sample mode */ #define BLADERF_GPIO_8BIT_MODE (1 << 20) /** * AGC enable control bit * * @note This is set using bladerf_set_gain_mode(). */ #define BLADERF_GPIO_AGC_ENABLE (1 << 18) /** * Enable-bit for timestamp counter in the FPGA */ #define BLADERF_GPIO_TIMESTAMP (1 << 16) /** * Timestamp 2x divider control. * * @note Important: This bit has no effect and is always enabled (1) in * FPGA versions >= v0.3.0. * * @note The remainder of the description of this bit is presented here for * historical purposes only. It is only relevant to FPGA versions <= v0.1.2. * * By default (value = 0), the sample counter is incremented with I and Q, * yielding two counts per sample. * * Set this bit to 1 to enable a 2x timestamp divider, effectively achieving 1 * timestamp count per sample. * */ #define BLADERF_GPIO_TIMESTAMP_DIV2 (1 << 17) /** * Packet capable core present bit. * * @note This is a read-only bit. The FPGA sets its value, and uses it to inform * host that there is a core capable of using packets in the FPGA. */ #define BLADERF_GPIO_PACKET_CORE_PRESENT (1 << 28) /** * Write value to VCTCXO trim DAC. * * \deprecated Use bladerf_trim_dac_write(). * * This should not be used when the VCTCXO tamer is enabled. * * @param dev Device handle * @param[in] val Value to write to VCTCXO trim DAC * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_dac_write(struct bladerf *dev, uint16_t val); /** * Read value from VCTCXO trim DAC. * * \deprecated Use bladerf_trim_dac_read(). * * This is similar to bladerf_get_vctcxo_trim(), except that it returns the * current trim DAC value, as opposed to the calibration value read from flash. * * Use this if you are trying to query the value after having previously made * calls to bladerf_dac_write(). * * @param dev Device handle * @param[out] val Value to read from VCTCXO trim DAC * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_dac_read(struct bladerf *dev, uint16_t *val); /** * Read a Si5338 register * * @param dev Device handle * @param[in] address Si5338 register address * @param[out] val Register value * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_si5338_read(struct bladerf *dev, uint8_t address, uint8_t *val); /** * Write a Si5338 register * * @param dev Device handle * @param[in] address Si5338 register address * @param[in] val Value to write to register * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_si5338_write(struct bladerf *dev, uint8_t address, uint8_t val); /** * Read a LMS register * * @param dev Device handle * @param[in] address LMS register address * @param[out] val Register value * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_lms_read(struct bladerf *dev, uint8_t address, uint8_t *val); /** * Write a LMS register * * @param dev Device handle * @param[in] address LMS register address * @param[in] val Value to write to register * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_lms_write(struct bladerf *dev, uint8_t address, uint8_t val); /** * This structure is used to directly apply DC calibration register values to * the LMS, rather than use the values resulting from an auto-calibration. * * A value < 0 is used to denote that the specified value should not be written. * If a value is to be written, it will be truncated to 8-bits. */ struct bladerf_lms_dc_cals { int16_t lpf_tuning; /**< LPF tuning module */ int16_t tx_lpf_i; /**< TX LPF I filter */ int16_t tx_lpf_q; /**< TX LPF Q filter */ int16_t rx_lpf_i; /**< RX LPF I filter */ int16_t rx_lpf_q; /**< RX LPF Q filter */ int16_t dc_ref; /**< RX VGA2 DC reference module */ int16_t rxvga2a_i; /**< RX VGA2, I channel of first gain stage */ int16_t rxvga2a_q; /**< RX VGA2, Q channel of first gain stage */ int16_t rxvga2b_i; /**< RX VGA2, I channel of second gain stage */ int16_t rxvga2b_q; /**< RX VGA2, Q channel of second gain stage */ }; /** * Manually load values into LMS6002 DC calibration registers. * * This is generally intended for applying a set of known values resulting from * a previous run of the LMS autocalibrations. * * @param dev Device handle * @param[in] dc_cals Calibration values to load. Values set to <0 will * not be applied. * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_lms_set_dc_cals( struct bladerf *dev, const struct bladerf_lms_dc_cals *dc_cals); /** * Retrieve the current DC calibration values from the LMS6002 * * @param dev Device handle * @param[out] dc_cals Populated with current values * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_lms_get_dc_cals(struct bladerf *dev, struct bladerf_lms_dc_cals *dc_cals); /** * Write value to secondary XB SPI * * @param dev Device handle * @param[out] val Value to write to XB SPI * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_xb_spi_write(struct bladerf *dev, uint32_t val); /** @} (End of FN_BLADERF1_LOW_LEVEL) */ /** @} (End of BLADERF1) */ #endif /* BLADERF1_H_ */ bladeRF-2024.05/host/libraries/libbladeRF/include/bladeRF2.h000066400000000000000000000403201457144405000232640ustar00rootroot00000000000000/** * @file bladeRF2.h * * @brief bladeRF2-specific API * * Copyright (C) 2013-2017 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef BLADERF2_H_ #define BLADERF2_H_ /** * @defgroup BLADERF2 bladeRF2-specific API * * These functions are thread-safe. * * @{ */ /** * @defgroup FN_BLADERF2_BIAS_TEE Bias Tee Control * * @{ */ /** * Get current bias tee state * * @param dev Device handle * @param[in] ch Channel * @param[out] enable True if bias tee active, false otherwise * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_bias_tee(struct bladerf *dev, bladerf_channel ch, bool *enable); /** * Get current bias tee state * * @param dev Device handle * @param[in] ch Channel * @param[in] enable True to activate bias tee, false to deactivate * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_set_bias_tee(struct bladerf *dev, bladerf_channel ch, bool enable); /** @} (End of FN_BLADERF2_BIAS_TEE) */ /** * @defgroup FN_BLADERF2_LOW_LEVEL Low-level accessors * * In most cases, higher-level routines should be used. These routines are only * intended to support development and testing. * * Use these routines with great care, and be sure to reference the relevant * schematics, data sheets, and source code (i.e., firmware and hdl). * * Be careful when mixing these calls with higher-level routines that manipulate * the same registers/settings. * * These functions are thread-safe. * * @{ */ /** * @defgroup FN_BLADERF2_LOW_LEVEL_RFIC RF Integrated Circuit * * @{ */ /** * Read a RFIC register * * @param dev Device handle * @param[in] address Register address * @param[out] val Register value * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_rfic_register(struct bladerf *dev, uint16_t address, uint8_t *val); /** * Write a RFIC register * * @param dev Device handle * @param[in] address Register address * @param[in] val Value to write to register * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_set_rfic_register(struct bladerf *dev, uint16_t address, uint8_t val); /** * Read the temperature from the RFIC * * @param dev Device handle * @param[out] val Temperature in degrees C * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_rfic_temperature(struct bladerf *dev, float *val); /** * Read the RSSI for the selected channel from the RFIC * * @note This is a relative value, not an absolute value. If an absolute * value (e.g. in dBm) is desired, a calibration should be performed * against a reference signal. * * @note See `fpga_common/src/ad936x_params.c` for the RSSI control parameters. * * Reference: AD9361 Reference Manual UG-570 * * @param dev Device handle * @param ch Channel to query * @param[out] pre_rssi Preamble RSSI in dB (first calculated RSSI result) * @param[out] sym_rssi Symbol RSSI in dB (most recent RSSI result) * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_rfic_rssi(struct bladerf *dev, bladerf_channel ch, int32_t *pre_rssi, int32_t *sym_rssi); /** * Read the CTRL_OUT pins from the RFIC * * @note See AD9361 Reference Manual UG-570's "Control Output" chapter for * complete information about this feature. * * @see bladerf_set_rfic_register() * * @param dev Device handle * @param[out] ctrl_out Pointer for storing the retrieved value * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_rfic_ctrl_out(struct bladerf *dev, uint8_t *ctrl_out); /** * RFIC RX FIR filter choices */ typedef enum { BLADERF_RFIC_RXFIR_BYPASS = 0, /**< No filter */ BLADERF_RFIC_RXFIR_CUSTOM, /**< Custom FIR filter (currently unused) */ BLADERF_RFIC_RXFIR_DEC1, /**< Decimate by 1 (default) */ BLADERF_RFIC_RXFIR_DEC2, /**< Decimate by 2 */ BLADERF_RFIC_RXFIR_DEC4, /**< Decimate by 4 */ } bladerf_rfic_rxfir; /** Default RFIC RX FIR filter */ #define BLADERF_RFIC_RXFIR_DEFAULT BLADERF_RFIC_RXFIR_DEC1 /** * RFIC TX FIR filter choices */ typedef enum { BLADERF_RFIC_TXFIR_BYPASS = 0, /**< No filter (default) */ BLADERF_RFIC_TXFIR_CUSTOM, /**< Custom FIR filter (currently unused) */ BLADERF_RFIC_TXFIR_INT1, /**< Interpolate by 1 */ BLADERF_RFIC_TXFIR_INT2, /**< Interpolate by 2 */ BLADERF_RFIC_TXFIR_INT4, /**< Interpolate by 4 */ } bladerf_rfic_txfir; /** Default RFIC TX FIR filter */ #define BLADERF_RFIC_TXFIR_DEFAULT BLADERF_RFIC_TXFIR_BYPASS /** * Get the current status of the RX FIR filter on the RFIC. * * @param dev Device handle * @param rxfir RX FIR selection * * @note See `fpga_common/src/ad936x_params.c` for FIR parameters. * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_rfic_rx_fir(struct bladerf *dev, bladerf_rfic_rxfir *rxfir); /** * Set the RX FIR filter on the RFIC. * * @param dev Device handle * @param rxfir RX FIR selection * * @note See `fpga_common/src/ad936x_params.c` for FIR parameters. * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_set_rfic_rx_fir(struct bladerf *dev, bladerf_rfic_rxfir rxfir); /** * Get the current status of the TX FIR filter on the RFIC. * * @param dev Device handle * @param txfir TX FIR selection * * @note See `fpga_common/src/ad936x_params.c` for FIR parameters. * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_rfic_tx_fir(struct bladerf *dev, bladerf_rfic_txfir *txfir); /** * Set the TX FIR filter on the RFIC. * * @param dev Device handle * @param txfir TX FIR selection * * @note See `fpga_common/src/ad936x_params.c` for FIR parameters. * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_set_rfic_tx_fir(struct bladerf *dev, bladerf_rfic_txfir txfir); /** @} (End of FN_BLADERF2_LOW_LEVEL_RFIC) */ /** * @defgroup FN_BLADERF2_LOW_LEVEL_PLL Phase Detector/Freq. Synth Control * * Reference: * http://www.analog.com/media/en/technical-documentation/data-sheets/ADF4002.pdf * * @{ */ /** * Fetch the lock state of the Phase Detector/Frequency Synthesizer * * @param dev Device handle * @param[out] locked True if locked, False otherwise * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_pll_lock_state(struct bladerf *dev, bool *locked); /** * Fetch the state of the Phase Detector/Frequency Synthesizer * * @param dev Device handle * @param[out] enabled True if enabled, False otherwise * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_pll_enable(struct bladerf *dev, bool *enabled); /** * Enable the Phase Detector/Frequency Synthesizer * * Enabling this disables the VCTCXO trimmer DAC, and vice versa. * * @param dev Device handle * @param[in] enable True to enable, False otherwise * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_set_pll_enable(struct bladerf *dev, bool enable); /** * Get the valid range of frequencies for the reference clock input * * @param dev Device handle * @param[out] range Reference clock frequency range * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_pll_refclk_range(struct bladerf *dev, const struct bladerf_range **range); /** * Get the currently-configured frequency for the reference clock * input. * * @param dev Device handle * @param[out] frequency Reference clock frequency * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_pll_refclk(struct bladerf *dev, uint64_t *frequency); /** * Set the expected frequency for the reference clock input. * * @param dev Device handle * @param[in] frequency Reference clock frequency * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_set_pll_refclk(struct bladerf *dev, uint64_t frequency); /** * Read value from Phase Detector/Frequency Synthesizer * * The `address` is interpreted as the control bits (DB1 and DB0) used to write * to a specific latch. * * @param dev Device handle * @param[in] address Latch address * @param[out] val Value to read from * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_pll_register(struct bladerf *dev, uint8_t address, uint32_t *val); /** * Write value to Phase Detector/Frequency Synthesizer * * The `address` is interpreted as the control bits (DB1 and DB0) used to write * to a specific latch. These bits are masked out in `val` * * @param dev Device handle * @param[in] address Latch address * @param[in] val Value to write to * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_set_pll_register(struct bladerf *dev, uint8_t address, uint32_t val); /** @} (End of FN_BLADERF2_LOW_LEVEL_PLL) */ /** * @defgroup FN_BLADERF2_LOW_LEVEL_POWER_SOURCE Power Multiplexer * * @{ */ /** * Power sources */ typedef enum { BLADERF_UNKNOWN, /**< Unknown; manual observation may be required */ BLADERF_PS_DC, /**< DC Barrel Plug */ BLADERF_PS_USB_VBUS /**< USB Bus */ } bladerf_power_sources; /** * Get the active power source reported by the power multiplexer * * Reference: http://www.ti.com/product/TPS2115A * * @param dev Device handle * @param[out] val Value read from power multiplexer * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_power_source(struct bladerf *dev, bladerf_power_sources *val); /** @} (End of FN_BLADERF2_LOW_LEVEL_POWER_SOURCE) */ /** * @defgroup FN_BLADERF2_LOW_LEVEL_CLOCK_BUFFER Clock Buffer * * @{ */ /** * @defgroup FN_BLADERF2_LOW_LEVEL_CLOCK_BUFFER_SELECT Clock input selection * * @{ */ /** * Available clock sources */ typedef enum { CLOCK_SELECT_ONBOARD, /**< Use onboard VCTCXO */ CLOCK_SELECT_EXTERNAL /**< Use external clock input */ } bladerf_clock_select; /** * Get the selected clock source * * Reference: https://www.silabs.com/documents/public/data-sheets/Si53304.pdf * * @param dev Device handle * @param[out] sel Clock input source currently in use * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_clock_select(struct bladerf *dev, bladerf_clock_select *sel); /** * Set the clock source * * Reference: https://www.silabs.com/documents/public/data-sheets/Si53304.pdf * * @param dev Device handle * @param[in] sel Clock input source to use * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_set_clock_select(struct bladerf *dev, bladerf_clock_select sel); /** @} (End of FN_BLADERF2_LOW_LEVEL_CLOCK_BUFFER_SELECT) */ /** * @defgroup FN_BLADERF2_LOW_LEVEL_CLOCK_BUFFER_OUTPUT Clock output control * * @{ */ /** * Get the current state of the clock output * * @param dev Device handle * @param[out] state Clock output state * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_clock_output(struct bladerf *dev, bool *state); /** * Set the clock output (enable/disable) * * @param dev Device handle * @param[in] enable Clock output enable * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_set_clock_output(struct bladerf *dev, bool enable); /** @} (End of FN_BLADERF2_LOW_LEVEL_CLOCK_BUFFER_OUTPUT) */ /** @} (End of FN_BLADERF2_LOW_LEVEL_CLOCK_BUFFER) */ /** * @defgroup FN_BLADERF2_LOW_LEVEL_PMIC Power Monitoring * * @{ */ /** * Register identifiers for PMIC */ typedef enum { BLADERF_PMIC_CONFIGURATION, /**< Configuration register (uint16_t) */ BLADERF_PMIC_VOLTAGE_SHUNT, /**< Shunt voltage (float) */ BLADERF_PMIC_VOLTAGE_BUS, /**< Bus voltage (float) */ BLADERF_PMIC_POWER, /**< Load power (float) */ BLADERF_PMIC_CURRENT, /**< Load current (float) */ BLADERF_PMIC_CALIBRATION, /**< Calibration (uint16_t) */ } bladerf_pmic_register; /** * Read value from Power Monitor IC * * Reference: http://www.ti.com/product/INA219 * * @param dev Device handle * @param[in] reg Register to read from * @param[out] val Value read from PMIC * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_pmic_register(struct bladerf *dev, bladerf_pmic_register reg, void *val); /** @} (End of FN_BLADERF2_LOW_LEVEL_PMIC) */ /** * @defgroup FN_BLADERF2_LOW_LEVEL_RF_SWITCHING RF Switching Control * * @{ */ /** * RF switch configuration structure */ typedef struct { uint32_t tx1_rfic_port; /**< Active TX1 output from RFIC */ uint32_t tx1_spdt_port; /**< RF switch configuration for the TX1 path */ uint32_t tx2_rfic_port; /**< Active TX2 output from RFIC */ uint32_t tx2_spdt_port; /**< RF switch configuration for the TX2 path */ uint32_t rx1_rfic_port; /**< Active RX1 input to RFIC */ uint32_t rx1_spdt_port; /**< RF switch configuration for the RX1 path */ uint32_t rx2_rfic_port; /**< Active RX2 input to RFIC */ uint32_t rx2_spdt_port; /**< RF switch configuration for the RX2 path */ } bladerf_rf_switch_config; /** * Read the current RF switching configuration from the bladeRF hardware. * * Queries both the RFIC and the RF switch and passes back a * bladerf_rf_switch_config stucture. * * @param dev Device handle * @param[out] config Switch configuration struct * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_rf_switch_config(struct bladerf *dev, bladerf_rf_switch_config *config); /** @} (End of FN_BLADERF2_LOW_LEVEL_RF_SWITCHING) */ /** @} (End of FN_BLADERF2_LOW_LEVEL) */ /** @} (End of BLADERF2) */ #endif /* BLADERF2_H_ */ bladeRF-2024.05/host/libraries/libbladeRF/include/libbladeRF.h000066400000000000000000004476521457144405000237140ustar00rootroot00000000000000/** * @file libbladeRF.h * * @brief bladeRF library * * Copyright (C) 2013-2017 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef LIBBLADERF_H_ #define LIBBLADERF_H_ #include #include #include /** * @ingroup FN_LIBRARY_VERSION * * libbladeRF API version * * As of libbladeRF v1.5.0, this macro is defined to assist with feature * detection. Generally, this will be used as follows: * * @code * #if defined(LIBBLADERF_API_VERSION) && (LIBBLADERF_API_VERSION >= 0x01050000) * // ... Use features added in libbladeRF v1.5.0 ... * #endif * @endcode * * This value is defined as follows: * `(major << 24) | (minor << 16) | (patch << 8) | (reserved << 0)` * * The reserved field may be used at a later date to denote additions between * releases. It will be set to zero when not used. * * This value is intended to track the values returned by bladerf_version(). * Fields are updated per the scheme defined here: * * https://github.com/Nuand/bladeRF/blob/master/doc/development/versioning.md */ #define LIBBLADERF_API_VERSION (0x02050000) #ifdef __cplusplus extern "C" { #else /** * stdbool.h is not applicable for C++ programs, as the language inherently * provides the bool type. * * Users of Visual Studio 2012 and earlier will need to supply a stdbool.h * implementation, as it is not included with the toolchain. One is provided * with the bladeRF source code. Visual Studio 2013 onward supplies this header. */ #include #endif // clang-format off #if defined _WIN32 || defined __CYGWIN__ # include # define CALL_CONV __cdecl # ifdef __GNUC__ # define API_EXPORT __attribute__ ((dllexport)) # else # define API_EXPORT __declspec(dllexport) # endif #elif defined _DOXYGEN_ONLY_ || defined MATLAB_LINUX_THUNK_BUILD_ /** Marks an API routine to be made visible to the dynamic loader. * This is OS and/or compiler-specific. */ # define API_EXPORT /** Specifies calling convention, if necessary. * This is OS and/or compiler-specific. */ # define CALL_CONV #else # define API_EXPORT __attribute__ ((visibility ("default"))) # define CALL_CONV #endif // clang-format on /** * @defgroup FN_INIT Initialization * * The functions in this section provide the ability query and inspect available * devices, initialize them, and deinitialize them. * * See the \link boilerplate.html Device configuration boilerplate\endlink * page for an overview on how to open and configure a device. * * These functions are thread-safe. * * @{ */ /** This structure is an opaque device handle */ struct bladerf; /** * Backend by which the host communicates with the device */ typedef enum { BLADERF_BACKEND_ANY, /**< "Don't Care" -- use any available * backend */ BLADERF_BACKEND_LINUX, /**< Linux kernel driver */ BLADERF_BACKEND_LIBUSB, /**< libusb */ BLADERF_BACKEND_CYPRESS, /**< CyAPI */ BLADERF_BACKEND_DUMMY = 100, /**< Dummy used for development purposes */ } bladerf_backend; /** Length of device description string, including NUL-terminator */ #define BLADERF_DESCRIPTION_LENGTH 33 /** Length of device serial number string, including NUL-terminator */ #define BLADERF_SERIAL_LENGTH 33 /** * Information about a bladeRF attached to the system */ struct bladerf_devinfo { bladerf_backend backend; /**< Backend to use when connecting to * device */ char serial[BLADERF_SERIAL_LENGTH]; /**< Device serial number string */ uint8_t usb_bus; /**< Bus # device is attached to */ uint8_t usb_addr; /**< Device address on bus */ unsigned int instance; /**< Device instance or ID */ /** Manufacturer description string */ char manufacturer[BLADERF_DESCRIPTION_LENGTH]; char product[BLADERF_DESCRIPTION_LENGTH]; /**< Product description string */ }; /** * Information about a bladeRF attached to the system */ struct bladerf_backendinfo { int handle_count; /**< Backend handle count */ void *handle; /**< Backend handle for device */ int lock_count; /**< Backend lock count */ void *lock; /**< Backend lock for device */ }; /** * Open specified device using a device identifier string. See * bladerf_open_with_devinfo() if a device identifier string is not readily * available. * * The general form of the device identifier string is; * @code{.txt} * :[device=:] [instance=] [serial=] * @endcode * * An empty ("") or NULL device identifier will result in the first * encountered device being opened (using the first discovered backend) * * The 'backend' describes the mechanism used to communicate with the device, * and may be one of the following: * - *: Any available backend * - libusb: libusb (See libusb changelog notes for required version, given * your OS and controller) * - cypress: Cypress CyUSB/CyAPI backend (Windows only) * * If no arguments are provided after the backend, the first encountered * device on the specified backend will be opened. Note that a backend is * required, if any arguments are to be provided. * * Next, any provided arguments are provide as used to find the desired device. * Be sure not to over constrain the search. Generally, only one of the above * is required -- providing all of these may over constrain the search for the * desired device (e.g., if a serial number matches, but not on the specified * bus and address.) * * - device=\:\ * - Specifies USB bus and address. Decimal or hex prefixed by '0x' is * permitted. * - instance=\ * - Nth instance encountered, 0-indexed * - serial=\ * - Device's serial number. * * Below is an example of how to open a device with a specific serial * number, using any avaiable backend supported by libbladeRF: * * @code {.c} * struct bladerf *dev; * int status = bladerf_open(&dev, "*:serial=f12ce1037830a1b27f3ceeba1f521413"); * if (status != 0) { * fprintf(stderr, "Unable to open device: %s\n", * bladerf_strerror(status)); * return status; * } * @endcode * * @param[out] device Update with device handle on success * @param[in] device_identifier Device identifier, formatted as described * above * * @return 0 on success, or value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_open(struct bladerf **device, const char *device_identifier); /** * Close device * * @note Failing to close a device will result in memory leaks. * * @post `device` is deallocated and may no longer be used. * * @param device Device handle previously obtained by bladerf_open(). This * function does nothing if device is NULL. */ API_EXPORT void CALL_CONV bladerf_close(struct bladerf *device); /** * Opens device specified by provided bladerf_devinfo structure * * This function is generally preferred over bladerf_open() when a device * identifier string is not already provided. * * The most common uses of this function are to: * - Open a device based upon the results of bladerf_get_device_list() * - Open a specific device based upon its serial number * * Below is an example of how to use this function to open a device with a * specific serial number: * * @snippet open_via_serial.c example_snippet * * @param[out] device Update with device handle on success * @param[in] devinfo Device specification. If NULL, any available * device will be opened. * * @return 0 on success, or value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_open_with_devinfo(struct bladerf **device, struct bladerf_devinfo *devinfo); /** * Obtain a list of bladeRF devices attached to the system * * @param[out] devices * * @return number of items in returned device list, or value from * \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_device_list(struct bladerf_devinfo **devices); /** * Free device list returned by bladerf_get_device_list() * * @param[inout] devices List of available devices */ API_EXPORT void CALL_CONV bladerf_free_device_list(struct bladerf_devinfo *devices); /** * Initialize a device identifier information structure to a "wildcard" state. * * The values in each field will match any value for that field. * * @note Passing a bladerf_devinfo initialized with this function to * bladerf_open_with_devinfo() will match the first device found. */ API_EXPORT void CALL_CONV bladerf_init_devinfo(struct bladerf_devinfo *info); /** * Fill out a provided bladerf_devinfo structure, given an open device handle. * * @pre `dev` must be a valid device handle. * * @param dev Device handle previously obtained with bladerf_open() * @param[out] info Device information populated by this function * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_devinfo(struct bladerf *dev, struct bladerf_devinfo *info); /** * Fill out a provided bladerf_backendinfo structure, given an open device handle. * * @pre `dev` must be a valid device handle. * * @param dev Device handle previously obtained with bladerf_open() * @param[out] info Backend information populated by this function * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_backendinfo(struct bladerf *dev, struct bladerf_backendinfo *info); /** * Populate a device identifier information structure using the provided * device identifier string. * * @param[in] devstr Device identifier string, formated as described * in the bladerf_open() documentation * @param[out] info Upon success, this will be filled out according to the * provided device identifier string, with wildcards for * any fields that were not provided. * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_devinfo_from_str(const char *devstr, struct bladerf_devinfo *info); /** * Test whether two device identifier information structures match, taking * wildcard values into account. * * @param[in] a the first bladerf_devinfo struct * @param[in] b the second bladerf_devinfo struct */ API_EXPORT bool CALL_CONV bladerf_devinfo_matches(const struct bladerf_devinfo *a, const struct bladerf_devinfo *b); /** * Test whether a provided device string matches a device described by * the provided bladerf_devinfo structure * * @param[in] dev_str Devices string, formated as described in the * the documentation of bladerf_open * @param[in] info Device info to compare with * * @return true upon a match, false otherwise */ API_EXPORT bool CALL_CONV bladerf_devstr_matches(const char *dev_str, struct bladerf_devinfo *info); /** * Retrieve the backend string associated with the specified * backend enumeration value. * * @return A string that can used to specify the `backend` portion of a device * identifier string. (See bladerf_open().) */ API_EXPORT const char *CALL_CONV bladerf_backend_str(bladerf_backend backend); /** * Enable or disable USB device reset operation upon opening a device for * future bladerf_open() and bladerf_open_with_devinfo() calls. * * This operation has been found to be necessary on Linux-based systems for * some USB 3.0 controllers on Linux. * * This does not reset the state of the device in terms of its frequency, * gain, sample rate, etc. settings. * * @param[in] enabled Set true to enable the use of the USB device reset, * and false otherwise. */ API_EXPORT void CALL_CONV bladerf_set_usb_reset_on_open(bool enabled); /** @} (End FN_INIT) */ /** * @defgroup FN_INFO Device properties * * These functions provide the ability to query various pieces of information * from an attached device. * * These functions are thread-safe. * * @{ */ /** * Range structure */ struct bladerf_range { int64_t min; /**< Minimum value */ int64_t max; /**< Maximum value */ int64_t step; /**< Step of value */ float scale; /**< Unit scale */ }; /** * Serial number structure */ struct bladerf_serial { char serial[BLADERF_SERIAL_LENGTH]; /**< Device serial number string */ }; /** * Version structure for FPGA, firmware, libbladeRF, and associated utilities */ struct bladerf_version { uint16_t major; /**< Major version */ uint16_t minor; /**< Minor version */ uint16_t patch; /**< Patch version */ const char *describe; /**< Version string with any additional suffix * information. * * @warning Do not attempt to modify or free() * this string. */ }; /** * FPGA device variant (size) */ typedef enum { BLADERF_FPGA_UNKNOWN = 0, /**< Unable to determine FPGA variant */ BLADERF_FPGA_40KLE = 40, /**< 40 kLE FPGA */ BLADERF_FPGA_115KLE = 115, /**< 115 kLE FPGA */ BLADERF_FPGA_A4 = 49, /**< 49 kLE FPGA (A4) */ BLADERF_FPGA_A5 = 77, /**< 77 kLE FPGA (A5) */ BLADERF_FPGA_A9 = 301 /**< 301 kLE FPGA (A9) */ } bladerf_fpga_size; /** * This enum describes the USB Speed at which the bladeRF is connected. * Speeds not listed here are not supported. */ typedef enum { BLADERF_DEVICE_SPEED_UNKNOWN, BLADERF_DEVICE_SPEED_HIGH, BLADERF_DEVICE_SPEED_SUPER } bladerf_dev_speed; /** * FPGA configuration source * * Note: the numbering of this enum must match NuandFpgaConfigSource in * firmware_common/bladeRF.h */ typedef enum { BLADERF_FPGA_SOURCE_UNKNOWN = 0, /**< Uninitialized/invalid */ BLADERF_FPGA_SOURCE_FLASH = 1, /**< Last FPGA load was from flash */ BLADERF_FPGA_SOURCE_HOST = 2 /**< Last FPGA load was from host */ } bladerf_fpga_source; /** * Query a device's serial number (deprecated) * * @param dev Device handle * @param[out] serial This user-supplied buffer, which must be at least * ::BLADERF_SERIAL_LENGTH bytes, will be updated to * contain a NUL-terminated serial number string. If an * error occurs (as indicated by a non-zero return value), * no data will be written to this buffer. * * @deprecated New code should use ::bladerf_get_serial_struct instead. * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_serial(struct bladerf *dev, char *serial); /** * Query a device's serial number * * @param dev Device handle * @param[out] serial Pointer to a bladerf_serial structure, which will be * populated with a `serial` string on success. * * Example code: * * @code * struct bladerf_serial sn; * * status = bladerf_get_serial_struct(dev, &sn); * if (status < 0) { * // error handling here * } * * printf("Serial number: %s\n", sn.serial); * @endcode * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_serial_struct(struct bladerf *dev, struct bladerf_serial *serial); /** * Query a device's FPGA size * * @param dev Device handle * @param[out] size Will be updated with the on-board FPGA's size. If an * error occurs, no data will be written to this pointer. * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_fpga_size(struct bladerf *dev, bladerf_fpga_size *size); /** * Query a device's expected FPGA bitstream length, in bytes * * @param dev Device handle * @param[out] size Will be updated with expected bitstream length. If an * error occurs, no data will be written to this pointer. * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_fpga_bytes(struct bladerf *dev, size_t *size); /** * Query a device's Flash size * * @param dev Device handle * @param[out] size Will be updated with the size of the onboard flash, * in bytes. If an error occurs, no data will be written * to this pointer. * @param[out] is_guess True if the flash size is a guess (using FPGA size). * False if the flash ID was queried and its size * was successfully decoded. * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_flash_size(struct bladerf *dev, uint32_t *size, bool *is_guess); /** * Query firmware version * * @param dev Device handle * @param[out] version Updated to contain firmware version * * @return 0 on success, value from \ref RETCODES list upon failing to retrieve * this information from the device. */ API_EXPORT int CALL_CONV bladerf_fw_version(struct bladerf *dev, struct bladerf_version *version); /** * Check FPGA configuration status * * @param dev Device handle * * @return 1 if FPGA is configured, 0 if it is not, * and value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_is_fpga_configured(struct bladerf *dev); /** * Query FPGA version * * @param dev Device handle * @param[out] version Updated to contain firmware version * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_fpga_version(struct bladerf *dev, struct bladerf_version *version); /** * Query FPGA configuration source * * Determine whether the FPGA image was loaded from flash, or if it was * loaded from the host, by asking the firmware for the last-known FPGA * configuration source. * * @param dev Device handle * @param[out] source Source of the configuration * * @return 0 on success, ::BLADERF_ERR_UNSUPPORTED if the * BLADERF_CAP_FW_FPGA_SOURCE capability is not present, value from \ref * RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_fpga_source(struct bladerf *dev, bladerf_fpga_source *source); /** * Obtain the bus speed at which the device is operating * * @param dev Device handle * * @return Device speed enumeration */ API_EXPORT bladerf_dev_speed CALL_CONV bladerf_device_speed(struct bladerf *dev); /** * Get the board name * * @param dev Device handle * * @return Pointer to C string with the board's model name, either `bladerf1` * for a bladeRF x40/x115, or `bladerf2` for a bladeRF Micro. */ API_EXPORT const char *CALL_CONV bladerf_get_board_name(struct bladerf *dev); /** @} (End FN_INFO) */ /** * @defgroup FN_CHANNEL Channel control * * The RX and TX channels are independently configurable. As such, many * libbladeRF functions require a ::bladerf_channel parameter to specify the * desired channel. * * These functions are thread-safe. * * @{ */ /** * Channel type * * Example usage: * * @code{.c} * // RX Channel 0 * bladerf_channel ch = BLADERF_CHANNEL_RX(0); * * // RX Channel 1 * bladerf_channel ch = BLADERF_CHANNEL_RX(1); * * // TX Channel 0 * bladerf_channel ch = BLADERF_CHANNEL_TX(0); * * // TX Channel 1 * bladerf_channel ch = BLADERF_CHANNEL_TX(1); * @endcode */ typedef int bladerf_channel; /** * RX Channel Macro * * Example usage: * * @code{.c} * // RX Channel 0 * bladerf_channel ch = BLADERF_CHANNEL_RX(0); * * // RX Channel 1 * bladerf_channel ch = BLADERF_CHANNEL_RX(1); * @endcode */ #define BLADERF_CHANNEL_RX(ch) (bladerf_channel)(((ch) << 1) | 0x0) /** * TX Channel Macro * * Example usage: * * @code{.c} * // TX Channel 0 * bladerf_channel ch = BLADERF_CHANNEL_TX(0); * * // TX Channel 1 * bladerf_channel ch = BLADERF_CHANNEL_TX(1); * @endcode */ #define BLADERF_CHANNEL_TX(ch) (bladerf_channel)(((ch) << 1) | 0x1) /** * Invalid channel */ #define BLADERF_CHANNEL_INVALID (bladerf_channel)(-1) /** @cond IGNORE */ #define BLADERF_DIRECTION_MASK (0x1) /** @endcond */ /** @cond IGNORE */ /* Backwards compatible mapping to `bladerf_module`. */ typedef bladerf_channel bladerf_module; #define BLADERF_MODULE_INVALID BLADERF_CHANNEL_INVALID #define BLADERF_MODULE_RX BLADERF_CHANNEL_RX(0) #define BLADERF_MODULE_TX BLADERF_CHANNEL_TX(0) /** @endcond */ /** * Convenience macro: true if argument is a TX channel */ #define BLADERF_CHANNEL_IS_TX(ch) (ch & BLADERF_TX) /** * Stream direction */ typedef enum { BLADERF_RX = 0, /**< Receive direction */ BLADERF_TX = 1, /**< Transmit direction */ } bladerf_direction; /** * Stream channel layout */ typedef enum { BLADERF_RX_X1 = 0, /**< x1 RX (SISO) */ BLADERF_TX_X1 = 1, /**< x1 TX (SISO) */ BLADERF_RX_X2 = 2, /**< x2 RX (MIMO) */ BLADERF_TX_X2 = 3, /**< x2 TX (MIMO) */ } bladerf_channel_layout; /** * Get the number of RX or TX channels supported by the given device * * @param dev Device handle * @param[in] dir Stream direction * * @return Number of channels */ API_EXPORT size_t CALL_CONV bladerf_get_channel_count(struct bladerf *dev, bladerf_direction dir); /** * @defgroup FN_GAIN Gain * * These functions provide control over the device's RX and TX gain stages. * * These functions are thread-safe. * * @{ */ /** * Gain value, in decibels (dB) * * May be positive or negative. */ typedef int bladerf_gain; /** * Gain control modes * * In general, the default mode is automatic gain control. This will * continuously adjust the gain to maximize dynamic range and minimize clipping. * * @note Implementers are encouraged to simply present a boolean choice between * "AGC On" (::BLADERF_GAIN_DEFAULT) and "AGC Off" (::BLADERF_GAIN_MGC). * The remaining choices are for advanced use cases. */ typedef enum { /** Device-specific default (automatic, when available) * * On the bladeRF x40 and x115 with FPGA versions >= v0.7.0, this is * automatic gain control. * * On the bladeRF 2.0 Micro, this is BLADERF_GAIN_SLOWATTACK_AGC with * reasonable default settings. */ BLADERF_GAIN_DEFAULT, /** Manual gain control * * Available on all bladeRF models. */ BLADERF_GAIN_MGC, /** Automatic gain control, fast attack (advanced) * * Only available on the bladeRF 2.0 Micro. This is an advanced option, and * typically requires additional configuration for ideal performance. */ BLADERF_GAIN_FASTATTACK_AGC, /** Automatic gain control, slow attack (advanced) * * Only available on the bladeRF 2.0 Micro. This is an advanced option, and * typically requires additional configuration for ideal performance. */ BLADERF_GAIN_SLOWATTACK_AGC, /** Automatic gain control, hybrid attack (advanced) * * Only available on the bladeRF 2.0 Micro. This is an advanced option, and * typically requires additional configuration for ideal performance. */ BLADERF_GAIN_HYBRID_AGC, } bladerf_gain_mode; /** Default AGC mode (for backwards compatibility with libbladeRF 1.x) */ #define BLADERF_GAIN_AUTOMATIC BLADERF_GAIN_DEFAULT /** Manual gain control (for backwards compatibility with libbladeRF 1.x) */ #define BLADERF_GAIN_MANUAL BLADERF_GAIN_MGC /** * Mapping between C string description of gain modes and bladerf_gain_mode */ struct bladerf_gain_modes { const char *name; /**< Name of gain mode */ bladerf_gain_mode mode; /**< Gain mode enumeration */ }; /** * Set overall system gain * * This sets an overall system gain, optimally proportioning the gain between * multiple gain stages if applicable. * * @see Use bladerf_get_gain_range() to determine the range of system gain. * * On receive channels, 60 dB is the maximum gain level. * * On transmit channels, 60 dB is defined as approximately 0 dBm. Note that * this is not a calibrated value, and the actual output power will vary based * on a multitude of factors. * * @todo The gain ranges are not shifted to account for external accessories, * such as amplifiers and LNAs. * * @note Values outside the valid gain range will be clamped. * * @param dev Device handle * @param[in] ch Channel * @param[in] gain Desired gain, in dB * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_set_gain(struct bladerf *dev, bladerf_channel ch, bladerf_gain gain); /** * Get overall system gain * * @param dev Device handle * @param[in] ch Channel * @param[out] gain Gain, in dB * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_gain(struct bladerf *dev, bladerf_channel ch, bladerf_gain *gain); /** * Set gain control mode * * Sets the mode for hardware AGC. Not all channels or boards will support * all possible values (e.g. transmit channels); invalid combinations will * return ::BLADERF_ERR_UNSUPPORTED. * * The special value of ::BLADERF_GAIN_DEFAULT will return hardware AGC to * its default value at initialization. * * @see bladerf_gain_mode for implementation guidance * * @param dev Device handle * @param[in] ch Channel * @param[in] mode Desired gain mode * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_set_gain_mode(struct bladerf *dev, bladerf_channel ch, bladerf_gain_mode mode); /** * Get gain control mode * * Gets the current mode for hardware AGC. If the channel or board does not * meaningfully have a gain mode (e.g. transmit channels), mode will be * set to ::BLADERF_GAIN_DEFAULT and `0` will be returned. * * @param dev Device handle * @param[in] ch Channel * @param[out] mode Gain mode * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_gain_mode(struct bladerf *dev, bladerf_channel ch, bladerf_gain_mode *mode); /** * Get available gain control modes * * Populates `modes` with a pointer to an array of structs containing the * supported gain modes. * * This function may be called with `NULL` for `modes` to determine the number * of gain modes supported. * * @see bladerf_gain_mode for implementation guidance * * @param dev Device handle * @param[in] ch Channel * @param[out] modes Supported gain modes * * @return Number of gain modes on success, value from \ref RETCODES list on * failure */ API_EXPORT int CALL_CONV bladerf_get_gain_modes(struct bladerf *dev, bladerf_channel ch, const struct bladerf_gain_modes **modes); /** * Get range of overall system gain * * @note This may vary depending on the configured frequency, so it should be * checked after setting the desired frequency. * * @param dev Device handle * @param[in] ch Channel * @param[out] range Gain range * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_gain_range(struct bladerf *dev, bladerf_channel ch, const struct bladerf_range **range); /** * Set the gain for a specific gain stage * * @note Values outside the valid gain range will be clipped. * * @param dev Device handle * @param[in] ch Channel * @param[in] stage Gain stage name * @param[in] gain Desired gain * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_set_gain_stage(struct bladerf *dev, bladerf_channel ch, const char *stage, bladerf_gain gain); /** * Set the gain for a specific gain stage * * @param dev Device handle * @param[in] ch Channel * @param[in] stage Gain stage name * @param[out] gain Gain * * Note that, in some cases, gain may be negative (e.g. transmit channels). * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_gain_stage(struct bladerf *dev, bladerf_channel ch, const char *stage, bladerf_gain *gain); /** * Get gain range of a specific gain stage * * @note This may vary depending on the configured frequency, so it should be * checked after setting the desired frequency. * * This function may be called with `NULL` for `range` to test if a given gain * range exists. * * @param dev Device handle * @param[in] ch Channel * @param[in] stage Gain stage name * @param[out] range Gain range * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_gain_stage_range(struct bladerf *dev, bladerf_channel ch, const char *stage, const struct bladerf_range **range); /** * Get a list of available gain stages * * This function may be called with `NULL` for `stages`, or 0 for `count`, to * determine the number of gain stages. * * @param dev Device handle * @param[in] ch Channel * @param[out] stages Gain stage names * @param[out] count Number to populate * * @return Number of gain stages on success, value from \ref RETCODES list on * failure */ API_EXPORT int CALL_CONV bladerf_get_gain_stages(struct bladerf *dev, bladerf_channel ch, const char **stages, size_t count); /** @} (End of FN_GAIN) */ /** * @defgroup FN_SAMPLING Sample rate * * This section presents functionality pertaining to configuring the * sample rate and mode of the device's RX and TX channels. * * These functions are thread-safe. * * @{ */ /** * Sample rate, in samples per second (sps) */ typedef unsigned int bladerf_sample_rate; /** * Rational sample rate representation * * Sample rates are in the form of * @f[ * rate = integer + \frac{num}{den} * @f] */ struct bladerf_rational_rate { uint64_t integer; /**< Integer portion */ uint64_t num; /**< Numerator in fractional portion */ uint64_t den; /**< Denominator in fractional portion. This must be * greater than 0. */ }; /** * Configure the channel's sample rate to the specified rate in Hz. * * @note This requires the sample rate is an integer value of Hz. Use * bladerf_set_rational_sample_rate() for more arbitrary values. * * @see Use bladerf_get_sample_rate_range() to determine the range of supported * sample rates. * * @param dev Device handle * @param[in] ch Channel * @param[in] rate Sample rate * @param[out] actual If non-NULL, this is written with the actual * sample rate achieved. * * @return 0 on success, value from \ref RETCODES list upon failure */ API_EXPORT int CALL_CONV bladerf_set_sample_rate(struct bladerf *dev, bladerf_channel ch, bladerf_sample_rate rate, bladerf_sample_rate *actual); /** * Configure the channel's sample rate as a rational fraction of Hz. * * @see Use bladerf_get_sample_rate_range() to determine the range of supported * sample rates. * * @param dev Device handle * @param[in] ch Channel to change * @param[in] rate Rational sample rate * @param[out] actual If non-NULL, this is written with the actual * rational sample rate achieved. * * @return 0 on success, value from \ref RETCODES list upon failure */ API_EXPORT int CALL_CONV bladerf_set_rational_sample_rate(struct bladerf *dev, bladerf_channel ch, struct bladerf_rational_rate *rate, struct bladerf_rational_rate *actual); /** * Get the channel's current sample rate in Hz * * @param dev Device handle * @param[in] ch Channel * @param[out] rate Current sample rate * * @return 0 on success, value from \ref RETCODES list upon failure */ API_EXPORT int CALL_CONV bladerf_get_sample_rate(struct bladerf *dev, bladerf_channel ch, bladerf_sample_rate *rate); /** * Get the channel's supported range of sample rates * * @param dev Device handle * @param[in] ch Channel * @param[out] range Sample rate range * * @return 0 on success, value from \ref RETCODES list upon failure */ API_EXPORT int CALL_CONV bladerf_get_sample_rate_range(struct bladerf *dev, bladerf_channel ch, const struct bladerf_range **range); /** * Get the channel's sample rate in rational Hz * * @param dev Device handle * @param[in] ch Channel * @param[out] rate Current rational sample rate * * @return 0 on success, value from \ref RETCODES list upon failure */ API_EXPORT int CALL_CONV bladerf_get_rational_sample_rate(struct bladerf *dev, bladerf_channel ch, struct bladerf_rational_rate *rate); /** @} (End of FN_SAMPLING) */ /** * @defgroup FN_BANDWIDTH Bandwidth * * This section defines functionality for configuring a channel's bandwidth. In * most cases, one should define the bandwidth to be less than the sample rate * to minimize the impact of aliasing. * * These functions are thread-safe. * * @{ */ /** * Bandwidth, in hertz (Hz) */ typedef unsigned int bladerf_bandwidth; /** * Set the bandwidth of the channel to the specified value in Hz * * The underlying device is capable of a discrete set of bandwidth values. The * caller should check the `actual` parameter to determine which of these * discrete bandwidth values is actually used for the requested bandwidth. * * @see Use bladerf_get_bandwidth_range() to determine the range of supported * bandwidths. * * @param dev Device handle * @param[in] ch Channel * @param[in] bandwidth Desired bandwidth * @param[out] actual If non-NULL, written with the actual bandwidth that * the device was able to achieve. * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_set_bandwidth(struct bladerf *dev, bladerf_channel ch, bladerf_bandwidth bandwidth, bladerf_bandwidth *actual); /** * Get the bandwidth of the channel * * @param dev Device Handle * @param[in] ch Channel * @param[out] bandwidth Actual bandwidth in Hz * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_bandwidth(struct bladerf *dev, bladerf_channel ch, bladerf_bandwidth *bandwidth); /** * Get the supported range of bandwidths for a channel * * @param dev Device Handle * @param[in] ch Channel * @param[out] range Bandwidth range * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_bandwidth_range(struct bladerf *dev, bladerf_channel ch, const struct bladerf_range **range); /** @} (End of FN_BANDWIDTH) */ /** * @defgroup FN_TUNING Frequency * * These functions provide the ability to tune the RX and TX channels. * * See \link tuning.html this page\endlink for more detailed information about * how the API performs this tuning, and for example code snippets. * * These functions are thread-safe. * * @{ */ /** * RF center frequency, in hertz (Hz) * * @see Format macros for fprintf() and fscanf(): `BLADERF_PRIuFREQ`, * `BLADERF_PRIxFREQ`, `BLADERF_SCNuFREQ`, `BLADERF_SCNxFREQ` * * @remark Prior to libbladeRF 2.0.0, frequencies were specified as * `unsigned int`. */ typedef uint64_t bladerf_frequency; /** printf format for frequencies in unsigned decimal */ #define BLADERF_PRIuFREQ PRIu64 /** printf format for frequencies in hexadecimal */ #define BLADERF_PRIxFREQ PRIx64 /** scanf format for frequencies in unsigned decimal */ #define BLADERF_SCNuFREQ SCNu64 /** scanf format for frequencies in hexadecimal */ #define BLADERF_SCNxFREQ SCNx64 /** * Select the appropriate band path given a frequency in Hz. * * @note Most API users will not need to use this function, as * bladerf_set_frequency() calls this internally after tuning the device. * * The high band is used for `frequency` above 1.5 GHz on bladeRF1 and above * 3.0 GHz on bladeRF2. Otherwise, the low band is used. * * @see bladerf_get_frequency_range() to determine the range of supported * frequencies. * * @param dev Device handle * @param[in] ch Channel * @param[in] frequency Tuned frequency * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_select_band(struct bladerf *dev, bladerf_channel ch, bladerf_frequency frequency); /** * Set channel's frequency in Hz. * * @note On the bladeRF1 platform, it is recommended to keep the RX and TX * frequencies at least 1 MHz apart, and to digitally mix on the RX side * if reception closer to the TX frequency is required. * * @note On the bladeRF2, there is one oscillator for all RX channels and one * oscillator for all TX channels. Therefore, changing one channel will * change the frequency of all channels in that direction. * * This function calls bladerf_select_band() internally, and performs all * other tasks required to prepare the channel for the given frequency. * * @see bladerf_get_frequency_range() to determine the range of supported * frequencies. * * @param dev Device handle * @param[in] ch Channel * @param[in] frequency Desired frequency * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_set_frequency(struct bladerf *dev, bladerf_channel ch, bladerf_frequency frequency); /** * Get channel's current frequency in Hz * * @param dev Device handle * @param[in] ch Channel * @param[out] frequency Current frequency * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_frequency(struct bladerf *dev, bladerf_channel ch, bladerf_frequency *frequency); /** * Get the supported range of frequencies for a channel * * @param dev Device handle * @param[in] ch Channel * @param[out] range Frequency range * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_frequency_range(struct bladerf *dev, bladerf_channel ch, const struct bladerf_range **range); /** @} (End of FN_TUNING) */ /** * @defgroup FN_LOOPBACK Internal loopback * * The bladeRF provides a variety of loopback modes to aid in development and * testing. * * In general, the digital or baseband loopback modes provide the most "ideal" * operating conditions, while the internal RF loopback modes introduce more of * the typical nonidealities of analog systems. * * These functions are thread-safe. * * @{ */ /** * Loopback options */ typedef enum { /** Disables loopback and returns to normal operation. */ BLADERF_LB_NONE = 0, /** Firmware loopback inside of the FX3 */ BLADERF_LB_FIRMWARE, /** Baseband loopback. TXLPF output is connected to the RXVGA2 input. */ BLADERF_LB_BB_TXLPF_RXVGA2, /** Baseband loopback. TXVGA1 output is connected to the RXVGA2 input. */ BLADERF_LB_BB_TXVGA1_RXVGA2, /** Baseband loopback. TXLPF output is connected to the RXLPF input. */ BLADERF_LB_BB_TXLPF_RXLPF, /** Baseband loopback. TXVGA1 output is connected to RXLPF input. */ BLADERF_LB_BB_TXVGA1_RXLPF, /** * RF loopback. The TXMIX output, through the AUX PA, is connected to the * output of LNA1. */ BLADERF_LB_RF_LNA1, /** * RF loopback. The TXMIX output, through the AUX PA, is connected to the * output of LNA2. */ BLADERF_LB_RF_LNA2, /** * RF loopback. The TXMIX output, through the AUX PA, is connected to the * output of LNA3. */ BLADERF_LB_RF_LNA3, /** RFIC digital loopback (built-in self-test) */ BLADERF_LB_RFIC_BIST, } bladerf_loopback; /** * Mapping of human-readable names to loopback modes */ struct bladerf_loopback_modes { const char *name; /**< Name of loopback mode */ bladerf_loopback mode; /**< Loopback mode enumeration */ }; /** * Get loopback modes * * Populates `modes` with a pointer to an array of structs containing the * supported loopback modes. * * This function may be called with `NULL` for `modes` to determine the number * of loopback modes supported. * * @param dev Device handle * @param[out] modes Supported loopback modes * * @return Number of loopback modes on success, value from \ref RETCODES list * on failure */ API_EXPORT int CALL_CONV bladerf_get_loopback_modes( struct bladerf *dev, const struct bladerf_loopback_modes **modes); /** * Test if a given loopback mode is supported on this device. * * @param dev Device handle * @param[in] mode bladerf_loopback enum to check * * @return true if supported, false if not (or on error) */ API_EXPORT bool CALL_CONV bladerf_is_loopback_mode_supported( struct bladerf *dev, bladerf_loopback mode); /** * Apply specified loopback mode * * @note Loopback modes should only be enabled or disabled while the RX and TX * channels are both disabled (and therefore, when no samples are being * actively streamed). Otherwise, unexpected behavior may occur. * * @param dev Device handle * @param[in] lb Loopback mode. Note that BLADERF_LB_NONE disables the * use of loopback functionality. * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_set_loopback(struct bladerf *dev, bladerf_loopback lb); /** * Get current loopback mode * * @param dev Device handle * @param[out] lb Current loopback mode * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_loopback(struct bladerf *dev, bladerf_loopback *lb); /** @} (End of FN_LOOPBACK) */ /** * @defgroup FN_TRIG Triggers * * Trigger functionality introduced in bladeRF FPGA v0.6.0 allows TX and/or RX * samples to be gated via a trigger signal. This allows multiple devices to * synchronize their TX/RX operations upon the reception of a trigger event. * * The set of functions presented in this section of the API provides control * over this triggering functionality. It is intended that these functions be * used \b prior to starting sample streams. Attempting to use these functions * while streaming may yield undefined and undesirable behavior. * * These functions are thread-safe. * * For devices running at the same sample rate, the trigger event should * achieve synchronization within +/- 1 sample on each device in the chain. * * @note As of FPGA v0.6.0, `mini_exp[1]` has been allocated as the trigger * signal. However, this API section is designed to allow future signals * to be added, including users' software and hardware customizations. * * @note Important: Ensure that you disarm triggers before * stopping sample streams (i.e., calling bladerf_enable_module() with * `enable = false`). Otherwise, the operation of shutting down streams * will block for the entire duration of the stream timeout (or infinitely * if the timeouts were set to 0). * * These functions are thread-safe. * * The standard usage of these functions is shown below. This example assumes: * * - The two devices are connected such they share a common ground and their * `mini_exp[1]` pins are connected. `mini_exp[1]` is J71-4 on bladeRF * x40/x115, and J51-1 on bladeRF xA4/xA5/xA9. * * - Both devices are already configured to utilize a common clock signal via * the external SMB connection. Generally, this will consist of one device * to outputting its reference clock via the SMB clock port, and * configuring the other device(s) to use the SMB clock port as a reference * clock input. This may be achieved using the bladerf_set_smb_mode() * function, found in the \ref FN_SMB_CLOCK section. * * * @code{.c} * * int status; * bladerf_channel channel = BLADERF_CHANNEL_RX(0); * bladerf_trigger_signal signal = BLADERF_TRIGGER_J71_4; * * // Allocate and initialize a bladerf_trigger structure for each * // trigger in the system. * struct bladerf_trigger trig_master, trig_slave; * * status = bladerf_trigger_init(dev_master, channel, signal, &trig_master); * if (status == 0) { * trig_master.role = BLADERF_TRIGGER_ROLE_MASTER; * } else { * goto handle_error; * } * * status = bladerf_trigger_init(dev_slave1, channel, signal, &trig_slave); * if (status == 0) { * master_rx.role = BLADERF_TRIGGER_ROLE_SLAVE; * } else { * goto handle_error; * } * * // Arm the triggering functionality on each device * status = bladerf_trigger_arm(dev_master, &trig_master, true, 0, 0); * if (status != 0) { * goto handle_error; * } * * status = bladerf_trigger_arm(dev_slave, &trig_slave, true, 0, 0); * if (status != 0) { * goto handle_error; * } * * // Call bladerf_sync_config() and bladerf_sync_rx() on each device. * // Ensure the timeout parameters used are long enough to accommodate * // the expected time until the trigger will be fired. * status = start_rx_streams(dev_master, dev_slave); * if (status != 0) { * goto handle_error; * } * * // Fire the trigger signal * status = bladerf_trigger_fire(dev_master, &trig_master); * if (status != 0) { * goto handle_error; * } * * // Handle RX signals and then shut down streams. * // Synchronized samples should now be reaching the host following the * // reception of the external trigger signal. * status = handle_rx_operations(dev_master, dev_slave); * if (status != 0) { * goto handle_error; * } * * // Disable triggering on all devices to restore normal RX operation * trig_master.role = BLADERF_TRIGGER_ROLE_DISABLED; * status = bladerf_trigger_arm(dev_master, &trig_master, false, 0, 0); * if (status != 0) { * goto handle_error; * } * * trig_slave.role = BLADERF_TRIGGER_ROLE_DISABLED; * status = bladerf_trigger_arm(dev_master, &trig_slave, false, 0, 0); * if (status != 0) { * goto handle_error; * } * * @endcode * * @{ */ /** * This value denotes the role of a device in a trigger chain. */ typedef enum { /** Invalid role selection */ BLADERF_TRIGGER_ROLE_INVALID = -1, /** * Triggering functionality is disabled on this device. Samples are not * gated and the trigger signal is an input. */ BLADERF_TRIGGER_ROLE_DISABLED, /** * This device is the trigger master. Its trigger signal will be an output * and this device will determine when all devices shall trigger. */ BLADERF_TRIGGER_ROLE_MASTER, /** * This device is the trigger slave. This device's trigger signal will be an * input and this devices will wait for the master's trigger signal * assertion. */ BLADERF_TRIGGER_ROLE_SLAVE, } bladerf_trigger_role; /** * Trigger signal selection * * This selects pin or signal used for the trigger. * * @note ::BLADERF_TRIGGER_J71_4, ::BLADERF_TRIGGER_J51_1, and * ::BLADERF_TRIGGER_MINI_EXP_1 are the only valid options as of FPGA * v0.6.0. All three values have the same behavior and may be used * interchangably. * * The `BLADERF_TRIGGER_USER_*` values have been added to allow users to modify * both hardware and software implementations to add custom triggers, while * maintaining libbladeRF API compatibility. Official bladeRF releases will * not utilize these user signal IDs. */ typedef enum { BLADERF_TRIGGER_INVALID = -1, /**< Invalid selection */ BLADERF_TRIGGER_J71_4, /**< J71 pin 4, mini_exp[1] on x40/x115 */ BLADERF_TRIGGER_J51_1, /**< J51 pin 1, mini_exp[1] on xA4/xA5/xA9 */ BLADERF_TRIGGER_MINI_EXP_1, /**< mini_exp[1], hardware-independent */ BLADERF_TRIGGER_USER_0 = 128, /**< Reserved for user SW/HW customizations */ BLADERF_TRIGGER_USER_1, /**< Reserved for user SW/HW customizations */ BLADERF_TRIGGER_USER_2, /**< Reserved for user SW/HW customizations */ BLADERF_TRIGGER_USER_3, /**< Reserved for user SW/HW customizations */ BLADERF_TRIGGER_USER_4, /**< Reserved for user SW/HW customizations */ BLADERF_TRIGGER_USER_5, /**< Reserved for user SW/HW customizations */ BLADERF_TRIGGER_USER_6, /**< Reserved for user SW/HW customizations */ BLADERF_TRIGGER_USER_7, /**< Reserved for user SW/HW customizations */ } bladerf_trigger_signal; /** * Trigger configuration * * It is highly recommended to keep a 1:1 relationship between triggers * in the physical setup and instances of this structure. (i.e., do not re-use * and change the same bladerf_trigger) for multiple triggers.) */ struct bladerf_trigger { bladerf_channel channel; /**< RX/TX channel associated with trigger */ bladerf_trigger_role role; /**< Role of the device in a trigger chain */ bladerf_trigger_signal signal; /**< Pin or signal being used */ uint64_t options; /**< Reserved field for future options. This * is unused and should be set to 0. */ }; /** * Initialize a bladerf_trigger structure based upon the current configuration * of the specified trigger signal. * * While it is possible to simply declare and manually fill in a bladerf_trigger * structure, it is recommended to use this function to retrieve the current * `role` and `options` values. * * @param dev Device to query * @param[in] ch Channel * @param[in] signal Trigger signal to query * @param[out] trigger Updated to describe trigger * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_trigger_init(struct bladerf *dev, bladerf_channel ch, bladerf_trigger_signal signal, struct bladerf_trigger *trigger); /** * Configure and (dis)arm a trigger on the specified device. * * @note If trigger->role is set to ::BLADERF_TRIGGER_ROLE_DISABLED, this will * inherently disarm an armed trigger and clear any fire requests, * regardless of the value of `arm`. * * @param dev Device to configure * @param[in] trigger Trigger configure * @param[in] arm (Re)Arm trigger if true, disarm if false * @param[in] resv1 Reserved for future use. Set to 0. * @param[in] resv2 Reserved for future use. Set to 0. * * @warning Configuring two devices in the trigger chain (or both RX and TX on a * single device) as masters can damage the associated FPGA pins, as * this would cause contention over the trigger signal. Ensure only * one device in the chain is configured as the master! * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_trigger_arm(struct bladerf *dev, const struct bladerf_trigger *trigger, bool arm, uint64_t resv1, uint64_t resv2); /** * Fire a trigger event. * * Calling this functiona with a trigger whose role is anything other than * ::BLADERF_TRIGGER_REG_MASTER will yield a BLADERF_ERR_INVAL return value. * * @param dev Device handle * @param[in] trigger Trigger to assert * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_trigger_fire(struct bladerf *dev, const struct bladerf_trigger *trigger); /** * Query the fire request status of a master trigger * * @param dev Device handle * @param[in] trigger Trigger to query * @param[out] is_armed Set to true if the trigger is armed, and false * otherwise. May be NULL. * @param[out] has_fired Set to true if the trigger has fired, and false * otherwise. May be NULL. * @param[out] fire_requested Only applicable to a trigger master. * Set to true if a fire request has been * previously submitted. May be NULL. * @param[out] resv1 Reserved for future use. * This field is written as 0 if not set to NULL. * @param[out] resv2 Reserved for future use. * This field is written as 0 if not set to NULL. * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_trigger_state(struct bladerf *dev, const struct bladerf_trigger *trigger, bool *is_armed, bool *has_fired, bool *fire_requested, uint64_t *resv1, uint64_t *resv2); /** @} (End of FN_TRIG) */ /** * @defgroup FN_RECEIVE_MUX Receive Mux * * These functions are thread-safe. * * @{ */ /** * RX Mux modes * * These values describe the source of samples to the RX FIFOs in the FPGA. * They map directly to rx_mux_mode_t inside the FPGA's source code. */ typedef enum { /** Invalid RX Mux mode selection */ BLADERF_RX_MUX_INVALID = -1, /** Read baseband samples. This is the default mode of operation. */ BLADERF_RX_MUX_BASEBAND = 0x0, /** * Read samples from 12 bit counters. * * The I channel counts up while the Q channel counts down. */ BLADERF_RX_MUX_12BIT_COUNTER = 0x1, /** * Read samples from a 32 bit up-counter. * * I and Q form a little-endian value. */ BLADERF_RX_MUX_32BIT_COUNTER = 0x2, /* RX_MUX setting 0x3 is reserved for future use */ /** Read samples from the baseband TX input to the FPGA (from the host) */ BLADERF_RX_MUX_DIGITAL_LOOPBACK = 0x4, } bladerf_rx_mux; /** @cond IGNORE */ /* Backwards compatible mapping for `bladerf_rx_mux`. */ #define BLADERF_RX_MUX_BASEBAND_LMS BLADERF_RX_MUX_BASEBAND /** @endcond */ /** * Set the current RX Mux mode * * @param dev Device handle * @param[in] mux Mux mode. * * @returns 0 on success, value from \ref RETCODES list on failure. */ API_EXPORT int CALL_CONV bladerf_set_rx_mux(struct bladerf *dev, bladerf_rx_mux mux); /** * Gets the current RX Mux mode * * @param dev Device handle * @param[out] mode Current RX Mux mode * * @returns 0 on success, value from \ref RETCODES list on failure. */ API_EXPORT int CALL_CONV bladerf_get_rx_mux(struct bladerf *dev, bladerf_rx_mux *mode); /** @} (End of FN_RECEIVE_MUX) */ /** * @defgroup FN_SCHEDULED_TUNING Scheduled Tuning * * These functions are thread-safe. * * @{ */ /** * @ingroup STREAMING * * Timestamp, in ticks * * A channel's timestamp typically increments at the sample rate. * * @see Format macros for fprintf() and fscanf(): `BLADERF_PRIuTS`, * `BLADERF_PRIxTS`, `BLADERF_SCNuTS`, `BLADERF_SCNxTS` */ typedef uint64_t bladerf_timestamp; /** * Specifies that scheduled retune should occur immediately when using * bladerf_schedule_retune(). */ #define BLADERF_RETUNE_NOW (bladerf_timestamp)0 /** * Quick Re-tune parameters. * * @note These parameters, which are associated with the RFIC's register values, * are sensitive to changes in the operating environment (e.g., * temperature). * * This structure should be filled in via bladerf_get_quick_tune(). */ struct bladerf_quick_tune { union { /* bladeRF1 quick tune parameters */ struct { uint8_t freqsel; /**< Choice of VCO and VCO division factor */ uint8_t vcocap; /**< VCOCAP value */ uint16_t nint; /**< Integer portion of LO frequency value */ uint32_t nfrac; /**< Fractional portion of LO frequency value */ uint8_t flags; /**< Flag bits used internally by libbladeRF */ uint8_t xb_gpio; /**< Flag bits used to configure XB */ }; /* bladeRF2 quick tune parameters */ struct { uint16_t nios_profile; /**< Profile number in Nios */ uint8_t rffe_profile; /**< Profile number in RFFE */ uint8_t port; /**< RFFE port settings */ uint8_t spdt; /**< External SPDT settings */ }; }; }; /** * Schedule a frequency retune to occur at specified sample timestamp value. * * @pre bladerf_sync_config() must have been called with the * \ref BLADERF_FORMAT_SC16_Q11_META format for the associated channel in * order to enable timestamps. (The timestamped metadata format must be * enabled in order to use this function.) * * @param dev Device handle * @param[in] ch Channel * @param[in] timestamp Channel's sample timestamp to perform the * retune operation. If this value is in the past, * the retune will occur immediately. To perform * the retune immediately, specify * ::BLADERF_RETUNE_NOW. * @param[in] frequency Desired frequency, in Hz. * @param[in] quick_tune If non-NULL, the provided "quick retune" values * will be applied to the transceiver to tune it * according to a previous state retrieved via * bladerf_get_quick_tune(). * * @return 0 on success, value from \ref RETCODES list on failure. * * @note If the underlying queue of scheduled retune requests becomes full, \ref * BLADERF_ERR_QUEUE_FULL will be returned. In this case, it should be * possible to schedule a retune after the timestamp of one of the earlier * requests occurs. * @note NULL quick_tune parameters are not supported by the bladeRF 2.0 micro. */ API_EXPORT int CALL_CONV bladerf_schedule_retune(struct bladerf *dev, bladerf_channel ch, bladerf_timestamp timestamp, bladerf_frequency frequency, struct bladerf_quick_tune *quick_tune); /** * Cancel all pending scheduled retune operations for the specified channel. * * This will be done automatically during bladerf_close() to ensure that * previously queued retunes do not continue to occur after closing and then * later re-opening a device. * * @param dev Device handle * @param[in] ch Channel * * @return 0 on success, value from \ref RETCODES list on failure. */ API_EXPORT int CALL_CONV bladerf_cancel_scheduled_retunes(struct bladerf *dev, bladerf_channel ch); /** * Fetch parameters used to tune the transceiver to the current frequency for * use with bladerf_schedule_retune() to perform a "quick retune." * * This allows for a faster retune, with a potential trade off of increased * phase noise. * * @note These parameters are sensitive to changes in the operating environment, * and should be "refreshed" if planning to use the "quick retune" * functionality over a long period of time. * * @pre bladerf_set_frequency() or bladerf_schedule_retune() have previously * been used to retune to the desired frequency. * * @param dev Device handle * @param[in] ch Channel * @param[out] quick_tune Quick retune parameters * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_quick_tune(struct bladerf *dev, bladerf_channel ch, struct bladerf_quick_tune *quick_tune); /** @} (End of FN_SCHEDULED_TUNING) */ /** * @defgroup FN_CORR Correction * * This group provides routines for applying manual offset, gain, and phase * corrections. * * These functions are thread-safe. * * @{ */ /** * Correction value, in arbitrary units * * @see ::bladerf_correction * @see bladerf_get_correction() * @see bladerf_set_correction() */ typedef int16_t bladerf_correction_value; /** * Correction parameter selection * * These values specify the correction parameter to modify or query when calling * bladerf_set_correction() or bladerf_get_correction(). Note that the meaning * of the `value` parameter to these functions depends upon the correction * parameter. * */ typedef enum { /** * Adjusts the in-phase DC offset. Valid values are [-2048, 2048], which are * scaled to the available control bits. */ BLADERF_CORR_DCOFF_I, /** * Adjusts the quadrature DC offset. Valid values are [-2048, 2048], which * are scaled to the available control bits. */ BLADERF_CORR_DCOFF_Q, /** * Adjusts phase correction of [-10, 10] degrees, via a provided count value * of [-4096, 4096]. */ BLADERF_CORR_PHASE, /** * Adjusts gain correction value in [-1.0, 1.0], via provided values in the * range of [-4096, 4096]. */ BLADERF_CORR_GAIN } bladerf_correction; /** @cond IGNORE */ /* Backwards compatible mapping to `bladerf_correction`. */ #define BLADERF_CORR_LMS_DCOFF_I BLADERF_CORR_DCOFF_I #define BLADERF_CORR_LMS_DCOFF_Q BLADERF_CORR_DCOFF_Q #define BLADERF_CORR_FPGA_PHASE BLADERF_CORR_PHASE #define BLADERF_CORR_FPGA_GAIN BLADERF_CORR_GAIN /** @endcond */ /** * Set the value of the specified configuration parameter * * @see The ::bladerf_correction description for the valid ranges of the `value` * parameter. * * @param dev Device handle * @param[in] ch Channel * @param[in] corr Correction type * @param[in] value Value to apply * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_set_correction(struct bladerf *dev, bladerf_channel ch, bladerf_correction corr, bladerf_correction_value value); /** * Obtain the current value of the specified configuration parameter * * @param dev Device handle * @param[in] ch Channel * @param[in] corr Correction type * @param[out] value Current value * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_correction(struct bladerf *dev, bladerf_channel ch, bladerf_correction corr, bladerf_correction_value *value); /** @} (End of FN_CORR) */ /** @} (End of FN_CHANNEL) */ /** * @defgroup STREAMING Streaming * * This section defines the streaming APIs. * * @{ */ /** printf format for timestamps in unsigned decimal */ #define BLADERF_PRIuTS PRIu64 /** printf format for timestamps in hexadecimal */ #define BLADERF_PRIxTS PRIx64 /** scanf format for timestamps in unsigned decimal */ #define BLADERF_SCNuTS SCNu64 /** scanf format for timestamps in hexadecimal */ #define BLADERF_SCNxTS SCNx64 /** * @defgroup STREAMING_FORMAT Formats * * This section defines the available sample formats and metadata flags. * * @{ */ /** * Sample format */ typedef enum { /** * Signed, Complex 16-bit Q11. This is the native format of the DAC data. * * Values in the range [-2048, 2048) are used to represent [-1.0, 1.0). * Note that the lower bound here is inclusive, and the upper bound is * exclusive. Ensure that provided samples stay within [-2048, 2047]. * * Samples consist of interleaved IQ value pairs, with I being the first * value in the pair. Each value in the pair is a right-aligned, * little-endian int16_t. The FPGA ensures that these values are * sign-extended. * *
     *  .--------------.--------------.
     *  | Bits 31...16 | Bits 15...0  |
     *  +--------------+--------------+
     *  |   Q[15..0]   |   I[15..0]   |
     *  `--------------`--------------`
     * 
* * When using this format the minimum required buffer size, in bytes, is: * * \f$ * buffer\_size\_min = (2 \times num\_samples \times num\_channels \times * sizeof(int16\_t)) * \f$ * * For example, to hold 2048 samples for one channel, a buffer must be at * least 8192 bytes large. * * When a multi-channel ::bladerf_channel_layout is selected, samples * will be interleaved per channel. For example, with ::BLADERF_RX_X2 * or ::BLADERF_TX_X2 (x2 MIMO), the buffer is structured like: * *
     *  .-------------.--------------.--------------.------------------.
     *  | Byte offset | Bits 31...16 | Bits 15...0  |    Description   |
     *  +-------------+--------------+--------------+------------------+
     *  |    0x00     |     Q0[0]    |     I0[0]    |  Ch 0, sample 0  |
     *  |    0x04     |     Q1[0]    |     I1[0]    |  Ch 1, sample 0  |
     *  |    0x08     |     Q0[1]    |     I0[1]    |  Ch 0, sample 1  |
     *  |    0x0c     |     Q1[1]    |     I1[1]    |  Ch 1, sample 1  |
     *  |    ...      |      ...     |      ...     |        ...       |
     *  |    0xxx     |     Q0[n]    |     I0[n]    |  Ch 0, sample n  |
     *  |    0xxx     |     Q1[n]    |     I1[n]    |  Ch 1, sample n  |
     *  `-------------`--------------`--------------`------------------`
     * 
* * Per the `buffer_size_min` formula above, 2048 samples for two channels * will generate 4096 total samples, and require at least 16384 bytes. * * Implementors may use the interleaved buffers directly, or may use * bladerf_deinterleave_stream_buffer() / bladerf_interleave_stream_buffer() * if contiguous blocks of samples are desired. */ BLADERF_FORMAT_SC16_Q11, /** * This format is the same as the ::BLADERF_FORMAT_SC16_Q11 format, except * the first 4 samples in every block* of samples are replaced with * metadata organized as follows. All fields are little-endian byte order. * *
     *  .-------------.------------.----------------------------------.
     *  | Byte offset |   Type     | Description                      |
     *  +-------------+------------+----------------------------------+
     *  |    0x00     | uint16_t   | Reserved                         |
     *  |    0x02     |  uint8_t   | Stream flags                     |
     *  |    0x03     |  uint8_t   | Meta version ID                  |
     *  |    0x04     | uint64_t   | 64-bit Timestamp                 |
     *  |    0x0c     | uint32_t   | BLADERF_META_FLAG_* flags        |
     *  |  0x10..end  |            | Payload                          |
     *  `-------------`------------`----------------------------------`
     * 
* * For IQ sample meta mode, the Meta version ID and Stream flags should * currently be set to values 0x00 and 0x00, respectively. * * *The number of samples in a block is dependent upon * the USB speed being used: * - USB 2.0 Hi-Speed: 256 samples * - USB 3.0 SuperSpeed: 512 samples * * When using the bladerf_sync_rx() and bladerf_sync_tx() functions, the * above details are entirely transparent; the caller need not be concerned * with these details. These functions take care of packing/unpacking the * metadata into/from the underlying stream and convey this information * through the ::bladerf_metadata structure. * * However, when using the \ref FN_STREAMING_ASYNC interface, the user is * responsible for manually packing/unpacking the above metadata into/from * their samples. * * @see STREAMING_FORMAT_METADATA * @see The `src/streaming/metadata.h` header in the libbladeRF codebase. */ BLADERF_FORMAT_SC16_Q11_META, /** * This format is for exchanging packets containing digital payloads with * the FPGA. A packet is generall a digital payload, that the FPGA then * processes to either modulate, demodulate, filter, etc. * * All fields are little-endian byte order. * *
     *  .-------------.------------.----------------------------------.
     *  | Byte offset |   Type     | Description                      |
     *  +-------------+------------+----------------------------------+
     *  |    0x00     | uint16_t   | Packet length (in 32bit DWORDs)  |
     *  |    0x02     |  uint8_t   | Packet flags                     |
     *  |    0x03     |  uint8_t   | Packet core ID                   |
     *  |    0x04     | uint64_t   | 64-bit Timestamp                 |
     *  |    0x0c     | uint32_t   | BLADERF_META_FLAG_* flags        |
     *  |  0x10..end  |            | Payload                          |
     *  `-------------`------------`----------------------------------`
     * 
* * A target core (for example a modem) must be specified when calling the * bladerf_sync_rx() and bladerf_sync_tx() functions. * * When in packet mode, lengths for all functions and data formats are * expressed in number of 32-bit DWORDs. As an example, a 12 byte packet * is considered to be 3 32-bit DWORDs long. * * This packet format does not send or receive raw IQ samples. The digital * payloads contain configurations, and digital payloads that are specific * to the digital core to which they are addressed. It is the FPGA core * that should generate, interpret, and process the digital payloads. * * With the exception of packet lenghts, no difference should exist between * USB 2.0 Hi-Speed or USB 3.0 SuperSpeed for packets for this streaming * format. * * @see STREAMING_FORMAT_METADATA * @see The `src/streaming/metadata.h` header in the libbladeRF codebase. */ BLADERF_FORMAT_PACKET_META, /** * Signed, Complex 8-bit Q8. This is the native format of the DAC data. * * Values in the range [-128, 128) are used to represent [-1.0, 1.0). * Note that the lower bound here is inclusive, and the upper bound is * exclusive. Ensure that provided samples stay within [-128, 127]. * * Samples consist of interleaved IQ value pairs, with I being the first * value in the pair. Each value in the pair is a right-aligned int8_t. * The FPGA ensures that these values are sign-extended. * *
     *  .--------------.--------------.
     *  | Bits 15...8  | Bits  7...0  |
     *  +--------------+--------------+
     *  |    Q[7..0]   |    I[7..0]   |
     *  `--------------`--------------`
     * 
* * When using this format the minimum required buffer size, in bytes, is: * * \f$ * buffer\_size\_min = (2 \times num\_samples \times num\_channels \times * sizeof(int8\_t)) * \f$ * * For example, to hold 2048 samples for one channel, a buffer must be at * least 4096 bytes large. * * When a multi-channel ::bladerf_channel_layout is selected, samples * will be interleaved per channel. For example, with ::BLADERF_RX_X2 * or ::BLADERF_TX_X2 (x2 MIMO), the buffer is structured like: * *
     *  .-------------.--------------.--------------.------------------.
     *  | Byte offset | Bits 15...8  | Bits  7...0  |    Description   |
     *  +-------------+--------------+--------------+------------------+
     *  |    0x00     |     Q0[0]    |     I0[0]    |  Ch 0, sample 0  |
     *  |    0x02     |     Q1[0]    |     I1[0]    |  Ch 1, sample 0  |
     *  |    0x04     |     Q0[1]    |     I0[1]    |  Ch 0, sample 1  |
     *  |    0x06     |     Q1[1]    |     I1[1]    |  Ch 1, sample 1  |
     *  |    ...      |      ...     |      ...     |        ...       |
     *  |    0xxx     |     Q0[n]    |     I0[n]    |  Ch 0, sample n  |
     *  |    0xxx     |     Q1[n]    |     I1[n]    |  Ch 1, sample n  |
     *  `-------------`--------------`--------------`------------------`
     * 
* * Per the `buffer_size_min` formula above, 2048 samples for two channels * will generate 4096 total samples, and require at least 8192 bytes. * * Implementors may use the interleaved buffers directly, or may use * bladerf_deinterleave_stream_buffer() / bladerf_interleave_stream_buffer() * if contiguous blocks of samples are desired. */ BLADERF_FORMAT_SC8_Q7, /** * This format is the same as the ::BLADERF_FORMAT_SC8_Q7 format, except * the first 4 samples in every block* of samples are replaced with * metadata organized as follows. All fields are little-endian byte order. * *
     *  .-------------.------------.----------------------------------.
     *  | Byte offset |   Type     | Description                      |
     *  +-------------+------------+----------------------------------+
     *  |    0x00     | uint16_t   | Reserved                         |
     *  |    0x02     |  uint8_t   | Stream flags                     |
     *  |    0x03     |  uint8_t   | Meta version ID                  |
     *  |    0x04     | uint64_t   | 64-bit Timestamp                 |
     *  |    0x0c     | uint32_t   | BLADERF_META_FLAG_* flags        |
     *  |  0x10..end  |            | Payload                          |
     *  `-------------`------------`----------------------------------`
     * 
* * For IQ sample meta mode, the Meta version ID and Stream flags should * currently be set to values 0x00 and 0x00, respectively. * * *The number of samples in a block is dependent upon * the USB speed being used: * - USB 2.0 Hi-Speed: 256 samples * - USB 3.0 SuperSpeed: 512 samples * * When using the bladerf_sync_rx() and bladerf_sync_tx() functions, the * above details are entirely transparent; the caller need not be concerned * with these details. These functions take care of packing/unpacking the * metadata into/from the underlying stream and convey this information * through the ::bladerf_metadata structure. * * However, when using the \ref FN_STREAMING_ASYNC interface, the user is * responsible for manually packing/unpacking the above metadata into/from * their samples. * * @see STREAMING_FORMAT_METADATA * @see The `src/streaming/metadata.h` header in the libbladeRF codebase. */ BLADERF_FORMAT_SC8_Q7_META, } bladerf_format; /** * @defgroup STREAMING_FORMAT_METADATA Metadata structure and flags * * @{ */ /* * Metadata status bits * * These are used in conjunction with the bladerf_metadata structure's `status` * field. */ /** * A sample overrun has occurred. * * This indicates that either the host (more likely) or the FPGA is not keeping * up with the incoming samples. */ #define BLADERF_META_STATUS_OVERRUN (1 << 0) /** * A sample underrun has occurred. * * This generally only occurs on the TX channel when the FPGA is starved of * samples. * * @note libbladeRF does not report this status. It is here for future use. */ #define BLADERF_META_STATUS_UNDERRUN (1 << 1) /* * Metadata flags * * These are used in conjunction with the bladerf_metadata structure's `flags` * field. */ /** * Mark the associated buffer as the start of a burst transmission. * * @note This is only used for the bladerf_sync_tx() call. * * When using this flag, the bladerf_metadata::timestamp field should contain * the timestamp at which samples should be sent. * * Between specifying the ::BLADERF_META_FLAG_TX_BURST_START and * ::BLADERF_META_FLAG_TX_BURST_END flags, there is no need for the user to the * bladerf_metadata::timestamp field because the library will ensure the * correct value is used, based upon the timestamp initially provided and * the number of samples that have been sent. */ #define BLADERF_META_FLAG_TX_BURST_START (1 << 0) /** * Mark the associated buffer as the end of a burst transmission. This will * flush the remainder of the sync interface's current working buffer and * enqueue samples into the hardware's transmit FIFO. * * As of libbladeRF v1.3.0, it is no longer necessary for the API user to ensure * that the final 3 samples of a burst are \f$0 + 0 j\f$. libbladeRF now ensures * this hardware requirement is upheld. * * Specifying this flag and flushing the sync interface's working buffer implies * that the next timestamp that can be transmitted is the current timestamp plus * the duration of the burst that this flag is ending and the remaining * length of the remaining buffer that is flushed. (The buffer size, in this * case, is the `buffer_size` value passed to the previous bladerf_sync_config() * call.) * * Rather than attempting to keep track of the number of samples sent with * respect to buffer sizes, it is easiest to always assume 1 buffer's worth of * time is required between bursts. In this case "buffer" refers to the * `buffer_size` parameter provided to bladerf_sync_config().) If this is too * much time, consider using the ::BLADERF_META_FLAG_TX_UPDATE_TIMESTAMP * flag. * * @note This is only used for the bladerf_sync_tx() call. It is ignored by the * bladerf_sync_rx() call. */ #define BLADERF_META_FLAG_TX_BURST_END (1 << 1) /** * Use this flag in conjunction with ::BLADERF_META_FLAG_TX_BURST_START to * indicate that the burst should be transmitted as soon as possible, as opposed * to waiting for a specific timestamp. * * When this flag is used, there is no need to set the * bladerf_metadata::timestamp field. */ #define BLADERF_META_FLAG_TX_NOW (1 << 2) /** * Use this flag within a burst (i.e., between the use of * ::BLADERF_META_FLAG_TX_BURST_START and ::BLADERF_META_FLAG_TX_BURST_END) to * specify that bladerf_sync_tx() should read the bladerf_metadata::timestamp * field and zero-pad samples up to the specified timestamp. The provided * samples will then be transmitted at that timestamp. * * Use this flag when potentially flushing an entire buffer via the * ::BLADERF_META_FLAG_TX_BURST_END would yield an unacceptably large gap in the * transmitted samples. * * In some applications where a transmitter is constantly transmitting with * extremely small gaps (less than a buffer), users may end up using a single * ::BLADERF_META_FLAG_TX_BURST_START, and then numerous calls to * bladerf_sync_tx() with the ::BLADERF_META_FLAG_TX_UPDATE_TIMESTAMP flag set. * The ::BLADERF_META_FLAG_TX_BURST_END would only be used to end the stream * when shutting down. */ #define BLADERF_META_FLAG_TX_UPDATE_TIMESTAMP (1 << 3) /** * This flag indicates that calls to bladerf_sync_rx should return any available * samples, rather than wait until the timestamp indicated in the * bladerf_metadata timestamp field. */ #define BLADERF_META_FLAG_RX_NOW (1 << 31) /** * This flag is asserted in bladerf_metadata.status by the hardware when an * underflow is detected in the sample buffering system on the device. */ #define BLADERF_META_FLAG_RX_HW_UNDERFLOW (1 << 0) /** * This flag is asserted in bladerf_metadata.status by the hardware if mini * expansion IO pin 1 is asserted. */ #define BLADERF_META_FLAG_RX_HW_MINIEXP1 (1 << 16) /** * This flag is asserted in bladerf_metadata.status by the hardware if mini * expansion IO pin 2 is asserted. */ #define BLADERF_META_FLAG_RX_HW_MINIEXP2 (1 << 17) /** * Sample metadata * * This structure is used in conjunction with the ::BLADERF_FORMAT_SC16_Q11_META * format to TX scheduled bursts or retrieve timestamp information about * received samples. */ struct bladerf_metadata { /** * Free-running FPGA counter that monotonically increases at the sample rate * of the associated channel. */ bladerf_timestamp timestamp; /** * Input bit field to control the behavior of the call that the metadata * structure is passed to. API calls read this field from the provided data * structure, and do not modify it. * * Valid flags include * ::BLADERF_META_FLAG_TX_BURST_START, * ::BLADERF_META_FLAG_TX_BURST_END, * ::BLADERF_META_FLAG_TX_NOW, * ::BLADERF_META_FLAG_TX_UPDATE_TIMESTAMP, and * ::BLADERF_META_FLAG_RX_NOW */ uint32_t flags; /** * Output bit field to denoting the status of transmissions/receptions. API * calls will write this field. * * Possible status flags include ::BLADERF_META_STATUS_OVERRUN and * ::BLADERF_META_STATUS_UNDERRUN. */ uint32_t status; /** * This output parameter is updated to reflect the actual number of * contiguous samples that have been populated in an RX buffer during a * bladerf_sync_rx() call. * * This will not be equal to the requested count in the event of a * discontinuity (i.e., when the status field has the * ::BLADERF_META_STATUS_OVERRUN flag set). When an overrun occurs, it is * important not to read past the number of samples specified by this value, * as the remaining contents of the buffer are undefined. * * @note This parameter is not currently used by bladerf_sync_tx(). */ unsigned int actual_count; /** * Reserved for future use. This is not used by any functions. It is * recommended that users zero out this field. */ uint8_t reserved[32]; }; /** @} (End of STREAMING_FORMAT_METADATA) */ /** * Interleaves contiguous blocks of samples in preparation for MIMO TX. * * Given a `buffer` loaded with data as such: * *
 *  .-------------------.--------------.--------------.------------------.
 *  |    Byte offset    | Bits 31...16 | Bits 15...0  |    Description   |
 *  +-------------------+--------------+--------------+------------------+
 *  |  0x00 + 0*chsize  |     Q0[0]    |     I0[0]    |  Ch 0, sample 0  |
 *  |  0x04 + 0*chsize  |     Q0[1]    |     I0[1]    |  Ch 0, sample 1  |
 *  |  0x08 + 0*chsize  |     Q0[2]    |     I0[2]    |  Ch 0, sample 2  |
 *  |  0x0c + 0*chsize  |     Q0[3]    |     I0[3]    |  Ch 0, sample 3  |
 *  |        ...        |      ...     |      ...     |        ...       |
 *  |  0x00 + 1*chsize  |     Q1[0]    |     I1[0]    |  Ch 1, sample 0  |
 *  |  0x04 + 1*chsize  |     Q1[1]    |     I1[1]    |  Ch 1, sample 1  |
 *  |  0x08 + 1*chsize  |     Q1[2]    |     I1[2]    |  Ch 1, sample 2  |
 *  |  0x0c + 1*chsize  |     Q1[3]    |     I1[3]    |  Ch 1, sample 3  |
 *  |        ...        |      ...     |      ...     |        ...       |
 *  `-------------------`--------------`--------------`------------------`
 * 
* * where \f$chsize = \frac{sizeof(buffer)}{num\_channels}\f$. * * This function interleaves the samples in the manner described by the * ::BLADERF_FORMAT_SC16_Q11 format, in place. Each channel must have * \f$buffer\_size / num\_channels\f$ samples, and they must be concatenated in * order. * * If the ::BLADERF_FORMAT_SC16_Q11_META format is specified, the first 16 bytes * will skipped. * * This function's inverse is bladerf_deinterleave_stream_buffer(). * * @param[in] layout Stream direction and layout * @param[in] format Data format to use * @param[in] buffer_size The size of the buffer, in samples. Note that this * is the entire buffer, not just a single channel. * @param samples Buffer to process. The user is responsible for * ensuring this buffer contains exactly * `buffer_size` samples. * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_interleave_stream_buffer(bladerf_channel_layout layout, bladerf_format format, unsigned int buffer_size, void *samples); /** * Deinterleaves samples into contiguous blocks after MIMO RX. * * This function deinterleaves a multi-channel interleaved buffer, as described * by the ::BLADERF_FORMAT_SC16_Q11 format. The output is in the format * described as the input to this function's inverse, * bladerf_interleave_stream_buffer(). * * If the ::BLADERF_FORMAT_SC16_Q11_META format is specified, the first 16 bytes * will skipped. * * @param[in] layout Stream direction and layout * @param[in] format Data format to use * @param[in] buffer_size The size of the buffer, in samples. Note that * this is the entire buffer, not just a single * channel. * @param samples Buffer to process. The user is responsible for * ensuring this buffer contains exactly * `buffer_size` samples. * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_deinterleave_stream_buffer(bladerf_channel_layout layout, bladerf_format format, unsigned int buffer_size, void *samples); /** @} (End of STREAMING_FORMAT) */ /** * Enable or disable the RF front end of the specified direction. * * RF front ends must always be enabled prior to streaming samples on the * associated interface. * * When a synchronous stream is associated with the specified channel, this will * shut down the underlying asynchronous stream when `enable` = false. * * When transmitting samples, be sure to provide ample time for TX samples reach * the RF front-end before calling this function with `enable` = false. (This * can be achieved easily when using metadata, as shown on * \link sync_tx_meta_bursts.html this page\endlink.) * * @param dev Device handle * @param[in] ch Channel * @param[in] enable true to enable, false to disable * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_enable_module(struct bladerf *dev, bladerf_channel ch, bool enable); /** * Retrieve the specified stream's current timestamp counter value from the * FPGA. * * This function is only intended to be used to retrieve a coarse estimate of * the current timestamp when starting up a stream. It should not be used * as a means to accurately retrieve the current timestamp of individual samples * within a running stream. The reasons for this are: * - The timestamp counter will have advanced during the time that the captured * value is propagated back from the FPGA to the host * - The value retrieved in this manner is not tightly-coupled with * specific sample positions in the stream. * * When actively receiving a sample stream, instead use the * ::bladerf_metadata::timestamp field (provided when using the * ::BLADERF_FORMAT_SC16_Q11_META format) to retrieve the timestamp value * associated with a block of samples. See the \link sync_rx_meta.html RX with * metadata\endlink page for examples of this. * * An example use-case of this function is to schedule an initial TX burst in a * set of bursts: * * - Configure and start a TX stream using the ::BLADERF_FORMAT_SC16_Q11_META * format. * - Retrieve timestamp \f$T\f$, a coarse estimate the TX's current timestamp * via this function. * - Schedule the first burst, \f$F\f$ to occur in the future: \f$F = T + N\f$. * Generally, adding \f$N\f$ in tens to low hundreds of milliseconds is * sufficient to account for timestamp retrieval overhead and stream * startup. * - Schedule additional bursts relative to the first burst \f$F\f$. * * Examples of the above are shown on the \link sync_tx_meta_bursts.html TX * with metadata\endlink page. * * @param dev Device handle * @param[in] dir Stream direction * @param[out] timestamp Coarse timestamp value * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_timestamp(struct bladerf *dev, bladerf_direction dir, bladerf_timestamp *timestamp); /** * @defgroup FN_STREAMING_SYNC Synchronous API * * This group of functions presents synchronous, blocking calls (with optional * timeouts) for transmitting and receiving samples. * * The synchronous interface is built atop the asynchronous interface, and is * generally less complex and easier to work with. It alleviates the need to * explicitly spawn threads (it is done under the hood) and manually manage * sample buffers. * * Under the hood, this interface spawns worker threads to handle an * asynchronous stream and perform thread-safe buffer management. * * These functions are thread-safe. * * The following pages provide additional information and example usage: * * - \link sync_no_meta.html Basic usage without metadata\endlink * - \link sync_rx_meta.html Synchronous RX with metadata\endlink * - \link sync_tx_meta_bursts.html Synchronous TX with metadata\endlink * * @{ */ /** * (Re)Configure a device for synchronous transmission or reception * * This function sets up the device for the specified format and initializes * the underlying asynchronous stream parameters * * This function does not call bladerf_enable_module(). The API user is * responsible for enabling/disable streams when desired. * * Note that (re)configuring the TX direction does not affect the RX direction, * and vice versa. This call configures each direction independently. * * Memory allocated by this function will be deallocated when bladerf_close() * is called. * * @see The bladerf_init_stream() documentation for information on determining * appropriate values for `buffers_size`, `num_transfers`, and * `stream_timeout`. * * @note The `num_buffers` parameter should generally be increased as the amount * of work done between bladerf_sync_rx() or bladerf_sync_tx() calls * increases. * * @param dev Device to configure * @param[in] layout Stream direction and layout * @param[in] format Format to use in synchronous data transfers * @param[in] num_buffers The number of buffers to use in the underlying * data stream. This must be greater than the * `num_xfers` parameter. * @param[in] buffer_size The size of the underlying stream buffers, in * samples. This value must be a multiple of 1024. * Note that samples are only transferred when a * buffer of this size is filled. * @param[in] num_transfers The number of active USB transfers that may be * in-flight at any given time. If unsure of what * to use here, try values of 4, 8, or 16. * @param[in] stream_timeout Timeout (milliseconds) for transfers in the * underlying data stream. * * @return 0 on success, * ::BLADERF_ERR_UNSUPPORTED if libbladeRF is not built with support * for this functionality, * or a value from \ref RETCODES list on failures. */ API_EXPORT int CALL_CONV bladerf_sync_config(struct bladerf *dev, bladerf_channel_layout layout, bladerf_format format, unsigned int num_buffers, unsigned int buffer_size, unsigned int num_transfers, unsigned int stream_timeout); /** * Transmit IQ samples. * * Under the hood, this call starts up an underlying asynchronous stream as * needed. This stream can be stopped by disabling the TX channel. (See * bladerf_enable_module for more details.) * * Samples will only be sent to the FPGA when a buffer have been filled. The * number of samples required to fill a buffer corresponds to the `buffer_size` * parameter passed to bladerf_sync_config(). * * @pre A bladerf_sync_config() call has been to configure the device for * synchronous data transfer. * * @note A call to bladerf_enable_module() should be made before attempting to * transmit samples. Failing to do this may result in timeouts and other * errors. * * @param dev Device handle * @param[in] samples Array of samples * @param[in] num_samples Number of samples to write * @param[in] metadata Sample metadata. This must be provided when using * the ::BLADERF_FORMAT_SC16_Q11_META format, but may * be NULL when the interface is configured for * the ::BLADERF_FORMAT_SC16_Q11 format. * @param[in] timeout_ms Timeout (milliseconds) for this call to complete. * Zero implies "infinite." * * @return 0 on success, * ::BLADERF_ERR_UNSUPPORTED if libbladeRF is not built with support * for this functionality, * or a value from \ref RETCODES list on failures. */ API_EXPORT int CALL_CONV bladerf_sync_tx(struct bladerf *dev, const void *samples, unsigned int num_samples, struct bladerf_metadata *metadata, unsigned int timeout_ms); /** * Receive IQ samples. * * Under the hood, this call starts up an underlying asynchronous stream as * needed. This stream can be stopped by disabling the RX channel. (See * bladerf_enable_module for more details.) * * @pre A bladerf_sync_config() call has been to configure the device for * synchronous data transfer. * * @note A call to bladerf_enable_module() should be made before attempting to * receive samples. Failing to do this may result in timeouts and other * errors. * * @param dev Device handle * @param[out] samples Buffer to store samples in. The caller is * responsible for ensuring this buffer is sufficiently * large for the number of samples requested, * considering the size of the sample format being * used. * @param[in] num_samples Number of samples to read * @param[out] metadata Sample metadata. This must be provided when using * the ::BLADERF_FORMAT_SC16_Q11_META format, but may * be NULL when the interface is configured for * the ::BLADERF_FORMAT_SC16_Q11 format. * @param[in] timeout_ms Timeout (milliseconds) for this call to complete. * Zero implies "infinite." * * @return 0 on success, * ::BLADERF_ERR_UNSUPPORTED if libbladeRF is not built with support * for this functionality, * or a value from \ref RETCODES list on failures. */ API_EXPORT int CALL_CONV bladerf_sync_rx(struct bladerf *dev, void *samples, unsigned int num_samples, struct bladerf_metadata *metadata, unsigned int timeout_ms); /** @} (End of FN_STREAMING_SYNC) */ /** * @defgroup FN_STREAMING_ASYNC Asynchronous API * * This interface gives the API user full control over the stream and buffer * management, at the cost of added complexity. * * @note New users are recommended to first evaluate the \ref FN_STREAMING_SYNC * interface, and to only use this interface if the former is found to not * yield suitable performance. * * These functions are either thread-safe or may be used in a thread-safe * manner (per the details noted in the function description). * * @{ */ /** * Use this as a return value in callbacks or as the buffer parameter to * bladerf_submit_stream_buffer() to shutdown a stream. */ #define BLADERF_STREAM_SHUTDOWN (NULL) /** * Use this value in a stream callback to indicate that no buffer is being * provided. In this case, buffers are expected to be provided via * bladerf_submit_stream_buffer(). */ #define BLADERF_STREAM_NO_DATA ((void *)(-1)) /** This opaque structure is used to keep track of stream information */ struct bladerf_stream; /** * This typedef represents a callback function that is executed in response to * this interface's asynchronous events. * * Stream callbacks must not block or perform long-running operations. * Otherwise, timeouts may occur. If this cannot be guaranteed, consider * returning ::BLADERF_STREAM_NO_DATA in callbacks and later submit a buffer * using bladerf_submit_stream_buffer(). However, callbacks should always take * a single approach of returning buffers or returning * ::BLADERF_STREAM_NO_DATA and submitting buffers later -- but not both. * * When running in a full-duplex mode of operation with simultaneous TX and RX * stream threads, be aware that one stream's callback may occur in the context * of another stream's thread. The API user is responsible for ensuring their * callbacks are thread safe. For example, when managing access to sample * buffers, the caller must ensure that if one thread is processing samples in a * buffer, that this buffer is not returned via the callback's return value. * * As of libbladeRF v0.15.0, is guaranteed that only one callback from a stream * will occur at a time. (i.e., a second TX callback will not fire while one is * currently being handled.) To achieve this, while a callback is executing, a * per-stream lock is held. It is important to consider this when thinking about * the order of lock acquisitions both in the callbacks, and the code * surrounding bladerf_submit_stream_buffer(). * * @note Do not call bladerf_submit_stream_buffer() from a callback. * * For both RX and TX, the stream callback receives: * - dev: Device structure * - stream: The associated stream * - metadata: For future support - do not attempt to read/write this * in the current library implementation. * - user_data: User data provided when initializing stream * * For TX callbacks: * - samples: Pointer to buffer of samples that was sent * - num_samples: Number of sent in last transfer and to send in next transfer * - Return value: The user specifies the address of the next buffer to send, * ::BLADERF_STREAM_SHUTDOWN, or ::BLADERF_STREAM_NO_DATA. * * For RX callbacks: * - samples: Buffer filled with received data * - num_samples: Number of samples received and size of next buffers * - Return value: The user specifies the next buffer to fill with RX data, * which should be `num_samples` in size, * ::BLADERF_STREAM_SHUTDOWN, or ::BLADERF_STREAM_NO_DATA. */ typedef void *(*bladerf_stream_cb)(struct bladerf *dev, struct bladerf_stream *stream, struct bladerf_metadata *meta, void *samples, size_t num_samples, void *user_data); /** * Initialize a stream for use with asynchronous routines. * * This function will internally allocate data buffers, which will be provided * to the API user in callback functions. * * The `buffers` output parameter populates a pointer to the list of allocated * buffers. This allows the API user to implement a buffer management scheme to * best suit his or her specific use case. * * Generally, one will want to set the `buffers` parameter to a value larger * than the `num_transfers` parameter, and keep track of which buffers are * currently "in-flight", versus those available for use. * * For example, for a transmit stream, modulated data can be actively written * into free buffers while transfers of other buffers are occurring. Once a * buffer has been filled with data, it can be marked 'in-flight' and be * returned in a successive callback to transmit. * * The choice of values for the `num_transfers` and `buffer_size` should be * made based upon the desired samplerate, and the stream timeout value * specified via bladerf_set_stream_timeout(), which defaults to 1 second. * * For a given sample rate, the below relationship must be upheld to transmit or * receive data without timeouts or dropped data. * * @f[ * Sample\ Rate > \frac{\#\ Transfers}{Timeout} \times Buffer\ Size * @f] * * ...where Sample Rate is in samples per second, and Timeout is in seconds. * * To account for general system overhead, it is recommended to multiply the * righthand side by 1.1 to 1.25. * * While increasing the number of buffers available provides additional * elasticity, be aware that it also increases latency. * * @param[out] stream Upon success, this will be updated to contain * a stream handle (i.e., address) * @param dev Device to associate with the stream * @param[in] callback Callback routine to handle asynchronous events * @param[out] buffers This will be updated to point to a dynamically * allocated array of buffer pointers. * @param[in] num_buffers Number of buffers to allocate and return. This * value must >= the `num_transfers` parameter. * @param[in] format Sample data format * @param[in] samples_per_buffer Size of allocated buffers, in units of * samples Note that the physical size of the * buffer is a function of this and the format * parameter. * @param[in] num_transfers Maximum number of transfers that may be * in-flight simultaneously. This must be <= the * `num_buffers` parameter. * @param[in] user_data Caller-provided data that will be provided * in stream callbacks * * @note This call should be later followed by a call to * bladerf_deinit_stream() to avoid memory leaks. * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_init_stream(struct bladerf_stream **stream, struct bladerf *dev, bladerf_stream_cb callback, void ***buffers, size_t num_buffers, bladerf_format format, size_t samples_per_buffer, size_t num_transfers, void *user_data); /** * Begin running a stream. This call will block until the stream completes. * * Only 1 RX stream and 1 TX stream may be running at a time. Attempting to * call bladerf_stream() with more than one stream will yield unexpected (and * most likely undesirable) results. * * @note See the ::bladerf_stream_cb description for additional thread-safety * caveats. * * @pre This function should be preceded by a call to bladerf_enable_module() * to enable the associated RX or TX directions before attempting to use * it to stream data. * * @param stream A stream handle that has been successfully been * initialized via bladerf_init_stream() * @param[in] layout Stream direction and channel layout * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_stream(struct bladerf_stream *stream, bladerf_channel_layout layout); /** * Submit a buffer to a stream from outside of a stream callback function. * Use this only when returning BLADERF_STREAM_NO_DATA from callbacks. Do * not use this function if the associated callback functions will be * returning buffers for submission. * * This call may block if the device is not ready to submit a buffer for * transfer. Use the `timeout_ms` to place an upper limit on the time this * function can block. * * To safely submit buffers from outside the stream callback flow, this function * internally acquires a per-stream lock (the same one that is held during the * execution of a stream callback). Therefore, it is important to be aware of * locks that may be held while making this call, especially those acquired * during execution of the associated stream callback function. (i.e., be wary * of the order of lock acquisitions, including the internal per-stream lock.) * * @param stream Stream to submit buffer to * @param[inout] buffer Buffer to fill (RX) or containing data (TX). * This buffer is assumed to be the size specified * in the associated bladerf_init_stream() call. * @param[in] timeout_ms Milliseconds to timeout in, if this call blocks. * 0 implies an "infinite" wait. * * @return 0 on success, ::BLADERF_ERR_TIMEOUT upon a timeout, or a value from * \ref RETCODES list on other failures */ API_EXPORT int CALL_CONV bladerf_submit_stream_buffer(struct bladerf_stream *stream, void *buffer, unsigned int timeout_ms); /** * This is a non-blocking variant of bladerf_submit_stream_buffer(). All of the * caveats and important notes from bladerf_submit_stream_buffer() apply. * * In the event that this call would need to block in order to submit a buffer, * it returns BLADERF_ERR_WOULD_BLOCK. In this case, the caller could either * wait and try again or defer buffer submission to the asynchronous callback. * * @param stream Stream to submit buffer to * @param[inout] buffer Buffer to fill (RX) or containing data (TX). * This buffer is assumed to be the size specified * in the associated bladerf_init_stream() call. * * @return 0 on success, ::BLADERF_ERR_WOULD_BLOCK if the call would have to * block to succeed, or another value from \ref RETCODES upon other * failure */ API_EXPORT int CALL_CONV bladerf_submit_stream_buffer_nb(struct bladerf_stream *stream, void *buffer); /** * Deinitialize and deallocate stream resources. * * @pre Stream is no longer being used (via bladerf_submit_stream_buffer() or * bladerf_stream() calls.) * * @post Stream is deallocated and may no longer be used. * * @param stream Stream to deinitialize. This function does nothing if * stream is `NULL`. */ API_EXPORT void CALL_CONV bladerf_deinit_stream(struct bladerf_stream *stream); /** * Set stream transfer timeout in milliseconds * * @param dev Device handle * @param[in] dir Stream direction * @param[in] timeout Timeout in milliseconds * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_set_stream_timeout(struct bladerf *dev, bladerf_direction dir, unsigned int timeout); /** * Get transfer timeout in milliseconds * * @param dev Device handle * @param[in] dir Stream direction * @param[out] timeout On success, updated with current transfer * timeout value. Undefined on failure. * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_stream_timeout(struct bladerf *dev, bladerf_direction dir, unsigned int *timeout); /** @} (End of FN_STREAMING_ASYNC) */ /** @} (End of STREAMING) */ /** * @defgroup FN_PROG Firmware and FPGA * * These functions provide the ability to load and program devices on the * bladeRF board. * * Care should be taken with bootloader recovery functions to ensure that * devices operated on are indeed a bladeRF, as opposed to another FX3-based * device running in bootloader mode. * * These functions are thread-safe. * * @{ */ /** * Write FX3 firmware to the bladeRF's SPI flash * * @note This will require a power cycle to take effect * * @param dev Device handle * @param[in] firmware Full path to firmware file * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_flash_firmware(struct bladerf *dev, const char *firmware); /** * Load device's FPGA. * * @note This FPGA configuration will be reset at the next power cycle. * * @param dev Device handle * @param[in] fpga Full path to FPGA bitstream * * @return 0 upon successfully, or a value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_load_fpga(struct bladerf *dev, const char *fpga); /** * Write the provided FPGA image to the bladeRF's SPI flash and enable FPGA * loading from SPI flash at power on (also referred to within this project as * FPGA "autoloading"). * * @param dev Device handle * @param[in] fpga_image Full path to FPGA file * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_flash_fpga(struct bladerf *dev, const char *fpga_image); /** * Erase the FPGA region of SPI flash, effectively disabling FPGA autoloading * * @param dev Device handle * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_erase_stored_fpga(struct bladerf *dev); /** * Reset the device, causing it to reload its firmware from flash * * @param dev Device handle * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_device_reset(struct bladerf *dev); /** * Read firmware log data and write it to the specified file * * @param dev Device to read firmware log from * @param[in] filename Filename to write log information to. If set to * `NULL`, log data will be printed to stdout. * * @return 0 upon success, or a value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_fw_log(struct bladerf *dev, const char *filename); /** * Clear out a firmware signature word in flash and jump to FX3 bootloader. * * The device will continue to boot into the FX3 bootloader across power cycles * until new firmware is written to the device. * * @param dev Device handle * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_jump_to_bootloader(struct bladerf *dev); /** * Get a list of devices that are running the FX3 bootloader. * * After obtaining this list, identify the device that you would like to load * firmware onto. Save the bus and address values so that you can provide them * to bladerf_load_fw_from_bootloader(), and then free this list via * bladerf_free_device_list(). * * @param[out] list Upon finding devices, this will be updated to point * to a list of bladerf_devinfo structures that * describe the identified devices. * * @return Number of items populated in `list`, * or an error value from the \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_bootloader_list(struct bladerf_devinfo **list); /** * Download firmware to the specified device that is enumarating an FX3 * bootloader, and begin executing the firmware from RAM. * * @note This function does not write the firmware to SPI flash. If this * is desired, open the newly enumerated device with bladerf_open() and use * bladerf_flash_firmware(). * * @param[in] device_identifier Device identifier string describing the * backend to use via the * `:device=:` syntax. If * this is NULL, the backend, bus, and addr * arguments will be used instead. * @param[in] backend Backend to use. This is only used if * device_identifier is `NULL`. * @param[in] bus Bus number the device is located on. This * is only used if device_identifier is `NULL`. * @param[in] addr Bus address the device is located on. This * is only used if device_identifier is `NULL`. * @param[in] file Filename of the firmware image to boot * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_load_fw_from_bootloader(const char *device_identifier, bladerf_backend backend, uint8_t bus, uint8_t addr, const char *file); /** @} (End of FN_PROG) */ /** * @defgroup FN_IMAGE Flash image format * * This section contains a file format and associated routines for storing * and loading flash contents with metadata. * * These functions are thread-safe. * * @{ */ /** Type of data stored in a flash image */ typedef enum { BLADERF_IMAGE_TYPE_INVALID = -1, /**< Used to denote invalid value */ BLADERF_IMAGE_TYPE_RAW, /**< Misc. raw data */ BLADERF_IMAGE_TYPE_FIRMWARE, /**< Firmware data */ BLADERF_IMAGE_TYPE_FPGA_40KLE, /**< FPGA bitstream for 40 KLE device */ BLADERF_IMAGE_TYPE_FPGA_115KLE, /**< FPGA bitstream for 115 KLE device */ BLADERF_IMAGE_TYPE_FPGA_A4, /**< FPGA bitstream for A4 device */ BLADERF_IMAGE_TYPE_FPGA_A9, /**< FPGA bitstream for A9 device */ BLADERF_IMAGE_TYPE_CALIBRATION, /**< Board calibration */ BLADERF_IMAGE_TYPE_RX_DC_CAL, /**< RX DC offset calibration table */ BLADERF_IMAGE_TYPE_TX_DC_CAL, /**< TX DC offset calibration table */ BLADERF_IMAGE_TYPE_RX_IQ_CAL, /**< RX IQ balance calibration table */ BLADERF_IMAGE_TYPE_TX_IQ_CAL, /**< TX IQ balance calibration table */ BLADERF_IMAGE_TYPE_FPGA_A5, /**< FPGA bitstream for A5 device */ } bladerf_image_type; /** Size of the magic signature at the beginning of bladeRF image files */ #define BLADERF_IMAGE_MAGIC_LEN 7 /** Size of bladeRF flash image checksum */ #define BLADERF_IMAGE_CHECKSUM_LEN 32 /** Size of reserved region of flash image */ #define BLADERF_IMAGE_RESERVED_LEN 128 /** * Image format for backing up and restoring bladeRF flash contents * * The on disk format generated by the bladerf_image_write function is a * serialized version of this structure and its contents. When written to disk, * values are converted to big-endian byte order, for ease of reading in a hex * editor. * * When creating and using a bladerf_image of type ::BLADERF_IMAGE_TYPE_RAW, * the address and length fields must be erase-block aligned. */ struct bladerf_image { /** * Magic value used to identify image file format. * * Note that an extra character is added to store a `NUL`-terminator, * to allow this field to be printed. This `NUL`-terminator is *NOT* * written in the serialized image. */ char magic[BLADERF_IMAGE_MAGIC_LEN + 1]; /** * SHA256 checksum of the flash image. This is computed over the entire * image, with this field filled with 0's. */ uint8_t checksum[BLADERF_IMAGE_CHECKSUM_LEN]; /** * Image format version. Only the major, minor, and patch fields are * written to the disk; the describe field is not used. The version is * serialized as: [major | minor | patch] */ struct bladerf_version version; /** UTC image timestamp, in seconds since the Unix Epoch */ uint64_t timestamp; /** * Serial number of the device that the image was obtained from. This * field should be all '\0' if irrelevant. * * The +1 here is actually extraneous; ::BLADERF_SERIAL_LENGTH already * accounts for a `NUL` terminator. However, this is left here to avoid * breaking backwards compatibility. */ char serial[BLADERF_SERIAL_LENGTH + 1]; /** * Reserved for future metadata. Should be 0's. */ char reserved[BLADERF_IMAGE_RESERVED_LEN]; /** * Type of data contained in the image. Serialized as a uint32_t. */ bladerf_image_type type; /** * Address of the flash data in this image. A value of `0xffffffff` * implies that this field is left unspecified (i.e., "don't care"). */ uint32_t address; /** Length of the data contained in the image */ uint32_t length; /** Image data */ uint8_t *data; }; /** * Allocate and initialize an image structure. * * This following bladerf_image fields are populated: `magic`, `version`, * `timestamp`, `type`, `address`, and `length` * * The following bladerf_image fields are zeroed out: `checksum`, `serial`, and * `reserved` * * If the `length` parameter is not 0, the ::bladerf_image `data` field will be * dynamically allocated. Otherwise, `data` will be set to NULL. * * @note A non-zero `length` should be use only with bladerf_image_write(); * bladerf_image_read() allocates and sets `data` based upon size of the * image contents, and does not attempt to free() the `data` field before * setting it. * * The `address` and `length` fields should be set 0 when reading an image from * a file. * * @return Pointer to allocated and initialized structure on success, * `NULL` on memory allocation failure or invalid address/length. */ API_EXPORT struct bladerf_image *CALL_CONV bladerf_alloc_image(struct bladerf *dev, bladerf_image_type type, uint32_t address, uint32_t length); /** * Create a flash image initialized to contain a calibration data region. * * This is intended to be used in conjunction with bladerf_image_write(), or a * write of the image's `data` field to flash. * * @param[in] dev Device handle * @param[in] fpga_size Target FPGA size * @param[in] vctcxo_trim VCTCXO oscillator trim value. * * @return Pointer to allocated and initialized structure on success, * `NULL` on memory allocation failure */ API_EXPORT struct bladerf_image *CALL_CONV bladerf_alloc_cal_image( struct bladerf *dev, bladerf_fpga_size fpga_size, uint16_t vctcxo_trim); /** * Free a bladerf_image previously obtained via bladerf_alloc_image. * * If the bladerf_image's `data` field is non-`NULL`, it will be freed. * * @param[inout] image Flash image */ API_EXPORT void CALL_CONV bladerf_free_image(struct bladerf_image *image); /** * Write a flash image to a file. * * This function will fill in the checksum field before writing the contents to * the specified file. The user-supplied contents of this field are ignored. * * @pre `image` has been initialized using bladerf_alloc_image() * @post `image->checksum` will be populated if this function succeeds * * @param[in] dev Device handle * @param[in] image Flash image * @param[in] file File to write the flash image to * * @return 0 upon success, or a value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_image_write(struct bladerf *dev, struct bladerf_image *image, const char *file); /** * Read flash image from a file. * * @pre The `image` parameter has been obtained via a call to * bladerf_alloc_image(), with a `length` of 0. * * @post The `image` fields will be populated upon success, overwriting any * previous values. * * @note The contents of the `image` parameter should not be used if this * function fails. * * @param[out] image Flash image structure to populate. * @param[in] file File to read image from. * * @return 0 upon success, * ::BLADERF_ERR_CHECKSUM upon detecting a checksum mismatch, * ::BLADERF_ERR_INVAL if any image fields are invalid, * ::BLADERF_ERR_IO on a file I/O error, * or a value from \ref RETCODES list on any other failure */ API_EXPORT int CALL_CONV bladerf_image_read(struct bladerf_image *image, const char *file); /** @} (End of FN_IMAGE) */ /** * @defgroup FN_LOW_LEVEL Low-level Functions * * This section defines low-level APIs. * * @{ */ /** * @defgroup FN_VCTCXO_TAMER VCTCXO Tamer Mode * * This group provides routines for controlling the VTCTXO tamer. * * These functions are thread-safe. * * @{ */ /** * VCTCXO Tamer mode selection * * These values control the use of header J71 pin 1 for taming the * on-board VCTCXO to improve or sustain frequency accuracy. * * When supplying input into the VCTCXO tamer, a 1.8V signal must be provided. * * @warning IMPORTANT: Exceeding 1.8V on J71-1 can damage the associated FPGA * I/O bank. Ensure that you provide only a 1.8V signal! */ typedef enum { /** Denotes an invalid selection or state */ BLADERF_VCTCXO_TAMER_INVALID = -1, /** Do not attempt to tame the VCTCXO with an input source. */ BLADERF_VCTCXO_TAMER_DISABLED = 0, /** Use a 1 pps input source to tame the VCTCXO. */ BLADERF_VCTCXO_TAMER_1_PPS = 1, /** Use a 10 MHz input source to tame the VCTCXO. */ BLADERF_VCTCXO_TAMER_10_MHZ = 2 } bladerf_vctcxo_tamer_mode; /** * Set the VCTCXO tamer mode. * * @param dev Device handle * @param[in] mode VCTCXO taming mode * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_set_vctcxo_tamer_mode(struct bladerf *dev, bladerf_vctcxo_tamer_mode mode); /** * Get the current VCTCXO tamer mode * * @param dev Device handle * @param[out] mode Current VCTCXO taming mode or * ::BLADERF_VCTCXO_TAMER_INVALID if a failure * occurs. * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_vctcxo_tamer_mode(struct bladerf *dev, bladerf_vctcxo_tamer_mode *mode); /** @} (End of FN_VCTCXO_TAMER) */ /** * @defgroup FN_VCTCXO_TRIM_DAC VCTCXO Trim DAC * * These functions provide the ability to manipulate the VCTCXO Trim DAC. * * These functions are thread-safe. * * @{ */ /** * Query a device's VCTCXO calibration trim * * @param dev Device handle * @param[out] trim VCTCXO calibration trim * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_vctcxo_trim(struct bladerf *dev, uint16_t *trim); /** * Write value to VCTCXO trim DAC. * * @note This should not be used when the VCTCXO tamer is enabled. * * @param dev Device handle * @param[in] val Desired VCTCXO trim DAC value * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_trim_dac_write(struct bladerf *dev, uint16_t val); /** * Read value from VCTCXO trim DAC. * * This is similar to bladerf_get_vctcxo_trim(), except that it returns the * current trim DAC value, as opposed to the calibration value read from flash. * * Use this if you are trying to query the value after having previously made * calls to bladerf_trim_dac_write(). * * @param dev Device handle * @param[out] val Current VCTCXO trim DAC value * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_trim_dac_read(struct bladerf *dev, uint16_t *val); /** @} (End of FN_VCTCXO_TRIM_DAC) */ /** * @defgroup FN_TUNING_MODE Tuning Mode * * These functions provide the ability to select the tuning mode. * * These functions are thread-safe. * * @{ */ /** * Frequency tuning modes * * ::BLADERF_TUNING_MODE_HOST is the default if either of the following * conditions are true: * - libbladeRF < v1.3.0 * - FPGA < v0.2.0 * * ::BLADERF_TUNING_MODE_FPGA is the default if both of the following * conditions are true: * - libbladeRF >= v1.3.0 * - FPGA >= v0.2.0 * * The default mode can be overridden by setting a BLADERF_DEFAULT_TUNING_MODE * environment variable to `host` or `fpga`. * * @note Overriding this value with a mode not supported by the FPGA will result * in failures or unexpected behavior. */ typedef enum { /** Indicates an invalid mode is set */ BLADERF_TUNING_MODE_INVALID = -1, /** * Perform tuning algorithm on the host. This is slower, but provides * easier accessiblity to diagnostic information. */ BLADERF_TUNING_MODE_HOST, /** Perform tuning algorithm on the FPGA for faster tuning. */ BLADERF_TUNING_MODE_FPGA, } bladerf_tuning_mode; /** * Set the device's tuning mode * * @param dev Device handle * @param[in] mode Desired tuning mode. Note that the available modes * depends on the FPGA version. * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_set_tuning_mode(struct bladerf *dev, bladerf_tuning_mode mode); /** * Get the device's current tuning mode * * @param dev Device handle * @param[in] mode Tuning mode * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_tuning_mode(struct bladerf *dev, bladerf_tuning_mode *mode); /** @} (End of FN_TUNING_MODE) */ /** * @defgroup FN_TRIGGER_CONTROL Trigger Control * * These functions provide the ability to read and write the trigger control * registers. * * These functions are thread-safe. * * @{ */ /** * Trigger control register "Arm" bit * * This bit arms (i.e., enables) the trigger controller when set to 1. Samples * will be gated until the "Fire" bit has been asserted. * * A 0 in this bit disables the trigger controller. Samples will continue to * flow as they normally do in this state. */ #define BLADERF_TRIGGER_REG_ARM ((uint8_t)(1 << 0)) /** * Trigger control register "Fire" bit * * For a master, this bit causes a trigger to be sent to all slave devices. Once * this trigger is received (the master "receives" it immediately as well), * devices begin streaming samples. * * This bit has no effect on slave devices. */ #define BLADERF_TRIGGER_REG_FIRE ((uint8_t)(1 << 1)) /** * Trigger control register "Master" bit * * Selects whether the device is a trigger master (1) or trigger slave (0). The * trigger master drives the trigger signal as an output. * * Slave devices configure the trigger signal as an input. */ #define BLADERF_TRIGGER_REG_MASTER ((uint8_t)(1 << 2)) /** * Trigger control registers "line" bit * * This is a read-only register bit that denotes the current state of the the * trigger signal. */ #define BLADERF_TRIGGER_REG_LINE ((uint8_t)(1 << 3)) /** * Read trigger control register * * @param dev Device handle * @param[in] ch Channel * @param[in] signal Trigger signal (control register) to read from * @param[out] val Pointer to variable that register is read into See * the BLADERF_TRIGGER_REG_* macros for the meaning of * each bit. * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_read_trigger(struct bladerf *dev, bladerf_channel ch, bladerf_trigger_signal signal, uint8_t *val); /** * Write trigger control register * * @param dev Device handle * @param[in] ch Channel * @param[in] signal Trigger signal to configure * @param[in] val Data to write into the trigger control register. * See the BLADERF_TRIGGER_REG_* macros for options. * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_write_trigger(struct bladerf *dev, bladerf_channel ch, bladerf_trigger_signal signal, uint8_t val); /** @} (End of FN_TRIGGER_CONTROL) */ /** * @defgroup FN_WISHBONE_MASTER Wishbone bus master * * These functions provide the ability to read and write to the wishbone peripheral bus, * which is reserved for modem * * These functions are thread-safe. * * @{ */ /** * Read a specific Wishbone Master address * * @param dev Device handle * @param addr Wishbone Master address * @param[out] data Wishbone Master data * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_wishbone_master_read(struct bladerf *dev, uint32_t addr, uint32_t *data); /** * Write value to a specific Wishbone Master address * * * @param dev Device handle * @param addr Wishbone Master address * @param data Wishbone Master data * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_wishbone_master_write(struct bladerf *dev, uint32_t addr, uint32_t val); /** @} (End of FN_WISHBONE_MASTER) */ /** * @defgroup FN_CONFIG_GPIO Configuration GPIO * * These functions provide the ability to read and write the configuration * GPIO. * * These functions are thread-safe. * * @{ */ /** * Read the configuration GPIO register. * * @param dev Device handle * @param[out] val Current configuration GPIO value * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_config_gpio_read(struct bladerf *dev, uint32_t *val); /** * Write the configuration GPIO register. * * @note Callers should be sure to perform a read-modify-write sequence to * avoid accidentally clearing other GPIO bits that may be set by the * library internally. * * @param dev Device handle * @param[out] val Desired configuration GPIO value * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_config_gpio_write(struct bladerf *dev, uint32_t val); /** @} (End of FN_CONFIG_GPIO) */ /** * @defgroup FN_SPI_FLASH SPI Flash * * These functions provide the ability to erase, read, and write the SPI flash. * * @warning Use of SPI flash functions requires an understanding of the * underlying SPI flash device, and the bladeRF's flash memory map. Be * sure to review the following page and the associated flash datasheet * before using these functions: * https://github.com/nuand/bladeRF/wiki/FX3-Firmware#spi-flash-layout * * These functions are thread-safe. * * @{ */ /** * Erase regions of the bladeRF's SPI flash * * @note This function operates in units of 64 KiB erase blocks * @note Not recommended for new designs. Consider using the * `bladerf_erase_flash_bytes()` function instead. It will perform the * necessary conversion from bytes to pages based on the specific * flash architecture found on the board. * * @param dev Device handle * @param[in] erase_block Erase block from which to start erasing * @param[in] count Number of blocks to erase * * @return 0 on success, * or ::BLADERF_ERR_INVAL on an invalid `erase_block` or `count` value, * or a value from \ref RETCODES list on other failures */ API_EXPORT int CALL_CONV bladerf_erase_flash(struct bladerf *dev, uint32_t erase_block, uint32_t count); /** * Erase regions of the bladeRF's SPI flash * * @note This function operates in units of bytes * * @param dev Device handle * @param[in] address Address at which to start erasing * @param[in] length Number of bytes to erase * * @return 0 on success, * or ::BLADERF_ERR_INVAL on an invalid `address` or `length` value, * or a value from \ref RETCODES list on other failures */ API_EXPORT int CALL_CONV bladerf_erase_flash_bytes(struct bladerf *dev, uint32_t address, uint32_t length); /** * Read data from the bladeRF's SPI flash * * @note This function operates in units of flash pages. * @note Not recommended for new designs. Consider using the * `bladerf_read_flash_bytes()` function instead. It will perform the * necessary conversion from bytes to pages based on the specific * flash architecture found on the board. * * @param dev Device handle * @param[in] buf Buffer to read data into. Must be `count` * * flash-page-size bytes or larger. * @param[in] page Page to begin reading from * @param[in] count Number of pages to read * * @return 0 on success, * or ::BLADERF_ERR_INVAL on an invalid `page` or `count` value, * or a value from \ref RETCODES list on other failures. */ API_EXPORT int CALL_CONV bladerf_read_flash(struct bladerf *dev, uint8_t *buf, uint32_t page, uint32_t count); /** * Read data from the bladeRF's SPI flash * * @note This function operates in units of bytes. * * @param dev Device handle * @param[in] buf Buffer to read data into. Must be `bytes` * bytes or larger. * @param[in] address Address to begin reading from * @param[in] bytes Number of bytes to read * * @return 0 on success, * or ::BLADERF_ERR_INVAL on an invalid `address` or `bytes` value, * or a value from \ref RETCODES list on other failures. */ API_EXPORT int CALL_CONV bladerf_read_flash_bytes(struct bladerf *dev, uint8_t *buf, uint32_t address, uint32_t bytes); /** * Write data to the bladeRF's SPI flash device * * @note This function operates in units of flash pages. * @note Not recommended for new designs. Consider using the * `bladerf_write_flash_bytes()` function instead. It will perform the * necessary conversion from bytes to pages based on the specific * flash architecture found on the board. * * @param dev Device handle * @param[in] buf Data to write to flash * @param[in] page Page to begin writing at * @param[in] count Number of pages to write * * @return 0 on success, * or ::BLADERF_ERR_INVAL on an invalid `page` or `count` value, * or a value from \ref RETCODES list on other failures. */ API_EXPORT int CALL_CONV bladerf_write_flash(struct bladerf *dev, const uint8_t *buf, uint32_t page, uint32_t count); /** * Write data to the bladeRF's SPI flash device * * @note This function operates in units of bytes. * * @param dev Device handle * @param[in] buf Data to write to flash * @param[in] address Address to begin writing at * @param[in] length Number of bytes to write * * @return 0 on success, * or ::BLADERF_ERR_INVAL on an invalid `address` or `length` value, * or a value from \ref RETCODES list on other failures. */ API_EXPORT int CALL_CONV bladerf_write_flash_bytes(struct bladerf *dev, const uint8_t *buf, uint32_t address, uint32_t length); /** * Lock the bladeRF's OTP * * @param dev Device handle * * @return 0 on success, * or ::BLADERF_ERR_INVAL on an invalid `page` or `count` value, * or a value from \ref RETCODES list on other failures. */ API_EXPORT int CALL_CONV bladerf_lock_otp(struct bladerf *dev); /** * Read data from the bladeRF's SPI flash OTP * * @note This function operates solely on the first 256 byte page of the OTP * * @param dev Device handle * @param[in] buf Buffer to read OTP data into * * @return 0 on success, * or ::BLADERF_ERR_INVAL on an invalid `page` or `count` value, * or a value from \ref RETCODES list on other failures. */ API_EXPORT int CALL_CONV bladerf_read_otp(struct bladerf *dev, uint8_t *buf); /** * Write data to the bladeRF's SPI flash OTP device * * @note This function operates solely on the first 256 byte page of the OTP * * @param dev Device handle * @param[in] buf Data to write to OTP * * @return 0 on success, * or ::BLADERF_ERR_INVAL on an invalid `page` or `count` value, * or a value from \ref RETCODES list on other failures. */ API_EXPORT int CALL_CONV bladerf_write_otp(struct bladerf *dev, uint8_t *buf); /** @} (End of FN_SPI_FLASH) */ /** * @defgroup FN_RF_PORTS RF Ports * * These functions provide the ability to select various RF ports for RX and TX * channels. This is normally handled automatically. * * These functions are thread-safe. * * @{ */ /** * Set the RF port * * @param dev Device handle * @param[in] ch Channel * @param[in] port RF port name * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_set_rf_port(struct bladerf *dev, bladerf_channel ch, const char *port); /** * Get the RF port * * @param dev Device handle * @param[in] ch Channel * @param[out] port RF port name * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_rf_port(struct bladerf *dev, bladerf_channel ch, const char **port); /** * Get available RF ports * * This function may be called with `NULL` for `ports`, or 0 for `count`, to * determine the number of RF ports. * * @param dev Device handle * @param[in] ch Channel * @param[out] ports RF port names * @param[out] count Number to populate * * @return Number of RF ports on success, value from \ref RETCODES list on * failure */ API_EXPORT int CALL_CONV bladerf_get_rf_ports(struct bladerf *dev, bladerf_channel ch, const char **ports, unsigned int count); /** @} (End of FN_RF_PORTS) */ /** @} (End of FN_LOW_LEVEL) */ /** * @defgroup FN_SF Features * * This group of functions provides the ability to set features available * to bladeRF devices. * * @{ */ /** * Feature Set */ typedef enum { BLADERF_FEATURE_DEFAULT = 0, /**< No feature enabled */ BLADERF_FEATURE_OVERSAMPLE /**< Enforces AD9361 OC and 8bit mode */ } bladerf_feature; /** * Enables a feature. * * @param dev Device handle * @param[out] feature Feature * @param[in] enable true to enable, false to disable * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_enable_feature(struct bladerf *dev, bladerf_feature feature, bool enable); /** * Gets currently enabled feature. * * @param dev Device handle * @param[out] feature Feature * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_get_feature(struct bladerf *dev, bladerf_feature* feature); /** @} (End of FN_SF) */ /** * @defgroup FN_XB Expansion board support * * This group of functions provides the ability to attach and detach expansion * boards. * * In general, one should call bladerf_expansion_attach() immediately after * opening the device. * * @note Hotplug and expansion board removal is not supported. It is expected * that the expansion boards are attached at power-on and remain attached * until power is removed. * * These functions are thread-safe. * * @{ */ /** * Expansion boards */ typedef enum { BLADERF_XB_NONE = 0, /**< No expansion boards attached */ BLADERF_XB_100, /**< XB-100 GPIO expansion board. * This device is not yet supported in * libbladeRF, and is here as a placeholder * for future support. */ BLADERF_XB_200, /**< XB-200 Transverter board */ BLADERF_XB_300 /**< XB-300 Amplifier board */ } bladerf_xb; /** * Attach and enable an expansion board's features * * @param dev Device handle * @param[in] xb Expansion board * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_expansion_attach(struct bladerf *dev, bladerf_xb xb); /** * Determine which expansion board is attached * * @param dev Device handle * @param[out] xb Expansion board * * @return 0 on success, value from \ref RETCODES list on failure */ API_EXPORT int CALL_CONV bladerf_expansion_get_attached(struct bladerf *dev, bladerf_xb *xb); /** @} (End of FN_XB) */ /** * @defgroup FN_LOGGING Logging * * This section contains various helper/utility functions for library logging * facilities. * * These functions are thread-safe. * * @{ */ /** * Severity levels for logging functions */ typedef enum { BLADERF_LOG_LEVEL_VERBOSE, /**< Verbose level logging */ BLADERF_LOG_LEVEL_DEBUG, /**< Debug level logging */ BLADERF_LOG_LEVEL_INFO, /**< Information level logging */ BLADERF_LOG_LEVEL_WARNING, /**< Warning level logging */ BLADERF_LOG_LEVEL_ERROR, /**< Error level logging */ BLADERF_LOG_LEVEL_CRITICAL, /**< Fatal error level logging */ BLADERF_LOG_LEVEL_SILENT /**< No output */ } bladerf_log_level; /** * Sets the filter level for displayed log messages. * * Messages that are at or above the specified log level will be printed, while * messages with a lower log level will be suppressed. * * @param[in] level The new log level filter value */ API_EXPORT void CALL_CONV bladerf_log_set_verbosity(bladerf_log_level level); /** @} (End of FN_LOGGING) */ /** * @defgroup FN_LIBRARY_VERSION Library version * * @{ */ /** * Get libbladeRF version information * * @param[out] version libbladeRF version information */ API_EXPORT void CALL_CONV bladerf_version(struct bladerf_version *version); /** @} (End of FN_LIBRARY_VERSION) */ /** * @defgroup RETCODES Error codes * * bladeRF library routines return negative values to indicate errors. * Values >= 0 are used to indicate success. * * @code * int status = bladerf_set_gain(dev, BLADERF_CHANNEL_RX(0), 2); * * if (status < 0) { * handle_error(); * } * @endcode * * @{ */ // clang-format off #define BLADERF_ERR_UNEXPECTED (-1) /**< An unexpected failure occurred */ #define BLADERF_ERR_RANGE (-2) /**< Provided parameter is out of range */ #define BLADERF_ERR_INVAL (-3) /**< Invalid operation/parameter */ #define BLADERF_ERR_MEM (-4) /**< Memory allocation error */ #define BLADERF_ERR_IO (-5) /**< File/Device I/O error */ #define BLADERF_ERR_TIMEOUT (-6) /**< Operation timed out */ #define BLADERF_ERR_NODEV (-7) /**< No device(s) available */ #define BLADERF_ERR_UNSUPPORTED (-8) /**< Operation not supported */ #define BLADERF_ERR_MISALIGNED (-9) /**< Misaligned flash access */ #define BLADERF_ERR_CHECKSUM (-10) /**< Invalid checksum */ #define BLADERF_ERR_NO_FILE (-11) /**< File not found */ #define BLADERF_ERR_UPDATE_FPGA (-12) /**< An FPGA update is required */ #define BLADERF_ERR_UPDATE_FW (-13) /**< A firmware update is requied */ #define BLADERF_ERR_TIME_PAST (-14) /**< Requested timestamp is in the past */ #define BLADERF_ERR_QUEUE_FULL (-15) /**< Could not enqueue data into * full queue */ #define BLADERF_ERR_FPGA_OP (-16) /**< An FPGA operation reported failure */ #define BLADERF_ERR_PERMISSION (-17) /**< Insufficient permissions for the * requested operation */ #define BLADERF_ERR_WOULD_BLOCK (-18) /**< Operation would block, but has been * requested to be non-blocking. This * indicates to a caller that it may * need to retry the operation later. */ #define BLADERF_ERR_NOT_INIT (-19) /**< Device insufficiently initialized * for operation */ // clang-format on /** * Obtain a textual description of a value from the \ref RETCODES list * * @param[in] error Error value to look up * * @return Error string */ API_EXPORT const char *CALL_CONV bladerf_strerror(int error); /** @} (End RETCODES) */ #include #include #ifdef __cplusplus } #endif #endif /* LIBBLADERF_H_ */ bladeRF-2024.05/host/libraries/libbladeRF/libbladeRF.pc.in000066400000000000000000000006061457144405000230310ustar00rootroot00000000000000prefix=@LIBBLADERF_PC_PREFIX@ exec_prefix=@LIBBLADERF_PC_EXEC_PREFIX@ libdir=@LIBBLADERF_PC_LIBDIR@ includedir=@LIBBLADERF_PC_INCLUDEDIR@ Name: bladeRF Library Description: C Library for the nuand bladeRF Version: @LIBBLADERF_PC_VERSION@ URL: https://nuand.com Cflags: -I${includedir}/ @LIBBLADERF_PC_CFLAGS@ Libs: -L${libdir}/ @LIBBLADERF_PC_LIBS@ Libs.private: @LIBBLADERF_PC_PRIV_LIBS@ bladeRF-2024.05/host/libraries/libbladeRF/src/000077500000000000000000000000001457144405000206775ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF/src/backend/000077500000000000000000000000001457144405000222665ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF/src/backend/backend.c000066400000000000000000000115171457144405000240260ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2013 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include "rel_assert.h" #include "log.h" #include "devinfo.h" #include "backend/backend.h" #include "backend/backend_config.h" static const struct backend_fns *backend_list[] = BLADERF_BACKEND_LIST; int open_with_any_backend(struct bladerf *dev, struct bladerf_devinfo *info) { size_t i; int status = BLADERF_ERR_NODEV; const size_t n_backends = ARRAY_SIZE(backend_list); for (i = 0; i < n_backends && status != 0; i++) { status = backend_list[i]->open(dev, info); } return status; } int backend_open(struct bladerf *dev, struct bladerf_devinfo *info) { size_t i; int status = BLADERF_ERR_NODEV; const size_t n_backends = ARRAY_SIZE(backend_list); if (info->backend == BLADERF_BACKEND_ANY) { status = open_with_any_backend(dev, info); } else { for (i = 0; i < n_backends; i++) { if (backend_list[i]->matches(info->backend)) { status = backend_list[i]->open(dev, info); break; } } } return status; } int backend_probe(backend_probe_target probe_target, struct bladerf_devinfo **devinfo_items, size_t *num_items) { int status; int first_backend_error = 0; struct bladerf_devinfo_list list; size_t i; const size_t n_backends = ARRAY_SIZE(backend_list); *devinfo_items = NULL; *num_items = 0; status = bladerf_devinfo_list_init(&list); if (status != 0) { log_debug("Failed to initialize devinfo list: %s\n", bladerf_strerror(status)); return status; } for (i = 0; i < n_backends; i++) { status = backend_list[i]->probe(probe_target, &list); if (status < 0 && status != BLADERF_ERR_NODEV) { log_debug("Probe failed on backend %d: %s\n", i, bladerf_strerror(status)); if (!first_backend_error) { first_backend_error = status; } } } *num_items = list.num_elt; if (*num_items != 0) { *devinfo_items = list.elt; } else { /* For no items, we end up passing back a NULL list to the * API caller, so we'll just free this up now */ free(list.elt); /* Report the first error that occurred if we couldn't find anything */ status = first_backend_error == 0 ? BLADERF_ERR_NODEV : first_backend_error; } return status; } int backend_load_fw_from_bootloader(bladerf_backend backend, uint8_t bus, uint8_t addr, struct fx3_firmware *fw) { int status = BLADERF_ERR_NODEV; size_t i; const size_t n_backends = ARRAY_SIZE(backend_list); for (i = 0; i < n_backends; i++) { if (backend_list[i]->matches(backend)) { status = backend_list[i]->load_fw_from_bootloader(backend, bus, addr, fw); break; } } return status; } const char *backend2str(bladerf_backend backend) { switch (backend) { case BLADERF_BACKEND_LIBUSB: return BACKEND_STR_LIBUSB; case BLADERF_BACKEND_LINUX: return BACKEND_STR_LINUX; case BLADERF_BACKEND_CYPRESS: return BACKEND_STR_CYPRESS; default: return BACKEND_STR_ANY; } } int str2backend(const char *str, bladerf_backend *backend) { int status = 0; if (!strcasecmp(BACKEND_STR_LIBUSB, str)) { *backend = BLADERF_BACKEND_LIBUSB; } else if (!strcasecmp(BACKEND_STR_LINUX, str)) { *backend = BLADERF_BACKEND_LINUX; } else if (!strcasecmp(BACKEND_STR_CYPRESS, str)) { *backend = BLADERF_BACKEND_CYPRESS; } else if (!strcasecmp(BACKEND_STR_ANY, str)) { *backend = BLADERF_BACKEND_ANY; } else { log_debug("Invalid backend: %s\n", str); status = BLADERF_ERR_INVAL; *backend = BLADERF_BACKEND_ANY; } return status; } bladeRF-2024.05/host/libraries/libbladeRF/src/backend/backend.h000066400000000000000000000324121457144405000240300ustar00rootroot00000000000000/** * @file backend.h * * @brief This file defines the generic interface to bladeRF backends * * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2013 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef BACKEND_BACKEND_H_ #define BACKEND_BACKEND_H_ #include #include #include #include "logger_entry.h" #define BACKEND_STR_ANY "*" #define BACKEND_STR_LIBUSB "libusb" #define BACKEND_STR_LINUX "linux" #define BACKEND_STR_CYPRESS "cypress" /** * Specifies what to probe for */ typedef enum { BACKEND_PROBE_BLADERF, BACKEND_PROBE_FX3_BOOTLOADER, } backend_probe_target; /** * Backend protocol to use */ typedef enum { BACKEND_FPGA_PROTOCOL_NIOSII_LEGACY, BACKEND_FPGA_PROTOCOL_NIOSII, } backend_fpga_protocol; struct bladerf_devinfo_list; struct fx3_firmware; /** * Backend-specific function table * * The backend is responsible for making calls to * capabilities_init_pre_fpga_load() and capabilities_init_post_fpga_load() when * opening a device and after loading an FPGA, or detecting an FPGA is already * loaded. * */ struct backend_fns { /* Returns true if a backend supports the specified backend type, * and false otherwise */ bool (*matches)(bladerf_backend backend); /* Backends probe for devices and append entries to this list using * bladerf_devinfo_list_append() */ int (*probe)(backend_probe_target probe_target, struct bladerf_devinfo_list *info_list); /* Get VID and PID of the device */ int (*get_vid_pid)(struct bladerf *dev, uint16_t *vid, uint16_t *pid); /* Get flash manufacturer/device IDs */ int (*get_flash_id)(struct bladerf *dev, uint8_t *mid, uint8_t *did); /* Opening device based upon specified device info. */ int (*open)(struct bladerf *dev, struct bladerf_devinfo *info); /* Set the FPGA protocol */ int (*set_fpga_protocol)(struct bladerf *dev, backend_fpga_protocol fpga_protocol); /* Closing of the device and freeing of the data */ void (*close)(struct bladerf *dev); /* Is firmware ready */ int (*is_fw_ready)(struct bladerf *dev); /* Get handle */ int (*get_handle)(struct bladerf *dev, void **handle); /* FPGA Loading and checking */ int (*load_fpga)(struct bladerf *dev, const uint8_t *image, size_t image_size); int (*is_fpga_configured)(struct bladerf *dev); bladerf_fpga_source (*get_fpga_source)(struct bladerf *dev); /* Version checking */ int (*get_fw_version)(struct bladerf *dev, struct bladerf_version *version); int (*get_fpga_version)(struct bladerf *dev, struct bladerf_version *version); /* Flash operations */ /* Erase the specified number of erase blocks */ int (*erase_flash_blocks)(struct bladerf *dev, uint32_t eb, uint16_t count); /* Read the specified number of pages */ int (*read_flash_pages)(struct bladerf *dev, uint8_t *buf, uint32_t page, uint32_t count); /* Write the specified number of pages */ int (*write_flash_pages)(struct bladerf *dev, const uint8_t *buf, uint32_t page, uint32_t count); /* Device startup and reset */ int (*device_reset)(struct bladerf *dev); int (*jump_to_bootloader)(struct bladerf *dev); /* Platform information */ int (*get_cal)(struct bladerf *dev, char *cal); int (*get_otp)(struct bladerf *dev, char *otp); int (*write_otp)(struct bladerf *dev, char *otp); int (*lock_otp)(struct bladerf *dev); int (*get_device_speed)(struct bladerf *dev, bladerf_dev_speed *speed); /* Configuration GPIO (NIOS II <-> logic) accessors */ int (*config_gpio_write)(struct bladerf *dev, uint32_t val); int (*config_gpio_read)(struct bladerf *dev, uint32_t *val); /* Expansion GPIO accessors */ int (*expansion_gpio_write)(struct bladerf *dev, uint32_t mask, uint32_t val); int (*expansion_gpio_read)(struct bladerf *dev, uint32_t *val); int (*expansion_gpio_dir_write)(struct bladerf *dev, uint32_t mask, uint32_t outputs); int (*expansion_gpio_dir_read)(struct bladerf *dev, uint32_t *outputs); /* IQ Correction Settings */ int (*set_iq_gain_correction)(struct bladerf *dev, bladerf_channel ch, int16_t value); int (*set_iq_phase_correction)(struct bladerf *dev, bladerf_channel ch, int16_t value); int (*get_iq_gain_correction)(struct bladerf *dev, bladerf_channel ch, int16_t *value); int (*get_iq_phase_correction)(struct bladerf *dev, bladerf_channel ch, int16_t *value); /* AGC DC Correction Lookup Table */ int (*set_agc_dc_correction)(struct bladerf *dev, int16_t q_max, int16_t i_max, int16_t q_mid, int16_t i_mid, int16_t q_low, int16_t i_low); /* Get current timestamp counter values */ int (*get_timestamp)(struct bladerf *dev, bladerf_direction dir, uint64_t *value); /* Si5338 accessors */ int (*si5338_write)(struct bladerf *dev, uint8_t addr, uint8_t data); int (*si5338_read)(struct bladerf *dev, uint8_t addr, uint8_t *data); /* LMS6002D accessors */ int (*lms_write)(struct bladerf *dev, uint8_t addr, uint8_t data); int (*lms_read)(struct bladerf *dev, uint8_t addr, uint8_t *data); /* INA219 accessors */ int (*ina219_write)(struct bladerf *dev, uint8_t addr, uint16_t data); int (*ina219_read)(struct bladerf *dev, uint8_t addr, uint16_t *data); /* AD9361 accessors */ int (*ad9361_spi_write)(struct bladerf *dev, uint16_t cmd, uint64_t data); int (*ad9361_spi_read)(struct bladerf *dev, uint16_t cmd, uint64_t *data); /* AD9361 accessors */ int (*adi_axi_write)(struct bladerf *dev, uint32_t addr, uint32_t data); int (*adi_axi_read)(struct bladerf *dev, uint32_t addr, uint32_t *data); /* Wishbone Master accessors */ int (*wishbone_master_write)(struct bladerf *dev, uint32_t addr, uint32_t data); int (*wishbone_master_read)(struct bladerf *dev, uint32_t addr, uint32_t *data); /* RFIC command accessors */ int (*rfic_command_write)(struct bladerf *dev, uint16_t cmd, uint64_t data); int (*rfic_command_read)(struct bladerf *dev, uint16_t cmd, uint64_t *data); /* RFFE control accessors */ int (*rffe_control_write)(struct bladerf *dev, uint32_t value); int (*rffe_control_read)(struct bladerf *dev, uint32_t *value); /* RFFE-to-Nios fast lock profile saver */ int (*rffe_fastlock_save)(struct bladerf *dev, bool is_tx, uint8_t rffe_profile, uint16_t nios_profile); /* AD56X1 VCTCXO Trim DAC accessors */ int (*ad56x1_vctcxo_trim_dac_write)(struct bladerf *dev, uint16_t value); int (*ad56x1_vctcxo_trim_dac_read)(struct bladerf *dev, uint16_t *value); /* ADF400X accessors */ int (*adf400x_write)(struct bladerf *dev, uint8_t addr, uint32_t data); int (*adf400x_read)(struct bladerf *dev, uint8_t addr, uint32_t *data); /* VCTCXO accessors */ int (*vctcxo_dac_write)(struct bladerf *dev, uint8_t addr, uint16_t value); int (*vctcxo_dac_read)(struct bladerf *dev, uint8_t addr, uint16_t *value); int (*set_vctcxo_tamer_mode)(struct bladerf *dev, bladerf_vctcxo_tamer_mode mode); int (*get_vctcxo_tamer_mode)(struct bladerf *dev, bladerf_vctcxo_tamer_mode *mode); /* Expansion board SPI */ int (*xb_spi)(struct bladerf *dev, uint32_t value); /* Configure firmware loopback */ int (*set_firmware_loopback)(struct bladerf *dev, bool enable); int (*get_firmware_loopback)(struct bladerf *dev, bool *is_enabled); /* Sample stream */ int (*enable_module)(struct bladerf *dev, bladerf_direction dir, bool enable); int (*init_stream)(struct bladerf_stream *stream, size_t num_transfers); int (*stream)(struct bladerf_stream *stream, bladerf_channel_layout layout); int (*submit_stream_buffer)(struct bladerf_stream *stream, void *buffer, size_t *length, unsigned int timeout_ms, bool nonblock); void (*deinit_stream)(struct bladerf_stream *stream); /* Schedule a frequency retune operation */ int (*retune)(struct bladerf *dev, bladerf_channel ch, uint64_t timestamp, uint16_t nint, uint32_t nfrac, uint8_t freqsel, uint8_t vcocap, bool low_band, uint8_t xb_gpio, bool quick_tune); /* Schedule a frequency retune2 operation */ int (*retune2)(struct bladerf *dev, bladerf_channel ch, uint64_t timestamp, uint16_t nios_profile, uint8_t rffe_profile, uint8_t port, uint8_t spdt); /* Load firmware from FX3 bootloader */ int (*load_fw_from_bootloader)(bladerf_backend backend, uint8_t bus, uint8_t addr, struct fx3_firmware *fw); /* Read a log entry from the FX3 firmware */ int (*read_fw_log)(struct bladerf *dev, logger_entry *e); /* Read and Write access to trigger registers */ int (*read_trigger)(struct bladerf *dev, bladerf_channel ch, bladerf_trigger_signal trigger, uint8_t *val); int (*write_trigger)(struct bladerf *dev, bladerf_channel ch, bladerf_trigger_signal trigger, uint8_t val); /* Backend name */ const char *name; }; /** * Open the device using the backend specified in the provided * bladerf_devinfo structure. * * @param[in] device Device to fill in backend info for * @param[in] info Filled-in device info * * @return 0 on success, BLADERF_ERR_* code on failure */ int backend_open(struct bladerf *dev, struct bladerf_devinfo *info); /** * Probe for devices, filling in the provided devinfo list and size of * the list that gets populated * * @param[in] probe_target Device type to probe for * @param[out] devinfo_items Device info for identified devices * @param[out] num_items Number of items in the devinfo list. * * @return 0 on success, BLADERF_ERR_* on failure */ int backend_probe(backend_probe_target probe_target, struct bladerf_devinfo **devinfo_items, size_t *num_items); /** * Search for bootloader via provided specification, download firmware, * and boot it. * * @param[in] backend Backend to use for this operation * @param[in] bus USB bus the device is connected to * @param[in] addr USB addr associated with the device * @param[in] fw Firmware to load * * @return 0 on success, BLADERF_ERR_* on failure */ int backend_load_fw_from_bootloader(bladerf_backend backend, uint8_t bus, uint8_t addr, struct fx3_firmware *fw); /** * Convert a backend enumeration value to a string * * @param[in] backend Value to convert to a string * * @return A backend string for the associated enumeration value. An invalid * value will yield the "ANY" wildcard. */ const char *backend2str(bladerf_backend backend); /** * Convert a string to a backend type value * * @param[in] str Backend type, as a string. * @param[out] backend Associated backend, on success * * @return 0 on success, BLADERF_ERR_INVAL on invalid type string */ int str2backend(const char *str, bladerf_backend *backend); #endif bladeRF-2024.05/host/libraries/libbladeRF/src/backend/backend_config.h.in000066400000000000000000000047321457144405000257660ustar00rootroot00000000000000/** * @file backend_config.h * * @brief Compile-time backend selection * * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2013 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef BACKEND_BACKEND_CONFIG_H_ #define BACKEND_BACKEND_CONFIG_H_ #cmakedefine ENABLE_BACKEND_USB #cmakedefine ENABLE_BACKEND_LIBUSB #cmakedefine ENABLE_BACKEND_CYAPI #cmakedefine ENABLE_BACKEND_DUMMY #cmakedefine ENABLE_BACKEND_LINUX_DRIVER #include "backend/backend.h" #include "backend/usb/usb.h" #ifdef ENABLE_BACKEND_DUMMY extern const struct backend_fns backend_fns_dummy; #define BACKEND_DUMMY &backend_fns_dummy, #else #define BACKEND_DUMMY #endif #ifdef ENABLE_BACKEND_USB extern const struct backend_fns backend_fns_usb; #define BACKEND_USB &backend_fns_usb, #ifdef ENABLE_BACKEND_LIBUSB extern const struct usb_driver usb_driver_libusb; #define BACKEND_USB_LIBUSB &usb_driver_libusb, #else #define BACKEND_USB_LIBUSB #endif #ifdef ENABLE_BACKEND_CYAPI extern const struct usb_driver usb_driver_cypress; #define BACKEND_USB_CYAPI &usb_driver_cypress, #else #define BACKEND_USB_CYAPI #endif #define BLADERF_USB_BACKEND_LIST \ { \ BACKEND_USB_LIBUSB \ BACKEND_USB_CYAPI \ } #if !defined(ENABLE_BACKEND_LIBUSB) && !defined(ENABLE_BACKEND_CYAPI) #error "No USB backends are enabled. One or more must be enabled." #endif #else #define BACKEND_USB #endif #if !defined(ENABLE_BACKEND_USB) && !defined(ENABLE_BACKEND_DUMMY) #error "No backends are enabled. One more more must be enabled." #endif /* This list should be ordered by preference (highest first) */ #define BLADERF_BACKEND_LIST \ { \ BACKEND_USB \ BACKEND_DUMMY \ } #endif bladeRF-2024.05/host/libraries/libbladeRF/src/backend/dummy/000077500000000000000000000000001457144405000234215ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF/src/backend/dummy/dummy.c000066400000000000000000000345011457144405000247230ustar00rootroot00000000000000/* * Dummy backend to allow libbladeRF to build when no other backends are * enabled. This is intended for development purposes only, and should * generally should not be enabled for libbladeRF releases. * * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2013 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include "backend/backend.h" #include "board/board.h" static bool dummy_matches(bladerf_backend backend) { return false; } /* We never "find" dummy devices */ static int dummy_probe(backend_probe_target probe_target, struct bladerf_devinfo_list *info_list) { return 0; } static int dummy_get_vid_pid(struct bladerf *dev, uint16_t *vid, uint16_t *pid) { return BLADERF_ERR_UNSUPPORTED; } static int dummy_open(struct bladerf *dev, struct bladerf_devinfo *info) { return BLADERF_ERR_NODEV; } static int dummy_set_fpga_protocol(struct bladerf *dev, backend_fpga_protocol fpga_protocol) { return 0; } static void dummy_close(struct bladerf *dev) { /* Nothing to do */ } static int dummy_is_fw_ready(struct bladerf *dev) { return 0; } static int dummy_get_handle(struct bladerf *dev, void **handle) { return 0; } static int dummy_get_flash_id(struct bladerf *dev, uint8_t *mid, uint8_t *did) { return BLADERF_ERR_UNSUPPORTED; } static int dummy_load_fpga(struct bladerf *dev, const uint8_t *image, size_t image_size) { return 0; } static int dummy_is_fpga_configured(struct bladerf *dev) { return 0; } static int dummy_get_fw_version(struct bladerf *dev, struct bladerf_version *version) { return 0; } static int dummy_get_fpga_version(struct bladerf *dev, struct bladerf_version *version) { return 0; } static int dummy_erase_flash_blocks(struct bladerf *dev, uint32_t eb, uint16_t count) { return 0; } static int dummy_read_flash_pages(struct bladerf *dev, uint8_t *buf, uint32_t page, uint32_t count) { return 0; } static int dummy_write_flash_pages(struct bladerf *dev, const uint8_t *buf, uint32_t page, uint32_t count) { return 0; } static int dummy_device_reset(struct bladerf *dev) { return 0; } static int dummy_jump_to_bootloader(struct bladerf *dev) { return 0; } static int dummy_get_cal(struct bladerf *dev, char *cal) { return 0; } static int dummy_get_otp(struct bladerf *dev, char *otp) { return 0; } static int dummy_write_otp(struct bladerf *dev, char *otp) { return 0; } static int dummy_lock_otp(struct bladerf *dev) { return 0; } static int dummy_get_device_speed(struct bladerf *dev, bladerf_dev_speed *device_speed) { return 0; } static int dummy_config_gpio_write(struct bladerf *dev, uint32_t val) { return 0; } static int dummy_config_gpio_read(struct bladerf *dev, uint32_t *val) { return 0; } static int dummy_expansion_gpio_write(struct bladerf *dev, uint32_t mask, uint32_t val) { return 0; } static int dummy_expansion_gpio_read(struct bladerf *dev, uint32_t *val) { return 0; } static int dummy_expansion_gpio_dir_write(struct bladerf *dev, uint32_t mask, uint32_t val) { return 0; } static int dummy_expansion_gpio_dir_read(struct bladerf *dev, uint32_t *val) { return 0; } static int dummy_set_iq_gain_correction(struct bladerf *dev, bladerf_channel ch, int16_t value) { return 0; } static int dummy_set_iq_phase_correction(struct bladerf *dev, bladerf_channel ch, int16_t value) { return 0; } static int dummy_get_iq_gain_correction(struct bladerf *dev, bladerf_channel ch, int16_t *value) { *value = 0; return 0; } static int dummy_get_iq_phase_correction(struct bladerf *dev, bladerf_channel ch, int16_t *value) { *value = 0; return 0; } static int dummy_get_timestamp(struct bladerf *dev, bladerf_direction dir, uint64_t *val) { return 0; } static int dummy_si5338_read(struct bladerf *dev, uint8_t addr, uint8_t *data) { return 0; } static int dummy_si5338_write(struct bladerf *dev, uint8_t addr, uint8_t data) { return 0; } static int dummy_lms_write(struct bladerf *dev, uint8_t addr, uint8_t data) { return 0; } static int dummy_lms_read(struct bladerf *dev, uint8_t addr, uint8_t *data) { return 0; } static int dummy_ina219_write(struct bladerf *dev, uint8_t cmd, uint16_t data) { return 0; } static int dummy_ina219_read(struct bladerf *dev, uint8_t addr, uint16_t *data) { return 0; } static int dummy_ad9361_spi_write(struct bladerf *dev, uint16_t cmd, uint64_t data) { return 0; } static int dummy_ad9361_spi_read(struct bladerf *dev, uint16_t cmd, uint64_t *data) { return 0; } static int dummy_adi_axi_write(struct bladerf *dev, uint32_t addr, uint32_t data) { return 0; } static int dummy_adi_axi_read(struct bladerf *dev, uint32_t addr, uint32_t *data) { return 0; } static int dummy_rffe_control_write(struct bladerf *dev, uint32_t value) { return 0; } static int dummy_rffe_control_read(struct bladerf *dev, uint32_t *value) { return 0; } static int dummy_rffe_fastlock_save(struct bladerf *dev, bool is_tx, uint8_t rffe_profile, uint16_t nios_profile) { return 0; } static int dummy_ad56x1_vctcxo_trim_dac_write(struct bladerf *dev, uint16_t value) { return 0; } static int dummy_ad56x1_vctcxo_trim_dac_read(struct bladerf *dev, uint16_t *value) { return 0; } static int dummy_adf400x_write(struct bladerf *dev, uint8_t addr, uint32_t data) { return 0; } static int dummy_adf400x_read(struct bladerf *dev, uint8_t addr, uint32_t *data) { return 0; } static int dummy_vctcxo_dac_write(struct bladerf *dev, uint8_t addr, uint16_t value) { return 0; } static int dummy_vctcxo_dac_read(struct bladerf *dev, uint8_t addr, uint16_t *value) { return 0; } static int dummy_set_vctcxo_tamer_mode(struct bladerf *dev, bladerf_vctcxo_tamer_mode mode) { return 0; } static int dummy_get_vctcxo_tamer_mode(struct bladerf *dev, bladerf_vctcxo_tamer_mode *mode) { *mode = BLADERF_VCTCXO_TAMER_INVALID; return 0; } static int dummy_xb_spi(struct bladerf *dev, uint32_t value) { return 0; } static int dummy_set_firmware_loopback(struct bladerf *dev, bool enable) { return 0; } static int dummy_get_firmware_loopback(struct bladerf *dev, bool *is_enabled) { *is_enabled = false; return 0; } static int dummy_enable_module(struct bladerf *dev, bladerf_direction dir, bool enable) { return 0; } static int dummy_init_stream(struct bladerf_stream *stream, size_t num_transfers) { return 0; } static int dummy_stream(struct bladerf_stream *stream, bladerf_channel_layout layout) { return 0; } static int dummy_submit_stream_buffer(struct bladerf_stream *stream, void *buffer, unsigned int timeout_ms, bool nonblock) { return 0; } static void dummy_deinit_stream(struct bladerf_stream *stream) { return; } static int dummy_retune(struct bladerf *dev, bladerf_channel ch, uint64_t timestamp, uint16_t nint, uint32_t nfrac, uint8_t freqsel, uint8_t vcocap, bool low_band, bool quick_tune) { return 0; } static int dummy_load_fw_from_bootloader(bladerf_backend backend, uint8_t bus, uint8_t addr, struct fx3_firmware *fw) { return 0; } static int dummy_read_fw_log(struct bladerf *dev, logger_entry *e) { *e = LOG_EOF; return 0; } static int dummy_read_trigger(struct bladerf *dev, bladerf_channel ch, bladerf_trigger_signal trigger, uint8_t *value) { *value = 0; return 0; } static int dummy_write_trigger(struct bladerf *dev, bladerf_channel ch, bladerf_trigger_signal trigger, uint8_t value) { return 0; } const struct backend_fns backend_fns_dummy = { FIELD_INIT(.matches, dummy_matches), FIELD_INIT(.probe, dummy_probe), FIELD_INIT(.get_vid_pid, dummy_get_vid_pid), FIELD_INIT(.get_flash_id, dummy_get_flash_id), FIELD_INIT(.open, dummy_open), FIELD_INIT(.set_fpga_protocol, dummy_set_fpga_protocol), FIELD_INIT(.close, dummy_close), FIELD_INIT(.is_fw_ready, dummy_is_fw_ready), FIELD_INIT(.get_handle, dummy_get_handle), FIELD_INIT(.load_fpga, dummy_load_fpga), FIELD_INIT(.is_fpga_configured, dummy_is_fpga_configured), FIELD_INIT(.get_fw_version, dummy_get_fw_version), FIELD_INIT(.get_fpga_version, dummy_get_fpga_version), FIELD_INIT(.erase_flash_blocks, dummy_erase_flash_blocks), FIELD_INIT(.read_flash_pages, dummy_read_flash_pages), FIELD_INIT(.write_flash_pages, dummy_write_flash_pages), FIELD_INIT(.device_reset, dummy_device_reset), FIELD_INIT(.jump_to_bootloader, dummy_jump_to_bootloader), FIELD_INIT(.get_cal, dummy_get_cal), FIELD_INIT(.get_otp, dummy_get_otp), FIELD_INIT(.write_otp, dummy_write_otp), FIELD_INIT(.lock_otp, dummy_lock_otp), FIELD_INIT(.get_device_speed, dummy_get_device_speed), FIELD_INIT(.config_gpio_write, dummy_config_gpio_write), FIELD_INIT(.config_gpio_read, dummy_config_gpio_read), FIELD_INIT(.expansion_gpio_write, dummy_expansion_gpio_write), FIELD_INIT(.expansion_gpio_read, dummy_expansion_gpio_read), FIELD_INIT(.expansion_gpio_dir_write, dummy_expansion_gpio_dir_write), FIELD_INIT(.expansion_gpio_dir_read, dummy_expansion_gpio_dir_read), FIELD_INIT(.set_iq_gain_correction, dummy_set_iq_gain_correction), FIELD_INIT(.set_iq_phase_correction, dummy_set_iq_phase_correction), FIELD_INIT(.get_iq_gain_correction, dummy_get_iq_gain_correction), FIELD_INIT(.get_iq_phase_correction, dummy_get_iq_phase_correction), FIELD_INIT(.get_timestamp, dummy_get_timestamp), FIELD_INIT(.si5338_write, dummy_si5338_write), FIELD_INIT(.si5338_read, dummy_si5338_read), FIELD_INIT(.lms_write, dummy_lms_write), FIELD_INIT(.lms_read, dummy_lms_read), FIELD_INIT(.ina219_write, dummy_ina219_write), FIELD_INIT(.ina219_read, dummy_ina219_read), FIELD_INIT(.ad9361_spi_write, dummy_ad9361_spi_write), FIELD_INIT(.ad9361_spi_read, dummy_ad9361_spi_read), FIELD_INIT(.adi_axi_write, dummy_adi_axi_write), FIELD_INIT(.adi_axi_read, dummy_adi_axi_read), FIELD_INIT(.rffe_control_write, dummy_rffe_control_write), FIELD_INIT(.rffe_control_read, dummy_rffe_control_read), FIELD_INIT(.rffe_fastlock_save, dummy_rffe_fastlock_save), FIELD_INIT(.ad56x1_vctcxo_trim_dac_write, dummy_ad56x1_vctcxo_trim_dac_write), FIELD_INIT(.ad56x1_vctcxo_trim_dac_read, dummy_ad56x1_vctcxo_trim_dac_read), FIELD_INIT(.adf400x_write, dummy_adf400x_write), FIELD_INIT(.adf400x_read, dummy_adf400x_read), FIELD_INIT(.vctcxo_dac_write, dummy_vctcxo_dac_write), FIELD_INIT(.vctcxo_dac_read, dummy_vctcxo_dac_read), FIELD_INIT(.set_vctcxo_tamer_mode, dummy_set_vctcxo_tamer_mode), FIELD_INIT(.get_vctcxo_tamer_mode, dummy_get_vctcxo_tamer_mode), FIELD_INIT(.xb_spi, dummy_xb_spi), FIELD_INIT(.set_firmware_loopback, dummy_set_firmware_loopback), FIELD_INIT(.get_firmware_loopback, dummy_get_firmware_loopback), FIELD_INIT(.enable_module, dummy_enable_module), FIELD_INIT(.init_stream, dummy_init_stream), FIELD_INIT(.stream, dummy_stream), FIELD_INIT(.submit_stream_buffer, dummy_submit_stream_buffer), FIELD_INIT(.deinit_stream, dummy_deinit_stream), FIELD_INIT(.retune, dummy_retune), FIELD_INIT(.load_fw_from_bootloader, dummy_load_fw_from_bootloader), FIELD_INIT(.read_fw_log, dummy_read_fw_log), FIELD_INIT(.read_trigger, dummy_read_trigger), FIELD_INIT(.write_trigger, dummy_write_trigger), FIELD_INIT(.name, "dummy"), }; bladeRF-2024.05/host/libraries/libbladeRF/src/backend/dummy/dummy.h000066400000000000000000000020301457144405000247200ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2013 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #if defined(ENABLE_BACKEND_DUMMY) #define BACKEND_DUMMY_H_ #ifndef BACKEND_DUMMY_H_ #include "bladerf_priv.h" extern const struct bladerf_fn bladerf_dummy_fn; #endif #endif bladeRF-2024.05/host/libraries/libbladeRF/src/backend/usb/000077500000000000000000000000001457144405000230575ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF/src/backend/usb/cyapi.c000066400000000000000000000615341457144405000243410ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2013-2016 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* This is a Windows-specific USB backend using Cypress's CyAPI, which utilizes * the CyUSB3.sys driver (with a CyUSB3.inf modified to include the bladeRF * VID/PID). */ extern "C" { #include #include #include #include "bladeRF.h" /* Firmware interface */ #include "devinfo.h" #include "backend/backend.h" #include "backend/usb/usb.h" #include "streaming/async.h" #include "helpers/timeout.h" #include "log.h" } #include /* This GUID must match that in the modified CyUSB3.inf used with the bladeRF */ static const GUID driver_guid = { 0x35D5D3F1, 0x9D0E, 0x4F62, 0xBC, 0xFB, 0xB0, 0xD4, 0x8E,0xA6, 0x34, 0x16 }; /* "Private data" for the CyAPI backend */ struct bladerf_cyapi { CCyUSBDevice *dev; HANDLE mutex; }; struct transfer { OVERLAPPED event; /* Transfer completion event handle */ PUCHAR handle; /* Handle for in-flight transfer */ PUCHAR buffer; /* Buffer associated with transfer */ }; struct stream_data { CCyBulkEndPoint *ep; /* Endpoint associated with the stream */ struct transfer *transfers; /* Transfer slots */ size_t num_transfers; /* Max # of in-flight transfers */ size_t num_avail; size_t avail_i; /* Index of next available transfer slot */ size_t inflight_i; /* Index of in-flight transfer that is * expected to finish next */ }; static inline struct bladerf_cyapi * get_backend_data(void *driver) { assert(driver); return (struct bladerf_cyapi *) driver; } static inline CCyUSBDevice * get_device(void *driver) { struct bladerf_cyapi *backend_data = get_backend_data(driver); assert(backend_data->dev); return backend_data->dev; } static inline struct stream_data * get_stream_data(struct bladerf_stream *s) { assert(s && s->backend_data); return (struct stream_data *) s->backend_data; } static int open_device(CCyUSBDevice *dev, int instance, HANDLE *mutex) { int status = 0; bool success; DWORD last_error; const char prefix[] = "Global\\bladeRF-"; const size_t mutex_name_len = strlen(prefix) + BLADERF_SERIAL_LENGTH; char *mutex_name = (char *) calloc(mutex_name_len, 1); if (mutex_name == NULL) { return BLADERF_ERR_MEM; } else { strcpy(mutex_name, prefix); } success = dev->Open(instance); if (!success) { status = BLADERF_ERR_IO; goto out; } wcstombs(mutex_name + strlen(prefix), dev->SerialNumber, sizeof(mutex_name) - BLADERF_SERIAL_LENGTH - 1); log_verbose("Mutex name: %s\n", mutex_name); SetLastError(0); *mutex = CreateMutex(NULL, true, mutex_name); last_error = GetLastError(); if (mutex == NULL || last_error != 0) { log_debug("Unable to create device mutex: mutex=%p, last_error=%ld\n", mutex, last_error); dev->Close(); status = BLADERF_ERR_NODEV; } out: free(mutex_name); return status; } static inline bool has_bladerf_ids(CCyUSBDevice *dev) { return ((dev->VendorID == USB_NUAND_VENDOR_ID) && (dev->ProductID == USB_NUAND_BLADERF_PRODUCT_ID)) || ((dev->VendorID == USB_NUAND_VENDOR_ID) && (dev->ProductID == USB_NUAND_BLADERF2_PRODUCT_ID)) || ((dev->VendorID == USB_NUAND_LEGACY_VENDOR_ID) && (dev->ProductID == USB_NUAND_BLADERF_LEGACY_PRODUCT_ID)); } static inline bool has_boot_ids(CCyUSBDevice *dev) { return ((dev->VendorID == USB_CYPRESS_VENDOR_ID) && (dev->ProductID == USB_FX3_PRODUCT_ID)) || ((dev->VendorID == USB_NUAND_VENDOR_ID) && (dev->ProductID == USB_NUAND_BLADERF_BOOT_PRODUCT_ID)) || ((dev->VendorID == USB_NUAND_LEGACY_VENDOR_ID) && (dev->ProductID == USB_NUAND_BLADERF_LEGACY_BOOT_PRODUCT_ID)); } static bool device_matches_target(CCyUSBDevice *dev, backend_probe_target target) { bool matches = false; switch (target) { case BACKEND_PROBE_BLADERF: matches = has_bladerf_ids(dev); break; case BACKEND_PROBE_FX3_BOOTLOADER: matches = has_boot_ids(dev); break; } return matches; } static int cyapi_probe(backend_probe_target probe_target, struct bladerf_devinfo_list *info_list) { CCyUSBDevice *dev = new CCyUSBDevice(NULL, driver_guid); if (dev == NULL) { return BLADERF_ERR_MEM; } for (int i = 0; i < dev->DeviceCount(); i++) { struct bladerf_devinfo info; bool opened; int status; opened = dev->Open(i); if (opened) { if (device_matches_target(dev, probe_target)) { const size_t max_serial = sizeof(info.serial) - 1; info.instance = i; memset(info.serial, 0, sizeof(info.serial)); wcstombs(info.serial, dev->SerialNumber, max_serial); info.usb_addr = dev->USBAddress; info.usb_bus = 0; /* CyAPI doesn't provide this */ info.backend = BLADERF_BACKEND_CYPRESS; status = bladerf_devinfo_list_add(info_list, &info); if (status != 0) { log_error("Could not add device to list: %s\n", bladerf_strerror(status)); } else { log_verbose("Added instance %d to device list\n", info.instance); } } dev->Close(); } } delete dev; return 0; } static int open_via_info(void **driver, backend_probe_target probe_target, struct bladerf_devinfo *info_in, struct bladerf_devinfo *info_out) { int status; int instance = -1; struct bladerf_devinfo_list info_list; CCyUSBDevice *dev; struct bladerf_cyapi *cyapi_data; dev = new CCyUSBDevice(NULL, driver_guid); if (dev == NULL) { return BLADERF_ERR_MEM; } cyapi_data = (struct bladerf_cyapi *) calloc(1, sizeof(cyapi_data[0])); if (cyapi_data == NULL) { delete dev; return BLADERF_ERR_MEM; } bladerf_devinfo_list_init(&info_list); status = cyapi_probe(probe_target, &info_list); for (unsigned int i = 0; i < info_list.num_elt && status == 0; i++) { if (bladerf_devinfo_matches(&info_list.elt[i], info_in)) { instance = info_list.elt[i].instance; status = open_device(dev, instance, &cyapi_data->mutex); if (status == 0) { cyapi_data->dev = dev; *driver = cyapi_data; if (info_out != NULL) { memcpy(info_out, &info_list.elt[instance], sizeof(info_out[0])); } status = 0; break; } } } if (status == 0 && instance < 0) { status = BLADERF_ERR_NODEV; } if (status != 0) { delete dev; ReleaseMutex(cyapi_data->mutex); CloseHandle(cyapi_data->mutex); } free(info_list.elt); return status; } static int cyapi_open(void **driver, struct bladerf_devinfo *info_in, struct bladerf_devinfo *info_out) { return open_via_info(driver, BACKEND_PROBE_BLADERF, info_in, info_out); } static int cyapi_change_setting(void *driver, uint8_t setting) { CCyUSBDevice *dev = get_device(driver); if (dev->SetAltIntfc(setting)) { return 0; } else { return BLADERF_ERR_IO; } } static void cyapi_close(void *driver) { struct bladerf_cyapi *cyapi_data = get_backend_data(driver); cyapi_data->dev->Close(); delete cyapi_data->dev; ReleaseMutex(cyapi_data->mutex); CloseHandle(cyapi_data->mutex); free(driver); } static int cyapi_get_vid_pid(void *driver, uint16_t *vid, uint16_t *pid) { CCyUSBDevice *dev = get_device(driver); *vid = dev->VendorID; *pid = dev->ProductID; return 0; } static int cyapi_get_flash_id(void *driver, uint8_t *mid, uint8_t *did) { return BLADERF_ERR_UNSUPPORTED; } static int cyapi_get_handle(void *driver, void **handle) { CCyUSBDevice *dev = get_device(driver); *handle = dev; return 0; } static int cyapi_get_speed(void *driver, bladerf_dev_speed *device_speed) { int status = 0; CCyUSBDevice *dev = get_device(driver); if (dev->bHighSpeed) { *device_speed = BLADERF_DEVICE_SPEED_HIGH; } else if (dev->bSuperSpeed) { *device_speed = BLADERF_DEVICE_SPEED_SUPER; } else { *device_speed = BLADERF_DEVICE_SPEED_UNKNOWN; status = BLADERF_ERR_UNEXPECTED; log_debug("%s: Unable to determine device speed.\n", __FUNCTION__); } return status; } static int cyapi_control_transfer(void *driver, usb_target target_type, usb_request req_type, usb_direction dir, uint8_t request, uint16_t wvalue, uint16_t windex, void *buffer, uint32_t buffer_len, uint32_t timeout_ms) { CCyUSBDevice *dev = get_device(driver); LONG len; bool success; int status = 0; switch (dir) { case USB_DIR_DEVICE_TO_HOST: dev->ControlEndPt->Direction = DIR_FROM_DEVICE; break; case USB_DIR_HOST_TO_DEVICE: dev->ControlEndPt->Direction = DIR_TO_DEVICE; break; } switch (req_type) { case USB_REQUEST_CLASS: dev->ControlEndPt->ReqType = REQ_CLASS; break; case USB_REQUEST_STANDARD: dev->ControlEndPt->ReqType = REQ_STD; break; case USB_REQUEST_VENDOR: dev->ControlEndPt->ReqType = REQ_VENDOR; break; } switch (target_type) { case USB_TARGET_DEVICE: dev->ControlEndPt->Target = TGT_DEVICE; break; case USB_TARGET_ENDPOINT: dev->ControlEndPt->Target = TGT_ENDPT; break; case USB_TARGET_INTERFACE: dev->ControlEndPt->Target = TGT_INTFC; break; case USB_TARGET_OTHER: dev->ControlEndPt->Target = TGT_OTHER; break; } dev->ControlEndPt->MaxPktSize = buffer_len; dev->ControlEndPt->ReqCode = request; dev->ControlEndPt->Index = windex; dev->ControlEndPt->Value = wvalue; dev->ControlEndPt->TimeOut = timeout_ms ? timeout_ms : INFINITE; len = buffer_len; success = dev->ControlEndPt->XferData((PUCHAR)buffer, len); if (!success) { status = BLADERF_ERR_IO; } return status; } static CCyBulkEndPoint *get_ep(CCyUSBDevice *USBDevice, int id) { int count; count = USBDevice->EndPointCount(); for (int i = 1; i < count; i++) { if (USBDevice->EndPoints[i]->Address == id) { return (CCyBulkEndPoint *) USBDevice->EndPoints[i]; } } return NULL; } static int cyapi_bulk_transfer(void *driver, uint8_t endpoint, void *buffer, uint32_t buffer_len, uint32_t timeout_ms) { bool success; int status = BLADERF_ERR_IO; CCyUSBDevice *dev = get_device(driver); CCyBulkEndPoint *ep = get_ep(dev, endpoint); if (ep != NULL) { LONG len = buffer_len; dev->ControlEndPt->TimeOut = timeout_ms ? timeout_ms : INFINITE; success = ep->XferData((PUCHAR)buffer, len); if (success) { if (len == buffer_len) { status = 0; } else { log_debug("Transfer len mismatch: %u vs %u\n", (unsigned int) buffer_len, (unsigned int) len); } } else { log_debug("Transfered failed.\n"); } } else { log_debug("Failed to get EP handle.\n"); } return status; } static int cyapi_get_string_descriptor(void *driver, uint8_t index, void *buffer, uint32_t buffer_len) { int status; char *str; memset(buffer, 0, buffer_len); status = cyapi_control_transfer(driver, USB_TARGET_DEVICE, USB_REQUEST_STANDARD, USB_DIR_DEVICE_TO_HOST, 0x06, 0x0300 | index, 0, buffer, buffer_len, BLADE_USB_TIMEOUT_MS); if (status != 0) { return status; } str = (char*)buffer; for (unsigned int i = 0; i < (buffer_len / 2); i++) { str[i] = str[2 + (i * 2)]; } return 0; } static int cyapi_deinit_stream(void *driver, struct bladerf_stream *stream) { struct stream_data *data; assert(stream != NULL); data = get_stream_data(stream); assert(data != NULL); for (unsigned int i = 0; i < data->num_transfers; i++) { CloseHandle(data->transfers[i].event.hEvent); } free(data->transfers); free(data); return 0; } static int cyapi_init_stream(void *driver, struct bladerf_stream *stream, size_t num_transfers) { int status = BLADERF_ERR_MEM; CCyUSBDevice *dev = get_device(driver); struct stream_data *data; data = (struct stream_data *) calloc(1, sizeof(data[0])); if (data != NULL) { stream->backend_data = data; } else { return status; } data->transfers = (struct transfer*) calloc(num_transfers, sizeof(struct transfer)); if (data->transfers == NULL) { goto out; } for (unsigned int i = 0; i < num_transfers; i++) { data->transfers[i].event.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); if (data->transfers[i].event.hEvent == NULL) { log_debug("%s: Failed to create EventObject for transfer %u\n", (unsigned int) i); goto out; } } data->num_transfers = num_transfers; data->num_avail = num_transfers; data->inflight_i = 0; data->avail_i = 0; status = 0; out: if (status != 0) { cyapi_deinit_stream(driver, stream); stream->backend_data = NULL; } return status; } #ifdef LOGGING_ENABLED static inline int find_buf(void* ptr, struct bladerf_stream *stream) { for (unsigned int i=0; inum_buffers; i++) { if (stream->buffers[i] == ptr) { return i; } } log_debug("Unabled to find buffer %p\n:", ptr); return -1; } #endif #ifndef ENABLE_LIBBLADERF_ASYNC_LOG_VERBOSE #undef log_verbose #define log_verbose(...) #endif static inline size_t next_idx(struct stream_data *data, size_t i) { return (i + 1) % data->num_transfers; } /* Assumes a transfer is available and the stream lock is being held */ static int submit_transfer(struct bladerf_stream *stream, void *buffer, size_t len) { int status = 0; PUCHAR xfer; struct stream_data *data = get_stream_data(stream); LONG buffer_size = (LONG) len; assert(data->transfers[data->avail_i].handle == NULL); assert(data->transfers[data->avail_i].buffer == NULL); assert(data->num_avail != 0); xfer = data->ep->BeginDataXfer((PUCHAR) buffer, buffer_size, &data->transfers[data->avail_i].event); if (xfer != NULL) { data->transfers[data->avail_i].handle = xfer; data->transfers[data->avail_i].buffer = (PUCHAR) buffer; log_verbose("Submitted buffer %p using transfer slot %u.\n", buffer, (unsigned int) data->avail_i); data->avail_i = next_idx(data, data->avail_i); data->num_avail--; } else { status = BLADERF_ERR_UNEXPECTED; log_debug("Failed to submit buffer %p in transfer slot %u.\n", buffer, (unsigned int) data->avail_i); } return status; } static int cyapi_stream(void *driver, struct bladerf_stream *stream, bladerf_channel_layout layout) { int status; int idx = 0; long len; void *next_buffer; ULONG timeout_ms; bool success, done; struct stream_data *data = get_stream_data(stream); struct bladerf_cyapi *cyapi = get_backend_data(driver); struct bladerf_metadata meta; assert(stream->transfer_timeout <= ULONG_MAX); if (stream->transfer_timeout == 0) { timeout_ms = INFINITE; } else { timeout_ms = stream->transfer_timeout; } switch (layout & BLADERF_DIRECTION_MASK) { case BLADERF_RX: data->ep = get_ep(cyapi->dev, SAMPLE_EP_IN); break; case BLADERF_TX: data->ep = get_ep(cyapi->dev, SAMPLE_EP_OUT); break; } if (data->ep == NULL) { log_debug("Failed to get EP handle.\n"); return BLADERF_ERR_UNEXPECTED; } data->ep->XferMode = XMODE_DIRECT; data->ep->Abort(); data->ep->Reset(); log_verbose("Starting stream...\n"); status = 0; done = false; memset(&meta, 0, sizeof(meta)); MUTEX_LOCK(&stream->lock); for (unsigned int i = 0; i < data->num_transfers && status == 0; i++) { if ((layout & BLADERF_DIRECTION_MASK) == BLADERF_TX) { next_buffer = stream->cb(stream->dev, stream, &meta, NULL, stream->samples_per_buffer, stream->user_data); if (next_buffer == BLADERF_STREAM_SHUTDOWN) { done = true; break; } else if (next_buffer == BLADERF_STREAM_NO_DATA) { continue; } } else { next_buffer = stream->buffers[i]; } if ((stream->layout & BLADERF_DIRECTION_MASK) == BLADERF_TX && stream->format == BLADERF_FORMAT_PACKET_META) { status = submit_transfer(stream, next_buffer, meta.actual_count); } else { status = submit_transfer(stream, next_buffer, async_stream_buf_bytes(stream)); } } MUTEX_UNLOCK(&stream->lock); if (status != 0) { goto out; } while (!done) { struct transfer *xfer; size_t i; i = data->inflight_i; xfer = &data->transfers[i]; success = data->ep->WaitForXfer(&xfer->event, timeout_ms); if (!success) { status = BLADERF_ERR_TIMEOUT; log_debug("Steam timed out.\n"); break; } len = 0; next_buffer = NULL; log_verbose("Got transfer complete in slot %u (buffer %p)\n", i, data->transfers[i].buffer); MUTEX_LOCK(&stream->lock); success = data->ep->FinishDataXfer(data->transfers[i].buffer, (LONG &)len, &data->transfers[i].event, xfer->handle); if (success) { next_buffer = stream->cb(stream->dev, stream, &meta, data->transfers[i].buffer, bytes_to_samples(stream->format, (LONG &)len), stream->user_data); } else { done = true; status = BLADERF_ERR_IO; log_debug("Failed to finish transfer %u, buf=%p.\n", (unsigned int)i, &data->transfers[i].buffer); } data->transfers[i].buffer = NULL; data->transfers[i].handle = NULL; data->num_avail++; pthread_cond_signal(&stream->can_submit_buffer); if (next_buffer == BLADERF_STREAM_SHUTDOWN) { done = true; } else if (next_buffer != BLADERF_STREAM_NO_DATA) { if ((layout & BLADERF_DIRECTION_MASK) == BLADERF_TX && stream->format == BLADERF_FORMAT_PACKET_META) { status = submit_transfer(stream, next_buffer, meta.actual_count); } else { status = submit_transfer(stream, next_buffer, async_stream_buf_bytes(stream)); } done = (status != 0); } data->inflight_i = next_idx(data, data->inflight_i); MUTEX_UNLOCK(&stream->lock); } out: MUTEX_LOCK(&stream->lock); stream->error_code = status; stream->state = STREAM_SHUTTING_DOWN; data->ep->Abort(); data->ep->Reset(); for (unsigned int i = 0; i < data->num_transfers; i++) { LONG len = 0; if (data->transfers[i].handle != NULL) { data->ep->FinishDataXfer(data->transfers[i].buffer, (LONG &)len, &data->transfers[i].event, data->transfers[i].handle); data->transfers[i].buffer = NULL; data->transfers[i].handle = NULL; data->num_avail++; } } assert(data->num_avail == data->num_transfers); stream->state = STREAM_DONE; log_verbose("Stream done (error_code = %d)\n", stream->error_code); MUTEX_UNLOCK(&stream->lock); return 0; } /* The top-level code will have acquired the stream->lock for us */ int cyapi_submit_stream_buffer(void *driver, struct bladerf_stream *stream, void *buffer, size_t *length, unsigned int timeout_ms, bool nonblock) { int status = 0; struct timespec timeout_abs; struct stream_data *data = get_stream_data(stream); if (buffer == BLADERF_STREAM_SHUTDOWN) { if (data->num_avail == data->num_transfers) { stream->state = STREAM_DONE; } else { stream->state = STREAM_SHUTTING_DOWN; } return 0; } if (data->num_avail == 0) { if (nonblock) { log_debug("Non-blocking buffer submission requested, but no " "transfers are currently available."); return BLADERF_ERR_WOULD_BLOCK; } if (timeout_ms != 0) { status = populate_abs_timeout(&timeout_abs, timeout_ms); if (status != 0) { return BLADERF_ERR_UNEXPECTED; } while (data->num_avail == 0 && status == 0) { status = pthread_cond_timedwait(&stream->can_submit_buffer, &stream->lock, &timeout_abs); } } else { while (data->num_avail == 0 && status == 0) { status = pthread_cond_wait(&stream->can_submit_buffer, &stream->lock); } } } if (status == ETIMEDOUT) { return BLADERF_ERR_TIMEOUT; } else if (status != 0) { return BLADERF_ERR_UNEXPECTED; } else { return submit_transfer(stream, buffer, *length); } } int cyapi_open_bootloader(void **driver, uint8_t bus, uint8_t addr) { struct bladerf_devinfo info; bladerf_init_devinfo(&info); info.backend = BLADERF_BACKEND_CYPRESS; info.usb_bus = bus; info.usb_addr = addr; return open_via_info(driver, BACKEND_PROBE_FX3_BOOTLOADER, &info, NULL); } extern "C" { static const struct usb_fns cypress_fns = { FIELD_INIT(.probe, cyapi_probe), FIELD_INIT(.open, cyapi_open), FIELD_INIT(.close, cyapi_close), FIELD_INIT(.get_vid_pid, cyapi_get_vid_pid), FIELD_INIT(.get_flash_id, cyapi_get_flash_id), FIELD_INIT(.get_handle, cyapi_get_handle), FIELD_INIT(.get_speed, cyapi_get_speed), FIELD_INIT(.change_setting, cyapi_change_setting), FIELD_INIT(.control_transfer, cyapi_control_transfer), FIELD_INIT(.bulk_transfer, cyapi_bulk_transfer), FIELD_INIT(.get_string_descriptor, cyapi_get_string_descriptor), FIELD_INIT(.init_stream, cyapi_init_stream), FIELD_INIT(.stream, cyapi_stream), FIELD_INIT(.submit_stream_buffer, cyapi_submit_stream_buffer), FIELD_INIT(.deinit_stream, cyapi_deinit_stream), FIELD_INIT(.open_bootloader, cyapi_open_bootloader), FIELD_INIT(.close_bootloader, cyapi_close), }; struct usb_driver usb_driver_cypress = { FIELD_INIT(.fn, &cypress_fns), FIELD_INIT(.id, BLADERF_BACKEND_CYPRESS), }; } bladeRF-2024.05/host/libraries/libbladeRF/src/backend/usb/libusb.c000066400000000000000000001363411457144405000245130ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2013-2016 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include "host_config.h" #include #include #include #include #include #if 1 == BLADERF_OS_FREEBSD #include #endif // BLADERF_OS_FREEBSD #include "log.h" #include "devinfo.h" #include "backend/backend.h" #include "backend/usb/usb.h" #include "streaming/async.h" #include "helpers/timeout.h" #include "bladeRF.h" #include "host_config.h" #ifndef LIBUSB_HANDLE_EVENTS_TIMEOUT_NSEC # define LIBUSB_HANDLE_EVENTS_TIMEOUT_NSEC (15 * 1000) #endif struct bladerf_lusb { libusb_device *dev; libusb_device_handle *handle; libusb_context *context; #if 1 == BLADERF_OS_WINDOWS HANDLE mutex; #endif // BLADERF_OS_WINDOWS }; typedef enum { TRANSFER_UNINITIALIZED = 0, TRANSFER_AVAIL, TRANSFER_IN_FLIGHT, TRANSFER_CANCEL_PENDING } transfer_status; struct lusb_stream_data { size_t num_transfers; /* Total # of allocated transfers */ size_t num_avail; /* # of currently available transfers */ size_t i; /* Index to next transfer */ struct libusb_transfer **transfers; /* Array of transfer metadata */ transfer_status *transfer_status; /* Status of each transfer */ /* Warn the first time we get a transfer callback out of order. * This shouldn't happen normally, but we've seen it intermittently on * libusb 1.0.19 for Windows. Further investigation required... */ bool out_of_order_event; }; static inline struct bladerf_lusb * lusb_backend(struct bladerf *dev) { struct bladerf_usb *usb; assert(dev && dev->backend_data); usb = (struct bladerf_usb *) dev->backend_data; assert(usb->driver); return (struct bladerf_lusb *) usb->driver; } /* Convert libusb error codes to libbladeRF error codes */ static int error_conv(int error) { int ret; switch (error) { case 0: ret = 0; break; case LIBUSB_ERROR_IO: ret = BLADERF_ERR_IO; break; case LIBUSB_ERROR_INVALID_PARAM: ret = BLADERF_ERR_INVAL; break; case LIBUSB_ERROR_BUSY: case LIBUSB_ERROR_NO_DEVICE: ret = BLADERF_ERR_NODEV; break; case LIBUSB_ERROR_TIMEOUT: ret = BLADERF_ERR_TIMEOUT; break; case LIBUSB_ERROR_NO_MEM: ret = BLADERF_ERR_MEM; break; case LIBUSB_ERROR_NOT_SUPPORTED: ret = BLADERF_ERR_UNSUPPORTED; break; case LIBUSB_ERROR_ACCESS: ret = BLADERF_ERR_PERMISSION; break; case LIBUSB_ERROR_OVERFLOW: case LIBUSB_ERROR_PIPE: case LIBUSB_ERROR_INTERRUPTED: case LIBUSB_ERROR_NOT_FOUND: default: ret = BLADERF_ERR_UNEXPECTED; } return ret; } /* Returns libusb error codes */ static int get_devinfo(libusb_device *dev, struct bladerf_devinfo *info) { int status = 0; libusb_device_handle *handle; struct libusb_device_descriptor desc; /* Populate device info */ bladerf_init_devinfo(info); info->backend = BLADERF_BACKEND_LIBUSB; info->usb_bus = libusb_get_bus_number(dev); info->usb_addr = libusb_get_device_address(dev); status = libusb_open(dev, &handle); if (status == 0) { status = libusb_get_device_descriptor(dev, &desc); if (status != 0) { memset(info->serial, 0, BLADERF_SERIAL_LENGTH); } else { status = libusb_get_string_descriptor_ascii( handle, desc.iSerialNumber, (unsigned char *)&info->serial, BLADERF_SERIAL_LENGTH); /* Consider this to be non-fatal, otherwise firmware <= 1.1 * wouldn't be able to get far enough to upgrade */ if (status < 0) { log_debug("Failed to retrieve serial number\n"); memset(info->serial, 0, BLADERF_SERIAL_LENGTH); } status = libusb_get_string_descriptor_ascii( handle, desc.iManufacturer, (unsigned char *)&info->manufacturer, BLADERF_DESCRIPTION_LENGTH); if (status < 0) { log_debug("Failed to retrieve manufacturer string\n"); memset(info->manufacturer, 0, BLADERF_DESCRIPTION_LENGTH); } status = libusb_get_string_descriptor_ascii( handle, desc.iProduct, (unsigned char *)&info->product, BLADERF_DESCRIPTION_LENGTH); if (status < 0) { log_debug("Failed to retrieve product string\n"); memset(info->product, 0, BLADERF_DESCRIPTION_LENGTH); } log_debug("Bus %03d Device %03d: %s %s, serial %s\n", info->usb_bus, info->usb_addr, info->manufacturer, info->product, info->serial); if (status > 0) { status = 0; } } libusb_close(handle); } return status; } static bool device_has_vid_pid(libusb_device *dev, uint16_t vid, uint16_t pid) { int status; struct libusb_device_descriptor desc; bool match = false; status = libusb_get_device_descriptor(dev, &desc); if (status != 0) { log_debug("Couldn't get device descriptor: %s\n", libusb_error_name(status)); } else { match = (desc.idVendor == vid) && (desc.idProduct == pid); } return match; } static bool device_is_fx3_bootloader(libusb_device *dev) { return device_has_vid_pid(dev, USB_CYPRESS_VENDOR_ID, USB_FX3_PRODUCT_ID) || device_has_vid_pid(dev, USB_NUAND_VENDOR_ID, USB_NUAND_BLADERF_BOOT_PRODUCT_ID) || device_has_vid_pid(dev, USB_NUAND_LEGACY_VENDOR_ID, USB_NUAND_BLADERF_LEGACY_BOOT_PRODUCT_ID); } static inline bool device_has_bladeRF_ids(libusb_device *dev) { return device_has_vid_pid(dev, USB_NUAND_VENDOR_ID, USB_NUAND_BLADERF_PRODUCT_ID) || device_has_vid_pid(dev, USB_NUAND_VENDOR_ID, USB_NUAND_BLADERF2_PRODUCT_ID) || device_has_vid_pid(dev, USB_NUAND_LEGACY_VENDOR_ID, USB_NUAND_BLADERF_LEGACY_PRODUCT_ID); } static bool device_is_bladerf(libusb_device *dev) { struct libusb_config_descriptor *cfg; int status; bool ret; if (!device_has_bladeRF_ids(dev)) { return false; } status = libusb_get_config_descriptor(dev, 0, &cfg); if (status != 0) { log_debug("Failed to get configuration descriptor: %s\n", libusb_error_name(status)); return false; } /* As of firmware v0.4, we expect there to be 4 altsettings on the * first interface. */ if (cfg->interface->num_altsetting != 4) { const uint8_t bus = libusb_get_bus_number(dev); const uint8_t addr = libusb_get_device_address(dev); log_warning("A bladeRF running incompatible firmware appears to be " "present on bus=%u, addr=%u. If this is true, a firmware " "update via the device's bootloader is required.\n\n", bus, addr); ret = false; } else { ret = true; } libusb_free_config_descriptor(cfg); return ret; } static bool device_is_probe_target(backend_probe_target probe_target, libusb_device *dev) { bool is_probe_target = false; switch (probe_target) { case BACKEND_PROBE_BLADERF: is_probe_target = device_is_bladerf(dev); if (is_probe_target) { log_verbose("Found a bladeRF\n"); } break; case BACKEND_PROBE_FX3_BOOTLOADER: is_probe_target = device_is_fx3_bootloader(dev); if (is_probe_target) { log_verbose("Found an FX3 bootloader.\n"); } break; default: assert(!"Invalid probe target"); } return is_probe_target; } static int lusb_probe(backend_probe_target probe_target, struct bladerf_devinfo_list *info_list) { int status, i, n; ssize_t count; libusb_device **list; struct bladerf_devinfo info; bool printed_access_warning = false; libusb_context *context; /* Initialize libusb for device tree walking */ status = libusb_init(&context); if (status) { log_error("Could not initialize libusb: %s\n", libusb_error_name(status)); goto lusb_probe_done; } count = libusb_get_device_list(context, &list); /* Iterate through all the USB devices */ for (i = 0, n = 0; i < count && status == 0; i++) { if (device_is_probe_target(probe_target, list[i])) { bool do_add = true; /* Open the USB device and get some information */ status = get_devinfo(list[i], &info); if (status) { /* We may not be able to open the device if another driver * (e.g., CyUSB3) is associated with it. Therefore, just log to * the debug level and carry on. */ log_debug("Could not open device: %s\n", libusb_error_name(status)); if (status == LIBUSB_ERROR_ACCESS) { /* If it's an access error, odds are good this is happening * because we've already got the device open. Pass the info * we have back to the caller. */ do_add = true; if (!printed_access_warning) { printed_access_warning = true; log_warning( "Found a bladeRF via VID/PID, but could not open " "it due to insufficient permissions, or because " "the device is already open.\n"); } } else { do_add = false; } /* Don't stop probing because one device was "problematic" */ status = 0; } if (do_add) { info.instance = n++; status = bladerf_devinfo_list_add(info_list, &info); if (status) { log_error("Could not add device to list: %s\n", bladerf_strerror(status)); } else { log_verbose("Added instance %d to device list\n", info.instance); } } } } libusb_free_device_list(list, 1); libusb_exit(context); lusb_probe_done: return status; } #ifdef HAVE_LIBUSB_GET_VERSION static inline void get_libusb_version(char *buf, size_t buf_len) { const struct libusb_version *version; version = libusb_get_version(); snprintf(buf, buf_len, "%d.%d.%d.%d%s", version->major, version->minor, version->micro, version->nano, version->rc); } #else static void get_libusb_version(char *buf, size_t buf_len) { snprintf(buf, buf_len, "<= 1.0.9"); } #endif static int create_device_mutex(const struct bladerf_devinfo *info, struct bladerf_lusb *dev) { int status = 0; #if 1 == BLADERF_OS_WINDOWS const char prefix[] = "Global\\bladeRF-"; const size_t mutex_name_len = strlen(prefix) + BLADERF_SERIAL_LENGTH; char *mutex_name = (char *)calloc(mutex_name_len, 1); DWORD last_error; if (NULL == mutex_name) { return BLADERF_ERR_MEM; } snprintf(mutex_name, mutex_name_len, "%s%s", prefix, info->serial); log_verbose("Mutex name: %s\n", mutex_name); SetLastError(0); dev->mutex = CreateMutex(NULL, true, mutex_name); last_error = GetLastError(); if (NULL == dev->mutex || last_error != 0) { log_debug("Unable to create device mutex: mutex=%p, last_error=%ld\n", dev->mutex, last_error); status = BLADERF_ERR_NODEV; ReleaseMutex(dev->mutex); CloseHandle(dev->mutex); } free(mutex_name); #endif // BLADERF_OS_WINDOWS return status; } static int open_device(const struct bladerf_devinfo *info, libusb_context *context, libusb_device *libusb_dev_in, struct bladerf_lusb **dev_out) { int status; struct bladerf_lusb *dev; *dev_out = NULL; dev = (struct bladerf_lusb *) calloc(1, sizeof(dev[0])); if (dev == NULL) { log_debug("Failed to allocate handle for instance %d.\n", info->instance); /* Report "no device" so we could try again with * another matching device */ return BLADERF_ERR_NODEV; } dev->context = context; dev->dev = libusb_dev_in; status = libusb_open(libusb_dev_in, &dev->handle); if (status < 0) { log_debug("Failed to open device instance %d: %s\n", info->instance, libusb_error_name(status)); status = error_conv(status); goto out; } status = libusb_claim_interface(dev->handle, 0); if (status < 0) { log_debug("Failed to claim interface 0 for instance %d: %s\n", info->instance, libusb_error_name(status)); status = error_conv(status); goto out; } status = create_device_mutex(info, dev); if (status < 0) { log_debug("Failed to get device mutex for instance %d: %s\n", info->instance, bladerf_strerror(status)); status = error_conv(status); goto out; } out: if (status != 0) { if (dev->handle != NULL) { libusb_close(dev->handle); } free(dev); } else { *dev_out = dev; } return status; } static int find_and_open_device(libusb_context *context, const struct bladerf_devinfo *info_in, struct bladerf_lusb **dev_out, struct bladerf_devinfo *info_out) { int status = BLADERF_ERR_NODEV; int i, n; ssize_t count; struct libusb_device **list; struct bladerf_devinfo curr_info; bool printed_access_warning = false; *dev_out = NULL; count = libusb_get_device_list(context, &list); if (count < 0) { if (count < INT_MIN) { /* Ensure we don't have a situation where we accidentally return 0 * due to a narrowing conversion */ return BLADERF_ERR_UNEXPECTED; } else { return error_conv((int) count); } } for (i = 0, n = 0; (i < count) && (*dev_out == NULL); i++) { if (device_is_bladerf(list[i])) { log_verbose("Found a bladeRF (idx=%d)\n", i); /* Open the USB device and get some information */ status = get_devinfo(list[i], &curr_info); if (status < 0) { /* Give the user a helpful hint in case the have forgotten * to update their udev rules */ if (status == LIBUSB_ERROR_ACCESS && !printed_access_warning) { printed_access_warning = true; log_warning("Found a bladeRF via VID/PID, but could not " "open it due to insufficient permissions.\n"); } else { log_debug("Could not open bladeRF device: %s\n", libusb_error_name(status) ); } status = BLADERF_ERR_NODEV; continue; /* Continue trying the next devices */ } else { curr_info.instance = n++; } /* Check to see if this matches the info struct */ if (bladerf_devinfo_matches(&curr_info, info_in)) { status = open_device(&curr_info, context, list[i], dev_out); if (status < 0) { status = BLADERF_ERR_NODEV; continue; /* Continue trying the next matching device */ } else { memcpy(info_out, &curr_info, sizeof(info_out[0])); } } else { status = BLADERF_ERR_NODEV; log_verbose("Devinfo doesn't match - skipping" "(instance=%d, serial=%d, bus/addr=%d\n", bladerf_instance_matches(&curr_info, info_in), bladerf_serial_matches(&curr_info, info_in), bladerf_bus_addr_matches(&curr_info, info_in)); } } } if (status == 0) { /* Returning 0 indicates this function is providing a device */ assert(*dev_out != NULL); } libusb_free_device_list(list, 1); return status; } #if ENABLE_USB_DEV_RESET_ON_OPEN static int reset_and_reopen(libusb_context *context, struct bladerf_lusb **dev, struct bladerf_devinfo *info) { int status; status = libusb_reset_device((*dev)->handle); if (status == 0) { log_verbose("USB port reset succeeded for bladeRF %s\n", info->serial); return 0; } else if (status == LIBUSB_ERROR_NO_DEVICE) { struct bladerf_devinfo new_info; /* The reset has caused the device to drop out and re-enumerate. * * We'll find it again via the info we gathered about it via its * serial number, which is now stored in the devinfo */ log_verbose("Re-scan required after port reset for bladeRF %s\n", info->serial); libusb_release_interface((*dev)->handle, 0); libusb_close((*dev)->handle); #if 1 == BLADERF_OS_WINDOWS ReleaseMutex((*dev)->mutex); CloseHandle((*dev)->mutex); #endif // BLADERF_OS_WINDOWS *dev = NULL; memcpy(&new_info, info, sizeof(new_info)); new_info.usb_bus = DEVINFO_BUS_ANY; new_info.usb_addr = DEVINFO_ADDR_ANY; status = find_and_open_device(context, &new_info, dev, info); } else { status = BLADERF_ERR_IO; log_verbose("Port reset failed for bladerf %s: %s\n", info->serial, libusb_error_name(status)); } return status; } #endif static int lusb_open(void **driver, struct bladerf_devinfo *info_in, struct bladerf_devinfo *info_out) { int status; struct bladerf_lusb *lusb = NULL; libusb_context *context; /* Initialize libusb for device tree walking */ status = libusb_init(&context); if (status) { log_error("Could not initialize libusb: %s\n", libusb_error_name(status)); return error_conv(status); } /* We can only print this out when log output is enabled, or else we'll * get snagged by -Werror=unused-but-set-variable */ # ifdef LOGGING_ENABLED { char buf[64]; get_libusb_version(buf, sizeof(buf)); log_verbose("Using libusb version: %s\n", buf); } # endif status = find_and_open_device(context, info_in, &lusb, info_out); if (status != 0) { libusb_exit(context); if (status == BLADERF_ERR_NODEV) { log_debug("No devices available on the libusb backend.\n"); } else { log_debug("Failed to open bladeRF on libusb backend: %s\n", bladerf_strerror(status)); } } else { assert(lusb != NULL); /* Cosmin and Marian from Null Team (null.ro) and YateBTS(.com) found * that it is possible to recover from "Issue #95: Not enough bandwidth * for altsetting" by performing a USB port reset prior to actually * trying to use the device. */ # if ENABLE_USB_DEV_RESET_ON_OPEN if (bladerf_usb_reset_device_on_open) { status = reset_and_reopen(context, &lusb, info_out); } # endif if (status == 0) { *driver = (void *) lusb; } } return status; } static int lusb_change_setting(void *driver, uint8_t setting) { struct bladerf_lusb *lusb = (struct bladerf_lusb *) driver; int status = libusb_set_interface_alt_setting(lusb->handle, 0, setting); return error_conv(status); } static void lusb_close(void *driver) { int status; struct bladerf_lusb *lusb = (struct bladerf_lusb *) driver; status = libusb_release_interface(lusb->handle, 0); if (status < 0) { log_error("Failed to release interface: %s\n", libusb_error_name(status)); } libusb_close(lusb->handle); libusb_exit(lusb->context); #if 1 == BLADERF_OS_WINDOWS ReleaseMutex(lusb->mutex); CloseHandle(lusb->mutex); #endif // BLADERF_OS_WINDOWS free(lusb); } static void lusb_close_bootloader(void *driver) { int status; struct bladerf_lusb *lusb = (struct bladerf_lusb *) driver; if (lusb != NULL) { if (lusb->handle != NULL) { status = libusb_release_interface(lusb->handle, 0); if (status < 0) { log_debug("Failed to release interface: %s\n", libusb_error_name(status)); } libusb_close(lusb->handle); } if (lusb->context != NULL) { libusb_exit(lusb->context); } #if 1 == BLADERF_OS_WINDOWS ReleaseMutex(lusb->mutex); CloseHandle(lusb->mutex); #endif // BLADERF_OS_WINDOWS free(lusb); } } static inline bool bus_matches(uint8_t bus, struct libusb_device *d) { return (bus == DEVINFO_BUS_ANY) || (bus == libusb_get_bus_number(d)); } static inline bool addr_matches(uint8_t addr, struct libusb_device *d) { return (addr == DEVINFO_BUS_ANY) || (addr == libusb_get_device_address(d)); } static int lusb_open_bootloader(void **driver, uint8_t bus, uint8_t addr) { int status; struct libusb_device **dev_list = NULL; ssize_t dev_list_size, i; struct bladerf_lusb *lusb; *driver = NULL; lusb = calloc(1, sizeof(lusb[0])); if (lusb == NULL) { return BLADERF_ERR_MEM; } status = libusb_init(&lusb->context); if (status != 0) { log_debug("Failed to initialize libusb context: %s\n", libusb_error_name(status)); goto error; } dev_list_size = libusb_get_device_list(lusb->context, &dev_list); if (dev_list_size < 0) { log_debug("Failed to get device list: %s\n", libusb_error_name(status)); status = (int) dev_list_size; goto error; } for (i = 0; i < dev_list_size; i++) { if (device_is_fx3_bootloader(dev_list[i]) && bus_matches(bus, dev_list[i]) && addr_matches(addr, dev_list[i])) { status = libusb_open(dev_list[i], &lusb->handle); if (status != 0) { log_debug("Failed to open device: %s\n", libusb_error_name(status)); goto error; } else { status = libusb_claim_interface(lusb->handle, 0); if (status < 0) { log_debug("Failed to claim interface: %s\n", libusb_error_name(status)); goto error; } else { log_verbose("Opened bootloader at %u:%u\n", libusb_get_bus_number(dev_list[i]), libusb_get_device_address(dev_list[i])); *driver = lusb; } break; } } } error: if (dev_list != NULL) { libusb_free_device_list(dev_list, 1); } if (status != 0) { status = error_conv(status); lusb_close_bootloader(lusb); } else if (*driver == NULL) { status = BLADERF_ERR_NODEV; lusb_close_bootloader(lusb); } return status; } static int lusb_get_vid_pid(void *driver, uint16_t *vid, uint16_t *pid) { struct bladerf_lusb *lusb = (struct bladerf_lusb *)driver; struct libusb_device_descriptor desc; int status; status = libusb_get_device_descriptor(lusb->dev, &desc); if (status != 0) { log_debug("Couldn't get device descriptor: %s\n", libusb_error_name(status)); return BLADERF_ERR_IO; } *vid = desc.idVendor; *pid = desc.idProduct; return 0; } static int lusb_get_handle(void *driver, void **handle) { struct bladerf_lusb *lusb = (struct bladerf_lusb *) driver; *handle = lusb->handle; return 0; } static int lusb_get_speed(void *driver, bladerf_dev_speed *device_speed) { int speed; int status = 0; struct bladerf_lusb *lusb = (struct bladerf_lusb *) driver; speed = libusb_get_device_speed(lusb->dev); if (speed == LIBUSB_SPEED_SUPER) { *device_speed = BLADERF_DEVICE_SPEED_SUPER; } else if (speed == LIBUSB_SPEED_HIGH) { *device_speed = BLADERF_DEVICE_SPEED_HIGH; } else { *device_speed = BLADERF_DEVICE_SPEED_UNKNOWN; if (speed == LIBUSB_SPEED_FULL) { log_debug("Full speed connection is not suppored.\n"); status = BLADERF_ERR_UNSUPPORTED; } else if (speed == LIBUSB_SPEED_LOW) { log_debug("Low speed connection is not supported.\n"); status = BLADERF_ERR_UNSUPPORTED; } else { log_debug("Unknown/unexpected device speed (%d)\n", speed); status = BLADERF_ERR_UNEXPECTED; } } return status; } static inline uint8_t bm_request_type(usb_target target_type, usb_request req_type, usb_direction direction) { uint8_t ret = 0; switch (target_type) { case USB_TARGET_DEVICE: ret |= LIBUSB_RECIPIENT_DEVICE; break; case USB_TARGET_INTERFACE: ret |= LIBUSB_RECIPIENT_INTERFACE; break; case USB_TARGET_ENDPOINT: ret |= LIBUSB_RECIPIENT_ENDPOINT; break; default: ret |= LIBUSB_RECIPIENT_OTHER; } switch (req_type) { case USB_REQUEST_STANDARD: ret |= LIBUSB_REQUEST_TYPE_STANDARD; break; case USB_REQUEST_CLASS: ret |= LIBUSB_REQUEST_TYPE_CLASS; break; case USB_REQUEST_VENDOR: ret |= LIBUSB_REQUEST_TYPE_VENDOR; break; } switch (direction) { case USB_DIR_HOST_TO_DEVICE: ret |= LIBUSB_ENDPOINT_OUT; break; case USB_DIR_DEVICE_TO_HOST: ret |= LIBUSB_ENDPOINT_IN; break; } return ret; } static int lusb_control_transfer(void *driver, usb_target target_type, usb_request req_type, usb_direction dir, uint8_t request, uint16_t wvalue, uint16_t windex, void *buffer, uint32_t buffer_len, uint32_t timeout_ms) { int status; struct bladerf_lusb *lusb = (struct bladerf_lusb *) driver; const uint8_t bm_req_type = bm_request_type(target_type, req_type, dir); status = libusb_control_transfer(lusb->handle, bm_req_type, request, wvalue, windex, buffer, buffer_len, timeout_ms); if (status >= 0 && (uint32_t)status == buffer_len) { status = 0; } else { log_debug("%s failed: status = %d\n", __FUNCTION__, status); } return error_conv(status); } static int lusb_bulk_transfer(void *driver, uint8_t endpoint, void *buffer, uint32_t buffer_len, uint32_t timeout_ms) { int status; int n_transferred; struct bladerf_lusb *lusb = (struct bladerf_lusb *) driver; status = libusb_bulk_transfer(lusb->handle, endpoint, buffer, buffer_len, &n_transferred, timeout_ms); status = error_conv(status); if (status == 0 && ((uint32_t)n_transferred != buffer_len)) { log_debug("Short bulk transfer: requested=%u, transferred=%u\n", buffer_len, n_transferred); status = BLADERF_ERR_IO; } return status; } static int lusb_get_string_descriptor(void *driver, uint8_t index, void *buffer, uint32_t buffer_len) { int status; struct bladerf_lusb *lusb = (struct bladerf_lusb *) driver; status = libusb_get_string_descriptor_ascii(lusb->handle, index, (unsigned char*)buffer, buffer_len); if (status > 0 && (uint32_t)status < buffer_len) { status = 0; } else { status = BLADERF_ERR_UNEXPECTED; } return status; } /* At the risk of being a little inefficient, just keep attempting to cancel * everything. If a transfer's no longer active, we'll just get a NOT_FOUND * error -- no big deal. Just accepting that alleviates the need to track * the status of each transfer... */ static inline void cancel_all_transfers(struct bladerf_stream *stream) { size_t i; int status; struct lusb_stream_data *stream_data = stream->backend_data; for (i = 0; i < stream_data->num_transfers; i++) { if (stream_data->transfer_status[i] == TRANSFER_IN_FLIGHT) { status = libusb_cancel_transfer(stream_data->transfers[i]); if (status < 0 && status != LIBUSB_ERROR_NOT_FOUND) { log_error("Error canceling transfer (%d): %s\n", status, libusb_error_name(status)); } else { stream_data->transfer_status[i] = TRANSFER_CANCEL_PENDING; } } } } static inline size_t transfer_idx(struct lusb_stream_data *stream_data, struct libusb_transfer *transfer) { size_t i; for (i = 0; i < stream_data->num_transfers; i++) { if (stream_data->transfers[i] == transfer) { return i; } } return UINT_MAX; } static int submit_transfer(struct bladerf_stream *stream, void *buffer, size_t len); static void LIBUSB_CALL lusb_stream_cb(struct libusb_transfer *transfer) { struct bladerf_stream *stream = transfer->user_data; void *next_buffer = NULL; struct bladerf_metadata metadata; struct lusb_stream_data *stream_data = stream->backend_data; size_t transfer_i; /* Currently unused - zero out for out own debugging sanity... */ memset(&metadata, 0, sizeof(metadata)); MUTEX_LOCK(&stream->lock); transfer_i = transfer_idx(stream_data, transfer); assert(stream_data->transfer_status[transfer_i] == TRANSFER_IN_FLIGHT || stream_data->transfer_status[transfer_i] == TRANSFER_CANCEL_PENDING); if (transfer_i >= stream_data->num_transfers) { log_error("Unable to find transfer\n"); stream->state = STREAM_SHUTTING_DOWN; } else { stream_data->transfer_status[transfer_i] = TRANSFER_AVAIL; stream_data->num_avail++; pthread_cond_signal(&stream->can_submit_buffer); } /* Check to see if the transfer has been cancelled or errored */ if (transfer->status != LIBUSB_TRANSFER_COMPLETED) { /* Errored out for some reason .. */ stream->state = STREAM_SHUTTING_DOWN; switch (transfer->status) { case LIBUSB_TRANSFER_CANCELLED: /* We expect this case when we begin tearing down the stream */ break; case LIBUSB_TRANSFER_STALL: log_error("Hit stall for buffer %p\n\r", transfer->buffer); stream->error_code = BLADERF_ERR_IO; break; case LIBUSB_TRANSFER_ERROR: log_error("Got transfer error for buffer %p\n\r", transfer->buffer); stream->error_code = BLADERF_ERR_IO; break; case LIBUSB_TRANSFER_OVERFLOW: log_error("Got transfer over for buffer %p, " "transfer \"actual_length\" = %d\n\r", transfer->buffer, transfer->actual_length); stream->error_code = BLADERF_ERR_IO; break; case LIBUSB_TRANSFER_TIMED_OUT: log_error("Transfer timed out for buffer %p\n\r", transfer->buffer); stream->error_code = BLADERF_ERR_TIMEOUT; break; case LIBUSB_TRANSFER_NO_DEVICE: stream->error_code = BLADERF_ERR_NODEV; break; default: log_error("Unexpected transfer status: %d\n\r", transfer->status); break; } } if (stream->state == STREAM_RUNNING) { if (stream->format == BLADERF_FORMAT_PACKET_META) { /* Call user callback requesting more data to transmit */ next_buffer = stream->cb( stream->dev, stream, &metadata, transfer->buffer, bytes_to_samples(stream->format, transfer->actual_length), stream->user_data); } else { /* Sanity check for debugging purposes */ if (transfer->length != transfer->actual_length) { log_warning("Received short transfer\n"); } /* Call user callback requesting more data to transmit */ next_buffer = stream->cb( stream->dev, stream, &metadata, transfer->buffer, bytes_to_samples(stream->format, transfer->actual_length), stream->user_data); } if (next_buffer == BLADERF_STREAM_SHUTDOWN) { stream->state = STREAM_SHUTTING_DOWN; } else if (next_buffer != BLADERF_STREAM_NO_DATA) { int status; if((stream->layout & BLADERF_DIRECTION_MASK) == BLADERF_TX && stream->format == BLADERF_FORMAT_PACKET_META) { status = submit_transfer(stream, next_buffer, metadata.actual_count); } else { status = submit_transfer(stream, next_buffer, async_stream_buf_bytes(stream)); } if (status != 0) { /* If this fails, we probably have a serious problem...so just * shut it down. */ stream->state = STREAM_SHUTTING_DOWN; } } } /* Check to see if all the transfers have been cancelled, * and if so, clean up the stream */ if (stream->state == STREAM_SHUTTING_DOWN) { /* We know we're done when all of our transfers have returned to their * "available" states */ if (stream_data->num_avail == stream_data->num_transfers) { stream->state = STREAM_DONE; } else { cancel_all_transfers(stream); } } MUTEX_UNLOCK(&stream->lock); } static inline struct libusb_transfer * get_next_available_transfer(struct lusb_stream_data *stream_data) { unsigned int n; size_t i = stream_data->i; for (n = 0; n < stream_data->num_transfers; n++) { if (stream_data->transfer_status[i] == TRANSFER_AVAIL) { if (stream_data->i != i && stream_data->out_of_order_event == false) { log_warning("Transfer callback occurred out of order. " "(Warning only this time.)\n"); stream_data->out_of_order_event = true; } stream_data->i = i; return stream_data->transfers[i]; } i = (i + 1) % stream_data->num_transfers; } return NULL; } /* Precondition: A transfer is available. */ static int submit_transfer(struct bladerf_stream *stream, void *buffer, size_t len) { int status; struct bladerf_lusb *lusb = lusb_backend(stream->dev); struct lusb_stream_data *stream_data = stream->backend_data; struct libusb_transfer *transfer; const size_t bytes_per_buffer = async_stream_buf_bytes(stream); size_t prev_idx; const unsigned char ep = (stream->layout & BLADERF_DIRECTION_MASK) == BLADERF_TX ? SAMPLE_EP_OUT : SAMPLE_EP_IN; transfer = get_next_available_transfer(stream_data); assert(transfer != NULL); assert(bytes_per_buffer <= INT_MAX); libusb_fill_bulk_transfer(transfer, lusb->handle, ep, buffer, (int)len, lusb_stream_cb, stream, stream->transfer_timeout); prev_idx = stream_data->i; stream_data->transfer_status[stream_data->i] = TRANSFER_IN_FLIGHT; stream_data->i = (stream_data->i + 1) % stream_data->num_transfers; assert(stream_data->num_avail != 0); stream_data->num_avail--; /* FIXME We have an inherent issue here with lock ordering between * stream->lock and libusb's underlying event lock, so we * have to drop the stream->lock as a workaround. * * This implies that a callback can potentially execute, * including a callback for this transfer. Therefore, the transfer * has been setup and its metadata logged. * * Ultimately, we need to review our async scheme and associated * lock schemes. */ MUTEX_UNLOCK(&stream->lock); status = libusb_submit_transfer(transfer); MUTEX_LOCK(&stream->lock); if (status != 0) { log_error("Failed to submit transfer in %s: %s\n", __FUNCTION__, libusb_error_name(status)); /* We need to undo the metadata we updated prior to dropping * the lock and attempting to submit the transfer */ assert(stream_data->transfer_status[prev_idx] == TRANSFER_IN_FLIGHT); stream_data->transfer_status[prev_idx] = TRANSFER_AVAIL; stream_data->num_avail++; if (stream_data->i == 0) { stream_data->i = stream_data->num_transfers - 1; } else { stream_data->i--; } } return error_conv(status); } static int lusb_init_stream(void *driver, struct bladerf_stream *stream, size_t num_transfers) { int status = 0; size_t i; struct lusb_stream_data *stream_data; /* Fill in backend stream information */ stream_data = malloc(sizeof(struct lusb_stream_data)); if (!stream_data) { return BLADERF_ERR_MEM; } /* Backend stream information */ stream->backend_data = stream_data; stream_data->transfers = NULL; stream_data->transfer_status = NULL; stream_data->num_transfers = num_transfers; stream_data->num_avail = 0; stream_data->i = 0; stream_data->out_of_order_event = false; stream_data->transfers = malloc(num_transfers * sizeof(struct libusb_transfer *)); if (stream_data->transfers == NULL) { log_error("Failed to allocate libusb tranfers\n"); status = BLADERF_ERR_MEM; goto error; } stream_data->transfer_status = calloc(num_transfers, sizeof(transfer_status)); if (stream_data->transfer_status == NULL) { log_error("Failed to allocated libusb transfer status array\n"); status = BLADERF_ERR_MEM; goto error; } /* Create the libusb transfers */ for (i = 0; i < stream_data->num_transfers; i++) { stream_data->transfers[i] = libusb_alloc_transfer(0); /* Upon error, start tearing down anything we've started allocating * and report that the stream is in a bad state */ if (stream_data->transfers[i] == NULL) { /* Note: <= 0 not appropriate as we're dealing * with an unsigned index */ while (i > 0) { if (--i) { libusb_free_transfer(stream_data->transfers[i]); stream_data->transfers[i] = NULL; stream_data->transfer_status[i] = TRANSFER_UNINITIALIZED; stream_data->num_avail--; } } status = BLADERF_ERR_MEM; break; } else { stream_data->transfer_status[i] = TRANSFER_AVAIL; stream_data->num_avail++; } } error: if (status != 0) { free(stream_data->transfer_status); free(stream_data->transfers); free(stream_data); stream->backend_data = NULL; } return status; } static int lusb_stream(void *driver, struct bladerf_stream *stream, bladerf_channel_layout layout) { size_t i; int status = 0; void *buffer; struct bladerf_metadata metadata; struct bladerf *dev = stream->dev; struct bladerf_lusb *lusb = (struct bladerf_lusb *) driver; struct lusb_stream_data *stream_data = stream->backend_data; struct timeval tv = { 0, LIBUSB_HANDLE_EVENTS_TIMEOUT_NSEC }; /* Currently unused, so zero it out for a sanity check when debugging */ memset(&metadata, 0, sizeof(metadata)); MUTEX_LOCK(&stream->lock); /* Set up initial set of buffers */ for (i = 0; i < stream_data->num_transfers; i++) { if ((layout & BLADERF_DIRECTION_MASK) == BLADERF_TX) { buffer = stream->cb(dev, stream, &metadata, NULL, stream->samples_per_buffer, stream->user_data); if (buffer == BLADERF_STREAM_SHUTDOWN) { /* If we have transfers in flight and the user prematurely * cancels the stream, we'll start shutting down */ if (stream_data->num_avail != stream_data->num_transfers) { stream->state = STREAM_SHUTTING_DOWN; } else { /* No transfers have been shipped out yet so we can * simply enter our "done" state */ stream->state = STREAM_DONE; } /* In either of the above we don't want to attempt to * get any more buffers from the user */ break; } } else { buffer = stream->buffers[i]; } if (buffer != BLADERF_STREAM_NO_DATA) { if((layout & BLADERF_DIRECTION_MASK) == BLADERF_TX && stream->format == BLADERF_FORMAT_PACKET_META) { status = submit_transfer(stream, buffer, metadata.actual_count); } else { status = submit_transfer(stream, buffer, async_stream_buf_bytes(stream)); } /* If we failed to submit any transfers, cancel everything in * flight. We'll leave the stream in the running state so we can * have libusb fire off callbacks with the cancelled status*/ if (status < 0) { stream->error_code = status; cancel_all_transfers(stream); } } } MUTEX_UNLOCK(&stream->lock); /* This loop is required so libusb can do callbacks and whatnot */ while (stream->state != STREAM_DONE) { status = libusb_handle_events_timeout(lusb->context, &tv); if (status < 0 && status != LIBUSB_ERROR_INTERRUPTED) { log_warning("unexpected value from events processing: " "%d: %s\n", status, libusb_error_name(status)); status = error_conv(status); } } return status; } /* The top-level code will have aquired the stream->lock for us */ int lusb_submit_stream_buffer(void *driver, struct bladerf_stream *stream, void *buffer, size_t *length, unsigned int timeout_ms, bool nonblock) { int status = 0; struct lusb_stream_data *stream_data = stream->backend_data; struct timespec timeout_abs; if (buffer == BLADERF_STREAM_SHUTDOWN) { if (stream_data->num_avail == stream_data->num_transfers) { stream->state = STREAM_DONE; } else { stream->state = STREAM_SHUTTING_DOWN; } return 0; } if (stream_data->num_avail == 0) { if (nonblock) { log_debug("Non-blocking buffer submission requested, but no " "transfers are currently available.\n"); return BLADERF_ERR_WOULD_BLOCK; } if (timeout_ms != 0) { status = populate_abs_timeout(&timeout_abs, timeout_ms); if (status != 0) { return BLADERF_ERR_UNEXPECTED; } while (stream_data->num_avail == 0 && status == 0) { status = pthread_cond_timedwait(&stream->can_submit_buffer, &stream->lock, &timeout_abs); } } else { while (stream_data->num_avail == 0 && status == 0) { status = pthread_cond_wait(&stream->can_submit_buffer, &stream->lock); } } } if (status == ETIMEDOUT) { log_debug("%s: Timed out waiting for a transfer to become available.\n", __FUNCTION__); return BLADERF_ERR_TIMEOUT; } else if (status != 0) { return BLADERF_ERR_UNEXPECTED; } else { return submit_transfer(stream, buffer, *length); } } static int lusb_deinit_stream(void *driver, struct bladerf_stream *stream) { size_t i; struct lusb_stream_data *stream_data = stream->backend_data; for (i = 0; i < stream_data->num_transfers; i++) { libusb_free_transfer(stream_data->transfers[i]); stream_data->transfers[i] = NULL; stream_data->transfer_status[i] = TRANSFER_UNINITIALIZED; } free(stream_data->transfers); free(stream_data->transfer_status); free(stream->backend_data); stream->backend_data = NULL; return 0; } static const struct usb_fns libusb_fns = { FIELD_INIT(.probe, lusb_probe), FIELD_INIT(.open, lusb_open), FIELD_INIT(.close, lusb_close), FIELD_INIT(.get_vid_pid, lusb_get_vid_pid), FIELD_INIT(.get_flash_id, NULL), FIELD_INIT(.get_handle, lusb_get_handle), FIELD_INIT(.get_speed, lusb_get_speed), FIELD_INIT(.change_setting, lusb_change_setting), FIELD_INIT(.control_transfer, lusb_control_transfer), FIELD_INIT(.bulk_transfer, lusb_bulk_transfer), FIELD_INIT(.get_string_descriptor, lusb_get_string_descriptor), FIELD_INIT(.init_stream, lusb_init_stream), FIELD_INIT(.stream, lusb_stream), FIELD_INIT(.submit_stream_buffer, lusb_submit_stream_buffer), FIELD_INIT(.deinit_stream, lusb_deinit_stream), FIELD_INIT(.open_bootloader, lusb_open_bootloader), FIELD_INIT(.close_bootloader, lusb_close_bootloader), }; const struct usb_driver usb_driver_libusb = { FIELD_INIT(.fn, &libusb_fns), FIELD_INIT(.id, BLADERF_BACKEND_LIBUSB), }; bladeRF-2024.05/host/libraries/libbladeRF/src/backend/usb/nios_access.c000066400000000000000000001046511457144405000255230ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2015 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include #include #include #include "log.h" #include "conversions.h" #include "usb.h" #include "nios_access.h" #include "nios_pkt_formats.h" #include "board/board.h" #include "helpers/version.h" #if 0 static void print_buf(const char *msg, const uint8_t *buf, size_t len) { size_t i; if (msg != NULL) { fputs(msg, stderr); } for (i = 0; i < len; i++) { fprintf(stderr, " %02x", buf[i]); } fputc('\n', stderr); } #else #define print_buf(msg, data, len) do {} while(0) #endif /* Buf is assumed to be NIOS_PKT_LEN bytes */ static int nios_access(struct bladerf *dev, uint8_t *buf) { struct bladerf_usb *usb = dev->backend_data; int status; print_buf("NIOS II REQ:", buf, NIOS_PKT_LEN); /* Send the command */ status = usb->fn->bulk_transfer(usb->driver, PERIPHERAL_EP_OUT, buf, NIOS_PKT_LEN, PERIPHERAL_TIMEOUT_MS); if (status != 0) { log_error("Failed to send NIOS II request: %s\n", bladerf_strerror(status)); return status; } /* Retrieve the request */ status = usb->fn->bulk_transfer(usb->driver, PERIPHERAL_EP_IN, buf, NIOS_PKT_LEN, PERIPHERAL_TIMEOUT_MS); if (status != 0) { log_error("Failed to receive NIOS II response: %s\n", bladerf_strerror(status)); } print_buf("NIOS II res:", buf, NIOS_PKT_LEN); return status; } /* Variant that doesn't output to log_error on error. */ static int nios_access_quiet(struct bladerf *dev, uint8_t *buf) { struct bladerf_usb *usb = dev->backend_data; int status; print_buf("NIOS II REQ:", buf, NIOS_PKT_LEN); /* Send the command */ status = usb->fn->bulk_transfer(usb->driver, PERIPHERAL_EP_OUT, buf, NIOS_PKT_LEN, PERIPHERAL_TIMEOUT_MS); if (status != 0) { return status; } /* Retrieve the request */ status = usb->fn->bulk_transfer(usb->driver, PERIPHERAL_EP_IN, buf, NIOS_PKT_LEN, PERIPHERAL_TIMEOUT_MS); print_buf("NIOS II res:", buf, NIOS_PKT_LEN); return status; } static int nios_8x8_read(struct bladerf *dev, uint8_t id, uint8_t addr, uint8_t *data) { int status; uint8_t buf[NIOS_PKT_LEN]; bool success; nios_pkt_8x8_pack(buf, id, false, addr, 0); status = nios_access(dev, buf); if (status != 0) { return status; } nios_pkt_8x8_resp_unpack(buf, NULL, NULL, NULL, data, &success); if (success) { return 0; } else { log_debug("%s: response packet reported failure.\n", __FUNCTION__); *data = 0; return BLADERF_ERR_FPGA_OP; } } static int nios_8x8_write(struct bladerf *dev, uint8_t id, uint8_t addr, uint8_t data) { int status; uint8_t buf[NIOS_PKT_LEN]; bool success; nios_pkt_8x8_pack(buf, id, true, addr, data); status = nios_access(dev, buf); if (status != 0) { return status; } nios_pkt_8x8_resp_unpack(buf, NULL, NULL, NULL, NULL, &success); if (success) { return 0; } else { log_debug("%s: response packet reported failure.\n", __FUNCTION__); return BLADERF_ERR_FPGA_OP; } } static int nios_8x16_read(struct bladerf *dev, uint8_t id, uint8_t addr, uint16_t *data) { int status; uint8_t buf[NIOS_PKT_LEN]; bool success; uint16_t tmp; nios_pkt_8x16_pack(buf, id, false, addr, 0); status = nios_access(dev, buf); if (status != 0) { return status; } nios_pkt_8x16_resp_unpack(buf, NULL, NULL, NULL, &tmp, &success); if (success) { *data = tmp; return 0; } else { *data = 0; log_debug("%s: response packet reported failure.\n", __FUNCTION__); return BLADERF_ERR_FPGA_OP; } } static int nios_8x16_write(struct bladerf *dev, uint8_t id, uint8_t addr, uint16_t data) { int status; uint8_t buf[NIOS_PKT_LEN]; bool success; nios_pkt_8x16_pack(buf, id, true, addr, data); status = nios_access(dev, buf); if (status != 0) { return status; } nios_pkt_8x16_resp_unpack(buf, NULL, NULL, NULL, NULL, &success); if (success) { return 0; } else { log_debug("%s: response packet reported failure.\n", __FUNCTION__); return BLADERF_ERR_FPGA_OP; } } static int nios_8x32_read(struct bladerf *dev, uint8_t id, uint8_t addr, uint32_t *data) { int status; uint8_t buf[NIOS_PKT_LEN]; bool success; nios_pkt_8x32_pack(buf, id, false, addr, 0); status = nios_access(dev, buf); if (status != 0) { return status; } nios_pkt_8x32_resp_unpack(buf, NULL, NULL, NULL, data, &success); if (success) { return 0; } else { *data = 0; log_debug("%s: response packet reported failure.\n", __FUNCTION__); return BLADERF_ERR_FPGA_OP; } } static int nios_8x32_write(struct bladerf *dev, uint8_t id, uint8_t addr, uint32_t data) { int status; uint8_t buf[NIOS_PKT_LEN]; bool success; nios_pkt_8x32_pack(buf, id, true, addr, data); status = nios_access(dev, buf); if (status != 0) { return status; } nios_pkt_8x32_resp_unpack(buf, NULL, NULL, NULL, NULL, &success); if (success) { return 0; } else { log_debug("%s: response packet reported failure.\n", __FUNCTION__); return BLADERF_ERR_FPGA_OP; } } static int nios_16x64_read(struct bladerf *dev, uint8_t id, uint16_t addr, uint64_t *data) { int status; uint8_t buf[NIOS_PKT_LEN]; bool success; nios_pkt_16x64_pack(buf, id, false, addr, 0); /* RFIC access times out occasionally, and this is fine. */ if (NIOS_PKT_16x64_TARGET_RFIC == id) { status = nios_access_quiet(dev, buf); } else { status = nios_access(dev, buf); } if (status != 0) { return status; } nios_pkt_16x64_resp_unpack(buf, NULL, NULL, NULL, data, &success); if (success) { return 0; } else { *data = 0; log_debug("%s: response packet reported failure.\n", __FUNCTION__); return BLADERF_ERR_FPGA_OP; } } static int nios_16x64_write(struct bladerf *dev, uint8_t id, uint16_t addr, uint64_t data) { int status; uint8_t buf[NIOS_PKT_LEN]; bool success; nios_pkt_16x64_pack(buf, id, true, addr, data); /* RFIC access times out occasionally, and this is fine. */ if (NIOS_PKT_16x64_TARGET_RFIC == id) { status = nios_access_quiet(dev, buf); } else { status = nios_access(dev, buf); } if (status != 0) { return status; } nios_pkt_16x64_resp_unpack(buf, NULL, NULL, NULL, NULL, &success); if (success) { return 0; } else { log_debug("%s: response packet reported failure.\n", __FUNCTION__); return BLADERF_ERR_FPGA_OP; } } static int nios_32x32_read(struct bladerf *dev, uint32_t id, uint32_t addr, uint32_t *data) { int status; uint8_t buf[NIOS_PKT_LEN]; bool success; nios_pkt_32x32_pack(buf, id, false, addr, 0); status = nios_access(dev, buf); if (status != 0) { return status; } nios_pkt_32x32_resp_unpack(buf, NULL, NULL, NULL, data, &success); if (success) { return 0; } else { *data = 0; log_debug("%s: response packet reported failure.\n", __FUNCTION__); return BLADERF_ERR_FPGA_OP; } } static int nios_32x32_write(struct bladerf *dev, uint32_t id, uint32_t addr, uint32_t data) { int status; uint8_t buf[NIOS_PKT_LEN]; bool success; nios_pkt_32x32_pack(buf, id, true, addr, data); status = nios_access(dev, buf); if (status != 0) { return status; } nios_pkt_32x32_resp_unpack(buf, NULL, NULL, NULL, NULL, &success); if (success) { return 0; } else { log_debug("%s: response packet reported failure.\n", __FUNCTION__); return BLADERF_ERR_FPGA_OP; } } static int nios_32x32_masked_read(struct bladerf *dev, uint8_t id, uint32_t mask, uint32_t *val) { int status; bool success; uint8_t buf[NIOS_PKT_LEN]; /* The address is used as a mask of bits to read and return */ nios_pkt_32x32_pack(buf, id, false, mask, 0); status = nios_access(dev, buf); if (status != 0) { return status; } nios_pkt_32x32_resp_unpack(buf, NULL, NULL, NULL, val, &success); if (success) { return 0; } else { *val = 0; log_debug("%s: response packet reported failure.\n", __FUNCTION__); return BLADERF_ERR_FPGA_OP; } } static int nios_32x32_masked_write(struct bladerf *dev, uint8_t id, uint32_t mask, uint32_t val) { int status; bool success; uint8_t buf[NIOS_PKT_LEN]; /* The address is used as a mask of bits to read and return */ nios_pkt_32x32_pack(buf, id, true, mask, val); status = nios_access(dev, buf); if (status != 0) { return status; } nios_pkt_32x32_resp_unpack(buf, NULL, NULL, NULL, NULL, &success); if (success) { return 0; } else { log_debug("%s: response packet reported failure.\n", __FUNCTION__); return BLADERF_ERR_FPGA_OP; } } int nios_config_read(struct bladerf *dev, uint32_t *val) { int status = nios_8x32_read(dev, NIOS_PKT_8x32_TARGET_CONTROL, 0, val); if (status == 0) { log_verbose("%s: Read 0x%08x\n", __FUNCTION__, *val); } return status; } int nios_config_write(struct bladerf *dev, uint32_t val) { int status = nios_8x32_write(dev, NIOS_PKT_8x32_TARGET_CONTROL, 0, val); if (status == 0) { log_verbose("%s: Wrote 0x%08x\n", __FUNCTION__, val); } return status; } int nios_get_fpga_version(struct bladerf *dev, struct bladerf_version *ver) { uint32_t regval; int status = nios_8x32_read(dev, NIOS_PKT_8x32_TARGET_VERSION, 0, ®val); if (status == 0) { log_verbose("%s: Read FPGA version word: 0x%08x\n", __FUNCTION__, regval); ver->major = (regval >> 24) & 0xff; ver->minor = (regval >> 16) & 0xff; ver->patch = LE16_TO_HOST(regval & 0xffff); snprintf((char*)ver->describe, BLADERF_VERSION_STR_MAX, "%d.%d.%d", ver->major, ver->minor, ver->patch); return 0; } return status; } int nios_get_timestamp(struct bladerf *dev, bladerf_direction dir, uint64_t *timestamp) { int status; uint8_t buf[NIOS_PKT_LEN]; uint8_t addr; bool success; switch (dir) { case BLADERF_RX: addr = NIOS_PKT_8x64_TIMESTAMP_RX; break; case BLADERF_TX: addr = NIOS_PKT_8x64_TIMESTAMP_TX; break; default: log_debug("Invalid direction: %d\n", dir); return BLADERF_ERR_INVAL; } nios_pkt_8x64_pack(buf, NIOS_PKT_8x64_TARGET_TIMESTAMP, false, addr, 0); status = nios_access(dev, buf); if (status != 0) { return status; } nios_pkt_8x64_resp_unpack(buf, NULL, NULL, NULL, timestamp, &success); if (success) { log_verbose("%s: Read %s timestamp: %" PRIu64 "\n", __FUNCTION__, direction2str(dir), *timestamp); return 0; } else { log_debug("%s: response packet reported failure.\n", __FUNCTION__); *timestamp = 0; return BLADERF_ERR_FPGA_OP; } } int nios_si5338_read(struct bladerf *dev, uint8_t addr, uint8_t *data) { int status = nios_8x8_read(dev, NIOS_PKT_8x8_TARGET_SI5338, addr, data); #ifdef ENABLE_LIBBLADERF_NIOS_ACCESS_LOG_VERBOSE if (status == 0) { log_verbose("%s: Read 0x%02x from addr 0x%02x\n", __FUNCTION__, *data, addr); } #endif return status; } int nios_si5338_write(struct bladerf *dev, uint8_t addr, uint8_t data) { int status = nios_8x8_write(dev, NIOS_PKT_8x8_TARGET_SI5338, addr, data); #ifdef ENABLE_LIBBLADERF_NIOS_ACCESS_LOG_VERBOSE if (status == 0) { log_verbose("%s: Wrote 0x%02x to addr 0x%02x\n", __FUNCTION__, data, addr); } #endif return status; } int nios_lms6_read(struct bladerf *dev, uint8_t addr, uint8_t *data) { int status = nios_8x8_read(dev, NIOS_PKT_8x8_TARGET_LMS6, addr, data); #ifdef ENABLE_LIBBLADERF_NIOS_ACCESS_LOG_VERBOSE if (status == 0) { log_verbose("%s: Read 0x%02x from addr 0x%02x\n", __FUNCTION__, *data, addr); } #endif return status; } int nios_lms6_write(struct bladerf *dev, uint8_t addr, uint8_t data) { int status = nios_8x8_write(dev, NIOS_PKT_8x8_TARGET_LMS6, addr, data); #ifdef ENABLE_LIBBLADERF_NIOS_ACCESS_LOG_VERBOSE if (status == 0) { log_verbose("%s: Wrote 0x%02x to addr 0x%02x\n", __FUNCTION__, data, addr); } #endif return status; } int nios_ina219_read(struct bladerf *dev, uint8_t addr, uint16_t *data) { int status; status = nios_8x16_read(dev, NIOS_PKT_8x16_TARGET_INA219, addr, data); if (status == 0) { log_verbose("%s: Read 0x%04x from addr 0x%02x\n", __FUNCTION__, *data, addr); } return status; } int nios_ina219_write(struct bladerf *dev, uint8_t addr, uint16_t data) { int status; status = nios_8x16_write(dev, NIOS_PKT_8x16_TARGET_INA219, addr, data); if (status == 0) { log_verbose("%s: Wrote 0x%04x to addr 0x%02x\n", __FUNCTION__, data, addr); } return status; } #define VERBOSE_OUT_SINGLEBYTE "%s: %s 0x%02x @ addr 0x%04x\n" #define VERBOSE_OUT_MULTIBYTE "%s: %s 0x%02x @ addr 0x%04x (%d/%d)\n" int nios_ad9361_spi_read(struct bladerf *dev, uint16_t cmd, uint64_t *data) { int status; status = nios_16x64_read(dev, NIOS_PKT_16x64_TARGET_AD9361, cmd, data); #ifdef ENABLE_LIBBLADERF_NIOS_ACCESS_LOG_VERBOSE if (log_get_verbosity() == BLADERF_LOG_LEVEL_VERBOSE && status == 0) { size_t bytes = (((cmd >> 12) & 0x7) + 1); size_t addr = cmd & 0xFFF; if (bytes > 1) { size_t i; for (i = 0; i < bytes; ++i) { uint8_t byte = (*data >> (56 - 8 * i)) & 0xFF; log_verbose(VERBOSE_OUT_MULTIBYTE, "ad9361_spi", " MRead", byte, addr - i, i + 1, bytes); } } else { uint8_t byte = (*data >> 56) & 0xFF; log_verbose(VERBOSE_OUT_SINGLEBYTE, "ad9361_spi", " Read", byte, addr); } } #endif return status; } int nios_ad9361_spi_write(struct bladerf *dev, uint16_t cmd, uint64_t data) { int status; status = nios_16x64_write(dev, NIOS_PKT_16x64_TARGET_AD9361, cmd, data); #ifdef ENABLE_LIBBLADERF_NIOS_ACCESS_LOG_VERBOSE if (log_get_verbosity() == BLADERF_LOG_LEVEL_VERBOSE && status == 0) { size_t bytes = (((cmd >> 12) & 0x7) + 1) & 0xFF; size_t addr = cmd & 0xFFF; if (bytes > 1) { size_t i; for (i = 0; i < bytes; ++i) { uint8_t byte = (data >> (56 - 8 * i)) & 0xFF; log_verbose(VERBOSE_OUT_MULTIBYTE, "ad9361_spi", "MWrite", byte, addr - i, i + 1, bytes); } } else { uint8_t byte = (data >> 56) & 0xFF; log_verbose(VERBOSE_OUT_SINGLEBYTE, "ad9361_spi", " Write", byte, addr); } } #endif return status; } int nios_adi_axi_read(struct bladerf *dev, uint32_t addr, uint32_t *data) { int status; status = nios_32x32_read(dev, NIOS_PKT_32x32_TARGET_ADI_AXI, addr, data); #ifdef ENABLE_LIBBLADERF_NIOS_ACCESS_LOG_VERBOSE if (status == 0) { log_verbose("%s: Read 0x%08" PRIx32 " from addr 0x%04" PRIx32 "\n", __FUNCTION__, *data, addr); } #endif return status; } int nios_adi_axi_write(struct bladerf *dev, uint32_t addr, uint32_t data) { int status; status = nios_32x32_write(dev, NIOS_PKT_32x32_TARGET_ADI_AXI, addr, data); #ifdef ENABLE_LIBBLADERF_NIOS_ACCESS_LOG_VERBOSE if (status == 0) { log_verbose("%s: Wrote 0x%08" PRIx32 " to addr 0x%04" PRIx32 "\n", __FUNCTION__, data, addr); } #endif return status; } int nios_wishbone_master_read(struct bladerf *dev, uint32_t addr, uint32_t *data) { int status; status = nios_32x32_read(dev, NIOS_PKT_32x32_TARGET_WB_MSTR, addr, data); #ifdef ENABLE_LIBBLADERF_NIOS_ACCESS_LOG_VERBOSE if (status == 0) { log_verbose("%s: Read 0x%08" PRIx32 " from addr 0x%04" PRIx32 "\n", __FUNCTION__, *data, addr); } #endif return status; } int nios_wishbone_master_write(struct bladerf *dev, uint32_t addr, uint32_t data) { int status; status = nios_32x32_write(dev, NIOS_PKT_32x32_TARGET_WB_MSTR, addr, data); #ifdef ENABLE_LIBBLADERF_NIOS_ACCESS_LOG_VERBOSE if (status == 0) { log_verbose("%s: Wrote 0x%08" PRIx32 " to addr 0x%04" PRIx32 "\n", __FUNCTION__, data, addr); } #endif return status; } int nios_rfic_command_read(struct bladerf *dev, uint16_t cmd, uint64_t *data) { int status; status = nios_16x64_read(dev, NIOS_PKT_16x64_TARGET_RFIC, cmd, data); #ifdef ENABLE_LIBBLADERF_NIOS_ACCESS_LOG_VERBOSE if (status == 0) { log_verbose("%s: Read 0x%04x 0x%08x\n", __FUNCTION__, cmd, *data); } #endif return status; } int nios_rfic_command_write(struct bladerf *dev, uint16_t cmd, uint64_t data) { int status; status = nios_16x64_write(dev, NIOS_PKT_16x64_TARGET_RFIC, cmd, data); #ifdef ENABLE_LIBBLADERF_NIOS_ACCESS_LOG_VERBOSE if (status == 0) { log_verbose("%s: Write 0x%04x 0x%08x\n", __FUNCTION__, cmd, data); } #endif return status; } int nios_rffe_control_read(struct bladerf *dev, uint32_t *value) { int status; status = nios_8x32_read(dev, NIOS_PKT_8x32_TARGET_RFFE_CSR, 0, value); #ifdef ENABLE_LIBBLADERF_NIOS_ACCESS_LOG_VERBOSE if (status == 0) { log_verbose("%s: Read 0x%08x\n", __FUNCTION__, *value); } #endif return status; } int nios_rffe_control_write(struct bladerf *dev, uint32_t value) { int status; status = nios_8x32_write(dev, NIOS_PKT_8x32_TARGET_RFFE_CSR, 0, value); #ifdef ENABLE_LIBBLADERF_NIOS_ACCESS_LOG_VERBOSE if (status == 0) { log_verbose("%s: Wrote 0x%08x\n", __FUNCTION__, value); } #endif return status; } int nios_rffe_fastlock_save(struct bladerf *dev, bool is_tx, uint8_t rffe_profile, uint16_t nios_profile) { int status; uint8_t addr; uint32_t data = 0; addr = is_tx ? 1 : 0; data = (rffe_profile << 16) | nios_profile; status = nios_8x32_write(dev, NIOS_PKT_8x32_TARGET_FASTLOCK, addr, data); #ifdef ENABLE_LIBBLADERF_NIOS_ACCESS_LOG_VERBOSE if (status == 0) { log_verbose("%s: Wrote 0x%08x\n", __FUNCTION__, data); } #endif return status; } int nios_ad56x1_vctcxo_trim_dac_read(struct bladerf *dev, uint16_t *value) { int status; status = nios_8x16_read(dev, NIOS_PKT_8x16_TARGET_AD56X1_DAC, 0, value); if (status == 0) { log_verbose("%s: Read 0x%04x\n", __FUNCTION__, *value); } return status; } int nios_ad56x1_vctcxo_trim_dac_write(struct bladerf *dev, uint16_t value) { int status; status = nios_8x16_write(dev, NIOS_PKT_8x16_TARGET_AD56X1_DAC, 0, value); if (status == 0) { log_verbose("%s: Wrote 0x%04x\n", __FUNCTION__, value); } return status; } int nios_adf400x_read(struct bladerf *dev, uint8_t addr, uint32_t *data) { int status; status = nios_8x32_read(dev, NIOS_PKT_8x32_TARGET_ADF400X, addr, data); if (status == 0) { log_verbose("%s: Read 0x%08x from addr 0x%02x\n", __FUNCTION__, *data, addr); } return status; } int nios_adf400x_write(struct bladerf *dev, uint8_t addr, uint32_t data) { int status; data &= ~(0x3); status = nios_8x32_write(dev, NIOS_PKT_8x32_TARGET_ADF400X, 0, data | (addr & 0x3)); if (status == 0) { log_verbose("%s: Wrote 0x%08x to addr 0x%02x\n", __FUNCTION__, data, addr); } return status; } int nios_vctcxo_trim_dac_write(struct bladerf *dev, uint8_t addr, uint16_t value) { return nios_8x16_write(dev, NIOS_PKT_8x16_TARGET_VCTCXO_DAC, addr, value); } int nios_vctcxo_trim_dac_read(struct bladerf *dev, uint8_t addr, uint16_t *value) { return nios_8x16_read(dev, NIOS_PKT_8x16_TARGET_VCTCXO_DAC, addr, value); } int nios_set_vctcxo_tamer_mode(struct bladerf *dev, bladerf_vctcxo_tamer_mode mode) { int status; status = nios_8x8_write(dev, NIOS_PKT_8x8_TARGET_VCTCXO_TAMER, 0xff, (uint8_t) mode); if (status == 0) { log_verbose("%s: Wrote mode=0x%02x\n", __FUNCTION__, mode); } return status; } int nios_get_vctcxo_tamer_mode(struct bladerf *dev, bladerf_vctcxo_tamer_mode *mode) { int status; uint8_t tmp; *mode = BLADERF_VCTCXO_TAMER_INVALID; status = nios_8x8_read(dev, NIOS_PKT_8x8_TARGET_VCTCXO_TAMER, 0xff, &tmp); if (status == 0) { log_verbose("%s: Read mode=0x%02x\n", __FUNCTION__, tmp); switch ((bladerf_vctcxo_tamer_mode) tmp) { case BLADERF_VCTCXO_TAMER_DISABLED: case BLADERF_VCTCXO_TAMER_1_PPS: case BLADERF_VCTCXO_TAMER_10_MHZ: *mode = (bladerf_vctcxo_tamer_mode) tmp; break; default: status = BLADERF_ERR_UNEXPECTED; } } return status; } int nios_get_iq_gain_correction(struct bladerf *dev, bladerf_channel ch, int16_t *value) { int status = BLADERF_ERR_INVAL; uint16_t tmp = 0; switch (ch) { case BLADERF_CHANNEL_RX(0): status = nios_8x16_read(dev, NIOS_PKT_8x16_TARGET_IQ_CORR, NIOS_PKT_8x16_ADDR_IQ_CORR_RX_GAIN, &tmp); break; case BLADERF_CHANNEL_TX(0): status = nios_8x16_read(dev, NIOS_PKT_8x16_TARGET_IQ_CORR, NIOS_PKT_8x16_ADDR_IQ_CORR_TX_GAIN, &tmp); break; default: log_debug("Invalid channel: 0x%x\n", ch); } *value = (int16_t) tmp; if (status == 0) { log_verbose("%s: Read %s %d\n", __FUNCTION__, channel2str(ch), *value); } return status; } int nios_get_iq_phase_correction(struct bladerf *dev, bladerf_channel ch, int16_t *value) { int status = BLADERF_ERR_INVAL; uint16_t tmp = 0; switch (ch) { case BLADERF_CHANNEL_RX(0): status = nios_8x16_read(dev, NIOS_PKT_8x16_TARGET_IQ_CORR, NIOS_PKT_8x16_ADDR_IQ_CORR_RX_PHASE, &tmp); break; case BLADERF_CHANNEL_TX(0): status = nios_8x16_read(dev, NIOS_PKT_8x16_TARGET_IQ_CORR, NIOS_PKT_8x16_ADDR_IQ_CORR_TX_PHASE, &tmp); break; default: log_debug("Invalid channel: 0x%x\n", ch); } *value = (int16_t) tmp; if (status == 0) { log_verbose("%s: Read %s %d\n", __FUNCTION__, channel2str(ch), *value); } return status; } int nios_set_iq_gain_correction(struct bladerf *dev, bladerf_channel ch, int16_t value) { int status = BLADERF_ERR_INVAL; switch (ch) { case BLADERF_CHANNEL_RX(0): log_verbose("Setting RX IQ Correction gain: %d\n", value); status = nios_8x16_write(dev, NIOS_PKT_8x16_TARGET_IQ_CORR, NIOS_PKT_8x16_ADDR_IQ_CORR_RX_GAIN, value); break; case BLADERF_CHANNEL_TX(0): log_verbose("Setting TX IQ Correction gain: %d\n", value); status = nios_8x16_write(dev, NIOS_PKT_8x16_TARGET_IQ_CORR, NIOS_PKT_8x16_ADDR_IQ_CORR_TX_GAIN, value); break; default: log_debug("Invalid channel: 0x%x\n", ch); } if (status == 0) { log_verbose("%s: Wrote %s %d\n", __FUNCTION__, channel2str(ch), value); } return status; } int nios_set_iq_phase_correction(struct bladerf *dev, bladerf_channel ch, int16_t value) { int status = BLADERF_ERR_INVAL; switch (ch) { case BLADERF_CHANNEL_RX(0): log_verbose("Setting RX IQ Correction phase: %d\n", value); status = nios_8x16_write(dev, NIOS_PKT_8x16_TARGET_IQ_CORR, NIOS_PKT_8x16_ADDR_IQ_CORR_RX_PHASE, value); break; case BLADERF_CHANNEL_TX(0): log_verbose("Setting TX IQ Correction phase: %d\n", value); status = nios_8x16_write(dev, NIOS_PKT_8x16_TARGET_IQ_CORR, NIOS_PKT_8x16_ADDR_IQ_CORR_TX_PHASE, value); break; default: log_debug("Invalid channel: 0x%x\n", ch); } if (status == 0) { log_verbose("%s: Wrote %s %d\n", __FUNCTION__, channel2str(ch), value); } return status; } int nios_set_agc_dc_correction(struct bladerf *dev, int16_t q_max, int16_t i_max, int16_t q_mid, int16_t i_mid, int16_t q_low, int16_t i_low) { int status; status = nios_8x16_write(dev, NIOS_PKT_8x16_TARGET_AGC_CORR, NIOS_PKT_8x16_ADDR_AGC_DC_Q_MAX, q_max); if (!status) status = nios_8x16_write(dev, NIOS_PKT_8x16_TARGET_AGC_CORR, NIOS_PKT_8x16_ADDR_AGC_DC_I_MAX, i_max); if (!status) status = nios_8x16_write(dev, NIOS_PKT_8x16_TARGET_AGC_CORR, NIOS_PKT_8x16_ADDR_AGC_DC_Q_MID, q_mid); if (!status) status = nios_8x16_write(dev, NIOS_PKT_8x16_TARGET_AGC_CORR, NIOS_PKT_8x16_ADDR_AGC_DC_I_MID, i_mid); if (!status) status = nios_8x16_write(dev, NIOS_PKT_8x16_TARGET_AGC_CORR, NIOS_PKT_8x16_ADDR_AGC_DC_Q_MIN, q_low); if (!status) status = nios_8x16_write(dev, NIOS_PKT_8x16_TARGET_AGC_CORR, NIOS_PKT_8x16_ADDR_AGC_DC_I_MIN, i_low); return status; } int nios_xb200_synth_write(struct bladerf *dev, uint32_t value) { int status = nios_8x32_write(dev, NIOS_PKT_8x32_TARGET_ADF4351, 0, value); if (status == 0) { log_verbose("%s: Wrote 0x%08x\n", __FUNCTION__, value); } return status; } int nios_expansion_gpio_read(struct bladerf *dev, uint32_t *val) { int status = nios_32x32_masked_read(dev, NIOS_PKT_32x32_TARGET_EXP, 0xffffffff, val); if (status == 0) { log_verbose("%s: Read 0x%08x\n", __FUNCTION__, *val); } return status; } int nios_expansion_gpio_write(struct bladerf *dev, uint32_t mask, uint32_t val) { int status = nios_32x32_masked_write(dev, NIOS_PKT_32x32_TARGET_EXP, mask, val); if (status == 0) { log_verbose("%s: Wrote 0x%08x (with mask 0x%08x)\n", __FUNCTION__, val, mask); } return status; } int nios_expansion_gpio_dir_read(struct bladerf *dev, uint32_t *val) { int status = nios_32x32_masked_read(dev, NIOS_PKT_32x32_TARGET_EXP_DIR, 0xffffffff, val); if (status == 0) { log_verbose("%s: Read 0x%08x\n", __FUNCTION__, *val); } return status; } int nios_expansion_gpio_dir_write(struct bladerf *dev, uint32_t mask, uint32_t val) { int status = nios_32x32_masked_write(dev, NIOS_PKT_32x32_TARGET_EXP_DIR, mask, val); if (status == 0) { log_verbose("%s: Wrote 0x%08x (with mask 0x%08x)\n", __FUNCTION__, val, mask); } return status; } int nios_retune(struct bladerf *dev, bladerf_channel ch, uint64_t timestamp, uint16_t nint, uint32_t nfrac, uint8_t freqsel, uint8_t vcocap, bool low_band, uint8_t xb_gpio, bool quick_tune) { int status; uint8_t buf[NIOS_PKT_LEN]; uint8_t resp_flags; uint64_t duration; if (timestamp == NIOS_PKT_RETUNE_CLEAR_QUEUE) { log_verbose("Clearing %s retune queue.\n", channel2str(ch)); } else { log_verbose("%s: channel=%s timestamp=%"PRIu64" nint=%u nfrac=%u\n\t\t\t\t" "freqsel=0x%02x vcocap=0x%02x low_band=%d quick_tune=%d\n", __FUNCTION__, channel2str(ch), timestamp, nint, nfrac, freqsel, vcocap, low_band, quick_tune); } nios_pkt_retune_pack(buf, ch, timestamp, nint, nfrac, freqsel, vcocap, low_band, xb_gpio, quick_tune); status = nios_access(dev, buf); if (status != 0) { return status; } nios_pkt_retune_resp_unpack(buf, &duration, &vcocap, &resp_flags); if (resp_flags & NIOS_PKT_RETUNERESP_FLAG_TSVTUNE_VALID) { log_verbose("%s retune operation: vcocap=%u, duration=%"PRIu64"\n", channel2str(ch), vcocap, duration); } else { log_verbose("%s operation duration: %"PRIu64"\n", channel2str(ch), duration); } if ((resp_flags & NIOS_PKT_RETUNERESP_FLAG_SUCCESS) == 0) { if (timestamp == BLADERF_RETUNE_NOW) { log_debug("FPGA tuning reported failure.\n"); status = BLADERF_ERR_UNEXPECTED; } else { log_debug("The FPGA's retune queue is full. Try again after " "a previous request has completed.\n"); status = BLADERF_ERR_QUEUE_FULL; } } return status; } int nios_retune2(struct bladerf *dev, bladerf_channel ch, uint64_t timestamp, uint16_t nios_profile, uint8_t rffe_profile, uint8_t port, uint8_t spdt) { int status; uint8_t buf[NIOS_PKT_LEN]; uint8_t resp_flags; uint64_t duration; if (timestamp == NIOS_PKT_RETUNE2_CLEAR_QUEUE) { log_verbose("Clearing %s retune queue.\n", channel2str(ch)); } else { log_verbose("%s: channel=%s timestamp=%"PRIu64" nios_profile=%u " "rffe_profile=%u\n\t\t\t\tport=0x%02x spdt=0x%02x\n", __FUNCTION__, channel2str(ch), timestamp, nios_profile, rffe_profile, port, spdt); } nios_pkt_retune2_pack(buf, ch, timestamp, nios_profile, rffe_profile, port, spdt); status = nios_access(dev, buf); if (status != 0) { return status; } nios_pkt_retune2_resp_unpack(buf, &duration, &resp_flags); if (resp_flags & NIOS_PKT_RETUNE2_RESP_FLAG_TSVTUNE_VALID) { log_verbose("%s retune operation: duration=%"PRIu64"\n", channel2str(ch), duration); } else { log_verbose("%s operation duration: %"PRIu64"\n", channel2str(ch), duration); } if ((resp_flags & NIOS_PKT_RETUNE2_RESP_FLAG_SUCCESS) == 0) { if (timestamp == BLADERF_RETUNE_NOW) { log_debug("FPGA tuning reported failure.\n"); status = BLADERF_ERR_UNEXPECTED; } else { log_debug("The FPGA's retune queue is full. Try again after " "a previous request has completed.\n"); status = BLADERF_ERR_QUEUE_FULL; } } return status; } int nios_read_trigger(struct bladerf *dev, bladerf_channel ch, bladerf_trigger_signal trigger, uint8_t *value) { int status; uint8_t nios_id; switch (ch) { case BLADERF_CHANNEL_TX(0): nios_id = NIOS_PKT_8x8_TX_TRIGGER_CTL; break; case BLADERF_CHANNEL_RX(0): nios_id = NIOS_PKT_8x8_RX_TRIGGER_CTL; break; default: log_debug("Invalid channel: 0x%x\n", ch); return BLADERF_ERR_INVAL; } /* Only 1 external trigger is currently supported */ switch (trigger) { case BLADERF_TRIGGER_J71_4: case BLADERF_TRIGGER_J51_1: case BLADERF_TRIGGER_MINI_EXP_1: break; default: log_debug("Invalid trigger: %d\n", trigger); return BLADERF_ERR_INVAL; } status = nios_8x8_read(dev, nios_id, 0, value); if (status == 0) { log_verbose("%s trigger read value 0x%02x\n", channel2str(ch), *value); } return status; } int nios_write_trigger(struct bladerf *dev, bladerf_channel ch, bladerf_trigger_signal trigger, uint8_t value) { int status; uint8_t nios_id; switch (ch) { case BLADERF_CHANNEL_TX(0): nios_id = NIOS_PKT_8x8_TX_TRIGGER_CTL; break; case BLADERF_CHANNEL_RX(0): nios_id = NIOS_PKT_8x8_RX_TRIGGER_CTL; break; default: log_debug("Invalid channel: 0x%x\n", ch); return BLADERF_ERR_INVAL; } /* Only 1 external trigger is currently supported */ switch (trigger) { case BLADERF_TRIGGER_J71_4: case BLADERF_TRIGGER_J51_1: case BLADERF_TRIGGER_MINI_EXP_1: break; default: log_debug("Invalid trigger: %d\n", trigger); return BLADERF_ERR_INVAL; } status = nios_8x8_write(dev, nios_id, 0, value); if (status == 0) { log_verbose("%s trigger write value 0x%02x\n", channel2str(ch), value); } return status; } bladeRF-2024.05/host/libraries/libbladeRF/src/backend/usb/nios_access.h000066400000000000000000000434661457144405000255360ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2015 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* This file defines functionality used to communicate with the NIOS II * soft-core processor running on the FPGA versions >= v0.3.0 * * The host communicates with the NIOS II via USB transfers to the Cypress FX3, * which then communicates with the FPGA via a UART. This module packs and * submits the requests, and receives and unpacks the responses. * * See the files in the top-level fpga_common/ directory for description * and macros pertaining to the legacy packet format. */ #ifndef BACKEND_USB_NIOS_ACCESS_H_ #define BACKEND_USB_NIOS_ACCESS_H_ #include #include #include #include "board/board.h" #include "usb.h" /** * Read from the FPGA's config register * * @param dev Device handle * @param[out] val On success, updated with config register value * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_config_read(struct bladerf *dev, uint32_t *val); /** * Write to FPGA's config register * * @param dev Device handle * @param[in] val Register value to write * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_config_write(struct bladerf *dev, uint32_t val); /** * Read the FPGA version into the provided version structure * * @param dev Device handle * @param[out] ver Updated with FPGA version (upon success) * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_get_fpga_version(struct bladerf *dev, struct bladerf_version *ver); /** * Read a timestamp counter value * * @param dev Device handle * @param[in] dir Stream direction * @param[out] timestamp On success, updated with the timestamp value * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_get_timestamp(struct bladerf *dev, bladerf_direction dir, uint64_t *timestamp); /** * Read from an Si5338 register * * @param dev Device handle * @param[in] addr Register address * @param[out] data On success, updated with read data * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_si5338_read(struct bladerf *dev, uint8_t addr, uint8_t *data); /** * Write to an Si5338 register * * @param dev Device handle * @param[in] addr Register address * @param[in] data Data to write * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_si5338_write(struct bladerf *dev, uint8_t addr, uint8_t data); /** * Read from an LMS6002D register * * @param dev Device handle * @param[in] addr Register address * @param[out] data On success, updated with data read from the device * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_lms6_read(struct bladerf *dev, uint8_t addr, uint8_t *data); /** * Write to an LMS6002D register * * @param dev Device handle * @param[in] addr Register address * @param[out] data Register data * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_lms6_write(struct bladerf *dev, uint8_t addr, uint8_t data); /** * Read from an INA219 register * * @param dev Device handle * @param[in] addr Register address * @param[out] data Data * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_ina219_read(struct bladerf *dev, uint8_t addr, uint16_t *data); /** * Write to an INA219 register * * @param dev Device handle * @param[in] addr Register address * @param[in] data Data * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_ina219_write(struct bladerf *dev, uint8_t addr, uint16_t data); /** * Read the AD9361 over SPI. * * @param dev Device handle * @param[in] cmd Command * @param[out] data Data * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_ad9361_spi_read(struct bladerf *dev, uint16_t cmd, uint64_t *data); /** * Write to the AD9361 over SPI. * * @param dev Device handle * @param[in] cmd Command * @param[in] data Data * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_ad9361_spi_write(struct bladerf *dev, uint16_t cmd, uint64_t data); /** * Read the ADI AXI memory mapped region. * * @param dev Device handle * @param[in] addr Address * @param[out] data Data * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_adi_axi_read(struct bladerf *dev, uint32_t cmd, uint32_t *data); /** * Write to the ADI AXI memory mapped region. * * @param dev Device handle * @param[in] addr Address * @param[in] data Data * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_adi_axi_write(struct bladerf *dev, uint32_t cmd, uint32_t data); /** * Read the Wishbone Master memory mapped region. * * @param dev Device handle * @param[in] addr Address * @param[out] data Data * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_wishbone_master_read(struct bladerf *dev, uint32_t addr, uint32_t *data); /** * Write to the Wishbone Master memory mapped region. * * @param dev Device handle * @param[in] addr Address * @param[in] data Data * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_wishbone_master_write(struct bladerf *dev, uint32_t addr, uint32_t data); /** * Read RFIC command * * @param dev Device handle * @param[in] cmd Command: `(command & 0xFF) + ((channel & 0xF) << 8)` * @param[out] data Data * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_rfic_command_read(struct bladerf *dev, uint16_t cmd, uint64_t *data); /** * Write RFIC command * * @param dev Device handle * @param[in] cmd Command: `(command & 0xFF) + ((channel & 0xF) << 8)` * @param[in] data Data * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_rfic_command_write(struct bladerf *dev, uint16_t cmd, uint64_t data); /** * Read RFFE control register. * * @param dev Device handle * @param[in] len Data buffer length * @param[out] value Value * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_rffe_control_read(struct bladerf *dev, uint32_t *value); /** * Write RFFE control register. * * @param dev Device handle * @param[in] len Data buffer length * @param[in] value Value * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_rffe_control_write(struct bladerf *dev, uint32_t value); /** * Save an RFFE fast lock profile to the Nios. * * @param dev Device handle * @param[in] is_tx True if TX profile, false if RX profile * @param[in] rffe_profile RFFE profile to save * @param[in] nios_profile Where to save the profile in the Nios * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_rffe_fastlock_save(struct bladerf *dev, bool is_tx, uint8_t rffe_profile, uint16_t nios_profile); /** * Write to the AD56X1 VCTCXO trim DAC. * * @param dev Device handle * @param[in] value Value * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_ad56x1_vctcxo_trim_dac_write(struct bladerf *dev, uint16_t value); /** * Read the AD56X1 VCTCXO trim DAC. * * @param dev Device handle * @param[out] value Data * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_ad56x1_vctcxo_trim_dac_read(struct bladerf *dev, uint16_t *value); /** * Write to the ADF400X. * * @param dev Device handle * @param[in] addr Address * @param[in] data Data * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_adf400x_write(struct bladerf *dev, uint8_t addr, uint32_t data); /** * Read from the ADF400X. * * @param dev Device handle * @param[in] addr Address * @param[out] data Data * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_adf400x_read(struct bladerf *dev, uint8_t addr, uint32_t *data); /** * Write to a VCTCXO trim DAC register. * * @param dev Device handle * @param[in] addr Register * @param[in] value Value * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_vctcxo_trim_dac_write(struct bladerf *dev, uint8_t addr, uint16_t value); /** * Read from a VCTCXO trim DAC register. * * @param dev Device handle * @param[in] addr Register * @param[out] value Data * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_vctcxo_trim_dac_read(struct bladerf *dev, uint8_t addr, uint16_t *value); /** * Write VCTCXO tamer mode selection * * @param dev Device handle * @param[in] mode Tamer mode to use, or BLADERF_VCTCXO_TAMER_DISABLED * to disable the tamer. * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_set_vctcxo_tamer_mode(struct bladerf *dev, bladerf_vctcxo_tamer_mode mode); /** * Read the current VCTCXO mode selection * * @param dev Device handle * @param[out] mode Current tamer mode in use. * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_get_vctcxo_tamer_mode(struct bladerf *dev, bladerf_vctcxo_tamer_mode *mode); /** * Read a IQ gain correction value * * @param dev Device handle * @param[in] ch Channel * @param[out] value On success, updated with phase correction value * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_get_iq_gain_correction(struct bladerf *dev, bladerf_channel ch, int16_t *value); /** * Read a IQ phase correction value * * @param dev Device handle * @param[in] ch Channel * @param[out] value On success, updated with phase correction value * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_get_iq_phase_correction(struct bladerf *dev, bladerf_channel ch, int16_t *value); /** * Write an IQ gain correction value * * @param dev Device handle * @param[in] ch Channel * @param[in] value Correction value to write * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_set_iq_gain_correction(struct bladerf *dev, bladerf_channel ch, int16_t value); /** * Write an IQ phase correction value * * @param dev Device handle * @param[in] ch Channel * @param[in] value Correction value to write * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_set_iq_phase_correction(struct bladerf *dev, bladerf_channel ch, int16_t value); /** * Write AGC DC LUT values * * @param[in] dev Device handle * @param[in] q_max Q DC offset at Max gain * @param[in] i_max I DC offset at Max gain * @param[in] q_mid Q DC offset at Mid gain * @param[in] i_mid I DC offset at Mid gain * @param[in] q_low Q DC offset at Low gain * @param[in] i_low I DC offset at Low gain * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_set_agc_dc_correction(struct bladerf *dev, int16_t q_max, int16_t i_max, int16_t q_mid, int16_t i_mid, int16_t q_low, int16_t i_low); /** * Write a value to the XB-200's ADF4351 synthesizer * * @param dev Device handle * @param[in] value Write value * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_xb200_synth_write(struct bladerf *dev, uint32_t value); /** * Read from expanion GPIO * * @param dev Device handle * @param[out] value On success, updated with read value * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_expansion_gpio_read(struct bladerf *dev, uint32_t *val); /** * Write to expansion GPIO * * @param dev Device handle * @param[in] mask Mask denoting bits to write * @param[in] value Write value * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_expansion_gpio_write(struct bladerf *dev, uint32_t mask, uint32_t val); /** * Read from expansion GPIO direction register * * @param dev Device handle * @param[out] value On success, updated with read value * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_expansion_gpio_dir_read(struct bladerf *dev, uint32_t *val); /** * Write to expansion GPIO direction register * * @param dev Device handle * @param[in] mask Mask denoting bits to configure * @param[in] output '1' bit denotes output, '0' bit denotes input * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_expansion_gpio_dir_write(struct bladerf *dev, uint32_t mask, uint32_t outputs); /** * Dummy handler for a retune request, which is not supported on * earlier FPGA versions. * * All of the following parameters are ignored. * * @param dev Device handle * @param[in] ch Channel * @param[in] timestamp Time to schedule retune at * @param[in] nint Integer portion of frequency multiplier * @param[in] nfrac Fractional portion of frequency multiplier * @param[in] freqsel VCO and divider selection * @param[in] low_band High vs low band selection * @param[in] xb_gpio XB configuration bits * @param[in] quick_tune Denotes quick tune should be used instead of * tuning algorithm * * @return BLADERF_ERR_UNSUPPORTED */ int nios_retune(struct bladerf *dev, bladerf_channel ch, uint64_t timestamp, uint16_t nint, uint32_t nfrac, uint8_t freqsel, uint8_t vcocap, bool low_band, uint8_t xb_gpio, bool quick_tune); /** * Handler for a retune request on bladeRF2 devices. The RFFEs used in these * devices have a concept called fast lock profiles that store all the VCO * information needed to quickly retune to a different frequency. The RFFE * can store up to 8 profiles for RX, and a separate 8 for TX. To use more * profiles, they must be stored in the baseband processor (e.g. the FPGA * or Nios) and loaded into one of the 8 slots as needed. * * Each of these profiles consumes 16 bytes not including the timestamp and * RF port/switch information. This is too large to fit into a single Nios * packet at this time, so to improve retune time, the profiles are stored * in the Nios and the Host will schedule retunes by specifying the Nios * profile to load into the specified RFFE profile slot. * * @param dev Device handle * @param[in] ch Channel * @param[in] timestamp Time to schedule retune at * @param[in] nios_profile Nios profile number (0-N) to load into the RFFE * @param[in] rffe_profile RFFE fast lock profile number (0-7) into which * the Nios profile will be loaded. * @param[in] port RFFE port settings * @param[in] spdt RF SPDT switch settings * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_retune2(struct bladerf *dev, bladerf_channel ch, uint64_t timestamp, uint16_t nios_profile, uint8_t rffe_profile, uint8_t port, uint8_t spdt); /** * Read trigger register value * * @param dev Device handle * @param[in] ch Channel * @param[in] trigger Trigger to read from * @param[out] value On success, updated with register value * * * @return 0 on success, BLADERF_ERR_* code on error */ int nios_read_trigger(struct bladerf *dev, bladerf_channel ch, bladerf_trigger_signal trigger, uint8_t *value); /** * Write trigger register value * * @param dev Device handle * @param[in] ch Channel * @param[in] trigger Trigger to read * @param[in] value Value to write * * @return 0 on success, BLADERF_ERR_* code on error */ int nios_write_trigger(struct bladerf *dev, bladerf_channel ch, bladerf_trigger_signal trigger, uint8_t value); #endif bladeRF-2024.05/host/libraries/libbladeRF/src/backend/usb/nios_legacy_access.c000066400000000000000000000516231457144405000270470ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014-2015 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* This file implements functionality used to communicate with the NIOS II * soft-core processor running on the FPGA versions prior to v0.2.x. * (Although post v0.2.x FPGAs support this for reverse compatibility). * * The host communicates with the NIOS II via USB transfers to the Cypress FX3, * which then communicates with the FPGA via a UART. * * See the files in the top-level fpga_common/ directory for description * and macros pertaining to the legacy packet format. */ #include #include #include #include "log.h" #include "usb.h" #include "nios_legacy_access.h" #include "nios_pkt_formats.h" #include "board/board.h" #include "board/bladerf1/capabilities.h" #include "helpers/version.h" #include "board/bladerf1/capabilities.h" #if 0 static void print_buf(const char *msg, const uint8_t *buf, size_t len) { size_t i; if (msg != NULL) { fputs(msg, stderr); } for (i = 0; i < len; i++) { if (i == 0) { fprintf(stderr, " 0x%02x,", buf[i]); } else if ((i + 1) % 8 == 0) { fprintf(stderr, " 0x%02x,\n ", buf[i]); } else { fprintf(stderr, " 0x%02x,", buf[i]); } } fputc('\n', stderr); } #else #define print_buf(msg, data, len) do {} while(0) #endif /* Access device/module via the legacy NIOS II packet format. */ static int nios_access(struct bladerf *dev, uint8_t peripheral, usb_direction dir, struct uart_cmd *cmd, size_t len) { struct bladerf_usb *usb = dev->backend_data; int status; size_t i; uint8_t buf[16] = { 0 }; const uint8_t pkt_mode_dir = (dir == USB_DIR_HOST_TO_DEVICE) ? NIOS_PKT_LEGACY_MODE_DIR_WRITE : NIOS_PKT_LEGACY_MODE_DIR_READ; assert(len <= ((sizeof(buf) - 2) / 2)); /* Populate the buffer for transfer, given address data pairs */ buf[0] = NIOS_PKT_LEGACY_MAGIC; buf[1] = pkt_mode_dir | peripheral | (uint8_t)len; for (i = 0; i < len; i++) { buf[i * 2 + 2] = cmd[i].addr; buf[i * 2 + 3] = cmd[i].data; } print_buf("NIOS II access request:\n", buf, 16); /* Send the command */ status = usb->fn->bulk_transfer(usb->driver, PERIPHERAL_EP_OUT, buf, sizeof(buf), PERIPHERAL_TIMEOUT_MS); if (status != 0) { log_debug("Failed to submit NIOS II request: %s\n", bladerf_strerror(status)); return status; } /* Read back the ACK. The command data is only used for a read operation, * and is thrown away otherwise */ status = usb->fn->bulk_transfer(usb->driver, PERIPHERAL_EP_IN, buf, sizeof(buf), PERIPHERAL_TIMEOUT_MS); if (dir == NIOS_PKT_LEGACY_MODE_DIR_READ && status == 0) { for (i = 0; i < len; i++) { cmd[i].data = buf[i * 2 + 3]; } } if (status == 0) { print_buf("NIOS II access response:\n", buf, 16); } else { log_debug("Failed to receive NIOS II response: %s\n", bladerf_strerror(status)); } return status; } int nios_legacy_pio_read(struct bladerf *dev, uint8_t addr, uint32_t *data) { int status; size_t i; struct uart_cmd cmd; *data = 0; for (i = 0; i < sizeof(*data); i++) { assert((addr + i) <= UINT8_MAX); cmd.addr = (uint8_t)(addr + i); cmd.data = 0xff; status = nios_access(dev, NIOS_PKT_LEGACY_DEV_CONFIG, USB_DIR_DEVICE_TO_HOST, &cmd, 1); if (status < 0) { *data = 0; return status; } *data |= (cmd.data << (i * 8)); } return 0; } int nios_legacy_pio_write(struct bladerf *dev, uint8_t addr, uint32_t data) { int status; size_t i; struct uart_cmd cmd; for (i = 0; i < sizeof(data); i++) { assert((addr + i) <= UINT8_MAX); cmd.addr = (uint8_t)(addr + i); cmd.data = (data >> (i * 8)) & 0xff; status = nios_access(dev, NIOS_PKT_LEGACY_DEV_CONFIG, USB_DIR_HOST_TO_DEVICE, &cmd, 1); if (status < 0) { return status; } } return 0; } int nios_legacy_config_read(struct bladerf *dev, uint32_t *val) { int status; status = nios_legacy_pio_read(dev, NIOS_PKT_LEGACY_PIO_ADDR_CONTROL, val); if (status == 0) { log_verbose("%s: 0x%08x\n", __FUNCTION__, val); } return status; } int nios_legacy_config_write(struct bladerf *dev, uint32_t val) { log_verbose("%s: Writing 0x%08x\n", __FUNCTION__, val); return nios_legacy_pio_write(dev, NIOS_PKT_LEGACY_PIO_ADDR_CONTROL, val); } int nios_legacy_get_fpga_version(struct bladerf *dev, struct bladerf_version *ver) { int i, status; struct uart_cmd cmd; for (i = 0; i < 4; i++) { cmd.addr = NIOS_PKT_LEGACY_DEV_FPGA_VERSION_ID + i; cmd.data = 0xff; status = nios_access(dev, NIOS_PKT_LEGACY_DEV_CONFIG, USB_DIR_DEVICE_TO_HOST, &cmd, 1); if (status != 0) { log_debug("Failed to read FPGA version[%d]: %s\n", i, bladerf_strerror(status)); return status; } switch (i) { case 0: ver->major = cmd.data; break; case 1: ver->minor = cmd.data; break; case 2: ver->patch = cmd.data; break; case 3: ver->patch |= (cmd.data << 8); break; default: assert(!"Bug"); } } snprintf((char*)ver->describe, BLADERF_VERSION_STR_MAX, "%d.%d.%d", ver->major, ver->minor, ver->patch); return status; } int nios_legacy_get_timestamp(struct bladerf *dev, bladerf_direction dir, uint64_t *value) { int status = 0; struct uart_cmd cmds[4]; uint8_t timestamp_bytes[8]; size_t i; /* Offset 16 is the time tamer according to the Nios firmware */ cmds[0].addr = (dir == BLADERF_RX ? 16 : 24); cmds[1].addr = (dir == BLADERF_RX ? 17 : 25); cmds[2].addr = (dir == BLADERF_RX ? 18 : 26); cmds[3].addr = (dir == BLADERF_RX ? 19 : 27); cmds[0].data = cmds[1].data = cmds[2].data = cmds[3].data = 0xff; status = nios_access(dev, NIOS_PKT_LEGACY_DEV_CONFIG, USB_DIR_DEVICE_TO_HOST, cmds, ARRAY_SIZE(cmds)); if (status != 0) { return status; } else { for (i = 0; i < 4; i++) { timestamp_bytes[i] = cmds[i].data; } } cmds[0].addr = (dir == BLADERF_RX ? 20 : 28); cmds[1].addr = (dir == BLADERF_RX ? 21 : 29); cmds[2].addr = (dir == BLADERF_RX ? 22 : 30); cmds[3].addr = (dir == BLADERF_RX ? 23 : 31); cmds[0].data = cmds[1].data = cmds[2].data = cmds[3].data = 0xff; status = nios_access(dev, NIOS_PKT_LEGACY_DEV_CONFIG, USB_DIR_DEVICE_TO_HOST, cmds, ARRAY_SIZE(cmds)); if (status) { return status; } else { for (i = 0; i < 4; i++) { timestamp_bytes[i + 4] = cmds[i].data; } } memcpy(value, timestamp_bytes, sizeof(*value)); *value = LE64_TO_HOST(*value); return 0; } int nios_legacy_si5338_read(struct bladerf *dev, uint8_t addr, uint8_t *data) { int status; struct uart_cmd cmd; cmd.addr = addr; cmd.data = 0xff; status = nios_access(dev, NIOS_PKT_LEGACY_DEV_SI5338, USB_DIR_DEVICE_TO_HOST, &cmd, 1); if (status == 0) { *data = cmd.data; log_verbose("%s: 0x%2.2x 0x%2.2x\n", __FUNCTION__, addr, *data); } return status; } int nios_legacy_si5338_write(struct bladerf *dev, uint8_t addr, uint8_t data) { struct uart_cmd cmd; cmd.addr = addr; cmd.data = data; log_verbose( "%s: 0x%2.2x 0x%2.2x\n", __FUNCTION__, addr, data ); return nios_access(dev, NIOS_PKT_LEGACY_DEV_SI5338, USB_DIR_HOST_TO_DEVICE, &cmd, 1); } int nios_legacy_lms6_read(struct bladerf *dev, uint8_t addr, uint8_t *data) { int status; struct uart_cmd cmd; cmd.addr = addr; cmd.data = 0xff; status = nios_access(dev, NIOS_PKT_LEGACY_DEV_LMS, USB_DIR_DEVICE_TO_HOST, &cmd, 1); if (status == 0) { *data = cmd.data; log_verbose( "%s: 0x%2.2x 0x%2.2x\n", __FUNCTION__, addr, *data ); } return status; } int nios_legacy_lms6_write(struct bladerf *dev, uint8_t addr, uint8_t data) { int status; struct uart_cmd cmd; cmd.addr = addr; cmd.data = data; log_verbose( "%s: 0x%2.2x 0x%2.2x\n", __FUNCTION__, addr, data ); status = nios_access(dev, NIOS_PKT_LEGACY_DEV_LMS, USB_DIR_HOST_TO_DEVICE, &cmd, 1); return status; } int nios_legacy_ina219_read(struct bladerf *dev, uint8_t addr, uint16_t *data) { log_debug("This operation is not supported by the legacy NIOS packet format\n"); return BLADERF_ERR_UNSUPPORTED; } int nios_legacy_ina219_write(struct bladerf *dev, uint8_t addr, uint16_t data) { log_debug("This operation is not supported by the legacy NIOS packet format\n"); return BLADERF_ERR_UNSUPPORTED; } int nios_legacy_ad9361_spi_read(struct bladerf *dev, uint16_t cmd, uint64_t *data) { log_debug("This operation is not supported by the legacy NIOS packet format\n"); return BLADERF_ERR_UNSUPPORTED; } int nios_legacy_ad9361_spi_write(struct bladerf *dev, uint16_t cmd, uint64_t data) { log_debug("This operation is not supported by the legacy NIOS packet format\n"); return BLADERF_ERR_UNSUPPORTED; } int nios_legacy_adi_axi_read(struct bladerf *dev, uint32_t addr, uint32_t *data) { log_debug("This operation is not supported by the legacy NIOS packet format\n"); return BLADERF_ERR_UNSUPPORTED; } int nios_legacy_adi_axi_write(struct bladerf *dev, uint32_t cmd, uint32_t data) { log_debug("This operation is not supported by the legacy NIOS packet format\n"); return BLADERF_ERR_UNSUPPORTED; } int nios_legacy_rfic_command_read(struct bladerf *dev, uint16_t cmd, uint64_t *data) { log_debug("This operation is not supported by the legacy NIOS packet format\n"); return BLADERF_ERR_UNSUPPORTED; } int nios_legacy_rfic_command_write(struct bladerf *dev, uint16_t cmd, uint64_t data) { log_debug("This operation is not supported by the legacy NIOS packet format\n"); return BLADERF_ERR_UNSUPPORTED; } int nios_legacy_rffe_control_read(struct bladerf *dev, uint32_t *value) { log_debug("This operation is not supported by the legacy NIOS packet format\n"); return BLADERF_ERR_UNSUPPORTED; } int nios_legacy_rffe_control_write(struct bladerf *dev, uint32_t value) { log_debug("This operation is not supported by the legacy NIOS packet format\n"); return BLADERF_ERR_UNSUPPORTED; } int nios_legacy_rffe_fastlock_save(struct bladerf *dev, bool is_tx, uint8_t rffe_profile, uint16_t nios_profile) { log_debug("This operation is not supported by the legacy NIOS packet format\n"); return BLADERF_ERR_UNSUPPORTED; } int nios_legacy_ad56x1_vctcxo_trim_dac_read(struct bladerf *dev, uint16_t *value) { log_debug("This operation is not supported by the legacy NIOS packet format\n"); return BLADERF_ERR_UNSUPPORTED; } int nios_legacy_ad56x1_vctcxo_trim_dac_write(struct bladerf *dev, uint16_t value) { log_debug("This operation is not supported by the legacy NIOS packet format\n"); return BLADERF_ERR_UNSUPPORTED; } int nios_legacy_adf400x_read(struct bladerf *dev, uint8_t addr, uint32_t *data) { log_debug("This operation is not supported by the legacy NIOS packet format\n"); return BLADERF_ERR_UNSUPPORTED; } int nios_legacy_adf400x_write(struct bladerf *dev, uint8_t addr, uint32_t data) { log_debug("This operation is not supported by the legacy NIOS packet format\n"); return BLADERF_ERR_UNSUPPORTED; } int nios_legacy_vctcxo_trim_dac_write(struct bladerf *dev, uint8_t addr, uint16_t value) { int status; struct uart_cmd cmd; int base; /* Only pass through writes of the DAC value, for compatibility with * dac161s055 driver */ if (addr != 0x08) { return 0; } /* FPGA v0.0.4 introduced a change to the location of the DAC registers */ const bool legacy_location = !have_cap(dev->board->get_capabilities(dev), BLADERF_CAP_UPDATED_DAC_ADDR); base = legacy_location ? 0 : 34; cmd.addr = base; cmd.data = value & 0xff; status = nios_access(dev, legacy_location ? NIOS_PKT_LEGACY_DEV_VCTCXO : NIOS_PKT_LEGACY_DEV_CONFIG, USB_DIR_HOST_TO_DEVICE, &cmd, 1); if (status < 0) { return status; } cmd.addr = base + 1; cmd.data = (value >> 8) & 0xff; status = nios_access(dev, legacy_location ? NIOS_PKT_LEGACY_DEV_VCTCXO : NIOS_PKT_LEGACY_DEV_CONFIG, USB_DIR_HOST_TO_DEVICE, &cmd, 1); return status; } int nios_legacy_set_vctcxo_tamer_mode(struct bladerf *dev, bladerf_vctcxo_tamer_mode mode) { log_debug("This operation is not supported by the legacy NIOS packet format\n"); return BLADERF_ERR_UNSUPPORTED; } int nios_legacy_get_vctcxo_tamer_mode(struct bladerf *dev, bladerf_vctcxo_tamer_mode *mode) { log_debug("This operation is not supported by the legacy NIOS packet format\n"); *mode = BLADERF_VCTCXO_TAMER_INVALID; return BLADERF_ERR_UNSUPPORTED; } static int get_iq_correction(struct bladerf *dev, uint8_t addr, int16_t *value) { int i; int status; struct uart_cmd cmd; *value = 0; for (i = status = 0; status == 0 && i < 2; i++) { cmd.addr = i + addr; cmd.data = 0xff; status = nios_access(dev, NIOS_PKT_LEGACY_DEV_CONFIG, USB_DIR_DEVICE_TO_HOST, &cmd, 1); *value |= (cmd.data << (i * 8)); } return status; } static int set_iq_correction(struct bladerf *dev, uint8_t addr, int16_t value) { int i; int status; struct uart_cmd cmd; for (i = status = 0; status == 0 && i < 2; i++) { cmd.addr = i + addr; cmd.data = (value >> (i * 8)) & 0xff; status = nios_access(dev, NIOS_PKT_LEGACY_DEV_CONFIG, USB_DIR_HOST_TO_DEVICE, &cmd, 1); } return status; } int nios_legacy_get_iq_gain_correction(struct bladerf *dev, bladerf_channel ch, int16_t *value) { int status; uint8_t addr; switch (ch) { case BLADERF_CHANNEL_RX(0): addr = NIOS_PKT_LEGACY_DEV_RX_GAIN_ADDR; break; case BLADERF_CHANNEL_TX(0): addr = NIOS_PKT_LEGACY_DEV_TX_GAIN_ADDR; break; default: log_debug("%s: invalid channel provided (0x%x)\n", __FUNCTION__, ch); return BLADERF_ERR_INVAL; } status = get_iq_correction(dev, addr, value); return status; } int nios_legacy_get_iq_phase_correction(struct bladerf *dev, bladerf_channel ch, int16_t *value) { uint8_t addr; switch (ch) { case BLADERF_CHANNEL_RX(0): addr = NIOS_PKT_LEGACY_DEV_RX_PHASE_ADDR; break; case BLADERF_CHANNEL_TX(0): addr = NIOS_PKT_LEGACY_DEV_TX_PHASE_ADDR; break; default: log_debug("%s: invalid channel provided (0x%x)\n", __FUNCTION__, ch); return BLADERF_ERR_INVAL; } return get_iq_correction(dev, addr, value); } int nios_legacy_set_iq_gain_correction(struct bladerf *dev, bladerf_channel ch, int16_t value) { uint8_t addr; switch (ch) { case BLADERF_CHANNEL_RX(0): addr = NIOS_PKT_LEGACY_DEV_RX_GAIN_ADDR; log_verbose("Setting RX IQ Correction phase: %d\n", value); break; case BLADERF_CHANNEL_TX(0): addr = NIOS_PKT_LEGACY_DEV_TX_GAIN_ADDR; log_verbose("Setting TX IQ Correction phase: %d\n", value); break; default: log_debug("%s: invalid channel provided (0x%x)\n", __FUNCTION__, ch); return BLADERF_ERR_INVAL; } return set_iq_correction(dev, addr, value); } int nios_legacy_set_iq_phase_correction(struct bladerf *dev, bladerf_channel ch, int16_t value) { uint8_t addr; switch (ch) { case BLADERF_CHANNEL_RX(0): log_verbose("Setting RX IQ Correction phase: %d\n", value); addr = NIOS_PKT_LEGACY_DEV_RX_PHASE_ADDR; break; case BLADERF_CHANNEL_TX(0): log_verbose("Setting TX IQ Correction phase: %d\n", value); addr = NIOS_PKT_LEGACY_DEV_TX_PHASE_ADDR; break; default: log_debug("%s: invalid channel provided (0x%x)\n", __FUNCTION__, ch); return BLADERF_ERR_INVAL; } return set_iq_correction(dev, addr, value); } int nios_legacy_xb200_synth_write(struct bladerf *dev, uint32_t value) { log_verbose("%s: 0x%08x\n", __FUNCTION__, value); return nios_legacy_pio_write(dev, NIOS_PKT_LEGACY_PIO_ADDR_XB200_SYNTH, value); } int nios_legacy_expansion_gpio_read(struct bladerf *dev, uint32_t *val) { int status = nios_legacy_pio_read(dev, NIOS_PKT_LEGACY_PIO_ADDR_EXP, val); if (status == 0) { log_verbose("%s: 0x%08x\n", __FUNCTION__, val); } return status; } int nios_legacy_expansion_gpio_write(struct bladerf *dev, uint32_t mask, uint32_t val) { int status; uint32_t tmp; if (mask != 0xffffffff) { status = nios_legacy_pio_read(dev, NIOS_PKT_LEGACY_PIO_ADDR_EXP, &tmp); if (status != 0) { return status; } tmp &= ~mask; tmp |= (val & mask); val = tmp; } log_verbose("%s: 0x%08x\n", __FUNCTION__, val); return nios_legacy_pio_write(dev, NIOS_PKT_LEGACY_PIO_ADDR_EXP, val); } int nios_legacy_expansion_gpio_dir_read(struct bladerf *dev, uint32_t *val) { int status = nios_legacy_pio_read(dev, NIOS_PKT_LEGACY_PIO_ADDR_EXP_DIR, val); if (status == 0) { log_verbose("%s: 0x%08x\n", __FUNCTION__, val); } return status; } int nios_legacy_expansion_gpio_dir_write(struct bladerf *dev, uint32_t mask, uint32_t val) { int status; uint32_t tmp; if (mask != 0xffffffff) { status = nios_legacy_pio_read(dev, NIOS_PKT_LEGACY_PIO_ADDR_EXP_DIR, &tmp); if (status != 0) { return status; } tmp &= ~mask; tmp |= (val & mask); val = tmp; } log_verbose("%s: 0x%08\n", __FUNCTION__, val); return nios_legacy_pio_write(dev, NIOS_PKT_LEGACY_PIO_ADDR_EXP_DIR, val); } int nios_legacy_read_trigger(struct bladerf *dev, bladerf_channel ch, bladerf_trigger_signal trigger, uint8_t *value) { log_debug("This operation is not supported by the legacy NIOS packet format\n"); return BLADERF_ERR_UNSUPPORTED; } int nios_legacy_write_trigger(struct bladerf *dev, bladerf_channel ch, bladerf_trigger_signal trigger, uint8_t value) { log_debug("This operation is not supported by the legacy NIOS packet format\n"); return BLADERF_ERR_UNSUPPORTED; } bladeRF-2024.05/host/libraries/libbladeRF/src/backend/usb/nios_legacy_access.h000066400000000000000000000351761457144405000270610ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014-2015 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* This file defines functionality used to communicate with the NIOS II * soft-core processor running on the FPGA versions prior to v0.2.x. * (Although post v0.2.x FPGAs support this for reverse compatibility). * * The host communicates with the NIOS II via USB transfers to the Cypress FX3, * which then communicates with the FPGA via a UART. This module packs and * submits the requests, and receives and unpacks the responses. * * See the files in the top-level fpga_common/ directory for description * and macros pertaining to the legacy packet format. */ #ifndef BACKEND_USB_NIOS_LEGACY_ACCESS_H_ #define BACKEND_USB_NIOS_LEGACY_ACCESS_H_ #include #include #include #include "board/board.h" #include "usb.h" /** * Perform a read from device/blocks connected via NIOS II PIO. * * @param dev Device handle * @param[in] addr Virtual "register address." Use NIOS_LEGACY_PIO_ADDR_* * definitions. * @param[out] data Read data * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_legacy_pio_read(struct bladerf *dev, uint8_t addr, uint32_t *data); /** * Perform a write to device/blocks connected via NIOS II PIO. * * @param dev Device handle * @param[in] addr Virtual "register address." Use NIOS_LEGACY_PIO_ADDR_* * definitions. * @param[in] data Data to write * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_legacy_pio_write(struct bladerf *dev, uint8_t addr, uint32_t data); /** * Read from the FPGA's config register * * @param dev Device handle * @param[out] val On success, updated with config register value * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_legacy_config_read(struct bladerf *dev, uint32_t *val); /** * Write to FPGA's config register * * @param dev Device handle * @param[in] val Register value to write * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_legacy_config_write(struct bladerf *dev, uint32_t val); /** * Read the FPGA version into the provided version structure * * @param dev Device handle * @param[out] ver Updated with FPGA version (upon success) * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_legacy_get_fpga_version(struct bladerf *dev, struct bladerf_version *ver); /** * Read a timestamp counter value * * @param dev Device handle * @param[in] dir Stream direction * @param[out] timestamp On success, updated with the timestamp value * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_legacy_get_timestamp(struct bladerf *dev, bladerf_direction dir, uint64_t *timestamp); /** * Read from an Si5338 register * * @param dev Device handle * @param[in] addr Register address * @param[out] data On success, updated with read data * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_legacy_si5338_read(struct bladerf *dev, uint8_t addr, uint8_t *data); /** * Write to an Si5338 register * * @param dev Device handle * @param[in] addr Register address * @param[in] data Data to write * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_legacy_si5338_write(struct bladerf *dev, uint8_t addr, uint8_t data); /** * Read from an LMS6002D register * * @param dev Device handle * @param[in] addr Register address * @param[out] data On success, updated with data read from the device * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_legacy_lms6_read(struct bladerf *dev, uint8_t addr, uint8_t *data); /** * Write to an LMS6002D register * * @param dev Device handle * @param[in] addr Register address * @param[out] data Register data * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_legacy_lms6_write(struct bladerf *dev, uint8_t addr, uint8_t data); /** * Read from an INA219 register * * @param dev Device handle * @param[in] addr Register address * @param[out] data Data * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_legacy_ina219_read(struct bladerf *dev, uint8_t addr, uint16_t *data); /** * Write to an INA219 register * * @param dev Device handle * @param[in] addr Register address * @param[in] data Data * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_legacy_ina219_write(struct bladerf *dev, uint8_t addr, uint16_t data); /** * Read the AD9361 over SPI. * * @param dev Device handle * @param[in] cmd Command * @param[out] data Data * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_legacy_ad9361_spi_read(struct bladerf *dev, uint16_t cmd, uint64_t *data); /** * Write to the AD9361 over SPI. * * @param dev Device handle * @param[in] cmd Command * @param[in] data Data * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_legacy_ad9361_spi_write(struct bladerf *dev, uint16_t cmd, uint64_t data); /** * Read the ADI AXI memory mapped region. * * @param dev Device handle * @param[in] addr Address * @param[out] data Data * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_legacy_adi_axi_read(struct bladerf *dev, uint32_t addr, uint32_t *data); /** * Write to the ADI AXI memory mapped region. * * @param dev Device handle * @param[in] addr Address * @param[in] data Data * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_legacy_adi_axi_write(struct bladerf *dev, uint32_t addr, uint32_t data); /** * Read RFIC command * * @param dev Device handle * @param[in] cmd Command * @param[out] data Data * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_legacy_rfic_command_read(struct bladerf *dev, uint16_t cmd, uint64_t *data); /** * Write RFIC command * * @param dev Device handle * @param[in] cmd Command * @param[in] data Data * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_legacy_rfic_command_write(struct bladerf *dev, uint16_t cmd, uint64_t data); /** * Read RFFE control register. * * @param dev Device handle * @param[in] len Data buffer length * @param[out] value Value * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_legacy_rffe_control_read(struct bladerf *dev, uint32_t *value); /** * Write RFFE control register. * * @param dev Device handle * @param[in] len Data buffer length * @param[in] value Value * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_legacy_rffe_control_write(struct bladerf *dev, uint32_t value); /** * Save an RFFE fast lock profile to the Nios. * * @param dev Device handle * @param[in] is_tx True if TX profile, false if RX profile * @param[in] rffe_profile RFFE profile to save * @param[in] nios_profile Where to save the profile in the Nios * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_legacy_rffe_fastlock_save(struct bladerf *dev, bool is_tx, uint8_t rffe_profile, uint16_t nios_profile); /** * Write to the AD56X1 VCTCXO trim DAC. * * @param dev Device handle * @param[in] value Value * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_legacy_ad56x1_vctcxo_trim_dac_write(struct bladerf *dev, uint16_t value); /** * Read the AD56X1 VCTCXO trim DAC. * * @param dev Device handle * @param[out] value Data * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_legacy_ad56x1_vctcxo_trim_dac_read(struct bladerf *dev, uint16_t *value); /** * Write to the ADF400X. * * @param dev Device handle * @param[in] addr Address * @param[in] data Data * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_legacy_adf400x_write(struct bladerf *dev, uint8_t addr, uint32_t data); /** * Read from the ADF400X. * * @param dev Device handle * @param[in] addr Address * @param[out] data Data * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_legacy_adf400x_read(struct bladerf *dev, uint8_t addr, uint32_t *data); /** * Write to the VCTCXO trim DAC. * * @param dev Device handle * @param[in] addr Register (should be 0x08) * @param[in] value Value * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_legacy_vctcxo_trim_dac_write(struct bladerf *dev, uint8_t addr, uint16_t value); /** * Read a IQ gain correction value * * @param dev Device handle * @param[in] ch Channel * @param[out] value On success, updated with phase correction value * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_legacy_get_iq_gain_correction(struct bladerf *dev, bladerf_channel ch, int16_t *value); /** * Read a IQ phase correction value * * @param dev Device handle * @param[in] ch Channel * @param[out] value On success, updated with phase correction value * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_legacy_get_iq_phase_correction(struct bladerf *dev, bladerf_channel ch, int16_t *value); /** * Write an IQ gain correction value * * @param dev Device handle * @param[in] ch Channel * @param[in] value Correction value to write * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_legacy_set_iq_gain_correction(struct bladerf *dev, bladerf_channel ch, int16_t value); /** * Write an IQ phase correction value * * @param dev Device handle * @param[in] ch Channel * @param[in] value Correction value to write * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_legacy_set_iq_phase_correction(struct bladerf *dev, bladerf_channel ch, int16_t value); /** * Write a value to the XB-200's ADF4351 synthesizer * * @param dev Device handle * @param[in] value Write value * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_legacy_xb200_synth_write(struct bladerf *dev, uint32_t value); /** * Read from expanion GPIO * * @param dev Device handle * @param[out] value On success, updated with read value * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_legacy_expansion_gpio_read(struct bladerf *dev, uint32_t *val); /** * Write to expansion GPIO * * @param dev Device handle * @param[in[ mask Mask denoting bits to write * @param[in] value Value to write * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_legacy_expansion_gpio_write(struct bladerf *dev, uint32_t mask, uint32_t val); /** * Read from expansion GPIO direction register * * @param dev Device handle * @param[out] value On success, updated with read value * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_legacy_expansion_gpio_dir_read(struct bladerf *dev, uint32_t *val); /** * Write to expansion GPIO direction register * * @param dev Device handle * @param[in] mask Mask denoting bits to configure * @param[in] output '1' bit denotes an output, '0' bit denotes an input * * @return 0 on success, BLADERF_ERR_* code on error. */ int nios_legacy_expansion_gpio_dir_write(struct bladerf *dev, uint32_t mask, uint32_t outputs); /** * Read trigger register value * * @param dev Device handle * @param[in] ch Channel * @param[in] trigger Trigger to read from * @param[out] value On success, updated with register value * * * @return 0 on success, BLADERF_ERR_* code on error */ int nios_legacy_read_trigger(struct bladerf *dev, bladerf_channel ch, bladerf_trigger_signal trigger, uint8_t *value); /** * Write trigger register value * * @param dev Device handle * @param[in] ch Channel * @param[in] trigger Trigger to read * @param[in] value Value to write * * @return 0 on success, BLADERF_ERR_* code on error */ int nios_legacy_write_trigger(struct bladerf *dev, bladerf_channel ch, bladerf_trigger_signal trigger, uint8_t value); #endif bladeRF-2024.05/host/libraries/libbladeRF/src/backend/usb/usb.c000066400000000000000000001346551457144405000240320ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014-2017 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include #include #include #include "rel_assert.h" #include "log.h" #include "minmax.h" #include "conversions.h" #include "usb.h" #include "board/board.h" #include "backend/backend.h" #include "backend/backend_config.h" #include "backend/usb/usb.h" #include "driver/fx3_fw.h" #include "streaming/async.h" #include "helpers/version.h" #include "bladeRF.h" #include "nios_pkt_formats.h" #include "nios_legacy_access.h" #include "nios_access.h" #if ENABLE_USB_DEV_RESET_ON_OPEN bool bladerf_usb_reset_device_on_open = true; #endif static const struct usb_driver *usb_driver_list[] = BLADERF_USB_BACKEND_LIST; /* FW declaration of fn table declared at the end of this file */ const struct backend_fns backend_fns_usb_legacy; /* Vendor command wrapper to gets a 32-bit integer and supplies a wIndex */ static inline int vendor_cmd_int_windex(struct bladerf *dev, uint8_t cmd, uint16_t windex, int32_t *val) { struct bladerf_usb *usb = dev->backend_data; return usb->fn->control_transfer(usb->driver, USB_TARGET_DEVICE, USB_REQUEST_VENDOR, USB_DIR_DEVICE_TO_HOST, cmd, 0, windex, val, sizeof(uint32_t), CTRL_TIMEOUT_MS); } /* Vendor command wrapper to get a 32-bit integer and supplies wValue */ static inline int vendor_cmd_int_wvalue(struct bladerf *dev, uint8_t cmd, uint16_t wvalue, int32_t *val) { struct bladerf_usb *usb = dev->backend_data; return usb->fn->control_transfer(usb->driver, USB_TARGET_DEVICE, USB_REQUEST_VENDOR, USB_DIR_DEVICE_TO_HOST, cmd, wvalue, 0, val, sizeof(uint32_t), CTRL_TIMEOUT_MS); } /* Vendor command that gets/sets a 32-bit integer value */ static inline int vendor_cmd_int(struct bladerf *dev, uint8_t cmd, usb_direction dir, int32_t *val) { struct bladerf_usb *usb = dev->backend_data; return usb->fn->control_transfer(usb->driver, USB_TARGET_DEVICE, USB_REQUEST_VENDOR, dir, cmd, 0, 0, val, sizeof(int32_t), CTRL_TIMEOUT_MS); } static inline int change_setting(struct bladerf *dev, uint8_t setting) { int status; struct bladerf_usb *usb = dev->backend_data; log_verbose("Changing to USB alt setting %u\n", setting); status = usb->fn->change_setting(usb->driver, setting); if (status != 0) { log_debug("Failed to change setting: %s\n", bladerf_strerror(status)); } return status; } static int usb_is_fpga_configured(struct bladerf *dev) { int result = -1; int status; /* This environment variable provides a means to force libbladeRF to not * attempt to access the FPGA. * * This provides a workaround for the situation where a user did not remove * an FPGA in SPI flash prior to flashing new firmware and updating * libbladeRF. Specifically, this has proven to be a problem with pre-v0.0.1 * FPGA images, as they do not provide version readback functionality. */ if (getenv("BLADERF_FORCE_NO_FPGA_PRESENT")) { log_debug("Reporting no FPGA present - " "BLADERF_FORCE_NO_FPGA_PRESENT is set.\n"); return 0; } status = vendor_cmd_int(dev, BLADE_USB_CMD_QUERY_FPGA_STATUS, USB_DIR_DEVICE_TO_HOST, &result); if (status < 0) { return status; } else if (result == 0 || result == 1) { return result; } else { log_debug("Unexpected result from FPGA status query: %d\n", result); return BLADERF_ERR_UNEXPECTED; } } static int usb_set_fpga_protocol(struct bladerf *dev, backend_fpga_protocol fpga_protocol) { if (fpga_protocol == BACKEND_FPGA_PROTOCOL_NIOSII_LEGACY) { dev->backend = &backend_fns_usb_legacy; } else if (fpga_protocol == BACKEND_FPGA_PROTOCOL_NIOSII) { dev->backend = &backend_fns_usb; } else { log_error("Unknown FPGA protocol: %d\n", fpga_protocol); return BLADERF_ERR_INVAL; } return 0; } static bladerf_fpga_source usb_get_fpga_source(struct bladerf *dev) { int result = -1; int status; status = vendor_cmd_int(dev, BLADE_USB_CMD_QUERY_FPGA_SOURCE, USB_DIR_DEVICE_TO_HOST, &result); if (status < 0) { log_debug("%s: vendor_cmd_int returned %s\n", __FUNCTION__, bladerf_strerror(status)); return BLADERF_FPGA_SOURCE_UNKNOWN; } else if (0 == result || 1 == result || 2 == result) { return (bladerf_fpga_source)result; } else { log_debug("Unexpected result from FPGA source query: %d\n", result); return BLADERF_FPGA_SOURCE_UNKNOWN; } } /* After performing a flash operation, switch back to either RF_LINK or the * FPGA loader. */ static int restore_post_flash_setting(struct bladerf *dev) { int fpga_loaded = usb_is_fpga_configured(dev); int status; if (fpga_loaded < 0) { status = fpga_loaded; log_debug("Failed to determine if FPGA is loaded (%d)\n", fpga_loaded); } else if (fpga_loaded) { status = change_setting(dev, USB_IF_RF_LINK); } else { status = change_setting(dev, USB_IF_CONFIG); } if (status < 0) { log_debug("Failed to restore alt setting: %s\n", bladerf_strerror(status)); } return status; } static bool usb_matches(bladerf_backend backend) { return backend == BLADERF_BACKEND_ANY || backend == BLADERF_BACKEND_LINUX || backend == BLADERF_BACKEND_LIBUSB || backend == BLADERF_BACKEND_CYPRESS; } static int usb_probe(backend_probe_target probe_target, struct bladerf_devinfo_list *info_list) { int status; size_t i; for (i = status = 0; i < ARRAY_SIZE(usb_driver_list); i++) { status = usb_driver_list[i]->fn->probe(probe_target, info_list); } return status; } static void usb_close(struct bladerf *dev) { int status; struct bladerf_usb *usb = dev->backend_data; if (usb != NULL) { /* It seems we need to switch back to our NULL interface before closing, * or else our device doesn't close upon exit in OSX and then fails to * re-open cleanly */ status = usb->fn->change_setting(usb->driver, USB_IF_NULL); if (status != 0) { log_error("Failed to switch to NULL interface: %s\n", bladerf_strerror(status)); } usb->fn->close(usb->driver); free(usb); dev->backend_data = NULL; } } static int usb_is_fw_ready(struct bladerf *dev) { int status; int result; status = vendor_cmd_int(dev, BLADE_USB_CMD_QUERY_DEVICE_READY, USB_DIR_DEVICE_TO_HOST, &result); if (status < 0) { return status; } else if (result == 0 || result == 1) { return result; } else { log_debug("Unexpected result from firmware status query: %d\n", result); return BLADERF_ERR_UNEXPECTED; } } static int usb_get_handle(struct bladerf *dev, void **handle) { struct bladerf_usb *usb = dev->backend_data; int status; status = usb->fn->get_handle(usb->driver, handle); return status; } static int usb_get_fw_version(struct bladerf *dev, struct bladerf_version *version) { struct bladerf_usb *usb = dev->backend_data; int status; status = usb->fn->get_string_descriptor(usb->driver, BLADE_USB_STR_INDEX_FW_VER, (unsigned char *)version->describe, BLADERF_VERSION_STR_MAX); if (status == 0) { status = str2version(version->describe, version); } else { log_warning("Failed to retrieve firmware version. This may be due " "to an old firmware version that does not support " "this request. A firmware update via the bootloader is " "required.\n\n"); status = BLADERF_ERR_UPDATE_FW; } return status; } static int usb_get_fpga_version(struct bladerf *dev, struct bladerf_version *version) { int status; status = change_setting(dev, USB_IF_RF_LINK); if (status < 0) { return status; } /* Read and store FPGA version info. This is only possible after * we've entered RF link mode. * * The legacy mode is used here since we can't yet determine if * the FPGA is capable of using the newer packet formats. */ return nios_legacy_get_fpga_version(dev, version); } static int usb_open(struct bladerf *dev, struct bladerf_devinfo *info) { int status; size_t i; struct bladerf_usb *usb; usb = malloc(sizeof(*usb)); if (usb == NULL) { return BLADERF_ERR_MEM; } /* Try each matching usb driver */ for (i = 0; i < ARRAY_SIZE(usb_driver_list); i++) { if (info->backend == BLADERF_BACKEND_ANY || usb_driver_list[i]->id == info->backend) { usb->fn = usb_driver_list[i]->fn; status = usb->fn->open(&usb->driver, info, &dev->ident); if (status == 0) { break; } else if (status == BLADERF_ERR_NODEV) { continue; } else { free(usb); return status; } } } /* If no usb driver was found */ if (i == ARRAY_SIZE(usb_driver_list)) { free(usb); return BLADERF_ERR_NODEV; } /* Default to legacy-mode access until we determine the FPGA is * capable of handling newer request formats */ dev->backend = &backend_fns_usb_legacy; dev->backend_data = usb; /* Just out of paranoia, put the device into a known state */ status = change_setting(dev, USB_IF_NULL); if (status < 0) { log_debug("Failed to switch to USB_IF_NULL\n"); goto error; } error: if (status != 0) { usb_close(dev); } return status; } static int usb_get_vid_pid(struct bladerf *dev, uint16_t *vid, uint16_t *pid) { struct bladerf_usb *usb = dev->backend_data; return usb->fn->get_vid_pid(usb->driver, vid, pid); } static int usb_get_flash_id(struct bladerf *dev, uint8_t *mid, uint8_t *did) { int status; int result; status = vendor_cmd_int(dev, BLADE_USB_CMD_QUERY_FLASH_ID, USB_DIR_DEVICE_TO_HOST, &result); if (status < 0) { log_debug("Could not read flash manufacturer ID and/or device ID. %s.\n", bladerf_strerror(status)); } else { *did = result & 0xFF; *mid = (result >> 8) & 0xFF; } return status; } static int begin_fpga_programming(struct bladerf *dev) { int result; int status = vendor_cmd_int(dev, BLADE_USB_CMD_BEGIN_PROG, USB_DIR_DEVICE_TO_HOST, &result); if (status != 0) { return status; } else if (result != 0) { log_debug("Startg fpga programming, result = %d\n", result); return BLADERF_ERR_UNEXPECTED; } else { return 0; } } static int usb_load_fpga(struct bladerf *dev, const uint8_t *image, size_t image_size) { struct bladerf_usb *usb = dev->backend_data; unsigned int wait_count; const unsigned int timeout_ms = (3 * CTRL_TIMEOUT_MS); int status; /* Switch to the FPGA configuration interface */ status = change_setting(dev, USB_IF_CONFIG); if(status < 0) { log_debug("Failed to switch to FPGA config setting: %s\n", bladerf_strerror(status)); return status; } /* Begin programming */ status = begin_fpga_programming(dev); if (status < 0) { log_debug("Failed to initiate FPGA programming: %s\n", bladerf_strerror(status)); return status; } /* Send the file down */ assert(image_size <= UINT32_MAX); status = usb->fn->bulk_transfer(usb->driver, PERIPHERAL_EP_OUT, (void *)image, (uint32_t)image_size, timeout_ms); if (status < 0) { log_debug("Failed to write FPGA bitstream to FPGA: %s\n", bladerf_strerror(status)); return status; } /* Poll FPGA status to determine if programming was a success */ wait_count = 10; status = 0; while (wait_count > 0 && status == 0) { status = usb_is_fpga_configured(dev); if (status == 1) { break; } usleep(200000); wait_count--; } /* Failed to determine if FPGA is loaded */ if (status < 0) { log_debug("Failed to determine if FPGA is loaded: %s\n", bladerf_strerror(status)); return status; } else if (wait_count == 0 && status != 0) { log_debug("Timeout while waiting for FPGA configuration status\n"); return BLADERF_ERR_TIMEOUT; } return 0; } static inline int perform_erase(struct bladerf *dev, uint16_t block) { int status, erase_ret; struct bladerf_usb *usb = dev->backend_data; status = usb->fn->control_transfer(usb->driver, USB_TARGET_DEVICE, USB_REQUEST_VENDOR, USB_DIR_DEVICE_TO_HOST, BLADE_USB_CMD_FLASH_ERASE, 0, block, &erase_ret, sizeof(erase_ret), CTRL_TIMEOUT_MS); return status; } static int usb_erase_flash_blocks(struct bladerf *dev, uint32_t eb, uint16_t count) { int status, restore_status; uint16_t i; status = change_setting(dev, USB_IF_SPI_FLASH); if (status != 0) { return status; } log_info("Erasing %u block%s starting at block %u\n", count, 1 == count ? "" : "s", eb); for (i = 0; i < count; i++) { log_info("Erasing block %u (%u%%)...%c", eb + i, (i + 1) == count ? 100 : 100 * i / count, (i + 1) == count ? '\n' : '\r'); status = perform_erase(dev, eb + i); if (status != 0) { log_debug("Failed to erase block %u: %s\n", eb + i, bladerf_strerror(status)); goto error; } } log_info("Done erasing %u block%s\n", count, 1 == count ? "" : "s"); error: restore_status = restore_post_flash_setting(dev); return status != 0 ? status : restore_status; } static inline int read_page(struct bladerf *dev, uint8_t read_operation, uint16_t page, uint8_t *buf) { struct bladerf_usb *usb = dev->backend_data; bladerf_dev_speed usb_speed; int status; int32_t op_status; uint16_t read_size; uint16_t offset; uint8_t request; if (usb->fn->get_speed(usb->driver, &usb_speed) != 0) { log_debug("Error getting USB speed in %s\n", __FUNCTION__); return BLADERF_ERR_UNEXPECTED; } if (usb_speed == BLADERF_DEVICE_SPEED_SUPER) { read_size = dev->flash_arch->psize_bytes; } else if (usb_speed == BLADERF_DEVICE_SPEED_HIGH) { read_size = 64; } else { log_debug("Encountered unknown USB speed in %s\n", __FUNCTION__); return BLADERF_ERR_UNEXPECTED; } if (read_operation == BLADE_USB_CMD_FLASH_READ || read_operation == BLADE_USB_CMD_READ_OTP) { status = vendor_cmd_int_windex(dev, read_operation, page, &op_status); if (status != 0) { return status; } else if (op_status != 0) { log_error("Firmware page read (op=%d) failed at page %u: %d\n", read_operation, page, op_status); return BLADERF_ERR_UNEXPECTED; } /* Both of these operations require a read from the FW's page buffer */ request = BLADE_USB_CMD_READ_PAGE_BUFFER; } else if (read_operation == BLADE_USB_CMD_READ_CAL_CACHE) { request = read_operation; } else { assert(!"Bug - invalid read_operation value"); return BLADERF_ERR_UNEXPECTED; } /* Retrieve data from the firmware page buffer */ for (offset = 0; offset < dev->flash_arch->psize_bytes; offset += read_size) { status = usb->fn->control_transfer(usb->driver, USB_TARGET_DEVICE, USB_REQUEST_VENDOR, USB_DIR_DEVICE_TO_HOST, request, 0, offset, /* in bytes */ buf + offset, read_size, CTRL_TIMEOUT_MS); if(status < 0) { log_debug("Failed to read page buffer at offset 0x%02x: %s\n", offset, bladerf_strerror(status)); return status; } } return 0; } static int usb_read_flash_pages(struct bladerf *dev, uint8_t *buf, uint32_t page_u32, uint32_t count_u32) { int status; size_t n_read; uint16_t i; /* 16-bit control transfer fields are used for these. * The current bladeRF build only has a 4MiB flash, anyway. */ const uint16_t page = (uint16_t)page_u32; const uint16_t count = (uint16_t)count_u32; assert(page == page_u32); assert(count == count_u32); status = change_setting(dev, USB_IF_SPI_FLASH); if (status != 0) { return status; } log_info("Reading %u page%s starting at page %u\n", count, 1 == count ? "" : "s", page); for (n_read = i = 0; i < count; i++) { log_info("Reading page %u (%u%%)...%c", page + i, (i + 1) == count ? 100 : 100 * i / count, (i + 1) == count ? '\n' : '\r'); status = read_page(dev, BLADE_USB_CMD_FLASH_READ, page + i, buf + n_read); if (status != 0) { goto error; } n_read += dev->flash_arch->psize_bytes; } log_info("Done reading %u page%s\n", count, 1 == count ? "" : "s"); error: status = restore_post_flash_setting(dev); return status; } static int write_page(struct bladerf *dev, uint8_t write_operation, uint16_t page, const uint8_t *buf) { int status; int32_t commit_status; uint16_t offset; uint16_t write_size; struct bladerf_usb *usb = dev->backend_data; bladerf_dev_speed usb_speed; if (usb->fn->get_speed(usb->driver, &usb_speed) != 0) { log_debug("Error getting USB speed in %s\n", __FUNCTION__); return BLADERF_ERR_UNEXPECTED; } if (usb_speed == BLADERF_DEVICE_SPEED_SUPER) { write_size = dev->flash_arch->psize_bytes; } else if (usb_speed == BLADERF_DEVICE_SPEED_HIGH) { write_size = 64; } else { assert(!"BUG - unexpected device speed"); return BLADERF_ERR_UNEXPECTED; } /* Write the data to the firmware's page buffer. * Casting away the buffer's const-ness here is gross, but this buffer * will not be written to on an out transfer. */ for (offset = 0; offset < dev->flash_arch->psize_bytes; offset += write_size) { status = usb->fn->control_transfer(usb->driver, USB_TARGET_DEVICE, USB_REQUEST_VENDOR, USB_DIR_HOST_TO_DEVICE, BLADE_USB_CMD_WRITE_PAGE_BUFFER, 0, offset, (uint8_t*)&buf[offset], write_size, CTRL_TIMEOUT_MS); if(status < 0) { log_error("Failed to write page buffer at offset 0x%02x " "for page %u: %s\n", offset, page, bladerf_strerror(status)); return status; } } /* Commit the page to flash */ status = vendor_cmd_int_windex(dev, write_operation, page, &commit_status); if (status != 0) { log_error("Failed to commit page %u: %s\n", page, bladerf_strerror(status)); return status; } else if (commit_status != 0) { log_error("Failed to commit page %u, FW returned %d\n", page, commit_status); return BLADERF_ERR_UNEXPECTED; } return 0; } static int usb_write_flash_pages(struct bladerf *dev, const uint8_t *buf, uint32_t page_u32, uint32_t count_u32) { int status, restore_status; uint16_t i; size_t n_written; /* 16-bit control transfer fields are used for these. * The current bladeRF build only has a 4MiB flash, anyway. */ const uint16_t page = (uint16_t)page_u32; const uint16_t count = (uint16_t)count_u32; assert(page == page_u32); assert(count == count_u32); status = change_setting(dev, USB_IF_SPI_FLASH); if (status != 0) { return status; } log_info("Writing %u page%s starting at page %u\n", count, 1 == count ? "" : "s", page); n_written = 0; for (i = 0; i < count; i++) { log_info("Writing page %u (%u%%)...%c", page + i, (i + 1) == count ? 100 : 100 * i / count, (i + 1) == count ? '\n' : '\r'); status = write_page(dev, BLADE_USB_CMD_FLASH_WRITE, page + i, buf + n_written); if (status) { goto error; } n_written += dev->flash_arch->psize_bytes; } log_info("Done writing %u page%s\n", count, 1 == count ? "" : "s"); error: restore_status = restore_post_flash_setting(dev); if (status != 0) { return status; } else if (restore_status != 0) { return restore_status; } else { return 0; } } static int usb_device_reset(struct bladerf *dev) { struct bladerf_usb *usb = dev->backend_data; return usb->fn->control_transfer(usb->driver, USB_TARGET_DEVICE, USB_REQUEST_VENDOR, USB_DIR_HOST_TO_DEVICE, BLADE_USB_CMD_RESET, 0, 0, 0, 0, CTRL_TIMEOUT_MS); } static int usb_jump_to_bootloader(struct bladerf *dev) { struct bladerf_usb *usb = dev->backend_data; return usb->fn->control_transfer(usb->driver, USB_TARGET_DEVICE, USB_REQUEST_VENDOR, USB_DIR_HOST_TO_DEVICE, BLADE_USB_CMD_JUMP_TO_BOOTLOADER, 0, 0, 0, 0, CTRL_TIMEOUT_MS); } static int usb_get_cal(struct bladerf *dev, char *cal) { const uint16_t dummy_page = 0; int status, restore_status; assert(CAL_BUFFER_SIZE == dev->flash_arch->psize_bytes); status = change_setting(dev, USB_IF_SPI_FLASH); if (status) { return status; } status = read_page(dev, BLADE_USB_CMD_READ_CAL_CACHE, dummy_page, (uint8_t*)cal); restore_status = restore_post_flash_setting(dev); return status == 0 ? restore_status : status; } static int usb_get_otp(struct bladerf *dev, char *otp) { int status, restore_status; const uint16_t dummy_page = 0; status = change_setting(dev, USB_IF_SPI_FLASH); if (status) { return status; } status = read_page(dev, BLADE_USB_CMD_READ_OTP, dummy_page, (uint8_t*)otp); restore_status = restore_post_flash_setting(dev); return status == 0 ? restore_status : status; } static int usb_write_otp(struct bladerf *dev, char *otp) { int status, restore_status; const uint16_t dummy_page = 0; status = change_setting(dev, USB_IF_SPI_FLASH); if (status) { return status; } status = write_page(dev, BLADE_USB_CMD_WRITE_OTP, dummy_page, (uint8_t*)otp); restore_status = restore_post_flash_setting(dev); return status == 0 ? restore_status : status; } static int usb_lock_otp(struct bladerf *dev) { int status, restore_status, commit_status; status = change_setting(dev, USB_IF_SPI_FLASH); if (status) { return status; } status = vendor_cmd_int_windex(dev, BLADE_USB_CMD_LOCK_OTP, 0, &commit_status); if (commit_status != 0) { log_error("Failed to lock OTP, FW returned %d\n", commit_status); if (status == 0) status = commit_status; } restore_status = restore_post_flash_setting(dev); return status == 0 ? restore_status : status; } static int usb_get_device_speed(struct bladerf *dev, bladerf_dev_speed *speed) { struct bladerf_usb *usb = dev->backend_data; return usb->fn->get_speed(usb->driver, speed); } static int usb_set_firmware_loopback(struct bladerf *dev, bool enable) { int result; int status; status = vendor_cmd_int_wvalue(dev, BLADE_USB_CMD_SET_LOOPBACK, enable, &result); if (status != 0) { return status; } status = change_setting(dev, USB_IF_NULL); if (status == 0) { status = change_setting(dev, USB_IF_RF_LINK); } return status; } static int usb_get_firmware_loopback(struct bladerf *dev, bool *is_enabled) { int status, result; status = vendor_cmd_int(dev, BLADE_USB_CMD_GET_LOOPBACK, USB_DIR_DEVICE_TO_HOST, &result); if (status == 0) { *is_enabled = (result != 0); } return status; } static int usb_enable_module(struct bladerf *dev, bladerf_direction dir, bool enable) { int status; int32_t fx3_ret = -1; const uint16_t val = enable ? 1 : 0; const uint8_t cmd = (dir == BLADERF_RX) ? BLADE_USB_CMD_RF_RX : BLADE_USB_CMD_RF_TX; status = vendor_cmd_int_wvalue(dev, cmd, val, &fx3_ret); if (status != 0) { log_debug("Could not enable RF %s (%d): %s\n", (dir == BLADERF_RX) ? "RX" : "TX", status, bladerf_strerror(status)); } else if (fx3_ret != 0) { log_warning("FX3 reported error=0x%x when %s RF %s\n", fx3_ret, enable ? "enabling" : "disabling", (dir == BLADERF_RX) ? "RX" : "TX"); /* FIXME: Work around what seems to be a harmless failure. * It appears that in firmware or in the lib, we may be * attempting to disable an already disabled channel, or * enabling an already enabled channel. * * Further investigation required * * 0x44 corresponds to CY_U3P_ERROR_ALREADY_STARTED */ if (fx3_ret != 0x44) { status = BLADERF_ERR_UNEXPECTED; } } return status; } static int usb_init_stream(struct bladerf_stream *stream, size_t num_transfers) { struct bladerf_usb *usb = stream->dev->backend_data; return usb->fn->init_stream(usb->driver, stream, num_transfers); } static int usb_stream(struct bladerf_stream *stream, bladerf_channel_layout layout) { struct bladerf_usb *usb = stream->dev->backend_data; return usb->fn->stream(usb->driver, stream, layout); } int usb_submit_stream_buffer(struct bladerf_stream *stream, void *buffer, size_t *length, unsigned int timeout_ms, bool nonblock) { struct bladerf_usb *usb = stream->dev->backend_data; return usb->fn->submit_stream_buffer(usb->driver, stream, buffer, length, timeout_ms, nonblock); } static void usb_deinit_stream(struct bladerf_stream *stream) { struct bladerf_usb *usb = stream->dev->backend_data; usb->fn->deinit_stream(usb->driver, stream); } /* * Information about the boot image format and boot over USB can be found in * Cypress AN76405: EZ-USB (R) FX3 (TM) Boot Options: * http://www.cypress.com/?docID=49862 * * There's a request (bRequset = 0xc0) for the bootloader revision. * However, there doesn't appear to be any documented reason to check this and * behave differently depending upon the returned value. */ /* Command fields for FX3 firmware upload vendor requests */ #define FX3_BOOTLOADER_LOAD_BREQUEST 0xa0 #define FX3_BOOTLOADER_ADDR_WVALUE(addr) (HOST_TO_LE16(addr & 0xffff)) #define FX3_BOOTLOADER_ADDR_WINDEX(addr) (HOST_TO_LE16(((addr >> 16) & 0xffff))) #define FX3_BOOTLOADER_MAX_LOAD_LEN 4096 static int write_and_verify_fw_chunk(struct bladerf_usb *usb, uint32_t addr, uint8_t *data, uint32_t len, uint8_t *readback_buf) { int status; log_verbose("Writing %u bytes to bootloader @ 0x%08x\n", len, addr); status = usb->fn->control_transfer(usb->driver, USB_TARGET_DEVICE, USB_REQUEST_VENDOR, USB_DIR_HOST_TO_DEVICE, FX3_BOOTLOADER_LOAD_BREQUEST, FX3_BOOTLOADER_ADDR_WVALUE(addr), FX3_BOOTLOADER_ADDR_WINDEX(addr), data, len, CTRL_TIMEOUT_MS); if (status != 0) { log_debug("Failed to write FW chunk (%d)\n", status); return status; } log_verbose("Reading back %u bytes from bootloader @ 0x%08x\n", len, addr); status = usb->fn->control_transfer(usb->driver, USB_TARGET_DEVICE, USB_REQUEST_VENDOR, USB_DIR_DEVICE_TO_HOST, FX3_BOOTLOADER_LOAD_BREQUEST, FX3_BOOTLOADER_ADDR_WVALUE(addr), FX3_BOOTLOADER_ADDR_WINDEX(addr), readback_buf, len, CTRL_TIMEOUT_MS); if (status != 0) { log_debug("Failed to read back FW chunk (%d)\n", status); return status; } if (memcmp(data, readback_buf, len) != 0) { log_debug("Readback did match written data.\n"); status = BLADERF_ERR_UNEXPECTED; } return status; } static int execute_fw_from_bootloader(struct bladerf_usb *usb, uint32_t addr) { int status; status = usb->fn->control_transfer(usb->driver, USB_TARGET_DEVICE, USB_REQUEST_VENDOR, USB_DIR_HOST_TO_DEVICE, FX3_BOOTLOADER_LOAD_BREQUEST, FX3_BOOTLOADER_ADDR_WVALUE(addr), FX3_BOOTLOADER_ADDR_WINDEX(addr), NULL, 0, CTRL_TIMEOUT_MS); if (status != 0 && status != BLADERF_ERR_IO) { log_debug("Failed to exec firmware: %s\n:", bladerf_strerror(status)); } else if (status == BLADERF_ERR_IO) { /* The device might drop out from underneath us as it starts executing * the new firmware */ log_verbose("Device returned IO error due to FW boot.\n"); status = 0; } else { log_verbose("Booting new FW.\n"); } return status; } static int write_fw_to_bootloader(void *driver, struct fx3_firmware *fw) { int status = 0; uint32_t to_write; uint32_t data_len; uint32_t addr; uint8_t *data; bool got_section; uint8_t *readback = malloc(FX3_BOOTLOADER_MAX_LOAD_LEN); if (readback == NULL) { return BLADERF_ERR_MEM; } do { got_section = fx3_fw_next_section(fw, &addr, &data, &data_len); if (got_section) { /* data_len should never be zero, as fw->num_sections should NOT * include the terminating section in its count */ assert(data_len != 0); do { to_write = u32_min(data_len, FX3_BOOTLOADER_MAX_LOAD_LEN); status = write_and_verify_fw_chunk(driver, addr, data, to_write, readback); data_len -= to_write; addr += to_write; data += to_write; } while (data_len != 0 && status == 0); } } while (got_section && status == 0); if (status == 0) { status = execute_fw_from_bootloader(driver, fx3_fw_entry_point(fw)); } free(readback); return status; } static int usb_load_fw_from_bootloader(bladerf_backend backend, uint8_t bus, uint8_t addr, struct fx3_firmware *fw) { int status = 0; size_t i; struct bladerf_usb usb; for (i = 0; i < ARRAY_SIZE(usb_driver_list); i++) { if ((backend == BLADERF_BACKEND_ANY) || (usb_driver_list[i]->id == backend)) { usb.fn = usb_driver_list[i]->fn; status = usb.fn->open_bootloader(&usb.driver, bus, addr); if (status == 0) { status = write_fw_to_bootloader(&usb, fw); usb.fn->close_bootloader(usb.driver); break; } } } return status; } /* Default handlers for operations unsupported by the NIOS II legacy packet * format */ static int set_vctcxo_tamer_mode_unsupported(struct bladerf *dev, bladerf_vctcxo_tamer_mode mode) { log_debug("Operation not supported with legacy NIOS packet format.\n"); return BLADERF_ERR_UNSUPPORTED; } static int get_vctcxo_tamer_mode_unsupported(struct bladerf *dev, bladerf_vctcxo_tamer_mode *mode) { *mode = BLADERF_VCTCXO_TAMER_INVALID; log_debug("Operation not supported with legacy NIOS packet format.\n"); return BLADERF_ERR_UNSUPPORTED; } static int usb_read_fw_log(struct bladerf *dev, logger_entry *e) { int status; *e = LOG_EOF; status = vendor_cmd_int(dev, BLADE_USB_CMD_READ_LOG_ENTRY, USB_DIR_DEVICE_TO_HOST, (int32_t*) e); return status; } static int config_gpio_write(struct bladerf *dev, uint32_t val) { struct bladerf_usb *usb = dev->backend_data; bladerf_dev_speed usb_speed; if (usb->fn->get_speed(usb->driver, &usb_speed) != 0) { log_debug("Error getting USB speed in %s\n", __FUNCTION__); return BLADERF_ERR_UNEXPECTED; } /* If we're connected at HS, we need to use smaller DMA transfers */ if (usb_speed == BLADERF_DEVICE_SPEED_HIGH) { val |= BLADERF_GPIO_FEATURE_SMALL_DMA_XFER; } else if (usb_speed == BLADERF_DEVICE_SPEED_SUPER) { val &= ~BLADERF_GPIO_FEATURE_SMALL_DMA_XFER; } else { assert(!"Encountered unknown USB speed"); return BLADERF_ERR_UNEXPECTED; } return nios_config_write(dev, val); } static int set_agc_dc_correction_unsupported(struct bladerf *dev, int16_t q_max, int16_t i_max, int16_t q_mid, int16_t i_mid, int16_t q_low, int16_t i_low) { log_debug("Operation not supported with legacy NIOS packet format.\n"); return BLADERF_ERR_UNSUPPORTED; } static int legacy_config_gpio_write(struct bladerf *dev, uint32_t val) { struct bladerf_usb *usb = dev->backend_data; bladerf_dev_speed usb_speed; if (usb->fn->get_speed(usb->driver, &usb_speed) != 0) { log_debug("Error getting USB speed in %s\n", __FUNCTION__); return BLADERF_ERR_UNEXPECTED; } /* If we're connected at HS, we need to use smaller DMA transfers */ if (usb_speed == BLADERF_DEVICE_SPEED_HIGH) { val |= BLADERF_GPIO_FEATURE_SMALL_DMA_XFER; } else if (usb_speed == BLADERF_DEVICE_SPEED_SUPER) { val &= ~BLADERF_GPIO_FEATURE_SMALL_DMA_XFER; } else { assert(!"Encountered unknown USB speed"); return BLADERF_ERR_UNEXPECTED; } return nios_legacy_config_write(dev, val); } /* USB backend that used legacy format for communicating with NIOS II */ const struct backend_fns backend_fns_usb_legacy = { FIELD_INIT(.matches, usb_matches), FIELD_INIT(.probe, usb_probe), FIELD_INIT(.get_vid_pid, usb_get_vid_pid), FIELD_INIT(.get_flash_id, usb_get_flash_id), FIELD_INIT(.open, usb_open), FIELD_INIT(.set_fpga_protocol, usb_set_fpga_protocol), FIELD_INIT(.close, usb_close), FIELD_INIT(.is_fw_ready, usb_is_fw_ready), FIELD_INIT(.get_handle, usb_get_handle), FIELD_INIT(.load_fpga, usb_load_fpga), FIELD_INIT(.is_fpga_configured, usb_is_fpga_configured), FIELD_INIT(.get_fpga_source, usb_get_fpga_source), FIELD_INIT(.get_fw_version, usb_get_fw_version), FIELD_INIT(.get_fpga_version, usb_get_fpga_version), FIELD_INIT(.erase_flash_blocks, usb_erase_flash_blocks), FIELD_INIT(.read_flash_pages, usb_read_flash_pages), FIELD_INIT(.write_flash_pages, usb_write_flash_pages), FIELD_INIT(.device_reset, usb_device_reset), FIELD_INIT(.jump_to_bootloader, usb_jump_to_bootloader), FIELD_INIT(.get_cal, usb_get_cal), FIELD_INIT(.get_otp, usb_get_otp), FIELD_INIT(.write_otp, usb_write_otp), FIELD_INIT(.lock_otp, usb_lock_otp), FIELD_INIT(.get_device_speed, usb_get_device_speed), FIELD_INIT(.config_gpio_write, legacy_config_gpio_write), FIELD_INIT(.config_gpio_read, nios_legacy_config_read), FIELD_INIT(.expansion_gpio_write, nios_legacy_expansion_gpio_write), FIELD_INIT(.expansion_gpio_read, nios_legacy_expansion_gpio_read), FIELD_INIT(.expansion_gpio_dir_write, nios_legacy_expansion_gpio_dir_write), FIELD_INIT(.expansion_gpio_dir_read, nios_legacy_expansion_gpio_dir_read), FIELD_INIT(.set_iq_gain_correction, nios_legacy_set_iq_gain_correction), FIELD_INIT(.set_iq_phase_correction, nios_legacy_set_iq_phase_correction), FIELD_INIT(.get_iq_gain_correction, nios_legacy_get_iq_gain_correction), FIELD_INIT(.get_iq_phase_correction, nios_legacy_get_iq_phase_correction), FIELD_INIT(.set_agc_dc_correction, set_agc_dc_correction_unsupported), FIELD_INIT(.get_timestamp, nios_legacy_get_timestamp), FIELD_INIT(.si5338_write, nios_legacy_si5338_write), FIELD_INIT(.si5338_read, nios_legacy_si5338_read), FIELD_INIT(.lms_write, nios_legacy_lms6_write), FIELD_INIT(.lms_read, nios_legacy_lms6_read), FIELD_INIT(.ina219_write, nios_legacy_ina219_write), FIELD_INIT(.ina219_read, nios_legacy_ina219_read), FIELD_INIT(.ad9361_spi_write, nios_legacy_ad9361_spi_write), FIELD_INIT(.ad9361_spi_read, nios_legacy_ad9361_spi_read), FIELD_INIT(.adi_axi_write, nios_legacy_adi_axi_write), FIELD_INIT(.adi_axi_read, nios_legacy_adi_axi_read), FIELD_INIT(.rfic_command_write, nios_legacy_rfic_command_write), FIELD_INIT(.rfic_command_read, nios_legacy_rfic_command_read), FIELD_INIT(.rffe_control_write, nios_legacy_rffe_control_write), FIELD_INIT(.rffe_control_read, nios_legacy_rffe_control_read), FIELD_INIT(.rffe_fastlock_save, nios_legacy_rffe_fastlock_save), FIELD_INIT(.ad56x1_vctcxo_trim_dac_write, nios_legacy_ad56x1_vctcxo_trim_dac_write), FIELD_INIT(.ad56x1_vctcxo_trim_dac_read, nios_legacy_ad56x1_vctcxo_trim_dac_read), FIELD_INIT(.adf400x_write, nios_legacy_adf400x_write), FIELD_INIT(.adf400x_read, nios_legacy_adf400x_read), FIELD_INIT(.vctcxo_dac_write, nios_legacy_vctcxo_trim_dac_write), FIELD_INIT(.vctcxo_dac_read, nios_vctcxo_trim_dac_read), FIELD_INIT(.set_vctcxo_tamer_mode, set_vctcxo_tamer_mode_unsupported), FIELD_INIT(.get_vctcxo_tamer_mode, get_vctcxo_tamer_mode_unsupported), FIELD_INIT(.xb_spi, nios_legacy_xb200_synth_write), FIELD_INIT(.set_firmware_loopback, usb_set_firmware_loopback), FIELD_INIT(.get_firmware_loopback, usb_get_firmware_loopback), FIELD_INIT(.enable_module, usb_enable_module), FIELD_INIT(.init_stream, usb_init_stream), FIELD_INIT(.stream, usb_stream), FIELD_INIT(.submit_stream_buffer, usb_submit_stream_buffer), FIELD_INIT(.deinit_stream, usb_deinit_stream), FIELD_INIT(.retune, nios_retune), FIELD_INIT(.retune2, nios_retune2), FIELD_INIT(.load_fw_from_bootloader, usb_load_fw_from_bootloader), FIELD_INIT(.read_fw_log, usb_read_fw_log), FIELD_INIT(.read_trigger, nios_legacy_read_trigger), FIELD_INIT(.write_trigger, nios_legacy_write_trigger), FIELD_INIT(.name, "usb"), }; /* USB backend for use with FPGA supporting update NIOS II packet formats */ const struct backend_fns backend_fns_usb = { FIELD_INIT(.matches, usb_matches), FIELD_INIT(.probe, usb_probe), FIELD_INIT(.get_vid_pid, usb_get_vid_pid), FIELD_INIT(.get_flash_id, usb_get_flash_id), FIELD_INIT(.open, usb_open), FIELD_INIT(.set_fpga_protocol, usb_set_fpga_protocol), FIELD_INIT(.close, usb_close), FIELD_INIT(.is_fw_ready, usb_is_fw_ready), FIELD_INIT(.get_handle, usb_get_handle), FIELD_INIT(.load_fpga, usb_load_fpga), FIELD_INIT(.is_fpga_configured, usb_is_fpga_configured), FIELD_INIT(.get_fpga_source, usb_get_fpga_source), FIELD_INIT(.get_fw_version, usb_get_fw_version), FIELD_INIT(.get_fpga_version, usb_get_fpga_version), FIELD_INIT(.erase_flash_blocks, usb_erase_flash_blocks), FIELD_INIT(.read_flash_pages, usb_read_flash_pages), FIELD_INIT(.write_flash_pages, usb_write_flash_pages), FIELD_INIT(.device_reset, usb_device_reset), FIELD_INIT(.jump_to_bootloader, usb_jump_to_bootloader), FIELD_INIT(.get_cal, usb_get_cal), FIELD_INIT(.get_otp, usb_get_otp), FIELD_INIT(.write_otp, usb_write_otp), FIELD_INIT(.lock_otp, usb_lock_otp), FIELD_INIT(.get_device_speed, usb_get_device_speed), FIELD_INIT(.config_gpio_write, config_gpio_write), FIELD_INIT(.config_gpio_read, nios_config_read), FIELD_INIT(.expansion_gpio_write, nios_expansion_gpio_write), FIELD_INIT(.expansion_gpio_read, nios_expansion_gpio_read), FIELD_INIT(.expansion_gpio_dir_write, nios_expansion_gpio_dir_write), FIELD_INIT(.expansion_gpio_dir_read, nios_expansion_gpio_dir_read), FIELD_INIT(.set_iq_gain_correction, nios_set_iq_gain_correction), FIELD_INIT(.set_iq_phase_correction, nios_set_iq_phase_correction), FIELD_INIT(.get_iq_gain_correction, nios_get_iq_gain_correction), FIELD_INIT(.get_iq_phase_correction, nios_get_iq_phase_correction), FIELD_INIT(.set_agc_dc_correction, nios_set_agc_dc_correction), FIELD_INIT(.get_timestamp, nios_get_timestamp), FIELD_INIT(.si5338_write, nios_si5338_write), FIELD_INIT(.si5338_read, nios_si5338_read), FIELD_INIT(.lms_write, nios_lms6_write), FIELD_INIT(.lms_read, nios_lms6_read), FIELD_INIT(.ina219_write, nios_ina219_write), FIELD_INIT(.ina219_read, nios_ina219_read), FIELD_INIT(.ad9361_spi_write, nios_ad9361_spi_write), FIELD_INIT(.ad9361_spi_read, nios_ad9361_spi_read), FIELD_INIT(.adi_axi_write, nios_adi_axi_write), FIELD_INIT(.adi_axi_read, nios_adi_axi_read), FIELD_INIT(.wishbone_master_write, nios_wishbone_master_write), FIELD_INIT(.wishbone_master_read, nios_wishbone_master_read), FIELD_INIT(.rfic_command_write, nios_rfic_command_write), FIELD_INIT(.rfic_command_read, nios_rfic_command_read), FIELD_INIT(.rffe_control_write, nios_rffe_control_write), FIELD_INIT(.rffe_control_read, nios_rffe_control_read), FIELD_INIT(.rffe_fastlock_save, nios_rffe_fastlock_save), FIELD_INIT(.ad56x1_vctcxo_trim_dac_write, nios_ad56x1_vctcxo_trim_dac_write), FIELD_INIT(.ad56x1_vctcxo_trim_dac_read, nios_ad56x1_vctcxo_trim_dac_read), FIELD_INIT(.adf400x_write, nios_adf400x_write), FIELD_INIT(.adf400x_read, nios_adf400x_read), FIELD_INIT(.vctcxo_dac_write, nios_vctcxo_trim_dac_write), FIELD_INIT(.vctcxo_dac_read, nios_vctcxo_trim_dac_read), FIELD_INIT(.set_vctcxo_tamer_mode, nios_set_vctcxo_tamer_mode), FIELD_INIT(.get_vctcxo_tamer_mode, nios_get_vctcxo_tamer_mode), FIELD_INIT(.xb_spi, nios_xb200_synth_write), FIELD_INIT(.set_firmware_loopback, usb_set_firmware_loopback), FIELD_INIT(.get_firmware_loopback, usb_get_firmware_loopback), FIELD_INIT(.enable_module, usb_enable_module), FIELD_INIT(.init_stream, usb_init_stream), FIELD_INIT(.stream, usb_stream), FIELD_INIT(.submit_stream_buffer, usb_submit_stream_buffer), FIELD_INIT(.deinit_stream, usb_deinit_stream), FIELD_INIT(.retune, nios_retune), FIELD_INIT(.retune2, nios_retune2), FIELD_INIT(.load_fw_from_bootloader, usb_load_fw_from_bootloader), FIELD_INIT(.read_fw_log, usb_read_fw_log), FIELD_INIT(.read_trigger, nios_read_trigger), FIELD_INIT(.write_trigger, nios_write_trigger), FIELD_INIT(.name, "usb"), }; bladeRF-2024.05/host/libraries/libbladeRF/src/backend/usb/usb.h000066400000000000000000000113751457144405000240300ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014-2015 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef BACKEND_USB_H_ #define BACKEND_USB_H_ #include "host_config.h" #include "board/board.h" #if ENABLE_USB_DEV_RESET_ON_OPEN extern bool bladerf_usb_reset_device_on_open; #endif #ifndef SAMPLE_EP_IN #define SAMPLE_EP_IN 0x81 #endif #ifndef SAMPLE_EP_OUT #define SAMPLE_EP_OUT 0x01 #endif #ifndef PERIPHERAL_EP_IN #define PERIPHERAL_EP_IN 0x82 #endif #ifndef PERIPHERAL_EP_OUT #define PERIPHERAL_EP_OUT 0x02 #endif #ifndef PERIPHERAL_TIMEOUT_MS #define PERIPHERAL_TIMEOUT_MS 250 #endif /* Be careful when lowering this value. The control request for flash erase * operations take some time */ #ifndef CTRL_TIMEOUT_MS #define CTRL_TIMEOUT_MS 1000 #endif #ifndef BULK_TIMEOUT_MS #define BULK_TIMEOUT_MS 1000 #endif /* Size of a host<->FPGA message in BYTES */ #define USB_MSG_SIZE_SS 2048 #define USB_MSG_SIZE_HS 1024 typedef enum { USB_TARGET_DEVICE, USB_TARGET_INTERFACE, USB_TARGET_ENDPOINT, USB_TARGET_OTHER } usb_target; typedef enum { USB_REQUEST_STANDARD, USB_REQUEST_CLASS, USB_REQUEST_VENDOR } usb_request; typedef enum { USB_DIR_HOST_TO_DEVICE = 0x00, USB_DIR_DEVICE_TO_HOST = 0x80 } usb_direction; /** * USB backend driver function table * * All return values are expected to be 0 on success, or a BLADERF_ERR_* * value on failure */ struct usb_fns { int (*probe)(backend_probe_target probe_target, struct bladerf_devinfo_list *info_list); /* Populates the `driver` pointer with a handle for the specific USB driver. * `info_in` describes the device to open, and may contain wildcards. * On success, the driver should fill in `info_out` with the complete * details of the device. */ int (*open)(void **driver, struct bladerf_devinfo *info_in, struct bladerf_devinfo *info_out); void (*close)(void *driver); int (*get_vid_pid)(void *driver, uint16_t *vid, uint16_t *pid); int (*get_flash_id)(void *driver, uint8_t *mid, uint8_t *did); int (*get_handle)(void *driver, void **handle); int (*get_speed)(void *driver, bladerf_dev_speed *speed); int (*change_setting)(void *driver, uint8_t setting); int (*control_transfer)(void *driver, usb_target target_type, usb_request req_type, usb_direction direction, uint8_t request, uint16_t wvalue, uint16_t windex, void *buffer, uint32_t buffer_len, uint32_t timeout_ms); int (*bulk_transfer)(void *driver, uint8_t endpoint, void *buffer, uint32_t buffer_len, uint32_t timeout_ms); int (*get_string_descriptor)(void *driver, uint8_t index, void *buffer, uint32_t buffer_len); int (*init_stream)(void *driver, struct bladerf_stream *stream, size_t num_transfers); int (*stream)(void *driver, struct bladerf_stream *stream, bladerf_channel_layout layout); int (*submit_stream_buffer)(void *driver, struct bladerf_stream *stream, void *buffer, size_t *length, unsigned int timeout_ms, bool nonblock); int (*deinit_stream)(void *driver, struct bladerf_stream *stream); int (*open_bootloader)(void **driver, uint8_t bus, uint8_t addr); void (*close_bootloader)(void *driver); }; struct usb_driver { const struct usb_fns *fn; bladerf_backend id; }; struct bladerf_usb { const struct usb_fns *fn; void *driver; }; #endif bladeRF-2024.05/host/libraries/libbladeRF/src/bladerf.c000066400000000000000000001554021457144405000224510ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2013-2016 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include #include #include #include #include "log.h" #include "rel_assert.h" #define LOGGER_ID_STRING #include "logger_entry.h" #include "logger_id.h" #include "backend/backend.h" #include "backend/usb/usb.h" #include "board/board.h" #include "driver/fx3_fw.h" #include "streaming/async.h" #include "version.h" #include "expansion/xb100.h" #include "expansion/xb200.h" #include "expansion/xb300.h" #include "devinfo.h" #include "helpers/configfile.h" #include "helpers/file.h" #include "helpers/have_cap.h" #include "helpers/interleave.h" /******************************************************************************/ /* Private Function Declarations */ /******************************************************************************/ /** * Sets up the register configuration for oversample feature. * * @param dev Device handle * * @return 0 on success, value from \ref RETCODES list on failure */ int bladerf_set_oversample_register_config(struct bladerf *dev); /******************************************************************************/ /* Open / Close */ /******************************************************************************/ /* dev path becomes device specifier string (osmosdr-like) */ int bladerf_open(struct bladerf **dev, const char *dev_id) { struct bladerf_devinfo devinfo; int status; *dev = NULL; /* Populate dev-info from string */ status = str2devinfo(dev_id, &devinfo); if (!status) { status = bladerf_open_with_devinfo(dev, &devinfo); } return status; } int bladerf_open_with_devinfo(struct bladerf **opened_device, struct bladerf_devinfo *devinfo) { struct bladerf *dev; struct bladerf_devinfo any_device; unsigned int i; int status; if (devinfo == NULL) { bladerf_init_devinfo(&any_device); devinfo = &any_device; } *opened_device = NULL; dev = calloc(1, sizeof(struct bladerf)); if (dev == NULL) { return BLADERF_ERR_MEM; } /* Open backend */ status = backend_open(dev, devinfo); if (status != 0) { free(dev); return status; } /* Find matching board */ for (i = 0; i < bladerf_boards_len; i++) { if (bladerf_boards[i]->matches(dev)) { dev->board = bladerf_boards[i]; break; } } /* If no matching board was found */ if (i == bladerf_boards_len) { dev->backend->close(dev); free(dev); return BLADERF_ERR_NODEV; } MUTEX_INIT(&dev->lock); /* Open board */ status = dev->board->open(dev, devinfo); if (status < 0) { bladerf_close(dev); return status; } /* Load configuration file */ status = config_load_options_file(dev); if (status < 0) { bladerf_close(dev); return status; } *opened_device = dev; return 0; } int bladerf_get_devinfo(struct bladerf *dev, struct bladerf_devinfo *info) { if (dev) { MUTEX_LOCK(&dev->lock); memcpy(info, &dev->ident, sizeof(struct bladerf_devinfo)); MUTEX_UNLOCK(&dev->lock); return 0; } else { return BLADERF_ERR_INVAL; } } int bladerf_get_backendinfo(struct bladerf *dev, struct bladerf_backendinfo *info) { if (dev) { MUTEX_LOCK(&dev->lock); info->lock_count = 1; info->lock = &dev->lock; info->handle_count = 1; dev->backend->get_handle(dev, &info->handle); MUTEX_UNLOCK(&dev->lock); return 0; } else { return BLADERF_ERR_INVAL; } } void bladerf_close(struct bladerf *dev) { if (dev) { MUTEX_LOCK(&dev->lock); dev->board->close(dev); if (dev->backend) { dev->backend->close(dev); } MUTEX_UNLOCK(&dev->lock); free(dev); } } /******************************************************************************/ /* FX3 Firmware (common to bladerf1 and bladerf2) */ /******************************************************************************/ int bladerf_jump_to_bootloader(struct bladerf *dev) { int status; if (!dev->backend->jump_to_bootloader) { return BLADERF_ERR_UNSUPPORTED; } MUTEX_LOCK(&dev->lock); status = dev->backend->jump_to_bootloader(dev); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_get_bootloader_list(struct bladerf_devinfo **devices) { return probe(BACKEND_PROBE_FX3_BOOTLOADER, devices); } int bladerf_load_fw_from_bootloader(const char *device_identifier, bladerf_backend backend, uint8_t bus, uint8_t addr, const char *file) { int status; uint8_t *buf; size_t buf_len; struct fx3_firmware *fw = NULL; struct bladerf_devinfo devinfo; if (device_identifier == NULL) { bladerf_init_devinfo(&devinfo); devinfo.backend = backend; devinfo.usb_bus = bus; devinfo.usb_addr = addr; } else { status = str2devinfo(device_identifier, &devinfo); if (status != 0) { return status; } } status = file_read_buffer(file, &buf, &buf_len); if (status != 0) { return status; } status = fx3_fw_parse(&fw, buf, buf_len); free(buf); if (status != 0) { return status; } assert(fw != NULL); status = backend_load_fw_from_bootloader(devinfo.backend, devinfo.usb_bus, devinfo.usb_addr, fw); fx3_fw_free(fw); return status; } int bladerf_get_fw_log(struct bladerf *dev, const char *filename) { int status; FILE *f = NULL; logger_entry e; MUTEX_LOCK(&dev->lock); if (!have_cap(dev->board->get_capabilities(dev), BLADERF_CAP_READ_FW_LOG_ENTRY)) { struct bladerf_version fw_version; if (dev->board->get_fw_version(dev, &fw_version) == 0) { log_debug("FX3 FW v%s does not support log retrieval.\n", fw_version.describe); } status = BLADERF_ERR_UNSUPPORTED; goto error; } if (filename != NULL) { f = fopen(filename, "w"); if (f == NULL) { switch (errno) { case ENOENT: status = BLADERF_ERR_NO_FILE; break; case EACCES: status = BLADERF_ERR_PERMISSION; break; default: status = BLADERF_ERR_IO; break; } goto error; } } else { f = stdout; } do { status = dev->backend->read_fw_log(dev, &e); if (status != 0) { log_debug("Failed to read FW log: %s\n", bladerf_strerror(status)); goto error; } if (e == LOG_ERR) { fprintf(f, ",,\n"); } else if (e != LOG_EOF) { uint8_t file_id; uint16_t line; uint16_t data; const char *src_file; logger_entry_unpack(e, &file_id, &line, &data); src_file = logger_id_string(file_id); fprintf(f, "%s, %u, 0x%04x\n", src_file, line, data); } } while (e != LOG_EOF && e != LOG_ERR); error: MUTEX_UNLOCK(&dev->lock); if (f != NULL && f != stdout) { fclose(f); } return status; } /******************************************************************************/ /* Properties */ /******************************************************************************/ bladerf_dev_speed bladerf_device_speed(struct bladerf *dev) { bladerf_dev_speed speed; MUTEX_LOCK(&dev->lock); speed = dev->board->device_speed(dev); MUTEX_UNLOCK(&dev->lock); return speed; } int bladerf_get_serial(struct bladerf *dev, char *serial) { int status; MUTEX_LOCK(&dev->lock); /** TODO: add deprecation warning */ status = dev->board->get_serial(dev, serial); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_get_serial_struct(struct bladerf *dev, struct bladerf_serial *serial) { int status; MUTEX_LOCK(&dev->lock); char serialstr[sizeof(serial->serial)]; status = dev->board->get_serial(dev, serialstr); if (status >= 0) { strncpy(serial->serial, serialstr, sizeof(serial->serial)); serial->serial[sizeof(serial->serial)-1] = '\0'; } MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_get_fpga_size(struct bladerf *dev, bladerf_fpga_size *size) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->get_fpga_size(dev, size); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_get_fpga_bytes(struct bladerf *dev, size_t *size) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->get_fpga_bytes(dev, size); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_get_flash_size(struct bladerf *dev, uint32_t *size, bool *is_guess) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->get_flash_size(dev, size, is_guess); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_is_fpga_configured(struct bladerf *dev) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->is_fpga_configured(dev); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_get_fpga_source(struct bladerf *dev, bladerf_fpga_source *source) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->get_fpga_source(dev, source); MUTEX_UNLOCK(&dev->lock); return status; } const char *bladerf_get_board_name(struct bladerf *dev) { return dev->board->name; } size_t bladerf_get_channel_count(struct bladerf *dev, bladerf_direction dir) { return dev->board->get_channel_count(dev, dir); } /******************************************************************************/ /* Versions */ /******************************************************************************/ int bladerf_fpga_version(struct bladerf *dev, struct bladerf_version *version) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->get_fpga_version(dev, version); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_fw_version(struct bladerf *dev, struct bladerf_version *version) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->get_fw_version(dev, version); MUTEX_UNLOCK(&dev->lock); return status; } void bladerf_version(struct bladerf_version *version) { /* Sanity checks for version reporting mismatches */ #ifndef LIBBLADERF_API_VERSION #error LIBBLADERF_API_VERSION is missing #endif #if LIBBLADERF_VERSION_MAJOR != ((LIBBLADERF_API_VERSION >> 24) & 0xff) #error LIBBLADERF_API_VERSION: Major version mismatch #endif #if LIBBLADERF_VERSION_MINOR != ((LIBBLADERF_API_VERSION >> 16) & 0xff) #error LIBBLADERF_API_VERSION: Minor version mismatch #endif #if LIBBLADERF_VERSION_PATCH != ((LIBBLADERF_API_VERSION >> 8) & 0xff) #error LIBBLADERF_API_VERSION: Patch version mismatch #endif version->major = LIBBLADERF_VERSION_MAJOR; version->minor = LIBBLADERF_VERSION_MINOR; version->patch = LIBBLADERF_VERSION_PATCH; version->describe = LIBBLADERF_VERSION; } /******************************************************************************/ /* Enable/disable */ /******************************************************************************/ int bladerf_enable_module(struct bladerf *dev, bladerf_channel ch, bool enable) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->enable_module(dev, ch, enable); MUTEX_UNLOCK(&dev->lock); return status; } /******************************************************************************/ /* Gain */ /******************************************************************************/ int bladerf_set_gain(struct bladerf *dev, bladerf_channel ch, int gain) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->set_gain(dev, ch, gain); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_get_gain(struct bladerf *dev, bladerf_channel ch, int *gain) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->get_gain(dev, ch, gain); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_set_gain_mode(struct bladerf *dev, bladerf_channel ch, bladerf_gain_mode mode) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->set_gain_mode(dev, ch, mode); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_get_gain_mode(struct bladerf *dev, bladerf_channel ch, bladerf_gain_mode *mode) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->get_gain_mode(dev, ch, mode); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_get_gain_modes(struct bladerf *dev, bladerf_channel ch, struct bladerf_gain_modes const **modes) { return dev->board->get_gain_modes(dev, ch, modes); } int bladerf_get_gain_range(struct bladerf *dev, bladerf_channel ch, struct bladerf_range const **range) { return dev->board->get_gain_range(dev, ch, range); } int bladerf_set_gain_stage(struct bladerf *dev, bladerf_channel ch, const char *stage, bladerf_gain gain) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->set_gain_stage(dev, ch, stage, gain); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_get_gain_stage(struct bladerf *dev, bladerf_channel ch, const char *stage, bladerf_gain *gain) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->get_gain_stage(dev, ch, stage, gain); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_get_gain_stage_range(struct bladerf *dev, bladerf_channel ch, const char *stage, struct bladerf_range const **range) { return dev->board->get_gain_stage_range(dev, ch, stage, range); } int bladerf_get_gain_stages(struct bladerf *dev, bladerf_channel ch, const char **stages, size_t count) { return dev->board->get_gain_stages(dev, ch, stages, count); } /******************************************************************************/ /* Sample Rate */ /******************************************************************************/ int bladerf_set_sample_rate(struct bladerf *dev, bladerf_channel ch, bladerf_sample_rate rate, bladerf_sample_rate *actual) { int status; bladerf_feature feature = dev->feature; MUTEX_LOCK(&dev->lock); status = dev->board->set_sample_rate(dev, ch, rate, actual); MUTEX_UNLOCK(&dev->lock); /***************************************************** Sample rate assignments clear previous register values. We must reassign oversample register config for every set_samplerate(). *******************************************************/ if ((feature & BLADERF_FEATURE_OVERSAMPLE)) { status = bladerf_set_oversample_register_config(dev); if (status != 0) { log_error("Oversample register config failure\n"); } } return status; } int bladerf_get_sample_rate(struct bladerf *dev, bladerf_channel ch, bladerf_sample_rate *rate) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->get_sample_rate(dev, ch, rate); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_get_sample_rate_range(struct bladerf *dev, bladerf_channel ch, const struct bladerf_range **range) { return dev->board->get_sample_rate_range(dev, ch, range); } int bladerf_set_rational_sample_rate(struct bladerf *dev, bladerf_channel ch, struct bladerf_rational_rate *rate, struct bladerf_rational_rate *actual) { int status; bladerf_feature feature = dev->feature; MUTEX_LOCK(&dev->lock); status = dev->board->set_rational_sample_rate(dev, ch, rate, actual); MUTEX_UNLOCK(&dev->lock); /***************************************************** Register config for OVERSAMPLE operation Sample rate assignments clear previous register values. We must reassign for every set_samplerate(). Note: bladerf_set_rfic_register is mutex locked. Must be placed outside of a mutex lock like above. *******************************************************/ if ((feature & BLADERF_FEATURE_OVERSAMPLE)) { status = bladerf_set_oversample_register_config(dev); if (status != 0) { log_error("Oversample register config failure\n"); } } return status; } int bladerf_get_rational_sample_rate(struct bladerf *dev, bladerf_channel ch, struct bladerf_rational_rate *rate) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->get_rational_sample_rate(dev, ch, rate); MUTEX_UNLOCK(&dev->lock); return status; } /******************************************************************************/ /* Bandwidth */ /******************************************************************************/ int bladerf_set_bandwidth(struct bladerf *dev, bladerf_channel ch, bladerf_bandwidth bandwidth, bladerf_bandwidth *actual) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->set_bandwidth(dev, ch, bandwidth, actual); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_get_bandwidth(struct bladerf *dev, bladerf_channel ch, bladerf_bandwidth *bandwidth) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->get_bandwidth(dev, ch, bandwidth); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_get_bandwidth_range(struct bladerf *dev, bladerf_channel ch, const struct bladerf_range **range) { return dev->board->get_bandwidth_range(dev, ch, range); } /******************************************************************************/ /* Frequency */ /******************************************************************************/ int bladerf_set_frequency(struct bladerf *dev, bladerf_channel ch, bladerf_frequency frequency) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->set_frequency(dev, ch, frequency); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_get_frequency(struct bladerf *dev, bladerf_channel ch, bladerf_frequency *frequency) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->get_frequency(dev, ch, frequency); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_get_frequency_range(struct bladerf *dev, bladerf_channel ch, const struct bladerf_range **range) { return dev->board->get_frequency_range(dev, ch, range); } int bladerf_select_band(struct bladerf *dev, bladerf_channel ch, bladerf_frequency frequency) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->select_band(dev, ch, frequency); MUTEX_UNLOCK(&dev->lock); return status; } /******************************************************************************/ /* RF Ports*/ /******************************************************************************/ int bladerf_set_rf_port(struct bladerf *dev, bladerf_channel ch, const char *port) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->set_rf_port(dev, ch, port); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_get_rf_port(struct bladerf *dev, bladerf_channel ch, const char **port) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->get_rf_port(dev, ch, port); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_get_rf_ports(struct bladerf *dev, bladerf_channel ch, const char **ports, unsigned int count) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->get_rf_ports(dev, ch, ports, count); MUTEX_UNLOCK(&dev->lock); return status; } /******************************************************************************/ /* Scheduled Tuning */ /******************************************************************************/ int bladerf_get_quick_tune(struct bladerf *dev, bladerf_channel ch, struct bladerf_quick_tune *quick_tune) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->get_quick_tune(dev, ch, quick_tune); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_schedule_retune(struct bladerf *dev, bladerf_channel ch, bladerf_timestamp timestamp, bladerf_frequency frequency, struct bladerf_quick_tune *quick_tune) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->schedule_retune(dev, ch, timestamp, frequency, quick_tune); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_cancel_scheduled_retunes(struct bladerf *dev, bladerf_channel ch) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->cancel_scheduled_retunes(dev, ch); MUTEX_UNLOCK(&dev->lock); return status; } /******************************************************************************/ /* DC/Phase/Gain Correction */ /******************************************************************************/ int bladerf_get_correction(struct bladerf *dev, bladerf_channel ch, bladerf_correction corr, bladerf_correction_value *value) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->get_correction(dev, ch, corr, value); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_set_correction(struct bladerf *dev, bladerf_channel ch, bladerf_correction corr, bladerf_correction_value value) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->set_correction(dev, ch, corr, value); MUTEX_UNLOCK(&dev->lock); return status; } /******************************************************************************/ /* Trigger */ /******************************************************************************/ int bladerf_trigger_init(struct bladerf *dev, bladerf_channel ch, bladerf_trigger_signal signal, struct bladerf_trigger *trigger) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->trigger_init(dev, ch, signal, trigger); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_trigger_arm(struct bladerf *dev, const struct bladerf_trigger *trigger, bool arm, uint64_t resv1, uint64_t resv2) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->trigger_arm(dev, trigger, arm, resv1, resv2); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_trigger_fire(struct bladerf *dev, const struct bladerf_trigger *trigger) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->trigger_fire(dev, trigger); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_trigger_state(struct bladerf *dev, const struct bladerf_trigger *trigger, bool *is_armed, bool *has_fired, bool *fire_requested, uint64_t *reserved1, uint64_t *reserved2) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->trigger_state(dev, trigger, is_armed, has_fired, fire_requested, reserved1, reserved2); MUTEX_UNLOCK(&dev->lock); return status; } /******************************************************************************/ /* Streaming */ /******************************************************************************/ int bladerf_init_stream(struct bladerf_stream **stream, struct bladerf *dev, bladerf_stream_cb callback, void ***buffers, size_t num_buffers, bladerf_format format, size_t samples_per_buffer, size_t num_transfers, void *data) { int status; bladerf_sample_rate tx_samp_rate; bladerf_sample_rate rx_samp_rate; MUTEX_LOCK(&dev->lock); if (format == BLADERF_FORMAT_SC8_Q7 || format == BLADERF_FORMAT_SC8_Q7_META) { if (strcmp(bladerf_get_board_name(dev), "bladerf2") != 0) { log_error("bladeRF 2.0 required for 8bit format\n"); return BLADERF_ERR_UNSUPPORTED; } } status = dev->board->init_stream(stream, dev, callback, buffers, num_buffers, format, samples_per_buffer, num_transfers, data); dev->board->get_sample_rate(dev, BLADERF_MODULE_TX, &tx_samp_rate); if (tx_samp_rate) { if (tx_samp_rate < num_transfers * samples_per_buffer / (*stream)->transfer_timeout) { log_warning("TX samples may be dropped.\n"); log_warning("Condition to meet: samp_rate > num_transfers * samples_per_buffer / transfer_timeout\n"); } } dev->board->get_sample_rate(dev, BLADERF_MODULE_RX, &rx_samp_rate); if (rx_samp_rate) { if (rx_samp_rate < num_transfers * samples_per_buffer / (*stream)->transfer_timeout) { log_warning("RX samples may be dropped.\n"); log_warning("Condition to meet: samp_rate > num_transfers * samples_per_buffer / transfer_timeout\n"); } } MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_stream(struct bladerf_stream *stream, bladerf_channel_layout layout) { return stream->dev->board->stream(stream, layout); } int bladerf_submit_stream_buffer(struct bladerf_stream *stream, void *buffer, unsigned int timeout_ms) { return stream->dev->board->submit_stream_buffer(stream, buffer, timeout_ms, false); } int bladerf_submit_stream_buffer_nb(struct bladerf_stream *stream, void *buffer) { return stream->dev->board->submit_stream_buffer(stream, buffer, 0, true); } void bladerf_deinit_stream(struct bladerf_stream *stream) { if (stream) { stream->dev->board->deinit_stream(stream); } } int bladerf_set_stream_timeout(struct bladerf *dev, bladerf_direction dir, unsigned int timeout) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->set_stream_timeout(dev, dir, timeout); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_get_stream_timeout(struct bladerf *dev, bladerf_direction dir, unsigned int *timeout) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->get_stream_timeout(dev, dir, timeout); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_sync_config(struct bladerf *dev, bladerf_channel_layout layout, bladerf_format format, unsigned int num_buffers, unsigned int buffer_size, unsigned int num_transfers, unsigned int stream_timeout) { int status; MUTEX_LOCK(&dev->lock); if (format == BLADERF_FORMAT_SC8_Q7 || format == BLADERF_FORMAT_SC8_Q7_META) { if (strcmp(bladerf_get_board_name(dev), "bladerf2") != 0) { log_error("bladeRF 2.0 required for 8bit format\n"); return BLADERF_ERR_UNSUPPORTED; } } status = dev->board->sync_config(dev, layout, format, num_buffers, buffer_size, num_transfers, stream_timeout); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_sync_tx(struct bladerf *dev, void const *samples, unsigned int num_samples, struct bladerf_metadata *metadata, unsigned int timeout_ms) { return dev->board->sync_tx(dev, samples, num_samples, metadata, timeout_ms); } int bladerf_sync_rx(struct bladerf *dev, void *samples, unsigned int num_samples, struct bladerf_metadata *metadata, unsigned int timeout_ms) { return dev->board->sync_rx(dev, samples, num_samples, metadata, timeout_ms); } int bladerf_get_timestamp(struct bladerf *dev, bladerf_direction dir, bladerf_timestamp *timestamp) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->get_timestamp(dev, dir, timestamp); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_interleave_stream_buffer(bladerf_channel_layout layout, bladerf_format format, unsigned int buffer_size, void *samples) { return _interleave_interleave_buf(layout, format, buffer_size, samples); } int bladerf_deinterleave_stream_buffer(bladerf_channel_layout layout, bladerf_format format, unsigned int buffer_size, void *samples) { return _interleave_deinterleave_buf(layout, format, buffer_size, samples); } /******************************************************************************/ /* FPGA/Firmware Loading/Flashing */ /******************************************************************************/ int bladerf_load_fpga(struct bladerf *dev, const char *fpga_file) { uint8_t *buf = NULL; size_t buf_size; int status; status = file_read_buffer(fpga_file, &buf, &buf_size); if (status != 0) { goto exit; } status = dev->board->load_fpga(dev, buf, buf_size); exit: free(buf); return status; } int bladerf_flash_fpga(struct bladerf *dev, const char *fpga_file) { uint8_t *buf = NULL; size_t buf_size; int status; status = file_read_buffer(fpga_file, &buf, &buf_size); if (status != 0) { goto exit; } MUTEX_LOCK(&dev->lock); status = dev->board->flash_fpga(dev, buf, buf_size); MUTEX_UNLOCK(&dev->lock); exit: free(buf); return status; } int bladerf_erase_stored_fpga(struct bladerf *dev) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->erase_stored_fpga(dev); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_flash_firmware(struct bladerf *dev, const char *firmware_file) { uint8_t *buf = NULL; size_t buf_size; int status; status = file_read_buffer(firmware_file, &buf, &buf_size); if (status != 0) { goto exit; } MUTEX_LOCK(&dev->lock); status = dev->board->flash_firmware(dev, buf, buf_size); MUTEX_UNLOCK(&dev->lock); exit: free(buf); return status; } int bladerf_device_reset(struct bladerf *dev) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->device_reset(dev); MUTEX_UNLOCK(&dev->lock); return status; } /******************************************************************************/ /* Tuning mode */ /******************************************************************************/ int bladerf_set_tuning_mode(struct bladerf *dev, bladerf_tuning_mode mode) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->set_tuning_mode(dev, mode); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_get_tuning_mode(struct bladerf *dev, bladerf_tuning_mode *mode) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->get_tuning_mode(dev, mode); MUTEX_UNLOCK(&dev->lock); return status; } /******************************************************************************/ /* Loopback */ /******************************************************************************/ int bladerf_get_loopback_modes(struct bladerf *dev, struct bladerf_loopback_modes const **modes) { int status; status = dev->board->get_loopback_modes(dev, modes); return status; } bool bladerf_is_loopback_mode_supported(struct bladerf *dev, bladerf_loopback mode) { struct bladerf_loopback_modes modes; struct bladerf_loopback_modes const *modesptr = &modes; int i, count; count = bladerf_get_loopback_modes(dev, &modesptr); for (i = 0; i < count; ++i) { if (modesptr[i].mode == mode) { return true; } } return false; } int bladerf_set_loopback(struct bladerf *dev, bladerf_loopback l) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->set_loopback(dev, l); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_get_loopback(struct bladerf *dev, bladerf_loopback *l) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->get_loopback(dev, l); MUTEX_UNLOCK(&dev->lock); return status; } /******************************************************************************/ /* Sample RX FPGA Mux */ /******************************************************************************/ int bladerf_set_rx_mux(struct bladerf *dev, bladerf_rx_mux mux) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->set_rx_mux(dev, mux); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_get_rx_mux(struct bladerf *dev, bladerf_rx_mux *mux) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->get_rx_mux(dev, mux); MUTEX_UNLOCK(&dev->lock); return status; } /******************************************************************************/ /* Low-level VCTCXO Tamer Mode */ /******************************************************************************/ int bladerf_set_vctcxo_tamer_mode(struct bladerf *dev, bladerf_vctcxo_tamer_mode mode) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->set_vctcxo_tamer_mode(dev, mode); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_get_vctcxo_tamer_mode(struct bladerf *dev, bladerf_vctcxo_tamer_mode *mode) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->get_vctcxo_tamer_mode(dev, mode); MUTEX_UNLOCK(&dev->lock); return status; } /******************************************************************************/ /* Low-level VCTCXO Trim DAC access */ /******************************************************************************/ int bladerf_get_vctcxo_trim(struct bladerf *dev, uint16_t *trim) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->get_vctcxo_trim(dev, trim); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_trim_dac_read(struct bladerf *dev, uint16_t *trim) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->trim_dac_read(dev, trim); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_trim_dac_write(struct bladerf *dev, uint16_t trim) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->trim_dac_write(dev, trim); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_dac_read(struct bladerf *dev, uint16_t *trim) { return bladerf_trim_dac_read(dev, trim); } int bladerf_dac_write(struct bladerf *dev, uint16_t trim) { return bladerf_trim_dac_write(dev, trim); } /******************************************************************************/ /* Low-level Trigger control access */ /******************************************************************************/ int bladerf_read_trigger(struct bladerf *dev, bladerf_channel ch, bladerf_trigger_signal trigger, uint8_t *val) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->read_trigger(dev, ch, trigger, val); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_write_trigger(struct bladerf *dev, bladerf_channel ch, bladerf_trigger_signal trigger, uint8_t val) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->write_trigger(dev, ch, trigger, val); MUTEX_UNLOCK(&dev->lock); return status; } /******************************************************************************/ /* Low-level Wishbone Master access */ /******************************************************************************/ int bladerf_wishbone_master_read(struct bladerf *dev, uint32_t addr, uint32_t *data) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->wishbone_master_read(dev, addr, data); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_wishbone_master_write(struct bladerf *dev, uint32_t addr, uint32_t data) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->wishbone_master_write(dev, addr, data); MUTEX_UNLOCK(&dev->lock); return status; } /******************************************************************************/ /* Low-level Configuration GPIO access */ /******************************************************************************/ int bladerf_config_gpio_read(struct bladerf *dev, uint32_t *val) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->config_gpio_read(dev, val); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_config_gpio_write(struct bladerf *dev, uint32_t val) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->config_gpio_write(dev, val); MUTEX_UNLOCK(&dev->lock); return status; } /******************************************************************************/ /* Low-level SPI Flash access */ /******************************************************************************/ int bladerf_erase_flash(struct bladerf *dev, uint32_t erase_block, uint32_t count) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->erase_flash(dev, erase_block, count); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_erase_flash_bytes(struct bladerf *dev, uint32_t address, uint32_t length) { int status; uint32_t eb; uint32_t count; /* Make sure address is aligned to an erase block boundary */ if( (address % dev->flash_arch->ebsize_bytes) == 0 ) { /* Convert into units of flash pages */ eb = address / dev->flash_arch->ebsize_bytes; } else { log_error("Address or length not aligned on a flash page boundary.\n"); return BLADERF_ERR_INVAL; } /* Check for the case of erasing less than 1 erase block. * For example, the calibration data. If so, round up to 1 EB. * If erasing more than 1 EB worth of data, make sure the length * is aligned to an EB boundary. */ if( (length > 0) && (length < dev->flash_arch->ebsize_bytes) ) { count = 1; } else if ((length % dev->flash_arch->ebsize_bytes) == 0) { /* Convert into units of flash pages */ count = length / dev->flash_arch->ebsize_bytes; } else { log_error("Address or length not aligned on a flash page boundary.\n"); return BLADERF_ERR_INVAL; } status = bladerf_erase_flash(dev, eb, count); return status; } int bladerf_read_flash(struct bladerf *dev, uint8_t *buf, uint32_t page, uint32_t count) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->read_flash(dev, buf, page, count); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_read_flash_bytes(struct bladerf *dev, uint8_t *buf, uint32_t address, uint32_t length) { int status; uint32_t page; uint32_t count; /* Check alignment */ if( ((address % dev->flash_arch->psize_bytes) != 0) || ((length % dev->flash_arch->psize_bytes) != 0) ) { log_error("Address or length not aligned on a flash page boundary.\n"); return BLADERF_ERR_INVAL; } /* Convert into units of flash pages */ page = address / dev->flash_arch->psize_bytes; count = length / dev->flash_arch->psize_bytes; status = bladerf_read_flash(dev, buf, page, count); return status; } int bladerf_write_flash(struct bladerf *dev, const uint8_t *buf, uint32_t page, uint32_t count) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->write_flash(dev, buf, page, count); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_write_flash_bytes(struct bladerf *dev, const uint8_t *buf, uint32_t address, uint32_t length) { int status; uint32_t page; uint32_t count; /* Check alignment */ if( ((address % dev->flash_arch->psize_bytes) != 0) || ((length % dev->flash_arch->psize_bytes) != 0) ) { log_error("Address or length not aligned on a flash page boundary.\n"); return BLADERF_ERR_INVAL; } /* Convert address and length into units of flash pages */ page = address / dev->flash_arch->psize_bytes; count = length / dev->flash_arch->psize_bytes; status = bladerf_write_flash(dev, buf, page, count); return status; } int bladerf_read_otp(struct bladerf *dev, uint8_t *buf) { int status; MUTEX_LOCK(&dev->lock); status = dev->backend->get_otp(dev, (char *)buf); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_write_otp(struct bladerf *dev, uint8_t *buf) { int status; MUTEX_LOCK(&dev->lock); status = dev->backend->write_otp(dev, (char *)buf); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_lock_otp(struct bladerf *dev) { int status; MUTEX_LOCK(&dev->lock); status = dev->backend->lock_otp(dev); MUTEX_UNLOCK(&dev->lock); return status; } /******************************************************************************/ /* Helpers & Miscellaneous */ /******************************************************************************/ const char *bladerf_strerror(int error) { switch (error) { case BLADERF_ERR_UNEXPECTED: return "An unexpected error occurred"; case BLADERF_ERR_RANGE: return "Provided parameter was out of the allowable range"; case BLADERF_ERR_INVAL: return "Invalid operation or parameter"; case BLADERF_ERR_MEM: return "A memory allocation error occurred"; case BLADERF_ERR_IO: return "File or device I/O failure"; case BLADERF_ERR_TIMEOUT: return "Operation timed out"; case BLADERF_ERR_NODEV: return "No devices available"; case BLADERF_ERR_UNSUPPORTED: return "Operation not supported"; case BLADERF_ERR_MISALIGNED: return "Misaligned flash access"; case BLADERF_ERR_CHECKSUM: return "Invalid checksum"; case BLADERF_ERR_NO_FILE: return "File not found"; case BLADERF_ERR_UPDATE_FPGA: return "An FPGA update is required"; case BLADERF_ERR_UPDATE_FW: return "A firmware update is required"; case BLADERF_ERR_TIME_PAST: return "Requested timestamp is in the past"; case BLADERF_ERR_QUEUE_FULL: return "Could not enqueue data into full queue"; case BLADERF_ERR_FPGA_OP: return "An FPGA operation reported a failure"; case BLADERF_ERR_PERMISSION: return "Insufficient permissions for the requested operation"; case BLADERF_ERR_WOULD_BLOCK: return "The operation would block, but has been requested to be " "non-blocking"; case BLADERF_ERR_NOT_INIT: return "Insufficient initialization for the requested operation"; case 0: return "Success"; default: return "Unknown error code"; } } const char *bladerf_backend_str(bladerf_backend backend) { return backend2str(backend); } void bladerf_log_set_verbosity(bladerf_log_level level) { log_set_verbosity(level); #if defined(LOG_SYSLOG_ENABLED) log_debug("Log verbosity has been set to: %d", level); #endif } void bladerf_set_usb_reset_on_open(bool enabled) { #if ENABLE_USB_DEV_RESET_ON_OPEN bladerf_usb_reset_device_on_open = enabled; log_verbose("USB reset on open %s\n", enabled ? "enabled" : "disabled"); #else log_verbose("%s has no effect. " "ENABLE_USB_DEV_RESET_ON_OPEN not set at compile-time.\n", __FUNCTION__); #endif } /******************************************************************************/ /* Expansion board APIs */ /******************************************************************************/ int bladerf_expansion_attach(struct bladerf *dev, bladerf_xb xb) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->expansion_attach(dev, xb); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_expansion_get_attached(struct bladerf *dev, bladerf_xb *xb) { int status; MUTEX_LOCK(&dev->lock); status = dev->board->expansion_get_attached(dev, xb); MUTEX_UNLOCK(&dev->lock); return status; } /* XB100 */ int bladerf_expansion_gpio_read(struct bladerf *dev, uint32_t *val) { int status; MUTEX_LOCK(&dev->lock); status = xb100_gpio_read(dev, val); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_expansion_gpio_write(struct bladerf *dev, uint32_t val) { int status; MUTEX_LOCK(&dev->lock); status = xb100_gpio_write(dev, val); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_expansion_gpio_masked_write(struct bladerf *dev, uint32_t mask, uint32_t val) { int status; MUTEX_LOCK(&dev->lock); status = xb100_gpio_masked_write(dev, mask, val); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_expansion_gpio_dir_read(struct bladerf *dev, uint32_t *val) { int status; MUTEX_LOCK(&dev->lock); status = xb100_gpio_dir_read(dev, val); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_expansion_gpio_dir_write(struct bladerf *dev, uint32_t val) { int status; MUTEX_LOCK(&dev->lock); status = xb100_gpio_dir_write(dev, val); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_expansion_gpio_dir_masked_write(struct bladerf *dev, uint32_t mask, uint32_t val) { int status; MUTEX_LOCK(&dev->lock); status = xb100_gpio_dir_masked_write(dev, mask, val); MUTEX_UNLOCK(&dev->lock); return status; } /* XB200 */ int bladerf_xb200_set_filterbank(struct bladerf *dev, bladerf_channel ch, bladerf_xb200_filter filter) { int status; MUTEX_LOCK(&dev->lock); status = xb200_set_filterbank(dev, ch, filter); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_xb200_get_filterbank(struct bladerf *dev, bladerf_channel ch, bladerf_xb200_filter *filter) { int status; MUTEX_LOCK(&dev->lock); status = xb200_get_filterbank(dev, ch, filter); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_xb200_set_path(struct bladerf *dev, bladerf_channel ch, bladerf_xb200_path path) { int status; MUTEX_LOCK(&dev->lock); status = xb200_set_path(dev, ch, path); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_xb200_get_path(struct bladerf *dev, bladerf_channel ch, bladerf_xb200_path *path) { int status; MUTEX_LOCK(&dev->lock); status = xb200_get_path(dev, ch, path); MUTEX_UNLOCK(&dev->lock); return status; } /* XB300 */ int bladerf_xb300_set_trx(struct bladerf *dev, bladerf_xb300_trx trx) { int status; MUTEX_LOCK(&dev->lock); status = xb300_set_trx(dev, trx); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_xb300_get_trx(struct bladerf *dev, bladerf_xb300_trx *trx) { int status; MUTEX_LOCK(&dev->lock); status = xb300_get_trx(dev, trx); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_xb300_set_amplifier_enable(struct bladerf *dev, bladerf_xb300_amplifier amp, bool enable) { int status; MUTEX_LOCK(&dev->lock); status = xb300_set_amplifier_enable(dev, amp, enable); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_xb300_get_amplifier_enable(struct bladerf *dev, bladerf_xb300_amplifier amp, bool *enable) { int status; MUTEX_LOCK(&dev->lock); status = xb300_get_amplifier_enable(dev, amp, enable); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_xb300_get_output_power(struct bladerf *dev, float *val) { int status; MUTEX_LOCK(&dev->lock); status = xb300_get_output_power(dev, val); MUTEX_UNLOCK(&dev->lock); return status; } /******************************************************************************/ /* Features */ /******************************************************************************/ int bladerf_enable_feature(struct bladerf *dev, bladerf_feature feature, bool enable) { int status; MUTEX_LOCK(&dev->lock); status = 0; if(feature == BLADERF_FEATURE_DEFAULT) { dev->feature = 0; } else { if(feature == BLADERF_FEATURE_OVERSAMPLE) { if (strcmp(bladerf_get_board_name(dev), "bladerf2") != 0) { log_error("BladeRF2 required for OVERSAMPLE feature\n"); status = BLADERF_ERR_UNSUPPORTED; } } else { /* Unknown / Unsupported feature */ status = BLADERF_ERR_UNSUPPORTED; } if (status == 0) { if (enable) { dev->feature |= feature; } else { dev->feature &= ~feature; } } } MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_get_feature(struct bladerf *dev, bladerf_feature* feature) { MUTEX_LOCK(&dev->lock); *feature = dev->feature; MUTEX_UNLOCK(&dev->lock); return 0; } int bladerf_set_oversample_register_config(struct bladerf *dev) { const char *board_name; board_name = bladerf_get_board_name(dev); if (strcmp(board_name, "bladerf2") != 0) { log_error("Oversample register config only applicable\n" "for the bladeRF 2.0"); return BLADERF_ERR_UNSUPPORTED; } bladerf_set_rfic_register(dev,0x003,0x54); // OC Register /* TX Register Assignments */ bladerf_set_rfic_register(dev,0x02,0xc0); // TX Enable and Filter Control bladerf_set_rfic_register(dev,0xc2,0x9f); // TX BBF R1 bladerf_set_rfic_register(dev,0xc3,0x9f); // TX baseband filter R2 bladerf_set_rfic_register(dev,0xc4,0x9f); // TX baseband filter R3 bladerf_set_rfic_register(dev,0xc5,0x9f); // TX baseband filter R4 bladerf_set_rfic_register(dev,0xc6,0x9f); // TX baseband filter real pole word bladerf_set_rfic_register(dev,0xc7,0x00); // TX baseband filter C1 bladerf_set_rfic_register(dev,0xc8,0x00); // TX baseband filter C2 bladerf_set_rfic_register(dev,0xc9,0x00); // TX baseband filter real pole word /* RX Register Assignments */ // Gain and calibration bladerf_set_rfic_register(dev,0x1e0,0x00); // RX1 BBF R1A bladerf_set_rfic_register(dev,0x1e1,0x00); // RX2 BBF R1A bladerf_set_rfic_register(dev,0x1e2,0x00); // RX1 tune control bladerf_set_rfic_register(dev,0x1e3,0x00); // RX2 tune control bladerf_set_rfic_register(dev,0x1e4,0x00); // RX1 BBF R5 bladerf_set_rfic_register(dev,0x1e5,0x00); // RX2 BBF R5 bladerf_set_rfic_register(dev,0x1e6,0x00); // RX BBF R2346 // Miller and BBF caps bladerf_set_rfic_register(dev,0x1e7,0x00); // RX BBF C1 MSB bladerf_set_rfic_register(dev,0x1e8,0x00); // RX BBF C1 LSB bladerf_set_rfic_register(dev,0x1e9,0x00); // RX baseband filter real pole word bladerf_set_rfic_register(dev,0x1ea,0x00); bladerf_set_rfic_register(dev,0x1eb,0x00); bladerf_set_rfic_register(dev,0x1ec,0x00); bladerf_set_rfic_register(dev,0x1ed,0x00); bladerf_set_rfic_register(dev,0x1ee,0x00); bladerf_set_rfic_register(dev,0x1ef,0x00); // BIST and Data Port Test Config [D1:D0] "Must be 2’b00" bladerf_set_rfic_register(dev,0x3f6,0x03); return 0; }bladeRF-2024.05/host/libraries/libbladeRF/src/board/000077500000000000000000000000001457144405000217665ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF/src/board/bladerf1/000077500000000000000000000000001457144405000234465ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF/src/board/bladerf1/bladerf1.c000066400000000000000000003732761457144405000253140ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2017 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include #include #include "log.h" #include "conversions.h" #include "bladeRF.h" #include "board/board.h" #include "compatibility.h" #include "capabilities.h" #include "calibration.h" #include "flash.h" #include "driver/smb_clock.h" #include "driver/si5338.h" #include "driver/dac161s055.h" #include "driver/spi_flash.h" #include "driver/fpga_trigger.h" #include "lms.h" #include "nios_pkt_retune.h" #include "band_select.h" #include "backend/usb/usb.h" #include "backend/backend_config.h" #include "expansion/xb100.h" #include "expansion/xb200.h" #include "expansion/xb300.h" #include "streaming/async.h" #include "streaming/sync.h" #include "devinfo.h" #include "helpers/version.h" #include "helpers/file.h" #include "version.h" /****************************************************************************** * bladeRF1 board state * ******************************************************************************/ /* 1 TX, 1 RX */ #define NUM_MODULES 2 struct bladerf1_board_data { /* Board state */ enum { STATE_UNINITIALIZED, STATE_FIRMWARE_LOADED, STATE_FPGA_LOADED, STATE_INITIALIZED, } state; /* Bitmask of capabilities determined by version numbers */ uint64_t capabilities; /* Format currently being used with a module, or -1 if module is not used */ bladerf_format module_format[NUM_MODULES]; /* Which mode of operation we use for tuning */ bladerf_tuning_mode tuning_mode; /* Calibration data */ struct calibrations { struct dc_cal_tbl *dc_rx; struct dc_cal_tbl *dc_tx; } cal; uint16_t dac_trim; /* Board properties */ bladerf_fpga_size fpga_size; /* Data message size */ size_t msg_size; /* Version information */ struct bladerf_version fpga_version; struct bladerf_version fw_version; char fpga_version_str[BLADERF_VERSION_STR_MAX+1]; char fw_version_str[BLADERF_VERSION_STR_MAX+1]; /* Synchronous interface handles */ struct bladerf_sync sync[NUM_MODULES]; }; #define _CHECK_BOARD_STATE(_state, _locked) \ do { \ struct bladerf1_board_data *board_data = dev->board_data; \ if (board_data->state < _state) { \ log_error("Board state insufficient for operation " \ "(current \"%s\", requires \"%s\").\n", \ bladerf1_state_to_string[board_data->state], \ bladerf1_state_to_string[_state]); \ if (_locked) { \ MUTEX_UNLOCK(&dev->lock); \ } \ return BLADERF_ERR_NOT_INIT; \ } \ } while(0) #define CHECK_BOARD_STATE(_state) _CHECK_BOARD_STATE(_state, false) #define CHECK_BOARD_STATE_LOCKED(_state) _CHECK_BOARD_STATE(_state, true) #define __round_int(x) (x >= 0 ? (int)(x + 0.5) : (int)(x - 0.5)) #define __round_int64(x) (x >= 0 ? (int64_t)(x + 0.5) : (int64_t)(x - 0.5)) #define __scale(r, v) ((float)(v) / (r)->scale) #define __scale_int(r, v) (__round_int(__scale(r, v))) #define __scale_int64(r, v) (__round_int64(__scale(r, v))) #define __unscale(r, v) ((float)(v) * (r)->scale) #define __unscale_int(r, v) (__round_int(__unscale(r, v))) #define __unscale_int64(r, v) (__round_int64(__unscale(r, v))) /******************************************************************************/ /* Constants */ /******************************************************************************/ /* Board state to string map */ static const char *bladerf1_state_to_string[] = { [STATE_UNINITIALIZED] = "Uninitialized", [STATE_FIRMWARE_LOADED] = "Firmware Loaded", [STATE_FPGA_LOADED] = "FPGA Loaded", [STATE_INITIALIZED] = "Initialized", }; /* RX gain offset */ #define BLADERF1_RX_GAIN_OFFSET -6.0f /* Overall RX gain range */ static const struct bladerf_range bladerf1_rx_gain_range = { FIELD_INIT(.min, __round_int64(BLADERF_RXVGA1_GAIN_MIN + BLADERF_RXVGA2_GAIN_MIN + BLADERF1_RX_GAIN_OFFSET)), FIELD_INIT(.max, __round_int64(BLADERF_LNA_GAIN_MAX_DB + BLADERF_RXVGA1_GAIN_MAX + BLADERF_RXVGA2_GAIN_MAX + BLADERF1_RX_GAIN_OFFSET)), FIELD_INIT(.step, 1), FIELD_INIT(.scale, 1), }; /* TX gain offset: 60 dB system gain ~= 0 dBm output */ #define BLADERF1_TX_GAIN_OFFSET 52.0f /* Overall TX gain range */ static const struct bladerf_range bladerf1_tx_gain_range = { FIELD_INIT(.min, __round_int64(BLADERF_TXVGA1_GAIN_MIN + BLADERF_TXVGA2_GAIN_MIN + BLADERF1_TX_GAIN_OFFSET)), FIELD_INIT(.max, __round_int64(BLADERF_TXVGA1_GAIN_MAX + BLADERF_TXVGA2_GAIN_MAX + BLADERF1_TX_GAIN_OFFSET)), FIELD_INIT(.step, 1), FIELD_INIT(.scale, 1), }; /* RX gain modes */ static const struct bladerf_gain_modes bladerf1_rx_gain_modes[] = { { FIELD_INIT(.name, "automatic"), FIELD_INIT(.mode, BLADERF_GAIN_DEFAULT) }, { FIELD_INIT(.name, "manual"), FIELD_INIT(.mode, BLADERF_GAIN_MGC) }, }; struct bladerf_gain_stage_info { const char *name; struct bladerf_range range; }; /* RX gain stages */ static const struct bladerf_gain_stage_info bladerf1_rx_gain_stages[] = { { FIELD_INIT(.name, "lna"), FIELD_INIT(.range, { FIELD_INIT(.min, 0), FIELD_INIT(.max, BLADERF_LNA_GAIN_MAX_DB), FIELD_INIT(.step, 3), FIELD_INIT(.scale, 1), }), }, { FIELD_INIT(.name, "rxvga1"), FIELD_INIT(.range, { FIELD_INIT(.min, BLADERF_RXVGA1_GAIN_MIN), FIELD_INIT(.max, BLADERF_RXVGA1_GAIN_MAX), FIELD_INIT(.step, 1), FIELD_INIT(.scale, 1), }), }, { FIELD_INIT(.name, "rxvga2"), FIELD_INIT(.range, { FIELD_INIT(.min, BLADERF_RXVGA2_GAIN_MIN), FIELD_INIT(.max, BLADERF_RXVGA2_GAIN_MAX), FIELD_INIT(.step, 3), FIELD_INIT(.scale, 1), }), }, }; /* TX gain stages */ static const struct bladerf_gain_stage_info bladerf1_tx_gain_stages[] = { { FIELD_INIT(.name, "txvga1"), FIELD_INIT(.range, { FIELD_INIT(.min, BLADERF_TXVGA1_GAIN_MIN), FIELD_INIT(.max, BLADERF_TXVGA1_GAIN_MAX), FIELD_INIT(.step, 1), FIELD_INIT(.scale, 1), }), }, { FIELD_INIT(.name, "txvga2"), FIELD_INIT(.range, { FIELD_INIT(.min, BLADERF_TXVGA2_GAIN_MIN), FIELD_INIT(.max, BLADERF_TXVGA2_GAIN_MAX), FIELD_INIT(.step, 1), FIELD_INIT(.scale, 1), }), }, }; /* Sample Rate Range */ static const struct bladerf_range bladerf1_sample_rate_range = { FIELD_INIT(.min, BLADERF_SAMPLERATE_MIN), FIELD_INIT(.max, BLADERF_SAMPLERATE_REC_MAX), FIELD_INIT(.step, 1), FIELD_INIT(.scale, 1), }; /* Bandwidth Range */ static const struct bladerf_range bladerf1_bandwidth_range = { FIELD_INIT(.min, BLADERF_BANDWIDTH_MIN), FIELD_INIT(.max, BLADERF_BANDWIDTH_MAX), FIELD_INIT(.step, 1), FIELD_INIT(.scale, 1), }; /* Frequency Range */ static const struct bladerf_range bladerf1_frequency_range = { FIELD_INIT(.min, BLADERF_FREQUENCY_MIN), FIELD_INIT(.max, BLADERF_FREQUENCY_MAX), FIELD_INIT(.step, 1), FIELD_INIT(.scale, 1), }; static const struct bladerf_range bladerf1_xb200_frequency_range = { FIELD_INIT(.min, 0), FIELD_INIT(.max, BLADERF_FREQUENCY_MAX), FIELD_INIT(.step, 1), FIELD_INIT(.scale, 1), }; /* Loopback modes */ static const struct bladerf_loopback_modes bladerf1_loopback_modes[] = { { FIELD_INIT(.name, "none"), FIELD_INIT(.mode, BLADERF_LB_NONE) }, { FIELD_INIT(.name, "firmware"), FIELD_INIT(.mode, BLADERF_LB_FIRMWARE) }, { FIELD_INIT(.name, "bb_txlpf_rxvga2"), FIELD_INIT(.mode, BLADERF_LB_BB_TXLPF_RXVGA2) }, { FIELD_INIT(.name, "bb_txlpf_rxlpf"), FIELD_INIT(.mode, BLADERF_LB_BB_TXLPF_RXLPF) }, { FIELD_INIT(.name, "bb_txvga1_rxvga2"), FIELD_INIT(.mode, BLADERF_LB_BB_TXVGA1_RXVGA2) }, { FIELD_INIT(.name, "bb_txvga1_rxlpf"), FIELD_INIT(.mode, BLADERF_LB_BB_TXVGA1_RXLPF) }, { FIELD_INIT(.name, "rf_lna1"), FIELD_INIT(.mode, BLADERF_LB_RF_LNA1) }, { FIELD_INIT(.name, "rf_lna2"), FIELD_INIT(.mode, BLADERF_LB_RF_LNA2) }, { FIELD_INIT(.name, "rf_lna3"), FIELD_INIT(.mode, BLADERF_LB_RF_LNA3) }, }; /* RF ports */ struct bladerf_lms_port_name_map { const char *name; union { lms_lna rx_lna; lms_pa tx_pa; }; }; static const struct bladerf_lms_port_name_map bladerf1_rx_port_map[] = { { FIELD_INIT(.name, "none"), FIELD_INIT(.rx_lna, LNA_NONE), }, { FIELD_INIT(.name, "lna1"), FIELD_INIT(.rx_lna, LNA_1), }, { FIELD_INIT(.name, "lna2"), FIELD_INIT(.rx_lna, LNA_2), }, { FIELD_INIT(.name, "lna3"), FIELD_INIT(.rx_lna, LNA_3), }, }; static const struct bladerf_lms_port_name_map bladerf1_tx_port_map[] = { { FIELD_INIT(.name, "aux"), FIELD_INIT(.tx_pa, PA_AUX), }, { FIELD_INIT(.name, "pa1"), FIELD_INIT(.tx_pa, PA_1), }, { FIELD_INIT(.name, "pa2"), FIELD_INIT(.tx_pa, PA_2), }, { FIELD_INIT(.name, "none"), FIELD_INIT(.tx_pa, PA_NONE), }, }; /******************************************************************************/ /* Low-level Initialization */ /******************************************************************************/ static bladerf_tuning_mode tuning_get_default_mode(struct bladerf *dev) { struct bladerf1_board_data *board_data = dev->board_data; bladerf_tuning_mode mode; const char *env_var; if (have_cap(board_data->capabilities, BLADERF_CAP_FPGA_TUNING)) { mode = BLADERF_TUNING_MODE_FPGA; } else { mode = BLADERF_TUNING_MODE_HOST; } env_var = getenv("BLADERF_DEFAULT_TUNING_MODE"); if (env_var != NULL) { if (!strcasecmp("host", env_var)) { mode = BLADERF_TUNING_MODE_HOST; } else if (!strcasecmp("fpga", env_var)) { mode = BLADERF_TUNING_MODE_FPGA; /* Just a friendly reminder... */ if (!have_cap(board_data->capabilities, BLADERF_CAP_FPGA_TUNING)) { log_warning("The loaded FPGA version (%u.%u.%u) does not " "support the tuning mode being used to override " "the default.\n", board_data->fpga_version.major, board_data->fpga_version.minor, board_data->fpga_version.patch); } } else { log_debug("Invalid tuning mode override: %s\n", env_var); } } switch (mode) { case BLADERF_TUNING_MODE_HOST: log_debug("Default tuning mode: host\n"); break; case BLADERF_TUNING_MODE_FPGA: log_debug("Default tuning mode: FPGA\n"); break; default: assert(!"Bug encountered."); mode = BLADERF_TUNING_MODE_HOST; } return mode; } static int bladerf1_apply_lms_dc_cals(struct bladerf *dev) { struct bladerf1_board_data *board_data = dev->board_data; int status = 0; struct bladerf_lms_dc_cals cals; const bool have_rx = (board_data->cal.dc_rx != NULL); const bool have_tx = (board_data->cal.dc_tx != NULL); cals.lpf_tuning = -1; cals.tx_lpf_i = -1; cals.tx_lpf_q = -1; cals.rx_lpf_i = -1; cals.rx_lpf_q = -1; cals.dc_ref = -1; cals.rxvga2a_i = -1; cals.rxvga2a_q = -1; cals.rxvga2b_i = -1; cals.rxvga2b_q = -1; if (have_rx) { const struct bladerf_lms_dc_cals *reg_vals = &board_data->cal.dc_rx->reg_vals; cals.lpf_tuning = reg_vals->lpf_tuning; cals.rx_lpf_i = reg_vals->rx_lpf_i; cals.rx_lpf_q = reg_vals->rx_lpf_q; cals.dc_ref = reg_vals->dc_ref; cals.rxvga2a_i = reg_vals->rxvga2a_i; cals.rxvga2a_q = reg_vals->rxvga2a_q; cals.rxvga2b_i = reg_vals->rxvga2b_i; cals.rxvga2b_q = reg_vals->rxvga2b_q; log_verbose("Fetched register values from RX DC cal table.\n"); } if (have_tx) { const struct bladerf_lms_dc_cals *reg_vals = &board_data->cal.dc_tx->reg_vals; cals.tx_lpf_i = reg_vals->tx_lpf_i; cals.tx_lpf_q = reg_vals->tx_lpf_q; if (have_rx) { if (cals.lpf_tuning != reg_vals->lpf_tuning) { log_warning("LPF tuning mismatch in tables. " "RX=0x%04x, TX=0x%04x", cals.lpf_tuning, reg_vals->lpf_tuning); } } else { /* Have TX cal but no RX cal -- use the RX values that came along * for the ride when the TX table was generated */ cals.rx_lpf_i = reg_vals->rx_lpf_i; cals.rx_lpf_q = reg_vals->rx_lpf_q; cals.dc_ref = reg_vals->dc_ref; cals.rxvga2a_i = reg_vals->rxvga2a_i; cals.rxvga2a_q = reg_vals->rxvga2a_q; cals.rxvga2b_i = reg_vals->rxvga2b_i; cals.rxvga2b_q = reg_vals->rxvga2b_q; } log_verbose("Fetched register values from TX DC cal table.\n"); } /* No TX table was loaded, so load LMS TX register cals from the RX table, * if available */ if (have_rx && !have_tx) { const struct bladerf_lms_dc_cals *reg_vals = &board_data->cal.dc_rx->reg_vals; cals.tx_lpf_i = reg_vals->tx_lpf_i; cals.tx_lpf_q = reg_vals->tx_lpf_q; } if (have_rx || have_tx) { status = lms_set_dc_cals(dev, &cals); /* Force a re-tune so that we can apply the appropriate I/Q DC offset * values from our calibration table */ if (status == 0) { int rx_status = 0; int tx_status = 0; if (have_rx) { bladerf_frequency rx_f; rx_status = dev->board->get_frequency( dev, BLADERF_CHANNEL_RX(0), &rx_f); if (rx_status == 0) { rx_status = dev->board->set_frequency( dev, BLADERF_CHANNEL_RX(0), rx_f); } } if (have_tx) { bladerf_frequency rx_f; rx_status = dev->board->get_frequency( dev, BLADERF_CHANNEL_RX(0), &rx_f); if (rx_status == 0) { rx_status = dev->board->set_frequency( dev, BLADERF_CHANNEL_RX(0), rx_f); } } /* Report the first of any failures */ status = (rx_status == 0) ? tx_status : rx_status; if (status != 0) { return status; } } } return 0; } /** * Initialize device registers - required after power-up, but safe * to call multiple times after power-up (e.g., multiple close and reopens) */ static int bladerf1_initialize(struct bladerf *dev) { struct bladerf1_board_data *board_data = dev->board_data; struct bladerf_version required_fw_version; struct bladerf_version required_fpga_version; int status; uint32_t val; /* Read FPGA version */ status = dev->backend->get_fpga_version(dev, &board_data->fpga_version); if (status < 0) { log_debug("Failed to get FPGA version: %s\n", bladerf_strerror(status)); return status; } log_verbose("Read FPGA version: %s\n", board_data->fpga_version.describe); /* Determine FPGA capabilities */ board_data->capabilities |= bladerf1_get_fpga_capabilities(&board_data->fpga_version); log_verbose("Capability mask after FPGA load: 0x%016"PRIx64"\n", board_data->capabilities); if (getenv("BLADERF_FORCE_LEGACY_NIOS_PKT")) { board_data->capabilities &= ~BLADERF_CAP_PKT_HANDLER_FMT; log_verbose("Using legacy packet handler format due to env var\n"); } /* If the FPGA version check fails, just warn, but don't error out. * * If an error code caused this function to bail out, it would prevent a * user from being able to unload and reflash a bitstream being * "autoloaded" from SPI flash. */ status = version_check(&bladerf1_fw_compat_table, &bladerf1_fpga_compat_table, &board_data->fw_version, &board_data->fpga_version, &required_fw_version, &required_fpga_version); if (status < 0) { #if LOGGING_ENABLED if (status == BLADERF_ERR_UPDATE_FPGA) { log_warning("FPGA v%u.%u.%u was detected. Firmware v%u.%u.%u " "requires FPGA v%u.%u.%u or later. Please load a " "different FPGA version before continuing.\n\n", board_data->fpga_version.major, board_data->fpga_version.minor, board_data->fpga_version.patch, board_data->fw_version.major, board_data->fw_version.minor, board_data->fw_version.patch, required_fpga_version.major, required_fpga_version.minor, required_fpga_version.patch); } else if (status == BLADERF_ERR_UPDATE_FW) { log_warning("FPGA v%u.%u.%u was detected, which requires firmware " "v%u.%u.%u or later. The device firmware is currently " "v%u.%u.%u. Please upgrade the device firmware before " "continuing.\n\n", board_data->fpga_version.major, board_data->fpga_version.minor, board_data->fpga_version.patch, required_fw_version.major, required_fw_version.minor, required_fw_version.patch, board_data->fw_version.major, board_data->fw_version.minor, board_data->fw_version.patch); } #endif } /* Detect AGC FPGA bug and report warning */ if( have_cap(board_data->capabilities, BLADERF_CAP_AGC_DC_LUT) && version_fields_less_than(&board_data->fpga_version, 0, 8, 0) ) { log_warning("AGC commands for FPGA v%u.%u.%u are incompatible with " "this version of libbladeRF. Please update to FPGA " "v%u.%u.%u or newer to use AGC.\n", board_data->fpga_version.major, board_data->fpga_version.minor, board_data->fpga_version.patch, 0, 8, 0 ); } /* Set FPGA packet protocol */ if (have_cap(board_data->capabilities, BLADERF_CAP_PKT_HANDLER_FMT)) { status = dev->backend->set_fpga_protocol(dev, BACKEND_FPGA_PROTOCOL_NIOSII); } else { status = dev->backend->set_fpga_protocol(dev, BACKEND_FPGA_PROTOCOL_NIOSII_LEGACY); } if (status < 0) { log_error("Unable to set backend FPGA protocol: %d\n", status); return status; } /* Readback the GPIO values to see if they are default or already set */ status = dev->backend->config_gpio_read(dev, &val); if (status != 0) { log_debug("Failed to read GPIO config %s\n", bladerf_strerror(status)); return status; } if ((val & 0x7f) == 0) { log_verbose( "Default GPIO value found - initializing device\n" ); /* Set the GPIO pins to enable the LMS and select the low band */ status = dev->backend->config_gpio_write(dev, 0x57); if (status != 0) { return status; } /* Disable the front ends */ status = lms_enable_rffe(dev, BLADERF_CHANNEL_TX(0), false); if (status != 0) { return status; } status = lms_enable_rffe(dev, BLADERF_CHANNEL_RX(0), false); if (status != 0) { return status; } /* Set the internal LMS register to enable RX and TX */ status = LMS_WRITE(dev, 0x05, 0x3e); if (status != 0) { return status; } /* LMS FAQ: Improve TX spurious emission performance */ status = LMS_WRITE(dev, 0x47, 0x40); if (status != 0) { return status; } /* LMS FAQ: Improve ADC performance */ status = LMS_WRITE(dev, 0x59, 0x29); if (status != 0) { return status; } /* LMS FAQ: Common mode voltage for ADC */ status = LMS_WRITE(dev, 0x64, 0x36); if (status != 0) { return status; } /* LMS FAQ: Higher LNA Gain */ status = LMS_WRITE(dev, 0x79, 0x37); if (status != 0) { return status; } /* Power down DC calibration comparators until they are need, as they * have been shown to introduce undesirable artifacts into our signals. * (This is documented in the LMS6 FAQ). */ status = lms_set(dev, 0x3f, 0x80); /* TX LPF DC cal comparator */ if (status != 0) { return status; } status = lms_set(dev, 0x5f, 0x80); /* RX LPF DC cal comparator */ if (status != 0) { return status; } status = lms_set(dev, 0x6e, 0xc0); /* RXVGA2A/B DC cal comparators */ if (status != 0) { return status; } /* Configure charge pump current offsets */ status = lms_config_charge_pumps(dev, BLADERF_CHANNEL_TX(0)); if (status != 0) { return status; } status = lms_config_charge_pumps(dev, BLADERF_CHANNEL_RX(0)); if (status != 0) { return status; } /* Set a default samplerate */ status = si5338_set_sample_rate(dev, BLADERF_CHANNEL_TX(0), 1000000, NULL); if (status != 0) { return status; } status = si5338_set_sample_rate(dev, BLADERF_CHANNEL_RX(0), 1000000, NULL); if (status != 0) { return status; } board_data->tuning_mode = tuning_get_default_mode(dev); status = dev->board->set_frequency(dev, BLADERF_CHANNEL_TX(0), 2447000000U); if (status != 0) { return status; } status = dev->board->set_frequency(dev, BLADERF_CHANNEL_RX(0), 2484000000U); if (status != 0) { return status; } /* Set the calibrated VCTCXO DAC value */ status = dac161s055_write(dev, board_data->dac_trim); if (status != 0) { return status; } /* Set the default gain mode */ status = bladerf_set_gain_mode(dev, BLADERF_CHANNEL_RX(0), BLADERF_GAIN_DEFAULT); if (status != 0 && status != BLADERF_ERR_UNSUPPORTED) { return status; } } else { board_data->tuning_mode = tuning_get_default_mode(dev); } /* Check if we have an expansion board attached */ status = dev->board->expansion_get_attached(dev, &dev->xb); if (status != 0) { return status; } /* Update device state */ board_data->state = STATE_INITIALIZED; /* Set up LMS DC offset register calibration and initial IQ settings, * if any tables have been loaded already. * * This is done every time the device is opened (with an FPGA loaded), * as the user may change/update DC calibration tables without reloading the * FPGA. */ status = bladerf1_apply_lms_dc_cals(dev); if (status != 0) { return status; } return 0; } /****************************************************************************** * Generic Board Functions * ******************************************************************************/ /******************************************************************************/ /* Matches */ /******************************************************************************/ static bool bladerf1_matches(struct bladerf *dev) { uint16_t vid, pid; int status; status = dev->backend->get_vid_pid(dev, &vid, &pid); if (status < 0) { return false; } if (vid == USB_NUAND_VENDOR_ID && pid == USB_NUAND_BLADERF_PRODUCT_ID) { return true; } else if (vid == USB_NUAND_LEGACY_VENDOR_ID && pid == USB_NUAND_BLADERF_LEGACY_PRODUCT_ID) { return true; } return false; } /******************************************************************************/ /* Open/close */ /******************************************************************************/ static int bladerf1_open(struct bladerf *dev, struct bladerf_devinfo *devinfo) { struct bladerf1_board_data *board_data; struct bladerf_version required_fw_version; bladerf_dev_speed usb_speed; char filename[FILENAME_MAX]; char *full_path; int status; /* Allocate board data */ board_data = calloc(1, sizeof(struct bladerf1_board_data)); if (board_data == NULL) { return BLADERF_ERR_MEM; } dev->board_data = board_data; /* Allocate flash architecture */ dev->flash_arch = calloc(1, sizeof(struct bladerf_flash_arch)); if (dev->flash_arch == NULL) { return BLADERF_ERR_MEM; } /* Initialize board data */ board_data->fpga_version.describe = board_data->fpga_version_str; board_data->fw_version.describe = board_data->fw_version_str; board_data->module_format[BLADERF_RX] = -1; board_data->module_format[BLADERF_TX] = -1; dev->flash_arch->status = STATUS_FLASH_UNINITIALIZED; dev->flash_arch->manufacturer_id = 0x0; dev->flash_arch->device_id = 0x0; /* Read firmware version */ status = dev->backend->get_fw_version(dev, &board_data->fw_version); if (status < 0) { log_debug("Failed to get FW version: %s\n", bladerf_strerror(status)); return status; } log_verbose("Read Firmware version: %s\n", board_data->fw_version.describe); /* Update device state */ board_data->state = STATE_FIRMWARE_LOADED; /* Determine firmware capabilities */ board_data->capabilities |= bladerf1_get_fw_capabilities(&board_data->fw_version); log_verbose("Capability mask before FPGA load: 0x%016" PRIx64 "\n", board_data->capabilities); /* Wait until firmware is ready */ if (have_cap(board_data->capabilities, BLADERF_CAP_QUERY_DEVICE_READY)) { const unsigned int max_retries = 30; unsigned int i; int ready; for (i = 0; i < max_retries; i++) { ready = dev->backend->is_fw_ready(dev); if (ready != 1) { if (i == 0) { log_info("Waiting for device to become ready...\n"); } else { log_debug("Retry %02u/%02u.\n", i + 1, max_retries); } usleep(1000000); } else { break; } } if (i >= max_retries) { log_debug("Timed out while waiting for device.\n"); return BLADERF_ERR_TIMEOUT; } } else { log_info( "FX3 FW v%u.%u.%u does not support the \"device ready\" query.\n" "\tEnsure flash-autoloading completes before opening a device.\n" "\tUpgrade the FX3 firmware to avoid this message in the future.\n" "\n", board_data->fw_version.major, board_data->fw_version.minor, board_data->fw_version.patch); } /* Determine data message size */ status = dev->backend->get_device_speed(dev, &usb_speed); if (status < 0) { log_debug("Failed to get device speed: %s\n", bladerf_strerror(status)); return status; } switch (usb_speed) { case BLADERF_DEVICE_SPEED_SUPER: board_data->msg_size = USB_MSG_SIZE_SS; break; case BLADERF_DEVICE_SPEED_HIGH: board_data->msg_size = USB_MSG_SIZE_HS; break; default: log_error("Unsupported device speed: %d\n", usb_speed); return BLADERF_ERR_UNEXPECTED; } /* Verify that we have a sufficent firmware version before continuing. */ status = version_check_fw(&bladerf1_fw_compat_table, &board_data->fw_version, &required_fw_version); if (status != 0) { #ifdef LOGGING_ENABLED if (status == BLADERF_ERR_UPDATE_FW) { log_warning("Firmware v%u.%u.%u was detected. libbladeRF v%s " "requires firmware v%u.%u.%u or later. An upgrade via " "the bootloader is required.\n\n", board_data->fw_version.major, board_data->fw_version.minor, board_data->fw_version.patch, LIBBLADERF_VERSION, required_fw_version.major, required_fw_version.minor, required_fw_version.patch); } #endif return status; } /* Probe SPI flash architecture information */ if (have_cap(board_data->capabilities, BLADERF_CAP_FW_FLASH_ID)) { status = spi_flash_read_flash_id(dev, &dev->flash_arch->manufacturer_id, &dev->flash_arch->device_id); if (status < 0) { log_error("Failed to probe SPI flash ID information.\n"); } } else { log_debug("FX3 firmware v%u.%u.%u does not support SPI flash ID. A " "firmware update is recommended in order to probe the SPI " "flash ID information.\n", board_data->fw_version.major, board_data->fw_version.minor, board_data->fw_version.patch); } /* Decode SPI flash ID information to figure out its architecture. * We need to know a little about the flash architecture before we can * read anything from it, including FPGA size and other cal data. * If the firmware does not have the capability to get the flash ID, * sane defaults will be chosen. * * Not checking return code because it is irrelevant. */ spi_flash_decode_flash_architecture(dev, &board_data->fpga_size); /* VCTCXO trim and FPGA size are non-fatal indicators that we've * trashed the calibration region of flash. If these were made fatal, * we wouldn't be able to open the device to restore them. */ status = spi_flash_read_vctcxo_trim(dev, &board_data->dac_trim); if (status < 0) { log_warning("Failed to get VCTCXO trim value: %s\n", bladerf_strerror(status)); log_debug("Defaulting DAC trim to 0x8000.\n"); board_data->dac_trim = 0x8000; } status = spi_flash_read_fpga_size(dev, &board_data->fpga_size); if (status < 0) { log_warning("Failed to get FPGA size %s\n", bladerf_strerror(status)); } /* If the flash architecture could not be decoded earlier, try again now * that the FPGA size is known. */ if (dev->flash_arch->status != STATUS_SUCCESS) { status = spi_flash_decode_flash_architecture(dev, &board_data->fpga_size); if (status < 0) { log_debug("Assumptions were made about the SPI flash architecture! " "Flash commands may not function as expected.\n"); } } /* Skip further work if BLADERF_FORCE_NO_FPGA_PRESENT is set */ if (getenv("BLADERF_FORCE_NO_FPGA_PRESENT")) { log_debug("Skipping FPGA configuration and initialization - " "BLADERF_FORCE_NO_FPGA_PRESENT is set.\n"); return 0; } /* Check for possible mismatch between the USB device identification and * the board's own knowledge. We need this to be a non-fatal condition, * so that the problem can be fixed easily. */ if (board_data->fpga_size == BLADERF_FPGA_A4 || board_data->fpga_size == BLADERF_FPGA_A5 || board_data->fpga_size == BLADERF_FPGA_A9) { uint16_t vid, pid; log_critical("Device type mismatch! FPGA size %d is a bladeRF2 " "characteristic, but the USB PID indicates bladeRF1. " "Initialization cannot continue.\n", board_data->fpga_size); log_info("You must download firmware v2.2.0 or later from " "https://www.nuand.com/fx3/ and flash it (bladeRF-cli -f " "/path/to/bladeRF_fw.img) before using this device.\n"); status = dev->backend->get_vid_pid(dev, &vid, &pid); if (status < 0) { log_error("%s: get_vid_pid returned status %s\n", __FUNCTION__, bladerf_strerror(status)); } log_debug("vid_pid=%04x:%04x fpga_size=%d fw_version=%u.%u.%u\n", vid, pid, board_data->fpga_size, board_data->fw_version.major, board_data->fw_version.minor, board_data->fw_version.patch); log_warning("Skipping further initialization...\n"); return 0; } /* This will be set in initialize() after we can determine which * methods the FPGA supports (based upon version number). */ board_data->tuning_mode = BLADERF_TUNING_MODE_INVALID; /* Load any available calibration tables so that the LMS DC register * configurations may be loaded in initialize() */ snprintf(filename, sizeof(filename), "%s_dc_rx.tbl", dev->ident.serial); full_path = file_find(filename); if (full_path != NULL) { log_debug("Loading RX calibration image %s\n", full_path); dc_cal_tbl_image_load(dev, &board_data->cal.dc_rx, full_path); } free(full_path); full_path = NULL; snprintf(filename, sizeof(filename), "%s_dc_tx.tbl", dev->ident.serial); full_path = file_find(filename); if (full_path != NULL) { log_debug("Loading TX calibration image %s\n", full_path); dc_cal_tbl_image_load(dev, &board_data->cal.dc_tx, full_path); } free(full_path); full_path = NULL; status = dev->backend->is_fpga_configured(dev); if (status < 0) { return status; } else if (status == 1) { board_data->state = STATE_FPGA_LOADED; } else if (status != 1 && board_data->fpga_size == BLADERF_FPGA_UNKNOWN) { log_warning("Unknown FPGA size. Skipping FPGA configuration...\n"); log_warning("Skipping further initialization...\n"); return 0; } else if (status != 1) { /* Try searching for an FPGA in the config search path */ if (board_data->fpga_size == BLADERF_FPGA_40KLE) { full_path = file_find("hostedx40.rbf"); } else if (board_data->fpga_size == BLADERF_FPGA_115KLE) { full_path = file_find("hostedx115.rbf"); } else { log_error("Invalid FPGA size %d.\n", board_data->fpga_size); return BLADERF_ERR_UNEXPECTED; } if (full_path != NULL) { uint8_t *buf; size_t buf_size; log_debug("Loading FPGA from: %s\n", full_path); status = file_read_buffer(full_path, &buf, &buf_size); free(full_path); full_path = NULL; if (status != 0) { return status; } status = dev->backend->load_fpga(dev, buf, buf_size); if (status != 0) { log_warning("Failure loading FPGA: %s\n", bladerf_strerror(status)); return status; } board_data->state = STATE_FPGA_LOADED; } else { log_warning("FPGA bitstream file not found.\n"); log_warning("Skipping further initialization...\n"); return 0; } } /* Initialize the device before we try to interact with it. In the case * of an autoloaded FPGA, we need to ensure the clocks are all running * before we can try to cancel any scheduled retunes or else the NIOS * hangs. */ status = bladerf1_initialize(dev); if (status != 0) { return status; } if (have_cap(board_data->capabilities, BLADERF_CAP_SCHEDULED_RETUNE)) { /* Cancel any pending re-tunes that may have been left over as the * result of a user application crashing or forgetting to call * bladerf_close() */ status = dev->board->cancel_scheduled_retunes(dev, BLADERF_CHANNEL_RX(0)); if (status != 0) { log_warning("Failed to cancel any pending RX retunes: %s\n", bladerf_strerror(status)); return status; } status = dev->board->cancel_scheduled_retunes(dev, BLADERF_CHANNEL_TX(0)); if (status != 0) { log_warning("Failed to cancel any pending TX retunes: %s\n", bladerf_strerror(status)); return status; } } return 0; } static void bladerf1_close(struct bladerf *dev) { struct bladerf1_board_data *board_data = dev->board_data; struct bladerf_flash_arch *flash_arch = dev->flash_arch; int status; if (board_data) { sync_deinit(&board_data->sync[BLADERF_CHANNEL_RX(0)]); sync_deinit(&board_data->sync[BLADERF_CHANNEL_TX(0)]); status = dev->backend->is_fpga_configured(dev); if (status == 1 && have_cap(board_data->capabilities, BLADERF_CAP_SCHEDULED_RETUNE)) { /* We cancel schedule retunes here to avoid the device retuning * underneath the user, should they open it again in the future. * * This is intended to help developers avoid a situation during * debugging where they schedule "far" into the future, but then * hit a case where their program abort or exit early. If we didn't * cancel these scheduled retunes, they could potentially be left * wondering why the device is starting up or "unexpectedly" * switching to a different frequency later. */ dev->board->cancel_scheduled_retunes(dev, BLADERF_CHANNEL_RX(0)); dev->board->cancel_scheduled_retunes(dev, BLADERF_CHANNEL_TX(0)); } /* Detach expansion board */ switch (dev->xb) { case BLADERF_XB_100: xb100_detach(dev); break; case BLADERF_XB_200: xb200_detach(dev); break; case BLADERF_XB_300: xb300_detach(dev); break; default: break; } dc_cal_tbl_free(&board_data->cal.dc_rx); dc_cal_tbl_free(&board_data->cal.dc_tx); free(board_data); board_data = NULL; } if( flash_arch != NULL ) { free(flash_arch); flash_arch = NULL; } } /******************************************************************************/ /* Properties */ /******************************************************************************/ static bladerf_dev_speed bladerf1_device_speed(struct bladerf *dev) { int status; bladerf_dev_speed usb_speed; CHECK_BOARD_STATE(STATE_FIRMWARE_LOADED); status = dev->backend->get_device_speed(dev, &usb_speed); if (status < 0) { return BLADERF_DEVICE_SPEED_UNKNOWN; } return usb_speed; } static int bladerf1_get_serial(struct bladerf *dev, char *serial) { strcpy(serial, dev->ident.serial); return 0; } static int bladerf1_get_fpga_size(struct bladerf *dev, bladerf_fpga_size *size) { struct bladerf1_board_data *board_data = dev->board_data; CHECK_BOARD_STATE(STATE_FIRMWARE_LOADED); *size = board_data->fpga_size; return 0; } static int bladerf1_get_fpga_bytes(struct bladerf *dev, size_t *size) { struct bladerf1_board_data *board_data = dev->board_data; CHECK_BOARD_STATE(STATE_FIRMWARE_LOADED); switch (board_data->fpga_size) { case BLADERF_FPGA_40KLE: *size = 1191788; break; case BLADERF_FPGA_115KLE: *size = 3571462; break; default: log_debug("%s: unknown fpga_size: %x\n", board_data->fpga_size); return BLADERF_ERR_INVAL; } return 0; } static int bladerf1_get_flash_size(struct bladerf *dev, uint32_t *size, bool *is_guess) { CHECK_BOARD_STATE(STATE_FIRMWARE_LOADED); *size = dev->flash_arch->tsize_bytes; *is_guess = (dev->flash_arch->status != STATUS_SUCCESS); return 0; } static int bladerf1_is_fpga_configured(struct bladerf *dev) { CHECK_BOARD_STATE(STATE_FIRMWARE_LOADED); return dev->backend->is_fpga_configured(dev); } static int bladerf1_get_fpga_source(struct bladerf *dev, bladerf_fpga_source *source) { CHECK_BOARD_STATE(STATE_FIRMWARE_LOADED); struct bladerf1_board_data *board_data = dev->board_data; if (!have_cap(board_data->capabilities, BLADERF_CAP_FW_FPGA_SOURCE)) { log_debug("%s: not supported by firmware\n", __FUNCTION__); *source = BLADERF_FPGA_SOURCE_UNKNOWN; return BLADERF_ERR_UNSUPPORTED; } *source = dev->backend->get_fpga_source(dev); return 0; } static uint64_t bladerf1_get_capabilities(struct bladerf *dev) { struct bladerf1_board_data *board_data = dev->board_data; return board_data->capabilities; } static size_t bladerf1_get_channel_count(struct bladerf *dev, bladerf_direction dir) { return 1; } /******************************************************************************/ /* Versions */ /******************************************************************************/ static int bladerf1_get_fpga_version(struct bladerf *dev, struct bladerf_version *version) { struct bladerf1_board_data *board_data = dev->board_data; CHECK_BOARD_STATE(STATE_FPGA_LOADED); memcpy(version, &board_data->fpga_version, sizeof(*version)); return 0; } static int bladerf1_get_fw_version(struct bladerf *dev, struct bladerf_version *version) { struct bladerf1_board_data *board_data = dev->board_data; CHECK_BOARD_STATE(STATE_FIRMWARE_LOADED); memcpy(version, &board_data->fw_version, sizeof(*version)); return 0; } /******************************************************************************/ /* Enable/disable */ /******************************************************************************/ static int perform_format_deconfig(struct bladerf *dev, bladerf_direction dir); static int bladerf1_enable_module(struct bladerf *dev, bladerf_channel ch, bool enable) { struct bladerf1_board_data *board_data = dev->board_data; int status; CHECK_BOARD_STATE(STATE_INITIALIZED); if (ch != BLADERF_CHANNEL_RX(0) && ch != BLADERF_CHANNEL_TX(0)) { return BLADERF_ERR_INVAL; } log_debug("Enable channel: %s - %s\n", BLADERF_CHANNEL_IS_TX(ch) ? "TX" : "RX", enable ? "True" : "False"); if (enable == false) { sync_deinit(&board_data->sync[ch]); perform_format_deconfig( dev, BLADERF_CHANNEL_IS_TX(ch) ? BLADERF_TX : BLADERF_RX); } lms_enable_rffe(dev, ch, enable); status = dev->backend->enable_module( dev, BLADERF_CHANNEL_IS_TX(ch) ? BLADERF_TX : BLADERF_RX, enable); return status; } /******************************************************************************/ /* Gain */ /******************************************************************************/ /** * @brief applies overall_gain to stage_gain, within the range max * * "Moves" gain from overall_gain to stage_gain, ensuring that overall_gain * doesn't go negative and stage_gain doesn't exceed range->max. * * @param[in] range The range for stage_gain * @param stage_gain The stage gain * @param overall_gain The overall gain */ static void _apportion_gain(struct bladerf_range const *range, int *stage_gain, int *overall_gain) { int headroom = __unscale_int(range, range->max) - *stage_gain; int allotment = (headroom >= *overall_gain) ? *overall_gain : headroom; /* Enforce step size */ while (0 != (allotment % range->step)) { --allotment; } *stage_gain += allotment; *overall_gain -= allotment; } static bladerf_lna_gain _convert_gain_to_lna_gain(int gain) { if (gain >= BLADERF_LNA_GAIN_MAX_DB) { return BLADERF_LNA_GAIN_MAX; } if (gain >= BLADERF_LNA_GAIN_MID_DB) { return BLADERF_LNA_GAIN_MID; } return BLADERF_LNA_GAIN_BYPASS; } static int _convert_lna_gain_to_gain(bladerf_lna_gain lnagain) { switch (lnagain) { case BLADERF_LNA_GAIN_MAX: return BLADERF_LNA_GAIN_MAX_DB; case BLADERF_LNA_GAIN_MID: return BLADERF_LNA_GAIN_MID_DB; case BLADERF_LNA_GAIN_BYPASS: return 0; default: return -1; } } static int bladerf1_get_gain_stage_range(struct bladerf *dev, bladerf_channel ch, char const *stage, struct bladerf_range const **range) { struct bladerf_gain_stage_info const *stage_infos; unsigned int stage_infos_len; size_t i; if (NULL == stage) { log_error("%s: stage is null\n", __FUNCTION__); return BLADERF_ERR_INVAL; } if (BLADERF_CHANNEL_IS_TX(ch)) { stage_infos = bladerf1_tx_gain_stages; stage_infos_len = ARRAY_SIZE(bladerf1_tx_gain_stages); } else { stage_infos = bladerf1_rx_gain_stages; stage_infos_len = ARRAY_SIZE(bladerf1_rx_gain_stages); } for (i = 0; i < stage_infos_len; i++) { if (strcmp(stage_infos[i].name, stage) == 0) { if (NULL != range) { *range = &(stage_infos[i].range); } return 0; } } return BLADERF_ERR_INVAL; } static int set_rx_gain(struct bladerf *dev, int gain) { struct bladerf_range const *lna_range = NULL; struct bladerf_range const *rxvga1_range = NULL; struct bladerf_range const *rxvga2_range = NULL; bladerf_channel const ch = BLADERF_CHANNEL_RX(0); int orig_gain = gain; int lna, rxvga1, rxvga2; int status; // get our gain stage ranges! status = bladerf1_get_gain_stage_range(dev, ch, "lna", &lna_range); if (status < 0) { return status; } status = bladerf1_get_gain_stage_range(dev, ch, "rxvga1", &rxvga1_range); if (status < 0) { return status; } status = bladerf1_get_gain_stage_range(dev, ch, "rxvga2", &rxvga2_range); if (status < 0) { return status; } lna = __unscale_int(lna_range, lna_range->min); rxvga1 = __unscale_int(rxvga1_range, rxvga1_range->min); rxvga2 = __unscale_int(rxvga2_range, rxvga2_range->min); // offset gain so that we can use it as a counter when apportioning gain gain -= __round_int((BLADERF1_RX_GAIN_OFFSET + __unscale_int(lna_range, lna_range->min) + __unscale_int(rxvga1_range, rxvga1_range->min) + __unscale_int(rxvga2_range, rxvga2_range->min))); // apportion some gain to RXLNA (but only half of it for now) _apportion_gain(lna_range, &lna, &gain); if (lna > BLADERF_LNA_GAIN_MID_DB) { gain += (lna - BLADERF_LNA_GAIN_MID_DB); lna -= (lna - BLADERF_LNA_GAIN_MID_DB); } // apportion gain to RXVGA1 _apportion_gain(rxvga1_range, &rxvga1, &gain); // apportion more gain to RXLNA _apportion_gain(lna_range, &lna, &gain); // apportion gain to RXVGA2 _apportion_gain(rxvga2_range, &rxvga2, &gain); // if we still have remaining gain, it's because rxvga2 has a step size of // 3 dB. Steal a few dB from rxvga1... if (gain > 0 && rxvga1 >= __unscale_int(rxvga1_range, rxvga1_range->max)) { rxvga1 -= __unscale_int(rxvga2_range, rxvga2_range->step); gain += __unscale_int(rxvga2_range, rxvga2_range->step); _apportion_gain(rxvga2_range, &rxvga2, &gain); _apportion_gain(rxvga1_range, &rxvga1, &gain); } // verification if (gain != 0) { log_warning("%s: unable to achieve requested gain %d (missed by %d)\n", __FUNCTION__, orig_gain, gain); log_debug("%s: gain=%d -> rxvga1=%d lna=%d rxvga2=%d remainder=%d\n", __FUNCTION__, orig_gain, rxvga1, lna, rxvga2, gain); } // that should do it. actually apply the changes: status = lms_lna_set_gain(dev, _convert_gain_to_lna_gain(lna)); if (status < 0) { return status; } status = lms_rxvga1_set_gain(dev, __scale_int(rxvga1_range, rxvga1)); if (status < 0) { return status; } status = lms_rxvga2_set_gain(dev, __scale_int(rxvga2_range, rxvga2)); if (status < 0) { return status; } return 0; } static int get_rx_gain(struct bladerf *dev, int *gain) { int status; bladerf_lna_gain lnagain; int lnagain_db; int rxvga1; int rxvga2; status = lms_lna_get_gain(dev, &lnagain); if (status < 0) { return status; } status = lms_rxvga1_get_gain(dev, &rxvga1); if (status < 0) { return status; } status = lms_rxvga2_get_gain(dev, &rxvga2); if (status < 0) { return status; } switch (lnagain) { case BLADERF_LNA_GAIN_BYPASS: lnagain_db = 0; break; case BLADERF_LNA_GAIN_MID: lnagain_db = BLADERF_LNA_GAIN_MID_DB; break; case BLADERF_LNA_GAIN_MAX: lnagain_db = BLADERF_LNA_GAIN_MAX_DB; break; default: return BLADERF_ERR_UNEXPECTED; } *gain = __round_int(lnagain_db + rxvga1 + rxvga2 + BLADERF1_RX_GAIN_OFFSET); return 0; } static int set_tx_gain(struct bladerf *dev, int gain) { struct bladerf_range const *txvga1_range = NULL; struct bladerf_range const *txvga2_range = NULL; bladerf_channel const ch = BLADERF_CHANNEL_TX(0); int orig_gain = gain; int txvga1, txvga2; int status; // get our gain stage ranges! status = bladerf1_get_gain_stage_range(dev, ch, "txvga1", &txvga1_range); if (status < 0) { return status; } status = bladerf1_get_gain_stage_range(dev, ch, "txvga2", &txvga2_range); if (status < 0) { return status; } txvga1 = __unscale_int(txvga1_range, txvga1_range->min); txvga2 = __unscale_int(txvga2_range, txvga2_range->min); // offset gain so that we can use it as a counter when apportioning gain gain -= __round_int((BLADERF1_TX_GAIN_OFFSET + __unscale_int(txvga1_range, txvga1_range->min) + __unscale_int(txvga2_range, txvga2_range->min))); // apportion gain to TXVGA2 _apportion_gain(txvga2_range, &txvga2, &gain); // apportion gain to TXVGA1 _apportion_gain(txvga1_range, &txvga1, &gain); // verification if (gain != 0) { log_warning("%s: unable to achieve requested gain %d (missed by %d)\n", __FUNCTION__, orig_gain, gain); log_debug("%s: gain=%d -> txvga2=%d txvga1=%d remainder=%d\n", __FUNCTION__, orig_gain, txvga2, txvga1, gain); } status = lms_txvga1_set_gain(dev, txvga1); if (status < 0) { return status; } status = lms_txvga2_set_gain(dev, txvga2); if (status < 0) { return status; } return 0; } static int get_tx_gain(struct bladerf *dev, int *gain) { int status; int txvga1; int txvga2; status = lms_txvga1_get_gain(dev, &txvga1); if (status < 0) { return status; } status = lms_txvga2_get_gain(dev, &txvga2); if (status < 0) { return status; } *gain = __round_int(txvga1 + txvga2 + BLADERF1_TX_GAIN_OFFSET); return 0; } static int bladerf1_set_gain(struct bladerf *dev, bladerf_channel ch, int gain) { CHECK_BOARD_STATE(STATE_INITIALIZED); if (BLADERF_CHANNEL_TX(0) == ch) { return set_tx_gain(dev, gain); } else if (BLADERF_CHANNEL_RX(0) == ch) { return set_rx_gain(dev, gain); } return BLADERF_ERR_INVAL; } static int bladerf1_set_gain_mode(struct bladerf *dev, bladerf_module mod, bladerf_gain_mode mode) { int status; uint32_t config_gpio; struct bladerf1_board_data *board_data = dev->board_data; uint32_t const TABLE_VERSION = 2; /* Required RX DC cal table version */ /* Strings used in AGC-unavailable warnings */ char const *MGC_WARN = "Manual gain control will be used instead."; char const *FPGA_STR = "download and install FPGA v0.7.0 or newer from " "https://nuand.com/fpga/"; char const *DCCAL_STR = "see \"Generating a DC offset table\" at " "https://github.com/Nuand/bladeRF/wiki/" "DC-offset-and-IQ-Imbalance-Correction"; if (mod != BLADERF_MODULE_RX) { return BLADERF_ERR_UNSUPPORTED; } if ((status = dev->backend->config_gpio_read(dev, &config_gpio))) { return status; } if (mode == BLADERF_GAIN_AUTOMATIC || mode == BLADERF_GAIN_DEFAULT) { if (!have_cap(board_data->capabilities, BLADERF_CAP_AGC_DC_LUT)) { log_warning("AGC not supported by FPGA. %s\n", MGC_WARN); log_info("To enable AGC, %s, then %s\n", FPGA_STR, DCCAL_STR); log_debug("%s: expected FPGA >= v0.7.0, got v%u.%u.%u\n", __FUNCTION__, board_data->fpga_version.major, board_data->fpga_version.minor, board_data->fpga_version.patch); return BLADERF_ERR_UNSUPPORTED; } if (!board_data->cal.dc_rx) { log_warning("RX DC calibration table not found. %s\n", MGC_WARN); log_info("To enable AGC, %s\n", DCCAL_STR); return BLADERF_ERR_UNSUPPORTED; } if (board_data->cal.dc_rx->version != TABLE_VERSION) { log_warning("RX DC calibration table is out-of-date. %s\n", MGC_WARN); log_info("To enable AGC, %s\n", DCCAL_STR); log_debug("%s: expected version %u, got %u\n", __FUNCTION__, TABLE_VERSION, board_data->cal.dc_rx->version); return BLADERF_ERR_UNSUPPORTED; } config_gpio |= BLADERF_GPIO_AGC_ENABLE; } else if (mode == BLADERF_GAIN_MANUAL || mode == BLADERF_GAIN_MGC) { config_gpio &= ~BLADERF_GPIO_AGC_ENABLE; } return dev->backend->config_gpio_write(dev, config_gpio); } static int bladerf1_get_gain_mode(struct bladerf *dev, bladerf_module mod, bladerf_gain_mode *mode) { int status; uint32_t config_gpio; if ((status = dev->backend->config_gpio_read(dev, &config_gpio))) { return status; } if (config_gpio & BLADERF_GPIO_AGC_ENABLE) { *mode = BLADERF_GAIN_DEFAULT; } else { *mode = BLADERF_GAIN_MGC; } return status; } static int bladerf1_get_gain(struct bladerf *dev, bladerf_channel ch, int *gain) { CHECK_BOARD_STATE(STATE_INITIALIZED); if (BLADERF_CHANNEL_TX(0) == ch) { return get_tx_gain(dev, gain); } else if (BLADERF_CHANNEL_RX(0) == ch) { return get_rx_gain(dev, gain); } return BLADERF_ERR_INVAL; } static int bladerf1_get_gain_modes(struct bladerf *dev, bladerf_channel ch, struct bladerf_gain_modes const **modes) { struct bladerf_gain_modes const *mode_infos; unsigned int mode_infos_len; if (BLADERF_CHANNEL_IS_TX(ch)) { mode_infos = NULL; mode_infos_len = 0; } else { mode_infos = bladerf1_rx_gain_modes; mode_infos_len = ARRAY_SIZE(bladerf1_rx_gain_modes); } if (modes != NULL) { *modes = mode_infos; } return mode_infos_len; } static int bladerf1_get_gain_range(struct bladerf *dev, bladerf_channel ch, struct bladerf_range const **range) { if (BLADERF_CHANNEL_IS_TX(ch)) { *range = &bladerf1_tx_gain_range; } else { *range = &bladerf1_rx_gain_range; } return 0; } static int bladerf1_set_gain_stage(struct bladerf *dev, bladerf_channel ch, char const *stage, int gain) { CHECK_BOARD_STATE(STATE_INITIALIZED); /* TODO implement gain clamping */ switch (ch) { case BLADERF_CHANNEL_TX(0): if (strcmp(stage, "txvga1") == 0) { return lms_txvga1_set_gain(dev, gain); } else if (strcmp(stage, "txvga2") == 0) { return lms_txvga2_set_gain(dev, gain); } else { log_warning("%s: gain stage '%s' invalid\n", __FUNCTION__, stage); return 0; } case BLADERF_CHANNEL_RX(0): if (strcmp(stage, "rxvga1") == 0) { return lms_rxvga1_set_gain(dev, gain); } else if (strcmp(stage, "rxvga2") == 0) { return lms_rxvga2_set_gain(dev, gain); } else if (strcmp(stage, "lna") == 0) { return lms_lna_set_gain(dev, _convert_gain_to_lna_gain(gain)); } else { log_warning("%s: gain stage '%s' invalid\n", __FUNCTION__, stage); return 0; } default: log_error("%s: channel %d invalid\n", __FUNCTION__, ch); return BLADERF_ERR_INVAL; } } static int bladerf1_get_gain_stage(struct bladerf *dev, bladerf_channel ch, char const *stage, int *gain) { CHECK_BOARD_STATE(STATE_INITIALIZED); switch (ch) { case BLADERF_CHANNEL_TX(0): if (strcmp(stage, "txvga1") == 0) { return lms_txvga1_get_gain(dev, gain); } else if (strcmp(stage, "txvga2") == 0) { return lms_txvga2_get_gain(dev, gain); } else { log_warning("%s: gain stage '%s' invalid\n", __FUNCTION__, stage); return 0; } case BLADERF_CHANNEL_RX(0): if (strcmp(stage, "rxvga1") == 0) { return lms_rxvga1_get_gain(dev, gain); } else if (strcmp(stage, "rxvga2") == 0) { return lms_rxvga2_get_gain(dev, gain); } else if (strcmp(stage, "lna") == 0) { int status; bladerf_lna_gain lnagain; status = lms_lna_get_gain(dev, &lnagain); if (status == 0) { *gain = _convert_lna_gain_to_gain(lnagain); } return status; } else { log_warning("%s: gain stage '%s' invalid\n", __FUNCTION__, stage); return 0; } default: log_error("%s: channel %d invalid\n", __FUNCTION__, ch); return BLADERF_ERR_INVAL; } } static int bladerf1_get_gain_stages(struct bladerf *dev, bladerf_channel ch, char const **stages, size_t count) { struct bladerf_gain_stage_info const *stage_infos; unsigned int stage_infos_len; unsigned int i; if (BLADERF_CHANNEL_IS_TX(ch)) { stage_infos = bladerf1_tx_gain_stages; stage_infos_len = ARRAY_SIZE(bladerf1_tx_gain_stages); } else { stage_infos = bladerf1_rx_gain_stages; stage_infos_len = ARRAY_SIZE(bladerf1_rx_gain_stages); } if (stages != NULL) { count = (stage_infos_len < count) ? stage_infos_len : count; for (i = 0; i < count; i++) { stages[i] = stage_infos[i].name; } } return stage_infos_len; } /******************************************************************************/ /* Sample Rate */ /******************************************************************************/ static int bladerf1_set_sample_rate(struct bladerf *dev, bladerf_channel ch, unsigned int rate, unsigned int *actual) { CHECK_BOARD_STATE(STATE_INITIALIZED); return si5338_set_sample_rate(dev, ch, rate, actual); } static int bladerf1_get_sample_rate(struct bladerf *dev, bladerf_channel ch, unsigned int *rate) { CHECK_BOARD_STATE(STATE_INITIALIZED); return si5338_get_sample_rate(dev, ch, rate); } static int bladerf1_get_sample_rate_range(struct bladerf *dev, bladerf_channel ch, const struct bladerf_range **range) { *range = &bladerf1_sample_rate_range; return 0; } static int bladerf1_set_rational_sample_rate(struct bladerf *dev, bladerf_channel ch, struct bladerf_rational_rate *rate, struct bladerf_rational_rate *actual) { CHECK_BOARD_STATE(STATE_INITIALIZED); return si5338_set_rational_sample_rate(dev, ch, rate, actual); } static int bladerf1_get_rational_sample_rate(struct bladerf *dev, bladerf_channel ch, struct bladerf_rational_rate *rate) { CHECK_BOARD_STATE(STATE_INITIALIZED); return si5338_get_rational_sample_rate(dev, ch, rate); } /******************************************************************************/ /* Bandwidth */ /******************************************************************************/ static int bladerf1_set_bandwidth(struct bladerf *dev, bladerf_channel ch, bladerf_bandwidth bandwidth, bladerf_bandwidth *actual) { int status; lms_bw bw; CHECK_BOARD_STATE(STATE_INITIALIZED); if (bandwidth < BLADERF_BANDWIDTH_MIN) { bandwidth = BLADERF_BANDWIDTH_MIN; log_info("Clamping bandwidth to %d Hz\n", bandwidth); } else if (bandwidth > BLADERF_BANDWIDTH_MAX) { bandwidth = BLADERF_BANDWIDTH_MAX; log_info("Clamping bandwidth to %d Hz\n", bandwidth); } bw = lms_uint2bw(bandwidth); status = lms_lpf_enable(dev, ch, true); if (status != 0) { return status; } status = lms_set_bandwidth(dev, ch, bw); if (actual != NULL) { if (status == 0) { *actual = lms_bw2uint(bw); } else { *actual = 0; } } return status; } static int bladerf1_get_bandwidth(struct bladerf *dev, bladerf_channel ch, bladerf_bandwidth *bandwidth) { int status; lms_bw bw; CHECK_BOARD_STATE(STATE_INITIALIZED); status = lms_get_bandwidth(dev, ch, &bw); if (status == 0) { *bandwidth = lms_bw2uint(bw); } else { *bandwidth = 0; } return status; } static int bladerf1_get_bandwidth_range(struct bladerf *dev, bladerf_channel ch, const struct bladerf_range **range) { *range = &bladerf1_bandwidth_range; return 0; } /******************************************************************************/ /* Frequency */ /******************************************************************************/ static int bladerf1_set_frequency(struct bladerf *dev, bladerf_channel ch, bladerf_frequency frequency) { struct bladerf1_board_data *board_data = dev->board_data; const bladerf_xb attached = dev->xb; int status; int16_t dc_i, dc_q; struct dc_cal_entry entry; const struct dc_cal_tbl *dc_cal = (ch == BLADERF_CHANNEL_RX(0)) ? board_data->cal.dc_rx : board_data->cal.dc_tx; CHECK_BOARD_STATE(STATE_FPGA_LOADED); log_debug("Setting %s frequency to %" BLADERF_PRIuFREQ "\n", channel2str(ch), frequency); if (attached == BLADERF_XB_200) { if (frequency < BLADERF_FREQUENCY_MIN) { status = xb200_set_path(dev, ch, BLADERF_XB200_MIX); if (status) { return status; } status = xb200_auto_filter_selection(dev, ch, frequency); if (status) { return status; } frequency = 1248000000 - frequency; } else { status = xb200_set_path(dev, ch, BLADERF_XB200_BYPASS); if (status) { return status; } } } switch (board_data->tuning_mode) { case BLADERF_TUNING_MODE_HOST: status = lms_set_frequency(dev, ch, (uint32_t)frequency); if (status != 0) { return status; } status = band_select(dev, ch, frequency < BLADERF1_BAND_HIGH); break; case BLADERF_TUNING_MODE_FPGA: { status = dev->board->schedule_retune(dev, ch, BLADERF_RETUNE_NOW, frequency, NULL); break; } default: log_debug("Invalid tuning mode: %d\n", board_data->tuning_mode); status = BLADERF_ERR_INVAL; break; } if (status != 0) { return status; } if (dc_cal != NULL) { dc_cal_tbl_entry(dc_cal, (uint32_t)frequency, &entry); dc_i = entry.dc_i; dc_q = entry.dc_q; status = lms_set_dc_offset_i(dev, ch, dc_i); if (status != 0) { return status; } status = lms_set_dc_offset_q(dev, ch, dc_q); if (status != 0) { return status; } if (ch == BLADERF_CHANNEL_RX(0) && have_cap(board_data->capabilities, BLADERF_CAP_AGC_DC_LUT)) { status = dev->backend->set_agc_dc_correction( dev, entry.max_dc_q, entry.max_dc_i, entry.mid_dc_q, entry.mid_dc_i, entry.min_dc_q, entry.min_dc_i); if (status != 0) { return status; } log_verbose("Set AGC DC offset cal (I, Q) to: Max (%d, %d) " " Mid (%d, %d) Min (%d, %d)\n", entry.max_dc_q, entry.max_dc_i, entry.mid_dc_q, entry.mid_dc_i, entry.min_dc_q, entry.min_dc_i); } log_verbose("Set %s DC offset cal (I, Q) to: (%d, %d)\n", (ch == BLADERF_CHANNEL_RX(0)) ? "RX" : "TX", dc_i, dc_q); } return 0; } static int bladerf1_get_frequency(struct bladerf *dev, bladerf_channel ch, bladerf_frequency *frequency) { bladerf_xb200_path path; struct lms_freq f; int status = 0; CHECK_BOARD_STATE(STATE_INITIALIZED); status = lms_get_frequency(dev, ch, &f); if (status != 0) { return status; } if (f.x == 0) { /* If we see this, it's most often an indication that communication * with the LMS6002D is not occuring correctly */ *frequency = 0; status = BLADERF_ERR_IO; } else { *frequency = lms_frequency_to_hz(&f); } if (status != 0) { return status; } if (dev->xb == BLADERF_XB_200) { status = xb200_get_path(dev, ch, &path); if (status != 0) { return status; } if (path == BLADERF_XB200_MIX) { *frequency = 1248000000 - *frequency; } } return 0; } static int bladerf1_get_frequency_range(struct bladerf *dev, bladerf_channel ch, const struct bladerf_range **range) { if (dev->xb == BLADERF_XB_200) { *range = &bladerf1_xb200_frequency_range; } else { *range = &bladerf1_frequency_range; } return 0; } static int bladerf1_select_band(struct bladerf *dev, bladerf_channel ch, bladerf_frequency frequency) { CHECK_BOARD_STATE(STATE_INITIALIZED); return band_select(dev, ch, frequency < BLADERF1_BAND_HIGH); } /******************************************************************************/ /* RF ports */ /******************************************************************************/ static int bladerf1_set_rf_port(struct bladerf *dev, bladerf_channel ch, const char *port) { const struct bladerf_lms_port_name_map *port_map; unsigned int port_map_len; int status; size_t i; lms_lna rx_lna = LNA_NONE; lms_pa tx_pa = PA_NONE; bool ok = false; CHECK_BOARD_STATE(STATE_INITIALIZED); /* TODO: lms_pa_enable is not currently implemented */ if (BLADERF_CHANNEL_IS_TX(ch)) { log_debug("%s: not implemented for TX channels, silently ignoring\n", __FUNCTION__); return 0; } if (BLADERF_CHANNEL_IS_TX(ch)) { port_map = bladerf1_tx_port_map; port_map_len = ARRAY_SIZE(bladerf1_tx_port_map); } else { port_map = bladerf1_rx_port_map; port_map_len = ARRAY_SIZE(bladerf1_rx_port_map); } for (i = 0; i < port_map_len; i++) { if (strcmp(port_map[i].name, port) == 0) { if (BLADERF_CHANNEL_IS_TX(ch)) { tx_pa = port_map[i].tx_pa; } else { rx_lna = port_map[i].rx_lna; } ok = true; break; } } if (!ok) { log_error("port '%s' not valid for channel %s\n", port, channel2str(ch)); return BLADERF_ERR_INVAL; } if (BLADERF_CHANNEL_IS_TX(ch)) { for (i = 0; i < port_map_len; i++) { bool enable = (port_map[i].tx_pa == tx_pa); #if 0 status = lms_pa_enable(dev, port_map[i].tx_pa, enable); #else log_verbose("%s: would %s pa %d but this is not implemented\n", __FUNCTION__, enable ? "enable" : "disable", tx_pa); status = 0; #endif // 0 if (status < 0) { break; } } } else { status = lms_select_lna(dev, rx_lna); } return status; } static int bladerf1_get_rf_port(struct bladerf *dev, bladerf_channel ch, const char **port) { const struct bladerf_lms_port_name_map *port_map; unsigned int port_map_len; int status; size_t i; lms_lna rx_lna = LNA_NONE; lms_pa tx_pa = PA_NONE; bool ok = false; CHECK_BOARD_STATE(STATE_INITIALIZED); /* TODO: pa getter not currently implemented */ if (BLADERF_CHANNEL_IS_TX(ch)) { log_debug("%s: not implemented for TX channels\n", __FUNCTION__); if (port != NULL) { *port = "auto"; } return 0; } if (BLADERF_CHANNEL_IS_TX(ch)) { port_map = bladerf1_tx_port_map; port_map_len = ARRAY_SIZE(bladerf1_tx_port_map); #if 0 status = lms_get_pa(dev, &tx_pa); #else status = 0; #endif // 0 } else { port_map = bladerf1_rx_port_map; port_map_len = ARRAY_SIZE(bladerf1_rx_port_map); status = lms_get_lna(dev, &rx_lna); } if (status < 0) { return status; } if (port != NULL) { for (i = 0; i < port_map_len; i++) { if (BLADERF_CHANNEL_IS_TX(ch)) { if (tx_pa == port_map[i].tx_pa) { *port = port_map[i].name; ok = true; break; } } else { if (rx_lna == port_map[i].rx_lna) { *port = port_map[i].name; ok = true; break; } } } } if (!ok) { if (port != NULL) { *port = "unknown"; } log_error("%s: unexpected port id %d\n", __FUNCTION__, BLADERF_CHANNEL_IS_TX(ch) ? tx_pa : rx_lna); return BLADERF_ERR_UNEXPECTED; } return 0; } static int bladerf1_get_rf_ports(struct bladerf *dev, bladerf_channel ch, const char **ports, unsigned int count) { const struct bladerf_lms_port_name_map *port_map; unsigned int port_map_len; size_t i; if (BLADERF_CHANNEL_IS_TX(ch)) { /* Return a null list instead of bladerf1_tx_port_map */ port_map = NULL; port_map_len = 0; } else { port_map = bladerf1_rx_port_map; port_map_len = ARRAY_SIZE(bladerf1_rx_port_map); } if (ports != NULL) { count = (port_map_len < count) ? port_map_len : count; for (i = 0; i < count; i++) { ports[i] = port_map[i].name; } } return port_map_len; } /******************************************************************************/ /* Scheduled Tuning */ /******************************************************************************/ static int bladerf1_get_quick_tune(struct bladerf *dev, bladerf_channel ch, struct bladerf_quick_tune *quick_tune) { CHECK_BOARD_STATE(STATE_INITIALIZED); return lms_get_quick_tune(dev, ch, quick_tune); } static int bladerf1_schedule_retune(struct bladerf *dev, bladerf_channel ch, bladerf_timestamp timestamp, bladerf_frequency frequency, struct bladerf_quick_tune *quick_tune) { struct bladerf1_board_data *board_data = dev->board_data; int status; struct lms_freq f; CHECK_BOARD_STATE(STATE_FPGA_LOADED); if (!have_cap(board_data->capabilities, BLADERF_CAP_SCHEDULED_RETUNE)) { log_debug("This FPGA version (%u.%u.%u) does not support " "scheduled retunes.\n", board_data->fpga_version.major, board_data->fpga_version.minor, board_data->fpga_version.patch); return BLADERF_ERR_UNSUPPORTED; } if (quick_tune == NULL) { if (dev->xb == BLADERF_XB_200) { log_info("Consider supplying the quick_tune parameter to" " bladerf_schedule_retune() when the XB-200 is enabled.\n"); } status = lms_calculate_tuning_params((uint32_t)frequency, &f); if (status != 0) { return status; } } else { f.freqsel = quick_tune->freqsel; f.vcocap = quick_tune->vcocap; f.nint = quick_tune->nint; f.nfrac = quick_tune->nfrac; f.flags = quick_tune->flags; f.xb_gpio = quick_tune->xb_gpio; f.x = 0; f.vcocap_result = 0; } return dev->backend->retune(dev, ch, timestamp, f.nint, f.nfrac, f.freqsel, f.vcocap, (f.flags & LMS_FREQ_FLAGS_LOW_BAND) != 0, f.xb_gpio, (f.flags & LMS_FREQ_FLAGS_FORCE_VCOCAP) != 0); } static int bladerf1_cancel_scheduled_retunes(struct bladerf *dev, bladerf_channel ch) { struct bladerf1_board_data *board_data = dev->board_data; int status; CHECK_BOARD_STATE(STATE_FPGA_LOADED); if (have_cap(board_data->capabilities, BLADERF_CAP_SCHEDULED_RETUNE)) { status = dev->backend->retune(dev, ch, NIOS_PKT_RETUNE_CLEAR_QUEUE, 0, 0, 0, 0, false, 0, false); } else { log_debug("This FPGA version (%u.%u.%u) does not support " "scheduled retunes.\n", board_data->fpga_version.major, board_data->fpga_version.minor, board_data->fpga_version.patch); return BLADERF_ERR_UNSUPPORTED; } return status; } /******************************************************************************/ /* DC/Phase/Gain Correction */ /******************************************************************************/ static int bladerf1_get_correction(struct bladerf *dev, bladerf_channel ch, bladerf_correction corr, int16_t *value) { int status; CHECK_BOARD_STATE(STATE_INITIALIZED); switch (corr) { case BLADERF_CORR_PHASE: status = dev->backend->get_iq_phase_correction(dev, ch, value); break; case BLADERF_CORR_GAIN: status = dev->backend->get_iq_gain_correction(dev, ch, value); /* Undo the gain control offset */ if (status == 0) { *value -= 4096; } break; case BLADERF_CORR_DCOFF_I: status = lms_get_dc_offset_i(dev, ch, value); break; case BLADERF_CORR_DCOFF_Q: status = lms_get_dc_offset_q(dev, ch, value); break; default: status = BLADERF_ERR_INVAL; log_debug("Invalid correction type: %d\n", corr); break; } return status; } static int bladerf1_set_correction(struct bladerf *dev, bladerf_channel ch, bladerf_correction corr, int16_t value) { int status; CHECK_BOARD_STATE(STATE_INITIALIZED); switch (corr) { case BLADERF_CORR_PHASE: status = dev->backend->set_iq_phase_correction(dev, ch, value); break; case BLADERF_CORR_GAIN: /* Gain correction requires than an offset be applied */ value += (int16_t) 4096; status = dev->backend->set_iq_gain_correction(dev, ch, value); break; case BLADERF_CORR_DCOFF_I: status = lms_set_dc_offset_i(dev, ch, value); break; case BLADERF_CORR_DCOFF_Q: status = lms_set_dc_offset_q(dev, ch, value); break; default: status = BLADERF_ERR_INVAL; log_debug("Invalid correction type: %d\n", corr); break; } return status; } /******************************************************************************/ /* Trigger */ /******************************************************************************/ static int bladerf1_trigger_init(struct bladerf *dev, bladerf_channel ch, bladerf_trigger_signal signal, struct bladerf_trigger *trigger) { struct bladerf1_board_data *board_data = dev->board_data; CHECK_BOARD_STATE(STATE_INITIALIZED); if (!have_cap(board_data->capabilities, BLADERF_CAP_TRX_SYNC_TRIG)) { log_debug("FPGA v%s does not support synchronization triggers.\n", board_data->fpga_version.describe); return BLADERF_ERR_UNSUPPORTED; } return fpga_trigger_init(dev, ch, signal, trigger); } static int bladerf1_trigger_arm(struct bladerf *dev, const struct bladerf_trigger *trigger, bool arm, uint64_t resv1, uint64_t resv2) { struct bladerf1_board_data *board_data = dev->board_data; CHECK_BOARD_STATE(STATE_INITIALIZED); if (!have_cap(board_data->capabilities, BLADERF_CAP_TRX_SYNC_TRIG)) { log_debug("FPGA v%s does not support synchronization triggers.\n", board_data->fpga_version.describe); return BLADERF_ERR_UNSUPPORTED; } /* resv1 & resv2 unused - may be allocated for use as timestamp and * other flags in the future */ return fpga_trigger_arm(dev, trigger, arm); } static int bladerf1_trigger_fire(struct bladerf *dev, const struct bladerf_trigger *trigger) { struct bladerf1_board_data *board_data = dev->board_data; CHECK_BOARD_STATE(STATE_INITIALIZED); if (!have_cap(board_data->capabilities, BLADERF_CAP_TRX_SYNC_TRIG)) { log_debug("FPGA v%s does not support synchronization triggers.\n", board_data->fpga_version.describe); return BLADERF_ERR_UNSUPPORTED; } return fpga_trigger_fire(dev, trigger); } static int bladerf1_trigger_state(struct bladerf *dev, const struct bladerf_trigger *trigger, bool *is_armed, bool *has_fired, bool *fire_requested, uint64_t *resv1, uint64_t *resv2) { struct bladerf1_board_data *board_data = dev->board_data; int status; CHECK_BOARD_STATE(STATE_INITIALIZED); if (!have_cap(board_data->capabilities, BLADERF_CAP_TRX_SYNC_TRIG)) { log_debug("FPGA v%s does not support synchronization triggers.\n", board_data->fpga_version.describe); return BLADERF_ERR_UNSUPPORTED; } status = fpga_trigger_state(dev, trigger, is_armed, has_fired, fire_requested); /* Reserved for future metadata (e.g., trigger counts, timestamp) */ if (resv1 != NULL) { *resv1 = 0; } if (resv2 != NULL) { *resv2 = 0; } return status; } /******************************************************************************/ /* Streaming */ /******************************************************************************/ static inline int requires_timestamps(bladerf_format format, bool *required) { int status = 0; switch (format) { case BLADERF_FORMAT_SC16_Q11_META: case BLADERF_FORMAT_PACKET_META: *required = true; break; case BLADERF_FORMAT_SC16_Q11: *required = false; break; default: return BLADERF_ERR_INVAL; } return status; } /** * Perform the neccessary device configuration for the specified format * (e.g., enabling/disabling timestamp support), first checking that the * requested format would not conflict with the other stream direction. * * @param dev Device handle * @param[in] dir Direction that is currently being configured * @param[in] format Format the channel is being configured for * * @return 0 on success, BLADERF_ERR_* on failure */ static int perform_format_config(struct bladerf *dev, bladerf_direction dir, bladerf_format format) { struct bladerf1_board_data *board_data = dev->board_data; int status = 0; bool use_timestamps; bladerf_channel other; bool other_using_timestamps; uint32_t gpio_val; status = requires_timestamps(format, &use_timestamps); if (status != 0) { log_debug("%s: Invalid format: %d\n", __FUNCTION__, format); return status; } if (use_timestamps && !have_cap(board_data->capabilities, BLADERF_CAP_TIMESTAMPS)) { log_warning("Timestamp support requires FPGA v0.1.0 or later.\n"); return BLADERF_ERR_UPDATE_FPGA; } switch (dir) { case BLADERF_RX: other = BLADERF_TX; break; case BLADERF_TX: other = BLADERF_RX; break; default: log_debug("Invalid direction: %d\n", dir); return BLADERF_ERR_INVAL; } status = requires_timestamps(board_data->module_format[other], &other_using_timestamps); if ((status == 0) && (other_using_timestamps != use_timestamps)) { log_debug("Format conflict detected: RX=%d, TX=%d\n"); return BLADERF_ERR_INVAL; } status = dev->backend->config_gpio_read(dev, &gpio_val); if (status != 0) { return status; } if (format == BLADERF_FORMAT_PACKET_META) { gpio_val |= BLADERF_GPIO_PACKET; use_timestamps = true; } else { gpio_val &= ~BLADERF_GPIO_PACKET; } if (use_timestamps) { gpio_val |= (BLADERF_GPIO_TIMESTAMP | BLADERF_GPIO_TIMESTAMP_DIV2); } else { gpio_val &= ~(BLADERF_GPIO_TIMESTAMP | BLADERF_GPIO_TIMESTAMP_DIV2); } status = dev->backend->config_gpio_write(dev, gpio_val); if (status == 0) { board_data->module_format[dir] = format; } return status; } /** * Deconfigure and update any state pertaining what a format that a stream * direction is no longer using. * * @param dev Device handle * @param[in] dir Direction that is currently being deconfigured * * @return 0 on success, BLADERF_ERR_* on failure */ static int perform_format_deconfig(struct bladerf *dev, bladerf_direction dir) { struct bladerf1_board_data *board_data = dev->board_data; switch (dir) { case BLADERF_RX: case BLADERF_TX: /* We'll reconfigure the HW when we call perform_format_config, so * we just need to update our stored information */ board_data->module_format[dir] = -1; break; default: log_debug("%s: Invalid direction: %d\n", __FUNCTION__, dir); return BLADERF_ERR_INVAL; } return 0; } static int bladerf1_init_stream(struct bladerf_stream **stream, struct bladerf *dev, bladerf_stream_cb callback, void ***buffers, size_t num_buffers, bladerf_format format, size_t samples_per_buffer, size_t num_transfers, void *user_data) { CHECK_BOARD_STATE(STATE_INITIALIZED); return async_init_stream(stream, dev, callback, buffers, num_buffers, format, samples_per_buffer, num_transfers, user_data); } static int bladerf1_stream(struct bladerf_stream *stream, bladerf_channel_layout layout) { bladerf_direction dir = layout & BLADERF_DIRECTION_MASK; int stream_status, fmt_status; if (layout != BLADERF_RX_X1 && layout != BLADERF_TX_X1) { return -EINVAL; } fmt_status = perform_format_config(stream->dev, dir, stream->format); if (fmt_status != 0) { return fmt_status; } stream_status = async_run_stream(stream, layout); fmt_status = perform_format_deconfig(stream->dev, dir); if (fmt_status != 0) { return fmt_status; } return stream_status; } static int bladerf1_submit_stream_buffer(struct bladerf_stream *stream, void *buffer, unsigned int timeout_ms, bool nonblock) { size_t len; len = async_stream_buf_bytes(stream); return async_submit_stream_buffer(stream, buffer, &len, timeout_ms, nonblock); } static void bladerf1_deinit_stream(struct bladerf_stream *stream) { async_deinit_stream(stream); } static int bladerf1_set_stream_timeout(struct bladerf *dev, bladerf_direction dir, unsigned int timeout) { struct bladerf1_board_data *board_data = dev->board_data; MUTEX_LOCK(&board_data->sync[dir].lock); board_data->sync[dir].stream_config.timeout_ms = timeout; MUTEX_UNLOCK(&board_data->sync[dir].lock); return 0; } static int bladerf1_get_stream_timeout(struct bladerf *dev, bladerf_direction dir, unsigned int *timeout) { struct bladerf1_board_data *board_data = dev->board_data; MUTEX_LOCK(&board_data->sync[dir].lock); *timeout = board_data->sync[dir].stream_config.timeout_ms; MUTEX_UNLOCK(&board_data->sync[dir].lock); return 0; } static int bladerf1_sync_config(struct bladerf *dev, bladerf_channel_layout layout, bladerf_format format, unsigned int num_buffers, unsigned int buffer_size, unsigned int num_transfers, unsigned int stream_timeout) { struct bladerf1_board_data *board_data = dev->board_data; bladerf_direction dir = layout & BLADERF_DIRECTION_MASK; int status; CHECK_BOARD_STATE(STATE_INITIALIZED); if (layout != BLADERF_RX_X1 && layout != BLADERF_TX_X1) { return -EINVAL; } status = perform_format_config(dev, dir, format); if (status == 0) { status = sync_init(&board_data->sync[dir], dev, layout, format, num_buffers, buffer_size, board_data->msg_size, num_transfers, stream_timeout); if (status != 0) { perform_format_deconfig(dev, dir); } } return status; } static int bladerf1_sync_tx(struct bladerf *dev, void const *samples, unsigned int num_samples, struct bladerf_metadata *metadata, unsigned int timeout_ms) { struct bladerf1_board_data *board_data = dev->board_data; int status; if (!board_data->sync[BLADERF_TX].initialized) { return BLADERF_ERR_INVAL; } status = sync_tx(&board_data->sync[BLADERF_TX], samples, num_samples, metadata, timeout_ms); return status; } static int bladerf1_sync_rx(struct bladerf *dev, void *samples, unsigned int num_samples, struct bladerf_metadata *metadata, unsigned int timeout_ms) { struct bladerf1_board_data *board_data = dev->board_data; int status; if (!board_data->sync[BLADERF_RX].initialized) { return BLADERF_ERR_INVAL; } status = sync_rx(&board_data->sync[BLADERF_RX], samples, num_samples, metadata, timeout_ms); return status; } static int bladerf1_get_timestamp(struct bladerf *dev, bladerf_direction dir, bladerf_timestamp *value) { CHECK_BOARD_STATE(STATE_INITIALIZED); return dev->backend->get_timestamp(dev, dir, value); } /******************************************************************************/ /* FPGA/Firmware Loading/Flashing */ /******************************************************************************/ static bool is_valid_fpga_size(struct bladerf *dev, bladerf_fpga_size fpga, size_t len) { static const char env_override[] = "BLADERF_SKIP_FPGA_SIZE_CHECK"; bool valid; size_t expected; int status; status = dev->board->get_fpga_bytes(dev, &expected); if (status < 0) { return status; } /* Provide a means to override this check. This is intended to allow * folks who know what they're doing to work around this quickly without * needing to make a code change. (e.g., someone building a custom FPGA * image that enables compressoin) */ if (getenv(env_override)) { log_info("Overriding FPGA size check per %s\n", env_override); valid = true; } else if (expected > 0) { valid = (len == expected); } else { log_debug("Unknown FPGA type (%d). Using relaxed size criteria.\n", fpga); if (len < (1 * 1024 * 1024)) { valid = false; } else if (len > (dev->flash_arch->tsize_bytes - BLADERF_FLASH_ADDR_FPGA)) { valid = false; } else { valid = true; } } if (!valid) { log_warning("Detected potentially incorrect FPGA file (length was %d, " "expected %d).\n", len, expected); log_debug("If you are certain this file is valid, you may define\n" "BLADERF_SKIP_FPGA_SIZE_CHECK in your environment to skip " "this check.\n\n"); } return valid; } static int bladerf1_load_fpga(struct bladerf *dev, const uint8_t *buf, size_t length) { struct bladerf1_board_data *board_data = dev->board_data; int status; CHECK_BOARD_STATE(STATE_FIRMWARE_LOADED); if (!is_valid_fpga_size(dev, board_data->fpga_size, length)) { return BLADERF_ERR_INVAL; } MUTEX_LOCK(&dev->lock); status = dev->backend->load_fpga(dev, buf, length); if (status != 0) { MUTEX_UNLOCK(&dev->lock); return status; } /* Update device state */ board_data->state = STATE_FPGA_LOADED; MUTEX_UNLOCK(&dev->lock); status = bladerf1_initialize(dev); if (status != 0) { return status; } return 0; } static int bladerf1_flash_fpga(struct bladerf *dev, const uint8_t *buf, size_t length) { struct bladerf1_board_data *board_data = dev->board_data; CHECK_BOARD_STATE(STATE_FIRMWARE_LOADED); if (!is_valid_fpga_size(dev, board_data->fpga_size, length)) { return BLADERF_ERR_INVAL; } return spi_flash_write_fpga_bitstream(dev, buf, length); } static int bladerf1_erase_stored_fpga(struct bladerf *dev) { CHECK_BOARD_STATE(STATE_FIRMWARE_LOADED); return spi_flash_erase_fpga(dev); } static bool is_valid_fw_size(size_t len) { /* Simple FW applications generally are significantly larger than this */ if (len < (50 * 1024)) { return false; } else if (len > BLADERF_FLASH_BYTE_LEN_FIRMWARE) { return false; } else { return true; } } static int bladerf1_flash_firmware(struct bladerf *dev, const uint8_t *buf, size_t length) { const char env_override[] = "BLADERF_SKIP_FW_SIZE_CHECK"; CHECK_BOARD_STATE(STATE_FIRMWARE_LOADED); /* Sanity check firmware length. * * TODO in the future, better sanity checks can be performed when * using the bladerf image format currently used to backup/restore * calibration data */ if (!getenv(env_override) && !is_valid_fw_size(length)) { log_info("Detected potentially invalid firmware file.\n"); log_info("Define BLADERF_SKIP_FW_SIZE_CHECK in your evironment " "to skip this check.\n"); return BLADERF_ERR_INVAL; } return spi_flash_write_fx3_fw(dev, buf, length); } static int bladerf1_device_reset(struct bladerf *dev) { CHECK_BOARD_STATE(STATE_FIRMWARE_LOADED); return dev->backend->device_reset(dev); } /******************************************************************************/ /* Tuning mode */ /******************************************************************************/ static int bladerf1_set_tuning_mode(struct bladerf *dev, bladerf_tuning_mode mode) { struct bladerf1_board_data *board_data = dev->board_data; CHECK_BOARD_STATE(STATE_INITIALIZED); if (mode == BLADERF_TUNING_MODE_FPGA && !have_cap(board_data->capabilities, BLADERF_CAP_FPGA_TUNING)) { log_debug("The loaded FPGA version (%u.%u.%u) does not support the " "provided tuning mode (%d)\n", board_data->fpga_version.major, board_data->fpga_version.minor, board_data->fpga_version.patch, mode); return BLADERF_ERR_UNSUPPORTED; } switch (mode) { case BLADERF_TUNING_MODE_HOST: log_debug("Tuning mode: host\n"); break; case BLADERF_TUNING_MODE_FPGA: log_debug("Tuning mode: FPGA\n"); break; default: assert(!"Invalid tuning mode."); return BLADERF_ERR_INVAL; } board_data->tuning_mode = mode; return 0; } static int bladerf1_get_tuning_mode(struct bladerf *dev, bladerf_tuning_mode *mode) { struct bladerf1_board_data *board_data = dev->board_data; CHECK_BOARD_STATE(STATE_INITIALIZED); *mode = board_data->tuning_mode; return 0; } /******************************************************************************/ /* Loopback */ /******************************************************************************/ static int bladerf1_get_loopback_modes( struct bladerf *dev, struct bladerf_loopback_modes const **modes) { if (modes != NULL) { *modes = bladerf1_loopback_modes; } return ARRAY_SIZE(bladerf1_loopback_modes); } static int bladerf1_set_loopback(struct bladerf *dev, bladerf_loopback l) { struct bladerf1_board_data *board_data = dev->board_data; int status; CHECK_BOARD_STATE(STATE_INITIALIZED); if (l == BLADERF_LB_FIRMWARE) { /* Firmware loopback was fully implemented in FW v1.7.1 * (1.7.0 could enable it, but 1.7.1 also allowed readback, * so we'll enforce 1.7.1 here. */ if (!have_cap(board_data->capabilities, BLADERF_CAP_FW_LOOPBACK)) { log_warning("Firmware v1.7.1 or later is required " "to use firmware loopback.\n\n"); status = BLADERF_ERR_UPDATE_FW; return status; } else { /* Samples won't reach the LMS when the device is in firmware * loopback mode. By placing the LMS into a loopback mode, we ensure * that the PAs will be disabled, and remain enabled across * frequency changes. */ status = lms_set_loopback_mode(dev, BLADERF_LB_RF_LNA3); if (status != 0) { return status; } status = dev->backend->set_firmware_loopback(dev, true); } } else { /* If applicable, ensure FW loopback is disabled */ if (have_cap(board_data->capabilities, BLADERF_CAP_FW_LOOPBACK)) { bool fw_lb_enabled = false; /* Query first, as the implementation of setting the mode * may interrupt running streams. The API don't guarantee that * switching loopback modes on the fly to work, but we can at least * try to avoid unnecessarily interrupting things...*/ status = dev->backend->get_firmware_loopback(dev, &fw_lb_enabled); if (status != 0) { return status; } if (fw_lb_enabled) { status = dev->backend->set_firmware_loopback(dev, false); if (status != 0) { return status; } } } status = lms_set_loopback_mode(dev, l); } return status; } static int bladerf1_get_loopback(struct bladerf *dev, bladerf_loopback *l) { struct bladerf1_board_data *board_data = dev->board_data; int status; CHECK_BOARD_STATE(STATE_INITIALIZED); *l = BLADERF_LB_NONE; if (have_cap(board_data->capabilities, BLADERF_CAP_FW_LOOPBACK)) { bool fw_lb_enabled; status = dev->backend->get_firmware_loopback(dev, &fw_lb_enabled); if (status == 0 && fw_lb_enabled) { *l = BLADERF_LB_FIRMWARE; } } if (*l == BLADERF_LB_NONE) { status = lms_get_loopback_mode(dev, l); } return status; } /******************************************************************************/ /* Sample RX FPGA Mux */ /******************************************************************************/ static int bladerf1_set_rx_mux(struct bladerf *dev, bladerf_rx_mux mode) { uint32_t rx_mux_val; uint32_t config_gpio; int status; CHECK_BOARD_STATE(STATE_INITIALIZED); /* Validate desired mux mode */ switch (mode) { case BLADERF_RX_MUX_BASEBAND: case BLADERF_RX_MUX_12BIT_COUNTER: case BLADERF_RX_MUX_32BIT_COUNTER: case BLADERF_RX_MUX_DIGITAL_LOOPBACK: rx_mux_val = ((uint32_t) mode) << BLADERF_GPIO_RX_MUX_SHIFT; break; default: log_debug("Invalid RX mux mode setting passed to %s(): %d\n", mode, __FUNCTION__); return BLADERF_ERR_INVAL; } status = dev->backend->config_gpio_read(dev, &config_gpio); if (status != 0) { return status; } /* Clear out and assign the associated RX mux bits */ config_gpio &= ~BLADERF_GPIO_RX_MUX_MASK; config_gpio |= rx_mux_val; return dev->backend->config_gpio_write(dev, config_gpio); } static int bladerf1_get_rx_mux(struct bladerf *dev, bladerf_rx_mux *mode) { bladerf_rx_mux val; uint32_t config_gpio; int status; CHECK_BOARD_STATE(STATE_INITIALIZED); status = dev->backend->config_gpio_read(dev, &config_gpio); if (status != 0) { return status; } /* Extract RX mux bits */ config_gpio &= BLADERF_GPIO_RX_MUX_MASK; config_gpio >>= BLADERF_GPIO_RX_MUX_SHIFT; val = (bladerf_rx_mux) (config_gpio); /* Enure it's a valid/supported value */ switch (val) { case BLADERF_RX_MUX_BASEBAND: case BLADERF_RX_MUX_12BIT_COUNTER: case BLADERF_RX_MUX_32BIT_COUNTER: case BLADERF_RX_MUX_DIGITAL_LOOPBACK: *mode = val; break; default: *mode = BLADERF_RX_MUX_INVALID; status = BLADERF_ERR_UNEXPECTED; log_debug("Invalid rx mux mode %d read from config gpio\n", val); } return status; } /******************************************************************************/ /* Low-level VCTCXO Tamer Mode */ /******************************************************************************/ static int bladerf1_set_vctcxo_tamer_mode(struct bladerf *dev, bladerf_vctcxo_tamer_mode mode) { struct bladerf1_board_data *board_data = dev->board_data; CHECK_BOARD_STATE(STATE_INITIALIZED); if (!have_cap(board_data->capabilities, BLADERF_CAP_VCTCXO_TAMING_MODE)) { log_debug("FPGA %s does not support VCTCXO taming via an input source\n", board_data->fpga_version.describe); return BLADERF_ERR_UNSUPPORTED; } return dev->backend->set_vctcxo_tamer_mode(dev, mode); } static int bladerf1_get_vctcxo_tamer_mode(struct bladerf *dev, bladerf_vctcxo_tamer_mode *mode) { struct bladerf1_board_data *board_data = dev->board_data; CHECK_BOARD_STATE(STATE_INITIALIZED); if (!have_cap(board_data->capabilities, BLADERF_CAP_VCTCXO_TAMING_MODE)) { log_debug("FPGA %s does not support VCTCXO taming via an input source\n", board_data->fpga_version.describe); return BLADERF_ERR_UNSUPPORTED; } return dev->backend->get_vctcxo_tamer_mode(dev, mode); } /******************************************************************************/ /* Low-level VCTCXO Trim DAC access */ /******************************************************************************/ static int bladerf1_get_vctcxo_trim(struct bladerf *dev, uint16_t *trim) { struct bladerf1_board_data *board_data = dev->board_data; CHECK_BOARD_STATE(STATE_FIRMWARE_LOADED); *trim = board_data->dac_trim; return 0; } static int bladerf1_trim_dac_read(struct bladerf *dev, uint16_t *trim) { struct bladerf1_board_data *board_data = dev->board_data; CHECK_BOARD_STATE(STATE_FPGA_LOADED); if (!have_cap(board_data->capabilities, BLADERF_CAP_VCTCXO_TRIMDAC_READ)) { log_debug("FPGA %s does not support VCTCXO trimdac readback.\n", board_data->fpga_version.describe); return BLADERF_ERR_UNSUPPORTED; } return dac161s055_read(dev, trim); } static int bladerf1_trim_dac_write(struct bladerf *dev, uint16_t trim) { CHECK_BOARD_STATE(STATE_FPGA_LOADED); return dac161s055_write(dev, trim); } /******************************************************************************/ /* Low-level Trigger control access */ /******************************************************************************/ static int bladerf1_read_trigger(struct bladerf *dev, bladerf_channel ch, bladerf_trigger_signal trigger, uint8_t *val) { CHECK_BOARD_STATE(STATE_FPGA_LOADED); return fpga_trigger_read(dev, ch, trigger, val); } static int bladerf1_write_trigger(struct bladerf *dev, bladerf_channel ch, bladerf_trigger_signal trigger, uint8_t val) { CHECK_BOARD_STATE(STATE_FPGA_LOADED); return fpga_trigger_write(dev, ch, trigger, val); } /******************************************************************************/ /* Low-level Wishbone Master access */ /******************************************************************************/ static int bladerf1_wishbone_master_read(struct bladerf *dev, uint32_t addr, uint32_t *data) { CHECK_BOARD_STATE(STATE_FPGA_LOADED); return dev->backend->wishbone_master_read(dev, addr, data); } static int bladerf1_wishbone_master_write(struct bladerf *dev, uint32_t addr, uint32_t data) { CHECK_BOARD_STATE(STATE_FPGA_LOADED); return dev->backend->wishbone_master_write(dev, addr, data); } /******************************************************************************/ /* Low-level Configuration GPIO access */ /******************************************************************************/ static int bladerf1_config_gpio_read(struct bladerf *dev, uint32_t *val) { CHECK_BOARD_STATE(STATE_FPGA_LOADED); return dev->backend->config_gpio_read(dev, val); } static int bladerf1_config_gpio_write(struct bladerf *dev, uint32_t val) { CHECK_BOARD_STATE(STATE_FPGA_LOADED); return dev->backend->config_gpio_write(dev, val); } /******************************************************************************/ /* Low-level SPI Flash access */ /******************************************************************************/ static int bladerf1_erase_flash(struct bladerf *dev, uint32_t erase_block, uint32_t count) { CHECK_BOARD_STATE(STATE_FIRMWARE_LOADED); return spi_flash_erase(dev, erase_block, count); } static int bladerf1_read_flash(struct bladerf *dev, uint8_t *buf, uint32_t page, uint32_t count) { CHECK_BOARD_STATE(STATE_FIRMWARE_LOADED); return spi_flash_read(dev, buf, page, count); } static int bladerf1_write_flash(struct bladerf *dev, const uint8_t *buf, uint32_t page, uint32_t count) { CHECK_BOARD_STATE(STATE_FIRMWARE_LOADED); return spi_flash_write(dev, buf, page, count); } /******************************************************************************/ /* Expansion support */ /******************************************************************************/ static int bladerf1_expansion_attach(struct bladerf *dev, bladerf_xb xb) { struct bladerf1_board_data *board_data = dev->board_data; bladerf_xb attached; int status; CHECK_BOARD_STATE(STATE_INITIALIZED); status = dev->board->expansion_get_attached(dev, &attached); if (status != 0) { return status; } if (xb != attached && attached != BLADERF_XB_NONE) { log_debug("%s: Switching XB types is not supported.\n", __FUNCTION__); return BLADERF_ERR_UNSUPPORTED; } if (xb == BLADERF_XB_100) { if (!have_cap(board_data->capabilities, BLADERF_CAP_MASKED_XBIO_WRITE)) { log_debug("%s: XB100 support requires FPGA v0.4.1 or later.\n", __FUNCTION__); return BLADERF_ERR_UNSUPPORTED; } log_verbose("Attaching XB100\n"); status = xb100_attach(dev); if (status != 0) { return status; } log_verbose("Enabling XB100\n"); status = xb100_enable(dev, true); if (status != 0) { return status; } log_verbose("Initializing XB100\n"); status = xb100_init(dev); if (status != 0) { return status; } } else if (xb == BLADERF_XB_200) { if (!have_cap(board_data->capabilities, BLADERF_CAP_XB200)) { log_debug("%s: XB200 support requires FPGA v0.0.5 or later\n", __FUNCTION__); return BLADERF_ERR_UPDATE_FPGA; } log_verbose("Attaching XB200\n"); status = xb200_attach(dev); if (status != 0) { return status; } log_verbose("Enabling XB200\n"); status = xb200_enable(dev, true); if (status != 0) { return status; } log_verbose("Initializing XB200\n"); status = xb200_init(dev); if (status != 0) { return status; } } else if (xb == BLADERF_XB_300) { log_verbose("Attaching XB300\n"); status = xb300_attach(dev); if (status != 0) { return status; } log_verbose("Enabling XB300\n"); status = xb300_enable(dev, true); if (status != 0) { return status; } log_verbose("Initializing XB300\n"); status = xb300_init(dev); if (status != 0) { return status; } } else if (xb == BLADERF_XB_NONE) { log_debug("%s: Disabling an attached XB is not supported.\n", __FUNCTION__); return BLADERF_ERR_UNSUPPORTED; } else { log_debug("%s: Unknown xb type: %d\n", __FUNCTION__, xb); return BLADERF_ERR_INVAL; } /* Cache what we have attached in our device handle to alleviate the * need to go read the device state */ dev->xb = xb; return 0; } static int bladerf1_expansion_get_attached(struct bladerf *dev, bladerf_xb *xb) { int status; CHECK_BOARD_STATE(STATE_FPGA_LOADED); switch (dev->xb) { case BLADERF_XB_NONE: case BLADERF_XB_100: case BLADERF_XB_200: case BLADERF_XB_300: *xb = dev->xb; status = 0; break; default: log_debug("Device handle contains invalid XB id: %d\n", dev->xb); status = BLADERF_ERR_UNEXPECTED; break; } return status; } /******************************************************************************/ /* Board binding */ /******************************************************************************/ const struct board_fns bladerf1_board_fns = { FIELD_INIT(.matches, bladerf1_matches), FIELD_INIT(.open, bladerf1_open), FIELD_INIT(.close, bladerf1_close), FIELD_INIT(.device_speed, bladerf1_device_speed), FIELD_INIT(.get_serial, bladerf1_get_serial), FIELD_INIT(.get_fpga_size, bladerf1_get_fpga_size), FIELD_INIT(.get_fpga_bytes, bladerf1_get_fpga_bytes), FIELD_INIT(.get_flash_size, bladerf1_get_flash_size), FIELD_INIT(.is_fpga_configured, bladerf1_is_fpga_configured), FIELD_INIT(.get_fpga_source, bladerf1_get_fpga_source), FIELD_INIT(.get_capabilities, bladerf1_get_capabilities), FIELD_INIT(.get_channel_count, bladerf1_get_channel_count), FIELD_INIT(.get_fpga_version, bladerf1_get_fpga_version), FIELD_INIT(.get_fw_version, bladerf1_get_fw_version), FIELD_INIT(.set_gain, bladerf1_set_gain), FIELD_INIT(.get_gain, bladerf1_get_gain), FIELD_INIT(.set_gain_mode, bladerf1_set_gain_mode), FIELD_INIT(.get_gain_mode, bladerf1_get_gain_mode), FIELD_INIT(.get_gain_modes, bladerf1_get_gain_modes), FIELD_INIT(.get_gain_range, bladerf1_get_gain_range), FIELD_INIT(.set_gain_stage, bladerf1_set_gain_stage), FIELD_INIT(.get_gain_stage, bladerf1_get_gain_stage), FIELD_INIT(.get_gain_stage_range, bladerf1_get_gain_stage_range), FIELD_INIT(.get_gain_stages, bladerf1_get_gain_stages), FIELD_INIT(.set_sample_rate, bladerf1_set_sample_rate), FIELD_INIT(.set_rational_sample_rate, bladerf1_set_rational_sample_rate), FIELD_INIT(.get_sample_rate, bladerf1_get_sample_rate), FIELD_INIT(.get_sample_rate_range, bladerf1_get_sample_rate_range), FIELD_INIT(.get_rational_sample_rate, bladerf1_get_rational_sample_rate), FIELD_INIT(.set_bandwidth, bladerf1_set_bandwidth), FIELD_INIT(.get_bandwidth, bladerf1_get_bandwidth), FIELD_INIT(.get_bandwidth_range, bladerf1_get_bandwidth_range), FIELD_INIT(.get_frequency, bladerf1_get_frequency), FIELD_INIT(.set_frequency, bladerf1_set_frequency), FIELD_INIT(.get_frequency_range, bladerf1_get_frequency_range), FIELD_INIT(.select_band, bladerf1_select_band), FIELD_INIT(.set_rf_port, bladerf1_set_rf_port), FIELD_INIT(.get_rf_port, bladerf1_get_rf_port), FIELD_INIT(.get_rf_ports, bladerf1_get_rf_ports), FIELD_INIT(.get_quick_tune, bladerf1_get_quick_tune), FIELD_INIT(.schedule_retune, bladerf1_schedule_retune), FIELD_INIT(.cancel_scheduled_retunes, bladerf1_cancel_scheduled_retunes), FIELD_INIT(.get_correction, bladerf1_get_correction), FIELD_INIT(.set_correction, bladerf1_set_correction), FIELD_INIT(.trigger_init, bladerf1_trigger_init), FIELD_INIT(.trigger_arm, bladerf1_trigger_arm), FIELD_INIT(.trigger_fire, bladerf1_trigger_fire), FIELD_INIT(.trigger_state, bladerf1_trigger_state), FIELD_INIT(.enable_module, bladerf1_enable_module), FIELD_INIT(.init_stream, bladerf1_init_stream), FIELD_INIT(.stream, bladerf1_stream), FIELD_INIT(.submit_stream_buffer, bladerf1_submit_stream_buffer), FIELD_INIT(.deinit_stream, bladerf1_deinit_stream), FIELD_INIT(.set_stream_timeout, bladerf1_set_stream_timeout), FIELD_INIT(.get_stream_timeout, bladerf1_get_stream_timeout), FIELD_INIT(.sync_config, bladerf1_sync_config), FIELD_INIT(.sync_tx, bladerf1_sync_tx), FIELD_INIT(.sync_rx, bladerf1_sync_rx), FIELD_INIT(.get_timestamp, bladerf1_get_timestamp), FIELD_INIT(.load_fpga, bladerf1_load_fpga), FIELD_INIT(.flash_fpga, bladerf1_flash_fpga), FIELD_INIT(.erase_stored_fpga, bladerf1_erase_stored_fpga), FIELD_INIT(.flash_firmware, bladerf1_flash_firmware), FIELD_INIT(.device_reset, bladerf1_device_reset), FIELD_INIT(.set_tuning_mode, bladerf1_set_tuning_mode), FIELD_INIT(.get_tuning_mode, bladerf1_get_tuning_mode), FIELD_INIT(.get_loopback_modes, bladerf1_get_loopback_modes), FIELD_INIT(.set_loopback, bladerf1_set_loopback), FIELD_INIT(.get_loopback, bladerf1_get_loopback), FIELD_INIT(.get_rx_mux, bladerf1_get_rx_mux), FIELD_INIT(.set_rx_mux, bladerf1_set_rx_mux), FIELD_INIT(.set_vctcxo_tamer_mode, bladerf1_set_vctcxo_tamer_mode), FIELD_INIT(.get_vctcxo_tamer_mode, bladerf1_get_vctcxo_tamer_mode), FIELD_INIT(.get_vctcxo_trim, bladerf1_get_vctcxo_trim), FIELD_INIT(.trim_dac_read, bladerf1_trim_dac_read), FIELD_INIT(.trim_dac_write, bladerf1_trim_dac_write), FIELD_INIT(.read_trigger, bladerf1_read_trigger), FIELD_INIT(.write_trigger, bladerf1_write_trigger), FIELD_INIT(.wishbone_master_read, bladerf1_wishbone_master_read), FIELD_INIT(.wishbone_master_write, bladerf1_wishbone_master_write), FIELD_INIT(.config_gpio_read, bladerf1_config_gpio_read), FIELD_INIT(.config_gpio_write, bladerf1_config_gpio_write), FIELD_INIT(.erase_flash, bladerf1_erase_flash), FIELD_INIT(.read_flash, bladerf1_read_flash), FIELD_INIT(.write_flash, bladerf1_write_flash), FIELD_INIT(.expansion_attach, bladerf1_expansion_attach), FIELD_INIT(.expansion_get_attached, bladerf1_expansion_get_attached), FIELD_INIT(.name, "bladerf1"), }; /****************************************************************************** ****************************************************************************** * bladeRF1-specific Functions * ****************************************************************************** ******************************************************************************/ /******************************************************************************/ /* TX Gain */ /******************************************************************************/ int bladerf_set_txvga2(struct bladerf *dev, int gain) { int status; if (dev->board != &bladerf1_board_fns) return BLADERF_ERR_UNSUPPORTED; MUTEX_LOCK(&dev->lock); CHECK_BOARD_STATE_LOCKED(STATE_INITIALIZED); status = lms_txvga2_set_gain(dev, gain); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_get_txvga2(struct bladerf *dev, int *gain) { int status; if (dev->board != &bladerf1_board_fns) return BLADERF_ERR_UNSUPPORTED; MUTEX_LOCK(&dev->lock); CHECK_BOARD_STATE_LOCKED(STATE_INITIALIZED); status = lms_txvga2_get_gain(dev, gain); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_set_txvga1(struct bladerf *dev, int gain) { int status; if (dev->board != &bladerf1_board_fns) return BLADERF_ERR_UNSUPPORTED; MUTEX_LOCK(&dev->lock); CHECK_BOARD_STATE_LOCKED(STATE_INITIALIZED); status = lms_txvga1_set_gain(dev, gain); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_get_txvga1(struct bladerf *dev, int *gain) { int status; if (dev->board != &bladerf1_board_fns) return BLADERF_ERR_UNSUPPORTED; MUTEX_LOCK(&dev->lock); CHECK_BOARD_STATE_LOCKED(STATE_INITIALIZED); status = lms_txvga1_get_gain(dev, gain); MUTEX_UNLOCK(&dev->lock); return status; } /******************************************************************************/ /* RX Gain */ /******************************************************************************/ int bladerf_set_lna_gain(struct bladerf *dev, bladerf_lna_gain gain) { int status; if (dev->board != &bladerf1_board_fns) return BLADERF_ERR_UNSUPPORTED; MUTEX_LOCK(&dev->lock); CHECK_BOARD_STATE_LOCKED(STATE_INITIALIZED); status = lms_lna_set_gain(dev, gain); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_get_lna_gain(struct bladerf *dev, bladerf_lna_gain *gain) { int status; if (dev->board != &bladerf1_board_fns) return BLADERF_ERR_UNSUPPORTED; MUTEX_LOCK(&dev->lock); CHECK_BOARD_STATE_LOCKED(STATE_INITIALIZED); status = lms_lna_get_gain(dev, gain); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_set_rxvga1(struct bladerf *dev, int gain) { int status; if (dev->board != &bladerf1_board_fns) return BLADERF_ERR_UNSUPPORTED; MUTEX_LOCK(&dev->lock); CHECK_BOARD_STATE_LOCKED(STATE_INITIALIZED); status = lms_rxvga1_set_gain(dev, gain); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_get_rxvga1(struct bladerf *dev, int *gain) { int status; if (dev->board != &bladerf1_board_fns) return BLADERF_ERR_UNSUPPORTED; MUTEX_LOCK(&dev->lock); CHECK_BOARD_STATE_LOCKED(STATE_INITIALIZED); status = lms_rxvga1_get_gain(dev, gain); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_set_rxvga2(struct bladerf *dev, int gain) { int status; if (dev->board != &bladerf1_board_fns) return BLADERF_ERR_UNSUPPORTED; MUTEX_LOCK(&dev->lock); CHECK_BOARD_STATE_LOCKED(STATE_INITIALIZED); status = lms_rxvga2_set_gain(dev, gain); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_get_rxvga2(struct bladerf *dev, int *gain) { int status; if (dev->board != &bladerf1_board_fns) return BLADERF_ERR_UNSUPPORTED; MUTEX_LOCK(&dev->lock); CHECK_BOARD_STATE_LOCKED(STATE_INITIALIZED); status = lms_rxvga2_get_gain(dev, gain); MUTEX_UNLOCK(&dev->lock); return status; } /******************************************************************************/ /* LPF Bypass */ /******************************************************************************/ int bladerf_set_lpf_mode(struct bladerf *dev, bladerf_channel ch, bladerf_lpf_mode mode) { int status; if (dev->board != &bladerf1_board_fns) return BLADERF_ERR_UNSUPPORTED; MUTEX_LOCK(&dev->lock); CHECK_BOARD_STATE_LOCKED(STATE_INITIALIZED); status = lms_lpf_set_mode(dev, ch, mode); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_get_lpf_mode(struct bladerf *dev, bladerf_channel ch, bladerf_lpf_mode *mode) { int status; if (dev->board != &bladerf1_board_fns) return BLADERF_ERR_UNSUPPORTED; MUTEX_LOCK(&dev->lock); CHECK_BOARD_STATE_LOCKED(STATE_INITIALIZED); status = lms_lpf_get_mode(dev, ch, mode); MUTEX_UNLOCK(&dev->lock); return status; } /******************************************************************************/ /* Sample Internal/Direct */ /******************************************************************************/ int bladerf_get_sampling(struct bladerf *dev, bladerf_sampling *sampling) { int status; if (dev->board != &bladerf1_board_fns) return BLADERF_ERR_UNSUPPORTED; MUTEX_LOCK(&dev->lock); CHECK_BOARD_STATE_LOCKED(STATE_INITIALIZED); status = lms_get_sampling(dev, sampling); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_set_sampling(struct bladerf *dev, bladerf_sampling sampling) { int status; if (dev->board != &bladerf1_board_fns) return BLADERF_ERR_UNSUPPORTED; MUTEX_LOCK(&dev->lock); CHECK_BOARD_STATE_LOCKED(STATE_INITIALIZED); status = lms_select_sampling(dev, sampling); MUTEX_UNLOCK(&dev->lock); return status; } /******************************************************************************/ /* SMB Clock Configuration */ /******************************************************************************/ int bladerf_get_smb_mode(struct bladerf *dev, bladerf_smb_mode *mode) { int status; if (dev->board != &bladerf1_board_fns) return BLADERF_ERR_UNSUPPORTED; MUTEX_LOCK(&dev->lock); CHECK_BOARD_STATE_LOCKED(STATE_INITIALIZED); status = smb_clock_get_mode(dev, mode); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_set_smb_mode(struct bladerf *dev, bladerf_smb_mode mode) { int status; if (dev->board != &bladerf1_board_fns) return BLADERF_ERR_UNSUPPORTED; MUTEX_LOCK(&dev->lock); CHECK_BOARD_STATE_LOCKED(STATE_INITIALIZED); status = smb_clock_set_mode(dev, mode); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_get_smb_frequency(struct bladerf *dev, unsigned int *rate) { int status; if (dev->board != &bladerf1_board_fns) return BLADERF_ERR_UNSUPPORTED; MUTEX_LOCK(&dev->lock); CHECK_BOARD_STATE_LOCKED(STATE_INITIALIZED); status = si5338_get_smb_freq(dev, rate); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_set_smb_frequency(struct bladerf *dev, uint32_t rate, uint32_t *actual) { int status; if (dev->board != &bladerf1_board_fns) return BLADERF_ERR_UNSUPPORTED; MUTEX_LOCK(&dev->lock); CHECK_BOARD_STATE_LOCKED(STATE_INITIALIZED); status = si5338_set_smb_freq(dev, rate, actual); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_get_rational_smb_frequency(struct bladerf *dev, struct bladerf_rational_rate *rate) { int status; if (dev->board != &bladerf1_board_fns) return BLADERF_ERR_UNSUPPORTED; MUTEX_LOCK(&dev->lock); CHECK_BOARD_STATE_LOCKED(STATE_INITIALIZED); status = si5338_get_rational_smb_freq(dev, rate); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_set_rational_smb_frequency(struct bladerf *dev, struct bladerf_rational_rate *rate, struct bladerf_rational_rate *actual) { int status; if (dev->board != &bladerf1_board_fns) return BLADERF_ERR_UNSUPPORTED; MUTEX_LOCK(&dev->lock); CHECK_BOARD_STATE_LOCKED(STATE_INITIALIZED); status = si5338_set_rational_smb_freq(dev, rate, actual); MUTEX_UNLOCK(&dev->lock); return status; } /******************************************************************************/ /* DC Calibration */ /******************************************************************************/ int bladerf_calibrate_dc(struct bladerf *dev, bladerf_cal_module module) { int status; if (dev->board != &bladerf1_board_fns) return BLADERF_ERR_UNSUPPORTED; MUTEX_LOCK(&dev->lock); CHECK_BOARD_STATE_LOCKED(STATE_INITIALIZED); status = lms_calibrate_dc(dev, module); MUTEX_UNLOCK(&dev->lock); return status; } /******************************************************************************/ /* Low-level Si5338 access */ /******************************************************************************/ int bladerf_si5338_read(struct bladerf *dev, uint8_t address, uint8_t *val) { int status; if (dev->board != &bladerf1_board_fns) return BLADERF_ERR_UNSUPPORTED; MUTEX_LOCK(&dev->lock); CHECK_BOARD_STATE_LOCKED(STATE_FPGA_LOADED); status = dev->backend->si5338_read(dev,address,val); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_si5338_write(struct bladerf *dev, uint8_t address, uint8_t val) { int status; if (dev->board != &bladerf1_board_fns) return BLADERF_ERR_UNSUPPORTED; MUTEX_LOCK(&dev->lock); CHECK_BOARD_STATE_LOCKED(STATE_FPGA_LOADED); status = dev->backend->si5338_write(dev,address,val); MUTEX_UNLOCK(&dev->lock); return status; } /******************************************************************************/ /* Low-level LMS access */ /******************************************************************************/ int bladerf_lms_read(struct bladerf *dev, uint8_t address, uint8_t *val) { int status; if (dev->board != &bladerf1_board_fns) return BLADERF_ERR_UNSUPPORTED; MUTEX_LOCK(&dev->lock); CHECK_BOARD_STATE_LOCKED(STATE_FPGA_LOADED); status = dev->backend->lms_read(dev,address,val); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_lms_write(struct bladerf *dev, uint8_t address, uint8_t val) { int status; if (dev->board != &bladerf1_board_fns) return BLADERF_ERR_UNSUPPORTED; MUTEX_LOCK(&dev->lock); CHECK_BOARD_STATE_LOCKED(STATE_FPGA_LOADED); status = dev->backend->lms_write(dev,address,val); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_lms_set_dc_cals(struct bladerf *dev, const struct bladerf_lms_dc_cals *dc_cals) { int status; if (dev->board != &bladerf1_board_fns) return BLADERF_ERR_UNSUPPORTED; MUTEX_LOCK(&dev->lock); CHECK_BOARD_STATE_LOCKED(STATE_INITIALIZED); status = lms_set_dc_cals(dev, dc_cals); MUTEX_UNLOCK(&dev->lock); return status; } int bladerf_lms_get_dc_cals(struct bladerf *dev, struct bladerf_lms_dc_cals *dc_cals) { int status; if (dev->board != &bladerf1_board_fns) return BLADERF_ERR_UNSUPPORTED; MUTEX_LOCK(&dev->lock); CHECK_BOARD_STATE_LOCKED(STATE_INITIALIZED); status = lms_get_dc_cals(dev, dc_cals); MUTEX_UNLOCK(&dev->lock); return status; } /******************************************************************************/ /* Low-level XB SPI access */ /******************************************************************************/ int bladerf_xb_spi_write(struct bladerf *dev, uint32_t val) { int status; if (dev->board != &bladerf1_board_fns) return BLADERF_ERR_UNSUPPORTED; MUTEX_LOCK(&dev->lock); CHECK_BOARD_STATE_LOCKED(STATE_FPGA_LOADED); status = dev->backend->xb_spi(dev, val); MUTEX_UNLOCK(&dev->lock); return status; } bladeRF-2024.05/host/libraries/libbladeRF/src/board/bladerf1/calibration.c000066400000000000000000000405501457144405000261050ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* The binary DC calibration data is stored as follows. All values are * little-endian byte order. * * 0x0000 [uint16_t: Fixed value of 0x9a51] * 0x0002 [uint32_t: Reserved. Set to 0x00000000] * 0x0006 [uint32_t: Table format version] * 0x000a [uint32_t: Number of entries] * 0x000e [uint8_t: LMS LPF tuning register value] * 0x000f [uint8_t: LMS TX LPF I register value] * 0x0010 [uint8_t: LMS TX LPF Q register value] * 0x0011 [uint8_t: LMS RX LPF I register value] * 0x0012 [uint8_t: LMS RX LPF Q register value] * 0x0013 [uint8_t: LMS DC REF register value] * 0x0014 [uint8_t: LMS RX VGA2a I register value] * 0x0015 [uint8_t: LMS RX VGA2a Q register value] * 0x0016 [uint8_t: LMS RX VGA2b I register value] * 0x0017 [uint8_t: LMS RX VGA2b Q register value] * 0x0018 [Start of table entries] * * Where a table entry is: * [uint32_t: Frequency] * [int16_t: DC I correction value] * [int16_t: DC Q correction value] */ #include #include #include #include #include "host_config.h" #include "minmax.h" #include "calibration.h" #ifdef TEST_DC_CAL_TABLE # include # define SHORT_SEARCH 4 # define WARN(str) fprintf(stderr, str) #else # include "log.h" # define SHORT_SEARCH 10 # define WARN(str) log_warning(str) #endif #define DC_CAL_TBL_MAGIC 0x1ab1 #define DC_CAL_TBL_META_SIZE 0x18 #define DC_CAL_TBL_ENTRY_SIZE (sizeof(uint32_t) + 2 * sizeof(int16_t)) #define DC_CAL_TBL_MIN_SIZE (DC_CAL_TBL_META_SIZE + DC_CAL_TBL_ENTRY_SIZE) static inline bool entry_matches(const struct dc_cal_tbl *tbl, unsigned int entry_idx, unsigned int freq) { if (entry_idx >= (tbl->n_entries - 1)) { return freq >= tbl->entries[entry_idx].freq; } else { return freq >= tbl->entries[entry_idx].freq && freq < tbl->entries[entry_idx + 1].freq; } } static unsigned int find_entry(const struct dc_cal_tbl *tbl, unsigned int curr_idx, unsigned int min_idx, unsigned int max_idx, unsigned int freq, bool *hit_limit) { /* Converged to a single entry - this is the best we can do */ if ((max_idx < min_idx) || (max_idx == min_idx && max_idx == curr_idx)) { *hit_limit = true; return curr_idx; } if (!entry_matches(tbl, curr_idx, freq)) { if (tbl->entries[curr_idx].freq > freq) { if (curr_idx > 0) { max_idx = (curr_idx - 1); } else { /* Lower limit hit - return first entry */ *hit_limit = true; return 0; } } else { if (curr_idx < (tbl->n_entries - 1)) { min_idx = curr_idx + 1; } else { /* Upper limit hit - return last entry */ *hit_limit = true; return tbl->n_entries - 1; } } curr_idx = min_idx + (max_idx - min_idx) / 2; return find_entry(tbl, curr_idx, min_idx, max_idx, freq, hit_limit); } else { return curr_idx; } } unsigned int dc_cal_tbl_lookup(const struct dc_cal_tbl *tbl, unsigned int freq) { unsigned int ret = 0; bool limit = false; /* Hit a limit before finding a match */ /* First check if we're at a nearby change. This is generally the case * when the frequecy change */ if (tbl->n_entries > SHORT_SEARCH) { const unsigned int min_idx = (unsigned int) i64_max(0, tbl->curr_idx - (int64_t)SHORT_SEARCH / 2); const unsigned int max_idx = (unsigned int) i64_min(tbl->n_entries - 1, tbl->curr_idx + SHORT_SEARCH / 2); ret = find_entry(tbl, tbl->curr_idx, min_idx, max_idx, freq, &limit); if (!limit) { return ret; } } return find_entry(tbl, tbl->curr_idx, 0, tbl->n_entries - 1, freq, &limit); } struct dc_cal_tbl * dc_cal_tbl_load(const uint8_t *buf, size_t buf_len) { struct dc_cal_tbl *ret; uint32_t i; uint16_t magic; if (buf_len < DC_CAL_TBL_MIN_SIZE) { return NULL; } memcpy(&magic, buf, sizeof(magic)); if (LE16_TO_HOST(magic) != DC_CAL_TBL_MAGIC) { log_debug("Invalid magic value in cal table: %d\n", magic); return NULL; } buf += sizeof(magic); ret = malloc(sizeof(ret[0])); if (ret == NULL) { return NULL; } buf += sizeof(uint32_t); /* Skip reserved bytes */ memcpy(&ret->version, buf, sizeof(ret->version)); ret->version = LE32_TO_HOST(ret->version); buf += sizeof(ret->version); memcpy(&ret->n_entries, buf, sizeof(ret->n_entries)); ret->n_entries = LE32_TO_HOST(ret->n_entries); buf += sizeof(ret->n_entries); if (buf_len < (DC_CAL_TBL_META_SIZE + DC_CAL_TBL_ENTRY_SIZE * ret->n_entries) ) { free(ret); return NULL; } ret->entries = malloc(sizeof(ret->entries[0]) * ret->n_entries); if (ret->entries == NULL) { free(ret); return NULL; } ret->reg_vals.lpf_tuning = *buf++; ret->reg_vals.tx_lpf_i = *buf++; ret->reg_vals.tx_lpf_q = *buf++; ret->reg_vals.rx_lpf_i = *buf++; ret->reg_vals.rx_lpf_q = *buf++; ret->reg_vals.dc_ref = *buf++; ret->reg_vals.rxvga2a_i = *buf++; ret->reg_vals.rxvga2a_q = *buf++; ret->reg_vals.rxvga2b_i = *buf++; ret->reg_vals.rxvga2b_q = *buf++; ret->curr_idx = ret->n_entries / 2; for (i = 0; i < ret->n_entries; i++) { memcpy(&ret->entries[i].freq, buf, sizeof(uint32_t)); buf += sizeof(uint32_t); memcpy(&ret->entries[i].dc_i, buf, sizeof(int16_t)); buf += sizeof(int16_t); memcpy(&ret->entries[i].dc_q, buf, sizeof(int16_t)); buf += sizeof(int16_t); ret->entries[i].freq = LE32_TO_HOST(ret->entries[i].freq); ret->entries[i].dc_i = LE32_TO_HOST(ret->entries[i].dc_i); ret->entries[i].dc_q = LE32_TO_HOST(ret->entries[i].dc_q); if (ret->version >= 2) { memcpy(&ret->entries[i].max_dc_i, buf, sizeof(int16_t)); buf += sizeof(int16_t); memcpy(&ret->entries[i].max_dc_q, buf, sizeof(int16_t)); buf += sizeof(int16_t); memcpy(&ret->entries[i].mid_dc_i, buf, sizeof(int16_t)); buf += sizeof(int16_t); memcpy(&ret->entries[i].mid_dc_q, buf, sizeof(int16_t)); buf += sizeof(int16_t); memcpy(&ret->entries[i].min_dc_i, buf, sizeof(int16_t)); buf += sizeof(int16_t); memcpy(&ret->entries[i].min_dc_q, buf, sizeof(int16_t)); buf += sizeof(int16_t); ret->entries[i].max_dc_i = LE32_TO_HOST(ret->entries[i].max_dc_i); ret->entries[i].max_dc_q = LE32_TO_HOST(ret->entries[i].max_dc_q); ret->entries[i].mid_dc_i = LE32_TO_HOST(ret->entries[i].mid_dc_i); ret->entries[i].mid_dc_q = LE32_TO_HOST(ret->entries[i].mid_dc_q); ret->entries[i].min_dc_i = LE32_TO_HOST(ret->entries[i].min_dc_i); ret->entries[i].min_dc_q = LE32_TO_HOST(ret->entries[i].min_dc_q); } } return ret; } int dc_cal_tbl_image_load(struct bladerf *dev, struct dc_cal_tbl **tbl, const char *img_file) { int status; struct bladerf_image *img; img = bladerf_alloc_image(dev, BLADERF_IMAGE_TYPE_INVALID, 0, 0); if (img == NULL) { return BLADERF_ERR_MEM; } status = bladerf_image_read(img, img_file); if (status != 0) { return status; } if (img->type == BLADERF_IMAGE_TYPE_RX_DC_CAL || img->type == BLADERF_IMAGE_TYPE_TX_DC_CAL) { *tbl = dc_cal_tbl_load(img->data, img->length); status = 0; } else { status = BLADERF_ERR_INVAL; } bladerf_free_image(img); return status; } /* Interpolate a y value given two points and a desired x value * * y = interp( (x0, y0), (x1, y1), x ) * * Returns */ static inline unsigned int interp(unsigned int x0, unsigned int y0, unsigned int x1, unsigned int y1, unsigned int x) { const float num = (float) y1 - y0; const float den = (float) x1 - x0; const float m = den == 0 ? FLT_MAX : num / den; const float y = (x - x0) * m + y0; return (unsigned int) y; } static inline void dc_cal_interp_entry(const struct dc_cal_tbl *tbl, unsigned int idx_low, unsigned int idx_high, unsigned int freq, struct dc_cal_entry *entry) { const unsigned int f_low = tbl->entries[idx_low].freq; const unsigned int f_high = tbl->entries[idx_high].freq; #define ENTRY_VAR(x) \ entry->x = (int16_t) interp(f_low, tbl->entries[idx_low].x, \ f_high, tbl->entries[idx_low].x, \ freq) ENTRY_VAR(dc_i); ENTRY_VAR(dc_q); ENTRY_VAR(max_dc_i); ENTRY_VAR(max_dc_q); ENTRY_VAR(mid_dc_i); ENTRY_VAR(mid_dc_q); ENTRY_VAR(min_dc_i); ENTRY_VAR(min_dc_q); } void dc_cal_tbl_entry(const struct dc_cal_tbl *tbl, unsigned int freq, struct dc_cal_entry *entry) { const unsigned int idx = dc_cal_tbl_lookup(tbl, freq); if (tbl->entries[idx].freq == freq) { memcpy(entry, &tbl->entries[idx], sizeof(struct dc_cal_entry)); } else if (idx == (tbl->n_entries - 1)) { dc_cal_interp_entry(tbl, idx - 1, idx, freq, entry); } else { dc_cal_interp_entry(tbl, idx, idx + 1, freq, entry); } } void dc_cal_tbl_free(struct dc_cal_tbl **tbl) { if (*tbl != NULL) { free((*tbl)->entries); free(*tbl); *tbl = NULL; } } #ifdef TEST_DC_CAL_TABLE #define ENTRY(f) { f, 0, 0 } #define TBL(entries, curr_idx) { \ entries != NULL ? sizeof(entries) / sizeof(entries[0]) : 0, \ curr_idx, entries \ } #define TEST_CASE(exp_idx, entries, default_idx, freq) { \ TBL(entries, default_idx), \ freq, \ exp_idx, \ exp_idx > -2, \ } struct dc_cal_entry unsorted_entries[] = { ENTRY(300e6), ENTRY(400e6), ENTRY(320e6), ENTRY(310e6), ENTRY(550e6), ENTRY(500e6) }; struct dc_cal_entry single_entry[] = { ENTRY(2.4e9) }; struct dc_cal_entry three_entries[] = { ENTRY(300e6), ENTRY(1.5e9), ENTRY(2.4e9) }; struct dc_cal_entry entries[] = { ENTRY(300e6), ENTRY(400e6), ENTRY(500e6), ENTRY(600e6), ENTRY(700e6), ENTRY(800e6), ENTRY(900e6), ENTRY(1.0e9), ENTRY(1.1e9), ENTRY(1.2e9), ENTRY(1.3e9), ENTRY(1.4e9), ENTRY(1.5e9), ENTRY(1.6e9), ENTRY(1.7e9), ENTRY(1.8e9), ENTRY(1.9e9), ENTRY(2.0e9), ENTRY(2.1e9), ENTRY(2.2e9), ENTRY(2.3e9), ENTRY(2.4e9), ENTRY(2.5e9), ENTRY(2.6e9), ENTRY(2.7e9), ENTRY(2.8e9), ENTRY(2.9e9), ENTRY(3.0e9), ENTRY(3.1e9), ENTRY(3.2e9), ENTRY(3.3e9), ENTRY(3.4e9), ENTRY(3.5e9), ENTRY(3.6e9), ENTRY(3.7e9), ENTRY(3.8e9), }; struct test { const struct dc_cal_tbl tbl; unsigned int freq; int expected_idx; bool check_result; } tests[] = { /* Invalid due to unsorted entries. These won't neccessarily work, * but shouldn't crash */ TEST_CASE(-2, unsorted_entries, 0, 300e6), TEST_CASE(-2, unsorted_entries, 1, 300e6), TEST_CASE(-2, unsorted_entries, 2, 300e6), TEST_CASE(-2, unsorted_entries, 3, 300e6), TEST_CASE(-2, unsorted_entries, 4, 300e6), TEST_CASE(-2, unsorted_entries, 5, 300e6), TEST_CASE(-2, unsorted_entries, 0, 310e6), TEST_CASE(-2, unsorted_entries, 1, 401e6), TEST_CASE(-2, unsorted_entries, 2, 550e6), TEST_CASE(-2, unsorted_entries, 3, 100e5), TEST_CASE(-2, unsorted_entries, 4, 3.8e9), TEST_CASE(-2, unsorted_entries, 5, 321e6), /* Single entry - should just return whatever is availble */ TEST_CASE(0, single_entry, 0, 300e6), TEST_CASE(0, single_entry, 0, 2.4e9), TEST_CASE(0, single_entry, 0, 3.8e9), /* Three entries, exact matches */ TEST_CASE(0, three_entries, 0, 300e6), TEST_CASE(0, three_entries, 1, 300e6), TEST_CASE(0, three_entries, 2, 300e6), TEST_CASE(1, three_entries, 0, 1.5e9), TEST_CASE(1, three_entries, 1, 1.5e9), TEST_CASE(1, three_entries, 2, 1.5e9), TEST_CASE(2, three_entries, 0, 2.4e9), TEST_CASE(2, three_entries, 1, 2.4e9), TEST_CASE(2, three_entries, 2, 2.4e9), /* Three entries, non-exact matches */ TEST_CASE(0, three_entries, 0, 435e6), TEST_CASE(0, three_entries, 1, 435e6), TEST_CASE(0, three_entries, 2, 435e6), TEST_CASE(1, three_entries, 0, 2.0e9), TEST_CASE(1, three_entries, 1, 2.0e9), TEST_CASE(1, three_entries, 2, 2.0e9), TEST_CASE(2, three_entries, 0, 3.8e9), TEST_CASE(2, three_entries, 1, 3.8e9), TEST_CASE(2, three_entries, 2, 3.8e9), /* Larger table, lower limits */ TEST_CASE(0, entries, 0, 0), TEST_CASE(0, entries, 0, 300e6), TEST_CASE(0, entries, 0, 350e6), TEST_CASE(0, entries, 17, 0), TEST_CASE(0, entries, 17, 300e6), TEST_CASE(0, entries, 17, 350e6), TEST_CASE(0, entries, 35, 0), TEST_CASE(0, entries, 35, 300e6), TEST_CASE(0, entries, 35, 350e6), /* Larger table, upper limits */ TEST_CASE(35, entries, 0, 3.8e9), TEST_CASE(35, entries, 0, 4e9), TEST_CASE(35, entries, 17, 3.8e9), TEST_CASE(35, entries, 17, 4e9), TEST_CASE(35, entries, 35, 3.8e9), TEST_CASE(35, entries, 35, 4e9), /* Larger table, exact matches */ TEST_CASE(4, entries, 0, 700e6), TEST_CASE(4, entries, 4, 700e6), TEST_CASE(4, entries, 15, 700e6), TEST_CASE(4, entries, 30, 700e6), TEST_CASE(4, entries, 35, 700e6), TEST_CASE(12, entries, 0, 1.5e9), TEST_CASE(12, entries, 12, 1.5e9), TEST_CASE(12, entries, 15, 1.5e9), TEST_CASE(12, entries, 30, 1.5e9), TEST_CASE(12, entries, 35, 1.5e9), TEST_CASE(30, entries, 0, 3.3e9), TEST_CASE(30, entries, 10, 3.3e9), TEST_CASE(30, entries, 20, 3.3e9), TEST_CASE(30, entries, 30, 3.3e9), TEST_CASE(30, entries, 35, 3.3e9), /* Larger table, approximate matches */ TEST_CASE(4, entries, 0, 701e6), TEST_CASE(4, entries, 4, 701e6), TEST_CASE(4, entries, 15, 701e6), TEST_CASE(4, entries, 30, 701e6), TEST_CASE(4, entries, 35, 701e6), TEST_CASE(12, entries, 0, 1.59e9), TEST_CASE(12, entries, 12, 1.59e9), TEST_CASE(12, entries, 15, 1.59e9), TEST_CASE(12, entries, 30, 1.59e9), TEST_CASE(12, entries, 35, 1.59e9), TEST_CASE(30, entries, 0, 3.35e9), TEST_CASE(30, entries, 10, 3.35e9), TEST_CASE(30, entries, 20, 3.35e9), TEST_CASE(30, entries, 30, 3.35e9), TEST_CASE(30, entries, 35, 3.35e9), }; static inline void print_entry(const struct dc_cal_tbl *t, const char *prefix, int idx) { if (idx >= 0) { fprintf(stderr, "%s: %u Hz\n", prefix, t->entries[idx].freq); } else { fprintf(stderr, "%s: None (%d)\n", prefix, idx); } } int main(void) { unsigned int i; unsigned int num_failures = 0; for (i = 0; i < sizeof(tests) / sizeof(tests[0]); i++) { const int expected_idx = tests[i].expected_idx; const int entry_idx = dc_cal_tbl_lookup(&tests[i].tbl, tests[i].freq); if (tests[i].check_result && entry_idx != expected_idx) { fprintf(stderr, "Test case %u: failed.\n", i); print_entry(&tests[i].tbl, " Got", entry_idx); print_entry(&tests[i].tbl, " Expected", expected_idx); num_failures++; } else { printf("Test case %u: passed.\n", i); } } return num_failures; } #endif bladeRF-2024.05/host/libraries/libbladeRF/src/board/bladerf1/calibration.h000066400000000000000000000061541457144405000261140ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef BLADERF1_CALIBRATION_H_ #define BLADERF1_CALIBRATION_H_ #include #include struct dc_cal_entry { unsigned int freq; /* Frequency (Hz) associated with this entry */ int16_t dc_i; int16_t dc_q; int16_t max_dc_i; int16_t max_dc_q; int16_t mid_dc_i; int16_t mid_dc_q; int16_t min_dc_i; int16_t min_dc_q; }; struct dc_cal_tbl { uint32_t version; uint32_t n_entries; struct bladerf_lms_dc_cals reg_vals; unsigned int curr_idx; struct dc_cal_entry *entries; /* Sorted (increasing) by freq */ }; extern struct dc_cal_tbl rx_cal_test; /** * Get the index of an (approximate) match from the specific dc cal table * * @param[in] tbl Table to search * @param[in] freq Desired frequency * * @return index into tbl->entries[]. */ unsigned int dc_cal_tbl_lookup(const struct dc_cal_tbl *tbl, unsigned int freq); /** * Get the DC cal values associated with the specified frequencies. If the * specified frequency is not in the table, the DC calibration values will * be interpolated from surrounding entries. * * @param[in] tbl Table to search * @param[in] freq Desired frequency * @param[out] entry Found or interpolated DC calibration values */ void dc_cal_tbl_entry(const struct dc_cal_tbl *tbl, unsigned int freq, struct dc_cal_entry *entry); /** * Load a DC calibration table from the provided data * * @param[in] buf Packed table data * @param[in] len Length of packed data, in bytes * * @return Loaded DC calibration table, or NULL on error */ struct dc_cal_tbl *dc_cal_tbl_load(const uint8_t *buf, size_t buf_len); /** * Load a DC calibration table from an image file * * @param[in] dev bladeRF device handle * @param[out] tbl DC calibration Table * @param[in] img_file Path to image file * * @return 0 on success, BLADERF_ERR_* value on failure */ int dc_cal_tbl_image_load(struct bladerf *dev, struct dc_cal_tbl **tbl, const char *img_file); /** * Free a DC calibration table * * @param[inout] tbl Pointer to table to free * * The table pointer will be set to NULL after freeing it. */ void dc_cal_tbl_free(struct dc_cal_tbl **tbl); #endif bladeRF-2024.05/host/libraries/libbladeRF/src/board/bladerf1/capabilities.c000066400000000000000000000071441457144405000262510ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2015 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include "log.h" #include "helpers/version.h" #include "capabilities.h" uint64_t bladerf1_get_fw_capabilities(const struct bladerf_version *fw_version) { uint64_t capabilities = 0; if (version_fields_greater_or_equal(fw_version, 1, 7, 1)) { capabilities |= BLADERF_CAP_FW_LOOPBACK; } if (version_fields_greater_or_equal(fw_version, 1, 8, 0)) { capabilities |= BLADERF_CAP_QUERY_DEVICE_READY; } if (version_fields_greater_or_equal(fw_version, 1, 9, 0)) { capabilities |= BLADERF_CAP_READ_FW_LOG_ENTRY; } if (version_fields_greater_or_equal(fw_version, 2, 3, 0)) { capabilities |= BLADERF_CAP_FW_FLASH_ID; } if (version_fields_greater_or_equal(fw_version, 2, 3, 1)) { capabilities |= BLADERF_CAP_FW_FPGA_SOURCE; } if (version_fields_greater_or_equal(fw_version, 2, 4, 0)) { capabilities |= BLADERF_CAP_FW_SHORT_PACKET; } return capabilities; } uint64_t bladerf1_get_fpga_capabilities(const struct bladerf_version *fpga_version) { uint64_t capabilities = 0; if (version_fields_greater_or_equal(fpga_version, 0, 0, 4)) { capabilities |= BLADERF_CAP_UPDATED_DAC_ADDR; } if (version_fields_greater_or_equal(fpga_version, 0, 0, 5)) { capabilities |= BLADERF_CAP_XB200; } if (version_fields_greater_or_equal(fpga_version, 0, 1, 0)) { capabilities |= BLADERF_CAP_TIMESTAMPS; } if (version_fields_greater_or_equal(fpga_version, 0, 2, 0)) { capabilities |= BLADERF_CAP_FPGA_TUNING; capabilities |= BLADERF_CAP_SCHEDULED_RETUNE; } if (version_fields_greater_or_equal(fpga_version, 0, 3, 0)) { capabilities |= BLADERF_CAP_PKT_HANDLER_FMT; } if (version_fields_greater_or_equal(fpga_version, 0, 3, 2)) { capabilities |= BLADERF_CAP_VCTCXO_TRIMDAC_READ; } if (version_fields_greater_or_equal(fpga_version, 0, 4, 0)) { capabilities |= BLADERF_CAP_ATOMIC_NINT_NFRAC_WRITE; } if (version_fields_greater_or_equal(fpga_version, 0, 4, 1)) { capabilities |= BLADERF_CAP_MASKED_XBIO_WRITE; } if (version_fields_greater_or_equal(fpga_version, 0, 5, 0)) { capabilities |= BLADERF_CAP_VCTCXO_TAMING_MODE; } if (version_fields_greater_or_equal(fpga_version, 0, 6, 0)) { capabilities |= BLADERF_CAP_TRX_SYNC_TRIG; } if (version_fields_greater_or_equal(fpga_version, 0, 7, 0)) { capabilities |= BLADERF_CAP_AGC_DC_LUT; } if (version_fields_greater_or_equal(fpga_version, 0, 12, 0)) { capabilities |= BLADERF_CAP_FPGA_PACKET_META; } if (version_fields_greater_or_equal(fpga_version, 0, 15, 0)) { capabilities |= BLADERF_CAP_FPGA_8BIT_SAMPLES; } return capabilities; } bladeRF-2024.05/host/libraries/libbladeRF/src/board/bladerf1/capabilities.h000066400000000000000000000031261457144405000262520ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2015-2017 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* This file defines device capabilities added across libbladeRF, FX3, and FPGA * versions that we can check for */ #ifndef BLADERF1_CAPABILITIES_H_ #define BLADERF1_CAPABILITIES_H_ #include #include "board/board.h" #include "helpers/have_cap.h" /** * Determine device's firmware capabilities. * * @param[in] fw_version Firmware version * * @return Capabilities bitmask */ uint64_t bladerf1_get_fw_capabilities(const struct bladerf_version *fw_version); /** * Add capability bits based upon FPGA version stored in the device handle * * @param[in] fpga_version FPGA version * * @return Capabilities bitmask */ uint64_t bladerf1_get_fpga_capabilities( const struct bladerf_version *fpga_version); #endif bladeRF-2024.05/host/libraries/libbladeRF/src/board/bladerf1/compatibility.c000066400000000000000000000073471457144405000264760ustar00rootroot00000000000000#include "host_config.h" #include "helpers/version.h" /* Firmware-FPGA compatibility tables * * This list should be kept in decending order, such that the most recent * versions are first, and the last entry should contain the earliest version * that libbladeRF supports. */ #define VERSION(major, minor, patch) { major, minor, patch, NULL } static const struct compat fw_compat[] = { /* Firmware requires >= FPGA */ { VERSION(2, 4, 0), VERSION(0, 6, 0) }, { VERSION(2, 3, 2), VERSION(0, 0, 2) }, { VERSION(2, 3, 1), VERSION(0, 0, 2) }, { VERSION(2, 3, 0), VERSION(0, 0, 2) }, { VERSION(2, 2, 0), VERSION(0, 0, 2) }, { VERSION(2, 1, 1), VERSION(0, 0, 2) }, { VERSION(2, 1, 0), VERSION(0, 0, 2) }, { VERSION(2, 0, 0), VERSION(0, 0, 2) }, { VERSION(1, 9, 1), VERSION(0, 0, 2) }, { VERSION(1, 9, 0), VERSION(0, 0, 2) }, { VERSION(1, 8, 1), VERSION(0, 0, 2) }, { VERSION(1, 8, 0), VERSION(0, 0, 2) }, { VERSION(1, 7, 1), VERSION(0, 0, 2) }, { VERSION(1, 7, 0), VERSION(0, 0, 2) }, { VERSION(1, 6, 1), VERSION(0, 0, 2) }, { VERSION(1, 6, 0), VERSION(0, 0, 1) }, }; const struct version_compat_table bladerf1_fw_compat_table = {fw_compat, ARRAY_SIZE(fw_compat)}; static const struct compat fpga_compat[] = { /* FPGA requires >= Firmware */ { VERSION(0, 15, 1), VERSION(2, 4, 0) }, { VERSION(0, 15, 0), VERSION(2, 4, 0) }, { VERSION(0, 14, 0), VERSION(2, 4, 0) }, { VERSION(0, 12, 0), VERSION(2, 2, 0) }, { VERSION(0, 11, 1), VERSION(2, 1, 0) }, { VERSION(0, 11, 0), VERSION(1, 6, 1) }, { VERSION(0, 10, 2), VERSION(1, 6, 1) }, { VERSION(0, 10, 1), VERSION(1, 6, 1) }, { VERSION(0, 10, 0), VERSION(1, 6, 1) }, { VERSION(0, 9, 0), VERSION(1, 6, 1) }, { VERSION(0, 8, 0), VERSION(1, 6, 1) }, { VERSION(0, 7, 3), VERSION(1, 6, 1) }, { VERSION(0, 7, 2), VERSION(1, 6, 1) }, { VERSION(0, 7, 1), VERSION(1, 6, 1) }, { VERSION(0, 7, 0), VERSION(1, 6, 1) }, { VERSION(0, 6, 0), VERSION(1, 6, 1) }, { VERSION(0, 5, 0), VERSION(1, 6, 1) }, { VERSION(0, 4, 1), VERSION(1, 6, 1) }, { VERSION(0, 4, 0), VERSION(1, 6, 1) }, { VERSION(0, 3, 5), VERSION(1, 6, 1) }, { VERSION(0, 3, 4), VERSION(1, 6, 1) }, { VERSION(0, 3, 3), VERSION(1, 6, 1) }, { VERSION(0, 3, 2), VERSION(1, 6, 1) }, { VERSION(0, 3, 1), VERSION(1, 6, 1) }, { VERSION(0, 3, 0), VERSION(1, 6, 1) }, { VERSION(0, 2, 0), VERSION(1, 6, 1) }, { VERSION(0, 1, 2), VERSION(1, 6, 1) }, { VERSION(0, 1, 1), VERSION(1, 6, 1) }, { VERSION(0, 1, 0), VERSION(1, 6, 1) }, { VERSION(0, 0, 6), VERSION(1, 6, 1) }, { VERSION(0, 0, 5), VERSION(1, 6, 1) }, { VERSION(0, 0, 4), VERSION(1, 6, 1) }, { VERSION(0, 0, 3), VERSION(1, 6, 1) }, { VERSION(0, 0, 2), VERSION(1, 6, 1) }, { VERSION(0, 0, 1), VERSION(1, 6, 0) }, }; const struct version_compat_table bladerf1_fpga_compat_table = {fpga_compat, ARRAY_SIZE(fpga_compat)}; bladeRF-2024.05/host/libraries/libbladeRF/src/board/bladerf1/compatibility.h000066400000000000000000000003631457144405000264720ustar00rootroot00000000000000#ifndef BLADERF1_COMPATIBILITY_H_ #define BLADERF1_COMPATIBILITY_H_ #include "helpers/version.h" extern const struct version_compat_table bladerf1_fw_compat_table; extern const struct version_compat_table bladerf1_fpga_compat_table; #endif bladeRF-2024.05/host/libraries/libbladeRF/src/board/bladerf1/flash.c000066400000000000000000000400331457144405000247070ustar00rootroot00000000000000#include #include #include "log.h" #include "minmax.h" #include "misc.h" #include "conversions.h" #include "bladeRF.h" #include "board/board.h" #include "driver/spi_flash.h" #include "flash.h" #define OTP_BUFFER_SIZE 256 int spi_flash_write_fx3_fw(struct bladerf *dev, const uint8_t *image, size_t len) { int status; uint8_t *readback_buf; uint8_t *padded_image; uint32_t padded_image_len; /* Pad firwmare data out to a page size */ const uint32_t page_size = dev->flash_arch->psize_bytes; const uint32_t padding_len = (len % page_size == 0) ? 0 : page_size - (len % page_size); /* Flash page where FX3 firmware starts */ const uint32_t flash_page_fw = BLADERF_FLASH_ADDR_FIRMWARE / dev->flash_arch->psize_bytes; /* Flash erase block where FX3 firmware starts */ const uint32_t flash_eb_fw = BLADERF_FLASH_ADDR_FIRMWARE / dev->flash_arch->ebsize_bytes; /** Length of firmware region of flash, in erase blocks */ const uint32_t flash_eb_len_fw = BLADERF_FLASH_BYTE_LEN_FIRMWARE / dev->flash_arch->ebsize_bytes; if (len >= (UINT32_MAX - padding_len)) { return BLADERF_ERR_INVAL; } padded_image_len = (uint32_t) len + padding_len; readback_buf = malloc(padded_image_len); if (readback_buf == NULL) { return BLADERF_ERR_MEM; } padded_image = malloc(padded_image_len); if (padded_image == NULL) { free(readback_buf); return BLADERF_ERR_MEM; } /* Copy image */ memcpy(padded_image, image, len); /* Clear the padded region */ memset(padded_image + len, 0xFF, padded_image_len - len); /* Erase the entire firmware region */ status = spi_flash_erase(dev, flash_eb_fw, flash_eb_len_fw); if (status != 0) { log_debug("Failed to erase firmware region: %s\n", bladerf_strerror(status)); goto error; } /* Convert the image length to pages */ padded_image_len /= page_size; /* Write the firmware image to flash */ status = spi_flash_write(dev, padded_image, flash_page_fw, padded_image_len); if (status < 0) { log_debug("Failed to write firmware: %s\n", bladerf_strerror(status)); goto error; } /* Read back and double-check what we just wrote */ status = spi_flash_verify(dev, readback_buf, padded_image, flash_page_fw, padded_image_len); if (status != 0) { log_debug("Flash verification failed: %s\n", bladerf_strerror(status)); goto error; } error: free(padded_image); free(readback_buf); return status; } static inline void fill_fpga_metadata_page(struct bladerf *dev, uint8_t *metadata, size_t actual_bitstream_len) { char len_str[12]; int idx = 0; memset(len_str, 0, sizeof(len_str)); memset(metadata, 0xff, dev->flash_arch->psize_bytes); snprintf(len_str, sizeof(len_str), "%u", (unsigned int)actual_bitstream_len); binkv_encode_field((char *)metadata, dev->flash_arch->psize_bytes, &idx, "LEN", len_str); } static inline size_t get_flash_eb_len_fpga(struct bladerf *dev) { int status; size_t fpga_bytes; size_t eb_count; status = dev->board->get_fpga_bytes(dev, &fpga_bytes); if (status < 0) { return status; } eb_count = fpga_bytes / dev->flash_arch->ebsize_bytes; if ((fpga_bytes % dev->flash_arch->ebsize_bytes) > 0) { // Round up to nearest full block ++eb_count; } return eb_count; } #define METADATA_LEN 256 int spi_flash_write_fpga_bitstream(struct bladerf *dev, const uint8_t *bitstream, size_t len) { /* Pad data to be page-aligned */ const uint32_t page_size = dev->flash_arch->psize_bytes; const uint32_t padding_len = (len % page_size == 0) ? 0 : page_size - (len % page_size); /** Flash page where FPGA metadata and bitstream start */ const uint32_t flash_page_fpga = BLADERF_FLASH_ADDR_FPGA / dev->flash_arch->psize_bytes; /** Flash erase block where FPGA metadata and bitstream start */ const uint32_t flash_eb_fpga = BLADERF_FLASH_ADDR_FPGA / dev->flash_arch->ebsize_bytes; /** Length of entire FPGA region, in units of erase blocks */ const uint32_t flash_eb_len_fpga = (uint32_t)get_flash_eb_len_fpga(dev); assert(METADATA_LEN <= page_size); int status; uint8_t *readback_buf; uint8_t *padded_bitstream; uint8_t metadata[METADATA_LEN]; uint32_t padded_bitstream_len; if (len >= (UINT32_MAX - padding_len)) { return BLADERF_ERR_INVAL; } padded_bitstream_len = (uint32_t)len + padding_len; /* Fill in metadata with the *actual* FPGA bitstream length */ fill_fpga_metadata_page(dev, metadata, len); readback_buf = malloc(padded_bitstream_len); if (readback_buf == NULL) { return BLADERF_ERR_MEM; } padded_bitstream = malloc(padded_bitstream_len); if (padded_bitstream == NULL) { free(readback_buf); return BLADERF_ERR_MEM; } /* Copy bitstream */ memcpy(padded_bitstream, bitstream, len); /* Clear the padded region */ memset(padded_bitstream + len, 0xFF, padded_bitstream_len - len); /* Erase FPGA metadata and bitstream region */ status = spi_flash_erase(dev, flash_eb_fpga, flash_eb_len_fpga); if (status != 0) { log_debug("Failed to erase FPGA meta & bitstream regions: %s\n", bladerf_strerror(status)); goto error; } /* Write the metadata page */ status = spi_flash_write(dev, metadata, flash_page_fpga, 1); if (status != 0) { log_debug("Failed to write FPGA metadata page: %s\n", bladerf_strerror(status)); goto error; } /* Convert the padded bitstream length to pages */ padded_bitstream_len /= page_size; /* Write the padded bitstream */ status = spi_flash_write(dev, padded_bitstream, flash_page_fpga + 1, padded_bitstream_len); if (status != 0) { log_debug("Failed to write bitstream: %s\n", bladerf_strerror(status)); goto error; } /* Read back and verify metadata */ status = spi_flash_verify(dev, readback_buf, metadata, flash_page_fpga, 1); if (status != 0) { log_debug("Failed to verify metadata: %s\n", bladerf_strerror(status)); goto error; } /* Read back and verify the bitstream data */ status = spi_flash_verify(dev, readback_buf, padded_bitstream, flash_page_fpga + 1, padded_bitstream_len); if (status != 0) { log_debug("Failed to verify bitstream data: %s\n", bladerf_strerror(status)); goto error; } error: free(padded_bitstream); free(readback_buf); return status; } int spi_flash_erase_fpga(struct bladerf *dev) { int status; size_t fpga_bytes; status = dev->board->get_fpga_bytes(dev, &fpga_bytes); if (status < 0) { return status; } /** Flash erase block where FPGA metadata and bitstream start */ const uint32_t flash_eb_fpga = BLADERF_FLASH_ADDR_FPGA / dev->flash_arch->ebsize_bytes; /** Length of entire FPGA region, in units of erase blocks */ const uint32_t flash_eb_len_fpga = (uint32_t)get_flash_eb_len_fpga(dev); /* Erase the entire FPGA region, including both autoload metadata and the * actual bitstream data */ return spi_flash_erase(dev, flash_eb_fpga, flash_eb_len_fpga); } int spi_flash_read_otp(struct bladerf *dev, char *field, char *data, size_t data_size) { int status; char otp[OTP_BUFFER_SIZE]; memset(otp, 0xff, OTP_BUFFER_SIZE); status = dev->backend->get_otp(dev, otp); if (status < 0) return status; else return binkv_decode_field(otp, OTP_BUFFER_SIZE, field, data, data_size); } int spi_flash_read_cal(struct bladerf *dev, char *field, char *data, size_t data_size) { int status; char cal[CAL_BUFFER_SIZE]; status = dev->backend->get_cal(dev, cal); if (status < 0) return status; else return binkv_decode_field(cal, CAL_BUFFER_SIZE, field, data, data_size); } int spi_flash_read_serial(struct bladerf *dev, char *serial_buf) { int status; status = spi_flash_read_otp(dev, "S", serial_buf, BLADERF_SERIAL_LENGTH - 1); if (status < 0) { log_info("Unable to fetch serial number. Defaulting to 0's.\n"); memset(dev->ident.serial, '0', BLADERF_SERIAL_LENGTH - 1); /* Treat this as non-fatal */ status = 0; } serial_buf[BLADERF_SERIAL_LENGTH - 1] = '\0'; return status; } int spi_flash_read_vctcxo_trim(struct bladerf *dev, uint16_t *dac_trim) { int status; bool ok; int16_t trim; char tmp[7] = { 0 }; status = spi_flash_read_cal(dev, "DAC", tmp, sizeof(tmp) - 1); if (status < 0) { return status; } trim = str2uint(tmp, 0, 0xffff, &ok); if (ok == false) { return BLADERF_ERR_INVAL; } *dac_trim = trim; return 0; } int spi_flash_read_fpga_size(struct bladerf *dev, bladerf_fpga_size *fpga_size) { int status; char tmp[7] = { 0 }; status = spi_flash_read_cal(dev, "B", tmp, sizeof(tmp) - 1); if (status < 0) { return status; } if (!strcmp("40", tmp)) { *fpga_size = BLADERF_FPGA_40KLE; } else if(!strcmp("115", tmp)) { *fpga_size = BLADERF_FPGA_115KLE; } else if(!strcmp("A4", tmp)) { *fpga_size = BLADERF_FPGA_A4; } else if(!strcmp("A5", tmp)) { *fpga_size = BLADERF_FPGA_A5; } else if(!strcmp("A9", tmp)) { *fpga_size = BLADERF_FPGA_A9; } else { *fpga_size = BLADERF_FPGA_UNKNOWN; } return status; } int spi_flash_read_flash_id(struct bladerf *dev, uint8_t *mid, uint8_t *did) { int status; status = dev->backend->get_flash_id(dev, mid, did); return status; } int spi_flash_decode_flash_architecture(struct bladerf *dev, bladerf_fpga_size *fpga_size) { int status; struct bladerf_flash_arch *flash_arch; status = 0; flash_arch = dev->flash_arch; /* Fill in defaults */ flash_arch->tsize_bytes = 32 << 17; /* 32 Mbit */ flash_arch->psize_bytes = 256; flash_arch->ebsize_bytes = 64 << 10; /* 64 Kbyte */ flash_arch->status = STATUS_ASSUMED; /* First try to decode the MID/DID of the flash chip */ switch( flash_arch->manufacturer_id ) { case 0xC2: /* MACRONIX */ log_verbose( "Found SPI flash manufacturer: MACRONIX.\n" ); switch( flash_arch->device_id ) { case 0x36: log_verbose( "Found SPI flash device: MX25U3235E (32 Mbit).\n" ); flash_arch->tsize_bytes = 32 << 17; flash_arch->status = STATUS_SUCCESS; break; default: log_debug( "Unknown Macronix flash device ID.\n" ); status = BLADERF_ERR_UNEXPECTED; } break; case 0xEF: /* WINBOND */ log_verbose( "Found SPI flash manufacturer: WINBOND.\n" ); switch( flash_arch->device_id ) { case 0x15: log_verbose( "Found SPI flash device: W25Q32JV (32 Mbit).\n" ); flash_arch->tsize_bytes = 32 << 17; flash_arch->status = STATUS_SUCCESS; break; case 0x16: log_verbose( "Found SPI flash device: W25Q64JV (64 Mbit).\n" ); flash_arch->tsize_bytes = 64 << 17; flash_arch->status = STATUS_SUCCESS; break; case 0x17: log_verbose( "Found SPI flash device: W25Q128JV (128 Mbit).\n" ); flash_arch->tsize_bytes = 128 << 17; flash_arch->status = STATUS_SUCCESS; break; default: log_debug( "Unknown Winbond flash device ID [0x%02X].\n" , flash_arch->device_id ); status = BLADERF_ERR_UNEXPECTED; } break; default: log_debug( "Unknown flash manufacturer ID.\n" ); status = BLADERF_ERR_UNEXPECTED; } /* Could not decode flash MID/DID, so assume based on FPGA size */ if( status < 0 || flash_arch->status != STATUS_SUCCESS ) { if( (fpga_size == NULL) || (*fpga_size == BLADERF_FPGA_UNKNOWN) ) { log_debug( "Could not decode flash manufacturer/device ID and have " "an unknown FPGA size. Assume default flash " "architecture.\n" ); } else { switch( *fpga_size ) { case BLADERF_FPGA_A9: flash_arch->tsize_bytes = 128 << 17; break; default: flash_arch->tsize_bytes = 32 << 17; } log_debug( "Could not decode flash manufacturer/device ID, but " "found a %u kLE FPGA. Setting the most probable " "flash architecture.\n", *fpga_size ); } } flash_arch->num_pages = flash_arch->tsize_bytes / flash_arch->psize_bytes; flash_arch->num_ebs = flash_arch->tsize_bytes / flash_arch->ebsize_bytes; log_verbose("SPI flash total size = %u Mbit\n", (flash_arch->tsize_bytes >> 17)); log_verbose("SPI flash page size = %u bytes\n", flash_arch->psize_bytes); log_verbose("SPI flash erase block size = %u bytes\n", flash_arch->ebsize_bytes); log_verbose("SPI flash number of pages = %u\n", flash_arch->num_pages); log_verbose("SPI flash number of erase blocks = %u pages\n", flash_arch->num_ebs); return status; } int binkv_decode_field(char *ptr, int len, char *field, char *val, size_t maxlen) { int c; unsigned char *ub, *end; unsigned short a1, a2; size_t flen, wlen; flen = strlen(field); ub = (unsigned char *)ptr; end = ub + len; while (ub < end) { c = *ub; if (c == 0xff) // flash and OTP are 0xff if they've never been written to break; a1 = LE16_TO_HOST(*(unsigned short *)(&ub[c+1])); // read checksum a2 = zcrc(ub, c+1); // calculate checksum if (a1 == a2) { if (!strncmp((char *)ub + 1, field, flen)) { wlen = min_sz(c - flen, maxlen); strncpy(val, (char *)ub + 1 + flen, wlen); val[wlen] = 0; return 0; } } else { log_debug( "%s: Field checksum mismatch\n", __FUNCTION__); return BLADERF_ERR_INVAL; } ub += c + 3; //skip past `c' bytes, 2 byte CRC field, and 1 byte len field } return BLADERF_ERR_INVAL; } int binkv_encode_field(char *ptr, int len, int *idx, const char *field, const char *val) { int vlen, flen, tlen; flen = (int)strlen(field); vlen = (int)strlen(val); tlen = flen + vlen + 1; if (tlen >= 256 || *idx + tlen >= len) return BLADERF_ERR_MEM; ptr[*idx] = flen + vlen; strcpy(&ptr[*idx + 1], field); strcpy(&ptr[*idx + 1 + flen], val); *(unsigned short *)(&ptr[*idx + tlen ]) = HOST_TO_LE16(zcrc((uint8_t *)&ptr[*idx ], tlen)); *idx += tlen + 2; return 0; } int binkv_add_field(char *buf, int buf_len, const char *field_name, const char *val) { int dummy_idx = 0; int i = 0; int rv; /* skip to the end, ignoring crc (don't want to further corrupt partially * corrupt data) */ while(i < buf_len) { uint8_t field_len = buf[i]; if(field_len == 0xff) break; /* skip past `field_len' bytes, 2 byte CRC field, and 1 byte len * field */ i += field_len + 3; } rv = binkv_encode_field(buf + i, buf_len - i, &dummy_idx, field_name, val); if(rv < 0) return rv; return 0; } bladeRF-2024.05/host/libraries/libbladeRF/src/board/bladerf1/flash.h000066400000000000000000000125201457144405000247140ustar00rootroot00000000000000#ifndef BLADERF1_FLASH_H_ #define BLADERF1_FLASH_H_ #include #include /** * Write the provided data to the FX3 Firmware region to flash. * * This function does no validation of the data (i.e., that it's valid FW). * * @param dev bladeRF handle * @param[in] image Firmware image data * @param[in] len Length of firmware image data * * @return 0 on success, BLADERF_ERR_* value on failure */ int spi_flash_write_fx3_fw(struct bladerf *dev, const uint8_t *image, size_t len); /** * Write the provided FPGA bitstream to flash and enable autoloading via * writing the associated metadata. * * @param dev bladeRF handle * @param[in] bitstream FPGA bitstream data * @param[in] len Length of the bitstream data * * @return 0 on success, BLADERF_ERR_* value on failure */ int spi_flash_write_fpga_bitstream(struct bladerf *dev, const uint8_t *bitstream, size_t len); /** * Erase FPGA metadata and bitstream regions of flash. * * @param dev bladeRF handle * * @return 0 on success, BLADERF_ERR_* value on failure */ int spi_flash_erase_fpga(struct bladerf *dev); /** * Read data from OTP ("otp") section of flash. * * @param dev Device handle * @param[in] field OTP field * @param[out] data Populated with retrieved data * @param[in] data_size Size of the data to read * * @return 0 on success, BLADERF_ERR_* on failure */ int spi_flash_read_otp(struct bladerf *dev, char *field, char *data, size_t data_size); /** * Read data from calibration ("cal") section of flash. * * @param dev Device handle * @param[in] field Calibration field * @param[out] data Populated with retrieved data * @param[in] data_size Size of the data to read * * @return 0 on success, BLADERF_ERR_* on failure */ int spi_flash_read_cal(struct bladerf *dev, char *field, char *data, size_t data_size); /** * Retrieve the device serial from flash. * * @pre The provided buffer is BLADERF_SERIAL_LENGTH in size * * @param dev Device handle. On success, serial field is updated * @param[out] serial_buf Populated with device serial * * @return 0 on success, BLADERF_ERR_* on failure */ int spi_flash_read_serial(struct bladerf *dev, char *serial_buf); /** * Retrieve VCTCXO calibration value from flash. * * @param dev Device handle * @param[out] dac_trim DAC trim * * @return 0 on success, BLADERF_ERR_* on failure */ int spi_flash_read_vctcxo_trim(struct bladerf *dev, uint16_t *dac_trim); /** * Retrieve FPGA size variant from flash. * * @param dev Device handle. * @param[out] fpga_size FPGA size * * @return 0 on success, BLADERF_ERR_* on failure */ int spi_flash_read_fpga_size(struct bladerf *dev, bladerf_fpga_size *fpga_size); /** * Retrieve SPI flash manufacturer ID and device ID. * * @param dev Device handle. * @param[out] mid Flash manufacturer ID * @param[out] did Flash device ID * * @return 0 on success, BLADERF_ERR_* on failure */ int spi_flash_read_flash_id(struct bladerf *dev, uint8_t *mid, uint8_t *did); /** * Decode SPI flash architecture given manufacturer and device IDs. * * @param dev Device handle. * @param fpga_size FPGA size * * @return 0 on success, BLADERF_ERR_* on failure */ int spi_flash_decode_flash_architecture(struct bladerf *dev, bladerf_fpga_size *fpga_size); /** * Encode a binary key-value pair. * * @param[in] ptr Pointer to data buffer that will contain encoded * data * @param[in] len Length of data buffer that will contain encoded data * @param[inout] idx Pointer indicating next free byte inside of data * buffer that will contain encoded data * @param[in] field Key of value to be stored in encoded data buffer * @param[in] val Value to be stored in encoded data buffer * * @return 0 on success, BLADERF_ERR_* on failure */ int binkv_encode_field( char *ptr, int len, int *idx, const char *field, const char *val); /** * Decode a binary key-value pair. * * @param[in] ptr Pointer to data buffer containing encoded data * @param[in] len Length of data buffer containing encoded data * @param[in] field Key of value to be decoded in encoded data buffer * @param[out] val Value to be retrieved from encoded data buffer * @param[in] maxlen Maximum length of value to be retrieved * * @return 0 on success, BLADERF_ERR_* on failure */ int binkv_decode_field( char *ptr, int len, char *field, char *val, size_t maxlen); /** * Add a binary key-value pair to an existing binkv data buffer. * * @param[in] buf Buffer to add field to * @param[in] len Length of `buf' in bytes * @param[in] field Key of value to be stored in encoded data buffer * @param[in] val Value associated with key `field' * * @return 0 on success, BLADERF_ERR_* on failure */ int binkv_add_field(char *buf, int len, const char *field, const char *val); #endif bladeRF-2024.05/host/libraries/libbladeRF/src/board/bladerf1/image.c000066400000000000000000000356321457144405000247050ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2013 Daniel Gröber * Copyright (C) 2013 Nuand, LLC. * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include #include #include #include #include "bladeRF.h" #include "rel_assert.h" #include "host_config.h" #include "sha256.h" #include "log.h" #include "minmax.h" #include "board/board.h" #include "driver/spi_flash.h" #include "helpers/file.h" #include "flash.h" /* These two are used interchangeably - ensure they're the same! */ #if SHA256_DIGEST_SIZE != BLADERF_IMAGE_CHECKSUM_LEN #error "Image checksum size mismatch" #endif #define CALC_IMAGE_SIZE(len) ((size_t) \ ( \ BLADERF_IMAGE_MAGIC_LEN + \ BLADERF_IMAGE_CHECKSUM_LEN + \ 3 * sizeof(uint16_t) + \ sizeof(uint64_t) + \ BLADERF_SERIAL_LENGTH + \ BLADERF_IMAGE_RESERVED_LEN + \ 3 * sizeof(uint32_t) + \ len \ ) \ ) static const char image_magic[] = "bladeRF"; #if BLADERF_OS_WINDOWS #include static uint64_t get_timestamp() { __time64_t now = _time64(NULL); return (uint64_t)now; } #else #include static inline uint64_t get_timestamp() { uint64_t ret; struct timeval tv; if (gettimeofday(&tv, NULL) == 0) { ret = tv.tv_sec; } else { log_verbose("gettimeofday failed: %s\n", strerror(errno)); ret = 0; } return ret; } #endif static void sha256_buffer(const char *buf, size_t len, char digest[SHA256_DIGEST_SIZE]) { SHA256_CTX ctx; SHA256_Init(&ctx); SHA256_Update(&ctx, buf, len); SHA256_Final((uint8_t*)digest, &ctx); } static int verify_checksum(uint8_t *buf, size_t buf_len) { char checksum_expected[SHA256_DIGEST_SIZE]; char checksum_calc[SHA256_DIGEST_SIZE]; if (buf_len <= CALC_IMAGE_SIZE(0)) { log_debug("Provided buffer isn't a full image\n"); return BLADERF_ERR_INVAL; } /* Backup and clear the expected checksum before we calculate the * expected checksum */ memcpy(checksum_expected, &buf[BLADERF_IMAGE_MAGIC_LEN], sizeof(checksum_expected)); memset(&buf[BLADERF_IMAGE_MAGIC_LEN], 0, SHA256_DIGEST_SIZE); sha256_buffer((const char *)buf, buf_len, checksum_calc); if (memcmp(checksum_expected, checksum_calc, SHA256_DIGEST_SIZE) != 0) { return BLADERF_ERR_CHECKSUM; } else { /* Restore the buffer's checksum so the caller can still use it */ memcpy(&buf[BLADERF_IMAGE_MAGIC_LEN], checksum_expected, sizeof(checksum_expected)); return 0; } } static bool image_type_is_valid(bladerf_image_type type) { switch (type) { case BLADERF_IMAGE_TYPE_RAW: case BLADERF_IMAGE_TYPE_FIRMWARE: case BLADERF_IMAGE_TYPE_FPGA_40KLE: case BLADERF_IMAGE_TYPE_FPGA_115KLE: case BLADERF_IMAGE_TYPE_FPGA_A4: case BLADERF_IMAGE_TYPE_FPGA_A5: case BLADERF_IMAGE_TYPE_FPGA_A9: case BLADERF_IMAGE_TYPE_CALIBRATION: case BLADERF_IMAGE_TYPE_RX_DC_CAL: case BLADERF_IMAGE_TYPE_TX_DC_CAL: case BLADERF_IMAGE_TYPE_RX_IQ_CAL: case BLADERF_IMAGE_TYPE_TX_IQ_CAL: return true; default: return false; } } /* Serialize image contents and fill in checksum */ static size_t pack_image(struct bladerf_image *img, uint8_t *buf) { size_t i = 0; uint16_t ver_field; uint32_t type, len, addr; uint64_t timestamp; char checksum[BLADERF_IMAGE_CHECKSUM_LEN]; memcpy(&buf[i], img->magic, BLADERF_IMAGE_MAGIC_LEN); i += BLADERF_IMAGE_MAGIC_LEN; memset(&buf[i], 0, BLADERF_IMAGE_CHECKSUM_LEN); i += BLADERF_IMAGE_CHECKSUM_LEN; ver_field = HOST_TO_BE16(img->version.major); memcpy(&buf[i], &ver_field, sizeof(ver_field)); i += sizeof(ver_field); ver_field = HOST_TO_BE16(img->version.minor); memcpy(&buf[i], &ver_field, sizeof(ver_field)); i += sizeof(ver_field); ver_field = HOST_TO_BE16(img->version.patch); memcpy(&buf[i], &ver_field, sizeof(ver_field)); i += sizeof(ver_field); timestamp = HOST_TO_BE64(img->timestamp); memcpy(&buf[i], ×tamp, sizeof(timestamp)); i += sizeof(timestamp); memcpy(&buf[i], &img->serial, BLADERF_SERIAL_LENGTH); i += BLADERF_SERIAL_LENGTH; memset(&buf[i], 0, BLADERF_IMAGE_RESERVED_LEN); i += BLADERF_IMAGE_RESERVED_LEN; type = HOST_TO_BE32((uint32_t)img->type); memcpy(&buf[i], &type, sizeof(type)); i += sizeof(type); addr = HOST_TO_BE32(img->address); memcpy(&buf[i], &addr, sizeof(addr)); i += sizeof(addr); len = HOST_TO_BE32(img->length); memcpy(&buf[i], &len, sizeof(len)); i += sizeof(len); memcpy(&buf[i], img->data, img->length); i += img->length; sha256_buffer((const char *)buf, i, checksum); memcpy(&buf[BLADERF_IMAGE_MAGIC_LEN], checksum, BLADERF_IMAGE_CHECKSUM_LEN); return i; } /* Unpack flash image from file and validate fields */ static int unpack_image(struct bladerf_image *img, uint8_t *buf, size_t len) { size_t i = 0; uint32_t type; /* Ensure we have at least a full set of metadata */ if (len < CALC_IMAGE_SIZE(0)) { return BLADERF_ERR_INVAL; } memcpy(img->magic, &buf[i], BLADERF_IMAGE_MAGIC_LEN); img->magic[BLADERF_IMAGE_MAGIC_LEN] = '\0'; if (strncmp(img->magic, image_magic, BLADERF_IMAGE_MAGIC_LEN)) { return BLADERF_ERR_INVAL; } i += BLADERF_IMAGE_MAGIC_LEN; memcpy(img->checksum, &buf[i], BLADERF_IMAGE_CHECKSUM_LEN); i += BLADERF_IMAGE_CHECKSUM_LEN; memcpy(&img->version.major, &buf[i], sizeof(img->version.major)); i += sizeof(img->version.major); img->version.major = BE16_TO_HOST(img->version.major); memcpy(&img->version.minor, &buf[i], sizeof(img->version.minor)); i += sizeof(img->version.minor); img->version.minor = BE16_TO_HOST(img->version.minor); memcpy(&img->version.patch, &buf[i], sizeof(img->version.patch)); i += sizeof(img->version.patch); img->version.patch = BE16_TO_HOST(img->version.patch); memcpy(&img->timestamp, &buf[i], sizeof(img->timestamp)); i += sizeof(img->timestamp); img->timestamp = BE64_TO_HOST(img->timestamp); memcpy(img->serial, &buf[i], BLADERF_SERIAL_LENGTH); img->serial[BLADERF_SERIAL_LENGTH] = '\0'; i += BLADERF_SERIAL_LENGTH; memcpy(img->reserved, &buf[i], BLADERF_IMAGE_RESERVED_LEN); i += BLADERF_IMAGE_RESERVED_LEN; memcpy(&type, &buf[i], sizeof(type)); i += sizeof(type); type = BE32_TO_HOST(type); if (!image_type_is_valid((bladerf_image_type)type)) { log_debug("Invalid type value in image: %d\n", (int)type); return BLADERF_ERR_INVAL; } else { img->type = (bladerf_image_type)type; } memcpy(&img->address, &buf[i], sizeof(img->address)); i += sizeof(img->address); img->address = BE32_TO_HOST(img->address); memcpy(&img->length, &buf[i], sizeof(img->length)); i += sizeof(img->length); img->length = BE32_TO_HOST(img->length); if (len != CALC_IMAGE_SIZE(img->length)) { log_debug("Image contains more or less data than expected\n"); return BLADERF_ERR_INVAL; } /* Just slide the data over */ memmove(&buf[0], &buf[i], img->length); img->data = buf; return 0; } int bladerf_image_write(struct bladerf *dev, struct bladerf_image *img, const char *file) { int rv; FILE *f = NULL; uint8_t *buf = NULL; size_t buf_len; /* Ensure the format identifier is correct */ if (memcmp(img->magic, image_magic, BLADERF_IMAGE_MAGIC_LEN) != 0) { #ifdef LOGGING_ENABLED char badmagic[BLADERF_IMAGE_MAGIC_LEN + 1]; memset(badmagic, 0, sizeof(badmagic)); memcpy(&badmagic, &img->magic, BLADERF_IMAGE_MAGIC_LEN); log_debug("Invalid file format magic value: %s\n", badmagic); #endif return BLADERF_ERR_INVAL; } /* Check for a valid image type */ if (!image_type_is_valid(img->type)) { log_debug("Invalid image type: %d\n", img->type); return BLADERF_ERR_INVAL; } /* Just to be tiny bit paranoid... */ if (!img->data) { log_debug("Image data pointer is NULL\n"); return BLADERF_ERR_INVAL; } buf_len = CALC_IMAGE_SIZE(img->length); buf = (uint8_t *)calloc(1, buf_len); if (!buf) { log_verbose("calloc failed: %s\n", strerror(errno)); return BLADERF_ERR_MEM; } /* If the type is RAW, we should only allow erase-block aligned * addresses and lengths */ if (img->type == BLADERF_IMAGE_TYPE_RAW) { if (img->address % dev->flash_arch->ebsize_bytes != 0) { log_debug("Image address must be erase block-aligned for RAW.\n"); rv = BLADERF_ERR_INVAL; goto error; } else if (img->length % dev->flash_arch->ebsize_bytes != 0) { log_debug("Image length must be erase block-aligned for RAW.\n"); rv = BLADERF_ERR_INVAL; goto error; } } pack_image(img, buf); f = fopen(file, "wb"); if (!f) { if (errno == EACCES) { rv = BLADERF_ERR_PERMISSION; } else { rv = BLADERF_ERR_IO; } log_debug("Failed to open \"%s\": %s\n", file, strerror(errno)); goto error; } rv = file_write(f, buf, buf_len); error: if (f) { fclose(f); } free(buf); return rv; } int bladerf_image_read(struct bladerf_image *img, const char *file) { int rv = -1; uint8_t *buf = NULL; size_t buf_len; rv = file_read_buffer(file, &buf, &buf_len); if (rv < 0) { goto bladerf_image_read_out; } rv = verify_checksum(buf, buf_len); if (rv < 0) { goto bladerf_image_read_out; } /* Note: On success, buf->data = buf, with the data memmove'd over. * Static analysis tools might indicate a false postive leak when * buf goes out of scope with rv == 0 */ rv = unpack_image(img, buf, buf_len); bladerf_image_read_out: if (rv != 0) { free(buf); } return rv; } static inline bool is_page_aligned(struct bladerf *dev, uint32_t val) { return val % dev->flash_arch->psize_bytes == 0; } static inline bool is_valid_addr_len(struct bladerf *dev, uint32_t addr, uint32_t len) { if (addr >= dev->flash_arch->tsize_bytes) { return false; } else if (len > dev->flash_arch->tsize_bytes) { return false; } else if ((addr + len) > dev->flash_arch->tsize_bytes) { return false; } else { return true; } } struct bladerf_image * bladerf_alloc_image(struct bladerf *dev, bladerf_image_type type, uint32_t address, uint32_t length) { struct bladerf_image *image; assert(BLADERF_IMAGE_MAGIC_LEN == (sizeof(image_magic) - 1)); /* 0xffffffff is a placeholder for images that use the format but don't * currently have an address in flash to live in */ if (address != 0xffffffff) { if (!is_page_aligned(dev, address)) { log_debug("Address is not page-aligned: 0x%08x\n", address); return NULL; } else if (!is_page_aligned(dev, length)) { log_debug("Length is not page-aligned: 0x%08x\n", length); return NULL; } else if (!is_valid_addr_len(dev, address, length)) { log_debug("Invalid address=0x%08x or length=0x%08x\n", address, length); return NULL; } } image = (struct bladerf_image *)calloc(1, sizeof(*image)); if (!image) { return NULL; } if (length) { image->data = (uint8_t *)calloc(1, length); if (!image->data) { free(image); return NULL; } } memcpy(image->magic, &image_magic, BLADERF_IMAGE_MAGIC_LEN); image->version.major = 0; image->version.minor = 1; image->version.patch = 0; image->timestamp = get_timestamp(); image->address = address; image->length = length; image->type = type; return image; } static int make_cal_region(bladerf_fpga_size size, uint16_t vctcxo_trim, uint8_t *buf, size_t len) { int rv; static const char fpga_size_40[] = "40"; static const char fpga_size_115[] = "115"; static const char fpga_size_A4[] = "A4"; static const char fpga_size_A5[] = "A5"; static const char fpga_size_A9[] = "A9"; const char *fpga_size; char dac[7] = {0}; if (size == BLADERF_FPGA_40KLE) { fpga_size = fpga_size_40; } else if (size == BLADERF_FPGA_115KLE) { fpga_size = fpga_size_115; } else if (size == BLADERF_FPGA_A4) { fpga_size = fpga_size_A4; } else if (size == BLADERF_FPGA_A5) { fpga_size = fpga_size_A5; } else if (size == BLADERF_FPGA_A9) { fpga_size = fpga_size_A9; } else { assert(0); /* Bug catcher */ return BLADERF_ERR_INVAL; } memset(buf, 0xff, len); assert(len < INT_MAX); rv = binkv_add_field((char*)buf, (int)len, "B", fpga_size); if (rv < 0) { return rv; } sprintf(dac, "%u", vctcxo_trim); rv = binkv_add_field((char*)buf, (int)len, "DAC", dac); if (rv < 0) { return rv; } return 0; } struct bladerf_image * bladerf_alloc_cal_image(struct bladerf *dev, bladerf_fpga_size fpga_size, uint16_t vctcxo_trim) { struct bladerf_image *image; int status; image = bladerf_alloc_image(dev, BLADERF_IMAGE_TYPE_CALIBRATION, BLADERF_FLASH_ADDR_CAL, BLADERF_FLASH_BYTE_LEN_CAL); if (!image) { return NULL; } status = make_cal_region(fpga_size, vctcxo_trim, image->data, image->length); if (status != 0) { bladerf_free_image(image); image = NULL; } return image; } void bladerf_free_image(struct bladerf_image *image) { if (image) { free(image->data); free(image); } } bladeRF-2024.05/host/libraries/libbladeRF/src/board/bladerf2/000077500000000000000000000000001457144405000234475ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF/src/board/bladerf2/bladerf2.c000066400000000000000000003533611457144405000253070ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2017-2018 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include "bladeRF.h" #include "host_config.h" #include "log.h" #define LOGGER_ID_STRING #include "logger_id.h" #include "rel_assert.h" #include "../bladerf1/flash.h" #include "board/board.h" #include "capabilities.h" #include "compatibility.h" #include "ad936x.h" #include "ad936x_helpers.h" #include "driver/fpga_trigger.h" #include "driver/fx3_fw.h" #include "driver/ina219.h" #include "driver/spi_flash.h" #include "backend/backend_config.h" #include "backend/usb/usb.h" #include "streaming/async.h" #include "streaming/sync.h" #include "conversions.h" #include "devinfo.h" #include "helpers/file.h" #include "helpers/version.h" #include "helpers/wallclock.h" #include "iterators.h" #include "version.h" #include "bladerf2_common.h" #include "common.h" /******************************************************************************/ /* Forward declarations */ /******************************************************************************/ static int bladerf2_read_flash_vctcxo_trim(struct bladerf *dev, uint16_t *trim); /******************************************************************************/ /* Constants */ /******************************************************************************/ // clang-format off /* REFIN frequency range */ static struct bladerf_range const bladerf2_pll_refclk_range = { FIELD_INIT(.min, 5000000), FIELD_INIT(.max, 300000000), FIELD_INIT(.step, 1), FIELD_INIT(.scale, 1), }; /* Loopback modes */ static struct bladerf_loopback_modes const bladerf2_loopback_modes[] = { { FIELD_INIT(.name, "none"), FIELD_INIT(.mode, BLADERF_LB_NONE) }, { FIELD_INIT(.name, "firmware"), FIELD_INIT(.mode, BLADERF_LB_FIRMWARE) }, { FIELD_INIT(.name, "rf_bist"), FIELD_INIT(.mode, BLADERF_LB_RFIC_BIST) }, }; // clang-format on /******************************************************************************/ /* Low-level Initialization */ /******************************************************************************/ static int _bladerf2_initialize(struct bladerf *dev) { struct bladerf2_board_data *board_data; struct bladerf_version required_fw_version, required_fpga_version; int status; /* Test for uninitialized dev struct */ NULL_CHECK(dev); NULL_CHECK(dev->board_data); /* Initialize board_data struct and members */ board_data = dev->board_data; /* Read FPGA version */ CHECK_STATUS( dev->backend->get_fpga_version(dev, &board_data->fpga_version)); log_verbose("Read FPGA version: %s\n", board_data->fpga_version.describe); /* Determine FPGA capabilities */ board_data->capabilities |= bladerf2_get_fpga_capabilities(&board_data->fpga_version); log_verbose("Capability mask after FPGA load: 0x%016" PRIx64 "\n", board_data->capabilities); /* If the FPGA version check fails, just warn, but don't error out. * * If an error code caused this function to bail out, it would prevent a * user from being able to unload and reflash a bitstream being * "autoloaded" from SPI flash. */ status = version_check(&bladerf2_fw_compat_table, &bladerf2_fpga_compat_table, &board_data->fw_version, &board_data->fpga_version, &required_fw_version, &required_fpga_version); if (status < 0) { #if LOGGING_ENABLED if (BLADERF_ERR_UPDATE_FPGA == status) { log_warning( "FPGA v%u.%u.%u was detected. Firmware v%u.%u.%u " "requires FPGA v%u.%u.%u or later. Please load a " "different FPGA version before continuing.\n\n", board_data->fpga_version.major, board_data->fpga_version.minor, board_data->fpga_version.patch, board_data->fw_version.major, board_data->fw_version.minor, board_data->fw_version.patch, required_fpga_version.major, required_fpga_version.minor, required_fpga_version.patch); } else if (BLADERF_ERR_UPDATE_FW == status) { log_warning( "FPGA v%u.%u.%u was detected, which requires firmware " "v%u.%u.%u or later. The device firmware is currently " "v%u.%u.%u. Please upgrade the device firmware before " "continuing.\n\n", board_data->fpga_version.major, board_data->fpga_version.minor, board_data->fpga_version.patch, required_fw_version.major, required_fw_version.minor, required_fw_version.patch, board_data->fw_version.major, board_data->fw_version.minor, board_data->fw_version.patch); } #endif } /* Set FPGA packet protocol */ CHECK_STATUS( dev->backend->set_fpga_protocol(dev, BACKEND_FPGA_PROTOCOL_NIOSII)); /* Initialize INA219 */ CHECK_STATUS(ina219_init(dev, ina219_r_shunt)); /* Set tuning mode. This will trigger initialization of the RFIC. * * RFIC initialization consists of: * - RFFE register initialization * - RFIC initialization * - Setting initial frequency * - Setting up FIR filters * - Disabling RX and TX on the RFIC * - Muting the TX */ CHECK_STATUS(dev->board->set_tuning_mode(dev, default_tuning_mode(dev))); /* Update device state */ board_data->state = STATE_INITIALIZED; /* Initialize VCTCXO trim DAC to stored value */ uint16_t *trimval = &(board_data->trimdac_stored_value); CHECK_STATUS(bladerf2_read_flash_vctcxo_trim(dev, trimval)); CHECK_STATUS(dev->backend->ad56x1_vctcxo_trim_dac_write(dev, *trimval)); board_data->trim_source = TRIM_SOURCE_TRIM_DAC; /* Configure PLL */ CHECK_STATUS(bladerf_set_pll_refclk(dev, BLADERF_REFIN_DEFAULT)); /* Reset current quick tune profile number */ board_data->quick_tune_rx_profile = 0; board_data->quick_tune_tx_profile = 0; log_debug("%s: complete\n", __FUNCTION__); return 0; } /****************************************************************************** * Generic Board Functions * ******************************************************************************/ /******************************************************************************/ /* Matches */ /******************************************************************************/ static bool bladerf2_matches(struct bladerf *dev) { NULL_CHECK(dev); NULL_CHECK(dev->backend); uint16_t vid, pid; int status; status = dev->backend->get_vid_pid(dev, &vid, &pid); if (status < 0) { log_error("%s: get_vid_pid returned status %s\n", __FUNCTION__, bladerf_strerror(status)); return false; } if (USB_NUAND_VENDOR_ID == vid && USB_NUAND_BLADERF2_PRODUCT_ID == pid) { return true; } return false; } /******************************************************************************/ /* Open/close */ /******************************************************************************/ static int bladerf2_open(struct bladerf *dev, struct bladerf_devinfo *devinfo) { NULL_CHECK(dev); NULL_CHECK(dev->backend); struct bladerf2_board_data *board_data; struct bladerf_version required_fw_version; char *full_path; bladerf_dev_speed usb_speed; size_t i; int ready, status; size_t const MAX_RETRIES = 30; /* Allocate board data */ board_data = calloc(1, sizeof(struct bladerf2_board_data)); if (NULL == board_data) { RETURN_ERROR_STATUS("calloc board_data", BLADERF_ERR_MEM); } dev->board_data = board_data; board_data->phy = NULL; board_data->rfic_init_params = (void *)&bladerf2_rfic_init_params; /* Allocate flash architecture */ dev->flash_arch = calloc(1, sizeof(struct bladerf_flash_arch)); if (NULL == dev->flash_arch) { return BLADERF_ERR_MEM; } /* Initialize board data */ board_data->fpga_version.describe = board_data->fpga_version_str; board_data->fw_version.describe = board_data->fw_version_str; board_data->module_format[BLADERF_RX] = -1; board_data->module_format[BLADERF_TX] = -1; dev->flash_arch->status = STATUS_FLASH_UNINITIALIZED; dev->flash_arch->manufacturer_id = 0x0; dev->flash_arch->device_id = 0x0; board_data->rfic_reset_on_close = false; /* Read firmware version */ CHECK_STATUS(dev->backend->get_fw_version(dev, &board_data->fw_version)); log_verbose("Read Firmware version: %s\n", board_data->fw_version.describe); /* Determine firmware capabilities */ board_data->capabilities |= bladerf2_get_fw_capabilities(&board_data->fw_version); log_verbose("Capability mask before FPGA load: 0x%016" PRIx64 "\n", board_data->capabilities); /* Update device state */ board_data->state = STATE_FIRMWARE_LOADED; /* Wait until firmware is ready */ for (i = 0; i < MAX_RETRIES; i++) { ready = dev->backend->is_fw_ready(dev); if (ready != 1) { if (0 == i) { log_info("Waiting for device to become ready...\n"); } else { log_debug("Retry %02u/%02u.\n", i + 1, MAX_RETRIES); } usleep(1000000); } else { break; } } if (ready != 1) { RETURN_ERROR_STATUS("is_fw_ready", BLADERF_ERR_TIMEOUT); } /* Determine data message size */ CHECK_STATUS(dev->backend->get_device_speed(dev, &usb_speed)); switch (usb_speed) { case BLADERF_DEVICE_SPEED_SUPER: board_data->msg_size = USB_MSG_SIZE_SS; break; case BLADERF_DEVICE_SPEED_HIGH: board_data->msg_size = USB_MSG_SIZE_HS; break; default: log_error("%s: unsupported device speed (%d)\n", __FUNCTION__, usb_speed); return BLADERF_ERR_UNSUPPORTED; } /* Verify that we have a sufficent firmware version before continuing. */ status = version_check_fw(&bladerf2_fw_compat_table, &board_data->fw_version, &required_fw_version); if (status != 0) { #ifdef LOGGING_ENABLED if (BLADERF_ERR_UPDATE_FW == status) { log_warning("Firmware v%u.%u.%u was detected. libbladeRF v%s " "requires firmware v%u.%u.%u or later. An upgrade via " "the bootloader is required.\n\n", &board_data->fw_version.major, &board_data->fw_version.minor, &board_data->fw_version.patch, LIBBLADERF_VERSION, required_fw_version.major, required_fw_version.minor, required_fw_version.patch); } #endif return status; } /* Probe SPI flash architecture information */ if (have_cap(board_data->capabilities, BLADERF_CAP_FW_FLASH_ID)) { status = spi_flash_read_flash_id(dev, &dev->flash_arch->manufacturer_id, &dev->flash_arch->device_id); if (status < 0) { log_error("Failed to probe SPI flash ID information.\n"); } } else { log_debug("FX3 firmware v%u.%u.%u does not support SPI flash ID. A " "firmware update is recommended in order to probe the SPI " "flash ID information.\n", board_data->fw_version.major, board_data->fw_version.minor, board_data->fw_version.patch); } /* Decode SPI flash ID information to figure out its architecture. * We need to know a little about the flash architecture before we can * read anything from it, including FPGA size and other cal data. * If the firmware does not have the capability to get the flash ID, * sane defaults will be chosen. * * Not checking return code because it is irrelevant. */ spi_flash_decode_flash_architecture(dev, &board_data->fpga_size); /* Get FPGA size */ status = spi_flash_read_fpga_size(dev, &board_data->fpga_size); if (status < 0) { log_warning("Failed to get FPGA size %s\n", bladerf_strerror(status)); } if (getenv("BLADERF_FORCE_FPGA_A9")) { log_info("BLADERF_FORCE_FPGA_A9 is set, assuming A9 FPGA\n"); board_data->fpga_size = BLADERF_FPGA_A9; } /* If the flash architecture could not be decoded earlier, try again now * that the FPGA size is known. */ if (dev->flash_arch->status != STATUS_SUCCESS) { status = spi_flash_decode_flash_architecture(dev, &board_data->fpga_size); if (status < 0) { log_debug("Assumptions were made about the SPI flash architecture! " "Flash commands may not function as expected.\n"); } } /* Skip further work if BLADERF_FORCE_NO_FPGA_PRESENT is set */ if (getenv("BLADERF_FORCE_NO_FPGA_PRESENT")) { log_debug("Skipping FPGA configuration and initialization - " "BLADERF_FORCE_NO_FPGA_PRESENT is set.\n"); return 0; } /* Check if FPGA is configured */ status = dev->backend->is_fpga_configured(dev); if (status < 0) { RETURN_ERROR_STATUS("is_fpga_configured", status); } else if (1 == status) { board_data->state = STATE_FPGA_LOADED; } else if (status != 1 && BLADERF_FPGA_UNKNOWN == board_data->fpga_size) { log_warning("Unknown FPGA size. Skipping FPGA configuration...\n"); log_warning("Skipping further initialization...\n"); return 0; } else if (status != 1) { /* Try searching for an FPGA in the config search path */ switch (board_data->fpga_size) { case BLADERF_FPGA_A4: full_path = file_find("hostedxA4.rbf"); break; case BLADERF_FPGA_A5: full_path = file_find("hostedxA5.rbf"); break; case BLADERF_FPGA_A9: full_path = file_find("hostedxA9.rbf"); break; default: log_error("%s: invalid FPGA size: %d\n", __FUNCTION__, board_data->fpga_size); return BLADERF_ERR_UNEXPECTED; } if (full_path != NULL) { uint8_t *buf; size_t buf_size; log_debug("Loading FPGA from: %s\n", full_path); status = file_read_buffer(full_path, &buf, &buf_size); free(full_path); full_path = NULL; if (status != 0) { RETURN_ERROR_STATUS("file_read_buffer", status); } CHECK_STATUS(dev->backend->load_fpga(dev, buf, buf_size)); board_data->state = STATE_FPGA_LOADED; } else { log_warning("FPGA bitstream file not found.\n"); log_warning("Skipping further initialization...\n"); return 0; } } /* Initialize the board */ CHECK_STATUS(_bladerf2_initialize(dev)); if (have_cap(board_data->capabilities, BLADERF_CAP_SCHEDULED_RETUNE)) { /* Cancel any pending re-tunes that may have been left over as the * result of a user application crashing or forgetting to call * bladerf_close() */ bladerf_direction dir; FOR_EACH_DIRECTION(dir) { size_t idx; bladerf_channel ch; FOR_EACH_CHANNEL(dir, 1, idx, ch) { CHECK_STATUS(dev->board->cancel_scheduled_retunes(dev, ch)); } } } return 0; } static void bladerf2_close(struct bladerf *dev) { if (dev != NULL) { struct bladerf2_board_data *board_data = dev->board_data; struct controller_fns const *rfic = board_data->rfic; struct bladerf_flash_arch *flash_arch = dev->flash_arch; if (board_data != NULL) { bladerf_direction dir; FOR_EACH_DIRECTION(dir) { size_t idx; bladerf_channel ch; FOR_EACH_CHANNEL(dir, 1, idx, ch) { sync_deinit(&board_data->sync[ch]); /* Cancel scheduled retunes here to avoid the device * retuning underneath the user should they open it again in * the future. * * This is intended to help developers avoid a situation * during debugging where they schedule "far" into the * future, but hit a case where their program aborts or * exits early. If we do not cancel these scheduled retunes, * the device could start up and/or "unexpectedly" switch to * a different frequency. */ if (dev->backend->is_fpga_configured(dev) && have_cap(board_data->capabilities, BLADERF_CAP_SCHEDULED_RETUNE)) { dev->board->cancel_scheduled_retunes(dev, ch); } } } if (board_data->state >= STATE_INITIALIZED && rfic != NULL) { if (board_data->rfic_reset_on_close) { /* We need to fully de-initialize the RFIC, so it can be * reset on the next open. This seems to be necessary after * doing direct SPI control of the RFIC. */ rfic->deinitialize(dev); } else { /* Put the RFIC into standby mode. This will shut down any * current RF activity, but it will not lose the RF state. */ rfic->standby(dev); } } free(board_data); board_data = NULL; } if (flash_arch != NULL) { free(flash_arch); flash_arch = NULL; } } } /******************************************************************************/ /* Properties */ /******************************************************************************/ static bladerf_dev_speed bladerf2_device_speed(struct bladerf *dev) { CHECK_BOARD_STATE(STATE_FIRMWARE_LOADED); bladerf_dev_speed usb_speed; int status; status = dev->backend->get_device_speed(dev, &usb_speed); if (status < 0) { log_error("%s: get_device_speed failed: %s\n", __FUNCTION__, bladerf_strerror(status)); return BLADERF_DEVICE_SPEED_UNKNOWN; } return usb_speed; } static int bladerf2_get_serial(struct bladerf *dev, char *serial) { CHECK_BOARD_STATE(STATE_UNINITIALIZED); NULL_CHECK(serial); // TODO: don't use strcpy strcpy(serial, dev->ident.serial); return 0; } static int bladerf2_get_fpga_size(struct bladerf *dev, bladerf_fpga_size *size) { CHECK_BOARD_STATE(STATE_FIRMWARE_LOADED); NULL_CHECK(size); struct bladerf2_board_data *board_data = dev->board_data; *size = board_data->fpga_size; return 0; } static int bladerf2_get_fpga_bytes(struct bladerf *dev, size_t *size) { CHECK_BOARD_STATE(STATE_FIRMWARE_LOADED); NULL_CHECK(size); struct bladerf2_board_data *board_data = dev->board_data; switch (board_data->fpga_size) { case BLADERF_FPGA_A4: *size = 2632660; break; case BLADERF_FPGA_A5: *size = 4244820; break; case BLADERF_FPGA_A9: *size = 12858972; break; default: log_debug("%s: unknown fpga_size: %x\n", board_data->fpga_size); return BLADERF_ERR_INVAL; } return 0; } static int bladerf2_get_flash_size(struct bladerf *dev, uint32_t *size, bool *is_guess) { CHECK_BOARD_STATE(STATE_FIRMWARE_LOADED); NULL_CHECK(size); NULL_CHECK(is_guess); *size = dev->flash_arch->tsize_bytes; *is_guess = (dev->flash_arch->status != STATUS_SUCCESS); return 0; } static int bladerf2_is_fpga_configured(struct bladerf *dev) { CHECK_BOARD_STATE(STATE_FIRMWARE_LOADED); return dev->backend->is_fpga_configured(dev); } static int bladerf2_get_fpga_source(struct bladerf *dev, bladerf_fpga_source *source) { CHECK_BOARD_STATE(STATE_FIRMWARE_LOADED); NULL_CHECK(source); struct bladerf2_board_data *board_data = dev->board_data; if (!have_cap(board_data->capabilities, BLADERF_CAP_FW_FPGA_SOURCE)) { log_debug("%s: not supported by firmware\n", __FUNCTION__); *source = BLADERF_FPGA_SOURCE_UNKNOWN; return BLADERF_ERR_UNSUPPORTED; } *source = dev->backend->get_fpga_source(dev); return 0; } static uint64_t bladerf2_get_capabilities(struct bladerf *dev) { CHECK_BOARD_STATE(STATE_UNINITIALIZED); struct bladerf2_board_data *board_data = dev->board_data; return board_data->capabilities; } static size_t bladerf2_get_channel_count(struct bladerf *dev, bladerf_direction dir) { return 2; } /******************************************************************************/ /* Versions */ /******************************************************************************/ static int bladerf2_get_fpga_version(struct bladerf *dev, struct bladerf_version *version) { CHECK_BOARD_STATE(STATE_FPGA_LOADED); NULL_CHECK(version); struct bladerf2_board_data *board_data = dev->board_data; memcpy(version, &board_data->fpga_version, sizeof(*version)); return 0; } static int bladerf2_get_fw_version(struct bladerf *dev, struct bladerf_version *version) { CHECK_BOARD_STATE(STATE_FIRMWARE_LOADED); NULL_CHECK(version); struct bladerf2_board_data *board_data = dev->board_data; memcpy(version, &board_data->fw_version, sizeof(*version)); return 0; } /******************************************************************************/ /* Enable/disable */ /******************************************************************************/ static int bladerf2_enable_module(struct bladerf *dev, bladerf_channel ch, bool enable) { CHECK_BOARD_STATE(STATE_INITIALIZED); struct bladerf2_board_data *board_data = dev->board_data; return board_data->rfic->enable_module(dev, ch, enable); } /******************************************************************************/ /* Gain */ /******************************************************************************/ static int bladerf2_get_gain_stage_range(struct bladerf *dev, bladerf_channel ch, char const *stage, struct bladerf_range const **range) { CHECK_BOARD_STATE(STATE_INITIALIZED); NULL_CHECK(range); struct bladerf_gain_range const *ranges = NULL; bladerf_frequency frequency = 0; size_t i, ranges_len; if (BLADERF_CHANNEL_IS_TX(ch)) { ranges = bladerf2_tx_gain_ranges; ranges_len = ARRAY_SIZE(bladerf2_tx_gain_ranges); } else { ranges = bladerf2_rx_gain_ranges; ranges_len = ARRAY_SIZE(bladerf2_rx_gain_ranges); } CHECK_STATUS(dev->board->get_frequency(dev, ch, &frequency)); for (i = 0; i < ranges_len; ++i) { struct bladerf_gain_range const *r = &(ranges[i]); struct bladerf_range const *rfreq = &(r->frequency); // if the frequency range matches, and either: // both the range name and the stage name are null, or // neither name is null and the strings match // then we found our match if (is_within_range(rfreq, frequency) && ((NULL == r->name && NULL == stage) || (r->name != NULL && stage != NULL && (strcmp(r->name, stage) == 0)))) { *range = &(r->gain); return 0; } } return BLADERF_ERR_INVAL; } static int bladerf2_get_gain_range(struct bladerf *dev, bladerf_channel ch, struct bladerf_range const **range) { return dev->board->get_gain_stage_range(dev, ch, NULL, range); } static int bladerf2_get_gain_modes(struct bladerf *dev, bladerf_channel ch, struct bladerf_gain_modes const **modes) { NULL_CHECK(modes); struct bladerf_gain_modes const *mode_infos; unsigned int mode_infos_len; if (BLADERF_CHANNEL_IS_TX(ch)) { mode_infos = NULL; mode_infos_len = 0; } else { mode_infos = bladerf2_rx_gain_modes; mode_infos_len = ARRAY_SIZE(bladerf2_rx_gain_modes); } *modes = mode_infos; return mode_infos_len; } static int bladerf2_get_gain_stages(struct bladerf *dev, bladerf_channel ch, char const **stages, size_t count) { NULL_CHECK(dev); struct bladerf_gain_range const *ranges = NULL; char const **names = NULL; size_t stage_count = 0; unsigned int ranges_len; size_t i, j; IF_COMMAND_MODE(dev, RFIC_COMMAND_FPGA, { *stages = NULL; return 0; }); if (BLADERF_CHANNEL_IS_TX(ch)) { ranges = bladerf2_tx_gain_ranges; ranges_len = ARRAY_SIZE(bladerf2_tx_gain_ranges); } else { ranges = bladerf2_rx_gain_ranges; ranges_len = ARRAY_SIZE(bladerf2_rx_gain_ranges); } names = calloc(ranges_len + 1, sizeof(char *)); if (NULL == names) { RETURN_ERROR_STATUS("calloc names", BLADERF_ERR_MEM); } // Iterate through all the ranges... for (i = 0; i < ranges_len; ++i) { struct bladerf_gain_range const *range = &(ranges[i]); if (NULL == range->name) { // this is system gain, skip it continue; } // loop through the output array to make sure we record this one for (j = 0; j < ranges_len; ++j) { if (NULL == names[j]) { // Made it to the end of names without finding a match names[j] = range->name; ++stage_count; break; } else if (strcmp(range->name, names[j]) == 0) { // found a match, break break; } } } if (NULL != stages && 0 != count) { count = (stage_count < count) ? stage_count : count; for (i = 0; i < count; i++) { stages[i] = names[i]; } } free((char **)names); return (int)stage_count; } static int bladerf2_get_gain_mode(struct bladerf *dev, bladerf_channel ch, bladerf_gain_mode *mode) { CHECK_BOARD_STATE(STATE_INITIALIZED); NULL_CHECK(mode); struct bladerf2_board_data *board_data = dev->board_data; return board_data->rfic->get_gain_mode(dev, ch, mode); } static int bladerf2_set_gain_mode(struct bladerf *dev, bladerf_channel ch, bladerf_gain_mode mode) { CHECK_BOARD_STATE(STATE_INITIALIZED); struct bladerf2_board_data *board_data = dev->board_data; return board_data->rfic->set_gain_mode(dev, ch, mode); } static int bladerf2_get_gain(struct bladerf *dev, bladerf_channel ch, int *gain) { CHECK_BOARD_STATE(STATE_INITIALIZED); NULL_CHECK(gain); struct bladerf2_board_data *board_data = dev->board_data; return board_data->rfic->get_gain(dev, ch, gain); } static int bladerf2_set_gain(struct bladerf *dev, bladerf_channel ch, int gain) { CHECK_BOARD_STATE(STATE_INITIALIZED); struct bladerf2_board_data *board_data = dev->board_data; struct bladerf_range const *range = NULL; CHECK_STATUS(dev->board->get_gain_range(dev, ch, &range)); return board_data->rfic->set_gain(dev, ch, clamp_to_range(range, gain)); } static int bladerf2_get_gain_stage(struct bladerf *dev, bladerf_channel ch, char const *stage, int *gain) { CHECK_BOARD_STATE(STATE_INITIALIZED); NULL_CHECK(stage); NULL_CHECK(gain); struct bladerf2_board_data *board_data = dev->board_data; return board_data->rfic->get_gain_stage(dev, ch, stage, gain); } static int bladerf2_set_gain_stage(struct bladerf *dev, bladerf_channel ch, char const *stage, int gain) { CHECK_BOARD_STATE(STATE_INITIALIZED); NULL_CHECK(stage); struct bladerf2_board_data *board_data = dev->board_data; struct bladerf_range const *range = NULL; CHECK_STATUS(dev->board->get_gain_stage_range(dev, ch, stage, &range)); return board_data->rfic->set_gain_stage(dev, ch, stage, clamp_to_range(range, gain)); } /******************************************************************************/ /* Sample Rate */ /******************************************************************************/ static int bladerf2_get_sample_rate_range(struct bladerf *dev, bladerf_channel ch, struct bladerf_range const **range) { NULL_CHECK(range); *range = &bladerf2_sample_rate_range_base; if (dev->feature == BLADERF_FEATURE_OVERSAMPLE) { *range = &bladerf2_sample_rate_range_oversample; } return 0; } static int bladerf2_get_rational_sample_rate(struct bladerf *dev, bladerf_channel ch, struct bladerf_rational_rate *rate) { CHECK_BOARD_STATE(STATE_INITIALIZED); NULL_CHECK(rate); bladerf_sample_rate integer_rate; CHECK_STATUS(dev->board->get_sample_rate(dev, ch, &integer_rate)); rate->integer = integer_rate; rate->num = 0; rate->den = 1; return 0; } static int bladerf2_set_rational_sample_rate( struct bladerf *dev, bladerf_channel ch, struct bladerf_rational_rate *rate, struct bladerf_rational_rate *actual) { CHECK_BOARD_STATE(STATE_INITIALIZED); NULL_CHECK(rate); bladerf_sample_rate integer_rate, actual_integer_rate; integer_rate = (bladerf_sample_rate)(rate->integer + rate->num / rate->den); CHECK_STATUS(dev->board->set_sample_rate(dev, ch, integer_rate, &actual_integer_rate)); if (actual != NULL) { CHECK_STATUS(dev->board->get_rational_sample_rate(dev, ch, actual)); } return 0; } static int bladerf2_get_sample_rate(struct bladerf *dev, bladerf_channel ch, bladerf_sample_rate *rate) { CHECK_BOARD_STATE(STATE_INITIALIZED); NULL_CHECK(rate); struct bladerf2_board_data *board_data = dev->board_data; bladerf_sample_rate double_rate; CHECK_STATUS(board_data->rfic->get_sample_rate(dev, ch, rate)); /* OVERSAMPLE feature reports half of the actual sample rate so we have to double it on return */ if (dev->feature == BLADERF_FEATURE_OVERSAMPLE) { double_rate = *rate*2; *rate = double_rate; } return 0; } static int bladerf2_set_sample_rate(struct bladerf *dev, bladerf_channel ch, bladerf_sample_rate rate, bladerf_sample_rate *actual) { CHECK_BOARD_STATE(STATE_INITIALIZED); struct bladerf2_board_data *board_data = dev->board_data; struct controller_fns const *rfic = board_data->rfic; struct bladerf_range const *range = NULL; bladerf_sample_rate current; bool old_low, new_low; bladerf_rfic_rxfir rxfir; bladerf_rfic_txfir txfir; /* Range checking */ CHECK_STATUS(dev->board->get_sample_rate_range(dev, ch, &range)); if (!is_within_range(range, rate)) { return BLADERF_ERR_RANGE; } /* Feature range check */ if (dev->feature == BLADERF_FEATURE_OVERSAMPLE && !is_within_range(&bladerf2_sample_rate_range_oversample, rate)) { log_error("Sample rate outside of OVERSAMPLE feature range\n"); return BLADERF_ERR_RANGE; } else if (dev->feature == BLADERF_FEATURE_DEFAULT && !is_within_range(&bladerf2_sample_rate_range_base, rate)) { log_error("Sample rate outside of DEFAULT feature range\n"); return BLADERF_ERR_RANGE; } /* Get current sample rate, and check it against the low-rate range */ CHECK_STATUS(dev->board->get_sample_rate(dev, ch, ¤t)); old_low = is_within_range(&bladerf2_sample_rate_range_4x, current); new_low = is_within_range(&bladerf2_sample_rate_range_4x, rate); /* Get current filter status */ if (new_low || old_low) { CHECK_STATUS( rfic->get_filter(dev, BLADERF_CHANNEL_RX(0), &rxfir, NULL)); CHECK_STATUS( rfic->get_filter(dev, BLADERF_CHANNEL_TX(0), NULL, &txfir)); } /* If the requested sample rate is below the native range, we must implement * a 4x decimation/interpolation filter on the RFIC. */ if (new_low) { bool fir_set_failed = false; int status; if (rxfir != BLADERF_RFIC_RXFIR_DEC4 || txfir != BLADERF_RFIC_TXFIR_INT4) { log_debug("%s: enabling 4x decimation/interpolation filters\n", __FUNCTION__); /* Intermidiate sample rate assignment to circumvent rfic->set_filter error */ if ((current > 40e6 && rate < 2083334) || (rate > 40e6 && current < 2083334)) { CHECK_STATUS(rfic->set_sample_rate(dev, ch, 30e6)); } status = rfic->set_filter(dev, BLADERF_CHANNEL_RX(0), BLADERF_RFIC_RXFIR_DEC4, 0); if (status < 0) { log_error("%s: could not set RX filter mode: %s\n", __FUNCTION__, bladerf_strerror(status)); fir_set_failed = true; } status = rfic->set_filter(dev, BLADERF_CHANNEL_TX(0), 0, BLADERF_RFIC_TXFIR_INT4); if (status < 0) { log_error("%s: could not set TX filter mode: %s\n", __FUNCTION__, bladerf_strerror(status)); fir_set_failed = true; } } /* Try to restore default operations if there was a failure */ if (fir_set_failed) { log_debug("%s: attempting to reset filters to default...\n", __FUNCTION__); CHECK_STATUS(rfic->set_filter(dev, BLADERF_CHANNEL_RX(0), BLADERF_RFIC_RXFIR_DEFAULT, 0)); CHECK_STATUS(rfic->set_filter(dev, BLADERF_CHANNEL_TX(0), 0, BLADERF_RFIC_TXFIR_DEFAULT)); return BLADERF_ERR_UNEXPECTED; } } /* The AD9361 doubles the sampling rate in OVERSAMPLE mode so we must halve the sampling rate prior to setting */ if (dev->feature == BLADERF_FEATURE_OVERSAMPLE) { rate /= 2; } /* Set the sample rate */ CHECK_STATUS(rfic->set_sample_rate(dev, ch, rate)); /* If the previous sample rate was below the native range, but the new one * isn't, switch back to the default filters. */ if (old_low && !new_low) { if (rxfir != BLADERF_RFIC_RXFIR_DEFAULT || txfir != BLADERF_RFIC_TXFIR_DEFAULT) { log_debug("%s: disabling 4x decimation/interpolation filters\n", __FUNCTION__); CHECK_STATUS(rfic->set_filter(dev, BLADERF_CHANNEL_RX(0), BLADERF_RFIC_RXFIR_DEFAULT, 0)); CHECK_STATUS(rfic->set_filter(dev, BLADERF_CHANNEL_TX(0), 0, BLADERF_RFIC_TXFIR_DEFAULT)); } } /* If requested, fetch the new sample rate and return it. */ if (actual != NULL) { CHECK_STATUS(dev->board->get_sample_rate(dev, ch, actual)); } /* Warn the user if this isn't achievable */ check_total_sample_rate(dev); return 0; } /******************************************************************************/ /* Bandwidth */ /******************************************************************************/ static int bladerf2_get_bandwidth_range(struct bladerf *dev, bladerf_channel ch, struct bladerf_range const **range) { NULL_CHECK(range); *range = &bladerf2_bandwidth_range; return 0; } static int bladerf2_get_bandwidth(struct bladerf *dev, bladerf_channel ch, bladerf_bandwidth *bandwidth) { CHECK_BOARD_STATE(STATE_INITIALIZED); struct bladerf2_board_data *board_data = dev->board_data; return board_data->rfic->get_bandwidth(dev, ch, bandwidth); } static int bladerf2_set_bandwidth(struct bladerf *dev, bladerf_channel ch, bladerf_bandwidth bandwidth, bladerf_bandwidth *actual) { CHECK_BOARD_STATE(STATE_INITIALIZED); if (dev->feature == BLADERF_FEATURE_OVERSAMPLE) { log_warning("bandwidth assignements with oversample feature enabled yields unkown results\n"); } struct bladerf2_board_data *board_data = dev->board_data; return board_data->rfic->set_bandwidth(dev, ch, bandwidth, actual); } /******************************************************************************/ /* Frequency */ /******************************************************************************/ static int bladerf2_get_frequency_range(struct bladerf *dev, bladerf_channel ch, const struct bladerf_range **range) { NULL_CHECK(range); if (BLADERF_CHANNEL_IS_TX(ch)) { *range = &bladerf2_tx_frequency_range; } else { *range = &bladerf2_rx_frequency_range; } return 0; } static int bladerf2_select_band(struct bladerf *dev, bladerf_channel ch, bladerf_frequency frequency) { CHECK_BOARD_STATE(STATE_INITIALIZED); struct bladerf2_board_data *board_data = dev->board_data; return board_data->rfic->select_band(dev, ch, frequency); } static int bladerf2_get_frequency(struct bladerf *dev, bladerf_channel ch, bladerf_frequency *frequency) { CHECK_BOARD_STATE(STATE_INITIALIZED); NULL_CHECK(frequency); struct bladerf2_board_data *board_data = dev->board_data; return board_data->rfic->get_frequency(dev, ch, frequency); } static int bladerf2_set_frequency(struct bladerf *dev, bladerf_channel ch, bladerf_frequency frequency) { CHECK_BOARD_STATE(STATE_INITIALIZED); struct bladerf2_board_data *board_data = dev->board_data; return board_data->rfic->set_frequency(dev, ch, frequency); } /******************************************************************************/ /* RF ports */ /******************************************************************************/ static int bladerf2_set_rf_port(struct bladerf *dev, bladerf_channel ch, const char *port) { CHECK_BOARD_STATE(STATE_INITIALIZED); struct bladerf2_board_data *board_data = dev->board_data; struct ad9361_rf_phy *phy = board_data->phy; struct bladerf_rfic_port_name_map const *pm = NULL; unsigned int pm_len = 0; uint32_t port_id = UINT32_MAX; size_t i; IF_COMMAND_MODE(dev, RFIC_COMMAND_FPGA, { log_debug("%s: FPGA command mode not supported\n", __FUNCTION__); return BLADERF_ERR_UNSUPPORTED; }); if (BLADERF_CHANNEL_IS_TX(ch)) { pm = bladerf2_tx_port_map; pm_len = ARRAY_SIZE(bladerf2_tx_port_map); } else { pm = bladerf2_rx_port_map; pm_len = ARRAY_SIZE(bladerf2_rx_port_map); } for (i = 0; i < pm_len; i++) { if (strcmp(pm[i].name, port) == 0) { port_id = pm[i].id; break; } } if (UINT32_MAX == port_id) { RETURN_INVAL("port", "is not valid"); } if (BLADERF_CHANNEL_IS_TX(ch)) { CHECK_AD936X(ad9361_set_tx_rf_port_output(phy, port_id)); } else { CHECK_AD936X(ad9361_set_rx_rf_port_input(phy, port_id)); } return 0; } static int bladerf2_get_rf_port(struct bladerf *dev, bladerf_channel ch, char const **port) { CHECK_BOARD_STATE(STATE_INITIALIZED); NULL_CHECK(port); struct bladerf2_board_data *board_data = dev->board_data; struct ad9361_rf_phy *phy = board_data->phy; struct bladerf_rfic_port_name_map const *pm = NULL; unsigned int pm_len = 0; uint32_t port_id; bool ok; size_t i; IF_COMMAND_MODE(dev, RFIC_COMMAND_FPGA, { log_debug("%s: FPGA command mode not supported\n", __FUNCTION__); return BLADERF_ERR_UNSUPPORTED; }); if (BLADERF_CHANNEL_IS_TX(ch)) { pm = bladerf2_tx_port_map; pm_len = ARRAY_SIZE(bladerf2_tx_port_map); CHECK_AD936X(ad9361_get_tx_rf_port_output(phy, &port_id)); } else { pm = bladerf2_rx_port_map; pm_len = ARRAY_SIZE(bladerf2_rx_port_map); CHECK_AD936X(ad9361_get_rx_rf_port_input(phy, &port_id)); } ok = false; for (i = 0; i < pm_len; i++) { if (port_id == pm[i].id) { *port = pm[i].name; ok = true; break; } } if (!ok) { *port = "unknown"; log_error("%s: unexpected port_id %u\n", __FUNCTION__, port_id); return BLADERF_ERR_UNEXPECTED; } return 0; } static int bladerf2_get_rf_ports(struct bladerf *dev, bladerf_channel ch, char const **ports, unsigned int count) { struct bladerf_rfic_port_name_map const *pm = NULL; unsigned int pm_len; size_t i; IF_COMMAND_MODE(dev, RFIC_COMMAND_FPGA, { *ports = NULL; return 0; }); if (BLADERF_CHANNEL_IS_TX(ch)) { pm = bladerf2_tx_port_map; pm_len = ARRAY_SIZE(bladerf2_tx_port_map); } else { pm = bladerf2_rx_port_map; pm_len = ARRAY_SIZE(bladerf2_rx_port_map); } if (ports != NULL) { count = (pm_len < count) ? pm_len : count; for (i = 0; i < count; i++) { ports[i] = pm[i].name; } } return pm_len; } /******************************************************************************/ /* Scheduled Tuning */ /******************************************************************************/ static int bladerf2_get_quick_tune(struct bladerf *dev, bladerf_channel ch, struct bladerf_quick_tune *quick_tune) { CHECK_BOARD_STATE(STATE_INITIALIZED); NULL_CHECK(quick_tune); struct bladerf2_board_data *board_data = dev->board_data; struct controller_fns const *rfic = board_data->rfic; struct band_port_map const *pm = NULL; bladerf_frequency freq; if (ch != BLADERF_CHANNEL_RX(0) && ch != BLADERF_CHANNEL_RX(1) && ch != BLADERF_CHANNEL_TX(0) && ch != BLADERF_CHANNEL_TX(1)) { RETURN_INVAL_ARG("channel", ch, "is not valid"); } CHECK_STATUS(dev->board->get_frequency(dev, ch, &freq)); pm = _get_band_port_map_by_freq(ch, freq); if (BLADERF_CHANNEL_IS_TX(ch)) { if (board_data->quick_tune_tx_profile < NUM_BBP_FASTLOCK_PROFILES) { /* Assign Nios and RFFE profile numbers */ quick_tune->nios_profile = board_data->quick_tune_tx_profile++; log_verbose("Quick tune assigned Nios TX fast lock index: %u\n", quick_tune->nios_profile); quick_tune->rffe_profile = quick_tune->nios_profile % NUM_RFFE_FASTLOCK_PROFILES; log_verbose("Quick tune assigned RFFE TX fast lock index: %u\n", quick_tune->rffe_profile); } else { log_error("Reached maximum number of TX quick tune profiles."); return BLADERF_ERR_UNEXPECTED; } /* Create a fast lock profile in the RFIC */ CHECK_STATUS( rfic->store_fastlock_profile(dev, ch, quick_tune->rffe_profile)); /* Save a copy of the TX fast lock profile to the Nios */ dev->backend->rffe_fastlock_save(dev, true, quick_tune->rffe_profile, quick_tune->nios_profile); /* Set the TX band */ quick_tune->port = (pm->rfic_port << 6); /* Set the TX SPDTs */ quick_tune->spdt = (pm->spdt << 6) | (pm->spdt << 4); } else { if (board_data->quick_tune_rx_profile < NUM_BBP_FASTLOCK_PROFILES) { /* Assign Nios and RFFE profile numbers */ quick_tune->nios_profile = board_data->quick_tune_rx_profile++; log_verbose("Quick tune assigned Nios RX fast lock index: %u\n", quick_tune->nios_profile); quick_tune->rffe_profile = quick_tune->nios_profile % NUM_RFFE_FASTLOCK_PROFILES; log_verbose("Quick tune assigned RFFE RX fast lock index: %u\n", quick_tune->rffe_profile); } else { log_error("Reached maximum number of RX quick tune profiles."); return BLADERF_ERR_UNEXPECTED; } /* Create a fast lock profile in the RFIC */ CHECK_STATUS( rfic->store_fastlock_profile(dev, ch, quick_tune->rffe_profile)); /* Save a copy of the RX fast lock profile to the Nios */ dev->backend->rffe_fastlock_save(dev, false, quick_tune->rffe_profile, quick_tune->nios_profile); /* Set the RX bit */ quick_tune->port = NIOS_PKT_RETUNE2_PORT_IS_RX_MASK; /* Set the RX band */ if (pm->rfic_port < 3) { quick_tune->port |= (3 << (pm->rfic_port << 1)); } else { quick_tune->port |= (1 << (pm->rfic_port - 3)); } /* Set the RX SPDTs */ quick_tune->spdt = (pm->spdt << 2) | (pm->spdt); } /* Workaround: the RFIC can end up in a bad state after fastlock use, and * needs to be reset and re-initialized. This is likely due to our direct * SPI writes causing state incongruence. */ board_data->rfic_reset_on_close = true; return 0; } static int bladerf2_schedule_retune(struct bladerf *dev, bladerf_channel ch, bladerf_timestamp timestamp, bladerf_frequency frequency, struct bladerf_quick_tune *quick_tune) { CHECK_BOARD_STATE(STATE_FPGA_LOADED); NULL_CHECK(quick_tune); struct bladerf2_board_data *board_data = dev->board_data; if (!have_cap(board_data->capabilities, BLADERF_CAP_SCHEDULED_RETUNE)) { log_debug("This FPGA version (%u.%u.%u) does not support " "scheduled retunes.\n", board_data->fpga_version.major, board_data->fpga_version.minor, board_data->fpga_version.patch); return BLADERF_ERR_UNSUPPORTED; } return dev->backend->retune2(dev, ch, timestamp, quick_tune->nios_profile, quick_tune->rffe_profile, quick_tune->port, quick_tune->spdt); } static int bladerf2_cancel_scheduled_retunes(struct bladerf *dev, bladerf_channel ch) { CHECK_BOARD_STATE(STATE_FPGA_LOADED); struct bladerf2_board_data *board_data = dev->board_data; if (!have_cap(board_data->capabilities, BLADERF_CAP_SCHEDULED_RETUNE)) { log_debug("This FPGA version (%u.%u.%u) does not support " "scheduled retunes.\n", board_data->fpga_version.major, board_data->fpga_version.minor, board_data->fpga_version.patch); return BLADERF_ERR_UNSUPPORTED; } return dev->backend->retune2(dev, ch, NIOS_PKT_RETUNE2_CLEAR_QUEUE, 0, 0, 0, 0); } /******************************************************************************/ /* DC/Phase/Gain Correction */ /******************************************************************************/ // clang-format off static const struct { struct { uint16_t reg[2]; /* Low/High band */ unsigned int shift; /* Value scaling */ } corr[4]; } ad9361_correction_reg_table[4] = { [BLADERF_CHANNEL_RX(0)].corr = { [BLADERF_CORR_DCOFF_I] = { FIELD_INIT(.reg, {0, 0}), /* More complex look up */ FIELD_INIT(.shift, 0), }, [BLADERF_CORR_DCOFF_Q] = { FIELD_INIT(.reg, {0, 0}), /* More complex look up */ FIELD_INIT(.shift, 0), }, [BLADERF_CORR_PHASE] = { FIELD_INIT(.reg, { AD936X_REG_RX1_INPUT_A_PHASE_CORR, AD936X_REG_RX1_INPUT_BC_PHASE_CORR }), FIELD_INIT(.shift, 6), }, [BLADERF_CORR_GAIN] = { FIELD_INIT(.reg, { AD936X_REG_RX1_INPUT_A_GAIN_CORR, AD936X_REG_RX1_INPUT_BC_PHASE_CORR }), FIELD_INIT(.shift, 6), } }, [BLADERF_CHANNEL_RX(1)].corr = { [BLADERF_CORR_DCOFF_I] = { FIELD_INIT(.reg, {0, 0}), /* More complex look up */ FIELD_INIT(.shift, 0), }, [BLADERF_CORR_DCOFF_Q] = { FIELD_INIT(.reg, {0, 0}), /* More complex look up */ FIELD_INIT(.shift, 0), }, [BLADERF_CORR_PHASE] = { FIELD_INIT(.reg, { AD936X_REG_RX2_INPUT_A_PHASE_CORR, AD936X_REG_RX2_INPUT_BC_PHASE_CORR }), FIELD_INIT(.shift, 6), }, [BLADERF_CORR_GAIN] = { FIELD_INIT(.reg, { AD936X_REG_RX2_INPUT_A_GAIN_CORR, AD936X_REG_RX2_INPUT_BC_PHASE_CORR }), FIELD_INIT(.shift, 6), } }, [BLADERF_CHANNEL_TX(0)].corr = { [BLADERF_CORR_DCOFF_I] = { FIELD_INIT(.reg, { AD936X_REG_TX1_OUT_1_OFFSET_I, AD936X_REG_TX1_OUT_2_OFFSET_I }), FIELD_INIT(.shift, 5), }, [BLADERF_CORR_DCOFF_Q] = { FIELD_INIT(.reg, { AD936X_REG_TX1_OUT_1_OFFSET_Q, AD936X_REG_TX1_OUT_2_OFFSET_Q }), FIELD_INIT(.shift, 5), }, [BLADERF_CORR_PHASE] = { FIELD_INIT(.reg, { AD936X_REG_TX1_OUT_1_PHASE_CORR, AD936X_REG_TX1_OUT_2_PHASE_CORR }), FIELD_INIT(.shift, 6), }, [BLADERF_CORR_GAIN] = { FIELD_INIT(.reg, { AD936X_REG_TX1_OUT_1_GAIN_CORR, AD936X_REG_TX1_OUT_2_GAIN_CORR }), FIELD_INIT(.shift, 6), } }, [BLADERF_CHANNEL_TX(1)].corr = { [BLADERF_CORR_DCOFF_I] = { FIELD_INIT(.reg, { AD936X_REG_TX2_OUT_1_OFFSET_I, AD936X_REG_TX2_OUT_2_OFFSET_I }), FIELD_INIT(.shift, 5), }, [BLADERF_CORR_DCOFF_Q] = { FIELD_INIT(.reg, { AD936X_REG_TX2_OUT_1_OFFSET_Q, AD936X_REG_TX2_OUT_2_OFFSET_Q }), FIELD_INIT(.shift, 5), }, [BLADERF_CORR_PHASE] = { FIELD_INIT(.reg, { AD936X_REG_TX2_OUT_1_PHASE_CORR, AD936X_REG_TX2_OUT_2_PHASE_CORR }), FIELD_INIT(.shift, 6), }, [BLADERF_CORR_GAIN] = { FIELD_INIT(.reg, { AD936X_REG_TX2_OUT_1_GAIN_CORR, AD936X_REG_TX2_OUT_2_GAIN_CORR }), FIELD_INIT(.shift, 6), } }, }; static const struct { uint16_t reg_top; uint16_t reg_bot; } ad9361_correction_rx_dcoff_reg_table[4][2][2] = { /* Channel 1 */ [BLADERF_CHANNEL_RX(0)] = { /* A band */ { /* I */ {AD936X_REG_INPUT_A_OFFSETS_1, AD936X_REG_RX1_INPUT_A_OFFSETS}, /* Q */ {AD936X_REG_RX1_INPUT_A_OFFSETS, AD936X_REG_RX1_INPUT_A_Q_OFFSET}, }, /* B/C band */ { /* I */ {AD936X_REG_INPUT_BC_OFFSETS_1, AD936X_REG_RX1_INPUT_BC_OFFSETS}, /* Q */ {AD936X_REG_RX1_INPUT_BC_OFFSETS, AD936X_REG_RX1_INPUT_BC_Q_OFFSET}, }, }, /* Channel 2 */ [BLADERF_CHANNEL_RX(1)] = { /* A band */ { /* I */ {AD936X_REG_RX2_INPUT_A_I_OFFSET, AD936X_REG_RX2_INPUT_A_OFFSETS}, /* Q */ {AD936X_REG_RX2_INPUT_A_OFFSETS, AD936X_REG_INPUT_A_OFFSETS_1}, }, /* B/C band */ { /* I */ {AD936X_REG_RX2_INPUT_BC_I_OFFSET, AD936X_REG_RX2_INPUT_BC_OFFSETS}, /* Q */ {AD936X_REG_RX2_INPUT_BC_OFFSETS, AD936X_REG_INPUT_BC_OFFSETS_1}, }, }, }; static const int ad9361_correction_force_bit[2][4][2] = { [0] = { [BLADERF_CORR_DCOFF_I] = {2, 6}, [BLADERF_CORR_DCOFF_Q] = {2, 6}, [BLADERF_CORR_PHASE] = {0, 4}, [BLADERF_CORR_GAIN] = {0, 4}, }, [1] = { [BLADERF_CORR_DCOFF_I] = {3, 7}, [BLADERF_CORR_DCOFF_Q] = {3, 7}, [BLADERF_CORR_PHASE] = {1, 5}, [BLADERF_CORR_GAIN] = {1, 5}, }, }; // clang-format on static int bladerf2_get_correction(struct bladerf *dev, bladerf_channel ch, bladerf_correction corr, int16_t *value) { CHECK_BOARD_STATE(STATE_INITIALIZED); NULL_CHECK(value); struct bladerf2_board_data *board_data = dev->board_data; struct ad9361_rf_phy *phy = board_data->phy; bool low_band; uint16_t reg, data; unsigned int shift; int32_t val; IF_COMMAND_MODE(dev, RFIC_COMMAND_FPGA, { log_debug("%s: FPGA command mode not supported\n", __FUNCTION__); return BLADERF_ERR_UNSUPPORTED; }); /* Validate channel */ if (ch != BLADERF_CHANNEL_RX(0) && ch != BLADERF_CHANNEL_RX(1) && ch != BLADERF_CHANNEL_TX(0) && ch != BLADERF_CHANNEL_TX(1)) { RETURN_INVAL_ARG("channel", ch, "is not valid"); } /* Validate correction */ if (corr != BLADERF_CORR_DCOFF_I && corr != BLADERF_CORR_DCOFF_Q && corr != BLADERF_CORR_PHASE && corr != BLADERF_CORR_GAIN) { RETURN_ERROR_STATUS("corr", BLADERF_ERR_UNSUPPORTED); } /* Look up band */ if (BLADERF_CHANNEL_IS_TX(ch)) { uint32_t mode; CHECK_AD936X(ad9361_get_tx_rf_port_output(phy, &mode)); low_band = (mode != AD936X_TXA); } else { uint32_t mode; CHECK_AD936X(ad9361_get_rx_rf_port_input(phy, &mode)); /* Check if RX RF port mode is supported */ if (mode != AD936X_A_BALANCED && mode != AD936X_B_BALANCED && mode != AD936X_C_BALANCED) { RETURN_ERROR_STATUS("mode", BLADERF_ERR_UNSUPPORTED); } low_band = (mode != AD936X_A_BALANCED); } if ((corr == BLADERF_CORR_DCOFF_I || corr == BLADERF_CORR_DCOFF_Q) && (ch & BLADERF_DIRECTION_MASK) == BLADERF_RX) { /* RX DC offset corrections are stuffed in a super convoluted way in * the register map. See AD9361 register map page 51. */ bool is_q = (corr == BLADERF_CORR_DCOFF_Q); uint8_t data_top, data_bot; uint16_t data; /* Read top register */ val = ad9361_spi_read( phy->spi, ad9361_correction_rx_dcoff_reg_table[ch][low_band][is_q].reg_top); if (val < 0) { RETURN_ERROR_AD9361("ad9361_spi_read(top)", val); } data_top = val; /* Read bottom register */ val = ad9361_spi_read( phy->spi, ad9361_correction_rx_dcoff_reg_table[ch][low_band][is_q].reg_bot); if (val < 0) { RETURN_ERROR_AD9361("ad9361_spi_read(bottom)", val); } data_bot = val; if (ch == BLADERF_CHANNEL_RX(0)) { if (!is_q) { /* top: | x x x x 9 8 7 6 | */ /* bottom: | 5 4 3 2 1 0 x x | */ data = ((data_top & 0xf) << 6) | (data_bot >> 2); } else { /* top: | x x x x x x 9 8 | */ /* bottom: | 7 6 5 4 3 2 1 0 | */ data = ((data_top & 0x3) << 8) | data_bot; } } else { if (!is_q) { /* top: | 9 8 7 6 5 4 3 2 | */ /* bottom: | x x x x x x 1 0 | */ data = (data_top << 2) | (data_bot & 0x3); } else { /* top: | x x 9 8 7 6 5 4 | */ /* bottom: | 3 2 1 0 x x x x | */ data = (data_top << 4) | (data_bot >> 4); } } /* Scale 10-bit to 13-bit */ data = data << 3; /* Sign extend value */ *value = data | ((data & (1 << 12)) ? 0xf000 : 0x0000); } else { /* Look up correction register and value shift in table */ reg = ad9361_correction_reg_table[ch].corr[corr].reg[low_band]; shift = ad9361_correction_reg_table[ch].corr[corr].shift; /* Read register and scale value */ val = ad9361_spi_read(phy->spi, reg); if (val < 0) { RETURN_ERROR_AD9361("ad9361_spi_read(reg)", val); } /* Scale 8-bit to 12-bit/13-bit */ data = val << shift; /* Sign extend value */ if (shift == 5) { *value = data | ((data & (1 << 12)) ? 0xf000 : 0x0000); } else { *value = data | ((data & (1 << 13)) ? 0xc000 : 0x0000); } } return 0; } static int bladerf2_set_correction(struct bladerf *dev, bladerf_channel ch, bladerf_correction corr, int16_t value) { CHECK_BOARD_STATE(STATE_INITIALIZED); struct bladerf2_board_data *board_data = dev->board_data; struct ad9361_rf_phy *phy = board_data->phy; bool low_band; uint16_t reg, data; unsigned int shift; int32_t val; IF_COMMAND_MODE(dev, RFIC_COMMAND_FPGA, { log_debug("%s: FPGA command mode not supported\n", __FUNCTION__); return BLADERF_ERR_UNSUPPORTED; }); /* Validate channel */ if (ch != BLADERF_CHANNEL_RX(0) && ch != BLADERF_CHANNEL_RX(1) && ch != BLADERF_CHANNEL_TX(0) && ch != BLADERF_CHANNEL_TX(1)) { RETURN_INVAL_ARG("channel", ch, "is not valid"); } /* Validate correction */ if (corr != BLADERF_CORR_DCOFF_I && corr != BLADERF_CORR_DCOFF_Q && corr != BLADERF_CORR_PHASE && corr != BLADERF_CORR_GAIN) { RETURN_ERROR_STATUS("corr", BLADERF_ERR_UNSUPPORTED); } /* Look up band */ if (BLADERF_CHANNEL_IS_TX(ch)) { uint32_t mode; CHECK_AD936X(ad9361_get_tx_rf_port_output(phy, &mode)); low_band = (mode != AD936X_TXA); } else { uint32_t mode; CHECK_AD936X(ad9361_get_rx_rf_port_input(phy, &mode)); /* Check if RX RF port mode is supported */ if (mode != AD936X_A_BALANCED && mode != AD936X_B_BALANCED && mode != AD936X_C_BALANCED) { RETURN_ERROR_STATUS("mode", BLADERF_ERR_UNSUPPORTED); } low_band = (mode != AD936X_A_BALANCED); } if ((corr == BLADERF_CORR_DCOFF_I || corr == BLADERF_CORR_DCOFF_Q) && (ch & BLADERF_DIRECTION_MASK) == BLADERF_RX) { /* RX DC offset corrections are stuffed in a super convoluted way in * the register map. See AD9361 register map page 51. */ bool is_q = (corr == BLADERF_CORR_DCOFF_Q); uint8_t data_top, data_bot; /* Scale 13-bit to 10-bit */ data = value >> 3; /* Read top register */ val = ad9361_spi_read( phy->spi, ad9361_correction_rx_dcoff_reg_table[ch][low_band][is_q].reg_top); if (val < 0) { RETURN_ERROR_AD9361("ad9361_spi_read(top)", val); } data_top = val; /* Read bottom register */ val = ad9361_spi_read( phy->spi, ad9361_correction_rx_dcoff_reg_table[ch][low_band][is_q].reg_bot); if (val < 0) { RETURN_ERROR_AD9361("ad9361_spi_read(bottom)", val); } data_bot = val; /* Modify registers */ if (ch == BLADERF_CHANNEL_RX(0)) { if (!is_q) { /* top: | x x x x 9 8 7 6 | */ /* bottom: | 5 4 3 2 1 0 x x | */ data_top = (data_top & 0xf0) | ((data >> 6) & 0x0f); data_bot = (data_bot & 0x03) | ((data & 0x3f) << 2); } else { /* top: | x x x x x x 9 8 | */ /* bottom: | 7 6 5 4 3 2 1 0 | */ data_top = (data_top & 0xfc) | ((data >> 8) & 0x03); data_bot = data & 0xff; } } else { if (!is_q) { /* top: | 9 8 7 6 5 4 3 2 | */ /* bottom: | x x x x x x 1 0 | */ data_top = (data >> 2) & 0xff; data_bot = (data_bot & 0xfc) | (data & 0x03); } else { /* top: | x x 9 8 7 6 5 4 | */ /* bottom: | 3 2 1 0 x x x x | */ data_top = (data & 0xc0) | ((data >> 4) & 0x3f); data_bot = (data & 0x0f) | ((data & 0x0f) << 4); } } /* Write top register */ CHECK_AD936X(ad9361_spi_write( phy->spi, ad9361_correction_rx_dcoff_reg_table[ch][low_band][is_q].reg_top, data_top)); /* Write bottom register */ CHECK_AD936X(ad9361_spi_write( phy->spi, ad9361_correction_rx_dcoff_reg_table[ch][low_band][is_q].reg_bot, data_bot)); } else { /* Look up correction register and value shift in table */ reg = ad9361_correction_reg_table[ch].corr[corr].reg[low_band]; shift = ad9361_correction_reg_table[ch].corr[corr].shift; /* Scale 12-bit/13-bit to 8-bit */ data = (value >> shift) & 0xff; /* Write register */ CHECK_AD936X(ad9361_spi_write(phy->spi, reg, data & 0xff)); } reg = (BLADERF_CHANNEL_IS_TX(ch)) ? AD936X_REG_TX_FORCE_BITS : AD936X_REG_FORCE_BITS; /* Read force bit register */ val = ad9361_spi_read(phy->spi, reg); if (val < 0) { RETURN_ERROR_AD9361("ad9361_spi_read(force)", val); } /* Modify register */ data = val | (1 << ad9361_correction_force_bit[ch >> 1][corr][low_band]); /* Write force bit register */ CHECK_AD936X(ad9361_spi_write(phy->spi, reg, data)); return 0; } /******************************************************************************/ /* Trigger */ /******************************************************************************/ static int bladerf2_trigger_init(struct bladerf *dev, bladerf_channel ch, bladerf_trigger_signal signal, struct bladerf_trigger *trigger) { CHECK_BOARD_STATE(STATE_INITIALIZED); NULL_CHECK(trigger); return fpga_trigger_init(dev, ch, signal, trigger); } static int bladerf2_trigger_arm(struct bladerf *dev, struct bladerf_trigger const *trigger, bool arm, uint64_t resv1, uint64_t resv2) { CHECK_BOARD_STATE(STATE_INITIALIZED); NULL_CHECK(trigger); return fpga_trigger_arm(dev, trigger, arm); } static int bladerf2_trigger_fire(struct bladerf *dev, struct bladerf_trigger const *trigger) { CHECK_BOARD_STATE(STATE_INITIALIZED); NULL_CHECK(trigger); return fpga_trigger_fire(dev, trigger); } static int bladerf2_trigger_state(struct bladerf *dev, struct bladerf_trigger const *trigger, bool *is_armed, bool *has_fired, bool *fire_requested, uint64_t *resv1, uint64_t *resv2) { CHECK_BOARD_STATE(STATE_INITIALIZED); NULL_CHECK(trigger); NULL_CHECK(is_armed); NULL_CHECK(has_fired); NULL_CHECK(fire_requested); /* Reserved for future metadata (e.g., trigger counts, timestamp) */ if (resv1 != NULL) { *resv1 = 0; } if (resv2 != NULL) { *resv2 = 0; } return fpga_trigger_state(dev, trigger, is_armed, has_fired, fire_requested); } /******************************************************************************/ /* Streaming */ /******************************************************************************/ static int bladerf2_init_stream(struct bladerf_stream **stream, struct bladerf *dev, bladerf_stream_cb callback, void ***buffers, size_t num_buffers, bladerf_format format, size_t samples_per_buffer, size_t num_transfers, void *user_data) { CHECK_BOARD_STATE(STATE_INITIALIZED); return async_init_stream(stream, dev, callback, buffers, num_buffers, format, samples_per_buffer, num_transfers, user_data); } static int bladerf2_stream(struct bladerf_stream *stream, bladerf_channel_layout layout) { bladerf_direction dir = layout & BLADERF_DIRECTION_MASK; int rv; switch (layout) { case BLADERF_RX_X1: case BLADERF_RX_X2: case BLADERF_TX_X1: case BLADERF_TX_X2: break; default: return -EINVAL; } WITH_MUTEX(&stream->dev->lock, { CHECK_STATUS_LOCKED( perform_format_config(stream->dev, dir, stream->format)); }); rv = async_run_stream(stream, layout); WITH_MUTEX(&stream->dev->lock, { CHECK_STATUS_LOCKED( perform_format_deconfig(stream->dev, dir)); }); return rv; } static int bladerf2_submit_stream_buffer(struct bladerf_stream *stream, void *buffer, unsigned int timeout_ms, bool nonblock) { size_t len; len = async_stream_buf_bytes(stream); return async_submit_stream_buffer(stream, buffer, &len, timeout_ms, nonblock); } static void bladerf2_deinit_stream(struct bladerf_stream *stream) { async_deinit_stream(stream); } static int bladerf2_set_stream_timeout(struct bladerf *dev, bladerf_direction dir, unsigned int timeout) { CHECK_BOARD_STATE(STATE_INITIALIZED); struct bladerf2_board_data *board_data = dev->board_data; WITH_MUTEX(&board_data->sync[dir].lock, { board_data->sync[dir].stream_config.timeout_ms = timeout; }); return 0; } static int bladerf2_get_stream_timeout(struct bladerf *dev, bladerf_direction dir, unsigned int *timeout) { CHECK_BOARD_STATE(STATE_INITIALIZED); NULL_CHECK(timeout); struct bladerf2_board_data *board_data = dev->board_data; WITH_MUTEX(&board_data->sync[dir].lock, { *timeout = board_data->sync[dir].stream_config.timeout_ms; }); return 0; } static int bladerf2_sync_config(struct bladerf *dev, bladerf_channel_layout layout, bladerf_format format, unsigned int num_buffers, unsigned int buffer_size, unsigned int num_transfers, unsigned int stream_timeout) { CHECK_BOARD_STATE(STATE_INITIALIZED); struct bladerf2_board_data *board_data = dev->board_data; bladerf_direction dir = layout & BLADERF_DIRECTION_MASK; int status; if (dev->feature == BLADERF_FEATURE_OVERSAMPLE && (format == BLADERF_FORMAT_SC16_Q11 || format == BLADERF_FORMAT_SC16_Q11_META)) { log_error("16bit format unsupported with OVERSAMPLE feature enabled\n"); return BLADERF_ERR_UNSUPPORTED; } switch (layout) { case BLADERF_RX_X1: case BLADERF_RX_X2: case BLADERF_TX_X1: case BLADERF_TX_X2: break; default: return -EINVAL; } status = perform_format_config(dev, dir, format); if (0 == status) { status = sync_init(&board_data->sync[dir], dev, layout, format, num_buffers, buffer_size, board_data->msg_size, num_transfers, stream_timeout); if (status != 0) { perform_format_deconfig(dev, dir); } } return status; } static int bladerf2_sync_tx(struct bladerf *dev, void const *samples, unsigned int num_samples, struct bladerf_metadata *metadata, unsigned int timeout_ms) { CHECK_BOARD_STATE(STATE_INITIALIZED); struct bladerf2_board_data *board_data = dev->board_data; if (!board_data->sync[BLADERF_TX].initialized) { RETURN_INVAL("sync tx", "not initialized"); } return sync_tx(&board_data->sync[BLADERF_TX], samples, num_samples, metadata, timeout_ms); } static int bladerf2_sync_rx(struct bladerf *dev, void *samples, unsigned int num_samples, struct bladerf_metadata *metadata, unsigned int timeout_ms) { CHECK_BOARD_STATE(STATE_INITIALIZED); struct bladerf2_board_data *board_data = dev->board_data; if (!board_data->sync[BLADERF_RX].initialized) { RETURN_INVAL("sync rx", "not initialized"); } return sync_rx(&board_data->sync[BLADERF_RX], samples, num_samples, metadata, timeout_ms); } static int bladerf2_get_timestamp(struct bladerf *dev, bladerf_direction dir, bladerf_timestamp *value) { CHECK_BOARD_STATE(STATE_INITIALIZED); NULL_CHECK(value); return dev->backend->get_timestamp(dev, dir, value); } /******************************************************************************/ /* FPGA/Firmware Loading/Flashing */ /******************************************************************************/ static int bladerf2_load_fpga(struct bladerf *dev, uint8_t const *buf, size_t length) { CHECK_BOARD_STATE(STATE_FIRMWARE_LOADED); NULL_CHECK(buf); struct bladerf2_board_data *board_data = dev->board_data; if (!is_valid_fpga_size(dev, board_data->fpga_size, length)) { RETURN_INVAL("fpga file", "incorrect file size"); } CHECK_STATUS(dev->backend->load_fpga(dev, buf, length)); /* Update device state */ board_data->state = STATE_FPGA_LOADED; CHECK_STATUS(_bladerf2_initialize(dev)); return 0; } static int bladerf2_flash_fpga(struct bladerf *dev, uint8_t const *buf, size_t length) { CHECK_BOARD_STATE(STATE_FIRMWARE_LOADED); NULL_CHECK(buf); struct bladerf2_board_data *board_data = dev->board_data; if (!is_valid_fpga_size(dev, board_data->fpga_size, length)) { RETURN_INVAL("fpga file", "incorrect file size"); } return spi_flash_write_fpga_bitstream(dev, buf, length); } static int bladerf2_erase_stored_fpga(struct bladerf *dev) { CHECK_BOARD_STATE(STATE_FIRMWARE_LOADED); return spi_flash_erase_fpga(dev); } static int bladerf2_flash_firmware(struct bladerf *dev, uint8_t const *buf, size_t length) { CHECK_BOARD_STATE(STATE_FIRMWARE_LOADED); NULL_CHECK(buf); char const env_override[] = "BLADERF_SKIP_FW_SIZE_CHECK"; /* Sanity check firmware length. * * TODO in the future, better sanity checks can be performed when * using the bladerf image format currently used to backup/restore * calibration data */ if (!getenv(env_override) && !is_valid_fw_size(length)) { log_info("Detected potentially invalid firmware file.\n"); log_info("Define BLADERF_SKIP_FW_SIZE_CHECK in your environment " "to skip this check.\n"); RETURN_INVAL_ARG("firmware size", length, "is not valid"); } return spi_flash_write_fx3_fw(dev, buf, length); } static int bladerf2_device_reset(struct bladerf *dev) { CHECK_BOARD_STATE(STATE_FIRMWARE_LOADED); return dev->backend->device_reset(dev); } /******************************************************************************/ /* Tuning mode */ /******************************************************************************/ static inline bool _supports_fpga_tuning(struct bladerf *dev) { extern struct controller_fns const rfic_fpga_control; struct bladerf2_board_data *board_data = dev->board_data; return (have_cap(board_data->capabilities, BLADERF_CAP_FPGA_TUNING) && rfic_fpga_control.is_present(dev)); } static int bladerf2_set_tuning_mode(struct bladerf *dev, bladerf_tuning_mode mode) { CHECK_BOARD_STATE(STATE_FPGA_LOADED); extern struct controller_fns const rfic_host_control; extern struct controller_fns const rfic_fpga_control; struct bladerf2_board_data *board_data = dev->board_data; struct controller_fns const *rfic_new = NULL; struct controller_fns const *rfic_other = NULL; bladerf_tuning_mode mode_other; bladerf_rfic_init_state init_state; log_debug("%s: New tuning mode: %s\n", __FUNCTION__, tuningmode2str(mode)); switch (mode) { case BLADERF_TUNING_MODE_HOST: rfic_new = &rfic_host_control; rfic_other = _supports_fpga_tuning(dev) ? &rfic_fpga_control : NULL; mode_other = BLADERF_TUNING_MODE_FPGA; break; case BLADERF_TUNING_MODE_FPGA: /* Test capability */ if (!_supports_fpga_tuning(dev)) { log_debug("%s: The loaded FPGA version (%u.%u.%u) does not " "support FPGA RFIC control\n", __FUNCTION__, board_data->fpga_version.major, board_data->fpga_version.minor, board_data->fpga_version.patch); return BLADERF_ERR_UNSUPPORTED; } rfic_new = &rfic_fpga_control; rfic_other = &rfic_host_control; mode_other = BLADERF_TUNING_MODE_HOST; break; default: log_error("%s: invalid tuning mode (%d)\n", mode); return BLADERF_ERR_INVAL; } /* De-initialize RFIC if it's initialized by another tuning mode */ if (NULL != rfic_other) { CHECK_STATUS(rfic_other->get_init_state(dev, &init_state)); if (init_state != BLADERF_RFIC_INIT_STATE_OFF) { log_debug("%s: %s %s RFIC control\n", __FUNCTION__, "Releasing", tuningmode2str(mode_other)); CHECK_STATUS(rfic_other->deinitialize(dev)); } } /* Set board data */ board_data->rfic = rfic_new; board_data->tuning_mode = mode; /* Bring RFIC to initialized state */ CHECK_STATUS(rfic_new->get_init_state(dev, &init_state)); switch (init_state) { case BLADERF_RFIC_INIT_STATE_OFF: log_debug("%s: %s %s RFIC control\n", __FUNCTION__, "Initializing", tuningmode2str(mode)); return rfic_new->initialize(dev); case BLADERF_RFIC_INIT_STATE_STANDBY: log_debug("%s: %s %s RFIC control\n", __FUNCTION__, "Restoring", tuningmode2str(mode)); return rfic_new->initialize(dev); case BLADERF_RFIC_INIT_STATE_ON: log_debug("%s: %s %s RFIC control\n", __FUNCTION__, "Maintaining", tuningmode2str(mode)); return 0; default: log_error("%s: invalid RFIC initialization state (%d)\n", init_state); return BLADERF_ERR_UNEXPECTED; } } static int bladerf2_get_tuning_mode(struct bladerf *dev, bladerf_tuning_mode *mode) { CHECK_BOARD_STATE(STATE_INITIALIZED); NULL_CHECK(mode); struct bladerf2_board_data *board_data = dev->board_data; *mode = board_data->tuning_mode; return 0; } /******************************************************************************/ /* Loopback */ /******************************************************************************/ static int bladerf2_get_loopback_modes( struct bladerf *dev, struct bladerf_loopback_modes const **modes) { if (modes != NULL) { *modes = bladerf2_loopback_modes; } return ARRAY_SIZE(bladerf2_loopback_modes); } static int bladerf2_set_loopback(struct bladerf *dev, bladerf_loopback mode) { CHECK_BOARD_STATE(STATE_INITIALIZED); struct bladerf2_board_data *board_data = dev->board_data; struct ad9361_rf_phy *phy = board_data->phy; bool firmware_loopback = false; int32_t bist_loopback = 0; IF_COMMAND_MODE(dev, RFIC_COMMAND_FPGA, { if (BLADERF_LB_RFIC_BIST == mode) { log_debug( "%s: BLADERF_LB_RFIC_BIST not supported in FPGA command mode\n", __FUNCTION__); return BLADERF_ERR_UNSUPPORTED; } }); switch (mode) { case BLADERF_LB_NONE: break; case BLADERF_LB_FIRMWARE: firmware_loopback = true; break; case BLADERF_LB_RFIC_BIST: bist_loopback = 1; break; default: log_error("%s: unknown loopback mode (%d)\n", __FUNCTION__, mode); return BLADERF_ERR_UNEXPECTED; } IF_COMMAND_MODE(dev, RFIC_COMMAND_HOST, { /* Set digital loopback state */ CHECK_AD936X(ad9361_bist_loopback(phy, bist_loopback)); }); /* Set firmware loopback state */ CHECK_STATUS(dev->backend->set_firmware_loopback(dev, firmware_loopback)); return 0; } static int bladerf2_get_loopback(struct bladerf *dev, bladerf_loopback *mode) { CHECK_BOARD_STATE(STATE_INITIALIZED); NULL_CHECK(mode); struct bladerf2_board_data *board_data = dev->board_data; struct ad9361_rf_phy *phy = board_data->phy; int32_t ad9361_loopback; bool fw_loopback; /* Read firwmare loopback */ CHECK_STATUS(dev->backend->get_firmware_loopback(dev, &fw_loopback)); if (fw_loopback) { *mode = BLADERF_LB_FIRMWARE; return 0; } IF_COMMAND_MODE(dev, RFIC_COMMAND_HOST, { /* Read AD9361 bist loopback */ /* Note: this returns void */ ad9361_get_bist_loopback(phy, &ad9361_loopback); if (ad9361_loopback == 1) { *mode = BLADERF_LB_RFIC_BIST; return 0; } }); *mode = BLADERF_LB_NONE; return 0; } /******************************************************************************/ /* Sample RX FPGA Mux */ /******************************************************************************/ static int bladerf2_set_rx_mux(struct bladerf *dev, bladerf_rx_mux mode) { CHECK_BOARD_STATE(STATE_INITIALIZED); uint32_t rx_mux_val, config_gpio; /* Validate desired mux mode */ switch (mode) { case BLADERF_RX_MUX_BASEBAND: case BLADERF_RX_MUX_12BIT_COUNTER: case BLADERF_RX_MUX_32BIT_COUNTER: case BLADERF_RX_MUX_DIGITAL_LOOPBACK: rx_mux_val = ((uint32_t)mode) << BLADERF_GPIO_RX_MUX_SHIFT; break; default: log_debug("Invalid RX mux mode setting passed to %s(): %d\n", mode, __FUNCTION__); RETURN_INVAL_ARG("bladerf_rx_mux", mode, "is invalid"); } CHECK_STATUS(dev->backend->config_gpio_read(dev, &config_gpio)); /* Clear out and assign the associated RX mux bits */ config_gpio &= ~BLADERF_GPIO_RX_MUX_MASK; config_gpio |= rx_mux_val; CHECK_STATUS(dev->backend->config_gpio_write(dev, config_gpio)); return 0; } static int bladerf2_get_rx_mux(struct bladerf *dev, bladerf_rx_mux *mode) { CHECK_BOARD_STATE(STATE_INITIALIZED); NULL_CHECK(mode); bladerf_rx_mux val; uint32_t config_gpio; CHECK_STATUS(dev->backend->config_gpio_read(dev, &config_gpio)); /* Extract RX mux bits */ config_gpio &= BLADERF_GPIO_RX_MUX_MASK; config_gpio >>= BLADERF_GPIO_RX_MUX_SHIFT; val = config_gpio; /* Ensure it's a valid/supported value */ switch (val) { case BLADERF_RX_MUX_BASEBAND: case BLADERF_RX_MUX_12BIT_COUNTER: case BLADERF_RX_MUX_32BIT_COUNTER: case BLADERF_RX_MUX_DIGITAL_LOOPBACK: *mode = val; break; default: *mode = BLADERF_RX_MUX_INVALID; log_debug("Invalid rx mux mode %d read from config gpio\n", val); return BLADERF_ERR_UNEXPECTED; } return 0; } /******************************************************************************/ /* Low-level VCTCXO Tamer Mode */ /******************************************************************************/ static int bladerf2_set_vctcxo_tamer_mode(struct bladerf *dev, bladerf_vctcxo_tamer_mode mode) { return BLADERF_ERR_UNSUPPORTED; } static int bladerf2_get_vctcxo_tamer_mode(struct bladerf *dev, bladerf_vctcxo_tamer_mode *mode) { return BLADERF_ERR_UNSUPPORTED; } /******************************************************************************/ /* Low-level VCTCXO Trim DAC access */ /******************************************************************************/ static int _bladerf2_get_trim_dac_enable(struct bladerf *dev, bool *enable) { CHECK_BOARD_STATE(STATE_FPGA_LOADED); NULL_CHECK(enable); uint16_t trim; // Read current trim DAC setting CHECK_STATUS(dev->backend->ad56x1_vctcxo_trim_dac_read(dev, &trim)); // Determine if it's enabled... *enable = (TRIMDAC_EN_ACTIVE == (trim >> TRIMDAC_EN)); log_debug("trim DAC is %s\n", (*enable ? "enabled" : "disabled")); if ((trim >> TRIMDAC_EN) != TRIMDAC_EN_ACTIVE && (trim >> TRIMDAC_EN) != TRIMDAC_EN_HIGHZ) { log_warning("unknown trim DAC state: 0x%x\n", (trim >> TRIMDAC_EN)); } return 0; } static int _bladerf2_set_trim_dac_enable(struct bladerf *dev, bool enable) { CHECK_BOARD_STATE(STATE_FPGA_LOADED); struct bladerf2_board_data *board_data = dev->board_data; uint16_t trim; bool current_state; // See if we have anything to do CHECK_STATUS(_bladerf2_get_trim_dac_enable(dev, ¤t_state)); if (enable == current_state) { log_debug("trim DAC already %s, nothing to do\n", enable ? "enabled" : "disabled"); return 0; } // Read current trim DAC setting CHECK_STATUS(dev->backend->ad56x1_vctcxo_trim_dac_read(dev, &trim)); // Set the trim DAC to high z if applicable if (!enable && trim != (TRIMDAC_EN_HIGHZ << TRIMDAC_EN)) { board_data->trimdac_last_value = trim; log_debug("saving current trim DAC value: 0x%04x\n", trim); trim = TRIMDAC_EN_HIGHZ << TRIMDAC_EN; } else if (enable && trim == (TRIMDAC_EN_HIGHZ << TRIMDAC_EN)) { trim = board_data->trimdac_last_value; log_debug("restoring old trim DAC value: 0x%04x\n", trim); } // Write back the trim DAC setting CHECK_STATUS(dev->backend->ad56x1_vctcxo_trim_dac_write(dev, trim)); // Update our state flag board_data->trim_source = enable ? TRIM_SOURCE_TRIM_DAC : TRIM_SOURCE_NONE; return 0; } /** * @brief Read the VCTCXO trim value from the SPI flash * * Retrieves the factory VCTCXO value from the SPI flash. This function * should not be used while sample streaming is in progress. * * @param dev Device handle * @param trim Pointer to populate with the trim value * * @return 0 on success, value from \ref RETCODES list on failure */ static int bladerf2_read_flash_vctcxo_trim(struct bladerf *dev, uint16_t *trim) { CHECK_BOARD_STATE(STATE_FIRMWARE_LOADED); NULL_CHECK(trim); int status; status = spi_flash_read_vctcxo_trim(dev, trim); if (status < 0) { log_warning("Failed to get VCTCXO trim value: %s\n", bladerf_strerror(status)); log_debug("Defaulting DAC trim to 0x1ffc.\n"); *trim = 0x1ffc; return 0; } return status; } static int bladerf2_get_vctcxo_trim(struct bladerf *dev, uint16_t *trim) { CHECK_BOARD_STATE(STATE_FPGA_LOADED); NULL_CHECK(trim); struct bladerf2_board_data *board_data = dev->board_data; *trim = board_data->trimdac_stored_value; return 0; } static int bladerf2_trim_dac_read(struct bladerf *dev, uint16_t *trim) { CHECK_BOARD_STATE(STATE_FPGA_LOADED); NULL_CHECK(trim); return dev->backend->ad56x1_vctcxo_trim_dac_read(dev, trim); } static int bladerf2_trim_dac_write(struct bladerf *dev, uint16_t trim) { CHECK_BOARD_STATE(STATE_FPGA_LOADED); struct bladerf2_board_data *board_data = dev->board_data; uint16_t trim_control = (trim >> TRIMDAC_EN) & TRIMDAC_EN_MASK; uint16_t trim_value = trim & TRIMDAC_MASK; bool enable; log_debug("requested trim 0x%04x (control 0x%01x value 0x%04x)\n", trim, trim_control, trim_value); // Is the trimdac enabled? CHECK_STATUS(_bladerf2_get_trim_dac_enable(dev, &enable)); // If the trimdac is not enabled, save this value for later but don't // apply it. if (!enable && trim_control != TRIMDAC_EN_HIGHZ) { log_warning("trim DAC is disabled. New value will be saved until " "trim DAC is enabled\n"); board_data->trimdac_last_value = trim_value; return 0; } return dev->backend->ad56x1_vctcxo_trim_dac_write(dev, trim); } /******************************************************************************/ /* Low-level Trigger control access */ /******************************************************************************/ static int bladerf2_read_trigger(struct bladerf *dev, bladerf_channel ch, bladerf_trigger_signal trigger, uint8_t *val) { CHECK_BOARD_STATE(STATE_FPGA_LOADED); NULL_CHECK(val); return fpga_trigger_read(dev, ch, trigger, val); } static int bladerf2_write_trigger(struct bladerf *dev, bladerf_channel ch, bladerf_trigger_signal trigger, uint8_t val) { CHECK_BOARD_STATE(STATE_FPGA_LOADED); return fpga_trigger_write(dev, ch, trigger, val); } /******************************************************************************/ /* Low-level Wishbone Master access */ /******************************************************************************/ static int bladerf2_wishbone_master_read(struct bladerf *dev, uint32_t addr, uint32_t *data) { CHECK_BOARD_STATE(STATE_FPGA_LOADED); NULL_CHECK(data); return dev->backend->wishbone_master_read(dev, addr, data); } static int bladerf2_wishbone_master_write(struct bladerf *dev, uint32_t addr, uint32_t data) { CHECK_BOARD_STATE(STATE_FPGA_LOADED); return dev->backend->wishbone_master_write(dev, addr, data); } /******************************************************************************/ /* Low-level Configuration GPIO access */ /******************************************************************************/ static int bladerf2_config_gpio_read(struct bladerf *dev, uint32_t *val) { CHECK_BOARD_STATE(STATE_FPGA_LOADED); NULL_CHECK(val); return dev->backend->config_gpio_read(dev, val); } static int bladerf2_config_gpio_write(struct bladerf *dev, uint32_t val) { CHECK_BOARD_STATE(STATE_FPGA_LOADED); return dev->backend->config_gpio_write(dev, val); } /******************************************************************************/ /* Low-level SPI Flash access */ /******************************************************************************/ static int bladerf2_erase_flash(struct bladerf *dev, uint32_t erase_block, uint32_t count) { CHECK_BOARD_STATE(STATE_FIRMWARE_LOADED); return spi_flash_erase(dev, erase_block, count); } static int bladerf2_read_flash(struct bladerf *dev, uint8_t *buf, uint32_t page, uint32_t count) { CHECK_BOARD_STATE(STATE_FIRMWARE_LOADED); NULL_CHECK(buf); return spi_flash_read(dev, buf, page, count); } static int bladerf2_write_flash(struct bladerf *dev, uint8_t const *buf, uint32_t page, uint32_t count) { CHECK_BOARD_STATE(STATE_FIRMWARE_LOADED); NULL_CHECK(buf); return spi_flash_write(dev, buf, page, count); } /******************************************************************************/ /* Expansion support */ /******************************************************************************/ static int bladerf2_expansion_attach(struct bladerf *dev, bladerf_xb xb) { return BLADERF_ERR_UNSUPPORTED; } static int bladerf2_expansion_get_attached(struct bladerf *dev, bladerf_xb *xb) { NULL_CHECK(xb); *xb = BLADERF_XB_NONE; return 0; } /******************************************************************************/ /* Board binding */ /******************************************************************************/ struct board_fns const bladerf2_board_fns = { FIELD_INIT(.matches, bladerf2_matches), FIELD_INIT(.open, bladerf2_open), FIELD_INIT(.close, bladerf2_close), FIELD_INIT(.device_speed, bladerf2_device_speed), FIELD_INIT(.get_serial, bladerf2_get_serial), FIELD_INIT(.get_fpga_size, bladerf2_get_fpga_size), FIELD_INIT(.get_fpga_bytes, bladerf2_get_fpga_bytes), FIELD_INIT(.get_flash_size, bladerf2_get_flash_size), FIELD_INIT(.is_fpga_configured, bladerf2_is_fpga_configured), FIELD_INIT(.get_fpga_source, bladerf2_get_fpga_source), FIELD_INIT(.get_capabilities, bladerf2_get_capabilities), FIELD_INIT(.get_channel_count, bladerf2_get_channel_count), FIELD_INIT(.get_fpga_version, bladerf2_get_fpga_version), FIELD_INIT(.get_fw_version, bladerf2_get_fw_version), FIELD_INIT(.set_gain, bladerf2_set_gain), FIELD_INIT(.get_gain, bladerf2_get_gain), FIELD_INIT(.set_gain_mode, bladerf2_set_gain_mode), FIELD_INIT(.get_gain_mode, bladerf2_get_gain_mode), FIELD_INIT(.get_gain_modes, bladerf2_get_gain_modes), FIELD_INIT(.get_gain_range, bladerf2_get_gain_range), FIELD_INIT(.set_gain_stage, bladerf2_set_gain_stage), FIELD_INIT(.get_gain_stage, bladerf2_get_gain_stage), FIELD_INIT(.get_gain_stage_range, bladerf2_get_gain_stage_range), FIELD_INIT(.get_gain_stages, bladerf2_get_gain_stages), FIELD_INIT(.set_sample_rate, bladerf2_set_sample_rate), FIELD_INIT(.set_rational_sample_rate, bladerf2_set_rational_sample_rate), FIELD_INIT(.get_sample_rate, bladerf2_get_sample_rate), FIELD_INIT(.get_sample_rate_range, bladerf2_get_sample_rate_range), FIELD_INIT(.get_rational_sample_rate, bladerf2_get_rational_sample_rate), FIELD_INIT(.set_bandwidth, bladerf2_set_bandwidth), FIELD_INIT(.get_bandwidth, bladerf2_get_bandwidth), FIELD_INIT(.get_bandwidth_range, bladerf2_get_bandwidth_range), FIELD_INIT(.get_frequency, bladerf2_get_frequency), FIELD_INIT(.set_frequency, bladerf2_set_frequency), FIELD_INIT(.get_frequency_range, bladerf2_get_frequency_range), FIELD_INIT(.select_band, bladerf2_select_band), FIELD_INIT(.set_rf_port, bladerf2_set_rf_port), FIELD_INIT(.get_rf_port, bladerf2_get_rf_port), FIELD_INIT(.get_rf_ports, bladerf2_get_rf_ports), FIELD_INIT(.get_quick_tune, bladerf2_get_quick_tune), FIELD_INIT(.schedule_retune, bladerf2_schedule_retune), FIELD_INIT(.cancel_scheduled_retunes, bladerf2_cancel_scheduled_retunes), FIELD_INIT(.get_correction, bladerf2_get_correction), FIELD_INIT(.set_correction, bladerf2_set_correction), FIELD_INIT(.trigger_init, bladerf2_trigger_init), FIELD_INIT(.trigger_arm, bladerf2_trigger_arm), FIELD_INIT(.trigger_fire, bladerf2_trigger_fire), FIELD_INIT(.trigger_state, bladerf2_trigger_state), FIELD_INIT(.enable_module, bladerf2_enable_module), FIELD_INIT(.init_stream, bladerf2_init_stream), FIELD_INIT(.stream, bladerf2_stream), FIELD_INIT(.submit_stream_buffer, bladerf2_submit_stream_buffer), FIELD_INIT(.deinit_stream, bladerf2_deinit_stream), FIELD_INIT(.set_stream_timeout, bladerf2_set_stream_timeout), FIELD_INIT(.get_stream_timeout, bladerf2_get_stream_timeout), FIELD_INIT(.sync_config, bladerf2_sync_config), FIELD_INIT(.sync_tx, bladerf2_sync_tx), FIELD_INIT(.sync_rx, bladerf2_sync_rx), FIELD_INIT(.get_timestamp, bladerf2_get_timestamp), FIELD_INIT(.load_fpga, bladerf2_load_fpga), FIELD_INIT(.flash_fpga, bladerf2_flash_fpga), FIELD_INIT(.erase_stored_fpga, bladerf2_erase_stored_fpga), FIELD_INIT(.flash_firmware, bladerf2_flash_firmware), FIELD_INIT(.device_reset, bladerf2_device_reset), FIELD_INIT(.set_tuning_mode, bladerf2_set_tuning_mode), FIELD_INIT(.get_tuning_mode, bladerf2_get_tuning_mode), FIELD_INIT(.get_loopback_modes, bladerf2_get_loopback_modes), FIELD_INIT(.set_loopback, bladerf2_set_loopback), FIELD_INIT(.get_loopback, bladerf2_get_loopback), FIELD_INIT(.get_rx_mux, bladerf2_get_rx_mux), FIELD_INIT(.set_rx_mux, bladerf2_set_rx_mux), FIELD_INIT(.set_vctcxo_tamer_mode, bladerf2_set_vctcxo_tamer_mode), FIELD_INIT(.get_vctcxo_tamer_mode, bladerf2_get_vctcxo_tamer_mode), FIELD_INIT(.get_vctcxo_trim, bladerf2_get_vctcxo_trim), FIELD_INIT(.trim_dac_read, bladerf2_trim_dac_read), FIELD_INIT(.trim_dac_write, bladerf2_trim_dac_write), FIELD_INIT(.read_trigger, bladerf2_read_trigger), FIELD_INIT(.write_trigger, bladerf2_write_trigger), FIELD_INIT(.wishbone_master_read, bladerf2_wishbone_master_read), FIELD_INIT(.wishbone_master_write, bladerf2_wishbone_master_write), FIELD_INIT(.config_gpio_read, bladerf2_config_gpio_read), FIELD_INIT(.config_gpio_write, bladerf2_config_gpio_write), FIELD_INIT(.erase_flash, bladerf2_erase_flash), FIELD_INIT(.read_flash, bladerf2_read_flash), FIELD_INIT(.write_flash, bladerf2_write_flash), FIELD_INIT(.expansion_attach, bladerf2_expansion_attach), FIELD_INIT(.expansion_get_attached, bladerf2_expansion_get_attached), FIELD_INIT(.name, "bladerf2"), }; /****************************************************************************** ****************************************************************************** * bladeRF2-specific Functions * ****************************************************************************** ******************************************************************************/ /******************************************************************************/ /* Bias Tee Control */ /******************************************************************************/ int bladerf_get_bias_tee(struct bladerf *dev, bladerf_channel ch, bool *enable) { CHECK_BOARD_IS_BLADERF2(dev); CHECK_BOARD_STATE(STATE_FPGA_LOADED); NULL_CHECK(enable); WITH_MUTEX(&dev->lock, { uint32_t reg; uint32_t shift; shift = BLADERF_CHANNEL_IS_TX(ch) ? RFFE_CONTROL_TX_BIAS_EN : RFFE_CONTROL_RX_BIAS_EN; /* Read RFFE control register */ CHECK_STATUS_LOCKED(dev->backend->rffe_control_read(dev, ®)); /* Check register value */ *enable = (reg >> shift) & 0x1; }); return 0; } int bladerf_set_bias_tee(struct bladerf *dev, bladerf_channel ch, bool enable) { CHECK_BOARD_IS_BLADERF2(dev); CHECK_BOARD_STATE(STATE_FPGA_LOADED); WITH_MUTEX(&dev->lock, { uint32_t reg; uint32_t shift; shift = BLADERF_CHANNEL_IS_TX(ch) ? RFFE_CONTROL_TX_BIAS_EN : RFFE_CONTROL_RX_BIAS_EN; /* Read RFFE control register */ CHECK_STATUS_LOCKED(dev->backend->rffe_control_read(dev, ®)); /* Clear register value */ reg &= ~(1 << shift); /* Set register value */ if (enable) { reg |= (1 << shift); } /* Write RFFE control register */ log_debug("%s: rffe_control_write %08x\n", __FUNCTION__, reg); CHECK_STATUS_LOCKED(dev->backend->rffe_control_write(dev, reg)); }); return 0; } /******************************************************************************/ /* Low level RFIC Accessors */ /******************************************************************************/ int bladerf_get_rfic_register(struct bladerf *dev, uint16_t address, uint8_t *val) { CHECK_BOARD_IS_BLADERF2(dev); CHECK_BOARD_STATE(STATE_FPGA_LOADED); NULL_CHECK(val); WITH_MUTEX(&dev->lock, { uint64_t data; address |= (AD936X_READ | AD936X_CNT(1)); CHECK_AD936X_LOCKED(dev->backend->ad9361_spi_read(dev, address, &data)); *val = (data >> 56) & 0xff; }); return 0; } int bladerf_set_rfic_register(struct bladerf *dev, uint16_t address, uint8_t val) { CHECK_BOARD_IS_BLADERF2(dev); CHECK_BOARD_STATE(STATE_FPGA_LOADED); WITH_MUTEX(&dev->lock, { uint64_t data = (((uint64_t)val) << 56); address |= (AD936X_WRITE | AD936X_CNT(1)); CHECK_AD936X_LOCKED(dev->backend->ad9361_spi_write(dev, address, data)); }); return 0; } int bladerf_get_rfic_temperature(struct bladerf *dev, float *val) { CHECK_BOARD_IS_BLADERF2(dev); CHECK_BOARD_STATE(STATE_FPGA_LOADED); NULL_CHECK(val); struct bladerf2_board_data *board_data = dev->board_data; struct ad9361_rf_phy *phy = board_data->phy; IF_COMMAND_MODE(dev, RFIC_COMMAND_FPGA, { log_debug("%s: FPGA command mode not supported\n", __FUNCTION__); return BLADERF_ERR_UNSUPPORTED; }); WITH_MUTEX(&dev->lock, { *val = ad9361_get_temp(phy) / 1000.0F; }); return 0; } int bladerf_get_rfic_rssi(struct bladerf *dev, bladerf_channel ch, int *pre_rssi, int *sym_rssi) { CHECK_BOARD_IS_BLADERF2(dev); CHECK_BOARD_STATE(STATE_INITIALIZED); NULL_CHECK(pre_rssi); NULL_CHECK(sym_rssi); struct bladerf2_board_data *board_data = dev->board_data; struct controller_fns const *rfic = board_data->rfic; WITH_MUTEX(&dev->lock, { CHECK_STATUS_LOCKED(rfic->get_rssi(dev, ch, pre_rssi, sym_rssi)); }); return 0; } int bladerf_get_rfic_ctrl_out(struct bladerf *dev, uint8_t *ctrl_out) { CHECK_BOARD_IS_BLADERF2(dev); CHECK_BOARD_STATE(STATE_FPGA_LOADED); NULL_CHECK(ctrl_out); WITH_MUTEX(&dev->lock, { uint32_t reg; /* Read RFFE control register */ CHECK_STATUS_LOCKED(dev->backend->rffe_control_read(dev, ®)); *ctrl_out = (uint8_t)((reg >> RFFE_CONTROL_CTRL_OUT) & 0xFF); }); return 0; } int bladerf_get_rfic_rx_fir(struct bladerf *dev, bladerf_rfic_rxfir *rxfir) { CHECK_BOARD_IS_BLADERF2(dev); CHECK_BOARD_STATE(STATE_FPGA_LOADED); NULL_CHECK(rxfir); struct bladerf2_board_data *board_data = dev->board_data; struct controller_fns const *rfic = board_data->rfic; bladerf_channel const ch = BLADERF_CHANNEL_RX(0); WITH_MUTEX(&dev->lock, { CHECK_STATUS_LOCKED(rfic->get_filter(dev, ch, rxfir, NULL)); }); return 0; } int bladerf_set_rfic_rx_fir(struct bladerf *dev, bladerf_rfic_rxfir rxfir) { CHECK_BOARD_IS_BLADERF2(dev); CHECK_BOARD_STATE(STATE_FPGA_LOADED); struct bladerf2_board_data *board_data = dev->board_data; struct controller_fns const *rfic = board_data->rfic; struct bladerf_range const sr_range = bladerf2_sample_rate_range_4x; bladerf_channel const ch = BLADERF_CHANNEL_RX(0); WITH_MUTEX(&dev->lock, { /* Verify that sample rate is not too low */ if (rxfir != BLADERF_RFIC_RXFIR_DEC4) { bladerf_sample_rate sr; CHECK_STATUS_LOCKED(dev->board->get_sample_rate(dev, ch, &sr)); if (is_within_range(&sr_range, sr)) { log_error("%s: sample rate too low for filter (%d < %d)\n", __FUNCTION__, sr, sr_range.min); MUTEX_UNLOCK(&dev->lock); return BLADERF_ERR_INVAL; } } CHECK_STATUS_LOCKED(rfic->set_filter(dev, ch, rxfir, 0)); }); return 0; } int bladerf_get_rfic_tx_fir(struct bladerf *dev, bladerf_rfic_txfir *txfir) { CHECK_BOARD_IS_BLADERF2(dev); CHECK_BOARD_STATE(STATE_FPGA_LOADED); NULL_CHECK(txfir); struct bladerf2_board_data *board_data = dev->board_data; struct controller_fns const *rfic = board_data->rfic; bladerf_channel const ch = BLADERF_CHANNEL_TX(0); WITH_MUTEX(&dev->lock, { CHECK_STATUS_LOCKED(rfic->get_filter(dev, ch, NULL, txfir)); }); return 0; } int bladerf_set_rfic_tx_fir(struct bladerf *dev, bladerf_rfic_txfir txfir) { CHECK_BOARD_IS_BLADERF2(dev); CHECK_BOARD_STATE(STATE_FPGA_LOADED); struct bladerf2_board_data *board_data = dev->board_data; struct controller_fns const *rfic = board_data->rfic; struct bladerf_range const sr_range = bladerf2_sample_rate_range_4x; bladerf_channel const ch = BLADERF_CHANNEL_TX(0); WITH_MUTEX(&dev->lock, { /* Verify that sample rate is not too low */ if (txfir != BLADERF_RFIC_TXFIR_INT4) { bladerf_sample_rate sr; CHECK_STATUS_LOCKED(dev->board->get_sample_rate(dev, ch, &sr)); if (is_within_range(&sr_range, sr)) { log_error("%s: sample rate too low for filter (%d < %d)\n", __FUNCTION__, sr, sr_range.min); MUTEX_UNLOCK(&dev->lock); return BLADERF_ERR_INVAL; } } CHECK_STATUS_LOCKED(rfic->set_filter(dev, ch, 0, txfir)); }); return 0; } /******************************************************************************/ /* Low level PLL Accessors */ /******************************************************************************/ static int bladerf_pll_configure(struct bladerf *dev, uint16_t R, uint16_t N) { CHECK_BOARD_IS_BLADERF2(dev); CHECK_BOARD_STATE(STATE_FPGA_LOADED); uint32_t init_array[3]; bool is_enabled; uint8_t i; if (R < 1 || R > 16383) { RETURN_INVAL("R", "outside range [1,16383]"); } if (N < 1 || N > 8191) { RETURN_INVAL("N", "outside range [1,8191]"); } /* Get the present state... */ CHECK_STATUS(bladerf_get_pll_enable(dev, &is_enabled)); /* Enable the chip if applicable */ if (!is_enabled) { CHECK_STATUS(bladerf_set_pll_enable(dev, true)); } /* Register 0: Reference Counter Latch */ init_array[0] = 0; /* R Counter: */ init_array[0] |= (R & ((1 << 14) - 1)) << 2; /* Hardcoded values: */ /* Anti-backlash: 00 (2.9 ns) */ /* Lock detect precision: 0 (three cycles) */ /* Register 1: N Counter Latch */ init_array[1] = 1; /* N Counter: */ init_array[1] |= (N & ((1 << 13) - 1)) << 8; /* Hardcoded values: */ /* CP Gain: 0 (Setting 1) */ /* Register 2: Function Latch */ init_array[2] = 2; /* Hardcoded values: */ /* Counter operation: 0 (Normal) */ /* Power down control: 00 (Normal) */ /* Muxout control: 0x1 (digital lock detect) */ init_array[2] |= (1 & ((1 << 3) - 1)) << 4; /* PD Polarity: 1 (positive) */ init_array[2] |= 1 << 7; /* CP three-state: 0 (normal) */ /* Fastlock Mode: 00 (disabled) */ /* Timer Counter Control: 0000 (3 PFD cycles) */ /* Current Setting 1: 111 (5 mA) */ init_array[2] |= 0x7 << 15; /* Current Setting 2: 111 (5 mA) */ init_array[2] |= 0x7 << 18; /* Write the values to the chip */ for (i = 0; i < ARRAY_SIZE(init_array); ++i) { CHECK_STATUS(bladerf_set_pll_register(dev, i, init_array[i])); } /* Re-disable the chip if applicable */ if (!is_enabled) { CHECK_STATUS(bladerf_set_pll_enable(dev, false)); } return 0; } static int bladerf_pll_calculate_ratio(bladerf_frequency ref_freq, bladerf_frequency clock_freq, uint16_t *R, uint16_t *N) { NULL_CHECK(R); NULL_CHECK(N); size_t const Rmax = 16383; double const tol = 0.00001; double target = (double)clock_freq / (double)ref_freq; uint16_t R_try, N_try; struct bladerf_range const clock_frequency_range = { FIELD_INIT(.min, 5000000), FIELD_INIT(.max, 400000000), FIELD_INIT(.step, 1), FIELD_INIT(.scale, 1), }; if (!is_within_range(&bladerf2_pll_refclk_range, ref_freq)) { return BLADERF_ERR_RANGE; } if (!is_within_range(&clock_frequency_range, clock_freq)) { return BLADERF_ERR_RANGE; } for (R_try = 1; R_try < Rmax; ++R_try) { double ratio, delta; N_try = (uint16_t)(target * R_try + 0.5); if (N_try > 8191) { continue; } ratio = (double)N_try / (double)R_try; delta = (ratio > target) ? (ratio - target) : (target - ratio); if (delta < tol) { *R = R_try; *N = N_try; return 0; } } RETURN_INVAL("requested ratio", "not achievable"); } int bladerf_get_pll_lock_state(struct bladerf *dev, bool *locked) { CHECK_BOARD_IS_BLADERF2(dev); CHECK_BOARD_STATE(STATE_FPGA_LOADED); NULL_CHECK(locked); WITH_MUTEX(&dev->lock, { uint32_t reg; /* Read RFFE control register */ CHECK_STATUS_LOCKED(dev->backend->rffe_control_read(dev, ®)); *locked = (reg >> RFFE_CONTROL_ADF_MUXOUT) & 0x1; }); return 0; } int bladerf_get_pll_enable(struct bladerf *dev, bool *enabled) { CHECK_BOARD_IS_BLADERF2(dev); CHECK_BOARD_STATE(STATE_FPGA_LOADED); NULL_CHECK(enabled); WITH_MUTEX(&dev->lock, { uint32_t data; CHECK_STATUS_LOCKED(dev->backend->config_gpio_read(dev, &data)); *enabled = (data >> CFG_GPIO_PLL_EN) & 0x01; }); return 0; } int bladerf_set_pll_enable(struct bladerf *dev, bool enable) { CHECK_BOARD_IS_BLADERF2(dev); CHECK_BOARD_STATE(STATE_FPGA_LOADED); WITH_MUTEX(&dev->lock, { struct bladerf2_board_data *board_data = dev->board_data; uint32_t data; // Disable the trim DAC when we're using the PLL if (enable) { CHECK_STATUS_LOCKED(_bladerf2_set_trim_dac_enable(dev, false)); } // Read current config GPIO value CHECK_STATUS_LOCKED(dev->backend->config_gpio_read(dev, &data)); // Set the PLL enable bit accordingly data &= ~(1 << CFG_GPIO_PLL_EN); data |= ((enable ? 1 : 0) << CFG_GPIO_PLL_EN); // Write back the config GPIO CHECK_STATUS_LOCKED(dev->backend->config_gpio_write(dev, data)); // Update our state flag board_data->trim_source = enable ? TRIM_SOURCE_PLL : TRIM_SOURCE_NONE; // Enable the trim DAC if we're done with the // PLL if (!enable) { CHECK_STATUS_LOCKED(_bladerf2_set_trim_dac_enable(dev, true)); } }); return 0; } int bladerf_get_pll_refclk_range(struct bladerf *dev, const struct bladerf_range **range) { NULL_CHECK(range); *range = &bladerf2_pll_refclk_range; return 0; } int bladerf_get_pll_refclk(struct bladerf *dev, bladerf_frequency *frequency) { CHECK_BOARD_IS_BLADERF2(dev); CHECK_BOARD_STATE(STATE_FPGA_LOADED); NULL_CHECK(frequency); uint8_t const R_LATCH_REG = 0; size_t const R_LATCH_SHIFT = 2; uint32_t const R_LATCH_MASK = 0x3fff; uint8_t const N_LATCH_REG = 1; size_t const N_LATCH_SHIFT = 8; uint32_t const N_LATCH_MASK = 0x1fff; uint32_t reg; uint16_t R, N; // Get the current R value (latch 0, bits 2-15) CHECK_STATUS(bladerf_get_pll_register(dev, R_LATCH_REG, ®)); R = (reg >> R_LATCH_SHIFT) & R_LATCH_MASK; // Get the current N value (latch 1, bits 8-20) CHECK_STATUS(bladerf_get_pll_register(dev, N_LATCH_REG, ®)); N = (reg >> N_LATCH_SHIFT) & N_LATCH_MASK; // We assume the system clock frequency is // BLADERF_VCTCXO_FREQUENCY. If it isn't, do your // own math *frequency = R * BLADERF_VCTCXO_FREQUENCY / N; return 0; } int bladerf_set_pll_refclk(struct bladerf *dev, bladerf_frequency frequency) { CHECK_BOARD_IS_BLADERF2(dev); CHECK_BOARD_STATE(STATE_FPGA_LOADED); uint16_t R, N; // We assume the system clock frequency is // BLADERF_VCTCXO_FREQUENCY. If it isn't, do your // own math CHECK_STATUS(bladerf_pll_calculate_ratio(frequency, BLADERF_VCTCXO_FREQUENCY, &R, &N)); CHECK_STATUS(bladerf_pll_configure(dev, R, N)); return 0; } int bladerf_get_pll_register(struct bladerf *dev, uint8_t address, uint32_t *val) { CHECK_BOARD_IS_BLADERF2(dev); CHECK_BOARD_STATE(STATE_FPGA_LOADED); NULL_CHECK(val); WITH_MUTEX(&dev->lock, { uint32_t data; address &= 0x03; CHECK_STATUS_LOCKED(dev->backend->adf400x_read(dev, address, &data)); *val = data; }); return 0; } int bladerf_set_pll_register(struct bladerf *dev, uint8_t address, uint32_t val) { CHECK_BOARD_IS_BLADERF2(dev); CHECK_BOARD_STATE(STATE_FPGA_LOADED); WITH_MUTEX(&dev->lock, { uint32_t data; address &= 0x03; data = val; CHECK_STATUS_LOCKED(dev->backend->adf400x_write(dev, address, data)); }); return 0; } /******************************************************************************/ /* Low level Power Source Accessors */ /******************************************************************************/ int bladerf_get_power_source(struct bladerf *dev, bladerf_power_sources *src) { CHECK_BOARD_IS_BLADERF2(dev); CHECK_BOARD_STATE(STATE_FPGA_LOADED); NULL_CHECK(src); WITH_MUTEX(&dev->lock, { uint32_t data; CHECK_STATUS_LOCKED(dev->backend->config_gpio_read(dev, &data)); if ((data >> CFG_GPIO_POWERSOURCE) & 0x01) { *src = BLADERF_PS_USB_VBUS; } else { *src = BLADERF_PS_DC; } }); return 0; } /******************************************************************************/ /* Low level clock source selection accessors */ /******************************************************************************/ int bladerf_get_clock_select(struct bladerf *dev, bladerf_clock_select *sel) { CHECK_BOARD_IS_BLADERF2(dev); CHECK_BOARD_STATE(STATE_FPGA_LOADED); NULL_CHECK(sel); WITH_MUTEX(&dev->lock, { uint32_t gpio; CHECK_STATUS_LOCKED(dev->backend->config_gpio_read(dev, &gpio)); if ((gpio & (1 << CFG_GPIO_CLOCK_SELECT)) == 0x0) { *sel = CLOCK_SELECT_ONBOARD; } else { *sel = CLOCK_SELECT_EXTERNAL; } }); return 0; } int bladerf_set_clock_select(struct bladerf *dev, bladerf_clock_select sel) { CHECK_BOARD_IS_BLADERF2(dev); CHECK_BOARD_STATE(STATE_FPGA_LOADED); WITH_MUTEX(&dev->lock, { uint32_t gpio; CHECK_STATUS_LOCKED(dev->backend->config_gpio_read(dev, &gpio)); // Set the clock select bit(s) accordingly switch (sel) { case CLOCK_SELECT_ONBOARD: gpio &= ~(1 << CFG_GPIO_CLOCK_SELECT); break; case CLOCK_SELECT_EXTERNAL: gpio |= (1 << CFG_GPIO_CLOCK_SELECT); break; default: break; } // Write back the config GPIO CHECK_STATUS_LOCKED(dev->backend->config_gpio_write(dev, gpio)); }); return 0; } /******************************************************************************/ /* Low level clock buffer output accessors */ /******************************************************************************/ int bladerf_get_clock_output(struct bladerf *dev, bool *state) { CHECK_BOARD_IS_BLADERF2(dev); CHECK_BOARD_STATE(STATE_FPGA_LOADED); NULL_CHECK(state); WITH_MUTEX(&dev->lock, { uint32_t gpio; CHECK_STATUS_LOCKED(dev->backend->config_gpio_read(dev, &gpio)); *state = ((gpio & (1 << CFG_GPIO_CLOCK_OUTPUT)) != 0x0); }); return 0; } int bladerf_set_clock_output(struct bladerf *dev, bool enable) { CHECK_BOARD_IS_BLADERF2(dev); CHECK_BOARD_STATE(STATE_FPGA_LOADED); WITH_MUTEX(&dev->lock, { uint32_t gpio; CHECK_STATUS_LOCKED(dev->backend->config_gpio_read(dev, &gpio)); // Set or clear the clock output enable bit gpio &= ~(1 << CFG_GPIO_CLOCK_OUTPUT); gpio |= ((enable ? 1 : 0) << CFG_GPIO_CLOCK_OUTPUT); // Write back the config GPIO CHECK_STATUS_LOCKED(dev->backend->config_gpio_write(dev, gpio)); }); return 0; } /******************************************************************************/ /* Low level INA219 Accessors */ /******************************************************************************/ int bladerf_get_pmic_register(struct bladerf *dev, bladerf_pmic_register reg, void *val) { CHECK_BOARD_IS_BLADERF2(dev); CHECK_BOARD_STATE(STATE_FPGA_LOADED); NULL_CHECK(val); int rv; WITH_MUTEX(&dev->lock, { switch (reg) { case BLADERF_PMIC_CONFIGURATION: case BLADERF_PMIC_CALIBRATION: default: rv = BLADERF_ERR_UNSUPPORTED; break; case BLADERF_PMIC_VOLTAGE_SHUNT: rv = ina219_read_shunt_voltage(dev, (float *)val); break; case BLADERF_PMIC_VOLTAGE_BUS: rv = ina219_read_bus_voltage(dev, (float *)val); break; case BLADERF_PMIC_POWER: rv = ina219_read_power(dev, (float *)val); break; case BLADERF_PMIC_CURRENT: rv = ina219_read_current(dev, (float *)val); break; } }); return rv; } /******************************************************************************/ /* Low level RF Switch Accessors */ /******************************************************************************/ int bladerf_get_rf_switch_config(struct bladerf *dev, bladerf_rf_switch_config *config) { CHECK_BOARD_IS_BLADERF2(dev); CHECK_BOARD_STATE(STATE_INITIALIZED); NULL_CHECK(config); WITH_MUTEX(&dev->lock, { struct bladerf2_board_data *board_data = dev->board_data; struct ad9361_rf_phy *phy = board_data->phy; struct controller_fns const *rfic = board_data->rfic; uint32_t val; uint32_t reg; /* Get AD9361 status */ if (RFIC_COMMAND_HOST == rfic->command_mode) { CHECK_AD936X_LOCKED(ad9361_get_tx_rf_port_output(phy, &val)); } else { val = 0xFF; } config->tx1_rfic_port = val; config->tx2_rfic_port = val; if (RFIC_COMMAND_HOST == rfic->command_mode) { CHECK_AD936X_LOCKED(ad9361_get_rx_rf_port_input(phy, &val)); } else { val = 0xFF; } config->rx1_rfic_port = val; config->rx2_rfic_port = val; /* Read RFFE control register */ CHECK_STATUS_LOCKED(dev->backend->rffe_control_read(dev, ®)); config->rx1_spdt_port = (reg >> RFFE_CONTROL_RX_SPDT_1) & RFFE_CONTROL_SPDT_MASK; config->rx2_spdt_port = (reg >> RFFE_CONTROL_RX_SPDT_2) & RFFE_CONTROL_SPDT_MASK; config->tx1_spdt_port = (reg >> RFFE_CONTROL_TX_SPDT_1) & RFFE_CONTROL_SPDT_MASK; config->tx2_spdt_port = (reg >> RFFE_CONTROL_TX_SPDT_2) & RFFE_CONTROL_SPDT_MASK; }); return 0; } bladeRF-2024.05/host/libraries/libbladeRF/src/board/bladerf2/capabilities.c000066400000000000000000000063021457144405000262450ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2015 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include "helpers/version.h" #include "log.h" #include "capabilities.h" uint64_t bladerf2_get_fw_capabilities(const struct bladerf_version *fw_version) { uint64_t capabilities = 0; if (version_fields_greater_or_equal(fw_version, 1, 7, 1)) { capabilities |= BLADERF_CAP_FW_LOOPBACK; } if (version_fields_greater_or_equal(fw_version, 1, 8, 0)) { capabilities |= BLADERF_CAP_QUERY_DEVICE_READY; } if (version_fields_greater_or_equal(fw_version, 1, 9, 0)) { capabilities |= BLADERF_CAP_READ_FW_LOG_ENTRY; } if (version_fields_greater_or_equal(fw_version, 2, 1, 0)) { capabilities |= BLADERF_CAP_FW_SUPPORTS_BLADERF2; } if (version_fields_greater_or_equal(fw_version, 2, 3, 0)) { capabilities |= BLADERF_CAP_FW_FLASH_ID; } if (version_fields_greater_or_equal(fw_version, 2, 3, 1)) { capabilities |= BLADERF_CAP_FW_FPGA_SOURCE; } if (version_fields_greater_or_equal(fw_version, 2, 4, 0)) { capabilities |= BLADERF_CAP_FW_SHORT_PACKET; } return capabilities; } uint64_t bladerf2_get_fpga_capabilities( const struct bladerf_version *fpga_version) { uint64_t capabilities = 0; if (version_fields_greater_or_equal(fpga_version, 0, 1, 0)) { capabilities |= BLADERF_CAP_TIMESTAMPS; } if (version_fields_greater_or_equal(fpga_version, 0, 3, 0)) { capabilities |= BLADERF_CAP_PKT_HANDLER_FMT; } if (version_fields_greater_or_equal(fpga_version, 0, 3, 2)) { capabilities |= BLADERF_CAP_VCTCXO_TRIMDAC_READ; } if (version_fields_greater_or_equal(fpga_version, 0, 4, 1)) { capabilities |= BLADERF_CAP_MASKED_XBIO_WRITE; } if (version_fields_greater_or_equal(fpga_version, 0, 6, 0)) { capabilities |= BLADERF_CAP_TRX_SYNC_TRIG; } if (version_fields_greater_or_equal(fpga_version, 0, 10, 0)) { capabilities |= BLADERF_CAP_SCHEDULED_RETUNE; } if (version_fields_greater_or_equal(fpga_version, 0, 10, 1)) { capabilities |= BLADERF_CAP_FPGA_TUNING; } if (version_fields_greater_or_equal(fpga_version, 0, 12, 0)) { capabilities |= BLADERF_CAP_FPGA_PACKET_META; } if (version_fields_greater_or_equal(fpga_version, 0, 15, 0)) { capabilities |= BLADERF_CAP_FPGA_8BIT_SAMPLES; } return capabilities; } bladeRF-2024.05/host/libraries/libbladeRF/src/board/bladerf2/capabilities.h000066400000000000000000000031241457144405000262510ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2015-2017 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* This file defines device capabilities added across libbladeRF, FX3, and FPGA * versions that we can check for */ #ifndef BLADERF2_CAPABILITIES_H_ #define BLADERF2_CAPABILITIES_H_ #include #include "board/board.h" #include "helpers/have_cap.h" /** * Determine device's firmware capabilities. * * @param[in] fw_version Firmware version * * @return Capabilities bitmask */ uint64_t bladerf2_get_fw_capabilities(const struct bladerf_version *fw_version); /** * Add capability bits based upon FPGA version stored in the device handle * * @param[in] fpga_version FPGA version * * @return Capabilities bitmask */ uint64_t bladerf2_get_fpga_capabilities( const struct bladerf_version *fpga_version); #endif bladeRF-2024.05/host/libraries/libbladeRF/src/board/bladerf2/common.c000066400000000000000000000316131457144405000251070ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2018 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include "board/board.h" #include "capabilities.h" #include "common.h" /******************************************************************************/ /* Constants */ /******************************************************************************/ /* Board state to string map */ char const *bladerf2_state_to_string[] = { [STATE_UNINITIALIZED] = "Uninitialized", [STATE_FIRMWARE_LOADED] = "Firmware Loaded", [STATE_FPGA_LOADED] = "FPGA Loaded", [STATE_INITIALIZED] = "Initialized", }; /******************************************************************************/ /* Sample format control */ /******************************************************************************/ static inline int requires_timestamps(bladerf_format format, bool *required) { switch (format) { case BLADERF_FORMAT_SC8_Q7_META: case BLADERF_FORMAT_SC16_Q11_META: case BLADERF_FORMAT_PACKET_META: *required = true; break; case BLADERF_FORMAT_SC8_Q7: case BLADERF_FORMAT_SC16_Q11: *required = false; break; default: return BLADERF_ERR_INVAL; } return 0; } int perform_format_config(struct bladerf *dev, bladerf_direction dir, bladerf_format format) { CHECK_BOARD_STATE(STATE_INITIALIZED); struct bladerf2_board_data *board_data = dev->board_data; bool use_timestamps, other_using_timestamps; bladerf_channel other; uint32_t gpio_val; int status; status = requires_timestamps(format, &use_timestamps); if (status != 0) { log_debug("%s: Invalid format: %d\n", __FUNCTION__, format); return status; } switch (dir) { case BLADERF_RX: other = BLADERF_TX; break; case BLADERF_TX: other = BLADERF_RX; break; default: log_debug("Invalid direction: %d\n", dir); return BLADERF_ERR_INVAL; } status = requires_timestamps(board_data->module_format[other], &other_using_timestamps); if ((status == 0) && (other_using_timestamps != use_timestamps)) { log_debug("Format conflict detected: RX=%d, TX=%d\n"); return BLADERF_ERR_INVAL; } CHECK_STATUS(dev->backend->config_gpio_read(dev, &gpio_val)); if (use_timestamps) { gpio_val |= BLADERF_GPIO_TIMESTAMP; } else { gpio_val &= ~BLADERF_GPIO_TIMESTAMP; } if (format == BLADERF_FORMAT_PACKET_META) { gpio_val |= BLADERF_GPIO_PACKET | BLADERF_GPIO_TIMESTAMP; } else { gpio_val &= ~BLADERF_GPIO_PACKET; } if (format == BLADERF_FORMAT_SC8_Q7 || format == BLADERF_FORMAT_SC8_Q7_META) { gpio_val |= BLADERF_GPIO_8BIT_MODE; } else { gpio_val &= ~BLADERF_GPIO_8BIT_MODE; } CHECK_STATUS(dev->backend->config_gpio_write(dev, gpio_val)); board_data->module_format[dir] = format; return 0; } int perform_format_deconfig(struct bladerf *dev, bladerf_direction dir) { struct bladerf2_board_data *board_data = dev->board_data; switch (dir) { case BLADERF_RX: case BLADERF_TX: /* We'll reconfigure the HW when we call perform_format_config, * so we just need to update our stored information */ board_data->module_format[dir] = -1; break; default: log_debug("%s: Invalid direction: %d\n", __FUNCTION__, dir); return BLADERF_ERR_INVAL; } return 0; } /******************************************************************************/ /* Size checks */ /******************************************************************************/ bool is_valid_fpga_size(struct bladerf *dev, bladerf_fpga_size fpga, size_t len) { /* We do not build FPGAs with compression enabled. Therfore, they * will always have a fixed file size. */ char const env_override[] = "BLADERF_SKIP_FPGA_SIZE_CHECK"; bool valid; size_t expected; int status; status = dev->board->get_fpga_bytes(dev, &expected); if (status < 0) { log_error( "Error %d querying FPGA size.\n", status); return false; } /* Provide a means to override this check. This is intended to allow * folks who know what they're doing to work around this quickly without * needing to make a code change. (e.g., someone building a custom FPGA * image that enables compressoin) */ if (getenv(env_override)) { log_info("Overriding FPGA size check per %s\n", env_override); valid = true; } else if (expected > 0) { valid = (len == expected); } else { log_debug("Unknown FPGA type (%d). Using relaxed size criteria.\n", fpga); if (len < (1 * 1024 * 1024)) { valid = false; } else if (len > (dev->flash_arch->tsize_bytes - BLADERF_FLASH_ADDR_FPGA)) { valid = false; } else { valid = true; } } if (!valid) { log_warning("Detected potentially incorrect FPGA file (length was %d, " "expected %d).\n", len, expected); log_debug("If you are certain this file is valid, you may define\n" "BLADERF_SKIP_FPGA_SIZE_CHECK in your environment to skip " "this check.\n\n"); } return valid; } bool is_valid_fw_size(size_t len) { /* Simple FW applications generally are significantly larger than this */ if (len < (50 * 1024)) { return false; } else if (len > BLADERF_FLASH_BYTE_LEN_FIRMWARE) { return false; } else { return true; } } bladerf_tuning_mode default_tuning_mode(struct bladerf *dev) { struct bladerf2_board_data *board_data = dev->board_data; bladerf_tuning_mode mode; char const *env_var; extern struct controller_fns const rfic_fpga_control; mode = BLADERF_TUNING_MODE_HOST; /* Detect TX FPGA bug and report warning */ if (BLADERF_TUNING_MODE_FPGA == mode && rfic_fpga_control.is_present(dev) && version_fields_less_than(&board_data->fpga_version, 0, 10, 2)) { log_warning("FPGA v%u.%u.%u has errata related to FPGA-based tuning; " "defaulting to host-based tuning. To use FPGA-based " "tuning, update to FPGA v%u.%u.%u, or set the " "BLADERF_DEFAULT_TUNING_MODE enviroment variable to " "'fpga'.\n", board_data->fpga_version.major, board_data->fpga_version.minor, board_data->fpga_version.patch, 0, 10, 2); mode = BLADERF_TUNING_MODE_HOST; } env_var = getenv("BLADERF_DEFAULT_TUNING_MODE"); if (env_var != NULL) { if (!strcasecmp("host", env_var)) { mode = BLADERF_TUNING_MODE_HOST; } else if (!strcasecmp("fpga", env_var)) { /* Capability check */ if (!have_cap(board_data->capabilities, BLADERF_CAP_FPGA_TUNING)) { log_error("The loaded FPGA version (%u.%u.%u) does not support " "the tuning mode being used to override the default. " "Ignoring BLADERF_DEFAULT_TUNING_MODE.\n", board_data->fpga_version.major, board_data->fpga_version.minor, board_data->fpga_version.patch); } else { mode = BLADERF_TUNING_MODE_FPGA; } } else { log_debug("Invalid tuning mode override: %s\n", env_var); } } /* Check if the FPGA actually has RFIC control built in */ if (BLADERF_TUNING_MODE_FPGA == mode && !rfic_fpga_control.is_present(dev)) { log_debug("FPGA does not have RFIC tuning capabilities, " "defaulting to host-based control.\n"); mode = BLADERF_TUNING_MODE_HOST; } switch (mode) { case BLADERF_TUNING_MODE_HOST: log_debug("Default tuning mode: Host\n"); break; case BLADERF_TUNING_MODE_FPGA: log_debug("Default tuning mode: FPGA\n"); break; default: assert(!"Bug encountered."); mode = BLADERF_TUNING_MODE_HOST; } return mode; } /******************************************************************************/ /* Misc */ /******************************************************************************/ bool check_total_sample_rate(struct bladerf *dev) { int status; uint32_t reg; size_t i; bladerf_sample_rate rate_accum = 0; size_t active_channels = 0; const bladerf_sample_rate MAX_SAMPLE_THROUGHPUT = 80000000; /* Read RFFE control register */ status = dev->backend->rffe_control_read(dev, ®); if (status < 0) { return false; } /* Accumulate sample rates for all channels */ if (_rffe_dir_enabled(reg, BLADERF_RX)) { bladerf_sample_rate rx_rate; status = dev->board->get_sample_rate(dev, BLADERF_CHANNEL_RX(0), &rx_rate); if (status < 0) { return false; } for (i = 0; i < dev->board->get_channel_count(dev, BLADERF_RX); ++i) { if (_rffe_ch_enabled(reg, BLADERF_CHANNEL_RX(i))) { rate_accum += rx_rate; ++active_channels; } } } if (_rffe_dir_enabled(reg, BLADERF_TX)) { bladerf_sample_rate tx_rate; status = dev->board->get_sample_rate(dev, BLADERF_CHANNEL_TX(0), &tx_rate); if (status < 0) { return false; } for (i = 0; i < dev->board->get_channel_count(dev, BLADERF_TX); ++i) { if (_rffe_ch_enabled(reg, BLADERF_CHANNEL_TX(i))) { rate_accum += tx_rate; ++active_channels; } } } log_verbose("%s: active_channels=%d, rate_accum=%d, maximum=%d\n", __FUNCTION__, active_channels, rate_accum, MAX_SAMPLE_THROUGHPUT); if (rate_accum > MAX_SAMPLE_THROUGHPUT) { log_warning("The total sample throughput for the %d active channel%s, " "%g Msps, is greater than the recommended maximum sample " "throughput, %g Msps. You may experience dropped samples " "unless the sample rate is reduced, or some channels are " "deactivated.\n", active_channels, (active_channels == 1 ? "" : "s"), rate_accum / 1e6, MAX_SAMPLE_THROUGHPUT / 1e6); return false; } return true; } bool does_rffe_dir_have_enabled_ch(uint32_t reg, bladerf_direction dir) { switch (dir) { case BLADERF_RX: return _rffe_ch_enabled(reg, BLADERF_CHANNEL_RX(0)) || _rffe_ch_enabled(reg, BLADERF_CHANNEL_RX(1)); case BLADERF_TX: return _rffe_ch_enabled(reg, BLADERF_CHANNEL_TX(0)) || _rffe_ch_enabled(reg, BLADERF_CHANNEL_TX(1)); } return false; } int get_gain_offset(struct bladerf *dev, bladerf_channel ch, float *offset) { CHECK_BOARD_STATE(STATE_INITIALIZED); NULL_CHECK(offset); struct bladerf_gain_range const *ranges = NULL; bladerf_frequency frequency = 0; size_t i, ranges_len; if (BLADERF_CHANNEL_IS_TX(ch)) { ranges = bladerf2_tx_gain_ranges; ranges_len = ARRAY_SIZE(bladerf2_tx_gain_ranges); } else { ranges = bladerf2_rx_gain_ranges; ranges_len = ARRAY_SIZE(bladerf2_rx_gain_ranges); } CHECK_STATUS(dev->board->get_frequency(dev, ch, &frequency)); for (i = 0; i < ranges_len; ++i) { struct bladerf_gain_range const *r = &(ranges[i]); struct bladerf_range const *rfreq = &(r->frequency); // if the frequency range matches, and the range name is null, // then we found our match if (is_within_range(rfreq, frequency) && (NULL == r->name)) { *offset = r->offset; return 0; } } return BLADERF_ERR_INVAL; } bladeRF-2024.05/host/libraries/libbladeRF/src/board/bladerf2/common.h000066400000000000000000000421461457144405000251170ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2018 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef BLADERF2_COMMON_H_ #define BLADERF2_COMMON_H_ #if !defined(BLADERF_NIOS_BUILD) && !defined(BLADERF_NIOS_PC_SIMULATION) #include "log.h" #endif #include "bladerf2_common.h" #include "helpers/version.h" #include "streaming/sync.h" /******************************************************************************/ /* Types */ /******************************************************************************/ enum bladerf2_vctcxo_trim_source { TRIM_SOURCE_NONE, TRIM_SOURCE_TRIM_DAC, TRIM_SOURCE_PLL, TRIM_SOURCE_AUXDAC }; enum bladerf2_rfic_command_mode { RFIC_COMMAND_HOST, /**< Host-based control */ RFIC_COMMAND_FPGA, /**< FPGA-based control */ }; struct controller_fns { bool (*is_present)(struct bladerf *dev); bool (*is_initialized)(struct bladerf *dev); bool (*is_standby)(struct bladerf *dev); int (*get_init_state)(struct bladerf *dev, bladerf_rfic_init_state *state); int (*initialize)(struct bladerf *dev); int (*standby)(struct bladerf *dev); int (*deinitialize)(struct bladerf *dev); int (*enable_module)(struct bladerf *dev, bladerf_channel ch, bool enable); int (*get_sample_rate)(struct bladerf *dev, bladerf_channel ch, bladerf_sample_rate *rate); int (*set_sample_rate)(struct bladerf *dev, bladerf_channel ch, bladerf_sample_rate rate); int (*get_frequency)(struct bladerf *dev, bladerf_channel ch, bladerf_frequency *frequency); int (*set_frequency)(struct bladerf *dev, bladerf_channel ch, bladerf_frequency frequency); int (*select_band)(struct bladerf *dev, bladerf_channel ch, bladerf_frequency frequency); int (*get_bandwidth)(struct bladerf *dev, bladerf_channel ch, bladerf_bandwidth *bandwidth); int (*set_bandwidth)(struct bladerf *dev, bladerf_channel ch, bladerf_bandwidth bandwidth, bladerf_bandwidth *actual); int (*get_gain_mode)(struct bladerf *dev, bladerf_channel ch, bladerf_gain_mode *mode); int (*set_gain_mode)(struct bladerf *dev, bladerf_channel ch, bladerf_gain_mode mode); int (*get_gain)(struct bladerf *dev, bladerf_channel ch, int *gain); int (*set_gain)(struct bladerf *dev, bladerf_channel ch, int gain); int (*get_gain_stage)(struct bladerf *dev, bladerf_channel ch, char const *stage, int *gain); int (*set_gain_stage)(struct bladerf *dev, bladerf_channel ch, char const *stage, int gain); int (*get_rssi)(struct bladerf *dev, bladerf_channel ch, int *pre_rssi, int *sym_rssi); int (*get_filter)(struct bladerf *dev, bladerf_channel ch, bladerf_rfic_rxfir *rxfir, bladerf_rfic_txfir *txfir); int (*set_filter)(struct bladerf *dev, bladerf_channel ch, bladerf_rfic_rxfir rxfir, bladerf_rfic_txfir txfir); int (*get_txmute)(struct bladerf *dev, bladerf_channel ch, bool *state); int (*set_txmute)(struct bladerf *dev, bladerf_channel ch, bool state); int (*store_fastlock_profile)(struct bladerf *dev, bladerf_channel ch, uint32_t profile); enum bladerf2_rfic_command_mode const command_mode; }; struct bladerf2_board_data { /* Board state */ enum { STATE_UNINITIALIZED, STATE_FIRMWARE_LOADED, STATE_FPGA_LOADED, STATE_INITIALIZED, } state; /* AD9361 PHY Handle */ struct ad9361_rf_phy *phy; /* RFIC configuration parameters */ void *rfic_init_params; /* Bitmask of capabilities determined by version numbers */ uint64_t capabilities; /* Format currently being used with a module, or -1 if module is not used */ bladerf_format module_format[NUM_MODULES]; /* Which mode of operation we use for tuning */ bladerf_tuning_mode tuning_mode; /* Board properties */ bladerf_fpga_size fpga_size; /* Data message size */ size_t msg_size; /* Version information */ struct bladerf_version fpga_version; struct bladerf_version fw_version; char fpga_version_str[BLADERF_VERSION_STR_MAX + 1]; char fw_version_str[BLADERF_VERSION_STR_MAX + 1]; /* Synchronous interface handles */ struct bladerf_sync sync[2]; /* VCTCXO trim state */ enum bladerf2_vctcxo_trim_source trim_source; uint16_t trimdac_last_value; /**< saved running value */ uint16_t trimdac_stored_value; /**< cached value read from SPI flash */ /* Quick Tune Profile Status */ uint16_t quick_tune_tx_profile; uint16_t quick_tune_rx_profile; /* RFIC backend command handling */ struct controller_fns const *rfic; /* RFIC FIR Filter status */ bladerf_rfic_rxfir rxfir; bladerf_rfic_txfir txfir; /* If true, RFIC control will be fully de-initialized on close, instead of * just put into a standby state. */ bool rfic_reset_on_close; }; struct bladerf_rfic_status_register { bool rfic_initialized; size_t write_queue_length; }; /******************************************************************************/ /* Externs */ /******************************************************************************/ extern AD9361_InitParam bladerf2_rfic_init_params; extern AD9361_InitParam bladerf2_rfic_init_params_fastagc_burst; extern AD9361_RXFIRConfig bladerf2_rfic_rx_fir_config; extern AD9361_TXFIRConfig bladerf2_rfic_tx_fir_config; extern AD9361_RXFIRConfig bladerf2_rfic_rx_fir_config_dec2; extern AD9361_TXFIRConfig bladerf2_rfic_tx_fir_config_int2; extern AD9361_RXFIRConfig bladerf2_rfic_rx_fir_config_dec4; extern AD9361_TXFIRConfig bladerf2_rfic_tx_fir_config_int4; extern const float ina219_r_shunt; /******************************************************************************/ /* Constants */ /******************************************************************************/ extern char const *bladerf2_state_to_string[4]; /******************************************************************************/ /* Macros */ /******************************************************************************/ /* Macro for logging and returning an error status. This should be used for * errors defined in the \ref RETCODES list. */ #define RETURN_ERROR_STATUS(_what, _status) \ do { \ log_error("%s: %s failed: %s\n", __FUNCTION__, _what, \ bladerf_strerror(_status)); \ return _status; \ } while (0) /* Macro for converting, logging, and returning libad9361 error codes. */ #define RETURN_ERROR_AD9361(_what, _status) \ do { \ RETURN_ERROR_STATUS(_what, errno_ad9361_to_bladerf(_status)); \ } while (0) /* Macro for logging and returning ::BLADERF_ERR_INVAL */ #define RETURN_INVAL_ARG(_what, _arg, _why) \ do { \ log_error("%s: %s '%s' invalid: %s\n", __FUNCTION__, _what, #_arg, \ _why); \ return BLADERF_ERR_INVAL; \ } while (0) #define RETURN_INVAL(_what, _why) \ do { \ log_error("%s: %s invalid: %s\n", __FUNCTION__, _what, _why); \ return BLADERF_ERR_INVAL; \ } while (0) /** * @brief Null test * * @param _var The variable to check * * @return RETURN_INVAL if _var is null, continues otherwise */ #define NULL_CHECK(_var) \ do { \ if (NULL == _var) { \ RETURN_INVAL(#_var, "is null"); \ } \ } while (0) /** * @brief Null test, with mutex unlock on failure * * @param _var The variable to check * * @return RETURN_INVAL if _var is null, continues otherwise */ #define NULL_CHECK_LOCKED(_var) \ do { \ NULL_CHECK(dev); \ \ if (NULL == _var) { \ MUTEX_UNLOCK(__lock); \ RETURN_INVAL(#_var, "is null"); \ } \ } while (0) /** * @brief Board state check * * @param _state Minimum sufficient board state * * @return BLADERF_ERR_NOT_INIT if board's state is less than _state, continues * otherwise */ #define CHECK_BOARD_STATE(_state) \ do { \ NULL_CHECK(dev); \ NULL_CHECK(dev->board); \ \ struct bladerf2_board_data *_bd = dev->board_data; \ \ if (_bd->state < _state) { \ log_error("%s: Board state insufficient for operation " \ "(current \"%s\", requires \"%s\").\n", \ __FUNCTION__, bladerf2_state_to_string[_bd->state], \ bladerf2_state_to_string[_state]); \ \ return BLADERF_ERR_NOT_INIT; \ } \ } while (0) /** * @brief Test if board is a bladeRF 2 * * @param _dev Device handle * * @return BLADERF_ERR_UNSUPPORTED if board is not a bladeRF 2, continues * otherwise */ #define CHECK_BOARD_IS_BLADERF2(_dev) \ do { \ NULL_CHECK(_dev); \ NULL_CHECK(_dev->board); \ \ if (_dev->board != &bladerf2_board_fns) { \ log_error("%s: Board type \"%s\" not supported\n", __FUNCTION__, \ _dev->board->name); \ return BLADERF_ERR_UNSUPPORTED; \ } \ } while (0) /** * @brief Call a function and return early if it fails * * @param _fn The function * * @return function return value if less than zero; continues otherwise */ #define CHECK_STATUS(_fn) \ do { \ int _s = _fn; \ if (_s < 0) { \ RETURN_ERROR_STATUS(#_fn, _s); \ } \ } while (0) /** * @brief Call a function and, if it fails, unlock the mutex and return * * @param _fn The function * * @return function return value if less than zero; continues otherwise */ #define CHECK_STATUS_LOCKED(_fn) \ do { \ int _s = _fn; \ if (_s < 0) { \ MUTEX_UNLOCK(__lock); \ RETURN_ERROR_STATUS(#_fn, _s); \ } \ } while (0) /** * @brief Call a function and return early if it fails, with error translation * from AD936x to bladeRF return codes * * @param _fn The function * * @return function return value if less than zero; continues otherwise */ #define CHECK_AD936X(_fn) \ do { \ int _s = _fn; \ if (_s < 0) { \ RETURN_ERROR_AD9361(#_fn, _s); \ } \ } while (0) /** * @brief Call a function and, if it fails, unlock the mutex and return, with * error translation from AD936x to bladeRF return codes * * @param _fn The function * * @return function return value if less than zero; continues otherwise */ #define CHECK_AD936X_LOCKED(_fn) \ do { \ int _s = _fn; \ if (_s < 0) { \ MUTEX_UNLOCK(__lock); \ RETURN_ERROR_AD9361(#_fn, _s); \ } \ } while (0) /** * @brief Execute a command block with a mutex lock * * @note Variables declared within the including scope must be declared * one-per-line. * * @param _lock Lock to hold * @param _thing Block to execute */ #define WITH_MUTEX(_lock, _thing) \ do { \ MUTEX *__lock = _lock; \ \ MUTEX_LOCK(__lock); \ _thing; \ MUTEX_UNLOCK(__lock); \ } while (0) /** * @brief Execute command block, conditional to _mode * * @param _dev Device handle * @param _mode Command mode * @param _thing Block to do if it happens */ #define IF_COMMAND_MODE(_dev, _mode, _thing) \ do { \ NULL_CHECK(_dev); \ NULL_CHECK(_dev->board_data); \ \ struct bladerf2_board_data *bd = _dev->board_data; \ \ if (bd->rfic->command_mode == _mode) { \ _thing; \ }; \ } while (0) /******************************************************************************/ /* Functions */ /******************************************************************************/ /** * Perform the neccessary device configuration for the specified format * (e.g., enabling/disabling timestamp support), first checking that the * requested format would not conflict with the other stream direction. * * @param dev Device handle * @param[in] dir Direction that is currently being configured * @param[in] format Format the channel is being configured for * * @return 0 on success, BLADERF_ERR_* on failure */ int perform_format_config(struct bladerf *dev, bladerf_direction dir, bladerf_format format); /** * Deconfigure and update any state pertaining what a format that a stream * direction is no longer using. * * @param dev Device handle * @param[in] dir Direction that is currently being deconfigured * * @return 0 on success, BLADERF_ERR_* on failure */ int perform_format_deconfig(struct bladerf *dev, bladerf_direction dir); bool is_valid_fpga_size(struct bladerf *dev, bladerf_fpga_size fpga, size_t len); bool is_valid_fw_size(size_t len); bladerf_tuning_mode default_tuning_mode(struct bladerf *dev); bool check_total_sample_rate(struct bladerf *dev); bool does_rffe_dir_have_enabled_ch(uint32_t reg, bladerf_direction dir); int get_gain_offset(struct bladerf *dev, bladerf_channel ch, float *offset); #endif // BLADERF2_COMMON_H_ bladeRF-2024.05/host/libraries/libbladeRF/src/board/bladerf2/compatibility.c000066400000000000000000000044131457144405000264660ustar00rootroot00000000000000#include "host_config.h" #include "helpers/version.h" /* Firmware-FPGA compatibility tables * * This list should be kept in decending order, such that the most recent * versions are first, and the last entry should contain the earliest version * that libbladeRF supports. */ #define VERSION(major, minor, patch) { major, minor, patch, NULL } static const struct compat fw_compat[] = { /* Firmware requires >= FPGA */ { VERSION(2, 4, 0), VERSION(0, 6, 0) }, { VERSION(2, 3, 2), VERSION(0, 6, 0) }, { VERSION(2, 3, 1), VERSION(0, 6, 0) }, { VERSION(2, 3, 0), VERSION(0, 6, 0) }, { VERSION(2, 2, 0), VERSION(0, 6, 0) }, { VERSION(2, 1, 1), VERSION(0, 6, 0) }, { VERSION(2, 1, 0), VERSION(0, 6, 0) }, { VERSION(2, 0, 0), VERSION(0, 6, 0) }, }; const struct version_compat_table bladerf2_fw_compat_table = {fw_compat, ARRAY_SIZE(fw_compat)}; static const struct compat fpga_compat[] = { /* FPGA requires >= Firmware */ { VERSION(0, 15, 3), VERSION(2, 4, 0) }, { VERSION(0, 15, 2), VERSION(2, 4, 0) }, { VERSION(0, 15, 1), VERSION(2, 4, 0) }, { VERSION(0, 15, 0), VERSION(2, 4, 0) }, { VERSION(0, 14, 0), VERSION(2, 4, 0) }, { VERSION(0, 12, 0), VERSION(2, 2, 0) }, { VERSION(0, 11, 1), VERSION(2, 1, 0) }, { VERSION(0, 11, 0), VERSION(2, 1, 0) }, { VERSION(0, 10, 2), VERSION(2, 1, 0) }, { VERSION(0, 10, 1), VERSION(2, 1, 0) }, { VERSION(0, 10, 0), VERSION(2, 1, 0) }, { VERSION(0, 9, 0), VERSION(2, 1, 0) }, { VERSION(0, 8, 0), VERSION(2, 1, 0) }, { VERSION(0, 7, 3), VERSION(2, 1, 0) }, { VERSION(0, 7, 2), VERSION(2, 1, 0) }, { VERSION(0, 7, 1), VERSION(2, 0, 0) }, { VERSION(0, 7, 0), VERSION(2, 0, 0) }, { VERSION(0, 6, 0), VERSION(2, 0, 0) }, }; const struct version_compat_table bladerf2_fpga_compat_table = {fpga_compat, ARRAY_SIZE(fpga_compat)}; bladeRF-2024.05/host/libraries/libbladeRF/src/board/bladerf2/compatibility.h000066400000000000000000000003631457144405000264730ustar00rootroot00000000000000#ifndef BLADERF2_COMPATIBILITY_H_ #define BLADERF2_COMPATIBILITY_H_ #include "helpers/version.h" extern const struct version_compat_table bladerf2_fw_compat_table; extern const struct version_compat_table bladerf2_fpga_compat_table; #endif bladeRF-2024.05/host/libraries/libbladeRF/src/board/bladerf2/rfic_fpga.c000066400000000000000000000573641457144405000255520ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2018 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include "board/board.h" #include "common.h" #include "conversions.h" #include "iterators.h" #include "log.h" // #define BLADERF_HEADLESS_C_DEBUG /******************************************************************************/ /* Declarations */ /******************************************************************************/ /** * @brief RFIC Command Read * * Executes a command using the FPGA-based RFIC interface, returning the reply * value in *data. * * @param dev Device handle * @param[in] ch Channel to act upon; use ::BLADERF_CHANNEL_INVALID for * non-channel-specific commands * @param[in] cmd Command * @param[out] data Pointer for response data * * @return 0 on success, value from \ref RETCODES list on failure */ static int _rfic_cmd_read(struct bladerf *dev, bladerf_channel ch, bladerf_rfic_command cmd, uint64_t *data); /** * @brief RFIC Command Write * * Executes a command using the FPGA-based RFIC interface, using the supplied * data value as an argument. Waits until the command has been executed before * returning. * * @param dev Device handle * @param[in] ch Channel to act upon; use ::BLADERF_CHANNEL_INVALID for * non-channel-specific commands * @param[in] cmd Command * @param[in] data Argument for command * * @return 0 on success, value from \ref RETCODES list on failure */ static int _rfic_cmd_write(struct bladerf *dev, bladerf_channel ch, bladerf_rfic_command cmd, uint64_t data); /******************************************************************************/ /* Helpers */ /******************************************************************************/ /* Build RFIC address from bladerf_rfic_command and bladerf_channel */ #define RFIC_ADDRESS(cmd, ch) ((cmd & 0xFF) + ((ch & 0xF) << 8)) static int _rfic_fpga_get_status( struct bladerf *dev, struct bladerf_rfic_status_register *rfic_status) { uint64_t sreg = 0; int status; status = _rfic_cmd_read(dev, BLADERF_CHANNEL_INVALID, BLADERF_RFIC_COMMAND_STATUS, &sreg); rfic_status->rfic_initialized = ((sreg >> 0) & 0x1); rfic_status->write_queue_length = ((sreg >> 8) & 0xFF); return status; } static int _rfic_fpga_get_status_wqlen(struct bladerf *dev) { struct bladerf_rfic_status_register rfic_status; int status; status = _rfic_fpga_get_status(dev, &rfic_status); if (status < 0) { return status; } #ifdef BLADERF_HEADLESS_C_DEBUG if (rfic_status.write_queue_length > 0) { log_verbose("%s: queue len = %d\n", __FUNCTION__, rfic_status.write_queue_length); } #endif return (int)rfic_status.write_queue_length; } static int _rfic_fpga_spinwait(struct bladerf *dev) { size_t const TRIES = 30; unsigned int const DELAY = 100; size_t count = 0; int jobs; /* Poll the CPU and spin until the job has been completed. */ do { jobs = _rfic_fpga_get_status_wqlen(dev); if (0 != jobs) { usleep(DELAY); } } while ((0 != jobs) && (++count < TRIES)); /* If it's simply taking too long to dequeue the command, status will * have the number of items in the queue. Bonk this down to a timeout. */ if (jobs > 0) { jobs = BLADERF_ERR_TIMEOUT; } return jobs; } /******************************************************************************/ /* Low level RFIC Accessors */ /******************************************************************************/ static int _rfic_cmd_read(struct bladerf *dev, bladerf_channel ch, bladerf_rfic_command cmd, uint64_t *data) { return dev->backend->rfic_command_read(dev, RFIC_ADDRESS(cmd, ch), data); } static int _rfic_cmd_write(struct bladerf *dev, bladerf_channel ch, bladerf_rfic_command cmd, uint64_t data) { /* Perform the write command. */ CHECK_STATUS( dev->backend->rfic_command_write(dev, RFIC_ADDRESS(cmd, ch), data)); /* Block until the job has been completed. */ return _rfic_fpga_spinwait(dev); } /******************************************************************************/ /* Initialization */ /******************************************************************************/ static bool _rfic_fpga_is_present(struct bladerf *dev) { uint64_t sreg = 0; int status; status = _rfic_cmd_read(dev, BLADERF_CHANNEL_INVALID, BLADERF_RFIC_COMMAND_STATUS, &sreg); if (status < 0) { return false; } return true; } static int _rfic_fpga_get_init_state(struct bladerf *dev, bladerf_rfic_init_state *state) { uint64_t data; CHECK_STATUS(_rfic_cmd_read(dev, BLADERF_CHANNEL_INVALID, BLADERF_RFIC_COMMAND_INIT, &data)); *state = (bladerf_rfic_init_state)data; return 0; } static bool _rfic_fpga_is_initialized(struct bladerf *dev) { bladerf_rfic_init_state state; int status; status = _rfic_fpga_get_init_state(dev, &state); if (status < 0) { log_error("%s: failed to get RFIC initialization state: %s\n", __FUNCTION__, bladerf_strerror(status)); return false; } return BLADERF_RFIC_INIT_STATE_ON == state; } static bool _rfic_fpga_is_standby(struct bladerf *dev) { bladerf_rfic_init_state state; int status; status = _rfic_fpga_get_init_state(dev, &state); if (status < 0) { log_error("%s: failed to get RFIC initialization state: %s\n", __FUNCTION__, bladerf_strerror(status)); return false; } return BLADERF_RFIC_INIT_STATE_STANDBY == state; } static int _rfic_fpga_initialize(struct bladerf *dev) { log_debug("%s: initializing\n", __FUNCTION__); return _rfic_cmd_write(dev, BLADERF_CHANNEL_INVALID, BLADERF_RFIC_COMMAND_INIT, BLADERF_RFIC_INIT_STATE_ON); } static int _rfic_fpga_standby(struct bladerf *dev) { log_debug("%s: entering standby mode\n", __FUNCTION__); return _rfic_cmd_write(dev, BLADERF_CHANNEL_INVALID, BLADERF_RFIC_COMMAND_INIT, BLADERF_RFIC_INIT_STATE_STANDBY); } static int _rfic_fpga_deinitialize(struct bladerf *dev) { log_debug("%s: deinitializing\n", __FUNCTION__); return _rfic_cmd_write(dev, BLADERF_CHANNEL_INVALID, BLADERF_RFIC_COMMAND_INIT, BLADERF_RFIC_INIT_STATE_OFF); } /******************************************************************************/ /* Enable */ /******************************************************************************/ static int _rfic_fpga_enable_module(struct bladerf *dev, bladerf_channel ch, bool ch_enable) { struct bladerf2_board_data *board_data = dev->board_data; struct controller_fns const *rfic = board_data->rfic; bladerf_direction dir = BLADERF_CHANNEL_IS_TX(ch) ? BLADERF_TX : BLADERF_RX; uint32_t reg; /* RFFE register value */ bool ch_enabled; /* Channel: initial state */ bool ch_pending; /* Channel: target state is not initial state */ bool dir_enabled; /* Direction: initial state */ bool dir_enable; /* Direction: target state */ bool dir_pending; /* Direction: target state is not initial state */ bool be_toggle; /* Backend: toggle off/on to reset backend FIFO */ bool be_teardown; /* Backend: disable backend module */ bool be_setup; /* Backend: enable backend module */ /* Read RFFE control register */ CHECK_STATUS(dev->backend->rffe_control_read(dev, ®)); #ifdef BLADERF_HEADLESS_C_DEBUG uint32_t reg_old = reg; #endif /* Calculate initial and target states */ ch_enabled = _rffe_ch_enabled(reg, ch); dir_enabled = _rffe_dir_enabled(reg, dir); dir_enable = ch_enable || _rffe_dir_otherwise_enabled(reg, ch); ch_pending = ch_enabled != ch_enable; dir_pending = dir_enabled != dir_enable; be_toggle = !BLADERF_CHANNEL_IS_TX(ch) && ch_enable && !dir_pending; be_setup = be_toggle || (dir_pending && dir_enable); be_teardown = be_toggle || (dir_pending && !dir_enable); /* Perform Direction Teardown */ if (dir_pending && !dir_enable) { sync_deinit(&board_data->sync[dir]); perform_format_deconfig(dev, dir); } /* Perform Channel Setup/Teardown */ if (ch_pending) { /* Set/unset TX mute */ if (BLADERF_CHANNEL_IS_TX(ch)) { CHECK_STATUS(rfic->set_txmute(dev, ch, !ch_enable)); } /* Execute RFIC enable command. */ CHECK_STATUS(_rfic_cmd_write(dev, ch, BLADERF_RFIC_COMMAND_ENABLE, ch_enable ? 1 : 0)); } /* Perform backend teardown */ if (be_teardown) { CHECK_STATUS(dev->backend->enable_module(dev, dir, false)); } /* Perform backend setup */ if (be_setup) { CHECK_STATUS(dev->backend->enable_module(dev, dir, true)); } /* Warn the user if the sample rate isn't reasonable */ if (ch_pending && ch_enable) { check_total_sample_rate(dev); } #ifdef BLADERF_HEADLESS_C_DEBUG /* Debug output... */ if (BLADERF_LOG_LEVEL_VERBOSE == log_get_verbosity()) { CHECK_STATUS(dev->backend->rffe_control_read(dev, ®)); log_verbose( "%s: %s ch[en=%d->%d pend=%d] dir[en=%d->%d pend=%d] be[clr=%d " "su=%d td=%d] reg=0x%08x->0x%08x\n", __FUNCTION__, channel2str(ch), ch_enabled, ch_enable, ch_pending, dir_enabled, dir_enable, dir_pending, be_toggle, be_setup, be_teardown, reg_old, reg); } #endif return 0; } /******************************************************************************/ /* Sample rate */ /******************************************************************************/ static int _rfic_fpga_get_sample_rate(struct bladerf *dev, bladerf_channel ch, bladerf_sample_rate *rate) { uint64_t readval; CHECK_STATUS( _rfic_cmd_read(dev, ch, BLADERF_RFIC_COMMAND_SAMPLERATE, &readval)); *rate = (uint32_t)readval; return 0; } static int _rfic_fpga_set_sample_rate(struct bladerf *dev, bladerf_channel ch, bladerf_sample_rate rate) { return _rfic_cmd_write(dev, ch, BLADERF_RFIC_COMMAND_SAMPLERATE, rate); } /******************************************************************************/ /* Frequency */ /******************************************************************************/ static int _rfic_fpga_get_frequency(struct bladerf *dev, bladerf_channel ch, bladerf_frequency *frequency) { bladerf_frequency freq; CHECK_STATUS( _rfic_cmd_read(dev, ch, BLADERF_RFIC_COMMAND_FREQUENCY, &freq)); *frequency = freq; return 0; } static int _rfic_fpga_set_frequency(struct bladerf *dev, bladerf_channel ch, bladerf_frequency frequency) { struct bladerf_range const *range = NULL; CHECK_STATUS(dev->board->get_frequency_range(dev, ch, &range)); if (!is_within_range(range, frequency)) { return BLADERF_ERR_RANGE; } return _rfic_cmd_write(dev, ch, BLADERF_RFIC_COMMAND_FREQUENCY, frequency); } static int _rfic_fpga_select_band(struct bladerf *dev, bladerf_channel ch, bladerf_frequency frequency) { // This functionality is unnecessary with the headless architecture. return 0; } /******************************************************************************/ /* Bandwidth */ /******************************************************************************/ static int _rfic_fpga_get_bandwidth(struct bladerf *dev, bladerf_channel ch, bladerf_bandwidth *bandwidth) { uint64_t readval; CHECK_STATUS( _rfic_cmd_read(dev, ch, BLADERF_RFIC_COMMAND_BANDWIDTH, &readval)); *bandwidth = (uint32_t)readval; return 0; } static int _rfic_fpga_set_bandwidth(struct bladerf *dev, bladerf_channel ch, bladerf_bandwidth bandwidth, bladerf_bandwidth *actual) { struct bladerf2_board_data *board_data = dev->board_data; struct controller_fns const *rfic = board_data->rfic; struct bladerf_range const *range = NULL; CHECK_STATUS(dev->board->get_bandwidth_range(dev, ch, &range)); if (!is_within_range(range, bandwidth)) { return BLADERF_ERR_RANGE; } CHECK_STATUS( _rfic_cmd_write(dev, ch, BLADERF_RFIC_COMMAND_BANDWIDTH, bandwidth)); if (actual != NULL) { return rfic->get_bandwidth(dev, ch, actual); } return 0; } /******************************************************************************/ /* Gain */ /* These functions handle offset */ /******************************************************************************/ static int _rfic_fpga_get_gain(struct bladerf *dev, bladerf_channel ch, int *gain) { struct bladerf2_board_data *board_data = dev->board_data; struct controller_fns const *rfic = board_data->rfic; char const *stage = BLADERF_CHANNEL_IS_TX(ch) ? "dsa" : "full"; int val; float offset; CHECK_STATUS(get_gain_offset(dev, ch, &offset)); CHECK_STATUS(rfic->get_gain_stage(dev, ch, stage, &val)); *gain = __round_int(val + offset); return 0; } static int _rfic_fpga_set_gain(struct bladerf *dev, bladerf_channel ch, int gain) { struct bladerf2_board_data *board_data = dev->board_data; struct controller_fns const *rfic = board_data->rfic; char const *stage = BLADERF_CHANNEL_IS_TX(ch) ? "dsa" : "full"; float offset; CHECK_STATUS(get_gain_offset(dev, ch, &offset)); return rfic->set_gain_stage(dev, ch, stage, __round_int(gain - offset)); } /******************************************************************************/ /* Gain mode */ /******************************************************************************/ static int _rfic_fpga_get_gain_mode(struct bladerf *dev, bladerf_channel ch, bladerf_gain_mode *mode) { uint64_t readval; if (BLADERF_CHANNEL_IS_TX(ch)) { log_warning("%s: automatic gain control not valid for TX channels\n", __FUNCTION__); *mode = BLADERF_GAIN_DEFAULT; return 0; } CHECK_STATUS( _rfic_cmd_read(dev, ch, BLADERF_RFIC_COMMAND_GAINMODE, &readval)); *mode = (bladerf_gain_mode)readval; return 0; } static int _rfic_fpga_set_gain_mode(struct bladerf *dev, bladerf_channel ch, bladerf_gain_mode mode) { if (BLADERF_CHANNEL_IS_TX(ch)) { log_warning("%s: automatic gain control not valid for TX channels\n", __FUNCTION__); return 0; } return _rfic_cmd_write(dev, ch, BLADERF_RFIC_COMMAND_GAINMODE, mode); } /******************************************************************************/ /* Gain stage */ /* These functions handle scaling */ /******************************************************************************/ static int _rfic_fpga_get_gain_stage(struct bladerf *dev, bladerf_channel ch, char const *stage, int *gain) { struct bladerf_range const *range = NULL; uint64_t val; if ((BLADERF_CHANNEL_IS_TX(ch) && strcmp(stage, "dsa") != 0) || (!BLADERF_CHANNEL_IS_TX(ch) && strcmp(stage, "full") != 0)) { log_error("%s: unknown gain stage '%s'\n", __FUNCTION__, stage); return BLADERF_ERR_INVAL; } CHECK_STATUS(dev->board->get_gain_stage_range(dev, ch, stage, &range)); CHECK_STATUS(_rfic_cmd_read(dev, ch, BLADERF_RFIC_COMMAND_GAIN, &val)); *gain = __unscale_int(range, val); if (BLADERF_CHANNEL_IS_TX(ch)) { *gain = -(*gain); } return 0; } static int _rfic_fpga_set_gain_stage(struct bladerf *dev, bladerf_channel ch, char const *stage, int gain) { struct bladerf_range const *range = NULL; int64_t val; if ((BLADERF_CHANNEL_IS_TX(ch) && strcmp(stage, "dsa") != 0) || (!BLADERF_CHANNEL_IS_TX(ch) && strcmp(stage, "full") != 0)) { log_error("%s: unknown gain stage '%s'\n", __FUNCTION__, stage); return BLADERF_ERR_INVAL; } CHECK_STATUS(dev->board->get_gain_stage_range(dev, ch, stage, &range)); if (BLADERF_CHANNEL_IS_TX(ch) && gain < -89) { val = -89750; } else { val = __scale_int64(range, clamp_to_range(range, gain)); } if (BLADERF_CHANNEL_IS_TX(ch)) { val = -val; } return _rfic_cmd_write(dev, ch, BLADERF_RFIC_COMMAND_GAIN, (uint64_t)val); } /******************************************************************************/ /* RSSI */ /******************************************************************************/ static int _rfic_fpga_get_rssi(struct bladerf *dev, bladerf_channel ch, int *pre_rssi, int *sym_rssi) { uint64_t readval; int16_t mult, pre, sym; CHECK_STATUS(_rfic_cmd_read(dev, ch, BLADERF_RFIC_COMMAND_RSSI, &readval)); mult = (int16_t)((readval >> BLADERF_RFIC_RSSI_MULT_SHIFT) & BLADERF_RFIC_RSSI_MULT_MASK); pre = (int16_t)((readval >> BLADERF_RFIC_RSSI_PRE_SHIFT) & BLADERF_RFIC_RSSI_PRE_MASK); sym = (int16_t)((readval >> BLADERF_RFIC_RSSI_SYM_SHIFT) & BLADERF_RFIC_RSSI_SYM_MASK); *pre_rssi = __round_int(pre / (float)mult); *sym_rssi = __round_int(sym / (float)mult); return 0; } /******************************************************************************/ /* Filter */ /******************************************************************************/ static int _rfic_fpga_get_filter(struct bladerf *dev, bladerf_channel ch, bladerf_rfic_rxfir *rxfir, bladerf_rfic_txfir *txfir) { uint64_t readval; CHECK_STATUS( _rfic_cmd_read(dev, ch, BLADERF_RFIC_COMMAND_FILTER, &readval)); if (BLADERF_CHANNEL_IS_TX(ch)) { if (NULL != txfir) { *txfir = (bladerf_rfic_txfir)readval; } else { return BLADERF_ERR_INVAL; } } else { if (NULL != rxfir) { *rxfir = (bladerf_rfic_rxfir)readval; } else { return BLADERF_ERR_INVAL; } } return 0; } static int _rfic_fpga_set_filter(struct bladerf *dev, bladerf_channel ch, bladerf_rfic_rxfir rxfir, bladerf_rfic_txfir txfir) { uint64_t data; if (BLADERF_CHANNEL_IS_TX(ch)) { data = (uint64_t)txfir; } else { data = (uint64_t)rxfir; } return _rfic_cmd_write(dev, ch, BLADERF_RFIC_COMMAND_FILTER, data); } /******************************************************************************/ /* TX Mute */ /******************************************************************************/ static int _rfic_fpga_get_txmute(struct bladerf *dev, bladerf_channel ch, bool *state) { if (BLADERF_CHANNEL_IS_TX(ch)) { uint64_t readval; CHECK_STATUS( _rfic_cmd_read(dev, ch, BLADERF_RFIC_COMMAND_TXMUTE, &readval)); return (readval > 0); } return BLADERF_ERR_UNSUPPORTED; } static int _rfic_fpga_set_txmute(struct bladerf *dev, bladerf_channel ch, bool state) { if (BLADERF_CHANNEL_IS_TX(ch)) { return _rfic_cmd_write(dev, ch, BLADERF_RFIC_COMMAND_TXMUTE, state ? 1 : 0); } return BLADERF_ERR_UNSUPPORTED; } /******************************************************************************/ /* Fastlock */ /******************************************************************************/ static int _rfic_fpga_store_fastlock_profile(struct bladerf *dev, bladerf_channel ch, uint32_t profile) { return _rfic_cmd_write(dev, ch, BLADERF_RFIC_COMMAND_FASTLOCK, profile); } /******************************************************************************/ /* Function pointers */ /******************************************************************************/ struct controller_fns const rfic_fpga_control = { FIELD_INIT(.is_present, _rfic_fpga_is_present), FIELD_INIT(.is_standby, _rfic_fpga_is_standby), FIELD_INIT(.is_initialized, _rfic_fpga_is_initialized), FIELD_INIT(.get_init_state, _rfic_fpga_get_init_state), FIELD_INIT(.initialize, _rfic_fpga_initialize), FIELD_INIT(.standby, _rfic_fpga_standby), FIELD_INIT(.deinitialize, _rfic_fpga_deinitialize), FIELD_INIT(.enable_module, _rfic_fpga_enable_module), FIELD_INIT(.get_sample_rate, _rfic_fpga_get_sample_rate), FIELD_INIT(.set_sample_rate, _rfic_fpga_set_sample_rate), FIELD_INIT(.get_frequency, _rfic_fpga_get_frequency), FIELD_INIT(.set_frequency, _rfic_fpga_set_frequency), FIELD_INIT(.select_band, _rfic_fpga_select_band), FIELD_INIT(.get_bandwidth, _rfic_fpga_get_bandwidth), FIELD_INIT(.set_bandwidth, _rfic_fpga_set_bandwidth), FIELD_INIT(.get_gain_mode, _rfic_fpga_get_gain_mode), FIELD_INIT(.set_gain_mode, _rfic_fpga_set_gain_mode), FIELD_INIT(.get_gain, _rfic_fpga_get_gain), FIELD_INIT(.set_gain, _rfic_fpga_set_gain), FIELD_INIT(.get_gain_stage, _rfic_fpga_get_gain_stage), FIELD_INIT(.set_gain_stage, _rfic_fpga_set_gain_stage), FIELD_INIT(.get_rssi, _rfic_fpga_get_rssi), FIELD_INIT(.get_filter, _rfic_fpga_get_filter), FIELD_INIT(.set_filter, _rfic_fpga_set_filter), FIELD_INIT(.get_txmute, _rfic_fpga_get_txmute), FIELD_INIT(.set_txmute, _rfic_fpga_set_txmute), FIELD_INIT(.store_fastlock_profile, _rfic_fpga_store_fastlock_profile), FIELD_INIT(.command_mode, RFIC_COMMAND_FPGA), }; bladeRF-2024.05/host/libraries/libbladeRF/src/board/bladerf2/rfic_host.c000066400000000000000000001024341457144405000255770ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2018 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include "ad936x_helpers.h" #include "bladerf2_common.h" #include "board/board.h" #include "common.h" #include "helpers/wallclock.h" #include "iterators.h" #include "log.h" // #define BLADERF_HOSTED_C_DEBUG /******************************************************************************/ /* Initialization */ /******************************************************************************/ static bool _rfic_host_is_present(struct bladerf *dev) { return true; } static bool _rfic_host_is_initialized(struct bladerf *dev) { if (NULL == dev || NULL == dev->board_data) { return false; } struct bladerf2_board_data *board_data = dev->board_data; return (NULL != board_data->phy); } static int _rfic_host_get_init_state(struct bladerf *dev, bladerf_rfic_init_state *state) { if (_rfic_host_is_initialized(dev)) { *state = BLADERF_RFIC_INIT_STATE_ON; } else { *state = BLADERF_RFIC_INIT_STATE_OFF; } return 0; } static bool _rfic_host_is_standby(struct bladerf *dev) { return false; } static int _rfic_host_initialize(struct bladerf *dev) { struct bladerf2_board_data *board_data = dev->board_data; struct ad9361_rf_phy *phy = NULL; struct controller_fns const *rfic = board_data->rfic; uint32_t reg; bladerf_direction dir; bladerf_channel ch; size_t i; uint32_t config_gpio; log_debug("%s: initializating\n", __FUNCTION__); /* Initialize RFFE control */ CHECK_STATUS(dev->backend->rffe_control_write( dev, (1 << RFFE_CONTROL_ENABLE) | (1 << RFFE_CONTROL_TXNRX))); CHECK_STATUS(dev->backend->config_gpio_read(dev, &config_gpio)); board_data->rfic_init_params = (config_gpio & BLADERF_GPIO_PACKET_CORE_PRESENT) ? (void *)&bladerf2_rfic_init_params_fastagc_burst : (void *)&bladerf2_rfic_init_params; /* Initialize AD9361 */ CHECK_AD936X(ad9361_init(&phy, (AD9361_InitParam *)board_data->rfic_init_params, dev)); if (NULL == phy || NULL == phy->pdata) { RETURN_ERROR_STATUS("ad9361_init struct initialization", BLADERF_ERR_UNEXPECTED); } log_verbose("%s: ad9361 initialized @ %p\n", __FUNCTION__, phy); board_data->phy = phy; /* Force AD9361 to a non-default freq. This will entice it to do a * proper re-tuning when we set it back to the default freq later on. */ FOR_EACH_DIRECTION(dir) { FOR_EACH_CHANNEL(dir, 1, i, ch) { CHECK_STATUS(rfic->set_frequency(dev, ch, RESET_FREQUENCY)); } } /* Set up AD9361 FIR filters */ /* TODO: permit specification of filter taps, for the truly brave */ CHECK_STATUS(rfic->set_filter(dev, BLADERF_CHANNEL_RX(0), BLADERF_RFIC_RXFIR_DEFAULT, 0)); CHECK_STATUS(rfic->set_filter(dev, BLADERF_CHANNEL_TX(0), 0, BLADERF_RFIC_TXFIR_DEFAULT)); /* Clear RFFE control */ CHECK_STATUS(dev->backend->rffe_control_read(dev, ®)); reg &= ~(1 << RFFE_CONTROL_TXNRX); reg &= ~(1 << RFFE_CONTROL_ENABLE); reg &= ~(1 << RFFE_CONTROL_RX_SPDT_1); reg &= ~(1 << RFFE_CONTROL_RX_SPDT_2); reg &= ~(1 << RFFE_CONTROL_TX_SPDT_1); reg &= ~(1 << RFFE_CONTROL_TX_SPDT_2); reg &= ~(1 << RFFE_CONTROL_MIMO_RX_EN_0); reg &= ~(1 << RFFE_CONTROL_MIMO_TX_EN_0); reg &= ~(1 << RFFE_CONTROL_MIMO_RX_EN_1); reg &= ~(1 << RFFE_CONTROL_MIMO_TX_EN_1); CHECK_STATUS(dev->backend->rffe_control_write(dev, reg)); /* Move AD9361 back to desired frequency */ CHECK_STATUS(rfic->set_frequency(dev, BLADERF_CHANNEL_RX(0), phy->pdata->rx_synth_freq)); CHECK_STATUS(rfic->set_frequency(dev, BLADERF_CHANNEL_TX(0), phy->pdata->tx_synth_freq)); /* Mute TX channels */ FOR_EACH_CHANNEL(BLADERF_TX, dev->board->get_channel_count(dev, BLADERF_TX), i, ch) { CHECK_STATUS(rfic->set_txmute(dev, ch, true)); } log_debug("%s: initialization complete\n", __FUNCTION__); return 0; } static int _rfic_host_deinitialize(struct bladerf *dev) { struct bladerf2_board_data *board_data = dev->board_data; uint32_t reg; log_debug("%s: deinitializing\n", __FUNCTION__); /* Clear RFFE control */ CHECK_STATUS(dev->backend->rffe_control_read(dev, ®)); reg &= ~(1 << RFFE_CONTROL_TXNRX); reg &= ~(1 << RFFE_CONTROL_ENABLE); reg &= ~(1 << RFFE_CONTROL_RX_SPDT_1); reg &= ~(1 << RFFE_CONTROL_RX_SPDT_2); reg &= ~(1 << RFFE_CONTROL_TX_SPDT_1); reg &= ~(1 << RFFE_CONTROL_TX_SPDT_2); reg &= ~(1 << RFFE_CONTROL_MIMO_RX_EN_0); reg &= ~(1 << RFFE_CONTROL_MIMO_TX_EN_0); reg &= ~(1 << RFFE_CONTROL_MIMO_RX_EN_1); reg &= ~(1 << RFFE_CONTROL_MIMO_TX_EN_1); CHECK_STATUS(dev->backend->rffe_control_write(dev, reg)); if (NULL != board_data->phy) { CHECK_STATUS(ad9361_deinit(board_data->phy)); board_data->phy = NULL; } return 0; } static int _rfic_host_standby(struct bladerf *dev) { return _rfic_host_deinitialize(dev); } /******************************************************************************/ /* Enable */ /******************************************************************************/ static int _rfic_host_enable_module(struct bladerf *dev, bladerf_channel ch, bool enable) { struct bladerf2_board_data *board_data = dev->board_data; struct ad9361_rf_phy *phy = board_data->phy; struct controller_fns const *rfic = board_data->rfic; bladerf_direction dir = BLADERF_CHANNEL_IS_TX(ch) ? BLADERF_TX : BLADERF_RX; bladerf_frequency freq = 0; bladerf_channel_layout layout; uint32_t reg; /* RFFE register value */ uint32_t reg_old; /* Original RFFE register value */ int ch_bit; /* RFFE MIMO channel bit */ int dir_bit; /* RFFE RX/TX enable bit */ bool ch_pending; /* Requested channel state differs */ bool dir_enable; /* Direction is enabled */ bool dir_pending; /* Requested direction state differs */ bool backend_clear; /* Backend requires reset */ bool mimo_enabled; /* Look up the RFFE bits affecting this channel */ ch_bit = _get_rffe_control_bit_for_ch(ch); dir_bit = _get_rffe_control_bit_for_dir(dir); if (ch_bit < 0 || dir_bit < 0) { RETURN_ERROR_STATUS("_get_rffe_control_bit", BLADERF_ERR_INVAL); } /* Query the current frequency if necessary */ if (enable) { CHECK_STATUS(rfic->get_frequency(dev, ch, &freq)); } /** * If we are moving from 0 active channels to 1 active channel: * Channel: Setup SPDT, MIMO, TX Mute * Direction: Setup ENABLE/TXNRX, RFIC port * Backend: Enable * * If we are moving from 1 active channel to 0 active channels: * Channel: Teardown SPDT, MIMO, TX Mute * Direction: Teardown ENABLE/TXNRX, RFIC port, Sync * Backend: Disable * * If we are enabling an nth channel, where n > 1: * Channel: Setup SPDT, MIMO, TX Mute * Direction: no change * Backend: Clear * * If we are disabling an nth channel, where n > 1: * Channel: Teardown SPDT, MIMO, TX Mute * Direction: no change * Backend: no change */ /* Read RFFE control register */ CHECK_STATUS(dev->backend->rffe_control_read(dev, ®)); reg_old = reg; ch_pending = _rffe_ch_enabled(reg, ch) != enable; layout = board_data->sync->stream_config.layout; mimo_enabled = layout == BLADERF_RX_X2 || layout == BLADERF_TX_X2; if (layout == BLADERF_TX_X2) { if (enable) { log_debug("Enabling both TX channels. MIMO layout configured.\n"); reg |= (1 << _get_rffe_control_bit_for_ch(BLADERF_CHANNEL_TX(0))); reg |= (1 << _get_rffe_control_bit_for_ch(BLADERF_CHANNEL_TX(1))); } else { log_debug("Disabling both TX channels. MIMO layout configured.\n"); reg &= ~(1 << _get_rffe_control_bit_for_ch(BLADERF_CHANNEL_TX(0))); reg &= ~(1 << _get_rffe_control_bit_for_ch(BLADERF_CHANNEL_TX(1))); } } if (layout == BLADERF_RX_X2) { if (enable) { log_debug("Enabling both RX channels. MIMO layout configured.\n"); reg |= (1 << _get_rffe_control_bit_for_ch(BLADERF_CHANNEL_RX(0))); reg |= (1 << _get_rffe_control_bit_for_ch(BLADERF_CHANNEL_RX(1))); } else { log_debug("Disabling both RX channels. MIMO layout configured.\n"); reg &= ~(1 << _get_rffe_control_bit_for_ch(BLADERF_CHANNEL_RX(0))); reg &= ~(1 << _get_rffe_control_bit_for_ch(BLADERF_CHANNEL_RX(1))); } } /* Channel Setup/Teardown */ if (ch_pending) { /* Modify SPDT bits */ CHECK_STATUS(_modify_spdt_bits_by_freq(®, ch, enable, freq)); /* Modify MIMO channel enable bits */ if (enable) { reg |= (1 << ch_bit); } else { reg &= ~(1 << ch_bit); } /* Set/unset TX mute */ if (BLADERF_CHANNEL_IS_TX(ch)) { txmute_set(phy, ch, !enable); } } dir_enable = enable || does_rffe_dir_have_enabled_ch(reg, dir); dir_pending = _rffe_dir_enabled(reg, dir) != dir_enable; /* Direction Setup/Teardown */ if (dir_pending) { /* Modify ENABLE/TXNRX bits */ if (dir_enable) { reg |= (1 << dir_bit); } else { reg &= ~(1 << dir_bit); } /* Select RFIC port */ CHECK_STATUS(set_ad9361_port_by_freq(phy, ch, dir_enable, freq)); /* Tear down sync interface if required */ if (!dir_enable) { sync_deinit(&board_data->sync[dir]); perform_format_deconfig(dev, dir); } } /* Reset FIFO if we are enabling an additional RX channel */ backend_clear = enable && !dir_pending && BLADERF_RX == dir && !mimo_enabled; /* Write RFFE control register */ if (reg_old != reg) { CHECK_STATUS(dev->backend->rffe_control_write(dev, reg)); } else { log_debug("%s: reg value unchanged? (%08x)\n", __FUNCTION__, reg); } /* Backend Setup/Teardown/Reset */ if (dir_pending || backend_clear) { if (!dir_enable || backend_clear) { CHECK_STATUS(dev->backend->enable_module(dev, dir, false)); } if (dir_enable || backend_clear) { CHECK_STATUS(dev->backend->enable_module(dev, dir, true)); } } /* Warn the user if the sample rate isn't reasonable */ if (ch_pending && enable) { check_total_sample_rate(dev); } #ifdef BLADERF_HOSTED_C_DEBUG /* Debug logging */ static uint64_t lastrun = 0; /* nsec value at last run */ uint64_t nsec = wallclock_get_current_nsec(); log_debug("%s: %s%d ch_en=%d ch_pend=%d dir_en=%d dir_pend=%d be_clr=%d " "reg=0x%08x->0x%08x nsec=%" PRIu64 " (delta: %" PRIu64 ")\n", __FUNCTION__, BLADERF_TX == dir ? "TX" : "RX", (ch >> 1) + 1, enable, ch_pending, dir_enable, dir_pending, backend_clear, reg_old, reg, nsec, nsec - lastrun); lastrun = nsec; #endif /** Force rerun frequency calibration */ if (enable) { bladerf_frequency current_frequency; CHECK_STATUS(dev->board->get_frequency(dev, ch, ¤t_frequency)); CHECK_STATUS(dev->board->set_frequency(dev, ch, current_frequency)); } return 0; } /******************************************************************************/ /* Sample rate */ /******************************************************************************/ static int _rfic_host_get_sample_rate(struct bladerf *dev, bladerf_channel ch, bladerf_sample_rate *rate) { struct bladerf2_board_data *board_data = dev->board_data; struct ad9361_rf_phy *phy = board_data->phy; if (BLADERF_CHANNEL_IS_TX(ch)) { CHECK_AD936X(ad9361_get_tx_sampling_freq(phy, rate)); } else { CHECK_AD936X(ad9361_get_rx_sampling_freq(phy, rate)); } return 0; } static int _rfic_host_set_sample_rate(struct bladerf *dev, bladerf_channel ch, bladerf_sample_rate rate) { struct bladerf2_board_data *board_data = dev->board_data; struct ad9361_rf_phy *phy = board_data->phy; if (BLADERF_CHANNEL_IS_TX(ch)) { CHECK_AD936X(ad9361_set_tx_sampling_freq(phy, rate)); } else { CHECK_AD936X(ad9361_set_rx_sampling_freq(phy, rate)); } return 0; } /******************************************************************************/ /* Frequency */ /******************************************************************************/ static int _rfic_host_get_frequency(struct bladerf *dev, bladerf_channel ch, bladerf_frequency *frequency) { struct bladerf2_board_data *board_data = dev->board_data; struct ad9361_rf_phy *phy = board_data->phy; bladerf_frequency lo_frequency; if (BLADERF_CHANNEL_IS_TX(ch)) { CHECK_AD936X(ad9361_get_tx_lo_freq(phy, &lo_frequency)); } else { CHECK_AD936X(ad9361_get_rx_lo_freq(phy, &lo_frequency)); } *frequency = lo_frequency; return 0; } static int _rfic_host_set_frequency(struct bladerf *dev, bladerf_channel ch, bladerf_frequency frequency) { struct bladerf2_board_data *board_data = dev->board_data; struct ad9361_rf_phy *phy = board_data->phy; struct controller_fns const *rfic = board_data->rfic; struct bladerf_range const *range = NULL; CHECK_STATUS(dev->board->get_frequency_range(dev, ch, &range)); if (!is_within_range(range, frequency)) { return BLADERF_ERR_RANGE; } /* Set up band selection */ CHECK_STATUS(rfic->select_band(dev, ch, frequency)); /* Change LO frequency */ if (BLADERF_CHANNEL_IS_TX(ch)) { CHECK_AD936X(ad9361_set_tx_lo_freq(phy, frequency)); } else { CHECK_AD936X(ad9361_set_rx_lo_freq(phy, frequency)); } return 0; } static int _rfic_host_select_band(struct bladerf *dev, bladerf_channel ch, bladerf_frequency frequency) { struct bladerf2_board_data *board_data = dev->board_data; struct ad9361_rf_phy *phy = board_data->phy; uint32_t reg; size_t i; /* Read RFFE control register */ CHECK_STATUS(dev->backend->rffe_control_read(dev, ®)); /* Modify the SPDT bits. */ /* We have to do this for all the channels sharing the same LO. */ for (i = 0; i < 2; ++i) { bladerf_channel bch = BLADERF_CHANNEL_IS_TX(ch) ? BLADERF_CHANNEL_TX(i) : BLADERF_CHANNEL_RX(i); CHECK_STATUS(_modify_spdt_bits_by_freq( ®, bch, _rffe_ch_enabled(reg, bch), frequency)); } /* Write RFFE control register */ CHECK_STATUS(dev->backend->rffe_control_write(dev, reg)); /* Set AD9361 port */ CHECK_STATUS( set_ad9361_port_by_freq(phy, ch, _rffe_ch_enabled(reg, ch), frequency)); return 0; } /******************************************************************************/ /* Bandwidth */ /******************************************************************************/ static int _rfic_host_get_bandwidth(struct bladerf *dev, bladerf_channel ch, bladerf_bandwidth *bandwidth) { struct bladerf2_board_data *board_data = dev->board_data; struct ad9361_rf_phy *phy = board_data->phy; if (BLADERF_CHANNEL_IS_TX(ch)) { CHECK_AD936X(ad9361_get_tx_rf_bandwidth(phy, bandwidth)); } else { CHECK_AD936X(ad9361_get_rx_rf_bandwidth(phy, bandwidth)); } return 0; } static int _rfic_host_set_bandwidth(struct bladerf *dev, bladerf_channel ch, bladerf_bandwidth bandwidth, bladerf_bandwidth *actual) { struct bladerf2_board_data *board_data = dev->board_data; struct ad9361_rf_phy *phy = board_data->phy; struct controller_fns const *rfic = board_data->rfic; struct bladerf_range const *range = NULL; CHECK_STATUS(dev->board->get_bandwidth_range(dev, ch, &range)); bandwidth = (unsigned int)clamp_to_range(range, bandwidth); if (BLADERF_CHANNEL_IS_TX(ch)) { CHECK_AD936X(ad9361_set_tx_rf_bandwidth(phy, bandwidth)); } else { CHECK_AD936X(ad9361_set_rx_rf_bandwidth(phy, bandwidth)); } if (actual != NULL) { return rfic->get_bandwidth(dev, ch, actual); } return 0; } /******************************************************************************/ /* Gain mode */ /******************************************************************************/ static int _rfic_host_get_gain_mode(struct bladerf *dev, bladerf_channel ch, bladerf_gain_mode *mode) { struct bladerf2_board_data *board_data = dev->board_data; struct ad9361_rf_phy *phy = board_data->phy; uint8_t const rfic_ch = ch >> 1; uint8_t gc_mode; bool ok; if (BLADERF_CHANNEL_IS_TX(ch)) { log_warning("%s: automatic gain control not valid for TX channels\n", __FUNCTION__); *mode = BLADERF_GAIN_DEFAULT; return 0; } /* Get the gain */ CHECK_AD936X(ad9361_get_rx_gain_control_mode(phy, rfic_ch, &gc_mode)); /* Mode conversion */ if (mode != NULL) { *mode = gainmode_ad9361_to_bladerf(gc_mode, &ok); if (!ok) { RETURN_INVAL("mode", "is not valid"); } } return 0; } static int _rfic_host_set_gain_mode(struct bladerf *dev, bladerf_channel ch, bladerf_gain_mode mode) { struct bladerf2_board_data *board_data = dev->board_data; struct ad9361_rf_phy *phy = board_data->phy; uint8_t const rfic_ch = ch >> 1; enum rf_gain_ctrl_mode gc_mode; bool ok; if (BLADERF_CHANNEL_IS_TX(ch)) { log_warning("%s: automatic gain control not valid for TX channels\n", __FUNCTION__); return 0; } /* Channel conversion */ switch (ch) { case BLADERF_CHANNEL_RX(0): gc_mode = ((AD9361_InitParam *)board_data->rfic_init_params)->gc_rx1_mode; break; case BLADERF_CHANNEL_RX(1): gc_mode = ((AD9361_InitParam *)board_data->rfic_init_params)->gc_rx2_mode; break; default: log_error("%s: unknown channel index (%d)\n", __FUNCTION__, ch); return BLADERF_ERR_UNSUPPORTED; } /* Mode conversion */ if (mode != BLADERF_GAIN_DEFAULT) { gc_mode = gainmode_bladerf_to_ad9361(mode, &ok); if (!ok) { RETURN_INVAL("mode", "is not valid"); } } /* Set the mode! */ CHECK_AD936X(ad9361_set_rx_gain_control_mode(phy, rfic_ch, gc_mode)); return 0; } /******************************************************************************/ /* Gain */ /* These functions handle offset */ /******************************************************************************/ static int _rfic_host_get_gain(struct bladerf *dev, bladerf_channel ch, int *gain) { struct bladerf2_board_data *board_data = dev->board_data; struct ad9361_rf_phy *phy = board_data->phy; struct controller_fns const *rfic = board_data->rfic; int val; float offset; CHECK_STATUS(get_gain_offset(dev, ch, &offset)); if (BLADERF_CHANNEL_IS_TX(ch)) { bool muted; CHECK_STATUS(txmute_get(phy, ch, &muted)); if (muted) { struct bladerf_range const *range = NULL; CHECK_STATUS( dev->board->get_gain_stage_range(dev, ch, "dsa", &range)); val = -__unscale_int(range, txmute_get_cached(phy, ch)); } else { CHECK_STATUS(rfic->get_gain_stage(dev, ch, "dsa", &val)); } } else { CHECK_STATUS(rfic->get_gain_stage(dev, ch, "full", &val)); } *gain = __round_int(val + offset); return 0; } static int _rfic_host_set_gain(struct bladerf *dev, bladerf_channel ch, int gain) { struct bladerf2_board_data *board_data = dev->board_data; struct ad9361_rf_phy *phy = board_data->phy; struct controller_fns const *rfic = board_data->rfic; int val; float offset; CHECK_STATUS(get_gain_offset(dev, ch, &offset)); val = gain - offset; if (BLADERF_CHANNEL_IS_TX(ch)) { bool muted; CHECK_STATUS(txmute_get(phy, ch, &muted)); if (muted) { struct bladerf_range const *range = NULL; CHECK_STATUS( dev->board->get_gain_stage_range(dev, ch, "dsa", &range)); CHECK_STATUS(txmute_set_cached(phy, ch, -__scale_int(range, val))); } else { CHECK_STATUS(rfic->set_gain_stage(dev, ch, "dsa", val)); } } else { CHECK_STATUS(rfic->set_gain_stage(dev, ch, "full", val)); } return 0; } /******************************************************************************/ /* Gain stage */ /* These functions handle scaling */ /******************************************************************************/ static int _rfic_host_get_gain_stage(struct bladerf *dev, bladerf_channel ch, char const *stage, int *gain) { struct bladerf2_board_data *board_data = dev->board_data; struct ad9361_rf_phy *phy = board_data->phy; struct bladerf_range const *range = NULL; uint8_t const rfic_ch = ch >> 1; int val; CHECK_STATUS(dev->board->get_gain_stage_range(dev, ch, stage, &range)); if (BLADERF_CHANNEL_IS_TX(ch)) { if (strcmp(stage, "dsa") == 0) { uint32_t atten; CHECK_AD936X(ad9361_get_tx_attenuation(phy, rfic_ch, &atten)); val = -atten; } else { log_error("%s: gain stage '%s' invalid\n", __FUNCTION__, stage); return BLADERF_ERR_INVAL; } } else { struct rf_rx_gain rx_gain; CHECK_AD936X(ad9361_get_rx_gain(phy, rfic_ch + 1, &rx_gain)); if (strcmp(stage, "full") == 0) { val = rx_gain.gain_db; } else if (strcmp(stage, "digital") == 0) { val = rx_gain.digital_gain; } else { log_error("%s: gain stage '%s' invalid\n", __FUNCTION__, stage); return BLADERF_ERR_INVAL; } } *gain = __unscale_int(range, val); return 0; } static int _rfic_host_set_gain_stage(struct bladerf *dev, bladerf_channel ch, char const *stage, int gain) { struct bladerf2_board_data *board_data = dev->board_data; struct ad9361_rf_phy *phy = board_data->phy; struct bladerf_range const *range = NULL; uint8_t const rfic_ch = ch >> 1; int val; CHECK_STATUS(dev->board->get_gain_stage_range(dev, ch, stage, &range)); /* Scale/round/clamp as required */ if (BLADERF_CHANNEL_IS_TX(ch) && gain < -89) { val = -89750; } else { val = __scale_int(range, clamp_to_range(range, gain)); } if (BLADERF_CHANNEL_IS_TX(ch)) { if (strcmp(stage, "dsa") == 0) { CHECK_AD936X(ad9361_set_tx_attenuation(phy, rfic_ch, -val)); } else { log_warning("%s: gain stage '%s' invalid\n", __FUNCTION__, stage); return BLADERF_ERR_INVAL; } } else { if (strcmp(stage, "full") == 0) { CHECK_AD936X(ad9361_set_rx_rf_gain(phy, rfic_ch, val)); } else { log_warning("%s: gain stage '%s' invalid\n", __FUNCTION__, stage); return BLADERF_ERR_INVAL; } } return 0; } /******************************************************************************/ /* RSSI */ /******************************************************************************/ static int _rfic_host_get_rssi(struct bladerf *dev, bladerf_channel ch, int *pre_rssi, int *sym_rssi) { struct bladerf2_board_data *board_data = dev->board_data; struct ad9361_rf_phy *phy = board_data->phy; uint8_t const rfic_ch = ch >> 1; int pre, sym; if (BLADERF_CHANNEL_IS_TX(ch)) { uint32_t rssi = 0; CHECK_AD936X(ad9361_get_tx_rssi(phy, rfic_ch, &rssi)); pre = __round_int(rssi / 1000.0); sym = __round_int(rssi / 1000.0); } else { struct rf_rssi rssi; CHECK_AD936X(ad9361_get_rx_rssi(phy, rfic_ch, &rssi)); pre = __round_int(rssi.preamble / (float)rssi.multiplier); sym = __round_int(rssi.symbol / (float)rssi.multiplier); } if (NULL != pre_rssi) { *pre_rssi = -pre; } if (NULL != sym_rssi) { *sym_rssi = -sym; } return 0; } /******************************************************************************/ /* Filter */ /******************************************************************************/ static int _rfic_host_get_filter(struct bladerf *dev, bladerf_channel ch, bladerf_rfic_rxfir *rxfir, bladerf_rfic_txfir *txfir) { struct bladerf2_board_data *board_data = dev->board_data; if (NULL != rxfir) { *rxfir = board_data->rxfir; } if (NULL != txfir) { *txfir = board_data->txfir; } return 0; } static int _rfic_host_set_filter(struct bladerf *dev, bladerf_channel ch, bladerf_rfic_rxfir rxfir, bladerf_rfic_txfir txfir) { struct bladerf2_board_data *board_data = dev->board_data; struct ad9361_rf_phy *phy = board_data->phy; if (BLADERF_CHANNEL_IS_TX(ch)) { AD9361_TXFIRConfig *fir_config = NULL; uint8_t enable; if (BLADERF_RFIC_TXFIR_CUSTOM == txfir) { log_warning("custom FIR not implemented, assuming default\n"); txfir = BLADERF_RFIC_TXFIR_DEFAULT; } switch (txfir) { case BLADERF_RFIC_TXFIR_BYPASS: fir_config = &bladerf2_rfic_tx_fir_config; enable = 0; break; case BLADERF_RFIC_TXFIR_INT1: fir_config = &bladerf2_rfic_tx_fir_config; enable = 1; break; case BLADERF_RFIC_TXFIR_INT2: fir_config = &bladerf2_rfic_tx_fir_config_int2; enable = 1; break; case BLADERF_RFIC_TXFIR_INT4: fir_config = &bladerf2_rfic_tx_fir_config_int4; enable = 1; break; default: MUTEX_UNLOCK(&dev->lock); assert(!"Bug: unhandled txfir selection"); return BLADERF_ERR_UNEXPECTED; } CHECK_AD936X(ad9361_set_tx_fir_config(phy, *fir_config)); CHECK_AD936X(ad9361_set_tx_fir_en_dis(phy, enable)); board_data->txfir = txfir; } else { AD9361_RXFIRConfig *fir_config = NULL; uint8_t enable; if (BLADERF_RFIC_RXFIR_CUSTOM == rxfir) { log_warning("custom FIR not implemented, assuming default\n"); rxfir = BLADERF_RFIC_RXFIR_DEFAULT; } switch (rxfir) { case BLADERF_RFIC_RXFIR_BYPASS: fir_config = &bladerf2_rfic_rx_fir_config; enable = 0; break; case BLADERF_RFIC_RXFIR_DEC1: fir_config = &bladerf2_rfic_rx_fir_config; enable = 1; break; case BLADERF_RFIC_RXFIR_DEC2: fir_config = &bladerf2_rfic_rx_fir_config_dec2; enable = 1; break; case BLADERF_RFIC_RXFIR_DEC4: fir_config = &bladerf2_rfic_rx_fir_config_dec4; enable = 1; break; default: MUTEX_UNLOCK(&dev->lock); assert(!"Bug: unhandled rxfir selection"); return BLADERF_ERR_UNEXPECTED; } CHECK_AD936X(ad9361_set_rx_fir_config(phy, *fir_config)); CHECK_AD936X(ad9361_set_rx_fir_en_dis(phy, enable)); board_data->rxfir = rxfir; } return 0; } /******************************************************************************/ /* TX Mute */ /******************************************************************************/ static int _rfic_host_get_txmute(struct bladerf *dev, bladerf_channel ch, bool *state) { struct bladerf2_board_data *board_data = dev->board_data; struct ad9361_rf_phy *phy = board_data->phy; if (BLADERF_CHANNEL_IS_TX(ch)) { return txmute_get(phy, ch, state); } return BLADERF_ERR_UNSUPPORTED; } static int _rfic_host_set_txmute(struct bladerf *dev, bladerf_channel ch, bool state) { struct bladerf2_board_data *board_data = dev->board_data; struct ad9361_rf_phy *phy = board_data->phy; if (BLADERF_CHANNEL_IS_TX(ch)) { return txmute_set(phy, ch, state); } return BLADERF_ERR_UNSUPPORTED; } /******************************************************************************/ /* Fastlock */ /******************************************************************************/ static int _rfic_host_store_fastlock_profile(struct bladerf *dev, bladerf_channel ch, uint32_t profile) { struct bladerf2_board_data *board_data = dev->board_data; struct ad9361_rf_phy *phy = board_data->phy; if (BLADERF_CHANNEL_IS_TX(ch)) { CHECK_AD936X(ad9361_tx_fastlock_store(phy, profile)); } else { CHECK_AD936X(ad9361_rx_fastlock_store(phy, profile)); } return 0; } /******************************************************************************/ /* Function pointers */ /******************************************************************************/ struct controller_fns const rfic_host_control = { FIELD_INIT(.is_present, _rfic_host_is_present), FIELD_INIT(.is_standby, _rfic_host_is_standby), FIELD_INIT(.is_initialized, _rfic_host_is_initialized), FIELD_INIT(.get_init_state, _rfic_host_get_init_state), FIELD_INIT(.initialize, _rfic_host_initialize), FIELD_INIT(.standby, _rfic_host_standby), FIELD_INIT(.deinitialize, _rfic_host_deinitialize), FIELD_INIT(.enable_module, _rfic_host_enable_module), FIELD_INIT(.get_sample_rate, _rfic_host_get_sample_rate), FIELD_INIT(.set_sample_rate, _rfic_host_set_sample_rate), FIELD_INIT(.get_frequency, _rfic_host_get_frequency), FIELD_INIT(.set_frequency, _rfic_host_set_frequency), FIELD_INIT(.select_band, _rfic_host_select_band), FIELD_INIT(.get_bandwidth, _rfic_host_get_bandwidth), FIELD_INIT(.set_bandwidth, _rfic_host_set_bandwidth), FIELD_INIT(.get_gain_mode, _rfic_host_get_gain_mode), FIELD_INIT(.set_gain_mode, _rfic_host_set_gain_mode), FIELD_INIT(.get_gain, _rfic_host_get_gain), FIELD_INIT(.set_gain, _rfic_host_set_gain), FIELD_INIT(.get_gain_stage, _rfic_host_get_gain_stage), FIELD_INIT(.set_gain_stage, _rfic_host_set_gain_stage), FIELD_INIT(.get_rssi, _rfic_host_get_rssi), FIELD_INIT(.get_filter, _rfic_host_get_filter), FIELD_INIT(.set_filter, _rfic_host_set_filter), FIELD_INIT(.get_txmute, _rfic_host_get_txmute), FIELD_INIT(.set_txmute, _rfic_host_set_txmute), FIELD_INIT(.store_fastlock_profile, _rfic_host_store_fastlock_profile), FIELD_INIT(.command_mode, RFIC_COMMAND_HOST), }; bladeRF-2024.05/host/libraries/libbladeRF/src/board/board.c000066400000000000000000000004721457144405000232240ustar00rootroot00000000000000#include "host_config.h" #include "board.h" extern const struct board_fns bladerf1_board_fns; extern const struct board_fns bladerf2_board_fns; const struct board_fns *bladerf_boards[] = { &bladerf1_board_fns, &bladerf2_board_fns, }; const unsigned int bladerf_boards_len = ARRAY_SIZE(bladerf_boards); bladeRF-2024.05/host/libraries/libbladeRF/src/board/board.h000066400000000000000000000436631457144405000232420ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2017 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef BOARD_BOARD_H_ #define BOARD_BOARD_H_ #include #include #include "host_config.h" #include "thread.h" #include "backend/backend.h" /* Device capabilities are stored in a 64-bit mask. * * FPGA-oriented capabilities start at bit 0. * FX3-oriented capabilities start at bit 24. * Other/mixed capabilities start at bit 48. */ /** * Prior to FPGA 0.0.4, the DAC register were located at a different address */ #define BLADERF_CAP_UPDATED_DAC_ADDR (1 << 0) /** * FPGA version 0.0.5 introduced XB-200 support */ #define BLADERF_CAP_XB200 (1 << 1) /** * FPGA version 0.1.0 introduced timestamp support */ #define BLADERF_CAP_TIMESTAMPS (1 << 2) /** * FPGA v0.2.0 introduced scheduled retune support on the bladeRF 1, and FPGA * v0.10.0 introduced it on the bladeRF 2. */ #define BLADERF_CAP_SCHEDULED_RETUNE (1 << 3) /** * FPGA version 0.3.0 introduced new packet handler formats that pack * operations into a single requests. */ #define BLADERF_CAP_PKT_HANDLER_FMT (1 << 4) /** * A bug fix in FPGA version 0.3.2 allowed support for reading back * the current VCTCXO trim dac value. */ #define BLADERF_CAP_VCTCXO_TRIMDAC_READ (1 << 5) /** * FPGA v0.4.0 introduced the ability to write LMS6002D TX/RX PLL * NINT & NFRAC regiters atomically. */ #define BLADERF_CAP_ATOMIC_NINT_NFRAC_WRITE (1 << 6) /** * FPGA v0.4.1 fixed an issue with masked writes to the expansion GPIO * and expansion GPIO direction registers. * * To help users avoid getting bitten by this bug, we'll mark this * as a capability and disallow masked writes unless an FPGA with the * fix is being used. */ #define BLADERF_CAP_MASKED_XBIO_WRITE (1 << 7) /** * FPGA v0.5.0 introduces the ability to tame the VCTCXO via a 1 pps or 10 MHz * input source on the mini expansion header. */ #define BLADERF_CAP_VCTCXO_TAMING_MODE (1 << 8) /** * FPGA v0.6.0 introduced trx synchronization trigger via J71-4 */ #define BLADERF_CAP_TRX_SYNC_TRIG (1 << 9) /** * FPGA v0.7.0 introduced AGC DC correction Look-Up-Table */ #define BLADERF_CAP_AGC_DC_LUT (1 << 10) /** * FPGA v0.2.0 introduced NIOS-based tuning support on the bladeRF 1, and FPGA * v0.10.1 introduced it on the bladeRF 2. */ #define BLADERF_CAP_FPGA_TUNING (1 << 11) /** * FPGA v0.12.0 introduces the packet meta format, allowing for variable length * packets, with core target IDs. */ #define BLADERF_CAP_FPGA_PACKET_META (1 << 12) /** * Firmware 1.7.1 introduced firmware-based loopback */ #define BLADERF_CAP_FW_LOOPBACK (((uint64_t)1) << 32) /** * FX3 firmware version 1.8.0 introduced the ability to query when the * device has become ready for use by the host. This was done to avoid * opening and attempting to use the device while flash-based FPGA autoloading * was occurring. */ #define BLADERF_CAP_QUERY_DEVICE_READY (((uint64_t)1) << 33) /** * FX3 firmware v1.9.0 introduced a vendor request by which firmware log * events could be retrieved. */ #define BLADERF_CAP_READ_FW_LOG_ENTRY (((uint64_t)1) << 34) /** * FX3 firmware v2.1.0 introduced support for bladeRF 2 */ #define BLADERF_CAP_FW_SUPPORTS_BLADERF2 (((uint64_t)1) << 35) /** * FX3 firmware v2.3.0 introduced support for reporting the SPI Flash * manufacturer ID and device ID. */ #define BLADERF_CAP_FW_FLASH_ID (((uint64_t)1) << 36) /** * FX3 firmware v2.3.1 introduced support for querying the source of the * currently-configured FPGA (e.g. flash autoload, host, etc) */ #define BLADERF_CAP_FW_FPGA_SOURCE (((uint64_t)1) << 37) /** * FX3 firmware v2.4.0 introduced support for short packets. */ #define BLADERF_CAP_FW_SHORT_PACKET (((uint64_t)1) << 38) /** * FPGA v0.15.0 introduces support for 8bit mode. */ #define BLADERF_CAP_FPGA_8BIT_SAMPLES (((uint64_t)1) << 39) struct bladerf { /* Handle lock - to ensure atomic access to control and configuration * operations */ MUTEX lock; /* Identifying information */ struct bladerf_devinfo ident; /* Backend-specific implementations */ const struct backend_fns *backend; /* Backend's private data */ void *backend_data; /* Board-specific implementations */ const struct board_fns *board; /* Flash architecture */ struct bladerf_flash_arch *flash_arch; /* Board's private data */ void *board_data; /* XB attached */ bladerf_xb xb; /* XB's private data */ void *xb_data; /* Enabled feature */ bladerf_feature feature; }; struct board_fns { /* Board is compatible with backend */ bool (*matches)(struct bladerf *dev); /* Open/close */ int (*open)(struct bladerf *dev, struct bladerf_devinfo *devinfo); void (*close)(struct bladerf *dev); /* Properties */ bladerf_dev_speed (*device_speed)(struct bladerf *dev); int (*get_serial)(struct bladerf *dev, char *serial); int (*get_fpga_size)(struct bladerf *dev, bladerf_fpga_size *size); int (*get_fpga_bytes)(struct bladerf *dev, size_t *size); int (*get_flash_size)(struct bladerf *dev, uint32_t *size, bool *is_guess); int (*is_fpga_configured)(struct bladerf *dev); int (*get_fpga_source)(struct bladerf *dev, bladerf_fpga_source *source); uint64_t (*get_capabilities)(struct bladerf *dev); size_t (*get_channel_count)(struct bladerf *dev, bladerf_direction dir); /* Versions */ int (*get_fpga_version)(struct bladerf *dev, struct bladerf_version *version); int (*get_fw_version)(struct bladerf *dev, struct bladerf_version *version); /* Gain */ int (*set_gain)(struct bladerf *dev, bladerf_channel ch, bladerf_gain gain); int (*get_gain)(struct bladerf *dev, bladerf_channel ch, bladerf_gain *gain); int (*set_gain_mode)(struct bladerf *dev, bladerf_channel ch, bladerf_gain_mode mode); int (*get_gain_mode)(struct bladerf *dev, bladerf_channel ch, bladerf_gain_mode *mode); int (*get_gain_modes)(struct bladerf *dev, bladerf_channel ch, const struct bladerf_gain_modes **modes); int (*get_gain_range)(struct bladerf *dev, bladerf_channel ch, const struct bladerf_range **range); int (*set_gain_stage)(struct bladerf *dev, bladerf_channel ch, const char *stage, bladerf_gain gain); int (*get_gain_stage)(struct bladerf *dev, bladerf_channel ch, const char *stage, bladerf_gain *gain); int (*get_gain_stage_range)(struct bladerf *dev, bladerf_channel ch, const char *stage, const struct bladerf_range **range); int (*get_gain_stages)(struct bladerf *dev, bladerf_channel ch, const char **stages, size_t count); /* Sample Rate */ int (*set_sample_rate)(struct bladerf *dev, bladerf_channel ch, bladerf_sample_rate rate, bladerf_sample_rate *actual); int (*set_rational_sample_rate)(struct bladerf *dev, bladerf_channel ch, struct bladerf_rational_rate *rate, struct bladerf_rational_rate *actual); int (*get_sample_rate)(struct bladerf *dev, bladerf_channel ch, bladerf_sample_rate *rate); int (*get_sample_rate_range)(struct bladerf *dev, bladerf_channel ch, const struct bladerf_range **range); int (*get_rational_sample_rate)(struct bladerf *dev, bladerf_channel ch, struct bladerf_rational_rate *rate); /* Bandwidth */ int (*set_bandwidth)(struct bladerf *dev, bladerf_channel ch, bladerf_bandwidth bandwidth, bladerf_bandwidth *actual); int (*get_bandwidth)(struct bladerf *dev, bladerf_channel ch, bladerf_bandwidth *bandwidth); int (*get_bandwidth_range)(struct bladerf *dev, bladerf_channel ch, const struct bladerf_range **range); /* Frequency */ int (*get_frequency)(struct bladerf *dev, bladerf_channel ch, bladerf_frequency *frequency); int (*set_frequency)(struct bladerf *dev, bladerf_channel ch, bladerf_frequency frequency); int (*get_frequency_range)(struct bladerf *dev, bladerf_channel ch, const struct bladerf_range **range); int (*select_band)(struct bladerf *dev, bladerf_channel ch, bladerf_frequency frequency); /* RF Ports */ int (*set_rf_port)(struct bladerf *dev, bladerf_channel ch, const char *port); int (*get_rf_port)(struct bladerf *dev, bladerf_channel ch, const char **port); int (*get_rf_ports)(struct bladerf *dev, bladerf_channel ch, const char **ports, unsigned int count); /* Scheduled Tuning */ int (*get_quick_tune)(struct bladerf *dev, bladerf_channel ch, struct bladerf_quick_tune *quick_tune); int (*schedule_retune)(struct bladerf *dev, bladerf_channel ch, bladerf_timestamp timestamp, bladerf_frequency frequency, struct bladerf_quick_tune *quick_tune); int (*cancel_scheduled_retunes)(struct bladerf *dev, bladerf_channel ch); /* DC/Phase/Gain Correction */ int (*get_correction)(struct bladerf *dev, bladerf_channel ch, bladerf_correction corr, int16_t *value); int (*set_correction)(struct bladerf *dev, bladerf_channel ch, bladerf_correction corr, int16_t value); /* Trigger */ int (*trigger_init)(struct bladerf *dev, bladerf_channel ch, bladerf_trigger_signal signal, struct bladerf_trigger *trigger); int (*trigger_arm)(struct bladerf *dev, const struct bladerf_trigger *trigger, bool arm, uint64_t resv1, uint64_t resv2); int (*trigger_fire)(struct bladerf *dev, const struct bladerf_trigger *trigger); int (*trigger_state)(struct bladerf *dev, const struct bladerf_trigger *trigger, bool *is_armed, bool *has_fired, bool *fire_requested, uint64_t *resv1, uint64_t *resv2); /* Streaming */ int (*enable_module)(struct bladerf *dev, bladerf_channel ch, bool enable); int (*init_stream)(struct bladerf_stream **stream, struct bladerf *dev, bladerf_stream_cb callback, void ***buffers, size_t num_buffers, bladerf_format format, size_t samples_per_buffer, size_t num_transfers, void *user_data); int (*stream)(struct bladerf_stream *stream, bladerf_channel_layout layout); int (*submit_stream_buffer)(struct bladerf_stream *stream, void *buffer, unsigned int timeout_ms, bool nonblock); void (*deinit_stream)(struct bladerf_stream *stream); int (*set_stream_timeout)(struct bladerf *dev, bladerf_direction dir, unsigned int timeout); int (*get_stream_timeout)(struct bladerf *dev, bladerf_direction dir, unsigned int *timeout); int (*sync_config)(struct bladerf *dev, bladerf_channel_layout layout, bladerf_format format, unsigned int num_buffers, unsigned int buffer_size, unsigned int num_transfers, unsigned int stream_timeout); int (*sync_tx)(struct bladerf *dev, const void *samples, unsigned int num_samples, struct bladerf_metadata *metadata, unsigned int timeout_ms); int (*sync_rx)(struct bladerf *dev, void *samples, unsigned int num_samples, struct bladerf_metadata *metadata, unsigned int timeout_ms); int (*get_timestamp)(struct bladerf *dev, bladerf_direction dir, bladerf_timestamp *timestamp); /* FPGA/Firmware Loading/Flashing */ int (*load_fpga)(struct bladerf *dev, const uint8_t *buf, size_t length); int (*flash_fpga)(struct bladerf *dev, const uint8_t *buf, size_t length); int (*erase_stored_fpga)(struct bladerf *dev); int (*flash_firmware)(struct bladerf *dev, const uint8_t *buf, size_t length); int (*device_reset)(struct bladerf *dev); /* Tuning mode */ int (*set_tuning_mode)(struct bladerf *dev, bladerf_tuning_mode mode); int (*get_tuning_mode)(struct bladerf *dev, bladerf_tuning_mode *mode); /* Loopback */ int (*get_loopback_modes)(struct bladerf *dev, const struct bladerf_loopback_modes **modes); int (*set_loopback)(struct bladerf *dev, bladerf_loopback l); int (*get_loopback)(struct bladerf *dev, bladerf_loopback *l); /* Sample RX FPGA Mux */ int (*get_rx_mux)(struct bladerf *dev, bladerf_rx_mux *mode); int (*set_rx_mux)(struct bladerf *dev, bladerf_rx_mux mode); /* Low-level VCTCXO Tamer Mode */ int (*set_vctcxo_tamer_mode)(struct bladerf *dev, bladerf_vctcxo_tamer_mode mode); int (*get_vctcxo_tamer_mode)(struct bladerf *dev, bladerf_vctcxo_tamer_mode *mode); /* Low-level VCTCXO Trim DAC access */ int (*get_vctcxo_trim)(struct bladerf *dev, uint16_t *trim); int (*trim_dac_read)(struct bladerf *dev, uint16_t *trim); int (*trim_dac_write)(struct bladerf *dev, uint16_t trim); /* Low-level Trigger control access */ int (*read_trigger)(struct bladerf *dev, bladerf_channel ch, bladerf_trigger_signal trigger, uint8_t *val); int (*write_trigger)(struct bladerf *dev, bladerf_channel ch, bladerf_trigger_signal trigger, uint8_t val); /* Low-level Wishbone Master access */ int (*wishbone_master_read)(struct bladerf *dev, uint32_t addr, uint32_t *data); int (*wishbone_master_write)(struct bladerf *dev, uint32_t addr, uint32_t data); /* Low-level Configuration GPIO access */ int (*config_gpio_read)(struct bladerf *dev, uint32_t *val); int (*config_gpio_write)(struct bladerf *dev, uint32_t val); /* Low-level SPI flash access */ int (*erase_flash)(struct bladerf *dev, uint32_t erase_block, uint32_t count); int (*read_flash)(struct bladerf *dev, uint8_t *buf, uint32_t page, uint32_t count); int (*write_flash)(struct bladerf *dev, const uint8_t *buf, uint32_t page, uint32_t count); /* Expansion support */ int (*expansion_attach)(struct bladerf *dev, bladerf_xb xb); int (*expansion_get_attached)(struct bladerf *dev, bladerf_xb *xb); /* Board name */ const char *name; }; /* Information about the (SPI) flash architecture */ struct bladerf_flash_arch { enum { STATUS_FLASH_UNINITIALIZED, STATUS_SUCCESS, STATUS_ASSUMED } status; uint8_t manufacturer_id; /**< Raw manufacturer ID */ uint8_t device_id; /**< Raw device ID */ uint32_t tsize_bytes; /**< Total size of flash, in bytes */ uint32_t psize_bytes; /**< Flash page size, in bytes */ uint32_t ebsize_bytes; /**< Flash erase block size, in bytes */ uint32_t num_pages; /**< Size of flash, in pages */ uint32_t num_ebs; /**< Size of flash, in erase blocks */ }; /* Boards */ extern const struct board_fns *bladerf_boards[]; extern const unsigned int bladerf_boards_len; #endif bladeRF-2024.05/host/libraries/libbladeRF/src/devinfo.c000066400000000000000000000267151457144405000225100ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2013 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include #include #include "rel_assert.h" #include "devinfo.h" #include "conversions.h" #include "log.h" /******************************************************************************/ /* Device List Probe */ /******************************************************************************/ int probe(backend_probe_target target_device, struct bladerf_devinfo **devices) { int ret; size_t num_devices; struct bladerf_devinfo *devices_local; int status; status = backend_probe(target_device, &devices_local, &num_devices); if (status < 0) { ret = status; } else { assert(num_devices <= INT_MAX); ret = (int)num_devices; *devices = devices_local; } return ret; } int bladerf_get_device_list(struct bladerf_devinfo **devices) { return probe(BACKEND_PROBE_BLADERF, devices); } void bladerf_free_device_list(struct bladerf_devinfo *devices) { /* Admittedly, we could just have the user call free() directly, * but this creates a 1:1 pair of calls, and this gives us a spot * to do any additional cleanup here, if ever needed in the future */ free(devices); } /******************************************************************************/ /* Device Information Helpers */ /******************************************************************************/ bool bladerf_instance_matches(const struct bladerf_devinfo *a, const struct bladerf_devinfo *b) { return a->instance == DEVINFO_INST_ANY || b->instance == DEVINFO_INST_ANY || a->instance == b->instance; } bool bladerf_serial_matches(const struct bladerf_devinfo *a, const struct bladerf_devinfo *b) { /* User specified a "Any serial number" so just report a match */ const bool wildcard_match = !strcmp(a->serial, DEVINFO_SERIAL_ANY) || !strcmp(b->serial, DEVINFO_SERIAL_ANY); if (wildcard_match) { return true; } else { /* The user-supplied serial number matches the a subset of the * entire serial number, starting at the beginning. * * i.e., "abc01234" can be used to match "abc0123456789def..." */ bool subset_match = (strstr(a->serial, b->serial) == a->serial) || (strstr(b->serial, a->serial) == b->serial); return subset_match; } } bool bladerf_bus_addr_matches(const struct bladerf_devinfo *a, const struct bladerf_devinfo *b) { bool bus_match, addr_match; bus_match = a->usb_bus == DEVINFO_BUS_ANY || b->usb_bus == DEVINFO_BUS_ANY || a->usb_bus == b->usb_bus; addr_match = a->usb_addr == DEVINFO_BUS_ANY || b->usb_addr == DEVINFO_BUS_ANY || a->usb_addr == b->usb_addr; return bus_match && addr_match; } int bladerf_devinfo_list_init(struct bladerf_devinfo_list *list) { int status = 0; list->num_elt = 0; list->backing_size = 5; list->elt = malloc(list->backing_size * sizeof(struct bladerf_devinfo)); if (!list->elt) { status = BLADERF_ERR_MEM; } return status; } int bladerf_devinfo_list_add(struct bladerf_devinfo_list *list, struct bladerf_devinfo *info) { int status = 0; struct bladerf_devinfo *info_tmp; if (list->num_elt >= list->backing_size) { info_tmp = realloc(list->elt, list->backing_size * 2 * sizeof(*list->elt)); if (!info_tmp) { status = BLADERF_ERR_MEM; } else { list->elt = info_tmp; list->backing_size = list->backing_size * 2; } } if (status == 0) { memcpy(&list->elt[list->num_elt], info, sizeof(*info)); list->num_elt++; } return status; } void bladerf_init_devinfo(struct bladerf_devinfo *info) { info->backend = BLADERF_BACKEND_ANY; memset(info->serial, 0, BLADERF_SERIAL_LENGTH); strncpy(info->serial, DEVINFO_SERIAL_ANY, BLADERF_SERIAL_LENGTH - 1); info->usb_bus = DEVINFO_BUS_ANY; info->usb_addr = DEVINFO_ADDR_ANY; info->instance = DEVINFO_INST_ANY; memset(info->manufacturer, 0, BLADERF_DESCRIPTION_LENGTH); strncpy(info->manufacturer, "", BLADERF_DESCRIPTION_LENGTH - 1); memset(info->product, 0, BLADERF_DESCRIPTION_LENGTH); strncpy(info->product, "", BLADERF_DESCRIPTION_LENGTH - 1); } bool bladerf_devinfo_matches(const struct bladerf_devinfo *a, const struct bladerf_devinfo *b) { return bladerf_instance_matches(a, b) && bladerf_serial_matches(a, b) && bladerf_bus_addr_matches(a ,b); } bool bladerf_devstr_matches(const char *dev_str, struct bladerf_devinfo *info) { int status; bool ret; struct bladerf_devinfo from_str; status = str2devinfo(dev_str, &from_str); if (status < 0) { ret = false; log_debug("Failed to parse device string: %s\n", bladerf_strerror(status)); } else { ret = bladerf_devinfo_matches(&from_str, info); } return ret; } int bladerf_get_devinfo_from_str(const char *devstr, struct bladerf_devinfo *info) { return str2devinfo(devstr, info); } /******************************************************************************/ /* str2devinfo */ /******************************************************************************/ #define DELIM_SPACE " \t\r\n\v\f" static int handle_backend(char *str, struct bladerf_devinfo *d) { char *str_end; if (!str || strlen(str) == 0) { return BLADERF_ERR_INVAL; } /* Gobble up any leading whitespace */ while (*str && isspace((unsigned char) *str)) { str++; }; /* Likewise for trailing whitespace */ str_end = str + strlen(str) - 1; while (str_end > str && isspace((unsigned char) *str_end)) { str_end--; }; str_end[1] = '\0'; return str2backend(str, &d->backend); } static int handle_device(struct bladerf_devinfo *d, char *value) { int status = BLADERF_ERR_INVAL; bool bus_ok, addr_ok; char *bus = value; char *addr = strchr(value, ':'); if (addr && addr[1] != '\0') { /* Null-terminate bus and set addr to start of addr text */ *addr = '\0'; addr++; d->usb_bus = str2uint(bus, 0, DEVINFO_BUS_ANY - 1, &bus_ok); d->usb_addr = str2uint(addr, 0, DEVINFO_ADDR_ANY - 1, &addr_ok); if (bus_ok && addr_ok) { status = 0; log_debug("Device: %d:%d\n", d->usb_bus, d->usb_addr); } else { log_debug("Bad bus (%s) or address (%s)\n", bus, addr); } } return status; } static int handle_instance(struct bladerf_devinfo *d, char *value) { bool ok; if (value == NULL) { return BLADERF_ERR_INVAL; } d->instance = str2uint(value, 0, DEVINFO_INST_ANY - 1, &ok); if (!ok) { log_debug("Bad instance: %s\n", value); return BLADERF_ERR_INVAL; } else { log_debug("Instance: %u\n", d->instance); return 0; } } static int handle_serial(struct bladerf_devinfo *d, char *value) { char c; size_t i; size_t len; if (value == NULL) { return BLADERF_ERR_INVAL; } len = strlen(value); if (len > (BLADERF_SERIAL_LENGTH - 1)) { log_debug("Provided serial # string too long: %"PRIu64"\n", (uint64_t) len); return BLADERF_ERR_INVAL; } for (i = 0; i < len; i++) { c = value[i]; if (c >= 'A' && c <='F') { value[i] = tolower((unsigned char) c); } if ((c < 'a' || c > 'f') && (c < '0' || c > '9')) { log_debug("Bad serial: %s\n", value); return BLADERF_ERR_INVAL; } } strncpy(d->serial, value, sizeof(d->serial)); d->serial[sizeof(d->serial) - 1] = '\0'; if (len == (BLADERF_SERIAL_LENGTH - 1)) { log_verbose("Requested serial number: %s\n", d->serial); } else { log_verbose("Requested serial number subset: %s\n", d->serial); } return 0; } /* Returns: 1 on arg and value populated * 0 on no args left * BLADERF_ERR_INVAL on bad format */ static int next_arg(char **saveptr, char **arg, char **value) { char *saveptr_local; char *token = strtok_r(NULL, DELIM_SPACE, saveptr); /* No arguments left */ if (!token) { return 0; } /* Argument name */ *arg = strtok_r(token, "=", &saveptr_local); if (!*arg) { *value = NULL; return BLADERF_ERR_INVAL; } /* Argument value - gobble up the rest of the line*/ *value = strtok_r(NULL, "", &saveptr_local); if (!*value) { return BLADERF_ERR_INVAL; } return 1; } int str2devinfo(const char *dev_id_const, struct bladerf_devinfo *d) { char *dev_id = NULL; char *token = NULL; char *arg = NULL; char *val = NULL; char *saveptr = NULL; int status = BLADERF_ERR_UNEXPECTED; int arg_status = BLADERF_ERR_UNEXPECTED; assert(d); /* Prep our device info before we begin manpulating it, defaulting to * a "wildcard" device indentification */ bladerf_init_devinfo(d); /* No device indentifier -- pick anything we can find */ if (dev_id_const == NULL || strlen(dev_id_const) == 0) { return 0; } /* Copy the string so we can butcher it a bit while parsing */ dev_id = strdup(dev_id_const); if (!dev_id) { return BLADERF_ERR_MEM; } /* Extract backend */ token = strtok_r(dev_id, ":", &saveptr); /* We require a valid backend -- args only is not supported */ if (token) { status = handle_backend(token, d); /* Loop over remainder of string, gathering up args */ arg_status = 1; while (arg_status == 1 && status == 0) { arg_status = next_arg(&saveptr, &arg, &val); if (arg_status == 1) { /* Handle argument if we can */ if (!strcasecmp("device", arg)) { status = handle_device(d, val); } else if (!strcasecmp("instance", arg)) { status = handle_instance(d, val); } else if (!strcasecmp("serial", arg)) { status = handle_serial(d, val); } else { arg_status = BLADERF_ERR_INVAL; } } }; if (arg_status < 0) { status = arg_status; } } else { status = BLADERF_ERR_INVAL; } free(dev_id); return status; } bladeRF-2024.05/host/libraries/libbladeRF/src/devinfo.h000066400000000000000000000100551457144405000225030ustar00rootroot00000000000000/** * @file devinfo.h * * @brief Routines for parsing and handling device identifier * * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2013 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef DEVINFO_H_ #define DEVINFO_H_ #include /* Reserved values for bladerf_devinfo fields to indicate "undefined" */ #define DEVINFO_SERIAL_ANY "ANY" #define DEVINFO_BUS_ANY UINT8_MAX #define DEVINFO_ADDR_ANY UINT8_MAX #define DEVINFO_INST_ANY UINT_MAX struct bladerf_devinfo_list { struct bladerf_devinfo *elt; size_t num_elt; /* Number of elements in the list */ size_t backing_size; /* Size of backing array */ }; #include "backend/backend.h" int probe(backend_probe_target target_device, struct bladerf_devinfo **devices); int bladerf_get_device_list(struct bladerf_devinfo **devices); void bladerf_free_device_list(struct bladerf_devinfo *devices); /** * Do the device instances for the two provided device info structures match * (taking wildcards into account)? * * @param[in] a Device information to compare * @param[in] b Device information to compare * * @return true on match, false otherwise */ bool bladerf_instance_matches(const struct bladerf_devinfo *a, const struct bladerf_devinfo *b); /** * Do the serials for the two provided device info structures match * (taking wildcards into account)? * * @param[in] a Device information to compare * @param[in] b Device information to compare * * @return true on match, false otherwise */ bool bladerf_serial_matches(const struct bladerf_devinfo *a, const struct bladerf_devinfo *b); /** * Do the bus and addr for the two provided device info structures match * (taking wildcards into account)? * * @param[in] a Device information to compare * @param[in] b Device information to compare * * @return true on match, false otherwise */ bool bladerf_bus_addr_matches(const struct bladerf_devinfo *a, const struct bladerf_devinfo *b); /** * Create list of devinfos * * @param[in] list List of devinfos * * @return 0 on success, BLADERF_ERR_* on failure */ int bladerf_devinfo_list_init(struct bladerf_devinfo_list *list); /** * Get a pointer to the parent devinfo_list container of a devinfo * * @param[in] devinfo Device info * * @return pointer to container on success, NULL on error */ struct bladerf_devinfo_list *bladerf_get_devinfo_list( struct bladerf_devinfo *devinfo); /** * Add an item to our internal devinfo list * * @param[inout] list List to append to * @param[in] info Info to copy into the list * * @return 0 on success, BLADERF_ERR_* on failure */ int bladerf_devinfo_list_add(struct bladerf_devinfo_list *list, struct bladerf_devinfo *info); /** * Fill out a device info structure based upon the provided device indentifer * string. If a failure occurrs, the contents of d are undefined. * * For device identifier format, see the documentation for bladerf_open * (in include/libbladeRF.h) * * @param[in] device_identifier Device identifier string * @param[out] d Device info to fill in * * @return 0 on success, BLADERF_ERR_* on failure */ int str2devinfo(const char *device_identifier, struct bladerf_devinfo *d); #endif bladeRF-2024.05/host/libraries/libbladeRF/src/driver/000077500000000000000000000000001457144405000221725ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF/src/driver/dac161s055.c000066400000000000000000000033751457144405000237420ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2013 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include "rel_assert.h" #include "host_config.h" #include "log.h" #include "dac161s055.h" int dac161s055_write(struct bladerf *dev, uint16_t value) { int status; /* Ensure device is in write-through mode */ status = dev->backend->vctcxo_dac_write(dev, 0x28, 0x0000); if (status < 0) { return status; } /* Write DAC value to channel 0 */ status = dev->backend->vctcxo_dac_write(dev, 0x08, value); if (status < 0) { return status; } log_verbose("%s: Wrote 0x%04x\n", __FUNCTION__, value); return 0; } int dac161s055_read(struct bladerf *dev, uint16_t *value) { int status; /* Read DAC value for channel 0 */ status = dev->backend->vctcxo_dac_read(dev, 0x98, value); if (status < 0) { *value = 0; return status; } log_verbose("%s: Read 0x%04x\n", __FUNCTION__, *value); return 0; } bladeRF-2024.05/host/libraries/libbladeRF/src/driver/dac161s055.h000066400000000000000000000027241457144405000237440ustar00rootroot00000000000000/** * @file dac161s055.h * * @brief DAC161S055 Support * * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2017777777 LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef DRIVER_DAC161S055_H_ #define DRIVER_DAC161S055_H_ #include "board/board.h" /** * Write the output value to the DAC. * * @param dev Device handle * @param[in] value Value * * @return 0 on success, BLADERF_ERR_* value on failure */ int dac161s055_write(struct bladerf *dev, uint16_t value); /** * Read the output value of the DAC. * * @param dev Device handle * @param[out] value Value * * @return 0 on success, BLADERF_ERR_* value on failure */ int dac161s055_read(struct bladerf *dev, uint16_t *value); #endif bladeRF-2024.05/host/libraries/libbladeRF/src/driver/fpga_trigger.c000066400000000000000000000124341457144405000250020ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2016 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include "log.h" #include "fpga_trigger.h" static bool is_valid_signal(bladerf_trigger_signal signal) { switch (signal) { case BLADERF_TRIGGER_J71_4: case BLADERF_TRIGGER_J51_1: case BLADERF_TRIGGER_MINI_EXP_1: case BLADERF_TRIGGER_USER_0: case BLADERF_TRIGGER_USER_1: case BLADERF_TRIGGER_USER_2: case BLADERF_TRIGGER_USER_3: case BLADERF_TRIGGER_USER_4: case BLADERF_TRIGGER_USER_5: case BLADERF_TRIGGER_USER_6: case BLADERF_TRIGGER_USER_7: return true; default: log_debug("Invalid trigger signal: %d\n", signal); return false; } } int fpga_trigger_read(struct bladerf *dev, bladerf_channel ch, bladerf_trigger_signal signal, uint8_t *regval) { if (ch != BLADERF_CHANNEL_RX(0) && ch != BLADERF_CHANNEL_TX(0)) return BLADERF_ERR_INVAL; if (!is_valid_signal(signal)) return BLADERF_ERR_INVAL; return dev->backend->read_trigger(dev, ch, signal, regval); } int fpga_trigger_write(struct bladerf *dev, bladerf_channel ch, bladerf_trigger_signal signal, uint8_t regval) { if (ch != BLADERF_CHANNEL_RX(0) && ch != BLADERF_CHANNEL_TX(0)) return BLADERF_ERR_INVAL; if (!is_valid_signal(signal)) return BLADERF_ERR_INVAL; return dev->backend->write_trigger(dev, ch, signal, regval); } int fpga_trigger_init(struct bladerf *dev, bladerf_channel ch, bladerf_trigger_signal signal, struct bladerf_trigger *trigger) { int status; uint8_t regval; trigger->options = 0; status = fpga_trigger_read(dev, ch, signal, ®val); if (status != 0) { trigger->channel = BLADERF_CHANNEL_INVALID; trigger->role = BLADERF_TRIGGER_ROLE_INVALID; trigger->signal = BLADERF_TRIGGER_INVALID; return status; } if ((regval & BLADERF_TRIGGER_REG_MASTER) != 0) { trigger->role = BLADERF_TRIGGER_ROLE_MASTER; } else { trigger->role = BLADERF_TRIGGER_ROLE_SLAVE; } trigger->channel = ch; trigger->signal = signal; return 0; } int fpga_trigger_arm(struct bladerf *dev, const struct bladerf_trigger *trigger, bool arm) { int status; uint8_t regval; status = fpga_trigger_read(dev, trigger->channel, trigger->signal, ®val); if (status != 0) { return status; } /* Reset any previous fire request */ regval &= ~BLADERF_TRIGGER_REG_FIRE; if (arm) { regval |= BLADERF_TRIGGER_REG_ARM; } else { regval &= ~BLADERF_TRIGGER_REG_ARM; } switch (trigger->role) { case BLADERF_TRIGGER_ROLE_MASTER: regval |= BLADERF_TRIGGER_REG_MASTER; break; case BLADERF_TRIGGER_ROLE_SLAVE: regval &= ~BLADERF_TRIGGER_REG_MASTER; break; case BLADERF_TRIGGER_ROLE_DISABLED: regval = 0; break; default: log_debug("Invalid trigger role: %d\n", trigger->role); return BLADERF_ERR_INVAL; } status = fpga_trigger_write(dev, trigger->channel, trigger->signal, regval); return status; } int fpga_trigger_fire(struct bladerf *dev, const struct bladerf_trigger *trigger) { int status; uint8_t regval; status = fpga_trigger_read(dev, trigger->channel, trigger->signal, ®val); if (status != 0) { return status; } regval |= BLADERF_TRIGGER_REG_FIRE; status = fpga_trigger_write(dev, trigger->channel, trigger->signal, regval); return status; } int fpga_trigger_state(struct bladerf *dev, const struct bladerf_trigger *trigger, bool *is_armed, bool *fired, bool *fire_requested) { int status; uint8_t regval; status = fpga_trigger_read(dev, trigger->channel, trigger->signal, ®val); if (status != 0) { *fired = false; return status; } if (is_armed != NULL) { *is_armed = (regval & BLADERF_TRIGGER_REG_ARM) != 0; } if (fired != NULL) { /* Signal is active-low */ *fired = (regval & BLADERF_TRIGGER_REG_LINE) == 0; } if (fire_requested != NULL) { if (trigger->role == BLADERF_TRIGGER_ROLE_MASTER) { *fire_requested = (regval & BLADERF_TRIGGER_REG_FIRE) != 0; } else { *fire_requested = false; } } return status; } bladeRF-2024.05/host/libraries/libbladeRF/src/driver/fpga_trigger.h000066400000000000000000000110301457144405000247760ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2016 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef DRIVER_FPGA_TRIGGER_H_ #define DRIVER_FPGA_TRIGGER_H_ #include "board/board.h" /** * Read trigger control register * * @param dev Device handle * @param[in] ch Channel * @param[in] signal Trigger signal control register to read from * @param[out] val Pointer to variable that register is read into See the * BLADERF_TRIGGER_REG_* macros for the meaning of each * bit. * * @return 0 on success, BLADERF_ERR_* value on failure */ int fpga_trigger_read(struct bladerf *dev, bladerf_channel ch, bladerf_trigger_signal trigger, uint8_t *val); /** * Write trigger control register * * @param dev Device handle * @param[in] ch Channel * @param[in] signal Trigger signal to configure * @param[in] val Data to write into the trigger control register. See * the BLADERF_TRIGGER_REG_* macros for options. * * @return 0 on success, BLADERF_ERR_* value on failure */ int fpga_trigger_write(struct bladerf *dev, bladerf_channel ch, bladerf_trigger_signal trigger, uint8_t val); /** * Initialize a bladerf_trigger structure based upon the current state * of a channel's trigger control register. * * @param dev Device to query * @param[in] ch Channel * @param[in] signal Trigger signal to query * @param[out] trigger Updated to describe trigger * * @return 0 on success, BLADERF_ERR_* value on failure */ int fpga_trigger_init(struct bladerf *dev, bladerf_channel ch, bladerf_trigger_signal signal, struct bladerf_trigger *trigger); /** * Arm or re-arm the specified trigger. * * @param dev Device handle * @param[in] trigger Description of trigger to arm * @param[in] arm If true, the specified trigger will be armed. Setting * this to false will disarm the trigger specified in * `config`. * * @return 0 on success, BLADERF_ERR_* value on failure */ int fpga_trigger_arm(struct bladerf *dev, const struct bladerf_trigger *trigger, bool arm); /** * Fire a trigger event. * * Calling this functiona with a trigger whose role is anything other than * ::BLADERF_TRIGGER_REG_MASTER will yield a BLADERF_ERR_INVAL return value. * * @param dev Device handle * @param[in] trigger Trigger to assert * * @return 0 on success, BLADERF_ERR_* value on failure */ int fpga_trigger_fire(struct bladerf *dev, const struct bladerf_trigger *trigger); /** * Query the fire request status of a master trigger * * @param dev Device handle * @param[in] trigger Trigger to query * @param[out] is_armed Set to true if the trigger is armed, and false * otherwise. May be NULL. * @param[out] has_fired Set to true if the trigger has fired, and false * otherwise. May be NULL. * @param[out] fire_requested Only applicable to a trigger master. Set to * true if a fire request has been previously * submitted. May be NULL. * @param[out] resv1 Reserved parameter. Set to NULL. * * @return 0 on success, BLADERF_ERR_* value on failure */ int fpga_trigger_state(struct bladerf *dev, const struct bladerf_trigger *trigger, bool *is_armed, bool *has_fired, bool *fire_requested); #endif bladeRF-2024.05/host/libraries/libbladeRF/src/driver/fx3_fw.c000066400000000000000000000246201457144405000235360ustar00rootroot00000000000000/* * This file implements functionality for reading and validating an FX3 firmware * image, and providing access to the image contents. * * Details about the image format can be found and FX3 bootloader can be found * in Cypress AN76405: EZ-USB (R) FX3 (TM) Boot Options: * http://www.cypress.com/?docID=49862 * * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include #include "rel_assert.h" #include "host_config.h" #include "log.h" #include "fx3_fw.h" #define FX3_IMAGE_TYPE_NORMAL 0xb0 /* "Normal" image with checksum */ #define FX3_HDR_SIG_IDX 0x00 #define FX3_HDR_IMAGE_CTL_IDX 0x02 #define FX3_HDR_IMAGE_TYPE_IDX 0x03 #define FX3_HDR_IMAGE_LEN0_IDX 0x04 #define FX3_HDR_IMAGE_ADDR0_IDX 0x08 #define FX3_HDR_IMAGE_DATA0_IDX 0x0c #define FX3_HDR_LEN FX3_HDR_IMAGE_DATA0_IDX #define FX3_RAM_SIZE_WORDS (256 * 1024 / sizeof(uint32_t)) struct fx3_firmware { uint8_t *data; uint32_t data_len; uint32_t entry_addr; uint32_t num_sections; uint32_t curr_section; uint32_t section_offset; }; static inline uint32_t to_uint32(struct fx3_firmware *fw, uint32_t offset) { uint32_t ret; assert((offset + sizeof(uint32_t)) <= fw->data_len); memcpy(&ret, &fw->data[offset], sizeof(ret)); return LE32_TO_HOST(ret); } static inline bool is_valid_fx3_ram_addr(uint32_t addr, uint32_t len) { bool valid = true; /* If you're doing something fun, wild, and crazy with the FX3 and your * modifications of linker scripts has changed the firmware entry point, * you'll need to add this compile-time definition to suppress this check. * * One potential improvement here would be to define the I-TCM and SYSMEM * addresses at configuration/compilation-time to ensure they match * what's in the FX3's linker script. The default values are assumed here. */ # ifndef BLADERF_SUPPRESS_FX3_FW_ENTRY_POINT_CHECK const uint32_t itcm_base = 0x00000000; const uint32_t itcm_len = 0x4000; const uint32_t itcm_end = itcm_base + itcm_len; const uint32_t sysmem_base = 0x40000000; const uint32_t sysmem_len = 0x80000; const uint32_t sysmem_end = sysmem_base + sysmem_len; const bool in_itcm = (addr < itcm_end) && (len <= itcm_len) && ((addr + len) < itcm_end); const bool in_sysmem = (addr >= sysmem_base) && (addr < sysmem_end) && (len <= sysmem_len) && ((addr + len) < sysmem_end); /* In lieu of compilers issuing warnings over the fact that the condition * (addr >= itcm_base) is always true, this condition has been removed. * * Instead, an assertion has been added to catch the attention of anyone * making a change to the above itcm_base definition, albeit a *very* * unlikely change to make. */ assert(itcm_base == 0); /* (addr >= itcm_base) guaranteed */ valid = in_itcm || in_sysmem; # endif return valid; } static int scan_fw_sections(struct fx3_firmware *fw) { int status = 0; bool done = false; /* Have we read all the sections? */ uint32_t checksum = 0; uint32_t offset, i; /* In bytes */ uint32_t next_section; /* Section offset in bytes */ uint32_t section_len_words; /* FW uses units of 32-bit words */ uint32_t section_len_bytes; /* Section length converted to bytes */ /* Byte offset where the checksum is expected to be */ const uint32_t checksum_off = fw->data_len - sizeof(uint32_t); /* These assumptions should have been verified earlier */ assert(checksum_off > FX3_HDR_IMAGE_DATA0_IDX); assert((checksum_off % 4) == 0); offset = FX3_HDR_IMAGE_LEN0_IDX; while (!done) { /* Fetch the length of the current section */ section_len_words = to_uint32(fw, offset); if (section_len_words > FX3_RAM_SIZE_WORDS) { log_debug("Firmware section %u is unexpectedly large.\n", fw->num_sections); status = BLADERF_ERR_INVAL; goto error; } else { section_len_bytes = (uint32_t)(section_len_words * sizeof(uint32_t)); offset += sizeof(uint32_t); } /* The list of sections is terminated by a 0 section length field */ if (section_len_bytes == 0) { fw->entry_addr = to_uint32(fw, offset); if (!is_valid_fx3_ram_addr(fw->entry_addr, 0)) { status = BLADERF_ERR_INVAL; goto error; } offset += sizeof(uint32_t); done = true; } else { # if LOGGING_ENABLED /* Just a value to print in verbose output */ uint32_t section_start_offset = offset - sizeof(uint32_t); # endif uint32_t addr = to_uint32(fw, offset); if (!is_valid_fx3_ram_addr(addr, section_len_bytes)) { status = BLADERF_ERR_INVAL; goto error; } offset += sizeof(uint32_t); if (offset >= checksum_off) { log_debug("Firmware truncated after section address.\n"); status = BLADERF_ERR_INVAL; goto error; } next_section = offset + section_len_bytes; if (next_section >= checksum_off) { log_debug("Firmware truncated in section %u\n", fw->num_sections); status = BLADERF_ERR_INVAL; goto error; } for (i = offset; i < next_section; i += sizeof(uint32_t)) { checksum += to_uint32(fw, i); } offset = next_section; log_verbose("Scanned section %u at offset 0x%08x: " "addr=0x%08x, len=0x%08x\n", fw->num_sections, section_start_offset, addr, section_len_words); fw->num_sections++; } } if (offset != checksum_off) { log_debug("Invalid offset or junk at the end of the firmware image.\n"); status = BLADERF_ERR_INVAL; } else { const uint32_t expected_checksum = to_uint32(fw, checksum_off); if (checksum != expected_checksum) { log_debug("Bad checksum. Expected 0x%08x, got 0x%08x\n", expected_checksum, checksum); status = BLADERF_ERR_INVAL; } else { log_verbose("Firmware checksum OK.\n"); fw->section_offset = FX3_HDR_IMAGE_LEN0_IDX; } } error: return status; } int fx3_fw_parse(struct fx3_firmware **fw, uint8_t *buf, size_t buf_len) { int status; if (buf_len > UINT32_MAX) { /* This is just intended to catch a crazy edge case, since we're casting * to 32-bits below. If this passes, the data length might still be well * over the 512 KiB RAM limit. */ log_debug("Size of provided image is too large.\n"); return BLADERF_ERR_INVAL; } if (buf_len < FX3_HDR_LEN) { log_debug("Provided image is too short."); return BLADERF_ERR_INVAL; } if ((buf_len % 4) != 0) { log_debug("Size of provided image is not a multiple of 4 bytes.\n"); return BLADERF_ERR_INVAL; } if (buf[FX3_HDR_SIG_IDX] != 'C' && buf[FX3_HDR_SIG_IDX + 1] != 'Y') { log_debug("FX3 firmware does have 'CY' marker.\n"); return BLADERF_ERR_INVAL; } if (buf[3] != FX3_IMAGE_TYPE_NORMAL) { log_debug("FX3 firmware header contained unexpected image type: " "0x%02x\n", buf[FX3_HDR_IMAGE_TYPE_IDX]); return BLADERF_ERR_INVAL; } *fw = calloc(1, sizeof(struct fx3_firmware)); if (*fw == NULL) { return BLADERF_ERR_MEM; } (*fw)->data = malloc(buf_len); if ((*fw)->data == NULL) { free(*fw); return BLADERF_ERR_MEM; } memcpy((*fw)->data, buf, buf_len); (*fw)->data_len = (uint32_t)buf_len; status = scan_fw_sections(*fw); if (status != 0) { goto error; } return 0; error: fx3_fw_free(*fw); return status; } void fx3_fw_free(struct fx3_firmware *fw) { free(fw->data); free(fw); } bool fx3_fw_next_section(struct fx3_firmware *fw, uint32_t *section_addr, uint8_t **section_data, uint32_t *section_len) { uint32_t len; uint32_t addr; uint8_t *data; /* Max offset is the checksum address */ const uint32_t max_offset = fw->data_len - sizeof(uint32_t); assert(fw != NULL); assert(fw->data != NULL); *section_addr = 0; *section_data = NULL; *section_len = 0; if (fw->curr_section >= fw->num_sections) { return false; } /* Length in bytes (as converted from 32-bit words) */ len = to_uint32(fw, fw->section_offset) * sizeof(uint32_t); if (len == 0) { return false; } /* Advance to address field */ fw->section_offset += sizeof(uint32_t); assert(fw->section_offset < max_offset); addr = to_uint32(fw, fw->section_offset); /* Advance to data field */ fw->section_offset += sizeof(uint32_t); assert(fw->section_offset < max_offset); data = &fw->data[fw->section_offset]; /* Advance to the next section for the next call */ fw->section_offset += len; assert(fw->section_offset < max_offset); fw->curr_section++; *section_addr = addr; *section_data = data; *section_len = len; return true; } uint32_t fx3_fw_entry_point(const struct fx3_firmware *fw) { assert(fw != NULL); return fw->entry_addr; } bladeRF-2024.05/host/libraries/libbladeRF/src/driver/fx3_fw.h000066400000000000000000000052241457144405000235420ustar00rootroot00000000000000/* * This file defines functionality for reading and validating an FX3 firmware * image, and providing access to the image contents. * * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef DRIVER_FX3_FW_H_ #define DRIVER_FX3_FW_H_ #include "host_config.h" #include #include #include "board/board.h" struct fx3_firmware; /** * Parse the contents of an FX3 firmware file into a fx3_firmware structure. * * @param[out] fw Handle to FX3 firmware data * @param[in] buf Buffer containing a FX3 firmware image * @param[in] buf_len Length of buffer * * @return 0 on success, BLADERF_ERR_INVAL if image validation fails, * BLADERF_ERR_* values on other errors. */ int fx3_fw_parse(struct fx3_firmware **fw, uint8_t *buf, size_t buf_len); /** * Free the data stored in the provided fx3_firmware structure. * * @param[inout] fw Structure to deallocate */ void fx3_fw_free(struct fx3_firmware *fw); /** * This function allows each section to be iterated over by calling it * repeatedly, until it returns false. * * @param[in] fw Handle FX3 firmware data * @param[out] section_addr Target RAM address of the section (on the FX3) * @param[out] section_data Updated to point to start of next section's data * @parma[out] section_len Length of the next section * * @return true if this function returned section data, false if the end of the * FW has been reached and no data is available. */ bool fx3_fw_next_section(struct fx3_firmware *fw, uint32_t *section_addr, uint8_t **section_data, uint32_t *section_len); /** * @param[in] fw Handle FX3 firmware data * * @return The 32-bit little-endian address of the firmware entry point. */ uint32_t fx3_fw_entry_point(const struct fx3_firmware *fw); #endif bladeRF-2024.05/host/libraries/libbladeRF/src/driver/ina219.c000066400000000000000000000101531457144405000233410ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2017 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include "log.h" #include "ina219.h" #define INA219_REG_CONFIGURATION 0x00 #define INA219_REG_SHUNT_VOLTAGE 0x01 #define INA219_REG_BUS_VOLTAGE 0x02 #define INA219_REG_POWER 0x03 #define INA219_REG_CURRENT 0x04 #define INA219_REG_CALIBRATION 0x05 int ina219_init(struct bladerf *dev, float r_shunt) { int status; uint16_t value; /* Soft-reset INA219 */ value = 0x8000; status = dev->backend->ina219_write(dev, INA219_REG_CONFIGURATION, value); if (status < 0) { log_error("INA219 soft reset error: %d\n", status); return status; } /* Poll until we're out of reset */ while (value & 0x8000) { status = dev->backend->ina219_read(dev, INA219_REG_CONFIGURATION, &value); if (status < 0) { log_error("INA219 soft reset poll error: %d\n", status); return status; } } /* Write configuration register */ /* BRNG (13) = 0 for 16V FSR PG (12-11) = 00 for 40mV BADC (10-7) = 0011 for 12-bit / 532uS SADC (6-3) = 0011 for 12-bit / 532uS MODE (2-0) = 111 for continuous shunt & bus */ value = 0x019f; status = dev->backend->ina219_write(dev, INA219_REG_CONFIGURATION, value); if (status < 0) { log_error("INA219 configuration error: %d\n", status); return status; } log_debug("Configuration register: 0x%04x\n", value); /* Write calibration register */ /* Current_LSB = 0.001 A / LSB */ /* Calibration = 0.04096 / (Current_LSB * r_shunt) */ value = (uint16_t)((0.04096 / (0.001 * r_shunt)) + 0.5); status = dev->backend->ina219_write(dev, INA219_REG_CALIBRATION, value); if (status < 0) { log_error("INA219 calibration error: %d\n", status); return status; } log_debug("Calibration register: 0x%04x\n", value); return 0; } int ina219_read_shunt_voltage(struct bladerf *dev, float *voltage) { int status; uint16_t data; status = dev->backend->ina219_read(dev, INA219_REG_SHUNT_VOLTAGE, &data); if (status < 0) { return status; } /* Scale by 1e-5 LSB / Volt */ *voltage = ((float)((int16_t)data)) * 1e-5F; return 0; } int ina219_read_bus_voltage(struct bladerf *dev, float *voltage) { int status; uint16_t data; status = dev->backend->ina219_read(dev, INA219_REG_BUS_VOLTAGE, &data); if (status < 0) { return status; } /* If overflow flag is set */ if (data & 0x1) { return BLADERF_ERR_UNEXPECTED; } /* Scale by 0.004 LSB / Volt */ *voltage = ((float)(data >> 3)) * 0.004F; return 0; } int ina219_read_current(struct bladerf *dev, float *current) { int status; uint16_t data; status = dev->backend->ina219_read(dev, INA219_REG_CURRENT, &data); if (status < 0) { return status; } /* Scale by 0.001 LSB / Ampere */ *current = ((float)((int16_t)data)) * 0.001F; return 0; } int ina219_read_power(struct bladerf *dev, float *power) { int status; uint16_t data; status = dev->backend->ina219_read(dev, INA219_REG_POWER, &data); if (status < 0) { return status; } /* Scale by 0.020 LSB / Watt */ *power = ((float)((int16_t)data)) * 0.020F; return 0; } bladeRF-2024.05/host/libraries/libbladeRF/src/driver/ina219.h000066400000000000000000000044041457144405000233500ustar00rootroot00000000000000/** * @file ina219.h * * @brief INA219 Support * * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2017 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef DRIVER_INA219_H_ #define DRIVER_INA219_H_ #include #include "board/board.h" /** * Initialize the INA219 voltage/current/power monitor. * * @param dev Device handle * @param[in] r_shunt Shunt resistor in ohms * * @return 0 on success, BLADERF_ERR_* value on failure */ int ina219_init(struct bladerf *dev, float r_shunt); /** * Read the shunt voltage. * * @param dev Device handle * @param[out] voltage Shunt voltage in volts * * @return 0 on success, BLADERF_ERR_* value on failure */ int ina219_read_shunt_voltage(struct bladerf *dev, float *voltage); /** * Read the bus voltage. * * @param dev Device handle * @param[out] voltage Bus voltage in volts * * @return 0 on success, BLADERF_ERR_* value on failure */ int ina219_read_bus_voltage(struct bladerf *dev, float *voltage); /** * Read the load current. * * @param dev Device handle * @param[out] current Load current in amps * * @return 0 on success, BLADERF_ERR_* value on failure */ int ina219_read_current(struct bladerf *dev, float *current); /** * Read the load power. * * @param dev Device handle * @param[out] power Load power in watts * * @return 0 on success, BLADERF_ERR_* value on failure */ int ina219_read_power(struct bladerf *dev, float *power); #endif bladeRF-2024.05/host/libraries/libbladeRF/src/driver/si5338.c000066400000000000000000000440401457144405000232760ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2013 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include #include #include "rel_assert.h" #include "host_config.h" #include "log.h" #include "si5338.h" #define SI5338_EN_A 0x01 #define SI5338_EN_B 0x02 #define SI5338_F_VCO (38400000UL * 66UL) /** * This is used set or recreate the si5338 frequency * Each si5338 multisynth module can be set independently */ struct si5338_multisynth { /* Multisynth to program (0-3) */ uint8_t index; /* Base address of the multisynth */ uint16_t base; /* Requested and actual sample rates */ struct bladerf_rational_rate requested; struct bladerf_rational_rate actual; /* Enables for A and/or B outputs */ uint8_t enable; /* f_out = fvco / (a + b/c) / r */ uint32_t a, b, c, r; /* (a, b, c) in multisynth (p1, p2, p3) form */ uint32_t p1, p2, p3; /* (p1, p2, p3) in register form */ uint8_t regs[10]; }; static void si5338_log_read_error(int error, const char *s) { log_debug("Could not read from si5338 (%d): %s\n", error, s); return; } static void si5338_log_write_error(int error, const char *s) { log_debug("Could not write to si5338 (%d): %s\n", error, s); return; } static uint64_t si5338_gcd(uint64_t a, uint64_t b) { uint64_t t; while (b != 0) { t = b; b = a % t; a = t; } return a; } static void si5338_rational_reduce(struct bladerf_rational_rate *r) { int64_t val; if ((r->den > 0) && (r->num >= r->den)) { /* Get whole number */ uint64_t whole = r->num / r->den; r->integer += whole; r->num = r->num - whole*r->den; } /* Reduce fraction */ val = si5338_gcd(r->num, r->den); if (val > 0) { r->num /= val; r->den /= val; } return ; } static void si5338_rational_double(struct bladerf_rational_rate *r) { r->integer *= 2; r->num *= 2; si5338_rational_reduce(r); return; } /** * Update the base address of the selected multisynth */ static void si5338_update_base(struct si5338_multisynth *ms) { ms->base = 53 + ms->index*11 ; return; } /** * Unpack the recently read registers into (p1, p2, p3) and (a, b, c) * * Precondition: * regs[10] and r have been read * * Post-condition: * (p1, p2, p3), (a, b, c) and actual are populated */ static void si5338_unpack_regs(struct si5338_multisynth *ms) { uint64_t temp; /* Zeroize */ ms->p1 = ms->p2 = ms->p3 = 0; /* Populate */ ms->p1 = ((ms->regs[2]&3)<<16) | (ms->regs[1]<<8) | (ms->regs[0]); ms->p2 = (ms->regs[5]<<22) | (ms->regs[4]<<14) | (ms->regs[3]<<6) | ((ms->regs[2]>>2)&0x3f); ms->p3 = ((ms->regs[9]&0x3f)<<24) | (ms->regs[8]<<16) | (ms->regs[7]<<8) | (ms->regs[6]); log_verbose("Unpacked P1: 0x%8.8x (%u) P2: 0x%8.8x (%u) P3: 0x%8.8x (%u)\n", ms->p1, ms->p1, ms->p2, ms->p2, ms->p3, ms->p3); /* c = p3 */ ms->c = ms->p3; /* a = (p1+512)/128 * * NOTE: The +64 is for rounding purposes. */ ms->a = (ms->p1+512)/128; /* b = (((p1+512)-128*a)*c + (b % c) + 64)/128 */ temp = (ms->p1+512)-128*(uint64_t)ms->a; temp = (temp * ms->c) + ms->p2; temp = (temp + 64) / 128; assert(temp <= UINT32_MAX); ms->b = (uint32_t)temp; log_verbose("Unpacked a + b/c: %d + %d/%d\n", ms->a, ms->b, ms->c); log_verbose("Unpacked r: %d\n", ms->r); } /* * Pack (a, b, c, r) into (p1, p2, p3) and regs[] */ static void si5338_pack_regs(struct si5338_multisynth *ms) { /* Precondition: * (a, b, c) and r have been populated * * Post-condition: * (p1, p2, p3) and regs[10] are populated */ /* p1 = (a * c + b) * 128 / c - 512 */ uint64_t temp; temp = (uint64_t)ms->a * ms->c + ms->b; temp = temp * 128 ; temp = temp / ms->c - 512; assert(temp <= UINT32_MAX); ms->p1 = (uint32_t)temp; //ms->p1 = ms->a * ms->c + ms->b; //ms->p1 = ms->p1 * 128; //ms->p1 = ms->p1 / ms->c - 512; /* p2 = (b * 128) % c */ temp = (uint64_t)ms->b * 128; temp = temp % ms->c; assert(temp <= UINT32_MAX); ms->p2 = (uint32_t)temp; /* p3 = c */ ms->p3 = ms->c; log_verbose("MSx P1: 0x%8.8x (%u) P2: 0x%8.8x (%u) P3: 0x%8.8x (%u)\n", ms->p1, ms->p1, ms->p2, ms->p2, ms->p3, ms->p3); /* Regs */ ms->regs[0] = ms->p1 & 0xff; ms->regs[1] = (ms->p1 >> 8) & 0xff; ms->regs[2] = ((ms->p2 & 0x3f) << 2) | ((ms->p1 >> 16) & 0x3); ms->regs[3] = (ms->p2 >> 6) & 0xff; ms->regs[4] = (ms->p2 >> 14) & 0xff; ms->regs[5] = (ms->p2 >> 22) & 0xff; ms->regs[6] = ms->p3 & 0xff; ms->regs[7] = (ms->p3 >> 8) & 0xff; ms->regs[8] = (ms->p3 >> 16) & 0xff; ms->regs[9] = (ms->p3 >> 24) & 0xff; return ; } static int si5338_write_multisynth(struct bladerf *dev, struct si5338_multisynth *ms) { int i, status; uint8_t r_power, r_count, val; log_verbose("Writing MS%d\n", ms->index); /* Write out the enables */ status = dev->backend->si5338_read(dev, 36 + ms->index, &val); if (status < 0) { si5338_log_read_error(status, bladerf_strerror(status)); return status; } val |= ms->enable; log_verbose("Wrote enable register: 0x%2.2x\n", val); status = dev->backend->si5338_write(dev, 36 + ms->index, val); if (status < 0) { si5338_log_write_error(status, bladerf_strerror(status)); return status; } /* Write out the registers */ for (i = 0 ; i < 10 ; i++) { status = dev->backend->si5338_write(dev, ms->base + i, *(ms->regs+i)); if (status < 0) { si5338_log_write_error(status, bladerf_strerror(status)); return status; } log_verbose("Wrote regs[%d]: 0x%2.2x\n", i, *(ms->regs+i)); } /* Calculate r_power from c_count */ r_power = 0; r_count = ms->r >> 1 ; while (r_count > 0) { r_count >>= 1; r_power++; } /* Set the r value to the log2(r_count) to match Figure 18 */ val = 0xc0; val |= (r_power<<2); log_verbose("Wrote r register: 0x%2.2x\n", val); status = dev->backend->si5338_write(dev, 31 + ms->index, val); if (status < 0) { si5338_log_write_error(status, bladerf_strerror(status)); } return status ; } static int si5338_read_multisynth(struct bladerf *dev, struct si5338_multisynth *ms) { int i, status; uint8_t val; log_verbose("Reading MS%d\n", ms->index); /* Read the enable bits */ status = dev->backend->si5338_read(dev, 36 + ms->index, &val); if (status < 0) { si5338_log_read_error(status, bladerf_strerror(status)); return status ; } ms->enable = val&7; log_verbose("Read enable register: 0x%2.2x\n", val); /* Read all of the multisynth registers */ for (i = 0; i < 10; i++) { status = dev->backend->si5338_read(dev, ms->base + i, ms->regs+i); if (status < 0) { si5338_log_read_error(status, bladerf_strerror(status)); return status; } log_verbose("Read regs[%d]: 0x%2.2x\n", i, *(ms->regs+i)); } /* Populate the RxDIV value from the register */ status = dev->backend->si5338_read(dev, 31 + ms->index, &val); if (status < 0) { si5338_log_read_error(status, bladerf_strerror(status)); return status; } /* RxDIV is stored as a power of 2, so restore it on readback */ log_verbose("Read r register: 0x%2.2x\n", val); val = (val>>2)&7; ms->r = (1<a; abc.num = ms->b; abc.den = ms->c; rate->integer = 0; rate->num = SI5338_F_VCO * abc.den; rate->den = (uint64_t)ms->r*(abc.integer * abc.den + abc.num); /* Compensate for doubling of frequency for LMS sampling clocks */ if(ms->index == 1 || ms->index == 2) { rate->den *= 2; } si5338_rational_reduce(rate); log_verbose("Calculated multisynth frequency: %" PRIu64" + %"PRIu64"/%"PRIu64"\n", rate->integer, rate->num, rate->den); return; } static int si5338_calculate_multisynth(struct si5338_multisynth *ms, struct bladerf_rational_rate *rate) { struct bladerf_rational_rate req; struct bladerf_rational_rate abc; uint8_t r_value; /* Don't muss with the users data */ req = *rate; /* Double requested frequency for sample clocks since LMS requires * 2:1 clock:sample rate */ if(ms->index == 1 || ms->index == 2) { si5338_rational_double(&req); } /* Find a suitable R value */ r_value = 1; while (req.integer < 5000000 && r_value < 32) { si5338_rational_double(&req); r_value <<= 1; } if (r_value == 32 && req.integer < 5000000) { log_debug("Sample rate requires r > 32\n"); return BLADERF_ERR_INVAL; } else { log_verbose("Found r value of: %d\n", r_value); } /* Find suitable MS (a, b, c) values */ abc.integer = 0; abc.num = SI5338_F_VCO * req.den; abc.den = req.integer * req.den + req.num; si5338_rational_reduce(&abc); log_verbose("MSx a + b/c: %"PRIu64" + %"PRIu64"/%"PRIu64"\n", abc.integer, abc.num, abc.den); /* Check values to make sure they are OK */ if (abc.integer < 8) { switch (abc.integer) { case 0: case 1: case 2: case 3: case 5: case 7: log_debug("Integer portion too small: %"PRIu64"\n", abc.integer); return BLADERF_ERR_INVAL; } } else if (abc.integer > 567) { log_debug("Integer portion too large: %"PRIu64"\n", abc.integer); return BLADERF_ERR_INVAL; } /* Loss of precision if num or den are greater than 2^30-1 */ while (abc.num > (1<<30) || abc.den > (1<<30) ) { log_debug("Loss of precision in reducing fraction from " "%"PRIu64"/%"PRIu64" to %"PRIu64"/%"PRIu64"\n", abc.num, abc.den, abc.num>>1, abc.den>>1); abc.num >>= 1; abc.den >>= 1; } log_verbose("MSx a + b/c: %"PRIu64" + %"PRIu64"/%"PRIu64"\n", abc.integer, abc.num, abc.den); /* Set it in the multisynth */ assert(abc.integer <= UINT32_MAX); assert(abc.num <= UINT32_MAX); assert(abc.den <= UINT32_MAX); ms->a = (uint32_t)abc.integer; ms->b = (uint32_t)abc.num; ms->c = (uint32_t)abc.den; ms->r = r_value; /* Pack the registers */ si5338_pack_regs(ms); return 0; } /** * Configure a multisynth for either the RX/TX sample clocks (index=1 or 2) * or for the SMB output (index=3). */ static int si5338_set_rational_multisynth(struct bladerf *dev, uint8_t index, uint8_t channel, struct bladerf_rational_rate *rate, struct bladerf_rational_rate *actual_ret) { struct si5338_multisynth ms; struct bladerf_rational_rate req; struct bladerf_rational_rate actual; int status; si5338_rational_reduce(rate); /* Save off the value */ req = *rate; /* Setup the multisynth enables and index */ ms.index = index; ms.enable = channel; /* Update the base address register */ si5338_update_base(&ms); /* Calculate multisynth values */ status = si5338_calculate_multisynth(&ms, &req); if(status != 0) { return status; } /* Get the actual rate */ si5338_calculate_ms_freq(&ms, &actual); if (actual_ret) { memcpy(actual_ret, &actual, sizeof(*actual_ret)); } /* Program it to the part */ status = si5338_write_multisynth(dev, &ms); /* Done */ return status ; } int si5338_set_rational_sample_rate(struct bladerf *dev, bladerf_channel ch, const struct bladerf_rational_rate *rate, struct bladerf_rational_rate *actual) { struct bladerf_rational_rate rate_reduced = *rate; uint8_t index = (ch == BLADERF_CHANNEL_RX(0)) ? 1 : 2; uint8_t channel = SI5338_EN_A; /* Enforce minimum sample rate */ si5338_rational_reduce(&rate_reduced); if (rate_reduced.integer < BLADERF_SAMPLERATE_MIN) { log_debug("%s: provided sample rate violates minimum\n", __FUNCTION__); return BLADERF_ERR_INVAL; } if (ch == BLADERF_CHANNEL_TX(0)) { channel |= SI5338_EN_B; } return si5338_set_rational_multisynth(dev, index, channel, &rate_reduced, actual); } int si5338_set_rational_smb_freq(struct bladerf *dev, const struct bladerf_rational_rate *rate, struct bladerf_rational_rate *actual) { struct bladerf_rational_rate rate_reduced = *rate; /* Enforce minimum and maximum frequencies */ si5338_rational_reduce(&rate_reduced); if (rate_reduced.integer < BLADERF_SMB_FREQUENCY_MIN) { log_debug("%s: provided SMB freq violates minimum\n", __FUNCTION__); return BLADERF_ERR_INVAL; } else if (rate_reduced.integer > BLADERF_SMB_FREQUENCY_MAX) { log_debug("%s: provided SMB freq violates maximum\n", __FUNCTION__); return BLADERF_ERR_INVAL; } return si5338_set_rational_multisynth(dev, 3, SI5338_EN_A, &rate_reduced, actual); } int si5338_set_sample_rate(struct bladerf *dev, bladerf_channel ch, uint32_t rate, uint32_t *actual) { struct bladerf_rational_rate req, act; int status; memset(&act, 0, sizeof(act)); log_verbose("Setting integer sample rate: %d\n", rate); req.integer = rate; req.num = 0; req.den = 1; status = si5338_set_rational_sample_rate(dev, ch, &req, &act); if (status == 0 && act.num != 0) { log_info("Non-integer sample rate set from integer sample rate, " "truncating output.\n"); } assert(act.integer <= UINT32_MAX); if (actual) { *actual = (uint32_t)act.integer; } log_verbose("Set actual integer sample rate: %d\n", act.integer); return status ; } int si5338_set_smb_freq(struct bladerf *dev, uint32_t rate, uint32_t *actual) { struct bladerf_rational_rate req, act; int status; memset(&act, 0, sizeof(act)); log_verbose("Setting integer SMB frequency: %d\n", rate); req.integer = rate; req.num = 0; req.den = 1; status = si5338_set_rational_smb_freq(dev, &req, &act); if (status == 0 && act.num != 0) { log_info("Non-integer SMB frequency set from integer frequency, " "truncating output.\n"); } assert(act.integer <= UINT32_MAX); if (actual) { *actual = (uint32_t)act.integer; } log_verbose("Set actual integer SMB frequency: %d\n", act.integer); return status; } int si5338_get_rational_sample_rate(struct bladerf *dev, bladerf_channel ch, struct bladerf_rational_rate *rate) { struct si5338_multisynth ms; int status; /* Select the multisynth we want to read */ ms.index = (ch == BLADERF_CHANNEL_RX(0)) ? 1 : 2; /* Update the base address */ si5338_update_base(&ms); /* Readback */ status = si5338_read_multisynth(dev, &ms); if (status) { si5338_log_read_error(status, bladerf_strerror(status)); return status; } si5338_calculate_ms_freq(&ms, rate); return 0; } int si5338_get_rational_smb_freq(struct bladerf *dev, struct bladerf_rational_rate *rate) { struct si5338_multisynth ms; int status; /* Select MS3 for the SMB output */ ms.index = 3; si5338_update_base(&ms); status = si5338_read_multisynth(dev, &ms); if (status) { si5338_log_read_error(status, bladerf_strerror(status)); return status; } si5338_calculate_ms_freq(&ms, rate); return 0; } int si5338_get_sample_rate(struct bladerf *dev, bladerf_channel ch, unsigned int *rate) { struct bladerf_rational_rate actual; int status; status = si5338_get_rational_sample_rate(dev, ch, &actual); if (status) { si5338_log_read_error(status, bladerf_strerror(status)); return status; } if (actual.num != 0) { log_debug("Fractional sample rate truncated during integer sample rate" "retrieval\n"); } assert(actual.integer <= UINT_MAX); *rate = (unsigned int)actual.integer; return 0; } int si5338_get_smb_freq(struct bladerf *dev, unsigned int *rate) { struct bladerf_rational_rate actual; int status; status = si5338_get_rational_smb_freq(dev, &actual); if (status) { si5338_log_read_error(status, bladerf_strerror(status)); return status; } if (actual.num != 0) { log_debug("Fractional SMB frequency truncated during integer SMB" " frequency retrieval\n"); } assert(actual.integer <= UINT_MAX); *rate = (unsigned int)actual.integer; return 0; } bladeRF-2024.05/host/libraries/libbladeRF/src/driver/si5338.h000066400000000000000000000102771457144405000233100ustar00rootroot00000000000000/** * @file si5338.h * * @brief SI5339 Support * * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2013 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef DRIVER_SI5338_H_ #define DRIVER_SI5338_H_ #include #include "board/board.h" /** * Set the rational sample rate of the specified channel. * * @param dev Device handle * @param[in] ch Channel * @param[in] rate Rational rate requested * @param[out] actual Rational rate actually set * * @return 0 on success, BLADERF_ERR_* value on failure */ int si5338_set_rational_sample_rate(struct bladerf *dev, bladerf_channel ch, const struct bladerf_rational_rate *rate, struct bladerf_rational_rate *actual); /** * Get the rational sample rate of the specified channel. * * @param dev Device handle * @param[in] ch Channel * @param[out] rate Rational rate * * @return 0 on success, BLADERF_ERR_* value on failure */ int si5338_get_rational_sample_rate(struct bladerf *dev, bladerf_channel ch, struct bladerf_rational_rate *rate); /** * Set the integral sample rate of the specified channel. * * @param dev Device handle * @param[in] ch Channel * @param[in] rate Integral rate requested * @param[out] actual Integral rate actually set * * @return 0 on success, BLADERF_ERR_* value on failure */ int si5338_set_sample_rate(struct bladerf *dev, bladerf_channel ch, uint32_t rate, uint32_t *actual); /** * Get the integral sample rate of the specified channel. * * @param dev Device handle * @param[in] ch Channel * @param[out] rate Integral rate * * @return 0 on success, BLADERF_ERR_* value on failure */ int si5338_get_sample_rate(struct bladerf *dev, bladerf_channel ch, unsigned int *rate); /** * Set the rational frequency of the external SMB port. * * @param dev Device handle * @param[in] rate Rational rate requested * @param[out] actual Rational rate actually set * * @return 0 on success, BLADERF_ERR_* value on failure */ int si5338_set_rational_smb_freq(struct bladerf *dev, const struct bladerf_rational_rate *rate, struct bladerf_rational_rate *actual); /** * Get the rational sample rate of the external SMB port. * * @param dev Device handle * @param[out] rate Rational rate * * @return 0 on success, BLADERF_ERR_* value on failure */ int si5338_get_rational_smb_freq(struct bladerf *dev, struct bladerf_rational_rate *rate); /** * Set the integral sample rate of the external SMB port. * * @param dev Device handle * @param[in] rate Integral rate requested * @param[out] actual Integral rate actually set * * @return 0 on success, BLADERF_ERR_* value on failure */ int si5338_set_smb_freq(struct bladerf *dev, uint32_t rate, uint32_t *actual); /** Get the integral sample rate of the external SMB port. * * @param dev Device handle * @param[out] rate Integral rate * * @return 0 on success, BLADERF_ERR_* value on failure */ int si5338_get_smb_freq(struct bladerf *dev, unsigned int *rate); #endif bladeRF-2024.05/host/libraries/libbladeRF/src/driver/smb_clock.c000066400000000000000000000117541457144405000243020ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2016 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include "log.h" #include "smb_clock.h" #include "driver/si5338.h" #include "board/board.h" struct regvals { uint8_t addr; uint8_t data; }; /* Power-on defaults with SMB clock port not in use */ static const struct regvals default_config[] = { { 6, 0x08 }, { 28, 0x0b }, { 29, 0x08 }, { 30, 0xb0 }, { 34, 0xe3 }, { 39, 0x00 }, /* Reset Multisynth 3 */ { 86, 0x00 }, { 87, 0x00 }, { 88, 0x00 }, { 89, 0x00 }, { 90, 0x00 }, { 91, 0x00 }, { 92, 0x00 }, { 93, 0x00 }, { 94, 0x00 }, { 95, 0x00 }, }; static const struct regvals input_config[] = { { 6, 0x04 }, { 28, 0x2b }, { 29, 0x28 }, { 30, 0xa8 }, }; static const struct regvals output_config[] = { { 34, 0x22 }, }; static int write_regs(struct bladerf *dev, const struct regvals *reg, size_t n) { size_t i; int status = 0; for (i = 0; i < n && status == 0; i++) { status = dev->backend->si5338_write(dev, reg[i].addr, reg[i].data); } return status; } static inline int smb_mode_input(struct bladerf *dev) { int status; uint8_t val; status = write_regs(dev, input_config, ARRAY_SIZE(input_config)); if (status != 0) { return status; } /* Turn off any SMB connector output */ status = dev->backend->si5338_read(dev, 39, &val); if (status != 0) { return status; } val &= ~(1); status = dev->backend->si5338_write(dev, 39, val); if (status != 0) { return status; } return status; } static inline int smb_mode_output(struct bladerf *dev) { int status; uint8_t val; status = dev->backend->si5338_read(dev, 39, &val); if (status != 0) { return status; } val |= 1; status = dev->backend->si5338_write(dev, 39, val); if (status != 0) { return status; } status = write_regs(dev, output_config, ARRAY_SIZE(output_config)); if (status != 0) { return status; } return status; } static inline int smb_mode_disabled(struct bladerf *dev) { return write_regs(dev, default_config, ARRAY_SIZE(default_config)); } int smb_clock_set_mode(struct bladerf *dev, bladerf_smb_mode mode) { int status; /* Reset initial state */ status = smb_mode_disabled(dev); if (status != 0) { return status; } /* Apply changes */ switch (mode) { case BLADERF_SMB_MODE_DISABLED: break; case BLADERF_SMB_MODE_OUTPUT: status = smb_mode_output(dev); break; case BLADERF_SMB_MODE_INPUT: status = smb_mode_input(dev); break; default: log_debug("Invalid SMB clock port mode: %d\n", mode); return BLADERF_ERR_INVAL; } return status; } /* For simplicity, we just check a few bits that are indicative of our known * register configurations for our SMB clock port configurations. * * Inconsistent register states (or users manually changing registers) may * cause this function to erroneously report the state. */ int smb_clock_get_mode(struct bladerf *dev, bladerf_smb_mode *mode) { int status; uint8_t val; /* Check DRV3_FMT[2:0] for an output configuration */ status = dev->backend->si5338_read(dev, 39, &val); if (status != 0) { return status; } switch (val & 0x7) { case 0x00: /* No output */ break; case 0x01: /* CLK3A CMOS/SSTL/HSTL - we're outputting a clock */ *mode = BLADERF_SMB_MODE_OUTPUT; return 0; case 0x02: /* CLK3B CMOS/SSTL/HSTL - used by the XB-200. */ *mode = BLADERF_SMB_MODE_UNAVAILBLE; return 0; default: *mode = BLADERF_SMB_MODE_INVALID; log_debug("Si5338[39] in unexpected state: 0x%02x\n", val); return BLADERF_ERR_UNSUPPORTED; } /* Check P2DIV_IN[0] for an input configuration */ status = dev->backend->si5338_read(dev, 28, &val); if (status != 0) { return status; } if ((val & (1 << 5)) != 0) { *mode = BLADERF_SMB_MODE_INPUT; } else { *mode = BLADERF_SMB_MODE_DISABLED; } return status; } bladeRF-2024.05/host/libraries/libbladeRF/src/driver/smb_clock.h000066400000000000000000000030111457144405000242720ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2016 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef DRIVER_SMB_CLOCK_H_ #define DRIVER_SMB_CLOCK_H_ #include /** * Set the current mode of operation of the SMB clock port * * @param dev Device handle * @param[in] mode Desired mode * * @return 0 on success, or a BLADERF_ERR_* value on failure. */ int smb_clock_set_mode(struct bladerf *dev, bladerf_smb_mode mode); /** * Get the current mode of operation of the SMB clock port * * @param dev Device handle * @param[out] mode Desired mode * * @return 0 on success, or a value from \ref RETCODES list on failure. */ int smb_clock_get_mode(struct bladerf *dev, bladerf_smb_mode *mode); #endif bladeRF-2024.05/host/libraries/libbladeRF/src/driver/spi_flash.c000066400000000000000000000101541457144405000243070ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2013 Daniel Gröber * Copyright (C) 2013 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include #include #include "rel_assert.h" #include "log.h" #include "spi_flash.h" #include "board/board.h" static inline int check_eb_access(struct bladerf *dev, uint32_t erase_block, uint32_t count) { if (erase_block >= dev->flash_arch->num_ebs) { log_debug("Invalid erase block: %u\n", erase_block); return BLADERF_ERR_INVAL; } else if (count > dev->flash_arch->num_ebs) { log_debug("Invalid number of erase blocks: %u\n", count); return BLADERF_ERR_INVAL; } else if ((erase_block + count) > dev->flash_arch->num_ebs) { log_debug("Requested operation extends past end of flash: " "eb=%u, count=%u\n", erase_block, count); return BLADERF_ERR_INVAL; } else { return 0; } } static inline int check_page_access(struct bladerf *dev, uint32_t page, uint32_t count) { if (page >= dev->flash_arch->num_pages) { log_debug("Invalid page: %u\n", page); return BLADERF_ERR_INVAL; } else if (count > dev->flash_arch->num_pages) { log_debug("Invalid number of pages: %u\n", count); return BLADERF_ERR_INVAL; } else if ((page + count) > dev->flash_arch->num_pages) { log_debug("Requested operation extends past end of flash: " "page=%u, count=%u\n", page, count); return BLADERF_ERR_INVAL; } else { return 0; } } int spi_flash_erase(struct bladerf *dev, uint32_t erase_block, uint32_t count) { int status = check_eb_access(dev, erase_block, count); if (status == 0) { status = dev->backend->erase_flash_blocks(dev, erase_block, count); } return status; } int spi_flash_read(struct bladerf *dev, uint8_t *buf, uint32_t page, uint32_t count) { int status = check_page_access(dev, page, count); if (status == 0) { status = dev->backend->read_flash_pages(dev, buf, page, count); } return status;; } int spi_flash_write(struct bladerf *dev, const uint8_t *buf, uint32_t page, uint32_t count) { int status = check_page_access(dev, page, count); if (status == 0) { status = dev->backend->write_flash_pages(dev, buf, page, count); } return status; } int spi_flash_verify(struct bladerf *dev, uint8_t *readback_buf, const uint8_t *expected_buf, uint32_t page, uint32_t count) { int status = 0; size_t i; const size_t len = count * dev->flash_arch->psize_bytes; log_info("Verifying %u pages, starting at page %u\n", count, page); status = spi_flash_read(dev, readback_buf, page, count); if (status < 0) { log_debug("Failed to read from flash: %s\n", bladerf_strerror(status)); return status; } for (i = 0; i < len; i++) { if (expected_buf[i] != readback_buf[i]) { status = BLADERF_ERR_UNEXPECTED; log_info("Flash verification failed at byte %llu. " "Read %02x, expected %02x\n", i, readback_buf[i], expected_buf[i]); break; } } return status; } bladeRF-2024.05/host/libraries/libbladeRF/src/driver/spi_flash.h000066400000000000000000000065551457144405000243260ustar00rootroot00000000000000/** * @file flash.h * * @brief Flash conversion and alignment routines * * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2013 Daniel Gröber * Copyright (C) 2013 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef DRIVER_SPI_FLASH_H_ #define DRIVER_SPI_FLASH_H_ #include #include #include /** * Erase regions of SPI flash * * @param dev Device handle * @param[in] erase_block Erase block to start erasing at * @param[in] count Number of blocks to erase. * * @return 0 on success, or BLADERF_ERR_INVAL on an invalid `erase_block` or * `count` value, or a value from \ref RETCODES list on other failures */ int spi_flash_erase(struct bladerf *dev, uint32_t erase_block, uint32_t count); /** * Read data from flash * * @param dev Device handle * @param[out] buf Buffer to read data into. Must be `count` * * flash-page-size bytes or larger. * @param[in] page Page to begin reading from * @param[in] count Number of pages to read * * @return 0 on success, or BLADERF_ERR_INVAL on an invalid `page` or `count` * value, or a value from \ref RETCODES list on other failures. */ int spi_flash_read(struct bladerf *dev, uint8_t *buf, uint32_t page, uint32_t count); /** * Verify data in flash * * @param dev Device handle * @param[out] readback_buf Buffer to read data into. Must be `count` * * flash-page-size bytes or larger. * @param[in] expected_buf Expected contents of buffer * @param[in] page Page to begin reading from * @param[in] count Number of pages to read * * @return 0 on success, or BLADERF_ERR_INVAL on an invalid `page` or `count` * value, or a value from \ref RETCODES list on other failures. */ int spi_flash_verify(struct bladerf *dev, uint8_t *readback_buf, const uint8_t *expected_buf, uint32_t page, uint32_t count); /** * Write data to flash * * @param dev Device handle * @param[in] buf Data to write to flash * @param[in] page Page to begin writing at * @param[in] count Number of pages to write * * @return 0 on success, or BLADERF_ERR_INVAL on an invalid `page` or `count` * value, or a value from \ref RETCODES list on other failures. */ int spi_flash_write(struct bladerf *dev, const uint8_t *buf, uint32_t page, uint32_t count); #endif bladeRF-2024.05/host/libraries/libbladeRF/src/expansion/000077500000000000000000000000001457144405000227035ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF/src/expansion/xb100.c000066400000000000000000000052141457144405000237030ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include "xb100.h" #include "log.h" int xb100_attach(struct bladerf *dev) { return 0; } void xb100_detach(struct bladerf *dev) { } int xb100_enable(struct bladerf *dev, bool enable) { int status = 0; const uint32_t mask = BLADERF_XB100_LED_D1 | BLADERF_XB100_LED_D2 | BLADERF_XB100_LED_D3 | BLADERF_XB100_LED_D4 | BLADERF_XB100_LED_D5 | BLADERF_XB100_LED_D6 | BLADERF_XB100_LED_D7 | BLADERF_XB100_LED_D8 | BLADERF_XB100_TLED_RED | BLADERF_XB100_TLED_GREEN | BLADERF_XB100_TLED_BLUE; const uint32_t outputs = mask; const uint32_t default_values = mask; if (enable) { status = dev->backend->expansion_gpio_dir_write(dev, mask, outputs); if (status == 0) { status = dev->backend->expansion_gpio_write(dev, mask, default_values); } } return status; } int xb100_init(struct bladerf *dev) { return 0; } int xb100_gpio_read(struct bladerf *dev, uint32_t *val) { return dev->backend->expansion_gpio_read(dev, val); } int xb100_gpio_write(struct bladerf *dev, uint32_t val) { return dev->backend->expansion_gpio_write(dev, 0xffffffff, val); } int xb100_gpio_masked_write(struct bladerf *dev, uint32_t mask, uint32_t val) { return dev->backend->expansion_gpio_write(dev, mask, val); } int xb100_gpio_dir_read(struct bladerf *dev, uint32_t *val) { return dev->backend->expansion_gpio_dir_read(dev, val); } int xb100_gpio_dir_write(struct bladerf *dev, uint32_t val) { return xb100_gpio_dir_masked_write(dev, 0xffffffff, val); } int xb100_gpio_dir_masked_write(struct bladerf *dev, uint32_t mask, uint32_t val) { return dev->backend->expansion_gpio_dir_write(dev, mask, val); } bladeRF-2024.05/host/libraries/libbladeRF/src/expansion/xb100.h000066400000000000000000000032161457144405000237100ustar00rootroot00000000000000/** * @file xb.h * * @brief XB-100 support * * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef EXPANSION_XB100_H_ #define EXPANSION_XB100_H_ #include #include #include "board/board.h" int xb100_attach(struct bladerf *dev); void xb100_detach(struct bladerf *dev); int xb100_enable(struct bladerf *dev, bool enable); int xb100_init(struct bladerf *dev); int xb100_gpio_read(struct bladerf *dev, uint32_t *val); int xb100_gpio_write(struct bladerf *dev, uint32_t val); int xb100_gpio_masked_write(struct bladerf *dev, uint32_t mask, uint32_t val); int xb100_gpio_dir_read(struct bladerf *dev, uint32_t *val); int xb100_gpio_dir_write(struct bladerf *dev, uint32_t val); int xb100_gpio_dir_masked_write(struct bladerf *dev, uint32_t mask, uint32_t val); #endif bladeRF-2024.05/host/libraries/libbladeRF/src/expansion/xb200.c000066400000000000000000000346431457144405000237140ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include "xb200.h" #include "driver/si5338.h" #include "lms.h" #include "rel_assert.h" #include "log.h" #define BLADERF_XB_CONFIG_TX_PATH_MIX 0x04 #define BLADERF_XB_CONFIG_TX_PATH_BYPASS 0x08 #define BLADERF_XB_CONFIG_TX_BYPASS 0x04 #define BLADERF_XB_CONFIG_TX_BYPASS_N 0x08 #define BLADERF_XB_CONFIG_TX_BYPASS_MASK 0x0C #define BLADERF_XB_CONFIG_RX_PATH_MIX 0x10 #define BLADERF_XB_CONFIG_RX_PATH_BYPASS 0x20 #define BLADERF_XB_CONFIG_RX_BYPASS 0x10 #define BLADERF_XB_CONFIG_RX_BYPASS_N 0x20 #define BLADERF_XB_CONFIG_RX_BYPASS_MASK 0x30 #define BLADERF_XB_RF_ON 0x0800 #define BLADERF_XB_TX_ENABLE 0x1000 #define BLADERF_XB_RX_ENABLE 0x2000 #define BLADERF_XB_TX_RF_SW2 0x04000000 #define BLADERF_XB_TX_RF_SW1 0x08000000 #define BLADERF_XB_TX_MASK 0x0C000000 #define BLADERF_XB_TX_SHIFT 26 #define BLADERF_XB_RX_RF_SW2 0x10000000 #define BLADERF_XB_RX_RF_SW1 0x20000000 #define BLADERF_XB_RX_MASK 0x30000000 #define BLADERF_XB_RX_SHIFT 28 struct xb200_xb_data { /* Track filterbank selection for RX and TX auto-selection */ bladerf_xb200_filter auto_filter[2]; }; int xb200_attach(struct bladerf *dev) { struct xb200_xb_data *xb_data; int status = 0; uint32_t val; uint8_t val8; unsigned int muxout = 6; const char *mux_lut[] = { "THREE-STATE OUTPUT", "DVdd", "DGND", "R COUNTER OUTPUT", "N DIVIDER OUTPUT", "ANALOG LOCK DETECT", "DIGITAL LOCK DETECT", "RESERVED" }; xb_data = calloc(1, sizeof(struct xb200_xb_data)); if (xb_data == NULL) { return BLADERF_ERR_MEM; } xb_data->auto_filter[BLADERF_CHANNEL_RX(0)] = -1; xb_data->auto_filter[BLADERF_CHANNEL_TX(0)] = -1; dev->xb_data = xb_data; log_debug(" Attaching transverter board\n"); status = dev->backend->si5338_read(dev, 39, &val8); if (status < 0) { goto error; } val8 |= 2; if ((status = dev->backend->si5338_write(dev, 39, val8))) { goto error; } if ((status = dev->backend->si5338_write(dev, 34, 0x22))) { goto error; } if ((status = dev->backend->config_gpio_read(dev, &val))) { goto error; } val |= 0x80000000; if ((status = dev->backend->config_gpio_write(dev, val))) { goto error; } if ((status = dev->backend->expansion_gpio_read(dev, &val))) { goto error; } if ((status = dev->backend->expansion_gpio_dir_write(dev, 0xffffffff, 0x3C00383E))) { goto error; } if ((status = dev->backend->expansion_gpio_write(dev, 0xffffffff, 0x800))) { goto error; } // Load ADF4351 registers via SPI // Refer to ADF4351 reference manual for register set // The LO is set to a Int-N 1248MHz +3dBm tone // Registers are written in order from 5 downto 0 if ((status = dev->backend->xb_spi(dev, 0x580005))) { goto error; } if ((status = dev->backend->xb_spi(dev, 0x99A16C))) { goto error; } if ((status = dev->backend->xb_spi(dev, 0xC004B3))) { goto error; } log_debug(" MUXOUT: %s\n", mux_lut[muxout]); if ((status = dev->backend->xb_spi(dev, 0x60008E42 | (1 << 8) | (muxout << 26)))) { goto error; } if ((status = dev->backend->xb_spi(dev, 0x08008011))) { goto error; } if ((status = dev->backend->xb_spi(dev, 0x00410000))) { goto error; } status = dev->backend->expansion_gpio_read(dev, &val); if (!status && (val & 0x1)) log_debug(" MUXOUT Bit set: OK\n"); else { log_debug(" MUXOUT Bit not set: FAIL\n"); } if ((status = dev->backend->expansion_gpio_write(dev, 0xffffffff, 0x3C000800))) { goto error; } return 0; error: free(dev->xb_data); dev->xb_data = NULL; return status; } void xb200_detach(struct bladerf *dev) { if (dev->xb_data) { free(dev->xb_data); dev->xb_data = NULL; } } int xb200_enable(struct bladerf *dev, bool enable) { int status; uint32_t val, orig; status = dev->backend->expansion_gpio_read(dev, &orig); if (status) return status; val = orig; if (enable) val |= BLADERF_XB_RF_ON; else val &= ~BLADERF_XB_RF_ON; if (status || (val == orig)) return status; return dev->backend->expansion_gpio_write(dev, 0xffffffff, val); } int xb200_init(struct bladerf *dev) { int status; log_verbose( "Setting RX path\n" ); status = xb200_set_path(dev, BLADERF_CHANNEL_RX(0), BLADERF_XB200_BYPASS); if (status != 0) { return status; } log_verbose( "Setting TX path\n" ); status = xb200_set_path(dev, BLADERF_CHANNEL_TX(0), BLADERF_XB200_BYPASS); if (status != 0) { return status; } log_verbose( "Setting RX filter\n" ); status = xb200_set_filterbank(dev, BLADERF_CHANNEL_RX(0), BLADERF_XB200_AUTO_1DB); if (status != 0) { return status; } log_verbose( "Setting TX filter\n" ); status = xb200_set_filterbank(dev, BLADERF_CHANNEL_TX(0), BLADERF_XB200_AUTO_1DB); if (status != 0) { return status; } return 0; } /** * Validate XB-200 filter selection * * @param[in] f Filter supplied by API user. * * @return 0 for a valid enumeration value, BLADERF_ERR_INVAL otherwise. */ static int check_xb200_filter(bladerf_xb200_filter f) { int status; switch (f) { case BLADERF_XB200_50M: case BLADERF_XB200_144M: case BLADERF_XB200_222M: case BLADERF_XB200_CUSTOM: case BLADERF_XB200_AUTO_3DB: case BLADERF_XB200_AUTO_1DB: status = 0; break; default: log_debug("Invalid XB200 filter: %d\n", f); status = BLADERF_ERR_INVAL; break; } return status; } /** * Validate XB-200 path selection * * @param[in] p Path supplied by API user. * * @return 0 for a valid enumeration value, BLADERF_ERR_INVAL otherwise. */ static int check_xb200_path(bladerf_xb200_path p) { int status; switch (p) { case BLADERF_XB200_BYPASS: case BLADERF_XB200_MIX: status = 0; break; default: status = BLADERF_ERR_INVAL; log_debug("Invalid XB200 path: %d\n", p); break; } return status; } int xb200_get_filterbank(struct bladerf *dev, bladerf_channel ch, bladerf_xb200_filter *filter) { int status; uint32_t val; unsigned int shift; if (ch != BLADERF_CHANNEL_RX(0) && ch != BLADERF_CHANNEL_TX(0)) return BLADERF_ERR_INVAL; status = dev->backend->expansion_gpio_read(dev, &val); if (status != 0) { return status; } if (ch == BLADERF_CHANNEL_RX(0)) { shift = BLADERF_XB_RX_SHIFT; } else { shift = BLADERF_XB_TX_SHIFT; } *filter = (val >> shift) & 3; status = check_xb200_filter(*filter); if (status != 0) { log_debug("Read back invalid GPIO state: 0x%08x\n", val); status = BLADERF_ERR_UNEXPECTED; } return status; } static int set_filterbank_mux(struct bladerf *dev, bladerf_channel ch, bladerf_xb200_filter filter) { int status; uint32_t orig, val, mask; unsigned int shift; static const char *filters[] = { "50M", "144M", "222M", "custom" }; assert(filter >= 0); assert(filter < ARRAY_SIZE(filters)); if (ch == BLADERF_CHANNEL_RX(0)) { mask = BLADERF_XB_RX_MASK; shift = BLADERF_XB_RX_SHIFT; } else { mask = BLADERF_XB_TX_MASK; shift = BLADERF_XB_TX_SHIFT; } status = dev->backend->expansion_gpio_read(dev, &orig); if (status != 0) { return status; } val = orig & ~mask; val |= filter << shift; if (orig != val) { log_debug("Engaging %s band XB-200 %s filter\n", filters[filter], mask == BLADERF_XB_TX_MASK ? "TX" : "RX"); status = dev->backend->expansion_gpio_write(dev, 0xffffffff, val); if (status != 0) { return status; } } return 0; } int xb200_set_filterbank(struct bladerf *dev, bladerf_channel ch, bladerf_xb200_filter filter) { struct xb200_xb_data *xb_data = dev->xb_data; uint64_t frequency; int status = 0; if (ch != BLADERF_CHANNEL_RX(0) && ch != BLADERF_CHANNEL_TX(0)) { return BLADERF_ERR_INVAL; } if (NULL == xb_data) { log_error("xb_data is null (do you need to xb200_attach?)\n"); return BLADERF_ERR_INVAL; } status = check_xb200_filter(filter); if (status != 0) { return status; } if (filter == BLADERF_XB200_AUTO_1DB || filter == BLADERF_XB200_AUTO_3DB) { /* Save which soft auto filter mode we're in */ xb_data->auto_filter[ch] = filter; status = dev->board->get_frequency(dev, ch, &frequency); if (status == 0) { status = xb200_auto_filter_selection(dev, ch, frequency); } } else { /* Invalidate the soft auto filter mode entry */ xb_data->auto_filter[ch] = -1; status = set_filterbank_mux(dev, ch, filter); } return status; } int xb200_auto_filter_selection(struct bladerf *dev, bladerf_channel ch, uint64_t frequency) { struct xb200_xb_data *xb_data = dev->xb_data; bladerf_xb200_filter filter; int status = 0; if (frequency >= 300000000u) { return 0; } if (ch != BLADERF_CHANNEL_RX(0) && ch != BLADERF_CHANNEL_TX(0)) { return BLADERF_ERR_INVAL; } if (NULL == xb_data) { log_error("xb_data is null (do you need to xb200_attach?)\n"); return BLADERF_ERR_INVAL; } if (xb_data->auto_filter[ch] == BLADERF_XB200_AUTO_1DB) { if (37774405 <= frequency && frequency <= 59535436) { filter = BLADERF_XB200_50M; } else if (128326173 <= frequency && frequency <= 166711171) { filter = BLADERF_XB200_144M; } else if (187593160 <= frequency && frequency <= 245346403) { filter = BLADERF_XB200_222M; } else { filter = BLADERF_XB200_CUSTOM; } status = set_filterbank_mux(dev, ch, filter); } else if (xb_data->auto_filter[ch] == BLADERF_XB200_AUTO_3DB) { if (34782924 <= frequency && frequency <= 61899260) { filter = BLADERF_XB200_50M; } else if (121956957 <= frequency && frequency <= 178444099) { filter = BLADERF_XB200_144M; } else if (177522675 <= frequency && frequency <= 260140935) { filter = BLADERF_XB200_222M; } else { filter = BLADERF_XB200_CUSTOM; } status = set_filterbank_mux(dev, ch, filter); } return status; } #define LMS_RX_SWAP 0x40 #define LMS_TX_SWAP 0x08 int xb200_set_path(struct bladerf *dev, bladerf_channel ch, bladerf_xb200_path path) { int status; uint32_t val; uint32_t mask; uint8_t lval, lorig = 0; if (ch != BLADERF_CHANNEL_RX(0) && ch != BLADERF_CHANNEL_TX(0)) return BLADERF_ERR_INVAL; status = check_xb200_path(path); if (status != 0) { return status; } status = LMS_READ(dev, 0x5A, &lorig); if (status != 0) { return status; } lval = lorig; if (path == BLADERF_XB200_MIX) { lval |= (ch == BLADERF_CHANNEL_RX(0)) ? LMS_RX_SWAP : LMS_TX_SWAP; } else { lval &= ~((ch == BLADERF_CHANNEL_RX(0)) ? LMS_RX_SWAP : LMS_TX_SWAP); } status = LMS_WRITE(dev, 0x5A, lval); if (status != 0) { return status; } status = dev->backend->expansion_gpio_read(dev, &val); if (status != 0) { return status; } status = dev->backend->expansion_gpio_read(dev, &val); if (status != 0) { return status; } if (!(val & BLADERF_XB_RF_ON)) { status = xb200_attach(dev); if (status != 0) { return status; } } if (ch == BLADERF_CHANNEL_RX(0)) { mask = (BLADERF_XB_CONFIG_RX_BYPASS_MASK | BLADERF_XB_RX_ENABLE); } else { mask = (BLADERF_XB_CONFIG_TX_BYPASS_MASK | BLADERF_XB_TX_ENABLE); } val |= BLADERF_XB_RF_ON; val &= ~mask; if (ch == BLADERF_CHANNEL_RX(0)) { if (path == BLADERF_XB200_MIX) { val |= (BLADERF_XB_RX_ENABLE | BLADERF_XB_CONFIG_RX_PATH_MIX); } else { val |= BLADERF_XB_CONFIG_RX_PATH_BYPASS; } } else { if (path == BLADERF_XB200_MIX) { val |= (BLADERF_XB_TX_ENABLE | BLADERF_XB_CONFIG_TX_PATH_MIX); } else { val |= BLADERF_XB_CONFIG_TX_PATH_BYPASS; } } return dev->backend->expansion_gpio_write(dev, 0xffffffff, val); } int xb200_get_path(struct bladerf *dev, bladerf_channel ch, bladerf_xb200_path *path) { int status; uint32_t val; if (ch != BLADERF_CHANNEL_RX(0) && ch != BLADERF_CHANNEL_TX(0)) return BLADERF_ERR_INVAL; status = dev->backend->expansion_gpio_read(dev, &val); if (status != 0) { return status; } if (ch == BLADERF_CHANNEL_RX(0)) { *path = (val & BLADERF_XB_CONFIG_RX_BYPASS) ? BLADERF_XB200_MIX : BLADERF_XB200_BYPASS; } else if (ch == BLADERF_CHANNEL_TX(0)) { *path = (val & BLADERF_XB_CONFIG_TX_BYPASS) ? BLADERF_XB200_MIX : BLADERF_XB200_BYPASS; } return 0; } bladeRF-2024.05/host/libraries/libbladeRF/src/expansion/xb200.h000066400000000000000000000061701457144405000237130ustar00rootroot00000000000000/** * @file xb.h * * @brief XB-200 support * * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef EXPANSION_XB200_H_ #define EXPANSION_XB200_H_ #include #include #include "board/board.h" int xb200_attach(struct bladerf *dev); void xb200_detach(struct bladerf *dev); int xb200_enable(struct bladerf *dev, bool enable); int xb200_init(struct bladerf *dev); /** * Select an XB-200 filterbank * * @param dev Device handle * @param[in] ch Channel * @param[in] filter XB200 filterbank * * @return 0 on success, BLADERF_ERR_* value on failure */ int xb200_set_filterbank(struct bladerf *dev, bladerf_channel ch, bladerf_xb200_filter filter); /** * Select an appropriate filterbank, based upon the specified frequency * * @param dev Device handle * @param[in] ch Channel * @param[in] frequency Frequency * * @return 0 on success, BLADERF_ERR_* value on failure */ int xb200_auto_filter_selection(struct bladerf *dev, bladerf_channel ch, uint64_t frequency); /** * Get the current selected XB-200 filterbank * * @param dev Device handle * @param[in] ch Channel * @param[out] filter Pointer to filterbank, only updated if return value * is 0. * * @return 0 on success, BLADERF_ERR_* value on failure */ int xb200_get_filterbank(struct bladerf *dev, bladerf_channel ch, bladerf_xb200_filter *filter); /** * Configure the XB-200 signal path * * @param dev Device handle * @param[in] ch Channel * @param[in] path Desired XB-200 signal path * * @return 0 on success, BLADERF_ERR_* value on failure */ int xb200_set_path(struct bladerf *dev, bladerf_channel ch, bladerf_xb200_path path); /** * Get the current XB-200 signal path * * @param dev Device handle * @param[in] ch Channel * @param[out] path Pointer to XB200 signal path * * @return 0 on success, value from \ref RETCODES list on failure */ int xb200_get_path(struct bladerf *dev, bladerf_channel ch, bladerf_xb200_path *path); #endif bladeRF-2024.05/host/libraries/libbladeRF/src/expansion/xb300.c000066400000000000000000000166041457144405000237120ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include "xb300.h" #include "log.h" #define BLADERF_XB_AUX_EN 0x000002 #define BLADERF_XB_TX_LED 0x000010 #define BLADERF_XB_RX_LED 0x000020 #define BLADERF_XB_TRX_TXn 0x000040 #define BLADERF_XB_TRX_RXn 0x000080 #define BLADERF_XB_TRX_MASK 0x0000c0 #define BLADERF_XB_PA_EN 0x000200 #define BLADERF_XB_LNA_ENn 0x000400 #define BLADERF_XB_CS 0x010000 #define BLADERF_XB_CSEL 0x040000 #define BLADERF_XB_DOUT 0x100000 #define BLADERF_XB_SCLK 0x400000 int xb300_attach(struct bladerf *dev) { int status; uint32_t val; val = BLADERF_XB_TX_LED | BLADERF_XB_RX_LED | BLADERF_XB_TRX_MASK; val |= BLADERF_XB_PA_EN | BLADERF_XB_LNA_ENn; val |= BLADERF_XB_CSEL | BLADERF_XB_SCLK | BLADERF_XB_CS; if ((status = dev->backend->expansion_gpio_dir_write(dev, 0xffffffff, val))) return status; val = BLADERF_XB_CS | BLADERF_XB_LNA_ENn; if ((status = dev->backend->expansion_gpio_write(dev, 0xffffffff, val))) return status; return status; } void xb300_detach(struct bladerf *dev) { } int xb300_enable(struct bladerf *dev, bool enable) { int status; uint32_t val; float pwr; val = BLADERF_XB_CS | BLADERF_XB_CSEL | BLADERF_XB_LNA_ENn; if ((status = dev->backend->expansion_gpio_write(dev, 0xffffffff, val))) return status; status = xb300_get_output_power(dev, &pwr); return status; } int xb300_init(struct bladerf *dev) { int status; log_verbose( "Setting TRX path to TX\n" ); status = xb300_set_trx(dev, BLADERF_XB300_TRX_TX); if (status != 0) { return status; } return 0; } int xb300_set_trx(struct bladerf *dev, bladerf_xb300_trx trx) { int status; uint32_t val; status = dev->backend->expansion_gpio_read(dev, &val); if (status != 0) { return status; } val &= ~(BLADERF_XB_TRX_MASK); switch (trx) { case BLADERF_XB300_TRX_RX: val |= BLADERF_XB_TRX_RXn; break; case BLADERF_XB300_TRX_TX: val |= BLADERF_XB_TRX_TXn; break; case BLADERF_XB300_TRX_UNSET: break; default: log_debug("Invalid TRX option: %d\n", trx); return BLADERF_ERR_INVAL; } status = dev->backend->expansion_gpio_write(dev, 0xffffffff, val); return status; } int xb300_get_trx(struct bladerf *dev, bladerf_xb300_trx *trx) { int status; uint32_t val; *trx = BLADERF_XB300_TRX_INVAL; status = dev->backend->expansion_gpio_read(dev, &val); if (status != 0) { return status; } val &= BLADERF_XB_TRX_MASK; if (!val) { *trx = BLADERF_XB300_TRX_UNSET; } else { *trx = (val & BLADERF_XB_TRX_RXn) ? BLADERF_XB300_TRX_RX : BLADERF_XB300_TRX_TX; } /* Sanity check */ switch (*trx) { case BLADERF_XB300_TRX_TX: case BLADERF_XB300_TRX_RX: case BLADERF_XB300_TRX_UNSET: break; default: log_debug("Read back invalid TRX setting value: %d\n", *trx); status = BLADERF_ERR_INVAL; } return status; } int xb300_set_amplifier_enable(struct bladerf *dev, bladerf_xb300_amplifier amp, bool enable) { int status; uint32_t val; status = dev->backend->expansion_gpio_read(dev, &val); if (status != 0) { return status; } switch (amp) { case BLADERF_XB300_AMP_PA: if (enable) { val |= BLADERF_XB_TX_LED; val |= BLADERF_XB_PA_EN; } else { val &= ~BLADERF_XB_TX_LED; val &= ~BLADERF_XB_PA_EN; } break; case BLADERF_XB300_AMP_LNA: if (enable) { val |= BLADERF_XB_RX_LED; val &= ~BLADERF_XB_LNA_ENn; } else { val &= ~BLADERF_XB_RX_LED; val |= BLADERF_XB_LNA_ENn; } break; case BLADERF_XB300_AMP_PA_AUX: if (enable) { val |= BLADERF_XB_AUX_EN; } else { val &= ~BLADERF_XB_AUX_EN; } break; default: log_debug("Invalid amplifier selection: %d\n", amp); return BLADERF_ERR_INVAL; } status = dev->backend->expansion_gpio_write(dev, 0xffffffff, val); return status; } int xb300_get_amplifier_enable(struct bladerf *dev, bladerf_xb300_amplifier amp, bool *enable) { int status; uint32_t val; *enable = false; status = dev->backend->expansion_gpio_read(dev, &val); if (status != 0) { return status; } switch (amp) { case BLADERF_XB300_AMP_PA: *enable = (val & BLADERF_XB_PA_EN); break; case BLADERF_XB300_AMP_LNA: *enable = !(val & BLADERF_XB_LNA_ENn); break; case BLADERF_XB300_AMP_PA_AUX: *enable = (val & BLADERF_XB_AUX_EN); break; default: log_debug("Read back invalid amplifier setting: %d\n", amp); status = BLADERF_ERR_INVAL; } return status; } int xb300_get_output_power(struct bladerf *dev, float *pwr) { uint32_t val, rval; int i; int ret = 0; int status; float volt, volt2, volt3, volt4; status = dev->backend->expansion_gpio_read(dev, &val); if (status) { return status; } val &= ~(BLADERF_XB_CS | BLADERF_XB_SCLK | BLADERF_XB_CSEL); status = dev->backend->expansion_gpio_write(dev, 0xffffffff, BLADERF_XB_SCLK | val); if (status) { return status; } status = dev->backend->expansion_gpio_write(dev, 0xffffffff, BLADERF_XB_CS | BLADERF_XB_SCLK | val); if (status) { return status; } for (i = 1; i <= 14; i++) { status = dev->backend->expansion_gpio_write(dev, 0xffffffff, val); if (status) { return status; } status = dev->backend->expansion_gpio_write(dev, 0xffffffff, BLADERF_XB_SCLK | val); if (status) { return status; } status = dev->backend->expansion_gpio_read(dev, &rval); if (status) { return status; } if (i >= 2 && i <= 11) { ret |= (!!(rval & BLADERF_XB_DOUT)) << (11 - i); } } volt = (1.8f/1024.0f) * ret; volt2 = volt * volt; volt3 = volt2 * volt; volt4 = volt3 * volt; *pwr = -503.933f * volt4 + 1409.489f * volt3 - 1487.84f * volt2 + 722.9793f * volt - 114.7529f; return 0; } bladeRF-2024.05/host/libraries/libbladeRF/src/expansion/xb300.h000066400000000000000000000054211457144405000237120ustar00rootroot00000000000000/** * @file xb.h * * @brief XB-300 support * * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef EXPANSION_XB300_H_ #define EXPANSION_XB300_H_ #include #include #include "board/board.h" int xb300_attach(struct bladerf *dev); void xb300_detach(struct bladerf *dev); int xb300_enable(struct bladerf *dev, bool enable); int xb300_init(struct bladerf *dev); /** * Configure the XB-300 TRX path * * @param dev Device handle * @param[in] trx Desired XB-300 TRX setting * * @return 0 on success, BLADERF_ERR_* value on failure */ int xb300_set_trx(struct bladerf *dev, bladerf_xb300_trx trx); /** * Get the current XB-300 signal path * * @param dev Device handle * @param[out] trx XB300 TRX antenna setting * * @return 0 on success, BLADERF_ERR_* value on failure */ int xb300_get_trx(struct bladerf *dev, bladerf_xb300_trx *trx); /** * Enable or disable selected XB-300 amplifier * * @param dev Device handle * @param[in] amp XB-300 amplifier * @param[in] enable Set true to enable or false to disable * * @return 0 on success, BLADERF_ERR_* value on failure */ int xb300_set_amplifier_enable(struct bladerf *dev, bladerf_xb300_amplifier amp, bool enable); /** * Get state of selected XB-300 amplifier * * @param dev Device handle * @param[in] amp XB-300 amplifier * @param[out] enable Set true to enable or false to disable * * @return 0 on success, BLADERF_ERR_* value on failure */ int xb300_get_amplifier_enable(struct bladerf *dev, bladerf_xb300_amplifier amp, bool *enable); /** * Get current PA PDET output power in dBm * * @param dev Device handle * @param[out] val Output power in dBm * * @return 0 on success, value from \ref RETCODES list on failure */ int xb300_get_output_power(struct bladerf *dev, float *val); #endif bladeRF-2024.05/host/libraries/libbladeRF/src/helpers/000077500000000000000000000000001457144405000223415ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF/src/helpers/configfile.c000066400000000000000000000261261457144405000246210ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2013-2018 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include "conversions.h" #include "helpers/file.h" #include "log.h" #include "parse.h" /******************************************************************************/ /* Config file stuff */ /******************************************************************************/ const struct numeric_suffix freq_suffixes[] = { { "G", 1000 * 1000 * 1000 }, { "GHz", 1000 * 1000 * 1000 }, { "M", 1000 * 1000 }, { "MHz", 1000 * 1000 }, { "k", 1000 }, { "kHz", 1000 } }; #define NUM_FREQ_SUFFIXES (sizeof(freq_suffixes) / sizeof(freq_suffixes[0])) #define MAX(a, b) (a > b ? a : b) #define MIN(a, b) (a < b ? a : b) static int apply_config_options(struct bladerf *dev, struct config_options opt) { int status; bladerf_frequency freq; bladerf_bandwidth bw; uint32_t val; bool ok; bladerf_gain_mode gain_mode; const struct bladerf_range *rx_range = NULL; const struct bladerf_range *tx_range = NULL; bladerf_sampling sampling_mode; bladerf_vctcxo_tamer_mode tamer_mode = BLADERF_VCTCXO_TAMER_INVALID; struct bladerf_rational_rate rate, actual; status = BLADERF_ERR_INVAL; if (!strcasecmp(opt.key, "biastee_tx")) { bool enable = false; status = str2bool(opt.value, &enable); if (status < 0) { return BLADERF_ERR_INVAL; } status = bladerf_set_bias_tee(dev, BLADERF_CHANNEL_TX(0), enable); if (status < 0) { return status; } } else if (!strcasecmp(opt.key, "biastee_rx")) { bool enable = false; status = str2bool(opt.value, &enable); if (status < 0) { return BLADERF_ERR_INVAL; } status = bladerf_set_bias_tee(dev, BLADERF_CHANNEL_RX(0), enable); if (status < 0) { return status; } } else if (!strcasecmp(opt.key, "fpga")) { status = bladerf_load_fpga(dev, opt.value); if (status < 0) { log_warning("Config line %d: could not load FPGA from `%s'\n", opt.lineno, opt.value); } return status; } else if (!strcasecmp(opt.key, "frequency")) { status = bladerf_get_frequency_range(dev, BLADERF_CHANNEL_RX(0), &rx_range); if (status < 0) { return status; } status = bladerf_get_frequency_range(dev, BLADERF_CHANNEL_TX(0), &tx_range); if (status < 0) { return status; } freq = str2uint64_suffix(opt.value, MAX(rx_range->min, tx_range->min), MIN(rx_range->max, tx_range->max), freq_suffixes, NUM_FREQ_SUFFIXES, &ok); if (!ok) { return BLADERF_ERR_INVAL; } status = bladerf_set_frequency(dev, BLADERF_CHANNEL_RX(0), freq); if (status < 0) { return status; } status = bladerf_set_frequency(dev, BLADERF_CHANNEL_TX(0), freq); } else if (!strcasecmp(opt.key, "samplerate")) { status = bladerf_get_sample_rate_range(dev, BLADERF_CHANNEL_RX(0), &rx_range); if (status < 0) { return status; } status = bladerf_get_sample_rate_range(dev, BLADERF_CHANNEL_TX(0), &tx_range); if (status < 0) { return status; } freq = str2uint64_suffix(opt.value, MAX(rx_range->min, tx_range->min), MIN(rx_range->max, tx_range->max), freq_suffixes, NUM_FREQ_SUFFIXES, &ok); if (!ok) { return BLADERF_ERR_INVAL; } rate.integer = freq; rate.num = 0; rate.den = 1; status = bladerf_set_rational_sample_rate(dev, BLADERF_CHANNEL_RX(0), &rate, &actual); if (status < 0) { return status; } status = bladerf_set_rational_sample_rate(dev, BLADERF_CHANNEL_TX(0), &rate, &actual); } else if (!strcasecmp(opt.key, "bandwidth")) { status = bladerf_get_bandwidth_range(dev, BLADERF_CHANNEL_RX(0), &rx_range); if (status < 0) { return status; } status = bladerf_get_bandwidth_range(dev, BLADERF_CHANNEL_TX(0), &tx_range); if (status < 0) { return status; } if (MIN(rx_range->max, tx_range->max) >= UINT32_MAX) { return BLADERF_ERR_INVAL; } bw = str2uint_suffix( opt.value, (bladerf_bandwidth)MAX(rx_range->min, tx_range->min), (bladerf_bandwidth)MIN(rx_range->max, tx_range->max), freq_suffixes, NUM_FREQ_SUFFIXES, &ok); if (!ok) { return BLADERF_ERR_INVAL; } status = bladerf_set_bandwidth(dev, BLADERF_CHANNEL_RX(0), bw, NULL); if (status < 0) { return status; } status = bladerf_set_bandwidth(dev, BLADERF_CHANNEL_TX(0), bw, NULL); } else if (!strcasecmp(opt.key, "agc")) { bool agcval = false; status = str2bool(opt.value, &agcval); if (status != 0) { return BLADERF_ERR_INVAL; } gain_mode = agcval ? BLADERF_GAIN_AUTOMATIC : BLADERF_GAIN_MANUAL; status = bladerf_set_gain_mode(dev, BLADERF_CHANNEL_RX(0), gain_mode); } else if (!strcasecmp(opt.key, "gpio")) { val = str2uint(opt.key, 0, -1, &ok); if (!ok) { return BLADERF_ERR_INVAL; } status = bladerf_config_gpio_write(dev, val); } else if (!strcasecmp(opt.key, "sampling")) { if (!strcasecmp(opt.value, "internal")) { sampling_mode = BLADERF_SAMPLING_INTERNAL; } else if (!strcasecmp(opt.value, "external")) { sampling_mode = BLADERF_SAMPLING_EXTERNAL; } else { return BLADERF_ERR_INVAL; } status = bladerf_set_sampling(dev, sampling_mode); } else if (!strcasecmp(opt.key, "trimdac")) { val = str2uint(opt.value, 0, -1, &ok); if (!ok) { return BLADERF_ERR_INVAL; } status = bladerf_dac_write(dev, val); } else if (!strcasecmp(opt.key, "vctcxo_tamer")) { if (!strcasecmp(opt.value, "disabled") || !strcasecmp(opt.value, "off")) { tamer_mode = BLADERF_VCTCXO_TAMER_DISABLED; } else if (!strcasecmp(opt.value, "1PPS") || !strcasecmp(opt.value, "1 PPS")) { tamer_mode = BLADERF_VCTCXO_TAMER_1_PPS; } else if (!strcasecmp(opt.value, "10MHZ") || !strcasecmp(opt.value, "10 MHZ")) { tamer_mode = BLADERF_VCTCXO_TAMER_10_MHZ; } else if (!strcasecmp(opt.value, "10M")) { tamer_mode = BLADERF_VCTCXO_TAMER_10_MHZ; } else { return BLADERF_ERR_INVAL; } status = bladerf_set_vctcxo_tamer_mode(dev, tamer_mode); } else if (!strcasecmp(opt.key, "clock_ref")) { bool enable = false; status = str2bool(opt.value, &enable); if (status != 0) { return BLADERF_ERR_INVAL; } status = bladerf_set_pll_enable(dev, enable); } else if (!strcasecmp(opt.key, "refin_freq")) { status = bladerf_get_pll_refclk_range(dev, &rx_range); if (status < 0) { return status; } freq = str2uint64_suffix(opt.value, rx_range->min, rx_range->max, freq_suffixes, NUM_FREQ_SUFFIXES, &ok); if (!ok) { return BLADERF_ERR_INVAL; } status = bladerf_set_pll_refclk(dev, freq); } else if (!strcasecmp(opt.key, "clock_sel")) { bladerf_clock_select clock_sel = CLOCK_SELECT_ONBOARD; if (!strcasecmp(opt.value, "onboard") || !strcasecmp(opt.value, "internal")) { clock_sel = CLOCK_SELECT_ONBOARD; } else if (!strcasecmp(opt.value, "external")) { clock_sel = CLOCK_SELECT_EXTERNAL; } else { return BLADERF_ERR_INVAL; } status = bladerf_set_clock_select(dev, clock_sel); } else if (!strcasecmp(opt.key, "clock_out")) { bool enable = false; status = str2bool(opt.value, &enable); if (status != 0) { return BLADERF_ERR_INVAL; } status = bladerf_set_clock_output(dev, enable); } else { log_warning("Invalid key `%s' on line %d\n", opt.key, opt.lineno); } if (status < 0) log_warning("Error message for option (%s) on line %d:\n%s\n", opt.key, opt.lineno, bladerf_strerror(status)); return status; } int config_load_options_file(struct bladerf *dev) { char *filename = NULL; int status = 0; uint8_t *buf = NULL; size_t buf_size; int optc; int j; struct config_options *optv; filename = file_find("bladeRF.conf"); if (!filename) { filename = file_find("bladerf.conf"); /* A missing file that is optional is not an error */ if (!filename) { return 0; } } status = file_read_buffer(filename, &buf, &buf_size); if (status < 0) { goto out; } optc = str2options(dev, (const char *)buf, buf_size, &optv); if (optc < 0) { status = BLADERF_ERR_INVAL; goto out_buf; } for (j = 0; j < optc; j++) { status = apply_config_options(dev, optv[j]); if (status < 0) { log_warning("Invalid config option `%s' on line %d\n", optv[j].key, optv[j].lineno); /* Some config options will require the FPGA to be loaded, however * this function is called during bladerf_open(). The solution is * to treat BLADERF_ERR_NOT_INIT as a warning and continue. */ if (status == BLADERF_ERR_NOT_INIT) { status = 0; } else { break; } } } free_opts(optv, optc); out_buf: free(buf); out: free(filename); return status; } bladeRF-2024.05/host/libraries/libbladeRF/src/helpers/configfile.h000066400000000000000000000017361457144405000246260ustar00rootroot00000000000000/** * @file configfile.h * * @brief Configuration file support for libbladeRF * * Copyright (C) 2013-2018 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef CONFIGFILE_H_ #define CONFIGFILE_H_ int config_load_options_file(struct bladerf *dev); #endif // CONFIGFILE_H_ bladeRF-2024.05/host/libraries/libbladeRF/src/helpers/file.c000066400000000000000000000323641457144405000234340ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2013-2014 Nuand LLC * Copyright (C) 2013 Daniel Gröber * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include #include #include #include #include #include #include "host_config.h" #include "minmax.h" #include "log.h" #include "rel_assert.h" #include "helpers/file.h" /* Paths to search for bladeRF files */ struct search_path_entries { bool prepend_home; const char *path; }; int file_write(FILE *f, uint8_t *buf, size_t len) { size_t rv; rv = fwrite(buf, 1, len, f); if(rv < len) { log_debug("File write failed: %s\n", strerror(errno)); return BLADERF_ERR_IO; } return 0; } int file_read(FILE *f, char *buf, size_t len) { size_t rv; rv = fread(buf, 1, len, f); if(rv < len) { if(feof(f)) log_debug("Unexpected end of file: %s\n", strerror(errno)); else log_debug("Error reading file: %s\n", strerror(errno)); return BLADERF_ERR_IO; } return 0; } ssize_t file_size(FILE *f) { ssize_t rv = BLADERF_ERR_IO; long int fpos = ftell(f); long len; if(fpos < 0) { log_verbose("ftell failed: %s\n", strerror(errno)); goto out; } if(fseek(f, 0, SEEK_END)) { log_verbose("fseek failed: %s\n", strerror(errno)); goto out; } len = ftell(f); if(len < 0) { log_verbose("ftell failed: %s\n", strerror(errno)); goto out; } else if (len == LONG_MAX) { log_debug("ftell called with a directory?\n"); goto out; } if(fseek(f, fpos, SEEK_SET)) { log_debug("fseek failed: %s\n", strerror(errno)); goto out; } rv = (ssize_t) len; assert(rv == len); out: return rv; } int file_read_buffer(const char *filename, uint8_t **buf_ret, size_t *size_ret) { int status = BLADERF_ERR_UNEXPECTED; FILE *f; uint8_t *buf = NULL; ssize_t len; f = fopen(filename, "rb"); if (!f) { log_error("%s: could not open %s: %s\n", __FUNCTION__, filename, strerror(errno)); switch (errno) { case ENOENT: return BLADERF_ERR_NO_FILE; case EACCES: return BLADERF_ERR_PERMISSION; default: return BLADERF_ERR_IO; } } len = file_size(f); if (len < 0) { status = BLADERF_ERR_IO; goto out; } buf = (uint8_t *)malloc(len); if (!buf) { status = BLADERF_ERR_MEM; goto out; } status = file_read(f, (char *)buf, len); if (status < 0) { goto out; } *buf_ret = buf; *size_ret = len; fclose(f); return 0; out: free(buf); if (f) { fclose(f); } return status; } /* Remove the last entry in a path. This is used to strip the executable name * from a path to get the directory that the executable resides in. */ static size_t strip_last_path_entry(char *buf, char dir_delim) { size_t len = strlen(buf); while (len > 0 && buf[len - 1] != dir_delim) { buf[len - 1] = '\0'; len--; } return len; } #if BLADERF_OS_LINUX || BLADERF_OS_OSX || BLADERF_OS_FREEBSD #define ACCESS_FILE_EXISTS F_OK #define DIR_DELIMETER '/' static const struct search_path_entries search_paths[] = { { false, "" }, { true, "/.config/Nuand/bladeRF/" }, { true, "/.Nuand/bladeRF/" }, /* LIBBLADERF_SEARCH_PATH_PREFIX is defined in the libbladeRF * CMakeLists.txt file. It defaults to ${CMAKE_INSTALL_PREFIX}, but * can be overridden via -DLIBBLADERF_SEARCH_PATH_OVERRIDE */ { false, LIBBLADERF_SEARCH_PREFIX "/etc/Nuand/bladeRF/" }, { false, LIBBLADERF_SEARCH_PREFIX "/share/Nuand/bladeRF/" }, /* These two entries are here for reverse compatibility. * * We failed to prefix ${CMAKE_INSTALL_PREFIX} on these from the beginning, * forcing package maintainers to hard-code one of these locations, * despite having a different ${CMAKE_INSTALL_PREFIX}. * * We'll keep these around for some time as fall-backs, as not to break * existing packaging scripts. */ { false, "/etc/Nuand/bladeRF/" }, { false, "/usr/share/Nuand/bladeRF/" }, }; static inline size_t get_home_dir(char *buf, size_t max_len) { const char *home; home = getenv("HOME"); if (home != NULL && strlen(home) > 0 && strlen(home) < max_len) { strncat(buf, home, max_len); } else { const struct passwd *passwd; const uid_t uid = getuid(); passwd = getpwuid(uid); strncat(buf, passwd->pw_dir, max_len); } return strlen(buf); } static inline size_t get_install_dir(char *buf, size_t max_len) { return 0; } #if BLADERF_OS_LINUX static inline size_t get_binary_dir(char *buf, size_t max_len) { ssize_t result = readlink("/proc/self/exe", buf, max_len); if (result > 0) { return strip_last_path_entry(buf, DIR_DELIMETER); } else { return 0; } } #elif BLADERF_OS_FREEBSD static inline size_t get_binary_dir(char *buf, size_t max_len) { int mib[4]; mib[0] = CTL_KERN; mib[1] = KERN_PROC; mib[2] = KERN_PROC_PATHNAME; mib[3] = -1; ssize_t result = sysctl(mib, 4, buf, &max_len, NULL, 0); if (result > 0) { return strip_last_path_entry(buf, DIR_DELIMETER); } else { return 0; } } #elif BLADERF_OS_OSX #include static inline size_t get_binary_dir(char *buf, size_t max_len) { uint32_t buf_size = max_len; int status = _NSGetExecutablePath(buf, &buf_size); if (status == 0) { return strip_last_path_entry(buf, DIR_DELIMETER); } else { return 0; } } #endif #elif BLADERF_OS_WINDOWS #define ACCESS_FILE_EXISTS 0 #define DIR_DELIMETER '\\' #include static const struct search_path_entries search_paths[] = { { false, "" }, { true, "/Nuand/bladeRF/" }, }; static inline size_t get_home_dir(char *buf, size_t max_len) { /* Explicitly link to a runtime DLL to get SHGetKnownFolderPath. * This deals with the case where we might not be able to staticly * link it at build time, e.g. mingw32. * * http://msdn.microsoft.com/en-us/library/784bt7z7.aspx */ typedef HRESULT (CALLBACK* LPFNSHGKFP_T)(REFKNOWNFOLDERID, DWORD, HANDLE, PWSTR*); HINSTANCE hDLL; // Handle to DLL LPFNSHGKFP_T lpfnSHGetKnownFolderPath; // Function pointer const KNOWNFOLDERID folder_id = FOLDERID_RoamingAppData; PWSTR path; HRESULT status; assert(max_len < INT_MAX); hDLL = LoadLibrary("Shell32"); if (hDLL == NULL) { // DLL couldn't be loaded, bail out. return 0; } lpfnSHGetKnownFolderPath = (LPFNSHGKFP_T)GetProcAddress(hDLL, "SHGetKnownFolderPath"); if (!lpfnSHGetKnownFolderPath) { // Can't find the procedure we want. Free and bail. FreeLibrary(hDLL); return 0; } status = lpfnSHGetKnownFolderPath(&folder_id, 0, NULL, &path); if (status == S_OK) { WideCharToMultiByte(CP_ACP, 0, path, -1, buf, (int)max_len, NULL, NULL); CoTaskMemFree(path); } FreeLibrary(hDLL); return strlen(buf); } static inline size_t get_binary_dir(char *buf, size_t max_len) { DWORD status; assert(max_len <= MAXDWORD); status = GetModuleFileName(NULL, buf, (DWORD) max_len); if (status > 0) { return strip_last_path_entry(buf, DIR_DELIMETER); } else { return 0; } } static inline size_t get_install_dir(char *buf, size_t max_len) { typedef LONG (CALLBACK* LPFNREGOPEN_T)(HKEY, LPCTSTR, DWORD, REGSAM, PHKEY); typedef LONG (CALLBACK* LPFNREGQUERY_T)(HKEY, LPCTSTR, LPDWORD, LPDWORD, LPBYTE, LPDWORD); typedef LONG (CALLBACK* LPFNREGCLOSE_T)(HKEY); HINSTANCE hDLL; // Handle to DLL LPFNREGOPEN_T lpfnRegOpenKeyEx; // Function pointer LPFNREGQUERY_T lpfnRegQueryValueEx; // Function pointer LPFNREGCLOSE_T lpfnRegCloseKey; // Function pointer HKEY hk; DWORD len; assert(max_len < INT_MAX); memset(buf, 0, max_len); hDLL = LoadLibrary("Advapi32"); if (hDLL == NULL) { // DLL couldn't be loaded, bail out. return 0; } lpfnRegOpenKeyEx = (LPFNREGOPEN_T)GetProcAddress(hDLL, "RegOpenKeyExA"); if (!lpfnRegOpenKeyEx) { // Can't find the procedure we want. Free and bail. FreeLibrary(hDLL); return 0; } lpfnRegQueryValueEx = (LPFNREGQUERY_T)GetProcAddress(hDLL, "RegQueryValueExA"); if (!lpfnRegQueryValueEx) { // Can't find the procedure we want. Free and bail. FreeLibrary(hDLL); return 0; } lpfnRegCloseKey = (LPFNREGCLOSE_T)GetProcAddress(hDLL, "RegCloseKey"); if (!lpfnRegCloseKey) { // Can't find the procedure we want. Free and bail. FreeLibrary(hDLL); return 0; } if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Nuand LLC", 0, KEY_READ, &hk)) { FreeLibrary(hDLL); return 0; } len = (DWORD)max_len; if (RegQueryValueEx(hk, "Path", 0, NULL, (LPBYTE) buf, &len) == ERROR_SUCCESS) { if (len > 0 && len < max_len && buf[len - 1] != '\\') strcat(buf, "\\"); } else len = 0; if (len) { lpfnRegCloseKey(hk); } FreeLibrary(hDLL); return len; } #else #error "Unknown OS or missing BLADERF_OS_* definition" #endif /* We're not using functions that use the *nix PATH_MAX (which is known to be * problematic), or the WIN32 MAX_PATH. Therefore, we'll just use this * arbitrary, but "sufficiently" large max buffer size for paths */ #define PATH_MAX_LEN 4096 char *file_find(const char *filename) { size_t i, max_len; char *full_path; const char *env_var; full_path = calloc(PATH_MAX_LEN+1, 1); if (full_path == NULL) { return NULL; } /* Check directory specified by environment variable */ env_var = getenv("BLADERF_SEARCH_DIR"); if (env_var != NULL) { strncat(full_path, env_var, PATH_MAX_LEN - 1); full_path[strlen(full_path)] = DIR_DELIMETER; max_len = PATH_MAX_LEN - strlen(full_path); if (max_len >= strlen(filename)) { strncat(full_path, filename, max_len); if (access(full_path, ACCESS_FILE_EXISTS) != -1) { return full_path; } } } /* Check the directory containing the currently running binary */ memset(full_path, 0, PATH_MAX_LEN); max_len = PATH_MAX_LEN - 1; if (get_binary_dir(full_path, max_len) != 0) { max_len -= strlen(full_path); if (max_len >= strlen(filename)) { strncat(full_path, filename, max_len); if (access(full_path, ACCESS_FILE_EXISTS) != -1) { return full_path; } } else { log_debug("Skipping search for %s in %s. " "Path would be truncated.\n", filename, full_path); } } /* Search our list of pre-determined paths */ for (i = 0; i < ARRAY_SIZE(search_paths); i++) { memset(full_path, 0, PATH_MAX_LEN); max_len = PATH_MAX_LEN; if (search_paths[i].prepend_home) { const size_t len = get_home_dir(full_path, max_len); if (len != 0) { max_len -= len; } else { continue; } } strncat(full_path, search_paths[i].path, max_len); max_len = PATH_MAX_LEN - strlen(full_path); if (max_len >= strlen(filename)) { strncat(full_path, filename, max_len); if (access(full_path, ACCESS_FILE_EXISTS) != -1) { return full_path; } } else { log_debug("Skipping search for %s in %s. " "Path would be truncated.\n", filename, full_path); } } /* Search the installation directory, if applicable */ if (get_install_dir(full_path, PATH_MAX_LEN)) { max_len = PATH_MAX_LEN - strlen(full_path); if (max_len >= strlen(filename)) { strncat(full_path, filename, max_len); if (access(full_path, ACCESS_FILE_EXISTS) != -1) { return full_path; } } else { log_debug("Skipping search for %s in %s. " "Path would be truncated.\n", filename, full_path); } } free(full_path); return NULL; } bladeRF-2024.05/host/libraries/libbladeRF/src/helpers/file.h000066400000000000000000000062721457144405000234400ustar00rootroot00000000000000/** * @file file.h * * @brief Wrappers around misc. file operations. * * These are collected here so that they may easily be dummied out for NIOS * headless builds in the future. * * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2013 Nuand LLC * Copyright (C) 2013 Daniel Gröber * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef HELPERS_FILE_H_ #define HELPERS_FILE_H_ #include #include /** * Read file contents into a buffer allocated internally and returned to the * caller through `buf'. * * The caller is responsible for freeing the allocated buffer * * @param[in] filename File open * @param[out] buf Upon success, this will point to a heap-allocated * buffer containing the file contents * @parma[out] size Upon success, this will be updated to reflect the * size of the buffered file * * @return 0 on success, negative BLADERF_ERR_* value on failure */ int file_read_buffer(const char *filename, uint8_t **buf, size_t *size); /** * Write to an open file stream. * * @param[in] f Open file stream. * @param[in] buf Data to write to the stream. * @parma[in] len Number of bytes to write to the stream. * * @return 0 on success, negative BLADERF_ERR_* value on failure */ int file_write(FILE *f, uint8_t *buf, size_t len); /** * Read data from an open file stream. * * @param[in] f Open file stream. * @param[out] buf Buffer to fill with data read. * @parma[in] len Number of bytes to read. If EOF is encountered * before this many bytes have been read will return * an error. * * @return 0 on success, negative BLADERF_ERR_* value on failure */ int file_read(FILE *f, char *buf, size_t len); /** * Determine the size of an open file stream. * * @param[in] f Open file stream. * * @return positive size of file on success, negative BLADERF_ERR_* value on * failure */ ssize_t file_size(FILE *f); /** * Search for the specified filename in bladeRF config directories. If found, * the full path is returned. There is a chance that the file will be removed * in between this call indicating it exists and attempting to open it. * * @param[in] filename File to search for * * @return Full path if the file is found, NULL otherwise. */ char *file_find(const char *filename); #endif bladeRF-2024.05/host/libraries/libbladeRF/src/helpers/have_cap.h000066400000000000000000000025501457144405000242620ustar00rootroot00000000000000/** * @file have_cap.h * * @brief Convenience wrapper for testing capabilities mask * * Copyright (C) 2020 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef HAVE_CAP_H_ #define HAVE_CAP_H_ #include /** * Convenience wrapper for testing capabilities mask */ static inline bool have_cap(uint64_t capabilities, uint64_t capability) { return (capabilities & capability) != 0; } /** * Convenience wrapper for testing capabilities mask */ static inline bool have_cap_dev(struct bladerf *dev, uint64_t capability) { uint64_t capabilities = dev->board->get_capabilities(dev); return (capabilities & capability) != 0; } #endif // HAVE_CAP_H_ bladeRF-2024.05/host/libraries/libbladeRF/src/helpers/interleave.c000066400000000000000000000117321457144405000246470ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2017 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include "helpers/interleave.h" size_t _interleave_calc_num_channels(bladerf_channel_layout layout) { switch (layout) { case BLADERF_RX_X1: case BLADERF_TX_X1: return 1; case BLADERF_RX_X2: case BLADERF_TX_X2: return 2; } return 0; } size_t _interleave_calc_bytes_per_sample(bladerf_format format) { switch (format) { case BLADERF_FORMAT_SC8_Q7: case BLADERF_FORMAT_SC8_Q7_META: return 2; case BLADERF_FORMAT_SC16_Q11: case BLADERF_FORMAT_SC16_Q11_META: case BLADERF_FORMAT_PACKET_META: return 4; } return 0; } size_t _interleave_calc_metadata_bytes(bladerf_format format) { switch (format) { case BLADERF_FORMAT_SC8_Q7_META: case BLADERF_FORMAT_SC16_Q11_META: case BLADERF_FORMAT_PACKET_META: return 0x10; case BLADERF_FORMAT_SC8_Q7: case BLADERF_FORMAT_SC16_Q11: return 0; } return 0; } int _interleave_interleave_buf(bladerf_channel_layout layout, bladerf_format format, unsigned int buffer_size, void *samples) { void *buf; uint8_t *srcptr, *dstptr; size_t num_channels = _interleave_calc_num_channels(layout); size_t samp_size, meta_size, samps_per_ch; size_t srcidx, dstidx, samp, ch; // Easy: if (num_channels < 2) { return 0; } // Placeholder for an actually efficient algorithm samp_size = _interleave_calc_bytes_per_sample(format); meta_size = _interleave_calc_metadata_bytes(format); samps_per_ch = buffer_size / num_channels; buf = malloc(samp_size * buffer_size); srcptr = samples; dstptr = buf; if (NULL == buf) { return BLADERF_ERR_MEM; } // Copy metadata if applicable if (meta_size > 0) { memcpy(dstptr, srcptr, meta_size); srcptr += meta_size; dstptr += meta_size; samps_per_ch -= (meta_size / samp_size / num_channels); } // Iterate... for (ch = 0; ch < num_channels; ++ch) { srcidx = samps_per_ch * ch; for (samp = 0; samp < samps_per_ch; ++samp) { dstidx = (samp * num_channels) + ch; memcpy(dstptr + (dstidx * samp_size), srcptr + ((srcidx + samp) * samp_size), samp_size); } } // Copy back... memcpy(samples, buf, buffer_size * samp_size); // Done free(buf); return 0; } int _interleave_deinterleave_buf(bladerf_channel_layout layout, bladerf_format format, unsigned int buffer_size, void *samples) { void *buf; uint8_t *srcptr, *dstptr; size_t num_channels = _interleave_calc_num_channels(layout); size_t samp_size, meta_size, samps_per_ch; size_t srcidx, dstidx, samp, ch; // Easy: if (num_channels < 2) { return 0; } // Placeholder for an actually efficient algorithm samp_size = _interleave_calc_bytes_per_sample(format); meta_size = _interleave_calc_metadata_bytes(format); samps_per_ch = buffer_size / num_channels; buf = malloc(samp_size * buffer_size); srcptr = samples; dstptr = buf; if (NULL == buf) { return BLADERF_ERR_MEM; } // Copy metadata if applicable if (meta_size > 0) { memcpy(dstptr, srcptr, meta_size); srcptr += meta_size; dstptr += meta_size; samps_per_ch -= (meta_size / samp_size / num_channels); } // Iterate... for (samp = 0; samp < samps_per_ch; ++samp) { srcidx = num_channels * samp; for (ch = 0; ch < num_channels; ++ch) { dstidx = (samps_per_ch * ch) + samp; memcpy(dstptr + (dstidx * samp_size), srcptr + ((srcidx + ch) * samp_size), samp_size); } } // Copy back... memcpy(samples, buf, buffer_size * samp_size); // Done free(buf); return 0; } bladeRF-2024.05/host/libraries/libbladeRF/src/helpers/interleave.h000066400000000000000000000033241457144405000246520ustar00rootroot00000000000000/** * @file interleave.h * * This file is not part of the API and may be changed at any time. * If you're interfacing with libbladeRF, DO NOT use this file. * * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2017 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef HELPERS_INTERLEAVE_H_ #define HELPERS_INTERLEAVE_H_ size_t _interleave_calc_bytes_per_sample(bladerf_format format); size_t _interleave_calc_metadata_bytes(bladerf_format format); size_t _interleave_calc_num_channels(bladerf_channel_layout layout); int _interleave_interleave_buf(bladerf_channel_layout layout, bladerf_format format, unsigned int buffer_size, void *samples); int _interleave_deinterleave_buf(bladerf_channel_layout layout, bladerf_format format, unsigned int buffer_size, void *samples); #endif bladeRF-2024.05/host/libraries/libbladeRF/src/helpers/timeout.c000066400000000000000000000031101457144405000241660ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2013 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include "host_config.h" #if BLADERF_OS_WINDOWS || BLADERF_OS_OSX #include "clock_gettime.h" #else #include #endif #include int populate_abs_timeout(struct timespec *t, unsigned int timeout_ms) { static const int nsec_per_sec = 1000 * 1000 * 1000; const unsigned int timeout_sec = timeout_ms / 1000; int status; status = clock_gettime(CLOCK_REALTIME, t); if (status != 0) { return BLADERF_ERR_UNEXPECTED; } else { t->tv_sec += timeout_sec; t->tv_nsec += (timeout_ms % 1000) * 1000 * 1000; if (t->tv_nsec >= nsec_per_sec) { t->tv_sec += t->tv_nsec / nsec_per_sec; t->tv_nsec %= nsec_per_sec; } return 0; } } bladeRF-2024.05/host/libraries/libbladeRF/src/helpers/timeout.h000066400000000000000000000026201457144405000242000ustar00rootroot00000000000000/** * @file timeout.h * * This file is not part of the API and may be changed at any time. * If you're interfacing with libbladeRF, DO NOT use this file. * * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2013-2015 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef HELPERS_TIMEOUT_H_ #define HELPERS_TIMEOUT_H_ /** * Populate the provided timeval structure for the specified timeout * * @param[out] t_abs Absolute timeout structure to populate * @param[in] timeout_ms Desired timeout in ms. * * 0 on success, BLADERF_ERR_UNEXPECTED on failure */ int populate_abs_timeout(struct timespec *t_abs, unsigned int timeout_ms); #endif bladeRF-2024.05/host/libraries/libbladeRF/src/helpers/version.c000066400000000000000000000142151457144405000241750ustar00rootroot00000000000000/** * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014-2015 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include "log.h" #include "rel_assert.h" #include "helpers/version.h" bool version_equal(const struct bladerf_version *v1, const struct bladerf_version *v2) { return v1->major == v2->major && v1->minor == v2->minor && v1->patch == v2->patch; } bool version_greater_or_equal(const struct bladerf_version *v1, const struct bladerf_version *v2) { return version_fields_greater_or_equal(v1, v2->major, v2->minor, v2->patch); } bool version_less_than(const struct bladerf_version *v1, const struct bladerf_version *v2) { return version_fields_less_than(v1, v2->major, v2->minor, v2->patch); } bool version_fields_greater_or_equal(const struct bladerf_version *version, unsigned int major, unsigned int minor, unsigned int patch) { if (version->major > major) { return true; } else if ( (version->major == major) && (version->minor > minor) ) { return true; } else if ((version->major == major) && (version->minor == minor) && (version->patch >= patch) ) { return true; } else { return false; } } bool version_fields_less_than(const struct bladerf_version *version, unsigned int major, unsigned int minor, unsigned int patch) { return !version_fields_greater_or_equal(version, major, minor, patch); } static const struct compat *find_fw_compat(const struct version_compat_table *fw_compat_table, const struct bladerf_version *fw_version) { const struct compat *newest_compat = &fw_compat_table->table[0]; size_t i; /* Version is newer than what's in our table - complain */ if (version_less_than(&newest_compat->ver, fw_version)) { log_info("Firmware version (v%u.%u.%u) is newer than entries in " "libbladeRF's compatibility table. Please update libbladeRF " "if problems arise.\n", fw_version->major, fw_version->minor, fw_version->patch); return newest_compat; } for (i = 0; i < fw_compat_table->len; i++) { if (version_equal(fw_version, &fw_compat_table->table[i].ver)) { return &fw_compat_table->table[i]; } } return NULL; } static const struct compat *find_fpga_compat(const struct version_compat_table *fpga_compat_table, const struct bladerf_version *fpga_version) { const struct compat *newest_compat = &fpga_compat_table->table[0]; size_t i; /* Device's FPGA is newer than what's in our table - complain */ if (version_less_than(&newest_compat->ver, fpga_version)) { log_info("FPGA version (v%u.%u.%u) is newer than entries in " "libbladeRF's compatibility table. Please update libbladeRF " "if problems arise.\n", fpga_version->major, fpga_version->minor, fpga_version->patch); return newest_compat; } for (i = 0; i < fpga_compat_table->len; i++) { if (version_equal(fpga_version, &fpga_compat_table->table[i].ver)) { return &fpga_compat_table->table[i]; } } return NULL; } int version_check_fw(const struct version_compat_table *fw_compat_table, const struct bladerf_version *fw_version, struct bladerf_version *required_fw_version) { const struct bladerf_version *oldest_version = &fw_compat_table->table[fw_compat_table->len-1].ver; if (required_fw_version) { *required_fw_version = *oldest_version; } if (version_greater_or_equal(fw_version, oldest_version)) { return 0; } return BLADERF_ERR_UPDATE_FW; } int version_check(const struct version_compat_table *fw_compat_table, const struct version_compat_table *fpga_compat_table, const struct bladerf_version *fw_version, const struct bladerf_version *fpga_version, struct bladerf_version *required_fw_version, struct bladerf_version *required_fpga_version) { const struct compat *fw_compat = find_fw_compat(fw_compat_table, fw_version); const struct compat *fpga_compat = find_fpga_compat(fpga_compat_table, fpga_version); if (fw_compat == NULL) { log_debug("%s is missing FW version compat table entry?\n", __FUNCTION__); assert(!"BUG!"); } else if (fpga_compat == NULL) { log_debug("%s is missing FPGA version compat table entry?\n", __FUNCTION__); assert(!"BUG!"); } if (required_fw_version) { *required_fw_version = fpga_compat->requires; } if (required_fpga_version) { *required_fpga_version = fw_compat->requires; } /* Check if the FPGA meets the minimum requirements dictated by the * firmware version */ if (version_less_than(fpga_version, &fw_compat->requires)) { return BLADERF_ERR_UPDATE_FPGA; } /* Check if the firmware version meets the minimum requirements dictated * by the FPGA version */ if (version_less_than(fw_version, &fpga_compat->requires)) { return BLADERF_ERR_UPDATE_FW; } return 0; } bladeRF-2024.05/host/libraries/libbladeRF/src/helpers/version.h000066400000000000000000000124311457144405000242000ustar00rootroot00000000000000/** * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef HELPERS_VERSION_H_ #define HELPERS_VERSION_H_ #include #define BLADERF_VERSION_STR_MAX 32 /** * Test if two versions are equal. The "describe" field is not checked. * * @return true if equal, false otherwise */ bool version_equal(const struct bladerf_version *v1, const struct bladerf_version *v2); /** * Check if version v1 is greater than or equal to version v2. * * @param[in] v1 First version * @param[in] v2 Second version * * @return true for greater or equal than, false otherwise */ bool version_greater_or_equal(const struct bladerf_version *v1, const struct bladerf_version *v2); /** * Check if version v1 is less than version v2. * * @param[in] v1 First version * @param[in] v2 Second version * * @return true for less than, false otherwise */ bool version_less_than(const struct bladerf_version *v1, const struct bladerf_version *v2); /** * Check if version in the provided structure is greater or equal to * the version specified by the provided major, minor, and patch values * * @param[in] version Version structure to check * @param[in] major Minor version * @param[in] minor Minor version * @param[in] patch Patch version * * @return true for greater or equal than, false otherwise */ bool version_fields_greater_or_equal(const struct bladerf_version *version, unsigned int major, unsigned int minor, unsigned int patch); /** * Check if version in the provided structure is less than * the version specied by the provided major, minor, and patch values * * @param[in] version Version structure to check * @param[in] major Minor version * @param[in] minor Minor version * @param[in] patch Patch version * * @return true for less than, false otherwise */ bool version_fields_less_than(const struct bladerf_version *version, unsigned int major, unsigned int minor, unsigned int patch); /* Version compatibility table structure. */ struct version_compat_table { const struct compat { struct bladerf_version ver; struct bladerf_version requires; } * table; unsigned int len; }; /** * Check if the firmware version is sufficient for the current libbladeRF * version. If it's not, the user will need to use the bootloader to flash a * newer version. * * @param[in] fw_compat_table Firmware-FPGA version compat. table * @param[in] fw_version Firmware version * @param[out] required_fw_version If not-NULL, populated with minimum * required firmware version * * @return 0 if the FW version is sufficient for normal operation, * BLADERF_ERR_UPDATE_FW if a firmware update is required. */ int version_check_fw(const struct version_compat_table *fw_compat_table, const struct bladerf_version *fw_version, struct bladerf_version *required_fw_version); /** * Check if the firmware and FPGA versions are sufficient and compatible. * * @param[in] fw_compat_table Firmware-FPGA version compat. table * @param[in] fpga_compat_table FPGA-Firmware version compat. table * @param[in] fw_version Firmware version * @param[in] fpga_version Firmware version * @param[out] required_fw_version If not-NULL, populated with minimum * required firmware version * @param[out] required_fpga_version If not-NULL, populated with minimum * required FPGA version * * @return 0 if the FPGA version is sufficient for normal operation, * BLADERF_ERR_UPDATE_FPGA if the firmware requires a newer FPGA, * BLADERF_ERR_UPDATE_FW if a firmware update is required to support * the currently loaded FPGA. */ int version_check(const struct version_compat_table *fw_compat_table, const struct version_compat_table *fpga_compat_table, const struct bladerf_version *fw_version, const struct bladerf_version *fpga_version, struct bladerf_version *required_fw_version, struct bladerf_version *required_fpga_version); #endif bladeRF-2024.05/host/libraries/libbladeRF/src/helpers/wallclock.c000066400000000000000000000025311457144405000244610ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2013-2018 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include "wallclock.h" #include "host_config.h" #if BLADERF_OS_WINDOWS || BLADERF_OS_OSX #include "clock_gettime.h" #else #include #endif uint64_t wallclock_get_current_nsec() { static const int nsec_per_sec = 1000 * 1000 * 1000; struct timespec t; int status; uint64_t rv; status = clock_gettime(CLOCK_REALTIME, &t); if (status != 0) { rv = 0; } else { rv = (t.tv_sec * nsec_per_sec); rv += (t.tv_nsec); } return rv; } bladeRF-2024.05/host/libraries/libbladeRF/src/helpers/wallclock.h000066400000000000000000000017251457144405000244720ustar00rootroot00000000000000/** * @file wallclock.h * * @brief System clock access helpers * * Copyright (C) 2013-2018 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef WALLCLOCK_H_ #define WALLCLOCK_H_ #include uint64_t wallclock_get_current_nsec(); #endif // WALLCLOCK_H_ bladeRF-2024.05/host/libraries/libbladeRF/src/init_fini.c000066400000000000000000000061741457144405000230230ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2013 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include #include #include "conversions.h" #include "version.h" #if !defined(WIN32) && !defined(__CYGWIN__) && defined(LOG_SYSLOG_ENABLED) #include #endif #include "log.h" #if !defined(WIN32) && !defined(__CYGWIN__) #if !defined(__clang__) && !defined(__GNUC__) #error init/fini mechanism not known to work for your compiler. #endif #define __init __attribute__((constructor)) #define __fini __attribute__((destructor)) #else /* Corresponding syntax for Windows (TBD) */ #define __init #define __fini #endif #ifdef LOG_SYSLOG_ENABLED # define DEF_LOG_LEVEL BLADERF_LOG_LEVEL_WARNING #else # define DEF_LOG_LEVEL BLADERF_LOG_LEVEL_INFO #endif #define ENV_LOG_LEVEL "BLADERF_LOG_LEVEL" /* Module initializers/deinitializers. When used as library (who don't have * a natural entry/exit function) these are used to initialize * deinitialize. Use to set predefined/default states and cleanup. * * This will work with shared libraries as well as with static as they get * invoked by RTL load/unload, with or without C++ code (i.e. functions will * play nice with C++ normal ctors/dtors). * * Keep log in to at least once per new build-/run-environment assert that * the mechanism works. */ static int get_loglevel(void) { int log_level = DEF_LOG_LEVEL; if ((getenv(ENV_LOG_LEVEL) != NULL) && (strlen(getenv(ENV_LOG_LEVEL)) > 0)) { bool valid_value; log_level = str2loglevel(getenv(ENV_LOG_LEVEL), &valid_value); if (!valid_value) { log_level = DEF_LOG_LEVEL; } } return log_level; } void __init __bladerf_init(void) { int log_level = get_loglevel(); #if !defined(WIN32) && !defined(__CYGWIN__) && defined(LOG_SYSLOG_ENABLED) openlog("bladeRF", LOG_CONS | LOG_NDELAY | LOG_NOWAIT | LOG_PERROR | LOG_PID, LOG_USER); #endif bladerf_log_set_verbosity(log_level); log_debug("libbladeRF %s: initializing\n", LIBBLADERF_VERSION); } void __fini __bladerf_fini(void) { int log_level = get_loglevel(); bladerf_log_set_verbosity(log_level); log_debug("libbladeRF %s: deinitializing\n", LIBBLADERF_VERSION); fflush(NULL); #if !defined(WIN32) && !defined(__CYGWIN__) && defined(LOG_SYSLOG_ENABLED) closelog(); #endif } bladeRF-2024.05/host/libraries/libbladeRF/src/streaming/000077500000000000000000000000001457144405000226705ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF/src/streaming/async.c000066400000000000000000000212001457144405000241440ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include #include "log.h" #include "backend/usb/usb.h" #include "async.h" #include "board/board.h" #include "helpers/timeout.h" #include "helpers/have_cap.h" int async_init_stream(struct bladerf_stream **stream, struct bladerf *dev, bladerf_stream_cb callback, void ***buffers, size_t num_buffers, bladerf_format format, size_t samples_per_buffer, size_t num_transfers, void *user_data) { struct bladerf_stream *lstream; size_t buffer_size_bytes; size_t i; int status = 0; if (num_transfers > num_buffers) { log_error("num_transfers must be <= num_buffers\n"); return BLADERF_ERR_INVAL; } if (samples_per_buffer < 1024 || samples_per_buffer % 1024 != 0) { log_error("samples_per_buffer must be multiples of 1024\n"); return BLADERF_ERR_INVAL; } /* Create a stream and populate it with the appropriate information */ lstream = malloc(sizeof(struct bladerf_stream)); if (!lstream) { return BLADERF_ERR_MEM; } MUTEX_INIT(&lstream->lock); if (pthread_cond_init(&lstream->can_submit_buffer, NULL) != 0) { free(lstream); return BLADERF_ERR_UNEXPECTED; } if (pthread_cond_init(&lstream->stream_started, NULL) != 0) { free(lstream); return BLADERF_ERR_UNEXPECTED; } lstream->dev = dev; lstream->error_code = 0; lstream->state = STREAM_IDLE; lstream->samples_per_buffer = samples_per_buffer; lstream->num_buffers = num_buffers; lstream->format = format; lstream->transfer_timeout = BULK_TIMEOUT_MS; lstream->cb = callback; lstream->user_data = user_data; lstream->buffers = NULL; if (format == BLADERF_FORMAT_PACKET_META) { if (!have_cap_dev(dev, BLADERF_CAP_FW_SHORT_PACKET)) { log_error("Firmware does not support short packets. " "Upgrade to at least firmware version 2.4.0."); return BLADERF_ERR_UNSUPPORTED; } if (!have_cap_dev(dev, BLADERF_CAP_FPGA_PACKET_META)) { log_error("FPGA does not support packet meta format. " "Upgrade to at least FPGA version 0.12.0 ."); return BLADERF_ERR_UNSUPPORTED; } } if (format == BLADERF_FORMAT_SC8_Q7 || format == BLADERF_FORMAT_SC8_Q7_META) { if (!have_cap_dev(dev, BLADERF_CAP_FPGA_8BIT_SAMPLES)) { log_error("FPGA does not support 8bit mode. " "Upgrade to at least FPGA version 0.15.0.\n"); return BLADERF_ERR_UNSUPPORTED; } } switch(format) { case BLADERF_FORMAT_SC8_Q7: case BLADERF_FORMAT_SC8_Q7_META: buffer_size_bytes = sc8q7_to_bytes(samples_per_buffer); break; case BLADERF_FORMAT_SC16_Q11: case BLADERF_FORMAT_SC16_Q11_META: buffer_size_bytes = sc16q11_to_bytes(samples_per_buffer); break; case BLADERF_FORMAT_PACKET_META: buffer_size_bytes = samples_per_buffer; break; default: status = BLADERF_ERR_INVAL; break; } if (!status) { lstream->buffers = calloc(num_buffers, sizeof(lstream->buffers[0])); if (lstream->buffers) { for (i = 0; i < num_buffers && !status; i++) { lstream->buffers[i] = calloc(1, buffer_size_bytes); if (!lstream->buffers[i]) { status = BLADERF_ERR_MEM; } } } else { status = BLADERF_ERR_MEM; } } /* Clean up everything we've allocated if we hit any errors */ if (status) { if (lstream->buffers) { for (i = 0; i < num_buffers; i++) { free(lstream->buffers[i]); } free(lstream->buffers); } free(lstream); } else { /* Perform any backend-specific stream initialization */ status = dev->backend->init_stream(lstream, num_transfers); if (status < 0) { async_deinit_stream(lstream); *stream = NULL; } else { /* Update the caller's pointers */ *stream = lstream; if (buffers) { *buffers = lstream->buffers; } } } return status; } int async_set_transfer_timeout(struct bladerf_stream *stream, unsigned int transfer_timeout_ms) { MUTEX_LOCK(&stream->lock); stream->transfer_timeout = transfer_timeout_ms; MUTEX_UNLOCK(&stream->lock); return 0; } int async_get_transfer_timeout(struct bladerf_stream *stream, unsigned int *transfer_timeout_ms) { MUTEX_LOCK(&stream->lock); *transfer_timeout_ms = stream->transfer_timeout; MUTEX_UNLOCK(&stream->lock); return 0; } int async_run_stream(struct bladerf_stream *stream, bladerf_channel_layout layout) { int status; struct bladerf *dev = stream->dev; MUTEX_LOCK(&stream->lock); stream->layout = layout; stream->state = STREAM_RUNNING; pthread_cond_signal(&stream->stream_started); MUTEX_UNLOCK(&stream->lock); status = dev->backend->stream(stream, layout); /* Backend return value takes precedence over stream error status */ return status == 0 ? stream->error_code : status; } int async_submit_stream_buffer(struct bladerf_stream *stream, void *buffer, size_t *length, unsigned int timeout_ms, bool nonblock) { int status = 0; struct timespec timeout_abs; MUTEX_LOCK(&stream->lock); if (buffer != BLADERF_STREAM_SHUTDOWN) { if (stream->state != STREAM_RUNNING && timeout_ms != 0) { status = populate_abs_timeout(&timeout_abs, timeout_ms); if (status != 0) { log_debug("Failed to populate timeout value\n"); goto error; } } while (stream->state != STREAM_RUNNING) { log_debug("Buffer submitted while stream's not running. " "Waiting for stream to start.\n"); if (timeout_ms == 0) { status = pthread_cond_wait(&stream->stream_started, &stream->lock); } else { status = pthread_cond_timedwait(&stream->stream_started, &stream->lock, &timeout_abs); } if (status == ETIMEDOUT) { status = BLADERF_ERR_TIMEOUT; log_debug("%s: %u ms timeout expired", __FUNCTION__, timeout_ms); goto error; } else if (status != 0) { status = BLADERF_ERR_UNEXPECTED; goto error; } } } status = stream->dev->backend->submit_stream_buffer(stream, buffer, length, timeout_ms, nonblock); error: MUTEX_UNLOCK(&stream->lock); return status; } void async_deinit_stream(struct bladerf_stream *stream) { size_t i; if (!stream) { log_debug("%s called with NULL stream\n", __FUNCTION__); return; } while(stream->state != STREAM_DONE && stream->state != STREAM_IDLE) { log_verbose( "Stream not done...\n" ); usleep(1000000); } /* Free up the backend data */ stream->dev->backend->deinit_stream(stream); /* Free up the buffers */ for (i = 0; i < stream->num_buffers; i++) { free(stream->buffers[i]); } /* Free up the pointer to the buffers */ free(stream->buffers); /* Free up the stream itself */ free(stream); } bladeRF-2024.05/host/libraries/libbladeRF/src/streaming/async.h000066400000000000000000000074111457144405000241610ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef STREAMING_ASYNC_H_ #define STREAMING_ASYNC_H_ #include #include #include "thread.h" #include "format.h" typedef enum { STREAM_IDLE, /* Idle and initialized */ STREAM_RUNNING, /* Currently running */ STREAM_SHUTTING_DOWN, /* Currently tearing down. * See bladerf_stream->error_code to determine * whether or not the shutdown was a clean exit * or due to an error. */ STREAM_DONE /* Done and deallocated */ } bladerf_stream_state; struct bladerf_stream { /* These items are configured in async_init_stream() and should only be * read (NOT MODIFIED) during the execution of the stream */ struct bladerf *dev; bladerf_channel_layout layout; bladerf_format format; unsigned int transfer_timeout; bladerf_stream_cb cb; void *user_data; size_t samples_per_buffer; size_t num_buffers; void **buffers; MUTEX lock; /* The following items must be accessed atomically */ int error_code; bladerf_stream_state state; pthread_cond_t can_submit_buffer; pthread_cond_t stream_started; void *backend_data; }; /* Get the number of bytes per stream buffer */ static inline size_t async_stream_buf_bytes(struct bladerf_stream *s) { if (s->format == BLADERF_FORMAT_PACKET_META) return s->samples_per_buffer; return samples_to_bytes(s->format, s->samples_per_buffer); } int async_init_stream(struct bladerf_stream **stream, struct bladerf *dev, bladerf_stream_cb callback, void ***buffers, size_t num_buffers, bladerf_format format, size_t buffer_size, size_t num_transfers, void *user_data); /* Set the transfer timeout. This acquires stream->lock. */ int async_set_transfer_timeout(struct bladerf_stream *stream, unsigned int transfer_timeout_ms); /* Get the transfer timeout. This acquires stream->lock. */ int async_get_transfer_timeout(struct bladerf_stream *stream, unsigned int *transfer_timeout_ms); /* Backend code is responsible for acquiring stream->lock in their callbacks */ int async_run_stream(struct bladerf_stream *stream, bladerf_channel_layout layout); /* This function WILL acquire stream->lock before calling backend code. * * If nonblock=true and no transfers are available, this function shall return * BLADERF_ERR_WOULD_BLOCK. */ int async_submit_stream_buffer(struct bladerf_stream *stream, void *buffer, size_t *length, unsigned int timeout_ms, bool nonblock); void async_deinit_stream(struct bladerf_stream *stream); #endif bladeRF-2024.05/host/libraries/libbladeRF/src/streaming/format.h000066400000000000000000000056631457144405000243430ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef STREAMING_FORMAT_H_ #define STREAMING_FORMAT_H_ #include "rel_assert.h" /* * Convert SC8Q8 samples to bytes */ static inline size_t sc8q7_to_bytes(size_t n_samples) { const size_t sample_size = 2 * sizeof(int8_t); assert(n_samples <= (SIZE_MAX / sample_size)); return n_samples * sample_size; } /* * Convert bytes to SC8Q8 samples */ static inline size_t bytes_to_sc8q7(size_t n_bytes) { const size_t sample_size = 2 * sizeof(int8_t); assert((n_bytes % sample_size) == 0); return n_bytes / sample_size; } /* * Convert SC16Q11 samples to bytes */ static inline size_t sc16q11_to_bytes(size_t n_samples) { const size_t sample_size = 2 * sizeof(int16_t); assert(n_samples <= (SIZE_MAX / sample_size)); return n_samples * sample_size; } /* * Convert bytes to SC16Q11 samples */ static inline size_t bytes_to_sc16q11(size_t n_bytes) { const size_t sample_size = 2 * sizeof(int16_t); assert((n_bytes % sample_size) == 0); return n_bytes / sample_size; } /* Covert samples to bytes based upon the provided format */ static inline size_t samples_to_bytes(bladerf_format format, size_t n) { switch (format) { case BLADERF_FORMAT_SC8_Q7: case BLADERF_FORMAT_SC8_Q7_META: return sc8q7_to_bytes(n); case BLADERF_FORMAT_SC16_Q11: case BLADERF_FORMAT_SC16_Q11_META: return sc16q11_to_bytes(n); case BLADERF_FORMAT_PACKET_META: return n*4; default: assert(!"Invalid format"); return 0; } } /* Convert bytes to samples based upon the provided format */ static inline size_t bytes_to_samples(bladerf_format format, size_t n) { switch (format) { case BLADERF_FORMAT_SC8_Q7: case BLADERF_FORMAT_SC8_Q7_META: return bytes_to_sc8q7(n); case BLADERF_FORMAT_SC16_Q11: case BLADERF_FORMAT_SC16_Q11_META: return bytes_to_sc16q11(n); case BLADERF_FORMAT_PACKET_META: return (n+3)/4; default: assert(!"Invalid format"); return 0; } } #endif bladeRF-2024.05/host/libraries/libbladeRF/src/streaming/metadata.h000066400000000000000000000143461457144405000246310ustar00rootroot00000000000000/* * Copyright (C) 2014 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef STREAMING_METADATA_H_ #define STREAMING_METADATA_H_ /* * Metadata layout * ~~~~~~~~~~~~~~~~~~~~~~~ * * The FPGA handles data in units of "messages." These messages are * 1024 or 2048 bytes for USB 2.0 (Hi-Speed) or USB 3.0 (SuperSpeed), * respectively. * * The first 16 bytes of the message form a header, which includes metadata * for the samples within the message. This header is shown below: * * +-----------------+ * 0x00 | Packet length | 2 bytes, Little-endian uint16_t * +-----------------+ * 0x02 | Packet flags | 1 byte * +-----------------+ * 0x03 | Packet core ID | 1 byte * +-----------------+ * 0x04 | Timestamp | 8 bytes, Little-endian uint64_t * +-----------------+ * 0x0c | Flags | 4 bytes, Little-endian uint32_t * +-----------------+ * * The term "buffer" is used to describe a block of of data received from or * sent to the device. The size of a "buffer" (in bytes) is always a multiple * of the size of a "message." Said another way, a buffer will always evenly * divide into multiple messages. Messages are *not* fragmented across * consecutive buffers. * * +-----------------+ <-. <-. * | header | | | * +-----------------+ | | * | | | | * | samples | | | * | | | | * +-----------------+ | <-+---- message * | header | | * +-----------------+ | * | | | * | samples | | * | | | * +-----------------+ | * | header | | * +-----------------+ | * | | | * | samples | | * | | | * +-----------------+ | * | header | | * +-----------------+ | * | | | * | samples | | * | | | * +-----------------+ <-+---------- buffer * * * When intentionally transmitting discontinuous groups of samples (such * as bursts), it is important that the last two samples within a message * be (0 + 0j). Otherwise, the DAC will not properly hold its output * at (0 + 0j) for the duration of the discontinuity. */ /* Components of the metadata header */ #define METADATA_RESV_SIZE (sizeof(uint32_t)) #define METADATA_TIMESTAMP_SIZE (sizeof(uint64_t)) #define METADATA_FLAGS_SIZE (sizeof(uint32_t)) #define METADATA_PACKET_LEN_SIZE (sizeof(uint16_t)) #define METADATA_PACKET_CORE_SIZE (sizeof(uint8_t)) #define METADATA_PACKET_FLAGS_SIZE (sizeof(uint8_t)) #define METADATA_RESV_OFFSET 0 #define METADATA_PACKET_LEN_OFFSET 0 #define METADATA_PACKET_FLAGS_OFFSET 2 #define METADATA_PACKET_CORE_OFFSET 3 #define METADATA_TIMESTAMP_OFFSET (METADATA_RESV_SIZE) #define METADATA_FLAGS_OFFSET \ (METADATA_TIMESTAMP_OFFSET + METADATA_TIMESTAMP_SIZE) #define METADATA_HEADER_SIZE (METADATA_FLAGS_OFFSET + METADATA_FLAGS_SIZE) static inline uint64_t metadata_get_timestamp(const uint8_t *header) { uint64_t ret; assert(sizeof(ret) == METADATA_TIMESTAMP_SIZE); memcpy(&ret, &header[METADATA_TIMESTAMP_OFFSET], METADATA_TIMESTAMP_SIZE); ret = LE64_TO_HOST(ret); return ret; } static inline uint32_t metadata_get_flags(const uint8_t *header) { uint32_t ret; assert(sizeof(ret) == METADATA_FLAGS_SIZE); memcpy(&ret, &header[METADATA_FLAGS_OFFSET], METADATA_FLAGS_SIZE); return LE32_TO_HOST(ret); } static inline uint16_t metadata_get_packet_len(const uint8_t *header) { uint16_t ret; assert(sizeof(ret) == METADATA_PACKET_LEN_SIZE); memcpy(&ret, &header[METADATA_PACKET_LEN_OFFSET], METADATA_PACKET_LEN_SIZE); return LE16_TO_HOST(ret); } static inline uint8_t metadata_get_packet_core(const uint8_t *header) { uint8_t ret; assert(sizeof(ret) == METADATA_PACKET_CORE_SIZE); memcpy(&ret, &header[METADATA_PACKET_CORE_OFFSET], METADATA_PACKET_CORE_SIZE); return ret; } static inline uint8_t metadata_get_packet_flags(const uint8_t *header) { uint8_t ret; assert(sizeof(ret) == METADATA_PACKET_FLAGS_SIZE); memcpy(&ret, &header[METADATA_PACKET_FLAGS_OFFSET], METADATA_PACKET_FLAGS_SIZE); return ret; } static inline void metadata_set_packet(uint8_t *header, uint64_t timestamp, uint32_t flags, uint16_t length, uint8_t core, uint8_t pkt_flags) { timestamp = HOST_TO_LE64(timestamp); flags = HOST_TO_LE32(flags); length = HOST_TO_LE16(length); assert(sizeof(timestamp) == METADATA_TIMESTAMP_SIZE); assert(sizeof(flags) == METADATA_FLAGS_SIZE); memset(&header[METADATA_RESV_OFFSET], 0, METADATA_RESV_SIZE); memcpy(&header[METADATA_PACKET_LEN_OFFSET], &length, METADATA_PACKET_LEN_SIZE); memcpy(&header[METADATA_PACKET_CORE_OFFSET], &core, METADATA_PACKET_CORE_SIZE); memcpy(&header[METADATA_PACKET_FLAGS_OFFSET], &pkt_flags, METADATA_PACKET_FLAGS_SIZE); memcpy(&header[METADATA_TIMESTAMP_OFFSET], ×tamp, METADATA_TIMESTAMP_SIZE); memcpy(&header[METADATA_FLAGS_OFFSET], &flags, METADATA_FLAGS_SIZE); } static inline void metadata_set(uint8_t *header, uint64_t timestamp, uint32_t flags) { metadata_set_packet(header, timestamp, flags, 0, 0, 0); } #endif bladeRF-2024.05/host/libraries/libbladeRF/src/streaming/sync.c000066400000000000000000001427371457144405000240260ustar00rootroot00000000000000/* * Copyright (C) 2014-2015 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include /* Only switch on the verbose debug prints in this file when we *really* want * them. Otherwise, compile them out to avoid excessive log level checks * in our data path */ #include "log.h" #ifndef ENABLE_LIBBLADERF_SYNC_LOG_VERBOSE #undef log_verbose #define log_verbose(...) #endif #include "minmax.h" #include "rel_assert.h" #include "async.h" #include "sync.h" #include "sync_worker.h" #include "metadata.h" #include "board/board.h" #include "helpers/timeout.h" #include "helpers/have_cap.h" #ifdef ENABLE_LIBBLADERF_SYNC_LOG_VERBOSE static inline void dump_buf_states(struct bladerf_sync *s) { static char *out = NULL; struct buffer_mgmt *b = &s->buf_mgmt; char *statestr = "UNKNOWN"; if (out == NULL) { out = malloc((b->num_buffers + 1) * sizeof(char)); } if (out == NULL) { log_verbose("%s: malloc failed\n"); return; } out[b->num_buffers] = '\0'; for (size_t i = 0; i < b->num_buffers; ++i) { switch (b->status[i]) { case SYNC_BUFFER_EMPTY: out[i] = '_'; break; case SYNC_BUFFER_IN_FLIGHT: out[i] = '-'; break; case SYNC_BUFFER_FULL: out[i] = '*'; break; case SYNC_BUFFER_PARTIAL: out[i] = 'o'; break; } } switch (s->state) { case SYNC_STATE_BUFFER_READY: statestr = "BUFFER_READY"; break; case SYNC_STATE_CHECK_WORKER: statestr = "CHECK_WORKER"; break; case SYNC_STATE_RESET_BUF_MGMT: statestr = "RESET_BUF_MGMT"; break; case SYNC_STATE_START_WORKER: statestr = "START_WORKER"; break; case SYNC_STATE_USING_BUFFER: statestr = "USING_BUFFER"; break; case SYNC_STATE_USING_BUFFER_META: statestr = "USING_BUFFER_META"; break; case SYNC_STATE_USING_PACKET_META: statestr = "USING_PACKET_META"; break; case SYNC_STATE_WAIT_FOR_BUFFER: statestr = "WAIT_FOR_BUFFER"; break; } log_verbose("%s: %s (%s)\n", __FUNCTION__, out, statestr); } #else #define dump_buf_states(...) #endif // ENABLE_LIBBLADERF_SYNC_LOG_VERBOSE static inline size_t samples2bytes(struct bladerf_sync *s, size_t n) { return s->stream_config.bytes_per_sample * n; } static inline unsigned int msg_per_buf(size_t msg_size, size_t buf_size, size_t bytes_per_sample) { size_t n = buf_size / (msg_size / bytes_per_sample); assert(n <= UINT_MAX); return (unsigned int) n; } static inline unsigned int samples_per_msg(size_t msg_size, size_t bytes_per_sample) { size_t n = (msg_size - METADATA_HEADER_SIZE) / bytes_per_sample; assert(n <= UINT_MAX); return (unsigned int) n; } int sync_init(struct bladerf_sync *sync, struct bladerf *dev, bladerf_channel_layout layout, bladerf_format format, unsigned int num_buffers, size_t buffer_size, size_t msg_size, unsigned int num_transfers, unsigned int stream_timeout) { int status = 0; size_t i, bytes_per_sample; if (num_transfers >= num_buffers) { return BLADERF_ERR_INVAL; } if (format == BLADERF_FORMAT_PACKET_META) { if (!have_cap_dev(dev, BLADERF_CAP_FW_SHORT_PACKET)) { log_error("Firmware does not support short packets. " "Upgrade to at least firmware version 2.4.0.\n"); return BLADERF_ERR_UNSUPPORTED; } if (!have_cap_dev(dev, BLADERF_CAP_FPGA_PACKET_META)) { log_error("FPGA does not support packet meta format. " "Upgrade to at least FPGA version 0.12.0.\n"); return BLADERF_ERR_UNSUPPORTED; } } if (format == BLADERF_FORMAT_SC8_Q7 || format == BLADERF_FORMAT_SC8_Q7_META) { if (!have_cap_dev(dev, BLADERF_CAP_FPGA_8BIT_SAMPLES)) { log_error("FPGA does not support 8bit mode. " "Upgrade to at least FPGA version 0.15.0.\n"); return BLADERF_ERR_UNSUPPORTED; } } switch (format) { case BLADERF_FORMAT_SC8_Q7: case BLADERF_FORMAT_SC8_Q7_META: bytes_per_sample = 2; break; case BLADERF_FORMAT_SC16_Q11: case BLADERF_FORMAT_SC16_Q11_META: case BLADERF_FORMAT_PACKET_META: bytes_per_sample = 4; break; default: log_debug("Invalid format value: %d\n", format); return BLADERF_ERR_INVAL; } /* bladeRF GPIF DMA requirement */ if ((bytes_per_sample * buffer_size) % 4096 != 0) { assert(!"Invalid buffer size"); return BLADERF_ERR_INVAL; } /* Deinitialize sync handle if it's initialized */ sync_deinit(sync); MUTEX_INIT(&sync->lock); switch (layout & BLADERF_DIRECTION_MASK) { case BLADERF_TX: sync->buf_mgmt.submitter = SYNC_TX_SUBMITTER_FN; break; case BLADERF_RX: sync->buf_mgmt.submitter = SYNC_TX_SUBMITTER_INVALID; break; } sync->dev = dev; sync->state = SYNC_STATE_CHECK_WORKER; sync->buf_mgmt.num_buffers = num_buffers; sync->buf_mgmt.resubmit_count = 0; sync->stream_config.layout = layout; sync->stream_config.format = format; sync->stream_config.samples_per_buffer = (unsigned int)buffer_size; sync->stream_config.num_xfers = num_transfers; sync->stream_config.timeout_ms = stream_timeout; sync->stream_config.bytes_per_sample = bytes_per_sample; sync->meta.state = SYNC_META_STATE_HEADER; sync->meta.msg_size = msg_size; sync->meta.msg_per_buf = msg_per_buf(msg_size, buffer_size, bytes_per_sample); sync->meta.samples_per_msg = samples_per_msg(msg_size, bytes_per_sample); sync->meta.samples_per_ts = (layout == BLADERF_RX_X2 || layout == BLADERF_TX_X2) ? 2:1; log_verbose("%s: Buffer size (in bytes): %u\n", __FUNCTION__, buffer_size * bytes_per_sample); log_verbose("%s: Buffer size (in samples): %u\n", __FUNCTION__, buffer_size); log_verbose("%s: Msg per buffer: %u\n", __FUNCTION__, sync->meta.msg_per_buf); log_verbose("%s: Samples per msg: %u\n", __FUNCTION__, sync->meta.samples_per_msg); MUTEX_INIT(&sync->buf_mgmt.lock); pthread_cond_init(&sync->buf_mgmt.buf_ready, NULL); sync->buf_mgmt.status = (sync_buffer_status*) malloc(num_buffers * sizeof(sync_buffer_status)); if (sync->buf_mgmt.status == NULL) { status = BLADERF_ERR_MEM; goto error; } sync->buf_mgmt.actual_lengths = (size_t *) malloc(num_buffers * sizeof(size_t)); if (sync->buf_mgmt.actual_lengths == NULL) { status = BLADERF_ERR_MEM; goto error; } switch (layout & BLADERF_DIRECTION_MASK) { case BLADERF_RX: /* When starting up an RX stream, the first 'num_transfers' * transfers will be submitted to the USB layer to grab data */ sync->buf_mgmt.prod_i = num_transfers; sync->buf_mgmt.cons_i = 0; sync->buf_mgmt.partial_off = 0; for (i = 0; i < num_buffers; i++) { if (i < num_transfers) { sync->buf_mgmt.status[i] = SYNC_BUFFER_IN_FLIGHT; } else { sync->buf_mgmt.status[i] = SYNC_BUFFER_EMPTY; } } sync->meta.msg_timestamp = 0; sync->meta.msg_flags = 0; break; case BLADERF_TX: sync->buf_mgmt.prod_i = 0; sync->buf_mgmt.cons_i = BUFFER_MGMT_INVALID_INDEX; sync->buf_mgmt.partial_off = 0; for (i = 0; i < num_buffers; i++) { sync->buf_mgmt.status[i] = SYNC_BUFFER_EMPTY; } sync->meta.in_burst = false; sync->meta.now = false; break; } status = sync_worker_init(sync); if (status < 0) { goto error; } sync->initialized = true; return 0; error: sync_deinit(sync); return status; } void sync_deinit(struct bladerf_sync *sync) { if (sync->initialized) { if ((sync->stream_config.layout & BLADERF_DIRECTION_MASK) == BLADERF_TX) { async_submit_stream_buffer(sync->worker->stream, BLADERF_STREAM_SHUTDOWN, NULL, 0, false); } sync_worker_deinit(sync->worker, &sync->buf_mgmt.lock, &sync->buf_mgmt.buf_ready); if (sync->buf_mgmt.actual_lengths) { free(sync->buf_mgmt.actual_lengths); } /* De-allocate our buffer management resources */ if (sync->buf_mgmt.status) { MUTEX_DESTROY(&sync->buf_mgmt.lock); free(sync->buf_mgmt.status); } MUTEX_DESTROY(&sync->lock); sync->initialized = false; } } static int wait_for_buffer(struct buffer_mgmt *b, unsigned int timeout_ms, const char *dbg_name, unsigned int dbg_idx) { int status; struct timespec timeout; if (timeout_ms == 0) { log_verbose("%s: Infinite wait for buffer[%d] (status: %d).\n", dbg_name, dbg_idx, b->status[dbg_idx]); status = pthread_cond_wait(&b->buf_ready, &b->lock); } else { log_verbose("%s: Timed wait for buffer[%d] (status: %d).\n", dbg_name, dbg_idx, b->status[dbg_idx]); status = populate_abs_timeout(&timeout, timeout_ms); if (status == 0) { status = pthread_cond_timedwait(&b->buf_ready, &b->lock, &timeout); } } if (status == ETIMEDOUT) { log_error("%s: Timed out waiting for buf_ready after %d ms\n", __FUNCTION__, timeout_ms); status = BLADERF_ERR_TIMEOUT; } else if (status != 0) { status = BLADERF_ERR_UNEXPECTED; } return status; } #ifndef SYNC_WORKER_START_TIMEOUT_MS # define SYNC_WORKER_START_TIMEOUT_MS 250 #endif /* Returns # of timestamps (or time steps) left in a message */ static inline unsigned int ts_remaining(struct bladerf_sync *s) { size_t ret = s->meta.samples_per_msg / s->meta.samples_per_ts - s->meta.curr_msg_off; assert(ret <= UINT_MAX); return (unsigned int) ret; } /* Returns # of samples left in a message (SC16Q11 mode only) */ static inline unsigned int left_in_msg(struct bladerf_sync *s) { size_t ret = s->meta.samples_per_msg - s->meta.curr_msg_off; assert(ret <= UINT_MAX); return (unsigned int) ret; } static inline void advance_rx_buffer(struct buffer_mgmt *b) { log_verbose("%s: Marking buf[%u] empty.\n", __FUNCTION__, b->cons_i); b->status[b->cons_i] = SYNC_BUFFER_EMPTY; b->cons_i = (b->cons_i + 1) % b->num_buffers; } static inline unsigned int timestamp_to_msg(struct bladerf_sync *s, uint64_t t) { uint64_t m = t / s->meta.samples_per_msg; assert(m <= UINT_MAX); return (unsigned int) m; } int sync_rx(struct bladerf_sync *s, void *samples, unsigned num_samples, struct bladerf_metadata *user_meta, unsigned int timeout_ms) { struct buffer_mgmt *b; int status = 0; bool exit_early = false; bool copied_data = false; unsigned int samples_returned = 0; uint8_t *samples_dest = (uint8_t*)samples; uint8_t *buf_src = NULL; unsigned int samples_to_copy = 0; unsigned int samples_per_buffer = 0; uint64_t target_timestamp = UINT64_MAX; unsigned int pkt_len_dwords = 0; if (s == NULL || samples == NULL) { log_debug("NULL pointer passed to %s\n", __FUNCTION__); return BLADERF_ERR_INVAL; } else if (!s->initialized) { return BLADERF_ERR_INVAL; } if (num_samples % s->meta.samples_per_ts != 0) { log_debug("%s: %u samples %% %u channels != 0\n", __FUNCTION__, num_samples, s->meta.samples_per_ts); return BLADERF_ERR_INVAL; } MUTEX_LOCK(&s->lock); if (s->stream_config.format == BLADERF_FORMAT_SC16_Q11_META || s->stream_config.format == BLADERF_FORMAT_SC8_Q7_META || s->stream_config.format == BLADERF_FORMAT_PACKET_META) { if (user_meta == NULL) { log_debug("NULL metadata pointer passed to %s\n", __FUNCTION__); status = BLADERF_ERR_INVAL; goto out; } else { user_meta->status = 0; target_timestamp = user_meta->timestamp; } } b = &s->buf_mgmt; samples_per_buffer = s->stream_config.samples_per_buffer; log_verbose("%s: Requests %u samples.\n", __FUNCTION__, num_samples); while (!exit_early && samples_returned < num_samples && status == 0) { dump_buf_states(s); switch (s->state) { case SYNC_STATE_CHECK_WORKER: { int stream_error; sync_worker_state worker_state = sync_worker_get_state(s->worker, &stream_error); /* Propagate stream error back to the caller. * They can call this function again to restart the stream and * try again. */ if (stream_error != 0) { status = stream_error; } else { if (worker_state == SYNC_WORKER_STATE_IDLE) { log_debug("%s: Worker is idle. Going to reset buf " "mgmt.\n", __FUNCTION__); s->state = SYNC_STATE_RESET_BUF_MGMT; } else if (worker_state == SYNC_WORKER_STATE_RUNNING) { s->state = SYNC_STATE_WAIT_FOR_BUFFER; } else { status = BLADERF_ERR_UNEXPECTED; log_debug("%s: Unexpected worker state=%d\n", __FUNCTION__, worker_state); } } break; } case SYNC_STATE_RESET_BUF_MGMT: MUTEX_LOCK(&b->lock); /* When the RX stream starts up, it will submit the first T * transfers, so the consumer index must be reset to 0 */ b->cons_i = 0; MUTEX_UNLOCK(&b->lock); log_debug("%s: Reset buf_mgmt consumer index\n", __FUNCTION__); s->state = SYNC_STATE_START_WORKER; break; case SYNC_STATE_START_WORKER: sync_worker_submit_request(s->worker, SYNC_WORKER_START); status = sync_worker_wait_for_state( s->worker, SYNC_WORKER_STATE_RUNNING, SYNC_WORKER_START_TIMEOUT_MS); if (status == 0) { s->state = SYNC_STATE_WAIT_FOR_BUFFER; log_debug("%s: Worker is now running.\n", __FUNCTION__); } else { log_debug("%s: Failed to start worker, (%d)\n", __FUNCTION__, status); } break; case SYNC_STATE_WAIT_FOR_BUFFER: MUTEX_LOCK(&b->lock); /* Check the buffer state, as the worker may have produced one * since we last queried the status */ if (b->status[b->cons_i] == SYNC_BUFFER_FULL) { s->state = SYNC_STATE_BUFFER_READY; log_verbose("%s: buffer %u is ready to consume\n", __FUNCTION__, b->cons_i); } else { status = wait_for_buffer(b, timeout_ms, __FUNCTION__, b->cons_i); if (status == 0) { if (b->status[b->cons_i] != SYNC_BUFFER_FULL) { s->state = SYNC_STATE_CHECK_WORKER; } else { s->state = SYNC_STATE_BUFFER_READY; log_verbose("%s: buffer %u is ready to consume\n", __FUNCTION__, b->cons_i); } } } MUTEX_UNLOCK(&b->lock); break; case SYNC_STATE_BUFFER_READY: MUTEX_LOCK(&b->lock); b->status[b->cons_i] = SYNC_BUFFER_PARTIAL; b->partial_off = 0; switch (s->stream_config.format) { case BLADERF_FORMAT_SC16_Q11: case BLADERF_FORMAT_SC8_Q7: s->state = SYNC_STATE_USING_BUFFER; break; case BLADERF_FORMAT_SC16_Q11_META: case BLADERF_FORMAT_SC8_Q7_META: s->state = SYNC_STATE_USING_BUFFER_META; s->meta.curr_msg_off = 0; s->meta.msg_num = 0; break; case BLADERF_FORMAT_PACKET_META: s->state = SYNC_STATE_USING_PACKET_META; break; default: assert(!"Invalid stream format"); status = BLADERF_ERR_UNEXPECTED; } MUTEX_UNLOCK(&b->lock); break; case SYNC_STATE_USING_BUFFER: /* SC16Q11 buffers w/o metadata */ MUTEX_LOCK(&b->lock); buf_src = (uint8_t*)b->buffers[b->cons_i]; samples_to_copy = uint_min(num_samples - samples_returned, samples_per_buffer - b->partial_off); memcpy(samples_dest + samples2bytes(s, samples_returned), buf_src + samples2bytes(s, b->partial_off), samples2bytes(s, samples_to_copy)); b->partial_off += samples_to_copy; samples_returned += samples_to_copy; log_verbose("%s: Provided %u samples to caller\n", __FUNCTION__, samples_to_copy); /* We've finished consuming this buffer and can start looking * for available samples in the next buffer */ if (b->partial_off >= samples_per_buffer) { /* Check for symptom of out-of-bounds accesses */ assert(b->partial_off == samples_per_buffer); advance_rx_buffer(b); s->state = SYNC_STATE_WAIT_FOR_BUFFER; } MUTEX_UNLOCK(&b->lock); break; case SYNC_STATE_USING_BUFFER_META: /* SC16Q11 buffers w/ metadata */ MUTEX_LOCK(&b->lock); switch (s->meta.state) { case SYNC_META_STATE_HEADER: assert(s->meta.msg_num < s->meta.msg_per_buf); buf_src = (uint8_t*)b->buffers[b->cons_i]; s->meta.curr_msg = buf_src + s->meta.msg_size * s->meta.msg_num; s->meta.msg_timestamp = metadata_get_timestamp(s->meta.curr_msg); s->meta.msg_flags = metadata_get_flags(s->meta.curr_msg); user_meta->status |= s->meta.msg_flags & (BLADERF_META_FLAG_RX_HW_UNDERFLOW | BLADERF_META_FLAG_RX_HW_MINIEXP1 | BLADERF_META_FLAG_RX_HW_MINIEXP2); s->meta.curr_msg_off = 0; /* We've encountered a discontinuity and need to return * what we have so far, setting the status flags */ if (copied_data && s->meta.msg_timestamp != s->meta.curr_timestamp) { user_meta->status |= BLADERF_META_STATUS_OVERRUN; exit_early = true; log_debug("Sample discontinuity detected @ " "buffer %u, message %u: Expected t=%llu, " "got t=%llu\n", b->cons_i, s->meta.msg_num, (unsigned long long)s->meta.curr_timestamp, (unsigned long long)s->meta.msg_timestamp); } else { log_verbose("Got header for message %u: " "t_new=%u, t_old=%u\n", s->meta.msg_num, s->meta.msg_timestamp, s->meta.curr_timestamp); } s->meta.curr_timestamp = s->meta.msg_timestamp; s->meta.state = SYNC_META_STATE_SAMPLES; break; case SYNC_META_STATE_SAMPLES: if (!copied_data && (user_meta->flags & BLADERF_META_FLAG_RX_NOW) == 0 && target_timestamp < s->meta.curr_timestamp) { log_debug("Current timestamp is %llu, " "target=%llu (user=%llu)\n", (unsigned long long)s->meta.curr_timestamp, (unsigned long long)target_timestamp, (unsigned long long)user_meta->timestamp); status = BLADERF_ERR_TIME_PAST; } else if ((user_meta->flags & BLADERF_META_FLAG_RX_NOW) || target_timestamp == s->meta.curr_timestamp) { /* Copy the request amount up to the end of a * this message in the current buffer */ samples_to_copy = uint_min(num_samples - samples_returned, left_in_msg(s)); memcpy(samples_dest + samples2bytes(s, samples_returned), s->meta.curr_msg + METADATA_HEADER_SIZE + samples2bytes(s, s->meta.curr_msg_off), samples2bytes(s, samples_to_copy)); samples_returned += samples_to_copy; s->meta.curr_msg_off += samples_to_copy; if (!copied_data && (user_meta->flags & BLADERF_META_FLAG_RX_NOW)) { /* Provide the user with the timestamp at the * first returned sample when the * NOW flag has been provided */ user_meta->timestamp = s->meta.curr_timestamp; log_verbose("Updated user meta timestamp with: " "%llu\n", (unsigned long long) user_meta->timestamp); } copied_data = true; s->meta.curr_timestamp += samples_to_copy / s->meta.samples_per_ts; /* We've begun copying samples, so our target will * just keep tracking the current timestamp. */ target_timestamp = s->meta.curr_timestamp; log_verbose("After copying samples, t=%llu\n", (unsigned long long)s->meta.curr_timestamp); if (left_in_msg(s) == 0) { assert(s->meta.curr_msg_off == s->meta.samples_per_msg); s->meta.state = SYNC_META_STATE_HEADER; s->meta.msg_num++; if (s->meta.msg_num >= s->meta.msg_per_buf) { assert(s->meta.msg_num == s->meta.msg_per_buf); advance_rx_buffer(b); s->meta.msg_num = 0; s->state = SYNC_STATE_WAIT_FOR_BUFFER; } } } else { const uint64_t time_delta = target_timestamp - s->meta.curr_timestamp; uint64_t samples_left = time_delta * s->meta.samples_per_ts; uint64_t left_in_buffer = (uint64_t) s->meta.samples_per_msg * (s->meta.msg_per_buf - s->meta.msg_num); /* Account for current position in buffer */ left_in_buffer -= s->meta.curr_msg_off; if (samples_left >= left_in_buffer) { /* Discard the remainder of this buffer */ advance_rx_buffer(b); s->state = SYNC_STATE_WAIT_FOR_BUFFER; s->meta.state = SYNC_META_STATE_HEADER; log_verbose("%s: Discarding rest of buffer.\n", __FUNCTION__); } else if (time_delta <= ts_remaining(s)) { /* Fast forward within the current message */ assert(time_delta <= SIZE_MAX); s->meta.curr_msg_off += (size_t)samples_left; s->meta.curr_timestamp += time_delta; log_verbose("%s: Seeking within message (t=%llu)\n", __FUNCTION__, s->meta.curr_timestamp); } else { s->meta.state = SYNC_META_STATE_HEADER; s->meta.msg_num += timestamp_to_msg(s, samples_left); log_verbose("%s: Seeking to message %u.\n", __FUNCTION__, s->meta.msg_num); } } break; default: assert(!"Invalid state"); status = BLADERF_ERR_UNEXPECTED; } MUTEX_UNLOCK(&b->lock); break; case SYNC_STATE_USING_PACKET_META: /* Packet buffers w/ metadata */ MUTEX_LOCK(&b->lock); buf_src = (uint8_t*)b->buffers[b->cons_i]; pkt_len_dwords = metadata_get_packet_len(buf_src); if (pkt_len_dwords > 0) { samples_returned += num_samples; user_meta->actual_count = pkt_len_dwords; memcpy(samples_dest, buf_src + METADATA_HEADER_SIZE, samples2bytes(s, pkt_len_dwords)); } advance_rx_buffer(b); s->state = SYNC_STATE_WAIT_FOR_BUFFER; MUTEX_UNLOCK(&b->lock); break; } } if (user_meta && s->stream_config.format != BLADERF_FORMAT_PACKET_META) { user_meta->actual_count = samples_returned; } out: MUTEX_UNLOCK(&s->lock); return status; } /* Assumes buffer lock is held */ static int advance_tx_buffer(struct bladerf_sync *s, struct buffer_mgmt *b) { int status = 0; const unsigned int idx = b->prod_i; if (b->submitter == SYNC_TX_SUBMITTER_FN) { /* Mark buffer in flight because we're going to send it out. * This ensures that if the callback fires before this function * completes, its state will be correct. */ b->status[idx] = SYNC_BUFFER_IN_FLIGHT; /* This call may block and it results in a per-stream lock being held, * so the buffer lock must be dropped. * * A callback may occur in the meantime, but this will not touch the * status for this this buffer, or the producer index. */ MUTEX_UNLOCK(&b->lock); size_t len; if (s->stream_config.format == BLADERF_FORMAT_PACKET_META) { len = b->actual_lengths[idx]; } else { len = async_stream_buf_bytes(s->worker->stream); } status = async_submit_stream_buffer(s->worker->stream, b->buffers[idx], &len, s->stream_config.timeout_ms, true); MUTEX_LOCK(&b->lock); if (status == 0) { log_verbose("%s: buf[%u] submitted.\n", __FUNCTION__, idx); } else if (status == BLADERF_ERR_WOULD_BLOCK) { log_verbose("%s: Deferring buf[%u] submission to worker callback.\n", __FUNCTION__, idx); /* Mark this buffer as being full of data, but not in flight */ b->status[idx] = SYNC_BUFFER_FULL; /* Assign callback the duty of submitting deferred buffers, * and use buffer_mgmt.cons_i to denote which it should submit * (i.e., consume). */ b->submitter = SYNC_TX_SUBMITTER_CALLBACK; b->cons_i = idx; /* This is expected and we are handling it. Don't propagate this * status back up */ status = 0; } else { /* Unmark this as being in flight */ b->status[idx] = SYNC_BUFFER_FULL; log_debug("%s: Failed to submit buf[%u].\n", __FUNCTION__, idx); return status; } } else { /* We are not submitting this buffer; this is deffered to the worker * call back. Just update its state to being full of samples. */ b->status[idx] = SYNC_BUFFER_FULL; } /* Advance "producer" insertion index. */ b->prod_i = (idx + 1) % b->num_buffers; /* Determine our next state based upon the state of the next buffer we * want to use. */ if (b->status[b->prod_i] == SYNC_BUFFER_EMPTY) { /* Buffer is empty and ready for use */ s->state = SYNC_STATE_BUFFER_READY; } else { /* We'll have to wait on this buffer to become ready. First, we'll * verify that the worker is running. */ s->state = SYNC_STATE_CHECK_WORKER; } return status; } static inline bool timestamp_in_past(struct bladerf_metadata *user_meta, struct bladerf_sync *s) { const bool in_past = user_meta->timestamp < s->meta.curr_timestamp; if (in_past) { log_debug("Provided timestamp=%"PRIu64" is in past: current=%"PRIu64"\n", user_meta->timestamp, s->meta.curr_timestamp); } return in_past; } struct tx_options { bool flush; bool zero_pad; }; static inline int handle_tx_parameters(struct bladerf_metadata *user_meta, struct bladerf_sync *s, struct tx_options *options) { if (s->stream_config.format == BLADERF_FORMAT_SC16_Q11_META) { if (user_meta == NULL) { log_debug("NULL metadata pointer passed to %s\n", __FUNCTION__); return BLADERF_ERR_INVAL; } if (user_meta->flags & BLADERF_META_FLAG_TX_BURST_START) { bool now = user_meta->flags & BLADERF_META_FLAG_TX_NOW; if (s->meta.in_burst) { log_debug("%s: BURST_START provided while already in a burst.\n", __FUNCTION__); return BLADERF_ERR_INVAL; } else if (!now && timestamp_in_past(user_meta, s)) { return BLADERF_ERR_TIME_PAST; } s->meta.in_burst = true; if (now) { s->meta.now = true; log_verbose("%s: Starting burst \"now\"\n", __FUNCTION__); } else { s->meta.curr_timestamp = user_meta->timestamp; log_verbose("%s: Starting burst @ %llu\n", __FUNCTION__, (unsigned long long)s->meta.curr_timestamp); } if (user_meta->flags & BLADERF_META_FLAG_TX_UPDATE_TIMESTAMP) { log_debug("UPDATE_TIMESTAMP ignored; BURST_START flag was used.\n"); } } else if (user_meta->flags & BLADERF_META_FLAG_TX_NOW) { log_debug("%s: TX_NOW was specified without BURST_START.\n", __FUNCTION__); return BLADERF_ERR_INVAL; } else if (user_meta->flags & BLADERF_META_FLAG_TX_UPDATE_TIMESTAMP) { if (timestamp_in_past(user_meta, s)) { return BLADERF_ERR_TIME_PAST; } else { options->zero_pad = true; } } if (user_meta->flags & BLADERF_META_FLAG_TX_BURST_END) { if (s->meta.in_burst) { options->flush = true; } else { log_debug("%s: BURST_END provided while not in a burst.\n", __FUNCTION__); return BLADERF_ERR_INVAL; } } user_meta->status = 0; } return 0; } int sync_tx(struct bladerf_sync *s, void const *samples, unsigned int num_samples, struct bladerf_metadata *user_meta, unsigned int timeout_ms) { struct buffer_mgmt *b = NULL; int status = 0; unsigned int samples_written = 0; unsigned int samples_to_copy = 0; unsigned int samples_per_buffer = 0; uint8_t const *samples_src = (uint8_t const *)samples; uint8_t *buf_dest = NULL; struct tx_options op = { FIELD_INIT(.flush, false), FIELD_INIT(.zero_pad, false), }; log_verbose("%s: called for %u samples.\n", __FUNCTION__, num_samples); if (s == NULL || samples == NULL || !s->initialized) { return BLADERF_ERR_INVAL; } MUTEX_LOCK(&s->lock); status = handle_tx_parameters(user_meta, s, &op); if (status != 0) { goto out; } b = &s->buf_mgmt; samples_per_buffer = s->stream_config.samples_per_buffer; while (status == 0 && ((samples_written < num_samples) || op.flush)) { switch (s->state) { case SYNC_STATE_CHECK_WORKER: { int stream_error; sync_worker_state worker_state = sync_worker_get_state(s->worker, &stream_error); if (stream_error != 0) { status = stream_error; } else { if (worker_state == SYNC_WORKER_STATE_IDLE) { /* No need to reset any buffer management for TX since * the TX stream does not submit an initial set of * buffers. Therefore the RESET_BUF_MGMT state is * skipped here. */ s->state = SYNC_STATE_START_WORKER; } else { /* Worker is running - continue onto checking for and * potentially waiting for an available buffer */ s->state = SYNC_STATE_WAIT_FOR_BUFFER; } } break; } case SYNC_STATE_RESET_BUF_MGMT: assert(!"Bug"); break; case SYNC_STATE_START_WORKER: sync_worker_submit_request(s->worker, SYNC_WORKER_START); status = sync_worker_wait_for_state( s->worker, SYNC_WORKER_STATE_RUNNING, SYNC_WORKER_START_TIMEOUT_MS); if (status == 0) { s->state = SYNC_STATE_WAIT_FOR_BUFFER; log_debug("%s: Worker is now running.\n", __FUNCTION__); } break; case SYNC_STATE_WAIT_FOR_BUFFER: MUTEX_LOCK(&b->lock); /* Check the buffer state, as the worker may have consumed one * since we last queried the status */ if (b->status[b->prod_i] == SYNC_BUFFER_EMPTY) { s->state = SYNC_STATE_BUFFER_READY; } else { status = wait_for_buffer(b, timeout_ms, __FUNCTION__, b->prod_i); } MUTEX_UNLOCK(&b->lock); break; case SYNC_STATE_BUFFER_READY: MUTEX_LOCK(&b->lock); b->status[b->prod_i] = SYNC_BUFFER_PARTIAL; b->partial_off = 0; switch (s->stream_config.format) { case BLADERF_FORMAT_SC16_Q11: case BLADERF_FORMAT_SC8_Q7: s->state = SYNC_STATE_USING_BUFFER; break; case BLADERF_FORMAT_SC16_Q11_META: case BLADERF_FORMAT_SC8_Q7_META: s->state = SYNC_STATE_USING_BUFFER_META; s->meta.curr_msg_off = 0; s->meta.msg_num = 0; break; case BLADERF_FORMAT_PACKET_META: s->state = SYNC_STATE_USING_PACKET_META; s->meta.curr_msg_off = 0; s->meta.msg_num = 0; break; default: assert(!"Invalid stream format"); status = BLADERF_ERR_UNEXPECTED; } MUTEX_UNLOCK(&b->lock); break; case SYNC_STATE_USING_BUFFER: MUTEX_LOCK(&b->lock); buf_dest = (uint8_t *)b->buffers[b->prod_i]; samples_to_copy = uint_min(num_samples - samples_written, samples_per_buffer - b->partial_off); memcpy(buf_dest + samples2bytes(s, b->partial_off), samples_src + samples2bytes(s, samples_written), samples2bytes(s, samples_to_copy)); b->partial_off += samples_to_copy; samples_written += samples_to_copy; log_verbose("%s: Buffered %u samples from caller\n", __FUNCTION__, samples_to_copy); if (b->partial_off >= samples_per_buffer) { /* Check for symptom of out-of-bounds accesses */ assert(b->partial_off == samples_per_buffer); /* Submit buffer and advance to the next one */ status = advance_tx_buffer(s, b); } MUTEX_UNLOCK(&b->lock); break; case SYNC_STATE_USING_BUFFER_META: /* SC16Q11 buffers w/ metadata */ MUTEX_LOCK(&b->lock); switch (s->meta.state) { case SYNC_META_STATE_HEADER: buf_dest = (uint8_t *)b->buffers[b->prod_i]; s->meta.curr_msg = buf_dest + s->meta.msg_size * s->meta.msg_num; log_verbose("%s: Set curr_msg to: %p (buf @ %p)\n", __FUNCTION__, s->meta.curr_msg, buf_dest); s->meta.curr_msg_off = 0; if (s->meta.now) { metadata_set(s->meta.curr_msg, 0, 0); } else { metadata_set(s->meta.curr_msg, s->meta.curr_timestamp, 0); } s->meta.state = SYNC_META_STATE_SAMPLES; log_verbose("%s: Filled in header (t=%llu)\n", __FUNCTION__, (unsigned long long)s->meta.curr_timestamp); break; case SYNC_META_STATE_SAMPLES: if (op.zero_pad) { const uint64_t delta = user_meta->timestamp - s->meta.curr_timestamp; size_t to_zero; log_verbose("%s: User requested zero padding to " "t=%" PRIu64 " (%" PRIu64 " + %" PRIu64 ")\n", __FUNCTION__, user_meta->timestamp, s->meta.curr_timestamp, delta); if (delta < left_in_msg(s)) { to_zero = (size_t)delta; log_verbose("%s: Padded subset of msg " "(%" PRIu64 " samples)\n", __FUNCTION__, (uint64_t)to_zero); } else { to_zero = left_in_msg(s); log_verbose("%s: Padded remainder of msg " "(%" PRIu64 " samples)\n", __FUNCTION__, (uint64_t)to_zero); } memset(s->meta.curr_msg + METADATA_HEADER_SIZE + samples2bytes(s, s->meta.curr_msg_off), 0, samples2bytes(s, to_zero)); s->meta.curr_msg_off += to_zero; /* If we're going to supply the FPGA with a * discontinuity, it is required that the last three * samples provided be zero in order to hold the * DAC @ (0 + 0j). * * See "Figure 9: TX data interface" in the LMS6002D * data sheet for the register stages that create * this requirement. * * If we're ending a burst with < 3 zeros samples at * the end of the message, we'll need to continue * onto the next message. At this next message, * we'll either encounter the requested timestamp or * zero-fill the message to fulfil this "three zero * sample" requirement, and set the timestamp * appropriately at the following message. */ if (to_zero < 3 && left_in_msg(s) == 0) { s->meta.curr_timestamp += to_zero; log_verbose("Ended msg with < 3 zero samples. " "Padding into next message.\n"); } else { s->meta.curr_timestamp = user_meta->timestamp; op.zero_pad = false; } } samples_to_copy = uint_min( num_samples - samples_written, left_in_msg(s)); if (samples_to_copy != 0) { /* We have user data to copy into the current * message within the buffer */ memcpy(s->meta.curr_msg + METADATA_HEADER_SIZE + samples2bytes(s, s->meta.curr_msg_off), samples_src + samples2bytes(s, samples_written), samples2bytes(s, samples_to_copy)); s->meta.curr_msg_off += samples_to_copy; if (s->stream_config.layout == BLADERF_TX_X2) s->meta.curr_timestamp += samples_to_copy / 2; else s->meta.curr_timestamp += samples_to_copy; samples_written += samples_to_copy; log_verbose("%s: Copied %u samples. " "Current message offset is now: %u\n", __FUNCTION__, samples_to_copy, s->meta.curr_msg_off); } if (left_in_msg(s) != 0 && op.flush) { /* We're ending this buffer early and need to * flush the remaining samples by setting all * samples in the messages to (0 + 0j) */ const unsigned int to_zero = left_in_msg(s); const size_t off = METADATA_HEADER_SIZE + samples2bytes(s, s->meta.curr_msg_off); /* If we're here, we should have already copied * all requested data to the buffer */ assert(num_samples == samples_written); memset(s->meta.curr_msg + off, 0, samples2bytes(s, to_zero)); log_verbose( "%s: Flushed %u samples @ %u (0x%08x)\n", __FUNCTION__, to_zero, s->meta.curr_msg_off, off); s->meta.curr_msg_off += to_zero; s->meta.curr_timestamp += to_zero; } if (left_in_msg(s) == 0) { s->meta.msg_num++; s->meta.state = SYNC_META_STATE_HEADER; log_verbose("%s: Advancing to next message (%u)\n", __FUNCTION__, s->meta.msg_num); } if (s->meta.msg_num >= s->meta.msg_per_buf) { assert(s->meta.msg_num == s->meta.msg_per_buf); /* Submit buffer of samples for transmission */ status = advance_tx_buffer(s, b); s->meta.msg_num = 0; s->state = SYNC_STATE_WAIT_FOR_BUFFER; /* We want to clear the flush flag if we've written * all of our data, but keep it set if we have more * data and need wrap around to another buffer */ op.flush = op.flush && (samples_written != num_samples); } break; default: assert(!"Invalid state"); status = BLADERF_ERR_UNEXPECTED; } MUTEX_UNLOCK(&b->lock); break; case SYNC_STATE_USING_PACKET_META: /* Packet buffers w/ metadata */ MUTEX_LOCK(&b->lock); buf_dest = (uint8_t *)b->buffers[b->prod_i]; memcpy(buf_dest + METADATA_HEADER_SIZE, samples_src, num_samples*4); b->actual_lengths[b->prod_i] = samples2bytes(s, num_samples) + METADATA_HEADER_SIZE; metadata_set_packet(buf_dest, 0, 0, num_samples, 0, 0); samples_written = num_samples; status = advance_tx_buffer(s, b); s->meta.msg_num = 0; s->state = SYNC_STATE_WAIT_FOR_BUFFER; MUTEX_UNLOCK(&b->lock); break; } } if (status == 0 && s->stream_config.format == BLADERF_FORMAT_SC16_Q11_META && (user_meta->flags & BLADERF_META_FLAG_TX_BURST_END)) { s->meta.in_burst = false; s->meta.now = false; } out: MUTEX_UNLOCK(&s->lock); return status; } unsigned int sync_buf2idx(struct buffer_mgmt *b, void *addr) { unsigned int i; for (i = 0; i < b->num_buffers; i++) { if (b->buffers[i] == addr) { return i; } } assert(!"Bug: Buffer not found."); /* Assertions are intended to always remain on. If someone turned them * off, do the best we can...complain loudly and clobber a buffer */ log_critical("Bug: Buffer not found."); return 0; } bladeRF-2024.05/host/libraries/libbladeRF/src/streaming/sync.h000066400000000000000000000140331457144405000240160ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef STREAMING_SYNC_H_ #define STREAMING_SYNC_H_ #include #include #include #include "thread.h" /* These parameters are only written during sync_init */ struct stream_config { bladerf_format format; bladerf_channel_layout layout; unsigned int samples_per_buffer; unsigned int num_xfers; unsigned int timeout_ms; size_t bytes_per_sample; }; typedef enum { SYNC_BUFFER_EMPTY = 0, /**< Buffer contains no data */ SYNC_BUFFER_PARTIAL, /**< sync_rx/tx is currently emptying/filling */ SYNC_BUFFER_FULL, /**< Buffer is full of data */ SYNC_BUFFER_IN_FLIGHT, /**< Currently being transferred */ } sync_buffer_status; typedef enum { SYNC_META_STATE_HEADER, /**< Extract the metadata header */ SYNC_META_STATE_SAMPLES, /**< Process samples */ } sync_meta_state; typedef enum { /** Invalid selection */ SYNC_TX_SUBMITTER_INVALID = -1, /** sync_tx() is repsonsible for submitting buffers for async transfer */ SYNC_TX_SUBMITTER_FN, /** The TX worker callbacks should be returning buffers for submission */ SYNC_TX_SUBMITTER_CALLBACK } sync_tx_submitter; #define BUFFER_MGMT_INVALID_INDEX (UINT_MAX) struct buffer_mgmt { sync_buffer_status *status; size_t *actual_lengths; void **buffers; unsigned int num_buffers; unsigned int prod_i; /**< Producer index - next buffer to fill */ unsigned int cons_i; /**< Consumer index - next buffer to empty */ unsigned int partial_off; /**< Current index into partial buffer */ /* In the event of a SW RX overrun, this count is used to determine * how many more transfers should be considered invalid and require * resubmission */ unsigned int resubmit_count; /* Applicable to TX only. Denotes which context is responsible for * submitting full buffers to the underlying async system */ sync_tx_submitter submitter; MUTEX lock; pthread_cond_t buf_ready; /**< Buffer produced by RX callback, or * buffer emptied by TX callback */ }; /* State of API-side sync interface */ typedef enum { SYNC_STATE_CHECK_WORKER, SYNC_STATE_RESET_BUF_MGMT, SYNC_STATE_START_WORKER, SYNC_STATE_WAIT_FOR_BUFFER, SYNC_STATE_BUFFER_READY, SYNC_STATE_USING_BUFFER, SYNC_STATE_USING_PACKET_META, SYNC_STATE_USING_BUFFER_META } sync_state; struct sync_meta { sync_meta_state state; /* State of metadata processing */ uint8_t *curr_msg; /* Points to current message in the buffer */ size_t curr_msg_off; /* Offset into current message (samples), * ignoring the 4-samples worth of metadata */ size_t msg_size; /* Size of data message */ unsigned int msg_per_buf; /* Number of data messages per buffer */ unsigned int msg_num; /* Which message within the buffer are we in? * Range is: 0 to msg_per_buf */ unsigned int samples_per_msg; /* Number of samples within a message */ unsigned int samples_per_ts; /* Number of samples within a timestamp */ union { /* Used only for RX */ struct { uint64_t msg_timestamp; /* Timestamp contained in the current message */ uint32_t msg_flags; /* Flags for the current message */ }; /* Used only for TX */ struct { bool in_burst; bool now; }; }; uint64_t curr_timestamp; /* Timestamp at the sample we've * consumed up to */ }; struct bladerf_sync { MUTEX lock; struct bladerf *dev; bool initialized; sync_state state; struct buffer_mgmt buf_mgmt; struct stream_config stream_config; struct sync_worker *worker; struct sync_meta meta; }; /** * Create and initialize as synchronous interface handle for the specified * device and direction. If the synchronous handle is already initialized, this * call will first deinitialize it. * * The associated stream will be started at the first RX or TX call * * @return 0 or BLADERF_ERR_* value on failure */ int sync_init(struct bladerf_sync *sync, struct bladerf *dev, bladerf_channel_layout layout, bladerf_format format, unsigned int num_buffers, size_t buffer_size, size_t msg_size, unsigned int num_transfers, unsigned int stream_timeout); /** * Deinitialize the sync handle. This tears down and deallocates the underlying * asynchronous stream. * * @param[inout] sync Handle to deinitialize. */ void sync_deinit(struct bladerf_sync *sync); int sync_rx(struct bladerf_sync *sync, void *samples, unsigned int num_samples, struct bladerf_metadata *metadata, unsigned int timeout_ms); int sync_tx(struct bladerf_sync *sync, void const *samples, unsigned int num_samples, struct bladerf_metadata *metadata, unsigned int timeout_ms); unsigned int sync_buf2idx(struct buffer_mgmt *b, void *addr); void *sync_idx2buf(struct buffer_mgmt *b, unsigned int idx); #endif bladeRF-2024.05/host/libraries/libbladeRF/src/streaming/sync_worker.c000066400000000000000000000416741457144405000254150ustar00rootroot00000000000000/* * Copyright (C) 2014-2015 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include /* Only switch on the verbose debug prints in this file when we *really* want * them. Otherwise, compile them out to avoid excessive log level checks * in our data path */ #include "log.h" #ifndef ENABLE_LIBBLADERF_SYNC_LOG_VERBOSE #undef log_verbose #define log_verbose(...) #endif #include "rel_assert.h" #include "conversions.h" #include "minmax.h" #include "async.h" #include "sync.h" #include "sync_worker.h" #include "board/board.h" #include "backend/usb/usb.h" #define worker2str(s) (direction2str(s->stream_config.layout & BLADERF_DIRECTION_MASK)) void *sync_worker_task(void *arg); static void *rx_callback(struct bladerf *dev, struct bladerf_stream *stream, struct bladerf_metadata *meta, void *samples, size_t num_samples, void *user_data) { unsigned int requests; /* Pending requests */ unsigned int next_idx; unsigned int samples_idx; void *next_buf = NULL; /* Next buffer to submit for reception */ struct bladerf_sync *s = (struct bladerf_sync *)user_data; struct sync_worker *w = s->worker; struct buffer_mgmt *b = &s->buf_mgmt; /* Check if the caller has requested us to shut down. We'll keep the * SHUTDOWN bit set through our transition into the IDLE state so we * can act on it there. */ MUTEX_LOCK(&w->request_lock); requests = w->requests; MUTEX_UNLOCK(&w->request_lock); if (requests & SYNC_WORKER_STOP) { log_verbose("%s worker: Got STOP request upon entering callback. " "Ending stream.\n", worker2str(s)); return NULL; } MUTEX_LOCK(&b->lock); /* Get the index of the buffer that was just filled */ samples_idx = sync_buf2idx(b, samples); if (b->resubmit_count == 0) { if (b->status[b->prod_i] == SYNC_BUFFER_EMPTY) { /* This buffer is now ready for the consumer */ b->status[samples_idx] = SYNC_BUFFER_FULL; b->actual_lengths[samples_idx] = num_samples; pthread_cond_signal(&b->buf_ready); /* Update the state of the buffer being submitted next */ next_idx = b->prod_i; b->status[next_idx] = SYNC_BUFFER_IN_FLIGHT; next_buf = b->buffers[next_idx]; /* Advance to the next buffer for the next callback */ b->prod_i = (next_idx + 1) % b->num_buffers; log_verbose("%s worker: buf[%u] = full, buf[%u] = in_flight\n", worker2str(s), samples_idx, next_idx); } else { /* TODO propagate back the RX Overrun to the sync_rx() caller */ log_debug("RX overrun @ buffer %u\r\n", samples_idx); next_buf = samples; b->resubmit_count = s->stream_config.num_xfers - 1; } } else { /* We're still recovering from an overrun at this point. Just * turn around and resubmit this buffer */ next_buf = samples; b->resubmit_count--; log_verbose("Resubmitting buffer %u (%u resubmissions left)\r\n", samples_idx, b->resubmit_count); } MUTEX_UNLOCK(&b->lock); return next_buf; } static void *tx_callback(struct bladerf *dev, struct bladerf_stream *stream, struct bladerf_metadata *meta, void *samples, size_t num_samples, void *user_data) { unsigned int requests; /* Pending requests */ unsigned int completed_idx; /* Index of completed buffer */ struct bladerf_sync *s = (struct bladerf_sync *)user_data; struct sync_worker *w = s->worker; struct buffer_mgmt *b = &s->buf_mgmt; void *ret = BLADERF_STREAM_NO_DATA; /* Check if the caller has requested us to shut down. We'll keep the * SHUTDOWN bit set through our transition into the IDLE state so we * can act on it there. */ MUTEX_LOCK(&w->request_lock); requests = w->requests; MUTEX_UNLOCK(&w->request_lock); if (requests & SYNC_WORKER_STOP) { log_verbose("%s worker: Got STOP request upon entering callback. " "Ending stream.\r\n", worker2str(s)); return NULL; } /* The initial set of callbacks will do not provide us with any * completed sample buffers */ if (samples != NULL) { MUTEX_LOCK(&b->lock); /* Mark the completed buffer as being empty */ completed_idx = sync_buf2idx(b, samples); assert(b->status[completed_idx] == SYNC_BUFFER_IN_FLIGHT); b->status[completed_idx] = SYNC_BUFFER_EMPTY; pthread_cond_signal(&b->buf_ready); /* If the callback is assigned to be the submitter, there are * buffers pending submission */ if (b->submitter == SYNC_TX_SUBMITTER_CALLBACK) { assert(b->cons_i != BUFFER_MGMT_INVALID_INDEX); if (b->status[b->cons_i] == SYNC_BUFFER_FULL) { /* This buffer is ready to ship out ("consume") */ log_verbose("%s: Submitting deferred buf[%u]\n", __FUNCTION__, b->cons_i); ret = b->buffers[b->cons_i]; /* This is actually # of 32bit DWORDs for PACKET_META */ meta->actual_count = b->actual_lengths[b->cons_i]; b->status[b->cons_i] = SYNC_BUFFER_IN_FLIGHT; b->cons_i = (b->cons_i + 1) % b->num_buffers; } else { log_verbose("%s: No deferred buffer available. " "Assigning submitter=FN\n", __FUNCTION__); b->submitter = SYNC_TX_SUBMITTER_FN; b->cons_i = BUFFER_MGMT_INVALID_INDEX; } } MUTEX_UNLOCK(&b->lock); log_verbose("%s worker: Buffer %u emptied.\r\n", worker2str(s), completed_idx); } return ret; } int sync_worker_init(struct bladerf_sync *s) { int status = 0; s->worker = (struct sync_worker *)calloc(1, sizeof(*s->worker)); if (s->worker == NULL) { status = BLADERF_ERR_MEM; goto worker_init_out; } s->worker->state = SYNC_WORKER_STATE_STARTUP; s->worker->err_code = 0; s->worker->cb = (s->stream_config.layout & BLADERF_DIRECTION_MASK) == BLADERF_RX ? rx_callback : tx_callback; status = async_init_stream( &s->worker->stream, s->dev, s->worker->cb, &s->buf_mgmt.buffers, s->buf_mgmt.num_buffers, s->stream_config.format, s->stream_config.samples_per_buffer, s->stream_config.num_xfers, s); if (status != 0) { log_debug("%s worker: Failed to init stream: %s\n", worker2str(s), bladerf_strerror(status)); goto worker_init_out; } status = async_set_transfer_timeout( s->worker->stream, uint_max(s->stream_config.timeout_ms, BULK_TIMEOUT_MS)); if (status != 0) { log_debug("%s worker: Failed to set transfer timeout: %s\n", worker2str(s), bladerf_strerror(status)); goto worker_init_out; } MUTEX_INIT(&s->worker->state_lock); MUTEX_INIT(&s->worker->request_lock); status = pthread_cond_init(&s->worker->state_changed, NULL); if (status != 0) { log_debug("%s worker: pthread_cond_init(state_changed) failed: %d\n", worker2str(s), status); status = BLADERF_ERR_UNEXPECTED; goto worker_init_out; } status = pthread_cond_init(&s->worker->requests_pending, NULL); if (status != 0) { log_debug("%s worker: pthread_cond_init(requests_pending) failed: %d\n", worker2str(s), status); status = BLADERF_ERR_UNEXPECTED; goto worker_init_out; } status = pthread_create(&s->worker->thread, NULL, sync_worker_task, s); if (status != 0) { log_debug("%s worker: pthread_create failed: %d\n", worker2str(s), status); status = BLADERF_ERR_UNEXPECTED; goto worker_init_out; } /* Wait until the worker thread has initialized and is ready to go */ status = sync_worker_wait_for_state(s->worker, SYNC_WORKER_STATE_IDLE, 1000); if (status != 0) { log_debug("%s worker: sync_worker_wait_for_state failed: %d\n", worker2str(s), status); status = BLADERF_ERR_TIMEOUT; goto worker_init_out; } worker_init_out: if (status != 0) { free(s->worker); s->worker = NULL; } return status; } void sync_worker_deinit(struct sync_worker *w, pthread_mutex_t *lock, pthread_cond_t *cond) { int status; if (w == NULL) { log_debug("%s called with NULL ptr\n", __FUNCTION__); return; } log_verbose("%s: Requesting worker %p to stop...\n", __FUNCTION__, w); sync_worker_submit_request(w, SYNC_WORKER_STOP); if (lock != NULL && cond != NULL) { MUTEX_LOCK(lock); pthread_cond_signal(cond); MUTEX_UNLOCK(lock); } status = sync_worker_wait_for_state(w, SYNC_WORKER_STATE_STOPPED, 3000); if (status != 0) { log_warning("Timed out while stopping worker. Canceling thread.\n"); pthread_cancel(w->thread); } pthread_join(w->thread, NULL); log_verbose("%s: Worker joined.\n", __FUNCTION__); async_deinit_stream(w->stream); free(w); } void sync_worker_submit_request(struct sync_worker *w, unsigned int request) { MUTEX_LOCK(&w->request_lock); w->requests |= request; pthread_cond_signal(&w->requests_pending); MUTEX_UNLOCK(&w->request_lock); } int sync_worker_wait_for_state(struct sync_worker *w, sync_worker_state state, unsigned int timeout_ms) { int status = 0; struct timespec timeout_abs; const int nsec_per_sec = 1000 * 1000 * 1000; if (timeout_ms != 0) { const unsigned int timeout_sec = timeout_ms / 1000; status = clock_gettime(CLOCK_REALTIME, &timeout_abs); if (status != 0) { return BLADERF_ERR_UNEXPECTED; } timeout_abs.tv_sec += timeout_sec; timeout_abs.tv_nsec += (timeout_ms % 1000) * 1000 * 1000; if (timeout_abs.tv_nsec >= nsec_per_sec) { timeout_abs.tv_sec += timeout_abs.tv_nsec / nsec_per_sec; timeout_abs.tv_nsec %= nsec_per_sec; } MUTEX_LOCK(&w->state_lock); status = 0; while (w->state != state && status == 0) { status = pthread_cond_timedwait(&w->state_changed, &w->state_lock, &timeout_abs); } MUTEX_UNLOCK(&w->state_lock); } else { MUTEX_LOCK(&w->state_lock); while (w->state != state) { log_verbose(": Waiting for state change, current = %d\n", w->state); status = pthread_cond_wait(&w->state_changed, &w->state_lock); } MUTEX_UNLOCK(&w->state_lock); } if (status != 0) { log_debug("%s: Wait on state change failed: %s\n", __FUNCTION__, strerror(status)); if (status == ETIMEDOUT) { status = BLADERF_ERR_TIMEOUT; } else { status = BLADERF_ERR_UNEXPECTED; } } return status; } sync_worker_state sync_worker_get_state(struct sync_worker *w, int *err_code) { sync_worker_state ret; MUTEX_LOCK(&w->state_lock); ret = w->state; if (err_code) { *err_code = w->err_code; w->err_code = 0; } MUTEX_UNLOCK(&w->state_lock); return ret; } static void set_state(struct sync_worker *w, sync_worker_state state) { MUTEX_LOCK(&w->state_lock); w->state = state; pthread_cond_signal(&w->state_changed); MUTEX_UNLOCK(&w->state_lock); } static sync_worker_state exec_idle_state(struct bladerf_sync *s) { sync_worker_state next_state = SYNC_WORKER_STATE_IDLE; unsigned int requests; unsigned int i; MUTEX_LOCK(&s->worker->request_lock); while (s->worker->requests == 0) { log_verbose("%s worker: Waiting for pending requests\n", worker2str(s)); pthread_cond_wait(&s->worker->requests_pending, &s->worker->request_lock); } requests = s->worker->requests; s->worker->requests = 0; MUTEX_UNLOCK(&s->worker->request_lock); if (requests & SYNC_WORKER_STOP) { log_verbose("%s worker: Got request to stop\n", worker2str(s)); next_state = SYNC_WORKER_STATE_SHUTTING_DOWN; } else if (requests & SYNC_WORKER_START) { log_verbose("%s worker: Got request to start\n", worker2str(s)); MUTEX_LOCK(&s->buf_mgmt.lock); if ((s->stream_config.layout & BLADERF_DIRECTION_MASK) == BLADERF_TX) { /* If we've previously timed out on a stream, we'll likely have some * stale buffers marked "in-flight" that have since been cancelled. */ for (i = 0; i < s->buf_mgmt.num_buffers; i++) { if (s->buf_mgmt.status[i] == SYNC_BUFFER_IN_FLIGHT) { s->buf_mgmt.status[i] = SYNC_BUFFER_EMPTY; } } pthread_cond_signal(&s->buf_mgmt.buf_ready); } else { s->buf_mgmt.prod_i = s->stream_config.num_xfers; for (i = 0; i < s->buf_mgmt.num_buffers; i++) { if (i < s->stream_config.num_xfers) { s->buf_mgmt.status[i] = SYNC_BUFFER_IN_FLIGHT; } else if (s->buf_mgmt.status[i] == SYNC_BUFFER_IN_FLIGHT) { s->buf_mgmt.status[i] = SYNC_BUFFER_EMPTY; } } } MUTEX_UNLOCK(&s->buf_mgmt.lock); next_state = SYNC_WORKER_STATE_RUNNING; } else { log_warning("Invalid request value encountered: 0x%08X\n", s->worker->requests); } return next_state; } static void exec_running_state(struct bladerf_sync *s) { int status; status = async_run_stream(s->worker->stream, s->stream_config.layout); log_verbose("%s worker: stream ended with: %s\n", worker2str(s), bladerf_strerror(status)); /* Save off the result of running the stream so we can report what * happened to the API caller */ MUTEX_LOCK(&s->worker->state_lock); s->worker->err_code = status; MUTEX_UNLOCK(&s->worker->state_lock); /* Wake the API-side if an error occurred, so that it can propagate * the stream error code back to the API caller */ if (status != 0) { MUTEX_LOCK(&s->buf_mgmt.lock); pthread_cond_signal(&s->buf_mgmt.buf_ready); MUTEX_UNLOCK(&s->buf_mgmt.lock); } } void *sync_worker_task(void *arg) { sync_worker_state state = SYNC_WORKER_STATE_IDLE; struct bladerf_sync *s = (struct bladerf_sync *)arg; log_verbose("%s worker: task started\n", worker2str(s)); set_state(s->worker, state); log_verbose("%s worker: task state set\n", worker2str(s)); while (state != SYNC_WORKER_STATE_STOPPED) { switch (state) { case SYNC_WORKER_STATE_STARTUP: assert(!"Worker in unexpected state, shutting down. (STARTUP)"); set_state(s->worker, SYNC_WORKER_STATE_SHUTTING_DOWN); break; case SYNC_WORKER_STATE_IDLE: state = exec_idle_state(s); set_state(s->worker, state); break; case SYNC_WORKER_STATE_RUNNING: exec_running_state(s); state = SYNC_WORKER_STATE_IDLE; set_state(s->worker, state); break; case SYNC_WORKER_STATE_SHUTTING_DOWN: log_verbose("%s worker: Shutting down...\n", worker2str(s)); state = SYNC_WORKER_STATE_STOPPED; set_state(s->worker, state); break; case SYNC_WORKER_STATE_STOPPED: assert(!"Worker in unexpected state: STOPPED"); break; default: assert(!"Worker in unexpected state, shutting down. (UNKNOWN)"); set_state(s->worker, SYNC_WORKER_STATE_SHUTTING_DOWN); break; } } return NULL; } bladeRF-2024.05/host/libraries/libbladeRF/src/streaming/sync_worker.h000066400000000000000000000075451457144405000254210ustar00rootroot00000000000000/* * Copyright (C) 2014 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef STREAMING_SYNC_WORKER_H_ #define STREAMING_SYNC_WORKER_H_ #include "host_config.h" #include "sync.h" #include #include #if BLADERF_OS_WINDOWS || BLADERF_OS_OSX #include "clock_gettime.h" #else #include #endif /* Worker lifetime: * * STARTUP --+--> IDLE --> RUNNING --+--> SHUTTING_DOWN --> STOPPED * ^----------------------/ */ /* Request flags */ #define SYNC_WORKER_START (1 << 0) #define SYNC_WORKER_STOP (1 << 1) typedef enum { SYNC_WORKER_STATE_STARTUP, SYNC_WORKER_STATE_IDLE, SYNC_WORKER_STATE_RUNNING, SYNC_WORKER_STATE_SHUTTING_DOWN, SYNC_WORKER_STATE_STOPPED } sync_worker_state; struct sync_worker { pthread_t thread; struct bladerf_stream *stream; bladerf_stream_cb cb; /* These items should be accessed while holding state_lock */ sync_worker_state state; int err_code; MUTEX state_lock; pthread_cond_t state_changed; /* Worker thread uses this to inform a * waiting main thread about a state * change */ /* The requests lock should always be acquired AFTER * the sync->buf_mgmt.lock */ unsigned int requests; pthread_cond_t requests_pending; MUTEX request_lock; }; /** * Create a launch a worker thread. It will enter the IDLE state upon * executing. * * @param s Sync handle containing worker to initialize * * @return 0 on success, BLADERF_ERR_* on failure */ int sync_worker_init(struct bladerf_sync *s); /** * Shutdown and deinitialize * * @param w Worker to deinitialize * @param[in] lock Acquired to signal `cond` if non-NULL * @param[in] cond If non-NULL, this is signaled after requesting the * worker to shut down, waking a potentially blocked * workers. */ void sync_worker_deinit(struct sync_worker *w, pthread_mutex_t *lock, pthread_cond_t *cond); /** * Wait for state change with optional timeout * * @param w Worker to wait for * @param[in] state State to wait for * @param[in] timeout_ms Timeout in ms. 0 implies "wait forever" * * @return 0 on success, BLADERF_ERR_TIMEOUT on timeout, BLADERF_ERR_UNKNOWN on * other errors */ int sync_worker_wait_for_state(struct sync_worker *w, sync_worker_state state, unsigned int timeout_ms); /** * Get the worker's current state. * * @param w Worker to query * @param[out] err_code Stream error code (libbladeRF error code value). * Querying this value will reset the interal error * code value. * * @return Worker's current state */ sync_worker_state sync_worker_get_state(struct sync_worker *w, int *err_code); /** * Submit a request to the worker task * * @param w Worker to send request to * @param[in] request Bitmask of requests to submit */ void sync_worker_submit_request(struct sync_worker *w, unsigned int request); #endif bladeRF-2024.05/host/libraries/libbladeRF/src/version.h.in000066400000000000000000000004401457144405000231400ustar00rootroot00000000000000#ifndef VERSION_H_ #define VERSION_H_ #define LIBBLADERF_VERSION "@VERSION@" // clang-format off #define LIBBLADERF_VERSION_MAJOR @VERSION_INFO_MAJOR@ #define LIBBLADERF_VERSION_MINOR @VERSION_INFO_MINOR@ #define LIBBLADERF_VERSION_PATCH @VERSION_INFO_PATCH@ // clang-format on #endif bladeRF-2024.05/host/libraries/libbladeRF_bindings/000077500000000000000000000000001457144405000217655ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_bindings/matlab/000077500000000000000000000000001457144405000232255ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_bindings/matlab/.gitignore000066400000000000000000000000271457144405000252140ustar00rootroot00000000000000*.i *.so *.dll *.c *.h bladeRF-2024.05/host/libraries/libbladeRF_bindings/matlab/CHANGELOG000066400000000000000000000045031457144405000244410ustar00rootroot00000000000000================================================================================ MATLAB & Simulink libbladeRF Bindings: Change Log Summary For more detailed information, please see the git change log and issue tracker hosted on GitHub: https://github.com/nuand/bladeRF ================================================================================ v1.0.5 (2021-10-04) -------------------------------- * Update MATLAB binds to keep up with libbladeRF v1.0.4 (2020-12-23) -------------------------------- * Update build_thunk() procedure and documentation for compiling MATLAB libbladeRF bindings v1.0.3 (2018-12-21) -------------------------------- * Update bladerf_alloc_image, bladerf_alloc_cal_image, bladerf_image_write function definitions for libbladeRF v2.2.0 v1.0.2 (2018-10-30) -------------------------------- * Add missing BB_TXVGA1_RXLPF loopback option (#478) * Fix tx_gain property handling in simulink (#654) v1.0.1 (2018-08-24) -------------------------------- This version is intended for use with libbladeRF v2.0.1. Changes: * host: libbladeRF: Rename clock select option v1.0.0 (2018-08-13) -------------------------------- This version is intended for use with libbladeRF v2.0.0. Changes: * Add support for bladeRF 2.0 (Micro) products * Change "not supported" (-8) library errors to Matlab warnings temporarily, to permit some grace while others' scripts are updated. * Update bladeRF_XCVR to use new unified gain control * Add bladeRF_Misc for misc measurements and controls * Update bladeRF_rx_gui to support unified gain * Update Simulink block to match libbladeRF v2.0.0 v0.1.3 (2017-02-21) -------------------------------- Changes: * Updates to README.md v0.1.2 (2016-06-29) -------------------------------- This version is intended for use with libbladeRF v1.7.2. Changes: * Fixed incorrect BB_TXLPF_RXLPF loopback mode name in bladeRF_Simulink.m v0.1.1 (2016-01-07) -------------------------------- This version is intended for use with libbladeRF v1.5.1. Changes: * libbladeRF-proto.m now searches the current working directory and MATLABPATH for the neccessary THUNK library file. v0.1.0 (2015-12-31) -------------------------------- This version is intended for use with libbladeRF v1.5.0. Changes: * Initial release of Object-oriented MATLAB bindings and Simulink System Object. bladeRF-2024.05/host/libraries/libbladeRF_bindings/matlab/README.md000066400000000000000000000075321457144405000245130ustar00rootroot00000000000000# MATLAB & Simulink Bindings # This directory provides libbladeRF bindings for [MATLAB](http://www.mathworks.com/products/matlab/) and [Simulink](http://www.mathworks.com/products/simulink/). These bindings are implemented as a thin layer of MATLAB code that utilizes [loadlibrary](http://www.mathworks.com/help/matlab/ref/loadlibrary.html) to load libbladeRF into the MATLAB process and [calllib](http://www.mathworks.com/help/matlab/ref/calllib.html) to execute libbladeRF functions. The various device control and configuration parameters are mapped to accessors methods, which yields a simple and intuitive interface. For example, to open a device and configure its RX and TX frequencies: ``` device = bladeRF(); device.rx.frequency = 915.125e6; device.tx.frequency = 921.700e6; ``` # Before Starting # You will need to generate a thunk file (a compatibility layer for `loadlibrary()`) so that MATLAB can correctly call the libbladeRF functions. Run `help bladeRF.build_thunk` to view instructions on how to have MATLAB build a Thunk file to use in conjunction with libbladeRF. For more information, use the MATLAB `help` and `doc` commands on the files in this directory, as well as on the various object properties contained in these files. # MATLAB Toolbox Requirements # - [Signal Processing Toolbox](https://www.mathworks.com/products/signal.html): required for RX GUI # Files # | Filename | Description | | ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `bladeRF.m` | Top-level object for MATLAB libbladeRF bindings. See `doc bladeRF` for information about the available properties and methods. | | `bladeRF_Simulink.m` | MATLAB System Object implementation for Simulink. This exposes `bladeRF.m` to Simulink, allowing the device to be used to receive, transmit, or operate full duplex. | | `bladeRF_rx_gui.m` | A configurable demo GUI that receives and plots samples in real-time. | | `bladeRF_rx_gui.fig` | GUI layout for `bladeRF_rx_gui.m` | | `bladeRF_XCVR.m` | A submodule of `bladeRF.m` that provides parameter-based access to RX and TX module configuration items. | | `bladeRF_VCTCXO.m` | A submodule of `bladeRF.m` that provides access to the VCTCXO trim DAC settings. | | `bladeRF_IQCorr.m` | A submodule of `bladeRF.m` that provides access to IQ DC offset and gain imbalance correction functionality. | | `bladeRF_StreamConfig.m` | An object that encapsulates bladeRF stream parameters. | | `libbladeRF_proto.m` | This file establishes the bindings and mappings to libbladeRF. | # Supported Versions # These bindings have been tested on MATLAB 2014b and 2015b. Earlier versions may be compatible, but this is not guaranteed. # License # This code is distributed under an [MIT License](../../../../legal/licenses/LICENSE.MIT.nuand). # Trademarks # MATLAB and Simulink are registered trademarks of [The MathWorks, Inc.](http://www.mathworks.com/) bladeRF-2024.05/host/libraries/libbladeRF_bindings/matlab/bladeRF.m000066400000000000000000001153411457144405000247070ustar00rootroot00000000000000% bladeRF MATLAB interface % % This object is a MATLAB wrapper around libbladeRF. As such, much % of the documentation for the libbladeRF API is applicable. It may be % found here: % http://www.nuand.com/libbladeRF-doc % % The below series of steps illustrates how to perform a simple reception. % However, the process for configuring the device for transmission is % largely the same. Note the same device handle may be used to transmit and % receive. % % (1) Open a device handle: % % b = bladeRF('*:serial=43b'); % Open device via first 3 serial # digits % % (2) Setup device parameters. These may be changed while the device % is actively streaming. % % b.rx.frequency = 917.45e6; % b.rx.samplerate = 5e6; % b.rx.bandwidth = 2.5e6; % b.rx.lna = 'MAX'; % b.rx.vga1 = 30; % b.rx.vga2 = 5; % % (3) Setup stream parameters. These may NOT be changed while the device % is streaming. % % b.rx.config.num_buffers = 64; % b.rx.config.buffer_size = 16384; % b.rx.config.num_transfers = 16; % b.rx.timeout_ms = 5000; % % % (4) Start the module % % b.rx.start(); % % (5) Receive 0.250 seconds of samples % % samples = b.receive(0.250 * b.rx.samplerate); % % (6) Cleanup and shutdown by stopping the RX stream and having MATLAB % delete the handle object. % % b.rx.stop(); % clear b; % % % Below is a list of submodules within the bladeRF handle. See the help % text of each of these for the properties and methods exposed by modules. % % See also: bladeRF_XCVR, bladeRF_VCTCXO, bladeRF_StreamConfig, bladeRF_IQCorr % Copyright (c) 2015 Nuand LLC % % Permission is hereby granted, free of charge, to any person obtaining a copy % of this software and associated documentation files (the "Software"), to deal % in the Software without restriction, including without limitation the rights % to use, copy, modify, merge, publish, distribute, sublicense, and/or sell % copies of the Software, and to permit persons to whom the Software is % furnished to do so, subject to the following conditions: % % The above copyright notice and this permission notice shall be included in % all copies or substantial portions of the Software. % % THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR % IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, % FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE % AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER % LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, % OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN % THE SOFTWARE. % %% Top-level bladeRF object classdef bladeRF < handle % Read-only handle properties properties(Access={?bladeRF_XCVR, ?bladeRF_IQCorr, ?bladeRF_VCTCXO, ?bladeRF_Misc}) device % Device handle end properties rx % Receive chain tx % Transmit chain vctcxo % VCTCXO control misc % Misc end properties(Dependent) loopback % Loopback mode. Available options: 'NONE', 'FIRMWARE', 'BB_TXLPF_RXVGA2', 'BB_TXVGA1_RXVGA2', 'BB_TXLPF_RXLPF', 'BB_TXVGA1_RXLPF', 'RF_LNA1', 'RF_LNA2', 'RF_LNA3' end properties(SetAccess=immutable) info % Information about device properties and state versions % Device and library version information xb % Attached expansion board end properties(Access=private) initialized = false; end methods(Static, Hidden) % Test the libbladeRF status code and error out if it is != 0 function check_status(fn, status) if status ~= 0 err_num = num2str(status); err_str = calllib('libbladeRF', 'bladerf_strerror', status); str = [ 'libbladeRF error (' err_num ') in ' fn '(): ' err_str]; if status == -8 warning(str); else error(str); end end end end methods(Static) function [val] = str2lna(str) % Convert RX LNA setting string to its associated numeric value. % % val = bladeRF.str2lna('MAX'); % if strcmpi(str, 'MAX') == 1 val = 6; elseif strcmpi(str, 'MID') == 1 val = 3; elseif strcmpi(str, 'BYPASS') == 1 val = 0; else error('Invalid RX LNA string provided') end end function [major, minor, patch, version_string] = version() % Get the version of this MATLAB libbladeRF wrapper. % % [major, minor, patch, version_string] = bladeRF.version() % major = 2; minor = 4; patch = 0; version_string = char(sprintf("%d.%d.%d", major, minor, patch)); end function [major, minor, patch, version_string] = library_version() % Get the libbladeRF version being used. % % [major, minor, patch, version_string] = bladeRF.library_version() % bladeRF.load_library(); [~, ver_ptr] = bladeRF.empty_version(); calllib('libbladeRF', 'bladerf_version', ver_ptr); major = ver_ptr.Value.major; minor = ver_ptr.Value.minor; patch = ver_ptr.Value.patch; version_string = ver_ptr.Value.describe; end function devs = devices % Probe the system for attached bladeRF devices. % % [device_list] = bladeRF.devices(); % bladeRF.load_library(); pdevlist = libpointer('bladerf_devinfoPtr'); [count, ~] = calllib('libbladeRF', 'bladerf_get_device_list', pdevlist); if count < 0 error('bladeRF:devices', ['Error retrieving devices: ', calllib('libbladeRF', 'bladerf_strerror', count)]); end if count > 0 devs = repmat(struct('backend', [], 'serial', [], 'usb_bus', [], 'usb_addr', [], 'instance', [], 'manufacturer', [], 'product', []), 1, count); for x = 0:(count-1) ptr = pdevlist+x; devs(x+1) = ptr.Value; devs(x+1).serial = char(devs(x+1).serial(1:end-1)); end else devs = []; end calllib('libbladeRF', 'bladerf_free_device_list', pdevlist); end function log_level(level) % Set libbladeRF's log level. % % bladeRF.log_level(level_string) % % Options for level_string are: % 'verbose' % 'debug' % 'info' % 'error' % 'warning' % 'critical' % 'silent' % level = lower(level); switch level case 'verbose' enum_val = 'BLADERF_LOG_LEVEL_VERBOSE'; case 'debug' enum_val = 'BLADERF_LOG_LEVEL_DEBUG'; case 'info' enum_val = 'BLADERF_LOG_LEVEL_INFO'; case 'warning' enum_val = 'BLADERF_LOG_LEVEL_WARNING'; case 'error' enum_val = 'BLADERF_LOG_LEVEL_ERROR'; case 'critical' enum_val = 'BLADERF_LOG_LEVEL_CRITICAL'; case 'silent' enum_val = 'BLADERF_LOG_LEVEL_SILENT'; otherwise error(strcat('Invalid log level: ', level)); end bladeRF.load_library(); calllib('libbladeRF', 'bladerf_log_set_verbosity', enum_val); end function int32 = str2ch(str) % Convert channel string to integer constant % % bladeRF.str2ch(channel_string) % % Options for chanel_string are: % 'BLADERF_MODULE_RX' % 'BLADERF_CHANNEL_RX1' % 'BLADERF_CHANNEL_RX2' % 'BLADERF_MODULE_TX' % 'BLADERF_CHANNEL_TX1' % 'BLADERF_CHANNEL_TX2' % str = upper(str); switch str case 'BLADERF_MODULE_RX' int32 = 0; case 'BLADERF_CHANNEL_RX1' int32 = 0; case 'BLADERF_CHANNEL_RX2' int32 = 2; case 'BLADERF_MODULE_TX' int32 = 1; case 'BLADERF_CHANNEL_TX1' int32 = 1; case 'BLADERF_CHANNEL_TX2' int32 = 3; otherwise error('Invalid channel string: "%s"', str); end end function build_thunk % Build the MATLAB thunk library for use with the bladeRF MATLAB wrapper % % bladeRF.build_thunk(); % % This function is intended to provide developers with the means to % regenerate the libbladeRF_thunk_. files. % Users of pre-built binaries need not concern themselves with this % function. % % Use of this function requires that: % - The system contains a MATLAB-compatible compiler % - Any required libraries, DLLs, headers, etc. are in the search path or current working directory. % % For Windows users, the simplest approach is to copy the following % to this directory: % - libbladeRF.h % - bladeRF1.h % - bladeRF2.h % - bladeRF.dll % - libusb-1.0.dll and/or CyUSB.dll % - pthreadVC2.dll % % Linux users will need to copy libbladeRF.h, bladeRF1.h, bladeRF2.h to this directory % and add the following #define to libbladeRF.h, after "#define BLADERF_H_" or "#define LIBBLADERF_H" % % #define MATLAB_LINUX_THUNK_BUILD_ % if libisloaded('libbladeRF') == true unloadlibrary('libbladeRF'); end arch = computer('arch'); this_dir = pwd; proto_output = 'delete_this_file'; if size(dir('*bladeRF*.h'), 1) < 3 help bladeRF.build_thunk warning('Ensure libbladeRF.h, bladeRF1.h, and bladeRF2.h exist in this directory. Please review instructions.') return end switch arch case 'win64' [notfound, warnings] = loadlibrary('bladeRF', 'libbladeRF.h', 'includepath', this_dir, 'addheader', 'stdbool.h', 'addheader', 'bladeRF1.h', 'addheader', 'bladeRF2.h', 'alias', 'libbladeRF', 'notempdir', 'mfilename', proto_output); case 'glnxa64' hnd = fopen('libbladeRF.h'); found = false; if hnd > 0 while ~ feof(hnd) if strfind(fgetl(hnd), '#define MATLAB_LINUX_THUNK_BUILD_') == 1 found = true; break; end end fclose(hnd); end if ~ found help bladeRF.build_thunk warning('Could not find required #define in libbladeRF.h . Please review instructions.'); return end [notfound, warnings] = loadlibrary('libbladeRF', 'libbladeRF.h', 'includepath', this_dir, 'addheader', 'stdbool.h', 'addheader', 'bladeRF1.h', 'addheader', 'bladeRF2.h', 'alias', 'libbladeRF', 'notempdir', 'mfilename', proto_output); case 'maci64' [notfound, warnings] = loadlibrary('libbladeRF.dylib', 'libbladeRF.h', 'includepath', this_dir, 'addheader', 'stdbool.h', 'addheader', 'bladeRF1.h', 'addheader', 'bladeRF2.h', 'alias', 'libbladeRF', 'notempdir', 'mfilename', proto_output); otherwise error(strcat('Unsupported architecture: ', arch)) end % Remove the generated protofile that we don't want folks to % use. Our hand-crafted protofile contains workarounds for % loadlibrary() issues that the autogenerated file does not. delete 'delete_this_file.m' if isempty(notfound) == false fprintf('\nMissing functions:\n'); disp(notfound.'); error('Failed to find the above functions in libbladeRF.'); end if isempty(warnings) == false warning('Encountered the following warnings while loading libbladeRF:\n%s\n', warnings); end warning('Restart program after running bladeRF.build_thunk()') if isempty(strfind([path],pwd)) warning('Could not find current directory in path.') warning('Consider saving this directory to path by trying:') warning(' addpath(pwd) ; savepath') end end end methods(Static, Access = private) function constructor_cleanup(obj) if obj.initialized == false calllib('libbladeRF', 'bladerf_close', obj.device); obj.device = []; end end function load_library if libisloaded('libbladeRF') == false arch = computer('arch'); switch arch case 'win64' [notfound, warnings] = loadlibrary('bladeRF', @libbladeRF_proto, 'alias', 'libbladeRF'); case 'glnxa64' [notfound, warnings] = loadlibrary('libbladeRF', @libbladeRF_proto); case 'maci64' [notfound, warnings] = loadlibrary('libbladeRF.dylib', @libbladeRF_proto); otherwise error(strcat('Unsupported architecture: ', arch)) end if isempty(notfound) == false error('Failed to find functions in libbladeRF.'); end if isempty(warnings) == false warning('Encountered the following warnings while loading libbladeRF:\n%s\n', warnings); end end end % Get an empty version structure initialized to known values function [ver, ver_ptr] = empty_version ver = libstruct('bladerf_version'); ver.major = 0; ver.minor = 0; ver.patch = 0; ver.describe = 'Unknown'; ver_ptr = libpointer('bladerf_version', ver); end end methods function obj = bladeRF(devstring, fpga_bitstream, xb) % Create a device handle to the bladeRF specified by devstring. % % device = bladeRF(devstring) % % The syntax for devstring may be found in the libbladeRF % documentation for the bladerf_open() function. If devstring % is not provided or is empty, the first available device will be % used. % % If multiple devices are present, it is helpful to open then via % their serial numbers. This can be done by specifying at least % 3 characters from their serial number: % % device = bladeRF('*:serial=f39') % % Note that there can only be one active handle to a device at any % given time. The device will be closed when all references to the % device handle are cleared from the workspace. % % If FPGA autoloading [1] is not being used to have libbladeRF % automatically load FPGA images, an FPGA bitstream filename must % be provided to the constructor. For example, with a bladeRF x115: % % device = bladeRF(devstring, 'path/to/hostedx115.rbf'); % % [1] https://github.com/Nuand/bladeRF/wiki/FPGA-Autoloading#Host_softwarebased % % To enable an expansion board, the xb parameter should be % specified: % % device = bladeRF(devstring, [], 'xb200'); % % Valid xb arguments are: 'xb100', 'xb200' % bladeRF.load_library(); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Open the device %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Use wildcard empty string if no device string was provided if nargin < 1 devstring = ''; end % Don't attempt to load an FPGA unless specified if nargin < 2 fpga_bitstream = []; end % Don't attempt to attach an expansion board unless specified if nargin < 3 xb = []; end dptr = libpointer('bladerfPtr'); status = calllib('libbladeRF', 'bladerf_open', dptr, devstring); % Check the return value bladeRF.check_status('bladeRF_open', status); % Save off the device pointer obj.device = dptr; % Ensure we close the device handle if we error out anywhere % in this constructor. cleanupObj = onCleanup(@() bladeRF.constructor_cleanup(obj)); if ~isempty(fpga_bitstream) status = calllib('libbladeRF', 'bladerf_load_fpga', ... obj.device, fpga_bitstream); bladeRF.check_status('bladerf_load_fpga', status); end % Verify we have an FPGA loaded before continuing. status = calllib('libbladeRF', ... 'bladerf_is_fpga_configured', obj.device); if status < 0 bladeRF.check_status('bladerf_is_fpga_configured', status); elseif status == 0 error(['No bladeRF FPGA bitstream is loaded. Place one' ... ' in an autoload location, or pass the filename' ... ' to the bladeRF constructor']); end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Populate version information %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% [obj.versions.matlab.major, ... obj.versions.matlab.minor, ... obj.versions.matlab.patch, ... obj.versions.matlab.string ] = bladeRF.version(); [obj.versions.libbladeRF.major, ... obj.versions.libbladeRF.minor, ... obj.versions.libbladeRF.patch, ... obj.versions.libbladeRF.string] = bladeRF.library_version(); % FX3 firmware version [~, ver_ptr] = bladeRF.empty_version(); status = calllib('libbladeRF', 'bladerf_fw_version', dptr, ver_ptr); bladeRF.check_status('bladerf_fw_version', status); obj.versions.firmware.major = ver_ptr.value.major; obj.versions.firmware.minor = ver_ptr.value.minor; obj.versions.firmware.patch = ver_ptr.value.patch; obj.versions.firmware.string = ver_ptr.value.describe; % FPGA version [~, ver_ptr] = bladeRF.empty_version(); status = calllib('libbladeRF', 'bladerf_fpga_version', dptr, ver_ptr); bladeRF.check_status('bladerf_fpga_version', status); obj.versions.fpga.major = ver_ptr.value.major; obj.versions.fpga.minor = ver_ptr.value.minor; obj.versions.fpga.patch = ver_ptr.value.patch; obj.versions.fpga.string = ver_ptr.value.describe; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Populate information %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Serial number and backend interface [status, ~, devinfo] = calllib('libbladeRF', 'bladerf_get_devinfo', dptr, []); bladeRF.check_status('bladerf_get_devinfo', status); obj.info.serial = char(devinfo.serial); switch devinfo.backend case 'BLADERF_BACKEND_LINUX' obj.info.backend = 'Linux kernel driver'; case 'BLADERF_BACKEND_LIBUSB' obj.info.backend = 'libusb'; case 'BLADERF_BACKEND_CYPRESS' obj.info.backend = 'Cypress CyAPI library & CyUSB driver'; otherwise obj.info.backend = devinfop.Value.backend; end % FPGA size fpga_size = 'BLADERF_FPGA_UNKNOWN'; [status, ~, fpga_size] = calllib('libbladeRF', 'bladerf_get_fpga_size', dptr, fpga_size); bladeRF.check_status('bladerf_get_fpga_size', status); switch fpga_size case 'BLADERF_FPGA_40KLE' obj.info.fpga_size = '40 kLE'; obj.info.gen = 1; case 'BLADERF_FPGA_115KLE' obj.info.fpga_size = '115 kLE'; obj.info.gen = 1; case 'BLADERF_FPGA_A4' obj.info.fpga_size = 'A4 49 kLE'; obj.info.gen = 2; case 'BLADERF_FPGA_A5' obj.info.fpga_size = 'A5 77 kLE'; obj.info.gen = 2; case 'BLADERF_FPGA_A9' obj.info.fpga_size = 'A9 301 kLE'; obj.info.gen = 2; end % USB Speed usb_speed = calllib('libbladeRF', 'bladerf_device_speed', dptr); switch usb_speed case 'BLADERF_DEVICE_SPEED_HIGH' obj.info.usb_speed = 'Hi-Speed (2.0)'; case 'BLADERF_DEVICE_SPEED_SUPER' obj.info.usb_speed = 'SuperSpeed (3.0)'; otherwise error(strcat('Unexpected device speed: ', usb_speed)) end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Expansion board %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if isempty(xb) == false switch upper(xb) case 'XB200' xb_val = 'BLADERF_XB_200'; case 'XB100' xb_val = 'BLADERF_XB_100'; otherwise error(['Invalid expansion board name: ' xb]); end status = calllib('libbladeRF', 'bladerf_expansion_attach', obj.device, xb_val); bladeRF.check_status('bladerf_expansion_attach', status); obj.xb = upper(xb); else obj.xb = 'None'; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Misc %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% obj.misc = bladeRF_Misc(obj); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % VCTCXO control %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% obj.vctcxo = bladeRF_VCTCXO(obj); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Create transceiver chain %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% obj.rx = bladeRF_XCVR(obj, 'RX', xb); obj.tx = bladeRF_XCVR(obj, 'TX', xb); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Default loopback mode %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% obj.loopback = 'NONE'; obj.initialized = true; end function [samples, timestamp_out, actual_count, overrun] = receive(obj, num_samples, timeout_ms, timestamp_in) % RX samples immediately or at a future timestamp. % % [samples, timestamp_out, actual_count, overrun] = ... % bladeRF.receive(num_samples, timeout_ms, timestamp_in) % % samples = bladeRF.receive(4096) immediately receives 4096 samples. % % [samples, ~, ~, overrun] = bladeRF.receive(1e6, 3000, 12345678) receives % 1 million samples at RX timestamp 12345678, with a 3 second timeout, % and fetches the overrun flag. % % Preconditions: % The bladeRF receiver has been previously configured via the % parameters in bladeRF.rx.config (the defaults may suffice), % and bladeRF.rx.start() has been called. % % Inputs: % num_samples Number of samples to receive % % timeout_ms Reception operation timeout, in ms. 0 implies no timeout. % Default = 2 * bladeRF.rx.config.timeout_ms % % timestamp_in Timestamp to receive sample at. 0 implies "now." Default=0. % % Outputs: % % samples Received complex samples with real and imaginary component % amplitudes within [-1.0, 1.0]. These samples should be % contiguous if `overrun` is false. If `overrun` % is true, a discontinuity may have occurred and % only the first `actual_count` samples are % contiguous and valid. % % timestamp_out Timestamp of first sample in `samples`. % % actual_count Set to `num_samples` if no overrun occurred, % or the number of valid samples if an overrun % was detected. % % overrun Set to `true` if an overrun was detected % in this group of samples, and `false` otherwise. % % See also: bladeRF_XCVR/start, bladeRF_StreamConfig if nargin < 3 timeout_ms = 2 * obj.rx.config.timeout_ms; end if nargin < 4 timestamp_in = 0; end s16 = int16(zeros(2*num_samples, 1)); metad = libstruct('bladerf_metadata'); metad.actual_count = 0; metad.reserved = 0; metad.status = 0; if timestamp_in == 0 % BLADERF_META_FLAG_RX_NOW metad.flags = bitshift(1,31); else metad.flags = 0; end metad.timestamp = timestamp_in; pmetad = libpointer('bladerf_metadata', metad); overrun = false; [status, ~, s16, ~] = calllib('libbladeRF', 'bladerf_sync_rx', ... obj.device, ... s16, ... num_samples, ... pmetad, ... timeout_ms); bladeRF.check_status('bladerf_sync_rx', status); actual_count = pmetad.value.actual_count; if actual_count ~= num_samples overrun = true; end % Deinterleve and scale to [-1.0, 1.0). samples = (double(s16(1:2:end)) + double(s16(2:2:end))*1j) ./ 2048.0; timestamp_out = metad.timestamp; end function transmit(obj, samples, timeout_ms, timestamp, sob, eob) % TX samples as part of a stream or as a burst immediately or at a specified timestamp. % % bladeRF.transmit(samples, timeout_ms, timestamp, sob, eob) % % bladeRF.transmit(samples) transmits samples as part of a larger % stream. Under the hood, this is implemented as a single % long-running burst. If successive calls are provided with a % timestamp, the stream will be "padded" with 0+0j up to that % timestamp. % % bladeRF.transmit(samples, 3000, 0, true, true) immediately transmits % a single burst of samples with a 3s timeout. The use of the % sob and eob flags ensures the end of the burst will be % zero padded by libbladeRF in order to hold the TX DAC at % 0+0j after the burst completes. % % Preconditions: % The bladeRF transmitter has been previously configured via % parameters in bladeRF.tx.config (the defaults may suffice), % and bladeRF.tx.start() has been called. % % Inputs: % samples Complex samples to transmit. The amplitude of the real and % imaginary components are expected to be within [-1.0, 1.0]. % % timeout_ms Timeout for transmission function call. 0 implies no timeout. % Default = 2 * bladeRF.tx.config.timeout_ms % % timestamp Timestamp counter value at which to transmit samples. % 0 implies "now." % % sob "Start of burst" flag. This informs libbladeRF to % consider all provided samples to be within a burst % until an eob flags is provided. This value should be % `true` or `false`. % % eob "End of burst" flag. This informs libbladeRF % that after the provided samples, the burst % should be ended. libbladeRF will zero-pad % the remainder of a buffer to ensure that % TX DAC is held at 0+0j after a burst. This value % should be `true` or `false` % % For more information about utilizing timestamps and bursts, see the % "TX with metadata" topic in the libbladeRF API documentation: % % http://www.nuand.com/libbladeRF-doc % % See also: bladeRF_XCVR/start, bladeRF_StreamConfig % if nargin < 3 timeout_ms = 2 * obj.tx.config.timeout_ms; end if nargin < 4 timestamp = 0; end if nargin < 6 % If the user has not specified SOB/EOB flags, we'll assume % they just want to stream samples and not worry about % these flags. We can support this by just starting a burst % that is as long as the transmission is active. sob = obj.tx.sob; eob = obj.tx.eob; % Ensure the next calls are "mid-burst" if obj.tx.sob == true obj.tx.sob = false; end else % The caller has specified the end of the burst. % Reset cached values to be ready to start a burst if % they call transmit() later with no flags. if eob == true obj.tx.sob = true; obj.tx.eob = false; end end assert(islogical(sob), 'Error: sob flag must be a `true` or `false` (logical type)'); assert(islogical(eob), 'Error: eob flag must be a `true` or `false` (logical type)'); metad = libstruct('bladerf_metadata'); metad.actual_count = 0; metad.reserved = 0; metad.status = 0; metad.flag = 0; if timestamp == 0 % Start the burst "Now" if sob == true % BLADERF_META_FLAG_TX_NOW metad.flags = bitor(metad.flags, bitshift(1, 2)); end else % If we're mid-burst, we need to use this flag to tell % libbladeRF that we want it to zero-pad up to the % specified timestamp (or at least until the end of the % current internal buffer). if sob == false % BLADERF_META_FLAG_TX_UPDATE_TIMESTAMP metad.flags = bitor(metad.flags, bitshift(1, 3)); end end metad.timestamp = timestamp; if sob == true % BLADERF_META_FLAG_TX_BURST_START metad.flags = bitor(metad.flags, bitshift(1, 0)); end if eob == true % BLADERF_META_FLAG_TX_BURST_END metad.flags = bitor(metad.flags, bitshift(1, 1)); end pmetad = libpointer('bladerf_metadata', metad); % Interleave and scale. We scale by 2047.0 rather than 2048.0 % here because valid values are only [-2048, 2047]. However, % it's simpler to allow users to assume they can just input % samples within [-1.0, 1.0]. samples = samples .* 2047; s16 = zeros(2 * length(samples), 1, 'int16'); s16(1:2:end) = real(samples); s16(2:2:end) = imag(samples); %fprintf('SOB=%d, EOB=%d, TS=0x%s, flags=0x%s\n', ... % sob, eob, dec2hex(metad.timestamp), dec2hex(metad.flags)); status = calllib('libbladeRF', 'bladerf_sync_tx', ... obj.device, ... s16, ... length(samples), ... pmetad, ... timeout_ms * 1000); bladeRF.check_status('bladerf_sync_tx', status); end function delete(obj) % Destructor. Stops all running stream and close the device handle. % % Do not call directly. Clear references to the handle from your % workspace and MATLAB will call this once the last reference is % cleared. %disp('Delete bladeRF called'); if isempty(obj.device) == false obj.rx.stop; obj.tx.stop; calllib('libbladeRF', 'bladerf_close', obj.device); end end function val = peek(obj, dev, addr) % Read from a device register. % % [value] = bladeRF.peek(device, address) % % Device may be one of the following: % 'lms6002d', 'lms6', 'lms' - LMS6002D Transceiver registers % 'si5338', 'si' - Si5338 Clock Generator % switch dev case { 'lms', 'lms6', 'lms6002d' } x = uint8(0); [status, ~, x] = calllib('libbladeRF', 'bladerf_lms_read', obj.device, addr, x); bladeRF.check_status('bladerf_lms_read', status); val = x; case { 'si', 'si5338' } x = uint8(0); [status, ~, x] = calllib('libbladeRF', 'bladerf_si5338_read', obj.device, addr, x); bladeRF.check_status('bladerf_si5338_read', status); val = x; end end function poke(obj, dev, addr, val) % Write to a device register. % % bladeRF/poke(device, address, value) % % Device may be one of the following: % 'lms6002d', 'lms6', 'lms' - LMS6002D Transceiver registers % 'si5338', 'si' - Si5338 Clock Generator % switch dev case { 'lms', 'lms6', 'lms6002d' } status = calllib('libbladeRF', 'bladerf_lms_write', obj.device, addr, val); bladeRF.check_status('bladerf_lms_write', status); case { 'si', 'si5338' } status = calllib('libbladeRF', 'bladerf_si5338_write', obj.device, addr, val); bladeRF.check_status('bladerf_si5338_write', status); end end function set.loopback(obj, mode) switch upper(mode) case 'NONE' case 'FIRMWARE' case 'BB_TXLPF_RXVGA2' case 'BB_TXVGA1_RXVGA2' case 'BB_TXLPF_RXLPF' case 'BB_TXVGA1_RXLPF' case 'RF_LNA1' case 'RF_LNA2' case 'RF_LNA3' case 'RFIC_BIST' otherwise error(['Invalid loopback mode: ' mode]); end mode_val = [ 'BLADERF_LB_' mode ]; status = calllib('libbladeRF', 'bladerf_set_loopback', obj.device, mode_val); bladeRF.check_status('bladerf_set_loopback', status); end function mode = get.loopback(obj) mode = 0; [status, ~, mode] = calllib('libbladeRF', 'bladerf_get_loopback', obj.device, mode); bladeRF.check_status('bladerf_set_loopback', status); mode = strrep(mode, 'BLADERF_LB_', ''); end function calibrate(obj, module) % Perform the specified calibration. % % RX and TX should not be running when this is done. % % bladeRF/calibrate(module) % % Where `module` is one of: % - 'LPF_TUNING' - Calibrate the DC offset of the LPF Tuning module % - 'RX_LPF' - Calibrate the DC offset of the RX LPF % - 'TX_LPF' - Calibrate the DC offset of the TX LPF % - 'RXVGA2' - Calibrate the DC offset of RX VGA2 % - 'ALL' - Perform all of the above % if obj.rx.running == true || obj.tx.running == true error('Calibration cannot be performed while the device is streaming.') end if nargin < 2 module = 'ALL'; end module = strcat('BLADERF_DC_CAL_', upper(module)); switch module case { 'BLADERF_DC_CAL_LPF_TUNING', ... 'BLADERF_DC_CAL_RX_LPF', ... 'BLADERF_DC_CAL_RXVGA2', ... 'BLADERF_DC_CAL_TX_LPF' } perform_calibration(obj, module); case { 'BLADERF_DC_CAL_ALL' } perform_calibration(obj, 'BLADERF_DC_CAL_LPF_TUNING'); perform_calibration(obj, 'BLADERF_DC_CAL_RX_LPF'); perform_calibration(obj, 'BLADERF_DC_CAL_RXVGA2'); perform_calibration(obj, 'BLADERF_DC_CAL_TX_LPF'); otherwise error(['Invalid module specified: ' module]) end end end methods(Access = private) function perform_calibration(obj, cal) if strcmpi(cal, 'BLADERF_DC_CAL_TX_LPF') == true samplerate_backup = obj.tx.samplerate; config_backup = obj.tx.config; loopback_backup = obj.loopback; if obj.info.gen==1 obj.loopback = 'BB_TXVGA1_RXVGA2'; else obj.loopback = 'FIRMWARE' end obj.tx.config.num_buffers = 16; obj.tx.config.num_transfers = 8; obj.tx.config.buffer_size = 8192; obj.tx.samplerate = 3e6; dummy_samples = zeros(obj.tx.config.buffer_size * obj.tx.config.num_buffers, 1); obj.tx.start(); obj.transmit(dummy_samples); obj.tx.stop(); obj.tx.config = config_backup; obj.tx.samplerate = samplerate_backup; obj.loopback = loopback_backup; end status = calllib('libbladeRF', 'bladerf_calibrate_dc', obj.device, cal); bladeRF.check_status('bladerf_calibrate_dc', status); end end end bladeRF-2024.05/host/libraries/libbladeRF_bindings/matlab/bladeRF_IQCorr.m000066400000000000000000000700201457144405000261200ustar00rootroot00000000000000% bladeRF IQ corrections for DC offset and IQ imbalance % % This is a submodule of the bladeRF object. It is not intended to be accessed % directly, but through a top-level handle to a bladeRF object. % % % Copyright (c) 2015 Nuand LLC % % Permission is hereby granted, free of charge, to any person obtaining a copy % of this software and associated documentation files (the "Software"), to deal % in the Software without restriction, including without limitation the rights % to use, copy, modify, merge, publish, distribute, sublicense, and/or sell % copies of the Software, and to permit persons to whom the Software is % furnished to do so, subject to the following conditions: % % The above copyright notice and this permission notice shall be included in % all copies or substantial portions of the Software. % % THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR % IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, % FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE % AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER % LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, % OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN % THE SOFTWARE. % % IQ Corrections for DC offset and gain/phase imbalance classdef bladeRF_IQCorr < handle properties(Access = private) bladerf module rx_tuned_low % Flag used when performing TX DC cal. Indicates F_RX < F_TX. end properties(Dependent = true) dc_i % I channel DC offset compensation. Valid range is [-2048, 2048]. dc_q % Q channel DC offset compensation. Valid range is [-2048, 2048]. gain % IQ imbalance gain compensation. Valid range is [-1.0, 1.0]. phase % IQ imbalance phase compensation. Valid range is [-10.0, 10.0] degrees. end properties(Constant, Access = private) rx_dc_cal_samplerate = 3e6; rx_dc_cal_bw = 1.5e6; % Filter used to isolate contribution of TX LO leakage in received % signal. 15th order Equiripple FIR with Fs=4e6, Fpass=1, Fstop=1e6 tx_cal_filt = [ ... 0.000327949366768 0.002460188536582 0.009842382390924 ... 0.027274728394777 0.057835200476419 0.098632713294830 ... 0.139062540460741 0.164562494987592 0.164562494987592 ... 0.139062540460741 0.098632713294830 0.057835200476419 ... 0.027274728394777 0.009842382390924 0.002460188536582 ... 0.000327949366768 ]; tx_dc_cal_samplerate = 4e6; tx_dc_cal_tx_bw = 1.5e6; tx_dc_cal_rx_bw = 3e6; tx_dc_cal_lna = 'MAX'; tx_dc_cal_rxvga1 = 25; tx_dc_cal_rxvga2 = 0; tx_dc_cal_rx_cfg = bladeRF_StreamConfig(64, 16384, 16, 5000); end methods % Constructor function obj = bladeRF_IQCorr(dev, module, dc_i, dc_q, phase, gain) obj.bladerf = dev; obj.module = module; obj.dc_i = dc_i; obj.dc_q = dc_q; obj.phase = phase; obj.gain = gain; end % Set I channel DC offset correction value function set.dc_i(obj, val) if val < -2048 || val > 2048 error('DC offset correction value for I channel must be within [-2048, 2048].'); end [status, ~] = calllib('libbladeRF', 'bladerf_set_correction', ... obj.bladerf.device, ... bladeRF.str2ch(obj.module), ... 'BLADERF_CORR_DCOFF_I', ... int16(val)); bladeRF.check_status('bladerf_set_correction:dc_i', status); %fprintf('Set %s I DC offset correction: %d\n', obj.module, val); end % Set Q channel DC offset correction value function set.dc_q(obj, val) if val < -2048 || val > 2048 error('DC offset correction value for Q channel must be within [-2048, 2048].'); end [status, ~] = calllib('libbladeRF', 'bladerf_set_correction', ... obj.bladerf.device, ... bladeRF.str2ch(obj.module), ... 'BLADERF_CORR_DCOFF_Q', ... int16(val)); bladeRF.check_status('bladerf_set_correction:dc_q', status); %fprintf('Set %s Q DC offset correction: %d\n', obj.module, val); end % Read current I channel DC offset correction value function val = get.dc_i(obj) val = int16(0); [status, ~, val] = calllib('libbladeRF', 'bladerf_get_correction', ... obj.bladerf.device, ... bladeRF.str2ch(obj.module), ... 'BLADERF_CORR_DCOFF_I', ... val); bladeRF.check_status('bladerf_get_correction:dc_i', status); %fprintf('Read %s I DC offset: %d\n', obj.module, val); end % Read current Q channel DC offset correction value function val = get.dc_q(obj) val = int16(0); [status, ~, val] = calllib('libbladeRF', 'bladerf_get_correction', ... obj.bladerf.device, ... bladeRF.str2ch(obj.module), ... 'BLADERF_CORR_DCOFF_Q', ... val); bladeRF.check_status('bladerf_get_correction:dc_q', status); %fprintf('Read %s Q DC offset: %d\n', obj.module, val); end % Set phase correction value function set.phase(obj, val_deg) if val_deg < -10 || val_deg > 10 error('Phase correction value must be within [-10, 10] degrees.'); end val_counts = round((val_deg * 4096 / 10)); [status, ~] = calllib('libbladeRF', 'bladerf_set_correction', ... obj.bladerf.device, ... bladeRF.str2ch(obj.module), ... 'BLADERF_CORR_PHASE', ... val_counts); bladeRF.check_status('bladerf_set_correction:phase', status); %fprintf('Set %s phase correction: %f (%d)\n', obj.module, val_deg, val_counts); end % Read current phase correction value function val_deg = get.phase(obj) val_counts = int16(0); [status, ~, x] = calllib('libbladeRF', 'bladerf_get_correction', ... obj.bladerf.device, ... bladeRF.str2ch(obj.module), ... 'BLADERF_CORR_PHASE', ... val_counts); bladeRF.check_status('bladerf_get_correction:phase', status); val_deg = double(x) / (4096 / 10); %fprintf('Read %s phase correction: %f (%d)\n', obj.module, val_deg, val_counts); end % Set an IQ gain correction value function set.gain(obj, val) if val < -1.0 || val > 1.0 error('Gain correction value must be within [-1.0, 1.0]'); end val = val * 4096; [status, ~] = calllib('libbladeRF', 'bladerf_set_correction', ... obj.bladerf.device, ... bladeRF.str2ch(obj.module), ... 'BLADERF_CORR_GAIN', ... int16(val)); bladeRF.check_status('bladerf_set_correction:gain', status); %fprintf('Set %s IQ gain correction value: %d\n', obj.module, val); end % Read the current IQ gain correction value function val_dbl = get.gain(obj) val = int16(0); [status, ~, val] = calllib('libbladeRF', 'bladerf_get_correction', ... obj.bladerf.device, ... bladeRF.str2ch(obj.module), ... 'BLADERF_CORR_GAIN', ... val); bladeRF.check_status('bladerf_get_correction:gain', status); val_dbl = double(val) / 4096.0; %fprintf('Read %s IQ gain correction value: %d\n', obj.module, val_dbl); end function results = auto_dc(obj, freq_list, print_status) % Compute DC correction values for the specified frequencies. % % bladeRF/calibrate('ALL') should be run prior to this function. % % results = bladeRF_IQCorr/auto_dc(frequencies, print status); % % frequencies - One or more frequencies to calculate DC correction values for. % If not specified, the current frequency is used. % % print_status - If set to `true`, this will print a status % messages. Defaults to `false`. % % results - This is a matrix that has one row per frequency % in freq_list. The elements in columns are: % [ i_corr q_corr i_err q_err ] % % Where i_corr and q_corr are the computed % correction values, and i_err and q_err are % estimated error values. % % Examples % % For a single frequency: % % >> device.rx.corrections.auto_dc(920e6) % ans = % 316.0000 284.0000 0.0003 0.0008 % % % For multiple frequencies: % % >> rxcal(b, [433e6 921e6 2.415e9], true) % Running RX DC calibration for F=433000000 % Running RX DC calibration for F=921000000 % Running RX DC calibration for F=2415000000 % % ans = % 263.0000 39.0000 0.0007 0.0005 % 311.0000 247.0000 0.0003 0.0001 % 278.0000 534.0000 0.0009 0.0006 % if obj.bladerf.rx.running == true || obj.bladerf.tx.running == true error('This operation requires that the device not be actively streaming.'); end if nargin < 3 print_status = false; end if strcmp(obj.module, 'BLADERF_MODULE_TX') == true if nargin < 2 || isempty(freq_list) freq_list = [obj.bladerf.tx.frequency]; end if nargin < 4 external_loopback = false; end results = obj.tx_auto_dc(freq_list, print_status, external_loopback); else if nargin < 2 || isempty(freq_list) freq_list = [obj.bladerf.rx.frequency]; end results = obj.rx_auto_dc(freq_list, print_status); end end end methods (Static, Access = private) function [sig] = fs4_mix(sig, shift_left) if nargin < 2 % "Shift left" in the freq domain. Mix with -Fs/4. shift_left = true; end if shift_left == true m_inc = 1; else m_inc = -1; end m = 0; for n = 1:length(sig); switch m case 0 sig(n) = real(sig(n)) + 1j * imag(sig(n)); case 1 sig(n) = imag(sig(n)) + 1j * -real(sig(n)); case 2 sig(n) = -real(sig(n)) + 1j * -imag(sig(n)); case 3 sig(n) = -imag(sig(n)) + 1j * real(sig(n)); end m = mod(m + m_inc, 4); end end end methods (Access = private) function [samples, ts] = rx_samples(obj, ts_in, count, n_inc) retry = 0; max_retries = 10; overrun = true; dev = obj.bladerf; ts = ts_in; while overrun == true && retry < max_retries [samples, ~, ~, overrun] = dev.receive(count, 1000, ts); if overrun fprintf('Got an overrun. Retrying...'); ts = ts + count + 5 * n_inc; retry = retry + 1; end end if retry >= max_retries error('Overrun limit occurred while receving samples.') end ts = ts + count + n_inc; end function results = rx_auto_dc(obj, freq_list, print_status) dev = obj.bladerf; backup.samplerate = dev.rx.samplerate; backup.bandwidth = dev.rx.bandwidth; backup.config = dev.rx.config; backup.tx_freq = dev.tx.frequency; results = zeros(length(freq_list), 4); if nargin < 3 print_status = false; end dev.rx.samplerate = obj.rx_dc_cal_samplerate; dev.rx.bandwidth = obj.rx_dc_cal_bw; dev.rx.config.num_buffers = 64; dev.rx.config.buffer_size = 16384; dev.rx.config.num_transfers = 16; dev.rx.config.timeout_ms = 1000; % Number of samples between each reception t_inc = 0.015 * dev.rx.samplerate; % Number of samples per reception count = 0.005 * dev.rx.samplerate; % Timeout value, in ms. timeout = 2 * dev.rx.config.timeout_ms; dev.rx.start(); % Get results for each frequency in the list. for f = 1:length(freq_list) rx_freq = freq_list(f); if print_status fprintf('Running RX DC calibration for F_RX=%d\n', rx_freq); end dev.rx.frequency = rx_freq; % Move TX away from RX if it is within 1 MHz, per recommendation % from Lime. This is intended to avoid any potential artifacts % resulting from the PLLs interfering with one another. if abs(int32(rx_freq) - int32(dev.tx.frequency)) < 1e6 if abs(int32(rx_freq) - 237.5e6) <= 1e6 dev.tx.frequency = rx_freq + 1e6; else dev.tx.frequency = rx_freq - 1e6; end %fprintf('Changed TX=%d for RX=%d to avoid PLL-induced artifacts.\n', dev.tx.frequency, dev.rx.frequency); end % DC correction values corr_values = [-2048 2048]; means = zeros(1, length(corr_values)); % Get a coarse estimate of the DC correction response t = dev.rx.timestamp + 0.200 * dev.rx.samplerate; for i = 1:length(corr_values) dev.rx.corrections.dc_i = corr_values(i); dev.rx.corrections.dc_q = corr_values(i); [samples, t] = rx_samples(obj, t, count, t_inc); means(i) = mean(samples); end % Guess the correction values that yeilds zero-crossing of the I and Q means. mi = real(means(end) - means(1)) / (corr_values(end) - corr_values(1)); mq = imag(means(end) - means(1)) / (corr_values(end) - corr_values(1)); bi = real(means(1)) - mi * corr_values(1); bq = imag(means(1)) - mq * corr_values(1); corr_guess_i = -bi/mi; corr_guess_q = -bq/mq; % Ensure guesses are a multiple of 32 to avoid confusion % over the fact that values under 32 yield the same result corr_guess_i = int16(corr_guess_i) / 32 * 32; corr_guess_q = int16(corr_guess_q) / 32 * 32; guess_min = min(corr_guess_i, corr_guess_q); guess_min = max(-2048, guess_min); guess_max = max(corr_guess_i, corr_guess_q); guess_max = min(guess_max, 2048); range_low = max(-2048, guess_min - 32 * 8); range_high = min(2048, guess_max + 32 * 8); %fprintf('Guesses: Icorr=%d, Qcorr=%d\n', corr_guess_i, corr_guess_q); %fprintf('Searching %d to %d.\n', range_low, range_high); %figure; plot(corr_values, real(means), 'b-', corr_values, imag(means), 'r-', corr_guess_i, 0, 'bo', corr_guess_q, 0, 'ro'); % Try finer guesses corr_values = range_low:32:range_high; means = zeros(1, length(corr_values)); t = dev.rx.timestamp + 0.050 * dev.rx.samplerate; for i = 1:length(corr_values) dev.rx.corrections.dc_i = corr_values(i); dev.rx.corrections.dc_q = corr_values(i); samples = dev.receive(count, timeout, t); t = t + count + t_inc; means(i) = mean(samples); end %figure; plot(corr_values, real(means), 'b-', corr_values, imag(means), 'r-'); [i_err, i_idx] = min(abs(real(means))); [q_err, q_idx] = min(abs(imag(means))); i_corr = round(corr_values(i_idx)); q_corr = round(corr_values(q_idx)); % Store results results(f, 1) = i_corr; results(f, 2) = q_corr; results(f, 3) = i_err; results(f, 4) = q_err; end dev.rx.stop(); % Restore settings dev.rx.samplerate = backup.samplerate; dev.rx.bandwidth = backup.bandwidth; dev.rx.config = backup.config; if dev.tx.frequency ~= backup.tx_freq dev.tx.frequency = backup.tx_freq; end end function results = tx_auto_dc(obj, freq_list, print_status, external_loopback) dev = obj.bladerf; results = zeros(length(freq_list), 1); % Change to true to view plots showing the cal sweeps show_debug_plots = false; % Backup settings before we change anything backup.rx.frequency = dev.rx.frequency; backup.rx.samplerate = dev.rx.samplerate; backup.rx.bandwidth = dev.rx.bandwidth; backup.rx.config = dev.rx.config; backup.rx.lna = obj.tx_dc_cal_lna; backup.rx.vga1 = obj.tx_dc_cal_rxvga1; backup.rx.vga2 = obj.tx_dc_cal_rxvga2; backup.tx.samplerate = dev.tx.samplerate; backup.tx.bandwidth = dev.tx.bandwidth; backup.tx.config = dev.tx.config; backup.loopback = dev.loopback; % Apply settings used for calibration % Select a sample rate that's low enough to support USB 2.0 on weaker % machines, while ensuring our Fs/4 offset yields ample separation % between the RX and TX PLLs. Fs = obj.tx_dc_cal_samplerate; dev.rx.samplerate = Fs; dev.tx.samplerate = Fs; dev.rx.bandwidth = obj.tx_dc_cal_rx_bw; dev.tx.bandwidth = obj.tx_dc_cal_tx_bw; % This will set based upon the TX frequency curr_loopback = dev.loopback; % Offset between RX and TX frequencies f_offset = Fs/4; % Transmit somcle zeros and allow TX to underrun. When the undderrun % occurrs, the DAC will be held at 0+0j. We can then use RX to measure % the change in the magnitude of the LO leakage as we adjust TX DC % offset correction parameters. dev.tx.config.num_buffers = 2; dev.tx.config.buffer_size = 4096; dev.tx.config.num_transfers = 1; dev.tx.config.timeout_ms = 5000; dev.tx.start(); dev.transmit(zeros(dev.tx.config.buffer_size, 1)); dev.rx.config.num_buffers = 64; dev.rx.config.buffer_size = 16384; dev.rx.config.num_transfers = 32; dev.rx.config.timeout_ms = 5000; dev.rx.start(); for f = 1:length(freq_list) tx_freq = int32(freq_list(f)); % Apply desired TX frequency dev.tx.frequency = tx_freq; if print_status fprintf('Running TX DC calibration for F_TX=%d\n', tx_freq); end % Adjust selected loopback mode, if needed. if external_loopback == false if dev.tx.frequency < 1.5e9 if strcmpi(curr_loopback, 'RF_LNA1') == false curr_loopback = 'RF_LNA1'; dev.loopback = curr_loopback; %fprintf('Setting loopback to RF_LNA1\n'); end elseif dev.tx.frequency >= 1.5e9 if strcmpi(curr_loopback, 'RF_LNA2') == false curr_loopback = 'RF_LNA2'; dev.loopback = curr_loopback; %fprintf('Setting loopback to RF_LNA2\n'); end end end % Set RX to desired offest if abs(tx_freq - 237.5e6) < f_offset rx_freq = tx_freq + f_offset; obj.rx_tuned_low = false; else rx_freq = tx_freq - f_offset; obj.rx_tuned_low = true; end dev.rx.frequency = rx_freq; %fprintf('Set F_RX=%d\n', rx_freq); % Start with the Q correction zeroed while we work on I dev.tx.corrections.dc_q = 0; % Set our first read into the future t = dev.rx.timestamp + 0.125 * Fs; % Search for and apply an initial I correction value [i_corr, i_err, t] = obj.get_tx_corr(t, true, print_status, show_debug_plots); dev.tx.corrections.dc_i = i_corr; if print_status fprintf(' Initial I correction: %d (Error: %d)\n', i_corr, i_err); end % Now do the same for Q... [q_corr, q_err, t] = obj.get_tx_corr(t, false, print_status, show_debug_plots); dev.tx.corrections.dc_q = q_corr; if print_status fprintf(' Q correction: %d (Error: %d)\n', q_corr, q_err); end % Redo and refine our I channel estimate that we've corrected Q [i_corr, i_err] = obj.get_tx_corr(t, true, print_status, show_debug_plots); dev.tx.corrections.dc_i = i_corr; if print_status fprintf(' Final I correction: %d (Error: %d)\n', i_corr, i_err); end % Store results results(f, 1) = i_corr; results(f, 2) = q_corr; results(f, 3) = i_err; results(f, 4) = q_err; end dev.tx.stop(); dev.rx.stop(); % Restore settings dev.loopback = backup.loopback(); dev.tx.samplerate = backup.tx.samplerate; dev.tx.bandwidth = backup.tx.bandwidth; dev.tx.config = backup.tx.config; dev.rx.frequency = backup.rx.frequency; dev.rx.samplerate = backup.rx.samplerate; dev.rx.bandwidth = backup.rx.bandwidth; dev.rx.config = backup.rx.config; dev.rx.lna = backup.rx.lna; dev.rx.vga1 = backup.rx.vga1; dev.rx.vga2 = backup.rx.vga2; end function [avg_mag, t_next] = get_tx_mag(obj, t_rx) n_inc = 0.025 * bladeRF_IQCorr.tx_dc_cal_samplerate; count = 0.005 * bladeRF_IQCorr.tx_dc_cal_samplerate; [samples, t_next] = rx_samples(obj, t_rx, count, n_inc); samples = obj.fs4_mix(samples, obj.rx_tuned_low); samples = filter(obj.tx_cal_filt, 1, samples); avg_mag = mean(abs(samples)); end function [corr_val, err_val, t_next] = get_tx_corr(obj, t, i_channel, print_status, show_plot) if nargin < 5 show_plot = false; end dev = obj.bladerf; % Get a coarse estimate of the correction by finding the % intersect % Get a coarse estimate of the correction by finding the % intersection of lines formed by x1->x2 and x3->x4 % % x1 x2 x3 x4 dc_corr = [ -1800 -1000 1000 1800]; mag = zeros(length(dc_corr), 1); for c = 1:length(dc_corr) if i_channel dev.tx.corrections.dc_i = dc_corr(c); else dev.tx.corrections.dc_q = dc_corr(c); end [mag(c), t] = obj.get_tx_mag(t); end m1 = (mag(2) - mag(1)) / (dc_corr(2) - dc_corr(1)); m2 = (mag(4) - mag(3)) / (dc_corr(4) - dc_corr(3)); b1 = mag(1) - m1 * dc_corr(1); b2 = mag(3) - m2 * dc_corr(3); if m1 < 0 && m2 > 0 % Normal, expected case corr_est = round((b2 - b1) / (m1 - m2)); % Read n_sweep points on either side of our estimate n_sweep = 10; range_min = max(-2048, corr_est - n_sweep * 16); range_max = min(2048, corr_est + n_sweep * 16); corr_sweep = (range_min:16:range_max); else % The frequency & gain combination doesn't allow us % to pull the DC offset to zero. Ideally, we could adjust % our RX gain settings to get a better estimate. % % We'll do a slow scan to at least try to hit a % minimum.local minimum if print_status == true fprintf('Performing full sweep because no turning-point was found.\n'); fprintf(' m1=%f, b1=%f, m2=%f, b2=%f\n', m1, b1, m2, b2); end corr_sweep = (-2048 : 16 : 2048); corr_est = Inf; end % Sweep nearby points to find the minimum sweep_mags = zeros(length(corr_sweep), 1); for c = 1:length(corr_sweep) if i_channel dev.tx.corrections.dc_i = corr_sweep(c); else dev.tx.corrections.dc_q = corr_sweep(c); end [sweep_mags(c), t] = obj.get_tx_mag(t); end % Identify the minimum [err_val, min_idx] = min(sweep_mags); corr_val = corr_sweep(min_idx); % Debug hook for viewing sample points if show_plot if i_channel title_text = 'I'; else title_text = 'Q'; end title_text = [title_text ... ' DC correction sweep\newlineEstimate=' num2str(corr_est) ... ', Result=' num2str(corr_val) ... ', Error=' num2str(err_val)]; figure; plot(corr_sweep, sweep_mags, 'b.', dc_corr, mag, 'rx', corr_val, err_val, 'co'); title(title_text); xlabel('Correction Values'); ylabel('Sample value'); % Re-read and advance timestamp to accout for time we spent % creating the plot. t = dev.rx.timestamp + 0.5 * dev.rx.samplerate; end % Return updated read timestamp t_next = t; end end end bladeRF-2024.05/host/libraries/libbladeRF_bindings/matlab/bladeRF_Misc.m000066400000000000000000000060701457144405000256600ustar00rootroot00000000000000% bladeRF miscellaneous control and configuration. % % This is a submodule of the bladeRF object. It is not intended to be % accessed directly, but through the top-level bladeRF object. % % % Copyright (c) 2018 Nuand LLC % % Permission is hereby granted, free of charge, to any person obtaining a copy % of this software and associated documentation files (the "Software"), to deal % in the Software without restriction, including without limitation the rights % to use, copy, modify, merge, publish, distribute, sublicense, and/or sell % copies of the Software, and to permit persons to whom the Software is % furnished to do so, subject to the following conditions: % % The above copyright notice and this permission notice shall be included in % all copies or substantial portions of the Software. % % THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR % IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, % FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE % AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER % LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, % OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN % THE SOFTWARE. % classdef bladeRF_Misc < handle properties(SetAccess=immutable, Hidden=true) bladerf end properties(SetAccess=immutable) dc_power % Read current power consumption dc_source % Read DC power source temperature % Read current temperature in 'C end properties(Dependent = true) end methods % Read the current device temperature function val = get.temperature(obj) val = single(0); tmp = single(0); [status, ~, val] = calllib('libbladeRF', 'bladerf_get_rfic_temperature', obj.bladerf.device, tmp); bladeRF.check_status('bladerf_get_rfic_temperature', status); end % Read the current DC power consumption function val = get.dc_power(obj) val = single(0); tmp = single(0); [status, ~, val] = calllib('libbladeRF', 'bladerf_get_pmic_register', obj.bladerf.device, 'BLADERF_PMIC_POWER', tmp); bladeRF.check_status('bladerf_get_pmic_register', status); end % Read the DC power supply function val = get.dc_source(obj) source = int32(0); tmp = int32(0); [status, ~, source] = calllib('libbladeRF', 'bladerf_get_power_source', obj.bladerf.device, tmp); bladeRF.check_status('bladerf_get_power_source', status); switch source case 'BLADERF_UNKNOWN' val = 'UNKNOWN'; case 'BLADERF_PS_DC' val = 'DC'; case 'BLADERF_PS_USB_VBUS' val = 'USB'; otherwise val = 'UNKNOWN' end end % Construtor function obj = bladeRF_Misc(dev) obj.bladerf = dev; end end end bladeRF-2024.05/host/libraries/libbladeRF_bindings/matlab/bladeRF_Simulink.m000066400000000000000000000530531457144405000265630ustar00rootroot00000000000000% This class implements a bladeRF MATLAB System Simulink block. % % The bladeRF_Simulink block interfaces with a single bladeRF device and is % capable of utilizing both the transmit and receive paths on the device. The % block properties may be used to enable and use RX, TX, or both. % % To use this block, place a "MATLAB System" block in your Simulink Model and % specify "bladeRF_Simulink" for the system object name. % % Next, configure the device by double clicking on the block. Here, a few % groups of settings are presented: % * Device Device selection and device-wide settings % * RX Configuration RX-specific settings % * TX Configuration TX-specific settings % * Miscellaneous Other library-specific options % % Currently only "Interpreted Execution" is supported. Be sure to select % this in the first tab. % % In the "Device" tab, the "Device Specification String" allows one to specify % which device to use if multiple bladeRFs are connected. For example, to use % a device with a serial number starting with a3f..., a valid device % specification string would be: % % "*:serial=a3f" % % Alternatively, one can specify the "Nth" device if the block<->device % assignments do not matter. For two devices, one could use: % "*:instance=0" and "*:instance=1" % % If left blank, this string will select the first available device. % % To enable the receive output port, check the "Enable Receiver" checkbox in % the "RX Configuration" tab. Similarly to enable the transmit input port, % check the "Enable Transmitter" checkbox in the "TX Configuration" tab. % % See also: bladeRF % Copyright (c) 2015 Nuand LLC % % Permission is hereby granted, free of charge, to any person obtaining a copy % of this software and associated documentation files (the "Software"), to deal % in the Software without restriction, including without limitation the rights % to use, copy, modify, merge, publish, distribute, sublicense, and/or sell % copies of the Software, and to permit persons to whom the Software is % furnished to do so, subject to the following conditions: % % The above copyright notice and this permission notice shall be included in % all copies or substantial portions of the Software. % % THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR % IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, % FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE % AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER % LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, % OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN % THE SOFTWARE. % classdef bladeRF_Simulink < matlab.System & ... matlab.system.mixin.Propagates & ... matlab.system.mixin.CustomIcon %% Properties properties verbosity = 'Info' % libbladeRF verbosity rx_frequency = 915e6; % Frequency (Hz) rx_gain = 0; % RX Gain [-10, 90] rx_agc = 'MANUAL'; % AGC mode tx_frequency = 920e6; % Frequency (Hz) tx_gain = 60; % TX Gain [-10, 90] end properties(Nontunable) device_string = ''; % Device specification string loopback_mode = 'None' % Active loopback mode rx_bandwidth = '1.5'; % LPF Bandwidth (MHz) rx_samplerate = 3e6; % Sample rate rx_num_buffers = 64; % Number of stream buffers to use rx_num_transfers = 16; % Number of USB transfers to use rx_buf_size = 16384; % Size of each stream buffer, in samples (must be multiple of 1024) rx_step_size = 16384; % Number of samples to RX during each simulation step rx_timeout_ms = 5000; % Stream timeout (ms) tx_bandwidth = '1.5'; % LPF Bandwidth (MHz) tx_samplerate = 3e6; % Sample rate tx_num_buffers = 64; % Number of stream buffers to use tx_num_transfers = 16; % Number of USB transfers to use tx_buf_size = 16384; % Size of each stream buffer, in samples (must be multiple of 1024) tx_step_size = 16384; % Number of samples to TX during each simulation step tx_timeout_ms = 5000; % Stream timeout (ms) end properties(Logical, Nontunable) enable_rx = true; % Enable Receiver enable_rx_biastee = false; % Enable RX Biastee enable_overrun = false; % Enable Overrun output enable_tx = false; % Enable Transmitter enable_tx_biastee = false; % Enable TX Biastee enable_underrun = false; % Enable Underrun output (for future use) xb200 = false % Enable use of XB-200 (must be attached) end properties(Hidden, Transient) rx_bandwidthSet = matlab.system.StringSet({ ... '1.5', '1.75', '2.5', '2.75', ... '3', '3.84', '5', '5.5', ... '6', '7', '8.75', '10', ... '12', '14', '20', '28', ... '30', '32', '34', '36', ... '38', '40', '42', '44', ... '46', '48', '50', '52', ... '54', '56', '58', '60', ... '62', '64', '64.11' ... }); tx_bandwidthSet = matlab.system.StringSet({ ... '1.5', '1.75', '2.5', '2.75', ... '3', '3.84', '5', '5.5', ... '6', '7', '8.75', '10', ... '12', '14', '20', '28', ... '30', '32', '34', '36', ... '38', '40', '42', '44', ... '46', '48', '50', '52', ... '54', '56', '58', '60', ... '62', '64', '64.11' ... }); rx_agcSet = matlab.system.StringSet({ 'AUTO', 'MANUAL', ... 'SLOW', 'FAST', 'HYBRID' ... }); loopback_modeSet = matlab.system.StringSet({ 'None', ... 'BB_TXLPF_RXVGA2', 'BB_TXVGA1_RXVGA2', 'BB_TXLPF_RXLPF', ... 'BB_TXVGA1_RXLPF', 'RF_LNA1', 'RF_LNA2', 'RF_LNA3', ... 'Firmware' }); verbositySet = matlab.system.StringSet({ 'Verbose', 'Debug', 'Info', 'Warning', 'Critical', 'Silent' ... }); end properties (Access = private) device = [] % Cache previously set tunable values to avoid querying the device % for all properties when only one changes. curr_rx_frequency curr_rx_lna curr_rx_vga1 curr_rx_vga2 curr_rx_gain curr_rx_agc curr_rx_biastee curr_tx_frequency curr_tx_vga1 curr_tx_vga2 curr_tx_gain curr_tx_biastee end %% Static Methods methods (Static, Access = protected) function groups = getPropertyGroupsImpl device_section_group = matlab.system.display.SectionGroup(... 'Title', 'Device', ... 'PropertyList', {'device_string', 'loopback_mode', 'xb200' } ... ); rx_gain_section = matlab.system.display.Section(... 'Title', 'Gain', ... 'PropertyList', { 'rx_gain', 'enable_rx_biastee', 'rx_agc' } ... ); rx_stream_section = matlab.system.display.Section(... 'Title', 'Stream', ... 'PropertyList', {'rx_num_buffers', 'rx_num_transfers', 'rx_buf_size', 'rx_timeout_ms', 'rx_step_size', } ... ); rx_section_group = matlab.system.display.SectionGroup(... 'Title', 'RX Configuration', ... 'PropertyList', { 'enable_rx', 'enable_overrun', 'rx_frequency', 'rx_samplerate', 'rx_bandwidth' }, ... 'Sections', [ rx_gain_section, rx_stream_section ] ... ); tx_gain_section = matlab.system.display.Section(... 'Title', 'Gain', ... 'PropertyList', { 'tx_gain', 'enable_tx_biastee' } ... ); tx_stream_section = matlab.system.display.Section(... 'Title', 'Stream', ... 'PropertyList', {'tx_num_buffers', 'tx_num_transfers', 'tx_buf_size', 'tx_timeout_ms', 'tx_step_size', } ... ); tx_section_group = matlab.system.display.SectionGroup(... 'Title', 'TX Configuration', ... 'PropertyList', { 'enable_tx', 'enable_underrun', 'tx_frequency', 'tx_samplerate', 'tx_bandwidth' }, ... 'Sections', [ tx_gain_section, tx_stream_section ] ... ); misc_section_group = matlab.system.display.SectionGroup(... 'Title', 'Miscellaneous', ... 'PropertyList', {'verbosity'} ... ); groups = [ device_section_group, rx_section_group, tx_section_group, misc_section_group ]; end function header = getHeaderImpl text = 'This block provides access to a Nuand bladeRF device via libbladeRF MATLAB bindings.'; header = matlab.system.display.Header('bladeRF_Simulink', ... 'Title', 'bladeRF', 'Text', text ... ); end end methods (Access = protected) %% Output setup function count = getNumOutputsImpl(obj) if obj.enable_rx == true if obj.enable_overrun == true count = 2; else count = 1; end else count = 0; end if obj.enable_tx == true && obj.enable_underrun == true count = count + 1; end end function varargout = getOutputNamesImpl(obj) if obj.enable_rx == true varargout{1} = 'RX Samples'; n = 2; if obj.enable_overrun == true varargout{n} = 'RX Overrun'; n = n + 1; end else n = 1; end if obj.enable_tx == true && obj.enable_underrun == true varargout{n} = 'TX Underrun'; end end function varargout = getOutputDataTypeImpl(obj) if obj.enable_rx == true varargout{1} = 'double'; % RX Samples n = 2; if obj.enable_overrun == true varargout{n} = 'logical'; % RX Overrun n = n + 1; end else n = 1; end if obj.enable_tx == true && obj.enable_underrun == true varargout{n} = 'logical'; % TX Underrun end end function varargout = getOutputSizeImpl(obj) if obj.enable_rx == true varargout{1} = [obj.rx_step_size 1]; % RX Samples n = 2; if obj.enable_overrun == true varargout{n} = [1 1]; % RX Overrun n = n + 1; end else n = 1; end if obj.enable_tx == true && obj.enable_underrun == true varargout{n} = [1 1]; % TX Underrun end end function varargout = isOutputComplexImpl(obj) if obj.enable_rx == true varargout{1} = true; % RX Samples n = 2; else n = 1; end if obj.enable_overrun == true varargout{n} = false; % RX Overrun n = n + 1; end if obj.enable_tx == true && obj.enable_underrun == true varargout{n} = false; % TX Underrun end end function varargout = isOutputFixedSizeImpl(obj) if obj.enable_rx == true varargout{1} = true; % RX Samples varargout{2} = true; % RX Overrun n = 3; else n = 1; end if obj.enable_overrun == true end if obj.enable_tx == true && obj.enable_underrun == true varargout{n} = true; % TX Underrun end end %% Input setup function count = getNumInputsImpl(obj) if obj.enable_tx == true count = 1; else count = 0; end end function varargout = getInputNamesImpl(obj) if obj.enable_tx == true varargout{1} = 'TX Samples'; else varargout = {}; end end %% Property and Execution Handlers function icon = getIconImpl(~) icon = sprintf('Nuand\nbladeRF'); end function setupImpl(obj) %% Library setup bladeRF.log_level(obj.verbosity); %% Device setup if obj.xb200 == true xb = 'XB200'; else xb = []; end obj.device = bladeRF(obj.device_string, [], xb); obj.device.loopback = obj.loopback_mode; %% RX Setup obj.device.rx.config.num_buffers = obj.rx_num_buffers; obj.device.rx.config.buffer_size = obj.rx_buf_size; obj.device.rx.config.num_transfers = obj.rx_num_transfers; obj.device.rx.config.timeout_ms = obj.rx_timeout_ms; obj.device.rx.frequency = obj.rx_frequency; %obj.rx_frequency = obj.device.rx.frequency; obj.curr_rx_frequency = obj.device.rx.frequency; obj.device.rx.samplerate = obj.rx_samplerate; obj.device.rx.bandwidth = str2double(obj.rx_bandwidth) * 1e6; obj.device.rx.biastee = obj.enable_rx_biastee; obj.curr_rx_biastee = obj.device.rx.biastee; obj.device.rx.agc = obj.rx_agc; %obj.rx_agc = obj.device.rx.agc; obj.curr_rx_agc = obj.device.rx.agc; if strcmpi(obj.curr_rx_agc, 'manual') obj.device.rx.gain = obj.rx_gain; %obj.rx_gain = obj.device.rx.gain; obj.curr_rx_gain = obj.device.rx.gain; warning([ 'Cannot set RX gain because AGC is set to ' (obj.curr_rx_agc) ' mode']) end %% TX Setup obj.device.tx.config.num_buffers = obj.tx_num_buffers; obj.device.tx.config.buffer_size = obj.tx_buf_size; obj.device.tx.config.num_transfers = obj.tx_num_transfers; obj.device.tx.config.timeout_ms = obj.tx_timeout_ms; obj.device.tx.samplerate = obj.tx_samplerate; obj.device.tx.bandwidth = str2double(obj.tx_bandwidth) * 1e6; obj.device.tx.frequency = obj.tx_frequency; %obj.tx_frequency = obj.device.tx.frequency; obj.curr_tx_frequency = obj.device.tx.frequency; obj.device.tx.biastee = obj.enable_tx_biastee; obj.curr_tx_biastee = obj.device.tx.biastee; obj.device.tx.gain = obj.tx_gain; %obj.tx_gain = obj.device.tx.gain; obj.curr_tx_gain = obj.device.tx.gain; end function releaseImpl(obj) delete(obj.device); end function resetImpl(obj) obj.device.rx.stop(); obj.device.tx.stop(); end % Perform a read of received samples and an 'overrun' array that denotes whether % the associated samples is invalid due to a detected overrun. function varargout = stepImpl(obj, varargin) varargout = {}; if obj.enable_rx == true if obj.device.rx.running == false obj.device.rx.start(); end [rx_samples, ~, ~, rx_overrun] = obj.device.receive(obj.rx_step_size); varargout{1} = rx_samples; varargout{2} = rx_overrun; out_idx = 3; else out_idx = 1; end if obj.enable_tx == true if obj.device.tx.running == false obj.device.tx.start(); end obj.device.transmit(varargin{1}); % Detecting TX Underrun is not yet supported by libbladeRF. % This is for future use. varargout{out_idx} = false; end end function processTunedPropertiesImpl(obj) %% RX Properties if isChangedProperty(obj, 'rx_frequency') && obj.rx_frequency ~= obj.curr_rx_frequency obj.device.rx.frequency = obj.rx_frequency; %obj.rx_frequency = obj.device.rx.frequency; obj.curr_rx_frequency = obj.device.rx.frequency; %disp('Updated RX frequency'); end if isChangedProperty(obj, 'rx_gain') && obj.rx_gain ~= obj.curr_rx_gain obj.device.rx.gain = obj.rx_gain; %obj.rx_gain = obj.device.rx.gain; obj.curr_rx_gain = obj.device.rx.gain; %disp('Updated RX gain'); end if isChangedProperty(obj, 'rx_agc') && obj.rx_agc ~= obj.curr_rx_agc obj.device.rx.agc = obj.rx_agc; %obj.rx_agc = obj.device.rx.agc; obj.curr_rx_agc = obj.device.rx.agc; %disp('Updated RX AGC gain'); end %% TX Properties if isChangedProperty(obj, 'tx_frequency') && obj.tx_frequency ~= obj.curr_tx_frequency obj.device.tx.frequency = obj.tx_frequency; obj.curr_tx_frequency = obj.device.rx.frequency; %disp('Updated TX frequency'); end if isChangedProperty(obj, 'tx_gain') && obj.tx_gain ~= obj.curr_tx_gain obj.device.tx.gain = obj.tx_gain; obj.curr_tx_gain = obj.device.tx.gain; %disp('Updated TX gain'); end end function validatePropertiesImpl(obj) if obj.enable_rx == false && obj.enable_tx == false warning('Neither bladeRF RX or TX is enabled. One or both should be enabled.'); end if isempty(obj.device) tx_min_freq = 0; tx_max_freq = 0; tx_min_sampling = 0; tx_max_sampling = 0; rx_min_freq = 0; rx_max_freq = 0; rx_min_sampling = 0; rx_max_sampling = 0; return else tx_min_freq = obj.device.tx.min_frequency; tx_max_freq = obj.device.tx.max_frequency; tx_min_sampling = obj.device.tx.min_sampling; tx_max_sampling = obj.device.tx.max_sampling; rx_min_freq = obj.device.rx.min_frequency; rx_max_freq = obj.device.rx.max_frequency; rx_min_sampling = obj.device.rx.min_sampling; rx_max_sampling = obj.device.rx.max_sampling; end %% Validate RX properties if obj.rx_num_buffers < 1 error('rx_num_buffers must be > 0.'); end if obj.rx_num_transfers >= obj.rx_num_buffers error('rx_num_transfers must be < rx_num_buffers.'); end if obj.rx_buf_size < 1024 || mod(obj.rx_buf_size, 1024) ~= 0 error('rx_buf_size must be a multiple of 1024.'); end if obj.rx_timeout_ms < 0 error('rx_timeout_ms must be >= 0.'); end if obj.rx_step_size <= 0 error('rx_step_size must be > 0.'); end if obj.rx_samplerate < rx_min_sampling error(['rx_samplerate must be >= ' (num2str(rx_min_sampling)/1e6) ' MHz.']); elseif obj.rx_samplerate > 40e6 error(['rx_samplerate must be <= ' (num2str(rx_max_sampling)/1e6) ' MHz.']); end if obj.rx_frequency < rx_min_freq error(['rx_frequency must be >= ' (num2str(rx_min_freq)/1e6) ' MHz.']); elseif obj.rx_frequency > rx_max_freq error(['rx_frequency must be <= ' (num2str(rx_max_freq)/1e6) ' MHz.']); end %% Validate TX Properties if obj.tx_num_buffers < 1 error('tx_num_buffers must be > 0.'); end if obj.tx_num_transfers >= obj.tx_num_buffers error('tx_num_transfers must be < tx_num_transfers'); end if obj.tx_buf_size < 1024 || mod(obj.tx_buf_size, 1024) ~= 0 error('tx_buf_size must be a multiple of 1024.'); end if obj.tx_timeout_ms < 0 error('tx_timeout_ms must be >= 0.'); end if obj.tx_step_size <= 0 error('tx_step_size must be > 0.'); end if obj.tx_samplerate < 160.0e3 error('tx_samplerate must be >= 160 kHz.'); elseif obj.tx_samplerate > 40e6 error('tx_samplerate must be <= 40 MHz.') end if obj.tx_frequency < tx_min_freq; error(['tx_frequency must be >= ' num2str(tx_min_freq) '.']); elseif obj.tx_frequency > 3.8e9 error('tx_frequency must be <= 3.8 GHz.'); end end end end bladeRF-2024.05/host/libraries/libbladeRF_bindings/matlab/bladeRF_StreamConfig.m000066400000000000000000000100241457144405000273400ustar00rootroot00000000000000% bladeRF stream configuration parameters. % % This is a submodule of the bladeRF object. It is not intended to be % accessed directly, but through the top-level bladeRF object. % % % Copyright (c) 2015 Nuand LLC % % Permission is hereby granted, free of charge, to any person obtaining a copy % of this software and associated documentation files (the "Software"), to deal % in the Software without restriction, including without limitation the rights % to use, copy, modify, merge, publish, distribute, sublicense, and/or sell % copies of the Software, and to permit persons to whom the Software is % furnished to do so, subject to the following conditions: % % The above copyright notice and this permission notice shall be included in % all copies or substantial portions of the Software. % % THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR % IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, % FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE % AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER % LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, % OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN % THE SOFTWARE. % % Configuration of synchronous RX/TX sample stream classdef bladeRF_StreamConfig < handle properties(Access=private) locked end properties num_buffers % Total number of buffers to use in the stream. buffer_size % Size of buffer, in samples. Mus be a multiple of 1024. num_transfers % Number of USB transfers to utilize. Must be < num_buffers. timeout_ms % Stream timeout, in milliseconds. end methods function lock(obj) obj.locked = true; end function unlock(obj) obj.locked = false; end function set.num_buffers(obj, val) if val < 1 error('The stream buffer count must be positive.'); end if obj.locked == false obj.num_buffers = val; else error('Cannot modify num_buffers while streaming.'); end end function set.buffer_size(obj, val) if val < 1024 || mod(val, 1024) ~= 0 error('Stream buffer sizes must be a multiple of 1024.'); end if obj.locked == false obj.buffer_size = val; else error('Cannot modify buffer_size while streaming.'); end end function set.num_transfers(obj, val) if val >= obj.num_buffers error('The number of transfers used in a stream must be < number of buffers.'); end if obj.locked == false obj.num_transfers = val; else error('Cannot modify num_transfers while streaming.'); end end function set.timeout_ms(obj, val) if val < 0 error('Stream timeout must be >= 0'); end if obj.locked == false obj.timeout_ms = val; else error('Cannot modify timeout_ms while streaming'); end end function obj = bladeRF_StreamConfig(num_buffers, buffer_size, num_transfers, timeout_ms) obj.locked = false; if nargin < 1 obj.num_buffers = 64; else obj.num_buffers = num_buffers; end if nargin < 2 obj.buffer_size = 16384; else obj.buffer_size = buffer_size; end if nargin < 3 obj.num_transfers = 16; else obj.num_transfers = num_transfers; end if nargin < 4 obj.timeout_ms = 5000; else obj.timeout_ms = timeout_ms; end end end end bladeRF-2024.05/host/libraries/libbladeRF_bindings/matlab/bladeRF_VCTCXO.m000066400000000000000000000054641457144405000260010ustar00rootroot00000000000000% bladeRF VCTCXO control and configuration. % % This is a submodule of the bladeRF object. It is not intended to be % accessed directly, but through the top-level bladeRF object. % % % Copyright (c) 2015 Nuand LLC % % Permission is hereby granted, free of charge, to any person obtaining a copy % of this software and associated documentation files (the "Software"), to deal % in the Software without restriction, including without limitation the rights % to use, copy, modify, merge, publish, distribute, sublicense, and/or sell % copies of the Software, and to permit persons to whom the Software is % furnished to do so, subject to the following conditions: % % The above copyright notice and this permission notice shall be included in % all copies or substantial portions of the Software. % % THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR % IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, % FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE % AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER % LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, % OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN % THE SOFTWARE. % classdef bladeRF_VCTCXO < handle properties(SetAccess=immutable, Hidden=true) bladerf end properties(SetAccess=immutable) stored_trim % VCTCXO trim DAC value stored in flash end properties(Dependent = true) current_trim % Currently applied VCTCXO trim DAC value. Changes to this value are immediately applied, but do not overwrite the value stored in flash. end methods % Write the current VCTCXO trim DAC value function obj = set.current_trim(obj, val) val_u16 = uint16(val); if val_u16 ~= val error('Provided VCTCXO Trim DAC value is outside allowed range.') end status = calllib('libbladeRF', 'bladerf_dac_write', obj.bladerf.device, val_u16); bladeRF.check_status('bladerf_dac_write', status); end % Read the current VCTCXO trim DAC value function curr = get.current_trim(obj) curr = uint16(0); [status, ~, curr] = calllib('libbladeRF', 'bladerf_dac_read', obj.bladerf.device, curr); bladeRF.check_status('bladerf_dac_read', status); end % Construtor function obj = bladeRF_VCTCXO(dev) obj.bladerf = dev; % Fetch the VCTCXO trim stored in flash stored = uint16(0); [status, ~, stored] = calllib('libbladeRF', 'bladerf_get_vctcxo_trim', obj.bladerf.device, stored); bladeRF.check_status('bladerf_get_vctcxo_trim', status); obj.stored_trim = stored; end end end bladeRF-2024.05/host/libraries/libbladeRF_bindings/matlab/bladeRF_XCVR.m000066400000000000000000000650441457144405000255550ustar00rootroot00000000000000% bladeRF RX/TX control and configuration. % % This is a submodule of the bladeRF object. It is not intended to be % accessed directly, but through the top-level bladeRF object. % % % Copyright (c) 2015 Nuand LLC % % Permission is hereby granted, free of charge, to any person obtaining a copy % of this software and associated documentation files (the "Software"), to deal % in the Software without restriction, including without limitation the rights % to use, copy, modify, merge, publish, distribute, sublicense, and/or sell % copies of the Software, and to permit persons to whom the Software is % furnished to do so, subject to the following conditions: % % The above copyright notice and this permission notice shall be included in % all copies or substantial portions of the Software. % % THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR % IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, % FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE % AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER % LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, % OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN % THE SOFTWARE. % %% Control and configuration of transceiver properties classdef bladeRF_XCVR < handle properties config % Stream configuration. See bladeRF_StreamConfig. corrections % IQ corrections. See bladeRF_IQCorr. end properties(Dependent = true) agc % Enable automatic gain control ['AUTO', 'MANUAL', 'FAST', 'SLOW'] gain % Universal gain setting. This value is standardized to output 0dBm when set to 60. biastee % Control biastee samplerate % Samplerate. Must be within 160 kHz and 40 MHz. A 2-3 MHz minimum is suggested unless external filters are being used. frequency % Frequency. Must be within [237.5 MHz, 3.8 GHz] when no XB-200 is attached, or [0 GHz, 3.8 GHz] when an XB-200 is attached. bandwidth % LPF bandwidth seting. This is rounded to the nearest of the available discrete settings. It is recommended to set this and read back the actual value. vga1 % VGA1 gain. RX range: [5, 30], TX Range: [-35, -4] vga2 % VGA2 gain. RX range: [0, 30], TX range: [0, 25] lna % RX LNA gain. Values: { 'BYPASS', 'MID', 'MAX' } xb200_filter % XB200 Filter selection. Only valid when an XB200 is attached. Options are: '50M', '144M', '222M', 'AUTO_1DB', 'AUTO_3DB', 'CUSTOM' mux % FPGA sample FIFO mux mode. Only valid for RX, with options 'BASEBAND_LMS', '12BIT_COUNTER', '32BIT_COUNTER', 'DIGITAL_LOOPBACK' channel % Channel number end properties(SetAccess = immutable, Hidden=true) bladerf % Associated bladeRF device handle module % Module specifier (as a libbladeRF enum) direction % Module direction: { 'RX', 'TX' } min_frequency % Lower frequency tuning limit max_frequency % Higher frequency tuning limit min_sampling % Lower sampling rate tuning limit max_sampling % Higher sampling rate tuning limit xb200_attached; % Modify behavior due to XB200 being attached end properties(SetAccess = private, Hidden=true) current_channel % Current active channel end properties(SetAccess = private) running % Denotes whether or not the module is enabled to stream samples. timestamp % Provides a coarse readback of the timestamp counter. end properties(Access={?bladeRF}) sob = true % TX Start of Burst (Applicable to TX only.) eob = false % TX end-of-burst flag (Applicable to TX only.) end methods %% Property handling % Samplerate function set.samplerate(obj, val) % Create the holding structures rate = libstruct('bladerf_rational_rate'); actual = libstruct('bladerf_rational_rate'); % Requested rate rate.integer = floor(val); [rate.num, rate.den] = rat(mod(val,1)); % Set the samplerate [status, ~, ~, actual] = calllib('libbladeRF', 'bladerf_set_rational_sample_rate', obj.bladerf.device, bladeRF.str2ch(obj.module), rate, rate); bladeRF.check_status('bladerf_set_rational_sample_rate', status); %fprintf('Set %s samplerate. Requested: %d + %d/%d, Actual: %d + %d/%d\n', ... % obj.direction, ... % rate.integer, rate.num, rate.den, ... % actual.integer, actual.num, actual.den); end function samplerate_val = get.samplerate(obj) rate = libstruct('bladerf_rational_rate'); rate.integer = 0; rate.num = 0; rate.den = 1; % Get the sample rate from the hardware [status, ~, rate] = calllib('libbladeRF', 'bladerf_get_rational_sample_rate', obj.bladerf.device, bladeRF.str2ch(obj.module), rate); bladeRF.check_status('bladerf_get_rational_sample_rate', status); %fprintf('Read %s samplerate: %d + %d/%d\n', ... % obj.direction, rate.integer, rate.num, rate.den); samplerate_val = rate.integer + rate.num / rate.den; end % Frequency function set.frequency(obj, val) [status, ~] = calllib('libbladeRF', 'bladerf_set_frequency', obj.bladerf.device, bladeRF.str2ch(obj.module), val); bladeRF.check_status('bladerf_set_frequency', status); %fprintf('Set %s frequency: %f\n', obj.direction, val); end function freq_val = get.frequency(obj) freq_val = uint32(0); [status, ~, freq_val] = calllib('libbladeRF', 'bladerf_get_frequency', obj.bladerf.device, bladeRF.str2ch(obj.module), freq_val); bladeRF.check_status('bladerf_get_frequency', status); %fprintf('Read %s frequency: %f\n', obj.direction, freq_val); end % Configures the LPF bandwidth on the associated module function set.bandwidth(obj, val) actual = uint32(0); [status, ~, actual] = calllib('libbladeRF', 'bladerf_set_bandwidth', obj.bladerf.device, bladeRF.str2ch(obj.module), val, actual); bladeRF.check_status('bladerf_set_bandwidth', status); %fprintf('Set %s bandwidth. Requested: %f, Actual: %f\n', ... % obj.direction, val, actual) end % Reads the LPF bandwidth configuration on the associated module function bw_val = get.bandwidth(obj) bw_val = uint32(0); [status, ~, bw_val] = calllib('libbladeRF', 'bladerf_get_bandwidth', obj.bladerf.device, bladeRF.str2ch(obj.module), bw_val); bladeRF.check_status('bladerf_get_bandwidth', status); %fprintf('Read %s bandwidth: %f\n', obj.direction, bw_val); end % Configures the automatic gain control setting function set.agc(obj, val) if strcmpi(obj.direction,'RX') == true ch = 'BLADERF_CHANNEL_RX1'; else ch = 'BLADERF_CHANNEL_TX1'; end switch lower(val) case 'auto' agc_val = 'BLADERF_GAIN_DEFAULT'; case 'manual' agc_val = 'BLADERF_GAIN_MGC'; case 'fast' agc_val = 'BLADERF_GAIN_FASTATTACK_AGC'; case 'enable' agc_val = 'BLADERF_GAIN_SLOWATTACK_AGC'; case 'slow' agc_val = 'BLADERF_GAIN_SLOWATTACK_AGC'; case 'hybrid' agc_val = 'BLADERF_GAIN_HYBRID_AGC'; otherwise error(strcat('Invalid AGC setting: ', val)); end [status, ~] = calllib('libbladeRF', 'bladerf_set_gain_mode', obj.bladerf.device, bladeRF.str2ch(ch), agc_val); if status == -8 if obj.bladerf.info.gen == 1 disp('Cannot enable AGC. AGC DC LUT file is missing, run `cal table agc rx'' in bladeRF-cli.') end else bladeRF.check_status('bladerf_set_gain_mode', status); end end % Reads the current automatic gain control setting function val = get.agc(obj) val = int32(0); if strcmpi(obj.direction,'RX') == true ch = 'BLADERF_CHANNEL_RX1'; else ch = 'BLADERF_CHANNEL_TX1'; end tmp = int32(0); [status, ~, mode] = calllib('libbladeRF', 'bladerf_get_gain_mode', obj.bladerf.device, bladeRF.str2ch(ch), tmp); bladeRF.check_status('bladerf_get_gain_mode', status); switch mode case 'BLADERF_GAIN_DEFAULT' val = 'auto'; case 'BLADERF_GAIN_MGC' val = 'manual'; case 'BLADERF_GAIN_FASTATTACK_AGC' val = 'fast'; case 'BLADERF_GAIN_SLOWATTACK_AGC' val = 'slow'; case 'BLADERF_GAIN_HYBRID_AGC' val = 'hybrid'; otherwise error(strcat('Invalid AGC setting: ', val)); end %fprintf('Read %s gain: %d\n', obj.direction, val); end % Configures active channel setting function set.channel(obj, val) if (strcmpi(val,'RX') == true || strcmpi(val, 'RX1') || strcmp(val, 'BLADERF_CHANNEL_RX1')) channel = 'BLADERF_CHANNEL_RX1'; elseif (strcmpi(val, 'RX2') || strcmp(val, 'BLADERF_CHANNEL_RX2')) channel = 'BLADERF_CHANNEL_RX2'; elseif (strcmpi(val,'TX') == true || strcmpi(val, 'TX1') || strcmp(val, 'BLADERF_CHANNEL_TX1')) channel = 'BLADERF_CHANNEL_TX1'; elseif (strcmpi(val, 'TX2') || strcmp(val, 'BLADERF_CHANNEL_TX2')) channel = 'BLADERF_CHANNEL_TX2'; end obj.current_channel = channel; if obj.running [status, ~] = calllib('libbladeRF', 'bladerf_enable_module', ... obj.bladerf.device, ... bladeRF.str2ch(obj.current_channel), ... false); bladeRF.check_status('bladerf_enable_module', status); [status, ~] = calllib('libbladeRF', 'bladerf_enable_module', ... obj.bladerf.device, ... channel, ... true); bladeRF.check_status('bladerf_enable_module', status); end end % Reads the current active channel setting function val = get.channel(obj) val = obj.current_channel end % Configures the universal gain function set.gain(obj, val) if strcmpi(obj.direction,'RX') == true && strcmpi(obj.agc,'manual') == 0 warning(['Cannot set ' obj.direction ' gain when AGC is in ' obj.agc ' mode']) end if strcmpi(obj.direction,'RX') == true ch = 'BLADERF_CHANNEL_RX1'; else ch = 'BLADERF_CHANNEL_TX1'; end [status, ~] = calllib('libbladeRF', 'bladerf_set_gain', obj.bladerf.device, bladeRF.str2ch(ch), val); bladeRF.check_status('bladerf_set_gain', status); end % Reads the current universal gain configuration function val = get.gain(obj) val = int32(0); if strcmpi(obj.direction,'RX') == true ch = 'BLADERF_CHANNEL_RX1'; else ch = 'BLADERF_CHANNEL_TX1'; end tmp = int32(0); [status, ~, val] = calllib('libbladeRF', 'bladerf_get_gain', obj.bladerf.device, bladeRF.str2ch(ch), tmp); bladeRF.check_status('bladerf_get_gain', status); %fprintf('Read %s gain: %d\n', obj.direction, val); end % Configures the gain of VGA1 function set.vga1(obj, val) if strcmpi(obj.direction,'RX') == true [status, ~] = calllib('libbladeRF', 'bladerf_set_rxvga1', obj.bladerf.device, val); else [status, ~] = calllib('libbladeRF', 'bladerf_set_txvga1', obj.bladerf.device, val); end bladeRF.check_status('bladerf_set_vga1', status); %fprintf('Set %s VGA1: %d\n', obj.direction, val); end % Reads the current VGA1 gain configuration function val = get.vga1(obj) if obj.bladerf.info.gen ~= 1 val = 0; return end val = int32(0); if strcmpi(obj.direction,'RX') == true [status, ~, val] = calllib('libbladeRF', 'bladerf_get_rxvga1', obj.bladerf.device, val); else [status, ~, val] = calllib('libbladeRF', 'bladerf_get_txvga1', obj.bladerf.device, val); end bladeRF.check_status('bladerf_get_vga1', status); %fprintf('Read %s VGA1: %d\n', obj.direction, val); end % Configures the gain of VGA2 function set.vga2(obj, val) if strcmpi(obj.direction,'RX') == true [status, ~] = calllib('libbladeRF', 'bladerf_set_rxvga2', obj.bladerf.device, val); else [status, ~] = calllib('libbladeRF', 'bladerf_set_txvga2', obj.bladerf.device, val); end bladeRF.check_status('bladerf_set_vga2', status); %fprintf('Set %s VGA2: %d\n', obj.direction, obj.vga2); end % Reads the current VGA2 configuration function val = get.vga2(obj) if obj.bladerf.info.gen ~= 1 val = 0; return end val = int32(0); if strcmpi(obj.direction,'RX') == true [status, ~, val] = calllib('libbladeRF', 'bladerf_get_rxvga2', obj.bladerf.device, val); else [status, ~, val] = calllib('libbladeRF', 'bladerf_get_txvga2', obj.bladerf.device, val); end bladeRF.check_status('bladerf_get_vga2', status); %fprintf('Read %s VGA2: %d\n', obj.direction, val); end % Configure the RX LNA gain function set.lna(obj, val) if strcmpi(obj.direction,'TX') == true error('LNA gain is not applicable to the TX path'); end valid_value = true; if isnumeric(val) switch val case 0 lna_val = 'BLADERF_LNA_GAIN_BYPASS'; case 3 lna_val = 'BLADERF_LNA_GAIN_MID'; case 6 lna_val = 'BLADERF_LNA_GAIN_MAX'; otherwise valid_value = false; end else val = lower(val); if strcmpi(val,'bypass') == true lna_val = 'BLADERF_LNA_GAIN_BYPASS'; elseif strcmpi(val, 'mid') == true lna_val = 'BLADERF_LNA_GAIN_MID'; elseif strcmpi(val, 'max') == true lna_val = 'BLADERF_LNA_GAIN_MAX'; else valid_value = false; end end if valid_value ~= true error('Valid LNA values are [''BYPASS'', ''MID'', ''MAX''] or [0, 3, 6], respectively.'); else [status, ~] = calllib('libbladeRF', 'bladerf_set_lna_gain', obj.bladerf.device, lna_val); bladeRF.check_status('bladerf_set_lna_gain', status); %fprintf('Set RX LNA gain to: %s\n', lna_val); end end % Read current RX LNA gain setting function val = get.lna(obj) if obj.bladerf.info.gen ~= 1 val = 0; return end if strcmpi(obj.direction,'TX') == true error('LNA gain is not applicable to the TX path'); end val = 0; [status, ~, lna] = calllib('libbladeRF', 'bladerf_get_lna_gain', obj.bladerf.device, val); bladeRF.check_status('bladerf_get_lna_gain', status); if strcmpi(lna, 'BLADERF_LNA_GAIN_BYPASS') == true val = 'BYPASS'; elseif strcmpi(lna, 'BLADERF_LNA_GAIN_MID') == true val = 'MID'; elseif strcmpi(lna, 'BLADERF_LNA_GAIN_MAX') == true val = 'MAX'; else val = 'UNKNOWN'; end %fprintf('Got RX LNA gain: %s\n', val); end % Configures the bias tee function set.biastee(obj, val) if strcmpi(obj.direction,'RX') == true ch = 'BLADERF_CHANNEL_RX1'; else ch = 'BLADERF_CHANNEL_TX1'; end [status, ~] = calllib('libbladeRF', 'bladerf_set_bias_tee', obj.bladerf.device, bladeRF.str2ch(ch), val); %fprintf('Set %s biastee: %d\n', obj.direction, obj.vga2); end % Reads the current bias tee configuration function val = get.biastee(obj) if strcmpi(obj.direction,'RX') == true ch = 'BLADERF_CHANNEL_RX1'; else ch = 'BLADERF_CHANNEL_TX1'; end tmp = int32(0); [status, ~, val] = calllib('libbladeRF', 'bladerf_get_bias_tee', obj.bladerf.device, bladeRF.str2ch(ch), tmp); %fprintf('Get %s biastee: %d\n', obj.direction, val); end % Read the timestamp counter from the associated module function val = get.timestamp(obj) val = uint64(0); [status, ~, val] = calllib('libbladeRF', 'bladerf_get_timestamp', obj.bladerf.device, strcat('BLADERF_', obj.direction), val); bladeRF.check_status('bladerf_get_timestamp', status); end % Set the current XB200 filter function set.xb200_filter(obj, filter) if obj.xb200_attached == false error('Cannot set XB200 filter because the handle was not initialized for use with the XB200.'); end filter = upper(filter); switch filter case '50M' case '144M' case '222M' case 'AUTO_1DB' case 'AUTO_3DB' case 'CUSTOM' otherwise error(['Invalid XB200 filter: ' filter]); end filter_val = ['BLADERF_XB200_' filter ]; status = calllib('libbladeRF', 'bladerf_xb200_set_filterbank', obj.bladerf.device, bladeRF.str2ch(obj.module), filter_val); bladeRF.check_status('bladerf_xb200_set_filterbank', status); end % Get the current XB200 filter function filter_val = get.xb200_filter(obj) if obj.xb200_attached == false filter_val = 'N/A'; return; end filter_val = 0; [status, ~, filter_val] = calllib('libbladeRF', 'bladerf_xb200_get_filterbank', obj.bladerf.device, bladeRF.str2ch(obj.module), filter_val); bladeRF.check_status('bladerf_xb200_get_filterbank', status); filter_val = strrep(filter_val, 'BLADERF_XB200_', ''); end % Set the RX mux mode setting function set.mux(obj, mode) if strcmpi(obj.direction, 'TX') == true error('FPGA sample mux mode configuration is only applicable to the RX module.'); end mode = upper(mode); switch mode case { 'BASEBAND_LMS', '12BIT_COUNTER', '32BIT_COUNTER', 'DIGITAL_LOOPBACK' } mode = ['BLADERF_RX_MUX_' mode ]; otherwise error(['Invalid RX mux mode: ' mode]); end status = calllib('libbladeRF', 'bladerf_set_rx_mux', obj.bladerf.device, mode); bladeRF.check_status('bladerf_set_rx_mux', status); end % Get the current RX mux mode setting function mode = get.mux(obj) if strcmpi(obj.direction, 'TX') == true error('FPGA sample mux mode configuration is only applicable to the RX module.'); end mode = 'BLADERF_RX_MUX_INVALID'; [status, ~, mode] = calllib('libbladeRF', 'bladerf_get_rx_mux', obj.bladerf.device, mode); bladeRF.check_status('bladerf_get_rx_mux', status); mode = strrep(mode, 'BLADERF_RX_MUX_', ''); end % Constructor function obj = bladeRF_XCVR(dev, dir, xb) if strcmpi(dir,'RX') == false && strcmpi(dir,'TX') == false error('Invalid direction specified'); end % Set the direction of the transceiver obj.direction = dir; obj.bladerf = dev; obj.channel = dir; obj.module = obj.current_channel; if strcmpi(xb, 'XB200') == true obj.min_frequency = 0; obj.xb200_attached = true; obj.xb200_filter = 'AUTO_3DB'; else obj.min_frequency = 237.5e6; obj.xb200_attached = false; end % Setup defaults obj.config = bladeRF_StreamConfig; obj.samplerate = 3e6; obj.frequency = 1.0e9; obj.bandwidth = 1.5e6; freqrange = libstruct('bladerf_range'); status = calllib('libbladeRF', 'bladerf_get_frequency_range', obj.bladerf.device, bladeRF.str2ch(obj.module), freqrange); bladeRF.check_status('bladerf_get_frequency_range', status); obj.min_frequency = freqrange.min; obj.max_frequency = freqrange.max; samplerange = libstruct('bladerf_range'); status = calllib('libbladeRF', 'bladerf_get_sample_rate_range', obj.bladerf.device, bladeRF.str2ch(obj.module), samplerange); bladeRF.check_status('bladerf_get_frequency_range', status); obj.min_sampling = samplerange.min; obj.max_sampling = samplerange.max; if strcmpi(dir,'RX') == true status = calllib('libbladeRF', 'bladerf_set_gain_mode', obj.bladerf.device, bladeRF.str2ch(obj.module), 'BLADERF_GAIN_DEFAULT'); if status == -8 if obj.bladerf.info.gen == 1 disp('Cannot enable AGC. AGC DC LUT file is missing, run `cal table agc rx'' in bladeRF-cli.') end else bladeRF.check_status('bladerf_set_gain_mode', status); end gainmode = int32(0); [status, ~, gainmode] = calllib('libbladeRF', 'bladerf_get_gain_mode', obj.bladerf.device, bladeRF.str2ch(obj.module), gainmode); end if dev.info.gen == 1 if strcmpi(dir, 'RX') == true obj.vga1 = 30; obj.vga2 = 0; obj.lna = 'MAX'; else obj.vga1 = -8; obj.vga2 = 16; end end obj.corrections = bladeRF_IQCorr(dev, obj.module, 0, 0, 0, 0); obj.running = false; end function start(obj) % Apply stream configuration parameters and enable the module. % % bladeRF.rx.start() or bladeRF.tx.start(). % %fprintf('Starting %s stream.\n', obj.direction); obj.running = true; obj.config.lock(); % If we're starting up a TX module, reset our cached EOB/SOB % flags so that we can internally take care of these if the % user doesn't want to worry about them. if strcmpi(obj.direction,'TX') == true obj.sob = true; obj.eob = false; end % Configure the sync config [status, ~] = calllib('libbladeRF', 'bladerf_sync_config', ... obj.bladerf.device, ... bladeRF.str2ch(obj.module), ... 'BLADERF_FORMAT_SC16_Q11_META', ... obj.config.num_buffers, ... obj.config.buffer_size, ... obj.config.num_transfers, ... obj.config.timeout_ms); bladeRF.check_status('bladerf_sync_config', status); % Enable the module [status, ~] = calllib('libbladeRF', 'bladerf_enable_module', ... obj.bladerf.device, ... bladeRF.str2ch(obj.current_channel), ... true); bladeRF.check_status('bladerf_enable_module', status); end function stop(obj) % Stop streaming and disable the module % % bladeRF.rx.stop() or bladeRF.tx.stop(). % %fprintf('Stopping %s module.\n', obj.direction); % If the user is trying top stop "mid-burst", we'll want to % end the burst to ensure the TX DAC is reset to 0+0j if strcmpi(obj.direction,'TX') == true if obj.sob == false && obj.eob == false obj.eob = true; obj.bladerf.transmit(0, 0, obj.sob, obj.eob); % Ensure these zeros are transmitted by waiting for % any remaining data in buffers to flush max_buffered = obj.bladerf.tx.config.num_buffers * ... obj.bladerf.tx.config.buffer_size; target_time = obj.bladerf.tx.timestamp + ... max_buffered; while obj.bladerf.tx.timestamp <= target_time pause(1e-3); end end end % Disable the module [status, ~] = calllib('libbladeRF', 'bladerf_enable_module', ... obj.bladerf.device, ... bladeRF.str2ch(obj.current_channel), ... false); bladeRF.check_status('bladerf_enable_module', status); % Unlock the configuration for changing obj.config.unlock(); obj.running = false; end end end bladeRF-2024.05/host/libraries/libbladeRF_bindings/matlab/bladeRF_rx_gui.fig000066400000000000000000002534111457144405000265760ustar00rootroot00000000000000MATLAB 5.0 MAT-file, Platform: PCWIN64, Created on: Thu Aug 29 00:07:47 2019 ™€IMyxœìgX×v)¢‚cQQ,X0&5D,(. Æ 8ì»#³;ËÎ,ÍŠÆ jŒ½¢±b,±KSQ)‚¨€J_–¶ ñ=}æÝÙ•eÙ%ïùã}ïÀ|Ã9÷žzÏ=sï¡ Ç˯5åY w ô˜ò´ÐŒÃMôKôˆEÞþ܆!ÐÍ3çYqãNèaÂe8'BŒI…¤‘É).gœæ Ä)”ãRD¥e¸€ÀHÍŒ6è‰æFì°àÞ,Xsx !RÈñ†üá -9ºFË݇÷^qÐù݅ý±^rÐWJ04¯!iÀ‹¢ † ¤†ôMxƒù®IÉÈq%)çãÁ œfÜuâ\rdÆ% §=)!nHŸ00z#Ý‹"¤údž7N¢‰ÈP´°z|œ&"p}Zp'H|*&iàÀD)ƒ‹p¹G]Nha*Æx‘c8ß…”‰1 &3#ô™„TH…ŽS0 %u£B¥:Ëôé¾²:{õéžë vLK÷È)’œ)Æq’cÑÒ'ãá^rœ¦ å : £ßEÄ—*Æa Ẇ¢HctMàñ?¥{‹Q~yPŒ·Œ •±kè I.÷!ƒÒ^“]I0á:º‹LFŒ €Æ`ïæ7Œ¤\å8ÆYw7ä¾1º&2f&Ï—ÆåõrÀÅŸ 7°ß¹RR­K½í¤ÍÆò5ûÑÈ&Óн²hè>uÅK¥!¨py`r¡€’…ÌŸ&'ОÁôU ÌÁq©†“´.Ÿ(ˆ5»¦aæh¡aæh¡©õ@ Q•Õð;7ÂoiÀÏâ1&Ç(ãè:;¼x]WÍyõëª-z<¾·›øýÜ9< ÁÞ Îdî9I®{ ó*OrfåkÄ>Ózö™òØ(³|Øcf`[§;œ˜PÑ¡ ߬S\Æùñ‡süÓúÕØz˜Ô“kÂóã5Ï™ã[múaqlÇá¾zqÑÅIÿàÁEŽ0(!¡”<ˆ–a‚wÔP‚Rv¢¿ cÄ<ήíø#4ˆ/‹Ó}‡9÷k¿«xZF!*oHLˆóÝýåaþ"Ñß^{^qô7ønÛ;4`u@óÙ·Nè€:ûœ±¯¥},ŽI)i¸„RèŠgcë¦}9ÆâÓÎ`ž ’äé:Í›Å?å5È_ÃE0ÜÏ­ ìÐÕ8|ï¢ýó‰)¯~ž˜üM¿šRo%˜TÁaÿø›7q#z‡ð±xƒzÄm?mô«¿o† mS§¯±zcVOŸ l&jùLÿú{ã¬ÇÇîµwÅ Á/ë-žwòØÛþظøõ¨h`ܨµð…ØäÉNß¹œ‚Nó=k¢¼æè Pµ%®Uðenü:øoŸÒqݤxˆbÅx%ÂøGÏ_Nú:Þyqß3à ê²%«¥8…ã» ;.mÝØ6"•ãO‡k‹zŒ¹eÀ®Ò‡Ë<îCÈ4¤2ølVTLÏ‚z¾â¶ÏNn6غ¼Üó“ÿÚc ™ƒðÇ ¾0î8‘)ÃO‘ærúòà k¯(ÅNïS`ìXOŸA²dÄÒóÎù0bÿÏN¯âóa_öõÈñÐÖêlLøÍΞBhÙmïÜw 9»ŠÀtЪNS‹@æß<õÓéÅðtóª³3‹aò­æ_íò-‡d_Y>,áì-…3­‚­Í-åìV±£Ÿ)¡ëôœn ±2X¸/•Áo¿ä¬ù®‚È-®kI¥Šó§æ¼uýgUE9”=>öO?IÌh38nºÑèÓàJ:¸WÏ—•œŸU 1ï÷*ÎßjhÎ.Ë›jøþÎk‹Ô ]õçšsÅ0‹?Ïg^Ãs ;‰õFÌKƒÎ5{’q‹tx|¼è’÷’tؾ¡_7¯é8´p?|¿«ù5lW/ß{ïhZØyùúy܉]³$Øä>¬<7³Ï› XCô¿U˜>m;µûöH,„nrwÏ€öQÝc3§CAhé«cÒ ßÊbì]¸lZ<—îuzÙN ¿ Øãµ¥‰O’áD¨Ø|å–d8ðôÄœI°üzʾñçàÆ`ëÓñ`ò;„£7à á4:«æ„”¥|ÙrÁeðÛÚüZ Êk&k惨}§atbÊóy{¡o–K, Üì~fð ·Àwÿn瀡1àZÓíÒ7Ç/€oH­Ï]óx¸¿É­PœsÜ=ëÞ-`νý:.ö|QhytÒî4è1èË#äŽûàš×ùÞÈó¨HóÇÐì+8òÜͬìò¡óÈ—?y½*€BÑšØ37Š çÆ CË––€qÈA ;ŠzŽM(ƒgg⮚9—Ãr›c÷UÀÑô«gï«*áE@Ñ[a›j¸'Ûši«†NwÜðYyjXQ{|ËT¥v®é{þ‘ö.í¿ò°jŸÇ<©ôRCÊæK}^ÕVÓEVÛ®WC×ìö¹Ñg«Ù¿ö7§´jød†¨öµ©^ß©F©ß±§:'€ÝéTÿ6Ipaå~;ÜnBM܆{Žˆ—EÜƒŽ®–¿¾’QÃ祃Յ¬!›S3 ­f úÍ«»6·ŽÍ‚ÇÝñë]Úfƒììþ€3¡!k'»ñÁ½Åþó¶ r ¤óäŧ‹sááöór˜'GL·<ÐìéLcòarÄÎt¼2Î)Z>ËØ^j²¨x Â!×î……°îÇÝ£”‹Š@í¶fùêŽÅ•: —ÿT -4±j#û>¶¿Q˺.š´it)ä A©Z ¥N'ÈVJx1K¶´[ ‹gûµ>¯äöO x¤}ºzÏpºfM(mìéYšíÖEC+·ý0C‰i¦‹–«àè<¾}´ ÆJÚ“=O« 9¾ôìüã*T»íÉfÌP™XøÍWAÛy¢<‡*H_¸~Šº 2w¥¡¿Ê`ÝèÐö|¯2Y¸*â­P1Hz§„ûNG}_1J¸™Ô!è ¾¢ïž8[ W¦åÇÝV‚™×²K#ËÀÛðy”‹ ®ÏZ{¹E9,Ì{µÅ*»jù»Ûª€hªà“GòJè˜öM¸åè*Zkrìm¼ Ó+ìJ5 b‡ –’68¢ŠS‘âòsÉKáXø¨x~KM`U`s%Ú,*¡N-J”öxV…Ò´`ǤJx³êeîÃÈ*ˆˆ,ÿízÏjpü¼Ù‹?bª¡ÓÙuG_uVëÕ'_Ò(Ï4~©!6ìiŠ7ÊW?üàZ58˜¼¼˜ RÃ1éÓâÞ(wĶZ»`¶/Ž=e÷º¬fÄ<©†ÒÏüÄþZ38°¤ ¢ç8“[WA­©Ç·;ÏUBeáž’Jíä’hY 7q‹YÞË+`ÿê›ËÌòÊaåÁh§•ÃM=WÁ‡ÁÂaËË`înÁ€±G”0ë¦æ·KAy|ÌŠ=Å% '"¦þQ E³:ŸÏàƒ£¦ÂÅ_Bðìô0ûÖkÞØù ¸a"Ý~è)Ü‹ºtÊÿi.¤YòÎ@uàM¡Ê†«)CŽïY˜ W;¼éy!Öç²…â.,Ý|ïGúüº÷dbe;Tg’ò2cà3¾©â‰4lœ—,;› ÖÍÛ Ê–>_Ír³ŽI…V¶íæçÌN… òs¢“ý]ˆËSõîúò6 >IÊëu zjêR2ÈììDaÍ“ …¼7ÿÈO 0/­‹xÁçñP³0î^ˆãuèc³8fõ¨Kö»wÑ¡]?Ãß9‡ýŸïÃù ûÖCW%¼)|˜‚¡ÞçÞÌÀNÇär*Ôˆ½ÆÎ›ú}SôcbÒðeLo{½,γmù³l'øN´uÃ%Ô{ÇíÏÎÙùß‚Wß`$€ ‚4÷ÛÖhÍá]уœp?MÆ^9i‰ÑÌ Œ$„u]HMŸ¿ù‡ÉoÃá±ì:¡Ûlî/ÖŽ2˜ˆRÜ\*—Ë ]‹\®mëñt˜~Ÿpú]+VR¯U¡‹„ö¦NR‰3\£ƒ§l\{ )A×ò±Î²W)©¦3ÜXé .êâcmÞ´ø$òêþÃÅÓëìca¸^ïV¦ Åš.³Æz‚f¨0Ý%SÈ$¸T¡ÁCQ(&òw˜H Ý[i´ºums!Ãêšg¸ÐÓ® ´ÚDrJ!cg"ýZl×Õ©ç½ß>ÔÚ…šX5…¯ïGÖgö‘ùšdÿ¬šÈgÞD¾Mäûô#Ç¥©|ÍšÈg¬÷!u¨©ßí¿ûýùP?ÙûŸŠÏ›ïßÿÿìXyXSǨ(`+î>7\¨Ö]\ŠEë EªØb@ …®I4$!„Å]Ä­.¨ÏºáRܬ+VÅ]Ùd ¢²'a KyÕg{o¸Áµèëïó|™oîÜ3¿³ÌœsfrÔ†líÈf Ñ(2¤Ÿ>&—lFô¼Ö:pc4pfôØÎÚÃY,äˆY¾ýx|ÂßÛÏò!˜¾, Ÿå­zŠƒ=9¼‘óxF“¾ oÐ×VK5&ˆ K~ôkðjÒÄ«õþÓ¸÷é§‘¼¦^ÿ¡×HK/5ž,þ›ý5 u½Ä2„‚·Ãµz׊!œ7O…s~ƒŸ­5pÆdëÇPS&ûÖ6}?ºïaCɵyƒ\M?Œ/÷ŽÁèOËdó6멹fô8ÀŸOH$„ø]Ö³%zEB±DÌâIZ¾,AÀÛÄšÞg¾|šeØ„3Ô™2^­_mHÉêwVd“,4‹Ëøð"±PDˆ%<ŸÁæòø>b‚\Z†¿ˆ`ó('ßÂ^íø3#G¬`Â_{}uÅ—¦½Æþ¯0¨…2gèõWOùÛ‹;“„ÉLOâÏhFz^SdÇò%Ä,g¡?O£¢L/kºÐ‡Ðb¹²ÄB¢S`#댚5‹GÙ 8|¢9ª‰¥ tæ %_ ƒm©=’0Y¤- ý¬& ­ÏW·Ç ;!Ÿ*m¢×°´ W 䋸,Ý(5KÊÍ•Ç^ Û KDÍrbyü×°šAݦóÈš­S¡»~3Üõ›á®ß wýf¸ë7£q—u*³gIX."›hÎUmŠnž=ÁŠ©}Ø‘ÑÏâ ±zŽ•ÝÍÞªÈmŠ˜ç㨪 ÚÝõ³Ü˜|-AM(ý¬ÙúY¶¾ÞS™RÌü¡î×à=R”†îO;–!…Åôè Ïj¥¸µ~¹ŸA6…œÿnàs)†Öñ>½],…k‡nWEK±Ø7h«ƒƒÃzGIf¢(¨¼añ¤ |úI¼Ðhr*®–Îõ%ƒ¦/¼VÞ†ò„‡I8Äm½f{}/89gw"Bo¤øê|—! i‡6—)Á(phljQˆîžþìÜP„bÎú¨³7K`¾eÊ(ùŠ2Xðƒ.ÃЮóÉñr<>s­•MB‡÷}2ù@%Že^;—¥¨Âï’>× +F´#»ŸÝîØnJ¬®?±ý™áëE]¸¯ÄþƒâÖU¢¾6òa•³)Û.l¨¯Ázƒ¥¦;oÔ gnççj 9¸á7«ŒtšÅ©f¨Ä³;5Éñ_*1ófÔáolâaq&ÝsKßDÄ®¹9h·ý-tQ@2Úí‹æ®\t‡-í6‡>KÃ×Køac¼2a›3r[ºu“È_6LS§lû(*y½‰=:äBtî ÷Ù {È /ïsT~iË<½v²óQÖ}Ú²3¥poW¯|ÉCÄðf˜jó>þ?°'bÚ¢ðL¢ªçŒKwAÉ/)ÝŽbn×»²¸Úk-[Z¥ýúÐu]K–nMˆ.E»ã½gûL,C}È'yƒo–aeÏ¥S·N,GÁ‚‘d¨–ã’Àê$¿½ OÜD+zÍ“a^él.È輕côÐèΙöd?wÊ™ºõrÈúÝÝ×%[ŽÚnŽÎÏ{(0ªjçïÞ³HÈè2ƒªÀ1/Wæà&ûv曟Q )®üÜü ,V¿óá6f) Œ<æ+ÐÁ‹S0|œ™K6LQÊ‘½'ƒ|’cãÄ ÎLg9&TÏ[»è… xø&¾ˆ‘!ËêØÌ‰ ·»,øŒ)CÄOܽ_Ï–áÚ½ŒÂ˜dw=·ép9Ž/´Žc“ë ZXú^h_ÓK}W¢Xág™X…çkŸ>¸RE!¿Ý0¯åø6OþŒ¬A·s5tW¢ánÍ©§þdœ©üR"*øQŠ ¯ŽáL¿z%†<½¯Pâ¸àQé2~wGµß°x¶–—&Ÿ¶xVÓá³"kkP>ÖóPÔ¯Õ˜µôäyïåÕˆ˜cÃúQ5ê W…Ÿ¯Â“â?§ûV!h@¢m‚InFn.¡•8¸îÖÊVXsx™ipºÝö‹=3p>Âgt¨s÷²‡LŽ–Á-vkŸÖÉ嘴z_iļENìÿ”¢Ä­û)£Ôê˜?-Æ¥‹DnfZ­röš^öMÁ®#vù´ç£È0³v‘’u “ªPåâZÊÈû–dãZ×¢çæ±™Øô€*©X±Í/í'ÿÛøuÿ©„ªŽdI:ÌÈŽŒÇX¦aÀCAúZ-+[y. fm;+|œ×/ÜìÍ"ÓѾ_Çùù³Ó±€?ž×mp*b z>MƈSBë‚þ·a®ªKIYXp‚Û&¢x3úçxxeôà.‡º%1i–70°ï²ÈuÖ—‘ñ»KÉ‘=¿¼Û9eøúsÊFû¼QÿÙ%éâµ¶`çŸ[–=³Ž€ÄáÇz#Ï(D%M³úÁö4ºÍŸ^æò ý>ÅŠí1íý®ÐüðÜåÔuãÔ8„QbœðÕýÚ§SÝ“ð<úIÖtïÛÖc{Ž17…Æ¥b÷å[:,J§ñ™¸¾´Ï޽{¨ò䘅Àoû’*³ÁŒí»ºrFxÂÚÕÉ®wi¹¹ègû„:ç-ÿ>:³â³‡yP’Uô/)cÎŒ< õà*sGÿ°€‡´ÞGXPž>F’ï¸l 1îà/V q…8;N9á«"t0=¹ðVmO1Œ{íŸ;äN1mW ‡­í–—^‘g[2uKñhÛÚÕ³³K1M×e¸wHô…ɽ2ÚÞrœmOìå´Ý2¨ÊãczRiÏ’c‰¾R"Çoó×ÿ—P d»Ý¾LAûS9ä)X]YyÞq²4UbÖÇ#bö)+‘@rùUaŒ*/ªh?«¡2ï÷jÚß´UÎüûÎrÇëK•M÷£w‰·uo¸™2^7·—áÆßMÑE4öÉ7–¢lzœ×tom|_Î<ŠÊi¾i©U½?¶häNû{×ÛèÑœoF>~KœöwÙÑ#ßü]7nL qc[ˆ×BÜøâ>k!Ϊ…¸ -Ä}Þ¢x±d´ð{¨Žÿ+ç;÷‡|þÏòùÿ'ŸÿWú>àÞ÷ÿÿìY_hEßKšØ¤1„>ˆO¥Å‚ZD*•:{¹$ÞIÏ$&MÄÍîänÈÞÌ:;Wš ľöAD¨ˆRû$ ⟠U,Rkh…*Zªh X¢ô©¾8³·{Ý;÷f&wilÔᆻoî÷ý¾?3óÝÌ^¯aûxïä};ïÛŒJëåT8– Çû¸d•éýéµÕèµÆVÒËÇô:yéâ}wøÙ0÷š§‚¶Ç äcÓæ¾ž3ü5h Þ‡þl7âþTdøˆ!‚[™¯fâY>xrùàÞ~ó‘îKozÏõ˜k'z;1v¯yþon»ÙŠ?ßJü¹ƒ÷ö:N7ÛA»~<øÔÇk`ÛToÿ{¯_¥Õ?ß¹~á2¸|Oçó¯d.‚ñw½pí‰_À×7&~~ëµÀWÂïs߀âñ5®ù+˜u¾òøK_€Ïw¿K‹Ç¯å¡îK«àþïúîü÷Áòé/ßú`<ÖÓÆ‡>ë§Á«x'ÿê'pêú…ѹ¾³`àé«+{¾_«ò‰øLE^ºëæYÈv¹¡¤•ñVò{,¦×– —Šéup½;CY¼»–Ϧ,9“V!òCµn;êâ²uúû7He©q¬Œ ¶¦ Ìa©G!KŽ0&#'ÌÒð-‚)|“5f•ù¨Â4Ø‚©—ãl-é0 £i\ptU˜Ú·iˆ E¦d«À¤tYBÑ’X·nÚE\‚8‘6–D;%ꊭàJ€%»8ä Æ¶©Âäyá;s‚-ªf¡ S³M#‡ÕlLÎ6`Ù JÊØ‘Æ[kÄ9jÑRm¿¦¬5yÂ[SðX‹ò"ƒ©Ë`°K„°¢ÔÁXcV ZÛnÙãóKã`r¾ôg#&3=ˆø>ñy¹E®ñW-¬!ááT ÃùƒÉ|›Ñc›Ñc›Õc›ÕcËè±eôØÒzli=¶AèÛyªßÊLÆ6…|4§ªnU˜j™O@ÊOƒhÉ’SÆaÊlpú L#±EMXÆIjažÐÒ0¡yŠ0¶q®ä¹ÈF,‡¨ øƒS O¾[ÚšÁ‰eÐbV#ص|ery¤î×A”ýÅ´­{ùg–½·? ‡ÝÊçjí5zíâ¾ÙRþeó]Ïl ?µbÏTèuµëSÈYè⤎ÿÓÏ;uò´£E?›ÙǘyQÀÿ+vmˆƒ«ú¦î7âmêúÃÃ[i/U£—2ú›Çõ<÷2xݪyÕ©í-æu½ë”ÌÏoê:ãwòÛñÿ¤­ò¿×FÏßJL/• ·×L8ܤÞL“z³šz[e}ýoïö¶—Uèí¬Ñ«Ècå¤Èÿ ÿÿìYÏNÛ0NË`C iÚ‰Ó´ÛN“6í²Ë¥ÀZ©  ÿnnbŠ…cwŽƒVN<Éa/°Ã{½À¦=Êì4-Ipý3m©Ê„¥¨uú}ßïÇ?7¦X¼l ¦^ÒžªëºÔõD]z·½ù´_Jï•ÒûÏTÅ’»ðÊ9^Ùãìÿ²7—ãÍyüôôÞÆ·X¾É+exåô›æ½ÏðÊ{YÞ¼²—íù&rþöúŒ‹Ññâ…ìÎìêþçÇØs³;êøLz\¡8âÔý ‘ÅcÙõÒ<õ?o«#ñYôÁÀËΧÅô¾nËWÛkš¿òâvóóUÚÿ¾äyŸ‘‘¶-Τtû\ I8«*" GØ6pVå”ù˜‰ŸoMmPëÃÁ:“Xt–æ 0›à.—ÈÁ·> ðMÖ | `jÉÐÛq¶G.]Œj˜ƒÑ kS@nƒ};Ĥ}&AµÌ*Wã‚\êyK+”´Yˆ™QÖ3É`!‰h`f7ƒ6vxl0{ÞêÉÜ“]h0Xíò VK`vµu䟷Y`·¦¹D›@_®5UJ:ÂÚ€Zè5P×¾Èd`ð2˜<€!çòÌê`6\ÕaaЭÎ|x³‹áÁÔ#ëkó™Þ ê9‰Ôr©¹á/®‘uvÁϱ#,ÑOv5 Q[6T«t43Ù±l ‰†Á6ŠÀäªH?¾uA®ÇQ·âƒ›©$«)b­‘û8²o®aPMâŸëao"aÛIç`€æ(uG cÔº´ÃÕ¬ˆnÚ-Ö-ýv]Oîo¿ÞªYìÏ't´¢®wIû¹Züœ¶_–ÿ\ýþö£—“¿«éϦy^£ê͉Ÿ@uª>?9ñÆï5€·èåç§î×0½Àz§œÞ¿ËüN*OKcú9«çK³d×Ç,)Õ§m·Å¥äátç!ã ߥ½RŽWò^{“Ëëmο<µŽÞ×¼º¬ scæuÖÎó‹¼–ªÍïëÿ³àç¤ÇïW†W2ð²öFY'ŽFäÈwÿ1kóëÁÞlÛ«¼ç9^¯¿‡X7~øŸzbö²ëÔ?ÿÿìYÝnÓ0v[6˜†ÐÄWˆ;®@ÜpǺŽÑJÝTmcw^âvÖ»8ÎD÷j\ò<‚¦]’¹>nšNÂRÔ:ú¾ïœãÿãl¡âý>zz¯žuõ³ƒéDÖmó™Þ¥jžDj¹Ô‹Üì+›)xÖ¥a†Í· ÌæÛ¹›Ú¹›Ú…›Ú…›ZËM­å¦ÖtSkº©í’Èt하Mí$=%…AÃüˆŠz‹í’Y˜E²™Ä4 ¨9Âf( Ì¢¾Ê)ö¸è ÊäžÇ:á0 •vï‰#,ÑON5L§'ÖÒjfrbÙÅÏ‚}8WEúõƒ r'ŽFMš½')koàm ü8Ôõ6 nˆ>§ï—Ù¾UµÓæ‚~®ê=Ò²ìÎË H_>tœ!õ}½H“µ¦lŽYŸažíaL%¸G92[ ÓŒMNÖ.ò4ñÁ Ô©Wã$l®LŒJ˜Ñ*é¹¹L?¶C ½3®U”rMÊàJ®[·êBx˜dÊfÀ²d0ã`k´2`ÙCÜrzØ`ÛŒ`ê¸m‹¹ÏºYÁôj‡àð3½ZS«m"û¼Çh@¥¿c°Iš;ˆõ@·ýb˜6×Ô\è÷ô4j1L£·ê$“€éÓ`¸=Jù™r€)ØdUƒÄ [‹Ønàà=LÌ&;Óò• ˜ÊtÄ>ñEº”Inòƒ+ ›(x´ ^ä†jl ˜jl]3µ®™Ú±™Ú±™ZÍL­f¦V5S«š©Õ±o3èëž• ˜Jí :jZÓ-ó}̹p…Ô’I˜B²‰ˆãâÐ4¸À†° ІˆJ™× ¬Í€ð†MZ^ßx‹\Ðsl õÃS A®*¢Uû’žXꈣI°-†|mp…§_×M›?¨ÚÚÃTè ÄQÎVxûêcÃ-LçDìs9ímÄT'éL£9KÝáˆÉ0©›ÊVºn’ý>«Â¿kw¼n‰[Ìë’yê-•=‰/¥ì•æ¶×œÂž¬ËÞ‰«ÓýU+X×»ëßoþ¾ý·Q ½ÞX”ßY¼RŠW’ue®qNÖ“ÅèÛ<ö*Þª•^‡²ßÄî–'âè~žñ]TœÖæç,û•ˆd.õ2ãsB]gÙ~Ú˜„¥ø²ížPΩ·ÜøJpžö )^Áúd-.®Óü¿•wÞÌ3®&ù 4g\§}.ÐÓÓ¥ïG°òôsÑÿ'?´q.zÿ$x… ^ÒÞ,ùâhF^wFÞ±!ﱬ¯'{Û^EÃ{™â ûÕKìè‹ÍÇäïC³·è|xŸþ­ïòÆÏ ²?MÞó%û÷Y?<½‡âçyýÿÿìY1o7æÉrâ$N£Ò¥5Š‘q¼8mŸ%Wp‘b¥H£%Qêx¸ãÕV†Â[=™úK‚Žý ݃í–µ@‡n-ŸDZ<êêÓIvQ z0q|<~|ä'Þ³ƒÊËâ ¡¤†#ÁßQºù\—å’,Kê ²¨tmCÛÉÉ–¼“[Ü}—·pÐÿrlü¡Q{„!oë ø¸WT;ÈO¹€¶0ÂçRð‹r†¥¿”¥Â=ñÔ£"TïÍ:H F }Û÷mbA¹·ƒF5ÜA¦TyHá¥Öá>Äè=Œ·O_[ßã­AÛ$ñ¼dÅtŸS&x7ÕƒÞìâ7 ”óö~H²cï«*ãp'(Ûz\W:<Å—˜Ñ– ì$ñXBq@Wûkó<ðUtöþ4ãûsE–ÝW}ñjçk·òëÖ½7¯{º'߃|è¦7-£ó6”4œßœ¬]MÀM²žš'Þ–þy=õ^4×óšÒ7e}_ïõ.öZê,ù÷I ( 寣¬80¡Oš³S?Ý”ù^Añu=¢My¢ÎŒxMË/ËÇ;ƒuºk:~)8ã|bó;¨gPȾèÇøFž…hL×dÆù¦„›Ï;¼V™3 2f¬!Ûôûò(ܱù¬ !«üЫ4¡S9 XaÄæ»‡¤_ Hê“ð›‹Î‡ŸfæIg„w,¼ý{7-T*µ•b«´:‰ßË~YãõV'_Ò¹¨ÑY)>ûjÕð'ÍNÁ²S8µ³ñIYžfÉù•4Ÿû‘ß#^dÌ'+¯9 ¸,¼6 ¯KV—EÅëד´þæõ·p䯭IüXˆù±€ÇÞÃò#\!Åèÿó”÷W– 7ÎÕÝ$$¾<`B2†Ö=AႦ¤yM ‰ºbq;~IqÅ×ôògÕ€wÜ[©PFƒ½íÚ£íÒÁ“õ{ŸâÉÖÓ‰ÙuКç*ÜI.[o*ý©'óOE޲xÃ!ž‡>nž¶RÑ¥^:Ö},ºHÍ뇰_ÐÃöÇën±û¸ñ iŠ5ò­\Æ–äõÕÃ-ò¤RŽêˆï´hè3܇ÙÖõoĵ1Üšì Omq5 ${ìq¯ßãQhØ9kÝ´˜v’âsÓêçHK{åÇû ¿‡ÆöoÝ^°·kØ»nÍþç€~{Xý%g¼ÓõYüšö^øeÛÇi÷n÷ŒùîŠÏtc_%ú“%s>œóa>lXñ}*>ÔwÞ „8çÃd>ÔwYürÏÀeá¡9ŸÌùä¢ïWí¶ˆ“‰ñ<¿_ÍÎ'ú›ì¢îWIß™³æÏô¸ú馨¹ð¼ú|×ú3Ÿí\¾«ôÛÎx^ ÄÎmìò€¾í˜m3Úñä¿ËyØy/;·bç¯@ìˆÇ`­\ÈaÄn³s\Ú73¯e¶é¸ÿT~+ë~e¤-¦ÁÿÓà9³åaþØ:¾[þînù–;HÃô>pßþò{jFKÒwÔ Êv.fýÿEÒ:Bl66Ïçþ Üyúù¿äåã!//-ÎyyÎË?âå´ùß°Æýoÿÿì=o7”’?µ¡Ò¥à"VëR€IŸ¬@MëQ-'“uGIL¨ãᎲ£L3:öW´;èÒ½èС¿ Ú­|º£LÑ×èËÈG­ѼÇ{÷øøøßsåˆF¤Í‚6®ð°CÐB¨¤ÚªjT[F ¬¤x.Ë¥ã…IúT_Ýà[÷¦VíÊçߨß_Û»?/;Ý_¿W¿²“Pý¹mËcÏ«AÏ›O{à{aðå-¾œÑ’ñe´žâÐsËG„3ÿ€´õ|·ÇèeuD/ º¹qÕ«½Ž‚±Ž×Íw–ë̲Sïyõtqy³ìŽô¤Ø0äÖ½3fž5K~À{ÌŒÿ=Œ[Ç:Ñëû¨æÿËéì¯â%õçaÀdŒN ¦¤3Ç2R‡öä}Cö95èë"f’‰@ã;Ä{ÒŽD/ð«‚‹U çM5¦ßW;ŒûÒÁ% ‘…ï ŸšøPŒJræøä=" ÚéI©ÅqPó`ÒjD‰¤É3À=Ê©‰§Çl»´_hk Xƒ=.QãZ Iöý"ÝwÀ½‰ˆ'i”*vVû `sf±ãÒõ[7gá£>›ÙïÜî•[ÎÀïî.9? oÙyÌþëwa¾%džã%”Ëå’s¸|ÂWÈà3íèYšíœ8ªu‰ä¤ !“÷1 Õ†Jeá$ ¨>Ö¨Õ <0R·C_[Yzÿî7àÕ»‡õH´#ÒÅ5Æi|¸W9ø²²s¸£T¾C&³ƒÜȼ9tˆfãsR¾ùéôx)ÅzÑzB²šþDQ0>:p,¢'qH¼áè1“¸@è†DvP*×·cÖãYú½ˆ5iŒe‡âq`5ÞŽ˜úX L煮tû,9éSßI7TG’2|Š7ËøZ‚Õh@5Í\÷•we}_£éüɸû³3fÝëhtÝ€œo4Ÿ=.âÒ".M—|K¿€Ï—ôíwâÀ´ˆKÙqIÓ½‰¼Øyßëð_ç>¯~žäÕV¦ó'¤øåŒ¼Àέ=Sã„W8k]uXOåÜvÞ `çÞv~ `çÌvÞ<àµrg;°sh½63o6džÉGpÏ…ïЂóbÏîxv{M Ržd­ßØ¿™÷žßûͳ×䌙Úî˜öÌ€„‘ËMê™l›Aä…WQ,Ä1/ŽqqLˆãL2>–èF2f$ã“BÃg€û!÷U ëæñ€¹¡É;D˜Õ–uÌsb²–黌‡WÍ*áœzmq ÷ÎRÊžb^Œ{¢àJp†‚3ŸOtøuqÈïb—6k¸-í°2ì8«ÅôV€·Ä!§?RÔy$îïr7©átàþßÊÃù?™èàçæ.nŒñøzH|,Ü`’º'ž%q¥½­Ès8e^½ƒ½¦KÖ_ˈ×;šŸ W>Ý\ X[DÍ\¤. 7WìÚ²½°¹~}þÚ'8_>©y ´™#îƒpV‚Û+ Ç©DßPâ"ã„ø®O*-áfjà! „>vº£©¨¯7Ö}Ì;õç÷ îkñ=l½7oÍtV߇ϑmñ›˜ãÙ†‹›d}±ìÔÛ™îæm½ñ³èxÓs}°9q/üÊ gg‹Ö ö˜·»Å¢0?J¿™è/P?¯€èܲÄúHŒc×viÛÛ ªò@´÷il•ïjíM?÷€TzaUÖ H;`‘׬07éËʘçØù-ðß‹ Åú,Óèç?ûtŽÓùMäDÔ§+„£sßv¨WÁ®ÛcòºÎ‹5Æ\N}¤éݽk¦Î—Ý·9‰×¸3Oßg¡ÿ_®=¼¡áe­Èñ"ynoÔV‹Ú¹bßÙ°—‹­[]^ýºnѮ֊ڻtoaý‹[ÅëØg~ä‹. zI¼óðQž÷ãÃø¨È¾ôÇï ×­™m؈.Z±þõ ´½7ŒÌ¾wÐþbÆJ–ç{Ýþé÷º‘|¯{ò?ý^wO‹/èy¿×á¶S—{G®uÉ:§ß믓>ç‰ÏEÍ/ÐëõI½›NGéo³êò-m}Ð+ÌkÑvø™õoÌå;¶ÙÆÔëÍ; ž¥={h¸ºÍêLJ}/5tÊÛ§¼=4o«Åô¡x{¨XâuNy{0oËwãâíaxä8ÞÇÿÿÿìXAoÛ6¦œ&p»&sѺˠËÈ7Šv%î²$¨Ó]f@ $Úæ"“†D»IO9n;íØmèØ~Á~F0`À°ã¶Ã€ÞÆ'‹©Ä¨•-ûà &,È¥÷H>>}ï¡+ò2РU$Â=Á—bœ¼[òZW9–6c¿šÒ3À=êr&î'ôÜOèYÈÐc$ô\û¡]?Ù¶@þö•×ò¥ùy9Ó[1þU^O!J·9C½ÿ1èsÙý-Ÿ¶X‡0ê" ¬•–­‹cŸhúöyHå,ÙWkSß Hªo«Ûõ©‹áÕGXà¨ïkÄó«Óç$«o—{©þaöéJï`·ì „¯õÜÏѳ éÜå”!A¾š#¯ûOš¢ˆÜg˜²"r‚Eãí£·ûcRüÑ”×ßC{µùð§›ò7gýá­¾³,ÿmêóÑõª¦ô*?¹¯Ñhþ½c¸û8_`Ÿz±# ³ó(½€Á6MHþmvÐ×S’ÿ®eÈ ³ŸSË[¨ñÖ_‹£ík%ÆãvÎÅàyHºrC…ô`…™ Œ¨Ï5{̧³Û˜yÒAuûeÙý}”ÞoÀµûo¸cîPŸ„Ý­ƒÏ·¶O6ªwàáüÀHé5P“³b¹ïJ£ÙñFŒŸ&ì¢ì„Äq7}ŽiRí`óŒ‡a»g½Ï¨hSfËv‹6RóÊYÏ—š}‡ÍªÖJ{ÏùЏbôå6z’'V{äÉŽÙ­]YnÉXÇVlµ¼vNbM¾w¥ku©yY9óÊŠ˜qvÜá=ųyû¥ZR’{‘»¡½gHM»µ½:à÷Ð9¿µuãƒ¾Ç }‹Ú<g)ý€oþþVJ<{'¾cŸwµu¶m‡Ä>s§qÎ='9ãïiã®a nÞ«šM˜­(ª„Â7Y7Ú44Y¯ãÀ”ÿzŒö%ñcßÄnÀÃД^dz¤O]bvd\ñÃõ±Î£ÆÞlNÕº§áÜ}ß±ü,®ÌâÊ(q¥¡ÙðˆqEJ‡,³¸’W®£ÉÇ•qùäÒç¡'ƒ<´[°~ö7šþú™žWB§¦v‘òÌ7ÕÓò濤 xÏ›ÛTÆuBŠ?‰úÚ žöç¦ÊW]€ý/T}-k_Á6w7ÆãýIŽ{)ù=Šøp¥\ìÜø š|].¯w™ëhûÊš\9š?q~4^=íëVTPûc³á%ëg(¯=ü'â§ÊˆùËï³üe"ùË‹)Í_’çô¬õxš}›¿(^ÛÎ ^^ ›å1ÙyŒŠýÓPKæ¿“8·ÀzþÿÿäYOoEŸÍ?Ú¢†TM¤rARÕDD–ÿ'¢lbE¢Q£&åpÆë‰=ífgYÏ’:âÀ‘Þz,HE|…œùà^$øHH($æÙ³ñxâÆõKhŠú¤ÕîÏ{oæ7o~ž·;F¹¤®Ò–Q­;ê×w ­³€V|V®pÚŒµÛÒê{ŸDL?DûrO±ÃÆëáÇ1ü ©§+¤ÿ¸ÝÖ‰?Bh,Ÿ1~û¾ÖÇß”5Ðc.…ð©˜Wb)EP‹Dj Ìë2éà½C&\°‡;öC}ìGÕˆ'´þD]«"÷.úwód‹KŸúrúÜ£’‹à*)Ù¢5bʆhpø1ÑïЦˆeçwˆ·É˜­¯‹*Kð5ñè…/è¡à üeòíŠeºW§õ$‹ôä±ãØŠÔÚöOÈ`ërUëp÷UÞF}^Õc÷QW¾eÎ×Ï9=oÍ}y;­Ÿ‰û…{x}ñðúO®›Ï|êÞn5ÜtûíóD:û¼-Á;Ÿ¿x}͘íöò¶ÖçÕ%›a²ê4¨ê=F"d‘䬡’ûÕˆÁFj„ÌãÔ?ž§Ûg¼—I÷úsOí´Hø^XÞ¹A[ë432X~Ojýwr’g@l.Y?PíÔ_öy-Øc$›2jí1S6e³‹§@l.)u`=›Ó@l^KÆgr—Ù–ðW"ÍC&šß>Û•XžXØ—1 ¼æôÌÚÁ,.¾d$–_j» /ýöøÙóÇÏŽ–¾ÿ$ã»,þµt~ù–œ/ŸcÖ°ÉdÎÇþ¢ÏSn?ÿ=ÝnŸŸ<ö'yýy¬1*Ùªgv< ·½ ¼öŽôõ'½Ï«²>=³ÄvQ¼öÃs ¶)÷×_@rîäÿ×F-|AlŠäluæyÆ}3ùðãMáøðkçÕð¡Ê·¸g›uëÅ›+Ô{5LP- _D­¶õýŠj7ûõâ×-UÁK’m]‘u[×t^7ƒ¼NüŒ±÷T"°¨mÿô­Ž½cÙ¿Oºó³3©Bg7_ÀØe‘ñ²Èx¹T/—ZÈcì Èx$.Ed¼y¤Ýr2é.ϲH»<Î.‹gog—CŽ3‡Ä3‡œ_®ˆ´Câ’Gâ’Gâ’Gâ’Gâ’GâR@âR@âR@âR@âR@âRDâR̤òØój(Â8T§½X·cÎÝN»AÎÝè÷Ö¤è¶ï“n½UeÝ[õØ?}ë/ð7Ü5aâ8NkGÆ÷›‰vö9çgä÷ü•>­DBèo2 ªƒŸÔ'aÐÉ–”d7<8´–õ[j¿^¸¿Gº×ôÒGÛ‘¨Etoz•û¬±½¾¼ugyeû^6ù¾Üz:]~²Mpv®¶ûfh0¯iý¾K‚“ùB_#Ç­Âe_D!õŽ[÷¹¬ó  Ë!•uBN~7ê5Ÿ²…/èÝ›iw¦~·ò€yrŽ}¥–±ªêŒÙŠO«ìÞj9zT®Å|æV%yQNªž[s'¬æTW¸'þfgÑõ) DÐÜqRû¥¾jØ]³ú9ÊÓzéî&èï’y[¶Á·¿ã^µÆ‘Ô&‰Ðo´ÿ2~7îØyaßÛìœú`Øý ÿÿìYOoÛ6§œ5X ´M·ºËÀËÐ §†l'î²[Ð v‡Í Ò-s¥E¢š8§×zÜ%¢ßb‡vìeŸb—î6Ò’lŠbKÙšE~O|ÿÈÇ÷øC·åÓb~xÇ!} ÷¾‡]ä»Ä}Ø#T`C,ñ½:Pãª|ò™—ÏûòyÄãRB[ ÏJø‹’B‘`Jîé¹Û¹òþ½ÔìÔrìXšKÒ“+ ­Þ…â;D‰ÛA^ª¯9ÅïÃoE½LøJÏ›¹‰žÅ)~©ù¿Ï‹c1¡•¿$(êrÆDü=ÄâH0RÚ—‹†iB‚^ä;‚0ßîKÇ)Ùß÷ÇFÜŠn}¾¿Ë™ÇÑnŠÃýη›û{w«Ÿ¡ÙòÇÊèµÀ>('×Lä~®[Çë ýX[—t€èCfa–qÀø³0@Θ{@DŸø¶šh(N 3Oóâyj¬¯¢ÃÞ'æRÿQ÷Gìˆü\n£‹ZîRäâ½-›Ú^D–nóÏnqŒÞrü[+'ÄVä\õN./—Íwä38`Q˜ð§íW:t=©ÜošÜucž%5í´µý8‘·¶¹øJß¶¦ïŠáÇ<Èî¿¢oÆ?ÿªiß®%ï³ÄÕ¶‘V]2KÖ¥MŽp/cÌ–—A6?íôe{rd;'zÖ¦è™7ô(:`ÄWXVÞ‘Œy,hòVŽ¼Ù¯§Åw.¾r‰€|(4=EÏ)–:Ì~wžt9e‚t|Úüõøõ‹ã× Í?Fcµ©¨ÇoÖg©7s@¯7sÀ²¬ê¾SÝwÞê}'Dƒ€b¹ãØNËiußåï;éÙ:K\§Õ S®¦ÉžbOÍß4ì)ú$NŒ3ª”¨Ãväy8Ø…ÏB ÇðÉjýþ ¼×øîlÕóý.rO:o¿ß6îÍëã“s8ñK éV}à?鿼£}@¯wyñ c}]¦¾‰½ªä÷ƒ47þOü;k=©ðïúÿ.]+‡_Vø7ö%B’ìÀŸ`àf&ºh¨;Y ŒëqF>Vò+x¯ÿú²vú×ýl =äÃØƒ .vmØCí Ý=ÐMßXè»èSc¨7]Ú0ÈÂÒµ%ÞV¼#ƒ‹‹".-#®Y%.ÁCBÉp@}/”gWD²Hï+IïªÒ®Â-µš÷:‚™·ºš|aoS²wY‰c$Ç_ð/?­JßæÃ÷$ý*«§ýƒÞqã1ÿgà_Ö›Iñ/ç¯Ê]Êá¯ÊbÓúŒ^‘üNÒ”0—Ú’[ú1+ååE iBß™.†#×BþwþìÌ¢µÑP•oRr9´66É€/TÐa.&fR·Ã† ìp¼¦N`§¦…íž‹²†ãØØ€¢é¾øƒvJHí¶¡â4Œ¹ƒQš¬E{cyžq»’ã&xÃâeÊ`Èõb;·2ìÌ(vïPLDbËÌCõYÙø;pàØˆWZÇ_Ô?CL­¿ióUÖ󵯳/èiýÇùÛ?ÌßžÕ~I{òå·üïÏzÖzŽ(^Ïq?¾Åæÿåozì>´q/œTeÇUäfey2<{–~Ï$> ðÐ:ÇÃ3…‡Y~/(~ßäû2qÌ8i|sMÐõ_~t] Þkë.<ì.<=8¸vóßÁÁ4¿gAc„ƒâpPŹt¼‹=Ö¥ÛÔ‰ÛµàP©…ÉY‡OAäv’tóâ*Ÿ¿~¬]‡ÆÓ¥>é5©Þ<4¡mw¹\n—†ÉÛ”Ú ;²ˆçÅEª½w쪆º‰îÜÇVnŽŽŒ£/ØÆltTJ«ë>cœ¥û$®iõá²Qžš±ã!wl<¤÷ÐpËEž'ksY››„ždó¸zó>‘5ˆ™è±}€°i±Xö_ªKeô ¾[ÒÎóÏS/-ßizUÄÑ×Ï®}ÿîo‡Ÿ×¿ùZÐOuõž¤¢Ø‘ï."¿Y¸;•Èïhï®”Ô[-Ïu|‡£›LÜEƧ̾! ›Úhû°v]³Fç§Uí»Ñê¯Ì}ƒš*ç*•Ê(ž‹Ò~y.EO¯'SÅêÊùýoRO õÿOï?Tò+ø¼÷¿F°ïÖ£z›ëò”ßWöûßhÏ–'?/)ý¼®wy×ÇÓi’óÇn†ÿ×ÿ‚oRÒǦϷ5f¡Z{·Κ‡GóØ~Q|KÓK‹K®ksœ«ê¤ûS$®²z'}>L;w9ÏÝ¥­Ãózu^¯ŠÔ«”ü ¾p½*ôßÊÓ_¯þÿÿÄX]P”eþÀŸ’Pñ/1ј&ošÆQIEEÍè…Sê¤YÌ«í¸î®» ¢ætã¥ÎXjšÞ6]5*" ‘ÓEÓe¥¥©‰üÿC¢€ Ú9Ë÷¼»|˺߷âô<óÍáÝÝ÷=ç=ïùy?¦k£˜ÂÏ‹üLå'N4}œ<úçíøïæér?ÙúïdþdÃzò›™!ë%éã¼¼|›Ïž·½ÈUàw¸]u–=e tMןEÿ †y2.øÜærÙaz§Ž3?To|ˆÞXíˆyãÙznñüW‚fî|¦ôÉxCnj®ÍåK͵{Û5s~žjXGÆ.·w—Í91óᣌ¶¿i†ue\äð»ÝÎ|›7dPû¢ùwš<¯DíƒìÀü¸àüø(ó§°¥Iú8•Ÿw<§£À&¹ðžÍoÓ6Úvh¡õkÖÖǹŠtÚ|þÍ6§£P_ØŒß ~KõÛò ]µÎ¡¢Èû›<Îþ^ÒÇoóã/õØõ¯8³ £×í±{ý»Þá,ôÚ]ü©Ïc/pHP™´?Ñ`¢nÿŽN»ìëÄ?_ŒÆÏw)ÖÎw–>þžÉS>Þ2[¾¾õœà~G±.à–ÍŸ#ßátøKÃB.,æ´¼9¿ÃöÁw¡îìœÑ™Aäð’;í…96'nÁN5%×ïu¸B–Vãtý¯q›ˆZ«õúiú[Ìëúø ~$>…Ê;º[Ö»6ùìa9 ;×E±s¶66eüþÓí æÒ­n÷®õ®àz‡´Øê’Hãyš©ã¡}3I/)´o·9ý±ö£Ð|[©ÅÞׯ['–ûƒø8u}ô{Kœ¬]£ó'k¶"¿; 7yü8NÔõÈ3Iÿ<´nàB¦iƒO Íd¶Råµ f-ÏMc6„I|oœ«ÌØœÎl¦{3{™uTì4ÒÐA•ì´RíeA ½<Àl¡¾{‚ú˜í¨þ«’ÙBËWêiï±f ¿*l¤ª A .b¶Sù~A·®¯—.ý-lWöZÕÐJþ£ÂFJ èçä‚_éR• M釄ÿ*/ ZMÛý™[W1ÛélõÔ;»Ù@+áúôCy™ ]ÙaUÿêO„40¯ŸÙ¬ôE“µ·ª™ÔŸüÙ¦Î˪þƒßîcvÑš3˜­jÿˆè;ûÇ9fU_4Sfmêw°ß´~=îà?øñޏ‚~¿OÐ@¥E‚&Jß’Él£”ºW™w”Ìê‡ìwÿ©rf'Å/~¼èñ¢nµ?Ä!ò£òF³ŠìfÞ¥}‚Jß´’i½.ôZ”Èïᇂ6••‚˜uYO÷Ô7ç>³‘Ο°¾.fš?‡Hq±þòì`¹ “PO|‡=Ì:ò b·Ãœì¥áA—ŠرË#¨{fD“5wj™=tåv 3hÎ vƪ~AýFÜŒ,|Äì$ä5ôâ1è•af‡šoU?ü™ýéfíß+è êK‚v¥ÿøÁoT~r/³#¢ÿÆÖ%óúÑÏQ×K¿)c¶+?õý€þ=¶Î˜×_@Zú¢ÉôГaA‡º/ZÕ1úúÑ|~¥ZÐI5? ºÕýml]‰®·WP¯Ö3Ús€~Ü¿²³´–=ªŽíÿÑõ㾃<Âzøq8(Û'袬\ƬSvXÍK«ï+¸ÃŽ7— êèè¶SÌÿߎ× n[ÎÓXí@ŸD|,¹µy“*Ï ¬÷ «ïÓˆ[äK¤ßW\¿ÈlU}ùf”ø~¢ìD>ᾂú†ûSÖZA·zÿÆûR_¿àò<€6µÖ’2ÂìRòÝÏÖ2»UŸÂ|Ø¿YÕ~yz?³[Ýw°ÿÌ5‚.z}±àuO0®S}ó2³ƒJN”2Í×èGÝW}e[“ßG1:Ãôý€÷EøÓª~¬C_4‰>„þ€÷a«ú1Æ:ðÎCéÓã}ýÿ—Âû´Yý¨ÛXŸ£ïáýˆCø ç†<°ºü÷ ã½ûÃ~qÎð;îCøÿîAfõC"nV¯´+}¸—Bâ|ð~€¼ÃÿEÜ»w-߃"ÅE$iôóɼ3Ì;4)Ið;.¸n9¬Ê¹ó¿¨¾2÷šð*%ÌüL§·œ`ÞˆøÉ’ÿÿÿìY]lUÊ?A(RhAbäÅT› §ZMàÁH‰ HvÅ K·´Ó––RB|Ñ·båçÕødR -•hbô ”ŸÊöû+…¶´Êÿ:Ù¨îOá¿©|MâëY¾& ßÐ&Úイ >Ð^àt}êÈóèVú?cê/í ^ïŽù«²´)߃eF”ñ&›Æ“vž[÷nÛæqé^¯ãÛ5é㌠ç¹Àïšñìê éÿ]ÒHÿ¸(ý'²¥ÓíïùZãÊq;<î"ÇËx ó3·Ç™ãÊÒ€•Ž,§ÇµÎëÞâö¸õBí­ìl{«Cw{³ÞqèM[ëØ¦…`-ONwg‡ýðž×9¬DËî9‚Lr»Ë™éðx¶8¶nW]Öè9áe¾‹¢ø=.Äïqš7+¼ŸÙÏúÁ£ÑW:ÎÞºL ´_ãKâÃíTÞ ¸eUÖ‡¹.ÍãÈÕ×ñ¢9ƒ/}WF±sºÒ~wW¶Ç›c,æB‰õ÷ót5Þš=ûãm‘æõ|ù›¥ÿ ¦þÒηÍZÞZ'–ùû ;ÙJ\Mé?Asäé^Co£ãxr@\ã¿ïZB ¡õ?„¼?«ŸÙBå—˘´xM2³>Lâ¾¹¬2u] ³‰nOífÖQ¾.h »‚F*Ø%h¡ês‚6x©ÙL=·¾˜í¨ü§œÙL‹—|´ûP³™N]6PE™ ‘úg0ýT\"èTuèì5¡_ÙkW?üÙo …ôÂJ60âç„Ù‚ßhùG©Ì–°z ÿ•Ÿ´X¶úÓ6,eúé¤u¿ØÃ¬§Ô7áúñCq‘À¯ì°«ÙÇÂ6ê›ÙËlR~À:˜õW^?Çl£êšJf;õ&Üc¶ªõ²«ß±=Ì5>æQÿiA¥hUÏÁ~ËúqÿÁŸˆwÄ•Yaž ‘RÖ§1[)©îeæMå«ú¡ó-9ZÌl§¸yæ>˜Û©æ‡8D~”_­`¶RþþÌ[t·GPsâ\ ;߃÷­*ÿÊÊÍÔ7í6ӧΣ=Óï09^~ÔSáÁ|¦õuˆ÷?Sží+´ö“ÜÒlfåä b·Ãªt¨ø;²u£öG4Yu³šÙEj«˜#v`½`ÇXûvœ«„Ûq'þ_æ-Zš"ëuéVûJñ‰½Ì.•/Ékß`Ú¯v%ò ñúþ6b'dJª Eåö³Ä}sÿX%ââ‡?O2}ªaG|CbB>ƪ~Áþ¸J¼Ïl'ä5ôbÑ`Î ³Mõ·«þÌØ´œÙA%»mTyVàWúïüAË– üýº/Y×zŽ}½ð›"¦_ùÁ¬ßìÔïÐ}ƺþj]jœ¡_Õù0ýsØ^]ôpPЦ΋võ£ú‡z{Ìú/T Ú©ê¼ SßB÷•èúwæ|j<³X³þŒtA;­ A—ª‡¡õ?º~œ'G÷÷ˆƒ¢=‚JßLÌ.u>Dݵª×,±?£þ#QO`Öõþî a£j/ü` Ógª3ö퉴ïAî9¼‹9’gz YÃæ' jFm‡UYñ÷if“òcòêEÌ:e‡Ý¼´+ñ¾‚s1ìx}‘ Žl<Ê|òv¼2WPk;Ocµuñ± &‘yÊO Æþÿ¨xŸFÜ"_"=_vå ³EÕ!ä›Yâþã²ù„ó ö7œŸÒW:Õ¾÷¥ž^Á(òÜ@«ã?Lbv(ùö'+˜ªN¡?ìƒßìê‡???^ÂìTçÌ?m¹ ƒ^'¸¡ÎæqP' Ž2­ïÿÐ}_Õ•éL~ºÏhÓoöÞáO»ú1üú˜õÿrã<³SÕ!Ô¼ÛÕ6Æ"éGDýÇÿ¥ð>mU?ömÄ7~G݃Ìúá'¬òÀîüñ<¾o™Ïu˜æ‹u†ßqN ý`ìyˆó ôá\ ‰õÁûòNÏÔ“w§à–ísP¤¸ˆ$Í~þvó æM/ø‰\±±JÔó÷Ëãë0¯þoß/Ÿ~G–O¿£Zÿî!xRßQÿÿÿì™oleÇŸA0Á9Cbˆš`Lä…/Œ2ÜÖuÛoPH¶†Eßz£e^¸´¥»nì`ŒJ|!ÞI$ÁW¾E¶RÊj/4ÑDy‰1™°­k×nh׿÷Ö»µ½rÞ]{c’ø|rùõ×öùýù>Ïݽx*Xv<ƒk³üySkGk5ìÙ—ñYþ¾Rþm£ìWä]Ùï«Øó²ÿ ®.Ï |?×)¸Vþàøœ>—›)£s;×!¾›ïä^ìc»½^?̉¼Ç½—9Ær]¬`ôx‘÷}ñŽÇ™MÂÙ™¹á@È£.§ƒ„NîðÑÕ)DïÎ /õû&Ëõ[õ˜~+óú­çqÏÛ¤š§ ež¢c9ùNW˜[—jÙ—ˆöyçª:²,íî÷º]LàºÅCX4gžðÒÜV:Ÿ+¨3ëï;î<¾•Å|£ƒsgëfæê®‘}ɪ×QŠ× S×fVX—ä¿ætáü‚h¤¯gUó%ßÏ‹ž®.Á%éXoP£qôöÆ‚8˜¢«Þ¼ª‚yUŒó‹žý¶=~ßn‘묑s²¼ùÒs‚m“–Z6k¿³4ô…Ä µ›@Âòüj½Ož9fiÏíf0Cƒ•C`†Ò;2 a™þÚzŸj3òJ$¨ùœÄ‹ò—Ú÷Þó’”aË@[ï–ßí Né~0]v~µÞ×ÏŒ‚b½Gw„@‚†ö €8 ºúA.¿ÙuÐÓ[ÙߊÞÿ¾žæŸKŠÞZû»Ü÷“V^½ç‰ÕïCc÷Céñ_zQ¿ÑÓfO\‰U»Þù­ªÃl<­:J­§ÔxV×a4®ž½Ñ ¢Oí ¾fë®¶Þ&ÿû§‘… ˜¦¥EiÄhx"¢†ãî¹ØŒ÷½¸1´Ü²âô°# ¦)íX1Zz%Œç7œ·9rz§/KLSã%ˆQðãˆRãûõ`Ê2ýÕz,ôƒb½‡C#`ŠìŸ×ˆeûMÑÛ¾BœAP¬÷ßsõ]÷ƒÉ²ó+z§?Y9½{/õb½ß~µD(˜üL”|hé]Ÿ¶e&R Jý¡^`~õtÑÓÛêç¼rÿ)ÏEïõ~–kCÃÒˆáóÒ6:_`…ûQòóÏK¥5qø}Ý[ósÓÿÿÜY_LE_à ´XC+AxhÃC±ð€FkUt1$6Rþ¤jˆçÞÝ­]vÏÝ9èa*51>Ö˜ ¾˜&Œ±i›€¡¦Æ7l_úÒZ¡ DÀ’&%œß;w{s ûç¸3q~Y¾ûvçû~ß|óÍÌ’õ [­®J¸J,’´jSo KbLÁÂo?\æ}ß6öû{¢Çd¬ *Ö4åèÅôSÅø!ú+":bº¡é©ûÄO«_–Ÿ ưFìŽÕeì*,v˜|ä*3ïSû=äO©’¬|l¼0XÉë_,Y÷y àgD%û¼Þw0J¾¬\*x¼l”ÿàd=຿NÚ¢å¡øSþETîý¨p ±ü{~@O|W˜4ã íAò½Ï ÀäVæËOóBýͽ1 XAN|XA¥s›³›³+h¼b °ŠÊº“'“'WÑøc€U$ÜH^O^_5ý­¥óÌË?O²ü£§b€Ô6ó"à/toý>` W7ç7çWÐÓçÑÄÔ ÃOýT•äòóÖ bæ, —ôü0`ÍNÍrùyõŸ/ÛÕ—~Þøyy¦|l…âç­¯üìüóòŸ/âÔE@áÆÏÆÁòÏMÌܯ¿|ùwKºå§ºÝ>áVÚñgË5ÄÊxk¨¾Î‘¼þÅ’û«Iû1-§'ø3-Ùý—}ÎJ¯qP{6vÿ-4ÿ5~zîÖ~UpþRþõ{¤ýáZæ{þ³ünÏÿ¶°š3nóÏò;ÝÿÙý—úáÕo½8å§û?ïüaùéù¿Ûü¼÷êÇ.ßl^ÇÏ˿ݺ¢ü¬Û÷¯Bó»}ÿtÊÏÆáuý±ç¾ü»%ÝòÛÕ«WiÇÿ‘Gûž,¤%»ÿ±ÏY™//«›Ÿ•ìÿ_…âgÏ߆k×rÆÏ;)Íã¤ýâZòίüÿÄ –Еs—K(ž,¡¹[—KÈ¿ïÀ2:ûìû€e”|ë!`mË9ùw:ÿ,¿ñ}p y{°ˆ¦+/n£©`%´ €ÛhøÓÀ]tq†´»i?<~^ÝØñ¯Uþ pÎÏ«¯ütüÃöüNë½Pãw»® 5þÝâ§ã/¿×õ—/ÿnI·üvõêU:åO}?vþîï÷§ß?xÒÎÿÆ?ÑcrHS±®)?ÖqVlã§DÈþ>Riþ~G¨ñû¦ÊŒ}©}9DZmê?ÁÕ§ÊØ2­¢³ÞëÁº¬fž÷à¸"Yúwi†ŒeM¥z‡¨(A1t:­Gd%¬KéçíѨ"‡DbBR-ôŠçÐ^•â]ºd!5O<š¦¤ú -,Ñüù…ça¯=DED] aI7ê¤Þ*?Dj²J’åľœ±/OåSÔqãˆÆŒH0†1â§Kعž¬ßëH=5Àuøø¹ÃÇçßôû iUþèÍÄÐÍD³«—/UgÄú­ÞƯµÎHÿßʼÕ%!±"uMÃ[Ï ) †ÍUIt˪D—‘0SC¤¨Q C…²yØ.Ÿ‡˜|½ãùþ.]ÔÅ¡†NY‘Œþí½¯µ¿ÜßýTë“ωξ‡–dù-úov~Óî“RwyÜoê}–¼Ð< 8µ®_è!+Ù7F4ý´Cé»#2ŽÈj€t DE̸&mÆdòKtc ±Õßy=ø®Â-Ò0Lcöæ "†¥î΀~&0“›Žˆ©¨·*;@7•#-9†-ЛHê²¹y‹Ïëþ,ªšÒbÿÿÿìYÏoE;? …T®„À=€¶(¶”Vnš6)—lº!4¢Q¬ÆåBZ3^OìI×;«ÝÙ4é‰éöB¢ê‰3'8¶Gý*‡ÚóÖ»Îxlb{í&••§Ï~³óÞ¼}3ïÛõ¬‡êrJ”œ(㢼)ÊhØ>âHa’ô¾“ôN+ýÂÒŠ±ºøŒ(¾mrÊìbÛe‹ï2÷Žç`“Hö®Iö&?ÆCÛ‘}ÀéúéIéÚ»aÝÏ}Ézãô’’Þ7’^RÑK fÿÇ„G!†ÚÂÿ[´\À•Èž~€ÿ ÷¶â?`D¹äsÎìAÛyñTã’g'»/¶í7аÏÙ)iܨžë`ç ÅoÀ>u°M¬ýNþŸâñ%Jë ÿt¤·u‘ ñcQ–˜ÍoÚ”{áuù¤@¹E$¼à851LÞ"æ.Áœ,™vÔ¿¾¼’g…ξŽw˜Ï÷¯ÃøkôQñ +“nãån_À£6ÜH7ëó¤¢جbW¬Qâ†ÁèÆÎ[ŠÀs]¬u¯aç°ó¸_f¿âæß ÆÏ£ƒó@ÎGÈ-rJ¿­?z~ÿ‡ç÷/é3A>Ó3[¥IqèýðíaóÊO«ÿ¿.ä1ëí£¸ÎŠÂwœ(‡êOÀàÔq™C\N‰'4µÊ.DôbRl5îSïàï Ô<€}jŠLu™%Å+.¥ÑÅ`žª£½åÅ;!þ µòˆÊm טKï‰vl-X´b׈ÍÑw©ÝL[¢m§‰÷@T.1öÃÚ•#ƒ~ O‚¨\ù,ó¡Üq"È y­_~íu½[dƒÇwÑÐ2ËÙxãr²Íãò̇Ëű7ÿh6õýl*­? ¦õ©s ÿÎ÷Ã3»h°ÏƒNqSâ b3‹ú{ rÜ£xÓ;Øyõ<8ð`:&þŽ^ì‡ó@†÷zÕûSû¨øîñÙ'ßž}2¢×~ûYïë»_ƒü3|77 ýcÞºðV昷†š·:ùßî^¾Š=¢eʤ’mø˜ÍLÂ~p±li1b¸É©­)ÑêÈ^6;o±Íìó#^¶ï”ï…õQ|§Ü>`<èo(ã6˜½A+¾KrÔ~öw¡vyÑÈCi>ã<þÿÿìWÍOAŸm±$@³$H ñ¼¸°H4J(_^ĬÃîÐŽlg–ÙY žü<úpö¤ÿñÄÝ/þzs¦Ým§K¥_ì$Ûí›÷1ïÍ{ó~ÀMñ¤@eÜiMy*ó=`0¤ ñ!wᣔW¾ûȃ rÊ@DŽ rClÄæ˜«‰ã"0 ærâÉ„úzè¿«è ióÉfŽÑ<ƒE}»Èß\š[57¿¹:š… ,7ÛD®V'W› 3>#äû˜ªñµâÇ¡ÞPüù 𒇀:¶Å6ë&ö)Ûñ=hWg÷1/`bÉ…–y„v}j²Ÿw1ÿJÚß¾—5Æ Ë[ï‘Í'О£9ßr¡ƒV-v`å<6jSÆ,Ƕ°e29Z´ÉèÄ)¶ ±V¾#ããÒ.£‰]½1»$ %¥" üp¾Y¼¢¡Ê‰ø>+|C±uš´d.¯Izœ:·VÜùRÞsE^ÌŽ ¨¿¤‡+¦”oÃá»›}gðý˯Õ8*rTý™rÔý¤Ä¿¾ìÖ¹šþN½Ýì#À6%œQW‘3ÓÆ>zAÍ¿Ãà±Q>'íåuT³âgƒ`U9…uêÜg˜äkß×x©.ÍsÔÇj]˜‡öNžÑ€8&uE•5¡ën‰¹è»YÀ®ÃPuý:¥.LjÑKÔA*]5cÎó\lC©rA$,˜8é>™-åGYÊ[@.Réu¨lFŒ—¨”cÈ÷£rÿkøCu‹ÔJÜû@}Ü%mĵcsÄBÇÆãÞHN&&GÒÅDGò{ ¿Ö€_{§çõ™ƒ¹¾Ž¸"§ÝüABFümtÎU>©[¯ÒŒ‡Ç‡ÙãÃ!ã[ñäkñdÊ(`9þ~§k|ƒ øâþûžî,Ϥߓ>äÿïC¬˜%Ýn²kE±¥6¤ã¼½î}Èè¾9«nÄùR ßÁúäz3¦OÒ&%Û8ˆ«F_ÑÅe@D®ë ¦.Ï*{lR ]ìè{Ð Ä*ÈþæþtöÁÌ„.ßN6´»þå²íVó«•¼ïiùv¡ÏËz ¼Û>rW‰g§ç'¹?’ûã¢qìn‚cÏåþ¸ Î÷þ¸(ü{u+ÁÍ3eÜü¥¿³z ®nŽãä8.NppMßUÂÁ¿ný¸u”Npð~Oú˜²ç®.ÎC¡6ÁÁçÑÇÜ—‡ƒÕºÛ(³1}’Vðä‹]„&P2+`äd6D‘Ýõ!—eï•Á½Ò|Å®¤î'uÿBñk¥îw„_ÿÿÿìXÍoE;mD#5J«‚TÐ šHiäp@m$ð:NC*jšÆNA"ȯ'öÐñÎjv6_\8pè±âœù8Á±€ÄÀ !8V qà? nÌÛìÚãÉ&¶7 Ÿ²Y¿·óÞÌ{3óÞ¼F=¥žshç#:£ž Ñ0ÑØåîv‹~ÄUON=Ãû艡ë‰å>Ôä.í2JS©x· ôÓêY\GRîV›Ø­3RÝäâïa‡hú5}q Gºcý@ïþü9«}»½c—}€Ü~~u¸Õ¦®¦Gï8AnOVýécÜ™ˆ×éÿÂä£Z¿‡±# w¥àLÓsc;. ŽÇÑMävä³=äÏ«‘ŽEtNý[q©Œ×*`ANç•¥ n£ó½,·ÑÚ/qŸÂº‹é9삺çh§‰v$‘cÍyOÒ3lèÚãÔ…ÉyO“Ï$Èëóžv½ÞªSiUÈ–Ôô ºˆÒrKèàu®ËAßV›~Éù<÷ýg¹_ò_µž5.†Çµð eTnïŸÈK+>må̻܈·¬TªóS‡»_N{·öð n£Ëbà½Ah£)QNSþK#洞ODº8”tž>N¹$'ÉeQw|[ß½ò嫿ÿø#À7yóž"“ Ç¬ë×zøwÚð/Ќֿ6«V-Åìå\¤Ã÷OE±@oÚyIs.ÛùÇ_ìë!~ˇç’ç*öO?²öÙ}ý¿ïþåÿx__'Ô!Œþ ÿÿì™Ío#5Àôc?PKVB°\ …mQ¥m+¾–K§M7ìª[µj²œ*"gâ$¦Ž=òxÚÍàºGT!Ĉ?cï+$nÜÑ ‰öÄNwÚI¦Ù.Ú퓬™7ã÷ì÷lÿìdBQ+ABêÐß¿µØÞ®‹|±ˆ (àb+Âê:¯ß,,ÌjƒÐí]îÉûDŒwŸÅÎ;Ã.+¿’ö»ýÓö©‹ˆ7­ŸöxååÝõ!ó4ÛSúV¥X4,VÇMíç‹?ÓŽ¥SÆ;ŒÇÞäÁ\Óü]qü)=ÂT˜wíÓòy Ï(z1G'³íGOe)3*R, ì{%U,0º‹BüXAKëkA@°Õß¼ë‘ò–Ò^>ätý D­ëc@_vXˆm®?€]‰ã÷ª¿ÙWßbøYÖñ ¦*ð¬ëÙoËm܈ëä ãç ÇÒKŒs3ìûɺNŸ€ÑæEÚ9--¯6§ Z×óüÓ—Í©QìΧ}>KZÏ“`p=eùêhîþÑÆ7Þ÷·KßÝöç¼²Òç6½_‘òÉGÞ‹üs¯ÓÎuv©ÁH0eW¬ž>ïì6{Ï'ûëàs0pŒÓ'^%gâ£P.4L)@„ò1$ý8½”þ&‹"ìK‚pfÜçãqoœ®N¶îÞÒúÍÜIþ*q­äãø±|ÉÁ-Ú‘çFPÓAœÊg]ç|’±JJÇií‹Ëv%.ßc[‡ñJ\Î+qYob³yn?3LW2N.Ÿwu]ÔYççÅõ¨Ùìw?Sû=Y¹¤(tÿèùjÌ¡ço{=}Åûñ'%ÿ¬ž‡K½?%«ÊÍò—Žçþ4Jœ±˜~›«—âçÅszþ’ÓZ.9mì‡çô¬ÓnÌV9¤¢¸}€8hÆöÇÁé7cùk5VçV¼^­¿_ N¯,¿œNŠóõäôÇ1§ÿœÍø{§]F»,v9ì2xúû-Î"Ú(1Â80ùÌ{—ÏUƈÀpô>2ïRX·ÔïûÝ÷ÿ+›¨»ÃQšÃüŸâÿÏË>—`oσ¬ó÷n‹bU.BËϨë IY9ޓϼÍXÞñ~ï<û­ólÙkc%ÿ¦r\ùs¿Kær¹Ëï\üë?ÿÿìYOoÓ0w»1±¡A¹Á…‚IÓÔMh.dë¨`ZE â0©r·1sì(q¶•OÀ‘#ŸøÜ'î|nØmܺnÔ?cÀ@±”Æ?ÇïŸýüžŸZ`.‹ç}€ñ¾(Ñí¶ ).hOo|\Mñ+ñ´êrÌ(PwBôÖÂdxàˆEqÝþèæ>¦M9±BîƒT¯` ×|†^PÓ«”â¸u·lß÷÷œ·Èå«èQîAW=ô²ÚŒŽ›íß¿G“ é$­Šâfâ@÷àÞêݪ˜,ߊãÊJ*OêgOÐoÑÐObHí,‰5>å1|TÓùd­ÏUc^ApÚ­ìÕ%¾ûÔô!õÄ:›› ù=Óø-z,€a?øZ¯û­¨}»™¾Å.na]Q£ ÇÈ“ómCžÄ Ç–Ëh ·“Å÷‘%|ÃA‘ÅZVê!V#Ïr:ݯ1 B"^³ž$x˜ù;ËÏu:)ÛªmÚWzÍþœ| NÖí·X¶O¦‰s@s P(ä÷ŸüþóGëí^ÎkÆ"”äõ68»ûÏmð÷êíIþâò$ΪC¥SLW…Z 1tI‚¬ ‰¹å ŠžÌ¤Ëb½¼ñ`-Ë®Yî9çÝ®óP‡kç¹ïyžç¡A;ŸuøPÊëð3ËCwÀ¿U‡ŸeüÊëðµnþæJ^‡çuø(ýÿP‡÷ð¦ÛŸÓ:ÜÏëðùùý§»r¿íþãë+ñ,ÿCðÒŸÿÿìYÍo5w6JƒR¥Rá‚F‚’D Uº\ íìn ©Hh”Ý”K¤Å;ãÝ5™µGOóÁ•CˆôGŽ•¸ñ' r¬8À€8”;ϳ3©Ç;ÝÉGUš§L&ïÙïÙïÙó{~NÐ""hT±ç5±s°¼Ö¹×üŠ8r< LºXâµvHÕ{%nY]EŠ®ÃcÃ3Ï,vˆfoS³7oÌc&¶ØWüRïÏ? ZÛÍø}¿t½™!zMï·ã©þŒñ_ïÐÀrI‹2X²C¬.>²XØmañ–EÙ{-¶;ÒÚ«U,)0 Ô†±$·Â€Ü²îJ ôqx·K˜K\Õr@ˆ¶ Á#²Š™õ~Ñ‚Àk5Öóqša+²Û$”µ•i÷Vv<²üšJù5…p(ùÿ9ßj~2üÒ÷é4x>óêíá@ÞÇuë¸Ø³‡Äi¥ã¤x˜jãÔýÖ)¡¬ý®:'z †žéO´®“ãù¿óÊÏ.–n Îe¯= >XržIX{/™¯Ñø;Câõ–á§â«íïÞ¸kmPXõýír}«\Ùß-®ßþ¶Ï'Rv'ÐþqÏÒ³c½‡…ñâx#æ÷´¸$qBòØ'H§¸™˜‹)|¬¡:6|,;õãz–?®_Å­›ëöJ_öZmzØ%» qÔ€D¶²œÚ·ª X’ ‡œø®ò^vÞ{oÞGÏ wø5(_›ßQþša¼Ay-wTÿ³öcHΤàžfçƒ1ü¸¦Åe ­ÛJvz<§L-@žýê‘–Ìû}V¢µEX;J yÆ—äHšù:k_ëzj_[ð¼s÷;øyVúý Ðî‚í=}Ü}ú¸h÷z=+åœþ÷ ;¿åYW›bñåàu^½óôóõÄéÛN/Íæ;?ÿŠúqÚÄh‹M618¹y8å <6±ØÄ\[M\51õUÂS„ò}³†Þl4â4ùQ^<ìFø÷±áá“¿JˆŸ·ÿéQ骎»ªã.³Žófdƒ? B„,ÇæU—]Ç-£ó­ãÆ9]ö½ÖucþŠOï«‹­KóŒÿzž[ŠÑ¹å˹|õ¥W8[}¹E ©³Îýçý¶ñ2i›²>Y ¶$5I4ÝQëUØÏá(5l€¯-xÈÜ*÷â hž«"YF­»Á1u?a¸iN¦Î¹'©Ÿšú}P³ãfOQ õ¨¯Ò9óEuû¸¸“•7.R/+ÎYz”Æ£¯þôÏ“oJ~PôKi”õzȳâß¶êÚ-âÙî)òú–û Ñ„Ýk-Ú?ý¨èß’yžÈ²;iØUç‰(¬‹—Ì÷Ë8O ‹çdJo2S/kýôý´œB㋺É;Þ =ýþé?ÿÿíXOo#5wÓlµ»Ð*+õ°\P´Z´­T¤Ð ¤Lš%±a£NZ8TŠœ‰“˜:öÈãФ\9pDœ€O€8 Žð-øøœà {þ4ã—a§IÓ]°byÞÿÞ¼÷ì÷ì—ŠÚ-Ýo뾖꿈6cÚŒ ê3Úkãy¿¥û›ºoÄøb†¼”¼RL+2Qû•_y>ii|òÝç[¥øôw /ÐÎ<=Óû£ ŸîÆ8'Ç?›Èþž¡›nÙÅ<(»DÒ>ZÞÏ\Èf«Á'~€cž}w€\C©'¸’‚¥ä¤õËóï4[¯ zà|kk†/äàMünÇ4Ó“9U²[Ckù‡BÒ ÍǬÆè€Wè TWLÚŸÍkâ ‚­IùÏÕ)ƒHW‘ÖU’ò˜§¦Œ¬Î7cÈk‰€**¬`ïl Ř÷ê‚ ò꘱®æ§çÕ‡”õ$±° ! ľËq*Ó‚)ê[ªŸÐ€Â‰‡˜÷ ßPFÕÔðj¾Ï¨‡Ú±Â‘Îc¥4)ÎyÃKªK‚™Ñ¦=&Œ@^œ‚­vy)mI1xTnPF‚Óf­ý¤vpz´_yã-œ_v•ôÓ)Zçĸ/ ‹ùñ^L§ü’ø ©©oŸ} Ž„s!Ï{—Üsª†”wÌÄŽÕÅz}cOø×ÐAÿµŠ³3|Úý„xj|ª—±§Ý.Ã=rÔèÈIg0¦;&]ŸÇg'9íÍA÷ô|3&Bwwýœý²îA˜ >‰qrǸÎý4íŸ{`Þš–Ô¬?u ý šÛ¿¸0ž7É™È7ôýèñ×BêÝšåÄ›¸wCÜ?Õyù¨RW‹›ô9QÒ”Ùí7U,û½gá¾D‹Åw^ëäè‘uÚñöâë¹Ep7aïÿuï§îͳëæë݇a½»S\,Ž“ûÎh¾Þ…µ.¬Aaý ëLX;ÂÖ‚°æƒ5¬¹þMõ’ŸÂ¯eàá½4Oï—À÷ í*í¯Ü&u)'/ß-9Åð?¶eïûas8±´hüéÄùî{Óþª®ê\^åy·náÖ‘è÷£û,Z,N®û¿î-d¯§¡}qnÊå•à—ÍÇ(cüvú’Kxœãc``à`d``Ñ@ÌĬP>#æâŒtßxs €©ca€Êƒh÷¢Ä‚ŒÌäbÿ¤¬Ôä’b> Ø „ù‚Póá4 ƒ¯³0ˆ227±$'1I/jŒ^f^IjQ^bŽ^ZfzZfNªš ó=ÌçEs?’û | ó.’œ&+1"vÀhÖxœ”YÍG¯Y{ý•ıl ð-"s@Üfg¼Þû1ÙY{½{`UÓ];SqOW§ºÆÞÉå„8r á8r€ð åÂ!F)€àÀ ïÕGwõ›Ù%©Uõ{õºêÕû¬ê¹Ê»ôûUv[x.3÷[õ¸Ïo¯Ú+³V ñUx¾ù¸~eÉûáqôóv¬åy¶º;Ã0Ïß߯ç¹îù[U{Þò"~ žu™‰}Í‹Bè£#ÿþÏ¢÷ëõ>¸Ò”Ãòo·NÝ÷0ó¯xÚ9høîsÀwƒ±k/0öõ5Æ^\kÙñðãùœÏòÄH•Mxžfâè‘ÒÊ‚'‚­+=åæVΪ”ȵ¥RÁ¦<ŸñŒÝÍ¥)-ah”æc˜ÜÈQŸ%®yb„.Ù®8^×|*,À2L´ù®(U6« Dà놩öej&–«IŠy6„OL“ÉÑ€Ë ×åɤ–£$É3ùºHí vBJtÄÔÞ ð}77.P–Éø¨=“m™ƒ9(Ϋkg¸ÒÙ=YÊQæôÓU™Ò®—©RìŠ×f¢4ëI¾ŒvÔ²îLk‘›Î‰pñxgôªHLL(ÂéXdÂ~o^¸U‡° Øh>iX x;X-Ða¶2Z—±ƒ pl‹3È”[«“>å…û2OÕ£µ™1*ï©GyX+¦ß-–Q·ÊÛWQY¶?"k|[ÌZ”åu6ÎKè["Ÿ­q÷Aü\å‚í)•…!«8Ñè'¼Ê ¿ÍJS^KÛ³éHè=i¼Ž" £ñ,] 24ä’©‘\;Q¢rÃe.t»[õ†B[äà?݉ÌR°48™–ù؇'v1ØÌÜ‹b{@1`¦Êqmù×]6 ƒªÛÝL‚uÕ´å¦í9¸ûíœ/öíÝÅy~$i§(2™p\ئ˜®*æHkŽ!qNdRVqÓ¾ã)]¥Å@+ȪFв±ý»}T l MÉ ƒ òÙDe©Ðtö¼Úž*6ÅC‘…UEꢌ­ PrœË@.ØãNõÐÂþ×A¦:["ÂX󹔦‡öTžÈ¼\»"‘q_zU³dYfi{+´£wײôw;Iwgp63a,ú/-M¼ÿ‡1'ŸªÏmµÅõXæ¥ÕÍNžÍƒ”V¿d¤uÞ^¿¬7ÏùT&6ÔÀTZ{<›BÖe¢ea}O@Øf"iw„é$ d+ˆÐë‰ÍŸˆŒ¼4:Qi°š±=ÍóãmÈxp‚Q)ôCAÃꌔ6@bÛ`‘dû‚?û ˆu(õ^dïæs6Ù†ÒòuL2Y'“ã|*|娔¥©—4ù‰k¥/Þ™§á†Á’Àά>,i'ÆZÍò4*t<ËF@oL}p ”³‘E”â\ݱGfÒÌÝ: 5¦«7UêwÁP#€òlR¢Ud±~ w×%@'g5Ú¯"ýRìAÂUÏ„ÕÇ$â¹ám¶®A¨zc„nmþª§9– ÚޞĴë$}¤[‚2°¯)b¸ÏN‹Là^ÙAcǰîU„¯÷wg™5 \Ñ ÜœÜV äk€híaà®h‹\IzR»+7`™[’ ÈÒÊ”E›´cõÕµ™·|mƵ¨§uãÕú¼TePÆÁP.ðY•l§®CÆgFA®Â”r=¯ø4:N½°;â`u‹™a‘‚K¡MR—¦«UYª‡B‡zÛ¤zí»¥x½J­=Øý58he ”$ôÙA0ÖA<|¨‡ô¥"ƒ[ïpnÀ:Ó 7qC5Ó6ø¸#²ˆê¢ÅîÛöÐ[¬:jrQ¦Š|(M»qBÛ%˜Ã!Ça ™vS©.l¥MÖ˜›·„™¨Ô~l'Pï¸þ¼ ÀOBKÓSu9f‰?Є/*ÕG‚žOs×Ò·+ýÕu1wó¢Þ‚û<‚”ê‚kQõÉ¢ú*|êÙp'QcÏ„ùÙPæp­(ÙÒ±;'ÊÞY ôsðI³ÁušÀ©}G£pò¥r O ŠB÷A.ÿ­l I¼–¥Ò¶ûXpÆg‡c9>†ë!;í·õoÂsƒŒ÷¢>~üÞ$ü‡ÆoÒ߉p Žðáy3Â?‚ç­ÿž·ÉøOþi„ Ï;þ"øm‚AðË›¸Kð÷~“às—šøY‚ŸÇ„sʯµ¤ß"ô•¨éç¢6¦ŸÚ˜¾µ1ýBÔÆô‹QÓ/EmL¿µ1ýJÔÆô'¢6¦?µ1ý©¨éW£6¦?µ1ýZÔÆôëQÓ1ÿÿÿl™°EEg H‚„ Á!qww7B¢¸»{àîîîîîîîîîsØÞÚÞžÓU]·êýW÷¾éýsïþßY–eK;Ïjk™ãú²Æõå"ŒëM#ŒëËG×Wˆ0®¯a\_)¸¾r„q}•ãúªÆõÕ"Œë«G×›E×׈0®¯a\oa\oa\_+¸¾v„q}ãzË›gõ‹¾#óÚÌÕµ@±Ï+¯‹Ý*+×»u¢Û*`›b/œô/TìÂC_Ûðóx-RìvÒ¿h±Û‡ŸÇ«a±;Šn£bwKæl°“ð/VìÎ2ÏâÅî"ýK»«Ì³d±»‡¹âÕ¸Ø[ ÏRÅî!õ&ÅŸ‹w½¯ôó®÷’ùy×{K?ïz™Ÿw½Ÿèò®ÎêϳMÀþ yð€Ò ’yð€!20Bxð€¡¢‹ “~<`¸è6+öHÑÅÆgõçÐ6à(áç}ô· 8Fæä½+ÕŽýÞ-$ºxíÃÒ×>"ºxíc¢‹÷?%!ýxí“¢‹×>-ºxí‹Yý9øŒðãÁÏ&ý>'s’Ï žý‚̉7¿$sâÍo$ºƒ¾,üxö+Iÿà€¯ÊœdÅkƒǿ.sâåoÊœxùû‰î€o ?ÿvÒ?4à;2'Ùò®ðœWì÷dN¼ÿ™ïÿDxðþE—lùHúÉ„E—LøTtÉ„/…‡LøLtùŽü¹ô“_ˆ.™ð•ô“ _KLøFtÉ„o…Ÿ,ú>+Ÿ'+V’ÿw‘ ?ˆ.™ðcV>2á·¬þ÷aXÀŸ„‡¬øYæ'+~‘~²â׬ü\dÅï2Yñ·ðˆ.ò§ô“‰.Yñè’ òúsð_á'+²¤DÀ*^d㔼r/²qr^¹§ŠÙ;5¯ÝMW™¹~^»›®.²qZ^»›®.²qz^»ƒ®.²qF^»³®.²q9²q¶œY=K·̜)çC6ÎÉkwÜÕE6n’×îÄ«‹lœ+u²wC©“™IÌܸØÿÿÿÄYW}søa !çpw‡$¸sX"¸»ÃáB”¸»»{BÜ+îîîhºÙþÕ}[=w5ԥت¾}ó¦÷Ïïžî׳{•ûU1&‘ULã+7Îá+7Þá«7Áá«7‘¬r_¸ÙŽuâ&;| â¦8|qSÉʤñ5‰›NV:¯EÜ4²²i|mâf9ëÔ!n¦³N]âfUIãë7lj·>qKý7 n®Ã7$nžÃ7"n¾³ÏÆÄ-töÙ„¸N¼M‰[â¬ÓŒ¸ÅÎ:͉[äÄÛ‚¸eN¼-‰[åì¿qËý´&n¥³Ÿ6Äå8ûiKÜ ²ªi|;âV“UKãÛ·†¬X߸udYi|GâÖ“ÕLã;·ÁY§3q›"=fXHÞ³3îô^XÎ!+jp1ñkTw„æš}ª\Íàêâß™¬†á³ ®ip-ƒk\Çາæádõ __ø#Ⱦ¡Á nlpƒ›ÜÌàæ·0¸¥àVd­ ߯à¶·3¸½ì¹ YÃw¾+Y'ÁÝÊ#ã#%þ}ñÒýË1ŸÝ&¸'ìMïrÜ'\‹üû ÏÇ+Ígû…ë’ÏÀp]ƒÂu ¯2þ« lðñïNþk÷ Ü+RŸÞ÷1¸o”ò?Šüû¾¿Á hð ùlúìPÁýgŸá0x­Ùÿ:ƒùur÷DqÁ%È2 _Rbåú+exÖÎ÷X¨†0_VüÊ5°ð\¯å̵žk·¼`®ÝCsíV̵{˜àP»Iãh™0ŽV1q´Ž‰£‰£­‰£‰£½‰#ôH%¤ú<\§‹œgëjøn‚¹_¬¾uÿbûêìhÁÈz«u½Ä‡ûÃë/îÛ_¡§C{j´§†Âïar.ðà ΟQdcŸˆø{›ô¾s’Ü÷žðï;çʻpß9oá¾sÞÂ}ç¼…ûÞ_ÖÈŒ‰cxLÙyÄ1Â|v¤ø3%˜ÏO|ÊfäÖ™ å% ¤õ|’ÕóVøõÌ1xõÌûõ|>´ž/€Öó…Ðz¾ûÇ¥ ã¸,&ŽËcâ¸ÂÄq¥‰ã*ÇÕ&Žkdô9¾E0÷_AÌôëÿ}!¿™~=âgz˜ã7@çø(ø9~òï»»¡}w´ïîE²¾»:ÇïÇÿ;ÇÎñgPpsüF$«ó›à×ùÍðëühß ­óÛ u~;´Îï5’ÎñòˆÃ›ãBçøCÐ9þ°ø&Í㣠óøXLÉã&OšjΧȭ9žÎ|F Õ„__¯üJZÏo"Y=¿¿žß†_Ïï@ëù]h=¿­ç÷¡õü¬‘T>Ï#O¾€ê—P]øj?óøMÂ<~“Çïbòø½Éã&?š<þdòø³¬auáW¨.üÕ…ß¡ºðTþ„êÂ_P]øª Ûq`uÿ/÷œäéÅ$ût'TvAu¡PäëBá(ÿç’"‘jDÑH5¢X”칤xäëEéHõ¢BT°z±Éê|ü:ÿ~ÿ ­óÿ uÎBG‘ÖyF”Z#©^”ˆ’éEf¤zQ2R½(í_ˤ]/ÿÿÔ˜upUW‡_N(…@Ú!àî¤P<’ÐB!ÁÚ¦…â-V¤¸[‘:ÔÝ‹ÔÝÝÝÝÝþ«ì›læ~aîIÞ¹“™´oæl~ÙwîKöww¿óæÆ†B!#k¼¬cB寣d++*üSBòñš“ ùú²5/¡‘ê Iª%4VÝHB²ê¤¨òÏHÐÿ!ük²„ ª›H8CuS U§H˜¤:UÂdÕÍ$LQÝ\ÂTÕ-$LÓZïéÐ3 gBÏR¾~6òs çBÏÃþùȇ_­eeÀÇLÝ×RBò٪ϕUù\ÝßJÂ2äwi¾µ„åȯÐ|[ yªÛIØ­º½„|Õ=$¬Äµ{4ßSB!ê(Ò|š„bÔº×ÕÜq†©î%a¸êÞÖ`ÿ^Í÷‘°ù“ Gèž¾Ö#?ºT÷ ’P¦z°„ºØSOu¸_Ã=m{/ùúY$4D>6TõÜt´ÌM'ËÜtÆÜtÁÜtÅÜtÃÜt×¹‰±Ô1ÊRG¿*êkÇèþþƪ aœêú÷]}Lwô1Ãâc¦ÅÇ,ø˜ sàc.|ÌóáO>øSþ  ÁŸ"ð§ü þœðåωŽüfáÏp F€?#ÁŸðçT Ê,ü9-þœþŒ&Xø31þLŠ€?ÓÁŸ3k?¥Žs3Ê27£-s3s3s3ss2ææ”€ü™ìÈŸ)àÏTðgZ@þÌpôq¦ÅÇYgÃÇ9ðq.|œçûðç,ðgø³üYþ,–€?gƒ?Kk™?mBþüYæÈŸåþ¬°ðg%ø³ üY þl‘P€kýX´Õ¢m°h;X´,ÚiaÑ®X´;]]^‹Â/×9Zã8Gk-s´Î2Gë1G0G1G›0G›òh#ö‚GçGçäÑ…Ž>^dññb‹—ÀÇ}ðq?|¼>^æÃ£+À£+Á£«À£«Á£kÀ£kÁ£ëÀ£ëk™G)²ÀǪw†ü9uƒ…S9!NÝîÜÖ²päp¹¹ ¹ûŽTÇŽ{¢üyñ xñT óâfÇ>¿ÅÒç·Zúü6ôùíèó;ÐçÐçòâ^G^Ü^Ü^<9úø°ÅÇG,>> ƒÃÇ'àã“>¼x¼x¼x¼x¼x¼x¼x¼x鯋—yñ xñ*xñž…ïGÀ‹À‹Á‹yñ±…_€?Ö0/^sìó×-}þ†¥ÏßDŸ¿…>}þúüÝ€¼øÄ‘Ÿ‚ŸŸäÅ—Ž>~eññk‹ßÀÇoáãwðñ{øøƒ/~/~/~/~/~/~/þ/þ¬e^¸Þ§¿ïÓß–ûôå>…?¬â>Eï>ãݧhãݧ:&Xu[Gÿ:êÿ:꣎ÔÑu4D±Z‡ëÜÆUQ‡ßÜÆonŒ7·‰ú÷ÙïIÆë÷ÆÆë÷dãõ{ãõ{Sãõ{Šñú=ÕxýÞÌÔn¿§…*Ÿ ¡A/†^íw†67þgè>YK‘߯û[ÿ³µ¥ñfÐÊø?3hc¼³¸­ñÎân¢ÏÁ~Û3ƒTèUÐ~çxwSý9ÞÃxçxOããiÆÿùA/Sý™Þ[ö¬S}¼©ü,a4ÏýèЛ 7CW|O`¼ï ¹¦f¿'´säM{ o:XxÓ¼éÞtoº€7]ò¦#oú‚7ýÀ›þ¹=ÐÑÇAÓ->fÀÇLø˜³ácŽ7óÀÍÁàf>¸Yn7 ÁÍ"p³¸–¹öa‹¾W"ol…§Û4_*ùíªËD§«>íÏ”ƒÑ•™RÁ‘CÑGG—sä_ÿÿÔØl•WðÛw€AqߨcËÜ]‘"P¨Zw…¢m)m) ØpÙ2wwa>æ s÷e.ȶÌå¼ôû/¹§ëýÒ ö’/9œ~ï=î¿çüò¥ƘûȘ:ÓøjËWÔñ|EðµïY+õF®×I½‰ëvp¨×Ë=›ùžè—þîw3Mßß^ê|EB¿£¼':dL'èwæ‹[&¯.Ðï*÷ 5~ÇÎ~wéã~ø®žÒá~/©c¹î-u×}¤Žçº¯Ô ¡ÆÏð=G¢ç9’”s$+çHs¤Â9&À9&Â9&É9úñUß³Lêå| ‚þ`yß~ßè•:Ê4…arÿT¾¸Ôi\”:ŸëQ’Aø5ZúÜ#ýð¿ká3£¥WÈ?Œ‘ºˆëX©‹CMçºj׌—„Üs:û“¥® é¿çðËwÒ=ç C™ƒLe²`²ar`raò䩜#Q9Gi3çH‚÷&Ëýeüé˹N•zZÀ}ªðÌq†’ãL%ÇYãlÈqä8r¬”sôÿC¸Wͽt©çq!u ×™RÏç:KêZ®³¥®ã:Gêz®s¥^Àuž±{“uÔ…P»OÅÐ/ºê2¸¿úá×@ãv¡Aqa…q»°ï¯„þJé/â~ô«¥¿YÂõ*©—‚)k¸®÷®–þZÅšu-°f=Xs!XsÑ.Ö¬‘þÅ¡wç¾§ú.ƒ®ƒnjÆ ß½9ßso.Pöf™²7ËaoVÀÞ¬„½Y{³: ?—zúsøs9øsE@®òÌñj%Çk”¯…¯ƒ¯‡o€otøs3øs øs+øsøs;øsøs'øs×nö§¿qûs·§?÷(þÜ«ø³ü¹üyüyBñçIÅŸ§vñg§9Oƒ9Ï€9Ï*æl ¹Ù¬<ßl[Þjåç›=÷â!e/VöâØ‹Ga/ƒ½Ø{ñx@_žóôåyðåðåÅ€¾¼ä™ãËJޝ(9¾ 9¾9¾9¾9¾éðåmðåðå]ðå=ðå}ðåðåCðå£=ôùæcO_>Q|ùTñå3ðåsðå ðe›âËvÅ—-x¾ù¬ù¬ùI±æç<ßüÒ‚ç›?Á vÔzÏ7_zîÍWÊÞ|­ìÍ7°7ßÂÞ|{ó=ìÍÖ€þüêéÏoàÏïàÏýùË3Ç¿• ¹sŒ ›cˆlŽD6Ç6dslKŸþìEÖŸödýé@ÖŸH²þt$ëO'²þt&ëOÚ3Ÿoº’Ÿ?ÝÈíOwrûÓ“¬?½ÈúÓ›¬?ýÉíÏrûs¹Ÿo’5ç@²æDns&·3‡(g<’¬-'5cKøå»}Èo/ú’{/öVöbØ‹~°ûÂ^ì{±¿ì…¯/‡6s—/‡‘õåp²¾AÁr<Ê3Ç£•Qr<r<r<r<r<ÑáËÉàË)àË©àËiàËéàËàË™àËY»Ù—ðy}þÞ;Hq'ʸÝ Ž ;F)FŒVŒFDƒc Æ)$€[ñ9c¨çüF)ó;L™ßá0¿#`~GÂüž ó{N@b<ˆâÀø€œë™ãx%ÇD%Ç$È1rLS!Ç &“Á)àÀTp H2ÀÌÿ™Yždƒ9à@©â@™â@980 ˜®8P¡80¨kEr=ç7O™ß|e~ `~ a~‹`~‹a~K:0ÃÓ™àÀ,p`v@æzæX©äX¥äX 9΃k Çùc­Ãzp`8Ð,ç‹Á%ÿ±ÿÿÿÔYpTUý°wBU±÷Þ°K R”^U”Þ¢4齘F:%HèÅJÇ$€Îö£bï½÷rwrwÞYæÝ˜·ãÌÆù“³ç¿ìþ{Ͻç¾ÿ7Ö󼪞y5åc’`?‰‚“øh |+>ªðçó¼ÖÀ·ÃßVÖÇóúv‚·œÁ¸#\K'á3™ï,|à}ù»‚ù®‚W2î&xãùð½Ý÷5«yMOà{ ŸÇü@ÁWƒ5Õ׿õ<ý|ð5åóùój_[bÄGàëÊú$_ÙwùúÂ/g>¾«ðÉÌ7œÂ¸‘àTƧ1n"8ÝWöQJ}”8²Ê‰£/üo?YŸÍëû Îa<@p®/¼<æ;æ±@Éã%k!ë …Ç"Èãz‰#Z®!Àmdn°àMŒ‡ÞÌx¨à-Œ‡ ÞÊx¸àmŒGÞÎx¤àŒGy¦?Fx,àqžé›ñÀßxà‰°>Ö õWv:ê´KÑi·¢ÓÐi/è´tÚ:³ÞŠã(Qâ(Uâ8q‚8COCτٷÏ:öíèۣзÏYêý¨÷¡Þ_‚zêý¨÷W¡Þ_ƒz=ÂõÈ·mÞ;iÞÙfÜq^3øY¿³ïM˜}*³ï#eö} ³ï˜}Ÿúìóî3æo›}_Ãìû¥œÙçÚ?o9öÏ ¥ÞVúçèŸw¡Þƒþyúçƒ0ûçsÇþùúçK蟯Âô¡oóø­’Çï”<~yüòø#äñ'ÈãÏø|à7ðßÁþø|à/ð¿Á I䨅œëDö>íLö>íB¦Oï Ó§w’½O»RY>sà\Ð/ªð¹¹ÀÛ®£ªr>¸‚ëð+×QùÁ§0Î…5yÂWg>øák0?øTá£Ä(±^j’©—Zdê¥6™z©C¦^ê’©—zdê¥>™z‰Žp½hú5¨€~ ý~A¿&Š~MA¿SýNSôk¦èwºE¿3@¿3A¿³@¿³A¿s@¿sA¿ó@¿ó+©~T@¿ ý.ý.ý.Qô»ô»LÑïrE¿+ý®´èwèw5èw èw-è×ô»ô»ô»¡’êwcô»IÑïfÐïÐïVE¿ _KE¿VŠ~­ýÚXô‹ýÚ‚~í@¿Û@¿ö _ÐïvЯc%Ð/_7ˆ¯;Ä×âë ñõ‚øzC|} ¾¾Ž/°Ç*”s÷ñµÄ Ð:^øAÌ'MfÿQì·×m‰ß^·¥~S·ý¦nùíu{˜ß¤ ~žq†àcþн*ÞódÊšã~û}Å çºßíGnûÝþdßï û~÷.2ûÝ»Éìwï!³ßHf¿{/…Ç`Ç8†(q Uâq ‡8F@#!ŽQGs/ô9ïdÀSO< °íÞx ÙŸgñ1ølY?–ì÷Ï㘜|²ðãÉ~_=ŒÏOd\k‚>Kæ~{:ãÙ°¦`›÷ÎàõÍ€Ÿ ØÖ3Oš#ó`}°7gÁL™ 3e…>¿N ~ó €·õï|^³Pð ½ç_ û´à%€—^8Ø×KÉë·'ì,Ç/×zÎv¬ç¥žs•z΃z·z.€z^õ¼6L_Øäè ›Á¶€/l Ó¶;æq‡’ÇG”<> y| òø8äñ Èã“_ؾ°|aøÂ^ð…}à ûÁ€/<õ?ó…bG_(_(_8¢øÂQñ…ÿÿĘwUƇc{ö"pG, fKÅɈ (Ib)JÎQ1 JŽb ˜sÎýC²"%HŽ’á" öÔõÕûÎz½[oêªv«¦ö»Þ7»Ûßëï7³—äy^)>šÊóʈç5ý;ëæ¢W±í>ˆ [ÊšÕ¼¦Ô[K}×;ŠÞÆÚ‡5É¢S乜§¿ž õ4y¿_øýÒ¡žÁGø(õ²²~Q¤ð3Šê™R_Ìõ,ø¬òR_Âõ ¢—²®(zëJ¢—³®,zE¤ð=R•>Ú(}¬‰ÑG[8·¬_ËëÛ‹^Ǻƒèõ‘p>ntôñÅÇ?7›ÁÇ-àãVðñ/é#K¾CPÛε΢w°î"z'뮢w±î&z7ëî¢÷°î!z/랢÷±î%½Þ û€î ºŸèàüþPz èA°~0ÔƒG >†€µAבsöów¬ õz¢§ñzY€‹Ã >]ê¹>ê#¤~ˆë Ef=CôÖDç² çΔz×K=ŸëM ïQpnk €5§5ÿü5³¤~†ëc ncÐY^3ê6EÈð(ƒJ–GGstLÉÑq%G' G'!G§ GÙ£œ< þpáQ)2Þ øx£âãMàãÍàã-àã­àãmÎÔÎÔÎÔÎÔÎÔÎÔÎ4Î4L0gª{ñ9s‡Â™¹|Ì“5ÈΜ;æÜ¥0§10§ 0§)0§µÂœ6 sÚ*ÌiÌiÌé 0ç~…9(Ìé Ìéƒ9ÁÃ5/÷8æå^%/Í”¼4‡¼´€¼´„¼´‚¼Ü’;¹ó pç!àN§ÜéâècWÅÇnŠÝÁÇàcOð±øØÛ¾À~ÀþÀÀÀAÀÁÀ‡Ì*^qîL=Õ³3è…Aõ=;w†Gv<¥0b¤Âˆ§£€£)þÿaÆ(\x¸0½„¹ð˜ãNP|œ¨ø8 |œ >N§‚Ó,\˜\˜ \˜\˜ \x¸0¸ðpáÅs!è×… /9ráeàÂ\à› ÞR¸ð6páà»Ê=Â{ >|ƒ®ó;Ïq~ç+ó»@™ßW`~_…ù} æ÷u˜ß7Brà}G|ø8ðQH|âèã§ŠŸ)>~>~>~ >~>~máÀ·Àï€ß~üXø 8ðs‚9àºOK÷i©²OË”}Zû´öéWاß`ŸV†œ·UŽ}¬VúX£ô±úX}¬‡>6@Cæv“cn7Cn·@n·Zæ}Ìûv˜÷0ï;aÞwÁ¼ï†yßó¾7ÁóìÉyí(—‰àÝ$©ã?&‹Îg]Kt¶o¿våøökW®o®]y¾¹våûökW×g‹.åûÑéÑâ3×Û9²&#j¿îeE k®ùØç˜ýJ>(ù8ùøòqòqòq$dÎ;öqBéã¤ÒÇ)è#úÈ>r¡<é#ø]f»Ï* û}ÖPÏ~Ÿušìÿßù—Ìý×2÷_Qe†“•NN…Nóãÿ.K÷í3™é›{±ª~Éþ.;g¿ÿÿÿĘwpUÅ7˜|o’„t z H/é‰CïÅ¡÷*ˆ(MzïQб‚u¥¨{£*XÁ†‚¨è¸;¹ñ˜w3óv2ó}3o8só–ÝwöÜß¾]Çqœ0‘4Bh8ljrŠ~^½×C¨Íõp1\/CõXÖwŽcJ:žuéÖ@ÑÿQ¶èTÿŸÇeÝ“ÿV\/ÇÇ•§ÉwB½¼wnƒhô‚c{óüšß‡u$龬£ø¤QÂùÃ…óG—pþ¨û#ø+ø>ƃ àc"øX‘/>š¯Á«%Qm0ëJ¤‡°®Lz(ë*¤‡±N&=œu 鬫’É:•ô(^«÷ z 豠DZöŽõ  '‚žó'CÝû%Ò˜ >®b½šFÔ3ùøjt½YPÏfC#ê¹<¿:Ío˺é<Öi¤;ÀµtäzCªÀõò¿¨Þ‰õݤ;³nLzœ· è®<§ Íéõ\oIõ¬sr^½ŸmžkZæ¹–çÚBžë@žëBžëAžëCžøäBSK.4.4.´ðÉ…V–>¶|l#ø˜>f€™àcø˜màB.p¡-p¡p!¸\h\è\èd.¤8æþ/úcîÿBš?êk¹~ÕgB}×;/:“^Ǻ °£/é|8vëÝ4æ@}=Ïï'°¦¿ÀšÀšÀš{ocÍ® ˜¹3XàÎàÎÄRæNWË~é&ôKw¡_z@¿ô„~éýÒú¥Oî ±äÎPàÎ0àÎpŸÜiéã(ÁÇÑ‚cÀDZàã8ðq<ø8ÁÀIÀÉÀû€;S€;S;÷w¦w2w¼õÚìG¦[îG¾<L™/0bÀˆ…ÀˆEÀˆÅ –,X ,ØT ló;Ã2¿3…üÎò;ò;òû0äw.äwžO,µäÀ2àÀràÀ ŸXeéãjÁÇ5‚kÁÇuàãzðqø¸ÑÀÍÀ-À­ÀmÀG€Û 2’s¿ïú}»wý¶Üo| ù¸qžôl˜obÅ_+¾V|%0ák ß®–Àïg›ç“–y>%äù´ç3ç³çsçÏ ÏŸûäÂ7–\ø¸p¸pÉ'¾·ôñÁÇ/ƒ?ƒ¿€W \ø¸p ¸ðpáwàÂÀ…ëÀ…? ™ ¶÷éoËûôpŸþîÓpŸnÀ}r”¾O!Jß§2Êß:B•Ý:”ye^‡Rz®Òë‡u”…u”ãuØömD ë0õm¤Ò}¥tßVàócÞc”Î{¬ÒyS:ïñJç=Aé¼'*÷ŠJçý.ܼ{÷dÿ­]Ërðn׫S}%ë¤ÓY§¹Â·|Wø–ï·|¾å»Â÷{ªodNzë<÷ÖLàów3ÏÉwÍϾBm$YöG%¡?* ýQú#ú#ú£*ôGªÏ>¯a¹ŽšÂ:j ë¨ ë¨ë¨ ë¨ë¨ÏëHuÌû®4e÷ݹ¡2¿ë5Ræw½ÆJïÓš(ý®×Té=[†2¿ëeR= ê¦^ÈR·öÂ\˜_ÜÙJ÷EŽÒ}‘«Ìï€í¨>ê¦ÞÉ£9 ¡nê…¥÷ÝUéî›Y欹³BÎZBÎZAÎZCÎÚ@ÎÒ}>Oò-Ÿ'íùyrÿÿÔ—p”E†/d¹P#ˆ"Š ”A@ :$”¡$„ 41 HSºŠ ؽjèU:HQ,ˆ±¢ØËw“7³o2»!{ÃL†›Ù¹'ûßýûýï>ìx<žˆ@§‡¼Ȉö½JÊ(œ‰žB2¸ˆ /Õƒp][¹®(Õ‹É( £ŸŒâT/ùí3¿#«^ õöR¦ïºõ(©—w.޾ÜQ¸,¸ÖŒ{ðÕ:K­?¸‹p,¸«p¸›ðpwáxpáàžÂƒÀ½„c­¾Wñâ¡Ä‰`ßõèžD<œ8™æ ºïUNF õq6xŽŒ¦To†ë{Ëý6§z8¸…Œ‚To‰ù12¿¸ðƒàAÂt/‘¨–zºßTú̶¨%Èœ(ðáà¡Âi4?8š¸#æ'ÊüNTïœÕ#©Ç€´çØ÷rÍy_Çœ÷³ä¼¿%ç±”ó8ÊùÊy<å| r£‹eÃrYGWº¶æ'Éüîàáä‹d?}1Ò±£,}L±ôq4õq õq,õqõq¼ÁÈÉ“È/&“/%_¤’/ÒòÙ=f/¤[¼0×cö™?êóPŸ*õ‰TŸ„ú4òÈtáùàä”ù“éÚ¨/°¸fa\ó$¹æ)rÍÓ9\³õg¯ígeÎTª›ô<9è\äºof:î›Y–}ó¸eß¾B}|•úøõñuƒÞ$ÿ,#ÿ,'ÿ¬ ÿ¬$ÿ¬"ÿ¬&ÿ¬¹ÁÎ+kÏ+ëÈ3ëÉ-[-Ù–‡l'‡ì ‡ìt<¯ì²œWö‘+Þ½Îç• Ž9ßhÉù[–œ¿M9Ï œo¢œo¦œoñÓ»}±‡|±—|ñŽŸ¾ØïØÇ–>´ôñõñ0õñõñ(õñ˜ÁÇÉ'È'ɧÈï‘/Þ'_œ&_|pƒùâCG_|D¾ø˜|ñ¥Å_åÁçÉÈ_;úâ¢Åß‘/®^g_œqÌù'–œŸµäüSÊùg”óÏ)ç_PÎÏùé‹o}q‰|ñ-ùⲟ¾øÞ±?Xúø£¥?Q¦>^¡>þB}üÕà‹ßÈ¿“/þ _üI¾ø‹|ñ7ùâòÅ¿ùì‹ ³þ³xa±Œ%˜ã{¨&G(óoÊü[§ ÒN)¤´SŠ+³SJ¨k;¥¤ÒN)¥´S‚•ùwLievJ•ý·ËrÔË*³kÊ+íšÊêúýŽ)¬ÜöG 2ï¥Ìû£ˆÒûëôþRzUzà »zæÖ\ÖaòÌmJ{¦œÒž¹_äÚÇ;ûx§¥,}¼‹úX‘úX‰úx7õñÜ0{¦ŠÒž©ª´gª)홥=S]iÏÔPÚ35•öL¨Ê_ϸ>§zŽÏ©¾å95°<§0zN é95¢çÔ˜žS?óÖÔqÍ,ëhnYG8­£­£%­£­ã?÷mkÇ}Aû6’ömCÞÛQÞÛSÞ£(ï(ïÑ”÷Ž”÷N”÷‡ò9ïa2Vàß:˽¬w^î*¼ÜMx ¸»ðZpáuàqÂÇÀ‹„O€3„O÷ Ÿ>>)¼|Zø"øŒð%ðyá+à›$dWÁ!ÂEð„ƒÀÑÂEÁ‹„CÀK…k€/×_——ÕW® ®$\\Y¸^@f?}™«z©7 zêU¥ÞêP¯&õÆTo‚zˆ×¾—Mçšê2ÿ~\[C¸)>³™¼7G½¦7û¹ sZÈ{KÌ •9‡ñ™µ¼æ3νÞìgœ#x¯íÕgœ:^}Æ©ëÕgœû¼æ³L=o¦7²rÐS¼+¼§ôšïÇ ïÄçî’qõR?$|„æ·aJÜ–yq;æáÄí™Gw`IÜ‘yq'æÑÄYƒ±uî Ü ¸;hîã={÷†ù}`ÜØbi_¿!-K™'ocžBÜ„y*ñvæiÄ;˜§ïdžAœÊ<“8yV¨\«Ù°VslÖÊØÌµšë³Vf.΃\œ¹¸rq!q¸&óp,äá¸P™{û4ëܹ7®á¸†‰ ù6)À|[ù– ù¶òm äÛRÈ·eoË!ßVÜâ| Ód.­"-Ì«‰3™×`N!ÎbÞD|ˆy3äÕX“­ ë°ÍgŒ-Dó䈛ã_[êñ0ƒ×G3¯'f‹Ó\ÓÌfÞÈsŽò÷ô%‡y'èOýi úwYè7ΓÌßwÓ—\ÒäyÒá<{γ×â<Áp¼ýp¼ …ãeÚÄÝŒ]Ä$Ž}PáØ‡|ŽmÄ#ù8÷7Wá¸'mjöyrŽ;Lsó™€Ç%>Ïó 4ëÞ•£ å˜-†o˜>þøøyðîðî Ä…ü÷W4éãÁÇ/_†B ¯(x÷Uï.ï¾Þ] Þ]ÂE¡Iÿ>±=à}Äðò³pyàåçÖ"_ÁË5ÍÛϯƒŸ—‚Ÿ—Ÿß?¿ ~n˜Œéç.!ýÜ-n­ŸÞhÞ'”'-EÌAÄטÅ ®HìfN$.Ç\‡¸u¥»¤³Æ^€{QázZ9äíwÙäðÝ÷ÀZÜ`Nܧ ·¡ƒÞl4>º 0GAŽ<¬ ñ‘êì1ˆïãÓO@Lƒö'ŒéS zŸöSgÏ€¦gAÇsÆðyˆaSMÍüÄ0ÑÐÈ5ñ2Í‹`~…8’ùUâ(æ×ˆ£™_'Žáĉ¥ÏŠ<þWbþ€¸2sâæîÄU˜?#®Æü9quæ/ˆkðñkÒg-Lãuxܸ¿7kzˆ÷6C‰ëòø0âzÌÉëC­7àñBÖýH¨ûQ ñmQG¸îoB^¾9ð6äå;ï ç\|OA×û~Ö= ô}HóâXx¼Kêk úÚ€¾¶ úÚ)èko7ÔÕÑFW'ÐÕtuQÐÕUAW7_4ï¿{Ñï™{ƒ–> å#a}_¾†öDι…÷=º•ÞOô~j¡×àFü½ý^•ÏÙSx~Ç÷^_ ù¼ô­}÷;!Ÿ¾ÞúÌ祄|^úQÈ祟 ž~†zú¼ëW…kûMX?;ý.ä³Ó@!Ÿ ùì”$|Þ¿Âúô…õ©íò^Ë÷¯à-ý„ÍûW¸¶þ ×6À¡·›ñøg®ÇˆéXˆé88ïx…óN°Èì¡L‚>0úÀèSmúÀ4èó ,>°úÀè[¡l³éGlúÀQX«èÇ ÒûOëû¿\ˆñI…¸þíЦC˜}`&xÈ,ÈÑÙ ~6GA×\Å>0߯o€¾… o‘‚¾d}‹úÀR]Ë@×rеBA×J]«úÀZèë@ËzвÁÆgŒwífبÐ6)èÝìÐÖ@H±èÛ¡¤CØ}`¯MØ}`?ô ð¬L¨§àYY ×–mÓB8}à/臅÷ºí€õÙ)œß™¥‚Ÿ¤Ùxÿ.¸ž?®g·‚÷›±Læ:œ²ñ©Ó×3 ã¬‚Ž< šìùÐÎC(€>púÀEŸ>`zÿ5ðþbðþðþëàý¥àýe6Þ_Q—kRI—_Y—§K×eìܻޣè ïQtïxï¿MŸºž~r¬ÐÇþ{w kuUa­Šüä ¾ÿ¾u¬Ëü Ñe‡ê²v….kW×eíVÐeœÂ NáºÔ¡³Hݺv£tY»Ñº¬Ý]Ön¬î96þÿò&ÄVÓÿé‚\qÃu”ƒë(osÿÿÿì—;,DA†gÄÊZV! ŠEB¢Q¬W² Ö›•xtÞïg¡Ô)$:F£QI¡B4ŠN£QhθçfÉÍÞc¼™I&÷Ÿ{¿ÿÌïiîH!D+L 3¢ ®i¸¾ΨÉ„’£æ ²ð^ .Ý‚ºô%z÷aÆI}wßbm_52`ÆÜýe²v £^©G½\˜Ã¸®‚ç#¨«A¢®=†: zu-è Ôu 'Q׃žBÝz÷Tc†èY¢çˆž'ÈýE¢—ˆ^&ü ¹¯F¦pz£F!Ô˜Yèi‚›Ùä~k¨ïÒO¼È7?ˆºôê8èt¸vÊd-º7­åzÚ0íCéC'éCéC7éCéC/éC‚ô¡ïû`Çß Õ‹ _ê#5Ü'öI¾™ÉµæIú† }ÃLn‚ÉÍ2¹Eçå[5ô­úÖ }›†¾-Cß6“Ûar»LnÉ08Êjë#m}¬­Oµõ™¶>ÿÄþ©r]3¹&wk˜ãÎÐ÷`è{drOLî™É½0¸TþW&'¥/æé 2| ÖÏcÖ/`rƒ^uʘû•¾w%³~”É5~á½ßÿ·™û´¦àÞÿ‡}ž'|ž÷CÿRÕýÁúÿu¨O¶áÓ·Mç9äz"œsrP$ϹîYÌ=ŸHÂÇ Öø Wë|GÞëµ$Ö‹’ziZ=©ypbÔóØü6¿ÍoóÛü6¿ÍoóÛü6¿ÍoóÛü6¿Íÿ;ùßÿÿì•¿o1ÇDÍ Ê„"j#J*†B\Š’ÑRETb8éä$¾ÜÁåîÚlÝØ;1!6„Ä‚ø:òT•@âOÀîùˆã\•¤ CÁO²^žó¾¾OÞ{Îesl%AhDœV¸ŸŠ/±õ…­Œ”/듊žç¯Iù•üŒ’Ïã+áÇ#õ¬„8oI:Oók~ͯù5¿æ×üš_ók~ͯùÿeþ-IŸ‰Ñ§¥ü,[p’}„ÇîÛ;¨rÅ+sdž :›~ïÚ±¾,éÓ1ú¤¤Ï±ˆxa=΋î4}[Û¿¾¾Ãþ.³·5è~îV-øšÛûGpVóySpëù 홯Ð0üy°ùã`³¿rû`Áüò§ürecfóUƒù:ïÿ¿ßSÓñËýTùÕçeÂŽqÝ^j:Μˆ![D]Ôð ¡á÷î"Qâƒ(ö¨ãaW„ÀêyMêÏ´‘×rñÈ<ÅÍáU Ïa¯Þ3¶|ÒöQ§Pu\+O¯<0ê‹åÊ]4Ù|'†ÎM#¦Ž“è Ð-%§«ãeoKu‰êh¿‹lû™C;ÄtQóÏîŽCmÇ3y¢ÙEÔ‚ë͘ßÓRêËãÀºQ† ö“Æsܤ%üе±…(*6\ÔÂõªéïšíž³0o9íž+æªK\Ç/{8 Õ¦7_‘–X>÷Ñ¡ÅbÄÇðe>#xýéb\ß"“ωt³¸÷·ÀàÞŸ–ÃS‡EEÇã‘{ d„Óî×mÖ®ÉêÅŸ“z^ Ë©Wœ.¯pòXpêÏ µíõÂCÜ!gæ(Ïüʉ%¿‡ øu_{íµ×^{íµÿ{þ7ÿÿìYÍOAŸ¶´(¤&Æx"`€¤ÆB@‘˜0€!bD"Ѥ±™n·te»»ÙNnx0Q¼NjbâMâÙŽ8ú w<èÅ“3»³tv»qû±Ê‡û²Óé›Î{û{oß{;/€Ò÷QpDæò Ɉ‘ÑÊfJQƇȳ™Rq`‘]Æé ¹è qëÎû¶¸ì?Åí3þ.FXóâ >Ð3ë¿Å?aÁ‡ ÓnÎÛ pó¥_†=79½í½Q‡=tßYóë^T(ÂÙÛÎ/[ů[OÖ |‰÷ëpr£{jc÷줴ùR½ÃzC½­è:š“_ë2äSàÏÏ‘Ÿ8áTÅôÇq‘;ŒøŠêø:o~Ý s¿]f¸k±/b³/Ô|Þ{ÆÉ…]äxQ¢¹ñt–Q / YÊÍ£EÀpðñä†# x&¯©Ë¢ÎäýÈ;ë¾Íø¥Q¹fío8Þ\èoC‡’§~ÚaR7ô+oRL&¨Ë&uÙߺÜ*u™×çfß9›}&?¥`QW|CÌ£²ŒguU›FZcõ )«Uu©–:ï<¯ýK;,âõY8•óªË1‡åµrV–䡇|‡Cžò÷ÇR©ÄÆH(ˆ¹ÆãžT'r†æêQ“¿“—(ý4â~›Óë<¿ó±mùÓ<œíÍÆç·H}øù8râwÞ/f>±=*·©gœñŒ"Â2Êêªj¶/ $jHGXÕÅ+XRD™± _V,©J¦€”œ,V=·8êö8¢üÄHšäÞ¢ŽŠ‰IIKéé±ùÛcãé¹Tÿ5T[] Ùô†@ÚŵÈA&7®Ïgó‹å'€W5ð”'fÚ–U}©¤!á`uYÂIÉÐ á`¸^yØ“sø—ò¥üÅì-Ìd‰NŠÉcÌ!Œú²2ʉs“}%³X–z{V²$Ÿ3ˆåsfÉr K=É*Ñ$ÙOgKi_Ÿ…zàksà£÷ÓGBƒýA¿îÈ£+ è×J½=‰uú*úõ _·Ëuæÿ©3o^zðÎìïÜÙß醟 ºŸ¿Ý%W—oï±P©3ÐÃ>·ÿ?'T]Î×ìä‚8µüs<âô7ÿÿìYÝOÓP?Û€HÌÈLŒñÉ,a DÆâ~à. "DBЧÅy·µ[¥»mÚŽ”ø"†Ã? ýŒ>^|òÑL|´·½u·¥º¯"Hz²›»_Ûsz¾Û³% €%sõ™ëÛ)õ21WÛ)õ›+i®Û;©ù™èéXîÉX)…f)NÝAoߘtå¢rç8¹qÜ>&Ó‘Kñyûë^”;wÝ\Syˆ“×ã£çiN^‚áÁ䊆‰. šnïÔ^jÝüÎ~V²(‚ì³ôú¥ÙfööúØ{–³×¡Û;ÕÓ¢ŸÏÐ JÛz~Pí=ùЊËD¹¼žýì8Óª;þ­A‹? cø86òôá;Šüjµž&¡QOÛœ¼¨Gž7޽¦Öq†é.cݸe©¼‚+Àäñyáç¯>p×'ņ°adÒ6õãÜ·•øÅ\úÄ@Å®øºµŸ¿¯_Þ¸óÆ±³ã>áC»/)Ii‡M©ÀžC7OØ—m ûr°}9 ¾ÌËó³ïœË>ÏCЖg×ecISÔE¬vÖ1Ù<ÐÏZy>ðø_Ûá/ÏÑ£S¾Nú¹Z/ÊR)þfqû“ÞäyíË;ó3‰>¢ô5[µp}·ÉÊó÷œÜˆG.ŸËŽAÔ…ccùø-Öžþ¼ÿ½ú{ï×gGhòmÅÚÓ3Á02W 2.jŠbØçuAÅ6 L ‰2ƒ ÖIÉR¨bR–…ñ÷Ë› àΊs×òf­U4\KÎJ² ç§V¦¦óË™ôøUÜZ>F\r#÷ñc+|ˆñMDÛóã†ïq~qüƦ*O¢i¦ëÀº¢­ê*.ý>º.U‰è…U`zí6±§ìñ/źx1†«w‹„’1*¬™a,ce\–g ÚF¡R—†‡TM"FAY4­NôBËr—V‡F°Žš×ÓÝ:2â臚è×ïÑbL²YSê:;ÞMß ¢î§¡Q÷‡¡G8CøÞÝ=ƒÈó4Þû^@{ý®Ù<ŽšøkÜuC±»ÿœŒ¹<(?9Ÿn?§t9œ³=õ0áœ}\úæIì·· œ³Ã9ÛÍšðÇ=üO×EQÐ’ ©XƒA·¿/Yy¿œ@²•÷d_µþ¯Ô ØW-¿Zí«sp ÿWÊœŒ÷×ní÷Ë›_ÿÿìXOOAŸ¶”ÈÄÄOf1@‚¤ !hL@‰5"ˆÅIvgÛ…ÝÙÍîTÀñOƳ~äèG z$Ü=zà 7gº³tºlè_ÿ€ûÒÉô7»ï7ï½™7}4ào Þzd/¤7Ê Þexë•<=òQZáM*¼ƒÙ€Nô–½Þ½–ýCU?*¼ý!Þ^Éð |Õÿz˜Tže¥NGvþxî Ù…ªø³ã÷ðEÕÎ鼪}rÜ—Îôw®ÿ•õ> ûk(û–Žf¾~á²2ˆÌƒ]ë`wùoÍtk=’v‡ù¢ü»R石”—bó>ÑqÅdË®í,b§¹x¥êøRÓmÞOÉ=Õ¯4gVñŸö#•/°£]½éSô ¶¶žÀN¥`Åîè;Š~"B?oÔ`¾¾Ð|?Ð sd‹)<í䉧FŸ,‘(¨lùy"O¢xS!^™'\¾Ï„{Á·wJ|ÔÜ üêFžÙw#?¾¥Z³_ÝÇaûÃóõú;àPèí¤Z³sPbÄ›…™‰ ®mË â»˜Ù.0e%¦„@¯Ð"3lš/cª™äÄ~ŠÚ—×@ý¾xþîÏý’‹-¸`˜Ä[[œÍ=ž[[™ÌLÜÁÍk‰:ÞX‹ˆc3zHêM'[‹ã%‰W•¸qlÛ!@»Y7°i»žƒ‹Ç£›+4/^Ì;˜•´ë]Š¡ø ìé72h¤¼TX'E6F^òeÔ0ãkde!ïnåKcd˜V¬µúú¼æÍÐÚïS¿Ä¢7±ÇžcÓÐr¸ð¡qêõq¸î÷tïÜ æoçÿŒ­ëéÅuf\gÆufã:S ÅWà6ëL—`FŠ´éBó¼Ô™K ó:³Qš=·»yûá£Ûñ½rh½—A|¯ü¯Ô¯ç±î} â{åø^ùìÞ+û2….ú‚ödž¬Ç÷Êr<®÷ãzÿd½ÿ ÿÿìXAOÔ@žÝ"1 &F9™&j€„…ƒÆ„"J4J$dE7Y§»ÓÝB;mÚ)°œˆ¿À£ÀÄ_`8ú¼î=êÍÚag‡ºÛíVAéK&³¯Ûïõ›÷¦¯_nºa" ÚŽíny¬ž\Ý1HÃÀvcŤÁ®ÒñŽ!:.Ñ1Þ;ú9:`83 }O¿ST'/´MT%ÓhaRƒNi&¬¡õ•Š»[©ûÆä„æë:r+ž±‡*ËÐ45XÝš˜>…›¦7³™Gœš ŸÇø©]ø Kü˜±›–í{Bœb‡8ÜÄ8÷DÀH¸¡ÃqÌ~å…ÿJáü§x Fð¸&ðàVâu«{MâÁüRÃð”ªu£î»ÈSH)¬¸Š­+A­=Å÷PMÑšÁÐrL:AkF)ÑKÛÐô‘bùQ4¤@úË$»‰†˜-ÎÍÏp~k¿¡~?Vs…/òÇ;õ³¯{ê±ÿÅ få­Êâ.t‰+æqˆuí¿KíV†Ë1ïy`ãîûæ<á× ÜU¯¦X‡Ÿ­ÃYuÓ`ös1­÷ðeÈû_Øÿï~ù~âzé FBŸÍ&ôÈ4Z Öy<µËz/Këe¾Ð¿“FâÏ³Ï m¼ ÀÖõ¾p.'áĽg½q÷­þ/ö8u•ù|+ôÆ_Ì“Ì_~ÞPÉ#†Û/ôÆs,ôU:,HL¨¹¶M‚ÿ=ä@ÛÜÇÄÀÈ ] û¸J Wר‘ûHT}o‚öýÊüåûå5×®»ÐRV¨ÎñÊ«K¥çKËësÅÙ{0Þ~˵ÅÍrDãàÔ·ï-WA«Wñ¼ð<ÒtÚeÞŸÓ}š”_æ'Ò}´÷´RÅ=¿ÿE÷m€þu_·<ÄíÛɿ˧íÓGfóg¢gÒ\G`·Õ´êý*Ädú5°L¿¦«__ƒ–~ãE­ïzÛúÿ)&ÈÅÐ|„tHu'ýV:«ÐI¦Ã n¦¢gþæ:¸EõÙ¤¸…¸hÕ–ã˜ïøšiTÓÁ;^Öƒrþ“~W× ¢”Ð.âôóž<;¶'ïIã7ïITÜ‚wü$î÷EyÎô~ççez?Óûœ”òËü¸zûV%<ÿ¸Ðç¼o@ÿz¿$ç¼â÷!*¯ªÄƒùQç\´Ærãteú—çóbé߸ßõ¤ïW´ôïYíëóp.+ô[Àã¤Ñ7²sÙL§e:í|ë4ñ\öÿÿ```Hââ4U ÿ¤¬ÔäÔ²Ô¼’”Ä’DͤœÄ”Ô ·ø¢ŠøôÒL õ¼ÒÜø¤Ò´´Ô¢âxç¢ÔÄ’T·äJýOõöžƒîh»-ý'3Œ¶[K99Ë׆Ñvëh»•´v+¶ñe'¤Q ÊÓýÖ-@ðEÌÂ7r˜2 ¾¶[‰Ñ?Z®Ò,}[®¦3 ¾v«¡åÈn·ÂüOÍö^D¶[ÑÒÃh»u°”“ñ|Ídm·Ž¶[Qõg0àNW°:9]™@˜àt³ÃˆØˆ}€8ˆ£€8ˆÓù` êuTÿƒø¥™‰y©9¦#¡^'ärÊ«[Ûrookìr‰),ïrpW7ºä@`Eë ¯gÿÿìYÍOAŸ¶Ð‚N„HHPªÑAe°¤ŠŠƒ&& eºÝÒ•éåâ‰1âÅp0jbâM/H”øpô¤"!ñbb Ožiwét»éÇvE¾t²ýíöýæ½·oÞ¾ºn2\ -I" 仟 /5dTé׫uìÚEz㌞×B¯ŠÑ«%£Œ ˾‘åáIx¯7p·—óÁ žËðÃ{"'@Ê{‘á­7ñzuNƒ—â–ô×M7smF·Û®_W«÷— =×öf)mçúØJåíÔ}x]&Þ`HCyú‹íp/åÉNæ×ËDnN±­µ«[k>ø)%—àãWëäÓîX~aɯ||Õ|Í Ÿ!ƽµë7Þ ûó|DÅ}¦ðo~¦Rù'ùbÇüâsìþ%t3Ÿ•‡²üKãQãáa>†’XW$yÉÅÅË“ÅçH\æzà¶Ðcýª&Ì,Þi? aù ;ìêõåÑs̽5ô(–“,pÎè?eô]úæxO˜ï˜i>бIª‘~•W„Ïú H®_¥=g~ Ú]‡´|¬¾‚GSò}>¥GOÀ/©‚âÎY‡V¼o c—ùHù>æ‰?»vø;Q€~tbý}ó”f?»NÌö›çó¦3l“êÍ{J³³QÇŒÒ0Š(’¤¥¯«¼Œ¤I 0°¨ "ubI‘ÓI Ç‘Å|N]·ÊûV÷úC¤¶L+(Ñ0¯†F‡&® ];á?~W7]Y¼.²ˆc1zÐÐs—ǃ:¾ÎÄňÐd°#nf˜“”UFÜöÙ9A‹ b˜þ0,#-@n²ògÊ_ŠÕX‡vÅÇ"·xNëágÉmŒ" uG0Šòׂae><º:£ü¬ÀñXPµpaAÜLgOŽZù-=„ÝÝÔ.XÀ®Z“]#QRRÕÏ—ó|pb½Ë ³Þÿ†Åö{†¯ò~²ÞOJ}®ÚÍóÛ ó~ÂÖ“bê\½Žé#U»°@Ó@çƒâU²× Å™º“>ïÔ:2æ·ÓwK±XYz{½_ù±CýÊb¥_q¤_éÛ¥ýÊóþ S|)¶Ó¯(<Òø 'Õ°èóý/}‹Êï[ šغÍÎoõÜcç¯eæwr?èõ3*ç*ûZ¦Õñ¦;¸Ý–§ÿÿìXÍkAŸ$m°…–*"ždÁJˆ!Ñ*UÄlM--¶¥õb4N’I²v³»îNÚTkOö&"âEñàÇ =xð/ð\(=(èÍý0“Éb’ÍöÃ’G6Óßvß›÷ÞÌïíË@¤Ÿï׿Gô+¨_û¬‘H·…}ÔE¤ÇºoÈòQC?Féw9èû)ýÉ’>ó¤7Õ ?]L~8;?üMþåúê‹õÕSüðI"—ùÐBfHÿy»DÙíc왼|ØüsÓOý¯bùÍ®£S|A@Çgâ±$š»spâ‰þù‘ø8]›‹àMâ_¿!ò3Ñ(În‡8RqڰƶÖã× Žw‡7ð'Å9Ø:<Ú2µ»¿šåÑ]PåÑ#ÊžŸ±Ç®c·îuŸ…É(B _ƒ¢›…Üó£ Ž˜ú^ðÇž·™õ Ôør>ß–^»ñ»æ»ƒ<}F$¾#|ó2S={ܳt:õÕ”N}õ¶¾ÞÕúJÛsŠïPM|&ž0R%(Ž¡<,‹xJ••I¨¸«gPZª«KÍÔyow¶Ðöl?Ü깩ËJ9# YoôJßç Ïæ›o0_3Ásæfõ— eÇ OL|šï}ûü6ö%ñ¡´ñ¾´ç‹‘ßurÈc3z¼­ço-û-MvÇñ=z¿^ï=©¼æëg;u½ßÓÙ¬#‡Ô6YE%O9GPÝ;¨³œ_ݨþþQ~˜ÅbGv1?‹ùYÌÏÂùÙ!¾LÀÏlŒžW¶ÚYág¯Açü,J‚êud~ >2¹v"ü¤›ç¨Ëe¹[ïûgóѺÄ|´»|ô-ˆû°qöô÷a¯ïngv·‡â>,¿1Ïy~Cþá>lAUÖÿÓ>ì;Ð9ÏoåG”>lµ… '+øÁt®_µ Uz9é…sÙ¦ÕÕÉ̵©4d½ÎUÌý¸ž þûÿÿìXÝNAž¶´‘ $ÆèÙD TR4&,‰$‘ 7Ö,Óíl»°Ý]v§üÜ@!ñç”GP/}^€ø^xwδ³tº,ívwƒ({’éôÌÎùæœ3sfNNp‰´i=¬§ÔKšpÌß'÷÷rû{ƒâ×êÁ—êÁ˜XQ)ýžî'_‘–a8}L>Íø Ãpp)µñ÷0É}{Cå)Þ‡×ã£sóÞã󆮨嚅lá© W ®#M˜Í ²aYHƪ¡ Ï¡¦–„ ¨ÕÈ,h!áÅíñÜÄTV ¿/Gëxtýný¤Çú¼=i¢aãi¯A××Y†eOì`O¯ËÊS½¥’,­³ñN~N{øù2çg‡œõ)^®ƒ^©½RÀP”Prß8¹„KŽ? ~ìõ{®ë)Þèn_ÝúüHu§?ï'·þîõ2 OÖϪ;=/’V…XƒEË0pã»LhAlXÀáu¬’Ø`,Pjz=:$2% Õõ^í÷÷:h=¯”Ïß+,ZFÙ‚UaNÕ]X˜Y~<ó °4ž» ý·D n<üèGNtä’ÝùqñÏ8¿8~xÛD€'…˜Ù2°iXk¶ åãÑMWT]¢%â 'ï/{V\þ¥¼­ÜʉÕ'ÅUr›eÑÙÆÄp¤¨ÁZš“¬-©\S‡‡Žï )o!ˆÑœ¬eOˆeÉ\Ú;€##Aï)¨úvÕ¨Ùl¼Ó~9Äã8rQÄû[ÐŒ÷ zñƒ×}ÍÇQÆÇë½=>}¦4!ú‰Ç ý’€žâ0rQÚÑ ›bTû½ÃdBéyôZ¼OIXëüw³Ñ Pt¿^¸¼ž½€?_ýáä_Ýø+ûý/œ¯³ÊKwA3/åñ¼ì»Òb_ƒŸ×1²t¨Í"Ö4LÞHsšÁò/¨oG’Çœ¥yݳAå¦ÚÈ%@so9Ê›µ¢¦ÊÑÈ›œ¼;tû?è{ò°¤bama'Lœí®þÚ]½Ö1N¼pS.\'„~N»û8Ïo¿^œçÇy¾£—äò/å»ÍóU)5­å5_i~àûè¼åùï@ø<¿~ë))/dÝj>lÝ*Î/^þë÷]gïAduÙÐçû<ÕeU6×e[çÇùZSÏ8_û¿òµ—) _»uÙ |¾Ä^÷u\—=¢«Ë~q]ö¼ä—íäþÿÿbd```bFòòóø€ì fb( ¬P>H= ’>N V€óÍ~LÌú21KÒa{îím¹· 22Aà§=È\$syÑÌeƒš3Ä—€0ï2!ÉÍ€ºÝ<,îCñ„ï™W’Z”—˜ã’š–XšSP”_à›X1Ï€€yÌ(æ13$æU‚õY éc¢Ù_¬@“‘ùôö ›s¹ú,ðècd@Ä-Lˆ_P𔓙Lýôs£éñ2‹S4RRÓ5áþ 'ÝCÀûeg:Î<°s@Óÿ7‚éž•3Ý‹@˜wai ˜¡4EîüÑä` …w@h…DôxÀf.²;9Óeú”ˆÉ¸Ê«¡¢o Ò±åêlD¹ÚÁ@ZyÆ åƒèœÄ⒰Ĝ̔Ätâò7+jþñKR+J,0ËGróÌ^rÊùü´4ŠôQêòÓ &Ððœ¤â9Éh@ò5ý*ÔJÿs zFËW-_©[¾Îem·Ž¶[QõŠ7ý, yä¦sp¹ÿÅ~âþéŠû™ÀÉ{›¬CG;|m§£´¥Yú"¶]À0øÚ© #» ó?5Ûw r `<ÚNEKÿ FÛ©ƒ¥œŽåë"†Ñvêh;•rý.Î žš”§÷yæ³Ì$&ŒttAàïh{•ý£å)ÍÒ±åéR†Á×^5gÙíU˜ÿ©ÙÎÛæ£íU´ô¿Œa´½:XÊId}ÿÿìYÍOAŸR „Ô@ 'B"0Õ B@1a$¢ ‚ ¡™¶ÛveÙÝìNù¸<z xQñ¢âG¢r!ž=û wÿ¯&ÎìîÐé²ÐmYñƒ}éËîÛîûÍ›÷13¯-&•>A8@¸ÈºR I‘¨$÷C„K­÷JôŠ9½2Âu„ëVÈçG÷ZGhµ#TWŒ­0|ŽÒÏnŠ{í°á–Z˜ —Ê5æíN÷ݺe·¯ØÁÎÓYó3å šŒ¤>!ÒÒu©&^K¼`^ yÎÐëäôŠôøy•d^>êy0âñ˜…êu ™Ø2=*«é¨$ƼÑOýóªìÍ«6óÖÈ+6Æáû„?&ü„ð*á„_‚LÐñ–A~ñf6Ы„t|Ib|%Ì1ÿrÛü©S4MˆaQ‘õ]»ª¯?Ts~`ÄÆ/¤”DâPz^ù¡õëÛæÔöæƒ%j¨[_‚ýtÛzk)½Y€öùµúŒÐجîÚ¨êÚh‡_ º¯P±ªÁ³üzœÏ5…®ã,¶‡ª«})öGòÅûyÔ{¿÷–Ž.õÏ¥nõKlúT¾ƒ‘†Á!û°/cðõ+JåPݦO34ß*6òý3‡°áò9ÍüèE}ëêE^~æg?Ÿ?vûí㕚‘Ú¡zóÁüì Y2$<…°„¢š¢`ó{]P‘†°¢&ËX”ÉA"-§ØH ÉqIاü©ÙùCåÞËã¤æ’šªë%Aì¹Õsu|¸µåÂ%än= dáÀ¸ƒÝèAK¯³(??ž²äQÎ/ÌOÏ©à)A¦™õ`FÑ&uÅvŸÎˆ8%ÊúbDE˜¶‹†]OsÌ'jó/•õDC lJÝŽÞ#]GX˜&aŒ#Œš£Š Ãým6’L‹MȰ:šÆ˜Ä´IRÅ&Ã{ÃämzeÍÍæxnú¡2›}TF²"ÏM)idp ]?½¨û S÷¿Ã·ç¡ ‡çŸßÏùÝÍ~èEž™óûQÿ>td× •ùõ‡áxQGóïCnýày¡ßÙêáÈôCþz믷æ[Þ­·ÀÿÈï·³õ½>'.ò‹g¥%Ÿ%Œ…lâ •5ò¨.ìÙãÙx…ÄÿÚ¬*)¤±$›Üù>ÒGô¦56™ï!ÈÏ~Ö¿Òk/ñê¤g†»Š߇,¹!n&¦›ý»Â¦Oå´ˆ•dR¨?;üô?žcÜú!ÿÙ/ÿÿÜYMH\W¾05¦S;X]$d“,º(Y4?Ó#˜B²(Ä“’EàGó¦ócÕ*¶…Ò¥%ŸMq•E’fÀK·¥É®`š¨ Ô1‘@HÄɹλãx&—;÷ýL¡÷ãùy}ïœïœsÿž¼ c¬¯FÂØ×šŒÅ­ãm7^G«F®a9æ­ ¯]xí«Âþ{ÀæüG£Ýa¯³”?!&²ìùrqãÕâ¦÷›*ë3¸Ñ„¸ï{¼4¡¿çZâ>¼ZãíYÙêFó÷Kÿ¦ÿ?@ð?4 fêï9»qÜjD\³ãíuö›_âˆg ËnõE]„¿ô×)Ä |?òbv¤7R©®Bd âL¶-Û–áëCˆ °'ÙÇÙÇÛßj¾Î²ú˘êžO"æ¡yú8â_x¹ö 1ìáÆÌÆÌ |>v±#Cˆ-}á§¶ªQ¬/[/2ý‘é+ˆbýÁ±>Ĥ&Òˆb}Ùüw«ßüð Ä–¾,Y…Ã/}ÙºqªOÇ_V·úSçï!üËŸÆAõÓ#)„þús«ïëꋾjŸÐe•þv^Ê!|k²_‹Xö|¹ø£ owó<ùÇó<Óý—Þ§ì4aOã û¯ßúÿUþâÜm¸Ù„Ð?…þÚKÞþÑf·ç?Õ×=ÿ›Ÿ"S4ºõ§ú¥îÿtÿ~dóO¶^JÕû¿ìü¡úâü÷Z_öþ!ü¨êMãpš¿¬þªu%ô©îû—ßúºïŸ¥êÓ8œ®?zþ»Õ÷ŠuõUóÕ)«ôÿ/|¸ýb>Ïtÿ£÷)»Õ¥ýrëS¦ÿù¥OÏß}?6 f‹ò—¿B?ô o¿k³ìüwªÿf€c ~}€X‚©AÄ¤ç – ¥îb®¹ŒX†ì…·ˆeX¿E,Õ¿Ôñ§úñÛQÄô_ìC,ÀdÍ8â)L¬O!`ÊG<…¾Ÿ¿E,½iÞó~dú²y£Ò_­y(]_6ÿê‹üûÖ9Ôú¥Îw¿ò×]W~åȿ\úNן[}¯XW_5_r©ú›ßØÖ÷ƒÊÜÍï¼(`Þ‚vg¸ËHš nߢ°¯%ö²ï'~ˆÞ?I„cÃ<‘ çtÌŠ~eDsþ*üUlóWÁŒÈ£õØñ»@]z.ì—;Ñ ý‰8œÚ©æC5±ãýh²Ãì¹ä}aýêˆ}Û^þ\(÷ëßb¬xß»¸¿Ÿzã¹ÛîŠW²̞NáµÕ0ÍãRï©H{<ÌL#ž8gàí³F7+ÐkQäÿ!ÉŸ÷¿ìšVÌHôX‘ÏN‘\ÜL/î ÝçÜŠÕì wŠ€K·ë¼ŽØó~²'auw›a^Ç#Ì»ñúNÖ¹ÕÕåÊΫ:èê‹yáÇ÷^ßåíOìÔSÝ\ëÜò*U^2}‡n<ª¼(¿ÿÿÔ™ßoSeÇÌMd.¢8ôb"^aRÚuãAÉva¶øo,Б…º–Ñî÷†Ä¨Ä bbÈ0’à_ lݺ²šà…$š(QHl]o+l]W˜ß·ëÛ–Sާç쌅ç“îÙ›žçÇû}Þsºt½§˜]!!e“’¾÷ëâóR¾Wa>±×ºBóÊùa—DéÒ•è;¿®Ú}rñ¦DéM3Ô¿< &èÒša0AÆÚ*0®Ù>ÅþþÉy¥ŸˆÒüÛ÷Áuŧí®JѼ¾Xï£'zÀí¸RÆ©ke7§ÄÆ$ˆh¦ÿ±›G´ÞŸÔvƒqrÛª:iá¼új÷½ó(%…y ­÷¶F¦ÎD-º¾Xï¡à _ïán¡î] L]æ­¯trzóóÍõþÿy*.q½¥Î·Ò:…Ö•{ž¨­'×ÇRÕyéEf×éqó=gº@$ã—»¾V}(Í'Õ‡Ú~ÔæÓºBóÊù‹Un!úÜÂK6w±¯°U¬éarÆ\ Ds³Ì‚Ôï‚óî8S ß÷lqDh~ÛÓ½úQ¢zinC^¿àºUIÕ;qޢг$×§ @{¶¿fú‹õîŒu€|½ûÝNà'ã—:àÓì¼q½)Â4PïùzÏLNµ9ÀØ¢ës½ŸÍ¬Þ­gÛA¾Þ[^Ö¹¢€Wõ} ¥÷Ö„)éƒu¸[ò9Ëé"§·ÖÏy~ÿñç ×{¹?ëÝýÌ|¯8mAj=Ý‚¼>¯«u n«ž¯Øë¯1¤õÞôG9¥XÍ¡'Á­E×—Ò;î¹ òõ¶m; nÓ ߃›ªï®·á¸HŸï¾ºó`TóûNNï¥úœázWlÖƒÅ?O–Û—‚ Çk^OâõÄÂBqz½"Ç3+M¯_9`n09,vÿºL|ÑñEB½©I`q52qkEuÙº¶Énnn2Yv.”¯o¶ÚÞ2ÙAM¦¦vA¼ÿ•‰[‘WŒÌ¹ëG½n¹ùxjãäæ¿JÇÖ6Ç>Kã~mâsõ[-Š/ÔŸ]÷ܯÿðY1+ÊÙÏ×+”ͳ$½~/»Õji<À³V›,–}¦ý‡j›Þ;b,¦#öÝ&¼ý®é SOnþkDûgë]m6‹µÙdo´6½¶×jý¸ÎaÏä;.(ë¿4½f¾ª2à4¹û{»LüjQ<[;íÖƒ-f¦§î!:©3¯¯æ~·64,*N+Ỗ‘ 8$©ø²lüªœø§Ó×— ÙûçyŠý(ã*f¿ÿM¾rþÕðwÊ;å`4Ïó÷Åñj½~·øhê™Ip‹Zì̼”¸ËlŒZÛ˜È3Ä,L‰µ3ÀO±)f#ªûp_s?mÚÌl„:¿m~ºð'ÃKƒ}ÌÆ(¾.BÔÕÃl"óý¿ë:#”éWi}®g£¤ßÂ,¿þý”euèê`Êô¡´¾ñCF˜fžŸ¾Œ|âú@˜<7Ü BÓe³ ˜™—ÒúǾëã™ü|ÿ’õÓ/RÌ\Çû/¸~úÜqý¸žü¼ós%®ßî`6Fº HÿÿÿìYÛO”G_¤ÚKªRE]¬iêKÓ•J@Ñcj›”‡¦Æª©VkVEB\Y. ˆ"Æô¥}ÃÆzi½ü Šˆ‚Ô´IÓ>Ùª­P\n˲,T®‚hÏùØßì2¸Ùý±}èï—å8~{æœïÌœ93³Ö†7™÷©/ñ³,ž†“Å{nêšÑÍl¤²“¥L/Mšÿ$éI’Ò ´QåÍ f3í?VÌl¥ÊÛUÌ6*:œÇ|@½Ý‚ƈí겯_ЪüœÕÏl¥¡G‚6˜3ÈôPE¥ •úßxÈtQ ‰ºgö0›èü9A#•-b¶DíÏ’O“™JV^¸Uÿ‡J^ªþ«’ÙJå¹ÌÊ/DïG¤rhXÐá·Ó¥üØ“+hw<ÂÉšûµÌNºZ_à øñ‚øq¹F0Öž¸¿™hyŠ`¢Ç¥‹:Àì Ò3™*_’׿Çlšðy¼Â|@¾è~B¦¤ Ü*ÿJ Íc$žëúÑJÌ‹þ8ËtQÚæåLÕÖU3½„ù ‰uù­]Äåü a“š7Ãó3½„¼†]Œ#ôç1Û•¾Yûˆçê­+™T¶_ÐNÕ—eÿøaÁï´b¹À2~£×¥Èí?1àSëzÉwû˜ݾ‡Ÿ Ûµu&rûµ:U?ÃUß½Ìlk¿Lࣃ:éé {ͦí£ú‡ztûW«^ª¹"ðÑ€·¶®„·Ÿ—/p©þt?0ºýÕé/­"A§ª‡£ëxû+?KeºU¡?<ǼÇ<Øw@ÐAéÛˆÙI©ËͪîFjW—XŸQÿ1QOàÆõ¾7^جڋÖ-eº´:cÞŸPëäã{™üCÜÌÚG<¿<]Æô©ýÞ?m¥ ƒÞž/¸§öz?¨“Å'J˜‘¯ÿ°u_Õ•-éL>?fxÇØ×ã€ó"âiÖ>úC¼QÿÝþÏ÷®0}ª¡>¤lJcš·6úABÙGDý¯½,àøûÏÓ‘ÚǺùÿGÝCtûˆÆ y`öýñýKU‚¶1û:¼Þ㌸cŸ„ûHíêóûØÃ¾ãƒóòÎY h$Gžàé}P¨yJêqþ~Ûæ}ŠüHÇŽ n™Î‡h%êJüMá zm¦à':½éó¶߉²?o®à7J¨·2ëÆø1òüÎ óãèÖSÌzšž ¸©üXpgó¶ª3åGülÁ/Ê«aÿ:-\ÓÎá7/¾^[μFŽoò™.*ú¶ÈÓiü7•?Søó ^y`™ìoÇIAœ¿½pgæ.[¡Ý­þf‡cÏ‚O ýÂèÏÒô¥‘ãÌÌϱÙ?qcm¾#÷c[®Å"ý-Ó_ì¨þb-¶œ‹þ“ž¡¤7™{n¿è÷‚ûƒÑê…Ç)šž´s ·Û³w<ýàøMÕô'[FÇ_¾?òÏzŒ• 6è}ÊcÌç4ûþ8{öNôºÆf·o·íØ‘³¡ Ób·87Úøñz[–%È^¸ñŸ¡½¿´?Ü›kwäَۜœE’9þ¾²˜ó?Îß¹†£º;s'h|Âåùê0úS5}if;YYöL‰ç²gÄ)Úq†ýhòݱk׸ôžWÂÇËZ?Ò6ÖMž$†~b@JþëþïÇYù€~^•?‰ˆbàžøñì¦[íãBþî1jŸ7þûéÔ)ÌuN-r šÔ=öÓØ_ã<ÝýPàŠÚÜû.Y*p©ûdÜãVUšÕþçÂý.ºtGèQþšµxâÞÐyDؤî çÄ9‚_Cî›?ý÷¨Híc}Ö€KÝ¿á^O·}8ìãÜ ?ÌÚÇ~º?¡Ù¢ì…“8—aŸñ2kçw܃âý1`ïìõsÌÀ½~Å÷àÄöýóñC<1ß1¯`çÜãàüaýüaÓüºðÿï¾ã‘ûŠÿÿìXiLTW~ B[—´*`‰ÕM#b z^š¦©ÝB,iÔºd¬bIÆÄdKšþÀþAÒ*¨èŸ&íÏÚ²) 55iÒ4m¥E…Š ²Íuƒ¢@Ïy3çÎódæ 5©ß—Çá¾;g¹çž»Ì( aêÿ¬AvÁÞ BäÍFÞ­[ŸnÙp½9ZN·ŸA¨ª!xâÈÌ&?Žº‚wwçÿ¼kÁ‹ƒýUD:¡àô!ädÙ‡¼ñ©«‘7ƒìxüþ¡KÔÃÐ]‚ìwPä)!‘Ð # ‡]›Eèô’Ü/ë*¹.¾ùí[d;¬Ù²Ù -õH<%8…Ì?–ƒì‚¸÷â‘ûå¼T^&Þu3õ逢‚Ç?Ï#ë,y€ìúFýs>ÕmëN(Ì'ôAý9B¯ð_v„ð+œÈGöMš¿šZB·aÿcú¡æÊYdäÏCöŠ<Èþå<$}@ì“öÿý7jvØŸ/yHÃŒ? ôÁÈ=B§aÿÜ.Že1„VÃë4Ð8øœäúXÑ…¼5•ãç…Qy{Þ ²MÔ-¯—É>_Õ\‹ìç¯7YrÿtÅÉë‰ï+¼¿ñý)y=¡ (ó½pç>a ë\C°ÇöÇ£G‘N!_ݾÙ/Î)Öçø8oFýs>?9Uˆì÷ÿšu',_JøKÜd;õ×ê}Sž‹ôÿgÿ¼ï‹sek2Ҧч‡—9¦¥c1c1ý"ŸFý³=Î7ûó%ùâó!aó¤qÿÜf;œžáÏ]‡|òùßXGÀü ø_¼o³]~Ïçߨ?×!ç‰ç×Ññóçù^!ßëx|<^žgÎ;߇jšªâ䯖\7Ik ½ÂßKYòüð÷^wöý„°í#Ü0|š¬.&“ržOì8¼¡ó ßñ2B³áõ`TF>OøQœ+‘MÄË0;‚ðœÚ\޼"æ7XqD-!ü Z£‘-^q¸ú¯ÎXG·U [aÞB“ˆ#öêbäqÎ+žŽ#Zóÿ;-!\’¾‡ïü/N)A^[i&²Ýë~>ÿ&âŽÏÓøÌru(aîvˆNæ»Û+víN3gYìþè?%éS{‹Í¶7vƒU!ý7|è/”ô©½Ájßi5[^s…‘’iËxÇœ¡höVú°úˆ½PÅlÍUäq˜&Ð Ñé…¡e}{¦ÇÁÐÛã8Õó5á’µ3²vZÒ?œýM:ý9’þ3Ê£ù§Ï-wýÛjrû£¾J|ªñ©Åç>³uã+QŒÍïw›¤Å¼ßþ¾Ù’¾+Õ¼‡í©>Æ;[/µ³Òí6›e§93Η¾näq‡M0îHݸì?ú·¥¥MI/yx²ü÷~øú³tú´/Äâsµzïµê¢Ã*½‹ýê°úzéò ¥ÍŸ©ÚµùëOU9®‰ì†Hv=yš;5ý_Tý©GÓ#y1)6«uü¸è2oÇË›·«Î‹ï:.þ¢ª?kxS}ÛA/–©¾öG®%ýþ¸Èõo«I×wÞw õ™šeM·îyRŸCÍd}jP·«g"’ÎDÔ©êjíw½·ÔdíÅŠi«ÏFÅSŸe:{!’=“d/sn㦸õVy­cuêú¾ð<( ªëwÕhõ£4Â*õËæâŠæâQça"»¡’ÝEº¸dIöjcó0u ¸e ÷ÿÿìXËOÔ@ŸÝ…UL@ Æx fã# ÉÆð0åÀࢉD‚h8¬Ôéît·Òm›v–ÇIã nþÜüôä_‰½sá01!4ØÙNél©é²[W~I3û ó}ýÞó+1`S—õ|O´Ö“Öcû팳½w~¸ç;=çcžóIÐF—-*·Ê½' ×nÉu3ZO‰†¦ûï&Ö‘ˆf‡W‰¬b…±@ª¨y"kªPBjAÁU»§9»Û|Þ{7ã³7rÓ†V4P95)+ØÌMMÌÞ¸™›¼ŽöÇÃOo¬Fo ä|âXdr0~°8žaü..NœYÑ1àI²Ü¬ÙXÒŒSGù½Ý%™”dU ‘`v½ðç‘'¾”7¥+°¯tO|‚ó$ƒ­4Aý¢‚ xfR0–…bEîKç­5ö$€&IMɽáäêÁ-aÔ îæã_O>½öD¸+Â].ý=Ü5ï‰/医 ŒžÌ«u¯£‚»ÞƒðqW³s›‡ß}ÊÇ£ƒ‹Gã÷ð~²íý'ø%L?lº ê—L&«6Ex5\¼ú¸x•×ççß¹ÿlþŽJ°¡"å–PE!Ö«O!½1ü†Ô•PpP+ýpÈï¾hT.hž'=r”×+¢"ç[#ïwŸd¹û¤‘z¿V­óãß¾Rê…ö: ‰˜^ÓÛõÞÈÿ¢yz|æi³õUï<ýÜyÚêïs¿¾&x™ ã×Ãð}Þ¬ÿaâ¼j¿ïFxÕSÿŸA„Wÿ—9yçëáÕ¯ÖÊÃùSyÊßGe]Á"Øõ£‘º/V¿Ë¶Ç_÷Œ½êë€6ŸÕÏ´õcƒ[ÿÿìY_OAß¶ÐØbx2—¨’†PƒbÒE1‘H˶ÝkOŽ»óº-/ŸÔ'¿€Ÿ|äø'ñ_x!ñ#˜˜LLt·w×n¯m¯'Þ¤›íoïfvfnfnºíLÒ¥ã„53ê¶pˆŒbÖz…Ÿ½tJpü].üaŽ¿"Uà(ñ-4ñO—Ã?y‘Ñä«þ©Íþ©4qn?{I?»I&wŽ“ÛãuøáAóëN˜»öÖÒ›É{ÊÉ »èÉËë¦Z÷X˜Í2*’»H–rK(,y|\¸ù+ x™˜àK˜üûÙ×íbßgŸMö¾­<¿H> ŠbG|Úï%nö"Ó'ç%ßü´Ã¤³Ð¯øgñt¤çîXb´µ +xKƒ¿~Szt:ã ­úz;ãêë¡××÷ V_yynöª³ÏÄ7‚uÉ×°ˆ ™,èª64oõ )冺ÔJçñAÛa/ÏÖÃ+Ÿ—º¬YÊúïqü!~§¿a“ýbŽý¾ž“ˆ°D_&œïuø"`i²ù=iâqøœ¥ÉöφŽú;÷‹š°ÃøJ‘öôì³0¤cetUµ¤ˆ5¤#¢êÀÆ ‘,[ˆ†’%’ª¤ HÉɸ!žÜâò4¨K†g.§hîçu´*ÌJ2.¦æ§—nM_M-Ž'Æ.¡ÖêZ¨Nn¤\üØ ´ùÂíùñ¤…ïp~±ýHYÀ'‘šY·°®ê+E e««ë)HJšÝ˜Ö)K¯MìI;üËpQ<—€Ã…Û™8Kâx>Æ"h$#£^œMë¥tÞ†‡D?4°’-§g,gPve(ÞÀ§·²Ù–72â¹!EUÊ«ªQ´Ö;©ß~äûPË÷¿¡G«¿O"œ<þ½àæ×+=žQQÊ:. ‹÷„êS*?Æ„5$ôÒ±0‘HósQ…‰ÑÉs£ö¾Aßûÿô½&µþ>÷š_A­ï=¬¸æë§ç°‰nu¯ª¹µ~Î5‚þ,èÏ‚þ¬y¶ìð/Ãú3#‚g³JK ÚqéÏ>Îû3/~p«×þŸ_^ÎaÏû3Îaÿ•¾ò8ö£_@pœÃýsX3/bðM…Æöü¿â ÎaÿÿÿìYKOQ¾ÓŠ bX™‰IÓô1Sª0‰јX-·ím;2™ÌЉ;\¹dCâÏpÉðàƒÄ¥K—,4:·±ÓahËéˆ@z’›é¹ï<¾;÷ökË º [cÁÖ¸l!{¾ßöéŸü×]ùGlînfISJ®°ó¢DôÌâÌʃ™ÙÌr"¿ƒòá—iŠË Œà:Wmÿ±‹‡'dlª¹­hµÙ4±¡hkºŠóg7D£,ÊYzcVÅFÙu½kÓϪ‡_êëÅÛ1a¢ü0÷’äY·–±€ <™“p,Ïgµj¶dŠã:®¨±Vœdç°$åp~mO8𺡔ðvw{wPøX³¸@½íÝÃé öÙg»î³ð|»ÏÓNÎù!Û§W ëÆ,‰…\râ mú¹âé‡ús·QW爓¿“ç(ÜTW)ÅbW¸.\'zç¬éµï§¤×¶zz-½–>£zm§M?ØÃ/õ!zM#Öe>/w$Øì|E·}AÝë¶v.ÐüZD¥ò2*âÙLN«æJ)ÙŸG¤¸$i97‰d9 ý;PÆ£lµì¥R Çð+aÆÑeúsq·ÅÅtDR[T*ºyŸÙÜÅŽ%¼ 7Åáºm¸„‰±pL?[ÿ¸å¾Û4×½Š#îG‡%1ÎÞü.q0;—lq0}R!¢TªhXh ³w…FeQ’)ÖS*‘Ò冟ÎOÂÁOç‡ÕN°‚Ýz «LÖæá¶¾¦Â_ y|2»#.v#6»Íüöt†rºÕ‘ᢀÏ_(Ľþ‡ ç»n`Ö×>X™ Á×ëË+ë˿ǂ:O̸÷³Ÿs~¢~ø¸ãF$ݦÎVéô’¥â*Yö KÜNs­¥y?¨¹`ù÷Ò/±–¸b@ÅŽpo8\Ćãkîe¿^û€æ<æç€—ºÚãÙŒµ?Ÿ'{üv‰z&7®k/Î^S‡Æµˆ¨Œòš¢Ðú÷:V‘†¨¢K'F³cÙTX!*)$W6NÆ;æS}ÏÖ~eúäµìŒ¦”4´(d$ëÙéñ¹›ãÙÙ¡ÁôUä­ß"-v# ëG/8há¢íåñ¤©ßæòbå КŠ/Æôh½±¤h ºŠ »K-K$ÇÌ©¨~”íóÅi?ó¶ü2ÝÿÒ0¢8S žØQá_AçüËOœæµÿßÕÉÈð‘à÷qUïO&&äŸu ùg°üó3hòOÞžÓþÎ´ì¯®ß Å$H¾ŽET‘©ñ©N#ÕÿB¤ÙÏ}Xâ4gýâFvÁE@³¶Žéj%/K…`ðІgúDã­#9=õ(å»ïKÛ}þsìÕvŸŸ†ïÞ2¹ûFWO®þpí{?ÿ„sõÿ™«ö—×¹ú4çê3ÐÞ™Nq•ƒ£ñžÝéþƒç{ƒ!oµõÿWòÖÃ2'â|ýBÞòÖöxk ÏôŒ†T0)Ô„$£­÷ý{Öö+[c/_0IÃS!oõŽçêžõ—×¹úou:ߌ·¥ÓóÖ¿ÿÿìYMhAž$¦´«b=XªVÚBzð;þÅV­–RE!tM6ÉêvwÙÔöäx¨^¤§*T¼éÑ(‚—‚/EðV•âAðb+V±Ttfw§Ùݬ¤IÖVi}LÞ$ïí{o¾÷f €I«¬±šp á •¶ù°%‡¬‘ÒZ")ÉdIz»óèU8ôL ý81ýí´éWx诲éW®ù¨.&ž Ã¯ PäÅåïOzþÇQoÄÑf³»Úe—å–Ù¥òFóãTÐöÝŒ¥S’Ÿó×a?¥± ÐÇTøó¡+=Ð/»—ÝÊ…8«KÓ¿ºmYÖûÀW*Ii®õÍàÈäàÈ|ëÝ;”"pý¾Çäï[«_øúlùí¶çßG|¦Ü.cA“‘tDH¢Œ„;5Eí@jqû’rö¥ ‡ž=®0±l——:Fv{ÌbõŠÙ—Õ /‰qôÓàϸZ rqµËühàŠ=cŒðK„_ž$üžðGŸ@ö= Ï» [oæ%¤ã³HÝ(ÅìÁ<ñW»â§rFä3+rJS2j$Gî<„=òPcË£å¬ï~塘ýëíhï»Ñk7©  îÁMªoš¼k)=¼Q®;K Wt¿{ ­2ëŸC¸k'¥p¿1±Ý·¾æ ÈÖ2¾V¾Œ>æ|œ?5=þ  ƒŽÃ“Ótb«oøšÞ}M±û8[Û¿r^¨Cåský¾‚ì¹§Ü—–ûÒr`yYYuâ9ýNVEÍ>äéqxŸÊƒ›}Ûg¾ƒlȇÏ0pâ“ÊÇ(ë ŒÏgËÑ'Çúø†¹£p˜âuë“·ø†Ï9Åg¾øpâ€RïŸÀã¾éCkÚ«áãjÖ¸zf³pÙµÇÀüð#,F?êñ|¨0ÿíùwûï~^…¹BSÆýF¨0?×Z2$Ü‹°„xMQ°ù½.¨HCXÑ“e,Ê‚d‰ ™‘ãXTd.ä„$䬿nj7T>¼7Fz”†z뢢$豎ƒÝ'Šuíh‰ìA‹ÃcÀa7by\Œ´ôÚ‚…åq%Ÿ±å…å àUvJ’0—í’®¢øÂìe§E™£?äT„ÓÀòk8O< W~©¬'··ÀÆôiþ¢ÇÍBYƨ‰—PBèŠrZ?—ʈ ‚Œxò8^D:î0’$Å/54ç¨6“ßÓ‘mjbþÁ<þU¹ü£2’y WÉèÖ|)}£ïý<Ⱦ÷ùâYãòƒÊÇ#]à`à×¹0d‹³”ÿÏŒ½ Ú ù‘jŽà\¹þ/Þߪ~àþÈÖÿážÜ¹­Ü{r¯<‚£ßÿÿìXAOAžvicT Äp2›¨’¦)”Ä. D јØd3»¶+ÛÙÍî´ÀxBO^5á?ˆ'&þ .œL<£'ÑDÙî¶Ûmö݂ ûÒéì7Û÷úÞ›o^ß6àŸ¤„$}ÏЧãö˜#tDí™ÉE ˆÞªK/ÞFoÀ¥—è(ŽV÷]v=vã¶MÇ.ãµËèëÞ['Ÿß_?Qáf ¿Ók3xjù9ëc×ígÂ^¯I2˜þÎõ¿²ßÿ¿Š&w„‘¹ýá¹ýÏÙ’…“Âûa¶ð5Û/~ý´ýöÚkßÕ¦øjø&ÈÀP½‹ °¢’UCÓ—¡ÞY¾¸&{€xxùm£çŽ+F-»ñYÇáˆÛžãG¯z³'èE@co=†õФ*rôý¤GŸá{J*âh„zçýÛ7L޳UiŒ¾¾d§-™d«ß|y­¼©]:\b¹òÖÕ‹SWƒò«Óºú 4êê.讞 Ú˜Í*=OO ªä×a€ÞÏ7A[dzªµ>öz~œïí¥Îk…B ½ ñ÷¿ßK‡}«‡ÿ¿AØ·þ+uò<ÖWöö­aßêÖïvß2éLÀç³Áz<æ‡ç¯ö^î·ð¼]Îcw´žÝ£¬wfö>¸ì5xÔàÛI|êùœFÏ”ßG\wþ»÷Óë¿÷ûâµ?´ú-®;?‡l,ÐQ†D…’¡i¤vßD:4 Ñ à`LŒT‚BËDѰX‚8¯¢>µãá5ÐÌc†oçèÙ-°Ì/)*2sËóëçrkS™É[°3~GšìF@®M;Ñl=!Ú]¯Øø±+/NžÙÖpK†Ù´°©¦åúê¦BJ ÙE’°ýzíÏ3O~6 73ÂxiEzŽd’BUºyHà„¤Â~­xübø"<Ñø™ _Ð ¾h HIx¶Ýi~½¤˜<®”%dðôª‚•*2L¨òP64Óä)ø<ª*2âËZ©f:ìkëù½}m·¿÷½ž¿W_»ãßYñ|t÷;ôÿ‹hŽ‹a«.ƒóñÿEØÇ…}\ØÇù÷q9O~î²³êß’Œ;näÎK;…>.HÝþÿÿìXKoÓ@^ÇI @„*( ¶R‘J ¨ÐC¶ ­”>”¶Ð¢HÖÆ±S×¶ìM·Špâ ¨ÿ8qDâ ÷^úzBô†×vã;i¡Å£8›Ïñ|ž™» 0oió8ïŒXR¦Ì#éŒX:Ì#‚d˜é2¿‡Þ¤o‚àí1‘ªÐŠ^ûý¸eù1EðvzxÓ§Ë‹q¯ýs/Aü—¦l–ìüù‚ùòÕz„±ðÍÁ²eçH/ig‡sÞ–®Öô·oþ•ù> ù% X0£¯˜š¹gI–y½³ûjg÷`¬]ùu޲íöòùùw­Î?O+ˆ×(Oò¬Éh^Wµ¨5/ºŽPÙÞ|Jøè‘~¥LfŸ´®|®QõFþ G£¹uõ0ÖjeYâÚ£4oÉ:ý$x %%jž¿{‹å`ÌÍó÷¾Ã¬—ûÌÏÀÕ“ÿã>õŸ©“g±¾^ŠûÔ¸OõèÏSGú”Gß»¯EéksK‹sQíœÉÍ.å Ñî»P˜{E/Ÿ[XŒjïÔÊxqz²q^ÂÕÙý±¨uäû7,Y¦ß*ÝŒ‡™O¸¬ŒR û”/íáí%ìòŽ˜ï3ø}þµK»êpÆvÔ}:œýd>yí÷Þ/mgΞÕÏÒáììq0ckɰ¬«*²ÿ7x ê©:p±‚$…—„šÂ!IUØ*T*2ß°/ùåó PŸÏO<*™µQÔáZ&/ɼQšÉ-rã¥bvèîCØÜº¤êx)Pò‰c3zŒ£Ç$ÂÅñ²ƒ—ˆ¸¸qhKã)‚éf݉ U_54ÈžÝPURX|!«ATŽ]oüYñÄcC¸=ÄôWçÊÏy òëæ4V ‚eVøbžÕ7Y±&õ÷A‘c' ,—!·Ú7Øpý y]¦ç>V¼ìêðØ…1TTekM­OÔý­ë½›:ZïAþt{ìÀ˜eËÐàÙÃé?î÷!~v]÷Ø…ñ„ª’XÓy#ƒª|¦¸œ)Ìæ2"”Þø9àôèÄþu=õÏÇ•·Û \zúùBäÎÄ{›¸¿Šû«¸¿ yâ‹q¨þJç!âóœ¢Ájµ¿úÿÿ*f€> 6b6 æb¨8+”ŒPZIŸ’>^4}lP=0} ¾„y— INBƒÌsÀã~4w€øññI‰Å©ñi¥yÉ%™ùyýÒÏŒb3Cbz2X_’>6,úXôq±!`ã@Œ{`áqÐDù—>êûCÅZñ-ÄÑC‘;498 Ì`þ†Ív§s‘ÝÉÉ€œÎù(Óß < ñ=Ò×Ù3 `ä Q–¤^–Äïá›:l¶Þ(lÍHµô%Ìq7ºyØü'†â?ß3¯$µ(/1Ç%5-±4§$ (¿À7±€¸ðÂ(Wò*ÐÓ}ÈþbšŒÌ§·?`[yO®> <úq Óâ”&åd&SG?©ñæèîLv:Ÿ5~ÚÏ»Ñ9÷F§ „/ëPJöêßì ¥sVÌt.aÞ…¥¨›aá;ZŽŽœr”ÒôEl9*†TŽv0V~ñBù :'±¸$,1'3%$1¸üÌÊ€^~IjE‰1áv'±ùf/9åC~ZEú(õ?5Ûw01m§¢¥ñÑvê )'‡cù*1ÚNm§¢éO`À®¸0Ó•„ NW0³¿ñ_ fr8˜ˆEé êsTƒø¥™‰y©9†#¡>'ärÊ©[Ûrookìr‰),ïrp›¤â9éF·ƒ¬h­_è ìvCœC2¸:qu˜ª^$½l6‚B©Ö~‘Bª_FÓ×ÈI_àöJdœ¸ýÂéæ`b ›½€Û3²TK_Ò8Ú/ä–ß°¸¥I¿à@ôhÿ-þdý›Ñöçhûs´ž€…ËȪ'ÀÓ1êÏì3Ò€à™”¯@µrF©ž ä?dw y9ù%£éÔM_ÿÿìXAOAÞ¥ÐÈRc8‘ ¡ŠˆÐC! ¨Ä èÁ4Öi;Û]ÙÎlv§ÐÞ 9~ ágx'$xðn¢½9ÓÝ…aYi»]ë¾d2}Ûù^ß{óæÍ·ílé£ã"=ÎÌ$A5Œa~ž¦#î¬ëm—åpq\/‡ë§C¢cy/¹²·ôF®×˜§*‡û•GOåÝLFdfw™³;à±wlºv™>d<êᾓDÛï ñÍÜß_ò¬5ä³ßáŒl¯ú™öÆçg7æ±ëÄGåkÚ;3{œ=çÚãs"8ù#¿‚33{sœ½ŸxxL͚ןãX{þóûéõßû{q{Ç®kÏÏ„£ËtTÑAÁĘØß[Ð& Ø\ AÝQ¥ŠŠDÃ(¯TÒá¹zò«Ãa¯C[_|˜Ëš¸l‚Š”ÑthåV6ž-<έÍNÏ̃Öê[yl'»¸žöòxÝÑ_ryqó$º^æ™ÛØÜ´ Poý¿ƒáßÊðƒw÷|Ðs7Êñ˜«Vï|¿måpt6ëÀ"¯€®•6@Ùµ'7‰Ï¯Ožôeί0úŒûû­ÔÏ×TÊÒ.âsŸ‹ø\s>÷Ö“_¦às&¤S¦ˆZ"tÝÂç’!ð¹ yðë×yÓï${ï¯ð–Ðã’¡ý2&Ú˜ˆ§ÚñT&áñÔ[OåíùÅwóL|¶¾‚4З (å¤w¤± Œ`ü  z(<æ2ãpůÏÅÍ]€…Ó½uqL7ª]+†ƒ—›à<v?Hkìe"“]O­{Võ+{ßÓwò%Ý(û}·î¿5­û ÿGD}õÿé«ÖW«}5%ú¿ÿ‡ñ¾ä|X#³óÝñžÝiü¡ó½ã©ˆ·zêÿvÄ[¯LŸìÆþz§Kyë/ÿÿìXÏOAžm¡‘ˆ‰1œÈ&b ŠØAäÂV ‘(‘ô`šl¦Ýi»°ÝÝìN ½N'^Lü ÐÿÁ‹wBâÑ£‰ôæÌþ€é°²ÛvAÁ}édòfç{óæÍ›·_7¸DZp¥ßÓÒ®y=•aO_Ö1²t¨=DØÐðªe˜+Ð`ˆ<Ë‘–ùƒ=_X{TzÁÍ€¼g,Žêf£¤©åxð'ù-xcGø>›š¡¸U— Á &’¶üzŒüf¥Çޤ¥õý½ú~^ÚP©üZ v…ØMsvG£ûm墳Œ=çÛKycþ8¿þ 7?ÃÍÏ­ÀÛÀñóIì‡Åô“¨ñþ|Mwæ?{ž¼ÿüz÷Ä(n'Ý™ŸÃž.‘V‡Xƒ%Ë0°ûÜF&´ 6,àë:Vu¤y*¨4ô2V ]®A]Ñàó)(GA{S}q¾HînÕ‚uqIÕ]\)¬?)<(®Mçò÷a´üÚì  Ç(8ÉÃÍ¥:‹ãOÆÄÅÀ-V*d›m[†µi›°|8º¥âšªËt¢lB\ž_oBöSæâKu»r#'MÔž–6PO¢&9Fb˜-iPAkK²µ-WêÄx¥‚eجÊP3kP^„šV‚åÍñÉcÈI2ö¾ÍløþI!þ pþQê†Þª Ûï¥Çqï§„£{~ôøq•ñ×4cïí ~P;çÕ×kª-Ò+\GäE)*È.[j Ù"®!Ñ9d‘Œ×ņ"jB­1šÕ65ØBŠlúI®¤xÓÜ'òâmWÉ’QmùsŽÝÿ¨ïG~îJ£TFv%Gÿlº½ôBâëo]6ž€=Ÿ¡Þð;×¥(u$Øø§½ýç w< ÛûxGpý>O÷àèìý1èé´× ŸCMUÖa€huu´ï›êmõÄW—üõ£äËó†‰fT*=á˜ðÀ„†ó@…‹/Õ»ä"µp©¬G&‚…æbàaqˆZ·»æUòþ•»…×ĹWƤ¸Î;/¸˜„Ǻ’ðØxyì4ÃcY{§ý½3ˆOA½ Ÿ9Ë}øTgÏëw[)™ÃS½ÐD¬ªzU,8oˆnó~ÌIü NÚꓜ´ßËKî¬ï¡yßÍwŒ¤®þ?uµ×üŠZWg˜ºútVÏÂþwws¿1ÚÆÓsãÿv¯û“ï9ë™Jx+—ÿ³ oýgêäE¬¯÷Έ·þÿÿìXÁnÓ@]'iEE[B(§‰¢&RQK/”)ÛETPQUŠmâucêØ–½¡ÍU=qDœøÄgpG=pë$Ü`7¶ÛµãÖ±ã„<Êj=¶ßìxvæyâ °dŒŽKtt¤í™I–jHí‚iz¼LǸ}_Ê'p¸1qé ÿˆÃg|ð7\ëZú†J°¡"å!–PG![†¦o"ݲ·xŽ=Gx{ŽQqËçàûcºÞi(r3üy~ ö¹S|lj"f¸-7€› #OÇìÆúûY:X(¿](_ƒ_?µéï&<þÆäGÉ»ŸS»cÀì¾ëÖá‘“;LÒ\|£øÙ“_‡p†Iîöô/º5ÃWÐw?»¼Ÿ€Ïƒéáð·à û–ü¾¥€¦¶ßÿ nùåÔ Ÿ_9ëð(Å][,¿™½w MÙ:›d’çH‘Å*Ú z=¼O–îõóaÔúqÖdÿ¼¼®IÒP¸aŸ?r½ûHî “;#©·8ŸÃ’YWþ¯ &áWK~—_püú7û»¤O=7ê> §xÁƒwr•wÐz¼¬­W*Õ|A\/öÖ ÀOzð“^‘UŒŒ¢ãG ¦Wå6Î^¼,rÏd'뱓=±³t§ÜBªŠ•âp¼ú½4o`wŸIª=âX…ÙÞûõwoøÙM{ìæ8¿¼3³÷œ/<×8ñƒ·€=ÇÁÇépþóuíõ߻޸•AG wç§“gŽ6" jšF¬ë&Ö‘ˆfGW ­ÅVÔQ›DÖÔ:ÍGQÁ}ï!¿¼žî¼fzy¥F¹pÇ@í|EV°YÛ\«>Y[¯m/-Þ½ãyÁeW5Ÿ8‚ƒ6n9.ŽWmý'N€tu x‘ècºNìiÆ®©£æÉÙ=™´dµÎn¬ëˆ´€í×Ç€çAžø2Ý”n/ÂBëiã5n’yü†n£ˆ*6$âíJÝØ¯ïtäœ(›º‚ºÌÛz)J5wçæûpóôf6;‹axÍ‘ª©Ý¶Ö19;QßkqÔ}I8­û‹ð#ùî’¾Ä÷~šçëË߃p|ôÝÄë2p× Ó9þŽ8êh”ß?’¾%é[’¾%¸oixâËôH}‹Á•¦¢qù_ú–µú– 8 ÊÛ ï%¼—ðÞÅü_“$â&½Ç¸»e`Ó G{óÞÿÿìXXTWžE)*6d-€JÀ‚ Ê?‚زHÓ`tÚ€XPQƒŠƒÅ`C bÁˆDlT•>€ ½O¡ CØ•Õ}oJ‚DclöÛo=ß»sß¹oιçÜóßsÏ{TŠ„T‰¦H4:Û½ÅÍÝÇ[:>œhMhC‰6H:>XÊˈÚCLμ‡Ü°^r R™É«Kn+åz<û”*éûc‡E9…^rT©.™¹Z”·“ñB’ÐÞe©Oæ‡Ä9Š;ûÝ~üžÜ@ú!!mÚ@ÅÉ„*‘é—]4 ’Ôib>ßCÒÓÖŠí4x‡Þžv*RzâbxÿäwMý¯Äû_ÚK¿&®i´-~$©ÒØå nå F4Õ$½Â@áË”*±»·¾7ù§öš~)›ÃðbÓY¦ gº‹cáåî±’îñÇÖKþ5}òDŽÜBé'¹7Èõôk0¡¹'ÿWû!£7åǾÊüŽ•òkler$ïáãÈb: Œ¼åí¸R¦üWz’[1®dº'?Óˆ6‹h󈶀hÆÔ_ñOγòçâ}NL:&$}—ßNëìA)(8²î¥É?Óq+~îé59ÀIxùE|t>©SŠ]v:“f.ˆa,€IYJü¸œ'(s¥¸ *Åà$Rq*Ìäý”µk0Îàùw]µ¨s ‰¾‘\ÍÃKæv5B›å·õ¢3ƺh§ P}#þž<­ AzÏŒÏ6#6ÿÞÍa ž9Ö¿Ü0¼ ñÇ µDPË2e¬©!¸3.ìs¾á!:Ñ·žŠpf—NÊžK"t¶GU¶Xˆy4ijWgB¨þÊÇ´a|ñèòÈ›màœÛÿ“~^FÙºt¾áEVÛãÔOE°I޾ð9-Ú×sík¤#qO²ÎIÓ‡#Àc ˆq Üš… sM½ÈÁÒí¬Ðò¡œX4ûh.y ‰«ÊÙKŽ‹.BéDÆõÅð¸yÎñÆæ…ó&]ÀTQû “÷³UýÅSßKÎ ¹ß?‡h½Ï…òˆ-rÇ_ÞñÂ0³o:죱\ÿ«Å× ¶qeG¨Õ÷ÒñDÔ ÃâU<ïHŸ?€ý‰c,KA(©Æ" Ÿ=m¾ì‹ tÇ<+Xéø3ÕÊ]3¥rÙ8™tìðˆ­¹Rù|Ü÷ŸdàbÊÅ)2͘À÷ïÄ”…°LÔn^U¦{{ðcë'R½ÅÐZüÌ){}‰TÿSŒ¦§Îd”BDdÃ8f2?J»>›].¯w-Mõ©”Î[Ž6éi52ÜæíºE«Á¼sßëw¥Ôàlñ<‘Ágµ¡|3jËÃZ©=uPœpÆnzVÔ®zÈÍÜ«Vš[û!Äl@ÕѽÁk °\ŒÏF”œ÷X¤TÒ(µ—‡*ä Í“Ú͇8ÍUó1žÜ¾töÒwêøé‡²1„3ÙÏâ ¥þ4a=qšµ67APz™H1Ͱ>+>BÔŒ4âi•g >ã»Eêg+ÄæýÜ*õ· CÄ ° _gí4¿ï/ú¥îøO|'ˆ÷ˆ•T‰lïºW±—¾A½ôÉ#:::¯ê»ÛŸûþ ©'iï˜W‘òz½LòÖ ?ŽùÓcÂþþ¾ïô5~+¨]}­?‘O{õý©ÿ©D|Ò‹<ƒ<¢îK‡õ/Þ:âúßOþÏ­÷H)K46“ãMéA⺓+C:`áîÍä0Éwÿ^¿üÉ’áÌðb°f^t7†d@|+þ NþÃÊÉ‹Á`[2¼ÝY>b]&®t¯ÕÌ W™RrÀœÁtqåôšÅÆÃÚݔΑYÓ—*À_…~Ê t¼û¢ïßÿÿìWÍjÛ0—í´ÌÐuŒ²c`ó`—^J-£cͲ¤ËvU]e1¸¶çØÐ½@Ÿ ÇvØ+ì°=À^ #o°½ÁfYR+ 71²éÐdIû÷ÓÇ_’õL›?NøžĶÖÓG;M«iºAsl+´n¤©Fslvšê€Ù^+ËÆïH~ð‰äÓq ó>äx× xY"þZV–ÁPÜæœqð8›ú‰­·*áÇ*·o]â̸;´þ%M=ßG€³Ì± !¢Žv0rc7ð/¾`Ž‹:h€"ä;èqqdÅ}è¹Gø‹WN„ßA£ÀK2®í!Œ^»Gñ‘bÇ.rßc¡•^Ø v`Ìz#3OVEœüºhT[¯÷ן¦ ¼ìxr8£gq~±Úœvn§¥¾$î$î-Åír¸›nEÀáïî‘â„1€kOä+êÇÝ\?HýErŒ"×é$ŠêÏà!ò.ùøx—9×øº ¼êù™'37?&Àgnœ•ÃY  JÅcäãëOüE>ôvÐ&^ÜŽ‚ð9 åúýÊã°èq0ãùX?dq›3p}Çãp=L=×QƒŸµŽ–_Ç÷Iqbr[`ñç†lÿ^+ÆÉøjŸ™zÆß*ûLþ¿4ÍþK­9íÚ _\¸ŽÜ<ªè¿ês²lüÚáùŠæ“‡Mùeö½)æ²|gýµ_ãÉ×Lç`ÝC_oU»çï+¹žèûþÌñ®VÄ©^/ªù´Ðz{™÷ŸÖÛ×}i½]„Óz{ö=Pëm­·µÞV£‡öŒåÖÛ=Cëí묷»Æréí«Lëebÿ›^¾ÊÁ§ïóÕõò?ÿÿâc``0b6 æb`…ò‘0DœÌæâf„>&"ô Bù«€84/³¤˜ €œ“3R¡ùÅ™%™ùyp0¸¢ Ô´Ô¢Ô¼äT·¢ÄÜTˆ˜–˜“™Rœ\”šš”ZœŸS 6Ë9#±(<3¥$f(HÀ#53=£͖Ђ|—ĘkøÈ'f õY éc# *jÔÐ@@? š~¸~0Õ¡j!ôƒr–ÞHÕ—À@i8~°§†~rý{I#}ÌHâèö°°GÈŠ S_$™ú¢ ú<ôñ¢écEÓR'aÞ…•1 Hö¡›‡ÍB(î€ðýJsS‹2“ƒJsR‹|“RsˆGfó˜òÓÒ0Ò1å!2Ÿú©®„ %˜@e5%áG(ÅPãÄ÷Ì+I-ÊKÌqIMK,Í) (Ê/ðM, ωy•TZû̓¹ƒ\}xô1Båõø¥I9™ÉÔÑ/Ãô"§c ó.’\0àgÀ4[ùœ8æÁ{ýJßü"O’µÌƒÑäÖ/³õŸõšçKaÔ§¤ä7òë÷ö(ôn0½¢•Âveú”)k·8h8¬%ˆ: x‘ ØÜŽÑö.^ÿ²R¨Vñ6èÌ%†Nû˜:ù•\ÿR£žˆ`„ÔAÔhçS»ýåÀ€¿\çF2OÊw¬H-Vp– E‰pshÙ®$6œÃ„ eíCj´+é/| ¨ñâƒãX¾&$&§žx‰d„ô‡ÀáË„?ý;0 ¦¤ÚÙËöAÌc‚ýôÿê~[-°/q›ò-~…ýŠcÞæŽìŲ|?÷oŠï°ôrê&žÂ=Pùöñ3|D{¼Ù÷Œ 8bïzãïÈcöV~¼ä›tÂ^[bêÎŒSP}gìgîž6¿êTÿûýµ²é.íg?“]þÂã’}™¿ÐÊËöA;äZ_^±ÏÌÿÐz2ä*ÔÜkö Ž“ÏÄ^‡šÃ^8ñðeíÔ›öïOvZ›yËþ”Ñ‘zy·¡öݱß4M±¯ô.ÔÞ{ö%* ŸÞ·?–kÒ°Ýá½É¢-æ?=°_xÍä½…ëC{~î­Ë*?„ºç‘=§ô¼8ÍÓ îzlϤÝ.vóÜcû‚xös’OìïMnoºüÄÞû»íìЧöרr] uï3ûÍ<…kºo?ƒºû¹ý™¨ëûÏí¥oI×$¾°ïêÞóø…ý×·ºþ¦¾´oœêÜóü%Ô?¯ìcÿ9ÿzûú•ý‹›k~Åä¾¶ãÓÝ4÷ýkû#@Ù{…oìÊu忼úó­=ØyßßBýûΞ-ÞÙO:]ﱿö=¼þˆüÅÏ€š¿@|H¹—Ÿ“_É`ƒ%E a"̣Ÿ‡Z8IÀÂÉ%59¿(ܶÌÏ+IÌÌK-,áÍñ7ȼÜå3êø¨<2` ÐÚ]4J¿„âE˜5^@|HúÍÈÌIG ܼÁ/1@B”óÈ ¯$óØÑÌcf@mGƒä1ã¹Á•ÎÇlwp¢Ù³fPä?Sñ2 Æ'ˆï”˜œR”_ à®îM<Æ1BÆ›¢ÜÆNàt ¬AN±@BœFáD ÷%2Bô’“®à?µÆ¹Ië'AÆ»ØËÉ€šN@üÔŠŽ5NOøK`„˜EîxbHd—3#0<ý ³~Üù`”ÎûUŒŽsáõ/…ú¨ß”˜ÿÿì˜MlE€×ù¡MÚ"Li‚Hƒ"J Z"œq›¶IԆ槥E%‹½Nܺ¶q H¾Dp .pu¸pH/DÓJ) "@ ?A1¡´4¡äbàÈ¿™çñ¬ë8¶ƒÊHÏûæÛyoÞÌìÎŽß³Îþýƒs…¹ ^Øvøí¹ d«¸òR)ê qå¥ ¤Á庉ÁëÀÂmÌÍýîWüÖdñ+yEJ/Än@Ø5¯2Õ®Jp,ÛÝEÙÇ‹o_yÚ®,»;DýSAtØPJ ´šž!K€®Ð°?ê©…Ô¨ÇòY+豎FÌó‚”úœð{y‹^OIJ‚=Öp(0’òÕ:dFNû½Ñ!锃vË?8Õz9>:lFe4…ÌSy‘v…?{‹{.„ýæûµÂJa_èx¯(vŽ,vå ×û©X¥Ÿ õh÷|v/»vÅîvÍ®R³ã휨ÎË=ÆPúãþÜ«ÄQÖ¾b 7œôGVÚºÎùìgj½ö¥ž—ÕÖ§,c^Ê ¾×æcWžaWn„|>[üÙìv™ëÀëÁ¨ šÃ–Ï D»"¡p§.,3øjÉ×a½Ç!‹êOÆQ¨]s;‡¸§Úñzx䥀ßSû\ϱ´UŸãݨΗ)÷^„Ÿ†Ý_¶ýW}ª„¿ÇRåÓ¯…ú{ï]^>búµ˜÷l.Ç<ñöû´yšPâãí¶ˆø¶ {>_üŒu'È] wƒÔ‚Ür/Èû@Aîy@ôñÈà ‚àsòÈ“ O< âa AZAŽ€´t€é9Ò-â]ýlE9onÑüñ9éRüñûŸ¬ž?#}¡c¨7ºÒœëÈǧGˆ£.ÛÇ•öq¥}RiŸ$¾¯G‹ä¨S¿-i?Ä—»›‰£Ž|²Í$Ž:ÅIuäSõcÄQ—ñŒ+ñŒ+ñÄ•xâÄ_sNG]Æ9¥Ä9E¼|š8êÈ]Õ³ÄQ—ãJ(ãJß3¶Dušge¼Ie¼•,=^®#ÙUMuZâ¨#OŒ:‰£Ž¼gªž8ê´ŽÄQG~)ÙDu9ŸGÖ8êÈ'Â.â¨Ëy>DuäÎÉ6â¨#[ê&Žº\—ÓÄQGþgS?qÔé9$Žº\¯sÄQG>Gž[â¨#oOŒG¹¾¿V‰6ò½—ÿAä{_¤®®ÎÏw|·‘ùãõ^ÿùpÀj‹ø½ ‡LϹN09â´Öû|—ïwÑë@^Ìwg=Ï™kYõÿe¶økÌõáue}ŽFBÁ(-Ð-âYËùu#¬¯U‚õÈo_£Å±_™—|Ïëñ5;rßÕs7¿¿Õad)¸o|13CßeÔ%?Þ’æÇé;ç9⨓¥ý qCFZ—~jYÚO-q8|Gâ!Ž:rŸÏGuÙoLé7VÔ>¹J©öIóìÆÚ'}ÿƒ}R®OIöI¹@·ˆç¿¶O*ëû–â/Ûÿ¹mŠ?>ï}FºdþŸûœ=žúŸøµ¨'ÞµÁÙ —_Åýßì P–E;Ì÷…¹ãiÒâqCåu8´%Fßax`×ÃimjRÔ?õOœ¹A»(øeV‡+WõgìA8t'›fD»/Ùû@gãWDû¯DûoØåd´üVØÍ²^~»{Ž-Žòß ??²7Ï ?  ¬#‘j(ü&ØÛÓÜáÏl.ånQôó kàfõWEWEר…6îàšè÷:û‹ßN^gŒwçº!â¸ÁÞ\Ju âYñüÎvq÷Λ"®›ì ¿Ýÿ‡íý¿‘WÜid¾w\RyÅ>þÞµ›Ao`Ãì‡î ›ù”ô—épÿ "˜¾UåÔ>»¬øy8šÄô›úþ;ú™U½›€ödKÛ¶ìé’…·ä­4þ.¸ÿϧmò¤6=¥Ê«ògò¬8-ÑŠ?ÛäÁ*Úô<ËÏ”ÃEUïxO²s…óªþUÿ;8WËšß+¹98‚Ÿû/Âü8VøQéù r(ž½¤ôý¬ô]†çJ•ŠJo NÏ Â_àbEݼjçW¡XÛÕÞÕÞUø¨\Uí^ƒ¿ñsù6½®ì¸o/TPö,*{þ€¨¾å†²ë¼†ŸcÂzì×.±ôþhÞ}‡¹{,1z÷]_<3˜®x,àú…õ§ZÛµfßߟ;~dcüÈqߘq?4ã°Æ]ïYî—ÛW¼~³Dí+”³Ï=íûöû”{Ô§\ħÜŸrù”{ܧÜ>å:|Ê=ék½ì«»?ðßýj÷p.Ç×}XŸßi®¯ÚýšÛƒßw ;™{§ÏûÌ?+¹oî|<Ýò‹£'¹ÔÀáÑt"êKó{L-œ¯25xßô÷žâMMs{ÎùÀ~K1¼÷-Eóö[ ÓãyKѼ°ÞRŒï[Šæí·fç-Eóö[Ši×û–¢ùÕ¬ïåîë÷ ïúÆr÷Xj¤²¸{â#‰På¶þRj`èéc©ô Ö«•u>\ƒëüfÝÒëüð®óÏëp]j]ˆe~j¶øáûrþ£†ßÕ|~f”xĦ~Õ/°úeV¿LüC±í´þ³v;Y»Ä/öwXóS½qâ3;;M»£ÄËÃñˆ=yfOžÙS`öˆ?Õ2ES2õ™‘©ÏœL}dê³$J#Š>FC Ò·I;š>]ÜHú@ò-P¶ÕEÅ=«Wiiž=sÆÁö±ƒ±gÍœi‡¤ÎjµG¨‘„³í‘̳ÓÒÒìzØ þæDs? š¿™€"jjjÿÑõ¡û¦Ùß0û„³ J8CøŽ™ÅA¥9©EN‰Å© !™ÉÙ>‰I©9Ι9)0s-Ìe"¬@›‘ù ýHúyÑô³¡éñ% Ì»LHr…Œ³¨ež7àóX±˜'‚d ÀâZî+e„è¥Vº$&ÿç§¥a¤6,úíㄊCÀ{~ör2 ¦k?$µ¢DD …#5Ü?Pé¿GúÇžÈþà„šg ‡íÑir̓€öG&¼/l.X¶*` 2¯‚™´ð„òWqh^fI1 8'&g¤Bò‹3K2óóà*`pEA©i©E©yÉ©nE‰¹©03,1'\ª'¥¦æ¥ç甂ÍrÎH, ÏL)É€ ðHÍLÏ(A³%´ $ß%±æôtÅC„Ù(ÔGíø¢¶yÌcA3Onž¿˜jˆƒÐ µúAƒ9áÅÈ@^8'0`Ö{¤•[|éoP¦È¿£ù¯™)ÔG~ºP¡,]@õæ¯öÔÐO®/ écÄ¢¹¼$§ÿA¦¾H2õE1ЦÝJ¨?"â߯47µ(3Ü%QNMÎÏKI,ª÷IˆOZµãhÙ$'| …¬ý &P™MIøQ£[̈è'‘ë~JûäèŸ5>RZîü§†~j§#üñ€<Î"å;V¤+D€³)ÜœÁÐOÊRXÌ£v?‰áÎÇ€î >$ÜAƒ59™y©C¿_[Æ)÷Aæu0à/ätН¤p…äÏöú¤½ 8Þ.Cù7í!ª@ÅÛ§§À3¨üKû³g@à T¤}0ØÜCnyYÀˆßhþprjDÖ¹?¬šb¡—Øï’k}¸c”¿Êßgÿ&pu*~Äžçúâ[®ãöZ1ý‡¾jœª;g¿(z}ñ¨ú‹PõWì|Õª¼ ÕwÝ>$xÃþqHÁ-¨9wì‹@Ú îBÍ»5ï½çC°B¨¹í'øÈþظÇP{žØ+€´É=…Ú÷jßsûõî žCí}aÿ$ýõ…½=È:ÛWPw¼²o ¶êž7P÷¼µ/òê®wöq é˜÷ö£á>pá> wû–g)iŸ©s>ÄL}£óYØõ ­ù,j´wÑëYt}Èé6^Aív ²yØæåÝ’GŒ"ƒ{˜yäÎG »[x 2 ‡'„Ò¿t¬ÈAG í¡ Fˆ8%é…ÚñmÁˆ?¾ÅP㛃‘<°µ±9{fêÙ3:+A|м,BüŒ-BÜÇ!îcÍ×ÿÿì™MlEÇÇvH ir µ–‚¢¡*Å…¦jíuDs´MSÚ¢uqÆx©k§¶iúå9‡kr5H¢œÔjOH‰„Ä!§Jɵå`áZæíî¼y^LìÎnHºÒzÿóÛyoß›™Icl-qòäÂü|reùE‘­,/'™ËAK.CrÐ’/ÌïEZòx<Ž´ò?b(ÿ#È3™ rÐê¹òÜŠÍ»Ey@œâ|Yœn€Q·¼Kœ!÷„#,Hÿ3°;Gìvyì þ›Ä®Ç-Ÿš¶J£S9^ZÛ4éGä %´q9hÕž‡‘ƒ&ýŽ´äßM&ƒVí|9hÉ{—Î -ùìÓóÈA«~¹„´äGšŒCä U]CZòÕê$rÐdÜ"-ùðú rÐÀ·y~¶ò;t~ž!ósªEžž<¡<Ìs_ñ²•6I\4¯ŽyuºÜ9ÞJ•×íc þ¾ +!¿Ýí|§hý¡Ú´‹4ØEØÀá#švïjÚÅ5íŽjÚ½§i÷¾¦Ý1M»AM»ãZãåsÆKm¾ÙMìàþ7â¬?9þàþââ÷÷ß>Z¬‡J$¥†õ3©ƒZ¸0T½¨a=Lü †u¯²­Øš±Ž÷ç™O©7oYŸæ-Ÿç†)xÄüœçvÜ<|+äø ÊßYñ³güé¬Çƒˆï™ïƒ—í¼ÿ…LÆç÷nÍÐýîŽñér ~H;ÿvÿ»ÿ2þ›µ'Í£Óõ·G†÷ªë¯ñ¨®H€¿éÈóµ×knyQœóV¹D]Û`ÈLg¹ ÎJVÙ‚½¯`¥QžáEžOó‹æuî[~bæ,{V».ržå¥BnÊö5”5‹—¬‰rV:0Ì­/²eÏS.NŽ>0Ë2ï¸z¥|;|ÚÝ_Aû£ß¡fþä#ýÅÐÏÙ”}©|æ\¯Þq®k•”N{Ö±»Êü®Ó»S¾ì+}¾ò½üâýÛ4߈O;¿û7¿ö/Þ¯º„½n¾¿»P;:_êì.kÚ]Ñ´û”mͺµÕ~ä†8œòÇS×yÑJÛ[’Øž.ä'ÌâM{OÒv{nÕ:n+×:í«ûÿÝö b{'¤öIºñûÝOèØ/ÌÃñ§ßyçYöA£Û¼èßYzÜò©i^Š]±_Sô³öI_‹Ÿ}Mü½Oú/Ú½›5¶;”v‡?Öä¬<ÿÿïk+!gÞf²æîCêíkýé¶ód‹8è:âH19ßül8×_£ö8üÝøÿÿìYíkEŸË%±§éAñ5øúE©DAûÁÛ´±m¤¶!/¶ÔÎíÍÝ ™ÛYö%\„B4¾ô_° üR ‚ ~”úEh¥ (R„€ Xü^gvfîæ¶›Þevæ Ã=;ûÌîï÷Ì<3óìÌÜ…OxúµôÂ4O¿—jUžþ(]ˆÊÿ,]½ÂÓ_¥"Àe2ÊdÌy‘zNËy*0±˜ž¯%ßÒÎORïÍîÍîp‚Ý!Íî8Ó¨ÇÓp{c¸‰Q8þÞƒâö·!ÐNÊ^¼…ßpŒoˆ•LMMÝŒ×#©þtÔ_è'Âò°½äMÎ4 Ú¦I|ù¾< Õj„{Ià %àôú0f]ïæÏÑ>¤ùS={?'ÊûÑ?ƒÌ׫ÿÙåþ;Àw§ÚûaN`ÓÌ¿,æKR¼Óíd¹H[QܲºØ-tØúj“ü¢ùqçû9ÁçKò§ÞŽ‚ä‹>Ó—KñÜ”o»ÄùšùùKÅíKL–ø:aTpÚu¹ç©Ì¿M±‚ÖK ¨Š<äØèˆHD·o@‚+üEÛCÈY@>%aÄu¸½S¸Ô)/8†p­Ĭ,»KtÛ}GÆzhïhJ\Öý•5ß|>cßd }ÒŠ²õ·E~öœÈ·Ö-候ŸÏJœyÜ*Z©ðëO¥jïé»óï¶íͧę‹§Ó ‰¿;¿þ)e7mï5 —KÀéñ²—u‡ngœÝ6Ľiˆ;ú³nÕÇiR=騇Ð;ök‹È¦NzkÇa‘žýÙ¯u\?×i÷Ñ;ÙÏ›ú/‹uìF®½OJ»/0Á‹s‘ÓÆ›Y೸}¿Þô~úLù“g¢éÖâÙ û÷Øåáøúá§bÌOÅ–ŸAì ÁßO~Ä.öÉ¿:_’_&bþPþi”1r‚ã|Ù·HCÏF»Æ_³Ëc ¿qw·àŒ×—Ö~ëR”ž´"ýü)ëÀØeö›5^·ŽÝØ,ÞØÌûâ5œÿtß„å\ÿªqý緬͹«÷|ñÝQcÞƒ7îÖzåÞ_>sÏYs3'ž±~äÇå$o Â9èy°³y±Wê<'Ð¢íØ¬)>}ž%—Ð9o¹Ù¼}>?ë£íâsqÝÄÝâæ¾žësN€<’YT…! æ=ê¾]³öCg-ó~ìw;TÒùT=LqÝúq4†ãº– ¶³ÁëÿÆçÁ8¸uXâ6šj÷“i&/3¡LV™|ÎäK&ß0ùÉãìÅט~W)ŒÅF¾Ë˜à` 4ª¸õ 6$¤ íqúåc§FP ¹ü5ߦ„zUÌÛS&Ô^aÏŽ7ö#r¢³®ø¸‹TÒ¿GÊ?ëÃfþùž «Yèµ´ÿø"Æ´57ôëå0M#ØÊ´©žQ7tÈ #-Ä¥Ì'^K«E>¡l+î³Þ•[†è™ ¹CU°f=ÄÂZÍ£¡ËßdöóyÙ+mó í¾¤ length(plots) error('Bug: Got invalid display type ID'); end for n = 1:length(plots) if n == id for l = 1:length(plots{n}.lines) plots{n}.lines(l).Visible = 'on'; %fprintf('plot %s ch %d = %s\n', plots{n}.name, l, plots{n}.lines(l).Visible); end else for l = 1:length(plots{n}.lines) plots{n}.lines(l).Visible = 'off'; %fprintf('plot %s ch %d = %s\n', plots{n}.name, l, plots{n}.lines(l).Visible); end end end num_samples = get_num_samples(hObject); % Reset data so we don't see "random" junk when switching displays switch plots{id}.name case { 'FFT (dB)', 'FFT (linear)' } x = linspace(double(plots{id}.xmin), double(plots{id}.xmax), num_samples); plots{id}.lines(1).XData = x; plots{id}.lines(1).YData = zeros(num_samples, 1) - plots{id}.ymin; case 'Time (2-Channel)' x = linspace(double(plots{id}.xmin), double(plots{id}.xmax), num_samples); plots{id}.lines(1).XData = x; plots{id}.lines(1).YData = zeros(num_samples, 1); plots{id}.lines(2).XData = x; plots{id}.lines(2).YData = zeros(num_samples, 1); case 'Time (XY)' plots{id}.lines(1).XData = zeros(num_samples, 1); plots{id}.lines(1).YData = zeros(num_samples, 1); end % Update the axes limits for this plot handles.axes1.XLim = [plots{id}.xmin plots{id}.xmax]; handles.axes1.YLim = [plots{id}.ymin plots{id}.ymax]; % Update the axis labels xlabel(handles.axes1, plots{id}.xlabel); ylabel(handles.axes1, plots{id}.ylabel); end % Get the handle to the GUI's root object function [root] = get_root_object(hObject) if strcmp(hObject.Type, 'root') root = hObject; else root = get_root_object(hObject.Parent); end end % Get the state of the 'Enable Biastee' flag function [enable_biastee] = get_enable_biastee(hObject) root = get_root_object(hObject); enable_biastee = getappdata(root, 'enable_biastee'); if isempty(enable_biastee) error('Failed to access app data: enable_biastee'); end end % Set the state of the 'Enable Biastree' flag function set_enable_biastee(handles, hObject, value) handles.bladerf.rx.biastee = value; root = get_root_object(hObject); setappdata(root, 'enable_biastee', value); end % Get the state of the 'Print Overruns' flag function [print_overruns] = get_print_overruns(hObject) root = get_root_object(hObject); print_overruns = getappdata(root, 'print_overruns'); if isempty(print_overruns) error('Failed to access app data: print_overruns'); end end % Set the state of the 'Print Overruns' flag function set_print_overruns(hObject, value) root = get_root_object(hObject); setappdata(root, 'print_overruns', value); end % Get the number of samples that are retrieved from the device per RX function [num_samples] = get_num_samples(hObject) root = get_root_object(hObject); num_samples = getappdata(root, 'num_samples'); if isempty(num_samples) error('Failed to access app data: num_samples'); end end % Get the array of plots function [plots] = get_plots(hObject) root = get_root_object(hObject); plots = getappdata(root, 'plots'); if isempty(plots) error('Failed to access app data: plot'); end end % Apply updates to plot configuration function set_plots(hObject, plots) root = get_root_object(hObject); setappdata(root, 'plots', plots); end % Get the frame rate configuration function [fps] = get_framerate(hObject) root = get_root_object(hObject); fps = getappdata(root, 'framerate'); end % Set the fraem rate configuration function set_framerate(hObject, fps) root = get_root_object(hObject); setappdata(root, 'framerate', fps); end function update_plot_axes(hObject, handles) plots = get_plots(hObject); Fc = handles.bladerf.rx.frequency; Fs = handles.bladerf.rx.samplerate; num_samples = get_num_samples(hObject); % Update the axes limits of all plots for id = 1:length(plots) switch plots{id}.name case 'FFT (dB)' plots{id}.xmin = (Fc - Fs/2); plots{id}.xmax = (Fc + Fs/2); plots{id}.ymin = -110; plots{id}.ymax = 0; % Ensure the X values are updated, as these are not updated every read if id == handles.displaytype.Value x = linspace(double(plots{id}.xmin), double(plots{id}.xmax), num_samples); plots{id}.lines(1).XData = x; end case 'FFT (linear)' plots{id}.xmin = (Fc - Fs/2); plots{id}.xmax = (Fc + Fs/2); plots{id}.ymin = 0; plots{id}.ymax = 1; % Ensure the X values are updated, as these are not updated every read if id == handles.displaytype.Value x = linspace(double(plots{id}.xmin), double(plots{id}.xmax), num_samples); plots{id}.lines(1).XData = x; end case 'Time (2-Channel)' plots{id}.xmin = 0; plots{id}.xmax = (num_samples - 1) / Fs; plots{id}.ymin = -1.2; plots{id}.ymax = 1.2; case 'Time (XY)' plots{id}.xmin = -1.2; plots{id}.xmax = 1.2; plots{id}.ymin = -1.2; plots{id}.ymax = 1.2; otherwise error('Invalid plot type encountered'); end % Update the current plot axes if id == handles.displaytype.Value handles.axes1.XLim = [plots{id}.xmin plots{id}.xmax]; handles.axes1.YLim = [plots{id}.ymin plots{id}.ymax]; end end set_plots(hObject, plots); end function [plot_info] = init_plot_type(hObject, handles, type) plot_info.name = type; blue = [0 0 1]; red = [1 0 0]; num_samples = get_num_samples(hObject); x = zeros(num_samples, 1); y = zeros(num_samples, 1); switch type case { 'FFT (dB)', 'FFT (linear)' } plot_info.xlabel = 'Frequency (MHz)'; plot_info.ylabel = 'Power (dB)'; plot_info.lines(1) = line(x, y); plot_info.lines(1).Color = blue; plot_info.lines(1).Marker = 'none'; plot_info.lines(1).LineStyle = '-'; case 'Time (2-Channel)' plot_info.xlabel = 'Time (s)'; plot_info.ylabel = 'Sample Values (I: Blue, Q: Red)'; plot_info.lines(1) = line(x, y); plot_info.lines(1).Color = blue; plot_info.lines(1).Marker = 'none'; plot_info.lines(1).LineStyle = '-'; plot_info.lines(2) = line(x, y); plot_info.lines(2).Color = red; plot_info.lines(2).Marker = 'none'; plot_info.lines(2).LineStyle = '-'; case 'Time (XY)' plot_info.xlabel = 'I Value'; plot_info.ylabel = 'Q Value'; plot_info.lines(1) = line(x, y); plot_info.lines(1).Color = blue; plot_info.lines(1).Marker = '.'; plot_info.lines(1).LineStyle = 'none'; plot_info.lines(1).Visible = 'off'; otherwise error('Invalid plot type encountered'); end end % Update GUI fields with parameter values from device function read_device_parameters(hObject, handles) set_agc_selection(handles.agc, handles, handles.bladerf.rx.agc); handles.corr_dc_i.String = num2str(handles.bladerf.rx.corrections.dc_i); handles.corr_dc_q.String = num2str(handles.bladerf.rx.corrections.dc_q); handles.corr_gain.String = num2str(handles.bladerf.rx.corrections.gain); handles.corr_phase.String = num2str(handles.bladerf.rx.corrections.phase); handles.frequency.String = addcommas(num2str(handles.bladerf.rx.frequency)); handles.samplerate.String = addcommas(num2str(handles.bladerf.rx.samplerate)); set_bandwidth_selection(handles.bandwidth, handles.bladerf.rx.bandwidth); handles.num_buffers.String = num2str(handles.bladerf.rx.config.num_buffers); handles.buffer_size.String = num2str(handles.bladerf.rx.config.buffer_size); handles.num_transfers.String = num2str(handles.bladerf.rx.config.num_transfers); handles.frequency.TooltipString = sprintf('Configures RX frequency. Valid values are %u MHz to %u GHz', ... handles.bladerf.rx.min_frequency/1e6, handles.bladerf.rx.max_frequency/1e9); handles.samplerate.TooltipString = sprintf('Configures the RX sample rate. Suggested valuse are [%.2f, %.2f] MHz.', ... handles.bladerf.rx.min_sampling/1e6, handles.bladerf.rx.max_sampling/1e6); guidata(hObject, handles); end function bladeRF_fft_OpeningFcn(hObject, ~, handles, varargin) % Choose default command line output for bladeRF_fft handles.output = hObject; % UIWAIT makes bladeRF_fft wait for user response (see UIRESUME) % uiwait(handles.figure1); handles.bladerf = bladeRF('*:instance=0'); read_device_parameters(hObject, handles); handles.bladerf.rx.config.num_buffers = 64; handles.bladerf.rx.config.buffer_size = 16384; handles.bladerf.rx.config.timeout_ms = 5000; handles.print_overruns.Value = 0; setappdata(hObject.Parent, 'print_overruns', 0); setappdata(hObject.Parent, 'run', 0); % Number of samples we'll read from the device at each iteraion setappdata(hObject.Parent, 'num_samples', 4096); % Default frame rate setappdata(hObject.Parent, 'framerate', 15); handles.framerate.String = '15'; % Create plot information for each type of lot type_strs = handles.displaytype.String; plots = cell(1, length(type_strs)); for n = 1:length(plots) plots{n} = init_plot_type(hObject.Parent, handles, type_strs{n}); end setappdata(hObject.Parent, 'plots', plots); update_plot_axes(hObject, handles); update_plot_selection(hObject.Parent, handles); % Update handles structure guidata(hObject, handles); end function varargout = bladeRF_fft_OutputFcn(~, ~, handles) varargout{1} = handles.output; end function displaytype_Callback(hObject, ~, handles) update_plot_selection(hObject.Parent.Parent, handles); end function displaytype_CreateFcn(hObject, ~, ~) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) hObject.BackgroundColor = 'white'; end end function actionbutton_Callback(hObject, ~, handles) action = hObject.String; switch action case 'Start' handles.buffer_size.Enable = 'off'; handles.num_buffers.Enable = 'off'; handles.num_transfers.Enable = 'off'; handles.devicelist.Enable = 'off'; handles.xb200_attached.Enable = 'off'; if handles.bladerf.info.gen == 2 if handles.channel.Value == 1 handles.bladerf.rx.channel = 'RX1'; elseif handles.channel.Value == 2 handles.bladerf.rx.channel = 'RX2'; end else handles.bladerf.rx.channel = 'RX1'; handles.channel.Value = 1; end handles.channel.Enable = 'off'; handles.bladerf.rx.config.num_buffers = str2num(handles.num_buffers.String); handles.bladerf.rx.config.buffer_size = str2num(handles.buffer_size.String); handles.bladerf.rx.config.num_transfers = str2num(handles.num_transfers.String); hObject.String = 'Stop'; handles.bladerf.rx.start; guidata(hObject, handles); start = cputime; update = 1; framerate = get_framerate(hObject); num_samples = get_num_samples(hObject); % We'll window our samples. However, we want to normalize % this to account for some of its inherent loss. if license('test', 'Signal_Toolbox') win = blackmanharris(num_samples); else win = ones(num_samples,1); end win_norm = (1 / sum(abs(win) ./ num_samples) .* win); win_norm = win_norm ./ 4096; plots = get_plots(hObject); samples = zeros(num_samples, 1); fft_data = zeros(num_samples, 1); history = zeros(num_samples, 1); prev_plot_id = -1; alpha = str2num(handles.fft_avg_alpha.String); if isempty(alpha) || alpha < 0.0 || alpha >= 1.0 alpha = 0.0; end run = 1; runidx = 0; setappdata(hObject.Parent.Parent, 'run', 1); while run == 1 [samples(:), ~, ~, overrun] = ... handles.bladerf.receive(num_samples); if mod(runidx, 1000) == 0 handles.gain1.String = handles.bladerf.rx.gain; if handles.bladerf.info.gen == 2 handles.power.Visible = 'on'; handles.power.String = sprintf('Power Source: %s Consumption: %2.2f W Temperature: %2.2f ''C', ... handles.bladerf.misc.dc_source, handles.bladerf.misc.dc_power, handles.bladerf.misc.temperature); end end runidx = runidx + 1; if overrun print_overrun = get_print_overruns(hObject); if print_overrun ~= 0 fprintf('Overrun @ t=%f\n', cputime - start); end elseif update update = 0; id = handles.displaytype.Value; % Since we're only displaying the GUI at some frame % rate, there's no sense in constantly polling the % user-supplied alpha for changes. new_alpha = str2num(handles.fft_avg_alpha.String); if ~isempty(alpha) alpha = new_alpha; end % If we've changed plot types, we need to reset the % FFT history, as it's only relevent for the associated % mode if id ~= prev_plot_id history(:) = zeros(1, length(history)) + plots{id}.ymin; end switch plots{id}.name case 'FFT (dB)' fft_data(:) = 20*log10(abs(fftshift(fft(samples .* win_norm)))); history(:) = history .* alpha + (1 - alpha) .* fft_data; plots{id}.lines(1).YData(:) = history; case 'FFT (linear)' fft_data = abs(fftshift(fft(samples .* win_norm))); history(:) = history .* alpha + (1 - alpha) .* fft_data; plots{id}.lines(1).YData(:) = history; case 'Time (2-Channel)' plots{id}.lines(1).YData(:) = real(samples); plots{id}.lines(2).YData(:) = imag(samples); case 'Time (XY)' plots{id}.lines(1).XData(:) = real(samples); plots{id}.lines(1).YData(:) = imag(samples); otherwise error('Invalid plot selection encountered'); end drawnow; tic; prev_plot_id = id; framerate = get_framerate(hObject); else t = toc; update = (t > (1/framerate)); end run = getappdata(hObject.Parent.Parent, 'run'); end handles.bladerf.rx.stop; figHandle = getappdata(hObject.Parent.Parent, 'ready_to_delete'); if ~isempty(figHandle) delete(figHandle); end case 'Stop' setappdata(hObject.Parent.Parent, 'run', 0); handles.buffer_size.Enable = 'on'; handles.num_buffers.Enable = 'on'; handles.num_transfers.Enable = 'on'; handles.devicelist.Enable = 'on'; handles.xb200_attached.Enable = 'on'; handles.channel.Enable = 'on'; hObject.String = 'Start'; guidata(hObject, handles); otherwise error(strcat('Unexpected button action: ', action)) end end function agc_Callback(hObject, ~, handles) items = hObject.String; index = hObject.Value; %fprintf('GUI Request to set LNA gain to: %s\n', items{index}) handles.bladerf.rx.agc = items{index}; set_agc_selection(hObject, handles, handles.bladerf.rx.agc); %i = cellfun(@(x)strcmpi(x,handles.bladerf.rx.agc),hObject.String); %hObject.Value = find(i); guidata(hObject, handles); end function agc_CreateFcn(hObject, ~, ~) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) hObject.BackgroundColor = white; end end function gain1_Callback(hObject, ~, handles) val = str2num(hObject.String); if isempty(val) val = handles.bladerf.rx.vga1; end %val = min(30, val); %val = max(5, val); %fprintf('GUI request to set Gain1: %d\n', val); handles.bladerf.rx.gain = val; hObject.String = num2str(handles.bladerf.rx.gain); guidata(hObject, handles); end function gain1_CreateFcn(hObject, ~, ~) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) hObject.BackgroundColor = 'white'; end end function bandwidth_Callback(hObject, ~, handles) values = hObject.String; index = hObject.Value; selected = str2num(values{index}); bw = selected * 1.0e6; %fprintf('GUI request to set bandwidth to: %f\n', bw); handles.bladerf.rx.bandwidth = bw; end function bandwidth_CreateFcn(hObject, ~, ~) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) hObject.BackgroundColor = 'white'; end end function channel_Callback(hObject, ~, handles) values = hObject.String; index = hObject.Value; if handles.bladerf.info.gen == 2 && strcmpi(values{index}, 'RX2') handles.bladerf.rx.channel = 'RX2'; else handles.bladerf.rx.channel = 'RX1'; hObject.Value = 1; end end function channel_CreateFcn(hObject, ~, ~) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) hObject.BackgroundColor = 'white'; end end function corr_dc_i_Callback(hObject, ~, handles) val = str2num(hObject.String); if isempty(val) val = handles.bladerf.rx.corrections.dc_i; end val = min(2048, val); val = max(-2048, val); %fprintf('GUI request to set I DC correction to: %f\n', val) handles.bladerf.rx.corrections.dc_i = val; hObject.String = num2str(val); end function corr_dc_i_CreateFcn(hObject, ~, ~) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) hObject.BackgroundColor = 'white'; end end function corr_dc_q_CreateFcn(hObject, ~, ~) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) hObject.BackgroundColor = 'white'; end end function corr_dc_q_Callback(hObject, ~, handles) val = str2num(hObject.String); if isempty(val) val = handles.bladerf.rx.corrections.dc_q; end val = min(2048, val); val = max(-2048, val); %fprintf('GUI request to set IQ DC correction to: %f\n', val) handles.bladerf.rx.corrections.dc_q = val; hObject.String = num2str(val); end function corr_gain_Callback(hObject, ~, handles) val = str2num(hObject.String); if isempty(val) val = handles.bladerf.rx.corrections.gain; end val = max(-1.0, val); val = min(1.0, val); %fprintf('GUI request to set IQ gain correction to: %f\n', val) handles.bladerf.rx.corrections.gain = val; hObject.String = num2str(val); end function corr_gain_CreateFcn(hObject, ~, ~) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) hObject.BackgroundColor = 'white'; end end function corr_phase_Callback(hObject, ~, handles) val = str2num(hObject.String); if isempty(val) val = handles.bladerf.rx.corrections.phase; end %fprintf('GUI request to set phase correction to: %f\n', val) handles.bladerf.rx.corrections.phase = val; val = handles.bladerf.rx.corrections.phase; hObject.String = num2str(val); end function corr_phase_CreateFcn(hObject, ~, ~) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) hObject.BackgroundColor = 'white'; end end function samplerate_Callback(hObject, ~, handles) val = str2num(removecommas(hObject.String)); if isempty(val) val = handles.bladerf.rx.samplerate; end val = min(handles.bladerf.rx.max_sampling, val); val = max(handles.bladerf.rx.min_sampling, val); %fprintf('GUI request to set samplerate to: %f\n', val); handles.bladerf.rx.samplerate = val; val = handles.bladerf.rx.samplerate; hObject.String = addcommas(num2str(val)); update_plot_axes(hObject, handles); end function samplerate_CreateFcn(hObject, ~, ~) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) hObject.BackgroundColor = 'white'; end end function val = addcommas(strval) idxend = strfind(strval, '.'); if isempty(idxend) idxend = size(strval, 2)+1; end strval(2, idxend - 4: -3 : 1) = ','; val = transpose(strval(strval ~= char(0))); end function val = removecommas(strval) val = regexprep(strval,',',''); end function frequency_Callback(hObject, ~, handles) val = str2num(removecommas(hObject.String)); if isempty(val) val = handles.bladerf.rx.frequency; end val = min(handles.bladerf.rx.max_frequency, val); val = max(handles.bladerf.rx.min_frequency, val); %fprintf('GUI request to set frequency: %d\n', val); handles.bladerf.rx.frequency = val; hObject.String = addcommas(num2str(val)); hObject.Value = val; update_plot_axes(hObject, handles); end function frequency_CreateFcn(hObject, ~, ~) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) hObject.BackgroundColor = 'white'; end end function devicelist_Callback(hObject, ~, handles) if handles.xb200_attached.Value == true xb = 'XB200'; else xb = []; end items = hObject.String; index = hObject.Value; devstring = items{index}; handles.bladerf.delete; guidata(hObject, handles); handles.bladerf = bladeRF(devstring, [], xb); read_device_parameters(hObject, handles); guidata(hObject, handles); end function xb200_attached_Callback(hObject, ~, handles) if hObject.Value == true xb = 'XB200'; else xb = []; end items = handles.devicelist.String; index = handles.devicelist.Value; devstring = items{index}; handles.bladerf.delete; guidata(hObject, handles); handles.bladerf = bladeRF(devstring, [], xb); read_device_parameters(hObject, handles); guidata(hObject, handles); end function devicelist_CreateFcn(hObject, ~, ~) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) hObject.BackgroundColor = 'white'; end devs = bladeRF.devices; list = cell(1, length(devs)); for idx=1:length(devs) switch devs(idx).backend case 'BLADERF_BACKEND_LIBUSB' backend = 'libusb'; case 'BLADERF_BACKEND_CYPRESS' backend = 'cypress'; otherwise disp('Not sure which backend is being used'); backend = '*'; end list{idx} = strcat(backend, ':serial=', devs(idx).serial); end hObject.String = list; end function figure1_CloseRequestFcn(hObject, ~, ~) running = getappdata(hObject.Parent, 'run'); if running == 1 % Our hackish receive loop is still running. Flag it to shut % down and have it take care of the final delete(). setappdata(hObject.Parent, 'run', 0); setappdata(hObject.Parent, 'ready_to_delete', hObject) else % We can shut down now. delete(hObject); end end function num_buffers_Callback(hObject, ~, handles) num_buffers = str2num(hObject.String); if isempty(num_buffers) num_buffers = handles.bladerf.rx.config.num_buffers; end num_buffers = max(2, num_buffers); handles.bladerf.rx.config.num_buffers = num_buffers; hObject.String = num2str(num_buffers); end function num_buffers_CreateFcn(hObject, ~, ~) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) hObject.BackgroundColor = 'white'; end end function buffer_size_Callback(hObject, ~, handles) buffer_size = str2num(hObject.String); if isempty(buffer_size); buffer_size = handles.bladerf.rx.config.buffer_size; end if (mod(buffer_size, 1024) ~= 0) buffer_size = max(1024, floor((buffer_size / 1024)) * 1024); end handles.bladerf.rx.config.buffer_size = buffer_size; hObject.String = num2str(handles.bladerf.rx.config.buffer_size); end function buffer_size_CreateFcn(hObject, ~, ~) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) hObject.BackgroundColor = 'white'; end end function num_transfers_Callback(hObject, ~, handles) num_transfers = str2num(hObject.String); if isempty(num_transfers) num_transfers = handles.bladerf.rx.config.num_transfers; end num_buffers = handles.bladerf.rx.config.num_buffers; if num_transfers < 1 num_transfers = 1; elseif num_transfers > floor(num_buffers / 2) num_transfers = max(1, floor(num_buffers/2)); end handles.bladerf.rx.config.num_transfers = num_transfers; hObject.String = num2str(handles.bladerf.rx.config.num_transfers); end function num_transfers_CreateFcn(hObject, ~, ~) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) hObject.BackgroundColor = 'white'; end end function enable_biastee_Callback(hObject, ~, handles) if hObject.Value ~= 0 set_enable_biastee(handles, hObject, 1); else set_enable_biastee(handles, hObject, 0); end end function print_overruns_Callback(hObject, ~, ~) if hObject.Value ~= 0 set_print_overruns(hObject, 1); else set_print_overruns(hObject, 0); end end function fft_avg_alpha_Callback(~, ~, ~) end function fft_avg_alpha_CreateFcn(hObject, ~, ~) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) hObject.BackgroundColor = 'white'; end end function framerate_Callback(hObject, ~, ~) fps = str2num(hObject.String); if isempty(fps) == true fps = get_framerate(hObject); elseif fps < 1 fps = 1; end fps = round(fps); hObject.String = num2str(fps); set_framerate(hObject, fps); end function framerate_CreateFcn(hObject, ~, ~) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end end bladeRF-2024.05/host/libraries/libbladeRF_bindings/matlab/libbladeRF_proto.m000066400000000000000000002253441457144405000266260ustar00rootroot00000000000000% % Copyright (c) 2015-2018 Nuand LLC % % Permission is hereby granted, free of charge, to any person obtaining a copy % of this software and associated documentation files (the "Software"), to deal % in the Software without restriction, including without limitation the rights % to use, copy, modify, merge, publish, distribute, sublicense, and/or sell % copies of the Software, and to permit persons to whom the Software is % furnished to do so, subject to the following conditions: % % The above copyright notice and this permission notice shall be included in % all copies or substantial portions of the Software. % % THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR % IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, % FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE % AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER % LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, % OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN % THE SOFTWARE. % % Background info: % https://www.mathworks.com/help/matlab/matlab_external/passing-arguments-to-shared-library-functions.html#f44412 % https://ofekshilon.com/2016/07/15/on-matlabs-loadlibrary-proto-file-and-pcwin64-thunk/ function [methodinfo,structs,enuminfo,ThunkLibName]=libbladeRF_proto %LIBBLADERF_PROTO Create structures to define interfaces found in libbladeRF. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Setup %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ival={cell(1, 0)}; structs=[]; enuminfo=[]; fcnNum=1; fcns=struct('name', ival, ... 'calltype', ival, ... 'LHS', ival, ... 'RHS', ival, ... 'alias', ival, ... 'thunkname', ival); arch = computer('arch'); switch arch case 'glnxa64' libname = 'libbladeRF_thunk_glnxa64'; libsuffix = '.so'; u64_type = 'ulong'; case 'win64' libname = 'libbladeRF_thunk_pcwin64'; libsuffix = '.dll'; u64_type = 'uint64'; case 'imac64' % Additional type changes for this may be required for OSX support libname = 'libbladeRF_thunk_imac64'; libsuffix = '.dylib'; u64_type = 'ulong'; otherwise error(['Unsupported architecture: ' arch]); end search_path = [ '.'; strsplit(path, pathsep)']; for n = 1:length(search_path) to_check = fullfile(search_path{n}, [libname libsuffix]); if exist(to_check, 'file') %fprintf('Found %s\n', to_check); ThunkLibName = to_check; break else %fprintf('%s does not exist.\n', to_check); end end if ~exist('ThunkLibName', 'var') error(['Failed to find ' [libname libsuffix] '. Check path().']); end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % int bladerf_get_device_list ( struct bladerf_devinfo ** devices ); fcns.thunkname{fcnNum}='int32voidPtrThunk';fcns.name{fcnNum}='bladerf_get_device_list'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerf_devinfoPtrPtr'};fcnNum=fcnNum+1; % void bladerf_free_device_list ( struct bladerf_devinfo * devices ); fcns.thunkname{fcnNum}='voidvoidPtrThunk';fcns.name{fcnNum}='bladerf_free_device_list'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}=[]; fcns.RHS{fcnNum}={'bladerf_devinfoPtr'};fcnNum=fcnNum+1; % void bladerf_init_devinfo ( struct bladerf_devinfo * info ); fcns.thunkname{fcnNum}='voidvoidPtrThunk';fcns.name{fcnNum}='bladerf_init_devinfo'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}=[]; fcns.RHS{fcnNum}={'bladerf_devinfoPtr'};fcnNum=fcnNum+1; % int bladerf_get_devinfo ( struct bladerf * dev , struct bladerf_devinfo * info ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_get_devinfo'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_devinfoPtr'};fcnNum=fcnNum+1; % int bladerf_get_devinfo_from_str ( const char * devstr , struct bladerf_devinfo * info ); fcns.thunkname{fcnNum}='int32cstringvoidPtrThunk';fcns.name{fcnNum}='bladerf_get_devinfo_from_str'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'cstring', 'bladerf_devinfoPtr'};fcnNum=fcnNum+1; % _Bool bladerf_devinfo_matches ( const struct bladerf_devinfo * a , const struct bladerf_devinfo * b ); fcns.thunkname{fcnNum}='_BoolvoidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_devinfo_matches'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='bool'; fcns.RHS{fcnNum}={'bladerf_devinfoPtr', 'bladerf_devinfoPtr'};fcnNum=fcnNum+1; % _Bool bladerf_devstr_matches ( const char * dev_str , struct bladerf_devinfo * info ); fcns.thunkname{fcnNum}='_BoolcstringvoidPtrThunk';fcns.name{fcnNum}='bladerf_devstr_matches'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='bool'; fcns.RHS{fcnNum}={'cstring', 'bladerf_devinfoPtr'};fcnNum=fcnNum+1; % int bladerf_open_with_devinfo ( struct bladerf ** device , struct bladerf_devinfo * devinfo ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_open_with_devinfo'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtrPtr', 'bladerf_devinfoPtr'};fcnNum=fcnNum+1; % int bladerf_open ( struct bladerf ** device , const char * device_identifier ); fcns.thunkname{fcnNum}='int32voidPtrcstringThunk';fcns.name{fcnNum}='bladerf_open'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtrPtr', 'cstring'};fcnNum=fcnNum+1; % void bladerf_close ( struct bladerf * device ); fcns.thunkname{fcnNum}='voidvoidPtrThunk';fcns.name{fcnNum}='bladerf_close'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}=[]; fcns.RHS{fcnNum}={'bladerfPtr'};fcnNum=fcnNum+1; % void bladerf_set_usb_reset_on_open ( _Bool enabled ); fcns.thunkname{fcnNum}='void_BoolThunk';fcns.name{fcnNum}='bladerf_set_usb_reset_on_open'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}=[]; fcns.RHS{fcnNum}={'bool'};fcnNum=fcnNum+1; % int bladerf_get_serial ( struct bladerf * dev , char * serial ); fcns.thunkname{fcnNum}='int32voidPtrcstringThunk';fcns.name{fcnNum}='bladerf_get_serial'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'cstring'};fcnNum=fcnNum+1; % int bladerf_get_vctcxo_trim ( struct bladerf * dev , uint16_t * trim ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_get_vctcxo_trim'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'uint16Ptr'};fcnNum=fcnNum+1; % int bladerf_get_fpga_size ( struct bladerf * dev , bladerf_fpga_size * size ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_get_fpga_size'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_fpga_sizePtr'};fcnNum=fcnNum+1; % int bladerf_fw_version ( struct bladerf * dev , struct bladerf_version * version ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_fw_version'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_versionPtr'};fcnNum=fcnNum+1; % int bladerf_is_fpga_configured ( struct bladerf * dev ); fcns.thunkname{fcnNum}='int32voidPtrThunk';fcns.name{fcnNum}='bladerf_is_fpga_configured'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr'};fcnNum=fcnNum+1; % int bladerf_fpga_version ( struct bladerf * dev , struct bladerf_version * version ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_fpga_version'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_versionPtr'};fcnNum=fcnNum+1; % bladerf_dev_speed bladerf_device_speed ( struct bladerf * dev ); fcns.thunkname{fcnNum}='bladerf_dev_speedvoidPtrThunk';fcns.name{fcnNum}='bladerf_device_speed'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='bladerf_dev_speed'; fcns.RHS{fcnNum}={'bladerfPtr'};fcnNum=fcnNum+1; % int bladerf_enable_module ( struct bladerf * dev , bladerf_channel ch , _Bool enable ); fcns.thunkname{fcnNum}='int32voidPtrint32_BoolThunk';fcns.name{fcnNum}='bladerf_enable_module'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', 'bool'};fcnNum=fcnNum+1; % int bladerf_set_txvga2 ( struct bladerf * dev , int gain ); fcns.thunkname{fcnNum}='int32voidPtrint32Thunk';fcns.name{fcnNum}='bladerf_set_txvga2'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'int32'};fcnNum=fcnNum+1; % int bladerf_get_txvga2 ( struct bladerf * dev , int * gain ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_get_txvga2'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'int32Ptr'};fcnNum=fcnNum+1; % int bladerf_set_txvga1 ( struct bladerf * dev , int gain ); fcns.thunkname{fcnNum}='int32voidPtrint32Thunk';fcns.name{fcnNum}='bladerf_set_txvga1'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'int32'};fcnNum=fcnNum+1; % int bladerf_get_txvga1 ( struct bladerf * dev , int * gain ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_get_txvga1'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'int32Ptr'};fcnNum=fcnNum+1; % int bladerf_set_lna_gain ( struct bladerf * dev , bladerf_lna_gain gain ); fcns.thunkname{fcnNum}='int32voidPtrbladerf_lna_gainThunk';fcns.name{fcnNum}='bladerf_set_lna_gain'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_lna_gain'};fcnNum=fcnNum+1; % int bladerf_get_lna_gain ( struct bladerf * dev , bladerf_lna_gain * gain ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_get_lna_gain'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_lna_gainPtr'};fcnNum=fcnNum+1; % int bladerf_set_rxvga1 ( struct bladerf * dev , int gain ); fcns.thunkname{fcnNum}='int32voidPtrint32Thunk';fcns.name{fcnNum}='bladerf_set_rxvga1'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'int32'};fcnNum=fcnNum+1; % int bladerf_get_rxvga1 ( struct bladerf * dev , int * gain ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_get_rxvga1'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'int32Ptr'};fcnNum=fcnNum+1; % int bladerf_set_rxvga2 ( struct bladerf * dev , int gain ); fcns.thunkname{fcnNum}='int32voidPtrint32Thunk';fcns.name{fcnNum}='bladerf_set_rxvga2'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'int32'};fcnNum=fcnNum+1; % int bladerf_get_rxvga2 ( struct bladerf * dev , int * gain ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_get_rxvga2'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'int32Ptr'};fcnNum=fcnNum+1; % int bladerf_set_gain ( struct bladerf * dev , bladerf_channel ch , bladerf_gain gain ); fcns.thunkname{fcnNum}='int32voidPtrint32int32Thunk';fcns.name{fcnNum}='bladerf_set_gain'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', 'int32'};fcnNum=fcnNum+1; % int bladerf_set_gain_mode ( struct bladerf * dev , bladerf_channel ch , bladerf_gain_mode mode ); fcns.thunkname{fcnNum}='int32voidPtrint32bladerf_gain_modeThunk';fcns.name{fcnNum}='bladerf_set_gain_mode'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', 'bladerf_gain_mode'};fcnNum=fcnNum+1; % int bladerf_get_gain_mode ( struct bladerf * dev , bladerf_channel ch , bladerf_gain_mode * mode ); fcns.thunkname{fcnNum}='int32voidPtrint32voidPtrThunk';fcns.name{fcnNum}='bladerf_get_gain_mode'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', 'bladerf_gain_modePtr'};fcnNum=fcnNum+1; % int bladerf_set_sample_rate ( struct bladerf * dev , bladerf_channel ch , bladerf_sample_rate rate , bladerf_sample_rate * actual ); fcns.thunkname{fcnNum}='int32voidPtrint32uint32voidPtrThunk';fcns.name{fcnNum}='bladerf_set_sample_rate'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', 'uint32', 'uint32Ptr'};fcnNum=fcnNum+1; % int bladerf_set_rational_sample_rate ( struct bladerf * dev , bladerf_channel ch , struct bladerf_rational_rate * rate , struct bladerf_rational_rate * actual ); fcns.thunkname{fcnNum}='int32voidPtrint32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_set_rational_sample_rate'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', 'bladerf_rational_ratePtr', 'bladerf_rational_ratePtr'};fcnNum=fcnNum+1; % int bladerf_get_sample_rate ( struct bladerf * dev , bladerf_channel ch , bladerf_sample_rate * rate ); fcns.thunkname{fcnNum}='int32voidPtrint32voidPtrThunk';fcns.name{fcnNum}='bladerf_get_sample_rate'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', 'uint32Ptr'};fcnNum=fcnNum+1; % int bladerf_get_rational_sample_rate ( struct bladerf * dev , bladerf_channel ch , struct bladerf_rational_rate * rate ); fcns.thunkname{fcnNum}='int32voidPtrint32voidPtrThunk';fcns.name{fcnNum}='bladerf_get_rational_sample_rate'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', 'bladerf_rational_ratePtr'};fcnNum=fcnNum+1; % int bladerf_set_sampling ( struct bladerf * dev , bladerf_sampling sampling ); fcns.thunkname{fcnNum}='int32voidPtrbladerf_samplingThunk';fcns.name{fcnNum}='bladerf_set_sampling'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_sampling'};fcnNum=fcnNum+1; % int bladerf_set_rx_mux ( struct bladerf * dev , bladerf_rx_mux mux ); fcns.thunkname{fcnNum}='int32voidPtrbladerf_rx_muxThunk';fcns.name{fcnNum}='bladerf_set_rx_mux'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_rx_mux'};fcnNum=fcnNum+1; % int bladerf_get_rx_mux ( struct bladerf * dev , bladerf_rx_mux * mode ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_get_rx_mux'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_rx_muxPtr'};fcnNum=fcnNum+1; % int bladerf_get_sampling ( struct bladerf * dev , bladerf_sampling * sampling ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_get_sampling'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_samplingPtr'};fcnNum=fcnNum+1; % int bladerf_set_bandwidth ( struct bladerf * dev , bladerf_channel ch , bladerf_bandwidth bandwidth , bladerf_bandwidth * actual ); fcns.thunkname{fcnNum}='int32voidPtrint32uint32voidPtrThunk';fcns.name{fcnNum}='bladerf_set_bandwidth'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', 'uint32', 'uint32Ptr'};fcnNum=fcnNum+1; % int bladerf_get_bandwidth ( struct bladerf * dev , bladerf_channel ch , bladerf_bandwidth * bandwidth ); fcns.thunkname{fcnNum}='int32voidPtrint32voidPtrThunk';fcns.name{fcnNum}='bladerf_get_bandwidth'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', 'uint32Ptr'};fcnNum=fcnNum+1; % int bladerf_set_lpf_mode ( struct bladerf * dev , bladerf_channel ch , bladerf_lpf_mode mode ); fcns.thunkname{fcnNum}='int32voidPtrint32bladerf_lpf_modeThunk';fcns.name{fcnNum}='bladerf_set_lpf_mode'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', 'bladerf_lpf_mode'};fcnNum=fcnNum+1; % int bladerf_get_lpf_mode ( struct bladerf * dev , bladerf_channel ch , bladerf_lpf_mode * mode ); fcns.thunkname{fcnNum}='int32voidPtrint32voidPtrThunk';fcns.name{fcnNum}='bladerf_get_lpf_mode'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', 'bladerf_lpf_modePtr'};fcnNum=fcnNum+1; % int bladerf_select_band ( struct bladerf * dev , bladerf_channel ch , bladerf_frequency frequency ); fcns.thunkname{fcnNum}=['int32voidPtrint32' u64_type 'Thunk'];fcns.name{fcnNum}='bladerf_select_band'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', u64_type};fcnNum=fcnNum+1; % int bladerf_set_frequency ( struct bladerf * dev , bladerf_channel ch , bladerf_frequency frequency ); fcns.thunkname{fcnNum}=['int32voidPtrint32' u64_type 'Thunk'];fcns.name{fcnNum}='bladerf_set_frequency'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', u64_type};fcnNum=fcnNum+1; % int bladerf_schedule_retune ( struct bladerf * dev , bladerf_channel ch , bladerf_timestamp timestamp , bladerf_frequency frequency , struct bladerf_quick_tune * quick_tune ); fcns.thunkname{fcnNum}=['int32voidPtrint32' u64_type u64_type 'voidPtrThunk'];fcns.name{fcnNum}='bladerf_schedule_retune'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', u64_type, u64_type, 'voidPtr'};fcnNum=fcnNum+1; % int bladerf_cancel_scheduled_retunes ( struct bladerf * dev , bladerf_channel ch ); fcns.thunkname{fcnNum}='int32voidPtrint32Thunk';fcns.name{fcnNum}='bladerf_cancel_scheduled_retunes'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel'};fcnNum=fcnNum+1; % int bladerf_get_frequency ( struct bladerf * dev , bladerf_channel ch , bladerf_frequency * frequency ); fcns.thunkname{fcnNum}='int32voidPtrint32voidPtrThunk';fcns.name{fcnNum}='bladerf_get_frequency'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', [u64_type 'Ptr'] };fcnNum=fcnNum+1; % int bladerf_get_quick_tune ( struct bladerf * dev , bladerf_channel ch , struct bladerf_quick_tune * quick_tune ); fcns.thunkname{fcnNum}='int32voidPtrint32voidPtrThunk';fcns.name{fcnNum}='bladerf_get_quick_tune'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', 'voidPtr'};fcnNum=fcnNum+1; % int bladerf_set_tuning_mode ( struct bladerf * dev , bladerf_tuning_mode mode ); fcns.thunkname{fcnNum}='int32voidPtrbladerf_tuning_modeThunk';fcns.name{fcnNum}='bladerf_set_tuning_mode'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_tuning_mode'};fcnNum=fcnNum+1; % int bladerf_set_loopback ( struct bladerf * dev , bladerf_loopback lb ); fcns.thunkname{fcnNum}='int32voidPtrbladerf_loopbackThunk';fcns.name{fcnNum}='bladerf_set_loopback'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_loopback'};fcnNum=fcnNum+1; % int bladerf_get_loopback ( struct bladerf * dev , bladerf_loopback * lb ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_get_loopback'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_loopbackPtr'};fcnNum=fcnNum+1; % int bladerf_set_smb_mode ( struct bladerf * dev , bladerf_smb_mode mode ); fcns.thunkname{fcnNum}='int32voidPtrbladerf_smb_modeThunk';fcns.name{fcnNum}='bladerf_set_smb_mode'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_smb_mode'};fcnNum=fcnNum+1; % int bladerf_get_smb_mode ( struct bladerf * dev , bladerf_smb_mode * mode ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_get_smb_mode'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_smb_modePtr'};fcnNum=fcnNum+1; % int bladerf_set_rational_smb_frequency ( struct bladerf * dev , struct bladerf_rational_rate * rate , struct bladerf_rational_rate * actual ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_set_rational_smb_frequency'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_rational_ratePtr', 'bladerf_rational_ratePtr'};fcnNum=fcnNum+1; % int bladerf_set_smb_frequency ( struct bladerf * dev , uint32_t rate , uint32_t * actual ); fcns.thunkname{fcnNum}='int32voidPtruint32voidPtrThunk';fcns.name{fcnNum}='bladerf_set_smb_frequency'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'uint32', 'uint32Ptr'};fcnNum=fcnNum+1; % int bladerf_get_rational_smb_frequency ( struct bladerf * dev , struct bladerf_rational_rate * rate ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_get_rational_smb_frequency'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_rational_ratePtr'};fcnNum=fcnNum+1; % int bladerf_get_smb_frequency ( struct bladerf * dev , unsigned int * rate ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_get_smb_frequency'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'uint32Ptr'};fcnNum=fcnNum+1; % int bladerf_trigger_init ( struct bladerf * dev , bladerf_channel ch , bladerf_trigger_signal signal , struct bladerf_trigger * trigger ); fcns.thunkname{fcnNum}='int32voidPtrint32bladerf_trigger_signalvoidPtrThunk';fcns.name{fcnNum}='bladerf_trigger_init'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', 'bladerf_trigger_signal', 'bladerf_triggerPtr'};fcnNum=fcnNum+1; % int bladerf_trigger_arm ( struct bladerf * dev , const struct bladerf_trigger * trigger , _Bool arm , uint64_t resv1 , uint64_t resv2 ); fcns.thunkname{fcnNum}=['int32voidPtrvoidPtr_Bool' u64_type u64_type 'Thunk'];fcns.name{fcnNum}='bladerf_trigger_arm'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_triggerPtr', 'bool', u64_type, u64_type};fcnNum=fcnNum+1; % int bladerf_trigger_fire ( struct bladerf * dev , const struct bladerf_trigger * trigger ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_trigger_fire'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_triggerPtr'};fcnNum=fcnNum+1; % int bladerf_trigger_state ( struct bladerf * dev , const struct bladerf_trigger * trigger , _Bool * is_armed , _Bool * has_fired , _Bool * fire_requested , uint64_t * resv1 , uint64_t * resv2 ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrvoidPtrvoidPtrvoidPtrvoidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_trigger_state'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_triggerPtr', 'boolPtr', 'boolPtr', 'boolPtr', [u64_type 'Ptr'], [u64_type 'Ptr']};fcnNum=fcnNum+1; % int bladerf_set_correction ( struct bladerf * dev , bladerf_channel ch , bladerf_correction corr , bladerf_correction_value value ); fcns.thunkname{fcnNum}='int32voidPtrint32bladerf_correctionint16Thunk';fcns.name{fcnNum}='bladerf_set_correction'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', 'bladerf_correction', 'int16'};fcnNum=fcnNum+1; % int bladerf_get_correction ( struct bladerf * dev , bladerf_channel ch , bladerf_correction corr , bladerf_correction_value * value ); fcns.thunkname{fcnNum}='int32voidPtrint32bladerf_correctionvoidPtrThunk';fcns.name{fcnNum}='bladerf_get_correction'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', 'bladerf_correction', 'int16Ptr'};fcnNum=fcnNum+1; % int bladerf_set_vctcxo_tamer_mode ( struct bladerf * dev , bladerf_vctcxo_tamer_mode mode ); fcns.thunkname{fcnNum}='int32voidPtrbladerf_vctcxo_tamer_modeThunk';fcns.name{fcnNum}='bladerf_set_vctcxo_tamer_mode'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_vctcxo_tamer_mode'};fcnNum=fcnNum+1; % int bladerf_get_vctcxo_tamer_mode ( struct bladerf * dev , bladerf_vctcxo_tamer_mode * mode ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_get_vctcxo_tamer_mode'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_vctcxo_tamer_modePtr'};fcnNum=fcnNum+1; % int bladerf_dac_write ( struct bladerf * dev , uint16_t val ); fcns.thunkname{fcnNum}='int32voidPtruint16Thunk';fcns.name{fcnNum}='bladerf_dac_write'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'uint16'};fcnNum=fcnNum+1; % int bladerf_dac_read ( struct bladerf * dev , uint16_t * val ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_dac_read'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'uint16Ptr'};fcnNum=fcnNum+1; % int bladerf_expansion_attach ( struct bladerf * dev , bladerf_xb xb ); fcns.thunkname{fcnNum}='int32voidPtrbladerf_xbThunk';fcns.name{fcnNum}='bladerf_expansion_attach'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_xb'};fcnNum=fcnNum+1; % int bladerf_expansion_get_attached ( struct bladerf * dev , bladerf_xb * xb ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_expansion_get_attached'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_xbPtr'};fcnNum=fcnNum+1; % int bladerf_xb200_set_filterbank ( struct bladerf * dev , bladerf_channel ch , bladerf_xb200_filter filter ); fcns.thunkname{fcnNum}='int32voidPtrint32bladerf_xb200_filterThunk';fcns.name{fcnNum}='bladerf_xb200_set_filterbank'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', 'bladerf_xb200_filter'};fcnNum=fcnNum+1; % int bladerf_xb200_get_filterbank ( struct bladerf * dev , bladerf_channel ch , bladerf_xb200_filter * filter ); fcns.thunkname{fcnNum}='int32voidPtrint32voidPtrThunk';fcns.name{fcnNum}='bladerf_xb200_get_filterbank'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', 'bladerf_xb200_filterPtr'};fcnNum=fcnNum+1; % int bladerf_xb200_set_path ( struct bladerf * dev , bladerf_channel ch , bladerf_xb200_path path ); fcns.thunkname{fcnNum}='int32voidPtrint32bladerf_xb200_pathThunk';fcns.name{fcnNum}='bladerf_xb200_set_path'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', 'bladerf_xb200_path'};fcnNum=fcnNum+1; % int bladerf_xb200_get_path ( struct bladerf * dev , bladerf_channel ch , bladerf_xb200_path * path ); fcns.thunkname{fcnNum}='int32voidPtrint32voidPtrThunk';fcns.name{fcnNum}='bladerf_xb200_get_path'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', 'bladerf_xb200_pathPtr'};fcnNum=fcnNum+1; % int bladerf_xb300_set_trx ( struct bladerf * dev , bladerf_xb300_trx trx ); fcns.thunkname{fcnNum}='int32voidPtrbladerf_xb300_trxThunk';fcns.name{fcnNum}='bladerf_xb300_set_trx'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_xb300_trx'};fcnNum=fcnNum+1; % int bladerf_xb300_get_trx ( struct bladerf * dev , bladerf_xb300_trx * trx ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_xb300_get_trx'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_xb300_trxPtr'};fcnNum=fcnNum+1; % int bladerf_xb300_set_amplifier_enable ( struct bladerf * dev , bladerf_xb300_amplifier amp , _Bool enable ); fcns.thunkname{fcnNum}='int32voidPtrbladerf_xb300_amplifier_BoolThunk';fcns.name{fcnNum}='bladerf_xb300_set_amplifier_enable'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_xb300_amplifier', 'bool'};fcnNum=fcnNum+1; % int bladerf_xb300_get_amplifier_enable ( struct bladerf * dev , bladerf_xb300_amplifier amp , _Bool * enable ); fcns.thunkname{fcnNum}='int32voidPtrbladerf_xb300_amplifiervoidPtrThunk';fcns.name{fcnNum}='bladerf_xb300_get_amplifier_enable'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_xb300_amplifier', 'boolPtr'};fcnNum=fcnNum+1; % int bladerf_xb300_get_output_power ( struct bladerf * dev , float * val ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_xb300_get_output_power'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'singlePtr'};fcnNum=fcnNum+1; % int bladerf_expansion_gpio_read ( struct bladerf * dev , uint32_t * val ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_expansion_gpio_read'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'uint32Ptr'};fcnNum=fcnNum+1; % int bladerf_expansion_gpio_write ( struct bladerf * dev , uint32_t val ); fcns.thunkname{fcnNum}='int32voidPtruint32Thunk';fcns.name{fcnNum}='bladerf_expansion_gpio_write'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'uint32'};fcnNum=fcnNum+1; % int bladerf_expansion_gpio_masked_write ( struct bladerf * dev , uint32_t mask , uint32_t value ); fcns.thunkname{fcnNum}='int32voidPtruint32uint32Thunk';fcns.name{fcnNum}='bladerf_expansion_gpio_masked_write'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'uint32', 'uint32'};fcnNum=fcnNum+1; % int bladerf_expansion_gpio_dir_read ( struct bladerf * dev , uint32_t * outputs ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_expansion_gpio_dir_read'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'uint32Ptr'};fcnNum=fcnNum+1; % int bladerf_expansion_gpio_dir_write ( struct bladerf * dev , uint32_t outputs ); fcns.thunkname{fcnNum}='int32voidPtruint32Thunk';fcns.name{fcnNum}='bladerf_expansion_gpio_dir_write'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'uint32'};fcnNum=fcnNum+1; % int bladerf_expansion_gpio_dir_masked_write ( struct bladerf * dev , uint32_t mask , uint32_t outputs ); fcns.thunkname{fcnNum}='int32voidPtruint32uint32Thunk';fcns.name{fcnNum}='bladerf_expansion_gpio_dir_masked_write'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'uint32', 'uint32'};fcnNum=fcnNum+1; % const char * bladerf_backend_str ( bladerf_backend backend ); fcns.thunkname{fcnNum}='cstringbladerf_backendThunk';fcns.name{fcnNum}='bladerf_backend_str'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='cstring'; fcns.RHS{fcnNum}={'bladerf_backend'};fcnNum=fcnNum+1; % void bladerf_version ( struct bladerf_version * version ); fcns.thunkname{fcnNum}='voidvoidPtrThunk';fcns.name{fcnNum}='bladerf_version'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}=[]; fcns.RHS{fcnNum}={'bladerf_versionPtr'};fcnNum=fcnNum+1; % void bladerf_log_set_verbosity ( bladerf_log_level level ); fcns.thunkname{fcnNum}='voidbladerf_log_levelThunk';fcns.name{fcnNum}='bladerf_log_set_verbosity'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}=[]; fcns.RHS{fcnNum}={'bladerf_log_level'};fcnNum=fcnNum+1; % int bladerf_get_fw_log ( struct bladerf * dev , const char * filename ); fcns.thunkname{fcnNum}='int32voidPtrcstringThunk';fcns.name{fcnNum}='bladerf_get_fw_log'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'cstring'};fcnNum=fcnNum+1; % int bladerf_get_timestamp ( struct bladerf * dev , bladerf_direction dir , bladerf_timestamp * timestamp ); fcns.thunkname{fcnNum}='int32voidPtrbladerf_directionvoidPtrThunk';fcns.name{fcnNum}='bladerf_get_timestamp'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_direction', [u64_type 'Ptr']};fcnNum=fcnNum+1; % int bladerf_init_stream ( struct bladerf_stream ** stream , struct bladerf * dev , bladerf_stream_cb callback , void *** buffers , size_t num_buffers , bladerf_format format , size_t samples_per_buffer , size_t num_transfers , void * user_data ); % NOTE: Matlab does not support FcnPtr or voidPtrPtrPtr (last checked: R2017b) %fcns.thunkname{fcnNum}=['int32voidPtrvoidPtrvoidPtrvoidPtr' u64_type 'bladerf_format' u64_type u64_type 'voidPtrThunk'];fcns.name{fcnNum}='bladerf_init_stream'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerf_streamPtrPtr', 'bladerfPtr', 'FcnPtr', 'voidPtrPtrPtr', u64_type, 'bladerf_format', u64_type, u64_type, 'voidPtr'};fcnNum=fcnNum+1; % int bladerf_stream ( struct bladerf_stream * stream , bladerf_channel_layout layout ); % NOTE: cannot bladerf_init_stream, so this function is unusable %fcns.thunkname{fcnNum}='int32voidPtrbladerf_channel_layoutThunk';fcns.name{fcnNum}='bladerf_stream'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerf_streamPtr', 'bladerf_channel'};fcnNum=fcnNum+1; % int bladerf_submit_stream_buffer ( struct bladerf_stream * stream , void * buffer , unsigned int timeout_ms ); % NOTE: cannot bladerf_init_stream, so this function is unusable %fcns.thunkname{fcnNum}='int32voidPtrvoidPtruint32Thunk';fcns.name{fcnNum}='bladerf_submit_stream_buffer'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerf_streamPtr', 'voidPtr', 'uint32'};fcnNum=fcnNum+1; % int bladerf_submit_stream_buffer_nb ( struct bladerf_stream * stream , void * buffer ); % NOTE: cannot bladerf_init_stream, so this function is unusable %fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_submit_stream_buffer_nb'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerf_streamPtr', 'voidPtr'};fcnNum=fcnNum+1; % void bladerf_deinit_stream ( struct bladerf_stream * stream ); % NOTE: cannot bladerf_init_stream, so this function is unusable %fcns.thunkname{fcnNum}='voidvoidPtrThunk';fcns.name{fcnNum}='bladerf_deinit_stream'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}=[]; fcns.RHS{fcnNum}={'bladerf_streamPtr'};fcnNum=fcnNum+1; % int bladerf_set_stream_timeout ( struct bladerf * dev , bladerf_direction dir , unsigned int timeout ); fcns.thunkname{fcnNum}='int32voidPtrbladerf_directionuint32Thunk';fcns.name{fcnNum}='bladerf_set_stream_timeout'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_direction', 'uint32'};fcnNum=fcnNum+1; % int bladerf_get_stream_timeout ( struct bladerf * dev , bladerf_direction dir , unsigned int * timeout ); fcns.thunkname{fcnNum}='int32voidPtrbladerf_directionvoidPtrThunk';fcns.name{fcnNum}='bladerf_get_stream_timeout'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_direction', 'uint32Ptr'};fcnNum=fcnNum+1; % int bladerf_sync_config ( struct bladerf * dev , bladerf_channel_layout layout , bladerf_format format , unsigned int num_buffers , unsigned int buffer_size , unsigned int num_transfers , unsigned int stream_timeout ); fcns.thunkname{fcnNum}='int32voidPtrbladerf_channel_layoutbladerf_formatuint32uint32uint32uint32Thunk';fcns.name{fcnNum}='bladerf_sync_config'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', 'bladerf_format', 'uint32', 'uint32', 'uint32', 'uint32'};fcnNum=fcnNum+1; % int bladerf_sync_tx ( struct bladerf * dev , const void * samples , unsigned int num_samples , struct bladerf_metadata * metadata , unsigned int timeout_ms ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtruint32voidPtruint32Thunk';fcns.name{fcnNum}='bladerf_sync_tx'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'voidPtr', 'uint32', 'bladerf_metadataPtr', 'uint32'};fcnNum=fcnNum+1; % int bladerf_sync_rx ( struct bladerf * dev , void * samples , unsigned int num_samples , struct bladerf_metadata * metadata , unsigned int timeout_ms ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtruint32voidPtruint32Thunk';fcns.name{fcnNum}='bladerf_sync_rx'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'voidPtr', 'uint32', 'bladerf_metadataPtr', 'uint32'};fcnNum=fcnNum+1; % int bladerf_flash_firmware ( struct bladerf * dev , const char * firmware ); fcns.thunkname{fcnNum}='int32voidPtrcstringThunk';fcns.name{fcnNum}='bladerf_flash_firmware'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'cstring'};fcnNum=fcnNum+1; % int bladerf_load_fpga ( struct bladerf * dev , const char * fpga ); fcns.thunkname{fcnNum}='int32voidPtrcstringThunk';fcns.name{fcnNum}='bladerf_load_fpga'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'cstring'};fcnNum=fcnNum+1; % int bladerf_flash_fpga ( struct bladerf * dev , const char * fpga_image ); fcns.thunkname{fcnNum}='int32voidPtrcstringThunk';fcns.name{fcnNum}='bladerf_flash_fpga'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'cstring'};fcnNum=fcnNum+1; % int bladerf_erase_stored_fpga ( struct bladerf * dev ); fcns.thunkname{fcnNum}='int32voidPtrThunk';fcns.name{fcnNum}='bladerf_erase_stored_fpga'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr'};fcnNum=fcnNum+1; % int bladerf_device_reset ( struct bladerf * dev ); fcns.thunkname{fcnNum}='int32voidPtrThunk';fcns.name{fcnNum}='bladerf_device_reset'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr'};fcnNum=fcnNum+1; % int bladerf_jump_to_bootloader ( struct bladerf * dev ); fcns.thunkname{fcnNum}='int32voidPtrThunk';fcns.name{fcnNum}='bladerf_jump_to_bootloader'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr'};fcnNum=fcnNum+1; % int bladerf_get_bootloader_list ( struct bladerf_devinfo ** list ); fcns.thunkname{fcnNum}='int32voidPtrThunk';fcns.name{fcnNum}='bladerf_get_bootloader_list'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerf_devinfoPtrPtr'};fcnNum=fcnNum+1; % int bladerf_load_fw_from_bootloader ( const char * device_identifier , bladerf_backend backend , uint8_t bus , uint8_t addr , const char * file ); fcns.thunkname{fcnNum}='int32cstringbladerf_backenduint8uint8cstringThunk';fcns.name{fcnNum}='bladerf_load_fw_from_bootloader'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'cstring', 'bladerf_backend', 'uint8', 'uint8', 'cstring'};fcnNum=fcnNum+1; % struct bladerf_image * bladerf_alloc_image ( struct bladerf * dev , bladerf_image_type type , uint32_t address , uint32_t length ); fcns.thunkname{fcnNum}='voidPtrvoidPtrbladerf_image_typeuint32uint32Thunk';fcns.name{fcnNum}='bladerf_alloc_image'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='bladerf_imagePtr'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_image_type', 'uint32', 'uint32'};fcnNum=fcnNum+1; % struct bladerf_image * bladerf_alloc_cal_image ( struct bladerf * dev , bladerf_fpga_size fpga_size , uint16_t vctcxo_trim ); fcns.thunkname{fcnNum}='voidPtrvoidPtrbladerf_fpga_sizeuint16Thunk';fcns.name{fcnNum}='bladerf_alloc_cal_image'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='bladerf_imagePtr'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_fpga_size', 'uint16'};fcnNum=fcnNum+1; % void bladerf_free_image ( struct bladerf_image * image ); fcns.thunkname{fcnNum}='voidvoidPtrThunk';fcns.name{fcnNum}='bladerf_free_image'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}=[]; fcns.RHS{fcnNum}={'bladerf_imagePtr'};fcnNum=fcnNum+1; % int bladerf_image_write ( struct bladerf * dev , struct bladerf_image * image , const char * file ); fcns.thunkname{fcnNum}='int32voidPtrcstringThunk';fcns.name{fcnNum}='bladerf_image_write'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_imagePtr', 'cstring'};fcnNum=fcnNum+1; % int bladerf_image_read ( struct bladerf_image * image , const char * file ); fcns.thunkname{fcnNum}='int32voidPtrcstringThunk';fcns.name{fcnNum}='bladerf_image_read'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerf_imagePtr', 'cstring'};fcnNum=fcnNum+1; % int bladerf_si5338_read ( struct bladerf * dev , uint8_t address , uint8_t * val ); fcns.thunkname{fcnNum}='int32voidPtruint8voidPtrThunk';fcns.name{fcnNum}='bladerf_si5338_read'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'uint8', 'uint8Ptr'};fcnNum=fcnNum+1; % int bladerf_si5338_write ( struct bladerf * dev , uint8_t address , uint8_t val ); fcns.thunkname{fcnNum}='int32voidPtruint8uint8Thunk';fcns.name{fcnNum}='bladerf_si5338_write'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'uint8', 'uint8'};fcnNum=fcnNum+1; % int bladerf_lms_read ( struct bladerf * dev , uint8_t address , uint8_t * val ); fcns.thunkname{fcnNum}='int32voidPtruint8voidPtrThunk';fcns.name{fcnNum}='bladerf_lms_read'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'uint8', 'uint8Ptr'};fcnNum=fcnNum+1; % int bladerf_lms_write ( struct bladerf * dev , uint8_t address , uint8_t val ); fcns.thunkname{fcnNum}='int32voidPtruint8uint8Thunk';fcns.name{fcnNum}='bladerf_lms_write'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'uint8', 'uint8'};fcnNum=fcnNum+1; % int bladerf_lms_set_dc_cals ( struct bladerf * dev , const struct bladerf_lms_dc_cals * dc_cals ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_lms_set_dc_cals'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_lms_dc_calsPtr'};fcnNum=fcnNum+1; % int bladerf_lms_get_dc_cals ( struct bladerf * dev , struct bladerf_lms_dc_cals * dc_cals ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_lms_get_dc_cals'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_lms_dc_calsPtr'};fcnNum=fcnNum+1; % int bladerf_config_gpio_read ( struct bladerf * dev , uint32_t * val ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_config_gpio_read'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'uint32Ptr'};fcnNum=fcnNum+1; % int bladerf_config_gpio_write ( struct bladerf * dev , uint32_t val ); fcns.thunkname{fcnNum}='int32voidPtruint32Thunk';fcns.name{fcnNum}='bladerf_config_gpio_write'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'uint32'};fcnNum=fcnNum+1; % int bladerf_xb_spi_write ( struct bladerf * dev , uint32_t val ); fcns.thunkname{fcnNum}='int32voidPtruint32Thunk';fcns.name{fcnNum}='bladerf_xb_spi_write'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'uint32'};fcnNum=fcnNum+1; % int bladerf_calibrate_dc ( struct bladerf * dev , bladerf_cal_module module ); fcns.thunkname{fcnNum}='int32voidPtrbladerf_cal_moduleThunk';fcns.name{fcnNum}='bladerf_calibrate_dc'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_cal_module'};fcnNum=fcnNum+1; % int bladerf_read_trigger ( struct bladerf * dev , bladerf_channel ch , bladerf_trigger_signal signal , uint8_t * val ); fcns.thunkname{fcnNum}='int32voidPtrint32bladerf_trigger_signalvoidPtrThunk';fcns.name{fcnNum}='bladerf_read_trigger'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', 'bladerf_trigger_signal', 'uint8Ptr'};fcnNum=fcnNum+1; % int bladerf_write_trigger ( struct bladerf * dev , bladerf_channel ch , bladerf_trigger_signal signal , uint8_t val ); fcns.thunkname{fcnNum}='int32voidPtrint32bladerf_trigger_signaluint8Thunk';fcns.name{fcnNum}='bladerf_write_trigger'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', 'bladerf_trigger_signal', 'uint8'};fcnNum=fcnNum+1; % int bladerf_erase_flash ( struct bladerf * dev , uint32_t erase_block , uint32_t count ); fcns.thunkname{fcnNum}='int32voidPtruint32uint32Thunk';fcns.name{fcnNum}='bladerf_erase_flash'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'uint32', 'uint32'};fcnNum=fcnNum+1; % int bladerf_read_flash ( struct bladerf * dev , uint8_t * buf , uint32_t page , uint32_t count ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtruint32uint32Thunk';fcns.name{fcnNum}='bladerf_read_flash'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'uint8Ptr', 'uint32', 'uint32'};fcnNum=fcnNum+1; % int bladerf_write_flash ( struct bladerf * dev , const uint8_t * buf , uint32_t page , uint32_t count ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtruint32uint32Thunk';fcns.name{fcnNum}='bladerf_write_flash'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'uint8Ptr', 'uint32', 'uint32'};fcnNum=fcnNum+1; % const char * bladerf_strerror ( int error ); fcns.thunkname{fcnNum}='cstringint32Thunk';fcns.name{fcnNum}='bladerf_strerror'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='cstring'; fcns.RHS{fcnNum}={'int32'};fcnNum=fcnNum+1; % const char * bladerf_get_board_name ( struct bladerf * dev ); fcns.thunkname{fcnNum}='cstringvoidPtrThunk';fcns.name{fcnNum}='bladerf_get_board_name'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='cstring'; fcns.RHS{fcnNum}={'bladerfPtr'};fcnNum=fcnNum+1; % size_t bladerf_get_channel_count ( struct bladerf * dev , bladerf_direction dir ); fcns.thunkname{fcnNum}=[ u64_type 'voidPtrbladerf_directionThunk'];fcns.name{fcnNum}='bladerf_get_channel_count'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}=u64_type; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_direction'};fcnNum=fcnNum+1; % int bladerf_get_gain ( struct bladerf * dev , bladerf_channel ch , bladerf_gain * gain ); fcns.thunkname{fcnNum}='int32voidPtrint32voidPtrThunk';fcns.name{fcnNum}='bladerf_get_gain'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', 'int32Ptr'};fcnNum=fcnNum+1; % int bladerf_get_gain_modes ( struct bladerf * dev , bladerf_channel ch , const struct bladerf_gain_modes ** modes ); fcns.thunkname{fcnNum}='int32voidPtrint32voidPtrThunk';fcns.name{fcnNum}='bladerf_get_gain_modes'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', 'bladerf_gain_modesPtrPtr'};fcnNum=fcnNum+1; % int bladerf_get_gain_range ( struct bladerf * dev , bladerf_channel ch , const struct bladerf_range ** range ); fcns.thunkname{fcnNum}='int32voidPtrint32voidPtrThunk';fcns.name{fcnNum}='bladerf_get_gain_range'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', 'bladerf_rangePtrPtr'};fcnNum=fcnNum+1; % int bladerf_set_gain_stage ( struct bladerf * dev , bladerf_channel ch , const char * stage , bladerf_gain gain ); fcns.thunkname{fcnNum}='int32voidPtrint32cstringint32Thunk';fcns.name{fcnNum}='bladerf_set_gain_stage'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', 'cstring', 'int32'};fcnNum=fcnNum+1; % int bladerf_get_gain_stage ( struct bladerf * dev , bladerf_channel ch , const char * stage , bladerf_gain * gain ); fcns.thunkname{fcnNum}='int32voidPtrint32cstringvoidPtrThunk';fcns.name{fcnNum}='bladerf_get_gain_stage'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', 'cstring', 'int32Ptr'};fcnNum=fcnNum+1; % int bladerf_get_gain_stage_range ( struct bladerf * dev , bladerf_channel ch , const char * stage , const struct bladerf_range ** range ); fcns.thunkname{fcnNum}='int32voidPtrint32cstringvoidPtrThunk';fcns.name{fcnNum}='bladerf_get_gain_stage_range'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', 'cstring', 'bladerf_rangePtrPtr'};fcnNum=fcnNum+1; % int bladerf_get_gain_stages ( struct bladerf * dev , bladerf_channel ch , const char ** stages , size_t count ); fcns.thunkname{fcnNum}=['int32voidPtrint32voidPtr' u64_type 'Thunk'];fcns.name{fcnNum}='bladerf_get_gain_stages'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', 'stringPtrPtr', u64_type};fcnNum=fcnNum+1; % int bladerf_get_sample_rate_range ( struct bladerf * dev , bladerf_channel ch , const struct bladerf_range ** range ); fcns.thunkname{fcnNum}='int32voidPtrint32voidPtrThunk';fcns.name{fcnNum}='bladerf_get_sample_rate_range'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', 'bladerf_rangePtrPtr'};fcnNum=fcnNum+1; % int bladerf_get_bandwidth_range ( struct bladerf * dev , bladerf_channel ch , const struct bladerf_range ** range ); fcns.thunkname{fcnNum}='int32voidPtrint32voidPtrThunk';fcns.name{fcnNum}='bladerf_get_bandwidth_range'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', 'bladerf_rangePtrPtr'};fcnNum=fcnNum+1; % int bladerf_get_frequency_range ( struct bladerf * dev , bladerf_channel ch , const struct bladerf_range ** range ); fcns.thunkname{fcnNum}='int32voidPtrint32voidPtrThunk';fcns.name{fcnNum}='bladerf_get_frequency_range'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', 'bladerf_rangePtrPtr'};fcnNum=fcnNum+1; % int bladerf_set_rf_port ( struct bladerf * dev , bladerf_channel ch , const char * port ); fcns.thunkname{fcnNum}='int32voidPtrint32cstringThunk';fcns.name{fcnNum}='bladerf_set_rf_port'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', 'cstring'};fcnNum=fcnNum+1; % int bladerf_get_rf_port ( struct bladerf * dev , bladerf_channel ch , const char ** port ); fcns.thunkname{fcnNum}='int32voidPtrint32voidPtrThunk';fcns.name{fcnNum}='bladerf_get_rf_port'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', 'stringPtrPtr'};fcnNum=fcnNum+1; % int bladerf_get_rf_ports ( struct bladerf * dev , bladerf_channel ch , const char ** ports , unsigned int count ); fcns.thunkname{fcnNum}='int32voidPtrint32voidPtruint32Thunk';fcns.name{fcnNum}='bladerf_get_rf_ports'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', 'stringPtrPtr', 'uint32'};fcnNum=fcnNum+1; % int bladerf_get_loopback_modes ( struct bladerf * dev , const struct bladerf_loopback_modes ** modes ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_get_loopback_modes'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_loopback_modesPtrPtr'};fcnNum=fcnNum+1; % _Bool bladerf_is_loopback_mode_supported ( struct bladerf * dev , bladerf_loopback mode ); fcns.thunkname{fcnNum}='_BoolvoidPtrbladerf_loopbackThunk';fcns.name{fcnNum}='bladerf_is_loopback_mode_supported'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='bool'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_loopback'};fcnNum=fcnNum+1; % int bladerf_interleave_stream_buffer ( bladerf_channel_layout layout , bladerf_format format , unsigned int buffer_size , void * samples ); fcns.thunkname{fcnNum}='int32bladerf_channel_layoutbladerf_formatuint32voidPtrThunk';fcns.name{fcnNum}='bladerf_interleave_stream_buffer'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerf_channel', 'bladerf_format', 'uint32', 'voidPtr'};fcnNum=fcnNum+1; % int bladerf_deinterleave_stream_buffer ( bladerf_channel_layout layout , bladerf_format format , unsigned int buffer_size , void * samples ); fcns.thunkname{fcnNum}='int32bladerf_channel_layoutbladerf_formatuint32voidPtrThunk';fcns.name{fcnNum}='bladerf_deinterleave_stream_buffer'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerf_channel', 'bladerf_format', 'uint32', 'voidPtr'};fcnNum=fcnNum+1; % int bladerf_trim_dac_write ( struct bladerf * dev , uint16_t val ); fcns.thunkname{fcnNum}='int32voidPtruint16Thunk';fcns.name{fcnNum}='bladerf_trim_dac_write'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'uint16'};fcnNum=fcnNum+1; % int bladerf_trim_dac_read ( struct bladerf * dev , uint16_t * val ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_trim_dac_read'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'uint16Ptr'};fcnNum=fcnNum+1; % int bladerf_get_tuning_mode ( struct bladerf * dev , bladerf_tuning_mode * mode ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_get_tuning_mode'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_tuning_modePtr'};fcnNum=fcnNum+1; % int bladerf_get_bias_tee ( struct bladerf * dev , bladerf_channel ch , _Bool * enable ); fcns.thunkname{fcnNum}='int32voidPtrint32voidPtrThunk';fcns.name{fcnNum}='bladerf_get_bias_tee'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', 'boolPtr'};fcnNum=fcnNum+1; % int bladerf_set_bias_tee ( struct bladerf * dev , bladerf_channel ch , _Bool enable ); fcns.thunkname{fcnNum}='int32voidPtrint32_BoolThunk';fcns.name{fcnNum}='bladerf_set_bias_tee'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', 'bool'};fcnNum=fcnNum+1; % int bladerf_get_rfic_register ( struct bladerf * dev , uint16_t address , uint8_t * val ); fcns.thunkname{fcnNum}='int32voidPtruint16voidPtrThunk';fcns.name{fcnNum}='bladerf_get_rfic_register'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'uint16', 'uint8Ptr'};fcnNum=fcnNum+1; % int bladerf_set_rfic_register ( struct bladerf * dev , uint16_t address , uint8_t val ); fcns.thunkname{fcnNum}='int32voidPtruint16uint8Thunk';fcns.name{fcnNum}='bladerf_set_rfic_register'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'uint16', 'uint8'};fcnNum=fcnNum+1; % int bladerf_get_rfic_temperature ( struct bladerf * dev , float * val ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_get_rfic_temperature'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'singlePtr'};fcnNum=fcnNum+1; % int bladerf_get_rfic_rssi ( struct bladerf * dev , bladerf_channel ch , int32_t * pre_rssi , int32_t * sym_rssi ); fcns.thunkname{fcnNum}='int32voidPtrint32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_get_rfic_rssi'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_channel', 'int32Ptr', 'int32Ptr'};fcnNum=fcnNum+1; % int bladerf_get_rfic_ctrl_out ( struct bladerf * dev , uint8_t * ctrl_out ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_get_rfic_ctrl_out'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'uint8Ptr'};fcnNum=fcnNum+1; % int bladerf_get_pll_lock_state ( struct bladerf * dev , _Bool * locked ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_get_pll_lock_state'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'boolPtr'};fcnNum=fcnNum+1; % int bladerf_get_pll_enable ( struct bladerf * dev , _Bool * enabled ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_get_pll_enable'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'boolPtr'};fcnNum=fcnNum+1; % int bladerf_set_pll_enable ( struct bladerf * dev , _Bool enable ); fcns.thunkname{fcnNum}='int32voidPtr_BoolThunk';fcns.name{fcnNum}='bladerf_set_pll_enable'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bool'};fcnNum=fcnNum+1; % int bladerf_get_pll_refclk_range ( struct bladerf * dev , const struct bladerf_range ** range ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_get_pll_refclk_range'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_rangePtrPtr'};fcnNum=fcnNum+1; % int bladerf_get_pll_refclk ( struct bladerf * dev , uint64_t * frequency ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_get_pll_refclk'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', [ u64_type 'Ptr']};fcnNum=fcnNum+1; % int bladerf_set_pll_refclk ( struct bladerf * dev , uint64_t frequency ); fcns.thunkname{fcnNum}=['int32voidPtr' u64_type 'Thunk'];fcns.name{fcnNum}='bladerf_set_pll_refclk'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', u64_type };fcnNum=fcnNum+1; % int bladerf_get_pll_register ( struct bladerf * dev , uint8_t address , uint32_t * val ); fcns.thunkname{fcnNum}='int32voidPtruint8voidPtrThunk';fcns.name{fcnNum}='bladerf_get_pll_register'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'uint8', 'uint32Ptr'};fcnNum=fcnNum+1; % int bladerf_set_pll_register ( struct bladerf * dev , uint8_t address , uint32_t val ); fcns.thunkname{fcnNum}='int32voidPtruint8uint32Thunk';fcns.name{fcnNum}='bladerf_set_pll_register'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'uint8', 'uint32'};fcnNum=fcnNum+1; % int bladerf_get_power_source ( struct bladerf * dev , bladerf_power_sources * val ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_get_power_source'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_power_sourcesPtr'};fcnNum=fcnNum+1; % int bladerf_get_clock_select ( struct bladerf * dev , bladerf_clock_select * sel ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_get_clock_select'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_clock_selectPtr'};fcnNum=fcnNum+1; % int bladerf_set_clock_select ( struct bladerf * dev , bladerf_clock_select sel ); fcns.thunkname{fcnNum}='int32voidPtrbladerf_clock_selectThunk';fcns.name{fcnNum}='bladerf_set_clock_select'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_clock_select'};fcnNum=fcnNum+1; % int bladerf_get_clock_output ( struct bladerf * dev , _Bool * state ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_get_clock_output'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'boolPtr'};fcnNum=fcnNum+1; % int bladerf_set_clock_output ( struct bladerf * dev , _Bool enable ); fcns.thunkname{fcnNum}='int32voidPtr_BoolThunk';fcns.name{fcnNum}='bladerf_set_clock_output'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bool'};fcnNum=fcnNum+1; % int bladerf_get_pmic_register ( struct bladerf * dev , bladerf_pmic_register reg , void * val ); fcns.thunkname{fcnNum}='int32voidPtrbladerf_pmic_registervoidPtrThunk';fcns.name{fcnNum}='bladerf_get_pmic_register'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_pmic_register', 'singlePtr'};fcnNum=fcnNum+1; % int bladerf_get_rf_switch_config ( struct bladerf * dev , bladerf_rf_switch_config * config ); fcns.thunkname{fcnNum}='int32voidPtrvoidPtrThunk';fcns.name{fcnNum}='bladerf_get_rf_switch_config'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='int32'; fcns.RHS{fcnNum}={'bladerfPtr', 'bladerf_rf_switch_configPtr'};fcnNum=fcnNum+1; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Structures %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% structs.bladerf.members=struct(''); structs.bladerf_devinfo.members=struct('backend', 'bladerf_backend', ... 'serial', 'int8#33', ... 'usb_bus', 'uint8', ... 'usb_addr', 'uint8', ... 'instance', 'uint32', ... 'manufacturer', 'int8#33', ... 'product', 'int8#33'); structs.bladerf_version.members=struct('major', 'uint16', ... 'minor', 'uint16', ... 'patch', 'uint16', ... 'describe', 'cstring'); structs.bladerf_rational_rate.members=struct('integer', u64_type, ... 'num', u64_type, ... 'den', u64_type); structs.bladerf_quick_tune.members=struct('freqsel', 'uint8', ... 'vcocap', 'uint8', ... 'nint', 'uint16', ... 'nfrac', 'uint32', ... 'flags', 'uint8'); structs.bladerf_trigger.members=struct('channel', 'bladerf_channel', ... 'role', 'bladerf_trigger_role', ... 'signal', 'bladerf_trigger_signal', ... 'options', u64_type); structs.bladerf_metadata.members=struct('timestamp', u64_type, ... 'flags', 'uint32', ... 'status', 'uint32', ... 'actual_count', 'uint32', ... 'reserved', 'uint8#32'); % NOTE: cannot bladerf_init_stream, so this struct is unusable %structs.bladerf_stream.members=struct(''); structs.bladerf_image.members=struct('magic', 'int8#8', ... 'checksum', 'uint8#32', ... 'version', 'bladerf_version', ... 'timestamp', u64_type, ... 'serial', 'int8#34', ... 'reserved', 'int8#128', ... 'type', 'bladerf_image_type', ... 'address', 'uint32', ... 'length', 'uint32', ... 'data', 'uint8Ptr'); structs.bladerf_lms_dc_cals.members=struct('lpf_tuning', 'int16', ... 'tx_lpf_i', 'int16', ... 'tx_lpf_q', 'int16', ... 'rx_lpf_i', 'int16', ... 'rx_lpf_q', 'int16', ... 'dc_ref', 'int16', ... 'rxvga2a_i', 'int16', ... 'rxvga2a_q', 'int16', ... 'rxvga2b_i', 'int16', ... 'rxvga2b_q', 'int16'); structs.bladerf_range.members=struct('min', 'int64', ... 'max', 'int64', ... 'step', 'int64', ... 'scale', 'single'); structs.bladerf_gain_modes.members=struct('name', 'cstring', ... 'mode', 'bladerf_gain_mode'); structs.bladerf_loopback_modes.members=struct('name', 'cstring', ... 'mode', 'bladerf_loopback'); structs.bladerf_rf_switch_config.members=struct('tx1_rfic_port', 'uint32', ... 'tx1_spdt_port', 'uint32', ... 'tx2_rfic_port', 'uint32', ... 'tx2_spdt_port', 'uint32', ... 'rx1_rfic_port', 'uint32', ... 'rx1_spdt_port', 'uint32', ... 'rx2_rfic_port', 'uint32', ... 'rx2_spdt_port', 'uint32'); % Workaround for MATLAB <= 2015b (64-bit) not identifying the size of the devinfo structure correctly structs.bladerf_devinfo.packing=4; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Enumerations %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% enuminfo.bladerf_lpf_mode=struct('BLADERF_LPF_NORMAL', 0, ... 'BLADERF_LPF_BYPASSED', 1, ... 'BLADERF_LPF_DISABLED', 2); enuminfo.bladerf_xb=struct('BLADERF_XB_NONE', 0, ... 'BLADERF_XB_100', 1, ... 'BLADERF_XB_200', 2, ... 'BLADERF_XB_300', 3); enuminfo.bladerf_sampling=struct('BLADERF_SAMPLING_UNKNOWN', 0, ... 'BLADERF_SAMPLING_INTERNAL', 1, ... 'BLADERF_SAMPLING_EXTERNAL', 2); enuminfo.bladerf_loopback=struct('BLADERF_LB_NONE', 0, ... 'BLADERF_LB_FIRMWARE', 1, ... 'BLADERF_LB_BB_TXLPF_RXVGA2', 2, ... 'BLADERF_LB_BB_TXVGA1_RXVGA2', 3, ... 'BLADERF_LB_BB_TXLPF_RXLPF', 4, ... 'BLADERF_LB_BB_TXVGA1_RXLPF', 5, ... 'BLADERF_LB_RF_LNA1', 6, ... 'BLADERF_LB_RF_LNA2', 7, ... 'BLADERF_LB_RF_LNA3', 8, ... 'BLADERF_LB_RFIC_BIST', 9); enuminfo.bladerf_log_level=struct('BLADERF_LOG_LEVEL_VERBOSE', 0, ... 'BLADERF_LOG_LEVEL_DEBUG', 1, ... 'BLADERF_LOG_LEVEL_INFO', 2, ... 'BLADERF_LOG_LEVEL_WARNING', 3, ... 'BLADERF_LOG_LEVEL_ERROR', 4, ... 'BLADERF_LOG_LEVEL_CRITICAL', 5, ... 'BLADERF_LOG_LEVEL_SILENT', 6); enuminfo.bladerf_gain_mode=struct('BLADERF_GAIN_DEFAULT', 0, ... 'BLADERF_GAIN_MGC', 1, ... 'BLADERF_GAIN_FASTATTACK_AGC', 2, ... 'BLADERF_GAIN_SLOWATTACK_AGC', 3, ... 'BLADERF_GAIN_HYBRID_AGC', 4); enuminfo.bladerf_format=struct('BLADERF_FORMAT_SC16_Q11', 0, ... 'BLADERF_FORMAT_SC16_Q11_META', 1); enuminfo.bladerf_xb200_filter=struct('BLADERF_XB200_50M', 0, ... 'BLADERF_XB200_144M', 1, ... 'BLADERF_XB200_222M', 2, ... 'BLADERF_XB200_CUSTOM', 3, ... 'BLADERF_XB200_AUTO_1DB', 4, ... 'BLADERF_XB200_AUTO_3DB', 5); enuminfo.bladerf_fpga_size=struct('BLADERF_FPGA_UNKNOWN', 0, ... 'BLADERF_FPGA_40KLE', 40, ... 'BLADERF_FPGA_115KLE', 115, ... 'BLADERF_FPGA_A4', 49, ... 'BLADERF_FPGA_A5', 77, ... 'BLADERF_FPGA_A9', 301); enuminfo.bladerf_xb300_trx=struct('BLADERF_XB300_TRX_INVAL', -1, ... 'BLADERF_XB300_TRX_TX', 0, ... 'BLADERF_XB300_TRX_RX', 1, ... 'BLADERF_XB300_TRX_UNSET', 2); enuminfo.bladerf_xb300_amplifier=struct('BLADERF_XB300_AMP_INVAL', -1, ... 'BLADERF_XB300_AMP_PA', 0, ... 'BLADERF_XB300_AMP_LNA', 1, ... 'BLADERF_XB300_AMP_PA_AUX', 2); enuminfo.bladerf_rx_mux=struct('BLADERF_RX_MUX_INVALID', -1, ... 'BLADERF_RX_MUX_BASEBAND', 0, ... 'BLADERF_RX_MUX_BASEBAND_LMS', 0, ... 'BLADERF_RX_MUX_12BIT_COUNTER', 1, ... 'BLADERF_RX_MUX_32BIT_COUNTER', 2, ... 'BLADERF_RX_MUX_DIGITAL_LOOPBACK', 4); % Value 3 is reserved for future use enuminfo.bladerf_dev_speed=struct('BLADERF_DEVICE_SPEED_UNKNOWN', 0, ... 'BLADERF_DEVICE_SPEED_HIGH', 1, ... 'BLADERF_DEVICE_SPEED_SUPER', 2); enuminfo.bladerf_smb_mode=struct('BLADERF_SMB_MODE_INVALID', -1, ... 'BLADERF_SMB_MODE_DISABLED', 0, ... 'BLADERF_SMB_MODE_OUTPUT', 1, ... 'BLADERF_SMB_MODE_INPUT', 2, ... 'BLADERF_SMB_MODE_UNAVAILBLE', 3); enuminfo.bladerf_tuning_mode=struct('BLADERF_TUNING_MODE_INVALID', -1, ... 'BLADERF_TUNING_MODE_HOST', 0, ... 'BLADERF_TUNING_MODE_FPGA', 1); enuminfo.bladerf_cal_module=struct('BLADERF_DC_CAL_INVALID', -1, ... 'BLADERF_DC_CAL_LPF_TUNING', 0, ... 'BLADERF_DC_CAL_TX_LPF', 1, ... 'BLADERF_DC_CAL_RX_LPF', 2, ... 'BLADERF_DC_CAL_RXVGA2', 3); enuminfo.bladerf_image_type=struct('BLADERF_IMAGE_TYPE_INVALID', -1, ... 'BLADERF_IMAGE_TYPE_RAW', 0, ... 'BLADERF_IMAGE_TYPE_FIRMWARE', 1, ... 'BLADERF_IMAGE_TYPE_FPGA_40KLE', 2, ... 'BLADERF_IMAGE_TYPE_FPGA_115KLE', 3, ... 'BLADERF_IMAGE_TYPE_CALIBRATION', 4, ... 'BLADERF_IMAGE_TYPE_RX_DC_CAL', 5, ... 'BLADERF_IMAGE_TYPE_TX_DC_CAL', 6, ... 'BLADERF_IMAGE_TYPE_RX_IQ_CAL', 7, ... 'BLADERF_IMAGE_TYPE_TX_IQ_CAL', 8); enuminfo.bladerf_backend=struct('BLADERF_BACKEND_ANY', 0, ... 'BLADERF_BACKEND_LINUX', 1, ... 'BLADERF_BACKEND_LIBUSB', 2, ... 'BLADERF_BACKEND_CYPRESS', 3, ... 'BLADERF_BACKEND_DUMMY', 100); enuminfo.bladerf_module=struct('BLADERF_MODULE_RX', 0, ... 'BLADERF_MODULE_TX', 1); enuminfo.bladerf_channel=struct('BLADERF_MODULE_RX', 0, ... 'BLADERF_CHANNEL_RX1', 0, ... 'BLADERF_CHANNEL_RX2', 2, ... 'BLADERF_MODULE_TX', 1, ... 'BLADERF_CHANNEL_TX1', 1, ... 'BLADERF_CHANNEL_TX2', 3); enuminfo.bladerf_vctcxo_tamer_mode=struct('BLADERF_VCTCXO_TAMER_INVALID', -1, ... 'BLADERF_VCTCXO_TAMER_DISABLED', 0, ... 'BLADERF_VCTCXO_TAMER_1_PPS', 1, ... 'BLADERF_VCTCXO_TAMER_10_MHZ', 2); enuminfo.bladerf_trigger_role=struct('BLADERF_TRIGGER_ROLE_INVALID', -1, ... 'BLADERF_TRIGGER_ROLE_DISABLED', 0, ... 'BLADERF_TRIGGER_ROLE_MASTER', 1, ... 'BLADERF_TRIGGER_ROLE_SLAVE', 2); enuminfo.bladerf_correction=struct('BLADERF_CORR_LMS_DCOFF_I', 0, ... 'BLADERF_CORR_DCOFF_I', 0, ... 'BLADERF_CORR_LMS_DCOFF_Q', 1, ... 'BLADERF_CORR_DCOFF_Q', 1, ... 'BLADERF_CORR_FPGA_PHASE', 2, ... 'BLADERF_CORR_PHASE', 2, ... 'BLADERF_CORR_FPGA_GAIN', 3, ... 'BLADERF_CORR_GAIN', 3); enuminfo.bladerf_xb200_path=struct('BLADERF_XB200_BYPASS', 0, ... 'BLADERF_XB200_MIX', 1); enuminfo.bladerf_trigger_signal=struct('BLADERF_TRIGGER_INVALID', -1, ... 'BLADERF_TRIGGER_J71_4', 0, ... 'BLADERF_TRIGGER_USER_0', 128, ... 'BLADERF_TRIGGER_USER_1', 129, ... 'BLADERF_TRIGGER_USER_2', 130, ... 'BLADERF_TRIGGER_USER_3', 131, ... 'BLADERF_TRIGGER_USER_4', 132, ... 'BLADERF_TRIGGER_USER_5', 133, ... 'BLADERF_TRIGGER_USER_6', 134, ... 'BLADERF_TRIGGER_USER_7', 135); enuminfo.bladerf_lna_gain=struct('BLADERF_LNA_GAIN_UNKNOWN', 0, ... 'BLADERF_LNA_GAIN_BYPASS', 1, ... 'BLADERF_LNA_GAIN_MID', 2, ... 'BLADERF_LNA_GAIN_MAX', 3); enuminfo.bladerf_power_sources=struct('BLADERF_UNKNOWN', 0, ... 'BLADERF_PS_DC', 1, ... 'BLADERF_PS_USB_VBUS', 2); enuminfo.bladerf_direction=struct('BLADERF_RX', 0, ... 'BLADERF_MODULE_RX', 0, ... 'BLADERF_TX', 1, ... 'BLADERF_MODULE_TX', 1); enuminfo.bladerf_channel_layout=struct('BLADERF_RX_X1', 0, ... 'BLADERF_TX_X1', 1, ... 'BLADERF_RX_X2', 2, ... 'BLADERF_TX_X2', 3); enuminfo.bladerf_pmic_register=struct('BLADERF_PMIC_CONFIGURATION', 0, ... 'BLADERF_PMIC_VOLTAGE_SHUNT', 1, ... 'BLADERF_PMIC_VOLTAGE_BUS', 2, ... 'BLADERF_PMIC_POWER', 3, ... 'BLADERF_PMIC_CURRENT', 4, ... 'BLADERF_PMIC_CALIBRATION', 5); enuminfo.bladerf_clock_select=struct('CLOCK_SELECT_ONBOARD', 0, ... 'CLOCK_SELECT_EXTERNAL', 1); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Output %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% methodinfo=fcns; bladeRF-2024.05/host/libraries/libbladeRF_bindings/matlab/test/000077500000000000000000000000001457144405000242045ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_bindings/matlab/test/bladeRF_lms_cal.m000066400000000000000000000036721457144405000273630ustar00rootroot00000000000000% Run LMS calibration routines % % bladeRF_lms_cal(device, rx_freq, tx_freq) % % device - Optional. May be an existing handle or a device specification string % rx_freq - Optional. RX frequency to set the device to. Default = 910e6. % tx_freq - Optional. TX frequency to set the device to. Default = 915e6. function bladeRF_lms_cal(device, rx_freq, tx_freq) if nargin >= 1 && ischar(device) b = bladeRF(device); else b = device; end if nargin < 2 rx_freq = 910e6; end if nargin < 3 tx_freq = 915e6; end figure; b.rx.frequency = rx_freq; b.tx.frequency = tx_freq; overrun = true; retry = 0; % Get an initial sample set disp('Getting pre-cal samples...') b.rx.start(); while overrun == true && retry < 3 [s1, ~, ~, overrun] = b.receive(b.rx.samplerate / 4); retry = retry + 1; end b.rx.stop(); if overrun == true error('Failed to run test - too many overruns.'); end subplot(2, 2, 1); plot(s1, 'b.'); subplot(2, 2, 2); plot(1:length(s1), real(s1), 1:length(s1), imag(s1)); % Run all calibrations disp('Running calibrations...') b.calibrate('ALL'); % Get a second sample set disp('Getting post-cal samples...') overrun = true; retry = 0; b.rx.start(); while overrun == true && retry < 3 [s2, ~, ~, overrun] = b.receive(b.rx.samplerate / 4); retry = retry + 1; end b.rx.stop(); if overrun == true error('Failed to run test - too many overruns.'); end subplot(2, 2, 3); plot(s2, 'r.'); subplot(2, 2, 4); plot(1:length(s2), real(s2), 1:length(s2), imag(s2)); % Run each calibration just to ensure the API isn't broken. disp('Testing individual cal routines...'); b.calibrate('LPF_TUNING'); b.calibrate('RX_LPF'); b.calibrate('RXVGA2'); b.calibrate('TX_LPF'); hold off; clear b; end bladeRF-2024.05/host/libraries/libbladeRF_bindings/matlab/test/bladeRF_rx_scheduled.m000066400000000000000000000021431457144405000304120ustar00rootroot00000000000000% Receive every 250 ms dev = bladeRF(); Fc = 450e6; Fs = 5e6; samples_per_rx = 0.010 * Fs; num_rxs = 10; num_samples = floor(samples_per_rx * num_rxs); samples = zeros(num_samples, 1); dev.rx.config.num_buffers = 512; dev.rx.frequency = Fc; dev.rx.samplerate = Fs; dev.rx.bandwidth = 1.5e6; fprintf('Running with the following settings:\n'); dev.rx dev.rx.config dev.rx.start(); % Get the current time and advance it by 1 ms timestamp = dev.rx.timestamp + round(0.001 * Fs); for n = 1:num_rxs i_start = (n - 1) * samples_per_rx + 1; i_end = i_start + samples_per_rx - 1; [samples(i_start:i_end), ~, actual, underrun] = ... dev.receive(samples_per_rx, 5000, timestamp); if underrun fprintf('Underrun on iteration %d/%d: Got %d / %d samples.\n', ... n, num_rxs, actual, samples_per_rx); else %fprintf('Finished iteration %d/%d (ts=%d)\n', n, num_rxs, timestamp); end timestamp = timestamp + samples_per_rx + round(0.001 * Fs); end dev.rx.stop(); clear dev; fprintf('Done. Plotting results...\n'); plot(1:length(samples), real(samples)); bladeRF-2024.05/host/libraries/libbladeRF_bindings/matlab/test/bladeRF_rx_stream.m000066400000000000000000000014071457144405000277470ustar00rootroot00000000000000dev = bladeRF(); Fc = 450e6; Fs = 5e6; n_sec = 3; num_rxs = 256; samples_per_rx = floor(Fs * n_sec / num_rxs); rxs = zeros(num_rxs, samples_per_rx); dev.rx.config.num_buffers = 512; dev.rx.frequency = Fc; dev.rx.samplerate = Fs; dev.rx.bandwidth = 1.5e6; fprintf('Running with the following settings:\n'); dev.rx dev.rx.config dev.rx.start(); for n = 1:size(rxs, 1) [rxs(n,:), ~, actual, underrun] = dev.receive(samples_per_rx); if underrun fprintf('Underrun on iteration %d: Got %d / %d samples.\n', ... n, actual, samples_per_rx); end end dev.rx.stop(); clear dev; fprintf('Done. Plotting results...\n'); rxs = rxs.'; samples = rxs(:); clear rxs; %pwelch(samples, [], [], [], Fs, 'centered'); plot(abs(samples)); bladeRF-2024.05/host/libraries/libbladeRF_bindings/matlab/test/bladeRF_tx_tone.m000066400000000000000000000061401457144405000274220ustar00rootroot00000000000000function bladeRF_tx_tone(tx_mode, Fc, Fs, bandwidth, Ftone, num_seconds, devstr) % bladeRF_test_tx_tone This function transmits a tone using one of three % transmit "modes." % % bladeRF_tx_tone(tx_mode, Fc, Fs, bandwidth, Ftone, num_seconds, devstr) % % Input Parameters: % tx_mode One of: 'single_burst', 'split burst', 'stream' % Fc Center frequency % Fs Sample rate % bandwidth LPF bandwidth % Ftone Tone frequency % num_seconds # of seconds to transmit tone for % devstr Device string %% Handle args if nargin < 1 tx_mode = 'single burst'; else tx_mode = lower(tx_mode); end if nargin < 2 Fc = 915e6; end if nargin < 3 Fs = 5e6; end if nargin < 4 bandwidth = 1.5e6; end if nargin < 5 Ftone = 250e3; end if nargin < 6 num_seconds = 5; end if nargin < 7 devstr = ''; end %% Craft tone samples ahead of time fprintf('Creating %f seconds of a %f Hz tone.\n', num_seconds, Ftone); omega = 2 * pi * Ftone; t = 0 : 1/Fs : num_seconds; sig = 0.5 .* exp(1j * omega * t); %% Setup device dev = bladeRF(devstr); dev.tx.frequency = Fc; dev.tx.samplerate = Fs; dev.tx.bandwidth = bandwidth; dev.tx.vga2 = 0; dev.tx.vga1 = -20; dev.tx.config.num_buffers = 64; dev.tx.config.buffer_size = 16384; dev.tx.config.num_transfers = 16; fprintf('Running with the following settings:\n'); disp(dev.tx) disp(dev.tx.config) % Transmit the entire signal as a "burst" with some zeros padded on either % end of it. dev.tx.start(); switch tx_mode %% Send samples as a single burst case 'single burst' dev.transmit(sig, 2 * num_seconds, 0, true, true); %% Send samples 3 times, but as a single burst split across 3 calls case 'split burst' end_i = round(10 * dev.tx.config.buffer_size); dev.transmit(sig(1:end_i), num_seconds, 0, true, false); start_i = end_i + 1; end_i = round(length(sig) * 2 / 3); dev.transmit(sig(start_i:end_i), num_seconds, 0, false, false); start_i = end_i + 1; dev.transmit(sig(start_i:end), num_seconds, 0, false, true); %% Send samples via a stream-like use case. case 'stream' end_i = round(length(sig) / 3); dev.transmit(sig(1:end_i)); start_i = end_i + 1; end_i = round(length(sig) * 2 / 3); dev.transmit(sig(start_i:end_i)); start_i = end_i + 1; dev.transmit(sig(start_i:end)); % Send a few zeros through to ensure we hold the TX DAC to 0+0j until % we shut down. dev.transmit(zeros(10, 1)); otherwise clear dev; error(['Invalid test mode specified: ' tx_mode]); end %% Shutdown and cleanup disp('Waiting for transmission to complete.'); tic % Wait to ensure all of our samples have reached the RF frontend. % First, figure out how long would take to transmit every remaining buffer max_buffered = (dev.tx.config.num_buffers * dev.tx.config.buffer_size); t = dev.tx.timestamp + max_buffered; while t > dev.tx.timestamp pause(0.250); end disp('Shutting down.'); dev.tx.stop(); clear dev Fs Fc Ftone num_seconds t omega sig start_i end_i max_buffered; bladeRF-2024.05/host/libraries/libbladeRF_bindings/python/000077500000000000000000000000001457144405000233065ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_bindings/python/.gitignore000066400000000000000000000000441457144405000252740ustar00rootroot00000000000000__pycache__ *.egg-info build/ dist/ bladeRF-2024.05/host/libraries/libbladeRF_bindings/python/CHANGELOG000066400000000000000000000023401457144405000245170ustar00rootroot00000000000000================================================================================ Python libbladeRF Bindings: Change Log Summary For more detailed information, please see the git change log and issue tracker hosted on GitHub: https://github.com/nuand/bladeRF ================================================================================ v1.1.2 (2020-12-23) -------------------------------- * update definitions for libbladeRF v2.4.0 v1.1.1 (2019-07-31) -------------------------------- * add OTP functions * update definitions for libbladeRF v2.2.1 v1.1.1 (2018-12-21) -------------------------------- * bladerf-tool: don't print gain mode on tx channels * update definitions for libbladeRF v2.2.0 v1.1.0 (2018-10-30) -------------------------------- * Fix rx_channel_count and tx_channel_count * Use new bladerf_get_serial_struct in the get_serial method * Update with latest API functions * Improve import_header.py script v1.0.1 (2018-08-24) -------------------------------- This version is intended for use with libbladeRF v2.0.1. Changes: * host: libbladeRF: Rename clock select option v1.0.0 (2018-08-13) -------------------------------- This version is intended for use with libbladeRF v2.0.0. Initial public release. bladeRF-2024.05/host/libraries/libbladeRF_bindings/python/README.md000066400000000000000000000032521457144405000245670ustar00rootroot00000000000000# Python 3 Bindings # This package provides libbladeRF bindings for Python 3, using the CFFI interface. # Installation # - To install system-wide: `sudo python3 setup.py install` - To install for your user: `python3 setup.py install` # Usage: Python module # A Python module is provided. To use, `import bladerf` and then instantiate the `bladerf.BladeRF` class to access your board. An example of opening the first available device and changing the frequency of the first RX channel: ``` >>> import bladerf >>> d = bladerf.BladeRF() >>> d )> >>> ch = d.Channel(bladerf.CHANNEL_RX(0)) >>> ch )>,CHANNEL_RX(0))> >>> ch.frequency 2484000000 >>> ch.frequency = 1.0e9 >>> ch.frequency 1000000000 ``` # Usage: bladerf-tool # A command-line interface named `bladerf-tool` is provided. For usage instructions, type `bladerf-tool --help`. Example usage: ``` $ bladerf-tool info *** Devices found: 1 *** Device 0 Board Name bladerf1 Device Speed Super FPGA Size 40 FPGA Configured True FPGA Version v0.6.0 ("0.6.0") Firmware Version v2.1.0 ("2.1.0") RX Channel Count 1 Channel RX1: Gain 39 Gain Mode Manual Symbol RSSI None Frequency 1000000000 Bandwidth 28000000 Sample Rate 1000000 TX Channel Count 1 Channel TX1: Gain -14 Gain Mode Manual Frequency 2446999999 Bandwidth 28000000 Sample Rate 1000000 ``` # License # This code is distributed under an [MIT License](https://github.com/Nuand/bladeRF/blob/master/legal/licenses/LICENSE.MIT.nuand). bladeRF-2024.05/host/libraries/libbladeRF_bindings/python/bladerf/000077500000000000000000000000001457144405000247055ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_bindings/python/bladerf/__init__.py000066400000000000000000000037041457144405000270220ustar00rootroot00000000000000# Copyright (c) 2013-2018 Nuand LLC # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. __doc__ = """ CFFI-based Python 3 binding to libbladeRF Implements a Pythonic binding to libbladeRF, the library for interfacing with the Nuand bladeRF product line. See help(bladerf.BladeRF) for more information. Basic usage: >>> import bladerf >>> b = bladerf.BladeRF() """ from bladerf import _bladerf from bladerf import _tool BladeRF = _bladerf.BladeRF get_bootloader_list = _bladerf.get_bootloader_list get_device_list = _bladerf.get_device_list load_fw_from_bootloader = _bladerf.load_fw_from_bootloader set_verbosity = _bladerf.set_verbosity version = _bladerf.version RX = _bladerf.RX TX = _bladerf.TX CHANNEL_RX = _bladerf.CHANNEL_RX CHANNEL_TX = _bladerf.CHANNEL_TX main = _tool.main __all__ = ['BladeRF', 'get_bootloader_list', 'get_device_list', 'load_fw_from_bootloader', 'set_verbosity', 'version', 'RX', 'TX', 'CHANNEL_RX', 'CHANNEL_TX', 'main'] bladeRF-2024.05/host/libraries/libbladeRF_bindings/python/bladerf/_bladerf.py000066400000000000000000001151151457144405000270210ustar00rootroot00000000000000# Copyright (c) 2013-2018 Nuand LLC # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. import enum import collections import cffi from sys import platform from ._cdef import header ffi = cffi.FFI() ffi.cdef(header) if platform == "win32": libbladeRF = ffi.dlopen("bladerf.dll") elif platform == "darwin": libbladeRF = ffi.dlopen("libbladeRF.dylib") else: libbladeRF = ffi.dlopen("libbladeRF.so") ############################################################################### # Python class wrappers for various structures class ReturnCode(enum.Enum): BladeRFError = 0 UnexpectedError = -1 RangeError = -2 InvalError = -3 MemError = -4 IOError = -5 TimeoutError = -6 NoDevError = -7 UnsupportedError = -8 MisalignedError = -9 ChecksumError = -10 NoFileError = -11 UpdateFPGAError = -12 UpdateFWError = -13 TimePastError = -14 QueueFullError = -15 FPGAOpError = -16 PermissionError = -17 WouldBlockError = -18 NotInitError = -19 def __str__(self): return self.name class Version(collections.namedtuple("Version", [ "major", "minor", "patch", "describe"])): @staticmethod def from_struct(version): return Version(version.major, version.minor, version.patch, ffi.string(version.describe).decode()) def __str__(self): return "v{}.{}.{} (\"{}\")".format(*self) class RationalRate(collections.namedtuple("RationalRate", [ "integer", "num", "den"])): @staticmethod def from_struct(rate): return RationalRate(rate.integer, rate.num, rate.den) def to_struct(self): return ffi.new("struct bladerf_rational_rate *", [ self.integer, self.num, self.den]) struct = property(to_struct) class Backend(enum.Enum): Any = libbladeRF.BLADERF_BACKEND_ANY Linux = libbladeRF.BLADERF_BACKEND_LINUX LibUSB = libbladeRF.BLADERF_BACKEND_LIBUSB Cypress = libbladeRF.BLADERF_BACKEND_CYPRESS Dummy = libbladeRF.BLADERF_BACKEND_DUMMY def __str__(self): return ffi.string(libbladeRF.bladerf_backend_str(self.value)).decode() class DevInfo(collections.namedtuple("DevInfo", [ "backend", "serial", "usb_bus", "usb_addr", "instance"])): @staticmethod def from_struct(devinfo): return DevInfo(Backend(devinfo.backend), bytes(ffi.string(devinfo.serial)), devinfo.usb_bus, devinfo.usb_addr, devinfo.instance) def to_struct(self): return ffi.new("struct bladerf_devinfo *", [ Backend(self.backend).value, self.serial, self.usb_bus, self.usb_addr, self.instance]) struct = property(to_struct) @property def devstr(self): d = self._asdict() d['serial'] = self.serial_str return ("{backend}:device={usb_bus}:{usb_addr} instance={instance}" " serial={serial}".format(**d)) @property def serial_str(self): return self.serial.decode() def __str__(self): return ("Device Information\n" + " backend {}\n".format(self.backend) + " serial {}\n".format(self.serial_str) + " usb_bus {}\n".format(self.usb_bus) + " usb_addr {}\n".format(self.usb_addr) + " instance {}".format(self.instance)) def __repr__(self): return ''.format(self.devstr) class Range(collections.namedtuple("Range", ["min", "max", "step", "scale"])): @staticmethod def from_struct(_range): return Range(_range.min, _range.max, _range.step, _range.scale) def __str__(self): return ("Range\n" + " min {}\n".format(self.min) + " max {}\n".format(self.max) + " step {}\n".format(self.step) + " scale {}\n".format(self.scale)) def __repr__(self): return ''.format( **self._asdict()) class DeviceSpeed(enum.Enum): Unknown = libbladeRF.BLADERF_DEVICE_SPEED_UNKNOWN High = libbladeRF.BLADERF_DEVICE_SPEED_HIGH Super = libbladeRF.BLADERF_DEVICE_SPEED_SUPER class GainMode(enum.Enum): Default = libbladeRF.BLADERF_GAIN_DEFAULT Manual = libbladeRF.BLADERF_GAIN_MGC FastAttack_AGC = libbladeRF.BLADERF_GAIN_FASTATTACK_AGC SlowAttack_AGC = libbladeRF.BLADERF_GAIN_SLOWATTACK_AGC Hybrid_AGC = libbladeRF.BLADERF_GAIN_HYBRID_AGC def __str__(self): return self.name def __int__(self): return self.value class Direction(enum.Enum): TX = libbladeRF.BLADERF_TX RX = libbladeRF.BLADERF_RX class ChannelLayout(enum.Enum): RX_X1 = libbladeRF.BLADERF_RX_X1 TX_X1 = libbladeRF.BLADERF_TX_X1 RX_X2 = libbladeRF.BLADERF_RX_X2 TX_X2 = libbladeRF.BLADERF_TX_X2 class Correction(enum.Enum): DCOFF_I = libbladeRF.BLADERF_CORR_DCOFF_I DCOFF_Q = libbladeRF.BLADERF_CORR_DCOFF_Q PHASE = libbladeRF.BLADERF_CORR_PHASE GAIN = libbladeRF.BLADERF_CORR_GAIN class Format(enum.Enum): SC16_Q11 = libbladeRF.BLADERF_FORMAT_SC16_Q11 SC16_Q11_META = libbladeRF.BLADERF_FORMAT_SC16_Q11_META PACKET_META = libbladeRF.BLADERF_FORMAT_PACKET_META SC8_Q7 = libbladeRF.BLADERF_FORMAT_SC8_Q7 SC8_Q7_META = libbladeRF.BLADERF_FORMAT_SC8_Q7_META class Loopback(enum.Enum): Disabled = libbladeRF.BLADERF_LB_NONE Firmware = libbladeRF.BLADERF_LB_FIRMWARE BB_TXLPF_RXVGA2 = libbladeRF.BLADERF_LB_BB_TXLPF_RXVGA2 BB_TXVGA1_RXVGA2 = libbladeRF.BLADERF_LB_BB_TXVGA1_RXVGA2 BB_TXLPF_RXLPF = libbladeRF.BLADERF_LB_BB_TXLPF_RXLPF BB_TXVGA1_RXLPF = libbladeRF.BLADERF_LB_BB_TXVGA1_RXLPF RF_LNA1 = libbladeRF.BLADERF_LB_RF_LNA1 RF_LNA2 = libbladeRF.BLADERF_LB_RF_LNA2 RF_LNA3 = libbladeRF.BLADERF_LB_RF_LNA3 RFIC_BIST = libbladeRF.BLADERF_LB_RFIC_BIST def __str__(self): return self.name class RXMux(enum.Enum): Invalid = libbladeRF.BLADERF_RX_MUX_INVALID Baseband = libbladeRF.BLADERF_RX_MUX_BASEBAND Counter_12bit = libbladeRF.BLADERF_RX_MUX_12BIT_COUNTER Counter_32bit = libbladeRF.BLADERF_RX_MUX_32BIT_COUNTER Digital_Loopback = libbladeRF.BLADERF_RX_MUX_DIGITAL_LOOPBACK def __str__(self): return self.name class ClockSelect(enum.Enum): Unknown = -99 VCTCXO = libbladeRF.CLOCK_SELECT_ONBOARD External = libbladeRF.CLOCK_SELECT_EXTERNAL def __str__(self): return self.name class RSSI(collections.namedtuple("RSSI", ["preamble", "symbol"])): def __str__(self): return ("RSSI\n" + " preamble {preamble} dB\n" + " symbol {symbol} dB\n").format(**self._asdict()) def __repr__(self): return ("").format(**self._asdict()) class PowerSource(enum.Enum): Unknown = libbladeRF.BLADERF_UNKNOWN DC_Barrel = libbladeRF.BLADERF_PS_DC USB_VBUS = libbladeRF.BLADERF_PS_USB_VBUS def __str__(self): return self.name class PMICRegister(enum.Enum): Configuration = libbladeRF.BLADERF_PMIC_CONFIGURATION Voltage_shunt = libbladeRF.BLADERF_PMIC_VOLTAGE_SHUNT Voltage_bus = libbladeRF.BLADERF_PMIC_VOLTAGE_BUS Power = libbladeRF.BLADERF_PMIC_POWER Current = libbladeRF.BLADERF_PMIC_CURRENT Calibration = libbladeRF.BLADERF_PMIC_CALIBRATION @property def ctype(self): """C type definition for the pointer to the returned value.""" if self in [self.Configuration, self.Calibration]: return "uint16_t *" else: return "float *" class Serial(collections.namedtuple("Serial", ["serial"])): @staticmethod def from_struct(serial): return Serial(ffi.string(serial.serial).decode()) def __str__(self): return self.serial ############################################################################### class BladeRFError(Exception): """A general libbladeRF exception occurred""" def __init__(self, code=0, msg=None): if isinstance(code, str): # SubclassedError("user message") msg = code code = 0 if code == 0: i_am = self.__class__.__name__ code = getattr(ReturnCode, i_am).value self.errstr = ffi.string(libbladeRF.bladerf_strerror(code)).decode() if msg is not None: self.errstr += " (" + msg + ")" def __str__(self): return self.errstr class UnexpectedError(BladeRFError): """An unexpected failure occurred""" class RangeError(BladeRFError): """Provided parameter is out of range""" class InvalError(BladeRFError): """Invalid operation/parameter""" class MemError(BladeRFError): """Memory allocation error""" class IOError(BladeRFError): """File/Device I/O error""" class TimeoutError(BladeRFError): """Operation timed out""" class NoDevError(BladeRFError): """No device(s) available""" class UnsupportedError(BladeRFError): """Operation not supported""" class MisalignedError(BladeRFError): """Misaligned flash access""" class ChecksumError(BladeRFError): """Invalid checksum""" class NoFileError(BladeRFError): """File not found""" class UpdateFPGAError(BladeRFError): """An FPGA update is required""" class UpdateFWError(BladeRFError): """A firmware update is required""" class TimePastError(BladeRFError): """Requested timestamp is in the past""" class QueueFullError(BladeRFError): """Could not enqueue data into full queue""" class FPGAOpError(BladeRFError): """An FPGA operation reported failure""" class PermissionError(BladeRFError): """Insufficient permissions for the requested operation""" class WouldBlockError(BladeRFError): """Operation would block, but has been requested to be non-blocking.""" class NotInitError(BladeRFError): """Device insufficiently initialized for operation""" def _check_error(err): """If the result code indicates an error, raise an exception""" if err < 0: try: errorval = ReturnCode(err) except ValueError: errorval = ReturnCode(0) raise globals()[errorval.name](err) ############################################################################### def set_verbosity(level): libbladeRF.bladerf_log_set_verbosity(level) def version(): version = ffi.new("struct bladerf_version *") libbladeRF.bladerf_version(version) return Version.from_struct(version) def get_device_list(): devices = ffi.new("struct bladerf_devinfo *[1]") ret = libbladeRF.bladerf_get_device_list(devices) _check_error(ret) devinfos = [DevInfo.from_struct(devices[0][i]) for i in range(ret)] libbladeRF.bladerf_free_device_list(devices[0]) return devinfos def get_bootloader_list(): devices = ffi.new("struct bladerf_devinfo *[1]") ret = libbladeRF.bladerf_get_bootloader_list(devices) _check_error(ret) devinfos = [DevInfo.from_struct(devices[0][i]) for i in range(ret)] libbladeRF.bladerf_free_device_list(devices[0]) return devinfos def load_fw_from_bootloader(device_identifier=None, backend=0, bus=0, addr=0, file=None): ret = libbladeRF.bladerf_load_fw_from_bootloader( device_identifier.encode(), backend, bus, addr, file.encode()) _check_error(ret) ############################################################################### RX = 0x0 TX = 0x1 def CHANNEL_RX(ch): return (ch << 1) | RX def CHANNEL_TX(ch): return (ch << 1) | TX # defaults for PLL on bladeRF 2 BLADERF_VCTCXO_FREQUENCY = 38.4e6 BLADERF_REFIN_DEFAULT = 10.0e6 BLADERF_SERIAL_LENGTH = 33 ############################################################################### class BladeRF: """Python class for interacting with bladeRF boards. Example usage: >>> d = bladerf.BladeRF() >>> d.board_name 'bladerf1' """ def __init__(self, device_identifier=None, devinfo=None): self.dev = ffi.new("struct bladerf *[1]") self.open(device_identifier, devinfo) def __repr__(self): return ''.format(self.devinfo) # Open, close, devinfo def open(self, device_identifier=None, devinfo=None): if devinfo is not None: ret = libbladeRF.bladerf_open_with_devinfo(self.dev, devinfo.struct) elif device_identifier is not None: ret = libbladeRF.bladerf_open(self.dev, device_identifier.encode()) else: ret = libbladeRF.bladerf_open(self.dev, ffi.NULL) _check_error(ret) def close(self): libbladeRF.bladerf_close(self.dev[0]) def get_devinfo(self): devinfo = ffi.new("struct bladerf_devinfo *") ret = libbladeRF.bladerf_get_devinfo(self.dev[0], devinfo) _check_error(ret) return DevInfo.from_struct(devinfo) devinfo = property(get_devinfo, doc="Device information as a DevInfo structure") # Device properties def get_device_speed(self): return DeviceSpeed(libbladeRF.bladerf_device_speed(self.dev[0])) device_speed = property(get_device_speed, doc="USB speed of the open device") def get_serial_struct(self): serial = ffi.new("struct bladerf_serial *") ret = libbladeRF.bladerf_get_serial_struct(self.dev[0], serial) _check_error(ret) return Serial.from_struct(serial) def get_serial(self): sstruct = self.get_serial_struct() return sstruct.serial serial = property(get_serial, doc="Serial number of the open device") def get_fpga_size(self): fpga_size = ffi.new("bladerf_fpga_size *") ret = libbladeRF.bladerf_get_fpga_size(self.dev[0], fpga_size) _check_error(ret) return fpga_size[0] fpga_size = property(get_fpga_size, doc="FPGA size in kLE") def get_flash_size(self): flash_size = ffi.new("uint32_t *") is_guess = ffi.new("bool *") ret = libbladeRF.bladerf_get_flash_size(self.dev[0], flash_size, is_guess) _check_error(ret) return (flash_size[0], is_guess[0]) flash_size = property(get_flash_size, doc="Flash size in bytes") def is_fpga_configured(self): ret = libbladeRF.bladerf_is_fpga_configured(self.dev[0]) _check_error(ret) return bool(ret) fpga_configured = property(is_fpga_configured, doc="True if the device's FPGA is configured") def get_fpga_version(self): version = ffi.new("struct bladerf_version *") ret = libbladeRF.bladerf_fpga_version(self.dev[0], version) _check_error(ret) return Version.from_struct(version) fpga_version = property(get_fpga_version, doc="FPGA version information") def get_fw_version(self): version = ffi.new("struct bladerf_version *") ret = libbladeRF.bladerf_fw_version(self.dev[0], version) _check_error(ret) return Version.from_struct(version) fw_version = property(get_fw_version, doc="Firmware version information") def get_board_name(self): board_name = libbladeRF.bladerf_get_board_name(self.dev[0]) return ffi.string(board_name).decode() board_name = property(get_board_name, doc="The board model name, as a string") def trim_dac_write(self, val): libbladeRF.bladerf_trim_dac_write(self.dev[0], val) def trim_dac_read(self): try: trim_val = ffi.new("uint16_t *") ret = libbladeRF.bladerf_trim_dac_read(self.dev[0], trim_val) _check_error(ret) return trim_val[0] except UnsupportedError: return None def get_channel_count(self, direction): return libbladeRF.bladerf_get_channel_count(self.dev[0], direction) @property def rx_channel_count(self): """Number of RX channels on the device""" return self.get_channel_count(libbladeRF.BLADERF_RX) @property def tx_channel_count(self): """Number of TX channels on the device""" return self.get_channel_count(libbladeRF.BLADERF_TX) # Enable/Disable def enable_module(self, ch, enable): ret = libbladeRF.bladerf_enable_module(self.dev[0], ch, bool(enable)) _check_error(ret) # Gain def set_gain(self, ch, gain): ret = libbladeRF.bladerf_set_gain(self.dev[0], ch, gain) _check_error(ret) def get_gain(self, ch): gain = ffi.new("bladerf_gain *") ret = libbladeRF.bladerf_get_gain(self.dev[0], ch, gain) _check_error(ret) return gain[0] def set_gain_mode(self, ch, mode): ret = libbladeRF.bladerf_set_gain_mode(self.dev[0], ch, int(mode)) _check_error(ret) def get_gain_mode(self, ch): try: mode = ffi.new("bladerf_gain_mode *") ret = libbladeRF.bladerf_get_gain_mode(self.dev[0], ch, mode) _check_error(ret) return GainMode(mode[0]) except UnsupportedError: return None def get_gain_modes(self, ch): modes_arr = ffi.new("struct bladerf_gain_modes **") ret = libbladeRF.bladerf_get_gain_modes(self.dev[0], ch, modes_arr) _check_error(ret) return [GainMode(modes_arr[0][i].mode) for i in range(ret)] def get_gain_range(self, ch): _range_ptr = ffi.new("struct bladerf_range **") ret = libbladeRF.bladerf_get_gain_range(self.dev[0], ch, _range_ptr) _check_error(ret) return Range.from_struct(_range_ptr[0]) def set_gain_stage(self, ch, stage, gain): ret = libbladeRF.bladerf_set_gain_stage(self.dev[0], ch, stage.encode(), gain) _check_error(ret) def get_gain_stage(self, ch, stage): gain = ffi.new("bladerf_gain *") ret = libbladeRF.bladerf_get_gain_stage(self.dev[0], ch, stage.encode(), gain) _check_error(ret) return gain[0] def get_gain_stage_range(self, ch, stage): _range_ptr = ffi.new("struct bladerf_range **") ret = libbladeRF.bladerf_get_gain_stage_range(self.dev[0], ch, stage.encode(), _range_ptr) _check_error(ret) return Range.from_struct(_range_ptr[0]) def get_gain_stages(self, ch): ret = libbladeRF.bladerf_get_gain_stages(self.dev[0], ch, ffi.NULL, 0) _check_error(ret) stages_arr = ffi.new("const char *[]", ret) ret = libbladeRF.bladerf_get_gain_stages(self.dev[0], ch, stages_arr, ret) _check_error(ret) return [ffi.string(stages_arr[i]).decode() for i in range(ret)] # Sample rate def set_sample_rate(self, ch, rate): actual_rate = ffi.new("bladerf_sample_rate *") ret = libbladeRF.bladerf_set_sample_rate(self.dev[0], ch, int(rate), actual_rate) _check_error(ret) return actual_rate[0] def set_rational_sample_rate(self, ch, rational_rate): raise NotImplementedError() def get_sample_rate(self, ch): rate = ffi.new("bladerf_sample_rate *") ret = libbladeRF.bladerf_get_sample_rate(self.dev[0], ch, rate) _check_error(ret) return rate[0] def get_rational_sample_rate(self, ch): raise NotImplementedError() def get_sample_rate_range(self, ch): _range_ptr = ffi.new("struct bladerf_range **") ret = libbladeRF.bladerf_get_sample_rate_range(self.dev[0], ch, _range_ptr) _check_error(ret) return Range.from_struct(_range_ptr[0]) # Bandwidth def set_bandwidth(self, ch, bandwidth): actual_bandwidth = ffi.new("bladerf_bandwidth *") ret = libbladeRF.bladerf_set_bandwidth(self.dev[0], ch, int(bandwidth), actual_bandwidth) _check_error(ret) return actual_bandwidth[0] def get_bandwidth(self, ch): bandwidth = ffi.new("bladerf_bandwidth *") ret = libbladeRF.bladerf_get_bandwidth(self.dev[0], ch, bandwidth) _check_error(ret) return bandwidth[0] def get_bandwidth_range(self, ch): _range_ptr = ffi.new("struct bladerf_range **") ret = libbladeRF.bladerf_get_bandwidth_range(self.dev[0], ch, _range_ptr) _check_error(ret) return Range.from_struct(_range_ptr[0]) # Frequency def set_frequency(self, ch, frequency): ret = libbladeRF.bladerf_set_frequency(self.dev[0], ch, int(frequency)) _check_error(ret) def get_frequency(self, ch): frequency = ffi.new("bladerf_frequency *") ret = libbladeRF.bladerf_get_frequency(self.dev[0], ch, frequency) _check_error(ret) return frequency[0] def select_band(self, ch, frequency): ret = libbladeRF.bladerf_select_band(self.dev[0], ch, int(frequency)) _check_error(ret) def get_frequency_range(self, ch): _range_ptr = ffi.new("struct bladerf_range **") ret = libbladeRF.bladerf_get_frequency_range(self.dev[0], ch, _range_ptr) _check_error(ret) return Range.from_struct(_range_ptr[0]) # RF Ports def set_rf_port(self, ch, port): ret = libbladeRF.bladerf_set_rf_port(self.dev[0], ch, port.encode()) _check_error(ret) def get_rf_port(self, ch): try: port = ffi.new("const char *[1]") ret = libbladeRF.bladerf_get_rf_port(self.dev[0], ch, port) _check_error(ret) return ffi.string(port[0]).decode() except UnsupportedError: return None def get_rf_ports(self, ch): try: count = libbladeRF.bladerf_get_rf_ports(self.dev[0], ch, ffi.NULL, 0) _check_error(count) ports_arr = ffi.new("const char *[]", count) ret = libbladeRF.bladerf_get_rf_ports(self.dev[0], ch, ports_arr, count) _check_error(ret) return [ffi.string(ports_arr[i]).decode() for i in range(ret)] except UnsupportedError: return [] # Sample Loopback def get_loopback_modes(self): ret = libbladeRF.bladerf_get_loopback_modes(self.dev[0], ffi.NULL) _check_error(ret) modes_arr = ffi.new("struct bladerf_loopback_modes *[]", ret) ret = libbladeRF.bladerf_get_loopback_modes(self.dev[0], modes_arr) _check_error(ret) return [Loopback(modes_arr[0][i].mode) for i in range(ret)] loopback_modes = property(get_loopback_modes, doc="Supported loopback modes") def is_loopback_mode_supported(self, lb): if isinstance(lb, Loopback): lb = lb.value ret = libbladeRF.bladerf_is_loopback_mode_supported(self.dev[0], lb) _check_error(ret) return bool(ret) def get_loopback(self): lb = ffi.new("bladerf_loopback *") ret = libbladeRF.bladerf_get_loopback(self.dev[0], lb) _check_error(ret) return Loopback(lb[0]) def set_loopback(self, lb): if isinstance(lb, Loopback): lb = lb.value ret = libbladeRF.bladerf_set_loopback(self.dev[0], lb) _check_error(ret) loopback = property(get_loopback, set_loopback, doc="Loopback selection") # Trigger TBD # Sample RX Mux def get_rx_mux(self): mux = ffi.new("bladerf_rx_mux *") ret = libbladeRF.bladerf_get_rx_mux(self.dev[0], mux) _check_error(ret) return RXMux(mux[0]) def set_rx_mux(self, rx_mux): if isinstance(rx_mux, RXMux): rx_mux = rx_mux.value ret = libbladeRF.bladerf_set_rx_mux(self.dev[0], rx_mux) _check_error(ret) rx_mux = property(get_rx_mux, set_rx_mux, doc="RX Multiplexer selection") # DC/Phase/Gain Correction def get_correction(self, ch, corr): value = ffi.new("bladerf_correction_value *") ret = libbladeRF.bladerf_get_correction(self.dev[0], ch, corr.value, value) _check_error(ret) return value[0] def set_correction(self, ch, corr, value): ret = libbladeRF.bladerf_set_correction(self.dev[0], ch, corr.value, value) _check_error(ret) # Streaming format def interleave_stream_buffer(self, layout, format, buffer_size, samples): raise NotImplementedError() def deinterleave_stream_buffer(self, layout, format, buffer_size, samples): raise NotImplementedError() # Streaming def sync_config(self, layout, fmt, num_buffers, buffer_size, num_transfers, stream_timeout): ret = libbladeRF.bladerf_sync_config(self.dev[0], layout.value, fmt.value, num_buffers, buffer_size, num_transfers, stream_timeout) _check_error(ret) def sync_tx(self, buf, num_samples, timeout_ms=None, meta=ffi.NULL): ret = libbladeRF.bladerf_sync_tx(self.dev[0], ffi.from_buffer(buf), num_samples, ffi.cast("struct bladerf_metadata *", meta), timeout_ms or 0) _check_error(ret) def sync_rx(self, buf, num_samples, timeout_ms=None, meta=ffi.NULL): ret = libbladeRF.bladerf_sync_rx(self.dev[0], ffi.from_buffer(buf), num_samples, meta, timeout_ms or 0) _check_error(ret) # FPGA/Firmware Loading/Flashing def load_fpga(self, image_path): ret = libbladeRF.bladerf_load_fpga(self.dev[0], image_path.encode()) _check_error(ret) def flash_fpga(self, image_path): ret = libbladeRF.bladerf_flash_fpga(self.dev[0], image_path.encode()) _check_error(ret) def erase_stored_fpga(self): ret = libbladeRF.bladerf_erase_stored_fpga(self.dev[0]) _check_error(ret) def flash_firmware(self, image_path): ret = libbladeRF.bladerf_flash_firmware(self.dev[0], image_path.encode()) _check_error(ret) def device_reset(self): ret = libbladeRF.bladerf_device_reset(self.dev[0]) _check_error(ret) # VCTCXO Tamer Mode def set_vctcxo_tamer_mode(self, mode): raise NotImplementedError() def get_vctcxo_tamer_mode(self): raise NotImplementedError() vctcxo_tamer_mode = property(get_vctcxo_tamer_mode, set_vctcxo_tamer_mode) def get_vctcxo_trim(self): raise NotImplementedError() vctcxo = property(get_vctcxo_trim) # Tuning Mode def set_tuning_mode(self, mode): raise NotImplementedError() def get_tuning_mode(self): raise NotImplementedError() tuning_mode = property(get_tuning_mode, set_tuning_mode) # Bias tee def get_bias_tee(self, ch): try: state = ffi.new("bool *") ret = libbladeRF.bladerf_get_bias_tee(self.dev[0], ch, state) _check_error(ret) return bool(state[0]) except UnsupportedError: return None def set_bias_tee(self, ch, enable): ret = libbladeRF.bladerf_set_bias_tee(self.dev[0], ch, enable) _check_error(ret) # RFIC def get_rfic_temperature(self): try: val = ffi.new("float *") ret = libbladeRF.bladerf_get_rfic_temperature(self.dev[0], val) _check_error(ret) return val[0] except UnsupportedError: return None rfic_temperature = property(get_rfic_temperature, doc="RFIC internal temperature") def get_rfic_rssi(self, ch): try: preamble = ffi.new("int32_t *") symbol = ffi.new("int32_t *") ret = libbladeRF.bladerf_get_rfic_rssi(self.dev[0], ch, preamble, symbol) _check_error(ret) return RSSI(preamble[0], symbol[0]) except UnsupportedError: return None def get_rfic_ctrl_out(self): try: ctrl_out = ffi.new("uint8_t *") ret = libbladeRF.bladerf_get_rfic_ctrl_out(self.dev[0], ctrl_out) _check_error(ret) return ctrl_out[0] except UnsupportedError: return None rfic_ctrl_out = property(get_rfic_ctrl_out, doc="RFIC CTRL_OUT status pins") # Phase Detector/Frequency Synthesizer def get_pll_lock_state(self): try: locked = ffi.new("bool *") ret = libbladeRF.bladerf_get_pll_lock_state(self.dev[0], locked) _check_error(ret) return bool(locked[0]) except UnsupportedError: return None pll_locked = property(get_pll_lock_state, doc="PLL lock indication") def get_pll_enable(self): try: enable = ffi.new("bool *") ret = libbladeRF.bladerf_get_pll_enable(self.dev[0], enable) _check_error(ret) return bool(enable[0]) except UnsupportedError: return None def set_pll_enable(self, enable): ret = libbladeRF.bladerf_set_pll_enable(self.dev[0], enable) _check_error(ret) pll_enable = property(get_pll_enable, set_pll_enable, doc="PLL Enable") def get_pll_refclk(self): try: freq = ffi.new("uint64_t *") ret = libbladeRF.bladerf_get_pll_refclk(self.dev[0], freq) _check_error(ret) return int(freq[0]) except UnsupportedError: return None def set_pll_refclk(self, freq): ret = libbladeRF.bladerf_set_pll_refclk(self.dev[0], freq) _check_error(ret) pll_refclk = property(get_pll_refclk, set_pll_refclk, doc="PLL Reference Clock frequency") # Power source def get_power_source(self): try: val = ffi.new("bladerf_power_sources *") ret = libbladeRF.bladerf_get_power_source(self.dev[0], val) _check_error(ret) return PowerSource(val[0]) except UnsupportedError: return PowerSource.Unknown power_source = property(get_power_source, doc="Active power source for device") # Clock select def get_clock_select(self): try: sel = ffi.new("bladerf_clock_select *") ret = libbladeRF.bladerf_get_clock_select(self.dev[0], sel) _check_error(ret) return ClockSelect(sel[0]) except UnsupportedError: return ClockSelect.Unknown def set_clock_select(self, sel): if isinstance(sel, ClockSelect): sel = sel.value ret = libbladeRF.bladerf_set_clock_select(self.dev[0], sel) _check_error(ret) clock_select = property(get_clock_select, set_clock_select, doc="System clock input selection") # Clock output def get_clock_output(self): try: state = ffi.new("bool *") ret = libbladeRF.bladerf_get_clock_output(self.dev[0], state) _check_error(ret) return bool(state[0]) except UnsupportedError: return None def set_clock_output(self, enable): ret = libbladeRF.bladerf_set_clock_output(self.dev[0], enable) _check_error(ret) clock_output = property(get_clock_output, set_clock_output, doc="Clock output enable") # Current/power monitor IC def get_pmic_register(self, reg): try: if not isinstance(reg, PMICRegister): reg = PMICRegister(reg) val = ffi.new(reg.ctype) ret = libbladeRF.bladerf_get_pmic_register(self.dev[0], reg.value, val) _check_error(ret) return val[0] except UnsupportedError: return None @property def bus_voltage(self): """Main power bus voltage, in Volts""" return self.get_pmic_register(PMICRegister.Voltage_bus) @property def bus_current(self): """Main power bus current, in Amps""" return self.get_pmic_register(PMICRegister.Current) @property def bus_power(self): """Main power bus power, in Watts""" return self.get_pmic_register(PMICRegister.Power) # Convenience objects class _Channel: """Container for bladeRF channel properties""" def __init__(self, dev, channel): self.dev = dev self.channel = channel if (channel >> 1) not in range(dev.get_channel_count(self.is_tx)): raise UnsupportedError("Invalid channel: " + str(channel)) def __str__(self): return "Channel {}{}".format( "TX" if self.is_tx else "RX", (self.channel >> 1) + 1) def __repr__(self): return ''.format( repr(self.dev), "TX" if self.is_tx else "RX", self.channel >> 1) @property def is_tx(self): """Returns True if this is a TX channel, False otherwise""" return bool(self.channel & TX) @property def gain(self): """Gain, in dB""" return self.dev.get_gain(self.channel) @gain.setter def gain(self, value): return self.dev.set_gain(self.channel, value) @property def gain_mode(self): """Gain mode""" return self.dev.get_gain_mode(self.channel) @gain_mode.setter def gain_mode(self, value): return self.dev.set_gain_mode(self.channel, value) @property def gain_modes(self): """List of supported gain modes""" return self.dev.get_gain_modes(self.channel) @property def rssi(self): """RSSI report from RFIC""" return self.dev.get_rfic_rssi(self.channel) @property def preamble_rssi(self): """Preamble RSSI reading (latched at algorithm reset)""" if self.rssi is not None: return self.rssi.preamble else: return None @property def symbol_rssi(self): """Symbol RSSI reading (most recent value)""" if self.rssi is not None: return self.rssi.symbol else: return None @property def sample_rate(self): """Sample rate, in samples/second""" return self.dev.get_sample_rate(self.channel) @sample_rate.setter def sample_rate(self, value): return self.dev.set_sample_rate(self.channel, value) @property def sample_rate_range(self): """Range of sample rates supported by this channel""" return self.dev.get_sample_rate_range(self.channel) @property def bandwidth(self): """Channel bandwidth in Hz""" return self.dev.get_bandwidth(self.channel) @bandwidth.setter def bandwidth(self, value): return self.dev.set_bandwidth(self.channel, value) @property def bandwidth_range(self): """Range of bandwidths supported by this channel""" return self.dev.get_bandwidth_range(self.channel) @property def frequency(self): """Frequency in Hz""" return self.dev.get_frequency(self.channel) @frequency.setter def frequency(self, value): return self.dev.set_frequency(self.channel, value) @property def frequency_range(self): """Range of frequencies supported by this channel""" return self.dev.get_frequency_range(self.channel) @property def rf_port(self): """Active RF port""" return self.dev.get_rf_port(self.channel) @rf_port.setter def rf_port(self, value): return self.dev.set_rf_port(self.channel, value) @property def rf_ports(self): """List of available RF ports""" return self.dev.get_rf_ports(self.channel) @property def bias_tee(self): """Bias-T control""" return self.dev.get_bias_tee(self.channel) @bias_tee.setter def bias_tee(self, value): return self.dev.set_bias_tee(self.channel, value) def set_enable(self, value): return self.dev.enable_module(self.channel, value) enable = property(fset=set_enable, doc="Enable/disable RF chain") def Channel(self, ch): """Returns an object for a given subchannel. Usage: >>> d = bladerf.BladeRF() >>> rx = d.Channel(bladerf.CHANNEL_RX(0)) See help(bladerf.BladeRF._Channel) or help(rx) for more information. """ return self._Channel(self, ch) bladeRF-2024.05/host/libraries/libbladeRF_bindings/python/bladerf/_cdef.py000066400000000000000000000635611457144405000263320ustar00rootroot00000000000000# Generated from libbladeRF.h by import_header.py header = """ struct bladerf; typedef enum { BLADERF_BACKEND_ANY, BLADERF_BACKEND_LINUX, BLADERF_BACKEND_LIBUSB, BLADERF_BACKEND_CYPRESS, BLADERF_BACKEND_DUMMY = 100 } bladerf_backend; struct bladerf_devinfo { bladerf_backend backend; char serial[33]; uint8_t usb_bus; uint8_t usb_addr; unsigned int instance; char manufacturer[33]; char product[33]; }; struct bladerf_backendinfo { int handle_count; void *handle; int lock_count; void *lock; }; int bladerf_open(struct bladerf **device, const char *device_identifier); void bladerf_close(struct bladerf *device); int bladerf_open_with_devinfo(struct bladerf **device, struct bladerf_devinfo *devinfo); int bladerf_get_device_list(struct bladerf_devinfo **devices); void bladerf_free_device_list(struct bladerf_devinfo *devices); void bladerf_init_devinfo(struct bladerf_devinfo *info); int bladerf_get_devinfo(struct bladerf *dev, struct bladerf_devinfo *info); int bladerf_get_backendinfo(struct bladerf *dev, struct bladerf_backendinfo *info); int bladerf_get_devinfo_from_str(const char *devstr, struct bladerf_devinfo *info); bool bladerf_devinfo_matches(const struct bladerf_devinfo *a, const struct bladerf_devinfo *b); bool bladerf_devstr_matches(const char *dev_str, struct bladerf_devinfo *info); const char *bladerf_backend_str(bladerf_backend backend); void bladerf_set_usb_reset_on_open(bool enabled); struct bladerf_range { int64_t min; int64_t max; int64_t step; float scale; }; struct bladerf_serial { char serial[33]; }; struct bladerf_version { uint16_t major; uint16_t minor; uint16_t patch; const char *describe; }; typedef enum { BLADERF_FPGA_UNKNOWN = 0, BLADERF_FPGA_40KLE = 40, BLADERF_FPGA_115KLE = 115, BLADERF_FPGA_A4 = 49, BLADERF_FPGA_A5 = 77, BLADERF_FPGA_A9 = 301 } bladerf_fpga_size; typedef enum { BLADERF_DEVICE_SPEED_UNKNOWN, BLADERF_DEVICE_SPEED_HIGH, BLADERF_DEVICE_SPEED_SUPER } bladerf_dev_speed; typedef enum { BLADERF_FPGA_SOURCE_UNKNOWN = 0, BLADERF_FPGA_SOURCE_FLASH = 1, BLADERF_FPGA_SOURCE_HOST = 2 } bladerf_fpga_source; int bladerf_get_serial(struct bladerf *dev, char *serial); int bladerf_get_serial_struct(struct bladerf *dev, struct bladerf_serial *serial); int bladerf_get_fpga_size(struct bladerf *dev, bladerf_fpga_size *size); int bladerf_get_fpga_bytes(struct bladerf *dev, size_t *size); int bladerf_get_flash_size(struct bladerf *dev, uint32_t *size, bool *is_guess); int bladerf_fw_version(struct bladerf *dev, struct bladerf_version *version); int bladerf_is_fpga_configured(struct bladerf *dev); int bladerf_fpga_version(struct bladerf *dev, struct bladerf_version *version); int bladerf_get_fpga_source(struct bladerf *dev, bladerf_fpga_source *source); bladerf_dev_speed bladerf_device_speed(struct bladerf *dev); const char *bladerf_get_board_name(struct bladerf *dev); typedef int bladerf_channel; typedef bladerf_channel bladerf_module; typedef enum { BLADERF_RX = 0, BLADERF_TX = 1 } bladerf_direction; typedef enum { BLADERF_RX_X1 = 0, BLADERF_TX_X1 = 1, BLADERF_RX_X2 = 2, BLADERF_TX_X2 = 3 } bladerf_channel_layout; size_t bladerf_get_channel_count(struct bladerf *dev, bladerf_direction dir); typedef int bladerf_gain; typedef enum { BLADERF_GAIN_DEFAULT, BLADERF_GAIN_MGC, BLADERF_GAIN_FASTATTACK_AGC, BLADERF_GAIN_SLOWATTACK_AGC, BLADERF_GAIN_HYBRID_AGC } bladerf_gain_mode; struct bladerf_gain_modes { const char *name; bladerf_gain_mode mode; }; int bladerf_set_gain(struct bladerf *dev, bladerf_channel ch, bladerf_gain gain); int bladerf_get_gain(struct bladerf *dev, bladerf_channel ch, bladerf_gain *gain); int bladerf_set_gain_mode(struct bladerf *dev, bladerf_channel ch, bladerf_gain_mode mode); int bladerf_get_gain_mode(struct bladerf *dev, bladerf_channel ch, bladerf_gain_mode *mode); int bladerf_get_gain_modes(struct bladerf *dev, bladerf_channel ch, const struct bladerf_gain_modes **modes); int bladerf_get_gain_range(struct bladerf *dev, bladerf_channel ch, const struct bladerf_range **range); int bladerf_set_gain_stage(struct bladerf *dev, bladerf_channel ch, const char *stage, bladerf_gain gain); int bladerf_get_gain_stage(struct bladerf *dev, bladerf_channel ch, const char *stage, bladerf_gain *gain); int bladerf_get_gain_stage_range(struct bladerf *dev, bladerf_channel ch, const char *stage, const struct bladerf_range **range); int bladerf_get_gain_stages(struct bladerf *dev, bladerf_channel ch, const char **stages, size_t count); typedef unsigned int bladerf_sample_rate; struct bladerf_rational_rate { uint64_t integer; uint64_t num; uint64_t den; }; int bladerf_set_sample_rate(struct bladerf *dev, bladerf_channel ch, bladerf_sample_rate rate, bladerf_sample_rate *actual); int bladerf_set_rational_sample_rate(struct bladerf *dev, bladerf_channel ch, struct bladerf_rational_rate *rate, struct bladerf_rational_rate *actual); int bladerf_get_sample_rate(struct bladerf *dev, bladerf_channel ch, bladerf_sample_rate *rate); int bladerf_get_sample_rate_range(struct bladerf *dev, bladerf_channel ch, const struct bladerf_range **range); int bladerf_get_rational_sample_rate(struct bladerf *dev, bladerf_channel ch, struct bladerf_rational_rate *rate); typedef unsigned int bladerf_bandwidth; int bladerf_set_bandwidth(struct bladerf *dev, bladerf_channel ch, bladerf_bandwidth bandwidth, bladerf_bandwidth *actual); int bladerf_get_bandwidth(struct bladerf *dev, bladerf_channel ch, bladerf_bandwidth *bandwidth); int bladerf_get_bandwidth_range(struct bladerf *dev, bladerf_channel ch, const struct bladerf_range **range); typedef uint64_t bladerf_frequency; int bladerf_select_band(struct bladerf *dev, bladerf_channel ch, bladerf_frequency frequency); int bladerf_set_frequency(struct bladerf *dev, bladerf_channel ch, bladerf_frequency frequency); int bladerf_get_frequency(struct bladerf *dev, bladerf_channel ch, bladerf_frequency *frequency); int bladerf_get_frequency_range(struct bladerf *dev, bladerf_channel ch, const struct bladerf_range **range); typedef enum { BLADERF_LB_NONE = 0, BLADERF_LB_FIRMWARE, BLADERF_LB_BB_TXLPF_RXVGA2, BLADERF_LB_BB_TXVGA1_RXVGA2, BLADERF_LB_BB_TXLPF_RXLPF, BLADERF_LB_BB_TXVGA1_RXLPF, BLADERF_LB_RF_LNA1, BLADERF_LB_RF_LNA2, BLADERF_LB_RF_LNA3, BLADERF_LB_RFIC_BIST } bladerf_loopback; struct bladerf_loopback_modes { const char *name; bladerf_loopback mode; }; int bladerf_get_loopback_modes(struct bladerf *dev, const struct bladerf_loopback_modes **modes); bool bladerf_is_loopback_mode_supported(struct bladerf *dev, bladerf_loopback mode); int bladerf_set_loopback(struct bladerf *dev, bladerf_loopback lb); int bladerf_get_loopback(struct bladerf *dev, bladerf_loopback *lb); typedef enum { BLADERF_TRIGGER_ROLE_INVALID = -1, BLADERF_TRIGGER_ROLE_DISABLED, BLADERF_TRIGGER_ROLE_MASTER, BLADERF_TRIGGER_ROLE_SLAVE } bladerf_trigger_role; typedef enum { BLADERF_TRIGGER_INVALID = -1, BLADERF_TRIGGER_J71_4, BLADERF_TRIGGER_J51_1, BLADERF_TRIGGER_MINI_EXP_1, BLADERF_TRIGGER_USER_0 = 128, BLADERF_TRIGGER_USER_1, BLADERF_TRIGGER_USER_2, BLADERF_TRIGGER_USER_3, BLADERF_TRIGGER_USER_4, BLADERF_TRIGGER_USER_5, BLADERF_TRIGGER_USER_6, BLADERF_TRIGGER_USER_7 } bladerf_trigger_signal; struct bladerf_trigger { bladerf_channel channel; bladerf_trigger_role role; bladerf_trigger_signal signal; uint64_t options; }; int bladerf_trigger_init(struct bladerf *dev, bladerf_channel ch, bladerf_trigger_signal signal, struct bladerf_trigger *trigger); int bladerf_trigger_arm(struct bladerf *dev, const struct bladerf_trigger *trigger, bool arm, uint64_t resv1, uint64_t resv2); int bladerf_trigger_fire(struct bladerf *dev, const struct bladerf_trigger *trigger); int bladerf_trigger_state(struct bladerf *dev, const struct bladerf_trigger *trigger, bool *is_armed, bool *has_fired, bool *fire_requested, uint64_t *resv1, uint64_t *resv2); typedef enum { BLADERF_RX_MUX_INVALID = -1, BLADERF_RX_MUX_BASEBAND = 0x0, BLADERF_RX_MUX_12BIT_COUNTER = 0x1, BLADERF_RX_MUX_32BIT_COUNTER = 0x2, BLADERF_RX_MUX_DIGITAL_LOOPBACK = 0x4 } bladerf_rx_mux; int bladerf_set_rx_mux(struct bladerf *dev, bladerf_rx_mux mux); int bladerf_get_rx_mux(struct bladerf *dev, bladerf_rx_mux *mode); typedef uint64_t bladerf_timestamp; struct bladerf_quick_tune { union { struct { uint8_t freqsel; uint8_t vcocap; uint16_t nint; uint32_t nfrac; uint8_t flags; uint8_t xb_gpio; }; struct { uint16_t nios_profile; uint8_t rffe_profile; uint8_t port; uint8_t spdt; }; }; }; int bladerf_schedule_retune(struct bladerf *dev, bladerf_channel ch, bladerf_timestamp timestamp, bladerf_frequency frequency, struct bladerf_quick_tune *quick_tune); int bladerf_cancel_scheduled_retunes(struct bladerf *dev, bladerf_channel ch); int bladerf_get_quick_tune(struct bladerf *dev, bladerf_channel ch, struct bladerf_quick_tune *quick_tune); typedef int16_t bladerf_correction_value; typedef enum { BLADERF_CORR_DCOFF_I, BLADERF_CORR_DCOFF_Q, BLADERF_CORR_PHASE, BLADERF_CORR_GAIN } bladerf_correction; int bladerf_set_correction(struct bladerf *dev, bladerf_channel ch, bladerf_correction corr, bladerf_correction_value value); int bladerf_get_correction(struct bladerf *dev, bladerf_channel ch, bladerf_correction corr, bladerf_correction_value *value); typedef enum { BLADERF_FORMAT_SC16_Q11, BLADERF_FORMAT_SC16_Q11_META, BLADERF_FORMAT_PACKET_META, BLADERF_FORMAT_SC8_Q7, BLADERF_FORMAT_SC8_Q7_META } bladerf_format; struct bladerf_metadata { bladerf_timestamp timestamp; uint32_t flags; uint32_t status; unsigned int actual_count; uint8_t reserved[32]; }; int bladerf_interleave_stream_buffer(bladerf_channel_layout layout, bladerf_format format, unsigned int buffer_size, void *samples); int bladerf_deinterleave_stream_buffer(bladerf_channel_layout layout, bladerf_format format, unsigned int buffer_size, void *samples); int bladerf_enable_module(struct bladerf *dev, bladerf_channel ch, bool enable); int bladerf_get_timestamp(struct bladerf *dev, bladerf_direction dir, bladerf_timestamp *timestamp); int bladerf_sync_config(struct bladerf *dev, bladerf_channel_layout layout, bladerf_format format, unsigned int num_buffers, unsigned int buffer_size, unsigned int num_transfers, unsigned int stream_timeout); int bladerf_sync_tx(struct bladerf *dev, const void *samples, unsigned int num_samples, struct bladerf_metadata *metadata, unsigned int timeout_ms); int bladerf_sync_rx(struct bladerf *dev, void *samples, unsigned int num_samples, struct bladerf_metadata *metadata, unsigned int timeout_ms); struct bladerf_stream; typedef void *(*bladerf_stream_cb)(struct bladerf *dev, struct bladerf_stream *stream, struct bladerf_metadata *meta, void *samples, size_t num_samples, void *user_data); int bladerf_init_stream(struct bladerf_stream **stream, struct bladerf *dev, bladerf_stream_cb callback, void ***buffers, size_t num_buffers, bladerf_format format, size_t samples_per_buffer, size_t num_transfers, void *user_data); int bladerf_stream(struct bladerf_stream *stream, bladerf_channel_layout layout); int bladerf_submit_stream_buffer(struct bladerf_stream *stream, void *buffer, unsigned int timeout_ms); int bladerf_submit_stream_buffer_nb(struct bladerf_stream *stream, void *buffer); void bladerf_deinit_stream(struct bladerf_stream *stream); int bladerf_set_stream_timeout(struct bladerf *dev, bladerf_direction dir, unsigned int timeout); int bladerf_get_stream_timeout(struct bladerf *dev, bladerf_direction dir, unsigned int *timeout); int bladerf_flash_firmware(struct bladerf *dev, const char *firmware); int bladerf_load_fpga(struct bladerf *dev, const char *fpga); int bladerf_flash_fpga(struct bladerf *dev, const char *fpga_image); int bladerf_erase_stored_fpga(struct bladerf *dev); int bladerf_device_reset(struct bladerf *dev); int bladerf_get_fw_log(struct bladerf *dev, const char *filename); int bladerf_jump_to_bootloader(struct bladerf *dev); int bladerf_get_bootloader_list(struct bladerf_devinfo **list); int bladerf_load_fw_from_bootloader(const char *device_identifier, bladerf_backend backend, uint8_t bus, uint8_t addr, const char *file); typedef enum { BLADERF_IMAGE_TYPE_INVALID = -1, BLADERF_IMAGE_TYPE_RAW, BLADERF_IMAGE_TYPE_FIRMWARE, BLADERF_IMAGE_TYPE_FPGA_40KLE, BLADERF_IMAGE_TYPE_FPGA_115KLE, BLADERF_IMAGE_TYPE_FPGA_A4, BLADERF_IMAGE_TYPE_FPGA_A9, BLADERF_IMAGE_TYPE_CALIBRATION, BLADERF_IMAGE_TYPE_RX_DC_CAL, BLADERF_IMAGE_TYPE_TX_DC_CAL, BLADERF_IMAGE_TYPE_RX_IQ_CAL, BLADERF_IMAGE_TYPE_TX_IQ_CAL, BLADERF_IMAGE_TYPE_FPGA_A5 } bladerf_image_type; struct bladerf_image { char magic[8]; /* Original: char magic[7 + 1]; */ uint8_t checksum[32]; struct bladerf_version version; uint64_t timestamp; char serial[34]; /* Original: char serial[33 + 1]; */ char reserved[128]; bladerf_image_type type; uint32_t address; uint32_t length; uint8_t *data; }; struct bladerf_image *bladerf_alloc_image(struct bladerf *dev, bladerf_image_type type, uint32_t address, uint32_t length); struct bladerf_image *bladerf_alloc_cal_image(struct bladerf *dev, bladerf_fpga_size fpga_size, uint16_t vctcxo_trim); void bladerf_free_image(struct bladerf_image *image); int bladerf_image_write(struct bladerf *dev, struct bladerf_image *image, const char *file); int bladerf_image_read(struct bladerf_image *image, const char *file); typedef enum { BLADERF_VCTCXO_TAMER_INVALID = -1, BLADERF_VCTCXO_TAMER_DISABLED = 0, BLADERF_VCTCXO_TAMER_1_PPS = 1, BLADERF_VCTCXO_TAMER_10_MHZ = 2 } bladerf_vctcxo_tamer_mode; int bladerf_set_vctcxo_tamer_mode(struct bladerf *dev, bladerf_vctcxo_tamer_mode mode); int bladerf_get_vctcxo_tamer_mode(struct bladerf *dev, bladerf_vctcxo_tamer_mode *mode); int bladerf_get_vctcxo_trim(struct bladerf *dev, uint16_t *trim); int bladerf_trim_dac_write(struct bladerf *dev, uint16_t val); int bladerf_trim_dac_read(struct bladerf *dev, uint16_t *val); typedef enum { BLADERF_TUNING_MODE_INVALID = -1, BLADERF_TUNING_MODE_HOST, BLADERF_TUNING_MODE_FPGA } bladerf_tuning_mode; int bladerf_set_tuning_mode(struct bladerf *dev, bladerf_tuning_mode mode); int bladerf_get_tuning_mode(struct bladerf *dev, bladerf_tuning_mode *mode); int bladerf_read_trigger(struct bladerf *dev, bladerf_channel ch, bladerf_trigger_signal signal, uint8_t *val); int bladerf_write_trigger(struct bladerf *dev, bladerf_channel ch, bladerf_trigger_signal signal, uint8_t val); int bladerf_wishbone_master_read(struct bladerf *dev, uint32_t addr, uint32_t *data); int bladerf_wishbone_master_write(struct bladerf *dev, uint32_t addr, uint32_t val); int bladerf_config_gpio_read(struct bladerf *dev, uint32_t *val); int bladerf_config_gpio_write(struct bladerf *dev, uint32_t val); int bladerf_erase_flash(struct bladerf *dev, uint32_t erase_block, uint32_t count); int bladerf_erase_flash_bytes(struct bladerf *dev, uint32_t address, uint32_t length); int bladerf_read_flash(struct bladerf *dev, uint8_t *buf, uint32_t page, uint32_t count); int bladerf_read_flash_bytes(struct bladerf *dev, uint8_t *buf, uint32_t address, uint32_t bytes); int bladerf_write_flash(struct bladerf *dev, const uint8_t *buf, uint32_t page, uint32_t count); int bladerf_write_flash_bytes(struct bladerf *dev, const uint8_t *buf, uint32_t address, uint32_t length); int bladerf_lock_otp(struct bladerf *dev); int bladerf_read_otp(struct bladerf *dev, uint8_t *buf); int bladerf_write_otp(struct bladerf *dev, uint8_t *buf); int bladerf_set_rf_port(struct bladerf *dev, bladerf_channel ch, const char *port); int bladerf_get_rf_port(struct bladerf *dev, bladerf_channel ch, const char **port); int bladerf_get_rf_ports(struct bladerf *dev, bladerf_channel ch, const char **ports, unsigned int count); typedef enum { BLADERF_FEATURE_DEFAULT = 0, BLADERF_FEATURE_OVERSAMPLE } bladerf_feature; int bladerf_enable_feature(struct bladerf *dev, bladerf_feature feature, bool enable); int bladerf_get_feature(struct bladerf *dev, bladerf_feature *feature); typedef enum { BLADERF_XB_NONE = 0, BLADERF_XB_100, BLADERF_XB_200, BLADERF_XB_300 } bladerf_xb; int bladerf_expansion_attach(struct bladerf *dev, bladerf_xb xb); int bladerf_expansion_get_attached(struct bladerf *dev, bladerf_xb *xb); typedef enum { BLADERF_LOG_LEVEL_VERBOSE, BLADERF_LOG_LEVEL_DEBUG, BLADERF_LOG_LEVEL_INFO, BLADERF_LOG_LEVEL_WARNING, BLADERF_LOG_LEVEL_ERROR, BLADERF_LOG_LEVEL_CRITICAL, BLADERF_LOG_LEVEL_SILENT } bladerf_log_level; void bladerf_log_set_verbosity(bladerf_log_level level); void bladerf_version(struct bladerf_version *version); const char *bladerf_strerror(int error); typedef enum { BLADERF_LNA_GAIN_UNKNOWN, BLADERF_LNA_GAIN_BYPASS, BLADERF_LNA_GAIN_MID, BLADERF_LNA_GAIN_MAX } bladerf_lna_gain; int bladerf_set_txvga2(struct bladerf *dev, int gain); int bladerf_get_txvga2(struct bladerf *dev, int *gain); int bladerf_set_txvga1(struct bladerf *dev, int gain); int bladerf_get_txvga1(struct bladerf *dev, int *gain); int bladerf_set_lna_gain(struct bladerf *dev, bladerf_lna_gain gain); int bladerf_get_lna_gain(struct bladerf *dev, bladerf_lna_gain *gain); int bladerf_set_rxvga1(struct bladerf *dev, int gain); int bladerf_get_rxvga1(struct bladerf *dev, int *gain); int bladerf_set_rxvga2(struct bladerf *dev, int gain); int bladerf_get_rxvga2(struct bladerf *dev, int *gain); typedef enum { BLADERF_SAMPLING_UNKNOWN, BLADERF_SAMPLING_INTERNAL, BLADERF_SAMPLING_EXTERNAL } bladerf_sampling; int bladerf_set_sampling(struct bladerf *dev, bladerf_sampling sampling); int bladerf_get_sampling(struct bladerf *dev, bladerf_sampling *sampling); typedef enum { BLADERF_LPF_NORMAL, BLADERF_LPF_BYPASSED, BLADERF_LPF_DISABLED } bladerf_lpf_mode; int bladerf_set_lpf_mode(struct bladerf *dev, bladerf_channel ch, bladerf_lpf_mode mode); int bladerf_get_lpf_mode(struct bladerf *dev, bladerf_channel ch, bladerf_lpf_mode *mode); typedef enum { BLADERF_SMB_MODE_INVALID = -1, BLADERF_SMB_MODE_DISABLED, BLADERF_SMB_MODE_OUTPUT, BLADERF_SMB_MODE_INPUT, BLADERF_SMB_MODE_UNAVAILBLE } bladerf_smb_mode; int bladerf_set_smb_mode(struct bladerf *dev, bladerf_smb_mode mode); int bladerf_get_smb_mode(struct bladerf *dev, bladerf_smb_mode *mode); int bladerf_set_rational_smb_frequency(struct bladerf *dev, struct bladerf_rational_rate *rate, struct bladerf_rational_rate *actual); int bladerf_set_smb_frequency(struct bladerf *dev, uint32_t rate, uint32_t *actual); int bladerf_get_rational_smb_frequency(struct bladerf *dev, struct bladerf_rational_rate *rate); int bladerf_get_smb_frequency(struct bladerf *dev, unsigned int *rate); int bladerf_expansion_gpio_read(struct bladerf *dev, uint32_t *val); int bladerf_expansion_gpio_write(struct bladerf *dev, uint32_t val); int bladerf_expansion_gpio_masked_write(struct bladerf *dev, uint32_t mask, uint32_t value); int bladerf_expansion_gpio_dir_read(struct bladerf *dev, uint32_t *outputs); int bladerf_expansion_gpio_dir_write(struct bladerf *dev, uint32_t outputs); int bladerf_expansion_gpio_dir_masked_write(struct bladerf *dev, uint32_t mask, uint32_t outputs); typedef enum { BLADERF_XB200_50M = 0, BLADERF_XB200_144M, BLADERF_XB200_222M, BLADERF_XB200_CUSTOM, BLADERF_XB200_AUTO_1DB, BLADERF_XB200_AUTO_3DB } bladerf_xb200_filter; typedef enum { BLADERF_XB200_BYPASS = 0, BLADERF_XB200_MIX } bladerf_xb200_path; typedef enum { BLADERF_XB300_TRX_INVAL = -1, BLADERF_XB300_TRX_TX = 0, BLADERF_XB300_TRX_RX, BLADERF_XB300_TRX_UNSET } bladerf_xb300_trx; typedef enum { BLADERF_XB300_AMP_INVAL = -1, BLADERF_XB300_AMP_PA = 0, BLADERF_XB300_AMP_LNA, BLADERF_XB300_AMP_PA_AUX } bladerf_xb300_amplifier; int bladerf_xb200_set_filterbank(struct bladerf *dev, bladerf_channel ch, bladerf_xb200_filter filter); int bladerf_xb200_get_filterbank(struct bladerf *dev, bladerf_channel ch, bladerf_xb200_filter *filter); int bladerf_xb200_set_path(struct bladerf *dev, bladerf_channel ch, bladerf_xb200_path path); int bladerf_xb200_get_path(struct bladerf *dev, bladerf_channel ch, bladerf_xb200_path *path); int bladerf_xb300_set_trx(struct bladerf *dev, bladerf_xb300_trx trx); int bladerf_xb300_get_trx(struct bladerf *dev, bladerf_xb300_trx *trx); int bladerf_xb300_set_amplifier_enable(struct bladerf *dev, bladerf_xb300_amplifier amp, bool enable); int bladerf_xb300_get_amplifier_enable(struct bladerf *dev, bladerf_xb300_amplifier amp, bool *enable); int bladerf_xb300_get_output_power(struct bladerf *dev, float *val); typedef enum { BLADERF_DC_CAL_INVALID = -1, BLADERF_DC_CAL_LPF_TUNING, BLADERF_DC_CAL_TX_LPF, BLADERF_DC_CAL_RX_LPF, BLADERF_DC_CAL_RXVGA2 } bladerf_cal_module; int bladerf_calibrate_dc(struct bladerf *dev, bladerf_cal_module module); int bladerf_dac_write(struct bladerf *dev, uint16_t val); int bladerf_dac_read(struct bladerf *dev, uint16_t *val); int bladerf_si5338_read(struct bladerf *dev, uint8_t address, uint8_t *val); int bladerf_si5338_write(struct bladerf *dev, uint8_t address, uint8_t val); int bladerf_lms_read(struct bladerf *dev, uint8_t address, uint8_t *val); int bladerf_lms_write(struct bladerf *dev, uint8_t address, uint8_t val); struct bladerf_lms_dc_cals { int16_t lpf_tuning; int16_t tx_lpf_i; int16_t tx_lpf_q; int16_t rx_lpf_i; int16_t rx_lpf_q; int16_t dc_ref; int16_t rxvga2a_i; int16_t rxvga2a_q; int16_t rxvga2b_i; int16_t rxvga2b_q; }; int bladerf_lms_set_dc_cals(struct bladerf *dev, const struct bladerf_lms_dc_cals *dc_cals); int bladerf_lms_get_dc_cals(struct bladerf *dev, struct bladerf_lms_dc_cals *dc_cals); int bladerf_xb_spi_write(struct bladerf *dev, uint32_t val); int bladerf_get_bias_tee(struct bladerf *dev, bladerf_channel ch, bool *enable); int bladerf_set_bias_tee(struct bladerf *dev, bladerf_channel ch, bool enable); int bladerf_get_rfic_register(struct bladerf *dev, uint16_t address, uint8_t *val); int bladerf_set_rfic_register(struct bladerf *dev, uint16_t address, uint8_t val); int bladerf_get_rfic_temperature(struct bladerf *dev, float *val); int bladerf_get_rfic_rssi(struct bladerf *dev, bladerf_channel ch, int32_t *pre_rssi, int32_t *sym_rssi); int bladerf_get_rfic_ctrl_out(struct bladerf *dev, uint8_t *ctrl_out); typedef enum { BLADERF_RFIC_RXFIR_BYPASS = 0, BLADERF_RFIC_RXFIR_CUSTOM, BLADERF_RFIC_RXFIR_DEC1, BLADERF_RFIC_RXFIR_DEC2, BLADERF_RFIC_RXFIR_DEC4 } bladerf_rfic_rxfir; typedef enum { BLADERF_RFIC_TXFIR_BYPASS = 0, BLADERF_RFIC_TXFIR_CUSTOM, BLADERF_RFIC_TXFIR_INT1, BLADERF_RFIC_TXFIR_INT2, BLADERF_RFIC_TXFIR_INT4 } bladerf_rfic_txfir; int bladerf_get_rfic_rx_fir(struct bladerf *dev, bladerf_rfic_rxfir *rxfir); int bladerf_set_rfic_rx_fir(struct bladerf *dev, bladerf_rfic_rxfir rxfir); int bladerf_get_rfic_tx_fir(struct bladerf *dev, bladerf_rfic_txfir *txfir); int bladerf_set_rfic_tx_fir(struct bladerf *dev, bladerf_rfic_txfir txfir); int bladerf_get_pll_lock_state(struct bladerf *dev, bool *locked); int bladerf_get_pll_enable(struct bladerf *dev, bool *enabled); int bladerf_set_pll_enable(struct bladerf *dev, bool enable); int bladerf_get_pll_refclk_range(struct bladerf *dev, const struct bladerf_range **range); int bladerf_get_pll_refclk(struct bladerf *dev, uint64_t *frequency); int bladerf_set_pll_refclk(struct bladerf *dev, uint64_t frequency); int bladerf_get_pll_register(struct bladerf *dev, uint8_t address, uint32_t *val); int bladerf_set_pll_register(struct bladerf *dev, uint8_t address, uint32_t val); typedef enum { BLADERF_UNKNOWN, BLADERF_PS_DC, BLADERF_PS_USB_VBUS } bladerf_power_sources; int bladerf_get_power_source(struct bladerf *dev, bladerf_power_sources *val); typedef enum { CLOCK_SELECT_ONBOARD, CLOCK_SELECT_EXTERNAL } bladerf_clock_select; int bladerf_get_clock_select(struct bladerf *dev, bladerf_clock_select *sel); int bladerf_set_clock_select(struct bladerf *dev, bladerf_clock_select sel); int bladerf_get_clock_output(struct bladerf *dev, bool *state); int bladerf_set_clock_output(struct bladerf *dev, bool enable); typedef enum { BLADERF_PMIC_CONFIGURATION, BLADERF_PMIC_VOLTAGE_SHUNT, BLADERF_PMIC_VOLTAGE_BUS, BLADERF_PMIC_POWER, BLADERF_PMIC_CURRENT, BLADERF_PMIC_CALIBRATION } bladerf_pmic_register; int bladerf_get_pmic_register(struct bladerf *dev, bladerf_pmic_register reg, void *val); typedef struct { uint32_t tx1_rfic_port; uint32_t tx1_spdt_port; uint32_t tx2_rfic_port; uint32_t tx2_spdt_port; uint32_t rx1_rfic_port; uint32_t rx1_spdt_port; uint32_t rx2_rfic_port; uint32_t rx2_spdt_port; } bladerf_rf_switch_config; int bladerf_get_rf_switch_config(struct bladerf *dev, bladerf_rf_switch_config *config); """ bladeRF-2024.05/host/libraries/libbladeRF_bindings/python/bladerf/_tool.py000066400000000000000000000315231457144405000263770ustar00rootroot00000000000000# Copyright (c) 2013-2018 Nuand LLC # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. import io import argparse from bladerf import _bladerf __version__ = "1.1.0" def _bool_to_onoff(val): if val is None: return "Unsupported" elif val: return "On" else: return "Off" def _strify_list(l): return ', '.join([str(x) for x in l]) def _print_channel_details(ch, verbose): print(" {}:".format(ch)) if verbose: print(" Is TX ", ch.is_tx) print(" Gain ", ch.gain) if not ch.is_tx: print(" Gain Mode ", ch.gain_mode) if verbose: print(" Modes ", _strify_list(ch.gain_modes)) if not ch.is_tx: print(" Symbol RSSI ", ch.symbol_rssi) if verbose: print(" Struct ", repr(ch.rssi)) print(" Frequency ", ch.frequency) if verbose: print(" Range ", repr(ch.frequency_range)) print(" Bandwidth ", ch.bandwidth) if verbose: print(" Range ", repr(ch.bandwidth_range)) print(" Sample Rate ", ch.sample_rate) if verbose: print(" Range ", repr(ch.sample_rate_range)) if verbose: print(" RF Port ", ch.rf_port) print(" Ports ", _strify_list(ch.rf_ports)) print(" Bias-T Power ", _bool_to_onoff(ch.bias_tee)) def _print_cmd_info(device=None, devinfo=None, verbose=False): b = _bladerf.BladeRF(device, devinfo) devinfo = b.get_devinfo() flash_size, fs_guessed = b.flash_size if verbose: print("Object ", repr(b)) print("Board Name ", b.board_name) print("Device Speed ", b.device_speed.name) print("FPGA Size ", b.fpga_size) print("FPGA Configured ", b.fpga_configured) if b.is_fpga_configured(): print("FPGA Version ", b.fpga_version) else: print("FPGA Version ", "Not Configured") print("Flash Size ", (flash_size >> 17), "Mbit", "(assumed)" if fs_guessed else "") print("Firmware Version ", b.fw_version) if verbose: print("Clock Select ", b.clock_select) print("Clock Output ", _bool_to_onoff(b.clock_output)) print("Power Source ", b.power_source) print("Bus Voltage {:.3f} V".format(b.bus_voltage or 0)) print("Bus Current {:.3f} A".format(b.bus_current or 0)) print("Bus Power {:.3f} W".format(b.bus_power or 0)) print("RFIC temperature {:.3f} C".format(b.rfic_temperature or 0)) print("Loopback ", b.loopback) print(" Modes ", _strify_list(b.loopback_modes)) print("RX Mux ", b.rx_mux) print("PLL Mode ", _bool_to_onoff(b.pll_enable)) if b.pll_enable: print("PLL Refclk ", b.pll_refclk) print("PLL Locked ", _bool_to_onoff(b.pll_locked)) print("RX Channel Count ", b.rx_channel_count) for c in range(b.rx_channel_count): ch = b.Channel(_bladerf.CHANNEL_RX(c)) _print_channel_details(ch, verbose) print("TX Channel Count ", b.tx_channel_count) for c in range(b.tx_channel_count): ch = b.Channel(_bladerf.CHANNEL_TX(c)) _print_channel_details(ch, verbose) b.close() def cmd_info(device=None, verbose=False, **kwargs): if device is None: try: devinfos = _bladerf.get_device_list() except _bladerf.NoDevError: print("No bladeRF devices available.") return print("*** Devices found:", len(devinfos)) for idx, dev in enumerate(devinfos): print() print("*** Device", idx) _print_cmd_info(devinfo=dev, verbose=verbose) else: _print_cmd_info(device=device, verbose=verbose) def cmd_probe(**kwargs): try: devinfos = _bladerf.get_device_list() print("\n".join([str(devinfo) for devinfo in devinfos])) except _bladerf.NoDevError: print("No bladeRF devices available.") try: devinfos = _bladerf.get_bootloader_list() print("*** Detected one or more FX3-based devices in bootloader mode:") print("Bootloader", "\n".join([str(devinfo) for devinfo in devinfos])) except _bladerf.NoDevError: pass def cmd_flash_fw(path, device=None, **kwargs): b = _bladerf.BladeRF(device) b.flash_firmware(path) b.close() def cmd_recover_fw(path, device=None, **kwargs): if device is None: # Let's guess print("No device specified, trying to find one...") try: devinfos = _bladerf.get_bootloader_list() except _bladerf.NoDevError: print("No devices in bootloader recovery mode found.") return if len(devinfos) > 1: print("Multiple devices in bootloader recovery mode found.") print("Please specify one:") print("\n".join([str(devinfo) for devinfo in devinfos])) return device = "{backend}:device={usb_bus}:{usb_addr}".format( **devinfos[0]._asdict()) print("Choosing", device) print(devinfos[0]) print("Calling load_fw_from_bootloader...") _bladerf.load_fw_from_bootloader(device_identifier=device, file=path) print("Complete") def cmd_load_fpga(path, device=None, **kwargs): b = _bladerf.BladeRF(device) b.load_fpga(path) b.close() def cmd_flash_fpga(path, device=None, **kwargs): b = _bladerf.BladeRF(device) b.flash_fpga(path) b.close() def cmd_erase_fpga(device=None, **kwargs): b = _bladerf.BladeRF(device) b.erase_stored_fpga() b.close() def cmd_rx(outfile, frequency, rate, gain, num_samples, device=None, channel=_bladerf.CHANNEL_RX(0), **kwargs): b = _bladerf.BladeRF(device) ch = b.Channel(channel) # Get underlying binary stream for stdout case if isinstance(outfile, io.TextIOWrapper): outfile = outfile.buffer # Configure BladeRF ch.frequency = frequency ch.sample_rate = rate ch.gain = gain # Setup synchronous stream b.sync_config(layout=_bladerf.ChannelLayout.RX_X1, fmt=_bladerf.Format.SC16_Q11, num_buffers=16, buffer_size=8192, num_transfers=8, stream_timeout=3500) # Enable module ch.enable = True # Create buffer bytes_per_sample = 4 buf = bytearray(1024*bytes_per_sample) num_samples_read = 0 try: while True: if num_samples > 0 and num_samples_read == num_samples: break elif num_samples > 0: num = min(len(buf)//bytes_per_sample, num_samples-num_samples_read) else: num = len(buf)//bytes_per_sample # Read into buffer b.sync_rx(buf, num) num_samples_read += num # Write to file outfile.write(buf[:num*bytes_per_sample]) except KeyboardInterrupt: pass # Disable module ch.enable = False b.close() outfile.close() def cmd_tx(infile, frequency, rate, gain, device=None, channel=_bladerf.CHANNEL_TX(0), **kwargs): b = _bladerf.BladeRF(device) ch = b.Channel(channel) # Get underlying binary stream for stdin case infile = infile.buffer if isinstance(infile, io.TextIOWrapper) else infile # Configure BladeRF ch.frequency = frequency ch.sample_rate = rate ch.gain = gain # Setup stream b.sync_config(layout=_bladerf.ChannelLayout.TX_X1, fmt=_bladerf.Format.SC16_Q11, num_buffers=16, buffer_size=8192, num_transfers=8, stream_timeout=3500) # Enable module ch.enable = True # Create buffer bytes_per_sample = 4 buf = bytearray(1024*bytes_per_sample) try: while True: # Read samples from file into buf num = infile.readinto(buf) if num == 0: break # Convert number of bytes read to samples num //= bytes_per_sample # Write to bladeRF b.sync_tx(buf, num) except KeyboardInterrupt: pass # Disable module ch.enable = False b.close() infile.close() def cmd_version(**kwargs): print("libbladeRF version: ", _bladerf.version()) print("bladerf-tool version: ", "v" + __version__) def main(): parser = argparse.ArgumentParser() subparsers = parser.add_subparsers(title='subcommands') parser.add_argument('--device', '-d', help='device identifier') parser_info = subparsers.add_parser('info', help='get device info') parser_info.add_argument('--verbose', '-v', help='print more info', action='store_true') parser_info.set_defaults(func=cmd_info) parser_probe = subparsers.add_parser('probe', help='probe for devices') parser_probe.set_defaults(func=cmd_probe) parser_flash_fw = subparsers.add_parser('flash_fw', help='flash firmware') parser_flash_fw.add_argument('path', help='firmware image path') parser_flash_fw.set_defaults(func=cmd_flash_fw) parser_recover_fw = subparsers.add_parser('recover_fw', help='recover firmware') parser_recover_fw.add_argument('path', help='firmware image path') parser_recover_fw.set_defaults(func=cmd_recover_fw) parser_load_fpga = subparsers.add_parser('load_fpga', help='load fpga') parser_load_fpga.add_argument('path', help='fpga image path') parser_load_fpga.set_defaults(func=cmd_load_fpga) parser_flash_fpga = subparsers.add_parser('flash_fpga', help='flash fpga') parser_flash_fpga.add_argument('path', help='fpga image path') parser_flash_fpga.set_defaults(func=cmd_flash_fpga) parser_erase_fpga = subparsers.add_parser('erase_fpga', help='erase fpga') parser_erase_fpga.set_defaults(func=cmd_erase_fpga) parser_rx = subparsers.add_parser('rx', help='receive samples', description='Receive IQ samples. ' 'Sample format is FIXME.') parser_rx.add_argument('outfile', metavar='filename', help="IQ samples filename ('-' for stdout)", type=argparse.FileType('wb')) parser_rx.add_argument('frequency', help='frequency in Hz', type=float) parser_rx.add_argument('rate', help='sample rate in Hz', type=float) parser_rx.add_argument('--gain', '-g', help='gain in dB (default 0)', type=float, default=0) parser_rx.add_argument('--num-samples', '-n', help='number of samples (default 0 for inf)', type=int, default=0) parser_rx.set_defaults(func=cmd_rx) parser_tx = subparsers.add_parser('tx', help='transmit samples', description='Transmit IQ samples. ' 'Sample format is FIXME.') parser_tx.add_argument('infile', metavar='filename', help="IQ samples filename ('-' for stdin)", type=argparse.FileType('rb')) parser_tx.add_argument('frequency', help='frequency in Hz', type=float) parser_tx.add_argument('rate', help='sample rate in Hz', type=float) parser_tx.add_argument('--gain', '-g', help='gain in dB (default 0)', type=float, default=0) parser_tx.set_defaults(func=cmd_tx) parser_version = subparsers.add_parser('version', help='print version info') parser_version.set_defaults(func=cmd_version) args = parser.parse_args() if 'func' not in args: parser.print_help() parser.exit() args.func(**vars(args)) if __name__ == "__main__": main() bladeRF-2024.05/host/libraries/libbladeRF_bindings/python/scripts/000077500000000000000000000000001457144405000247755ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_bindings/python/scripts/import_header.py000066400000000000000000000131671457144405000302010ustar00rootroot00000000000000# Copyright (c) 2013-2018 Nuand LLC # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. __doc__ = """ Reads in a libbladeRF header file and produces a string ready for CFFI to parse. This is NOT a general-purpose tool; it should only be used on libbladeRF, as it makes dangerous assumptions. """ from pycparser import parse_file, c_generator import os import sys import textwrap # This is the default for the Ubuntu python3-pycparser package FAKE_LIBC_INCLUDE_DIR = "/usr/share/python3-pycparser/fake_libc_include" # Lines matching these will be omitted from the output for brevity STOPLIST = [ "typedef struct Display Display;", "typedef unsigned long XID;", "typedef unsigned long VisualID;", "typedef XID Window;", "typedef void *MirEGLNativeWindowType;", "typedef void *MirEGLNativeDisplayType;", "typedef struct MirConnection MirConnection;", "typedef struct MirSurface MirSurface;", "typedef struct MirSurfaceSpec MirSurfaceSpec;", "typedef struct MirScreencast MirScreencast;", "typedef struct MirPromptSession MirPromptSession;", "typedef struct MirBufferStream MirBufferStream;", "typedef struct MirPersistentId MirPersistentId;", "typedef struct MirBlob MirBlob;", "typedef struct MirDisplayConfig MirDisplayConfig;", "typedef struct xcb_connection_t xcb_connection_t;", "typedef uint32_t xcb_window_t;", "typedef uint32_t xcb_visualid_t;", ] class MyCGenerator(c_generator.CGenerator): # Clean up enumeration printouts... def _generate_enum_body(self, members): # `[:-2] + '\n'` removes the final `,` from the enumerator list return ''.join(self.visit(value) for value in members)[:-2] + '\n' def _generate_enum(self, n): """ Generates code for structs, unions, and enums. name should be 'struct', 'union', or 'enum'. """ members = () if n.values is None else n.values.enumerators s = 'enum ' + (n.name or '') if members: s += '\n' s += self._make_indent() self.indent_level += 2 s += '{\n' s += self._generate_enum_body(members) self.indent_level -= 2 s += self._make_indent() + '}' return s def visit_Enumerator(self, n): val = self.visit(n.value) return '{indent}{name}{equals}{value},\n'.format( indent=self._make_indent(), name=n.name, equals=" = " if val else "", value=val, ) def visit_Enum(self, n): return self._generate_enum(n) def parse_header(filename): return parse_file(filename, use_cpp=True, cpp_args=[ r'-I{}'.format(os.path.dirname(filename)), r'-I{}'.format(FAKE_LIBC_INCLUDE_DIR), r'-D_DOXYGEN_ONLY_']) def ast_to_c(ast): gen = MyCGenerator() return gen.visit(ast) def generate_cdef(data, print_omitted_lines=False): for line in data.split('\n'): # Filter typedefs included from system headers if 'bladerf' not in line and ('typedef int' in line or 'typedef _Bool' in line or line in STOPLIST): if print_omitted_lines: line = "/* Omitted: {} */".format(line) else: line = "" # If we have an expression like: # char magic[BLADERF_IMAGE_MAGIC_LEN + 1]; # We need to boil it down to: # char magic[8]; if '[' in line and ']' in line: bstart = line.find('[')+1 bend = line.find(']') prestuff = line[:bstart] poststuff = line[bend:] stuff = line[bstart:bend] # XXX: this is wicked dangerous to run on untrusted code evalstuff = str(eval(stuff)) newline = prestuff + evalstuff + poststuff if newline != line: line = "{} /* Original: {}{}{} */".format( newline, prestuff.strip(), stuff, poststuff) if line: yield line.rstrip() def main(): if len(sys.argv) < 2: print("usage: {} headerfile.h [headerfile.h...]".format(sys.argv[0])) sys.exit(1) for fn in sys.argv[1:]: f = parse_header(fn) fs = ast_to_c(f) print("# Generated from {} by {}".format( os.path.basename(fn), os.path.basename(sys.argv[0]))) print() print("header = \"\"\"") for l in generate_cdef(fs): print(' ' + '\n '.join(textwrap.wrap(l))) print("\"\"\"") if __name__ == '__main__': main() bladeRF-2024.05/host/libraries/libbladeRF_bindings/python/setup.py000066400000000000000000000033131457144405000250200ustar00rootroot00000000000000"""A setuptools based setup module. See: https://packaging.python.org/en/latest/distributing.html https://github.com/pypa/sampleproject """ # Always prefer setuptools over distutils from setuptools import setup, find_packages # To use a consistent encoding from codecs import open from os import path here = path.abspath(path.dirname(__file__)) # Get the long description from the README file with open(path.join(here, 'README.md'), encoding='utf-8') as f: long_description = f.read() setup( name='bladerf', version='1.3.0', description='CFFI-based Python 3 binding to libbladeRF', long_description=long_description, url='https://github.com/Nuand/bladeRF', author='Nuand LLC', author_email='bladerf@nuand.com', license='MIT', python_requires='>=3', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Intended Audience :: End Users/Desktop', 'Intended Audience :: Science/Research', 'Intended Audience :: Telecommunications Industry', 'Topic :: Communications :: Ham Radio', 'Topic :: Scientific/Engineering', 'Topic :: Software Development :: Libraries :: Python Modules', 'License :: OSI Approved :: MIT License', 'Programming Language :: Python :: 3', ], keywords='bladerf sdr cffi radio libbladerf', packages=find_packages(exclude=['contrib', 'docs', 'tests']), install_requires=['cffi'], entry_points={ 'console_scripts': [ 'bladerf-tool=bladerf._tool:main', ], }, project_urls={ 'Bug Reports': 'https://github.com/Nuand/bladeRF/issues', 'Source': 'https://github.com/Nuand/bladeRF', 'Nuand': 'https://nuand.com', }, ) bladeRF-2024.05/host/libraries/libbladeRF_test/000077500000000000000000000000001457144405000211475ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/CMakeLists.txt000066400000000000000000000024411457144405000237100ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.9) add_subdirectory(test_async) add_subdirectory(test_bootloader_recovery) add_subdirectory(test_c) #add_subdirectory(test_config_file) add_subdirectory(test_cpp) add_subdirectory(test_ctrl) add_subdirectory(test_freq_hop) add_subdirectory(test_fw_check) add_subdirectory(test_open) add_subdirectory(test_parse) add_subdirectory(test_peripheral_timing) add_subdirectory(test_repeater) add_subdirectory(test_quick_retune) add_subdirectory(test_repeated_stream) add_subdirectory(test_rx_discont) add_subdirectory(test_scheduled_retune) add_subdirectory(test_sync) add_subdirectory(test_timestamps) add_subdirectory(test_tune_timing) add_subdirectory(test_unused_sync) add_subdirectory(test_version) add_subdirectory(test_digital_loopback) add_subdirectory(test_interleaver) add_subdirectory(test_rx_meta) option(TEST_REGRESSION "Include regression tests" OFF) if(TEST_REGRESSION) add_subdirectory(test_regression) endif() configure_file(requirements.txt ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/requirements.txt FILE_PERMISSIONS OWNER_EXECUTE OWNER_READ COPYONLY) configure_file(setup_env.sh ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/setup_env.sh FILE_PERMISSIONS OWNER_EXECUTE OWNER_READ COPYONLY) bladeRF-2024.05/host/libraries/libbladeRF_test/common/000077500000000000000000000000001457144405000224375ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/common/include/000077500000000000000000000000001457144405000240625ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/common/include/test_common.h000066400000000000000000000037761457144405000265770ustar00rootroot00000000000000#ifndef TEST_COMMON_H_ #define TEST_COMMON_H_ #include #include #include "host_config.h" #include "rel_assert.h" #if BLADERF_OS_WINDOWS # include "clock_gettime.h" #endif /** * Initialize a seed for use with randval_update * * @param[out] state PRNG state * @param[in] seed PRNG seed value. Should not be 0. * */ static inline void randval_init(uint64_t *state, uint64_t seed) { if (seed == 0) { seed = UINT64_MAX; } *state = seed; } /** * Get the next PRNG value, using a simple xorshift implementation * * @param[inout] state PRNG state * * @return next PRNG value */ static inline uint64_t randval_update(uint64_t *state) { assert(*state != 0); (*state) ^= (*state) >> 12; (*state) ^= (*state) << 25; (*state) ^= (*state) >> 27; (*state) *= 0x2545f4914f6cdd1d; return *state; } /** * Calculate an average duration * * @param start Start time * @param end End time * @param iteratations Number of iterations performed timed * * @return average duration, in seconds */ double calc_avg_duration(const struct timespec *start, const struct timespec *end, double iterations); /** * Get a random frequency * * @param[in] * @param[inout] This function updates this PRNG state it with randval_update() */ unsigned int get_rand_freq(uint64_t *prng_state, bool xb200_enabled); /** * Wait for the specified timestamp to occur/pass * * @param[in] dev Device handle * @param[in] module Module to wait on * @param[in] timestamp Time to wait for * @param[in] timeout_ms Approximate max time to wait, in milliseconds * * @return 0 on success, BLADERF_ERR_TIMEOUT if timeout_ms expires, * and return values from bladerf_get_timestamp() if non-zero. */ int wait_for_timestamp(struct bladerf *dev, bladerf_module module, uint64_t timestamp, unsigned int timeout_ms); #endif bladeRF-2024.05/host/libraries/libbladeRF_test/common/src/000077500000000000000000000000001457144405000232265ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/common/src/test_common.c000066400000000000000000000053431457144405000257260ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014-2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include #include "test_common.h" double calc_avg_duration(const struct timespec *start, const struct timespec *end, double iterations) { double start_d = start->tv_sec + start->tv_nsec * 1e-9; double end_d = end->tv_sec + end->tv_nsec * 1e-9; return (end_d - start_d) / iterations; } unsigned int get_rand_freq(uint64_t *prng_state, bool xb200_enabled) { uint64_t tmp; unsigned int min_freq; if (xb200_enabled) { min_freq = BLADERF_FREQUENCY_MIN_XB200; } else { min_freq = BLADERF_FREQUENCY_MIN; } tmp = randval_update(prng_state); tmp = min_freq + tmp % (BLADERF_FREQUENCY_MAX - BLADERF_FREQUENCY_MIN); return (unsigned int) tmp; } int wait_for_timestamp(struct bladerf *dev, bladerf_module module, uint64_t timestamp, unsigned int timeout_ms) { int status; uint64_t curr_ts = 0; unsigned int slept_ms = 0; bool done; //printf("Waiting for 0x%"PRIx64"\r\n", timestamp); do { status = bladerf_get_timestamp(dev, module, &curr_ts); done = (status != 0) || curr_ts >= timestamp; //printf("Now = 0x%"PRIx64", done = %d\r\n", curr_ts , done); if (!done) { if (slept_ms > timeout_ms) { done = true; status = BLADERF_ERR_TIMEOUT; } else { usleep(10000); slept_ms += 10; } } } while (!done); return status; } bladeRF-2024.05/host/libraries/libbladeRF_test/requirements.txt000066400000000000000000000003571457144405000244400ustar00rootroot00000000000000contourpy==1.1.0 cycler==0.11.0 fonttools==4.42.1 kiwisolver==1.4.5 matplotlib==3.7.2 numpy==1.25.2 packaging==23.1 pandas==2.0.3 Pillow==10.0.1 pyparsing==3.0.9 python-dateutil==2.8.2 pytz==2023.3 scipy==1.11.2 six==1.16.0 tzdata==2023.3 bladeRF-2024.05/host/libraries/libbladeRF_test/setup_env.sh000066400000000000000000000011661457144405000235170ustar00rootroot00000000000000#!/bin/bash set -e echo "Creating virtual environment 'nuand'..." python3 -m venv nuand echo "Activating virtual environment 'nuand'..." source nuand/bin/activate echo "Installing Python requirements..." pip3 install --requirement=output/requirements.txt GREEN="\033[32m" RESET="\033[0m" echo -e "${GREEN}\n" echo "###################################################" echo "Python virtual environment successfully installed" echo "###################################################" echo -e "${RESET}" echo "Usage:" echo "$ source nuand/bin/activate" echo "$ python output/libbladeRF_test_txrx_hwloop.py" echo "$ deactivate" bladeRF-2024.05/host/libraries/libbladeRF_test/test_async/000077500000000000000000000000001457144405000233235ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_async/CMakeLists.txt000066400000000000000000000005651457144405000260710ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.5) project(libbladeRF_test_async C) set(INCLUDES ${libbladeRF_SOURCE_DIR}/include ${BLADERF_HOST_COMMON_INCLUDE_DIRS} ) if(MSVC) set(INCLUDES ${INCLUDES} ${MSVC_C99_INCLUDES}) endif() include_directories(${INCLUDES}) add_executable(libbladeRF_test_async main.c) target_link_libraries(libbladeRF_test_async libbladerf_shared) bladeRF-2024.05/host/libraries/libbladeRF_test/test_async/main.c000066400000000000000000000220071457144405000244140ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2013 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include #include #include #include #include #include #include #ifndef DATA_SOURCE # define DATA_SOURCE "/dev/urandom" #endif static bool shutdown_stream = false; unsigned int count = 0; struct test_data { void **buffers; /* Transmit buffers */ size_t num_buffers; /* Number of buffers */ size_t samples_per_buffer; /* Number of samples per buffer */ unsigned int idx; /* The next one that needs to go out */ bladerf_module module; /* Direction */ FILE *fout; /* Output file (RX only) */ ssize_t samples_left; /* Number of samples left */ }; int str2int(const char *str, int min, int max, bool *ok) { long value; char *endptr; errno = 0; value = strtol(str, &endptr, 0); if (errno != 0 || value < (long)min || value > (long)max || endptr == str || *endptr != '\0') { if (ok) { *ok = false; } return 0; } if (ok) { *ok = true; } return (int)value; } void *stream_callback(struct bladerf *dev, struct bladerf_stream *stream, struct bladerf_metadata *metadata, void *samples, size_t num_samples, void *user_data) { struct test_data *my_data = (struct test_data *)user_data; count++ ; if( (count&0xffff) == 0 ) { fprintf( stderr, "Called 0x%8.8x times\n", count ) ; } /* Save off the samples to disk if we are in RX */ if( my_data->module == BLADERF_MODULE_RX ) { size_t i; int16_t *sample = (int16_t *)samples ; for(i = 0; i < num_samples ; i++ ) { *(sample) &= 0xfff ; if( (*sample)&0x800 ) *(sample) |= 0xf000 ; *(sample+1) &= 0xfff ; if( *(sample+1)&0x800 ) *(sample+1) |= 0xf000 ; fprintf( my_data->fout, "%d, %d\n", *sample, *(sample+1) ); sample += 2 ; } } my_data->samples_left -= num_samples ; if( my_data->samples_left <= 0 ) { shutdown_stream = true ; } if (shutdown_stream) { return NULL; } else { void *rv = my_data->buffers[my_data->idx]; my_data->idx = (my_data->idx + 1) % my_data->num_buffers; return rv ; } } int populate_test_data(struct test_data *test_data) { FILE *in; size_t i; //ssize_t n_read; test_data->idx = 0; in = fopen(DATA_SOURCE, "rb"); if (!in) { return -1; } else { printf( "Populating data\n" ); for(i=0;inum_buffers;i++) { size_t j; int16_t *buffer = (int16_t *)test_data->buffers[i]; /* n_read = fread(test_data->buffers[i], sizeof(int16_t) * 2, test_data->samples_per_buffer, in); if (n_read != (ssize_t)test_data->samples_per_buffer) { fprintf(stderr, "Hit partial read while gathering test data\n"); fclose(in); return -1; }*/ for(j = 0 ; j < test_data->samples_per_buffer ; j++) { *buffer = (j % 2048) ; buffer++; *buffer = -((int16_t)(j % 2048)); buffer++; } } fclose(in); return 0; } } void handler(int signal) { if (signal == SIGTERM || signal == SIGINT) { shutdown_stream = true; printf("Caught signal, canceling transfers\n"); fflush(stdout); } } int main(int argc, char *argv[]) { int status; unsigned int actual; struct bladerf *dev; struct bladerf_stream *stream; struct test_data test_data; bool conv_ok; if (argc != 4 && argc != 5) { fprintf(stderr, "Usage: %s [tx|rx] <# buffers> [# samples]\n", argv[0]); return EXIT_FAILURE; } if (strcasecmp(argv[1], "rx") == 0 ) { test_data.module = BLADERF_MODULE_RX ; } else if (strcasecmp(argv[1], "tx") == 0 ) { test_data.module = BLADERF_MODULE_TX; } else { fprintf(stderr, "Invalid module: %s\n", argv[1]); return EXIT_FAILURE; } test_data.idx = 0; test_data.fout = NULL; test_data.samples_per_buffer = str2int(argv[2], 1, INT_MAX, &conv_ok); if (!conv_ok) { fprintf(stderr, "Invalid samples per buffer value: %s\n", argv[2]); return EXIT_FAILURE; } test_data.num_buffers = str2int(argv[3], 1, INT_MAX, &conv_ok); if (!conv_ok) { fprintf(stderr, "Invalid # buffers: %s\n", argv[3]); return EXIT_FAILURE; } test_data.samples_left = 20e3; if(argc == 5) { test_data.samples_left = str2int(argv[4], 1, INT_MAX, &conv_ok); if(!conv_ok) { fprintf(stderr, "Invalid number of samples: %s\n", argv[4]); return EXIT_FAILURE; } } if (signal(SIGINT, handler) == SIG_ERR || signal(SIGTERM, handler) == SIG_ERR) { fprintf(stderr, "Failed to set up signal handler\n"); return EXIT_FAILURE; } status = bladerf_open(&dev, NULL); if (status < 0) { fprintf(stderr, "Failed to open device: %s\n", bladerf_strerror(status)); return EXIT_FAILURE; } status = bladerf_is_fpga_configured(dev); if (status < 0) { fprintf(stderr, "Failed to determine FPGA state: %s\n", bladerf_strerror(status)); return EXIT_FAILURE; } else if (status == 0) { fprintf(stderr, "Error: FPGA is not loaded.\n"); bladerf_close(dev); return EXIT_FAILURE; } status = bladerf_set_frequency(dev, test_data.module, 1000000000); if (status != 0) { fprintf(stderr, "Failed to set frequency: %s\n", bladerf_strerror(status)); bladerf_close(dev); return EXIT_FAILURE; } status = bladerf_set_sample_rate(dev, test_data.module, 4000000, &actual); if (status != 0) { fprintf(stderr, "Failed to set sample rate: %s\n", bladerf_strerror(status)); bladerf_close(dev); return EXIT_FAILURE; } /* Initialize the stream */ status = bladerf_init_stream( &stream, dev, stream_callback, &test_data.buffers, test_data.num_buffers, BLADERF_FORMAT_SC16_Q11, test_data.samples_per_buffer, test_data.num_buffers, &test_data ); if (status != 0) { fprintf(stderr, "Failed to init stream: %s\n", bladerf_strerror(status)); bladerf_close(dev); return EXIT_FAILURE; } /* Populate buffers with test data */ if( test_data.module == BLADERF_MODULE_TX ) { if (populate_test_data(&test_data) ) { fprintf(stderr, "Failed to populated test data\n"); bladerf_deinit_stream(stream); bladerf_close(dev); return EXIT_FAILURE; } } else { /* Open up file we'll read test data to */ test_data.fout = fopen( "samples.txt", "w" ); if (!test_data.fout) { fprintf(stderr, "Failed to open samples.txt: %s\n", strerror(errno)); bladerf_deinit_stream(stream); bladerf_close(dev); return EXIT_FAILURE; } } status = bladerf_enable_module(dev, test_data.module, true); if (status < 0) { fprintf(stderr, "Failed to enable module: %s\n", bladerf_strerror(status)); bladerf_deinit_stream(stream); bladerf_close(dev); return EXIT_FAILURE; } status = bladerf_stream(stream, test_data.module); if (status < 0) { fprintf(stderr, "Stream error: %s\n", bladerf_strerror(status)); } status = bladerf_enable_module(dev, test_data.module, false); if (status < 0) { fprintf(stderr, "Failed to enable module: %s\n", bladerf_strerror(status)); } bladerf_deinit_stream(stream); bladerf_close(dev); if (test_data.fout) { fclose(test_data.fout); } return 0; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_bootloader_recovery/000077500000000000000000000000001457144405000262565ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_bootloader_recovery/CMakeLists.txt000066400000000000000000000007411457144405000310200ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.5) project(libbladeRF_test_bootloader_recovery C) set(INCLUDES ${libbladeRF_SOURCE_DIR}/include ${BLADERF_HOST_COMMON_INCLUDE_DIRS} ) if(MSVC) set(INCLUDES ${INCLUDES} ${MSVC_C99_INCLUDES}) endif() set(SRC main.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/conversions.c) include_directories(${INCLUDES}) add_executable(libbladeRF_test_bootloader_recovery ${SRC}) target_link_libraries(libbladeRF_test_bootloader_recovery libbladerf_shared) bladeRF-2024.05/host/libraries/libbladeRF_test/test_bootloader_recovery/main.c000066400000000000000000000112011457144405000273410ustar00rootroot00000000000000#include #include #include #include #include "rel_assert.h" #include "conversions.h" /* Returns list size or negative error */ static int get_and_show_bootloader_list(struct bladerf_devinfo **list_out) { int list_size, i; struct bladerf_devinfo *list; *list_out = NULL; list_size = bladerf_get_bootloader_list(&list); if (list_size < 0) { return list_size; } else if (list_size == 0) { /* It should be returning BLADERF_ERR_NODEV in this case... */ fprintf(stderr, "bladerf_get_bootloader_list() should not return 0!\n"); return BLADERF_ERR_UNEXPECTED; } putchar('\n'); printf(" Bootloader devices\n"); printf("---------------------------------------------------------------\n"); for (i = 0; i < list_size; i++) { printf(" Option %d:\n", i); printf(" Backend: %s\n", backend_description(list[i].backend)); printf(" Serial: %s\n", list[i].serial); printf(" USB Bus: %u\n", list[i].usb_bus); printf(" USB Address: %u\n", list[i].usb_addr); printf(" Instance: %u\n", list[i].instance); putchar('\n'); } *list_out = list; return list_size; } static int interactive(const char *filename) { int status; int list_size; struct bladerf_devinfo *list; bool valid_input; int selection; char input[32]; list_size = get_and_show_bootloader_list(&list); if (list_size < 0) { return list_size; } memset(input, 0, sizeof(input)); printf("Enter the option # associated with the device to recover> "); if (fgets(input, sizeof(input), stdin) == NULL) { status = BLADERF_ERR_UNEXPECTED; goto out; } if (input[strlen(input) - 1] == '\n') { input[strlen(input) - 1] = '\0'; } else { putchar('\n'); } selection = str2int(input, 0, list_size - 1, &valid_input); if (!valid_input) { status = BLADERF_ERR_INVAL; } else { assert(selection >= 0 && selection < list_size); status = bladerf_load_fw_from_bootloader(NULL, BLADERF_BACKEND_ANY, list[selection].usb_bus, list[selection].usb_addr, filename); } out: bladerf_free_device_list(list); return status; } int main(int argc, char *argv[]) { int status = 0; if (argc < 2 || argc > 4) { fprintf(stderr, "Usage:\n"); fprintf(stderr, " List detected bootloader devices:\n"); fprintf(stderr, " %s list\n", argv[0]); fprintf(stderr, "\n"); fprintf(stderr, " Command line recovery:\n"); fprintf(stderr, " %s \n", argv[0]); fprintf(stderr, " %s \n", argv[0]); fprintf(stderr, "\n"); fprintf(stderr, " Interactive recovery:\n"); fprintf(stderr, " %s \n", argv[0]); fprintf(stderr, "\n"); return 1; } bladerf_log_set_verbosity(BLADERF_LOG_LEVEL_VERBOSE); if (argc == 2) { if (!strcasecmp("list", argv[1])) { struct bladerf_devinfo *list; status = get_and_show_bootloader_list(&list); if (status > 0) { bladerf_free_device_list(list); status = 0; } } else { status = interactive(argv[1]); } } else if (argc == 3) { status = bladerf_load_fw_from_bootloader(argv[1], 0, 0, 0, /* "Don't care" */ argv[2]); } else if (argc == 4) { uint8_t bus, addr; bool valid_input; bus = (uint8_t) str2int(argv[1], 0, UINT8_MAX - 1, &valid_input); if (!valid_input) { status = BLADERF_ERR_INVAL; } if (status == 0) { addr = (uint8_t) str2int(argv[2], 0, UINT8_MAX - 1, &valid_input); if (!valid_input) { status = BLADERF_ERR_INVAL; } } if (status == 0) { status = bladerf_load_fw_from_bootloader(NULL, BLADERF_BACKEND_ANY, bus, addr, argv[3]); } } if (status != 0) { fprintf(stderr, "%s\n", bladerf_strerror(status)); } return status; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_c/000077500000000000000000000000001457144405000224305ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_c/CMakeLists.txt000066400000000000000000000004741457144405000251750ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.5) project(libbladeRF_test_c C) set(INCLUDES ${libbladeRF_SOURCE_DIR}/include) if(MSVC) set(INCLUDES ${INCLUDES} ${MSVC_C99_INCLUDES}) endif() include_directories(${INCLUDES}) add_executable(libbladeRF_test_c main.c) target_link_libraries(libbladeRF_test_c libbladerf_shared) bladeRF-2024.05/host/libraries/libbladeRF_test/test_c/main.c000066400000000000000000000030001457144405000235110ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This program is intended to verify that C programs build against * libbladeRF without any unintended dependencies. */ #include #include int main(int argc, char *argv[]) { struct bladerf_version version; bladerf_version(&version); printf("libbladeRF %s\n", version.describe); return 0; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_config_file/000077500000000000000000000000001457144405000244525ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_config_file/CMakeLists.txt000066400000000000000000000036121457144405000272140ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.5) project(libbladeRF_test_config_file C) set(TEST_CONFIG_FILE_INCLUDES ${libbladeRF_SOURCE_DIR}/include ${libbladeRF_SOURCE_DIR}/src ${BLADERF_FPGA_COMMON_INCLUDE_DIR} ${BLADERF_FW_COMMON_INCLUDE_DIR} ${BLADERF_HOST_COMMON_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/../common/include ) set(SRC src/main.c ../common/src/test_common.c ${libbladeRF_SOURCE_DIR}/src/bladerf_priv.c ${libbladeRF_SOURCE_DIR}/src/config.c ${libbladeRF_SOURCE_DIR}/src/dc_cal_table.c ${libbladeRF_SOURCE_DIR}/src/file_ops.c ${libbladeRF_SOURCE_DIR}/src/flash.c ${libbladeRF_SOURCE_DIR}/src/flash_fields.c ${libbladeRF_SOURCE_DIR}/src/fpga.c ${libbladeRF_SOURCE_DIR}/src/si5338.c ${libbladeRF_SOURCE_DIR}/src/tuning.c ${libbladeRF_SOURCE_DIR}/src/version_compat.c ${libbladeRF_SOURCE_DIR}/src/xb.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/conversions.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/log.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/parse.c ${BLADERF_FPGA_COMMON_SOURCE_DIR}/band_select.c ${BLADERF_FPGA_COMMON_SOURCE_DIR}/lms.c ) set(TEST_CONFIG_FILE_LIBS libbladerf_shared) if(MSVC) find_package(LibPThreadsWin32 REQUIRED) set(TEST_CONFIG_FILE_INCLUDES ${TEST_CONFIG_FILE_INCLUDES} ${MSVC_C99_INCLUDES} ${LIBPTHREADSWIN32_INCLUDE_DIRS} ) set(SRC ${SRC} ${BLADERF_HOST_COMMON_SOURCE_DIR}/windows/clock_gettime.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/windows/mkdtemp.c ) set(TEST_CONFIG_FILE_LIBS ${TEST_CONFIG_FILE_LIBS} ${LIBPTHREADSWIN32_LIBRARIES} ) endif() add_definitions(-DLIBBLADERF_SEARCH_PREFIX="${CMAKE_INSTALL_PREFIX}") add_definitions(-DLOGGING_ENABLED=1) include_directories(${TEST_CONFIG_FILE_INCLUDES}) add_executable(libbladeRF_test_config_file ${SRC}) target_link_libraries(libbladeRF_test_config_file ${TEST_CONFIG_FILE_LIBS}) bladeRF-2024.05/host/libraries/libbladeRF_test/test_config_file/src/000077500000000000000000000000001457144405000252415ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_config_file/src/main.c000066400000000000000000000267431457144405000263450ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2017 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ /** * Test program for libbladeRF configuration file parsing * * Creates a config file with a few different scope restrictions, then * makes sure the proper activity happens. * * Currently, it tests: * Option keys: * frequency * Restrictions: * none * x40 * x115 * serial number */ #include #include #include #include "bladerf_priv.h" #include "config.h" #include "test_common.h" #ifdef WIN32 #include "mkdtemp.h" #define MAX_FILENAME_LEN 256 static char const DIR_DELIM[] = "\\"; #else size_t const MAX_FILENAME_LEN = 256; static char const DIR_DELIM[] = "/"; #endif // WIN32 /** * Structure for storing test state and conditions */ typedef struct { struct bladerf_devinfo ident; /**< devinfo struct for this test */ bladerf_fpga_size fpga_size; /**< FPGA size */ uint64_t frequency; /**< Expected frequency */ } test_state; /** * Test cases * * .ident and .fpga_size are inputs, and the remainder are expected end * states for their respective keys. */ // clang-format off static const test_state states[] = { { FIELD_INIT(.ident, { FIELD_INIT(.backend, BLADERF_BACKEND_DUMMY), FIELD_INIT(.serial, "9f9f90dbe3e5ee1218c86b8839db1995"), FIELD_INIT(.usb_bus, 1), FIELD_INIT(.usb_addr, 2), FIELD_INIT(.instance, 0) }), FIELD_INIT(.fpga_size, BLADERF_FPGA_40KLE), FIELD_INIT(.frequency, 2000000000), }, { FIELD_INIT(.ident, { FIELD_INIT(.backend, BLADERF_BACKEND_DUMMY), FIELD_INIT(.serial, "df34f5f71a4e812327ac9b04538386af"), FIELD_INIT(.usb_bus, 1), FIELD_INIT(.usb_addr, 3), FIELD_INIT(.instance, 1) }), FIELD_INIT(.fpga_size, BLADERF_FPGA_115KLE), FIELD_INIT(.frequency, 1800000000), }, { FIELD_INIT(.ident, { FIELD_INIT(.backend, BLADERF_BACKEND_DUMMY), FIELD_INIT(.serial, "742330d6617e449e7bb460e802d50701"), FIELD_INIT(.usb_bus, 2), FIELD_INIT(.usb_addr, 1), FIELD_INIT(.instance, 2) }), FIELD_INIT(.fpga_size, BLADERF_FPGA_40KLE), FIELD_INIT(.frequency, 1600000000), }, }; // clang-format on /** * Contents of test configuration file... */ static char const *test_config[] = { "frequency 1.0G", // All boards: set frequency to 1.0 GHz "frequency 1.4G", // All boards: set frequency to 1.4 GHz "[x40]", "frequency 1.6G", // If x40 FPGA: set frequency to 1.6 GHz "[x115]", "frequency 1.8G", // If x115 FPGA: set frequency to 1.8 GHz "[*:serial=9f9f90dbe3e5ee1218c86b8839db1995]", "frequency 2.0G", // If serial 9f9f90db..., set frequency to 2.0 GHz }; /** * Global test history variable, used by {update,check}_test_state */ static test_state HISTORY[ARRAY_SIZE(states)]; /** * Writes a config file * * @param[in] filename Filename to write to * @param[in] config Array of lines to write to config file * @param[in] len Number of elements in config * * @return 0 on success, or value from \ref RETCODES list on failure */ int create_config(char const *filename, char const **config, size_t len) { size_t i; FILE *f = fopen(filename, "w"); if (NULL == f) { perror("fopen failed"); return BLADERF_ERR_IO; } for (i = 0; i < len; ++i) { fprintf(f, "%s\n", config[i]); } fclose(f); printf("Created config file: %s\n", filename); return 0; } /** * Creates a fake test bladeRF device * * @param[out] device Update with device handle on success * @param[in] devinfo Device specification. If NULL, any available * device will be opened. * * @return 0 on success, or value from \ref RETCODES list on failure */ int create_test_device(struct bladerf **device, struct bladerf_devinfo const *devinfo) { struct bladerf *dev; dev = (struct bladerf *)calloc(1, sizeof(struct bladerf)); if (dev == NULL) { return BLADERF_ERR_MEM; } MUTEX_INIT(&dev->ctrl_lock); MUTEX_INIT(&dev->sync_lock[BLADERF_MODULE_RX]); MUTEX_INIT(&dev->sync_lock[BLADERF_MODULE_TX]); dev->fpga_version.describe = calloc(1, BLADERF_VERSION_STR_MAX + 1); if (dev->fpga_version.describe == NULL) { free(dev); return BLADERF_ERR_MEM; } dev->fw_version.describe = calloc(1, BLADERF_VERSION_STR_MAX + 1); if (dev->fw_version.describe == NULL) { free((void *)dev->fpga_version.describe); free(dev); return BLADERF_ERR_MEM; } dev->capabilities = 0; dev->ident = *devinfo; *device = dev; return 0; } /** * Update the test state for a given device and key * * @param[in] dev Device handle * @param[in] key Key to update * @param[in] value New value * * @return 0 on success, or value from \ref RETCODES list on failure */ int update_test_state(struct bladerf *dev, char const *key, uint64_t value) { size_t i; if (NULL == dev || NULL == key) { return BLADERF_ERR_INVAL; } for (i = 0; i < ARRAY_SIZE(states); ++i) { test_state const *t = &states[i]; if (bladerf_devinfo_matches(&dev->ident, &t->ident)) { if (0 == strcmp(key, "frequency")) { HISTORY[i].frequency = value; return 0; } return BLADERF_ERR_INVAL; } } return BLADERF_ERR_NODEV; } /** * Checks the current test value for a given device and key against the * expected values. * * @param[in] dev Device handle * @param[in] key Key to test * * @return true if the value is as expected, false otherwise */ bool check_test_state(struct bladerf *dev, char const *key) { size_t i; if (NULL == dev || NULL == key) { return false; } for (i = 0; i < ARRAY_SIZE(states); ++i) { test_state const *t = &states[i]; if (bladerf_devinfo_matches(&dev->ident, &t->ident)) { if (0 == strcmp(key, "frequency")) { return states[i].frequency == HISTORY[i].frequency; } } } return false; } /** * Surrogate bladerf_set_frequency handler * * @param dev Device handle * @param module Module to configure * @param frequency Desired frequency * * @return 0 on success, or value from \ref RETCODES list on failure */ int bladerf_set_frequency(struct bladerf *dev, bladerf_module module, unsigned int frequency) { return update_test_state(dev, "frequency", frequency); } /** * Surrogate bladerf_close handler * * @param dev Device handle */ void bladerf_close(struct bladerf *dev) { if (dev) { free((void *)dev->fpga_version.describe); free((void *)dev->fw_version.describe); free(dev); } } /** * Main program */ int main(int argc, char *argv[]) { char filename[MAX_FILENAME_LEN]; char tmpdir[MAX_FILENAME_LEN]; char tmpdirname[] = "libbladeRF_test_config_file.XXXXXX"; char *tmpbase = NULL; bool result = true; int rv; size_t i; /* Get the TEMP variable from the environment, if it exists */ tmpbase = getenv("TEMP"); if (NULL == tmpbase) { /* It doesn't, so let's use the current working directory */ tmpbase = malloc(MAX_FILENAME_LEN); if (NULL == tmpbase) { perror("malloc failed"); exit(EXIT_FAILURE); } if (NULL == getcwd(tmpbase, MAX_FILENAME_LEN - 1)) { perror("getcwd failed"); exit(EXIT_FAILURE); } } /* Concatenate directory names */ rv = snprintf(tmpdir, MAX_FILENAME_LEN - 1, "%s%s%s", tmpbase, DIR_DELIM, tmpdirname); if (rv < 0 || rv >= (int)(MAX_FILENAME_LEN - 1)) { perror("snprintf failed"); exit(EXIT_FAILURE); } /* Create a temporary directory for testing */ if (NULL == mkdtemp(tmpdir)) { perror("mkdtemp failed"); exit(EXIT_FAILURE); } /* Create a sample config file there */ rv = snprintf(filename, MAX_FILENAME_LEN - 1, "%s%s%s", tmpdir, DIR_DELIM, "bladeRF.conf"); if (rv < 0 || rv >= (int)(MAX_FILENAME_LEN - 1)) { perror("snprintf failed"); exit(EXIT_FAILURE); } if (0 > create_config(filename, test_config, ARRAY_SIZE(test_config))) { perror("create_config failed"); exit(EXIT_FAILURE); } /* Change working directory */ if (0 > chdir(tmpdir)) { perror("chdir failed"); exit(EXIT_FAILURE); } bladerf_log_set_verbosity(BLADERF_LOG_LEVEL_DEBUG); /* Iterate through the test cases */ for (i = 0; i < ARRAY_SIZE(states); ++i) { test_state const *t = &states[i]; struct bladerf *dev = NULL; bool check = false; int status; status = create_test_device(&dev, &t->ident); if (status != 0) { fprintf(stderr, "Unable to open device: %s\n", bladerf_strerror(status)); exit(EXIT_FAILURE); } dev->fpga_size = states[i].fpga_size; printf("%s: fpga=%i backend=%d device=%d:%d instance=%d\n", dev->ident.serial, dev->fpga_size, dev->ident.backend, dev->ident.usb_bus, dev->ident.usb_addr, dev->ident.instance); status = config_load_options_file(dev); if (status != 0) { fprintf(stderr, "Unable to load options file: %s\n", bladerf_strerror(status)); exit(EXIT_FAILURE); } check = check_test_state(dev, "frequency"); printf("\tfrequency=%s\n", check ? "pass" : "FAIL"); if (!check) { result = false; } printf("\n"); bladerf_close(dev); } /* Remove the temporary directory */ if (0 > unlink(filename)) { perror("unlink failed"); exit(EXIT_FAILURE); } /* Change working directory */ if (0 > chdir(tmpbase)) { perror("chdir failed"); exit(EXIT_FAILURE); } if (0 > rmdir(tmpdir)) { perror("rmdir failed"); exit(EXIT_FAILURE); } printf("\nEnd Result: %s\n", result ? "PASS" : "FAIL"); exit(result ? 0 : EXIT_FAILURE); return 0; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_cpp/000077500000000000000000000000001457144405000227705ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_cpp/CMakeLists.txt000066400000000000000000000003471457144405000255340ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.5) project(libbladeRF_test_cpp CXX) include_directories(${libbladeRF_SOURCE_DIR}/include) add_executable(libbladeRF_test_cpp main.cpp) target_link_libraries(libbladeRF_test_cpp libbladerf_shared) bladeRF-2024.05/host/libraries/libbladeRF_test/test_cpp/main.cpp000066400000000000000000000030231457144405000244160ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This program is intended to verify that C++ programs build against * libbladeRF without any unintended dependencies. */ #include #include int main(int argc, char *argv[]) { struct bladerf_version version; bladerf_version(&version); std::cout << "libbladeRF " << version.describe << std::endl; return 0; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_ctrl/000077500000000000000000000000001457144405000231525ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_ctrl/CMakeLists.txt000066400000000000000000000023341457144405000257140ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.5) project(libbladeRF_test_ctrl C) set(INCLUDES ${libbladeRF_SOURCE_DIR}/include ${BLADERF_HOST_COMMON_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/../common/include ) if(MSVC) set(INCLUDES ${INCLUDES} ${MSVC_C99_INCLUDES}) endif() set(LIBS libbladerf_shared) if(MSVC) find_package(LibPThreadsWin32 REQUIRED) set(INCLUDES ${INCLUDES} ${LIBPTHREADSWIN32_INCLUDE_DIRS}) set(LIBS ${LIBS} ${LIBPTHREADSWIN32_LIBRARIES}) else(MSVC) find_package(Threads REQUIRED) set(LIBS ${LIBS} ${CMAKE_THREAD_LIBS_INIT}) endif(MSVC) set(SRC src/main.c src/test_bandwidth.c src/test_correction.c src/test_enable_module.c src/test_frequency.c src/test_gain.c src/test_loopback.c src/test_rx_mux.c src/test_sampling.c src/test_lpf_mode.c src/test_samplerate.c src/test_threads.c src/test_xb200.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/conversions.c ) if(MSVC) set(SRC ${SRC} ${BLADERF_HOST_COMMON_SOURCE_DIR}/windows/getopt_long.c ) endif() include_directories(${INCLUDES}) add_executable(libbladeRF_test_ctrl ${SRC}) target_link_libraries(libbladeRF_test_ctrl ${LIBS}) bladeRF-2024.05/host/libraries/libbladeRF_test/test_ctrl/src/000077500000000000000000000000001457144405000237415ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_ctrl/src/main.c000066400000000000000000000224341457144405000250360ustar00rootroot00000000000000/* * This program performs some simple operations with the various libbladeRF * "control" functions. It is mainly intended to only check for the presence * of grossly erroneous code in these functions, that would cause crashes or * very bizarre results. * * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include #include #include #include #include #include "conversions.h" #include "test_ctrl.h" static const struct test_case *tests[] = { // clang-format off &test_case_sampling, &test_case_lpf_mode, &test_case_enable_module, &test_case_loopback, &test_case_rx_mux, &test_case_xb200, &test_case_correction, &test_case_samplerate, &test_case_bandwidth, &test_case_gain, &test_case_frequency, &test_case_threads, // clang-format on }; #define OPTARG "d:ft:s:T:v:hL" static const struct option long_options[] = { // clang-format off { "device", required_argument, 0, 'd'}, { "fast", no_argument, 0, 'f'}, { "test", required_argument, 0, 't'}, { "seed", required_argument, 0, 's'}, { "help", no_argument, 0, 'h'}, { "xb200", no_argument, 0, 1 }, { "tuningmode", required_argument, 0, 'T'}, { "list-tests", no_argument, 0, 'L'}, { "verbosity", required_argument, 0, 'v'}, { 0, 0, 0, 0 }, // clang-format on }; struct stats { bool ran; size_t failures; }; void usage(const char *argv0) { printf("Usage: %s [options]\n", argv0); printf("Exercise various libbladeRF control functions.\n"); printf("\nOptions:\n"); printf(" -d, --device Open the specified device.\n"); printf(" By default, any device is used.\n"); printf(" -f, --fast Run fast test.\n"); printf(" -t, --test Run specified test.\n"); printf(" -s, --seed Use specified seed for PRNG.\n"); printf(" -h, --help Show this text.\n"); printf(" --xb200 Test XB-200 functionality.\n"); printf(" Device must be present.\n"); printf(" --tuningmode Tuning mode. 'fpga' or 'host'\n"); printf(" -L, --list-tests List available tests.\n"); printf(" -v, --verbosity Set libbladeRF verbosity level.\n"); } void list_tests() { size_t i; printf("Available tests:\n"); printf("-------------------------\n"); for (i = 0; i < ARRAY_SIZE(tests); i++) { printf(" %s\n", tests[i]->name); } printf("\n"); } int get_params(int argc, char *argv[], struct app_params *p) { int c, idx; bool ok; bladerf_log_level level; memset(p, 0, sizeof(p[0])); p->randval_seed = 1; p->tuning_mode = BLADERF_TUNING_MODE_INVALID; p->module_enabled = false; p->fast_test = false; while ((c = getopt_long(argc, argv, OPTARG, long_options, &idx)) != -1) { switch (c) { case 'd': if (p->device_str) { fprintf(stderr, "Device already specified!\n"); return -1; } else { p->device_str = strdup(optarg); if (NULL == p->device_str) { perror("strdup"); return -1; } } break; case 'f': p->fast_test = true; break; case 't': if (p->test_name) { fprintf(stderr, "Test already specified!\n"); return -1; } else { p->test_name = strdup(optarg); if (NULL == p->test_name) { perror("strdup"); return -1; } } break; case 's': p->randval_seed = str2uint64(optarg, 1, UINT64_MAX, &ok); if (!ok) { fprintf(stderr, "Invalid seed value: %s\n", optarg); return -1; } break; case 'h': usage(argv[0]); return 1; case 1: p->use_xb200 = true; break; case 'L': list_tests(); return 1; case 'T': if (0 == strcmp(optarg, "fpga")) { p->tuning_mode = BLADERF_TUNING_MODE_FPGA; } else if (0 == strcmp(optarg, "host")) { p->tuning_mode = BLADERF_TUNING_MODE_HOST; } else { fprintf(stderr, "Invalid tuning mode: %s\n", optarg); return -1; } break; case 'v': level = str2loglevel(optarg, &ok); if (ok) { bladerf_log_set_verbosity(level); } else { fprintf(stderr, "Invalid log level: %s\n", optarg); return -1; } break; default: return -1; } } return 0; } int main(int argc, char *argv[]) { struct app_params p; struct bladerf *dev = NULL; struct stats *stats = NULL; bool pass = true; bladerf_xb expected, attached; size_t i; int status; status = get_params(argc, argv, &p); if (status != 0) { if (1 == status) { status = 0; } goto out; } for (i = 0; i < ARRAY_SIZE(tests); i++) { if (NULL == p.test_name || !strcasecmp(p.test_name, tests[i]->name)) { break; } } if (i >= ARRAY_SIZE(tests)) { fprintf(stderr, "Invalid test: %s\n", p.test_name); status = -1; goto out; } stats = calloc(ARRAY_SIZE(tests), sizeof(stats[0])); if (NULL == stats) { perror("calloc"); status = -1; goto out; } status = bladerf_open(&dev, p.device_str); if (status != 0) { fprintf(stderr, "Failed to open device: %s\n", bladerf_strerror(status)); goto out; } if (p.use_xb200) { expected = BLADERF_XB_200; status = bladerf_expansion_attach(dev, BLADERF_XB_200); if (status != 0) { fprintf(stderr, "Failed to attach XB-200: %s\n", bladerf_strerror(status)); goto out; } } else { expected = BLADERF_XB_NONE; } if (p.tuning_mode != BLADERF_TUNING_MODE_INVALID) { status = bladerf_set_tuning_mode(dev, p.tuning_mode); if (status != 0) { fprintf(stderr, "Failed to set tuning mode: %s\n", bladerf_strerror(status)); goto out; } } status = bladerf_expansion_get_attached(dev, &attached); if (status != 0) { fprintf(stderr, "Failed to query attached expansion board: %s\n", bladerf_strerror(status)); goto out; } if (expected != attached) { fprintf(stderr, "Unexpected expansion board readback: %d\n", attached); status = -1; goto out; } for (i = 0; i < ARRAY_SIZE(tests); i++) { if (NULL == p.test_name || !strcasecmp(p.test_name, tests[i]->name)) { randval_init(&p.randval_state, p.randval_seed); stats[i].ran = true; stats[i].failures = tests[i]->fn(dev, &p, false); } } puts("\nFailure counts"); puts("--------------------------------------------"); for (i = 0; i < ARRAY_SIZE(tests); i++) { if (stats[i].ran) { printf("%16s %zu\n", tests[i]->name, stats[i].failures); } if (stats[i].failures != 0) { pass = false; } } puts(""); status = pass ? 0 : -1; out: if (dev) { bladerf_close(dev); } free(p.device_str); free(p.test_name); free(stats); return status; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_ctrl/src/test_bandwidth.c000066400000000000000000000114551457144405000271160ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include "test_ctrl.h" DECLARE_TEST_CASE(bandwidth); static int set_and_check(struct bladerf *dev, bladerf_module m, bladerf_bandwidth bandwidth) { bladerf_bandwidth actual, readback; int status; status = bladerf_set_bandwidth(dev, m, bandwidth, &actual); if (status != 0) { PR_ERROR("Failed to set bandwidth: %s\n", bladerf_strerror(status)); return status; } status = bladerf_get_bandwidth(dev, m, &readback); if (status != 0) { PR_ERROR("Failed to read back bandwidth: %s\n", bladerf_strerror(status)); return status; } if (readback != actual) { PR_ERROR("Unexpected bandwidth. requested=%u, actual=%u, readback=%u\n", bandwidth, actual, readback); return -1; } return 0; } static failure_count sweep_bandwidths(struct bladerf *dev, bladerf_module m, struct app_params *p, bladerf_bandwidth min, bladerf_bandwidth max) { bladerf_bandwidth const inc = (p->fast_test) ? 2.5e6 : 250000; bladerf_bandwidth b; failure_count failures = 0; int status; for (b = min; b < max; b += inc) { status = set_and_check(dev, m, b); if (status != 0) { failures++; } } return failures; } static failure_count random_bandwidths(struct bladerf *dev, bladerf_module m, struct app_params *p, bladerf_bandwidth min, bladerf_bandwidth max) { size_t const iterations = (p->fast_test) ? 20 : 1500; bladerf_bandwidth bw; size_t i; failure_count failures = 0; int status; for (i = 0; i < iterations; i++) { bladerf_bandwidth const mod = max - min + 1; randval_update(&p->randval_state); bw = min + (p->randval_state % mod); assert(bw <= max); status = set_and_check(dev, m, bw); if (status != 0) { failures++; } } return failures; } failure_count test_bandwidth(struct bladerf *dev, struct app_params *p, bool quiet) { failure_count failures = 0; int status; bladerf_direction dir; FOR_EACH_DIRECTION(dir) { size_t i; bladerf_channel ch; FOR_EACH_CHANNEL(dir, 1, i, ch) { struct bladerf_range const *range; bladerf_bandwidth min, max; PRINT("%s: Testing %s...\n", __FUNCTION__, direction2str(dir)); status = bladerf_get_bandwidth_range(dev, ch, &range); if (status < 0) { PR_ERROR("Failed to get %s bandwidth range: %s\n", direction2str(dir), bladerf_strerror(status)); return status; }; min = (bladerf_bandwidth)(range->min * range->scale); max = (bladerf_bandwidth)(range->max * range->scale); PRINT("%s: %s range: %u to %u\n", __FUNCTION__, direction2str(dir), min, max); PRINT("%s: Sweeping %s bandwidths...\n", __FUNCTION__, direction2str(dir)); failures += sweep_bandwidths(dev, ch, p, min, max); PRINT("%s: Applying random %s bandwidths...\n", __FUNCTION__, direction2str(dir)); failures += random_bandwidths(dev, ch, p, min, max); } } return failures; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_ctrl/src/test_correction.c000066400000000000000000000132121457144405000273120ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include "test_ctrl.h" #include DECLARE_TEST_CASE(correction); const struct correction { const char *name; bladerf_correction type; int min; int max; } corrections[] = { { "I DC offset", BLADERF_CORR_LMS_DCOFF_I, -2048, 2048, }, { "Q DC offset", BLADERF_CORR_LMS_DCOFF_Q, -2048, 2048, }, { "Phase", BLADERF_CORR_FPGA_PHASE, -4096, 4096, }, { "Gain", BLADERF_CORR_FPGA_GAIN, -4096, 4096, }, }; static int set_and_check(struct bladerf *dev, const struct correction *c, bladerf_channel ch, int16_t val) { int status; int16_t readback, scaled_readback, scaled_val; status = bladerf_set_correction(dev, ch, c->type, val); if (status != 0) { PR_ERROR("Failed to set %s correction: %s\n", c->name, bladerf_strerror(status)); return status; } status = bladerf_get_correction(dev, ch, c->type, &readback); if (status != 0) { PR_ERROR("Failed to get %s correction: %s\n", c->name, bladerf_strerror(status)); return status; } /* These functions will scale and clamp. Mirror that here so we can check * the expected values... */ switch (c->type) { case BLADERF_CORR_LMS_DCOFF_I: case BLADERF_CORR_LMS_DCOFF_Q: if (!BLADERF_CHANNEL_IS_TX(ch)) { if (val <= -2048) { val = -2047; } scaled_val = val / 64; scaled_readback = val / 64; } else { scaled_val = val / 128; scaled_readback = val / 128; } break; default: scaled_val = val; scaled_readback = readback; break; } if (scaled_val != scaled_readback) { PR_ERROR("Correction mismatch, val=%d, readback=%d\n", val, readback); return -1; } return 0; } static failure_count sweep_vals(struct bladerf *dev, bladerf_channel ch, bool quiet) { int status; int val; size_t i; failure_count failures = 0; for (i = 0; i < ARRAY_SIZE(corrections); i++) { PRINT(" %s\n", corrections[i].name); for (val = corrections[i].min; val <= corrections[i].max; val++) { status = set_and_check(dev, &corrections[i], ch, val); if (status != 0) { failures++; } } } return failures; } static failure_count random_vals(struct bladerf *dev, struct app_params *p, bladerf_channel ch, bool quiet) { int status; int val, j; size_t i; const int iterations = 2500; failure_count failures = 0; for (i = 0; i < ARRAY_SIZE(corrections); i++) { PRINT(" %s\n", corrections[i].name); for (j = 0; j < iterations; j++) { randval_update(&p->randval_state); val = corrections[i].min + (p->randval_state % corrections[i].max); if (val < corrections[i].min) { val = corrections[i].min; } else if (val > corrections[i].max) { val = corrections[i].max; } status = set_and_check(dev, &corrections[i], ch, val); if (status != 0) { failures++; } } } return failures; } failure_count test_correction(struct bladerf *dev, struct app_params *p, bool quiet) { failure_count failures = 0; if (0 != strcmp(bladerf_get_board_name(dev), "bladerf1")) { PRINT("%s: board is not a bladerf1, skipping\n", __FUNCTION__); return 0; } PRINT("%s: Sweeping RX corrections...\n", __FUNCTION__); failures += sweep_vals(dev, BLADERF_CHANNEL_RX(0), quiet); PRINT("%s: Random RX corrections...\n", __FUNCTION__); failures += random_vals(dev, p, BLADERF_CHANNEL_RX(0), quiet); PRINT("%s: Sweeping TX corrections...\n", __FUNCTION__); failures += sweep_vals(dev, BLADERF_CHANNEL_TX(0), quiet); PRINT("%s: Random TX corrections...\n", __FUNCTION__); failures += random_vals(dev, p, BLADERF_CHANNEL_TX(0), quiet); return failures; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_ctrl/src/test_ctrl.h000066400000000000000000000077311457144405000261250ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef TEST_CTRL_H_ #define TEST_CTRL_H_ #include "conversions.h" #include "host_config.h" #include "rel_assert.h" #include "test_common.h" #include #include #include #include #include typedef size_t failure_count; #define DECLARE_TEST(name_) \ extern failure_count test_##name_(struct bladerf *, struct app_params *p, \ bool quiet); \ extern const struct test_case test_case_##name_; #endif #define DECLARE_TEST_CASE(name_) \ const struct test_case test_case_##name_ = { #name_, &test_##name_ } #define PRINT(...) \ do { \ if (!quiet) { \ printf(__VA_ARGS__); \ fflush(stdout); \ } \ } while (0) #define PR_ERROR(...) fprintf(stderr, "[ERROR] " __VA_ARGS__) #define DEFAULT_BUF_LEN 16384 #define DEFAULT_NUM_BUFFERS 16 #define DEFAULT_NUM_XFERS 8 #define DEFAULT_TIMEOUT_MS 10000 #define DEFAULT_SAMPLERATE 1000000 struct app_params { bool use_xb200; bladerf_tuning_mode tuning_mode; char *device_str; char *test_name; uint64_t randval_seed; uint64_t randval_state; bool module_enabled; bool fast_test; }; struct test_case { const char *name; failure_count (*fn)(struct bladerf *dev, struct app_params *p, bool quiet); }; /** * @brief Translate a bladerf_direction and channel number to a * bladerf_channel * * @param _dir Direction * @param _idx Channel number * * @return BLADERF_CHANNEL_TX(_idx) or BLADERF_CHANNEL_RX(_idx) */ #define CHANNEL_IDX(_dir, _idx) \ (BLADERF_TX == _dir) ? BLADERF_CHANNEL_TX(_idx) : BLADERF_CHANNEL_RX(_idx) /** * @brief Iterate over all bladerf_directions * * @param _dir Direction */ #define FOR_EACH_DIRECTION(_dir) \ for (_dir = BLADERF_RX; _dir <= BLADERF_TX; ++_dir) /** * @brief Iterate over all channels in a given direction * * @param _dir Direction * @param _count Number of channels * @param[out] _index Index variable (size_t) * @param[out] _channel Channel variable (bladerf_channel) * * @return { description_of_the_return_value } */ #define FOR_EACH_CHANNEL(_dir, _count, _index, _channel) \ for (_index = 0, _channel = CHANNEL_IDX(_dir, _index); _index < _count; \ ++_index, _channel = CHANNEL_IDX(_dir, _index)) DECLARE_TEST(bandwidth); DECLARE_TEST(correction); DECLARE_TEST(enable_module); DECLARE_TEST(gain); DECLARE_TEST(frequency); DECLARE_TEST(loopback); DECLARE_TEST(rx_mux); DECLARE_TEST(lpf_mode); DECLARE_TEST(samplerate); DECLARE_TEST(sampling); DECLARE_TEST(threads); DECLARE_TEST(xb200); bladeRF-2024.05/host/libraries/libbladeRF_test/test_ctrl/src/test_enable_module.c000066400000000000000000000056111457144405000277420ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include "test_ctrl.h" DECLARE_TEST_CASE(enable_module); static int enable_module(struct bladerf *dev, bladerf_channel ch, bool enable) { int status; status = bladerf_enable_module(dev, ch, enable); if (status != 0) { PR_ERROR("Failed to %s module: %s\n", enable ? "enable" : "disable", bladerf_strerror(status)); /* Try to avoid leaving a module on */ bladerf_enable_module(dev, ch, false); return status; } return status; } failure_count test_enable_module(struct bladerf *dev, struct app_params *p, bool quiet) { size_t const rx_ch = bladerf_get_channel_count(dev, BLADERF_RX); size_t const tx_ch = bladerf_get_channel_count(dev, BLADERF_TX); bladerf_direction dir; int pass; size_t idx; failure_count failures = 0; int status; PRINT("%s: Enabling and disabling channels (%zu RX, %zu TX)...\n", __FUNCTION__, rx_ch, tx_ch); // do off, then on, then off for (pass = 0; pass <= 2; ++pass) { bool enable = (1 == (pass % 2)); // first RX, then TX for (dir = BLADERF_RX; dir <= BLADERF_TX; ++dir) { size_t ch_count = (BLADERF_RX == dir) ? rx_ch : tx_ch; // iterate through the channels... for (idx = 0; idx < ch_count; ++idx) { bladerf_channel ch = (BLADERF_RX == dir ? BLADERF_CHANNEL_RX(idx) : BLADERF_CHANNEL_TX(idx)); status = enable_module(dev, ch, enable); if (status != 0) { failures++; } } } } return failures; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_ctrl/src/test_frequency.c000066400000000000000000000143631457144405000271540ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include "test_ctrl.h" #include DECLARE_TEST_CASE(frequency); /* Due to some known rounding issues, the readback may be off. We'll not fail * out on this for now... */ static inline bool freq_match(bladerf_frequency a, bladerf_frequency b) { bladerf_frequency const band_split = 3000000000UL; bladerf_frequency const allowed_slack = (a >= band_split) ? 5 : 3; return (a >= (b - allowed_slack) && a <= (b + allowed_slack)); } static int set_and_check(struct bladerf *dev, bladerf_module m, bladerf_frequency freq, bladerf_frequency prev_freq) { bladerf_frequency readback; int status; status = bladerf_set_frequency(dev, m, freq); if (status != 0) { PR_ERROR("Failed to set frequency: %" BLADERF_PRIuFREQ " Hz (Prev: %" BLADERF_PRIuFREQ " Hz): %s\n", freq, prev_freq, bladerf_strerror(status)); return status; } status = bladerf_get_frequency(dev, m, &readback); if (status != 0) { PR_ERROR("Failed to get frequency: %s\n", bladerf_strerror(status)); return status; } if (!freq_match(freq, readback)) { PR_ERROR("Frequency (%" BLADERF_PRIuFREQ ") != Readback value (%" BLADERF_PRIuFREQ ")\n", freq, readback); return -1; } return status; } static failure_count freq_sweep(struct bladerf *dev, bladerf_module m, struct app_params *p, bladerf_frequency min, bladerf_frequency max, bool quiet) { size_t const repetitions = (p->fast_test) ? 1 : 3; size_t const inc = (p->fast_test) ? 10e6 : 1000000; bladerf_frequency freq = 0; bladerf_frequency prev_freq = 0; size_t n, r; failure_count failures = 0; int status; for (r = 0; r < repetitions; r++) { for (freq = min, n = 0; freq <= max; freq += inc, n++) { status = set_and_check(dev, m, freq, prev_freq); if (status != 0) { failures++; } else if (n % 50 == 0) { PRINT("\r Currently tuned to %-10" BLADERF_PRIuFREQ " Hz...", freq); fflush(stdout); } prev_freq = freq; } } PRINT("\n"); fflush(stdout); return failures; } static failure_count random_tuning(struct bladerf *dev, struct app_params *p, bladerf_module m, bladerf_frequency min, bladerf_frequency max, bool quiet) { size_t const num_iterations = (p->fast_test) ? 100 : 10000; bladerf_frequency freq = 0; bladerf_frequency prev_freq = 0; size_t i, n; failure_count failures = 0; int status; for (i = n = 0; i < num_iterations; i++, n++) { randval_update(&p->randval_state); freq = min + (p->randval_state % max); if (freq < min) { freq = min; } else if (freq > max) { freq = max; } status = set_and_check(dev, m, freq, prev_freq); if (status != 0) { failures++; } else if (n % 50 == 0) { PRINT("\r Currently tuned to %-10" BLADERF_PRIuFREQ " Hz...", freq); fflush(stdout); } prev_freq = freq; } PRINT("\n"); fflush(stdout); return failures; } failure_count test_frequency(struct bladerf *dev, struct app_params *p, bool quiet) { failure_count failures = 0; int status; bladerf_direction dir; FOR_EACH_DIRECTION(dir) { size_t i; bladerf_channel ch; FOR_EACH_CHANNEL(dir, 1, i, ch) { struct bladerf_range const *range; bladerf_frequency min, max; PRINT("%s: Testing %s...\n", __FUNCTION__, direction2str(dir)); status = bladerf_get_frequency_range(dev, ch, &range); if (status < 0) { PR_ERROR("Failed to get %s frequency range: %s\n", direction2str(dir), bladerf_strerror(status)); return status; }; min = (bladerf_frequency)(range->min * range->scale); max = (bladerf_frequency)(range->max * range->scale); PRINT("%s: %s range: %" BLADERF_PRIuFREQ " to %" BLADERF_PRIuFREQ "\n", __FUNCTION__, direction2str(dir), min, max); PRINT("%s: Performing %s frequency sweep...\n", __FUNCTION__, direction2str(dir)); failures += freq_sweep(dev, ch, p, min, max, quiet); PRINT("%s: Performing random %s tuning...\n", __FUNCTION__, direction2str(dir)); failures += random_tuning(dev, p, ch, min, max, quiet); } } return failures; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_ctrl/src/test_gain.c000066400000000000000000000256701457144405000260740ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include "test_ctrl.h" #include DECLARE_TEST_CASE(gain); #define MAX_STAGES 8 #define __round_int(x) (x >= 0 ? (int)(x + 0.5) : (int)(x - 0.5)) struct gain { char const *name; float min; float max; float inc; }; static inline int set_and_check(struct bladerf *dev, bladerf_channel ch, struct gain const *g, int gain) { int readback; int status; if (0 == strcmp(g->name, "overall")) { status = bladerf_set_gain(dev, ch, gain); if (status != 0) { PR_ERROR("Failed to set %s gain: %s\n", g->name, bladerf_strerror(status)); return status; } status = bladerf_get_gain(dev, ch, &readback); if (status != 0) { PR_ERROR("Failed to read back %s gain: %s\n", g->name, bladerf_strerror(status)); return status; } } else { status = bladerf_set_gain_stage(dev, ch, g->name, gain); if (status != 0) { PR_ERROR("Failed to set %s gain: %s\n", g->name, bladerf_strerror(status)); return status; } status = bladerf_get_gain_stage(dev, ch, g->name, &readback); if (status != 0) { PR_ERROR("Failed to read back %s gain: %s\n", g->name, bladerf_strerror(status)); return status; } } if (gain != readback) { PR_ERROR("Erroneous %s gain readback=%d, expected=%d\n", g->name, readback, gain); return -1; } return 0; } static failure_count gain_sweep(struct bladerf *dev, bladerf_channel ch, bool quiet) { char const **stages = NULL; failure_count failures = 0; size_t i; int status; stages = calloc(MAX_STAGES + 1, sizeof(char *)); if (NULL == stages) { PR_ERROR("Failed to calloc gain stage array\n"); return -1; } int const n_stages = bladerf_get_gain_stages(dev, ch, stages, MAX_STAGES); if (n_stages < 0) { PR_ERROR("Failed to enumerate gain stages: %s\n", bladerf_strerror(n_stages)); failures = -1; goto out; } for (i = 0; i <= (unsigned)n_stages; i++) { struct bladerf_range const *range; struct gain stage; float gain; if ((unsigned)n_stages == i) { // magic null value stage.name = "overall"; PRINT(" %s\n", stage.name); status = bladerf_get_gain_range(dev, ch, &range); if (status < 0) { PR_ERROR("Failed to retrieve range of overall gain: %s\n", bladerf_strerror(n_stages)); failures++; continue; } } else { stage.name = stages[i]; PRINT(" %s\n", stage.name); status = bladerf_get_gain_stage_range(dev, ch, stage.name, &range); if (status < 0) { PR_ERROR("Failed to retrieve range of gain stage %s: %s\n", stage.name, bladerf_strerror(n_stages)); failures++; continue; } } stage.min = (float)(range->min * range->scale); stage.max = (float)(range->max * range->scale); stage.inc = (float)range->step; fflush(stdout); for (gain = stage.min; gain <= stage.max; gain += stage.inc) { status = set_and_check(dev, ch, &stage, __round_int(gain)); if (status != 0) { failures++; } } } out: free((char **)stages); return failures; } static failure_count random_gains(struct bladerf *dev, struct app_params *p, bladerf_channel ch, bool quiet) { size_t const iterations = 250; char const **stages = NULL; failure_count failures = 0; size_t i, j; int status; stages = calloc(MAX_STAGES + 1, sizeof(char *)); if (NULL == stages) { PR_ERROR("Failed to calloc gain stage array\n"); return -1; } int const n_stages = bladerf_get_gain_stages(dev, ch, stages, MAX_STAGES); if (n_stages < 0) { PR_ERROR("Failed to enumerate gain stages: %s\n", bladerf_strerror(n_stages)); failures = -1; goto out; } for (i = 0; i <= (unsigned)n_stages; i++) { struct bladerf_range const *range; struct gain stage; if ((unsigned)n_stages == i) { // magic null value stage.name = "overall"; PRINT(" %s\n", stage.name); status = bladerf_get_gain_range(dev, ch, &range); if (status < 0) { PR_ERROR("Failed to retrieve range of overall gain: %s\n", bladerf_strerror(n_stages)); failures++; continue; } } else { stage.name = stages[i]; PRINT(" %s\n", stage.name); status = bladerf_get_gain_stage_range(dev, ch, stage.name, &range); if (status < 0) { PR_ERROR("Failed to retrieve range of gain stage %s: %s\n", stage.name, bladerf_strerror(n_stages)); failures++; continue; } } stage.min = (range->min * range->scale); stage.max = (range->max * range->scale); stage.inc = (range->step * range->scale); int const n_incs = __round_int((stage.max - stage.min) / stage.inc); for (j = 0; j < iterations; j++) { float gain; randval_update(&p->randval_state); gain = stage.min + (p->randval_state % n_incs) * stage.inc; if (gain > stage.max) { gain = stage.max; } else if (gain < stage.min) { gain = stage.min; } status = set_and_check(dev, ch, &stage, __round_int(gain)); if (status != 0) { failures++; } } } out: free((char **)stages); return failures; } failure_count test_gain(struct bladerf *dev, struct app_params *p, bool quiet) { failure_count failures = 0; bladerf_direction dir; bladerf_frequency const TEST_FREQ = 420000000; FOR_EACH_DIRECTION(dir) { size_t i; bladerf_channel ch; FOR_EACH_CHANNEL(dir, bladerf_get_channel_count(dev, dir), i, ch) { bladerf_gain_mode old_mode; int status; /* NOTE: This is a workaround for a bug in fpga v0.10.2 on bladerf2, * where the frequency post-initialization is not valid. */ status = bladerf_set_frequency(dev, ch, TEST_FREQ); if (status != 0) { PR_ERROR("Failed to set frequency %" BLADERF_PRIuFREQ " Hz: %s\n", TEST_FREQ, bladerf_strerror(status)); return status; } if (!BLADERF_CHANNEL_IS_TX(ch)) { /* Switch to manual gain control */ status = bladerf_get_gain_mode(dev, ch, &old_mode); if (status < 0 && status != BLADERF_ERR_UNSUPPORTED) { PR_ERROR( "Failed to get current gain mode on channel %s: %s\n", channel2str(ch), bladerf_strerror(status)); failures += 1; continue; } status = bladerf_set_gain_mode(dev, ch, BLADERF_GAIN_MGC); if (status < 0 && status != BLADERF_ERR_UNSUPPORTED) { PR_ERROR("Failed to set gain mode on channel %s: %s\n", channel2str(ch), bladerf_strerror(status)); failures += 1; continue; } if (!p->module_enabled) { /* Enable channel (necessary for RX gain changes to register * on bladerf2) */ status = bladerf_enable_module(dev, ch, true); if (status < 0) { PR_ERROR("Failed to enable channel %s: %s\n", channel2str(ch), bladerf_strerror(status)); failures += 1; continue; } } } PRINT("%s: Performing gain sweep on %s...\n", __FUNCTION__, channel2str(ch)); failures += gain_sweep(dev, ch, quiet); PRINT("%s: Applying random gains on %s...\n", __FUNCTION__, channel2str(ch)); failures += random_gains(dev, p, ch, quiet); if (!BLADERF_CHANNEL_IS_TX(ch)) { if (!p->module_enabled) { /* Deactivate the channel */ status = bladerf_enable_module(dev, ch, false); if (status < 0) { PR_ERROR("Failed to deactivate channel %s: %s\n", channel2str(ch), bladerf_strerror(status)); failures += 1; continue; } } /* Return to previous gain control mode */ status = bladerf_set_gain_mode(dev, ch, old_mode); if (status < 0 && status != BLADERF_ERR_UNSUPPORTED) { PR_ERROR("Failed to set gain mode on channel %s: %s\n", channel2str(ch), bladerf_strerror(status)); failures += 1; continue; } } } } return failures; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_ctrl/src/test_loopback.c000066400000000000000000000056251457144405000267460ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include "test_ctrl.h" DECLARE_TEST_CASE(loopback); static int set_and_check(struct bladerf *dev, bladerf_loopback l) { bladerf_loopback readback; int status, status_disable_lb; status = bladerf_set_loopback(dev, l); if (status != 0) { PR_ERROR("Failed to set loopback: %s\n", bladerf_strerror(status)); /* Try to ensure we don't leave the device in loopback */ status_disable_lb = bladerf_set_loopback(dev, BLADERF_LB_NONE); if (status_disable_lb) { PR_ERROR("Failed to restore loopback to 'none': %s\n", bladerf_strerror(status_disable_lb)); } return status; } status = bladerf_get_loopback(dev, &readback); if (status != 0) { PR_ERROR("Failed to get loopback setting: %s\n", bladerf_strerror(status)); return status; } if (l != readback) { PR_ERROR("Unexpected loopback readback=%d, expected=%d\n", readback, l); return -1; } return 0; } failure_count test_loopback(struct bladerf *dev, struct app_params *p, bool quiet) { size_t count, i; failure_count failures = 0; int status; PRINT("%s: Setting and checking loopback modes...\n", __FUNCTION__); struct bladerf_loopback_modes const *modes = NULL; count = bladerf_get_loopback_modes(dev, &modes); for (i = 0; i < count; i++) { PRINT("%s: Trying %s...\n", __FUNCTION__, modes[i].name); status = set_and_check(dev, modes[i].mode); if (status != 0) { failures++; } } status = set_and_check(dev, BLADERF_LB_NONE); if (status != 0) { failures++; } return failures; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_ctrl/src/test_lpf_mode.c000066400000000000000000000063551457144405000267420ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include "test_ctrl.h" #include DECLARE_TEST_CASE(lpf_mode); static int set_and_check(struct bladerf *dev, bladerf_channel ch, bladerf_lpf_mode mode) { bladerf_lpf_mode readback; int status; status = bladerf_set_lpf_mode(dev, ch, mode); if (status != 0) { PR_ERROR("Failed to set LPF mode: %s\n", bladerf_strerror(status)); return status; } status = bladerf_get_lpf_mode(dev, ch, &readback); if (status != 0) { PR_ERROR("Failed to get LPF mode: %s\n", bladerf_strerror(status)); /* Last ditch effor to restore normal configuration */ bladerf_set_lpf_mode(dev, ch, BLADERF_LPF_NORMAL); return status; } if (readback != mode) { PR_ERROR("Readback failure -- value=%d, expected=%d\n", readback, mode); return -1; } return 0; } static failure_count test_module(struct bladerf *dev, bladerf_channel ch) { int status; failure_count failures = 0; status = set_and_check(dev, ch, BLADERF_LPF_NORMAL); if (status != 0) { failures++; } status = set_and_check(dev, ch, BLADERF_LPF_BYPASSED); if (status != 0) { failures++; } status = set_and_check(dev, ch, BLADERF_LPF_DISABLED); if (status != 0) { failures++; } status = set_and_check(dev, ch, BLADERF_LPF_NORMAL); if (status != 0) { failures++; } return failures; } failure_count test_lpf_mode(struct bladerf *dev, struct app_params *p, bool quiet) { failure_count failures = 0; if (0 != strcmp(bladerf_get_board_name(dev), "bladerf1")) { PRINT("%s: board is not a bladerf1, skipping\n", __FUNCTION__); return 0; } PRINT("%s: Setting and reading back RX LPF modes...\n", __FUNCTION__); failures += test_module(dev, BLADERF_CHANNEL_RX(0)); PRINT("%s: Setting and reading back TX LPF modes...\n", __FUNCTION__); failures += test_module(dev, BLADERF_CHANNEL_TX(0)); return failures; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_ctrl/src/test_rx_mux.c000066400000000000000000000055771457144405000265040ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include "test_ctrl.h" DECLARE_TEST_CASE(rx_mux); static int set_and_check(struct bladerf *dev, bladerf_rx_mux mux) { bladerf_rx_mux readback; int status, status_restore; status = bladerf_set_rx_mux(dev, mux); if (status != 0) { PR_ERROR("Failed to set rx mux: %s\n", bladerf_strerror(status)); /* Try to ensure we don't leave the device in an alternate MUX mode */ status_restore = bladerf_set_rx_mux(dev, BLADERF_RX_MUX_BASEBAND); if (status_restore) { PR_ERROR("Failed to restore rx mux to 'BASEBAND_LMS': %s\n", bladerf_strerror(status_restore)); } return status; } status = bladerf_get_rx_mux(dev, &readback); if (status != 0) { PR_ERROR("Failed to get rx mux setting: %s\n", bladerf_strerror(status)); return status; } if (mux != readback) { PR_ERROR("Unexpected rx mux readback=%d, expected=%d\n", readback, mux); return -1; } return 0; } failure_count test_rx_mux(struct bladerf *dev, struct app_params *p, bool quiet) { bladerf_rx_mux const muxes[] = { // clang-format off BLADERF_RX_MUX_BASEBAND, BLADERF_RX_MUX_12BIT_COUNTER, BLADERF_RX_MUX_32BIT_COUNTER, BLADERF_RX_MUX_DIGITAL_LOOPBACK, BLADERF_RX_MUX_BASEBAND /* Restore normal operation */ // clang-format on }; size_t i; failure_count failures = 0; int status; PRINT("%s: Setting and checking rx muxes...\n", __FUNCTION__); for (i = 0; i < ARRAY_SIZE(muxes); i++) { status = set_and_check(dev, muxes[i]); if (status != 0) { failures++; } } return failures; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_ctrl/src/test_samplerate.c000066400000000000000000000224731457144405000273110ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include "host_config.h" #include "test_ctrl.h" #include DECLARE_TEST_CASE(samplerate); static int set_and_check(struct bladerf *dev, bladerf_channel ch, bladerf_sample_rate rate) { static bladerf_sample_rate samplerate_hist[5]; static const int HIST_LEN = sizeof(samplerate_hist)/sizeof(samplerate_hist[0]); bladerf_sample_rate actual, readback; int status; // Shift the history buffer to the right and // prepend the current rate for (int i = HIST_LEN - 1; i > 0; i--) { samplerate_hist[i] = samplerate_hist[i-1]; } samplerate_hist[0] = rate; status = bladerf_set_sample_rate(dev, ch, rate, &actual); if (status != 0) { PR_ERROR("Failed to set sample rate to %uHz\n", rate); printf("Sample rate history:\n"); for (int i = 0; i < HIST_LEN; i++) { printf("[%i] %u\n", i, samplerate_hist[i]); } return status; } status = bladerf_get_sample_rate(dev, ch, &readback); if (status != 0) { PR_ERROR("Failed to read back sample rate: %s\n", bladerf_strerror(status)); return status; } return 0; } static int set_and_check_rational(struct bladerf *dev, bladerf_channel ch, struct bladerf_rational_rate *rate) { struct bladerf_rational_rate actual, readback; int status; status = bladerf_set_rational_sample_rate(dev, ch, rate, &actual); if (status != 0) { PR_ERROR("Failed to set rational sample rate: %s\n", bladerf_strerror(status)); return status; } status = bladerf_get_rational_sample_rate(dev, ch, &readback); if (status != 0) { PR_ERROR("Failed to read back rational sample rate: %s\n", bladerf_strerror(status)); return status; } if (actual.integer != readback.integer || actual.num != readback.num || actual.den != readback.den) { PR_ERROR("Readback mismatch:\n" " actual: int=%" PRIu64 " num=%" PRIu64 " den=%" PRIu64 "\n" " readback: int=%" PRIu64 " num=%" PRIu64 " den=%" PRIu64 "\n", actual.integer, actual.num, actual.den, readback.integer, readback.num, readback.den); return status; } return 0; } static failure_count sweep_samplerate(struct bladerf *dev, struct app_params *p, bladerf_channel ch, bool quiet, bladerf_sample_rate min, bladerf_sample_rate max) { bladerf_sample_rate const inc = (p->fast_test) ? 10e6 : 10000; bladerf_sample_rate rate; size_t n; failure_count failures = 0; int status; for (rate = min, n = 0; rate <= max; rate += inc, n++) { status = set_and_check(dev, ch, rate); if (status != 0) { failures++; } else if (n % 50 == 0) { PRINT("\r Sample rate currently set to %-10u Hz...", rate); fflush(stdout); } } PRINT("\n"); fflush(stdout); return failures; } static failure_count random_samplerates(struct bladerf *dev, struct app_params *p, bladerf_channel ch, bool quiet, bladerf_sample_rate min, bladerf_sample_rate max) { size_t const iterations = (p->fast_test) ? 25 : 2500; bladerf_sample_rate rate; size_t i, n; failure_count failures = 0; int status; for (i = n = 0; i < iterations; i++, n++) { bladerf_sample_rate const mod = max - min + 1; randval_update(&p->randval_state); rate = min + (p->randval_state % mod); assert(rate <= max); status = set_and_check(dev, ch, rate); if (status != 0) { failures++; } else if (n % 50 == 0) { PRINT("\r Sample rate currently set to %-10u Hz...", rate); fflush(stdout); } } PRINT("\n"); fflush(stdout); return failures; } static failure_count random_rational_samplerates(struct bladerf *dev, struct app_params *p, bladerf_channel ch, bool quiet, bladerf_sample_rate min, bladerf_sample_rate max) { size_t const iterations = (p->fast_test) ? 25 : 2500; struct bladerf_rational_rate rate; size_t i, n; unsigned failures = 0; int status; for (i = n = 0; i < iterations; i++, n++) { size_t const mod = max - min; randval_update(&p->randval_state); rate.integer = min + (p->randval_state % mod); if (rate.integer < min) { rate.integer = min; } else if (rate.integer > max) { rate.integer = max; } if (rate.integer != max) { randval_update(&p->randval_state); rate.num = (p->randval_state % max); randval_update(&p->randval_state); rate.den = (p->randval_state % max); if (0 == rate.den) { rate.den = 1; } while ((rate.num / rate.den) > max) { rate.num /= 2; } while ((1 + rate.integer + (rate.num / rate.den)) > max) { rate.num /= 2; } } else { rate.num = 0; rate.den = 1; } status = set_and_check_rational(dev, ch, &rate); if (status != 0) { failures++; } else if (n % 50 == 0) { PRINT("\r Sample rate currently set to %-10" PRIu64 " %-10" PRIu64 "/%-10" PRIu64 " Hz...", rate.integer, rate.num, rate.den); fflush(stdout); } } PRINT("\n"); fflush(stdout); return failures; } failure_count test_samplerate(struct bladerf *dev, struct app_params *p, bool quiet) { failure_count failures = 0; int status; bladerf_direction dir; FOR_EACH_DIRECTION(dir) { size_t i; bladerf_channel ch; FOR_EACH_CHANNEL(dir, 1, i, ch) { struct bladerf_range const *range; bladerf_sample_rate min, max; PRINT("%s: Testing %s...\n", __FUNCTION__, direction2str(dir)); status = bladerf_get_sample_rate_range(dev, ch, &range); if (status < 0) { PR_ERROR("Failed to get %s sample rate range: %s\n", direction2str(dir), bladerf_strerror(status)); return status; }; min = (bladerf_sample_rate)(range->min * range->scale); max = (bladerf_sample_rate)(range->max * range->scale); PRINT("%s: %s range: %u to %u\n", __FUNCTION__, direction2str(dir), min, max); PRINT("%s: Sweeping %s sample rates...\n", __FUNCTION__, direction2str(dir)); failures += sweep_samplerate(dev, p, ch, quiet, min, max); PRINT("%s: Applying random %s sample rates...\n", __FUNCTION__, direction2str(dir)); failures += random_samplerates(dev, p, ch, quiet, min, max); PRINT("%s: Applying random %s rational sample rates...\n", __FUNCTION__, direction2str(dir)); failures += random_rational_samplerates(dev, p, ch, quiet, min, max); } } /* Restore the device back to a sane default sample rate, as not to * interfere with later tests */ FOR_EACH_DIRECTION(dir) { size_t i; bladerf_channel ch; FOR_EACH_CHANNEL(dir, 1, i, ch) { failures += set_and_check(dev, ch, DEFAULT_SAMPLERATE); } } return failures; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_ctrl/src/test_sampling.c000066400000000000000000000060471457144405000267650ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include "test_ctrl.h" #include DECLARE_TEST_CASE(sampling); static inline const char *sampling_str(bladerf_sampling s) { switch (s) { case BLADERF_SAMPLING_INTERNAL: return "internal"; case BLADERF_SAMPLING_EXTERNAL: return "external"; default: return "unknown"; } } static int set_and_check(struct bladerf *dev, bladerf_sampling s) { int status; bladerf_sampling readback; status = bladerf_set_sampling(dev, s); if (status != 0) { PR_ERROR("Failed to set sampling=%s: %s\n", sampling_str(s), bladerf_strerror(status)); return status; } status = bladerf_get_sampling(dev, &readback); if (status != 0) { PR_ERROR("Failed to read back sampling type: %s\n", bladerf_strerror(status)); /* Last ditch attempt to restore internal sampling */ bladerf_set_sampling(dev, BLADERF_SAMPLING_INTERNAL); return status; } if (s != readback) { PR_ERROR("Sampling mismatch -- readback=%s, expected=%s\n", sampling_str(readback), sampling_str(s)); return -1; } return 0; } failure_count test_sampling(struct bladerf *dev, struct app_params *p, bool quiet) { int status; failure_count failures = 0; if (0 != strcmp(bladerf_get_board_name(dev), "bladerf1")) { PRINT("%s: board is not a bladerf1, skipping\n", __FUNCTION__); return 0; } status = set_and_check(dev, BLADERF_SAMPLING_EXTERNAL); if (status != 0) { failures++; } status = set_and_check(dev, BLADERF_SAMPLING_INTERNAL); if (status != 0) { failures++; } status = set_and_check(dev, BLADERF_SAMPLING_EXTERNAL); if (status != 0) { failures++; } return failures; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_ctrl/src/test_threads.c000066400000000000000000000200051457144405000265730ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ /* This test is intended to execise one or more threads making control calls * while concurrently runing full duplex streams via the sync interface */ #include "test_ctrl.h" #include DECLARE_TEST_CASE(threads); struct sync_task { struct bladerf *dev; bladerf_direction direction; pthread_t thread; pthread_mutex_t lock; bool launched; bool run; int status; }; struct thread_test_case { size_t const iterations; bool const quiet; struct test_case const *test; }; struct thread_state { bool launched; struct bladerf *dev; struct app_params *p; failure_count failures; struct thread_test_case const *tc; pthread_t thread; }; static const struct thread_test_case tc[] = { // clang-format off { 100, true, &test_case_xb200 }, { 75, true, &test_case_gain }, { 25, true, &test_case_bandwidth }, { 1, true, &test_case_correction }, { 1, false, &test_case_frequency }, // clang-format on }; static inline void get_sync_task_state(struct sync_task *t, bool *run) { pthread_mutex_lock(&t->lock); *run = t->run; pthread_mutex_unlock(&t->lock); } static void *stream_task(void *arg) { struct sync_task *t = (struct sync_task *)arg; int16_t *samples = NULL; bladerf_channel_layout layout; bool run; int status; samples = calloc(DEFAULT_BUF_LEN, 2 * sizeof(int16_t)); if (NULL == samples) { status = BLADERF_ERR_MEM; goto out; } layout = (BLADERF_RX == t->direction) ? BLADERF_RX_X1 : BLADERF_TX_X1; status = bladerf_sync_config(t->dev, layout, BLADERF_FORMAT_SC16_Q11, DEFAULT_NUM_BUFFERS, DEFAULT_BUF_LEN, DEFAULT_NUM_XFERS, DEFAULT_TIMEOUT_MS); if (status != 0) { goto out; } status = bladerf_enable_module(t->dev, t->direction, true); if (status != 0) { goto out; } get_sync_task_state(t, &run); while (run && 0 == status) { if (BLADERF_RX == t->direction) { status = bladerf_sync_rx(t->dev, samples, DEFAULT_BUF_LEN, NULL, DEFAULT_TIMEOUT_MS); } else { status = bladerf_sync_tx(t->dev, samples, DEFAULT_BUF_LEN, NULL, DEFAULT_TIMEOUT_MS); } if (status != 0) { PR_ERROR("%s failed with: %s\n", direction2str(t->direction), bladerf_strerror(status)); } get_sync_task_state(t, &run); } out: if (0 == status) { status = bladerf_enable_module(t->dev, t->direction, false); } else { bladerf_enable_module(t->dev, t->direction, false); } free(samples); pthread_mutex_lock(&t->lock); t->status = status; pthread_mutex_unlock(&t->lock); return NULL; } static void init_task(struct sync_task *t, struct bladerf *dev, bladerf_direction dir) { t->dev = dev; t->launched = false; t->run = true; t->status = 0; t->direction = dir; pthread_mutex_init(&t->lock, NULL); } static int launch_task(struct sync_task *t) { int status; status = pthread_create(&t->thread, NULL, stream_task, t); if (0 == status) { t->launched = true; } return status; } static inline int deinit_task(struct sync_task *t) { if (t->launched) { pthread_mutex_lock(&t->lock); t->run = false; pthread_mutex_unlock(&t->lock); pthread_join(t->thread, NULL); return t->status; } else { return 0; } } void *run_test_fn(void *arg) { struct thread_state *s = (struct thread_state *)arg; size_t i; for (i = 0; i < s->tc->iterations; i++) { s->failures += s->tc->test->fn(s->dev, s->p, s->tc->quiet); } return NULL; } failure_count test_threads(struct bladerf *dev, struct app_params *p, bool quiet) { size_t const num_threads = ARRAY_SIZE(tc); struct sync_task rx, tx; struct thread_state *threads = NULL; size_t i; failure_count failures = 0; int status; // Workaround for https://github.com/Nuand/bladeRF/issues/705 if (0 == strcmp(bladerf_get_board_name(dev), "bladerf2")) { bladerf_tuning_mode mode; status = bladerf_get_tuning_mode(dev, &mode); if (status < 0 && status != BLADERF_ERR_UNSUPPORTED) { PR_ERROR(" Could not get current tuning mode\n"); return 1; } if (mode != BLADERF_TUNING_MODE_FPGA) { PR_ERROR(" Cannot successfully run this test with host-based " "tuning on the bladerf2 (bug #705)\n"); return 1; } } PRINT("%s: Running full-duplex stream with multiple control threads...\n", __FUNCTION__); PRINT(" Printing output from test_frequency for status...\n"); p->module_enabled = true; init_task(&rx, dev, BLADERF_RX); init_task(&tx, dev, BLADERF_TX); threads = calloc(num_threads, sizeof(threads[0])); if (NULL == threads) { return 1; } for (i = 0; i < ARRAY_SIZE(tc); i++) { threads[i].launched = false; threads[i].dev = dev; threads[i].p = p; threads[i].failures = 0; threads[i].tc = &tc[i]; } status = bladerf_set_loopback(dev, BLADERF_LB_FIRMWARE); if (status != 0) { PR_ERROR("Failed to enable loopback: %s\n", bladerf_strerror(status)); failures++; goto out; } if (launch_task(&rx) != 0) { PR_ERROR("%s: Failed to launch RX thread\n", __FUNCTION__); goto out; } if (launch_task(&tx) != 0) { PR_ERROR("%s: Failed to launch TX thread\n", __FUNCTION__); goto out; } for (i = 0; i < num_threads; i++) { if (!p->use_xb200 && test_xb200 == threads[i].tc->test->fn) { continue; } status = pthread_create(&threads[i].thread, NULL, run_test_fn, &threads[i]); if (0 == status) { PRINT(" Started test_%s thread...\n", threads[i].tc->test->name); threads[i].launched = true; } else { PR_ERROR(" Failed to start test_%s thread...\n", threads[i].tc->test->name); failures++; } } for (i = 0; i < num_threads; i++) { if (threads[i].launched) { pthread_join(threads[i].thread, NULL); PRINT("\n Joined test_%s thread.\n", threads[i].tc->test->name); failures += threads[i].failures; } } out: deinit_task(&rx); deinit_task(&tx); p->module_enabled = false; status = bladerf_set_loopback(dev, BLADERF_LB_NONE); if (status != 0) { PR_ERROR("Failed to disable loopback: %s\n", bladerf_strerror(status)); failures++; } free(threads); return failures; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_ctrl/src/test_xb200.c000066400000000000000000000125071457144405000260040ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include "test_ctrl.h" DECLARE_TEST_CASE(xb200); static int set_and_check_paths(struct bladerf *dev, bladerf_channel ch, bladerf_xb200_path p) { int status; bladerf_xb200_path readback; status = bladerf_xb200_set_path(dev, ch, p); if (status != 0) { PR_ERROR("Failed to set XB-200 path: %s\n", bladerf_strerror(status)); return status; } status = bladerf_xb200_get_path(dev, ch, &readback); if (status != 0) { PR_ERROR("Failed to set XB-200 path: %s\n", bladerf_strerror(status)); return status; } if (p != readback) { PR_ERROR("Path mismatch -- path=%d, readback=%d\n", p, readback); return -1; } return 0; } static int set_and_check_filterbank(struct bladerf *dev, bladerf_channel ch, bladerf_xb200_filter f) { int status; bladerf_xb200_filter readback; status = bladerf_xb200_set_filterbank(dev, ch, f); if (status != 0) { PR_ERROR("Failed to set XB-200 filter bank: %s\n", bladerf_strerror(status)); return status; } status = bladerf_xb200_get_filterbank(dev, ch, &readback); if (status != 0) { PR_ERROR("Failed to read back filter bank: %s\n", bladerf_strerror(status)); return status; } if (f != readback) { PR_ERROR("Mismatch detected -- fiterbank=%d, readback=%d\n", f, readback); return -1; } return 0; } static failure_count test_paths(struct bladerf *dev) { int status; failure_count failures = 0; status = set_and_check_paths(dev, BLADERF_CHANNEL_RX(0), BLADERF_XB200_BYPASS); if (status != 0) { failures++; } status = set_and_check_paths(dev, BLADERF_CHANNEL_RX(0), BLADERF_XB200_MIX); if (status != 0) { failures++; } status = set_and_check_paths(dev, BLADERF_CHANNEL_TX(0), BLADERF_XB200_BYPASS); if (status != 0) { failures++; } status = set_and_check_paths(dev, BLADERF_CHANNEL_TX(0), BLADERF_XB200_MIX); if (status != 0) { failures++; } return failures; } static failure_count test_filterbanks(struct bladerf *dev) { int status; failure_count failures = 0; status = set_and_check_filterbank(dev, BLADERF_CHANNEL_RX(0), BLADERF_XB200_50M); // if (status != 0) { failures++; } status = set_and_check_filterbank(dev, BLADERF_CHANNEL_RX(0), BLADERF_XB200_144M); if (status != 0) { failures++; } status = set_and_check_filterbank(dev, BLADERF_CHANNEL_RX(0), BLADERF_XB200_222M); if (status != 0) { failures++; } status = set_and_check_filterbank(dev, BLADERF_CHANNEL_RX(0), BLADERF_XB200_CUSTOM); if (status != 0) { failures++; } status = set_and_check_filterbank(dev, BLADERF_CHANNEL_TX(0), BLADERF_XB200_50M); // if (status != 0) { failures++; } status = set_and_check_filterbank(dev, BLADERF_CHANNEL_TX(0), BLADERF_XB200_144M); if (status != 0) { failures++; } status = set_and_check_filterbank(dev, BLADERF_CHANNEL_TX(0), BLADERF_XB200_222M); if (status != 0) { failures++; } status = set_and_check_filterbank(dev, BLADERF_CHANNEL_TX(0), BLADERF_XB200_CUSTOM); if (status != 0) { failures++; } return failures; } failure_count test_xb200(struct bladerf *dev, struct app_params *p, bool quiet) { failure_count failures = 0; if (!p->use_xb200) { return 0; } PRINT("%s: Setting and reading back filter bank settings...\n", __FUNCTION__); failures += test_filterbanks(dev); PRINT("%s: Setting and reading back path settings...\n", __FUNCTION__); failures += test_paths(dev); return failures; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_digital_loopback/000077500000000000000000000000001457144405000254755ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_digital_loopback/CMakeLists.txt000066400000000000000000000021041457144405000302320ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.5) project(libbladeRF_test_digital_loopback C) set(INCLUDES ${libbladeRF_SOURCE_DIR}/include ${BLADERF_HOST_COMMON_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/../common/include ${CMAKE_CURRENT_SOURCE_DIR}/../../libbladeRF/src/streaming ) if(MSVC) set(INCLUDES ${INCLUDES} ${MSVC_C99_INCLUDES}) endif() set(LIBS libbladerf_shared) if(MSVC) find_package(LibPThreadsWin32 REQUIRED) set(INCLUDES ${INCLUDES} ${LIBPTHREADSWIN32_INCLUDE_DIRS}) set(LIBS ${LIBS} ${LIBPTHREADSWIN32_LIBRARIES}) else(MSVC) find_package(Threads REQUIRED) set(LIBS ${LIBS} ${CMAKE_THREAD_LIBS_INIT}) endif(MSVC) add_definitions(-DLOGGING_ENABLED=1) set(SRC src/main.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/conversions.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/log.c ) if(MSVC) set(SRC ${SRC} ${BLADERF_HOST_COMMON_SOURCE_DIR}/windows/getopt_long.c ) endif() include_directories(${INCLUDES}) add_executable(libbladeRF_test_digital_loopback ${SRC}) target_link_libraries(libbladeRF_test_digital_loopback ${LIBS}) bladeRF-2024.05/host/libraries/libbladeRF_test/test_digital_loopback/src/000077500000000000000000000000001457144405000262645ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_digital_loopback/src/main.c000066400000000000000000000601741457144405000273640ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2017-2018 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include #include #include #include #include "conversions.h" #include "log.h" #include "test_common.h" #include #include "async.h" /****************************************************************************** * Type definitions ******************************************************************************/ enum data_mode { DATA_CONSTANT, DATA_COUNTING, DATA_RANDOM }; enum loopback_mode { LOOPBACK_FW, LOOPBACK_FPGA, LOOPBACK_RFIC }; struct tx_buffer_state { void **buffers; unsigned int idx; unsigned int num; uint64_t rand_state; int16_t i_count, q_count; enum data_mode mode; enum loopback_mode lb_mode; }; struct rx_buffer_state { void **buffers; unsigned int idx; unsigned int num; uint64_t rand_state; int16_t i_count, q_count; enum data_mode mode; enum loopback_mode lb_mode; size_t max_count; }; /****************************************************************************** * Constants ******************************************************************************/ static uint16_t CONSTANT_PATTERN_I = 0x2ee; static uint16_t CONSTANT_PATTERN_Q = 0x2cc; static uint16_t const SAMPLE_MIN = -2047; static uint16_t const SAMPLE_MAX = 2047; static size_t const NUM_BUFFERS = 256; static size_t const BUFFER_SIZE = 32 * 1024; static size_t const MAX_ERRORS = 16; static unsigned int const NUM_TRANSFERS = 32; static struct option const long_options[] = { { "device", required_argument, NULL, 'd' }, { "loopback", required_argument, NULL, 'l' }, { "samplerate", required_argument, 0, 's' }, { "bitmode", required_argument, NULL, 'b' }, { "count", required_argument, 0, 'c' }, { "data", required_argument, NULL, 'D' }, { "help", no_argument, NULL, 'h' }, { "verbosity", required_argument, 0, 1 }, { "lib-verbosity", required_argument, 0, 2 }, { NULL, 0, NULL, 0 }, }; static struct numeric_suffix const freq_suffixes[] = { { "K", 1000 }, { "kHz", 1000 }, { "M", 1000000 }, { "MHz", 1000000 }, { "G", 1000000000 }, { "GHz", 1000000000 }, }; static size_t const num_freq_suffixes = sizeof(freq_suffixes) / sizeof(freq_suffixes[0]); static struct numeric_suffix const count_suffixes[] = { { "K", 1000 }, { "M", 1000000 }, { "G", 1000000000 }, }; static size_t const num_count_suffixes = sizeof(count_suffixes) / sizeof(count_suffixes[0]); /****************************************************************************** * Globals ******************************************************************************/ static bool do_shutdown = false; static uint64_t good_count = 0; static uint64_t bad_count = 0; /****************************************************************************** * TX Sample Generation ******************************************************************************/ void *tx_callback(struct bladerf *dev, struct bladerf_stream *stream, struct bladerf_metadata *meta, void *samples, size_t num_samples, void *user_data) { struct tx_buffer_state *state = user_data; uint16_t *buf; uint64_t value; uint16_t i_val = 0; uint16_t q_val = 0; size_t i; if (meta->status & (BLADERF_META_STATUS_OVERRUN | BLADERF_META_STATUS_UNDERRUN)) { log_critical("TX over/under flow detected, stopping.\n"); return BLADERF_STREAM_SHUTDOWN; } buf = state->buffers[state->idx]; state->idx = (state->idx + 1) % state->num; /* The AD9361 tends to swap channels when loopbacking */ size_t skip_by = (LOOPBACK_RFIC == state->lb_mode) ? 4 : 2; for (i = 0; i < 2 * num_samples; i += skip_by) { switch (state->mode) { case DATA_CONSTANT: i_val = CONSTANT_PATTERN_I; q_val = CONSTANT_PATTERN_Q; break; case DATA_RANDOM: value = randval_update(&state->rand_state); i_val = (value >> 32) & 0x3ff; q_val = value & 0x3ff; break; case DATA_COUNTING: i_val = state->i_count++; q_val = state->q_count--; if (state->i_count > SAMPLE_MAX) { state->i_count = SAMPLE_MIN; } if (state->q_count < SAMPLE_MIN) { state->q_count = SAMPLE_MAX; } break; } if (stream->format == BLADERF_FORMAT_SC8_Q7) { ((int8_t *)buf)[i] = i_val; ((int8_t *)buf)[i + 1] = q_val; if (skip_by == 4) { ((int8_t *)buf)[i + 2] = i_val; ((int8_t *)buf)[i + 3] = q_val; } } else { buf[i] = i_val; buf[i + 1] = q_val; if (skip_by == 4) { buf[i + 2] = i_val; buf[i + 3] = q_val; } } } if (do_shutdown) { return BLADERF_STREAM_SHUTDOWN; } return buf; } void *tx_streamer(void *context) { struct bladerf_stream *tx_stream = context; int status; status = bladerf_stream(tx_stream, BLADERF_TX_X1); if (status < 0) { log_error("tx bladerf_stream(): %s\n", bladerf_strerror(status)); do_shutdown = true; return NULL; } log_info("TX stream exited.\n"); return NULL; } /****************************************************************************** * RX Sample Processing ******************************************************************************/ bool check_rx(uint16_t *buf, size_t i, uint16_t expected_i, uint16_t expected_q, bladerf_format fmt) { static size_t error_dump = 0; static bool error_throttled = false; // Reset error throttling if (0 == i) { error_throttled = false; error_dump = 0; } log_verbose("checking: sample %6d expect %04x,%04x got " "%04x,%04x\n", i / 2, expected_i, expected_q, buf[i], buf[i + 1]); if (fmt == BLADERF_FORMAT_SC8_Q7 && ((int8_t *)buf)[i] == (int8_t)expected_i && ((int8_t *)buf)[i + 1] == (int8_t)expected_q) { return true; } else if (buf[i] == expected_i && buf[i + 1] == expected_q) { return true; } else { if (!error_throttled) { if (error_dump < MAX_ERRORS) { log_debug("MISMATCH: sample %6d expected %04x,%04x got " "%04x,%04x\n", i / 2, expected_i, expected_q, buf[i], buf[i + 1]); ++error_dump; } else { log_debug("Throttling future mismatch prints...\n"); error_throttled = true; } } return false; } } void *rx_callback(struct bladerf *dev, struct bladerf_stream *stream, struct bladerf_metadata *meta, void *samples, size_t num_samples, void *user_data) { struct rx_buffer_state *state = user_data; uint16_t *buf = samples; bool match = true; uint16_t expected_i, expected_q; uint64_t value; size_t i; static uint64_t last_status_print = 0; static size_t block_count = 0; /* The AD9361 tends to swap channels when loopbacking */ size_t skip_by = (LOOPBACK_RFIC == state->lb_mode) ? 4 : 2; if (meta->status & (BLADERF_META_STATUS_OVERRUN | BLADERF_META_STATUS_UNDERRUN)) { log_error("RX over/under flow detected, stopping.\n"); return BLADERF_STREAM_SHUTDOWN; } if (do_shutdown) { return BLADERF_STREAM_SHUTDOWN; } for (i = 0; i < 2 * num_samples; i += skip_by) { switch (state->mode) { case DATA_CONSTANT: expected_i = CONSTANT_PATTERN_I; expected_q = CONSTANT_PATTERN_Q; if (check_rx(buf, i, expected_i, expected_q, stream->format)) { ++good_count; } else { match = false; ++bad_count; } break; case DATA_RANDOM: value = randval_update(&state->rand_state); expected_i = (value >> 32) & 0x3ff; expected_q = value & 0x3ff; if (check_rx(buf, i, expected_i, expected_q, stream->format)) { ++good_count; } else { match = false; ++bad_count; } break; case DATA_COUNTING: expected_i = state->i_count++; expected_q = state->q_count--; if (check_rx(buf, i, expected_i, expected_q, stream->format)) { ++good_count; } else { match = false; ++bad_count; // resync... state->i_count = buf[i] + 1; state->q_count = buf[i + 1] - 1; } if (state->i_count > SAMPLE_MAX) { state->i_count = SAMPLE_MIN; } if (state->q_count < SAMPLE_MIN) { state->q_count = SAMPLE_MAX; } } } if (!match) { log_warning("RX Mismatch detected in block %d\n", block_count); #if 0 for (i = 0; i < 2*128; i++) { printf("%02x ", buf[i]); } printf("\n\n"); #endif } buf = state->buffers[state->idx]; state->idx = (state->idx + 1) % state->num; if ((good_count + bad_count - last_status_print) > 100000000) { log_info("IQ Matches: %zu / %zu (%.1f%%), %d blocks\n", good_count, good_count + bad_count, 100.0 * ((double)good_count) / ((double)(good_count + bad_count)), block_count); last_status_print = good_count; } ++block_count; if ((state->max_count > 0) && ((good_count + bad_count) > state->max_count)) { do_shutdown = true; } return buf; } void *rx_streamer(void *context) { struct bladerf_stream *rx_stream = context; int status; status = bladerf_stream(rx_stream, BLADERF_RX_X1); if (status < 0) { log_error("rx bladerf_stream(): %s\n", bladerf_strerror(status)); do_shutdown = true; return NULL; } log_info("RX stream exited.\n"); return NULL; } /****************************************************************************** * Main functions ******************************************************************************/ void handler(int signal) { if (signal == SIGTERM || signal == SIGINT) { do_shutdown = true; log_error("Caught signal, canceling transfers\n"); fflush(stdout); } } int configure_module(struct bladerf *dev, bladerf_channel ch, uint32_t sample_rate) { uint64_t const FREQUENCY = 2400000000UL; uint32_t const BANDWIDTH = 20000000; int status; status = bladerf_set_frequency(dev, ch, FREQUENCY); if (status != 0) { log_error("Failed to set ch %d frequency = %" PRIu64 ": %s\n", ch, FREQUENCY, bladerf_strerror(status)); return status; } status = bladerf_set_bandwidth(dev, ch, BANDWIDTH, NULL); if (status != 0) { log_error("Failed to set ch %d bandwidth = %u: %s\n", ch, BANDWIDTH, bladerf_strerror(status)); return status; } status = bladerf_set_sample_rate(dev, ch, sample_rate, NULL); if (status != 0) { log_error("Failed to set ch %d sample rate = %u: %s\n", ch, sample_rate, bladerf_strerror(status)); return status; } return 0; } int main(int argc, char *argv[]) { uint32_t sample_rate = 7680000; enum loopback_mode test_loopback_mode = LOOPBACK_FW; bladerf_format bitmode = BLADERF_FORMAT_SC16_Q11; enum data_mode test_data_mode = DATA_CONSTANT; char *devstr = NULL; size_t max_count = 0; struct bladerf *dev; struct rx_buffer_state rx_state; struct tx_buffer_state tx_state; struct bladerf_stream *rx_stream, *tx_stream; pthread_t rx_thread, tx_thread; bladerf_log_level level; int status; bool ok; log_set_verbosity(BLADERF_LOG_LEVEL_INFO); bladerf_log_set_verbosity(BLADERF_LOG_LEVEL_INFO); int opt = 0; int opt_ind = 0; while (opt != -1) { opt = getopt_long(argc, argv, "d:l:b:c:D:s:h", long_options, &opt_ind); switch (opt) { case 'd': devstr = optarg; break; case 'l': if (strcmp(optarg, "fw") == 0) { test_loopback_mode = LOOPBACK_FW; } else if (strcmp(optarg, "fpga") == 0) { test_loopback_mode = LOOPBACK_FPGA; } else if (strcmp(optarg, "rfic") == 0) { test_loopback_mode = LOOPBACK_RFIC; } else { log_error("Unknown loopback mode: %s\n", optarg); return -1; } break; case 'b': if (strcmp(optarg, "16bit") == 0 || strcmp(optarg, "16") == 0) { bitmode = BLADERF_FORMAT_SC16_Q11; } else if (strcmp(optarg, "8bit") == 0 || strcmp(optarg, "8") == 0) { bitmode = BLADERF_FORMAT_SC8_Q7; CONSTANT_PATTERN_I -= 0x200; CONSTANT_PATTERN_Q -= 0x200; } else { log_error("Unknown bitmode: %s\n", optarg); return -1; } break; case 's': sample_rate = str2uint_suffix( optarg, 0, 61440000, freq_suffixes, num_freq_suffixes, &ok); if (!ok) { log_error("Invalid sample rate: %s\n", optarg); return -1; } break; case 'c': max_count = str2uint_suffix(optarg, 0, UINT32_MAX, count_suffixes, num_count_suffixes, &ok); if (!ok) { log_error("Invalid count: %s\n", optarg); return -1; } break; case 'D': if (strcmp(optarg, "constant") == 0) { test_data_mode = DATA_CONSTANT; } else if (strcmp(optarg, "counting") == 0) { test_data_mode = DATA_COUNTING; } else if (strcmp(optarg, "random") == 0) { test_data_mode = DATA_RANDOM; } else { log_error("Unknown test mode: %s\n", optarg); return -1; } break; case 1: level = str2loglevel(optarg, &ok); if (!ok) { log_error("Invalid log level provided: %s\n", optarg); return -1; } else { log_set_verbosity(level); } break; case 2: level = str2loglevel(optarg, &ok); if (!ok) { log_error("Invalid log level provided: %s\n", optarg); return -1; } else { bladerf_log_set_verbosity(level); } break; case 'h': printf("Usage: %s [options]\n", argv[0]); printf(" -d, --device Specify device to open.\n"); printf(" -l, --loopback Specify loopback.\n"); printf(" fw (default)\n"); printf(" fpga\n"); printf(" rfic\n"); printf(" -s, --samplerate Specify sample rate.\n"); printf(" -b, --bitmode Specify 16bit or 8bit mode\n"); printf(" 16bit or 16 (default)\n"); printf(" 8bit or 8\n"); printf(" -c, --count Specify number of samples " "to test (0 = unlimited).\n"); printf(" -D, --data Specify data.\n"); printf(" constant (default)\n"); printf(" counting\n"); printf(" random\n"); printf(" --verbosity Set test verbosity " "(Default: info)\n"); printf(" --lib-verbosity Set libbladeRF " "verbosity (Default: info)\n"); printf(" -h, --help Show this text.\n"); return 0; default: break; } } status = bladerf_open(&dev, devstr); if (status < 0) { log_error("bladerf_open(): %s\n", bladerf_strerror(status)); return 1; } /****************************************************************************** * RX init & config ******************************************************************************/ rx_state.idx = 0; rx_state.num = NUM_TRANSFERS; rx_state.i_count = 0; rx_state.q_count = 0; rx_state.mode = test_data_mode; rx_state.lb_mode = test_loopback_mode; rx_state.max_count = max_count; randval_init(&rx_state.rand_state, 0); status = bladerf_init_stream( &rx_stream, dev, rx_callback, &rx_state.buffers, NUM_BUFFERS, bitmode, BUFFER_SIZE, NUM_TRANSFERS, &rx_state); if (status < 0) { log_error("bladerf_init_stream(): %s\n", bladerf_strerror(status)); bladerf_close(dev); return -1; } status = configure_module(dev, BLADERF_RX, sample_rate); if (status < 0) { log_error("configure_module(BLADERF_RX): %s\n", bladerf_strerror(status)); bladerf_close(dev); return -1; } /****************************************************************************** * TX init & config ******************************************************************************/ tx_state.idx = 0; tx_state.num = NUM_TRANSFERS; tx_state.i_count = 0; tx_state.q_count = 0; tx_state.mode = test_data_mode; tx_state.lb_mode = test_loopback_mode; randval_init(&tx_state.rand_state, 0); status = bladerf_init_stream( &tx_stream, dev, tx_callback, &tx_state.buffers, NUM_BUFFERS, bitmode, BUFFER_SIZE, NUM_TRANSFERS, &tx_state); if (status < 0) { log_error("bladerf_init_stream(): %s\n", bladerf_strerror(status)); bladerf_close(dev); return -1; } status = configure_module(dev, BLADERF_TX, sample_rate); if (status < 0) { log_error("configure_module(BLADERF_TX): %s\n", bladerf_strerror(status)); bladerf_close(dev); return -1; } /****************************************************************************** * Loopback configuration ******************************************************************************/ // Default: disable loopback mode status = bladerf_set_loopback(dev, BLADERF_LB_NONE); if (status < 0) { log_error("bladerf_set_loopback(): %s\n", bladerf_strerror(status)); bladerf_close(dev); return -1; } // Default: baseband mux status = bladerf_set_rx_mux(dev, BLADERF_RX_MUX_BASEBAND); if (status < 0) { log_error("bladerf_set_rx_mux(): %s\n", bladerf_strerror(status)); bladerf_close(dev); return -1; } switch (test_loopback_mode) { case LOOPBACK_FW: status = bladerf_set_loopback(dev, BLADERF_LB_FIRMWARE); if (status < 0) { log_error("bladerf_set_loopback(): %s\n", bladerf_strerror(status)); bladerf_close(dev); return -1; } break; case LOOPBACK_FPGA: status = bladerf_set_rx_mux(dev, BLADERF_RX_MUX_DIGITAL_LOOPBACK); if (status < 0) { log_error("bladerf_set_rx_mux(): %s\n", bladerf_strerror(status)); bladerf_close(dev); return -1; } break; case LOOPBACK_RFIC: status = bladerf_set_loopback(dev, BLADERF_LB_RFIC_BIST); if (status < 0) { log_error("bladerf_set_loopback(): %s\n", bladerf_strerror(status)); bladerf_close(dev); return -1; } break; } if (signal(SIGINT, handler) == SIG_ERR) { perror("signal()"); return -1; } if (signal(SIGTERM, handler) == SIG_ERR) { perror("signal()"); return -1; } /****************************************************************************** * Enable RX and TX streams ******************************************************************************/ status = bladerf_enable_module(dev, BLADERF_CHANNEL_TX(0), true); if (status < 0) { log_error("bladerf_enable_module(TX): %s\n", bladerf_strerror(status)); goto error; } status = pthread_create(&tx_thread, NULL, tx_streamer, tx_stream); if (status < 0) { log_error("pthread_create(TX): %s\n", strerror(status)); goto error; } status = bladerf_enable_module(dev, BLADERF_CHANNEL_RX(0), true); if (status < 0) { log_error("bladerf_enable_module(RX): %s\n", bladerf_strerror(status)); goto error; } status = pthread_create(&rx_thread, NULL, rx_streamer, rx_stream); if (status < 0) { log_error("pthread_create(RX): %s\n", strerror(status)); goto error; } log_info("Loopback test running. Press Ctrl-C to exit...\n"); pthread_join(tx_thread, NULL); pthread_join(rx_thread, NULL); log_info("IQ Matches: %zu / %zu (%.1f%%)\n", good_count, good_count + bad_count, 100.0 * ((double)good_count) / ((double)(good_count + bad_count))); bladerf_deinit_stream(tx_stream); bladerf_deinit_stream(rx_stream); status = bladerf_enable_module(dev, BLADERF_CHANNEL_TX(0), false); if (status < 0) { log_error("bladerf_enable_module(): %s\n", bladerf_strerror(status)); goto error; } status = bladerf_enable_module(dev, BLADERF_CHANNEL_RX(0), false); if (status < 0) { log_error("bladerf_enable_module(): %s\n", bladerf_strerror(status)); goto error; } bladerf_close(dev); return 0; error: bladerf_close(dev); return 1; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_freq_hop/000077500000000000000000000000001457144405000240115ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_freq_hop/CMakeLists.txt000066400000000000000000000016021457144405000265500ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.5) project(libbladeRF_test_freq_hop C) set(INCLUDES ${libbladeRF_SOURCE_DIR}/include ${BLADERF_HOST_COMMON_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/../common/include ) set(LIBS libbladerf_shared) if(MSVC) set(INCLUDES ${INCLUDES} ${MSVC_C99_INCLUDES}) find_package(LibPThreadsWin32 REQUIRED) set(INCLUDES ${INCLUDES} ${LIBPTHREADSWIN32_INCLUDE_DIRS}) set(LIBS ${LIBS} ${LIBPTHREADSWIN32_LIBRARIES}) endif() set(SRC main.c ${CMAKE_CURRENT_SOURCE_DIR}/../common/src/test_common.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/conversions.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/devcfg.c ) if(MSVC) set(SRC ${SRC} ${BLADERF_HOST_COMMON_SOURCE_DIR}/windows/getopt_long.c ) endif() include_directories(${INCLUDES}) add_executable(libbladeRF_test_freq_hop ${SRC}) target_link_libraries(libbladeRF_test_freq_hop ${LIBS}) bladeRF-2024.05/host/libraries/libbladeRF_test/test_freq_hop/main.c000066400000000000000000000235321457144405000251060ustar00rootroot00000000000000/* * This program tunes to random frequencies, optionally while performing * RX/TX calls within the same thread. This was written to investigate * lockups reported with the bladeRF and third-party software. * * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include #include #include #include "conversions.h" #include "test_common.h" #include "devcfg.h" #define TEST_OPTIONS_STR DEVCFG_OPTIONS_BASE"i:S:" struct app_params { struct devcfg dev_config; bool rx; bool tx; uint64_t iterations; uint64_t randval_seed; uint64_t randval_state; }; static struct option app_long_options[] = { { "rx", no_argument, 0, 1 }, { "tx", no_argument, 0, 2 }, { "iterations", required_argument, 0, 'i' }, { "seed", required_argument, 0, 'S' }, { NULL, 0, 0, 0 }, }; int app_handle_args(int argc, char **argv, struct option *long_options, struct app_params *p) { int c; bool ok; optind = 1; c = getopt_long(argc, argv, TEST_OPTIONS_STR, long_options, NULL); while (c >= 0) { switch (c) { case 1: p->rx = true; break; case 2: p->tx = true; break; case 'i': p->iterations = str2uint64(optarg, 1, UINT64_MAX, &ok); if (!ok) { fprintf(stderr, "Invalid # iterations: %s\n", optarg); return -1; } break; case 'S': p->randval_seed = str2uint64(optarg, 0, UINT64_MAX, &ok); if (!ok) { fprintf(stderr, "Invalid seed value: %s\n", optarg); return -1; } break; } c = getopt_long(argc, argv, TEST_OPTIONS_STR, long_options, NULL); } return 0; } void print_usage(const char *argv0) { printf("%s: Exercise frequency changes within an RX/TX thread\n", argv0); printf("\n"); printf("Test-specific options:\n"); printf(" -i, --iterations Number of iterations to run.\n"); printf(" -S, --seed PRNG seed for random frequencies.\n"); printf(" --rx Enable bladerf_sync_rx() calls.\n"); printf(" --tx Enable bladerf_sync_tx() calls.\n"); printf(" Requires device to be in loopback mode.\n"); printf("\n"); devcfg_print_common_help("Device configuration arguments\n"); printf("\n"); } int run_test(struct bladerf *dev, struct app_params *p) { int status = 0; int disable_status; uint64_t iteration; int16_t *rx_samples = NULL; int16_t *tx_samples = NULL; if (p->rx) { rx_samples = calloc(p->dev_config.samples_per_buffer, 2 * sizeof(int16_t)); if (rx_samples == NULL) { status = -1; goto out; } status = devcfg_perform_sync_config(dev, BLADERF_MODULE_RX, BLADERF_FORMAT_SC16_Q11, &p->dev_config, true); if (status != 0) { status = -1; goto out; } } if (p->tx) { tx_samples = calloc(p->dev_config.samples_per_buffer, 2 * sizeof(int16_t)); if (tx_samples == NULL) { status = -1; goto out; } status = devcfg_perform_sync_config(dev, BLADERF_MODULE_RX, BLADERF_FORMAT_SC16_Q11, &p->dev_config, true); if (status != 0) { status = -1; goto out; } } for (iteration = 0; iteration < p->iterations; iteration++) { if (iteration % 50 == 0) { printf("\rIteration: %16"PRIu64" of %-16"PRIu64, iteration, p->iterations); fflush(stdout); } /* Tune the RX module if we're RX'ing data, or if no data * reception/transmission has been requested */ if (p->rx || (!p->rx && !p->tx)) { unsigned int freq = get_rand_freq(&p->randval_state, p->dev_config.enable_xb200); status = bladerf_set_frequency(dev, BLADERF_MODULE_RX, freq); if (status != 0) { fprintf(stderr, "Failed to set RX frequency to %u @ iteration %"PRIu64": %s\n", freq, iteration, bladerf_strerror(status)); status = -1; goto out; } if (p->rx) { /* Just to exercise partial buffer logic */ const unsigned int to_rx = p->dev_config.samples_per_buffer; status = bladerf_sync_rx(dev, rx_samples, to_rx, NULL, p->dev_config.sync_timeout_ms); if (status != 0) { fprintf(stderr, "Failed to RX samples @ iteration %"PRIu64": %s\n", iteration, bladerf_strerror(status)); status = -1; goto out; } } } if (p->tx) { unsigned int freq = get_rand_freq(&p->randval_state, p->dev_config.enable_xb200); const unsigned int to_tx = p->dev_config.samples_per_buffer; status = bladerf_set_frequency(dev, BLADERF_MODULE_TX, freq); if (status != 0) { fprintf(stderr, "Failed to set TX frequency to %u @ iteration %"PRIu64": %s\n", freq, iteration, bladerf_strerror(status)); status = -1; goto out; } /* Just to exercise partial buffer logic */ status = bladerf_sync_rx(dev, tx_samples, to_tx, NULL, p->dev_config.sync_timeout_ms); if (status != 0) { fprintf(stderr, "Failed to RX samples @ iteration %"PRIu64": %s\n", iteration, bladerf_strerror(status)); status = -1; goto out; } } } out: printf("\n"); if (p->rx) { disable_status = bladerf_enable_module(dev, BLADERF_MODULE_RX, false); if (disable_status != 0) { fprintf(stderr, "Failed to disable RX module: %s\n", bladerf_strerror(status)); if (status == 0) { status = -1; } } } if (p->tx) { disable_status = bladerf_enable_module(dev, BLADERF_MODULE_TX, false); if (disable_status != 0) { fprintf(stderr, "Failed to disable TX module: %s\n", bladerf_strerror(status)); if (status == 0) { status = -1; } } } free(rx_samples); free(tx_samples); return status; } int main(int argc, char *argv[]) { int status; struct bladerf *dev = NULL; struct app_params params; struct option *options = NULL; devcfg_init(¶ms.dev_config); params.iterations = 5000; params.randval_seed = 1; params.rx = false; params.tx = false; options = devcfg_get_long_options(app_long_options); if (options == NULL) { status = -1; goto error_no_dev; } status = devcfg_handle_args(argc, argv, TEST_OPTIONS_STR, options, ¶ms.dev_config); if (status < 0) { status = -1; goto error_no_dev; } else if (status > 0) { print_usage(argv[0]); status = 0; goto error_no_dev; } randval_init(¶ms.randval_state, params.randval_seed); status = app_handle_args(argc, argv, options, ¶ms); if (status != 0) { status = -1; goto error_no_dev; } if (params.tx && params.dev_config.loopback == BLADERF_LB_NONE) { fprintf(stderr, "--tx requires the device to be put in a loopback mode.\n"); status = -1; goto error_no_dev; } status = bladerf_open(&dev, params.dev_config.device_specifier); if (status != 0) { fprintf(stderr, "Unable to open device: %s\n", bladerf_strerror(status)); status = -1; goto error_no_dev; } status = devcfg_apply(dev, ¶ms.dev_config); if (status == 0) { status = run_test(dev, ¶ms); } bladerf_close(dev); error_no_dev: devcfg_deinit(¶ms.dev_config); free(options); return status; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_fw_check/000077500000000000000000000000001457144405000237575ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_fw_check/CMakeLists.txt000066400000000000000000000024161457144405000265220ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.5) project(libbladeRF_test_fw_check C) set(INCLUDES ${libbladeRF_SOURCE_DIR}/include ${libbladeRF_SOURCE_DIR}/src ${BLADERF_FW_COMMON_INCLUDE_DIR} ${BLADERF_HOST_COMMON_INCLUDE_DIRS} ) if(MSVC) set(INCLUDES ${INCLUDES} ${MSVC_C99_INCLUDES}) endif() add_definitions(-DLOGGING_ENABLED=1) if(LIBBLADERF_SEARCH_PREFIX_OVERRIDE) add_definitions(-DLIBBLADERF_SEARCH_PREFIX="${LIBBLADERF_SEARCH_PREFIX_OVERRIDE}") else() add_definitions(-DLIBBLADERF_SEARCH_PREFIX="${CMAKE_INSTALL_PREFIX}") endif() if(MSVC) find_package(LibPThreadsWin32 REQUIRED) set(INCLUDES ${INCLUDES} ${LIBPTHREADSWIN32_INCLUDE_DIRS}) set(LIBS ${LIBS} ${LIBPTHREADSWIN32_LIBRARIES}) else(MSVC) find_package(Threads REQUIRED) set(LIBS ${LIBS} ${CMAKE_THREAD_LIBS_INIT}) endif(MSVC) set(SRC src/main.c ${libbladeRF_SOURCE_DIR}/src/driver/fx3_fw.c ${libbladeRF_SOURCE_DIR}/src/helpers/file.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/log.c ) add_definitions(-DLOGGING_ENABLED) add_definitions(-DTEST_FX3_FW_VALIDATION) add_definitions(-DLIBBLADERF_SEARCH_PREFIX="${CMAKE_INSTALL_PREFIX}") include_directories(${INCLUDES}) add_executable(libbladeRF_test_fw_check ${SRC}) target_link_libraries(libbladeRF_test_fw_check libbladerf_shared) bladeRF-2024.05/host/libraries/libbladeRF_test/test_fw_check/src/000077500000000000000000000000001457144405000245465ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_fw_check/src/main.c000066400000000000000000000012041457144405000256330ustar00rootroot00000000000000#include #include #include "log.h" #include "driver/fx3_fw.h" #include "helpers/file.h" int main(int argc, char *argv[]) { int status; uint8_t *buf; size_t buf_len; struct fx3_firmware *fw; log_set_verbosity(BLADERF_LOG_LEVEL_VERBOSE); if (argc != 2) { fprintf(stderr, "Usage: %s \n", argv[0]); return 1; } status = file_read_buffer(argv[1], &buf, &buf_len); if (status != 0) { return status; } status = fx3_fw_parse(&fw, buf, buf_len); free(buf); if (status == 0) { fx3_fw_free(fw); } return status; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_interleaver/000077500000000000000000000000001457144405000245265ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_interleaver/CMakeLists.txt000066400000000000000000000014401457144405000272650ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.5) project(libbladeRF_test_interleaver C) set(INCLUDES ${libbladeRF_SOURCE_DIR}/include ${libbladeRF_SOURCE_DIR}/src ${BLADERF_HOST_COMMON_INCLUDE_DIRS} ) if(MSVC) set(INCLUDES ${INCLUDES} ${MSVC_C99_INCLUDES}) endif() add_definitions(-DLOGGING_ENABLED=1) if(LIBBLADERF_SEARCH_PREFIX_OVERRIDE) add_definitions(-DLIBBLADERF_SEARCH_PREFIX="${LIBBLADERF_SEARCH_PREFIX_OVERRIDE}") else() add_definitions(-DLIBBLADERF_SEARCH_PREFIX="${CMAKE_INSTALL_PREFIX}") endif() set(SRC src/main.c ${libbladeRF_SOURCE_DIR}/src/helpers/interleave.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/log.c ) include_directories(${INCLUDES}) add_executable(libbladeRF_test_interleaver ${SRC}) target_link_libraries(libbladeRF_test_interleaver libbladerf_shared) bladeRF-2024.05/host/libraries/libbladeRF_test/test_interleaver/src/000077500000000000000000000000001457144405000253155ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_interleaver/src/main.c000066400000000000000000000215541457144405000264140ustar00rootroot00000000000000#include #include #include "helpers/interleave.h" #ifndef min #define min(x, y) x < y ? x : y #endif // !min #ifndef max #define max(x, y) x > y ? x : y #endif // !max #define PRINT_VERBOSE(...) \ { \ verbose ? printf(__VA_ARGS__) : 0; \ } #define PRINT_INFO(...) \ { \ quiet ? 0 : printf(__VA_ARGS__); \ } #define PRINT_ERROR(...) printf(__VA_ARGS__) bool verbose = false; bool quiet = false; size_t const CELL_WIDTH = 4; size_t const NUM_COLUMNS = 8; /* Creates a buffer of buflen bytes, containing a counting pattern */ void *create_buf(size_t buflen) { void *retbuf = NULL; uint16_t *ptr = NULL; size_t i; retbuf = calloc(buflen, sizeof(uint8_t)); if (NULL == retbuf) { PRINT_ERROR("%s: calloc failed\n", __FUNCTION__); return retbuf; } for (i = 0; i < buflen / 2; ++i) { ptr = (uint16_t *)retbuf + i; *ptr = (i % 65536); } return retbuf; } /* Checks the contents of a buffer, buf, of buflen bytes for a proper counting * pattern (starting at count), checking every stride'th sample */ bool check_buf(void const *buf, size_t buflen, size_t samplesize, size_t stride, uint16_t count) { bool retval = true; uint32_t *ptr = NULL; uint32_t expect; size_t i; if (NULL == buf) { PRINT_ERROR("%s: buf is null, unable to check\n", __FUNCTION__); return false; } for (i = 0; i < buflen / samplesize; i += stride) { ptr = (uint32_t *)buf + i; count %= 65536; expect = count++; count %= 65536; expect += (count++ << 16); if (expect != *ptr) { PRINT_ERROR("%p = %08x instead of %08x\n", ptr, *ptr, expect); retval = false; } else { PRINT_VERBOSE("%p = %08x ok\n", ptr, *ptr); } } return retval; } /* Outputs the contents of a buffer, buf, of buflen bytes, with num_columns * columns with CELL_WIDTH bytes in each column */ void print_buf(void const *buf, size_t buflen, size_t num_columns) { size_t const columns = min(num_columns, buflen / CELL_WIDTH); size_t const rowsize = sizeof(char) * (CELL_WIDTH * 2) * (columns + 1) + 1; size_t const rows = max(buflen / columns / CELL_WIDTH, 1); uint8_t const *u8buf = (uint8_t *)buf; size_t row, column, byte; char *rowstr; // short circuit if we're going to print nothing if (!verbose) { return; } rowstr = malloc(rowsize); if (NULL == rowstr) { PRINT_ERROR("%s: couldn't malloc rowstr\n", __FUNCTION__); return; } for (row = 0; row < rows; ++row) { uint8_t const *rowptr = u8buf + (row * columns * CELL_WIDTH); size_t rowidx = 0; for (column = 0; column < columns; ++column) { uint8_t const *colptr = rowptr + (column * CELL_WIDTH); if (column > 0) { rowstr[rowidx++] = ' '; } for (byte = 0; byte < CELL_WIDTH; ++byte) { snprintf((rowstr + rowidx), 3, "%02x", colptr[byte]); rowidx += 2; } } rowstr[rowidx] = '\0'; if (rowidx >= rowsize) { PRINT_ERROR("%s: WARNING: rowidx is %zu but rowsize is %zu\n", __FUNCTION__, rowidx, rowsize); } PRINT_VERBOSE(" %p = %s\n", rowptr, rowstr); } free(rowstr); } /* Executes a test case with channel layouts rxlay and txlay, expecting * num_samples in format */ int test(bladerf_channel_layout rxlay, bladerf_channel_layout txlay, bladerf_format format, size_t num_samples) { void *buf; int status; size_t i; size_t const samplesize = _interleave_calc_bytes_per_sample(format); size_t const offset = _interleave_calc_metadata_bytes(format); size_t const num_chan = _interleave_calc_num_channels(rxlay); size_t const bytes = samplesize * num_samples; if (num_chan != _interleave_calc_num_channels(txlay)) { PRINT_ERROR("incompatible channel layouts: %d and %d\n", rxlay, txlay); return -1; } if (bytes < offset) { PRINT_ERROR("bytes (%zu) cannot be less than offset (%zu)\n", bytes, offset); return -1; } if (num_chan < 1) { PRINT_ERROR("num_chan (%zu) cannot be less than 1\n", num_chan); return -1; } PRINT_INFO("beginning test: rxlay = %d, txlay = %d, format = %d, " "num_samples = %zu\n", rxlay, txlay, format, num_samples); PRINT_INFO("creating test buffer... "); buf = create_buf(bytes); if (NULL == buf) { PRINT_ERROR("failed to create_buf\n"); return -1; } else { PRINT_INFO("ok!\n"); } print_buf(buf, bytes, NUM_COLUMNS); status = _interleave_interleave_buf(txlay, format, (unsigned int)num_samples, buf); if (status != 0) { PRINT_ERROR("interleaver returned %d\n", status); goto error; } print_buf(buf, bytes, NUM_COLUMNS); if (offset > 0) { // special case check PRINT_INFO("checking metadata (%zu bytes starting at %p)... ", offset, buf); print_buf(buf, offset, NUM_COLUMNS); if (!check_buf(buf, offset, samplesize, 1, 0)) { PRINT_ERROR("check_buf returned FALSE!\n"); status = -1; goto error; } else { PRINT_INFO("good!\n"); } } if (num_chan == 1) { // special case check PRINT_INFO("not a MIMO layout, verifying no interleaving occurred... "); if (!check_buf(buf, bytes, samplesize, 1, 0)) { PRINT_ERROR("check_buf returned FALSE!\n"); status = -1; goto error; } else { PRINT_INFO("good!\n"); } } for (i = 0; i < num_chan; ++i) { // get a pointer to the first interleaved sample for this channel void *bufptr = (uint8_t *)buf + offset + (samplesize * i); // len is still the whole buffer size_t buflen = bytes - offset; // start the counting pattern at the right place // offset the start value accordingly for channels > 0 uint16_t startval = ((offset + i * (buflen / num_chan)) / 2) % 65536; if (!verbose && !quiet && 0 == i) { verbose = true; PRINT_VERBOSE("memory dump %p -> %p\n", buf, (uint8_t *)buf + bytes); if (bytes > 64 * 2) { print_buf(buf, 48, 2); PRINT_VERBOSE(" ...\n"); print_buf((uint8_t *)buf + bytes - 48, 48, 2); } else { print_buf(buf, bytes, 2); } verbose = false; } PRINT_INFO("checking interleaved data for ch %zu (*bufptr %p buflen " "%zu num_chan %zu startval %04x)... ", i, bufptr, buflen, num_chan, startval); if (!check_buf(bufptr, buflen, samplesize, num_chan, startval)) { PRINT_ERROR("check_buf returned FALSE!\n"); status = -1; goto error; } else { PRINT_INFO("good!\n"); } } status = _interleave_deinterleave_buf(rxlay, format, (unsigned int)num_samples, buf); if (status != 0) { PRINT_ERROR("deinterleaver returned %d\n", status); goto error; } print_buf(buf, bytes, NUM_COLUMNS); PRINT_INFO("checking deinterleaved data... "); if (!check_buf(buf, bytes, samplesize, 1, 0)) { PRINT_ERROR("check_buf returned FALSE!\n"); status = -1; goto error; } else { PRINT_INFO("good!\n"); } error: free(buf); return status; } /* it's main */ int main(int argc, char *argv[]) { int status = 0; size_t const NUM_SAMPLES = 16384; PRINT_INFO("*** BEGINNING 1-CHANNEL TESTS: interleaving should be noop\n"); status = test(BLADERF_RX_X1, BLADERF_TX_X1, BLADERF_FORMAT_SC16_Q11, NUM_SAMPLES); if (status < 0) { goto error; } status = test(BLADERF_RX_X1, BLADERF_TX_X1, BLADERF_FORMAT_SC16_Q11_META, NUM_SAMPLES); if (status < 0) { goto error; } PRINT_INFO("*** BEGINNING 2-CHANNEL TESTS\n"); status = test(BLADERF_RX_X2, BLADERF_TX_X2, BLADERF_FORMAT_SC16_Q11, NUM_SAMPLES); if (status < 0) { goto error; } status = test(BLADERF_RX_X2, BLADERF_TX_X2, BLADERF_FORMAT_SC16_Q11_META, NUM_SAMPLES); if (status < 0) { goto error; } error: if (status < 0) { PRINT_ERROR("test returned %d, failing\n", status); } return status; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_open/000077500000000000000000000000001457144405000231475ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_open/CMakeLists.txt000066400000000000000000000010431457144405000257050ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.5) project(libbladeRF_test_open C) set(INCLUDES ${libbladeRF_SOURCE_DIR}/include ${BLADERF_HOST_COMMON_INCLUDE_DIRS} ) if(MSVC) set(INCLUDES ${INCLUDES} ${MSVC_C99_INCLUDES}) endif() set(SRC src/main.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/conversions.c) if(MSVC) set(SRC ${SRC} ${BLADERF_HOST_COMMON_SOURCE_DIR}/windows/getopt_long.c ) endif() include_directories(${INCLUDES}) add_executable(libbladeRF_test_open ${SRC}) target_link_libraries(libbladeRF_test_open libbladerf_shared) bladeRF-2024.05/host/libraries/libbladeRF_test/test_open/src/000077500000000000000000000000001457144405000237365ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_open/src/main.c000066400000000000000000000064421457144405000250340ustar00rootroot00000000000000#include #include #include #include #include #include "conversions.h" static const struct option long_options[] = { { "device", required_argument, NULL, 'd' }, { "count", required_argument, NULL, 'c' }, { "wait", required_argument, NULL, 'w' }, { "reset", no_argument, NULL, 'r' }, { "no-reset", no_argument, NULL, 'n' }, { "help", no_argument, NULL, 'h' }, { NULL, 0, NULL, 0 }, }; int main(int argc, char *argv[]) { int opt = 0; int opt_ind = 0; int status = 0; char *devstr = NULL; struct bladerf *dev; bool reset_on_open = true; unsigned int count = 1; unsigned int wait = 250; unsigned int i; bool ok; bladerf_log_level log_level = BLADERF_LOG_LEVEL_INFO; opt = 0; while (opt != -1) { opt = getopt_long(argc, argv, "d:c:w:rnv:h", long_options, &opt_ind); switch (opt) { case 'd': devstr = optarg; break; case 'c': count = str2uint(optarg, 1, UINT_MAX, &ok); if (!ok) { fprintf(stderr, "Invalid count: %s\n", optarg); return -1; } break; case 'w': wait = str2uint(optarg, 1, 60 * 60 * 1000, &ok); if (!ok) { fprintf(stderr, "Invalid wait period: %s\n", optarg); return -1; } else { wait *= 1000; } break; case 'r': reset_on_open = true; break; case 'n': reset_on_open = false; break; case 'v': log_level = str2loglevel(optarg, &ok); if (!ok) { fprintf(stderr, "Invalid log level: %s\n", optarg); return -1; } break; case 'h': printf("Usage: %s [options]\n", argv[0]); printf(" -d, --device Specify device to open.\n"); printf(" -c, --count Number of times to open/close.\n"); printf(" -w, --wait Wait ms before closing.\n"); printf(" -r, --reset Enable USB reset on open.\n"); printf(" -n, --no-reset Disable USB reset on open.\n"); printf(" -v, --verbosity Set libbladeRF verbosity level.\n"); printf(" -h, --help Show this text.\n"); printf("\n"); return 0; default: break; } } bladerf_log_set_verbosity(log_level); bladerf_set_usb_reset_on_open(reset_on_open); for (i = 0; i < count; i++) { status = bladerf_open(&dev, devstr); if (status != 0) { fprintf(stderr, "Failed to open device: %s\n", bladerf_strerror(status)); return EXIT_FAILURE; } else { usleep(wait); bladerf_close(dev); printf("Iteration %u complete.\n", i + 1); } } return EXIT_SUCCESS; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_parse/000077500000000000000000000000001457144405000233205ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_parse/CMakeLists.txt000066400000000000000000000007401457144405000260610ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.5) project(libbladeRF_test_parse C) set(INCLUDES ${libbladeRF_SOURCE_DIR}/include ${BLADERF_HOST_COMMON_INCLUDE_DIRS} ) if(MSVC) set(INCLUDES ${INCLUDES} ${MSVC_C99_INCLUDES}) endif() include_directories(${INCLUDES}) add_executable(libbladeRF_test_parse src/main.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/conversions.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/parse.c ) target_link_libraries(libbladeRF_test_parse libbladerf_shared) bladeRF-2024.05/host/libraries/libbladeRF_test/test_parse/src/000077500000000000000000000000001457144405000241075ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_parse/src/main.c000066400000000000000000000124401457144405000252000ustar00rootroot00000000000000/** * @file test_parse/src/main.c * * @brief Unit test suite for host/common/parse.c * * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2018 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include "host_config.h" #include "parse.h" struct csv2int_test_string { char *input; int outlen; int output[128]; }; // clang-format off static const struct csv2int_test_string csv2int_test_strings[] = { { FIELD_INIT(.input, "42"), FIELD_INIT(.outlen, 1), FIELD_INIT(.output, { 42 }), }, { FIELD_INIT(.input, "0,1,2,3"), FIELD_INIT(.outlen, 4), FIELD_INIT(.output, { 0, 1, 2, 3 }), }, { FIELD_INIT(.input, "-22,13,000,-19,2235"), FIELD_INIT(.outlen, 5), FIELD_INIT(.output, { -22, 13, 0, -19, 2235 }), }, { FIELD_INIT(.input, "-22, 13, 000, -19, 2235"), FIELD_INIT(.outlen, 5), FIELD_INIT(.output, { -22, 13, 0, -19, 2235 }), }, { FIELD_INIT(.input, "20 54 56 61 64 07"), FIELD_INIT(.outlen, 6), FIELD_INIT(.output, {20, 54, 56, 61, 64, 7}), }, { FIELD_INIT(.input, " 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15," "16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27"), FIELD_INIT(.outlen, 27), FIELD_INIT(.output, { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27}), }, { FIELD_INIT(.input, "expecting,str2int,failure"), FIELD_INIT(.outlen, -1), FIELD_INIT(.output, { 0 }), }, { FIELD_INIT(.input, "1,2,3,expecting_str2int_failure"), FIELD_INIT(.outlen, -1), FIELD_INIT(.output, { 0 }), }, /* The next few test cases test the arglen adjustments */ { FIELD_INIT(.input, "0,1,2,3"), FIELD_INIT(.outlen, 4), FIELD_INIT(.output, { 0, 1, 2, 3 }), }, { FIELD_INIT(.input, "0,1,2,3"), FIELD_INIT(.outlen, 4), FIELD_INIT(.output, { 0, 1, 2, 3 }), }, { FIELD_INIT(.input, "0,1,2,3"), FIELD_INIT(.outlen, 4), FIELD_INIT(.output, { 0, 1, 2, 3 }), }, { FIELD_INIT(.input, "0,1,2,3"), FIELD_INIT(.outlen, 4), FIELD_INIT(.output, { 0, 1, 2, 3 }), }, { FIELD_INIT(.input, "0,1,2,3"), FIELD_INIT(.outlen, 4), FIELD_INIT(.output, { 0, 1, 2, 3 }), }, { FIELD_INIT(.input, "0,1,2,3"), FIELD_INIT(.outlen, 4), FIELD_INIT(.output, { 0, 1, 2, 3 }), }, { FIELD_INIT(.input, "0,1,2,3"), FIELD_INIT(.outlen, 4), FIELD_INIT(.output, { 0, 1, 2, 3 }), }, { FIELD_INIT(.input, ""), FIELD_INIT(.outlen, 0), FIELD_INIT(.output, { 0 }), }, }; // clang-format on bool test_csv2int() { int i, j; size_t good = 0, bad = 0; i = 0; while (csv2int_test_strings[i].outlen != 0) { int rv; int **args = NULL; bool failure = false; const struct csv2int_test_string *tv = &csv2int_test_strings[i]; printf("%s: test case %d: '%s'\n", __FUNCTION__, i, tv->input); rv = csv2int(tv->input, &args); if (rv != tv->outlen) { printf("%s: outlen mismatch (expected %d, got %d)\n", __FUNCTION__, tv->outlen, rv); failure = true; goto out; } for (j = 0; j < tv->outlen; ++j) { if (*args[j] != tv->output[j]) { printf("%s: output mismatch (arg %d, expected %d, got %d)\n", __FUNCTION__, j, tv->output[j], *args[j]); failure = true; goto out; } } out: if (failure) { ++bad; } else { ++good; } free_csv2int(rv, args); ++i; } printf("%s: good = %zu, bad = %zu\n", __FUNCTION__, good, bad); return (0 == bad); } int main(int argc, char *argv[]) { size_t bad = 0; printf("*** testing csv2int ***\n"); if (test_csv2int()) { printf("*** testing csv2int: PASSED ***\n"); } else { printf("*** testing csv2int: FAILED ***\n"); ++bad; } return bad; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_peripheral_timing/000077500000000000000000000000001457144405000257105ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_peripheral_timing/CMakeLists.txt000066400000000000000000000021741457144405000304540ustar00rootroot00000000000000# This program currently uses clock_gettime(CLOCK_MONOTONIC_RAW), which # does not appear to be supported on Windows or OSX. # # Given that this is really only intended for use as a benchmark for changes to # the NIOS II code, it probably won't get much general use, so we'll just # leave this as-is for now. if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") cmake_minimum_required(VERSION 3.5) project(libbladeRF_test_peripheral_timing C) set(INCLUDES ${libbladeRF_SOURCE_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR}/../common/include ${BLADERF_HOST_COMMON_INCLUDE_DIRS} ) set(SRC main.c ../common/src/test_common.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/conversions.c ) if(LIBC_VERSION) # clock_gettime() was moved from librt -> libc in 2.17 if(${LIBC_VERSION} VERSION_LESS "2.17") set(CLI_LINK_LIBRARIES ${CLI_LINK_LIBRARIES} rt) endif() endif() include_directories(${INCLUDES}) add_executable(libbladeRF_test_peripheral_timing ${SRC}) target_link_libraries(libbladeRF_test_peripheral_timing libbladerf_shared) endif() bladeRF-2024.05/host/libraries/libbladeRF_test/test_peripheral_timing/main.c000066400000000000000000000221571457144405000270070ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ /* This program is intended to acquire some rough estimates of FPGA peripheral * access times, for use in determining if change yield significant improvements * or performance regressions. */ #include #include #include #include #include #include #include "test_common.h" #define ITERATIONS 10000 int time_lms_reads(struct bladerf *dev, double *duration) { int status; struct timespec start, end; unsigned int i; uint8_t data; status = clock_gettime(CLOCK_MONOTONIC_RAW, &start); if (status != 0) { fprintf(stderr, "Failed to get start time. Erroring out.\n"); return -1; } for (i = 0; i < ITERATIONS; i++) { status = bladerf_lms_read(dev, 0x04, &data); if (status != 0) { fprintf(stderr, "LMS Read failed: %s\n", bladerf_strerror(status)); return -1; } } status = clock_gettime(CLOCK_MONOTONIC_RAW, &end); if (status != 0) { fprintf(stderr, "Failed to get end time. Erroring out.\n"); return -1; } *duration = calc_avg_duration(&start, &end, ITERATIONS); return 0; } int time_lms_writes(struct bladerf *dev, double *duration) { int status; struct timespec start, end; unsigned int i; status = clock_gettime(CLOCK_MONOTONIC_RAW, &start); if (status != 0) { fprintf(stderr, "Failed to get start time. Erroring out.\n"); return -1; } for (i = 0; i < ITERATIONS; i++) { status = bladerf_lms_write(dev, 0x04, 0xaa); if (status != 0) { fprintf(stderr, "LMS Write failed: %s\n", bladerf_strerror(status)); return -1; } } status = clock_gettime(CLOCK_MONOTONIC_RAW, &end); if (status != 0) { fprintf(stderr, "Failed to get end time. Erroring out.\n"); return -1; } *duration = calc_avg_duration(&start, &end, ITERATIONS); return 0; } int time_si5338_reads(struct bladerf *dev, double *duration) { int status; struct timespec start, end; unsigned int i; uint8_t data; status = clock_gettime(CLOCK_MONOTONIC_RAW, &start); if (status != 0) { fprintf(stderr, "Failed to get start time. Erroring out.\n"); return -1; } for (i = 0; i < ITERATIONS; i++) { status = bladerf_si5338_read(dev, 0x00, &data); if (status != 0) { fprintf(stderr, "LMS Read failed: %s\n", bladerf_strerror(status)); return -1; } } status = clock_gettime(CLOCK_MONOTONIC_RAW, &end); if (status != 0) { fprintf(stderr, "Failed to get end time. Erroring out.\n"); return -1; } *duration = calc_avg_duration(&start, &end, ITERATIONS); return 0; } int time_si5338_writes(struct bladerf *dev, double *duration) { int status; struct timespec start, end; unsigned int i; status = clock_gettime(CLOCK_MONOTONIC_RAW, &start); if (status != 0) { fprintf(stderr, "Failed to get start time. Erroring out.\n"); return -1; } for (i = 0; i < ITERATIONS; i++) { status = bladerf_si5338_write(dev, 0x00, 0xaa); if (status != 0) { fprintf(stderr, "LMS Read failed: %s\n", bladerf_strerror(status)); return -1; } } status = clock_gettime(CLOCK_MONOTONIC_RAW, &end); if (status != 0) { fprintf(stderr, "Failed to get end time. Erroring out.\n"); return -1; } *duration = calc_avg_duration(&start, &end, ITERATIONS); return 0; } int time_rfic_reads(struct bladerf *dev, double *duration) { int status; struct timespec start, end; unsigned int i; uint8_t data; status = clock_gettime(CLOCK_MONOTONIC_RAW, &start); if (status != 0) { fprintf(stderr, "Failed to get start time. Erroring out.\n"); return -1; } for (i = 0; i < ITERATIONS; i++) { status = bladerf_get_rfic_register(dev, 0x00, &data); if (status != 0) { fprintf(stderr, "RFIC Read failed: %s\n", bladerf_strerror(status)); return -1; } } status = clock_gettime(CLOCK_MONOTONIC_RAW, &end); if (status != 0) { fprintf(stderr, "Failed to get end time. Erroring out.\n"); return -1; } *duration = calc_avg_duration(&start, &end, ITERATIONS); return 0; } int time_rfic_writes(struct bladerf *dev, double *duration) { int status; struct timespec start, end; unsigned int i; status = clock_gettime(CLOCK_MONOTONIC_RAW, &start); if (status != 0) { fprintf(stderr, "Failed to get start time. Erroring out.\n"); return -1; } for (i = 0; i < ITERATIONS; i++) { status = bladerf_set_rfic_register(dev, 0x00, 0xaa); if (status != 0) { fprintf(stderr, "RFIC Read failed: %s\n", bladerf_strerror(status)); return -1; } } status = clock_gettime(CLOCK_MONOTONIC_RAW, &end); if (status != 0) { fprintf(stderr, "Failed to get end time. Erroring out.\n"); return -1; } *duration = calc_avg_duration(&start, &end, ITERATIONS); return 0; } int test_bladeRF1(struct bladerf *dev) { int status; double duration; printf("Timing LMS6002D reads over %u iterations...\n", ITERATIONS); status = time_lms_reads(dev, &duration); if (status != 0) { goto out; } else { printf(" Average access time: %f s\n\n", duration); } printf("Timing LMS6002D writes over %u iterations...\n", ITERATIONS); status = time_lms_writes(dev, &duration); if (status != 0) { goto out; } else { printf(" Average access time: %f s\n\n", duration); } printf("Timing SI5338 reads over %u iterations...\n", ITERATIONS); status = time_si5338_reads(dev, &duration); if (status != 0) { goto out; } else { printf(" Average access time: %f s\n\n", duration); } printf("Timing SI5338 writes over %u iterations...\n", ITERATIONS); status = time_si5338_writes(dev, &duration); if (status != 0) { goto out; } else { printf(" Average access time: %f s\n\n", duration); } out: return status; } int test_bladeRF2(struct bladerf *dev) { int status; double duration; printf("Timing RFIC reads over %u iterations...\n", ITERATIONS); status = time_rfic_reads(dev, &duration); if (status != 0) { goto out; } else { printf(" Average access time: %f s\n\n", duration); } printf("Timing RFIC writes over %u iterations...\n", ITERATIONS); status = time_rfic_writes(dev, &duration); if (status != 0) { goto out; } else { printf(" Average access time: %f s\n\n", duration); } out: return status; } int main(int argc, char *argv[]) { int status; struct bladerf *dev = NULL; const char *devstr = NULL; bladerf_fpga_size fpga_size; if (argc > 1 && (!strcmp(argv[1], "-h") || !strcmp(argv[1], "--help"))) { fprintf(stderr, "Usage: %s [device string]\n", argv[0]); return 1; } else { devstr = argv[1]; } status = bladerf_open(&dev, devstr); if (status != 0) { fprintf(stderr, "Unable to open device: %s\n", bladerf_strerror(status)); return status; } status = bladerf_get_fpga_size(dev, &fpga_size); if (status != 0) { fprintf(stderr, "Unable to query FPGA size: %s\n", bladerf_strerror(status)); return status; } switch (fpga_size) { default: case BLADERF_FPGA_40KLE: case BLADERF_FPGA_115KLE: status = test_bladeRF1(dev); break; case BLADERF_FPGA_A4: case BLADERF_FPGA_A5: case BLADERF_FPGA_A9: status = test_bladeRF2(dev); break; } bladerf_close(dev); return status; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_quick_retune/000077500000000000000000000000001457144405000247045ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_quick_retune/CMakeLists.txt000066400000000000000000000011311457144405000274400ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.5) project(libbladeRF_test_quick_retune C) set(INCLUDES ${libbladeRF_SOURCE_DIR}/include ${BLADERF_HOST_COMMON_INCLUDE_DIRS} ) if(MSVC) set(INCLUDES ${INCLUDES} ${MSVC_C99_INCLUDES}) endif() set(LIBS libbladerf_shared) set(SRC main.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/conversions.c ) if(MSVC) set(SRC ${SRC} ${BLADERF_HOST_COMMON_SOURCE_DIR}/windows/getopt_long.c ) endif() include_directories(${INCLUDES}) add_executable(libbladeRF_test_quick_retune ${SRC}) target_link_libraries(libbladeRF_test_quick_retune ${LIBS}) bladeRF-2024.05/host/libraries/libbladeRF_test/test_quick_retune/main.c000066400000000000000000000214071457144405000260000ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include #include #include #include #include #include "conversions.h" #include "host_config.h" #define VERBOSITY BLADERF_LOG_LEVEL_INFO #define BUF_LEN 4096 #define TIMEOUT_MS 2500 #define ITERATIONS 10000 /* Dwell time at each frequency (us) */ #define DWELL_TIME_US 0 typedef struct { bladerf_frequency f; struct bladerf_quick_tune qt; } freq; /* Pick the frequency around which each hop frequency will be computed * Select this to ensure hops cross a high/low band boundary */ #define BLADERF1_CENTER_FREQ ((bladerf_frequency) 1.500e9) #define BLADERF2_CENTER_FREQ ((bladerf_frequency) 3.000e9) /* Number of hop frequencies to generate */ #define NUM_FREQS 16 /* Spacing between hop frequencies */ #define FREQ_INCREMENT ((bladerf_frequency) 0.500e6) bool is_running = true; void sig_handler(int signo) { if (signo == SIGINT) { fprintf(stderr, "received SIGINT\n"); if (!is_running) { fprintf(stderr, "received another SIGINT, aborting\n"); abort(); } is_running = false; } } int run_test(struct bladerf *dev, uint32_t iterations) { const char *board_name; int status; freq freqs[NUM_FREQS]; //int hopseq[] = {7, 2, 14, 1, 11, 15, 3, 5, 12, 13, 0, 4, 6, 8, 9, 10}; int hopseq[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; int16_t *samples = NULL; unsigned int i, f; bladerf_frequency center_freq; samples = malloc(2 * BUF_LEN * sizeof(samples[0])); if (samples == NULL) { perror("malloc"); return BLADERF_ERR_MEM; } /* Just send a carrier tone */ for (i = 0; i < (2 * BUF_LEN); i += 2) { samples[i] = samples[i+1] = 1448;; } status = bladerf_sync_config(dev, BLADERF_TX_X1, BLADERF_FORMAT_SC16_Q11, 16, 4096, 8, TIMEOUT_MS); if (status != 0) { fprintf(stderr, "Failed to initialize sync i/f: %s\n", bladerf_strerror(status)); goto out; } board_name = bladerf_get_board_name(dev); if (strcmp(board_name, "bladerf1") == 0) { center_freq = BLADERF1_CENTER_FREQ; } else if (strcmp(board_name, "bladerf2") == 0) { center_freq = BLADERF2_CENTER_FREQ; } else { fprintf(stderr, "Unknown board name: %s\n", board_name); goto out; } /* Calculate the hop frequencies */ printf("Hop Set:\n"); for( f = 0; f < NUM_FREQS; f++ ) { if( f < (NUM_FREQS/2) ) { freqs[f].f = center_freq - ((NUM_FREQS/2)*FREQ_INCREMENT) + (f*FREQ_INCREMENT); } else { freqs[f].f = center_freq + ((f-(NUM_FREQS/2)+1)*FREQ_INCREMENT); } printf("freq[%2u]=%" PRIu64 "\n", f, freqs[f].f); } /* Get the quick tune data */ for( f = 0; f < NUM_FREQS; f++ ) { if (!is_running) { fprintf(stderr, "Stopping test...\n"); status = 0; goto out; } status = bladerf_set_frequency(dev, BLADERF_CHANNEL_TX(0), freqs[f].f); if (status != 0) { fprintf(stderr, "Failed to set frequency to %" PRIu64 ": %s\n", freqs[f].f, bladerf_strerror(status)); goto out; } status = bladerf_get_quick_tune(dev, BLADERF_CHANNEL_TX(0), &freqs[f].qt); if (status != 0) { fprintf(stderr, "Failed to get quick tune %u: %s\n", f, bladerf_strerror(status)); goto out; } } /* Enable and run! */ status = bladerf_enable_module(dev, BLADERF_CHANNEL_TX(0), true); if (status != 0) { fprintf(stderr, "Failed to enable module: %s\n", bladerf_strerror(status)); goto out; } for (i = 0; i < iterations; i++) { for( f = 0; f < NUM_FREQS; f++ ) { if (!is_running) { fprintf(stderr, "Stopping test...\n"); status = 0; goto out; } if( DWELL_TIME_US > 999999 ) { printf("hopseq[%u] = %u\n", f, hopseq[f]); if (strcmp(board_name, "bladerf2") == 0) { printf("nios_profile = %u, rffe_profile = %u\n", freqs[hopseq[f]].qt.nios_profile, freqs[hopseq[f]].qt.rffe_profile); } } status = bladerf_schedule_retune(dev, BLADERF_CHANNEL_TX(0), BLADERF_RETUNE_NOW, 0, &freqs[hopseq[f]].qt); if (status != 0) { fprintf(stderr, "Failed to perform quick tune to index %u: " "%s\n", hopseq[f], bladerf_strerror(status)); goto out; } status = bladerf_sync_tx(dev, samples, BUF_LEN, NULL, 3500); if (status != 0) { fprintf(stderr, "Failed to TX data: %s\n", bladerf_strerror(status)); goto out; } usleep(DWELL_TIME_US); } } out: free(samples); bladerf_enable_module(dev, BLADERF_CHANNEL_TX(0), false); return status; } #define OPTARG "i:d:v:h" static struct option long_options[] = { { "iterations", required_argument, NULL, 'i' }, { "device", required_argument, NULL, 'd' }, { "verbosity", required_argument, NULL, 'v' }, { "help", no_argument, NULL, 'h' }, { NULL, 0, NULL, 0 }, }; int main(int argc, char *argv[]) { int status; int opt = 0; int opt_ind = 0; uint32_t iterations = ITERATIONS; bool ok; struct bladerf *dev = NULL; bladerf_log_level log_level; const char *devstr = NULL; while (opt != -1) { opt = getopt_long(argc, argv, OPTARG, long_options, &opt_ind); switch (opt) { case 'i': iterations = str2uint(optarg, 0, UINT32_MAX, &ok); if (!ok) { fprintf(stderr, "Iterations arg invalid: %s\n", optarg); return EXIT_FAILURE; } break; case 'd': devstr = optarg; printf("devstr: %s\n", devstr); break; case 'v': log_level = str2loglevel(optarg, &ok); if (!ok) { fprintf(stderr, "Invalid log level: %s\n", optarg); return EXIT_FAILURE; } bladerf_log_set_verbosity(log_level); break; case 'h': printf("TX a tone across %d frequencies.\n", NUM_FREQS); printf(" -d, --device Specify device to open.\n"); printf(" -v, --verbosity Set libbladeRF verbosity level.\n"); printf(" -h, --help Show this text.\n"); printf("\n"); return EXIT_SUCCESS; default: break; } } if (signal(SIGINT, sig_handler) == SIG_ERR) { fprintf(stderr, "Unable to catch SIGINT signals\n"); } bladerf_log_set_verbosity(VERBOSITY); status = bladerf_open(&dev, devstr); if (status != 0) { fprintf(stderr, "Unable to open device: %s\n", bladerf_strerror(status)); return status; } printf("Iterations: %d\n", iterations); status = run_test(dev, iterations); bladerf_close(dev); return status; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_regression/000077500000000000000000000000001457144405000243665ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_regression/CMakeLists.txt000066400000000000000000000063441457144405000271350ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.11) # FetchContent is available in 3.11 project(libbladeRF_test_regression VERSION 3.11 LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) include(GoogleTest) include(FetchContent) enable_testing() FetchContent_Declare( googletest GIT_REPOSITORY https://github.com/google/googletest.git GIT_TAG v1.13.x ) FetchContent_GetProperties(googletest) if(NOT googletest_POPULATED) FetchContent_Populate(googletest) add_subdirectory(${googletest_SOURCE_DIR} ${googletest_BINARY_DIR}) endif() # For Windows: Prevent overriding the parent project's compiler/linker settings set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) FetchContent_MakeAvailable(googletest) set(ABSL_PROPAGATE_CXX_STD ON) FetchContent_Declare( abseil GIT_REPOSITORY https://github.com/abseil/abseil-cpp.git GIT_TAG lts_2023_01_25 ) if(NOT abseil_POPULATED) FetchContent_Populate(abseil) add_subdirectory(${abseil_SOURCE_DIR} ${abseil_BINARY_DIR}) endif() set(INCLUDES ./include ${libbladeRF_SOURCE_DIR}/include ${libbladeRF_SOURCE_DIR}/src ${BLADERF_HOST_COMMON_INCLUDE_DIRS} ) include_directories(${INCLUDES}) set(SRC src/main.cxx ${BLADERF_HOST_COMMON_SOURCE_DIR}/log.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/conversions.c ) add_executable(${PROJECT_NAME} ${SRC}) add_custom_target(test COMMAND ${CMAKE_COMMAND} -E echo "" COMMAND ${CMAKE_COMMAND} -E echo "Available test targets:" COMMAND ${CMAKE_COMMAND} -E echo " make test_all - Run all tests" COMMAND ${CMAKE_COMMAND} -E echo " make test_hdl - Run tests with filter 'hdl*'" COMMAND ${CMAKE_COMMAND} -E echo " make test_libbladeRF - Run tests with filter 'libbladeRF*'" COMMAND ${CMAKE_COMMAND} -E echo " make test_synthesis - Run tests with filter 'synthesize*'" COMMAND ${CMAKE_COMMAND} -E echo "" WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) add_custom_target(test_all COMMAND ${PROJECT_NAME} --gtest_output="json" DEPENDS ${PROJECT_NAME} WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) add_custom_target(test_hdl COMMAND ${PROJECT_NAME} --gtest_filter="hdl*" --gtest_output="json" DEPENDS ${PROJECT_NAME} WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) add_custom_target(test_libbladeRF COMMAND ${PROJECT_NAME} --gtest_filter="libbladeRF*" --gtest_output="json" DEPENDS ${PROJECT_NAME} WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) add_custom_target(test_synthesis COMMAND ${PROJECT_NAME} --gtest_filter="synthesize*" --gtest_output="json" DEPENDS ${PROJECT_NAME} WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) target_link_libraries( ${PROJECT_NAME} libbladerf_shared gtest_main absl::strings ) gtest_discover_tests(${PROJECT_NAME}) ################################################################ # Find the nios2_command_shell ################################################################ find_program(NIOS2_COMMAND_SHELL_EXECUTABLE nios2_command_shell.sh PATHS ~/intelFPGA_lite/20.1/nios2eds NO_CACHE ) bladeRF-2024.05/host/libraries/libbladeRF_test/test_regression/include/000077500000000000000000000000001457144405000260115ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_regression/include/include.h000066400000000000000000000066341457144405000276160ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2023 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include #include namespace fs = std::filesystem; /** * @brief Recursively searches for a file with the specified filename in the given directory path. * * This function searches for a file with the specified filename in the given directory path, * including all its subdirectories. If the file is found, the output parameter 'rv' is updated * with the path of the found file. * * @param path The directory path to search for the file. * @param filename The name of the file to find. * @param[out] rv Pointer to a 'fs::path' object to store the path of the found file. If the file * is found, this parameter will be updated with the file's path; otherwise, it * will remain unchanged. * * @note The function uses the current user's home directory if the 'path' starts with the '~' * character. This allows using the '~' symbol as a shorthand for the user's home directory. * The function does not expand environment variables other than '~'. * @note The 'rv' parameter must point to a valid 'fs::path' object, which will be updated if the * file is found. If 'rv' is a nullptr, the function will result in undefined behavior. * * @see fs::is_regular_file * @see fs::is_directory * @see fs::directory_iterator * @see std::sort * * @warning The function performs recursive searches in the directory tree, and it may take time * for large directory structures. Exercise caution when using it with deeply nested * directories. */ void find_file(fs::path path, const std::string& filename, fs::path* rv) { if (path.string().find("~") == 0) { path = fs::path(std::getenv("HOME"))/path.string().substr(2); } if (fs::is_regular_file(path/filename)) { *rv = (path/filename); } if (fs::is_directory(path)) { std::vector entries; for (const auto& entry : fs::directory_iterator(path)) { entries.push_back(entry); } std::sort(entries.begin(), entries.end(), std::less<>()); for (const auto& entry : entries){ if (fs::is_directory(entry)) { find_file(entry, filename, rv); } } } } bladeRF-2024.05/host/libraries/libbladeRF_test/test_regression/src/000077500000000000000000000000001457144405000251555ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_regression/src/main.cxx000066400000000000000000000515051457144405000266330ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2023 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include "conversions.h" #include "log.h" #include "../include/include.h" #include #include #include #include #include #include #include #include #include #include #define TEST_LIBBLADERF libbladeRF #define TEST_XB200 xb200 #define BLADERF_QUARTUS_DIR "../../hdl/quartus/" #define BLADERF_MODELSIM_DIR "../../hdl/fpga/platforms/bladerf-micro/modelsim/" #define NIOS2SHELL "~/intelFPGA_lite/20.1/nios2eds/nios2_command_shell.sh" int status = 0; #define TEST_HDL_COMPILE(test_name) \ TEST_F(hdl, compile_##test_name) { \ status = std::system(NIOS2SHELL" vsim -c -do \"do test.do " #test_name ".do\""); \ EXPECT_EQ(status, 0); \ } #define TEST_HDL_VERIFY(test_name, test_id, tb_args, run_time_us) \ TEST_F(hdl, verify_##test_name##_##test_id) { \ status = std::system( \ NIOS2SHELL" vsim -c -do \"do test.do vsim nuand." #test_name " " #tb_args " " #run_time_us "\""); \ EXPECT_EQ(status, 0); \ } TEST(TEST_LIBBLADERF, version) { status = std::system("./output/libbladeRF_test_version"); ASSERT_EQ(0, status); } TEST(TEST_LIBBLADERF, c) { status = std::system("./output/libbladeRF_test_c"); ASSERT_EQ(0, status); } TEST(TEST_LIBBLADERF, cpp) { status = std::system("./output/libbladeRF_test_cpp"); ASSERT_EQ(0, status); } TEST(TEST_LIBBLADERF, parse) { status = std::system("./output/libbladeRF_test_parse"); ASSERT_EQ(0, status); } TEST(TEST_LIBBLADERF, interleaver) { status = std::system("./output/libbladeRF_test_interleaver"); ASSERT_EQ(0, status); } TEST(TEST_LIBBLADERF, open) { status = std::system("./output/libbladeRF_test_open"); ASSERT_EQ(0, status); } TEST(TEST_LIBBLADERF, frequency_hop) { status = std::system("./output/libbladeRF_test_freq_hop -i 200"); ASSERT_EQ(0, status); } TEST(TEST_LIBBLADERF, peripheral_timing) { status = std::system("./output/libbladeRF_test_peripheral_timing"); ASSERT_EQ(0, status); } TEST(TEST_LIBBLADERF, repeated_stream) { status = std::system("./output/libbladeRF_test_repeated_stream --tx -r 10"); ASSERT_EQ(0, status); status = std::system("./output/libbladeRF_test_repeated_stream --rx -r 10"); ASSERT_EQ(0, status); } TEST(TEST_LIBBLADERF, quick_retune) { status = std::system("./output/libbladeRF_test_quick_retune -i 100"); ASSERT_EQ(0, status); } TEST(TEST_LIBBLADERF, tune_timing) { status = std::system("./output/libbladeRF_test_tune_timing -i 200"); ASSERT_EQ(0, status); } TEST(TEST_LIBBLADERF, rx_discont) { status = std::system("./output/libbladeRF_test_rx_discont -b 16 -i 1000"); ASSERT_EQ(0, status); status = std::system("./output/libbladeRF_test_rx_discont -b 8 -i 1000"); ASSERT_EQ(0, status); } TEST(TEST_LIBBLADERF, unused_sync) { status = std::system("./output/libbladeRF_test_unused_sync"); ASSERT_EQ(0, status); } TEST(TEST_LIBBLADERF, enable_module) { status = std::system("./output/libbladeRF_test_ctrl -t enable_module"); ASSERT_EQ(0, status); } TEST(TEST_LIBBLADERF, loopback) { status = std::system("./output/libbladeRF_test_ctrl -t loopback"); ASSERT_EQ(0, status); } TEST(TEST_LIBBLADERF, rx_mux) { status = std::system("./output/libbladeRF_test_ctrl -t rx_mux"); ASSERT_EQ(0, status); } TEST(TEST_LIBBLADERF, gain) { status = std::system("./output/libbladeRF_test_ctrl -t gain"); ASSERT_EQ(0, status); } TEST(TEST_LIBBLADERF, bandwidth) { status = std::system("./output/libbladeRF_test_ctrl -t bandwidth --fast"); ASSERT_EQ(0, status); } TEST(TEST_LIBBLADERF, frequency) { status = std::system("./output/libbladeRF_test_ctrl -t frequency --fast"); ASSERT_EQ(0, status); } TEST(TEST_LIBBLADERF, samplerate) { status = std::system("./output/libbladeRF_test_ctrl -t samplerate --fast"); ASSERT_EQ(0, status); } TEST(TEST_LIBBLADERF, DISABLED_threads) { status = std::system("./output/libbladeRF_test_ctrl -t threads --fast"); ASSERT_EQ(0, status); } TEST(TEST_XB200, DISABLED_xb200) { status = std::system("./output/libbladeRF_test_ctrl --xb200 -t xb200"); ASSERT_EQ(0, status); } TEST(TEST_LIBBLADERF, tx_onoff_nowsched) { status = std::system("./output/libbladeRF_test_timestamps -t tx_onoff_nowsched"); ASSERT_EQ(0, status); } TEST(TEST_LIBBLADERF, print) { status = std::system("./output/libbladeRF_test_timestamps -t print -f"); ASSERT_EQ(0, status); } TEST(TEST_LIBBLADERF, rx_gaps) { status = std::system("./output/libbladeRF_test_timestamps -t rx_gaps -f"); ASSERT_EQ(0, status); } TEST(TEST_LIBBLADERF, rx_scheduled) { status = std::system("./output/libbladeRF_test_timestamps -t rx_scheduled -f"); ASSERT_EQ(0, status); } TEST(TEST_LIBBLADERF, digital_loopback) { std::string command; std::string sample_formats[] = {"8", "16"}; std::string loopback_modes[] = {"fw", "fpga", "rfic"}; int num_formats = sizeof(sample_formats) / sizeof(sample_formats[0]); int num_loopback_modes = sizeof(loopback_modes) / sizeof(loopback_modes[0]); for (int i = 0; i < num_formats; i++) { for (int j = 0; j < num_loopback_modes; j++) { command = "./output/libbladeRF_test_digital_loopback -c 20000000"; command += " -b " + sample_formats[i]; command += " -l " + loopback_modes[j]; std::cout << command << std::endl; status = std::system(command.c_str()); ASSERT_EQ(0, status); } } } TEST(TEST_LIBBLADERF, async) { status = std::system("./output/libbladeRF_test_async tx 2048 16"); ASSERT_EQ(0, status); status = std::system("./output/libbladeRF_test_async rx 2048 16"); ASSERT_EQ(0, status); } TEST(TEST_LIBBLADERF, sync) { status = std::system("./output/libbladeRF_test_sync --verbosity debug -o temp.bin -c 5000"); ASSERT_EQ(0, status); status = std::system("./output/libbladeRF_test_sync --verbosity debug -i temp.bin -c 5000"); ASSERT_EQ(0, status); status = std::system("rm temp.bin"); if (status != 0) { printf("Failed to remove temp.bin"); } } TEST(TEST_LIBBLADERF, rx_meta) { std::string command; std::string sample_formats[] = {"8", "16"}; std::string mimo_enable[] = {"", "-m"}; int num_formats = sizeof(sample_formats) / sizeof(sample_formats[0]); int num_mimo_states = sizeof(mimo_enable) / sizeof(mimo_enable[0]); for (int i = 0; i < num_formats; i++) { for (int j = 0; j < num_mimo_states; j++) { command = "./output/libbladeRF_test_rx_meta"; command += " -b " + sample_formats[i]; command += " " + mimo_enable[j]; std::cout << command << std::endl; status = std::system(command.c_str()); ASSERT_EQ(0, status); } } } TEST(TEST_LIBBLADERF, scheduled_retune) { std::string command; std::string direction[] = {"tx", "rx"}; std::string speed[] = {"quick"}; int num_formats = sizeof(direction) / sizeof(direction[0]); int num_mimo_states = sizeof(speed) / sizeof(speed[0]); for (int i = 0; i < num_formats; i++) { for (int j = 0; j < num_mimo_states; j++) { command = "./output/libbladeRF_test_scheduled_retune "; command += direction[i] + " "; command += "hop.csv "; command += speed[j]; std::cout << command << std::endl; status = std::system(command.c_str()); ASSERT_EQ(0, status); } } } // =============================== // HDL // =============================== class hdl : public ::testing::Test { protected: char build_dir[PATH_MAX]; void SetUp() override { std::string home = std::getenv("HOME"); fs::path nios2shell_path = ""; find_file("~/intelFPGA_lite", "nios2_command_shell.sh", &nios2shell_path); if (nios2shell_path.empty()) { std::cout << "Failed to find nios2_command_shell\n"; } else if (!fs::exists(fs::path(home) / "intelFPGA_lite/20.1")) { std::cout << "[ERROR] Found the nios2_command_shell.sh in an alternate version of Quartus.\n"; std::cout << "[ERROR] Change the NIOS2SHELL directive accordingly.\n\n"; std::cout << " Expected: " << NIOS2SHELL << std::endl; std::cout << " Found: " << nios2shell_path.string() << "\n\n"; } if (getcwd(build_dir, PATH_MAX) == NULL) { perror("Failed to get current directory\n"); } if (chdir(BLADERF_MODELSIM_DIR) != 0) { perror("Failed to move to " BLADERF_MODELSIM_DIR "\n"); } } void TearDown() override { if (chdir(build_dir) != 0) { perror("Failed to move out of " BLADERF_MODELSIM_DIR "\n"); } } }; TEST_F(hdl, vsim_version) { status = std::system(NIOS2SHELL" vsim -version"); EXPECT_EQ(status, 0); } class verify : public hdl, public testing::WithParamInterface> { }; INSTANTIATE_TEST_SUITE_P(hdl, verify, testing::Combine( testing::Bool(), testing::Bool(), testing::Bool()), [](const testing::TestParamInfo& info) { std::string name = absl::StrCat( std::get<0>(info.param) ? "8b" : "16b", std::get<1>(info.param), std::get<2>(info.param)); absl::c_replace_if(name, [](char c) { return !std::isalnum(c); }, '_'); return name; }); TEST_HDL_COMPILE(compile) TEST_HDL_COMPILE(fx3_gpif_iq_tb) TEST_HDL_COMPILE(fx3_gpif_iq_8bit_tb) TEST_HDL_COMPILE(fx3_gpif_meta_8bit_tb) TEST_HDL_COMPILE(fx3_gpif_meta_tb) TEST_HDL_COMPILE(fx3_gpif_packet_tb) TEST_HDL_COMPILE(fx3_gpif_tb) TEST_HDL_COMPILE(loopback) TEST_HDL_COMPILE(rx_counter_8bit_tb) TEST_HDL_COMPILE(rx_timestamp_tb) TEST_HDL_VERIFY(fx3_gpif_iq_tb, 16b00, -gENABLE_CHANNEL_0='0' -gENABLE_CHANNEL_1='0', 1000); TEST_HDL_VERIFY(fx3_gpif_iq_tb, 16b01, -gENABLE_CHANNEL_0='0' -gENABLE_CHANNEL_1='1', 1000); TEST_HDL_VERIFY(fx3_gpif_iq_tb, 16b10, -gENABLE_CHANNEL_0='1' -gENABLE_CHANNEL_1='0', 1000); TEST_HDL_VERIFY(fx3_gpif_iq_tb, 16b11, -gENABLE_CHANNEL_0='1' -gENABLE_CHANNEL_1='1', 1000); TEST_HDL_VERIFY(fx3_gpif_packet_tb, 16b00, -gENABLE_CHANNEL_0='0' -gENABLE_CHANNEL_1='0', 1000); TEST_HDL_VERIFY(fx3_gpif_packet_tb, 16b01, -gENABLE_CHANNEL_0='0' -gENABLE_CHANNEL_1='1', 1000); TEST_HDL_VERIFY(fx3_gpif_packet_tb, 16b10, -gENABLE_CHANNEL_0='1' -gENABLE_CHANNEL_1='0', 1000); TEST_HDL_VERIFY(fx3_gpif_packet_tb, 16b11, -gENABLE_CHANNEL_0='1' -gENABLE_CHANNEL_1='1', 1000); TEST_HDL_VERIFY(fx3_gpif_tb, 16b00, -gENABLE_CHANNEL_0='0' -gENABLE_CHANNEL_1='0', 1000); TEST_HDL_VERIFY(fx3_gpif_tb, 16b01, -gENABLE_CHANNEL_0='0' -gENABLE_CHANNEL_1='1', 1000); TEST_HDL_VERIFY(fx3_gpif_tb, 16b10, -gENABLE_CHANNEL_0='1' -gENABLE_CHANNEL_1='0', 1000); TEST_HDL_VERIFY(fx3_gpif_tb, 16b11, -gENABLE_CHANNEL_0='1' -gENABLE_CHANNEL_1='1', 1000); TEST_HDL_VERIFY(fx3_gpif_meta_tb, 16b00, -gENABLE_CHANNEL_0='0' -gENABLE_CHANNEL_1='0', 1000); TEST_HDL_VERIFY(fx3_gpif_meta_tb, 16b01, -gENABLE_CHANNEL_0='0' -gENABLE_CHANNEL_1='1', 1000); TEST_HDL_VERIFY(fx3_gpif_meta_tb, 16b10, -gENABLE_CHANNEL_0='1' -gENABLE_CHANNEL_1='0', 1000); TEST_HDL_VERIFY(fx3_gpif_meta_tb, 16b11, -gENABLE_CHANNEL_0='1' -gENABLE_CHANNEL_1='1', 1000); TEST_HDL_VERIFY(loopback_tb, 16b00, -gENABLE_CHANNEL_0='0' -gENABLE_CHANNEL_1='0', 1300); TEST_HDL_VERIFY(loopback_tb, 16b01, -gENABLE_CHANNEL_0='0' -gENABLE_CHANNEL_1='1', 1300); TEST_HDL_VERIFY(loopback_tb, 16b10, -gENABLE_CHANNEL_0='1' -gENABLE_CHANNEL_1='0', 1300); TEST_HDL_VERIFY(loopback_tb, 16b11, -gENABLE_CHANNEL_0='1' -gENABLE_CHANNEL_1='1', 1300); TEST_P(verify, fx3_gpif_iq_8bit_tb) { std::string bitmode = std::get<0>(GetParam()) ? "1" : "0"; std::string channel0 = std::get<1>(GetParam()) ? "1" : "0"; std::string channel1 = std::get<2>(GetParam()) ? "1" : "0"; std::string command = NIOS2SHELL; command += " vsim -c -do \"do test.do vsim nuand.fx3_gpif_iq_8bit_tb "; command += "-gEIGHT_BIT_MODE_EN='" + bitmode + "' "; command += "-gENABLE_CHANNEL_0='" + channel0 + "' "; command += "-gENABLE_CHANNEL_1='" + channel1 + "' "; command += "1000\""; status = std::system(command.c_str()); EXPECT_EQ(status, 0); } TEST_P(verify, fx3_gpif_meta_8bit_tb) { std::string bitmode = std::get<0>(GetParam()) ? "1" : "0"; std::string channel0 = std::get<1>(GetParam()) ? "1" : "0"; std::string channel1 = std::get<2>(GetParam()) ? "1" : "0"; std::string command = NIOS2SHELL; command += " vsim -c -do \"do test.do vsim nuand.fx3_gpif_meta_8bit_tb "; command += "-gEIGHT_BIT_MODE_EN='" + bitmode + "' "; command += "-gENABLE_CHANNEL_0='" + channel0 + "' "; command += "-gENABLE_CHANNEL_1='" + channel1 + "' "; command += "1000\""; status = std::system(command.c_str()); EXPECT_EQ(status, 0); } TEST_P(verify, rx_counter_8bit_tb) { std::string bitmode = std::get<0>(GetParam()) ? "1" : "0"; std::string channel0 = std::get<1>(GetParam()) ? "1" : "0"; std::string channel1 = std::get<2>(GetParam()) ? "1" : "0"; std::string command = NIOS2SHELL; command += " vsim -c -do \"do test.do vsim nuand.rx_counter_8bit_tb "; command += "-gEIGHT_BIT_MODE_EN='" + bitmode + "' "; command += "-gENABLE_CHANNEL_0='" + channel0 + "' "; command += "-gENABLE_CHANNEL_1='" + channel1 + "' "; command += "1000\""; status = std::system(command.c_str()); EXPECT_EQ(status, 0); } TEST_P(verify, rx_timestamp_tb) { std::string bitmode = std::get<0>(GetParam()) ? "1" : "0"; std::string channel0 = std::get<1>(GetParam()) ? "1" : "0"; std::string channel1 = std::get<2>(GetParam()) ? "1" : "0"; std::string command = NIOS2SHELL; command += " vsim -c -do \"do test.do vsim nuand.rx_timestamp_tb "; command += "-gEIGHT_BIT_MODE_EN='" + bitmode + "' "; command += "-gENABLE_CHANNEL_0='" + channel0 + "' "; command += "-gENABLE_CHANNEL_1='" + channel1 + "' "; command += "900\""; status = std::system(command.c_str()); EXPECT_EQ(status, 0); } // =============================== // Synthesis // =============================== const std::vector> fpga_images_defaults = { {"bladeRF", "hosted", "40"}, {"bladeRF", "hosted", "115"}, {"bladeRF-micro", "hosted", "A4"}, {"bladeRF-micro", "hosted", "A9"}, {"bladeRF-micro", "wlan", "A9"} }; const std::vector> fpga_images_all = { {"bladeRF", "hosted", "40"}, {"bladeRF", "hosted", "115"}, {"bladeRF", "adsb", "40"}, {"bladeRF", "adsb", "115"}, {"bladeRF", "atsc_tx", "40"}, {"bladeRF", "atsc_tx", "115"}, {"bladeRF", "fsk_bridge", "40"}, {"bladeRF", "fsk_bridge", "115"}, {"bladeRF", "headless", "40"}, {"bladeRF", "headless", "115"}, {"bladeRF", "qpsk_tx", "40"}, {"bladeRF", "qpsk_tx", "115"}, {"bladeRF-micro", "hosted", "A4"}, {"bladeRF-micro", "hosted", "A9"}, {"bladeRF-micro", "adsb", "A4"}, {"bladeRF-micro", "adsb", "A9"}, {"bladeRF-micro", "foxhunt", "A4"}, {"bladeRF-micro", "foxhunt", "A9"}, {"bladeRF-micro", "wlan", "A9"} }; class synth: public ::testing::TestWithParam> { char build_dir[PATH_MAX]; void SetUp() override { std::string home = std::getenv("HOME"); fs::path nios2shell_path = ""; find_file("~/intelFPGA_lite", "nios2_command_shell.sh", &nios2shell_path); if (nios2shell_path.empty()) { std::cout << "Failed to find nios2_command_shell\n"; } else if (!fs::exists(fs::path(home) / "intelFPGA_lite/20.1")) { std::cout << "[ERROR] Found the nios2_command_shell.sh in an alternate version of Quartus.\n"; std::cout << "[ERROR] Change the NIOS2SHELL directive accordingly.\n\n"; std::cout << " Expected: " << NIOS2SHELL << std::endl; std::cout << " Found: " << nios2shell_path.string() << "\n\n"; } if (getcwd(build_dir, PATH_MAX) == NULL) { perror("Failed to get current directory\n"); } if (chdir(BLADERF_QUARTUS_DIR) != 0) { perror("Failed to move to " BLADERF_QUARTUS_DIR"\n"); } } void TearDown() override { if (chdir(build_dir) != 0) { perror("Failed to move out of " BLADERF_QUARTUS_DIR"\n"); } } }; TEST_P(synth, synthesis) { std::string board = std::get<0>(GetParam()); std::string revision = std::get<1>(GetParam()); std::string size = std::get<2>(GetParam()); std::string command = NIOS2SHELL; command += " ./build_bladerf.sh "; command += " -b " + board; command += " -r " + revision; command += " -s " + size; status = std::system(command.c_str()); EXPECT_EQ(status, 0); } INSTANTIATE_TEST_SUITE_P(synthesize_defaults, synth, ::testing::ValuesIn(fpga_images_defaults), [](const testing::TestParamInfo& info) { std::string name = absl::StrCat( std::get<0>(info.param), "_", std::get<1>(info.param), "_", std::get<2>(info.param)); absl::c_replace_if(name, [](char c) { return !std::isalnum(c); }, '_'); return name; }); INSTANTIATE_TEST_SUITE_P(DISABLED_synthesize_all, synth, ::testing::ValuesIn(fpga_images_all), [](const testing::TestParamInfo& info) { std::string name = absl::StrCat( std::get<0>(info.param), "_", std::get<1>(info.param), "_", std::get<2>(info.param)); absl::c_replace_if(name, [](char c) { return !std::isalnum(c); }, '_'); return name; }); #define OPTARG "v:h" static struct option long_options[] = { { "verbosity", required_argument, NULL, 'v' }, { "help", no_argument, NULL, 'h' }, { NULL, 0, NULL, 0 }, }; int main(int argc, char** argv) { bool ok = true; int opt = 0; int opt_ind = 0; bladerf_log_level log_level; while (opt != -1) { opt = getopt_long(argc, argv, OPTARG, long_options, &opt_ind); switch (opt) { case 'v': log_level = str2loglevel(optarg, &ok); if (!ok) { fprintf(stderr, "Invalid log level: %s\n", optarg); return EXIT_FAILURE; } bladerf_log_set_verbosity(log_level); break; case 'h': printf("Usage: %s [options]\n", argv[0]); printf(" -v, --verbosity Set libbladeRF verbosity level.\n"); printf(" -h, --help Show this text.\n"); printf("\n"); printf(" --gtest_list_tests List all available tests without running them.\n"); printf(" --gtest_filter= Run only the tests matching the filter.\n"); printf(" Example filters: \"libbladeRF*\", \"hdl*\", \"synthesis*\"\n"); printf(" --gtest_also_run_disabled_tests Run only the tests matching the filter.\n"); printf(" --gtest_output=\"json\" Generates JSON report of test run.\n"); printf("\n"); return EXIT_SUCCESS; default: break; } } testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } bladeRF-2024.05/host/libraries/libbladeRF_test/test_repeated_stream/000077500000000000000000000000001457144405000253525ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_repeated_stream/CMakeLists.txt000066400000000000000000000015221457144405000301120ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.5) project(libbladeRF_test_repeated_stream C) set(INCLUDES ${libbladeRF_SOURCE_DIR}/include ${BLADERF_HOST_COMMON_INCLUDE_DIRS} ) set(SRC src/main.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/conversions.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/devcfg.c ) set(LIBS libbladerf_shared) if(MSVC) find_package(LibPThreadsWin32 REQUIRED) set(INCLUDES ${INCLUDES} ${LIBPTHREADSWIN32_INCLUDE_DIRS} ${MSVC_C99_INCLUDES}) set(LIBS ${LIBS} ${LIBPTHREADSWIN32_LIBRARIES}) set(SRC ${SRC} ${BLADERF_HOST_COMMON_SOURCE_DIR}/windows/getopt_long.c) else(MSVC) find_package(Threads REQUIRED) set(LIBS ${LIBS} ${CMAKE_THREAD_LIBS_INIT}) endif(MSVC) include_directories(${INCLUDES}) add_executable(libbladeRF_test_repeated_stream ${SRC}) target_link_libraries(libbladeRF_test_repeated_stream ${LIBS}) bladeRF-2024.05/host/libraries/libbladeRF_test/test_repeated_stream/src/000077500000000000000000000000001457144405000261415ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_repeated_stream/src/main.c000066400000000000000000000211061457144405000272310ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ /* This program repeatedly starts, runs, and stops RX/TX streams. */ #include #include #include #include #include #include #include #include #include #include "devcfg.h" #include "conversions.h" #include "minmax.h" #define OPTIONS DEVCFG_OPTIONS_BASE "r:S:" const char help_prefix[] = "Repeated stream test - Repeatedly start, run, and stop streams\n" "Usage: libbladeRF_test_repeated_stream [options]\n\n" " --rx Run a receive stream.\n" " --tx Run a transmit stream.\n" " -r, --repeat Number of repetitions. Default: 1000\n" " -S, --samples Number of samples to process per iteration.\n" " Default: 1000000\n"; #define OPTION_REPEAT 'r' #define OPTION_NUM_SAMPLES 'S' #define OPTION_RX 0xa0 #define OPTION_TX 0xa1 const struct option app_options[] = { { "repeat", required_argument, 0, OPTION_REPEAT }, { "samples", required_argument, 0, OPTION_NUM_SAMPLES }, { "rx", no_argument, 0, OPTION_RX }, { "tx", no_argument, 0, OPTION_TX }, { 0, 0, 0, 0 }, }; struct app_params { struct bladerf *device; struct devcfg cfg; unsigned int repeat; unsigned int num_samples; bool rx; bool tx; }; static int handle_app_args(int argc, char *argv[], const struct option *options, struct app_params *p) { int c; bool ok; optind = 1; while ((c = getopt_long(argc, argv, OPTIONS, options, NULL)) != -1) { switch (c) { case OPTION_REPEAT: p->repeat = str2uint(optarg, 1, UINT_MAX, &ok); if (!ok) { fprintf(stderr, "Invalid repeat count: %s\n", optarg); return -1; } break; case OPTION_NUM_SAMPLES: p->num_samples = (unsigned int) str2double(optarg, 1, UINT_MAX, &ok); if (!ok) { fprintf(stderr, "Invalid sample count: %s\n", optarg); return -1; } break; case OPTION_RX: p->rx = true; break; case OPTION_TX: p->tx = true; break; } } if (!p->rx && !p->tx) { fprintf(stderr, "Error: --rx or --tx must be specified.\n"); return -1; } return 0; } void * rx_task(void *arg) { const struct app_params *p = (const struct app_params *) arg; unsigned int samples_left; unsigned int to_rx; unsigned int iteration; int status = 0; int16_t *samples = malloc(2 * sizeof(int16_t) * p->cfg.samples_per_buffer); if (!samples) { perror("malloc"); goto out; } for (iteration = 0; iteration < p->repeat; iteration++) { status = devcfg_perform_sync_config(p->device, BLADERF_MODULE_RX, BLADERF_FORMAT_SC16_Q11, &p->cfg, true); if (status != 0) { goto out; } samples_left = p->num_samples; while (samples_left != 0) { to_rx = uint_min(samples_left, p->cfg.samples_per_buffer); status = bladerf_sync_rx(p->device, samples, to_rx, NULL, 2 * p->cfg.sync_timeout_ms); if (status != 0) { fprintf(stderr, "bladerf_sync_rx failed with: %s\n", bladerf_strerror(status)); goto out; } samples_left -= to_rx; } bladerf_enable_module(p->device, BLADERF_MODULE_RX, false); printf("RX iteration %u complete.\r\n", iteration + 1 ); } out: free(samples); return NULL; } void * tx_task(void *arg) { const struct app_params *p = (const struct app_params *) arg; unsigned int samples_left; unsigned int to_tx; unsigned int iteration; int status = 0; int16_t *samples = calloc(p->cfg.samples_per_buffer, 2 * sizeof(int16_t)); if (!samples) { perror("malloc"); goto out; } for (iteration = 0; iteration < p->repeat; iteration++) { status = devcfg_perform_sync_config(p->device, BLADERF_MODULE_TX, BLADERF_FORMAT_SC16_Q11, &p->cfg, true); if (status != 0) { goto out; } samples_left = p->num_samples; while (samples_left != 0) { to_tx = uint_min(samples_left, p->cfg.samples_per_buffer); status = bladerf_sync_tx(p->device, samples, to_tx, NULL, 2 * p->cfg.sync_timeout_ms); if (status != 0) { fprintf(stderr, "bladerf_sync_tx failed with: %s\n", bladerf_strerror(status)); goto out; } samples_left -= to_tx; } bladerf_enable_module(p->device, BLADERF_MODULE_TX, false); printf("TX iteration %u complete.\r\n", iteration + 1 ); } out: free(samples); return NULL; } int main(int argc, char *argv[]) { int status = EXIT_FAILURE; struct option *options = NULL; struct app_params params; pthread_t rx_thread, tx_thread; bool rx_launched = false; bool tx_launched = false; params.rx = false; params.tx = false; params.repeat = 1000; params.num_samples = 1000000; params.device = NULL; devcfg_init(¶ms.cfg); options = devcfg_get_long_options(app_options); if (options == NULL) { fprintf(stderr, "Failed to initialize options array!\n"); return EXIT_FAILURE; } status = devcfg_handle_args(argc, argv, OPTIONS, options, ¶ms.cfg); if (status < 0) { goto out; } else if (status == 1) { status = 0; devcfg_print_common_help(help_prefix); putchar('\n'); goto out; } status = handle_app_args(argc, argv, options, ¶ms); if (status != 0) { goto out; } status = bladerf_open(¶ms.device, params.cfg.device_specifier); if (status != 0) { fprintf(stderr, "Unable to open device: %s\n", bladerf_strerror(status)); goto out; } status = devcfg_apply(params.device, ¶ms.cfg); if (status != 0) { goto out; } if (params.rx) { status = pthread_create(&rx_thread, NULL, rx_task, ¶ms); if (status != 0) { fprintf(stderr, "Failed to launch RX thread: %s\n", strerror(status)); params.rx = false; } else { rx_launched = true; } } if (params.tx) { status = pthread_create(&tx_thread, NULL, tx_task, ¶ms); if (status != 0) { fprintf(stderr, "Failed to launch TX thread: %s\n", strerror(status)); params.tx = false; } else { tx_launched = true; } } if (rx_launched) { pthread_join(rx_thread, NULL); } if (tx_launched) { pthread_join(tx_thread, NULL); } out: bladerf_close(params.device); free(options); return status; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_repeater/000077500000000000000000000000001457144405000240155ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_repeater/CMakeLists.txt000066400000000000000000000022101457144405000265500ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.5) project(libbladeRF_test_repeater C) if(MSVC) find_package(LibPThreadsWin32 REQUIRED) else(MSVC) find_package(Threads REQUIRED) endif(MSVC) set(TEST_REPEATER_SRC src/main.c src/repeater.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/conversions.c ) if(MSVC) set(TEST_REPEATER_SRC ${TEST_REPEATER_SRC} ${BLADERF_HOST_COMMON_SOURCE_DIR}/windows/getopt_long.c ) endif() set(TEST_REPEATER_INCLUDE src ${libbladeRF_SOURCE_DIR}/include ${BLADERF_HOST_COMMON_INCLUDE_DIRS} ) if(MSVC) set(TEST_REPEATER_INCLUDE ${TEST_REPEATER_INCLUDE} ${BLADERF_HOST_COMMON_INCLUDE_DIRS}/windows ${LIBPTHREADSWIN32_INCLUDE_DIRS} ${MSVC_C99_INCLUDES} ) endif() include_directories(${TEST_REPEATER_INCLUDE}) add_executable(libbladeRF_test_repeater ${TEST_REPEATER_SRC}) set(TEST_REPEATER_LIBS libbladerf_shared ${CMAKE_THREAD_LIBS_INIT}) if(LIBPTHREADSWIN32_FOUND) set(TEST_REPEATER_LIBS ${TEST_REPEATER_LIBS} ${LIBPTHREADSWIN32_LIBRARIES}) endif() target_link_libraries(libbladeRF_test_repeater ${TEST_REPEATER_LIBS}) bladeRF-2024.05/host/libraries/libbladeRF_test/test_repeater/src/000077500000000000000000000000001457144405000246045ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_repeater/src/main.c000066400000000000000000000222301457144405000256730ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2013 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * This test implements a simple full-duplex repeater. */ #include #include #include #include #include #include #include #include "conversions.h" /* Conversion routines from host/common */ #include "repeater.h" #define OPTARG_STR "d:s:t:r:S:b:B:T:v:h" static struct option long_options[] = { { "device", required_argument, 0, 'd'}, { "samplerate", required_argument, 0, 's'}, { "tx-freq", required_argument, 0, 't'}, { "rx-freq", required_argument, 0, 'r'}, { "num-samples", required_argument, 0, 'S'}, { "num-buffers", required_argument, 0, 'B'}, { "num-transfers", required_argument, 0, 'T'}, { "verbosity", required_argument, 0, 'v'}, { "help", no_argument, 0, 'h'}, { 0, 0, 0, 0}, }; static const struct numeric_suffix FREQ_SUFFIXES[] = { { "G", 1000 * 1000 * 1000 }, { "GHz", 1000 * 1000 * 1000 }, { "M", 1000 * 1000 }, { "MHz", 1000 * 1000 }, { "k", 1000 } , { "kHz", 1000 } }; static const int NUM_FREQ_SUFFIXES = sizeof(FREQ_SUFFIXES) / sizeof(struct numeric_suffix); static void usage(const char *argv0) { printf("Simple full duplex repeater test\n\n"); printf("Usage: %s [options]\n\n", argv0); printf(" -d, --device Device to use. If not specified, the\n" " first device found will be used.\n\n"); printf(" -s, --samplerate Sample rate. Default is %d Hz\n\n", DEFAULT_SAMPLE_RATE); printf(" -b, --bandwidth Bandwidth. Default is %d Hz\n\n", DEFAULT_BANDWIDTH); printf(" -t, --tx-freq Transmit frequency. Default is %d Hz\n\n", DEFAULT_FREQUENCY); printf(" -r, --rx-freq Receive frequency. Default is %d Hz\n\n", DEFAULT_FREQUENCY); printf(" -S, --num-samples Number of samples per buffer. Default is %d.\n" " Must be a multiple of 1024.\n\n", DEFAULT_SAMPLES_PER_BUFFER); printf(" -B, --num-buffers Number of buffers to use. Default is %d\n\n", DEFAULT_NUM_BUFFERS); printf(" -T, --num-transfers Number of transfers to use. Default is %d.\n" " This value should be *at least* 2 less than the\n" " number of buffers being used.\n\n", DEFAULT_NUM_TRANSFERS); printf(" -v, --verbosity Set libbladeRF verbosity level.\n\n"); printf(" -h, --help Show this text\n\n"); } static int handle_args(int argc, char *argv[], struct repeater_config *config) { int opt, opt_idx; bool conv_ok; repeater_config_init(config); opt = getopt_long(argc, argv, OPTARG_STR, long_options, &opt_idx); while (opt != -1) { switch(opt) { case 'd': if (!config->device_str) { config->device_str = strdup(optarg); if (!config->device_str) { perror("strdup"); return -1; } } else { fprintf(stderr, "\nError: Device already specified: %s\n", config->device_str); return -1; } break; case 't': config->tx_freq = str2uint_suffix(optarg, 1, INT_MAX, FREQ_SUFFIXES, NUM_FREQ_SUFFIXES, &conv_ok); if (!conv_ok) { fprintf(stderr, "\nError: Invalid TX frequency: %d\n\n", config->tx_freq); return -1; } break; case 'r': config->rx_freq = str2uint_suffix(optarg, 1, INT_MAX, FREQ_SUFFIXES, NUM_FREQ_SUFFIXES, &conv_ok); if (!conv_ok) { fprintf(stderr, "\nError: Invalid RX frequency: %d\n\n", config->rx_freq); return -1; } break; case 's': config->sample_rate = str2uint_suffix(optarg, 1, INT_MAX, FREQ_SUFFIXES, NUM_FREQ_SUFFIXES, &conv_ok); if (!conv_ok) { fprintf(stderr, "\nError: Invalid sample rate: %d\n", config->sample_rate); } break; case 'b': config->bandwidth = str2uint_suffix(optarg, 1, INT_MAX, FREQ_SUFFIXES, NUM_FREQ_SUFFIXES, &conv_ok); if (!conv_ok) { fprintf(stderr, "\nError: Invalid bandwidth: %d\n", config->bandwidth); } break; case 'S': config->samples_per_buffer = str2int(optarg, 1024, INT_MAX, &conv_ok); if (!conv_ok || config->samples_per_buffer % 1024 != 0) { fprintf(stderr, "\nError: Invalid samples value: %d\n\n", config->samples_per_buffer); return -1; } break; case 'B': config->num_buffers = str2int(optarg, 1, INT_MAX, &conv_ok); if (!conv_ok) { fprintf(stderr, "\nError: " "Invalid number of buffers: %d\n\n", config->num_buffers); return -1; } break; case 'T': config->num_transfers = str2int(optarg, 1, INT_MAX, &conv_ok); if (!conv_ok) { fprintf(stderr, "\nError: " "Invalid number of transfers: %d\n\n", config->num_buffers); return -1; } break; case 'v': if (!strcasecmp(optarg, "critical")) { config->verbosity = BLADERF_LOG_LEVEL_CRITICAL; } else if (!strcasecmp(optarg, "error")) { config->verbosity = BLADERF_LOG_LEVEL_ERROR; } else if (!strcasecmp(optarg, "warning")) { config->verbosity = BLADERF_LOG_LEVEL_WARNING; } else if (!strcasecmp(optarg, "info")) { config->verbosity = BLADERF_LOG_LEVEL_INFO; } else if (!strcasecmp(optarg, "debug")) { config->verbosity = BLADERF_LOG_LEVEL_DEBUG; } else if (!strcasecmp(optarg, "verbose")) { config->verbosity = BLADERF_LOG_LEVEL_VERBOSE; } else { fprintf(stderr, "Unknown verbosity level: %s\n", optarg); return -1; } break; case 'h': return 1; default: return -1; } opt = getopt_long(argc, argv, OPTARG_STR, long_options, &opt_idx); } if (config->samples_per_buffer < 1024 || config->samples_per_buffer % 1024 != 0) { fprintf(stderr, "\nError: " "# samples must be >= 1024 and a multiple of 1024\n\n"); return -1; } if (config->num_buffers < (config->num_transfers + 2)) { fprintf(stderr, "\nError: " "# buffers (%u) must be at least 2 greater than " "# transfers (%u)\n\n", config->num_buffers, config->num_transfers); return -1; } return 0; } int main(int argc, char *argv[]) { int status; struct repeater_config config; status = handle_args(argc, argv, &config); if (!status) { status = repeater_run(&config); } else { usage(argv[0]); } repeater_config_deinit(&config); return status; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_repeater/src/repeater.c000066400000000000000000000611401457144405000265610ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2013 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * * * This file implements the guts of the simple full-duplex repeater. * * We run two threads to block on bladerf_stream() calls and handle * callbacks, while the "main" thread waits for user input to shut down. * * When starting a TX stream, an initial set of callbacks are immediately fired * off to fill the initial set of transfers. Before starting the TX stream, we * first wait to start the RX stream has filled enough buffers to account for * the initial set of TX transfers. This is referred to as the "prefill count" * in this code. * * We set the prefill count halfway between the total number of buffers and * transfers: * * +---------+ <-- # buffers (32) * | | * +---------+ <-- prefill count (24) * | | * +---------+ <-- # transfers (16) * | | * | | * +---------+ 0 * * * * Although we designate each thread "RX" or "TX", note that these threads * may receive callbacks for the other module. Therefore, the callbacks * cannot block [1] and must be implemented in a thread-safe manner; * accesses to buffer management data are locked via a mutex. * * [1] If a TX callback were to block to wait for RX buffers to * fill more, deadlock could occur because two TX callbacks could be fired * off before an RX callback is exectuted to release the TX callbacks. * * * Overruns and underruns are not handled intelligently in this simple test. * If either occur (they shouldn't), the associated tasks shut down and wait * for the user to terminate the program. */ #include #include #include #include #include #include #include "rel_assert.h" #include "repeater.h" #include "minmax.h" #if BLADERF_OS_WINDOWS #include static int term_init() { return 0; } static int term_deinit() { return 0; } static char get_key() { return (char)_getch(); } #else #include #include #include static struct termios *termios_backup = NULL; static int term_init() { struct termios termios_new; int status; termios_backup = malloc(sizeof(*termios_backup)); if (termios_backup == NULL) { perror("malloc"); return -1; } status = tcgetattr(STDIN_FILENO, termios_backup); if (status != 0) { perror("tcgetattr"); return status; } memcpy(&termios_new, termios_backup, sizeof(termios_new)); termios_new.c_cc[VMIN] = 1; termios_new.c_cc[VTIME] = 0; termios_new.c_lflag &= ~ICANON; termios_new.c_lflag &= ~ECHO; status = tcsetattr(0, TCSANOW, &termios_new); if (status != 0) { perror("tcsetattr"); return status; } return 0; } static int term_deinit() { int status; if (termios_backup == NULL) { status = -1; } else { status = tcsetattr(0, TCSANOW, termios_backup); free(termios_backup); } return status; } static char get_key() { return (char)getc(stdin); } #endif /* Thread-safe wrapper around fprintf(stderr, ...) */ #define print_error(repeater_, ...) do { \ pthread_mutex_lock(&repeater_->stderr_lock); \ fprintf(stderr, __VA_ARGS__); \ pthread_mutex_unlock(&repeater_->stderr_lock); \ } while (0) #define GAIN_TXVGA1_MIN -35 #define GAIN_TXVGA1_MAX 4 #define GAIN_TXVGA2_MIN 0 #define GAIN_TXVGA2_MAX 25 #define GAIN_RXVGA1_MIN 5 #define GAIN_RXVGA1_MAX 30 #define GAIN_RXVGA2_MIN 0 #define GAIN_RXVGA2_MAX 30 #define KEY_DEC_TX '1' #define KEY_INC_TX '2' #define KEY_DEC_RX '3' #define KEY_INC_RX '4' #define KEY_QUIT 'q' #define KEY_HELP 'h' struct buf_mgmt { int rx_idx; /* Next sample buffer to RX into. < 0 indicates stop */ int tx_idx; /* Next sample buffer to TX from. < 0 indicates stop */ size_t num_filled; /* Number of buffers filled with RX data awaiting TX */ size_t prefill_count; /* Since the initial set of TX callbacks will look to fill all available transfers, we must ensure that the RX task has prefilled a sufficient number of buffers */ void **samples; /* Sample buffers */ size_t num_buffers; /* # of sample buffers */ /* Used to signal the TX thread when a few samplse have been buffered up */ pthread_cond_t samples_available; pthread_mutex_t lock; }; struct repeater { struct bladerf *device; pthread_t rx_task; struct bladerf_stream *rx_stream; pthread_t tx_task; struct bladerf_stream *tx_stream; pthread_mutex_t stderr_lock; struct buf_mgmt buf_mgmt; int gain_tx; /**< TX gain */ int gain_rx; /**< RX gain */ struct bladerf_range gain_range_rx; struct bladerf_range gain_range_tx; }; void repeater_config_init(struct repeater_config *c) { c->device_str = NULL; c->tx_freq = DEFAULT_FREQUENCY; c->rx_freq = DEFAULT_FREQUENCY; c->sample_rate = DEFAULT_SAMPLE_RATE; c->bandwidth = DEFAULT_BANDWIDTH; c->num_buffers = DEFAULT_NUM_BUFFERS; c->num_transfers = DEFAULT_NUM_TRANSFERS; c->samples_per_buffer = DEFAULT_SAMPLES_PER_BUFFER; c->verbosity = BLADERF_LOG_LEVEL_INFO; } void repeater_config_deinit(struct repeater_config *c) { free(c->device_str); c->device_str = NULL; } static void *tx_stream_callback(struct bladerf *dev, struct bladerf_stream *stream, struct bladerf_metadata *meta, void *samples, size_t num_samples, void *user_data) { void *ret; struct repeater *repeater = (struct repeater *)user_data; pthread_mutex_lock(&repeater->buf_mgmt.lock); if (repeater->buf_mgmt.tx_idx < 0) { ret = NULL; } else { /* We shouldn't encounter underruns, but for the sake of simplicity * in this test/example, we'll just error out if we hit one */ if (repeater->buf_mgmt.num_filled == 0) { ret = NULL; print_error(repeater, "TX underrun encountered. Terminating TX task.\r\n"); } else { ret = repeater->buf_mgmt.samples[repeater->buf_mgmt.tx_idx++]; if (repeater->buf_mgmt.tx_idx >= (int)repeater->buf_mgmt.num_buffers) { repeater->buf_mgmt.tx_idx = 0; } repeater->buf_mgmt.num_filled--; } } pthread_mutex_unlock(&repeater->buf_mgmt.lock); return ret; } void * tx_task_run(void *repeater_) { int status; struct repeater *repeater = (struct repeater *)repeater_; bool exit_early = false; /* Wait for RX task to buffer up some samples before we begin * consuming them */ pthread_mutex_lock(&repeater->buf_mgmt.lock); while(repeater->buf_mgmt.num_filled < repeater->buf_mgmt.prefill_count && repeater->buf_mgmt.tx_idx >= 0) { status = pthread_cond_wait(&repeater->buf_mgmt.samples_available, &repeater->buf_mgmt.lock); if (status != 0) { print_error(repeater, "TX startup wait failed (%d)\n", status); exit_early = true; } } exit_early |= repeater->buf_mgmt.tx_idx < 0; pthread_mutex_unlock(&repeater->buf_mgmt.lock); if (!exit_early) { /* Call stream */ status = bladerf_stream(repeater->tx_stream, BLADERF_MODULE_TX); if (status < 0) { print_error(repeater, "TX stream failure: %s\r\n", bladerf_strerror(status)); } } else { printf("EARLY EXIT\r\n"); } return NULL; } static void *rx_stream_callback(struct bladerf *dev, struct bladerf_stream *stream, struct bladerf_metadata *meta, void *samples, size_t num_samples, void *user_data) { struct repeater *repeater = (struct repeater *)user_data; void *ret; pthread_mutex_lock(&repeater->buf_mgmt.lock); if (repeater->buf_mgmt.rx_idx < 0) { ret = NULL; } else { ret = repeater->buf_mgmt.samples[repeater->buf_mgmt.rx_idx++]; /* Wrap back around */ if (repeater->buf_mgmt.rx_idx >= (int)repeater->buf_mgmt.num_buffers) { repeater->buf_mgmt.rx_idx = 0; } if (repeater->buf_mgmt.num_filled >= 2 * repeater->buf_mgmt.num_buffers) { /* We shouldn't encounter overruns, but if we do, we'll just * error out of the program, for the sake of simplicity */ print_error(repeater, "RX Overrun encountered. Terminating RX task.\r\n"); ret = NULL; } else { repeater->buf_mgmt.num_filled++; } pthread_cond_signal(&repeater->buf_mgmt.samples_available); } pthread_mutex_unlock(&repeater->buf_mgmt.lock); return ret; } void * rx_task_run(void *repeater_) { int status; struct repeater *repeater = (struct repeater *)repeater_; status = bladerf_stream(repeater->rx_stream, BLADERF_MODULE_RX); if (status < 0) { print_error(repeater, "RX stream failure: %s\r\n", bladerf_strerror(status)); } return NULL; } static inline void repeater_init(struct repeater *repeater, struct repeater_config *config) { memset(repeater, 0, sizeof(*repeater)); pthread_mutex_init(&repeater->stderr_lock, NULL); pthread_mutex_init(&repeater->buf_mgmt.lock, NULL); pthread_cond_init(&repeater->buf_mgmt.samples_available, NULL); repeater->buf_mgmt.num_filled = 0; repeater->buf_mgmt.num_buffers = config->num_buffers; /* We must prefill, at a minimum, 1 + the number of TX transfers, * since the intial set of TX callbacks will look to populate each * transfer. Below, we try to set the prefill count halfway between * the number of buffers and the number of transfers. */ repeater->buf_mgmt.prefill_count = config->num_transfers; repeater->buf_mgmt.prefill_count += (repeater->buf_mgmt.num_buffers - config->num_transfers) / 2; assert(repeater->buf_mgmt.prefill_count != 0); bladerf_log_set_verbosity(config->verbosity); } static int init_device(struct repeater *repeater, struct repeater_config *config) { int status = 0; unsigned int actual_value; const struct bladerf_range *gain_ptr; status = bladerf_open(&repeater->device, config->device_str); if (!repeater->device) { fprintf(stderr, "Failed to open %s: %s\r\n", config->device_str, bladerf_strerror(status)); return -1; } status = bladerf_is_fpga_configured(repeater->device); if (status < 0) { fprintf(stderr, "Failed to determine if FPGA is loaded: %s\r\n", bladerf_strerror(status)); goto init_device_error; } else if (status == 0) { fprintf(stderr, "FPGA is not loaded. Aborting.\r\n"); status = BLADERF_ERR_NODEV; goto init_device_error; } status = bladerf_set_bandwidth(repeater->device, BLADERF_MODULE_TX, config->bandwidth, &actual_value); if (status < 0) { fprintf(stderr, "Failed to set TX bandwidth: %s\r\n", bladerf_strerror(status)); goto init_device_error; } else { printf("Actual TX bandwidth: %d Hz\r\n", actual_value); } status = bladerf_set_bandwidth(repeater->device, BLADERF_MODULE_RX, config->bandwidth, &actual_value); if (status < 0) { fprintf(stderr, "Failed to set RX bandwidth: %s\r\n", bladerf_strerror(status)); goto init_device_error; } else { printf("Actual RX bandwidth: %d Hz\r\n", actual_value); } status = bladerf_set_sample_rate(repeater->device, BLADERF_MODULE_TX, config->sample_rate, &actual_value); if (status < 0) { fprintf(stderr, "Failed to set TX sample rate: %s\r\n", bladerf_strerror(status)); goto init_device_error; } else { printf("Actual TX sample rate is %d Hz\r\n", actual_value); } status = bladerf_set_sample_rate(repeater->device, BLADERF_MODULE_RX, config->sample_rate, &actual_value); if (status < 0) { fprintf(stderr, "Failed to set RX sample rate: %s\r\n", bladerf_strerror(status)); goto init_device_error; } else { printf("Actual RX sample rate is %d Hz\r\n", actual_value); } status = bladerf_set_frequency(repeater->device, BLADERF_MODULE_TX, config->tx_freq); if (status < 0) { fprintf(stderr, "Failed to set TX frequency: %s\r\n", bladerf_strerror(status)); goto init_device_error; } else { printf("Set TX frequency to %d Hz\r\n", config->tx_freq); } status = bladerf_set_frequency(repeater->device, BLADERF_MODULE_RX, config->rx_freq); if (status < 0) { fprintf(stderr, "Failed to set RX frequency: %s\r\n", bladerf_strerror(status)); goto init_device_error; } else { printf("Set RX frequency to %d Hz\r\n", config->rx_freq); } status = bladerf_enable_module(repeater->device, BLADERF_MODULE_RX, true); if (status < 0) { fprintf(stderr, "Failed to enable RX module: %s\r\n", bladerf_strerror(status)); goto init_device_error; } else { printf("Enabled RX module\r\n"); } status = bladerf_enable_module(repeater->device, BLADERF_MODULE_TX, true); if (status < 0) { bladerf_enable_module(repeater->device, BLADERF_MODULE_RX, false); fprintf(stderr, "Failed to enable TX module: %s\r\n", bladerf_strerror(status)); goto init_device_error; } else { printf("Enabled TX module\r\n"); } status = bladerf_get_gain(repeater->device, BLADERF_CHANNEL_TX(0), &repeater->gain_tx); if (status < 0) { fprintf(stderr, "Failed to get TX gain: %s\r\n", bladerf_strerror(status)); goto init_device_error; } else { printf("TX gain is: %d\r\n", repeater->gain_tx); } status = bladerf_get_gain_range(repeater->device, BLADERF_CHANNEL_TX(0), &gain_ptr); if (status < 0) { fprintf(stderr, "Failed to get TX gain range: %s\r\n", bladerf_strerror(status)); goto init_device_error; } else { memcpy(&repeater->gain_range_tx, gain_ptr, sizeof(struct bladerf_range)); printf("TX gain range is: [%"PRIi64", %"PRIi64"]\r\n", repeater->gain_range_tx.min, repeater->gain_range_tx.max); } status = bladerf_get_gain(repeater->device, BLADERF_CHANNEL_RX(0), &repeater->gain_rx); if (status < 0) { fprintf(stderr, "Failed to get RX gain: %s\r\n", bladerf_strerror(status)); goto init_device_error; } else { printf("RX gain is: %d\r\n", repeater->gain_rx); } status = bladerf_get_gain_range(repeater->device, BLADERF_CHANNEL_RX(0), &gain_ptr); if (status < 0) { fprintf(stderr, "Failed to get RX gain range: %s\r\n", bladerf_strerror(status)); goto init_device_error; } else { memcpy(&repeater->gain_range_rx, gain_ptr, sizeof(struct bladerf_range)); printf("RX gain range is: [%"PRIi64", %"PRIi64"]\r\n", repeater->gain_range_rx.min, repeater->gain_range_rx.max); } return status; init_device_error: bladerf_close(repeater->device); repeater->device = NULL; return status; } static int init_streams(struct repeater *repeater, struct repeater_config *config) { int status; status = bladerf_init_stream(&repeater->rx_stream, repeater->device, rx_stream_callback, &repeater->buf_mgmt.samples, config->num_buffers, BLADERF_FORMAT_SC16_Q11, config->samples_per_buffer, config->num_transfers, repeater); if (status < 0) { fprintf(stderr, "Failed to initialize RX stream: %s\r\n", bladerf_strerror(status)); return status; } else { repeater->buf_mgmt.rx_idx = 0; } status = bladerf_init_stream(&repeater->tx_stream, repeater->device, tx_stream_callback, NULL, config->num_buffers, BLADERF_FORMAT_SC16_Q11, config->samples_per_buffer, config->num_transfers, repeater); if (status < 0) { fprintf(stderr, "Failed to initialize TX stream: %s\r\n", bladerf_strerror(status)); return status; } else { repeater->buf_mgmt.tx_idx = 0; } repeater->buf_mgmt.num_buffers = config->num_buffers; return 0; } static int start_tasks(struct repeater *repeater) { int status; status = pthread_create(&repeater->rx_task, NULL, rx_task_run, repeater); if (status < 0) { return -1; } status = pthread_create(&repeater->tx_task, NULL, tx_task_run, repeater); if (status < 0) { pthread_cancel(repeater->rx_task); pthread_join(repeater->rx_task, NULL); return -1; } return 0; } static void stop_tasks(struct repeater *repeater) { print_error(repeater, "Stoppping RX and tasks...\r\n"); pthread_mutex_lock(&repeater->buf_mgmt.lock); repeater->buf_mgmt.tx_idx = -1; repeater->buf_mgmt.rx_idx = -1; pthread_mutex_unlock(&repeater->buf_mgmt.lock); pthread_join(repeater->rx_task, NULL); /* Fire off the "samples available" signal to the TX thread, in case * it is still awaiting for the prefill completion */ pthread_mutex_lock(&repeater->buf_mgmt.lock); pthread_cond_signal(&repeater->buf_mgmt.samples_available); pthread_mutex_unlock(&repeater->buf_mgmt.lock); pthread_join(repeater->tx_task, NULL); } static void deinit(struct repeater *repeater) { if (repeater->device) { if (repeater->rx_stream) { bladerf_deinit_stream(repeater->rx_stream); } if (repeater->tx_stream) { bladerf_deinit_stream(repeater->tx_stream); } bladerf_enable_module(repeater->device, BLADERF_MODULE_RX, false); bladerf_enable_module(repeater->device, BLADERF_MODULE_TX, false); bladerf_close(repeater->device); repeater->device = NULL; } } static int init(struct repeater *repeater, struct repeater_config *config) { int status; repeater_init(repeater, config); /* Configure the bladeRF */ status = init_device(repeater, config); if (status < 0) { fprintf(stderr, "Failed to initialize device.\r\n"); return -1; } /* Allocate streams */ status = init_streams(repeater, config); if (status < 0) { fprintf(stderr, "Failed to allocate streams.\r\n"); return -1; } return 0; } static void repeater_help() { printf("\r\nHotkeys\r\n"); printf("------------------------------------------------\r\n"); printf("TX Gain: Decrement = %c, Increment = %c\r\n", KEY_DEC_TX, KEY_INC_TX); printf("RX Gain: Decrement = %c, Increment = %c\r\n", KEY_DEC_RX, KEY_INC_RX); printf("Quit: q\r\n"); printf("Hotkey list: h\r\n\r\n"); } static int repeater_handle_key(struct repeater *repeater, char key) { int status = 0; switch (key) { case KEY_DEC_TX: if (repeater->gain_tx >= repeater->gain_range_tx.min) { status = bladerf_set_gain(repeater->device, BLADERF_CHANNEL_TX(0), --repeater->gain_tx); if (status < 0) { repeater->gain_tx++; fprintf(stderr, "Failed to increase TX gain: %s\r\n", bladerf_strerror(status)); } else { printf("TX gain decreased to: %d\r\n", repeater->gain_tx); } } break; case KEY_INC_TX: if (repeater->gain_tx <= repeater->gain_range_tx.max) { status = bladerf_set_gain(repeater->device, BLADERF_CHANNEL_TX(0), ++repeater->gain_tx); if (status < 0) { repeater->gain_tx--; fprintf(stderr, "Failed to increase TX gain: %s\r\n", bladerf_strerror(status)); } else { printf("TX gain increased to: %d\r\n", repeater->gain_tx); } } break; case KEY_DEC_RX: if (repeater->gain_rx >= repeater->gain_range_rx.min) { status = bladerf_set_gain(repeater->device, BLADERF_CHANNEL_RX(0), --repeater->gain_rx); if (status < 0) { repeater->gain_rx++; fprintf(stderr, "Failed to decrease RX gain: %s\r\n", bladerf_strerror(status)); } else { printf("RX gain decreased to %d\r\n", repeater->gain_rx); } } break; case KEY_INC_RX: if (repeater->gain_rx <= repeater->gain_range_tx.max) { status = bladerf_set_gain(repeater->device, BLADERF_CHANNEL_RX(0), ++repeater->gain_rx); if (status < 0) { repeater->gain_rx--; fprintf(stderr, "Failed to increase RX gain: %s\r\n", bladerf_strerror(status)); } else { printf("RX gain increased to %d\r\n", repeater->gain_rx); } } break; case KEY_HELP: repeater_help(); break; default: break; } return status; } int repeater_run(struct repeater_config *config) { int status; char key; struct repeater repeater; status = term_init(); if (status != 0) { return 1; } status = init(&repeater, config); if (status == 0) { /* Start tasks and wait for a key press to shut down */ status = start_tasks(&repeater); if (status < 0) { fprintf(stderr, "Failed to start tasks.\r\n"); } else { repeater_help(); do { key = get_key(); repeater_handle_key(&repeater, key); } while (key != KEY_QUIT); } /* Stop tasks */ stop_tasks(&repeater); deinit(&repeater); } return term_deinit(); } bladeRF-2024.05/host/libraries/libbladeRF_test/test_repeater/src/repeater.h000066400000000000000000000044351457144405000265720ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2013 Nuand LLC * * 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 2.1 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef REPEATER_H__ #define REPEATER_H__ #define DEFAULT_NUM_BUFFERS 32 #define DEFAULT_NUM_TRANSFERS 16 #define DEFAULT_SAMPLES_PER_BUFFER 8192 #define DEFAULT_SAMPLE_RATE 2500000 #define DEFAULT_FREQUENCY 1000000000 #define DEFAULT_BANDWIDTH DEFAULT_SAMPLE_RATE /** * Application configuration */ struct repeater_config { char *device_str; /**< Device to use */ int tx_freq; /**< TX frequency */ int rx_freq; /**< RX frequency */ int sample_rate; /**< Sampling rate */ int bandwidth; /**< Bandwidth */ int num_buffers; /**< Number of buffers to allocate and use */ int num_transfers; /**< Number of transfers to allocate and use */ int samples_per_buffer; /**< Number of SC16Q11 samples per buffer */ bladerf_log_level verbosity; /** Library verbosity */ }; /** * Initialize the provided application config to defaults * * @param c Configuration to initialize */ void repeater_config_init(struct repeater_config *c); /** * Deinitialize configuration and free any heap-allocated items * * @param c Configuration to deinitialize */ void repeater_config_deinit(struct repeater_config *c); /** * Kick off repeater test * * @param c Repeater configuration * * @return 0 on succes, non-zero on failure */ int repeater_run(struct repeater_config *c); #endif bladeRF-2024.05/host/libraries/libbladeRF_test/test_rx_discont/000077500000000000000000000000001457144405000243625ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_rx_discont/CMakeLists.txt000066400000000000000000000015431457144405000271250ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.5) project(libbladeRF_test_rx_discont C) set(INCLUDES ${libbladeRF_SOURCE_DIR}/include ${BLADERF_HOST_COMMON_INCLUDE_DIRS} ) if(MSVC) set(INCLUDES ${INCLUDES} ${MSVC_C99_INCLUDES}) endif() set(LIBS libbladerf_shared) if(MSVC) find_package(LibPThreadsWin32 REQUIRED) set(INCLUDES ${INCLUDES} ${LIBPTHREADSWIN32_INCLUDE_DIRS}) set(LIBS ${LIBS} ${LIBPTHREADSWIN32_LIBRARIES}) else(MSVC) find_package(Threads REQUIRED) set(LIBS ${LIBS} ${CMAKE_THREAD_LIBS_INIT}) endif(MSVC) set(SRC src/main.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/conversions.c ) if(MSVC) set(SRC ${SRC} ${BLADERF_HOST_COMMON_SOURCE_DIR}/windows/getopt_long.c ) endif() include_directories(${INCLUDES}) add_executable(libbladeRF_test_rx_discont ${SRC}) target_link_libraries(libbladeRF_test_rx_discont ${LIBS}) bladeRF-2024.05/host/libraries/libbladeRF_test/test_rx_discont/src/000077500000000000000000000000001457144405000251515ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_rx_discont/src/main.c000066400000000000000000000245451457144405000262530ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include #include #include #include #include #include "conversions.h" /* TODO Make these configurable */ #define BUFFER_SIZE 4096 #define NUM_BUFFERS 128 #define NUM_XFERS 31 #define TIMEOUT_MS 2500 #define RESET_EXPECTED UINT32_MAX #define OPTSTR "hs:i:t:b:v" const struct option long_options[] = { { "help", no_argument, 0, 'h' }, { "device", required_argument, 0, 'd' }, { "samplerate", required_argument, 0, 's' }, { "iterations", required_argument, 0, 'i' }, { "bitmode", required_argument, 0, 'b' }, { "verbose", no_argument, 0, 'v' }, }; const struct numeric_suffix freq_suffixes[] = { { "K", 1000 }, { "kHz", 1000 }, { "M", 1000000 }, { "MHz", 1000000 }, { "G", 1000000000 }, { "GHz", 1000000000 }, }; const struct numeric_suffix count_suffixes[] = { { "K", 1000 }, { "M", 1000000 }, { "G", 1000000000 }, }; struct app_params { unsigned int samplerate; unsigned int iterations; char *device_str; bladerf_format fmt; }; static void print_usage(const char *argv0) { printf("Usage: %s [options]\n", argv0); printf("libbladerf_test_discont: Test for discontinuities.\n"); printf("\n"); printf("Options:\n"); printf(" -b, --bitmode Specify 16bit or 8bit mode\n"); printf(" <16bit|16> (default)\n"); printf(" <8bit|8>\n"); printf(" -s, --samplerate Use the specified sample rate.\n"); printf(" -t, --test Run the specified test.\n"); printf(" -i, --iterations Run the specified number of iterations\n"); printf(" -d, --device Device argument string\n"); printf(" -h, --help Print this help text.\n"); printf("\n"); printf("Available tests:\n"); printf(" rx_counter - Received samples are derived from the internal\n" " FPGA counter. Gaps are reported.\n"); printf("\n"); } int handle_cmdline(int argc, char *argv[], struct app_params *p) { int c, idx; bool ok; memset(p, 0, sizeof(p[0])); p->samplerate = 1000000; p->iterations = 10000; p->device_str = NULL; p->fmt = BLADERF_FORMAT_SC16_Q11; while ((c = getopt_long(argc, argv, OPTSTR, long_options, &idx)) >= 0) { switch (c) { case 's': p->samplerate = str2uint_suffix(optarg, BLADERF_SAMPLERATE_MIN, BLADERF_SAMPLERATE_REC_MAX, freq_suffixes, ARRAY_SIZE(freq_suffixes), &ok); if (!ok) { fprintf(stderr, "Invalid sample rate: %s\n", optarg); return -1; } break; case 'i': p->iterations = str2uint_suffix(optarg, 1, UINT_MAX, count_suffixes, ARRAY_SIZE(count_suffixes), &ok); if (!ok) { fprintf(stderr, "Invalid # iterations: %s\n", optarg); return -1; } break; case 'd': p->device_str = optarg; break; case 'v': bladerf_log_set_verbosity(BLADERF_LOG_LEVEL_VERBOSE); break; case 'b': if (strcmp(optarg, "16bit") == 0 || strcmp(optarg, "16") == 0) { p->fmt = BLADERF_FORMAT_SC16_Q11; } else if (strcmp(optarg, "8bit") == 0 || strcmp(optarg, "8") == 0) { p->fmt = BLADERF_FORMAT_SC8_Q7; } else { printf("Unknown bitmode: %s\n", optarg); return -1; } break; case 'h': print_usage(argv[0]); return 1; } } return 0; } int run_test(struct bladerf *dev, struct app_params *p) { int status; uint32_t gpio_val, gpio_backup; unsigned int i, j; uint32_t *data = NULL; uint16_t eight_bit_sample0; uint16_t eight_bit_sample1; int num_samples = (p->fmt == BLADERF_FORMAT_SC8_Q7) ? 2*BUFFER_SIZE : BUFFER_SIZE; unsigned int discontinuities = 0; unsigned int sample_num = 0; unsigned int count_exp = RESET_EXPECTED; const unsigned int update_interval = p->samplerate / BUFFER_SIZE; status = bladerf_sync_config(dev, BLADERF_MODULE_RX, p->fmt, NUM_BUFFERS, BUFFER_SIZE, NUM_XFERS, TIMEOUT_MS); if (status != 0) { fprintf(stderr, "Failed to configure RX sync i/f: %s\n", bladerf_strerror(status)); return status; } status = bladerf_config_gpio_read(dev, &gpio_val); if (status != 0) { fprintf(stderr, "Failed to read device IO configuration: %s\n", bladerf_strerror(status)); return status; } /* TODO use API macro (in upcoming changeset) */ gpio_backup = gpio_val; gpio_val |= BLADERF_GPIO_COUNTER_ENABLE; status = bladerf_config_gpio_write(dev, gpio_val); if (status != 0) { fprintf(stderr, "Failed to write device IO configuration: %s\n", bladerf_strerror(status)); return status; } data = malloc(BUFFER_SIZE * sizeof(data[0])); if (data == NULL) { perror("malloc"); status = BLADERF_ERR_UNEXPECTED; goto out; } status = bladerf_enable_module(dev, BLADERF_MODULE_RX, true); if (status != 0) { fprintf(stderr, "Failed to enable RX module: %s\n", bladerf_strerror(status)); goto out; } printf("Running %u iterations.\n\n", p->iterations); for (i = 0, status = 0; i < p->iterations && status == 0; i++) { if (i % update_interval == 0) { printf("\rCurrent iteration %10u / %-10u\n", i, p->iterations); fflush(stdout); } status = bladerf_sync_rx(dev, data, num_samples, NULL, TIMEOUT_MS); if (status != 0) { fprintf(stderr, "\nRX failed: %s\n", bladerf_strerror(status)); } for (j = 0; j < BUFFER_SIZE; j++) { if (count_exp != RESET_EXPECTED) { if (count_exp != data[j]) { fprintf(stderr, "[%3u] Expected 0x%08x, Got 0x%08x\n", sample_num+j, count_exp, data[j]); count_exp = UINT32_MAX; discontinuities++; if (discontinuities > 10) goto out; } else { if (p->fmt == BLADERF_FORMAT_SC8_Q7) /** Increment both samples within the buffer by 2 */ count_exp = (((count_exp>>16) + 2)<<16) | (((count_exp<<16)>>16) + 2); else count_exp++; } } else { eight_bit_sample1 = (uint16_t)(data[j]>>16); eight_bit_sample0 = (uint16_t)data[j]; if (p->fmt == BLADERF_FORMAT_SC8_Q7) count_exp = ((eight_bit_sample1+2)<<16) | (eight_bit_sample0+2); else count_exp = data[j] + 1; } } sample_num += BUFFER_SIZE; } printf("\n\nDone. %u discontinuities encountered.\n", discontinuities); out: if (bladerf_config_gpio_write(dev, gpio_backup) != 0) { fprintf(stderr, "Failed to restore device IO configuration\n"); } free(data); return status; } int main(int argc, char *argv[]) { int status; struct app_params params; struct bladerf *dev; status = handle_cmdline(argc, argv, ¶ms); if (status != 0) { return status != 1 ? status : 0; } status = bladerf_open(&dev, params.device_str); if (status != 0) { fprintf(stderr, "Failed to open device: %s\n", bladerf_strerror(status)); return -1; } status = bladerf_set_sample_rate(dev, BLADERF_MODULE_RX, params.samplerate, NULL); if (status != 0) { fprintf(stderr, "Failed to set RX samplerate: %s\n", bladerf_strerror(status)); goto out; } status = bladerf_set_sample_rate(dev, BLADERF_MODULE_TX, params.samplerate, NULL); if (status != 0) { fprintf(stderr, "Failed to set TX samplerate: %s\n", bladerf_strerror(status)); goto out; } status = run_test(dev, ¶ms); out: bladerf_close(dev); return status; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_rx_meta/000077500000000000000000000000001457144405000236455ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_rx_meta/CMakeLists.txt000066400000000000000000000011431457144405000264040ustar00rootroot00000000000000project(libbladeRF_test_rx_meta VERSION 2.8 LANGUAGES C) set(INCLUDES ./include ${libbladeRF_SOURCE_DIR}/include ${libbladeRF_SOURCE_DIR}/src ${BLADERF_HOST_COMMON_INCLUDE_DIRS} ) include_directories(${INCLUDES}) set(SRC ./src/main.c ./src/include.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/log.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/conversions.c ) if(MSVC) set(SRC ${SRC} ${BLADERF_HOST_COMMON_SOURCE_DIR}/windows/getopt_long.c ) endif(MSVC) add_executable(${PROJECT_NAME} ${SRC}) target_link_libraries( ${PROJECT_NAME} libbladerf_shared ) bladeRF-2024.05/host/libraries/libbladeRF_test/test_rx_meta/include/000077500000000000000000000000001457144405000252705ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_rx_meta/include/include.h000066400000000000000000000036621457144405000270730ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2023 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef EXAMPLE_COMMON_H__ #define EXAMPLE_COMMON_H__ /* Some portability macros */ #include "host_config.h" /* assert() that is kept enabled in non-debug builds */ #include "rel_assert.h" /* Settings used in examples */ #define EXAMPLE_SAMPLERATE 2000000 #define EXAMPLE_BANDWIDTH BLADERF_BANDWIDTH_MIN #define EXAMPLE_RX_FREQ 910000000 #define EXAMPLE_RX_GAIN 26 #define EXAMPLE_TX_FREQ 920000000 #define EXAMPLE_TX_GAIN (-20) /** * Device initialization function for example snippets in this directory * * @param devstr Optional device specifier string. Use NULL to open * any available device. * * @return A bladeRF device handle on success, NULL on failure. */ struct bladerf *example_init(const char *devstr); #endif bladeRF-2024.05/host/libraries/libbladeRF_test/test_rx_meta/src/000077500000000000000000000000001457144405000244345ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_rx_meta/src/include.c000066400000000000000000000103471457144405000262300ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2023 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include #include "include.h" struct bladerf *example_init(const char *devstr) { int status; struct bladerf *dev; printf("Opening and initializing device...\n\n"); status = bladerf_open(&dev, devstr); if (status != 0) { fprintf(stderr, "Failed to open device: %s\n", bladerf_strerror(status)); goto out; } status = bladerf_set_frequency(dev, BLADERF_CHANNEL_RX(0), EXAMPLE_RX_FREQ); if (status != 0) { fprintf(stderr, "Failed to set RX frequency: %s\n", bladerf_strerror(status)); goto out; } else { printf("RX frequency: %u Hz\n", EXAMPLE_RX_FREQ); } status = bladerf_set_sample_rate(dev, BLADERF_CHANNEL_RX(0), EXAMPLE_SAMPLERATE, NULL); if (status != 0) { fprintf(stderr, "Failed to set RX sample rate: %s\n", bladerf_strerror(status)); goto out; } else { printf("RX samplerate: %u sps\n", EXAMPLE_SAMPLERATE); } status = bladerf_set_bandwidth(dev, BLADERF_CHANNEL_RX(0), EXAMPLE_BANDWIDTH, NULL); if (status != 0) { fprintf(stderr, "Failed to set RX bandwidth: %s\n", bladerf_strerror(status)); goto out; } else { printf("RX bandwidth: %u Hz\n", EXAMPLE_BANDWIDTH); } status = bladerf_set_gain(dev, BLADERF_CHANNEL_RX(0), EXAMPLE_RX_GAIN); if (status != 0) { fprintf(stderr, "Failed to set RX gain: %s\n", bladerf_strerror(status)); goto out; } else { printf("RX gain: %d\n", EXAMPLE_RX_GAIN); } status = bladerf_set_frequency(dev, BLADERF_CHANNEL_TX(0), EXAMPLE_TX_FREQ); if (status != 0) { fprintf(stderr, "Faield to set TX frequency: %s\n", bladerf_strerror(status)); goto out; } else { printf("TX frequency: %u Hz\n", EXAMPLE_TX_FREQ); } status = bladerf_set_sample_rate(dev, BLADERF_CHANNEL_TX(0), EXAMPLE_SAMPLERATE, NULL); if (status != 0) { fprintf(stderr, "Failed to set TX sample rate: %s\n", bladerf_strerror(status)); goto out; } else { printf("TX samplerate: %u sps\n", EXAMPLE_SAMPLERATE); } status = bladerf_set_bandwidth(dev, BLADERF_CHANNEL_TX(0), EXAMPLE_BANDWIDTH, NULL); if (status != 0) { fprintf(stderr, "Failed to set TX bandwidth: %s\n", bladerf_strerror(status)); goto out; } else { printf("TX bandwidth: %u\n", EXAMPLE_BANDWIDTH); } status = bladerf_set_gain(dev, BLADERF_CHANNEL_TX(0), EXAMPLE_TX_GAIN); if (status != 0) { fprintf(stderr, "Failed to set TX gain: %s\n", bladerf_strerror(status)); goto out; } else { printf("TX gain: %d\n", EXAMPLE_TX_GAIN); } out: if (status != 0) { bladerf_close(dev); return NULL; } else { return dev; } } bladeRF-2024.05/host/libraries/libbladeRF_test/test_rx_meta/src/main.c000066400000000000000000000313351457144405000255310ustar00rootroot00000000000000/* * Example of RX synchronous interface usage with metadata * * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2023 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include #include #include #include #include #include #include "include.h" #include "conversions.h" #include "log.h" /* Initialize sync interface for metadata and allocate our "working" * buffer that we'd use to process our RX'd samples. * * Return sample buffer on success, or NULL on failure. */ int16_t *init(struct bladerf *dev, int16_t num_samples, bladerf_format format, bladerf_channel_layout channel_layout, unsigned int buffer_size) { int status = -1; /* "User" buffer that we read samples into and do work on, and its * associated size, in units of samples. Recall that for the * SC16Q11 format (native to the ADCs), one sample = two int16_t values. * * When using the bladerf_sync_* functions, the buffer size isn't * restricted to multiples of any particular size. * * The value for `num_samples` has no major restrictions here, while the * `buffer_size` below must be a multiple of 1024. */ int16_t *samples; /* These items configure the underlying asynch stream used by the the sync * interface. The "buffer" here refers to those used internally by worker * threads, not the `samples` buffer above. */ const unsigned int num_buffers = 16; const unsigned int num_transfers = 8; const unsigned int timeout_ms = 1000; samples = malloc(num_samples * 2 * sizeof(int16_t)); if (samples == NULL) { perror("malloc"); goto error; } /** [sync_config] */ /* Configure the device's RX for use with the sync interface. * SC16 Q11 samples *with* metadata are used. */ status = bladerf_sync_config(dev, channel_layout, format, num_buffers, buffer_size, num_transfers, timeout_ms); if (status != 0) { fprintf(stderr, "Failed to configure RX sync interface: %s\n", bladerf_strerror(status)); goto error; } /** [sync_config] */ /* We must always enable the RX front end *after* calling * bladerf_sync_config(), and *before* attempting to RX samples via * bladerf_sync_rx(). */ status = bladerf_enable_module(dev, BLADERF_CHANNEL_RX(0), true); if (status != 0) { fprintf(stderr, "Failed to enable RX(0): %s\n", bladerf_strerror(status)); goto error; } if (channel_layout == BLADERF_RX_X2) { status = bladerf_enable_module(dev, BLADERF_CHANNEL_RX(1), true); if (status != 0) { fprintf(stderr, "Failed to enable RX(1): %s\n", bladerf_strerror(status)); goto error; } } status = 0; error: if (status != 0) { free(samples); samples = NULL; } return samples; } void deinit(struct bladerf *dev, int16_t *samples) { printf("\nDeinitalizing device.\n"); /* Disable RX, shutting down our underlying RX stream */ int status = bladerf_enable_module(dev, BLADERF_RX, false); if (status != 0) { fprintf(stderr, "Failed to disable RX: %s\n", bladerf_strerror(status)); } /* Deinitialize and free resources */ free(samples); bladerf_close(dev); } /** [rx_meta_now_example] */ int sync_rx_meta_now_example(struct bladerf *dev, int16_t *samples, unsigned int samples_len, unsigned int rx_count, unsigned int timeout_ms) { int status = 0; struct bladerf_metadata meta; unsigned int i; /* Perform a read immediately, and have the bladerf_sync_rx function * provide the timestamp of the read samples */ memset(&meta, 0, sizeof(meta)); meta.flags = BLADERF_META_FLAG_RX_NOW; /* Receive samples and do work on them */ for (i = 0; i < rx_count && status == 0; i++) { status = bladerf_sync_rx(dev, samples, samples_len, &meta, timeout_ms); if (status != 0) { fprintf(stderr, "RX \"now\" failed: %s\n\n", bladerf_strerror(status)); } else if (meta.status & BLADERF_META_STATUS_OVERRUN) { fprintf(stderr, "Overrun detected. %u valid samples were read.\n", meta.actual_count); } else { printf("RX'd %u samples at t=0x%016" PRIx64 "\n", meta.actual_count, meta.timestamp); fflush(stdout); /* ... Do work on samples here... * * status = process_samples(samples, samples_len); */ } } return status; } /** [rx_meta_now_example] */ /** [rx_meta_sched_example] */ int sync_rx_meta_sched_example(struct bladerf *dev, int16_t *samples, unsigned int samples_len, unsigned int rx_count, unsigned int samplerate, unsigned int timeout_ms) { int status; struct bladerf_metadata meta; unsigned int i; /* 150 ms timestamp increment */ const uint64_t ts_inc_150ms = ((uint64_t)samplerate) * 150 / 1000; /* 1 ms timestamp increment */ const uint64_t ts_inc_1ms = samplerate / 1000; memset(&meta, 0, sizeof(meta)); /* Perform scheduled RXs by having meta.timestamp set appropriately * and ensuring the BLADERF_META_FLAG_RX_NOW flag is cleared. */ meta.flags = 0; /* Retrieve the current timestamp */ status = bladerf_get_timestamp(dev, BLADERF_RX, &meta.timestamp); if (status != 0) { fprintf(stderr, "Failed to get current RX timestamp: %s\n", bladerf_strerror(status)); } else { printf("Current RX timestamp: 0x%016" PRIx64 "\n", meta.timestamp); } /* Schedule first RX to be 150 ms in the future */ meta.timestamp += ts_inc_150ms; /* Receive samples and do work on them */ for (i = 0; i < rx_count && status == 0; i++) { status = bladerf_sync_rx(dev, samples, samples_len, &meta, 2 * timeout_ms); if (status != 0) { fprintf(stderr, "Scheduled RX failed: %s\n\n", bladerf_strerror(status)); } else if (meta.status & BLADERF_META_STATUS_OVERRUN) { fprintf(stderr, "Overrun detected in scheduled RX. " "%u valid samples were read.\n\n", meta.actual_count); } else { printf("RX'd %u samples at t=0x%016" PRIx64 "\n", meta.actual_count, meta.timestamp); fflush(stdout); /* ... Process samples here ... */ /* Schedule the next RX to be 1 ms after the end of the samples we * just processed */ meta.timestamp += samples_len + ts_inc_1ms; } } return status; } /** [rx_meta_sched_example] */ static struct option const long_options[] = { { "device", required_argument, NULL, 'd' }, { "bitmode", required_argument, NULL, 'b' }, { "buflen", required_argument, NULL, 'l' }, { "mimo", no_argument, NULL, 'm' }, { "numsamples", required_argument, NULL, 'n' }, { "rxcount", required_argument, NULL, 'c' }, { "verbosity", required_argument, 0, 'v' }, { "help", no_argument, NULL, 'h' }, { NULL, 0, NULL, 0 }, }; static void usage(const char *argv0) { printf("Usage: %s [options]\n", argv0); printf(" -d, --device Specify device to open.\n"); printf(" -b, --bitmode Specify 16bit or 8bit mode\n"); printf(" <16bit|16> (default)\n"); printf(" <8bit|8>\n"); printf(" -l, --buflen Buffer Size\n"); printf(" -m, --mimo Enable MIMO\n"); printf(" -n, --numsamples Specify Number of samples\n"); printf(" -c, --rxcount Specify RX sync iterations\n"); printf(" -v, --verbosity Set test verbosity\n"); printf(" -h, --help Show this text.\n"); } int main(int argc, char *argv[]) { int status = -1; struct bladerf *dev = NULL; const char *devstr = NULL; int16_t *samples = NULL; bladerf_channel_layout channel_layout = BLADERF_RX_X1; bladerf_format fmt = BLADERF_FORMAT_SC16_Q11_META; unsigned int num_samples = 4096; unsigned int rx_count = 15; unsigned int buffer_size = 4096; const unsigned int timeout_ms = 2500; bladerf_log_level lvl = BLADERF_LOG_LEVEL_SILENT; bladerf_log_set_verbosity(lvl); bool ok; int opt = 0; int opt_ind = 0; while (opt != -1) { opt = getopt_long(argc, argv, "d:b:l:mn:c:v:h", long_options, &opt_ind); switch (opt) { case 'd': devstr = optarg; break; case 'b': if (strcmp(optarg, "16bit") == 0 || strcmp(optarg, "16") == 0) { fmt = BLADERF_FORMAT_SC16_Q11_META; } else if (strcmp(optarg, "8bit") == 0 || strcmp(optarg, "8") == 0) { fmt = BLADERF_FORMAT_SC8_Q7_META; } else { printf("Unknown bitmode: %s\n", optarg); return -1; } break; case 'l': buffer_size = str2int(optarg, 1, INT_MAX, &ok); if (!ok) { printf("Buffer size invalid: %s\n", optarg); return -1; } break; case 'm': channel_layout = BLADERF_RX_X2; break; case 'n': num_samples = str2int(optarg, 1, INT_MAX, &ok); if (!ok) { printf("Number of samples not valid: %s\n", optarg); return -1; } break; case 'c': rx_count = str2int(optarg, 1, INT_MAX, &ok); if (!ok) { printf("RX count not valid: %s\n", optarg); return -1; } break; case 'v': lvl = str2loglevel(optarg, &ok); if (!ok) { log_error("Invalid log level provided: %s\n", optarg); return -1; } else { bladerf_log_set_verbosity(lvl); } break; case 'h': usage(argv[0]); return 0; default: break; } } dev = example_init(devstr); printf("Format: "); if (fmt == BLADERF_FORMAT_SC16_Q11_META) printf("SC16_Q11_META\n"); else printf("SC8_Q7_META\n"); printf("RX Count: %i\n", rx_count); printf("Mimo: %s\n", (channel_layout == BLADERF_RX_X2) ? "Enabled" : "Disabled"); printf("Buffer Size: %i\n", buffer_size); if (dev) { samples = init(dev, num_samples, fmt, channel_layout, buffer_size); if (samples != NULL) { printf("\nRunning RX meta \"now\" example...\n"); status = sync_rx_meta_now_example(dev, samples, num_samples, rx_count, timeout_ms); if (status == 0) { printf("\nRunning RX meta \"scheduled\" example...\n"); status = sync_rx_meta_sched_example( dev, samples, num_samples, rx_count, EXAMPLE_SAMPLERATE, timeout_ms); } } deinit(dev, samples); } return status; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_scheduled_retune/000077500000000000000000000000001457144405000255305ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_scheduled_retune/CMakeLists.txt000066400000000000000000000020361457144405000302710ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.5) project(libbladeRF_test_scheduled_retune C) include_directories(${libbladeRF_SOURCE_DIR}/include) set(INCLUDES ${BLADERF_HOST_COMMON_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/../common/include ) if(MSVC) set(INCLUDES ${INCLUDES} ${MSVC_C99_INCLUDES}) endif() set(LIBS libbladerf_shared) if(MSVC) find_package(LibPThreadsWin32 REQUIRED) set(INCLUDES ${INCLUDES} ${LIBPTHREADSWIN32_INCLUDE_DIRS}) set(LIBS ${LIBS} ${LIBPTHREADSWIN32_LIBRARIES}) else(MSVC) find_package(Threads REQUIRED) set(LIBS ${LIBS} ${CMAKE_THREAD_LIBS_INIT}) endif(MSVC) set(SRC src/main.c src/hop_set.c ../common/src/test_common.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/devcfg.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/conversions.c ) if(MSVC) set(SRC ${SRC} ${BLADERF_HOST_COMMON_SOURCE_DIR}/windows/getopt_long.c ) endif(MSVC) include_directories(${INCLUDES}) add_executable(libbladeRF_test_scheduled_retune ${SRC}) target_link_libraries(libbladeRF_test_scheduled_retune ${LIBS}) bladeRF-2024.05/host/libraries/libbladeRF_test/test_scheduled_retune/src/000077500000000000000000000000001457144405000263175ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_scheduled_retune/src/hop_set.c000066400000000000000000000201761457144405000301320ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include #include #include "hop_set.h" #include "conversions.h" #define INC 16 static const struct numeric_suffix freq_suffix[] = { { FIELD_INIT(.suffix, "k"), FIELD_INIT(.multiplier, 1000) }, { FIELD_INIT(.suffix, "K"), FIELD_INIT(.multiplier, 1000) }, { FIELD_INIT(.suffix, "m"), FIELD_INIT(.multiplier, 1000 * 1000) }, { FIELD_INIT(.suffix, "M"), FIELD_INIT(.multiplier, 1000 * 1000) }, { FIELD_INIT(.suffix, "g"), FIELD_INIT(.multiplier, 1000 * 1000 * 1000) }, { FIELD_INIT(.suffix, "G"), FIELD_INIT(.multiplier, 1000 * 1000 * 1000) }, }; static const size_t freq_suffix_count = sizeof(freq_suffix) / sizeof(freq_suffix[0]); static inline char * strip_chars(char *str) { size_t i; size_t len = strlen(str); for (i = 0; i < len; i++) { switch (str[i]) { case '\n': case '\t': case ' ': case ',': case ':': case ';': str[i] = '\0'; return str; } } return str; } /** * @brief Generates a hop file in CSV format * * @param filename Desired file name * @param num_frequencies Number of desired frequencies * * @return int 0 on success or -1 on failure */ int generate_hop_csv(const char* filename, const int num_frequencies) { int status = 0; const bladerf_frequency startFrequency = 900000000; const bladerf_frequency endFrequency = 930000000; FILE *file = fopen(filename, "w"); if (file == NULL) { printf("Error opening file for write.\n"); return -1; } int step = (endFrequency - startFrequency) / (num_frequencies - 1); for (int i = 0; i < num_frequencies; i++) { int frequency = startFrequency + i * step; fprintf(file, "%d\n", frequency); } fprintf(file, "\n"); fclose(file); return status; } struct hop_set * hop_set_load(const char *filename) { int status = -1; struct hop_set *h = NULL; FILE *in = NULL; size_t actual_count = INC; char buf[81]; bool ok; in = fopen(filename, "r"); if (in == NULL) { fprintf(stderr, "Failed to open provided %s: %s\n", filename, strerror(errno)); fprintf(stderr, "Generating a hop set: %s\n", filename); status = generate_hop_csv(filename, 10); if (status != 0) { fprintf(stderr, "Failed to create hop file %s: %s\n", filename, strerror(errno)); return NULL; } in = fopen(filename, "r"); } h = malloc(sizeof(h[0])); if (h == NULL) { goto out; } h->params = calloc(actual_count, sizeof(h->params[0])); if (h->params == NULL) { goto out; } h->count = 0; h->idx = 0; while (fgets(buf, sizeof(buf), in) != NULL) { if (h->count >= actual_count) { struct hop_params *tmp = realloc(h->params, (h->count + INC) * sizeof(h->params[0])); if (tmp == NULL) { perror("realloc"); goto out; } actual_count += INC; h->params = tmp; } strip_chars(buf); if (strlen(buf) > 0) { h->params[h->count].f = str2uint_suffix(buf, BLADERF_FREQUENCY_MIN, BLADERF_FREQUENCY_MAX, freq_suffix, freq_suffix_count, &ok); if (!ok) { fprintf(stderr, "Invalid frequency value: %s\n", buf); goto out; } h->count++; } } status = 0; out: fclose(in); if (status != 0) { hop_set_free(h); h = NULL; } return h; } int hop_set_load_quick_tunes(struct bladerf *dev, bladerf_module m, struct hop_set *h) { int status; size_t i; for (i = 0; i < h->count; i++) { status = bladerf_set_frequency(dev, m, h->params[i].f); if (status != 0) { fprintf(stderr, "Failed to set frequency: %s\n", bladerf_strerror(status)); return status; } status = bladerf_get_quick_tune(dev, m, &h->params[i].qt); if (status != 0) { fprintf(stderr, "Failed to get quick tune parameters: %s\n", bladerf_strerror(status)); return status; } } return 0; } unsigned int hop_set_next(struct hop_set *h, struct hop_params *p_usr) { struct hop_params *p = &h->params[h->idx]; if (p_usr != NULL) { memcpy(p_usr, p, sizeof(p[0])); } h->idx = (h->idx + 1) % h->count; return p->f; } void hop_set_free(struct hop_set *h) { if (h != NULL) { free(h->params); free(h); } } /* Exercises this hop_set interface */ #ifdef HOP_SET_TEST int main(int argc, char *argv[]) { int status = 0; unsigned int i; struct bladerf *dev = NULL; struct hop_set *h = NULL; const char *dev_str = NULL; const char *board_name = NULL; bool have_quick_tune = false; if (argc < 2) { fprintf(stderr, "Usage: %s [device]\n", argv[0]); return 1; } if (argc >= 3) { dev_str = argv[2]; } h = hop_set_load(argv[1]); if (h == NULL) { fprintf(stderr, "Could not load hop set from %s.\n", argv[1]); return 1; } status = bladerf_open(&dev, dev_str); if (status != 0) { if (status == BLADERF_ERR_NODEV) { printf("No bladeRF found. Not fetching quick tune params.\n"); } else { fprintf(stderr, "Failed to open device: %s\n", bladerf_strerror(status)); goto out; } } else { board_name = bladerf_get_board_name(dev); status = hop_set_load_quick_tunes(dev, BLADERF_MODULE_RX, h); if (status != 0) { goto out; } else { have_quick_tune = true; } } printf("Loaded %zd entries.\n", h->count); /* Wrap around once to verify hop_set_next() doesn't roll out of bounds */ for (i = 0; i < 2 * h->count; i++) { if (have_quick_tune) { struct hop_params p; hop_set_next(h, &p); if (strcasecmp(board_name, "bladerf1") == 0) { printf("f=%-10u nint=%-6u nfrac=%-8u flags=0x%02x vcocap=%u\n", p.f, p.qt.nint, p.qt.nfrac, p.qt.flags, p.qt.vcocap); } else if (strcasecmp(board_name, "bladerf2") == 0) { printf(" f=%-10u nios_profile=%-8u rffe_profile=%-8u\n", p.f, p.qt.nios_profile, p.qt.rffe_profile); } } else { printf("f=%u\n", hop_set_next(h, NULL)); } } out: bladerf_close(dev); hop_set_free(h); return status; } #endif bladeRF-2024.05/host/libraries/libbladeRF_test/test_scheduled_retune/src/hop_set.h000066400000000000000000000054531457144405000301400ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef HOP_SET_H_ #define HOP_SET_H_ #include #include struct hop_params { unsigned int f; /* 32-bit frequency, in Hz */ struct bladerf_quick_tune qt; /* Quick tune parameters */ }; struct hop_set { size_t idx; /* Current index into `hops` */ size_t count; /* Number of hop entries */ struct hop_params *params; }; /** * Load a hop set from the specified file. The file should contain a list * of frequencies, with one item per line. * * @param filename File to load hop set from * * @return Hop set on success, NULL on failure */ struct hop_set * hop_set_load(const char *filename); /** * Load the quick tune parameters for all the entries in a hop set * * @param dev Handle to bladeRF device * @param m Module to retune in order to find the desired quick tune * parameters. * @param h Hop set * * @return 0 on success, BLADERF_ERR_* value on failure */ int hop_set_load_quick_tunes(struct bladerf *dev, bladerf_module m, struct hop_set *h); /** * Get the next entry in the hop set table and advance the hop index * * @param[in] h Hop set * @param[out] p If non-NULL, the hop's parameters, including quick tune * information, is written this address. * * @return The frequency (Hz) of the next hop set entry */ unsigned int hop_set_next(struct hop_set *h, struct hop_params *p); /** * Deallocate the specified hop set * * @param h Hop set */ void hop_set_free(struct hop_set *h); #endif bladeRF-2024.05/host/libraries/libbladeRF_test/test_scheduled_retune/src/main.c000066400000000000000000000246751457144405000274250ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ /* * This program exercises the scheduled retune functionality added in * FPGA v0.2.0. * * When configured for TX, it transmits a tone for 1ms every 10 ms. During the * "off time" the device is scheduled to retune to a different frequency, * per the list of frequencies provided to this program. * * When configured for RX, this program reads samples to a samples.bin file. * * The "hop set" file should be a newline-delimited list of frequencies. * The M or G suffixes may be used, as well as scientific notation. */ #include #include #include #include #include #include #include "test_common.h" #include "devcfg.h" #include "hop_set.h" #define VERBOSITY BLADERF_LOG_LEVEL_INFO #define TIMEOUT_MS 2500 #define ITERATIONS 500 #define SAMPLE_RATE 5000000 #define BANDWIDTH 5000000 #define NUM_SAMPLES 2000 #define TS_INC 50000 #define RETUNE_INC (NUM_SAMPLES + (TS_INC - NUM_SAMPLES) / 10) #define SCHEDULE_AHEAD 4 int schedule_retune(struct bladerf *dev, bladerf_module m, struct hop_set *hops, bool quick_tune, uint64_t *hop_ts) { int status; if (quick_tune) { struct hop_params p; hop_set_next(hops, &p); status = bladerf_schedule_retune(dev, m, *hop_ts, 0, &p.qt); } else { unsigned int freq = hop_set_next(hops, NULL); status = bladerf_schedule_retune(dev, m, *hop_ts, freq, NULL); } if (status == 0) { *hop_ts += TS_INC; } return status; } int run_test(struct bladerf *dev, bladerf_module module, struct hop_set *hops, bool quick_tune) { int status = -1; int16_t *samples = NULL; struct bladerf_metadata meta; unsigned int i; uint64_t retune_ts; FILE *out = NULL; memset(&meta, 0, sizeof(meta)); samples = calloc(2 * NUM_SAMPLES, sizeof(samples[0])); if (samples == NULL) { perror("malloc"); return -1; } if (module == BLADERF_MODULE_TX) { /* Set IQ values to ~ sqrt(2)/2 */ for (i = 0; i < (2 * NUM_SAMPLES); i += 2) { samples[i] = samples[i+1] = 1448; } } else { out = fopen("samples.bin", "wb"); if (out == NULL) { perror("fopen"); status = -1; goto out; } } status = bladerf_get_timestamp(dev, module, &meta.timestamp); if (status != 0) { fprintf(stderr, "Failed to get initial timestamp: %s\n", bladerf_strerror(status)); goto out; } /* Add some initial startup delay */ meta.timestamp += (SAMPLE_RATE / 50); if (module == BLADERF_MODULE_TX) { meta.flags = BLADERF_META_FLAG_TX_BURST_START | BLADERF_META_FLAG_TX_BURST_END; } else { meta.flags = 0; } retune_ts = meta.timestamp + RETUNE_INC; /* Set initial frequency */ status = bladerf_set_frequency(dev, module, hop_set_next(hops, NULL)); if (status != 0) { fprintf(stderr, "Failed to set initial frequency: %s\n", bladerf_strerror(status)); goto out; } /* Schedule first N hops */ for (i = 0; i < SCHEDULE_AHEAD; i++) { status = schedule_retune(dev, module, hops, quick_tune, &retune_ts); if (status != 0) { fprintf(stderr, "Failed to schedule initial retune #%u: %s\n", i, bladerf_strerror(status)); goto out; } } for (i = 0; i < ITERATIONS; i++) { if (module == BLADERF_MODULE_TX) { status = bladerf_sync_tx(dev, samples, NUM_SAMPLES, &meta, TIMEOUT_MS); if (status != 0) { fprintf(stderr, "Failed to TX @ iteration %u: %s\n", i + 1, bladerf_strerror(status)); goto out; } } else { size_t n_written; status = bladerf_sync_rx(dev, samples, NUM_SAMPLES, &meta, TIMEOUT_MS); if (status != 0) { fprintf(stderr, "Failed to RX @ iteration %u: %s\n", i + 1, bladerf_strerror(status)); goto out; } n_written = fwrite(samples, 2 * sizeof(int16_t), NUM_SAMPLES, out); if (n_written != NUM_SAMPLES) { fprintf(stderr, "File write of samples failed.\n"); status = -1; goto out; } } /* Update timestamp for next transmission */ meta.timestamp += TS_INC; /* Schedule an additional retune */ status = schedule_retune(dev, module, hops, quick_tune, &retune_ts); if (status == BLADERF_ERR_QUEUE_FULL) { printf("Retune queue full @ iteration %u. Trying again next " "iteration.\n", i); } else if (status != 0) { fprintf(stderr, "Failed to schedule retune @ %"PRIu64": %s\n", meta.timestamp + RETUNE_INC, bladerf_strerror(status)); goto out; } } /* If transmitting, wait until we read back a timestamp that is in the * future past our scheduled transmissions*/ if (module == BLADERF_MODULE_TX) { fprintf(stderr, "Waiting for transmission to complete...\n"); status = wait_for_timestamp(dev, BLADERF_MODULE_TX, meta.timestamp, 2500); if (status == BLADERF_ERR_TIMEOUT) { fprintf(stderr, "Wait timed out.\n"); } else if (status != 0) { fprintf(stderr, "Wait failed: %s\n", bladerf_strerror(status)); } else { fprintf(stderr, "Done waiting.\n"); } } out: if (out != NULL) { fclose(out); } free(samples); return status; } int main(int argc, char *argv[]) { int status, disable_status; struct bladerf *dev = NULL; const char *dev_str = NULL; const char *hop_file = NULL; const char *mode = NULL; const char *module_str = NULL; const char *board_name = NULL; struct hop_set *hops = NULL; struct devcfg config; bladerf_module module; bool quick_tune; size_t i; if (argc < 3) { fprintf(stderr, "Usage: %s [device str] \n", argv[0]); return 1; } else if (argc >= 5) { dev_str = argv[1]; module_str = argv[2]; hop_file = argv[3]; mode = argv[4]; } else { module_str = argv[1]; hop_file = argv[2]; mode = argv[3]; } if (!strcasecmp(module_str, "rx")) { module = BLADERF_MODULE_RX; } else if (!strcasecmp(module_str, "tx")) { module = BLADERF_MODULE_TX; } else { fprintf(stderr, "Invalid module: %s\n", module_str); return 1; } if (!strcasecmp(mode, "quick")) { quick_tune = true; } else if (!strcasecmp(mode, "normal")) { quick_tune = false; } else { fprintf(stderr, "Invalid tuning mode: %s\n", mode); return 1; } hops = hop_set_load(hop_file); if (hops == NULL) { return 1; } bladerf_log_set_verbosity(VERBOSITY); status = bladerf_open(&dev, dev_str); if (status != 0) { fprintf(stderr, "Unable to open device: %s\n", bladerf_strerror(status)); goto out; } board_name = bladerf_get_board_name(dev); devcfg_init(&config); config.tx_samplerate = SAMPLE_RATE; config.tx_bandwidth = BANDWIDTH; config.samples_per_buffer = 4096; config.num_buffers = 16; config.num_transfers = 8; status = devcfg_apply(dev, &config); if (status != 0) { fprintf(stderr, "Failed to configure device.\n"); goto out; } if (quick_tune) { status = hop_set_load_quick_tunes(dev, module, hops); if (status != 0) { goto out; } } printf("Hop set:\n"); for (i = 0; i < hops->count; i++) { if (quick_tune) { struct hop_params p; hop_set_next(hops, &p); if (strcasecmp(board_name, "bladerf1") == 0) { printf(" f=%-10u nint=%-6u nfrac=%-8u flags=0x%02x vcocap=%u\n", p.f, p.qt.nint, p.qt.nfrac, p.qt.flags, p.qt.vcocap); } else if (strcasecmp(board_name, "bladerf2") == 0) { printf(" f=%-10u nios_profile=%-8u rffe_profile=%-8u\n", p.f, p.qt.nios_profile, p.qt.rffe_profile); } } else { printf(" f=%u\n", hop_set_next(hops, NULL)); } } hops->idx = 0; printf("\n"); status = devcfg_perform_sync_config(dev, module, BLADERF_FORMAT_SC16_Q11_META, &config, true); if (status != 0) { goto out; } printf("Running test with %s module...\n", module == BLADERF_MODULE_RX ? "RX" : "TX"); fflush(stdout); status = run_test(dev, module, hops, quick_tune); printf("Done.\n"); fflush(stdout); disable_status = bladerf_enable_module(dev, module, false); if (disable_status != 0) { fprintf(stderr, "Failed to disable_status TX module: %s\n", bladerf_strerror(status)); goto out; } status = (status == 0) ? disable_status : status; out: bladerf_close(dev); hop_set_free(hops); return status; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_sync/000077500000000000000000000000001457144405000231625ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_sync/CMakeLists.txt000066400000000000000000000020721457144405000257230ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.5) project(libbladeRF_test_sync C) set(TEST_SYNC_INCLUDES ${libbladeRF_SOURCE_DIR}/include ${BLADERF_HOST_COMMON_INCLUDE_DIRS} ) if(MSVC) set(TEST_SYNC_INCLUDES ${TEST_SYNC_INCLUDES} ${MSVC_C99_INCLUDES}) endif() set(TEST_SYNC_LIBS libbladerf_shared) if(MSVC) find_package(LibPThreadsWin32 REQUIRED) set(TEST_SYNC_INCLUDES ${TEST_SYNC_INCLUDES} ${LIBPTHREADSWIN32_INCLUDE_DIRS}) set(TEST_SYNC_LIBS ${TEST_SYNC_LIBS} ${LIBPTHREADSWIN32_LIBRARIES}) else(MSVC) find_package(Threads REQUIRED) set(TEST_SYNC_LIBS ${TEST_SYNC_LIBS} ${CMAKE_THREAD_LIBS_INIT}) endif(MSVC) add_definitions(-DLOGGING_ENABLED=1) set(SRC src/main.c src/test.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/conversions.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/log.c ) if(MSVC) set(SRC ${SRC} ${BLADERF_HOST_COMMON_SOURCE_DIR}/windows/getopt_long.c ) endif() include_directories(${TEST_SYNC_INCLUDES}) add_executable(libbladeRF_test_sync ${SRC}) target_link_libraries(libbladeRF_test_sync ${TEST_SYNC_LIBS}) bladeRF-2024.05/host/libraries/libbladeRF_test/test_sync/src/000077500000000000000000000000001457144405000237515ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_sync/src/main.c000066400000000000000000000317161457144405000250510ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include #include #include #include #include #include "conversions.h" #include "log.h" #include "test.h" #define OPTSTR "hd:s:f:l:i:o:r:c:b:X:B:C:T:" const struct option long_options[] = { { "help", no_argument, 0, 'h' }, /* Device configuration */ { "device", required_argument, 0, 'd' }, { "samplerate", required_argument, 0, 's' }, { "frequency", required_argument, 0, 'f' }, { "loopback", required_argument, 0, 'l' }, /* Test configuration */ { "input", required_argument, 0, 'i' }, { "output", required_argument, 0, 'o' }, { "tx-repetitions", required_argument, 0, 'r' }, { "rx-count", required_argument, 0, 'c' }, { "block-size", required_argument, 0, 'b' }, /* Stream configuration */ { "num-xfers", required_argument, 0, 'X' }, { "buffer-size", required_argument, 0, 'B' }, { "buffer-count", required_argument, 0, 'C' }, { "timeout", required_argument, 0, 'T' }, /* Verbosity options */ { "verbosity", required_argument, 0, 1, }, { "lib-verbosity", required_argument, 0, 2, }, { 0, 0, 0, 0 }, }; const struct numeric_suffix freq_suffixes[] = { { "K", 1000 }, { "kHz", 1000 }, { "M", 1000000 }, { "MHz", 1000000 }, { "G", 1000000000 }, { "GHz", 1000000000 }, }; const unsigned int num_freq_suffixes = sizeof(freq_suffixes) / sizeof(freq_suffixes[0]); const struct numeric_suffix size_suffixes[] = { { "K", 1024 }, { "M", 1024 * 1024 }, { "G", 1024 * 1024 * 1024 }, }; const unsigned int num_size_suffixes = sizeof(size_suffixes) / sizeof(size_suffixes[0]); const struct numeric_suffix count_suffixes[] = { { "K", 1000 }, { "M", 1000000 }, { "G", 1000000000 }, }; const unsigned int num_count_suffixes = sizeof(count_suffixes) / sizeof(count_suffixes[0]); static void print_usage(const char *argv0) { printf("Usage: %s [options]\n", argv0); printf("libbladeRF_sync_test: RX/TX samples to/from specified files.\n"); printf("\n"); printf("Device configuration options:\n"); printf(" -d. --device Use the specified device. By default,\n"); printf(" any device found will be used.\n"); printf(" -f, --frequency Set the specified frequency. Default = %u.\n", DEFAULT_FREQUENCY); printf(" -s, --samplerate Set the specified sample rate. Default = %u.\n", DEFAULT_SAMPLERATE); printf(" -l, --loopback Operate in the specified loopback mode. Options are:\n"); printf(" bb_txlpf_rxvga2, bb_txlpf_rxlpf,\n"); printf(" bb_txvga1_rxvga1, bb_txvga1_rxlpf,\n"); printf(" rf_lna1, rf_lna2, rf_lna2, none\n"); printf(" The default is 'none'.\n"); printf("\n"); printf("Test configuration options:\n"); printf(" -i, --input File to transmit samples from.\n"); printf(" -o, --output File to receive samples to.\n"); printf(" -r, --tx-repetitions # of times to repeat input file. Default = %u\n", DEFAULT_TX_REPETITIONS); printf(" -c, --rx-count # of samples to receive. Defauilt = %u.\n", DEFAULT_RX_COUNT); printf(" -b, --block-size # samples to RX/TX per sync call. Default = %u.\n", DEFAULT_BLOCK_SIZE); printf("\n"); printf("Stream configuration options:\n"); printf(" -X, --num-xfers # in-flight transfers. Default = %u.\n", DEFAULT_STREAM_XFERS); printf(" -B, --buffer-size # samples per stream buffer. Default = %u.\n", DEFAULT_STREAM_SAMPLES); printf(" -C, --buffer-count # of stream buffers. Default = %u.\n", DEFAULT_STREAM_BUFFERS); printf(" -T, --timeout Stream timeout, in ms. Default = %u.\n", DEFAULT_STREAM_TIMEOUT); printf("\n"); printf("Misc options:\n"); printf(" -h, --help Show this help text\n"); printf(" --verbosity Set test verbosity (Default: warning)\n"); printf(" --sync-verbosity Set libbladeRF_sync verbosity (Default: warning)\n"); printf(" --lib-verbosity Set libbladeRF verbosity (Default: warning)\n"); printf("\n"); printf("Notes:\n"); printf(" The provided files must contain binary SC16 Q11 samples.\n"); printf("\n"); printf(" The -f and -s options are applied to both RX and TX modules.\n"); printf("\n"); printf(" When transmitting, the input file size (in samples) should be a multiple\n"); printf(" of , and at least 1 block. Otherwise, samples will be truncated.\n"); printf("\n"); } int handle_cmdline(int argc, char *argv[], struct test_params *p) { int c; int idx; bool ok; bladerf_log_level level; test_init_params(p); while ((c = getopt_long(argc, argv, OPTSTR, long_options, &idx)) >= 0) { switch (c) { case 1: level = str2loglevel(optarg, &ok); if (!ok) { log_error("Invalid log level provided: %s\n", optarg); return -1; } else { log_set_verbosity(level); } break; case 2: level = str2loglevel(optarg, &ok); if (!ok) { log_error("Invalid log level provided: %s\n", optarg); return -1; } else { bladerf_log_set_verbosity(level); } break; case 'h': return 1; case 'd': if (p->device_str != NULL) { log_error("Device was already specified.\n"); return -1; } p->device_str = strdup(optarg); if (p->device_str == NULL) { perror("strdup"); return -1; } break; case 's': p->samplerate = str2uint_suffix(optarg, BLADERF_SAMPLERATE_MIN, BLADERF_SAMPLERATE_REC_MAX, freq_suffixes, num_freq_suffixes, &ok); if (!ok) { log_error("Invalid sample rate: %s\n", optarg); return -1; } break; case 'f': p->frequency = str2uint_suffix(optarg, BLADERF_FREQUENCY_MIN, BLADERF_FREQUENCY_MAX, freq_suffixes, num_freq_suffixes, &ok); if (!ok) { log_error("Invalid frequency: %s\n", optarg); return -1; } break; case 'l': if (str2loopback(optarg, &p->loopback) != 0) { log_error("Invalid loopback mode: %s\n", optarg); return -1; } break; case 'i': if (p->in_file) { log_error("Input file already provided.\n"); return -1; } p->in_file = fopen(optarg, "rb"); if (p->in_file == NULL) { log_error("Failed to open input file - %s\n", strerror(errno)); return -1; } break; case 'o': if (p->out_file) { log_error("Output file already provided.\n"); return -1; } p->out_file = fopen(optarg, "wb"); if (p->out_file == NULL) { log_error("Failed to open output file - %s\n", strerror(errno)); return -1; } break; case 'r': p->tx_repetitions = str2uint_suffix(optarg, 1, UINT_MAX, count_suffixes, num_count_suffixes, &ok); if (!ok) { log_error("Invalid TX repetition value: %s\n", optarg); return -1; } break; case 'c': p->rx_count = str2uint_suffix(optarg, 1, UINT_MAX, count_suffixes, num_count_suffixes, &ok); if (!ok) { log_error("Invalid RX count: %s\n", optarg); return -1; } break; case 'b': p->block_size = str2uint_suffix(optarg, 1, UINT_MAX, size_suffixes, num_size_suffixes, &ok); if (!ok) { log_error("Invalid block size: %s\n", optarg); return -1; } break; case 'X': p->num_xfers = str2uint(optarg, 1, UINT_MAX, &ok); if (!ok) { log_error("Invalid stream transfer count: %s\n", optarg); return -1; } break; case 'B': p->stream_buffer_size = str2uint(optarg, 1, UINT_MAX, &ok); if (!ok) { log_error("Invalid stream buffer size: %s\n", optarg); return -1; } break; case 'C': p->stream_buffer_count = str2uint(optarg, 1, UINT_MAX, &ok); if (!ok) { log_error("Invalid stream buffer count: %s\n", optarg); return -1; } break; case 'T': p->timeout_ms = str2uint(optarg, 0, UINT_MAX, &ok); if (!ok) { log_error("Invalid stream timeout: %s\n", optarg); return -1; } break; } } if (p->in_file == NULL && p->out_file == NULL) { log_error("An input or output file is required.\n"); return -1; } if (p->frequency == 0) { p->frequency = DEFAULT_FREQUENCY; } if (p->samplerate == 0) { p->samplerate = DEFAULT_SAMPLERATE; } if (p->tx_repetitions == 0) { p->tx_repetitions = DEFAULT_TX_REPETITIONS; } if (p->rx_count == 0) { p->rx_count = DEFAULT_RX_COUNT; } if (p->block_size == 0) { p->block_size = DEFAULT_BLOCK_SIZE; } return 0; } int main(int argc, char *argv[]) { int status; struct test_params p; status = handle_cmdline(argc, argv, &p); if (status == 0) { status = test_run(&p); } else if (status > 0) { print_usage(argv[0]); status = 0; } if (p.in_file) { fclose(p.in_file); } if (p.out_file) { fclose(p.out_file); } return status; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_sync/src/test.c000066400000000000000000000267241457144405000251070ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include #include #include #include #include #include #include "rel_assert.h" #include "test.h" #include "log.h" #include "minmax.h" static struct task_args { struct bladerf *dev; struct test_params *p; pthread_t thread; int status; bool quit; } rx_args, tx_args; #if BLADERF_OS_WINDOWS static void ctrlc_handler(int signal) { rx_args.quit = true; tx_args.quit = true; } static void init_signal_handling() { void *sigint_prev, *sigterm_prev; sigint_prev = signal(SIGINT, ctrlc_handler); sigterm_prev = signal(SIGTERM, ctrlc_handler); if (sigint_prev == SIG_ERR || sigterm_prev == SIG_ERR) { fprintf(stderr, "Warning: Failed to initialize Ctrl-C " "handlers for rx/tx wait cmd."); } } #else static void ctrlc_handler(int signal, siginfo_t *info, void *unused) { rx_args.quit = true; tx_args.quit = true; } static void init_signal_handling() { struct sigaction sigact; sigemptyset(&sigact.sa_mask); sigact.sa_sigaction = ctrlc_handler; sigact.sa_flags = SA_SIGINFO; sigaction(SIGINT, &sigact, NULL); sigaction(SIGTERM, &sigact, NULL); } #endif void test_init_params(struct test_params *p) { memset(p, 0, sizeof(*p)); p->loopback = BLADERF_LB_NONE; p->rx_count = DEFAULT_RX_COUNT; p->block_size = DEFAULT_BLOCK_SIZE; p->num_xfers = DEFAULT_STREAM_XFERS; p->stream_buffer_count = DEFAULT_STREAM_BUFFERS; p->stream_buffer_size = DEFAULT_STREAM_SAMPLES; p->timeout_ms = DEFAULT_STREAM_TIMEOUT; } static int init_module(struct bladerf *dev, struct test_params *p, bladerf_module m) { const char *m_str = m == BLADERF_MODULE_RX ? "RX" : "TX"; int status; unsigned int samplerate_actual; uint64_t frequency_actual; status = bladerf_set_sample_rate(dev, m, p->samplerate, &samplerate_actual); if (status != 0) { log_error("Failed to set %s samplerate: %s\n", m_str, bladerf_strerror(status)); return status; } status = bladerf_set_frequency(dev, m, p->frequency); if (status != 0) { log_error("Failed to set %s frequency: %s\n", m_str, bladerf_strerror(status)); return status; } status = bladerf_get_frequency(dev, m, &frequency_actual); if (status != 0) { log_error("Failed to read back %s frequency: %s\n", m_str, bladerf_strerror(status)); return status; } log_debug("%s Frequency = %u, %s Samplerate = %u\n", m_str, frequency_actual, m_str, samplerate_actual); return status; } static struct bladerf * initialize_device(struct test_params *p) { struct bladerf *dev; int status = bladerf_open(&dev, p->device_str); int fpga_loaded; if (status != 0) { log_error("Failed to open device: %s\n", bladerf_strerror(status)); return NULL; } fpga_loaded = bladerf_is_fpga_configured(dev); if (fpga_loaded < 0) { log_error("Failed to check FPGA state: %s\n", bladerf_strerror(fpga_loaded)); status = -1; goto initialize_device_out; } else if (fpga_loaded == 0) { log_error("The device's FPGA is not loaded.\n"); status = -1; goto initialize_device_out; } if (p->out_file) { status = init_module(dev, p, BLADERF_MODULE_RX); if (status != 0) { log_error("Failed to init RX module: %s\n", bladerf_strerror(status)); goto initialize_device_out; } } if (p->in_file) { status = init_module(dev, p, BLADERF_MODULE_TX); if (status != 0) { log_error("Failed to init TX module: %s\n", bladerf_strerror(status)); goto initialize_device_out; } } status = bladerf_set_loopback(dev, p->loopback); if (status != 0) { log_error("Failed to set loopback mode: %s\n", bladerf_strerror(status)); } else { log_debug("Set loopback to %d\n", p->loopback); } initialize_device_out: if (status != 0) { bladerf_close(dev); dev = NULL; } return dev; } void *rx_task(void *args) { int status; int16_t *samples; unsigned int to_rx; struct task_args *task = (struct task_args*) args; struct test_params *p = task->p; bool done = false; size_t n; samples = (int16_t *)calloc(p->block_size, 2 * sizeof(samples[0])); if (samples == NULL) { perror("calloc"); return NULL; } status = bladerf_sync_config(task->dev, BLADERF_MODULE_RX, BLADERF_FORMAT_SC16_Q11, p->stream_buffer_count, p->stream_buffer_size, p->num_xfers, p->timeout_ms); if (status != 0) { log_error("Failed to initialize RX sync handle: %s\n", bladerf_strerror(status)); goto rx_task_out; } status = bladerf_enable_module(task->dev, BLADERF_MODULE_RX, true); if (status != 0) { log_error("Failed to enable RX module: %s\n", bladerf_strerror(status)); goto rx_task_out; } /* This assumption is made with the below cast */ assert(p->block_size < UINT_MAX); while (!done && !task->quit) { to_rx = (unsigned int) u64_min(p->block_size, p->rx_count); status = bladerf_sync_rx(task->dev, samples, to_rx, NULL, SYNC_TIMEOUT_MS); if (status != 0) { log_error("RX failed: %s\n", bladerf_strerror(status)); done = true; } else { log_verbose("RX'd %llu samples.\n", (unsigned long long)to_rx); n = fwrite(samples, 2 * sizeof(samples[0]), to_rx, p->out_file); if (n != to_rx) { done = true; status = ferror(p->out_file); if (status != 0) { log_error("Failed to write RX data to file: %s\n", strerror(status)); } } else { p->rx_count -= to_rx; done = p->rx_count == 0; } } } rx_task_out: free(samples); status = bladerf_enable_module(task->dev, BLADERF_MODULE_RX, false); if (status != 0) { log_error("Failed to disable RX module: %s\n", bladerf_strerror(status)); } return NULL; } void *tx_task(void *arg) { int status; int16_t *samples; unsigned int to_tx; struct task_args *task = (struct task_args*) arg; struct test_params *p = task->p; bool done = false; samples = (int16_t *)calloc(p->block_size, 2 * sizeof(samples[0])); if (samples == NULL) { perror("calloc"); return NULL; } status = bladerf_sync_config(task->dev, BLADERF_MODULE_TX, BLADERF_FORMAT_SC16_Q11, p->stream_buffer_count, p->stream_buffer_size, p->num_xfers, p->timeout_ms); if (status != 0) { log_error("Failed to initialize RX sync handle: %s\n", bladerf_strerror(status)); goto tx_task_out; } status = bladerf_enable_module(task->dev, BLADERF_MODULE_TX, true); if (status != 0) { log_error("Failed to enable RX module: %s\n", bladerf_strerror(status)); goto tx_task_out; } while (!done && !task->quit) { to_tx = (unsigned int) fread(samples, 2 * sizeof(samples[0]), p->block_size, p->in_file); if (to_tx != 0) { status = bladerf_sync_tx(task->dev, samples, to_tx, NULL, SYNC_TIMEOUT_MS); if (status != 0) { log_error("TX failed: %s\n", bladerf_strerror(status)); done = true; } } else { if (--p->tx_repetitions != 0 && feof(p->in_file) && !ferror(p->in_file)) { if (fseek(p->in_file, 0, SEEK_SET) == -1) { perror("fseek"); done = true; } } else { done = true; } } } tx_task_out: free(samples); status = bladerf_enable_module(task->dev, BLADERF_MODULE_TX, false); if (status != 0) { log_error("Failed to disable TX module: %s\n", bladerf_strerror(status)); } return NULL; } /* For the sake of simplicity, we'll just bounce back and forth between * RX and TX when doing both. */ int test_run(struct test_params *p) { int status; struct bladerf *dev; init_signal_handling(); dev = initialize_device(p); if (dev == NULL) { return -1; } if (p->in_file != NULL) { tx_args.dev = dev; tx_args.p = p; tx_args.status = 0; tx_args.quit = false; log_debug("Starting TX task\n"); if (pthread_create(&tx_args.thread, NULL, tx_task, &tx_args) != 0) { fclose(p->in_file); p->in_file = NULL; } } if (p->out_file != NULL) { rx_args.dev = dev; rx_args.p = p; rx_args.status = 0; rx_args.quit = false; log_debug("Starting RX task\n"); if (pthread_create(&rx_args.thread, NULL, rx_task, &rx_args) != 0) { fclose(p->out_file); p->out_file = NULL; } } log_debug("Running...\n"); if (p->in_file != NULL) { pthread_join(tx_args.thread, NULL); log_debug("Joined TX task\n"); } if (p->out_file != NULL) { pthread_join(rx_args.thread, NULL); log_debug("Joined RX task\n"); } status = bladerf_set_loopback(dev, BLADERF_LB_NONE); if (status != 0) { log_error("Failed to set loopback mode to 'NONE': %s\n", bladerf_strerror(status)); } bladerf_close(dev); if (p->in_file != NULL && tx_args.status != 0) { return -1; } else if (p->out_file != NULL && rx_args.status != 0) { return -1; } else { return 0; } } bladeRF-2024.05/host/libraries/libbladeRF_test/test_sync/src/test.h000066400000000000000000000042661457144405000251110ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include /* Device config defaults */ #define DEFAULT_SAMPLERATE 1000000 #define DEFAULT_FREQUENCY 1000000000 /* Test defaults */ #define DEFAULT_TX_REPETITIONS 1 #define DEFAULT_RX_COUNT 10000000 #define DEFAULT_BLOCK_SIZE 2048 /* Stream defaults */ #define DEFAULT_STREAM_XFERS 16 #define DEFAULT_STREAM_BUFFERS 32 #define DEFAULT_STREAM_SAMPLES 8192 #define DEFAULT_STREAM_TIMEOUT 1000 #define SYNC_TIMEOUT_MS 500 struct test_params { const char *device_str; unsigned int samplerate; unsigned int frequency; bladerf_loopback loopback; FILE *in_file; FILE *out_file; unsigned int tx_repetitions; uint64_t rx_count; unsigned int block_size; /* Stream config */ unsigned int num_xfers; unsigned int stream_buffer_count; unsigned int stream_buffer_size; /* Units of samples */ unsigned int timeout_ms; }; void test_init_params(struct test_params *p); int test_run(struct test_params *p); bladeRF-2024.05/host/libraries/libbladeRF_test/test_timestamps/000077500000000000000000000000001457144405000243745ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_timestamps/CMakeLists.txt000066400000000000000000000045031457144405000271360ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.5) project(libbladeRF_test_timestamps C) include_directories(${libbladeRF_SOURCE_DIR}/include) set(INCLUDES ${BLADERF_HOST_COMMON_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/../common/include ) if(MSVC) set(INCLUDES ${INCLUDES} ${MSVC_C99_INCLUDES}) endif() set(LIBS libbladerf_shared) if(MSVC) find_package(LibPThreadsWin32 REQUIRED) set(INCLUDES ${INCLUDES} ${LIBPTHREADSWIN32_INCLUDE_DIRS}) set(LIBS ${LIBS} ${LIBPTHREADSWIN32_LIBRARIES}) else() find_package(Threads REQUIRED) set(LIBS ${LIBS} ${CMAKE_THREAD_LIBS_INIT}) endif(MSVC) set(SRC src/main.c src/test_timestamps.c src/test_rx_gaps.c src/test_rx_scheduled.c src/test_tx_onoff.c src/test_tx_onoff_nowsched.c src/test_tx_gmsk_bursts.c src/test_loopback_onoff.c src/test_loopback_onoff_zp.c src/test_loopback_onoff_rf.c src/loopback.c src/test_format_mismatch.c src/test_readback.c src/test_print_timestamps.c ../common/src/test_common.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/conversions.c ) if(MSVC) set(SRC ${SRC} ${BLADERF_HOST_COMMON_SOURCE_DIR}/windows/getopt_long.c ) endif(MSVC) include_directories(${INCLUDES}) add_executable(libbladeRF_test_timestamps ${SRC}) target_link_libraries(libbladeRF_test_timestamps ${LIBS}) set(SRC src/test_tx_pulse.c src/test_timestamps.c src/loopback.c ../common/src/test_common.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/conversions.c ) if(MSVC) set(SRC ${SRC} ${BLADERF_HOST_COMMON_SOURCE_DIR}/windows/gettimeofday.c ) endif(MSVC) add_executable(libbladeRF_test_tx_pulse ${SRC}) target_link_libraries(libbladeRF_test_tx_pulse ${LIBS}) set(SRC src/test_txrx_hwloop.c src/test_timestamps.c src/loopback.c ../common/src/test_common.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/conversions.c ) if(MSVC) set(SRC ${SRC} ${BLADERF_HOST_COMMON_SOURCE_DIR}/windows/getopt_long.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/windows/gettimeofday.c ) endif(MSVC) add_executable(libbladeRF_test_txrx_hwloop ${SRC}) target_link_libraries(libbladeRF_test_txrx_hwloop ${LIBS}) configure_file(scripts/test_txrx_hwloop.py ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libbladeRF_test_txrx_hwloop.py FILE_PERMISSIONS OWNER_EXECUTE OWNER_READ COPYONLY) bladeRF-2024.05/host/libraries/libbladeRF_test/test_timestamps/scripts/000077500000000000000000000000001457144405000260635ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_timestamps/scripts/test_txrx_hwloop.py000066400000000000000000000250511457144405000320740ustar00rootroot00000000000000#!/usr/bin/env python3 # This file is part of the bladeRF project: # http://www.github.com/nuand/bladeRF # # Copyright (C) 2023 Nuand LLC # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. import pandas as pd import matplotlib.pyplot as plt import numpy as np import scipy.stats as st import os import argparse import subprocess def close_figure(event): if event.key == 'escape': plt.close() def edge_detector(signal, rising_threshold, falling_threshold, debounce_time): state = 'low' debounce_downcount = debounce_time rising = np.zeros_like(signal, dtype=bool) falling = np.zeros_like(signal, dtype=bool) for i in range(len(signal)): if (state == 'low' and signal[i] > rising_threshold): rising[i] = True last_state = state state = 'debounce' if (state == 'debounce'): debounce_downcount -= 1 if (debounce_downcount == 0): debounce_downcount = debounce_time state = 'high' if (last_state == 'low') else 'low' if (state == 'high' and signal[i] < falling_threshold): falling[i] = True last_state = state state = 'debounce' return rising, falling ############################################################### # Initialize Parameters ############################################################### fill = 90 burst = 10e3 period = 50e3 iterations = 10 threshold = 2e6 cycles_to_debounce = 50 devarg_tx = "" devarg_rx = "" samp_rate_arg = "" devarg_verbosity = "" print_stats = False parser = argparse.ArgumentParser( description='TXRX hardware loop timestamp validation', allow_abbrev=False, add_help=True ) parser.add_argument('-f', '--fill', type=float, help='fill (%%)') parser.add_argument('-b', '--burst', type=int, help='burst length (in samples)') parser.add_argument('-sr', '--samprate', type=int, help='Sample Rate (Hz)', default=1e6) parser.add_argument('-p', '--period', type=int, help='period length (in samples)') parser.add_argument('-i', '--iterations', type=int, help='number of pulses') parser.add_argument('-t', '--threshold', type=int, help='edge count power threshold') parser.add_argument('-tx', '--txdev', type=str, help='TX device string') parser.add_argument('-rx', '--rxdev', type=str, help='RX device string') parser.add_argument('-v', '--verbosity', type=str, help='bladeRF log level', default="info") parser.add_argument('-c', '--compare', help='RF loopback compare', action="store_true", default=False) parser.add_argument('-s', '--stats', help='print edge statistics', action="store_true", default=False) args = parser.parse_args() if args.fill: fill = args.fill if args.burst: burst = args.burst if args.period: period = args.period if args.iterations: iterations = args.iterations if args.threshold: threshold = args.threshold if args.txdev: dev_tx = args.txdev devarg_tx = f"-t {dev_tx}" if args.verbosity: devarg_verbosity = f"-v {args.verbosity}" if args.rxdev: dev_rx = args.rxdev devarg_rx = f"-r {dev_rx}" if args.stats: print_stats = True if args.samprate: samp_rate_arg = f"-s {args.samprate}" threshold_spread = 1e6 rising_threshold = threshold + threshold_spread falling_threshold = threshold - threshold_spread ################################################################ # Generate Pulse ################################################################ binary_file = 'libbladeRF_test_txrx_hwloop' output_dir = os.path.dirname(os.path.abspath(__file__)) os.chdir(output_dir) proc = subprocess.run(f"./{binary_file} --fill {fill} --burst {burst} --period {period} " f"--iterations {iterations} -l {devarg_tx} {devarg_rx} {args.compare * '-c'} " f"{devarg_verbosity} {samp_rate_arg}", shell=True) if proc.returncode != 0: print("Failed to run hwloop binary") exit(1) ################################################################ # RX Data Analysis ################################################################ data = pd.read_csv('samples.csv') I = data['I'].to_numpy() Q = data['Q'].to_numpy() power = I**2 + Q**2 num_samples = range(len(I)) if args.compare == True: fig, ((ax1, ax3), (ax2, ax4), (ax5, ax6)) = plt.subplots(nrows=3, ncols=2, figsize=(16, 6)) else: fig, (ax1, ax2, ax5) = plt.subplots(nrows=3, ncols=1, figsize=(8, 6)) ax1.set_title('RX Board IQ') ax1.plot(I, label='I') ax1.plot(Q, label='Q') ax2.set_title('RX Board Power') ax2.plot(power, label='Power', color='red') positive_edge, negative_edge = edge_detector(power, rising_threshold, falling_threshold, cycles_to_debounce) pos_edge_indexes = np.argwhere(positive_edge).flatten() for i in pos_edge_indexes: ax2.plot(i, rising_threshold, 'g^', markersize=6) time_delta_pos_edges = np.diff(pos_edge_indexes) avg = np.average(time_delta_pos_edges) var = np.var(time_delta_pos_edges) dev = np.std(time_delta_pos_edges) if print_stats: print("\nTimestamp Count between Rising Edges:") print(f" Average: {avg:.2f}") print(f" Variance: {var:.2f}") print(f" Std.Dev: {dev:.2f}") print(f" Edge Count: {len(pos_edge_indexes)}") neg_edge_indexes = np.argwhere(negative_edge).flatten() for i in neg_edge_indexes: ax2.plot(i, falling_threshold, 'yv', markersize=6) time_delta_neg_edges = np.diff(neg_edge_indexes) avg = np.average(time_delta_neg_edges) var = np.var(time_delta_neg_edges) dev = np.std(time_delta_neg_edges) if print_stats: print("\nTimestamp Count between Falling Edges:") print(f" Average: {avg:.2f}") print(f" Variance:{var:.2f}") print(f" Std.Dev: {dev:.2f}") print(f" Edge Count: {len(neg_edge_indexes)}") print("\nRX Board") print(f" Predicted Timestamp: {(avg):.3f} samples, Error: {(avg-period):.3f} samples") try: fill_expected = int(burst*fill/100) fill = neg_edge_indexes - pos_edge_indexes avg = np.average(fill) var = np.var(fill) dev = np.std(fill) fill_vs_burst = 100 * avg/burst except ValueError as err: print(f"[Error] RX Board: Edge count imbalanced.\n{err}") print(err) fill = None fill_vs_burst = -1 ax5.set_title("Fill Error") ax5.set_xlabel("Error (samples)") fill_error = fill - fill_expected ax5.hist(fill_error, alpha=0.7, bins=30, color=('skyblue')) print(f" Predicted Fill: {fill_vs_burst:.2f}%, Error: {(avg-fill_expected):.2f} samples") ################################################################ # TX Loopback Compare ################################################################ if args.compare == True: data = pd.read_csv('compare.csv') I = data['I'].to_numpy() Q = data['Q'].to_numpy() power = I**2 + Q**2 num_samples = range(len(I)) ax3.set_title('TX Loopback Compare IQ') ax3.plot(I, label='I') ax3.plot(Q, label='Q') ax4.set_title('TX Loopback Compare Power') ax4.plot(power, label='Power', color='red') positive_edge, negative_edge = edge_detector(power, rising_threshold, falling_threshold, cycles_to_debounce) pos_edge_indexes = np.argwhere(positive_edge).flatten() for i in pos_edge_indexes: ax4.plot(i, rising_threshold, 'g^', markersize=6) time_delta_pos_edges = np.diff(pos_edge_indexes) avg = np.average(time_delta_pos_edges) var = np.var(time_delta_pos_edges) dev = np.std(time_delta_pos_edges) if print_stats: print("\nTimestamp Count between Rising Edges:") print(f" Average: {avg:.2f}") print(f" Variance: {var:.2f}") print(f" Std.Dev: {dev:.2f}") print(f" Edge Count: {len(pos_edge_indexes)}") neg_edge_indexes = np.argwhere(negative_edge).flatten() for i in neg_edge_indexes: ax4.plot(i, falling_threshold, 'yv', markersize=6) time_delta_neg_edges = np.diff(neg_edge_indexes) avg = np.average(time_delta_neg_edges) var = np.var(time_delta_neg_edges) dev = np.std(time_delta_neg_edges) if print_stats: print("\nTimestamp Count between Falling Edges:") print(f" Average: {avg:.2f}") print(f" Variance:{var:.2f}") print(f" Std.Dev: {dev:.2f}") print(f" Edge Count: {len(neg_edge_indexes)}") print("\nTX Board: loopback compare") print(f" Predicted Timestamp: {(avg):.3f} samples") try: fill_compare = neg_edge_indexes - pos_edge_indexes avg = np.average(fill_compare) var = np.var(fill_compare) dev = np.std(fill_compare) fill_vs_burst_compare = 100 * avg/burst except ValueError as err: print(f"[Error] TX Compare: Edge count imbalanced.\n{err}") print(err) fill_compare = None fill_vs_burst_compare = -1 print(f" Predicted Fill: {fill_vs_burst_compare:.2f}%, Error: {(avg-fill_expected):.2f} samples") print("") print(f"Fill Delta:") fill_delta_avg = 100*(np.average(fill_compare) - np.average(fill))/burst print(f" Average: {fill_delta_avg:.2f}%") ax6.set_title("Fill Error") ax6.set_xlabel("Error (samples)") fill_error = fill_compare - fill_expected ax6.hist(fill_error, alpha=0.7, bins=30, color=('skyblue')) # General plot assignments if args.compare == True: axis = (ax1, ax2, ax3, ax4) axis_iq = (ax1, ax3) axis_power = (ax2, ax4) else: axis = (ax1, ax2) axis_iq = (ax1,) axis_power = (ax2,) for ax in axis: ax.legend(loc='upper right') ax.set_ylabel('Power') ax.set_xlabel('Sample Index') for ax in axis_power: ax.set_ylim(bottom=-1e6, top=9e6) for ax in axis_iq: ax.set_ylim(bottom=-2500, top=2500) fig.subplots_adjust(hspace=1) print(f"\nPress [Escape] to close figure") fig.canvas.mpl_connect('key_press_event', close_figure) plt.show() bladeRF-2024.05/host/libraries/libbladeRF_test/test_timestamps/src/000077500000000000000000000000001457144405000251635ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_timestamps/src/gmsk_burst.h000066400000000000000000000511271457144405000275220ustar00rootroot00000000000000#include #define GMSK_SPS 8 #define GMSK_SAMPLERATE_INITIALIZER { 0, GMSK_SPS * 13000000, 48 } static const int16_t gmsk_burst[] = { 0, 0, 90, 0, 180, 0, 270, 0, 360, 0, 450, 0, 540, 0, 629, 0, 720, 0, 809, 0, 899, 0, 989, -1, 1079, -4, 1169, -10, 1259, -22, 1349, -44, 1437, -83, 1522, -148, 1601, -247, 1665, -389, 1704, -579, 1622, -779, 1497, -998, 1322, -1221, 1095, -1428, 820, -1602, 507, -1727, 169, -1792, -179, -1791, -523, -1722, -848, -1587, -1141, -1391, -1391, -1142, -1586, -849, -1721, -525, -1790, -182, -1792, 161, -1731, 492, -1616, 792, -1463, 1047, -1295, 1249, -1139, 1393, -1017, 1484, -951, 1527, -951, 1527, -1017, 1484, -1139, 1393, -1295, 1249, -1463, 1047, -1616, 792, -1731, 492, -1792, 161, -1790, -182, -1721, -525, -1586, -849, -1391, -1142, -1142, -1391, -849, -1586, -525, -1721, -182, -1790, 161, -1792, 492, -1731, 792, -1616, 1047, -1463, 1249, -1295, 1393, -1139, 1484, -1017, 1527, -951, 1527, -951, 1484, -1017, 1393, -1139, 1249, -1295, 1047, -1463, 793, -1615, 494, -1730, 168, -1792, -168, -1792, -494, -1730, -793, -1615, -1047, -1463, -1249, -1295, -1393, -1139, -1484, -1017, -1527, -951, -1527, -951, -1484, -1017, -1393, -1139, -1249, -1295, -1047, -1463, -793, -1615, -494, -1730, -168, -1792, 168, -1792, 494, -1730, 793, -1615, 1048, -1463, 1249, -1295, 1394, -1138, 1486, -1015, 1531, -946, 1535, -939, 1502, -991, 1432, -1089, 1331, -1210, 1210, -1332, 1088, -1433, 989, -1503, 933, -1538, 933, -1538, 989, -1503, 1088, -1433, 1210, -1332, 1332, -1210, 1433, -1088, 1503, -989, 1538, -933, 1538, -933, 1503, -989, 1433, -1088, 1332, -1210, 1210, -1331, 1089, -1432, 991, -1502, 939, -1535, 946, -1531, 1015, -1486, 1138, -1394, 1295, -1249, 1463, -1048, 1615, -793, 1730, -494, 1792, -168, 1792, 168, 1730, 494, 1615, 793, 1463, 1047, 1295, 1249, 1139, 1393, 1017, 1484, 951, 1527, 951, 1527, 1017, 1484, 1139, 1393, 1295, 1249, 1463, 1047, 1616, 792, 1731, 492, 1792, 161, 1790, -182, 1721, -525, 1586, -849, 1391, -1142, 1141, -1391, 848, -1587, 522, -1722, 176, -1791, -176, -1791, -522, -1722, -848, -1587, -1141, -1391, -1391, -1141, -1587, -848, -1722, -522, -1791, -176, -1791, 176, -1722, 522, -1587, 848, -1391, 1141, -1142, 1391, -849, 1586, -525, 1721, -182, 1790, 161, 1792, 492, 1731, 792, 1616, 1047, 1463, 1249, 1295, 1394, 1138, 1486, 1015, 1531, 946, 1535, 939, 1502, 991, 1432, 1089, 1331, 1210, 1210, 1332, 1088, 1433, 989, 1503, 933, 1538, 933, 1538, 989, 1503, 1088, 1433, 1210, 1332, 1331, 1210, 1432, 1089, 1502, 991, 1535, 939, 1531, 946, 1486, 1015, 1394, 1138, 1249, 1295, 1048, 1463, 793, 1615, 494, 1730, 168, 1792, -168, 1792, -494, 1730, -793, 1615, -1047, 1463, -1249, 1295, -1393, 1139, -1484, 1017, -1527, 951, -1527, 951, -1484, 1017, -1393, 1139, -1249, 1295, -1047, 1463, -792, 1616, -492, 1731, -161, 1792, 182, 1790, 525, 1721, 849, 1586, 1142, 1391, 1391, 1142, 1586, 849, 1721, 525, 1790, 182, 1792, -161, 1731, -492, 1616, -792, 1463, -1047, 1295, -1249, 1139, -1393, 1017, -1484, 951, -1527, 951, -1527, 1017, -1484, 1139, -1393, 1295, -1249, 1463, -1047, 1616, -792, 1731, -492, 1792, -161, 1790, 182, 1721, 525, 1586, 849, 1391, 1142, 1141, 1391, 848, 1587, 522, 1722, 176, 1791, -176, 1791, -522, 1722, -848, 1587, -1141, 1391, -1391, 1142, -1586, 849, -1721, 525, -1790, 182, -1792, -161, -1731, -492, -1616, -792, -1463, -1047, -1295, -1249, -1139, -1393, -1017, -1484, -951, -1527, -951, -1527, -1017, -1484, -1139, -1393, -1295, -1249, -1463, -1047, -1616, -792, -1731, -492, -1792, -161, -1790, 182, -1721, 525, -1586, 849, -1391, 1142, -1142, 1391, -849, 1586, -525, 1721, -182, 1790, 161, 1792, 492, 1731, 792, 1616, 1047, 1463, 1249, 1296, 1393, 1139, 1484, 1017, 1527, 951, 1527, 951, 1484, 1017, 1393, 1139, 1249, 1296, 1047, 1463, 792, 1616, 492, 1731, 161, 1792, -182, 1790, -525, 1721, -849, 1586, -1142, 1391, -1391, 1142, -1586, 849, -1721, 525, -1790, 182, -1792, -161, -1731, -492, -1616, -792, -1463, -1047, -1295, -1249, -1138, -1394, -1015, -1486, -946, -1531, -939, -1535, -991, -1502, -1089, -1432, -1210, -1331, -1332, -1210, -1433, -1088, -1503, -989, -1538, -933, -1538, -933, -1503, -989, -1433, -1088, -1332, -1210, -1210, -1332, -1088, -1433, -989, -1503, -933, -1538, -933, -1538, -989, -1503, -1088, -1433, -1210, -1332, -1331, -1210, -1432, -1089, -1502, -991, -1535, -939, -1531, -946, -1486, -1015, -1394, -1138, -1249, -1295, -1047, -1463, -792, -1616, -492, -1731, -161, -1792, 182, -1790, 525, -1721, 849, -1586, 1142, -1391, 1391, -1141, 1587, -848, 1722, -522, 1791, -176, 1791, 176, 1722, 522, 1587, 848, 1391, 1141, 1142, 1391, 849, 1586, 525, 1721, 182, 1790, -161, 1792, -492, 1731, -792, 1616, -1047, 1463, -1249, 1295, -1394, 1138, -1486, 1015, -1531, 946, -1535, 939, -1502, 991, -1432, 1089, -1331, 1210, -1210, 1332, -1088, 1433, -989, 1503, -933, 1538, -933, 1538, -989, 1503, -1088, 1433, -1210, 1332, -1331, 1210, -1432, 1089, -1502, 991, -1535, 939, -1531, 946, -1486, 1015, -1394, 1138, -1249, 1295, -1048, 1463, -793, 1615, -494, 1730, -168, 1792, 168, 1792, 494, 1730, 793, 1615, 1048, 1463, 1249, 1295, 1394, 1138, 1486, 1015, 1531, 946, 1535, 939, 1502, 991, 1432, 1089, 1331, 1210, 1210, 1332, 1088, 1433, 989, 1503, 933, 1538, 933, 1538, 989, 1503, 1088, 1433, 1210, 1332, 1332, 1210, 1433, 1088, 1503, 989, 1538, 933, 1538, 933, 1503, 989, 1433, 1088, 1332, 1210, 1210, 1332, 1088, 1433, 989, 1503, 933, 1538, 933, 1538, 989, 1503, 1088, 1433, 1210, 1332, 1332, 1210, 1433, 1088, 1503, 989, 1538, 933, 1538, 933, 1503, 989, 1433, 1088, 1332, 1210, 1210, 1331, 1089, 1432, 991, 1502, 939, 1535, 946, 1531, 1015, 1486, 1138, 1394, 1295, 1249, 1463, 1048, 1615, 793, 1730, 494, 1792, 168, 1792, -168, 1730, -494, 1615, -793, 1463, -1048, 1295, -1249, 1138, -1394, 1015, -1486, 946, -1531, 939, -1535, 991, -1502, 1089, -1432, 1210, -1331, 1331, -1210, 1432, -1089, 1502, -991, 1535, -939, 1531, -946, 1486, -1015, 1394, -1138, 1249, -1295, 1047, -1463, 792, -1616, 492, -1731, 161, -1792, -182, -1790, -525, -1721, -849, -1586, -1142, -1391, -1391, -1142, -1586, -849, -1721, -525, -1790, -182, -1792, 161, -1731, 492, -1616, 792, -1463, 1047, -1296, 1249, -1139, 1393, -1017, 1484, -951, 1527, -951, 1527, -1017, 1484, -1139, 1393, -1295, 1249, -1463, 1047, -1615, 793, -1730, 494, -1792, 168, -1792, -168, -1730, -494, -1615, -793, -1463, -1047, -1295, -1249, -1139, -1393, -1017, -1484, -951, -1527, -951, -1527, -1017, -1484, -1139, -1393, -1295, -1249, -1463, -1047, -1615, -793, -1730, -494, -1792, -168, -1792, 168, -1730, 494, -1615, 793, -1463, 1048, -1295, 1249, -1138, 1394, -1015, 1486, -946, 1531, -939, 1535, -991, 1502, -1089, 1432, -1210, 1331, -1331, 1210, -1432, 1089, -1502, 991, -1535, 939, -1531, 946, -1486, 1015, -1394, 1138, -1249, 1295, -1048, 1463, -793, 1615, -494, 1730, -168, 1792, 168, 1792, 494, 1730, 793, 1615, 1048, 1463, 1249, 1295, 1394, 1138, 1486, 1015, 1531, 946, 1535, 939, 1502, 991, 1432, 1089, 1331, 1210, 1210, 1332, 1088, 1433, 989, 1503, 933, 1538, 933, 1538, 989, 1503, 1088, 1433, 1210, 1332, 1331, 1210, 1432, 1089, 1502, 991, 1535, 939, 1531, 946, 1486, 1015, 1394, 1138, 1249, 1295, 1047, 1463, 792, 1616, 492, 1731, 161, 1792, -182, 1790, -525, 1721, -849, 1586, -1142, 1391, -1391, 1142, -1586, 849, -1721, 525, -1790, 182, -1792, -161, -1731, -492, -1616, -792, -1463, -1047, -1295, -1249, -1139, -1393, -1017, -1484, -951, -1527, -951, -1527, -1017, -1484, -1139, -1393, -1295, -1249, -1463, -1047, -1616, -792, -1731, -492, -1792, -161, -1790, 182, -1721, 525, -1586, 849, -1391, 1142, -1141, 1391, -848, 1587, -522, 1722, -176, 1791, 176, 1791, 522, 1722, 848, 1587, 1141, 1391, 1391, 1142, 1586, 849, 1721, 525, 1790, 182, 1792, -161, 1731, -492, 1616, -792, 1463, -1047, 1295, -1249, 1138, -1394, 1015, -1486, 946, -1531, 939, -1535, 991, -1502, 1089, -1432, 1210, -1331, 1331, -1210, 1432, -1089, 1502, -991, 1535, -939, 1531, -946, 1486, -1015, 1394, -1138, 1249, -1295, 1047, -1463, 792, -1616, 492, -1731, 161, -1792, -182, -1790, -525, -1721, -849, -1586, -1142, -1391, -1391, -1142, -1586, -849, -1721, -525, -1790, -182, -1792, 161, -1731, 492, -1616, 792, -1463, 1047, -1295, 1249, -1138, 1394, -1015, 1486, -946, 1531, -939, 1535, -991, 1502, -1089, 1432, -1210, 1331, -1331, 1210, -1432, 1089, -1502, 991, -1535, 939, -1531, 946, -1486, 1015, -1394, 1138, -1249, 1295, -1048, 1463, -793, 1615, -494, 1730, -168, 1792, 168, 1792, 494, 1730, 793, 1615, 1048, 1463, 1249, 1295, 1394, 1138, 1486, 1015, 1531, 946, 1535, 939, 1502, 991, 1432, 1089, 1331, 1210, 1210, 1332, 1088, 1433, 989, 1503, 933, 1538, 933, 1538, 989, 1503, 1088, 1433, 1210, 1332, 1331, 1210, 1432, 1089, 1502, 991, 1535, 939, 1531, 946, 1486, 1015, 1394, 1138, 1249, 1295, 1047, 1463, 792, 1616, 492, 1731, 161, 1792, -182, 1790, -525, 1721, -849, 1586, -1142, 1391, -1391, 1141, -1587, 848, -1722, 522, -1791, 176, -1791, -176, -1722, -522, -1587, -848, -1391, -1141, -1142, -1391, -849, -1586, -525, -1721, -182, -1790, 161, -1792, 492, -1731, 792, -1616, 1047, -1463, 1249, -1295, 1394, -1138, 1486, -1015, 1531, -946, 1535, -939, 1502, -991, 1432, -1089, 1331, -1210, 1210, -1332, 1088, -1433, 989, -1503, 933, -1538, 933, -1538, 989, -1503, 1088, -1433, 1210, -1332, 1331, -1210, 1432, -1089, 1502, -991, 1535, -939, 1531, -946, 1486, -1015, 1394, -1138, 1249, -1295, 1047, -1463, 792, -1616, 492, -1731, 161, -1792, -182, -1790, -525, -1721, -849, -1586, -1142, -1391, -1391, -1141, -1587, -848, -1722, -522, -1791, -176, -1791, 176, -1722, 522, -1587, 848, -1391, 1141, -1142, 1391, -849, 1586, -525, 1721, -182, 1790, 161, 1792, 492, 1731, 792, 1616, 1047, 1463, 1249, 1295, 1394, 1138, 1486, 1015, 1531, 946, 1535, 939, 1502, 991, 1432, 1089, 1331, 1210, 1210, 1331, 1089, 1432, 991, 1502, 939, 1535, 946, 1531, 1015, 1486, 1138, 1394, 1295, 1249, 1463, 1047, 1616, 792, 1731, 492, 1792, 161, 1790, -182, 1721, -525, 1586, -849, 1391, -1142, 1141, -1391, 848, -1587, 522, -1722, 176, -1791, -176, -1791, -522, -1722, -848, -1587, -1141, -1391, -1391, -1142, -1586, -849, -1721, -525, -1790, -182, -1792, 161, -1731, 492, -1616, 792, -1463, 1047, -1296, 1249, -1139, 1393, -1017, 1484, -951, 1527, -951, 1527, -1017, 1484, -1139, 1393, -1295, 1249, -1463, 1047, -1615, 793, -1730, 494, -1792, 168, -1792, -168, -1730, -494, -1615, -793, -1463, -1047, -1295, -1249, -1139, -1393, -1017, -1484, -951, -1527, -951, -1527, -1017, -1484, -1139, -1393, -1295, -1249, -1463, -1047, -1616, -792, -1731, -492, -1792, -161, -1790, 182, -1721, 525, -1587, 849, -1391, 1142, -1142, 1391, -849, 1586, -525, 1721, -182, 1790, 161, 1792, 492, 1731, 792, 1616, 1047, 1463, 1249, 1296, 1393, 1139, 1484, 1017, 1527, 951, 1527, 951, 1484, 1017, 1393, 1139, 1249, 1296, 1047, 1463, 792, 1616, 492, 1731, 161, 1792, -182, 1790, -525, 1721, -849, 1586, -1142, 1391, -1391, 1142, -1587, 849, -1721, 525, -1790, 182, -1792, -161, -1731, -492, -1616, -792, -1463, -1047, -1295, -1249, -1138, -1394, -1015, -1486, -946, -1531, -939, -1535, -991, -1502, -1089, -1432, -1210, -1331, -1332, -1210, -1433, -1088, -1503, -989, -1538, -933, -1538, -933, -1503, -989, -1433, -1088, -1332, -1210, -1210, -1331, -1089, -1432, -991, -1502, -939, -1535, -946, -1531, -1015, -1486, -1138, -1394, -1295, -1249, -1463, -1047, -1616, -792, -1731, -492, -1792, -161, -1790, 182, -1721, 525, -1587, 849, -1391, 1142, -1142, 1391, -849, 1586, -525, 1721, -182, 1790, 161, 1792, 492, 1731, 792, 1616, 1047, 1463, 1249, 1295, 1394, 1138, 1486, 1015, 1531, 946, 1535, 939, 1502, 991, 1432, 1089, 1331, 1210, 1210, 1331, 1089, 1432, 991, 1502, 939, 1535, 946, 1531, 1015, 1486, 1138, 1394, 1295, 1249, 1463, 1048, 1615, 793, 1730, 494, 1792, 168, 1792, -168, 1730, -494, 1615, -793, 1463, -1047, 1295, -1249, 1139, -1393, 1017, -1484, 951, -1527, 951, -1527, 1017, -1484, 1139, -1393, 1296, -1249, 1463, -1047, 1616, -792, 1731, -492, 1792, -161, 1790, 182, 1721, 525, 1586, 849, 1391, 1142, 1142, 1391, 849, 1587, 525, 1721, 182, 1790, -161, 1792, -492, 1731, -792, 1616, -1047, 1463, -1249, 1295, -1394, 1138, -1486, 1015, -1531, 946, -1535, 939, -1502, 991, -1432, 1089, -1331, 1210, -1210, 1332, -1088, 1433, -989, 1503, -933, 1538, -933, 1538, -989, 1503, -1088, 1433, -1210, 1332, -1332, 1210, -1433, 1088, -1503, 989, -1538, 933, -1538, 933, -1503, 989, -1433, 1088, -1332, 1210, -1210, 1331, -1089, 1432, -991, 1502, -939, 1535, -946, 1531, -1015, 1486, -1138, 1394, -1295, 1249, -1463, 1047, -1616, 792, -1731, 492, -1792, 161, -1790, -182, -1721, -525, -1586, -849, -1391, -1142, -1141, -1391, -848, -1587, -522, -1722, -176, -1791, 176, -1791, 522, -1722, 848, -1587, 1141, -1391, 1391, -1141, 1587, -848, 1722, -522, 1791, -176, 1791, 176, 1722, 522, 1587, 848, 1391, 1141, 1141, 1391, 848, 1587, 522, 1722, 176, 1791, -176, 1791, -522, 1722, -848, 1587, -1141, 1391, -1391, 1141, -1587, 848, -1722, 522, -1791, 176, -1791, -176, -1722, -522, -1587, -848, -1391, -1141, -1141, -1391, -848, -1587, -522, -1722, -176, -1791, 176, -1791, 522, -1722, 848, -1587, 1141, -1391, 1391, -1141, 1587, -848, 1722, -522, 1791, -176, 1791, 176, 1722, 522, 1587, 848, 1391, 1141, 1141, 1391, 848, 1587, 522, 1722, 176, 1791, -176, 1791, -522, 1722, -848, 1587, -1141, 1391, -1391, 1142, -1586, 849, -1721, 525, -1790, 182, -1792, -161, -1731, -492, -1616, -792, -1463, -1047, -1295, -1249, -1138, -1394, -1015, -1486, -946, -1531, -939, -1535, -991, -1502, -1089, -1432, -1210, -1331, -1331, -1210, -1432, -1089, -1502, -991, -1535, -939, -1531, -946, -1486, -1015, -1394, -1138, -1249, -1295, -1048, -1463, -793, -1615, -494, -1730, -168, -1792, 168, -1792, 494, -1730, 793, -1615, 1048, -1463, 1249, -1295, 1394, -1138, 1486, -1015, 1531, -946, 1535, -939, 1502, -991, 1432, -1089, 1331, -1210, 1210, -1332, 1088, -1433, 989, -1503, 933, -1538, 933, -1538, 989, -1503, 1088, -1433, 1210, -1332, 1332, -1210, 1433, -1088, 1503, -989, 1538, -933, 1538, -933, 1503, -989, 1433, -1088, 1332, -1210, 1210, -1331, 1089, -1432, 991, -1502, 939, -1535, 946, -1531, 1015, -1486, 1138, -1394, 1295, -1249, 1463, -1048, 1615, -793, 1730, -494, 1792, -168, 1792, 168, 1730, 494, 1615, 793, 1463, 1047, 1295, 1249, 1139, 1393, 1017, 1484, 951, 1527, 951, 1527, 1017, 1484, 1139, 1393, 1295, 1249, 1463, 1047, 1615, 793, 1730, 494, 1792, 168, 1792, -168, 1730, -494, 1615, -793, 1463, -1048, 1295, -1249, 1138, -1394, 1015, -1486, 946, -1531, 939, -1535, 991, -1502, 1089, -1432, 1210, -1331, 1332, -1210, 1433, -1088, 1503, -989, 1538, -933, 1538, -933, 1503, -989, 1433, -1088, 1332, -1210, 1210, -1332, 1088, -1433, 989, -1503, 933, -1538, 933, -1538, 989, -1503, 1088, -1433, 1210, -1332, 1331, -1210, 1432, -1089, 1502, -991, 1535, -939, 1531, -946, 1486, -1015, 1394, -1138, 1249, -1295, 1047, -1463, 792, -1616, 492, -1731, 161, -1792, -182, -1790, -525, -1721, -849, -1586, -1142, -1391, -1391, -1141, -1587, -848, -1722, -522, -1791, -176, -1791, 176, -1722, 522, -1587, 848, -1391, 1141, -1141, 1391, -848, 1587, -522, 1722, -176, 1791, 176, 1791, 522, 1722, 848, 1587, 1141, 1391, 1391, 1142, 1586, 849, 1721, 525, 1790, 182, 1792, -161, 1731, -492, 1616, -792, 1463, -1047, 1295, -1249, 1138, -1394, 1015, -1486, 946, -1531, 939, -1535, 991, -1502, 1089, -1432, 1210, -1331, 1332, -1210, 1433, -1088, 1503, -989, 1538, -933, 1538, -933, 1503, -989, 1433, -1088, 1332, -1210, 1210, -1332, 1088, -1433, 989, -1503, 887, -1461, 840, -1384, 840, -1278, 870, -1146, 907, -999, 932, -847, 931, -707, 902, -593, 846, -513, 769, -466, 676, -445, 573, -435, 466, -423, 363, -399, 272, -358, 197, -300, 140, -230, 93, -153, 49, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #ifdef GMSK_BURST_MAIN #include #include #include #include int main(int argc, char *argv[]) { const char filename[] = "gmsk_burst.bin"; FILE *f = fopen(filename, "wb"); if (!f) { perror("fopen"); return 1; } else { fwrite(gmsk_burst, sizeof(gmsk_burst[0]), sizeof(gmsk_burst) / sizeof(gmsk_burst[0]), f); fclose(f); printf("Wrote samples to %s.\n", filename); } return 0; } #endif bladeRF-2024.05/host/libraries/libbladeRF_test/test_timestamps/src/loopback.c000066400000000000000000000575131457144405000271340ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014-2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include #include #include "loopback.h" #include "test_timestamps.h" /* You'll want to reduce the number of bursts if debugging with this. This has * potential to cause RX overruns. */ #define LOOPBACK_RX_TO_FILE 0 int setup_device_loopback(struct loopback_burst_test *t) { int status; struct bladerf *dev = t->dev; const char* board; board = bladerf_get_board_name(dev); if (strcmp(board, "bladerf1")) { fprintf(stderr, "[Error] BladeRF1 required for loopback test\n"); return BLADERF_ERR_UNSUPPORTED; } status = bladerf_set_loopback(dev, BLADERF_LB_BB_TXVGA1_RXVGA2); if (status != 0) { fprintf(stderr, "Failed to set loopback mode: %s\n", bladerf_strerror(status)); return status; } status = bladerf_set_lna_gain(dev, BLADERF_LNA_GAIN_MAX); if (status != 0) { fprintf(stderr, "Failed to set LNA gain value: %s\n", bladerf_strerror(status)); return status; } status = bladerf_set_rxvga1(dev, 30); if (status != 0) { fprintf(stderr, "Failed to set RXVGA1 value: %s\n", bladerf_strerror(status)); return status; } status = bladerf_set_rxvga2(dev, 10); if (status != 0) { fprintf(stderr, "Failed to set RXVGA2 value: %s\n", bladerf_strerror(status)); return status; } status = bladerf_set_txvga1(dev, -10); if (status != 0) { fprintf(stderr, "Failed to set TXVGA1 value: %s\n", bladerf_strerror(status)); return status; } status = bladerf_set_txvga2(dev, BLADERF_TXVGA2_GAIN_MIN); if (status != 0) { fprintf(stderr, "Failed to set TXVGA2 value: %s\n", bladerf_strerror(status)); return status; } status = bladerf_sync_config(t->dev, BLADERF_MODULE_RX, BLADERF_FORMAT_SC16_Q11, t->params->num_buffers, t->params->buf_size, t->params->num_xfers, t->params->timeout_ms); if (status != 0) { fprintf(stderr, "Failed to configure RX stream: %s\n", bladerf_strerror(status)); return status; } status = bladerf_enable_module(t->dev, BLADERF_MODULE_RX, true); if (status != 0) { fprintf(stderr, "Failed to enable RX module: %s\n", bladerf_strerror(status)); return status; } status = bladerf_sync_config(t->dev, BLADERF_MODULE_TX, BLADERF_FORMAT_SC16_Q11, t->params->num_buffers, t->params->buf_size, t->params->num_xfers, t->params->timeout_ms); if (status != 0) { fprintf(stderr, "Failed to configure TX stream: %s\n", bladerf_strerror(status)); return status; } status = bladerf_enable_module(t->dev, BLADERF_MODULE_TX, true); if (status != 0) { fprintf(stderr, "Failed to enable RX module: %s\n", bladerf_strerror(status)); return status; } return status; } int setup_device_loopback_rf(struct loopback_burst_test *t) { int status; struct bladerf *dev = t->dev; status = bladerf_set_gain_mode(dev,BLADERF_MODULE_RX, BLADERF_GAIN_MGC); if (status!= 0) { fprintf(stderr, "Failed to set RX gain value: %s\n", bladerf_strerror(status)); return status; } status = bladerf_set_gain(dev, BLADERF_MODULE_RX, 0); if (status!= 0) { fprintf(stderr, "Failed to set RX gain value: %s\n", bladerf_strerror(status)); return status; } status = bladerf_set_frequency(dev, BLADERF_MODULE_RX, t->frequency); if (status!= 0) { fprintf(stderr, "Failed to set RX sample rate: %s\n", bladerf_strerror(status)); return status; } status = bladerf_sync_config(t->dev, BLADERF_MODULE_RX, BLADERF_FORMAT_SC16_Q11_META, t->params->num_buffers, t->params->buf_size, t->params->num_xfers, t->params->timeout_ms); if (status != 0) { fprintf(stderr, "Failed to configure RX stream: %s\n", bladerf_strerror(status)); return status; } status = bladerf_enable_module(t->dev, BLADERF_MODULE_RX, true); if (status != 0) { fprintf(stderr, "Failed to enable RX module: %s\n", bladerf_strerror(status)); return status; } status = bladerf_set_frequency(dev, BLADERF_MODULE_TX, t->frequency); if (status!= 0) { fprintf(stderr, "Failed to set TX frequency: %s\n", bladerf_strerror(status)); return status; } status = bladerf_sync_config(t->dev, BLADERF_MODULE_TX, BLADERF_FORMAT_SC16_Q11_META, t->params->num_buffers, t->params->buf_size, t->params->num_xfers, t->params->timeout_ms); if (status != 0) { fprintf(stderr, "Failed to configure TX stream: %s\n", bladerf_strerror(status)); return status; } status = bladerf_enable_module(t->dev, BLADERF_MODULE_TX, true); if (status != 0) { fprintf(stderr, "Failed to enable RX module: %s\n", bladerf_strerror(status)); return status; } return status; } int16_t * alloc_loopback_samples(size_t n_samples) { int16_t *samples; size_t i; samples = (int16_t*) malloc(2 * sizeof(samples[0]) * n_samples); if (samples == NULL) { perror("malloc"); return NULL; } for (i = 0; i < (2 * n_samples); i += 2) { samples[i] = samples[i + 1] = LOOPBACK_TX_MAGNITUDE; } return samples; } typedef enum { GET_SAMPLES, FLUSH_INITIAL_SAMPLES, WAIT_FOR_BURST_START, WAIT_FOR_BURST_END, } loopback_burst_rx_state; void *loopback_burst_rx_task (void *args) { struct loopback_burst_test *t = (struct loopback_burst_test *) args; int16_t *samples; int status; unsigned int burst_num; struct bladerf_metadata meta; unsigned int idx; loopback_burst_rx_state curr_state, next_state; uint64_t burst_start, burst_end, burst_end_prev; bool stop; unsigned int transient_delay = 0; #if LOOPBACK_RX_TO_FILE FILE *debug = fopen("debug.bin", "wb"); if (!debug) { perror("fopen"); } #endif samples = (int16_t*) malloc(2 * sizeof(samples[0]) * t->params->buf_size); if (samples == NULL) { perror("malloc"); return NULL; } idx = 0; status = 0; burst_num = 0; memset(&meta, 0, sizeof(meta)); meta.flags |= BLADERF_META_FLAG_RX_NOW; curr_state = GET_SAMPLES; next_state = FLUSH_INITIAL_SAMPLES; burst_start = burst_end = burst_end_prev = 0; stop = false; while (status == 0 && burst_num < t->num_bursts && !stop) { switch (curr_state) { case GET_SAMPLES: status = bladerf_sync_rx(t->dev, samples, t->params->buf_size, &meta, t->params->timeout_ms); if (status != 0) { fprintf(stderr, "RX failed in burst %-4u: %s\n", burst_num, bladerf_strerror(status)); } else if (meta.status & BLADERF_META_STATUS_OVERRUN) { fprintf(stderr, "Error: RX overrun detected.\n"); pthread_mutex_lock(&t->lock); t->stop = true; t->rx_ready = true; pthread_mutex_unlock(&t->lock); } else { /* printf("Read %-8u samples @ 0x%08"PRIx64" (%-8"PRIu64")\n", t->params->buf_size, meta.timestamp, meta.timestamp); */ #if LOOPBACK_RX_TO_FILE fwrite(samples, 2 * sizeof(samples[0]), t->params->buf_size, debug); #endif } idx = 0; curr_state = next_state; break; case FLUSH_INITIAL_SAMPLES: { bool had_transient_spike = false; curr_state = GET_SAMPLES; next_state = FLUSH_INITIAL_SAMPLES; for (; idx < (2 * t->params->buf_size); idx += 2) { const uint32_t sig_pow = samples[idx] * samples[idx] + samples[idx + 1] * samples[idx + 1]; /* Keep flushing samples if we encounter any transient "ON" * samples prior to the TX task being started. */ if (sig_pow >= LOOPBACK_RX_POWER_THRESH) { had_transient_spike = true; fprintf(stderr, "Flushed an initial buffer due to a " "transient spike.\n"); break; } } if (had_transient_spike) { /* Reset transient delay counter */ transient_delay = 0; } else { transient_delay++; if (transient_delay == 10) { /* After 10 buffers of no transients, we've most likely * rid ourselves of any junk in the RX FIFOs and are * ready to start the test */ next_state = WAIT_FOR_BURST_START; pthread_mutex_lock(&t->lock); t->rx_ready = true; pthread_mutex_unlock(&t->lock); } } break; } case WAIT_FOR_BURST_START: for (; idx < (2 * t->params->buf_size); idx += 2) { const uint32_t sig_pow = samples[idx] * samples[idx] + samples[idx + 1] * samples[idx + 1]; if (sig_pow >= LOOPBACK_RX_POWER_THRESH) { burst_start = meta.timestamp + (idx / 2); burst_end_prev = burst_end; burst_end = 0; curr_state = WAIT_FOR_BURST_END; assert(burst_start > burst_end_prev); if (burst_num != 0) { const uint64_t gap = burst_start - burst_end_prev; uint64_t delta; if (gap > t->bursts[burst_num].gap) { delta = gap - t->bursts[burst_num].gap; } else { delta = t->bursts[burst_num].gap - gap; } if (delta > 1) { status = BLADERF_ERR_UNEXPECTED; fprintf(stderr, "Burst #%-4u Failed. " " Gap varied by %"PRIu64 " samples." " Expected=%-8"PRIu64 " rx'd=%-8"PRIu64"\n", burst_num + 1, delta, t->bursts[burst_num].gap, gap); } } break; } } /* Need to fetch more samples */ if (idx >= (2 * t->params->buf_size)) { next_state = curr_state; curr_state = GET_SAMPLES; } break; case WAIT_FOR_BURST_END: for (; idx < (2 * t->params->buf_size); idx += 2) { const uint32_t sig_pow = samples[idx] * samples[idx] + samples[idx + 1] * samples[idx + 1]; if (sig_pow < LOOPBACK_RX_POWER_THRESH) { uint64_t duration, delta; burst_end = meta.timestamp + (idx / 2); assert(burst_end > burst_start); duration = burst_end - burst_start; if (duration > t->bursts[burst_num].duration) { delta = duration - t->bursts[burst_num].duration; } else { delta = t->bursts[burst_num].duration - duration; } if (delta > 1) { status = BLADERF_ERR_UNEXPECTED; fprintf(stderr, "Burst #%-4u Failed. " "Duration varied by %"PRIu64" samples. " "Expected=%-8"PRIu64"rx'd=%-8"PRIu64"\n", burst_num + 1, delta, t->bursts[burst_num].duration, duration); } else { const uint64_t gap = (burst_num == 0) ? 0 : t->bursts[burst_num].gap; printf("Burst #%-4u Passed. gap=%-8"PRIu64 "duration=%-8"PRIu64"\n", burst_num + 1, gap, t->bursts[burst_num].duration); curr_state = WAIT_FOR_BURST_START; burst_num++; } break; } } /* Need to fetch more samples */ if (idx >= (2 * t->params->buf_size)) { next_state = curr_state; curr_state = GET_SAMPLES; } break; } pthread_mutex_lock(&t->lock); stop = t->stop; pthread_mutex_unlock(&t->lock); } if (status < 0) { fprintf(stderr, "RX: Shutting down due to error.\n"); } free(samples); #if LOOPBACK_RX_TO_FILE fclose(debug); #endif /* Ensure the TX side is signalled to stop, if it isn't already */ pthread_mutex_lock(&t->lock); t->stop = true; pthread_mutex_unlock(&t->lock); return NULL; } void *loopback_burst_rx_task_rf (void *args) { struct loopback_burst_test *t = (struct loopback_burst_test *) args; int16_t *samples; int status; unsigned int burst_num; struct bladerf_metadata meta; unsigned int idx; loopback_burst_rx_state curr_state, next_state; uint64_t burst_start, burst_end, burst_end_prev; bool stop; unsigned int transient_delay = 0; #if LOOPBACK_RX_TO_FILE FILE *debug = fopen("debug.bin", "wb"); if (!debug) { perror("fopen"); } #endif samples = (int16_t*) malloc(2 * sizeof(samples[0]) * t->params->buf_size); if (samples == NULL) { perror("malloc"); return NULL; } idx = 0; status = 0; burst_num = 0; memset(&meta, 0, sizeof(meta)); meta.flags |= BLADERF_META_FLAG_RX_NOW; curr_state = GET_SAMPLES; next_state = FLUSH_INITIAL_SAMPLES; burst_start = burst_end = burst_end_prev = 0; stop = false; while (status == 0 && burst_num < t->num_bursts && !stop) { switch (curr_state) { case GET_SAMPLES: status = bladerf_sync_rx(t->dev, samples, t->params->buf_size, &meta, t->params->timeout_ms); if (status != 0) { fprintf(stderr, "RX failed in burst %-4u: %s\n", burst_num, bladerf_strerror(status)); } else if (meta.status & BLADERF_META_STATUS_OVERRUN) { fprintf(stderr, "Error: RX overrun detected.\n"); pthread_mutex_lock(&t->lock); t->stop = true; t->rx_ready = true; pthread_mutex_unlock(&t->lock); } else { /* printf("Read %-8u samples @ 0x%08"PRIx64" (%-8"PRIu64")\n", t->params->buf_size, meta.timestamp, meta.timestamp); */ #if LOOPBACK_RX_TO_FILE fwrite(samples, 2 * sizeof(samples[0]), t->params->buf_size, debug); #endif } idx = 0; curr_state = next_state; break; case FLUSH_INITIAL_SAMPLES: { bool had_transient_spike = false; curr_state = GET_SAMPLES; next_state = FLUSH_INITIAL_SAMPLES; for (; idx < (2 * t->params->buf_size); idx += 2) { uint32_t sig_pow = (samples[idx] * samples[idx] + samples[idx + 1] * samples[idx + 1]); /* Keep flushing samples if we encounter any transient "ON" * samples prior to the TX task being started. */ if (sig_pow >= LOOPBACK_RX_POWER_THRESH) { had_transient_spike = true; fprintf(stderr, "Flushed an initial buffer due to a " "transient spike."); break; } } if (had_transient_spike) { /* Reset transient delay counter */ transient_delay = 0; } else { transient_delay++; if (transient_delay == 10) { /* After 10 buffers of no transients, we've most likely * rid ourselves of any junk in the RX FIFOs and are * ready to start the test */ next_state = WAIT_FOR_BURST_START; pthread_mutex_lock(&t->lock); t->rx_ready = true; pthread_mutex_unlock(&t->lock); } } break; } case WAIT_FOR_BURST_START: for (; idx < (2 * t->params->buf_size); idx += 2) { const uint32_t sig_pow = samples[idx] * samples[idx] + samples[idx + 1] * samples[idx + 1]; if (sig_pow >= LOOPBACK_RX_POWER_THRESH) { burst_start = meta.timestamp + (idx / 2); burst_end_prev = burst_end; burst_end = 0; curr_state = WAIT_FOR_BURST_END; assert(burst_start > burst_end_prev); if (burst_num != 0) { const uint64_t gap = burst_start - burst_end_prev; uint64_t delta; if (gap > t->bursts[burst_num].gap) { delta = gap - t->bursts[burst_num].gap; } else { delta = t->bursts[burst_num].gap - gap; } if (delta > 1) { status = BLADERF_ERR_UNEXPECTED; fprintf(stderr, "Burst #%-4u Failed. " " Gap varied by %"PRIu64 " samples." " Expected=%-8"PRIu64 " rx'd=%-8"PRIu64"\n", burst_num + 1, delta, t->bursts[burst_num].gap, gap); } } break; } } /* Need to fetch more samples */ if (idx >= (2 * t->params->buf_size)) { next_state = curr_state; curr_state = GET_SAMPLES; } break; case WAIT_FOR_BURST_END: for (; idx < (2 * t->params->buf_size); idx += 2) { const uint32_t sig_pow = samples[idx] * samples[idx] + samples[idx + 1] * samples[idx + 1]; if (sig_pow < LOOPBACK_RX_POWER_THRESH) { uint64_t duration, delta; burst_end = meta.timestamp + (idx / 2); assert(burst_end > burst_start); duration = burst_end - burst_start; if (duration > t->bursts[burst_num].duration) { delta = duration - t->bursts[burst_num].duration; } else { delta = t->bursts[burst_num].duration - duration; } if (delta > 1) { status = BLADERF_ERR_UNEXPECTED; fprintf(stderr, "Burst #%-4u Failed. " "Duration varied by %"PRIu64" samples. " "Expected=%-8"PRIu64"rx'd=%-8"PRIu64"\n", burst_num + 1, delta, t->bursts[burst_num].duration, duration); } else { const uint64_t gap = (burst_num == 0) ? 0 : t->bursts[burst_num].gap; printf("Burst #%-4u Passed. gap=%-8"PRIu64 "duration=%-8"PRIu64"\n", burst_num + 1, gap, t->bursts[burst_num].duration); curr_state = WAIT_FOR_BURST_START; burst_num++; } break; } } /* Need to fetch more samples */ if (idx >= (2 * t->params->buf_size)) { next_state = curr_state; curr_state = GET_SAMPLES; } break; } pthread_mutex_lock(&t->lock); stop = t->stop; pthread_mutex_unlock(&t->lock); } if (status < 0) { fprintf(stderr, "RX: Shutting down due to error.\n"); } free(samples); #if LOOPBACK_RX_TO_FILE fclose(debug); #endif /* Ensure the TX side is signalled to stop, if it isn't already */ pthread_mutex_lock(&t->lock); t->stop = true; pthread_mutex_unlock(&t->lock); return NULL; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_timestamps/src/loopback.h000066400000000000000000000043471457144405000271360ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef TEST_TIMESTAMPS_LOOPBACK_H_ #define TEST_TIMESTAMPS_LOOPBACK_H_ #include #include #include #include #include #define LOOPBACK_TX_MAGNITUDE 2000 #define LOOPBACK_RX_POWER_THRESH (256 * 256) struct loopback_burst_test { struct bladerf *dev; struct app_params *params; struct loopback_burst *bursts; unsigned int num_bursts; pthread_mutex_t lock; bool stop; bool rx_ready; bladerf_frequency frequency; }; struct loopback_burst { uint64_t duration; uint64_t gap; }; /* Returns 0 on success, non-zero on failure */ int setup_device_loopback(struct loopback_burst_test *t); int setup_device_loopback_rf(struct loopback_burst_test *t); /* Alloc and fill sample buffer for TX. * Returns heap-allocated sample buffer on success, NULL on failure */ int16_t * alloc_loopback_samples(size_t n_samples); /* Returns NULL, args should be the loopback_burst_test structure */ void *loopback_burst_rx_task(void *args); void *loopback_burst_rx_task_rf(void *args); #endif bladeRF-2024.05/host/libraries/libbladeRF_test/test_timestamps/src/main.c000066400000000000000000000312541457144405000262600ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include #include #include #include #include #include "conversions.h" #include "test_timestamps.h" #define OPTSTR "hd:s:S:ft:B:v:n:x:T:" #define DECLARE_TEST(name) \ extern int test_fn_##name(struct bladerf *, struct app_params *); \ const struct test test_##name = { #name, test_fn_##name } #define TEST(name) &test_##name struct test { const char *name; int (*run)(struct bladerf *dev, struct app_params *p); }; DECLARE_TEST(rx_gaps); DECLARE_TEST(rx_scheduled); DECLARE_TEST(tx_onoff); DECLARE_TEST(tx_onoff_nowsched); DECLARE_TEST(tx_gmsk_bursts); DECLARE_TEST(txrx_hwloop); DECLARE_TEST(loopback_onoff); DECLARE_TEST(loopback_onoff_rf); DECLARE_TEST(loopback_onoff_zp); DECLARE_TEST(format_mismatch); DECLARE_TEST(readback); DECLARE_TEST(print); static const struct test *tests[] = { TEST(rx_gaps), TEST(rx_scheduled), TEST(tx_onoff), TEST(tx_onoff_nowsched), TEST(tx_gmsk_bursts), TEST(txrx_hwloop), TEST(loopback_onoff), TEST(loopback_onoff_rf), TEST(loopback_onoff_zp), TEST(format_mismatch), TEST(readback), TEST(print), }; static const struct option long_options[] = { { "help", no_argument, 0, 'h' }, /* Device configuration */ { "device", required_argument, 0, 'd' }, { "samplerate", required_argument, 0, 's' }, { "buflen", required_argument, 0, 'B' }, { "num-bufs", required_argument, 0, 'n' }, { "num-xfers", required_argument, 0, 'x' }, { "timeout", required_argument, 0, 'T' }, /* Test configuration */ { "test", required_argument, 0, 't' }, { "fast", no_argument, 0, 'f' }, /* Verbosity options */ { "lib-verbosity", required_argument, 0, 'v' }, /* Seed to use for tests utilizing a PRNG */ { "seed", required_argument, 0, 'S' }, { 0, 0, 0, 0 }, }; const struct numeric_suffix freq_suffixes[] = { { "K", 1000 }, { "kHz", 1000 }, { "M", 1000000 }, { "MHz", 1000000 }, { "G", 1000000000 }, { "GHz", 1000000000 }, }; const struct numeric_suffix len_suffixes[] = { { "k", 1024 }, }; static void usage(const char *argv0) { printf("Usage: %s [options]\n", argv0); printf("Run timestamp tests\n\n"); printf("Device configuration options:\n"); printf(" -d, --device Use the specified device. By default,\n"); printf(" any device found will be used.\n"); printf(" -s, --samplerate Set the specified sample rate.\n"); printf(" Default = %u\n", DEFAULT_SAMPLERATE); printf(" -B, --buflen Buffer length. Must be multiple of 1024.\n"); printf(" -n, --num-bufs Number of buffers to use.\n"); printf(" -x, --num-xfers Number of transfers to use.\n"); printf(" -T, --timeout Timeout value (ms)\n\n"); printf("Test configuration:\n"); printf(" -t, --test Test name to run. Options are:\n"); printf(" rx_gaps Check for unexpected gaps in samples.\n"); printf(" rx_scheduled Perform reads at specific timestamps.\n"); printf(" tx_onoff Transmits ON-OFF bursts.\n"); printf(" Requires external verification.\n"); printf(" tx_onoff_nowsched Transmits ON-OFF bursts, switching between\n"); printf(" TX_NOW and scheduled transmissions.\n"); printf(" Requires external verification.\n"); printf(" tx_gmsk_bursts Transmits GMSK bursts.\n"); printf(" Requires external verification.\n"); printf(" txrx_hwloop Generates and measures TX fill\n"); printf(" Requires two bladeRFs and 20dB attenuator.\n"); printf(" loopback_onoff Transmits ON-OFF bursts which are verified\n"); printf(" loopback_onoff_rf Transmits ON-OFF bursts verified by\n"); printf(" looping back from TX1 to RX1 via SMA cable.\n"); printf(" NOTE: 20dB attenuator required\n"); printf(" loopback_onoff_zp Transmits ON-OFF bursts with zero-padding,\n"); printf(" which are verified via baseband loopback\n"); printf(" to the RX module.\n"); printf(" format_mismatch Exercise checking of conflicting formats.\n"); printf(" readback Read back timestamps for 10-20s to determine\n"); printf(" mean intra-readback time and look for any\n"); printf(" unexpected gaps.\n"); printf(" print Read and print timestamps for ~2 hours.\n"); printf("\n"); printf(" -S, --seed Seed to use for PRNG-based test cases.\n"); printf("\n"); printf("Misc options:\n"); printf(" -f, --fast Reduces test time for applicable tests\n"); printf(" -h, --help Show this help text\n"); printf(" -v, --lib-verbosity Set libbladeRF verbosity (Default: warning)\n"); printf("\n"); } static void init_app_params(struct app_params *p) { memset(p, 0, sizeof(p[0])); p->samplerate = 1000000; p->prng_seed = 1; p->num_buffers = 16; p->num_xfers = 8; p->buf_size = 64 * 1024; p->timeout_ms = 10000; p->fast_test = false; } static void deinit_app_params(struct app_params *p) { free(p->device_str); free(p->test_name); } static int handle_args(int argc, char *argv[], struct app_params *p) { int c, idx; bool ok; bladerf_log_level log_level; /* Print help */ if (argc == 1) { return 1; } while ((c = getopt_long(argc, argv, OPTSTR, long_options, &idx)) >= 0) { switch (c) { case 'v': log_level = str2loglevel(optarg, &ok); if (!ok) { fprintf(stderr, "Invalid log level: %s\n", optarg); return -1; } else { bladerf_log_set_verbosity(log_level); } break; case 'h': return 1; case 'd': if (p->device_str != NULL) { fprintf(stderr, "Device already specified: %s\n", p->device_str); return -1; } else { p->device_str = strdup(optarg); if (p->device_str == NULL) { perror("strdup"); return -1; } } break; case 's': p->samplerate = str2uint_suffix(optarg, BLADERF_SAMPLERATE_MIN, BLADERF_SAMPLERATE_REC_MAX, freq_suffixes, ARRAY_SIZE(freq_suffixes), &ok); if (!ok) { fprintf(stderr, "Invalid sample rate: %s\n", optarg); return -1; } break; case 'B': p->buf_size = str2uint_suffix(optarg, 1024, UINT_MAX, len_suffixes, ARRAY_SIZE(len_suffixes), &ok); if (!ok || (p->buf_size % 1024) != 0) { fprintf(stderr, "Invalid buffer length: %s\n", optarg); return -1; } break; case 'n': p->num_buffers = str2uint(optarg, 2, UINT_MAX, &ok); if (!ok) { fprintf(stderr, "Invalid number of buffers: %s\n", optarg); return -1; } break; case 'x': p->num_xfers = str2uint(optarg, 1, UINT_MAX, &ok); if (!ok) { fprintf(stderr, "Invalid number of transfers: %s\n", optarg); return -1; } break; case 'T': p->timeout_ms = str2uint(optarg, 0, UINT_MAX, &ok); if (!ok) { fprintf(stderr, "Invalid timeout: %s\n", optarg); return -1; } break; case 't': p->test_name = strdup(optarg); if (p->test_name == NULL) { perror("strdup"); return -1; } break; case 'f': p->fast_test = true; break; case 'S': p->prng_seed = str2uint64(optarg, 1, UINT64_MAX, &ok); if (!ok) { fprintf(stderr, "Invalid seed value: %s\n", optarg); return -1; } break; default: return -1; } } if (p->num_buffers < (p->num_xfers + 1)) { fprintf(stderr, "Too many xfers, or too few buffers specified.\n"); return -1; } if (p->test_name == NULL) { fprintf(stderr, "A test name must be specified via -t .\n"); return -1; } return 0; } static inline int apply_params(struct bladerf *dev, struct app_params *p) { int status; randval_init(&p->prng_state, p->prng_seed); status = bladerf_set_sample_rate(dev, BLADERF_MODULE_RX, p->samplerate, NULL); if (status != 0) { fprintf(stderr, "Failed to set RX sample rate: %s\n", bladerf_strerror(status)); return status; } status = bladerf_set_sample_rate(dev, BLADERF_MODULE_TX, p->samplerate, NULL); if (status != 0) { fprintf(stderr, "Failed to set TX sample rate: %s\n", bladerf_strerror(status)); return status; } return 0; } int main(int argc, char *argv[]) { int status; struct app_params p; struct bladerf *dev = NULL; size_t i; init_app_params(&p); status = handle_args(argc, argv, &p); if (status != 0) { if (status == 1) { usage(argv[0]); status = 0; } goto out; } status = bladerf_open(&dev, p.device_str); if (status != 0) { fprintf(stderr, "Failed to open device: %s\n", bladerf_strerror(status)); goto out; } status = apply_params(dev, &p); if (status != 0) { goto out; } for (i = 0; i < ARRAY_SIZE(tests); i++) { if (!strcasecmp(p.test_name, tests[i]->name)) { status = tests[i]->run(dev, &p); break; } } if (i >= ARRAY_SIZE(tests)) { fprintf(stderr, "Unknown test: %s\n", p.test_name); status = -1; } out: if (dev != NULL) { bladerf_close(dev); } deinit_app_params(&p); return status; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_timestamps/src/test_format_mismatch.c000066400000000000000000000311311457144405000315420ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ /* This test exercises some error-checking with repect to the RX and TX * modules being configured with conflicting formats */ #include #include #include #include #include #include #include #include #include "test_timestamps.h" const struct interfaces { bool rx_sync; bool tx_sync; } ifs[] = { { true, true }, { true, false }, { false, true }, { false, false }, }; const struct test_case { bladerf_format rx_fmt; bladerf_format tx_fmt; int exp_status; } tests[] = { { BLADERF_FORMAT_SC16_Q11, BLADERF_FORMAT_SC16_Q11, 0 }, { BLADERF_FORMAT_SC16_Q11, BLADERF_FORMAT_SC16_Q11_META, BLADERF_ERR_INVAL }, { BLADERF_FORMAT_SC16_Q11_META, BLADERF_FORMAT_SC16_Q11, BLADERF_ERR_INVAL }, { BLADERF_FORMAT_SC16_Q11_META, BLADERF_FORMAT_SC16_Q11_META, 0 }, }; typedef enum { TASK_UNINITIALIZED, TASK_RUNNING, TASK_SHUTDOWN_REQUESTED, TASK_STOPPED, } task_state; static struct async_task { int exit_status; struct bladerf *dev; bladerf_module module; bladerf_format fmt; struct app_params *p; task_state state; void **buffers; size_t curr_buf_idx; size_t n_buffers; pthread_t thread; pthread_mutex_t lock; } rx_task, tx_task; void *callback(struct bladerf *dev, struct bladerf_stream *stream, struct bladerf_metadata *meta, void *samples, size_t num_samples, void *user_data) { struct async_task *t = (struct async_task *) user_data; void *ret; pthread_mutex_lock(&t->lock); t->curr_buf_idx = (t->curr_buf_idx + 1) % t->n_buffers; ret = t->buffers[t->curr_buf_idx]; switch (t->state) { case TASK_UNINITIALIZED: t->state = TASK_RUNNING; break; case TASK_RUNNING: break; case TASK_SHUTDOWN_REQUESTED: ret = BLADERF_STREAM_SHUTDOWN; break; default: fprintf(stderr, "Unexpected task state: %d\n", t->state); ret = BLADERF_STREAM_SHUTDOWN; } pthread_mutex_unlock(&t->lock); return ret; } static void *stream_task(void *arg) { int status; struct bladerf_stream *stream; struct async_task *t = (struct async_task *) arg; status = bladerf_init_stream(&stream, t->dev, callback, &t->buffers, t->n_buffers, t->fmt, t->p->buf_size, t->p->num_xfers, t); if (status != 0) { t->exit_status = BLADERF_ERR_UNEXPECTED; fprintf(stderr, "Failed to initialized %s stream: %s\n", (t->module == BLADERF_MODULE_RX) ? "RX" : "TX", bladerf_strerror(status)); goto out; } status = bladerf_enable_module(t->dev, t->module, true); if (status != 0) { fprintf(stderr, "Failed to enable %s module: %s\n", t->module == BLADERF_MODULE_RX ? "RX" : "TX", bladerf_strerror(status)); goto out; } status = bladerf_stream(stream, t->module); bladerf_deinit_stream(stream); out: pthread_mutex_lock(&t->lock); t->state = TASK_STOPPED; t->exit_status = status; pthread_mutex_unlock(&t->lock); return NULL; } static int enable_modules(struct bladerf *dev, bool enable) { int status; status = bladerf_enable_module(dev, BLADERF_MODULE_RX, enable); if (status != 0) { fprintf(stderr, "Failed to %s RX module: %s\n", enable ? "enable" : "disable", bladerf_strerror(status)); return status; } status = bladerf_enable_module(dev, BLADERF_MODULE_TX, enable); if (status != 0) { fprintf(stderr, "Failed to %s TX module: %s\n", enable ? "enable" : "disable", bladerf_strerror(status)); return status; } return status; } static int init_if(struct bladerf *dev, struct app_params *p, bladerf_module m, bool sync, bladerf_format fmt, int exp_status) { int status; struct async_task *t; if (sync) { status = bladerf_sync_config(dev, m, fmt, p->num_buffers, p->buf_size, p->num_xfers, p->timeout_ms); if (status != exp_status) { fprintf(stderr, "Uexpected status when configuring sync %s: %s\n", m == BLADERF_MODULE_RX ? "RX" : "TX", bladerf_strerror(status)); status = -1; } else { status = 0; } } else { task_state state; switch (m) { case BLADERF_MODULE_RX: t = &rx_task; break; case BLADERF_MODULE_TX: t = &tx_task; break; default: fprintf(stderr, "Invalid module: %d\n", m); return -1; } t->fmt = fmt; t->state = state = TASK_UNINITIALIZED; status = pthread_create(&t->thread, NULL, stream_task, t); if (status != 0) { fprintf(stderr, "Failed to launch %s task\n", m == BLADERF_MODULE_RX ? "RX" : "TX"); return status; } do { usleep(25000); pthread_mutex_lock(&t->lock); state = t->state; pthread_mutex_unlock(&t->lock); } while (state == TASK_UNINITIALIZED); /* This may have already stopped if an invalid configuration was * detected. */ if (state == TASK_STOPPED) { pthread_join(t->thread, NULL); if (t->exit_status != exp_status) { fprintf(stderr, "Uexpected status when configuring async %s: %s\n", m == BLADERF_MODULE_RX ? "RX" : "TX", bladerf_strerror(status)); status = -1; } else { status = 0; } } } return status; } static int deinit_if(struct bladerf *dev, bladerf_module m, bool sync, int exp_status) { int status = 0; /* Nothing to do for sync i/f -- errors are reported during the config */ if (!sync) { struct async_task *t; task_state state; switch (m) { case BLADERF_MODULE_RX: t = &rx_task; break; case BLADERF_MODULE_TX: t = &tx_task; break; default: fprintf(stderr, "Invalid module: %d\n", m); return -1; } pthread_mutex_lock(&t->lock); state = t->state; pthread_mutex_unlock(&t->lock); while (state != TASK_STOPPED) { pthread_mutex_lock(&t->lock); t->state = TASK_SHUTDOWN_REQUESTED; pthread_mutex_unlock(&t->lock); usleep(25000); pthread_mutex_lock(&t->lock); state = t->state; pthread_mutex_unlock(&t->lock); } pthread_join(t->thread, NULL); if (t->exit_status != exp_status) { fprintf(stderr, "Uexpected status when deinitializing async %s: %s\n", m == BLADERF_MODULE_RX ? "RX" : "TX", bladerf_strerror(t->exit_status)); status = -1; } else { status = 0; } } return status; } static void print_test_info(int n, const struct interfaces *i, const struct test_case *t) { printf("\nTest case %d\n", n + 1); printf("-----------------------------------\n"); printf(" RX i/f: %s\n", i->rx_sync ? "sync" : "async"); printf(" RX fmt: %s\n", t->rx_fmt == BLADERF_FORMAT_SC16_Q11 ? "SC16 Q11" : "SC16 Q11 + Metadata"); printf(" TX i/f: %s\n", i->tx_sync ? "sync" : "async"); printf(" TX fmt: %s\n", t->tx_fmt == BLADERF_FORMAT_SC16_Q11 ? "SC16 Q11" : "SC16 Q11 + Metadata"); } static void init_task_info(struct bladerf *dev, struct app_params *p, bladerf_module m, struct async_task *t) { memset(t, 0, sizeof(t[0])); t->state = TASK_UNINITIALIZED; t->dev = dev; t->module = m; t->p = p; t->n_buffers = 16; t->curr_buf_idx = 0; pthread_mutex_init(&t->lock, NULL); } int test_fn_format_mismatch(struct bladerf *dev, struct app_params *p) { int status; size_t i, j; bladerf_loopback lb_backup; init_task_info(dev, p, BLADERF_MODULE_RX, &rx_task); init_task_info(dev, p, BLADERF_MODULE_TX, &tx_task); status = bladerf_get_loopback(dev, &lb_backup); if (status != 0) { fprintf(stderr, "Failed to get current loopback mode.\n"); return status; } status = bladerf_set_loopback(dev, BLADERF_LB_BB_TXVGA1_RXVGA2); if (status != 0) { fprintf(stderr, "Failed to set loopback mode.\n"); return status; } for (i = 0; i < ARRAY_SIZE(ifs); i++) { for (j = 0; j < ARRAY_SIZE(tests); j++) { const size_t test_case = i * ARRAY_SIZE(tests) + j; assert(test_case <= INT_MAX); print_test_info((int) test_case, &ifs[i], &tests[j]); status = enable_modules(dev, false); if (status != 0) { goto fail; } /* Init RX first, then TX */ printf("RX -> TX..."); status = init_if(dev, p, BLADERF_MODULE_RX, ifs[i].rx_sync, tests[j].rx_fmt, 0); if (status != 0) { goto fail; } status = init_if(dev, p, BLADERF_MODULE_TX, ifs[i].tx_sync, tests[j].tx_fmt, tests[j].exp_status); if (status != 0) { goto fail; } status = deinit_if(dev, BLADERF_MODULE_RX, ifs[i].rx_sync, 0); if (status != 0) { goto fail; } status = deinit_if(dev, BLADERF_MODULE_TX, ifs[i].tx_sync, tests[j].exp_status); if (status != 0) { goto fail; } status = enable_modules(dev, false); if (status != 0) { goto fail; } printf("Pass.\n"); /* Init TX first, then RX */ printf("TX -> RX..."); status = init_if(dev, p, BLADERF_MODULE_TX, ifs[i].tx_sync, tests[j].tx_fmt, 0); if (status != 0) { goto fail; } status = init_if(dev, p, BLADERF_MODULE_RX, ifs[i].rx_sync, tests[j].rx_fmt, tests[j].exp_status); if (status != 0) { goto fail; } status = deinit_if(dev, BLADERF_MODULE_TX, ifs[i].tx_sync, 0); if (status != 0) { goto fail; } status = deinit_if(dev, BLADERF_MODULE_RX, ifs[i].rx_sync, tests[j].exp_status); if (status != 0) { goto fail; } status = enable_modules(dev, false); if (status != 0) { goto fail; } printf("Pass.\n"); } } fail: if (status != 0) { printf("Fail.\n"); } printf("\n"); if (bladerf_set_loopback(dev, lb_backup) != 0) { fprintf(stderr, "Failed to restore loopback settings.\n"); } return status; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_timestamps/src/test_loopback_onoff.c000066400000000000000000000172731457144405000313610ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ /* This test TX's some On-Off bursts and verifies the burst length and gaps * via loopback to the RX module */ #include #include #include #include #include #include #include #include #include #include "test_timestamps.h" #include "loopback.h" #include "minmax.h" static void * tx_task(void *args) { int status; int16_t *samples; unsigned int i; struct bladerf_metadata meta; uint64_t samples_left; struct loopback_burst_test *t = (struct loopback_burst_test *) args; bool stop = false; int16_t zeros[] = { 0, 0, 0, 0 }; memset(&meta, 0, sizeof(meta)); samples = alloc_loopback_samples(t->params->buf_size); if (samples == NULL) { return NULL; } status = bladerf_get_timestamp(t->dev, BLADERF_MODULE_TX, &meta.timestamp); if (status != 0) { fprintf(stderr, "Failed to get current timestamp: %s\n", bladerf_strerror(status)); } meta.timestamp += 400000; for (i = 0; i < t->num_bursts && !stop; i++) { meta.flags = BLADERF_META_FLAG_TX_BURST_START; samples_left = t->bursts[i].duration; assert(samples_left <= UINT_MAX); if (i != 0) { meta.timestamp += (t->bursts[i-1].duration + t->bursts[i].gap); } while (samples_left != 0 && status == 0) { unsigned int to_send = uint_min(t->params->buf_size, (unsigned int) samples_left); status = bladerf_sync_tx(t->dev, samples, to_send, &meta, t->params->timeout_ms); if (status != 0) { fprintf(stderr, "Failed to TX @ burst %-4u with %"PRIu64 " samples left: %s\n", i + 1, samples_left, bladerf_strerror(status)); /* Stop the RX worker */ pthread_mutex_lock(&t->lock); t->stop = true; pthread_mutex_unlock(&t->lock); } meta.flags &= ~BLADERF_META_FLAG_TX_BURST_START; samples_left -= to_send; } /* Flush TX samples by ensuring we have 2 zero samples at the end * of our burst (as required by libbladeRF) */ if (status == 0) { meta.flags = BLADERF_META_FLAG_TX_BURST_END; status = bladerf_sync_tx(t->dev, zeros, 2, &meta, t->params->timeout_ms); if (status != 0) { fprintf(stderr, "Failed to flush TX: %s\n", bladerf_strerror(status)); /* Stop the RX worker */ pthread_mutex_lock(&t->lock); t->stop = true; pthread_mutex_unlock(&t->lock); } } pthread_mutex_lock(&t->lock); stop = t->stop; pthread_mutex_unlock(&t->lock); } /* Wait for samples to finish */ printf("TX: Waiting for samples to finish.\n"); fflush(stdout); status = wait_for_timestamp(t->dev, BLADERF_MODULE_TX, meta.timestamp + t->bursts[i - 1].duration, 3000); if (status != 0) { fprintf(stderr, "Failed to wait for TX to complete: %s\n", bladerf_strerror(status)); } free(samples); printf("TX: Exiting task.\n"); fflush(stdout); return NULL; } static inline int fill_bursts(struct loopback_burst_test *t) { uint64_t i; const uint64_t min_duration = 16; const uint64_t max_duration = 4 * t->params->buf_size; const uint64_t max_gap = 3 * max_duration; const uint64_t min_gap = t->params->buf_size; uint64_t prng_val, tmp; const char filename[] = "bursts.txt"; FILE *f; f = fopen(filename, "w"); if (f == NULL) { perror("fopen"); return -1; } randval_init(&t->params->prng_state, t->params->prng_seed); for (i = 0; i < t->num_bursts; i++) { prng_val = t->params->prng_state; randval_update(&t->params->prng_state); tmp = t->params->prng_state % (max_duration - min_duration + 1); t->bursts[i].duration = tmp + min_duration; randval_update(&t->params->prng_state); if (i != 0) { tmp = t->params->prng_state % (max_gap - min_gap + 1); t->bursts[i].gap = tmp + min_gap; } else { t->bursts[i].gap = 0; } fprintf(f, "Burst #%-4"PRIu64 " gap=%-8"PRIu64 " duration=%-8"PRIu64 " prng=0x%016"PRIx64"\n", i + 1, t->bursts[i].gap, t->bursts[i].duration, prng_val); } fprintf(f, "\n"); printf("Burst descriptions written to %s.\n", filename); fclose(f); return 0; } int test_fn_loopback_onoff(struct bladerf *dev, struct app_params *p) { int status = 0; struct loopback_burst_test test; pthread_t tx_thread; bool tx_started = false; pthread_t rx_thread; bool rx_started = false; bool rx_ready = false; test.dev = dev; test.params = p; test.num_bursts = 1000; test.stop = false; test.rx_ready = false; pthread_mutex_init(&test.lock, NULL); test.bursts = (struct loopback_burst *) malloc(test.num_bursts * sizeof(test.bursts[0])); if (test.bursts == NULL) { perror("malloc"); return -1; } else { fill_bursts(&test); } status = setup_device_loopback(&test); if (status != 0) { goto out; } printf("Starting bursts...\n"); status = pthread_create(&rx_thread, NULL, loopback_burst_rx_task, &test); if (status != 0) { fprintf(stderr, "Failed to start RX thread: %s\n", strerror(status)); goto out; } else { rx_started = true; } while (!rx_ready) { usleep(10000); pthread_mutex_lock(&test.lock); rx_ready = test.rx_ready; pthread_mutex_unlock(&test.lock); } status = pthread_create(&tx_thread, NULL, tx_task, &test); if (status != 0) { fprintf(stderr, "Failed to start TX thread: %s\n", strerror(status)); goto out; } else { tx_started = true; } out: if (tx_started) { pthread_join(tx_thread, NULL); } if (rx_started) { pthread_join(rx_thread, NULL); } free(test.bursts); bladerf_enable_module(dev, BLADERF_MODULE_RX, false); bladerf_enable_module(dev, BLADERF_MODULE_TX, false); bladerf_set_loopback(dev, BLADERF_LB_NONE); return status; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_timestamps/src/test_loopback_onoff_rf.c000066400000000000000000000201451457144405000320400ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2023 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ /* This test TX's some On-Off bursts and verifies the burst length and gaps * via loopback to the RX module */ #include #include #include #include #include #include #include #include #include #include "test_timestamps.h" #include "loopback.h" #include "minmax.h" static void * tx_task(void *args) { int status; int16_t *samples; unsigned int i; struct bladerf_metadata meta; uint64_t samples_left; struct loopback_burst_test *t = (struct loopback_burst_test *) args; bool stop = false; int16_t zeros[] = { 0, 0, 0, 0 }; memset(&meta, 0, sizeof(meta)); samples = alloc_loopback_samples(t->params->buf_size); if (samples == NULL) { return NULL; } status = bladerf_get_timestamp(t->dev, BLADERF_MODULE_TX, &meta.timestamp); if (status != 0) { fprintf(stderr, "Failed to get current timestamp: %s\n", bladerf_strerror(status)); } meta.timestamp += 400000; for (i = 0; i < t->num_bursts && !stop; i++) { meta.flags = BLADERF_META_FLAG_TX_BURST_START; samples_left = t->bursts[i].duration; assert(samples_left <= UINT_MAX); if (i != 0) { meta.timestamp += (t->bursts[i-1].duration + t->bursts[i].gap); } while (samples_left != 0 && status == 0) { unsigned int to_send = uint_min(t->params->buf_size, (unsigned int) samples_left); status = bladerf_sync_tx(t->dev, samples, to_send, &meta, t->params->timeout_ms); if (status != 0) { fprintf(stderr, "Failed to TX @ burst %-4u with %"PRIu64 " samples left: %s\n", i + 1, samples_left, bladerf_strerror(status)); /* Stop the RX worker */ pthread_mutex_lock(&t->lock); t->stop = true; pthread_mutex_unlock(&t->lock); } meta.flags &= ~BLADERF_META_FLAG_TX_BURST_START; samples_left -= to_send; } /* Flush TX samples by ensuring we have 2 zero samples at the end * of our burst (as required by libbladeRF) */ if (status == 0) { meta.flags = BLADERF_META_FLAG_TX_BURST_END; status = bladerf_sync_tx(t->dev, zeros, 2, &meta, t->params->timeout_ms); if (status != 0) { fprintf(stderr, "Failed to flush TX: %s\n", bladerf_strerror(status)); /* Stop the RX worker */ pthread_mutex_lock(&t->lock); t->stop = true; pthread_mutex_unlock(&t->lock); } } pthread_mutex_lock(&t->lock); stop = t->stop; pthread_mutex_unlock(&t->lock); } /* Wait for samples to finish */ printf("TX: Waiting for samples to finish.\n"); fflush(stdout); status = wait_for_timestamp(t->dev, BLADERF_MODULE_TX, meta.timestamp + t->bursts[i - 1].duration, 3000); if (status != 0) { fprintf(stderr, "Failed to wait for TX to complete: %s\n", bladerf_strerror(status)); } free(samples); printf("TX: Exiting task.\n"); fflush(stdout); return NULL; } static inline int fill_bursts(struct loopback_burst_test *t) { uint64_t i; const uint64_t min_duration = 16; const uint64_t max_duration = 4 * t->params->buf_size; const uint64_t max_gap = 3 * max_duration; const uint64_t min_gap = t->params->buf_size; uint64_t prng_val, tmp; const char filename[] = "bursts.txt"; FILE *f; f = fopen(filename, "w"); if (f == NULL) { perror("fopen"); return -1; } randval_init(&t->params->prng_state, t->params->prng_seed); for (i = 0; i < t->num_bursts; i++) { prng_val = t->params->prng_state; randval_update(&t->params->prng_state); tmp = t->params->prng_state % (max_duration - min_duration + 1); t->bursts[i].duration = tmp + min_duration; randval_update(&t->params->prng_state); if (i != 0) { tmp = t->params->prng_state % (max_gap - min_gap + 1); t->bursts[i].gap = tmp + min_gap; } else { t->bursts[i].gap = 0; } fprintf(f, "Burst #%-4"PRIu64 " gap=%-8"PRIu64 " duration=%-8"PRIu64 " prng=0x%016"PRIx64"\n", i + 1, t->bursts[i].gap, t->bursts[i].duration, prng_val); } fprintf(f, "\n"); printf("Burst descriptions written to %s.\n", filename); fclose(f); return 0; } int test_fn_loopback_onoff_rf(struct bladerf *dev, struct app_params *p) { bladerf_enable_module(dev, BLADERF_MODULE_RX, false); bladerf_enable_module(dev, BLADERF_MODULE_TX, false); fprintf(stderr, "[ERROR] Loopback_onoff_rf under construction\n"); return 0; int status = 0; struct loopback_burst_test test; pthread_t tx_thread; bool tx_started = false; pthread_t rx_thread; bool rx_started = false; bool rx_ready = false; test.dev = dev; test.params = p; test.num_bursts = 1000; test.stop = false; test.rx_ready = false; test.frequency = 100e6; pthread_mutex_init(&test.lock, NULL); fprintf(stderr, "[WARNING] loopback_onoff_rf under construction\n"); fprintf(stderr, "[WARNING] Failure expected\n"); fprintf(stderr, "[WARNING] 20dB attenuator required\n"); test.bursts = (struct loopback_burst *) malloc(test.num_bursts * sizeof(test.bursts[0])); if (test.bursts == NULL) { perror("malloc"); return -1; } else { fill_bursts(&test); } status = setup_device_loopback_rf(&test); if (status != 0) { goto out; } printf("Starting bursts...\n"); status = pthread_create(&rx_thread, NULL, loopback_burst_rx_task_rf, &test); if (status != 0) { fprintf(stderr, "Failed to start RX thread: %s\n", strerror(status)); goto out; } else { rx_started = true; } while (!rx_ready) { usleep(10000); pthread_mutex_lock(&test.lock); rx_ready = test.rx_ready; pthread_mutex_unlock(&test.lock); } status = pthread_create(&tx_thread, NULL, tx_task, &test); if (status != 0) { fprintf(stderr, "Failed to start TX thread: %s\n", strerror(status)); goto out; } else { tx_started = true; } out: if (tx_started) { pthread_join(tx_thread, NULL); } if (rx_started) { pthread_join(rx_thread, NULL); } free(test.bursts); bladerf_enable_module(dev, BLADERF_MODULE_RX, false); bladerf_enable_module(dev, BLADERF_MODULE_TX, false); bladerf_set_loopback(dev, BLADERF_LB_NONE); return status; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_timestamps/src/test_loopback_onoff_zp.c000066400000000000000000000277721457144405000320770ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ /* This test TX's some On-Off bursts using the UPDATE_TIMESTAMP flag to zero-pad * between specified timestamp values, and verifies the lengths of zero-padded * gaps. */ #include #include #include #include #include #include #include #include #include #include #include "test_timestamps.h" #include "loopback.h" #include "minmax.h" static inline uint64_t fill_rand_bursts(struct loopback_burst_test *t, FILE *f, uint64_t i, uint64_t max_idx, uint64_t min_duration, uint64_t max_duration) { uint64_t prng_val, tmp; while (i < max_idx) { prng_val = t->params->prng_state; randval_update(&t->params->prng_state); tmp = t->params->prng_state % (max_duration - min_duration + 1); t->bursts[i].duration = tmp + min_duration; randval_update(&t->params->prng_state); tmp = t->params->prng_state % (max_duration - min_duration + 1); t->bursts[i].gap = tmp + min_duration; fprintf(f, "Burst #%-4"PRIu64 " gap=%-8"PRIu64 " duration=%-8"PRIu64 " prng=0x%016"PRIx64"\n", i + 1, t->bursts[i].gap, t->bursts[i].duration, prng_val); i++; } return i; } /* See metadata.h for message length. msg_len, in samples, does not include * the 16-byte (4 sample) header */ static inline uint64_t get_msg_len(struct bladerf *dev) { const bladerf_dev_speed speed = bladerf_device_speed(dev); switch (speed) { case BLADERF_DEVICE_SPEED_HIGH: return 256 - 4; case BLADERF_DEVICE_SPEED_SUPER: return 512 - 4; default: assert(!"Invalid device speed"); return 0; } } static inline int fill_bursts(struct loopback_burst_test *t) { FILE *f; uint64_t i; const char filename[] = "zp-bursts.txt"; const uint64_t msg_len = get_msg_len(t->dev); const uint64_t msg_per_buf = t->params->buf_size / msg_len; /* Buffer length in terms of usable samples (excluding metadata) */ const uint64_t buf_len = msg_len * msg_per_buf; const uint64_t min_duration = 1; const uint64_t max_duration = 3 * t->params->buf_size; i = 0; randval_init(&t->params->prng_state, t->params->prng_seed); assert(t->num_bursts >= 12); /* Burst 1: Fill half a buffer */ t->bursts[i].gap = 0; t->bursts[i].duration = buf_len / 2; i++; /* Burst 2: Gap is 1/2 msg, burst fills remainder of buffer */ t->bursts[i].gap = msg_len / 2; t->bursts[i].duration = buf_len - (t->bursts[i-1].duration + t->bursts[i].gap); i++; /* Burst 3: Gap is 1.5 msg, so only 1 msg worth should be padded, with the * next message's timestamp adjusted accordingly. * * The duration then fills the next message */ t->bursts[i].gap = msg_len + msg_len / 2; t->bursts[i].duration = msg_len; i++; /* Burst 4: Gap is 25 samples, burst fils up to end of buffer */ t->bursts[i].gap = 25; t->bursts[i].duration = buf_len - t->bursts[i].gap; i++; /* Burst 5: Gap is entire msg, burst fills remainder of buffer */ t->bursts[i].gap = msg_len; t->bursts[i].duration = buf_len - t->bursts[i].gap; i++; /* Burst 6: Gap is entire msg - 1, burst fils remainder of buffer */ t->bursts[i].gap = msg_len - 1; t->bursts[i].duration = buf_len - t->bursts[i].gap; i++; /* Burst 7: Gap is 1 sample, burst fills remainder of buffer */ t->bursts[i].gap = 1; t->bursts[i].duration = buf_len - t->bursts[i].gap; i++; /* Burst 8: Gap is partial message, burst fills rest of message */ t->bursts[i].gap = msg_len / 4 + 1; t->bursts[i].duration = msg_len - t->bursts[i].gap; i++; /* Burst 9: * * Gap spans multiple messages worth of time. * * Burst fills multiple messages. * * Since we're message aligned, there should be no zero-stuffing under the * hood here; the sync i/f should just use the advanced timestamp **/ t->bursts[i].gap = 3 * msg_len; t->bursts[i].duration = 4 * msg_len; i++; /* Burst 10: Use up all but the last sample in a message. * * This sets up the following burst to exercise the edge case where we have * to handle the "End discontinuity with 2 zero-samples" requirement */ t->bursts[i].gap = msg_len / 4; t->bursts[i].duration = (3 * msg_len / 4) - 1; i++; /* Burst 11: * Gap spans over buffer's worth of time. * * Again, this shouldn't actually zero a buffer -- just the remainder of the * current message. * */ t->bursts[i].gap = 3 * buf_len / 2; t->bursts[i].duration = 3 * msg_len + msg_len / 4; i++; /* Burst 12: Small gap, mult-buffer duration */ t->bursts[i].gap = 2; t->bursts[i].duration = 4 * t->params->buf_size - 128; i++; f = fopen(filename, "w"); if (f == NULL) { perror("fopen"); return -1; } else { uint64_t j; printf("Burst descriptions written to %s.\n", filename); for (j = 0; j < i; j++) { fprintf(f, "Burst #%-4"PRIu64 " gap=%-8"PRIu64 " duration=%-8"PRIu64"\n", j + 1, t->bursts[j].gap, t->bursts[j].duration); } } /* Fill the remaining bursts with sets of pseudo-random values. First, * a set with smaller values is used, followed by a larger domain containing * multi-buffer lengths */ i = fill_rand_bursts(t, f, /* i through 9/10 of remaining bursts */ i, i + 9 * (t->num_bursts - i) / 10, min_duration, msg_len); (void) fill_rand_bursts(t, f, i, t->num_bursts, min_duration, max_duration); fclose(f); return 0; } static inline int tx_samples(struct loopback_burst_test *t, int16_t *samples, struct bladerf_metadata *meta, uint64_t count, unsigned int burst_num) { int status = 0; unsigned int to_send; assert(count <= UINT_MAX); while (count != 0 && status == 0) { to_send = uint_min(t->params->buf_size, (unsigned int) count); status = bladerf_sync_tx(t->dev, samples, to_send, meta, t->params->timeout_ms); if (status != 0) { fprintf(stderr, "Failed to TX @ burst %-4u with %"PRIu64 " samples left: %s\n", burst_num + 1, count, bladerf_strerror(status)); return status; } count -= to_send; meta->flags = 0; } return 0; } static void * tx_task(void *args) { int status; int16_t *samples; unsigned int i; struct bladerf_metadata meta; struct loopback_burst_test *t = (struct loopback_burst_test *) args; bool stop = false; int16_t zeros[] = { 0, 0, 0, 0 }; memset(&meta, 0, sizeof(meta)); samples = alloc_loopback_samples(t->params->buf_size); if (samples == NULL) { return NULL; } status = bladerf_get_timestamp(t->dev, BLADERF_MODULE_TX, &meta.timestamp); if (status != 0) { fprintf(stderr, "Failed to get current timestamp: %s\n", bladerf_strerror(status)); goto out; } meta.flags = BLADERF_META_FLAG_TX_BURST_START; meta.timestamp += 400000; for (i = 0; i < t->num_bursts && !stop; i++) { status = tx_samples(t, samples, &meta, t->bursts[i].duration, i); if (status != 0) { pthread_mutex_lock(&t->lock); stop = t->stop = true; pthread_mutex_unlock(&t->lock); } else { meta.flags = BLADERF_META_FLAG_TX_UPDATE_TIMESTAMP; meta.timestamp += t->bursts[i].duration; if (i != (t->num_bursts - 1)) { meta.timestamp += t->bursts[i+1].gap; } pthread_mutex_lock(&t->lock); stop = t->stop; pthread_mutex_unlock(&t->lock); } } /* Flush TX samples by ensuring we have 2 zero samples at the end * of our burst (as required by libbladeRF) */ if (status == 0) { meta.flags = BLADERF_META_FLAG_TX_BURST_END; status = bladerf_sync_tx(t->dev, zeros, 2, &meta, t->params->timeout_ms); if (status != 0) { fprintf(stderr, "Failed to flush TX: %s\n", bladerf_strerror(status)); } } /* Wait for samples to finish */ printf("TX: Waiting for samples to finish.\n"); fflush(stdout); status = wait_for_timestamp(t->dev, BLADERF_MODULE_TX, meta.timestamp + t->bursts[i - 1].duration, 3000); if (status != 0) { fprintf(stderr, "Failed to wait for TX to complete: %s\n", bladerf_strerror(status)); } out: free(samples); printf("TX: Exiting task.\n"); fflush(stdout); return NULL; } int test_fn_loopback_onoff_zp(struct bladerf *dev, struct app_params *p) { int status = 0; struct loopback_burst_test test; pthread_t tx_thread; bool tx_started = false; pthread_t rx_thread; bool rx_started = false; bool rx_ready = false; test.dev = dev; test.params = p; test.num_bursts = 10000; test.stop = false; test.rx_ready = false; pthread_mutex_init(&test.lock, NULL); test.bursts = (struct loopback_burst *) malloc(test.num_bursts * sizeof(test.bursts[0])); if (test.bursts == NULL) { perror("malloc"); return -1; } else { fill_bursts(&test); } status = setup_device_loopback(&test); if (status != 0) { goto out; } printf("Starting bursts...\n"); status = pthread_create(&rx_thread, NULL, loopback_burst_rx_task, &test); if (status != 0) { fprintf(stderr, "Failed to start RX thread: %s\n", strerror(status)); goto out; } else { rx_started = true; } while (!rx_ready) { usleep(10000); pthread_mutex_lock(&test.lock); rx_ready = test.rx_ready; pthread_mutex_unlock(&test.lock); } status = pthread_create(&tx_thread, NULL, tx_task, &test); if (status != 0) { fprintf(stderr, "Failed to start TX thread: %s\n", strerror(status)); goto out; } else { tx_started = true; } out: if (tx_started) { pthread_join(tx_thread, NULL); } if (rx_started) { pthread_join(rx_thread, NULL); } free(test.bursts); bladerf_enable_module(dev, BLADERF_MODULE_RX, false); bladerf_enable_module(dev, BLADERF_MODULE_TX, false); bladerf_set_loopback(dev, BLADERF_LB_NONE); return status; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_timestamps/src/test_print_timestamps.c000066400000000000000000000071651457144405000320010ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ /* This test just prints RX and TX timestamps, and is intended to simply * verify that there aren't blatantly obvious FPGA issues such as inadequate * register widths. */ #include #include #include #include #include "test_timestamps.h" int test_fn_print(struct bladerf *dev, struct app_params *p) { int status; uint64_t ts_rx, ts_tx, diff; bool neg; unsigned int i; const unsigned int iterations = (p->fast_test) ? 2 : 60*60*2; /* Run for 2 seconds or ~2 hours */ status = bladerf_sync_config(dev, BLADERF_MODULE_RX, BLADERF_FORMAT_SC16_Q11_META, p->num_buffers, p->buf_size, p->num_xfers, p->timeout_ms); if (status != 0) { fprintf(stderr, "Failed to configure RX module: %s\n", bladerf_strerror(status)); goto out; } /* Setup the metadata format to enable the timestamp bit. * * There's no need to actually call the rx/tx functions and start the * underlying worker threads. */ status = bladerf_sync_config(dev, BLADERF_MODULE_TX, BLADERF_FORMAT_SC16_Q11_META, p->num_buffers, p->buf_size, p->num_xfers, p->timeout_ms); if (status != 0) { fprintf(stderr, "Failed to configure TX module: %s\n", bladerf_strerror(status)); goto out; } for (i = 0; i < iterations; i++) { status = bladerf_get_timestamp(dev, BLADERF_MODULE_TX, &ts_tx); if (status != 0) { fprintf(stderr, "Failed to get TX timestamp: %s\n", bladerf_strerror(status)); goto out; } status = bladerf_get_timestamp(dev, BLADERF_MODULE_RX, &ts_rx); if (status != 0) { fprintf(stderr, "Failed to get TX timestamp: %s\n", bladerf_strerror(status)); goto out; } if (ts_rx > ts_tx) { neg = false; diff = ts_rx - ts_tx; } else { neg = true; diff = ts_tx - ts_rx; } printf("RX: 0x%016"PRIx64"\n", ts_rx); printf("TX: 0x%016"PRIx64" (%c%"PRIu64")\n\n", ts_tx, neg ? '-' : '+', diff); fflush(stdout); usleep(1000000); } out: bladerf_enable_module(dev, BLADERF_MODULE_RX, false); bladerf_enable_module(dev, BLADERF_MODULE_TX, false); return status; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_timestamps/src/test_readback.c000066400000000000000000000201551457144405000301250ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ /* This test is intended to simply check if timestamp readback is operational */ #include #include #include #include #include #include #include #include "test_timestamps.h" struct readings { uint64_t rx, rx_delta; uint64_t tx, tx_delta; bool rx_neg, tx_neg; }; void output_results(struct readings *r, unsigned int iterations, const char *filename, unsigned int samplerate_tx, unsigned int samplerate_rx) { unsigned int i; FILE *f; double mean_rb; /* Estimated time between readbacks */ unsigned int rx_errors = 0, tx_errors = 0; mean_rb = 0; for (i = 1; i < iterations; i++) { if (r[i].rx >= r[i - 1].rx) { r[i].rx_delta = r[i].rx - r[i - 1].rx; } else { r[i].rx_neg = true; r[i].rx_delta = r[i - 1].rx - r[i].rx; rx_errors++; } if (r[i].tx >= r[i - 1].tx) { r[i].tx_delta = r[i].tx - r[i - 1].tx; } else { r[i].tx_neg = true; r[i].tx_delta = r[i - 1].tx - r[i].tx; tx_errors++; } mean_rb += r[i].tx_delta; } mean_rb /= (2 * iterations); /* We do 2 readbacks per cycle */ mean_rb = mean_rb / samplerate_tx; /* We measure using the TX counter */ printf("Done.\n"); printf("Mean intra-readback time: %f s.\n", mean_rb); if (rx_errors) { printf("%u RX samples were not monotonic.\n", rx_errors); } else { printf("No RX errors.\n"); } if (tx_errors) { printf("%u TX samples were not monotonic.\n", tx_errors); } else { printf("No TX errors.\n"); } printf("Writing results to %s.\n", filename); f = fopen(filename, "w"); if (f == NULL) { fprintf(stderr, "Failed to open %s: %s\n", filename, strerror(errno)); return; } fprintf(f, "Mean intra-readback time: %f s.\n", mean_rb); fprintf(f, "RX samplerate: %u\n", samplerate_rx); fprintf(f, "TX samplerate: %u\n\n", samplerate_tx); for (i = 0; i < iterations; i++) { fprintf(f, "RX: %-10"PRIu64" (%s %-8"PRIu64") ", r[i].rx, r[i].rx_neg ? "-" : "+", r[i].rx_delta); fprintf(f, "TX: %-10"PRIu64" (%s %-8"PRIu64")\n", r[i].tx, r[i].tx_neg ? "-" : "+", r[i].tx_delta); } fclose(f); } int test_fn_readback(struct bladerf *dev, struct app_params *p) { int status, ret; bladerf_loopback lb_backup; unsigned int samplerate_rx, samplerate_tx, samplerate_tx_backup; const unsigned int iterations = 10000; unsigned int i; struct readings *readings; status = bladerf_get_loopback(dev, &lb_backup); if (status != 0) { fprintf(stderr, "Failed to get current loopback mode.\n"); return status; } /* Generally, it's recommended that both modules be configured for the * same samplerate when using timestamps. However, it is possible to do, if * the appropriate scaling factor is applied. * * Here we configure the modules for separate sample rates just to see them * changing at different rates */ status = bladerf_get_sample_rate(dev, BLADERF_MODULE_RX, &samplerate_rx); if (status != 0) { fprintf(stderr, "Failed to get current RX sample rate: %s\n", bladerf_strerror(status)); return status; } status = bladerf_get_sample_rate(dev, BLADERF_MODULE_TX, &samplerate_tx_backup); if (status != 0) { fprintf(stderr, "Failed to get current TX sample rate: %s\n", bladerf_strerror(status)); return status; } samplerate_tx = 2 * samplerate_rx; if (samplerate_tx > BLADERF_SAMPLERATE_REC_MAX) { samplerate_tx = samplerate_rx / 2; } readings = calloc(iterations, sizeof(readings[0])); if (readings == NULL) { perror("malloc"); return BLADERF_ERR_MEM; } status = bladerf_set_sample_rate(dev, BLADERF_MODULE_TX, samplerate_tx, NULL); if (status != 0) { fprintf(stderr, "Failed to set TX sample rate: %s\n", bladerf_strerror(status)); } status = bladerf_set_loopback(dev, BLADERF_LB_BB_TXVGA1_RXVGA2); if (status != 0) { fprintf(stderr, "Failed to set loopback mode.\n"); goto out; } /* Setup the metadata format to enable the timestamp bit. * There's no need to actually call the rx/tx functions and start the * underlying worker threads. */ status = bladerf_sync_config(dev, BLADERF_MODULE_RX, BLADERF_FORMAT_SC16_Q11_META, p->num_buffers, p->buf_size, p->num_xfers, p->timeout_ms); if (status != 0) { fprintf(stderr, "Failed to configure RX sync i/f: %s\n", bladerf_strerror(status)); goto out; } status = bladerf_sync_config(dev, BLADERF_MODULE_TX, BLADERF_FORMAT_SC16_Q11_META, p->num_buffers, p->buf_size, p->num_xfers, p->timeout_ms); if (status != 0) { fprintf(stderr, "Failed to configure TX sync i/f: %s\n", bladerf_strerror(status)); goto out; } printf("Running for %u iterations (~10-20 seconds)...\n", iterations); for (i = 0; i < iterations; i++) { status = bladerf_get_timestamp(dev, BLADERF_MODULE_RX, &readings[i].rx); if (status != 0) { fprintf(stderr, "Failed to fetch RX timestamp: %s\n", bladerf_strerror(status)); goto out; } status = bladerf_get_timestamp(dev, BLADERF_MODULE_TX, &readings[i].tx); if (status != 0) { fprintf(stderr, "Failed to fetch TX timestamp: %s\n", bladerf_strerror(status)); goto out; } } out: ret = status; status = bladerf_enable_module(dev, BLADERF_MODULE_RX, false); if (status != 0) { fprintf(stderr, "Failed to disable RX module: %s\n", bladerf_strerror(status)); } status = bladerf_enable_module(dev, BLADERF_MODULE_TX, false); if (status != 0) { fprintf(stderr, "Failed to disable TX module: %s\n", bladerf_strerror(status)); } status = bladerf_set_sample_rate(dev, BLADERF_MODULE_TX, samplerate_tx_backup, NULL); if (status != 0) { fprintf(stderr, "Failed to restore TX sample rate: %s\n", bladerf_strerror(status)); } status = bladerf_set_loopback(dev, lb_backup); if (status != 0) { fprintf(stderr, "Failed to restore loopback settings:%s \n", bladerf_strerror(status)); } if (ret == 0) { output_results(readings, iterations, "readback_results.txt", samplerate_tx, samplerate_rx); } free(readings); return ret; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_timestamps/src/test_rx_gaps.c000066400000000000000000000243041457144405000300340ustar00rootroot00000000000000/* * This test simply receives any available samples and checks that there are no * gaps/jumps in the expected timestamp * * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include #include #include #include #include #include "test_timestamps.h" #include "rel_assert.h" #define RANDOM_GAP_SIZE 0 struct test_case { uint64_t gap; unsigned int iterations; }; static const struct test_case tests[] = { { 1, 2000000 }, { 2, 2000000 }, { 128, 75000 }, { 256, 50000 }, { 512, 50000 }, { 1023, 10000 }, { 1024, 10000 }, { 1025, 10000 }, { 2048, 5000 }, { 3172, 5000 }, { 4096, 2500 }, { 8192, 2500 }, { 16 * 1024, 1000 }, { 32 * 1024, 1000 }, { 64 * 1024, 1000 }, { RANDOM_GAP_SIZE, 500 }, }; static const struct test_case fast_tests[] = { { 1, 20000 }, { 2, 20000 }, { 128, 750 }, { 256, 500 }, { 512, 500 }, { 1023, 100 }, { 1024, 100 }, { 1025, 100 }, { 2048, 50 }, { 3172, 50 }, { 4096, 25 }, { 8192, 25 }, { 16 * 1024, 10 }, { 32 * 1024, 10 }, { 64 * 1024, 10 }, { RANDOM_GAP_SIZE, 10 }, }; static inline unsigned int get_gap(struct app_params *p, const struct test_case *t, unsigned int buf_len) { uint64_t gap; if (t->gap == 0) { const uint64_t tmp = randval_update(&p->prng_state) % buf_len; if (tmp == 0) { gap = buf_len; } else { gap = tmp; } } else { gap = t->gap; } assert(gap <= UINT_MAX); assert(gap <= buf_len); return (unsigned int) gap; } static inline uint64_t delta(uint64_t a, uint64_t b) { return (a > b) ? a - b : b - a; } enum check_result { NO_ERRORS, DETECTED_OVERRUN, /* A legitimate overrun occurred and was detected */ FAILURE_DETECTED, /* Overrun condition occurred but weren't flagged, * or vice versa */ }; static inline enum check_result check_data(int16_t *samples, struct bladerf_metadata *meta, uint64_t timestamp, uint32_t counter, unsigned int n_read, bool *supress_overrun_msg) { const uint64_t ts_delta = timestamp == UINT64_MAX ? 0 : delta(meta->timestamp, timestamp); const bool read_trunc = (meta->actual_count != n_read); const bool data_discont = !counter_data_is_valid(samples, meta->actual_count, counter); enum check_result result; bool had_error; had_error = (ts_delta != 0 || read_trunc || data_discont); if (!had_error) { const bool overrun = (meta->status & BLADERF_META_STATUS_OVERRUN) != 0; if (overrun && timestamp != UINT64_MAX) { result = FAILURE_DETECTED; fprintf(stderr, "Error: Overrun flagged without any symptoms!\n"); } else { result = NO_ERRORS; } } else { if (meta->status & BLADERF_META_STATUS_OVERRUN) { result = DETECTED_OVERRUN; if (! (*supress_overrun_msg) ) { *supress_overrun_msg = true; fprintf(stderr, "Metadata indicates an overrun occurred, with " "%u samples returned.\n", meta->actual_count); fprintf(stderr, " Timestamp delta: %"PRIu64"\n", ts_delta); fprintf(stderr, "Suppressing additional messages for correctly " "detected overruns.\n"); } } else { result = FAILURE_DETECTED; fprintf(stderr, "Error: Metadata did NOT report an overrun for:\n"); fprintf(stderr, " Timestamp delta: %"PRIu64"\n", ts_delta); fprintf(stderr, " Actual Read count: %u\n", meta->actual_count); fprintf(stderr, " Data discontinuity: %s\n", data_discont ? "Yes" : "No"); } /* Within the samples we received, there should *never* be a data * discontinuity, since correctly detected overruns will return * the contiguous chunks of samples */ if (data_discont) { result = FAILURE_DETECTED; fprintf(stderr, "Error: Unexpected data discontinuity encountered @ " "t=0x%"PRIx64"\n", meta->timestamp); } } return result; } static int run(struct bladerf *dev, struct app_params *p, const struct test_case *t) { int status, status_out; struct bladerf_metadata meta; int16_t *samples; uint64_t timestamp; unsigned int gap; uint32_t counter; uint64_t tscount_diff; unsigned int i; bool suppress_overrun_msg = false; unsigned int overruns = 0; bool prev_iter_overrun = false; const unsigned int buf_len = (t->gap == RANDOM_GAP_SIZE) ? (128 * 1024) : (unsigned int ) t->gap; assert(t->gap <= UINT_MAX); samples = calloc(buf_len, 2 * sizeof(int16_t)); if (samples == NULL) { perror("calloc"); status = -1; goto out; } /* Clear out metadata and request that we just received any available * samples, with the timestamp filled in for us */ memset(&meta, 0, sizeof(meta)); meta.flags = BLADERF_META_FLAG_RX_NOW; status = enable_counter_mode(dev, true); if (status != 0) { goto out; } status = perform_sync_init(dev, BLADERF_MODULE_RX, 0, p); if (status != 0) { goto out; } /* Initial read to get a starting timestamp, and counter value */ gap = get_gap(p, t, buf_len); status = bladerf_sync_rx(dev, samples, gap, &meta, p->timeout_ms); if (status != 0) { fprintf(stderr, "Intial RX failed: %s\n", bladerf_strerror(status)); goto out; } counter = extract_counter_val((uint8_t*) samples); timestamp = meta.timestamp; assert(timestamp >= (uint64_t) counter); tscount_diff = timestamp - (uint64_t) counter; if (t->gap != 0) { printf("\nTest Case: Read size=%"PRIu64" samples, %u iterations\n", t->gap, t->iterations); } else { printf("\nTest Case: Random read size, %u iterations\n", t->iterations); } printf("--------------------------------------------------------\n"); assert((timestamp - tscount_diff) <= UINT32_MAX); status = check_data(samples, &meta, UINT64_MAX, (uint32_t) (timestamp - tscount_diff), meta.actual_count, &suppress_overrun_msg); if (status == DETECTED_OVERRUN) { overruns++; status = 0; } printf("Timestamp-counter diff: %"PRIu64"\n", tscount_diff); printf("Initial timestamp: 0x%016"PRIx64"\n", meta.timestamp); printf("Intital counter value: 0x%08"PRIx32"\n", counter); printf("Initial status: 0x%08"PRIu32"\n", meta.status); for (i = 0; i < t->iterations && status == 0; i++) { timestamp = meta.timestamp + gap; gap = get_gap(p, t, buf_len); status = bladerf_sync_rx(dev, samples, gap, &meta, p->timeout_ms); if (status != 0) { fprintf(stderr, "RX %u failed: %s\n", i, bladerf_strerror(status)); goto out; } /* If an overrun occured on the previous iteration, we don't know what * the timestamp will actually be on this iteration. */ if (prev_iter_overrun) { timestamp = meta.timestamp; } status = check_data(samples, &meta, timestamp, (uint32_t) (timestamp - tscount_diff), gap, &suppress_overrun_msg); if (status == DETECTED_OVERRUN) { overruns++; status = 0; prev_iter_overrun = true; } } if (status != 0) { printf("Test failed due to errors.\n"); } else if (overruns != 0) { printf("Test failed due to %u overruns.\n", overruns); status = -1; } else { printf("Test passed.\n"); } out: free(samples); status_out = bladerf_enable_module(dev, BLADERF_MODULE_RX, false); if (status_out != 0) { fprintf(stderr, "Failed to disable RX module: %s\n", bladerf_strerror(status)); } status = first_error(status, status_out); status_out = enable_counter_mode(dev, false); status = first_error(status, status_out); return status; } int test_fn_rx_gaps(struct bladerf *dev, struct app_params *p) { int status = 0; size_t i; unsigned int failures = 0; const struct test_case *case_to_run = (p->fast_test) ? fast_tests : tests; for (i = 0; i < ARRAY_SIZE(tests); i++) { status = run(dev, p, &case_to_run[i]); if (status != 0) { failures++; } } printf("\n%u test cases failed.\n", failures); return status; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_timestamps/src/test_rx_scheduled.c000066400000000000000000000171701457144405000310450ustar00rootroot00000000000000/* * This test excercises functionatity to wait for specific timestamps * * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include #include #include #include #include #include "test_timestamps.h" #include "rel_assert.h" struct test_case { uint64_t gap; unsigned int read_size; unsigned int iterations; }; static const struct test_case tests[] = { /* Gap Read Size Iterations */ { 1, 1, 100000 }, { 17, 1, 50000 }, { 17, 2, 50000 }, { 17, 13, 50000 }, { 17, 16, 50000 }, { 1 * 1024, 1, 2000 }, { 1 * 1024, 2, 2000 }, { 1 * 1024, 13, 2000 }, { 1 * 1024, 16, 2000 }, { 1 * 1024, 64, 2000 }, { 1 * 1024, 64, 2000 }, { 1 * 1024, 1024, 2000 }, { 2 * 1024, 1, 2000 }, { 2 * 1024, 2, 2000 }, { 2 * 1024, 13, 2000 }, { 2 * 1024, 16, 2000 }, { 2 * 1024, 64, 2000 }, { 2 * 1024, 64, 2000 }, { 2 * 1024, 1024, 2000 }, { 2 * 1024, 2 * 1024, 2000 }, { 1024 * 1024, 64, 50 }, { 1024 * 1024, 1023, 50 }, { 1024 * 1024, 1024, 50 }, { 1024 * 1024, 4095, 50 }, { 1024 * 1024, 4096, 50 }, { 1024 * 1024, 4097, 50 }, }; static const struct test_case fast_tests[] = { /* Gap Read Size Iterations */ { 1, 1, 1000 }, { 17, 1, 500 }, { 17, 2, 500 }, { 17, 13, 500 }, { 17, 16, 500 }, { 1 * 1024, 1, 10 }, { 1 * 1024, 2, 10 }, { 1 * 1024, 13, 10 }, { 1 * 1024, 16, 10 }, { 1 * 1024, 64, 10 }, { 1 * 1024, 64, 10 }, { 1 * 1024, 1024, 10 }, { 2 * 1024, 1, 5 }, { 2 * 1024, 2, 5 }, { 2 * 1024, 13, 5 }, { 2 * 1024, 16, 5 }, { 2 * 1024, 64, 5 }, { 2 * 1024, 64, 5 }, { 2 * 1024, 1024, 5 }, { 2 * 1024, 2 * 1024, 5 }, { 1024 * 1024, 64, 3 }, { 1024 * 1024, 1023, 3 }, { 1024 * 1024, 1024, 3 }, { 1024 * 1024, 4095, 3 }, { 1024 * 1024, 4096, 3 }, { 1024 * 1024, 4097, 3 }, }; static int run(struct bladerf *dev, struct app_params *p, int16_t *samples, const struct test_case *t) { int status, status_out; struct bladerf_metadata meta; unsigned int i; uint32_t counter; uint64_t tscount_diff; bool pass = true; unsigned int discont = 0; memset(&meta, 0, sizeof(meta)); status = enable_counter_mode(dev, true); if (status != 0) { goto out; } status = perform_sync_init(dev, BLADERF_MODULE_RX, 0, p); if (status != 0) { goto out; } /* Perform an initial read to get the difference between the timestamp * and the FPGA counter */ meta.flags = BLADERF_META_FLAG_RX_NOW; status = bladerf_sync_rx(dev, samples, t->read_size, &meta, p->timeout_ms); if (status != 0) { fprintf(stderr, "Intial RX failed: %s\n", bladerf_strerror(status)); goto out; } meta.flags = 0; counter = extract_counter_val((uint8_t*) samples); assert(meta.timestamp >= (uint64_t) counter); tscount_diff = meta.timestamp - (uint64_t) counter; printf("\nTest case: Gap=%"PRIu64" samples, Read size=%u, %u iterations\n", t->gap, t->read_size, t->iterations); printf("--------------------------------------------------------\n"); printf(" Intial timestamp: 0x%"PRIx64"\n", meta.timestamp); printf(" Timestamp-counter difference: %"PRIu64"\n", tscount_diff); /* Start 250ms in the future */ meta.timestamp += p->samplerate / 4; for (i = 0; i < t->iterations && status == 0 && pass; i++) { assert(t->gap >= t->read_size); meta.timestamp += t->gap; status = bladerf_sync_rx(dev, samples, t->read_size, &meta, p->timeout_ms); if (status != 0) { fprintf(stderr, "RX #%u @ 0x%"PRIx64" failed: %s\n", i, meta.timestamp, bladerf_strerror(status)); pass = false; } else if (meta.status & BLADERF_META_STATUS_OVERRUN) { discont++; fprintf(stderr, "RX overrun in read @ t=0x%"PRIu64 ". Got %u samples.\n", meta.timestamp, meta.actual_count); } assert((meta.timestamp - tscount_diff) <= UINT32_MAX); if (!counter_data_is_valid(samples, meta.actual_count, (uint32_t) (meta.timestamp - tscount_diff))) { pass = false; } else { counter += (unsigned int) t->gap; } } if (!pass) { printf("Test failed.\n"); } else if (discont != 0) { printf("Test failed due to discontinuities.\n"); } else { printf("Test passed.\n"); } out: status_out = bladerf_enable_module(dev, BLADERF_MODULE_RX, false); if (status_out != 0) { fprintf(stderr, "Failed to disable RX module: %s\n", bladerf_strerror(status)); } status = first_error(status, status_out); status_out = enable_counter_mode(dev, false); status = first_error(status, status_out); return status; } int test_fn_rx_scheduled(struct bladerf *dev, struct app_params *p) { int status = 0; int16_t *samples; size_t i; const struct test_case *case_to_run = (p->fast_test) ? fast_tests : tests; samples = malloc(p->buf_size * 2 * sizeof(int16_t)); if (samples == NULL) { perror("malloc"); return BLADERF_ERR_MEM; } for (i = 0; i < ARRAY_SIZE(tests) && status == 0; i++) { status = run(dev, p, samples, &case_to_run[i]); } free(samples); return status; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_timestamps/src/test_timestamps.c000066400000000000000000000142341457144405000305600ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include #include #include #include "test_timestamps.h" int perform_sync_init(struct bladerf *dev, bladerf_module module, unsigned int buf_size, struct app_params *p) { int status; if (buf_size == 0) { buf_size = p->buf_size; } status = bladerf_sync_config(dev, module, BLADERF_FORMAT_SC16_Q11_META, p->num_buffers, buf_size, p->num_xfers, p->timeout_ms); if (status != 0) { fprintf(stderr, "Failed to configure %s sync i/f: %s\n", module == BLADERF_MODULE_RX ? "RX" : "TX", bladerf_strerror(status)); } else { status = bladerf_enable_module(dev, module, true); if (status != 0) { fprintf(stderr, "Failed to enable %s module: %s\n", module == BLADERF_MODULE_RX ? "RX" : "TX", bladerf_strerror(status)); } } return status; } int enable_counter_mode(struct bladerf *dev, bool enable) { int status; uint32_t regval; status = bladerf_config_gpio_read(dev, ®val); if (status != 0) { fprintf(stderr, "Failed to read FPGA GPIO config: %s\n", bladerf_strerror(status)); } else { if (enable) { regval |= BLADERF_GPIO_COUNTER_ENABLE; } else { regval &= ~BLADERF_GPIO_COUNTER_ENABLE; } status = bladerf_config_gpio_write(dev, regval); if (status != 0) { fprintf(stderr, "Failed to write FPGA GPIO config: %s\n", bladerf_strerror(status)); } } return status; } bool counter_data_is_valid(int16_t *samples, size_t n_samples, uint32_t ctr) { size_t i; for (i = 0; i < 2 * n_samples; i += 2, ctr++) { const uint32_t val = extract_counter_val((uint8_t*) &samples[i]); if (val != ctr) { fprintf(stderr, "Invalid counter value @ sample %"PRIu64". " "Expected 0x%"PRIx32", got 0x%"PRIx32"\n", (uint64_t) i, ctr, val); return false; } } return true; } int test_fn_txrx_hwloop(struct bladerf *dev, struct app_params *p) { int status = 0; char cwd[256]; char dev_tx[128] = "\0"; char dev_rx[128] = "\0"; char test_cmd[256] = "/output/libbladeRF_test_txrx_hwloop\0"; int cmd = 0; size_t i = 0; bool skip_print = false; bool user_input_complete = false; if(getcwd(cwd, sizeof(cwd)) == NULL) { fprintf(stderr, "[Error] Can't get current directory\n"); return -1; }; while (cmd != 'q' && status == 0 && user_input_complete == false) { if (!skip_print) { printf("\nTest %u\n", (unsigned int) i + 1); printf("---------------------------------\n"); printf("Test setup\n"); printf(" t - TX bladeRF device string.\n"); printf(" r - RX bladeRF device string.\n"); printf(" b - Number of samples in a burst.\n"); printf(" p - Length between timestamps in samples.\n"); printf(" f - %% of burst to fill with [2000,2000].\n"); printf(" others set to [0,0].\n"); printf(" l - Enables RX device for TX capture.\n"); printf(" c - Outputs CSV RX capture from TX device.\n"); printf(" for multi-device fill comparison.\n"); printf(" i - Number of pulses.\n"); printf(" q - (Q)uit.\n\n"); if (strcmp(dev_tx,"\0") == 0 && strcmp(dev_rx,"\0") != 0) { printf("TX device string required\n"); } else if (strcmp(dev_rx,"\0") == 0 && strcmp(dev_tx, "\0") != 0) { printf("RX device string required\n"); } printf("> "); } skip_print = false; cmd = getchar(); switch (cmd) { case 'q': break; case 't': while(scanf("%s", dev_tx) == 0); break; case 'r': while(scanf("%s", dev_rx) == 0); break; case '\r': case '\n': skip_print = true; break; default: break; } if (strcmp(dev_tx, "\0") != 0 && strcmp(dev_rx, "\0") != 0) { user_input_complete = true; strcat(test_cmd, " -t \""); strcat(test_cmd, dev_tx); strcat(test_cmd, "\""); strcat(test_cmd, " -r \""); strcat(test_cmd, dev_rx); strcat(test_cmd, "\""); } } status = system(strcat(cwd, test_cmd)); if (status == -1) { fprintf(stderr, "hwloop test failed to run: system err: %i\n", status); status = BLADERF_ERR_UNEXPECTED; return status; } return status; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_timestamps/src/test_timestamps.h000066400000000000000000000071151457144405000305650ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef TEST_TIMESTAMPS_H_ #define TEST_TIMESTAMPS_H_ #include #include "test_common.h" #define DEFAULT_SAMPLERATE 1000000 struct app_params { char *device_str; unsigned int samplerate; char *test_name; uint64_t prng_seed; uint64_t prng_state; unsigned int num_buffers; unsigned int num_xfers; unsigned int buf_size; // In samples unsigned int timeout_ms; bool fast_test; }; /** * Initialize and the specified module for sync operation, with the settings * specified in the app_params structure. * * @param dev Device handle * @param module Module to initialize * @param buf_size Size of buffer to use. If 0, this value will * be extracted from the application parameters. * @param p Application parameters * * @return 0 on success, non-zero on failure */ int perform_sync_init(struct bladerf *dev, bladerf_module module, unsigned int buf_size, struct app_params *p); /** * Enable/disable the FPGA's counter mode * * @param dev Device handle * @param enable Set true to enable, false to disable * * @return 0 on success, non-zero on failure */ int enable_counter_mode(struct bladerf *dev, bool enable); /** * Validate the contents of a sample buffer generated by the FPGA in counter * mode * * @param[in] samples Sample buffer * @param[in] n_samples Size of `samples`, in units of samples * @param[in] ctr Expected counter value for the start of * the provided sample block * * @return true if valid, false otherwise */ bool counter_data_is_valid(int16_t *samples, size_t n_samples, uint32_t ctr); /** * Get the earlier of two error codes * * @return */ static inline int first_error(int earlier_status, int later_status) { return earlier_status == 0 ? later_status : earlier_status; } static inline uint32_t extract_counter_val(uint8_t *samples) { #if BLADERF_BIG_ENDIAN const uint32_t val = LE32_TO_HOST(((uint32_t *)samples)[0]); #else //const uint32_t val = (samples[1] << 16) | samples[0]; const uint32_t val = ((uint32_t *)samples)[0]; #endif return val; } #endif /** * Test function impersonation of txrx_hwloop standalone test * * @return 0 on success, non-zero on failure */ int test_fn_txrx_hwloop(struct bladerf *dev, struct app_params *p); bladeRF-2024.05/host/libraries/libbladeRF_test/test_timestamps/src/test_tx_gmsk_bursts.c000066400000000000000000000267061457144405000314570ustar00rootroot00000000000000/* * This test sends some GMSK bursts. The output should be verified with a * spectrum analyze, preferably one able quantify phase and freq error. * * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include #include #include #include #include #include #include "test_timestamps.h" #include "gmsk_burst.h" struct settings { struct bladerf_rational_rate sample_rate; uint64_t frequency; unsigned int bandwidth, timeout_ms; int txvga1, txvga2; }; enum tx_mode { TX_MODE_SCHEDULED_BURST, TX_MODE_NOW_FLAG, TX_MODE_UPDATE_TIMESTAMP_FLAG, }; static int backup_settings(struct bladerf *dev, struct app_params *p, struct settings *s) { int status; printf("\nBacking up device settings...\n"); s->timeout_ms = p->timeout_ms; printf(" Stream timeout: %u ms\n", p->timeout_ms); status = bladerf_get_frequency(dev, BLADERF_MODULE_TX, &s->frequency); if (status != 0) { fprintf(stderr, "Failed to get frequency: %s\n", bladerf_strerror(status)); return status; } printf(" Frequency: %"PRIu64"\n", s->frequency); status = bladerf_get_rational_sample_rate(dev, BLADERF_MODULE_TX, &s->sample_rate); if (status != 0) { fprintf(stderr, "Failed to get sample rate: %s\n", bladerf_strerror(status)); return status; } else { printf(" Samplerate %"PRIu64" %"PRIu64"/%"PRIu64"\n", s->sample_rate.integer, s->sample_rate.num, s->sample_rate.den); } status = bladerf_get_bandwidth(dev, BLADERF_MODULE_TX, &s->bandwidth); if (status != 0) { fprintf(stderr, "Failed to get bandwidth: %s\n", bladerf_strerror(status)); return status; } else { printf(" Bandwidth: %u\n", s->bandwidth); } status = bladerf_get_txvga1(dev, &s->txvga1); if (status != 0) { fprintf(stderr, "Failed to get txvga1: %s\n", bladerf_strerror(status)); return status; } else { printf(" TXVGA1: %d\n", s->txvga1); } status = bladerf_get_txvga2(dev, &s->txvga2); if (status != 0) { fprintf(stderr, "Failed to get txvga2: %s\n", bladerf_strerror(status)); return status; } else { printf(" TXVGA2: %d\n", s->txvga2); } return status; } static int setup_device(struct bladerf *dev, struct app_params *p) { int status; struct bladerf_rational_rate sample_rate = GMSK_SAMPLERATE_INITIALIZER; const uint64_t frequency = 1000000000; const unsigned int bandwidth = 1500000; const int txvga1 = -15; const int txvga2 = 0; printf("\nApplying device settings...\n"); p->timeout_ms = 2500; printf(" Stream timeout: %u ms\n", p->timeout_ms); status = bladerf_set_frequency(dev, BLADERF_MODULE_TX, frequency); if (status != 0) { fprintf(stderr, "Failed to set frequency: %s\n", bladerf_strerror(status)); return status; } else { printf(" Frequency: %"PRIu64"\n", frequency); } status = bladerf_set_rational_sample_rate(dev, BLADERF_MODULE_TX, &sample_rate, NULL); if (status != 0) { fprintf(stderr, "Failed to set sample rate: %s\n", bladerf_strerror(status)); return status; } else { printf(" Samplerate %"PRIu64" %"PRIu64"/%"PRIu64"\n", sample_rate.integer, sample_rate.num, sample_rate.den); } status = bladerf_set_bandwidth(dev, BLADERF_MODULE_TX, bandwidth, NULL); if (status != 0) { fprintf(stderr, "Failed to set bandwidth: %s\n", bladerf_strerror(status)); return status; } else { printf(" Bandwidth: %u\n", bandwidth); } status = bladerf_set_txvga1(dev, txvga1); if (status != 0) { fprintf(stderr, "Failed to set TXVGA1: %s\n", bladerf_strerror(status)); return status; } else { printf(" TXVGA1: %d\n", txvga1); } status = bladerf_set_txvga2(dev, txvga2); if (status != 0) { fprintf(stderr, "Failed to set TXVGA2: %s\n", bladerf_strerror(status)); return status; } else { printf(" TXVGA2: %d\n", txvga2); } return status; } static int restore_settings(struct bladerf *dev, struct app_params *p, struct settings *s) { int status, error = 0; printf("\nRestoring settings...\n"); p->timeout_ms = s->timeout_ms; printf(" Stream timeout: %u\n", p->timeout_ms); status = bladerf_set_frequency(dev, BLADERF_MODULE_TX, s->frequency); if (status != 0) { fprintf(stderr, "Failed to set frequency: %s\n", bladerf_strerror(status)); return status; } else { printf(" Frequency: %"PRIu64"\n", s->frequency); } status = bladerf_set_rational_sample_rate(dev, BLADERF_MODULE_TX, &s->sample_rate, NULL); if (status != 0) { error = first_error(status, error); fprintf(stderr, "Failed to set sample rate: %s\n", bladerf_strerror(status)); } else { printf(" Samplerate %"PRIu64" %"PRIu64"/%"PRIu64"\n", s->sample_rate.integer, s->sample_rate.num, s->sample_rate.den); } status = bladerf_set_bandwidth(dev, BLADERF_MODULE_TX, s->bandwidth, NULL); if (status != 0) { error = first_error(status, error); fprintf(stderr, "Failed to set bandwidth: %s\n", bladerf_strerror(status)); } else { printf(" Bandwidth: %u\n", s->bandwidth); } status = bladerf_set_txvga1(dev, s->txvga1); if (status != 0) { error = first_error(status, error); fprintf(stderr, "Failed to set txvga1: %s\n", bladerf_strerror(status)); } else { printf(" TXVGA1: %d\n", s->txvga1); } status = bladerf_set_txvga2(dev, s->txvga2); if (status != 0) { error = first_error(status, error); fprintf(stderr, "Failed to set txvga2: %s\n", bladerf_strerror(status)); } else { printf(" TXVGA2: %d\n", s->txvga2); } return error; } static int transmit_bursts(struct bladerf *dev, struct app_params *p, enum tx_mode mode) { int status, status_out; unsigned int i; struct bladerf_metadata meta; int16_t *samples; unsigned int to_tx; const unsigned int burst_len = (unsigned int) ARRAY_SIZE(gmsk_burst) / 2; const unsigned int buf_len = (burst_len / 1024) * 1024 + 1024; const unsigned int iterations = 10000; assert(burst_len < 5000); samples = calloc(5000, 2 * sizeof(int16_t)); if (samples == NULL) { perror("calloc"); return -1; } memcpy(samples, gmsk_burst, burst_len * 2 * sizeof(int16_t)); printf("\nTransmitting scheduled bursts (%u iterations)...\n", iterations); memset(&meta, 0, sizeof(meta)); meta.flags = BLADERF_META_FLAG_TX_BURST_START; if (mode != TX_MODE_UPDATE_TIMESTAMP_FLAG) { meta.flags |= BLADERF_META_FLAG_TX_BURST_END; } status = perform_sync_init(dev, BLADERF_MODULE_TX, buf_len, p); if (status != 0) { goto out; } if (mode == TX_MODE_NOW_FLAG) { meta.flags |= BLADERF_META_FLAG_TX_NOW; /* Use a value that would induce timeouts if the API were to actually * use this value in any way */ meta.timestamp = 0xfedcba9896543210; to_tx = 5000; } else { status = bladerf_get_timestamp(dev, BLADERF_MODULE_TX, &meta.timestamp); if (status != 0) { fprintf(stderr, "Failed to get timestamp: %s\n", bladerf_strerror(status)); goto out; } else { printf(" Initial timestamp: 0x%016"PRIx64"\n", meta.timestamp); } /* Start 1M samples in */ meta.timestamp += 1000000; to_tx = burst_len; } for (i = status = 0; i < iterations && status == 0; i++) { if (mode == TX_MODE_UPDATE_TIMESTAMP_FLAG) { if (i != 0) { /* Use the "Update timestamp" flag on everything after the * first iteration */ meta.flags = BLADERF_META_FLAG_TX_UPDATE_TIMESTAMP; } if (i == (iterations - 1)) { /* End the burst on the last iteration */ meta.flags |= BLADERF_META_FLAG_TX_BURST_END; } } status = bladerf_sync_tx(dev, samples, to_tx, &meta, p->timeout_ms); if (status != 0) { fprintf(stderr, "TX failed at iteration %u: %s\n", i, bladerf_strerror(status)); } if (mode != TX_MODE_NOW_FLAG) { /* Distance between beginning of each burst is 5k samples */ meta.timestamp += 5000 - burst_len; } } /* 2 seconds should be sufficient to ensure our samples have been * transmitted */ usleep(2000000); out: status_out = bladerf_enable_module(dev, BLADERF_MODULE_TX, false); status = first_error(status, status_out); free(samples); return status; } int test_fn_tx_gmsk_bursts(struct bladerf *dev, struct app_params *p) { int status, status_restore; struct settings dev_settings; enum tx_mode mode; int c = 0; printf("Enter one of the following:\n" " 's' to use scheduled bursts\n" " 'n' to use the TX_NOW flag\n" " 'u' to use the UPDATE_TIMESTAMP flag\n\n"); printf("> "); c = getchar(); switch (c) { case 's': case 'S': mode = TX_MODE_SCHEDULED_BURST; break; case 'n': case 'N': mode = TX_MODE_NOW_FLAG; break; case 'u': case 'U': mode = TX_MODE_UPDATE_TIMESTAMP_FLAG; break; default: fprintf(stderr, "Invalid option: %c\n", (char) c); return -1; } status = backup_settings(dev, p, &dev_settings); if (status != 0) { return status; } status = setup_device(dev, p); if (status == 0) { status = transmit_bursts(dev, p, mode); } status_restore = restore_settings(dev, p, &dev_settings); if (status != 0) { status = first_error(status, status_restore); } return status; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_timestamps/src/test_tx_onoff.c000066400000000000000000000166011457144405000302140ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include #include #include #include #include #include #include "test_timestamps.h" #include "minmax.h" /* This test requires external verification via a spectrum analyzer. * It simply transmits ON/OFF bursts, and is more intended to ensure the API * functions aren't bombing out than it is to exercise signal integrity/timing. */ #define MAGNITUDE 2000 struct test_case { unsigned int buf_len; unsigned int burst_len; /* Length of a burst, in samples */ unsigned int gap_len; /* Gap between bursts, in samples */ unsigned int iterations; }; static const struct test_case tests[] = { { 1024, 16, 1024, 128}, { 1024, 128, 1024, 32 }, { 1024, 1006, 1024, 16 }, { 1024, 2048, 1024, 10 }, { 1024, 2048, 2048, 10 }, { 1024, 2048, 4096, 10 }, { 1024, 5000, 3000, 5 }, { 1024, 10000, 5000, 5 }, { 2048, 16, 2048, 128}, { 2048, 128, 2048, 32 }, { 2048, 1006, 2048, 16 }, { 2048, 2048, 2048, 10 }, { 2048, 2048, 2048, 10 }, { 2048, 2048, 4096, 10 }, { 2048, 5000, 3000, 5 }, { 2048, 10000, 5000, 5 }, { 16384, 16, 16384, 10 }, { 16384, 128, 16384, 10 }, { 16384, 1006, 16384, 16 }, { 2048, 2048, 16384, 10 }, { 2048, 2048, 16384, 10 }, { 2048, 2048, 16384, 10 }, { 2048, 5000, 19000, 5 }, { 2048, 10000, 25000, 5 }, }; static int run(struct bladerf *dev, struct app_params *p, const struct test_case *t) { int status, status_out, status_wait; unsigned int samples_left; size_t i; struct bladerf_metadata meta; int16_t *samples, *buf; samples = calloc(2 * sizeof(int16_t), t->burst_len + 2); if (samples == NULL) { perror("malloc"); return BLADERF_ERR_MEM; } /* Leave the last two samples zero */ for (i = 0; i < (2 * t->burst_len); i += 2) { samples[i] = samples[i + 1] = MAGNITUDE; } memset(&meta, 0, sizeof(meta)); status = perform_sync_init(dev, BLADERF_MODULE_TX, t->buf_len, p); if (status != 0) { goto out; } status = bladerf_get_timestamp(dev, BLADERF_MODULE_TX, &meta.timestamp); if (status != 0) { fprintf(stderr, "Failed to get timestamp: %s\n", bladerf_strerror(status)); goto out; } else { printf("Initial timestamp: 0x%016"PRIx64"\n", meta.timestamp); } meta.timestamp += 200000; for (i = 0; i < t->iterations && status == 0; i++) { meta.flags = BLADERF_META_FLAG_TX_BURST_START; samples_left = t->burst_len + 2; buf = samples; printf("Sending burst @ %"PRIu64"\n", meta.timestamp); while (samples_left && status == 0) { unsigned int to_send = uint_min(p->buf_size, samples_left); if (to_send == samples_left) { meta.flags |= BLADERF_META_FLAG_TX_BURST_END; } else { meta.flags &= ~BLADERF_META_FLAG_TX_BURST_END; } status = bladerf_sync_tx(dev, buf, to_send, &meta, 10000); //p->timeout_ms); if (status != 0) { fprintf(stderr, "TX failed @ iteration (%u) %s\n", (unsigned int )i, bladerf_strerror(status)); } meta.flags &= ~BLADERF_META_FLAG_TX_BURST_START; samples_left -= to_send; buf += 2 * to_send; } meta.timestamp += (t->burst_len + t->gap_len - 2); } printf("Waiting for samples to finish...\n"); fflush(stdout); /* Wait for samples to be transmitted before shutting down the TX module */ status_wait = wait_for_timestamp(dev, BLADERF_MODULE_TX, meta.timestamp - t->gap_len + 2, 3000); if (status_wait != 0) { status = first_error(status, status_wait); fprintf(stderr, "Failed to wait for TX to finish: %s\n", bladerf_strerror(status_wait)); } out: status_out = bladerf_enable_module(dev, BLADERF_MODULE_TX, false); if (status_out != 0) { fprintf(stderr, "Failed to disable TX module: %s\n", bladerf_strerror(status)); } else { printf("Done waiting.\n"); fflush(stdout); } status = first_error(status, status_out); free(samples); return status; } int test_fn_tx_onoff(struct bladerf *dev, struct app_params *p) { int status = 0; size_t i; int cmd = 0; bool skip_print = false; i = 0; while (cmd != 'q' && i < ARRAY_SIZE(tests) && status == 0) { assert((tests[i].burst_len + tests[i].gap_len) >= tests[i].buf_len); if (!skip_print) { printf("\nTest %u\n", (unsigned int) i + 1); printf("---------------------------------\n"); printf("Buffer length: %u\n", tests[i].buf_len); printf("Burst length: %u\n", tests[i].burst_len); printf("Gap length: %u\n", tests[i].gap_len); printf("Iterations: %u\n", tests[i].iterations); printf("\n"); printf("Select one of the following:\n"); printf(" s - (S)kip this test.\n"); printf(" p - Go to the (p)revious test.\n"); printf(" r - (R)un and increment to the next test\n"); printf(" t - Run and return to (t)his test.\n"); printf(" q - (Q)uit.\n"); printf("\n> "); } skip_print = false; cmd = getchar(); switch (cmd) { case 'q': break; case 't': status = run(dev, p, &tests[i]); break; case 'r': status = run(dev, p, &tests[i]); i++; break; case 's': i++; break; case 'p': if (i >= 1) { i--; } break; case '\r': case '\n': skip_print = true; break; default: break; } } return status; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_timestamps/src/test_tx_onoff_nowsched.c000066400000000000000000000117421457144405000321070ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2014 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ /* This test excercises switching between TX_NOW and scheduled TX's */ #include #include #include #include #include #include "test_timestamps.h" #include "minmax.h" struct test_data { int16_t *burst1; int16_t *burst2; unsigned int gap_us; unsigned int gap_samples; unsigned int num_iterations; unsigned int burst_len; }; static int send_bursts(struct bladerf *dev, struct app_params *p, struct test_data *t) { int status = 0; unsigned int i; struct bladerf_metadata meta; uint64_t curr_time, next_time; memset(&meta, 0, sizeof(meta)); usleep(250); for (i = 0; i < t->num_iterations; i++) { meta.timestamp = 0; meta.flags = BLADERF_META_FLAG_TX_BURST_START | BLADERF_META_FLAG_TX_NOW | BLADERF_META_FLAG_TX_BURST_END; status = bladerf_sync_tx(dev, t->burst1, t->burst_len, &meta, 2 * p->timeout_ms); if (status != 0) { fprintf(stderr, "TX_NOW @ iteration %u failed: %s\n", i, bladerf_strerror(status)); return status; } status = bladerf_get_timestamp(dev, BLADERF_MODULE_TX, &meta.timestamp); if (status != 0) { fprintf(stderr, "Failed to get current timestamp: %s\n", bladerf_strerror(status)); return status; } meta.timestamp += t->gap_samples; meta.flags = BLADERF_META_FLAG_TX_BURST_START | BLADERF_META_FLAG_TX_BURST_END; status = bladerf_sync_tx(dev, t->burst2, t->burst_len, &meta, 2 * p->timeout_ms); if (status != 0) { fprintf(stderr, "Scheduled TX @ iteration %u failed: %s\n", i, bladerf_strerror(status)); return status; } curr_time = meta.timestamp; next_time = curr_time + t->gap_samples + t->burst_len; do { status = bladerf_get_timestamp(dev, BLADERF_MODULE_TX, &curr_time); if (status != 0) { fprintf(stderr, "Failed to get current timestamp: %s\n", bladerf_strerror(status)); return status; } } while (curr_time < next_time); } return status; } int test_fn_tx_onoff_nowsched(struct bladerf *dev, struct app_params *p) { int status, enable_status; struct test_data test; unsigned int i; memset(&test, 0, sizeof(test)); test.num_iterations = 100; test.burst_len = 200; test.gap_us = 2000; test.gap_samples = (unsigned int) ((uint64_t)p->samplerate * test.gap_us / 1000000); test.burst1 = calloc(test.burst_len * 2, sizeof(int16_t)); if (test.burst1 == NULL) { return BLADERF_ERR_MEM; } test.burst2 = calloc(test.burst_len * 2, sizeof(int16_t)); if (test.burst2 == NULL) { free(test.burst1); return BLADERF_ERR_MEM; } /* Leave two samples at the end at zero values, as this is required at * the end of a burst */ for (i = 0; i < (test.burst_len - 2) * 2; i += 2) { test.burst1[i] = 500; test.burst1[i + 1] = 500; test.burst2[i] = 2000; test.burst2[i + 1] = 2000; } status = perform_sync_init(dev, BLADERF_MODULE_TX, 1024, p); if (status == 0) { status = send_bursts(dev, p, &test); } enable_status = bladerf_enable_module(dev, BLADERF_MODULE_TX, false); if (enable_status != 0) { fprintf(stderr, "Failed to disable TX module: %s\n", bladerf_strerror(status)); if (status == 0) { status = enable_status; } } free(test.burst1); free(test.burst2); return status; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_timestamps/src/test_tx_pulse.c000066400000000000000000000140231457144405000302310ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2023 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include #include #include #include #include #include #include "test_timestamps.h" #include "minmax.h" #ifdef _WIN32 #include "gettimeofday.h" #else #include #endif /* This test requires external verification via a spectrum analyzer. * It simply transmits ON/OFF bursts, and is more intended to ensure the API * functions aren't bombing out than it is to exercise signal integrity/timing. */ #define MAGNITUDE 2000 struct test_case { unsigned int buf_len; unsigned int burst_len; /* Length of a burst, in samples */ unsigned int iterations; }; static void init_app_params(struct app_params *p) { memset(p, 0, sizeof(p[0])); p->samplerate = 1e6; p->prng_seed = 1; p->num_buffers = 16; p->num_xfers = 8; p->buf_size = 64 * 1024; p->timeout_ms = 10000; } int main(int argc, char *argv[]) { struct app_params p; struct bladerf *dev = NULL; int status, status_out, status_wait; unsigned int samples_left; size_t i; struct bladerf_metadata meta; int16_t *samples, *buf; struct timeval start, end; double time_passed; struct test_case test; test.buf_len = 2048; test.burst_len = 100e3; unsigned int num_zero_samples = 1e3; test.iterations = 10; init_app_params(&p); p.buf_size = test.burst_len + num_zero_samples; samples = calloc(2 * sizeof(int16_t), test.burst_len + num_zero_samples); if (samples == NULL) { perror("malloc"); return BLADERF_ERR_MEM; } status = bladerf_open(&dev, p.device_str); if (status != 0) { fprintf(stderr, "Failed to open device: %s\n", bladerf_strerror(status)); goto out; } status = bladerf_set_sample_rate(dev, BLADERF_MODULE_TX, p.samplerate, NULL); if (status != 0) { fprintf(stderr, "Failed to set TX sample rate: %s\n", bladerf_strerror(status)); goto out; } /* Leave the last two samples zero */ for (i = 0; i < (2 * test.burst_len); i += 2) { samples[i] = samples[i + 1] = MAGNITUDE; } memset(&meta, 0, sizeof(meta)); status = perform_sync_init(dev, BLADERF_MODULE_TX, test.buf_len, &p); if (status != 0) { goto out; } status = bladerf_set_frequency(dev, BLADERF_MODULE_TX, 900e6); if (status != 0) { fprintf(stderr, "Failed to set TX frequency: %s\n", bladerf_strerror(status)); goto out; } status = bladerf_get_timestamp(dev, BLADERF_MODULE_TX, &meta.timestamp); if (status != 0) { fprintf(stderr, "Failed to get timestamp: %s\n", bladerf_strerror(status)); goto out; } else { printf("Initial timestamp: 0x%016"PRIx64"\n", meta.timestamp); } meta.timestamp += 200000; gettimeofday(&start, NULL); for (i = 0; i < test.iterations && status == 0; i++) { meta.flags = BLADERF_META_FLAG_TX_BURST_START; samples_left = test.burst_len + num_zero_samples; buf = samples; printf("Sending burst @ %"PRIu64"\n", meta.timestamp); while (samples_left && status == 0) { unsigned int to_send = uint_min(p.buf_size, samples_left); if (to_send == samples_left) { meta.flags |= BLADERF_META_FLAG_TX_BURST_END; } else { meta.flags &= ~BLADERF_META_FLAG_TX_BURST_END; } status = bladerf_sync_tx(dev, buf, to_send, &meta, 10000); //p->timeout_ms); if (status != 0) { fprintf(stderr, "TX failed @ iteration (%u) %s\n", (unsigned int )i, bladerf_strerror(status)); } meta.flags &= ~BLADERF_META_FLAG_TX_BURST_START; samples_left -= to_send; buf += 2 * to_send; } meta.timestamp += p.samplerate; } printf("Waiting for samples to finish...\n"); fflush(stdout); /* Wait for samples to be transmitted before shutting down the TX module */ status_wait = wait_for_timestamp(dev, BLADERF_MODULE_TX, meta.timestamp, 3000); if (status_wait != 0) { status = first_error(status, status_wait); fprintf(stderr, "Failed to wait for TX to finish: %s\n", bladerf_strerror(status_wait)); } gettimeofday(&end, NULL); time_passed = (end.tv_sec - start.tv_sec) + (end.tv_usec - end.tv_usec) / 1000000.0; printf("TX finished in %.4f seconds\n", time_passed); out: status_out = bladerf_enable_module(dev, BLADERF_MODULE_TX, false); if (status_out != 0) { fprintf(stderr, "Failed to disable TX module: %s\n", bladerf_strerror(status)); } else { printf("Done waiting.\n"); fflush(stdout); } status = first_error(status, status_out); free(samples); return status; }bladeRF-2024.05/host/libraries/libbladeRF_test/test_timestamps/src/test_txrx_hwloop.c000066400000000000000000000231601457144405000307650ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2023 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include #include #include #include #include #include #include #include #include "conversions.h" #include "test_timestamps.h" #include "test_txrx_hwloop.h" #include "minmax.h" #ifdef _WIN32 #include "gettimeofday.h" #else #include #endif /* This test requires external verification via a spectrum analyzer. * It simply transmits ON/OFF bursts, and is more intended to ensure the API * functions aren't bombing out than it is to exercise signal integrity/timing. */ #define MAGNITUDE 2000 static void init_app_params(struct app_params *p, struct test_case *tc) { memset(tc, 0, sizeof(tc[0])); tc->just_tx = true; tc->compare = false; tc->frequency = 900e6; tc->dev_tx_str = malloc(100); tc->dev_rx_str = malloc(100); strcpy(tc->dev_tx_str, "*:serial=52f4b4c4e1164ce3a7b89d3e47c8c0e8"); strcpy(tc->dev_rx_str, "*:serial=96707f3c6ffcba3fcea7f8ae85c04178"); tc->iterations = 10; tc->fill = 50; //percent tc->init_ts_delay = 200000; tc->gain = 30; memset(p, 0, sizeof(p[0])); p->samplerate = 1e6; p->prng_seed = 1; p->num_buffers = 16; p->num_xfers = 8; p->buf_size = 2048; p->timeout_ms = 10000; // Interdependencies tc->period = p->samplerate; tc->burst_len = tc->period/2; } int main(int argc, char *argv[]) { struct app_params p; struct test_case test; struct bladerf *dev_tx = NULL; struct bladerf *dev_rx = NULL; int status, status_out, status_wait; unsigned int samples_left; size_t i; struct bladerf_metadata meta; int16_t *samples, *buf; struct timeval start, end; double time_passed; int opt_ind = 0; bool ok; char* optstr; int c; bladerf_log_level log_level; /** Threading */ pthread_t thread_rx; pthread_t thread_loopcompare; thread_args args_loopbackcompare; thread_args args_rx; init_app_params(&p, &test); memset(&meta, 0, sizeof(meta)); optstr = getopt_str(long_options); while ((c = getopt_long(argc, argv, optstr, long_options, &opt_ind)) >= 0) { switch (c) { case 't': strcpy(test.dev_tx_str, optarg); break; case 'r': strcpy(test.dev_rx_str, optarg); break; case 's': p.samplerate = str2uint(optarg, 0, UINT32_MAX, &ok); if (!ok) { fprintf(stderr, "Invalid sample rate: %s\n", optarg); return -1; } break; case 'b': test.burst_len = str2uint(optarg, 0, UINT32_MAX, &ok); if (!ok) { fprintf(stderr, "Invalid burst length: %s\n", optarg); return -1; } break; case 'p': test.period = str2uint(optarg, 0, UINT32_MAX, &ok); if (!ok) { fprintf(stderr, "Invalid period: %s\n", optarg); return -1; } break; case 'f': test.fill = str2uint(optarg, 0, 100, &ok); if (!ok) { fprintf(stderr, "Invalid fill: %s\n", optarg); return -1; } break; case 'l': test.just_tx = false; break; case 'c': test.compare = true; break; case 'i': test.iterations = str2uint(optarg, 1, UINT32_MAX, &ok); if (!ok) { fprintf(stderr, "Invalid number of iterations %s\n", optarg); return -1; } break; case 'v': log_level = str2loglevel(optarg, &ok); if (!ok) { fprintf(stderr, "[ERROR] Invalid log level provided: %s\n", optarg); return -1; } bladerf_log_set_verbosity(log_level); break; case 'h': usage(); return 1; default: return -1; break; } } /** Parameter conflict management */ if (test.burst_len > test.period) { fprintf(stderr, "[ERROR] Burst length must be less than period\n"); return -1; } printf("Fill: %u%%\n", test.fill); printf("Burst: %3.3fk samples || %2.3fs\n", test.burst_len/1e3, (float)test.burst_len/p.samplerate); printf("Period: %3.3fk samples || %2.3fs\n", test.period/1e3, (float)test.period/p.samplerate); printf("Gap: %3.3fk samples || %2.3fms\n", (test.period - test.burst_len)/1e3, (test.period - test.burst_len)*1e3/p.samplerate); printf("Sample Rate: %3.3f MSPS\n", p.samplerate/1e6); printf("\n"); samples = calloc(test.burst_len, 2 * sizeof(int16_t)); if (samples == NULL) { perror("malloc"); return BLADERF_ERR_MEM; } for (i = 0; i < (2 * test.burst_len * test.fill/100); i += 2) { samples[i] = samples[i + 1] = MAGNITUDE; } status = init_devices(&dev_tx, &dev_rx, &p, &test); if (status < 0) { fprintf(stderr, "Error initializing devices: %s\n", bladerf_strerror(status)); goto out; } status = bladerf_get_timestamp(dev_tx, BLADERF_MODULE_TX, &meta.timestamp); if (status != 0) { fprintf(stderr, "Failed to get timestamp: %s\n", bladerf_strerror(status)); goto out; } else { printf("\nInitial timestamp: 0x%016"PRIx64"\n", meta.timestamp); } /** Timestamp to start pulse */ meta.timestamp += test.init_ts_delay; gettimeofday(&start, NULL); if (!test.just_tx) { args_rx.is_rx_device = true; args_rx.dev = dev_rx; args_rx.tc = &test; pthread_create(&thread_rx, NULL, rx_task, &args_rx); } if (test.compare == true) { args_loopbackcompare.is_rx_device = false; args_loopbackcompare.dev = dev_tx; args_loopbackcompare.tc = &test; pthread_create(&thread_loopcompare, NULL, rx_task, &args_loopbackcompare); } for (i = 0; i < test.iterations && status == 0; i++) { meta.flags = BLADERF_META_FLAG_TX_BURST_START; samples_left = test.burst_len; buf = samples; printf("Sending burst @ %"PRIu64"\n", meta.timestamp); while (samples_left && status == 0) { unsigned int to_send = uint_min(p.buf_size, samples_left); if (to_send == samples_left) { meta.flags |= BLADERF_META_FLAG_TX_BURST_END; } else { meta.flags &= ~BLADERF_META_FLAG_TX_BURST_END; } status = bladerf_sync_tx(dev_tx, buf, to_send, &meta, 10000); //p->timeout_ms); if (status != 0) { fprintf(stderr, "TX failed @ iteration (%u) %s\n", (unsigned int )i, bladerf_strerror(status)); } meta.flags &= ~BLADERF_META_FLAG_TX_BURST_START; samples_left -= to_send; buf += 2 * to_send; } meta.timestamp += test.period; } printf("Waiting for samples to finish...\n"); fflush(stdout); /* Wait for samples to be transmitted before shutting down the TX module */ status_wait = wait_for_timestamp(dev_tx, BLADERF_MODULE_TX, meta.timestamp, 3000); if (status_wait != 0) { status = first_error(status, status_wait); fprintf(stderr, "Failed to wait for TX to finish: %s\n", bladerf_strerror(status_wait)); } gettimeofday(&end, NULL); time_passed = (end.tv_sec - start.tv_sec) + (end.tv_usec - end.tv_usec) / 1000000.0; printf("TX finished in %.4f seconds\n", time_passed); out: if (!test.just_tx) { pthread_join(thread_rx, NULL); bladerf_close(dev_rx); } if (test.compare) pthread_join(thread_loopcompare, NULL); status_out = bladerf_enable_module(dev_tx, BLADERF_MODULE_TX, false); if (status_out != 0) { fprintf(stderr, "Failed to disable TX module: %s\n", bladerf_strerror(status)); } else { printf("Done waiting.\n"); fflush(stdout); } status = first_error(status, status_out); bladerf_close(dev_tx); free(test.dev_tx_str); free(test.dev_rx_str); free(samples); return status; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_timestamps/src/test_txrx_hwloop.h000066400000000000000000000310461457144405000307740ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2023 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include "log.h" struct test_case { unsigned int burst_len; /* Length of a burst, in samples */ unsigned int iterations; unsigned int period; unsigned int fill; unsigned int init_ts_delay; bladerf_frequency frequency; bladerf_gain gain; char* dev_tx_str; char* dev_rx_str; bool just_tx; bool compare; }; static struct option const long_options[] = { { "txdev", required_argument, NULL, 't' }, { "rxdev", required_argument, NULL, 'r' }, { "samprate", required_argument, NULL, 's' }, { "burst", required_argument, NULL, 'b' }, { "compare", no_argument, NULL, 'c' }, { "period", required_argument, NULL, 'p' }, { "fill", required_argument, NULL, 'f' }, { "loop", no_argument, NULL, 'l' }, { "iterations", required_argument, NULL, 'i' }, { "verbosity", required_argument, NULL, 'v' }, { "help", no_argument, NULL, 'h' }, { NULL, 0, NULL, 0 }, }; char* getopt_str(const struct option* long_options) { size_t len = 0; for (const struct option* opt = long_options; opt->name; opt++) { len++; if (opt->has_arg == required_argument) { len++; } } char* opt_str = (char*) malloc((len + 1) * sizeof(char)); if (!opt_str) { return NULL; } int i = 0; for (const struct option* opt = long_options; opt->name; opt++) { opt_str[i++] = opt->val; if (opt->has_arg == required_argument) { opt_str[i++] = ':'; } } opt_str[i] = '\0'; return opt_str; } static void usage() { printf("TXRX Hardware Loop Test\n\n"); printf("Test configuration:\n"); printf(" -t, --txdev TX bladeRF device string.\n"); printf(" -r, --rxdev RX bladeRF device string.\n"); printf(" -s, --samprate Sample Rate\n"); printf(" -b, --burst Number of samples in a burst.\n"); printf(" -p, --period Length between timestamps in samples\n"); printf(" -f, --fill %% of burst to fill with [2000,2000]\n"); printf(" others set to [0,0]\n"); printf(" -l, --loop Enables RX device for TX capture\n"); printf(" -c, --compare Outputs CSV RX capture from TX device\n"); printf(" for multi-device fill comparison\n"); printf(" -i, --iterations Number of pulses\n"); printf("\n"); printf("Misc options:\n"); printf(" -h, --help Show this help text\n"); printf(" -v, --lib-verbosity Set libbladeRF verbosity (Default: warning)\n"); printf("\n"); printf("\n"); printf("Loop setup:\n"); printf(" A bladeRF device will TX into the other bladeRF device’s\n" " RX port over SMA and a 20dB attenuator. See the following\n" " tested config.\n\n"); printf(" bladeRF micro 2.0 TX -> 20dB att. -> SMA -> RX bladeRF x115\n"); printf("\n\n"); printf("Parameter Definitions:\n"); printf(" -------------------------------------------------------------------------------------------------------------\n"); printf(" | 50%% MAX MAX | 50%% 0 0 0 0 | <--- gap ---> | 50%% MAX MAX | 50%% 0 0 0 0 |\n"); printf(" -------------------------------------------------------------------------------------------------------------\n"); printf(" <---- fill -->\n"); printf(" <------------ burst ---------->\n"); printf(" <---------------------------------- period ----------------------->\n"); printf("\n"); printf("\n"); printf("Example:\n"); printf(" Generate a pulse using 50%% of a 50k sample burst every 100ms.\n"); printf(" Note: The sample rate is preset to 1MSPS.\n"); printf("\n"); printf(" ./libbladeRF_test_txrx_hwloop -f 50 -b 50000 -p 100000 --txdev \n"); printf("\n"); printf(" Burst of 1ms, fill 0.9ms, and periodicity is 50ms into the RX\n"); printf(" of another bladeRF device.\n"); printf("\n"); printf(" ./libbladeRF_test_txrx_hwloop --burst 1000 --fill 90 --period 50000 -l --txdev --rxdev \n"); printf("\n\n"); } int module_config_enable(struct bladerf *dev, bladerf_channel ch, struct test_case *test, struct app_params *params, bladerf_format sample_format) { int status; status = bladerf_set_frequency(dev, ch, test->frequency); if (status != 0) { log_error("Failed to set ch %d frequency = %" PRIu64 ": %s\n", ch, test->frequency, bladerf_strerror(status)); return status; } status = bladerf_set_sample_rate(dev, ch, params->samplerate, NULL); if (status != 0) { log_error("Failed to set ch %d sample rate = %u: %s\n", ch, sample_rate, bladerf_strerror(status)); return status; } status = bladerf_sync_config(dev, ch, sample_format, params->num_buffers, params->buf_size, params->num_xfers, params->timeout_ms); if (status != 0) { fprintf(stderr, "Failed to configure %s sync i/f: %s\n", channel2str(ch), bladerf_strerror(status)); return status; } status = bladerf_enable_module(dev, ch, true); if (status != 0) { fprintf(stderr, "Failed to enable %s module: %s\n", channel2str(ch), bladerf_strerror(status)); return status; } return 0; } int init_devices(struct bladerf** dev_tx, struct bladerf** dev_rx, struct app_params *p, struct test_case *tc) { int status; /** TX init */ status = bladerf_open(dev_tx, tc->dev_tx_str); if (status != 0) { fprintf(stderr, "Failed to open TX device: %s\n", bladerf_strerror(status)); fprintf(stderr, "↳ Most likely an incorrect device string.\n"); return status; } status = module_config_enable(*dev_tx, BLADERF_MODULE_TX, tc, p, BLADERF_FORMAT_SC16_Q11_META); if (status != 0) { fprintf(stderr, "Failed to configure module: %s\n", bladerf_strerror(status)); return status; } /** RX init */ if (tc->just_tx == false && tc->compare == true) { printf("Mode: TX -> RX (+RF loopback)\n"); printf(" +---------------+ +---------------+\n"); printf(" | TX Device TX|---┬-->|RX RX Device |\n"); printf(" | | | | |\n"); printf(" | RX|<--┘ | |\n"); printf(" +---------------+ +---------------+\n"); } else if (tc->just_tx == true && tc->compare == true) { printf("Mode: TX -> TX\n"); printf(" +---------------+ +---------------+\n"); printf(" | TX Device TX|---┬ |RX RX Device |\n"); printf(" | | | | |\n"); printf(" | RX|<--┘ | |\n"); printf(" +---------------+ +---------------+\n"); } else if (tc->just_tx == false && tc->compare == false) { printf("Mode: TX -> RX\n"); printf(" +---------------+ +---------------+\n"); printf(" | TX Device TX|------>|RX RX Device |\n"); printf(" | | | |\n"); printf(" | RX| | |\n"); printf(" +---------------+ +---------------+\n"); } else { printf("Mode: TX Only\n"); printf(" +---------------+ v +---------------+\n"); printf(" | TX Device TX|---┘ |RX RX Device |\n"); printf(" | | | |\n"); printf(" | RX| | |\n"); printf(" +---------------+ +---------------+\n"); return 0; } if (tc->just_tx == false) { status = bladerf_open(dev_rx, tc->dev_rx_str); if (status != 0) { fprintf(stderr, "Failed to open RX device: %s\n", bladerf_strerror(status)); fprintf(stderr, "↳ Most likely an incorrect device string.\n"); return status; } status = module_config_enable(*dev_rx, BLADERF_MODULE_RX, tc, p, BLADERF_FORMAT_SC16_Q11); if (status != 0) { fprintf(stderr, "Failed to configure RX on RX device: %s\n", bladerf_strerror(status)); return status; } } /** Must come after RX device open to recieve an input*/ if (tc->compare == true) { status = bladerf_set_gain_mode(*dev_tx, BLADERF_MODULE_RX, BLADERF_GAIN_MGC); if (status != 0) { fprintf(stderr, "Failed to set loopback compare gain mode: %s\n", bladerf_strerror(status)); return -1; } status = bladerf_set_gain(*dev_tx, BLADERF_MODULE_RX, tc->gain); if (status != 0) { fprintf(stderr, "Failed to set gain loopback compare RX gain: %s\n", bladerf_strerror(status)); return -1; } status = module_config_enable(*dev_tx, BLADERF_MODULE_RX, tc, p, BLADERF_FORMAT_SC16_Q11_META); if (status != 0) { fprintf(stderr, "Failed to configure RX on TX device: %s\n", bladerf_strerror(status)); return status; } } return 0; } typedef struct { struct bladerf *dev; struct test_case *tc; bool is_rx_device; } thread_args; void *rx_task(void *args) { char* dev_rx_filename = "samples.csv"; char* dev_tx_filename = "compare.csv"; char* file_name = malloc(strlen(dev_rx_filename) + 1); struct bladerf_metadata meta; int status; FILE *file; memset(&meta, 0, sizeof(meta)); meta.flags = BLADERF_META_FLAG_RX_NOW; /** Sample Setup */ thread_args *rx_args = (thread_args *)args; unsigned int period = rx_args->tc->iterations*rx_args->tc->period; unsigned int initial_delay = rx_args->tc->init_ts_delay; unsigned int num_rx_samples = period + initial_delay; int16_t *samples = calloc(num_rx_samples, 2*sizeof(int16_t)); status = bladerf_sync_rx(rx_args->dev, samples, num_rx_samples, &meta, 1000); if (status == BLADERF_ERR_TIMEOUT) { fprintf(stderr, "RX Timeout: %s\n", bladerf_strerror(status)); goto cleanup; } else if (status!= 0) { fprintf(stderr, "Failed to sync RX: %s\n", bladerf_strerror(status)); status = BLADERF_ERR_UNEXPECTED; goto cleanup; } status = bladerf_enable_module(rx_args->dev, BLADERF_MODULE_RX, false); if (status != 0) { fprintf(stderr, "Failed to disable RX module on %s board: %s\n", (rx_args->is_rx_device) ? "RX":"TX", bladerf_strerror(status)); } if (rx_args->is_rx_device == true) strcpy(file_name, dev_rx_filename); else strcpy(file_name, dev_tx_filename); file = fopen(file_name, "w"); if (file == NULL) fprintf(stderr, "Failed to open output file: %s\n", file_name); fprintf(file, "I,Q\n"); for (unsigned int i = 0; i < 2*num_rx_samples; i+=2) { if (file != NULL) fprintf(file, "%i,%i\n", samples[i], samples[i+1]); } if (file != NULL) printf("\nRX samples written to \"%s\"\n", file_name); cleanup: free(samples); free(file_name); pthread_exit(NULL); fclose(file); } bladeRF-2024.05/host/libraries/libbladeRF_test/test_tune_timing/000077500000000000000000000000001457144405000245305ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_tune_timing/CMakeLists.txt000066400000000000000000000021521457144405000272700ustar00rootroot00000000000000# This program currently uses clock_gettime(CLOCK_MONOTONIC_RAW), which # does not appear to be supported on Windows or OSX. # # Given that this is really only intended for use as a benchmark for changes to # the NIOS II code, it probably won't get much general use, so we'll just # leave this as-is for now. if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") cmake_minimum_required(VERSION 3.5) project(libbladeRF_test_tune_timing C) set(INCLUDES ${libbladeRF_SOURCE_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR}/../common/include ${BLADERF_HOST_COMMON_INCLUDE_DIRS} ) set(SRC main.c ../common/src/test_common.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/conversions.c ) if(LIBC_VERSION) # clock_gettime() was moved from librt -> libc in 2.17 if(${LIBC_VERSION} VERSION_LESS "2.17") set(CLI_LINK_LIBRARIES ${CLI_LINK_LIBRARIES} rt) endif() endif() include_directories(${INCLUDES}) add_executable(libbladeRF_test_tune_timing ${SRC}) target_link_libraries(libbladeRF_test_tune_timing libbladerf_shared) endif() bladeRF-2024.05/host/libraries/libbladeRF_test/test_tune_timing/main.c000066400000000000000000000270551457144405000256310ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (C) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ /* This program is intended to acquire some rough estimates of the duration of * our frequency tuning operations. */ #include #include #include #include #include #include #include "log.h" #include "test_common.h" #include "conversions.h" #define ITERATIONS 2500u #define FIXED_FREQ 2405000000u double fixed_retune(struct bladerf *dev, uint32_t iterations) { int status; struct timespec start, end; unsigned int i; status = clock_gettime(CLOCK_MONOTONIC_RAW, &start); if (status != 0) { fprintf(stderr, "Failed to get end time. Erroring out.\n"); return -1; } for (i = 0; i < iterations; i++) { status = bladerf_set_frequency(dev, BLADERF_MODULE_RX, FIXED_FREQ); if (status != 0) { fprintf(stderr, "Failed to set frequency (%u): %s\n", FIXED_FREQ, bladerf_strerror(status)); return -1; } } status = clock_gettime(CLOCK_MONOTONIC_RAW, &end); if (status != 0) { fprintf(stderr, "Failed to get end time. Erroring out.\n"); return -1; } return calc_avg_duration(&start, &end, iterations); } double random_retune(struct bladerf *dev, uint32_t iterations) { int status; struct timespec start, end; unsigned int i; unsigned int freq; uint64_t prng; randval_init(&prng, 1); status = clock_gettime(CLOCK_MONOTONIC_RAW, &start); if (status != 0) { fprintf(stderr, "Failed to get end time. Erroring out.\n"); return -1; } for (i = 0; i < iterations; i++) { freq = get_rand_freq(&prng, false); status = bladerf_set_frequency(dev, BLADERF_MODULE_RX, freq); if (status != 0) { fprintf(stderr, "Failed to set frequency (%u): %s\n", FIXED_FREQ, bladerf_strerror(status)); return -1; } } status = clock_gettime(CLOCK_MONOTONIC_RAW, &end); if (status != 0) { fprintf(stderr, "Failed to get end time. Erroring out.\n"); return -1; } return calc_avg_duration(&start, &end, iterations); } double quick_retune(struct bladerf *dev, uint32_t iterations) { const char *board_name; bladerf_frequency center_freq; const bladerf_frequency center_fdev = 1.0e6; /* 1 MHz deviation */ int status; struct bladerf_quick_tune f1, f2; struct timespec start, end; unsigned int i; board_name = bladerf_get_board_name(dev); /* Choosing frequencies that cross the low/high band threshold */ if (strcmp(board_name, "bladerf1") == 0) { center_freq = 1.500e9; } else if (strcmp(board_name, "bladerf2") == 0) { center_freq = 3.000e9; } else { fprintf(stderr, "Unknown board name: %s\n", board_name); return -1; } status = bladerf_set_frequency(dev, BLADERF_MODULE_RX, center_freq - center_fdev); if (status != 0) { return -1; } status = bladerf_get_quick_tune(dev, BLADERF_MODULE_RX, &f1); if (status != 0) { return -1; } status = bladerf_set_frequency(dev, BLADERF_MODULE_RX, center_freq + center_fdev); if (status != 0) { return -1; } status = bladerf_get_quick_tune(dev, BLADERF_MODULE_RX, &f2); if (status != 0) { return -1; } status = clock_gettime(CLOCK_MONOTONIC_RAW, &start); if (status != 0) { fprintf(stderr, "Failed to get end time. Erroring out.\n"); return -1; } for (i = 0; i < (iterations / 2); i++) { status = bladerf_schedule_retune(dev, BLADERF_MODULE_RX, BLADERF_RETUNE_NOW, 0, &f1); if (status != 0) { fprintf(stderr, "Failed to tune to f1: %s\n", bladerf_strerror(status)); return -1; } status = bladerf_schedule_retune(dev, BLADERF_MODULE_RX, BLADERF_RETUNE_NOW, 0, &f2); if (status != 0) { fprintf(stderr, "Failed to tune to f2: %s\n", bladerf_strerror(status)); return -1; } } status = clock_gettime(CLOCK_MONOTONIC_RAW, &end); if (status != 0) { fprintf(stderr, "Failed to get end time. Erroring out.\n"); return -1; } return calc_avg_duration(&start, &end, iterations); } #define OPTSTR "i:d:v:h" static struct option long_options[] = { { "iterations", required_argument, NULL, 'i' }, { "device", required_argument, NULL, 'd' }, { "verbosity", required_argument, NULL, 'v' }, { "help", no_argument, NULL, 'h' }, { NULL, 0, NULL, 0 }, }; int main(int argc, char *argv[]) { int status; struct bladerf *dev = NULL; const char *devstr = NULL; double duration_host, duration_fpga; const char *board_name; int opt = 0; int opt_ind = 0; uint32_t iterations = ITERATIONS; bool ok; bladerf_log_level log_level; while (opt != -1) { opt = getopt_long(argc, argv, OPTSTR, long_options, &opt_ind); switch (opt) { case 'i': iterations = str2uint(optarg, 0, UINT32_MAX, &ok); if (!ok) { fprintf(stderr, "Iterations arg invalid: %s\n", optarg); return EXIT_FAILURE; } break; case 'd': devstr = optarg; printf("devstr: %s\n", devstr); break; case 'v': log_level = str2loglevel(optarg, &ok); if (!ok) { fprintf(stderr, "Invalid log level: %s\n", optarg); return EXIT_FAILURE; } bladerf_log_set_verbosity(log_level); break; case 'h': printf("Fixed, random, and quick-tune timing test.\n\n"); printf(" -d, --device Specify device to open.\n"); printf(" -i, --iterations Specify device to open.\n"); printf(" -v, --verbosity Set libbladeRF verbosity level.\n"); printf(" -h, --help Show this text.\n"); printf("\n"); return EXIT_SUCCESS; default: break; } } status = bladerf_open(&dev, devstr); if (status != 0) { fprintf(stderr, "Unable to open device: %s\n", bladerf_strerror(status)); return status; } board_name = bladerf_get_board_name(dev); printf("Re-tuning with fixed frequency...\n"); status = bladerf_set_tuning_mode(dev, BLADERF_TUNING_MODE_HOST); if (status != 0) { fprintf(stderr, "Failed to switch to host-based tuning mode: %s\n", bladerf_strerror(status)); status = -1; goto out; } printf("Iterations: %d\n", iterations); duration_host = fixed_retune(dev, iterations); if (duration_host < 0) { status = (int) duration_host; goto out; } else { printf(" Host tuning: %fs\n", duration_host); } if (strcmp(board_name, "bladerf1") == 0) { status = bladerf_set_tuning_mode(dev, BLADERF_TUNING_MODE_FPGA); if (status != 0) { fprintf(stderr, "Failed to switch to FPGA-based tuning mode: %s\n", bladerf_strerror(status)); status = -1; goto out; } else { duration_fpga = fixed_retune(dev, iterations); if (duration_fpga < 0) { status = (int) duration_fpga; goto out; } else { printf(" FPGA tuning: %fs\n", duration_fpga); } printf(" Speedup factor: %f\n", duration_host / duration_fpga); } } printf("Re-tuning with random frequencies...\n"); status = bladerf_set_tuning_mode(dev, BLADERF_TUNING_MODE_HOST); if (status != 0) { fprintf(stderr, "Failed to switch to host-based tuning mode: %s\n", bladerf_strerror(status)); status = -1; goto out; } duration_host = random_retune(dev, iterations); if (duration_host < 0) { status = (int) duration_host; goto out; } else { printf(" Host tuning: %fs\n", duration_host); } if (strcmp(board_name, "bladerf1") == 0) { status = bladerf_set_tuning_mode(dev, BLADERF_TUNING_MODE_FPGA); if (status != 0) { fprintf(stderr, "Failed to switch to FPGA-based tuning mode: %s\n", bladerf_strerror(status)); status = -1; goto out; } else { duration_fpga = fixed_retune(dev, iterations); if (duration_fpga < 0) { status = (int) duration_fpga; goto out; } else { printf(" FPGA tuning: %fs\n", duration_fpga); } printf(" Speedup factor: %f\n\n", duration_host / duration_fpga); } } printf("Performing quick-tune...\n"); status = bladerf_set_tuning_mode(dev, BLADERF_TUNING_MODE_HOST); if (status != 0) { fprintf(stderr, "Failed to switch to host-based tuning mode: %s\n", bladerf_strerror(status)); status = -1; goto out; } duration_host = quick_retune(dev, iterations); if (duration_host < 0) { status = (int) duration_host; goto out; } else { printf(" Host tuning: %fs\n", duration_host); } if (strcmp(board_name, "bladerf1") == 0) { status = bladerf_set_tuning_mode(dev, BLADERF_TUNING_MODE_FPGA); if (status != 0) { fprintf(stderr, "Failed to switch to fpga-based tuning mode: %s\n", bladerf_strerror(status)); status = -1; goto out; } else { duration_fpga = quick_retune(dev, iterations); if (duration_fpga < 0) { status = (int) duration_fpga; goto out; } else { printf(" FPGA tuning: %fs\n", duration_fpga); } printf(" Speedup factor: %f\n\n", duration_host / duration_fpga); } } out: bladerf_close(dev); return status; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_unused_sync/000077500000000000000000000000001457144405000245455ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_unused_sync/CMakeLists.txt000066400000000000000000000005321457144405000273050ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.5) project(libbladeRF_test_unused_sync C) set(INCLUDES ${libbladeRF_SOURCE_DIR}/include) if(MSVC) set(INCLUDES ${INCLUDES} ${MSVC_C99_INCLUDES}) endif() include_directories(${INCLUDES}) add_executable(libbladeRF_test_unused_sync main.c) target_link_libraries(libbladeRF_test_unused_sync libbladerf_shared) bladeRF-2024.05/host/libraries/libbladeRF_test/test_unused_sync/main.c000066400000000000000000000022761457144405000256440ustar00rootroot00000000000000/* This program is intended to exercise a situation where sync interfaces * are initialized, but not used. * * Prior to the fix to issue #244, this yielded lockups. */ #include #include #include int main(int argc, char *argv[]) { struct bladerf *dev; int status; status = bladerf_open(&dev, NULL); if (status != 0) { fprintf(stderr, "Failed to open device: %s\n", bladerf_strerror(status)); return EXIT_FAILURE; } status = bladerf_sync_config(dev, BLADERF_MODULE_RX, BLADERF_FORMAT_SC16_Q11, 64, 16384, 16, 3500); if (status != 0) { fprintf(stderr, "Failed to init RX: %s", bladerf_strerror(status)); status = EXIT_FAILURE; goto out; } status = bladerf_sync_config(dev, BLADERF_MODULE_TX, BLADERF_FORMAT_SC16_Q11, 64, 16384, 16, 3500); if (status != 0) { fprintf(stderr, "Failed to init TX: %s\n", bladerf_strerror(status)); status = EXIT_FAILURE; goto out; } out: bladerf_close(dev); return status; } bladeRF-2024.05/host/libraries/libbladeRF_test/test_version/000077500000000000000000000000001457144405000236735ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_version/CMakeLists.txt000066400000000000000000000005211457144405000264310ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.5) project(libbladeRF_test_version C) set(INCLUDES ${libbladeRF_SOURCE_DIR}/include) if(MSVC) set(INCLUDES ${INCLUDES} ${MSVC_C99_INCLUDES}) endif() include_directories(${INCLUDES}) add_executable(libbladeRF_test_version src/main.c) target_link_libraries(libbladeRF_test_version libbladerf_shared) bladeRF-2024.05/host/libraries/libbladeRF_test/test_version/src/000077500000000000000000000000001457144405000244625ustar00rootroot00000000000000bladeRF-2024.05/host/libraries/libbladeRF_test/test_version/src/main.c000066400000000000000000000025641457144405000255610ustar00rootroot00000000000000#include #include #include int main(void) { #ifdef LIBBLADERF_API_VERSION struct bladerf_version api_ver; #endif struct bladerf_version lib_ver; /* Fetch the version from the library */ bladerf_version(&lib_ver); printf("libbladeRF version values: %u.%u.%u\n", lib_ver.major, lib_ver.minor, lib_ver.patch); printf("libbladeRF version description: %s\n", lib_ver.describe); /* Fetch the version from the header */ #ifdef LIBBLADERF_API_VERSION api_ver.major = (LIBBLADERF_API_VERSION >> 24) & 0xff; api_ver.minor = (LIBBLADERF_API_VERSION >> 16) & 0xff; api_ver.patch = (LIBBLADERF_API_VERSION >> 8) & 0xff; printf("libbladeRF version from header: %u.%u.%u(.%u)\n", api_ver.major, api_ver.minor, api_ver.patch, LIBBLADERF_API_VERSION & 0xff); if (lib_ver.major != api_ver.major) { fprintf(stderr, "Library and API header mismatch: major\n"); return 1; } if (lib_ver.minor != api_ver.minor) { fprintf(stderr, "Library and API header mismatch: major\n"); return 1; } if (lib_ver.patch != api_ver.patch) { fprintf(stderr, "Library and API header mismatch: major\n"); return 1; } return 0; #else printf("libbladeRF API header does not define LIBBLADERF_API_VERSION.\n"); return 1; #endif } bladeRF-2024.05/host/misc/000077500000000000000000000000001457144405000151015ustar00rootroot00000000000000bladeRF-2024.05/host/misc/CMakeLists.txt000066400000000000000000000000731457144405000176410ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.5) add_subdirectory(udev) bladeRF-2024.05/host/misc/arch/000077500000000000000000000000001457144405000160165ustar00rootroot00000000000000bladeRF-2024.05/host/misc/arch/bladerf-git/000077500000000000000000000000001457144405000201765ustar00rootroot00000000000000bladeRF-2024.05/host/misc/arch/bladerf-git/.install000066400000000000000000000002751457144405000216510ustar00rootroot00000000000000post_install() { /usr/bin/depmod -a modprobe bladeRF } pre_upgrade() { rmmod bladeRF } post_upgrade() { /usr/bin/depmod -a modprobe bladeRF } pre_remove() { rmmod bladeRF } bladeRF-2024.05/host/misc/arch/bladerf-git/PKGBUILD000066400000000000000000000026711457144405000213300ustar00rootroot00000000000000# Maintainer: Guido Paliot pkgname=bladerf-git pkgver=2b5bbe3 pkgrel=1 epoch=1 install=.install pkgdesc="Kernel driver for the Nuand bladeRF" arch=('x86_64') url="https://github.com/Nuand/bladeRF" license=('GPL') depends=('kernel26>=3.5') makedepends=('git' 'linux-headers') provides=('bladerf') conflicts=('bladerf') backup=('etc/modules-load.d/bladerf.conf') source=('bladeRF::git+https://github.com/gpaliot/bladeRF#branch=master' 'bladerf.conf' ) sha1sums=('SKIP' 'cff3733c6dc38e8a5a5d2aee236e36dabcc3feb4') _gitname=bladeRF pkgver() { cd $_gitname # Use the tag of the last commit git describe --always | sed 's|-|.|g' } build() { cd "$srcdir" msg "Connecting to GIT server...." if [[ -d "$_gitname" ]]; then cd "$_gitname" && git pull origin msg "The local files are updated." else git clone --recursive "$_gitroot" "$_gitname" fi msg "GIT checkout done or server timeout" msg "Starting build..." rm -rf "$srcdir/$_gitname-build" git clone --recursive "$srcdir/$_gitname" "$srcdir/$_gitname-build" cd "$srcdir/$_gitname-build/host/drivers/linux" make } package() { mkdir -p $pkgdir/usr/lib/modules/`uname -r`/kernel/extramodules/bladeRF/ cp $srcdir/$_gitname-build/host/drivers/linux/bladeRF.ko \ $pkgdir/usr/lib/modules/`uname -r`/kernel/extramodules/bladeRF/ mkdir -p $pkgdir/etc/modules-load.d/ cp bladerf.conf $pkgdir/etc/modules-load.d/ } bladeRF-2024.05/host/misc/arch/bladerf-git/bladerf.conf000066400000000000000000000000101457144405000224330ustar00rootroot00000000000000bladeRF bladeRF-2024.05/host/misc/arch/bladerf-util-git/000077500000000000000000000000001457144405000211515ustar00rootroot00000000000000bladeRF-2024.05/host/misc/arch/bladerf-util-git/PKGBUILD000066400000000000000000000041261457144405000223000ustar00rootroot00000000000000# Maintainer: Guido Paliot pkgname=bladerf-util-git pkgver=df0f495 pkgrel=1 pkgdesc="Utils, libraries and prebuilt firmware for the Nuand bladeRF" arch=('x86_64') url="https://github.com/Nuand/bladeRF" license=('GPL') depends=('libtecla' 'libusb>=1.0.12') makedepends=('git') optdepends=( 'bladerf: Linux kernel driver backend for bladeRF' ) conflicts=('bladerf-util') provides=('bladerf-util') backup=(etc/bladerf.cfg) source=('bladeRF::git+https://github.com/Nuand/bladeRF#branch=master' 'https://www.nuand.com/fx3/bladeRF_fw_v2.0.0.img' 'https://www.nuand.com/fpga/v0.7.1/hostedx40.rbf' 'https://www.nuand.com/fpga/v0.7.1/hostedx115.rbf' ) sha1sums=( 'SKIP' '25dd40565e14051b3a3195fa6784ee5cb2a8e8a2' '07c491710c9fab0e9b952fb2adc59e62f6693d50' 'bf1464df78b2c18f0d711108550e30692b536ea4' ) _gitname=bladeRF pkgver() { cd $_gitname # Use the tag of the last commit git describe --always | sed 's|-|.|g' } build() { cd "$srcdir" msg "Connecting to GIT server...." if [[ -d "$_gitname" ]]; then cd "$_gitname" && git pull origin msg "The local files are updated." else git clone --recursive "$_gitroot" "$_gitname" fi msg "GIT checkout done or server timeout" msg "Starting build..." rm -rf "$srcdir/$_gitname-build" git clone --recursive "$srcdir/$_gitname" "$srcdir/$_gitname-build" cd "$srcdir/$_gitname-build/host" cmake -DCMAKE_INSTALL_PREFIX=/usr -DINSTALL_UDEV_RULES=ON -DENABLE_BACKEND_LINUX_DRIVER=OFF -DENABLE_BACKEND_LIBUSB=ON -DLIBTECLA_INCLUDE_DIR=/usr/include -DCMAKE_BUILD_TYPE=Release . make } package() { cd "$srcdir/$_gitname-build/host" make DESTDIR=$pkgdir install mkdir -p $pkgdir/usr/share/Nuand/bladeRF/fpga mkdir $pkgdir/usr/share/Nuand/bladeRF/firmware cp $srcdir/bladeRF_fw_v2.0.0.img $pkgdir/usr/share/Nuand/bladeRF/firmware/bladeRF_fw.img cp $srcdir/hostedx40.rbf $pkgdir/usr/share/Nuand/bladeRF/fpga/ cp $srcdir/hostedx115.rbf $pkgdir/usr/share/Nuand/bladeRF/fpga/ cp $srcdir/$_gitname-build/COPYING $pkgdir/usr/share/Nuand/bladeRF/LICENSE } bladeRF-2024.05/host/misc/dev/000077500000000000000000000000001457144405000156575ustar00rootroot00000000000000bladeRF-2024.05/host/misc/dev/lms_freqsel/000077500000000000000000000000001457144405000201735ustar00rootroot00000000000000bladeRF-2024.05/host/misc/dev/lms_freqsel/Makefile000066400000000000000000000002171457144405000216330ustar00rootroot00000000000000CFLAGS := -Wall -Wextra -ggdb3 LDFLAGS := -lm all: freqsel %: %.c $(CC) $(CFLAGS) $< $(LDFLAGS) -o $@ clean: rm -f freqsel .PHONY: clean bladeRF-2024.05/host/misc/dev/lms_freqsel/freqsel.c000066400000000000000000000211041457144405000217760ustar00rootroot00000000000000/* * This file is part of the bladeRF project: * http://www.github.com/nuand/bladeRF * * Copyright (c) 2015 Nuand LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include #include #include #include #include #include /* Just for easy copy/paste back into lms.c code */ #define FREQ_RANGE(l, h, v) {l, h, v} struct freq_range { uint32_t low; uint32_t high; uint8_t value; }; struct vco_range { uint64_t low; uint64_t high; }; /* It appears that VCO1-4 are mislabeled in the LMS6002D FAQ 5.24 plot. * Note that the below are labeled "correctly," so they will not match the plot. * * Additionally, these have been defined a bit more conservatively, rounding * to the nearest 100 MHz contained within a band. */ static const struct vco_range vco[] = { { 0, 0}, /* Dummy entry */ { 6300000000u, 7700000000u }, /* VCO1 */ { 5300000000u, 6900000000u }, { 4500000000u, 5600000000u }, { 3700000000u, 4700000000u }, /* VCO4 */ }; /* Here we define more conservative band ranges than those in the * LMS FAQ (5.24), with the intent of avoiding the use of "edges" that might * cause the PLLs to lose lock over temperature changes */ #define VCO4_LOW 3800000000ull #define VCO4_HIGH 4535000000ull #define VCO3_LOW VCO4_HIGH #define VCO3_HIGH 5408000000ull #define VCO2_LOW VCO3_HIGH #define VCO2_HIGH 6480000000ull #define VCO1_LOW VCO2_HIGH #define VCO1_HIGH 7600000000ull #if VCO4_LOW/16 != BLADERF_FREQUENCY_MIN # error "BLADERF_FREQUENCY_MIN is not actual VCO4_LOW/16 minimum" #endif #if VCO1_HIGH/2 != BLADERF_FREQUENCY_MAX # error "BLADERF_FREQUENCY_MAX is not actual VCO1_HIGH/2 maximum" #endif /* SELVCO values */ #define VCO4 (4 << 3) #define VCO3 (5 << 3) #define VCO2 (6 << 3) #define VCO1 (7 << 3) /* FRANGE values */ #define DIV2 0x4 #define DIV4 0x5 #define DIV8 0x6 #define DIV16 0x7 /* Additional changes made after tightening "keepout" percentage */ static const struct freq_range bands[] = { FREQ_RANGE(BLADERF_FREQUENCY_MIN, VCO4_HIGH/16, VCO4 | DIV16), FREQ_RANGE(VCO3_LOW/16, VCO3_HIGH/16, VCO3 | DIV16), FREQ_RANGE(VCO2_LOW/16, VCO2_HIGH/16, VCO2 | DIV16), FREQ_RANGE(VCO1_LOW/16, VCO1_HIGH/16, VCO1 | DIV16), FREQ_RANGE(VCO4_LOW/8, VCO4_HIGH/8, VCO4 | DIV8), FREQ_RANGE(VCO3_LOW/8, VCO3_HIGH/8, VCO3 | DIV8), FREQ_RANGE(VCO2_LOW/8, VCO2_HIGH/8, VCO2 | DIV8), FREQ_RANGE(VCO1_LOW/8, VCO1_HIGH/8, VCO1 | DIV8), FREQ_RANGE(VCO4_LOW/4, VCO4_HIGH/4, VCO4 | DIV4), FREQ_RANGE(VCO3_LOW/4, VCO3_HIGH/4, VCO3 | DIV4), FREQ_RANGE(VCO2_LOW/4, VCO2_HIGH/4, VCO2 | DIV4), FREQ_RANGE(VCO1_LOW/4, VCO1_HIGH/4, VCO1 | DIV4), FREQ_RANGE(VCO4_LOW/2, VCO4_HIGH/2, VCO4 | DIV2), FREQ_RANGE(VCO3_LOW/2, VCO3_HIGH/2, VCO3 | DIV2), FREQ_RANGE(VCO2_LOW/2, VCO2_HIGH/2, VCO2 | DIV2), FREQ_RANGE(VCO1_LOW/2, BLADERF_FREQUENCY_MAX, VCO1 | DIV2), }; static const size_t num_bands = sizeof(bands) / sizeof(bands[0]); static const char *get_selvco(uint8_t freqsel, unsigned int *vco) { const char *ret; unsigned int vco_num = 0; freqsel >>= 3; switch (freqsel) { case 0x0: ret = "000 - All VCOs PD "; break; case 0x4: vco_num = 4; ret = "100 - VCO4 (Low) "; break; case 0x5: vco_num = 3; ret = "101 - VCO3 (Mid Low) "; break; case 0x6: vco_num = 2; ret = "110 - VCO2 (Mid High)"; break; case 0x7: vco_num = 1; ret = "111 - VCO1 (High) "; break; default: ret = "XXX - Invalid SELVCO "; break; } if (vco != NULL) { *vco = vco_num; } return ret; } static const char *get_frange(uint8_t freqsel, unsigned int *div) { const char *ret; unsigned int div_val = 0; freqsel &= 0x7; switch (freqsel) { case 0x0: ret = "000 - Divs PD"; break; case 0x4: div_val = 2; ret = "100 - Fvco/2 "; break; case 0x5: div_val = 4; ret = "101 - Fvco/4 "; break; case 0x6: div_val = 8; ret = "110 - Fvco/8 "; break; case 0x7: div_val = 16; ret = "111 - Fvco/16"; break; default: ret = "XXX - Invalid FRANGE"; break; } if (div != NULL) { *div = div_val; } return ret; } static void print_table() { size_t i; putchar('\n'); puts(" Range SELVCO FRANGE"); puts("-------------------------------------------------------------------"); for (i = 0; i < num_bands; i++) { printf("%10u - %10u %s %s\n", bands[i].low, bands[i].high, get_selvco(bands[i].value, NULL), get_frange(bands[i].value, NULL)); } putchar('\n'); } static void check_vco_range(uint8_t freqsel, uint64_t low, uint64_t high, float keepout_percent) { unsigned int n, div; uint64_t vco_width, keepout; uint64_t scaled_low, scaled_high;; uint64_t low_limit, high_limit; get_selvco(freqsel, &n); get_frange(freqsel, &div); vco_width = vco[n].high - vco[n].low; keepout = (float)vco_width * keepout_percent; scaled_low = low * div; low_limit = vco[n].low + (keepout); scaled_high = high * div; high_limit = vco[n].high - (keepout); printf(" Fscaled,low: %10"PRIu64" Flimit,low: %10"PRIu64"\n", scaled_low, low_limit); printf(" Fscaled,high: %10"PRIu64" Flimit,high: %10"PRIu64"\n\n", scaled_high, high_limit); if (scaled_low < low_limit) { printf(" Error: F=%"PRIu64" is too low using VCO%u with div=%u\n", low, n, div); } else if (scaled_low > high_limit) { printf(" Error: F=%"PRIu64" is too *high* using VCO%u with div=%u\n", low, n, div); } else { printf(" Low OK\n"); } if (scaled_high > high_limit) { printf(" Error: F=%"PRIu64" is too high using VCO%u with div=%u\n", high, n, div); } else if (scaled_high < low_limit) { printf(" Error: F=%"PRIu64" is too *low* using VCO%u with div=%u\n", high, n, div); } else { printf(" High OK\n"); } putchar('\n'); } static void check_vco_ranges(float keepout_percent) { size_t i; keepout_percent = keepout_percent / 100.0; printf("Checking VCO ranges with keepout = %f%% on either end of a band\n\n", 100.0 * keepout_percent); for (i = 0; i < num_bands; i++) { printf("Checking %10u - %10u...\n", bands[i].low, bands[i].high); check_vco_range(bands[i].value, bands[i].low, bands[i].high, keepout_percent); } } int main(void) { print_table(); /* Check the ranges, with 2.5% on either end of a band marked "keep out" */ check_vco_ranges(2.5); return 0; } bladeRF-2024.05/host/misc/docker/000077500000000000000000000000001457144405000163505ustar00rootroot00000000000000bladeRF-2024.05/host/misc/docker/README.md000066400000000000000000000022131457144405000176250ustar00rootroot00000000000000# Dockerfiles for various OS environments # This directory contains Dockerfiles for building libbladeRF and associated utilities under various operating systems, primarily as a means to ensure it builds properly across a variety of OSes. Currently, the following operating systems are supported: * Linux * Arch Linux * CentOS * 7 * Debian * Jessie (8.x) * Stretch (9.x) * Fedora * Ubuntu * Trusty (14.04) * Xenial (16.04) * Artful (17.10) * Bionic (18.04) ## Building ## Build a Docker image from the root of the Nuand/bladeRF checkout: ``` docker build -f host/misc/docker/archlinux.Dockerfile . ``` Optionally, add a -t option to tag the image: ``` docker build -f host/misc/docker/archlinux.Dockerfile \ -t nuand/bladerf-buildenv:archlinux . ``` ## Running ## For a quick test to ensure the build was successful, try: ``` docker run --rm -t nuand/bladerf-buildenv:archlinux bladeRF-cli --version ``` At this time, actually using a bladeRF device is not supported, although it would be really useful. ## Future goals ## * More distribution support * FreeBSD * clang builds * Hardware access bladeRF-2024.05/host/misc/docker/_base.Dockerfile000066400000000000000000000052551457144405000214210ustar00rootroot00000000000000# This file is part of the bladeRF project: # http://www.github.com/nuand/bladeRF # # Copyright (c) 2018 Nuand LLC. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # This image is a cleaned version of the current working directory. # It is used to speed up the copy/clean process for later builds. FROM ubuntu AS first LABEL maintainer="Nuand LLC " RUN apt-get update \ && apt-get install -y \ git \ && apt-get clean COPY . /root/bladeRF ENV work="/root/bladeRF/hdl/quartus/work" ENV rbf="output_files/hosted.rbf" ENV cfgdir="/root/.config/Nuand/bladeRF" # copy FPGA images from FPGA work dir # TODO: build these in docker, as well RUN mkdir -p ${cfgdir} RUN test -f "${work}/bladerf-40-hosted/${rbf}" \ && cp "${work}/bladerf-40-hosted/${rbf}" ${cfgdir}/hostedx40.rbf \ || exit 0 RUN test -f "${work}/bladerf-115-hosted/${rbf}" \ && cp "${work}/bladerf-115-hosted/${rbf}" ${cfgdir}/hostedx115.rbf \ || exit 0 RUN test -f "${work}/bladerf-micro-A2-hosted/${rbf}" \ && cp "${work}/bladerf-micro-A2-hosted/${rbf}" ${cfgdir}/hostedxA2.rbf \ || exit 0 RUN test -f "${work}/bladerf-micro-A4-hosted/${rbf}" \ && cp "${work}/bladerf-micro-A4-hosted/${rbf}" ${cfgdir}/hostedxA4.rbf \ || exit 0 RUN test -f "${work}/bladerf-micro-A5-hosted/${rbf}" \ && cp "${work}/bladerf-micro-A5-hosted/${rbf}" ${cfgdir}/hostedxA5.rbf \ || exit 0 RUN test -f "${work}/bladerf-micro-A9-hosted/${rbf}" \ && cp "${work}/bladerf-micro-A9-hosted/${rbf}" ${cfgdir}/hostedxA9.rbf \ || exit 0 # clean up unnecessary stuff WORKDIR /root/bladeRF RUN git clean -xdf && git gc --aggressive # build a scratch image with nothing but the bladeRF source and FPGA images FROM scratch COPY --from=first /root /root bladeRF-2024.05/host/misc/docker/archlinux.Dockerfile000066400000000000000000000043671457144405000223500ustar00rootroot00000000000000# This file is part of the bladeRF project: # http://www.github.com/nuand/bladeRF # # Copyright (c) 2018 Nuand LLC. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. FROM archlinux/base LABEL maintainer="Nuand LLC " LABEL version="0.0.2" LABEL description="CI build environment for the bladeRF project" LABEL com.nuand.ci.distribution.name="Arch Linux" # Install things RUN pacman -Syuq --noconfirm \ base-devel \ clang \ cmake \ doxygen \ git \ help2man \ libtecla \ libusb \ && pacman -Scc --noconfirm \ && echo "/usr/local/lib" > /etc/ld.so.conf.d/locallib.conf # Copy in our build context COPY --from=nuand/bladerf-buildenv:base /root/bladeRF /root/bladeRF COPY --from=nuand/bladerf-buildenv:base /root/.config /root/.config WORKDIR /root/bladeRF # Build arguments ARG compiler=gcc ARG buildtype=Release ARG taggedrelease=NO ARG parallel=1 # Do the build! RUN cd /root/bladeRF/ \ && mkdir -p build \ && cd build \ && cmake \ -DBUILD_DOCUMENTATION=ON \ -DCMAKE_C_COMPILER=${compiler} \ -DCMAKE_BUILD_TYPE=${buildtype} \ -DENABLE_FX3_BUILD=OFF \ -DENABLE_HOST_BUILD=ON \ -DTAGGED_RELEASE=${taggedrelease} \ ../ \ && make -j${parallel} \ && make install \ && ldconfig bladeRF-2024.05/host/misc/docker/build.bash000066400000000000000000000141271457144405000203130ustar00rootroot00000000000000#!/usr/bin/env bash # # CI build orchestration for libbladeRF on Linux # # Copyright (c) 2018 Nuand LLC # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # Usage: # build.bash [distro-version [distro-version...]] # e.g. # build.bash # build.bash archlinux # build.bash debian-jessie # Initial assumptions... compilers="gcc clang" buildtypes="Release Debug Tagged" repository="nuand/bladerf-buildenv" make_jobs=8 make_jobs_clangscan=4 # assuming the script is 3 levels down (host/misc/docker) dfdir=$(dirname "${0}") basedir=${dfdir}/../../.. # globals success="" failure="" rels="" do_base () { # usage: do_base # builds the base image echo "*** Building ${repository}:base image..." docker build -f host/misc/docker/_base.Dockerfile \ -t ${repository}:base \ . __status=$? } do_build () { # usage: do_build rel compiler buildtype # performs a build with the given settings [ -z "$1" ] || [ -z "$2" ] || [ -z "$3" ] && return 1 rel=$1 compiler=$2 buildtype=$3 tag="${rel}-${compiler}-${buildtype}" taggedrelease=NO if [ "${rel}" == "clang-scan" ]; then mj=${make_jobs_clangscan} else mj=${make_jobs} fi if [ "${buildtype}" == "Tagged" ]; then # tagged means a Release with -DTAGGED_RELEASE=YES buildtype=Release taggedrelease=YES fi echo "*** ${tag}: building rel=${rel} compiler=${compiler} buildtype=${buildtype} taggedrelease=${taggedrelease} parallel=${mj}" docker build -f ${rel}.Dockerfile \ --build-arg buildtype=${buildtype} \ --build-arg compiler=${compiler} \ --build-arg taggedrelease=${taggedrelease} \ --build-arg parallel=${mj} \ -t ${repository}:${tag} \ . __status=$? } do_test () { # usage: do_test tag # runs a cursory test on the given image [ -z "$1" ] && return 1 tag=$1 echo "*** ${tag}: testing ${repository}:${tag}" __cliversion=$(docker run --rm -t ${repository}:${tag} bladeRF-cli --version | tr -d '\n\r') __libversion=$(docker run --rm -t ${repository}:${tag} bladeRF-cli --lib-version | tr -d '\n\r') __status=$? } main () { # usage: main rel [rel...] # main program body [ -z "$1" ] && return 1 rels="$*" if [ -z "${rels}" ]; then echo "could not find any Dockerfiles to build!" exit 1 fi echo "*** $0: build goals: ${rels}" cd ${dfdir} for df in ${rels}; do rel=$(basename -s ".Dockerfile" ${df}) if [ "${rel}" == "clang-scan" ]; then # special case: this one is just a self-contained build tag="${rel}" echo "*** ${tag}: preparing to build" do_build clang-scan ccc-analyzer Release status=$? if [ $__status -ne 0 ]; then echo "*** ${tag}: BUILD FAILED" failure="${failure} ${tag}" continue else echo "*** ${tag}: build successful" success="${success} ${tag}" fi else for compiler in ${compilers}; do for buildtype in ${buildtypes}; do # this tag uniquely identifies the build target tag="${rel}-${compiler}-${buildtype}" echo "*** ${tag}: preparing to build" do_build ${rel} ${compiler} ${buildtype} echo "*** ${tag}: status=${__status}" if [ $__status -ne 0 ]; then echo "*** ${tag}: BUILD FAILED" failure="${failure} ${tag}" continue else echo "*** ${tag}: build successful" fi echo "*** ${tag}: preparing to test" do_test ${tag} echo "*** ${tag}: status=${__status} cliversion=${__cliversion} libversion=${__libversion}" if [ $__status -ne 0 ]; then echo "*** ${tag}: TEST FAILED" failure="${failure} ${tag}" continue else echo "*** ${tag}: test successful" fi echo "*** ${tag}: PASSED (${__libversion})" success="${success} ${tag}(${__libversion})" done done fi done echo "RESULT:SUCCESS:${success}" echo "RESULT:FAILED:${failure}" [ -n "${failure}" ] && exit 1 } if [ $# -gt 0 ]; then # We have an argument, so just build those images... for rootname in "$*"; do if [ "${rootname}" == "_base" ]; then do_base continue fi rels="${rels} ${rootname}" done else # No argument, so build everything cd ${basedir} do_base for dff in $(ls ${dfdir}/*.Dockerfile); do rootname=$(basename -s ".Dockerfile" ${dff}) if [ "${rootname}" == "_base" ]; then continue fi rels="${rels} ${rootname}" done fi main ${rels} bladeRF-2024.05/host/misc/docker/centos-7.Dockerfile000066400000000000000000000046651457144405000220130ustar00rootroot00000000000000# This file is part of the bladeRF project: # http://www.github.com/nuand/bladeRF # # Copyright (c) 2018 Nuand LLC. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. FROM centos:7 LABEL maintainer="Nuand LLC " LABEL version="0.0.3" LABEL description="CI build environment for the bladeRF project" LABEL com.nuand.ci.distribution.name="CentOS" LABEL com.nuand.ci.distribution.version="7" # Install things RUN yum groupinstall -y "Development Tools" \ && yum install -y \ clang \ cmake \ doxygen \ help2man \ libedit \ libedit-devel \ libusbx \ libusbx-devel \ pandoc \ wget \ && yum clean all \ && rm -rf /var/cache/yum \ && echo "/usr/local/lib" > /etc/ld.so.conf.d/locallib.conf \ && echo "/usr/local/lib64" >> /etc/ld.so.conf.d/locallib.conf # Copy in our build context COPY --from=nuand/bladerf-buildenv:base /root/bladeRF /root/bladeRF COPY --from=nuand/bladerf-buildenv:base /root/.config /root/.config WORKDIR /root/bladeRF # Build arguments ARG compiler=gcc ARG buildtype=Release ARG taggedrelease=NO ARG parallel=1 # Do the build! RUN cd /root/bladeRF/ \ && mkdir -p build \ && cd build \ && cmake \ -DBUILD_DOCUMENTATION=ON \ -DCMAKE_C_COMPILER=${compiler} \ -DCMAKE_BUILD_TYPE=${buildtype} \ -DENABLE_FX3_BUILD=OFF \ -DENABLE_HOST_BUILD=ON \ -DTAGGED_RELEASE=${taggedrelease} \ ../ \ && make -j${parallel} \ && make install \ && ldconfig bladeRF-2024.05/host/misc/docker/clang-scan.Dockerfile000066400000000000000000000044451457144405000223560ustar00rootroot00000000000000# This file is part of the bladeRF project: # http://www.github.com/nuand/bladeRF # # Copyright (c) 2018 Nuand LLC. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. FROM ubuntu:bionic LABEL maintainer="Nuand LLC " LABEL version="0.0.2" LABEL description="CI build environment for the bladeRF project" LABEL com.nuand.ci.distribution.name="Ubuntu" LABEL com.nuand.ci.distribution.codename="bionic" LABEL com.nuand.ci.distribution.version="18.04" # Install things RUN apt-get update \ && apt-get install -y \ build-essential \ clang \ cmake \ doxygen \ git \ help2man \ libtecla-dev \ libusb-1.0-0-dev \ pandoc \ pkg-config \ && apt-get clean # Copy in our build context COPY --from=nuand/bladerf-buildenv:base /root/bladeRF /root/bladeRF COPY --from=nuand/bladerf-buildenv:base /root/.config /root/.config WORKDIR /root/bladeRF # Install clang-tools RUN apt-get update && apt-get install -y clang-tools && apt-get clean ARG parallel=1 RUN cd /root/bladeRF/host \ && mkdir -p build \ && cd build \ && cmake -DBUILD_DOCUMENTATION=ON -DCMAKE_C_COMPILER=/usr/share/clang/scan-build-6.0/libexec/ccc-analyzer ../ \ && /usr/share/clang/scan-build-6.0/bin/scan-build -analyze-headers -maxloop 100 -o ./report make -j${parallel} bladeRF-2024.05/host/misc/docker/debian-jessie-i386.Dockerfile000066400000000000000000000046151457144405000235400ustar00rootroot00000000000000# This file is part of the bladeRF project: # http://www.github.com/nuand/bladeRF # # Copyright (c) 2018 Nuand LLC. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. FROM i386/debian:jessie LABEL maintainer="Nuand LLC " LABEL version="0.0.2" LABEL description="CI build environment for the bladeRF project" LABEL com.nuand.ci.distribution.name="Debian" LABEL com.nuand.ci.distribution.codename="jessie-i386" LABEL com.nuand.ci.distribution.version="8" # Install things RUN apt-get update \ && apt-get install -y \ build-essential \ clang \ cmake \ doxygen \ git \ help2man \ libtecla-dev \ libusb-1.0-0-dev \ pandoc \ pkg-config \ usbutils \ && apt-get clean # Copy in our build context COPY --from=nuand/bladerf-buildenv:base /root/bladeRF /root/bladeRF COPY --from=nuand/bladerf-buildenv:base /root/.config /root/.config WORKDIR /root/bladeRF # Build arguments ARG compiler=gcc ARG buildtype=Release ARG taggedrelease=NO ARG parallel=1 # Do the build! RUN cd /root/bladeRF/ \ && mkdir -p build \ && cd build \ && cmake \ -DBUILD_DOCUMENTATION=ON \ -DCMAKE_C_COMPILER=${compiler} \ -DCMAKE_BUILD_TYPE=${buildtype} \ -DENABLE_FX3_BUILD=OFF \ -DENABLE_HOST_BUILD=ON \ -DTAGGED_RELEASE=${taggedrelease} \ ../ \ && make -j${parallel} \ && make install \ && ldconfig bladeRF-2024.05/host/misc/docker/debian-jessie.Dockerfile000066400000000000000000000046031457144405000230460ustar00rootroot00000000000000# This file is part of the bladeRF project: # http://www.github.com/nuand/bladeRF # # Copyright (c) 2018 Nuand LLC. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. FROM debian:jessie LABEL maintainer="Nuand LLC " LABEL version="0.0.2" LABEL description="CI build environment for the bladeRF project" LABEL com.nuand.ci.distribution.name="Debian" LABEL com.nuand.ci.distribution.codename="jessie" LABEL com.nuand.ci.distribution.version="8" # Install things RUN apt-get update \ && apt-get install -y \ build-essential \ clang \ cmake \ doxygen \ git \ help2man \ libtecla-dev \ libusb-1.0-0-dev \ pandoc \ pkg-config \ usbutils \ && apt-get clean # Copy in our build context COPY --from=nuand/bladerf-buildenv:base /root/bladeRF /root/bladeRF COPY --from=nuand/bladerf-buildenv:base /root/.config /root/.config WORKDIR /root/bladeRF # Build arguments ARG compiler=gcc ARG buildtype=Release ARG taggedrelease=NO ARG parallel=1 # Do the build! RUN cd /root/bladeRF/ \ && mkdir -p build \ && cd build \ && cmake \ -DBUILD_DOCUMENTATION=ON \ -DCMAKE_C_COMPILER=${compiler} \ -DCMAKE_BUILD_TYPE=${buildtype} \ -DENABLE_FX3_BUILD=OFF \ -DENABLE_HOST_BUILD=ON \ -DTAGGED_RELEASE=${taggedrelease} \ ../ \ && make -j${parallel} \ && make install \ && ldconfig bladeRF-2024.05/host/misc/docker/debian-stretch-i386.Dockerfile000066400000000000000000000046171457144405000237340ustar00rootroot00000000000000# This file is part of the bladeRF project: # http://www.github.com/nuand/bladeRF # # Copyright (c) 2018 Nuand LLC. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. FROM i386/debian:stretch LABEL maintainer="Nuand LLC " LABEL version="0.0.2" LABEL description="CI build environment for the bladeRF project" LABEL com.nuand.ci.distribution.name="Debian" LABEL com.nuand.ci.distribution.codename="stretch-i386" LABEL com.nuand.ci.distribution.version="9" # Install things RUN apt-get update \ && apt-get install -y \ build-essential \ clang \ cmake \ doxygen \ git \ help2man \ libtecla-dev \ libusb-1.0-0-dev \ pandoc \ pkg-config \ usbutils \ && apt-get clean # Copy in our build context COPY --from=nuand/bladerf-buildenv:base /root/bladeRF /root/bladeRF COPY --from=nuand/bladerf-buildenv:base /root/.config /root/.config WORKDIR /root/bladeRF # Build arguments ARG compiler=gcc ARG buildtype=Release ARG taggedrelease=NO ARG parallel=1 # Do the build! RUN cd /root/bladeRF/ \ && mkdir -p build \ && cd build \ && cmake \ -DBUILD_DOCUMENTATION=ON \ -DCMAKE_C_COMPILER=${compiler} \ -DCMAKE_BUILD_TYPE=${buildtype} \ -DENABLE_FX3_BUILD=OFF \ -DENABLE_HOST_BUILD=ON \ -DTAGGED_RELEASE=${taggedrelease} \ ../ \ && make -j${parallel} \ && make install \ && ldconfig bladeRF-2024.05/host/misc/docker/debian-stretch.Dockerfile000066400000000000000000000046051457144405000232420ustar00rootroot00000000000000# This file is part of the bladeRF project: # http://www.github.com/nuand/bladeRF # # Copyright (c) 2018 Nuand LLC. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. FROM debian:stretch LABEL maintainer="Nuand LLC " LABEL version="0.0.2" LABEL description="CI build environment for the bladeRF project" LABEL com.nuand.ci.distribution.name="Debian" LABEL com.nuand.ci.distribution.codename="stretch" LABEL com.nuand.ci.distribution.version="9" # Install things RUN apt-get update \ && apt-get install -y \ build-essential \ clang \ cmake \ doxygen \ git \ help2man \ libtecla-dev \ libusb-1.0-0-dev \ pandoc \ pkg-config \ usbutils \ && apt-get clean # Copy in our build context COPY --from=nuand/bladerf-buildenv:base /root/bladeRF /root/bladeRF COPY --from=nuand/bladerf-buildenv:base /root/.config /root/.config WORKDIR /root/bladeRF # Build arguments ARG compiler=gcc ARG buildtype=Release ARG taggedrelease=NO ARG parallel=1 # Do the build! RUN cd /root/bladeRF/ \ && mkdir -p build \ && cd build \ && cmake \ -DBUILD_DOCUMENTATION=ON \ -DCMAKE_C_COMPILER=${compiler} \ -DCMAKE_BUILD_TYPE=${buildtype} \ -DENABLE_FX3_BUILD=OFF \ -DENABLE_HOST_BUILD=ON \ -DTAGGED_RELEASE=${taggedrelease} \ ../ \ && make -j${parallel} \ && make install \ && ldconfig bladeRF-2024.05/host/misc/docker/fedora-latest.Dockerfile000066400000000000000000000047161457144405000231030ustar00rootroot00000000000000# This file is part of the bladeRF project: # http://www.github.com/nuand/bladeRF # # Copyright (c) 2018 Nuand LLC. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. FROM fedora:latest LABEL maintainer="Nuand LLC " LABEL version="0.0.3" LABEL description="CI build environment for the bladeRF project" LABEL com.nuand.ci.distribution.name="Fedora" LABEL com.nuand.ci.distribution.version="latest" # Install things RUN yum groupinstall -y "Development Tools" \ && yum install -y \ clang \ cmake \ doxygen \ help2man \ hostname \ libedit \ libedit-devel \ libusbx \ libusbx-devel \ pandoc \ wget \ && yum clean all \ && rm -rf /var/cache/yum \ && echo "/usr/local/lib" > /etc/ld.so.conf.d/locallib.conf \ && echo "/usr/local/lib64" >> /etc/ld.so.conf.d/locallib.conf # Copy in our build context COPY --from=nuand/bladerf-buildenv:base /root/bladeRF /root/bladeRF COPY --from=nuand/bladerf-buildenv:base /root/.config /root/.config WORKDIR /root/bladeRF # Build arguments ARG compiler=gcc ARG buildtype=Release ARG taggedrelease=NO ARG parallel=1 # Do the build! RUN cd /root/bladeRF/ \ && mkdir -p build \ && cd build \ && cmake \ -DBUILD_DOCUMENTATION=ON \ -DCMAKE_C_COMPILER=${compiler} \ -DCMAKE_BUILD_TYPE=${buildtype} \ -DENABLE_FX3_BUILD=OFF \ -DENABLE_HOST_BUILD=ON \ -DTAGGED_RELEASE=${taggedrelease} \ ../ \ && make -j${parallel} \ && make install \ && ldconfig bladeRF-2024.05/host/misc/docker/freshen.bash000066400000000000000000000025741457144405000206510ustar00rootroot00000000000000#!/usr/bin/env bash # # Copyright (c) 2018 Nuand LLC # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. echo "Cleaning up old containers..." docker images -q nuand/bladerf-buildenv | xargs docker rmi froms=$(grep -h "^FROM" $(dirname "${0}")/*.Dockerfile | grep -v scratch \ | cut -d' ' -f2 | sort | uniq) for img in ${froms} do echo "Freshening: ${img}" docker pull ${img} done bladeRF-2024.05/host/misc/docker/opensuse-latest.Dockerfile000066400000000000000000000044171457144405000235020ustar00rootroot00000000000000# This file is part of the bladeRF project: # http://www.github.com/nuand/bladeRF # # Copyright (c) 2018 Nuand LLC. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. FROM opensuse/leap:latest LABEL maintainer="Nuand LLC " LABEL version="0.0.1" LABEL description="CI build environment for the bladeRF project" LABEL com.nuand.ci.distribution.name="OpenSUSE" LABEL com.nuand.ci.distribution.version="latest" # Install things RUN zypper --non-interactive install \ clang \ cmake \ doxygen \ gcc \ git \ help2man \ libedit \ libedit-devel \ libusb \ libusb-devel \ pandoc \ wget # Copy in our build context COPY --from=nuand/bladerf-buildenv:base /root/bladeRF /root/bladeRF COPY --from=nuand/bladerf-buildenv:base /root/.config /root/.config WORKDIR /root/bladeRF # Build arguments ARG compiler=gcc ARG buildtype=Release ARG taggedrelease=NO ARG parallel=1 # Do the build! RUN cd /root/bladeRF/ \ && mkdir -p build \ && cd build \ && cmake \ -DBUILD_DOCUMENTATION=ON \ -DCMAKE_C_COMPILER=${compiler} \ -DCMAKE_BUILD_TYPE=${buildtype} \ -DENABLE_FX3_BUILD=OFF \ -DENABLE_HOST_BUILD=ON \ -DTAGGED_RELEASE=${taggedrelease} \ ../ \ && make -j${parallel} \ && make install \ && ldconfig bladeRF-2024.05/host/misc/docker/parallel.bash000066400000000000000000000123551457144405000210110ustar00rootroot00000000000000#!/usr/bin/env bash # # CI build orchestration for libbladeRF on Linux # # Copyright (c) 2018 Nuand LLC # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # Usage: # parallel.bash [--no-base] [target [target ...]] # Enable job control set -m # Initial assumptions... max_builds=4 max_load=$(nproc) repository="nuand/bladerf-buildenv" if [ -z "${max_load}" ]; then echo "nproc not found, assuming max load of 8" max_load=8 fi # assuming the script is 3 levels down (host/misc/docker) dfdir=$(dirname "${0}") basedir=${dfdir}/../../.. buildscript=${dfdir}/build.bash # globals success="" failure="" rels="" # command line arg if [ "${1}" == "--no-base" ]; then echo "*** Won't rebuild the base image" _skip_base=1 shift fi loadavg () { # usage: loadavg # outputs the current load average as an integer if [ -f "/proc/loadavg" ]; then awk '{print int($1+0)}' /proc/loadavg else echo 1 fi } do_base () { # usage: do_base # builds the base image docker build -f host/misc/docker/_base.Dockerfile \ -t ${repository}:base \ . __status=$? } wait_for_jobs () { # usage: wait_for_jobs n # spins until there are fewer than n jobs active [ -z "${1}" ] && exit 1 while [ "$(jobs | wc -l)" -ge "${1}" ]; do if [ -z "${waiting}" ]; then echo -n "*** Pausing: job count above threshold ($(jobs | wc -l) >= ${1})" waiting=1 else echo -n "." fi sleep 5 done if [ -n "${waiting}" ]; then echo "" unset waiting fi } wait_for_load () { # usage: wait_for_load # spins until the system load is less than n [ -z "${1}" ] && exit 1 while [ "$(loadavg)" -ge "${1}" ]; do if [ -z "${waiting}" ]; then echo -n "*** Pausing: load average above threshold ($(loadavg) >= ${1})" waiting=1 else echo -n "." fi sleep 5 done if [ -n "${waiting}" ]; then echo "" unset waiting fi } do_spawn () { # usage: do_spawn dockerfile... # spawns a subprocess to execute a build, being mindful of limits [ -z "${1}" ] && exit 1 dff=${1} rel=$(basename -s ".Dockerfile" ${dff}) if [ ! -f "${dff}" ]; then echo "*** File doesn't exist: ${1}" exit 1 fi wait_for_jobs ${max_builds} wait_for_load ${max_load} bash ${buildscript} ${rel} 2>&1 > ${LOGDIR}/${rel}.txt & __pid=$! echo "*** Spawned ${rel} pid ${__pid}. Jobs: $(jobs | wc -l), loadavg: $(loadavg)" } crawl_dir () { # usage: crawl_dir path... # outputs a space-seperated list of Dockerfiles in that path # e.g. crawl_dir host/misc/docker -> archlinux centos-7 clang-scan etc... [ -z "${1}" ] && exit 1 _out="" for f in $(ls ${1}/*.Dockerfile); do _out="${_out} $(basename -s ".Dockerfile" ${f})" done echo ${_out} } LOGDIR=$(mktemp -d /tmp/bladerf-docker-logs.XXXXXXXXXX) [ -z "${LOGDIR}" ] && echo "Couldn't create a tempdir for logs" && exit 1 echo "*** log dir: ${LOGDIR}" if [ -z "${*}" ]; then # assume all files candidates=$(crawl_dir ${dfdir}) else # user selecting a few for candidate in ${*}; do candidates="${candidates} ${candidate}" done fi echo "*** Will build: ${candidates}" cd ${basedir} if [ -z "${_skip_base}" ]; then echo "*** Running initial build job: _base" do_base 2>&1 > ${LOGDIR}/_base.txt if [ "${__status}" -ne 0 ]; then echo "*** _base build failed, can't continue" cat ${LOGDIR}/_base.txt exit 1 fi fi for dff in $candidates; do if [ "${dff}" == "_base" ]; then continue fi do_spawn ${dfdir}/${dff}.Dockerfile WAITPID="${WAITPID} ${__pid}" # sleep for a bit to provide settling time sleep 5 done echo "*** Waiting for jobs to complete" wait ${WAITPID} echo "*** Build logs:" for f in ${LOGDIR}/*.txt; do mylog="$(basename -s .txt ${f})" echo "*** BEGIN LOGS for ${mylog}" sed "s/.*/[${mylog}] &/" ${f} done echo -n "*** Successful: " grep -h "^RESULT:SUCCESS:" ${LOGDIR}/*.txt | sed 's/RESULT:SUCCESS://' | xargs echo -n "*** Failed: " grep -h "^RESULT:FAILED:" ${LOGDIR}/*.txt | sed 's/RESULT:FAILED://' | xargs rm -r ${LOGDIR} bladeRF-2024.05/host/misc/docker/test.bash000066400000000000000000000123651457144405000201750ustar00rootroot00000000000000#!/usr/bin/env bash # # CI test orchestration for libbladeRF on Linux # # Copyright (c) 2018 Nuand LLC # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # # # Run this script with: # docker run --rm -i -t --privileged -v /dev/bus/usb:/dev/bus/usb \ # bash host/misc/docker/test.bash [boardtype [device specifier]] # # where: # boardtype := "bladeRF" or "bladeRF-micro" # if [ -n "$1" ]; then if [ "$1" == "bladeRF" ]; then _board="$1" _usb_vid="2cf0" _usb_pid="5246" _usb_manufacturer="Nuand" _usb_product="bladeRF" elif [ "$1" == "bladeRF-micro" ]; then _board="$1" _vid="2cf0" _pid="5250" _usb_manufacturer="Nuand" _usb_product="bladeRF 2.0" else echo "error: boardtype '$1' is not valid" echo "valid choices: bladeRF bladeRF-micro" exit 1 fi fi if [ -n "$2" ]; then _args="-d $2" fi BUILD_DIR="" if [ -d "build/host/output" ]; then BUILD_DIR="build/host/output" elif [ -d "host/build/output" ]; then BUILD_DIR="host/build/output" else echo "error: could not find a build artifacts directory" exit 1 fi do_cmd() { # do_test command... [ -z "$1" ] && return 1 __cmd="$*" echo "*** RUNNING: ${__cmd}" __cmd_result=$(${__cmd} 2>&1) __cmd_status=$? echo "*** status=${__cmd_status}, output:" echo "${__cmd_result}" | sed 's/.*/\.\.\. &/' } do_ask() { # do_ask expected result... if [ ${__cmd_status} -ne 0 ]; then __failure="nonzero status code: ${__cmd_status}" return 1 fi echo "*** Expected result: $*" while true; do read -p ">>> Is the result as expected? [Y/n] " yn case ${yn:-y} in [Yy]* ) return 0;; [Nn]* ) __failure="result not as expected"; return 1;; * ) echo "Please answer yes or no.";; esac done } do_test() { # do_test "command" "expected result" echo "" echo "***********************" echo "*** BEGIN TEST CASE ***" echo "***********************" do_cmd "$1" do_ask "$2" __stat=$? if [ ${__stat} -ne 0 ]; then echo "--- FAILED (${1}): ${__failure}" else echo "+++ PASSED (${1})" fi } usb_field() { # usb_field vpi:vci fieldname [ -z "$1" ] || [ -z "$2" ] && return 1 lsusb -v -d $1 | awk "/$2/ {\$1=\$2=\"\"; print substr(\$0,3)}" } do_usb_check() { # do_usb_check if [ -z "${_usb_vid}" ] || [ -z "${_usb_pid}" ]; then echo "*** Skipping USB check (_usb_vid and/or _usb_pid unset)" return 0 fi echo "" echo "***********************" echo "*** BEGIN USB CHECK ***" echo "***********************" out=$(lsusb -d ${_usb_vid}:${_usb_pid}) if [ -n "${out}" ]; then echo "+++ PASSED (lsusb device search): ${out}" else echo "--- FAILED (lsusb device search)" fi if [ -n "${_usb_manufacturer}" ]; then out=$(usb_field ${_usb_vid}:${_usb_pid} iManufacturer) if [ "${out}" == "${_usb_manufacturer}" ]; then echo "+++ PASSED (lsusb manufacturer check): ${out}" else echo "--- FAILED (lsusb manufacturer check): ${out}" fi fi if [ -n "${_usb_product}" ]; then out=$(usb_field ${_usb_vid}:${_usb_pid} iProduct) if [ "${out}" == "${_usb_product}" ]; then echo "+++ PASSED (lsusb product check): ${out}" else echo "--- FAILED (lsusb product check): ${out}" fi fi } do_usb_check do_test "${BUILD_DIR}/libbladeRF_test_c" "libbladeRF " do_test "${BUILD_DIR}/libbladeRF_test_cpp" "libbladeRF " do_test "bladeRF-cli ${_args} -e probe" "list of all available boards" do_test "bladeRF-cli ${_args} -e version" "versions of bladeRF-cli, libbladeRF, firmware, and FPGA" do_test "bladeRF-cli ${_args} -e info" "serial number, VCTCXO DAC calibration, FPGA size" do_test "${BUILD_DIR}/libbladeRF_test_digital_loopback ${_args} -l fw -c 500000000" "100.0% match" do_test "${BUILD_DIR}/libbladeRF_test_digital_loopback ${_args} -l fpga -c 500000000" "100.0% match" if [ "$_board" == "bladeRF-micro" ]; then do_test "${BUILD_DIR}/libbladeRF_test_digital_loopback ${_args} -l rfic -c 500000000" "100.0% match" else echo "*** Skipping RFIC loopback test" fi bladeRF-2024.05/host/misc/docker/ubuntu-bionic-i386.Dockerfile000066400000000000000000000046211457144405000236160ustar00rootroot00000000000000# This file is part of the bladeRF project: # http://www.github.com/nuand/bladeRF # # Copyright (c) 2018 Nuand LLC. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. FROM i386/ubuntu:bionic LABEL maintainer="Nuand LLC " LABEL version="0.0.2" LABEL description="CI build environment for the bladeRF project" LABEL com.nuand.ci.distribution.name="Ubuntu" LABEL com.nuand.ci.distribution.codename="bionic-i386" LABEL com.nuand.ci.distribution.version="18.04" # Install things RUN apt-get update \ && apt-get install -y \ build-essential \ clang \ cmake \ doxygen \ git \ help2man \ libtecla-dev \ libusb-1.0-0-dev \ pandoc \ pkg-config \ usbutils \ && apt-get clean # Copy in our build context COPY --from=nuand/bladerf-buildenv:base /root/bladeRF /root/bladeRF COPY --from=nuand/bladerf-buildenv:base /root/.config /root/.config WORKDIR /root/bladeRF # Build arguments ARG compiler=gcc ARG buildtype=Release ARG taggedrelease=NO ARG parallel=1 # Do the build! RUN cd /root/bladeRF/ \ && mkdir -p build \ && cd build \ && cmake \ -DBUILD_DOCUMENTATION=ON \ -DCMAKE_C_COMPILER=${compiler} \ -DCMAKE_BUILD_TYPE=${buildtype} \ -DENABLE_FX3_BUILD=OFF \ -DENABLE_HOST_BUILD=ON \ -DTAGGED_RELEASE=${taggedrelease} \ ../ \ && make -j${parallel} \ && make install \ && ldconfig bladeRF-2024.05/host/misc/docker/ubuntu-bionic.Dockerfile000066400000000000000000000046071457144405000231330ustar00rootroot00000000000000# This file is part of the bladeRF project: # http://www.github.com/nuand/bladeRF # # Copyright (c) 2018 Nuand LLC. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. FROM ubuntu:bionic LABEL maintainer="Nuand LLC " LABEL version="0.0.2" LABEL description="CI build environment for the bladeRF project" LABEL com.nuand.ci.distribution.name="Ubuntu" LABEL com.nuand.ci.distribution.codename="bionic" LABEL com.nuand.ci.distribution.version="18.04" # Install things RUN apt-get update \ && apt-get install -y \ build-essential \ clang \ cmake \ doxygen \ git \ help2man \ libtecla-dev \ libusb-1.0-0-dev \ pandoc \ pkg-config \ usbutils \ && apt-get clean # Copy in our build context COPY --from=nuand/bladerf-buildenv:base /root/bladeRF /root/bladeRF COPY --from=nuand/bladerf-buildenv:base /root/.config /root/.config WORKDIR /root/bladeRF # Build arguments ARG compiler=gcc ARG buildtype=Release ARG taggedrelease=NO ARG parallel=1 # Do the build! RUN cd /root/bladeRF/ \ && mkdir -p build \ && cd build \ && cmake \ -DBUILD_DOCUMENTATION=ON \ -DCMAKE_C_COMPILER=${compiler} \ -DCMAKE_BUILD_TYPE=${buildtype} \ -DENABLE_FX3_BUILD=OFF \ -DENABLE_HOST_BUILD=ON \ -DTAGGED_RELEASE=${taggedrelease} \ ../ \ && make -j${parallel} \ && make install \ && ldconfig bladeRF-2024.05/host/misc/docker/ubuntu-cosmic-i386.Dockerfile000066400000000000000000000046211457144405000236300ustar00rootroot00000000000000# This file is part of the bladeRF project: # http://www.github.com/nuand/bladeRF # # Copyright (c) 2018 Nuand LLC. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. FROM i386/ubuntu:cosmic LABEL maintainer="Nuand LLC " LABEL version="0.0.2" LABEL description="CI build environment for the bladeRF project" LABEL com.nuand.ci.distribution.name="Ubuntu" LABEL com.nuand.ci.distribution.codename="cosmic-i386" LABEL com.nuand.ci.distribution.version="18.10" # Install things RUN apt-get update \ && apt-get install -y \ build-essential \ clang \ cmake \ doxygen \ git \ help2man \ libtecla-dev \ libusb-1.0-0-dev \ pandoc \ pkg-config \ usbutils \ && apt-get clean # Copy in our build context COPY --from=nuand/bladerf-buildenv:base /root/bladeRF /root/bladeRF COPY --from=nuand/bladerf-buildenv:base /root/.config /root/.config WORKDIR /root/bladeRF # Build arguments ARG compiler=gcc ARG buildtype=Release ARG taggedrelease=NO ARG parallel=1 # Do the build! RUN cd /root/bladeRF/ \ && mkdir -p build \ && cd build \ && cmake \ -DBUILD_DOCUMENTATION=ON \ -DCMAKE_C_COMPILER=${compiler} \ -DCMAKE_BUILD_TYPE=${buildtype} \ -DENABLE_FX3_BUILD=OFF \ -DENABLE_HOST_BUILD=ON \ -DTAGGED_RELEASE=${taggedrelease} \ ../ \ && make -j${parallel} \ && make install \ && ldconfig bladeRF-2024.05/host/misc/docker/ubuntu-cosmic.Dockerfile000066400000000000000000000046071457144405000231450ustar00rootroot00000000000000# This file is part of the bladeRF project: # http://www.github.com/nuand/bladeRF # # Copyright (c) 2018 Nuand LLC. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. FROM ubuntu:cosmic LABEL maintainer="Nuand LLC " LABEL version="0.0.2" LABEL description="CI build environment for the bladeRF project" LABEL com.nuand.ci.distribution.name="Ubuntu" LABEL com.nuand.ci.distribution.codename="cosmic" LABEL com.nuand.ci.distribution.version="18.10" # Install things RUN apt-get update \ && apt-get install -y \ build-essential \ clang \ cmake \ doxygen \ git \ help2man \ libtecla-dev \ libusb-1.0-0-dev \ pandoc \ pkg-config \ usbutils \ && apt-get clean # Copy in our build context COPY --from=nuand/bladerf-buildenv:base /root/bladeRF /root/bladeRF COPY --from=nuand/bladerf-buildenv:base /root/.config /root/.config WORKDIR /root/bladeRF # Build arguments ARG compiler=gcc ARG buildtype=Release ARG taggedrelease=NO ARG parallel=1 # Do the build! RUN cd /root/bladeRF/ \ && mkdir -p build \ && cd build \ && cmake \ -DBUILD_DOCUMENTATION=ON \ -DCMAKE_C_COMPILER=${compiler} \ -DCMAKE_BUILD_TYPE=${buildtype} \ -DENABLE_FX3_BUILD=OFF \ -DENABLE_HOST_BUILD=ON \ -DTAGGED_RELEASE=${taggedrelease} \ ../ \ && make -j${parallel} \ && make install \ && ldconfig bladeRF-2024.05/host/misc/docker/ubuntu-disco-i386.Dockerfile000066400000000000000000000046171457144405000234610ustar00rootroot00000000000000# This file is part of the bladeRF project: # http://www.github.com/nuand/bladeRF # # Copyright (c) 2019 Nuand LLC. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. FROM i386/ubuntu:disco LABEL maintainer="Nuand LLC " LABEL version="0.0.2" LABEL description="CI build environment for the bladeRF project" LABEL com.nuand.ci.distribution.name="Ubuntu" LABEL com.nuand.ci.distribution.codename="disco-i386" LABEL com.nuand.ci.distribution.version="19.04" # Install things RUN apt-get update \ && apt-get install -y \ build-essential \ clang \ cmake \ doxygen \ git \ help2man \ libtecla-dev \ libusb-1.0-0-dev \ pandoc \ pkg-config \ usbutils \ && apt-get clean # Copy in our build context COPY --from=nuand/bladerf-buildenv:base /root/bladeRF /root/bladeRF COPY --from=nuand/bladerf-buildenv:base /root/.config /root/.config WORKDIR /root/bladeRF # Build arguments ARG compiler=gcc ARG buildtype=Release ARG taggedrelease=NO ARG parallel=1 # Do the build! RUN cd /root/bladeRF/ \ && mkdir -p build \ && cd build \ && cmake \ -DBUILD_DOCUMENTATION=ON \ -DCMAKE_C_COMPILER=${compiler} \ -DCMAKE_BUILD_TYPE=${buildtype} \ -DENABLE_FX3_BUILD=OFF \ -DENABLE_HOST_BUILD=ON \ -DTAGGED_RELEASE=${taggedrelease} \ ../ \ && make -j${parallel} \ && make install \ && ldconfig bladeRF-2024.05/host/misc/docker/ubuntu-disco.Dockerfile000066400000000000000000000046051457144405000227670ustar00rootroot00000000000000# This file is part of the bladeRF project: # http://www.github.com/nuand/bladeRF # # Copyright (c) 2019 Nuand LLC. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. FROM ubuntu:disco LABEL maintainer="Nuand LLC " LABEL version="0.0.2" LABEL description="CI build environment for the bladeRF project" LABEL com.nuand.ci.distribution.name="Ubuntu" LABEL com.nuand.ci.distribution.codename="disco" LABEL com.nuand.ci.distribution.version="19.04" # Install things RUN apt-get update \ && apt-get install -y \ build-essential \ clang \ cmake \ doxygen \ git \ help2man \ libtecla-dev \ libusb-1.0-0-dev \ pandoc \ pkg-config \ usbutils \ && apt-get clean # Copy in our build context COPY --from=nuand/bladerf-buildenv:base /root/bladeRF /root/bladeRF COPY --from=nuand/bladerf-buildenv:base /root/.config /root/.config WORKDIR /root/bladeRF # Build arguments ARG compiler=gcc ARG buildtype=Release ARG taggedrelease=NO ARG parallel=1 # Do the build! RUN cd /root/bladeRF/ \ && mkdir -p build \ && cd build \ && cmake \ -DBUILD_DOCUMENTATION=ON \ -DCMAKE_C_COMPILER=${compiler} \ -DCMAKE_BUILD_TYPE=${buildtype} \ -DENABLE_FX3_BUILD=OFF \ -DENABLE_HOST_BUILD=ON \ -DTAGGED_RELEASE=${taggedrelease} \ ../ \ && make -j${parallel} \ && make install \ && ldconfig bladeRF-2024.05/host/misc/docker/ubuntu-eoan-i386.Dockerfile000066400000000000000000000046151457144405000233000ustar00rootroot00000000000000# This file is part of the bladeRF project: # http://www.github.com/nuand/bladeRF # # Copyright (c) 2018 Nuand LLC. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. FROM i386/ubuntu:eoan LABEL maintainer="Nuand LLC " LABEL version="0.0.2" LABEL description="CI build environment for the bladeRF project" LABEL com.nuand.ci.distribution.name="Ubuntu" LABEL com.nuand.ci.distribution.codename="eoan" LABEL com.nuand.ci.distribution.version="19.10-i386" # Install things RUN apt-get update \ && apt-get install -y \ build-essential \ clang \ cmake \ doxygen \ git \ help2man \ libtecla-dev \ libusb-1.0-0-dev \ pandoc \ pkg-config \ usbutils \ && apt-get clean # Copy in our build context COPY --from=nuand/bladerf-buildenv:base /root/bladeRF /root/bladeRF COPY --from=nuand/bladerf-buildenv:base /root/.config /root/.config WORKDIR /root/bladeRF # Build arguments ARG compiler=gcc ARG buildtype=Release ARG taggedrelease=NO ARG parallel=1 # Do the build! RUN cd /root/bladeRF/ \ && mkdir -p build \ && cd build \ && cmake \ -DBUILD_DOCUMENTATION=ON \ -DCMAKE_C_COMPILER=${compiler} \ -DCMAKE_BUILD_TYPE=${buildtype} \ -DENABLE_FX3_BUILD=OFF \ -DENABLE_HOST_BUILD=ON \ -DTAGGED_RELEASE=${taggedrelease} \ ../ \ && make -j${parallel} \ && make install \ && ldconfig bladeRF-2024.05/host/misc/docker/ubuntu-eoan.Dockerfile000066400000000000000000000046031457144405000226060ustar00rootroot00000000000000# This file is part of the bladeRF project: # http://www.github.com/nuand/bladeRF # # Copyright (c) 2018 Nuand LLC. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. FROM ubuntu:eoan LABEL maintainer="Nuand LLC " LABEL version="0.0.2" LABEL description="CI build environment for the bladeRF project" LABEL com.nuand.ci.distribution.name="Ubuntu" LABEL com.nuand.ci.distribution.codename="eoan" LABEL com.nuand.ci.distribution.version="19.10" # Install things RUN apt-get update \ && apt-get install -y \ build-essential \ clang \ cmake \ doxygen \ git \ help2man \ libtecla-dev \ libusb-1.0-0-dev \ pandoc \ pkg-config \ usbutils \ && apt-get clean # Copy in our build context COPY --from=nuand/bladerf-buildenv:base /root/bladeRF /root/bladeRF COPY --from=nuand/bladerf-buildenv:base /root/.config /root/.config WORKDIR /root/bladeRF # Build arguments ARG compiler=gcc ARG buildtype=Release ARG taggedrelease=NO ARG parallel=1 # Do the build! RUN cd /root/bladeRF/ \ && mkdir -p build \ && cd build \ && cmake \ -DBUILD_DOCUMENTATION=ON \ -DCMAKE_C_COMPILER=${compiler} \ -DCMAKE_BUILD_TYPE=${buildtype} \ -DENABLE_FX3_BUILD=OFF \ -DENABLE_HOST_BUILD=ON \ -DTAGGED_RELEASE=${taggedrelease} \ ../ \ && make -j${parallel} \ && make install \ && ldconfig bladeRF-2024.05/host/misc/docker/ubuntu-focal-i386.Dockerfile000066400000000000000000000046171457144405000234440ustar00rootroot00000000000000# This file is part of the bladeRF project: # http://www.github.com/nuand/bladeRF # # Copyright (c) 2018 Nuand LLC. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. FROM i386/ubuntu:focal LABEL maintainer="Nuand LLC " LABEL version="0.0.2" LABEL description="CI build environment for the bladeRF project" LABEL com.nuand.ci.distribution.name="Ubuntu" LABEL com.nuand.ci.distribution.codename="focal" LABEL com.nuand.ci.distribution.version="20.10-i386" # Install things RUN apt-get update \ && apt-get install -y \ build-essential \ clang \ cmake \ doxygen \ git \ help2man \ libtecla-dev \ libusb-1.0-0-dev \ pandoc \ pkg-config \ usbutils \ && apt-get clean # Copy in our build context COPY --from=nuand/bladerf-buildenv:base /root/bladeRF /root/bladeRF COPY --from=nuand/bladerf-buildenv:base /root/.config /root/.config WORKDIR /root/bladeRF # Build arguments ARG compiler=gcc ARG buildtype=Release ARG taggedrelease=NO ARG parallel=1 # Do the build! RUN cd /root/bladeRF/ \ && mkdir -p build \ && cd build \ && cmake \ -DBUILD_DOCUMENTATION=ON \ -DCMAKE_C_COMPILER=${compiler} \ -DCMAKE_BUILD_TYPE=${buildtype} \ -DENABLE_FX3_BUILD=OFF \ -DENABLE_HOST_BUILD=ON \ -DTAGGED_RELEASE=${taggedrelease} \ ../ \ && make -j${parallel} \ && make install \ && ldconfig bladeRF-2024.05/host/misc/docker/ubuntu-focal.Dockerfile000066400000000000000000000046051457144405000227520ustar00rootroot00000000000000# This file is part of the bladeRF project: # http://www.github.com/nuand/bladeRF # # Copyright (c) 2018 Nuand LLC. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. FROM ubuntu:focal LABEL maintainer="Nuand LLC " LABEL version="0.0.2" LABEL description="CI build environment for the bladeRF project" LABEL com.nuand.ci.distribution.name="Ubuntu" LABEL com.nuand.ci.distribution.codename="focal" LABEL com.nuand.ci.distribution.version="20.10" # Install things RUN apt-get update \ && apt-get install -y \ build-essential \ clang \ cmake \ doxygen \ git \ help2man \ libtecla-dev \ libusb-1.0-0-dev \ pandoc \ pkg-config \ usbutils \ && apt-get clean # Copy in our build context COPY --from=nuand/bladerf-buildenv:base /root/bladeRF /root/bladeRF COPY --from=nuand/bladerf-buildenv:base /root/.config /root/.config WORKDIR /root/bladeRF # Build arguments ARG compiler=gcc ARG buildtype=Release ARG taggedrelease=NO ARG parallel=1 # Do the build! RUN cd /root/bladeRF/ \ && mkdir -p build \ && cd build \ && cmake \ -DBUILD_DOCUMENTATION=ON \ -DCMAKE_C_COMPILER=${compiler} \ -DCMAKE_BUILD_TYPE=${buildtype} \ -DENABLE_FX3_BUILD=OFF \ -DENABLE_HOST_BUILD=ON \ -DTAGGED_RELEASE=${taggedrelease} \ ../ \ && make -j${parallel} \ && make install \ && ldconfig bladeRF-2024.05/host/misc/docker/ubuntu-trusty-i386.Dockerfile000066400000000000000000000046211457144405000237250ustar00rootroot00000000000000# This file is part of the bladeRF project: # http://www.github.com/nuand/bladeRF # # Copyright (c) 2018 Nuand LLC. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. FROM i386/ubuntu:trusty LABEL maintainer="Nuand LLC " LABEL version="0.0.2" LABEL description="CI build environment for the bladeRF project" LABEL com.nuand.ci.distribution.name="Ubuntu" LABEL com.nuand.ci.distribution.codename="trusty-i386" LABEL com.nuand.ci.distribution.version="14.04" # Install things RUN apt-get update \ && apt-get install -y \ build-essential \ clang \ cmake \ doxygen \ git \ help2man \ libtecla-dev \ libusb-1.0-0-dev \ pandoc \ pkg-config \ usbutils \ && apt-get clean # Copy in our build context COPY --from=nuand/bladerf-buildenv:base /root/bladeRF /root/bladeRF COPY --from=nuand/bladerf-buildenv:base /root/.config /root/.config WORKDIR /root/bladeRF # Build arguments ARG compiler=gcc ARG buildtype=Release ARG taggedrelease=NO ARG parallel=1 # Do the build! RUN cd /root/bladeRF/ \ && mkdir -p build \ && cd build \ && cmake \ -DBUILD_DOCUMENTATION=ON \ -DCMAKE_C_COMPILER=${compiler} \ -DCMAKE_BUILD_TYPE=${buildtype} \ -DENABLE_FX3_BUILD=OFF \ -DENABLE_HOST_BUILD=ON \ -DTAGGED_RELEASE=${taggedrelease} \ ../ \ && make -j${parallel} \ && make install \ && ldconfig bladeRF-2024.05/host/misc/docker/ubuntu-trusty.Dockerfile000066400000000000000000000046071457144405000232420ustar00rootroot00000000000000# This file is part of the bladeRF project: # http://www.github.com/nuand/bladeRF # # Copyright (c) 2018 Nuand LLC. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. FROM ubuntu:trusty LABEL maintainer="Nuand LLC " LABEL version="0.0.2" LABEL description="CI build environment for the bladeRF project" LABEL com.nuand.ci.distribution.name="Ubuntu" LABEL com.nuand.ci.distribution.codename="trusty" LABEL com.nuand.ci.distribution.version="14.04" # Install things RUN apt-get update \ && apt-get install -y \ build-essential \ clang \ cmake \ doxygen \ git \ help2man \ libtecla-dev \ libusb-1.0-0-dev \ pandoc \ pkg-config \ usbutils \ && apt-get clean # Copy in our build context COPY --from=nuand/bladerf-buildenv:base /root/bladeRF /root/bladeRF COPY --from=nuand/bladerf-buildenv:base /root/.config /root/.config WORKDIR /root/bladeRF # Build arguments ARG compiler=gcc ARG buildtype=Release ARG taggedrelease=NO ARG parallel=1 # Do the build! RUN cd /root/bladeRF/ \ && mkdir -p build \ && cd build \ && cmake \ -DBUILD_DOCUMENTATION=ON \ -DCMAKE_C_COMPILER=${compiler} \ -DCMAKE_BUILD_TYPE=${buildtype} \ -DENABLE_FX3_BUILD=OFF \ -DENABLE_HOST_BUILD=ON \ -DTAGGED_RELEASE=${taggedrelease} \ ../ \ && make -j${parallel} \ && make install \ && ldconfig bladeRF-2024.05/host/misc/docker/ubuntu-xenial-i386.Dockerfile000066400000000000000000000046211457144405000236330ustar00rootroot00000000000000# This file is part of the bladeRF project: # http://www.github.com/nuand/bladeRF # # Copyright (c) 2018 Nuand LLC. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. FROM i386/ubuntu:xenial LABEL maintainer="Nuand LLC " LABEL version="0.0.2" LABEL description="CI build environment for the bladeRF project" LABEL com.nuand.ci.distribution.name="Ubuntu" LABEL com.nuand.ci.distribution.codename="xenial-i386" LABEL com.nuand.ci.distribution.version="16.04" # Install things RUN apt-get update \ && apt-get install -y \ build-essential \ clang \ cmake \ doxygen \ git \ help2man \ libtecla-dev \ libusb-1.0-0-dev \ pandoc \ pkg-config \ usbutils \ && apt-get clean # Copy in our build context COPY --from=nuand/bladerf-buildenv:base /root/bladeRF /root/bladeRF COPY --from=nuand/bladerf-buildenv:base /root/.config /root/.config WORKDIR /root/bladeRF # Build arguments ARG compiler=gcc ARG buildtype=Release ARG taggedrelease=NO ARG parallel=1 # Do the build! RUN cd /root/bladeRF/ \ && mkdir -p build \ && cd build \ && cmake \ -DBUILD_DOCUMENTATION=ON \ -DCMAKE_C_COMPILER=${compiler} \ -DCMAKE_BUILD_TYPE=${buildtype} \ -DENABLE_FX3_BUILD=OFF \ -DENABLE_HOST_BUILD=ON \ -DTAGGED_RELEASE=${taggedrelease} \ ../ \ && make -j${parallel} \ && make install \ && ldconfig bladeRF-2024.05/host/misc/docker/ubuntu-xenial.Dockerfile000066400000000000000000000046071457144405000231500ustar00rootroot00000000000000# This file is part of the bladeRF project: # http://www.github.com/nuand/bladeRF # # Copyright (c) 2018 Nuand LLC. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. FROM ubuntu:xenial LABEL maintainer="Nuand LLC " LABEL version="0.0.2" LABEL description="CI build environment for the bladeRF project" LABEL com.nuand.ci.distribution.name="Ubuntu" LABEL com.nuand.ci.distribution.codename="xenial" LABEL com.nuand.ci.distribution.version="16.04" # Install things RUN apt-get update \ && apt-get install -y \ build-essential \ clang \ cmake \ doxygen \ git \ help2man \ libtecla-dev \ libusb-1.0-0-dev \ pandoc \ pkg-config \ usbutils \ && apt-get clean # Copy in our build context COPY --from=nuand/bladerf-buildenv:base /root/bladeRF /root/bladeRF COPY --from=nuand/bladerf-buildenv:base /root/.config /root/.config WORKDIR /root/bladeRF # Build arguments ARG compiler=gcc ARG buildtype=Release ARG taggedrelease=NO ARG parallel=1 # Do the build! RUN cd /root/bladeRF/ \ && mkdir -p build \ && cd build \ && cmake \ -DBUILD_DOCUMENTATION=ON \ -DCMAKE_C_COMPILER=${compiler} \ -DCMAKE_BUILD_TYPE=${buildtype} \ -DENABLE_FX3_BUILD=OFF \ -DENABLE_HOST_BUILD=ON \ -DTAGGED_RELEASE=${taggedrelease} \ ../ \ && make -j${parallel} \ && make install \ && ldconfig bladeRF-2024.05/host/misc/matlab/000077500000000000000000000000001457144405000163415ustar00rootroot00000000000000bladeRF-2024.05/host/misc/matlab/load_csv.m000066400000000000000000000012271457144405000203130ustar00rootroot00000000000000function [ signal, signal_i, signal_q ] = load_csv(filename) % LOAD_SC16Q11 Read a normalized complex signal from a CSV file % with integer bladeRF "SC16 Q11" values. % % [SIGNAL, SIGNAL_I, SIGNAL_Q] = load_csv(FILENAME) % % FILENAME is the source filename. % % SIGNAL is a complex signal with the real and imaginary components % within the range [-1.0, 1.0). % % SIGNAL_I and SIGNAL_Q are optional return values which contain the % real and imaginary components of SIGNAL as separate vectors. % csv = load(filename); signal_i = csv(:, 1) ./ 2048.0; signal_q = csv(:, 2) ./ 2048.0; signal = signal_i + 1j .* signal_q; end bladeRF-2024.05/host/misc/matlab/load_grcomplex.m000066400000000000000000000016211457144405000215160ustar00rootroot00000000000000function [ signal, signal_i, signal_q ] = load_grcomplex(filename) % LOAD_GRCOMPLEX Read a complex signal from a binary file containing % complex float samples saved using GNU Radio. % % The data in the file is assumed to be little-endian. % % % [SIGNAL, SIGNAL_I, SIGNAL_Q] = load_grcomplex(FILENAME) % % FILENAME is the source filename. % % SIGNAL is a complex signal with the real and imaginary components % within the range [-1.0, 1.0]. % % SIGNAL_I and SIGNAL_Q are optional return values which contain the % real and imaginary components of SIGNAL as separate vectors. % [f, err_msg] = fopen(filename, 'r', 'ieee-le'); if f ~= -1 data = fread(f, Inf, 'float'); signal_i = data(1:2:end-1, :); signal_q = data(2:2:end, :); signal = signal_i + 1j .* signal_q; fclose(f); else error(err_msg) end end bladeRF-2024.05/host/misc/matlab/load_sc16q11.m000066400000000000000000000015351457144405000206210ustar00rootroot00000000000000function [ signal, signal_i, signal_q ] = load_sc16q11(filename) % LOAD_SC16Q11 Read a normalized complex signal from a binary file in the % bladeRF "SC16 Q11" format. % % [SIGNAL, SIGNAL_I, SIGNAL_Q] = load_sc16q11(FILENAME) % % FILENAME is the source filename. % % SIGNAL is a complex signal with the real and imaginary components % within the range [-1.0, 1.0). % % SIGNAL_I and SIGNAL_Q are optional return values which contain the % real and imaginary components of SIGNAL as separate vectors. % [f, err_msg] = fopen(filename, 'r', 'ieee-le'); if f ~= -1 data = fread(f, Inf, 'int16'); signal_i = data(1:2:end - 1, :) ./ 2048.0; signal_q = data(2:2:end, :) ./ 2048.0; signal = signal_i + 1j .* signal_q; fclose(f); else error(err_msg); end end bladeRF-2024.05/host/misc/matlab/save_csv.m000066400000000000000000000012011457144405000203220ustar00rootroot00000000000000function save_csv(filename, signal) % SAVE_SC16Q11 Write a normalized complex signal to a CSV file in the % as integer bladeRF "SC16 Q11" values. % % FILENAME is the target filename. The file will be overwritten if it % already exists. % % SIGNAL is a complex signal with the real and imaginary components % within the range [-1.0, 1.0). sig_i = round(real(signal) .* 2048.0); sig_i(sig_i > 2047) = 2047; sig_i(sig_i < -2048) = -2048; sig_q = round(imag(signal) .* 2048.0); sig_q(sig_q > 2047) = 2047; sig_q(sig_q < -2048) = -2048; sig = [sig_i sig_q]; csvwrite(filename, sig); end bladeRF-2024.05/host/misc/matlab/save_grcomplex.m000066400000000000000000000017341457144405000215420ustar00rootroot00000000000000function [ret] = save_grcomplex(filename, signal) % SAVE_GRCOMPLEX Write a normalized complex signal to a binary file in the % GNU Radio complex float format. % % [RET] = save_grcomplex(FILENAME, SIGNAL) % % RET is 1 on success, and 0 on failure. % % FILENAME is the target filename. The file will be overwritten if it % already exists. The file data is written in little-endian format. % % SIGNAL is a complex signal with the real and imaginary components % within the range [-1.0, 1.0]. [f, err_msg] = fopen(filename, 'w', 'ieee-le'); if f ~= -1 sig_i = real(signal); sig_q = imag(signal); sig_len = 2 * length(sig_i); sig_out(1:2:sig_len-1) = sig_i; sig_out(2:2:sig_len) = sig_q; count = fwrite(f, sig_out, 'float'); fclose(f); if count == sig_len; ret = 1; else ret = 0; end else error(err_msg); ret = 0; end end bladeRF-2024.05/host/misc/matlab/save_sc16q11.m000066400000000000000000000022341457144405000206350ustar00rootroot00000000000000function [ret] = save_sc16q11(filename, signal) % SAVE_SC16Q11 Write a normalized complex signal to a binary file in the % bladeRF "SC16 Q11" format. % % [RET] = save_sc16q11(FILENAME, SIGNAL) % % RET is 1 on success, and 0 on failure. % % FILENAME is the target filename. The file will be overwritten if it % already exists. The file data is written in little-endian format. % % SIGNAL is a complex signal with the real and imaginary components % within the range [-1.0, 1.0). [f, err_msg] = fopen(filename, 'w', 'ieee-le'); if f ~= -1 sig_i = round(real(signal) .* 2048.0); sig_i(sig_i > 2047) = 2047; sig_i(sig_i < -2048) = -2048; sig_q = round(imag(signal) .* 2048.0); sig_q(sig_q > 2047) = 2047; sig_q(sig_q < -2048) = -2048; assert(length(sig_i) == length(sig_q)); sig_len = 2 * length(sig_i); sig_out(1:2:sig_len - 1) = sig_i; sig_out(2:2:sig_len) = sig_q; count = fwrite(f, sig_out, 'int16'); fclose(f); if count == sig_len; ret = 1; else end else error(err_msg); ret = 0; end end bladeRF-2024.05/host/misc/python/000077500000000000000000000000001457144405000164225ustar00rootroot00000000000000bladeRF-2024.05/host/misc/python/bin2csv.py000077500000000000000000000023411457144405000203450ustar00rootroot00000000000000#!/usr/bin/env python3 # # Convert a given bladeRF SC16Q11 binary samples file to CSV. # import csv import struct import sys from pathlib import Path def chunked_read( fobj, chunk_bytes = 4*1024 ): while True: data = fobj.read(chunk_bytes) if( not data ): break else: yield data def bin2csv( binfile = None, csvfile = None, chunk_bytes = 4*1024 ): with open(binfile, 'rb') as b: with open(csvfile, 'w') as c: csvwriter = csv.writer(c, delimiter=',') count = 0 for data in chunked_read(b, chunk_bytes = chunk_bytes): count += len(data) for i in range(0, len(data), 4): sig_i, = struct.unpack(' query.txt find /i "x86" < query.txt > strcheck.txt if %ERRORLEVEL% == 0 ( echo 32-bit OS detected. Skipping 64-bit build goto BUILD_32 ) mkdir %BUILDDIR64% pushd %BUILDDIR64% echo ====================== Configuring 64-bit build ====================== cmake -G %CMAKE_GENERATOR_64% -DCMAKE_BUILD_TYPE=%BUILD_TYPE% ^ -DLIBUSB_PATH=%LIBUSB% -DLIBPTHREADSWIN32_PATH=%PTHREADS% ^ ..\bladeRF\host ^ || goto EXIT_FAILURE echo ======================= Performing 64-bit build ====================== msbuild bladeRF.sln /t:Rebuild /p:Configuration=%BUILD_TYPE% ^ || goto EXIT_FAILURE echo[ echo[ popd rem User didn't want to perform 32-bit build if %BUILD_ALL_ARCHS% == 0 goto EXIT_SUCCESS :BUILD_32 mkdir %BUILDDIR32% pushd %BUILDDIR32% echo[ echo[ echo ====================== Configuring 32-bit build ====================== cmake -G %CMAKE_GENERATOR_32% -DCMAKE_BUILD_TYPE=%BUILD_TYPE% ^ -DLIBUSB_PATH=%LIBUSB% -DLIBPTHREADSWIN32_PATH=%PTHREADS% ^ ..\bladeRF\host ^ || goto EXIT_FAILURE echo ======================= Performing 32-bit build ====================== msbuild bladeRF.sln /t:Rebuild /p:Configuration=%BUILD_TYPE% ^ || goto EXIT_FAILURE echo[ echo[ popd goto EXIT_SUCCESS :EXIT_USAGE echo[ echo Usage: build-bladeRF.bat [options] echo[ echo Options: echo /A - Build all. On 64-bit machines, this will cause both echo 64-bit and 32-bit builds to be performed. This has no echo effect on 32-bit machines. echo. /? - Show this help text echo[ :EXIT_SUCCESS popd exit /b 0 :EXIT_FAILURE echo Failed with error #%errorlevel% popd exit /b %errorlevel% bladeRF-2024.05/host/utilities/000077500000000000000000000000001457144405000161615ustar00rootroot00000000000000bladeRF-2024.05/host/utilities/CMakeLists.txt000066400000000000000000000001431457144405000207170ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.5) add_subdirectory(bladeRF-cli) add_subdirectory(bladeRF-fsk/c) bladeRF-2024.05/host/utilities/README.md000066400000000000000000000011301457144405000174330ustar00rootroot00000000000000# bladeRF Utilities # This directory contains applications that utilize libbladeRF. | Utility | Description | | ------------------------- |:-------------------------------------------------------------------------- | | [bladeRF-cli] | Command line tool for development and debugging | | [bladeRF-fsk] | BladeRF-to-bladeRF text/file transfer program based on a custom FSK modem | [bladeRF-cli]: ./bladeRF-cli (bladeRF-cli) [bladeRF-fsk]: ./bladeRF-fsk (bladeRF-fsk) bladeRF-2024.05/host/utilities/bladeRF-cli/000077500000000000000000000000001457144405000202255ustar00rootroot00000000000000bladeRF-2024.05/host/utilities/bladeRF-cli/CHANGELOG000066400000000000000000000300131457144405000214340ustar00rootroot00000000000000================================================================================ bladeRF-cli Change Log Summary For more detailed information, please see the git change log and issue tracker hosted on GitHub: https://github.com/Nuand/bladeRF ================================================================================ v1.7.1 (2018-12-21) -------------------------------- * tx.c: fix memory leak in CSV-to-SC16Q11 conversion (fixes #694) * cmd.c: cleanup command definitions, code formatting * main.c: remove vestigial printfs in open_device() * Updated documentation for adding new commands * calibrate.c, flash_*.c: updates for libbladeRF v2.2.0 v1.7.0 (2018-10-30) -------------------------------- * Add libedit support (#591) * Show RF routing in 'print hardware' on bladerf1 devices (#608) * Display manufacturer and product strings in 'probe', 'info' (#624) * Ensure device is initialized after deferred open (#612) * Use "degrees C" on temperature instead of the degrees symbol * Add flash size to 'info' command (#634) * Handle already-open devices on 'probe' (#648) * Add support for "J51-1" and "Miniexp-1" as trigger signals (#656) * Display FPGA configuration source on 'version' (#662) * Print supported ranges for sample rate, bandwidth, frequency * Fix missing return in error case (#666) v1.6.1 (2018-08-24) -------------------------------- This version depends on libbladeRF v2.0.1 or later. * "set loopback" help dialog aware of board type (#566) * host: libbladeRF: Rename clock select option * host: bladeRF-cli: Add 200 ms delay before probing PLL lock status (#587) * host: add nanosleep shim for Windows (#589) v1.6.0 (2018-08-13) -------------------------------- This version depends on libbladeRF v2.0.0 or later. * Initial public release with bladeRF 2.0 ("Micro") support * Adds support for MIMO RX and TX using "channel=" parameter on rx/tx config * Various code quality fixups v1.5.2 (2018-03-26) -------------------------------- This version is part of development series of changes, not an official release. This version depends upon libbladeRF v1.9.1 or later. * Support for bladeRF Micro * No longer initializes the bladeRF before loading a new FPGA image, to avoid potential catch-22 problems v1.5.1 (2017-12-07) -------------------------------- This version depends upon libbladeRF v1.8.1 or later. * Minor fix-ups v1.5.0 (2017-07-01) -------------------------------- This version depends upon libbladeRF v1.8.0 or later. * Added support for Automatic Gain Control v1.4.0 (2016-01-05) -------------------------------- This version depends upon libbladeRF v1.7.0 or later. * Added XB-300 support * Added synchronization trigger support * Added set `smb_mode` and print `smb_mode` support - This supersedes the `mimo` command, which is now marked *deprecated*. * Fixed CLI exit on FW/FPGA version mismatch * Fixed build on big-endian machines. v1.3.1 (2016-01-05) -------------------------------- This version depends upon libbladeRF v1.5.1 or later. * Addressed warnings that occur with GCC -Os flag. v1.3.0 (2015-12-31) -------------------------------- This version depends upon libbladeRF v1.5.0 or later. * Marked 'set frequency ' deprecated. - Use 'set frequency rx ' or 'set frequency tx ' * Updated DC calibration routines for improved accuracy and to avoid lockups * Added print/set support for VCTCXO tamer mode * Added fw_log command * Added ability to set SMB master frequency * Added print/set support FPGA RX FIFO input mux (rx_mux) * Fixed regression in set xb_gpio[_dir] register-level access * Fixed issues with validating and applying rational sample rates * Output formatting cleanup v1.2.1 (2015-07-16) -------------------------------- This version depends upon libbladeRF v1.4.1 or later. * Fixed issue where transmission could be truncated due to TX RFFE being turned off before sample buffers reach the transceiver. * Fixed errors and inconsistencies in interactive command help text. v1.2.0 (2015-06-30) -------------------------------- This version depends upon libbladeRF v1.4.0 or later. * Added support for semicolon command separators * Added 'print trimdac' support. (Requires FPGA v0.3.2) * Fixed libbladeRF return value translation bugs v1.1.2 (2015-02-28) -------------------------------- This version depends upon libbladeRF v1.2.1 or later. * Fixed and improved help text and manual page generation.The doc generation scripts should now be compatible with formats used by pandoc 1.12.x and 1.13.x. v1.1.1 (2015-01-31) -------------------------------- This version depends upon libbladeRF v1.2.0 or later. * Updated LMS bit definitions for 'peek/poke lms' commands to include bits previously marked "spare." * Fixed a documentation build issue caused by help2man usage. v1.1.0 (2014-12-23) -------------------------------- This version depends upon libbladeRF v1.1.0 or later. * The -p/--probe command line option now causes bladeRF-cli to return a non-zero return value if no devices are found. This is intended to allow shell scripts to easily check if devices are (not) present. * The 'probe' command now takes an optional 'strict' argument to specify that the lack of any identified devices should be treated as an error, which would cause scripts or a list of '-e' command line arguments to terminate immediately. * Before entering interactive mode, script parsing, or '-e' option execution, bladeRF-cli now searches for devices in bootloader modes and prompts the user to run 'help recover' for instructions on loading firmware onto these devices. This replaces the [INFO] log message previously printed by lower-level libbladeRF code. v1.0.0 (2014-11-29) -------------------------------- This version depends upon libbladeRF v1.0.0 or later. * Major version number incremented. * This denotes that no further reverse-incompatible command changes shall be introduced without a change to the major version number. v0.12.0 (2014-10-30) -------------------------------- This version depends upon libbladeRF v0.17.0 or later. * Migrated rx/tx commands to libbladeRF's synchronous interface * Introduced support of '#' line comments * Changed argument order of xb command to be more intuitive * Cleaned up help text and addressed discrepancies between help text and associated commands * Misc. minor bug fixes. v0.11.1 (2014-07-24) -------------------------------- This version depends upon libbladeRF v0.16.2 or later. * Added missing FW loopback mode option * Fixed help text and doc generation * Return value corrections and parameter handling fixes * Misc. typo and help-text touch-ups * Minor Windows build touch-ups v0.11.0 (2014-07-04) -------------------------------- This version depends upon libbladeRF v0.16.0 or later. * Added experimental DC calibration table generation - Changed usage of 'calibrate' command - Move 'correct' functionality into 'calibrate' command * Added '-e ' support * Added "pretty print" of LMS registers * Fixed ' wait' hang-ups * Differentiate between "file not found" and file I/O errors * Addressed a crash in the 'tx' command * Fixed handling of unterminated quotes v0.10.8 (2014-05-17) -------------------------------- * Updates to corresponding to libbladeRF API changes * Removed device reset after flashing firmware * Added interactive help text command added to allow man page to be generated without needing a script to scrape text. * Preliminary support for XB-200 v0.10.7 (2014-03-18) -------------------------------- * Added libc version check to determine if -lrt is required * Windows: Fixed reading binary files in for transmission * Serial # is now printed in`flash_image`output * Help text fixes and improvements * Added additional parameter range checks * Minor source tree reorganization v0.10.6 (2014-03-07) -------------------------------- * Removed bladerf_close() call after bladerf_device_reset() - This function call would yield an attempt to close a stale device handle, causing BSoDs in Windows. v0.10.5 (2014-02-27) -------------------------------- * Error message corrections * Fixes to RXVGA1-related textual output v0.10.4 (2014-02-05) -------------------------------- * Loopback support added to print/set commands * Print "first available" instead of "(null") when no device is specified via the -d option. * Help text updates v0.10.3 (2014-01-26) -------------------------------- * Fix for buffer corruption in TX stream (tx command) * Added rx/tx timeout configuration * Fixed tab-completion for "file=" * Clamp out-of-range values from CSV files v0.10.2 (2014-01-18) -------------------------------- * Supporting rational sample rates via the libbladeRF rational sample rate i/f * Fixes in the 'correct' command, pertaining to the libbladeRF 0.12.0 changes. * RX/TX command error message fixes v0.10.1 (2014-01-09) -------------------------------- * Fixed a race condition in starting up RX/TX worker threads * Addressed "Peripheral access failure" error messages * Added FPGA state check in calibration command v0.10.0 (2013-12-01) -------------------------------- * Added 'correct' command for manual DC offset an IQ balance adjustments * Fixed misc. defects detected via Coverity scans v0.9.0 (2013-11-28) -------------------------------- * Added command for initializing, backing up, and storing the contents of SPI flash v0.8.0 (2013-11-28) -------------------------------- * Added rx/tx 'wait' operation * Added 'run' command to run scripts from the CLI, or from within other scripts * Added 'echo' command for debugging purposes * Added support for quoted arguments * Removed extraneous error messages * Removed exit-with-failure if no device is connected v0.7.1 (2013-11-08) -------------------------------- * Fixed incorrect write size check for 'rx' with 'format=bin' * Fixed swap of --version and --lib-version * Added GPLv2 headers to source files * Windows: Fixed issue where binary files were opened in text mode * Fixed misc. defects detected via Coverity scans v0.7.0 (2013-10-21) -------------------------------- * Fixed incorrect file write size * Fixed incorrect return values and potential memory leaks * Windows compatibility fixes v0.6.0 (2013-10-14) -------------------------------- * 'rx' and 'tx' commands updated to use asynchronous data streaming interface * 'mimo' command added * 'info' command added v0.5.0 (2013-10-05) -------------------------------- * Removed device info from 'version' command, with the intent of moving it to a separate command (which wasn't introduced until v0.6.0). v0.4.2 (2013-10-04) -------------------------------- * Cleaned up 'version' command output * Fixed warning that broke Windows build (with /WX) v0.4.1 (2013-10-03) -------------------------------- * Updated version-related code to account for libbladeRF's addition of the bladerf_version structure * Added simple fgets-based interactive mode support, as an alternative for systems without libtecla support (e.g., Windows) * Windows build/compatibility fixes * Added 'erase' command to allow regions of SPI flash to be erased v0.4.0 (2013-09-02) -------------------------------- * Added -v option to control libbladeRF verbosity * Added differentiation between a failed device probe and the lack of any attached devices * Removed data endianess in rx/tx commands. The data is stored in the host's endianness. * Changed default CSV->binary filename to be not Unix-specific * Fixed return value issues that caused the CLI to exit on non-fatal errors v0.3.1 (2013-08-28) ---------------------------------- * Added filename expansion support - Converts ~/some/path to /home/user/some/path on *nix-based systems * Fixed OSX linking issue * Fixed USB bus/address swap in 'probe' output * Fixed crash in parsing CSV data * Added more descriptive error messages v0.3.0 (2013-08-22) ---------------------------------- * First functional version - Earlier versions were generally only useful for tests and debugging the preliminary version of libbladeRF. bladeRF-2024.05/host/utilities/bladeRF-cli/CMakeLists.txt000066400000000000000000000273121457144405000227720ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.5) project(bladeRF-cli C) ################################################################################ # Version information ################################################################################ set(VERSION_INFO_MAJOR 1) set(VERSION_INFO_MINOR 9) set(VERSION_INFO_PATCH 0) if(NOT DEFINED VERSION_INFO_EXTRA) set(VERSION_INFO_EXTRA "git") endif() include(Version) set(VERSION "${VERSION_INFO}") configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/src/version.h.in ${CMAKE_CURRENT_BINARY_DIR}/src/version.h @ONLY ) ################################################################################ # Build dependencies ################################################################################ find_package(LibTecla) find_package(LibEdit) if(MSVC) find_package(LibPThreadsWin32 REQUIRED) else(MSVC) find_package(Threads REQUIRED) endif(MSVC) find_program(PANDOC_EXECUTABLE pandoc) find_program(BASH_EXECUTABLE bash) if(PANDOC_EXECUTABLE AND BASH_EXECUTABLE) set(CAN_BUILD_INTERACTIVE_HELP ON) else() set(CAN_BUILD_INTERACTIVE_HELP OFF) endif() ################################################################################ # Configuration options ################################################################################ option(ENABLE_LIBTECLA "Enable the use of libtecla, if available.") option(ENABLE_LIBEDIT "Enable the use of libtecla, if available.") option(BUILD_BLADERF_CLI_DOCUMENTATION "Build bladeRF-cli man page. Requires help2man." ${BUILD_DOCUMENTATION}) option(BUILD_BLADERF_CLI_INTERACTIVE_HELP "Rebuild bladeRF-cli interactive help. Requires pandoc." ${CAN_BUILD_INTERACTIVE_HELP}) if(NOT ${BUILD_DOCUMENTATION}) set(BUILD_BLADERF_CLI_DOCUMENTATION OFF) endif() if((NOT CAN_BUILD_INTERACTIVE_HELP) AND (BUILD_BLADERF_CLI_INTERACTIVE_HELP)) message(FATAL_ERROR "BUILD_BLADERF_CLI_INTERACTIVE_HELP was forced ON, " "but there are missing prerequisites!") endif() if(ENABLE_LIBTECLA) if((NOT LIBTECLA_INCLUDE_DIR) OR (NOT LIBTECLA_LIBRARIES)) message(FATAL_ERROR "ENABLE_LIBTECLA was forced ON, but libtecla " "cannot be found!") endif() endif() if(ENABLE_LIBEDIT) if((NOT LIBEDIT_INCLUDE_DIR) OR (NOT LIBEDIT_LIBRARIES)) message(FATAL_ERROR "ENABLE_LIBEDIT was forced ON, but editline " "cannot be found!") endif() endif() ################################################################################ # Regenerate interactive help ################################################################################ file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/src/cmd/doc) if(BUILD_BLADERF_CLI_INTERACTIVE_HELP) # Do a quick test to make sure we have everything we need... execute_process( COMMAND ${BASH_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/src/cmd/doc/generate.bash --pandoc=${PANDOC_EXECUTABLE} --test ${CMAKE_CURRENT_SOURCE_DIR}/src/cmd/doc/interactive-help.md RESULT_VARIABLE INTERACTIVE_HELP_GENERATOR_FAILED WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/src/cmd/doc ) if(INTERACTIVE_HELP_GENERATOR_FAILED) message(FATAL_ERROR "generate.bash failed! Try disabling " "BUILD_BLADERF_CLI_INTERACTIVE_HELP, or fix the above error.") endif() # Run the generation script during build message(STATUS "Will regenerate bladeRF-cli interactive help") add_custom_command( OUTPUT src/cmd/doc/cmd_help.h src/cmd/doc/cmd_help.man DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/src/cmd/doc/generate.bash COMMAND ${BASH_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/src/cmd/doc/generate.bash --pandoc=${PANDOC_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/src/cmd/doc/interactive-help.md WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/src/cmd/doc ) else() # Re-use old cmd_help.h and cmd_help.man message(STATUS "Reusing existing interactive help for bladeRF-cli") add_custom_command( DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/src/cmd/doc/cmd_help.h.in OUTPUT src/cmd/doc/cmd_help.h COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/src/cmd/doc/cmd_help.h.in ${CMAKE_CURRENT_BINARY_DIR}/src/cmd/doc/cmd_help.h ) add_custom_command( DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/src/cmd/doc/cmd_help.man.in OUTPUT src/cmd/doc/cmd_help.man COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/src/cmd/doc/cmd_help.man.in ${CMAKE_CURRENT_BINARY_DIR}/src/cmd/doc/cmd_help.man ) endif() ################################################################################ # Include paths ################################################################################ set(CLI_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src ${CMAKE_CURRENT_SOURCE_DIR}/src/cmd ${CMAKE_CURRENT_SOURCE_DIR}/src/input ${CMAKE_CURRENT_BINARY_DIR}/src ${CMAKE_CURRENT_BINARY_DIR}/src/cmd ${BLADERF_HOST_COMMON_INCLUDE_DIRS} ${libbladeRF_SOURCE_DIR}/include ${BLADERF_FW_COMMON_INCLUDE_DIR} ) if(MSVC) set(CLI_INCLUDE_DIRS ${CLI_INCLUDE_DIRS} ${MSVC_C99_INCLUDES}) endif() message(STATUS "libtecla ${ENABLE_LIBTECLA} ${LIBTECLA_FOUND}") message(STATUS "libedit ${ENABLE_LIBEDIT} ${LIBEDIT_FOUND}") if(ENABLE_LIBTECLA OR (LIBTECLA_FOUND AND NOT ENABLE_LIBEDIT)) message(STATUS "libtecla support enabled") set(ENABLE_LIBTECLA ON) set(CLI_INCLUDE_DIRS ${CLI_INCLUDE_DIRS} ${LIBTECLA_INCLUDE_DIR}) elseif(ENABLE_LIBEDIT OR LIBEDIT_FOUND) message(STATUS "editline support enabled") set(ENABLE_LIBEDIT ON) set(CLI_INCLUDE_DIRS ${CLI_INCLUDE_DIRS} ${LIBEDIT_INCLUDE_DIR}) endif() if(MSVC) set(CLI_INCLUDE_DIRS ${CLI_INCLUDE_DIRS} ${BLADERF_HOST_COMMON_INCLUDE_DIRS}/windows ${LIBPTHREADSWIN32_INCLUDE_DIRS} ) endif() if(APPLE) set(CLI_INCLUDE_DIRS ${CLI_INCLUDE_DIRS} ${BLADERF_HOST_COMMON_INCLUDE_DIRS}/osx ) endif() include_directories(${CLI_INCLUDE_DIRS}) ################################################################################ # Configure source files ################################################################################ set(BLADERF_CLI_SOURCE src/main.c src/common.c src/cmd/calibrate.c src/cmd/cmd.c src/cmd/doc/cmd_help.h src/cmd/erase.c src/cmd/flash_backup.c src/cmd/flash_image.c src/cmd/flash_init_cal.c src/cmd/flash_restore.c src/cmd/fw_log.c src/cmd/generate.c src/cmd/info.c src/cmd/jump_boot.c src/cmd/lms_reg_info.c src/cmd/load.c src/cmd/mimo.c src/cmd/open.c src/cmd/peek.c src/cmd/peekpoke.c src/cmd/poke.c src/cmd/printset.c src/cmd/printset_hardware.c src/cmd/printset_impl.c src/cmd/printset_xb.c src/cmd/probe.c src/cmd/recover.c src/cmd/rx.c src/cmd/rxtx.c src/cmd/trigger.c src/cmd/tx.c src/cmd/version.c src/cmd/xb.c src/cmd/xb100.c src/cmd/xb200.c src/cmd/xb300.c src/input/input.c src/input/script.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/conversions.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/dc_calibration.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/log.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/str_queue.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/parse.c ) # Select the input mode (and script handling) backend if(ENABLE_LIBTECLA) set(BLADERF_CLI_SOURCE ${BLADERF_CLI_SOURCE} src/input/tecla.c) elseif(ENABLE_LIBEDIT) set(BLADERF_CLI_SOURCE ${BLADERF_CLI_SOURCE} src/input/editline.c) else() set(BLADERF_CLI_SOURCE ${BLADERF_CLI_SOURCE} src/input/fgets.c) endif() if(MSVC) set(BLADERF_CLI_SOURCE ${BLADERF_CLI_SOURCE} ${BLADERF_HOST_COMMON_SOURCE_DIR}/windows/getopt_long.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/windows/clock_gettime.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/windows/nanosleep.c ${BLADERF_HOST_COMMON_SOURCE_DIR}/windows/setenv.c ) endif() if(APPLE) set(BLADERF_CLI_SOURCE ${BLADERF_CLI_SOURCE} ${BLADERF_HOST_COMMON_SOURCE_DIR}/osx/clock_gettime.c ) endif() add_executable(bladeRF-cli ${BLADERF_CLI_SOURCE}) ################################################################################ # Build configuration ################################################################################ set(CLI_LINK_LIBRARIES libbladerf_shared ${CMAKE_THREAD_LIBS_INIT} ) if(NOT MSVC) set(CLI_LINK_LIBRARIES ${CLI_LINK_LIBRARIES} m) endif() if(ENABLE_LIBTECLA) set(CLI_LINK_LIBRARIES ${CLI_LINK_LIBRARIES} ${LIBTECLA_LIBRARIES}) # On a few tests Linux distros, libtecla is not build against # ncurses. However, folks have reported that builds on OSX use it if(CMAKE_HOST_APPLE) set(CLI_LINK_LIBRARIES ${CLI_LINK_LIBRARIES} ncurses) endif(CMAKE_HOST_APPLE) elseif(ENABLE_LIBEDIT) set(CLI_LINK_LIBRARIES ${CLI_LINK_LIBRARIES} ${LIBEDIT_LIBRARIES}) endif(ENABLE_LIBTECLA) if(LIBPTHREADSWIN32_FOUND) set(CLI_LINK_LIBRARIES ${CLI_LINK_LIBRARIES} ${LIBPTHREADSWIN32_LIBRARIES}) endif() if(LIBC_VERSION) # clock_gettime() was moved from librt -> libc in 2.17 if(${LIBC_VERSION} VERSION_LESS "2.17") set(CLI_LINK_LIBRARIES ${CLI_LINK_LIBRARIES} rt) endif() endif() target_link_libraries(bladeRF-cli ${CLI_LINK_LIBRARIES}) ################################################################################ # Man pages ################################################################################ if(BUILD_BLADERF_CLI_DOCUMENTATION) find_program(HELP2MAN_EXECUTABLE help2man) if(HELP2MAN_EXECUTABLE) message(STATUS "Will build man page for bladeRF-cli.") if(NOT DEFINED MAN_INSTALL_DIR) set(MAN_INSTALL_DIR share/man) endif(NOT DEFINED MAN_INSTALL_DIR) # Build actual man page add_custom_command( OUTPUT bladeRF-cli.1 DEPENDS bladeRF-cli src/cmd/doc/cmd_help.man COMMAND ${HELP2MAN_EXECUTABLE} --no-info --no-discard-stderr --opt-include=${CMAKE_CURRENT_SOURCE_DIR}/../doc/include_man/bladeRF-cli.h2m --opt-include=${CMAKE_CURRENT_BINARY_DIR}/src/cmd/doc/cmd_help.man --opt-include=${CMAKE_CURRENT_SOURCE_DIR}/../doc/include_man/common.h2m --output=bladeRF-cli.1 ./bladeRF-cli WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} ) install( FILES ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/bladeRF-cli.1 DESTINATION ${MAN_INSTALL_DIR}/man1 ) add_custom_target(bladeRF-cli-manpage ALL DEPENDS bladeRF-cli.1) else(HELP2MAN_EXECUTABLE) message(FATAL_ERROR "Could not find help2man. bladeRF-cli man page " "cannot be built.") endif(HELP2MAN_EXECUTABLE) else(BUILD_BLADERF_CLI_DOCUMENTATION) message(STATUS "Not building man page for bladeRF-cli. " "(BUILD_BLADERF_CLI_DOCUMENTATION is OFF)") endif(BUILD_BLADERF_CLI_DOCUMENTATION) ################################################################################ # Installation ################################################################################ if(NOT DEFINED BIN_INSTALL_DIR) set(BIN_INSTALL_DIR bin) endif() install(TARGETS bladeRF-cli DESTINATION ${BIN_INSTALL_DIR}) ################################################################################ # Informational output ################################################################################ message(STATUS "Configured to build bladeRF-cli version: ${VERSION_INFO}") bladeRF-2024.05/host/utilities/bladeRF-cli/README.md000066400000000000000000000126051457144405000215100ustar00rootroot00000000000000# bladeRF Command Line Interface # This tool is intended to aid in development and testing. bladeRF-cli can be used from the command line for simple operations, such as loading the bladeRF FPGA. However, a majority of this tool's functionality is accessible when run in its interactive mode. ## Dependencies ## - [libbladeRF][libbladeRF] - [help2man][help2man] (optional) - [libtecla][libtecla] (optional) - [pandoc][pandoc] (optional) [libbladeRF]: ../../libraries/libbladeRF (libbladeRF) [help2man]: https://www.gnu.org/software/help2man/ (help2man) [libtecla]: http://www.astro.caltech.edu/~mcs/tecla/ (libtecla) [pandoc]: http://johnmacfarlane.net/pandoc/ (pandoc) ## Build Variables ## Below is a list of useful and project-specific CMake options. Please see the CMake [variable list] in CMake's documentation for more information. | Option | Description | --------------------------------------------- |:---------------------------------------------------------------------------------------------------------| | -DENABLE_LIBTECLA=\ | Enable libtecla support in the bladeRF-cli program. Default: ON if libtecla is detected, OFF otherwise. | | -DBUILD_BLADERF_CLI_DOCUMENTATION=\ | Builds a man page for the bladeRF-cli utility, using help2man. Default: equal to BUILD_DOCUMENTATION | When pandoc is installed, the documentation for each bladeRF-cli command will be re-generated for the interactive 'help' command and the man page. ## Basic Usage ## For usage information, run: ``` ./bladeRF-cli --help ``` If you encounter issues and ask folks on IRC or in the forum for assistance, it's always helpful to note the CLI and library versions: ``` bladeRF-cli --version bladeRF-cli --lib-version ``` If only one device is connected, the -d option is not needed. The CLI will find and open the attached device. This option is required if multiple devices are connected. For the sake of completeness, the following examples will include this command line option, using the libusb backend. Load the FPGA and enter interactive mode: ``` ./bladeRF-cli -d "libusb: instance=0" -l /path/to/fpga.rbf -i ``` Pass in a script to setup a device in a specific way, but do not enter interactive mode. (See [Creating a setup.txt](#creating-a-setuptxt) for more information about scripts.) ``` ./bladeRF-cli -d "libusb: instance=0" -s setup.txt ``` ## Some Useful Interactive Commands ## The `help` command prints out the top level commands that are available. Using `help ` gives a more detailed help on that command. The most useful control commands are `peek` and `poke` for setting registers at a very basic level and `print` and `set` for performing system level tasks like setting gains, frequency, bandwidth, or sample rate. The `rx` and `tx` commands allow data to be transmitted and received in the background, while the interactive console remains in the foreground. `rx config` and `tx config` are used to configure and view various RX and TX parameters. Note that `rx` and `tx` is a supported shorthand for viewing the RX/TX configuration. See `help rx` and `help tx` for more information about these parameters. Below are a few examples: Receive 10,000 samples to a binary file (in the libbladeRF SC16Q11 format): ``` rx config file=samples.bin format=bin n=10000 rx start ``` `rx` or `rx config` may be used to view the RX task status. When it no longer reports "Running", the samples should be available in the file. Note that for larger sample rates or small values of `n`, the RX task may finish before you can enter the `rx` command to view its state. Receive (4 * 1024 * 1024) samples to a CSV file: ``` rx config file=samples.csv format=csv n=4M rx start ``` Files can also be transmitted: ``` tx config file=samples.bin tx start ``` The transmission of the file can be repeated a number of times, with a configurable delay (microseconds) between each repetition: ``` tx config file=samples.bin repeat=100 delay=10000 tx start ``` While `format=csv` is valid for `tx`, note that the CLI will first convert the CSV to a temporary binary file in the current working directory, named "bladeRF_samples_from_csv.bin", as shown below: ``` bladeRF> tx config file=samples.csv format=csv repeat=10 delay=10000000 bladeRF> tx start Converted CSV to SC16 Q11 file and switched to converted file. bladeRF> tx State: Idle Last error: None File: bladeRF_samples_from_csv.bin File format: SC16 Q11, Binary Repetitions: 1 Repetition delay: none # Buffers: 32 # Samples per buffer: 32768 # Transfers: 16 Timeout (ms): 1000 ``` ## Running Scripts ## It is often useful in debugging to quickly put the device into a known state. The bladeRF-cli supports script files to alleviate the need to write a small program or manually enter a number of commands. Below is a sample script file which can be provided via the -s command line option. Scripts may also be run from within interactive mode, via the `run` command. Note that the syntax from the interactive mode is used. ``` set frequency 1000000000 set samplerate 10000000 set bandwidth 28000000 set lnagain bypass set txvga1 -14 set txvga2 20 set rxvga1 20 set rxvga2 20 print frequency print samplerate print bandwidth ``` When transmitting or receiving samples via scripts, be sure to use the `rx wait` or `tx wait` to ensure ongoing reception/transmission completes prior to exiting the script. bladeRF-2024.05/host/utilities/bladeRF-cli/src/000077500000000000000000000000001457144405000210145ustar00rootroot00000000000000bladeRF-2024.05/host/utilities/bladeRF-cli/src/cmd/000077500000000000000000000000001457144405000215575ustar00rootroot00000000000000bladeRF-2024.05/host/utilities/bladeRF-cli/src/cmd/ADDING_COMMANDS.md000066400000000000000000000126001457144405000243070ustar00rootroot00000000000000This file provides a brief summary of how to add a new command to the `bladeRF-cli` program. ## Creating a file for the command To add a new command, create a C file in this directory and add it to the list of source files in `host/utilities/bladeRF-cli/CMakeLists.txt`. The entry point of the command should have a prototype similar to the one shown below for a *mycmd* command: int cmd_mycmd(struct cli_state *state, int argc, char **argv); The first parameter is a pointer to some CLI state information. The remaining two parameters are similar to what one would expect for a `main()` function. The function shall `return 0` for success, or one of the `CLI_RET_*` values defined in `common.h`. For all error values *except* `CLI_RET_INVPARAM` and `CLI_RET_CMD_HANDLED`, the top-level command handling code will print an appropriate error message; your command should not print anything. Use `CLI_RET_NARGS` for an incorrect number of arguments. Do not use the `CLI_RET_INVPARAM` code in this case. However, if your command detects that is provided with an invalid parameter, it should print an error message and return `CLI_RET_INVPARAM`. The rationale is that only the command's implementation will "know" what is and is not valid, but the other error codes are sufficiently generic. `CLI_RET_CMD_HANDLED` should be use for command-specific failures that have been handled by the command (including printing the necessary output). If you find that you're using this value, first consider whether the error situation is generic enough to warrant adding a new value to the `CLI_RET_*` value definitions in `common.h`. Error messages associated with `CLI_RET_INVPARAM` or `CLI_RET_CMD_HANDLED` shall be printed using the `cli_err()` function, defined in `common.h`. Generally, you'll want the prefix argument to `cli_err()` to be `argv[0]`. An acceptable alternative for `CLI_RET_INVPARAM` is to use the argument name that was incorrect as the prefix. Be sure to include a `\n` at the end of the message passed to `cli_err()` to remain consistent with the preferred output format. This function will insert the desired leading indentation; there is no need to manually prepend this to the prefix. Another slightly special case is the handling of libbladeRF error codes. If a libbladeRF function returns a non-zero error code, set `state->last_lib_error` to the error code and return `CLI_RET_LIBBLADERF`. This will the top-level command handling code to look up and print an appropriate error message via `bladerf_strerror()`, instead of `cli_strerror()`. When printing informational output in your command, prepend and append newlines to the beginning and end of your output, respectively. Output shall be indented two spaces. Below is an example: bladeRF> mycmd arg1 arg2 Mycmd output line one. Additional information on line two. Sub-information 1 Sub-information 2 bladeRF> mycmd badarg1 arg2 mycmd: badarg1 is invalid because XYZ... bladeRF> ## Adding the command to cmd.c When adding a command to `cmd.c`, please be sure to maintain the alphabetical ordering of commands. This includes lists of declarations. First, add an appropriate `DECLARE_CMD()`. The first argument is the command you're defining. In our *mycmd* sample, this would simply be `mycmd`. The subsequent arguments set the actual command name (and optional shortcuts and aliases) that will invoke your command. If we wanted *mycmd* to be invoked with either `mycmd` or `m`, we would use: DECLARE_CMD(mycmd, "mycmd", "m"); Next, add help text for your command in `doc/interactive-help.md`. For the *mycmd* example, this might look like: mycmd ----- Usage: `mycmd ` This is an example command that does such and such. Some more detailed examples and explanations go here. * `` - First argument * `` - Second argument The `generate.bash` script can be used to regenerate the `cmd_help.*` artifacts. Be sure to copy `cmd_help.h` to `cmd_help.h.in` and `cmd_help.man` to `cmd_help.man.in`, then stage those files: cp cmd_help.h cmd_help.h.in cp cmd_help.man cmd_help.man.in git add cmd_help.h.in cmd_help.man.in interactive-help.md Finally, add an element to the `cmd_table[]` array. The fields here consist of: * The command names that invoke your command * The function to execute * A brief one-line description of the function to show in "help" output * The command's detailed help text * A flag to denote whether the command requires an open device handle * A flag to denote whether the command requires the FPGA to be loaded The `requires_device` and `requires_fpga` flags should be set to `true` if some or all of the operations provided by the command require the aforementioned items. This allows the command-agnostic logic to print an appropriate error message before even attempting to execute the command. The rationale for having these flags is that it reduces duplicated device handle and FPGA state checks in numerous commands. An example element might look like the following, if *mycmd* were to operate on a device handle, but not require that the FPGA be loaded: { FIELD_INIT(.names, cmd_names_mycmd), FIELD_INIT(.exec, cmd_mycmd), FIELD_INIT(.desc, "Perform such and such operatiions"), FIELD_INIT(.help, CLI_CMD_HELPTEXT_mycmd), FIELD_INIT(.requires_device, true), FIELD_INIT(.requires_fpga, false), }, bladeRF-2024.05/host/utilities/bladeRF-cli/src/cmd/calibrate.c000066400000000000000000000542671457144405000236670ustar00rootroot00000000000000/* * This file is part of the bladeRF project * * Copyright (C) 2013-2015 Nuand LLC * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include "dc_calibration.h" #include "rel_assert.h" #include "calibrate.h" #include "common.h" #include "cmd.h" #define MAX_PHASE 4096 #define MIN_PHASE (-MAX_PHASE) #define MAX_GAIN 4096 #define MIN_GAIN (-MAX_GAIN) static int show_lms_cals(struct cli_state *s) { int status = 0; struct bladerf_lms_dc_cals lms_cals = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }; status = bladerf_lms_get_dc_cals(s->dev, &lms_cals); if (status != 0) { s->last_lib_error = status; status = CLI_RET_LIBBLADERF; } else { putchar('\n'); printf(" LPF tuning module: %d\n\n", lms_cals.lpf_tuning); printf(" TX LPF I filter: %d\n", lms_cals.tx_lpf_i); printf(" TX LPF Q filter: %d\n\n", lms_cals.tx_lpf_q); printf(" RX LPF I filter: %d\n", lms_cals.rx_lpf_i); printf(" RX LPF Q filter: %d\n\n", lms_cals.rx_lpf_q); printf(" RX VGA2 DC reference module: %d\n", lms_cals.dc_ref); printf(" RX VGA2 stage 1, I channel: %d\n", lms_cals.rxvga2a_i); printf(" RX VGA2 stage 1, Q channel: %d\n", lms_cals.rxvga2a_q); printf(" RX VGA2 stage 2, I channel: %d\n", lms_cals.rxvga2b_i); printf(" RX VGA2 stage 2, Q channel: %d\n", lms_cals.rxvga2b_q); putchar('\n'); } return status; } static int cal_lms(struct cli_state *s, int argc, char **argv) { int status = 0; bool ok; bool have_lms_cals = false; struct bladerf_lms_dc_cals lms_cals = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }; if (!s->dev_info.is_bladerf_x40_x115) { cli_err(s, argv[0], "Only use this calibration on" " bladeRF x40 and x115 devices.\n"); return 0; } if (argc == 2) { status = dc_calibration_lms6(s->dev, "all"); if (status == 0) { status = show_lms_cals(s); } return status; } if (argc == 3) { if (!strcasecmp(argv[2], "show")) { status = show_lms_cals(s); } else { status = dc_calibration_lms6(s->dev, argv[2]); if (status == BLADERF_ERR_INVAL) { cli_err(s, argv[0], "Invalid LMS module specified: %s\n", argv[2]); status = CLI_RET_INVPARAM; } else if (status != 0) { s->last_lib_error = status; status = CLI_RET_LIBBLADERF; } } return status; } if (argc == 4 && !strcasecmp(argv[2], "tuning")) { lms_cals.lpf_tuning = (int16_t) str2int(argv[3], 0, UINT8_MAX, &ok); if (!ok) { cli_err(s, argv[0], "Invalid LPF tuning value: %s\n", argv[3]); status = CLI_RET_INVPARAM; } have_lms_cals = true; } else if (argc == 5 && !strcasecmp(argv[2], "txlpf")) { lms_cals.tx_lpf_i = (int16_t) str2int(argv[3], 0, UINT8_MAX, &ok); if (!ok) { cli_err(s, argv[0], "Invalid TX LPF I value: %s\n", argv[3]); status = CLI_RET_INVPARAM; } lms_cals.tx_lpf_q = (int16_t) str2int(argv[4], 0, UINT8_MAX, &ok); if (!ok) { cli_err(s, argv[0], "Invalid TX LPF Q value: %s\n", argv[4]); status = CLI_RET_INVPARAM; } have_lms_cals = true; } else if (argc == 5 && !strcasecmp(argv[2], "rxlpf")) { lms_cals.rx_lpf_i = (int16_t) str2int(argv[3], 0, UINT8_MAX, &ok); if (!ok) { cli_err(s, argv[0], "Invalid TX LPF I value: %s\n", argv[3]); status = CLI_RET_INVPARAM; } lms_cals.rx_lpf_q = (int16_t) str2int(argv[4], 0, UINT8_MAX, &ok); if (!ok) { cli_err(s, argv[0], "Invalid RX LPF Q value: %s\n", argv[4]); status = CLI_RET_INVPARAM; } have_lms_cals = true; } else if (argc == 8 && !strcasecmp(argv[2], "rxvga2")) { lms_cals.dc_ref = (int16_t) str2int(argv[3], 0, UINT8_MAX, &ok); if (!ok) { cli_err(s, argv[0], "Invalid RXVGA2 DC_REF value: %s\n", argv[3]); status = CLI_RET_INVPARAM; } lms_cals.rxvga2a_i = (int16_t) str2int(argv[4], 0, UINT8_MAX, &ok); if (!ok) { cli_err(s, argv[0], "Invalid RXVGA2 stage 1 I value: %s\n", argv[4]); status = CLI_RET_INVPARAM; } lms_cals.rxvga2a_q = (int16_t) str2int(argv[5], 0, UINT8_MAX, &ok); if (!ok) { cli_err(s, argv[0], "Invalid RXVGA2 stage 1 Q value: %s\n", argv[5]); status = CLI_RET_INVPARAM; } lms_cals.rxvga2b_i = (int16_t) str2int(argv[6], 0, UINT8_MAX, &ok); if (!ok) { cli_err(s, argv[0], "Invalid RXVGA2 stage 2 I value: %s\n", argv[6]); status = CLI_RET_INVPARAM; } lms_cals.rxvga2b_q = (int16_t) str2int(argv[7], 0, UINT8_MAX, &ok); if (!ok) { cli_err(s, argv[0], "Invalid RXVGA2 stage 2 Q value: %s\n", argv[7]); status = CLI_RET_INVPARAM; } have_lms_cals = true; } else { cli_err(s, argv[0], "Invalid LMS module or incorrect number of parameterss\n"); status = CLI_RET_INVPARAM; } if (status == 0 && have_lms_cals) { status = bladerf_lms_set_dc_cals(s->dev, &lms_cals); if (status != 0) { s->last_lib_error = status; status = CLI_RET_LIBBLADERF; } } return status; } static void print_cal_params(const char *m, const struct dc_calibration_params *p, bool prepend_newline, bool append_newline) { if (prepend_newline) { putchar('\n'); } printf("%s DC I: Value = %5d, Error = % 2.3f\n", m, p->corr_i, p->error_i); printf("%s DC Q: Value = %5d, Error = % 2.3f\n", m, p->corr_q, p->error_q); if (append_newline) { putchar('\n'); } } static int cal_dc_correction_params(struct cli_state *s, int argc, char **argv) { int status = 0; if (argc < 3) { return CLI_RET_NARGS; } if (argc == 3) { struct dc_calibration_params cal_params; bool rx = false, tx = false; if (!strcasecmp(argv[2], "rx") || !strcasecmp(argv[2], "rxtx")) { rx = true; } if (!strcasecmp(argv[2], "tx") || !strcasecmp(argv[2], "rxtx")) { tx = true; } if (rx) { memset(&cal_params, 0, sizeof(cal_params)); status = bladerf_get_frequency(s->dev, BLADERF_MODULE_RX, &cal_params.frequency); if (status != 0) { s->last_lib_error = status; return CLI_RET_LIBBLADERF; } status = dc_calibration_rx(s->dev, &cal_params, 1, false); if (status != 0) { s->last_lib_error = status; return CLI_RET_LIBBLADERF; } print_cal_params("RX", &cal_params, true, !tx); } if (status == 0 && tx) { memset(&cal_params, 0, sizeof(cal_params)); status = bladerf_get_frequency(s->dev, BLADERF_MODULE_TX, &cal_params.frequency); if (status != 0) { s->last_lib_error = status; return CLI_RET_LIBBLADERF; } status = dc_calibration_tx(s->dev, &cal_params, 1, false); if (status != 0) { s->last_lib_error = status; return CLI_RET_LIBBLADERF; } print_cal_params("TX", &cal_params, true, true); } if (!rx && !tx) { cli_err(s, argv[0], "Invalid module: %s\n", argv[1]); return CLI_RET_INVPARAM; } } else if (argc == 5) { bladerf_module module; int16_t i, q; bool ok; if (!strcasecmp(argv[2], "rx")) { module = BLADERF_MODULE_RX; } else if (!strcasecmp(argv[2], "tx")) { module = BLADERF_MODULE_TX; } else { cli_err(s, argv[0], "Invalid module: %s\n", argv[2]); return CLI_RET_INVPARAM; } i = (int16_t) str2int(argv[3], -2048, 2048, &ok); if (!ok) { cli_err(s, argv[0], "Invalid I value: %s\n", argv[3]); return CLI_RET_INVPARAM; } q = (int16_t) str2int(argv[4], -2048, 2048, &ok); if (!ok) { cli_err(s, argv[0], "Invalid Q value: %s\n", argv[4]); return CLI_RET_INVPARAM; } status = bladerf_set_correction(s->dev, module, BLADERF_CORR_LMS_DCOFF_I, i); if (status != 0) { s->last_lib_error = status; return CLI_RET_LIBBLADERF; } status = bladerf_set_correction(s->dev, module, BLADERF_CORR_LMS_DCOFF_Q, q); if (status != 0) { s->last_lib_error = status; return CLI_RET_LIBBLADERF; } } else { return CLI_RET_NARGS; } return 0; } static int cal_iq_correction_params(struct cli_state *s, int argc , char **argv) { int status; bladerf_module module; bool ok; int16_t value; if (argc != 5) { return CLI_RET_NARGS; } if (!strcasecmp(argv[2], "rx")) { module = BLADERF_MODULE_RX; } else if (!strcasecmp(argv[2], "tx")) { module = BLADERF_MODULE_TX; } else { cli_err(s, argv[0], "Invalid module: %s\n", argv[2]); return CLI_RET_INVPARAM; } if (!strcasecmp(argv[3], "phase")) { value = str2int(argv[4], MIN_PHASE, MAX_PHASE, &ok); if (ok) { status = bladerf_set_correction(s->dev, module, BLADERF_CORR_FPGA_PHASE, value); } else { cli_err(s, argv[0], "Phase value must be in [%d, %d]\n", MIN_PHASE, MAX_PHASE); return CLI_RET_INVPARAM; } } else if (!strcasecmp(argv[3], "gain")) { value = str2int(argv[4], MIN_GAIN, MAX_GAIN, &ok); if (ok) { status = bladerf_set_correction(s->dev, module, BLADERF_CORR_FPGA_GAIN, value); } else { cli_err(s, argv[0], "Gain value must be in [%d, %d]\n", MIN_GAIN, MAX_GAIN); return CLI_RET_INVPARAM; } } else { cli_err(s, argv[0], "Invalid IQ correction parameter: %s\n", argv[3]); return CLI_RET_INVPARAM; } if (status < 0) { s->last_lib_error = status; return CLI_RET_LIBBLADERF; } else { return 0; } } static struct dc_calibration_params * prepare_dc_cal_params(unsigned int f_min, unsigned int f_max, unsigned int f_inc, size_t *num_freqs) { struct dc_calibration_params *p = NULL; const unsigned int len = ((f_max - f_min + 1) + (f_inc - 1)) / f_inc; unsigned int f, n; p = calloc(len, sizeof(p[0])); if (p == NULL) { return NULL; } for (f = f_min, n = 0; f <= f_max && n < len; n++, f += f_inc) { p[n].frequency = f; } assert(n == len); *num_freqs = len; return p; } static int save_table_results(const char *filename, struct bladerf *dev, bladerf_module module, const struct dc_calibration_params *params, size_t num_params) { int status = 0; struct bladerf_lms_dc_cals lms_dc_cals; struct bladerf_image *image = NULL; size_t i; size_t off = 0; uint32_t n_frequencies_le = 0; static const uint16_t magic = HOST_TO_LE16_CONST(0x1ab1); static const uint32_t reserved = HOST_TO_LE32_CONST(0x00000000); static const uint32_t tbl_version = HOST_TO_LE32_CONST(0x00000002); static const size_t lms_data_size = 10; /* 10 uint8_t register values */ const size_t entry_size = sizeof(uint32_t) + /* Frequency */ 8 * sizeof(int16_t); /* DC I and Q valus */ const size_t table_size = num_params * entry_size; const size_t data_size = sizeof(magic) + sizeof(reserved) + sizeof(tbl_version) + sizeof(n_frequencies_le) + lms_data_size + table_size; assert(num_params < UINT32_MAX); assert(data_size <= UINT_MAX); n_frequencies_le = HOST_TO_LE32((uint32_t) num_params); status = bladerf_lms_get_dc_cals(dev, &lms_dc_cals); if (status != 0) { return status; } if (module == BLADERF_MODULE_RX) { image = bladerf_alloc_image(dev, BLADERF_IMAGE_TYPE_RX_DC_CAL, 0xffffffff, (unsigned int) data_size); } else { image = bladerf_alloc_image(dev, BLADERF_IMAGE_TYPE_TX_DC_CAL, 0xffffffff, (unsigned int) data_size); } if (image == NULL) { return BLADERF_ERR_MEM; } /* Fill in header */ memcpy(&image->data[off], &magic, sizeof(magic)); off += sizeof(magic); memcpy(&image->data[off], &reserved, sizeof(reserved)); off += sizeof(reserved); memcpy(&image->data[off], &tbl_version, sizeof(tbl_version)); off += sizeof(tbl_version); memcpy(&image->data[off], &n_frequencies_le, sizeof(n_frequencies_le)); off += sizeof(n_frequencies_le); image->data[off++] = (uint8_t)lms_dc_cals.lpf_tuning; image->data[off++] = (uint8_t)lms_dc_cals.tx_lpf_i; image->data[off++] = (uint8_t)lms_dc_cals.tx_lpf_q; image->data[off++] = (uint8_t)lms_dc_cals.rx_lpf_i; image->data[off++] = (uint8_t)lms_dc_cals.rx_lpf_q; image->data[off++] = (uint8_t)lms_dc_cals.dc_ref; image->data[off++] = (uint8_t)lms_dc_cals.rxvga2a_i; image->data[off++] = (uint8_t)lms_dc_cals.rxvga2a_q; image->data[off++] = (uint8_t)lms_dc_cals.rxvga2b_i; image->data[off++] = (uint8_t)lms_dc_cals.rxvga2b_q; for (i = 0; i < num_params; i++) { uint32_t freq; int16_t corr_i, corr_q; int16_t max_dc_i, max_dc_q; int16_t mid_dc_i, mid_dc_q; int16_t min_dc_i, min_dc_q; freq = HOST_TO_LE32((uint32_t) params[i].frequency); corr_i = HOST_TO_LE16(params[i].corr_i); corr_q = HOST_TO_LE16(params[i].corr_q); max_dc_i = HOST_TO_LE16(params[i].max_dc_i); max_dc_q = HOST_TO_LE16(params[i].max_dc_q); mid_dc_i = HOST_TO_LE16(params[i].mid_dc_i); mid_dc_q = HOST_TO_LE16(params[i].mid_dc_q); min_dc_i = HOST_TO_LE16(params[i].min_dc_i); min_dc_q = HOST_TO_LE16(params[i].min_dc_q); memcpy(&image->data[off], &freq, sizeof(freq)); off += sizeof(freq); memcpy(&image->data[off], &corr_i, sizeof(corr_i)); off += sizeof(corr_q); memcpy(&image->data[off], &corr_q, sizeof(corr_q)); off += sizeof(corr_q); memcpy(&image->data[off], &max_dc_i, sizeof(max_dc_i)); off += sizeof(max_dc_i); memcpy(&image->data[off], &max_dc_q, sizeof(max_dc_q)); off += sizeof(max_dc_q); memcpy(&image->data[off], &mid_dc_i, sizeof(mid_dc_i)); off += sizeof(mid_dc_i); memcpy(&image->data[off], &mid_dc_q, sizeof(mid_dc_q)); off += sizeof(mid_dc_q); memcpy(&image->data[off], &min_dc_i, sizeof(min_dc_i)); off += sizeof(min_dc_i); memcpy(&image->data[off], &min_dc_q, sizeof(min_dc_q)); off += sizeof(min_dc_q); } status = bladerf_image_write(dev, image, filename); bladerf_free_image(image); return status; } /* See libbladeRF's dc_cal_table.c for the packed table data format */ static int cal_table(struct cli_state *s, int argc, char **argv) { int status; bool ok; bladerf_module module; char *filename = NULL; size_t filename_len = 1024; FILE *write_check = NULL; struct dc_calibration_params *params = NULL; size_t num_params = 0; /* The XB-200 does not affect the minimum, as we're tuning the LMS here. */ unsigned int f_min = BLADERF_FREQUENCY_MIN; unsigned int f_inc = 10000000; unsigned int f_max = BLADERF_FREQUENCY_MAX; if (!s->dev_info.is_bladerf_x40_x115) { cli_err(s, argv[0], "Only use this calibration on" " bladeRF x40 and x115 devices.\n"); return 0; } if (argc == 4 || argc == 6 || argc == 7) { /* Only DC tables are currently supported. * IQ tables may be added in the future */ if (strcasecmp(argv[2], "dc") && strcasecmp(argv[2], "agc")) { cli_err(s, argv[0], "Invalid table type: %s\n", argv[2]); return CLI_RET_INVPARAM; } if (!strcasecmp(argv[3], "rx")) { module = BLADERF_MODULE_RX; } else if (!strcasecmp(argv[3], "tx")) { module = BLADERF_MODULE_TX; } else { cli_err(s, argv[0], "Invalid module: %s\n", argv[2]); return CLI_RET_INVPARAM; } } else { return CLI_RET_NARGS; } if (!strcasecmp(argv[2], "agc")) { status = bladerf_set_lna_gain(s->dev, BLADERF_LNA_GAIN_MAX); if (status != 0) { goto out; } status = bladerf_set_rxvga1(s->dev, 30); if (status != 0) { goto out; } status = bladerf_set_rxvga2(s->dev, 15); if (status != 0) { goto out; } } if (argc >= 6) { f_min = str2uint_suffix(argv[4], BLADERF_FREQUENCY_MIN, BLADERF_FREQUENCY_MAX, freq_suffixes, NUM_FREQ_SUFFIXES, &ok); if (!ok) { cli_err(s, argv[0], "Invalid min frequency (%s)\n", argv[4]); return CLI_RET_INVPARAM; } f_max = str2uint_suffix(argv[5], BLADERF_FREQUENCY_MIN, BLADERF_FREQUENCY_MAX, freq_suffixes, NUM_FREQ_SUFFIXES, &ok); if (!ok) { cli_err(s, argv[0], "Invalid max frequency (%s)\n", argv[5]); return CLI_RET_INVPARAM; } if (argc >= 7) { f_inc = str2uint_suffix(argv[6], 1, BLADERF_FREQUENCY_MAX, freq_suffixes, NUM_FREQ_SUFFIXES, &ok); if (!ok) { cli_err(s, argv[0], "Invalid frequency increment (%s)\n", argv[6]); return CLI_RET_INVPARAM; } } } if (f_min >= f_max) { cli_err(s, argv[0], "Low frequency cannot be >= high frequency\n"); return CLI_RET_INVPARAM; } if (((f_max - f_min) / f_inc) == 0) { cli_err(s, argv[0], "The specified frequency increment would yield " "an empty table.\n"); return CLI_RET_INVPARAM; } filename = calloc(1, filename_len + 1); if (filename == NULL) { return CLI_RET_MEM; } status = bladerf_get_serial(s->dev, filename); if (status != 0) { goto out; } filename_len -= strlen(filename); if (module == BLADERF_MODULE_RX) { strncat(filename, "_dc_rx.tbl", filename_len); } else { strncat(filename, "_dc_tx.tbl", filename_len); } /* This operation may take a bit of time, so let's make sure we * actually have write access before kicking things off. Note that * access is inherently checked later when the file is actually written, * should permissions change in the meantime. */ write_check = fopen(filename, "wb"); if (!write_check) { if (errno == EACCES) { status = BLADERF_ERR_PERMISSION; } else { status = BLADERF_ERR_IO; } goto out; } fclose(write_check); write_check = NULL; /* Not much we care to do if this fails. Throw away the return value * to make this explicit to our static analysis tools */ (void) remove(filename); params = prepare_dc_cal_params(f_min, f_max, f_inc, &num_params); if (params == NULL) { status = BLADERF_ERR_MEM;; goto out; } status = dc_calibration(s->dev, module, params, num_params, true); if (status != 0) { goto out; } status = save_table_results(filename, s->dev, module, params, num_params); if (status == 0) { printf("\n Done.\n\n"); } out: if (status != 0) { s->last_lib_error = status; status = CLI_RET_LIBBLADERF; } free(filename); free(params); return status; } int cmd_calibrate(struct cli_state *state, int argc, char **argv) { int status; if (argc >= 2) { if (!strcasecmp(argv[1], "lms")) { status = cal_lms(state, argc, argv); } else if (!strcasecmp(argv[1], "table")) { status = cal_table(state, argc, argv); } else if (!strcasecmp(argv[1], "dc")) { status = cal_dc_correction_params(state, argc, argv); } else if (!strcasecmp(argv[1], "iq")) { status = cal_iq_correction_params(state, argc, argv); } else { cli_err(state, argv[0], "Invalid operation: %s\n", argv[1]); status = CLI_RET_INVPARAM; } } else { return CLI_RET_NARGS; } if (status == CLI_RET_LIBBLADERF && state->last_lib_error == BLADERF_ERR_UNSUPPORTED) { printf("\n If tuning mode is FPGA, consider setting tuning mode" " to host by running `set tuning_mode host`.\n"); } return status; } bladeRF-2024.05/host/utilities/bladeRF-cli/src/cmd/calibrate.h000066400000000000000000000055021457144405000236600ustar00rootroot00000000000000/* * This file is part of the bladeRF project * * Copyright (C) 2014 Nuand LLC * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef CALIBRATE_H_ #define CALIBRATE_H_ #include #include #include "common.h" /* Calibration opereration bitmasks */ #define CAL_DC_RX_ (1 << 0) #define CAL_DC_TX_ (1 << 1) #define CAL_DC_AUTO_ (1 << 2) #define CAL_DC (CAL_DC_RX_ | CAL_DC_TX_ | CAL_DC_AUTO_) #define CAL_DC_LMS_TUNING ((1 << 16) | CAL_DC_RX_) #define CAL_DC_LMS_RXLPF ((1 << 17) | CAL_DC_RX_) #define CAL_DC_LMS_RXVGA2 ((1 << 18) | CAL_DC_RX_) #define CAL_DC_LMS_TXLPF ((1 << 19) | CAL_DC_TX_) #define CAL_DC_LMS_TX_ALL (CAL_DC_LMS_TUNING | CAL_DC_LMS_TXLPF) #define CAL_DC_LMS_RX_ALL (CAL_DC_LMS_TUNING | CAL_DC_LMS_RXLPF | \ CAL_DC_LMS_RXVGA2) #define CAL_DC_LMS_ALL (CAL_DC_LMS_TX_ALL | CAL_DC_LMS_RX_ALL) #define CAL_DC_AUTO_RX (CAL_DC_AUTO_ | CAL_DC_RX_) #define CAL_DC_AUTO_TX (CAL_DC_AUTO_ | CAL_DC_TX_) #define CAL_DC_AUTO (CAL_DC_AUTO_RX | CAL_DC_AUTO_TX) #define IS_CAL(cal, ops) ((ops & cal) == cal) #define IS_DC_CAL(ops) ((ops & CAL_DC) != 0) #define IS_RX_CAL(ops) ((ops & CAL_DC_RX_) != 0) #define IS_TX_CAL(ops) ((ops & CAL_DC_TX_) != 0) /** * Perform DC offset calibrations * * @param state CLI state handle * @param ops Bitwise OR of CAL_DC_* values, describing desired operation * * @return 0 on success, BLADERF_ERR_* value on failure */ int calibrate_dc(struct cli_state *state, unsigned int ops); /** * Generate a DC offset calibration table * * @param state CLI state handle * @param module Module to calibrate * @param filename Output filename for table file * @param f_low Lowest frequency in the table to start at * @param f_inc Frequency to increment by at each calibration step * @param f_high Max frequency in the calibration table * * @return 0 on success, BLADERF_ERR_* value on failure */ int calibrate_dc_gen_tbl(struct cli_state *state, bladerf_module module, const char *filename, unsigned int f_low, unsigned f_inc, unsigned int f_high); #endif bladeRF-2024.05/host/utilities/bladeRF-cli/src/cmd/cmd.c000066400000000000000000000463711457144405000225010ustar00rootroot00000000000000/* * This file is part of the bladeRF project * * Copyright (C) 2013-2014 Nuand LLC * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include "cmd.h" #include "conversions.h" #include "parse.h" #include "script.h" #include "thread.h" #include "doc/cmd_help.h" #define DECLARE_CMD(x, ...) \ int cmd_##x(struct cli_state *, int, char **); \ static char const *cmd_names_##x[] = { __VA_ARGS__, NULL }; DECLARE_CMD(calibrate, "calibrate", "cal"); DECLARE_CMD(clear, "clear", "cls"); DECLARE_CMD(echo, "echo"); DECLARE_CMD(erase, "erase", "e"); DECLARE_CMD(flash_backup, "flash_backup", "fb"); DECLARE_CMD(flash_image, "flash_image", "fi"); DECLARE_CMD(flash_init_cal, "flash_init_cal", "fic"); DECLARE_CMD(flash_restore, "flash_restore", "fr"); DECLARE_CMD(fw_log, "fw_log"); DECLARE_CMD(generate, "generate"); DECLARE_CMD(help, "help", "h", "?"); DECLARE_CMD(info, "info", "i"); DECLARE_CMD(jump_to_bootloader, "jump_to_boot", "j"); DECLARE_CMD(load, "load", "ld"); DECLARE_CMD(mimo, "mimo"); DECLARE_CMD(open, "open", "op", "o"); DECLARE_CMD(peek, "peek", "pe"); DECLARE_CMD(poke, "poke", "po"); DECLARE_CMD(print, "print", "pr", "p"); DECLARE_CMD(probe, "probe", "pro"); DECLARE_CMD(quit, "quit", "q", "exit", "x"); DECLARE_CMD(recover, "recover", "r"); DECLARE_CMD(run, "run"); DECLARE_CMD(rx, "rx", "receive"); DECLARE_CMD(set, "set", "s"); DECLARE_CMD(trigger, "trigger", "tr"); DECLARE_CMD(tx, "tx", "transmit"); DECLARE_CMD(version, "version", "ver", "v"); DECLARE_CMD(xb, "xb"); #define MAX_ARGS 10 #define COMMENT_CHAR '#' struct cmd { char const **names; int (*exec)(struct cli_state *s, int argc, char **argv); char const *desc; char const *help; bool requires_device; bool requires_fpga; bool allow_while_streaming; }; // clang-format off static struct cmd const cmd_table[] = { { FIELD_INIT(.names, cmd_names_calibrate), FIELD_INIT(.exec, cmd_calibrate), FIELD_INIT(.desc, "Perform transceiver and device calibrations"), FIELD_INIT(.help, CLI_CMD_HELPTEXT_calibrate), FIELD_INIT(.requires_device, true), FIELD_INIT(.requires_fpga, true), FIELD_INIT(.allow_while_streaming, false), }, { FIELD_INIT(.names, cmd_names_clear), FIELD_INIT(.exec, cmd_clear), FIELD_INIT(.desc, "Clear the screen"), FIELD_INIT(.help, CLI_CMD_HELPTEXT_clear), FIELD_INIT(.requires_device, false), FIELD_INIT(.requires_fpga, false), FIELD_INIT(.allow_while_streaming, true), }, { FIELD_INIT(.names, cmd_names_echo), FIELD_INIT(.exec, cmd_echo), FIELD_INIT(.desc, "Echo each argument on a new line"), FIELD_INIT(.help, CLI_CMD_HELPTEXT_echo), FIELD_INIT(.requires_device, false), FIELD_INIT(.requires_fpga, false), FIELD_INIT(.allow_while_streaming, true), }, { FIELD_INIT(.names, cmd_names_erase), FIELD_INIT(.exec, cmd_erase), FIELD_INIT(.desc, "Erase specified erase blocks of SPI flash"), FIELD_INIT(.help, CLI_CMD_HELPTEXT_erase), FIELD_INIT(.requires_device, true), FIELD_INIT(.requires_fpga, false), FIELD_INIT(.allow_while_streaming, false), }, { FIELD_INIT(.names, cmd_names_flash_backup), FIELD_INIT(.exec, cmd_flash_backup), FIELD_INIT(.desc, "Back up flash data to a file with metadata."), FIELD_INIT(.help, CLI_CMD_HELPTEXT_flash_backup), FIELD_INIT(.requires_device, true), FIELD_INIT(.requires_fpga, false), FIELD_INIT(.allow_while_streaming, false), }, { FIELD_INIT(.names, cmd_names_flash_image), FIELD_INIT(.exec, cmd_flash_image), FIELD_INIT(.desc, "Print a flash image's metadata or create a new " "flash image"), FIELD_INIT(.help, CLI_CMD_HELPTEXT_flash_image), FIELD_INIT(.requires_device, false), FIELD_INIT(.requires_fpga, false), FIELD_INIT(.allow_while_streaming, false), }, { FIELD_INIT(.names, cmd_names_flash_init_cal), FIELD_INIT(.exec, cmd_flash_init_cal), FIELD_INIT(.desc, "Write new calibration data to a device or to a " "file"), FIELD_INIT(.help, CLI_CMD_HELPTEXT_flash_init_cal), FIELD_INIT(.requires_device, true), FIELD_INIT(.requires_fpga, false), FIELD_INIT(.allow_while_streaming, false), }, { FIELD_INIT(.names, cmd_names_flash_restore), FIELD_INIT(.exec, cmd_flash_restore), FIELD_INIT(.desc, "Restore flash data from a file"), FIELD_INIT(.help, CLI_CMD_HELPTEXT_flash_restore), FIELD_INIT(.requires_device, true), FIELD_INIT(.requires_fpga, false), FIELD_INIT(.allow_while_streaming, false), }, { FIELD_INIT(.names, cmd_names_fw_log), FIELD_INIT(.exec, cmd_fw_log), FIELD_INIT(.desc, "Read firmware log contents"), FIELD_INIT(.help, CLI_CMD_HELPTEXT_fw_log), FIELD_INIT(.requires_device, true), FIELD_INIT(.requires_fpga, false), FIELD_INIT(.allow_while_streaming, true), }, { FIELD_INIT(.names, cmd_names_generate), FIELD_INIT(.exec, cmd_generate), FIELD_INIT(.desc, "Generates signals such as an offset CW"), FIELD_INIT(.help, CLI_CMD_HELPTEXT_generate), FIELD_INIT(.requires_device, false), FIELD_INIT(.requires_fpga, false), FIELD_INIT(.allow_while_streaming, true), }, { FIELD_INIT(.names, cmd_names_help), FIELD_INIT(.exec, cmd_help), FIELD_INIT(.desc, "Provide information about specified command"), FIELD_INIT(.help, CLI_CMD_HELPTEXT_help), FIELD_INIT(.requires_device, false), FIELD_INIT(.requires_fpga, false), FIELD_INIT(.allow_while_streaming, true), }, { FIELD_INIT(.names, cmd_names_info), FIELD_INIT(.exec, cmd_info), FIELD_INIT(.desc, "Print information about the currently opened " "device"), FIELD_INIT(.help, CLI_CMD_HELPTEXT_info), FIELD_INIT(.requires_device, true), FIELD_INIT(.requires_fpga, false), FIELD_INIT(.allow_while_streaming, true), }, { FIELD_INIT(.names, cmd_names_jump_to_bootloader), FIELD_INIT(.exec, cmd_jump_to_bootloader), FIELD_INIT(.desc, "Clear FW signature in flash and jump to FX3 " "bootloader"), FIELD_INIT(.help, CLI_CMD_HELPTEXT_jump_to_boot), FIELD_INIT(.requires_device, true), FIELD_INIT(.requires_fpga, false), FIELD_INIT(.allow_while_streaming, false), }, { FIELD_INIT(.names, cmd_names_load), FIELD_INIT(.exec, cmd_load), FIELD_INIT(.desc, "Load FPGA or FX3"), FIELD_INIT(.help, CLI_CMD_HELPTEXT_load), FIELD_INIT(.requires_device, true), FIELD_INIT(.requires_fpga, false), FIELD_INIT(.allow_while_streaming, false), }, { FIELD_INIT(.names, cmd_names_mimo), FIELD_INIT(.exec, cmd_mimo), FIELD_INIT(.desc, "Modify device MIMO operation"), FIELD_INIT(.help, CLI_CMD_HELPTEXT_mimo), FIELD_INIT(.requires_device, true), FIELD_INIT(.requires_fpga, true), FIELD_INIT(.allow_while_streaming, false), }, { FIELD_INIT(.names, cmd_names_open), FIELD_INIT(.exec, cmd_open), FIELD_INIT(.desc, "Open a bladeRF device"), FIELD_INIT(.help, CLI_CMD_HELPTEXT_open), FIELD_INIT(.requires_device, false), FIELD_INIT(.requires_fpga, false), FIELD_INIT(.allow_while_streaming, false), }, { FIELD_INIT(.names, cmd_names_peek), FIELD_INIT(.exec, cmd_peek), FIELD_INIT(.desc, "Peek a memory location"), FIELD_INIT(.help, CLI_CMD_HELPTEXT_peek), FIELD_INIT(.requires_device, true), FIELD_INIT(.requires_fpga, true), FIELD_INIT(.allow_while_streaming, true), }, { FIELD_INIT(.names, cmd_names_poke), FIELD_INIT(.exec, cmd_poke), FIELD_INIT(.desc, "Poke a memory location"), FIELD_INIT(.help, CLI_CMD_HELPTEXT_poke), FIELD_INIT(.requires_device, true), FIELD_INIT(.requires_fpga, true), FIELD_INIT(.allow_while_streaming, true), }, { FIELD_INIT(.names, cmd_names_print), FIELD_INIT(.exec, cmd_print), FIELD_INIT(.desc, "Print information about the device"), FIELD_INIT(.help, CLI_CMD_HELPTEXT_print), FIELD_INIT(.requires_device, true), FIELD_INIT(.requires_fpga, true), FIELD_INIT(.allow_while_streaming, true), }, { FIELD_INIT(.names, cmd_names_probe), FIELD_INIT(.exec, cmd_probe), FIELD_INIT(.desc, "List attached bladeRF devices"), FIELD_INIT(.help, CLI_CMD_HELPTEXT_probe), FIELD_INIT(.requires_device, false), FIELD_INIT(.requires_fpga, false), FIELD_INIT(.allow_while_streaming, true), }, { FIELD_INIT(.names, cmd_names_quit), FIELD_INIT(.exec, NULL), /* Default action on NULL exec fn is to quit */ FIELD_INIT(.desc, "Exit the CLI"), FIELD_INIT(.help, CLI_CMD_HELPTEXT_quit), FIELD_INIT(.requires_device, false), FIELD_INIT(.requires_fpga, false), FIELD_INIT(.allow_while_streaming, true), }, { FIELD_INIT(.names, cmd_names_recover), FIELD_INIT(.exec, cmd_recover), FIELD_INIT(.desc, "Load firmware when operating in FX3 bootloader " "mode"), FIELD_INIT(.help, CLI_CMD_HELPTEXT_recover), FIELD_INIT(.requires_device, false), FIELD_INIT(.requires_fpga, false), FIELD_INIT(.allow_while_streaming, false), }, { FIELD_INIT(.names, cmd_names_run), FIELD_INIT(.exec, cmd_run), FIELD_INIT(.desc, "Run a script"), FIELD_INIT(.help, CLI_CMD_HELPTEXT_run), FIELD_INIT(.requires_device, false), FIELD_INIT(.requires_fpga, false), FIELD_INIT(.allow_while_streaming, true), }, { FIELD_INIT(.names, cmd_names_rx), FIELD_INIT(.exec, cmd_rx), FIELD_INIT(.desc, "Receive IQ samples"), FIELD_INIT(.help, CLI_CMD_HELPTEXT_rx), FIELD_INIT(.requires_device, true), FIELD_INIT(.requires_fpga, true), FIELD_INIT(.allow_while_streaming, true), /* Can rx while tx'ing */ }, { FIELD_INIT(.names, cmd_names_set), FIELD_INIT(.exec, cmd_set), FIELD_INIT(.desc, "Set device settings"), FIELD_INIT(.help, CLI_CMD_HELPTEXT_set), FIELD_INIT(.requires_device, true), FIELD_INIT(.requires_fpga, true), FIELD_INIT(.allow_while_streaming, true), }, { FIELD_INIT(.names, cmd_names_trigger), FIELD_INIT(.exec, cmd_trigger), FIELD_INIT(.desc, "Control triggering"), FIELD_INIT(.help, CLI_CMD_HELPTEXT_trigger), FIELD_INIT(.requires_device, true), FIELD_INIT(.requires_fpga, true), FIELD_INIT(.allow_while_streaming, true), /* Can control trigger * while running */ }, { FIELD_INIT(.names, cmd_names_tx), FIELD_INIT(.exec, cmd_tx), FIELD_INIT(.desc, "Transmit IQ samples"), FIELD_INIT(.help, CLI_CMD_HELPTEXT_tx), FIELD_INIT(.requires_device, true), FIELD_INIT(.requires_fpga, true), FIELD_INIT(.allow_while_streaming, true), /* Can tx while rx'ing */ }, { FIELD_INIT(.names, cmd_names_version), FIELD_INIT(.exec, cmd_version), FIELD_INIT(.desc, "Host software and device version information"), FIELD_INIT(.help, CLI_CMD_HELPTEXT_version), FIELD_INIT(.requires_device, false), FIELD_INIT(.requires_fpga, false), FIELD_INIT(.allow_while_streaming, true), }, { FIELD_INIT(.names, cmd_names_xb), FIELD_INIT(.exec, cmd_xb), FIELD_INIT(.desc, "Enable and configure expansion boards"), FIELD_INIT(.help, CLI_CMD_HELPTEXT_xb), FIELD_INIT(.requires_device, true), FIELD_INIT(.requires_fpga, true), FIELD_INIT(.allow_while_streaming, false), }, /* Always terminate the command entry with a completely NULL entry */ { FIELD_INIT(.names, NULL), FIELD_INIT(.exec, NULL), FIELD_INIT(.desc, NULL), FIELD_INIT(.help, NULL), FIELD_INIT(.requires_device, false), FIELD_INIT(.requires_fpga, false), FIELD_INIT(.allow_while_streaming, true), } }; // clang-format on // clang-format off struct numeric_suffix const freq_suffixes[NUM_FREQ_SUFFIXES] = { { "G", 1000 * 1000 * 1000 }, { "GHz", 1000 * 1000 * 1000 }, { "M", 1000 * 1000 }, { "MHz", 1000 * 1000 }, { "k", 1000 }, { "kHz", 1000 } }; // clang-format on struct cmd const *get_cmd(char *name) { struct cmd const *rv = NULL; int i, j; for (i = 0; cmd_table[i].names != NULL && rv == 0; ++i) { for (j = 0; cmd_table[i].names[j] != NULL && rv == 0; ++j) { if (strcasecmp(name, cmd_table[i].names[j]) == 0) { rv = &(cmd_table[i]); } } } return rv; } int cmd_help(struct cli_state *s, int argc, char **argv) { struct cmd const *cmd = NULL; int i; int ret = CLI_RET_OK; /* Asking for general help */ if (1 == argc) { printf(" |%-18s|%-75s|%-8s|%-7s|\n", " Command name", " Description", " Device", " FPGA"); for (i = 0; ; ++i) { if ((i % 5) == 0) { printf(" |%-18s+%-75s+%-8s+%-7s|\n", "------------------", "---------------------------------------------------------------------------", "--------", "-------"); } if (cmd_table[i].names == NULL) { break; } /* Hidden functions for fun and profit */ if (cmd_table[i].names[0][0] == '_') { continue; } printf(" | %-17s| %-74s|%-8s|%-7s|\n", cmd_table[i].names[0], cmd_table[i].desc, cmd_table[i].requires_device ? " Y":"", cmd_table[i].requires_fpga ? " Y" : ""); } printf("\n"); /* Asking for command specific help */ } else if (2 == argc) { /* Iterate through the commands */ cmd = get_cmd(argv[1]); /* If we found it, print the help */ if (NULL != cmd) { printf("\n%s\n", cmd->help); } else { /* Otherwise, print that we couldn't find it :( */ cli_err(s, argv[0], "No help info available for \"%s\"\n", argv[1]); ret = CLI_RET_INVPARAM; } } else { ret = CLI_RET_NARGS; } printf("The letter Y in the \"Device\" and \"FPGA\" columns indicates the command\n" " needs the device to open, and the FPGA to be loaded, respectively.\n"); return ret; } int cmd_clear(struct cli_state *s, int argc, char **argv) { return CLI_RET_CLEAR_TERM; } int cmd_run(struct cli_state *state, int argc, char **argv) { int status; if (argc != 2) { return CLI_RET_NARGS; } status = cli_open_script(&state->scripts, argv[1]); if (0 == status) { return CLI_RET_RUN_SCRIPT; } else if (1 == status) { cli_err(state, "run", "Recursive loop detected in script.\n"); return CLI_RET_INVPARAM; } else if (status < 0) { if (-status == ENOENT) { return CLI_RET_NOFILE; } else { return CLI_RET_FILEOP; } } else { /* Shouldn't happen */ return CLI_RET_UNKNOWN; } } int cmd_echo(struct cli_state *state, int argc, char **argv) { int i; for (i = 1; i < argc; ++i) { printf("%s\n", argv[i]); } return 0; } int cmd_handle(struct cli_state *s, char const *line) { struct cmd const *cmd; int argc; int ret = 0; char **argv = NULL; int fpga_status = -1; argc = str2args(line, COMMENT_CHAR, &argv); if (-2 == argc) { cli_err(s, "Error", "Input contains unterminated quote.\n"); return CLI_RET_INVPARAM; } if (argc > 0) { cmd = get_cmd(argv[0]); if (cmd) { if (cmd->exec) { /* Check if the command requires an opened device */ if ((cmd->requires_device) && !cli_device_is_opened(s)) { ret = CLI_RET_NODEV; } /* Check if the command requires a loaded FPGA */ if (0 == ret && cmd->requires_fpga) { fpga_status = bladerf_is_fpga_configured(s->dev); if (fpga_status < 0) { cli_err(s, argv[0], "Failed to determine if the FPGA is configured:" " %s\n", bladerf_strerror(fpga_status)); s->last_lib_error = fpga_status; ret = CLI_RET_LIBBLADERF; } else if (fpga_status != 1) { ret = CLI_RET_NOFPGA; } } /* Test if this command may be run while the device is * actively running an RX/TX stream */ if (0 == ret && cli_device_is_streaming(s) && !cmd->allow_while_streaming) { ret = CLI_RET_BUSY; } if (0 == ret) { /* Commands own the device handle while they're executing. * This is needed to prevent races on the device handle * while the RX/TX make any necessary control calls while * starting up or finishing up a stream() call*/ MUTEX_LOCK(&s->dev_lock); ret = cmd->exec(s, argc, argv); if (ret == CLI_RET_INVPARAM || ret == CLI_RET_NARGS) { printf("\nDescription of %s command:\n=========\n" "%s\n=========\n", cmd->names[0], cmd->help); } MUTEX_UNLOCK(&s->dev_lock); } } else { ret = CLI_RET_QUIT; } } else { cli_err(s, "Unrecognized command", "%s\n", argv[0]); ret = CLI_RET_NOCMD; } free_args(argc, argv); } else if (0 == argc) { free_args(argc, argv); } else { ret = CLI_RET_UNKNOWN; } return ret; } void cmd_show_help_all() { int i = 0; for (i = 0; cmd_table[i].names != NULL; ++i) printf("COMMAND: %s\n", cmd_table[i].help); } bladeRF-2024.05/host/utilities/bladeRF-cli/src/cmd/cmd.h000066400000000000000000000024751457144405000225030ustar00rootroot00000000000000/** * @file cmd.h * * @brief Common command-related routines * * This file is part of the bladeRF project * * Copyright (C) 2013 Nuand LLC * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef CMD_H__ #define CMD_H__ #include #include "common.h" #include "conversions.h" #define NUM_FREQ_SUFFIXES 6 extern const struct numeric_suffix freq_suffixes[NUM_FREQ_SUFFIXES]; /** * Parse and execute the supplied command * * @return 0 on success, CLI_RET_ on failure/exceptional condition */ int cmd_handle(struct cli_state *s, const char *line); /** * Print help information for all interactive commands */ void cmd_show_help_all(); #endif bladeRF-2024.05/host/utilities/bladeRF-cli/src/cmd/doc/000077500000000000000000000000001457144405000223245ustar00rootroot00000000000000bladeRF-2024.05/host/utilities/bladeRF-cli/src/cmd/doc/.gitignore000066400000000000000000000000631457144405000243130ustar00rootroot00000000000000cmd_help.html cmd_help.man cmd_help.txt cmd_help.h bladeRF-2024.05/host/utilities/bladeRF-cli/src/cmd/doc/cmd_help.h.in000066400000000000000000001130101457144405000246510ustar00rootroot00000000000000/** * @file cmd_help.h * * @brief Autogenerated interactive CLI help * * This file is part of the bladeRF project * * Copyright (C) 2014-2019 Nuand LLC * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ /** * WARNING: THIS FILE IS AUTOMATICALLY GENERATED BY GENERATE.BASH. * Any manual modifications to this file will be overwritten! * To edit the content of help strings, please edit interactive-help.md * * Last generated: Thu Jan 17 20:55:32 EST 2019 by rtucker@rho */ #ifndef BLADERF_CLI_DOC_CMD_HELP_H__ #define BLADERF_CLI_DOC_CMD_HELP_H__ #define CLI_CMD_HELPTEXT_calibrate \ "Usage: calibrate [options]\n" \ "\n" \ "Perform the specified transceiver calibration operation.\n" \ "\n" \ "Available operations:\n" \ "\n" \ "- LMS internal DC offset auto-calibrations\n" \ "\n" \ " - calibrate lms [show]\n" \ " - calibrate lms tuning [value]\n" \ " - calibrate lms txlpf [ ]\n" \ " - calibrate lms rxlpf [ ]\n" \ " - calibrate lms rxvga2 [ ]\n" \ "\n" \ " Perform the specified auto-calibration, or all of them if none are\n" \ " provided. When values are provided, these are used instead of the\n" \ " results of the auto-calibration procedure. Use lms show to read\n" \ " and print the current LMS calibration values.\n" \ "\n" \ " For rxvga2, I1 and Q1 are the Stage 1 I and Q components\n" \ " respectively, and I2 and Q2 are the Stage 2 I and Q components.\n" \ "\n" \ "- RX and TX I/Q DC offset correction parameter calibration\n" \ "\n" \ " - calibrate dc [ ]\n" \ " - calibrate dc \n" \ "\n" \ " Calibrate the DC offset correction parameters for the current\n" \ " frequency and gain settings. If a I/Q values are provided, they\n" \ " are applied directly. cal rxtx is shorthand for cal rx followed by\n" \ " cal tx.\n" \ "\n" \ "- RX and TX I/Q balance correction parameter calibration\n" \ "\n" \ " - calibrate iq \n" \ "\n" \ " Set the specified IQ gain or phase balance parameters.\n" \ "\n" \ "- Generate RX or TX I/Q DC correction parameter tables\n" \ "\n" \ " - calibrate table dc [ [f_inc]]\n" \ "\n" \ " Generate and write an I/Q correction parameter table to the\n" \ " current working directory, in a file named\n" \ " _dc_.tbl. f_min and f_max are min and max\n" \ " frequencies to include in the table. f_inc is the frequency\n" \ " increment.\n" \ "\n" \ " By default, tables are generated over the entire frequency range,\n" \ " in 10 MHz steps.\n" \ "\n" \ "- Generate RX or TX I/Q DC correction parameter tables for AGC Look\n" \ " Up Table\n" \ "\n" \ " - calibrate table agc [ [f_inc]]\n" \ "\n" \ " Similar usage as calibrate table dc except the call will set gains\n" \ " to the AGC's base gain value before running calibrate table dc.\n" \ "\n" \ #define CLI_CMD_HELPTEXT_clear \ "Usage: clear\n" \ "\n" \ "Clears the screen.\n" \ "\n" \ #define CLI_CMD_HELPTEXT_echo \ "Usage: echo [arg 1] [arg 2] ... [arg n]\n" \ "\n" \ "Echo each argument on a new line.\n" \ "\n" \ #define CLI_CMD_HELPTEXT_erase \ "Usage: erase \n" \ "\n" \ "Erase specified erase blocks SPI flash.\n" \ "\n" \ "- - Erase block offset\n" \ "- - Number of erase blocks to erase\n" \ "\n" \ #define CLI_CMD_HELPTEXT_flash_backup \ "Usage: flash_backup ( |
)\n" \ "\n" \ "Back up flash data to the specified file. This command takes either\n" \ "two or four arguments. The two-argument invocation is generally\n" \ "recommended for non-development use.\n" \ "\n" \ "Parameters:\n" \ "\n" \ "- - Type of backup.\n" \ "\n" \ " This selects the appropriate address and length values based upon\n" \ " the selected type.\n" \ "\n" \ " Valid options are:\n" \ "\n" \ " Option Description\n" \ " ------------- ----------------------------------------------------------\n" \ " cal Calibration data\n" \ " fw Firmware\n" \ " fpga40 Metadata and bitstream for 40 kLE FPGA\n" \ " fpga115 Metadata and bitstream for 115 kLE FPGA\n" \ " fpgaA4 Metadata and bitstream for 49 kLE (A4) FPGA\n" \ " fpgaA5 Metadata and bitstream for 77 kLE (A5) FPGA\n" \ " fpgaA9 Metadata and bitstream for 301 kLE (A9) FPGA\n" \ "\n" \ "-
- Address of data to back up. Must be erase\n" \ " block-aligned.\n" \ "- - Length of region to back up. Must be erase block-aligned.\n" \ "\n" \ "Note: When an address and length are provided, the image type will\n" \ "default to raw.\n" \ "\n" \ "Examples:\n" \ "\n" \ "- flash_backup cal.bin cal\n" \ "\n" \ " Backs up the calibration data region.\n" \ "\n" \ "- flash_backup cal_raw.bin 0x30000 0x10000\n" \ "\n" \ " Backs up the calibration region as a raw data image.\n" \ "\n" \ #define CLI_CMD_HELPTEXT_flash_image \ "Usage: flash_image [output options]\n" \ "\n" \ "Print a flash image's metadata or create a new flash image. When\n" \ "provided with the name of a flash image file as the only argument,\n" \ "this command will print the metadata contents of the image.\n" \ "\n" \ "The following options may be used to create a new flash image.\n" \ "\n" \ "- data=\n" \ "\n" \ " File to containing data to store in the image.\n" \ "\n" \ "- address=\n" \ "\n" \ " Flash address. The default depends upon type parameter.\n" \ "\n" \ "- type=\n" \ "\n" \ " Type of flash image. Defaults to raw.\n" \ "\n" \ " Valid options are:\n" \ "\n" \ " ------------------------------------------------------------------------\n" \ " Option Description\n" \ " ------------- ----------------------------------------------------------\n" \ " cal Calibration data\n" \ "\n" \ " fw Firmware\n" \ "\n" \ " fpga40 Metadata and bitstream for 40 kLE FPGA\n" \ "\n" \ " fpga115 Metadata and bitstream for 115 kLE FPGA\n" \ "\n" \ " fpgaA4 Metadata and bitstream for 49 kLE (A4) FPGA\n" \ "\n" \ " fpgaA9 Metadata and bitstream for 301 kLE (A9) FPGA\n" \ "\n" \ " raw Raw data. The address and length parameters must be\n" \ " provided if this type is selected.\n" \ " ------------------------------------------------------------------------\n" \ "\n" \ "- serial=\n" \ "\n" \ " Serial # to store in image. Defaults to zeros.\n" \ "\n" \ #define CLI_CMD_HELPTEXT_flash_init_cal \ "Usage: flash_init_cal []\n" \ "\n" \ "Create and write a new calibration data region to the currently opened\n" \ "device, or to a file. Be sure to back up calibration data prior to\n" \ "running this command. (See the flash_backup command.)\n" \ "\n" \ "- \n" \ "\n" \ " Either 40 or 115, depending on the device model.\n" \ "\n" \ "- \n" \ "\n" \ " VCTCXO/DAC trim value (0x0-0xffff)\n" \ "\n" \ "- \n" \ "\n" \ " File to write calibration data to. When this argument is provided,\n" \ " no data will be written to the device's flash.\n" \ "\n" \ #define CLI_CMD_HELPTEXT_flash_restore \ "Usage: flash_restore [
]\n" \ "\n" \ "Restore flash data from a file, optionally overriding values in the\n" \ "image metadata.\n" \ "\n" \ "-
\n" \ "\n" \ " Defaults to the address specified in the provided flash image\n" \ " file.\n" \ "\n" \ "- \n" \ "\n" \ " Defaults to length of the data in the provided image file.\n" \ "\n" \ #define CLI_CMD_HELPTEXT_fw_log \ "Usage: fw_log [filename]\n" \ "\n" \ "Read the contents of the device's firmware log and write it to the\n" \ "specified file. If no filename is specified, the log content is\n" \ "written to stdout.\n" \ "\n" \ #define CLI_CMD_HELPTEXT_generate \ "Usage: generate [parameters] \n" \ "\n" \ "\n" \ "Configuration parameters take the form param=value, and may be\n" \ "specified in a single or multiple rx config invocations. Below is a\n" \ "list of available parameters.\n" \ "\n" \ " ---------------------------------------------------------------------------\n" \ " Parameter Description\n" \ " ----------------- ---------------------------------------------------------\n" \ " n Number of samples to generate. 0 = unlimited.\n" \ "\n" \ " mag Magnitude of signal [-mag, mag]. Default is 2047\n" \ "\n" \ " format Output file format. One of the following:\n" \ "\n" \ " csv: CSV of SC16 Q11 samples (default)\n" \ "\n" \ " bin: Raw SC16 Q11 DAC samples\n" \ "\n" \ "\n" \ "Generates signal for use with tx command. Signal types include:\n" \ "\n" \ "- cw \n" \ "\n" \ " Generate a complex tone with a period relative to system sampling rate\n" \ "\n" \ " period indicates the number of samples between 2*M_PI. For example, cw of 4 would\n" \ " generate a complex tone at +4/F_s. With a sampling rate of 20MSPS, the complex\n" \ " tone would be generated at +5MHz. A negative period indicates negative frequency.\n" \ "\n" \ "- prn\n" \ "\n" \ " Generates pseudorandom noise" \ "\n" \ "\n" \ "Examples:\n" \ "\n" \ "- To generate a CSV for a complex tone at -F_s/4 with a full scale swing of -500 to 500:\n" \ "\n" \ " generate output.csv format=csv mag=500 cw 4\n" \ "\n" \ "\n" \ "- To generate 10,000,000 samples of PRN:\n" \ "\n" \ " generate output.csv format=csv n=10e6 prn\n" \ "\n" \ "\n" \ #define CLI_CMD_HELPTEXT_help \ "Usage: help []\n" \ "\n" \ "Provides extended help, like this, on any command.\n" \ "\n" \ #define CLI_CMD_HELPTEXT_info \ "Usage: info\n" \ "\n" \ "Prints the following information about an opened device:\n" \ "\n" \ "- Serial number\n" \ "- VCTCXO DAC calibration value\n" \ "- FPGA size\n" \ "- Whether or not the FPGA is loaded\n" \ "- USB bus, address, and speed\n" \ "- Backend (Denotes which device interface code is being used.)\n" \ "- Instance number\n" \ "\n" \ #define CLI_CMD_HELPTEXT_jump_to_boot \ "Usage: jump_to_boot\n" \ "\n" \ "Clear out a FW signature word in flash and jump to FX3 bootloader.\n" \ "\n" \ "The device will continue to boot into the FX3 bootloader across power\n" \ "cycles until new firmware is written to the device.\n" \ "\n" \ #define CLI_CMD_HELPTEXT_load \ "Usage: load \n" \ "\n" \ "Load an FPGA bitstream or program the FX3's SPI flash.\n" \ "\n" \ #define CLI_CMD_HELPTEXT_xb \ "Usage: xb [parameters]\n" \ "\n" \ "Enable or configure an expansion board.\n" \ "\n" \ "Valid values for board_model:\n" \ "\n" \ "- 100\n" \ "\n" \ " XB-100 GPIO expansion board\n" \ "\n" \ "- 200\n" \ "\n" \ " XB-200 LF/MF/HF/VHF transverter expansion board\n" \ "\n" \ "- 300\n" \ "\n" \ " XB-300 amplifier board\n" \ "\n" \ "Common subcommands:\n" \ "\n" \ "- enable\n" \ "\n" \ " Enable the XB-100, XB-200, or XB-300 expansion board.\n" \ "\n" \ "XB-200 subcommands:\n" \ "\n" \ "- filter [rx|tx] [50|144|222|custom|auto_1db|auto_3db]\n" \ "\n" \ " Selects the specified RX or TX filter on the XB-200 board. Below\n" \ " are descriptions of each of the filter options.\n" \ "\n" \ " - 50\n" \ "\n" \ " Select the 50-54 MHz (6 meter band) filter.\n" \ "\n" \ " - 144\n" \ "\n" \ " Select the 144-148 MHz (2 meter band) filter.\n" \ "\n" \ " - 222\n" \ "\n" \ " Select the 222-225 MHz (1.25 meter band) filter. Realistically,\n" \ " this filter option is actually slightly wider, covering\n" \ " 206 MHz - 235 MHz.\n" \ "\n" \ " - custom\n" \ "\n" \ " Selects the custom filter path. The user should connect a filter\n" \ " along the corresponding FILT and FILT-ANT connections when using\n" \ " this option. Alternatively one may jumper the FILT and FILT-ANT\n" \ " connections to achieve \"no filter\" for reception. (However, this is\n" \ " _highly_ discouraged for transmissions.)\n" \ "\n" \ " - auto_1db\n" \ "\n" \ " Automatically selects one of the above choices based upon frequency\n" \ " and the filters' 1dB points. The custom path is used for cases\n" \ " that are not associated with the on-board filters.\n" \ "\n" \ " - auto_3db\n" \ "\n" \ " Automatically selects one of the above choices based upon frequency\n" \ " and the filters' 3dB points. The custom path is used for cases\n" \ " that are not associated with the on-board filters.\n" \ "\n" \ "XB-300 subcommands:\n" \ "\n" \ "- [on|off]\n" \ "\n" \ " Enable or disable the power amplifier (PA), low-noise amplifier\n" \ " (lna) or auxillary LNA (aux). The current state if the specified\n" \ " device is printed if [on|off] is not specified.\n" \ "\n" \ " Note: The auxillary path on the XB-300 is not populated with\n" \ " components by default; the aux control will have no effect upon\n" \ " the RX signal. This option is available for users to modify their\n" \ " board with custom hardware.\n" \ "\n" \ "- \n" \ "\n" \ " Read the current Power Detect (PDET) voltage and compute the\n" \ " output power.\n" \ "\n" \ "- trx \n" \ "\n" \ " The default XB-300 hardware configuration includes separate RX and\n" \ " TX paths. However, users wishing to use only a single antenna for\n" \ " TRX can do so via a modification to resistor population options on\n" \ " the XB-300 and use this command to switch between RX an TX\n" \ " operation. (See R8, R10, and R23 on the schematic.)\n" \ "\n" \ "Examples:\n" \ "\n" \ "- xb 200 enable\n" \ "\n" \ " Enables and configures the XB-200 transverter expansion board.\n" \ "\n" \ "- xb 200 filter rx 144\n" \ "\n" \ " Selects the 144-148 MHz receive filter on the XB-200 transverter\n" \ " expansion board.\n" \ "\n" \ "- xb 300 enable\n" \ "\n" \ " Enables and configures the use of GPIOs to interact with the\n" \ " XB-300. The PA and LNA will disabled by default.\n" \ "\n" \ "- xb 300 lna on\n" \ "\n" \ " Enables the RX LNA on the XB-300. LED D1 (green) is illuminated\n" \ " when the LNA is enabled, and off when it is disabled.\n" \ "\n" \ "- xb 300 pa off\n" \ "\n" \ " Disables the TX PA on the XB-300. LED D2 (blue) is illuminated\n" \ " when the PA is enabled, and off when it is disabled.\n" \ "\n" \ #define CLI_CMD_HELPTEXT_mimo \ "Usage: mimo [master | slave]\n" \ "\n" \ "Modify device MIMO operation.\n" \ "\n" \ "IMPORTANT: This command is deprecated and has been superseded by\n" \ "\"print/set smb_mode\". For usage text, run: \"set smb_mode\"\n" \ "\n" \ #define CLI_CMD_HELPTEXT_open \ "Usage: open [device identifiers]\n" \ "\n" \ "Open the specified device for use with successive commands. Any\n" \ "previously opened device will be closed.\n" \ "\n" \ "The general form of the device identifier string is:\n" \ "\n" \ ":[device=:] [instance=] [serial=]\n" \ "\n" \ "See the bladerf_open() documentation in libbladeRF for the complete\n" \ "device specifier format.\n" \ "\n" \ #define CLI_CMD_HELPTEXT_peek \ "Usage: peek
[num_addresses]\n" \ "\n" \ "The peek command can read any of the devices hanging off the FPGA.\n" \ "This includes the:\n" \ "\n" \ "- bladeRF 1: LMS6002D transceiver, VCTCXO trim DAC, Si5338 clock\n" \ " generator\n" \ "- bladeRF 2: AD9361 transceiver, VCTCXO trim DAC, ADF4002 frequency\n" \ " synthesizer\n" \ "\n" \ "If num_addresses is supplied, the address is incremented by 1 and\n" \ "another peek is performed for that many addresses.\n" \ "\n" \ "Valid Address Ranges:\n" \ "\n" \ " Device Address Range\n" \ " -------- -------------------\n" \ " rfic 0 to 0x3F7 (1015)\n" \ " pll 0 to 3\n" \ " dac 0 to 255\n" \ " lms 0 to 127\n" \ " si 0 to 255\n" \ "\n" \ "Example:\n" \ "\n" \ "- peek si ...\n" \ "\n" \ #define CLI_CMD_HELPTEXT_poke \ "Usage: poke
\n" \ "\n" \ "The poke command can write any of the devices hanging off the FPGA.\n" \ "This includes the:\n" \ "\n" \ "- bladeRF 1: LMS6002D transceiver, VCTCXO trim DAC, Si5338 clock\n" \ " generator\n" \ "- bladeRF 2: AD9361 transceiver, VCTCXO trim DAC, ADF4002 frequency\n" \ " synthesizer\n" \ "\n" \ "Valid Address Ranges:\n" \ "\n" \ " Device Address Range\n" \ " -------- -------------------\n" \ " rfic 0 to 0x3F7 (1015)\n" \ " pll 0 to 3\n" \ " dac 0 to 255\n" \ " lms 0 to 127\n" \ " si 0 to 255\n" \ "\n" \ "Example:\n" \ "\n" \ "- poke lms ...\n" \ "\n" \ #define CLI_CMD_HELPTEXT_print \ "Usage: print [parameter]\n" \ "\n" \ "The print command takes a parameter to print. Available parameters are\n" \ "listed below. If no parameter is specified, all parameters are\n" \ "printed.\n" \ "\n" \ "Common parameters:\n" \ "\n" \ " Parameter Description\n" \ " -------------- --------------------------------------------------------\n" \ " bandwidth Bandwidth settings\n" \ " frequency Frequency settings\n" \ " agc Automatic gain control\n" \ " loopback Loopback settings\n" \ " rx_mux FPGA RX FIFO input mux setting\n" \ " gain Gain settings\n" \ " samplerate Samplerate settings\n" \ " trimdac VCTCXO Trim DAC settings\n" \ " tuning_mode Tuning mode settings\n" \ " bitmode Sample bit width\n" \ " hardware Low-level hardware status\n" \ "\n" \ "BladeRF1-only parameters:\n" \ "\n" \ " Parameter Description\n" \ " -------------- --------------------------------------------------------\n" \ " gpio FX3 <-> FPGA GPIO state\n" \ " lnagain RX LNA gain, in dB (deprecated)\n" \ " rxvga1 RXVGA1 gain, in dB (deprecated)\n" \ " rxvga2 RXVGA2 gain, in dB (deprecated)\n" \ " txvga1 TXVGA1 gain, in dB (deprecated)\n" \ " txvga2 TXVGA2 gain, in dB (deprecated)\n" \ " sampling External or internal sampling mode\n" \ " smb_mode SMB clock port mode of operation\n" \ " vctcxo_tamer Current VCTCXO tamer mode\n" \ " xb_gpio Expansion board GPIO values\n" \ " xb_gpio_dir Expansion board GPIO direction (1=output, 0=input)\n" \ "\n" \ "BladeRF2-only parameters:\n" \ "\n" \ " Parameter Description\n" \ " -------------- --------------------------------------------------------\n" \ " clock_sel System clock selection\n" \ " clock_out Clock output selection\n" \ " rssi Received signal strength indication\n" \ " clock_ref ADF4002 chip status\n" \ " refin_freq ADF4002 reference clock frequency\n" \ " biastee Current bias-tee status\n" \ " filter RFIC FIR filter selection\n" \ "\n" \ #define CLI_CMD_HELPTEXT_probe \ "Usage: probe [strict]\n" \ "\n" \ "Search for attached bladeRF device and print a list of results.\n" \ "\n" \ "Without specifying strict, the lack of any available devices is not\n" \ "considered an error.\n" \ "\n" \ "When provided the optional strict argument, this command will treat\n" \ "the situation where no devices are found as an error, causing scripts\n" \ "or lists of commands provided via the -e command line argument to\n" \ "terminate immediately.\n" \ "\n" \ #define CLI_CMD_HELPTEXT_quit \ "Usage: quit\n" \ "\n" \ "Exit the CLI.\n" \ "\n" \ #define CLI_CMD_HELPTEXT_recover \ "Usage: recover [
]\n" \ "\n" \ "Load firmware onto a device running in bootloader mode, or list all\n" \ "devices currently in bootloader mode.\n" \ "\n" \ "With no arguments, this command lists the USB bus and address for\n" \ "FX3-based devices running in bootloader mode.\n" \ "\n" \ "When provided a bus, address, and path to a firmware file, the\n" \ "specified device will be loaded with and begin executing the provided\n" \ "firmware.\n" \ "\n" \ "In most cases, after successfully loading firmware into the device's\n" \ "RAM, users should open the device with the \"open\" command, and write\n" \ "the firmware to flash via \"load fx3 \"\n" \ "\n" \ #define CLI_CMD_HELPTEXT_run \ "Usage: run